From b5b4d49324e121469de08a730300d3af93b3dafe Mon Sep 17 00:00:00 2001 From: Hunter Bown Date: Mon, 4 May 2026 11:59:55 -0500 Subject: [PATCH] docs: refresh README + zh-CN README for v0.8.10 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Add "What's new in v0.8.10" section covering hotfixes, runtime API expansion, cache-aware compaction, glibc 2.28 baseline, markdown rendering overhaul, and platform fixes - Remove verbose per-version sections (v0.7.6 through v0.8.8) — those belong in CHANGELOG.md, both READMEs now link to it - Condense "How it's wired" architecture blurb to 2 sentences - Restructure quickstart for flow: npm install → API key → platform notes → China mirror → providers - Trim Linux ARM64 section, drop ancient v0.8.7 workaround - Drop redundant /attach shortcut (covered by @path) - Tighten configuration env table to one row per variable - Cut English skills section (numbered publish workflow duplicated from SKILL.md) - Add 5 missing docs to Documentation table (INSTALL, MEMORY, SUBAGENTS, KEYBINDINGS, CHANGELOG) - Bring zh-CN README to parity: add Key Features, How it's wired, Thanks, Star History; preserve locale-switching guide English: 324 lines (was ~1090). Chinese: 333 lines (was ~520, now content-equivalent to English). --- README.md | 623 +++++++++++------------------------------------- README.zh-CN.md | 318 +++++++++++------------- 2 files changed, 272 insertions(+), 669 deletions(-) diff --git a/README.md b/README.md index 67ce92a1..26a70371 100644 --- a/README.md +++ b/README.md @@ -22,43 +22,34 @@ npm i -g deepseek-tui DeepSeek TUI is a coding agent that runs entirely in your terminal. It gives DeepSeek's frontier models direct access to your workspace — reading and editing files, running shell commands, searching the web, managing git, and orchestrating sub-agents — all through a fast, keyboard-driven TUI. -**Built for DeepSeek V4** (`deepseek-v4-pro` / `deepseek-v4-flash`) with 1M-token context windows and native thinking-mode (chain-of-thought) streaming. See the model's reasoning unfold in real time as it works through your tasks. +**Built for DeepSeek V4** (`deepseek-v4-pro` / `deepseek-v4-flash`) with 1M-token context windows and native thinking-mode (chain-of-thought) streaming. ### Key Features -- **Native RLM** (`rlm_query` tool) — fans out 1–16 cheap `deepseek-v4-flash` children in parallel against the existing DeepSeek client for batched analysis, decomposition, or parallel reasoning -- **Thinking-mode streaming** — shows DeepSeek's chain-of-thought as it reasons about your code +- **Native RLM** (`rlm_query`) — fans out 1–16 cheap `deepseek-v4-flash` children in parallel for batched analysis and parallel reasoning, all against the existing API client +- **Thinking-mode streaming** — watch the model's chain-of-thought unfold in real time as it works through your tasks - **Full tool suite** — file ops, shell execution, git, web search/browse, apply-patch, sub-agents, MCP servers -- **1M-token context** — automatic intelligent compaction when context fills up -- **Three interaction modes** — Plan (read-only explore), Agent (interactive with approval), YOLO (auto-approved). Decomposition-first system prompts teach the model to `checklist_write`, `update_plan`, and spawn sub-agents before acting -- **Reasoning-effort tiers** — cycle through `off → high → max` with Shift+Tab -- **Session save/resume** — checkpoint and resume long sessions +- **1M-token context** — automatic intelligent compaction when context fills up; prefix-cache aware for cost efficiency +- **Three modes** — Plan (read-only explore), Agent (interactive with approval), YOLO (auto-approved) +- **Reasoning-effort tiers** — cycle through `off → high → max` with `Shift+Tab` +- **Session save/resume** — checkpoint and resume long-running sessions - **Workspace rollback** — side-git pre/post-turn snapshots with `/restore` and `revert_turn`, without touching your repo's `.git` +- **Durable task queue** — background tasks survive restarts; think scheduled automation, long-running reviews - **HTTP/SSE runtime API** — `deepseek serve --http` for headless agent workflows - **MCP protocol** — connect to Model Context Protocol servers for extended tooling; see [docs/MCP.md](docs/MCP.md) -- **Live cost tracking** — per-turn and session-level token usage and cost estimates -- **Dark theme** — DeepSeek-blue palette +- **LSP diagnostics** — inline error/warning surfacing after every edit via rust-analyzer, pyright, typescript-language-server, gopls, clangd +- **User memory** — optional persistent note file injected into the system prompt for cross-session preferences +- **Localized UI** — `en`, `ja`, `zh-Hans`, `pt-BR` with auto-detection +- **Live cost tracking** — per-turn and session-level token usage and cost estimates; cache hit/miss breakdown +- **Skills system** — composable, installable instruction packs from GitHub with no backend service required --- ## How it's wired -DeepSeek TUI's architecture follows a **dispatcher → TUI → engine → tools** pattern. -The `deepseek` CLI binary is a lightweight dispatcher that parses subcommands and -delegates to the `deepseek-tui` companion binary for interactive sessions. The TUI -runs a **ratatui**-based interface that communicates with an async engine executing -an agent loop: user input flows to the LLM via a streaming client (OpenAI-compatible -Chat Completions), tool calls are extracted from the response and dispatched through -a typed tool registry (shell, file ops, git, web, sub-agents, MCP), and results -stream back into the transcript. +`deepseek` (dispatcher CLI) → `deepseek-tui` (companion binary) → ratatui interface ↔ async engine ↔ OpenAI-compatible streaming client. Tool calls route through a typed registry (shell, file ops, git, web, sub-agents, MCP, RLM) and results stream back into the transcript. The engine manages session state, turn tracking, the durable task queue, and an LSP subsystem that feeds post-edit diagnostics into the model's context before the next reasoning step. -Behind the scenes, the engine manages session state, turn tracking, and a durable -task queue. The LSP subsystem (`crates/tui/src/lsp/`) provides post-edit diagnostics -by spawning language servers (rust-analyzer, pyright, etc.) and injecting errors -into the model's context before the next reasoning step. A recursive language model -(RLM) subsystem gives the agent a sandboxed Python REPL for batch classification -and sub-LLM orchestration. See [docs/ARCHITECTURE.md](docs/ARCHITECTURE.md) for -the full walkthrough. +See [docs/ARCHITECTURE.md](docs/ARCHITECTURE.md) for the full walkthrough. --- @@ -69,33 +60,30 @@ npm install -g deepseek-tui deepseek ``` -Prebuilt binaries are published for **Linux x64**, **Linux ARM64** (v0.8.8+), -**macOS x64**, **macOS ARM64**, and **Windows x64**. For everything else — -musl, riscv64, FreeBSD, etc. — see [Build from source](#install-from-source) -below or the full [docs/INSTALL.md](docs/INSTALL.md) walkthrough. +Prebuilt binaries are published for **Linux x64**, **Linux ARM64** (v0.8.8+), **macOS x64**, **macOS ARM64**, and **Windows x64**. For other targets (musl, riscv64, FreeBSD, etc.), see [Install from source](#install-from-source) or [docs/INSTALL.md](docs/INSTALL.md). + +On first launch you'll be prompted for your [DeepSeek API key](https://platform.deepseek.com/api_keys). The key is saved to `~/.deepseek/config.toml` so it works from any directory without OS credential prompts. + +You can also set it ahead of time: + +```bash +deepseek auth set --provider deepseek # saves to ~/.deepseek/config.toml + +export DEEPSEEK_API_KEY="YOUR_KEY" # env var alternative; use ~/.zshenv for non-interactive shells +deepseek + +deepseek doctor # verify setup +``` + +> To rotate or remove a saved key: `deepseek auth clear --provider deepseek`. ### Linux ARM64 (Raspberry Pi, Asahi, Graviton, HarmonyOS PC) -`npm i -g deepseek-tui` works on glibc-based ARM64 Linux from **v0.8.8** -onward. If you're stuck on v0.8.7 or earlier (where you'll see -`Unsupported architecture: arm64`), upgrade or use `cargo install`: - -```bash -# requires Rust 1.85+ (https://rustup.rs) -cargo install deepseek-tui-cli --locked # provides `deepseek` -cargo install deepseek-tui --locked # provides `deepseek-tui` -``` - -You can also download `deepseek-linux-arm64` and `deepseek-tui-linux-arm64` -directly from the [Releases page](https://github.com/Hmbown/DeepSeek-TUI/releases) -and drop both side by side into a directory on your `PATH`. Cross-compiling -from x64 to ARM64 is documented in -[docs/INSTALL.md](docs/INSTALL.md#cross-compiling-from-x64-to-arm64-linux). +`npm i -g deepseek-tui` works on glibc-based ARM64 Linux from v0.8.8 onward. You can also download prebuilt binaries from the [Releases page](https://github.com/Hmbown/DeepSeek-TUI/releases) and place them side by side on your `PATH`. ### China / mirror-friendly install -If GitHub or npm downloads are slow from mainland China, install the Rust -crates through a Cargo registry mirror: +If GitHub or npm downloads are slow from mainland China, use a Cargo registry mirror: ```toml # ~/.cargo/config.toml @@ -106,8 +94,7 @@ replace-with = "tuna" registry = "sparse+https://mirrors.tuna.tsinghua.edu.cn/crates.io-index/" ``` -Then install the canonical `deepseek` dispatcher and the companion TUI binary -(both are required — the dispatcher delegates to the TUI runtime): +Then install both binaries (the dispatcher delegates to the TUI at runtime): ```bash cargo install deepseek-tui-cli --locked # provides `deepseek` @@ -115,66 +102,17 @@ cargo install deepseek-tui --locked # provides `deepseek-tui` deepseek --version ``` -You can also download prebuilt binaries directly from the -[GitHub Releases](https://github.com/Hmbown/DeepSeek-TUI/releases) page when -GitHub release assets are reachable. TUNA, rsproxy, Tencent COS, or Aliyun OSS -mirrors can also be used with `DEEPSEEK_TUI_RELEASE_BASE_URL` when a mirrored -release-asset directory is available. - -On first launch you'll be prompted for your [DeepSeek API key](https://platform.deepseek.com/api_keys). The TUI saves it to your user config at `~/.deepseek/config.toml` so it works from every folder without OS credential prompts. - -You can also set it ahead of time: - -```bash -# Recommended — saves to ~/.deepseek/config.toml; works everywhere -# (interactive shells, IDE terminals, scripts, cron): -deepseek auth set --provider deepseek - -# Env var alternative — note that on zsh, exports in ~/.zshrc only -# reach interactive shells. Put it in ~/.zshenv if you want it in -# every context (login shells, IDEs, scripts): -export DEEPSEEK_API_KEY="YOUR_DEEPSEEK_API_KEY" -deepseek - -# Verify which source the binary is reading: -deepseek doctor -``` - -> To rotate or remove a saved key, run -> `deepseek auth clear --provider deepseek` (or `deepseek logout` for -> the legacy alias), then run `deepseek auth set --provider deepseek` -> again. - -### Using NVIDIA NIM - -```bash -deepseek auth set --provider nvidia-nim --api-key "YOUR_NVIDIA_API_KEY" -deepseek --provider nvidia-nim - -# or per-process: -DEEPSEEK_PROVIDER=nvidia-nim NVIDIA_API_KEY="..." deepseek -``` - -### Other DeepSeek V4 providers - -```bash -deepseek auth set --provider fireworks --api-key "YOUR_FIREWORKS_API_KEY" -deepseek --provider fireworks --model deepseek-v4-pro - -# SGLang is self-hosted; auth is optional for localhost deployments. -SGLANG_BASE_URL="http://localhost:30000/v1" deepseek --provider sglang --model deepseek-v4-flash -``` +Prebuilt binaries can also be downloaded from [GitHub Releases](https://github.com/Hmbown/DeepSeek-TUI/releases). Use `DEEPSEEK_TUI_RELEASE_BASE_URL` for mirrored release assets.
Install from source -Works on any Tier-1 Rust target — including Linux musl/riscv64, FreeBSD, and -ARM64 distros that pre-date our prebuilt binaries. +Works on any Tier-1 Rust target — including musl, riscv64, FreeBSD, and older ARM64 distros. ```bash -# Linux build deps (Debian/Ubuntu/openEuler/Kylin): +# Linux build deps (Debian/Ubuntu/RHEL): # sudo apt-get install -y build-essential pkg-config libdbus-1-dev -# # RHEL family: sudo dnf install -y gcc make pkgconf-pkg-config dbus-devel +# sudo dnf install -y gcc make pkgconf-pkg-config dbus-devel git clone https://github.com/Hmbown/DeepSeek-TUI.git cd DeepSeek-TUI @@ -183,382 +121,90 @@ cargo install --path crates/cli --locked # requires Rust 1.85+; provides `deep cargo install --path crates/tui --locked # provides `deepseek-tui` ``` -Both binaries are required — the `deepseek` dispatcher delegates to -`deepseek-tui` at runtime. Cross-compilation, mirror, and platform-specific -notes live in [docs/INSTALL.md](docs/INSTALL.md). +Both binaries are required. Cross-compilation and platform-specific notes: [docs/INSTALL.md](docs/INSTALL.md).
---- +### Other API providers -## What's new in v0.8.8 +```bash +# NVIDIA NIM +deepseek auth set --provider nvidia-nim --api-key "YOUR_NVIDIA_API_KEY" +deepseek --provider nvidia-nim -A stabilization-focused release: a thick band of UX polish on top of the v0.8.6 / v0.8.7 base, plus runtime fixes for the rough edges that surfaced in production sessions. No model or API changes; every existing config and session keeps working. +# Fireworks +deepseek auth set --provider fireworks --api-key "YOUR_FIREWORKS_API_KEY" +deepseek --provider fireworks --model deepseek-v4-pro -### 🪟 TUI polish - -- **Visual retry / backoff banner** when the upstream rate-limits or 5xxs, with a per-second countdown so a stalled session is obviously stalled instead of silently frozen ([#499](https://github.com/Hmbown/DeepSeek-TUI/issues/499)). -- **MCP health chip** in the footer — a coloured `MCP n/n` glyph reflects how many configured servers are actually reachable, hidden when no servers are configured ([#502](https://github.com/Hmbown/DeepSeek-TUI/issues/502)). -- **Tool-output spillover** routes full bodies to `~/.deepseek/tool_outputs/.txt` with a 32 KiB head visible in the cell; the existing details pager appends the full output so nothing is hidden, just paged ([#500](https://github.com/Hmbown/DeepSeek-TUI/issues/500)). -- **Multi-day duration formatting** — `humanize_duration` walks `s → m → h → d → w` and caps at two units, so a long-running session reads `2d 3h` instead of `188415s` ([#447](https://github.com/Hmbown/DeepSeek-TUI/issues/447)). -- **Cumulative `worked Nh Mm` footer chip** appears once a session crosses 60s, dropping first under narrow widths so it never shoves more important chips off-screen ([#448](https://github.com/Hmbown/DeepSeek-TUI/issues/448)). -- **OSC 8 hyperlinks** — URLs in the transcript are Cmd+click-openable on iTerm2, Terminal.app, Ghostty, Kitty, WezTerm, Alacritty, and modern gnome-terminal/konsole; legacy terminals just show the visible text ([#498](https://github.com/Hmbown/DeepSeek-TUI/issues/498)). -- **Inline diff rendering** for `edit_file` and `write_file` — tool results emit a unified diff at the head of the body, picked up by the diff-aware renderer with line numbers and coloured `+`/`-` gutters ([#505](https://github.com/Hmbown/DeepSeek-TUI/issues/505)). -- **Composer prompt stash** — Ctrl+S parks the current draft to `~/.deepseek/composer_stash.jsonl`, `/stash list` shows parked drafts, `/stash pop` restores LIFO, `/stash clear` wipes the file. Self-healing JSONL parser, 200-entry cap, multi-line drafts preserved ([#440](https://github.com/Hmbown/DeepSeek-TUI/issues/440)). -- **Slash-menu layout no longer jitters** the chat area as the matched-entry count changes mid-typing — reported on Windows 10 PowerShell + WSL where the per-cell write cost made the redraw visibly laggy. The composer now reserves its panel-max envelope for the whole slash/mention session. - -### ♿ Accessibility - -- **`NO_ANIMATIONS=1`** env var (also `1` / `true` / `yes` / `on`) forces `low_motion = true` and `fancy_animations = false` at startup regardless of saved settings; new `docs/ACCESSIBILITY.md` documents every motion / output knob ([#450](https://github.com/Hmbown/DeepSeek-TUI/issues/450)). -- **Keyboard-enhancement flags** pop on every shutdown path including panic, Ctrl+Z suspend, and external-editor invocation, so a crashed TUI never leaves your terminal in raw mode ([#443](https://github.com/Hmbown/DeepSeek-TUI/issues/443)/[#444](https://github.com/Hmbown/DeepSeek-TUI/issues/444)). -- **Kitty keyboard protocol** (`DISAMBIGUATE_ESCAPE_CODES`) pushed at startup so kitty-protocol terminals report unambiguous events for Option/Alt-modified keys; legacy terminals are unaffected ([#442](https://github.com/Hmbown/DeepSeek-TUI/issues/442)). - -### 🤖 Agents / sub-agents - -- **Sub-agent cap raised 5 → 10** (configurable via `[subagents].max_concurrent`, hard ceiling 20). Completed agents no longer count against the running cap ([#509](https://github.com/Hmbown/DeepSeek-TUI/issues/509)). -- **Multi-agent fan-out UI freeze fixed** — `SharedSubAgentManager` is now `Arc>`; read paths take read locks instead of contending on a `Mutex` ([#510](https://github.com/Hmbown/DeepSeek-TUI/issues/510)). -- **Sub-agent output summarized** before being folded into the parent's context, so a child returning 100KB of evidence doesn't wreck the parent's window ([#511](https://github.com/Hmbown/DeepSeek-TUI/issues/511)). -- **`Implementer` + `Verifier` sub-agent roles** wired into `agent_spawn` / `agent_assign` schemas so the model surfaces them by name ([#404](https://github.com/Hmbown/DeepSeek-TUI/issues/404)). -- **`agent_list` defaults to current-session view** — prior sessions filtered out unless `include_archived=true` ([#405](https://github.com/Hmbown/DeepSeek-TUI/issues/405)). -- **Compact `agent_spawn` rendering** in live mode collapses to a single header line; transcript replay keeps the full block ([#409](https://github.com/Hmbown/DeepSeek-TUI/issues/409)). -- **`agent_swarm` / `spawn_agents_on_csv` / `/swarm`** removed in v0.8.5 — confirmed gone in this release; multi-child fanout is no longer a model-callable tool. - -### 🛠️ Workflows / extensibility - -- **`load_skill` model-callable tool** — takes a skill id, returns the SKILL.md body plus sibling companion-file list in one call. Available in Plan and Agent / Yolo modes ([#434](https://github.com/Hmbown/DeepSeek-TUI/issues/434)). -- **Cross-tool skill discovery** — skills catalogue and `load_skill` walk `.agents/skills`, `skills`, `.opencode/skills`, `.claude/skills`, and `~/.deepseek/skills` with first-wins precedence ([#432](https://github.com/Hmbown/DeepSeek-TUI/issues/432)). -- **`/hooks` read-only lifecycle hook listing** groups configured hooks by event with name / command preview / timeout / condition. Notes the global `[hooks].enabled` state. `/hooks events` lists every supported `HookEvent` value ([#460](https://github.com/Hmbown/DeepSeek-TUI/issues/460)). -- **Every `HookEvent` now has a live producer** — `tool_call_before` / `tool_call_after` / `message_submit` / `on_error` fire from the runtime in addition to the existing session-lifecycle and mode-change events. Hooks remain read-only observers in v0.8.8 ([#455](https://github.com/Hmbown/DeepSeek-TUI/issues/455)). -- **`instructions = [...]` config array** lets you stack additional system-prompt files; paths capped at 100 KiB each, project array replaces user array wholesale ([#454](https://github.com/Hmbown/DeepSeek-TUI/issues/454)). -- **`deepseek pr ` subcommand** fetches a PR's title / body / diff via `gh` and launches the TUI with a review prompt already in the composer. Codepoint-safe diff cap at 200 KiB; optional `--repo` / `--checkout` ([#451](https://github.com/Hmbown/DeepSeek-TUI/issues/451)). -- **User-memory MVP** (opt-in) — `~/.deepseek/memory.md` injected into the system prompt as a `` block; `# foo` typed in the composer appends a timestamped bullet without firing a turn; `/memory [show|path|clear|edit|help]` for inspection. Default off; enable with `[memory] enabled = true` or `DEEPSEEK_MEMORY=on`. See [docs/MEMORY.md](docs/MEMORY.md) for the full guide and examples ([#489](https://github.com/Hmbown/DeepSeek-TUI/issues/489)–[#493](https://github.com/Hmbown/DeepSeek-TUI/issues/493)). - -### 🔒 Security - -- **Project-config keys denied at workspace scope** — a malicious `./.deepseek/config.toml` can no longer override `api_key`, `base_url`, `provider`, or `mcp_config_path`. The loosest values (`approval_policy = "auto"`, `sandbox_mode = "danger-full-access"`) are also denied at project scope ([#417](https://github.com/Hmbown/DeepSeek-TUI/issues/417)). -- **`SSL_CERT_FILE` honoured** in the HTTPS client so corporate-CA / MITM-proxy users can connect — PEM bundle and DER fallback; failures log a warning and continue ([#418](https://github.com/Hmbown/DeepSeek-TUI/issues/418)). -- **Execpolicy heredoc parsing** — `normalize_command` strips heredoc bodies before shlex tokenization so `auto_allow = ["cat > file.txt"]` matches the heredoc form `cat < file.txt\nbody\nEOF`. Recognises `< **Known issues in v0.8.7 (fixed in v0.8.8):** -> - `deepseek update` fails with `no asset found for platform …` because the -> platform-string mapping in the self-updater uses `aarch64`/`x86_64` -> instead of the release artifact's `arm64`/`x64` -> ([#503](https://github.com/Hmbown/DeepSeek-TUI/issues/503)). -> - `npm i -g deepseek-tui` exits with `Unsupported architecture: arm64 on -> platform linux` on ARM64 Linux because v0.8.7 didn't publish a -> `deepseek-linux-arm64` asset. -> -> Until v0.8.8 ships, install via: -> ```bash -> # x64 Linux / macOS / Windows -> npm i -g deepseek-tui -> -> # ARM64 Linux (HarmonyOS, openEuler, Asahi, Raspberry Pi, Graviton, …) — -> # build from source with Cargo (Rust 1.85+): -> cargo install deepseek-tui-cli --locked # provides `deepseek` -> cargo install deepseek-tui --locked # provides `deepseek-tui` -> ``` - -Full changelog: [CHANGELOG.md](CHANGELOG.md). - -## What's new in v0.8.6 - -### 📝 AGENTS.md bootstrap (`/init`) - -`/init` walks the workspace, auto-detects the project type (Cargo.toml, -package.json, pyproject.toml, etc.), and writes a starter `AGENTS.md` with -build/test commands, workspace layout, and conventions derived from `git log`. -Re-running shows a diff of the proposed update without overwriting changes. - -### 🔍 Inline LSP diagnostics - -After every `apply_patch`/`edit_file`/`write_file`, the engine sends a -`textDocument/didChange` to the LSP server and surfaces errors/warnings -inline in the tool result. Configurable via `/lsp on|off` and the -`[lsp]` config section. Currently supports rust-analyzer, pyright, -typescript-language-server, gopls, and clangd. - -### 🔄 Self-update (`deepseek update`) - -`deepseek update` fetches the latest GitHub release, downloads the -platform-correct binary with SHA256 verification, and atomically replaces -the running binary. No more remembering `cargo install` or `npm install -g`. - -### 🌐 Session sharing (`/share`) - -`/share` exports the current session as a static HTML page and uploads it -to a GitHub Gist via the `gh` CLI, producing a clickable URL you can paste -anywhere. - -### 📖 Docs refresh - -README hero updated with intent statement and architecture summary. -ARCHITECTURE.md cleaned up for v0.8.6 (removed swarm tool surface, current -crate map). CONTRIBUTING.md now has a "shape of a PR" section. - -Full changelog: [CHANGELOG.md](CHANGELOG.md). - ---- - -## What's new in v0.8.5 - -### 🛡️ SSRF protection for fetch_url - -`fetch_url` now validates target hostnames and IPs before connecting — -localhost-only HTTP for loopback, DNS pinning for remote hosts, and -blocked internal IP ranges. Contributed by Hafeez Pizofreude (#261) -and Jason. - -### 🖥️ Schema-driven config editor - -`/config tui` opens a forms-style config editor powered by schemaui. -Bare `/config` opens the legacy native modal; `/config web` launches a -browser surface (requires the `web` feature). Contributed by Unic -(YuniqueUnic) via #365. - -### 🏷️ DeepseekCN provider - -`ApiProvider::DeepseekCN` targets `api.deepseeki.com` for China-based -users. Auto-detects when `zh-*` is the system locale on first run. - -### 🔐 Atomic file writes - -All writes to `~/.deepseek/` now go through `write_atomic` (tempfile + -fsync + rename), preventing corruption from mid-write crashes. - -### 🧵 Panic safety foundations - -`spawn_supervised` catches and logs task panics with crash dumps instead -of silently dropping the task. - -### ⌨️ `/config ` wiring - -`/config model deepseek-v4-flash`, `/config locale zh-Hans`, etc. change -settings live in-session without opening the editor. - -Full changelog: [CHANGELOG.md](CHANGELOG.md). - ---- - -## Thanks - -v0.8.5 shipped with help from these contributors: - -- **[Hafeez Pizofreude](https://github.com/pizofreude)** — SSRF protection in `fetch_url` and Star History chart -- **[Unic (YuniqueUnic)](https://github.com/YuniqueUnic)** — Schema-driven config UI (TUI + web) -- **[Jason](mailto:jason@aveoresearchlabs.com)** — SSRF security hardening - ---- - -## What's new in v0.8.0 - -### ⚡ Shell stability and post-send responsiveness - -Completed background shell jobs now release their live process and pipe -handles as soon as completion is observed, while keeping the job record -inspectable. This prevents long-running sessions from hitting `Too many -open files (os error 24)`, which could make checkpoint saves fail and -cause shell spawning, message send, close, and Esc/cancel paths to lag -or fail. - -### 🪟 Windows REPL runtime CI hardening - -Windows gets a longer Python bootstrap readiness timeout for the REPL -runtime tests, matching GitHub runner startup contention without -weakening bootstrap failures on other platforms. - -### 🌏 Cargo mirror install docs - -The README now includes a TUNA Cargo mirror setup and direct release -asset guidance for users with slow GitHub/npm access. - -### 🧪 Test hardening - -New regression coverage proves completed background shell jobs drop -their live process handles after `exec_shell_wait`. - -Full changelog: [CHANGELOG.md](CHANGELOG.md). - ---- - -## What's new in v0.7.8 - -### ⚡ Shell controls: foreground-to-background detach + `exec_shell_cancel` - -A running foreground command can now be moved to the background interactive -session — press **`Ctrl+B`** while a command is executing to open shell -controls, then either detach it (it continues running and can be polled -with `exec_shell_wait`) or cancel the current turn. - -**New tool: `exec_shell_cancel`** — cancel a specific background shell -task by `task_id`, or cancel all running background tasks with `all: true`. - -**Cancel-aware `exec_shell_wait`** — canceling a turn while -`exec_shell_wait` is blocking now stops the wait but leaves the background -task running. - -### 🐛 Unicode glob search fix - -Filenames containing multi-byte characters (e.g., `dialogue_line__冰糖.mp3`) -no longer panic the `matches_glob` function — byte-index slicing was replaced -with `char_indices()` boundary-safe iteration. - -### 🔄 Fanout UI reconciliation - -The fanout card no longer pre-seeds with zero-state workers, eliminating the -"0 done · 0 running · 0 failed · N pending" vs sidebar "N running" -contradiction. The sidebar now shows "dispatching N" before the first progress -event arrives from a legacy fanout invocation. - -Full changelog: [CHANGELOG.md](CHANGELOG.md). - ---- - -## What's new in v0.7.6 - -### 🌐 UI Localization - -DeepSeek TUI now speaks your language. The new `locale` setting -in `settings.toml` controls UI chrome — composer, history search, -`/config`, help overlay, and status hints — without changing model -output language. - -| Setting | Display | -|---|---| -| `locale = \"auto\"` | Checks `LC_ALL` → `LC_MESSAGES` → `LANG` (default) | -| `locale = \"ja\"` | Japanese | -| `locale = \"zh-Hans\"` | Chinese Simplified | -| `locale = \"pt-BR\"` | Portuguese (Brazil) | -| `locale = \"en\"` | English fallback | - -Unsure what to pick? Run `locale` in your terminal; the first matching -tag is used automatically. - -### 📋 Smarter paste handling - -Paste-burst detection catches rapid-key pastes in terminals that don't -send bracketed-paste events — CRLF is normalized, and multiline pastes -stay buffered until you stop typing. Configurable via `paste_burst_detection`. - -### 🔍 Composer history search - -Forgot that prompt you wrote an hour ago? `Alt+R` opens a live search -across input history and recovered drafts. Type to filter, `Enter` to -accept, `Esc` to restore what you were typing. - -### 👁️ Pending input preview - -During a running turn, queued messages, pending steers, and context chips -appear above the composer so you can see what will be sent next. -`Alt+↑` pops the last queued message back for editing. - -### ⚙️ Grouped `/config` editor - -`/config` now groups settings by section (Model, Permissions, Display, -...) with a live filter. `↑/↓` (or `j`/`k` when the filter is empty) -navigate; `Enter`/`e` edit the selected row; `Esc` clears the filter -or closes. - -### ⌨️ Searchable help overlay - -`?` (with empty input), `F1`, or `Ctrl+/` opens a searchable help -overlay. Type to filter commands and keybindings; multi-term searches -act as AND. - -Full history: [CHANGELOG.md](CHANGELOG.md). - ---- - -## Models & Pricing - -DeepSeek TUI targets **DeepSeek V4** models with 1M-token context windows by default. - -| Model | Context | Input (cache hit) | Input (cache miss) | Output | -|---|---|---|---|---| -| `deepseek-v4-pro` | 1M | $0.003625 / 1M* | $0.435 / 1M* | $0.87 / 1M* | -| `deepseek-v4-flash` | 1M | $0.0028 / 1M | $0.14 / 1M | $0.28 / 1M | - -Legacy aliases `deepseek-chat` and `deepseek-reasoner` silently map to `deepseek-v4-flash`. - -**NVIDIA NIM** hosted variants (`deepseek-ai/deepseek-v4-pro`, `deepseek-ai/deepseek-v4-flash`) use your NVIDIA account terms — no DeepSeek platform billing. - -*\*DeepSeek lists the Pro rates above as a limited-time 75% discount valid until 2026-05-05 15:59 UTC; the TUI cost estimator falls back to base Pro rates after that timestamp.* +## What's new in v0.8.10 + +A patch release: hotfixes, UX polish, and runtime API additions for the whalescale desktop integration. No breaking changes. [Full changelog](CHANGELOG.md). + +- **Stacked toast overlay** — status toasts queue and render together instead of overwriting each other +- **File @-mention frecency** — file mention suggestions learn from recent selections (`~/.deepseek/file-frecency.jsonl`) +- **Runtime API expansion** — CORS origins config, full thread editing (`PATCH /v1/threads/{id}`), `archived_only` query filter, aggregate usage endpoint (`GET /v1/usage?group_by=day|model|provider|thread`) +- **Language picker on first run** — new onboarding step selects locale before entering the API key +- **OPENCODE shell.env hook** — lifecycle hooks can inject shell environment into spawned commands +- **Cache-aware compaction** — compaction calls reuse cached prompt prefixes, cutting `/compact` costs significantly +- **glibc 2.28 baseline** — prebuilts now target glibc 2.28 (via `cargo zigbuild`), covering older distros; npm postinstall fails fast with a clear source-build message when incompatible +- **Better markdown rendering** — transcript now handles tables, bold/italic, and horizontal rules; no more infinite loops on unclosed markers +- **MCP SIGTERM on shutdown** — stdio servers receive SIGTERM with a 2-second grace period instead of SIGKILL +- **Shell-child PDEATHSIG on Linux** — children auto-SIGTERM when the parent exits, closing a leak window +- **Windows Terminal paste fix** — Ctrl/Cmd+V during onboarding now works correctly +- **Terminal startup repaint** — no more stale background rows above the first frame +- **Slash-prefix Enter activation** — typing `/mo` and pressing Enter activates the first match +- **Shell `cwd` boundary validation** — path escape returns `PathEscape` on out-of-workspace `cwd`, consistent with file tools + +**6 first-time contributors:** [@staryxchen](https://github.com/staryxchen) (#556), [@shentoumengxin](https://github.com/shentoumengxin) (#524), [@Vishnu1837](https://github.com/Vishnu1837) (#565), [@20bytes](https://github.com/20bytes) (#569), [@loongmiaow-pixel](https://github.com/loongmiaow-pixel) (#578), [@WyxBUPT-22](https://github.com/WyxBUPT-22) (#579). +Thanks also to [@lloydzhou](https://github.com/lloydzhou), [@jeoor](https://github.com/jeoor), [@toi500](https://github.com/toi500), [@xsstomy](https://github.com/xsstomy), and [@melody0709](https://github.com/melody0709) for bug reports. --- ## Usage ```bash -deepseek # interactive TUI +deepseek # interactive TUI deepseek "explain this function" # one-shot prompt deepseek --model deepseek-v4-flash "summarize" # model override -deepseek --yolo # YOLO mode (auto-approve tools) -deepseek auth set --provider deepseek # save API key to ~/.deepseek/config.toml -deepseek doctor # check setup & connectivity -deepseek doctor --json # machine-readable diagnostics -deepseek setup --status # read-only setup status -deepseek setup --tools --plugins # scaffold local tool/plugin dirs -deepseek models # list live API models -deepseek sessions # list saved sessions -deepseek resume --last # resume latest session -deepseek serve --http # HTTP/SSE API server -deepseek mcp list # list configured MCP servers -deepseek mcp validate # validate MCP config/connectivity -deepseek mcp-server # run dispatcher MCP stdio server +deepseek --yolo # auto-approve tools +deepseek auth set --provider deepseek # save API key +deepseek doctor # check setup & connectivity +deepseek doctor --json # machine-readable diagnostics +deepseek setup --status # read-only setup status +deepseek setup --tools --plugins # scaffold tool/plugin dirs +deepseek models # list live API models +deepseek sessions # list saved sessions +deepseek resume --last # resume latest session +deepseek serve --http # HTTP/SSE API server +deepseek pr # fetch PR and pre-seed review prompt +deepseek mcp list # list configured MCP servers +deepseek mcp validate # validate MCP config/connectivity +deepseek mcp-server # run dispatcher MCP stdio server ``` ### Keyboard shortcuts | Key | Action | |---|---| -| `Tab` | Complete `/` or `@` entries; while a turn is running, queue the draft as a follow-up; otherwise cycle mode | +| `Tab` | Complete `/` or `@` entries; while running, queue draft as follow-up; otherwise cycle mode | | `Shift+Tab` | Cycle reasoning-effort: off → high → max | -| `F1` | Help | +| `F1` | Searchable help overlay | | `Esc` | Back / dismiss | | `Ctrl+K` | Command palette | | `Ctrl+R` | Resume an earlier session | | `Alt+R` | Search prompt history and recover cleared drafts | +| `Ctrl+S` | Stash current draft (`/stash list`, `/stash pop` to recover) | | `@path` | Attach file/directory context in composer | | `↑` (at composer start) | Select attachment row for removal | | `Alt+↑` | Edit last queued message | -| `/attach ` | Attach image/video media references; select the row with `↑` at composer start and remove with `Backspace`/`Delete` | + +Full shortcut catalog: [docs/KEYBINDINGS.md](docs/KEYBINDINGS.md). --- @@ -566,56 +212,58 @@ deepseek mcp-server # run dispatcher MCP stdio server | Mode | Behavior | |---|---| -| **Plan** 🔍 | Read-only investigation — model explores and proposes a decomposition plan (`update_plan` + `checklist_write`) before making changes | -| **Agent** 🤖 | Default interactive mode — multi-step tool use with approval gates; model outlines work via `checklist_write` before requesting writes | -| **YOLO** ⚡ | Auto-approve all tools in a trusted workspace; model still creates `checklist_write`/`update_plan` to keep work visible and trackable | +| **Plan** 🔍 | Read-only investigation — model explores and proposes a plan (`update_plan` + `checklist_write`) before making changes | +| **Agent** 🤖 | Default interactive mode — multi-step tool use with approval gates; model outlines work via `checklist_write` | +| **YOLO** ⚡ | Auto-approve all tools in a trusted workspace; still maintains plan and checklist for visibility | --- ## Configuration -`~/.deepseek/config.toml` — see [config.example.toml](config.example.toml) for every option. +User config: `~/.deepseek/config.toml`. Project overlay: `/.deepseek/config.toml` (denied: `api_key`, `base_url`, `provider`, `mcp_config_path`). [config.example.toml](config.example.toml) has every option. -Key environment overrides: +Key environment variables: | Variable | Purpose | |---|---| | `DEEPSEEK_API_KEY` | API key | | `DEEPSEEK_BASE_URL` | API base URL | | `DEEPSEEK_MODEL` | Default model | -| `DEEPSEEK_PROVIDER` | Provider: `deepseek` (default), `nvidia-nim`, `fireworks`, or `sglang` | +| `DEEPSEEK_PROVIDER` | `deepseek` (default), `nvidia-nim`, `fireworks`, `sglang` | | `DEEPSEEK_PROFILE` | Config profile name | -| `NVIDIA_API_KEY` | NVIDIA NIM API key | -| `FIREWORKS_API_KEY` | Fireworks AI API key | +| `DEEPSEEK_MEMORY` | Set to `on` to enable user memory | +| `NVIDIA_API_KEY` / `FIREWORKS_API_KEY` / `SGLANG_API_KEY` | Provider auth | | `SGLANG_BASE_URL` | Self-hosted SGLang endpoint | -| `SGLANG_API_KEY` | Optional SGLang bearer token | +| `NO_ANIMATIONS=1` | Force accessibility mode at startup | +| `SSL_CERT_FILE` | Custom CA bundle for corporate proxies | -Quick diagnostics: `deepseek setup --status` checks API key, MCP, sandbox, and -`.env` state without network calls; `deepseek doctor --json` is suitable for CI; -`deepseek setup --tools --plugins` scaffolds local tool and plugin directories. +UI locale is separate from model language — set `locale` in `settings.toml`, use `/config locale zh-Hans`, or rely on `LC_ALL`/`LANG`. See [docs/CONFIGURATION.md](docs/CONFIGURATION.md) and [docs/MCP.md](docs/MCP.md). -DeepSeek context caching is automatic — when the API returns cache hit/miss token fields, the TUI includes them in usage and cost tracking. +--- -Full reference: [docs/CONFIGURATION.md](docs/CONFIGURATION.md) and [docs/MCP.md](docs/MCP.md). +## Models & Pricing -UI locale is separate from model language — set `locale` in `settings.toml` -or via the `LC_ALL`/`LANG` environment variables. See [docs/CONFIGURATION.md](docs/CONFIGURATION.md). +| Model | Context | Input (cache hit) | Input (cache miss) | Output | +|---|---|---|---|---| +| `deepseek-v4-pro` | 1M | $0.003625 / 1M* | $0.435 / 1M* | $0.87 / 1M* | +| `deepseek-v4-flash` | 1M | $0.0028 / 1M | $0.14 / 1M | $0.28 / 1M | + +Legacy aliases `deepseek-chat` / `deepseek-reasoner` map to `deepseek-v4-flash`. NVIDIA NIM variants use your NVIDIA account terms. + +*\*DeepSeek Pro rates are a limited-time 75% discount valid until 2026-05-05 15:59 UTC; the TUI cost estimator falls back to base Pro rates after that timestamp.* --- ## Publishing your own skill -DeepSeek-TUI discovers skills from the active skills directory. Workspace-local -`.agents/skills` wins when present, then `./skills`, then the configured global -directory (`~/.deepseek/skills` by default). Each skill is a directory with a -`SKILL.md` file: +DeepSeek TUI discovers skills from workspace directories (`.agents/skills` → `skills` → `.opencode/skills` → `.claude/skills`) and the global `~/.deepseek/skills`. Each skill is a directory with a `SKILL.md` file: ```text ~/.deepseek/skills/my-skill/ └── SKILL.md ``` -`SKILL.md` must start with YAML frontmatter: +Frontmatter required: ```markdown --- @@ -624,33 +272,12 @@ description: Use this when DeepSeek should follow my custom workflow. --- # My Skill - Instructions for the agent go here. ``` -Run `/skills` to list discovered skills, `/skill ` to activate one for -the next message, or `/skill new` to use the bundled skill-creator helper. -Installed skills are also listed in the model-visible session context so the -agent can choose relevant skills when the user names them or when the task -matches their descriptions. +Commands: `/skills` (list), `/skill ` (activate), `/skill new` (scaffold), `/skill install github:/` (community), `/skill update` / `uninstall` / `trust`. Community installs from GitHub require no backend service. Installed skills appear in the model-visible session context; the agent can auto-select relevant skills via the `load_skill` tool when your task matches their descriptions. -DeepSeek-TUI can also install community skills directly from a GitHub repo, -with no backend service in the loop: - -1. Create a public GitHub repo with a `SKILL.md` at the root containing the - usual `---` frontmatter (`name`, `description`). -2. Multi-skill bundles use `skills//SKILL.md` instead — the installer - picks the first match and names the install after the frontmatter `name`. -3. Push to `main` (or `master`); the installer fetches - `archive/refs/heads/main.tar.gz` and falls back to `master.tar.gz`. -4. Users install via `/skill install github:/` — installs are - gated by the `[network]` policy, validated for path traversal and size, and - placed under `~/.deepseek/skills//`. -5. Submit a PR to the curated `index.json` (default registry) to make the skill - installable by name (`/skill install `) instead of the GitHub spec. -6. Use `/skill update `, `/skill uninstall `, or - `/skill trust ` for installed community skills. Trust is only needed - when you want scripts bundled with a skill to be eligible for execution. +--- ## Documentation @@ -661,14 +288,30 @@ with no backend service in the loop: | [MODES.md](docs/MODES.md) | Plan / Agent / YOLO modes | | [MCP.md](docs/MCP.md) | Model Context Protocol integration | | [RUNTIME_API.md](docs/RUNTIME_API.md) | HTTP/SSE API server | +| [INSTALL.md](docs/INSTALL.md) | Platform-specific install guide | +| [MEMORY.md](docs/MEMORY.md) | User memory feature guide | +| [SUBAGENTS.md](docs/SUBAGENTS.md) | Sub-agent role taxonomy and lifecycle | +| [KEYBINDINGS.md](docs/KEYBINDINGS.md) | Full shortcut catalog | | [RELEASE_RUNBOOK.md](docs/RELEASE_RUNBOOK.md) | Release process | | [OPERATIONS_RUNBOOK.md](docs/OPERATIONS_RUNBOOK.md) | Ops & recovery | +Full changelog: [CHANGELOG.md](CHANGELOG.md). + +--- + +## Thanks + +Earlier releases shipped with help from these contributors: + +- **Hafeez Pizofreude** — SSRF protection in `fetch_url` and Star History chart +- **Unic (YuniqueUnic)** — Schema-driven config UI (TUI + web) +- **Jason** — SSRF security hardening + --- ## Contributing -See [CONTRIBUTING.md](CONTRIBUTING.md). Pull requests welcome! +See [CONTRIBUTING.md](CONTRIBUTING.md). Pull requests welcome — check the [open issues](https://github.com/Hmbown/DeepSeek-TUI/issues) for good first contributions. *Not affiliated with DeepSeek Inc.* diff --git a/README.zh-CN.md b/README.zh-CN.md index 7719ba15..4cded3c2 100644 --- a/README.zh-CN.md +++ b/README.zh-CN.md @@ -1,6 +1,6 @@ # DeepSeek TUI -> **面向 [DeepSeek V4](https://platform.deepseek.com) 模型的终端原生编程智能体,支持 100 万 token 上下文、思考模式推理流和完整工具调用。** +> **面向 [DeepSeek V4](https://platform.deepseek.com) 模型的终端原生编程智能体,支持 100 万 token 上下文、思考模式推理流和完整工具调用。单一二进制,无需 Node/Python 运行时——开箱即带 MCP 客户端、沙箱和持久化任务队列。** [English README](README.md) @@ -12,30 +12,42 @@ npm i -g deepseek-tui [![npm](https://img.shields.io/npm/v/deepseek-tui)](https://www.npmjs.com/package/deepseek-tui) [![crates.io](https://img.shields.io/crates/v/deepseek-tui-cli?label=crates.io)](https://crates.io/crates/deepseek-tui-cli) -![DeepSeek TUI screenshot](assets/screenshot.png) +![DeepSeek TUI 截图](assets/screenshot.png) --- ## 这是什么? -DeepSeek TUI 是一个完全运行在终端里的编程智能体。它可以让 DeepSeek 前沿模型直接访问你的工作区:读取和编辑文件、运行 shell 命令、搜索和浏览网页、管理 git、调度子智能体,并通过快速的键盘驱动 TUI 完成多步开发任务。 +DeepSeek TUI 是一个完全运行在终端里的编程智能体。它让 DeepSeek 前沿模型直接访问你的工作区:读写文件、运行 shell 命令、搜索浏览网页、管理 git、调度子智能体——全部通过快速、键盘驱动的 TUI 完成。 -它面向 **DeepSeek V4**(`deepseek-v4-pro` / `deepseek-v4-flash`)构建,默认支持 100 万 token 上下文窗口和原生思考模式流式输出。模型推理、工具调用和最终回答会在终端里实时呈现。 +它面向 **DeepSeek V4**(`deepseek-v4-pro` / `deepseek-v4-flash`)构建,原生支持 100 万 token 上下文窗口和思考模式流式输出。 ### 主要功能 -- **原生 RLM**(`rlm_query` 工具):用现有 DeepSeek 客户端并行调度 1 到 16 个低成本 `deepseek-v4-flash` 子任务,用于批量分析、任务拆解或并行推理。 -- **思考模式流式输出**:实时显示 DeepSeek 的推理过程。 -- **完整工具集**:文件操作、shell 执行、git、网页搜索/浏览、apply-patch、子智能体、MCP 服务器。 -- **100 万 token 上下文**:上下文接近上限时自动进行智能压缩。 -- **三种交互模式**:Plan(只读探索)、Agent(默认交互并带审批)、YOLO(可信工作区内自动批准工具)。 -- **推理强度档位**:用 `Shift+Tab` 在 `off -> high -> max` 之间切换。 -- **会话保存和恢复**:适合长任务的断点续作。 -- **工作区回滚**:通过 side-git 记录每轮前后快照,支持 `/restore` 和 `revert_turn`,不修改项目自己的 `.git`。 -- **HTTP/SSE 运行时 API**:`deepseek serve --http` 可用于无界面智能体流程。 -- **MCP 协议支持**:连接 Model Context Protocol 服务器扩展工具,见 [docs/MCP.md](docs/MCP.md)。 -- **实时成本跟踪**:按轮次和会话统计 token 用量与成本估算。 -- **深色主题**:DeepSeek 蓝色系终端界面。 +- **原生 RLM**(`rlm_query`)—— 利用现有 API 客户端并行调度 1-16 个低成本 `deepseek-v4-flash` 子任务,用于批量分析和并行推理 +- **思考模式流式输出** —— 实时观察模型在解决问题时的思维链展开 +- **完整工具集** —— 文件操作、shell 执行、git、网页搜索/浏览、apply-patch、子智能体、MCP 服务器 +- **100 万 token 上下文** —— 上下文接近上限时自动智能压缩,支持前缀缓存感知以降低成本 +- **三种交互模式** —— Plan(只读探索)、Agent(带审批的默认交互)、YOLO(可信工作区自动批准) +- **推理强度档位** —— 用 `Shift+Tab` 在 `off → high → max` 之间切换 +- **会话保存和恢复** —— 长任务的断点续作 +- **工作区回滚** —— 通过 side-git 记录每轮前后快照,支持 `/restore` 和 `revert_turn`,不影响项目自己的 `.git` +- **持久化任务队列** —— 后台任务在重启后仍然存在,支持计划任务和长时间运行的操作 +- **HTTP/SSE 运行时 API** —— `deepseek serve --http` 用于无界面智能体流程 +- **MCP 协议** —— 连接 Model Context Protocol 服务器扩展工具,见 [docs/MCP.md](docs/MCP.md) +- **LSP 诊断** —— 每次编辑后通过 rust-analyzer、pyright、typescript-language-server、gopls、clangd 提供内联错误/警告 +- **用户记忆** —— 可选的持久化笔记文件注入系统提示,实现跨会话偏好保持 +- **多语言 UI** —— 支持 `en`、`ja`、`zh-Hans`、`pt-BR`,支持自动检测 +- **实时成本跟踪** —— 按轮次和会话统计 token 用量与成本估算,含缓存命中/未命中明细 +- **技能系统** —— 可通过 GitHub 安装的组合式指令包,无需后端服务 + +--- + +## 架构说明 + +`deepseek`(调度器 CLI)→ `deepseek-tui`(伴随二进制)→ ratatui 界面 ↔ 异步引擎 ↔ OpenAI 兼容流式客户端。工具调用通过类型化注册表(shell、文件操作、git、web、子智能体、MCP、RLM)路由,结果流式返回对话记录。引擎管理会话状态、轮次追踪、持久化任务队列和 LSP 子系统——它在下一步推理前将编辑后诊断反馈到模型上下文中。 + +详见 [docs/ARCHITECTURE.md](docs/ARCHITECTURE.md)。 --- @@ -46,53 +58,30 @@ npm install -g deepseek-tui deepseek ``` -预构建二进制覆盖 **Linux x64**、**Linux ARM64**(v0.8.8 起)、**macOS x64**、 -**macOS ARM64**、**Windows x64**。其他平台(musl、riscv64、FreeBSD 等)请见 -下方的 [从源码安装](#从源码安装) 章节,或参考完整的 -[docs/INSTALL.md](docs/INSTALL.md)。 +预构建二进制覆盖 **Linux x64**、**Linux ARM64**(v0.8.8 起)、**macOS x64**、**macOS ARM64** 和 **Windows x64**。其他目标平台(musl、riscv64、FreeBSD 等)请见下方的[从源码安装](#从源码安装)或 [docs/INSTALL.md](docs/INSTALL.md)。 -首次启动时会提示输入 [DeepSeek API key](https://platform.deepseek.com/api_keys)。TUI 会把它保存到用户配置 `~/.deepseek/config.toml`,因此在任意目录、IDE 终端和脚本里都能读到,并且不会触发系统密钥环弹窗。 +首次启动时会提示输入 [DeepSeek API key](https://platform.deepseek.com/api_keys)。密钥保存到 `~/.deepseek/config.toml`,在任意目录、IDE 终端和脚本中都能使用,不会触发系统密钥环弹窗。 也可以提前配置: ```bash -# 推荐 —— 保存到 ~/.deepseek/config.toml;适用于所有场景 -# (交互式 shell、IDE 终端、脚本、cron): -deepseek auth set --provider deepseek +deepseek auth set --provider deepseek # 保存到 ~/.deepseek/config.toml -# 环境变量备选 —— 注意 zsh 中 ~/.zshrc 的 export 只对交互式 shell 生效。 -# 需要在登录 shell / IDE / 脚本中也生效,请放进 ~/.zshenv: -export DEEPSEEK_API_KEY="YOUR_DEEPSEEK_API_KEY" +export DEEPSEEK_API_KEY="YOUR_KEY" # 环境变量方式;需要在非交互式 shell 中使用请放入 ~/.zshenv deepseek -# 检查二进制实际读到的源: -deepseek doctor +deepseek doctor # 验证安装 ``` -> 轮换或移除已保存的密钥:`deepseek auth clear --provider deepseek` -> (旧别名 `deepseek logout` 也可用),然后重新运行 -> `deepseek auth set --provider deepseek`。 +> 轮换或移除密钥:`deepseek auth clear --provider deepseek`。 ### Linux ARM64(HarmonyOS 轻薄本、openEuler、Kylin、树莓派、Graviton 等) -从 **v0.8.8** 起,`npm i -g deepseek-tui` 直接支持 glibc 系的 ARM64 Linux。 -如果你停留在 v0.8.7 或更早版本,会看到 `Unsupported architecture: arm64` -错误。升级到最新版即可,或直接用 `cargo install`: - -```bash -# 需要 Rust 1.85+(https://rustup.rs) -cargo install deepseek-tui-cli --locked # 提供 `deepseek` -cargo install deepseek-tui --locked # 提供 `deepseek-tui` -``` - -也可以从 [Releases 页面](https://github.com/Hmbown/DeepSeek-TUI/releases) 下载 -`deepseek-linux-arm64` 与 `deepseek-tui-linux-arm64`,放到同一个 `PATH` 目录里。 -从 x64 主机交叉编译到 ARM64 的步骤见 -[docs/INSTALL.md](docs/INSTALL.md#cross-compiling-from-x64-to-arm64-linux)。 +从 v0.8.8 起,`npm i -g deepseek-tui` 直接支持 glibc 系的 ARM64 Linux。你也可以从 [Releases 页面](https://github.com/Hmbown/DeepSeek-TUI/releases) 下载预编译二进制,放到 `PATH` 目录中。 ### 中国大陆 / 镜像友好安装 -如果在中国大陆访问 GitHub 或 npm 下载较慢,可以通过 Cargo 注册表镜像安装 Rust crate: +如果在中国大陆访问 GitHub 或 npm 下载较慢,可以通过 Cargo 注册表镜像安装: ```toml # ~/.cargo/config.toml @@ -103,86 +92,95 @@ replace-with = "tuna" registry = "sparse+https://mirrors.tuna.tsinghua.edu.cn/crates.io-index/" ``` -然后从对应的包安装: +然后安装两个二进制(调度器在运行时会调用 TUI): ```bash cargo install deepseek-tui-cli --locked # 提供推荐入口 `deepseek` -cargo install deepseek-tui --locked # 可选:提供 TUI 伴随二进制 `deepseek-tui` +cargo install deepseek-tui --locked # 提供交互式 TUI 伴随二进制 deepseek --version -deepseek doctor --json ``` -从 `v0.8.2` 起回到分包安装: +也可以直接从 [GitHub Releases](https://github.com/Hmbown/DeepSeek-TUI/releases) 下载预编译二进制。`DEEPSEEK_TUI_RELEASE_BASE_URL` 可用于镜像后的 release 资产。 -- `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 等镜像。 - -### 从源码安装 - -适用于任何 Tier-1 Rust 目标,包括 musl、riscv64、FreeBSD,以及早于 -v0.8.8、还没有官方预编译包的 ARM64 发行版。 +适用于任何 Tier-1 Rust 目标,包括 musl、riscv64、FreeBSD 以及尚无预编译包的 ARM64 发行版。 ```bash -# Linux 构建依赖(Debian/Ubuntu/openEuler/Kylin): +# Linux 构建依赖(Debian/Ubuntu/RHEL): # sudo apt-get install -y build-essential pkg-config libdbus-1-dev -# # RHEL 系:sudo dnf install -y gcc make pkgconf-pkg-config dbus-devel +# sudo dnf install -y gcc make pkgconf-pkg-config dbus-devel git clone https://github.com/Hmbown/DeepSeek-TUI.git cd DeepSeek-TUI cargo install --path crates/cli --locked # 需要 Rust 1.85+;提供 `deepseek` cargo install --path crates/tui --locked # 提供 `deepseek-tui` - -deepseek --version ``` -两个二进制都需要安装:`deepseek` 是入口调度器,运行时会调用 `deepseek-tui`。 -跨平台编译、镜像、平台特定故障排查见 [docs/INSTALL.md](docs/INSTALL.md)。 +两个二进制都需要安装。交叉编译和平台特定说明见 [docs/INSTALL.md](docs/INSTALL.md)。 ---- +
-## 其他模型提供方 - -### NVIDIA NIM +### 其他模型提供方 ```bash +# NVIDIA NIM deepseek auth set --provider nvidia-nim --api-key "YOUR_NVIDIA_API_KEY" deepseek --provider nvidia-nim -# 或仅对当前进程生效: -DEEPSEEK_PROVIDER=nvidia-nim NVIDIA_API_KEY="..." deepseek -``` - -### Fireworks 和自托管 SGLang - -```bash +# Fireworks deepseek auth set --provider fireworks --api-key "YOUR_FIREWORKS_API_KEY" deepseek --provider fireworks --model deepseek-v4-pro -# SGLang 通常是自托管;localhost 部署可以不配置鉴权。 +# 自托管 SGLang SGLANG_BASE_URL="http://localhost:30000/v1" deepseek --provider sglang --model deepseek-v4-flash ``` --- +## v0.8.10 新功能 + +补丁发布:热修复、UX 打磨和 whalescale 桌面集成的运行时 API 扩展。无破坏性变更。[完整更新日志](CHANGELOG.md)。 + +- **堆叠式 Toast 通知** —— 状态提示可以排队并叠放显示,不再互相覆盖 +- **文件 @-提及频率排序** —— 文件提及建议学习近期选择(`~/.deepseek/file-frecency.jsonl`) +- **运行时 API 扩展** —— CORS 来源配置、完整线程编辑(`PATCH /v1/threads/{id}`)、`archived_only` 查询过滤、用量聚合端点(`GET /v1/usage?group_by=day|model|provider|thread`) +- **首次运行语言选择器** —— 新的引导步骤在输入 API 密钥前选择界面语言 +- **OPENCODE shell.env 钩子** —— 生命周期钩子可以向启动的命令注入 shell 环境 +- **缓存感知压缩** —— 压缩调用复用缓存提示前缀,大幅降低 `/compact` 成本 +- **glibc 2.28 基础线** —— 预编译包现在针对 glibc 2.28(通过 `cargo zigbuild`),覆盖更老的发行版;npm postinstall 在不兼容时给出明确的源码构建提示 +- **改进的 Markdown 渲染** —— 对话记录现在支持表格、粗体/斜体和水平线;不再有无穷循环问题 +- **MCP 关闭时发送 SIGTERM** —— stdio 服务器收到 SIGTERM 并有 2 秒优雅退出时间,而非 SIGKILL +- **Linux shell 子进程 PDEATHSIG** —— 父进程退出时子进程自动收到 SIGTERM,消除泄漏窗口 +- **Windows Terminal 粘贴修复** —— 引导过程中 Ctrl/Cmd+V 现在正常工作 +- **终端启动重绘** —— 首帧上方不再残留过时的默认背景行 +- **斜杠前缀回车激活** —— 输入 `/mo` 后按回车自动激活第一个匹配项 +- **Shell `cwd` 边界验证** —— 超出工作区的 `cwd` 路径返回 `PathEscape`,与文件工具一致 + +**6 位首次贡献者:** [@staryxchen](https://github.com/staryxchen) (#556)、[@shentoumengxin](https://github.com/shentoumengxin) (#524)、[@Vishnu1837](https://github.com/Vishnu1837) (#565)、[@20bytes](https://github.com/20bytes) (#569)、[@loongmiaow-pixel](https://github.com/loongmiaow-pixel) (#578)、[@WyxBUPT-22](https://github.com/WyxBUPT-22) (#579)。 +同时感谢 [@lloydzhou](https://github.com/lloydzhou)、[@jeoor](https://github.com/jeoor)、[@toi500](https://github.com/toi500)、[@xsstomy](https://github.com/xsstomy) 和 [@melody0709](https://github.com/melody0709) 的错误报告。 + +--- + ## 使用方式 ```bash deepseek # 交互式 TUI deepseek "explain this function" # 一次性提示 deepseek --model deepseek-v4-flash "summarize" # 指定模型 -deepseek --yolo # YOLO 模式,自动批准工具 -deepseek auth set --provider deepseek # 保存 API key 到 ~/.deepseek/config.toml +deepseek --yolo # 自动批准工具 +deepseek auth set --provider deepseek # 保存 API key deepseek doctor # 检查配置和连接 deepseek doctor --json # 机器可读诊断 -deepseek setup --status # 只读安装状态检查 +deepseek setup --status # 只读安装状态 deepseek setup --tools --plugins # 创建本地工具和插件目录 deepseek models # 列出可用 API 模型 deepseek sessions # 列出已保存会话 deepseek resume --last # 恢复最近会话 deepseek serve --http # HTTP/SSE API 服务 +deepseek pr # 获取 PR 并预填审查提示 deepseek mcp list # 列出已配置 MCP 服务器 deepseek mcp validate # 校验 MCP 配置和连接 deepseek mcp-server # 启动 dispatcher MCP stdio 服务器 @@ -192,16 +190,19 @@ deepseek mcp-server # 启动 dispatcher MCP stdio 服 | 按键 | 功能 | |---|---| -| `Tab` | 补全 `/` 或 `@`;运行中则把草稿排队为后续消息;否则切换模式 | -| `Shift+Tab` | 切换推理强度:off -> high -> max | -| `F1` | 帮助 | +| `Tab` | 补全 `/` 或 `@`;运行中则把草稿排队;否则切换模式 | +| `Shift+Tab` | 切换推理强度:off → high → max | +| `F1` | 可搜索帮助面板 | | `Esc` | 返回 / 关闭 | | `Ctrl+K` | 命令面板 | | `Ctrl+R` | 恢复旧会话 | | `Alt+R` | 搜索提示历史和恢复草稿 | +| `Ctrl+S` | 暂存当前草稿(`/stash list`、`/stash pop` 恢复) | | `@path` | 在输入框中附加文件或目录上下文 | +| `↑`(在输入框开头) | 选择附件行进行移除 | | `Alt+↑` | 编辑最后一条排队消息 | -| `/attach ` | 附加图片或视频路径引用 | + +完整快捷键目录:[docs/KEYBINDINGS.md](docs/KEYBINDINGS.md)。 --- @@ -209,15 +210,15 @@ deepseek mcp-server # 启动 dispatcher MCP stdio 服 | 模式 | 行为 | |---|---| -| **Plan** | 只读调查;模型先探索并提出拆解计划,再进行更改 | -| **Agent** | 默认交互模式;多步工具调用带审批门禁 | -| **YOLO** | 在可信工作区自动批准工具;仍会保留计划和清单以便追踪 | +| **Plan** 🔍 | 只读调查;模型先探索并提出计划(`update_plan` + `checklist_write`),然后再做更改 | +| **Agent** 🤖 | 默认交互模式;多步工具调用带审批门禁 | +| **YOLO** ⚡ | 在可信工作区自动批准工具;仍会维护计划和清单以保持可见性 | --- ## 配置 -主配置文件是 `~/.deepseek/config.toml`。完整选项见 [config.example.toml](config.example.toml) 和 [docs/CONFIGURATION.md](docs/CONFIGURATION.md)。 +用户配置:`~/.deepseek/config.toml`。项目覆盖:`/.deepseek/config.toml`(以下密钥被拒绝:`api_key`、`base_url`、`provider`、`mcp_config_path`)。完整选项见 [config.example.toml](config.example.toml)。 常用环境变量: @@ -226,56 +227,64 @@ deepseek mcp-server # 启动 dispatcher MCP stdio 服 | `DEEPSEEK_API_KEY` | DeepSeek API key | | `DEEPSEEK_BASE_URL` | API base URL | | `DEEPSEEK_MODEL` | 默认模型 | -| `DEEPSEEK_PROVIDER` | 提供方:`deepseek`、`nvidia-nim`、`fireworks` 或 `sglang` | +| `DEEPSEEK_PROVIDER` | `deepseek`(默认)、`nvidia-nim`、`fireworks`、`sglang` | | `DEEPSEEK_PROFILE` | 配置 profile 名称 | -| `NVIDIA_API_KEY` | NVIDIA NIM API key | -| `FIREWORKS_API_KEY` | Fireworks AI API key | +| `DEEPSEEK_MEMORY` | 设为 `on` 启用用户记忆 | +| `NVIDIA_API_KEY` / `FIREWORKS_API_KEY` / `SGLANG_API_KEY` | 提供商认证 | | `SGLANG_BASE_URL` | 自托管 SGLang 端点 | -| `SGLANG_API_KEY` | 可选 SGLang bearer token | +| `NO_ANIMATIONS=1` | 启动时强制无障碍模式 | +| `SSL_CERT_FILE` | 企业代理的自定义 CA 包 | -快速诊断: - -```bash -deepseek setup --status -deepseek doctor --json -``` - -UI 语言与模型输出语言相互独立。 +UI 语言与模型输出语言相互独立——在 `settings.toml` 中设置 `locale`、使用 `/config locale zh-Hans`、或依赖 `LC_ALL`/`LANG`。详见 [docs/CONFIGURATION.md](docs/CONFIGURATION.md) 和 [docs/MCP.md](docs/MCP.md)。 ### 切换为中文界面 -如果界面是英文的,可以在 TUI 内一键切换为简体中文: +如果界面是其他语言,可以在 TUI 内一键切换为简体中文: 1. 在 Composer 里输入 `/config`,按 Tab 或 Enter 打开配置面板。 - - ![输入 /config 命令](assets/locale-config-step1.jpg) - 2. 选择 **Edit locale**,在 `New:` 字段输入 `zh-Hans`,按 Enter 应用。 - ![编辑 locale 设为 zh-Hans](assets/locale-config-step2.jpg) +可选语言:`auto` | `en` | `ja` | `zh-Hans` | `pt-BR`。 -可选语言:`auto` | `en` | `ja` | `zh-Hans` | `pt-BR` - -也可以直接在 `~/.deepseek/settings.toml` 里设置 `locale = "zh-Hans"`,或者通过 `LC_ALL` / `LANG` 环境变量自动选择。 - -DeepSeek 上下文缓存是自动的;当 API 返回 cache hit/miss token 字段时,TUI 会把它们纳入用量和成本统计。 +也可以在 `~/.deepseek/settings.toml` 里直接设置 `locale = "zh-Hans"`,或通过 `LC_ALL` / `LANG` 环境变量自动选择。 --- ## 模型和价格 -DeepSeek TUI 默认面向带 100 万 token 上下文窗口的 **DeepSeek V4** 模型。 - | 模型 | 上下文 | 输入(缓存命中) | 输入(缓存未命中) | 输出 | |---|---|---|---|---| | `deepseek-v4-pro` | 1M | $0.003625 / 1M* | $0.435 / 1M* | $0.87 / 1M* | | `deepseek-v4-flash` | 1M | $0.0028 / 1M | $0.14 / 1M | $0.28 / 1M | -旧别名 `deepseek-chat` 和 `deepseek-reasoner` 会自动映射到 `deepseek-v4-flash`。 +旧别名 `deepseek-chat` / `deepseek-reasoner` 映射到 `deepseek-v4-flash`。NVIDIA NIM 变体使用你的 NVIDIA 账号条款。 -**NVIDIA NIM** 托管变体(`deepseek-ai/deepseek-v4-pro`、`deepseek-ai/deepseek-v4-flash`)使用你的 NVIDIA 账号条款,不走 DeepSeek 平台计费。 +*DeepSeek Pro 价格是限时 75% 折扣,有效期到 2026-05-05 15:59 UTC;该时间之后 TUI 成本估算会回退到 Pro 基础价格。* -*DeepSeek 标注的 Pro 价格是限时 75% 折扣,有效期到 2026-05-05 15:59 UTC;该时间之后 TUI 成本估算会回退到 Pro 基础价格。* +--- + +## 创建和安装技能 + +DeepSeek TUI 从工作区目录(`.agents/skills` → `skills` → `.opencode/skills` → `.claude/skills`)和全局 `~/.deepseek/skills` 发现技能。每个技能是一个包含 `SKILL.md` 的目录: + +```text +~/.deepseek/skills/my-skill/ +└── SKILL.md +``` + +需要 YAML frontmatter: + +```markdown +--- +name: my-skill +description: 当 DeepSeek 需要遵循我的自定义工作流时使用这个技能。 +--- + +# My Skill +这里写给智能体的指令。 +``` + +常用命令:`/skills`(列出)、`/skill `(激活)、`/skill new`(创建)、`/skill install github:/`(社区)、`/skill update` / `uninstall` / `trust`。社区技能直接从 GitHub 安装,无需后端服务。已安装技能在模型可见的会话上下文里列出;当任务匹配技能描述时,智能体可通过 `load_skill` 工具自动读取对应的 `SKILL.md`。 --- @@ -288,86 +297,37 @@ DeepSeek TUI 默认面向带 100 万 token 上下文窗口的 **DeepSeek V4** | [MODES.md](docs/MODES.md) | Plan / Agent / YOLO 模式 | | [MCP.md](docs/MCP.md) | Model Context Protocol 集成 | | [RUNTIME_API.md](docs/RUNTIME_API.md) | HTTP/SSE API 服务 | +| [INSTALL.md](docs/INSTALL.md) | 各平台安装指南 | +| [MEMORY.md](docs/MEMORY.md) | 用户记忆功能指南 | +| [SUBAGENTS.md](docs/SUBAGENTS.md) | 子智能体角色分类与生命周期 | +| [KEYBINDINGS.md](docs/KEYBINDINGS.md) | 完整快捷键目录 | | [RELEASE_RUNBOOK.md](docs/RELEASE_RUNBOOK.md) | 发布流程 | | [OPERATIONS_RUNBOOK.md](docs/OPERATIONS_RUNBOOK.md) | 运维和恢复 | -完整更新历史见 [CHANGELOG.md](CHANGELOG.md)。 +完整更新历史:[CHANGELOG.md](CHANGELOG.md)。 --- -## v0.8.8 新功能 +## 致谢 -以稳定性为主的发版:在 v0.8.6 / v0.8.7 基础上做了一层较厚的 UX 打磨,以及生产环境里暴露出来的运行时修复。模型和 API 没有改动,配置和会话保持向后兼容。 +此前版本得到以下贡献者的帮助: -- **TUI 打磨**:限速 / 5xx 时显示倒计时重试横幅、MCP 服务器健康指示灯、工具输出溢出预览(`~/.deepseek/tool_outputs/.txt`,详情面板里完整查看)、多日时长显示(`2d 3h` 而不是 `188415s`)、`worked Nh Mm` 累计计时器、终端可点击 OSC 8 超链接、`edit_file` / `write_file` 输出渲染为带行号 `+`/`-` 槽位的内联 unified diff。 -- **斜杠菜单不再抖动聊天区**(Windows 10 PowerShell + WSL 用户反馈):在斜杠 / 提及菜单打开时锁定 composer 高度,不再因为匹配项数量变化重绘上方区域。 -- **撰写区暂存** — Ctrl+S 把当前草稿停到 `~/.deepseek/composer_stash.jsonl`;`/stash list` / `pop` / `clear` 全程 LIFO,最多保留 200 条。 -- **可访问性**:`NO_ANIMATIONS=1`(或 `1` / `true` / `yes` / `on`)启动时强制 `low_motion = true` 与 `fancy_animations = false`,无视已保存设置;新增 `docs/ACCESSIBILITY.md`。键盘增强标志在崩溃 / Ctrl+Z 挂起 / 外部编辑器路径上都会回弹,崩溃后终端不会卡在 raw 模式。 -- **子智能体**:默认并发上限 `5 → 10`(可通过 `[subagents].max_concurrent` 配置,硬上限 20);已完成的子智能体不再占用并发名额。多智能体 fan-out 时 UI 卡死的问题已修复(`SharedSubAgentManager` 改为 `Arc>`)。子智能体输出会先做摘要再注入父上下文。新增 `Implementer` / `Verifier` 角色。`agent_swarm` / `/swarm` 老接口在 v0.8.5 已删除。 -- **工作流 / 扩展**:`load_skill` 模型可调用工具;技能发现器跨工具走 `.agents/skills` / `skills` / `.opencode/skills` / `.claude/skills` / `~/.deepseek/skills`。`/hooks` 列出生命周期钩子配置;所有 `HookEvent` 现在都有运行时生产者。`instructions = [...]` 配置数组允许把多个项目级文件叠加进系统提示。`deepseek pr ` 子命令直接抓取 PR 元数据并在撰写区里预填评审 prompt。 -- **用户记忆 MVP(默认关闭)**:开启后 `~/.deepseek/memory.md` 注入到系统提示的 `` 块;撰写区输入 `# foo` 直接追加一条带时间戳的记忆,不触发回合;`/memory show|path|clear|edit` 用于查看与编辑。`[memory] enabled = true` 或 `DEEPSEEK_MEMORY=on` 启用。 -- **安全**:项目级配置不能再通过覆盖 `api_key` / `base_url` / `provider` / `mcp_config_path` 做权限提升,也不能把 `approval_policy` 设为 `auto` 或 `sandbox_mode` 设为 `danger-full-access`。`SSL_CERT_FILE` 环境变量在 HTTPS 客户端被识别(PEM bundle + DER 兜底),方便企业 CA / MITM 代理用户。execpolicy 在 shlex 之前剥离 heredoc 主体,所以 `auto_allow = ["cat > file.txt"]` 也能匹配 heredoc 形式 `cat < file.txt\nbody\nEOF`。 -- **打包**:新增 **Linux ARM64** 预编译包(鲲鹏、HarmonyOS PC、Kylin、openEuler、树莓派、Graviton 等),`npm i -g deepseek-tui` 直接可用;新增 `docs/INSTALL.md` 覆盖所有安装方式。`deepseek update` 修复了 v0.8.7 在所有平台都失败的架构名映射 bug。CI 删了三个重复 / 失效的 workflow。 -- **Bug 修复**:composer 的 `Option+Backspace` 现在按词删除;离线撰写队列绑定到当前会话 ID,老的无作用域队列会被关闭式回退;`display_path` 测试不再竞争 `$HOME`,并在 Windows 用 `\` 拼接。 -- **认证与引导**:v0.8.8 默认不会触发系统凭据弹窗;启动、`doctor` 和普通请求路径使用 CLI 参数 → `~/.deepseek/config.toml` → 环境变量。`deepseek auth set --provider deepseek` 与 TUI 内引导现在都写入同一个用户配置文件。引导页文案改写为 "Step 1: 打开 https://platform.deepseek.com/api_keys / Step 2: 粘贴并回车"。"DeepSeek API key not found" 错误会优先给出 `deepseek auth set`,再说明环境变量方案(含 `~/.zshrc` vs `~/.zshenv` 提示)。规范入口 `deepseek` 现在接受 TUI 已声明支持的 `fireworks` / `sglang` provider;旧的 `deepseek login --api-key` / `deepseek logout` 也走同一套配置文件路径。 - -完整列表见 [CHANGELOG.md](CHANGELOG.md)。 - ---- - -## 创建和安装技能 - -DeepSeek-TUI 会从当前技能目录发现技能。优先级是:工作区 -`.agents/skills`、工作区 `./skills`、全局目录(默认 -`~/.deepseek/skills`)。每个技能都是一个包含 `SKILL.md` 的目录: - -```text -~/.deepseek/skills/my-skill/ -└── SKILL.md -``` - -`SKILL.md` 需要以 YAML frontmatter 开头: - -```markdown ---- -name: my-skill -description: 当 DeepSeek 需要遵循我的自定义工作流时使用这个技能。 ---- - -# My Skill - -这里写给智能体的指令。 -``` - -常用命令: - -```bash -/skills -/skill my-skill -/skill new -/skill install github:/ -/skill update my-skill -/skill uninstall my-skill -/skill trust my-skill -``` - -`/skills` 列出已发现技能,`/skill ` 会把技能应用到下一条消息, -`/skill new` 会调用内置的 skill-creator 辅助创建新技能。已安装技能也会 -进入模型可见的会话上下文;当用户点名某个技能,或任务明显匹配技能描述时, -智能体可以主动读取对应的 `SKILL.md` 并使用它。 - -社区技能可以直接从 GitHub 安装。安装过程受 `[network]` 策略约束,并会校验 -压缩包大小、路径穿越和符号链接。`/skill trust ` 只在你希望技能内置脚本 -可被执行时才需要。 +- **Hafeez Pizofreude** — `fetch_url` 的 SSRF 保护和 Star History 图表 +- **Unic (YuniqueUnic)** — 基于 schema 的配置 UI(TUI + web) +- **Jason** — SSRF 安全加固 --- ## 贡献 -欢迎提交 pull request。请先阅读 [CONTRIBUTING.md](CONTRIBUTING.md)。 +欢迎提交 pull request——请先查看 [CONTRIBUTING.md](CONTRIBUTING.md) 并留意[开放 issue](https://github.com/Hmbown/DeepSeek-TUI/issues) 中的好入门任务。 *本项目与 DeepSeek Inc. 无隶属关系。* ## 许可证 [MIT](LICENSE) + +## Star 历史 + +[![Star History Chart](https://api.star-history.com/chart?repos=Hmbown/DeepSeek-TUI&type=date&legend=top-left)](https://www.star-history.com/?repos=Hmbown%2FDeepSeek-TUI&type=date&logscale=&legend=top-left)