diff --git a/CHANGELOG.md b/CHANGELOG.md index 66683e8e..b032dcff 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,46 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## [Unreleased] +## [0.8.42] - 2026-05-24 + +### Fixed + +- **Stream decode failures no longer leave the turn visually stuck.** The UI + now marks an active turn failed and flushes live cells as soon as the engine + emits a stream error, so the sidebar/footer recover without requiring + Ctrl+C (#1960). +- **RLM contexts now expose `_ctx`.** Persistent RLM REPLs bind `_ctx` as a + compatibility alias for the loaded source alongside `_context` and + `content`, and the prompt/docs call out the exact names (#1962). +- **`handle_read` is easier to recover from.** The tool keeps accepting full + `var_handle` objects directly, adds `introspect: true` for size/projection + hints, and validation failures now include copy-pasteable examples (#1963). +- **The help picker keeps the selected row visible while scrolling.** `/help` + now budgets against the real modal body height, wraps Up/Down navigation, + and uses a stronger selected-row highlight (#1964). +- **Unicode `git_status` paths stay readable.** Chinese and other non-ASCII + repository paths now survive status parsing and display cleanly (#1936, + #1953). +- **Project-local and configured skills appear in the slash menu.** Workspace + skills and configured skill directories now feed the command picker instead + of only the bundled set (#1955, #1956). +- **Repeated Tab mode switching no longer stacks composer-obscuring toasts.** + The mode-switch notification now deduplicates instead of accumulating rows + over the composer (#1926, #1957). +- **Local tool UX surfaces are clearer.** `github_close_pr` now has the same + guarded closure workflow as issue close, `handle_read` redirects artifact + refs to `retrieve_tool_result`, Plan handoffs use plainer wording, and shell + rows/sidebar tasks show the actual running command instead of placeholder + labels. + +### Thanks + +Thanks to **cyq ([@cyq1017](https://github.com/cyq1017))** for the Unicode +`git_status`, local/configured skill discovery, and mode-switch toast fixes in +#1953, #1956, and #1957. Thanks to **Reid +([@reidliu41](https://github.com/reidliu41))** for the help picker scrolling +and selection fix in #1964. + ## [0.8.41] - 2026-05-23 ### Changed @@ -4595,7 +4635,8 @@ Welcome — and thank you. - Hooks system and config profiles - Example skills and launch assets -[Unreleased]: https://github.com/Hmbown/CodeWhale/compare/v0.8.41...HEAD +[Unreleased]: https://github.com/Hmbown/CodeWhale/compare/v0.8.42...HEAD +[0.8.42]: https://github.com/Hmbown/CodeWhale/compare/v0.8.41...v0.8.42 [0.8.41]: https://github.com/Hmbown/CodeWhale/compare/v0.8.40...v0.8.41 [0.8.40]: https://github.com/Hmbown/CodeWhale/compare/v0.8.39...v0.8.40 [0.8.39]: https://github.com/Hmbown/CodeWhale/compare/v0.8.38...v0.8.39 diff --git a/Cargo.lock b/Cargo.lock index f7ce059b..af1e25d8 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -803,7 +803,7 @@ checksum = "e9b18233253483ce2f65329a24072ec414db782531bdbb7d0bbc4bd2ce6b7e21" [[package]] name = "codewhale-agent" -version = "0.8.41" +version = "0.8.42" dependencies = [ "codewhale-config", "serde", @@ -811,7 +811,7 @@ dependencies = [ [[package]] name = "codewhale-app-server" -version = "0.8.41" +version = "0.8.42" dependencies = [ "anyhow", "axum", @@ -833,7 +833,7 @@ dependencies = [ [[package]] name = "codewhale-cli" -version = "0.8.41" +version = "0.8.42" dependencies = [ "anyhow", "chrono", @@ -858,7 +858,7 @@ dependencies = [ [[package]] name = "codewhale-config" -version = "0.8.41" +version = "0.8.42" dependencies = [ "anyhow", "codewhale-secrets", @@ -870,7 +870,7 @@ dependencies = [ [[package]] name = "codewhale-core" -version = "0.8.41" +version = "0.8.42" dependencies = [ "anyhow", "chrono", @@ -888,7 +888,7 @@ dependencies = [ [[package]] name = "codewhale-execpolicy" -version = "0.8.41" +version = "0.8.42" dependencies = [ "anyhow", "codewhale-protocol", @@ -897,7 +897,7 @@ dependencies = [ [[package]] name = "codewhale-hooks" -version = "0.8.41" +version = "0.8.42" dependencies = [ "anyhow", "async-trait", @@ -911,7 +911,7 @@ dependencies = [ [[package]] name = "codewhale-mcp" -version = "0.8.41" +version = "0.8.42" dependencies = [ "anyhow", "serde", @@ -920,7 +920,7 @@ dependencies = [ [[package]] name = "codewhale-protocol" -version = "0.8.41" +version = "0.8.42" dependencies = [ "serde", "serde_json", @@ -928,7 +928,7 @@ dependencies = [ [[package]] name = "codewhale-secrets" -version = "0.8.41" +version = "0.8.42" dependencies = [ "dirs", "keyring", @@ -941,7 +941,7 @@ dependencies = [ [[package]] name = "codewhale-state" -version = "0.8.41" +version = "0.8.42" dependencies = [ "anyhow", "chrono", @@ -953,7 +953,7 @@ dependencies = [ [[package]] name = "codewhale-tools" -version = "0.8.41" +version = "0.8.42" dependencies = [ "anyhow", "async-trait", @@ -966,7 +966,7 @@ dependencies = [ [[package]] name = "codewhale-tui" -version = "0.8.41" +version = "0.8.42" dependencies = [ "anyhow", "arboard", @@ -1031,7 +1031,7 @@ dependencies = [ [[package]] name = "codewhale-tui-core" -version = "0.8.41" +version = "0.8.42" [[package]] name = "colorchoice" diff --git a/Cargo.toml b/Cargo.toml index 7dd08c7b..6fd51573 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -19,7 +19,7 @@ default-members = ["crates/cli", "crates/app-server", "crates/tui"] resolver = "2" [workspace.package] -version = "0.8.41" +version = "0.8.42" 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/README.md b/README.md index 9adcd93f..f9fce121 100644 --- a/README.md +++ b/README.md @@ -550,7 +550,8 @@ This project ships with help from a growing community of contributors: - **[zichen0116](https://github.com/zichen0116)** — CODE_OF_CONDUCT.md (#686) - **[dfwqdyl-ui](https://github.com/dfwqdyl-ui)** — model ID case-sensitivity compatibility report (#729) - **[Oliver-ZPLiu](https://github.com/Oliver-ZPLiu)** — stale `working...` state bug report, Windows clipboard fallback, MCP Streamable HTTP session fixes, and Homebrew tap automation (#738, #850, #1643, #1631) -- **[reidliu41](https://github.com/reidliu41)** — resume hint, workspace trust persistence, Ollama provider support, thinking-block stream finalization, CI cache hardening, streaming wrap, and DeepSeek model completions (#863, #870, #921, #1078, #1603, #1628, #1601) +- **[reidliu41](https://github.com/reidliu41)** — resume hint, workspace trust persistence, Ollama provider support, thinking-block stream finalization, CI cache hardening, streaming wrap, DeepSeek model completions, and help picker selection polish (#863, #870, #921, #1078, #1603, #1628, #1601, #1964) +- **[cyq1017](https://github.com/cyq1017)** — Unicode `git_status` paths, local/configured skill discovery, and mode-switch toast dedupe (#1953, #1956, #1957) - **[xieshutao](https://github.com/xieshutao)** — plain Markdown skill fallback (#869) - **[GK012](https://github.com/GK012)** — npm wrapper `--version` fallback (#885) - **[y0sif](https://github.com/y0sif)** — parent turn-loop wakeup after direct child sub-agent completion (#901) diff --git a/README.zh-CN.md b/README.zh-CN.md index f5824a66..3b8ee4d6 100644 --- a/README.zh-CN.md +++ b/README.zh-CN.md @@ -526,7 +526,8 @@ description: 当 DeepSeek 需要遵循我的自定义工作流时使用这个技 - **[zichen0116](https://github.com/zichen0116)** — CODE_OF_CONDUCT.md (#686) - **[dfwqdyl-ui](https://github.com/dfwqdyl-ui)** — 模型 ID 大小写兼容性报告 (#729) - **[Oliver-ZPLiu](https://github.com/Oliver-ZPLiu)** — `working...` 卡死状态 Bug 报告和 Windows 剪贴板兜底修复 (#738, #850) -- **[reidliu41](https://github.com/reidliu41)** — 退出后的恢复提示、工作区信任持久化、Ollama provider 支持,以及思考块流式终结修复 (#863, #870, #921, #1078) +- **[reidliu41](https://github.com/reidliu41)** — 退出后的恢复提示、工作区信任持久化、Ollama provider 支持、思考块流式终结修复,以及帮助选择器选中行可见性优化 (#863, #870, #921, #1078, #1964) +- **[cyq1017](https://github.com/cyq1017)** — Unicode `git_status` 路径、本地/配置技能发现,以及模式切换 toast 去重 (#1953, #1956, #1957) - **[xieshutao](https://github.com/xieshutao)** — 纯 Markdown skill 兜底解析 (#869) - **[GK012](https://github.com/GK012)** — npm wrapper 的 `--version` 兜底 (#885) - **[y0sif](https://github.com/y0sif)** — 直接子智能体完成后唤醒父级 turn loop (#901) diff --git a/crates/agent/Cargo.toml b/crates/agent/Cargo.toml index 36733251..7d2eae7d 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.41" } +codewhale-config = { path = "../config", version = "0.8.42" } serde.workspace = true diff --git a/crates/app-server/Cargo.toml b/crates/app-server/Cargo.toml index 06e7e504..2a123228 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.41" } -codewhale-config = { path = "../config", version = "0.8.41" } -codewhale-core = { path = "../core", version = "0.8.41" } -codewhale-execpolicy = { path = "../execpolicy", version = "0.8.41" } -codewhale-hooks = { path = "../hooks", version = "0.8.41" } -codewhale-mcp = { path = "../mcp", version = "0.8.41" } -codewhale-protocol = { path = "../protocol", version = "0.8.41" } -codewhale-state = { path = "../state", version = "0.8.41" } -codewhale-tools = { path = "../tools", version = "0.8.41" } +codewhale-agent = { path = "../agent", version = "0.8.42" } +codewhale-config = { path = "../config", version = "0.8.42" } +codewhale-core = { path = "../core", version = "0.8.42" } +codewhale-execpolicy = { path = "../execpolicy", version = "0.8.42" } +codewhale-hooks = { path = "../hooks", version = "0.8.42" } +codewhale-mcp = { path = "../mcp", version = "0.8.42" } +codewhale-protocol = { path = "../protocol", version = "0.8.42" } +codewhale-state = { path = "../state", version = "0.8.42" } +codewhale-tools = { path = "../tools", version = "0.8.42" } serde.workspace = true serde_json.workspace = true tokio.workspace = true diff --git a/crates/cli/Cargo.toml b/crates/cli/Cargo.toml index 305d78c9..cf17dd6f 100644 --- a/crates/cli/Cargo.toml +++ b/crates/cli/Cargo.toml @@ -20,13 +20,13 @@ path = "src/bin/deepseek_legacy_shim.rs" anyhow.workspace = true clap.workspace = true clap_complete.workspace = true -codewhale-agent = { path = "../agent", version = "0.8.41" } -codewhale-app-server = { path = "../app-server", version = "0.8.41" } -codewhale-config = { path = "../config", version = "0.8.41" } -codewhale-execpolicy = { path = "../execpolicy", version = "0.8.41" } -codewhale-mcp = { path = "../mcp", version = "0.8.41" } -codewhale-secrets = { path = "../secrets", version = "0.8.41" } -codewhale-state = { path = "../state", version = "0.8.41" } +codewhale-agent = { path = "../agent", version = "0.8.42" } +codewhale-app-server = { path = "../app-server", version = "0.8.42" } +codewhale-config = { path = "../config", version = "0.8.42" } +codewhale-execpolicy = { path = "../execpolicy", version = "0.8.42" } +codewhale-mcp = { path = "../mcp", version = "0.8.42" } +codewhale-secrets = { path = "../secrets", version = "0.8.42" } +codewhale-state = { path = "../state", version = "0.8.42" } chrono.workspace = true dirs.workspace = true serde.workspace = true diff --git a/crates/config/Cargo.toml b/crates/config/Cargo.toml index c8cee6ec..496eff3a 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.41" } +codewhale-secrets = { path = "../secrets", version = "0.8.42" } dirs.workspace = true serde.workspace = true toml.workspace = true diff --git a/crates/core/Cargo.toml b/crates/core/Cargo.toml index b98c2987..9efbc74a 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.41" } -codewhale-config = { path = "../config", version = "0.8.41" } -codewhale-execpolicy = { path = "../execpolicy", version = "0.8.41" } -codewhale-hooks = { path = "../hooks", version = "0.8.41" } -codewhale-mcp = { path = "../mcp", version = "0.8.41" } -codewhale-protocol = { path = "../protocol", version = "0.8.41" } -codewhale-state = { path = "../state", version = "0.8.41" } -codewhale-tools = { path = "../tools", version = "0.8.41" } +codewhale-agent = { path = "../agent", version = "0.8.42" } +codewhale-config = { path = "../config", version = "0.8.42" } +codewhale-execpolicy = { path = "../execpolicy", version = "0.8.42" } +codewhale-hooks = { path = "../hooks", version = "0.8.42" } +codewhale-mcp = { path = "../mcp", version = "0.8.42" } +codewhale-protocol = { path = "../protocol", version = "0.8.42" } +codewhale-state = { path = "../state", version = "0.8.42" } +codewhale-tools = { path = "../tools", version = "0.8.42" } serde_json.workspace = true uuid.workspace = true diff --git a/crates/execpolicy/Cargo.toml b/crates/execpolicy/Cargo.toml index 45e179e3..31f1e80a 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.41" } +codewhale-protocol = { path = "../protocol", version = "0.8.42" } serde.workspace = true diff --git a/crates/hooks/Cargo.toml b/crates/hooks/Cargo.toml index 7e79f98f..832ca475 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.41" } +codewhale-protocol = { path = "../protocol", version = "0.8.42" } reqwest.workspace = true serde.workspace = true serde_json.workspace = true diff --git a/crates/tools/Cargo.toml b/crates/tools/Cargo.toml index 65f83103..25774579 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.41" } +codewhale-protocol = { path = "../protocol", version = "0.8.42" } serde.workspace = true serde_json.workspace = true tokio.workspace = true diff --git a/crates/tui/CHANGELOG.md b/crates/tui/CHANGELOG.md index 66683e8e..b032dcff 100644 --- a/crates/tui/CHANGELOG.md +++ b/crates/tui/CHANGELOG.md @@ -7,6 +7,46 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## [Unreleased] +## [0.8.42] - 2026-05-24 + +### Fixed + +- **Stream decode failures no longer leave the turn visually stuck.** The UI + now marks an active turn failed and flushes live cells as soon as the engine + emits a stream error, so the sidebar/footer recover without requiring + Ctrl+C (#1960). +- **RLM contexts now expose `_ctx`.** Persistent RLM REPLs bind `_ctx` as a + compatibility alias for the loaded source alongside `_context` and + `content`, and the prompt/docs call out the exact names (#1962). +- **`handle_read` is easier to recover from.** The tool keeps accepting full + `var_handle` objects directly, adds `introspect: true` for size/projection + hints, and validation failures now include copy-pasteable examples (#1963). +- **The help picker keeps the selected row visible while scrolling.** `/help` + now budgets against the real modal body height, wraps Up/Down navigation, + and uses a stronger selected-row highlight (#1964). +- **Unicode `git_status` paths stay readable.** Chinese and other non-ASCII + repository paths now survive status parsing and display cleanly (#1936, + #1953). +- **Project-local and configured skills appear in the slash menu.** Workspace + skills and configured skill directories now feed the command picker instead + of only the bundled set (#1955, #1956). +- **Repeated Tab mode switching no longer stacks composer-obscuring toasts.** + The mode-switch notification now deduplicates instead of accumulating rows + over the composer (#1926, #1957). +- **Local tool UX surfaces are clearer.** `github_close_pr` now has the same + guarded closure workflow as issue close, `handle_read` redirects artifact + refs to `retrieve_tool_result`, Plan handoffs use plainer wording, and shell + rows/sidebar tasks show the actual running command instead of placeholder + labels. + +### Thanks + +Thanks to **cyq ([@cyq1017](https://github.com/cyq1017))** for the Unicode +`git_status`, local/configured skill discovery, and mode-switch toast fixes in +#1953, #1956, and #1957. Thanks to **Reid +([@reidliu41](https://github.com/reidliu41))** for the help picker scrolling +and selection fix in #1964. + ## [0.8.41] - 2026-05-23 ### Changed @@ -4595,7 +4635,8 @@ Welcome — and thank you. - Hooks system and config profiles - Example skills and launch assets -[Unreleased]: https://github.com/Hmbown/CodeWhale/compare/v0.8.41...HEAD +[Unreleased]: https://github.com/Hmbown/CodeWhale/compare/v0.8.42...HEAD +[0.8.42]: https://github.com/Hmbown/CodeWhale/compare/v0.8.41...v0.8.42 [0.8.41]: https://github.com/Hmbown/CodeWhale/compare/v0.8.40...v0.8.41 [0.8.40]: https://github.com/Hmbown/CodeWhale/compare/v0.8.39...v0.8.40 [0.8.39]: https://github.com/Hmbown/CodeWhale/compare/v0.8.38...v0.8.39 diff --git a/crates/tui/Cargo.toml b/crates/tui/Cargo.toml index 96789578..d2b7ba90 100644 --- a/crates/tui/Cargo.toml +++ b/crates/tui/Cargo.toml @@ -27,8 +27,8 @@ path = "src/bin/deepseek_tui_legacy_shim.rs" [dependencies] anyhow = "1.0.100" arboard = "3.4" -codewhale-secrets = { path = "../secrets", version = "0.8.41" } -codewhale-tools = { path = "../tools", version = "0.8.41" } +codewhale-secrets = { path = "../secrets", version = "0.8.42" } +codewhale-tools = { path = "../tools", version = "0.8.42" } 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 98c016d6..f77e24d1 100644 --- a/npm/codewhale/package.json +++ b/npm/codewhale/package.json @@ -1,7 +1,7 @@ { "name": "codewhale", - "version": "0.8.41", - "codewhaleBinaryVersion": "0.8.41", + "version": "0.8.42", + "codewhaleBinaryVersion": "0.8.42", "description": "Install and run the codewhale CLI dispatcher and codewhale-tui terminal UI from GitHub release artifacts.", "author": "Hmbown", "license": "MIT", diff --git a/npm/deepseek-tui/package.json b/npm/deepseek-tui/package.json index 09384c0f..7d394954 100644 --- a/npm/deepseek-tui/package.json +++ b/npm/deepseek-tui/package.json @@ -1,6 +1,6 @@ { "name": "deepseek-tui", - "version": "0.8.41", + "version": "0.8.42", "description": "Deprecated. Renamed to `codewhale`. Run `npm install -g codewhale` instead.", "author": "Hmbown", "license": "MIT",