VS Code 侧边栏 Xizhi1024/deepseek-harness-dsh-for-vscode
DeepSeek Harness把 Cursor 式的 AI 编程体验带进 VS Code——底层跑的是你自己的 DeepSeek Harness…
39.4/100
综合分
7
GitHub 星标
—
npm 周下载
—/5
用户评分
数据截至 2026/10/20 · 周下载取自 npm 全网(含 CI / 镜像),非本站安装数;综合分由星标、活跃度与兼容性检查合成。
自动兼容检查有告警:未发布到 npm registry,仅可从源码安装。
安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add Xizhi1024/deepseek-harness-dsh-for-vscode该包不可直接 npm 安装,改从 GitHub 源安装(明细见下方安装检查)
状态速览
判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态信任档位:已验证
是什么
dsh 原生插件 · browser
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
活跃:最近一次提交在 15 天前
档位由哪些信号合成
本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。
社区实装还没有人打卡 · 装过的第一个就是你
安装兼容性检查⚠ 装前注意未发布到 npm registry,仅可从源码安装
展开查看检查明细 ↓
以下结论由程序自动检查 npm 包、engines 声明与入口文件得出,未做人工实机验证——能装不等于用着没问题。
✗npm 包dsh-vs-sidebar(未发布到 npm,仅可源码安装)
✓Node 引擎未声明 engines.node
✓dsh CLI 依赖未声明 dsh 版本约束
✓入口文件main/exports/bin 已声明
验证方式:npm registry 存在性 + package.json 静态校验 · 最后检查 2026/10/30 15:54:05
安全扫描自动 · 静态分析源码v2.7.0🔵 扫描:含敏感能力尚无人工评估展开查看扫描说明与证据 ↓
安全扫描自动 · 静态分析源码
v2.7.0静态扫描发现插件具备触达本地系统的能力:执行外部命令、读写/删除本地文件、读取剪贴板或密钥类环境变量(至少其一)。这是能力清单,不是危险判定——具体能力项与证据见下方,安装前请自行判断是否需要。
可执行外部命令读写/删除本地文件读取剪贴板或密钥环境变量写入剪贴板(不计风险)发起外部网络请求
查看扫描证据(共 64 处,展示前 64 条)
- 执行外部命令固定命令src/extension.js:531
const out = execFileSync('powershell.exe', ['-NoProfile', '-NonInteractive', '-Command', command], { - 读取本地文件src/extension.js:540
const stat = fs.readFileSync(`/proc/${pid}/stat`, 'utf8'); - 写入本地文件src/extension.js:562
fs.mkdirSync(path.dirname(heartbeatFilePath), { recursive: true }); - 写入本地文件src/extension.js:569
fs.writeFileSync(heartbeatFilePath, payload, 'utf8'); - 读取本地文件src/extension.js:1247
return fs.readdirSync(profilesRoot, { withFileTypes: true }) - 读取本地文件src/extension.js:1250
.filter((name) => fs.existsSync(path.join(profilesRoot, name, 'package.json'))); - 写入本地文件src/extension.js:1673
fs.mkdirSync(snapshotDir, { recursive: true }); - 写入本地文件src/extension.js:1675
fs.writeFileSync(snapshotPath, payload.beforeText, 'utf8'); - 发起网络请求src/extension.js:2531
await threadAttachmentCoordinator.request(targetWebview, text); - 执行外部命令固定命令src/serverManager.js:840
const out = execFileSync('tasklist', ['/FI', `PID eq ${pid}`, '/FO', 'CSV', '/NH'], { - 读取本地文件src/serverManager.js:867
const parsed = JSON.parse(fs.readFileSync(registryFile, 'utf8')); - 写入本地文件src/serverManager.js:886
fs.mkdirSync(path.dirname(path.resolve(registryFile)), { recursive: true }); - 写入本地文件src/serverManager.js:887
fs.writeFileSync(registryFile, JSON.stringify(entries, null, 2) + '\n'); - 读取本地文件src/serverManager.js:1034
const stat = fs.statSync(logPath); - 读取本地文件src/serverManager.js:1365
parsed = JSON.parse(fs.readFileSync(registryFile, 'utf8')); - 删除本地文件src/serverManager.js:1372
try { fs.unlinkSync(registryFile); } catch { } - 读取本地文件src/localRuntimeResolver.js:56
for (const entry of fs.readdirSync(root, { withFileTypes: true })) { - 读取本地文件src/localRuntimeResolver.js:119
entries = fs.readdirSync(root, { withFileTypes: true }); - 执行外部命令来自配置/变量src/launchMethodResolver.js:30
execFile(file, args, { windowsHide: true, env }, (error, stdout) => { - 执行外部命令来自配置/变量src/processDiscovery.js:56
execFile(file, args, - 发起网络请求src/textDocumentBridge.js:174
const unauthorized = await fetch(bridge.env.DSH_VSCODE_OPEN_URL, { - 发起网络请求src/textDocumentBridge.js:181
const relative = await fetch(bridge.env.DSH_VSCODE_OPEN_URL, { - 发起网络请求src/textDocumentBridge.js:191
const accepted = await fetch(bridge.env.DSH_VSCODE_OPEN_URL, { - 写入剪贴板src/interactionBridge.js:61
await vscode.env.clipboard.writeText(request.text); - 读取剪贴板src/interactionBridge.js:63
const text = await vscode.env.clipboard.readText(); - 发起网络请求src/commands/addFileToThread.js:75
await coordinator.request(view.webview, text); - 发起网络请求src/commands/addFileToThread.js:150
await coordinator.request(view.webview, text); - 发起网络请求src/commands/ctrlIEdit.js:228
await coordinator.request(targetWebview, text); - 发起网络请求src/commands/ctrlKEdit.js:105
await coordinator.request(targetWebview, draft); - 读取本地文件src/changeWatcher.js:188
statSync = (...args) => fs.statSync(...args), - 读取本地文件src/changeWatcher.js:189
readFileSync = (...args) => fs.readFileSync(...args), - 写入本地文件src/changeWatcher.js:190
writeFileSync = (...args) => fs.writeFileSync(...args), - 写入本地文件src/changeWatcher.js:191
mkdirSync = (...args) => fs.mkdirSync(...args), - 读取本地文件src/callExportJournal.js:60
const parsed = JSON.parse(fs.readFileSync(filePath, 'utf8')); - 写入本地文件src/callExportJournal.js:71
fs.mkdirSync(path.dirname(filePath), { recursive: true }); - 写入本地文件src/callExportJournal.js:72
fs.writeFileSync(temporary, JSON.stringify(entries, null, 2), { mode: 0o600 }); - 写入本地文件src/callExportJournal.js:73
fs.renameSync(temporary, filePath); - 写入本地文件src/changeTree.js:486
fs.mkdirSync(directory, { recursive: true }); - 写入本地文件src/changeTree.js:488
fs.writeFileSync(originalPath, preview.beforeText, 'utf8'); - 读取本地文件src/changeTree.js:534
targetExists = Boolean(resolvedFsPath) && fs.existsSync(resolvedFsPath); - 读取本地文件src/changeTree.js:542
snapshotExists = Boolean(snapshotPath) && fs.existsSync(snapshotPath); - 读取本地文件src/changeTree.js:571
snapshotExists = Boolean(snapshotPath) && fs.existsSync(snapshotPath); - 写入本地文件src/changeTree.js:607
fs.mkdirSync(directory, { recursive: true }); - 写入本地文件src/changeTree.js:609
fs.writeFileSync(originalPath, before.text, 'utf8'); - 读取本地文件src/changeTree.js:683
if (fs.existsSync(candidate)) return candidate; - 读取本地文件src/changeTree.js:764
const text = fs.readFileSync(entry.beforeSnapshotPath, 'utf8'); - 写入本地文件src/changeTree.js:765
fs.writeFileSync(targetPath, text, 'utf8'); - 发起网络请求src/mcp/manager.js:187
const page = await client.request('tools/list', cursor ? { cursor } : {}, { timeoutMs: 15000 }); - 发起网络请求src/mcp/manager.js:213
const raw = await client.request('tools/call', { - 读取本地文件src/managedRuntimeLaunch.js:124
const stat = fs.lstatSync(runtime.executablePath); - 读取本地文件src/managedRuntimeLaunch.js:144
const stat = fs.lstatSync(patchPath); - 读取本地文件src/runtimeArtifact.js:178
const stream = fs.createReadStream(filePath); - 发起网络请求src/runtimeDownloader.js:20
const request = https.get(url, { signal, headers: { 'user-agent': 'dsh-vs-sidebar-runtime' } }, (response) => { - 发起网络请求src/mcp/transportStdio.js:48
const result = await rpc.request('initialize', { - 发起网络请求src/mcp/transportStdio.js:63
return rpc.request(method, params, { ...options, timeoutMs }); - 读取本地文件src/detection/profileProbe.js:67
const packageText = fs.readFileSync(packageJsonPath, 'utf8'); - 读取本地文件src/detection/profileProbe.js:68
const patchText = fs.readFileSync(patchPath, 'utf8'); - 读取本地文件src/runtimeArchive.js:74
const gunzip = fs.createReadStream(archivePath).pipe(zlib.createGunzip()); - 发起网络请求runtime-integration/dsh-vscode-integration/lib/client.js:570
fetch(LINKIFY_OPEN_URL, { - 读取本地文件runtime-integration/dsh-vscode-integration/lib/index.js:11
const packageJson = JSON.parse(readFileSync(new URL('../package.json', import.meta.url), 'utf8')); - 发起网络请求runtime-integration/dsh-vscode-integration/lib/index.js:69
const response = await fetch(endpoint, { - 执行外部命令固定命令runtime-integration/dsh-vscode-integration/lib/index.js:218
const out = execFileSync('powershell.exe', ['-NoProfile', '-NonInteractive', '-Command', command], { - 读取本地文件runtime-integration/dsh-vscode-integration/lib/index.js:227
const stat = readFileSync(`/proc/${pid}/stat`, 'utf8'); - 发起网络请求runtime-integration/dsh-vscode-integration/lib/tools.js:621
const execute = (params, options) => generation.request(entry.method, params, {
扫描于 2026/11/3(0 天前) · 范围 入口闭包 + 全包扫描 · 来源 GitHub 仓库
静态扫描只反映源码中出现的调用,不构成安全背书;人工评估与自动扫描相互独立、互不覆盖。
给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个
界面预览
1 张 · 点击查看大图功能亮点
- 侧边栏直连本地会话
- 在编辑器内写代码
README
由 DeepSeek 最新模型翻译生成DeepSeek Harness(dsh) for VS Code
简体中文 · English
把 Cursor 式的 AI 编程体验带进 VS Code——底层跑的是你自己的 DeepSeek Harness (DSH) Agent。
在 VS Code 辅助侧边栏嵌入完整 DSH Web UI:每个窗口自动启动并持有一个本地 dsh web 服务(cwd = 当前工作区),你的模块、技能、MCP、凭据、会话全部可用。在此之上补齐 IDE 集成层:
- 侧边栏即对话:Ctrl+Alt+B 打开;复制/粘贴/右键菜单、文件跳转、主题跟随全部原生
- 上下文附加:右键把文件 / 选区 / 文件夹 / Problems 以紧凑链接加入对话草稿,绝不粘贴源码、绝不自动发送
- DSH 变更评审:DSH 推送的工作区编辑进入专门树视图,diff / 接受 / 撤销,写文件前必须审批(默认开启)
- @dsh 聊天参与者:VS Code 原生聊天里输入 @dsh 直连本地 DSH 会话,流式回复,不占 Copilot 配额(默认开启)
- 进阶可选:Ctrl+K / Ctrl+I 内联编辑、模型路由进 VS Code 选择器、MCP 消费、终端 / UI 桥、FIM Tab 补全——全部挂在显式同意开关后
⚠️ 兼容性
| 项 | 要求 |
展开完整文档(README 剩余 1 节)
DeepSeek Harness(dsh) for VS Code 简体中文 · English 把 Cursor 式的 AI 编程体验带进 VS Code——底层跑的是你自己的 DeepSeek Harness (DSH) Agent。 在 VS Code 辅助侧边栏嵌入完整 DSH Web UI:每个窗口自动启动并持有一个本地 dsh web 服务(cwd = 当前工作区),你的模块、技能、MCP、凭据、会话全部可用。在此之上补齐 IDE 集成层: - 侧边栏即对话:Ctrl+Alt+B 打开;复制/粘贴/右键菜单、文件跳转、主题跟随全部原生 - 上下文附加:右键把文件 / 选区 / 文件夹 / Problems 以紧凑链接加入对话草稿,绝不粘贴源码、绝不自动发送 - DSH 变更评审:DSH 推送的工作区编辑进入专门树视图,diff / 接受 / 撤销,写文件前必须审批(默认开启) - @dsh 聊天参与者:VS Code 原生聊天里输入 @dsh 直连本地 DSH 会话,流式回复,不占 Copilot 配额(默认开启) - 进阶可选:Ctrl+K / Ctrl+I 内联编辑、模型路由进 VS Code 选择器、MCP 消费、终端 / UI 桥、FIM Tab 补全——全部挂在显式同意开关后 ⚠️ 兼容性 | 项 | 要求 | | VS Code | ≥ 1.106,仅桌面版;不支持远程 / 虚拟 / 不受信任工作区 | | DSH CLI | npm i -g @deepseek-ai/dsh,建议 ≥ 0.1.0-rc.7(更老的运行时会自动降级重试,但部分功能受限) | | Node.js | 自动发现;非标准位置设 dsh.local.nodePath | 📦 安装 - Marketplace(推荐):扩展视图搜索 DeepSeek Harness(发布者 Xizhi1024),或 code --install-extension Xizhi1024.dsh-vs-sidebar - VSIX:从 Releases 下载 → Extensions: Install from VSIX... 🚀 使用 1. 按 Ctrl+Alt+B 打开侧边栏——扩展自动启动(或复用)本地 dsh web 并加载 UI 2. 编辑器里选中代码 → 右键 添加到 DSH 对话,草稿收到 文件:行号 紧凑链接,回车发送 3. VS Code 聊天视图输入 @dsh + 问题,回复来自本地 DSH 会话 4. 让 DSH 经桥提议编辑:变更进入 DSH 变更 视图,diff / 接受 / 撤销,未批准不写文件 将 VS Code 选区以紧凑链接添加到 DSH 对话 常用命令(命令面板 DSH: 前缀):新建/切换会话 · 打开会话历史 · 重启/停止服务 · 在浏览器打开 · 新建 DSH 实例(Ctrl+Alt+N)· 诊断 · 干净重启 · 设置 DSH FIM API Key。 ⚙️ 配置 | 键 | 默认 | 说明 | | dsh.port | 3080 | DSH Web 服务端口 | | dsh.autoStart | true | VS Code 启动即拉起服务 | | dsh.home.mode | shared | shared=共享官方 ~/.dsh;isolated=扩展私有目录 | | dsh.profile | web | DSH profile 目录名 | | dsh.executablePath | (空) | 手动指定 DSH 可执行文件/包目录/shim,优先于自动发现 | | dsh.closePolicy | onVscodeExit | 何时停止自有服务 | | dsh.features.changes-review | true | DSH 变更评审(写前审批) | | dsh.changes.observe-tools | true | 工具产生的编辑归因进变更树(「工具」分组) | | dsh.features.chat-participant | true | @dsh 聊天参与者 | | dsh.features.ctrl-k / ctrl-i | false | 内联编辑命令(Ctrl+K / Ctrl+I) | | dsh.features.lm-route | false | DSH 模型进 VS Code 语言模型选择器 | | dsh.features.mcp-consume | false | DSH 消费 VS Code 侧 MCP 服务器 | | dsh.features.tab-completion | false | FIM Tab 补全——需设置 dsh.fim.baseUrl + DSH: 设置 FIM API Key 并重启 DSH 服务 | | dsh.fim.baseUrl | (空) | 上游 FIM 端点(OpenAI 兼容 completions API 完整 URL) | | dsh.keybindings.ctrlL | true | Ctrl+L 把选区加入对话草稿(绝不发送) | | dsh.bridge.terminal / editorRead / ui | false | 终端 / 编辑器读取 / UI 表面桥(同意开关) | 完整键列表见 package.json;诊断用命令 DSH: Diagnose。 License MIT
预览分享卡片长什么样 ↓
分享 · DeepSeek Harness Hub
Xizhi1024/deepseek-harness-dsh-for-vscode
把 Cursor 式的 AI 编程体验带进 VS Code——底层跑的是你自己的 DeepSeek Harness…
相关插件 · 浏览器
智能体插件框架deepseek-ai/deepseek-harness
DeepSeek Harnessdsh是由 DeepSeek AI 开发的开源 agent harness智能体框架。
★ 270,422已汉化DSH
71.9
多设备 Agent 看板YaoApp/yao
✨ 所有 Agent 和工作区集中管理,覆盖你的每一台设备。任务看板追踪进度,桌面端、移动端、浏览器、API…
★ 8,147已汉化DSH
71.2
可扩展侧边栏工作台omdsh-dev/DSH-better-sidebar
DSH 的双工作台:原生右侧栏 + 自绘底部面板,并把 ctx.betterSidebar 服务开放给所有插件
★ 4,761已汉化DSH
71.1
浏览器自动化桥Tencent/BrowserSkill
你的 Agent。你的浏览器。连接,就能协作。
★ 9,928已汉化DSH
71
AI 小说创作工作台EthanYoQ/AI-Novel-Writer
AI 小说作家 / AI Novel Writer
★ 1,591已汉化DSH
70.7
智能体浏览器引擎platonai/Browser4
DeepSeek Harness 集成
★ 1,175已汉化DSH
70.4
这是你的仓库?认领条目