diff --git a/CHANGELOG.md b/CHANGELOG.md index 50e759bd..1eda34d1 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,50 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## [Unreleased] +## [0.8.49] - 2026-06-01 + +### Added + +- Added the missing `[providers.moonshot]` example block for Moonshot/Kimi, + documented `completion_sound`, and refreshed the tool-surface docs for the + current registry, including `finance`, `web.run`, git history tools, memory, + OCR, and other registered tools. + +### Changed + +- Hardened prefix-cache fingerprints to hash API-visible tool schema details, + not just tool names, so schema and description drift invalidates cached + prefixes before it can confuse model calls (#2264). +- Kept `finance` registered independently from web-search tools and prevented + duplicate web/patch tool registration in agent and YOLO modes. + +### Fixed + +- Fixed the DeepSeek V4-Pro cost estimate after the 2026-05-31 pricing cutoff: + the post-promotion official rate remains one quarter of the original price, + so CodeWhale no longer shows roughly 4x too much after June 1 (#2489). +- Fixed Kimi/Moonshot tool schema normalization by moving parent `type` fields + into `anyOf`/`oneOf` items, with regression coverage for nested schema shapes + that could otherwise still fail Kimi validation (#2438). +- Fixed raw ANSI/SGR fragments leaking into footer, shell-label, and sidebar + activity text during active tool execution (#2481). +- Fixed `[tui]` config parsing when `status_items` is omitted, restoring the + documented default footer order for older and hand-written configs (#2483). +- Fixed a shell env-scrubbing test so it does not depend on the user's default + shell understanding POSIX parameter expansion. +- Removed stale `qwen/qwen3.7-max` references left in `config.example.toml` + after the v0.8.48 preset removal. + +### Community + +Thanks to **@idling11** (#2480, #2485), **@reidliu41** (#2493), +**@hongqitai** (#2495), and **@encyc** (#2477) for the fixes and reliability +work harvested into this release. + +Thanks also to reporters and verification helpers whose issues shaped the +release: **@A-Corner** (#2438), **@taiwan988** (#2483), **@AiurArtanis** +(#2489), and **@Hmbown** (#2481). + ## [0.8.48] - 2026-05-31 ### Added @@ -5118,7 +5162,8 @@ Welcome — and thank you. - Hooks system and config profiles - Example skills and launch assets -[Unreleased]: https://github.com/Hmbown/CodeWhale/compare/v0.8.48...HEAD +[Unreleased]: https://github.com/Hmbown/CodeWhale/compare/v0.8.49...HEAD +[0.8.49]: https://github.com/Hmbown/CodeWhale/compare/v0.8.48...v0.8.49 [0.8.48]: https://github.com/Hmbown/CodeWhale/compare/v0.8.47...v0.8.48 [0.8.47]: https://github.com/Hmbown/CodeWhale/compare/v0.8.46...v0.8.47 [0.8.46]: https://github.com/Hmbown/CodeWhale/compare/v0.8.45...v0.8.46 diff --git a/Cargo.lock b/Cargo.lock index 9c28257f..328d1930 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -803,7 +803,7 @@ checksum = "e9b18233253483ce2f65329a24072ec414db782531bdbb7d0bbc4bd2ce6b7e21" [[package]] name = "codewhale-agent" -version = "0.8.48" +version = "0.8.49" dependencies = [ "codewhale-config", "serde", @@ -811,7 +811,7 @@ dependencies = [ [[package]] name = "codewhale-app-server" -version = "0.8.48" +version = "0.8.49" dependencies = [ "anyhow", "axum", @@ -836,7 +836,7 @@ dependencies = [ [[package]] name = "codewhale-cli" -version = "0.8.48" +version = "0.8.49" dependencies = [ "anyhow", "chrono", @@ -863,7 +863,7 @@ dependencies = [ [[package]] name = "codewhale-config" -version = "0.8.48" +version = "0.8.49" dependencies = [ "anyhow", "codewhale-secrets", @@ -876,7 +876,7 @@ dependencies = [ [[package]] name = "codewhale-core" -version = "0.8.48" +version = "0.8.49" dependencies = [ "anyhow", "chrono", @@ -894,7 +894,7 @@ dependencies = [ [[package]] name = "codewhale-execpolicy" -version = "0.8.48" +version = "0.8.49" dependencies = [ "anyhow", "codewhale-protocol", @@ -903,7 +903,7 @@ dependencies = [ [[package]] name = "codewhale-hooks" -version = "0.8.48" +version = "0.8.49" dependencies = [ "anyhow", "async-trait", @@ -917,7 +917,7 @@ dependencies = [ [[package]] name = "codewhale-mcp" -version = "0.8.48" +version = "0.8.49" dependencies = [ "anyhow", "serde", @@ -926,7 +926,7 @@ dependencies = [ [[package]] name = "codewhale-protocol" -version = "0.8.48" +version = "0.8.49" dependencies = [ "serde", "serde_json", @@ -934,7 +934,7 @@ dependencies = [ [[package]] name = "codewhale-release" -version = "0.8.48" +version = "0.8.49" dependencies = [ "anyhow", "reqwest", @@ -945,7 +945,7 @@ dependencies = [ [[package]] name = "codewhale-secrets" -version = "0.8.48" +version = "0.8.49" dependencies = [ "dirs", "keyring", @@ -958,7 +958,7 @@ dependencies = [ [[package]] name = "codewhale-state" -version = "0.8.48" +version = "0.8.49" dependencies = [ "anyhow", "chrono", @@ -970,7 +970,7 @@ dependencies = [ [[package]] name = "codewhale-tools" -version = "0.8.48" +version = "0.8.49" dependencies = [ "anyhow", "async-trait", @@ -984,7 +984,7 @@ dependencies = [ [[package]] name = "codewhale-tui" -version = "0.8.48" +version = "0.8.49" dependencies = [ "anyhow", "arboard", @@ -1053,7 +1053,7 @@ dependencies = [ [[package]] name = "codewhale-tui-core" -version = "0.8.48" +version = "0.8.49" [[package]] name = "colorchoice" diff --git a/Cargo.toml b/Cargo.toml index 4d5e2156..e38976d2 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -20,7 +20,7 @@ default-members = ["crates/cli", "crates/app-server", "crates/tui"] resolver = "2" [workspace.package] -version = "0.8.48" +version = "0.8.49" 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 0776c9f5..f6d615a4 100644 --- a/crates/agent/Cargo.toml +++ b/crates/agent/Cargo.toml @@ -7,5 +7,5 @@ repository.workspace = true description = "Model/provider registry and fallback strategy for DeepSeek workspace architecture" [dependencies] -codewhale-config = { path = "../config", version = "0.8.48" } +codewhale-config = { path = "../config", version = "0.8.49" } serde.workspace = true diff --git a/crates/app-server/Cargo.toml b/crates/app-server/Cargo.toml index e02d246e..0dc37ffd 100644 --- a/crates/app-server/Cargo.toml +++ b/crates/app-server/Cargo.toml @@ -10,15 +10,15 @@ description = "Codex-style app-server transport for DeepSeek workspace architect anyhow.workspace = true axum.workspace = true clap.workspace = true -codewhale-agent = { path = "../agent", version = "0.8.48" } -codewhale-config = { path = "../config", version = "0.8.48" } -codewhale-core = { path = "../core", version = "0.8.48" } -codewhale-execpolicy = { path = "../execpolicy", version = "0.8.48" } -codewhale-hooks = { path = "../hooks", version = "0.8.48" } -codewhale-mcp = { path = "../mcp", version = "0.8.48" } -codewhale-protocol = { path = "../protocol", version = "0.8.48" } -codewhale-state = { path = "../state", version = "0.8.48" } -codewhale-tools = { path = "../tools", version = "0.8.48" } +codewhale-agent = { path = "../agent", version = "0.8.49" } +codewhale-config = { path = "../config", version = "0.8.49" } +codewhale-core = { path = "../core", version = "0.8.49" } +codewhale-execpolicy = { path = "../execpolicy", version = "0.8.49" } +codewhale-hooks = { path = "../hooks", version = "0.8.49" } +codewhale-mcp = { path = "../mcp", version = "0.8.49" } +codewhale-protocol = { path = "../protocol", version = "0.8.49" } +codewhale-state = { path = "../state", version = "0.8.49" } +codewhale-tools = { path = "../tools", version = "0.8.49" } serde.workspace = true serde_json.workspace = true tokio.workspace = true diff --git a/crates/cli/Cargo.toml b/crates/cli/Cargo.toml index 6e6f08df..ad634349 100644 --- a/crates/cli/Cargo.toml +++ b/crates/cli/Cargo.toml @@ -25,14 +25,14 @@ path = "src/bin/deepseek_legacy_shim.rs" anyhow.workspace = true clap.workspace = true clap_complete.workspace = true -codewhale-agent = { path = "../agent", version = "0.8.48" } -codewhale-app-server = { path = "../app-server", version = "0.8.48" } -codewhale-config = { path = "../config", version = "0.8.48" } -codewhale-execpolicy = { path = "../execpolicy", version = "0.8.48" } -codewhale-mcp = { path = "../mcp", version = "0.8.48" } -codewhale-release = { path = "../release", version = "0.8.48" } -codewhale-secrets = { path = "../secrets", version = "0.8.48" } -codewhale-state = { path = "../state", version = "0.8.48" } +codewhale-agent = { path = "../agent", version = "0.8.49" } +codewhale-app-server = { path = "../app-server", version = "0.8.49" } +codewhale-config = { path = "../config", version = "0.8.49" } +codewhale-execpolicy = { path = "../execpolicy", version = "0.8.49" } +codewhale-mcp = { path = "../mcp", version = "0.8.49" } +codewhale-release = { path = "../release", version = "0.8.49" } +codewhale-secrets = { path = "../secrets", version = "0.8.49" } +codewhale-state = { path = "../state", version = "0.8.49" } chrono.workspace = true dirs.workspace = true serde.workspace = true diff --git a/crates/config/Cargo.toml b/crates/config/Cargo.toml index 112a2a28..442d3666 100644 --- a/crates/config/Cargo.toml +++ b/crates/config/Cargo.toml @@ -8,7 +8,7 @@ description = "Config schema and precedence model for DeepSeek workspace archite [dependencies] anyhow.workspace = true -codewhale-secrets = { path = "../secrets", version = "0.8.48" } +codewhale-secrets = { path = "../secrets", version = "0.8.49" } dirs.workspace = true serde.workspace = true serde_json.workspace = true diff --git a/crates/core/Cargo.toml b/crates/core/Cargo.toml index 26a14791..4c4526ca 100644 --- a/crates/core/Cargo.toml +++ b/crates/core/Cargo.toml @@ -9,13 +9,13 @@ description = "Core runtime boundaries for DeepSeek workspace architecture" [dependencies] anyhow.workspace = true chrono.workspace = true -codewhale-agent = { path = "../agent", version = "0.8.48" } -codewhale-config = { path = "../config", version = "0.8.48" } -codewhale-execpolicy = { path = "../execpolicy", version = "0.8.48" } -codewhale-hooks = { path = "../hooks", version = "0.8.48" } -codewhale-mcp = { path = "../mcp", version = "0.8.48" } -codewhale-protocol = { path = "../protocol", version = "0.8.48" } -codewhale-state = { path = "../state", version = "0.8.48" } -codewhale-tools = { path = "../tools", version = "0.8.48" } +codewhale-agent = { path = "../agent", version = "0.8.49" } +codewhale-config = { path = "../config", version = "0.8.49" } +codewhale-execpolicy = { path = "../execpolicy", version = "0.8.49" } +codewhale-hooks = { path = "../hooks", version = "0.8.49" } +codewhale-mcp = { path = "../mcp", version = "0.8.49" } +codewhale-protocol = { path = "../protocol", version = "0.8.49" } +codewhale-state = { path = "../state", version = "0.8.49" } +codewhale-tools = { path = "../tools", version = "0.8.49" } serde_json.workspace = true uuid.workspace = true diff --git a/crates/execpolicy/Cargo.toml b/crates/execpolicy/Cargo.toml index ced46f57..789b0cab 100644 --- a/crates/execpolicy/Cargo.toml +++ b/crates/execpolicy/Cargo.toml @@ -8,5 +8,5 @@ description = "Execution policy and approval model parity for DeepSeek workspace [dependencies] anyhow.workspace = true -codewhale-protocol = { path = "../protocol", version = "0.8.48" } +codewhale-protocol = { path = "../protocol", version = "0.8.49" } serde.workspace = true diff --git a/crates/hooks/Cargo.toml b/crates/hooks/Cargo.toml index da951126..66e293be 100644 --- a/crates/hooks/Cargo.toml +++ b/crates/hooks/Cargo.toml @@ -10,7 +10,7 @@ description = "Hook dispatch and notifications parity for DeepSeek workspace arc anyhow.workspace = true async-trait.workspace = true chrono.workspace = true -codewhale-protocol = { path = "../protocol", version = "0.8.48" } +codewhale-protocol = { path = "../protocol", version = "0.8.49" } reqwest.workspace = true serde.workspace = true serde_json.workspace = true diff --git a/crates/tools/Cargo.toml b/crates/tools/Cargo.toml index 73e5bb24..cc9f1d83 100644 --- a/crates/tools/Cargo.toml +++ b/crates/tools/Cargo.toml @@ -9,7 +9,7 @@ description = "Tool invocation lifecycle, schema validation, and scheduler paral [dependencies] anyhow.workspace = true async-trait.workspace = true -codewhale-protocol = { path = "../protocol", version = "0.8.48" } +codewhale-protocol = { path = "../protocol", version = "0.8.49" } serde.workspace = true serde_json.workspace = true thiserror.workspace = true diff --git a/crates/tui/CHANGELOG.md b/crates/tui/CHANGELOG.md index 50e759bd..1eda34d1 100644 --- a/crates/tui/CHANGELOG.md +++ b/crates/tui/CHANGELOG.md @@ -7,6 +7,50 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## [Unreleased] +## [0.8.49] - 2026-06-01 + +### Added + +- Added the missing `[providers.moonshot]` example block for Moonshot/Kimi, + documented `completion_sound`, and refreshed the tool-surface docs for the + current registry, including `finance`, `web.run`, git history tools, memory, + OCR, and other registered tools. + +### Changed + +- Hardened prefix-cache fingerprints to hash API-visible tool schema details, + not just tool names, so schema and description drift invalidates cached + prefixes before it can confuse model calls (#2264). +- Kept `finance` registered independently from web-search tools and prevented + duplicate web/patch tool registration in agent and YOLO modes. + +### Fixed + +- Fixed the DeepSeek V4-Pro cost estimate after the 2026-05-31 pricing cutoff: + the post-promotion official rate remains one quarter of the original price, + so CodeWhale no longer shows roughly 4x too much after June 1 (#2489). +- Fixed Kimi/Moonshot tool schema normalization by moving parent `type` fields + into `anyOf`/`oneOf` items, with regression coverage for nested schema shapes + that could otherwise still fail Kimi validation (#2438). +- Fixed raw ANSI/SGR fragments leaking into footer, shell-label, and sidebar + activity text during active tool execution (#2481). +- Fixed `[tui]` config parsing when `status_items` is omitted, restoring the + documented default footer order for older and hand-written configs (#2483). +- Fixed a shell env-scrubbing test so it does not depend on the user's default + shell understanding POSIX parameter expansion. +- Removed stale `qwen/qwen3.7-max` references left in `config.example.toml` + after the v0.8.48 preset removal. + +### Community + +Thanks to **@idling11** (#2480, #2485), **@reidliu41** (#2493), +**@hongqitai** (#2495), and **@encyc** (#2477) for the fixes and reliability +work harvested into this release. + +Thanks also to reporters and verification helpers whose issues shaped the +release: **@A-Corner** (#2438), **@taiwan988** (#2483), **@AiurArtanis** +(#2489), and **@Hmbown** (#2481). + ## [0.8.48] - 2026-05-31 ### Added @@ -5118,7 +5162,8 @@ Welcome — and thank you. - Hooks system and config profiles - Example skills and launch assets -[Unreleased]: https://github.com/Hmbown/CodeWhale/compare/v0.8.48...HEAD +[Unreleased]: https://github.com/Hmbown/CodeWhale/compare/v0.8.49...HEAD +[0.8.49]: https://github.com/Hmbown/CodeWhale/compare/v0.8.48...v0.8.49 [0.8.48]: https://github.com/Hmbown/CodeWhale/compare/v0.8.47...v0.8.48 [0.8.47]: https://github.com/Hmbown/CodeWhale/compare/v0.8.46...v0.8.47 [0.8.46]: https://github.com/Hmbown/CodeWhale/compare/v0.8.45...v0.8.46 diff --git a/crates/tui/Cargo.toml b/crates/tui/Cargo.toml index 38e33c03..b8183b5d 100644 --- a/crates/tui/Cargo.toml +++ b/crates/tui/Cargo.toml @@ -27,11 +27,11 @@ path = "src/bin/deepseek_tui_legacy_shim.rs" [dependencies] anyhow = "1.0.100" arboard = "3.4" -codewhale-config = { path = "../config", version = "0.8.48" } -codewhale-protocol = { path = "../protocol", version = "0.8.48" } -codewhale-release = { path = "../release", version = "0.8.48" } -codewhale-secrets = { path = "../secrets", version = "0.8.48" } -codewhale-tools = { path = "../tools", version = "0.8.48" } +codewhale-config = { path = "../config", version = "0.8.49" } +codewhale-protocol = { path = "../protocol", version = "0.8.49" } +codewhale-release = { path = "../release", version = "0.8.49" } +codewhale-secrets = { path = "../secrets", version = "0.8.49" } +codewhale-tools = { path = "../tools", version = "0.8.49" } schemaui = { version = "0.12.0", default-features = false, optional = true } async-stream = "0.3.6" async-trait = "0.1" diff --git a/npm/codewhale/package.json b/npm/codewhale/package.json index cedd2dba..0bf0ed1d 100644 --- a/npm/codewhale/package.json +++ b/npm/codewhale/package.json @@ -1,7 +1,7 @@ { "name": "codewhale", - "version": "0.8.48", - "codewhaleBinaryVersion": "0.8.48", + "version": "0.8.49", + "codewhaleBinaryVersion": "0.8.49", "description": "Install and run CodeWhale, the agentic terminal for open-source and open-weight coding models, from GitHub release artifacts.", "author": "Hmbown", "license": "MIT", diff --git a/npm/deepseek-tui/package.json b/npm/deepseek-tui/package.json index 2fbd59af..5ff87ed0 100644 --- a/npm/deepseek-tui/package.json +++ b/npm/deepseek-tui/package.json @@ -1,6 +1,6 @@ { "name": "deepseek-tui", - "version": "0.8.48", + "version": "0.8.49", "description": "Legacy compatibility package. Renamed to `codewhale`; run `npm install -g codewhale` for new installs.", "author": "Hmbown", "license": "MIT",