diff --git a/CHANGELOG.md b/CHANGELOG.md index dfd62391..99d7ad75 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -72,6 +72,101 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 on the title. *Thanks to [@Agent-Skill-007](https://github.com/Agent-Skill-007) for this PR.* +## [0.8.12] - 2026-05-05 + +A feature release built on the v0.8.11 cache-maxing foundation: 20 community +PRs merged, covering reasoning-effort automation, V4 FIM edits, bash-arity +execpolicy, skill-registry sync, vim composer mode, large-tool-output routing, +pluggable sandbox backends, layered permission rulesets, and cache-aware +resident sub-agents. No breaking changes. + +### Added +- **Reasoning-effort auto mode** (#669) — `reasoning_effort = "auto"` inspects + the last user message for keywords (debug/error → Max, search/lookup → Low, + default → High) and resolves the tier before each API request. Sub-agents + always get Low. +- **FIM edit tool for V4 /beta** (#668) — `fim_edit` tool sends + fill-in-the-middle requests to DeepSeek's `/beta` endpoint for surgical code + edits. +- **Bash arity dictionary** (#655) — `auto_allow = ["git status"]` now matches + `git status -s` but NOT `git push`. The arity dictionary knows command + structure for git, cargo, npm, yarn, pnpm, docker, kubectl, aws, make, and + others. Legacy flat prefix matching still works for unlisted commands. +- **Unified slash-command namespace** (#661) — user-defined commands in + `~/.deepseek/commands/` support `$1`, `$2`, `$ARGUMENTS` template + substitution. User commands override built-in commands. +- **Skill registry sync** (#654) — `/skills sync` fetches the community skill + registry and installs/updates all listed skills. Network-gated by the + existing `[network]` policy. +- **Vim modal editing in composer** (#659) — `vim.insert_mode` / `vim.normal_mode` + settings enable modal editing in the message composer with standard Vim + keybindings. +- **Separate tui.toml** (#657) — theme colors and keybind overrides can live in + `~/.deepseek/tui.toml` alongside the main `config.toml`. *Note: file format + is defined but not yet loaded at startup — wiring deferred to v0.8.13.* +- **Large-tool-output routing** (#658) — tool results exceeding a configurable + token threshold are routed through a workshop with truncated previews, + protecting the parent context window. Synthesis is currently truncation-only; + V4-Flash sub-agent synthesis deferred to follow-up. +- **Pluggable sandbox backends** (#645) — a `SandboxBackend` trait and + Alibaba OpenSandbox HTTP adapter let `exec_shell` route commands to a remote + sandbox instead of spawning locally. Config keys: `sandbox_backend`, + `sandbox_url`, `sandbox_api_key`. +- **Layered permission rulesets** (#653) — `ExecPolicyEngine` supports + builtin, agent, and user-priority layers for allow/deny prefix rules. + Deny-always-wins semantics. +- **Cache-aware resident sub-agents** (#660) — sub-agents spawned with + `resident_file` prepend the file contents to their system prefix for V4 + prefix-cache locality. A global lease table prevents two agents from holding + a resident lease on the same file simultaneously. Leases are released on + agent completion. +- **Context-limit handoff** (#667) — engine-level support for replacing + routine compaction with a `.deepseek/handoff.md` file write when context + pressure triggers. *Note: config knob removed pending implementation.* +- **LSP auto-attach diagnostics** (#656) — edit results now include post-edit + diagnostics via the engine-level LSP hooks path. + +### Docs +- **SECURITY.md** (#648) — vulnerability reporting policy and supported + versions. +- **CODE_OF_CONDUCT.md** (#686) — Contributor Covenant v2.1. *Thanks to + [@zichen0116](https://github.com/zichen0116) for this PR.* +- **zh-Hans locale activation docs** (#652) — README.zh-CN.md and + config.example.toml now document `locale = "zh-Hans"`. + +### Fixed +- **Color::Reset across all UI widgets** (#651, #671) — replaced hardcoded + `Color::Black` and `Color::Rgb(18, 29, 39)` backgrounds with `Color::Reset` + so the TUI respects the terminal's actual background color on light-themed + and non-standard terminals. +- **Windows MessageBeep** (#646) — `notify_done_to` now calls `MessageBeep` on + Windows when BEL method is selected. +- **truncate_id optimization** (#649) — replaced manual string slicing with a + shared `truncate_id` helper across session, picker, and UI call sites. + +### Maintenance +- Removed dead `prefer_handoff` field from `CompactionConfig` — config knob + existed but zero code paths consulted it (#667). +- Removed dead `use_terminal_colors` field from `TuiConfig` — no rendering + code read the value (#671). +- Fixed `expect()` panic risk in `OpenSandboxBackend::new()` — now returns + `Result` (#645). +- Fixed broken `section_bg` test assertion after Color::Reset migration (#651). +- Fixed `resolve_prefixes` docstring to accurately describe deny-always-wins + behavior (#653). +- Wired `create_backend()` into `Engine::build_tool_context` — sandbox backend + was defined but never activated (#645). +- Wired resident lease release on agent completion/cancellation/failure (#660). + +### Contributors + +First-time contributor to this release: **@zichen0116** (#686). Welcome — and +thank you. + +Bulk community contributions by [@merchloubna70-dot](https://github.com/merchloubna70-dot) +(#645–#681, 28 PRs spanning features, fixes, and VS Code extension scaffolding). +*Thank you for the remarkable volume and quality of work.* + ## [0.8.10] - 2026-05-04 A patch release: hotfixes, small UX polish, and four whalescale-unblocking diff --git a/Cargo.lock b/Cargo.lock index ad243378..e3385f6a 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1080,7 +1080,7 @@ dependencies = [ [[package]] name = "deepseek-agent" -version = "0.8.11" +version = "0.8.12" dependencies = [ "deepseek-config", "serde", @@ -1088,7 +1088,7 @@ dependencies = [ [[package]] name = "deepseek-app-server" -version = "0.8.11" +version = "0.8.12" dependencies = [ "anyhow", "axum", @@ -1110,7 +1110,7 @@ dependencies = [ [[package]] name = "deepseek-config" -version = "0.8.11" +version = "0.8.12" dependencies = [ "anyhow", "deepseek-secrets", @@ -1122,7 +1122,7 @@ dependencies = [ [[package]] name = "deepseek-core" -version = "0.8.11" +version = "0.8.12" dependencies = [ "anyhow", "chrono", @@ -1140,7 +1140,7 @@ dependencies = [ [[package]] name = "deepseek-execpolicy" -version = "0.8.11" +version = "0.8.12" dependencies = [ "anyhow", "deepseek-protocol", @@ -1149,7 +1149,7 @@ dependencies = [ [[package]] name = "deepseek-hooks" -version = "0.8.11" +version = "0.8.12" dependencies = [ "anyhow", "async-trait", @@ -1163,7 +1163,7 @@ dependencies = [ [[package]] name = "deepseek-mcp" -version = "0.8.11" +version = "0.8.12" dependencies = [ "anyhow", "serde", @@ -1172,7 +1172,7 @@ dependencies = [ [[package]] name = "deepseek-protocol" -version = "0.8.11" +version = "0.8.12" dependencies = [ "serde", "serde_json", @@ -1180,7 +1180,7 @@ dependencies = [ [[package]] name = "deepseek-secrets" -version = "0.8.11" +version = "0.8.12" dependencies = [ "dirs", "keyring", @@ -1193,7 +1193,7 @@ dependencies = [ [[package]] name = "deepseek-state" -version = "0.8.11" +version = "0.8.12" dependencies = [ "anyhow", "chrono", @@ -1205,7 +1205,7 @@ dependencies = [ [[package]] name = "deepseek-tools" -version = "0.8.11" +version = "0.8.12" dependencies = [ "anyhow", "async-trait", @@ -1218,7 +1218,7 @@ dependencies = [ [[package]] name = "deepseek-tui" -version = "0.8.11" +version = "0.8.12" dependencies = [ "anyhow", "arboard", @@ -1277,7 +1277,7 @@ dependencies = [ [[package]] name = "deepseek-tui-cli" -version = "0.8.11" +version = "0.8.12" dependencies = [ "anyhow", "chrono", @@ -1301,7 +1301,7 @@ dependencies = [ [[package]] name = "deepseek-tui-core" -version = "0.8.11" +version = "0.8.12" [[package]] name = "deranged" diff --git a/README.md b/README.md index 6abbaf5a..6d7135ac 100644 --- a/README.md +++ b/README.md @@ -163,17 +163,24 @@ SGLANG_BASE_URL="http://localhost:30000/v1" deepseek --provider sglang --model d --- -## What's New In v0.8.11 +## What's New In v0.8.12 -A targeted patch for the V4 cache-maxing overhaul plus three runtime fixes discovered in YOLO long-session dogfooding. [Full changelog](CHANGELOG.md). +A feature release with 20 community PRs on top of the v0.8.11 cache-maxing foundation. [Full changelog](CHANGELOG.md). -- **Cache-maxing prompt path for DeepSeek V4** — the engine skips system-prompt reassembly when the stable prefix is unchanged, moves the working-set summary out of the system prompt into per-turn metadata, and anchors the tool array with `cache_control: ephemeral`. Net effect: fewer prefix rewrites, higher cache-hit rates, lower cost per turn. -- **500K token compaction floor** — automatic compaction refuses below 500K tokens; manual `/compact` still bypasses. The message-count trigger (a 128K-era heuristic) is removed — token budget is the sole auto-trigger. -- **`npm install` resilience** — retry with exponential backoff, per-attempt timeout + stall detector, `HTTPS_PROXY`/`HTTP_PROXY`/`NO_PROXY` support (pure Node, no new deps), and download progress to stderr. Driven by a community report from China where `npm install` took 18 minutes through a CN mirror. -- **YOLO sandbox dropped** — YOLO now uses DangerFullAccess (no sandbox), consistent with its auto-approval + trust mode posture. Previously, the WorkspaceWrite sandbox was intercepting legitimate outside-workspace writes. -- **Scroll lock preserved during live streaming** — scrolling up mid-stream no longer gets yanked back to the tail on the next chunk. The `user_scrolled_during_stream` lock now survives render-time clamping. -- **Capacity controller off by default** — the controller was silently clearing transcripts independent of token usage or `auto_compact` settings. Now defaults to disabled; opt-in via `capacity.enabled = true`. -- **README clarity pass** (#685) — title-cased headings, explicit prerequisites, China-friendly install variant. *Thanks to [@Agent-Skill-007](https://github.com/Agent-Skill-007) for this PR.* +- **Reasoning-effort auto mode** — `reasoning_effort = "auto"` picks the right tier from the prompt: debug/error → Max, search/lookup → Low, default → High +- **Bash arity dictionary** — `auto_allow = ["git status"]` matches `git status -s` but not `git push`. Knows git, cargo, npm, docker, kubectl, and more +- **Vim modal editing** — normal/insert mode in the composer with standard Vim keybindings +- **Skill registry sync** — `/skills sync` fetches and installs/updates the community registry +- **FIM edit tool** — surgical code edits via DeepSeek's `/beta` fill-in-the-middle endpoint +- **Large-tool-output routing** — outsized tool results get truncated previews with spillover, protecting parent context +- **Pluggable sandbox backends** — `exec_shell` can route to Alibaba OpenSandbox or other remote backends +- **Layered permission rulesets** — builtin/agent/user priority layers for execpolicy deny/allow rules +- **Cache-aware resident sub-agents** — file content prepended for V4 prefix-cache locality; global lease table +- **Unified slash-command namespace** — user commands with `$1`/`$2`/`$ARGUMENTS` templates +- **Color::Reset migration** — all hardcoded backgrounds replaced with `Color::Reset` for light-terminal support +- **New docs**: SECURITY.md (#648), CODE_OF_CONDUCT.md (#686), zh-Hans locale activation (#652) + +*28 community PRs by [@merchloubna70-dot](https://github.com/merchloubna70-dot). First-time contributor [@zichen0116](https://github.com/zichen0116) (#686).* ---