chore: release v0.8.2 — Windows build fix, npm offline, model-visible skills, zh-CN README

Bumps workspace, all internal path-deps, and npm wrapper (version +
deepseekBinaryVersion) from 0.8.1 → 0.8.2. Lockfile re-locked offline
to keep the registry index untouched.

Triggers auto-tag.yml on push, which creates v0.8.2 and fires
release.yml to build cross-platform binaries and draft the GitHub
Release. npm publish remains manual per CLAUDE.md release runbook.

Note: npm registry already has 0.8.2 published (with binaryVersion
0.8.1 from an earlier checkpoint). That release keeps working unchanged
because v0.8.1 binaries stay on GitHub. Repo state aligns to 0.8.2 so
the version-drift gate passes; next npm publish (which will need to be
0.8.3 since 0.8.2 is taken) will pick up binaryVersion=0.8.2 and pull
the new binaries.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
Hunter Bown
2026-05-01 01:41:47 -05:00
parent b969421b60
commit bf6d82e4ba
16 changed files with 94 additions and 55 deletions
+36
View File
@@ -7,6 +7,42 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
## [Unreleased]
## [0.8.2] - 2026-05-01
### Fixed
- **Windows release build (LNK1104)** — drop the `deepseek` shim binary in
`crates/tui` that 0.8.1 introduced for the bundled `cargo install`. It
produced a second `target/release/deepseek.exe` that collided with the
`deepseek-tui-cli` artifact during workspace builds; the second linker
invocation hit `LNK1104: cannot open file deepseek.exe` on Windows. The
cli crate is now the single source of `deepseek`; workspace default
members still produce both binaries (one per crate).
- **npm wrapper offline robustness** — `bin/deepseek(-tui).js` no longer
re-fetches the GitHub-hosted SHA-256 checksum manifest on every invocation.
When the binary is already installed and its `.version` marker matches the
package version, the wrapper trusts the local file. The manifest is fetched
lazily on actual download (first install or `DEEPSEEK_TUI_FORCE_DOWNLOAD=1`),
so GitHub flakes, captive portals, corporate proxies, and offline state no
longer break every command.
### Added
- **Model-visible skills block** — installed skills (name, description, file
path) are now exposed in the agent's system prompt under a `## Skills`
section, with progressive disclosure: bodies stay on disk, the model opens a
specific `SKILL.md` only when it decides to use that skill. Capped at a 12k
prompt budget with 512-char per-description truncation. Threaded through
`EngineConfig.skills_dir` so the TUI app, exec agent, and runtime thread
manager all populate it from `Config::skills_dir()`.
- **Simplified Chinese README** (`README.zh-CN.md`) with cross-link from the
English README.
### Changed
- **`cargo install` UX** — to install the canonical `deepseek` command,
`cargo install deepseek-tui-cli` (the historical path). The 0.8.1
one-command flow (`cargo install deepseek-tui` providing both binaries) is
reverted because it broke Windows release builds; install both packages
separately if you want the TUI binary too.
## [0.8.1] - 2026-05-01
### Fixed
Generated
+14 -14
View File
@@ -1011,7 +1011,7 @@ dependencies = [
[[package]]
name = "deepseek-agent"
version = "0.8.1"
version = "0.8.2"
dependencies = [
"deepseek-config",
"serde",
@@ -1019,7 +1019,7 @@ dependencies = [
[[package]]
name = "deepseek-app-server"
version = "0.8.1"
version = "0.8.2"
dependencies = [
"anyhow",
"axum",
@@ -1042,7 +1042,7 @@ dependencies = [
[[package]]
name = "deepseek-config"
version = "0.8.1"
version = "0.8.2"
dependencies = [
"anyhow",
"deepseek-secrets",
@@ -1055,7 +1055,7 @@ dependencies = [
[[package]]
name = "deepseek-core"
version = "0.8.1"
version = "0.8.2"
dependencies = [
"anyhow",
"chrono",
@@ -1074,7 +1074,7 @@ dependencies = [
[[package]]
name = "deepseek-execpolicy"
version = "0.8.1"
version = "0.8.2"
dependencies = [
"anyhow",
"deepseek-protocol",
@@ -1083,7 +1083,7 @@ dependencies = [
[[package]]
name = "deepseek-hooks"
version = "0.8.1"
version = "0.8.2"
dependencies = [
"anyhow",
"async-trait",
@@ -1097,7 +1097,7 @@ dependencies = [
[[package]]
name = "deepseek-mcp"
version = "0.8.1"
version = "0.8.2"
dependencies = [
"anyhow",
"deepseek-protocol",
@@ -1107,7 +1107,7 @@ dependencies = [
[[package]]
name = "deepseek-protocol"
version = "0.8.1"
version = "0.8.2"
dependencies = [
"serde",
"serde_json",
@@ -1115,7 +1115,7 @@ dependencies = [
[[package]]
name = "deepseek-secrets"
version = "0.8.1"
version = "0.8.2"
dependencies = [
"dirs",
"keyring",
@@ -1128,7 +1128,7 @@ dependencies = [
[[package]]
name = "deepseek-state"
version = "0.8.1"
version = "0.8.2"
dependencies = [
"anyhow",
"chrono",
@@ -1140,7 +1140,7 @@ dependencies = [
[[package]]
name = "deepseek-tools"
version = "0.8.1"
version = "0.8.2"
dependencies = [
"anyhow",
"async-trait",
@@ -1153,7 +1153,7 @@ dependencies = [
[[package]]
name = "deepseek-tui"
version = "0.8.1"
version = "0.8.2"
dependencies = [
"anyhow",
"arboard",
@@ -1214,7 +1214,7 @@ dependencies = [
[[package]]
name = "deepseek-tui-cli"
version = "0.8.1"
version = "0.8.2"
dependencies = [
"anyhow",
"chrono",
@@ -1237,7 +1237,7 @@ dependencies = [
[[package]]
name = "deepseek-tui-core"
version = "0.8.1"
version = "0.8.2"
[[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.1"
version = "0.8.2"
edition = "2024"
license = "MIT"
repository = "https://github.com/Hmbown/DeepSeek-TUI"
+4 -2
View File
@@ -59,10 +59,12 @@ replace-with = "tuna"
registry = "sparse+https://mirrors.tuna.tsinghua.edu.cn/crates.io-index/"
```
Then install the shipped binaries from the main package:
Then install the canonical `deepseek` dispatcher and (optionally) the
companion TUI binary:
```bash
cargo install deepseek-tui --locked
cargo install deepseek-tui-cli --locked # provides `deepseek`
cargo install deepseek-tui --locked # provides `deepseek-tui` (optional)
deepseek --version
```
+5 -4
View File
@@ -69,17 +69,18 @@ replace-with = "tuna"
registry = "sparse+https://mirrors.tuna.tsinghua.edu.cn/crates.io-index/"
```
然后从主包安装已发布的两个二进制文件
然后从对应的包安装
```bash
cargo install deepseek-tui --locked
cargo install deepseek-tui-cli --locked # 提供推荐入口 `deepseek`
cargo install deepseek-tui --locked # 可选:提供 TUI 伴随二进制 `deepseek-tui`
deepseek --version
deepseek doctor --json
```
`v0.8.1` 开始,`deepseek-tui` 这个主 Cargo 包会同时安装:
`v0.8.2` 起回到分包安装:
- `deepseek`:推荐使用的调度器入口。
- `deepseek-tui-cli`:推荐使用的调度器入口`deepseek`
- `deepseek-tui`:交互式 TUI 伴随二进制。
也可以直接从 [GitHub Releases](https://github.com/Hmbown/DeepSeek-TUI/releases) 下载预编译二进制。如果你有镜像后的 release 资产目录,也可以配合 `DEEPSEEK_TUI_RELEASE_BASE_URL` 使用 TUNA、rsproxy、腾讯云 COS 或阿里云 OSS 等镜像。
+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.1" }
deepseek-config = { path = "../config", version = "0.8.2" }
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.1" }
deepseek-config = { path = "../config", version = "0.8.1" }
deepseek-core = { path = "../core", version = "0.8.1" }
deepseek-execpolicy = { path = "../execpolicy", version = "0.8.1" }
deepseek-hooks = { path = "../hooks", version = "0.8.1" }
deepseek-mcp = { path = "../mcp", version = "0.8.1" }
deepseek-protocol = { path = "../protocol", version = "0.8.1" }
deepseek-state = { path = "../state", version = "0.8.1" }
deepseek-tools = { path = "../tools", version = "0.8.1" }
deepseek-agent = { path = "../agent", version = "0.8.2" }
deepseek-config = { path = "../config", version = "0.8.2" }
deepseek-core = { path = "../core", version = "0.8.2" }
deepseek-execpolicy = { path = "../execpolicy", version = "0.8.2" }
deepseek-hooks = { path = "../hooks", version = "0.8.2" }
deepseek-mcp = { path = "../mcp", version = "0.8.2" }
deepseek-protocol = { path = "../protocol", version = "0.8.2" }
deepseek-state = { path = "../state", version = "0.8.2" }
deepseek-tools = { path = "../tools", version = "0.8.2" }
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.1" }
deepseek-app-server = { path = "../app-server", version = "0.8.1" }
deepseek-config = { path = "../config", version = "0.8.1" }
deepseek-execpolicy = { path = "../execpolicy", version = "0.8.1" }
deepseek-mcp = { path = "../mcp", version = "0.8.1" }
deepseek-secrets = { path = "../secrets", version = "0.8.1" }
deepseek-state = { path = "../state", version = "0.8.1" }
deepseek-agent = { path = "../agent", version = "0.8.2" }
deepseek-app-server = { path = "../app-server", version = "0.8.2" }
deepseek-config = { path = "../config", version = "0.8.2" }
deepseek-execpolicy = { path = "../execpolicy", version = "0.8.2" }
deepseek-mcp = { path = "../mcp", version = "0.8.2" }
deepseek-secrets = { path = "../secrets", version = "0.8.2" }
deepseek-state = { path = "../state", version = "0.8.2" }
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.1" }
deepseek-secrets = { path = "../secrets", version = "0.8.2" }
dirs.workspace = true
serde.workspace = true
serde_json.workspace = true
+8 -8
View File
@@ -9,14 +9,14 @@ description = "Core runtime boundaries for DeepSeek workspace architecture"
[dependencies]
anyhow.workspace = true
chrono.workspace = true
deepseek-agent = { path = "../agent", version = "0.8.1" }
deepseek-config = { path = "../config", version = "0.8.1" }
deepseek-execpolicy = { path = "../execpolicy", version = "0.8.1" }
deepseek-hooks = { path = "../hooks", version = "0.8.1" }
deepseek-mcp = { path = "../mcp", version = "0.8.1" }
deepseek-protocol = { path = "../protocol", version = "0.8.1" }
deepseek-state = { path = "../state", version = "0.8.1" }
deepseek-tools = { path = "../tools", version = "0.8.1" }
deepseek-agent = { path = "../agent", version = "0.8.2" }
deepseek-config = { path = "../config", version = "0.8.2" }
deepseek-execpolicy = { path = "../execpolicy", version = "0.8.2" }
deepseek-hooks = { path = "../hooks", version = "0.8.2" }
deepseek-mcp = { path = "../mcp", version = "0.8.2" }
deepseek-protocol = { path = "../protocol", version = "0.8.2" }
deepseek-state = { path = "../state", version = "0.8.2" }
deepseek-tools = { path = "../tools", version = "0.8.2" }
serde_json.workspace = true
tokio.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.1" }
deepseek-protocol = { path = "../protocol", version = "0.8.2" }
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.1" }
deepseek-protocol = { path = "../protocol", version = "0.8.2" }
reqwest.workspace = true
serde.workspace = true
serde_json.workspace = true
+1 -1
View File
@@ -8,6 +8,6 @@ description = "MCP server lifecycle and tool proxy compatibility for DeepSeek wo
[dependencies]
anyhow.workspace = true
deepseek-protocol = { path = "../protocol", version = "0.8.1" }
deepseek-protocol = { path = "../protocol", version = "0.8.2" }
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.1" }
deepseek-protocol = { path = "../protocol", version = "0.8.2" }
serde.workspace = true
serde_json.workspace = true
tokio.workspace = true
+3 -3
View File
@@ -14,9 +14,9 @@ path = "src/main.rs"
[dependencies]
anyhow = "1.0.100"
arboard = "3.4"
deepseek-tui-cli = { path = "../cli", version = "0.8.1" }
deepseek-secrets = { path = "../secrets", version = "0.8.1" }
deepseek-tools = { path = "../tools", version = "0.8.1" }
deepseek-tui-cli = { path = "../cli", version = "0.8.2" }
deepseek-secrets = { path = "../secrets", version = "0.8.2" }
deepseek-tools = { path = "../tools", version = "0.8.2" }
async-stream = "0.3.6"
async-trait = "0.1"
bytes = "1.11.0"
+1 -1
View File
@@ -1,7 +1,7 @@
{
"name": "deepseek-tui",
"version": "0.8.2",
"deepseekBinaryVersion": "0.8.1",
"deepseekBinaryVersion": "0.8.2",
"description": "Install and run deepseek and deepseek-tui binaries from GitHub release artifacts.",
"author": "Hmbown",
"license": "MIT",