From bf6d82e4ba4d026a26457c54b7155813a69aa5ef Mon Sep 17 00:00:00 2001 From: Hunter Bown Date: Fri, 1 May 2026 01:41:47 -0500 Subject: [PATCH] =?UTF-8?q?chore:=20release=20v0.8.2=20=E2=80=94=20Windows?= =?UTF-8?q?=20build=20fix,=20npm=20offline,=20model-visible=20skills,=20zh?= =?UTF-8?q?-CN=20README?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 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) --- CHANGELOG.md | 36 +++++++++++++++++++++++++++++++++++ Cargo.lock | 28 +++++++++++++-------------- Cargo.toml | 2 +- README.md | 6 ++++-- README.zh-CN.md | 9 +++++---- crates/agent/Cargo.toml | 2 +- crates/app-server/Cargo.toml | 18 +++++++++--------- crates/cli/Cargo.toml | 14 +++++++------- crates/config/Cargo.toml | 2 +- crates/core/Cargo.toml | 16 ++++++++-------- crates/execpolicy/Cargo.toml | 2 +- crates/hooks/Cargo.toml | 2 +- crates/mcp/Cargo.toml | 2 +- crates/tools/Cargo.toml | 2 +- crates/tui/Cargo.toml | 6 +++--- npm/deepseek-tui/package.json | 2 +- 16 files changed, 94 insertions(+), 55 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index e5b029c8..12b10002 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -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 diff --git a/Cargo.lock b/Cargo.lock index b60da19d..fc3c19c7 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -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" diff --git a/Cargo.toml b/Cargo.toml index a860300d..7d75c363 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -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" diff --git a/README.md b/README.md index 332c632b..e261d78f 100644 --- a/README.md +++ b/README.md @@ -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 ``` diff --git a/README.zh-CN.md b/README.zh-CN.md index 9eadfc6d..c27d98fc 100644 --- a/README.zh-CN.md +++ b/README.zh-CN.md @@ -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 等镜像。 diff --git a/crates/agent/Cargo.toml b/crates/agent/Cargo.toml index d8506e98..0745d4b3 100644 --- a/crates/agent/Cargo.toml +++ b/crates/agent/Cargo.toml @@ -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 diff --git a/crates/app-server/Cargo.toml b/crates/app-server/Cargo.toml index 991dce75..d0e0623d 100644 --- a/crates/app-server/Cargo.toml +++ b/crates/app-server/Cargo.toml @@ -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 diff --git a/crates/cli/Cargo.toml b/crates/cli/Cargo.toml index fdf1b551..af286a6c 100644 --- a/crates/cli/Cargo.toml +++ b/crates/cli/Cargo.toml @@ -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 diff --git a/crates/config/Cargo.toml b/crates/config/Cargo.toml index d173c236..ea0c3151 100644 --- a/crates/config/Cargo.toml +++ b/crates/config/Cargo.toml @@ -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 diff --git a/crates/core/Cargo.toml b/crates/core/Cargo.toml index c734a9cf..c1aac52d 100644 --- a/crates/core/Cargo.toml +++ b/crates/core/Cargo.toml @@ -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 diff --git a/crates/execpolicy/Cargo.toml b/crates/execpolicy/Cargo.toml index df8a27a6..1891a5a6 100644 --- a/crates/execpolicy/Cargo.toml +++ b/crates/execpolicy/Cargo.toml @@ -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 diff --git a/crates/hooks/Cargo.toml b/crates/hooks/Cargo.toml index 8f44d8b2..0edef814 100644 --- a/crates/hooks/Cargo.toml +++ b/crates/hooks/Cargo.toml @@ -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 diff --git a/crates/mcp/Cargo.toml b/crates/mcp/Cargo.toml index 036c57a4..f05ce838 100644 --- a/crates/mcp/Cargo.toml +++ b/crates/mcp/Cargo.toml @@ -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 diff --git a/crates/tools/Cargo.toml b/crates/tools/Cargo.toml index fe3e0128..9edb91c8 100644 --- a/crates/tools/Cargo.toml +++ b/crates/tools/Cargo.toml @@ -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 diff --git a/crates/tui/Cargo.toml b/crates/tui/Cargo.toml index 926bb9c5..e880e936 100644 --- a/crates/tui/Cargo.toml +++ b/crates/tui/Cargo.toml @@ -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" diff --git a/npm/deepseek-tui/package.json b/npm/deepseek-tui/package.json index 57169b6c..1154b7ba 100644 --- a/npm/deepseek-tui/package.json +++ b/npm/deepseek-tui/package.json @@ -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",