docs(release): date the 0.9.8 entry and credit the harvested train

Fold the [Unreleased] notes that ship in this release (/title, Eden AI,
child posture, host-side Workflow/Goal, whales, metrics, DSH, char-count
title truncation) into the [0.9.8] entry, date it 2026-08-16, and add the
verifier-test isolation from #5423. Credit @SparkofSpike (#5419),
@redstar (#5422), @wuisabel-gif (#5423), and @buiducnhat (#5415) in the
changelog ledger, docs/CONTRIBUTORS.md, and web/lib/release-credits.ts,
and resync crates/tui/CHANGELOG.md.
This commit is contained in:
CodeWhale Bot
2026-08-15 23:50:56 -07:00
parent d36628ab5f
commit 05020ec8b2
4 changed files with 248 additions and 215 deletions

View File

@@ -7,112 +7,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
## [Unreleased]
### Added
- Terminal tab/window titles now carry the existing saved session name before
the live state (`Codewhale`, `reasoning…`, `using tool…`, `done`), so parallel
sessions are identifiable at a glance without a second title setting.
`/title <name>` is a discoverable alias for `/rename`; both update the one
session name shown in the picker, composer, and terminal tab. Control and
bidi-format characters are stripped before any name reaches OSC 0.
- 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.
- Children (sub-agents and Fleet workers) inherit the session's permission
posture faithfully: Auto-Review's deterministic floor and model guardian
decide a worker's held calls (fail closed when unavailable, never a
prompt); under Ask a held call is raised in the parent's approval UI and
the worker waits visibly; Full Access still fails closed on the safety
floor. Each prompt-less decision is a one-line note in that worker's
transcript (focus mode) and an audit-log record.
- Worker role defaults keep what the role does not intend to withhold:
every built-in role keeps network reads; `planner` may run read-only
shell probes; `custom` inherits the parent's write/network/shell posture
and is narrowed only by its explicit tool list or the spawning call.
Read-only roles (`scout`, `reviewer`, `planner`, `verifier`,
`consultant`) still never write the workspace. The focused worker's
header states its effective posture from the runtime snapshot.
- `/workflow status`, `/workflow cancel [run_id]`, `/workflow settings`, and
`/workflow help` are answered by Codewhale itself from the run journal and
live run state — no model turn — and `/workflow run <path>` launches a
checked-in workflow as-is. `/config workflow` and `/config goal` explain
the effective tables. The workflow tool now honors the session `[workflow]`
table (`automatic`, `auto_start_read_only`, `require_approval_for_writes`,
limits) instead of product defaults.
- Goal mode enters as readily as DeepSeek Harness: the agent may create the
session goal when a direct request describes a verifiable multi-turn end
state, and Codewhale shows a one-line `Goal set` receipt with how to pause
or clear it. Bare `/goal` shows plain progress (and how to continue when no
turn is running), prints usage on an empty session instead of asking the
model, and `/goal help|status` are reserved words.
- Whale Teams in the terminal: the six Signal Cut whale identities (Scout,
Patch, Harbor, Echo, Keel, Lantern) appear as species badges on `/fleet`
roster rows and worker rows, with an identity portrait in the roster detail
pane and a six-state word (Resting, Thinking, Working, Waiting for you,
Blocked, Offline) derived only from the child's real runtime status. Colors
come from the theme tokens, every glyph has an ASCII fallback, and the
working wake animates only under full motion. See
`docs/design/WHALE_TEAMS_TUI.md`.
- A session metrics strip on the phase row (`4 turns · 108 steps │ LLM
11m46s · Tool call 1m52s │ TTFT avg 1.5s · 120 tok/s │ Cache hit 99% │
Input 9.3M`), on by default as the `session_metrics` footer item
(`/statusline`, `[tui].status_items`). Every value comes from engine
receipts — turn starts, per-model-call usage with stream time,
time-to-first-token and whole-call time, tool start/complete edges, and
provider-reported cache and input tokens. Cells without evidence are
omitted, never estimated. `/status` prints the untrimmed line; the phase
row sheds its lowest-value groups to fit the columns it actually has.
- Auto-Review decisions nobody was prompted for are now visible in the
transcript as one-line notes: model-guardian allow/deny verdicts with
their risk tier and stated reason, guardian failures (denied, fail
closed), deterministic policy blocks, and holds Auto-Review denied
without pausing. The audit log keeps the full record. `/permissions`
ends with the active posture, what it decides on its own versus never,
and the audit-log path. The footer's `Esc to interrupt` hint is
localized. See `docs/design/AUTO_MODE_PARITY.md` for the Claude Code /
Kimi Code parity ledger and follow-ups.
- `codewhale integrations dsh status|plan|connect|update|launch|disable|enable|remove`
connects an existing official DeepSeek Harness (`dsh` 0.1.0-rc.6, verified)
through Codewhale using only its documented seams: a `--patch` overlay that
pins the exact Codewhale provider/model/endpoint identity (native
`deepseek-official` route, or a hand-declared `openai-completions` route
named `codewhale-<provider>` for OpenAI-compatible providers), the
Codewhale permission posture exported as `DSH_PERMISSION_MODE`, and an
append-only receipt. Codewhale writes only under
`$CODEWHALE_HOME/integrations/dsh/`, never copies API keys or edits DSH
files, never broadens permissions (`--allow-full-access` only mirrors an
existing Codewhale full-access posture), and reports not-installed /
offline / incompatible / detected / connected / stale-config /
stale-version / disabled honestly. Anthropic Messages and OpenAI Responses
routes are refused as not carriable. The documented DSH plugin path is an
explicit opt-in: `install-bundle` materializes a Codewhale bundle package
(`codewhale-dsh-bundle`, MIT notice retained) and installs it with
`dsh plugin --profile codewhale add <path>` into a dedicated `codewhale`
profile (pnpm required, reported truthfully when missing; `web`/`headless`
untouched), so `dsh --profile codewhale` alone carries the identity;
`update` regenerates the bundle patch and `remove-bundle` reverses it,
leaving the DSH-owned profile directory in place. `/setup tools` and `codewhale doctor`
show the read-only detection state; `doctor` also lists the DSH read-only
credential consent alongside Codex and Grok. The optional `--skin` export
writes a Codewhale token stylesheet generated from the TUI palette
(Blue Stage dark/light, ombre water column, mode/permission/state colors,
reduced-motion fallbacks); DSH exposes no custom-theme API, so the sheet is
labeled an unsupported overlay and is never injected. See
`docs/INTEGRATIONS_DSH.md`.
### Fixed
- Session titles truncate by character count, not byte offset, so
multi-byte titles (CJK, emoji) cut at the intended width and word
boundary instead of past the limit (#5415).
- Wide terminals and tmux panes fill the full available width again for the
transcript and composer (#5322). The brief v0.9 session-shell side gutter is
gone so expanding a pane rematerializes layout the same way shrinking does.
## [0.9.8] - 2026-08-14
## [0.9.8] - 2026-08-16
Codewhale v0.9.8 ships the remaining assigned finish. Remaining web
settings polish moves to v0.9.9. Prefab third-party templates that have
@@ -200,6 +95,102 @@ a published OpenAI-compatible host ship here (#5350).
updates it. The legacy `deepseek-tui` formula remains a deprecated alias
for one overlap release.
- Terminal tab/window titles now carry the existing saved session name before
the live state (`Codewhale`, `reasoning…`, `using tool…`, `done`), so parallel
sessions are identifiable at a glance without a second title setting.
`/title <name>` is a discoverable alias for `/rename`; both update the one
session name shown in the picker, composer, and terminal tab. Control and
bidi-format characters are stripped before any name reaches OSC 0
(#5419, Sh1Zuku).
- 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).
- Children (sub-agents and Fleet workers) inherit the session's permission
posture faithfully: Auto-Review's deterministic floor and model guardian
decide a worker's held calls (fail closed when unavailable, never a
prompt); under Ask a held call is raised in the parent's approval UI and
the worker waits visibly; Full Access still fails closed on the safety
floor. Each prompt-less decision is a one-line note in that worker's
transcript (focus mode) and an audit-log record.
- Worker role defaults keep what the role does not intend to withhold:
every built-in role keeps network reads; `planner` may run read-only
shell probes; `custom` inherits the parent's write/network/shell posture
and is narrowed only by its explicit tool list or the spawning call.
Read-only roles (`scout`, `reviewer`, `planner`, `verifier`,
`consultant`) still never write the workspace. The focused worker's
header states its effective posture from the runtime snapshot.
- `/workflow status`, `/workflow cancel [run_id]`, `/workflow settings`, and
`/workflow help` are answered by Codewhale itself from the run journal and
live run state — no model turn — and `/workflow run <path>` launches a
checked-in workflow as-is. `/config workflow` and `/config goal` explain
the effective tables. The workflow tool now honors the session `[workflow]`
table (`automatic`, `auto_start_read_only`, `require_approval_for_writes`,
limits) instead of product defaults.
- Goal mode enters as readily as DeepSeek Harness: the agent may create the
session goal when a direct request describes a verifiable multi-turn end
state, and Codewhale shows a one-line `Goal set` receipt with how to pause
or clear it. Bare `/goal` shows plain progress (and how to continue when no
turn is running), prints usage on an empty session instead of asking the
model, and `/goal help|status` are reserved words.
- Whale Teams in the terminal: the six Signal Cut whale identities (Scout,
Patch, Harbor, Echo, Keel, Lantern) appear as species badges on `/fleet`
roster rows and worker rows, with an identity portrait in the roster detail
pane and a six-state word (Resting, Thinking, Working, Waiting for you,
Blocked, Offline) derived only from the child's real runtime status. Colors
come from the theme tokens, every glyph has an ASCII fallback, and the
working wake animates only under full motion. See
`docs/design/WHALE_TEAMS_TUI.md`.
- A session metrics strip on the phase row (`4 turns · 108 steps │ LLM
11m46s · Tool call 1m52s │ TTFT avg 1.5s · 120 tok/s │ Cache hit 99% │
Input 9.3M`), on by default as the `session_metrics` footer item
(`/statusline`, `[tui].status_items`). Every value comes from engine
receipts — turn starts, per-model-call usage with stream time,
time-to-first-token and whole-call time, tool start/complete edges, and
provider-reported cache and input tokens. Cells without evidence are
omitted, never estimated. `/status` prints the untrimmed line; the phase
row sheds its lowest-value groups to fit the columns it actually has.
- Auto-Review decisions nobody was prompted for are now visible in the
transcript as one-line notes: model-guardian allow/deny verdicts with
their risk tier and stated reason, guardian failures (denied, fail
closed), deterministic policy blocks, and holds Auto-Review denied
without pausing. The audit log keeps the full record. `/permissions`
ends with the active posture, what it decides on its own versus never,
and the audit-log path. The footer's `Esc to interrupt` hint is
localized. See `docs/design/AUTO_MODE_PARITY.md` for the Claude Code /
Kimi Code parity ledger and follow-ups.
- `codewhale integrations dsh status|plan|connect|update|launch|disable|enable|remove`
connects an existing official DeepSeek Harness (`dsh` 0.1.0-rc.6, verified)
through Codewhale using only its documented seams: a `--patch` overlay that
pins the exact Codewhale provider/model/endpoint identity (native
`deepseek-official` route, or a hand-declared `openai-completions` route
named `codewhale-<provider>` for OpenAI-compatible providers), the
Codewhale permission posture exported as `DSH_PERMISSION_MODE`, and an
append-only receipt. Codewhale writes only under
`$CODEWHALE_HOME/integrations/dsh/`, never copies API keys or edits DSH
files, never broadens permissions (`--allow-full-access` only mirrors an
existing Codewhale full-access posture), and reports not-installed /
offline / incompatible / detected / connected / stale-config /
stale-version / disabled honestly. Anthropic Messages and OpenAI Responses
routes are refused as not carriable. The documented DSH plugin path is an
explicit opt-in: `install-bundle` materializes a Codewhale bundle package
(`codewhale-dsh-bundle`, MIT notice retained) and installs it with
`dsh plugin --profile codewhale add <path>` into a dedicated `codewhale`
profile (pnpm required, reported truthfully when missing; `web`/`headless`
untouched), so `dsh --profile codewhale` alone carries the identity;
`update` regenerates the bundle patch and `remove-bundle` reverses it,
leaving the DSH-owned profile directory in place. `/setup tools` and `codewhale doctor`
show the read-only detection state; `doctor` also lists the DSH read-only
credential consent alongside Codex and Grok. The optional `--skin` export
writes a Codewhale token stylesheet generated from the TUI palette
(Blue Stage dark/light, ombre water column, mode/permission/state colors,
reduced-motion fallbacks); DSH exposes no custom-theme API, so the sheet is
labeled an unsupported overlay and is never injected. See
`docs/INTEGRATIONS_DSH.md`.
### Fixed
- Selecting the `google` provider kind resolved to the `antigravity`
@@ -295,6 +286,17 @@ a published OpenAI-compatible host ship here (#5350).
maximum tier alongside the legacy `ultracode` alias, instead of being
silently dropped (#5303, #5409, buiducnhat).
- Session titles truncate by character count, not byte offset, so
multi-byte titles (CJK, emoji) cut at the intended width and word
boundary instead of past the limit (#5415).
- Wide terminals and tmux panes fill the full available width again for the
transcript and composer (#5322). The brief v0.9 session-shell side gutter is
gone so expanding a pane rematerializes layout the same way shrinking does.
- The background verifier test drives the current libtest executable
instead of the rustup `rustc` shim, so the TUI suite no longer depends
on `$HOME` or holds the process-wide test environment lock across an
async wait (#5056, #5423, Isabel Wu).
### Removed
- The source-structure budget ratchet (CI step, checker, baseline JSON).
@@ -334,7 +336,14 @@ a published OpenAI-compatible host ship here (#5350).
- 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).
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).
## [0.9.7] - 2026-08-12

View File

@@ -7,112 +7,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
## [Unreleased]
### Added
- Terminal tab/window titles now carry the existing saved session name before
the live state (`Codewhale`, `reasoning…`, `using tool…`, `done`), so parallel
sessions are identifiable at a glance without a second title setting.
`/title <name>` is a discoverable alias for `/rename`; both update the one
session name shown in the picker, composer, and terminal tab. Control and
bidi-format characters are stripped before any name reaches OSC 0.
- 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.
- Children (sub-agents and Fleet workers) inherit the session's permission
posture faithfully: Auto-Review's deterministic floor and model guardian
decide a worker's held calls (fail closed when unavailable, never a
prompt); under Ask a held call is raised in the parent's approval UI and
the worker waits visibly; Full Access still fails closed on the safety
floor. Each prompt-less decision is a one-line note in that worker's
transcript (focus mode) and an audit-log record.
- Worker role defaults keep what the role does not intend to withhold:
every built-in role keeps network reads; `planner` may run read-only
shell probes; `custom` inherits the parent's write/network/shell posture
and is narrowed only by its explicit tool list or the spawning call.
Read-only roles (`scout`, `reviewer`, `planner`, `verifier`,
`consultant`) still never write the workspace. The focused worker's
header states its effective posture from the runtime snapshot.
- `/workflow status`, `/workflow cancel [run_id]`, `/workflow settings`, and
`/workflow help` are answered by Codewhale itself from the run journal and
live run state — no model turn — and `/workflow run <path>` launches a
checked-in workflow as-is. `/config workflow` and `/config goal` explain
the effective tables. The workflow tool now honors the session `[workflow]`
table (`automatic`, `auto_start_read_only`, `require_approval_for_writes`,
limits) instead of product defaults.
- Goal mode enters as readily as DeepSeek Harness: the agent may create the
session goal when a direct request describes a verifiable multi-turn end
state, and Codewhale shows a one-line `Goal set` receipt with how to pause
or clear it. Bare `/goal` shows plain progress (and how to continue when no
turn is running), prints usage on an empty session instead of asking the
model, and `/goal help|status` are reserved words.
- Whale Teams in the terminal: the six Signal Cut whale identities (Scout,
Patch, Harbor, Echo, Keel, Lantern) appear as species badges on `/fleet`
roster rows and worker rows, with an identity portrait in the roster detail
pane and a six-state word (Resting, Thinking, Working, Waiting for you,
Blocked, Offline) derived only from the child's real runtime status. Colors
come from the theme tokens, every glyph has an ASCII fallback, and the
working wake animates only under full motion. See
`docs/design/WHALE_TEAMS_TUI.md`.
- A session metrics strip on the phase row (`4 turns · 108 steps │ LLM
11m46s · Tool call 1m52s │ TTFT avg 1.5s · 120 tok/s │ Cache hit 99% │
Input 9.3M`), on by default as the `session_metrics` footer item
(`/statusline`, `[tui].status_items`). Every value comes from engine
receipts — turn starts, per-model-call usage with stream time,
time-to-first-token and whole-call time, tool start/complete edges, and
provider-reported cache and input tokens. Cells without evidence are
omitted, never estimated. `/status` prints the untrimmed line; the phase
row sheds its lowest-value groups to fit the columns it actually has.
- Auto-Review decisions nobody was prompted for are now visible in the
transcript as one-line notes: model-guardian allow/deny verdicts with
their risk tier and stated reason, guardian failures (denied, fail
closed), deterministic policy blocks, and holds Auto-Review denied
without pausing. The audit log keeps the full record. `/permissions`
ends with the active posture, what it decides on its own versus never,
and the audit-log path. The footer's `Esc to interrupt` hint is
localized. See `docs/design/AUTO_MODE_PARITY.md` for the Claude Code /
Kimi Code parity ledger and follow-ups.
- `codewhale integrations dsh status|plan|connect|update|launch|disable|enable|remove`
connects an existing official DeepSeek Harness (`dsh` 0.1.0-rc.6, verified)
through Codewhale using only its documented seams: a `--patch` overlay that
pins the exact Codewhale provider/model/endpoint identity (native
`deepseek-official` route, or a hand-declared `openai-completions` route
named `codewhale-<provider>` for OpenAI-compatible providers), the
Codewhale permission posture exported as `DSH_PERMISSION_MODE`, and an
append-only receipt. Codewhale writes only under
`$CODEWHALE_HOME/integrations/dsh/`, never copies API keys or edits DSH
files, never broadens permissions (`--allow-full-access` only mirrors an
existing Codewhale full-access posture), and reports not-installed /
offline / incompatible / detected / connected / stale-config /
stale-version / disabled honestly. Anthropic Messages and OpenAI Responses
routes are refused as not carriable. The documented DSH plugin path is an
explicit opt-in: `install-bundle` materializes a Codewhale bundle package
(`codewhale-dsh-bundle`, MIT notice retained) and installs it with
`dsh plugin --profile codewhale add <path>` into a dedicated `codewhale`
profile (pnpm required, reported truthfully when missing; `web`/`headless`
untouched), so `dsh --profile codewhale` alone carries the identity;
`update` regenerates the bundle patch and `remove-bundle` reverses it,
leaving the DSH-owned profile directory in place. `/setup tools` and `codewhale doctor`
show the read-only detection state; `doctor` also lists the DSH read-only
credential consent alongside Codex and Grok. The optional `--skin` export
writes a Codewhale token stylesheet generated from the TUI palette
(Blue Stage dark/light, ombre water column, mode/permission/state colors,
reduced-motion fallbacks); DSH exposes no custom-theme API, so the sheet is
labeled an unsupported overlay and is never injected. See
`docs/INTEGRATIONS_DSH.md`.
### Fixed
- Session titles truncate by character count, not byte offset, so
multi-byte titles (CJK, emoji) cut at the intended width and word
boundary instead of past the limit (#5415).
- Wide terminals and tmux panes fill the full available width again for the
transcript and composer (#5322). The brief v0.9 session-shell side gutter is
gone so expanding a pane rematerializes layout the same way shrinking does.
## [0.9.8] - 2026-08-14
## [0.9.8] - 2026-08-16
Codewhale v0.9.8 ships the remaining assigned finish. Remaining web
settings polish moves to v0.9.9. Prefab third-party templates that have
@@ -200,6 +95,102 @@ a published OpenAI-compatible host ship here (#5350).
updates it. The legacy `deepseek-tui` formula remains a deprecated alias
for one overlap release.
- Terminal tab/window titles now carry the existing saved session name before
the live state (`Codewhale`, `reasoning…`, `using tool…`, `done`), so parallel
sessions are identifiable at a glance without a second title setting.
`/title <name>` is a discoverable alias for `/rename`; both update the one
session name shown in the picker, composer, and terminal tab. Control and
bidi-format characters are stripped before any name reaches OSC 0
(#5419, Sh1Zuku).
- 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).
- Children (sub-agents and Fleet workers) inherit the session's permission
posture faithfully: Auto-Review's deterministic floor and model guardian
decide a worker's held calls (fail closed when unavailable, never a
prompt); under Ask a held call is raised in the parent's approval UI and
the worker waits visibly; Full Access still fails closed on the safety
floor. Each prompt-less decision is a one-line note in that worker's
transcript (focus mode) and an audit-log record.
- Worker role defaults keep what the role does not intend to withhold:
every built-in role keeps network reads; `planner` may run read-only
shell probes; `custom` inherits the parent's write/network/shell posture
and is narrowed only by its explicit tool list or the spawning call.
Read-only roles (`scout`, `reviewer`, `planner`, `verifier`,
`consultant`) still never write the workspace. The focused worker's
header states its effective posture from the runtime snapshot.
- `/workflow status`, `/workflow cancel [run_id]`, `/workflow settings`, and
`/workflow help` are answered by Codewhale itself from the run journal and
live run state — no model turn — and `/workflow run <path>` launches a
checked-in workflow as-is. `/config workflow` and `/config goal` explain
the effective tables. The workflow tool now honors the session `[workflow]`
table (`automatic`, `auto_start_read_only`, `require_approval_for_writes`,
limits) instead of product defaults.
- Goal mode enters as readily as DeepSeek Harness: the agent may create the
session goal when a direct request describes a verifiable multi-turn end
state, and Codewhale shows a one-line `Goal set` receipt with how to pause
or clear it. Bare `/goal` shows plain progress (and how to continue when no
turn is running), prints usage on an empty session instead of asking the
model, and `/goal help|status` are reserved words.
- Whale Teams in the terminal: the six Signal Cut whale identities (Scout,
Patch, Harbor, Echo, Keel, Lantern) appear as species badges on `/fleet`
roster rows and worker rows, with an identity portrait in the roster detail
pane and a six-state word (Resting, Thinking, Working, Waiting for you,
Blocked, Offline) derived only from the child's real runtime status. Colors
come from the theme tokens, every glyph has an ASCII fallback, and the
working wake animates only under full motion. See
`docs/design/WHALE_TEAMS_TUI.md`.
- A session metrics strip on the phase row (`4 turns · 108 steps │ LLM
11m46s · Tool call 1m52s │ TTFT avg 1.5s · 120 tok/s │ Cache hit 99% │
Input 9.3M`), on by default as the `session_metrics` footer item
(`/statusline`, `[tui].status_items`). Every value comes from engine
receipts — turn starts, per-model-call usage with stream time,
time-to-first-token and whole-call time, tool start/complete edges, and
provider-reported cache and input tokens. Cells without evidence are
omitted, never estimated. `/status` prints the untrimmed line; the phase
row sheds its lowest-value groups to fit the columns it actually has.
- Auto-Review decisions nobody was prompted for are now visible in the
transcript as one-line notes: model-guardian allow/deny verdicts with
their risk tier and stated reason, guardian failures (denied, fail
closed), deterministic policy blocks, and holds Auto-Review denied
without pausing. The audit log keeps the full record. `/permissions`
ends with the active posture, what it decides on its own versus never,
and the audit-log path. The footer's `Esc to interrupt` hint is
localized. See `docs/design/AUTO_MODE_PARITY.md` for the Claude Code /
Kimi Code parity ledger and follow-ups.
- `codewhale integrations dsh status|plan|connect|update|launch|disable|enable|remove`
connects an existing official DeepSeek Harness (`dsh` 0.1.0-rc.6, verified)
through Codewhale using only its documented seams: a `--patch` overlay that
pins the exact Codewhale provider/model/endpoint identity (native
`deepseek-official` route, or a hand-declared `openai-completions` route
named `codewhale-<provider>` for OpenAI-compatible providers), the
Codewhale permission posture exported as `DSH_PERMISSION_MODE`, and an
append-only receipt. Codewhale writes only under
`$CODEWHALE_HOME/integrations/dsh/`, never copies API keys or edits DSH
files, never broadens permissions (`--allow-full-access` only mirrors an
existing Codewhale full-access posture), and reports not-installed /
offline / incompatible / detected / connected / stale-config /
stale-version / disabled honestly. Anthropic Messages and OpenAI Responses
routes are refused as not carriable. The documented DSH plugin path is an
explicit opt-in: `install-bundle` materializes a Codewhale bundle package
(`codewhale-dsh-bundle`, MIT notice retained) and installs it with
`dsh plugin --profile codewhale add <path>` into a dedicated `codewhale`
profile (pnpm required, reported truthfully when missing; `web`/`headless`
untouched), so `dsh --profile codewhale` alone carries the identity;
`update` regenerates the bundle patch and `remove-bundle` reverses it,
leaving the DSH-owned profile directory in place. `/setup tools` and `codewhale doctor`
show the read-only detection state; `doctor` also lists the DSH read-only
credential consent alongside Codex and Grok. The optional `--skin` export
writes a Codewhale token stylesheet generated from the TUI palette
(Blue Stage dark/light, ombre water column, mode/permission/state colors,
reduced-motion fallbacks); DSH exposes no custom-theme API, so the sheet is
labeled an unsupported overlay and is never injected. See
`docs/INTEGRATIONS_DSH.md`.
### Fixed
- Selecting the `google` provider kind resolved to the `antigravity`
@@ -295,6 +286,17 @@ a published OpenAI-compatible host ship here (#5350).
maximum tier alongside the legacy `ultracode` alias, instead of being
silently dropped (#5303, #5409, buiducnhat).
- Session titles truncate by character count, not byte offset, so
multi-byte titles (CJK, emoji) cut at the intended width and word
boundary instead of past the limit (#5415).
- Wide terminals and tmux panes fill the full available width again for the
transcript and composer (#5322). The brief v0.9 session-shell side gutter is
gone so expanding a pane rematerializes layout the same way shrinking does.
- The background verifier test drives the current libtest executable
instead of the rustup `rustc` shim, so the TUI suite no longer depends
on `$HOME` or holds the process-wide test environment lock across an
async wait (#5056, #5423, Isabel Wu).
### Removed
- The source-structure budget ratchet (CI step, checker, baseline JSON).
@@ -334,7 +336,14 @@ a published OpenAI-compatible host ship here (#5350).
- 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).
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).
## [0.9.7] - 2026-08-12

View File

@@ -45,7 +45,19 @@ notes, and relevant issue/PR comments.
- **[mvanhorn](https://github.com/mvanhorn)** — read-only, repository-fact
driven settings preview on the website models page (#5411, fixes #5370)
- **[buiducnhat](https://github.com/buiducnhat)** — canonical `ultra`
reasoning effort mapped to every provider's maximum tier (#5409)
reasoning effort mapped to every provider's maximum tier (#5409); session
titles truncated by character count instead of byte offset so CJK and
emoji names cut at the intended width (#5415)
- **[SparkofSpike](https://github.com/SparkofSpike)** — `/title` and the
saved session name in the terminal tab/window title, plus the fix for the
deadlock when the title changed during an active turn; landed as a
discoverable alias of `/rename` on the one persisted session name (#5419)
- **[redstar](https://github.com/redstar)** — Eden AI registered as a named
OpenAI-compatible provider with `EDENAI_API_KEY`, `eden-ai`/`eden_ai`
aliases, and the global and EU endpoints (#5422)
- **[wuisabel-gif](https://github.com/wuisabel-gif)** — background verifier
test isolated from the rustup `rustc` shim and `$HOME`, one narrow
reliability slice of #5056 (#5423)
</details>

View File

@@ -24,6 +24,9 @@ export const RELEASE_CONTRIBUTORS: string[] = [
"@Lstarsky0",
"@mvanhorn",
"@buiducnhat",
"@SparkofSpike",
"@redstar",
"@wuisabel-gif",
];
/** Contributors who helped with reports, reproductions, and verification. */