Skip to content

v0.9.7

Latest

Choose a tag to compare

@github-actions github-actions released this 13 Aug 08:36
· 26 commits to main since this release
5e3ac84

Codewhale is the public product from Shannon Labs. The codewhale
command, npm package, and release-asset names remain lowercase technical
identifiers. The legacy npm package deepseek-tui is deprecated and
receives no further releases. Users coming from v0.8.x legacy deepseek /
deepseek-tui names should migrate with docs/REBRAND.md.

Install

Recommended — npm (one command, both entrypoints)

npm install -g codewhale

The wrapper downloads the matched codewhale and codew command assets
from this Release. Both contain the same compiled runtime.

Docker / GHCR

docker run --rm -it \
  -e DEEPSEEK_API_KEY="$DEEPSEEK_API_KEY" \
  -v codewhale-home:/home/codewhale/.codewhale \
  ghcr.io/hmbown/codewhale:v0.9.7

The image exposes the same runtime as both codewhale and codew. The
latest tag is also updated on release.

Cargo (Linux / macOS)

cargo install codewhale-cli --locked

The Cargo package installs codewhale. Cargo cannot create a second command
alias from one binary target; users who want the shorter spelling can add a
codew symlink to that installed executable. The npm, Homebrew, archive,
shell-installer, and container channels install both command names directly.

Manual download — platform archives (recommended)

Each archive below contains the same runtime under the codewhale and
codew command names, plus an install script:

Platform Archive Install script
Linux x64 codewhale-linux-x64.tar.gz install.sh
Linux ARM64 codewhale-linux-arm64.tar.gz install.sh
Android ARM64 (Termux) codewhale-android-arm64.tar.gz install.sh
macOS x64 codewhale-macos-x64.tar.gz install.sh
macOS ARM codewhale-macos-arm64.tar.gz install.sh
Windows x64 (installer) CodeWhaleSetup.exe NSIS setup
Windows x64 codewhale-windows-x64.zip install.bat
Windows x64 (portable) codewhale-windows-x64-portable.zip
Windows ARM64 codewhale-windows-arm64.zip install.bat
Windows ARM64 (portable) codewhale-windows-arm64-portable.zip

Unix (Linux / macOS):

tar xzf codewhale-<platform>.tar.gz
cd codewhale-<platform>
./install.sh

Windows:

  • For the installer path, run CodeWhaleSetup.exe; it installs
    codewhale.exe and codew.exe under
    %LOCALAPPDATA%\Programs\CodeWhale\bin and adds that directory to the
    current-user PATH.
  • Extract the archive for your machine: codewhale-windows-x64.zip or
    codewhale-windows-arm64.zip
  • Run install.bat (copies to %USERPROFILE%\bin)
  • Add %USERPROFILE%\bin to your PATH

The portable Windows archive skips the install script — extract and run from any directory. The NSIS installer is currently unsigned and may trigger Windows SmartScreen until a signing certificate is wired into the release pipeline.

Each platform also has bare, unarchived codewhale-<platform> and
codew-<platform> assets. The seven codewhale-tui-<platform> filenames
attached to v0.9.5 are byte-identical compatibility copies used only to let
already-installed v0.9.4 clients discover and cross this single-binary
transition; current installers do not expose a third runtime. The legacy npm
package deepseek-tui is deprecated and is not republished. For migration
from v0.8.x legacy binary names, see docs/REBRAND.md.

Verify (recommended)

Download the checksum manifests from this Release and verify:

# Linux — archive bundles
sha256sum -c codewhale-bundles-sha256.txt --ignore-missing

# Linux — individual binaries
sha256sum -c codewhale-artifacts-sha256.txt --ignore-missing

# macOS
shasum -a 256 -c codewhale-bundles-sha256.txt --ignore-missing
shasum -a 256 -c codewhale-artifacts-sha256.txt --ignore-missing

What's in v0.9.7

Codewhale v0.9.7 keeps the catalog ordinary. Grok 4.6 lands as a normal catalog
row instead of a provider-shaped pile of special cases, OrcaRouter joins as a
named provider, and a panic-safety advisory in lru is cleared by lifting the
pin that caused it rather than living around it.

Added

  • Grok 4.6 is the direct xAI default, with the grok alias moving onto it and
    grok-4.5 still explicitly selectable. Its 500K context, text/image input,
    tool and structured-output support, low/medium/high/xhigh reasoning
    efforts (default high), and server-side web search all come from the
    Models.dev-shaped catalog rather than model-specific code. reasoning_effort
    reaches the wire only on the exact first-party https://api.x.ai/v1 route,
    and the usage-aware 200K-token pricing boundary is scoped to direct xAI so
    aggregator routes reusing the model slug cannot inherit xAI billing.
  • OrcaRouter is a first-class named provider: ORCAROUTER_API_KEY, default base
    URL https://api.orcarouter.ai/v1, deepseek/deepseek-v4-pro default,
    orcarouter/auto routing, CLI --provider selector, and TUI picker entries
    (#5321).

Changed

  • Reasoning-effort normalization and the model picker read a model's published
    reasoning_options list from the catalog instead of collapsing every route to
    the historic Low/Medium ladder. Any catalog row that publishes an effort list
    keeps its own vocabulary.
  • Docs record DeepSeek's live DeepSeek-V4-Pro-0813 backend label while the
    callable API ID stays deepseek-v4-pro. No aliases are remapped and no
    deepseek-v4-pro[1m] selector is sent.

Fixed

  • Copying a user or assistant message takes its canonical content instead of
    reserialized transcript lines, keeping role glyphs, continuation rails, and
    visual wrapping out of the clipboard while preserving authored Unicode,
    Markdown, and hard line breaks. Tool and Thinking cells stay on the existing
    full-transcript path (#5319).
  • load_session no longer runs crash recovery on every read. Snapshot reads go
    through a side-effect-free load_session_snapshot and recovery is explicit
    via recover_session_for_resume, so an embedding host inspecting a durable
    session while a tool is still running no longer gets a spurious crash repair
    (#5320).

Security

  • lru moves to 0.18 to clear RUSTSEC-2026-0253, where LruCache::pop() was
    not panic-safe and could leave dangling list pointers. The ratatui-core
    =0.1.0 pin that transitively forced lru ^0.16 is lifted, so
    ColorCompatBackend now answers get_cursor_position() from tracked cursor
    state — the upstream-recommended workaround for the startup CPR race
    (ratatui/ratatui#2483, ratatui/ratatui#2640) that the pin originally worked
    around. ratatui itself stays pinned at =0.30.0, so the API surface is
    unchanged.

Known issues

  • The integration test
    exec_persistent_service::failed_exec_kills_pending_service_and_exits_nonzero
    is a confirmed flake under parallel load ("service pid file never appeared").
    It passes in isolation and is unrelated to any v0.9.7 change.

Contributors

See CHANGELOG.md for full notes and docs/CHANGELOG_ARCHIVE.md for older releases.