Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
263 commits
Select commit Hold shift + click to select a range
7cf5b28
perf(mobile): skip unused legacy list work (#9679)
t3dotgg Sep 4, 2026
8e3aa32
perf(marketing): serve images at their display size (#9682)
t3dotgg Sep 4, 2026
27e6cc2
perf(server): cache and stream static web assets (#9669)
t3dotgg Sep 4, 2026
2263e13
perf(server): batch projector cursor writes (#9671)
t3dotgg Sep 4, 2026
f2e3764
perf(server): stop retaining unused OpenCode tool history (#9684)
t3dotgg Sep 4, 2026
44dc8ae
perf(mobile): reuse chat feed rows during streaming (#9688)
t3dotgg Sep 4, 2026
ec8b211
perf(server): omit repeated OpenCode progress logs (#9689)
t3dotgg Sep 4, 2026
2460649
perf(clients): avoid waiting to read cached relay tokens (#9691)
t3dotgg Sep 4, 2026
777f5bb
perf(mobile): reuse diff rows during comment edits (#9693)
t3dotgg Sep 4, 2026
dab5f6e
perf(web): defer composer draft serialization (#9695)
t3dotgg Sep 4, 2026
1587f24
feat(server): measure provider turn token usage (#9132)
t3dotgg Sep 4, 2026
4ee2a9d
perf(marketing): stop continuous homepage motion (#9697)
t3dotgg Sep 4, 2026
c163d50
perf(server): avoid full patches for checkpoint summaries (#9694)
t3dotgg Sep 4, 2026
b3e1d88
perf(web): defer diff workers until a code view opens (#9692)
t3dotgg Sep 4, 2026
010d6bb
perf(marketing): serve website fonts locally (#9701)
t3dotgg Sep 4, 2026
3bbbc1d
perf(server): stop rebuilding terminal history per chunk (#9703)
t3dotgg Sep 4, 2026
dffb4cd
perf(server): use one query for buffered provider events (#9706)
t3dotgg Sep 4, 2026
c75299e
perf(relay): avoid repeated activity decoding (#9708)
t3dotgg Sep 4, 2026
c7c1dfe
perf(web): stop continuous chat status animations (#9709)
t3dotgg Sep 4, 2026
7839140
fix(mobile): preserve saved work after storage read failures (#9710)
t3dotgg Sep 4, 2026
da7e46d
perf(web): stop replaying terminal buffers on rollover (#9707)
t3dotgg Sep 4, 2026
9510390
feat(web): preview pull request links (#9631)
maria-rcks Sep 4, 2026
c66f15f
perf(client): reduce thread-list update work (#9716)
t3dotgg Sep 4, 2026
d536b05
fix(server): settle inactive threads with open PRs (#9610)
Gigioxx Sep 4, 2026
108f295
fix(server): bound slow-client event buffers (#9715)
t3dotgg Sep 4, 2026
8ccb933
test(server): allow either valid file-search match (#9720)
t3dotgg Sep 4, 2026
8357eef
fix(web): match provider settings layout for disconnected devices (#9…
flamboh Sep 4, 2026
120fab1
fix(web): keep the slash menu above the composer when vertical space …
Mnigos Sep 4, 2026
9eb4d71
fix(mobile): remove provider setup (#9721)
juliusmarminge Sep 4, 2026
5eab021
perf(web): stop rendering hidden terminals (#9718)
t3dotgg Sep 4, 2026
c4353bc
fix(mobile): read file-backed image drafts before enabling them (#9713)
t3dotgg Sep 4, 2026
50bfca4
perf(server): replay only the selected thread (#9726)
t3dotgg Sep 4, 2026
7d5dc66
fix(web): mute composer helper text (#9654)
jakeleventhal Sep 4, 2026
c7bf311
feat(web): unpin threads from the sidebar multi-select menu (#9651)
gsimone Sep 4, 2026
19c1710
perf(web): reuse timeline rows while text streams (#9725)
t3dotgg Sep 4, 2026
088cc3f
fix(relay): bound stalled push requests (#9734)
t3dotgg Sep 4, 2026
c8f77e0
perf(server): stop caching unused OpenCode tool parts (#9738)
t3dotgg Sep 4, 2026
cfc9bf3
fix(web): fold single trailing activity (#9739)
maria-rcks Sep 4, 2026
cbe93e8
fix(web): show project settings for new threads (#9743)
maria-rcks Sep 4, 2026
d6e29dc
perf(mobile): bound the parsed review cache (#9749)
t3dotgg Sep 4, 2026
fec606f
perf(web): avoid repeated terminal metadata scans (#9747)
t3dotgg Sep 4, 2026
cf9729d
perf(server): bound terminal history by bytes (#9748)
t3dotgg Sep 4, 2026
a76b898
feat(web): link pull request authors to profiles (#9627)
maria-rcks Sep 4, 2026
0de956e
fix(web): refine server update notice (#9744)
maria-rcks Sep 4, 2026
d7cf8aa
perf(client): stop thread streams when unused (#9740)
t3dotgg Sep 4, 2026
77b655c
perf(mobile): defer file preview highlighter startup (#9752)
t3dotgg Sep 4, 2026
6365919
perf(server): skip history reads for metadata commands (#9758)
t3dotgg Sep 4, 2026
15eda89
perf(web): defer image URL requests for thread history (#9760)
t3dotgg Sep 4, 2026
bc03c36
fix(models): make GPT-6-Astra current (#9762)
juliusmarminge Sep 4, 2026
d115a96
fix(web): stop empty diffs replacing pull requests (#9753)
maria-rcks Sep 4, 2026
45bd3b6
fix(sidebar): mute background working threads (#9759)
maria-rcks Sep 4, 2026
f6db420
fix(web): reset automatic pull to default (#9763)
maria-rcks Sep 4, 2026
13427ec
fix(web): restore file comment focus in editable preview (#9061)
ShpetimA Sep 4, 2026
2e688a5
docs: keep internal guides focused on architecture (#9755)
juliusmarminge Sep 4, 2026
9e1fb45
docs: focus user guides on features and workflows (#9756)
juliusmarminge Sep 4, 2026
cd71367
fix(web): stop panel motion during navigation (#9766)
juliusmarminge Sep 4, 2026
8e056a0
fix(web): open composer selectors below controls (#9767)
maria-rcks Sep 4, 2026
163d86a
perf(server): skip unused Linux process detail reads (#9768)
t3dotgg Sep 4, 2026
bfef973
fix(server): remove retired Codex models after refresh (#9773)
juliusmarminge Sep 4, 2026
cc60753
test: stop path and platform tests depending on the host OS (#9564)
juliusmarminge Sep 4, 2026
4701041
test(server): skip posix executable fixtures on a Windows host (#9565)
juliusmarminge Sep 4, 2026
30f128f
test: skip symlink fixtures where the host cannot create symlinks (#9…
juliusmarminge Sep 4, 2026
5c6c1d6
test(server): run fake provider CLIs through a Node stub on every hos…
juliusmarminge Sep 4, 2026
c251e41
test(desktop): make path fixtures and timeouts host-portable (#9568)
juliusmarminge Sep 4, 2026
f083f52
fix(server): tolerate the missing directory fsync on Windows (#9569)
juliusmarminge Sep 4, 2026
12b6d02
test(server): pin git config for fixtures and compare native realpath…
juliusmarminge Sep 4, 2026
1108be0
test: skip POSIX mode-bit assertions on a Windows host (#9571)
juliusmarminge Sep 4, 2026
9af5139
test(server): keep provider fixture directories host-portable (#9572)
juliusmarminge Sep 4, 2026
9fa54ee
test: resolve the Windows temp directory to its long name (#9573)
juliusmarminge Sep 4, 2026
912276b
test(server): run the Antigravity install harness for the host platfo…
juliusmarminge Sep 4, 2026
5f4c716
fix(server): canonicalise media paths the same way their callers do (…
juliusmarminge Sep 4, 2026
b123cbb
test(server): make Windows path and async fixtures deterministic (#9576)
juliusmarminge Sep 4, 2026
781f41e
fix(server): refuse symlinked theme files on Windows too (#9580)
juliusmarminge Sep 4, 2026
0a590fa
test(scripts): keep Windows packaging checks host-portable (#9589)
juliusmarminge Sep 4, 2026
b7d6e65
fix(contracts): include tool.denied in runtime event types (#9770)
Lucenx9 Sep 4, 2026
24aef0e
feat(mobile): split the usage page into Usage and Limits tabs (#9775)
juliusmarminge Sep 4, 2026
935917f
fix(web): restore the running tool label shine (#9777)
maria-rcks Sep 4, 2026
7649465
fix(web): align provider controls with machine tabs (#9769)
maria-rcks Sep 4, 2026
5e1c23d
docs(web): document panel motion during navigation (#9778)
maria-rcks Sep 4, 2026
394e847
feat(usage): support custom model prices (#9774)
juliusmarminge Sep 4, 2026
91c66ac
fix(web): center pull request link previews (#9794)
maria-rcks Sep 4, 2026
98a29cb
fix: address usage limits and merge settlement regressions (#9784)
maria-rcks Sep 4, 2026
389bbcc
fix(web): give toggle thumbs consistent inset spacing (#9805)
maria-rcks Sep 4, 2026
5a2f3eb
fix(web): use segmented controls for mode switches (#9781)
maria-rcks Sep 4, 2026
b906ce2
fix(server): recover opted-in threads after machine restarts (#9803)
maria-rcks Sep 4, 2026
dd7bc14
fix(web): simplify changed files into a persistent folder tree (#9821)
maria-rcks Sep 4, 2026
5a43324
feat: add custom model names and option descriptors (#9807)
juliusmarminge Sep 4, 2026
087cfb8
fix(cursor): discover symlinked skills as package boundaries (#9420)
EzraBuild Sep 4, 2026
f33fdc9
fix(ssh): exec managed servers without npm wrappers (#9843)
juliusmarminge Sep 4, 2026
0dd5c64
fix(server): detect nested Git workspaces for checkpoints (#9842)
juliusmarminge Sep 4, 2026
4f1092c
fix(web): keep worktree origin preference visible (#9846)
juliusmarminge Sep 5, 2026
2e61301
fix(web): smooth settings sidebar transitions (#9811)
juliusmarminge Sep 5, 2026
4d3907f
feat(web): highlight visible settings sections (#9812)
juliusmarminge Sep 5, 2026
1963ca0
fix(web): keep the sidebar project filter across navigation (#9416)
Mnigos Sep 5, 2026
a5bbad9
fix(server): surface Claude safety model fallback notices instead of …
darahaas15 Sep 5, 2026
caf4981
fix(web): reload saved colors when reopening the theme editor (#9847)
juliusmarminge Sep 5, 2026
ed2bdbb
feat(desktop): import cookies from Safari (#7262)
juliusmarminge Sep 5, 2026
8faf031
fix(web): respect case in POSIX file links (#9309)
Michel-Liao Sep 5, 2026
fce8508
fix(server): surface a missing workspace folder instead of a spawn er…
kakismash Sep 5, 2026
b6f7268
fix: stop favicon requests for private link hosts on web and mobile (…
fe-franco Sep 5, 2026
2d5464a
fix(server): preserve native provider executable paths during updates…
juliusmarminge Sep 5, 2026
720e126
fix(web): restore composer expansion after tool calls (#9782)
t3dotgg Sep 5, 2026
2dca7a1
fix(client): explain possible network blocking for T3 Connect (#9783)
t3dotgg Sep 5, 2026
b5fb3fb
fix(desktop): isolate preview keyboard shortcuts from the host (#9840)
maria-rcks Sep 5, 2026
110bbe6
fix(prs): reuse GitHub data and defer optional reads (#9835)
maria-rcks Sep 5, 2026
c3cacea
perf(shared): skip duplicate PATH entries and per-probe tracing (#9618)
jadeva Sep 5, 2026
896fe82
fix(web): preserve focus and prioritize picker shortcuts (#9795)
maria-rcks Sep 5, 2026
82f64cd
fix(skills): support names beginning with digits (#9244)
amiralibg Sep 5, 2026
89ee69e
fix(server): advertise truecolor in the integrated terminal (#7680)
shubhxho Sep 5, 2026
940e823
fix(claude): surface usage-limit pauses in the thread (#7165)
vitalyiegorov Sep 5, 2026
ce4712d
fix: restore UX after performance improvements (#9799)
t3dotgg Sep 5, 2026
57a6b70
fix(codex): show what a file-change approval will change (#8669)
walid-baharwal Sep 5, 2026
4ade365
fix(ci): add fallback Ubuntu package mirrors (#9864)
maria-rcks Sep 5, 2026
03c6cd8
fix(web): copy text over plain HTTP (#8023)
Michel-Liao Sep 5, 2026
d7fe47f
fix(server): dismiss native questions when their turn ends (#9851)
juliusmarminge Sep 5, 2026
d28077e
fix(server): quote copied native provider update commands (#9856)
juliusmarminge Sep 5, 2026
1665d81
fix(release): install the correct Windows Spectre component (#9859)
maria-rcks Sep 5, 2026
1246146
fix(web): show retained runtime diagnostics in the work log (#9870)
juliusmarminge Sep 5, 2026
7f8cf30
fix(web): make sidebar project actions reachable by keyboard and scre…
akj Sep 5, 2026
de1b798
fix(preview): bound automation waits and screenshot captures (#4685)
juliusmarminge Sep 5, 2026
7ee52b0
fix(web): render and filter usage as environments respond (#9860)
juliusmarminge Sep 5, 2026
84b99f3
feat(web): edit usage prices across selected environments (#9861)
juliusmarminge Sep 5, 2026
ac90950
fix(mobile): keep usage tabs below the header when switching (#9876)
juliusmarminge Sep 5, 2026
363cde4
fix(connect): refresh HTTP credentials without reconnecting (#9594)
juliusmarminge Sep 5, 2026
b01771c
fix(web): keep file autosaves active after effect replay (#9878)
juliusmarminge Sep 5, 2026
a0eb239
fix(web): prioritize open panel pull request when copying (#9877)
maria-rcks Sep 5, 2026
9cb4017
fix(cli): resolve projects with missing workspace directories (#9885)
juliusmarminge Sep 5, 2026
931d41f
fix(web): sort equally merge-ready pull requests by diff size (#9887)
maria-rcks Sep 5, 2026
94cc815
fix(chat): show hours for long runs (#9894)
t3dotgg Sep 5, 2026
2fb99a7
fix(server): only run provider updates through the installer that own…
juliusmarminge Sep 5, 2026
df8e0eb
fix(web): discard stale highlights after file edits (#9902)
juliusmarminge Sep 5, 2026
fd77317
feat(web): recall sent prompts with the up arrow (#9173)
t3dotgg Sep 5, 2026
c7dc3cb
fix(server): keep mise-owned npm packages manual-only (#9927)
juliusmarminge Sep 5, 2026
f47a3fe
fix(settings): share restart continuation across environments (#9933)
maria-rcks Sep 5, 2026
7a089b2
fix(server): capture turn checkpoints after all edits finish (#9841)
juliusmarminge Sep 5, 2026
2fa5ef4
fix(web): load file grammar before enabling edits (#9947)
juliusmarminge Sep 5, 2026
e5a87e8
fix(web): deduplicate PR project filter choices (#9948)
juliusmarminge Sep 5, 2026
07d2497
test(web): keep provider field readers private (#9952)
juliusmarminge Sep 5, 2026
a399473
test(mobile): keep composer selection helper private (#9953)
juliusmarminge Sep 5, 2026
f530d7b
test(client-runtime): keep scoped key implementation private (#9955)
juliusmarminge Sep 5, 2026
6b87ce3
fix(web): reveal reselected diff files (#9951)
juliusmarminge Sep 5, 2026
eae770b
refactor(web): remove obsolete changed-files preview helpers (#9956)
juliusmarminge Sep 5, 2026
bc8584b
fix(web): give the browser keybinding notice breathing room (#9964)
juliusmarminge Sep 5, 2026
126ea5c
chore: configure Knip workspace audits (#9958)
juliusmarminge Sep 5, 2026
4a42fc6
refactor(web): prune unused UI and provider code (#9959)
juliusmarminge Sep 5, 2026
2759ef0
chore(mobile): remove obsolete widget wiring script (#9960)
juliusmarminge Sep 5, 2026
00d4618
chore: remove redundant root tooling dependencies (#9961)
juliusmarminge Sep 5, 2026
d2c3e2e
ci: reject unused files and dependencies with Knip (#9962)
juliusmarminge Sep 5, 2026
dfc70a3
test(contracts): keep driver default lookup private (#9968)
juliusmarminge Sep 5, 2026
32142cf
test(server): remove Azure permissions constant snapshot (#9973)
juliusmarminge Sep 5, 2026
1568b3f
refactor(shared): remove unused viewport formatters (#9970)
juliusmarminge Sep 5, 2026
c1e279e
refactor(mobile): remove unused provider option summary (#9971)
juliusmarminge Sep 5, 2026
1782a2a
refactor(client-runtime): remove unused connection phase message (#9972)
juliusmarminge Sep 5, 2026
eda0cec
refactor(mobile): remove unused layout calculations (#9974)
juliusmarminge Sep 5, 2026
044a6e1
refactor(client-runtime): remove unused file position predicate (#9976)
juliusmarminge Sep 5, 2026
5fe29c8
refactor(mobile): remove unused font size steppers (#9975)
juliusmarminge Sep 5, 2026
b3f8dd9
test(server): cover thread lookup through command invariants (#9978)
juliusmarminge Sep 5, 2026
2fc630c
test(server): remove provider equality wrapper fixture (#9979)
juliusmarminge Sep 5, 2026
1550f1b
test(server): assert the dispatched welcome thread model (#9980)
juliusmarminge Sep 5, 2026
14da634
refactor(desktop): remove unused keyring remediation text (#9981)
juliusmarminge Sep 5, 2026
a9caf7b
refactor(desktop): remove test-only Electron error predicates (#9982)
juliusmarminge Sep 5, 2026
ea0487c
refactor(web): remove unused pull request state label (#9984)
juliusmarminge Sep 5, 2026
aefef95
perf(web): keep timeline row reuse engaged while text streams (#9909)
juliusmarminge Sep 5, 2026
3e13333
fix(web): reset markdown widgets when the previewed file changes (#9910)
juliusmarminge Sep 5, 2026
50027bb
fix(mobile): keep highlighting review diffs after a long line (#9911)
juliusmarminge Sep 5, 2026
fc1f543
fix(marketing): align the endorsement carousel with its heading (#9912)
juliusmarminge Sep 5, 2026
f87ecf0
fix(client): keep warm thread resumes live instead of flashing sync (…
juliusmarminge Sep 5, 2026
371e323
test(server): remove authorization prompt snapshots (#9985)
juliusmarminge Sep 5, 2026
10421bc
test(server): remove static OAuth page snapshots (#9986)
juliusmarminge Sep 5, 2026
9867eb1
test(server): remove provider label identity assertion (#9987)
juliusmarminge Sep 5, 2026
94d1fa7
test(server): consolidate agent activity opt-in coverage (#9988)
juliusmarminge Sep 5, 2026
aca2afc
refactor(shared): remove unused preview URL predicate (#9989)
juliusmarminge Sep 5, 2026
c6410d3
refactor(shared): remove unused mention path serializer (#9990)
juliusmarminge Sep 5, 2026
da1bebb
refactor(shared): remove retired PATH capture parser (#9991)
juliusmarminge Sep 5, 2026
3bcde91
refactor(client-runtime): remove unused subagent selectors (#9992)
juliusmarminge Sep 5, 2026
487d176
refactor(web): test the live usage column builder (#9993)
juliusmarminge Sep 5, 2026
c7e93f5
refactor(web): remove unused aspect ratio reconciler (#9994)
juliusmarminge Sep 5, 2026
bf1c1b0
refactor(web): remove obsolete cloud listing helpers (#9995)
juliusmarminge Sep 5, 2026
4f1dc55
test(web): remove composer control style snapshots (#9996)
juliusmarminge Sep 5, 2026
11cb88e
test(web): keep the preview profile label helper private (#9997)
juliusmarminge Sep 5, 2026
3fedf52
test(server): cover raw OpenCode deltas through the adapter (#9977)
juliusmarminge Sep 5, 2026
ba873b8
refactor(web): remove obsolete pull request link opener (#9983)
juliusmarminge Sep 5, 2026
ac93fbf
test(relay): keep the stage slug helper private (#9998)
juliusmarminge Sep 5, 2026
1e24b43
refactor(mobile): keep project selection helper private (#9999)
juliusmarminge Sep 5, 2026
1c59d3b
refactor(mobile): keep review default ID helper private (#10000)
juliusmarminge Sep 5, 2026
3382b26
refactor(mobile): remove unused native style constants (#10001)
juliusmarminge Sep 5, 2026
393d1ff
refactor(mobile): test terminal palettes through public theme API (#1…
juliusmarminge Sep 5, 2026
8d48a31
refactor(mobile): remove unused file tree walkers (#10003)
juliusmarminge Sep 5, 2026
1584076
refactor(shared): keep persisted settings helpers private (#10004)
juliusmarminge Sep 5, 2026
4e5e17f
test(mobile): remove mocked UUID shape assertions (#10006)
juliusmarminge Sep 5, 2026
1449dec
refactor(mobile): test final connection status presentation (#10007)
juliusmarminge Sep 5, 2026
4e59b06
test(web): keep pull request menu items private (#10016)
juliusmarminge Sep 5, 2026
3e544f8
refactor(shared): test favicon selection through public API (#10005)
juliusmarminge Sep 5, 2026
270e021
refactor(server): remove test-only pricing normalizer (#10017)
juliusmarminge Sep 5, 2026
93d4dfa
refactor(web): remove unused desktop update visibility helper (#10014)
juliusmarminge Sep 5, 2026
c9b76e6
refactor(web): remove obsolete provider update helpers (#10015)
juliusmarminge Sep 5, 2026
b7fc81d
refactor(web): remove unused terminal context preview formatter (#10009)
juliusmarminge Sep 5, 2026
82c2b7f
refactor(web): test environment-scoped draft promotion (#10010)
juliusmarminge Sep 5, 2026
6270a6f
fix(web): retain wrapped row heights during edits (#10018)
juliusmarminge Sep 5, 2026
cb58dfd
refactor(shared): remove unused Clerk hostname predicate (#10008)
juliusmarminge Sep 5, 2026
1d58f2e
refactor(tailscale): keep package internals private (#10011)
juliusmarminge Sep 5, 2026
cd92a7e
ci: reject unused tailscale exports with Knip (#10012)
juliusmarminge Sep 5, 2026
eced382
fix(web): keep chat media at a stable size while it loads (#9938)
juliusmarminge Sep 5, 2026
31fb210
refactor(server): keep manifest age parsing private (#10028)
juliusmarminge Sep 5, 2026
37bf4e6
refactor(mobile): remove unused awareness relay URL normalizer (#10029)
juliusmarminge Sep 5, 2026
f5d9d12
refactor(server): remove unused startup heartbeat launcher (#10030)
juliusmarminge Sep 5, 2026
86f0799
refactor(shared): keep search ranking comparator private (#10031)
juliusmarminge Sep 5, 2026
68aa7aa
refactor(server): keep telemetry identity errors private (#10032)
juliusmarminge Sep 5, 2026
83a2897
refactor(mobile): test composer persistence through the live decoder …
juliusmarminge Sep 5, 2026
5cb6965
refactor(web): remove unused sidebar selectors (#10034)
juliusmarminge Sep 5, 2026
ad3721e
refactor(server): keep Cursor fallback models private (#10038)
juliusmarminge Sep 5, 2026
07fb04d
refactor(web): remove unused xterm link range helpers (#10040)
juliusmarminge Sep 5, 2026
c059d09
refactor(mobile): remove obsolete review list builder (#10039)
juliusmarminge Sep 5, 2026
a21c0d7
test(server): remove duplicate VCS error constructor checks (#10042)
juliusmarminge Sep 5, 2026
5e828bf
refactor(mobile): keep appearance calculations private (#10043)
juliusmarminge Sep 5, 2026
5a4287c
refactor(web): remove unused sidebar menu action (#10044)
juliusmarminge Sep 5, 2026
6615d3d
refactor(web): test live Ghostty link resolution directly (#10041)
juliusmarminge Sep 5, 2026
df370c3
test(server): exercise Codex prompts through public assembly (#10045)
juliusmarminge Sep 5, 2026
62e74cd
refactor(shared): remove unused elapsed-time adapter (#10046)
juliusmarminge Sep 5, 2026
91ba05e
refactor(web): remove unused preview thread reset helper (#10049)
juliusmarminge Sep 5, 2026
56a2f42
refactor(desktop): remove test-only error predicates (#10047)
juliusmarminge Sep 5, 2026
c2aff91
refactor(mobile): keep review reset hashing private (#10048)
juliusmarminge Sep 5, 2026
a98dad7
test(web): remove AppRoot element order snapshot (#10052)
juliusmarminge Sep 5, 2026
62e4ae4
refactor(codex): keep app-server client internals private (#10035)
juliusmarminge Sep 5, 2026
4631000
ci: reject unused Codex client exports with Knip (#10036)
juliusmarminge Sep 5, 2026
45f5a5f
refactor(server): simplify native telemetry error internals (#10057)
juliusmarminge Sep 5, 2026
5b7f6bc
refactor(mobile): remove write-only terminal font cache (#10058)
juliusmarminge Sep 5, 2026
80f775a
refactor(web): remove obsolete HSL theme generator (#10061)
juliusmarminge Sep 5, 2026
d524eb9
refactor(mobile): remove obsolete native diff token stream (#10062)
juliusmarminge Sep 5, 2026
bc24d98
test(server): remove title prompt editorial snapshots (#10063)
juliusmarminge Sep 5, 2026
160e337
test(server): remove repeated runtime prompt interpolation cases (#10…
juliusmarminge Sep 5, 2026
43700b8
refactor(web): observe preview tests through the live registry (#10064)
juliusmarminge Sep 5, 2026
fedf84a
test(server): remove keybinding default assignment snapshot (#10065)
juliusmarminge Sep 5, 2026
4db2c54
refactor(mobile): remove obsolete whole-file review highlighters (#10…
juliusmarminge Sep 5, 2026
0acf05f
test(server): cover CLI runner detection through command suggestions …
juliusmarminge Sep 5, 2026
ee150e1
refactor(mobile): remove unused cloud relay URL normalizer (#10068)
juliusmarminge Sep 5, 2026
009c13f
refactor(web): test live keybinding resolvers directly (#10069)
juliusmarminge Sep 5, 2026
25cbcd6
test(server): cover Grok skill parsing through discovery (#10070)
juliusmarminge Sep 5, 2026
38812c1
test(web): remove mocked diff view prop snapshot (#10073)
juliusmarminge Sep 5, 2026
19ea3c5
test(web): remove mocked annotation options snapshot (#10074)
juliusmarminge Sep 5, 2026
688e594
refactor(web): keep pending action labels private (#10075)
juliusmarminge Sep 5, 2026
b92a812
refactor(mobile): remove unused cloud pending-status mapper (#10071)
juliusmarminge Sep 5, 2026
ab0933a
refactor(web): remove unused model picker hint helpers (#10072)
juliusmarminge Sep 5, 2026
c843c19
fix(server): resume checkpointing after git init (#10078)
Yash-Singh1 Sep 5, 2026
09aac71
feat(web): first-run welcome wizard with agent setup and project impo…
t3dotgg Sep 5, 2026
2271a27
fix(server): keep Homebrew mise shims manual-only (#10085)
juliusmarminge Sep 5, 2026
39802c0
fix(ssh): report remote package installation failures accurately (#10…
juliusmarminge Sep 5, 2026
bd7f7ea
fix(web): keep bulk thread deletion going after failures (#4615)
m-de-graaff Sep 5, 2026
be7796d
fix(web): scale agent spawn rows with interface font (#10092)
juliusmarminge Sep 5, 2026
9f1a5bf
chore(upstream): sync through be7796d86
berghtho Sep 5, 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
  •  
  •  
  •  
3 changes: 3 additions & 0 deletions .gitattributes
Original file line number Diff line number Diff line change
@@ -1,3 +1,6 @@
# git autocrlf=true converts LF to CRLF on Windows, causing issues with oxfmt
* text=auto eol=lf
# Batch files need CRLF for cmd.exe to parse them reliably.
*.cmd text eol=crlf
*.bat text eol=crlf
patches/*.patch whitespace=-trailing-space,-space-before-tab
22 changes: 22 additions & 0 deletions .github/actions/setup-apt-mirrors/action.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
name: Setup APT mirrors
description: Configure Ubuntu package downloads with automatic mirror failover.
runs:
using: composite
steps:
- shell: bash
run: |
# Replace the existing Blacksmith mirror list as well as direct sources.
printf '%s\tpriority:%s\n' \
https://archive.ubuntu.com/ubuntu 1 \
https://mirrors.edge.kernel.org/ubuntu 2 \
https://mirror.math.princeton.edu/pub/ubuntu 3 \
| sudo tee /etc/apt/blacksmith-ubuntu-mirrors.txt > /dev/null

# APT's mirror transport retries each file against the next server.
sudo find /etc/apt -maxdepth 2 -type f \( -name '*.list' -o -name '*.sources' \) \
-exec sed -i -E \
's#https?://(([^/]+\.)?archive|security)\.ubuntu\.com/ubuntu/?#mirror+file:/etc/apt/blacksmith-ubuntu-mirrors.txt#g' {} +

# Move on to a fallback before an unreachable server exhausts the job.
printf '%s\n' 'Acquire::http::Timeout "15";' 'Acquire::https::Timeout "15";' \
| sudo tee /etc/apt/apt.conf.d/80-mirror-timeouts > /dev/null
16 changes: 14 additions & 2 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -45,14 +45,22 @@ jobs:
- name: Ensure Electron runtime is installed
run: vp run --filter @t3tools/desktop ensure:electron

# Files/dependencies are repo-wide; export checks cover clean workspaces only.
- name: Check unused code
run: vp run knip:check

- name: Check
run: vp check

- name: Typecheck
run: vpr typecheck

- 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

- name: Build desktop pipeline
run: vp run build:desktop
Expand Down Expand Up @@ -88,8 +96,12 @@ jobs:
- 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

- name: Test
run: vp run --parallel --concurrency-limit 4 --filter '!t3' --filter '!@t3tools/monorepo' test
Expand Down
7 changes: 6 additions & 1 deletion .github/workflows/release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -216,6 +216,8 @@ jobs:
- name: Typecheck
run: vp run typecheck

- 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

Expand Down Expand Up @@ -519,14 +521,17 @@ jobs:
$setupExe = "${env:ProgramFiles(x86)}\Microsoft Visual Studio\Installer\setup.exe"
$proc = Start-Process -FilePath $setupExe `
-ArgumentList "modify", "--installPath", "`"$installPath`"", "--add", `
"Microsoft.VisualStudio.Component.VC.Tools.x86.x64.Spectre", "--quiet", "--norestart" `
"Microsoft.VisualStudio.Component.VC.Runtimes.x86.x64.Spectre", "--quiet", "--norestart" `
-Wait -PassThru -NoNewWindow
if ($null -eq $proc -or $proc.ExitCode -ne 0) {
$code = if ($null -ne $proc) { $proc.ExitCode } else { 1 }
Write-Error "Visual Studio Installer failed with exit code $code"
exit $code
}

- uses: ./.github/actions/setup-apt-mirrors
if: matrix.platform == 'linux'

- name: Install Linux desktop build libraries
if: matrix.platform == 'linux'
shell: bash
Expand Down
15 changes: 13 additions & 2 deletions AGENTS.md
Original file line number Diff line number Diff line change
Expand Up @@ -86,7 +86,7 @@ The most common defect in this repo is a change that works on the path you teste
- **Contracts.** Anything crossing the wire is typed in `packages/contracts`. Change the schema and the server, web, mobile, and desktop all follow.
- **Reverse states.** If you added a way in, add the way out and the way to see it. Snooze needs unsnooze. Close needs reopen. A one-way door is a bug.
- **Connection modes.** Local, remote/relay, and tunnel behave differently. Multi-device and multi-environment cases are real.
- **Docs.** `docs/` splits by audience. Behavior changes that a user would notice belong in `docs/user/` (shipped-product voice, no repo tooling or source paths); architecture and contributor changes in `docs/internals/`; runbooks in `docs/operations/`; new vocabulary in `docs/internals/glossary.md`.
- **Docs.** Check whether the change makes existing guidance inaccurate. Apply the [documentation rules](#documentation) before adding anything.

## Dev servers

Expand Down Expand Up @@ -134,11 +134,22 @@ An empty database is a bad test. Seed your worktree's `.t3` with a copy of real
- One concern per PR. If the description says "also", split it.
- When babysitting: poll checks and comments newer than the last push, verify each bot finding against the source, fix real ones, dismiss false positives with a written reason. Stay quiet when nothing is new. Stop when the bots are green on the latest commit.

## Documentation

Most code changes do not need an internal documentation change. Agents can read the code.

- `docs/internals/` is for architectural decisions and their reasons, constraints that span components, and implementation traps that are hard to discover from the source. Before adding a paragraph, ask what a maintainer would get wrong without it. If reading the relevant code answers the question, leave it out.
- Do not document every feature, enumerate fields or methods, narrate control flow, maintain file catalogs, or append PR summaries. Types, tests, and code already record the implementation. The glossary defines shared vocabulary; it is not a feature index.
- Keep a local implementation explanation in a nearby code comment. Use an internal doc when the reasoning crosses boundaries or needs context the code cannot carry well. Link to the relevant source instead of copying it.
- When a documented decision or constraint changes, rewrite or remove the affected text. Do not append another account of the new behavior. A new internal page needs a distinct, durable reason to exist.
- `docs/user/` helps users accomplish tasks. Give each major feature a concise section explaining what it does, how to start, and anything unintuitive. A settings path is useful; descriptions of visible buttons, icons, layouts, animations, or every UI state are not. Before adding text, ask what task or decision it helps the user with.
- Keep user docs in the shipped product's voice, without implementation details or contributor tooling. Update the relevant feature section when how to use it changes. A UI tweak does not need a documentation entry, and a new control does not need its own page.
- `docs/operations/` holds maintainer setup, release, and debugging procedures. Keep instructions for operating an installed T3 Code server in the user guides.

## Plans and work artifacts

- Do not commit implementation plans, research notes, or agent scratch files. Keep temporary working material outside the worktree. `.plans/` is gitignored only as a safety net for legacy tooling.
- Track active maintainer work in the GitHub issue or project item that owns it. External proposals follow `CONTRIBUTING.md` and belong in Ideas discussions.
- Put durable architecture, constraints, and decisions in `docs/internals/`. Update those docs when the product changes so agents find current facts instead of abandoned intentions.
- A merged PR is the implementation record. Close or update its tracking item when the work lands; do not preserve a second checklist in the repository.

## How it works
Expand Down
6 changes: 5 additions & 1 deletion CONTRIBUTING.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

## Developer Setup

See the [maintainer scripts guide](docs/internals/scripts.md#first-checkout) for the initial checkout,
See the [development runbook](docs/operations/development.md#first-checkout) for the initial checkout,
development commands, tests, and platform-specific desktop packaging prerequisites.

## Read This First
Expand Down Expand Up @@ -53,6 +53,10 @@ Explain exactly what changed.

Explain exactly why the change should exist.

Follow the [documentation rules](AGENTS.md#documentation). Keep internal docs for decisions and
hard-to-discover constraints. Update user guides when how to use a feature changes; skip descriptions
of obvious controls and cosmetic changes.

Do not mix unrelated fixes together.

If the PR makes anything resembling a UI change, include clear before/after images.
Expand Down
4 changes: 2 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -117,12 +117,12 @@ Full docs live in [docs/](./docs). There's no docs site yet.
- [Install and first run](./docs/user/install.md)
- [Permission modes](./docs/user/permission-modes.md)
- [Keyboard shortcuts](./docs/user/keybindings.md)
- [Customize a project icon](./docs/user/project-settings.md)
- [Project settings](./docs/user/project-settings.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)
- Multiple accounts: [Codex](./docs/user/providers-codex.md) · [Claude](./docs/user/providers-claude.md)
- Linux: [run T3 Code as a background service](./docs/user/background-service.md)
- [Run T3 Code as a background service](./docs/user/background-service.md)

Building from source? Start at [docs/internals/overview.md](./docs/internals/overview.md).

Expand Down
12 changes: 8 additions & 4 deletions apps/desktop/scripts/electron-launcher.mjs
Original file line number Diff line number Diff line change
Expand Up @@ -165,10 +165,14 @@ function registerMacLauncherBundle(appBundlePath) {
}
}

// Bundle-internal paths are macOS paths whatever host builds them.
export function resolveMacLauncherIconPaths(runtimeDir, development = isDevelopment) {
return {
sourceIconPath: development ? developmentMacIconPngPath : productionMacIconPngPath,
generatedIconPath: NodePath.join(runtimeDir, development ? "icon-dev.icns" : "icon-prod.icns"),
generatedIconPath: NodePath.posix.join(
runtimeDir,
development ? "icon-dev.icns" : "icon-prod.icns",
),
};
}

Expand Down Expand Up @@ -280,12 +284,12 @@ function readJson(path) {
}

export function resolveMacLauncherPaths(appBundlePath, displayName = APP_DISPLAY_NAME) {
const executableDir = NodePath.join(appBundlePath, "Contents", "MacOS");
const executableDir = NodePath.posix.join(appBundlePath, "Contents", "MacOS");
const launcherExecutableName = `${displayName} Launcher`;
return {
launcherExecutableName,
launcherBinaryPath: NodePath.join(executableDir, launcherExecutableName),
runtimeElectronBinaryPath: NodePath.join(executableDir, "Electron"),
launcherBinaryPath: NodePath.posix.join(executableDir, launcherExecutableName),
runtimeElectronBinaryPath: NodePath.posix.join(executableDir, "Electron"),
};
}

Expand Down
5 changes: 3 additions & 2 deletions apps/desktop/scripts/electron-launcher.test.mjs
Original file line number Diff line number Diff line change
Expand Up @@ -84,9 +84,10 @@ describe("electron development launcher", () => {
const development = resolveMacLauncherIconPaths("/runtime", true);
const production = resolveMacLauncherIconPaths("/runtime", false);

assert.match(development.sourceIconPath, /assets\/dev\/blueprint-macos-1024\.png$/);
// The source icons are real repo paths, joined for the host.
assert.match(development.sourceIconPath, /assets[\\/]dev[\\/]blueprint-macos-1024\.png$/);
assert.equal(development.generatedIconPath, "/runtime/icon-dev.icns");
assert.match(production.sourceIconPath, /assets\/prod\/black-macos-1024\.png$/);
assert.match(production.sourceIconPath, /assets[\\/]prod[\\/]black-macos-1024\.png$/);
assert.equal(production.generatedIconPath, "/runtime/icon-prod.icns");
});
});
2 changes: 2 additions & 0 deletions apps/desktop/src/app/DesktopAppIdentity.test.ts
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
import * as NodePath from "@effect/platform-node/NodePath";
import * as NodeServices from "@effect/platform-node/NodeServices";
import { assert, describe, it } from "@effect/vitest";
import * as Effect from "effect/Effect";
Expand Down Expand Up @@ -88,6 +89,7 @@ const makeEnvironmentLayer = (overrides: TestEnvironmentInput = {}) => {
Layer.provide(
Layer.mergeAll(
NodeServices.layer,
NodePath.layerPosix,
DesktopConfig.layerTest({
...env,
}),
Expand Down
8 changes: 7 additions & 1 deletion apps/desktop/src/app/DesktopAssets.test.ts
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
import * as NodePath from "@effect/platform-node/NodePath";
import * as NodeServices from "@effect/platform-node/NodeServices";
import { assert, describe, it } from "@effect/vitest";
import * as Effect from "effect/Effect";
Expand All @@ -20,7 +21,11 @@ const environmentLayer = DesktopEnvironment.layer({
isPackaged: true,
resourcesPath: "/Applications/T3 Code.app/Contents/Resources",
runningUnderArm64Translation: false,
}).pipe(Layer.provide(Layer.mergeAll(NodeServices.layer, DesktopConfig.layerTest({}))));
}).pipe(
Layer.provide(
Layer.mergeAll(NodeServices.layer, NodePath.layerPosix, DesktopConfig.layerTest({})),
),
);

describe("DesktopAssets", () => {
it.effect("uses canonical source-tree icons for unpackaged development", () =>
Expand All @@ -39,6 +44,7 @@ describe("DesktopAssets", () => {
Layer.provide(
Layer.mergeAll(
NodeServices.layer,
NodePath.layerPosix,
DesktopConfig.layerTest({ VITE_DEV_SERVER_URL: "http://localhost:5733" }),
),
),
Expand Down
Loading