feat(cli): rename binaries to codewhale; keep deepseek aliases

Rename the canonical binaries:
  - `deepseek` → `codewhale` (CLI dispatcher)
  - `deepseek-tui` → `codewhale-tui` (TUI runtime)

Both legacy names continue to ship as tiny deprecation shims that print
a one-line warning to stderr and forward argv to the new binary. The
shims are produced by two new `[[bin]]` entries in `crates/cli/Cargo.toml`
and `crates/tui/Cargo.toml` pointing at small source files under
`src/bin/`. They will be removed in v0.9.0.

Touchpoints:
- Cargo bin entries + new shim source files.
- clap `name`/`bin_name`/usage strings flip to `codewhale`.
- Dispatcher's sibling-binary discovery looks for `codewhale-tui` and
  reports `codewhale` in its error/help prose. `DEEPSEEK_TUI_BIN` env
  var stays — env vars are explicitly anti-scope.
- `update.rs` now downloads `codewhale-*` assets and verifies them
  against `codewhale-artifacts-sha256.txt`. Legacy `deepseek-*` assets
  and `deepseek-artifacts-sha256.txt` are still produced by the release
  matrix so v0.8.40's `deepseek update` keeps working through one
  transition release.
- `ci.yml`, `nightly.yml`, `release.yml` updated to build/upload the new
  canonical binaries; `release.yml`'s matrix doubles to also ship the
  legacy shim binaries so v0.8.40 update clients land on the shim.
- `scripts/release/crates.sh` and `check-versions.sh` updated for the
  renamed crate names from R1.

Local gates green: `cargo check --workspace --all-targets --locked`,
`cargo fmt --all -- --check`, `cargo clippy --workspace --all-targets
--all-features --locked -- -D warnings`, `cargo test --workspace
--all-features --locked` (3226+ pass, 0 fail), and `cargo build
--release` produces all four binaries:
  - target/release/codewhale       (canonical dispatcher)
  - target/release/codewhale-tui   (canonical TUI)
  - target/release/deepseek        (legacy shim, forwards to codewhale)
  - target/release/deepseek-tui    (legacy shim, forwards to codewhale-tui)

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
Hunter Bown
2026-05-23 10:48:41 -05:00
parent c6d73d98de
commit 3efa6aad7d
11 changed files with 362 additions and 208 deletions
+7 -5
View File
@@ -6,8 +6,10 @@
# 1. No `crates/*/Cargo.toml` carries a literal `version = "x.y.z"`; every
# crate must inherit `version.workspace = true`.
# 2. `npm/deepseek-tui/package.json` `version` matches the workspace
# `version` in the root `Cargo.toml`.
# 3. Internal `deepseek-*` path dependency pins match the workspace version.
# `version` in the root `Cargo.toml`. (The npm wrapper directory is
# renamed to `npm/codewhale/` in a follow-up phase; this script will
# be updated then.)
# 3. Internal `codewhale-*` path dependency pins match the workspace version.
# 4. The TUI crate's packaged changelog copy matches root `CHANGELOG.md`.
# 5. The current release has a dated Keep a Changelog entry and compare link.
# 6. README contributor additions are mentioned in the current release entry.
@@ -38,11 +40,11 @@ fi
# 3) Internal path dependency pins.
internal_dep_drift="$(
grep -nE 'deepseek-[a-z-]+[[:space:]]*=[[:space:]]*\{[^}]*version[[:space:]]*=[[:space:]]*"' crates/*/Cargo.toml \
grep -nE 'codewhale-[a-z-]+[[:space:]]*=[[:space:]]*\{[^}]*version[[:space:]]*=[[:space:]]*"' crates/*/Cargo.toml \
| grep -v "version[[:space:]]*=[[:space:]]*\"${workspace_version}\"" || true
)"
if [[ -n "${internal_dep_drift}" ]]; then
echo "::error::Internal deepseek-* path dependency versions must match workspace version ${workspace_version}:" >&2
echo "::error::Internal codewhale-* path dependency versions must match workspace version ${workspace_version}:" >&2
echo "${internal_dep_drift}" >&2
fail=1
fi
@@ -125,7 +127,7 @@ fi
# 8) Cargo.lock in sync.
if ! cargo metadata --locked --format-version 1 --no-deps >/dev/null 2>&1; then
echo "::error::Cargo.lock is out of sync with the manifests. Run 'cargo update -p deepseek-tui' or 'cargo build' and commit the result." >&2
echo "::error::Cargo.lock is out of sync with the manifests. Run 'cargo update -p codewhale-tui' or 'cargo build' and commit the result." >&2
fail=1
fi
+15 -15
View File
@@ -1,19 +1,19 @@
#!/usr/bin/env bash
# Crates published for each DeepSeek TUI release, in dependency order.
# Crates published for each codewhale release, in dependency order.
release_crates=(
deepseek-secrets
deepseek-config
deepseek-protocol
deepseek-state
deepseek-agent
deepseek-execpolicy
deepseek-hooks
deepseek-mcp
deepseek-tools
deepseek-core
deepseek-app-server
deepseek-tui-core
deepseek-tui-cli
deepseek-tui
codewhale-secrets
codewhale-config
codewhale-protocol
codewhale-state
codewhale-agent
codewhale-execpolicy
codewhale-hooks
codewhale-mcp
codewhale-tools
codewhale-core
codewhale-app-server
codewhale-tui-core
codewhale-cli
codewhale-tui
)