Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
62 commits
Select commit Hold shift + click to select a range
8282b11
refactor(contracts): remove unused OrchestrationPersistedEvent schema…
binbandit Mar 9, 2026
75ca0d4
Open folder picker immediately on desktop Electron
juliusmarminge Mar 9, 2026
5c286ca
Open project folder picker immediately in Electron
juliusmarminge Mar 9, 2026
ce7b24b
Inline Electron project picker check in Sidebar
juliusmarminge Mar 9, 2026
b0e1b33
Show toast when immediate project add fails
juliusmarminge Mar 9, 2026
b030f69
Show Awaiting Input status in sidebar and extract status logic
juliusmarminge Mar 9, 2026
b946f00
Show Plan Ready status pill for settled plan threads
juliusmarminge Mar 9, 2026
9fdb45b
Remove service tier setting from Codex flow and contracts
juliusmarminge Mar 9, 2026
081a6da
Remove fast-tier icons from model selection UI
juliusmarminge Mar 9, 2026
24122b1
Stabilize toast stacking offsets to prevent hover flicker
juliusmarminge Mar 9, 2026
e9ffd57
Fix plan composer layout and sidebar flex shrink behavior
juliusmarminge Mar 9, 2026
f623810
Adapt composer footer to compact controls on narrow widths
juliusmarminge Mar 9, 2026
47117a7
Inline SidebarInset base classes and remove dead sidebar logic
juliusmarminge Mar 9, 2026
ed518ef
Fix provider picker after rebase
juliusmarminge Mar 9, 2026
993b578
Use form clientWidth for composer compact footer checks
juliusmarminge Mar 9, 2026
e354e86
Prevent compact diff sidebar from breaking chat composer layout
juliusmarminge Mar 9, 2026
7a3d4d1
fix: stabilize onToggleRuntimeMode with useCallback to preserve memo
cursoragent Mar 9, 2026
90e0c2a
perf: debounce composer draft localStorage writes
chuks-qua Mar 8, 2026
7a377fc
perf: debounce Zustand store persistence and deduplicate legacy cleanup
chuks-qua Mar 8, 2026
296eb82
perf: throttle domain event processing with 100ms batch window
chuks-qua Mar 8, 2026
6593645
perf: run provider health checks in background, notify clients on ready
chuks-qua Mar 8, 2026
074d3af
cleanup
tim-smart Mar 9, 2026
1f47cc6
Remove ProviderHealth onReady callback from service interface
juliusmarminge Mar 9, 2026
f5e4df5
Use Debouncer for store state persistence
juliusmarminge Mar 9, 2026
e765051
Use React Pacer throttler for domain event snapshot sync
juliusmarminge Mar 9, 2026
82c0a45
Use Debouncer for composer draft persistence writes
juliusmarminge Mar 9, 2026
2f5e626
Fix project name badge truncation in chat header
Mar 9, 2026
bb49ebf
Add drag-and-drop project reordering in the sidebar
juliusmarminge Mar 6, 2026
a6b22ec
Fix project drag clicks and sidebar collapse/scroll behavior
juliusmarminge Mar 6, 2026
b5dde6b
Prevent stale click suppression after project drag cancel
juliusmarminge Mar 6, 2026
3503dbc
pin vite
juliusmarminge Mar 9, 2026
f9c3aff
no longer need experimental for tsconfig aliases
juliusmarminge Mar 9, 2026
e420364
Improve project drag collision detection in sidebar
juliusmarminge Mar 9, 2026
9fb9467
fix: keep suppressProjectClickAfterDragRef true on drag cancel to pre…
cursoragent Mar 9, 2026
eb7c428
Defer proposed plan rendering until expand in ChatView
juliusmarminge Mar 9, 2026
3a86b60
Render collapsed plan preview directly as markdown
juliusmarminge Mar 9, 2026
2fc0b01
fmt
juliusmarminge Mar 9, 2026
99dbe4f
fix(web): disable add project button for empty path
sbansal1999 Mar 9, 2026
4ed89e4
Treat retryable Codex errors as runtime warnings
juliusmarminge Mar 10, 2026
dcccca3
Fix UI Overflow when Github Action is 'Commit, Create & Push PR'
dbalders Mar 10, 2026
9d2c2ca
fix(web): polyfill crypto.randomUUID for non-secure HTTP contexts
chirino Mar 9, 2026
767de27
Use Effect UUID generator as randomUUID fallback
juliusmarminge Mar 10, 2026
3d35868
Add pull-request thread setup for local and worktree modes
juliusmarminge Mar 9, 2026
f70cb5d
Refine branch picker behavior and gate /checkout-pr by thread type
juliusmarminge Mar 9, 2026
9bb9023
Handle branch selection across main and secondary worktrees
juliusmarminge Mar 9, 2026
b36888e
Preserve fork PR upstreams when preparing local and worktree threads
juliusmarminge Mar 9, 2026
ac3f22c
Inline branch picker filtering and drop PR-only shortcut
juliusmarminge Mar 9, 2026
268016d
Fix PR thread upstream tracking for fork branches
juliusmarminge Mar 9, 2026
2847655
Validate GitHub CLI JSON with Effect Schema decoders
juliusmarminge Mar 9, 2026
f757071
Avoid fork PR head branch collisions when creating worktrees
juliusmarminge Mar 9, 2026
442bc95
Normalize remote URL matching and migrate GitHubCli tests
juliusmarminge Mar 9, 2026
de21f4d
Use GitHubCliLive as default test layer
juliusmarminge Mar 9, 2026
fb4f9aa
Use repo initial branch in GitCore PR fetch integration test
juliusmarminge Mar 10, 2026
0766080
Namespace PR worktree branch names under t3code
juliusmarminge Mar 10, 2026
d28ced8
Move PR checkout flow to dialog and drop /checkout-pr command
juliusmarminge Mar 10, 2026
9309edf
rm test
juliusmarminge Mar 10, 2026
afb6e89
feat(web): add shift-click multi-select for sidebar threads (#651)
binbandit Mar 10, 2026
223c3dc
chore(ci): add and apply `fmt:check` script (#779)
jasonLaster Mar 10, 2026
3c1bdb7
Merge upstream/main into fork with conflict resolution
aaditagrawal Mar 10, 2026
7623f4c
Remove dead service tier code from appSettings
aaditagrawal Mar 10, 2026
f23e5e0
Fix all CodeRabbit review issues from PR #5
aaditagrawal Mar 10, 2026
d1e41ed
Fix follow-up CodeRabbit review issues from PR #5
aaditagrawal Mar 10, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 4 additions & 1 deletion .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ on:

jobs:
quality:
name: Lint, Typecheck, Test, Browser Test, Build
name: Format, Lint, Typecheck, Test, Browser Test, Build
runs-on: blacksmith-4vcpu-ubuntu-2404
steps:
- name: Checkout
Expand Down Expand Up @@ -45,6 +45,9 @@ jobs:
- name: Install dependencies
run: bun install --frozen-lockfile

- name: Format
run: bun run fmt:check

- name: Lint
run: bun run lint

Expand Down
5 changes: 3 additions & 2 deletions .oxfmtrc.json
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,8 @@
"node_modules",
"bun.lock",
"*.tsbuildinfo",
"**/routeTree.gen.ts"
"**/routeTree.gen.ts",
"apps/web/public/mockServiceWorker.js"
],
"experimentalSortPackageJson": {}
"sortPackageJson": {}
}
7 changes: 7 additions & 0 deletions .plans/01-shared-model-normalization.md
Original file line number Diff line number Diff line change
@@ -1,20 +1,24 @@
# Plan: Centralize Model Normalization in Contracts

