Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
1068 commits
Select commit Hold shift + click to select a range
b9ad3da
fix(server): cap automatic thread continuations and turn them on by d…
t3dotgg Oct 12, 2026
c32ade4
feat(mobile): stock tab bar, glass filter pills, and saved list filte…
juliusmarminge Oct 12, 2026
52f9046
fix(mobile): keep PR surfaces and Android tab selection visible acros…
PixPMusic Oct 12, 2026
4ab4cdf
fix(mobile): keep preview count badges inside the working pill (#18449)
RVZO6 Oct 12, 2026
2e24ec4
fix(mobile): show rounded pull request selection in the sidebar (#18480)
PixPMusic Oct 12, 2026
e688034
feat(web): model options for source control writer and review guide m…
juliusmarminge Oct 12, 2026
19bef8c
ci(mobile): cut a store build when the native fingerprint has no buil…
juliusmarminge Oct 12, 2026
37e2acd
fix(web): terminal colors no longer look washed out (#17168)
psv2522 Oct 12, 2026
d514a8c
refactor(settings): centralize schema-declared secrets and inputs (#1…
juliusmarminge Oct 12, 2026
6f6197c
fix(mobile): restore native scroll-edge effects on forms and PRs (#18…
juliusmarminge Oct 12, 2026
462e7f4
feat(mobile): native-sized pull request action bar (#18527)
juliusmarminge Oct 12, 2026
679b03e
fix(mobile): preserve theme contrast across surfaces and actions (#18…
juliusmarminge Oct 12, 2026
a39fd7b
refactor(mobile): share themed list rows and sections (#18510)
juliusmarminge Oct 12, 2026
9a2b9a2
refactor(mobile): share themed toggle rows in settings (#18511)
juliusmarminge Oct 12, 2026
abc80c8
refactor(mobile): share themed choice rows in settings (#18516)
juliusmarminge Oct 12, 2026
48595c7
fix(server): consolidate browser credential handling (#18509)
juliusmarminge Oct 12, 2026
5fe7568
feat: open T3 Code from a link with a prompt ready to send (#18454)
t3dotgg Oct 12, 2026
8f25cf9
fix(release): drop placeholder allowBuilds entry that broke nightly b…
t3dotgg Oct 12, 2026
eac6ba5
ci: fail PRs on invalid allowBuilds entries in pnpm-workspace.yaml (#…
t3dotgg Oct 12, 2026
f498b35
fix(mobile): menu dismiss taps no longer press the view underneath (#…
juliusmarminge Oct 12, 2026
d83929a
feat(web): one sidebar click updates every machine and provider (#18053)
t3dotgg Oct 12, 2026
5d59e71
fix(release): avoid PowerShell crashes on Windows ARM (#18573)
t3dotgg Oct 12, 2026
b3871d5
fix(server): Forgejo pull requests report their head commit (#18463)
flamboh Oct 12, 2026
a27cf8a
test(provider-acp): terminal kill test passes on Windows hosts (#18450)
AdEx-Partners-DE Oct 12, 2026
58d2532
fix(web): context meter no longer reads 1000k just under a million to…
luke2x Oct 12, 2026
5753207
fix(desktop): avoid Hyprland 0.48–0.50 Wayland color-manager startup …
krankos Oct 12, 2026
7b6d907
fix(mobile): iPhones on iOS 27.2 beta no longer open to a black scree…
shivamhwp Oct 12, 2026
701fc83
fix(mobile): installs skip the Enriched math download again (#18679)
juliusmarminge Oct 12, 2026
9e55228
fix(web): setup wizards follow custom themes (#18725)
SunkenInTime Oct 12, 2026
b821fa0
fix(server): resolve configured PR bases to branch names (#18754)
Yash-Singh1 Oct 12, 2026
0e7346c
fix: expose running terminals and prevent setup install stalls (#18740)
Yash-Singh1 Oct 12, 2026
511d20c
fix(mobile): hide Claude Read image placeholders when previews exist …
Yash-Singh1 Oct 12, 2026
a3c4e9e
fix(gitlab): merge request details report their head commit (#18608)
ScottN-PV Oct 12, 2026
ffb4af8
feat(server): rename built-in models from settings (#18840)
t3dotgg Oct 12, 2026
b03534f
fix(web): Git actions follow the selected thread (#18862)
Yash-Singh1 Oct 13, 2026
979589d
fix(desktop): preserve updater failure causes in diagnostics (#18864)
Yash-Singh1 Oct 13, 2026
34f8458
fix(web): attach dropped threads to pending answers (#18789)
Yash-Singh1 Oct 13, 2026
0179552
fix(web): keep button text stable during press scaling (#18866)
Yash-Singh1 Oct 13, 2026
8110edf
fix(bitbucket): preserve PR head commits for review guides (#18402)
ahilles107 Oct 13, 2026
e2e95a3
fix(server): return null for unresolved optional commands (#18871)
Yash-Singh1 Oct 13, 2026
5d6e419
fix: show computer-use action titles and align app icons (#18865)
Yash-Singh1 Oct 13, 2026
265fb70
fix(server): apply confirmed Claude subagent outcomes (#18778)
Yash-Singh1 Oct 13, 2026
41d86c1
fix(mobile): Browser page no longer logs a duplicate key warning (#18…
tris203 Oct 13, 2026
df26ef9
fix(web): a numeric q in the pull requests URL no longer crashes the …
ScottN-PV Oct 13, 2026
a143fa3
fix(client): T3 Connect clients reconnect once a new tunnel is ready …
shivamhwp Oct 13, 2026
346247b
fix(web): leaving the home page while the app loads no longer bounces…
shivamhwp Oct 13, 2026
1af1386
fix(mobile): attachment images no longer re-download on every reconne…
shivamhwp Oct 13, 2026
e24ea1d
fix(server): a migration id clash stops startup with a clear error in…
shivamhwp Oct 13, 2026
5a65169
fix(server): a thread with an event type from a newer build can still…
shivamhwp Oct 13, 2026
dc19285
fix(server): Codex titles and branch names no longer start the user's…
brycedbjork Oct 13, 2026
06620fa
fix(server): Claude thinking before a tool call stays a collapsed Tho…
maria-rcks Oct 13, 2026
ae7bed6
perf(server): cached branch PR lookups no longer start git processes …
SunkenInTime Oct 13, 2026
80664d5
fix(web): compact merge buttons show when they need a second click (#…
TonybynMp4 Oct 13, 2026
5070a83
fix(mobile): pull requests load from another environment when theirs …
juliusmarminge Oct 13, 2026
540a3e8
perf(web): collect active tool calls without array shifts (#18853)
saphid Oct 13, 2026
e9221e4
fix(web): center the pace icon on the limit card's "left" label (#18580)
akash3444 Oct 13, 2026
6abccc1
fix(web): update everything includes npm-installed servers again (#18…
ScottN-PV Oct 13, 2026
bbd98a5
fix(server): review guides find Bitbucket heads reported by short has…
ahilles107 Oct 13, 2026
e82a1ce
fix(web): scheduled task model picker no longer shifts the dialog (#1…
flamboh Oct 13, 2026
6524a8d
fix(ci): CodeRabbit reviews no longer request changes (#18954)
Yash-Singh1 Oct 13, 2026
98a6246
fix(web): links in HTML renders open like chat links (#18897)
maria-rcks Oct 13, 2026
a47decf
fix(web): remember editor selections before opening folders (#19078)
Yash-Singh1 Oct 13, 2026
42160f2
fix(ci): retry Cursor webhook HTTP 400s on main (#19077)
Yash-Singh1 Oct 13, 2026
8d75232
fix(web): let context handoff details use the available width (#19098)
Yash-Singh1 Oct 13, 2026
05e4f88
fix(server): snoozed threads allow queued automatic wakes (#19099)
Yash-Singh1 Oct 13, 2026
6a68bee
fix(web): merge button fits its label and animates width changes (#18…
flamboh Oct 13, 2026
446be69
fix(web): Cmd+Enter creates the new project while an option is highli…
SunkenInTime Oct 13, 2026
9a9fd2e
fix(pi): queue turn-start prompts when native work is running (#18639)
StiensWout Oct 13, 2026
4d76835
fix(pi): load T3 tool schemas for completion gateways (#18643)
StiensWout Oct 13, 2026
4292720
fix(devices): report agent tool startup failures (#18502)
PixPMusic Oct 13, 2026
8ac4b97
fix(web): settings warn when an environment silently drops a setting …
flamboh Oct 13, 2026
380bba3
fix(desktop): stop unsolicited Messages code autofill (#19118)
StiensWout Oct 13, 2026
c616e16
feat(chat): show pending context handoff when selecting a model (#18369)
maria-rcks Oct 13, 2026
fb8d0fc
fix(server): collect SQLite planner statistics when the database open…
otavio Oct 13, 2026
84cb134
fix(server): failed threads no longer scan every tool item for errors…
realhasanshoaib Oct 13, 2026
6947f0d
fix(web): keep clone folder names readable in the setup project picke…
tachytelicdetonation Oct 13, 2026
a01c48f
fix(composer): allow slash skill search within messages (#19107)
Bil0000 Oct 13, 2026
8c02798
fix(claude): default background text generation to haiku 5.5 (#18781)
maria-rcks Oct 13, 2026
006c508
chore(typecheck): bump tsc-rs to 0.6.0 (#19187)
t3dotgg Oct 13, 2026
3feae3a
fix(server): keep OpenCode timeouts from crashing the error formatter…
tachytelicdetonation Oct 13, 2026
25629a7
feat(server): run delegated tasks in separate worktrees (#19102)
Bil0000 Oct 14, 2026
aef0e9c
fix(git): preserve whitespace in file paths (#12464) (#12465)
Defmon3 Oct 14, 2026
a74ce48
fix(server): stop fsyncing SQLite on every commit so slow disks no lo…
t3dotgg Oct 14, 2026
85272ee
fix(chat): make links in agent questions clickable (#19197)
t3dotgg Oct 14, 2026
91e93a2
fix(usage): show one Antigravity account once, not once per machine (…
t3dotgg Oct 14, 2026
a4e2539
fix(web): Android beta links point to the APK release, not the banned…
shivamhwp Oct 14, 2026
109aaae
fix(client): "Subagent needs input" no longer sticks after the subage…
shivamhwp Oct 14, 2026
dff750b
fix(web): stop question answers from resetting the editor caret (#11337)
shivamhwp Oct 14, 2026
573cec0
fix(web): app shortcuts keep working after clicking into an HTML rend…
maria-rcks Oct 14, 2026
5e5c52b
fix(source-control): keep distinct CI checks with overlapping names (…
Lucenx9 Oct 14, 2026
5e5abc9
fix(server): avoid excessive backtracking in webhook templates (#19160)
Lucenx9 Oct 14, 2026
9c9ae43
fix(web): auto-merge button fits its label and animates width changes…
flamboh Oct 14, 2026
1ce8089
fix(web): scroll terminal output with touch gestures (#11305)
shivamhwp Oct 14, 2026
aba3a6d
feat(web): view visual replies full screen with zoom (#17561)
Bil0000 Oct 14, 2026
11fd54f
fix(web): removing a project no longer opens a new thread for it (#15…
shivamhwp Oct 14, 2026
6002c5c
fix(server): usage hubs with a host-less URL no longer vanish from Li…
shivamhwp Oct 14, 2026
107f602
fix(mobile): search bar animates in on iOS 26+ instead of popping (#1…
juliusmarminge Oct 14, 2026
cb65643
chore(deps): Effect 4.0.4 and OpenCode 2.0.28, dropping the patches t…
juliusmarminge Oct 14, 2026
d765d03
fix(server): a Claude 403 no longer tells you to log in again (#15872)
shivamhwp Oct 14, 2026
4d73e1d
fix(server): persist only changed pull request links (#19248)
juliusmarminge Oct 14, 2026
8b460a3
fix(server): delegate_task explains that supervised runtime modes pau…
saphid Oct 14, 2026
30d1010
fix(server): Claude subagent progress no longer re-stores the unchang…
Gigioxx Oct 14, 2026
8659fcf
fix(server): thread list reads no longer freeze the server on large d…
t3dotgg Oct 14, 2026
3b2ebce
perf(server): streamed events no longer rewrite the whole thread row …
Baker-Harrison Oct 14, 2026
3bbfdc7
docs: close PRs written by Gemini or Muse Wonder (#19286)
t3dotgg Oct 14, 2026
eeaac49
fix: update all no longer runs agents twice or loses background work …
t3dotgg Oct 14, 2026
5705426
fix(server): enforce one database owner and guard update rollback (#1…
maria-rcks Oct 14, 2026
8855a6d
perf(server): reuse stored turn item positions (#19230)
tannerpolley Oct 14, 2026
bac35a2
perf(server): avoid quadratic resource history replay (#18825)
saphid Oct 14, 2026
94ca023
fix(server): repair ownership UUID generation (#19298)
t3dotgg Oct 14, 2026
5bba764
fix(client-runtime): slow config snapshots no longer drop working con…
saphid Oct 14, 2026
173a970
fix(server): bound activity publishes so stalled responses release th…
saphid Oct 14, 2026
4cd0076
perf(shared): cached SQLite statements no longer hold large parameter…
t3dotgg Oct 14, 2026
acb9027
fix(provider-cursor): Cursor text generation no longer leaks SQLite f…
t3dotgg Oct 14, 2026
614b432
fix(server): make SQLite checkpoints durable on macOS (#19304)
t3dotgg Oct 14, 2026
fd9cdae
perf(server): Codex plan streaming no longer commits every token (#19…
t3dotgg Oct 14, 2026
2d14185
fix(server): large file edits no longer store their full diff twice (…
t3dotgg Oct 14, 2026
4f909be
fix(web): settings save again after a stored value fails decode (#19312)
t3dotgg Oct 14, 2026
c8a6768
fix(server): HTML and Markdown attachments no longer fail OpenCode tu…
t3dotgg Oct 14, 2026
a0ea721
fix(server): worktree paths no longer vanish on git before 2.36 (#19315)
t3dotgg Oct 14, 2026
19a67ef
fix(acp): custom models now reach the agent instead of failing to ope…
t3dotgg Oct 14, 2026
233e70b
fix(server): Claude no longer shows unavailable when its health check…
t3dotgg Oct 14, 2026
f372c00
fix(server): stalled OAuth token requests no longer block credential …
t3dotgg Oct 14, 2026
8d11fe1
fix(server): steered Claude turns no longer undercount token usage (#…
t3dotgg Oct 14, 2026
3213a0c
fix(server): closing a Claude session no longer leaves plugin MCP ser…
t3dotgg Oct 14, 2026
e6626ee
fix(client-runtime): T3 Connect link timeouts explain the relay 504 (…
t3dotgg Oct 14, 2026
6edd44f
fix(web): settle shortcut moves to the next thread like the sidebar (…
t3dotgg Oct 14, 2026
3a6ab58
fix(acp): Copilot's default agent no longer disappears from the Agent…
t3dotgg Oct 14, 2026
5fc1c5c
perf(server): SQLite checkpoints no longer block the event loop (#19324)
t3dotgg Oct 14, 2026
d10621d
fix(mobile): incompatible environments now say whether to update the …
t3dotgg Oct 14, 2026
9a5dc75
fix(web): live reasoning stays scrolled to the newest text while it s…
t3dotgg Oct 14, 2026
cd45be3
fix(server): T3 Connect no longer stays down after a network change (…
t3dotgg Oct 14, 2026
4cf8243
fix(clients): host images say when the connection lacks file access (…
t3dotgg Oct 14, 2026
9a01524
fix(clients): a resumed subagent no longer moves the later turn's Wor…
t3dotgg Oct 14, 2026
7ee2839
fix: Claude and Codex no longer time out behind mise wrappers (#19340)
t3dotgg Oct 14, 2026
06a84de
perf(server): turns no longer re-read merged PRs from GitHub (#19344)
t3dotgg Oct 14, 2026
5240897
docs(settings): explain that provider update checks also gate the mod…
fixfon Oct 14, 2026
9fb4ddb
fix(web): an unsaved citation comment survives a question or approval…
t3dotgg Oct 14, 2026
bc95bbd
fix(server): changing Claude effort no longer fails while background …
t3dotgg Oct 14, 2026
3417bc3
fix(server): service updates no longer fail on full disks or large da…
t3dotgg Oct 14, 2026
0425c32
fix(clients): # suggestions include pull requests linked to the threa…
t3dotgg Oct 14, 2026
0ae1091
fix(clients): pairing a switched-off computer again turns it back on …
t3dotgg Oct 14, 2026
ffceb61
fix(cli): t3 triage reports the server's version, not its own, as the…
t3dotgg Oct 14, 2026
40d43a1
fix(client-runtime): a new WSL backend no longer shows Limited permis…
t3dotgg Oct 14, 2026
26c48bb
fix(web): action shortcuts recorded in the browser now save (#19365)
t3dotgg Oct 14, 2026
adb0420
fix(clients): large pasted images no longer break later Claude image …
t3dotgg Oct 14, 2026
519d64f
fix(server): settled and idle-released threads no longer stay Waiting…
t3dotgg Oct 14, 2026
21af72f
perf(client-runtime): merged pull requests are no longer re-read ever…
t3dotgg Oct 14, 2026
90ca6a7
fix(server): new Codex threads no longer miss slow MCP servers' tools…
t3dotgg Oct 14, 2026
6c14293
fix(github): requested teams now show in pull request reviewers (#19375)
t3dotgg Oct 14, 2026
9688e74
fix(ssh): SSH launch no longer picks a port another server answers on…
t3dotgg Oct 14, 2026
f5b5f9d
fix(server): a failed T3 Connect relink no longer leaves a stale mana…
t3dotgg Oct 14, 2026
c08093c
fix(shared): Windows .cmd shims no longer print DEP0190 on every spaw…
t3dotgg Oct 14, 2026
3062701
fix(server): commit and title generation use your custom model when n…
t3dotgg Oct 14, 2026
f99b202
fix(web): T3 Connect settings can repair a link that drifted to publi…
t3dotgg Oct 14, 2026
7fd2ba7
fix(server): failed Claude text generation shows the CLI's own error …
t3dotgg Oct 14, 2026
2cde3f7
fix(web): terminal tells the shell its new width as soon as you relea…
t3dotgg Oct 14, 2026
7c43155
fix(web): keybindings page says to connect an environment when none i…
t3dotgg Oct 14, 2026
0796638
fix(chat): Codex follow-up suggestions show their label instead of ra…
t3dotgg Oct 14, 2026
b037b9a
fix(server): open in editor works over Tailscale SSH without a local …
t3dotgg Oct 14, 2026
8e018ff
fix(server): a deregistered T3 Connect host shows it was removed and …
t3dotgg Oct 14, 2026
cdba9a0
perf(server): idle servers no longer scan every process every 5 secon…
t3dotgg Oct 14, 2026
7d5a429
chore(typecheck): bump tsc-rs to 0.7.0 (#19408)
t3dotgg Oct 14, 2026
df8df0d
fix(server): bound Bitbucket API requests with 30s timeout (#14140)
kvnloo Oct 14, 2026
dd5c7bd
fix(server): new worktrees no longer fail when a background fetch run…
t3dotgg Oct 14, 2026
8414d16
perf(server): thread search runs on the SQLite reader worker (#19382)
bompus Oct 14, 2026
4befc86
perf(server): traces keep ~40% more history and no longer block the e…
t3dotgg Oct 14, 2026
f37f99c
fix(shared): SQLite checkpoints no longer fall back to the main threa…
t3dotgg Oct 14, 2026
7371925
perf(server): unchanged node updates no longer write to SQLite (#19429)
t3dotgg Oct 14, 2026
36f91c4
fix(ssh): reconnecting keeps the remote server and its agents running…
t3dotgg Oct 14, 2026
28732b4
feat(observability): SQL spans show lock wait and connection; stalls …
t3dotgg Oct 14, 2026
d0a73b5
fix(server): threads woken by notifications no longer load their whol…
t3dotgg Oct 14, 2026
7ac952c
fix(server): worktree cleanup no longer runs sweeps back to back (#19…
t3dotgg Oct 14, 2026
cae6c66
fix(server): only Claude progress updates before a tool call show as …
maria-rcks Oct 14, 2026
ce6f8ce
fix(pr): keep known state in sync across controls (#18408)
maria-rcks Oct 14, 2026
7897a69
fix(web): review summary only says optional when it is (#18451)
flamboh Oct 14, 2026
e093789
fix(web): subagent lists in the composer banner no longer start lines…
flamboh Oct 14, 2026
cb395ee
fix(web,mobile): pull request filters no longer offer the Scratch fol…
flamboh Oct 14, 2026
464fad9
fix(web,mobile): pull request project filter follows the sidebar orde…
flamboh Oct 14, 2026
bf8ffe8
feat(settings): inactivity auto-settle can keep threads with a PR (#1…
tris203 Oct 14, 2026
e47bfe4
fix(server): Claude works next to an enterprise managed-mcp.json (#18…
SunkenInTime Oct 14, 2026
348f217
fix(web,mobile): muse code uses meta's official blue logo (#19562)
maria-rcks Oct 14, 2026
aa81d12
fix(desktop): import CA trust variables from the login shell (#19604)
maria-rcks Oct 14, 2026
78f4b69
fix(server): preview copy only forwards text from the viewer's copy k…
maria-rcks Oct 14, 2026
f87dd14
fix(muse): Supervised threads ask before commands again (#19558)
maria-rcks Oct 14, 2026
22af947
fix(server): restarts no longer stall on old subagent result deliveri…
t3dotgg Oct 14, 2026
f4df794
fix(clients): a thread comes back when its subagent needs approval (#…
t3dotgg Oct 14, 2026
52ffe0c
fix(usage): cold usage scans no longer stall the server (#19446)
t3dotgg Oct 14, 2026
39aeaf4
fix(server): "Always allow this session" stops Codex asking for every…
t3dotgg Oct 14, 2026
7bdfed9
fix(web): keep vertical cursor stops outside styled markers (#19651)
Yash-Singh1 Oct 14, 2026
5a4e998
fix(web): mermaid code toggle stays in place when switching views (#1…
maria-rcks Oct 14, 2026
40a7908
fix(server): Reveal in File Explorer and browser launches work on Win…
t3dotgg Oct 14, 2026
742c229
fix(server): GitHub App tokens can merge and use other write actions …
shivamhwp Oct 14, 2026
ab3a3cd
perf(server): commands on busy threads stop decoding thousands of fin…
t3dotgg Oct 15, 2026
ec1313c
fix(server): use workspace-scoped Bitbucket permissions API (#10984)
RealDoc06 Oct 15, 2026
55dfc5f
fix(composer): read dropped threads across environments (#15210)
Bil0000 Oct 15, 2026
755accf
test(web): remove duplicate change request parser tests (#13591)
t3-code[bot] Oct 15, 2026
924fb0c
fix(server): a delegated task's question ends the parent's blocking w…
flamboh Oct 15, 2026
fdacb3a
fix(server): a delegated task's question now wakes its parent agent (…
flamboh Oct 15, 2026
c814e51
fix(server): a cancelled delegated task no longer shows its child's q…
flamboh Oct 15, 2026
21bedfb
feat(storage): clean up settled thread worktrees (#15208)
Bil0000 Oct 15, 2026
e536bfd
feat(web,mobile): waiting status shows a dot-dashed icon and a timer …
maria-rcks Oct 15, 2026
339179f
feat(pr): delete branches after merge or close (#19257)
Bil0000 Oct 15, 2026
2d31acb
fix(web): the sidebar no longer keeps old renders alive (#19852)
t3dotgg Oct 15, 2026
313f23e
fix(web): update everything no longer waits on slow servers, and show…
t3dotgg Oct 15, 2026
45b5993
fix(web): text generation no longer falls back to the expensive flags…
t3dotgg Oct 15, 2026
cd34df5
feat(web): setting to open pull request links on GitHub (#19719)
t3dotgg Oct 15, 2026
00cdceb
fix(web): middle-click opens pull requests in the browser, like cmd+c…
t3dotgg Oct 15, 2026
0e1431f
fix(web): the chat view and composer no longer keep old renders alive…
t3dotgg Oct 15, 2026
0b68a4a
fix(server): steering no longer ends running subagents (#19210)
shivamhwp Oct 15, 2026
e6bbfdb
fix(web,mobile): sent queued messages say "from queue", not "queued" …
shivamhwp Oct 15, 2026
42da166
fix(server): OTLP exports say which machine and build they came from …
t3dotgg Oct 15, 2026
98bc998
fix(prs): bound refreshes by each tracker read (#19403)
Bil0000 Oct 15, 2026
d09a9ea
fix(mobile): new threads no longer get stuck on Starting (#15870)
nekohasekai Oct 15, 2026
38d9760
fix(mobile): agent-spawned threads can be mentioned from the @ picker…
lnieuwenhuis Oct 15, 2026
d2f2b7c
fix(mobile): pull request lists fill the available scroll viewport (#…
camchis Oct 15, 2026
2d94372
fix(server): Cursor threads in Auto use Cursor's Auto-review (#19712)
owenferg Oct 15, 2026
52a769d
fix(web): text selection keeps going under the turn minimap (#16748)
robertnisipeanu Oct 15, 2026
895354e
fix(server): Antigravity installs on Windows ARM (#18472)
mweinbach Oct 15, 2026
6e5322b
perf(server): cut fff-node FFI marshaling overhead on large workspace…
mweinbach Oct 15, 2026
cde9cae
perf(server): replace Windows PowerShell port polling with netstat (#…
mweinbach Oct 15, 2026
364f508
fix(server): Windows Codex install uses system tar and retries rename…
mweinbach Oct 15, 2026
76cb251
fix(providers): fall back to windows-x86_64 ACP binaries on Windows o…
mweinbach Oct 15, 2026
e77a48e
fix(server): fail runs whose provider stream ends without a terminal …
Alb11747 Oct 15, 2026
3ff452b
fix(server): a dropped HTTP/2 connection no longer crashes the server…
Mnigos Oct 15, 2026
97f717a
fix(server): Stop re-probing hosting CLIs for unrecognized hosts (#19…
mwolson Oct 15, 2026
26fffe5
fix(mobile): Android nested list markers no longer overlap their text…
juliusmarminge Oct 15, 2026
c079503
fix(mobile): release iOS audio session after video playback (#18539)
juliusmarminge Oct 15, 2026
4036e18
fix(web): keep wrapped split diffs from jumping while scrolling (#20022)
juliusmarminge Oct 15, 2026
ede3f2d
fix(web): model picker search lists newest models first (#18494)
c-ehrlich Oct 15, 2026
559c4b1
fix(acp): one malformed session update no longer ends the session (#2…
juliusmarminge Oct 15, 2026
f798cb2
perf(web): HTML renders show a layout skeleton and reuse cached pages…
maria-rcks Oct 15, 2026
81493ef
chore: change product branding from Alpha to Beta (#20032)
juliusmarminge Oct 15, 2026
90f4685
Merge upstream v0.1.0 into the Dulli fork
YJJosh Oct 18, 2026
4f893bd
test(server): Pi usage source test passes on macOS temp paths
YJJosh Oct 18, 2026
27e5a0c
feat: Dulli provider runs the fork's Pi next to upstream's Pi
YJJosh Oct 18, 2026
409a14b
feat(dulli): subagents, background terminals, background threads and …
YJJosh Oct 18, 2026
f627acb
chore: Workler clones link provider-dulli dependencies
YJJosh Oct 18, 2026
2c982a1
fix(dulli): share terminal chats with the unconfigured default instance
YJJosh Oct 18, 2026
11d1a7d
perf(server): collapse repeated header-derived usage roots before pro…
YJJosh Oct 18, 2026
aef3cda
fix(dulli): keep final answers, old subagent history and detached chi…
YJJosh Oct 19, 2026
1464a2d
fix(dulli): keep child transcripts out of parent timelines
YJJosh Oct 19, 2026
37fe761
fix(mobile): keep Dulli delegated threads navigable
YJJosh Oct 19, 2026
da5d900
fix(server): a broken Dulli subagent history no longer blocks thread …
YJJosh Oct 19, 2026
cff9751
fix(dulli): an interrupted reply after commentary keeps its footer an…
YJJosh Oct 19, 2026
9d914d3
fix(dulli): subagent transcripts no longer reuse message ids or repea…
YJJosh Oct 19, 2026
c774c5a
fix(ci): the fork no longer runs upstream's hourly Android APK mirror
YJJosh Oct 19, 2026
489c25f
fix(ci): tests and lint follow the new Dulli provider
YJJosh Oct 19, 2026
80e13da
fix(ci): provider registry tests turn off the default Dulli provider too
YJJosh Oct 19, 2026
66eb590
fix(web): composer trait pickers no longer show the brain icon
YJJosh Oct 19, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
The diff you're trying to view is too large. We only load the first 3000 changed files.
5 changes: 5 additions & 0 deletions .agents/skills/contribution-triage/SKILL.md
Original file line number Diff line number Diff line change
Expand Up @@ -109,6 +109,11 @@ trusted policy and reassess changed submission evidence; neither example grants

## Apply the outcome

Do not automatically close a PR if a maintainer in the trusted `TRIAGE_EXEMPTIONS.td` list has
commented or submitted a review, including on earlier heads, or if `triage:keep-open` is present.
Leave protected PRs open for maintainer decision. This does not grant an author exemption,
eligibility, or review approval.

In enforcement mode, execute the applicable outcome within the established scope, using the state and
retry safeguards below. In a dry run or without the required authority, prepare the same action and
comment text but do not write to GitHub. Keep the eligibility finding separate from action completion.
Expand Down
23 changes: 7 additions & 16 deletions .agents/skills/test-t3-app/references/sqlite-fixtures.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,9 @@ Load this reference only when inspecting or seeding local T3 state directly.

## Select the correct database

When `--base-dir` or `--home-dir` is explicit, runtime state lives under `<base-dir>/userdata` and the database path is `<base-dir>/userdata/state.sqlite`. The `<base-dir>/dev` state directory is only the fallback for an implicit development home, preventing an ordinary `vp run dev` from touching production state.
When `--base-dir` or `--home-dir` is explicit, runtime state lives under `<base-dir>/userdata` and the database path is `<base-dir>/userdata/statev2.sqlite`. The `<base-dir>/dev` state directory is only the fallback for an implicit development home, preventing an ordinary `vp run dev` from touching production state.

The server copies the V1 `state.sqlite` into `statev2.sqlite` only when `statev2.sqlite` is missing. After the first start, edits to `state.sqlite` change nothing.

Start the target runtime once before seeding so all migrations have run. Use an isolated base directory. Stop the server before writes to avoid racing application state or an active projection.

Expand All @@ -23,7 +25,7 @@ Inspect current columns before writing a fixture:
```bash
node apps/server/scripts/t3-sqlite-state.ts query \
--base-dir <base-dir> \
--sql "PRAGMA table_info(projection_threads)"
--sql "PRAGMA table_info(orchestration_v2_projection_threads)"
```

Apply a SQL fixture from a file:
Expand All @@ -38,21 +40,10 @@ Use one statement per invocation for both `query` and `exec`; the helper wraps w

## Seed projection data carefully

The web UI primarily reads these projection tables:

- `projection_projects`
- `projection_threads`
- `projection_thread_messages`
- `projection_thread_activities`
- `projection_thread_sessions`
- `projection_turns`
- `projection_pending_approvals`
- `projection_thread_proposed_plans`

Inspect `PRAGMA table_info(<table>)` and the current migrations under `apps/server/src/persistence/Migrations/` before constructing inserts. Keep identifiers unique, timestamps as ISO strings, JSON columns valid, and related project/thread/turn IDs consistent.
Clients read projects from `projection_projects` and everything else from the `orchestration_v2_projection_*` tables: threads, runs, messages, turn items, runtime requests, plans, and provider sessions. The older `projection_thread*` tables hold V1 history, which the server imports once per thread at startup; later edits there do not reach the UI.

For a substantial current example, inspect `seedDatabase` in `scripts/mobile-showcase-environment.ts`. Adapt its column set to the target database instead of assuming copied SQL remains current.
Most V2 rows carry a `payload_json` that must decode against the schemas in `packages/contracts/src/orchestrationV2.ts`. The safest start is a row the app wrote itself: create a thread through the UI, copy its rows, and edit them. Keep identifiers unique, timestamps as ISO strings, and related project, thread, and run IDs consistent.

Direct projection writes are appropriate for ephemeral visual states, edge-case counts, long titles, activity lists, and similar UI fixtures. They do not create a coherent orchestration event history. Do not modify `orchestration_events` unless the test specifically exercises projector internals, and do not use direct projection writes to claim backend business behavior works.
Direct projection writes are appropriate for ephemeral visual states, edge-case counts, long titles, long timelines, and similar UI fixtures. They do not create a coherent event history. Leave the event log (`orchestration_events`) unchanged, and do not use direct projection writes to claim backend business behavior works.

Use the app's commands or APIs for behavior tests. Use `node apps/server/src/bin.ts auth ...` for auth state rather than editing `auth_pairing_links` or `auth_sessions`.
44 changes: 44 additions & 0 deletions .coderabbit.config.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
import { defineConfig, type CodeRabbitContext } from "@coderabbitai/config";

// Org members and collaborators can approve their own pull requests.
const UNGATED_AUTHORS = new Set(["OWNER", "MEMBER", "COLLABORATOR"]);
const isGated = ({ pr }: CodeRabbitContext) => !UNGATED_AUTHORS.has(pr?.authorAssociation ?? "");

export default defineConfig((ctx) => ({
reviews: {
high_level_summary: false,
review_status: false,
request_changes_workflow: false,
allow_author_approval: !isGated(ctx),
auto_review: {
enabled: true,
},
pre_merge_checks: {
docstrings: { mode: "off" },
override_requested_reviewers_only: isGated(ctx),
},
path_filters: [
// Vendored read-only reference checkouts of upstream Effect and Alchemy
// (see scripts/lib/reference-repos.ts). Nothing imports from them.
"!.repos/**",
],
path_instructions: [
{
path: "{apps,packages,infra}/**/*.ts",
instructions: "Hold changed code to the rules in docs/internals/effect-services.md.",
},
{
path: "apps/web/src/**/*.{tsx,css}",
instructions: "Hold changed code to the rules in docs/internals/web-ui.md.",
},
],
},
knowledge_base: {
code_guidelines: {
filePatterns: [
{ files: "docs/internals/effect-services.md", applyTo: "{apps,packages,infra}/**/*.ts" },
{ files: "docs/internals/web-ui.md", applyTo: "apps/web/src/**/*.{tsx,css}" },
],
},
},
}));
9 changes: 0 additions & 9 deletions .coderabbit.yaml

This file was deleted.

2 changes: 1 addition & 1 deletion .cursor/rules/cursor-cloud.mdc
Original file line number Diff line number Diff line change
Expand Up @@ -69,4 +69,4 @@ Gradle auto-downloads any additional pinned SDK packages on demand.
## Known flaky tests (unrelated to setup)

- `apps/server/src/git/GitManager.test.ts` (cross-repo PR metadata, can time out at 12s).
- `apps/server/src/provider/Layers/ProviderRegistry.test.ts` (codex binaryPath re-probe ordering).
- `apps/server/src/provider/ProviderRegistry.test.ts` (codex binaryPath re-probe ordering).
2 changes: 1 addition & 1 deletion .github/ISSUE_TEMPLATE/via-triage.yml
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,7 @@ body:
id: version
attributes:
label: Version
description: Installed t3 version or commit.
description: Version the bug happened on (not the `t3 triage` CLI version), or unknown.
placeholder: 0.0.33
validations:
required: true
Expand Down
3 changes: 3 additions & 0 deletions .github/TRIAGE_EXEMPTIONS.td
Original file line number Diff line number Diff line change
@@ -1,6 +1,9 @@
# Explicit contribution-triage exemptions; independent of VOUCHED.td.
# Syntax: github:username (one entry per line; no denouncements).
# Keep entries sorted alphabetically. Only the trusted upstream main copy applies.
github:bmdavis419
github:juliusmarminge
github:maria-rcks
github:markflorkowski
github:t3dotgg
github:Yash-Singh1
1 change: 1 addition & 0 deletions .github/VOUCHED.td
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@ github:cursoragent
github:D3OXY
github:dbalders
github:eggfriedrice24
github:esthor
github:extoci
github:f-trycua
github:flamboh
Expand Down
189 changes: 189 additions & 0 deletions .github/scripts/mirror-play-apk.cjs
Original file line number Diff line number Diff line change
@@ -0,0 +1,189 @@
// Mirrors the newest build on a Google Play track to a rolling GitHub
// prerelease as a universal APK. Play generates and signs that APK from the
// uploaded bundle with the app signing key, so it carries the same signature
// as the Play Store install. Run by .github/workflows/mobile-android-apk.yml.
const { execFileSync } = require("node:child_process");
const crypto = require("node:crypto");
const fs = require("node:fs");
const os = require("node:os");
const path = require("node:path");
const { Readable } = require("node:stream");
const { pipeline } = require("node:stream/promises");

const PLAY_API = "https://androidpublisher.googleapis.com/androidpublisher/v3/applications";

function requireEnv(name) {
const value = process.env[name];
if (!value) throw new Error(`${name} is required.`);
return value;
}

// Service account key -> OAuth access token via a self-signed JWT grant.
async function playAccessToken(key) {
const now = Math.floor(Date.now() / 1000);
const encode = (value) => Buffer.from(JSON.stringify(value)).toString("base64url");
const unsigned = `${encode({ alg: "RS256", typ: "JWT" })}.${encode({
iss: key.client_email,
scope: "https://www.googleapis.com/auth/androidpublisher",
aud: key.token_uri,
iat: now,
exp: now + 600,
})}`;
const signature = crypto.sign("RSA-SHA256", Buffer.from(unsigned), key.private_key);
const response = await fetch(key.token_uri, {
method: "POST",
body: new URLSearchParams({
grant_type: "urn:ietf:params:oauth:grant-type:jwt-bearer",
assertion: `${unsigned}.${signature.toString("base64url")}`,
}),
});
if (!response.ok) {
throw new Error(`Google token exchange failed: ${response.status} ${await response.text()}`);
}
return (await response.json()).access_token;
}

async function play(token, method, url) {
const response = await fetch(url, { method, headers: { authorization: `Bearer ${token}` } });
if (!response.ok) {
throw new Error(`${method} ${url} failed: ${response.status} ${await response.text()}`);
}
return response;
}

// Highest version code the track serves, with its release name. Play names a
// release after the bundle's versionName unless the uploader sets one. This
// endpoint reads without opening an edit; an edit would invalidate any open
// EAS Submit edit made with the same service account.
async function newestTrackBuild(token, appUrl, trackName) {
const { releases = [] } = await (
await play(token, "GET", `${appUrl}/tracks/${trackName}/releases`)
).json();
let newest;
for (const release of releases) {
if (release.releaseLifecycleState !== "RELEASE_LIFECYCLE_STATE_PUBLISHED") continue;
for (const { versionCode } of release.activeArtifacts ?? []) {
if (!newest || versionCode > newest.versionCode) {
newest = { versionCode, versionName: release.releaseName || String(versionCode) };
}
}
}
return newest;
}

function gh(...args) {
return execFileSync("gh", args, { encoding: "utf8", stdio: ["ignore", "pipe", "inherit"] });
}

function readRelease(tag) {
try {
return JSON.parse(gh("release", "view", tag, "--json", "assets,body"));
} catch {
return undefined;
}
}

// Downloads the build's universal APK and uploads it, creating the release on
// first use. Returns false when Play lists no universal APK, which happens
// while it is still processing a fresh upload.
async function uploadApk({ token, appUrl, build, tag, apkName, notes, release }) {
const generated = await (
await play(token, "GET", `${appUrl}/generatedApks/${build.versionCode}`)
).json();
// One entry per app signing key. More than one means a key rotation, so
// fail rather than guess which signature testers should get.
const universal = (generated.generatedApks ?? []).filter((entry) => entry.generatedUniversalApk);
if (universal.length === 0) return false;
if (universal.length > 1) {
throw new Error(`Play returned ${universal.length} universal APKs, one per signing key.`);
}
const { downloadId } = universal[0].generatedUniversalApk;

const apkPath = path.join(fs.mkdtempSync(path.join(os.tmpdir(), "apk-")), apkName);
const download = await play(
token,
"GET",
`${appUrl}/generatedApks/${build.versionCode}/downloads/${encodeURIComponent(downloadId)}:download?alt=media`,
);
await pipeline(Readable.fromWeb(download.body), fs.createWriteStream(apkPath));

if (!release) {
// Prerelease with a non-v tag: release.yml, the desktop updater, the CLI,
// and the marketing site's latest-release lookup all ignore it.
gh(
"release",
"create",
tag,
"--prerelease",
"--latest=false",
"--title",
"T3 Code for Android (nightly)",
"--notes",
notes,
);
}
// --clobber replaces an asset a failed upload left behind.
gh("release", "upload", tag, apkPath, "--clobber");
return true;
}

async function main() {
const packageName = requireEnv("PACKAGE_NAME");
const trackName = requireEnv("PLAY_TRACK");
const tag = requireEnv("RELEASE_TAG");
const key = JSON.parse(requireEnv("GOOGLE_PLAY_SERVICE_ACCOUNT_JSON"));
const summary = (line) =>
process.env.GITHUB_STEP_SUMMARY &&
fs.appendFileSync(process.env.GITHUB_STEP_SUMMARY, `${line}\n`);

const token = await playAccessToken(key);
const appUrl = `${PLAY_API}/${packageName}`;
const build = await newestTrackBuild(token, appUrl, trackName);
if (!build) {
console.log(`The ${trackName} track has no live release.`);
return;
}

const safeName = build.versionName.replace(/[^0-9A-Za-z.]+/g, "-").replace(/^-|-$/g, "");
const apkName = `t3code-android-${safeName}-${build.versionCode}.apk`;
const notes = [
`T3 Code for Android that works with nightly servers, mirrored from the Google Play ${trackName} track. Current build: ${build.versionName} (${build.versionCode}).`,
"",
"The Play Store release can't connect to a nightly server yet. Install this APK if you can't join the Play testing group. Only the newest build is kept here.",
].join("\n");

const release = readRelease(tag);
const assets = release?.assets ?? [];
// A failed upload can leave an empty asset under the final name.
const published = assets.some(
(asset) => asset.name === apkName && asset.state === "uploaded" && asset.size > 0,
);
if (published) {
console.log(`${apkName} is already published.`);
} else if (await uploadApk({ token, appUrl, build, tag, apkName, notes, release })) {
console.log(`Published ${apkName}.`);
summary(`:white_check_mark: Published \`${apkName}\` to the \`${tag}\` release.`);
} else {
// The next run retries.
console.log(`Play lists no universal APK for ${build.versionCode}.`);
summary(
`:hourglass: Play lists no universal APK for ${build.versionName} (${build.versionCode}).`,
);
return;
}

// Reconciled on every run so an interrupted cleanup finishes on the next one.
for (const stale of assets) {
if (stale.name.endsWith(".apk") && stale.name !== apkName) {
gh("release", "delete-asset", tag, stale.name, "--yes");
}
}
if (release && release.body.replace(/\r\n/g, "\n").trim() !== notes) {
gh("release", "edit", tag, "--notes", notes);
}
}

main().catch((error) => {
console.error(error);
process.exit(1);
});
Loading
Loading