🎁 福利专区全网大模型免费应用 + 新用户福利 + 注册活动入口,低成本玩转 AI

编辑器桥 zhibailu/dsh-vsc

DeepSeek Harness
zhibailu0 天前有提交已提供中文文档扫描:含敏感能力

在 VS Code 里跑本地 AI 智能体 DeepSeek Harness(DSH)——原生侧边栏面板加编辑器桥接,纯协议客户端:不改写 DSH,不另起服务

36.5/100
综合分
2
GitHub 星标
—
npm 周下载
—/5
用户评分

数据截至 2026/11/3 · 周下载取自 npm 全网(含 CI / 镜像),非本站安装数;综合分由星标、活跃度与兼容性检查合成。

自动兼容检查有告警:未发布到 npm registry,仅可从源码安装。
安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add zhibailu/dsh-vsc
该包不可直接 npm 安装,改从 GitHub 源安装(明细见下方安装检查)

状态速览

判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态
信任档位:已验证
是什么
dsh 原生插件 · browser
装得上吗
本站已真实安装成功
非静态推断
L4 · 真实安装等级说明 →
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
活跃:最近一次提交在 0 天前
档位由哪些信号合成

本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。

验证判据与等级说明 →
社区实装还没有人打卡 · 装过的第一个就是你
安装兼容性检查⚠ 装前注意

未发布到 npm registry,仅可从源码安装

展开查看检查明细 ↓

以下结论由程序自动检查 npm 包、engines 声明与入口文件得出,未做人工实机验证——能装不等于用着没问题。

✗npm 包dsh-vsc(未发布到 npm,仅可源码安装)
✓Node 引擎未声明 engines.node
✓dsh CLI 依赖未声明 dsh 版本约束
✓入口文件main/exports/bin 已声明

验证方式:npm registry 存在性 + package.json 静态校验 · 最后检查 2026/11/2 06:37:35

安全扫描自动 · 静态分析源码
v2.7.0
🔵 扫描:含敏感能力尚无人工评估
展开查看扫描说明与证据 ↓

静态扫描发现插件具备触达本地系统的能力:执行外部命令、读写/删除本地文件、读取剪贴板或密钥类环境变量(至少其一)。这是能力清单,不是危险判定——具体能力项与证据见下方,安装前请自行判断是否需要。