## Summary

Move model alias/default normalization into `packages/contracts` so desktop and renderer use one shared source of truth.

## Motivation

- Removes duplicated logic between:
- `apps/desktop/src/codexAppServerManager.ts`
- `apps/renderer/src/model-logic.ts`
- Prevents behavior drift when model aliases/defaults are updated.

## Scope

- Add shared model utilities to contracts.
- Update desktop and renderer to consume shared utilities.
- Keep renderer-specific display options in renderer.

## Proposed Changes

1. Add `packages/contracts/src/model.ts` with:
- Canonical model list
- Alias map
Expand All @@ -29,14 +33,17 @@ Move model alias/default normalization into `packages/contracts` so desktop and
- Keep renderer tests focused on renderer-only behavior.

## Risks

- Desktop/renderer may currently rely on slightly different fallback behavior.
- Import graph must avoid bundling issues for Electron main/preload.

## Validation

- `bun run test`
- `bun run typecheck`
- Manual check that model selection and session start still send expected model slug.

## Done Criteria

- No duplicated alias/default map in desktop and renderer.
- Shared model utilities are contract-tested.
7 changes: 7 additions & 0 deletions .plans/02-typed-ipc-boundaries.md
Original file line number Diff line number Diff line change
@@ -1,17 +1,21 @@
# Plan: Strengthen Typed IPC Boundaries in Main Process

## Summary

Replace loose payload casting in IPC handlers with strict schema parsing and typed helper wrappers.

## Motivation

- `apps/desktop/src/main.ts` currently uses casts like `payload as Parameters<...>`.
- Casts can hide contract breakages until runtime.

