Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
746 commits
Select commit Hold shift + click to select a range
891a5af
test(server): assert tool output redaction before storage fidelity
juliusmarminge Sep 9, 2026
03d2a62
test(web): cancel queued animation frames during worker cleanup (#10880)
saphid Sep 9, 2026
9f8a62b
fix: reconcile main devices and pull requests with orchestration v2
juliusmarminge Sep 10, 2026
a358fe9
feat(providers): add Pi coding agent (#7211)
StiensWout Sep 10, 2026
6105035
feat(providers): standardize ACP providers (#6461)
StiensWout Sep 10, 2026
c8b1004
feat: render background completions as typed notifications
juliusmarminge Sep 10, 2026
9b26d21
fix(mcp): omit recursive screenshot metadata from tool inputs
juliusmarminge Sep 10, 2026
95f0a92
fix(pi): use native forks and preserve rollback session identity
juliusmarminge Sep 10, 2026
8dd90cb
fix(pi): cap OpenRouter output budgets pending upstream fix
juliusmarminge Sep 10, 2026
9e78886
fix(web): show ACP sidebar icons and hold onboarding height while loa…
juliusmarminge Sep 10, 2026
b8572fe
feat(server): deliver delegated completions through a durable mailbox
juliusmarminge Sep 10, 2026
c4d2cc6
fix(acp): support Devin terminals, questions, and native subagents
juliusmarminge Sep 10, 2026
5e5879c
fix(server): find active turns when answering async questions
juliusmarminge Sep 10, 2026
0d5d872
fix(web): populate sidebar ACP branding from environment settings
juliusmarminge Sep 10, 2026
ff6127d
fix(acp): preserve native child messages and final summaries
juliusmarminge Sep 10, 2026
948ba40
fix(server): distinguish delegated task results from completed turns
juliusmarminge Sep 10, 2026
785c984
test(server): align Codex delegation instruction assertion
juliusmarminge Sep 10, 2026
ebd2fd8
test(server): align delegation fixtures with task result semantics
juliusmarminge Sep 10, 2026
0a25666
fix(server): classify Claude V2 structured terminal failures (#9897)
saphid Sep 10, 2026
7301883
fix(orchestration): exclude rolled-back work from bounded recovery (#…
saphid Sep 10, 2026
a6f4c06
test(orchestration): cover bounded V2 socket fallback paging (#9907)
saphid Sep 10, 2026
7f156c6
fix(server): wait for native Codex start before Stop (#10024)
saphid Sep 10, 2026
23e0d82
fix(server): keep the native Grok default model (#10025)
saphid Sep 10, 2026
87c9d49
fix(server): fail V2 turns when the OpenCode event stream ends (#9905)
saphid Sep 10, 2026
01c14f0
fix(web): preserve file attachments when editing queued runs (#9928)
saphid Sep 10, 2026
e19ca90
fix(server): preserve project mutation fields across transports (#9920)
saphid Sep 11, 2026
9891e30
fix(mobile): throttle streaming thread visit updates (#9931)
saphid Sep 11, 2026
761aab1
fix(orchestrator): preserve task-step elapsed time across restart (#1…
saphid Sep 11, 2026
11bccfc
fix(server): preserve Claude interruption status during steering
juliusmarminge Sep 11, 2026
0da5d99
fix(server): wait for nested completion delivery before publishing re…
juliusmarminge Sep 11, 2026
4bf14c4
test(server): verify background delivery with real providers
juliusmarminge Sep 11, 2026
fb34fcc
fix: keep working timers anchored to the active run
juliusmarminge Sep 11, 2026
fceeaf0
perf: page complete turns and bound timeline reconciliation
juliusmarminge Sep 11, 2026
8990507
perf(client): narrow thread subscriptions and navigation updates
juliusmarminge Sep 11, 2026
f423b67
feat(mobile): manage queued messages in a dedicated sheet
juliusmarminge Sep 11, 2026
3b11467
fix(web): fold completed trailing background activity
juliusmarminge Sep 11, 2026
bdc3a3f
fix: reconcile main settings and previews with orchestration v2
juliusmarminge Sep 11, 2026
247c2f6
perf(client): reconcile replay batching with orchestration v2
juliusmarminge Sep 11, 2026
84f202a
fix: reconcile main Codex model selection and UI updates
juliusmarminge Sep 11, 2026
34c9191
fix: reconcile main context previews and rewind updates
juliusmarminge Sep 12, 2026
4a4869b
fix(build): include protobuf and Connect license notices
juliusmarminge Sep 12, 2026
0a2b13b
fix(mobile): pin expo-audio so the release smoke patch stays in use (…
saphid Sep 13, 2026
6bf4507
fix: reconcile main release and thread updates with V2
juliusmarminge Sep 14, 2026
2e6a870
fix: repair v2 CI after environment disable and dead exports
juliusmarminge Sep 14, 2026
75f9f7c
fix(web): update notification tests for v2 thread shells and drop dea…
juliusmarminge Sep 14, 2026
dbb394b
fix(client-runtime): avoid Array#toSorted in thread lineage ordering
juliusmarminge Sep 14, 2026
c6272ce
fix(server): reject partial output from failed Cursor runs (#11534)
saphid Sep 14, 2026
5227a47
fix(server): wake paused Cursor replay runs on mismatch (#11535)
saphid Sep 14, 2026
d096319
fix(server): load V2 replay fixtures through the platform path servic…
saphid Sep 14, 2026
a840d9e
fix(server): report missing interrupt-and-restart capability for forc…
saphid Sep 14, 2026
29804f9
fix(server): preserve Cursor directory and lint search results (#11533)
saphid Sep 14, 2026
5fa8e5c
fix(server): roll back question attachment copies when respond prepar…
saphid Sep 14, 2026
1e93343
fix(server): restart the live session on model changes after dead rec…
saphid Sep 14, 2026
8075a9e
fix(server): replay launches with server-allocated thread IDs (#11508)
saphid Sep 14, 2026
d01db32
fix(web): keep the active-run header with the prompt that started it …
juliusmarminge Sep 15, 2026
66f311b
refactor(web): centralize provider instance icons (#11829)
juliusmarminge Sep 15, 2026
81c412c
feat(web): add the thread action menu and inline rename to the chat h…
juliusmarminge Sep 15, 2026
a21ce11
fix(web): keep the preview mini-player clear of the inline thread det…
juliusmarminge Sep 15, 2026
dd865a0
fix: reconcile main snooze controls with orchestration v2
juliusmarminge Sep 15, 2026
b0370b1
fix(web): adapt registry icons to light and dark themes
juliusmarminge Sep 15, 2026
e697d73
fix: reconcile main worktree setup and title changes with v2
juliusmarminge Sep 15, 2026
c81427d
fix(server): isolate V2 migrations from the V1 database
juliusmarminge Sep 15, 2026
3473125
fix(ci): verify V2 branch pushes and remove unused helper
juliusmarminge Sep 15, 2026
16adbc3
revert: restore existing CI push triggers
juliusmarminge Sep 15, 2026
4e81d60
fix(web): retain server-side queuing on v2 after rebase
juliusmarminge Sep 15, 2026
631b536
fix(test): account for optional encoded provider settings
juliusmarminge Sep 15, 2026
a3910f1
fix(server): project legacy thread shells during import
juliusmarminge Sep 15, 2026
7a820e0
fix(server): replay command events across persistence pages (#11499)
saphid Sep 15, 2026
a6e5b34
fix(orchestrator): report terminal runs after wait timeout (#11574)
saphid Sep 15, 2026
ea402e2
fix(server): skip corrupt scheduled-task rows instead of stopping the…
saphid Sep 15, 2026
c2629d3
fix(server): preserve due schedules across equivalent time formatting…
saphid Sep 15, 2026
cd98c28
test(server): replay denied Claude writes through V2 (#11597)
saphid Sep 15, 2026
ed8281d
fix(server): fork Codex threads at the native turn boundary (#11490)
saphid Sep 15, 2026
d5b1bca
fix(server): align MCP delegation support with live provider adapter …
saphid Sep 15, 2026
ce84aa0
test(server): prove v1 to v2 cutover on a copied database and flag di…
saphid Sep 15, 2026
445b3bf
fix(server): bound legacy thread projection requests (#10512)
cjavad Sep 15, 2026
3e4f7ae
fix: reconcile main thread updates and Git improvements with v2
juliusmarminge Sep 15, 2026
3dde09b
fix(web): confine composer glass transition to input surface
juliusmarminge Sep 15, 2026
dac9321
fix(server): restore hub limits updates in V2 (#11963)
Bil0000 Sep 15, 2026
eaeafdf
fix(mobile): reject preview builds from v1 source
juliusmarminge Sep 15, 2026
cbb158e
fix(mobile): skip preview validation without release credentials
juliusmarminge Sep 15, 2026
d3b6c54
fix: stop retained background work after a turn settles
juliusmarminge Sep 15, 2026
74554aa
refactor: remove legacy token streaming
juliusmarminge Sep 15, 2026
58af731
fix: format subagent task names across clients
juliusmarminge Sep 15, 2026
1d90d7d
fix: distinguish unsupported server connections
juliusmarminge Sep 15, 2026
b85e778
fix: reconcile main updates with V2 orchestration
juliusmarminge Sep 15, 2026
17e6fd1
fix(server): preserve PR links across V2 discovery and import
juliusmarminge Sep 16, 2026
1ff9c55
fix: reconcile main monograms and PR refresh with V2
juliusmarminge Sep 16, 2026
f07eee9
fix(web): reset thread scroll and ignore hydration as a new turn
juliusmarminge Sep 16, 2026
18a8d73
fix(web): invert follow-up behavior with Mod+Enter
juliusmarminge Sep 16, 2026
38ca507
fix(web): show linked pull requests in thread details
juliusmarminge Sep 16, 2026
e0288d8
fix(web): restore main thread-switch scrolling without layout resets
juliusmarminge Sep 16, 2026
fdfa5a5
fix: reconcile main setup transitions with V2 threads
juliusmarminge Sep 16, 2026
bcabe59
fix(mobile): keep cached thread list across relaunch
juliusmarminge Sep 16, 2026
8e4053b
perf(client): coalesce persistent cache writes during streaming (#12109)
juliusmarminge Sep 16, 2026
0a2b55a
perf(server): suppress unchanged shell enrichment refreshes (#12110)
juliusmarminge Sep 16, 2026
0427254
perf(mobile): skip unchanged thread row renders (#12116)
juliusmarminge Sep 16, 2026
bed7282
perf(mobile): yield to UI during shell cache encoding (#12117)
juliusmarminge Sep 16, 2026
3f4d760
perf(client): narrow mobile and web environment subscriptions (#12126)
juliusmarminge Sep 16, 2026
2e1b32f
perf(mobile): ignore irrelevant config updates in thread lists (#12127)
juliusmarminge Sep 16, 2026
36488b3
perf(mobile): limit thread model options to its provider (#12128)
juliusmarminge Sep 16, 2026
218011a
perf(client): stop scanning threads for unused shell timestamps (#12129)
juliusmarminge Sep 16, 2026
c84ac28
feat(mobile): make the composer pill the hub for the running turn
juliusmarminge Sep 16, 2026
ec4d6bf
fix: reconcile main composer and provider updates with V2
juliusmarminge Sep 16, 2026
e6ec3a8
test(server): restore Cursor usage coverage after V2 rebase
juliusmarminge Sep 16, 2026
7abef83
feat(web): add compact PR checks to the workspace card (#11981)
Bil0000 Sep 16, 2026
0554dfc
feat(web): show subagent details and history in workspace card (#12079)
Bil0000 Sep 16, 2026
43cee33
fix(server): start V2 provider turn when checkpoint baseline capture …
SunkenInTime Sep 17, 2026
56a5cb6
fix(server): retain durable checkpoint index fixes on v2
juliusmarminge Sep 17, 2026
76a3991
fix(server): finalize v2 runs when checkpoint ref lookup fails
juliusmarminge Sep 17, 2026
821bee3
fix(server): reject v2 file restore in shared workspaces
juliusmarminge Sep 17, 2026
39c3cde
fix(mobile): allow changing provider in a started thread (#12184)
juliusmarminge Sep 17, 2026
52e463a
fix: reconcile main updates with V2 runtimes and timelines
juliusmarminge Sep 17, 2026
e81ecf8
fix: align V2 question and checkpoint timelines across clients
juliusmarminge Sep 17, 2026
367e5f4
fix(mobile): guard question controls during answer submission
juliusmarminge Sep 17, 2026
e0e322d
fix: adapt multi-model thread creation to V2 launches
juliusmarminge Sep 17, 2026
08c1746
fix: restore V2 worktree setup transitions across clients
juliusmarminge Sep 17, 2026
a0a04e3
fix(mobile): match web provider handoff dividers
juliusmarminge Sep 17, 2026
ea12412
fix(mobile): preview queued message order during drag (#12232)
juliusmarminge Sep 17, 2026
a7cd01f
fix: preserve linked PRs and show them in badge tooltips (#12262)
Bil0000 Sep 17, 2026
a2f2200
fix(orchestrator): defer queued provider handoff until delivery (#12226)
juliusmarminge Sep 17, 2026
bf80aef
fix(v2): preserve running turns during provider handoff (#12255)
Bil0000 Sep 17, 2026
b5da766
feat(composer): attach threads as context (#12296)
juliusmarminge Sep 17, 2026
50322b2
fix: reconcile main updates and preserve V2 preview upgrades
juliusmarminge Sep 17, 2026
c295edd
fix(codex): retain V2 reasoning streams and completed traces
juliusmarminge Sep 17, 2026
0c4b0e2
fix(timeline): align V2 reasoning disclosures with main
juliusmarminge Sep 17, 2026
4f2c6e0
fix(providers): enable Codex and Claude reasoning summaries in V2
juliusmarminge Sep 17, 2026
b5adfb1
fix(timeline): preview live reasoning and buffer complete paragraphs
juliusmarminge Sep 17, 2026
5165442
fix(timeline): unify worklog layout and subagent presentation
juliusmarminge Sep 17, 2026
cc72334
fix(claude): retain requested subagent models
juliusmarminge Sep 17, 2026
3a96d32
fix(mobile): map V2 icons on Android
juliusmarminge Sep 17, 2026
d960bce
test(server): align replay requests with reasoning settings
juliusmarminge Sep 17, 2026
f63d420
fix(web): retain PR panel context after V2 rebase
juliusmarminge Sep 17, 2026
6c0a5d7
test(timeline): cover current worklog interactions and fix CI
juliusmarminge Sep 17, 2026
106365b
test(server): refresh reasoning expectations across replay fixtures
juliusmarminge Sep 17, 2026
089f05f
fix(web): hide idle PR check counts and match row typography (#12321)
Bil0000 Sep 17, 2026
a344dfe
fix(web): open linked PRs from the badge hover list (#12314)
Bil0000 Sep 17, 2026
ffab5fa
fix(web): configure alternate send and background shortcuts (#12174)
Bil0000 Sep 18, 2026
1fe2b38
fix(web): preserve main actions when rebasing v2
juliusmarminge Sep 18, 2026
0e29560
fix(server): hand off failed and interrupted turn context
juliusmarminge Sep 18, 2026
740bc7d
fix(queue): preserve and hold queued messages after restart
juliusmarminge Sep 18, 2026
2245a9f
refactor(mcp): use workspace-aware thread launches
juliusmarminge Sep 18, 2026
40b756e
fix(server): keep tool payloads out of completion queues (#12345)
juliusmarminge Sep 18, 2026
a04b692
refactor(web): reuse worklog rows for setup and created threads (#12347)
juliusmarminge Sep 18, 2026
2635635
refactor(web): centralize thread details section layout (#12348)
juliusmarminge Sep 18, 2026
c3166a2
refactor(mobile): share settings choice row defaults (#12349)
juliusmarminge Sep 18, 2026
2f4c937
refactor(web): share composer context labels (#12357)
juliusmarminge Sep 18, 2026
bb13107
refactor(web): reuse shared error alerts (#12361)
juliusmarminge Sep 18, 2026
d60b52c
refactor(mobile): share subagent status indicators (#12367)
juliusmarminge Sep 18, 2026
2e84995
t3code/ui composition audit/worklog link variant (#12375)
juliusmarminge Sep 18, 2026
2cd8e01
feat(mobile): manage scheduled tasks across environments (#12351)
juliusmarminge Sep 18, 2026
47843d7
refactor(ui): preserve shared controls across the V2 rebase
juliusmarminge Sep 18, 2026
f75fdd6
fix(v2): adapt to Effect rc.115 after rebase
juliusmarminge Sep 18, 2026
435f3f1
chore(v2): reconcile dependency lockfile after rebase
juliusmarminge Sep 18, 2026
99d176d
fix(web): share chat width and remove stale styling
juliusmarminge Sep 18, 2026
7a8d67f
chore(marketing): remove unused duplicate screenshot
juliusmarminge Sep 18, 2026
75c2db2
test(server): restore V2 transfer budgets and CI reporting
juliusmarminge Sep 18, 2026
d6b626b
fix(server): preserve reviewed secret rollback behavior on V2
juliusmarminge Sep 18, 2026
fc236c2
fix(web): reconcile sidebar search with V2 environment subscriptions
juliusmarminge Sep 18, 2026
870a481
fix(server): reconcile PR preview and checks fixtures
juliusmarminge Sep 18, 2026
2d1d352
fix(mobile): preserve merge-back action in shared thread header
juliusmarminge Sep 18, 2026
0d203b6
fix(server): unblock orchestrator CI checks
juliusmarminge Sep 18, 2026
5b40840
fix(web): anchor turn duration below the initiating prompt
juliusmarminge Sep 18, 2026
5e69c6e
fix(mobile): submit v2 previews to Play closed testing
juliusmarminge Sep 18, 2026
b42dc49
fix(mobile): remove stale preferences type import
juliusmarminge Sep 18, 2026
7842049
fix(desktop): allow V1 and V2 to run concurrently (#12480)
juliusmarminge Sep 18, 2026
ceb4066
fix(antigravity): accept supported legacy handshake versions (#12509)
juliusmarminge Sep 18, 2026
9319532
fix(cursor): preserve SDK runtime chunks and helpers in packages (#12…
juliusmarminge Sep 18, 2026
bb52211
feat(server): preserve budgeted history across provider handoffs (#12…
juliusmarminge Sep 18, 2026
5f4acd5
fix(server): decode v1 message events persisted with a reasoning role…
chrisdeeming Sep 18, 2026
03019e2
test(server): align V2 fixtures with OTLP log configuration
juliusmarminge Sep 18, 2026
5220750
fix(acp): reconcile elicitation validation with V2 protocol compatibi…
juliusmarminge Sep 19, 2026
69eb329
fix(server): release thread history after provider turn startup
juliusmarminge Sep 19, 2026
d4af127
fix(server): avoid full transcript reads in provider run guards
juliusmarminge Sep 19, 2026
473d83d
fix(server): release delivered snapshots from live RPC streams
juliusmarminge Sep 19, 2026
381b0b1
fix(shared): release successful results from completed trace spans
juliusmarminge Sep 19, 2026
684027e
fix(v2): reconcile main cleanup and mobile device controls
juliusmarminge Sep 19, 2026
e0d5f53
fix(server): decode transcript tool payloads only once
juliusmarminge Sep 19, 2026
1836f22
fix(server): refresh completed runs without loading transcripts
juliusmarminge Sep 19, 2026
2edd449
fix(server): avoid transcript reloads during run completion
juliusmarminge Sep 19, 2026
6187feb
fix(server): load targeted state when starting provider turns
juliusmarminge Sep 20, 2026
2e5d91c
fix(notifications): silence subagent threads
maria-rcks Sep 19, 2026
c1a761d
fix(preview): restore v2 sizing and project access (#12548)
juliusmarminge Sep 19, 2026
b9cc522
fix(server): settle V2 threads after linked PR merges (#12568)
Bil0000 Sep 19, 2026
697fa11
fix(web): show subagent models and running count in Lineage (#12491)
Bil0000 Sep 19, 2026
a54a228
fix(web): show Auto balance in the workspace host menu (#12481)
Bil0000 Sep 19, 2026
b0f9b15
fix(chat): present and summarize all T3 tools (#12671)
juliusmarminge Sep 20, 2026
7d540a8
feat(web): list linked PRs in workspace card (#12574)
Bil0000 Sep 20, 2026
b256cb0
fix(web): make PR badge hover lists easy to click (#12378)
Bil0000 Sep 20, 2026
b302871
fix(mobile): preserve native send choices and keyboard (#12770)
juliusmarminge Sep 20, 2026
df26ec3
fix(server): surface actionable provider failure messages (#12560)
juliusmarminge Sep 20, 2026
a6ee03e
fix(web): keep workspace card action hover uniform (#12766)
Bil0000 Sep 20, 2026
7f54fa9
fix(web): stop citation popovers flying into position
juliusmarminge Sep 21, 2026
ca174e6
fix(web): hide raw image markup in queue previews (#12820)
maria-rcks Sep 21, 2026
a38d8a7
feat(v2): show provider limit stops as Limited (#12677)
juliusmarminge Sep 21, 2026
5cea418
feat(v2): resume limited threads when usage resets (#12686)
juliusmarminge Sep 21, 2026
6e74e58
feat(v2): snooze limited threads until usage resets (#12687)
juliusmarminge Sep 21, 2026
b567b9e
fix(v2): keep failed turns visible in the transcript (#12783)
juliusmarminge Sep 21, 2026
adade8e
refactor(server): share scheduling for tasks and limit recovery (#12795)
juliusmarminge Sep 21, 2026
087c0bb
fix(v2): reconcile main UI, attachment limits, and logging fixtures
juliusmarminge Sep 21, 2026
eb8f663
test(v2): align handoff fixtures with larger attachment limits
juliusmarminge Sep 21, 2026
10423ba
feat(web): color handoff model names with their provider brand color …
maria-rcks Sep 21, 2026
cd45749
refactor(web): remove the agents right panel (#12835)
maria-rcks Sep 21, 2026
471a918
feat(web): clearer icons for the workspace panel controls (#12838)
maria-rcks Sep 21, 2026
5cd7da2
feat(web): give lineage subagent hovers the thread hover card (#12842)
maria-rcks Sep 21, 2026
bb2496a
fix(v2): reconcile main composer layout and undo actions
juliusmarminge Sep 21, 2026
792cd96
fix(v2): remove obsolete composer breakpoint animation
juliusmarminge Sep 21, 2026
25437a9
fix(server): avoid transcript reads when checking run interrupts
juliusmarminge Sep 21, 2026
307c8a3
fix(server): replace unnecessary full projection reads
juliusmarminge Sep 21, 2026
5b9dcf6
perf(pr): reduce quota use when refreshing workspace checks (#12442)
Bil0000 Sep 21, 2026
d0c03c0
test(v2): expose scoped reads in provider replay harness
juliusmarminge Sep 21, 2026
fe9bfb4
fix(server): recover Pi resumes without reusing native history (#12933)
juliusmarminge Sep 21, 2026
cee924f
fix(settings): restore V2 controls and shared settings layout
juliusmarminge Sep 21, 2026
595f73c
feat(web): edit the last queued message with Option+Up (#12599)
jakeleventhal Sep 21, 2026
019eca8
fix(web): edit automations from thread details (#12408)
saphid Sep 21, 2026
b151a8a
fix(server): preserve provider history across repeated rollbacks (#12…
Derpedyea Sep 21, 2026
998ffba
fix(server): start ACP MCP bridge in self-contained runtime (#12747)
pekth Sep 21, 2026
5793090
fix(server): launch contained ACP providers from packaged runtimes (#…
pekth Sep 21, 2026
92eef76
fix(web): restore sidebar order during thread context drags
juliusmarminge Sep 21, 2026
b28bd83
refactor(server): resolve self invocations through one shared helper …
juliusmarminge Sep 21, 2026
33b9a49
perf(server): stop decoding unrelated events during startup (#12846)
extoci Sep 21, 2026
548d275
perf(server): stop maintaining redundant projection indexes (#12847)
extoci Sep 21, 2026
9ff7150
feat(cursor): support browser login for the agent SDK (#12948)
Yash-Singh1 Sep 21, 2026
da5e3a0
fix(server): fail V2 runs when provider sessions cannot open (#12790)
pekth Sep 21, 2026
9ee41cb
fix(server): fail runs when provider startup preparation fails (#12409)
saphid Sep 21, 2026
b9cc308
fix(server): select an available provider for delegated tasks (#11870)
saphid Sep 21, 2026
5d30b2c
feat(web): show a turn's subagents as one collapsible card (#12839)
maria-rcks Sep 21, 2026
8a61680
feat(mobile): show subagents in a collapsible card (#12961)
juliusmarminge Sep 22, 2026
1977e1d
fix(chat): link agent attribution to its source thread (#12971)
juliusmarminge Sep 22, 2026
a2f44e1
fix(orchestration): settle subagent statuses and activation timers (#…
juliusmarminge Sep 22, 2026
a7a5e7e
fix(server): retry provider session opens before failing the run (#13…
t3dotgg Sep 22, 2026
5051a89
feat(auth): share provider sign-in flows across clients (#12965)
juliusmarminge Sep 22, 2026
7444b18
refactor(cursor): use shared provider account setup and storage (#12966)
juliusmarminge Sep 22, 2026
14bc934
feat(acp): connect registry providers to shared sign-in flows (#12967)
juliusmarminge Sep 22, 2026
38f84d3
fix(v2): reconcile main settings, auth, and shared controls
juliusmarminge Sep 23, 2026
9ecf4fa
fix(v2): preserve main scroll fixes and mobile module boundaries
juliusmarminge Sep 23, 2026
7eed5f2
fix(v2): hidden automatic queued runs no longer block settling a thread
juliusmarminge Sep 23, 2026
4ff5117
fix(v2): reconcile main mobile lists and provider compatibility
juliusmarminge Sep 23, 2026
7781e35
fix(v2): reconcile main shared controls and render recovery
juliusmarminge Sep 23, 2026
3f83d5e
fix(v2): remove stale panel styling exports
juliusmarminge Sep 23, 2026
a285c1d
feat(web): integrate responsive chat and thread details
juliusmarminge Sep 23, 2026
583ddba
feat(v2): make worktree branch naming configurable (#13294)
juliusmarminge Sep 23, 2026
6cf3507
fix(cua): show call titles and align app icons (#13307)
Yash-Singh1 Sep 23, 2026
88e517f
fix(server): reduce retained thread memory in PR lookups and turn sta…
juliusmarminge Sep 23, 2026
cae1167
refactor(server): detach PR lookup stacks instead of a custom cache (…
juliusmarminge Sep 23, 2026
802dd53
fix(mobile): lift working control above question overlay (#13297)
gabrielelpidio Sep 23, 2026
3e4ca4c
perf(server): speed up cold desktop launches (#13320)
Yash-Singh1 Sep 23, 2026
5113cdc
fix(web): handle thread details context clicks (#13323)
Yash-Singh1 Sep 24, 2026
1bd44f2
fix(desktop): resolve Windows userData without yielding before the Cl…
SunkenInTime Sep 24, 2026
f5474f0
fix(server): keep Claude subagent output in the subagent's thread
scratchyone Sep 24, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
23 changes: 22 additions & 1 deletion .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -86,6 +86,16 @@ jobs:
!/.repos/
sparse-checkout-cone-mode: false

# Blacksmith boots GitHub's Ubuntu runner image (gcc is usually present),
# but ACP process-tree live tests compile a small pthread fixture with `cc`
# and soft-skip when it is missing. Install build-essential so that path
# always runs in CI instead of silently no-oping.
- name: Install C toolchain for process-tree fixtures
run: |
sudo apt-get update
sudo apt-get install -y --no-install-recommends build-essential
command -v cc

- name: Setup Vite+
uses: voidzero-dev/setup-vp@v1
with:
Expand Down Expand Up @@ -149,7 +159,7 @@ jobs:
T3CODE_TRANSFER_BUDGET_RESULT_PATH: ${{ runner.temp }}/thread-transfer-result.json
run: vp run --filter t3 test --shard ${{ matrix.shard }}/${{ strategy.job-total }}

# src/server.test.ts writes the budget report, so exactly one shard
# integration/transferBudgetV2.integration.test.ts writes the report; exactly one shard
# produces these files. Gating the upload on their presence keeps a
# single `thread-transfer-results` artifact per run, which is the name
# thread-transfer-report.yml resolves.
Expand Down Expand Up @@ -181,6 +191,17 @@ jobs:
if-no-files-found: ignore
retention-days: 30

transfer-report:
name: Transfer report artifact
needs: test_server
runs-on: ubuntu-24.04
steps:
- name: Require transfer measurements
uses: actions/download-artifact@v8
with:
name: thread-transfer-results
path: ${{ runner.temp }}/thread-transfer

# Split out of Check and Test: both paid ~7-9s to install a Rust toolchain
# for checks that take under 3s, on the critical path of every PR.
rust:
Expand Down
14 changes: 13 additions & 1 deletion .github/workflows/mobile-eas-preview.yml
Original file line number Diff line number Diff line change
Expand Up @@ -78,7 +78,19 @@ jobs:
working-directory: apps/mobile
env:
EXPO_TOKEN: ${{ secrets.EXPO_TOKEN }}
run: eas env:pull preview --non-interactive
run: |
eas env:pull preview --non-interactive
# EAS Update disables dotenv loading. Keep the downloaded native config
# in its process environment so Android build and OTA fingerprints match.
node --input-type=module <<'NODE'
import { appendFileSync, readFileSync } from "node:fs";
import { parseEnv } from "node:util";
const env = parseEnv(readFileSync(".env.local", "utf8"));
const googleServicesFile = env.T3CODE_ANDROID_GOOGLE_SERVICES_FILE;
if (googleServicesFile) {
appendFileSync(process.env.GITHUB_ENV, `T3CODE_ANDROID_GOOGLE_SERVICES_FILE=${googleServicesFile}\n`);
}
NODE

- name: Deploy with fingerprint check
if: steps.expo-token.outputs.present == 'true'
Expand Down
7 changes: 4 additions & 3 deletions .github/workflows/mobile-eas-production.yml
Original file line number Diff line number Diff line change
Expand Up @@ -25,20 +25,21 @@ name: Mobile EAS Production
# workflow_dispatch remains as a manual override for both modes (e.g. to
# retry an errored build or force an OTA).
# Manual v2-preview builds keep the production app identity and disable OTA.
# They auto-submit to TestFlight and the Google Play closed testing track v2.
# Select the v2 branch when dispatching a preview build.
on:
workflow_dispatch:
inputs:
mode:
description: "build (+ auto-submit to TestFlight) or update (OTA)"
description: "build (+ auto-submit to TestFlight / Google Play) or update (OTA)"
required: true
type: choice
default: build
options:
- build
- update
profile:
description: "Store build profile (v2-preview supports build mode only)"
description: "Store build profile (v2-preview: TestFlight + Play closed track v2; build only)"
required: true
type: choice
default: production
Expand All @@ -49,7 +50,7 @@ on:
description: "Target platform"
required: true
type: choice
default: ios
default: all
options:
- ios
- android
Expand Down
11 changes: 11 additions & 0 deletions .github/workflows/mobile-showcase-screenshots.yml
Original file line number Diff line number Diff line change
Expand Up @@ -76,6 +76,17 @@ jobs:
echo "$vp_pnpm_bin" >> "$GITHUB_PATH"
"$vp_pnpm_bin/pnpm" --version

- name: Install AXe
# Locks the simulator and answers the notification prompt for the
# agent-activity scene.
# Homebrew refuses third-party tap formulae until they are trusted;
# older releases have no trust command and install them as is.
run: |
brew tap cameroncooke/axe
if brew commands | grep -qx trust; then brew trust --formula cameroncooke/axe/axe; fi
brew install cameroncooke/axe/axe
axe --version

- name: Capture iOS showcase
run: pnpm screenshots:mobile --platform ios --appearance "${{ inputs.appearance }}" --theme "${{ inputs.theme }}"

Expand Down
71 changes: 68 additions & 3 deletions .github/workflows/release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -259,13 +259,76 @@ jobs:
- name: Typecheck
run: vp run typecheck

# Keep tests on their own runners, using the same package split and server
# shards as CI, so the release check job does not spend its budget on tests.
test:
name: Release tests
needs: [preflight]
if: ${{ !failure() && !cancelled() && needs.preflight.result == 'success' }}
runs-on: blacksmith-8vcpu-ubuntu-2404
timeout-minutes: 10
steps:
- name: Checkout
uses: actions/checkout@v6
with:
ref: ${{ needs.preflight.outputs.ref }}
sparse-checkout: |
/*
!/.repos/
sparse-checkout-cone-mode: false

- name: Setup Vite+
uses: voidzero-dev/setup-vp@v1
with:
node-version-file: package.json
cache: true
run-install: true

- name: Ensure Electron runtime is installed
run: vp run --filter @t3tools/desktop ensure:electron

- uses: ./.github/actions/setup-apt-mirrors

- name: Install browser secret helper build libraries
run: sudo apt-get update && sudo apt-get install -y libsecret-1-dev pkg-config
run: |
sudo sed -i 's|http://|https://|g' /etc/apt/blacksmith-ubuntu-mirrors.txt /etc/apt/sources.list.d/ubuntu.sources
sudo apt-get update && sudo apt-get install -y libsecret-1-dev pkg-config build-essential

- name: Test
run: vp run --parallel --concurrency-limit 4 --filter '!t3' --filter '!@t3tools/monorepo' test

test_server:
name: Release server tests ${{ matrix.shard }}
needs: [preflight]
if: ${{ !failure() && !cancelled() && needs.preflight.result == 'success' }}
runs-on: blacksmith-8vcpu-ubuntu-2404
timeout-minutes: 10
strategy:
fail-fast: false
matrix:
shard: [1, 2, 3]
steps:
- name: Checkout
uses: actions/checkout@v6
with:
ref: ${{ needs.preflight.outputs.ref }}
sparse-checkout: |
/*
!/.repos/
sparse-checkout-cone-mode: false

- name: Setup Vite+
uses: voidzero-dev/setup-vp@v1
with:
node-version-file: package.json
cache: true
run-install: true

# No Electron setup here: `t3` (apps/server) has no Electron dependency
# and none of its tests touch the runtime. Only the non-server `test`
# job, which covers @t3tools/desktop, needs the download.
- name: Test
run: vp run test
run: vp run --filter t3 test --shard ${{ matrix.shard }}/${{ strategy.job-total }}

relay_public_config:
name: Resolve T3 Connect public config
Expand Down Expand Up @@ -630,13 +693,15 @@ jobs:
preflight,
relay_public_config,
quality,
test,
test_server,
desktop_mac_arm64,
desktop_linux_x64,
desktop_linux_arm64,
desktop_win_x64,
desktop_win_arm64,
]
if: ${{ !failure() && !cancelled() && needs.preflight.result == 'success' && needs.relay_public_config.result == 'success' && needs.quality.result == 'success' && needs.desktop_mac_arm64.result == 'success' && needs.desktop_linux_x64.result == 'success' && needs.desktop_linux_arm64.result == 'success' && needs.desktop_win_x64.result == 'success' && needs.desktop_win_arm64.result == 'success' }}
if: ${{ !failure() && !cancelled() && needs.preflight.result == 'success' && needs.relay_public_config.result == 'success' && needs.quality.result == 'success' && needs.test.result == 'success' && needs.test_server.result == 'success' && needs.desktop_mac_arm64.result == 'success' && needs.desktop_linux_x64.result == 'success' && needs.desktop_linux_arm64.result == 'success' && needs.desktop_win_x64.result == 'success' && needs.desktop_win_arm64.result == 'success' }}
runs-on: ubuntu-24.04 # blacksmith-8vcpu-ubuntu-2404
timeout-minutes: 15
permissions:
Expand Down
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,7 @@ squashfs-root/
.vercel
.gstack/
.plans/
/audits/
dist-electron/
.electron-runtime/
.showcase/
Expand Down
1 change: 1 addition & 0 deletions AGENTS.md
Original file line number Diff line number Diff line change
Expand Up @@ -158,6 +158,7 @@ Full glossary with file links: `docs/internals/glossary.md`
## Taste

- Complexity belongs at the adapter boundary. Orchestration stays pure, UI stays dumb.
- `apps/web/src/components/ui` exports own their look. Pick a `variant` or `size`; do not restyle one with `className`. If none fits and the look is a generic concept, add a variant to the component; a look that belongs to one feature stays in that feature's own component, not in `components/ui`. Layout classes (width, flex, margin, position) belong on the parent. `shadcn/no-restyle` fails lint on violations.
- Inferred types over annotations. `any` is the enemy.
- Comments describe how a thing is used, and move when the code moves. To be used mostly to describe functions, not to annotate every line of behavior.
- Our users drive agents all day and notice a dropped frame, a lying spinner, and a stale label. No continuously repainting animations; they peg the GPU on high-refresh displays.
Expand Down
1 change: 1 addition & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -84,6 +84,7 @@ Full docs live in [docs/](./docs). There's no docs site yet.
- [Permission modes](./docs/user/permission-modes.md)
- [Keyboard shortcuts](./docs/user/keybindings.md)
- [Project settings](./docs/user/project-settings.md)
- [Appearance preferences](./docs/user/appearance.md)
- [Remote access from a phone or another machine](./docs/user/remote-access.md)
- [Keeping app and server in sync](./docs/user/updating.md)
- [Source control integrations](./docs/user/source-control.md)
Expand Down
37 changes: 29 additions & 8 deletions apps/desktop/src/app/DesktopAppIdentity.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@ import * as DesktopAppIdentity from "./DesktopAppIdentity.ts";
import * as DesktopAssets from "./DesktopAssets.ts";
import * as DesktopConfig from "./DesktopConfig.ts";
import * as DesktopEnvironment from "./DesktopEnvironment.ts";
import * as DesktopUserData from "./DesktopUserData.ts";

const defaultEnvironmentInput = {
dirname: "/repo/apps/desktop/dist-electron",
Expand Down Expand Up @@ -124,13 +125,14 @@ const withIdentity = <A, E, R>(
return effect.pipe(
Effect.provide(
DesktopAppIdentity.layer.pipe(
Layer.provide(NodePath.layerPosix),
Layer.provideMerge(
FileSystem.layerNoop({
exists: (path) =>
input.legacyPathProbeError
? Effect.fail(input.legacyPathProbeError)
: Effect.succeed(
input.legacyPathExists === true && path.includes("T3 Code (Alpha)"),
input.legacyPathExists === true && /T3 Code \((Alpha|Dev)\)/.test(path),
),
readFileString: () =>
Effect.succeed(input.packageJson ?? '{"t3codeCommitHash":"abcdef1234567890"}'),
Expand All @@ -145,20 +147,36 @@ const withIdentity = <A, E, R>(
};

describe("DesktopAppIdentity", () => {
it.effect("keeps using the legacy userData path when it already exists", () =>
it.effect("isolates the V2 profile even when the legacy V1 profile exists", () =>
withIdentity(
Effect.gen(function* () {
const identity = yield* DesktopAppIdentity.DesktopAppIdentity;
const userDataPath = yield* identity.resolveUserDataPath;

assert.equal(userDataPath, "/Users/alice/Library/Application Support/T3 Code (Alpha)");
assert.equal(userDataPath, "/Users/alice/Library/Application Support/t3code-v2");
}),
{ legacyPathExists: true },
),
);

it.effect("keeps using the legacy development profile", () =>
withIdentity(
Effect.gen(function* () {
const identity = yield* DesktopAppIdentity.DesktopAppIdentity;
assert.equal(
yield* identity.resolveUserDataPath,
"/Users/alice/Library/Application Support/T3 Code (Dev)",
);
}),
{
legacyPathExists: true,
environment: { env: { VITE_DEV_SERVER_URL: "http://localhost:5173" } },
},
),
);

it.effect("preserves failures while inspecting the legacy userData path", () => {
const legacyPath = "/Users/alice/Library/Application Support/T3 Code (Alpha)";
const legacyPath = "/Users/alice/Library/Application Support/T3 Code (Dev)";
const cause = PlatformError.systemError({
_tag: "PermissionDenied",
module: "FileSystem",
Expand All @@ -172,15 +190,18 @@ describe("DesktopAppIdentity", () => {
const identity = yield* DesktopAppIdentity.DesktopAppIdentity;
const error = yield* identity.resolveUserDataPath.pipe(Effect.flip);

assert.instanceOf(error, DesktopAppIdentity.DesktopUserDataPathResolutionError);
assert.equal(error.legacyPath, legacyPath);
assert.instanceOf(error, DesktopUserData.DesktopUserDataInitializationError);
assert.equal(error.resourcePath, legacyPath);
assert.strictEqual(error.cause, cause);
assert.equal(
error.message,
`Failed to inspect legacy desktop user-data path at "${legacyPath}".`,
`Could not initialize Electron user data during inspect at ${legacyPath} (PermissionDenied).`,
);
}),
{ legacyPathProbeError: cause },
{
legacyPathProbeError: cause,
environment: { env: { VITE_DEV_SERVER_URL: "http://localhost:5173" } },
},
);
});

Expand Down
Loading
Loading