Skip to content
This repository was archived by the owner on May 4, 2026. It is now read-only.
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
278 commits
Select commit Hold shift + click to select a range
9403429
Make server settings authoritative for runtime behavior (#1421)
juliusmarminge Mar 26, 2026
add5f34
Add Claude context window selection support (#1422)
juliusmarminge Mar 26, 2026
648f067
Add VS Code Insiders and VSCodium to Open In editor picker (#1392)
nassimna Mar 27, 2026
02989fe
fix(web): improve chat header badge and title flex distribution (#1309)
GuilhermeVieiraDev Mar 27, 2026
d8a485e
Support `gh pr checkout` pull request references (#1457)
juliusmarminge Mar 27, 2026
fb72607
fix(claude): avoid resetting the Claude model on every turn (#1466)
harshit97 Mar 27, 2026
59a383e
Add Effect.fn refactor checklist (#1476)
juliusmarminge Mar 28, 2026
83eb396
fix(threads): Keep active-turn runtime errors from ending sessions (#…
Snowy7 Mar 28, 2026
e08cea3
Improve drain semantics via STM in `DrainableWorker` (#1474)
IMax153 Mar 28, 2026
23b3f0c
Refactor Codex adapter lifecycle helpers (#1478)
juliusmarminge Mar 28, 2026
d2e6c82
Skip a unit test that is using a bash script on Windows (#1490)
Alexx999 Mar 28, 2026
42ea7cf
Detect command not found when checking codex/claude CLI on Windows (#…
Alexx999 Mar 28, 2026
80a176f
Add eol=lf to .gitattributes for Windows users (#1491)
Alexx999 Mar 28, 2026
48196e6
fix(web): linkify Windows C:/ paths in terminal output (#1483)
MaansenV Mar 28, 2026
f0cdaf9
Add thread archiving and settings navigation (#1359)
shivamhwp Mar 28, 2026
3e2df5a
Normalize typed provider runtime ingestion (#1475)
juliusmarminge Mar 28, 2026
5851b8a
fix: trust node-pty install scripts on linux (#1451)
smalitobules Mar 28, 2026
32c1f98
Fix Linux desktop Codex CLI detection at startup (#1100)
Ryan-D-Gast Mar 28, 2026
61f9830
fix(web): allow switching away from Ultrathink without manual prompt …
Marve10s Mar 28, 2026
0429896
Fix server fallback to direct fd read on /proc/self/fd failure (#1488)
rishi-chauhan Mar 28, 2026
52fa6a7
fix(desktop): ensure all windows are destroyed before launching the N…
danielss-dev Mar 28, 2026
ce463a5
fix(web): add project path action to sidebar menu (#1436)
FllipEis Mar 28, 2026
73b2f25
fix: add noopener to external chat markdown links (#1315)
sabraman Mar 28, 2026
c426452
Tighten settings nav and add Escape back navigation (#1503)
juliusmarminge Mar 28, 2026
f4617e7
feat: add mock update server (#1180)
nmggithub Mar 28, 2026
5b1d5c1
fix(ci): use whitespace-insensitive PR size diff (#1500)
maria-rcks Mar 28, 2026
5210a83
Fix sidebar thread panel weird states. (#1497)
shivamhwp Mar 28, 2026
64d21bd
fix: Prevent sidebar project dragging when using macos control+click …
Noojuno Mar 28, 2026
33773ff
Harden Claude stream exit handling (#1504)
juliusmarminge Mar 28, 2026
5513845
feat(threads): auto-generate first-turn thread titles (#1375)
maria-rcks Mar 29, 2026
58ba4f1
Add keyboard shortcuts for jumping to sidebar threads (#1456)
t3dotgg Mar 29, 2026
afc807a
Add new GitHub users to VOUCHED.td (#1508)
juliusmarminge Mar 29, 2026
9e60597
Truncate oversized git diffs instead of failing (#1499)
juliusmarminge Mar 29, 2026
f82bae1
Update system overhaul (#1505)
shivamhwp Mar 29, 2026
5462d50
chore(release): prepare v0.0.15
t3-code[bot] Mar 29, 2026
7f3387a
Annotate Git core Effect.fn helpers (#1511)
juliusmarminge Mar 29, 2026
00f3efb
Make DrainableWorker drain off outstanding count (#1514)
juliusmarminge Mar 29, 2026
a1c428b
Refactor projection pipeline side effects (#1512)
juliusmarminge Mar 29, 2026
bc1024c
Inline sqlite error classification (#1515)
juliusmarminge Mar 29, 2026
a60daa1
Wrap orchestration reactor starts in Effect.fn (#1513)
juliusmarminge Mar 29, 2026
40e7dbd
Fix for broken Codex model selection for 'Text Generation Model' (#1543)
Alexx999 Mar 29, 2026
d5f2333
Show hidden thread status in sidebar (#1517)
juliusmarminge Mar 29, 2026
7b676b7
fix: show empty project thread state in sidebar (#1546)
shivamhwp Mar 29, 2026
bf9c828
Make provider model lists dynamic based on auth context (#1556)
juliusmarminge Mar 30, 2026
fc65070
fix(windows): hover-effect-fix-in-the-branch-ui (#1559)
shivamhwp Mar 30, 2026
d417819
fix(web): preserve scroll when collapsing large changed-files trees (…
CodeZeno Mar 30, 2026
792ad4b
Fix model settings getting stuck (#1538)
Alexx999 Mar 30, 2026
6358444
fix(web): Fix duplicate highlight in composer slash command menu (#1445)
AbdulelahHajjar Mar 30, 2026
32dca3b
[codex] debounce thread jump hint pills (#1526)
juliusmarminge Mar 30, 2026
5b58f74
fix(desktop): default confirm dialog selection to "No" (#1400)
Efroim-Propel Mar 30, 2026
4a4795e
Scroll active item into view in composer menu (#1557)
naufalw Mar 30, 2026
59f23d7
Show archive action on hover with confirm focus (#1561)
juliusmarminge Mar 30, 2026
0bb787b
Clarify provider setup in README (#1406)
Ivorisnoob Mar 30, 2026
145ddfc
Document T3 Code install methods (#1564)
juliusmarminge Mar 30, 2026
f47c1f1
Update README.md (#1565)
juliusmarminge Mar 30, 2026
8622b95
Refactor terminal manager onto Effect runtime (#1525)
juliusmarminge Mar 30, 2026
6f51725
refactor(web): remove redundant add-project cancel button (#1302)
UtkarshUsername Mar 30, 2026
0ea6391
Refactor web orchestration sync to incremental events and isolated re…
juliusmarminge Mar 30, 2026
48fc85e
Bump Effect catalog dependencies (#1594)
juliusmarminge Mar 30, 2026
d303ac3
Replace wait-on with internal desktop resource polling (#1600)
juliusmarminge Mar 31, 2026
2d03847
Extract project/workspace related functionality to Effect services (#…
juliusmarminge Mar 31, 2026
aa5521d
Map fatal Codex stderr to runtime errors (#1615)
juliusmarminge Mar 31, 2026
19eb9e7
fix(server): parse git branches correctly when column.ui is enabled (…
EDM115 Apr 1, 2026
0bc94bc
fixing the input ui at certain endpoints causing the button to overfl…
shivamhwp Apr 1, 2026
0a88719
Improve Linux desktop identity packaged builds (#1201)
Chrono-byte Apr 1, 2026
64d6938
fix(web): consume plans on new-thread implementation (#1203)
UtkarshUsername Apr 1, 2026
d8aa2f8
chore: effect rpc and layer based startup (#929)
juliusmarminge Apr 1, 2026
0ac59d5
Feat: Added Trae IDE support for opening current working directory (#…
lnieuwenhuis Apr 1, 2026
1c3fa67
[codex] migrate Effect.fn in apps/server/src/checkpointing/Layers/Che…
juliusmarminge Apr 1, 2026
15f0be8
[codex] migrate Effect.fn in apps/server/src/checkpointing/Layers/Che…
juliusmarminge Apr 1, 2026
c542ce3
[codex] migrate Effect.fn in apps/server/src/git/Layers/ClaudeTextGen…
juliusmarminge Apr 1, 2026
3488ca3
[codex] migrate Effect.fn in apps/server/src/persistence/Migrations.t…
juliusmarminge Apr 1, 2026
a58290e
[codex] migrate Effect.fn in apps/server/src/git/Layers/CodexTextGene…
juliusmarminge Apr 1, 2026
ddffdfc
[codex] migrate Effect.fn in apps/server/src/telemetry/Layers/Analyti…
juliusmarminge Apr 1, 2026
6d9b21c
[codex] migrate Effect.fn in apps/server/src/provider/Layers/CodexPro…
juliusmarminge Apr 1, 2026
67ca528
[codex] migrate Effect.fn in apps/server/src/provider/Layers/ClaudePr…
juliusmarminge Apr 1, 2026
a9e5a84
[codex] migrate Effect.fn in apps/server/src/provider/Layers/Provider…
juliusmarminge Apr 1, 2026
c6ff7c0
[codex] migrate Effect.fn in apps/server/src/provider/makeManagedServ…
juliusmarminge Apr 1, 2026
9f6686a
[codex] migrate Effect.fn in apps/server/src/persistence/Layers/Sqlit…
juliusmarminge Apr 1, 2026
d15075b
[codex] migrate Effect.fn in apps/server/src/provider/Layers/EventNdj…
juliusmarminge Apr 1, 2026
80b282e
[codex] migrate Effect.fn in apps/server/src/provider/Layers/Provider…
juliusmarminge Apr 1, 2026
556a195
[codex] migrate Effect.fn in apps/server/src/provider/Layers/Provider…
juliusmarminge Apr 1, 2026
b9c7ea0
[codex] migrate Effect.fn in apps/server/src/orchestration/Layers/Pro…
juliusmarminge Apr 1, 2026
9132c37
[codex] migrate Effect.fn in apps/server/src/persistence/NodeSqliteCl…
juliusmarminge Apr 1, 2026
dd89d5c
perf(server): add targeted projection queries (#1646)
juliusmarminge Apr 1, 2026
4963fcc
perf(server): avoid thread-wide scans for message projection (#1647)
juliusmarminge Apr 1, 2026
823d69f
perf(server): bootstrap engine from persisted projections (#1648)
juliusmarminge Apr 1, 2026
801dfe5
[codex] fix git remote parsing, PR resolution, and sidebar PR state (…
juliusmarminge Apr 1, 2026
b92c78f
Scope git query invalidation by cwd (#1670)
juliusmarminge Apr 1, 2026
ae6f971
Normalize sidebar thread state for faster updates (#1668)
juliusmarminge Apr 1, 2026
867cf4c
fix: stabilize messages timeline virtualization (#1664)
juliusmarminge Apr 2, 2026
60f7ae8
Add copy-to-clipboard action for proposed plan card (#1620)
juliusmarminge Apr 2, 2026
9ea443d
Split PR creation into granular progress stages (#1694)
juliusmarminge Apr 2, 2026
5ce5472
Scope git action progress toasts to the originating thread (#1675)
juliusmarminge Apr 2, 2026
915a054
Paginate git branch listing and search results (#1691)
juliusmarminge Apr 2, 2026
ae3ea39
Clicking logo now navigates to threads (#1617)
waLLxAck Apr 2, 2026
d2822a8
fix: use explicit refspec for push in worktrees with slashed branch n…
D3OXY Apr 2, 2026
da107f3
Fix websocket closing and reopening connections too eagerly (#1701)
juliusmarminge Apr 2, 2026
48481aa
Fix stale send spinner after completed turns (#1700)
hhharryyyyy Apr 2, 2026
0853405
Fix scroll to bottom button flickering near bottom of the chat (#1692)
vaeho Apr 2, 2026
9013c07
Clean up terminal state when threads are archived (#1702)
juliusmarminge Apr 2, 2026
1b272fd
feat: support IntelliJ IDEA open-in launch (#1673)
cenumi Apr 2, 2026
752f96e
Add server observability tracing and metrics (#1697)
juliusmarminge Apr 3, 2026
e8f5b4a
[codex] Revert stale send spinner fix (#1704)
juliusmarminge Apr 3, 2026
e9ed849
Persist server OTLP tracing settings across restarts (#1705)
juliusmarminge Apr 3, 2026
8515f02
Move worktree bootstrap to the server and persist terminal launch con…
juliusmarminge Apr 4, 2026
27c2b14
feat(cli): allow optional positional cwd argument (#1727)
juliusmarminge Apr 4, 2026
6de4b47
Return replay retry state from orchestration recovery (#1728)
juliusmarminge Apr 4, 2026
04a1ae7
Proxy browser OTLP traces through the server (#1739)
juliusmarminge Apr 4, 2026
f2cd53f
Add WebSocket disconnect recovery and slow RPC toast UX (#1730)
juliusmarminge Apr 5, 2026
cd7980b
[codex] Canonicalize PR number references (#1749)
sabraman Apr 5, 2026
740d7a3
Use lazy stream accessors for provider runtime events (#1746)
juliusmarminge Apr 5, 2026
1234708
[codex] Fix marketing download fallback links (#1747)
sabraman Apr 5, 2026
e0874b6
Raise slow RPC ack warning threshold to 15s (#1760)
juliusmarminge Apr 5, 2026
cf2c628
Use active worktree path for workspace saves (#1762)
juliusmarminge Apr 5, 2026
53a552e
Stream git status updates over WebSocket (#1763)
juliusmarminge Apr 6, 2026
340dbbb
fix(web): unwrap windows shell command wrappers (#1719)
justsomelegs Apr 6, 2026
c6f57a1
Rename "Chat" to "Build" in interaction mode toggle (#1769)
heysonder Apr 6, 2026
226ed99
Assign default capabilities to Codex custom models (#1793)
juliusmarminge Apr 6, 2026
a221542
Add project rename support in the sidebar (#1798)
juliusmarminge Apr 6, 2026
11d456f
Support multi-select pending user inputs (#1797)
juliusmarminge Apr 6, 2026
afc3924
Add Zed support to Open actions via editor command aliases (#1303)
AdemBenAbdallah Apr 6, 2026
8244fb8
Closes #1795 - Support building and developing in a devcontainer (#1791)
Spitfire1900 Apr 7, 2026
b1934b9
Add explicit timeouts to CI and release workflows (#1825)
juliusmarminge Apr 7, 2026
28e481e
fix(web): distinguish singular/plural in pending action submit label …
jvzijp Apr 7, 2026
1ec346c
Refactor web stores into atomic slices ready to split ChatView (#1708)
justsomelegs Apr 9, 2026
72b7f90
Add VSCode Insiders and VSCodium icons (#1847)
Spitfire1900 Apr 9, 2026
b96308f
Prepare datamodel for multi-environment (#1765)
juliusmarminge Apr 9, 2026
b7559c4
Implement server auth bootstrap and pairing flow (#1768)
juliusmarminge Apr 9, 2026
5b3b31b
Use dev proxy for loopback auth and environment requests (#1853)
juliusmarminge Apr 9, 2026
2aa7398
Refresh local git status on turn completion (#1821)
juliusmarminge Apr 9, 2026
d9ded65
fix(desktop): add Copy Link action for chat links (#1835)
Klemencina Apr 9, 2026
7372184
fix: map runtime modes to correct permission levels (#1587)
oski646 Apr 9, 2026
386eb18
Fix persisted composer image hydration typo (#1831)
noxire-dev Apr 9, 2026
7b3cdc6
Clarify environment and workspace picker labels (#1854)
juliusmarminge Apr 9, 2026
b547fee
Scope git toast state by thread ref (#1855)
juliusmarminge Apr 9, 2026
9847e9b
fix build (#1859)
juliusmarminge Apr 9, 2026
70f5dfc
Stabilize keybindings toast stream setup (#1860)
juliusmarminge Apr 9, 2026
9bedd71
Debounce reconnect disconnect logging (#1862)
juliusmarminge Apr 9, 2026
869789b
Extract ChatComposer to fix composer keystroke re-renders (#1857)
juliusmarminge Apr 9, 2026
528bb2a
[codex] Harden WebSocket reconnect recovery (#1864)
juliusmarminge Apr 10, 2026
66d76b5
Fix composer footer focus ring overflow (#1865)
juliusmarminge Apr 10, 2026
592c234
fix: make file uri links clickable (#1867)
Yash-Singh1 Apr 10, 2026
7c0849f
fix(web): harmonize typography in chat messages and code blocks (#1861)
jvzijp Apr 10, 2026
65d797c
feat(web): add surround selection in composer (#1502)
mbuvarp Apr 10, 2026
abb84c0
fix: use different bundle ID for dev runner (#1806)
nmggithub Apr 10, 2026
5d9eb18
fix: don't let un-updateable builds check for an update (#1808)
nmggithub Apr 10, 2026
e32077c
Persist client settings and saved environment secrets (#1868)
juliusmarminge Apr 10, 2026
ea9e61b
Align chat composer and toolbar widths (#1869)
juliusmarminge Apr 10, 2026
e82b987
Select desktop backend port by sequential scan (#1870)
juliusmarminge Apr 10, 2026
cf9f236
Add headless `t3 serve` pairing output (#1871)
juliusmarminge Apr 10, 2026
1a05d8c
Document remote server network access setup (#1872)
juliusmarminge Apr 10, 2026
1cba2f6
Harden workspace git indexing against repo-configured fsmonitor execu…
juliusmarminge Apr 10, 2026
3405a64
bump effect to latest beta (#1866)
juliusmarminge Apr 10, 2026
2028d57
Fix server publish check for bin entrypoint (#1885)
juliusmarminge Apr 10, 2026
a3f2927
chore(release): prepare v0.0.16
t3-code[bot] Apr 10, 2026
9385314
Persist changed-files expansion state per thread (#1858)
Marve10s Apr 10, 2026
e3004ae
Harden secret store and resolve catalog overrides (#1891)
juliusmarminge Apr 10, 2026
a3dadf3
chore(release): prepare v0.0.17
t3-code[bot] Apr 10, 2026
678f827
Remove Claude subscription-based model adjustment (#1899)
juliusmarminge Apr 10, 2026
e231681
Fix worktree base branch updates for active draft (#1900)
juliusmarminge Apr 10, 2026
12c3af7
feat(desktop): add "Copy Image" to right-click context menu (#1052)
GuilhermeVieiraDev Apr 10, 2026
5fa09fa
[codex] fix composer footer compact layout (#1894)
shivamhwp Apr 10, 2026
4ae9de3
Stabilize auth session cookies per server mode (#1898)
juliusmarminge Apr 10, 2026
58e5f71
Add provider skill discovery (#1905)
juliusmarminge Apr 11, 2026
e0e01b4
Handle deleted git directories as non-repositories (#1907)
juliusmarminge Apr 11, 2026
b80e847
Memoize derived thread reads (#1908)
juliusmarminge Apr 11, 2026
97880e8
fix(web): resolve logical-to-physical key mismatch in project drag re…
mwolson Apr 11, 2026
26cc1ff
Add assistant message copy action and harden related test/storage fal…
shivamhwp Apr 11, 2026
1f4a3f6
Fix opening urls wrapped across lines in the terminal (#1913)
ElSargo Apr 11, 2026
5467d11
fix(web): prevent number-key shortcuts from hijacking input in focuse…
D3OXY Apr 11, 2026
934037c
feat(web): add extensible command palette (#1103)
binbandit Apr 11, 2026
f9372a4
chore(desktop): separate dev AppUserModelID on Windows (#1934)
adammansfield Apr 12, 2026
f9019cd
Coalesce status refreshes by remote (#1940)
juliusmarminge Apr 12, 2026
2fce84a
fix: quote editor launch args on Windows to support paths with spaces…
D3OXY Apr 12, 2026
f59ee36
fix(web): allow concurrent browser tests to retry ports (#1951)
ashvinnihalani Apr 12, 2026
7a00846
fix: Align token usage metrics for both Claude and Codex (#1943)
ashvinnihalani Apr 12, 2026
94d13a2
Preserve live stream subscriptions across explicit reconnects (#1972)
juliusmarminge Apr 13, 2026
96c9306
Migrate chat scrolling and branch lists to LegendList (#1953)
juliusmarminge Apr 13, 2026
dff8784
window controls overlay (windows&linux) (#1969)
tarik02 Apr 13, 2026
850c912
fix(desktop): increase backend readiness timeout from 10s to 30s (#1979)
rowalth Apr 13, 2026
57d7746
fix(web): replace turn strip overlay gradients with mask-image fade (…
GuilhermeVieiraDev Apr 13, 2026
f7fa62a
Add shell snapshot queries for orchestration state (#1973)
juliusmarminge Apr 13, 2026
1bf048e
fix: avoid copy button overlapping long code blocks (#1985)
barrymichaeldoyle Apr 13, 2026
f2205bd
Pad composer model picker to prevent ring clipping (#1992)
juliusmarminge Apr 13, 2026
801b83e
Allow empty server threads to bootstrap new worktrees (#1936)
juliusmarminge Apr 13, 2026
77fcad3
Prevent live thread branches from regressing to temp worktree names (…
juliusmarminge Apr 13, 2026
047a0a6
fix: add pointer cursor to the permissions mode select trigger (#1997)
UtkarshUsername Apr 13, 2026
9b29be9
docs: Document environment prep before local development (#1975)
ashvinnihalani Apr 13, 2026
5f7becf
feat: Add Kiro editor support to open picker (#1974)
ashvinnihalani Apr 13, 2026
cadd708
feat: show full thread title in a tooltip when hovering sidebar threa…
UtkarshUsername Apr 13, 2026
f5ecca4
Clear tracked RPCs on reconnect (#2000)
juliusmarminge Apr 13, 2026
6f69934
Use latest user message time for thread timestamps (#1996)
juliusmarminge Apr 13, 2026
d18e43b
fix: lost provider session recovery (#1938)
ashvinnihalani Apr 13, 2026
33dadb5
Fix thread timeline autoscroll and simplify branch state (#2002)
juliusmarminge Apr 13, 2026
569fea8
Warm sidebar thread detail subscriptions (#2001)
juliusmarminge Apr 13, 2026
5f7ec73
Fix new-thread draft reuse for worktree defaults (#2003)
juliusmarminge Apr 13, 2026
9dcea68
Refresh git status after branch rename and worktree setup (#2005)
juliusmarminge Apr 13, 2026
008ac5c
Cache provider status and gate desktop startup (#1962)
juliusmarminge Apr 13, 2026
2e42f3f
Improve shell PATH hydration and fallback detection (#1799)
juliusmarminge Apr 13, 2026
c9b07d6
Backfill projected shell summaries and stale approval cleanup (#2004)
juliusmarminge Apr 14, 2026
0d28026
fix(claude): emit plan events for TodoWrite during input streaming (#…
TimCrooker Apr 14, 2026
409ff90
Nightly release channel (#2012)
juliusmarminge Apr 15, 2026
9ff31f8
Fix nightly desktop product name (#2025)
juliusmarminge Apr 15, 2026
44afe78
Add filesystem browse API and command palette project picker (#2024)
Noojuno Apr 15, 2026
7968f27
Fix terminal Cmd+Backspace on macOS (#2027)
SAKETH11111 Apr 15, 2026
28cb9db
feat(web): add tooltip to composer file mention pill (#1944)
GuilhermeVieiraDev Apr 15, 2026
68061af
Improve markdown file link UX (#1956)
justsomelegs Apr 15, 2026
5e1dd56
feat: add Launch Args setting for Claude provider (#1971)
akarabach Apr 15, 2026
f9580ff
Default nightly desktop builds to the nightly update channel (#2049)
juliusmarminge Apr 16, 2026
5e13f53
fix: remove trailing newline from CLAUDE.md symlink (#2052)
marcusgrando Apr 16, 2026
d22c6f5
fix: prevent user-input activities from leaking into pending approval…
marcusgrando Apr 16, 2026
3e07f5a
feat: add Claude Opus 4.7 to built-in models (#2072)
Marve10s Apr 16, 2026
19d4740
fix(web): prevent composer controls overlap on narrow windows (make p…
UtkarshUsername Apr 16, 2026
7a08fcf
fix(server): drop stale text generation options when resetting text-g…
UtkarshUsername Apr 16, 2026
188a40c
feat: configurable project grouping (#2055)
tlh38 Apr 16, 2026
e0117b2
Fix Claude Process leak[MEMORY INTENSIVE], archiving, and stale claud…
crafael23 Apr 16, 2026
d90e15d
fix(server): extend negative repository identity cache ttl (#2083)
m-mohamed Apr 16, 2026
6891c77
Build for Windows ARM (#2080)
Badbird5907 Apr 17, 2026
b7df3df
[codex] Fix Windows release manifest publishing (#2095)
juliusmarminge Apr 17, 2026
5490438
fix: guard against missing sidebarProjectGroupingOverrides in client …
juliusmarminge Apr 17, 2026
b2cca67
ci(release): install deps before finalize version bump (#2100)
juliusmarminge Apr 17, 2026
2d87574
chore(release): prepare v0.0.20
t3-code[bot] Apr 17, 2026
505db9f
try out blacksmith for releases (#2101)
juliusmarminge Apr 17, 2026
b991b9b
Revert to Github Runner for Windows (#2103)
juliusmarminge Apr 17, 2026
ed6b7fb
fix(server): honor gitignored files in workspace search (#2078)
nmharmon8 Apr 17, 2026
8dba2d6
Adopt Node-native TypeScript for desktop and server (#2098)
juliusmarminge Apr 17, 2026
54179c8
Update workflow to use ubuntu-24.04 runner (#2110)
juliusmarminge Apr 17, 2026
d8d3296
Show thread status in command palette (#2107)
Noojuno Apr 17, 2026
a7a44d0
Fix Windows PATH hydration and repair (#1729)
Badbird5907 Apr 17, 2026
f297e30
Clean up invalid pending approval projections (#2106)
juliusmarminge Apr 17, 2026
df9d340
Modernize release workflow runners (#2129)
juliusmarminge Apr 17, 2026
4000973
Extract backend startup readiness coordination (#2133)
juliusmarminge Apr 17, 2026
721b6b4
Preserve provider bindings when stopping sessions (#2125)
HaukeSchnau Apr 17, 2026
52a6067
Throttle nightly release workflow to every 3 hours (#2134)
juliusmarminge Apr 17, 2026
39ca3ee
fix(web): bypass xterm for global terminal shortcuts (#1580)
AriajSarkar Apr 17, 2026
ce94fee
feat: add opencode provider support (#1758)
nexxeln Apr 17, 2026
60387f6
fix: show restore defaults only on General settings (#1710)
UtkarshUsername Apr 17, 2026
4e0c003
fix(web): allow deleting non-empty projects from the warning toast (#…
maria-rcks Apr 17, 2026
a3b1df5
Add Claude Opus 4.5 to built-in Claude models (#2143)
juliusmarminge Apr 17, 2026
0f184c2
fix(web): use capture-phase keydown listener so CTRL+J toggles termin…
mvanhorn Apr 17, 2026
9c64f12
Add ACP support with Cursor provider (#1355)
juliusmarminge Apr 17, 2026
29cb917
Guard release workflow jobs from upstream failures (#2146)
juliusmarminge Apr 17, 2026
8ac57f7
Guard release workflow jobs on upstream success (#2147)
juliusmarminge Apr 17, 2026
9df3c64
Use GitHub App token for release uploads (#2149)
juliusmarminge Apr 17, 2026
6a9a5b5
Merge latest upstream t3code main into fork while preserving GitHub C…
zortos293 Apr 18, 2026
be44d57
Fix provider reconciliation review findings
zortos293 Apr 18, 2026
18a8e5a
Merge main into capy/upstream-sync-copilot-v2
zortos293 Apr 18, 2026
60d878b
Fix remaining PR review findings
zortos293 Apr 18, 2026
fe1a33a
Fix final PR review regressions
zortos293 Apr 18, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ on:
jobs:
quality:
name: Format, Lint, Typecheck, Test, Browser Test, Build
runs-on: ubuntu-24.04
runs-on: blacksmith-8vcpu-ubuntu-2404
timeout-minutes: 10
steps:
- name: Checkout
Expand Down Expand Up @@ -76,7 +76,7 @@ jobs:

release_smoke:
name: Release Smoke
runs-on: ubuntu-24.04
runs-on: blacksmith-8vcpu-ubuntu-2404
timeout-minutes: 10
steps:
- name: Checkout
Expand Down
128 changes: 116 additions & 12 deletions .github/workflows/release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ on:
tags:
- "v*.*.*"
schedule:
- cron: "0 9 * * *"
- cron: "0 */3 * * *"
workflow_dispatch:
inputs:
channel:
Expand All @@ -26,9 +26,46 @@ permissions:
id-token: write

jobs:
check_changes:
name: Check for changes since last nightly
if: github.event_name == 'schedule'
runs-on: ubuntu-24.04
outputs:
has_changes: ${{ steps.check.outputs.has_changes }}
steps:
- name: Checkout
uses: actions/checkout@v6
with:
fetch-depth: 0

- id: check
name: Compare HEAD to last nightly tag
run: |
last_nightly_tag=$(git tag --list 'nightly-v*' --sort=-creatordate | head -n 1)
if [[ -z "$last_nightly_tag" ]]; then
echo "No previous nightly tag found. Proceeding with release."
echo "has_changes=true" >> "$GITHUB_OUTPUT"
exit 0
fi

last_nightly_sha=$(git rev-parse "$last_nightly_tag^{commit}")
head_sha=$(git rev-parse HEAD)

if [[ "$last_nightly_sha" == "$head_sha" ]]; then
echo "No changes on main since last nightly release ($last_nightly_tag). Skipping."
echo "has_changes=false" >> "$GITHUB_OUTPUT"
else
echo "Changes detected on main since $last_nightly_tag ($last_nightly_sha → $head_sha). Proceeding."
echo "has_changes=true" >> "$GITHUB_OUTPUT"
fi

preflight:
name: Preflight
runs-on: ubuntu-24.04
needs: [check_changes]
if: |
!failure() && !cancelled() &&
(github.event_name != 'schedule' || needs.check_changes.outputs.has_changes == 'true')
runs-on: blacksmith-8vcpu-ubuntu-2404
timeout-minutes: 10
outputs:
release_channel: ${{ steps.release_meta.outputs.release_channel }}
Expand All @@ -37,6 +74,7 @@ jobs:
release_name: ${{ steps.release_meta.outputs.name }}
short_sha: ${{ steps.release_meta.outputs.short_sha }}
previous_tag: ${{ steps.previous_tag.outputs.previous_tag }}
cli_dist_tag: ${{ steps.release_meta.outputs.cli_dist_tag }}
is_prerelease: ${{ steps.release_meta.outputs.is_prerelease }}
make_latest: ${{ steps.release_meta.outputs.make_latest }}
ref: ${{ github.sha }}
Expand Down Expand Up @@ -79,6 +117,7 @@ jobs:
--github-output

echo "release_channel=nightly" >> "$GITHUB_OUTPUT"
echo "cli_dist_tag=nightly" >> "$GITHUB_OUTPUT"
echo "is_prerelease=true" >> "$GITHUB_OUTPUT"
echo "make_latest=false" >> "$GITHUB_OUTPUT"
else
Expand All @@ -102,6 +141,7 @@ jobs:
echo "version=$version" >> "$GITHUB_OUTPUT"
echo "tag=v$version" >> "$GITHUB_OUTPUT"
echo "name=T3 Code v$version" >> "$GITHUB_OUTPUT"
echo "cli_dist_tag=latest" >> "$GITHUB_OUTPUT"
if [[ "$version" =~ ^[0-9]+\.[0-9]+\.[0-9]+$ ]]; then
echo "is_prerelease=false" >> "$GITHUB_OUTPUT"
echo "make_latest=true" >> "$GITHUB_OUTPUT"
Expand Down Expand Up @@ -131,29 +171,30 @@ jobs:
build:
name: Build ${{ matrix.label }}
needs: preflight
if: ${{ !failure() && !cancelled() && needs.preflight.result == 'success' }}
runs-on: ${{ matrix.runner }}
timeout-minutes: 30
strategy:
fail-fast: false
matrix:
include:
- label: macOS arm64
runner: macos-26
runner: blacksmith-12vcpu-macos-26
platform: mac
target: dmg
arch: arm64
- label: macOS x64
runner: macos-26-intel
runner: blacksmith-12vcpu-macos-26
platform: mac
target: dmg
arch: x64
- label: Linux x64
runner: ubuntu-24.04
runner: blacksmith-32vcpu-ubuntu-2404
platform: linux
target: AppImage
arch: x64
- label: Windows x64
runner: windows-2022 # blacksmith-32vcpu-windows-2025
runner: blacksmith-32vcpu-windows-2025
platform: win
target: nsis
arch: x64
Expand Down Expand Up @@ -185,6 +226,23 @@ jobs:
- name: Align package versions to release version
run: node scripts/update-release-package-versions.ts "${{ needs.preflight.outputs.version }}"

- name: Install Spectre-mitigated MSVC libs
if: matrix.platform == 'win'
shell: pwsh
run: |
$vswhere = "${env:ProgramFiles(x86)}\Microsoft Visual Studio\Installer\vswhere.exe"
$installPath = & $vswhere -products * -latest -property installationPath
$setupExe = "${env:ProgramFiles(x86)}\Microsoft Visual Studio\Installer\setup.exe"
$proc = Start-Process -FilePath $setupExe `
-ArgumentList "modify", "--installPath", "`"$installPath`"", "--add", `
"Microsoft.VisualStudio.Component.VC.Tools.x86.x64.Spectre", "--quiet", "--norestart" `
-Wait -PassThru -NoNewWindow
if ($null -eq $proc -or $proc.ExitCode -ne 0) {
$code = if ($null -ne $proc) { $proc.ExitCode } else { 1 }
Write-Error "Visual Studio Installer failed with exit code $code"
exit $code
}

- name: Build desktop artifact
shell: bash
env:
Expand Down Expand Up @@ -293,29 +351,73 @@ jobs:
path: release-publish/*
if-no-files-found: error

release:
name: Publish GitHub Release
publish_cli:
name: Publish CLI to npm
needs: [preflight, build]
runs-on: ubuntu-24.04
if: ${{ !failure() && !cancelled() && needs.preflight.result == 'success' && needs.build.result == 'success' }}
runs-on: ubuntu-24.04 # blacksmith-8vcpu-ubuntu-2404
timeout-minutes: 10
steps:
- name: Checkout
uses: actions/checkout@v6
with:
ref: ${{ needs.preflight.outputs.ref }}

- name: Setup Bun
uses: oven-sh/setup-bun@v2
with:
bun-version-file: package.json

- name: Setup Node
uses: actions/setup-node@v6
with:
node-version-file: package.json
registry-url: https://registry.npmjs.org

- name: Install dependencies
run: bun install --frozen-lockfile

- name: Align package versions to release version
run: node scripts/update-release-package-versions.ts "${{ needs.preflight.outputs.version }}"

- name: Build CLI package
run: bun run build --filter=@t3tools/web --filter=t3

- name: Publish CLI package
run: node apps/server/scripts/cli.ts publish --tag "${{ needs.preflight.outputs.cli_dist_tag }}" --app-version "${{ needs.preflight.outputs.version }}" --verbose

release:
name: Publish GitHub Release
needs: [preflight, build, publish_cli]
if: ${{ !failure() && !cancelled() && needs.preflight.result == 'success' && needs.build.result == 'success' && needs.publish_cli.result == 'success' }}
runs-on: ubuntu-24.04 # blacksmith-8vcpu-ubuntu-2404
timeout-minutes: 10
steps:
- id: app_token
name: Mint release app token
uses: actions/create-github-app-token@v2
with:
app-id: ${{ secrets.RELEASE_APP_ID }}
private-key: ${{ secrets.RELEASE_APP_PRIVATE_KEY }}
owner: ${{ github.repository_owner }}

- name: Checkout
uses: actions/checkout@v6
with:
ref: ${{ needs.preflight.outputs.ref }}

- name: Setup Bun
uses: oven-sh/setup-bun@v2
with:
bun-version-file: package.json

- name: Setup Node
uses: actions/setup-node@v6
with:
node-version-file: package.json

- name: Install dependencies
run: bun install --frozen-lockfile --ignore-scripts
run: bun install --frozen-lockfile

- name: Download all desktop artifacts
uses: actions/download-artifact@v8
Expand Down Expand Up @@ -383,6 +485,7 @@ jobs:
release-assets/*.blockmap
release-assets/*.yml
fail_on_unmatched_files: true
token: ${{ steps.app_token.outputs.token }}

- name: Publish first release
if: needs.preflight.outputs.previous_tag == ''
Expand All @@ -402,12 +505,13 @@ jobs:
release-assets/*.blockmap
release-assets/*.yml
fail_on_unmatched_files: true
token: ${{ steps.app_token.outputs.token }}

finalize:
name: Finalize release
if: needs.preflight.outputs.release_channel == 'stable'
if: ${{ !failure() && !cancelled() && needs.preflight.result == 'success' && needs.release.result == 'success' && needs.preflight.outputs.release_channel == 'stable' }}
needs: [preflight, release]
runs-on: ubuntu-24.04
runs-on: blacksmith-8vcpu-ubuntu-2404
timeout-minutes: 10
steps:
- id: app_token
Expand Down
1 change: 1 addition & 0 deletions apps/desktop/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@
"@t3tools/contracts": "workspace:*",
"@t3tools/shared": "workspace:*",
"@types/node": "catalog:",
"effect-acp": "workspace:*",
"tsdown": "catalog:",
"typescript": "catalog:",
"vitest": "catalog:"
Expand Down
58 changes: 58 additions & 0 deletions apps/desktop/src/backendStartupReadiness.test.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,58 @@
import { describe, expect, it, vi } from "vitest";

import { BackendReadinessAbortedError } from "./backendReadiness.ts";
import { waitForBackendStartupReady } from "./backendStartupReadiness.ts";

describe("waitForBackendStartupReady", () => {
it("falls back to the HTTP probe when no listening signal exists", async () => {
const waitForHttpReady = vi.fn<() => Promise<void>>().mockResolvedValue(undefined);
const cancelHttpWait = vi.fn();

await expect(
waitForBackendStartupReady({
waitForHttpReady,
cancelHttpWait,
}),
).resolves.toBe("http");

expect(waitForHttpReady).toHaveBeenCalledTimes(1);
expect(cancelHttpWait).not.toHaveBeenCalled();
});

it("uses the listening signal and cancels the HTTP probe", async () => {
let rejectHttpWait: ((error: unknown) => void) | null = null;
const waitForHttpReady = vi.fn(
() =>
new Promise<void>((_resolve, reject) => {
rejectHttpWait = reject;
}),
);
const cancelHttpWait = vi.fn(() => {
rejectHttpWait?.(new BackendReadinessAbortedError());
});

await expect(
waitForBackendStartupReady({
listeningPromise: Promise.resolve(),
waitForHttpReady,
cancelHttpWait,
}),
).resolves.toBe("listening");

expect(waitForHttpReady).toHaveBeenCalledTimes(1);
expect(cancelHttpWait).toHaveBeenCalledTimes(1);
});

it("rejects when the listening signal fails before HTTP readiness", async () => {
const error = new Error("backend exited");
const waitForHttpReady = vi.fn(() => new Promise<void>(() => {}));

await expect(
waitForBackendStartupReady({
listeningPromise: Promise.reject(error),
waitForHttpReady,
cancelHttpWait: vi.fn(),
}),
).rejects.toBe(error);
});
});
56 changes: 56 additions & 0 deletions apps/desktop/src/backendStartupReadiness.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,56 @@
import { isBackendReadinessAborted } from "./backendReadiness.ts";

export interface WaitForBackendStartupReadyOptions {
readonly listeningPromise?: Promise<void> | null;
readonly waitForHttpReady: () => Promise<void>;
readonly cancelHttpWait: () => void;
}

export async function waitForBackendStartupReady(
options: WaitForBackendStartupReadyOptions,
): Promise<"listening" | "http"> {
const httpReadyPromise = options.waitForHttpReady();
const listeningPromise = options.listeningPromise;

if (!listeningPromise) {
await httpReadyPromise;
return "http";
}

return await new Promise<"listening" | "http">((resolve, reject) => {
let settled = false;

const settleResolve = (source: "listening" | "http") => {
if (settled) {
return;
}
settled = true;
if (source === "listening") {
options.cancelHttpWait();
}
resolve(source);
};

const settleReject = (error: unknown) => {
if (settled) {
return;
}
settled = true;
reject(error);
};

listeningPromise.then(
() => settleResolve("listening"),
(error) => settleReject(error),
);
httpReadyPromise.then(
() => settleResolve("http"),
(error) => {
if (settled && isBackendReadinessAborted(error)) {
return;
}
settleReject(error);
},
);
});
}
Loading
Loading