## Scope

- Desktop main process IPC registration.
- Optional shared helper for handler registration.

## Proposed Changes

1. Add IPC helper utility (e.g. `apps/desktop/src/ipcHelpers.ts`) to:
- Parse payload(s) with Zod schemas
- Standardize typed handler signatures
Expand All @@ -24,14 +28,17 @@ Replace loose payload casting in IPC handlers with strict schema parsing and typ
4. Add tests for handler parsing failure paths (invalid payloads).

## Risks

- Refactor can subtly change IPC error shape/messages.
- Helper abstraction should stay simple and not obscure control flow.

## Validation

- `bun run test`
- `bun run typecheck`
- Manual invalid payload check from renderer/devtools to confirm fast failure.

## Done Criteria

- No provider handler uses `payload as Parameters<...>`.
- All IPC entrypoints parse unknown payloads at boundary.
7 changes: 7 additions & 0 deletions .plans/03-split-codex-app-server-manager.md
Original file line number Diff line number Diff line change
@@ -1,9 +1,11 @@
# Plan: Decompose CodexAppServerManager

## Summary

Split `CodexAppServerManager` into smaller modules with clear responsibilities.

## Motivation

- `apps/desktop/src/codexAppServerManager.ts` is large and mixes:
- Process lifecycle
- JSON-RPC parsing/routing
Expand All @@ -12,10 +14,12 @@ Split `CodexAppServerManager` into smaller modules with clear responsibilities.
- This increases regression risk and slows changes.

## Scope

- Desktop provider internals only.
- Keep external behavior/API stable.

## Proposed Changes

1. Extract modules:
- `codex/processLifecycle.ts`
- `codex/jsonrpcRouter.ts`
Expand All @@ -29,13 +33,16 @@ Split `CodexAppServerManager` into smaller modules with clear responsibilities.
- Session state transitions

## Risks

- Reordering event handling can change behavior.
- Must preserve pending request timeout/cancellation semantics.

## Validation

- Existing tests pass.
- Add module-level tests for parsing and transition logic.

## Done Criteria

- Main manager file materially smaller and orchestration-focused.
- Core protocol/state logic covered by focused tests.
7 changes: 7 additions & 0 deletions .plans/04-split-chatview-component.md
Original file line number Diff line number Diff line change
@@ -1,9 +1,11 @@
# Plan: Split ChatView into Smaller UI/Logic Units

## Summary

Refactor `ChatView.tsx` into composable pieces with isolated responsibilities.

## Motivation

- `apps/renderer/src/components/ChatView.tsx` is large and handles:
- Session orchestration
- Send/interrupt actions
Expand All @@ -13,10 +15,12 @@ Refactor `ChatView.tsx` into composable pieces with isolated responsibilities.
- Hard to test and maintain as one component.

## Scope

- Renderer component boundaries and hooks.
- Keep visual behavior unchanged.

## Proposed Changes

1. Create hook: `apps/renderer/src/hooks/useChatSession.ts`
- `ensureSession`
- `sendTurn`
Expand All @@ -29,12 +33,15 @@ Refactor `ChatView.tsx` into composable pieces with isolated responsibilities.
4. Add focused tests for hook behavior (error handling, session reuse).

## Risks

- Refactor can break subtle UI interactions (auto-scroll, menu close, keyboard send).

## Validation

- `bun run test`
- Manual smoke: send, stream, interrupt, model switch.

## Done Criteria

- `ChatView.tsx` significantly reduced and easier to scan.
- Session logic isolated from rendering.
7 changes: 7 additions & 0 deletions .plans/05-zod-persisted-state-validation.md
Original file line number Diff line number Diff line change
@@ -1,17 +1,21 @@
# Plan: Move Renderer Persisted-State Validation to Zod

## Summary

Use explicit Zod schemas for localStorage state parsing and migration.

## Motivation

- `apps/renderer/src/store.ts` has large manual sanitize functions.
- Manual type guards are verbose and easier to get wrong during schema evolution.

## Scope

- Renderer state hydration/persistence path.
- No backend/protocol changes.

## Proposed Changes

1. Add schema module: `apps/renderer/src/persistenceSchema.ts`
- Persisted payload versions (`v1`, `v2`)
- Thread/message/project schemas
Expand All @@ -23,12 +27,15 @@ Use explicit Zod schemas for localStorage state parsing and migration.
- Unknown thread/project references filtered

## Risks

- Overly strict schemas could drop valid historical data unexpectedly.

## Validation

- Unit tests for migration/hydration.
- Manual reload test with existing localStorage data.

## Done Criteria

