From b23067bacd42b1293e44c617466ff1626de9b3ea Mon Sep 17 00:00:00 2001 From: Hunter B Date: Wed, 10 Jun 2026 00:02:51 -0700 Subject: [PATCH] =?UTF-8?q?release:=20v0.8.57=20=E2=80=94=20sleep-resume?= =?UTF-8?q?=20turns,=20docker=20fix,=20one-command=20release=20prep,=20cha?= =?UTF-8?q?ngelog=20diet?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- CHANGELOG.md | 61 ++++++++++- Cargo.lock | 32 +++--- Cargo.toml | 2 +- README.ja-JP.md | 4 +- README.md | 4 +- README.vi.md | 4 +- README.zh-CN.md | 4 +- crates/agent/Cargo.toml | 2 +- crates/app-server/Cargo.toml | 18 ++-- crates/cli/Cargo.toml | 16 +-- crates/config/Cargo.toml | 4 +- crates/core/Cargo.toml | 16 +-- crates/execpolicy/Cargo.toml | 2 +- crates/hooks/Cargo.toml | 2 +- crates/tools/Cargo.toml | 2 +- crates/tui/CHANGELOG.md | 134 ++++++++++-------------- crates/tui/Cargo.toml | 10 +- crates/tui/src/commands/change.rs | 4 +- crates/tui/src/core/engine/streaming.rs | 5 +- npm/codewhale/package.json | 4 +- scripts/release/prepare-release.sh | 2 +- web/lib/facts.generated.ts | 4 +- 22 files changed, 186 insertions(+), 150 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 2c60e272..86ad45c9 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,64 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## [Unreleased] +## [0.8.57] - 2026-06-10 + +### Added + +- **Turns now survive system sleep.** When the host suspends mid-stream, the + connection used to die on wake with `Stream read error: error decoding + response body` and the turn was lost (#2990). The engine now stamps stream + progress with both monotonic and wall-clock time; a large divergence on a + stream error identifies a sleep/wake cycle, and the request is silently + re-issued (up to the existing 3-retry budget) instead of failing the turn. +- **One-command release prep.** `./scripts/release/prepare-release.sh X.Y.Z` + bumps the workspace version, every internal crate dependency pin, the npm + wrapper, and the README install-tag examples, refreshes `Cargo.lock`, + regenerates the embedded TUI changelog slice and web facts, and runs + `check-versions.sh` — the v0.8.56 release needed nine follow-up commits for + exactly these sync points. +- `.github/CODEOWNERS` and `.github/dependabot.yml` (weekly cargo + + github-actions updates, monthly npm for `web/`). + +### Changed + +- **The changelog went on a diet.** Root `CHANGELOG.md` now carries recent + releases (v0.8.40+); older entries moved to `docs/CHANGELOG_ARCHIVE.md`. + `crates/tui/CHANGELOG.md` — embedded into every binary for `/change` — is a + generated 15-release slice (`scripts/sync-changelog.sh`), no longer a + 357 KB manual byte-for-byte copy (~300 KB smaller binaries). +- GitHub Release bodies are generated from the tagged version's changelog + section (`scripts/release/generate-release-body.sh`) instead of a + hardcoded workflow blob with a hand-pasted contributor list. +- `check-versions.sh` now also gates `web/lib/facts.generated.ts` and the + README install-tag examples; the CNB mirror pipeline validates the pushed + tag against `Cargo.toml` before generating release notes. +- Docs reorganized: internal design notes moved under `docs/rfcs/`; stale + internal docs (old audits, handoffs, region-specific VM notes) removed. +- Agent-facing polish: the system prompt environment block reports + `codewhale_version` (was `deepseek_version`), the legacy + `.deepseek/instructions.md` path is no longer advertised in the prompt + (still honored for back-compat), and oversized instruction files are + truncated with an explicit `[…truncated: N bytes omitted]` marker instead + of a bare ellipsis. + +### Fixed + +- **Docker images build again.** The release `docker` job failed for v0.8.56 + because the Dockerfile still copied the pre-rebrand `deepseek` / + `deepseek-tui` binaries; they are now symlinks to the codewhale binaries + inside the image, so legacy container entrypoints keep working. +- `.devcontainer/devcontainer.json` used the pre-rebrand container name, + mount path, and `deepseek` remote user. +- Stale `--bin deepseek` examples, `DeepSeek-TUI` strings in `/change` + output, and pre-rebrand doc comments. + +### Removed + +- Unused dependencies: `tracing-appender` and `zeroize` (TUI crate), + `rustls` (release crate); the orphaned `vendor/schemaui-0.12.0` lockfile + leftover and a machine-specific one-off `scripts/verify_task.sh`. + ## [0.8.56] - 2026-06-09 ### Added @@ -1578,7 +1636,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.8.55...HEAD +[Unreleased]: https://github.com/Hmbown/CodeWhale/compare/v0.8.57...HEAD +[0.8.57]: https://github.com/Hmbown/CodeWhale/compare/v0.8.56...v0.8.57 [0.8.56]: https://github.com/Hmbown/CodeWhale/compare/v0.8.55...v0.8.56 [0.8.55]: https://github.com/Hmbown/CodeWhale/compare/v0.8.54...v0.8.55 [0.8.54]: https://github.com/Hmbown/CodeWhale/compare/v0.8.53...v0.8.54 diff --git a/Cargo.lock b/Cargo.lock index 5dbb4e54..9cdde551 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -771,7 +771,7 @@ checksum = "e9b18233253483ce2f65329a24072ec414db782531bdbb7d0bbc4bd2ce6b7e21" [[package]] name = "codewhale-agent" -version = "0.8.56" +version = "0.8.57" dependencies = [ "codewhale-config", "serde", @@ -779,7 +779,7 @@ dependencies = [ [[package]] name = "codewhale-app-server" -version = "0.8.56" +version = "0.8.57" dependencies = [ "anyhow", "axum", @@ -806,7 +806,7 @@ dependencies = [ [[package]] name = "codewhale-cli" -version = "0.8.56" +version = "0.8.57" dependencies = [ "anyhow", "chrono", @@ -834,7 +834,7 @@ dependencies = [ [[package]] name = "codewhale-config" -version = "0.8.56" +version = "0.8.57" dependencies = [ "anyhow", "codewhale-execpolicy", @@ -848,7 +848,7 @@ dependencies = [ [[package]] name = "codewhale-core" -version = "0.8.56" +version = "0.8.57" dependencies = [ "anyhow", "chrono", @@ -867,7 +867,7 @@ dependencies = [ [[package]] name = "codewhale-execpolicy" -version = "0.8.56" +version = "0.8.57" dependencies = [ "anyhow", "codewhale-protocol", @@ -876,7 +876,7 @@ dependencies = [ [[package]] name = "codewhale-hooks" -version = "0.8.56" +version = "0.8.57" dependencies = [ "anyhow", "async-trait", @@ -890,7 +890,7 @@ dependencies = [ [[package]] name = "codewhale-mcp" -version = "0.8.56" +version = "0.8.57" dependencies = [ "anyhow", "serde", @@ -899,7 +899,7 @@ dependencies = [ [[package]] name = "codewhale-protocol" -version = "0.8.56" +version = "0.8.57" dependencies = [ "serde", "serde_json", @@ -907,7 +907,7 @@ dependencies = [ [[package]] name = "codewhale-release" -version = "0.8.56" +version = "0.8.57" dependencies = [ "anyhow", "reqwest", @@ -918,7 +918,7 @@ dependencies = [ [[package]] name = "codewhale-secrets" -version = "0.8.56" +version = "0.8.57" dependencies = [ "dirs", "keyring", @@ -931,7 +931,7 @@ dependencies = [ [[package]] name = "codewhale-state" -version = "0.8.56" +version = "0.8.57" dependencies = [ "anyhow", "chrono", @@ -943,7 +943,7 @@ dependencies = [ [[package]] name = "codewhale-tools" -version = "0.8.56" +version = "0.8.57" dependencies = [ "anyhow", "async-trait", @@ -957,7 +957,7 @@ dependencies = [ [[package]] name = "codewhale-tui" -version = "0.8.56" +version = "0.8.57" dependencies = [ "anyhow", "arboard", @@ -1027,11 +1027,11 @@ dependencies = [ [[package]] name = "codewhale-tui-core" -version = "0.8.56" +version = "0.8.57" [[package]] name = "codewhale-whaleflow" -version = "0.8.56" +version = "0.8.57" dependencies = [ "anyhow", "serde", diff --git a/Cargo.toml b/Cargo.toml index d23c6f36..4d3838f4 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -21,7 +21,7 @@ default-members = ["crates/cli", "crates/app-server", "crates/tui"] resolver = "2" [workspace.package] -version = "0.8.56" +version = "0.8.57" 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.ja-JP.md b/README.ja-JP.md index f3e337b3..956e5052 100644 --- a/README.ja-JP.md +++ b/README.ja-JP.md @@ -43,8 +43,8 @@ codewhale --model auto # https://github.com/Hmbown/CodeWhale/releases # GitHub に安定して到達できない場合は CNB mirror を使えます: -cargo install --git https://cnb.cool/codewhale.net/codewhale --tag v0.8.56 codewhale-cli --locked --force -cargo install --git https://cnb.cool/codewhale.net/codewhale --tag v0.8.56 codewhale-tui --locked --force +cargo install --git https://cnb.cool/codewhale.net/codewhale --tag v0.8.57 codewhale-cli --locked --force +cargo install --git https://cnb.cool/codewhale.net/codewhale --tag v0.8.57 codewhale-tui --locked --force # 旧 Homebrew 互換。formula はまだ deepseek-tui 名を使います。 brew tap Hmbown/deepseek-tui diff --git a/README.md b/README.md index 4ae23652..c8f9eca8 100644 --- a/README.md +++ b/README.md @@ -77,8 +77,8 @@ Other install paths are supported: # https://github.com/Hmbown/CodeWhale/releases # CNB mirror path for users who cannot reliably reach GitHub: -cargo install --git https://cnb.cool/codewhale.net/codewhale --tag v0.8.56 codewhale-cli --locked --force -cargo install --git https://cnb.cool/codewhale.net/codewhale --tag v0.8.56 codewhale-tui --locked --force +cargo install --git https://cnb.cool/codewhale.net/codewhale --tag v0.8.57 codewhale-cli --locked --force +cargo install --git https://cnb.cool/codewhale.net/codewhale --tag v0.8.57 codewhale-tui --locked --force # Legacy Homebrew compatibility while the formula is renamed brew tap Hmbown/deepseek-tui diff --git a/README.vi.md b/README.vi.md index 1b8710b0..e471e59b 100644 --- a/README.vi.md +++ b/README.vi.md @@ -43,8 +43,8 @@ Các đường khác: # https://github.com/Hmbown/CodeWhale/releases # Nếu GitHub không ổn định, dùng CNB mirror: -cargo install --git https://cnb.cool/codewhale.net/codewhale --tag v0.8.56 codewhale-cli --locked --force -cargo install --git https://cnb.cool/codewhale.net/codewhale --tag v0.8.56 codewhale-tui --locked --force +cargo install --git https://cnb.cool/codewhale.net/codewhale --tag v0.8.57 codewhale-cli --locked --force +cargo install --git https://cnb.cool/codewhale.net/codewhale --tag v0.8.57 codewhale-tui --locked --force # Homebrew legacy trong lúc formula vẫn dùng tên deepseek-tui brew tap Hmbown/deepseek-tui diff --git a/README.zh-CN.md b/README.zh-CN.md index c2387646..7a592390 100644 --- a/README.zh-CN.md +++ b/README.zh-CN.md @@ -43,8 +43,8 @@ codewhale --model auto # https://github.com/Hmbown/CodeWhale/releases # 如果 GitHub 访问不稳定,可以使用 CNB 镜像: -cargo install --git https://cnb.cool/codewhale.net/codewhale --tag v0.8.56 codewhale-cli --locked --force -cargo install --git https://cnb.cool/codewhale.net/codewhale --tag v0.8.56 codewhale-tui --locked --force +cargo install --git https://cnb.cool/codewhale.net/codewhale --tag v0.8.57 codewhale-cli --locked --force +cargo install --git https://cnb.cool/codewhale.net/codewhale --tag v0.8.57 codewhale-tui --locked --force # 旧 Homebrew 兼容路径,formula 仍使用 deepseek-tui 名称 brew tap Hmbown/deepseek-tui diff --git a/crates/agent/Cargo.toml b/crates/agent/Cargo.toml index d37306f0..22922e8f 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.56" } +codewhale-config = { path = "../config", version = "0.8.57" } serde.workspace = true diff --git a/crates/app-server/Cargo.toml b/crates/app-server/Cargo.toml index 7169c124..6159aab0 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.56" } -codewhale-config = { path = "../config", version = "0.8.56" } -codewhale-core = { path = "../core", version = "0.8.56" } -codewhale-execpolicy = { path = "../execpolicy", version = "0.8.56" } -codewhale-hooks = { path = "../hooks", version = "0.8.56" } -codewhale-mcp = { path = "../mcp", version = "0.8.56" } -codewhale-protocol = { path = "../protocol", version = "0.8.56" } -codewhale-state = { path = "../state", version = "0.8.56" } -codewhale-tools = { path = "../tools", version = "0.8.56" } +codewhale-agent = { path = "../agent", version = "0.8.57" } +codewhale-config = { path = "../config", version = "0.8.57" } +codewhale-core = { path = "../core", version = "0.8.57" } +codewhale-execpolicy = { path = "../execpolicy", version = "0.8.57" } +codewhale-hooks = { path = "../hooks", version = "0.8.57" } +codewhale-mcp = { path = "../mcp", version = "0.8.57" } +codewhale-protocol = { path = "../protocol", version = "0.8.57" } +codewhale-state = { path = "../state", version = "0.8.57" } +codewhale-tools = { path = "../tools", version = "0.8.57" } serde.workspace = true serde_json.workspace = true rustls.workspace = true diff --git a/crates/cli/Cargo.toml b/crates/cli/Cargo.toml index 0baa154f..199e153a 100644 --- a/crates/cli/Cargo.toml +++ b/crates/cli/Cargo.toml @@ -19,14 +19,14 @@ path = "src/bin/codew_legacy_shim.rs" anyhow.workspace = true clap.workspace = true clap_complete.workspace = true -codewhale-agent = { path = "../agent", version = "0.8.56" } -codewhale-app-server = { path = "../app-server", version = "0.8.56" } -codewhale-config = { path = "../config", version = "0.8.56" } -codewhale-execpolicy = { path = "../execpolicy", version = "0.8.56" } -codewhale-mcp = { path = "../mcp", version = "0.8.56" } -codewhale-release = { path = "../release", version = "0.8.56" } -codewhale-secrets = { path = "../secrets", version = "0.8.56" } -codewhale-state = { path = "../state", version = "0.8.56" } +codewhale-agent = { path = "../agent", version = "0.8.57" } +codewhale-app-server = { path = "../app-server", version = "0.8.57" } +codewhale-config = { path = "../config", version = "0.8.57" } +codewhale-execpolicy = { path = "../execpolicy", version = "0.8.57" } +codewhale-mcp = { path = "../mcp", version = "0.8.57" } +codewhale-release = { path = "../release", version = "0.8.57" } +codewhale-secrets = { path = "../secrets", version = "0.8.57" } +codewhale-state = { path = "../state", version = "0.8.57" } chrono.workspace = true dirs.workspace = true serde.workspace = true diff --git a/crates/config/Cargo.toml b/crates/config/Cargo.toml index d684984a..c77940f4 100644 --- a/crates/config/Cargo.toml +++ b/crates/config/Cargo.toml @@ -8,8 +8,8 @@ description = "Config schema and precedence model for DeepSeek workspace archite [dependencies] anyhow.workspace = true -codewhale-execpolicy = { path = "../execpolicy", version = "0.8.56" } -codewhale-secrets = { path = "../secrets", version = "0.8.56" } +codewhale-execpolicy = { path = "../execpolicy", version = "0.8.57" } +codewhale-secrets = { path = "../secrets", version = "0.8.57" } dirs.workspace = true serde.workspace = true serde_json.workspace = true diff --git a/crates/core/Cargo.toml b/crates/core/Cargo.toml index d2fd2076..4a59179a 100644 --- a/crates/core/Cargo.toml +++ b/crates/core/Cargo.toml @@ -9,14 +9,14 @@ description = "Core runtime boundaries for DeepSeek workspace architecture" [dependencies] anyhow.workspace = true chrono.workspace = true -codewhale-agent = { path = "../agent", version = "0.8.56" } -codewhale-config = { path = "../config", version = "0.8.56" } -codewhale-execpolicy = { path = "../execpolicy", version = "0.8.56" } -codewhale-hooks = { path = "../hooks", version = "0.8.56" } -codewhale-mcp = { path = "../mcp", version = "0.8.56" } -codewhale-protocol = { path = "../protocol", version = "0.8.56" } -codewhale-state = { path = "../state", version = "0.8.56" } -codewhale-tools = { path = "../tools", version = "0.8.56" } +codewhale-agent = { path = "../agent", version = "0.8.57" } +codewhale-config = { path = "../config", version = "0.8.57" } +codewhale-execpolicy = { path = "../execpolicy", version = "0.8.57" } +codewhale-hooks = { path = "../hooks", version = "0.8.57" } +codewhale-mcp = { path = "../mcp", version = "0.8.57" } +codewhale-protocol = { path = "../protocol", version = "0.8.57" } +codewhale-state = { path = "../state", version = "0.8.57" } +codewhale-tools = { path = "../tools", version = "0.8.57" } serde_json.workspace = true tracing.workspace = true uuid.workspace = true diff --git a/crates/execpolicy/Cargo.toml b/crates/execpolicy/Cargo.toml index b8cd173e..c49846be 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.56" } +codewhale-protocol = { path = "../protocol", version = "0.8.57" } serde.workspace = true diff --git a/crates/hooks/Cargo.toml b/crates/hooks/Cargo.toml index 9d6a8c7e..305da032 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.56" } +codewhale-protocol = { path = "../protocol", version = "0.8.57" } reqwest.workspace = true serde.workspace = true serde_json.workspace = true diff --git a/crates/tools/Cargo.toml b/crates/tools/Cargo.toml index b633144c..1e819177 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.56" } +codewhale-protocol = { path = "../protocol", version = "0.8.57" } serde.workspace = true serde_json.workspace = true thiserror.workspace = true diff --git a/crates/tui/CHANGELOG.md b/crates/tui/CHANGELOG.md index 6de2e17c..4d503e49 100644 --- a/crates/tui/CHANGELOG.md +++ b/crates/tui/CHANGELOG.md @@ -7,6 +7,64 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## [Unreleased] +## [0.8.57] - 2026-06-10 + +### Added + +- **Turns now survive system sleep.** When the host suspends mid-stream, the + connection used to die on wake with `Stream read error: error decoding + response body` and the turn was lost (#2990). The engine now stamps stream + progress with both monotonic and wall-clock time; a large divergence on a + stream error identifies a sleep/wake cycle, and the request is silently + re-issued (up to the existing 3-retry budget) instead of failing the turn. +- **One-command release prep.** `./scripts/release/prepare-release.sh X.Y.Z` + bumps the workspace version, every internal crate dependency pin, the npm + wrapper, and the README install-tag examples, refreshes `Cargo.lock`, + regenerates the embedded TUI changelog slice and web facts, and runs + `check-versions.sh` — the v0.8.56 release needed nine follow-up commits for + exactly these sync points. +- `.github/CODEOWNERS` and `.github/dependabot.yml` (weekly cargo + + github-actions updates, monthly npm for `web/`). + +### Changed + +- **The changelog went on a diet.** Root `CHANGELOG.md` now carries recent + releases (v0.8.40+); older entries moved to `docs/CHANGELOG_ARCHIVE.md`. + `crates/tui/CHANGELOG.md` — embedded into every binary for `/change` — is a + generated 15-release slice (`scripts/sync-changelog.sh`), no longer a + 357 KB manual byte-for-byte copy (~300 KB smaller binaries). +- GitHub Release bodies are generated from the tagged version's changelog + section (`scripts/release/generate-release-body.sh`) instead of a + hardcoded workflow blob with a hand-pasted contributor list. +- `check-versions.sh` now also gates `web/lib/facts.generated.ts` and the + README install-tag examples; the CNB mirror pipeline validates the pushed + tag against `Cargo.toml` before generating release notes. +- Docs reorganized: internal design notes moved under `docs/rfcs/`; stale + internal docs (old audits, handoffs, region-specific VM notes) removed. +- Agent-facing polish: the system prompt environment block reports + `codewhale_version` (was `deepseek_version`), the legacy + `.deepseek/instructions.md` path is no longer advertised in the prompt + (still honored for back-compat), and oversized instruction files are + truncated with an explicit `[…truncated: N bytes omitted]` marker instead + of a bare ellipsis. + +### Fixed + +- **Docker images build again.** The release `docker` job failed for v0.8.56 + because the Dockerfile still copied the pre-rebrand `deepseek` / + `deepseek-tui` binaries; they are now symlinks to the codewhale binaries + inside the image, so legacy container entrypoints keep working. +- `.devcontainer/devcontainer.json` used the pre-rebrand container name, + mount path, and `deepseek` remote user. +- Stale `--bin deepseek` examples, `DeepSeek-TUI` strings in `/change` + output, and pre-rebrand doc comments. + +### Removed + +- Unused dependencies: `tracing-appender` and `zeroize` (TUI crate), + `rustls` (release crate); the orphaned `vendor/schemaui-0.12.0` lockfile + leftover and a machine-specific one-off `scripts/verify_task.sh`. + ## [0.8.56] - 2026-06-09 ### Added @@ -1203,82 +1261,6 @@ and continuing contributors **@reidliu41**, **@cyq1017**, **@idling11**, `checklist_update`, and `update_plan` tool calls, matching the existing `todo_write` behavior instead of relying on the 2.5s periodic poll (#1787). -## [0.8.43] - 2026-05-24 - -### Fixed - -- **`grep_files` now respects the cancellation token.** Long-running file - searches cancel promptly instead of running to completion after the user - aborts (#1839). Thanks @LING71671. -- **npm installer stream-pause race condition fixed.** The install script now - pauses HTTP response streams immediately, preventing early data loss that - caused "Invalid checksum manifest line" errors (#1860). Thanks @jeoor. -- **Ctrl+Z restores the last cleared composer draft.** Pressing Ctrl+Z in an - empty composer recovers the text that was last cleared with Ctrl+U or - Ctrl+S, matching the muscle memory users expect from other editors (#1911). - Thanks @LING71671. -- **Clipboard works on non-wlroots Wayland compositors.** The Linux clipboard - path now tries `wl-copy` before `arboard`, fixing silent copy failures on - niri, River, cosmic-comp, and GNOME mutter (#1938). Thanks @ousamabenyounes. - -### Added - -- **`/goal` remains the persistent objective surface.** Use `/goal ` - to set a goal and `/goal done` to mark it complete. Goal status appears in - the Work sidebar with elapsed time, but it does not change Plan / Agent / - YOLO mode or approval behavior. A tabbed Ralph-style Goal loop is deferred to - v0.8.44 (#2007). -- **Post-turn receipts cite evidence for every completed turn.** When a turn - finishes, a receipt line shows in the transcript tail with a summary of - tool calls, file changes, and evidence that supports the agent's claims. - Tool evidence is collected per-turn and flushed on new dispatch. -- **Stall reason classification.** When a turn has been running for more than - 30 seconds, the footer now appends a classified reason: "waiting for model", - "tools executing", "sub-agents working", "compacting context", or "waiting — - no recent activity". -- **Decision card widget for structured user input.** When Brother Whale needs - a choice, it surfaces a bordered card with numbered options, keyboard - navigation (1-9 / j/k / arrows), and Enter/Esc to confirm or cancel. -- **Tasks sidebar now shows fuller turn IDs and supports copy-to-clipboard.** - Turn ID prefixes are widened from 12 to 16 characters for disambiguation, - background job status is presented as "X running, Y completed" instead of - ambiguous "X active (Y running)", and `y` / `Y` yank affordances copy the - current turn ID or full status line to the system clipboard (#1975). - -### Changed - -- **Contributor count and acknowledgement surfaces refreshed.** The website - fallback contributor count now reflects 98 live GitHub contributors (up from - the stale 91). All three README translations (English, 中文, 日本語) now - include 30+ previously unlisted contributors whose PRs were merged since - April 2026. -- **README and web surface rebrand refinements.** Crate descriptions, npm - package text, and website copy now consistently position CodeWhale as - open-model-first and provider-spanning, with DeepSeek V4 as the first-class - path. -- **New contributor names added to README acknowledgements.** Thanks to - @Apeiron0w0, @aqilaziz, @ChaceLyee2101, @ComeFromTheMars, @CrepuscularIRIS, - @dst1213, @eltociear, @fuleinist, @greyfreedom, @h3c-hexin, @heloanc, - @hxy91819, @J3y0r, @JiarenWang, @jinpengxuan, @KhalidAlnujaidi, @laoye2020, - @lbcheng888, @linzhiqin2003, @Liu-Vince, @lixiasky-back, @pengyou200902, - @punkcanyang, @Rene-Kuhm, @SamhandsomeLee, @sockerch, @sternelee, - @Wenjunyun123, @whtis, and @wuwuzhijing for the translations, typo fixes, - docs polish, and small UX improvements that landed across the 0.8.42 → - 0.8.43 cycle. - -### Security - -- **Thinking blocks can be collapsed/expanded via keyboard.** Space on an - empty composer toggles the focused thinking cell between collapsed and - expanded, complementing the existing mouse right-click context menu (#1972). -- **Sub-agent completion events no longer delayed to the next turn.** The turn - loop now drains late-arriving sub-agent completions at the final checkpoint - before breaking, so child-agent sentinels surface immediately instead of - appearing in the following turn (#1961). -- **`codewhale doctor` now referenced correctly in SSE timeout errors.** - The error message shown when SSE streams fail to connect now points users to - `codewhale doctor` (not the legacy `deepseek doctor`). - --- 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 9d096213..5598f968 100644 --- a/crates/tui/Cargo.toml +++ b/crates/tui/Cargo.toml @@ -20,11 +20,11 @@ path = "src/main.rs" [dependencies] anyhow = "1.0.100" -codewhale-config = { path = "../config", version = "0.8.56" } -codewhale-protocol = { path = "../protocol", version = "0.8.56" } -codewhale-release = { path = "../release", version = "0.8.56" } -codewhale-secrets = { path = "../secrets", version = "0.8.56" } -codewhale-tools = { path = "../tools", version = "0.8.56" } +codewhale-config = { path = "../config", version = "0.8.57" } +codewhale-protocol = { path = "../protocol", version = "0.8.57" } +codewhale-release = { path = "../release", version = "0.8.57" } +codewhale-secrets = { path = "../secrets", version = "0.8.57" } +codewhale-tools = { path = "../tools", version = "0.8.57" } schemaui = { version = "0.12.0", default-features = false, optional = true } async-stream = "0.3.6" async-trait = "0.1" diff --git a/crates/tui/src/commands/change.rs b/crates/tui/src/commands/change.rs index 3ad459c7..81a543be 100644 --- a/crates/tui/src/commands/change.rs +++ b/crates/tui/src/commands/change.rs @@ -47,9 +47,7 @@ pub fn change(app: &mut App, version: Option<&str>) -> CommandResult { Expected a line starting with `## [`." .to_string() } else { - format!( - "Could not find version \"{ver}\" in the bundled CodeWhale changelog." - ) + format!("Could not find version \"{ver}\" in the bundled CodeWhale changelog.") } } else { "Could not find a version section in the bundled CodeWhale changelog. \ diff --git a/crates/tui/src/core/engine/streaming.rs b/crates/tui/src/core/engine/streaming.rs index 4f2fde3f..f69879dc 100644 --- a/crates/tui/src/core/engine/streaming.rs +++ b/crates/tui/src/core/engine/streaming.rs @@ -82,10 +82,7 @@ pub(super) const SLEEP_GAP_THRESHOLD: Duration = Duration::from_secs(10); /// True when the gap between wall-clock and monotonic elapsed time since the /// last stream progress says the host was suspended. -pub(super) fn sleep_gap_detected( - monotonic_elapsed: Duration, - wallclock_elapsed: Duration, -) -> bool { +pub(super) fn sleep_gap_detected(monotonic_elapsed: Duration, wallclock_elapsed: Duration) -> bool { wallclock_elapsed.saturating_sub(monotonic_elapsed) > SLEEP_GAP_THRESHOLD } diff --git a/npm/codewhale/package.json b/npm/codewhale/package.json index 48b20807..f88b935e 100644 --- a/npm/codewhale/package.json +++ b/npm/codewhale/package.json @@ -1,7 +1,7 @@ { "name": "codewhale", - "version": "0.8.56", - "codewhaleBinaryVersion": "0.8.56", + "version": "0.8.57", + "codewhaleBinaryVersion": "0.8.57", "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/scripts/release/prepare-release.sh b/scripts/release/prepare-release.sh index 4181f094..a06674a8 100755 --- a/scripts/release/prepare-release.sh +++ b/scripts/release/prepare-release.sh @@ -43,7 +43,7 @@ old_re = re.escape(old) def bump(path, pattern, repl, minimum): p = pathlib.Path(path) text = p.read_text() - out, n = re.subn(pattern, repl, text) + out, n = re.subn(pattern, repl, text, flags=re.MULTILINE) if n < minimum: sys.exit(f"error: expected >= {minimum} replacement(s) in {path}, made {n}") p.write_text(out) diff --git a/web/lib/facts.generated.ts b/web/lib/facts.generated.ts index 2d30415c..50cdb21a 100644 --- a/web/lib/facts.generated.ts +++ b/web/lib/facts.generated.ts @@ -18,8 +18,8 @@ export interface RepoFacts { } export const FACTS: RepoFacts = { - "generatedAt": "2026-06-10T05:10:57.383Z", - "version": "0.8.56", + "generatedAt": "2026-06-10T06:46:48.026Z", + "version": "0.8.57", "crates": [ "agent", "app-server",