What's Changed
- feat(i18n): Add Russian localization (ru) by @arhipov-om in #998
- chore(lint): turn noExplicitAny and noNonNullAssertion into errors by @Mark-Life in #1076
- Blog: GUI overview by @makingthematrix in #991
- Blog: review fixes for the GUI overview post (stacked on #991) by @danyaberezun in #999
- feat: warn that Claude subscription sign-in bills ThinkRail usage as Anthropic extra usage by @rsolmano in #1073
- Blog: ThinkRail 0.3.0 release post by @rsolmano in #1041
- fix(server): warn about Anthropic extra usage when an extension switches the model by @rsolmano in #1077
- build(web): typecheck tests, scripts, and vite config by @Mark-Life in #1069
- test(web): typecheck shell tests by @Mark-Life in #1070
- feat(extensions): install, view and switch pi packages from Settings → Extensions by @rsolmano in #1025
- test(web): typecheck chat and store tests by @Mark-Life in #1071
- test(web): typecheck panels tests by @Mark-Life in #1072
- fix(resources): recover from a refused Resources read and make replay overflow observable by @rsolmano in #987
- fix(host): stop holding replay slots for requests the page gave up on by @rsolmano in #988
- settings: center the dialog close button in the header by @Mark-Life in #1022
- ci: download Playwright's headless shell in the background during the build by @Mark-Life in #1058
- fix(web): keep one workspace read in flight per site by @Mark-Life in #1014
- feat: connect your own OpenAI-compatible model servers from Settings → Providers by @rsolmano in #1084
- feat: let users choose the interface and code fonts by @danyaberezun in #1092
- chore(tooling): type-check root scripts, cli scripts, and website tests by @Mark-Life in #1063
- chore(e2e): type-check the e2e tree in typecheck:root by @Mark-Life in #1064
- fix(web): stop the chat crashing with "Maximum call stack size exceeded" on WebKit by @rsolmano in #1080
- test(web): typecheck every web test and drop the exclude list by @Mark-Life in #1074
- refactor(web): type-check prototype-free maps with nullProto by @Mark-Life in #1066
- lint(web): reject Object.create(null) outside nullProto by @Mark-Life in #1067
- test: stop the Windows desktop smoke and real-shortcut test flakes by @danyaberezun in #1112
- test: stop the lifecycle pid-file, e2e global-setup and freePort races by @danyaberezun in #1115
- ci: retry the Electrobun toolchain download before desktop builds by @danyaberezun in #1116
- test(e2e): judge managed-runner signal cleanup at runner exit by @danyaberezun in #1120
- test(e2e): stop the layout tab-drag and side-focus races by @danyaberezun in #1121
- test(e2e): let the chat's placement motion settle before clicking visualize card controls by @danyaberezun in #1124
- fix: wake the idle parent as soon as a background result lands by @danyaberezun in #1123
- test(server): make the unit suite independent of file order and the developer's machine by @danyaberezun in #1126
- feat(scripts): count queue-on-queue and stacked failures once and read flakes from green e2e jobs by @danyaberezun in #1122
- fix: stop the Changes review snap-back and the Pierre reveal give-up behind three e2e flakes by @danyaberezun in #1128
- fix(desktop): keep the window on its origin and open external links exactly once by @danyaberezun in #1030
- fix(resource-renderers): show MB when an image size rounds to 1024 KB by @kevin9327 in #1096
- fix(artifact-tests): make installer-smoke failures diagnosable and clean up the installed app by @rsolmano in #1105
- feat: global search palette — find chats, workspaces and projects, run commands, open Settings sections by @danyaberezun in #804
New Contributors
- @arhipov-om made their first contribution in #998
- @kevin9327 made their first contribution in #1096
Full Changelog: v0.3.0...v0.3.1