chore: release v0.8.3

Bumps workspace, all internal path-deps, and npm wrapper (version +
deepseekBinaryVersion) from 0.8.2 → 0.8.3. Lockfile re-locked offline.
CHANGELOG entry summarizing the 0.8.3 lane: skills path bug fix,
privacy contraction, helpful missing-companion error (#258), engine
decomposition (#227), bridge/persistence/palette test gap closures,
crates.io badge, and 10 issue closures.

Local v0.8.3 verified at /tmp/deepseek-0.8.3-test/ before publish.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
Hunter Bown
2026-05-01 09:46:21 -05:00
parent a7e629ae4d
commit e620e75f99
14 changed files with 94 additions and 50 deletions
+44
View File
@@ -7,6 +7,50 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
## [Unreleased]
## [0.8.3] - 2026-05-01
### Fixed
- **Skills prompt referenced fabricated paths** — `render_available_skills_context`
rendered each skill's file as `<skills_dir>/<frontmatter-name>/SKILL.md`,
which did not exist when the directory name differed from the frontmatter
`name` (community installs, manually-placed skills). `Skill` now carries the
real path captured at discovery and renders that.
- **Missing-companion error was hostile to direct GitHub Release downloaders**
(#258) — replaced "Build workspace default members to install it" wall of
text with a concrete three-path checklist: `npm install -g deepseek-tui`,
`cargo install deepseek-tui-cli deepseek-tui --locked`, or downloading both
`deepseek-<platform>` AND `deepseek-tui-<platform>` from the same Release
page. `DEEPSEEK_TUI_BIN` stays as a power-user fallback.
### Added
- **Privacy: `$HOME` contracts to `~` in viewer-visible paths** — the TUI,
`deepseek doctor`, `deepseek setup`, and onboarding now contract the home
directory to `~` in every path shown on screen, so screenshots, screencasts,
and pasted help output do not leak the OS account name. Persisted state,
audit log, session checkpoints, and LLM-bound system prompts intentionally
keep absolute paths for full fidelity.
- **`crates.io` badge** alongside the CI and npm badges in both English and
Simplified Chinese READMEs.
- **Engine decomposition** (#227) — `core/engine.rs` is split into focused
submodules (`engine/{streaming,turn_loop,dispatch,tool_setup,tool_execution,tool_catalog,context,approval,capacity_flow,lsp_hooks,tests}.rs`).
No behavior change; preparation for the future agent-loop work.
### Tests
- RLM bridge: `batch_guard` extracted and tested for the empty-batch and
oversize-batch invariants; depth-guard fallback covered (partial #231).
- Persistence: schema-version rejection covered for `load_session`,
`load_offline_queue_state`, `runtime_threads::load_turn`,
`runtime_threads::load_item` (partial #233).
- Command palette: `[disabled]` server description tag (closes the
remaining #197 acceptance gap).
- Protocol-recovery contract tests now scan the engine submodules in
addition to `engine.rs` so the decomposition refactor doesn't silently
hide the fake-wrapper marker assertions.
### Issue triage
- 10 issues closed with verification commits cited (#247, #235, #197,
#250, #234, #243, #238, #236, #239, #195).
## [0.8.2] - 2026-05-01
### Fixed
Generated
+14 -14
View File
@@ -1011,7 +1011,7 @@ dependencies = [
[[package]]
name = "deepseek-agent"
version = "0.8.2"
version = "0.8.3"
dependencies = [
"deepseek-config",
"serde",
@@ -1019,7 +1019,7 @@ dependencies = [
[[package]]
name = "deepseek-app-server"
version = "0.8.2"
version = "0.8.3"
dependencies = [
"anyhow",
"axum",
@@ -1042,7 +1042,7 @@ dependencies = [
[[package]]
name = "deepseek-config"
version = "0.8.2"
version = "0.8.3"
dependencies = [
"anyhow",
"deepseek-secrets",
@@ -1055,7 +1055,7 @@ dependencies = [
[[package]]
name = "deepseek-core"
version = "0.8.2"
version = "0.8.3"
dependencies = [
"anyhow",
"chrono",
@@ -1074,7 +1074,7 @@ dependencies = [
[[package]]
name = "deepseek-execpolicy"
version = "0.8.2"
version = "0.8.3"
dependencies = [
"anyhow",
"deepseek-protocol",
@@ -1083,7 +1083,7 @@ dependencies = [
[[package]]
name = "deepseek-hooks"
version = "0.8.2"
version = "0.8.3"
dependencies = [
"anyhow",
"async-trait",
@@ -1097,7 +1097,7 @@ dependencies = [
[[package]]
name = "deepseek-mcp"
version = "0.8.2"
version = "0.8.3"
dependencies = [
"anyhow",
"deepseek-protocol",
@@ -1107,7 +1107,7 @@ dependencies = [
[[package]]
name = "deepseek-protocol"
version = "0.8.2"
version = "0.8.3"
dependencies = [
"serde",
"serde_json",
@@ -1115,7 +1115,7 @@ dependencies = [
[[package]]
name = "deepseek-secrets"
version = "0.8.2"
version = "0.8.3"
dependencies = [
"dirs",
"keyring",
@@ -1128,7 +1128,7 @@ dependencies = [
[[package]]
name = "deepseek-state"
version = "0.8.2"
version = "0.8.3"
dependencies = [
"anyhow",
"chrono",
@@ -1140,7 +1140,7 @@ dependencies = [
[[package]]
name = "deepseek-tools"
version = "0.8.2"
version = "0.8.3"
dependencies = [
"anyhow",
"async-trait",
@@ -1153,7 +1153,7 @@ dependencies = [
[[package]]
name = "deepseek-tui"
version = "0.8.2"
version = "0.8.3"
dependencies = [
"anyhow",
"arboard",
@@ -1214,7 +1214,7 @@ dependencies = [
[[package]]
name = "deepseek-tui-cli"
version = "0.8.2"
version = "0.8.3"
dependencies = [
"anyhow",
"chrono",
@@ -1237,7 +1237,7 @@ dependencies = [
[[package]]
name = "deepseek-tui-core"
version = "0.8.2"
version = "0.8.3"
[[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.2"
version = "0.8.3"
edition = "2024"
license = "MIT"
repository = "https://github.com/Hmbown/DeepSeek-TUI"
+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.2" }
deepseek-config = { path = "../config", version = "0.8.3" }
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.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" }
deepseek-agent = { path = "../agent", version = "0.8.3" }
deepseek-config = { path = "../config", version = "0.8.3" }
deepseek-core = { path = "../core", version = "0.8.3" }
deepseek-execpolicy = { path = "../execpolicy", version = "0.8.3" }
deepseek-hooks = { path = "../hooks", version = "0.8.3" }
deepseek-mcp = { path = "../mcp", version = "0.8.3" }
deepseek-protocol = { path = "../protocol", version = "0.8.3" }
deepseek-state = { path = "../state", version = "0.8.3" }
deepseek-tools = { path = "../tools", version = "0.8.3" }
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.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" }
deepseek-agent = { path = "../agent", version = "0.8.3" }
deepseek-app-server = { path = "../app-server", version = "0.8.3" }
deepseek-config = { path = "../config", version = "0.8.3" }
deepseek-execpolicy = { path = "../execpolicy", version = "0.8.3" }
deepseek-mcp = { path = "../mcp", version = "0.8.3" }
deepseek-secrets = { path = "../secrets", version = "0.8.3" }
deepseek-state = { path = "../state", version = "0.8.3" }
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.2" }
deepseek-secrets = { path = "../secrets", version = "0.8.3" }
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.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" }
deepseek-agent = { path = "../agent", version = "0.8.3" }
deepseek-config = { path = "../config", version = "0.8.3" }
deepseek-execpolicy = { path = "../execpolicy", version = "0.8.3" }
deepseek-hooks = { path = "../hooks", version = "0.8.3" }
deepseek-mcp = { path = "../mcp", version = "0.8.3" }
deepseek-protocol = { path = "../protocol", version = "0.8.3" }
deepseek-state = { path = "../state", version = "0.8.3" }
deepseek-tools = { path = "../tools", version = "0.8.3" }
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.2" }
deepseek-protocol = { path = "../protocol", version = "0.8.3" }
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.2" }
deepseek-protocol = { path = "../protocol", version = "0.8.3" }
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.2" }
deepseek-protocol = { path = "../protocol", version = "0.8.3" }
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.2" }
deepseek-protocol = { path = "../protocol", version = "0.8.3" }
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.2" }
deepseek-secrets = { path = "../secrets", version = "0.8.2" }
deepseek-tools = { path = "../tools", version = "0.8.2" }
deepseek-tui-cli = { path = "../cli", version = "0.8.3" }
deepseek-secrets = { path = "../secrets", version = "0.8.3" }
deepseek-tools = { path = "../tools", version = "0.8.3" }
async-stream = "0.3.6"
async-trait = "0.1"
bytes = "1.11.0"
+2 -2
View File
@@ -1,7 +1,7 @@
{
"name": "deepseek-tui",
"version": "0.8.2",
"deepseekBinaryVersion": "0.8.2",
"version": "0.8.3",
"deepseekBinaryVersion": "0.8.3",
"description": "Install and run deepseek and deepseek-tui binaries from GitHub release artifacts.",
"author": "Hmbown",
"license": "MIT",