Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
71 changes: 69 additions & 2 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,14 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0

## [Unreleased]

## [0.9.13] - 2026-09-07

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[INFO] Extra blank line between release header and first subsection

Both CHANGELOG.md and crates/tui/CHANGELOG.md insert two blank lines between ## [0.9.13] - 2026-09-07 and ### Fixed. The rest of the changelog uses a single blank line between version headers and subsections.


Codewhale v0.9.13 is the integrity release for 0.9.12: multiline paste is
one paste again, truncated tool arguments can no longer execute, strict
ACP clients connect again, concurrent instances stop destroying each
other's queued text, and the Computer Use bundle ships at plugin 0.2.0
with an accessibility-first pointer.

### Fixed

- Pasting multiline text is one paste again. 0.9.12 gated the
Expand All @@ -19,6 +27,32 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
the session once a real `Event::Paste` arrives, so fast typing on
terminals with working bracketed paste is unaffected (#5981, thanks
@nsfoxer).
- `serve --acp` no longer breaks strict JetBrains clients: the
`initialize` response advertised `sessionCapabilities.list` as a
boolean and carried an undefined nested `load` capability; it now
sends `{"list": {}}` with no `load` key, per the ACP schema (#5969,
reported by @Lujc0523).
- Concurrent Codewhale instances no longer destroy each other's queued,
unsent text. The offline input queue was one global file that boot
cleared on session-id mismatch, so a second instance deleted the
first's parked messages. Queues are now keyed per session (mirroring
per-session checkpoints), an existing global file is adopted by its
owning session rather than discarded, and the adoption race between
two instances of the same session tolerates the loser's cleanup.
- A tool call truncated at the provider's output limit can no longer be
repaired into valid JSON and executed: repairs that had to synthesize
structure (append or discard closers) are routed to the existing
malformed-arguments path so the model is asked to re-issue — including
when the stream is cut before the closing content-block event (#5986).
- `codewhale metrics` reads Codewhale's own receipts again: the
deepseek-home fallback resolved `$HOME/.deepseek` unconditionally, so
the rollup reported all zeros from a directory nothing has written
since 2024. The Codewhale audit log is primary, with a checked legacy
fallback.
- The goal-continuation loop's promised stall bound actually bounds
stalls now, and undeclared fleet role names fail closed to read-only
`explore` in both fleet drivers instead of resolving to write-capable
customs in one and not the other.
- `allow_insecure_http = true` under a `[providers.<name>]` table works
again. 0.9.12 tightened plain-HTTP base URL handling in a way that
silently dropped the per-provider key, leaving the process-wide env
Expand Down Expand Up @@ -47,8 +81,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
### Changed

- The built-in Computer Use plugin bundle is refreshed to the standalone
plugin's 0.2.0 runtime (vendored from `Hmbown/codewhale-cu-plugin` @
`906b433`): the native macOS accessibility backend with an
plugin's 0.2.0 runtime (vendored from `Hmbown/codewhale-cu-plugin`
PR #12 @ `906b433`): the native macOS accessibility backend with an
a11y-first pointer strategy (covered points are refused, previews are
drawn), the permission-owning desktop-app socket transport, remote
computers over ssh and HarmonyOS HDC with contained temp handling,
Expand Down Expand Up @@ -226,6 +260,38 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
[@goransh-walia](https://github.com/goransh-walia) for the original
implementation (PR #5870, fixes #3999).

### Contributors

- **[@nsfoxer](https://github.com/nsfoxer)** — reported the 0.9.12
multiline-paste regression with a root-cause analysis that made the
fix a one-day turnaround (#5981).
- **@Nefelibata1024** — confirmed the paste regression's impact.
- **[@Gabriel-Degret](https://github.com/Gabriel-Degret)** — reported
`allow_insecure_http` being silently dropped in 0.9.12, with the
valid-key list that pinned it (#5991).
- **[@Lujc0523](https://github.com/Lujc0523)** — reported the ACP
`initialize` schema violation that made Codewhale unusable from
JetBrains IDEs (#5969).
- **[@gaord](https://github.com/gaord)** — the fleet role-precedence
recovery (#5945) and the README link to the community VS Code
frontend (#5992).
- **[@goransh-walia](https://github.com/goransh-walia)** — the
propose-only `commit_plan` rework (#5870).

### Notes

- Upgrading from 0.9.12 with Computer Use trusted and enabled: the
bundle's content hash changes with the 0.2.0 refresh, so the plugin
deactivates and asks for a fresh review — that is the designed
fail-closed path for a desktop-driving plugin. Re-trust it from the
Extensions page.
- The multiline-paste fix restores v9.11 behavior on terminals that
accept `EnableBracketedPaste` but deliver pastes as keystrokes
(reported on Windows 11 / PowerShell). Verified at the input-contract
level and in CI; a manual paste check on a real Windows terminal is
still welcome — please comment on #5981 with your terminal if anything
still misbehaves.

## [0.9.12] - 2026-09-03

Codewhale v0.9.12 puts computer use in the binary, opens two new routes —
Expand Down Expand Up @@ -8144,6 +8210,7 @@ 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.9.12...HEAD

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[WARNING] Unreleased compare link still points to v0.9.12 after adding the v0.9.13 section

The new [0.9.13] link is added, but the [Unreleased] link at the bottom of CHANGELOG.md still uses v0.9.12...HEAD. Once v0.9.13 is tagged, Unreleased should compare v0.9.13...HEAD; leaving v0.9.12 will show all 0.9.13 changes as unreleased while the Unreleased section is empty. The same pattern was correctly used for the new [0.9.13] link.

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Advance the Unreleased comparison base to the new version so the empty Unreleased section does not duplicate the v0.9.13 changes after the tag is created.

Suggested change
[Unreleased]: https://github.com/Hmbown/CodeWhale/compare/v0.9.12...HEAD
[Unreleased]: https://github.com/Hmbown/CodeWhale/compare/v0.9.13...HEAD

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[WARNING] Unreleased changelog compare link still points at v0.9.12

After cutting v0.9.13, the [Unreleased] compare link should be v0.9.13...HEAD. It remains v0.9.12...HEAD, so the empty Unreleased section will show all v0.9.13 changes and duplicate the new release on the generated web changelog.

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Point the Unreleased compare link at the new release tag to avoid duplicating 0.9.13 in the Unreleased view.

Suggested change
[Unreleased]: https://github.com/Hmbown/CodeWhale/compare/v0.9.12...HEAD
[Unreleased]: https://github.com/Hmbown/CodeWhale/compare/v0.9.13...HEAD

[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
[0.9.11]: https://github.com/Hmbown/CodeWhale/compare/v0.9.10...v0.9.11
[0.9.10]: https://github.com/Hmbown/CodeWhale/compare/v0.9.9...v0.9.10
Expand Down
42 changes: 21 additions & 21 deletions Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@ default-members = ["crates/cli"]
resolver = "2"

[workspace.package]
version = "0.9.12"
version = "0.9.13"
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
Expand Down
2 changes: 1 addition & 1 deletion crates/agent/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -11,5 +11,5 @@ description = "Model/provider registry and fallback strategy for Codewhale"
workspace = true

[dependencies]
codewhale-config = { path = "../config", version = "0.9.12" }
codewhale-config = { path = "../config", version = "0.9.13" }
serde.workspace = true
22 changes: 11 additions & 11 deletions crates/app-server/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -15,17 +15,17 @@ workspace = true
[dependencies]
anyhow.workspace = true
axum.workspace = true
codewhale-agent = { path = "../agent", version = "0.9.12" }
codewhale-config = { path = "../config", version = "0.9.12" }
codewhale-core = { path = "../core", version = "0.9.12" }
codewhale-execpolicy = { path = "../execpolicy", version = "0.9.12" }
codewhale-hooks = { path = "../hooks", version = "0.9.12" }
codewhale-mcp = { path = "../mcp", version = "0.9.12" }
codewhale-paths = { path = "../paths", version = "0.9.12" }
codewhale-protocol = { path = "../protocol", version = "0.9.12" }
codewhale-release = { path = "../release", version = "0.9.12" }
codewhale-state = { path = "../state", version = "0.9.12" }
codewhale-tools = { path = "../tools", version = "0.9.12" }
codewhale-agent = { path = "../agent", version = "0.9.13" }
codewhale-config = { path = "../config", version = "0.9.13" }
codewhale-core = { path = "../core", version = "0.9.13" }
codewhale-execpolicy = { path = "../execpolicy", version = "0.9.13" }
codewhale-hooks = { path = "../hooks", version = "0.9.13" }
codewhale-mcp = { path = "../mcp", version = "0.9.13" }
codewhale-paths = { path = "../paths", version = "0.9.13" }
codewhale-protocol = { path = "../protocol", version = "0.9.13" }
codewhale-release = { path = "../release", version = "0.9.13" }
codewhale-state = { path = "../state", version = "0.9.13" }
codewhale-tools = { path = "../tools", version = "0.9.13" }
serde.workspace = true
serde_json.workspace = true
rustls.workspace = true
Expand Down
28 changes: 14 additions & 14 deletions crates/cli/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -25,19 +25,19 @@ path = "src/main.rs"
anyhow.workspace = true
clap.workspace = true
clap_complete.workspace = true
codewhale-tui = { path = "../tui", version = "0.9.12" }
codewhale-agent = { path = "../agent", version = "0.9.12" }
codewhale-app-server = { path = "../app-server", version = "0.9.12" }
codewhale-config = { path = "../config", version = "0.9.12" }
codewhale-lane = { path = "../lane", version = "0.9.12" }
codewhale-workflow = { path = "../workflow", version = "0.9.12" }
codewhale-execpolicy = { path = "../execpolicy", version = "0.9.12" }
codewhale-mcp = { path = "../mcp", version = "0.9.12" }
codewhale-paths = { path = "../paths", version = "0.9.12" }
codewhale-release = { path = "../release", version = "0.9.12" }
codewhale-secrets = { path = "../secrets", version = "0.9.12" }
codewhale-state = { path = "../state", version = "0.9.12" }
codewhale-telemetry = { path = "../telemetry", version = "0.9.12" }
codewhale-tui = { path = "../tui", version = "0.9.13" }
codewhale-agent = { path = "../agent", version = "0.9.13" }
codewhale-app-server = { path = "../app-server", version = "0.9.13" }
codewhale-config = { path = "../config", version = "0.9.13" }
codewhale-lane = { path = "../lane", version = "0.9.13" }
codewhale-workflow = { path = "../workflow", version = "0.9.13" }
codewhale-execpolicy = { path = "../execpolicy", version = "0.9.13" }
codewhale-mcp = { path = "../mcp", version = "0.9.13" }
codewhale-paths = { path = "../paths", version = "0.9.13" }
codewhale-release = { path = "../release", version = "0.9.13" }
codewhale-secrets = { path = "../secrets", version = "0.9.13" }
codewhale-state = { path = "../state", version = "0.9.13" }
codewhale-telemetry = { path = "../telemetry", version = "0.9.13" }
chrono.workspace = true
console = "0.16.3"
dirs.workspace = true
Expand All @@ -57,7 +57,7 @@ webbrowser = "1.0"
zeroize = "1.8.2"

[build-dependencies]
codewhale-build-support = { path = "../build-support", version = "0.9.12" }
codewhale-build-support = { path = "../build-support", version = "0.9.13" }

# Parent-death cleanup for delegated server children (#3259): on Linux the
# dispatcher sets PR_SET_PDEATHSIG so the child is signalled if the dispatcher
Expand Down
2 changes: 1 addition & 1 deletion crates/command-contract/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -11,4 +11,4 @@ description = "Prototype command capability and dispatch shapes for the staged T
workspace = true

[dependencies]
codewhale-core = { path = "../core", version = "0.9.12" }
codewhale-core = { path = "../core", version = "0.9.13" }
6 changes: 3 additions & 3 deletions crates/config/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -12,9 +12,9 @@ workspace = true

[dependencies]
anyhow.workspace = true
codewhale-execpolicy = { path = "../execpolicy", version = "0.9.12" }
codewhale-paths = { path = "../paths", version = "0.9.12" }
codewhale-secrets = { path = "../secrets", version = "0.9.12" }
codewhale-execpolicy = { path = "../execpolicy", version = "0.9.13" }
codewhale-paths = { path = "../paths", version = "0.9.13" }
codewhale-secrets = { path = "../secrets", version = "0.9.13" }
fd-lock = "4.0.4"
libc = "0.2"
serde.workspace = true
Expand Down
Loading
Loading