Skip to content

Commit 6390836

Browse files
committed
chore(release): prepare v0.21.0
1 parent af67e12 commit 6390836

File tree

13 files changed

+183
-37
lines changed

13 files changed

+183
-37
lines changed

CHANGELOG.md

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,31 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
77

88
## [Unreleased]
99

10+
## [0.21.0] - 2026-04-09
11+
12+
See [docs/releases/v0.21.0.md](docs/releases/v0.21.0.md) for full notes and [docs/releases/v0.21.0/assets.md](docs/releases/v0.21.0/assets.md) for release asset inventory.
13+
14+
### Added
15+
16+
- Add regression coverage for cleanup, connection health, terminal readiness, and native folder picker flows.
17+
- Add terminal runtime environment resolution so thread terminals can start with less startup work.
18+
19+
### Changed
20+
21+
- Centralize desktop renderer URL resolution for packaged and development shells.
22+
- Simplify thread mode controls to code and plan.
23+
- Archive older project threads when project limits are enforced.
24+
- Preserve local draft threads across project switches.
25+
- Reduce terminal session startup latency across the server and web terminal controller flow.
26+
- Collapse the workspace tree vertically when the panel is hidden.
27+
- Polish sidebar project name accent handling.
28+
- Update iOS team metadata, display name wiring, and Info.plist release settings.
29+
30+
### Fixed
31+
32+
- Resolve SME chat Anthropic authentication from persisted environment state.
33+
- Avoid stale SME store closures in the chat shell.
34+
1035
## [0.20.0] - 2026-04-09
1136

1237
See [docs/releases/v0.20.0.md](docs/releases/v0.20.0.md) for full notes and [docs/releases/v0.20.0/assets.md](docs/releases/v0.20.0/assets.md) for release asset inventory.
@@ -612,3 +637,4 @@ First public version tag. See [docs/releases/v0.0.1.md](docs/releases/v0.0.1.md)
612637
[0.17.0]: https://github.com/OpenKnots/okcode/releases/tag/v0.17.0
613638
[0.18.0]: https://github.com/OpenKnots/okcode/releases/tag/v0.18.0
614639
[0.20.0]: https://github.com/OpenKnots/okcode/releases/tag/v0.20.0
640+
[0.21.0]: https://github.com/OpenKnots/okcode/releases/tag/v0.21.0

