What's Changed
- fix(workspaces): create worktrees in the background so a large checkout never freezes the app by @rsolmano in #1202
- chore(github): remove SBOne-Kenobi from CODEOWNERS by @rsolmano in #1230
- fix(web): highlight every catalog language in chat by @Mark-Life in #1187
- fix(workspaces): send the last checkout progress when git exits inside the push throttle by @rsolmano in #1231
- feat(ask-user-question): redesign the questionnaire card — stable height, notes and Other in place, rich previews, Discuss, receipt by @danyaberezun in #1192
- fix(fs): identify SVG by its document root by @Afloat16 in #1184
- fix(cli): reject empty/non-decimal --port and --host, ignore invalid env values by @harshal-paltse in #1125
- feat: host search for the palette — files, specs, plans, chat transcripts and previews by @danyaberezun in #805
- ci: install Linux dependencies without restoring the Bun cache by @Mark-Life in #1242
- test: await promises the tests left floating by @Mark-Life in #1252
- chore(lint): fail biome on warnings and lock in clean rules by @Mark-Life in #1083
- fix(e2e): let the desktop runner exit as soon as the host shuts down by @Mark-Life in #1241
- fix(web): focus the composer input when its padding is clicked by @Mark-Life in #1163
- fix(web): fold fs-tick reads in branch status and preview by @Mark-Life in #1016
- scripts: parse boundary and seam imports with oxc-parser by @Mark-Life in #1233
- dialog: keep buttons and text inside the modal by @Mark-Life in #1157
- chat: follow a streaming answer by pinning its newest line instead of stepping by @Mark-Life in #1026
- chore: mark intentional fire-and-forget promises in shipped code by @Mark-Life in #1253
- chore(lint): reject floating promises by @Mark-Life in #1254
- feat: dictate into any text field with local NVIDIA Nemotron speech recognition by @rsolmano in #1228
- fix(workspaces): follow a branch switched in a managed workspace's terminal by @Mark-Life in #1028
- README update by @makingthematrix in #1219
- build(release): repack the Linux tarball with root ownership by @viwe-monai in #1003
- refactor: enable erasableSyntaxOnly and drop parameter properties by @Mark-Life in #1061
- test(contracts): widen the size gap in the linear-fold timing test by @danyaberezun in #1272
- refactor: remove no-op type assertions from production code by @Mark-Life in #1068
- build: typecheck with TypeScript 7 and drop TypeScript 6 by @Mark-Life in #1232
- docs(desktop): record that release signing must carry the microphone entitlement by @rsolmano in #1287
- fix(ui): keep a dialog open when a toast over it is pressed by @danyaberezun in #1271
- fix(packages): read the catalog fresh when the Extensions page opens by @danyaberezun in #1273
- perf(locales): load bundled translations on demand by @Mark-Life in #1251
- ci(e2e): deal browser tests to shards round-robin instead of contiguous blocks by @Mark-Life in #1238
- ci(e2e): run the no-agent browser suite as three jobs by @Mark-Life in #1239
- chore(github): add artyomxx and Mark-Life to CODEOWNERS by @danyaberezun in #1291
- test(contracts): bound folding a large decomposed text in absolute time by @danyaberezun in #1292
- fix(chat): fold the turn's Done row into one footer line by @Mark-Life in #1290
- feat(web): highlight chat code with Pierre in the worker by @Mark-Life in #1274
- perf(web): send and parse only new lines while chat code streams by @Mark-Life in #1275
- chore(deps): upgrade @pierre/diffs to 1.6.4 and vite to 8.3.5 by @Mark-Life in #1276
- feat(web): highlight diffs with Pierre and the chat color table by @Mark-Life in #1277
- feat(web): highlight the file editor with Pierre by @Mark-Life in #1278
- chore(web): keep Shiki out of the build by @Mark-Life in #1279
- feat(web): color every Pierre language in the file editor by @Mark-Life in #1280
- chore(web): keep unused Pierre theme catalogs out of the build by @Mark-Life in #1281
- feat(server): budget the skills listing and add skill_search for large catalogs by @OLavrik in #1218
- feat(web): start work from the palette's typed text by @danyaberezun in #806
- fix(desktop): keep the title bar draggable and a failed editor chunk out of a retry loop on Chromium 156 by @danyaberezun in #1294
- chore(deps): upgrade posthog-node to 5.57.2, @posthog/core to 1.60.1 and @posthog/cli to 0.18.12 by @danyaberezun in #1295
- chore(deps): bump @lobehub/icons-static-svg to 1.101.0, bun-pty to 0.5.2 and @astrojs/markdown-satteri to 0.4.6 by @danyaberezun in #1296
- chore(deps): upgrade Biome to 2.6.3 by @danyaberezun in #1297
- feat(skills): make other agents' skills opt-in and show the skill catalog's size by @OLavrik in #1221
- feat(web): focus the chat input after a Cmd+K workspace or chat pick by @rsolmano in #1298
- ci: install WebKit's linked libraries from a main-seeded .deb cache instead of the mirror by @danyaberezun in #1300
- Blog post: The Chat by @makingthematrix in #1244
- Chats without a project: a built-in Chats container with one scratch folder per chat by @danyaberezun in #887
- Continue a chat without a project in a new workspace: the agent's summary becomes the handoff by @danyaberezun in #888
- chore(deps): upgrade pi to 1.5.2 and expose cache warming in Settings by @rsolmano in #1301
- feat: Find in Files — search file contents across the workspace from a ⌘⇧F window and open the hit at its line by @danyaberezun in #933
- feat: add raster favicon and touch-icon fallbacks to the web UI and the website by @danyaberezun in #1307
- docs: record the #881 review decisions and the Electrobun/Hutch gaps the desktop accepts by @danyaberezun in #906
- feat: spec section search — rank spec sections by words for the palette's # scope and the agent's spec_search, and ask the agent from # by @danyaberezun in #939
- feat: let the agent start workspaces and check their status — #934 on the global-search stack by @danyaberezun in #941
- feat(web): dock the agent's questions above the message box by @danyaberezun in #1311
- fix(web): let the Settings model lists scroll with the wheel by @xtenzQ in #1166
- fix(fs): require a BMP DIB header before classifying bytes as an image by @1-DARK in #1226
- fix(web): send chat messages over plain-http origins without crypto.randomUUID by @1-DARK in #1111
- fix: refuse prompts over the 16 MiB WebSocket frame cap instead of raising it by @xtenzQ in #1018
- fix(server): find editors without blocking the host on a slow PATH by @Mahdi-Hasan in #1159
- fix(host): prefer configured connections for new chats by @Yutong43 in #1168
- fix(server): never run a restored chat on a model the user did not choose by @OLavrik in #1310
- fix(server): read Ollama's reported context window by @markjoin123 in #1217
- fix(subagents): read model "inherit" as the parent's model and list available models on a miss by @OpenLucasKaka in #1312
- fix(web): show why a plan review failed instead of a bare no-verdict line by @oisano11 in #990
- fix(server): only ask for a plan review on steps that changed files by @oisano11 in #992
- fix: allow fresh branch review lookups to bypass in-flight requests by @rushikeshsanap1512 in #1037
- fix(review): show a Source fallback in rendered previews by @euvoor in #1222
- fix(resource-renderers): stop frontmatter stripping at an empty block's fence by @g1obalworlds in #1048
- fix(web): align loose-list text with its marker by @rudycelekli in #1052
- fix(resource-renderers): drop a leading BOM before parsing CSV by @kevin9327 in #1050
- fix(web): don't show GitHub as Not connected before the auth probe answers by @gibkim in #1136
- Strip complete terminal control strings from notebook output by @Afloat16 in #1258
- fix(i18n): detect hardcoded text through transparent type wrappers by @xunguangzlj-cloud in #993
- fix(git): show changes in a repo with no commits instead of a bad revision error by @ernsahin in #1020
- fix(delegation): report routed subagent model and effort by @aimmetal-tech in #1021
- fix(terminal): give test shells their own home so tests stop writing to the developer's shell history by @enbiyagoral in #1036
- fix(server): ignore transient git metadata locks by @flssr in #1104
- fix(web): bridge WebKit's Korean IME into the terminal by @JoisFe in #891
- fix(web): restore a detached chat's reading position across tab switches by @aaditiiiii1 in #986
- fix(projects): bootstrap a new repo off the event loop without auto-gc by @L1nq0 in #1045
- fix: keep compacted turns visible above the summary marker by @superjinge in #1321
- fix(e2e): give Windows hosts a hermetic PATH that can find git by @ernsahin in #1024
- fix(providers): let a custom server's thinking be turned off on chat-template models by @lazarevtill in #1132
- fix(persistence): write registry files atomically and set aside unreadable ones by @1-DARK in #1225
- fix(server): show the Explorer window when revealing a folder on Windows by @Mahdi-Hasan in #1158
- fix(web): preserve image drafts across chat remounts by @rudycelekli in #1051
- fix(web): stop auto-probing custom server models on edit; add filter and paging by @1-DARK in #1135
- fix(watch): refresh remote status after terminal git push by @OKAN-SOFTWARE in #1044
- fix(server): don't watch git-ignored folders on Linux by @xtenzQ in #1137
- Improve json diff view to indicate changed nodes and show change summary by @zhuravlikjb in #953
- fix(templates): reject Windows reserved device names by @OKAN-SOFTWARE in #1042
- feat(locales): translate the font, package, and resource keys the Chinese catalog is missing by @oisano11 in #1134
- feat(locales): fill the remaining es, ja and ru translations by @eatmoreduck in #1262
- workspaces: allocate branch names from one batched branch listing by @eatmoreduck in #1263
- feat(web): add system fallbacks to the code font stack by @AZEROSTART in #1170
- fix(web): close ask-user-question note on blur by @ege-arhan in #1322
- feat(web): copy a file path from the Files tree and file tabs by @mvanhorn in #959
- feat(web): list each model-picker provider group newest first by @ernsahin in #1019
- fix(web-access): isolate web work across chat sessions by @dhruvwarriorr in #1040
- feat(web): copy the terminal selection with Ctrl+Shift+C on Linux and Windows by @Jmi2020 in #1259
- feat(web): add a heading outline beside Markdown previews by @mvanhorn in #960
- feat(extensions): forward editor text to the chat composer by @matwming in #1215
- feat(locales): add a Traditional Chinese (Taiwan) catalog by @leoho0722 in #1249
- feat(providers): let a custom endpoint's model set its own context window by @eatmoreduck in #1197
- feat(web): reorder sidebar projects by drag and drop by @dingdinglz in #900
- feat: add file tree context actions by @b4rtaz in #1177
- feat(desktop): add thinkrail:// deep links to open files at a line by @misswell in #1314
- feat(web): refresh Resources — drop New, fold the dock, inspect MCP servers by @danyaberezun in #1331
New Contributors
- @viwe-monai made their first contribution in #1003
- @xtenzQ made their first contribution in #1166
- @Mahdi-Hasan made their first contribution in #1159
- @Yutong43 made their first contribution in #1168
- @markjoin123 made their first contribution in #1217
- @OpenLucasKaka made their first contribution in #1312
- @rushikeshsanap1512 made their first contribution in #1037
- @g1obalworlds made their first contribution in #1048
- @rudycelekli made their first contribution in #1052
- @gibkim made their first contribution in #1136
- @xunguangzlj-cloud made their first contribution in #993
- @ernsahin made their first contribution in #1020
- @aimmetal-tech made their first contribution in #1021
- @enbiyagoral made their first contribution in #1036
- @flssr made their first contribution in #1104
- @JoisFe made their first contribution in #891
- @aaditiiiii1 made their first contribution in #986
- @L1nq0 made their first contribution in #1045
- @superjinge made their first contribution in #1321
- @lazarevtill made their first contribution in #1132
- @OKAN-SOFTWARE made their first contribution in #1044
- @AZEROSTART made their first contribution in #1170
- @ege-arhan made their first contribution in #1322
- @mvanhorn made their first contribution in #959
- @dhruvwarriorr made their first contribution in #1040
- @Jmi2020 made their first contribution in #1259
- @matwming made their first contribution in #1215
- @leoho0722 made their first contribution in #1249
- @b4rtaz made their first contribution in #1177
- @misswell made their first contribution in #1314
Full Changelog: v0.3.2...v0.4.0