[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"project-81087":3},{"id":4,"name":5,"fullName":6,"owner":7,"repo":5,"description":8,"homepage":9,"htmlUrl":10,"language":11,"languages":10,"totalLinesOfCode":10,"stars":12,"forks":13,"watchers":14,"openIssues":15,"contributorsCount":16,"subscribersCount":16,"size":16,"stars1d":14,"stars7d":17,"stars30d":18,"stars90d":16,"forks30d":16,"starsTrendScore":19,"compositeScore":20,"rankGlobal":10,"rankLanguage":10,"license":21,"archived":22,"fork":22,"defaultBranch":23,"hasWiki":24,"hasPages":22,"topics":25,"createdAt":10,"pushedAt":10,"updatedAt":46,"readmeContent":47,"aiSummary":48,"trendingCount":16,"starSnapshotCount":16,"syncStatus":49,"lastSyncTime":50,"discoverSource":51},81087,"DeepCopilot","deep-copilot\u002FDeepCopilot","deep-copilot","Copilot-style AI coding agent for VS Code, powered by DeepSeek V4. ","https:\u002F\u002Fmarketplace.visualstudio.com\u002Fitems?itemName=ZhouChaunge.deep-copilot",null,"JavaScript",68,4,1,9,0,12,27,3,52.8,"MIT License",false,"main",true,[26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45],"agentic-ai","ai-agent","ai-coding-assistant","chatgpt-alternative","code-assistant","coding-assistant","copilot","copilot-alternative","cursor-alternative","deepseek","deepseek-api","deepseek-v4","developer-tools","github-copilot","llm","mcp","open-source","tool-calling","vscode","vscode-extension","2026-06-12 04:01:31","# Deep Copilot\n\n\u003Cp align=\"center\">\n  \u003Cimg src=\"imgs\u002Fmain_logo.png\" alt=\"Deep Copilot\" width=\"100%\"\u002F>\n\u003C\u002Fp>\n\n\u003Cp align=\"center\">\n  \u003Cb>基于 DeepSeek API 的 VS Code 对话式 AI 编程助手扩展\u003C\u002Fb>\u003Cbr\u002F>\n  \u003Csub>A VS Code extension for conversational AI-assisted coding via the DeepSeek API\u003C\u002Fsub>\n\u003C\u002Fp>\n\n\u003Cp align=\"center\">\n  \u003Ca href=\"https:\u002F\u002Fcode.visualstudio.com\u002F\">\u003Cimg src=\"https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FVS%20Code-%E2%89%A51.95.0-blue\" alt=\"VS Code\"\u002F>\u003C\u002Fa>\n  \u003Ca href=\"https:\u002F\u002Fgithub.com\u002FZhouChaunge\u002FDeepCopilot\u002Freleases\">\u003Cimg src=\"https:\u002F\u002Fimg.shields.io\u002Fgithub\u002Fv\u002Frelease\u002FZhouChaunge\u002FDeepCopilot?label=version&color=success\" alt=\"Version\"\u002F>\u003C\u002Fa>\n  \u003Ca href=\"https:\u002F\u002Fgithub.com\u002FZhouChaunge\u002FDeepCopilot\u002Fstargazers\">\u003Cimg src=\"https:\u002F\u002Fimg.shields.io\u002Fgithub\u002Fstars\u002FZhouChaunge\u002FDeepCopilot?style=flat&color=yellow\" alt=\"GitHub stars\"\u002F>\u003C\u002Fa>\n  \u003Ca href=\"https:\u002F\u002Fmarketplace.visualstudio.com\u002Fitems?itemName=ZhouChaunge.deep-copilot\">\u003Cimg src=\"https:\u002F\u002Fimg.shields.io\u002Fvisual-studio-marketplace\u002Fi\u002FZhouChaunge.deep-copilot?label=installs&color=brightgreen\" alt=\"VS Marketplace Installs\"\u002F>\u003C\u002Fa>\n  \u003Ca href=\".\u002FLICENSE\">\u003Cimg src=\"https:\u002F\u002Fimg.shields.io\u002Fbadge\u002Flicense-MIT-green\" alt=\"License\"\u002F>\u003C\u002Fa>\n\u003C\u002Fp>\n\n> Deep Copilot 是一个 VS Code 扩展，在侧边栏提供基于大语言模型的对话式编程辅助。它通过 DeepSeek API（兼容 OpenAI 协议）与模型交互，支持文件读写、代码搜索、Shell 命令执行等工具调用，结果以流式方式实时渲染。扩展无运行时 npm 依赖，基于 VS Code Extension API 与 Node.js 内置模块实现，无需在宿主机额外部署任何服务。\n>\n> Deep Copilot is a VS Code extension that provides LLM-based conversational coding assistance through the sidebar. It interacts with models via the DeepSeek API (OpenAI-compatible protocol), supporting tool calls for file read\u002Fwrite, code search, and shell command execution — all streamed in real time. The extension has no runtime npm dependencies and is built on the VS Code Extension API and Node.js built-ins; no additional service deployment is required.\n\n---\n\n## 🔑 API Keys Required · 需要配置的 API Key\n\n开始使用前只需准备以下 Key（最少只需第一个）：  \nYou only need the following keys to get started — at minimum just the first one:\n\n| # | API Key | 用途 · Purpose | 获取地址 · Get it here | 是否必须 · Required |\n|---|---|---|---|---|\n| 1 | **DeepSeek API Key** | 驱动 AI 对话与 Agent 工具调用 · Powers all AI chat & agent tool calls | [platform.deepseek.com\u002Fapi_keys](https:\u002F\u002Fplatform.deepseek.com\u002Fapi_keys) | ✅ 必须 · Required |\n| 2 | **Tavily API Key** | 启用联网搜索工具 `web_search` · Enables the `web_search` tool | [app.tavily.com](https:\u002F\u002Fapp.tavily.com) | ⚙️ 可选 · Optional |\n\n### 如何填入 · How to set them\n\n**中文：**\n1. 安装扩展后，点击侧边栏活动栏的 🐋 图标打开 Deep Copilot 面板\n2. 点击面板**右下角** 🔑 按钮 → 粘贴 **DeepSeek API Key** → 保存\n3. 若需要联网搜索，在同一弹窗里继续填入 **Tavily API Key**\n\n**English:**\n1. After installing, click the 🐋 icon in the activity bar to open the Deep Copilot panel\n2. Click the 🔑 button in the **bottom-right** of the panel → paste your **DeepSeek API Key** → save\n3. For web search, fill in your **Tavily API Key** in the same dialog\n\n> 国内用户：若 `api.deepseek.com` 连接不稳定，在 🔑 弹窗中将 Base URL 改为 `https:\u002F\u002Fapi.deepseeki.com`。  \n> China users: if `api.deepseek.com` is slow, set Base URL to `https:\u002F\u002Fapi.deepseeki.com` in the 🔑 dialog.\n\n---\n\n## 📑 Table of Contents · 目录\n\n- [API Keys · 需要配置的 Key](#-api-keys-required--需要配置的-api-key)\n- [Highlights · 亮点](#-highlights--亮点)\n- [Quick Start · 快速开始](#-quick-start--快速开始)\n- [Build from Source · 源码构建](#-build-from-source--源码构建)\n- [Configuration · 配置](#%EF%B8%8F-configuration--配置)\n- [Keybindings · 快捷键](#%EF%B8%8F-keybindings--快捷键)\n- [Tools · 工具列表](#-tools--工具列表)\n- [Architecture · 架构](#%EF%B8%8F-architecture--架构)\n- [Project Structure · 项目结构](#-project-structure--项目结构)\n- [Development · 开发](#-development--开发)\n- [Troubleshooting · 故障排查](#-troubleshooting--故障排查)\n- [Changelog · 更新日志](#-changelog--更新日志)\n- [Star History](#-star-history)\n- [License](#-license)\n\n---\n\n## ✨ Highlights · 亮点\n\n| English                                                                                                  | 中文                                                                        |\n| -------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------- |\n| **Agentic loop** with multi-turn tool calling on DeepSeek V4 (Pro \u002F Flash \u002F Reasoner)              | 与 DeepSeek V4（Pro \u002F Flash \u002F Reasoner）多轮**tool-calling 循环**          |\n| **File tools**: read, write, str-replace, apply_patch, list dir, find files, ripgrep search        | **文件工具**：读 \u002F 写 \u002F 精准替换 \u002F apply_patch \u002F 列目录 \u002F 查找 \u002F 全文搜索  |\n| **Shell tool** with configurable approval policy                                                   | **终端工具**，按审批策略弹窗确认                                           |\n| **Web search** via Tavily (optional API key)                                                       | **网络搜索**（Tavily，可选 Key）                                           |\n| **Plan & Todos** panel — agent maintains a structured plan you can watch tick off                 | **Plan & Todos** 面板，Agent 自维护结构化任务并实时勾选                    |\n| **Revert last turn** — one-click rollback of all file edits in the current agent turn             | **一键回滚**当前 Agent 轮次对文件的所有修改                                |\n| **Pending edits panel** — GH-Copilot-style review popover above the composer: per-file `+N\u002F-M`, hover Keep\u002FDiscard, click row to open native diff editor; survives turn end | **待审编辑面板**—输入框上方弹出 GH Copilot 风格的复检面板：逐文件 `+N\u002F-M`、悬停保留\u002F丢弃、点击行打开原生 Diff 编辑器；对话结束后仍可继续点击 |\n| **User memory** (`~\u002F.deepcopilot\u002Fmemory.md`) — cross-project preferences in every system prompt | **用户记忆**（`~\u002F.deepcopilot\u002Fmemory.md`），跨项目偏好自动注入系统提示词 |\n| **MCP client** — connect any MCP-compatible tool server via `deepseekAgent.mcp.servers`         | **MCP 客户端**，通过 `deepseekAgent.mcp.servers` 连接任意 MCP 工具服务器 |\n| **Post-tool hooks** — run scripts after any tool call; output injected into model context         | **工具后置钩子**，工具调用后自动执行脚本，输出注入模型上下文               |\n| **Post-edit LSP diagnostics** appended to every edit so the model can self-verify                  | 每次编辑后自动附加**LSP 诊断**，模型可自行校验                             |\n| **Per-workspace session history** with search, rename, delete                                      | 每工作区独立的**会话历史**，可搜索 \u002F 重命名 \u002F 删除                         |\n| **Parallel sessions** — switch away from a running task and start another; live replay on return  | **多会话并行**：任务跑着可以切走开新对话，回来自动回放进度                 |\n| **Streaming output** with reasoning expander, blinking cursor, top progress bar                    | **流式输出**：思维链可展开、闪烁光标、顶部进度条                           |\n| **HTML rendering** — model responses render full Markdown + HTML; math via KaTeX                  | **HTML 渲染**：响应支持完整 Markdown + HTML + KaTeX 数学公式               |\n| **Account balance** display in footer (click to refresh)                                           | **账户余额**实时显示在底栏（点击刷新）                                     |\n| **Auto-grow input** — textarea grows with content, GH Copilot style                               | **自适应输入框**：随内容自动增高，对齐 GH Copilot 体验                     |\n| **Approval modes**: Manual \u002F Auto-Edit \u002F Autopilot \u002F Read-Only                                     | **审批模式**：手动 \u002F 自动编辑 \u002F 全自动 \u002F 只读                              |\n| **Cost telemetry** in CNY shown in the footer                                                      | 底栏显示**token 数与人民币成本**                                           |\n| **Slash commands** (`\u002Fexplain`, `\u002Ffix`, `\u002Ftests` …), **`@` file refs** and **`#` context refs** — pick `#file`, `#selection`, `#editor`, `#problems`, `#changes`, `#terminal`, `#symbol:Foo`, `#fetch:URL` from the input | **斜杠命令** + **`@` 文件引用** + **`#` 上下文引用**（在输入框键入 `#` 即可挑选文件 \u002F 选区 \u002F 编辑器 \u002F 诊断 \u002F Git 改动 \u002F 终端 \u002F 符号 \u002F 抓取 URL） |\n| **Smart code-block actions**: Run in terminal · Insert · Copy · Fold long blocks                | **代码块操作**：在终端运行 \u002F 插入 \u002F 复制 \u002F 长代码折叠                      |\n| **Bilingual UI + locale-aware fonts**: auto follows VS Code locale (zh-cn \u002F en) — Chinese font stack for CJK, Latin font stack for EN                        | **中英双语 UI + 语言感知字体**：跟随 VS Code 语言自动切换界面文案与字体（中文环境使用微软雅黑\u002F苹方，英文环境使用 Segoe UI\u002FInter）    |\n| **Skills system** — define reusable SKILL.md packs in `~\u002F.deepcopilot\u002Fskills` (or `~\u002F.claude\u002Fskills`, `~\u002F.copilot\u002Fskills`); YAML frontmatter for workspace gating, invoke via `\u002Fskill` or the model's `skill_invoke` tool | **技能系统**：在 `~\u002F.deepcopilot\u002Fskills` 等目录放置 SKILL.md 技能包，支持 YAML 元数据与工作区门控，`\u002Fskill` 命令或 `skill_invoke` 工具均可唤起 |\n| **Inline FIM completions** — DeepSeek ghost-text suggestions as you type; `Tab` to accept; off by default (`deepCopilot.inlineCompletion.enable`) | **行内 FIM 补全**：基于 DeepSeek 的编辑器幽灵文字建议，`Tab` 接受；默认关闭，开关：`deepCopilot.inlineCompletion.enable` |\n| **Plan mode** — read-only investigation mode; agent can read\u002Fsearch but never write or run shell commands | **Plan 只读模式**：仅允许读文件\u002F搜索，拒绝任何写操作，适合调查代码结构时使用 |\n| **Ecosystem AI-rule discovery** — auto-injects `DEEPCOPILOT.md`, `.github\u002Fcopilot-instructions.md`, `AGENTS.md`, `.cursor\u002Frules\u002F*.mdc`, `CLAUDE.md` | **项目规则自动发现**：自动注入工作区下的主流 AI 规则文件（GitHub Copilot \u002F Cursor \u002F Claude 等），让模型了解项目约定 |\n| **Context window management** *(new in 0.41.0)* — structure-aware truncation, per-file dedup, rolling summary; `\u002Fcompact [focus]` force-compacts, `\u002Fcontext` opens a token breakdown, `\u002Ffork [name]` branches a new session from any message | **上下文窗口管理** *(0.41.0 新增)*：结构感知截断、同文件去重、滚动摘要；`\u002Fcompact [focus]` 立即压缩，`\u002Fcontext` 查看 token 占用细分，`\u002Ffork [name]` 从任一消息派生新会话 |\n| **Footer context ring** *(new in 0.41.0)* — ring indicator next to the footer ramps green → yellow → orange → red across 60 \u002F 85 \u002F 100% thresholds; click to open the same breakdown as `\u002Fcontext` | **底部 Context Ring** *(0.41.0 新增)*：底栏环形进度指示，按 60% \u002F 85% \u002F 100% 阈值由绿渐变到红；点击展开与 `\u002Fcontext` 一致的占用细分 |\n| **Archive = pure export** *(updated in 0.41.6)* — \"Archive\" now writes a Markdown snapshot under `.deep-copilot\u002Farchives\u002F` and **leaves the session alone**; old soft-hidden sessions are auto-unarchived on first launch | **存档 = 纯导出** *(0.41.6 调整)*：点「存档」只生成 `.deep-copilot\u002Farchives\u002F` 下的 Markdown 快照，**不再隐藏会话**；老版本被隐藏的会话升级后首次启动自动还原。 |\n| **Watchdog turns stay on duty** *(new in 0.41.6)* — when the agent monitors a long-running background job (training, build, dev server) via `read_terminal`, the turn refuses to end until the job finishes or the 4 h per-turn budget elapses | **值守任务不提前退出** *(0.41.6 新增)*：模型用 `read_terminal` 盯住某个后台任务（训练 \u002F 构建 \u002F 开发服务）后，turn 不会在“我会持续盯”之后静默断开，直到任务结束或命中 4h 本轮预算 |\n\n---\n\n## 🚀 Quick Start · 快速开始\n\n### Option 1 — VS Code Marketplace · 从扩展商城安装（推荐）\n\n1. Open VS Code → Extensions (`Ctrl\u002FCmd+Shift+X`) → Search **Deep Copilot** → Install.\n   打开 VS Code → 扩展面板（`Ctrl\u002FCmd+Shift+X`）→ 搜索 **Deep Copilot** → 安装。\n\n### Option 2 — Install the prebuilt VSIX · 安装预构建 VSIX\n\n```bash\n# 从 GitHub Releases 下载最新版 \u002F Download from GitHub Releases:\n# https:\u002F\u002Fgithub.com\u002FZhouChaunge\u002FDeepCopilot\u002Freleases\n\ncode --install-extension deep-copilot-0.41.6.vsix\n```\n\nOr in VS Code: **Extensions** view → `⋯` menu → **Install from VSIX...** and pick the file.\n或在扩展面板右上角 `⋯` → **Install from VSIX...** 选择文件。\n\n### Step 2 — Set the API key · 配置 API Key\n\n1. Click the 🐋 Deep Copilot icon in the **activity bar** to open the chat panel.点击**活动栏**中的 🐋 Deep Copilot 图标，打开聊天面板。\n2. Click the 🔑 button at the **bottom right** of the panel, paste your [DeepSeek API key](https:\u002F\u002Fplatform.deepseek.com\u002Fapi_keys).点击面板**右下角** 🔑 按钮，粘贴你的 [DeepSeek API Key](https:\u002F\u002Fplatform.deepseek.com\u002Fapi_keys)。\n3. Start chatting! 开始对话！\n\n---\n\n## 🛠 Build from Source · 源码构建\n\n### Prerequisites · 前置依赖\n\n| Tool              | Version | Note               |\n| ----------------- | ------- | ------------------ |\n| **Node.js** | ≥ 18   | esbuild + vsce     |\n| **npm**     | ≥ 9    | comes with Node    |\n| **VS Code** | ≥ 1.95 | extension host     |\n| **Git**     | any     | optional, to clone |\n\n### Steps · 构建步骤\n\n```bash\n# 1. Clone the repo · 克隆仓库\ngit clone https:\u002F\u002Fgithub.com\u002FZhouChaunge\u002FDeepCopilot.git\ncd DeepCopilot\n\n# 2. Install dependencies · 安装依赖\n#    (only devDependencies: esbuild + vsce + @types — runtime is pure VS Code API)\n#    （只有开发依赖；运行时仅用 VS Code API，无运行时 npm 依赖）\nnpm install\n\n# 3. Build the bundle · 编译为单文件\nnpm run build\n# -> outputs out\u002Fextension.js (~105 KB minified)\n# -> 产出 out\u002Fextension.js（约 105 KB，已压缩）\n\n# 4. Package as VSIX · 打包 VSIX\nnpm run package\n# -> outputs deep-copilot-0.41.6.vsix\n# -> 产出 deep-copilot-0.41.6.vsix\n\n# 5. Install locally · 本地安装\ncode --install-extension deep-copilot-0.41.6.vsix --force\n```\n\n### Watch mode · 监听模式（开发期）\n\n```bash\nnpm run watch\n# Rebuilds out\u002Fextension.js on every src\u002F change.\n# 修改 src\u002F 任何文件即增量重建 out\u002Fextension.js。\n# Then: F5 in VS Code (with the repo opened) launches the Extension Development Host.\n# 然后在 VS Code 里按 F5 启动“扩展开发宿主”加载本地构建。\n```\n\n### What gets built · 构建产物说明\n\n| Path                  | Tracked?   | Purpose                                                                          |\n| --------------------- | ---------- | -------------------------------------------------------------------------------- |\n| `src\u002F`              | ✅ yes     | Source modules (entry:`src\u002Fextension.js`) · 源码（入口 `src\u002Fextension.js`） |\n| `media\u002F`            | ✅ yes     | Webview assets (chat.css \u002F chat.js \u002F icons) · Webview 静态资源                  |\n| `esbuild.config.js` | ✅ yes     | Bundler config · 打包配置                                                       |\n| `package.json`      | ✅ yes     | Manifest + scripts · 清单与脚本                                                 |\n| `package-lock.json` | ✅ yes     | Locked dep versions · 锁定依赖版本                                              |\n| `out\u002Fextension.js`  | ❌ ignored | Built bundle (regenerated by `npm run build`) · 构建产物                      |\n| `release\u002F*.vsix`    | ❌ ignored | Packaged extension (regenerated by `npm run package`) · 打包后的 VSIX         |\n| `node_modules\u002F`     | ❌ ignored | npm cache · npm 依赖缓存                                                        |\n\n> **🇬🇧** Everything required to compile is in the repo. `out\u002F` and `*.vsix` are reproducible artifacts.\n> **🇨🇳** 编译所需文件全部在仓库里。`out\u002F` 和 `*.vsix` 是可重现的产物，已 `.gitignore`。\n\n---\n\n## ⚙️ Configuration · 配置\n\nAll settings live under the `deepseekAgent.*` namespace in `settings.json`.\n所有设置都在 `settings.json` 的 `deepseekAgent.*` 命名空间下。\n\n| Setting                               | Default                             | EN                                                         | 中文                                                                            |\n| ------------------------------------- | ----------------------------------- | ---------------------------------------------------------- | ------------------------------------------------------------------------------- |\n| `deepseekAgent.defaultModel`        | `deepseek-v4-pro`                 | Default model                                              | 默认模型（`deepseek-v4-pro` \u002F `deepseek-v4-flash` \u002F `deepseek-reasoner`） |\n| `deepseekAgent.apiBaseUrl`          | *(empty → `api.deepseek.com`)* | API endpoint                                               | API 入口（国内可填 `https:\u002F\u002Fapi.deepseeki.com`）                              |\n| `deepseekAgent.approvalMode`        | `manual`                          | Tool-call approval policy                                  | 工具调用审批策略                                                                |\n| `deepseekAgent.interactionMode`     | `agent`                           | `agent` \u002F `ask`                                        | 交互模式（Agent 可调工具，Ask 纯聊天）                                          |\n| `deepseekAgent.autoApproveTools`    | `[]`                              | Tool names to always allow                                 | 始终自动允许的工具名                                                            |\n| `deepseekAgent.denyTools`           | `[]`                              | Tool names to always deny                                  | 始终拒绝的工具名                                                                |\n| `deepseekAgent.maxIterations`       | `15`                              | Hard ceiling on tool-call rounds                           | 单次发送的工具调用迭代上限                                                      |\n| `deepseekAgent.compactBudgetTokens` | `600000`                          | Token budget before auto-compaction                        | 自动压缩历史前的 token 预算                                                     |\n| `deepseekAgent.postEditDiagnostics` | `true`                            | Append LSP diagnostics after every file edit               | 每次编辑后追加 LSP 诊断结果                                                     |\n| `deepseekAgent.mcp.servers`         | `[]`                              | MCP server list (see MCP section below)                    | MCP 工具服务器列表（见下方 MCP 小节）                                           |\n| `deepseekAgent.enableDebugLog`      | `true`                            | Log thought \u002F tool \u002F API events to `.deep-copilot\u002Flogs\u002F` | 写思维链 \u002F 工具 \u002F API 事件日志                                                  |\n\n### Approval Modes · 审批模式\n\n| Mode                | EN behavior                                                   | 中文行为                           |\n| ------------------- | ------------------------------------------------------------- | ---------------------------------- |\n| **manual**    | Prompt every `write_file` \u002F `run_shell` (safest, default) | 每次写文件或执行命令都弹窗（默认） |\n| **auto-edit** | Auto-approve writes; still prompt for shell                   | 写文件自动通过；Shell 仍需确认     |\n| **autopilot** | Auto-approve everything (trusted workspaces only)             | 全部自动通过（仅适合受信任工作区） |\n| **readonly**  | Deny all writes & shell                                       | 仅允许只读，禁止任何修改           |\n\n> Issue #89 · Autopilot 与危险命令：`autopilot` 模式下，命中危险命令正则（`rm -rf`、`git reset --hard`、`git push --force` …）的 shell 调用会**静默放行**，并写入 `SHELL_DANGER_AUTO_APPROVE` 审计日志，不再弹模态确认框；其他模式中，同一条命令在一次会话内被批准过一次后也会缓存，不会重复弹框。若把 `run_shell` 加入 `autoApproveTools`，效果等同于显式承担 shell 风险，请仅在受信任工作区开启。\n\n---\n\n## ⌨️ Keybindings · 快捷键\n\n| Key                               | EN                    | 中文            |\n| --------------------------------- | --------------------- | --------------- |\n| `Ctrl\u002FCmd+Shift+D`              | Open sidebar          | 打开侧边栏      |\n| `Ctrl\u002FCmd+Shift+L`              | Open in tab           | 在标签页中打开  |\n| `Enter`                         | Send message          | 发送消息        |\n| `Shift+Enter`                   | Newline               | 换行            |\n| `Esc`                           | Stop generation       | 停止生成        |\n| `Ctrl\u002FCmd+K`                    | Clear current chat    | 清空当前会话    |\n| `↑` \u002F `↓` (empty input)     | Recall prompt history | 召回历史 prompt |\n| `↑` \u002F `↓` (slash menu open) | Navigate suggestions  | 切换候选项      |\n| `Tab` \u002F `Enter` (slash menu)  | Apply suggestion      | 应用候选项      |\n\n---\n\n## 🧰 Tools · 工具列表\n\nDeep Copilot exposes a small, deliberately-minimal tool set to the model:\nDeep Copilot 给模型暴露的工具集刻意保持精简：\n\n| Tool                      | EN description                                      | 中文说明                             |\n| ------------------------- | --------------------------------------------------- | ------------------------------------ |\n| `read_file`             | Read part \u002F all of a file with optional line range  | 按行号区间读取文件                   |\n| `write_file`            | Create or overwrite a file (gated by approval)      | 新建 \u002F 覆盖文件（受审批控制）        |\n| `str_replace_in_file`   | Targeted in-place edit by exact string match        | 通过字符串精确替换原地编辑           |\n| `apply_patch`           | Apply a unified-diff patch (multi-hunk, multi-file) | 应用统一格式补丁（多 hunk \u002F 多文件） |\n| `list_dir`              | List directory entries (depth-limited)              | 列出目录（限制深度）                 |\n| `find_files`            | Glob-pattern file search                            | Glob 模式文件搜索                    |\n| `grep_search`           | Ripgrep-style regex search across the workspace     | 工作区级正则搜索                     |\n| `run_shell`             | Run a shell command (gated by approval)             | 执行 Shell 命令（受审批控制）        |\n| `web_search`            | Web search via Tavily (requires Tavily API key)     | 网络搜索（需 Tavily Key）            |\n| `update_plan`           | Push \u002F update structured plan & todos to left panel | 更新左侧 Plan \u002F Todos                |\n| `open_file_in_editor`   | Reveal a file at a given line in the editor         | 在编辑器中打开文件并跳到指定行       |\n| `revert_last_turn`      | Restore all files to their pre-turn state           | 将本轮所有文件修改回滚到初始状态     |\n| `mcp__\u003Cserver>__\u003Ctool>` | Any tool exposed by a connected MCP server          | 已连接 MCP 服务器暴露的任意工具      |\n\n> **🇬🇧** Tool definitions live in [`src\u002Ftools\u002Fschema.js`](src\u002Ftools\u002Fschema.js); execution in [`src\u002Ftools\u002Fexec.js`](src\u002Ftools\u002Fexec.js).\n>\n> **🇨🇳** 工具定义见 [`src\u002Ftools\u002Fschema.js`](src\u002Ftools\u002Fschema.js)，执行实现见 [`src\u002Ftools\u002Fexec.js`](src\u002Ftools\u002Fexec.js)。\n\n---\n\n## 🏗️ Architecture · 架构\n\n```\n┌──────────────────────────────────────────────────────────┐\n│                  VS Code Extension Host                  │\n│                                                          │\n│  ┌────────────────────────────────────────────────────┐  │\n│  │ src\u002Fextension.js  (activate \u002F commands)            │  │\n│  └────────────────────────────────────────────────────┘  │\n│                          │                               │\n│                          ▼                               │\n│  ┌────────────────────────────────────────────────────┐  │\n│  │ src\u002Fchat\u002Fprovider.js  (ChatViewProvider)           │  │\n│  │   • Webview ↔ Extension message bus                │  │\n│  │   • Per-session run map  (parallel sessions)       │  │\n│  │   • Persisted history    (globalState)             │  │\n│  │   • Plan \u002F Todos state                             │  │\n│  └────────────────────────────────────────────────────┘  │\n│            │                            │                │\n│            ▼                            ▼                │\n│  ┌──────────────────┐        ┌────────────────────────┐  │\n│  │ src\u002Fapi\u002F         │        │ src\u002Ftools\u002F             │  │\n│  │  deepseek.js     │        │  schema.js  (defs)     │  │\n│  │  • SSE streaming │        │  exec.js    (runtime)  │  │\n│  │  • Tool calls    │        │  • read\u002Fwrite\u002Flist     │  │\n│  │  • Reasoning     │        │  • grep \u002F shell        │  │\n│  └──────────────────┘        │  • approval gating     │  │\n│                              └────────────────────────┘  │\n│                                                          │\n│  ┌────────────────────────────────────────────────────┐  │\n│  │ src\u002Fwebview\u002Fhtml.js   (HTML shell injected)        │  │\n│  │ media\u002Fchat.js + chat.css   (UI runtime + styles)   │  │\n│  └────────────────────────────────────────────────────┘  │\n└──────────────────────────────────────────────────────────┘\n                          │  HTTPS (SSE)\n                          ▼\n              ┌────────────────────────┐\n              │  DeepSeek Platform     │\n              │  api.deepseek.com      │\n              │  (OpenAI-compatible)   │\n              └────────────────────────┘\n```\n\n### Key design points · 关键设计\n\n- **🇬🇧 No backend.** Everything runs inside the VS Code extension host. The single bundle `out\u002Fextension.js` is approx 94 KB.\n  **🇨🇳 无后端。** 全部跑在 VS Code 扩展主机里，单文件构建产物 `out\u002Fextension.js` 仅约94KB。\n- **🇬🇧 Per-session run map.** `provider._runs: Map\u003CsessionId, Run>` lets you switch sessions while a task is running; the run keeps producing events that get buffered and replayed when you return.\n  **🇨🇳 按会话隔离的 run 表。** `provider._runs` 让你在任务跑着时切到别的会话，事件继续缓冲，切回来自动回放。\n- **🇬🇧 Streaming via SSE.** `src\u002Fapi\u002Fdeepseek.js` parses `data:` frames and forwards `delta`, `reasoning`, `tool_calls`, `usage` to the provider.\n  **🇨🇳 SSE 流式。** `src\u002Fapi\u002Fdeepseek.js` 解析 `data:` 帧，把 `delta` \u002F `reasoning` \u002F `tool_calls` \u002F `usage` 转发给 provider。\n- **🇬🇧 Auto-compaction.** Once estimated tokens exceed `compactBudgetTokens`, older tool results are dropped before the next round.\n  **🇨🇳 自动压缩。** 估算 token 超过 `compactBudgetTokens` 时，下一轮前丢弃较老的工具结果。\n- **🇬🇧 Approval is enforced server-side (in the extension), not just UI.** A model-issued `write_file` will not execute unless the policy or user explicitly allows it.\n  **🇨🇳 审批在扩展端强制执行**（不仅是 UI 层）：模型发出的 `write_file` 必须经策略或用户放行才会真的写盘。\n\n---\n\n## 📁 Project Structure · 项目结构\n\n```\n.\n├── esbuild.config.js          # esbuild bundler config · 打包配置\n├── package.json               # extension manifest + scripts · 清单与脚本\n├── package-lock.json          # locked deps · 锁定依赖\n├── README.md                  # this file · 本文件\n├── LICENSE                    # MIT\n├── media\u002F                     # webview assets (loaded as static files)\n│   ├── chat.css               #   ↳ all UI styles · 全部 UI 样式\n│   └── chat.js                #   ↳ webview runtime (markdown, tool cards, streaming)\n├── imgs\u002F\n│   ├── logo_black_bg.png      #   ↳ extension icon + webview logo\n│   ├── logo_black_bg.svg      #   ↳ activity bar icon (vector)\n│   ├── logo.png               #   ↳ marketplace icon (white background)\n│   ├── logo_white_bg.svg      #   ↳ activity bar icon (white variant)\n│   ├── logo_white_bg.png      #   ↳ logo (base)\n│   └── screenshot.png         # README screenshot · README 截图\n└── src\u002F                       # extension source · 扩展源码\n    ├── extension.js           #   ↳ activate() entry · 入口\n    ├── errors.js              #   ↳ error → friendly bilingual card\n    ├── logger.js              #   ↳ debug log writer (.deep-copilot\u002Flogs\u002F)\n    ├── pricing.js             #   ↳ token → CNY cost calculator\n    ├── hooks.js               #   ↳ post-tool hooks runner (.deepcopilot\u002Fhooks.json)\n    ├── mcp.js                 #   ↳ MCP stdio client (McpClient + McpManager)\n    ├── api\u002F\n    │   └── deepseek.js        #   ↳ SSE chat client (OpenAI-compatible)\n    ├── chat\u002F\n    │   ├── provider.js        #   ↳ ChatViewProvider (the brain)\n    │   └── openFile.js        #   ↳ \"open file at line\" helper\n    ├── prompts\u002F\n    │   └── system.js          #   ↳ system prompt builder (+DEEPCOPILOT.md +user memory)\n    ├── tools\u002F\n    │   ├── schema.js          #   ↳ tool JSON-schema definitions\n    │   └── exec.js            #   ↳ tool runtime (file IO, ripgrep, shell)\n    ├── utils\u002F\n    │   ├── i18n.js            #   ↳ zh-cn \u002F en strings + locale detection\n    │   └── paths.js           #   ↳ path safety \u002F workspace root resolution\n    └── webview\u002F\n        └── html.js            #   ↳ generates the webview HTML shell\n```\n\n> **🇨🇳 编译入口**：`src\u002Fextension.js` → esbuild → `out\u002Fextension.js`（package.json 中 `main` 字段指向 `out\u002Fextension.js`）。\n>\n> **🇬🇧 Build entry**: `src\u002Fextension.js` → esbuild → `out\u002Fextension.js` (referenced by `main` in `package.json`).\n\n---\n\n## 💻 Development · 开发\n\n### Run the dev host · 启动扩展开发宿主\n\n```bash\ngit clone https:\u002F\u002Fgithub.com\u002FZhouChaunge\u002FDeepCopilot.git\ncd DeepCopilot\nnpm install\ncode .\n# Press F5 inside VS Code → Extension Development Host opens\n# 在 VS Code 里按 F5 → 弹出扩展开发宿主窗口\n```\n\n### Live edit cycle · 改一改试一试\n\n```bash\nnpm run watch     # esbuild watch — rebuilds on save · 保存即重建\n# In the dev host: Ctrl+R \u002F Cmd+R reloads the window after a rebuild\n# 在宿主窗口里按 Ctrl+R \u002F Cmd+R 重载即可看到效果\n```\n\n### Debug logs · 调试日志\n\n- Output panel → **Deep Copilot** channel\n  Output 面板 → 选择 **Deep Copilot** 频道\n- Or open via command palette: `Deep Copilot: Open Debug Log`\n  或命令面板：`Deep Copilot: Open Debug Log`\n- Files: `\u003Cworkspace>\u002F.deep-copilot\u002Flogs\u002Fsession-*.log`\n  日志文件：`\u003C工作区>\u002F.deep-copilot\u002Flogs\u002Fsession-*.log`\n\n### Workspace-specific instructions · 工作区级提示词\n\nCreate a `DEEPCOPILOT.md` at the workspace root and Deep Copilot will inject its content into the system prompt for every request in this workspace — useful for project conventions, build commands, \"do\u002Fdon't\" lists.\n\n在工作区根目录新建 `DEEPCOPILOT.md`，其内容会自动并入系统提示词，用来声明项目约定、构建命令、do\u002Fdon't 等。\n\n### User memory · 用户记忆\n\nCreate `~\u002F.deepcopilot\u002Fmemory.md` for cross-project preferences that apply everywhere — preferred coding style, always\u002Fnever rules, personal shortcuts. It is injected (capped at 4 KB) into every system prompt.\n\n在家目录新建 `~\u002F.deepcopilot\u002Fmemory.md`，写入跨项目的个人偏好（代码风格、禁忌事项等），Deep Copilot 会在每次对话时自动注入（最多 4KB）。\n\n### MCP servers · MCP 工具服务器\n\nAdd external tool servers via VS Code settings:\n\n```json\n\"deepseekAgent.mcp.servers\": [\n  { \"name\": \"my-db\", \"command\": \"npx\", \"args\": [\"my-db-mcp-server\"] }\n]\n```\n\nTools appear as `mcp__my-db__\u003CtoolName>` alongside built-in tools. Any MCP-compatible stdio server works.\n\n通过 VS Code 设置连接外部 MCP 工具服务器，工具以 `mcp__\u003Cserver>__\u003CtoolName>` 格式出现。任何兼容 MCP stdio 协议的服务器均可接入。\n\n### Post-tool hooks · 工具后置钩子\n\nCreate `.deepcopilot\u002Fhooks.json` in your workspace:\n\n```json\n{ \"hooks\": [\n  { \"event\": \"after_tool\", \"tool\": \"write_file\",\n    \"run\": \"npm test\", \"on_failure\": \"inject_error\", \"timeout_ms\": 30000 }\n]}\n```\n\nThe hook's stdout\u002Fstderr is appended to the tool result so the model can react — e.g., auto-fix test failures immediately after writing a file.\n\n在工作区创建 `.deepcopilot\u002Fhooks.json`，每次写文件后自动跑 `npm test`，测试输出注入模型上下文让其自动修复。\n\n### Style & conventions · 代码风格\n\n- Plain JavaScript (no TypeScript) — keep the bundle tiny.\n  纯 JavaScript（不用 TypeScript），保持产物极小。\n- No runtime dependencies — only VS Code API + Node built-ins.\n  无运行时依赖，只用 VS Code API 与 Node 内置模块。\n- Webview side communicates via `postMessage`; never imports `vscode`.\n  Webview 端通过 `postMessage` 通信，不引用 `vscode`。\n\n---\n\n## 🔧 Troubleshooting · 故障排查\n\n| Symptom · 症状                       | English Fix                                                      | 中文解决                                   |\n| ------------------------------------- | ---------------------------------------------------------------- | ------------------------------------------- |\n| `请先设置 API Key` toast            | Click 🔑 in the bottom-right of the panel                        | 点面板右下角 🔑 粘贴 Key                    |\n| 401 \u002F 403 errors                      | Key invalid or revoked — regenerate at platform.deepseek.com    | Key 失效，到 platform.deepseek.com 重新生成 |\n| 402 errors                            | Account out of balance — top up                                 | 账户余额不足，请充值                        |\n| 429 errors                            | Rate-limited; retry button is shown on the error card            | 触发限流，点错误卡上的 🔄 重试              |\n| Connection timeouts in mainland China | Switch base URL to `https:\u002F\u002Fapi.deepseeki.com`                 | 切到 `https:\u002F\u002Fapi.deepseeki.com`          |\n| UI still shows \"思考中\"               | Old VSIX still installed — install the new one with `--force` | 装新版用 `--force` 覆盖旧版               |\n| Tools not being called                | You may be in `Ask` mode — switch to `Agent` in the header  | 当前是 `Ask` 模式，切到 `Agent`         |\n| Hangs mid-task                        | Click ⏹ Stop or press `Esc`; check Debug Log                  | 点 ⏹ 或按 `Esc` 停止；查看调试日志       |\n| Status bar \"Deep Copilot\" missing     | Right-click the status bar → enable \"Deep Copilot\"              | 右键状态栏 → 勾选 \"Deep Copilot\"           |\n\n---\n\n## 📜 Changelog · 更新日志\n\n\u003Cdetails>\n\u003Csummary>点击展开完整更新日志 · Click to expand full changelog\u003C\u002Fsummary>\n\n### v0.41.6 — Archive 纯导出 · 值守任务不提前退出\n\n- 中文：①**Issue #169：Archive 语义改为「纯导出」**——点「存档」只会在 `.deep-copilot\u002Farchives\u002F` 下生成 Markdown 快照，会话本身保持原状（不再软隐藏、不会被切走、同一会话连点两次会生成两个 md）；出错或取消保存不再错误地改动 `archived` 状态。另加一次性迁移 `_migrateArchivedFlagIfNeeded`：由 `globalState['deepseekAgent.archiveSemanticsV2Migrated']` 守护，升级后首次启动自动把旧版本软隐藏的会话全部还原到侧边栏，失败走 `Logger.info('ARCHIVE_V2_MIGRATION_FAILED', ...)`，不阻塞激活。②**值守任务不提前退出**——在之前的状态下，如果后台任务（例如训练）是在更早的 turn 启动的，`BG_WAIT_SKIPPED_MODEL_DONE` 守卫会在模型说完「我会持续监控」之后立刻结束会话。本版本新增 `run._monitoredBgJobs` 跟踪集：模型调用 `read_terminal(terminal: \"deepseek-job-*\")` 读取某个后台任务后，该 jobId 被记为「当前运行在主动监控」；agent-loop 的提前退出守卫同时检查该集合，只要被监控的 bg job 仍在跑，turn 就会继续等待、走快照，直到任务结束事件抵达或命中 4h 本轮预算。③迁移错误调用 `Logger`（取代 `console.warn`），为 `deepseekAgent.enableDebugLog` 下的 Deep Copilot Debug 输出面板补齐一致的错误上下文。④`.vscodeignore` 补上 `.tmp-*.json\u002F.txt\u002F.md` 过滤，防止 PR 评论缓存等临时文件被打进 VSIX。\n- English: ①**Issue #169 — Archive becomes pure export**: clicking \"Archive\" only writes a Markdown snapshot under `.deep-copilot\u002Farchives\u002F` and leaves the session completely untouched (no more soft-hide, no more current-session-swap, clicking twice on the same session simply produces two snapshots); failure paths and save-dialog cancellation no longer mutate `archived` state. A one-shot idempotent migration `_migrateArchivedFlagIfNeeded` (guarded by `globalState['deepseekAgent.archiveSemanticsV2Migrated']`) flips every legacy `archived: true` session back to `false` on first launch so previously-hidden sessions reappear in the sidebar. Failure routes through `Logger.info('ARCHIVE_V2_MIGRATION_FAILED', ...)` instead of blocking activation. ②**Watchdog turn stays on duty**: when a background job (training, build, dev server) was started in an earlier turn, `run._sessionStartedBgJobs` is empty in the current turn, so the `BG_WAIT_SKIPPED_MODEL_DONE` guard used to terminate the conversation right after the model promised to keep monitoring. The agent now tracks every `deepseek-job-*` terminal the model inspects via `read_terminal` in `run._monitoredBgJobs`; the agent-loop guard refuses to end the turn while any such monitored job is still alive, so the loop keeps polling and emitting 4-minute snapshots until the job finishes or the 4 h per-turn budget elapses. ③Routes migration failures through `Logger` (replacing `console.warn`) so diagnostics respect `deepseekAgent.enableDebugLog` and surface in the \"Deep Copilot Debug\" output channel. ④`.vscodeignore` now filters `.tmp-*.json\u002F.txt\u002F.md`, preventing local PR-review scratch caches from accidentally leaking into the shipped VSIX.\n\n### v0.41.0 — Context Window 优化套件 · 会话切换闪屏修复\n\n- 中文：①**Issue #142：上下文窗口管理重构**——结构感知截断（保留最新工具结果完整内容，旧轮次保留摘要骨架）；同文件多次读取自动去重（仅保留最后一次完整内容，先前版本折叠为 `\u003Cfile path=... read-collapsed='true'\u002F>` 占位）；超阈值时启用**滚动摘要**（rolling summary）按需调用模型把更早的对话压缩成结构化摘要节点；MCP 工具支持 per-server 显式 opt-out；大文件读取附带 **read-large-file hint** 提醒模型按需 grep 而非整文件读入。②**新增三个斜杠命令**：`\u002Fcompact [focus]` 立即压缩当前会话历史（可附主题词偏置摘要方向，自动读取 `.deepcopilot\u002Fcompact.md` 或 `CLAUDE.md` 作为项目级 compact 指令）；`\u002Fcontext` 弹出当前会话的 token 占用细分（system \u002F messages \u002F tools \u002F files \u002F hints）；`\u002Ffork [name]` 把当前会话从某条消息派生为新会话，保留上下文起点。③**底部 Context Ring 指示器**：替换原状态点（`#foot .dot`），在底部状态栏右下角新增环形进度（`#ft-ctx`），颜色随上下文占用阈值 `\u003C60%` 绿 → `\u003C85%` 黄 → 橙 → 红渐变；点击展开 popover 显示与 `\u002Fcontext` 一致的细分；事件源 `ctxUsage` 来自 agent-loop 每轮回写。④**Issue #143：会话切换闪屏 \u002F 滚动条抖动修复**——切走再切回正在运行的会话时，缓冲事件被同步重放，每个事件触发一次 `requestAnimationFrame` 滚动，导致明显闪烁。修复：`_loadSession` 用 `setTimeout(..., 0)` 把事件重放推到下一个宏任务，并以 `replayStart` \u002F `replayEnd` 信封包裹；webview 端新增 `_replaying` 标志，在重放期间 `ascroll()` 静默，结束时一次性滚到底。⑤Anthropic \u002F OpenAI 客户端小幅清理；`errors.js` 文案微调；`file-read.js` 增加大文件提示输出；`session-store.js` 适配 rolling summary 节点的持久化与回放。\n- English: ①**Issue #142 — context-window overhaul**: structure-aware truncation (latest tool results kept verbatim, older turns collapsed to summary skeletons); per-file dedup (multiple reads of the same path keep only the latest payload; earlier ones become `\u003Cfile path=... read-collapsed='true'\u002F>` placeholders); rolling-summary fallback that compresses older history into structured summary nodes when thresholds are crossed; MCP tools support per-server explicit opt-out; large-file reads now ship a `read-large-file` hint nudging the model to grep first. ②**Three new slash commands**: `\u002Fcompact [focus]` force-compacts the active session (focus biases the summarisation; merges project-level `.deepcopilot\u002Fcompact.md` \u002F `CLAUDE.md` hints); `\u002Fcontext` opens a breakdown popover (system \u002F messages \u002F tools \u002F files \u002F hints); `\u002Ffork [name]` forks the current session from a message into a brand-new one with that context as origin. ③**Footer context ring**: replaces the legacy status dot with a ring indicator (`#ft-ctx`) whose colour ramps green → yellow → orange → red across 60\u002F85\u002F100% thresholds; click opens the same breakdown shown by `\u002Fcontext`. ④**Issue #143 — session-switch flash \u002F scrollbar jitter**: switching away from and back to a running session previously replayed buffered events in a tight loop, each one scheduling its own RAF scroll-to-bottom. Fix: `_loadSession` defers replay via `setTimeout(..., 0)` and wraps the burst with `replayStart` \u002F `replayEnd` envelopes; the webview adds a `_replaying` flag that silences `ascroll()` during the burst and performs a single final scroll on `replayEnd`. ⑤Minor cleanups in the Anthropic \u002F OpenAI clients, `errors.js` copy tweaks, `file-read.js` large-file notice, and `session-store.js` adapts to persist \u002F replay rolling-summary nodes correctly.\n\n### v0.40.4 — Pending Edits Panel · 待审编辑面板\n\n- 中文：①**新增「待审编辑」面板**：参考 GitHub Copilot in VS Code 的体验，输入框上方新增一个浮层，实时列出本会话中 Agent 写入 \u002F patch \u002F 替换的所有文件，每项显示 `+行数 \u002F -行数`，新建\u002F删除\u002F二进制文件带 tag。②**点击文件 → 原生 Diff 编辑器**：点任何一项都会打开 VS Code 原生差异编辑器，左侧为 Agent 写入前的快照（由 `deepcopilot-before:` `TextDocumentContentProvider` 提供），右侧为当前磁盘内容，URI 带时间戳防缓存 + `onDidChange` 主动刷新，保证可以重复点击。③**逺条\u002F批量操作**：悬停行出现 ✓ （保留）与 ✕ （丢弃）按钮，头部提供「全部保留 \u002F 全部丢弃」。丢弃会用快照恢复磁盘；保留仅从面板清除。④**跨轮持久**：`pendingEdits` 现在以 session 为维度维护，即使 Agent 完成本轮对话、运行实例被陆续释放，住这场会话仍可反复点击面板项 查看\u002F保留\u002F丢弃。⑤**轻量行级 diff**：新增 `src\u002Fchat\u002Fdiff-utils.js`，采用 LCS 计算 +N\u002F-M；>10k 行或 >100k 字符的文件自动降级为集合 diff。二进制文件（包含 NUL 字节）仅标记 `binary` 不走 diff，避免乱码计数。⑥**与现有「回滚本轮」联动**：Revert \u002F `revert_last_turn` 会同步清空 pendingEdits 面板，不遗留幽灵项。⑦**CSP \u002F 安全**：Webview CSP 未放宽；content provider 仅返回内存中的快照，不访问任何额外路径。\n- English: ①**New \"Pending edits\" panel**: inspired by GitHub Copilot in VS Code. A popover sits above the composer and lists every file the agent just wrote\u002Fpatched\u002Freplaced, with per-file `+lines \u002F -lines` stats and `new` \u002F `deleted` \u002F `binary` tags. ②**Click → native diff editor**: clicking any row opens the real VS Code diff editor — left side is the pre-edit snapshot served by a `deepcopilot-before:` `TextDocumentContentProvider`, right side is the current on-disk content. URIs carry a cache-busting timestamp and the provider fires `onDidChange`, so repeat clicks always re-open. ③**Per-row & bulk actions**: hover reveals ✓ (Keep) and ✕ (Discard); the header offers \"Keep all \u002F Discard all\". Discard restores from snapshot; Keep simply removes the row. ④**Survives turn end**: `pendingEdits` is now keyed by session rather than by run, so even after AgentLoop reaps the run at end-of-reply, the panel rows remain clickable until you Keep\u002FDiscard them — matching the Copilot UX. ⑤**Lightweight line diff**: new `src\u002Fchat\u002Fdiff-utils.js` computes `+N\u002F-M` via LCS, with a graceful fallback for files >10k lines or >100k chars and a binary-safety guard so PNGs etc. just get a `binary` tag instead of garbled counts. ⑥**Aligned with existing Undo**: `revert_last_turn` and the status-bar revert button also clear the pending-edits panel, so there are no orphan entries. ⑦**CSP \u002F safety**: webview CSP unchanged; the content provider only returns in-memory snapshots and never touches paths outside what was already captured.\n\n### v0.40.0 — UI 视觉统一 · Terminal Early-Exit · 打包清理\n\n- 中文：①**聊天 UI 视觉重构**：引入 `--dc-indent \u002F --dc-fg-* \u002F --dc-accent \u002F --dc-rule` 设计变量，8 大容器统一为「2px 左侧色条 + 16px 缩进」结构；`.tool` 卡片头部、`.tl` 工具行、`.tl-detail` 详情区与 `.tool .b` 主体全部按同一节奏对齐，视觉杂讯显著降低。②**工具类型色条**：新增 `k-read \u002F k-write \u002F k-search \u002F k-shell \u002F k-agent \u002F k-plan \u002F k-other` 类型染色，不同工具一眼可分；同时 `.tl-group .tl-summary` 的折叠摘要也统一为 2px 色条样式。③**Thinking 块体验**：模型开始正文输出后，思考块头部自动汇总为 `Thought for Ns` 并折叠，但保留头部入口，用户随时可展开复盘思考过程。④**chip 语义统一**：工具名 chip 由 `\u003Cspan>` 改为 `\u003Ccode>`，与正文 monospace 一致。⑤**Output style contract**：系统提示词新增\"输出风格契约\"段，约束等宽规则、列表语义、段落控制、禁用装饰性 emoji，对话排版更稳定。⑥**Terminal Early-Exit Window**：`run_shell_bg` 提交后增加 2.5s 早退捕获窗口——若命令在窗口内崩溃\u002F退出，会同步返回真实的 `exit_code` + 输出，模型立刻看见错误，不再出现\"提交完任务就摆烂\"的现象；窗口超时则按原 `running` 流程异步推进。配套 `terminal-monitor` 新增 `markSyncReturnedJob\u002FwasSyncReturned` 防重复注入，避免事件回放污染上下文。⑦**`.vscodeignore` 清理**：移除 14 条失效规则（已删除的 `test\u002F` `data\u002F` `models\u002F` `runs\u002F` 及一系列 `.pt` 权重等），新增 `.github\u002F**` `.eslintrc.json` `.gitleaksignore`，按用途分组并加注释，vsix 体积更精简。\n- English: ①**Chat UI visual refresh**: introduced design tokens `--dc-indent \u002F --dc-fg-* \u002F --dc-accent \u002F --dc-rule`; eight container types now share one \"2px left rule + 16px indent\" rhythm — `.tool` card headers, `.tl` tool rows, `.tl-detail` panels and `.tool .b` body are visually aligned, dramatically reducing noise. ②**Tool-type color rails**: new `k-read \u002F k-write \u002F k-search \u002F k-shell \u002F k-agent \u002F k-plan \u002F k-other` accent classes so different tools are distinguishable at a glance; `.tl-group .tl-summary` adopts the same 2px rail. ③**Thinking-block UX**: as soon as the model starts streaming the reply, the thought block auto-collapses with a `Thought for Ns` summary while keeping the header visible for on-demand review. ④**Chip semantics**: tool-name chip changed from `\u003Cspan>` to `\u003Ccode>` to align with monospace body text. ⑤**Output style contract**: system prompt gains a new \"Output style contract\" section governing monospace usage, list semantics, paragraph control, and banning decorative emoji — markdown output is far more consistent. ⑥**Terminal early-exit window**: `run_shell_bg` now races the spawn against a 2.5s capture window — if the command crashes\u002Fexits inside the window, the real `exit_code` + output are returned **synchronously**, so the model sees failures immediately instead of \"giving up\" after a fire-and-forget submission; on timeout, the original async `running` path takes over. `terminal-monitor` exposes `markSyncReturnedJob\u002FwasSyncReturned` to deduplicate the late `bg-job-end` event so the agent loop never re-injects what was already returned synchronously. ⑦**`.vscodeignore` cleanup**: removed 14 stale rules (deleted `test\u002F` `data\u002F` `models\u002F` `runs\u002F` directories and a batch of `.pt` weights), added `.github\u002F**` `.eslintrc.json` `.gitleaksignore`, and grouped\u002Fcommented the file by purpose — vsix payload is leaner.\n\n### v0.35.2 — Explorer 附加 · read_terminal · Agent 验证闭环 · save_plan\n\n- 中文：①**Explorer 右键附加**：在 VS Code 资源管理器右键任意文件或文件夹，点击「附加到 Deep Copilot」可将文件内容或目录结构以 chip 形式注入聊天上下文；文件超 64 KB 自动截断，文件夹递归遍历（最深 3 层 \u002F 最多 200 条，跳过 `node_modules` \u002F `.git` 等噪音目录）。②**`read_terminal` 工具**：模型可主动读取 VS Code 集成终端的最新输出，无需用户手动粘贴；支持按终端名称过滤，输出自动截断并脱敏敏感路径。③**Agent 主动验证闭环**：Agent 执行关键写操作或命令后，自动生成\"下一步验证\"tool call（如读文件确认内容、运行测试）；`run_shell` 结果结构化为 `{exit_code, stdout, stderr}`，模型可直接判断成功\u002F失败。④**`save_plan` 工具**：Plan 模式调查结束时将结构化计划（标题、目标、步骤、涉及文件、风险）持久化到 `.deep-copilot\u002Fplans\u002F` 目录，以时间戳命名为标准 Markdown 文件。⑤**上下文 chip 自动附加当前文件**：打开编辑器文件后，该文件路径自动以 chip 形式出现在输入框，发送时作为上下文附加；切换文件 chip 实时更新，聚焦聊天面板时 chip 保持不变（不再误清除）。⑥修复：技能路径跨 home \u002F 工作区目录解析；工具卡片边框改为主题感知色；工具头部状态栏恢复显示；Composer 区域移除多余分隔线。\n- English: ①**Explorer context-menu attach**: right-click any file or folder in VS Code Explorer → \"Attach to Deep Copilot\" injects its content or directory tree as a chip into the chat input. Files auto-truncated at 64 KB; folders walked recursively (max depth 3, max 200 entries; `node_modules` \u002F `.git` \u002F `dist` etc. skipped). ②**`read_terminal` tool**: the model can proactively read the latest output of the VS Code integrated terminal without the user manually copy-pasting; supports filtering by terminal name; output auto-truncated with sensitive paths sanitised. ③**Agent proactive verification loop**: after critical writes or shell commands, the agent automatically emits a follow-up tool call to verify the result (e.g. re-read a file to confirm content, or run tests); `run_shell` result is structured as `{exit_code, stdout, stderr}` so the model can branch on success\u002Ffailure. ④**`save_plan` tool**: at the end of a Plan-mode investigation, the structured plan (title, goal, steps, files, risks) is persisted to `.deep-copilot\u002Fplans\u002F` as a timestamped Markdown file. ⑤**Context-chip auto-attach current file**: when an editor file is focused, its path appears as a chip in the input bar; chip updates live as the active file changes; chip is preserved (no longer cleared) when focus moves to the chat panel. ⑥Fixes: skill SKILL.md path resolution across home \u002F workspace directories; tool-card borders replaced with theme-aware `var(--vscode-panel-border)`; tool header status bar restored; Composer top separator removed.\n\n### v0.35.0 — Skills · FIM 行内补全 · Plan 模式 · 项目规则发现\n\n- 中文：①**技能系统升级**：三目录扫描（`~\u002F.deepcopilot\u002Fskills` \u002F `~\u002F.claude\u002Fskills` \u002F `~\u002F.copilot\u002Fskills`），YAML 元数据解析（`name`\u002F`description`\u002F`applies_to` 工作区门控），稳定字母排序，新增 `skill_invoke` 工具让模型按需加载技能，斜杠命令 `\u002Fskill \u003Cname>` 手动唤起。②**DeepSeek FIM 行内补全**：在编辑器停止输入约 350ms 后，以前缀\u002F后缀上下文调用 DeepSeek FIM 接口，建议以幽灵文字呈现，`Tab` 接受；默认关闭（`deepCopilot.inlineCompletion.enable`），静默失败，请求自动取消，日志脱敏。③**Plan 只读交互模式**：新增 Plan 模式，系统提示词追加只读约束，模型只可读文件\u002F搜索，任何写操作或 shell 执行均被工具层拦截，适合先调查后动手。④**项目级 AI 规则自动发现**：启动时扫描 `DEEPCOPILOT.md`、`.github\u002Fcopilot-instructions.md`、`AGENTS.md`、`.cursor\u002Frules\u002F*.mdc`、`CLAUDE.md`，全量注入系统提示词（总量不超过 8 KB）。⑤**AUTOCOMPACT 持久通知**：上下文自动压缩时在聊天界面插入持久通知卡片。⑥修复：autopilot 模式下危险命令弹窗跳过 + 每会话缓存；Shell 心跳超时 + SIGKILL 兜底；孤立工具消息 HTTP 400 自愈；IME 输入法 Enter 防误触。\n- English: ①**Skills upgrade**: three-directory scan, YAML frontmatter (`name`\u002F`description`\u002F`applies_to` workspace gating), stable alpha sort, new `skill_invoke` tool for on-demand model-side loading, `\u002Fskill \u003Cname>` slash command for manual invocation. ②**DeepSeek FIM inline completions**: ghost-text suggestions using surrounding context (4 000 chars prefix \u002F 2 000 chars suffix) after ~350 ms idle; `Tab` to accept; off by default (`deepCopilot.inlineCompletion.enable`); silent failure; auto-cancel on next keystroke; sanitised error logs. ③**Plan read-only mode**: new Plan option in the mode selector; system prompt gains a read-only constraint — only read\u002Fsearch tools permitted; any write\u002Fshell call returns a tool error; ideal for investigation before editing. ④**Ecosystem AI-rule discovery**: on startup, scans `DEEPCOPILOT.md`, `.github\u002Fcopilot-instructions.md`, `AGENTS.md`, `.cursor\u002Frules\u002F*.mdc`, `CLAUDE.md` and injects all found content into the system prompt (capped at 8 KB). ⑤**AUTOCOMPACT persistent notice**: when auto-compaction fires, a permanent in-chat card is inserted so users understand why older tool outputs may be gone. ⑥Fixes: autopilot skips danger-cmd modal with per-session cache; shell heartbeat + SIGKILL fallback; orphan tool-message HTTP 400 self-heal; IME composition Enter guard.\n\n### v0.34.0 — `#` Context-Reference Picker · GitHub Copilot 风格的 # 上下文选择器\n\n- 中文：在聊天输入框键入 `#` 弹出上下文引用选择器，可一键附加：`#file`（工作区文件）\u002F `#selection`（当前选区）\u002F `#editor`（当前整文件）\u002F `#problems`（诊断信息）\u002F `#changes`（`git diff` 未提交改动）\u002F `#terminal`（终端选中文本）\u002F `#symbol:Foo`（工作区符号）\u002F `#fetch:URL`（抓取链接内容）。所有引用以 `\u003Cattachment path=\"…\">` 块形式注入模型上下文；带参引用支持空格自动转 chip，未提交的 `#ref:arg` 在发送时由扩展端原子解析后随消息一并下发，避免异步竞态。`#fetch` 复用 `web-fetch.js` 的 SSRF 拦截；`#file` \u002F `#editor` 严格校验路径在工作区内。\n- English: Typing `#` in the chat input opens a context-reference picker. One-click attach: `#file` (any workspace file), `#selection` (active selection), `#editor` (active file), `#problems` (diagnostics), `#changes` (unstaged `git diff`), `#terminal` (selected terminal text), `#symbol:Foo` (workspace symbols), `#fetch:URL` (web fetch). All refs ride as `\u003Cattachment path=\"…\">` blocks with synthetic paths (`\u003Cproblems>`, `\u003Cgit-changes>`, `\u003Csymbol:Foo>`, `\u003Cfetch:URL>`) so the model can tell them apart from real files. Inline `#ref:arg` tokens are resolved race-free on the extension side before the agent loop runs. SSRF blocklist enforced for `#fetch`; workspace-containment check for `#file` \u002F `#editor`.\n\n### v0.33.0 — Compact Tool UI · Sonar Spinner Redesign · 工具栏精简与进度动画重设计\n\n- 中文：大幅精简工具调用的显示方式，隐藏图标、三角形与分栏，改为单行灰色文本，文件路径更淡化，点击后展开详情；移除所有中间\"思考中\"气泡的耗时显示；底部进度动画全面重设计——保留蓝色 sonar 光波，去除背景色与边框，加入 20 个英文动词随机轮播（每 3 秒切换，渐显动画）与实时计时器；修复长回复时 spinner 被输入框遮挡的问题（requestAnimationFrame 布局时序修正 + 每秒兜底滚动）。\n- English: Heavily simplified tool-call display — icons, chevrons, and column layout removed in favour of a single-line grey text row with faded file paths and click-to-expand detail. Removed elapsed-time labels from all intermediate \"Thinking\" chips. Completely redesigned the bottom progress indicator: keeps the blue sonar dot, removes background \u002F border \u002F shimmer, adds a 20-word English verb carousel (randomised every 3 s with a fade-in animation) and a live elapsed timer. Fixed the spinner being obscured by the input box during long streaming responses via `requestAnimationFrame`-deferred scrolling and a per-second scroll safety net.\n\n### v0.32.9 — Autopilot 静默放行工作区外路径 · Silent pass-through for out-of-workspace paths\n\n- 中文：在 `src\u002Ftools\u002Futils.js` 的 `ensurePathAllowed()` 中新增审批模式检测。当 `approvalMode === 'autopilot'` 时，访问工作区外的路径（如 `~\u002F.deepcopilot\u002Fmemory.md`）**静默放行**，不再弹出“访问工作区之外”对话框，与 autopilot 语义保持一致。其他模式（`manual` \u002F `auto-edit`）行为不变。\n- English: `ensurePathAllowed()` in `src\u002Ftools\u002Futils.js` now checks the approval mode. In `autopilot`, paths outside the workspace (e.g. `~\u002F.deepcopilot\u002Fmemory.md`) are silently allowed and cached for the session, eliminating the previously dialog. `manual` \u002F `auto-edit` behaviour is unchanged.\n\n### v0.32.8 — 允许 Agent 启动桌面应用 · Allow agent to launch desktop applications\n\n- 中文：在系统提示词的 Using tools 章节尊明确声明 `run_shell` 拥有**完整的操作系统访问能力**，并给出 Windows `Start-Process` \u002F macOS `open` \u002F Linux `xdg-open` 的调起范例，禁止 Agent 以“无法启动桌面应用”为由拒绝任务；修复 autopilot 下“打开某某软件”请求被静默拒绝的问题。\n- English: Added an explicit positive clause to the Using-tools section of the system prompt that declares `run_shell` has full OS-level access, with platform-specific launchers (`Start-Process`, `open`, `xdg-open`). Fixes the regression where the agent refused to attempt launching desktop apps in autopilot mode (`tool_calls=0`).\n\n### v0.32.7 — Locale-Aware Fonts & Full Webview i18n · 语言感知字体与界面全面本地化\n\n- 🇬🇧 **Locale-aware font switching**: on startup, reads `vscode.env.language`; `zh-*` locales use a CJK-optimised font stack (Microsoft YaHei UI \u002F PingFang SC \u002F Noto Sans CJK SC, with Linux fallback), all other locales use a Latin-optimised stack (Segoe UI \u002F Inter \u002F system-ui). Implemented via `html[data-locale]` CSS attribute selectors — zero bundle-size increase.\n  **🇨🇳 语言感知字体切换**：启动时读取 `vscode.env.language`，`zh-*` 语言使用中文优化字体栈（微软雅黑 UI \u002F 苹方 \u002F Noto Sans CJK \u002F WenQuanYi，覆盖 Win\u002FMac\u002FLinux），其他语言切换为 Latin 优化字体栈（Segoe UI \u002F Inter \u002F system-ui）。通过 `html[data-locale]` CSS 属性选择器实现，零打包体积增加。\n- 🇬🇧 **Full webview i18n**: all 20 hardcoded Chinese strings in the webview HTML template (welcome subtitle, input placeholder, session panel labels & buttons, empty-state text, thinking indicator, all tooltips) now route through the existing `t()` i18n system. English VS Code users see a fully English interface.\n  **🇨🇳 Webview 界面全面本地化**：`src\u002Fwebview\u002Fhtml.js` 中 20 处硬编码中文字符串全部接入现有 `t()` 国际化系统（欢迎页副标题、输入框提示、会话面板标签与按钮、空状态文本、思考中指示器、所有工具提示）。英文 VS Code 用户现在看到完整的英文界面。\n\n### v0.32.0 — Unified API Settings UI · API 设置一站式面板\n\n- 🇬🇧 **One-click access to all API keys**: clicking the 🔑 button now opens a unified QuickPick panel with three items — **DeepSeek API Key (required)**, **Tavily API Key (optional)**, and **Base URL** — each showing live status, masked key preview, and inline help. The Tavily key, previously only accessible via the command palette, is now visible in the UI.\n  **🇨🇳 一键访问所有 API 配置**：点击 🔑 按钮现会弹出统一的 QuickPick 面板，包含三项设置——**DeepSeek API Key（必填）**、**Tavily API Key（可选）**、**Base URL**，每项都显示实时状态、脱敏后的 Key 预览与说明。Tavily Key 之前只能通过命令面板访问，现在在 UI 中可见。\n- 🇬🇧 **Status indicators**: codicon icons (`pass-filled` \u002F `circle-large-outline`) show at a glance which keys are configured.\n  **🇨🇳 状态图标**：使用 codicon 图标（`pass-filled` \u002F `circle-large-outline`）一眼看出哪些 Key 已配置。\n- 🇬🇧 **Looped UI**: after configuring one item, the panel returns automatically so users can set multiple keys without reopening.\n  **🇨🇳 循环面板**：设置完一项后面板自动返回列表，可连续配置多项无需重新点击。\n- 🇬🇧 **README**: added a “API Keys Required” section near the top to help new users get set up faster.\n  **🇨🇳 README 更新**：顶部新增「API Keys Required」章节，帮助新用户更快上手。\n\n### v0.31.6 — HTML Rendering Fixes · 1M Context Window · HTML 渲染全面修复与上下文扩容\n\n- 🇬🇧 **HTML inline tag whitelist expanded**: `SAFE_HTML_TAGS` now covers all common inline HTML elements — `strong`, `em`, `b`, `i`, `span`, `code`, `a`, `p`, `time`, `data`, `wbr`, `bdi`, `bdo`, `ruby`\u002F`rt`\u002F`rp`\u002F`rb` and all previous tags. Model-output HTML inline tags no longer appear as escaped text.\n  **🇨🇳 内联标签白名单全面扩充**：新增 `strong`、`em`、`b`、`i`、`span`、`code`、`a`、`p`、`time`、`data`、`wbr`、`bdi`\u002F`bdo`、`ruby`\u002F`rt`\u002F`rp`\u002F`rb` 等标签，模型输出的内联 HTML 不再显示为转义文本。\n- 🇬🇧 **Block-level heading tags** (`h1`–`h6`) added to the `HB_TAGS` extractor and DOMPurify `ADD_TAGS` — headings now render correctly instead of showing as raw HTML.\n  **🇨🇳 块级标题标签**（`h1`–`h6`）加入 `HB_TAGS` 提取器与 DOMPurify `ADD_TAGS`，标题不再显示为原始 HTML。\n- 🇬🇧 **Fixed placeholder token ordering bug**: `HBRAW` blocks are now restored before `HTML` inline tokens, fixing the `HTML12ρHTML13` artefact that appeared when inline tags (`\u003Cvar>`, `\u003Csub>` etc.) were nested inside block elements (`\u003Cul>`, `\u003Cdiv>` etc.).\n  **🇨🇳 修复占位符还原顺序 Bug**：将 `HBRAW` 块的还原调整到 `HTML` 内联 token 之前，修复 `\u003Cvar>` 等标签嵌套在 `\u003Cul>` 内时出现 `HTML12ρHTML13` 乱码的问题。\n- 🇬🇧 **1M context window support**: `COMPACT_BUDGET` raised to 600K, `MODEL_CTX_HARD_LIMIT` raised to 900K, and `max_tokens` raised to 32 768 — matching DeepSeek's actual 1M input \u002F 384K output limits. Long conversations no longer hit the 60K hard cap that previously caused premature compaction.\n  **🇨🇳 支持 1M 上下文**：`COMPACT_BUDGET` 提升至 60 万，`MODEL_CTX_HARD_LIMIT` 提升至 90 万，`max_tokens` 提升至 32 768，完全匹配 DeepSeek 1M 输入 \u002F 384K 输出的实际规格，彻底解决长对话过早触发压缩或报错的问题。\n- 🇬🇧 **System prompt updated**: `h1`–`h6` tags added to the safe HTML tag list; model instructed not to use inline `style=` attributes.\n  **🇨🇳 系统提示词更新**：新增 `h1`–`h6` 进安全标签列表，并明确告知模型不要使用内联 `style=` 属性。\n\n### v0.31.0 — Parallel Sub-Agents · Streaming Terminal Cards · v0.31.0\n\n- 🇬🇧 **`spawn_agent`**: launch isolated sub-agents with their own context; multiple sub-agent calls in the same turn now execute in parallel (Phase 1), matching `read_file` \u002F `grep_search` behaviour.\n  **🇨🇳 `spawn_agent`**：启动独立上下文的子 Agent；同一轮次的多个子 Agent 调用现在并行执行，与 `read_file` \u002F `grep_search` 行为一致。\n- 🇬🇧 **Streaming terminal cards**: `run_shell`, `web_search`, `spawn_agent` outputs now render in expandable cards with live-streaming content.\n  **🇨🇳 流式终端卡片**：`run_shell`、`web_search`、`spawn_agent` 输出以可展开卡片实时渲染。\n- 🇬🇧 TLS keep-alive retry and large-file streaming safety improvements.\n  **🇨🇳** TLS keep-alive 重试与大文件流式安全改进。\n\n### v0.30.13 — Skill Notice UI Refactor · Skill 提示栏重构\n\n- 🇬🇧 **Skill notice bar**: `\u002Fskill` chip is now displayed as a dedicated blue pill inside the input row (outside the file-chip area), making the active skill always visible alongside the textarea.\n  **🇨🇳 Skill 提示栏**：激活的 `\u002Fskill` 现以独立蓝色胶囊显示在输入行内（与文件附件 chip 区分），一眼即可看到当前挂载的 Skill。\n- 🇬🇧 File attachment chips and skill chip are now rendered in separate DOM elements — no z-index conflicts, no invisible chips.\n  **🇨🇳** 文件附件 chip 与 Skill chip 分离为独立 DOM 元素，彻底消除层叠冲突与不可见 chip 问题。\n- 🇬🇧 Input row (`#inp-row`) wraps the skill notice and textarea as a flex row so both are always in view.\n  **🇨🇳** 输入行（`#inp-row`）以 flex 布局将提示栏与输入框并排，互不遮挡。\n\n### v0.30.2 — Skill Discovery · Image Attachment · Asset Cleanup · v0.30.2\n\n- 🇬🇧 **Skill discovery**: scans `~\u002F.claude\u002Fskills\u002F` & `~\u002F.copilot\u002Fskills\u002F` for `SKILL.md` at startup; skills appear in the `\u002F` slash-command menu.\n  **🇨🇳 Skill 自动发现**：启动时扫描 `~\u002F.claude\u002Fskills\u002F` 与 `~\u002F.copilot\u002Fskills\u002F`，发现的 Skill 自动合并进 `\u002F` 菜单。\n- 🇬🇧 **Image attachments**: drag or click-attach PNG\u002FJPG\u002FGIF\u002FWebP; thumbnail preview in chip bar; binary-file guard; multimodal `image_url` format sent to DeepSeek vision API.\n  **🇨🇳 图片附件**：拖拽或点击附加 PNG\u002FJPG\u002FGIF\u002FWebP；chip 栏缩略图预览；二进制文件友好报错；以 `image_url` 格式发送给视觉 API。\n- 🇬🇧 All logo\u002Ficon assets consolidated under `imgs\u002F`; webview `localResourceRoots` updated.\n  **🇨🇳** 所有 logo 文件统一移入 `imgs\u002F`，Webview 资源根路径同步更新。\n- 🇬🇧 Auto-creates `~\u002F.deepcopilot\u002Fskills\u002F` directory on activation.\n  **🇨🇳** 激活时自动创建 `~\u002F.deepcopilot\u002Fskills\u002F` 目录。\n\n### v0.28.14 — UI Overhaul · UI 全面改版\n\n- 🇬🇧 **New branding**: white whale logo on dark background, SVG vector activity bar icon.**🇨🇳 全新品牌形象**：黑底白色小鲸鱼 logo，活动栏矢量图标。\n- 🇬🇧 **Cleaner layout**: top toolbar removed; API key 🔑 moved to footer bottom-right.**🇨🇳 更简洁的布局**：顶部工具栏移除，API Key 🔑 移至右下角底栏。\n- 🇬🇧 **Auto-grow textarea**: input box grows with content, GH Copilot style (max 200px).**🇨🇳 自适应输入框**：随内容自动增高（对齐 GH Copilot 风格，最高 200px）。\n- 🇬🇧 Stability fixes: activation crash from unescaped backtick in system prompt; JS null reference from removed DOM element.\n  **🇨🇳** 稳定性修复：系统提示词反引号导致的激活崩溃；DOM 元素删除后 JS 空引用。\n\n### v0.28.3 — HTML Rendering · Account Balance · v0.28.3\n\n- 🇬🇧 **HTML rendering** in chat: model responses render full Markdown + HTML + KaTeX math.**🇨🇳 HTML 渲染**：响应支持完整 Markdown + HTML + KaTeX 数学公式。\n- 🇬🇧 **Account balance** widget in footer: shows remaining DeepSeek credit, click to refresh.**🇨🇳 账户余额**：底栏实时显示 DeepSeek 余额，点击刷新。\n- 🇬🇧 PR automation tooling improvements.\n  **🇨🇳** PR 自动化工具改进。\n\n### v0.28.0 — MCP · Hooks · User Memory · Revert Last Turn\n\n- 🇬🇧 **MCP client** (`src\u002Fmcp.js`): connect any MCP stdio tool server; tools appear as `mcp__\u003Cserver>__\u003Ctool>`. Configure via `deepseekAgent.mcp.servers`.\n- 🇨🇳 **MCP 客户端**（`src\u002Fmcp.js`）：连接任意 MCP stdio 工具服务器，工具以 `mcp__\u003Cserver>__\u003Ctool>` 并列出现，通过 `deepseekAgent.mcp.servers` 配置。\n- 🇬🇧 **Post-tool hooks** (`src\u002Fhooks.js`): run custom scripts after any tool call. Configure via `.deepcopilot\u002Fhooks.json`. Output injected into model context.\n- 🇨🇳 **工具后置钩子**（`src\u002Fhooks.js`）：任意工具调用后自动执行用户脚本，输出注入模型上下文。\n- 🇬🇧 **User memory**: `~\u002F.deepcopilot\u002Fmemory.md` is injected (capped 4 KB) into every system prompt as \"User preferences\".\n- 🇨🇳 **用户记忆**：`~\u002F.deepcopilot\u002Fmemory.md`（最多 4KB）注入每次对话的系统提示词。\n- 🇬🇧 **Revert last turn**: `revert_last_turn` tool + `deepseekAgent.revertLastTurn` command — roll back all file changes from the current agent turn in one click.\n- 🇨🇳 **一键回滚**：`revert_last_turn` 工具与 `deepseekAgent.revertLastTurn` 命令，一键撤销当前轮次所有文件改动。\n- 🇬🇧 **Post-edit LSP diagnostics**: errors & warnings auto-appended after every file edit so the model can self-verify.\n- 🇨🇳 **编辑后 LSP 诊断**：每次文件编辑后自动追加错误与警告，模型可据此自行修复。\n\n### v0.26.0 — Parallel tools · @file attach · apply_patch · Tool cache\n\n- 🇬🇧 Multiple independent tool calls in one model turn (parallel execution). `@filename` attachment. `apply_patch` for multi-hunk edits. Tool result caching.\n- 🇨🇳 单轮多工具并行执行；`@文件名` 附件；`apply_patch` 多 hunk 编辑；工具结果缓存。\n\n### v0.25.0 — Web search\n\n- 🇬🇧 Added `web_search` tool powered by Tavily API.\n- 🇨🇳 新增 `web_search` 工具，基于 Tavily API。\n\n### v0.24.2 — Flat tool UI · 工具卡片扁平化\n\n- 🇬🇧 Tool rows are now hairline-bordered, no fill, GitHub-Copilot-Chat style.\n- 🇨🇳 工具行改为细线分隔 + 无填充，接近 GitHub Copilot Chat 视觉。\n\n### v0.24.0 — Parallel sessions · 多会话并行\n\n- 🇬🇧 Switch sessions while a run is in flight; events buffer and replay on return. Refactored into modular `src\u002F`.\n- 🇨🇳 任务运行中可切走开新对话，事件缓冲、切回自动回放；代码拆分为模块化 `src\u002F`。\n\n### v0.20.0 — Copilot-grade UX overhaul\n\n- 🇬🇧 Stop + Esc, blinking cursor, progress bar, code blocks with Run\u002FInsert\u002FCopy, syntax highlight, fold, hover bar, slash-commands, `@` refs, prompt history, bilingual error cards.\n- 🇨🇳 Stop + Esc 中断、闪烁光标、进度条、代码块操作、语法高亮、折叠、悬浮操作栏、斜杠命令、`@` 上下文、↑\u002F↓ 历史、双语错误卡。\n\n> Full history: see [git log](https:\u002F\u002Fgithub.com\u002FZhouChaunge\u002FDeepCopilot\u002Fcommits\u002Fmain) and [Releases](https:\u002F\u002Fgithub.com\u002FZhouChaunge\u002FDeepCopilot\u002Freleases).\n> 完整历史：见 [git log](https:\u002F\u002Fgithub.com\u002FZhouChaunge\u002FDeepCopilot\u002Fcommits\u002Fmain) 与 [Releases](https:\u002F\u002Fgithub.com\u002FZhouChaunge\u002FDeepCopilot\u002Freleases)。\n\n\u003C\u002Fdetails>\n\n---\n\n## 📄 License\n\nMIT © [ZhouChaunge](https:\u002F\u002Fgithub.com\u002FZhouChaunge). See [LICENSE](.\u002FLICENSE).\n\n---\n\n## ⭐ Star History\n\n\u003Ca href=\"https:\u002F\u002Fwww.star-history.com\u002F#ZhouChaunge\u002FDeepCopilot&Date\">\n  \u003Cpicture>\n    \u003Csource media=\"(prefers-color-scheme: dark)\"\n            srcset=\"https:\u002F\u002Fapi.star-history.com\u002Fsvg?repos=ZhouChaunge\u002FDeepCopilot&type=Date&theme=dark&legend=top-left&_=20260518\" \u002F>\n    \u003Csource media=\"(prefers-color-scheme: light)\"\n            srcset=\"https:\u002F\u002Fapi.star-history.com\u002Fsvg?repos=ZhouChaunge\u002FDeepCopilot&type=Date&legend=top-left&_=20260518\" \u002F>\n    \u003Cimg alt=\"Deep Copilot Star History\"\n         src=\"https:\u002F\u002Fapi.star-history.com\u002Fsvg?repos=ZhouChaunge\u002FDeepCopilot&type=Date&legend=top-left&_=20260518\" \u002F>\n  \u003C\u002Fpicture>\n\u003C\u002Fa>\n\n---\n\n\u003Cp align=\"center\">\n  \u003Csub>🇨🇳 让高质量 AI 生产力开放、公平、普惠，触手可及。\u003C\u002Fsub>\u003Cbr\u002F>\n  \u003Csub>🇬🇧 Make high-quality AI productivity open, fair, and affordable for everyone.\u003C\u002Fsub>\n\u003C\u002Fp>\n\n","Deep Copilot 是一个基于 DeepSeek API 的 VS Code 对话式 AI 编程助手扩展。它通过侧边栏提供基于大语言模型的编程辅助，支持文件读写、代码搜索和 Shell 命令执行等工具调用，并以流式方式实时渲染结果。该扩展利用 VS Code Extension API 和 Node.js 内置模块实现，无运行时 npm 依赖，无需额外部署服务。Deep Copilot 适用于需要高效编码辅助的开发者，特别是在复杂项目中提高生产力和减少错误。",2,"2026-06-11 04:03:28","CREATED_QUERY"]