deepseek-harness-vscode

by bingchengle

4 工具与能力github收录于 08-23

Claude Code 风格的 VSCode 侧边聊天面板 ,由 DeepSeek Harness( dsh web )驱动。在 VSCode 活动栏点开图标,即可在侧栏内嵌完整的 DSH 智能体界面:对话、工具调用轨迹、设置、模型选择、子代理 / goal / plan 面板全部可用——而 agent 的工作区根就是当前打开的项目文件夹。

安装

dsh plugin --profile web add github:bingchengle/deepseek-harness-vscode

GitHub 源码安装:首次需按提示配置 allowBuilds 构建授权后重试

安装与环境配置指引、插件开发教程见 DSH 中文社区文档 ↗

安装即在你的机器上以你的权限运行第三方代码——它可读写文件、使用凭据、访问网络,DSH 的工具审批不会为插件代码加沙箱。「检测到 manifest」仅代表发现 dsh.bundle / dsh.plugin 清单,不构成兼容性或安全审查;安装前请审阅源码,不熟悉的插件先在不含密钥的环境试用。

README

目录

Claude Code 风格的 VSCode 侧边聊天面板,由 DeepSeek Harness(dsh web)驱动。在 VSCode 活动栏点开图标,即可在侧栏内嵌完整的 DSH 智能体界面:对话、工具调用轨迹、设置、模型选择、子代理 / goal / plan 面板全部可用——而 agent 的工作区根就是当前打开的项目文件夹。

仓库:https://github.com/bingchengle/deepseek-harness-vscode · MIT 协议 当前为 路线 A(iframe 内嵌):扩展以子进程启动 dsh web,侧栏 Webview 用 iframe 加载其完整界面。零 npm 运行时依赖,纯 JavaScript,无需编译。


快速使用(推荐)

前置条件

  • VSCode 1.85 及以上;
  • Node.js 18 及以上(扩展用它运行 dsh 的入口脚本);
  • dsh 无需手动安装:扩展会自动探测(npx 缓存 → 全局 → 工作区 → PATH),都没有时会用 npx --yes @deepseek-ai/dsh 现场拉取(仅首次较慢);
  • 一个 DeepSeek API key:装好后在侧栏的 DSH 设置面板里配置(key 只保存在你本机的 ~/.dsh,不会进入本仓库)。

方式一:安装预打包的 vsix(最简单)

  1. 到 Releases 页面下载最新的 dsh-vscode-chat-<版本号>.vsix;

  2. 命令行安装:

    code --install-extension .\dsh-vscode-chat-0.1.3.vsix --force
    
  3. 完全关闭并重开 VSCode,点活动栏的 DeepSeek 蓝鲸图标,侧栏即出现聊天面板。

方式二:从源码运行(开发者 / 尝鲜)

  1. 克隆本仓库并用 VSCode 打开本目录;
  2. 按 F5(已配置 .vscode/launch.json),弹出 Extension Development Host;
  3. 在新窗口点活动栏的蓝鲸图标打开聊天。

方式三:从源码打包 vsix(离线,无需 npm/网络)

powershell -NoProfile -ExecutionPolicy Bypass -File .\pack.ps1
code --install-extension .\dsh-vscode-chat-<版本号>.vsix --force

打包由 pack.ps1 离线完成(VSIX 本质是一个特定结构的 zip),不依赖 vsce、npm 或网络。


工作原理

VSCode 扩展(Node.js 扩展宿主)
  │  spawn 子进程(cwd = 当前工作区)
  ▼
dsh web 服务器(127.0.0.1:OS随机端口,--port 0)
  │  /api(HTTP POST 一元 RPC,Typert 协议)
  │  /api/events.mux、/api/events.host(下行 WebSocket)
  ▼
VSCode WebviewView 侧边栏(Chromium)
  └─ iframe(sandbox=allow-scripts allow-same-origin …)→ 加载 DSH SPA
  • 扩展解析子进程 stdout 中打印的 dsh web: URL 行拿到端口;
  • iframe 文档的 origin 就是 http://127.0.0.1:<port>,与正常浏览器访问完全一致,能通过 DSH /api 的回环信任栅栏(这是 allow-same-origin 必须保留的原因:去掉后 origin 变 opaque,WebSocket 升级会被拒);
  • 外层 Webview 的 CSP 只放行 frame-src http://127.0.0.1:*,iframe 内部由 DSH 服务器自己的响应头管辖(即"服务器在本地、页面从服务器加载"的正常浏览器语义)。

