Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
69 changes: 68 additions & 1 deletion CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,72 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0

## [Unreleased]

## [0.8.45] - 2026-05-25

### Added

- **RLM session objects.** `rlm_open` can now load `session://` refs,
exposing the active prompt, history, and session data as symbolic objects
inside RLM REPLs (#2047).
- **Deterministic whale-species sub-agent names.** Sub-agents now get stable,
human-readable whale-species nicknames (e.g. "Beluga", "Orca") while
preserving the raw agent ID in the popup (#2035, #2016).
- **`/balance` command scaffold.** Registered the `/balance` slash command
as a placeholder for future provider billing queries (#2035, #2019).
- **Readable `/restore` snapshot labels.** Snapshot labels now include the
originating user prompt so restore listings are easier to identify. Thanks
@idling11 (#2111).
- **Sidebar hover tooltips.** Truncated Work and Tasks sidebar lines now expose
their full text on hover. Thanks @idling11 (#2110).

### Changed

- **AGENTS.md is now maintainer-local.** The project instructions file no
longer ships as a tracked repo file; it lives in maintainer-local ignored
state (#2047).

### Fixed

- **Sub-agent completion handoff compatibility.** Completion handoffs now use a
chat-template-safe role and emit before terminal updates, fixing strict
OpenAI-compatible/self-hosted backends and preserving transcript ordering.
Thanks @h3c-hexin and @cyq1017 (#2057, #2120).
- **Self-hosted context budgeting.** Sub-500K self-hosted model windows now keep
a usable input budget instead of disabling preflight compaction after output
reservation underflow. Thanks @h3c-hexin (#2060).
- **Goal prompts start actionable.** Goal-start prompts now open in an
actionable state instead of requiring an extra nudge. Thanks @cyq1017
(#2097).
- **Composer session title display.** The composer chrome shows the current
session title again and avoids grayscale luma overflow in debug builds.
Thanks @wdw8276 (#2108).
- **Approval prompts use a one-step confirmation flow.** Enter now commits the
selected approval option directly, destructive warnings remain visible, and
abort cancels the active turn instead of only denying the current tool call.
Thanks @reidliu41 (#2143).
- **Model picker selection survives Esc.** Dismissing the model picker with Esc
no longer loses the highlighted selection. Thanks @reidliu41 (#2056).
- **Slash recovery no longer restores command tails in the composer.**
Resuming a session or recovering from a crash no longer leaves stale
slash-command text (e.g. `/sessions`) in the composer input (#2047, #2032).
- **Remembered tool approvals now update the live active turn.**
When the "remember" checkbox is set on an approval dialog, the active
turn's auto-approve flag flips immediately instead of waiting for the
next turn. Thanks @gaord (#2047, #2041).
- **YAML block scalars in SKILL.md frontmatter.** Multi-line descriptions
using `>` or `|` indicators are now parsed correctly — folded block
scalars join non-empty lines with spaces, literal scalars preserve
newlines, and all three chomping modes (strip/clip/keep) are supported.
Thanks @zlh124 (#1908, #1907).
- **User messages highlighted in the transcript.** User-authored messages
now render with a full-row background in the live TUI transcript, making
it easier to scan prior turns. Assistant and system messages are
unaffected. Thanks @reidliu41 (#1995, #1672).
- **Cancellable `list_dir` and `file_search`.** Long directory walks and
file searches now respond to user cancel/stop requests with a 30-second
fallback timeout, preventing the TUI from hanging on deep or slow
filesystems (#2035).

## [0.8.44] - 2026-05-24

### Added
Expand Down Expand Up @@ -4806,7 +4872,8 @@ Welcome — and thank you.
- Hooks system and config profiles
- Example skills and launch assets

[Unreleased]: https://github.com/Hmbown/CodeWhale/compare/v0.8.44...HEAD
[Unreleased]: https://github.com/Hmbown/CodeWhale/compare/v0.8.45...HEAD
[0.8.45]: https://github.com/Hmbown/CodeWhale/compare/v0.8.44...v0.8.45
[0.8.44]: https://github.com/Hmbown/CodeWhale/compare/v0.8.43...v0.8.44
[0.8.43]: https://github.com/Hmbown/CodeWhale/compare/v0.8.42...v0.8.43
[0.8.42]: https://github.com/Hmbown/CodeWhale/compare/v0.8.41...v0.8.42
Expand Down
32 changes: 18 additions & 14 deletions Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ default-members = ["crates/cli", "crates/app-server", "crates/tui"]
resolver = "2"

[workspace.package]
version = "0.8.44"
version = "0.8.45"
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
Expand Down
21 changes: 11 additions & 10 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -279,9 +279,13 @@ codewhale --provider novita --model deepseek/deepseek-v4-pro
codewhale auth set --provider fireworks --api-key "YOUR_FIREWORKS_API_KEY"
codewhale --provider fireworks --model deepseek-v4-pro

# Moonshot/Kimi
codewhale auth set --provider moonshot --api-key "YOUR_MOONSHOT_OR_KIMI_API_KEY"
codewhale --provider moonshot --model kimi-k2.6

# Generic OpenAI-compatible endpoint
codewhale auth set --provider openai --api-key "YOUR_OPENAI_COMPATIBLE_API_KEY"
OPENAI_BASE_URL="https://openai-compatible.example/v4" codewhale --provider openai --model glm-5
OPENAI_BASE_URL="https://openai-compatible.example/v4" codewhale --provider openai --model deepseek-v4-pro

# Self-hosted SGLang
SGLANG_BASE_URL="http://localhost:30000/v1" codewhale --provider sglang --model deepseek-v4-flash
Expand Down Expand Up @@ -429,11 +433,6 @@ ACP workflows outside the built-in Zed slice.
| `@path` | Attach file/directory context in composer |
| `↑` (at composer start) | Select attachment row for removal |

Voice input is available from the command palette (`Ctrl+K`, then search
`Voice input`) after configuring `voice_input_command`; the helper
records/transcribes audio, CodeWhale shows a listening status while it runs, and
the final transcript is inserted into the composer for editing.

Full shortcut catalog: [docs/KEYBINDINGS.md](docs/KEYBINDINGS.md).

---
Expand Down Expand Up @@ -467,14 +466,15 @@ Key environment variables:
| `DEEPSEEK_HTTP_HEADERS` | Optional custom model request headers, e.g. `X-Model-Provider-Id=your-model-provider` |
| `DEEPSEEK_MODEL` | Default model |
| `DEEPSEEK_STREAM_IDLE_TIMEOUT_SECS` | Stream idle timeout in seconds, default `300`, clamped to `1..=3600` |
| `DEEPSEEK_PROVIDER` | `codewhale` (default), `nvidia-nim`, `openai`, `atlascloud`, `wanjie-ark`, `openrouter`, `novita`, `fireworks`, `sglang`, `vllm`, `ollama` |
| `DEEPSEEK_PROVIDER` | `codewhale` (default), `nvidia-nim`, `openai`, `atlascloud`, `wanjie-ark`, `openrouter`, `novita`, `fireworks`, `moonshot`, `sglang`, `vllm`, `ollama` |
| `DEEPSEEK_PROFILE` | Config profile name |
| `DEEPSEEK_MEMORY` | Set to `on` to enable user memory |
| `DEEPSEEK_ALLOW_INSECURE_HTTP=1` | Allow non-local `http://` API base URLs on trusted networks |
| `NVIDIA_API_KEY` / `OPENAI_API_KEY` / `ATLASCLOUD_API_KEY` / `WANJIE_ARK_API_KEY` / `OPENROUTER_API_KEY` / `NOVITA_API_KEY` / `FIREWORKS_API_KEY` / `SGLANG_API_KEY` / `VLLM_API_KEY` / `OLLAMA_API_KEY` | Provider auth |
| `NVIDIA_API_KEY` / `OPENAI_API_KEY` / `ATLASCLOUD_API_KEY` / `WANJIE_ARK_API_KEY` / `OPENROUTER_API_KEY` / `NOVITA_API_KEY` / `FIREWORKS_API_KEY` / `MOONSHOT_API_KEY` / `KIMI_API_KEY` / `SGLANG_API_KEY` / `VLLM_API_KEY` / `OLLAMA_API_KEY` | Provider auth |
| `OPENAI_BASE_URL` / `OPENAI_MODEL` | Generic OpenAI-compatible endpoint and model ID |
| `ATLASCLOUD_BASE_URL` / `ATLASCLOUD_MODEL` | AtlasCloud endpoint and model override |
| `WANJIE_ARK_BASE_URL` / `WANJIE_ARK_MODEL` | Wanjie Ark endpoint and model override |
| `MOONSHOT_BASE_URL` / `KIMI_BASE_URL` / `MOONSHOT_MODEL` / `KIMI_MODEL` | Moonshot/Kimi endpoint and model override |
| `OPENROUTER_BASE_URL` | OpenRouter endpoint override |
| `NOVITA_BASE_URL` | Novita endpoint override |
| `FIREWORKS_BASE_URL` | Fireworks endpoint override |
Expand Down Expand Up @@ -604,7 +604,7 @@ This project ships with help from a growing community of contributors:
- **[zichen0116](https://github.com/zichen0116)** — CODE_OF_CONDUCT.md (#686)
- **[dfwqdyl-ui](https://github.com/dfwqdyl-ui)** — model ID case-sensitivity compatibility report (#729)
- **[Oliver-ZPLiu](https://github.com/Oliver-ZPLiu)** — stale `working...` state bug report, Windows clipboard fallback, MCP Streamable HTTP session fixes, and Homebrew tap automation (#738, #850, #1643, #1631)
- **[reidliu41](https://github.com/reidliu41)** — resume hint, workspace trust persistence, Ollama provider support, thinking-block stream finalization, CI cache hardening, streaming wrap, DeepSeek model completions, and help picker selection polish (#863, #870, #921, #1078, #1603, #1628, #1601, #1964)
- **[reidliu41](https://github.com/reidliu41)** — resume hint, workspace trust persistence, Ollama provider support, thinking-block stream finalization, CI cache hardening, streaming wrap, DeepSeek model completions, help picker selection polish, and transcript user-message highlighting (#863, #870, #921, #1078, #1603, #1628, #1601, #1964, #1995)
- **[cyq1017](https://github.com/cyq1017)** — Unicode `git_status` paths, local/configured skill discovery, and mode-switch toast dedupe (#1953, #1956, #1957)
- **[xieshutao](https://github.com/xieshutao)** — plain Markdown skill fallback (#869)
- **[GK012](https://github.com/GK012)** — npm wrapper `--version` fallback (#885)
Expand Down Expand Up @@ -637,7 +637,7 @@ This project ships with help from a growing community of contributors:
- **[mdrkrg](https://github.com/mdrkrg)** — first-run onboarding crash fix when the API key is missing (#1598)
- **[Aitensa](https://github.com/Aitensa)** — CJK wrapping propagation for diff and pager output (#1622)
- **[qiyan233](https://github.com/qiyan233)** — legacy DeepSeek CN provider alias compatibility (#1645)
- **[zlh124](https://github.com/zlh124)** — WSL2/headless startup report and clipboard-init fix (#1772, #1773)
- **[zlh124](https://github.com/zlh124)** — WSL2/headless startup report, clipboard-init fix, and YAML block-scalar frontmatter parsing (#1772, #1773, #1908)
- **[aboimpinto](https://github.com/aboimpinto)** — Windows alt-screen logging, Home/End composer, and runtime log follow-ups (#1774, #1776, #1748, #1749, #1782, #1783)
- **[LeoLin990405](https://github.com/LeoLin990405)** — provider model passthrough, reasoning replay, thinking-only turn, and Windows quoting fixes (#1740, #1743, #1742, #1744)
- **[nightt5879](https://github.com/nightt5879)** — Ctrl+C prompt restore fix (#1764)
Expand Down Expand Up @@ -707,6 +707,7 @@ This project ships with help from a growing community of contributors:
- **[xulongzhe](https://github.com/xulongzhe)** — issue-template and vision-boundary follow-ups (#1530, #1544)
- **[YaYII](https://github.com/YaYII)** — trusted media path work (#1462)
- **[47Cid](https://github.com/47Cid)** and **[Jafar Akhondali](https://github.com/JafarAkhondali)** — responsible security disclosures and hardening reports
- **[gaord](https://github.com/gaord)** — approval-remember live-turn sync fix (#2041)

---

Expand Down
2 changes: 1 addition & 1 deletion crates/agent/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -7,5 +7,5 @@ repository.workspace = true
description = "Model/provider registry and fallback strategy for DeepSeek workspace architecture"

[dependencies]
codewhale-config = { path = "../config", version = "0.8.44" }
codewhale-config = { path = "../config", version = "0.8.45" }
serde.workspace = true
10 changes: 5 additions & 5 deletions crates/agent/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -74,18 +74,18 @@ impl Default for ModelRegistry {
supports_reasoning: true,
},
ModelInfo {
id: "gpt-4.1".to_string(),
id: "deepseek-v4-pro".to_string(),
provider: ProviderKind::Openai,
aliases: vec!["gpt4.1".to_string(), "gpt-4o".to_string()],
aliases: vec!["openai-compatible-deepseek-v4-pro".to_string()],
supports_tools: true,
supports_reasoning: true,
},
ModelInfo {
id: "gpt-4.1-mini".to_string(),
id: "deepseek-v4-flash".to_string(),
provider: ProviderKind::Openai,
aliases: vec!["gpt-4o-mini".to_string()],
aliases: vec!["openai-compatible-deepseek-v4-flash".to_string()],
supports_tools: true,
supports_reasoning: false,
supports_reasoning: true,
},
ModelInfo {
id: "deepseek-reasoner".to_string(),
Expand Down
23 changes: 14 additions & 9 deletions crates/app-server/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -10,16 +10,21 @@ description = "Codex-style app-server transport for DeepSeek workspace architect
anyhow.workspace = true
axum.workspace = true
clap.workspace = true
codewhale-agent = { path = "../agent", version = "0.8.44" }
codewhale-config = { path = "../config", version = "0.8.44" }
codewhale-core = { path = "../core", version = "0.8.44" }
codewhale-execpolicy = { path = "../execpolicy", version = "0.8.44" }
codewhale-hooks = { path = "../hooks", version = "0.8.44" }
codewhale-mcp = { path = "../mcp", version = "0.8.44" }
codewhale-protocol = { path = "../protocol", version = "0.8.44" }
codewhale-state = { path = "../state", version = "0.8.44" }
codewhale-tools = { path = "../tools", version = "0.8.44" }
codewhale-agent = { path = "../agent", version = "0.8.45" }
codewhale-config = { path = "../config", version = "0.8.45" }
codewhale-core = { path = "../core", version = "0.8.45" }
codewhale-execpolicy = { path = "../execpolicy", version = "0.8.45" }
codewhale-hooks = { path = "../hooks", version = "0.8.45" }
codewhale-mcp = { path = "../mcp", version = "0.8.45" }
codewhale-protocol = { path = "../protocol", version = "0.8.45" }
codewhale-state = { path = "../state", version = "0.8.45" }
codewhale-tools = { path = "../tools", version = "0.8.45" }
serde.workspace = true
serde_json.workspace = true
tokio.workspace = true
tower-http.workspace = true
uuid.workspace = true

[dev-dependencies]
tempfile = "3.16"
tower = "0.5"
Loading
Loading