Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
293 commits
Select commit Hold shift + click to select a range
0f28f6f
feat(mobile): start side chats with /side (#31709)
juliusmarminge Nov 5, 2026
4bfb896
feat(claude): expose Ultracode on Claude Sonnet 5.5 and Haiku 5.5 (#3…
DrSeedon Nov 5, 2026
4a94658
feat(settings): Simlock, Antigravity and OpenCode credentials can com…
juliusmarminge Nov 5, 2026
0e233fc
fix(mobile): every inspector pane draws its bar through AppBar
juliusmarminge Nov 5, 2026
da38f86
refactor(mobile): routes declare page, sheet or modal and presets own…
juliusmarminge Nov 5, 2026
8897f1e
refactor(mobile): features stop building navigators for their bars
juliusmarminge Nov 5, 2026
162f81f
refactor(mobile): every screen draws one AppBar or SheetHeader, on bo…
juliusmarminge Nov 5, 2026
faf9d73
refactor(mobile): the workspace shell lives in layout and draws the l…
juliusmarminge Nov 5, 2026
d694c44
fix(server): a saved source control token that can't be read no longe…
juliusmarminge Nov 5, 2026
7462b16
feat(secrets): answer a secret request with a secret provider referen…
juliusmarminge Nov 5, 2026
187781e
fix(settings): removing a secret provider clears the fields that used…
juliusmarminge Nov 5, 2026
b46abbf
docs(user): explain secret providers and secret requests (#31654)
juliusmarminge Nov 5, 2026
b8dce83
feat(server): transcribe audio on a chosen environment (#30625)
juliusmarminge Nov 5, 2026
a9a1b8c
feat(web): opt into environment dictation on this device (#30623)
juliusmarminge Nov 5, 2026
aabd562
feat(desktop): dictate into browser annotations with the same consent…
juliusmarminge Nov 5, 2026
79ee39f
feat(mobile): opt in to dictation on a paired environment (#31059)
juliusmarminge Nov 5, 2026
fb9f1c6
fix(web): keep the folder path caret in place while editing (#31642)
juliusmarminge Nov 6, 2026
6b53b3d
perf(mobile): call the highlights lexer through Nitro, up to 10x fast…
camchis Nov 6, 2026
43cf364
fix(claude): turns use the downloaded model catalog (#31717)
juliusmarminge Nov 6, 2026
e945fcc
fix(gitlab): bot authors are flagged as bots (#30383)
TonybynMp4 Nov 6, 2026
444921e
fix(gitlab): merge requests can edit their labels (#30483)
TonybynMp4 Nov 6, 2026
2917f28
perf(mobile): faster thread sync, connects, and reconnects on bad wif…
Bil0000 Nov 6, 2026
3478e56
fix(mobile): iPad composer drops when the keyboard floats or minimize…
juliusmarminge Nov 6, 2026
a21f89d
perf(mobile): stop iOS syntax highlighting from looking up a thread-l…
camchis Nov 6, 2026
e136e8e
fix(gitlab): edited comments wake PR watchers (#30403)
TonybynMp4 Nov 6, 2026
b871551
fix(gitlab): merge requests can delete their source branch (#30453)
TonybynMp4 Nov 6, 2026
05bd5a1
fix(gitlab): comments link to their note on GitLab (#30411)
TonybynMp4 Nov 6, 2026
71f251d
fix(mobile): iOS terminal accepts Chinese, Japanese and Korean input …
juliusmarminge Nov 6, 2026
661eae3
fix(mobile): Android app no longer stays offline after reopening (#28…
kahlstrm Nov 6, 2026
81922e6
fix(mobile): show one Android notification per thread completion (#27…
shivamhwp Nov 6, 2026
16f1d0a
fix(mobile): stop Android composer flicker at the wrap boundary (#27682)
shivamhwp Nov 6, 2026
b39d0f2
fix(mobile): Android dictation works with regional preferences set (#…
EhsanulHaqueSiam Nov 6, 2026
ccfbe35
fix(mobile): iOS compose button no longer grows while a tab is presse…
Jerematix Nov 6, 2026
0d8958b
fix(mobile): Android terminal Backspace deletes on the first press (#…
only21mil Nov 6, 2026
35bda28
fix(mobile): Android secret requests no longer offer password manager…
voida6 Nov 6, 2026
0bc7534
fix(mobile): iOS composer text no longer turns invisible mid-draft (#…
wojas Nov 6, 2026
bb61de2
fix(mobile): iOS 26 scroll edge effect no longer hides composer text …
wojas Nov 6, 2026
bd30817
fix(mobile): typing after in-app dictation reaches the draft again on…
wojas Nov 6, 2026
bc9080f
perf(mobile): skip obsolete queued iOS diff row decodes (#25287)
saphid Nov 6, 2026
fab95f3
fix(gitlab): the checks and review list filters work (#30433)
TonybynMp4 Nov 6, 2026
7406ca2
fix(mobile): keep Android tablet cold launches in landscape (#28825)
Dwite Nov 6, 2026
d929e72
fix(pr): GitCafe attachments render in pull request bodies (#31741)
juliusmarminge Nov 6, 2026
bd7da7f
fix(gitlab): unresolved overview threads count as review findings (#3…
TonybynMp4 Nov 6, 2026
1a0f605
fix(mobile): Android alerts and the live card show the same status ba…
juliusmarminge Nov 6, 2026
d6f7554
fix(mobile): keyboard state follows Android's nonanimated IME show (#…
juliusmarminge Nov 6, 2026
61c7601
fix(mobile): Android composer no longer accepts autofill (#27489)
juliusmarminge Nov 6, 2026
391b56a
perf(mobile): skip obsolete queued full token decodes (#25320)
saphid Nov 6, 2026
6593f78
fix(gitlab): threads on changed code show as outdated (#30423)
TonybynMp4 Nov 6, 2026
bda0e7f
fix(gitlab): the checks panel lists each pipeline job (#28728)
TonybynMp4 Nov 6, 2026
8b2c4d1
perf(mobile): avoid code row scans while dragging file paths (#25484)
saphid Nov 6, 2026
c7537d0
fix(chat): show one usage-limit recovery notice (#29292)
shivamhwp Nov 6, 2026
03dbb2f
fix(web): adding to the composer no longer drops earlier findings and…
TonybynMp4 Nov 6, 2026
7bc2a40
feat(pull-requests): PR composers complete @user mentions (#30747)
TonybynMp4 Nov 6, 2026
f08d8dd
feat(web): add pull request comments to the chat (#30579)
TonybynMp4 Nov 6, 2026
42a0e91
feat(gitlab): link issue, merge request, commit and user references (…
TonybynMp4 Nov 6, 2026
7ef841d
fix(mobile): sending on iOS no longer leaves an autocorrected draft b…
saphid Nov 6, 2026
f829c05
feat(gitlab): reviews can request changes (#30549)
TonybynMp4 Nov 6, 2026
e4ff5da
feat(pull-requests): PR composers complete #123 and GitLab !123 refer…
TonybynMp4 Nov 6, 2026
508f869
feat(gitlab): merge requests from forks can toggle maintainer edits (…
TonybynMp4 Nov 6, 2026
c52df24
fix(prs): reviewer menu searches past the first page and keeps GitLab…
TonybynMp4 Nov 6, 2026
bfb3884
fix(ui): snooze menu times match the menu's typography (#30596)
ishaanko Nov 6, 2026
3d78e91
feat(web): a Labs setting hides tool calls so threads read like a cha…
flamboh Nov 6, 2026
4a08786
feat(scheduled-tasks): tasks link to their thread (#31764)
t3dotgg Nov 6, 2026
260d843
fix(shared): recognize numeric bare-repository config (#27500)
macodev00 Nov 6, 2026
a530cab
fix(server): a command id reused for two threads at once no longer su…
saphid Nov 6, 2026
693ac5f
fix(server): coalesce tool output before it fills the live buffer (#1…
snarkyalyx Nov 6, 2026
cedaa0d
perf(server): Windows git reads no longer start a console host (#19288)
AkiVonAkira Nov 6, 2026
37f9134
fix(server): a publish whose first push fails still shows the new rem…
saphid Nov 6, 2026
68d5f7a
fix(server): reverting files removes what a new .gitignore from the t…
saphid Nov 6, 2026
fba1997
fix(server): Codex titles no longer fail on ChatGPT accounts without …
Muzammil-Bit Nov 6, 2026
69726aa
fix(desktop): quit no longer orphans a backend that is slow to stop (…
saphid Nov 6, 2026
596752c
perf(server): GitHub activity reads skip PR-wide fields on later revi…
Yuruzuu Nov 6, 2026
93dbf53
perf(server): the headless browser closes after five idle minutes (51…
Yuruzuu Nov 6, 2026
b15f772
fix(provider-acp-registry): surface agent error message on sign-in fa…
iScabrous Nov 6, 2026
56a8542
perf(server): a slow host no longer delays other watched PRs' wakes (…
Yuruzuu Nov 6, 2026
8dbf262
perf(server): PR cache invalidation no longer waits on other projects…
Yuruzuu Nov 6, 2026
43dfdcc
fix(opencode): tools stopped mid-run show as interrupted, not failed …
saphid Nov 6, 2026
4821696
fix(client-runtime): pull request bodies with CRLF line endings keep …
MarcoDotIO Nov 6, 2026
66a2f35
fix(shared): long assistant quote chips no longer end in a broken cha…
spoukyii Nov 6, 2026
0bf1c9d
fix(cli): t3 connect unlink no longer warns about a server that is go…
MarcoDotIO Nov 6, 2026
396e646
fix(server): ACP agents get T3CODE_THREAD_ID like Claude and Codex se…
frankhommers Nov 6, 2026
c12fd6c
fix(server): accept a case-insensitive DPoP authorization scheme (#30…
spoukyii Nov 6, 2026
144b78a
fix(server): usage-limit auto-resume no longer arms subagents of arch…
spoukyii Nov 6, 2026
9469095
fix(provider-core): background work notices no longer end in a broken…
spoukyii Nov 6, 2026
6f51361
fix(client-runtime): subagent previews no longer end in a broken char…
spoukyii Nov 6, 2026
b1f1731
fix(server): explain fake-IP DNS failures in HTML previews (#30318)
shivamhwp Nov 6, 2026
f63e23e
perf(resource-monitor): Linux terminal process checks use a third of …
jaikhuranna Nov 6, 2026
56d893e
fix(server): failed Claude text generation shows Claude's error inste…
MarcoDotIO Nov 6, 2026
7bdcb1e
fix(server): pull request tools point a bare thread uuid at its mcp: …
spoukyii Nov 6, 2026
b800f99
fix(server): message search keeps results when a short non-Latin word…
MarcoDotIO Nov 6, 2026
e5193ac
fix(web): preview annotation chip labels no longer end in a broken ch…
spoukyii Nov 6, 2026
6b84d2c
fix(server): thread titles no longer fail when the text generation pr…
medric-z Nov 6, 2026
53f1d09
fix(web): refresh resource timeline while diagnostics is open (#30528)
shawk08033 Nov 6, 2026
24fbb5d
fix(usage): a CLIProxy hub saved as its management.html panel URL sho…
Jolymmiles Nov 6, 2026
e4ff843
fix(shared): command output keeps text after an unterminated OSC (#30…
spoukyii Nov 6, 2026
40d7d48
fix(cli): t3 up's retry and restart hints keep --base-dir (#30480)
spoukyii Nov 6, 2026
9bf7dcd
fix(server): a branch tracking another local branch no longer shows t…
MarcoDotIO Nov 6, 2026
1b14cb3
fix(web): terminal links keep route and pnpm paths in one piece (#30603)
tiliakoos Nov 6, 2026
09647d1
fix(shared): CSV and TSV attachments keep their table under generic f…
tiliakoos Nov 6, 2026
20841cd
fix(server): report Claude settings compaction threshold (#29220)
voltcrash Nov 6, 2026
3109638
fix(cli): t3 project remove finds a deleted project by a relative or …
MarcoDotIO Nov 6, 2026
d1667e8
fix(server): an invalid regex in project search still finds its text …
MarcoDotIO Nov 6, 2026
7057a74
fix(server): agents see why a project update was refused instead of a…
MarcoDotIO Nov 6, 2026
66e96e5
perf(client-runtime): stop tracing streamed thread batches (#30679)
ElliotDrel Nov 6, 2026
d0da47a
fix(server): rewound Codex threads import their history from before t…
MarcoDotIO Nov 6, 2026
9ef1256
fix(server): keep writes moving with a larger WAL limit (#31804)
Yash-Singh1 Nov 6, 2026
28aed0d
fix(opencode): edits that delete text keep their empty replacement (#…
Jo2234 Nov 6, 2026
8b9a954
fix(forgejo): read author assignees once (#30686)
Jo2234 Nov 6, 2026
6f96d0e
fix(cli): t3 pair's no-running-server hint keeps --base-dir (#30689)
saphid Nov 6, 2026
9304d84
perf(server): stop tracing routine port polling helpers (#30678)
ElliotDrel Nov 6, 2026
eee9ba1
fix(server): ACP MCP bridge no longer splits messages on U+2028/U+202…
geezoria Nov 6, 2026
6d5772b
fix(cli): expand home-relative thread project paths (#30721)
Jo2234 Nov 6, 2026
5eff606
perf(ci): boot the built web client in Build and Typecheck, not Test …
Pyseph Nov 6, 2026
2b0f08b
fix(shared): ignore unfinished quoted Git config continuations (#30743)
imharjot Nov 6, 2026
cae7e5c
fix(review-guide): preserve excerpt line terminators (#30717)
Jo2234 Nov 6, 2026
0d266fb
feat(pi): show extension status in existing controls (#23901)
StiensWout Nov 6, 2026
e01ca01
fix(fx): preserve literal unicode escape text in clipped replies (#30…
Jo2234 Nov 6, 2026
b60a89f
perf(dev): knip:check runs its two passes side by side (34 s → 26 s m…
Pyseph Nov 6, 2026
cd890ba
fix(shared): command output no longer prints the final byte of escape…
geezoria Nov 6, 2026
10f88f3
fix(web): restore folder breadcrumb trails when reopening tabs (#30706)
Jo2234 Nov 6, 2026
00d1a82
fix(client-runtime): sanitized error stacks keep line and column for …
geezoria Nov 6, 2026
47a89f2
fix(shared): shortened agent paths like /tmp/... no longer become bro…
saphid Nov 6, 2026
1a45858
fix(server): MCP auth spans no longer include the tool call (#30834)
navidnadali Nov 6, 2026
673d9b4
fix(server): preview browser picks up Chrome 157 security fixes (#30820)
snnbotchway Nov 6, 2026
3ca53a9
fix(server): agents read RTF paragraphs that end with a backslash (#3…
geezoria Nov 6, 2026
66fa3fe
fix(server): a late checkpoint keeps the stopped run's baselines (#30…
navidnadali Nov 6, 2026
1058152
fix(shared): preserve IPv6 hosts when switching clone protocols (#30798)
Lucenx9 Nov 6, 2026
ca308a6
docs: explain Linux desktop installation (#30819)
voltcrash Nov 6, 2026
de99330
perf(server): each live event is projected once for all subscribers (…
navidnadali Nov 6, 2026
9a5c197
fix(server): request_secret asks for one value per card (#30805)
rgrvlsk Nov 6, 2026
948f6b5
fix(ssh): host discovery skips hidden Include matches (#30910)
Lucenx9 Nov 6, 2026
5c7e437
docs: clarify diagnostic exports and their separate controls (#30942)
Mr-Neutr0n Nov 6, 2026
444fdb0
docs: fix worktree cleanup path in FAQ (#31000)
jacobcorbett Nov 6, 2026
62dd1a3
fix(server): a policy that manages observability endpoints is refused…
MarcoDotIO Nov 6, 2026
fe199e3
fix(client-runtime): untitled subagent titles no longer end in a brok…
spoukyii Nov 6, 2026
a7f6c68
fix(shared): underline styles and colours no longer scramble command …
MarcoDotIO Nov 6, 2026
bb29ca1
perf(server): batch queued provider writes without waiting (#31656)
Yash-Singh1 Nov 6, 2026
620a37b
fix(server): prepare restart continuations faster on shutdown (#31807)
Yash-Singh1 Nov 6, 2026
0aae722
fix(web): keep change totals aligned beside the label (#31814)
Yash-Singh1 Nov 6, 2026
e9233b0
fix(web): rank usage provider summaries by the selected metric (#15632)
dharmeshgurnani Nov 6, 2026
6f54322
fix(server): wait for automatic follow-ups before settling threads (#…
Yash-Singh1 Nov 6, 2026
2e39f1d
fix(web): settings descriptions use the full row and stay two lines (…
flamboh Nov 6, 2026
bc1eb5d
fix(voice): insert Unicode word boundaries for dictation (#31799)
juliusmarminge Nov 6, 2026
2785e55
fix(mobile): use preferred languages for on-device iPhone dictation (…
juliusmarminge Nov 6, 2026
98b930f
fix(mobile): keep the opening words of local iPhone dictation (#31801)
juliusmarminge Nov 6, 2026
5c004fd
fix(server): keep PR generation focused on the change (#31819)
Yash-Singh1 Nov 6, 2026
e21347b
chore(desktop): trace shutdown phases (#31850)
Yash-Singh1 Nov 6, 2026
1bdb6cf
perf(server): batch shutdown recovery commits (#31854)
Yash-Singh1 Nov 6, 2026
c222511
perf(server): batch projection recovery reads into one query (#31842)
Yash-Singh1 Nov 6, 2026
ccde655
fix(desktop): let the window shrink to 400x360 so it fits half-screen…
shivamhwp Nov 6, 2026
0a2f590
fix(web): improve Changes row text and spacing (#31858)
shivamhwp Nov 6, 2026
dd059b4
feat(server): stop opted-in project actions when threads settle (#31857)
Yash-Singh1 Nov 6, 2026
291bcc3
fix(build): skip Koffi source builds during cross-packaging (#31864)
Yash-Singh1 Nov 6, 2026
c55db3e
fix(server): Antigravity installs on Intel Macs (#30189)
aledog007 Nov 6, 2026
2756da4
fix(desktop): arm64 macOS builds no longer ship x64-only objc-js bina…
joshuarossi Nov 6, 2026
ef81fd1
fix(web): keep task updates static in the timeline (#31888)
Yash-Singh1 Nov 6, 2026
202d5b5
fix(devices): keep devices listed when simulator discovery fails (#25…
shivamhwp Nov 6, 2026
86d8838
fix(web): dragging a sidebar thread no longer scrolls the list to the…
juliusmarminge Nov 6, 2026
c8267db
fix(web): tagging a thread by drag no longer scrolls the sidebar (#31…
t3dotgg Nov 6, 2026
9899b47
ci: stacked PRs stop evicting the shared pnpm cache (#31937)
t3dotgg Nov 6, 2026
6dcaf6c
fix(web): remote subagents no longer split from the lineage list (#29…
t3dotgg Nov 6, 2026
10af8ee
perf(ci): release uploads stop recompressing installers and CLI archi…
t3dotgg Nov 6, 2026
d14f87f
feat(antigravity): identify as T3 Code to agy acp 1.5.1+ (#31158)
patrick-toulme Nov 6, 2026
8344de7
ci(release): JS bundle jobs stop building an unused Linux helper (#31…
t3dotgg Nov 6, 2026
59ec1ba
feat(marketing): help search engines tell t3.codes apart from copycat…
t3dotgg Nov 6, 2026
6577c6b
perf(server): background service launcher uses 75% less memory (#29284)
t3dotgg Nov 6, 2026
df13391
fix(azure-devops): a fork's same-named branch no longer hides the bra…
saphid Nov 6, 2026
8a942c2
perf(server): provider-thread reads start from owned rows, not every …
juliusmarminge Nov 6, 2026
50f0dac
perf(server): stop tracing the per-event background-work probe (#31584)
juliusmarminge Nov 6, 2026
8ee2f35
perf(server): stop tracing each transcript file in usage scans (#31586)
juliusmarminge Nov 6, 2026
c76f94e
perf(cursor): stop tracing the per-event account usage hash (#31017)
juliusmarminge Nov 6, 2026
9db5d56
fix(muse): recover from unavailable session views (#32154)
Sidreyas Nov 6, 2026
c09060b
feat(web): sort and filter transcription models (#32045)
voltcrash Nov 6, 2026
6fe0fdf
fix(azure-devops): existing pull requests are found for branches cont…
aotradovec Nov 6, 2026
bdb8d5d
perf(server): background PR discovery no longer delays git status aft…
juliusmarminge Nov 6, 2026
8bf1b64
fix(web): the citation comment box opens at the quote instead of slid…
juliusmarminge Nov 6, 2026
40dc291
fix(clients): dictating a citation comment or preview annotation uses…
juliusmarminge Nov 6, 2026
32a0531
fix(web): PR bodies keep before/after video tables intact (#25988)
bartlomiejbloniarz Nov 6, 2026
05b7226
perf(release): fetch the nightly Android APK in a background step (#3…
t3dotgg Nov 6, 2026
423254e
perf(release): macOS CLI notarization no longer blocks the desktop bu…
t3dotgg Nov 6, 2026
cb8e0de
ci(release): npm publish no longer checks out and installs the worksp…
t3dotgg Nov 6, 2026
b90e554
ci(release): macOS arm64 stops compressing a pnpm store it cannot sav…
t3dotgg Nov 6, 2026
d5fc29f
fix(web): relay-connected microphone destinations authorize speech re…
juliusmarminge Nov 6, 2026
240446e
fix(server): a usage-limit auto-resume survives a server restart (#31…
shivamhwp Nov 7, 2026
e0ec11b
fix(mobile): review diff no longer goes blank after switching section…
juliusmarminge Nov 7, 2026
0bba368
fix(mobile): iOS filter menus close back into their pill without clip…
juliusmarminge Nov 7, 2026
23bdb9e
fix(mobile): Android composer renders DM Sans (#30230)
juliusmarminge Nov 7, 2026
d944e2a
fix(desktop): open Teams web in the preview browser (#31489)
shivamhwp Nov 7, 2026
07508ff
fix(web): popovers over the desktop header respond to the pointer (#3…
shivamhwp Nov 7, 2026
b19c9f0
fix(web): add installable icons for Firefox on Android (#30420)
shivamhwp Nov 7, 2026
08a3909
fix: show latest reply age in active thread rows (#31825)
shivamhwp Nov 7, 2026
4cb6945
fix(mobile): keep settled status pills readable (#31635)
shivamhwp Nov 7, 2026
9f2bb98
fix(mobile): preserve line breaks in Markdown table cells (#29355)
shivamhwp Nov 7, 2026
006d7e3
fix(mobile): stop the work-row shimmer from updating every frame (#28…
shivamhwp Nov 7, 2026
33f8584
fix(server): t3 service install no longer moves a --base-dir service …
shivamhwp Nov 7, 2026
fe901ac
feat(voice): opt into cloud dictation with OpenAI, Grok, or OpenRoute…
juliusmarminge Nov 7, 2026
4bd82b2
fix(web): make first-run dictation setup discoverable (#32197)
juliusmarminge Nov 7, 2026
15b7275
fix(web): first-run voice setup offers a model for the user's languag…
juliusmarminge Nov 7, 2026
d4247a5
feat: auto-settle inactive threads after 7 days by default (#32325)
t3dotgg Nov 7, 2026
faeed8c
docs(updates): say when Update all leaves a provider out (#32269)
Djordje-Stojanovic Nov 7, 2026
d5c2c12
test(server): three more tests stop assuming a POSIX host (#32263)
MikaMcFlurry Nov 7, 2026
f901c37
fix(server): git failures are read in English when macOS git follows …
jason5545 Nov 7, 2026
f4c8854
fix(marketing): balance fork and download heading text (#32194)
extoci Nov 7, 2026
984fe2d
perf(shared): scan usage-limit support once per provider catalog (#32…
luke2x Nov 7, 2026
257e407
fix(pi): the T3 MCP extension file is written atomically (#32231)
rishabhx29 Nov 7, 2026
f8c7c75
fix(web): the main sidebar stays collapsed after relaunch (#24202)
shivamhwp Nov 7, 2026
0f4a130
fix(codex): explain speed limits on managed connections (#30322)
shivamhwp Nov 7, 2026
83a3674
fix(web): isolate scrollbar styles from iframe owners (#32398)
Yash-Singh1 Nov 7, 2026
fad24fc
fix(azure-devops): default-branch lookup no longer fails for missing …
voltcrash Nov 7, 2026
bc46c0f
perf(server): avoid lsof polling when Linux proc is usable (#30011)
voltcrash Nov 7, 2026
1b95213
fix(providers): remove incomplete ChatGPT connections (#29280)
voltcrash Nov 7, 2026
fd1adc8
fix(acp): retain streamed child tool output (#32411)
StiensWout Nov 7, 2026
7f7bf26
fix(web): recover ACP settings when projects change (#32409)
StiensWout Nov 7, 2026
48bb784
fix(shared): inline code like `allocator.cc:217` becomes a file chip …
felixlaga Nov 7, 2026
ce9b806
fix(server): theme files saved with a UTF-8 BOM are published instead…
felixlaga Nov 7, 2026
a975217
fix(grok): long command titles no longer end in a broken character (#…
felixlaga Nov 7, 2026
95e7dbf
fix(github): keep review-required until required reviewers approve (#…
wSedlacek Nov 7, 2026
c864b1c
feat(web): delete archived threads from the archive page (#22160)
voltcrash Nov 7, 2026
2d0a9df
fix(provider-acp): preserve UTF-8 across interleaved terminal streams…
StiensWout Nov 7, 2026
5cb2a7d
fix(pi): preserve explicit thinking when switching models (#32389)
StiensWout Nov 7, 2026
beaeeff
fix(acp): bound unread raw notification retention (#19585)
StiensWout Nov 7, 2026
eeb6e23
fix(web): keep Pi thinking controls visible before selection (#27397)
voltcrash Nov 7, 2026
67fdc53
fix(desktop): published themes reach the app when it uses this machin…
not-compromised Nov 7, 2026
e344153
fix(antigravity): check account access after installation (#32446)
Yash-Singh1 Nov 7, 2026
f016a16
fix(acp): preserve native form questions and typed answers (#19659)
StiensWout Nov 7, 2026
9f00ced
fix(antigravity): explain missing SOCKS dependency during refresh (#1…
StiensWout Nov 7, 2026
4c3a9d5
fix(cursor): use the SDK account for usage data (#32448)
Yash-Singh1 Nov 7, 2026
917ce99
fix(web): agent sign-in defaults to Auto access (#32186)
flamboh Nov 7, 2026
a601caa
fix(gitlab): `glab mr accept` counts as a shell merge (#32400)
felixlaga Nov 7, 2026
97d04c3
fix(forgejo): tea's `pull` and `m` aliases count as shell merges (#32…
felixlaga Nov 7, 2026
e455200
fix: side chats start with the parent's permission mode and reasoning…
Iweisc Nov 7, 2026
25bf84a
fix(mobile): center the Choose project empty-state buttons (#27450)
juliusmarminge Nov 7, 2026
511238c
fix(mobile): Android terminal sends hardware-keyboard arrows, Tab, an…
only21mil Nov 7, 2026
0080084
fix(mobile): group settled PR threads in the continue menu (#27941)
arifali123 Nov 7, 2026
af96a01
fix(mobile): shorten the model picker save action (#32551)
PixPMusic Nov 7, 2026
a9e709f
fix(mobile): center Android header confirmation buttons (#32239)
PixPMusic Nov 7, 2026
0450f85
fix(muse): a declined /compact reports its reason and no longer wedge…
juliusmarminge Nov 8, 2026
57ded10
fix(web): restore bold weight in rendered Markdown (#25694)
juliusmarminge Nov 8, 2026
f475de2
fix(web): device tool update buttons fit their popovers (#27030)
juliusmarminge Nov 8, 2026
ecf7f1a
fix(web): mobile sidebar keeps its width when shelves expand (#27541)
juliusmarminge Nov 8, 2026
28eff11
fix(web): lineage phase headers truncate instead of overflowing the d…
juliusmarminge Nov 8, 2026
71c2d3a
fix(server): storage report lists project worktrees nested inside pla…
juliusmarminge Nov 8, 2026
a1af184
fix(scripts): report:renders starts on Windows without a vp shim (#32…
only21mil Nov 8, 2026
8a84e94
perf(server): skip oversized history during handoff selection (#23821)
AksharP5 Nov 8, 2026
7b680b6
feat(antigravity): support agy CLI as custom binaryPath (#32503)
jorotodorovv Nov 8, 2026
e11c2fd
fix(mobile): share PDFs from the Android attachment viewer (#32266)
shivamhwp Nov 8, 2026
3cd97a1
fix(server): saved preview screenshots keep full resolution (#28255)
TonybynMp4 Nov 8, 2026
20fcc6c
fix(server): refresh linking tools in existing agent sessions (#26737)
shivamhwp Nov 8, 2026
d6c2b09
feat(server): html tools take a file path, so agents stop retyping pa…
t3dotgg Nov 8, 2026
09a54f0
fix(search): keep whole-word title matches above busy prefixes (#32242)
shivamhwp Nov 8, 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
  •  
  •  
  •  
2 changes: 1 addition & 1 deletion .github/SECURITY.md
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
# Security policy

Report security vulnerabilities affecting T3 Code or T3 Tools-operated infrastructure to
[security@ping.gg](mailto:security@ping.gg). Please do not disclose them publicly until we have had
[security@t3.codes](mailto:security@t3.codes). Please do not disclose them publicly until we have had
a reasonable opportunity to investigate and remediate them.

See the [full security policy](https://t3.codes/security-policy) for reporting details, scope,
Expand Down
12 changes: 10 additions & 2 deletions .github/actions/setup-ci-deps/action.yml
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,10 @@ inputs:
description: Arguments for `vp install`, such as filters. Empty installs the whole workspace.
required: false
default: ""
save-pnpm-store:
description: Set to "false" when a concurrent job with the same install args saves the pnpm store
required: false
default: "true"
runs:
using: composite
steps:
Expand Down Expand Up @@ -123,10 +127,14 @@ runs:
key: ${{ steps.pnpm_verified.outputs.cache-primary-key }}

# A filtered install that started from the current full store adds nothing
# worth a second copy of it.
# worth a second copy of it. A stacked PR, based on a branch other than the
# default, saves a ~1 GB store only its own reruns can read, so it only restores.
# Concurrent jobs with the same install args reserve one key, so the losers
# compress the store for nothing; all but one pass save-pnpm-store: false.
- name: Save pnpm store
if: >-
inputs.install == 'true' &&
inputs.install == 'true' && inputs.save-pnpm-store == 'true' &&
(github.event_name != 'pull_request' || github.base_ref == github.event.repository.default_branch) &&
steps.pnpm_cache.outputs.cache-hit != 'true' &&
(steps.pnpm_store.outputs.namespace == 'full' ||
steps.pnpm_cache.outputs.cache-matched-key != format('pnpm-full-v1-{0}-{1}-{2}', runner.os, runner.arch, hashFiles('pnpm-lock.yaml', 'pnpm-workspace.yaml', 'package.json')))
Expand Down
41 changes: 35 additions & 6 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -192,6 +192,41 @@ jobs:
if: ${{ !cancelled() && steps.build.outcome == 'success' }}
run: node apps/desktop/scripts/verify-preload-bundle.mjs

# Browser tests run source modules; this boots the production chunk graph. The
# desktop build above already produced apps/web/dist, and the client waits about
# 15s for a session that never comes, so this runs here instead of in Test Web,
# which gates the whole run. Chromium comes from the cache Test Web shares.
- name: Resolve Playwright version
id: playwright_version
if: ${{ !cancelled() && steps.build.outcome == 'success' && needs.changes.outputs.test_web != 'false' }}
run: echo "version=$(node -p "require('./apps/web/node_modules/playwright/package.json').version")" >> "$GITHUB_OUTPUT"

- name: Cache Chromium
id: chromium_cache
if: ${{ !cancelled() && steps.build.outcome == 'success' && needs.changes.outputs.test_web != 'false' }}
uses: actions/cache@v6
with:
path: ~/.cache/ms-playwright
key: playwright-chromium-shell-${{ runner.os }}-${{ runner.arch }}-${{ steps.playwright_version.outputs.version }}

- name: Install Chromium for the built web client boot check
if: ${{ !cancelled() && steps.build.outcome == 'success' && needs.changes.outputs.test_web != 'false' && steps.chromium_cache.outputs.cache-hit != 'true' }}
run: node apps/web/node_modules/playwright/cli.js install --only-shell chromium

- name: Install missing Chromium system dependencies
if: ${{ !cancelled() && steps.build.outcome == 'success' && needs.changes.outputs.test_web != 'false' }}
run: |
browser=$(find "$HOME/.cache/ms-playwright" -name chrome-headless-shell -type f -print -quit)
test -n "$browser"
if ldd "$browser" | grep '=> not found'; then
node apps/web/node_modules/playwright/cli.js install-deps chromium
fi

- name: Boot the built web client
if: ${{ !cancelled() && steps.build.outcome == 'success' && needs.changes.outputs.test_web != 'false' }}
timeout-minutes: 3
run: node apps/web/scripts/verify-built-boot.ts

- name: Typecheck
if: ${{ !cancelled() && steps.typecheck.outcome == 'success' }}
timeout-minutes: 5
Expand Down Expand Up @@ -340,12 +375,6 @@ jobs:
- name: Test
run: vp run --filter @t3tools/web test

# Browser tests run source modules; this boots the production chunk graph.
- name: Boot the built web client
run: |
vp run --filter @t3tools/web build
node apps/web/scripts/verify-built-boot.ts

# apps/server sets `fileParallelism: false`, so its test files run strictly
# one at a time. Sharding spreads them over separate runners instead of
# separate workers, so no two server test files ever share a machine and the
Expand Down
17 changes: 14 additions & 3 deletions .github/workflows/desktop-macos-preview.yml
Original file line number Diff line number Diff line change
Expand Up @@ -73,16 +73,27 @@ jobs:
# Public T3 Connect identifiers (Clerk publishable key, relay URL).
cp .env.example .env
- uses: ./.github/actions/setup-apt-mirrors
# PR heads from before build:desktop:bundle use the full build, which
# compiles the Linux browser secret helper and needs libsecret.
- name: Check bundle-only build support
id: bundle_build
run: |
script="$(node -p "require('./package.json').scripts['build:desktop:bundle'] ? 'build:desktop:bundle' : 'build:desktop'")"
echo "script=$script" >> "$GITHUB_OUTPUT"
- if: steps.bundle_build.outputs.script == 'build:desktop'
uses: ./.github/actions/setup-apt-mirrors

- name: Install browser secret helper build libraries
if: steps.bundle_build.outputs.script == 'build:desktop'
run: sudo apt-get update && sudo apt-get install -y libsecret-1-dev pkg-config

# desktop-macos-preview-publish.yml packages this bundle as the preview channel.
# desktop-macos-preview-publish.yml packages this bundle as the preview
# channel. The Linux browser secret helper is not part of a macOS app.
- name: Build JS bundle
env:
T3CODE_TELEMETRY_CHANNEL: ${{ github.repository == 'pingdotgg/t3code' && 'preview' || 'dev' }}
run: vp run build:desktop
run: vp run ${{ steps.bundle_build.outputs.script }}

# Same layout as release.yml's js-bundle so release-desktop.yml can
# package it unchanged.
Expand Down
70 changes: 64 additions & 6 deletions .github/workflows/release-desktop.yml
Original file line number Diff line number Diff line change
Expand Up @@ -77,6 +77,12 @@ on:
required: false
default: ""
type: string
# Whether this job saves the workspace pnpm store. Release's two Macs
# install the same store on the same runner type, so only one saves it.
save_pnpm_store:
required: false
default: true
type: boolean
version:
required: true
type: string
Expand Down Expand Up @@ -160,6 +166,7 @@ jobs:
uses: ./.github/actions/setup-ci-deps
with:
install-args: --filter=@t3tools/desktop... --filter=t3... --filter=@t3tools/scripts...
save-pnpm-store: ${{ inputs.save_pnpm_store }}
env:
pnpm_config_cache_dir: ${{ runner.temp }}/pnpm-metadata

Expand Down Expand Up @@ -408,6 +415,7 @@ jobs:
run: command -v patchelf || { sudo apt-get update && sudo apt-get install -y patchelf; }

- name: Build CLI archive
id: build_cli
if: inputs.cli_archive
shell: bash
env:
Expand All @@ -425,30 +433,45 @@ jobs:
AZURE_TRUSTED_SIGNING_CERTIFICATE_PROFILE_NAME: ${{ secrets.AZURE_TRUSTED_SIGNING_CERTIFICATE_PROFILE_NAME }}
run: |
set -euo pipefail
if [[ "${{ inputs.platform }}" == "mac" && -n "${APPLE_API_KEY:-}" ]]; then
key_path="$RUNNER_TEMP/AuthKey_cli_${APPLE_API_KEY_ID}.p8"
printf '%s' "$APPLE_API_KEY" > "$key_path"
export APPLE_API_KEY="$key_path"
extra_args=()
if [[ "${{ inputs.platform }}" == "mac" ]]; then
if [[ -n "${APPLE_API_KEY:-}" ]]; then
key_dir="$(mktemp -d "$RUNNER_TEMP/t3-cli-notary.XXXXXXXX")"
trap 'rm -rf "$key_dir"' EXIT
key_path="$key_dir/AuthKey.p8"
(umask 077 && printf '%s' "$APPLE_API_KEY" > "$key_path")
export APPLE_API_KEY="$key_path"
fi
# Older release refs lack deferred notarization and still wait here.
cli_help="$(node scripts/build-cli-archive.ts --help)"
if [[ "$cli_help" == *--notary-submission-file* ]]; then
extra_args=(--notary-submission-file "$RUNNER_TEMP/t3-cli-notary-submission")
echo "deferred_notarization=true" >> "$GITHUB_OUTPUT"
fi
fi
node scripts/build-cli-archive.ts \
--platform "${{ inputs.platform }}" \
--arch "${{ inputs.arch }}" \
--version "${{ inputs.version }}" \
--resource-monitor-dir "$RUNNER_TEMP/cli-resource-monitor" \
--output-dir release-cli
--output-dir release-cli \
${extra_args[@]+"${extra_args[@]}"}
- name: Smoke-test CLI archive
if: inputs.cli_archive && inputs.verify_runner == ''
shell: bash
run: node scripts/smoke-cli-archive.ts --archive release-cli/* --expect-version "${{ inputs.version }}"

# macOS uploads its archive after "Await CLI notarization" instead.
- name: Upload CLI archive
if: inputs.cli_archive
if: inputs.cli_archive && inputs.platform != 'mac'
uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7
with:
name: cli-${{ inputs.platform }}-${{ inputs.arch }}
path: release-cli/*
if-no-files-found: error
# The archive is already gzip or zip; deflating it again saves under 2%.
compression-level: 0

- name: Install Linux desktop build libraries
if: inputs.platform == 'linux'
Expand Down Expand Up @@ -618,6 +641,39 @@ jobs:
vp run dist:desktop:artifact "${args[@]}"
# The CLI was submitted without waiting so Apple reviews it while the
# desktop builds. Notarization does not change the archive bytes, but
# nothing uploads them, so nothing publishes them, until Apple accepts.
# With signing configured, a missing submission id fails this step.
- name: Await CLI notarization
if: inputs.cli_archive && inputs.platform == 'mac' && steps.build_cli.outputs.deferred_notarization == 'true'
shell: bash
env:
APPLE_API_KEY: ${{ secrets.APPLE_API_KEY }}
APPLE_API_KEY_ID: ${{ secrets.APPLE_API_KEY_ID }}
APPLE_API_ISSUER: ${{ secrets.APPLE_API_ISSUER }}
run: |
set -euo pipefail
if [[ -n "${APPLE_API_KEY:-}" ]]; then
key_dir="$(mktemp -d "$RUNNER_TEMP/t3-cli-notary.XXXXXXXX")"
trap 'rm -rf "$key_dir"' EXIT
key_path="$key_dir/AuthKey.p8"
(umask 077 && printf '%s' "$APPLE_API_KEY" > "$key_path")
export APPLE_API_KEY="$key_path"
fi
node scripts/build-cli-archive.ts await-notarization \
--submission-file "$RUNNER_TEMP/t3-cli-notary-submission"
- name: Upload notarized CLI archive
if: inputs.cli_archive && inputs.platform == 'mac'
uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7
with:
name: cli-${{ inputs.platform }}-${{ inputs.arch }}
path: release-cli/*
if-no-files-found: error
# The archive is already gzip or zip; deflating it again saves under 2%.
compression-level: 0

# Warm installs only touch the store index, so new content means a fetch.
- name: Check staged install cache for new content
id: stage_pnpm_changed
Expand Down Expand Up @@ -761,6 +817,8 @@ jobs:
name: desktop-${{ inputs.platform }}-${{ inputs.arch }}
path: release-publish/*
if-no-files-found: error
# Installers, zips and blockmaps are already compressed; deflating them again saves under 0.3%.
compression-level: 0

- name: Upload resource monitor
uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7
Expand Down
Loading