From c34ea65f5bfd8693e47ea5e5fe1fbb9e0707e014 Mon Sep 17 00:00:00 2001 From: minhn4 Date: Thu, 20 Aug 2026 23:27:54 +0700 Subject: [PATCH 1/3] chore: bump version to 1.18.4-10 Co-Authored-By: Claude Opus 5 (1M context) --- bun.lock | 54 ++++++++++----------- packages/app/package.json | 2 +- packages/cli/package.json | 2 +- packages/codemode/package.json | 2 +- packages/console/app/package.json | 2 +- packages/console/core/package.json | 2 +- packages/console/function/package.json | 2 +- packages/console/mail/package.json | 2 +- packages/console/support/package.json | 2 +- packages/core/package.json | 2 +- packages/desktop/package.json | 2 +- packages/effect-drizzle-sqlite/package.json | 2 +- packages/effect-sqlite-node/package.json | 2 +- packages/enterprise/package.json | 2 +- packages/function/package.json | 2 +- packages/http-recorder/package.json | 2 +- packages/llm/package.json | 2 +- packages/opencode/package.json | 2 +- packages/plugin/package.json | 2 +- packages/sdk/js/package.json | 2 +- packages/server/package.json | 2 +- packages/session-ui/package.json | 2 +- packages/slack/package.json | 2 +- packages/stats/app/package.json | 2 +- packages/stats/core/package.json | 2 +- packages/stats/server/package.json | 2 +- packages/tui/package.json | 2 +- packages/ui/package.json | 2 +- sdks/vscode/package.json | 2 +- 29 files changed, 55 insertions(+), 55 deletions(-) diff --git a/bun.lock b/bun.lock index 2e91d1061a..cc41282dbf 100644 --- a/bun.lock +++ b/bun.lock @@ -30,7 +30,7 @@ }, "packages/app": { "name": "@opencode-ai/app", - "version": "1.18.4-9", + "version": "1.18.4-10", "dependencies": { "@codev/brand": "workspace:*", "@corvu/drawer": "catalog:", @@ -97,7 +97,7 @@ }, "packages/cli": { "name": "@opencode-ai/cli", - "version": "1.18.4-9", + "version": "1.18.4-10", "bin": { "lildax": "./bin/lildax.cjs", }, @@ -145,7 +145,7 @@ }, "packages/codemode": { "name": "@opencode-ai/codemode", - "version": "1.18.4-9", + "version": "1.18.4-10", "dependencies": { "acorn": "8.15.0", "effect": "catalog:", @@ -180,7 +180,7 @@ }, "packages/console/app": { "name": "@opencode-ai/console-app", - "version": "1.18.4-9", + "version": "1.18.4-10", "dependencies": { "@cloudflare/vite-plugin": "1.15.2", "@ibm/plex": "6.4.1", @@ -216,7 +216,7 @@ }, "packages/console/core": { "name": "@opencode-ai/console-core", - "version": "1.18.4-9", + "version": "1.18.4-10", "dependencies": { "@aws-sdk/client-sts": "3.782.0", "@jsx-email/render": "1.1.1", @@ -243,7 +243,7 @@ }, "packages/console/function": { "name": "@opencode-ai/console-function", - "version": "1.18.4-9", + "version": "1.18.4-10", "dependencies": { "@ai-sdk/anthropic": "3.0.82", "@ai-sdk/openai": "3.0.48", @@ -265,7 +265,7 @@ }, "packages/console/mail": { "name": "@opencode-ai/console-mail", - "version": "1.18.4-9", + "version": "1.18.4-10", "dependencies": { "@jsx-email/all": "2.2.3", "@jsx-email/cli": "1.4.3", @@ -289,7 +289,7 @@ }, "packages/console/support": { "name": "@opencode-ai/console-support", - "version": "1.18.4-9", + "version": "1.18.4-10", "dependencies": { "@cloudflare/vite-plugin": "1.15.2", "@opencode-ai/console-core": "workspace:*", @@ -309,7 +309,7 @@ }, "packages/core": { "name": "@opencode-ai/core", - "version": "1.18.4-9", + "version": "1.18.4-10", "bin": { "opencode": "./bin/opencode", }, @@ -404,7 +404,7 @@ }, "packages/desktop": { "name": "@opencode-ai/desktop", - "version": "1.18.4-9", + "version": "1.18.4-10", "dependencies": { "@lydell/node-pty": "catalog:", "@zip.js/zip.js": "2.7.62", @@ -459,7 +459,7 @@ }, "packages/effect-drizzle-sqlite": { "name": "@opencode-ai/effect-drizzle-sqlite", - "version": "1.18.4-9", + "version": "1.18.4-10", "dependencies": { "drizzle-orm": "catalog:", "effect": "catalog:", @@ -473,7 +473,7 @@ }, "packages/effect-sqlite-node": { "name": "@opencode-ai/effect-sqlite-node", - "version": "1.18.4-9", + "version": "1.18.4-10", "dependencies": { "effect": "catalog:", }, @@ -485,7 +485,7 @@ }, "packages/enterprise": { "name": "@opencode-ai/enterprise", - "version": "1.18.4-9", + "version": "1.18.4-10", "dependencies": { "@hono/standard-validator": "catalog:", "@opencode-ai/core": "workspace:*", @@ -517,7 +517,7 @@ }, "packages/function": { "name": "@opencode-ai/function", - "version": "1.18.4-9", + "version": "1.18.4-10", "dependencies": { "@octokit/auth-app": "8.0.1", "@octokit/rest": "catalog:", @@ -533,7 +533,7 @@ }, "packages/http-recorder": { "name": "@opencode-ai/http-recorder", - "version": "1.18.4-9", + "version": "1.18.4-10", "dependencies": { "@effect/platform-node": "4.0.0-beta.83", "@effect/platform-node-shared": "4.0.0-beta.83", @@ -564,7 +564,7 @@ }, "packages/llm": { "name": "@opencode-ai/llm", - "version": "1.18.4-9", + "version": "1.18.4-10", "dependencies": { "@opencode-ai/schema": "workspace:*", "@smithy/eventstream-codec": "4.2.14", @@ -583,7 +583,7 @@ }, "packages/opencode": { "name": "opencode", - "version": "1.18.4-9", + "version": "1.18.4-10", "bin": { "codev": "./bin/opencode", }, @@ -715,7 +715,7 @@ }, "packages/plugin": { "name": "@opencode-ai/plugin", - "version": "1.18.4-9", + "version": "1.18.4-10", "dependencies": { "@ai-sdk/provider": "3.0.8", "@opencode-ai/sdk": "workspace:*", @@ -791,7 +791,7 @@ }, "packages/sdk/js": { "name": "@opencode-ai/sdk", - "version": "1.18.4-9", + "version": "1.18.4-10", "dependencies": { "cross-spawn": "catalog:", }, @@ -806,7 +806,7 @@ }, "packages/server": { "name": "@opencode-ai/server", - "version": "1.18.4-9", + "version": "1.18.4-10", "dependencies": { "@opencode-ai/core": "workspace:*", "@opencode-ai/protocol": "workspace:*", @@ -821,7 +821,7 @@ }, "packages/session-ui": { "name": "@opencode-ai/session-ui", - "version": "1.18.4-9", + "version": "1.18.4-10", "dependencies": { "@kobalte/core": "catalog:", "@opencode-ai/core": "workspace:*", @@ -865,7 +865,7 @@ }, "packages/slack": { "name": "@opencode-ai/slack", - "version": "1.18.4-9", + "version": "1.18.4-10", "dependencies": { "@opencode-ai/sdk": "workspace:*", "@slack/bolt": "^3.17.1", @@ -878,7 +878,7 @@ }, "packages/stats/app": { "name": "@opencode-ai/stats-app", - "version": "1.18.4-9", + "version": "1.18.4-10", "dependencies": { "@ibm/plex": "6.4.1", "@kobalte/core": "catalog:", @@ -912,7 +912,7 @@ }, "packages/stats/core": { "name": "@opencode-ai/stats-core", - "version": "1.18.4-9", + "version": "1.18.4-10", "dependencies": { "@aws-sdk/client-athena": "3.933.0", "@planetscale/database": "1.19.0", @@ -931,7 +931,7 @@ }, "packages/stats/server": { "name": "@opencode-ai/stats-server", - "version": "1.18.4-9", + "version": "1.18.4-10", "dependencies": { "@aws-sdk/client-firehose": "3.933.0", "@effect/platform-node": "catalog:", @@ -973,7 +973,7 @@ }, "packages/tui": { "name": "@opencode-ai/tui", - "version": "1.18.4-9", + "version": "1.18.4-10", "dependencies": { "@codev/brand": "workspace:*", "@codev/gateway": "workspace:*", @@ -1002,7 +1002,7 @@ }, "packages/ui": { "name": "@opencode-ai/ui", - "version": "1.18.4-9", + "version": "1.18.4-10", "dependencies": { "@kobalte/core": "catalog:", "@pierre/diffs": "catalog:", diff --git a/packages/app/package.json b/packages/app/package.json index e09a8c0720..73843c1986 100644 --- a/packages/app/package.json +++ b/packages/app/package.json @@ -1,6 +1,6 @@ { "name": "@opencode-ai/app", - "version": "1.18.4-9", + "version": "1.18.4-10", "description": "", "type": "module", "exports": { diff --git a/packages/cli/package.json b/packages/cli/package.json index 09269cc013..a17ac774df 100644 --- a/packages/cli/package.json +++ b/packages/cli/package.json @@ -1,7 +1,7 @@ { "$schema": "https://json.schemastore.org/package.json", "name": "@opencode-ai/cli", - "version": "1.18.4-9", + "version": "1.18.4-10", "type": "module", "license": "MIT", "bin": { diff --git a/packages/codemode/package.json b/packages/codemode/package.json index cd1d9c3a6f..a93e509a94 100644 --- a/packages/codemode/package.json +++ b/packages/codemode/package.json @@ -1,7 +1,7 @@ { "$schema": "https://json.schemastore.org/package.json", "name": "@opencode-ai/codemode", - "version": "1.18.4-9", + "version": "1.18.4-10", "description": "Effect-native confined code execution over schema-described tools", "private": true, "type": "module", diff --git a/packages/console/app/package.json b/packages/console/app/package.json index b92ec21974..c5bb7a8953 100644 --- a/packages/console/app/package.json +++ b/packages/console/app/package.json @@ -1,6 +1,6 @@ { "name": "@opencode-ai/console-app", - "version": "1.18.4-9", + "version": "1.18.4-10", "type": "module", "license": "MIT", "scripts": { diff --git a/packages/console/core/package.json b/packages/console/core/package.json index 6f1e3ad2c5..3f43f6b714 100644 --- a/packages/console/core/package.json +++ b/packages/console/core/package.json @@ -1,7 +1,7 @@ { "$schema": "https://json.schemastore.org/package.json", "name": "@opencode-ai/console-core", - "version": "1.18.4-9", + "version": "1.18.4-10", "private": true, "type": "module", "license": "MIT", diff --git a/packages/console/function/package.json b/packages/console/function/package.json index cb2a92be16..99274b386a 100644 --- a/packages/console/function/package.json +++ b/packages/console/function/package.json @@ -1,6 +1,6 @@ { "name": "@opencode-ai/console-function", - "version": "1.18.4-9", + "version": "1.18.4-10", "$schema": "https://json.schemastore.org/package.json", "private": true, "type": "module", diff --git a/packages/console/mail/package.json b/packages/console/mail/package.json index 580046c581..f759b60cfc 100644 --- a/packages/console/mail/package.json +++ b/packages/console/mail/package.json @@ -1,6 +1,6 @@ { "name": "@opencode-ai/console-mail", - "version": "1.18.4-9", + "version": "1.18.4-10", "dependencies": { "@jsx-email/all": "2.2.3", "@jsx-email/cli": "1.4.3", diff --git a/packages/console/support/package.json b/packages/console/support/package.json index c2058a9e9a..ea7aaf3c0c 100644 --- a/packages/console/support/package.json +++ b/packages/console/support/package.json @@ -1,6 +1,6 @@ { "name": "@opencode-ai/console-support", - "version": "1.18.4-9", + "version": "1.18.4-10", "type": "module", "license": "MIT", "scripts": { diff --git a/packages/core/package.json b/packages/core/package.json index 6c6b38ba59..48095a83df 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -1,6 +1,6 @@ { "$schema": "https://json.schemastore.org/package.json", - "version": "1.18.4-9", + "version": "1.18.4-10", "name": "@opencode-ai/core", "type": "module", "license": "MIT", diff --git a/packages/desktop/package.json b/packages/desktop/package.json index e084a491e1..dd280be21f 100644 --- a/packages/desktop/package.json +++ b/packages/desktop/package.json @@ -1,7 +1,7 @@ { "name": "@opencode-ai/desktop", "private": true, - "version": "1.18.4-9", + "version": "1.18.4-10", "type": "module", "license": "MIT", "homepage": "https://github.com/quickbeard/codev-code", diff --git a/packages/effect-drizzle-sqlite/package.json b/packages/effect-drizzle-sqlite/package.json index ab10866e9e..ced58502cc 100644 --- a/packages/effect-drizzle-sqlite/package.json +++ b/packages/effect-drizzle-sqlite/package.json @@ -1,6 +1,6 @@ { "$schema": "https://json.schemastore.org/package.json", - "version": "1.18.4-9", + "version": "1.18.4-10", "name": "@opencode-ai/effect-drizzle-sqlite", "type": "module", "license": "MIT", diff --git a/packages/effect-sqlite-node/package.json b/packages/effect-sqlite-node/package.json index a444afef64..ab4eee7aef 100644 --- a/packages/effect-sqlite-node/package.json +++ b/packages/effect-sqlite-node/package.json @@ -1,6 +1,6 @@ { "$schema": "https://json.schemastore.org/package.json", - "version": "1.18.4-9", + "version": "1.18.4-10", "name": "@opencode-ai/effect-sqlite-node", "type": "module", "license": "MIT", diff --git a/packages/enterprise/package.json b/packages/enterprise/package.json index b9108e67c4..a5875a79b9 100644 --- a/packages/enterprise/package.json +++ b/packages/enterprise/package.json @@ -1,6 +1,6 @@ { "name": "@opencode-ai/enterprise", - "version": "1.18.4-9", + "version": "1.18.4-10", "private": true, "type": "module", "license": "MIT", diff --git a/packages/function/package.json b/packages/function/package.json index fb13059c53..8bf2d612a5 100644 --- a/packages/function/package.json +++ b/packages/function/package.json @@ -1,6 +1,6 @@ { "name": "@opencode-ai/function", - "version": "1.18.4-9", + "version": "1.18.4-10", "$schema": "https://json.schemastore.org/package.json", "private": true, "type": "module", diff --git a/packages/http-recorder/package.json b/packages/http-recorder/package.json index 287d6fd2a3..9e26a8053e 100644 --- a/packages/http-recorder/package.json +++ b/packages/http-recorder/package.json @@ -1,6 +1,6 @@ { "$schema": "https://json.schemastore.org/package.json", - "version": "1.18.4-9", + "version": "1.18.4-10", "name": "@opencode-ai/http-recorder", "description": "Record and replay Effect HTTP client traffic with deterministic cassettes", "type": "module", diff --git a/packages/llm/package.json b/packages/llm/package.json index 2c6753d4eb..7dcb091e1c 100644 --- a/packages/llm/package.json +++ b/packages/llm/package.json @@ -1,6 +1,6 @@ { "$schema": "https://json.schemastore.org/package.json", - "version": "1.18.4-9", + "version": "1.18.4-10", "name": "@opencode-ai/llm", "type": "module", "license": "MIT", diff --git a/packages/opencode/package.json b/packages/opencode/package.json index 8d2e63b403..a191111f5a 100644 --- a/packages/opencode/package.json +++ b/packages/opencode/package.json @@ -1,6 +1,6 @@ { "$schema": "https://json.schemastore.org/package.json", - "version": "1.18.4-9", + "version": "1.18.4-10", "name": "opencode", "type": "module", "license": "MIT", diff --git a/packages/plugin/package.json b/packages/plugin/package.json index 85752b0076..6c176e4b48 100644 --- a/packages/plugin/package.json +++ b/packages/plugin/package.json @@ -1,7 +1,7 @@ { "$schema": "https://json.schemastore.org/package.json", "name": "@opencode-ai/plugin", - "version": "1.18.4-9", + "version": "1.18.4-10", "type": "module", "license": "MIT", "scripts": { diff --git a/packages/sdk/js/package.json b/packages/sdk/js/package.json index fef3bf6cd7..0ce291589d 100644 --- a/packages/sdk/js/package.json +++ b/packages/sdk/js/package.json @@ -1,7 +1,7 @@ { "$schema": "https://json.schemastore.org/package.json", "name": "@opencode-ai/sdk", - "version": "1.18.4-9", + "version": "1.18.4-10", "type": "module", "license": "MIT", "scripts": { diff --git a/packages/server/package.json b/packages/server/package.json index eaa336b122..1c74d617d5 100644 --- a/packages/server/package.json +++ b/packages/server/package.json @@ -1,7 +1,7 @@ { "$schema": "https://json.schemastore.org/package.json", "name": "@opencode-ai/server", - "version": "1.18.4-9", + "version": "1.18.4-10", "private": true, "type": "module", "license": "MIT", diff --git a/packages/session-ui/package.json b/packages/session-ui/package.json index c9f7dfdb26..6d092aa658 100644 --- a/packages/session-ui/package.json +++ b/packages/session-ui/package.json @@ -1,6 +1,6 @@ { "name": "@opencode-ai/session-ui", - "version": "1.18.4-9", + "version": "1.18.4-10", "private": true, "type": "module", "license": "MIT", diff --git a/packages/slack/package.json b/packages/slack/package.json index 11a18af791..ab3be57b6a 100644 --- a/packages/slack/package.json +++ b/packages/slack/package.json @@ -1,6 +1,6 @@ { "name": "@opencode-ai/slack", - "version": "1.18.4-9", + "version": "1.18.4-10", "type": "module", "license": "MIT", "scripts": { diff --git a/packages/stats/app/package.json b/packages/stats/app/package.json index 4d000f3779..89aebfb780 100644 --- a/packages/stats/app/package.json +++ b/packages/stats/app/package.json @@ -1,7 +1,7 @@ { "$schema": "https://json.schemastore.org/package.json", "name": "@opencode-ai/stats-app", - "version": "1.18.4-9", + "version": "1.18.4-10", "private": true, "type": "module", "license": "MIT", diff --git a/packages/stats/core/package.json b/packages/stats/core/package.json index 5a438cf394..e813662eb8 100644 --- a/packages/stats/core/package.json +++ b/packages/stats/core/package.json @@ -1,7 +1,7 @@ { "$schema": "https://json.schemastore.org/package.json", "name": "@opencode-ai/stats-core", - "version": "1.18.4-9", + "version": "1.18.4-10", "private": true, "type": "module", "license": "MIT", diff --git a/packages/stats/server/package.json b/packages/stats/server/package.json index 5cc1c1ffdf..6f4ff12fe0 100644 --- a/packages/stats/server/package.json +++ b/packages/stats/server/package.json @@ -1,7 +1,7 @@ { "$schema": "https://json.schemastore.org/package.json", "name": "@opencode-ai/stats-server", - "version": "1.18.4-9", + "version": "1.18.4-10", "private": true, "type": "module", "license": "MIT", diff --git a/packages/tui/package.json b/packages/tui/package.json index d4ac26bbb1..37b06101d6 100644 --- a/packages/tui/package.json +++ b/packages/tui/package.json @@ -1,7 +1,7 @@ { "$schema": "https://json.schemastore.org/package.json", "name": "@opencode-ai/tui", - "version": "1.18.4-9", + "version": "1.18.4-10", "private": true, "type": "module", "license": "MIT", diff --git a/packages/ui/package.json b/packages/ui/package.json index d33be37d61..6067fc4627 100644 --- a/packages/ui/package.json +++ b/packages/ui/package.json @@ -1,6 +1,6 @@ { "name": "@opencode-ai/ui", - "version": "1.18.4-9", + "version": "1.18.4-10", "type": "module", "license": "MIT", "repository": { diff --git a/sdks/vscode/package.json b/sdks/vscode/package.json index 637d9ab5be..f5ae3def94 100644 --- a/sdks/vscode/package.json +++ b/sdks/vscode/package.json @@ -2,7 +2,7 @@ "name": "codev-code", "displayName": "CoDev Code", "description": "CoDev Code for VS Code", - "version": "1.18.4-9", + "version": "1.18.4-10", "publisher": "CoDev", "repository": { "type": "git", From 0e0c389da9451d72bdfd7c00e61ec21b3875a1f5 Mon Sep 17 00:00:00 2001 From: minhn4 Date: Thu, 20 Aug 2026 23:34:21 +0700 Subject: [PATCH 2/3] docs: link every unreleased changelog entry to its PRs Co-Authored-By: Claude Opus 5 (1M context) --- CHANGELOG.md | 90 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 90 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 0e545e8780..954bbfa7e5 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -13,6 +13,7 @@ file is the human-readable summary of what changed and why. carried a redundant copy of themselves: a second, nested copy of the same tarball, packed in by accident whenever a release was retried. Removing it takes each platform package from ~112MB back to ~55MB. + ([#250](https://github.com/quickbeard/codev-code/pull/250)) - **The desktop app installs to a folder named after CoDev** — on Windows it installed itself into `%LOCALAPPDATA%\Programs\@opencode-aidesktop`, and kept its downloaded updates in `@opencode-aidesktop-updater` beside it. Both names @@ -28,6 +29,7 @@ file is the human-readable summary of what changed and why. had downloaded an update leaves the old cache folder behind, which is safe to delete. Linux and macOS are unaffected: the `.deb` package name is already `codev`, and nothing on macOS is derived from this name. + ([#266](https://github.com/quickbeard/codev-code/pull/266)) - **You can choose where the Windows installer puts CoDev** — it installed itself wherever it liked and gave you no say: one screen, no questions, done. It now asks two. First whether to install for everyone on the computer or @@ -37,15 +39,18 @@ file is the human-readable summary of what changed and why. about where programs live is no longer stuck. Updates are unaffected: they still install quietly in the background and never re-ask, because an update reuses the location you picked. + ([#268](https://github.com/quickbeard/codev-code/pull/268)) - **CoDev is listed as "CoDev", not "CoDev 1.18.4-8"** — the entry in Windows Settings → Apps carried its version number in the name, which that list already shows in its own Version column. It is just the app's name now, and it stops looking out of date the moment you update. + ([#269](https://github.com/quickbeard/codev-code/pull/269)) - **One less redundant line in the installer** — the page that asks who to install for explained the choice you had just been offered: picking "Only for me" added "Fresh install for current user only." underneath it. The line for installing for everyone stays, because it says something the choice itself does not — that Windows will ask for administrator approval. + ([#269](https://github.com/quickbeard/codev-code/pull/269)) ### Updates @@ -59,12 +64,15 @@ file is the human-readable summary of what changed and why. still works with both switches off; it is the one check that was always yours to ask for. There was a translated "Check for updates on startup" setting in the app that no screen ever showed; these two replace it. + ([#265](https://github.com/quickbeard/codev-code/pull/265)) - **The update feed moved** — it is now `codev-storage/codev` rather than `codev-storage/codev-code`, and each release's installers sit in their own `` folder beneath it instead of overwriting the previous release. Builds already installed keep updating: the new location ships in the next build's `app-update.yml`, so the change reaches a machine with the update that carries it. + ([#265](https://github.com/quickbeard/codev-code/pull/265), + [#270](https://github.com/quickbeard/codev-code/pull/270)) ### Sessions @@ -82,6 +90,7 @@ file is the human-readable summary of what changed and why. had simply decided to stop. Mid-stream connection resets, which were previously treated as unexplainable and never retried, now retry like any other network failure. + ([#281](https://github.com/quickbeard/codev-code/pull/281)) - **Retries leave a record in the conversation** — the "retrying — attempt #N" countdown only existed while it was happening: once a retry succeeded it @@ -90,6 +99,7 @@ file is the human-readable summary of what changed and why. retry now leaves a small note in the transcript at the point where it happened, showing what failed and which attempt it was — kept whether the retry recovered or the turn ultimately failed with an error. + ([#281](https://github.com/quickbeard/codev-code/pull/281)) ### Sandbox @@ -112,6 +122,7 @@ side closed` while the Code side worked fine. The guest now checks which sandbox's own server, the one direction Windows does not firewall, and model traffic rides those app-initiated connections. Work sessions now function on locked-down corporate machines with nothing to configure. + ([#280](https://github.com/quickbeard/codev-code/pull/280)) - **CoDev installs WSL for you when a sandbox needs it** — a sandbox on Windows runs inside WSL 2, and a computer without it got a dead end: the create-sandbox @@ -132,6 +143,7 @@ side closed` while the Code side worked fine. The guest now checks which was Intel-only. A computer whose Windows is too old for the installer is now told so — naming its build and the one it needs — before it downloads anything, instead of after the install fails. + ([#264](https://github.com/quickbeard/codev-code/pull/264)) - **Installing WSL now says when Windows must restart first** — on a computer that never had WSL 2, the install enables a Windows feature that only starts @@ -159,6 +171,7 @@ side closed` while the Code side worked fine. The guest now checks which the app wasn't reading — with a hint to restart Windows, or to enable virtualization in the machine's BIOS/UEFI settings, when what failed is WSL 2's virtual machine starting up. + ([#273](https://github.com/quickbeard/codev-code/pull/273)) - **Work no longer offers to run a session in a workspace** — the new-session screen's "Local" chip creates a git worktree on the machine the session runs @@ -167,6 +180,7 @@ side closed` while the Code side worked fine. The guest now checks which "Local repository" wording said the opposite. Work now shows the branch on its own, the way it already did for a project that is not in git. Code is unchanged. + ([#263](https://github.com/quickbeard/codev-code/pull/263)) - **A new session in Work only offers Work's projects** — the project picker on the new-session screen listed every project on the computer, grouped under "Local Server" beside the sandbox's own, even though you had reached that @@ -176,11 +190,13 @@ side closed` while the Code side worked fine. The guest now checks which Its "Add project" entry has become "Mount project" and opens the same dialog the Work sidebar does: adding a project to a sandbox means giving it a folder from this computer, where the old entry browsed the sandbox's own insides. + ([#263](https://github.com/quickbeard/codev-code/pull/263)) - **Work says when the sandbox failed to start** — the Work sidebar showed "Your sandbox is not running yet. It appears here once it is ready." for a sandbox that had already failed to boot, so the only way to learn something went wrong was to go looking in Settings → Servers. The empty state now says the sandbox failed, shows the failure message, and offers a retry in place. + ([#262](https://github.com/quickbeard/codev-code/pull/262)) - **Unmounting a folder takes its sessions with it** — a session you had started in a mounted folder stayed open after you unmounted that folder, and followed you into whatever folder you mounted next: the conversation was on @@ -189,6 +205,7 @@ side closed` while the Code side worked fine. The guest now checks which drafts along with its project row, whether you unmount from the folder's own menu or by removing it in the Mount project dialog. The sessions themselves are still inside the sandbox; mounting the folder again brings them back. + ([#260](https://github.com/quickbeard/codev-code/pull/260)) - **Work sets its sandbox up for you** — going to Work without a sandbox used to open the full Add sandbox form: a name, a folder, an image, and on a Mac a CPU count and a memory size, all before anything could happen. The folder @@ -202,6 +219,7 @@ side closed` while the Code side worked fine. The guest now checks which own scratch folder is the app's business and is not shown to you anywhere, including in the Mount project dialog. Settings → Servers keeps the full form for a second sandbox, or one pointed at a particular folder from the start. + ([#260](https://github.com/quickbeard/codev-code/pull/260)) - **Sessions in a sandbox survive stopping it** — anything the sandbox had written in the seconds before it stopped was thrown away: stop a sandbox, or add a folder to one (which restarts it), or quit the app, and the sessions @@ -211,11 +229,13 @@ side closed` while the Code side worked fine. The guest now checks which reached the disk. A sandbox now commits its work to disk as it goes. Older sessions were never lost — only the newest ones, and only the ones that had not been written out yet. + ([#248](https://github.com/quickbeard/codev-code/pull/248)) - **A sandbox starts again after the app is force quit** — force quitting the app (or a crash) left a file behind that the sandbox needed to create on its next start, so the sandbox failed to start from then on, with `address already in use` and no way forward short of finding the file in a temporary directory and deleting it. That leftover is now cleared on the next start. + ([#248](https://github.com/quickbeard/codev-code/pull/248)) ### Desktop / Web UI @@ -244,6 +264,7 @@ already in use` and no way forward short of finding the file in a temporary Switching to Code now also lands on its last-used project rather than whichever one happened to be listed first. Only the desktop app changes; the web UI has no Code/Work split and keeps its single tab list. + ([#279](https://github.com/quickbeard/codev-code/pull/279)) - **Switching to Code brings Code's tabs back** — once you had visited **Work**, the tab strip stayed pinned to the sandbox folder you left: switching to **Code** kept Work's tabs across the top of a Code session, @@ -251,6 +272,7 @@ already in use` and no way forward short of finding the file in a temporary the sandbox rather than in the project on screen. The hold that keeps the strip still while a sandbox restarts no longer applies after you switch sides. + ([#275](https://github.com/quickbeard/codev-code/pull/275)) - **Deleting the session you are reading takes you to the next one** — the screen stayed on the session that had just been deleted, saying "This session cannot be found" and offering nothing but **Close Tab**. Deleting the session @@ -260,6 +282,7 @@ already in use` and no way forward short of finding the file in a temporary with it — no leftover **Unknown Session** tab to close by hand. Deleting a session you are not currently in still just removes it and its tab, leaving you where you were. Both **Code** and **Work**. + ([#276](https://github.com/quickbeard/codev-code/pull/276)) - **A folder on Work is unmounted from its own menu** — the menu on a **Work** project offered **Close**, which only took the row out of the sidebar while the sandbox went on holding the folder: the folder was still mounted, still @@ -270,6 +293,7 @@ already in use` and no way forward short of finding the file in a temporary its life, so its menu offers neither; deleting the sandbox is still the way to be rid of that one. On macOS and Linux unmounting restarts the sandbox, as it does from the Folders… dialog. **Code** keeps Close, unchanged. + ([#256](https://github.com/quickbeard/codev-code/pull/256)) - **Work stops borrowing Code's sessions before its sandbox is ready** — while a sandbox is being created or started, the **Work** side has no server of its own, and the sidebar filled **Pinned** and **Recents** with the local @@ -278,6 +302,7 @@ already in use` and no way forward short of finding the file in a temporary now stay empty next to the message explaining the sandbox is not ready, and switching to a side with nothing connected lands on its home screen instead of the other side's session. + ([#256](https://github.com/quickbeard/codev-code/pull/256)) - **A restarting sandbox no longer shows you the wrong machine** — mounting or unmounting a folder restarts the sandbox, and while it was away a **New session** tab belonging to it quietly rendered the local machine's composer: @@ -289,9 +314,11 @@ already in use` and no way forward short of finding the file in a temporary tab strip briefly widened to every folder of the sandbox. Both now hold still — the sections stay empty beside "Your sandbox is not running yet", and the strip keeps the folder you were in. + ([#256](https://github.com/quickbeard/codev-code/pull/256)) - **Deleting a sandbox now looks destructive** — **Delete** in a sandbox's menu (Settings → Servers) sat in the same colour as Reset and Mount project. It is now red, matching ordinary and WSL servers. + ([#256](https://github.com/quickbeard/codev-code/pull/256)) - **A new sandbox's project no longer flashes "workspace"** — a sandbox's project folder is mounted inside the guest at a fixed path, and until the app finished renaming the project after your folder — a round trip through @@ -300,6 +327,7 @@ already in use` and no way forward short of finding the file in a temporary came from, so an unnamed sandbox project now shows the real folder name from the first moment; the rename still happens underneath and any name you set yourself still wins. + ([#258](https://github.com/quickbeard/codev-code/pull/258)) - **Deleting a sandbox now asks for confirmation and spells out what is lost** — Delete in a sandbox's menu acted immediately, and it is nothing like removing an ordinary server entry: it erases the sandbox's disk, taking @@ -307,6 +335,7 @@ already in use` and no way forward short of finding the file in a temporary now states exactly that before anything happens — and clarifies that folders mounted from this computer are not deleted, the sandbox just loses access to them. + ([#255](https://github.com/quickbeard/codev-code/pull/255)) - **Removing a WSL server asks for confirmation and forgets its projects** — the same treatment as sandboxes, adapted to what actually happens: removing a WSL server deletes nothing — the distribution, its files and its sessions @@ -314,6 +343,7 @@ already in use` and no way forward short of finding the file in a temporary now says so before removing it, and clears the server's remembered projects and recently closed folders so adding the distribution back starts with a clean list instead of inheriting its previous life. + ([#257](https://github.com/quickbeard/codev-code/pull/257)) - **A recreated sandbox no longer inherits its predecessor's projects** — deleting a sandbox left its project list behind, keyed by the sandbox's name, so creating a new sandbox with the same name brought back every old @@ -322,6 +352,7 @@ already in use` and no way forward short of finding the file in a temporary same path had been closed in the old sandbox's life. Deleting a sandbox now clears its remembered projects, last-selected project, and recently closed folders, so a same-named successor starts clean. + ([#255](https://github.com/quickbeard/codev-code/pull/255)) - **The Mount project dialog can no longer silently unmount everything** — opened moments after launch, before the sandbox state had loaded, the dialog showed the mounted folders as an empty list: the list was captured once when @@ -330,6 +361,7 @@ already in use` and no way forward short of finding the file in a temporary quietly unmounting every extra folder — while their projects stayed in the sidebar, still looking mounted. The dialog now waits for the sandbox's state before it builds the folder list. + ([#254](https://github.com/quickbeard/codev-code/pull/254)) - **The Work sidebar's folder button now mounts a folder into the sandbox** — the button next to **Projects** on the Work side used to open a directory picker over the sandbox's own filesystem, the same "Add project" it is on @@ -339,6 +371,7 @@ already in use` and no way forward short of finding the file in a temporary project** to match. The dialog's title follows suit (it was **Sandbox folders**), and its intro line no longer warns that the agent edits mounted files without asking. Code keeps the existing Add project behavior. + ([#254](https://github.com/quickbeard/codev-code/pull/254)) - **First-run setup on the desktop app** — with no AI provider configured, the desktop app now opens a setup dialog that cannot be dismissed until a provider exists, offering the same three paths as the CLI's `codev @@ -348,6 +381,7 @@ configure`: **Login with SSO** (sign in with your CoDev account in the endpoint), or **Connect provider** (Anthropic, OpenAI, and others). The gate applies to the local server only; escaping any sub-flow returns to it, and finishing setup in another window (or in the CLI) closes it automatically. + ([#238](https://github.com/quickbeard/codev-code/pull/238)) - **Sandboxes offer every model your gateway does** — a sandbox was built from the single model recorded when you signed in, so **Work** offered one model while **Code** offered the whole list. Each sandbox now asks the gateway for @@ -355,6 +389,7 @@ configure`: **Login with SSO** (sign in with your CoDev account in the across sandboxes and only looked up again after you sign in again, and a gateway that cannot be reached costs a shorter model list rather than a sandbox that will not start. + ([#253](https://github.com/quickbeard/codev-code/pull/253)) - **Signing in now reaches your sandboxes too** — a sandbox is handed its model provider when it starts, so signing in afterwards left **Work** with no model at all while **Code** had the one you just picked, and the only way to fix it @@ -363,11 +398,13 @@ configure`: **Login with SSO** (sign in with your CoDev account in the Only sandboxes that are running are touched, and nothing is interrupted: setup is only offered while no provider is configured, so those sandboxes had no model to work with either. + ([#238](https://github.com/quickbeard/codev-code/pull/238)) - **Upstream's hosted providers are no longer offered** — the OpenCode Zen free models and OpenCode Go no longer appear anywhere in the desktop or web UI (model pickers, connect dialog, settings), and a fresh install no longer silently chats against them: with nothing configured there is now no model to pick until a provider is set up. + ([#238](https://github.com/quickbeard/codev-code/pull/238)) - **Selecting a folder no longer lands on "This session cannot be found"** — the app remembers the session you were last in for each folder of a sandbox, and it kept sending you there after the session itself was gone: resetting a @@ -381,16 +418,19 @@ configure`: **Login with SSO** (sign in with your CoDev account in the between **Code** and **Work** goes through the same check. A session that is merely unreachable for a moment still keeps its place; only one the server says is gone is passed over. + ([#252](https://github.com/quickbeard/codev-code/pull/252)) - **Deleting a server now looks destructive** — **Delete** in a server's menu sat in the same colour as Edit and Set as default, giving the one irreversible action in the menu no more weight than the rest. It is now red, matching Delete in a session's menu, for both ordinary servers and WSL ones. + ([#251](https://github.com/quickbeard/codev-code/pull/251)) - **Closing a folder on Work now actually closes it** — closing a mounted folder from a **Work** project's menu removed it from the list and then put it straight back, so there was no way to get a folder off the list at all. Two separate causes, both fixed: the close was recorded in two steps and the app reacted to the moment in between, and a folder you had never started a session in was not recognised as one you had closed. + ([#251](https://github.com/quickbeard/codev-code/pull/251)) - **Each folder in a sandbox now has its own session tabs** — a sandbox can mount several folders, but all of their sessions shared one tab strip on the **Work** side, so working in two folders meant reading past the other one's @@ -407,6 +447,7 @@ configure`: **Login with SSO** (sign in with your CoDev account in the sandbox's tabs are not in the strip — selecting that sandbox brings them back. Existing tabs keep their place; anything the app cannot immediately match to a folder stays visible in that sandbox until it can. Code is unchanged. + ([#239](https://github.com/quickbeard/codev-code/pull/239)) - **Adding a folder to a sandbox no longer freezes the app** — mounting a new folder on a sandbox you had a session open on locked the window up entirely: no clicks, no typing, force quit the only way out. Applying a mount restarts @@ -414,6 +455,7 @@ configure`: **Login with SSO** (sign in with your CoDev account in the immediately reopening it, thousands of times a second, which left it too busy to notice the sandbox had come back. Any sandbox restart was affected, not only mounting a folder. + ([#247](https://github.com/quickbeard/codev-code/pull/247)) - **Your sandbox tabs survive a sandbox restart** — a sandbox that restarts — to apply a folder you just mounted, or because you stopped and started it — is away for a second or two, and every open tab belonging to it was closed @@ -425,11 +467,13 @@ configure`: **Login with SSO** (sign in with your CoDev account in the server** while the sandbox is away — including when you open one of its tabs with the sandbox stopped, which used to claim the session could not be found — and returns on its own, with no click needed, once the sandbox is back. + ([#247](https://github.com/quickbeard/codev-code/pull/247)) - **Switching to Work with no sandbox explains itself** — clicking **Work** before you have a sandbox opens the Add sandbox dialog, which was a dialog you did not ask for with nothing to say about why it appeared. It now leads with the reason: Work requires a sandbox environment to run sessions. Reaching the same dialog deliberately, from Settings, is unchanged. + ([#246](https://github.com/quickbeard/codev-code/pull/246)) - **The CPU and memory fields explain themselves** — the Add sandbox dialog offered two unlabelled optional boxes with no hint of what a sandbox gets if you leave them empty, and the memory box ran past the edge of the dialog. @@ -438,6 +482,7 @@ configure`: **Login with SSO** (sign in with your CoDev account in the drops two lines that were not earning their space. The fields appear only on macOS, where each sandbox is its own virtual machine and the limits actually apply. + ([#245](https://github.com/quickbeard/codev-code/pull/245)) - **Deleting a sandbox no longer breaks the app** — deleting a sandbox while one of its sessions was open could take the whole window down to the "Something went wrong" screen, and because the app reopens whatever you were @@ -445,9 +490,11 @@ configure`: **Login with SSO** (sign in with your CoDev account in the to the home screen when the thing a route points at is gone, so a deleted sandbox (or any removed server) closes cleanly and a stale link cannot wedge the app on startup. + ([#244](https://github.com/quickbeard/codev-code/pull/244)) - **"Waiting for another sandbox" no longer flashes when nothing is waiting** — a create, reset, or delete with nothing queued ahead of it briefly announced itself as waiting for another sandbox before starting. + ([#244](https://github.com/quickbeard/codev-code/pull/244)) - **A sandbox can be created from an image file you already have** — creating a sandbox always downloaded its environment, which is well over a gigabyte and impossible on a machine with no route to the internet. **Add sandbox** @@ -460,12 +507,14 @@ configure`: **Login with SSO** (sign in with your CoDev account in the different kind of processor (an Intel image on an Apple-silicon Mac). The file is read where it sits rather than copied, and it is remembered, so resetting the sandbox rebuilds it from the same file. + ([#243](https://github.com/quickbeard/codev-code/pull/243)) - **The sandbox name is checked as you type** — a name that was already taken, or too long for the environments it names, was only rejected once creation had started, which on a fresh machine meant waiting out a large download first. Duplicate names, over-long names, and characters that are unsafe in a Windows distribution or a folder name are now caught in the dialog, with a message saying what to change. + ([#243](https://github.com/quickbeard/codev-code/pull/243)) - **The office skills now work inside a sandbox** — the document skills (Word, Excel, PowerPoint, PDF) were installed into the sandbox image, but several pieces they depend on were not, so they failed once you actually @@ -481,6 +530,8 @@ configure`: **Login with SSO** (sign in with your CoDev account in the the build happened to pick up. **Requires the updated sandbox image**: use a sandbox's **Reset** button to pick it up. Sandboxes are noticeably larger to download as a result. + ([#242](https://github.com/quickbeard/codev-code/pull/242), + [#278](https://github.com/quickbeard/codev-code/pull/278)) - **Sandboxes can be stopped** — a sandbox ran from the moment the app started until it was deleted, and every sandbox on the machine booted at launch, so three sandboxes meant three virtual machines holding memory and CPU whether @@ -490,6 +541,7 @@ configure`: **Login with SSO** (sign in with your CoDev account in the sandbox stays stopped when the app is relaunched, so a machine only runs the sandboxes you actually want running. **Start** in the same menu brings it back, and resetting a stopped sandbox rebuilds it without starting it. + ([#241](https://github.com/quickbeard/codev-code/pull/241)) - **Working on one sandbox no longer cancels another one's work** — creating, resetting, and deleting a sandbox all ran as a single operation with no regard for which sandbox they belonged to, so starting one cancelled @@ -499,6 +551,7 @@ configure`: **Login with SSO** (sign in with your CoDev account in the queue: each one runs in turn and finishes. A sandbox waiting its turn says so, and cancelling it (or the **Cancel** button in the Add sandbox dialog) still takes effect immediately without disturbing whatever is running. + ([#241](https://github.com/quickbeard/codev-code/pull/241)) - **A stalling disk can no longer freeze the app** — saving any setting (window layout, server list, sandbox folders) used to write to disk synchronously on the app's main thread. If the operating system's disk @@ -508,6 +561,7 @@ configure`: **Login with SSO** (sign in with your CoDev account in the background: the app stays responsive through a disk stall and the save lands when the disk recovers. On quit and relaunch, pending saves get a bounded window to finish so a wedged disk cannot hang shutdown either. + ([#237](https://github.com/quickbeard/codev-code/pull/237)) - **Sandboxes can mount more folders after creation** — a sandbox used to be locked to the one project folder chosen when it was created. Each sandbox now has a **Folders…** entry in its menu (Settings → Servers) to mount @@ -519,6 +573,9 @@ configure`: **Login with SSO** (sign in with your CoDev account in the **On macOS this requires the updated sandbox image** — if a folder does not appear inside the sandbox after saving, use the sandbox's **Reset** button to pick the new image up. + ([#233](https://github.com/quickbeard/codev-code/pull/233), + [#235](https://github.com/quickbeard/codev-code/pull/235), + [#236](https://github.com/quickbeard/codev-code/pull/236)) - **The desktop app is now called "CoDev"** — the app spans Work alongside Code, so the "Code" suffix no longer described it. The installed app on macOS, Windows, and Linux, the window title, menus, dialogs, and all in-app @@ -528,18 +585,21 @@ configure`: **Login with SSO** (sign in with your CoDev account in the new name with the next update. On macOS an existing install keeps its `CoDev Code.app` bundle name on disk (updates replace the app in place); fresh installs get `CoDev.app`. + ([#231](https://github.com/quickbeard/codev-code/pull/231)) - **A project's live updates no longer die with the first view that opened it** — the event subscription for a directory was owned by whichever tab or view touched that directory first, so closing that one could silently stop live updates (new messages, session changes) for every other view of the same directory until they were all closed and reopened. The subscription now lives as long as anything is using it. + ([#232](https://github.com/quickbeard/codev-code/pull/232)) - **Debug logs now capture what the app actually reported** — renderer log lines with structured data reached the dev terminal and the exported debug bundle as `[object Object]`; they now carry the data. A connection blip while a server restarts (a sandbox reset, the app relaunching its server) no longer logs an error — only a connection that keeps failing does — and two harmless browser notices no longer show up as errors in the dev terminal. + ([#232](https://github.com/quickbeard/codev-code/pull/232)) - **New sessions show up in Recents right away** — starting a session left the sidebar's Recents list unchanged; the session only appeared once something made that list reload, which is why switching between Code and Work and back @@ -547,6 +607,7 @@ configure`: **Login with SSO** (sign in with your CoDev account in the title lands in it as soon as the model picks one instead of waiting for the next reload. This was most obvious in Work, where there is less to nudge the list into reloading, but Code was affected the same way. + ([#229](https://github.com/quickbeard/codev-code/pull/229)) - **Windows sandboxes are now firewalled** — on macOS and Linux the sandbox guest has no network device at all, but a WSL guest shares Windows' network, so a Windows sandbox could previously reach the internet directly. The @@ -558,6 +619,7 @@ configure`: **Login with SSO** (sign in with your CoDev account in the open. **Requires the updated sandbox image** — after updating, use a sandbox's **Reset** button to pick it up; a sandbox still on the old image fails to start with "nft is missing from the guest image". + ([#227](https://github.com/quickbeard/codev-code/pull/227)) - **Two Windows sandboxes no longer cross their model traffic** — every WSL sandbox parked its in-guest relay on the same port, but all WSL distributions share one loopback, so with two sandboxes running the second @@ -565,6 +627,7 @@ configure`: **Login with SSO** (sign in with your CoDev account in the on the first sandbox's relay (and were rejected there). Each sandbox now gets its own relay port. macOS and Linux sandboxes were never affected — their guests do not share a loopback. + ([#228](https://github.com/quickbeard/codev-code/pull/228)) - **Chat now works inside Windows sandboxes** — every model request from a WSL sandbox failed with `Cannot connect to API: other side closed` and retried forever. The guest-side bridge that relays model traffic to the desktop app @@ -573,6 +636,7 @@ configure`: **Login with SSO** (sign in with your CoDev account in the now reaches the guest over stdin instead of the command line, and the bridge waits for the guest network on a cold start instead of grabbing whatever the route table says first. + ([#226](https://github.com/quickbeard/codev-code/pull/226)) - **Code and Work** — the sidebar now opens on two tabs. **Code** is your machine: the local server, plus any WSL, remote or SSH servers you have added. **Work** is your sandboxes. Each side keeps its own projects, pinned @@ -588,6 +652,7 @@ configure`: **Login with SSO** (sign in with your CoDev account in the session rather than a home screen, which is what the tabs now decide. The recent-sessions screen is still one click away behind the search button and the sidebar's **View all**. + ([#225](https://github.com/quickbeard/codev-code/pull/225)) - **The desktop app now identifies itself as CoDev to your operating system** — its application id changed from `ai.opencode.desktop` to `ai.codev.desktop`, its deep links from `opencode://` to `codev://`, and its Linux packages from @@ -598,6 +663,7 @@ configure`: **Login with SSO** (sign in with your CoDev account in the in your application data folder and can be deleted by hand. Any existing `opencode://` link stops working, and an installed build will not update across the rename: install the new one and remove the old. + ([#224](https://github.com/quickbeard/codev-code/pull/224)) - **A sandbox's project is named after its folder** — inside a sandbox your folder is mounted at a fixed path, so every sandbox showed the same meaningless **workspace** label in the sidebar, tabs and command palette. @@ -605,16 +671,19 @@ configure`: **Login with SSO** (sign in with your CoDev account in the a sandbox on `~/repos/codev-hub` reads **codev-hub**. Existing sandboxes pick the name up on next launch, and a project you renamed yourself is left alone. + ([#223](https://github.com/quickbeard/codev-code/pull/223)) - **The Add sandbox dialog explains the project folder** — the folder is the only part of your computer a sandbox can reach, it cannot be changed after the sandbox is created, and the agent edits files in it without asking for permission. The dialog now says so above the field instead of leaving it to be discovered. + ([#223](https://github.com/quickbeard/codev-code/pull/223)) - **Sandboxes now start on Linux** — every sandbox on Linux failed immediately with `Can't mkdir /opt/codev-bridge: Read-only file system`. The guest's `/opt` comes from the read-only image, so the sandbox could not create its own mount point inside it; the internal bridge directory moved to `/codev-bridge`. No image download or re-create is needed — existing sandboxes start as they are. + ([#218](https://github.com/quickbeard/codev-code/pull/218)) - **New session inside a sandbox now works** — a sandbox had no project of its own in the app, so **New session** had nothing to open there and quietly started the session on the local server instead: the sandbox looked selected @@ -623,6 +692,7 @@ configure`: **Login with SSO** (sign in with your CoDev account in the inside the sandbox. Nothing to configure — existing sandboxes pick it up on next launch. (You no longer have to find the folder in a directory picker that opened on the sandbox's home directory.) + ([#221](https://github.com/quickbeard/codev-code/pull/221)) - **Removing a sandbox no longer crashes the window** — deleting a sandbox that had a session tab open took the whole window down with `Notification server not found`. Tabs belonging to a removed server are now closed before its @@ -630,24 +700,28 @@ not found`. Tabs belonging to a removed server are now closed before its or crashed) stops showing its unread and attention markers instead of failing — including a tab that is drawn for the first time after its server is already gone. + ([#219](https://github.com/quickbeard/codev-code/pull/219)) - **Sandboxes run the agent as an unprivileged user** — the server inside a sandbox no longer runs as root: it drops to the image's ordinary `codev` account once the guest has finished mounting, so a sandbox escape has one less privilege to work with. Project files, the guest home, and the bundled skills all remain fully usable. On macOS this takes effect with the next published sandbox image; Windows sandboxes pick it up immediately. + ([#214](https://github.com/quickbeard/codev-code/pull/214)) - **Per-sandbox CPU and memory limits (macOS)** — the Add sandbox dialog gains optional CPUs and Memory fields, applied when the sandbox VM boots; leaving them empty keeps the previous defaults (4 CPUs, 4 GB). The fields appear only on macOS, where the VM backend can honour them: Windows sandboxes follow the VM-global limits in the user's `.wslconfig`, and the Linux backend has no per-sandbox limits. + ([#213](https://github.com/quickbeard/codev-code/pull/213)) - **The sandbox egress broker now requires a per-sandbox secret** — each running sandbox gets its own random token, injected into the guest and required on every brokered request. Without it the broker on Windows (which must listen on TCP so the guest can reach the host) would have been usable by any other process able to reach that port, spending the real gateway credential the broker attaches on the host side. + ([#220](https://github.com/quickbeard/codev-code/pull/220)) - **Named egress rules for sandboxes** — administrators can grant sandboxes extra brokered destinations beyond the model gateway by creating `sandbox-egress.json` in the app's data directory: an object of name → @@ -656,12 +730,14 @@ not found`. Tabs belonging to a removed server are now closed before its is an allowlist of named upstreams — there is deliberately no general proxy mode — and a malformed file fails the sandbox start with the parse error rather than silently granting less than intended. + ([#212](https://github.com/quickbeard/codev-code/pull/212)) - **Reset now upgrades a sandbox to the current image** — each sandbox records which image it was provisioned from. When a new image is published, Reset re-provisions from it (previously the only way to pick up a new image was deleting and re-creating the sandbox); when the image hasn't changed, Reset stays as fast as before. Creating a sandbox over stale on-disk state rebuilds it the same way. + ([#211](https://github.com/quickbeard/codev-code/pull/211)) - **Sandboxes auto-approve permissions** — inside a sandbox, everything the agent does is confined to the VM and the one mounted project folder, so permission prompts are skipped by default: sandbox projects behave as if @@ -669,6 +745,7 @@ not found`. Tabs belonging to a removed server are now closed before its task and walk away. The directory-level auto-accept toggle still works to turn it off for a given project, and a project config inside the workspace can set stricter rules. + ([#210](https://github.com/quickbeard/codev-code/pull/210)) - **Sandboxes can now talk to the model gateway** — each running sandbox gets a host-side egress broker: the guest (which has no network access of its own) reaches exactly one brokered path that forwards to the configured LLM @@ -676,6 +753,9 @@ not found`. Tabs belonging to a removed server are now closed before its enters the sandbox. The upstream call is made with the host's proxy settings, PAC scripts, and enterprise trust roots. Sandboxes created without a gateway login simply have no egress, as before. + ([#209](https://github.com/quickbeard/codev-code/pull/209), + [#215](https://github.com/quickbeard/codev-code/pull/215), + [#217](https://github.com/quickbeard/codev-code/pull/217)) - **Sandboxes (preview)** — the desktop app can now create isolated sandbox servers that run the codev server inside a lightweight VM or container @@ -686,6 +766,13 @@ not found`. Tabs belonging to a removed server are now closed before its a ready sandbox appears in the server list like any other connection. On Windows versions below Windows 11 a compatibility warning is shown but creation is never blocked. The sandbox image is downloaded on first use. + ([#196](https://github.com/quickbeard/codev-code/pull/196), + [#197](https://github.com/quickbeard/codev-code/pull/197), + [#198](https://github.com/quickbeard/codev-code/pull/198), + [#199](https://github.com/quickbeard/codev-code/pull/199), + [#201](https://github.com/quickbeard/codev-code/pull/201), + [#203](https://github.com/quickbeard/codev-code/pull/203), + [#204](https://github.com/quickbeard/codev-code/pull/204)) - **Sandbox image downloads survive unstable connections** — the multi-hundred-MB sandbox image download now resumes from where it stopped (HTTP range requests) @@ -694,6 +781,7 @@ not found`. Tabs belonging to a removed server are now closed before its resumes on the next create attempt rather than starting over, and stale partial download files are cleaned up instead of accumulating in the image cache. + ([#208](https://github.com/quickbeard/codev-code/pull/208)) - **Sandbox creation shows progress and can be cancelled** — while the image downloads, the Add sandbox dialog shows a progress bar with the downloaded @@ -701,6 +789,7 @@ not found`. Tabs belonging to a removed server are now closed before its aborts the download without registering the sandbox (already-downloaded bytes are kept, so the next attempt resumes). The dialog body also gets proper horizontal margins. + ([#208](https://github.com/quickbeard/codev-code/pull/208)) - **WSL setup no longer depends on reaching Microsoft's servers** — on Windows, **Install WSL** now downloads a pinned install bundle from the @@ -714,6 +803,7 @@ not found`. Tabs belonging to a removed server are now closed before its other distros or when the bundle is unavailable. Genuine install failures still surface as errors rather than being retried behind a second elevation prompt. + ([#202](https://github.com/quickbeard/codev-code/pull/202)) ## 1.18.4-8 From 6a77e6cac118f888f92db8c52d5bd94c3de616ef Mon Sep 17 00:00:00 2001 From: minhn4 Date: Thu, 20 Aug 2026 23:37:59 +0700 Subject: [PATCH 3/3] docs: add the three missing 1.18.4-8 changelog entries Co-Authored-By: Claude Opus 5 (1M context) --- CHANGELOG.md | 32 ++++++++++++++++++++++++++++++++ 1 file changed, 32 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 954bbfa7e5..61f1757802 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -860,6 +860,38 @@ not found`. Tabs belonging to a removed server are now closed before its [#185](https://github.com/quickbeard/codev-code/pull/185), [#189](https://github.com/quickbeard/codev-code/pull/189)) +- **One layout, one theme** — Settings → General carried a **New layout** + switch and Settings → Appearance a **Theme** picker, both inherited from + upstream: the first offered a retired interface beside the one this fork + ships, the second a set of palettes it does not ship at all. Both are gone, + and neither is merely hidden — a profile that had selected the old layout or + another theme comes up on the shipped pair instead, with the theme swapped + before the first frame is drawn so there is no flash of the old palette on + the way. Light and dark are untouched: they are the **Color scheme** setting, + which keeps its commands. The `mod+shift+t` theme cycle retires with the + picker. + ([#181](https://github.com/quickbeard/codev-code/pull/181)) + +- **New session goes to the tab you already have open** — a new session tab + stays open until you send a message in it or close it, so every press of + **New session** pushed another empty tab identical to the last one into the + strip. It now goes to the empty tab already open for that project and only + opens one when there is none — from the sidebar row, the recent-sessions + screen, a project's **New session** menu entry, the tab strip's **+** and + `mod+t` alike. That tab also opens at the front of the strip rather than the + far right, where it could sit scrolled out of view, and it keeps its place + once the session starts, so sessions accumulate newest-first. + ([#192](https://github.com/quickbeard/codev-code/pull/192)) + +- **The desktop app can update itself** — the updater looked for new versions + in a GitHub repository that has never carried a desktop build and that it + could not have read if it had, so a check could only ever come back + empty-handed. It now reads the CoDev storage host the installers are + actually published to. **Check for Updates…** is no longer macOS-only + either: it joins the **Help** menu on Windows and Linux, where Settings had + been the only place to ask. + ([#195](https://github.com/quickbeard/codev-code/pull/195)) + ### Agent - **MiniMax models get a prompt written for their class** — prompt selection