fix: invalidate workspace entry cache after turn completion and revert by binbandit · Pull Request #796 · pingdotgg/t3code
* Add provider-specific model resolution and defaults
- Add per-provider model options, defaults, and slug aliases
- Add provider-aware model normalization/resolution helpers
- Preserve Codex-only constants/functions for backward compatibility
- Extend tests to cover Claude aliases and provider-specific fallback behavior
* redo contracts a bit
* revised plan
* Add Claude Code adapter live layer with error mapping tests
- introduce `ClaudeCodeAdapter` service and live layer wiring
- map runtime/session/request failures into provider adapter error types
- add coverage for validation, session-not-found mapping, lifecycle forwarding, and event passthrough
* Wire Claude adapter into registry and server provider layer
Add provider-service routing coverage for explicit claudeCode sessions.
Co-authored-by: codex <codex@users.noreply.github.com>
* Support provider-aware session selection in reactor
Add restart semantics when requested provider changes and cover with tests.
Co-authored-by: codex <codex@users.noreply.github.com>
* Enable Claude provider selection in chat composer
Add provider-aware model options and include provider in turn-start dispatch.
Co-authored-by: codex <codex@users.noreply.github.com>
* Add Claude checkpoint and revert reactor coverage
Co-authored-by: codex <codex@users.noreply.github.com>
* Add Claude integration coverage across orchestration flows
Co-authored-by: codex <codex@users.noreply.github.com>
* Make Claude runtime boundary Effect-native
Co-authored-by: codex <codex@users.noreply.github.com>
* Use typed errors for unavailable Claude runtime path
Co-authored-by: codex <codex@users.noreply.github.com>
* unnecessary catch
* Inline Claude adapter behavior into live layer
Co-authored-by: codex <codex@users.noreply.github.com>
* Use grouped provider/model select in chat composer
Co-authored-by: codex <codex@users.noreply.github.com>
* Show provider logos in composer model trigger
Co-authored-by: codex <codex@users.noreply.github.com>
* Update Claude model catalog to latest 4.6/4.5 gen
Co-authored-by: codex <codex@users.noreply.github.com>
* Fix Claude model fallback in web store sync
Co-authored-by: codex <codex@users.noreply.github.com>
* Include all provider models in /model slash command
Co-authored-by: codex <codex@users.noreply.github.com>
* Integrate Claude agent SDK into server provider adapter
- add `@anthropic-ai/claude-agent-sdk` dependency for `apps/server`
- replace placeholder Claude adapter with live session/query/event handling
- add comprehensive adapter tests for runtime events, approvals, resume, rollback, and model overrides
* Refactor ClaudeCodeAdapter session flow and stream handling
- Replace manual prompt async iterator with `Stream.fromQueue(...).toAsyncIterable`
- Use `Ref` for shared session context in tool approval callbacks
- Simplify timestamp/ID generation and close sessions via queue shutdown
* Fix Claude resume cursor to only persist valid session UUIDs
- Stop synthesizing `resume` from generated thread IDs
- Persist resume session ID from query messages when available
- Validate resume/sessionId values as UUIDs before reuse
- Add tests for valid UUID resume passthrough and no synthesized resume
* Align orchestration integration tests with latestTurn metadata
Co-authored-by: codex <codex@users.noreply.github.com>
* Ignore stale resume cursors and Claude placeholder thread IDs
- Do not pass `resumeCursor` when restarting a session after changing providers
- Treat synthetic Claude thread IDs (`claude-thread-*`) as unscoped during runtime ingestion
- Add tests covering provider-switch restart behavior and Claude turn lifecycle acceptance
* Fix ProviderService sendTurn recovery expectation after rebase
Co-authored-by: codex <codex@users.noreply.github.com>
* Stabilize Claude turn event ordering and native event logging
- Preserve active turn state when `session.started`/`thread.started` arrive mid-turn
- Emit `message.delta` from assistant text when stream deltas are missing, then complete the message
- Add Claude native SDK NDJSON observability logging and wire its log path in server layers
- Expand ingestion/adapter tests to cover mid-turn lifecycle and delta fallback behavior
* Align Claude permissions and provider-specific reasoning effort
- Default Claude sessions to bypass permissions when approval policy is `never`, while preserving explicit `permissionMode`
- Hide/send reasoning effort only for providers that support it in ChatView
- Add coverage for Claude permission-mode derivation and precedence, and update runtime event model docs
* Track runtime event sequence and order thread activities by sequence
- add per-session `sessionSequence` on provider runtime events and persist activity `sequence`
- migrate `projection_thread_activities` with nullable `sequence` column + index
- sort server/web activity projections by sequence fallback to timestamp/id
- allow provider sessions/turns to start before a real threadId is emitted
* Add Cursor CLI stream event schemas and decoding tests
- define `CursorAdapter` service contract and Cursor stream-json schema types
- add `CursorCliStreamEvent` decoding tests for system/thinking/tool/result/retry events
- add implementation plan for Cursor provider integration
Co-authored-by: codex <codex@users.noreply.github.com>
* Add Cursor provider support across backend, contracts, and UI
- Accept `cursor` as a first-class provider in orchestration, persistence, and session directory flows
- Update model/provider inference and normalization to handle Cursor model aliases
- Revamp chat provider/model picker with Cursor-specific trait controls and add coverage in tests
* Add Cursor ACP probe script and captured session logs
- add `scripts/cursor-acp-probe.mjs` to run ACP protocol probing scenarios
- update `package.json` scripts for probe execution
- include generated probe summaries/transcripts under `.tmp/acp-probe/`
* Revise Cursor provider plan for ACP JSON-RPC integration
- Switch plan from `agent -p` stream-json to `agent acp` JSON-RPC transport
- Document ACP session, permission, event-mapping, and interrupt/recovery behavior
- Update implementation phases, tests, and delivery checklist for ACP-first design
* Document Cursor ACP mapping in canonical runtime event spec
- Add Cursor ACP raw source types to `RuntimeEventRaw.source`
- Define canonical mappings for ACP lifecycle, updates, permissions, and errors
- Expand cross-provider equivalence table to include Cursor ACP and renumber sections
* Introduce v2 provider runtime event schema and validation tests
- Restructure runtime events around a shared base plus typed payloads
- Add runtime-branded IDs and new event types (plan, item, request, user-input)
- Remove legacy canonical event names from docs and add schema decode/rejection tests
* Scope reasoning effort defaults and options by provider
- Replace global reasoning constants with provider-scoped effort options/defaults
- Update ChatView to use Codex-specific reasoning effort types and default lookup
- Expand model contract tests for provider-specific reasoning effort behavior
* Unify provider runtime events and add Cursor adapter layer
- migrate Claude/Codex/registry adapters to canonical runtime event types and payload shapes
- add Cursor layer adapter plus tests and wire it through server layers
- update provider contracts/runtime schemas and related adapter tests
* Scope composer draft reasoning effort to Codex options
- Switch draft store types to `CodexReasoningEffort`
- Validate and default effort using Codex-specific option/default constants
* Fix effort and provider handling in thread turn start
- Only include `effort` in start command when a value is selected
- Persist effort selection via composer draft state and hide picker when unavailable
- Add optional `provider` to `ClientThreadTurnStartCommand`
- Simplify thread model fallback selection in `ChatView`
* Respect provider model-switch limits and canonical runtime events
- Add provider capability plumbing for `sessionModelSwitch` and use it in session/turn routing
- Keep Cursor sessions stable when in-session model switching is unsupported
- Ingest canonical runtime events (`content.delta`, `item.*`, `request.*`) with legacy-shape compatibility
* Normalize approval request kinds and persist draft provider state
- map canonical approval request types to `requestKind` across ingestion and web pending approvals
- auto-approve Cursor permission requests when approval policy is `never`
- persist per-thread composer provider selection in draft store and use it in ChatView
- disable Cursor traits picker while model selection is locked
* Handle stale approval responses and cover Cursor resume IDs
- Catch provider approval response failures and emit `provider.approval.respond.failed`
- Auto-resolve approvals when provider reports unknown pending request IDs
- Add tests for Cursor ACP resume via `resumeCursor.acpSessionId` and legacy `sessionId`
* Normalize runtime events and tighten orchestration approval flow
- migrate fixtures/tests/adapters to canonical provider runtime event payloads
- route checkpoint capture off `turn.completed` only and drop legacy `checkpoint.captured` path
- stop faking approval resolution when provider reports stale/unknown pending requests
* Inject native event loggers into provider adapters
- allow Claude/Cursor adapters to accept an injected native event logger
- make native event writes effectful/non-blocking so logging cannot break message handling
- update adapter tests to assert native observability events via in-memory loggers
- fix runtime session ID conversion when resolving canonical event thread IDs
* Support provider custom models and fix runtime event mapping
- add per-provider custom model settings/options in web settings and chat picker
- preserve Codex request type on `serverRequest/resolved` events
- validate empty Cursor prompts before turn start and keep tool-call item types consistent
- add tests for new adapter and model-settings behavior
- add PR event review checklist document
* Handle session.state.changed in provider runtime ingestion
- Map runtime session state transitions to orchestration session status
- Persist error reasons from `session.state.changed` error events
- Add coverage for waiting/error/stopped/ready transition handling
* Add runtime mode tracking across provider orchestration pipeline
- extend provider and orchestration contracts for runtime mode-aware events
- persist runtime mode fields in projection thread session storage and migration 006
- update adapters, reactors, projections, websocket/web session logic, and tests
- add plan mode deep dive docs and probe artifacts for ACP behavior
* Rewrite plan-mode deep dive as implementation blueprint
- Reframe doc into a provider-agnostic implementation plan for Codex, Claude, and Cursor
- Define canonical mode, plan, and structured user-input models plus capability-driven UI behavior
- Add concrete orchestration, adapter, frontend, and test work items for rollout
* Clarify Cursor plan-mode semantics and ACP extension mapping
- Define Cursor operating mode as binary `default | plan`
- Document mapping for `cursor/ask_question`, `cursor/create_plan`, and `cursor/update_todos`
- Update capability and fallback guidance based on docs plus probe evidence
* Persist thread runtime mode and handle mode-switch session restarts
- Add `thread.runtime-mode.set` -> `thread.runtime-mode-set` flow in decider/reactors/projectors
- Persist runtime mode on thread/session projections with new DB migrations
- Update provider and Codex integration tests to verify thread continuity across mode changes
Co-authored-by: codex <codex@users.noreply.github.com>
* Improve session restart handling and server logging
- add structured lifecycle logs for Codex thread open/resume and provider session restarts
- introduce persistent server file logging layer and tighten WebSocket server startup/finalizer ordering
- preserve env-based boolean overrides in dev runner and stop forcing WS event logging in dev
- enrich provider session listing from persisted bindings and fix Claude rate-limit/task-id event mapping
- update orchestration and dev-runner tests for runtime-mode restart and env-flag behavior
* Migrate provider runtime/session flow to thread-scoped IDs
- Replace provider session-id centric plumbing with thread-id based runtime handling across server orchestration and provider layers
- Update persistence repositories/migrations and contracts for threadless runtime semantics
- Refresh integration/unit tests and web session/store types to match the new runtime model
* Add plan interaction mode and user-input request handling
- Wire Codex plan mode through turn start, including collaboration settings
- Track and answer pending `requestUserInput` prompts instead of auto-empty responses
- Persist/project thread `interactionMode` (schema, migration, queries) and update tests/contracts
* Persist proposed plans as first-class thread projection data
- Add `thread.proposed-plan-upserted` orchestration flow from ingestion through decider/projector
- Store proposed plans in a dedicated projection table and include them in snapshot queries
- Update provider runtime/web handling and tests to use proposed plans instead of assistant message wrappers
* style
* Prune internal contract exports and remove checkpoint RPC schemas
- Stop exporting internal-only schema constants/types across contracts modules
- Remove unused provider checkpoint list/revert/diff RPC contract schemas
- Keep public contract surface focused on externally consumed types
* Fix post-rebase typecheck regressions
Co-authored-by: codex <codex@users.noreply.github.com>
* Plumb Codex model options through orchestration and composer
- Replace ad-hoc `effort` handling with provider `modelOptions` across decider/reactor/adapters
- Map Codex `reasoningEffort` and `fastMode` to turn/session params (`effort`, `serviceTier`)
- Persist runtime/interaction/model selections from composer and sync them before sending turns
- Move model normalization/helpers into `@t3tools/shared/model` with updated contracts/tests
* Add GPT-5.4 to Codex model options
- include `gpt-5.4` in Codex app model option coverage
- only keep truly custom Cursor models in the custom model option list
* Remove Cursor adapter from stack base
Co-authored-by: codex <codex@users.noreply.github.com>
* Remove Claude adapter from stack base
Co-authored-by: codex <codex@users.noreply.github.com>
* test: move Claude coverage out of core PR
Co-authored-by: codex <codex@users.noreply.github.com>
* rm tmp
* sync lock
* Show unavailable providers as coming-soon placeholders
- Keep Claude Code and Cursor in provider list as disabled options
- Remove unused Claude agent SDK dependency from server
- Delete stale plan-mode deep-dive doc
* contracts: move Claude schemas out of core
Co-authored-by: codex <codex@users.noreply.github.com>
* model: move Claude catalogs out of core
Co-authored-by: codex <codex@users.noreply.github.com>
* split: move Claude provider surface to sibling stack
Co-authored-by: codex <codex@users.noreply.github.com>
* split: move Claude SDK and plan doc to sibling stack
Co-authored-by: codex <codex@users.noreply.github.com>
* Restore Claude adapter on sibling stack
Co-authored-by: codex <codex@users.noreply.github.com>
* test: restore Claude coverage on sibling stack
Co-authored-by: codex <codex@users.noreply.github.com>
* contracts: restore Claude schemas on sibling stack
Co-authored-by: codex <codex@users.noreply.github.com>
* model: restore Claude catalogs on sibling stack
Co-authored-by: codex <codex@users.noreply.github.com>
* split: restore Claude provider surface on sibling stack
Co-authored-by: codex <codex@users.noreply.github.com>
* split: restore Claude SDK manifest and plan doc
Co-authored-by: codex <codex@users.noreply.github.com>
* build: sync Claude SDK lockfile on sibling stack
Co-authored-by: codex <codex@users.noreply.github.com>
* Squashed commit of the following:
commit cc2ab000745f71a07220d1ad620b1f23b4f6f430
Author: Stefan Wintergerst <wintergerst.stefan@googlemail.com>
Date: Sat Mar 14 17:03:35 2026 +0100
chore: add .idea/ to .gitignore (#1077)
commit 8b8e8b38e57ab782d085e5ecf2ae970f6e796a3f
Author: Xanacas <53140620+Xanacas@users.noreply.github.com>
Date: Sat Mar 14 16:51:37 2026 +0100
fix(web): unify focus ring styles across sidebar and app (#1079)
Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
commit 46ea594f02fb5f1e0b82430ddbd07ccf41a77a0d
Author: Vitor Buzinaro <funny.hc@gmail.com>
Date: Fri Mar 13 22:05:12 2026 -0300
Actions dialog: autofocus script-name field (#912)
commit 790fda1a97476e4d7048a521651180ed0ba811c3
Author: 0x1f99d <crazywolf132@gmail.com>
Date: Sat Mar 14 05:29:22 2026 +1100
feat(github): add issue templates for automatic triage (#896)
commit 89ffcf42eb781eddf357c07199607e3d7bccf0c5
Author: Julius Marminge <julius0216@outlook.com>
Date: Thu Mar 12 23:24:42 2026 -0700
Upgrade oxfmt and oxlint tooling versions (#1010)
commit 876bbd715ae6aa8e1d663455747e17c92e0a287c
Author: Julius Marminge <julius0216@outlook.com>
Date: Thu Mar 12 21:03:21 2026 -0700
Extract reusable clipboard hook and standardize media queries (#1006)
Co-authored-by: macroscopeapp[bot] <170038800+macroscopeapp[bot]@users.noreply.github.com>
Co-authored-by: Cursor Agent <cursoragent@cursor.com>
Co-authored-by: Julius Marminge <juliusmarminge@users.noreply.github.com>
Co-authored-by: codex <codex@users.noreply.github.com>
Co-authored-by: cursor[bot] <206951365+cursor[bot]@users.noreply.github.com>
commit ac0d1f52a087c63819b2b032ac4535d18d3c23af
Author: 0x1f99d <crazywolf132@gmail.com>
Date: Fri Mar 13 14:47:29 2026 +1100
fix(web): defer diff worker startup until diff opens (#934)
Co-authored-by: Julius Marminge <julius0216@outlook.com>
commit d0ae0adc9923e51f7027ee16afedb14b3ae7779c
Author: 0x1f99d <crazywolf132@gmail.com>
Date: Fri Mar 13 14:18:20 2026 +1100
fix(web): add default thread env mode setting (#892)
Co-authored-by: Julius Marminge <julius0216@outlook.com>
commit 995a26660edbce7cca15da812972c23151a35f3d
Author: Jono Kemball <Noojuno@users.noreply.github.com>
Date: Fri Mar 13 16:18:03 2026 +1300
chore: Upgrade marketing app to Astro 6 (#1005)
commit dfd62cfb868935787560b88b0c399f0ce9081a9f
Author: dpav02 <dpav02@gmail.com>
Date: Thu Mar 12 22:43:07 2026 -0400
fix(desktop): show dialog after "Check for Updates" menu action (#955)
Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
commit 64dc07a8e5a6d7e34de4e85a07126a9c04e462d3
Author: Zortos <zortosdev@proton.me>
Date: Fri Mar 13 03:42:59 2026 +0100
Add compact Codex tool-call icons and details to the chat timeline (#988)
Co-authored-by: Julius Marminge <julius0216@outlook.com>
commit ae4ae9973cd6cebc7d557e64e876534f15c916fd
Author: Jono Kemball <Noojuno@users.noreply.github.com>
Date: Fri Mar 13 15:30:47 2026 +1300
chore: update @vitejs/plugin-react to 6.0.0 (#1002)
commit 36473f7de6f32bb2765e0ad2b08e2a0c2e737d63
Author: Zortos <zortosdev@proton.me>
Date: Fri Mar 13 03:26:14 2026 +0100
feat: replace worktree toggle with discoverable Select dropdown (#1001)
Co-authored-by: Julius Marminge <julius0216@outlook.com>
commit a14debc83e04ee4b28d9e3eb830f0cf74d489f93
Author: (CJ) Chukwudi Nwobodo <142016413+chuks-qua@users.noreply.github.com>
Date: Fri Mar 13 00:24:53 2026 +0000
fix: block image uploads during plan mode questions (#621)
commit 71a7473a81c75a70bef55844a410e5d7f1e5de10
Author: (CJ) Chukwudi Nwobodo <142016413+chuks-qua@users.noreply.github.com>
Date: Thu Mar 12 23:33:37 2026 +0000
fix: composer @file autocomplete cursor and spacing bugs (#936)
commit 5c03fb62c4ede0a347938b796a611d5f6b9d61fb
Author: WilgotM <wilgot10@yahoo.com>
Date: Fri Mar 13 00:28:32 2026 +0100
Add Antigravity to supported editors in Open menu (macOS, Windows, and Linux) (#841)
Co-authored-by: Julius Marminge <julius0216@outlook.com>
commit 727c0cfcbf1733edd9f23974f67c755ccbf6eee5
Author: Hugo Blom <6117705+huxcrux@users.noreply.github.com>
Date: Thu Mar 12 23:58:51 2026 +0100
feat: Allow Overriding Timestamp Format in Settings (#855)
commit dcd2e5c34fbbf6cba7cdb23caef86568771a78d4
Author: Noah Gregory <noah@wts.dev>
Date: Thu Mar 12 16:03:55 2026 -0400
fix: don't restart the app on normal exists in dev runner (#986)
Co-authored-by: Julius Marminge <julius0216@outlook.com>
commit 1e276573c2925827691bb9840c21e8e130834aad
Author: Kiyotaka <maskdotdev@gmail.com>
Date: Thu Mar 12 15:00:08 2026 -0500
feat: add fuzzy workspace entry search (#256)
Co-authored-by: Julius Marminge <julius0216@outlook.com>
commit db17ff332307e6c80d034e6c13932d4bc253bca3
Author: Julius Marminge <julius0216@outlook.com>
Date: Thu Mar 12 12:40:08 2026 -0700
fix syntax errors from bad merge
commit b496ae839529b910d5a35e9e05d6be704a41b5a5
Author: Qiaochu Hu <110hqc@gmail.com>
Date: Fri Mar 13 03:35:21 2026 +0800
fix: add error logging for code highlighting failures (#951)
commit 724f54c2c1f4a1efcd7423a5ff0e3db625629815
Author: Qiaochu Hu <110hqc@gmail.com>
Date: Fri Mar 13 03:32:00 2026 +0800
fix: clean up timeout in PlanSidebar to prevent memory leaks (#949)
Co-authored-by: hobostay <hobostay@users.noreply.github.com>
commit b6eba3347d7a4153981269b064c4cee3b0166ebb
Author: Qiaochu Hu <110hqc@gmail.com>
Date: Fri Mar 13 03:31:19 2026 +0800
fix: add logging for WebSocket errors (#948)
Co-authored-by: hobostay <hobostay@users.noreply.github.com>
commit 74c22628b3f94b10cf9cef275fef19c5d210deb4
Author: Adam Naji <110662505+Bashamega@users.noreply.github.com>
Date: Thu Mar 12 21:29:07 2026 +0200
chore: update actions/checkout and actions/github-script (#956)
Co-authored-by: Julius Marminge <julius0216@outlook.com>
commit 224acebb57815193ef93c2d1861e606a626d23b3
Author: 0x1f99d <crazywolf132@gmail.com>
Date: Fri Mar 13 06:15:01 2026 +1100
fix(web): add pointer cursor to running stop-generation button (#900)
Co-authored-by: Julius Marminge <julius0216@outlook.com>
commit 85c174a6cac04b4fda68f311a904af0435c85807
Author: Alex Schwartz <alexschwartz01@gmail.com>
Date: Thu Mar 12 15:09:41 2026 -0400
fix: Linux icon now shows up (#807)
commit 581d242925f80079b8add8433e0b1614bd362d88
Author: Julius Marminge <julius0216@outlook.com>
Date: Thu Mar 12 12:01:55 2026 -0700
remove triggers
commit d9d0216e98062bb69c0b3f7cb67cd9a3c5742216
Author: Julius Marminge <julius0216@outlook.com>
Date: Thu Mar 12 12:01:27 2026 -0700
fix pr size workflow
commit c52ad29b31e890164d0e22443f36c1e39483d3bc
Author: Julius Marminge <julius0216@outlook.com>
Date: Thu Mar 12 11:41:13 2026 -0700
Fix mod+N new thread flow and terminal split limits
- ensure `chat.new` creates a fresh draft after a promoted draft thread
- enforce terminal cap per split group (4) while allowing additional terminal groups
- refine sidebar row selected/active styling via shared class-name logic and tests
commit fcbf3f3c225ab41c44af3759ae27d8520ced61a4
Author: Julius Marminge <julius0216@outlook.com>
Date: Thu Mar 12 11:19:55 2026 -0700
Fix new-thread shortcuts when terminal is focused
- move chat-wide key handling into `_chat` route-level shortcut handler
- extract reusable `useHandleNewThread` hook and `isTerminalFocused` helper
- update browser WS fixture to support `terminalOpen` RPC shape
commit ab0002f99d6fb5555c57bc91f696e6a9f8f4dfd7
Author: Donald Silveira <donaldsilveira@gmail.com>
Date: Thu Mar 12 15:48:23 2026 -0300
update project removal copy (#981)
commit f63cda22fa6e9b98de1caec057960dce28248d37
Author: Noah Gregory <noah@wts.dev>
Date: Thu Mar 12 14:24:10 2026 -0400
fix: improve business logic in prompt editor and fix cursor bugs in Plan mode (#867)
Co-authored-by: Julius Marminge <julius0216@outlook.com>
commit b60a34eba46ffb3e97d90a644280ba743870d85d
Author: Noah Gregory <noah@wts.dev>
Date: Thu Mar 12 14:13:37 2026 -0400
fix: fix logo aligment regression on macOS (#960)
commit ed4be2c849c56c105dd7ccef6b3b5908ebbc2acd
Author: Jono Kemball <Noojuno@users.noreply.github.com>
Date: Fri Mar 13 07:12:18 2026 +1300
fix: Fix response duration for agent to no longer always be 1ms (#866)
commit 5e23e9c7c744724b3d17d4562aa01ce64d25066b
Author: Noah Gregory <noah@wts.dev>
Date: Thu Mar 12 14:10:58 2026 -0400
add Ymit24 to vouched list (#959)
commit c3bfcc36b870adbdb01552a7c6b9313a836d7d75
Author: Guilherme Vieira <46866023+GuilhermeVieiraDev@users.noreply.github.com>
Date: Thu Mar 12 17:50:49 2026 +0000
feat: add selective file staging to commit dialog (#872)
Co-authored-by: Julius Marminge <julius0216@outlook.com>
commit a33cc8c75874bf89050ae90c58c5b6227debd4e2
Author: eggfriedrice <eggfriedricew.g.o@gmail.com>
Date: Thu Mar 12 17:44:16 2026 +0000
fix: diff panel unclosable after retainSearchParams middleware (#937)
commit a01d712751f8103001b5e728d64c12bc7c3d652a
Author: Magnus Buvarp <magnus.buvarp@gmail.com>
Date: Thu Mar 12 18:42:17 2026 +0100
fix(web): resolve preferred editor from available editors & introduce `useLocalStorage` helper (#662)
Co-authored-by: Julius Marminge <julius0216@outlook.com>
commit 774cff9a74bbd937021e27da524b96dbb7319a7c
Author: 0x1f99d <crazywolf132@gmail.com>
Date: Fri Mar 13 03:10:07 2026 +1100
ci(github): add pull request size labels (#901)
commit e3d46b687ce2537b4761ab9ae1c50db6708d3948
Author: Ymit24 <christianryansmith@gmail.com>
Date: Wed Mar 11 21:21:22 2026 -0500
feat: split out components from ChatView.tsx (#860)
Co-authored-by: Christian Smith <chris@Christians-MacBook-Air.local>
commit 8636ea0ec4163714a445cf4b11d53bbf88fd9ee7
Author: Theo Browne <me@t3.gg>
Date: Wed Mar 11 17:16:51 2026 -0700
Add maria-rcks to the list of contributors
commit ff6a66dcabfcfcf28c8c8feb126a7b90842d6368
Author: David Balderston <dbalders@gmail.com>
Date: Wed Mar 11 14:05:17 2026 -0700
Use live thread activities for sidebar status pills (#919)
commit 2ac735657e2ecf8b227c5e7685d2606063f055cf
Author: maria <maria@kuuro.net>
Date: Wed Mar 11 18:03:49 2026 -0300
chore(release): align package versions before building artifacts (#933)
commit bbab1fc891650bcd303f69f873b609ab295b7f4c
Author: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Date: Wed Mar 11 17:27:36 2026 +0000
chore(release): prepare v0.0.10
commit 82a50da8b1f72da407a0c596a7be6b62e2ead284
Author: Julius Marminge <julius0216@outlook.com>
Date: Tue Mar 10 18:49:04 2026 -0700
revert formatting on mockServiceWorker.js
commit 7ddcb239c5ce4031653afbc404a860ccf5606549
Author: eggfriedrice <eggfriedricew.g.o@gmail.com>
Date: Wed Mar 11 01:42:39 2026 +0000
feat: persist diff panel state across thread navigation (#875)
commit 9e4e22197045a2d2ba7ba7d7813054e49234f6f1
Author: 0x1f99d <crazywolf132@gmail.com>
Date: Wed Mar 11 11:55:36 2026 +1100
chore: added `eggfriedrice24` to vouched list (#869)
commit e8b0126371a0d72b2a2ad71a4829e452a109a566
Author: eggfriedrice <eggfriedricew.g.o@gmail.com>
Date: Tue Mar 10 23:54:47 2026 +0000
fix: checkpoint diffs never resolve (shared PubSub subscription) (#595)
commit 90d9a2ad1f1810b27d88f0dfc38304ec5b1de566
Author: ranvier2d2 <155869139+ranvier2d2@users.noreply.github.com>
Date: Tue Mar 10 20:50:18 2026 -0300
fix: map gitignore to ini for Shiki syntax highlighting (#848)
Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
commit 065ef922bdd29693738cd72f6e5e737bd93133f8
Author: Julius Marminge <julius0216@outlook.com>
Date: Tue Mar 10 16:21:28 2026 -0700
Require bun fmt for completion and clarify Electron history
- Update AGENTS.md task completion requirements to include `bun fmt`
- Add an inline note explaining why Electron uses hash history
commit 7d115334902046e42e843779f91e275ff1c96a27
Author: Jason Laster <jason.laster.11@gmail.com>
Date: Tue Mar 10 15:54:34 2026 -0700
Stabilize runtime orchestration and fix flaky CI tests (#488)
Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
Co-authored-by: codex <codex@users.noreply.github.com>
Co-authored-by: Julius Marminge <julius0216@outlook.com>
commit 1031a226f8cf90d358d9768fc0842dcdae61a315
Author: Julius Marminge <julius0216@outlook.com>
Date: Tue Mar 10 15:05:41 2026 -0700
Fix cross-repo PR detection and push remote selection (#788)
commit ddd98876b5fe3dcb789a36ab799e6e211a1bcb5a
Author: 0x1f99d <crazywolf132@gmail.com>
Date: Wed Mar 11 08:42:39 2026 +1100
fix: invalidate workspace entry cache after turn completion and revert (#796)
commit dfd41da2fdc7e9268fe0e46d3ab29d1f2161b3a2
Author: Adam Naji <110662505+Bashamega@users.noreply.github.com>
Date: Tue Mar 10 23:41:02 2026 +0200
Fix Windows keybindings for font size: use Ctrl+ to increase (#786)
commit b37279ca2117a8de4d14256c0c29c4d4429e6aa7
Author: Utkarsh Patil <73941998+UtkarshUsername@users.noreply.github.com>
Date: Wed Mar 11 00:16:49 2026 +0530
fix: prevent Codex overrides footer overflow with long binary paths (#707)
commit 13eeb07f5f4b582e2ff824db382ff8917489c5c6
Author: Julius Marminge <julius0216@outlook.com>
Date: Tue Mar 10 10:38:11 2026 -0700
prevent squashing some know errors
commit 1e9bac7f6e783fe0498ddeb8392c5f4b50aad19d
Author: Jono Kemball <Noojuno@users.noreply.github.com>
Date: Wed Mar 11 06:23:52 2026 +1300
Sync desktop native theme with web theme setting (#800)
commit 1c290767f22f9d8c7d3fa378d9450c8f48184679
Author: 0x1f99d <crazywolf132@gmail.com>
Date: Wed Mar 11 04:16:37 2026 +1100
fix: use commit as the default git action without origin (#642)
* fix(web): avoid push and PR defaults without origin
* fmt
* object here too
---------
Co-authored-by: Julius Marminge <julius0216@outlook.com>
commit 9becb3f40af504244f85823bb19f18bfe507ca49
Author: 0x1f99d <crazywolf132@gmail.com>
Date: Wed Mar 11 04:14:58 2026 +1100
fix(server): skip auth check when Codex CLI uses a custom model provider (#649)
Co-authored-by: Julius Marminge <julius0216@outlook.com>
commit 2c351726ae21a73ac0549500783d5a4de6394214
Author: 0x1f99d <crazywolf132@gmail.com>
Date: Wed Mar 11 03:46:24 2026 +1100
fix(contracts): align terminal restart input type across IPC, WS, and server (#597)
commit 9e891d2e97d65a6e211e3da8ee95807b9a091563
Author: Weld <WeldFire@users.noreply.github.com>
Date: Tue Mar 10 11:45:39 2026 -0500
Display application version in sidebar and settings (#720)
commit b8d07eb852e5ea30717f4079595eb68515e930cf
Author: Jono Kemball <Noojuno@users.noreply.github.com>
Date: Wed Mar 11 05:18:22 2026 +1300
Add downloads page and shared marketing layout (#802)
commit 223c3dc8005b583b19c502320f5de929958a7efd
Author: Jason Laster <jason.laster.11@gmail.com>
Date: Tue Mar 10 00:17:18 2026 -0700
chore(ci): add and apply `fmt:check` script (#779)
* Add formatting conventions
* Add a fmt lint check
* rely on defaults
---------
Co-authored-by: Julius Marminge <julius0216@outlook.com>
commit afb6e89bfdd9164c142162597bb865540b1909d2
Author: 0x1f99d <crazywolf132@gmail.com>
Date: Tue Mar 10 18:03:37 2026 +1100
feat(web): add shift-click multi-select for sidebar threads (#651)
* feat(web): add shift-click multi-select for sidebar threads
Add support for selecting multiple threads in the sidebar via
Cmd/Ctrl+Click (toggle) and Shift+Click (range select), with
bulk context menu actions for Delete and Mark Unread.
- New threadSelectionStore (Zustand) for ephemeral selection state
with anchor-based range selection and no-op guards
- Platform-aware modifier detection (Cmd on Mac, Ctrl elsewhere)
matching existing isMacPlatform pattern in terminal-links
- Extracted deleteThread helper from handleThreadContextMenu for
reuse by bulk delete, with deletedThreadIds set for correct
fallback navigation during batch operations
- Selected threads share the active thread highlight style
- Escape key clears selection; plain click clears and navigates
- Right-click on selected thread shows bulk menu; right-click on
unselected thread clears selection and shows single-thread menu
- 22 unit tests covering toggle, range select, clear, remove,
and edge cases (cross-project fallback, anchor stability)
* fix(web): filter deleted threads from worktree orphan check during bulk delete
When bulk-deleting threads that share a worktree, the stale threads
closure caused getOrphanedWorktreePathForThread to see the other
threads-being-deleted as still alive, suppressing the orphaned
worktree cleanup prompt. Filter out deletedThreadIds (keeping the
current thread) so the check correctly identifies worktrees that
will have no surviving references.
* fix(web): fix shift-click range selection, distinct selection styling, and deselect on click away
* Preserve thread multi-select on safe sidebar control clicks
- avoid clearing selection on mousedown for thread items and marked safe controls
- centralize the selection-safe selector and add logic tests for clear vs preserve behavior
- simplify thread selection store typing by merging state/actions interface
---------
Co-authored-by: Julius Marminge <julius0216@outlook.com>
commit 9309edf4f42c59de6489f0ea1a6b72578d637b9d
Author: Julius Marminge <julius0216@outlook.com>
Date: Mon Mar 9 22:41:22 2026 -0700
rm test
commit d28ced8fd7471302d42e2e272fcbd62f9b1404c8
Author: Julius Marminge <julius0216@outlook.com>
Date: Mon Mar 9 22:36:22 2026 -0700
Move PR checkout flow to dialog and drop /checkout-pr command
- Replace the inline composer PR menu with a dedicated `PullRequestThreadDialog`
- Remove `/checkout-pr` from composer slash-command parsing and tests
- Fix branch selector virtualization sizing for the checkout-PR row
commit 076608021c89afb294f4bdc75d99018936540c95
Author: Julius Marminge <julius0216@outlook.com>
Date: Mon Mar 9 17:30:17 2026 -0700
Namespace PR worktree branch names under t3code
- Change local PR worktree branch format from `pr/<number>-<head>` to `t3code/pr-<number>/<head>`
- Update GitManager tests to assert the new branch naming convention
commit fb4f9aa58ef67d192c7692dcfcb58c00a8fb7705
Author: Julius Marminge <julius0216@outlook.com>
Date: Mon Mar 9 17:09:08 2026 -0700
Use repo initial branch in GitCore PR fetch integration test
- Return `initialBranch` from test repo setup helper
- Replace hardcoded `main` checkout/push/assertions with detected branch name
commit de21f4dcd74037dc48d255e06ec27fd58187367b
Author: Julius Marminge <julius0216@outlook.com>
Date: Mon Mar 9 16:56:48 2026 -0700
Use GitHubCliLive as default test layer
- Wire `it.layer` to `GitHubCliLive` in `GitHubCli.test.ts`
- Remove redundant `Effect.provide(GitHubCliLive)` calls in individual tests
commit 442bc9540ea52e82ad15aee06e52da2c5e16f948
Author: Julius Marminge <julius0216@outlook.com>
Date: Mon Mar 9 16:52:28 2026 -0700
Normalize remote URL matching and migrate GitHubCli tests
- Treat remotes that only differ by trailing slash after `.git` as the same remote
- Add a GitCore regression test for trailing-slash remote reuse
- Refactor `GitHubCli` tests to `@effect/vitest` layer-based effect tests with reset cleanup
commit f7570712a741136999a77d5a8f6490a8c7d9e249
Author: Julius Marminge <julius0216@outlook.com>
Date: Mon Mar 9 16:46:53 2026 -0700
Avoid fork PR head branch collisions when creating worktrees
- create a unique local branch name for cross-repo PR worktrees (`pr/<number>-<head>`)
- fetch/set upstream against that local branch instead of overwriting local `main`
- add regression tests for fork PRs where head branch is `main`
commit 2847655a1a1f8f45d64224ee45b9262a1fc14dfc
Author: Julius Marminge <julius0216@outlook.com>
Date: Mon Mar 9 16:35:04 2026 -0700
Validate GitHub CLI JSON with Effect Schema decoders
- Replace manual JSON parsing with shared schema-based decoding helpers
- Normalize PR and repository payloads after decoding for safer typed outputs
- Improve invalid JSON error mapping with operation-specific GitHubCliError details
commit 268016d872e724bd996fcd585835d169db903814
Author: Julius Marminge <julius0216@outlook.com>
Date: Mon Mar 9 16:00:02 2026 -0700
Fix PR thread upstream tracking for fork branches
- Restore/set upstream tracking when preparing local and reused PR worktrees
- Derive fork `owner/repo` from PR URL when GitHub omits `headRepositoryNameWithOwner`
- Expand GitManager tests to cover local mode, URL-derived fork identity, and reused worktree upstream recovery
commit ac3f22c274e5b116b04220b29d1470e9d39bd0f2
Author: Julius Marminge <julius0216@outlook.com>
Date: Mon Mar 9 14:57:59 2026 -0700
Inline branch picker filtering and drop PR-only shortcut
- move branch filtering logic into `BranchToolbarBranchSelector`
- remove unused `filterBranchPickerItems` helper and related tests
- keep create-branch option pinned while filtering by query
commit b36888e9cc3692f931081a4d09bd58438d5f06eb
Author: Julius Marminge <julius0216@outlook.com>
Date: Mon Mar 9 12:24:28 2026 -0700
Preserve fork PR upstreams when preparing local and worktree threads
- add GitCore helpers to ensure remotes, fetch remote branches, and set upstreams
- extend GitHub CLI parsing to include cross-repo PR metadata and repo clone URLs
- update GitManager flow and tests to materialize fork heads and keep tracking on fork remotes
commit 9bb9023009b0c45c66a609c386cd233855043caf
Author: Julius Marminge <julius0216@outlook.com>
Date: Mon Mar 9 12:03:24 2026 -0700
Handle branch selection across main and secondary worktrees
- add `resolveBranchSelectionTarget` to unify checkout cwd/worktree decisions
- reuse existing worktrees when available, including switching back to main repo
- update branch selector to use shared logic and add targeted unit tests
commit f70cb5de4517e55f62ed2c71e49291d97a7dc927
Author: Julius Marminge <julius0216@outlook.com>
Date: Mon Mar 9 11:56:11 2026 -0700
Refine branch picker behavior and gate /checkout-pr by thread type
- Add shared branch picker filtering logic and tests, including PR-reference-only results
- Improve branch selector UX/perf with deferred query filtering, conditional virtualization, and status-based current branch resolution
- Only expose and handle `/checkout-pr` for local draft threads in chat and toolbar UI
commit 3d3586800ebfbefb97a4a782dae3439e90ba9065
Author: Julius Marminge <julius0216@outlook.com>
Date: Mon Mar 9 11:00:23 2026 -0700
Add pull-request thread setup for local and worktree modes
- Add git APIs to resolve PR refs and prepare PR thread workspaces
- Support fetching PR head refs into local branches and reusing existing worktrees
- Wire new websocket/contracts/web composer flows for PR-based thread creation
- Expand server/web/contracts tests for PR routing and branch/worktree behavior
commit 767de271e972b38de0633c04efcd62a929790b3e
Author: Julius Marminge <julius0216@outlook.com>
Date: Mon Mar 9 22:46:38 2026 -0700
Use Effect UUID generator as randomUUID fallback
- Replace manual UUID byte formatting fallback in `apps/web/src/lib/utils.ts`
- Use `Effect.runSync(Random.nextUUIDv4)` when `crypto.randomUUID` is unavailable
commit 9d2c2cae375b6dfc7469c1ada07a109779364846
Author: Hiram Chirino <hiram@hiramchirino.com>
Date: Mon Mar 9 07:30:00 2026 -0400
fix(web): polyfill crypto.randomUUID for non-secure HTTP contexts
Replace direct crypto.randomUUID() calls with a randomUUID() helper in
utils.ts that falls back to crypto.getRandomValues() when the browser
is not in a secure context (e.g. plain HTTP on a non-localhost address).
Signed-off-by: Hiram Chirino <hiram@hiramchirino.com>
commit dcccca3f7b5d089f9946b866c9a149e94fd4c616
Author: David Balderston <dbalders@gmail.com>
Date: Mon Mar 9 19:38:51 2026 -0700
Fix UI Overflow when Github Action is 'Commit, Create & Push PR'
Fixes: #769
* Updated wording for label from 'Commit, Create & Push PR' to 'Commit, Create & PR' to allow for it to fit within the current UI size constraints.
wording change
commit 4ed89e4ba72e47f7919b3b8e08d375bc912d89e4
Author: Julius Marminge <julius0216@outlook.com>
Date: Mon Mar 9 17:16:44 2026 -0700
Treat retryable Codex errors as runtime warnings
- Map Codex `error` notifications with `willRetry: true` to `runtime.warning`
- Keep active turns/sessions running during reconnect warnings
- Add adapter and ingestion tests for retry-warning behavior
commit 99dbe4ff02d9ee8e5450e96d84e8f96170c64a71
Author: Satyam Bansal <sbansal1999@gmail.com>
Date: Tue Mar 10 00:41:17 2026 +0530
fix(web): disable add project button for empty path
commit 2fc0b01c18ab8ec92eaabb56cfdd92d070cd9a35
Author: Julius Marminge <julius0216@outlook.com>
Date: Mon Mar 9 15:16:16 2026 -0700
fmt
commit 3a86b60680f147ef1420558548354bbfa0253f5b
Author: Julius Marminge <julius0216@outlook.com>
Date: Mon Mar 9 15:12:42 2026 -0700
Render collapsed plan preview directly as markdown
- remove deferred collapsed preview state in `ProposedPlanCard`
- always render collapsed preview with `ChatMarkdown` for simpler, consistent display
commit eb7c428a2d3438f2ba72fb83c5df750236517a77
Author: Julius Marminge <julius0216@outlook.com>
Date: Mon Mar 9 15:09:04 2026 -0700
Defer proposed plan rendering until expand in ChatView
- Keep long plan cards collapsed with lightweight preview text by default
- Render full plan markdown only after explicit expand to reduce thread open slowness
- Add tests for preview/strip helpers and browser coverage for expand behavior
commit 9fb9467ed1cf296c964a7a7d7a99ab1ad4e5e422
Author: Cursor Agent <cursoragent@cursor.com>
Date: Mon Mar 9 22:04:02 2026 +0000
fix: keep suppressProjectClickAfterDragRef true on drag cancel to prevent unintended toggle
Co-authored-by: Julius Marminge <juliusmarminge@users.noreply.github.com>
Applied via @cursor push command
commit e42036485fd7fe19c8536ba3fd59573ebf592349
Author: Julius Marminge <julius0216@outlook.com>
Date: Mon Mar 9 14:25:06 2026 -0700
Improve project drag collision detection in sidebar
- Prefer pointer-based hit testing during project reordering
- Fall back to corner-based collision to make drop targeting more reliable
commit f9c3aff294e7493751f36504f65089fd2d5586fd
Author: Julius Marminge <julius0216@outlook.com>
Date: Mon Mar 9 14:13:55 2026 -0700
no longer need experimental for tsconfig aliases
commit 3503dbc7d5b22d9947744ee4e2ee2324d9303825
Author: Julius Marminge <julius0216@outlook.com>
Date: Mon Mar 9 14:12:19 2026 -0700
pin vite
commit b5dde6b9d865930bc2b981816dde3f614e892813
Author: Julius Marminge <julius0216@outlook.com>
Date: Fri Mar 6 11:42:13 2026 -0800
Prevent stale click suppression after project drag cancel
- Reset post-drag click suppression when drag is canceled
- Consume only the synthetic click after drag release, then clear suppression
commit a6b22ec1c9b247536111dd2c2e8682f9b3f550c5
Author: Julius Marminge <julius0216@outlook.com>
Date: Fri Mar 6 11:39:29 2026 -0800
Fix project drag clicks and sidebar collapse/scroll behavior
- prevent accidental project toggles after drag operations
- switch project rows to Collapsible for stable expand/collapse animation
- add optional hidden scrollbar mode to ScrollArea and apply it in SidebarContent
commit bb49ebf6e54a078f9937f85de338ac5c8fc4a236
Author: Julius Marminge <julius0216@outlook.com>
Date: Fri Mar 6 10:48:07 2026 -0800
Add drag-and-drop project reordering in the sidebar
- wire project list to dnd-kit sortable with vertical drag constraints
- prevent accidental expand/collapse clicks during drag gestures
- update store logic/tests and add dnd-kit dependencies
commit 2f5e62602948ba624fa470ea8c9f6e9dc1cb0557
Author: Levi <levicrider08@gmail.com>
Date: Mon Mar 9 13:55:22 2026 -0500
Fix project name badge truncation in chat header
Remove the hard max-w-28 (112px) cap and shrink-0 on the project name
badge so it uses available flex space instead of aggressively truncating.
commit 82c0a45ea0334a8ffd5747e080ca693f54921d66
Author: Julius Marminge <julius0216@outlook.com>
Date: Mon Mar 9 13:00:27 2026 -0700
Use Debouncer for composer draft persistence writes
- Replace manual timeout/pending-value debounce logic with `@tanstack/react-pacer` `Debouncer`
- Keep `removeItem`/`flush` behavior while simplifying and standardizing persistence timing
commit e765051f148bf6006e30118eb47f5d33ea9e32be
Author: Julius Marminge <julius0216@outlook.com>
Date: Mon Mar 9 12:45:34 2026 -0700
Use React Pacer throttler for domain event snapshot sync
- Replace manual timeout-based domain event batching with `Throttler`
- Keep provider query invalidation batched with trailing 100ms flushes
- Cancel throttler and reset invalidation flag during EventRouter cleanup
commit f5e4df5cab247021501876358fd72c7196cd96b9
Author: Julius Marminge <julius0216@outlook.com>
Date: Mon Mar 9 12:28:26 2026 -0700
Use Debouncer for store state persistence
- Replace manual timeout debounce logic with `@tanstack/react-pacer`'s `Debouncer`
- Persist updates via `maybeExecute` to reduce localStorage write thrashing
- Flush pending persistence on `beforeunload` to avoid losing recent state
commit 1f47cc6f4e51d236421d45bafabaa3bbf2576c3f
Author: Julius Marminge <julius0216@outlook.com>
Date: Mon Mar 9 12:23:33 2026 -0700
Remove ProviderHealth onReady callback from service interface
- Drop the unused `onReady` hook from `ProviderHealthShape`
- Keep startup health status access focused on `getStatuses`
commit 074d3af79c3a19e7fc0d4c3ec2f3a6c6b6e46d55
Author: Tim Smart <hello@timsmart.co>
Date: Mon Mar 9 12:18:33 2026 -0700
cleanup
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
commit 6593645c8092696403f39e7d6eeebeec190385dc
Author: Chukwudi Nwobodo <cjnwob@gmail.com>
Date: Sun Mar 8 06:22:26 2026 +0000
perf: run provider health checks in background, notify clients on ready
The ProviderHealth layer blocked server startup with two sequential CLI
spawns (codex --version + codex login status), each with a 4-second
timeout, delaying startup by up to 8 seconds.
Run health checks in the background via Effect.runPromise so the layer
resolves immediately with a placeholder status. Add an onReady callback
to ProviderHealthShape so wsServer can push the resolved statuses to
connected clients once checks complete, preventing early-connecting
clients from showing "Checking..." indefinitely.
commit 296eb82c312b3c36237b51870b9a87249f5c6d83
Author: Chukwudi Nwobodo <cjnwob@gmail.com>
Date: Sun Mar 8 06:22:14 2026 +0000
perf: throttle domain event processing with 100ms batch window
During active sessions, every domain event triggered a full
syncSnapshot (IPC fetch + state rebuild + React re-render cascade) and
sometimes a provider query invalidation. Events fire in rapid bursts
during AI turns.
Replace per-event processing with a throttle-first pattern: schedule a
flush on the first event, absorb subsequent events within a 100ms
window, then sync once. Provider query invalidation is batched via a
flag. Since syncSnapshot fetches the complete snapshot, no events are
lost by skipping intermediate syncs.
commit 7a377fc5e4d607a475a7d36957689562d5dcccb9
Author: Chukwudi Nwobodo <cjnwob@gmail.com>
Date: Sun Mar 8 06:22:02 2026 +0000
perf: debounce Zustand store persistence and deduplicate legacy cleanup
The useStore subscriber called persistState on every state mutation,
triggering JSON.stringify + localStorage.setItem synchronously. It also
ran 8 localStorage.removeItem calls for legacy keys on every fire.
Wrap the subscriber with a 500ms debounce so rapid state changes batch
into a single write. Move legacy key cleanup behind a one-time flag so
it runs only once per page load. Add a beforeunload handler to flush
the final state.
commit 90e0c2ab15e7034d8e6e0688b3996fd905c03017
Author: Chukwudi Nwobodo <cjnwob@gmail.com>
Date: Sun Mar 8 06:21:52 2026 +0000
perf: debounce composer draft localStorage writes
Every keystroke triggered full JSON serialization of all composer drafts
(including base64 image attachments) and a synchronous localStorage
write. At normal typing speed this caused 5+ writes/sec, blocking the
main thread and creating noticeable input lag.
Wrap the Zustand persist storage with a 300ms debounce. In-memory state
updates remain immediate; only the serialization and storage write are
deferred. A beforeunload handler flushes pending writes to prevent data
loss. The removeItem method cancels any pending setItem to avoid
resurrecting cleared drafts.
Adds unit tests for the DebouncedStorage utility covering debounce
timing, rapid writes, removeItem cancellation, flush, and edge cases.
commit 7a3d4d1f31e4316eb832f820012bf575aa57669a
Author: Cursor Agent <cursoragent@cursor.com>
Date: Mon Mar 9 18:57:17 2026 +0000
fix: stabilize onToggleRuntimeMode with useCallback to preserve memo
Co-authored-by: Julius Marminge <juliusmarminge@users.noreply.github.com>
Applied via @cursor push command
commit e354e8697f490c729d7022b28e921f4c12e0a8ae
Author: Julius Marminge <julius0216@outlook.com>
Date: Mon Mar 9 11:17:43 2026 -0700
Prevent compact diff sidebar from breaking chat composer layout
- Add composer footer/action data attributes for targeted width measurement
- Enforce a minimum composer width before allowing inline diff sidebar
commit 993b5785121765a56628bfd4852591f672b743af
Author: Julius Marminge <julius0216@outlook.com>
Date: Mon Mar 9 11:13:09 2026 -0700
Use form clientWidth for composer compact footer checks
- Measure composer width from the form element in initial and resize paths
- Avoid relying on ResizeObserver contentRect width for compact footer layout decisions
commit ed518ef19f33bf073f48fe9b24442f063fa1bee7
Author: Julius Marminge <julius0216@outlook.com>
Date: Mon Mar 9 11:08:07 2026 -0700
Fix provider picker after rebase
Co-authored-by: codex <codex@users.noreply.github.com>
commit 47117a7d85b6696e3ad3ae7d59303b3a60e9eea5
Author: Julius Marminge <julius0216@outlook.com>
Date: Mon Mar 9 10:56:56 2026 -0700
Inline SidebarInset base classes and remove dead sidebar logic
- Replace `SIDEBAR_INSET_BASE_CLASSNAME` with an inline class string in `sidebar.tsx`
- Delete the now-unused `sidebar.logic.ts` helper and its focused unit test
commit f62381090323ae15ffab480bdeeb868e61274fbf
Author: Julius Marminge <julius0216@outlook.com>
Date: Mon Mar 9 10:45:16 2026 -0700
Adapt composer footer to compact controls on narrow widths
- add shared footer layout breakpoint helper with tests
- switch chat composer footer to compact menu when width is constrained
- preserve plan sidebar toggle behavior while consolidating footer actions
commit e9ffd5752bb56854f8693f4a37dee3b3b7afcd3e
Author: Julius Marminge <julius0216@outlook.com>
Date: Mon Mar 9 10:01:33 2026 -0700
Fix plan composer layout and sidebar flex shrink behavior
- add `min-w-0` to chat/flex containers to prevent composer/sidebar overflow
- move `BranchToolbar` into the chat column so layout stays aligned with plan sidebar
- extract sidebar inset base classes to shared logic and add a regression test for `min-w-0`
commit 24122b17629451e4614d34f3b771769e87b99d79
Author: Julius Marminge <julius0216@outlook.com>
Date: Mon Mar 9 09:28:30 2026 -0700
Stabilize toast stacking offsets to prevent hover flicker
- derive toast indices and Y offsets from the filtered visible toasts
- pass frontmost height and per-toast layout vars to the viewport/item styles
- add unit tests for visible toast layout calculations and height normalization
commit 081a6dacdbb623da0b560360384d58cb95a484e5
Author: Julius Marminge <julius0216@outlook.com>
Date: Mon Mar 9 09:29:20 2026 -0700
Remove fast-tier icons from model selection UI
- delete `shouldShowFastTierIcon` and its test
- remove Zap icon badges from slash model commands and provider model picker
- simplify related ChatView props and memo dependencies
commit 9fdb45be1efb0e0b542a0dd78d868de6f71d7d4a
Author: Julius Marminge <julius0216@outlook.com>
Date: Mon Mar 9 09:13:52 2026 -0700
Remove service tier setting from Codex flow and contracts
- Drop `serviceTier` from orchestration/provider contracts and server dispatch paths
- Remove service-tier app setting/UI and related resolver logic
- Keep fast badge behavior tied to explicit fast-mode boolean
commit b946f00f1a31f16a51f9bd1f579baf40c8eaed83
Author: Julius Marminge <julius0216@outlook.com>
Date: Mon Mar 9 09:42:19 2026 -0700
Show Plan Ready status pill for settled plan threads
- add "Plan Ready" sidebar status when a plan-mode turn is settled with a proposed plan
- update sidebar logic tests to cover the new status and expanded thread inputs
commit b030f69a833802fae9222781ef2dc822dfe81aac
Author: Julius Marminge <julius0216@outlook.com>
Date: Mon Mar 9 09:14:08 2026 -0700
Show Awaiting Input status in sidebar and extract status logic
- add `Sidebar.logic.ts` to centralize thread status pill resolution
- show `Awaiting Input` when plan mode is blocked on user responses
- add unit tests for unseen completion and status-priority behavior
- prevent plan collapse/expand clicks from triggering chat scroll anchoring
commit b0e1b3368e47c8b470f988312309a9784421b69a
Author: Julius Marminge <julius0216@outlook.com>
Date: Mon Mar 9 09:21:32 2026 -0700
Show toast when immediate project add fails
- Use a toast error for add-project failures during immediate folder browse
- Keep inline add-project error state for non-immediate flows
- Include `shouldBrowseForProjectImmediately` in callback dependencies
commit ce7b24bfb151cc5dfee54d669c3490611e74119e
Author: Julius Marminge <julius0216@outlook.com>
Date: Mon Mar 9 09:14:18 2026 -0700
Inline Electron project picker check in Sidebar
- Replace `shouldOpenProjectFolderPickerImmediately` with direct `isElectron` usage
- Remove obsolete `Sidebar.logic.ts` and its tests
commit 5c286cab8b87fa5055533c54721cca52ec32050d
Author: Julius Marminge <julius0216@outlook.com>
Date: Mon Mar 9 09:10:37 2026 -0700
Open project folder picker immediately in Electron
- remove mobile-width gating from sidebar project picker behavior
- simplify picker logic/tests to depend only on Electron runtime
commit 75ca0d4fa41a4b5a85a6aa852dad813fbcbb94db
Author: Julius Marminge <julius0216@outlook.com>
Date: Mon Mar 9 09:02:56 2026 -0700
Open folder picker immediately on desktop Electron
- add `shouldOpenProjectFolderPickerImmediately` to centralize Sidebar behavior
- trigger folder browse directly when adding a project in desktop Electron
- keep manual path entry for mobile layouts and non-Electron, with tests for all cases
commit 8282b11fb55e50147a33e476ee8563ceaf1e75d7
Author: 0x1f99d <crazywolf132@gmail.com>
Date: Tue Mar 10 02:29:49 2026 +1100
refactor(contracts): remove unused OrchestrationPersistedEvent schema (#601)
commit 45744cc7893243b5ad17b153fb250d50ce87d80c
Author: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Date: Mon Mar 9 11:17:07 2026 +0000
chore(release): prepare v0.0.9
commit 4b6a0c433cb808a0ebdd30ec48e799b6543d2cc9
Author: Sai Shankar <saishankar2803@gmail.com>
Date: Mon Mar 9 16:33:13 2026 +0530
fix(web): fix native scrollbar being intercepted by sidebar rail on windows and linux (#618)
the rail's 16px hit area at z-20 sits right where the native os scrollbar
lives when the sidebar is in offcanvas mode and collapsed. this causes clicks
and drags on the scrollbar to toggle the sidebar instead on windows and linux.
scoping pointer-events-none to [data-collapsible=offcanvas][data-state=collapsed]
fixes the interception without affecting icon mode where the rail needs to stay
clickable.
commit 304a14de7d6f0b9977c8ecc4bced5b5f359ce02e
Author: Theo Browne <me@t3.gg>
Date: Mon Mar 9 04:01:23 2026 -0700
Fix users who installed intel builds on arm macs (#641)
commit c585128bbe0311615c58921909467f49600cb85f
Author: Theo Browne <me@t3.gg>
Date: Mon Mar 9 01:20:14 2026 -0700
ARM ALWAYS FUCK YOU INTEL
commit acd92f9b061b8638ef9cfe974dad19042b3762e8
Author: Theo Browne <me@t3.gg>
Date: Mon Mar 9 01:12:55 2026 -0700
include sourcemaps
commit 4088b7ac3cddc1fc92ccf3f99e7a844c629ebad0
Author: 0x1f99d <crazywolf132@gmail.com>
Date: Mon Mar 9 16:02:15 2026 +1100
fix(desktop): use filesystem-friendly userData directory name (#607)
Electron derives the userData path from productName in package.json,
which produces directories with spaces and parentheses on all platforms
(e.g. ~/.config/T3 Code (Alpha) on Linux). This is hostile to shell
usage and violates Linux XDG naming conventions.
Override the userData path via app.setPath() before the ready event to
use a clean lowercase name (t3code). If the legacy directory already
exists it is used as-is so existing users keep their Chromium profile
data (localStorage, cookies, sessions, cache).
This follows the same pattern VS Code uses — keeping productName for
display purposes while explicitly setting the data directory path.
Closes #578
commit 8e8904a159e3b29fa1eae0e6f023872ef03a3f63
Author: 0x1f99d <crazywolf132@gmail.com>
Date: Mon Mar 9 15:55:09 2026 +1100
refactor(web): remove redundant double parse of diff route search params (#598)
`rawSearch` is already the output of `parseDiffRouteSearch` via the
`useSearch` select transform. The `useMemo` at line 760 re-parsed it
through the same function with an unsafe `as Record<string, unknown>`
cast, producing an identical result. Use `rawSearch` directly instead.
commit 16f3490aee9ab9928ae7ac084117517495155e96
Author: 0x1f99d <crazywolf132@gmail.com>
Date: Mon Mar 9 15:53:26 2026 +1100
fix(ci): handle draft PR conversions in pr-vouch (#611)
commit 651084e8c05bf6da329108b098e4fd81322ee785
Author: Jono Kemball <Noojuno@users.noreply.github.com>
Date: Mon Mar 9 17:43:35 2026 +1300
fix: fix external link opening in desktop (#599)
fixes #434
commit 812bb99f5c182351d0d899c9a88033d61fd7370a
Author: Theo Browne <me@t3.gg>
Date: Sun Mar 8 21:43:17 2026 -0700
Add Noojuno to vouched
commit 5bc79807ec33f0b7f3633ad6dc54fcedf0de3a73
Author: Jason Laster <jason.laster.11@gmail.com>
Date: Sun Mar 8 22:40:44 2026 -0600
Add an encyclopedia of common terms (#613)
commit 8fe21d7583a21a19c98b0e24a64dd0d7029b41b0
Author: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Date: Mon Mar 9 03:43:56 2026 +0000
chore(release): prepare v0.0.8
commit 412331aa61a9a38d61f17755d67ed0f8212920d2
Author: 0x1f99d <crazywolf132@gmail.com>
Date: Mon Mar 9 14:39:41 2026 +1100
fix(web): add missing v7 key to legacy localStorage cleanup list (#594)
When the persisted state key was bumped from v7 to v8 in 689dda59,
the v7 key was not added to LEGACY_PERSISTED_STATE_KEYS. Users who
ran the app during the ~3-week v7 window retain a stale
`t3code:renderer-state:v7` entry in localStorage that is never
cleaned up.
commit cd1c3df89cfa681622292f7f2a9777f81f8e2f10
Author: Theo Browne <me@t3.gg>
Date: Sun Mar 8 20:36:37 2026 -0700
Add PR vouch workflow with trust-status labels (#602)
* Add PR vouch workflow and trust-status labeling
- Add `.github/workflows/pr-vouch.yml` to label PRs as trusted, unvouched, or denounced
- Add `.github/VOUCHED.td` trust-list file for external contributors
- Document automatic `vouch:*` labels and contributor expectations in `CONTRIBUTING.md`
* Add vouch entries for trusted GitHub contributors
- Append 16 GitHub accounts to `.github/VOUCHED.td`
- Update trusted-voucher list used for PR labeling workflows
commit 3738373aa5ff0fff074ecb95686ef952c209957e
Author: 0x1f99d <crazywolf132@gmail.com>
Date: Mon Mar 9 14:36:03 2026 +1100
fix(server): use waitForPush in terminal event broadcast test to prevent flaky failure (#606)
The terminal RPC test used raw waitForMessage to receive the expected
terminal.event push, but a server.configUpdated push from the
keybindings file watcher can arrive first depending on OS timing.
Replace with the existing waitForPush helper that filters by channel.
commit 9b9006fed571dbeb1c810493500a679a49a2ba38
Author: Theo Browne <me@t3.gg>
Date: Sun Mar 8 20:30:01 2026 -0700
Fix release finalize lockfile refresh (#608)
* Add checkout and Node setup to release updater publish job
- Ensure the updater publish job checks out the target ref
- Initialize Node using the repository's package.json version file before downloading artifacts
* Fix release finalize lockfile refresh
commit 42234b8f7cbe4465370fa0511f3fe26df2a2ae2e
Author: Theo Browne <me@t3.gg>
Date: Sun Mar 8 20:12:31 2026 -0700
fix: plan mode ui overhaul (#596)
* new plan mode started
* review comments
* more fixes
commit 39f65703e7bd97df787ba45373ed75dddae9bb2f
Author: Theo Browne <me@t3.gg>
Date: Sun Mar 8 20:00:15 2026 -0700
Add checkout and Node setup to updater publish workflow job (#605)
- Ensure the updater publish job checks out the target ref
- Initialize Node using the repository's package.json version file before downloading artifacts
commit b7f954a9041ee4524552ad0993e8b7711c86ff8a
Author: (CJ) Chukwudi Nwobodo <142016413+chuks-qua@users.noreply.github.com>
Date: Mon Mar 9 01:58:25 2026 +0000
Fix ChildProcess.spawn failing on Windows for .cmd shims (#495)
* fix(scripts): enable shell mode on Windows for .cmd shim resolution
On Windows, tools like `bun`, `npm`, `turbo`, and `bunx` are installed
as `.cmd` shims. Node's `child_process.spawn` cannot resolve these
without `shell: true`, causing `PlatformError: NotFound` on fresh
builds where there is no Turbo cache.
Add `shell: process.platform === "win32"` to all ChildProcess.make
calls in cli.ts, dev-runner.ts, and build-desktop-artifact.ts.
Closes #474
* docs: add comments explaining Windows shell spawn requirement
* docs: add shell spawn comments to remaining call sites
commit a20815ece6ea877a2b82072339f4bced98d757f7
Author: 0x1f99d <crazywolf132@gmail.com>
Date: Mon Mar 9 12:56:29 2026 +1100
fix(web): align sidebar logo with macOS traffic light buttons (#586)
Adjust the Electron sidebar header to properly center the T3 wordmark
with the native window controls. The logo was sitting ~2px too low and
~8px too close to the traffic lights.
- Reduce wordmark container top margin from mt-2 (8px) to mt-1.5 (6px)
- Increase Electron header left padding from 82px to 90px for proper
traffic light clearance
- Match the desktop update button margin to stay aligned
Closes #564
commit 1c43bad705bd1d953fd168aa0b852c8b2d83ee84
Author: Mubin Ansari <mubinansari910@gmail.com>
Date: Mon Mar 9 07:21:55 2026 +0530
Add `delete` option for project actions (#223)
Adds a delete button to the action edit dialog with a confirmation
alert. Fixes pingdotgg/t3code#208.
commit 18b6590d2e490bd73ba968b094dc221ffb7c0f67
Author: (CJ) Chukwudi Nwobodo <142016413+chuks-qua@users.noreply.github.com>
Date: Mon Mar 9 01:36:52 2026 +0000
feat(desktop): add spellcheck suggestions to context menu (#500)
Wire up Electron's context-menu event on webContents to surface
dictionary suggestions for misspelled words. Standard edit actions
(Cut, Copy, Paste, Select All) appear in all context menus.
Related to #473
commit d62ffa7560bffeb2509ed115eed31dd5bc231ca6
Author: Theo Browne <me@t3.gg>
Date: Sun Mar 8 18:27:04 2026 -0700
pr changes pt2
commit 59e2944fb72d8ef8c3b55fec3be766abe48df820
Author: 0x1f99d <crazywolf132@gmail.com>
Date: Mon Mar 9 12:24:56 2026 +1100
fix(web): add dismiss button to thread error banner (#588)
The thread error banner had no way to be dismissed. Users hitting
unrecoverable errors (e.g. missing gh CLI during PR creation) were
stuck with a persistent error banner and no way to clear it.
Add a dismiss (X) button to ThreadErrorBanner using the exi…