- Store hydration logic is schema-driven.
- Migration behavior is tested and documented.
7 changes: 7 additions & 0 deletions .plans/06-provider-logstream-lifecycle.md
Original file line number Diff line number Diff line change
@@ -1,17 +1,21 @@
# Plan: Add Provider Log Stream Lifecycle Management

## Summary

Ensure `ProviderManager` logging stream is initialized, rotated/structured, and closed safely.

## Motivation

- `apps/desktop/src/providerManager.ts` opens a write stream in constructor.
- Stream lifecycle is not explicit on shutdown.

## Scope

- Desktop provider logging behavior.
- App shutdown integration.

## Proposed Changes

1. Add explicit `dispose()` on `ProviderManager`:
- Remove event listeners
- End/close log stream
Expand All @@ -20,12 +24,15 @@ Ensure `ProviderManager` logging stream is initialized, rotated/structured, and
4. Optional: per-session log files under `.logs/providers/`.

## Risks

- Improper close sequencing may lose final log lines.

## Validation

- Manual run/quit cycle to ensure no open handle warnings.
- Confirm logs flush on quit and file descriptors are not leaked.

## Done Criteria

- ProviderManager owns complete log stream lifecycle.
- Shutdown path explicitly disposes provider resources.
7 changes: 7 additions & 0 deletions .plans/07-ci-quality-gates.md
Original file line number Diff line number Diff line change
@@ -1,17 +1,21 @@
# Plan: Add CI Workflow for Core Quality Gates

## Summary

Add GitHub Actions workflow to run lint/typecheck/test (and optionally smoke-test) on pushes and PRs.

## Motivation

- Repository currently has no CI workflow files.
- Quality checks are only local/manual.

## Scope

- `.github/workflows/ci.yml`
- Bun + Turbo setup in CI.

## Proposed Changes

1. Add `ci.yml` with jobs:
- Setup Bun and Node environment
- Install deps
Expand All @@ -22,13 +26,16 @@ Add GitHub Actions workflow to run lint/typecheck/test (and optionally smoke-tes
3. Configure caching for Bun/Turbo as appropriate.

## Risks

- Smoke test may be flaky in headless CI environments.
- CI runtime can grow if caching is misconfigured.

## Validation

- Verify workflow runs on a branch PR.
- Ensure failures surface clearly by job name.

## Done Criteria

- CI blocks regressions in lint/typecheck/test.
- Workflow docs added to README.
7 changes: 7 additions & 0 deletions .plans/08-precommit-format-and-lint.md
Original file line number Diff line number Diff line change
@@ -1,17 +1,21 @@
# Plan: Add Pre-Commit Formatting/Lint Hooks

## Summary

Introduce pre-commit automation so formatting and basic lint checks happen before commits.

## Motivation

- Current lint failures include formatting-only issues.
- Shift-left feedback reduces noisy CI failures and cleanup churn.

## Scope

- Root tooling config and package scripts.
- No runtime code changes.

## Proposed Changes

1. Add hook tooling (e.g. Husky + lint-staged or Lefthook).
2. Configure staged-file tasks:
- `biome format --write`
Expand All @@ -20,13 +24,16 @@ Introduce pre-commit automation so formatting and basic lint checks happen befor
4. Keep checks fast to avoid developer friction.

## Risks

- Slow hooks can frustrate contributors and be bypassed.
- Need to ensure compatibility with Bun workspace setup.

## Validation

- Create sample staged changes and verify hook behavior.
- Confirm formatting fixes are applied automatically.

## Done Criteria

- Pre-commit hook installed and documented.
- Formatting-only lint failures drop significantly.
7 changes: 7 additions & 0 deletions .plans/09-event-state-test-expansion.md
Original file line number Diff line number Diff line change
@@ -1,17 +1,21 @@
# Plan: Expand Event/State Transition Test Coverage

## Summary

Add focused tests for renderer event handling and session evolution logic.

## Motivation

- Core behavior is event-driven and stateful.
- Existing renderer tests cover only a subset of timeline/model behavior.

## Scope

- `apps/renderer/src/session-logic.test.ts`
- Optional reducer tests for `apps/renderer/src/store.ts`.

## Proposed Changes

1. Add tests for `evolveSession`:
- `thread/started`
- `turn/started`
Expand All @@ -24,12 +28,15 @@ Add focused tests for renderer event handling and session evolution logic.
3. Add reducer integration tests for `APPLY_EVENT`.

## Risks

- Tests may be brittle if event payload fixtures are too coupled to implementation details.

## Validation

- `bun run test`
- Ensure new tests remain deterministic and fast.

## Done Criteria

- High-risk event transitions are covered by unit tests.
- Regressions in stream assembly/session status are caught quickly.
Loading
Loading