Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
324 commits
Select commit Hold shift + click to select a range
1da2d60
perf(web): the settings panels compile with the React Compiler (#20528)
juliusmarminge Oct 17, 2026
11ce406
fix(server): background subagents keep T3 tools after the parent turn…
maria-rcks Oct 17, 2026
7111501
fix(server): wake threads whose subagents' background work a restart …
maria-rcks Oct 17, 2026
70d60e0
fix(web): the sidebar no longer crashes when a thread leaves it (#20522)
gilitos92 Oct 17, 2026
79ad856
fix(mobile): align iOS segmented controls with action colors (#20721)
juliusmarminge Oct 17, 2026
5c5dcbc
perf(web): the pull requests page compiles with the React Compiler (#…
juliusmarminge Oct 17, 2026
23163fd
perf(web): the legacy sidebar compiles with the React Compiler (#20640)
juliusmarminge Oct 17, 2026
3cb1330
perf(client): a repository identity refresh keeps unchanged projects …
juliusmarminge Oct 17, 2026
a702563
perf(web): the new-thread handler keeps its identity across provider …
juliusmarminge Oct 17, 2026
f29640d
perf(web): the linked pull requests panel compiles without manual mem…
juliusmarminge Oct 17, 2026
311319e
perf(web): pull request markdown compiles without manual memoization …
juliusmarminge Oct 17, 2026
f1dccf2
perf(web): the pull request label and reviewer pickers compile withou…
juliusmarminge Oct 17, 2026
0241bbf
perf(web): the usage state hook compiles without manual memoization (…
juliusmarminge Oct 17, 2026
d2213c8
perf(web): the pull request guide tab compiles without manual memoiza…
juliusmarminge Oct 17, 2026
7c74a35
perf(web): the shell command block compiles without manual memoizatio…
juliusmarminge Oct 17, 2026
f43206d
perf(web): the composer draft store compiles without manual memoizati…
juliusmarminge Oct 17, 2026
b84a591
perf(web): the hosted prompt link landing compiles without manual mem…
juliusmarminge Oct 17, 2026
6805b64
perf(web): the model picker compiles without manual memoization (#20711)
juliusmarminge Oct 17, 2026
82a99f7
perf(web): the pull request state hooks compile without manual memoiz…
juliusmarminge Oct 17, 2026
4e8b5ee
perf(web): discovered local servers compile without manual memoizatio…
juliusmarminge Oct 17, 2026
dab2d5c
perf(web): the proposed plan card compiles without manual memoization…
juliusmarminge Oct 17, 2026
ce29ba9
perf(web): the pull request link hooks compile without manual memoiza…
juliusmarminge Oct 17, 2026
40b325b
perf(web): the preview mini player compiles without manual memoizatio…
juliusmarminge Oct 17, 2026
19a760c
perf(web): file entry icons compile without manual memoization (#20703)
juliusmarminge Oct 17, 2026
b413396
perf(web): toasts compile without manual memoization (#20702)
juliusmarminge Oct 17, 2026
c0cdb02
perf(web): the thread action menu hook compiles without manual memoiz…
juliusmarminge Oct 17, 2026
07956d1
perf(web): the new thread hooks compile without manual memoization (#…
juliusmarminge Oct 17, 2026
73d9a77
perf(web): the open-in picker compiles without manual memoization (#2…
juliusmarminge Oct 17, 2026
26a7df0
perf(web): the file save coordinator compiles without manual memoizat…
juliusmarminge Oct 17, 2026
b103346
perf(web): the combobox compiles without manual memoization (#20696)
juliusmarminge Oct 17, 2026
b190a2f
perf(web): the usage provider chart compiles without manual memoizati…
juliusmarminge Oct 17, 2026
39bcf7c
perf(web): the usage model dialog compiles without manual memoization…
juliusmarminge Oct 17, 2026
c712852
perf(web): update everything compiles without manual memoization (#20…
juliusmarminge Oct 17, 2026
06299ff
perf(web): the file preview panel compiles with the React Compiler (#…
juliusmarminge Oct 17, 2026
38b4357
perf(web): the MCP app frame compiles without manual memoization (#20…
juliusmarminge Oct 17, 2026
49c51bb
perf(web): main app navigation compiles without manual memoization (#…
juliusmarminge Oct 17, 2026
daf4643
perf(web): project file queries compile without manual memoization (#…
juliusmarminge Oct 17, 2026
4539e77
perf(web): the HTML render frame compiles without manual memoization …
juliusmarminge Oct 17, 2026
9e88a4f
perf(web): the sidebar update capsule compiles without manual memoiza…
juliusmarminge Oct 17, 2026
3c6df71
perf(web): the terminal session hooks compile without manual memoizat…
juliusmarminge Oct 17, 2026
6ad62b8
perf(web): the project file picker compiles without manual memoizatio…
juliusmarminge Oct 17, 2026
72b3340
perf(web): the sidebar chrome compiles without manual memoization (#2…
juliusmarminge Oct 17, 2026
41edad8
perf(web): the file context menu hooks compile without manual memoiza…
juliusmarminge Oct 17, 2026
2ff8e74
perf(web): the snapshot shortcut recorder compiles without manual mem…
juliusmarminge Oct 17, 2026
2a337fe
perf(web): the pull request linking hook compiles without manual memo…
juliusmarminge Oct 17, 2026
66eee62
perf(web): the port discovery hooks compile without manual memoizatio…
juliusmarminge Oct 17, 2026
dc060b1
perf(web): the new-thread link route compiles without manual memoizat…
juliusmarminge Oct 17, 2026
2643821
perf(web): the Electron browser host compiles with the React Compiler…
juliusmarminge Oct 17, 2026
d859445
perf(web): the CSV table preview compiles without manual memoization …
juliusmarminge Oct 17, 2026
8e49f23
perf(web): the thread lineage panel compiles without manual memoizati…
juliusmarminge Oct 17, 2026
de9756a
perf(web): the open panel pull request URL hook compiles without manu…
juliusmarminge Oct 17, 2026
cba00ae
perf(web): highlighted code tokens compile without manual memoization…
juliusmarminge Oct 17, 2026
383d8cc
perf(web): scoped settings hooks compile without manual memoization (…
juliusmarminge Oct 17, 2026
c5310c2
perf(web): the HTML document frame compiles without manual memoizatio…
juliusmarminge Oct 17, 2026
36c1fe5
perf(web): the new project hook compiles without manual memoization (…
juliusmarminge Oct 17, 2026
165fa98
perf(web): the scratch project hook compiles without manual memoizati…
juliusmarminge Oct 17, 2026
92b8967
perf(web): the expanded image dialog compiles without manual memoizat…
juliusmarminge Oct 17, 2026
d209e56
perf(web): the sidebar project groups hook compiles without manual me…
juliusmarminge Oct 17, 2026
9439b1a
perf(web): review file patches compile without manual memoization (#2…
juliusmarminge Oct 17, 2026
436ff01
perf(web): the draft hero headline compiles without manual memoizatio…
juliusmarminge Oct 17, 2026
3f5c16f
perf(web): settings project groups compile without manual memoization…
juliusmarminge Oct 17, 2026
3ba121e
perf(web): the chat route layout compiles without manual memoization …
juliusmarminge Oct 17, 2026
aca2b2a
perf(web): scoped model availability compiles without manual memoizat…
juliusmarminge Oct 17, 2026
e3a578f
perf(web): the environment hooks compile without manual memoization (…
juliusmarminge Oct 17, 2026
11f6676
perf(web): the provider settings panel compiles with the React Compil…
juliusmarminge Oct 17, 2026
15a8774
perf(web): the code block language picker compiles without manual mem…
juliusmarminge Oct 17, 2026
afb8da0
perf(web): the right panel tabs compile with the React Compiler (#20662)
juliusmarminge Oct 17, 2026
934398b
perf(web): settings search availability compiles without manual memoi…
juliusmarminge Oct 17, 2026
37db94e
perf(web): the editor preference hooks compile without manual memoiza…
juliusmarminge Oct 17, 2026
99fac26
perf(web): the code view file reveal hook compiles without manual mem…
juliusmarminge Oct 17, 2026
35548e2
perf(web): the command output panel compiles without manual memoizati…
juliusmarminge Oct 17, 2026
65d352e
perf(web): the annotatable diff view compiles without manual memoizat…
juliusmarminge Oct 17, 2026
4a9516d
perf(web): the chat header compiles with the React Compiler (#20656)
juliusmarminge Oct 17, 2026
a9fb608
perf(web): the theme library compiles with the React Compiler (#20655)
juliusmarminge Oct 17, 2026
4e8c01c
perf(web): the chat canvas compiles without manual memoization (#20654)
juliusmarminge Oct 17, 2026
d42681d
perf(web): useResizableWidth compiles without manual memoization (#20…
juliusmarminge Oct 17, 2026
c7fe6d3
perf(web): device controls compile without manual memoization (#20652)
juliusmarminge Oct 17, 2026
ec9f8e8
perf(web): file breadcrumbs compile with the React Compiler (#20651)
juliusmarminge Oct 17, 2026
c8b3ebf
perf(web): the changed files tree compiles without manual memoization…
juliusmarminge Oct 17, 2026
db2d0eb
perf(web): the provider update dismissal hook compiles without manual…
juliusmarminge Oct 17, 2026
472a62a
perf(web): the sidebar primitives compile with the React Compiler (#2…
juliusmarminge Oct 17, 2026
9b62eae
perf(web): the settings layout compiles without manual memoization (#…
juliusmarminge Oct 17, 2026
0ed3ae8
perf(web): the remote open hook compiles without manual memoization (…
juliusmarminge Oct 17, 2026
9578a59
perf(web): usePreviewBridge compiles with the React Compiler (#20644)
juliusmarminge Oct 17, 2026
b6dde72
perf(web): the citation chip compiles without manual memoization (#20…
juliusmarminge Oct 17, 2026
f63f026
perf(web): useHtmlRenderTheme compiles without manual memoization (#2…
juliusmarminge Oct 17, 2026
f22415a
perf(web): project content search compiles with the React Compiler (#…
juliusmarminge Oct 17, 2026
6a0587c
perf(web): the agent connect surface compiles without manual memoizat…
juliusmarminge Oct 17, 2026
0fdbb37
perf(web): the theme editor host compiles without manual memoization …
juliusmarminge Oct 17, 2026
478b06c
perf(web): the first-run gate compiles with the React Compiler (#20637)
juliusmarminge Oct 17, 2026
e6a1260
perf(web): the settings scope context compiles without manual memoiza…
juliusmarminge Oct 17, 2026
f99d12b
perf(web): the worktree base branch picker compiles without manual me…
juliusmarminge Oct 17, 2026
452d032
perf(web): the project file scripts hook compiles without manual memo…
juliusmarminge Oct 17, 2026
1b41060
perf(web): the diff file tree compiles with the React Compiler (#20631)
juliusmarminge Oct 17, 2026
d4c49bd
perf(web): thread status indicators compile without manual memoizatio…
juliusmarminge Oct 17, 2026
e544a4a
perf(web): useMediaQuery compiles without manual memoization (#20629)
juliusmarminge Oct 17, 2026
0b0f4db
perf(web): the source control settings compile with the React Compile…
juliusmarminge Oct 17, 2026
ef643a3
perf(web): scheduled task settings compile without manual memoization…
juliusmarminge Oct 17, 2026
530d119
perf(web): the remove-cloned-project hook compiles without manual mem…
juliusmarminge Oct 17, 2026
145b154
perf(web): resource telemetry diagnostics compile without manual memo…
juliusmarminge Oct 17, 2026
e36d0b2
perf(web): the archived threads hook compiles without manual memoizat…
juliusmarminge Oct 17, 2026
ecb973a
perf(web): the Connect onboarding dialog compiles with the React Comp…
juliusmarminge Oct 17, 2026
99544c9
perf(web): redacted sensitive text compiles without manual memoizatio…
juliusmarminge Oct 17, 2026
a9c0bb6
perf(web): the pull request stack hook compiles without manual memoiz…
juliusmarminge Oct 17, 2026
f241e79
perf(web): the resource telemetry hook compiles without manual memoiz…
juliusmarminge Oct 17, 2026
a37e0f3
perf(web): the provider settings form compiles without manual memoiza…
juliusmarminge Oct 17, 2026
a4f6caf
perf(web): the provider models section compiles with the React Compil…
juliusmarminge Oct 17, 2026
1b13922
perf(web): the CLI authorize surface compiles without manual memoizat…
juliusmarminge Oct 17, 2026
d6df197
perf(web): the pull request thread dialog compiles without manual mem…
juliusmarminge Oct 17, 2026
3f60d4d
perf(web): the assistant citation target hook compiles with the React…
juliusmarminge Oct 17, 2026
54d0900
perf(web): the device state hooks compile without manual memoization …
juliusmarminge Oct 17, 2026
a8dcb96
perf(web): the provider accent color picker compiles without manual m…
juliusmarminge Oct 17, 2026
e08b38a
perf(web): the T3 Connect account pages hook compiles without manual …
juliusmarminge Oct 17, 2026
97a9ca1
perf(web): the session scope hooks compile without manual memoization…
juliusmarminge Oct 17, 2026
196950a
perf(web): the provider update notification compiles without manual m…
juliusmarminge Oct 17, 2026
89a24e8
perf(web): the open-source notices panel compiles with the React Comp…
juliusmarminge Oct 17, 2026
23d40e0
perf(web): the project icon picker compiles without manual memoizatio…
juliusmarminge Oct 17, 2026
41f56d9
perf(web): the project scans hook compiles without manual memoization…
juliusmarminge Oct 17, 2026
54b1915
perf(web): the thread context drop hook compiles with the React Compi…
juliusmarminge Oct 17, 2026
2182353
perf(web): the local provider update groups compile without manual me…
juliusmarminge Oct 17, 2026
ed16d9f
perf(web): thread find navigation compiles without manual memoization…
juliusmarminge Oct 17, 2026
7591b64
perf(web): the font previews compile with the React Compiler (#20601)
juliusmarminge Oct 17, 2026
c36880e
perf(web): project actions settings compile without manual memoizatio…
juliusmarminge Oct 17, 2026
0b110ce
perf(web): the thread find bar compiles with the React Compiler (#20600)
juliusmarminge Oct 17, 2026
dec20ce
perf(web): the project scripts control compiles without manual memoiz…
juliusmarminge Oct 17, 2026
d915777
perf(web): keybindings settings compile without manual memoization (#…
juliusmarminge Oct 17, 2026
e648318
perf(web): the model picker sidebar compiles with the React Compiler …
juliusmarminge Oct 17, 2026
4c22df2
perf(web): the composer path search hook compiles without manual memo…
juliusmarminge Oct 17, 2026
855cd16
perf(web): the font picker compiles with the React Compiler (#20594)
juliusmarminge Oct 17, 2026
6515be7
perf(web): the project clone toasts compile without manual memoizatio…
juliusmarminge Oct 17, 2026
4e3f936
perf(web): the pending user input panel compiles with the React Compi…
juliusmarminge Oct 17, 2026
ed866ae
perf(web): useTurnDiffSummaries compiles without manual memoization (…
juliusmarminge Oct 17, 2026
789f605
perf(web): the provider update pill compiles with the React Compiler …
juliusmarminge Oct 17, 2026
d15f208
perf(web): the no-projects hero compiles without manual memoization (…
juliusmarminge Oct 17, 2026
567bc55
perf(web): useActiveThreadRef compiles without manual memoization (#2…
juliusmarminge Oct 17, 2026
54bffb9
perf(web): the custom model editor compiles without manual memoizatio…
juliusmarminge Oct 17, 2026
20851e3
perf(web): the root route compiles with the React Compiler (#20585)
juliusmarminge Oct 17, 2026
ede009e
perf(web): the diff worker pool provider compiles without manual memo…
juliusmarminge Oct 17, 2026
f0e060a
perf(web): the CLI command settings row compiles without manual memoi…
juliusmarminge Oct 17, 2026
6b563bb
perf(web): the composer banner stack compiles with the React Compiler…
juliusmarminge Oct 17, 2026
6f68d6d
perf(web): the primary session state hook compiles without manual mem…
juliusmarminge Oct 17, 2026
2814dc9
perf(web): the index route compiles with the React Compiler (#20580)
juliusmarminge Oct 17, 2026
6d22719
perf(web): the command palette results compile without manual memoiza…
juliusmarminge Oct 17, 2026
a793011
perf(web): the add provider dialog compiles without manual memoizatio…
juliusmarminge Oct 17, 2026
dd1ab3f
perf(web): useOrchestrationCommand compiles without manual memoizatio…
juliusmarminge Oct 17, 2026
2bb92ba
perf(web): the environment selector compiles without manual memoizati…
juliusmarminge Oct 17, 2026
9434bfd
perf(web): default theme adoption compiles with the React Compiler (#…
juliusmarminge Oct 17, 2026
745ca81
perf(web): useAtomQueryRunner compiles without manual memoization (#2…
juliusmarminge Oct 17, 2026
ef2d631
perf(web): the env mode selector compiles without manual memoization …
juliusmarminge Oct 17, 2026
242ec0e
perf(web): highlighted search lines compile without manual memoizatio…
juliusmarminge Oct 17, 2026
5069553
perf(web): the server update banner compiles without manual memoizati…
juliusmarminge Oct 17, 2026
8e6ace6
perf(web): the app sidebar layout compiles with the React Compiler (#…
juliusmarminge Oct 17, 2026
3ff9a73
perf(web): useAtomCommand compiles without manual memoization (#20568)
juliusmarminge Oct 17, 2026
7383cce
perf(web): the branch toolbar selector compiles without manual memoiz…
juliusmarminge Oct 17, 2026
95e6d92
perf(web): the composer state hooks compile without manual memoizatio…
juliusmarminge Oct 17, 2026
366106a
perf(web): the escape-to-go-back hook compiles without manual memoiza…
juliusmarminge Oct 17, 2026
63318a5
perf(web): the guide tour compiles without manual memoization (#20563)
juliusmarminge Oct 17, 2026
3603057
perf(web): the onboarding completion hook compiles without manual mem…
juliusmarminge Oct 17, 2026
1e42057
perf(web): the guide stop compiles without manual memoization (#20560)
juliusmarminge Oct 17, 2026
7492012
perf(web): the prompt link page compiles with the React Compiler (#20…
juliusmarminge Oct 17, 2026
095fdac
perf(web): the hosted browser webview compiles with the React Compile…
juliusmarminge Oct 17, 2026
78c0d7d
perf(web): the branch picker compiles without manual memoization (#20…
juliusmarminge Oct 17, 2026
7e850a0
perf(web): useStableCallback compiles without manual memoization (#20…
juliusmarminge Oct 17, 2026
fea5380
perf(web): the find reveal ref compiles without manual memoization (#…
juliusmarminge Oct 17, 2026
65ebf8f
perf(web): the primary cloud link hook compiles without manual memoiz…
juliusmarminge Oct 17, 2026
70d5cfb
perf(web): the project action editor resets its form without an effec…
juliusmarminge Oct 17, 2026
687f1e9
perf(web): the zoomable image compiles without manual memoization (#2…
juliusmarminge Oct 17, 2026
d94ea2c
perf(web): the PR guide diff loader compiles with the React Compiler …
juliusmarminge Oct 17, 2026
b78296a
perf(web): the traits picker compiles without manual memoization (#20…
juliusmarminge Oct 17, 2026
22585fd
perf(web): the managed relay hooks compile without manual memoization…
juliusmarminge Oct 17, 2026
b82d2e3
perf(web): the guide excerpt compiles without manual memoization (#20…
juliusmarminge Oct 17, 2026
16e6a6a
perf(web): AnimatedHeight compiles with the React Compiler (#20562)
juliusmarminge Oct 17, 2026
4576827
perf(web): the browser favicon store compiles without manual memoizat…
juliusmarminge Oct 17, 2026
7a08cdf
perf(web): the browser surface slot compiles with the React Compiler …
juliusmarminge Oct 17, 2026
8fcdcfe
perf(web): the link opener hook compiles without manual memoization (…
juliusmarminge Oct 17, 2026
02d48ae
perf(web): the guide file diff compiles without manual memoization (#…
juliusmarminge Oct 17, 2026
82f40d7
perf(web): the settings sidebar compiles with the React Compiler (#20…
juliusmarminge Oct 17, 2026
cffabdb
perf(web): Codex setup compiles with the React Compiler (#20674)
juliusmarminge Oct 17, 2026
fcda161
perf(web): chat markdown compiles with the React Compiler (#20715)
juliusmarminge Oct 17, 2026
2520821
perf(web): the device stream view compiles without manual memoization…
juliusmarminge Oct 17, 2026
33672c4
perf(web): the load-balancing hook compiles with the React Compiler (…
juliusmarminge Oct 17, 2026
a72b58e
fix(web): settings search keeps the clamped highlight when results sh…
juliusmarminge Oct 17, 2026
8254505
perf(web): the provider update launch notification compiles with the …
juliusmarminge Oct 17, 2026
0752826
perf(web): the model picker compiles without manual memoization (#20706)
juliusmarminge Oct 17, 2026
2993dfc
feat(web): step reasoning effort from the keyboard (#19928)
Bil0000 Oct 17, 2026
3ba883e
perf(web): the item inspector compiles without manual memoization (#2…
juliusmarminge Oct 17, 2026
e2e9b4d
fix(mobile): dev pairing link no longer opens Home inside a sheet (#2…
PixPMusic Oct 17, 2026
47683f6
fix(server): webhook request values reach the agent marked as request…
juliusmarminge Oct 17, 2026
c9b8f21
refactor(client-runtime): decide learned routes and session reuse in …
juliusmarminge Oct 17, 2026
bfe804d
refactor(web): thread find compiles under the strict React Compiler r…
juliusmarminge Oct 17, 2026
07fa354
test(web): chat markdown, timeline, and diff reveal tests pass the st…
juliusmarminge Oct 17, 2026
b38aa02
perf(web): Git actions control compiles without manual memoization (#…
juliusmarminge Oct 17, 2026
aa28bde
refactor(web): the theme search section compiles without manual memoi…
juliusmarminge Oct 17, 2026
8653c8f
fix(server): keep sensitive values out of settings reads, startup log…
juliusmarminge Oct 17, 2026
b3d0564
refactor(web): the thread pull requests panel keeps its caching witho…
juliusmarminge Oct 17, 2026
01e634a
refactor(web): scoped settings stay cached without "use memo" (#20767)
juliusmarminge Oct 17, 2026
68ed8d3
refactor(web): settings search items stay cached without "use memo" (…
juliusmarminge Oct 17, 2026
3af41ed
refactor(web): the file browser keeps its caching without "use memo" …
juliusmarminge Oct 17, 2026
341738b
refactor(web): the pull request stack hook keeps its caching without …
juliusmarminge Oct 17, 2026
0ad3fd6
refactor(web): the pull request thread dialog keeps its caching witho…
juliusmarminge Oct 17, 2026
37ea8a8
refactor(web): the MCP app frame keeps its caching without "use memo"…
juliusmarminge Oct 17, 2026
36cde6f
refactor(web): the changed files tree keeps its caching without "use …
juliusmarminge Oct 17, 2026
fc73c24
refactor(web): sidebar resize options stay cached without "use memo" …
juliusmarminge Oct 17, 2026
0a3806c
refactor(web): paginated branches keep their caching without "use mem…
juliusmarminge Oct 17, 2026
9554194
refactor(web): pull request markdown keeps its caching without "use m…
juliusmarminge Oct 17, 2026
4dd6a65
refactor(web): the pull request detail panel keeps its caching with f…
juliusmarminge Oct 17, 2026
64b16d8
refactor(web): the open panel pull request URL keeps its caching with…
juliusmarminge Oct 17, 2026
3b61890
refactor(web): the command output panel keeps its caching without "us…
juliusmarminge Oct 17, 2026
b7e376e
fix(client-runtime): the agents pill counts background agents from ea…
juliusmarminge Oct 17, 2026
c783897
refactor(web): the diff panel keeps its caching without "use memo" ho…
juliusmarminge Oct 17, 2026
d4314e8
refactor(web): the composer builds model options without a "use memo"…
juliusmarminge Oct 17, 2026
8dbfd92
refactor(web): the preview bridge keeps its stable thread ref without…
juliusmarminge Oct 17, 2026
ba9e9f5
refactor(web): the pull request code tab keeps its caching with one "…
juliusmarminge Oct 17, 2026
275e7de
refactor(web): provider models keep their caching without "use memo" …
juliusmarminge Oct 17, 2026
583ad66
refactor(web): the thread lineage panel keeps its caching without "us…
juliusmarminge Oct 17, 2026
3f480b8
refactor(web): the attachment preview keeps its caching without "use …
juliusmarminge Oct 17, 2026
4500480
refactor(web): the pending user input panel keeps its caching without…
juliusmarminge Oct 17, 2026
e6c0c5e
refactor(web): the queued runs control keeps its caching without "use…
juliusmarminge Oct 17, 2026
83ffe0a
refactor(web): the open-in picker keeps its caching without "use memo…
juliusmarminge Oct 17, 2026
a89a797
refactor(web): highlighted tokens keep their caching without "use mem…
juliusmarminge Oct 17, 2026
c0fda31
refactor(web): merged settings stay cached without "use memo" (#20765)
juliusmarminge Oct 17, 2026
edc703b
fix(server): a running Claude workflow member shows its answer so far…
juliusmarminge Oct 17, 2026
1e43699
refactor(web): the keybindings panel keeps its caching without "use m…
juliusmarminge Oct 17, 2026
bcd3c12
refactor(web): linked pull request status keeps its caching without "…
juliusmarminge Oct 17, 2026
af39520
refactor(web): the new-thread hook keeps its caching without "use mem…
juliusmarminge Oct 17, 2026
73af712
refactor(web): review file patches keep their caching without "use me…
juliusmarminge Oct 17, 2026
f4da080
chore(web): React compiler rules apply to every web file (#20791)
juliusmarminge Oct 17, 2026
8e0d5e5
refactor(server): resolve project and worktree folders in one place (…
juliusmarminge Oct 17, 2026
73d70a4
refactor(server): route git config through one env helper and end opt…
juliusmarminge Oct 17, 2026
144aae4
test(web): React tests run compiled in a real browser (#20797)
juliusmarminge Oct 17, 2026
23a5c77
fix(android): menu icons take taps (#20802)
juliusmarminge Oct 17, 2026
b987b57
fix(android): a composer focused through an app switch stays above th…
juliusmarminge Oct 17, 2026
b30f0df
refactor(web): the usage chart keeps its caching without "use memo" (…
juliusmarminge Oct 17, 2026
55ca0bb
refactor(web): pull request detail keeps its caching without "use mem…
juliusmarminge Oct 17, 2026
2c722ba
refactor(web): the legacy sidebar keeps its caching without "use memo…
juliusmarminge Oct 17, 2026
1c33a19
refactor(web): turn diff summaries keep their caching without "use me…
juliusmarminge Oct 17, 2026
805b98e
refactor(web): the pull requests page keeps its caching without "use …
juliusmarminge Oct 17, 2026
c60afa2
refactor(web): the terminal drawer keeps its caching without "use mem…
juliusmarminge Oct 17, 2026
44ecfd6
refactor(web): the model picker keeps its caching without "use memo" …
juliusmarminge Oct 17, 2026
78f8d38
refactor(web): pull request code tab keeps its caching without "use m…
juliusmarminge Oct 17, 2026
8eddd16
refactor(web): find reveal refs stay cached without "use memo" (#20818)
juliusmarminge Oct 17, 2026
767da3b
refactor(web): the branch selector keeps its caching without "use mem…
juliusmarminge Oct 17, 2026
efdaa4b
refactor(web): the guide excerpt keeps its caching without "use memo"…
juliusmarminge Oct 17, 2026
f9baf51
refactor(web): chat composer keeps its caching without "use memo" (#2…
juliusmarminge Oct 17, 2026
8c67f77
refactor(web): the usage page keeps its caching without "use memo" (#…
juliusmarminge Oct 17, 2026
f03378f
refactor(web): the hosted browser webview keeps its caching without "…
juliusmarminge Oct 17, 2026
e6ced71
refactor(web): the command palette provider lookup keeps its caching …
juliusmarminge Oct 17, 2026
2fbd431
chore(web): lint rejects "use memo" directives (#20843)
juliusmarminge Oct 17, 2026
c6571c9
Merge upstream/main 2fbd4318fc into coder-only
henrychu04 Oct 17, 2026
ce51c55
Document stage 2 seams and the browser test project
henrychu04 Oct 17, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 7 additions & 3 deletions AGENTS.md
Original file line number Diff line number Diff line change
Expand Up @@ -106,9 +106,13 @@ pnpm --filter @t3tools/source-control-core --filter @t3tools/source-control-gitl
pnpm build
```

Backend boundary changes need focused tests; `apps/coder-gateway/src/boundaryGuard.test.ts` checks
the gateway's URLs, connections, and spawn targets. Do not launch browsers or use computer-control
tooling without explicit user permission. Do not test against or modify `~/.t3/userdata`.
`pnpm test:coder` includes upstream's web `browser` Vitest project, which runs headless Chromium
through Playwright on the development machine; install it once with
`pnpm --filter @t3tools/web exec playwright install chromium`. Backend boundary changes need
focused tests; `apps/coder-gateway/src/boundaryGuard.test.ts` checks the gateway's URLs,
connections, and spawn targets. Apart from that test project, do not launch browsers or use
computer-control tooling without explicit user permission. Do not test against or modify
`~/.t3/userdata`.

## Working practices

Expand Down
4 changes: 3 additions & 1 deletion apps/server/src/coderWs.ts
Original file line number Diff line number Diff line change
Expand Up @@ -59,6 +59,7 @@ import * as ScreenshotArtifacts from "./workspace/ScreenshotArtifacts.ts";
import { readTurnItemAssetChunk } from "./workspace/TurnItemAssets.ts";
import * as WorkspaceEntries from "./workspace/WorkspaceEntries.ts";
import * as WorkspaceFileSystem from "./workspace/WorkspaceFileSystem.ts";
import * as KnownWorkspaces from "./workspace/KnownWorkspaces.ts";
import type * as WorkspacePaths from "./workspace/WorkspacePaths.ts";

/** The methods only the helper serves; `ws.ts` builds every other `CoderWsRpcGroup` method. */
Expand Down Expand Up @@ -111,7 +112,8 @@ interface UpstreamHelpers {
readonly projectFileFailureContext: (
error:
| WorkspaceFileSystem.WorkspaceFileSystemError
| WorkspacePaths.WorkspacePathOutsideRootError,
| WorkspacePaths.WorkspacePathOutsideRootError
| KnownWorkspaces.UnknownWorkspaceError,
) => {
readonly failure: ProjectFileFailure;
readonly resolvedPath?: string;
Expand Down
20 changes: 14 additions & 6 deletions apps/server/src/git/GitManager.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -1332,7 +1332,7 @@ it.layer(GitManagerTestLayer)("GitManager", (it) => {
yield* runGit(repoDir, ["push", "-u", "upstream", "main"]);
yield* runGit(repoDir, ["checkout", "-b", "develop"]);
yield* runGit(repoDir, ["push", "-u", "upstream", "develop"]);
yield* runGit(remoteDir, ["symbolic-ref", "HEAD", "refs/heads/develop"]);
yield* runGit(remoteDir, ["--git-dir=.", "symbolic-ref", "HEAD", "refs/heads/develop"]);
yield* runGit(repoDir, ["remote", "set-head", "upstream", "develop"]);

const { manager } = yield* makeManager({
Expand Down Expand Up @@ -3906,9 +3906,13 @@ it.layer(GitManagerTestLayer)("GitManager", (it) => {
),
).toContain("?? .vercel/");
expect(
yield* runGit(remoteDir, ["log", "-1", "--pretty=%s", "feature/push-dirty"]).pipe(
Effect.map((output) => output.stdout.trim()),
),
yield* runGit(remoteDir, [
"--git-dir=.",
"log",
"-1",
"--pretty=%s",
"feature/push-dirty",
]).pipe(Effect.map((output) => output.stdout.trim())),
).toBe("Push dirty branch");
}),
);
Expand Down Expand Up @@ -3958,7 +3962,11 @@ it.layer(GitManagerTestLayer)("GitManager", (it) => {
expect(result.pr.number).toBe(303);
expect((yield* runGit(repoDir, ["status", "--porcelain"])).stdout).toBe(statusBefore);
expect(
(yield* runGit(remoteDir, ["rev-parse", "feature/create-pr-only"])).stdout.trim(),
(yield* runGit(remoteDir, [
"--git-dir=.",
"rev-parse",
"feature/create-pr-only",
])).stdout.trim(),
).toBe(headBefore);
expect(
glabCalls.some((call) =>
Expand Down Expand Up @@ -4675,7 +4683,7 @@ it.layer(GitManagerTestLayer)("GitManager", (it) => {
const remoteDir = yield* createBareRemote();
yield* runGit(repoDir, ["remote", "add", "origin", remoteDir]);
yield* runGit(repoDir, ["push", "-u", "origin", "main"]);
yield* runGit(remoteDir, ["symbolic-ref", "HEAD", "refs/heads/main"]);
yield* runGit(remoteDir, ["--git-dir=.", "symbolic-ref", "HEAD", "refs/heads/main"]);

const peerDir = yield* makeTempDir("t3code-git-peer-");
yield* runGit(peerDir, ["clone", remoteDir, "."]);
Expand Down
75 changes: 74 additions & 1 deletion apps/server/src/mcp/OrchestratorMcpService.activity.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,7 @@ import * as GitVcsDriver from "../vcs/GitVcsDriver.ts";
import * as ThreadManagementService from "../orchestration-v2/ThreadManagementService.ts";
import type * as McpInvocationContext from "./McpInvocationContext.ts";
import * as OrchestratorMcpService from "./OrchestratorMcpService.ts";
import { liveThreadShell } from "./McpToolAccess.testkit.ts";

const layerOrchestratorService = OrchestratorMcpService.layer.pipe(
Layer.provide(Layer.mock(ThreadLaunchService.ThreadLaunchService)({})),
Expand Down Expand Up @@ -363,6 +364,7 @@ it("taskStatus returns task.providerInstanceId rather than the driver kind", asy
});

it("readThread and sendToThread reach threads in other projects", async () => {
let parentShell: OrchestrationV2ThreadShell | null = null;
let parentRuns: ReadonlyArray<unknown> = [
makeRun({ id: RunId.make("run-parent-live"), ordinal: 1, status: "running" }),
];
Expand Down Expand Up @@ -435,7 +437,9 @@ it("readThread and sendToThread reach threads in other projects", async () => {
Effect.succeed(
threadId === foreignThreadId
? (foreignProjection(threadId).thread as unknown as OrchestrationV2ThreadShell)
: null,
: threadId === parentThreadId
? parentShell
: null,
),
getTimelinePage: (threadId) =>
Effect.succeed({
Expand Down Expand Up @@ -528,5 +532,74 @@ it("readThread and sendToThread reach threads in other projects", async () => {
.deleteScheduledTask(makeScope(), { scheduledTaskId: ScheduledTaskId.make("task-foreign") })
.pipe(Effect.flip);
expect(staleDelete.code).toBe("parent_not_active");

// A background item keeps only its owning instance live, even after a switch.
const backgroundTasks = [
{
taskId: "background-subagent",
kind: "subagent" as const,
providerInstanceId: parentInstanceId,
},
];
parentShell = {
...liveThreadShell(parentThreadId, { activeRunId: null }),
pendingBackgroundTasks: backgroundTasks,
};
const backgroundSent = yield* service.sendToThread(makeScope(), {
threadId: foreignThreadId,
message: "background",
});
expect(backgroundSent.threadId).toBe(foreignThreadId);
const delegate = yield* service
.delegateTask(makeScope(), { task: "requires a run" })
.pipe(Effect.flip);
expect(delegate.code).toBe("parent_not_active");
const create = yield* service
.createThreads(makeScope(), { threads: [{ prompt: "requires a run" }] })
.pipe(Effect.flip);
expect(create.code).toBe("parent_not_active");
const secret = yield* service
.requestSecret(makeScope(), { label: "Secret", reason: "requires a run" })
.pipe(Effect.flip);
expect(secret.code).toBe("parent_not_active");

parentShell = { ...parentShell, providerInstanceId: customCodexInstanceId };
const switchedScope = {
...makeScope(),
thread: { ...makeScope().thread!, providerInstanceId: customCodexInstanceId },
};
const switched = yield* service
.sendToThread(switchedScope, { threadId: foreignThreadId, message: "wrong owner" })
.pipe(Effect.flip);
expect(switched.code).toBe("parent_not_active");
const mismatched = yield* service
.sendToThread(makeScope(), { threadId: foreignThreadId, message: "stale provider" })
.pipe(Effect.flip);
expect(mismatched.code).toBe("parent_not_active");

// A fresh active run wins over the earlier inactive projection and empty roster.
parentShell = liveThreadShell(parentThreadId);
const restarted = yield* service.sendToThread(makeScope(), {
threadId: foreignThreadId,
message: "new run",
});
expect(restarted.threadId).toBe(foreignThreadId);

parentShell = {
...parentShell,
activeRunId: null,
pendingBackgroundTasks: backgroundTasks,
archivedAt: now,
};
const archived = yield* service
.sendToThread(makeScope(), { threadId: foreignThreadId, message: "archived" })
.pipe(Effect.flip);
expect(archived.code).toBe("parent_not_active");

parentShell = { ...parentShell, archivedAt: null, pendingBackgroundTasks: [] };
const stopped = yield* service
.sendToThread(makeScope(), { threadId: foreignThreadId, message: "after stop" })
.pipe(Effect.flip);
expect(stopped.code).toBe("parent_not_active");
}).pipe(Effect.provide(layer), Effect.runPromise);
});
43 changes: 40 additions & 3 deletions apps/server/src/mcp/OrchestratorMcpService.ts
Original file line number Diff line number Diff line change
Expand Up @@ -50,6 +50,7 @@ import {
type OrchestratorMcpThreadWaitInput,
type OrchestratorMcpThreadWaitResult,
type ProviderInteractionMode,
type ProviderInstanceId,
type ProviderOptionDescriptor,
type ProviderOptionSelection,
type RuntimeMode,
Expand Down Expand Up @@ -199,6 +200,29 @@ function failure(code: OrchestratorMcpFailure["code"], message: string): Orchest
return new OrchestratorMcpFailure({ code, message });
}

/**
* A caller's thread is live while it is not archived, runs on the caller's
* provider instance, and has an active run or a background subagent that
* instance started. A background subagent outlives its run and calls tools
* with its thread's credential, which is revoked when the provider process
* goes away.
*/
export const isLiveCallerShell = (
shell: Pick<
OrchestrationV2ThreadShell,
"archivedAt" | "activeRunId" | "providerInstanceId" | "pendingBackgroundTasks"
> | null,
providerInstanceId: ProviderInstanceId | undefined,
) =>
shell !== null &&
shell.archivedAt === null &&
shell.providerInstanceId === providerInstanceId &&
(shell.activeRunId !== null ||
(shell.pendingBackgroundTasks?.some(
(task) => task.kind === "subagent" && task.providerInstanceId === providerInstanceId,
) ??
false));

function threadManagementFailure(error: unknown): OrchestratorMcpFailure {
if (!isThreadManagementError(error)) return failure("orchestration_error", errorMessage(error));
switch (error._tag) {
Expand Down Expand Up @@ -1059,13 +1083,26 @@ const make = Effect.gen(function* () {
scope: McpInvocationScope,
parent: Pick<OrchestrationV2ThreadProjection, "thread" | "runs">,
) => {
const notActive = failure(
"parent_not_active",
"The calling provider no longer owns an active thread run.",
);
const activeRun = ThreadManagementService.latestActiveRun(parent);
if (parent.thread.archivedAt === null && activeRun === undefined) {
// Decide from this one fresh snapshot: a run may have started since `parent` was read.
return threadManagement.getThreadShell(parent.thread.id).pipe(
Effect.mapError(threadManagementFailure),
Effect.flatMap((shell) =>
isLiveCallerShell(shell, scope.thread?.providerInstanceId)
? Effect.void
: Effect.fail(notActive),
),
);
}
return parent.thread.archivedAt !== null ||
activeRun === undefined ||
activeRun.providerInstanceId !== scope.thread?.providerInstanceId
? Effect.fail(
failure("parent_not_active", "The calling provider no longer owns an active thread run."),
)
? Effect.fail(notActive)
: Effect.void;
};

Expand Down
Loading