From d39886a12a32631c59cdb37602147cbd2acbc9ce Mon Sep 17 00:00:00 2001 From: CodeWhale Bot Date: Mon, 28 Sep 2026 14:22:14 -0700 Subject: [PATCH 1/4] release: v0.10.1 CHANGELOG `## [0.10.1] - 2026-09-28` with compare link; credits @gaord for #6664 and @aboimpinto for #6666, the two contributor PRs landed through integrate/0.10.1. Version pins bumped with scripts/release/prepare-release.sh 0.10.1: Feature release-note receipts OK: 27 linked issue reference(s) checked in v0.10.0..HEAD. Version state OK: workspace=0.10.1, npm=0.10.1, npm-binary=0.10.1, lockfile in sync. OHOS Windows linker wrapper contract OK; OHOS dependency graph OK. cargo fmt --check clean. Full preflight (check/clippy/test) is left to CI. Co-Authored-By: Claude Opus 5.5 (1M context) Claude-Session: https://claude.ai/code/session_014ZwqatxgVFxHvovngywnks --- CHANGELOG.md | 11 +- Cargo.lock | 54 +-- Cargo.toml | 2 +- crates/agent/Cargo.toml | 2 +- crates/app-server/Cargo.toml | 18 +- crates/cli/Cargo.toml | 28 +- crates/cloud-facts/Cargo.toml | 4 +- crates/command-contract/Cargo.toml | 2 +- crates/config/Cargo.toml | 6 +- crates/core/Cargo.toml | 10 +- crates/execpolicy/Cargo.toml | 2 +- crates/hooks/Cargo.toml | 4 +- crates/lane/Cargo.toml | 2 +- crates/localization/Cargo.toml | 2 +- crates/models/Cargo.toml | 4 +- crates/palette/Cargo.toml | 2 +- crates/runtime/Cargo.toml | 10 +- crates/secrets/Cargo.toml | 2 +- crates/state/Cargo.toml | 4 +- crates/telemetry/Cargo.toml | 10 +- crates/tools/Cargo.toml | 2 +- crates/tui/CHANGELOG.md | 596 +--------------------------- crates/tui/Cargo.toml | 46 +-- docs/INSTALL.md | 2 +- docs/public-surface-facts.json | 4 +- extensions/vscode/package-lock.json | 4 +- extensions/vscode/package.json | 2 +- npm/codewhale/package.json | 4 +- npm/runtime-sdk/package.json | 2 +- package-lock.json | 4 +- scripts/remote-smoke/setup-vm.sh | 2 +- web/lib/facts.generated.ts | 4 +- 32 files changed, 134 insertions(+), 717 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 6b93ea9b30..25652e333a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,12 +7,14 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## [Unreleased] +## [0.10.1] - 2026-09-28 + The website's not-found page now uses the Codwhale poster and typo joke, with English/Chinese recovery links to home and docs ([#6419](https://github.com/Hmbown/Codewhale/issues/6419), [#6420](https://github.com/Hmbown/Codewhale/pull/6420)). -Planned for Codewhale v0.10.1: a reliability and first-run release. Turns that +Codewhale v0.10.1 is a reliability and first-run release. Turns that stall now say so, approvals keep what you approved, plugin suggestions are quieter, and Fleet runs can be checked before they spend anything. @@ -41,9 +43,9 @@ quieter, and Fleet runs can be checked before they spend anything. ### Contributors -- **[@gaord](https://github.com/gaord)** — let a client fork a thread at a named turn ([#6580](https://github.com/Hmbown/Codewhale/pull/6580)), let undo roll back files for the turn it is undoing ([#6483](https://github.com/Hmbown/Codewhale/pull/6483)), stopped resume and fork from duplicating threads and sessions ([#6406](https://github.com/Hmbown/Codewhale/pull/6406)), and exposed user-defined provider routes to native clients ([#6404](https://github.com/Hmbown/Codewhale/pull/6404)). +- **[@gaord](https://github.com/gaord)** — let a client fork a thread at a named turn ([#6580](https://github.com/Hmbown/Codewhale/pull/6580)), let undo roll back files for the turn it is undoing ([#6483](https://github.com/Hmbown/Codewhale/pull/6483)), stopped resume and fork from duplicating threads and sessions ([#6406](https://github.com/Hmbown/Codewhale/pull/6406)), exposed user-defined provider routes to native clients ([#6404](https://github.com/Hmbown/Codewhale/pull/6404)), and kept a fork going when a turn lost its tool call ([#6664](https://github.com/Hmbown/Codewhale/pull/6664)). - **[@Lstarsky0](https://github.com/Lstarsky0)** — moved the docs/work, legal, digest and FAQ pages onto the dictionary spine ([#6405](https://github.com/Hmbown/Codewhale/pull/6405), [#6417](https://github.com/Hmbown/Codewhale/pull/6417), [#6499](https://github.com/Hmbown/Codewhale/pull/6499), [#6574](https://github.com/Hmbown/Codewhale/pull/6574)), tightened the Chinese-branching ceiling to 18 ([#6403](https://github.com/Hmbown/Codewhale/pull/6403)), and made Fleet publish without a two-link window ([#6431](https://github.com/Hmbown/Codewhale/pull/6431)). -- **[@aboimpinto](https://github.com/aboimpinto)** — restored a green Linux full-workspace test gate without loosening any test ([#6581](https://github.com/Hmbown/Codewhale/pull/6581)). +- **[@aboimpinto](https://github.com/aboimpinto)** — restored a green Linux full-workspace test gate without loosening any test, twice ([#6581](https://github.com/Hmbown/Codewhale/pull/6581), [#6666](https://github.com/Hmbown/Codewhale/pull/6666)). - **[@dajiaohuang](https://github.com/dajiaohuang)** — `codewhale config set` checks a known setting's value against its schema type before saving it ([#6568](https://github.com/Hmbown/Codewhale/pull/6568)). - **[@BX166](https://github.com/BX166)** — reported the AICraft provider row missing its key console, docs link and guidance, and supplied the values ([#6616](https://github.com/Hmbown/Codewhale/issues/6616)). - **[@Water-Run](https://github.com/Water-Run)** — ingested namespaced model-only catalog entries so models present only in the canonical `models` map reach the offering list ([#6400](https://github.com/Hmbown/Codewhale/pull/6400)), and retired the blanket dead-code allowance with its unused feature stages, tightening the budget to match ([#6402](https://github.com/Hmbown/Codewhale/pull/6402)). @@ -10100,7 +10102,8 @@ overflow report and `/theme` picker edge-wrapping patch in #1814. Older releases (v0.8.39 and earlier) are archived in [docs/CHANGELOG_ARCHIVE.md](docs/CHANGELOG_ARCHIVE.md). -[Unreleased]: https://github.com/Hmbown/CodeWhale/compare/v0.10.0...HEAD +[Unreleased]: https://github.com/Hmbown/CodeWhale/compare/v0.10.1...HEAD +[0.10.1]: https://github.com/Hmbown/CodeWhale/compare/v0.10.0...v0.10.1 [0.10.0]: https://github.com/Hmbown/CodeWhale/compare/v0.9.13...v0.10.0 [0.9.13]: https://github.com/Hmbown/CodeWhale/compare/v0.9.12...v0.9.13 [0.9.12]: https://github.com/Hmbown/CodeWhale/compare/v0.9.11...v0.9.12 diff --git a/Cargo.lock b/Cargo.lock index f219cd5fde..e668f27df1 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -770,7 +770,7 @@ dependencies = [ [[package]] name = "codewhale-agent" -version = "0.10.0" +version = "0.10.1" dependencies = [ "codewhale-config", "serde", @@ -778,7 +778,7 @@ dependencies = [ [[package]] name = "codewhale-app-server" -version = "0.10.0" +version = "0.10.1" dependencies = [ "anyhow", "axum", @@ -806,14 +806,14 @@ dependencies = [ [[package]] name = "codewhale-build-support" -version = "0.10.0" +version = "0.10.1" dependencies = [ "tempfile", ] [[package]] name = "codewhale-cli" -version = "0.10.0" +version = "0.10.1" dependencies = [ "anyhow", "chrono", @@ -855,7 +855,7 @@ dependencies = [ [[package]] name = "codewhale-cloud-facts" -version = "0.10.0" +version = "0.10.1" dependencies = [ "codewhale-config", "codewhale-release", @@ -872,7 +872,7 @@ dependencies = [ [[package]] name = "codewhale-command-contract" -version = "0.10.0" +version = "0.10.1" dependencies = [ "codewhale-core", "serde_json", @@ -880,7 +880,7 @@ dependencies = [ [[package]] name = "codewhale-config" -version = "0.10.0" +version = "0.10.1" dependencies = [ "anyhow", "base64 0.23.1", @@ -904,7 +904,7 @@ dependencies = [ [[package]] name = "codewhale-core" -version = "0.10.0" +version = "0.10.1" dependencies = [ "anyhow", "chrono", @@ -926,7 +926,7 @@ dependencies = [ [[package]] name = "codewhale-execpolicy" -version = "0.10.0" +version = "0.10.1" dependencies = [ "anyhow", "codewhale-protocol", @@ -938,7 +938,7 @@ dependencies = [ [[package]] name = "codewhale-hooks" -version = "0.10.0" +version = "0.10.1" dependencies = [ "anyhow", "async-trait", @@ -956,7 +956,7 @@ dependencies = [ [[package]] name = "codewhale-lane" -version = "0.10.0" +version = "0.10.1" dependencies = [ "anyhow", "chrono", @@ -971,7 +971,7 @@ dependencies = [ [[package]] name = "codewhale-localization" -version = "0.10.0" +version = "0.10.1" dependencies = [ "codewhale-build-support", "ratatui", @@ -984,7 +984,7 @@ dependencies = [ [[package]] name = "codewhale-mcp" -version = "0.10.0" +version = "0.10.1" dependencies = [ "anyhow", "libc", @@ -996,7 +996,7 @@ dependencies = [ [[package]] name = "codewhale-memory" -version = "0.10.0" +version = "0.10.1" dependencies = [ "clap", "regex", @@ -1011,7 +1011,7 @@ dependencies = [ [[package]] name = "codewhale-models" -version = "0.10.0" +version = "0.10.1" dependencies = [ "anyhow", "chrono", @@ -1023,7 +1023,7 @@ dependencies = [ [[package]] name = "codewhale-palette" -version = "0.10.0" +version = "0.10.1" dependencies = [ "codewhale-config", "libc", @@ -1035,14 +1035,14 @@ dependencies = [ [[package]] name = "codewhale-paths" -version = "0.10.0" +version = "0.10.1" dependencies = [ "dirs 7.0.0", ] [[package]] name = "codewhale-protocol" -version = "0.10.0" +version = "0.10.1" dependencies = [ "chrono", "serde", @@ -1052,7 +1052,7 @@ dependencies = [ [[package]] name = "codewhale-release" -version = "0.10.0" +version = "0.10.1" dependencies = [ "anyhow", "reqwest", @@ -1066,7 +1066,7 @@ dependencies = [ [[package]] name = "codewhale-runtime" -version = "0.10.0" +version = "0.10.1" dependencies = [ "ahash", "anyhow", @@ -1093,7 +1093,7 @@ dependencies = [ [[package]] name = "codewhale-secrets" -version = "0.10.0" +version = "0.10.1" dependencies = [ "chrono", "codewhale-paths", @@ -1112,7 +1112,7 @@ dependencies = [ [[package]] name = "codewhale-state" -version = "0.10.0" +version = "0.10.1" dependencies = [ "anyhow", "chrono", @@ -1127,7 +1127,7 @@ dependencies = [ [[package]] name = "codewhale-telemetry" -version = "0.10.0" +version = "0.10.1" dependencies = [ "anyhow", "chrono", @@ -1147,7 +1147,7 @@ dependencies = [ [[package]] name = "codewhale-tools" -version = "0.10.0" +version = "0.10.1" dependencies = [ "anyhow", "async-trait", @@ -1161,7 +1161,7 @@ dependencies = [ [[package]] name = "codewhale-tui" -version = "0.10.0" +version = "0.10.1" dependencies = [ "ahash", "ansi-to-tui", @@ -1269,7 +1269,7 @@ dependencies = [ [[package]] name = "codewhale-workflow" -version = "0.10.0" +version = "0.10.1" dependencies = [ "serde", "serde_json", @@ -1281,7 +1281,7 @@ dependencies = [ [[package]] name = "codewhale-workflow-js" -version = "0.10.0" +version = "0.10.1" dependencies = [ "async-trait", "jsonschema", diff --git a/Cargo.toml b/Cargo.toml index 0b08cee875..7ada3edae2 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -32,7 +32,7 @@ default-members = ["crates/cli"] resolver = "2" [workspace.package] -version = "0.10.0" +version = "0.10.1" edition = "2024" # Rust 1.88 stabilized `let_chains` in `if`/`while` conditions, which the # codebase relies on extensively. Cargo enforces this so users on older diff --git a/crates/agent/Cargo.toml b/crates/agent/Cargo.toml index f6cc7b0257..38ef995b3c 100644 --- a/crates/agent/Cargo.toml +++ b/crates/agent/Cargo.toml @@ -11,5 +11,5 @@ description = "Model/provider registry and fallback strategy for Codewhale" workspace = true [dependencies] -codewhale-config = { path = "../config", version = "0.10.0" } +codewhale-config = { path = "../config", version = "0.10.1" } serde.workspace = true diff --git a/crates/app-server/Cargo.toml b/crates/app-server/Cargo.toml index c5f55ef80b..cae4c1abbc 100644 --- a/crates/app-server/Cargo.toml +++ b/crates/app-server/Cargo.toml @@ -15,15 +15,15 @@ workspace = true [dependencies] anyhow.workspace = true axum.workspace = true -codewhale-agent = { path = "../agent", version = "0.10.0" } -codewhale-config = { path = "../config", version = "0.10.0" } -codewhale-core = { path = "../core", version = "0.10.0" } -codewhale-hooks = { path = "../hooks", version = "0.10.0" } -codewhale-mcp = { path = "../mcp", version = "0.10.0" } -codewhale-paths = { path = "../paths", version = "0.10.0" } -codewhale-protocol = { path = "../protocol", version = "0.10.0" } -codewhale-release = { path = "../release", version = "0.10.0" } -codewhale-state = { path = "../state", version = "0.10.0" } +codewhale-agent = { path = "../agent", version = "0.10.1" } +codewhale-config = { path = "../config", version = "0.10.1" } +codewhale-core = { path = "../core", version = "0.10.1" } +codewhale-hooks = { path = "../hooks", version = "0.10.1" } +codewhale-mcp = { path = "../mcp", version = "0.10.1" } +codewhale-paths = { path = "../paths", version = "0.10.1" } +codewhale-protocol = { path = "../protocol", version = "0.10.1" } +codewhale-release = { path = "../release", version = "0.10.1" } +codewhale-state = { path = "../state", version = "0.10.1" } serde.workspace = true serde_json.workspace = true rustls.workspace = true diff --git a/crates/cli/Cargo.toml b/crates/cli/Cargo.toml index 634568d463..e67a363150 100644 --- a/crates/cli/Cargo.toml +++ b/crates/cli/Cargo.toml @@ -27,19 +27,19 @@ path = "src/main.rs" anyhow.workspace = true clap.workspace = true clap_complete.workspace = true -codewhale-tui = { path = "../tui", version = "0.10.0", default-features = false } -codewhale-agent = { path = "../agent", version = "0.10.0" } -codewhale-app-server = { path = "../app-server", version = "0.10.0" } -codewhale-config = { path = "../config", version = "0.10.0" } -codewhale-lane = { path = "../lane", version = "0.10.0" } -codewhale-workflow = { path = "../workflow", version = "0.10.0" } -codewhale-execpolicy = { path = "../execpolicy", version = "0.10.0" } -codewhale-mcp = { path = "../mcp", version = "0.10.0" } -codewhale-paths = { path = "../paths", version = "0.10.0" } -codewhale-release = { path = "../release", version = "0.10.0" } -codewhale-secrets = { path = "../secrets", version = "0.10.0" } -codewhale-state = { path = "../state", version = "0.10.0" } -codewhale-telemetry = { path = "../telemetry", version = "0.10.0" } +codewhale-tui = { path = "../tui", version = "0.10.1", default-features = false } +codewhale-agent = { path = "../agent", version = "0.10.1" } +codewhale-app-server = { path = "../app-server", version = "0.10.1" } +codewhale-config = { path = "../config", version = "0.10.1" } +codewhale-lane = { path = "../lane", version = "0.10.1" } +codewhale-workflow = { path = "../workflow", version = "0.10.1" } +codewhale-execpolicy = { path = "../execpolicy", version = "0.10.1" } +codewhale-mcp = { path = "../mcp", version = "0.10.1" } +codewhale-paths = { path = "../paths", version = "0.10.1" } +codewhale-release = { path = "../release", version = "0.10.1" } +codewhale-secrets = { path = "../secrets", version = "0.10.1" } +codewhale-state = { path = "../state", version = "0.10.1" } +codewhale-telemetry = { path = "../telemetry", version = "0.10.1" } chrono.workspace = true console = "0.16.3" dirs.workspace = true @@ -59,7 +59,7 @@ webbrowser = "1.0" zeroize = "1.8.2" [build-dependencies] -codewhale-build-support = { path = "../build-support", version = "0.10.0" } +codewhale-build-support = { path = "../build-support", version = "0.10.1" } # Parent-death cleanup for delegated server children (#3259): on Linux the # dispatcher sets PR_SET_PDEATHSIG so the child is signalled if the dispatcher diff --git a/crates/cloud-facts/Cargo.toml b/crates/cloud-facts/Cargo.toml index 4720ffe984..8473061253 100644 --- a/crates/cloud-facts/Cargo.toml +++ b/crates/cloud-facts/Cargo.toml @@ -11,8 +11,8 @@ description = "Fetch + verified disk cache for the Codewhale cloud facts channel workspace = true [dependencies] -codewhale-config = { path = "../config", version = "0.10.0" } -codewhale-release = { path = "../release", version = "0.10.0" } +codewhale-config = { path = "../config", version = "0.10.1" } +codewhale-release = { path = "../release", version = "0.10.1" } reqwest.workspace = true libc.workspace = true semver.workspace = true diff --git a/crates/command-contract/Cargo.toml b/crates/command-contract/Cargo.toml index 356465a0c8..18f7fc294d 100644 --- a/crates/command-contract/Cargo.toml +++ b/crates/command-contract/Cargo.toml @@ -11,7 +11,7 @@ description = "Prototype command capability and dispatch shapes for the staged T workspace = true [dependencies] -codewhale-core = { path = "../core", version = "0.10.0" } +codewhale-core = { path = "../core", version = "0.10.1" } # FEAT-025 export projections carry JSON tool payloads. The workspace already # pins serde_json with `preserve_order` (crates/core and crates/tui), so this # adds no new external dependency to the graph. diff --git a/crates/config/Cargo.toml b/crates/config/Cargo.toml index f15fe6d782..b2317b079a 100644 --- a/crates/config/Cargo.toml +++ b/crates/config/Cargo.toml @@ -16,9 +16,9 @@ base64 = "0.23.1" chrono.workspace = true ring = "0.17.14" semver.workspace = true -codewhale-execpolicy = { path = "../execpolicy", version = "0.10.0" } -codewhale-paths = { path = "../paths", version = "0.10.0" } -codewhale-secrets = { path = "../secrets", version = "0.10.0" } +codewhale-execpolicy = { path = "../execpolicy", version = "0.10.1" } +codewhale-paths = { path = "../paths", version = "0.10.1" } +codewhale-secrets = { path = "../secrets", version = "0.10.1" } fd-lock = "4.0.4" libc = "0.2" serde.workspace = true diff --git a/crates/core/Cargo.toml b/crates/core/Cargo.toml index 1717ebef2e..b945eb1cb6 100644 --- a/crates/core/Cargo.toml +++ b/crates/core/Cargo.toml @@ -15,11 +15,11 @@ anyhow.workspace = true chrono.workspace = true serde.workspace = true thiserror.workspace = true -codewhale-config = { path = "../config", version = "0.10.0" } -codewhale-hooks = { path = "../hooks", version = "0.10.0" } -codewhale-mcp = { path = "../mcp", version = "0.10.0" } -codewhale-protocol = { path = "../protocol", version = "0.10.0" } -codewhale-state = { path = "../state", version = "0.10.0" } +codewhale-config = { path = "../config", version = "0.10.1" } +codewhale-hooks = { path = "../hooks", version = "0.10.1" } +codewhale-mcp = { path = "../mcp", version = "0.10.1" } +codewhale-protocol = { path = "../protocol", version = "0.10.1" } +codewhale-state = { path = "../state", version = "0.10.1" } regex = "1.11" sha2.workspace = true serde_json = { workspace = true, features = ["preserve_order"] } diff --git a/crates/execpolicy/Cargo.toml b/crates/execpolicy/Cargo.toml index 23d8ec16b9..199b7bf7c9 100644 --- a/crates/execpolicy/Cargo.toml +++ b/crates/execpolicy/Cargo.toml @@ -12,7 +12,7 @@ workspace = true [dependencies] anyhow.workspace = true -codewhale-protocol = { path = "../protocol", version = "0.10.0" } +codewhale-protocol = { path = "../protocol", version = "0.10.1" } regex = "1.11" serde.workspace = true shlex = "2.0.1" diff --git a/crates/hooks/Cargo.toml b/crates/hooks/Cargo.toml index c871addec9..af8ea9dfb9 100644 --- a/crates/hooks/Cargo.toml +++ b/crates/hooks/Cargo.toml @@ -14,8 +14,8 @@ workspace = true anyhow.workspace = true async-trait.workspace = true chrono.workspace = true -codewhale-protocol = { path = "../protocol", version = "0.10.0" } -codewhale-release = { path = "../release", version = "0.10.0" } +codewhale-protocol = { path = "../protocol", version = "0.10.1" } +codewhale-release = { path = "../release", version = "0.10.1" } reqwest.workspace = true serde.workspace = true serde_json.workspace = true diff --git a/crates/lane/Cargo.toml b/crates/lane/Cargo.toml index 20c67f8993..d384bedb50 100644 --- a/crates/lane/Cargo.toml +++ b/crates/lane/Cargo.toml @@ -13,7 +13,7 @@ workspace = true [dependencies] anyhow.workspace = true chrono.workspace = true -codewhale-config = { path = "../config", version = "0.10.0" } +codewhale-config = { path = "../config", version = "0.10.1" } fd-lock = "4.0.4" serde.workspace = true serde_json.workspace = true diff --git a/crates/localization/Cargo.toml b/crates/localization/Cargo.toml index f8a0209a50..d6d1a8701a 100644 --- a/crates/localization/Cargo.toml +++ b/crates/localization/Cargo.toml @@ -17,7 +17,7 @@ unicode-width = "0.2" [build-dependencies] rust-i18n-support = { version = "=4.2.2", features = ["codegen"] } -codewhale-build-support = { path = "../build-support", version = "0.10.0" } +codewhale-build-support = { path = "../build-support", version = "0.10.1" } [dev-dependencies] serde_json = { workspace = true, features = ["preserve_order", "raw_value"] } diff --git a/crates/models/Cargo.toml b/crates/models/Cargo.toml index b34e5738b6..e8342d86d7 100644 --- a/crates/models/Cargo.toml +++ b/crates/models/Cargo.toml @@ -19,7 +19,7 @@ workspace = true [dependencies] anyhow.workspace = true chrono.workspace = true -codewhale-config = { path = "../config", version = "0.10.0" } -codewhale-core = { path = "../core", version = "0.10.0" } +codewhale-config = { path = "../config", version = "0.10.1" } +codewhale-core = { path = "../core", version = "0.10.1" } serde.workspace = true serde_json = { workspace = true, features = ["preserve_order"] } diff --git a/crates/palette/Cargo.toml b/crates/palette/Cargo.toml index cf87a40f57..1e84686cd1 100644 --- a/crates/palette/Cargo.toml +++ b/crates/palette/Cargo.toml @@ -19,7 +19,7 @@ default = ["ratatui"] ratatui = ["dep:ratatui"] [dependencies] -codewhale-config = { path = "../config", version = "0.10.0" } +codewhale-config = { path = "../config", version = "0.10.1" } ratatui = { version = "=0.30.2", features = ["unstable-rendered-line-info"], optional = true } serde.workspace = true serde_json = { workspace = true, features = ["preserve_order", "raw_value"] } diff --git a/crates/runtime/Cargo.toml b/crates/runtime/Cargo.toml index 91e39d86af..636c9d48fe 100644 --- a/crates/runtime/Cargo.toml +++ b/crates/runtime/Cargo.toml @@ -36,10 +36,10 @@ path = "src/lib.rs" ahash = "0.8" anyhow.workspace = true chrono.workspace = true -codewhale-config = { path = "../config", version = "0.10.0" } -codewhale-core = { path = "../core", version = "0.10.0" } -codewhale-memory = { path = "../memory", version = "0.10.0" } -codewhale-models = { path = "../models", version = "0.10.0" } +codewhale-config = { path = "../config", version = "0.10.1" } +codewhale-core = { path = "../core", version = "0.10.1" } +codewhale-memory = { path = "../memory", version = "0.10.1" } +codewhale-models = { path = "../models", version = "0.10.1" } fd-lock = "4.0.4" lru = "0.18" regex = "1.11" @@ -53,7 +53,7 @@ tracing.workspace = true uuid.workspace = true [dev-dependencies] -codewhale-models = { path = "../models", version = "0.10.0", features = [ +codewhale-models = { path = "../models", version = "0.10.1", features = [ "test-support", ] } tempfile.workspace = true diff --git a/crates/secrets/Cargo.toml b/crates/secrets/Cargo.toml index 1abcdf7593..558c6ae9f1 100644 --- a/crates/secrets/Cargo.toml +++ b/crates/secrets/Cargo.toml @@ -11,7 +11,7 @@ description = "Secret storage backends for Codewhale, with OS keyring and file f workspace = true [dependencies] -codewhale-paths = { path = "../paths", version = "0.10.0" } +codewhale-paths = { path = "../paths", version = "0.10.1" } chrono.workspace = true fd-lock = "=4.0.4" libc.workspace = true diff --git a/crates/state/Cargo.toml b/crates/state/Cargo.toml index c43cd8083b..fd52cc1346 100644 --- a/crates/state/Cargo.toml +++ b/crates/state/Cargo.toml @@ -13,8 +13,8 @@ workspace = true [dependencies] anyhow.workspace = true chrono.workspace = true -codewhale-paths = { path = "../paths", version = "0.10.0" } -codewhale-protocol = { path = "../protocol", version = "0.10.0" } +codewhale-paths = { path = "../paths", version = "0.10.1" } +codewhale-protocol = { path = "../protocol", version = "0.10.1" } fd-lock = "4.0.4" rusqlite.workspace = true serde.workspace = true diff --git a/crates/telemetry/Cargo.toml b/crates/telemetry/Cargo.toml index 089b426ab6..bdb3e25bc1 100644 --- a/crates/telemetry/Cargo.toml +++ b/crates/telemetry/Cargo.toml @@ -13,9 +13,9 @@ workspace = true [dependencies] anyhow.workspace = true chrono.workspace = true -codewhale-config = { path = "../config", version = "0.10.0" } -codewhale-paths = { path = "../paths", version = "0.10.0" } -codewhale-release = { path = "../release", version = "0.10.0" } +codewhale-config = { path = "../config", version = "0.10.1" } +codewhale-paths = { path = "../paths", version = "0.10.1" } +codewhale-release = { path = "../release", version = "0.10.1" } fd-lock = "4.0.4" reqwest = { workspace = true, features = ["blocking"] } serde.workspace = true @@ -25,9 +25,9 @@ tracing.workspace = true uuid.workspace = true [build-dependencies] -codewhale-build-support = { path = "../build-support", version = "0.10.0" } +codewhale-build-support = { path = "../build-support", version = "0.10.1" } [dev-dependencies] # Used as an *assertion*, never as a filter: every string leaf of a serialized # batch is run through `redact_for_disclosure` and must come back unredacted. -codewhale-workflow = { path = "../workflow", version = "0.10.0" } +codewhale-workflow = { path = "../workflow", version = "0.10.1" } diff --git a/crates/tools/Cargo.toml b/crates/tools/Cargo.toml index 59fbf72972..a4676c3dba 100644 --- a/crates/tools/Cargo.toml +++ b/crates/tools/Cargo.toml @@ -13,7 +13,7 @@ workspace = true [dependencies] anyhow.workspace = true async-trait.workspace = true -codewhale-protocol = { path = "../protocol", version = "0.10.0" } +codewhale-protocol = { path = "../protocol", version = "0.10.1" } serde.workspace = true serde_json.workspace = true thiserror.workspace = true diff --git a/crates/tui/CHANGELOG.md b/crates/tui/CHANGELOG.md index 0ee1bed368..d1e5eeab84 100644 --- a/crates/tui/CHANGELOG.md +++ b/crates/tui/CHANGELOG.md @@ -7,12 +7,14 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## [Unreleased] +## [0.10.1] - 2026-09-28 + The website's not-found page now uses the Codwhale poster and typo joke, with English/Chinese recovery links to home and docs ([#6419](https://github.com/Hmbown/Codewhale/issues/6419), [#6420](https://github.com/Hmbown/Codewhale/pull/6420)). -Planned for Codewhale v0.10.1: a reliability and first-run release. Turns that +Codewhale v0.10.1 is a reliability and first-run release. Turns that stall now say so, approvals keep what you approved, plugin suggestions are quieter, and Fleet runs can be checked before they spend anything. @@ -41,9 +43,9 @@ quieter, and Fleet runs can be checked before they spend anything. ### Contributors -- **[@gaord](https://github.com/gaord)** — let a client fork a thread at a named turn ([#6580](https://github.com/Hmbown/Codewhale/pull/6580)), let undo roll back files for the turn it is undoing ([#6483](https://github.com/Hmbown/Codewhale/pull/6483)), stopped resume and fork from duplicating threads and sessions ([#6406](https://github.com/Hmbown/Codewhale/pull/6406)), and exposed user-defined provider routes to native clients ([#6404](https://github.com/Hmbown/Codewhale/pull/6404)). +- **[@gaord](https://github.com/gaord)** — let a client fork a thread at a named turn ([#6580](https://github.com/Hmbown/Codewhale/pull/6580)), let undo roll back files for the turn it is undoing ([#6483](https://github.com/Hmbown/Codewhale/pull/6483)), stopped resume and fork from duplicating threads and sessions ([#6406](https://github.com/Hmbown/Codewhale/pull/6406)), exposed user-defined provider routes to native clients ([#6404](https://github.com/Hmbown/Codewhale/pull/6404)), and kept a fork going when a turn lost its tool call ([#6664](https://github.com/Hmbown/Codewhale/pull/6664)). - **[@Lstarsky0](https://github.com/Lstarsky0)** — moved the docs/work, legal, digest and FAQ pages onto the dictionary spine ([#6405](https://github.com/Hmbown/Codewhale/pull/6405), [#6417](https://github.com/Hmbown/Codewhale/pull/6417), [#6499](https://github.com/Hmbown/Codewhale/pull/6499), [#6574](https://github.com/Hmbown/Codewhale/pull/6574)), tightened the Chinese-branching ceiling to 18 ([#6403](https://github.com/Hmbown/Codewhale/pull/6403)), and made Fleet publish without a two-link window ([#6431](https://github.com/Hmbown/Codewhale/pull/6431)). -- **[@aboimpinto](https://github.com/aboimpinto)** — restored a green Linux full-workspace test gate without loosening any test ([#6581](https://github.com/Hmbown/Codewhale/pull/6581)). +- **[@aboimpinto](https://github.com/aboimpinto)** — restored a green Linux full-workspace test gate without loosening any test, twice ([#6581](https://github.com/Hmbown/Codewhale/pull/6581), [#6666](https://github.com/Hmbown/Codewhale/pull/6666)). - **[@dajiaohuang](https://github.com/dajiaohuang)** — `codewhale config set` checks a known setting's value against its schema type before saving it ([#6568](https://github.com/Hmbown/Codewhale/pull/6568)). - **[@BX166](https://github.com/BX166)** — reported the AICraft provider row missing its key console, docs link and guidance, and supplied the values ([#6616](https://github.com/Hmbown/Codewhale/issues/6616)). - **[@Water-Run](https://github.com/Water-Run)** — ingested namespaced model-only catalog entries so models present only in the canonical `models` map reach the offering list ([#6400](https://github.com/Hmbown/Codewhale/pull/6400)), and retired the blanket dead-code allowance with its unused feature stages, tightening the budget to match ([#6402](https://github.com/Hmbown/Codewhale/pull/6402)). @@ -6431,594 +6433,6 @@ Thank you to the contributors whose code, reports, and reviews shaped v0.9.1: draft objects, public feed requests cannot spend the server-held GitHub token, and maintainer login bodies are type- and size-bounded before parsing. -## [0.9.0] - 2026-07-16 - -Codewhale v0.9.0 replaces the default terminal shell with the underwater -interaction system, makes Operate message-first, and hardens the Fleet, -Workflow, routing, accounting, and release surfaces that support day-to-day -agent work. The release also expands localization and gives the public site a -quieter, docs-first community foundation. Its provider work replaces the old -hand-maintained picker boundary with live ProviderLake discovery and adds the -largest curated model-and-pricing expansion in the project so far. - -### Fixed — final integration - -- Redact configured, environment, file-backed, and bare active credentials - from every tool result before it crosses any model-provider wire protocol; - retrieved spillover content is sanitized again at that boundary. The - `read_file` tool also refuses CodeWhale configuration, backup, and - credential-store paths, preventing routine tool use from exposing those - local files. -- Keep immediate TUI submit failures inside the shell: custom-provider route - preflight and closed-mailbox errors now restore the exact composer draft and - selected skill for retry, with a sticky visible error instead of exiting. -- Anchor automatic compaction thresholds to the route's spendable input - budget after output reservation and safety headroom, so large-output and - tight self-hosted routes compact before provider context rejection. The TUI - pre-send gate and warning copy now use the same token threshold as the - engine. Preserve the 262K Kimi route's usable input budget and use the - documented 32K default generation budget instead of mirroring the context - window as output (#4293 by @SamhandsomeLee, #4368 by @bruce6135, and #4378 - by @mvanhorn). -- Fail closed instead of reporting base-rate dollar estimates for direct OpenAI - GPT-5.4/5.4 Pro, GPT-5.5 (including dated snapshots), and GPT-5.6 - Sol/Terra/Luna requests above 272K input tokens. Exact tiered accounting - remains deferred to the generalized pricing schema; smaller 5.4 variants, - GPT-5.5 Pro, Codex subscription, and foreign-provider routes are unchanged - (#4317). -- Retire `deepseek-chat` and `deepseek-reasoner` before they reach DeepSeek's - first-party OpenAI or Anthropic wire APIs, migrating both to the documented - `deepseek-v4-flash` replacement while preserving legacy non-thinking / - thinking intent when no explicit reasoning tier is set. Aggregator, Wanjie - Ark, self-hosted, and custom endpoint model ids remain provider-owned (#4320). -- Make Operate a message-first multitask surface: ordinary prompts work without - a Workflow, direct parent tools follow the same approval, sandbox, shell, - ask-rule, and repository protections as Act, and follow-ups can queue while - work is active. Bounded background workers remain preferred for independent, - parallel, isolated, or long-running work; child handoffs cannot inherit - standing Full Access, and each dispatch produces one durable completion - receipt. -- Let personal Fleet profiles in `CODEWHALE_HOME/agents` travel across - repositories while project profiles in `.codewhale/agents` override them. - Saving refreshes the live roster, and the UI now says explicitly that profile - availability does not expand workspace, trust, or filesystem authority. -- Move file-mention discovery onto one bounded, generation-safe background - worker so a slow filesystem read cannot freeze composer input. Exact paths - resolve on send; fuzzy matches stay in the completion popup instead of - silently attaching an arbitrary same-name file (#4365 by @WavesMan, with the - initial bounded-walk approach from #4367 by @LeoLin990405). -- Keep the opt-in `remember` tool in the model-visible first-turn catalog so - durable preference capture works without requiring a model to discover a - tool it cannot yet know exists (#4373 by @Angel-Hair and #4377 by - @mvanhorn). -- Make `review` handle a staged snapshot relative to a base ref by comparing - the branch merge-base tree with the index. This preserves committed and - staged branch work, excludes unstaged edits, and avoids the invalid - `git diff --cached ...HEAD` form. -- Honor each MCP server's advertised discovery capabilities before calling - optional tools, resources, templates, or prompts; keep optional probes - independently bounded and fail-soft (#4308 by @nsfoxer). -- Make offline `scorecard` pricing provider-aware: `turn_end` records carry the - effective route and a non-secret billing surface, runtime exports and - supported aliases ingest cleanly, legacy/unknown routes remain explicitly - unpriced, and route-scoped cache and recorded-time pricing replace model-only - guesses. Historical runtime aggregates use each turn's recorded time; - costless catalog routes fail closed while exact provider-owned hand-price - rows remain available. StepFun PAYG and Step Plan usage now stay distinct - without persisting raw endpoint URLs, so subscription quota is never reported - as token spend (#4335). Completion-only shell, manual-compaction, and purge - events remain visible to `turn_end` observers as explicitly non-model - lifecycle records. This builds on the scorecard introduced by @findshan in - #3388. -- Preserve named custom-provider identity across TUI sessions, `exec --resume`, - runtime threads, exports, cache and Workflow receipts. Restores resolve the - saved provider against live configuration before creating a client, never - infer a provider from the model ID, and fail closed when the named route was - removed, invalid, or ambiguous (#4334). -- Bind credentials to the endpoint that owns them. Environment-selected custom - hosts can no longer inherit saved provider keys, keyring entries, OAuth, or - ambient provider variables; only an explicitly source-marked CLI key may - follow an explicit CLI endpoint override. `auth_mode = "none"` also strips - credential-shaped custom headers consistently in the TUI and app server, - while keyless loopback routes remain usable as local runtimes. -- Make hosted runtime threads deterministic and provider-exact: serialize - thread, turn, and event mutation; keep cancellation ownership with the host; - preserve the selected provider through every durable turn; terminalize - exceptional streams once; and prevent the runtime manager from silently - dispatching unclaimed goal continuations or child turns. -- Treat required user confirmation as a real goal blocker instead of a failed - goal, and explain how to recover when a previously cached approval is denied. - Cached-denial recovery is also committed as a settled transcript receipt, so - tool completion or a later status update cannot erase it from scrollback or - accessibility output. The notice now describes matching, process-scoped - denials truthfully across all shipped locales; approval audits honor - `CODEWHALE_HOME`, and expired status toasts cannot remain trapped behind a - persistent entry. Both states remain visible and actionable instead of - looking like unexplained model or tool failure (#4374 and #4375 by - @Angel-Hair, with the final hardening in #4385 by @nightt5879). -- Make Fleet launch and teardown deterministic: route flags are placed before - `exec`, workers are contained in owned Unix sessions or Windows Job Objects, - and cancellation reaps surviving descendants with bounded escalation before - manager state settles. Fence progress, terminal status, verification - receipts, and evidence by durable attempt generation so a stale process can - never complete or overwrite a restarted attempt; terminal state and receipt - now commit atomically, stale-heartbeat decisions use a full lease CAS, - exhausted-retry alerts are exactly once, and crash-truncated ledger tails are - quarantined before the next append. Standalone CLI and Runtime API restart - controls now drive the replacement attempt through a real executor to its - terminal receipt, while per-run manager ownership prevents concurrent - controllers from launching the same attempt twice. -- Keep the stopship Workflow fixture bounded to measured 24k-per-turn role - budgets and a 360k aggregate. Authored child step and wall-time limits now - reach the live runtime, including launch-queue wait; promoted evidence stays - intact between roles, tool-free handoff consumers omit tool fields on the - provider wire, and a terminal `BLOCK` fails the Workflow instead of producing - a successful Lane receipt. Free-form descriptions no longer fabricate write, - shell, or network risk; unknown structured risk remains fail-closed. -- Keep repository trust affirmative and explicit: only `1`/`Y` are advertised - as acceptance keys, while Enter remains non-affirmative and explains the - required choice. -- Replace literal legal and doctrinal metaphors in Simplified Chinese setup and - `/constitution` copy with direct collaboration terminology reviewed by a - native speaker (#4369 by @hmr-BH). -- Keep the transcript reviewable while an inline approval card is active: - Page Up/Down, modified arrows, Home/End, and the mouse wheel now move through - the visible evidence without changing or dismissing the pending decision - (#4371 by @amuthantamil). -- Match generated worker names to the active UI language while preserving - explicit user names, and tighten the 89x50 shell rhythm across Fleet rows, - choice dialogs, transcript boundaries, and the idle composer. -- Put docs content and search before the full index on small screens, reduce - mobile dead space, and keep the public community copy focused on issues, - pull requests, and international contributors. - -### Changed — the underwater shell - -- Replace the default TUI shell with the underwater interaction system: one - renderer owns the header, top work strip, transcript ledger, composer, and - footer, with explicit compact/normal/wide tiers and no legacy sidebar or - dashboard in the default path. The legacy composition survives only behind - the internal `classic` treatment. -- Add a distinct pre-session launch screen — new session, new worktree (with - inline naming and real lane provisioning), scoped resume count, changelog, - quit — with reliable non-colliding keys and row/keyboard parity. -- Render turns as a ledger: user message, short narration, settled tool - receipts, and exactly one live row. Fast tool bursts land directly as - batch receipts (no spinner churn), completed receipts stay inspectable, - failures hold a coral receipt with stderr one `v` away, and one shared - tool rail replaces nested card borders. -- Make completion a one-shot exhale: `working -> finishing -> done` in the - footer only, with no transcript repaint, no lingering loop, and no stale - cancel action in the completed state. -- Rebuild the secondary rooms on one hairline grammar — config, setup, - sessions, help, context, theme, model/route, Fleet, file attach — each - with a title hairline, row objects with focus/selection/mouse parity, - one panel-owned scroll rail, and wrapped action footers. -- Make `/model` a model-first atomic route picker across configured - providers: provider and model switch together on apply, and every row - prints the resolved model. `/theme` gains a live preview with truthful - Esc revert across all 12 shipped themes. -- Add a live context inspector (Alt+C) backed by the current route: exact - system/messages/free token buckets, a proportional map, drill-down into - the detail pager, and no frozen session while it is open. -- Project Workflow runs as an in-stream run map: a collapsed one-line card - that unfolds into per-lane rows with role, resolved model, worktree, - elapsed track, and per-member running/waiting/failed/cancelled/done - states, plus gates and a debrief built only from real run data. Child - transcripts never flood the parent shell. -- Unify Fleet into roster/setup/workers rooms: the operator is pinned first - with the live session route, members show resolved route truth (inherit / - fast lane / pinned), and the workers tab is a control surface with - row-local open/stop and real lifecycle counts. -- Distinguish repository-law approvals from ordinary approvals: the - constitution prompt names its authority, source, matched rule, and target, - and Full Access never bypasses it. Ordinary approvals render as a still - coral band above the visible transcript. -- Keep streaming honest and cheap: provider-unit deltas replace per-grapheme - queueing, the transcript is top-anchored so appended lines stop shifting - settled rows, ambient animation stops during real work, and ordinary - completion no longer triggers full-screen clears (verified by render-diff - logs: suffix updates of tens of cells while streaming, zero periodic - full repaints). -- Give every underwater treatment ambient life: ombre breathes its water - column while flat and Terminal-owned keep the idle fish and bubble - (foreground-only for Terminal), a typed treatment setting replaces string - comparisons, reduced motion freezes life legibly, `fancy_animations = - false` stills the chrome, and typing scatters the fish immediately. Fish - keep a one-cell gap from occupied text; the whale remains the single brand - mark and returns to stillness between caustic sweeps. -- Bring the whale mark to life with a soft diagonal caustic sweep, then let it - genuinely rest. Active markers now share a smoother 8 Hz clock after the - existing earned-motion delay, while reduced motion, hidden/off-screen views, - modal ownership, and compact-terminal redraw budgets remain authoritative. - The motion is adapted from the Apache-2.0 Grok Build interaction language, - not copied as a global pulse or high-frequency receipt cascade. -- Keep compact terminals operable: `/config` and `/resume` collapse - secondary chrome before sacrificing their selectable rows at 40x12 and - 60x16, bodies budget for the footer's real wrapped height, and the - selection stays visible through resizes. -- Route footer notices through the classified toast system so informational - acknowledgements (for example "Auto-compaction enabled") expire instead of - becoming permanent idle chrome, while warnings and errors hold as sticky - notices until their window passes. -- Complete the `CODEWHALE_ASCII_SAFE=1` decorative tier: the whale mark, - context meter, braille state markers (mapped by dot density so the working - bubble still reads as a rising fill), bubbles, rails, and role/lane glyphs - all narrow to semantic ASCII while user, model, and CJK text passes - through untouched. Verified by whole-surface rendered-buffer sweeps. -- Repair the Help catalog to match handler truth (`Alt+G`, `Alt+Shift+G`, - `Alt+[`, `Alt+]`, `Alt+L`, `Alt+?`), and give theme, Help, model, and - config rows direct mouse paths with the same activation as Enter. - -### Changed — integrated runtime and TUI - -- Make worker delegation route-aware and identity-safe: workers receive a - small role-scoped system prompt instead of stale parent/model boilerplate, - faster routes resolve through the configured provider, and opening a worker - shows its complete available transcript. Remove `token_budget` from the - ordinary model-facing Agent schema so agents do not micromanage ad-hoc - launches; explicit legacy calls remain readable for compatibility. -- Mature `/config` interaction for enumerated and boolean settings with - pickers/toggles, mouse-wheel scrolling, stable focus, and configured-provider - selection. Startup mode is now only Agent or Plan; legacy `operate`/`yolo` - settings migrate to Agent with permission posture represented separately. -- Show where effective permission policy comes from and keep profile, - environment, project, managed, and requirements-controlled posture read-only - in the in-session editor. Runtime presets edit only proven user-owned root - settings and no longer persist temporary environment overlays. -- Restore the original four-line whale mark and make ambient ocean motion - coherent across the full scroll surface: one continuous ombre, eased fish - that face their direction of travel, fish in otherwise blank scrollback, and - explicit reduced-motion and animation controls. -- Keep model reasoning in the transcript rather than the Tasks strip, retain - the live header status indicator, separate worker and success colors, and use - the same rail grammar for both work-strip and transcript scrollbars. -- Present the default Z.AI Coding Plan route, including child routes, as - subscription quota instead of estimated per-token dollars. No undocumented - account endpoint is called by this change. - -### Added - -- Thinking Machines Lab's Inkling through Together using the exact wire model - `thinkingmachines/inkling`, with `inkling` and `together-inkling` aliases and - exact `none` / `minimal` / `low` / `medium` / `high` / `max` reasoning - values. Codewhale does not invent a context window, price, or offline picker - claim while the provider's public catalog metadata remains inconsistent. -- Expand the verified offline catalog with Claude Sonnet 5, Claude Fable 5, - GPT-5.3 Codex, and Qwen3.7 Plus, including time-aware Sonnet 5 introductory - pricing and explicit cache rates. Refresh stale GLM-5.1, Kimi K2.6, Trinity, - Qwen3.6, Nemotron, Anthropic, GLM-5.2, Kimi K2.7 Code, GLM-5 Turbo, and - GPT-5 Codex price or limit rows; keep Xiaomi MiMo explicitly unpriced where - the provider's token plan and pay-as-you-go surfaces cannot be distinguished. -- MiniMax Messages provider support for MiniMax-M3 and MiniMax-M2.7, with - OpenAI-compatible and Messages routes, regional endpoint guidance, request - coverage, catalog limits, and tier-aware pricing (PR #4354 by @octo-patch). -- Dynamic MCP server infrastructure and an approval-gated tool that lets the - model start a configured MCP server from chat context. Harvested from - #3869 and #3866 by @bistack with authorship preserved. -- Parent `--disallowed-tools` restrictions now flow into sub-agents and Fleet - workers by default, including deny-wins, wildcard, catalog-filtering, and - multi-generation inheritance coverage. Harvested from #4096 by @JayBeest - (#4042). -- Korean (ko) UI locale with full key parity and onboarding/setup wiring - (PR #4347 by @moduvoice). -- Localize the entire underwater layer: 104 new UI strings — launch menu, - phase words, mode/permission chips, footer hints, session picker, context - inspector, route and theme pickers, Fleet roster, workflow status, sidebar - work strip, repository-law approval copy, and file-attach titles — wired - through MessageIds and translated into ja, zh-Hans, es-419, pt-BR, vi, - and ko. Every complete pack now holds exact raw key parity with English - (856 keys), enforced by new tests that the old English-fallback gate could - not perform. The permission chip maps from typed state, so localization - can never silently collapse it. Machine-authored translations follow each - pack's existing terminology and are flagged for native review. -- Anthropic adapter: sanitize top-level `oneOf`/`anyOf`/`allOf` in tool - input schemas so affected tools no longer fail the whole request with - HTTP 400 (PR #4346 by @qinlinwang). -- Anthropic pricing: bill cache-write tokens at published rates - (PR #4348 by @knqiufan, #4318). -- NetBSD: generate QuickJS bindings at build time so `codewhale-workflow-js` - compiles (PR #4349 by @ci4ic4). -- Real-PTY release gates for six-worker fan-out liveness with Esc cancel, - multi-terminal route isolation, queued steering via terminal-safe Ctrl+G - (with Ctrl+S retained where the terminal forwards it), the one-shot - completion footer, and per-theme ANSI output for every shipped palette. - -### Fixed - -- Make release publication complete and source-anchored: every build checks out - the resolved tag commit, tag movement is rejected before GHCR, GitHub - Release, Homebrew, Cargo, or npm writes, and registry helpers require a clean - checkout exactly matching the remote tag. Manual recovery runs are - exact-tag-only and execute the same parity gate as automatic tag pushes. -- Publish a coherent distribution set: both checksum manifests now contain - usable public basenames and cover the full 29-asset matrix; GHCR, Homebrew, - GitHub archives, and the Linux x64 CNB mirror carry `codewhale`, `codew`, and - `codewhale-tui`. The CNB shortcut now fails clearly outside Linux/OpenHarmony - x64 instead of promising assets that the mirror does not build. -- Preserve task text when a skill is invoked through dollar, unified-slash, or - explicit skill syntax, while keeping bare skill invocations and management - subcommands intact (PR #4372 by @nightt5879, co-authored by @CCChisato; - #3915). -- Honor MCP server discovery capabilities: require advertised or legacy - `tools/list`, keep optional resource/template/prompt probes independently - bounded and fail-soft, and format descriptions Unicode-safely (#4308, - harvested with co-authorship from @nsfoxer). -- Age-evict terminal sub-agent worker records from the state ledger so - long-lived, high-fan-out sessions do not keep rewriting multi-megabyte - terminal history (#4217; root-cause and fix direction from @yekern). -- Resolve the sub-agent completion/cancellation race with one terminal-state - claim: cancellation suppresses late mailbox/parent/UI delivery, while a - completed result remains publicly running until its notification is safely - delivered. -- Keep Workflow panel controls from stealing ordinary composer letters. Enter, - Delete, Up/Down, and Esc own panel actions; typed characters return focus to - the composer and start the message normally. -- Preserve the composer prompt gutter from the first typed character through - wrapping, scrolling, cursor placement, and mouse hit-testing so the `>` does - not disappear or make input appear to jump. -- Emit terminal-native OSC 8 metadata for rendered URLs without placing escape - payload bytes in the measured text, keeping long links visible, selectable, - and clickable in supporting terminals. - -- Keep headless structured output terminal-clean: `codewhale exec` engines - no longer emit interactive terminal-title/taskbar OSC sequences, so - `--output-format stream-json` stdout stays parseable, escape-free JSONL. - Interactive TUI sessions keep their terminal chrome. -- Localization honesty: the parity gate was blinded by its own English - fallback — two keybinding rows (`KbCyclePermissions`, `KbCycleThinking`) - were missing from all five "complete" packs and now ship translated; the - Operate-mode copy that drifted in English was retranslated in every pack - (including zh-Hant's slice); three MessageIds absent from - ALL_MESSAGE_IDS are visible to tests again; and the `/config` - theme/locale hints and the invalid-locale error derive from the shipped - registries instead of stale hand lists that advertised 4 of 12 themes - and 4 of 8 locales. -- The setup wizard's constitution step no longer claims a "55-line core" - in any language (the bundled core is larger today); the guided draft says - "the bundled core stays active" instead. -- In-app selection copy is rail-clean and now regression-tested: copied - transcript text excludes the `▎ ╎ │ ●` decorations via cache metadata - (#4208 — thanks @eugenicum for the report and code-aware fix direction; - terminal-native selection with mouse capture off remains a product - decision on the proposed `rail_style` option). - -### Docs - -- Stamp every 0.9-era roadmap document with an explicit status (current, - historical, superseded, principle-only, or future RFC), correct trackers - that recorded unshipped work as done, and describe what remains after - v0.9.0 in `docs/AGENT_RUNTIME.md`. -- Add `docs/rfcs/UNIFIED_PROVIDER_LOGIN.md`: one `codewhale auth login` - surface for Anthropic, OpenAI Codex, and xAI, with the Anthropic adapter - gated on verifying flow permissions before any constants are adopted. -- Refresh `docs/ACCESSIBILITY.md` for treatment-independent ambient life - and the completed ASCII tier. - -### Changed — runtime foundations - -- Make the advertised Android/Termux release target buildable by generating - QuickJS bindings against the Android NDK instead of expecting an upstream - pre-generated `aarch64-linux-android` binding file, and give Android CLI/TUI - HTTP clients a preconfigured rustls root store (Mozilla WebPKI roots) so - standalone Termux processes stop panicking inside - `rustls-platform-verifier`'s JVM expectations (#4236, #4242). -- Rebalance the bundled Constitution after the v0.8.67 prompt ablation: keep - the procedural policy tail in mode-specific layers, while restoring concise - behavioral guidance for momentum, causal investigation, constraint-first - decisions, mechanism-backed guarantees, and clean continuity. -- Wire live catalog cache into provider/model pickers without dropping stale or - prior rows after TTL expiry / refresh failure (#4139). Remove the dead - `OFFERING_SEEDS` hand table so the bundled Models.dev catalog is the sole - seed source; pickers show a compact `stale` / `cache failed` chrome chip when - the Models.dev layer is past TTL or last refresh failed. -- Make `work_update` the sole model-facing To-do / Work progress tool (#4132). - `checklist_*` and `todo_*` remain registered as hidden compat aliases for - transcript replay; `update_plan` stays Strategy metadata/context/route, not - a second checklist. Mode/approval prompts nudge the single surface. -- Demote the bundled Models.dev snapshot to an offline/stale fallback after - live catalog refresh (#4188). ProviderLake precedence is live Models.dev > - bundled seed > legacy hardcoded completion names; pickers, inventory, and - subagent validation stay catalog-backed, and Codewhale-only providers keep - defaults when Models.dev has no rows. - -### Added -- Wire xAI device-code OAuth into `codewhale auth xai-device`, the TUI - `/auth xai-device` command, and guided provider setup, with comment-preserving - auth-mode persistence and loopback exchange coverage (#4257). -- Add GPT-5.6 Sol, Terra, and Luna to the OpenAI API route, including their - 1.05M context metadata, 128K output limits, pricing, and `max` reasoning - effort. Add Meta Model API as a first-class OpenAI-compatible provider for - Muse Spark 1.1 with 1M context, tool/reasoning metadata, provider aliases, - and both `META_MODEL_API_KEY` and Meta's `MODEL_API_KEY` credential names. -- Catalog automation: `scripts/catalog_models_dev.py` refreshes secret-free - Models.dev / OpenRouter listings and validates the offline seed snapshot - (`snapshot --check`) without ever persisting API keys (#4117). -- `/model` picker cycles six catalog views with `A` (Configured → Catalog → - Recent → Coding → Cheap → Long context) and richer row metadata from the - live/bundled catalog (context, max output, tools, reasoning, price/M, - freshness). Discoverability views do not auto-apply a surprising route - (#4115). - -- Workflow runs are now durable: every run appends to a - `.codewhale/workflow-runs.jsonl` journal and hydrates on startup, so - `workflow status` survives restarts; runs left `running` by a dead process - are recovered as failed (#4011). The transcript renders workflow tool - output as a run card (status, goal, children, progress, verification) - instead of a generic one-liner (#4038), and `workflow` accepts a `verify` - flag that runs post-completion verification gates and fails the run when - gates fail (#4013). -- Hotbar sources for MCP tools and skills: MCP tool slots prefill the - composer (execution stays behind the normal tool-approval flow) and skill - slots activate through the existing `$skill` alias (#2068, #2069). -- Mode & permission surface: Tab cycles Plan → Act → Operate; Shift+Tab - cycles the Agent permission posture (Ask / Auto-Review / Full Access) with - a footer permission chip; Ctrl+T cycles reasoning effort and Ctrl+Shift+T - opens the live transcript overlay. Operate is the orchestration mode - (delegate, wait, inspect, dispatch) and raises sub-agent fan-out while - focusing the Agents sidebar. -- Provider lake facade: the provider/model pickers, hotbar, and model - inventory now enumerate configured providers' models from the bundled - catalog (with an `A` toggle to browse the full catalog), replacing the - hardcoded per-provider model table (#3830 follow-up). -- Added Cursor-integrated-terminal dogfood evidence for the published v0.8.67 - release, covering installed binary provenance, release/publication checks, - headless runtime smoke, setup QA, and remaining manual visual TUI checks. -- README and README.zh-CN now point users to the community-maintained - CodeWhale for VS Code GUI frontend while clarifying that this repository's - `extensions/vscode/` scaffold remains the read-only Phase 0 viewer (#4035). - -### Fixed - -- Sub-agent waiting no longer peek→sleep polls: `agent(action="wait")` joins - children, unchanged peeks are throttled (~30s) with an anti-polling nudge, - and mode prompts teach the join primitive (#4097). Harvested from PR #4098 - by [@Mr-Moon121](https://github.com/Mr-Moon121) (Jeffrey Luna). -- `/provider` picker remembers catalog/configured view and highlighted row - across reopen, matching `/model` picker memory. -- Mode picker roster is exactly Act / Plan / Operate (no Multitask, no - numeric `4`/`5` gaps). Legacy `yolo`/`4` remain invisible one-way - permission shorthand for Act + Bypass. - -- Fleet setup is a role/profile roster editor, not a provider-scoped model - picker: the Model step lists routes from every configured provider (not - only the active one), a picked route's provider is persisted explicitly in - the saved profile TOML (`provider = "..."`, never inferred from the model - id), and the loader/route resolver read that field back out verbatim. The - draft-preview save keypress no longer competes with a separate pager's - `g`/`G` scroll bindings — the exact TOML preview now renders inline on the - same Review step that saves it (#4093). -- `codewhale fleet run` and interactive in-process Fleet launches now honor a - profile-pinned provider/model route instead of merely recording it on the - receipt. Headless workers receive the non-secret `--provider` and `--model` - pair; TUI workers resolve the same explicit route in process. Credentials - still come from the worker's environment, provider is never inferred from a - model id, and unpinned workers continue to inherit the run route (#4093, - #4193). -- The Fleet setup `m` model-assisted redraft no longer drops a picked - cross-provider route: the provider/model the operator chose are re-pinned - onto the drafted profile (a model draft is always `provider: None`), so - saving it keeps the explicit route instead of persisting an ambiguous, - provider-scoped profile (#4093). -- Saving a Fleet profile now fails with a clear message when it pins a - provider that has no configured credentials, using the same - configured-provider check the model picker uses (#4093). -- Workflow correctness: completion polling fails closed instead of - fabricating success when a sub-agent reports no terminal status; cancel - interrupts the JS VM (cancel handle + abort) and blocks further spawns; - and `budget.spent()` reports real manager-scope usage instead of always 0. -- Sub-agent spawns validate the model↔provider pair before dispatch: - inherited/faster routes remap foreign models to the provider's catalog - default, and explicit pins fail fast with a diagnostic instead of an - upstream model-not-found error. -- TUI stability: engine event drains break every 8–16 events / 8 ms to keep - input live (#1830, #2317, #1198); the terminal input pump restarts after - stall recovery on macOS/Linux too; the startup raw-mode probe no longer - leaks raw mode on timeout; recovery snapshots persist every 45 s during - long turns and the offline queue persists on every push (#1830); - queue/steer paths surface toasts while streaming (#2317, #1338); and - modal submit errors re-open the modal instead of being swallowed (#1198). -- Core/state: paused jobs persist as paused across restarts; unarchive - updates the in-memory cache; tool dispatch has a timeout; MCP - notifications no longer receive responses; corrupted checkpoints surface - errors instead of loading empty state; the session index compacts instead - of growing unbounded; and recording thread-goal usage no longer - self-deadlocks the state store. -- Runtime compaction summaries are now persisted into `/v1` thread records so - engine reloads and restarts preserve compacted context. Contributed by - MXAntian (@MXAntian) (#4091). -- The TUI leaves xterm alternate-scroll mode off when mouse capture is disabled, - preserving native terminal text selection in light-theme/no-mouse-capture - sessions. Contributed by Nightt (@nightt5879) (#4088, #4026). -- The public `/api/github/feed` endpoint is now forced dynamic on Cloudflare so - it returns live GitHub activity instead of a build-time empty feed. - -### Security - -- Require bearer authentication for `/v1/chat/completions`, compare tokens in - constant time, return accurate 4xx/5xx statuses, bound request bodies and SSE - frames, redact secrets from stdio `config get`, and reliably reap the runtime - child during shutdown. -- Keep trust precedence and secret persistence fail-closed: user ExecPolicy - rules outrank agent-layer rules, chained commands cannot propose unsafe - trusted-prefix amendments, and config and secret writes are atomic with - filesystem synchronization on every supported platform. - -### Changed - -- Tool-hang watchdog trimmed from 15 minutes to 10 (#1862); approval modal - footer hints use a higher-contrast tier (#3380); status/mode copy is - disclosed once across header, footer, cards, and sidebar instead of - repeated per layer. -- Removed the unused `tui::whale_routes` taxonomy module and its tests. - Contributed by Darrell Thomas (@DarrellThomas) (#4041, #3852). - -### Deprecated - -- YOLO mode: `--yolo`, `default_mode = "yolo"`, and the hotbar YOLO action - now map to Act + Full Access permissions via a compatibility shim and - show a one-shot deprecation notice. Removal is deferred beyond v0.9.0 so - this release does not break existing scripts without a dedicated cutover. - -- Google Gemini is its own backend (`/provider google`) on the official - OpenAI-compatible route with thought-signature capture/replay and - fail-closed replay for thinking models. Antigravity (`agy` 1.1.13) joins - as a separate credential-plane provider: consent-gated read-only import - of the official CLI's login with `ANTIGRAVITY_API_KEY`/`AGY_ADC_AUTH` - precedence; requests fail closed until the cloud-code wire protocol is - implemented. - -### Removed - -- Remove the deprecated `deepseek` and `deepseek-tui` binary shims in this - breaking release. `codewhale`, `codew`, and `codewhale-tui` are the supported - entry points; existing DeepSeek provider support and legacy config/session - migration remain intact. - -### Known issues - -- Android/Termux arm64 remains a preview in v0.9.0. The target, asset wiring, - updater selection, dependency graph, and source-build path have automated or - static coverage, but shell/PTY/config/TUI startup and runtime behavior remain - unverified on a real device (#4236, #4242). Do not use a GNU/Linux arm64 - archive in Termux. - -### Contributors - -Thank you to the international community whose code, reports, reviews, and -reproductions shaped v0.9.0: - -- [@amuthantamil](https://github.com/amuthantamil), - [@bistack](https://github.com/bistack), - [@bruce6135](https://github.com/bruce6135), - [@CCChisato](https://github.com/CCChisato), - [@ci4ic4](https://github.com/ci4ic4), - [@cyq1017](https://github.com/cyq1017), and - [@DarrellThomas](https://github.com/DarrellThomas). -- [@eugenicum](https://github.com/eugenicum), - [@findshan](https://github.com/findshan), - [@gaord](https://github.com/gaord), - [@hmr-BH](https://github.com/hmr-BH), - [@hongqitai](https://github.com/hongqitai), and - [@idling11](https://github.com/idling11). -- [@JayBeest](https://github.com/JayBeest), - [@knqiufan](https://github.com/knqiufan), - [@LeoLin990405](https://github.com/LeoLin990405), - [@moduvoice](https://github.com/moduvoice), - [@mvanhorn](https://github.com/mvanhorn), - [@Mr-Moon121](https://github.com/Mr-Moon121), and - [@MXAntian](https://github.com/MXAntian). -- [@Angel-Hair](https://github.com/Angel-Hair), - [@nightt5879](https://github.com/nightt5879), - [@nsfoxer](https://github.com/nsfoxer), - [@octo-patch](https://github.com/octo-patch), - [@qinlinwang](https://github.com/qinlinwang), - [@SamhandsomeLee](https://github.com/SamhandsomeLee), and - [@taixinguo](https://github.com/taixinguo). -- [@WavesMan](https://github.com/WavesMan), - [@wuisabel-gif](https://github.com/wuisabel-gif), and - [@yekern](https://github.com/yekern). - --- Older releases: [CHANGELOG.md](https://github.com/Hmbown/CodeWhale/blob/main/CHANGELOG.md) and [docs/CHANGELOG_ARCHIVE.md](https://github.com/Hmbown/CodeWhale/blob/main/docs/CHANGELOG_ARCHIVE.md). diff --git a/crates/tui/Cargo.toml b/crates/tui/Cargo.toml index 2a66860f37..123294c811 100644 --- a/crates/tui/Cargo.toml +++ b/crates/tui/Cargo.toml @@ -30,27 +30,27 @@ name = "codewhale-tui" path = "src/main.rs" [dependencies] -codewhale-memory = { path = "../memory", version = "0.10.0" } +codewhale-memory = { path = "../memory", version = "0.10.1" } ahash = "0.8" anyhow.workspace = true -codewhale-config = { path = "../config", version = "0.10.0" } -codewhale-cloud-facts = { path = "../cloud-facts", version = "0.10.0" } -codewhale-command-contract = { path = "../command-contract", version = "0.10.0" } -codewhale-core = { path = "../core", version = "0.10.0" } -codewhale-execpolicy = { path = "../execpolicy", version = "0.10.0" } -codewhale-hooks = { path = "../hooks", version = "0.10.0" } -codewhale-lane = { path = "../lane", version = "0.10.0" } -codewhale-models = { path = "../models", version = "0.10.0" } -codewhale-palette = { path = "../palette", version = "0.10.0" } -codewhale-paths = { path = "../paths", version = "0.10.0" } -codewhale-protocol = { path = "../protocol", version = "0.10.0" } -codewhale-release = { path = "../release", version = "0.10.0" } -codewhale-runtime = { path = "../runtime", version = "0.10.0" } -codewhale-secrets = { path = "../secrets", version = "0.10.0" } -codewhale-telemetry = { path = "../telemetry", version = "0.10.0" } -codewhale-tools = { path = "../tools", version = "0.10.0" } -codewhale-workflow = { path = "../workflow", version = "0.10.0" } -codewhale-workflow-js = { path = "../workflow-js", version = "0.10.0" } +codewhale-config = { path = "../config", version = "0.10.1" } +codewhale-cloud-facts = { path = "../cloud-facts", version = "0.10.1" } +codewhale-command-contract = { path = "../command-contract", version = "0.10.1" } +codewhale-core = { path = "../core", version = "0.10.1" } +codewhale-execpolicy = { path = "../execpolicy", version = "0.10.1" } +codewhale-hooks = { path = "../hooks", version = "0.10.1" } +codewhale-lane = { path = "../lane", version = "0.10.1" } +codewhale-models = { path = "../models", version = "0.10.1" } +codewhale-palette = { path = "../palette", version = "0.10.1" } +codewhale-paths = { path = "../paths", version = "0.10.1" } +codewhale-protocol = { path = "../protocol", version = "0.10.1" } +codewhale-release = { path = "../release", version = "0.10.1" } +codewhale-runtime = { path = "../runtime", version = "0.10.1" } +codewhale-secrets = { path = "../secrets", version = "0.10.1" } +codewhale-telemetry = { path = "../telemetry", version = "0.10.1" } +codewhale-tools = { path = "../tools", version = "0.10.1" } +codewhale-workflow = { path = "../workflow", version = "0.10.1" } +codewhale-workflow-js = { path = "../workflow-js", version = "0.10.1" } async-stream = "0.3.6" async-trait.workspace = true base64 = "0.23.1" @@ -131,20 +131,20 @@ liblzma = { version = "0.4", features = ["static"] } flate2 = "1.1" sha2.workspace = true semver.workspace = true -codewhale-localization = { path = "../localization", version = "0.10.0" } +codewhale-localization = { path = "../localization", version = "0.10.1" } shell-words = "1.1.1" mimalloc = { workspace = true, optional = true } rusty_alloc-api = { workspace = true, optional = true } [build-dependencies] -codewhale-build-support = { path = "../build-support", version = "0.10.0" } +codewhale-build-support = { path = "../build-support", version = "0.10.1" } [dev-dependencies] -codewhale-runtime = { path = "../runtime", version = "0.10.0", features = [ +codewhale-runtime = { path = "../runtime", version = "0.10.1", features = [ "test-support", "test-thread-scoped-state", ] } -codewhale-models = { path = "../models", version = "0.10.0", features = [ +codewhale-models = { path = "../models", version = "0.10.1", features = [ "test-support", ] } cucumber = "0.23.0" diff --git a/docs/INSTALL.md b/docs/INSTALL.md index d8cc5b7831..fade6f6e90 100644 --- a/docs/INSTALL.md +++ b/docs/INSTALL.md @@ -23,7 +23,7 @@ there. Install commands that use `latest` resolve to the latest **published** GitHub Release or package. Between releases, `main` may already describe the next -version (for example the v0.10.0 source candidate before 2026-09-22). A +version (for example the v0.10.1 source candidate before 2026-09-22). A candidate isn't installable until its tag, checksums and release assets exist. diff --git a/docs/public-surface-facts.json b/docs/public-surface-facts.json index d4604cf4e2..c1978950df 100644 --- a/docs/public-surface-facts.json +++ b/docs/public-surface-facts.json @@ -20,7 +20,7 @@ ] }, "sourceCandidate": { - "version": "0.10.0", + "version": "0.10.1", "providerCount": 50, "toolCount": 80, "sandboxBackends": [ @@ -182,7 +182,7 @@ "localRuntime": "runtime, workspace state, and audit log stay on the user's machine", "hostedProviderBoundary": "the selected hosted provider receives turn context required for inference", "localInference": "a loopback local-model route can keep inference local", - "telemetry": "Codewhale 0.10.0 counts anonymous usage by default and discloses it at first launch (policy notice version 5, naming Codewhale and PostHog as processors), while the earlier 0.9.11 release asked first; turning it off is a saved choice that later versions keep, an opt-out recorded under the earlier opt-in policy stays off, and showing the notice never records any acceptance on the user's behalf; Codewhale does not collect conversations, code, prompts, files, file/repo/branch names, model content, credentials, or per-turn/per-tool timelines; while on, sessions post aggregate counts and closed enums to the first-party endpoint https://telemetry.codewhale.net/v1/telemetry, whose storage has no IP, country, or geo column and a fixed three-month retention; optional PostHog forwarding requires separate operator configuration and verified IP-safe egress, and its retention is a separate project setting; telemetry_endpoint = \"\" writes only to a local dry-run file; no mandatory hosted relay", + "telemetry": "Codewhale 0.10.1 counts anonymous usage by default and discloses it at first launch (policy notice version 5, naming Codewhale and PostHog as processors), while the earlier 0.9.11 release asked first; turning it off is a saved choice that later versions keep, an opt-out recorded under the earlier opt-in policy stays off, and showing the notice never records any acceptance on the user's behalf; Codewhale does not collect conversations, code, prompts, files, file/repo/branch names, model content, credentials, or per-turn/per-tool timelines; while on, sessions post aggregate counts and closed enums to the first-party endpoint https://telemetry.codewhale.net/v1/telemetry, whose storage has no IP, country, or geo column and a fixed three-month retention; optional PostHog forwarding requires separate operator configuration and verified IP-safe egress, and its retention is a separate project setting; telemetry_endpoint = \"\" writes only to a local dry-run file; no mandatory hosted relay", "account": "no account required for the local runtime", "plan": "Plan centrally refuses file mutation and shell execution; policy-allowed research may contact external services and local session state can still be persisted.", "sandbox": "Seatbelt is used on macOS when available; Linux bubblewrap is opt-in and must be installed; Windows currently reports no OS sandbox", diff --git a/extensions/vscode/package-lock.json b/extensions/vscode/package-lock.json index 985d28ee37..cf410d5134 100644 --- a/extensions/vscode/package-lock.json +++ b/extensions/vscode/package-lock.json @@ -1,12 +1,12 @@ { "name": "codewhale-vscode", - "version": "0.10.0", + "version": "0.10.1", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "codewhale-vscode", - "version": "0.10.0", + "version": "0.10.1", "license": "MIT", "devDependencies": { "@types/node": "^20.19.27", diff --git a/extensions/vscode/package.json b/extensions/vscode/package.json index 6f8f80ea56..33747ad5e8 100644 --- a/extensions/vscode/package.json +++ b/extensions/vscode/package.json @@ -2,7 +2,7 @@ "name": "codewhale-vscode", "displayName": "Codewhale", "description": "Official Codewhale VS Code extension: agentic chat in the secondary sidebar over the local Engine Runtime API, with editor context, streaming turns, approvals, and terminal parity.", - "version": "0.10.0", + "version": "0.10.1", "publisher": "codewhale", "license": "MIT", "preview": true, diff --git a/npm/codewhale/package.json b/npm/codewhale/package.json index f4fb07857f..38f05349e6 100644 --- a/npm/codewhale/package.json +++ b/npm/codewhale/package.json @@ -1,7 +1,7 @@ { "name": "codewhale", - "version": "0.10.0", - "codewhaleBinaryVersion": "0.10.0", + "version": "0.10.1", + "codewhaleBinaryVersion": "0.10.1", "description": "Terminal coding agent for supported hosted and local models. One runtime on your machine. Rust, MIT.", "author": "Hmbown", "license": "MIT", diff --git a/npm/runtime-sdk/package.json b/npm/runtime-sdk/package.json index 525d508af2..19030e31a1 100644 --- a/npm/runtime-sdk/package.json +++ b/npm/runtime-sdk/package.json @@ -1,6 +1,6 @@ { "name": "@codewhale/runtime-sdk", - "version": "0.10.0", + "version": "0.10.1", "description": "Typed JavaScript helpers for Codewhale Runtime API Fleet endpoints.", "license": "MIT", "type": "module", diff --git a/package-lock.json b/package-lock.json index b96f054246..9533db887c 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1573,7 +1573,7 @@ } }, "npm/codewhale": { - "version": "0.10.0", + "version": "0.10.1", "funding": [ { "type": "github", @@ -1614,7 +1614,7 @@ }, "npm/runtime-sdk": { "name": "@codewhale/runtime-sdk", - "version": "0.10.0", + "version": "0.10.1", "license": "MIT", "engines": { "node": ">=18" diff --git a/scripts/remote-smoke/setup-vm.sh b/scripts/remote-smoke/setup-vm.sh index c8299954ec..83d2ecb64f 100644 --- a/scripts/remote-smoke/setup-vm.sh +++ b/scripts/remote-smoke/setup-vm.sh @@ -20,7 +20,7 @@ # Uses prebuilt release binaries instead of a Rust build. set -euo pipefail -RELEASE_TAG="${RELEASE_TAG:-v0.10.0}" +RELEASE_TAG="${RELEASE_TAG:-v0.10.1}" REPO_URL="${REPO_URL:-https://github.com/Hmbown/CodeWhale.git}" REPO_BRANCH="${REPO_BRANCH:-main}" SECRETS_FILE="${SECRETS_FILE:-/tmp/cw-secrets.env}" diff --git a/web/lib/facts.generated.ts b/web/lib/facts.generated.ts index 18b5544f6b..af540a37a9 100644 --- a/web/lib/facts.generated.ts +++ b/web/lib/facts.generated.ts @@ -37,10 +37,10 @@ export interface RepoFacts { } export const FACTS: RepoFacts = { - "generatedAt": "2026-09-25T21:38:00.475Z", + "generatedAt": "2026-09-28T21:21:23.884Z", "sourceRevision": null, "sourceCommittedAt": null, - "version": "0.10.0", + "version": "0.10.1", "crates": [ "agent", "app-server", From 69df4c2c6937e903e490c33d71478d9235c0cac4 Mon Sep 17 00:00:00 2001 From: CodeWhale Bot Date: Mon, 28 Sep 2026 14:54:11 -0700 Subject: [PATCH 2/4] release: cut 0.10.1 credits and restamp the providers-export golden - web/lib/release-credits.ts: unreleased contributors move into the 0.10.1 release lists (@BX166 as the report helper); the website credits test requires exact parity with the 0.10.1 changelog block. - docs/CONTRIBUTORS.md: the v0.10.1 band is no longer unreleased and credits #6664 and #6666. - providers-export.golden.json regenerated at 0.10.1 with the documented WRITE_GOLDEN command. Evidence: vitest lib/public-copy.test.ts 6 passed; check-contributor-credit OK on all three surfaces; cargo test -p codewhale-config --lib route::export test result: ok. 5 passed; 0 failed. Co-Authored-By: Claude Opus 5.5 (1M context) Claude-Session: https://claude.ai/code/session_014ZwqatxgVFxHvovngywnks --- .../src/route/providers-export.golden.json | 2 +- docs/CONTRIBUTORS.md | 6 ++-- web/lib/release-credits.ts | 34 ++++--------------- 3 files changed, 10 insertions(+), 32 deletions(-) diff --git a/crates/config/src/route/providers-export.golden.json b/crates/config/src/route/providers-export.golden.json index a9ecf5e8c7..d918b0a143 100644 --- a/crates/config/src/route/providers-export.golden.json +++ b/crates/config/src/route/providers-export.golden.json @@ -1,6 +1,6 @@ { "schemaVersion": 1, - "runtimeVersion": "0.10.0", + "runtimeVersion": "0.10.1", "routes": [ { "id": "anthropic", diff --git a/docs/CONTRIBUTORS.md b/docs/CONTRIBUTORS.md index e9ae6f33e3..ce4ef86c0f 100644 --- a/docs/CONTRIBUTORS.md +++ b/docs/CONTRIBUTORS.md @@ -28,13 +28,13 @@ notes, and relevant issue/PR comments. ## Contributors by time
-v0.10.1 (unreleased) +v0.10.1 — reliability and first-run fixes **Merged or adapted contributions** -- **[gaord](https://github.com/gaord)** — let a client fork a thread at a named turn ([#6580](https://github.com/Hmbown/Codewhale/pull/6580)), let undo roll back files for the turn it is undoing ([#6483](https://github.com/Hmbown/Codewhale/pull/6483)), stopped resume and fork from duplicating threads and sessions ([#6406](https://github.com/Hmbown/Codewhale/pull/6406)), and exposed user-defined provider routes to native clients ([#6404](https://github.com/Hmbown/Codewhale/pull/6404)). +- **[gaord](https://github.com/gaord)** — let a client fork a thread at a named turn ([#6580](https://github.com/Hmbown/Codewhale/pull/6580)), let undo roll back files for the turn it is undoing ([#6483](https://github.com/Hmbown/Codewhale/pull/6483)), stopped resume and fork from duplicating threads and sessions ([#6406](https://github.com/Hmbown/Codewhale/pull/6406)), exposed user-defined provider routes to native clients ([#6404](https://github.com/Hmbown/Codewhale/pull/6404)), and kept a fork going when a turn lost its tool call ([#6664](https://github.com/Hmbown/Codewhale/pull/6664)). - **[Lstarsky0](https://github.com/Lstarsky0)** — moved the docs/work, legal, digest and FAQ pages onto the dictionary spine ([#6405](https://github.com/Hmbown/Codewhale/pull/6405), [#6417](https://github.com/Hmbown/Codewhale/pull/6417), [#6499](https://github.com/Hmbown/Codewhale/pull/6499), [#6574](https://github.com/Hmbown/Codewhale/pull/6574)), tightened the Chinese-branching ceiling to 18 ([#6403](https://github.com/Hmbown/Codewhale/pull/6403)), and made Fleet publish without a two-link window ([#6431](https://github.com/Hmbown/Codewhale/pull/6431)). -- **[aboimpinto](https://github.com/aboimpinto)** — restored a green Linux full-workspace test gate without loosening any test ([#6581](https://github.com/Hmbown/Codewhale/pull/6581)). +- **[aboimpinto](https://github.com/aboimpinto)** — restored a green Linux full-workspace test gate without loosening any test, twice ([#6581](https://github.com/Hmbown/Codewhale/pull/6581), [#6666](https://github.com/Hmbown/Codewhale/pull/6666)). - **[dajiaohuang](https://github.com/dajiaohuang)** — validated `config set` values against the settings schema ([#6568](https://github.com/Hmbown/Codewhale/pull/6568)). - **[Water-Run](https://github.com/Water-Run)** — ingested namespaced model-only catalog entries so models present only in the canonical `models` map reach the offering list ([#6400](https://github.com/Hmbown/Codewhale/pull/6400)), and retired the blanket dead-code allowance and its unused feature stages, tightening the budget to match ([#6402](https://github.com/Hmbown/Codewhale/pull/6402)). diff --git a/web/lib/release-credits.ts b/web/lib/release-credits.ts index 46753ca34e..a860e42b2c 100644 --- a/web/lib/release-credits.ts +++ b/web/lib/release-credits.ts @@ -20,17 +20,10 @@ /** Contributors whose PRs were merged or harvested into this release. */ export const RELEASE_CONTRIBUTORS: string[] = [ - "@AdityaVG13", - "@aboimpinto", "@gaord", - "@zhuowp", - "@h3c-hexin", - "@asto18089", - "@yrk111222", - "@xiechimon", - "@VincentCorleone", - "@Serendo", - "@yetuge", + "@Lstarsky0", + "@aboimpinto", + "@dajiaohuang", "@Water-Run", ]; @@ -39,25 +32,10 @@ export const RELEASE_CONTRIBUTORS: string[] = [ * one. scripts/check-contributor-credit.py requires them here now; the release * cut moves them into RELEASE_CONTRIBUTORS with that release's changelog block. */ -export const UNRELEASED_CONTRIBUTORS: string[] = [ - "@gaord", - "@BX166", - "@Lstarsky0", - "@aboimpinto", - "@dajiaohuang", - "@Water-Run", -]; +export const UNRELEASED_CONTRIBUTORS: string[] = []; /** * Contributors who helped with reports, reproductions, and verification. - * Credit covers the 0.10.0 reports recorded in docs/CONTRIBUTORS.md. + * Credit covers the 0.10.1 reports recorded in docs/CONTRIBUTORS.md. */ -export const RELEASE_HELPERS: string[] = [ - "@7jrxt42BxFZo4iAnN4CX", - "@BX166", - "@Lstarsky0", - "@Lujc0523", - "@Statter", - "@bevis-wong", - "@sequico", -]; +export const RELEASE_HELPERS: string[] = ["@BX166"]; From 32197b3cb3977ef0efcbdce35369e64f7c5180c3 Mon Sep 17 00:00:00 2001 From: CodeWhale Bot Date: Mon, 28 Sep 2026 15:25:31 -0700 Subject: [PATCH 3/4] release: required candidate credits follow the 0.10.1 ledger public-surface-contract requires every required candidate credit to appear in CHANGELOG, docs/CONTRIBUTORS.md and web/lib/release-credits.ts; the list still named the 0.10.0 cohort. Evidence: web vitest 56 files / 502 passed; npm run check (web surface gate incl. build) exit 0. Co-Authored-By: Claude Opus 5.5 (1M context) Claude-Session: https://claude.ai/code/session_014ZwqatxgVFxHvovngywnks --- docs/public-surface-facts.json | 22 +++++----------------- 1 file changed, 5 insertions(+), 17 deletions(-) diff --git a/docs/public-surface-facts.json b/docs/public-surface-facts.json index c1978950df..0cce49a193 100644 --- a/docs/public-surface-facts.json +++ b/docs/public-surface-facts.json @@ -227,24 +227,12 @@ "web/lib/release-credits.ts" ], "requiredCandidateCredits": [ - "@aboimpinto", - "@7jrxt42BxFZo4iAnN4CX", - "@BX166", - "@Lstarsky0", - "@Lujc0523", - "@Statter", - "@sequico", - "@bevis-wong", - "@AdityaVG13", "@gaord", - "@zhuowp", - "@h3c-hexin", - "@asto18089", - "@yrk111222", - "@xiechimon", - "@VincentCorleone", - "@Serendo", - "@yetuge" + "@Lstarsky0", + "@aboimpinto", + "@dajiaohuang", + "@Water-Run", + "@BX166" ] }, "screenshot": { From f46dc252f1f785ad9fd122d6ca2725f3bcd46092 Mon Sep 17 00:00:00 2001 From: CodeWhale Bot Date: Mon, 28 Sep 2026 16:04:16 -0700 Subject: [PATCH 4/4] docs(install): date the source-candidate example to the 0.10.1 release Co-Authored-By: Claude Opus 5.5 (1M context) Claude-Session: https://claude.ai/code/session_014ZwqatxgVFxHvovngywnks --- docs/INSTALL.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/INSTALL.md b/docs/INSTALL.md index fade6f6e90..96b995165d 100644 --- a/docs/INSTALL.md +++ b/docs/INSTALL.md @@ -23,7 +23,7 @@ there. Install commands that use `latest` resolve to the latest **published** GitHub Release or package. Between releases, `main` may already describe the next -version (for example the v0.10.1 source candidate before 2026-09-22). A +version (for example the v0.10.1 source candidate before 2026-09-28). A candidate isn't installable until its tag, checksums and release assets exist.