mirror of
https://github.com/codewhale-hq/Codewhale.git
synced 2026-11-10 17:10:18 -10:00
Merge pull request #6000 from Hmbown/chore/prepare-0.9.13
chore(release): prepare v0.9.13
This commit is contained in:
34 files changed
+319
-552
No files matched your search
+69
-2
@@ -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
|
||||
|
||||
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
|
||||
@@ -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
|
||||
@@ -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,
|
||||
@@ -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 —
|
||||
@@ -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
|
||||
[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
|
||||
|
||||
Generated
+21
-21
@@ -764,7 +764,7 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "codewhale-agent"
|
||||
version = "0.9.12"
|
||||
version = "0.9.13"
|
||||
dependencies = [
|
||||
"codewhale-config",
|
||||
"serde",
|
||||
@@ -772,7 +772,7 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "codewhale-app-server"
|
||||
version = "0.9.12"
|
||||
version = "0.9.13"
|
||||
dependencies = [
|
||||
"anyhow",
|
||||
"axum",
|
||||
@@ -802,11 +802,11 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "codewhale-build-support"
|
||||
version = "0.9.12"
|
||||
version = "0.9.13"
|
||||
|
||||
[[package]]
|
||||
name = "codewhale-cli"
|
||||
version = "0.9.12"
|
||||
version = "0.9.13"
|
||||
dependencies = [
|
||||
"anyhow",
|
||||
"chrono",
|
||||
@@ -848,14 +848,14 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "codewhale-command-contract"
|
||||
version = "0.9.12"
|
||||
version = "0.9.13"
|
||||
dependencies = [
|
||||
"codewhale-core",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "codewhale-config"
|
||||
version = "0.9.12"
|
||||
version = "0.9.13"
|
||||
dependencies = [
|
||||
"anyhow",
|
||||
"codewhale-execpolicy",
|
||||
@@ -875,7 +875,7 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "codewhale-core"
|
||||
version = "0.9.12"
|
||||
version = "0.9.13"
|
||||
dependencies = [
|
||||
"anyhow",
|
||||
"async-trait",
|
||||
@@ -900,7 +900,7 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "codewhale-execpolicy"
|
||||
version = "0.9.12"
|
||||
version = "0.9.13"
|
||||
dependencies = [
|
||||
"anyhow",
|
||||
"codewhale-protocol",
|
||||
@@ -909,7 +909,7 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "codewhale-hooks"
|
||||
version = "0.9.12"
|
||||
version = "0.9.13"
|
||||
dependencies = [
|
||||
"anyhow",
|
||||
"async-trait",
|
||||
@@ -927,7 +927,7 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "codewhale-lane"
|
||||
version = "0.9.12"
|
||||
version = "0.9.13"
|
||||
dependencies = [
|
||||
"anyhow",
|
||||
"chrono",
|
||||
@@ -942,7 +942,7 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "codewhale-mcp"
|
||||
version = "0.9.12"
|
||||
version = "0.9.13"
|
||||
dependencies = [
|
||||
"anyhow",
|
||||
"serde",
|
||||
@@ -952,14 +952,14 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "codewhale-paths"
|
||||
version = "0.9.12"
|
||||
version = "0.9.13"
|
||||
dependencies = [
|
||||
"dirs",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "codewhale-protocol"
|
||||
version = "0.9.12"
|
||||
version = "0.9.13"
|
||||
dependencies = [
|
||||
"chrono",
|
||||
"serde",
|
||||
@@ -969,7 +969,7 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "codewhale-release"
|
||||
version = "0.9.12"
|
||||
version = "0.9.13"
|
||||
dependencies = [
|
||||
"anyhow",
|
||||
"reqwest 0.13.4",
|
||||
@@ -983,7 +983,7 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "codewhale-secrets"
|
||||
version = "0.9.12"
|
||||
version = "0.9.13"
|
||||
dependencies = [
|
||||
"chrono",
|
||||
"codewhale-paths",
|
||||
@@ -998,7 +998,7 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "codewhale-state"
|
||||
version = "0.9.12"
|
||||
version = "0.9.13"
|
||||
dependencies = [
|
||||
"anyhow",
|
||||
"chrono",
|
||||
@@ -1013,7 +1013,7 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "codewhale-telemetry"
|
||||
version = "0.9.12"
|
||||
version = "0.9.13"
|
||||
dependencies = [
|
||||
"anyhow",
|
||||
"chrono",
|
||||
@@ -1033,7 +1033,7 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "codewhale-tools"
|
||||
version = "0.9.12"
|
||||
version = "0.9.13"
|
||||
dependencies = [
|
||||
"anyhow",
|
||||
"async-trait",
|
||||
@@ -1047,7 +1047,7 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "codewhale-tui"
|
||||
version = "0.9.12"
|
||||
version = "0.9.13"
|
||||
dependencies = [
|
||||
"ahash",
|
||||
"ansi-to-tui",
|
||||
@@ -1144,7 +1144,7 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "codewhale-workflow"
|
||||
version = "0.9.12"
|
||||
version = "0.9.13"
|
||||
dependencies = [
|
||||
"serde",
|
||||
"serde_json",
|
||||
@@ -1156,7 +1156,7 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "codewhale-workflow-js"
|
||||
version = "0.9.12"
|
||||
version = "0.9.13"
|
||||
dependencies = [
|
||||
"async-trait",
|
||||
"jsonschema",
|
||||
|
||||
+1
-1
@@ -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
|
||||
|
||||
@@ -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
|
||||
@@ -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
|
||||
|
||||
+14
-14
@@ -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
|
||||
@@ -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
|
||||
|
||||
@@ -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" }
|
||||
@@ -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
|
||||
|
||||
@@ -15,14 +15,14 @@ anyhow.workspace = true
|
||||
chrono.workspace = true
|
||||
serde.workspace = true
|
||||
thiserror.workspace = true
|
||||
codewhale-agent = { path = "../agent", version = "0.9.12" }
|
||||
codewhale-config = { path = "../config", 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-protocol = { path = "../protocol", 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-execpolicy = { path = "../execpolicy", version = "0.9.13" }
|
||||
codewhale-hooks = { path = "../hooks", version = "0.9.13" }
|
||||
codewhale-mcp = { path = "../mcp", version = "0.9.13" }
|
||||
codewhale-protocol = { path = "../protocol", version = "0.9.13" }
|
||||
codewhale-state = { path = "../state", version = "0.9.13" }
|
||||
codewhale-tools = { path = "../tools", version = "0.9.13" }
|
||||
regex = "1.11"
|
||||
serde_json = { workspace = true, features = ["preserve_order"] }
|
||||
tokio = { workspace = true, features = ["time"] }
|
||||
|
||||
@@ -12,5 +12,5 @@ workspace = true
|
||||
|
||||
[dependencies]
|
||||
anyhow.workspace = true
|
||||
codewhale-protocol = { path = "../protocol", version = "0.9.12" }
|
||||
codewhale-protocol = { path = "../protocol", version = "0.9.13" }
|
||||
serde.workspace = true
|
||||
@@ -14,8 +14,8 @@ workspace = true
|
||||
anyhow.workspace = true
|
||||
async-trait.workspace = true
|
||||
chrono.workspace = true
|
||||
codewhale-protocol = { path = "../protocol", version = "0.9.12" }
|
||||
codewhale-release = { path = "../release", version = "0.9.12" }
|
||||
codewhale-protocol = { path = "../protocol", version = "0.9.13" }
|
||||
codewhale-release = { path = "../release", version = "0.9.13" }
|
||||
reqwest.workspace = true
|
||||
serde.workspace = true
|
||||
serde_json.workspace = true
|
||||
|
||||
@@ -13,7 +13,7 @@ workspace = true
|
||||
[dependencies]
|
||||
anyhow.workspace = true
|
||||
chrono.workspace = true
|
||||
codewhale-config = { path = "../config", version = "0.9.12" }
|
||||
codewhale-config = { path = "../config", version = "0.9.13" }
|
||||
fd-lock = "4.0.4"
|
||||
serde.workspace = true
|
||||
serde_json.workspace = true
|
||||
|
||||
@@ -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.9.12" }
|
||||
codewhale-paths = { path = "../paths", version = "0.9.13" }
|
||||
chrono.workspace = true
|
||||
serde = { workspace = true }
|
||||
serde_json = { workspace = true }
|
||||
|
||||
@@ -13,8 +13,8 @@ workspace = true
|
||||
[dependencies]
|
||||
anyhow.workspace = true
|
||||
chrono.workspace = true
|
||||
codewhale-paths = { path = "../paths", version = "0.9.12" }
|
||||
codewhale-protocol = { path = "../protocol", version = "0.9.12" }
|
||||
codewhale-paths = { path = "../paths", version = "0.9.13" }
|
||||
codewhale-protocol = { path = "../protocol", version = "0.9.13" }
|
||||
fd-lock = "4.0.4"
|
||||
rusqlite.workspace = true
|
||||
serde.workspace = true
|
||||
|
||||
@@ -13,9 +13,9 @@ workspace = true
|
||||
[dependencies]
|
||||
anyhow.workspace = true
|
||||
chrono.workspace = true
|
||||
codewhale-config = { path = "../config", version = "0.9.12" }
|
||||
codewhale-paths = { path = "../paths", version = "0.9.12" }
|
||||
codewhale-release = { path = "../release", version = "0.9.12" }
|
||||
codewhale-config = { path = "../config", version = "0.9.13" }
|
||||
codewhale-paths = { path = "../paths", version = "0.9.13" }
|
||||
codewhale-release = { path = "../release", version = "0.9.13" }
|
||||
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.9.12" }
|
||||
codewhale-build-support = { path = "../build-support", version = "0.9.13" }
|
||||
|
||||
[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.9.12" }
|
||||
codewhale-workflow = { path = "../workflow", version = "0.9.13" }
|
||||
@@ -13,7 +13,7 @@ workspace = true
|
||||
[dependencies]
|
||||
anyhow.workspace = true
|
||||
async-trait.workspace = true
|
||||
codewhale-protocol = { path = "../protocol", version = "0.9.12" }
|
||||
codewhale-protocol = { path = "../protocol", version = "0.9.13" }
|
||||
serde.workspace = true
|
||||
serde_json.workspace = true
|
||||
thiserror.workspace = true
|
||||
|
||||
+68
-309
@@ -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
|
||||
|
||||
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
|
||||
@@ -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
|
||||
@@ -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,
|
||||
@@ -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 —
|
||||
@@ -5221,313 +5287,6 @@ reproductions shaped v0.9.0:
|
||||
now map to Act + Full Access permissions via a compatibility shim and
|
||||
show a one-shot deprecation notice; removal is planned for 0.9.0.
|
||||
|
||||
## [0.8.67] - 2026-07-06
|
||||
|
||||
### Added
|
||||
|
||||
- The model you select in `/model` is now the operator: fleet workers whose
|
||||
task spec and roster profile pin no model inherit the active session route
|
||||
instead of a hardcoded `auto` sentinel, matching the pinned operator row in
|
||||
`/fleet roster`. Task-level and profile model overrides still win, and
|
||||
route receipts record which source applied (`task.model`,
|
||||
`agent_profile.model`, or `run.model`).
|
||||
- Added the `/workflow` command (aliases `/workflows`, `/wf`) as the user
|
||||
opt-in to workflow orchestration. Bare `/workflow` orchestrates the current
|
||||
work — the model synthesizes the objective from the conversation context;
|
||||
`/workflow <objective>` narrows the run; `/workflow status [run_id]` and
|
||||
`/workflow cancel <run_id>` relay typed run receipts without starting new
|
||||
runs.
|
||||
- Bare `/goal` with no active goal now declares a goal from the conversation
|
||||
context via `create_goal` instead of printing usage; with an active goal it
|
||||
remains the status readout, and explicit `/goal <objective>` is unchanged.
|
||||
- Added the constitution-first setup wizard: a unified `/setup` shell with
|
||||
resume, back navigation, and skip-retry state; provider/model readiness
|
||||
cards with a custom-provider form and provider-picker detail layout; a
|
||||
runtime posture card with preset application and project-override warnings;
|
||||
a setup verification report; and transactional setup persistence with
|
||||
secret redaction and rollback (#3402, #3403, #3404, #3405, #3406, #3410,
|
||||
#3411).
|
||||
- Added a structured user-global constitution with a deterministic renderer,
|
||||
prompt-block injection, guided principle authoring with preview and preset
|
||||
save, and a `/constitution` manager command as the primary constitution
|
||||
management surface, with file state shown in setup and actions surfaced in
|
||||
diagnostics (#3793, #3806, #3811).
|
||||
- Added model-assisted constitution and fleet-profile drafting behind an
|
||||
explicit ratify gate, with untrusted-draft provenance recorded so
|
||||
model-authored text is never applied silently. Updating users keep their
|
||||
existing constitution unchanged, and a localized constitution checkpoint is
|
||||
required after update (#3794).
|
||||
- Added the Hotbar route editor v1 with route-switch slot actions and support
|
||||
for custom model routes, plus a configured-provider route manager for
|
||||
`/provider` and `/model` with a missing-auth handoff into provider key
|
||||
entry (#2066, #3830, #3831).
|
||||
- Added auto-discovery of `.codewhale/rules/` and `.claude/rules/`
|
||||
directories as project context, with a total byte-budget cap on the
|
||||
assembled rules block. Contributed by maple (@yekern).
|
||||
- Exposed `context_input_budget_for_route` from the engine so external
|
||||
integrations can reuse route budget math. Contributed by hexin
|
||||
(@h3c-hexin).
|
||||
- Added GUI config persistence to the runtime API. Contributed by @gaord.
|
||||
- Added a website localization matrix with a locale registry and drift
|
||||
checks. Harvested from #3763 by @idling11 (#3090).
|
||||
- Added `doctor` detection of half-applied setup state, and startup milestone
|
||||
tracing for boot-performance diagnosis.
|
||||
- Added a v0.8.67 computer-use dogfood prompt that covers the Cursor-terminal
|
||||
QA flow, headless gates, setup, sub-agent completion, Fleet, Workflow, model
|
||||
pricing, and release evidence collection.
|
||||
- Fleet: local worker memory usage is now reported, including retained memory
|
||||
while a task is in Running status. Contributed by @cyq1017 (#3901).
|
||||
- Website: community hub, constitution thesis page and constitution-centered
|
||||
homepage, models page generated from the provider registry, docs dark mode
|
||||
and full SEO metadata/sitemap coverage, terminal player for real
|
||||
constitution traces, and a live star badge and version.
|
||||
- Added Meituan LongCat as a first-class OpenAI-compatible provider
|
||||
(`longcat`, with `long-cat`, `meituan-longcat`, and `meituan` aliases),
|
||||
`LONGCAT_API_KEY` discovery, the `LongCat-2.0` default model, provider
|
||||
picker wiring, model completions, provider docs, and web provider facts.
|
||||
- Fleet: added per-provider setup cards (Persistence, Constitution, Hotbar,
|
||||
Tools/MCP, Remote Runtime) with a unified setup catalog and provider-specific
|
||||
credential links. Provider setup progress is persisted transactionally with
|
||||
rollback guards, Codex OAuth is kept out of provider key storage, and a
|
||||
headless QA contract verifies setup readiness across providers.
|
||||
- Fleet: added Fleet starter profiles with role-aware loadouts (scout→Fast,
|
||||
manager→Inherit, etc.), `/fleet setup` profile-authoring wizard, Fleet
|
||||
effective-permission recording, and route intent-source tracking.
|
||||
- Fleet: added 'operator' as a built-in Fleet roster member — the preferred
|
||||
helm Fleet slot for workflow coordination. Operator plans, routes, reviews
|
||||
outputs, and calls other Fleet slots as needed. This is a roster role, not a
|
||||
separate app mode. The full Operation/Operate-mode architecture is deferred
|
||||
to 0.9.0.
|
||||
- Workflow: declarative workflows now run through the production driver, the
|
||||
workflow tool is wired to sub-agent dispatch, public Workflow surfaces are
|
||||
renamed, and typed workflow-run and status receipts are emitted for
|
||||
debugging and verification.
|
||||
- Added provider-agnostic Fleet rosters and loadouts: provider-specific
|
||||
subagent limits, launch concurrency, and admission caps are derived from
|
||||
config without hardcoding any single provider.
|
||||
- Added Workflow runtime foundations: the internal JS authoring/runtime crates
|
||||
compile and replay example workflows. 0.8.67 ships the `/workflow` opt-in,
|
||||
production-driver dispatch path, sub-agent task handoff, and typed run/status
|
||||
receipts; richer authoring UX and the full TUI run view remain tracked for
|
||||
v0.8.68 (#2974, #4038).
|
||||
|
||||
### Changed
|
||||
|
||||
- Clarified the Fleet coordination hierarchy and made roles carry real
|
||||
doctrine: the **operator** (the session's `/model` selection) runs the
|
||||
operation and assigns managers to workflows; a **manager** is the middle
|
||||
manager of exactly one workflow. The built-in **reviewer** is now explicitly
|
||||
adversarial (assume the change is broken, try to refute it), and the review
|
||||
sub-agent intro adopts the same framing. Built-in `manager`/`operator`/
|
||||
`reviewer` roster members now ship role `instructions` that flow into worker
|
||||
prompts on both the Fleet task-spec and agent/workflow `profile:` spawn
|
||||
paths; custom profiles override them via the same `instructions` field.
|
||||
- Removed the decorative Fleet vocabulary that never routed differently:
|
||||
the `tool-heavy` slot and the `strong`/`balanced`/`deep-reasoning`/`code`/
|
||||
`review`/`tool-heavy` loadout tiers. `inherit` (the operator's route) and
|
||||
`fast` (the provider's faster class) remain; retired names in existing
|
||||
configs keep parsing (as custom labels) with identical auto routing, and
|
||||
the `/fleet setup` model-class step now offers only the real choices.
|
||||
- Raised the default subagent concurrency for high-throughput fanout:
|
||||
`max_subagents` default 20 → 64 (config ceiling 128) and the queued+running
|
||||
admission cap 200 → 1024. Users on metered plans who want the old behavior
|
||||
can set `max_subagents = 20` in config.toml.
|
||||
- Renamed the internal `whaleflow` subsystem to `workflow` across the
|
||||
workspace: the `codewhale-whaleflow`/`codewhale-whaleflow-js` crates become
|
||||
`codewhale-workflow`/`codewhale-workflow-js`, Rust identifiers and JS bridge
|
||||
symbols are renamed, the `CODEWHALE_WHALEFLOW_JS_*` environment variables
|
||||
become `CODEWHALE_WORKFLOW_JS_*`, and the authoring/RFC docs move to
|
||||
`WORKFLOW_AUTHORING.md` and `WORKFLOW_EXTERNAL_MEMORY.md`. Historical
|
||||
changelog and retro-ledger entries keep the old name as a record.
|
||||
- Documented the Homebrew rollout strategy and added a distribution-channel
|
||||
check to the release checklist. Harvested from #3760 by @idling11 (#3489).
|
||||
- Paused Linux RISC-V prebuilt release and nightly artifacts because
|
||||
`rquickjs-sys` 0.12.0 does not ship `riscv64gc-unknown-linux-gnu` bindings;
|
||||
installers, docs, and update paths now treat RISC-V as unsupported until
|
||||
upstream bindings or a bindgen-enabled build lands.
|
||||
- Made the approval prompt calm, compact, and honest, and centered the
|
||||
first-run follow-up on the constitution; first-run onboarding now hands off
|
||||
into the setup wizard, and the language picker offers every shipped locale
|
||||
(#3929).
|
||||
- Startup performance: boot janitors and store scans no longer block the
|
||||
first frame, `@mention` completion no longer re-walks the workspace per
|
||||
keystroke, and idle offline-queue clones and duplicate tool-output hashing
|
||||
were eliminated.
|
||||
- Clarified the misleading "Ctrl+B backgrounds this command" shell wording
|
||||
(#3859) and the hotbar help shortcuts. Docs contribution by Chanhyo Jung
|
||||
(@roian6).
|
||||
- Documented the enforced repo-law invariants, the constitution flow, and the
|
||||
`/fleet setup` profile-authoring wizard; aligned `permissions.toml` action
|
||||
docs. Docs contribution by @greyfreedom.
|
||||
- Bumped web dependencies: wrangler 4.103.0 → 4.107.0, mermaid 11.15.0 →
|
||||
11.16.0, vitest 4.1.8 → 4.1.9 (@dependabot).
|
||||
- Backfilled v0.8.67 regression coverage across sub-agent completion, budget
|
||||
exhaustion, delegate ordering, provider onboarding, setup scroll, model
|
||||
catalog pricing, Fleet routing, and Workflow gates (#4076).
|
||||
- Split the large TUI debug command group and palette/theme internals into
|
||||
smaller modules without changing user-visible behavior (#4078, #4081).
|
||||
|
||||
### Fixed
|
||||
|
||||
- Fixed the goal sidebar elapsed timer so completed and blocked goals freeze
|
||||
their "completed in {elapsed}" readout instead of ticking forever. Goal state
|
||||
now records a `finished_at` instant that both sidebar render paths and the
|
||||
engine snapshot clamp elapsed against; `/goal resume` clears the freeze and
|
||||
the timer ticks again.
|
||||
- Fixed paused goals silently un-freezing their sidebar timer: usage keeps
|
||||
accruing while paused, and the next goal snapshot used to clear the frozen
|
||||
instant. Paused goals now stay frozen until an explicit resume.
|
||||
- Fixed durable `/goal` progress accounting so usage and continuation updates
|
||||
release the shared SQLite connection before re-reading the updated goal,
|
||||
unblocking resumed goal loops and full workspace release tests.
|
||||
- Fixed a scheduled-automation race where deleting an automation while its
|
||||
run was being enqueued left the already-created task running untracked;
|
||||
the run record is now persisted unconditionally.
|
||||
- Removed `panic = "abort"` from the release profile: it disabled unwinding
|
||||
and broke the panic supervision that keeps one failing tool call from
|
||||
taking down the whole session. The `lto`/`strip`/`codegen-units` size and
|
||||
speed tuning is unchanged.
|
||||
- Fixed session save/load to persist and restore the active model provider
|
||||
across restarts. Previously sessions created under one provider (e.g.
|
||||
DeepSeek) would silently load under a different active provider. Provider,
|
||||
subagent limits, fallback chain, context window, and reasoning effort are now
|
||||
restored from saved session metadata, with `"deepseek"` as the default for
|
||||
legacy sessions.
|
||||
- Raised the streamed model-response idle timeout and matched the TUI stall
|
||||
watchdog to the configured stream budget so long reasoning pauses are not
|
||||
recovered as stalled turns (#2487, #3998).
|
||||
- Fixed Codex OAuth/sub-agent release diagnostics so `auth list` reports an
|
||||
active Codex OAuth file, Responses API child requests encode inherited tool
|
||||
names safely, rate-limited child requests checkpoint as resumable provider
|
||||
interruptions, and failure records surface the real Responses API error
|
||||
(#3884).
|
||||
- Fixed fresh launch/setup testing with an explicit `CODEWHALE_HOME` so
|
||||
config, settings, theme prefs, and doctor legacy-state diagnostics do not
|
||||
inherit unrelated ambient `~/.deepseek` files (#4001, #4002).
|
||||
- Sub-agent state now persists to `.codewhale/` instead of the lingering
|
||||
pre-rebrand `.deepseek/` path (#3864). Contributed by Stime (@yekern).
|
||||
- `/plugin enable|disable` now persists across restarts (#3918), and the
|
||||
plugin command is hidden from the root slash menu and kept canonical after
|
||||
the scanner merge. Contributed by Nightt (@nightt5879).
|
||||
- `/config ask-rules` now shows ask rule actions with improved diagnostics,
|
||||
with file-rule action precedence under test. Contributed by @greyfreedom.
|
||||
- Fleet/sub-agents: enforced an absolute recursion-depth ceiling and widened
|
||||
task-id entropy, gave each atomic state write a unique temp path, kept
|
||||
sub-agent tool catalogs in parent parity (#3836), and made the Agents
|
||||
sidebar reconcile sub-agent completion and cancellation live (#3837).
|
||||
- Fixed apply_patch mangling newlines, defaulted fuzz to 3, and made writes
|
||||
atomic; fixed compaction to preserve pins on emergency compaction, harden
|
||||
the summary fallback, and count image tokens; corrected backtrack boundary,
|
||||
checkpoint clear ordering, prune guard, and durable rename.
|
||||
- Fixed the SSE client to flush the final frame, join multi-line data fields,
|
||||
and stop corrupting multibyte UTF-8 split across network reads.
|
||||
- Kept review-only turns read-only, aliased `auto` mode to the agent policy,
|
||||
showed the mode-derived safety policy in status (contributed by @cyq1017),
|
||||
and stopped the durable-review floor from holding routine YOLO work
|
||||
(#3883).
|
||||
- Fixed self-update to prefer exact binary release assets. Contributed by
|
||||
@LI-Jialu.
|
||||
- UI polish: stopped constitution and fleet-profile model drafts from
|
||||
freezing the event loop, scoped the context-menu backdrop to the popup
|
||||
rect, stacked model-picker panes on narrow modals, unified display-width
|
||||
helpers on one contract (#3924), removed misleading success toasts,
|
||||
issue-number leaks, and dead-end empty states, and repaired the onboarding
|
||||
trust and api-key keys.
|
||||
- Fixed the onboarding Trust step so plain Enter no longer silently grants
|
||||
workspace trust; users must choose the explicit trust or exit keys.
|
||||
- Fixed same-root skill-name collisions being silently shadowed; duplicate
|
||||
normalized skill names now warn while keeping discovery deterministic
|
||||
(#3919).
|
||||
- Normalized discovered skill names, removed unenforced trust copy, and
|
||||
surfaced the gated constitution override in prompts.
|
||||
- Fixed a parallel `subagent::` suite flake where one test's process-wide
|
||||
`Retry-After` pause could strand unrelated budget-capped workers for the
|
||||
full stale window; requests now re-poll the global pause in bounded slices
|
||||
and the rate-limit test clears the window on drop.
|
||||
- Sub-agent and Fleet reliability now fail empty, step-limited, and
|
||||
budget-exhausted children with explicit diagnostics instead of silent
|
||||
`Completed (no output)` success; budget exhaustion preserves partial output,
|
||||
`worktree: true` discovers one-level nested repos from harness directories,
|
||||
and completion-before-start delegate events recover into named rows instead
|
||||
of ellipsis-only identities (#4050, #4051, #4052, #4053).
|
||||
- Goal-mode writing and research tasks can complete with
|
||||
`verification.status = "not_applicable"` without triggering continuation
|
||||
loops (#4054).
|
||||
- First-run onboarding routes API keys through the selected provider, setup
|
||||
wizard bodies scroll with PageUp/PageDown, shipped locale packs are back to
|
||||
`en.json` parity with zh-Hant explicitly partial, stable feature flags stay
|
||||
out of Experimental, and model/provider rows include current LongCat and
|
||||
sourced-pricing hints (#4056, #4057, #4058, #4062, #4063).
|
||||
- Running tool rows animate while a lone foreground tool is active, and
|
||||
workflow receipts render run/status/failure cards instead of one-line or
|
||||
null-success output (#4059).
|
||||
- Model-facing turn metadata now includes a compact git workspace snapshot and
|
||||
escalates context pressure at the same thresholds as the TUI, helping agents
|
||||
narrow scope or compact before truncation (#4071, #4073).
|
||||
- Successful child sub-agent completions inline the child's `EVIDENCE` block
|
||||
before the completion sentinel, so parents can cite child findings without
|
||||
re-running tools (#4072).
|
||||
- Deferred tools hydrate and execute in the same batch when the original
|
||||
arguments are valid, and `[tools].always_load` now keeps configured MCP tools
|
||||
active instead of forcing the first-call retry. Thanks @SparkofSpike for the
|
||||
hot-path MCP report (#4074, #4027).
|
||||
- New commit-range co-author checks reject bot/tool trailers on newly pushed
|
||||
commits; historical release-range cleanup remains a separate maintenance
|
||||
concern (#4075).
|
||||
- Fixed fuzzy `edit_file` matching so matches that begin with multibyte UTF-8
|
||||
characters, including CJK text, advance on character boundaries instead of
|
||||
panicking. Contributed by Nightt (@nightt5879), reported by Taixin Guo
|
||||
(@taixinguo) (#3971, #4045).
|
||||
- Fixed Unix dispatcher/TUI output under early-closing pipes such as
|
||||
`codewhale doctor | head` by restoring the default `SIGPIPE` handler before
|
||||
printing and propagating signal exits quietly. Contributed by @aznikline,
|
||||
reported by @BrathonBai (#4030, #4043).
|
||||
- Suppressed dead_code warnings in the unused plugin registry module and
|
||||
fixed formatting across the command-group files. Contributed by Paulo Aboim
|
||||
Pinto (@aboimpinto).
|
||||
- Pointed the website Community nav link at the community hub.
|
||||
|
||||
### Security
|
||||
|
||||
- MCP client hardening: closed an SSE-endpoint SSRF, bounded the HTTP
|
||||
response body via Content-Length instead of a streaming read, bounded stdio
|
||||
line reads to prevent OOM denial of service, fixed a dead timeout, and
|
||||
removed an unbounded buffer.
|
||||
- Made execpolicy deny/trust rules segment-aware, closing a command-chaining
|
||||
bypass.
|
||||
- Closed repo-law and safety-floor bypasses found by adversarial review:
|
||||
protected invariants are now enforced as mechanism, the destroyer gap in
|
||||
the safety floor is closed, a catalog-present tool with no execution path
|
||||
now fails closed, `web_run` open/click is classified as destructive, and
|
||||
the allow-list gained wildcard and case handling.
|
||||
- Refused symlinked rules directories to prevent workspace escape via
|
||||
discovered rules. Contributed by maple (@yekern).
|
||||
- Bounded Fleet sub-agent worker output so fanout cannot exhaust TUI memory
|
||||
(#3882), and preserved event headroom for progress. Contributed in part by
|
||||
@cyq1017.
|
||||
- Added an untrusted constitution-draft gate with authoring provenance so
|
||||
model-drafted constitutions require explicit human ratification.
|
||||
|
||||
- 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
|
||||
|
||||
- Removed unused model-registry helpers. Harvested from #3872 by @cyq1017.
|
||||
- Removed unused request-tuning metadata. Harvested from #3871 by @cyq1017.
|
||||
- Removed dead fleet task helpers (#3894 by @cyq1017), the unused
|
||||
approval-cache container (#3845) and localization QA metadata (both by
|
||||
@nightt5879), the dormant tab collaboration subsystem (#3838), the legacy
|
||||
flash auto-router (#3839), the stale project_doc loader (#3840), ignored
|
||||
mock LLM placeholders (#3841), dead model-catalog helpers (#3842), the
|
||||
unused execpolicy amend module, and dead MCP/client retry helpers.
|
||||
- Retired the deprecated `WHALE.md` context fallback (#3798).
|
||||
|
||||
---
|
||||
|
||||
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).
|
||||
+15
-15
@@ -31,20 +31,20 @@ path = "src/main.rs"
|
||||
[dependencies]
|
||||
ahash = "0.8"
|
||||
anyhow.workspace = true
|
||||
codewhale-config = { path = "../config", version = "0.9.12" }
|
||||
codewhale-command-contract = { path = "../command-contract", 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-lane = { path = "../lane", 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-secrets = { path = "../secrets", version = "0.9.12" }
|
||||
codewhale-telemetry = { path = "../telemetry", version = "0.9.12" }
|
||||
codewhale-tools = { path = "../tools", version = "0.9.12" }
|
||||
codewhale-workflow = { path = "../workflow", version = "0.9.12" }
|
||||
codewhale-workflow-js = { path = "../workflow-js", version = "0.9.12" }
|
||||
codewhale-config = { path = "../config", version = "0.9.13" }
|
||||
codewhale-command-contract = { path = "../command-contract", 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-lane = { path = "../lane", 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-secrets = { path = "../secrets", version = "0.9.13" }
|
||||
codewhale-telemetry = { path = "../telemetry", version = "0.9.13" }
|
||||
codewhale-tools = { path = "../tools", version = "0.9.13" }
|
||||
codewhale-workflow = { path = "../workflow", version = "0.9.13" }
|
||||
codewhale-workflow-js = { path = "../workflow-js", version = "0.9.13" }
|
||||
async-stream = "0.3.6"
|
||||
async-trait.workspace = true
|
||||
base64 = "0.23.1"
|
||||
@@ -112,7 +112,7 @@ mimalloc.workspace = true
|
||||
rusty_alloc-api = { workspace = true, optional = true }
|
||||
|
||||
[build-dependencies]
|
||||
codewhale-build-support = { path = "../build-support", version = "0.9.12" }
|
||||
codewhale-build-support = { path = "../build-support", version = "0.9.13" }
|
||||
|
||||
[dev-dependencies]
|
||||
cucumber = "0.23.0"
|
||||
|
||||
@@ -27,6 +27,15 @@ notes, and relevant issue/PR comments.
|
||||
|
||||
## Contributors by time
|
||||
|
||||
<details open>
|
||||
<summary><strong>v0.9.13 — paste integrity, dispatch safety, and the Computer Use bundle</strong></summary>
|
||||
|
||||
Contributors and reporters credited in the [0.9.13 changelog](../CHANGELOG.md):
|
||||
merged PRs from [gaord](https://github.com/gaord) and [goransh-walia](https://github.com/goransh-walia);
|
||||
reports and reproductions from [nsfoxer](https://github.com/nsfoxer), [Nefelibata1024](https://github.com/Nefelibata1024), [Gabriel-Degret](https://github.com/Gabriel-Degret), and [Lujc0523](https://github.com/Lujc0523).
|
||||
|
||||
</details>
|
||||
|
||||
<details open>
|
||||
<summary><strong>v0.9.12 — native search, live token truth, and runtime surfaces</strong></summary>
|
||||
|
||||
|
||||
+6
-6
@@ -10,7 +10,7 @@ If you just want the short version, see the
|
||||
[main README](../README.md#install) or
|
||||
[简体中文 README](../README.zh-CN.md#安装).
|
||||
|
||||
This branch describes the **v0.9.12 source candidate**. Install commands that use
|
||||
This branch describes the **v0.9.13 source candidate**. Install commands that use
|
||||
`latest` resolve to the latest published package or GitHub Release, which may
|
||||
trail the source candidate. A candidate is not a published install until the
|
||||
matching package, tag, checksums, and release assets exist.
|
||||
@@ -47,7 +47,7 @@ and at most three attempts. Explicit mirror settings remain supported. `CODEWHAL
|
||||
version; `DEEPSEEK_TUI_VERSION` and `DEEPSEEK_VERSION` remain legacy aliases. The
|
||||
manifest and binary must come from the same source, and checksum failure never
|
||||
permits replacement. An explicit version or mirror cannot bypass the version
|
||||
check: a newer development build is kept, including v0.9.12 when public latest
|
||||
check: a newer development build is kept, including v0.9.13 when public latest
|
||||
is v0.9.11. Use a separate directory for deliberate rollback.
|
||||
|
||||
### Migrating from npm, Cargo, or another installation
|
||||
@@ -101,7 +101,7 @@ commands update their own copies, so verify PATH again afterward.
|
||||
As checked on 2026-09-04, [latest stable v0.9.11](https://github.com/Hmbown/CodeWhale/releases/tag/v0.9.11)
|
||||
publishes Linux x64/arm64, macOS x64/arm64, Windows x64/arm64, and Android arm64
|
||||
assets. Artifact presence is distinct from platform qualification.
|
||||
The table below describes the v0.9.12 source candidate's platform and secondary
|
||||
The table below describes the v0.9.13 source candidate's platform and secondary
|
||||
packaging support; `latest` installation still selects the published release.
|
||||
Android/Termux is preview pending real-device QA. Linux ARM64 is available from
|
||||
v0.8.8 onward. Linux RISC-V prebuilts are temporarily paused because the locked
|
||||
@@ -126,7 +126,7 @@ v0.8.8 onward. Linux RISC-V prebuilts are temporarily paused because the locked
|
||||
[Build from source](#7-build-from-source) below.
|
||||
³ RISC-V source builds currently need upstream `rquickjs-sys` RISC-V bindings or
|
||||
a bindgen-enabled dependency build.
|
||||
⁴ The v0.9.12 source-candidate npm wrapper recognizes Android arm64 and resolves
|
||||
⁴ The v0.9.13 source-candidate npm wrapper recognizes Android arm64 and resolves
|
||||
the matching `codewhale` and `codew` Android assets. npm
|
||||
installation works only for a package version whose GitHub Release publishes
|
||||
those matching assets. The Android/Termux path remains preview-only until the
|
||||
@@ -138,7 +138,7 @@ Linux `codewhale-linux-arm64` archive in Termux; use the Termux-specific
|
||||
Android archive when a release or release candidate publishes one, or build
|
||||
from source inside Termux.
|
||||
|
||||
The Linux **x64 and arm64** v0.9.12 candidate assets are **static musl builds**.
|
||||
The Linux **x64 and arm64** v0.9.13 candidate assets are **static musl builds**.
|
||||
The x64 release path has used musl since v0.8.65; v0.9.6 extends the same build
|
||||
and static-launch check to arm64. These binaries have no glibc dependency and
|
||||
run on their matching architecture across Ubuntu, Debian, RHEL/CentOS, and
|
||||
@@ -156,7 +156,7 @@ version `GLIBC_2.39' not found
|
||||
```
|
||||
|
||||
The npm wrapper, `codewhale update`, and the Unix archive installer retain their
|
||||
GNU-binary preflight for older releases. The v0.9.12 arm64 candidate instead uses
|
||||
GNU-binary preflight for older releases. The v0.9.13 arm64 candidate instead uses
|
||||
`aarch64-unknown-linux-musl`, so it has no `GLIBC_*` floor. If you are installing
|
||||
an earlier release on an older arm64 distribution, use:
|
||||
|
||||
|
||||
@@ -20,7 +20,7 @@
|
||||
]
|
||||
},
|
||||
"sourceCandidate": {
|
||||
"version": "0.9.12",
|
||||
"version": "0.9.13",
|
||||
"providerCount": 47,
|
||||
"toolCount": 76,
|
||||
"sandboxBackends": [
|
||||
@@ -177,7 +177,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.9.12 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.9.13 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",
|
||||
@@ -222,22 +222,12 @@
|
||||
"web/lib/release-credits.ts"
|
||||
],
|
||||
"requiredCandidateCredits": [
|
||||
"@h3c-hexin",
|
||||
"@qiuYliangM",
|
||||
"@wuisabel-gif",
|
||||
"@aboimpinto",
|
||||
"@musichen",
|
||||
"@gaord",
|
||||
"@SparkofSpike",
|
||||
"@M-Maciej",
|
||||
"@serephus",
|
||||
"@whp233",
|
||||
"@goransh-walia",
|
||||
"@nsfoxer",
|
||||
"@Nefelibata1024",
|
||||
"@Gabriel-Degret",
|
||||
"@huangxianzhan",
|
||||
"@zhuowp",
|
||||
"@AdityaVG13",
|
||||
"@nightt5879",
|
||||
"@Lstarsky0"
|
||||
"@Lujc0523"
|
||||
]
|
||||
},
|
||||
"screenshot": {
|
||||
|
||||
Generated
+2
-2
@@ -1,12 +1,12 @@
|
||||
{
|
||||
"name": "codewhale-vscode",
|
||||
"version": "0.9.12",
|
||||
"version": "0.9.13",
|
||||
"lockfileVersion": 3,
|
||||
"requires": true,
|
||||
"packages": {
|
||||
"": {
|
||||
"name": "codewhale-vscode",
|
||||
"version": "0.9.12",
|
||||
"version": "0.9.13",
|
||||
"license": "MIT",
|
||||
"devDependencies": {
|
||||
"@types/node": "^20.19.27",
|
||||
|
||||
@@ -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.9.12",
|
||||
"version": "0.9.13",
|
||||
"publisher": "codewhale",
|
||||
"license": "MIT",
|
||||
"preview": true,
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"name": "codewhale",
|
||||
"version": "0.9.12",
|
||||
"codewhaleBinaryVersion": "0.9.12",
|
||||
"version": "0.9.13",
|
||||
"codewhaleBinaryVersion": "0.9.13",
|
||||
"description": "Terminal coding agent for supported hosted and local models. One runtime on your machine. Rust, MIT.",
|
||||
"author": "Hmbown",
|
||||
"license": "MIT",
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@codewhale/runtime-sdk",
|
||||
"version": "0.9.12",
|
||||
"version": "0.9.13",
|
||||
"description": "Typed JavaScript helpers for Codewhale Runtime API Fleet endpoints.",
|
||||
"license": "MIT",
|
||||
"type": "module",
|
||||
|
||||
Generated
+2
-2
@@ -1559,7 +1559,7 @@
|
||||
}
|
||||
},
|
||||
"npm/codewhale": {
|
||||
"version": "0.9.12",
|
||||
"version": "0.9.13",
|
||||
"funding": [
|
||||
{
|
||||
"type": "github",
|
||||
@@ -1600,7 +1600,7 @@
|
||||
},
|
||||
"npm/runtime-sdk": {
|
||||
"name": "@codewhale/runtime-sdk",
|
||||
"version": "0.9.12",
|
||||
"version": "0.9.13",
|
||||
"license": "MIT",
|
||||
"engines": {
|
||||
"node": ">=18"
|
||||
|
||||
@@ -20,7 +20,7 @@
|
||||
# Uses prebuilt release binaries instead of a Rust build.
|
||||
set -euo pipefail
|
||||
|
||||
RELEASE_TAG="${RELEASE_TAG:-v0.9.12}"
|
||||
RELEASE_TAG="${RELEASE_TAG:-v0.9.13}"
|
||||
REPO_URL="${REPO_URL:-https://github.com/Hmbown/CodeWhale.git}"
|
||||
REPO_BRANCH="${REPO_BRANCH:-main}"
|
||||
SECRETS_FILE="${SECRETS_FILE:-/tmp/cw-secrets.env}"
|
||||
|
||||
@@ -751,7 +751,7 @@
|
||||
],
|
||||
"sandboxNote": "The repository also contains a seccomp module and a future Windows helper contract. Neither is wired into child-command launch, so Codewhale does not advertise them: source-only sandbox code is not evidence that a command was restricted.",
|
||||
"telemetryTitle": "Telemetry, exactly",
|
||||
"telemetryLead": "Codewhale 0.9.12 counts anonymous usage by default and tells you so at first launch; the earlier 0.9.11 release asked first. Turning it off is a saved choice that later versions keep, and an opt-out recorded under the earlier opt-in policy stays off. Showing the notice never records any acceptance on your behalf; Codewhale and PostHog are named as the processors.",
|
||||
"telemetryLead": "Codewhale 0.9.13 counts anonymous usage by default and tells you so at first launch; the earlier 0.9.11 release asked first. Turning it off is a saved choice that later versions keep, and an opt-out recorded under the earlier opt-in policy stays off. Showing the notice never records any acceptance on your behalf; Codewhale and PostHog are named as the processors.",
|
||||
"telemetry": [
|
||||
[
|
||||
"Never collected",
|
||||
|
||||
@@ -751,7 +751,7 @@
|
||||
],
|
||||
"sandboxNote": "仓库中还有一个 seccomp 模块和一份未来的 Windows 辅助程序契约。两者都没有接入子命令启动,所以 Codewhale 不会宣传它们:只存在于源码中的沙箱代码不能证明某条命令受到了限制。",
|
||||
"telemetryTitle": "遥测,精确到每一项",
|
||||
"telemetryLead": "Codewhale 0.9.12 默认统计匿名使用量,并在首次启动时告知你;早先的 0.9.11 版本会先询问。关闭是会被后续版本保留的选择,在早先的自愿开启政策下记录的关闭也始终有效。显示告知绝不会代你记录任何同意;处理方为 Codewhale 和 PostHog。",
|
||||
"telemetryLead": "Codewhale 0.9.13 默认统计匿名使用量,并在首次启动时告知你;早先的 0.9.11 版本会先询问。关闭是会被后续版本保留的选择,在早先的自愿开启政策下记录的关闭也始终有效。显示告知绝不会代你记录任何同意;处理方为 Codewhale 和 PostHog。",
|
||||
"telemetry": [
|
||||
[
|
||||
"永远不收集",
|
||||
|
||||
@@ -26,23 +26,49 @@ export const CHANGELOG: ChangelogRelease[] = [
|
||||
"date": null,
|
||||
"unreleased": true,
|
||||
"compareUrl": "https://github.com/Hmbown/CodeWhale/compare/v0.9.12...HEAD",
|
||||
"sections": []
|
||||
},
|
||||
{
|
||||
"version": "0.9.13",
|
||||
"date": "2026-09-07",
|
||||
"unreleased": false,
|
||||
"compareUrl": "https://github.com/Hmbown/CodeWhale/compare/v0.9.12...v0.9.13",
|
||||
"sections": [
|
||||
{
|
||||
"heading": "Fixed",
|
||||
"items": [
|
||||
"Pasting multiline text is one paste again. 0.9.12 gated the paste-burst heuristic off whenever bracketed paste was *requested*, but a terminal can accept EnableBracketedPaste and still deliver a paste as individual keystrokes — on those terminals (observed on Windows 11) every pasted line was submitted as its own message. The heuristic is again armed whenever tui.paste_burst_detection is on, and the existing bracketed_paste_seen guard still disarms it for the rest of the…",
|
||||
"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 var as the only opt-in — LAN llama.cpp and internal-gateway users had to export CODEWHALE_ALLOW_INSECURE_HTTP=1 to connect at all. The key is honored again (parsed, settable and unsettable through codewhale config set providers.<name>.allow_insecure_http, and listed in the…",
|
||||
"A Fleet task that selects a roster member with worker.agent_profile now runs with that member's posture. The launch-time resolver only consulted the resolved member when the legacy worker.role label was absent, so a task labelled manager that selected member:reviewer ran as a write-capable manager instead of a reviewer and was never leased. The member's canonical slot now wins whenever one resolved; the label remains the posture only when no member resolved at all. To keep…"
|
||||
],
|
||||
"itemCount": 8
|
||||
},
|
||||
{
|
||||
"heading": "Changed",
|
||||
"items": [
|
||||
"The built-in Computer Use plugin bundle is refreshed to the standalone 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, truthful win32 PowerShell failure reporting, and the shared allow-listed…",
|
||||
"/statusline drives the bottom chrome again. Since the 0.9.12 shell redesign the posture bar and the metrics line were built independently of tui.status_items, so every toggle in the picker except the balance fetch was decoration. Each remaining item now shows or hides exactly one thing: model, context_percent, cost, balance, cache, tokens and session_metrics are metrics-line segments, and mode is the posture bar's plan/act/operate chip. The status, agents, reasoning_replay,…",
|
||||
"The context reading is back on screen at every fullness. 0.9.12 painted ctx NN% only from 50% up, which left most of a session with no context signal at all; it now paints from 0% and keeps its warning colour from 80% up (#5950).",
|
||||
"A child agent parked because its parent's turn ended is shown as parked in the Agents panel, the sidebar and Agent Details, with resume_from / cancel as the recovery, instead of wearing the same \"waiting for input\" label as a child that asked a question. Parked work sorts below live and answerable work and no longer inflates the blocked chip; the receipts roster and the wire state gain parked (#5906, #5921).",
|
||||
"codewhale account keys set|remove|list no longer carry a hardcoded eight-provider list. Provider ids come from the control plane's public catalog (GET /api/model-providers), are validated locally against ^[a-z0-9][a-z0-9-]{0,63}$ before they reach a URL path, and list shows every catalog provider with its label and stored-key state. --from-local maps a catalog row onto the local runtime provider through the catalog's own runtimeProvider field, so a newly supported provider…"
|
||||
"codewhale account keys set|remove|list no longer carry a hardcoded eight-provider list. Provider ids come from the control plane's public catalog (GET /api/model-providers), are validated locally against ^[a-z0-9][a-z0-9-]{0,63}$ before they reach a URL path, and list shows every catalog provider with its label and stored-key state. --from-local maps a catalog row onto the local runtime provider through the catalog's own runtimeProvider field, so a newly supported provider…",
|
||||
"/mcp lists the servers that need a login first, as their own Needs login group above Needs attention, and opens with the cursor already on the first such row so the Enter the screen advertises runs /mcp login <server> straight away; translated in all 15 packs. A snapshot test pins the footer shape the chip landed with (MCP · N connected · N ◆ auth required · N failed) so an expired login never regresses into the failed count (#5926)."
|
||||
],
|
||||
"itemCount": 4
|
||||
"itemCount": 6
|
||||
},
|
||||
{
|
||||
"heading": "Fixed",
|
||||
"items": [
|
||||
"The posture bar states how long the session has been working and how long the current turn has run, distinguishing actively working from waiting on a tool, a sub-agent or the operator; the 0.9.12 shell had dropped the overall working-time indicator from the place a glancing user checks (#5914)."
|
||||
"Five of the load-flaky tests tracked in #5929 no longer depend on shared state or live local daemons. Background-hook capture tests wait for the capture file to hold bytes instead of merely existing (the shell's > redirection creates the file empty before cat writes, which read as valid JSON: EOF under load); the session-picker acceptance test drives the real picker over a private store instead of a process-global CODEWHALE_HOME redirect that concurrent tests could observe…",
|
||||
"The posture bar states how long the session has been working and how long the current turn has run, distinguishing actively working from waiting on a tool, a sub-agent or the operator; the 0.9.12 shell had dropped the overall working-time indicator from the place a glancing user checks (#5914).",
|
||||
"A background runtime turn whose own store record could not be read, parsed or written (Failed to read turn …, Failed to read item …) was only a log line. The runtime now publishes a runtime.store_failure event naming the file, the root cause and the next action (move the file aside, or check free space and permissions); the TUI shows it as a warning toast and a transcript line, the task timeline records it, and the runtime API streams it. A turn whose own record is…",
|
||||
"An MCP token refresh that fails to parse the provider's answer keeps the endpoint's receipt — status line, content type, and a 200-byte excerpt with every credential-shaped value (access_token, refresh_token, client_secret, id_token, bearer schemes) masked before the cut — instead of rmcp's bare Failed to parse server response, so a provider outage answering an HTML 502 reads differently from a parser defect, and the login remedy stays named (#5926; remedy wording landed in…"
|
||||
],
|
||||
"itemCount": 1
|
||||
"itemCount": 4
|
||||
},
|
||||
{
|
||||
"heading": "Added",
|
||||
@@ -60,7 +86,27 @@ export const CHANGELOG: ChangelogRelease[] = [
|
||||
"/shannon [world|trace|children] inspects the session's ShannonNet World: agent, projected capabilities, children, and receipts.",
|
||||
"ShannonNet sub-agents get compiled context: the session's native-memory hits are imported with provenance and the child's projected World decides what it sees (confidential notes never cross); the session World is checkpointed and closed when the backend drops."
|
||||
],
|
||||
"itemCount": 14
|
||||
"itemCount": 15
|
||||
},
|
||||
{
|
||||
"heading": "Contributors",
|
||||
"items": [
|
||||
"@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 — reported allow_insecure_http being silently dropped in 0.9.12, with the valid-key list that pinned it (#5991).",
|
||||
"@Lujc0523 — reported the ACP initialize schema violation that made Codewhale unusable from JetBrains IDEs (#5969).",
|
||||
"@gaord — the fleet role-precedence recovery (#5945) and the README link to the community VS Code frontend (#5992).",
|
||||
"@goransh-walia — the propose-only commit_plan rework (#5870)."
|
||||
],
|
||||
"itemCount": 6
|
||||
},
|
||||
{
|
||||
"heading": "Notes",
|
||||
"items": [
|
||||
"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."
|
||||
],
|
||||
"itemCount": 2
|
||||
}
|
||||
]
|
||||
},
|
||||
@@ -156,6 +202,7 @@ export const CHANGELOG: ChangelogRelease[] = [
|
||||
{
|
||||
"heading": "Fixed",
|
||||
"items": [
|
||||
"Read-only Fleet workers no longer send \"action\": {\"enum\": null} in their projected bash schema. The read-only projection probed the action enum with a mutating index, which auto-vivified the key on schemas that have no action property, and strict OpenAI-compatible validators then rejected the whole request (null is not of type \"array\"). The probe is non-mutating now, in both the read-only projection and the Run arm next to it, and a regression test walks the whole projected…",
|
||||
"Fast typing no longer corrupts the composer. The paste-burst heuristic ran on every session until a real bracketed paste arrived, holding, buffering, retro-grabbing, and absorbing Enter on timing guesses; it is now fallback-only (gated off when the terminal provides bracketed paste), the retro-grab is deleted, and Enter on held command text flushes and submits.",
|
||||
"Ctrl+C works on the pre-session launch menu and speaks everywhere: the first press arms the two-second exit window with a visible localized \"Press Ctrl+C again to quit\" hint (previously silent), the second exits. The worktree name input keeps Ctrl+C as cancel-input.",
|
||||
"Fresh interactive sessions no longer leave a phantom one-message duplicate behind. The TUI claimed one session id (Runtime store lock, turn-start crash checkpoint) while the engine minted a second one; the first SessionUpdated re-keyed the App, the completion commit cleared only the engine id's checkpoint, and codewhale --continue later \"recovered\" the orphaned checkpoint as a duplicate session instead of the real one. The engine now adopts the host-owned id at spawn…",
|
||||
@@ -166,10 +213,9 @@ export const CHANGELOG: ChangelogRelease[] = [
|
||||
"Account sessions no longer read the macOS Keychain. Unsigned or rebuilt codewhale binaries were a new Keychain ACL principal every time, so codewhale web and the TUI popped a password dialog on start. Sessions now use ~/.codewhale/secrets/secrets.json (mode 0600), the same store as provider keys. Extracted from the Keychain-retirement half of #5632.",
|
||||
"Hardened the dispatcher-side config parse the same way: ConfigStore loads and project-config parsing now deserialize ConfigToml on a dedicated 16 MiB-stack thread (the guided-setup save path could overflow a 2 MiB worker stack the same way the TUI's ConfigFile parse did), and the #5585 setup-confirm toast test runs its runtime on an equally sized thread instead of overflowing the default libtest stack.",
|
||||
"Fixed detached interactive agents reporting worker usage after the parent turn ends with the usage missing from the session/live /cost total (#5597): interactive turns acquire an owner-scoped runtime usage lease, late usage enters the session cost pool without reopening the sealed mailbox, and worker/session/reload accounting share one hashed response identity so retried deliveries stay exactly-once.",
|
||||
"Fixed the sub-agent fiasco class: in-workspace absolute git -C no longer trips the read-only child shell gate with a coherent bounded gate (#5595), turn end parks turn-owned children resumably instead of silently cancelling them (#5596), stale write-claims are released by liveness with coordinate release (#5562), and the verifier role description matches its real surface (#5562).",
|
||||
"Fixed workflow responseSchema failure handling (#5583): bounded repair with typed receipts (kind + attempt), raw-output receipts persisted as artifacts that survive reload, and failures surfaced instead of null success (#5528). Degraded owner snapshots no longer project as ordinary Completed runs (#5582), typed task error kinds enable fail-fast parallel/pipeline (R9), and /workflow confirm finds the draft despite interleaved messages."
|
||||
"Fixed the sub-agent fiasco class: in-workspace absolute git -C no longer trips the read-only child shell gate with a coherent bounded gate (#5595), turn end parks turn-owned children resumably instead of silently cancelling them (#5596), stale write-claims are released by liveness with coordinate release (#5562), and the verifier role description matches its real surface (#5562)."
|
||||
],
|
||||
"itemCount": 24
|
||||
"itemCount": 25
|
||||
}
|
||||
]
|
||||
},
|
||||
@@ -392,93 +438,5 @@ export const CHANGELOG: ChangelogRelease[] = [
|
||||
"itemCount": 4
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"version": "0.9.8",
|
||||
"date": "2026-08-16",
|
||||
"unreleased": false,
|
||||
"compareUrl": "https://github.com/Hmbown/CodeWhale/compare/v0.9.7...v0.9.8",
|
||||
"sections": [
|
||||
{
|
||||
"heading": "Fixed",
|
||||
"items": [
|
||||
"sudo (and su/setuid helpers) work again for wheel-group administrators who want Codewhale to be able to escalate: the Linux startup hardening's irreversible PR_SET_NO_NEW_PRIVS flag — inherited by every child process — is now skippable with CODEWHALE_NO_NEW_PRIVS=0 (#5413). The flag stays on by default; the no-ptrace and no-core-dump measures are never skipped.",
|
||||
"Abort-class process deaths no longer poison the terminal (#5424). A stack overflow, allocation failure, or double panic skips the panic hook and every cleanup guard, which is how a v0.9.7 user's mid-turn exit left mouse capture leaking SGR sequences into their shell. An async-signal-safe handler now restores the terminal modes and appends a one-line cause marker to ~/.codewhale/crashes/last-fatal-signal.log before re-raising, keeping the honest 128+signal wait status. A…"
|
||||
],
|
||||
"itemCount": 2
|
||||
},
|
||||
{
|
||||
"heading": "Changed",
|
||||
"items": [
|
||||
"Prompt-cache prefix is pinned for the session. The tool loop no longer recomposes the system prompt from disk on every model step, so an agent writing a file no longer busts the provider KV prefix cache mid-turn. The system prompt and tool catalog are re-composed only on a declared header change (/model, mode, goal, session resume), which re-pins under a logged reason; an undeclared change is reported as drift and the original pin is kept instead of silently becoming the new…",
|
||||
"Plugin compatibility is now per-component. A reviewed, trusted, enabled bundle that mixes Skills or MCP with unsupported commands, agents, hooks, LSP, native, filesystem-roots, or lifecycle-mutation declarations keeps the supported adapters active and reports the rest as inactive (full / partial / unsupported). All-unsupported bundles still cannot be enabled. The capability hash is now v2 and binds this build's activation policy, so older v1 receipts and any later…"
|
||||
],
|
||||
"itemCount": 2
|
||||
},
|
||||
{
|
||||
"heading": "Added",
|
||||
"items": [
|
||||
"Opt-in multiline composer mode (composer_multiline_mode = true) makes Enter insert a newline and Shift+Enter send. Alt+Enter, Ctrl+J, and supported Ctrl+Enter/Cmd+Enter behavior stays unchanged (#5345, @AiurArtanis).",
|
||||
"/plugin marketplace add|list|show|remove|install completes the federated marketplace journey (#5311). add reads one LOCAL catalog document in the real published schemas (Kimi, Claude, Codex, or Codewhale native) — no network, regular files only — and persists it beside the plugin state with the same hardened, fail-closed store. list/show render every candidate with per-entry diagnostics, display-only tiers, and honest install plans that say when Codewhale cannot fetch a…",
|
||||
"/rc attach now includes an observed owner/name git remote when the folder has a GitHub, CNB, or Gitee origin, so CWC can label the paired session. Paths stay off the wire. Reconnect after both this client and CWC #202 land to backfill existing empty rows.",
|
||||
"The local Runtime web client keeps the thread rail clipped so New thread cannot paint over the session fact chips. Chips wrap instead of sliding under the rail.",
|
||||
"Z.ai GLM-5.3 is live on the Coding Plan and is now the default direct Z.ai model: DEFAULT_ZAI_MODEL resolves to GLM-5.3 in both codewhale-tui and codewhale-config, and it is the first /model row after /provider zai. Explicit GLM-5.2 selections (model = \"GLM-5.2\" and its glm-5.2 aliases) keep their own id — only the default moved. Limits and reasoning options still inherit from GLM-5.2 until Z.ai publishes distinct 5.3 numbers. No USD price is claimed. A live call can still…",
|
||||
"The TUI transcript renders Markdown blockquotes (> lines) with a quote rail — nested quotes, inline bold/code/links, wrapped continuation rows, and selection copy that keeps the quote text and skips the rail chrome.",
|
||||
"Sub-agent details show the resolved model, fleet role, and type. Labels use the session/role name instead of a generic Agent N (#5371, #5287).",
|
||||
"Documented catalogue output ceilings (including DeepSeek V4's 384K maximum) remain authoritative bounds, while ordinary requests start at a safe 64K cap and explicit overrides can raise it within the resolved route window. A clean output-limit stop continues the turn instead of killing it (#5373, #5516, #5518). Thanks @sfdzhmr and @hxfhd for the route evidence.",
|
||||
"Ollama Cloud is a first-class hosted provider (/provider ollama-cloud) on the official OpenAI-compatible https://ollama.com/v1 route. Local Ollama stays keyless. The exact released ollama + Cloud URL tuple keeps a bounded compatibility path across saved sessions, Fleet, and nested subagents; neighboring remotes stay custom and fail closed against inherited official credentials.",
|
||||
"Homebrew ships a codewhale formula. brew tap Hmbown/deepseek-tui && brew install codewhale is the install path; brew upgrade codewhale updates it. The legacy deepseek-tui formula remains a deprecated alias for one overlap release.",
|
||||
"/title [name|off] sets a per-session tab/window title, shown as [title] … in front of the terminal window title (Codewhale / reasoning… / using tool… / done). The title config key supplies the default (/config title … --save persists it); multi-window workflows can tell parallel sessions apart at a glance. /title is independent of /rename, which keeps naming the session in the picker and composer. Control, bidi, and zero-width format characters are stripped from both the…",
|
||||
"Eden AI is a named OpenAI-compatible Chat Completions provider (edenai, aliases eden-ai / eden_ai) with EDENAI_API_KEY, global and EU base-URL overrides, a live provider-scoped model catalog, and deepseek/deepseek-v4-pro as the verified default. Generic reasoning fields stay omitted because Eden AI routes multiple upstream model families (#5422, Kai Nacke)."
|
||||
],
|
||||
"itemCount": 20
|
||||
},
|
||||
{
|
||||
"heading": "Fixed",
|
||||
"items": [
|
||||
"Selecting the google provider kind resolved to the antigravity TUI identity (and vice versa): the agy provider entry was inserted at different positions in the config-level enum and the TUI's discriminant-indexed lookup table. The table now matches the enum, so provider pickers, sorted display, and kind round-trips are correct.",
|
||||
"The provider picker's key-entry stage accepted typed input and pastes for OAuth-only providers after antigravity declared OAuth acquisition; those gates now key off the OAuth acquisition class instead of a hard-coded provider identity.",
|
||||
"The webhook hook sink no longer panics when its HTTP client fails to build; it falls back to a default client (#5381, EvanProgramming).",
|
||||
"Session-index JSONL writes are serialized behind a process-wide mutex so concurrent state stores cannot drop an append during compaction (#5382, EvanProgramming; complements the cross-process file lock).",
|
||||
"A billed max_tokens stop followed by a transport error fails the turn instead of continuing into a second request. A clean output-limit stop still continues. Mid-size context windows keep the ordinary 65K internal reservation so compaction does not collapse to the 1K headroom floor when the catalogue documents a matching output ceiling.",
|
||||
"Thinking cycle, /effort, and Settings now walk each model's real ladder instead of the DeepSeek off/high/max shortcut. Grok 4.6 is auto/low/medium/high/xhigh (cannot disable); Grok 4.5 is auto/low/medium/high; first-party DeepSeek keeps a documented low tier. /effort persists and receipts through the same path as Ctrl+T.",
|
||||
"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) is a separate provider: consent-gated read-only import of the official CLI's login, then a text-only cloud-code stream (/v1internal:streamGenerateContent). Tools, images, and unknown SSE shapes fail closed. Gemini 3.7 Flash is not advertised until a live turn succeeds on this…",
|
||||
"DeepSeek Flash SSE on macOS no longer turns mid-character HTTP/2 flushes into U+FFFD replacement characters (#5374). Invalid UTF-8 fails the line instead of using lossy decode.",
|
||||
"[workshop] read_result_max_bytes and tool_result_max_bytes raise the model-visible read/tool-result floor; they never lower the compile-time defaults and cap at 2MiB (#5367).",
|
||||
"Fireworks and OpenCode Zen DeepSeek V4 Flash/Pro keep a bundled family rate when the live control plane is down, so session cost is not stuck on unverified_live_pricing (#5241). kimi-k3 stays unpriced until a published rate exists.",
|
||||
"Provider setup ships a typed beginner template catalog (#5350). OpenCode Zen/Go stay first-class key-only rows with their documented hosts and curated models. SenseNova fills a named OpenAI-compatible table on the published https://token.sensenova.cn/v1 host (S or /provider setup sensenova). Agnes is listed as unpublished because this repository has no published URL. /provider P and Settings → beginner templates open the list; T tests /models and refreshes status without…",
|
||||
"Privileged release workflows no longer restore rust-cache, sccache, or npm caches after checking out a caller-supplied SHA (CodeQL cache-poisoning #88–#106). Catalog drift no longer prints raw bundled/upstream blobs (#107)."
|
||||
],
|
||||
"itemCount": 24
|
||||
},
|
||||
{
|
||||
"heading": "Removed",
|
||||
"items": [
|
||||
"The source-structure budget ratchet (CI step, checker, baseline JSON). It measured line counts, not quality: every legitimate feature required a hand-edited ceiling and the accompanying \"review\" was self-review, so it bought ceremony, not protection. Behavior-measuring gates (dead-code, runtime-contract, persistence-backlog) stay enforced.",
|
||||
"DeepSeek can reuse a key already stored by official DeepSeek Harness (dsh) after codewhale auth external-consent --provider deepseek --mode read-only. Codewhale reads only DEEPSEEK_API_KEY from the exact granted $DSH_HOME/.credentials.yaml and never writes or refreshes that file.",
|
||||
"The TUI markdown parser now honors CommonMark fence-length rules: a opener is not closed by a shorter line, so >` content inside a longer fence stays literal code instead of escaping into a quote.",
|
||||
"Sub-agents finalize when the parent session id changes, so a closed session cannot block new children as a live owner (#5372).",
|
||||
"Child spawn-route receipts stay live and usage is deduped by response (#5366).",
|
||||
"Doctor keeps persisted setup readiness across first-run / update checkpoints (#5340).",
|
||||
"Approval default selection is applied and explained; agents are told when approvals are disabled (#5293).",
|
||||
"A /models 2xx probe is a connection check, not model readiness.",
|
||||
"Site layout uses one container, the ticker no longer implies false provider readiness, and install links stay in the active locale."
|
||||
],
|
||||
"itemCount": 9
|
||||
},
|
||||
{
|
||||
"heading": "Contributors",
|
||||
"items": [
|
||||
"EvanProgramming (@EvanProgramming) — webhook client panic fallback (#5381); session-index JSONL mutex (#5382).",
|
||||
"Lstarsky0 (@Lstarsky0) — session peek hides internal runtime events (#5376); thinking-ladder test re-pin (#5378); provider-count follow-ups (#5383/#5384); macOS agy fixture canonicalization (#5392); zh-Hans 宪章 terminology (#5397); regenerated website facts harvested and corrected from #5398.",
|
||||
"Matt Van Horn (@mvanhorn) — read-only models settings preview on the website (#5411, fixes #5370).",
|
||||
"Nhat Bui (@buiducnhat) — canonical ultra reasoning effort mapped across provider effort tables (#5409); session titles truncated by character count, not byte offset (#5415).",
|
||||
"Sh1Zuku (@SparkofSpike) — /title and the session name in the terminal tab/window title, plus the mid-turn title deadlock fix (#5419).",
|
||||
"Kai Nacke (@redstar) — Eden AI provider registration, aliases, EDENAI_API_KEY, and the global/EU endpoints (#5422).",
|
||||
"Isabel Wu (@wuisabel-gif) — background verifier test isolated from rustup and $HOME (#5423, slice of #5056)."
|
||||
],
|
||||
"itemCount": 7
|
||||
}
|
||||
]
|
||||
}
|
||||
];
|
||||
@@ -27,10 +27,10 @@ export interface RepoFacts {
|
||||
}
|
||||
|
||||
export const FACTS: RepoFacts = {
|
||||
"generatedAt": "2026-09-07T05:01:30.152Z",
|
||||
"generatedAt": "2026-09-07T14:16:12.671Z",
|
||||
"sourceRevision": null,
|
||||
"sourceCommittedAt": null,
|
||||
"version": "0.9.12",
|
||||
"version": "0.9.13",
|
||||
"crates": [
|
||||
"agent",
|
||||
"app-server",
|
||||
|
||||
@@ -38,7 +38,7 @@ export const docsTrust: DocsTrustDict = {
|
||||
"The repository also contains a seccomp module and a future Windows helper contract. Neither is wired into child-command launch, so Codewhale does not advertise them: source-only sandbox code is not evidence that a command was restricted.",
|
||||
telemetryTitle: "Telemetry, exactly",
|
||||
telemetryLead:
|
||||
"Codewhale 0.9.12 counts anonymous usage by default and tells you so at first launch; the earlier 0.9.11 release asked first. Turning it off is a saved choice that later versions keep, and an opt-out recorded under the earlier opt-in policy stays off. Showing the notice never records any acceptance on your behalf; Codewhale and PostHog are named as the processors.",
|
||||
"Codewhale 0.9.13 counts anonymous usage by default and tells you so at first launch; the earlier 0.9.11 release asked first. Turning it off is a saved choice that later versions keep, and an opt-out recorded under the earlier opt-in policy stays off. Showing the notice never records any acceptance on your behalf; Codewhale and PostHog are named as the processors.",
|
||||
telemetry: [
|
||||
["Never collected", "Conversations, code, prompts, files, file/repo/branch names, model content, credentials, or any per-turn or per-tool timeline."],
|
||||
["Sent while on", "Version and platform classes, session duration and outcome, feature and error counters, closed enums, and a random install id that rotates every 90 days."],
|
||||
|
||||
@@ -36,7 +36,7 @@ export const docsTrust: DocsTrustDict = {
|
||||
sandboxNote:
|
||||
"仓库中还有一个 seccomp 模块和一份未来的 Windows 辅助程序契约。两者都没有接入子命令启动,所以 Codewhale 不会宣传它们:只存在于源码中的沙箱代码不能证明某条命令受到了限制。",
|
||||
telemetryTitle: "遥测,精确到每一项",
|
||||
telemetryLead: "Codewhale 0.9.12 默认统计匿名使用量,并在首次启动时告知你;早先的 0.9.11 版本会先询问。关闭是会被后续版本保留的选择,在早先的自愿开启政策下记录的关闭也始终有效。显示告知绝不会代你记录任何同意;处理方为 Codewhale 和 PostHog。",
|
||||
telemetryLead: "Codewhale 0.9.13 默认统计匿名使用量,并在首次启动时告知你;早先的 0.9.11 版本会先询问。关闭是会被后续版本保留的选择,在早先的自愿开启政策下记录的关闭也始终有效。显示告知绝不会代你记录任何同意;处理方为 Codewhale 和 PostHog。",
|
||||
telemetry: [
|
||||
["永远不收集", "对话、代码、prompt、文件、文件/仓库/分支名、模型内容、凭据,以及任何逐轮或逐工具的时间线。"],
|
||||
["开启时发送", "版本与平台类别、会话时长与结果、功能与错误计数、封闭枚举,以及一个每 90 天轮换的随机安装 id。"],
|
||||
|
||||
@@ -20,24 +20,8 @@
|
||||
|
||||
/** Contributors whose PRs were merged or harvested into this release. */
|
||||
export const RELEASE_CONTRIBUTORS: string[] = [
|
||||
"@h3c-hexin",
|
||||
"@qiuYliangM",
|
||||
"@wuisabel-gif",
|
||||
"@aboimpinto",
|
||||
"@musichen",
|
||||
"@gaord",
|
||||
"@SparkofSpike",
|
||||
"@M-Maciej",
|
||||
"@serephus",
|
||||
"@whp233",
|
||||
"@Gabriel-Degret",
|
||||
"@huangxianzhan",
|
||||
"@zhuowp",
|
||||
"@AdityaVG13",
|
||||
"@nightt5879",
|
||||
"@Lstarsky0",
|
||||
"@yiheng-kkk",
|
||||
"@Lfanxing",
|
||||
"@goransh-walia",
|
||||
];
|
||||
|
||||
/**
|
||||
@@ -45,8 +29,8 @@ export const RELEASE_CONTRIBUTORS: string[] = [
|
||||
* Each name points at a landed change in the 0.9.12 changelog.
|
||||
*/
|
||||
export const RELEASE_HELPERS: string[] = [
|
||||
"@slowly247",
|
||||
"@ronohara",
|
||||
"@nsfoxer",
|
||||
"@Nefelibata1024",
|
||||
"@Gabriel-Degret",
|
||||
"@Lujc0523",
|
||||
"@senka9h",
|
||||
];
|
||||
Reference in new issue
Block a user