Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
386 commits
Select commit Hold shift + click to select a range
616c426
fix(shared): TypeScript files no longer show as videos (#27372)
maria-rcks Oct 30, 2026
e4ecaf6
feat(mobile): message media, file cards and grouped steers match web …
maria-rcks Oct 30, 2026
f012fa2
fix(web): back-to-back messages from you stack as one burst with a si…
maria-rcks Oct 30, 2026
afb8619
fix(pi): clear Pi's native queue before Stop aborts (#27514)
StiensWout Oct 30, 2026
9479168
feat(pi): import terminal Pi sessions during setup (#27515)
StiensWout Oct 30, 2026
77336a5
fix(pi): nest tools called through another tool under their caller (#…
StiensWout Oct 30, 2026
e00ebb6
fix(pi): explain when an untrusted folder makes Pi skip project resou…
StiensWout Oct 30, 2026
a077fdd
fix(mobile): Android Thread settings rows no longer vanish with anima…
shivamhwp Oct 30, 2026
35dcdd6
fix(server): phone taps, typing and scrolling reach desktop browser t…
shivamhwp Oct 30, 2026
b8397e5
feat(web): images and videos sent with text sit above the bubble as t…
maria-rcks Oct 30, 2026
1da41f9
feat(web): files sent without text show as file cards (#27324)
maria-rcks Oct 30, 2026
e57ae5a
feat(web): pasted text, voice notes, snapshots and sending files get …
maria-rcks Oct 30, 2026
78fba05
perf(web): revisiting a thread reuses its rendered Markdown instead o…
juliusmarminge Oct 30, 2026
5b357b3
perf(web): chat Markdown parses about twice as fast with the same out…
juliusmarminge Oct 30, 2026
33d27e9
fix(server): Pull Requests says which GitHub credential cannot see a …
shivamhwp Oct 30, 2026
028ed85
fix(server): Codex generated images show in chat, including on Androi…
shivamhwp Oct 30, 2026
8d012a6
fix(web): a new thread's first reply shows without reloading (#27522)
juliusmarminge Oct 30, 2026
6fc9144
fix: image-only messages no longer leak the attachment placeholder (#…
maria-rcks Oct 30, 2026
ae521d1
fix(ci): keep desktop launch fixtures from auto-settling
juliusmarminge Oct 30, 2026
bf270e7
fix(server): Claude accounts show the new Max and Ultra plan names (#…
flamboh Oct 30, 2026
9b1d351
perf(server): busy threads stop decoding settled subagents and idle p…
juliusmarminge Oct 30, 2026
68be2f7
fix(server): record ACP prompt response turn usage (#19958)
ben-w-smith Oct 30, 2026
2e86097
perf(server): a checkpoint capture starts 8 git processes instead of …
josephv123 Oct 30, 2026
f012aa6
fix(github): drop a clone URL's .git before a trailing slash or query…
only21mil Oct 30, 2026
98a7353
perf(server): avoid repeated Git directory discovery during worktree …
Adamulek123 Oct 30, 2026
a3df604
fix(web): preserve the active pointer in the flat Device view (#21430)
only21mil Oct 30, 2026
6511796
fix(codex): recover CLI version after failed app-server probe (#21443)
only21mil Oct 30, 2026
a17ab2e
fix(server): release agent-device sessions when device_close runs (#2…
only21mil Oct 30, 2026
dcf051e
fix(composer): copied context with an apostrophe survives the HTML cl…
MarcoDotIO Oct 30, 2026
1d162e1
fix(server): storage cleanup keeps Windows worktrees with an open ter…
MarcoDotIO Oct 30, 2026
a0d6cc8
fix(client-runtime): goal token counts no longer read 1000k (#21594)
MarMarLabs Oct 30, 2026
797bcb0
fix: Intel Mac installs and broken Codex versions fail with clear nex…
maria-rcks Oct 30, 2026
97c2cff
fix(server): retain relay unregister events at normal log level (#21650)
only21mil Oct 30, 2026
32683c9
fix(server): bound terminal history names for encrypted filesystems (…
JesstLe Oct 30, 2026
ebd1265
fix(connect): the remove dialog says whether a T3 Connect environment…
Brechard Oct 30, 2026
50cdc24
fix(server): browser profiles reported by one client survive another …
Marve10s Oct 30, 2026
bf4659a
fix(mobile): file preview videos keep their own aspect ratio (#21894)
NikitaMGrimm Oct 30, 2026
ff55c19
fix(server): show Claude MCP elicitations on the approval card (#21903)
chrischriscris Oct 30, 2026
a3cf3f0
fix(server): the Files tree lists symlinked files and folders (#21920)
KishanRPatel Oct 30, 2026
915bb6d
fix(server): disable text conversion when measuring review-guide hunk…
only21mil Oct 30, 2026
3c3a8f5
fix(bitbucket): skip Cloud API reads for unsupported Server remotes (…
only21mil Oct 30, 2026
79d9820
fix(providers): apply the registry deadline while reading version met…
only21mil Oct 30, 2026
33c6401
fix(server): review guides keep excerpts in files with spaces or esca…
only21mil Oct 30, 2026
f2417cd
fix(mobile): await branch refs before choosing an automatic feature b…
only21mil Oct 30, 2026
120dbb0
fix(mobile): recover incoming shares after interrupted writes (#22115)
only21mil Oct 30, 2026
1b78b65
fix(ssh): reuse one askpass helper directory instead of a new temp di…
only21mil Oct 30, 2026
3a9640c
fix(claude): name the notebook a NotebookEdit changed (#22130)
only21mil Oct 30, 2026
2b77a05
fix(mobile): new-task context no longer changes every render (#22134)
flamboh Oct 30, 2026
f477008
fix(web): show the result of the notified delegated task (#22141)
Alb11747 Oct 30, 2026
5fd3639
fix(mobile): accept comma decimals in scheduled task intervals (#22158)
only21mil Oct 30, 2026
bd9cc0a
fix(desktop): store Clerk tokens with owner-only permissions (#22190)
macodev00 Oct 30, 2026
f5372d2
fix(antigravity): reject unsupported manual compaction (#22217)
arhammahajan Oct 30, 2026
b5a5ab4
fix(github): read github.com-<name> SSH aliases through github.com (#…
matthias-scale Oct 30, 2026
5e222be
fix(server): stop reporting Codex HTTP failures as disk errors (#22308)
pschaub Oct 30, 2026
5033239
fix(provider-muse): Muse turns no longer fail when the project path's…
GLDRoger Oct 30, 2026
5ad7da0
fix(web): keep markdown separators visible in dark mode (#22367)
Zlash65 Oct 30, 2026
444df61
fix(gitlab): merge requests show their line counts (#22374)
TonybynMp4 Oct 30, 2026
b8851fb
fix(server): don't bill a replayed Codex first request twice (#22392)
fixfon Oct 30, 2026
94b80ea
fix(web): language dialects use their base language's icon (#22455)
Yuruzuu Oct 30, 2026
65fc784
fix(desktop): timestamps follow the macOS region and Linux LC_TIME se…
ipanasenko Oct 30, 2026
40c0b0e
fix(web): warn when ctrl shortcuts collide with mod on Windows and Li…
only21mil Oct 30, 2026
a8d6b0e
fix(web): mouse Back/Forward over a streamed preview navigate the pre…
NikitaMGrimm Oct 30, 2026
0070b27
fix(server): the suggested t3 command names this install, not another…
Gourav224 Oct 30, 2026
e94c3a7
fix(server): streamed clicks no longer wait behind stale hovers (#22739)
rookmate Oct 30, 2026
3776dfb
fix(connect): a quit mid-download no longer wedges the relay client i…
jooyyy Oct 30, 2026
6b276f5
fix(web): project removal says provider sessions are kept (#22867)
joshka Oct 30, 2026
9ceb949
fix(web): copied Markdown tables keep formula pipes (#22875)
NikitaMGrimm Oct 30, 2026
503bcaa
fix: keep offline environments out of thread reorder writes (#22887)
deveshsangwan Oct 30, 2026
c78712e
fix(server): clarify browser setup when running as root (#22892)
jkramer5103 Oct 30, 2026
ece8fd8
fix(markdown): an escaped backslash before \( no longer crashes dev b…
NikitaMGrimm Oct 30, 2026
e492686
fix(web): diagnostics cards use one border radius (#22906)
Saikrishna1876 Oct 30, 2026
ae1e89e
fix(desktop): SnapShot shortcuts with arrow keys register on macOS an…
MarcoDotIO Oct 30, 2026
0ce257b
fix(ssh): detect lost connections during remote commands (#23025)
yumitdemir Oct 30, 2026
13c7de2
fix(codex): approvals still appear after many stopped Codex turns (#2…
only21mil Oct 30, 2026
ae1a3b1
fix(claude): keep model upgrade notices when signed out (#23272)
only21mil Oct 30, 2026
8f6c9b7
fix(web): preserve typed dimensions with the aspect ratio locked (#23…
only21mil Oct 30, 2026
87b36c7
fix(codex): preserve partial answer messages and thread histories (#2…
saphid Oct 30, 2026
e92981d
fix(server): list folders named with a backslash on Linux and macOS (…
only21mil Oct 30, 2026
14d56e1
fix(server): preserve byte-order marks in Git diff contents (#23421)
yashranaway Oct 30, 2026
c65e488
fix(web): save settings fields only after an edit (#23427)
only21mil Oct 30, 2026
2b1e15c
fix(shared): preserve hyphens in prerelease versions (#23430)
yashranaway Oct 30, 2026
b0410a4
fix(browser): serialize concurrent profile clears (#23434)
yashranaway Oct 30, 2026
3a537d2
fix(diagnostics): include browser trace failures (#23438)
yashranaway Oct 30, 2026
9522c7d
fix(acp): forward empty plan replacements (#23440)
yashranaway Oct 30, 2026
b665f0b
fix(web): recognize plain text aliases in code fences (#23446)
only21mil Oct 30, 2026
42ca5d5
fix(web): keep deleted clipboard attachments out of the draft (#23447)
only21mil Oct 30, 2026
c40b32a
fix(web): keep ACP agent logos in multi-model selections (#23448)
only21mil Oct 30, 2026
6ad0827
fix(web): name inherited background activity profiles (#23450)
only21mil Oct 30, 2026
f8768d6
fix(mobile): use the Android sheet header for Add environment (#23452)
PixPMusic Oct 30, 2026
9d42473
fix(desktop): oversized preview events no longer take down the app (#…
only21mil Oct 30, 2026
8bbe5aa
fix(mobile): share pull request refresh subscriptions (#23464)
only21mil Oct 30, 2026
4ce9205
fix(web): support Home and End on hue sliders (#23465)
only21mil Oct 30, 2026
4524eee
fix(claude): no failed AskUserQuestion row after the resume dialog (#…
only21mil Oct 30, 2026
3fa79a5
fix(scripts): copy web brand icons to an absolute target directory (#…
only21mil Oct 30, 2026
54c1f10
fix(web): keep model picker open during IME composition (#23493)
only21mil Oct 30, 2026
269357c
fix(mobile): fit large thread titles in Arrange threads (#23499)
only21mil Oct 30, 2026
b1b3c10
fix(clients): keep accepted server updates through disconnects (#23532)
only21mil Oct 30, 2026
0804c60
fix(server): reject busy merge-back targets before blocking their que…
Aforno Oct 30, 2026
3702273
perf(web): skip favicon loading for custom project icons (#23569)
only21mil Oct 30, 2026
f46f838
fix(server): setup scripts follow terminal shell fallbacks (#23576)
Aforno Oct 30, 2026
1c99a55
fix(web): report invalid preview addresses (#23577)
only21mil Oct 30, 2026
200a373
fix(opencode): keep streamed reply text after an event stream reconne…
only21mil Oct 30, 2026
9facfc5
fix(opencode): apply the 3-minute limit to the whole v2 text generati…
only21mil Oct 30, 2026
72986b4
fix(mobile): show draft review comments inline and in the count (#23602)
only21mil Oct 30, 2026
2b98f54
fix(github): expand pull request context from the merge base (#23638)
only21mil Oct 30, 2026
353cf7b
fix(web): show project action edit buttons on touch screens (#23640)
only21mil Oct 30, 2026
cf93019
fix(cli): keep --base-dir in the sudo command browser setup prints (#…
only21mil Oct 30, 2026
28c7d3e
fix(orchestration): gate prepared provider starts (#23669)
parmartejass Oct 30, 2026
d18690d
fix(observability): trace attributes keep objects that appear twice (…
only21mil Oct 30, 2026
13f9bc4
fix(web): label inherited worktree cleanup modes correctly (#23678)
only21mil Oct 30, 2026
3bd744f
fix(web): show clipboard errors in anchored copy notifications (#23679)
only21mil Oct 30, 2026
be43da4
fix(web): PDF previews keep their page when the agent responds (#23732)
semyonfox Oct 30, 2026
cd0e104
fix(cli): skip the service prompt when t3 connect has no terminal (#2…
only21mil Oct 30, 2026
26dc368
fix(pi): show the provider error when Pi text generation fails (#23741)
only21mil Oct 30, 2026
3e7277e
fix(web): release discarded draft image previews after Undo expires (…
only21mil Oct 30, 2026
6c703e1
fix(web): allow Antigravity installation while status loads (#23746)
only21mil Oct 30, 2026
8689c7a
fix(server): onboarding reads a remote url on its section header line…
WesleySmits Oct 30, 2026
fd78ea4
fix(web): show an error when merge-back or disconnect fails (#23753)
only21mil Oct 30, 2026
8bc1891
fix(server): avoid duplicate JSON in ACP terminal results (#23755)
florentmsl Oct 30, 2026
e1af0b2
perf(provider-core): provider instances share one latest-version look…
only21mil Oct 30, 2026
060c332
fix(codex): warn when a Codex notification fails to decode (#23766)
only21mil Oct 30, 2026
9023554
fix(usage): explain price edits blocked by model mappings (#23768)
only21mil Oct 30, 2026
975059a
fix(web): keep unsaved edits to other ACP providers (#23847)
only21mil Oct 30, 2026
f0ec739
fix(server): skip history reads for ineligible idle compaction (#23929)
azogz Oct 30, 2026
7f005d4
fix(server): forks no longer inherit pending title regeneration (#24014)
only21mil Oct 30, 2026
645df45
fix(web): keep add-project inputs open during IME composition (#24016)
only21mil Oct 30, 2026
8f79233
fix(web): keep terminal close confirmations on their original thread …
only21mil Oct 30, 2026
fb412b6
fix(server): cap delivery history for oversized coalesced webhooks (#…
only21mil Oct 30, 2026
ae45ccd
fix(desktop): a stalled capture no longer freezes picture-in-picture …
Batuhan1999 Oct 30, 2026
64968b3
fix(web): a branch restore in one thread no longer blocks another thr…
Batuhan1999 Oct 30, 2026
bc216e4
fix(web): closed preview sessions no longer keep syncing for the rest…
Batuhan1999 Oct 30, 2026
34766e6
perf(cli): thread show reads only the end of long threads (#24087)
only21mil Oct 30, 2026
c84acfa
fix(web): keep later navigation when thread archival completes (#24109)
only21mil Oct 30, 2026
e9dd8a6
fix(clients): offer Commit when the branch is behind upstream (#24117)
only21mil Oct 30, 2026
d1777ea
fix(claude): stream live command output on Linux when TMPDIR is set (…
only21mil Oct 30, 2026
c924644
fix(web): long guide Next buttons wrap instead of overflowing (#24189)
PixPMusic Oct 30, 2026
e1d85af
fix(desktop): follow live system light/dark changes on Linux (#24193)
eboye Oct 30, 2026
eca102b
fix(server): browser load errors with digits keep their full name (#2…
MarcoDotIO Oct 30, 2026
6275f5c
docs: keybindings guide names the real when key and the stopped-threa…
MarcoDotIO Oct 30, 2026
88fec6f
docs: thread migration guide names the real --base-dir flag (#24250)
MarcoDotIO Oct 30, 2026
06b62fb
fix(desktop): nightly update notes no longer list the Full Changelog …
davisonio Oct 30, 2026
e0464a7
fix(server): accept explicit false in Claude managed policy (#24402)
zaydiscold Oct 30, 2026
771afda
fix(build): preserve directory desktop artifacts and framework symlin…
zaydiscold Oct 30, 2026
e83021c
fix(desktop): LAN pairing links follow the current network address (#…
only21mil Oct 30, 2026
4ce54d4
fix(server): turns no longer start on a provider instance being repla…
only21mil Oct 30, 2026
64f3042
fix(web): closing an invalid When editor no longer leaves Save disabl…
only21mil Oct 30, 2026
f5bc64b
fix(web): deleting a thread no longer offers to remove a shared workt…
only21mil Oct 30, 2026
e5871b6
fix(web): Reconnect on a switched-off environment switches it back on…
Jacksondr5 Oct 30, 2026
8a80ea1
fix(cursor): save SDK credentials with undefined optional fields (#24…
Onkarj012 Oct 30, 2026
e6fccee
fix(server): cache absent legacy transcripts for V2 threads (#24707)
ScottN-PV Oct 30, 2026
b6f066b
fix(server): editing a file no longer forces a full search-index resc…
only21mil Oct 30, 2026
9e97921
fix(clients): a route added after a reorder no longer disappears (#24…
only21mil Oct 30, 2026
6eaf397
fix(server): skip provider CLI update when already on latest (#24763)
samkelly880 Oct 30, 2026
8ae3dfc
fix(providers): a failed provider check no longer drops later setting…
rishabhx29 Oct 30, 2026
3f75a0e
fix(acp): stop showing ACP v2 prompt echoes as a second user message …
ScottN-PV Oct 30, 2026
22c7039
fix(server): removing a failed clone no longer leaves a stuck banner …
dw3105 Oct 30, 2026
87c33c8
fix(web): Limits ChatGPT usage card names the connected accounts (#24…
only21mil Oct 30, 2026
49f51e1
fix(web): allow adding the displayed provider accent color (#25014)
tsukaska Oct 30, 2026
97dbfd7
fix(web): preserve terminal selections across unchanged redraws (#25030)
maria-rcks Oct 30, 2026
bb7ed73
fix(bitbucket): honor the repository in pull request URLs (#25052)
maria-rcks Oct 30, 2026
f8278d8
fix(web): keep typed Settings text when Esc closes Settings (#25131)
AatmanAJ Oct 30, 2026
3a6b018
fix(mobile): keep split-view inspectors registered across renders (#2…
maria-rcks Oct 30, 2026
c3d8c4b
fix(mcp): preserve actionable device screenshot errors (#25216)
maria-rcks Oct 30, 2026
54d0a16
fix(server): reject Codex turns owned by an earlier run (#25224)
maria-rcks Oct 30, 2026
1cfd23e
fix(web): keep palette project lookups in their environment (#25236)
maria-rcks Oct 30, 2026
40b4353
fix(server): HEAD webhook probes no longer start agent runs (#25291)
only21mil Oct 30, 2026
f8df431
fix(antigravity): binary file reads return an error, not garbled text…
only21mil Oct 30, 2026
9474bcb
fix(web): preserve trailing whitespace in review diffs (#25303)
only21mil Oct 30, 2026
6919aa4
fix(codex): keep late subagent interrupts from freezing other threads…
only21mil Oct 30, 2026
68a1956
fix(server): name the missing Antigravity ACP runtime (#25435)
Dodothereal Oct 30, 2026
1fe0b4f
fix(server): clear unreachable preview downloads after a server resta…
only21mil Oct 30, 2026
f048a9b
fix(web): archiving or deleting a thread expires its earlier Undos (#…
only21mil Oct 30, 2026
3121c19
fix(usage): count compressed Codex rollouts (#25453)
maria-rcks Oct 30, 2026
812cb68
fix(provider-acp-registry): install agents with large archive listing…
kareemsetl Oct 30, 2026
286bc5e
fix(server): editing or removing a hand-written shortcut in Settings …
MarcoDotIO Oct 30, 2026
076aacc
fix(acp): cancelled ACP tool calls no longer stay running and end as …
MarcoDotIO Oct 30, 2026
7f2ff41
fix: prevent subagents inheriting parent settlement protections (#26035)
agentic-jarmo Oct 30, 2026
e428a2c
fix(web,mobile): pull request text breaks lines when providers do (#2…
CodyRay Oct 30, 2026
1758072
fix(web): byte sizes just under the next unit no longer read "1024 KB…
MarcoDotIO Oct 30, 2026
91c7c47
fix(server): truncated webhook delivery bodies no longer end in a rep…
MarcoDotIO Oct 30, 2026
f56a477
fix(server): thread deletion removes files attached to question answe…
SouthCarpet Oct 30, 2026
32ea1a1
fix(mobile): keep the composer text box off the model button on RTL p…
S3333F Oct 30, 2026
513bfbb
fix(scripts): check:changed compares forks against upstream, not a st…
tris203 Oct 30, 2026
9ad6c7e
fix(web,mobile): long links in secret requests wrap and can be copied…
MatthewFeroz Oct 30, 2026
2246386
fix(web): clicking a secret request card focuses its field again (#26…
MatthewFeroz Oct 30, 2026
d8430c0
fix(opencode): read the selected Go key from OpenCode 2's credential …
nolight132 Oct 30, 2026
1c7cef2
fix(web): onboarding pairing hint no longer suggests npx t3 serve --t…
wezn Oct 30, 2026
4dd2f73
fix(web): Load balancing and PR sharing name the route in use (#26441)
hawaii-h1 Oct 30, 2026
ad3ea30
docs: clarify Windows T3 Connect host lifetime (#26480)
TheAngryPit Oct 30, 2026
6e72f54
fix(prs): classify generated files and evals correctly (#26563)
jakeleventhal Oct 30, 2026
26af674
fix(forgejo): publishing a repository with no commits no longer fails…
Mnigos Oct 30, 2026
35231d7
fix(web): stop timeline details icon flickering on touch devices (#26…
shivamhwp Oct 30, 2026
32ce9db
fix(web): remote machine icon no longer forces a third sidebar line (…
ahalekelly Oct 30, 2026
e13c0a9
fix(server): keep provider update progress on the latest frame (#26823)
bitmvk Oct 30, 2026
eb5612d
fix(web): prevent long links from creating per-character elements (#2…
saimircelaj0 Oct 30, 2026
c61a51d
fix(server): recover PR cache from corrupt scope revisions (#26873)
markus41 Oct 30, 2026
cfe28f0
fix(web): model picker opens at its final height instead of shrinking…
flamboh Oct 30, 2026
2274ff9
fix(web): Compact chip fits on narrow composers (#27033)
flamboh Oct 30, 2026
1a7ddbe
fix(shared): preserve JSONC properties after CR comments (#27069)
Lucenx9 Oct 30, 2026
1b9437f
fix(web): long pending-question headers truncate instead of overflowi…
toni92-beep Oct 30, 2026
7ec1894
fix(desktop): control sockets work with long temporary paths (#27125)
Lucenx9 Oct 30, 2026
609dd0f
fix(web): plain text code blocks match the text around them (#27144)
profboba Oct 30, 2026
7e83902
fix(desktop): Vivaldi cookie import finds its Linux keyring key (#27148)
Rhinomcd Oct 30, 2026
77f08e6
fix(web): app shortcuts wait while a confirmation dialog is open (#27…
serge-the-hedge Oct 30, 2026
4fb9e5d
fix(server): dev database copies drop links to other environments (#2…
maria-rcks Oct 30, 2026
9ccc715
chore(web): upgrade Base UI to 1.9 (#27796)
juliusmarminge Oct 30, 2026
9588f0c
fix(server): a file picker closes when its page is replaced (#22062)
fcgith Oct 30, 2026
12d1e4c
fix(web): keep truncated Markdown task previews read-only (#22339)
only21mil Oct 30, 2026
e9485df
perf(composer): reuse persisted image bytes when attachments change (…
only21mil Oct 30, 2026
e2d9d9a
fix(server): provider logs of finished threads obey retention limits …
only21mil Oct 30, 2026
469afd8
fix(chat): commands that exit 0 no longer show as failed (#23351)
only21mil Oct 30, 2026
3a873e8
fix(web): disable conflict checkout without required permissions (#23…
only21mil Oct 30, 2026
714f849
fix(server): t3 auth --json and --token-only print only the result (#…
MarcoDotIO Oct 30, 2026
da94a13
fix(web): tab to equations only when they overflow (#23954)
only21mil Oct 30, 2026
7c90d51
fix(web): composer keeps the picked effort when it falls back to anot…
mkantautas Oct 30, 2026
9bd5e12
fix(web): restored Device view waits for device state before setup (#…
only21mil Oct 30, 2026
91a9196
perf(server): idle Grok sessions on Linux stop polling /proc every 25…
only21mil Oct 30, 2026
e496db3
fix(server): a task cancelled as its usage limit lands no longer resu…
spoukyii Oct 30, 2026
7917ac8
fix(web): Resume keeps its thread's model when you switch threads (#2…
only21mil Oct 30, 2026
c6ef3b4
fix(server): empty MCP status filters no longer hide threads (#25306)
only21mil Oct 30, 2026
bef663a
fix(device): recover cached agent daemons after exit (#23441)
yashranaway Oct 30, 2026
9ea95c1
fix(gitlab): keep pull request actions on the selected host (#23695)
parmartejass Oct 30, 2026
2ce3185
fix(codex): say why the Codex app-server exited (#23938)
mkantautas Oct 30, 2026
78d0668
fix(mobile): mark the thread worktree's branch as current (#23436)
only21mil Oct 30, 2026
52b0ab2
fix(preview): reserve capacity before opening browser tabs (#25028)
maria-rcks Oct 30, 2026
efe0d16
fix(mobile): preserve Android Usage across layout changes (#25231)
maria-rcks Oct 30, 2026
e555903
fix(mobile): keep refresh errors out of the load-more footer (#23594)
only21mil Oct 30, 2026
b9eb552
fix(server): release retired provider scopes (#24777)
maxwellyoung Oct 30, 2026
1854e14
fix(server): recognize a Claude proxy set in Claude's settings.json (…
EhsanulHaqueSiam Oct 30, 2026
1820fbe
fix(server): stop event subscribers before closing the database (#27831)
maria-rcks Oct 30, 2026
930df19
fix(mobile): release hidden sidebar PR summary demand (#25337)
saphid Oct 30, 2026
81899ce
feat(server): read Bitbucket and GitCafe credentials from a secret pr…
yordis Oct 30, 2026
cb9629e
perf(web): thread switches skip re-parsing, sidebar scrolling, and co…
juliusmarminge Oct 30, 2026
78f1ba8
fix(web): preserve PDF scroll and zoom across autoreloads (#25555)
edemaine Oct 30, 2026
96c21aa
feat(marketing): homepage quotes now come from well-known devs (#27251)
t3dotgg Oct 30, 2026
d2d1e4f
fix(updates): version checks respect your configured npm registry (#2…
t3dotgg Oct 30, 2026
be5a887
feat: add assembly file highlighting and language selection (#27899)
ImLunaHey Oct 31, 2026
d92c437
feat(web): ask for a GitHub star once after 5 prompts (#27832)
t3dotgg Oct 31, 2026
f3bbd0f
fix(web): video full-screen buttons work in HTML renders (#21378)
punkhop Oct 31, 2026
2a180c7
fix(desktop): compare custom renderer scheme and authority explicitly…
only21mil Oct 31, 2026
a2e4524
fix(web): preview address bar no longer ligates "://" (#21579)
sairajchouhan Oct 31, 2026
0d51b14
fix(server): read the smallest iOS simulator text size as small (#22114)
only21mil Oct 31, 2026
ee2800e
fix(mobile): relative-time labels keep counting on archive and pull r…
only21mil Oct 31, 2026
c856e00
fix(desktop): stop the macOS Settings tracker when T3 exits (#22497)
only21mil Oct 31, 2026
159a914
fix(claude): context meter shows where Claude actually auto-compacts …
GitJarno Oct 31, 2026
5153300
fix(desktop): browser tabs no longer report loopback access as denied…
afrojun Oct 31, 2026
5b9c1ae
fix(desktop): explain Hyprland SnapShot activation timeouts (#23426)
only21mil Oct 31, 2026
76c25c7
fix(forgejo): reviewer picker lists each assignee once on Forgejo and…
0pilatos0 Oct 31, 2026
e2a6267
fix(server): release drained terminal output while queue stays busy (…
parmartejass Oct 31, 2026
cf5c1cf
Merge commit 'e2a6267d3063ddd25f38fdb59a467f44ed65ae37' into fix/rele…
fireboltdude1357 Oct 31, 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
  •  
  •  
  •  
145 changes: 145 additions & 0 deletions .github/workflows/mobile-eas-preview-fork.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,145 @@
name: Mobile EAS Preview (Fork)

# EAS previews for fork PRs. This runs the PR's code with an Expo token: the
# app config and plugins run on this runner, and native builds run on EAS
# with preview signing credentials. The label is the maintainer's sign-off
# that they reviewed that code, so it covers exactly the commit it was applied
# to: this pins that commit and consumes the label before running anything. A
# later push deploys nothing until the label is applied again.
#
# Same-repo PRs deploy on every push while labeled, via mobile-eas-preview.yml.

on:
pull_request_target:
types: [labeled]

permissions:
contents: read

jobs:
preview:
name: EAS Preview
if: >-
github.event.pull_request.head.repo.full_name != github.repository &&
github.event.label.name == '🚀 Mobile Continuous Deployment'
runs-on: blacksmith-8vcpu-ubuntu-2404
concurrency:
group: mobile-eas-preview-fork-${{ github.event.pull_request.number }}
cancel-in-progress: true
permissions:
contents: read
pull-requests: write
env:
APP_VARIANT: preview
NODE_OPTIONS: --max-old-space-size=8192
MOBILE_VERSION_POLICY: fingerprint
steps:
# If a maintainer removed the label first, that removal wins.
- id: consume
name: Consume the deployment label
uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8
with:
script: |
try {
await github.rest.issues.removeLabel({
owner: context.repo.owner,
repo: context.repo.repo,
issue_number: context.payload.pull_request.number,
name: context.payload.label.name,
});
core.setOutput("consumed", "true");
} catch (error) {
if (error.status !== 404) throw error;
core.info("The label was removed before this run could consume it. Skipping.");
core.setOutput("consumed", "false");
}
- id: expo-token
name: Check for EXPO_PREVIEW_TOKEN
if: steps.consume.outputs.consumed == 'true'
env:
EXPO_TOKEN: ${{ secrets.EXPO_PREVIEW_TOKEN }}
run: |
if [ -n "$EXPO_TOKEN" ]; then
echo "present=true" >> "$GITHUB_OUTPUT"
else
echo "present=false" >> "$GITHUB_OUTPUT"
echo "EXPO_PREVIEW_TOKEN is not set; skipping EAS preview."
fi
# The head SHA from the label event, not the branch, so a push after the
# label cannot swap in unreviewed code. No credentials stay in .git for
# the PR's scripts to read.
- name: Checkout reviewed commit
if: steps.expo-token.outputs.present == 'true'
uses: actions/checkout@v6
with:
ref: ${{ github.event.pull_request.head.sha }}
fetch-depth: 0
persist-credentials: false
# No sparse-checkout: see mobile-eas-preview.yml.

# No caches: pull_request_target saves them under main's scope, where
# trusted workflows with other secrets would restore what PR code wrote.
- name: Setup Vite+
if: steps.expo-token.outputs.present == 'true'
uses: voidzero-dev/setup-vp@v1
with:
node-version-file: package.json
cache: false
run-install: |
args:
- --filter=@t3tools/mobile...
- name: Expose pnpm
if: steps.expo-token.outputs.present == 'true'
run: |
pnpm_version="$(node --print "require('./package.json').packageManager.split('@').pop()")"
vp_pnpm_bin="$HOME/.vite-plus/package_manager/pnpm/$pnpm_version/pnpm/bin"
echo "$vp_pnpm_bin" >> "$GITHUB_PATH"
"$vp_pnpm_bin/pnpm" --version
- name: Setup EAS
if: steps.expo-token.outputs.present == 'true'
uses: expo/expo-github-action@v8
with:
# Pinned and installed with npm for the same reasons as mobile-eas-preview.yml.
eas-version: 21.8.0
eas-cache: false
token: ${{ secrets.EXPO_PREVIEW_TOKEN }}
packager: npm

- name: Pull preview environment variables
if: steps.expo-token.outputs.present == 'true'
working-directory: apps/mobile
env:
EXPO_TOKEN: ${{ secrets.EXPO_PREVIEW_TOKEN }}
run: |
eas env:pull preview --non-interactive
# See mobile-eas-preview.yml: keeps Android build and OTA fingerprints matching.
node --input-type=module <<'NODE'
import { appendFileSync, readFileSync } from "node:fs";
import { parseEnv } from "node:util";
const env = parseEnv(readFileSync(".env.local", "utf8"));
const googleServicesFile = env.T3CODE_ANDROID_GOOGLE_SERVICES_FILE;
if (googleServicesFile) {
appendFileSync(process.env.GITHUB_ENV, `T3CODE_ANDROID_GOOGLE_SERVICES_FILE=${googleServicesFile}\n`);
}
NODE
- name: Deploy with fingerprint check
if: steps.expo-token.outputs.present == 'true'
uses: expo/expo-github-action/continuous-deploy-fingerprint@main
env:
EXPO_TOKEN: ${{ secrets.EXPO_PREVIEW_TOKEN }}
RUNNER_DEBUG: "1"
# The action only comments for pull_request events; this hook gives
# it the PR under pull_request_target. Without it, it skips the comment.
EXPO_TEST_GITHUB_PULL: ${{ github.event.pull_request.number }}
with:
profile: preview:dev
branch: pr-${{ github.event.pull_request.number }}
platform: all
environment: preview
working-directory: apps/mobile
github-token: ${{ secrets.GITHUB_TOKEN }}
14 changes: 8 additions & 6 deletions .github/workflows/mobile-eas-preview.yml
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,9 @@ on:
jobs:
preview:
name: EAS Preview
# Fork PRs deploy one reviewed commit per label through mobile-eas-preview-fork.yml.
if: |
github.event.pull_request.head.repo.full_name == github.repository &&
contains(github.event.pull_request.labels.*.name, '🚀 Mobile Continuous Deployment') &&
(github.event.action != 'labeled' || github.event.label.name == '🚀 Mobile Continuous Deployment')
runs-on: blacksmith-8vcpu-ubuntu-2404
Expand All @@ -23,15 +25,15 @@ jobs:
MOBILE_VERSION_POLICY: fingerprint
steps:
- id: expo-token
name: Check for EXPO_TOKEN
name: Check for EXPO_PREVIEW_TOKEN
env:
EXPO_TOKEN: ${{ secrets.EXPO_TOKEN }}
EXPO_TOKEN: ${{ secrets.EXPO_PREVIEW_TOKEN }}
run: |
if [ -n "$EXPO_TOKEN" ]; then
echo "present=true" >> "$GITHUB_OUTPUT"
else
echo "present=false" >> "$GITHUB_OUTPUT"
echo "EXPO_TOKEN is not available; skipping EAS preview."
echo "EXPO_PREVIEW_TOKEN is not available; skipping EAS preview."
fi
- name: Checkout
Expand Down Expand Up @@ -70,7 +72,7 @@ jobs:
# continuous-deploy-fingerprint still reads `build.project.ownerAccount`.
# Unpin once https://github.com/expo/expo-github-action/issues/358 is fixed.
eas-version: 21.8.0
token: ${{ secrets.EXPO_TOKEN }}
token: ${{ secrets.EXPO_PREVIEW_TOKEN }}
# npm, not pnpm: this only installs eas-cli into the action's own
# tool dir, and pnpm 11 hard-fails that install on dtrace-provider's
# ignored build script (no allowBuilds config outside the repo).
Expand All @@ -80,7 +82,7 @@ jobs:
if: steps.expo-token.outputs.present == 'true'
working-directory: apps/mobile
env:
EXPO_TOKEN: ${{ secrets.EXPO_TOKEN }}
EXPO_TOKEN: ${{ secrets.EXPO_PREVIEW_TOKEN }}
run: |
eas env:pull preview --non-interactive
# EAS Update disables dotenv loading. Keep the downloaded native config
Expand All @@ -99,7 +101,7 @@ jobs:
if: steps.expo-token.outputs.present == 'true'
uses: expo/expo-github-action/continuous-deploy-fingerprint@main
env:
EXPO_TOKEN: ${{ secrets.EXPO_TOKEN }}
EXPO_TOKEN: ${{ secrets.EXPO_PREVIEW_TOKEN }}
# The Expo action otherwise suppresses the EAS command's failure output.
RUNNER_DEBUG: "1"
with:
Expand Down
16 changes: 8 additions & 8 deletions .github/workflows/mobile-eas-production.yml
Original file line number Diff line number Diff line change
Expand Up @@ -97,13 +97,13 @@ jobs:
- id: expo-token
name: Check for EXPO_TOKEN
env:
EXPO_TOKEN: ${{ secrets.EXPO_TOKEN }}
EXPO_TOKEN: ${{ secrets.EXPO_PRODUCTION_TOKEN }}
run: |
if [ -n "$EXPO_TOKEN" ]; then
echo "present=true" >> "$GITHUB_OUTPUT"
else
echo "present=false" >> "$GITHUB_OUTPUT"
echo "EXPO_TOKEN is not available; skipping EAS production job."
echo "EXPO_PRODUCTION_TOKEN is not available; skipping EAS production job."
fi

- id: version_app_token
Expand Down Expand Up @@ -149,7 +149,7 @@ jobs:
uses: expo/expo-github-action@v8
with:
eas-version: latest
token: ${{ secrets.EXPO_TOKEN }}
token: ${{ secrets.EXPO_PRODUCTION_TOKEN }}
# npm, not pnpm: this only installs eas-cli into the action's own
# tool dir, and pnpm 11 hard-fails that install on dtrace-provider's
# ignored build script (no allowBuilds config outside the repo).
Expand All @@ -159,7 +159,7 @@ jobs:
if: steps.expo-token.outputs.present == 'true'
working-directory: apps/mobile
env:
EXPO_TOKEN: ${{ secrets.EXPO_TOKEN }}
EXPO_TOKEN: ${{ secrets.EXPO_PRODUCTION_TOKEN }}
run: |
eas env:pull production --non-interactive
# EAS commands skip dotenv, and the Android fingerprint hashes this
Expand Down Expand Up @@ -244,7 +244,7 @@ jobs:
if: steps.expo-token.outputs.present == 'true' && github.event_name == 'workflow_dispatch' && inputs.mode == 'build'
working-directory: apps/mobile
env:
EXPO_TOKEN: ${{ secrets.EXPO_TOKEN }}
EXPO_TOKEN: ${{ secrets.EXPO_PRODUCTION_TOKEN }}
MOBILE_BUILD_PROFILE: ${{ inputs.profile || 'production' }}
run: eas build --platform ${{ inputs.platform }} --profile "$MOBILE_BUILD_PROFILE" --auto-submit --non-interactive --no-wait

Expand All @@ -255,7 +255,7 @@ jobs:
if: steps.expo-token.outputs.present == 'true' && (github.event_name == 'push' || inputs.mode == 'update')
working-directory: apps/mobile
env:
EXPO_TOKEN: ${{ secrets.EXPO_TOKEN }}
EXPO_TOKEN: ${{ secrets.EXPO_PRODUCTION_TOKEN }}
PLATFORM: ${{ inputs.platform || 'all' }}
run: |
if [ "$PLATFORM" = "all" ]; then platforms="ios android"; else platforms="$PLATFORM"; fi
Expand All @@ -275,7 +275,7 @@ jobs:
if: steps.expo-token.outputs.present == 'true' && github.event_name == 'workflow_dispatch' && inputs.mode == 'update'
working-directory: apps/mobile
env:
EXPO_TOKEN: ${{ secrets.EXPO_TOKEN }}
EXPO_TOKEN: ${{ secrets.EXPO_PRODUCTION_TOKEN }}
MOBILE_BUILD_PROFILE: ${{ inputs.profile || 'production' }}
OTA_MESSAGE: ${{ inputs.message || format('Production OTA ({0})', github.sha) }}
run: |
Expand All @@ -299,7 +299,7 @@ jobs:
if: steps.expo-token.outputs.present == 'true' && github.event_name == 'push'
working-directory: apps/mobile
env:
EXPO_TOKEN: ${{ secrets.EXPO_TOKEN }}
EXPO_TOKEN: ${{ secrets.EXPO_PRODUCTION_TOKEN }}
run: |
failed=0
message="$(git log -1 --pretty=%s | head -c 120) ($(git rev-parse --short=9 HEAD))"
Expand Down
2 changes: 1 addition & 1 deletion AGENTS.md
Original file line number Diff line number Diff line change
Expand Up @@ -91,7 +91,7 @@ The most common defect in this repo is a change that works on the path you teste
An empty database is a bad test. Seed your worktree's `.t3` with a copy of real data instead of pointing at live state:

- The first `vp run dev` in a worktree does this for you when its database is missing and the source is at most 500 MiB. Larger sources warn and dev starts with an empty database. `--no-seed` or `T3CODE_DEV_SEED=0` skips seeding. Manual migration still accepts larger sources and may use substantial disk space before pruning.
- Run `vp run migrate-dev-db` with your dev server stopped to refresh. It rebuilds `<worktree>/.t3/userdata/statev2.sqlite` from a read-only snapshot of `~/.t3/userdata/statev2.sqlite`, the developer's real data. It keeps recent projects and their stopped threads, and drops scheduled tasks, pending work, and auth sessions, so your dev server never runs the developer's agents. Raise `--projects` and `--threads-per-project` for more data.
- Run `vp run migrate-dev-db` with your dev server stopped to refresh. It rebuilds `<worktree>/.t3/userdata/statev2.sqlite` from a read-only snapshot of `~/.t3/userdata/statev2.sqlite`, the developer's real data. It keeps recent projects and their stopped threads, and drops scheduled tasks, pending work, auth sessions, and links to other environments, so your dev server never runs the developer's agents or reaches their other machines. Raise `--projects` and `--threads-per-project` for more data.
- Refresh `statev2.sqlite`, not `state.sqlite`. The server copies the V1 `state.sqlite` only when `statev2.sqlite` is missing.
- Bring `secrets` and `settings.json` only if the flow under test needs them.
- Copy in, never symlink. Data flows one way: into your sandbox, never back out.
Expand Down
2 changes: 1 addition & 1 deletion apps/desktop/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@t3tools/desktop",
"version": "0.1.4",
"version": "0.1.5",
"private": true,
"type": "module",
"main": "dist-electron/boot.cjs",
Expand Down
Loading
Loading