dsh 自动探测顺序

  1. 当前工作区的 node_modules/@deepseek-ai/dsh(项目内安装)
  2. npx 缓存(%LOCALAPPDATA%\npm-cache\_npx\*\node_modules\@deepseek-ai\dsh / ~/.npm/_npx/...,取最新)
  3. 全局 npm 根(npm root -g)
  4. PATH 上的 dsh 命令
  5. 兜底:npx --yes @deepseek-ai/dsh(首次拉取较慢,状态栏会提示)

探测到 bin.js 后,扩展用解析到的真实 Node(node)运行它,绕开 PATH / shell 差异;只有第 4、5 种才走命令 spawn。

命令

命令 作用
DSH: 打开侧边聊天 聚焦侧边栏并确保服务在跑
DSH: 重启服务 杀掉旧进程树、等待锁释放、重新拉起(侧栏标题按钮)
DSH: 在浏览器中打开 在系统浏览器打开完整窗口版 DSH(侧栏标题按钮)
DSH: 移动到右侧辅助侧边栏 把聊天视图移到右侧辅助侧边栏,位置会被记住(侧栏标题按钮)

把聊天放到右侧

VSCode 的活动栏视图容器只能固定在左侧主侧边栏(平台限制,且没有公开 API 能程序化移动视图)。要让聊天显示在右侧:

  1. 打开 DSH 聊天视图后,点视图标题栏的 → 按钮(DSH: 移动到右侧辅助侧边栏),它会打开右侧辅助侧边栏;
  2. 把左侧 "Chat" 视图拖进右侧(按住 "Chat" 标题栏拖到窗口右边缘,出现高亮后松手),或在 "Chat" 标题栏上右键 → 移动视图(Move View) → 辅助侧边栏(Secondary Side Bar);
  3. 只需一次,之后每次打开 VSCode 聊天都在右侧辅助侧边栏(可拖动其左边缘调宽度)。

视图移到右侧后,活动栏图标可能不再作为入口;此时用 DSH: 打开侧边聊天 命令或状态栏 DSH 按钮调出。

侧栏标题栏有 重启 / 浏览器 / 移到右侧 三个按钮;状态栏右侧常驻服务状态;所有服务日志输出到 DSH Server 输出面板(视图 → 输出)。

已知限制(预览版)

  • DSH 前端按全窗口设计:侧栏较窄时布局会被挤压,建议拉宽侧栏或配合"在浏览器打开"使用。
  • 依赖本机 Node 与 dsh:v1 自动探测用户环境的 dsh;把 dsh 打进扩展(vsix 自带)属于后续工作。
  • 代码块复制按钮:VSCode webview 对嵌套 iframe 的剪贴板有平台限制(见 microsoft/vscode#182642),已加 allow="clipboard-*" 授权,多数环境可用;若仍失败,用鼠标选中 + Ctrl+C 原生复制即可。
  • 进程即会话:VSCode 关窗 / 扩展重载会杀掉 dsh 子进程,但会话已持久化到 $DSH_HOME(默认 ~/.dsh),下次启动可恢复。
  • 信任模型:DSH web 目前只有回环信任栅栏、无认证层;本扩展只绑定 127.0.0.1,符合其安全姿态。
  • 模型配置:需按 DSH 常规方式配置 DeepSeek API key(侧栏设置面板里操作)。

后续路线

  • 路线 B:原生协议客户端 + 自绘侧栏 UI(更接近 Claude Code 扩展的观感):扩展实现 Typert 客户端(@deepseek-ai/dsh-api-gateway/client、@deepseek-ai/dsh-client-connection 等包已在 npm),webview 里画轻量聊天界面,不再依赖 DSH 前端 dist。
  • 打包 dsh 进 vsix(内置 Node 运行时 / 懒加载 npx 安装)。
  • 编辑器联动:选中代码 → 发送到侧栏(editor/context 菜单)。

原始 README: https://github.com/bingchengle/deepseek-harness-vscode/blob/main/README.md ↗