chore(release): prepare v0.8.15

This commit is contained in:
Hunter Bown
2026-05-06 11:06:00 -05:00
parent bf8fd3e452
commit 1043374e6a
15 changed files with 163 additions and 56 deletions
+90
View File
@@ -5,6 +5,96 @@ All notable changes to this project will be documented in this file.
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
## [0.8.15] - 2026-05-06
An auth, Windows, editor-integration, and setup stabilization release. This
release keeps the existing DeepSeek V4 architecture intact while landing small
community fixes that make first-run setup, terminal behavior, skills, cost
display, and recovery paths easier to trust.
### Added
- **ACP stdio adapter for Zed/custom agents** (#782) — `deepseek serve --acp`
starts a local Agent Client Protocol server over stdio. The first slice
supports new sessions and prompt responses through the user's existing
DeepSeek config/API key; tool-backed editing and checkpoint replay remain
outside the ACP surface for now.
- **Yuan/CNY cost display** (#806) — `cost_currency = "cny"` (also accepts
`yuan` / `rmb`) switches footer, context panel, `/cost`, `/tokens`, and
long-turn notification summaries from USD to CNY.
- **Slash autocomplete for skills** (#808) — installed skills are visible in
the slash-command autocomplete menu.
- **`/rename` session titles** (#836) — sessions can be renamed without
editing save files manually.
### Changed
- **Current local date in turn metadata** (#893, closes #865) — real user turns
now include the current local date in `<turn_meta>`, without changing the
stable system prompt/cache prefix.
- **Doctor endpoint diagnostics** (#823) — `deepseek doctor` shows the resolved
provider/API endpoint to make proxy, China endpoint, and inherited-env
debugging more concrete.
- **More conservative request sizing** (#826) — API requests cap `max_tokens`
against the active model/context budget before dispatch.
- **Safer config and secret file writes** (#833, #837) — generated config files
use restrictive permissions and improved secret redaction.
### Fixed
- **Env-only API key failure recovery** (#892) — runtime auth failures now say
when the rejected key came from inherited `DEEPSEEK_API_KEY` and no saved
config key is present, matching the clearer `deepseek doctor` guidance.
- **Windows Unicode output** (#887, closes #872) — TUI startup now best-effort
switches the Windows console input/output codepages to UTF-8, improving
Chinese and other non-ASCII rendering.
- **Windows resume picker** (#886, closes #866) — the dispatcher keeps the
resume picker path on Windows instead of bypassing it.
- **Windows clipboard fallback** (#850) — copy operations have a fallback path
when the primary clipboard backend is unavailable.
- **Workspace trust persistence** (#870) — approval/trust choices persist in
global config instead of surprising users on the next launch.
- **Ctrl+E composer behavior** (#883, closes #876) — plain Ctrl+E moves to the
end of the composer again; file-tree toggling moved to the shifted shortcut.
- **Plain Markdown skills** (#869) — `SKILL.md` files without frontmatter now
fall back to the first `# Heading` instead of being ignored.
- **Workspace-scoped latest resume** (#830, closes #779) — `resume --last`,
`--continue`, and fork/resume helpers choose the latest session for the
current workspace/repo rather than the newest saved session globally.
- **Npm wrapper version fallback** (#885) — `deepseek --version` / `-v` can
report the package version when the native binary has not been downloaded
yet.
- **TUI exit resume hint** (#863, closes #682) — exiting the TUI now points
users toward the relevant resume command.
- **Startup and terminal reliability** — includes bounded stream-open waits
(#847), cursor-lag reduction for `@` mentions (#849), OSC52 clipboard fallback
for SSH (#845), legacy Ctrl+V paste recognition (#786), Windows mouse capture
defaulting off (#785), and UTF-8-preserving ANSI stripping (#784).
- **Install and policy reliability** — avoids unstable Rust file-locking APIs
(#821), enforces network policy in `web_run` (#800), fixes repeated setup
language prompts after API-key setup (#844), and explains dispatcher TUI spawn
failures (#853).
- **Workspace safety** — refuses dangerous snapshots for `$HOME` or unsafe
workspaces (#798, #804), fixes path-escape false positives for double-dots in
names (#824), scopes snapshot built-in excludes (#854), and replaces provider
`unreachable!()` paths with proper errors (#835).
- **Skills discovery** — recursively reads the skills directory (#811), ignores
symlinks outside the selected install root (#814), discovers global Agents
skills (#848), and includes `.cursor/skills` (#817).
- **Provider/model compatibility** — restores auto model routing (#772),
completes vLLM provider integration (#737), accepts provider-prefixed DeepSeek
model IDs (#794), preserves requested model ID casing (#733), and pins RLM
child calls to Flash (#832).
### Thanks
- Thanks to [@reidliu41](https://github.com/reidliu41) for the resume hint and
workspace trust fixes (#863, #870).
- Thanks to [@Oliver-ZPLiu](https://github.com/Oliver-ZPLiu) for the Windows
clipboard fallback (#850).
- Thanks to [@xieshutao](https://github.com/xieshutao) for the plain Markdown
skill fallback (#869).
- Thanks to [@GK012](https://github.com/GK012) for the npm wrapper version
fallback (#885).
- Thanks to everyone filing Windows, Chinese-language setup, auth, and
first-run reports. Those concrete reproductions shaped the release.
## [0.8.13] - 2026-05-05
A stabilization release for DeepSeek V4 runtime and TUI reliability. The
Generated
+14 -14
View File
@@ -1080,7 +1080,7 @@ dependencies = [
[[package]]
name = "deepseek-agent"
version = "0.8.14"
version = "0.8.15"
dependencies = [
"deepseek-config",
"serde",
@@ -1088,7 +1088,7 @@ dependencies = [
[[package]]
name = "deepseek-app-server"
version = "0.8.14"
version = "0.8.15"
dependencies = [
"anyhow",
"axum",
@@ -1110,7 +1110,7 @@ dependencies = [
[[package]]
name = "deepseek-config"
version = "0.8.14"
version = "0.8.15"
dependencies = [
"anyhow",
"deepseek-secrets",
@@ -1122,7 +1122,7 @@ dependencies = [
[[package]]
name = "deepseek-core"
version = "0.8.14"
version = "0.8.15"
dependencies = [
"anyhow",
"chrono",
@@ -1140,7 +1140,7 @@ dependencies = [
[[package]]
name = "deepseek-execpolicy"
version = "0.8.14"
version = "0.8.15"
dependencies = [
"anyhow",
"deepseek-protocol",
@@ -1149,7 +1149,7 @@ dependencies = [
[[package]]
name = "deepseek-hooks"
version = "0.8.14"
version = "0.8.15"
dependencies = [
"anyhow",
"async-trait",
@@ -1163,7 +1163,7 @@ dependencies = [
[[package]]
name = "deepseek-mcp"
version = "0.8.14"
version = "0.8.15"
dependencies = [
"anyhow",
"serde",
@@ -1172,7 +1172,7 @@ dependencies = [
[[package]]
name = "deepseek-protocol"
version = "0.8.14"
version = "0.8.15"
dependencies = [
"serde",
"serde_json",
@@ -1180,7 +1180,7 @@ dependencies = [
[[package]]
name = "deepseek-secrets"
version = "0.8.14"
version = "0.8.15"
dependencies = [
"dirs",
"keyring",
@@ -1193,7 +1193,7 @@ dependencies = [
[[package]]
name = "deepseek-state"
version = "0.8.14"
version = "0.8.15"
dependencies = [
"anyhow",
"chrono",
@@ -1205,7 +1205,7 @@ dependencies = [
[[package]]
name = "deepseek-tools"
version = "0.8.14"
version = "0.8.15"
dependencies = [
"anyhow",
"async-trait",
@@ -1218,7 +1218,7 @@ dependencies = [
[[package]]
name = "deepseek-tui"
version = "0.8.14"
version = "0.8.15"
dependencies = [
"anyhow",
"arboard",
@@ -1278,7 +1278,7 @@ dependencies = [
[[package]]
name = "deepseek-tui-cli"
version = "0.8.14"
version = "0.8.15"
dependencies = [
"anyhow",
"chrono",
@@ -1302,7 +1302,7 @@ dependencies = [
[[package]]
name = "deepseek-tui-core"
version = "0.8.14"
version = "0.8.15"
[[package]]
name = "deranged"
+1 -1
View File
@@ -19,7 +19,7 @@ default-members = ["crates/cli", "crates/app-server", "crates/tui"]
resolver = "2"
[workspace.package]
version = "0.8.14"
version = "0.8.15"
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
+19 -8
View File
@@ -102,6 +102,11 @@ deepseek
deepseek doctor # verify setup
```
If `deepseek doctor` says the rejected key came from `DEEPSEEK_API_KEY`, remove
the stale export from your shell startup file, open a fresh shell, then run
`deepseek auth set --provider deepseek`. Saved config keys take precedence over
the environment and are easier to rotate.
> To rotate or remove a saved key: `deepseek auth clear --provider deepseek`.
### Auto Mode
@@ -196,15 +201,18 @@ VLLM_BASE_URL="http://localhost:8000/v1" deepseek --provider vllm --model deepse
---
## What's New In v0.8.14
## What's New In v0.8.15
A stabilization release focused on first-run setup, auto model + thinking routing, cost accounting, and provider support. [Full changelog](CHANGELOG.md).
A community-driven stabilization release focused on auth recovery, Windows
terminals, Zed/ACP compatibility, setup friction, and clearer cost display.
[Full changelog](CHANGELOG.md).
- **Auto mode restored**`--model auto`, `/model auto`, config `default_model = "auto"`, one-shot prompts, and sub-agents resolve to concrete model + thinking routes before calling the API
- **Per-turn cost accounting fix** — V4 reasoning tokens are counted as billable output when providers report them separately from completion tokens
- **First-run setup repair** — missing config files now lead users through API key setup and create `~/.deepseek/config.toml`
- **Settings navigation fix** — arrow-key selection and click highlighting in the config UI work reliably on Windows terminals
- **vLLM provider support** — self-hosted vLLM endpoints can be used with `--provider vllm` and `VLLM_BASE_URL`
- **Friendlier auth recovery** — runtime API-key failures now explain when the active key came only from `DEEPSEEK_API_KEY` and no saved config key is present
- **Zed / ACP adapter**`deepseek serve --acp` exposes a local stdio Agent Client Protocol server for Zed and other compatible editors
- **Windows terminal fixes** — UTF-8 console setup, dispatcher resume handling, clipboard fallback, Ctrl+E composer behavior, and safer Windows mouse defaults
- **Yuan cost display** — set `cost_currency = "cny"` (or `yuan` / `rmb`) to show footer, `/cost`, `/tokens`, and notification summaries in CNY
- **Setup and skill polish** — workspace trust persists globally, plain Markdown `SKILL.md` files load correctly, global Agents/Cursor skill paths are discovered, and the TUI shows skills in slash autocomplete
- **Reliability fixes** — workspace-scoped `resume --last`, capped API `max_tokens`, endpoint diagnostics in `deepseek doctor`, npm `--version` fallback, and current-date turn metadata
---
@@ -391,7 +399,10 @@ This project ships with help from a growing community of contributors:
- **[wangfeng](mailto:wangfengcsu@qq.com)** — Pricing/discount info update (#692)
- **[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 with detailed reproduction and fix (#738)
- **[Oliver-ZPLiu](https://github.com/Oliver-ZPLiu)** — stale `working...` state bug report and Windows clipboard fallback (#738, #850)
- **[reidliu41](https://github.com/reidliu41)** — resume hint and workspace trust persistence fixes (#863, #870)
- **[xieshutao](https://github.com/xieshutao)** — plain Markdown skill fallback (#869)
- **[GK012](https://github.com/GK012)** — npm wrapper `--version` fallback (#885)
- **Hafeez Pizofreude** — SSRF protection in `fetch_url` and Star History chart
- **Unic (YuniqueUnic)** — Schema-driven config UI (TUI + web)
- **Jason** — SSRF security hardening
+6
View File
@@ -47,6 +47,12 @@ default_text_model = "deepseek-v4-pro"
# current tier as a ⚡ chip.
reasoning_effort = "max"
# ─────────────────────────────────────────────────────────────────────────────────
# Cost Display
# ─────────────────────────────────────────────────────────────────────────────────
# Display estimated usage in USD or CNY. Aliases `yuan` and `rmb` normalize to `cny`.
cost_currency = "usd" # usd | cny
# ─────────────────────────────────────────────────────────────────────────────────
# Paths
# ─────────────────────────────────────────────────────────────────────────────────
+1 -1
View File
@@ -7,5 +7,5 @@ repository.workspace = true
description = "Model/provider registry and fallback strategy for DeepSeek workspace architecture"
[dependencies]
deepseek-config = { path = "../config", version = "0.8.14" }
deepseek-config = { path = "../config", version = "0.8.15" }
serde.workspace = true
+9 -9
View File
@@ -10,15 +10,15 @@ description = "Codex-style app-server transport for DeepSeek workspace architect
anyhow.workspace = true
axum.workspace = true
clap.workspace = true
deepseek-agent = { path = "../agent", version = "0.8.14" }
deepseek-config = { path = "../config", version = "0.8.14" }
deepseek-core = { path = "../core", version = "0.8.14" }
deepseek-execpolicy = { path = "../execpolicy", version = "0.8.14" }
deepseek-hooks = { path = "../hooks", version = "0.8.14" }
deepseek-mcp = { path = "../mcp", version = "0.8.14" }
deepseek-protocol = { path = "../protocol", version = "0.8.14" }
deepseek-state = { path = "../state", version = "0.8.14" }
deepseek-tools = { path = "../tools", version = "0.8.14" }
deepseek-agent = { path = "../agent", version = "0.8.15" }
deepseek-config = { path = "../config", version = "0.8.15" }
deepseek-core = { path = "../core", version = "0.8.15" }
deepseek-execpolicy = { path = "../execpolicy", version = "0.8.15" }
deepseek-hooks = { path = "../hooks", version = "0.8.15" }
deepseek-mcp = { path = "../mcp", version = "0.8.15" }
deepseek-protocol = { path = "../protocol", version = "0.8.15" }
deepseek-state = { path = "../state", version = "0.8.15" }
deepseek-tools = { path = "../tools", version = "0.8.15" }
serde.workspace = true
serde_json.workspace = true
tokio.workspace = true
+7 -7
View File
@@ -14,13 +14,13 @@ path = "src/main.rs"
anyhow.workspace = true
clap.workspace = true
clap_complete.workspace = true
deepseek-agent = { path = "../agent", version = "0.8.14" }
deepseek-app-server = { path = "../app-server", version = "0.8.14" }
deepseek-config = { path = "../config", version = "0.8.14" }
deepseek-execpolicy = { path = "../execpolicy", version = "0.8.14" }
deepseek-mcp = { path = "../mcp", version = "0.8.14" }
deepseek-secrets = { path = "../secrets", version = "0.8.14" }
deepseek-state = { path = "../state", version = "0.8.14" }
deepseek-agent = { path = "../agent", version = "0.8.15" }
deepseek-app-server = { path = "../app-server", version = "0.8.15" }
deepseek-config = { path = "../config", version = "0.8.15" }
deepseek-execpolicy = { path = "../execpolicy", version = "0.8.15" }
deepseek-mcp = { path = "../mcp", version = "0.8.15" }
deepseek-secrets = { path = "../secrets", version = "0.8.15" }
deepseek-state = { path = "../state", version = "0.8.15" }
chrono.workspace = true
dirs.workspace = true
serde.workspace = true
+1 -1
View File
@@ -8,7 +8,7 @@ description = "Config schema and precedence model for DeepSeek workspace archite
[dependencies]
anyhow.workspace = true
deepseek-secrets = { path = "../secrets", version = "0.8.14" }
deepseek-secrets = { path = "../secrets", version = "0.8.15" }
dirs.workspace = true
serde.workspace = true
toml.workspace = true
+8 -8
View File
@@ -9,13 +9,13 @@ description = "Core runtime boundaries for DeepSeek workspace architecture"
[dependencies]
anyhow.workspace = true
chrono.workspace = true
deepseek-agent = { path = "../agent", version = "0.8.14" }
deepseek-config = { path = "../config", version = "0.8.14" }
deepseek-execpolicy = { path = "../execpolicy", version = "0.8.14" }
deepseek-hooks = { path = "../hooks", version = "0.8.14" }
deepseek-mcp = { path = "../mcp", version = "0.8.14" }
deepseek-protocol = { path = "../protocol", version = "0.8.14" }
deepseek-state = { path = "../state", version = "0.8.14" }
deepseek-tools = { path = "../tools", version = "0.8.14" }
deepseek-agent = { path = "../agent", version = "0.8.15" }
deepseek-config = { path = "../config", version = "0.8.15" }
deepseek-execpolicy = { path = "../execpolicy", version = "0.8.15" }
deepseek-hooks = { path = "../hooks", version = "0.8.15" }
deepseek-mcp = { path = "../mcp", version = "0.8.15" }
deepseek-protocol = { path = "../protocol", version = "0.8.15" }
deepseek-state = { path = "../state", version = "0.8.15" }
deepseek-tools = { path = "../tools", version = "0.8.15" }
serde_json.workspace = true
uuid.workspace = true
+1 -1
View File
@@ -8,5 +8,5 @@ description = "Execution policy and approval model parity for DeepSeek workspace
[dependencies]
anyhow.workspace = true
deepseek-protocol = { path = "../protocol", version = "0.8.14" }
deepseek-protocol = { path = "../protocol", version = "0.8.15" }
serde.workspace = true
+1 -1
View File
@@ -10,7 +10,7 @@ description = "Hook dispatch and notifications parity for DeepSeek workspace arc
anyhow.workspace = true
async-trait.workspace = true
chrono.workspace = true
deepseek-protocol = { path = "../protocol", version = "0.8.14" }
deepseek-protocol = { path = "../protocol", version = "0.8.15" }
reqwest.workspace = true
serde.workspace = true
serde_json.workspace = true
+1 -1
View File
@@ -9,7 +9,7 @@ description = "Tool invocation lifecycle, schema validation, and scheduler paral
[dependencies]
anyhow.workspace = true
async-trait.workspace = true
deepseek-protocol = { path = "../protocol", version = "0.8.14" }
deepseek-protocol = { path = "../protocol", version = "0.8.15" }
serde.workspace = true
serde_json.workspace = true
tokio.workspace = true
+2 -2
View File
@@ -21,8 +21,8 @@ path = "src/main.rs"
[dependencies]
anyhow = "1.0.100"
arboard = "3.4"
deepseek-secrets = { path = "../secrets", version = "0.8.14" }
deepseek-tools = { path = "../tools", version = "0.8.14" }
deepseek-secrets = { path = "../secrets", version = "0.8.15" }
deepseek-tools = { path = "../tools", version = "0.8.15" }
schemaui = { version = "0.12.0", default-features = false, optional = true }
async-stream = "0.3.6"
async-trait = "0.1"
+2 -2
View File
@@ -1,7 +1,7 @@
{
"name": "deepseek-tui",
"version": "0.8.14",
"deepseekBinaryVersion": "0.8.14",
"version": "0.8.15",
"deepseekBinaryVersion": "0.8.15",
"description": "Install and run deepseek and deepseek-tui binaries from GitHub release artifacts.",
"author": "Hmbown",
"license": "MIT",