Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
2592 commits
Select commit Hold shift + click to select a range
7848f3a
fix(orchestration): select visible history before limiting SQL
juliusmarminge Aug 29, 2026
316df75
fix(web): port composer activity and grouping to orchestration v2
juliusmarminge Aug 30, 2026
df3b26e
fix(web): align queue headers and prevent stash overlap
juliusmarminge Aug 30, 2026
c831e5a
fix(web): share the outline for joined composer tabs
juliusmarminge Aug 30, 2026
c369217
fix(web): keep stash separate from the composer activity column
juliusmarminge Aug 30, 2026
880eeb8
refactor(web): use shared banner rows for queued messages
juliusmarminge Aug 30, 2026
9111da5
fix(web): keep queued message editing inside the queue panel
juliusmarminge Aug 30, 2026
9d46559
fix(web): keep queued messages in place while editing
juliusmarminge Aug 30, 2026
7284eab
fix(web): match composer actions to draft and modifier state
juliusmarminge Aug 30, 2026
843dde8
fix(web): keep composer shortcut tooltip stable on Mod
juliusmarminge Aug 30, 2026
89759e2
feat(web): summarize T3 orchestration actions
juliusmarminge Aug 30, 2026
08aa8ee
feat(mobile): port chat summaries and transitions to orchestration v2
juliusmarminge Aug 30, 2026
b20233b
fix(chat): remove added tool summary status counts
juliusmarminge Aug 30, 2026
77040df
fix(mobile): keep scroll bounds current after animations
juliusmarminge Aug 30, 2026
5406275
fix: reconcile main's round-17 features after the rebase
juliusmarminge Sep 1, 2026
df07217
feat(web): port working and thinking timeline rows to orchestration v2
juliusmarminge Sep 1, 2026
9822cc2
fix: reconcile main's round-18 features after the rebase
juliusmarminge Sep 2, 2026
647e21f
feat(server): evaluate automatic thread settlement in the v2 orchestr…
juliusmarminge Sep 2, 2026
7958d88
fix: reconcile main's round-19 features after the rebase
juliusmarminge Sep 2, 2026
10ef764
fix(web): right-align the stash shoulder tab again
juliusmarminge Sep 2, 2026
f6a4f26
fix(web): realign the composer and timeline with main
juliusmarminge Sep 2, 2026
98c491b
fix: reconcile main's round-20 features after the rebase
juliusmarminge Sep 2, 2026
b34ecf9
fix(server): reduce v2 recovery and runtime resource usage
juliusmarminge Sep 4, 2026
3bd494d
fix: reconcile main updates with orchestration v2
juliusmarminge Sep 4, 2026
65bfb13
fix(orchestration): stabilize Codex turn mapping and settlement
juliusmarminge Sep 4, 2026
6753dbb
fix(chat): match main timer and task placement
juliusmarminge Sep 4, 2026
d658c82
fix(mobile): restore composer and timeline behavior from main
juliusmarminge Sep 4, 2026
eb17d3c
fix(orchestrator): Stop treating a wait timeout as a dead child (#7427)
mwolson Sep 4, 2026
5358901
fix(orchestrator): Show when a completed delegated child still has wo…
mwolson Sep 4, 2026
8d8b92b
fix(orchestrator): Stop finished Codex turns from sitting on Waiting …
mwolson Sep 4, 2026
508318b
chore: format v2 files flagged by CI
juliusmarminge Sep 4, 2026
5205c13
test(server): include the shell indexes migration
juliusmarminge Sep 4, 2026
622a3a2
fix(mobile): pin the patched notifications dependency
juliusmarminge Sep 4, 2026
7a2a62d
fix(client-runtime): resolve work log source imports
juliusmarminge Sep 4, 2026
a76ec63
test(server): refresh replay runtime instruction expectations
juliusmarminge Sep 4, 2026
5bcabad
test(server): correlate OpenCode replay message identities
juliusmarminge Sep 4, 2026
be73d42
ci: run checks on v2 branch pushes
juliusmarminge Sep 4, 2026
d475e7d
test(server): use Effect Vitest for Cursor provider checks
juliusmarminge Sep 4, 2026
40139c1
fix: reconcile main updates with orchestration v2
juliusmarminge Sep 5, 2026
d80a033
fix(server): explain fetch failures during worktree preparation
juliusmarminge Sep 5, 2026
733d500
fix: reconcile upstream fixes with orchestration v2
juliusmarminge Sep 5, 2026
8b83902
fix(server): make project removal honor v2 threads
juliusmarminge Sep 5, 2026
20a6975
fix(mobile): render generic message attachments (#9929)
saphid Sep 5, 2026
ec64336
fix(mobile): use the archive eligibility guard when dispatching (#9930)
saphid Sep 5, 2026
fe510e4
fix(orchestration): persist linked pull requests (#8689)
juliusmarminge Sep 6, 2026
16041f9
feat(mcp): update thread metadata (#8690)
juliusmarminge Sep 6, 2026
d6e44f0
fix(server): keep old failures from waking snoozed V2 threads (#9903)
saphid Sep 6, 2026
a70b359
refactor(shared): share model-selection command choice (#10577)
juliusmarminge Sep 7, 2026
c292322
refactor(project): share create and update inputs (#10578)
juliusmarminge Sep 7, 2026
3d9e740
refactor(server): share attachment message intake (#10580)
juliusmarminge Sep 7, 2026
816751f
feat(mcp): expose thread organization commands (#10554)
juliusmarminge Sep 7, 2026
1967fd9
feat(mcp): expose existing queued message commands (#10555)
juliusmarminge Sep 7, 2026
b01efe8
feat(mcp): expose pending user questions (#10556)
juliusmarminge Sep 7, 2026
db51442
feat(mcp): expose thread model selection (#10557)
juliusmarminge Sep 7, 2026
2b838db
feat(mcp): expose fork and merge-back commands (#10558)
juliusmarminge Sep 7, 2026
1b54e6e
feat(mcp): expose preview list and close (#10559)
juliusmarminge Sep 7, 2026
b217cfe
feat(mcp): expose selected environment preferences (#10560)
juliusmarminge Sep 7, 2026
18c1c8a
feat(mcp): expose the existing thread search query (#10561)
juliusmarminge Sep 7, 2026
ce7b48a
feat(mcp): expose scheduled task run-now (#10562)
juliusmarminge Sep 7, 2026
f80cc42
feat(mcp): expose project service operations (#10563)
juliusmarminge Sep 7, 2026
72ff416
feat(mcp): expose attachment upload and send (#10564)
juliusmarminge Sep 7, 2026
d575833
feat(mcp): expose project thread launch service (#10565)
juliusmarminge Sep 7, 2026
13c5375
feat(mcp): expose branch-backed workspace discovery (#10566)
juliusmarminge Sep 7, 2026
2aab7d7
fix(orchestration): map late steering to follow-up turns
juliusmarminge Sep 6, 2026
ef3af10
fix: reconcile main's round-24 features after the rebase
juliusmarminge Sep 8, 2026
c722422
chore: remove accidentally committed audit artifacts
juliusmarminge Sep 8, 2026
6dafa0a
fix(ci): repair rebased checks and stop duplicate runs
juliusmarminge Sep 8, 2026
482cb92
fix(web): port auto-balance updates to v2 chat
juliusmarminge Sep 8, 2026
d372915
chore: format files exposed by CI
juliusmarminge Sep 8, 2026
60d104b
fix: reconcile main's round-26 updates after rebase
juliusmarminge Sep 8, 2026
e41ceba
fix(web): restore compact load-earlier control
juliusmarminge Sep 8, 2026
3459519
perf(orchestration): bound v2 transport payloads
juliusmarminge Sep 9, 2026
77d6a32
fix(web): preserve tool failures after output redaction
juliusmarminge Sep 9, 2026
592795b
fix: restore sidebar behavior after v2 rebases
juliusmarminge Sep 9, 2026
636eaca
fix(server): consolidate V2 migrations and refine runtime recovery
juliusmarminge Sep 9, 2026
44b1883
fix(web): simplify timeline rows and preserve collapsed composer cont…
juliusmarminge Sep 9, 2026
0839fa1
fix(web): smooth composer transitions and group approval worklogs
juliusmarminge Sep 9, 2026
c22c771
fix: reconcile main updates with orchestration v2
juliusmarminge Sep 9, 2026
67897d3
fix(server): report OpenCode descendant stop failures
juliusmarminge Sep 9, 2026
4778f51
fix(server): abort external OpenCode sessions on release
juliusmarminge Sep 9, 2026
fda432b
fix(server): retain thread baseline diffs across root runs
juliusmarminge Sep 9, 2026
4f9b243
fix(server): fail OpenCode turns on unexpected stream EOF
juliusmarminge Sep 9, 2026
0f7921b
fix(server): bound OpenCode runtime request replies
juliusmarminge Sep 9, 2026
4e34f5b
fix(client): bound socket resets after cold HTTP failures
juliusmarminge Sep 9, 2026
9223057
fix(server): query only due scheduled tasks during polling
juliusmarminge Sep 9, 2026
6fb22fc
fix(server): retain normalized OpenCode turn usage
juliusmarminge Sep 9, 2026
ce12ed7
perf(server): scope ordinary control reads to their targets
juliusmarminge Sep 9, 2026
68604d3
fix(server): retry initial title generation after transient failures
juliusmarminge Sep 9, 2026
a057e9e
fix(server): isolate Cursor metadata generation from workspaces
juliusmarminge Sep 9, 2026
060ff82
fix(server): preserve Claude Read image previews across clients
juliusmarminge Sep 9, 2026
8090cdb
fix(web): preserve generic files when editing queued messages
juliusmarminge Sep 9, 2026
32d161e
test(server): assert tool output redaction before storage fidelity
juliusmarminge Sep 9, 2026
93d23f6
test(web): cancel queued animation frames during worker cleanup (#10880)
saphid Sep 9, 2026
caf401e
fix: reconcile main devices and pull requests with orchestration v2
juliusmarminge Sep 10, 2026
3c0b50b
feat(providers): add Pi coding agent (#7211)
StiensWout Sep 10, 2026
d12aceb
feat(providers): standardize ACP providers (#6461)
StiensWout Sep 10, 2026
a0dcf87
feat: render background completions as typed notifications
juliusmarminge Sep 10, 2026
b6a5bae
fix(mcp): omit recursive screenshot metadata from tool inputs
juliusmarminge Sep 10, 2026
012a4db
fix(pi): use native forks and preserve rollback session identity
juliusmarminge Sep 10, 2026
6770a70
fix(pi): cap OpenRouter output budgets pending upstream fix
juliusmarminge Sep 10, 2026
574fa41
fix(web): show ACP sidebar icons and hold onboarding height while loa…
juliusmarminge Sep 10, 2026
29c92de
feat(server): deliver delegated completions through a durable mailbox
juliusmarminge Sep 10, 2026
1b37deb
fix(acp): support Devin terminals, questions, and native subagents
juliusmarminge Sep 10, 2026
ac2f913
fix(server): find active turns when answering async questions
juliusmarminge Sep 10, 2026
72e8157
fix(web): populate sidebar ACP branding from environment settings
juliusmarminge Sep 10, 2026
0b37f55
fix(acp): preserve native child messages and final summaries
juliusmarminge Sep 10, 2026
37f7669
fix(server): distinguish delegated task results from completed turns
juliusmarminge Sep 10, 2026
7424384
test(server): align Codex delegation instruction assertion
juliusmarminge Sep 10, 2026
340c77a
test(server): align delegation fixtures with task result semantics
juliusmarminge Sep 10, 2026
7ca3444
fix(server): classify Claude V2 structured terminal failures (#9897)
saphid Sep 10, 2026
1137f93
fix(orchestration): exclude rolled-back work from bounded recovery (#…
saphid Sep 10, 2026
896f9e8
test(orchestration): cover bounded V2 socket fallback paging (#9907)
saphid Sep 10, 2026
2c0b7fa
fix(server): wait for native Codex start before Stop (#10024)
saphid Sep 10, 2026
a26d8d3
fix(server): keep the native Grok default model (#10025)
saphid Sep 10, 2026
f3472d0
fix(server): fail V2 turns when the OpenCode event stream ends (#9905)
saphid Sep 10, 2026
b726e80
fix(web): preserve file attachments when editing queued runs (#9928)
saphid Sep 10, 2026
8c423bd
fix(server): preserve project mutation fields across transports (#9920)
saphid Sep 11, 2026
01ce382
fix(mobile): throttle streaming thread visit updates (#9931)
saphid Sep 11, 2026
b3b7fde
fix(orchestrator): preserve task-step elapsed time across restart (#1…
saphid Sep 11, 2026
3a44eb0
fix(server): preserve Claude interruption status during steering
juliusmarminge Sep 11, 2026
277540c
fix(server): wait for nested completion delivery before publishing re…
juliusmarminge Sep 11, 2026
ad527aa
test(server): verify background delivery with real providers
juliusmarminge Sep 11, 2026
99ab398
fix: keep working timers anchored to the active run
juliusmarminge Sep 11, 2026
1f2f7fb
perf: page complete turns and bound timeline reconciliation
juliusmarminge Sep 11, 2026
eb0fe04
perf(client): narrow thread subscriptions and navigation updates
juliusmarminge Sep 11, 2026
b27db04
feat(mobile): manage queued messages in a dedicated sheet
juliusmarminge Sep 11, 2026
291f33f
fix(web): fold completed trailing background activity
juliusmarminge Sep 11, 2026
d510fef
fix: reconcile main settings and previews with orchestration v2
juliusmarminge Sep 11, 2026
127d2fc
perf(client): reconcile replay batching with orchestration v2
juliusmarminge Sep 11, 2026
dc89de4
fix: reconcile main Codex model selection and UI updates
juliusmarminge Sep 11, 2026
e63f5fa
fix: reconcile main context previews and rewind updates
juliusmarminge Sep 12, 2026
950a653
fix(build): include protobuf and Connect license notices
juliusmarminge Sep 12, 2026
0044866
fix(mobile): pin expo-audio so the release smoke patch stays in use (…
saphid Sep 13, 2026
20d18f4
fix: reconcile main release and thread updates with V2
juliusmarminge Sep 14, 2026
f2dfcab
fix: repair v2 CI after environment disable and dead exports
juliusmarminge Sep 14, 2026
5455f8c
fix(web): update notification tests for v2 thread shells and drop dea…
juliusmarminge Sep 14, 2026
dd907da
fix(client-runtime): avoid Array#toSorted in thread lineage ordering
juliusmarminge Sep 14, 2026
6718a3f
fix(server): reject partial output from failed Cursor runs (#11534)
saphid Sep 14, 2026
97c7c28
fix(server): wake paused Cursor replay runs on mismatch (#11535)
saphid Sep 14, 2026
b4084c8
fix(server): load V2 replay fixtures through the platform path servic…
saphid Sep 14, 2026
6249687
fix(server): report missing interrupt-and-restart capability for forc…
saphid Sep 14, 2026
04116f4
fix(server): preserve Cursor directory and lint search results (#11533)
saphid Sep 14, 2026
154219a
fix(server): roll back question attachment copies when respond prepar…
saphid Sep 14, 2026
e4b8fdf
fix(server): restart the live session on model changes after dead rec…
saphid Sep 14, 2026
eafc3d5
fix(server): replay launches with server-allocated thread IDs (#11508)
saphid Sep 14, 2026
9ef5bdc
fix(web): keep the active-run header with the prompt that started it …
juliusmarminge Sep 15, 2026
e2044c1
refactor(web): centralize provider instance icons (#11829)
juliusmarminge Sep 15, 2026
af9b5e5
feat(web): add the thread action menu and inline rename to the chat h…
juliusmarminge Sep 15, 2026
0958dae
fix(web): keep the preview mini-player clear of the inline thread det…
juliusmarminge Sep 15, 2026
dbb325a
fix: reconcile main snooze controls with orchestration v2
juliusmarminge Sep 15, 2026
8972bb1
fix(web): adapt registry icons to light and dark themes
juliusmarminge Sep 15, 2026
74b2662
fix: reconcile main worktree setup and title changes with v2
juliusmarminge Sep 15, 2026
e5b5172
fix(server): isolate V2 migrations from the V1 database
juliusmarminge Sep 15, 2026
d71bfae
fix(ci): verify V2 branch pushes and remove unused helper
juliusmarminge Sep 15, 2026
eb9813d
revert: restore existing CI push triggers
juliusmarminge Sep 15, 2026
0aff10b
fix(web): retain server-side queuing on v2 after rebase
juliusmarminge Sep 15, 2026
e014d4c
fix(test): account for optional encoded provider settings
juliusmarminge Sep 15, 2026
fb3da20
fix(build): parse executable imports without matching generated source
juliusmarminge Sep 15, 2026
abd5f35
fix(build): isolate executable parser from Vite config
juliusmarminge Sep 15, 2026
5af3903
fix(server): project legacy thread shells during import
juliusmarminge Sep 15, 2026
7fb137a
fix(server): replay command events across persistence pages (#11499)
saphid Sep 15, 2026
14500bc
fix(orchestrator): report terminal runs after wait timeout (#11574)
saphid Sep 15, 2026
dd2d514
fix(server): skip corrupt scheduled-task rows instead of stopping the…
saphid Sep 15, 2026
04cc89d
fix(server): preserve due schedules across equivalent time formatting…
saphid Sep 15, 2026
20240f5
test(server): replay denied Claude writes through V2 (#11597)
saphid Sep 15, 2026
2d6a698
fix(server): fork Codex threads at the native turn boundary (#11490)
saphid Sep 15, 2026
c10cf59
fix(server): align MCP delegation support with live provider adapter …
saphid Sep 15, 2026
fb4a248
test(server): prove v1 to v2 cutover on a copied database and flag di…
saphid Sep 15, 2026
b107a64
fix(server): bound legacy thread projection requests (#10512)
cjavad Sep 15, 2026
9cd91a2
fix: reconcile main thread updates and Git improvements with v2
juliusmarminge Sep 15, 2026
1790000
fix(mobile): restore permission registry concurrency protection
juliusmarminge Sep 15, 2026
6d7f73d
fix(web): confine composer glass transition to input surface
juliusmarminge Sep 15, 2026
2c0f040
fix(server): restore hub limits updates in V2 (#11963)
Bil0000 Sep 15, 2026
1e8ce8f
fix(mobile): reject preview builds from v1 source
juliusmarminge Sep 15, 2026
a76b206
fix(mobile): skip preview validation without release credentials
juliusmarminge Sep 15, 2026
6d109fa
fix: stop retained background work after a turn settles
juliusmarminge Sep 15, 2026
09311a2
refactor: remove legacy token streaming
juliusmarminge Sep 15, 2026
e1b3cc6
fix: format subagent task names across clients
juliusmarminge Sep 15, 2026
244da29
fix: distinguish unsupported server connections
juliusmarminge Sep 15, 2026
dd34db4
fix: reconcile main updates with V2 orchestration
juliusmarminge Sep 15, 2026
6d248a7
fix(server): preserve PR links across V2 discovery and import
juliusmarminge Sep 16, 2026
8802a45
fix: reconcile main monograms and PR refresh with V2
juliusmarminge Sep 16, 2026
b372be5
fix(web): reset thread scroll and ignore hydration as a new turn
juliusmarminge Sep 16, 2026
24b26d2
fix(ci): pin patched Expo core during release resolution
juliusmarminge Sep 16, 2026
26b1a07
fix(web): invert follow-up behavior with Mod+Enter
juliusmarminge Sep 16, 2026
bcb563b
fix(web): show linked pull requests in thread details
juliusmarminge Sep 16, 2026
0270810
fix(web): restore main thread-switch scrolling without layout resets
juliusmarminge Sep 16, 2026
bc36f99
fix: reconcile main setup transitions with V2 threads
juliusmarminge Sep 16, 2026
469c875
fix(mobile): keep cached thread list across relaunch
juliusmarminge Sep 16, 2026
49c16da
perf(client): coalesce persistent cache writes during streaming (#12109)
juliusmarminge Sep 16, 2026
63f7209
perf(server): suppress unchanged shell enrichment refreshes (#12110)
juliusmarminge Sep 16, 2026
590013f
perf(mobile): skip unchanged thread row renders (#12116)
juliusmarminge Sep 16, 2026
8cdc0c9
perf(mobile): yield to UI during shell cache encoding (#12117)
juliusmarminge Sep 16, 2026
b64085d
perf(client): narrow mobile and web environment subscriptions (#12126)
juliusmarminge Sep 16, 2026
338bb5b
perf(mobile): ignore irrelevant config updates in thread lists (#12127)
juliusmarminge Sep 16, 2026
9db7f23
perf(mobile): limit thread model options to its provider (#12128)
juliusmarminge Sep 16, 2026
5666186
perf(client): stop scanning threads for unused shell timestamps (#12129)
juliusmarminge Sep 16, 2026
48dae27
feat(mobile): make the composer pill the hub for the running turn
juliusmarminge Sep 16, 2026
7f0a391
fix: reconcile main composer and provider updates with V2
juliusmarminge Sep 16, 2026
87b75da
test(server): restore Cursor usage coverage after V2 rebase
juliusmarminge Sep 16, 2026
b35af0f
feat(web): add compact PR checks to the workspace card (#11981)
Bil0000 Sep 16, 2026
544148a
feat(web): show subagent details and history in workspace card (#12079)
Bil0000 Sep 16, 2026
9d56392
fix(server): start V2 provider turn when checkpoint baseline capture …
SunkenInTime Sep 17, 2026
d31fbe7
fix(server): retain durable checkpoint index fixes on v2
juliusmarminge Sep 17, 2026
8f845d5
fix(server): finalize v2 runs when checkpoint ref lookup fails
juliusmarminge Sep 17, 2026
034a9c7
fix(server): reject v2 file restore in shared workspaces
juliusmarminge Sep 17, 2026
0c13370
fix(mobile): allow changing provider in a started thread (#12184)
juliusmarminge Sep 17, 2026
9668234
fix: reconcile main updates with V2 runtimes and timelines
juliusmarminge Sep 17, 2026
7315ad5
fix: align V2 question and checkpoint timelines across clients
juliusmarminge Sep 17, 2026
a95dfac
fix(mobile): guard question controls during answer submission
juliusmarminge Sep 17, 2026
65cd734
fix: adapt multi-model thread creation to V2 launches
juliusmarminge Sep 17, 2026
52c22b8
fix: restore V2 worktree setup transitions across clients
juliusmarminge Sep 17, 2026
b3bf187
fix(mobile): match web provider handoff dividers
juliusmarminge Sep 17, 2026
22ddc64
fix(mobile): preview queued message order during drag (#12232)
juliusmarminge Sep 17, 2026
d30af1a
fix: preserve linked PRs and show them in badge tooltips (#12262)
Bil0000 Sep 17, 2026
0e3cd58
fix(orchestrator): defer queued provider handoff until delivery (#12226)
juliusmarminge Sep 17, 2026
d34ba43
fix(v2): preserve running turns during provider handoff (#12255)
Bil0000 Sep 17, 2026
5529c70
feat(composer): attach threads as context (#12296)
juliusmarminge Sep 17, 2026
e367cb8
fix: reconcile main updates and preserve V2 preview upgrades
juliusmarminge Sep 17, 2026
8d515a1
fix(codex): retain V2 reasoning streams and completed traces
juliusmarminge Sep 17, 2026
b3d07f6
fix(timeline): align V2 reasoning disclosures with main
juliusmarminge Sep 17, 2026
fff0f11
fix(providers): enable Codex and Claude reasoning summaries in V2
juliusmarminge Sep 17, 2026
0478824
fix(timeline): preview live reasoning and buffer complete paragraphs
juliusmarminge Sep 17, 2026
e980ee7
fix(timeline): unify worklog layout and subagent presentation
juliusmarminge Sep 17, 2026
7fb56d2
fix(claude): retain requested subagent models
juliusmarminge Sep 17, 2026
6486200
fix(mobile): map V2 icons on Android
juliusmarminge Sep 17, 2026
6429068
test(server): align replay requests with reasoning settings
juliusmarminge Sep 17, 2026
ce8ea6d
fix(web): retain PR panel context after V2 rebase
juliusmarminge Sep 17, 2026
3338c2f
test(timeline): cover current worklog interactions and fix CI
juliusmarminge Sep 17, 2026
ec5bc66
test(server): refresh reasoning expectations across replay fixtures
juliusmarminge Sep 17, 2026
c01fc7c
fix(web): hide idle PR check counts and match row typography (#12321)
Bil0000 Sep 17, 2026
6870c0a
fix(web): open linked PRs from the badge hover list (#12314)
Bil0000 Sep 17, 2026
c208877
fix(web): configure alternate send and background shortcuts (#12174)
Bil0000 Sep 18, 2026
fda71f4
fix(web): preserve main actions when rebasing v2
juliusmarminge Sep 18, 2026
87706b3
fix(server): hand off failed and interrupted turn context
juliusmarminge Sep 18, 2026
60ddccd
fix(queue): preserve and hold queued messages after restart
juliusmarminge Sep 18, 2026
23ea90a
refactor(mcp): use workspace-aware thread launches
juliusmarminge Sep 18, 2026
73536a7
fix(server): keep tool payloads out of completion queues (#12345)
juliusmarminge Sep 18, 2026
bb1be2f
refactor(web): reuse worklog rows for setup and created threads (#12347)
juliusmarminge Sep 18, 2026
eebab2a
refactor(web): centralize thread details section layout (#12348)
juliusmarminge Sep 18, 2026
c654e71
refactor(mobile): share settings choice row defaults (#12349)
juliusmarminge Sep 18, 2026
7ccb76f
refactor(web): share composer context labels (#12357)
juliusmarminge Sep 18, 2026
e8fa755
refactor(web): reuse shared error alerts (#12361)
juliusmarminge Sep 18, 2026
a6b18c1
refactor(mobile): share subagent status indicators (#12367)
juliusmarminge Sep 18, 2026
114a688
t3code/ui composition audit/worklog link variant (#12375)
juliusmarminge Sep 18, 2026
c88e8d6
feat(mobile): manage scheduled tasks across environments (#12351)
juliusmarminge Sep 18, 2026
9cd70aa
refactor(ui): preserve shared controls across the V2 rebase
juliusmarminge Sep 18, 2026
9a177b7
fix(v2): adapt to Effect rc.115 after rebase
juliusmarminge Sep 18, 2026
934da57
chore(v2): reconcile dependency lockfile after rebase
juliusmarminge Sep 18, 2026
bb6f2ac
fix(web): show Auto balance in the workspace host menu
Bil0000 Sep 18, 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
  •  
  •  
  •  
The diff you're trying to view is too large. We only load the first 3000 changed files.
2 changes: 2 additions & 0 deletions .agents/skills/ios-debugger-agent/SKILL.md
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,8 @@ Avoid generic Mac window automation for switching among Simulator windows. Expli

## Choose build or launch

For T3 Code Mobile, run `node scripts/mobile-native-client.ts ensure ios <simulator-udid>` from the checkout on the simulator host first. It checks the local Expo native fingerprint against the installed client and builds/installs when stale, missing, or unknown. Then launch with the intended Metro bundle. Authorized verification includes native builds and installs; do not stop because the existing client is old. Use `check` instead of `ensure` only when the user explicitly prohibits rebuilding or requests a read-only check.

- Use `build_run_sim` when native source, native dependencies, entitlements, or project configuration changed.
- Use `test_sim` for the smallest relevant native test target or test cases; do not run an entire workspace test matrix routinely.
- Use `launch_app_sim` when a compatible app is already installed and no native rebuild is needed.
Expand Down
33 changes: 17 additions & 16 deletions .agents/skills/test-t3-app/SKILL.md
Original file line number Diff line number Diff line change
Expand Up @@ -13,13 +13,25 @@ Use this skill for the web client. For iOS Simulator, Android Emulator, or physi
2. Choose a base directory that belongs only to the current worktree or test:
- Use the repository's ignored `.t3` directory for reusable worktree-local state.
- Use `mktemp -d /tmp/t3code-test.XXXXXX` for disposable state and retain the printed absolute path.
3. Start the full web stack with `vp run dev --home-dir <base-dir>`.
3. Start the full web stack with `vp run dev`. Add `--share` when the user needs to open it from another tailnet device. In a linked worktree it defaults to that worktree's gitignored `.t3`; pass `--home-dir <base-dir>` only when the test needs a different isolated directory.
4. Keep the terminal session alive and read the selected server port, web port, base directory, and pairing URL from its output.

Treat a base directory as disposable only when it was created or deliberately selected for the current test. Never delete or directly seed the shared `~/.t3` directory. Prefer starting with a new temporary base directory over clearing state of uncertain ownership.

The worktree-local default deliberately outranks an ambient `T3CODE_HOME`; do not pass the shared home through to a worktree dev server.

Ports are derived from the worktree path but can shift when occupied. Always read the actual values from the `[dev-runner]` line.

Shared browser dev is single-origin: Vite proxies the backend paths, so never set `VITE_HTTP_URL` or `VITE_WS_URL` for `dev`/`dev:web`.

The dev runner disables browser auto-open by default. Do not pass `--browser` during automated testing: an automatically opened page can consume the one-time bootstrap token before the controlled browser uses it.

### Verify a shared environment before human handoff

When another person will use the printed pairing URL, first open the shared origin without the pairing path or fragment in the controlled browser and confirm the T3 Code app loads. This browser navigation is required even when curl succeeds because browsers block some otherwise reachable ports before making a network request.

Do not open the other person's complete pairing URL during this reachability check; doing so consumes its one-time token. If the agent also needs an authenticated browser, create and consume a separate pairing token, then leave a fresh token for the other person.

## Preserve the environment while iterating

Treat the overall testing or implementation loop—not an assistant turn or one verification pass—as the environment lifecycle boundary.
Expand All @@ -28,7 +40,7 @@ Treat the overall testing or implementation loop—not an assistant turn or one
- Do not stop the server merely because one verification pass completed or because you are yielding a response to the user.
- Before starting another environment, check whether the existing process and browser tab still serve the task. Reuse them when healthy instead of discarding useful state.
- On a later turn, verify that the existing process is alive and reuse its printed ports and base directory. If it exited, restart with the same base directory; create a new pairing token only when the browser session is no longer valid.
- Tell the user when a test environment remains available, including its non-secret web URL when useful. Never include a pairing token.
- Tell the user when a test environment remains available, including its non-secret web URL when useful. Include a pairing token only when the user still needs to pair (see below).

## Authenticate the browser on the first navigation

Expand All @@ -38,24 +50,13 @@ Treat the overall testing or implementation loop—not an assistant turn or one
4. Wait for the pairing exchange and redirect to finish before navigating elsewhere.
5. Continue in the same browser context so its stored bearer session remains available.

Treat pairing URLs as secrets. Do not copy them into final responses, screenshots, committed files, or durable logs. A pairing token is short-lived and single-use; opening the URL in another browser or opening it twice can consume it.
Keep pairing URLs out of screenshots, committed files, and durable logs. When the user asked for a shared environment, the deliverable IS the full pairing URL — paste it in your reply, token and all; a bare origin is useless to them. A pairing token is short-lived and single-use; opening the URL in another browser or opening it twice can consume it, so never open a URL you handed to the user.

## Recover a consumed or expired pairing token

Create another token against the same database and web URL as the running dev server:

```bash
T3CODE_PORT=<server-port> node apps/server/src/bin.ts auth pairing create \
--base-dir <base-dir> \
--dev-url <web-url> \
--base-url <web-url> \
--ttl 15m \
--label agent-ui-test
```

Use the `Pair URL` from this command once. Derive `<server-port>` and `<web-url>` from the current dev-runner output, including any automatically selected port offset. Setting `T3CODE_PORT` keeps the administrative CLI from probing for an unrelated free port.
Run `node apps/server/src/bin.ts pair` from the repository root. It discovers the running dev server (worktree `.t3` first, same precedence as the dev runner) and prints a fresh `Pair URL` against the server's current web origin, including a `--share` tailnet origin. Pass `--base-dir <base-dir>` only when the server was started with `--home-dir`, using the identical path.

Always pass `--dev-url` for a dev-runner environment so the generated pairing URL uses the current web origin. An explicit base directory stores runtime state in `<base-dir>/userdata`; the `<base-dir>/dev` fallback is only used by an implicit dev home. Use `auth pairing list` to inspect active token metadata; it intentionally cannot reveal token secrets.
Tokens from `pair` carry standard client scopes. The startup pairing URL carries admin scopes; if the user needs Settings → Connections management (`access:write`), restart the server and hand over the new startup URL instead.

## Inspect or seed SQLite state

Expand Down
68 changes: 35 additions & 33 deletions .agents/skills/test-t3-mobile/SKILL.md
Original file line number Diff line number Diff line change
Expand Up @@ -15,24 +15,28 @@ Inspect the host and the affected code before launching processes:

- On macOS with Xcode, prefer one representative iOS Simulator when the change is cross-platform so the user can watch through serve-sim. Load and follow [`ios-debugger-agent`](../ios-debugger-agent/SKILL.md), and load [`ios-simulator-browser`](../ios-simulator-browser/SKILL.md) when live streaming is available.
- On macOS, Linux, or Windows with the Android SDK, use one Android Emulator when Android is the affected surface or iOS tooling is unavailable.
- When the change is platform-specific, test that platform. When neither platform is viable, report the missing SDK, emulator, or dev-client prerequisite rather than claiming verification.
- When the change is platform-specific, test that platform. When neither platform is viable, report the missing SDK or emulator prerequisite rather than claiming verification. A missing development client is a build step, not a blocker.

Do not treat unavailable iOS tooling as a blocker when Android is a valid representative target.

## Choose the lightest valid launch path
## Ensure a compatible native client

- For JavaScript, TypeScript, or asset-only changes, reuse a compatible installed development client and start Metro. Do not rebuild native code merely to load a new bundle.
- For native source, native dependencies, entitlements, config plugins, or generated project changes, rebuild the affected platform.
- Use `vp run ios:dev` or `vp run android:dev` only when an Expo clean prebuild is actually required; both commands regenerate the native project.
- If the user requested no native rebuild and no compatible app is installed, reuse an existing compatible `.app` or `.apk` artifact when available. Otherwise report the missing dev client instead of silently rebuilding.
Authorized mobile verification includes building and installing a development client. A missing, stale, or unknown native client is not a reason to skip verification or leave a PR in draft. Build and install it, then continue. Respect an explicit user instruction not to rebuild; otherwise do not ask for separate permission.

The development identity on both platforms is:
Run this from the checkout being tested, on the machine that hosts the selected simulator or emulator. Select and boot one explicit iOS UDID or Android emulator serial first:

- App: `T3 Code Dev`
- Bundle/package identifier: `com.t3tools.t3code.dev`
- URL scheme: `t3code-dev`
```bash
node scripts/mobile-native-client.ts ensure ios <simulator-udid>
node scripts/mobile-native-client.ts ensure android <emulator-serial>
```

`ensure` compares the checkout's local Expo development fingerprint and the installed app's binary contents against the last successful build record. It reuses a matching client; otherwise it runs a clean prebuild, builds and installs the development app, and records the successful result. It does not start Metro. Start Metro below after it succeeds. On hosts with an `agent-job` requirement, run the entire `ensure` command through that queue.

Bundle or package presence proves the correct variant, not native compatibility. Reuse it only when the current changes did not alter its Expo SDK, native dependencies, config plugins, entitlements, generated project, or native source.
For a read-only decision, use `check` in place of `ensure`. Exit 0 means compatible, 2 means build required, and 1 means an operational error. An app installed outside this helper is initially unknown and gets rebuilt once. Records are local to the simulator host under `~/.cache/t3code/native-clients` and work across checkouts. Do not copy records between machines or write them manually.

A JavaScript-only diff, bundle identifier, app version, or recent install date does not prove native compatibility. Always check the whole checkout. Expo fingerprints are computed locally with `APP_VARIANT=development`; no EAS credentials or cloud build are required. Generated `ios/` and `android/` directories are excluded by `.fingerprintignore`, so edit native source modules or config plugins rather than generated output.

The development identity is `T3 Code Dev`, bundle/package `com.t3tools.t3code.dev`, scheme `t3code-dev`. If a build fails, investigate the build error and fix the local prerequisites. Report the concrete failure if it cannot be resolved, not “no compatible client.”

## Start one disposable T3 environment

Expand Down Expand Up @@ -66,7 +70,7 @@ Use these client origins:
- Android Emulator: `http://10.0.2.2:<server-port>`
- Physical device: bind the backend to `0.0.0.0` and use the host's reachable LAN origin

Always enter the complete `http://` origin; the mobile host field otherwise assumes HTTPS. When testing web and mobile together, run `vp run dev --home-dir <base-dir> --host 127.0.0.1` instead and do not launch a second backend over the same base directory.
Enter the complete `http://` origin to make the test transport explicit. Bare IP addresses default to HTTP, while bare hostnames default to HTTPS. When testing web and mobile together, run `vp run dev --home-dir <base-dir> --host 127.0.0.1` instead and do not launch a second backend over the same base directory.

## Start or reuse Metro safely

Expand All @@ -80,7 +84,6 @@ Run Metro from `apps/mobile`.
APP_VARIANT=development vp exec expo start \
--dev-client \
--scheme t3code-dev \
--clear \
--lan \
--port <metro-port>
```
Expand All @@ -99,21 +102,19 @@ Use `ios-debugger-agent` to select one UDID and set these XcodeBuildMCP session
- Simulator ID: the selected UDID
- Bundle ID: `com.t3tools.t3code.dev`

Check the installed client with:
After `ensure` succeeds, open the Metro URL:

```bash
xcrun simctl get_app_container <simulator-udid> com.t3tools.t3code.dev app
xcrun simctl openurl <simulator-udid> <printed-dev-client-url>
```

Accept the iOS confirmation prompt and dismiss the developer menu when it obscures the app.

### Android launch

Select one running emulator serial from `adb devices` and check the installed client:
Use the emulator serial already checked by `ensure`:

```bash
adb -s <emulator-serial> shell pm path com.t3tools.t3code.dev
adb -s <emulator-serial> reverse tcp:<metro-port> tcp:<metro-port>
adb -s <emulator-serial> shell am start -W \
-a android.intent.action.VIEW \
Expand All @@ -125,31 +126,29 @@ Do not start, stop, erase, or reconfigure an emulator owned by another task. Tra

## Pair each client once

Issue a fresh credential against the running backend's exact base directory:
Use the bundled helper from the repository root. It issues a fresh credential against the running backend's exact base directory, opens the existing Add Environment route with the credential in an encoded query parameter, and asks that route to connect once:

```bash
T3CODE_PORT=<server-port> node apps/server/src/bin.ts auth pairing create \
--base-dir <base-dir> \
--base-url <mobile-origin> \
--ttl 15m \
--label agent-mobile-<short-device-id>
.agents/skills/test-t3-mobile/scripts/pair-client.sh \
ios <simulator-udid> <server-port> <base-dir>

.agents/skills/test-t3-mobile/scripts/pair-client.sh \
android <emulator-serial> <server-port> <base-dir>
```

In PowerShell, set `$env:T3CODE_PORT = "<server-port>"` first and run the `node ... auth pairing create` command without the leading assignment.
Run only the command for the selected platform. The helper uses `http://127.0.0.1:<server-port>` for iOS and `http://10.0.2.2:<server-port>` for Android. Pass a fifth argument only when testing a non-development URL scheme.

If the visible Add Environment action is not exposed as a semantic target, open the app's registered route instead of guessing coordinates:
The helper opens this registered route:

```bash
xcrun simctl openurl <simulator-udid> 't3code-dev://connections/new'
adb -s <emulator-serial> shell am start -W \
-a android.intent.action.VIEW \
-d 't3code-dev://connections/new' \
com.t3tools.t3code.dev
```text
t3code-dev://connections/new?pairingUrl=<encoded-pairing-url>&autoConnect=1
```

Run only the command for the selected platform.
The Add Environment route owns the behavior: `pairingUrl` prefills its normal host and token inputs, while `autoConnect=1` submits once in development builds and returns to Home after success. Without `autoConnect`, the same route only prefills the form for manual inspection.

Do not enter pairing hosts or tokens through simulator keyboard automation. Xcode's semantic typer sends HID-style key events through the simulator's active keyboard state, which can corrupt uppercase tokens and punctuation even when the host Mac uses a U.S. input source. The one-shot route is the deterministic pairing path. Use the visible form only as a fallback, and paste credentials rather than typing them character by character.

In T3 Code Dev, open Add Environment and enter the complete `<mobile-origin>` and newly printed `Token`. Verify the expected seeded projects appear before exercising the affected flow.
Verify the expected seeded projects appear before exercising the affected flow.

Pairing credentials are secret, short-lived, and single-use. Create a different credential for every simulator, emulator, physical device, or browser. If an attempt fails, issue a new credential rather than retrying the old one. Do not expose tokens in screenshots, commits, or final responses.

Expand Down Expand Up @@ -181,8 +180,11 @@ Keep local verification focused. Do not turn this workflow into a full repositor
## Troubleshoot predictable failures

- **Old UI or an old error appears:** verify Metro's worktree, variant, URL, and port before diagnosing the app.
- **Metro serves stale or invalid transforms after those checks:** stop the owned Metro process and run `vp run dev:client:reset` once on the standard port. For a custom port, add `--clear` to the complete explicit `expo start` command above.
- **The environment remains empty:** verify the platform-specific HTTP origin, use a fresh token, and confirm project seeding used the identical base directory.
- **A second client cannot pair:** pairing tokens are single-use; issue another token.
- **The pairing form opens but does not connect:** confirm the deep link uses the existing `connections/new` route, includes `autoConnect=1`, and carries a freshly minted encoded `pairingUrl`.
- **Pairing text changes case or punctuation:** do not retry semantic typing. Use `scripts/pair-client.sh`; the simulator keyboard layout and HID input path are not reliable for credentials.
- **iOS semantic actions fail:** set explicit XcodeBuildMCP defaults and refresh with `snapshot_ui`.
- **Android cannot reach Metro:** verify `adb reverse` for the exact Metro port and relaunch the development-client URL.
- **Android cannot reach the backend:** use `10.0.2.2`, not `127.0.0.1`, for the Android Emulator.
72 changes: 72 additions & 0 deletions .agents/skills/test-t3-mobile/scripts/pair-client.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,72 @@
#!/usr/bin/env bash

set -euo pipefail

usage() {
echo "Usage: $0 <ios|android> <device-id> <server-port> <base-dir> [url-scheme]" >&2
exit 2
}

[[ $# -ge 4 && $# -le 5 ]] || usage

platform="$1"
device_id="$2"
server_port="$3"
base_dir="$4"
url_scheme="${5:-t3code-dev}"

case "$platform" in
ios)
mobile_origin="http://127.0.0.1:${server_port}"
;;
android)
mobile_origin="http://10.0.2.2:${server_port}"
;;
*)
usage
;;
esac

repo_root="$(git rev-parse --show-toplevel)"
cd "$repo_root"

if ! pairing_output="$({
T3CODE_PORT="$server_port" node apps/server/src/bin.ts auth pairing create \
--base-dir "$base_dir" \
--base-url "$mobile_origin" \
--ttl 15m \
--label "agent-mobile-${device_id:0:8}"
} 2>&1)"; then
echo "Could not mint a mobile pairing credential." >&2
exit 1
fi

pairing_url="$(printf '%s\n' "$pairing_output" | sed -n 's/^Pair URL: //p' | tail -n 1)"
if [[ -z "$pairing_url" ]]; then
echo "Could not parse the mobile pairing URL." >&2
exit 1
fi

deep_link="$(PAIRING_URL="$pairing_url" URL_SCHEME="$url_scheme" node - <<'NODE'
const query = new URLSearchParams({
pairingUrl: process.env.PAIRING_URL,
autoConnect: "1",
});
process.stdout.write(`${process.env.URL_SCHEME}://connections/new?${query}`);
NODE
)"

case "$platform" in
ios)
xcrun simctl openurl "$device_id" "$deep_link"
;;
android)
# adb shell re-joins its arguments and evaluates them through the device
# shell, so the deep link's `?`/`&` must be quoted once more for that shell.
adb -s "$device_id" shell \
"am start -W -a android.intent.action.VIEW -d '$deep_link' com.t3tools.t3code.dev" \
>/dev/null
;;
esac

echo "Opened the existing Add Environment route with a fresh pairing credential."
8 changes: 8 additions & 0 deletions .coderabbit.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
reviews:
review_status: false
auto_review:
enabled: true
path_filters:
# Vendored read-only reference checkouts of upstream Effect and Alchemy
# (see scripts/lib/reference-repos.ts). Nothing imports from them.
- "!.repos/**"
Loading
Loading