DeepSeeker-Code for Visual Studio Code
DeepSeeker-Code 把一个完整的 agent 编码引擎塞进 VS Code 的一个聊天面板:流式逐字输出、可折叠思考过程、工具调用卡、内联审批、两阶段计划模式、历史会话续接、文件级 Undo 回退,以及对 MCP / Hooks / Skills / 声明式子 Agent 的全套支持。
安装方式一:VS Code 扩展市场(推荐)
方式二:从 .vsix 安装
快速开始
功能特性
配置VS Code 设置项命令面板 →
环境变量
模型 / API(
|
| 变量 | 作用 | 默认 |
|---|---|---|
DEEP_SEEK_API_KEY |
DeepSeek API Key(与 deepseekerCode.apiKey 二选一,必填) |
— |
DEEP_SEEK_API_URL |
API 基址(兼容 OpenAI 协议的代理可用此项改) | https://api.deepseek.com |
DEEP_SEEK_MODEL |
主模型 | deepseek-v4-flash |
DEEP_SEEK_AUX_MODEL |
辅助模型(摘要 / 风险分类) | deepseek-v4-flash |
DEEP_SEEK_REASONING_EFFORT |
推理强度,仅 high / max(low/medium 已废弃) |
high |
DEEP_SEEK_THINKING |
深度思考开关,设 0 关闭 |
开 |
DEEP_SEEK_STREAM_IDLE_TIMEOUT_MS |
流式 idle 超时(ms) | 120000 |
产品行为(DEEPSEEKER_CODE_* / DEEP_SEEK_*)
| 变量 | 作用 | 默认 |
|---|---|---|
DEEPSEEKER_CODE_DATA_DIR |
用户数据目录(会话/skills/hooks/mcp 全在此;解决 Windows C 盘小等场景) | ~/.deepseeker-code |
DEEP_SEEK_PARALLEL_SAFE_TOOLS |
设 0 关闭同轮只读工具并发(默认开) |
开(并发) |
DEEP_SEEK_WORKFLOW_CONCURRENCY |
run_workflow 子 agent 并发上限 | 4 |
DEEP_SEEK_WORKFLOW_MAX_STEPS |
run_workflow 单次步数上限 | 8 |
SEARCH_PROVIDER |
搜索后端 tavily / bing / ddg |
自动(有 Tavily key 用 Tavily,否则 Bing) |
TAVILY_API_KEY |
Tavily 搜索密钥 | — |
WEB_FETCH_ALLOW_PRIVATE |
设 1 放行 web_fetch 访问内网/回环(云元数据端点仍硬拦) |
关(SSRF 安全) |
MCP_CONFIG |
MCP 配置文件路径 | <数据目录>/mcp.json |
引擎偏好(settings.json 的 engine 段)
少数用户偏好类参数可在 settings.json 里调(CLI 与插件共享)。在数据目录下编辑 settings.json:
// ~/.deepseeker-code/settings.json (或 DEEPSEEKER_CODE_DATA_DIR 指向的目录)
{
"engine": {
"undoEnabled": true, // Undo 总开关:false 跳过所有写前备份(紧急降级)
"undoBackupSensitive": "skip", // 敏感文件(.env/私钥)备份策略:skip|deny|allow
"undoRetentionDays": 7, // Undo 备份保留天数
"traceRetentionDays": 7, // trace 诊断日志保留天数
"MAX_TOOL_RESULT_CHARS": 16000 // 单次工具结果截断长度(读大日志可放宽)
}
}
项目级
<项目>/.deepseeker-code/settings.json的engine段会覆盖全局。非法值会被忽略并告警。⚠️ 不可调:上下文窗口(
MAX_HISTORY_TOKENS)、压缩阈值(COMPACT_RATIO)、推理轮数等是针对 DeepSeek-V4 精调过的引擎参数,刻意不开放——调高反而越过精度甜点区。如确需改,改源码重编。
聊天内命令
在输入框以 / 开头:
| 命令 | 作用 |
|---|---|
/plan |
切换计划模式(只读调研 → 方案 → 实现) |
/auto |
切换自动模式(按权限规则自动执行,少打断) |
/model <名称> |
切换模型 |
/thinking <off\|high\|max> |
切换思考强度 |
/lang <zh\|en> |
切换语言 |
/sessions |
列出并续接历史会话 |
/clear、/new |
新会话 |
/help |
帮助 |
快捷键:Ctrl+Esc 打开聊天面板。
可扩展配置(声明式)
下列配置对 CLI 与 VS Code 插件完全一致,都从 ~/.deepseeker-code/(全局)+ <项目>/.deepseeker-code/(项目,需信任该目录)读取:
| 配置 | 位置 | 作用 |
|---|---|---|
| Hooks | settings.json 的 hooks 段 |
6 类生命周期事件(PreToolUse/PostToolUse/UserPromptSubmit/Stop 等)触发命令/http/注入/子 agent |
| 权限规则 | settings.json 的 permissions 段 |
allow/deny/ask 细粒度工具放行(如 run_command(npm:*)) |
| 状态栏 | settings.json 的 statusLine 段 |
自定义底部状态栏命令(CLI 专用,插件不消费) |
| MCP | mcp.json(独立文件,非 settings.json) |
接入外部 MCP server 工具 |
| Skills | skills/<name>/SKILL.md |
可被 agent 按需加载的技能包 |
| 子 Agent | agents/<name>.agent.md |
声明式子 agent 角色 |
| 斜杠命令 | commands/<name>.md |
自定义 /命令 |
| 输出风格 | output-styles/<name>.md |
自定义回复人格 |
settings.json 完整示例(代码真正消费的字段):
{
"engine": { /* 见上 */ },
"hooks": {
"PreToolUse": [
{ "matcher": "run_command", "command": "./audit.sh", "denyOnNonZero": true }
],
"UserPromptSubmit": [
{ "type": "prompt", "text": "涉及数据库时先确认备份策略。" }
]
},
"permissions": {
"allow": ["run_command(npm:*)", "read_file(src/*)"],
"deny": ["read_file(.env)", "run_command(rm:*)"],
"ask": ["web_fetch(*)"]
}
}
MCP 配置(mcp.json,独立文件):
{
"mcpServers": {
"local": { "command": "npx", "args": ["-y", "@xxx/server"], "env": { "KEY": "..." } },
"remote": { "type": "http", "url": "https://.../mcp", "headers": { "Authorization": "Bearer ..." } }
}
}
数据目录
默认 ~/.deepseeker-code/(可用 DEEPSEEKER_CODE_DATA_DIR 改位置)。布局:
~/.deepseeker-code/
├── settings.json # 声明式配置(engine/hooks/permissions/statusLine)
├── mcp.json # MCP server 配置(独立文件)
├── prefs.json # UI 偏好(语言等)
├── skills/ # 全局 skills
├── agents/ # 全局子 agent
├── commands/ # 全局斜杠命令
├── output-styles/ # 全局输出风格
└── <工作区key>/ # 按工作区隔离的会话 transcript / trace / undo 备份
工作区 key 由项目绝对路径的 sha256 短哈希派生,故同一项目在 CLI 和 VS Code 打开会命中同一份会话历史。
架构
┌─────────────────────────────┐ ┌──────────────────────────────┐
│ webview(前端,零依赖 DOM) │ ◄──► │ extension host(Node 进程) │
│ 聊天流 / 审批条 / 方案卡 / │ 消息 │ extension.ts 激活/chdir/env │
│ 提问 / 工具栏 / 历史会话 │ 协议 │ host.ts 会话编排 │
└─────────────────────────────┘ └──────────────┬───────────────┘
│ handleUnifiedChat / agentTools / initEngine
┌───────▼───────┐
│ core(内联) │ runAgent / MCP / hooks / undo / skills…
└───────────────┘
- 配置注入通道:插件激活时把
apiKey/model写入process.env、chdir到工作区,之后才动态 import core;core 的appConfig与文件沙箱随之就位。 - 审批:core 的
createWebRequestApproval把approval_request发给前端 → 前端弹按钮 →resolveUserApprovalLock解锁挂起的工具调用。 - 多根工作区:按「活动编辑器所属文件夹」解析项目根,每次提问自动跟随,无需重载窗口。
开发与调试
以下面向贡献者。普通用户无需关心。
cd src/vscode
npm install
npm run build # 产出 dist/(extension.js 内联 core 全部源码 + webview.js + 资产)
npm run dev # 监听模式
npm run package # 打 .vsix(esbuild 瘦身:纯 JS 依赖全 bundle,只 external vscode + vscode-ripgrep)
- F5 调试:用 VS Code 打开
src/vscode/,F5 启动「Run Extension (DeepSeeker-Code)」(preLaunchTask 自动node build.mjs),会弹出 Extension Development Host 新窗口。 - 打包瘦身约定:
build.mjs把 openai/undici/ignore/typescript 等纯 JS 依赖 bundle 进dist/extension.js,dependencies只留vscode-ripgrep(原生 rg 二进制),故 vsix ~4.8MB(随 read_docx/read_pdf/read_xlsx 等新工具引入 mammoth/exceljs/unpdf 等纯 JS 依赖而增长)。新增运行时依赖默认进devDependencies(会被 bundle),只有原生二进制才进dependencies。
已知限制
- webview 前端零依赖,markdown 为最小渲染器(代码块/行内码/粗体/列表/链接/标题)。
- 插件激活后修改环境变量需重启 VS Code 方能生效(core 模块加载期冻结)。
- 关闭面板时若仍有挂起的审批/提问,重开后需重新触发。
License
MIT