chore(release): prepare v0.9.3

Bump the Rust workspace, internal dependency pins, npm wrapper, lockfiles, public candidate facts, remote smoke default, generated site facts, and packaged changelog together.\n\nAdd dated release notes for DeepSeek V4 Flash Responses support, the canonical action cutover, safety and durability hardening, and contributor credit. Public published-release facts remain pinned to v0.9.2 until v0.9.3 assets actually exist.
This commit is contained in:
Hmbown
2026-07-31 02:28:28 -07:00
parent 888a00bb2e
commit 2583b0710c
21 changed files with 260 additions and 141 deletions

View File

@@ -7,6 +7,94 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
## [Unreleased]
## [0.9.3] - 2026-07-31
DeepSeek V4 Flash is now a first-class Codewhale route, and the agent-facing
tool surface has been reduced to the canonical action tools that current
models actually need. This release also hardens credential, authorization,
durability, compaction, and macOS File Provider boundaries while deleting
stale runtime and dependency surface.
### Added
- Native `deepseek-v4-flash` support over DeepSeek's Responses API, including
stateless reasoning-item replay, semantic SSE terminal events, structured
function calls and outputs, `apply_patch`, and model-aware wire-format
selection. Exact current Flash IDs use Responses; future direct
`deepseek-vN-*` model IDs inherit that route conservatively, while custom
DeepSeek-compatible endpoints retain Chat Completions unless configured
otherwise.
- A pipe-only `codewhale auth print-api-key` handoff for explicitly selected
providers. It shares Codewhale's home-scoped credential authority, refuses
terminal output, and prevents sentinel placeholders from becoming live
credentials.
- Per-turn `max_tool_calls` enforcement at the engine admission gate, plus a
named-file write scope with a separate read seam. The runtime now rejects
over-budget calls before execution and keeps the operator's write boundary
explicit (#4415).
- Runtime-contract, source-structure, and persistence-backlog ratchets that
name drift instead of allowing large ownership surfaces to grow silently
(#3921, #4785).
### Changed
- Model-visible built-ins now use the canonical `Bash`, `File`, and `Run`
action schemas. `apply_patch` remains available as the one direct custom
edit tool supported by DeepSeek Responses. The bundled stop-ship workflow,
Fleet fixtures, shell shortcut, and engine tests use the same canonical
vocabulary.
- Canonical `File { action: "write" }` requests now pass through the same
semantic repo-law checks as the former write path. Approval, Full Access,
and workflow execution cannot bypass the repository safety floor by choosing
the canonical schema.
- Codewhale home resolution is shared across the CLI, TUI, state, and secret
stores. `doctor` is offline by default, distinguishes credential source from
availability, and reports one consistent path snapshot.
- Durable runtime event writes are serialized across simultaneous processes,
blocking history waits move off async workers, and provider quota exhaustion
remains typed and retryable through compaction (#4522).
- Skill discovery caches the merged catalog behind watched-mtime validation;
large skill, engine, subagent, UI, and ambient-ocean test blocks now live in
owned test seams.
- Reasoning summaries stay in the user's language, complete jellyfish
silhouettes relocate around transcript text, and cached ocean frames include
their palette identity (#4807).
- The authorization-order contract now documents and tests how modes, hooks,
permission rules, safety floors, repo law, approvals, and sandboxing compose
(PR #4980).
### Fixed
- macOS sandbox extensions cover CloudStorage/File Provider workspaces without
broadening unrelated paths; thanks @Watcher24 for the #4085 report and
reproduction.
- Foreground shell state detaches before steering, so an interrupted command
cannot keep owning the composer (PR #4979).
- MCP application-level failures and malformed error envelopes fail closed
instead of looking like successful tool output.
- Optional PDF failures are truthful and PDF classification no longer misses
supported inputs.
- Bracketed-paste contents are redacted from traces, and credential diagnostics
never treat placeholder sentinels as usable keys.
### Removed
- The legacy callable aliases `exec_shell`, `run_shell_command`, `read_file`,
`write_file`, `list_dir`, `grep_files`, `file_search`, and the duplicate
Work/RLM registrations. Historical transcript and policy semantics remain
readable, but new model turns receive only the canonical action surface.
- The bundled PDF parser dependency chain, replacing it with the smaller
optional extraction boundary tracked by #4382.
### Contributors
- [Turisla](https://github.com/greyfreedom) (`@greyfreedom`) documented and
locked the authorization-order contract in PR #4980.
- [Nightt](https://github.com/nightt5879) (`@nightt5879`) fixed foreground
shell detachment before steering in PR #4979.
- [Watcher24](https://github.com/Watcher24) (`@Watcher24`) provided the macOS
File Provider report and reproduction for #4085.
## [0.9.2] - 2026-07-29
This is the Codewhale v0.9.2 source candidate. It is not a published release
@@ -4578,7 +4666,8 @@ overflow report and `/theme` picker edge-wrapping patch in #1814.
Older releases (v0.8.39 and earlier) are archived in [docs/CHANGELOG_ARCHIVE.md](docs/CHANGELOG_ARCHIVE.md).
[Unreleased]: https://github.com/Hmbown/CodeWhale/compare/v0.9.1...HEAD
[Unreleased]: https://github.com/Hmbown/CodeWhale/compare/v0.9.3...HEAD
[0.9.3]: https://github.com/Hmbown/CodeWhale/compare/v0.9.2...v0.9.3
[0.9.2]: https://github.com/Hmbown/CodeWhale/compare/v0.9.1...v0.9.2
[0.9.1]: https://github.com/Hmbown/CodeWhale/compare/v0.9.0...v0.9.1
[0.8.68]: https://github.com/Hmbown/CodeWhale/compare/v0.8.67...v0.8.68

38
Cargo.lock generated
View File

@@ -827,7 +827,7 @@ checksum = "e9b18233253483ce2f65329a24072ec414db782531bdbb7d0bbc4bd2ce6b7e21"
[[package]]
name = "codewhale-agent"
version = "0.9.2"
version = "0.9.3"
dependencies = [
"codewhale-config",
"serde",
@@ -835,7 +835,7 @@ dependencies = [
[[package]]
name = "codewhale-app-server"
version = "0.9.2"
version = "0.9.3"
dependencies = [
"anyhow",
"axum",
@@ -863,11 +863,11 @@ dependencies = [
[[package]]
name = "codewhale-build-support"
version = "0.9.2"
version = "0.9.3"
[[package]]
name = "codewhale-cli"
version = "0.9.2"
version = "0.9.3"
dependencies = [
"anyhow",
"chrono",
@@ -903,7 +903,7 @@ dependencies = [
[[package]]
name = "codewhale-config"
version = "0.9.2"
version = "0.9.3"
dependencies = [
"anyhow",
"codewhale-execpolicy",
@@ -923,7 +923,7 @@ dependencies = [
[[package]]
name = "codewhale-core"
version = "0.9.2"
version = "0.9.3"
dependencies = [
"anyhow",
"async-trait",
@@ -944,7 +944,7 @@ dependencies = [
[[package]]
name = "codewhale-execpolicy"
version = "0.9.2"
version = "0.9.3"
dependencies = [
"anyhow",
"codewhale-protocol",
@@ -953,7 +953,7 @@ dependencies = [
[[package]]
name = "codewhale-hooks"
version = "0.9.2"
version = "0.9.3"
dependencies = [
"anyhow",
"async-trait",
@@ -968,7 +968,7 @@ dependencies = [
[[package]]
name = "codewhale-lane"
version = "0.9.2"
version = "0.9.3"
dependencies = [
"anyhow",
"chrono",
@@ -983,7 +983,7 @@ dependencies = [
[[package]]
name = "codewhale-mcp"
version = "0.9.2"
version = "0.9.3"
dependencies = [
"anyhow",
"serde",
@@ -993,14 +993,14 @@ dependencies = [
[[package]]
name = "codewhale-paths"
version = "0.9.2"
version = "0.9.3"
dependencies = [
"dirs",
]
[[package]]
name = "codewhale-protocol"
version = "0.9.2"
version = "0.9.3"
dependencies = [
"chrono",
"serde",
@@ -1010,7 +1010,7 @@ dependencies = [
[[package]]
name = "codewhale-release"
version = "0.9.2"
version = "0.9.3"
dependencies = [
"anyhow",
"reqwest 0.13.4",
@@ -1023,7 +1023,7 @@ dependencies = [
[[package]]
name = "codewhale-secrets"
version = "0.9.2"
version = "0.9.3"
dependencies = [
"codewhale-paths",
"keyring",
@@ -1036,7 +1036,7 @@ dependencies = [
[[package]]
name = "codewhale-state"
version = "0.9.2"
version = "0.9.3"
dependencies = [
"anyhow",
"chrono",
@@ -1051,7 +1051,7 @@ dependencies = [
[[package]]
name = "codewhale-tools"
version = "0.9.2"
version = "0.9.3"
dependencies = [
"anyhow",
"async-trait",
@@ -1065,7 +1065,7 @@ dependencies = [
[[package]]
name = "codewhale-tui"
version = "0.9.2"
version = "0.9.3"
dependencies = [
"ahash",
"anyhow",
@@ -1158,7 +1158,7 @@ dependencies = [
[[package]]
name = "codewhale-workflow"
version = "0.9.2"
version = "0.9.3"
dependencies = [
"serde",
"serde_json",
@@ -1170,7 +1170,7 @@ dependencies = [
[[package]]
name = "codewhale-workflow-js"
version = "0.9.2"
version = "0.9.3"
dependencies = [
"async-trait",
"jsonschema 0.48.5",

View File

@@ -24,7 +24,7 @@ default-members = ["crates/cli", "crates/app-server", "crates/tui"]
resolver = "2"
[workspace.package]
version = "0.9.2"
version = "0.9.3"
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

View File

@@ -8,5 +8,5 @@ repository.workspace = true
description = "Model/provider registry and fallback strategy for Codewhale"
[dependencies]
codewhale-config = { path = "../config", version = "0.9.2" }
codewhale-config = { path = "../config", version = "0.9.3" }
serde.workspace = true

View File

@@ -12,16 +12,16 @@ autobins = false
[dependencies]
anyhow.workspace = true
axum.workspace = true
codewhale-agent = { path = "../agent", version = "0.9.2" }
codewhale-config = { path = "../config", version = "0.9.2" }
codewhale-core = { path = "../core", version = "0.9.2" }
codewhale-execpolicy = { path = "../execpolicy", version = "0.9.2" }
codewhale-hooks = { path = "../hooks", version = "0.9.2" }
codewhale-mcp = { path = "../mcp", version = "0.9.2" }
codewhale-protocol = { path = "../protocol", version = "0.9.2" }
codewhale-release = { path = "../release", version = "0.9.2" }
codewhale-state = { path = "../state", version = "0.9.2" }
codewhale-tools = { path = "../tools", version = "0.9.2" }
codewhale-agent = { path = "../agent", version = "0.9.3" }
codewhale-config = { path = "../config", version = "0.9.3" }
codewhale-core = { path = "../core", version = "0.9.3" }
codewhale-execpolicy = { path = "../execpolicy", version = "0.9.3" }
codewhale-hooks = { path = "../hooks", version = "0.9.3" }
codewhale-mcp = { path = "../mcp", version = "0.9.3" }
codewhale-protocol = { path = "../protocol", version = "0.9.3" }
codewhale-release = { path = "../release", version = "0.9.3" }
codewhale-state = { path = "../state", version = "0.9.3" }
codewhale-tools = { path = "../tools", version = "0.9.3" }
serde.workspace = true
serde_json.workspace = true
rustls.workspace = true

View File

@@ -20,17 +20,17 @@ path = "src/bin/codew.rs"
anyhow.workspace = true
clap.workspace = true
clap_complete.workspace = true
codewhale-agent = { path = "../agent", version = "0.9.2" }
codewhale-app-server = { path = "../app-server", version = "0.9.2" }
codewhale-config = { path = "../config", version = "0.9.2" }
codewhale-lane = { path = "../lane", version = "0.9.2" }
codewhale-workflow = { path = "../workflow", version = "0.9.2" }
codewhale-execpolicy = { path = "../execpolicy", version = "0.9.2" }
codewhale-mcp = { path = "../mcp", version = "0.9.2" }
codewhale-paths = { path = "../paths", version = "0.9.2" }
codewhale-release = { path = "../release", version = "0.9.2" }
codewhale-secrets = { path = "../secrets", version = "0.9.2" }
codewhale-state = { path = "../state", version = "0.9.2" }
codewhale-agent = { path = "../agent", version = "0.9.3" }
codewhale-app-server = { path = "../app-server", version = "0.9.3" }
codewhale-config = { path = "../config", version = "0.9.3" }
codewhale-lane = { path = "../lane", version = "0.9.3" }
codewhale-workflow = { path = "../workflow", version = "0.9.3" }
codewhale-execpolicy = { path = "../execpolicy", version = "0.9.3" }
codewhale-mcp = { path = "../mcp", version = "0.9.3" }
codewhale-paths = { path = "../paths", version = "0.9.3" }
codewhale-release = { path = "../release", version = "0.9.3" }
codewhale-secrets = { path = "../secrets", version = "0.9.3" }
codewhale-state = { path = "../state", version = "0.9.3" }
chrono.workspace = true
dirs.workspace = true
serde.workspace = true
@@ -46,7 +46,7 @@ tracing.workspace = true
zeroize = "1.8.2"
[build-dependencies]
codewhale-build-support = { path = "../build-support", version = "0.9.2" }
codewhale-build-support = { path = "../build-support", version = "0.9.3" }
# Parent-death cleanup for delegated server children (#3259): on Linux the
# dispatcher sets PR_SET_PDEATHSIG so the child is signalled if the dispatcher

View File

@@ -9,9 +9,9 @@ description = "Config schema and precedence model for Codewhale"
[dependencies]
anyhow.workspace = true
codewhale-execpolicy = { path = "../execpolicy", version = "0.9.2" }
codewhale-paths = { path = "../paths", version = "0.9.2" }
codewhale-secrets = { path = "../secrets", version = "0.9.2" }
codewhale-execpolicy = { path = "../execpolicy", version = "0.9.3" }
codewhale-paths = { path = "../paths", version = "0.9.3" }
codewhale-secrets = { path = "../secrets", version = "0.9.3" }
fd-lock = "4.0.4"
libc = "0.2"
serde.workspace = true

View File

@@ -10,14 +10,14 @@ description = "Core runtime boundaries for Codewhale"
[dependencies]
anyhow.workspace = true
chrono.workspace = true
codewhale-agent = { path = "../agent", version = "0.9.2" }
codewhale-config = { path = "../config", version = "0.9.2" }
codewhale-execpolicy = { path = "../execpolicy", version = "0.9.2" }
codewhale-hooks = { path = "../hooks", version = "0.9.2" }
codewhale-mcp = { path = "../mcp", version = "0.9.2" }
codewhale-protocol = { path = "../protocol", version = "0.9.2" }
codewhale-state = { path = "../state", version = "0.9.2" }
codewhale-tools = { path = "../tools", version = "0.9.2" }
codewhale-agent = { path = "../agent", version = "0.9.3" }
codewhale-config = { path = "../config", version = "0.9.3" }
codewhale-execpolicy = { path = "../execpolicy", version = "0.9.3" }
codewhale-hooks = { path = "../hooks", version = "0.9.3" }
codewhale-mcp = { path = "../mcp", version = "0.9.3" }
codewhale-protocol = { path = "../protocol", version = "0.9.3" }
codewhale-state = { path = "../state", version = "0.9.3" }
codewhale-tools = { path = "../tools", version = "0.9.3" }
serde_json.workspace = true
tokio = { workspace = true, features = ["time"] }
tracing.workspace = true

View File

@@ -9,5 +9,5 @@ description = "Execution policy and approval model for Codewhale"
[dependencies]
anyhow.workspace = true
codewhale-protocol = { path = "../protocol", version = "0.9.2" }
codewhale-protocol = { path = "../protocol", version = "0.9.3" }
serde.workspace = true

View File

@@ -11,8 +11,8 @@ description = "Hook dispatch and notifications support for Codewhale"
anyhow.workspace = true
async-trait.workspace = true
chrono.workspace = true
codewhale-protocol = { path = "../protocol", version = "0.9.2" }
codewhale-release = { path = "../release", version = "0.9.2" }
codewhale-protocol = { path = "../protocol", version = "0.9.3" }
codewhale-release = { path = "../release", version = "0.9.3" }
reqwest.workspace = true
serde.workspace = true
serde_json.workspace = true

View File

@@ -10,7 +10,7 @@ description = "Lane registry and Runtime backends for Codewhale workflow instanc
[dependencies]
anyhow.workspace = true
chrono.workspace = true
codewhale-config = { path = "../config", version = "0.9.2" }
codewhale-config = { path = "../config", version = "0.9.3" }
fd-lock = "4.0.4"
serde.workspace = true
serde_json.workspace = true

View File

@@ -8,7 +8,7 @@ repository.workspace = true
description = "Secret storage backends for Codewhale, with OS keyring and file fallback"
[dependencies]
codewhale-paths = { path = "../paths", version = "0.9.2" }
codewhale-paths = { path = "../paths", version = "0.9.3" }
serde = { workspace = true }
serde_json = { workspace = true }
tempfile.workspace = true

View File

@@ -10,8 +10,8 @@ description = "Session/thread persistence and recovery model for Codewhale"
[dependencies]
anyhow.workspace = true
chrono.workspace = true
codewhale-paths = { path = "../paths", version = "0.9.2" }
codewhale-protocol = { path = "../protocol", version = "0.9.2" }
codewhale-paths = { path = "../paths", version = "0.9.3" }
codewhale-protocol = { path = "../protocol", version = "0.9.3" }
fd-lock = "4.0.4"
rusqlite.workspace = true
serde.workspace = true

View File

@@ -10,7 +10,7 @@ description = "Tool invocation lifecycle, schema validation, and scheduler paral
[dependencies]
anyhow.workspace = true
async-trait.workspace = true
codewhale-protocol = { path = "../protocol", version = "0.9.2" }
codewhale-protocol = { path = "../protocol", version = "0.9.3" }
serde.workspace = true
serde_json.workspace = true
thiserror.workspace = true

View File

@@ -7,6 +7,94 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
## [Unreleased]
## [0.9.3] - 2026-07-31
DeepSeek V4 Flash is now a first-class Codewhale route, and the agent-facing
tool surface has been reduced to the canonical action tools that current
models actually need. This release also hardens credential, authorization,
durability, compaction, and macOS File Provider boundaries while deleting
stale runtime and dependency surface.
### Added
- Native `deepseek-v4-flash` support over DeepSeek's Responses API, including
stateless reasoning-item replay, semantic SSE terminal events, structured
function calls and outputs, `apply_patch`, and model-aware wire-format
selection. Exact current Flash IDs use Responses; future direct
`deepseek-vN-*` model IDs inherit that route conservatively, while custom
DeepSeek-compatible endpoints retain Chat Completions unless configured
otherwise.
- A pipe-only `codewhale auth print-api-key` handoff for explicitly selected
providers. It shares Codewhale's home-scoped credential authority, refuses
terminal output, and prevents sentinel placeholders from becoming live
credentials.
- Per-turn `max_tool_calls` enforcement at the engine admission gate, plus a
named-file write scope with a separate read seam. The runtime now rejects
over-budget calls before execution and keeps the operator's write boundary
explicit (#4415).
- Runtime-contract, source-structure, and persistence-backlog ratchets that
name drift instead of allowing large ownership surfaces to grow silently
(#3921, #4785).
### Changed
- Model-visible built-ins now use the canonical `Bash`, `File`, and `Run`
action schemas. `apply_patch` remains available as the one direct custom
edit tool supported by DeepSeek Responses. The bundled stop-ship workflow,
Fleet fixtures, shell shortcut, and engine tests use the same canonical
vocabulary.
- Canonical `File { action: "write" }` requests now pass through the same
semantic repo-law checks as the former write path. Approval, Full Access,
and workflow execution cannot bypass the repository safety floor by choosing
the canonical schema.
- Codewhale home resolution is shared across the CLI, TUI, state, and secret
stores. `doctor` is offline by default, distinguishes credential source from
availability, and reports one consistent path snapshot.
- Durable runtime event writes are serialized across simultaneous processes,
blocking history waits move off async workers, and provider quota exhaustion
remains typed and retryable through compaction (#4522).
- Skill discovery caches the merged catalog behind watched-mtime validation;
large skill, engine, subagent, UI, and ambient-ocean test blocks now live in
owned test seams.
- Reasoning summaries stay in the user's language, complete jellyfish
silhouettes relocate around transcript text, and cached ocean frames include
their palette identity (#4807).
- The authorization-order contract now documents and tests how modes, hooks,
permission rules, safety floors, repo law, approvals, and sandboxing compose
(PR #4980).
### Fixed
- macOS sandbox extensions cover CloudStorage/File Provider workspaces without
broadening unrelated paths; thanks @Watcher24 for the #4085 report and
reproduction.
- Foreground shell state detaches before steering, so an interrupted command
cannot keep owning the composer (PR #4979).
- MCP application-level failures and malformed error envelopes fail closed
instead of looking like successful tool output.
- Optional PDF failures are truthful and PDF classification no longer misses
supported inputs.
- Bracketed-paste contents are redacted from traces, and credential diagnostics
never treat placeholder sentinels as usable keys.
### Removed
- The legacy callable aliases `exec_shell`, `run_shell_command`, `read_file`,
`write_file`, `list_dir`, `grep_files`, `file_search`, and the duplicate
Work/RLM registrations. Historical transcript and policy semantics remain
readable, but new model turns receive only the canonical action surface.
- The bundled PDF parser dependency chain, replacing it with the smaller
optional extraction boundary tracked by #4382.
### Contributors
- [Turisla](https://github.com/greyfreedom) (`@greyfreedom`) documented and
locked the authorization-order contract in PR #4980.
- [Nightt](https://github.com/nightt5879) (`@nightt5879`) fixed foreground
shell detachment before steering in PR #4979.
- [Watcher24](https://github.com/Watcher24) (`@Watcher24`) provided the macOS
File Provider report and reproduction for #4085.
## [0.9.2] - 2026-07-29
This is the Codewhale v0.9.2 source candidate. It is not a published release
@@ -2952,64 +3040,6 @@ folds in several community contributions.
(#3020).
## [0.8.57] - 2026-06-10
### Added
- **Turns now survive system sleep.** When the host suspends mid-stream, the
connection used to die on wake with `Stream read error: error decoding
response body` and the turn was lost (#2990). The engine now stamps stream
progress with both monotonic and wall-clock time; a large divergence on a
stream error identifies a sleep/wake cycle, and the request is silently
re-issued (up to the existing 3-retry budget) instead of failing the turn.
- **One-command release prep.** `./scripts/release/prepare-release.sh X.Y.Z`
bumps the workspace version, every internal crate dependency pin, the npm
wrapper, and the README install-tag examples, refreshes `Cargo.lock`,
regenerates the embedded TUI changelog slice and web facts, and runs
`check-versions.sh` — the v0.8.56 release needed nine follow-up commits for
exactly these sync points.
- `.github/CODEOWNERS` and `.github/dependabot.yml` (weekly cargo +
github-actions updates, monthly npm for `web/`).
### Changed
- **The changelog went on a diet.** Root `CHANGELOG.md` now carries recent
releases (v0.8.40+); older entries moved to `docs/CHANGELOG_ARCHIVE.md`.
`crates/tui/CHANGELOG.md` — embedded into every binary for `/change` — is a
generated 15-release slice (`scripts/sync-changelog.sh`), no longer a
357 KB manual byte-for-byte copy (~300 KB smaller binaries).
- GitHub Release bodies are generated from the tagged version's changelog
section (`scripts/release/generate-release-body.sh`) instead of a
hardcoded workflow blob with a hand-pasted contributor list.
- `check-versions.sh` now also gates `web/lib/facts.generated.ts` and the
README install-tag examples; the CNB mirror pipeline validates the pushed
tag against `Cargo.toml` before generating release notes.
- Docs reorganized: internal design notes moved under `docs/rfcs/`; stale
internal docs (old audits, handoffs, region-specific VM notes) removed.
- Agent-facing polish: the system prompt environment block reports
`codewhale_version` (was `deepseek_version`), the legacy
`.deepseek/instructions.md` path is no longer advertised in the prompt
(still honored for back-compat), and oversized instruction files are
truncated with an explicit `[…truncated: N bytes omitted]` marker instead
of a bare ellipsis.
### Fixed
- **Docker images build again.** The release `docker` job failed for v0.8.56
because the Dockerfile still copied the pre-rebrand `deepseek` /
`deepseek-tui` binaries; they are now symlinks to the codewhale binaries
inside the image, so legacy container entrypoints keep working.
- `.devcontainer/devcontainer.json` used the pre-rebrand container name,
mount path, and `deepseek` remote user.
- Stale `--bin deepseek` examples, `DeepSeek-TUI` strings in `/change`
output, and pre-rebrand doc comments.
### Removed
- Unused dependencies: `tracing-appender` and `zeroize` (TUI crate),
`rustls` (release crate); the orphaned `vendor/schemaui-0.12.0` lockfile
leftover and a machine-specific one-off `scripts/verify_task.sh`.
---
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).

View File

@@ -23,16 +23,16 @@ path = "src/main.rs"
[dependencies]
ahash = "0.8"
anyhow.workspace = true
codewhale-config = { path = "../config", version = "0.9.2" }
codewhale-execpolicy = { path = "../execpolicy", version = "0.9.2" }
codewhale-lane = { path = "../lane", version = "0.9.2" }
codewhale-paths = { path = "../paths", version = "0.9.2" }
codewhale-protocol = { path = "../protocol", version = "0.9.2" }
codewhale-release = { path = "../release", version = "0.9.2" }
codewhale-secrets = { path = "../secrets", version = "0.9.2" }
codewhale-tools = { path = "../tools", version = "0.9.2" }
codewhale-workflow = { path = "../workflow", version = "0.9.2" }
codewhale-workflow-js = { path = "../workflow-js", version = "0.9.2" }
codewhale-config = { path = "../config", version = "0.9.3" }
codewhale-execpolicy = { path = "../execpolicy", version = "0.9.3" }
codewhale-lane = { path = "../lane", version = "0.9.3" }
codewhale-paths = { path = "../paths", version = "0.9.3" }
codewhale-protocol = { path = "../protocol", version = "0.9.3" }
codewhale-release = { path = "../release", version = "0.9.3" }
codewhale-secrets = { path = "../secrets", version = "0.9.3" }
codewhale-tools = { path = "../tools", version = "0.9.3" }
codewhale-workflow = { path = "../workflow", version = "0.9.3" }
codewhale-workflow-js = { path = "../workflow-js", version = "0.9.3" }
schemaui = { version = "0.12.0", default-features = false, optional = true }
async-stream = "0.3.6"
async-trait.workspace = true
@@ -97,7 +97,7 @@ shell-words = "1.1.1"
mimalloc.workspace = true
[build-dependencies]
codewhale-build-support = { path = "../build-support", version = "0.9.2" }
codewhale-build-support = { path = "../build-support", version = "0.9.3" }
[dev-dependencies]
cucumber = "0.23.0"

View File

@@ -14,9 +14,9 @@
"sources": ["Cargo.toml", "LICENSE", "README.md", "npm/codewhale/package.json", "docs/FLEET.md"]
},
"sourceCandidate": {
"version": "0.9.2",
"version": "0.9.3",
"providerCount": 36,
"toolCount": 70,
"toolCount": 67,
"sandboxBackends": [
"seatbelt (macOS, when available)",
"bubblewrap (Linux, opt-in when installed)"

View File

@@ -1,7 +1,7 @@
{
"name": "codewhale",
"version": "0.9.2",
"codewhaleBinaryVersion": "0.9.2",
"version": "0.9.3",
"codewhaleBinaryVersion": "0.9.3",
"description": "Terminal coding agent for supported hosted and local models. One runtime on your machine. Rust, MIT.",
"author": "Hmbown",
"license": "MIT",

2
package-lock.json generated
View File

@@ -1559,7 +1559,7 @@
}
},
"npm/codewhale": {
"version": "0.9.2",
"version": "0.9.3",
"funding": [
{
"type": "github",

View File

@@ -20,7 +20,7 @@
# Uses prebuilt release binaries instead of a Rust build.
set -euo pipefail
RELEASE_TAG="${RELEASE_TAG:-v0.9.2}"
RELEASE_TAG="${RELEASE_TAG:-v0.9.3}"
REPO_URL="${REPO_URL:-https://github.com/Hmbown/CodeWhale.git}"
REPO_BRANCH="${REPO_BRANCH:-main}"
SECRETS_FILE="${SECRETS_FILE:-/tmp/cw-secrets.env}"

View File

@@ -27,10 +27,10 @@ export interface RepoFacts {
}
export const FACTS: RepoFacts = {
"generatedAt": "2026-07-31T03:19:01.929Z",
"generatedAt": "2026-07-31T09:27:54.203Z",
"sourceRevision": null,
"sourceCommittedAt": null,
"version": "0.9.2",
"version": "0.9.3",
"crates": [
"agent",
"app-server",
@@ -240,7 +240,7 @@ export const FACTS: RepoFacts = {
],
"defaultModel": "deepseek-v4-pro",
"nodeEngines": ">=18",
"toolCount": 70,
"toolCount": 67,
"license": "MIT",
"latestPublishedRelease": {
"tag": "v0.9.2",