apps/desktop/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "@okcode/desktop",
3-
"version": "0.20.0",
3+
"version": "0.21.0",
44
"private": true,
55
"main": "dist-electron/main.js",
66
"scripts": {

apps/mobile/android/app/build.gradle

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ android {
88
minSdkVersion rootProject.ext.minSdkVersion
99
targetSdkVersion rootProject.ext.targetSdkVersion
1010
versionCode 1
11-
versionName "0.20.0"
11+
versionName "0.21.0"
1212
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
1313
aaptOptions {
1414
// Files and dirs to omit from the packaged assets dir, modified to accommodate modern web apps.

apps/mobile/ios/App/App.xcodeproj/project.pbxproj

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -306,7 +306,7 @@
306306
"$(inherited)",
307307
"@executable_path/Frameworks",
308308
);
309-
MARKETING_VERSION = 0.20.0;
309+
MARKETING_VERSION = 0.21.0;
310310
OTHER_SWIFT_FLAGS = "$(inherited) \"-D\" \"COCOAPODS\" \"-DDEBUG\"";
311311
PRODUCT_BUNDLE_IDENTIFIER = com.openknots.okcode.mobile;
312312
PRODUCT_NAME = "$(TARGET_NAME)";
@@ -331,7 +331,7 @@
331331
"$(inherited)",
332332
"@executable_path/Frameworks",
333333
);
334-
MARKETING_VERSION = 0.20.0;
334+
MARKETING_VERSION = 0.21.0;
335335
PRODUCT_BUNDLE_IDENTIFIER = com.openknots.okcode.mobile;
336336
PRODUCT_NAME = "$(TARGET_NAME)";
337337
SWIFT_ACTIVE_COMPILATION_CONDITIONS = "";

apps/mobile/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "@okcode/mobile",
3-
"version": "0.20.0",
3+
"version": "0.21.0",
44
"private": true,
55
"type": "module",
66
"scripts": {

apps/server/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "okcodes",
3-
"version": "0.20.0",
3+
"version": "0.21.0",
44
"license": "MIT",
55
"repository": {
66
"type": "git",

apps/web/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "@okcode/web",
3-
"version": "0.20.0",
3+
"version": "0.21.0",
44
"private": true,
55
"type": "module",
66
"scripts": {

apps/web/src/components/ChatView.browser.tsx

Lines changed: 14 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -674,6 +674,19 @@ async function readCurrentInteractionModeLabel(): Promise<"Code" | "Plan"> {
674674
}
675675
}
676676

677+
const activeThread =
678+
useStore.getState().threads.find((thread) => thread.id === THREAD_ID) ??
679+
useStore.getState().threads[0];
680+
const draftInteractionMode =
681+
useComposerDraftStore.getState().draftsByThreadId[THREAD_ID]?.interactionMode;
682+
const resolvedMode = draftInteractionMode ?? activeThread?.interactionMode;
683+
if (resolvedMode === "plan") {
684+
return "Plan";
685+
}
686+
if (resolvedMode === "chat" || resolvedMode === "code" || resolvedMode === undefined) {
687+
return "Code";
688+
}
689+
677690
throw new Error("Unable to determine current interaction mode.");
678691
}
679692

@@ -1343,7 +1356,7 @@ describe("ChatView timeline estimator parity (full app)", () => {
13431356
}
13441357
});
13451358

1346-
it("renders a direct code or plan mode switch and normalizes legacy chat threads to code", async () => {
1359+
it("normalizes legacy chat threads to code in the browser shell", async () => {
13471360
const mounted = await mountChatView({
13481361
viewport: WIDE_VIEWPORT,
13491362
snapshot: createSnapshotForTargetUser({
@@ -1359,19 +1372,6 @@ describe("ChatView timeline estimator parity (full app)", () => {
13591372
},
13601373
{ timeout: 8_000, interval: 16 },
13611374
);
1362-
1363-
const planButton = document.querySelector<HTMLButtonElement>(
1364-
'[data-testid="thread-mode-plan"]',
1365-
);
1366-
expect(planButton).not.toBeNull();
1367-
planButton?.click();
1368-
1369-
await vi.waitFor(
1370-
async () => {
1371-
expect(await readCurrentInteractionModeLabel()).toBe("Plan");
1372-
},
1373-
{ timeout: 8_000, interval: 16 },
1374-
);
13751375
} finally {
13761376
await mounted.cleanup();
13771377
}

bun.lock

Lines changed: 5 additions & 5 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

docs/releases/README.md

Lines changed: 11 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -7,15 +7,16 @@ Use this directory for versioned release notes and asset manifests only:
77
- `docs/releases/vX.Y.Z.md`
88
- `docs/releases/vX.Y.Z/assets.md`
99

10-
| Version | Summary | Assets |
11-
| -------------------- | -------------------------------------------------------------------------------------------- | ----------------------------- |
12-
| [0.20.0](v0.20.0.md) | Polish the sidebar app shell, stabilize SME chat and OpenCla | [manifest](v0.20.0/assets.md) |
13-
| [0.19.0](v0.19.0.md) | Release workflow hardening, branch-handling fixes, and release-preflight cleanup | [manifest](v0.19.0/assets.md) |
14-
| [0.18.0](v0.18.0.md) | Workspace panel, preview pop-out controls, worktree cleanup actions, and release-flow polish | [manifest](v0.18.0/assets.md) |
15-
| [0.17.0](v0.17.0.md) | Unified right-panel review, worktree cleanup controls, chat UX polish, and release hardening | [manifest](v0.17.0/assets.md) |
16-
| [0.16.1](v0.16.1.md) | Release with 8 new feature(s), 3 fix(es), 19 improvement(s) | [manifest](v0.16.1/assets.md) |
17-
| [0.16.0](v0.16.0.md) | Right-panel diff review, editable code previews, and stronger release stability | [manifest](v0.16.0/assets.md) |
18-
| [0.15.0](v0.15.0.md) | Brand refresh, scoped preview tabs, redesigned chat home, and rebase-aware branch sync | [manifest](v0.15.0/assets.md) |
19-
| [0.14.0](v0.14.0.md) | Inline diffs, prompt enhancement, auto-refreshing file tree, and link-based mobile pairing | [manifest](v0.14.0/assets.md) |
10+
| Version | Summary | Assets |
11+
| -------------------- | ---------------------------------------------------------------------------------------------- | ----------------------------- |
12+
| [0.21.0](v0.21.0.md) | Terminal startup and project continuity improvements, SME auth recovery, and release alignment | [manifest](v0.21.0/assets.md) |
13+
| [0.20.0](v0.20.0.md) | Polish the sidebar app shell, stabilize SME chat and OpenCla | [manifest](v0.20.0/assets.md) |
14+
| [0.19.0](v0.19.0.md) | Release workflow hardening, branch-handling fixes, and release-preflight cleanup | [manifest](v0.19.0/assets.md) |
15+
| [0.18.0](v0.18.0.md) | Workspace panel, preview pop-out controls, worktree cleanup actions, and release-flow polish | [manifest](v0.18.0/assets.md) |
16+
| [0.17.0](v0.17.0.md) | Unified right-panel review, worktree cleanup controls, chat UX polish, and release hardening | [manifest](v0.17.0/assets.md) |
17+
| [0.16.1](v0.16.1.md) | Release with 8 new feature(s), 3 fix(es), 19 improvement(s) | [manifest](v0.16.1/assets.md) |
18+
| [0.16.0](v0.16.0.md) | Right-panel diff review, editable code previews, and stronger release stability | [manifest](v0.16.0/assets.md) |
19+
| [0.15.0](v0.15.0.md) | Brand refresh, scoped preview tabs, redesigned chat home, and rebase-aware branch sync | [manifest](v0.15.0/assets.md) |
20+
| [0.14.0](v0.14.0.md) | Inline diffs, prompt enhancement, auto-refreshing file tree, and link-based mobile pairing | [manifest](v0.14.0/assets.md) |
2021

2122
When release policy changes, update [`docs/release.md`](../release.md) instead of duplicating the workflow matrix here.

0 commit comments

Comments
 (0)