可执行外部命令读写/删除本地文件写入剪贴板(不计风险)读取剪贴板或密钥环境变量发起外部网络请求
查看扫描证据(共 36 处,展示前 32 条)
  • 读取本地文件
    esbuild.js:34
    let html = readFileSync("src/panel/native/panel.html", "utf8");
  • 写入本地文件
    esbuild.js:41
    writeFileSync(panelDist, html);
  • 读取本地文件
    esbuild.js:43
    const written = readFileSync(panelDist, "utf8");
  • 删除本地文件递归
    esbuild.js:51
    rmSync("dist", { recursive: true, force: true });
  • 写入本地文件
    esbuild.js:52
    mkdirSync("dist", { recursive: true });
  • 执行外部命令固定命令
    src/editor/context.ts:63
    execFile(
  • 执行外部命令固定命令
    src/editor/diff.ts:9
    execFile("git", args, { cwd, timeout: 8000, windowsHide: true, maxBuffer: 64 * 1024 * 1024 }, (error, stdout) => {
  • 写入本地文件
    src/editor/diff.ts:79
    writeFileSync(tmpFile, head, "utf8");
  • 写入本地文件
    src/extension.ts:365
    fs.appendFileSync(DEACTIVATE_LOG, `[${new Date().toISOString()}] ${line}\n`);
  • 发起网络请求
    src/harness/client.ts:74
    res = await fetch(url, { redirect: "manual", signal });
  • 发起网络请求
    src/harness/client.ts:103
    res = await fetch(`${this.base}/api/${method}`, {
  • 发起网络请求
    src/harness/client.ts:125
    const res = await fetch(`${this.base}/`, {
  • 写入本地文件
    src/harness/launcher.ts:55
    writeFileSync(HARNESS_PID_FILE, JSON.stringify(record, null, 2), "utf8");
  • 删除本地文件
    src/harness/launcher.ts:63
    rmSync(HARNESS_PID_FILE, { force: true });
  • 读取本地文件
    src/harness/launcher.ts:71
    if (!existsSync(HARNESS_PID_FILE)) return null;
  • 读取本地文件
    src/harness/launcher.ts:72
    return JSON.parse(readFileSync(HARNESS_PID_FILE, "utf8")) as HarnessPidRecord;
  • 执行外部命令固定命令
    src/harness/launcher.ts:141
    execFile("reg", ["query", "HKCU\\Environment", "/v", name], { windowsHide: true }, (error, stdout) => {
  • 执行外部命令固定命令
    src/harness/launcher.ts:151
    execFile("where.exe", [name], { windowsHide: true }, (error, stdout) => {
  • 读取本地文件
    src/harness/launcher.ts:182
    for (const version of readdirSync(nvmRoot)) dirs.push(join(nvmRoot, version, "bin"));
  • 读取本地文件
    src/harness/launcher.ts:196
    if (existsSync(candidate)) return candidate;
  • 读取本地文件
    src/harness/launcher.ts:212
    if (!existsSync(shim)) continue;
  • 读取本地文件
    src/harness/launcher.ts:219
    return candidates.find((candidate) => candidate.endsWith(DSH_ENTRY) && existsSync(candidate));
  • 执行外部命令来自配置/变量
    src/harness/launcher.ts:270
    execFile(comspec, ["/c", "npm", "prefix", "-g"], { windowsHide: true }, (error, stdout) => {
  • 读取密钥环境变量
    src/harness/launcher.ts:341
    ? `GITHUB_TOKEN: ${env.GITHUB_TOKEN.length} chars (${process.env.GITHUB_TOKEN ? "process env" : "Windows user env fallback"})`
  • 执行外部命令来自配置/变量
    src/harness/launcher.ts:344
    child = spawn(l.node, [l.script, ...args], {
  • 执行外部命令固定命令
    src/harness/launcher.ts:411
    execFile("taskkill", ["/PID", String(target), "/T", "/F"], { windowsHide: true }, (error) => {
  • 写入剪贴板
    src/panel/NativePanelProvider.ts:570
    void vscode.env.clipboard.writeText(message.text).then(
  • 读取本地文件
    src/panel/NativePanelProvider.ts:929
    const stat = fs.statSync(abs);
  • 读取本地文件
    src/panel/NativePanelProvider.ts:931
    return fs.readFileSync(abs, "utf8");
  • 读取本地文件
    src/panel/NativePanelProvider.ts:1163
    let html = fs.readFileSync(panelPath.fsPath, "utf8");
  • 读取本地文件
    src/panel/NativePanelProvider.ts:1201
    panel.webview.html = fs.readFileSync(settingsPath.fsPath, "utf8");
  • 读取本地文件
    src/panel/embed.ts:15
    let html = fs.readFileSync(shellPath.fsPath, "utf8");
扫描于 2026/11/2(1 天前) · 范围 入口闭包 + 全包扫描 · 来源 GitHub 仓库

静态扫描只反映源码中出现的调用,不构成安全背书;人工评估与自动扫描相互独立、互不覆盖。

给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个

功能亮点

  • 侧边栏对话智能体
  • 审批智能体操作
  • 编辑器桥接

README

由 DeepSeek 最新模型翻译生成
DSH Bridge · DeepSeek Harness for VS Code 把 DeepSeek Harness —— 本地的 AI 智能体 —— 直接放进 VS Code。 一个原生侧边栏面板 + 编辑器桥,以协议客户端的方式连接 DSH,不重写它、也不另起第二个服务端。 语言:简体中文 · English 一句话 —— DeepSeek Harness(DSH)是一个住在你电脑里的 AI「工人」(默认 http://127.0.0.1:3080)。DSH 自带一个网页,但那个网页只是它「协议」的一个客户端。dsh-vsc 是另一个客户端——一张真正属于 VS Code 的侧边栏。它不重写 DSH、不模仿它的 UI,而是读懂协议、把干活的过程用原生面板画给你,并接上针对你的代码的原生编辑器桥。 目录 - 为什么用它 - 功能 - 截图 - 安装 - 快速上手 - 它怎么工作 - 设计哲学——「纯桥接」 - 命令 - 配置 - 刻意不做的事 - 开发 - 文档 - 参与贡献 - 许可证 为什么用它 多数「AI 进 IDE」的工具是在重造一个 AI。这个项目正好相反: - 不 fork、不重写 DSH:DSH 保持字节级一致(npm 原版)。它能做的事,这个扩展都能呈现。
展开完整文档(README 剩余 1 节)
DSH Bridge · DeepSeek Harness for VS Code

把 DeepSeek Harness —— 本地的 AI 智能体 —— 直接放进 VS Code。 一个原生侧边栏面板 + 编辑器桥,以协议客户端的方式连接 DSH,不重写它、也不另起第二个服务端。

语言:简体中文 · English

一句话 —— DeepSeek Harness(DSH)是一个住在你电脑里的 AI「工人」(默认 http://127.0.0.1:3080)。DSH 自带一个网页,但那个网页只是它「协议」的一个客户端。dsh-vsc 是另一个客户端——一张真正属于 VS Code 的侧边栏。它不重写 DSH、不模仿它的 UI,而是读懂协议、把干活的过程用原生面板画给你,并接上针对你的代码的原生编辑器桥。

目录

- 为什么用它
- 功能
- 截图
- 安装
- 快速上手
- 它怎么工作
- 设计哲学——「纯桥接」
- 命令
- 配置
- 刻意不做的事
- 开发
- 文档
- 参与贡献
- 许可证

为什么用它

多数「AI 进 IDE」的工具是在重造一个 AI。这个项目正好相反:

- 不 fork、不重写 DSH:DSH 保持字节级一致(npm 原版)。它能做的事,这个扩展都能呈现。
- 不把网页 iframe 当主力体验:侧边栏是一张原生 VS Code 面板 + 原生编辑器桥——选中代码、右键、提问;看着工具干活、审批操作、审阅 diff。
- DSH 升级也不怕:它消费 DSH 的协议契约(wire contract),而不是 UI。DSH 界面随便改版,这个扩展都不必跟着改。

如果你已经在用 DSH(网页或命令行)、又在 VS Code 里写代码,dsh-vsc 把你的编辑器变成 DSH 的一等表面——一份历史、一套契约、绝无第二个服务端。

功能

原生侧边栏面板
- 流式回复、可折叠的思考(reasoning)栏与每轮实时计时。
- 相邻工具调用合并成「⚙ 动作」折叠块;每轮 +N-M 改动统计。
- 审批卡片:agent 请求执行需审批的操作时弹出——允许一次 / 拒绝。
- 选择题卡片:单选用数字键、多选勾选、推荐徽章、自定义回答(↑↓ 找回)、跳过——经 /api/respond 回传。
- 会话模式(标准 / PTC / 极简 / 创造)、推理等级切换、权限预设切换(只读 / workspace-write / full-access)。
- 输入栏接管:agent 提问时主输入栏整体隐藏,防止误发消息。

原生编辑器桥
- Ask DSH(选区):选中代码 → 右键 → DSH: Ask about selection,弹结构化上下文卡片(文件 / 选区 / 工作区 / 分支)送入最新会话;解释 / 审查 / 修复 / 自定义。
- Review Agent Changes:监控 write / edit / str_replace_editor 工具调用,每轮提示改动数,一键打开 VS Code 原生 git diff。

harness 生命周期
- 复用正在运行的 DSH(共享客户端,不另起服务端);只有确实没有才自拉一个;自愈(死了按退避重启);引用计数关闭(绝不杀掉还被别的客户端用着的 harness)。详见它怎么工作。

截图

侧边栏与对话——原生 DSH 面板:会话列表、流式回复、可折叠的「⚙ 动作」、每轮实时计时、+N-M 统计

右键提问——在编辑器里选中代码,右键 → DSH: Ask about selection

Ask 卡片——面板里弹出的结构化上下文卡片(文件 / 选区 / 工作区 / 分支)

审批卡片——agent 请求执行需审批的操作时,允许一次 / 拒绝

选择题卡片——单选 / 多选、推荐徽章、自定义回答

Review Agent Changes——每轮改动的文件 → 一键打开原生 git diff

会话模式——标准 / PTC / 极简 / 创造

安装

需要 Windows / macOS / Linux + VS Code ^1.90.0。DSH 本体不用单独装——没有 harness 在跑时扩展会自动拉起一个。

方式 A —— Release 安装包(推荐)

1. 从 Releases 下载最新的 dsh-vsc-<版本号>.vsix。
2. 安装(VS Code Ctrl+Shift+P → Install from VSIX,或命令行):

code --install-extension dsh-vsc-<版本号>.vsix --force

3. 重载窗口(Ctrl+Shift+P → Reload Window),左侧活动栏点 DSH 图标即可。

会自动复用正在运行的 harness(npm i -g @deepseek-ai/dsh 或 npx @deepseek-ai/dsh web),默认 http://127.0.0.1:3080,可用 DSH_WEB_URL 或 dshVsc.url 覆盖。

方式 B —— 源码构建

git clone https://github.com/zhibailu/dsh-vsc.git
cd dsh-vsc
npm install
npm run package # esbuild 构建 + vsce 打包 → dsh-vsc-<版本号>.vsix
code --install-extension dsh-vsc-<版本号>.vsix --force

快速上手

1. 重载窗口——装完必须重载才生效。
2. 左侧活动栏点 DSH 图标打开侧边栏。
3. 没有 harness 在跑时,扩展会自动静默拉起一个(不弹窗);有则直接复用。
4. 发消息,看 agent 干活。

扩展里不用配 API key:key 在 DSH 侧配置(第一次 dsh web 时按提示设置)。扩展只是它的共享客户端,不碰你的 key。

它怎么工作

DSH 对外暴露两样东西:RPC 接口(POST /api/<endpoint>,0.2.1 起端点是斜杠形式,参数统一放在 payload.args)和实时事件流(同一条 WebSocket /api/remote.mux 上的多条逻辑流:会话跟随、投影控制、工作区、以及承载审批/提问的 $events)。网页只是这份契约的一个消费方。

dsh-vsc 是第二个消费方:

- src/harness/client.ts —— 约 200 行的最小协议客户端:在 Node(≥ 18,全局 fetch)里重实现 DSH 的 wire contract,不 import 任何 DSH 内部包,刻意做得很薄——实现协议,而不是插件框架。
- 无损事件:面板拿到的是事件流的原始帧,不做二次建模;渲染交给面板自己。桥接层越透明,越不会跟官方语义脱节。
- 协议优先、UI 无关:官方 README 写明"没有协议版本字段,因为客户端与服务端一起发布——直到出现独立发布的客户端"。这个扩展正是那个独立发布的客户端,站的是稳定契约那一层,不是易变 UI那一层。
- 零侵入:0.1.x 时代这里曾有一层"内存运行时补丁"(overlay)——因为当时协议没暴露客户端数、也没法隐藏工具控制台。0.2.1 之后它已整体退役:控制台隐藏由官方 dsh-win32-process 自己做了(STARTF_USESHOWWINDOW|SW_HIDE),clientCount 随 dsh-host-apiproxy 整个包一起消失。现在这个扩展对官方文件一行都不碰,也再没有 NODE_OPTIONS 注入。
- 第二个客户端,绝不做第二个服务端:真实事故证明,两个 DSH 进程共用 ~/.dsh 会互相写坏历史(corrupt session log: seq gap)。所以扩展绝不另起一个服务端去写同一份历史:能复用就复用,只有确实没有才自拉;关闭时只停自己启动的那个实例(0.2.1 里已没有 clientCount 可以问,孤儿进程比误停更糟)。

给想理解这套设计的人写的完整架构说明,见 docs/design.md。

设计哲学——「纯桥接」

我不抢 DSH 的活,我只当它最好的那个客户。

- 不重写 DSH → 它保持字节级一致;它的稳定就是你的稳定,它升级你不必跟着重写。
- 不模仿 DSH 的 UI 框架 → 替官方重写一套插件系统,既不讨好官方、也累死自己。
- 不另起第二个 DSH → 两个进程共用一份历史会互相写坏。
- 实在要改(overlay)就可验证、可降级:校验、金丝雀护栏、失败就放弃、上游补上就退役。

命令

| 命令 | 作用 |
| DSH: Open Sidebar | 聚焦 DSH 侧边栏 |
| DSH: Start Web Harness | 显式启动/连接 harness(清除"不再重启"闩) |
| DSH: Stop Auto-started Harness | 只停本扩展自拉的那个;共享的绝不杀 |
| DSH: Refresh Connection Status | 重新探测 harness |
| DSH: Open Web GUI (advanced) | 把完整 DSH 网页作为标签页打开 |
| DSH: Ask about selection | 询问选中的代码(右键菜单里也有) |
| DSH: Review Agent Changes | 打开 agent 改动文件的原生 git diff |

配置

| 设置 | 默认 | 说明 |
| dshVsc.url | http://127.0.0.1:3080 | DSH harness 的地址;也认 DSH_WEB_URL |
| dshVsc.autoStart | true | 配置地址无人应答时自动启动 dsh web |

刻意不做的事

- 不重写聊天 UI、不截断/白名单事件、不要求重输 API key。
- 不另起第二个 harness——能复用就复用,只有没有才自拉;关 VS Code 时若还有别的客户端连着,自拉实例会保留。
- 改动追踪只识别 write / edit / str_replace_editor 工具事件;shell 里改的文件不计入(git diff 审查仍可手工用)。
- +N-M 统计只覆盖上述文件工具;计时器是桥接侧纯展示(挂最新进行中的一轮,任务结束即固化为历史用时)。
- Ask DSH 发送到"最近更新的会话"(不一定是 webview 当前打开的那个)。
- 审批/选择题只在当前选中会话弹出。

开发

npm install
npm run typecheck # tsc --noEmit(两套配置)
npm run build # esbuild → dist/extension.js + dist/media
npm run package # 构建 + 打包 vsix

F5 调试(.vscode/launch.json)→ Extension Development Host。

自动回归测试(jsdom 模拟 webview,喂真实事件流验证面板渲染):

node scratch/auto-test.mjs <sessionId> <turnNo>

文档

- 设计与架构说明——为什么采用「纯桥接」、如何应对 DSH 升级保持稳定、各模块如何配合。
- 源码地图——src/ 里各目录管什么。
- 截图——本 README 用到的图片素材。
- llms.txt——给 LLM / AI 抓取器用的机器可读文档索引。
- AGENTS.md——给 AI 编码代理的仓库上手说明。
- 更新日志——版本历史。
- 维护者可见:GITHUB-SETUP.md——在 GitHub 上设置仓库元数据与 topics 以提升可发现性。

参与贡献

见 CONTRIBUTING.md。欢迎 issue、PR、文档改进——尤其是帮新人讲清架构的。

许可证

MIT © 2026 zhibailu — 详见 LICENSE。
预览分享卡片长什么样 ↓zhibailu/dsh-vsc
分享 · DeepSeek Harness Hub
zhibailu/dsh-vsc

在 VS Code 里跑本地 AI 智能体 DeepSeek Harness(DSH)——原生侧边栏面板加编辑器桥接,纯协议客户端:不改写 DSH,不另起服务

回到顶部