在 VS Code 侧边栏内嵌使用 DeepSeek HarnessDSH网页界面的插件
50.9/100
综合分
38
GitHub 星标
—
npm 周下载
—/5
用户评分
数据截至 2026/10/16 · 周下载取自 npm 全网(含 CI / 镜像),非本站安装数;综合分由星标、活跃度与兼容性检查合成。
自动兼容检查有告警:未发布到 npm registry,仅可从源码安装。
安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add Fengze233/dsh-vscode该包不可直接 npm 安装,改从 GitHub 源安装(明细见下方安装检查)
状态速览
判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态信任档位:已验证
档位由哪些信号合成
本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。
社区实装还没有人打卡 · 装过的第一个就是你
安装兼容性检查⚠ 装前注意未发布到 npm registry,仅可从源码安装
展开查看检查明细 ↓
以下结论由程序自动检查 npm 包、engines 声明与入口文件得出,未做人工实机验证——能装不等于用着没问题。
✗npm 包dsh-vscode-panel(未发布到 npm,仅可源码安装)
✓Node 引擎未声明 engines.node
✓dsh CLI 依赖未声明 dsh 版本约束
✓入口文件main/exports/bin 已声明
验证方式:npm registry 存在性 + package.json 静态校验 · 最后检查 2026/10/30 09:04:52
安全扫描自动 · 静态分析源码v2.7.0🔵 扫描:含敏感能力尚无人工评估展开查看扫描说明与证据 ↓
安全扫描自动 · 静态分析源码
v2.7.0静态扫描发现插件具备触达本地系统的能力:执行外部命令、读写/删除本地文件、读取剪贴板或密钥类环境变量(至少其一)。这是能力清单,不是危险判定——具体能力项与证据见下方,安装前请自行判断是否需要。
可执行外部命令读写/删除本地文件读取剪贴板或密钥环境变量写入剪贴板(不计风险)发起外部网络请求
查看扫描证据(共 23 处,展示前 23 条)
- 读取本地文件src/bridge/installer.ts:372
exists: (p) => nodeFs.existsSync(p), - 读取本地文件src/bridge/installer.ts:373
readFile: (p) => nodeFs.readFileSync(p, 'utf8'), - 写入本地文件src/bridge/installer.ts:374
writeFile: (p, content) => nodeFs.writeFileSync(p, content, 'utf8'), - 写入本地文件src/bridge/installer.ts:375
mkdir: (p) => nodeFs.mkdirSync(p, { recursive: true }), - 删除本地文件src/bridge/installer.ts:377
rmDir: (p) => nodeFs.rmSync(p, { recursive: true, force: true }), - 读取本地文件src/bridge/installer.ts:378
readdir: (p) => nodeFs.readdirSync(p), - 读取本地文件src/bridge/installer.ts:382
return nodeFs.lstatSync(p).isSymbolicLink(); - 读取本地文件src/extension.ts:151
const version = JSON.parse(readFileSync(pkgPath, 'utf8')).version; - 读取本地文件src/extension.ts:166
const version = JSON.parse(readFileSync(join(desktopRoot, rel), 'utf8')).version; - 发起网络请求src/extension.ts:574
const res = await fetch(launch, { redirect: 'manual', signal: AbortSignal.timeout(3000) }); - 读取本地文件src/extension.ts:748
void cleanupStaleImageCaches((d) => nodeFs.readdir(d), async (p: string) => { await nodeFs.unlink(p); }, roots).catch(() => {}); - 写入剪贴板src/extension.ts:777
await vscode.env.clipboard.writeText(display); - 写入剪贴板src/extension.ts:789
await vscode.env.clipboard.writeText(logBuffer.join('\n')); - 删除本地文件src/extension.ts:821
const fsDeps = { writeFile: async () => {}, rmFile: async (p: string) => { await nodeFs.unlink(p); } }; - 读取本地文件src/extension.ts:830
removed = await cleanupStaleImageCaches((d) => nodeFs.readdir(d), async (p: string) => { await nodeFs.unlink(p); }, roots); - 删除本地文件src/extension.ts:853
await cleanupAllImageCaches({ writeFile: async () => {}, rmFile: async (p) => { await nodeFs.unlink(p); } }); - 写入本地文件src/panel/provider.ts:190
await nodeFs.writeFile(p, Buffer.from(b64, 'base64')); - 删除本地文件src/panel/provider.ts:193
await nodeFs.unlink(p); - 写入剪贴板src/panel/provider.ts:206
await vscode.env.clipboard.writeText(msg.text); - 读取剪贴板src/panel/provider.ts:225
text = await vscode.env.clipboard.readText(); - 执行外部命令固定命令src/service/process.ts:247
spawnSync('taskkill', ['/pid', String(pid), '/T', '/F'], { stdio: 'ignore', windowsHide: true }); - 发起网络请求src/service/proxy.ts:133
const upReq = http.request(up, (upRes) => { - 发起网络请求src/service/proxy.ts:171
const upReq = http.request({
扫描于 2026/11/3(0 天前) · 范围 入口闭包 + 全包扫描 · 来源 GitHub 仓库
静态扫描只反映源码中出现的调用,不构成安全背书;人工评估与自动扫描相互独立、互不覆盖。
给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个
界面预览
2 张 · 点击查看大图功能亮点
- 侧边栏内嵌网页界面
- 使用DSH网页界面
README
由 DeepSeek 最新模型翻译生成DSH for VS Code 🐳
在 VS Code 中直接使用 DeepSeek Harness(DSH) 的网页界面:点击侧边栏图标即可内嵌打开 DSH,自动启动/复用 dsh web 服务,代码与 AI 界面同屏,无需再切换终端和浏览器。
支持 DSH 0.1.2 及更新版本(含其一次性 token 浏览器鉴权,自动登录、无需手工操作)——详见 DSH ≥0.1.2 鉴权与本地代办。更早的 DSH(≤ 0.1.1,无鉴权)行为不变。
📸 界面截图
DSH for VS Code 界面截图
🎬 演示视频
如何在 VSCode 中使用 DeepSeek Harness?用 DSH!!
展开完整文档(README 剩余 1 节)
DSH for VS Code 🐳
在 VS Code 中直接使用 DeepSeek Harness(DSH) 的网页界面:点击侧边栏图标即可内嵌打开 DSH,自动启动/复用 dsh web 服务,代码与 AI 界面同屏,无需再切换终端和浏览器。
支持 DSH 0.1.2 及更新版本(含其一次性 token 浏览器鉴权,自动登录、无需手工操作)——详见 DSH ≥0.1.2 鉴权与本地代办。更早的 DSH(≤ 0.1.1,无鉴权)行为不变。
📸 界面截图
DSH for VS Code 界面截图
🎬 演示视频
如何在 VSCode 中使用 DeepSeek Harness?用 DSH!!(Bilibili)
B 站 59 秒演示视频:BV1p8bD6dE18
✨ 特性
- 🖱️ 一键打开:左右侧边栏各有一个 DSH 鲸鱼图标,点击即在对应侧栏内嵌显示 DSH 网页;
- 🚀 服务自动管理:自动探测端口——已有 dsh web 直接复用,没有则后台静默启动,就绪后自动加载;
- 🔄 状态实时同步:状态栏四态指示(运行中绿 / 启动中黄 / 失败红 / 已停止灰),点击状态栏可开关面板;
- 🛟 异常兜底:端口被占、dsh 未安装、启动超时、服务崩溃/失联均有对应提示页与一键重连,绝不白屏;配置端口被其他程序占用时自动改用第一个空闲端口(仅本次会话临时生效);
- 🌐 双语界面:文案跟随 VS Code 显示语言——中文环境显示中文,其余语言一律英文;
- 📋 复制/粘贴/右键开箱即用:修复 VS Code 内嵌环境下(尤其是 macOS)聊天内容无法 Cmd+C 复制、Cmd+V 粘贴、右键无菜单的问题——面板内置标准编辑快捷键仿真与右键菜单(复制/粘贴/剪切/全选/撤销/重做),普通浏览器打开与原有功能完全不受影响;
- 🧹 退出清理:关闭窗口自动停止插件自启的服务,不留僵尸进程;手动启动的服务永不干预;
- 🔒 安全边界:只连接回环地址(127.0.0.1 / localhost / [::1]),不读取凭据。
- 🔐 适配 DSH 0.1.2 鉴权:自动从服务日志解析一次性启动网址,兑换 DSH 的签名会话 cookie(30 天有效,服务重启不失效),并让面板经本地代办代理访问 DSH——由代理代示会话。虽然 DSH 的 SameSite=Strict cookie 在跨站 iframe 中永远无法使用,内嵌面板照常可用;会话失效时自动重新获取(自启服务)或提示重新粘贴一次(外部启动的服务);
- 🔝 编辑器右上角图标:编辑器标签栏右上角新增 DSH 鲸鱼按钮(与 Claude Code 同位置),点击一键打开右侧 DSH 面板;
- 🌐 SSH Remote 支持(可选):远程连接时可在远端运行 dsh,并经 VS Code 隧道在面板中打开(dsh.remote.enabled,默认关闭);
- 🖼️ 对话框自由上传图片:模型无视觉能力也能发送图片——图片缓存到工作区并以文件路径引用随消息发出,让模型调用图像工具查看(面板关闭时清理;可用 dsh.image.fallback 关闭);
- 🪟 不再误弹浏览器:启动 dsh web 默认追加 --no-open(需弹浏览器时用 dsh.openInBrowser 恢复)。
📥 安装
方式一:商店安装(推荐)
VS Code 扩展面板搜索 DSH(发布者 Fengze233),或命令行执行:
code --install-extension Fengze233.dsh-vscode-panel
商店页面:<https://marketplace.visualstudio.com/items?itemName=Fengze233.dsh-vscode-panel>
方式二:下载 .vsix 安装包
1. 前往 Releases 下载最新 dsh-vscode.vsix;
2. VS Code 中按 Ctrl+Shift+P → 执行 Extensions: Install from VSIX... → 选择下载的文件;
3. 重载窗口(Developer: Reload Window)。
方式三:从源码构建
git clone https://github.com/Fengze233/dsh-vscode.git
cd dsh-vscode
npm install
npm run package # 产出 dsh-vscode.vsix,再按方式二安装
前置要求:已安装 DeepSeek Harness 的 dsh 命令并位于 PATH 中(插件会自动检测;未安装时会给出提示)。
🚀 使用
1. 安装后,左侧活动栏与右侧辅助侧边栏各出现一个 DSH 鲸鱼图标;
2. 点击任意一个图标:插件自动启动(或复用)dsh web,并在该侧边栏内嵌显示 DSH 网页;
- 点右侧图标 → 面板开在右侧,左侧文件目录不受影响;
- 若 dsh.port 被其他程序占用,插件会自动改用第一个空闲端口(仅本次会话临时生效,设置不变,弹窗告知临时端口);
3. 面板标题栏按钮:在浏览器中打开 重启服务 停止服务 复制网址 查看日志;
4. 底部状态栏显示服务状态,点击可开关面板。
命令面板(DSH: 开头)
| 命令 | 说明 |
| DSH: 打开面板 | 打开左侧面板 |
| DSH: 在辅助侧边栏打开 | 打开右侧面板 |
| DSH: 在浏览器中打开 | 在系统浏览器打开 DSH 页面 |
| DSH: 重启服务 | 重启插件管理的服务 |
| DSH: 停止服务 | 停止插件启动的服务 |
| DSH: 复制网址 | 复制 DSH 页面地址 |
| DSH: 查看日志 | 打开插件日志输出通道 |
| DSH: 复制日志 | 把完整日志(环境信息 + 服务日志)复制到剪贴板,用于问题报告 |
| DSH: 重试桥接安装 | 重新安装桥接并重启服务 |
| DSH: 卸载桥接 | 移除桥接包并还原 cordis.patch.yml |
🔐 DSH ≥0.1.2 鉴权与本地代办
DSH 0.1.2 起强制浏览器鉴权。dsh web 启动时会打印一条一次性启动网址:
dsh web: http://127.0.0.1:3080/?token=<一次性 token>
访问它会返回 303 并下发一张签名会话 cookie(HttpOnly; SameSite=Strict,按请求 Host 绑定,30 天有效)。此后所有页面与 /api 请求都必须携带该 cookie,否则一律 401 dsh web authentication required。
为什么需要代办:面板是跨站 iframe(顶层文档为 vscode-webview://…),浏览器在这种上下文中永远不会回送 SameSite=Strict cookie(已用三种顶层文档形态实测验证)。因此 iframe 无论加载什么地址都无法自行登录。
扩展的做法(由扩展自己启动的服务全程自动):
1. 把 401/403(响应体含 dsh web 特征)识别为「DSH 在运行、需要登录」,而不是「端口被其他程序占用」——这正是此前「服务 15 秒内未就绪 / 端口占用」连环误报的根因;
2. 从子进程输出解析启动网址(日志中 token 打码、错误提示不回显);
3. 用它兑换一次会话 cookie 并存入扩展私有存储(按 host:port 分条,30 天有效,服务重启不失效);
4. 启动本地代办代理(127.0.0.1 随机端口):面板 iframe 加载代理地址,由代理把全部流量转发给 dsh web,同时注入会话 cookie、重写 Host,并适配 DSH 的 /api browser-trust fence(该 fence 要求 Origin.host === Host 且拒绝 Sec-Fetch-Site: cross-site,经代理后两者必然不成立——代理作为受信本机中介剥离这些浏览器来源头)。上传、SSE 流、WebSocket 升级均按流透传;
5. 会话若失效(或 DSH 凭据被重置),代理把上游 401 反馈给扩展,扩展自动重新获取会话(自启场景)或重新显示登录页。
如果你自己启动 DSH(systemd / 终端),扩展读不到那个进程的日志,面板会显示一次性的登录引导页:把服务日志里的启动网址粘贴进去即可(如 journalctl -u dsh -n 100)。粘贴一次最长可用 30 天,且服务重启无需重新粘贴。也可以粘贴裸地址 http://127.0.0.1:3080/——对 DSH ≤ 0.1.1(无鉴权)服务这就够了。
关于代办的暴露面:代理只监听 127.0.0.1,且持有 30 天会话,因此本机任意进程(含同机其他用户)只要找到该端口即可驱动该会话——这与 DSH ≤ 0.1.1 直接以无鉴权方式监听 127.0.0.1:3080 的暴露面相同,实际更窄(端口随机、需要先扫描)。0.1.2 的鉴权防护对象是「网络暴露与跨站浏览器上下文」,本代理没有重新引入网络暴露。
🔗 桥接与联动
安装后,插件会在你的 DSH 用户目录安装本扩展的桥接包(经 DSH 官方客户端插件扩展点安装),让面板与 VS Code 联动。启用后获得三项能力:
- 🔗 外链跳转:面板内点击外链,在系统默认浏览器中打开(而非被困在 iframe 内);
- 📂 文件跳转:点击面板内的文件路径,在 VS Code 中打开对应文件;
- 📋 剪贴板复制:面板内 DSH 的复制按钮(如代码块复制)改由扩展宿主写入系统剪贴板,绕开 VS Code 对 webview 内跨源 iframe 的剪贴板权限拦截。
- ↩️ 撤销/重做(macOS Cmd+Z / Cmd+Shift+Z,Windows Ctrl+Z / Ctrl+Y):VS Code 会吞掉嵌套 iframe 内的标准快捷键;且 DSH 输入框为 React 受控组件、其原生撤销栈为空,execCommand('undo') 会失效。桥接在握手后为输入框维护手动撤销/重做栈(连续输入按 400ms 归组为一条记录),原生撤销可用时优先原生、失败时手动兜底——修复 issue #6「无法 Cmd+Z 撤销」。
安装与卸载机制(透明披露)
为让 DSH 网页能与 VS Code 通信,插件会:
1. 在你的 DSH 用户目录($DSH_HOME/profiles/<dsh.profile>,默认 ~/.dsh/profiles/web)安装本扩展的桥接包 dsh-vscode-bridge(经 DSH 官方客户端插件扩展点安装);
2. 在 cordis.patch.yml 中写入一段带 # dsh-vscode-bridge: begin / # dsh-vscode-bridge: end 标记的 insert: 条目,把桥接包注册为 DSH 的官方 client 插件(只写用户目录,绝不触碰 DSH 安装目录)。
如需移除,两种方式任选:
- 卸载插件:VS Code 卸载本扩展时会自动执行 uninstall 钩子,同样按标记精确删除条目并删除桥接目录(尽力而为,不影响卸载流程);
- 仅移除桥接:执行命令 DSH: 卸载桥接,效果相同。
版本说明:桥接包版本与插件版本始终一致(二者一同随插件包发布到商城),安装器按「版本不一致 → 强制重装」保证逻辑更新触达。
桥接相关设置(dsh.)
| 设置项 | 默认值 | 说明 |
| dsh.bridge.enabled | true | 是否启用桥接(关闭后不安装、不注入、不弹警告,三项联动不可用) |
| dsh.workspaceRootIndex | 0 | 多根工作区时,用第几个根目录作为 dsh web 进程工作目录(越界回退第一个) |
| dsh.bridge.silenceWarning | false | 抑制桥接降级警告(例如在面板之外打开 DSH 页面时) |
降级行为
桥接仅在面板内生效。若桥接未生效(例如你在浏览器里单独打开 DSH 页面、或安装失败),面板完全可用,只有上述三项联动不可用;插件启动时会弹一次警告,可选择「重试安装」或「不再提示」。
🆕 v0.4.0 新特性
- 支持 DSH 0.1.2(浏览器鉴权):自动登录(捕获启动网址 → 兑换会话 → 30 天 cookie),并让面板经本地代办代理访问 DSH,内嵌体验在 SameSite=Strict 会话模型下照常可用;外部启动的服务提供一次性粘贴登录页。详见 DSH ≥0.1.2 鉴权与本地代办。
- 修复 DSH 0.1.2 下「服务 15 秒未就绪 / 端口占用」连环误报:鉴权 401 现在被正确识别为「DSH 在运行、需要登录」。
- 修复面板内 /api 403(设置页「加载提供方目录失败」、工作区/会话列表空白):代办以受信本机中介身份适配 DSH 的 browser-trust fence(Origin/Sec-Fetch-)。
- 修复 DSH 0.1.2 下图片降级失效(完全发不出图片):桥接同时支持两代 RPC 线格式——斜杠端点(session/prompt)、payload.args.request 包装、以及 session/attachment-invalid 拒绝码。
- WSL Remote 修复(issue #13):握手不再依赖 iframe load 事件、postMessage 使用 ''(webview service worker 会重写 iframe origin)、CSP frame-src 只由最终地址推导、WSL 与 SSH 远程分开归类(WSL 走 localhost 直连、不需隧道)、握手超时按远程类型放宽。
- 环境信息头在 Linux/macOS 下也能显示 dsh 版本(符号链接感知的包定位)。
🆕 v0.3.0 新特性
- 编辑器右上角图标:标签栏右上角的鲸鱼按钮一键打开右侧面板(命令 DSH:打开右侧面板)。图标为原鲸鱼 + 白底(whale-icon-bg.svg),深色/浅色主题下都清晰可见;左侧活动栏与右侧辅助侧边栏保持原始鲸鱼图标不变。
- SSH Remote:开启 dsh.remote.enabled 后,插件在远端宿主运行、在远端启动/复用 dsh,并经 VS Code 隧道在本地面板展示——本地窗口保持干净,远端服务仍只监听 127.0.0.1。
- 非视觉模型也能发图(无感直发):在对话框里自由上传图片;当当前模型无图像输入能力时,图片保存到你的工作区,消息以「原文 + 图片:<绝对路径>」直接发出——不报错、不弹提示,模型据此调用图像识别工具查看并正常回答;仅对支持视觉的模型才会以原生方式上传图片。
- 不再自动弹浏览器:dsh web 以 --no-open 启动,插件不再弹出浏览器窗口;需要时可用 dsh.openInBrowser 恢复。
⚙️ 设置(dsh.)
| 设置项 | 默认值 | 说明 |
| dsh.profile | web | 启动 DSH 及安装桥接所用的 profile(自定义 profile 需提供网页界面) |
| dsh.launchPreference | auto | 优先使用哪种 dsh 安装:auto(npm 优先,没有再桌面端)/ npm / desktop;首选不存在时自动用另一种,日志与环境信息头写明实际来源 |
| dsh.desktopCommandPath | (空) | 桌面端命令绝对路径(通常 %LOCALAPPDATA%\Programs\DeepSeek Harness\resources\runtime\cli\bin\dsh.cmd);留空按默认位置自动探测 |
| dsh.port | 3080 | 期望端口(探测与启动共用) |
| dsh.host | 127.0.0.1 | 服务地址(仅允许回环地址) |
| dsh.autoStart | true | 服务未运行时自动启动 |
| dsh.stopOnExit | true | 关闭最后一个窗口时停止插件自启的服务 |
| dsh.extraArgs | [] | 启动 dsh web 时附加的参数 |
| dsh.executablePath | "" | dsh 可执行文件绝对路径(Windows 为 dsh.cmd);留空则从 PATH 查找 |
| dsh.openInBrowser | false | 服务启动后在默认浏览器中打开 DSH 页面(关闭时向 dsh web 传递 --no-open) |
| dsh.remote.enabled | false | 启用远程场景(SSH Remote / WSL / Dev Containers / Codespaces):在远端运行 dsh,经 VS Code 隧道在面板中打开(默认关闭;开启后需重载窗口生效) |
| dsh.image.fallback | true | 当前模型无视觉能力时,把上传图片以文件路径形式随消息发送而不报错(文件缓存在会话工作目录,面板关闭时清理) |
| dsh.startTimeoutMs | 45000 | 等待 dsh web 就绪的总超时(毫秒,5000–600000)。冷启动慢的机器(Windows 实测 17–23 秒)可调大;日志提示「未在 N 秒内就绪」但服务其实已起来时优先调此项 |
| dsh.env | {} | 注入 DSH 子进程的额外环境变量(键值对,与父进程环境合并)。典型用法:代理网络下设 {"NODE_OPTIONS":"--use-env-proxy"} |
| dsh.useEnvProxy | false | 自动为子进程的 NODE_OPTIONS 追加 --use-env-proxy(不覆盖已有选项)。必须经 HTTP/HTTPS 代理才能访问模型 API 时开启 |
| dsh.panel.zoomLevel | 1 | 面板内网页缩放:下拉可选 0.5–1.5(每 0.05 一档);更细的值可直接写 settings.json |
设置 "dsh.profile": "custom-profile" 和 "dsh.port": 3081 后,启动命令为 dsh --profile custom-profile --host 127.0.0.1 --port 3081 --no-open,桥接安装到 $DSH_HOME/profiles/custom-profile。修改 profile 会重启扩展自己启动的服务;外部服务仍按端口复用。默认 web 保持现有行为。
profile 名称可包含 ASCII 字母、数字、点、下划线与连字符,不能以连字符开头,也不能是 . 或 ..;首尾空白会自动去除。
设置界面中英对照
设置界面的条目名由配置键推导(点号变空格、中间段加冒号),说明文案来自扩展的本地化文件(包内已提供 package.nls.zh-cn.json / package.nls.zh-hans.json)。
但在 VS Code + WSL Remote 场景下实测:即使扩展宿主的 locale 已是 zh-cn、nls 文件与键覆盖均正确,设置界面仍显示英文(对照中可见官方 Remote. 扩展为中文)——属该环境的清单本地化限制,非扩展缺陷。因此本表作为长期可用的对照;搜索时直接输配置键(如 panel.zoomLevel、useEnvProxy)比输标题更容易命中。
| 设置界面显示的英文名 | 配置键 | 含义 |
| Dsh: Auto Start | dsh.autoStart | 服务未运行时自动启动 dsh web |
| Dsh: Bridge: Enabled | dsh.bridge.enabled | 启用面板与 DSH 之间的桥接(外链、文件跳转) |
| Dsh: Bridge: Silence Warning | dsh.bridge.silenceWarning | 抑制桥接警告 |
| Dsh: Env | dsh.env | 注入 DSH 子进程的环境变量(键值对) |
| Dsh: Executable Path | dsh.executablePath | dsh 可执行文件绝对路径(留空则从 PATH 查找) |
| Dsh: Extra Args | dsh.extraArgs | 启动 dsh web 时附加的参数 |
| Dsh: Host | dsh.host | 服务地址(仅允许回环地址) |
| Dsh: Image: Fallback | dsh.image.fallback | 模型无视觉能力时把图片降级为路径转发 |
| Dsh: Open In Browser | dsh.openInBrowser | 启动后在默认浏览器打开 DSH 页面 |
| Dsh: Panel: Zoom Level | dsh.panel.zoomLevel | 面板内网页缩放:0.5–1.5,可自定义数值 |
| Dsh: Profile | dsh.profile | 启动 DSH 及安装桥接所用的 profile,默认 web |
| Dsh: Port | dsh.port | 期望端口(探测与启动共用) |
| Dsh: Remote: Enabled | dsh.remote.enabled | 启用远程场景(SSH Remote / WSL / Dev Containers) |
| Dsh: Start Timeout Ms | dsh.startTimeoutMs | 等待 dsh web 就绪的总超时(毫秒,默认 45000) |
| Dsh: Stop On Exit | dsh.stopOnExit | 关闭最后一个窗口时停止插件启动的服务 |
| Dsh: Use Env Proxy | dsh.useEnvProxy | 自动为子进程追加 NODE_OPTIONS=--use-env-proxy(代理环境用) |
| Dsh: Workspace Root Index | dsh.workspaceRootIndex | 多根工作区取第几个根目录(从 0 起) |
🌍 多语言
界面文案跟随 VS Code 显示语言(Configure Display Language):zh- → 简体中文,其余语言 → 英文。
扩展包内提供 package.nls.json / package.nls.zh-cn.json / package.nls.zh-hans.json。
但在 VS Code + WSL Remote 场景实测:即使扩展宿主的 locale 已是 zh-cn、本地化文件与键覆盖均正确,设置界面仍显示英文(同一界面里官方 Remote. 扩展为中文)——属该环境的清单本地化限制,非扩展缺陷。因此上文《设置界面中英对照》表作为长期可用的对照方案。
🧑💻 开发
环境要求:Node.js ≥ 22、VS Code ≥ 1.91。
npm install
npm run test # 318 个单元/集成测试(含真实 dsh web 全流程:服务生命周期、鉴权会话)
npm run compile # 构建 out/extension.js
npm run watch # 监听构建
npm run typecheck # 类型检查
npm run package # 打包 .vsix
调试:VS Code 打开本目录,按 F5 启动 Extension Development Host。
src/
├── extension.ts # 入口:装配与命令注册 ├── i18n.ts # 动态文案字典(zh- 中文 / 其余英文) ├── config.ts # 设置读取与规范化(loopback 白名单校验) ├── service/ │ ├── detect.ts # 端口探测(识别 DSH 标记) │ ├── process.ts # 跨平台子进程封装(dsh / dsh.cmd) │ └── manager.ts # 服务管理器状态机(核心) ├── bridge/ # 桥接:安装器、握手宿主、消息处理、状态评估 ├── panel/ │ ├── html.ts # 面板占位页模板(CSP 最小权限) │ └── provider.ts # WebviewViewProvider(iframe + 占位页) ├── workspaceRoot.ts # 多根工作区解析 └── statusbar.ts # 状态栏控制器
🧭 已知限制
- 欢迎页"DSH 入门"卡片的彩色图标来自 Marketplace 画廊数据,仅在商店上架后显示(卡片功能本身不受影响);
- VS Code 平台规则:左侧图标打开左侧面板、右侧图标打开右侧面板,无法让左侧图标打开右侧面板。
- SSH Remote:远端也需安装本插件(VS Code 会引导);隧道会出现在「端口(Ports)」视图,用户可手动关闭,插件在下次就绪时自动重建。
- 图片降级:缓存文件放在工作区根目录——需先打开一个工作区文件夹(未打开文件夹时无法落盘缓存,也就不做降级)。临时图“模型看完即删”:同会话发出下一条消息时立即删除上一批(模型已读完并回答);若不再发消息,约 2 分钟后自动删除兜底;会话新建/删除/切换、面板关闭/页面卸载与扩展停用也都会清理(尽力而为)。扩展激活时会自动扫描清理上次会话遗留的 dsh-imgcache-* 孤儿;也可随时运行命令 DSH: 清理图片缓存 一键清除。
- 复测如何确认桥接已更新:在 DSH 面板 DevTools(开发者工具)Console 中应看到 [dsh-vscode-bridge] handshake ok, v0.4.0, imageFallback=true 与传图发送后的 image fallback: 已把图片改为地址随消息重发(N 张): … 日志;若仍显示旧版本,说明旧桥接未重装——请重启 DSH 服务(vsix 随附桥接版本 0.4.0,安装器在版本不一致或 client.js 内容不一致时都会强制重装,同版本重新打包同样会刷新)。
- 外部启动的 DSH(≥ 0.1.2):扩展读不到其它进程的日志,首次登录需要粘贴一次启动网址(之后 30 天无需重复)——见 DSH ≥0.1.2 鉴权与本地代办。
- 窄视口中文光标(上游问题):面板宽度约 300–400px 时,光标可能落在最后一个中文字符中间。这是 DSH 网页前端的问题(记录于 issue #9);0.1.2 起上游已重写输入框组件,且本扩展无法修改 DSH 页面内部代码——调查结论见该 issue。
- --no-open 默认传给 dsh web;若在 dsh.extraArgs 或 dsh.openInBrowser 显式选择弹浏览器,则按你的选择执行。
🌐 社区
本项目是 DeepSeek Harness 社区插件(话题:dsh-plugin)。
- DSH 官方仓库:<https://github.com/deepseek-ai/deepseek-harness>
- 问题反馈:<https://github.com/Fengze233/dsh-vscode/issues>
- DSH 社区讨论:<https://github.com/deepseek-ai/deepseek-harness/discussions>
🙏 贡献者与致谢
本扩展的许多改进来自社区。以下贡献按类型列出(对应提交/讨论可在仓库对应编号查看):
代码贡献
| 贡献者 | 贡献内容 | 关联 |
| (暂无) | 当前版本没有已合并的社区代码贡献 | — |
问题报告
| 报告者 | 报告内容 | 关联 |
| @AAAwoshi | 切换活动编辑器导致面板整页重载:定位到 refreshContextBar() 里多余的 render() 与每次渲染重生成 nonce,并附日志采样证据、最小补丁与补丁后复测数据 | #27 |
| @Joshuayang228 | 点文件不转发到编辑器:定位到 CSS Module 哈希类名根因,并附完整实测证据与修法 | #22 |
| @lizhuoyuan41-droid | 桥接包被写进 DSH Desktop 私有命令目录导致桌面启动失败:给出根因与白名单建议 | #20 |
| @Minelenbolan | cordis.patch.yml 桥接条目重复导致插件树崩溃 | #19 |
| @HafenYin | Windows 冷启动超过 15 秒被误报超时(附完整启动日志) | #23 |
| @NOIPJohnny | 代理环境下 DSH 无法请求模型,建议注入子进程环境变量 | #18 |
| @ThinBuffalo | 面板内网页缩放需求 | #8 |
| @smallshieh | 编辑器上下文注入需求(当前文件/选区随消息发送) | #10 |
| @Tsechiyuan | 选中代码直接发送到会话的需求 | #7 |
| @sseryling | WSL Remote 下面板白屏与桥接握手失败:附实测修复方案 | #13 |
| @Zanford | VS Code 中 DSH 无法正常拉起 | #12 |
上游
- 窄视口下输入框中文光标问题(#9)经核查位于 DSH 官方前端 composer(旧版「可见字形 backdrop + 透明 textarea」双层度量),上游已重构为 Lexical 编辑器,故按上游结论关闭。
📄 License
MIT © 2026 Fengze233预览分享卡片长什么样 ↓
分享 · DeepSeek Harness Hub
Fengze233/dsh-vscode
在 VS Code 侧边栏内嵌使用 DeepSeek HarnessDSH网页界面的插件
相关插件 · UI / 主题
破甲增强版JeffKeeping/dsh-purge-plus
dsh-purge 的非官方分支fork:适配 DeepSeek Harness 0.2.1-rc.2、破甲内核…
★ 387已汉化DeepSeek 客户端
71.9
无代码业务系统平台nocobase/nocobase
NocoBase 是什么
★ 24,804已汉化DSH
71.8
1Panel 服务器面板1Panel-dev/1Panel
全球 250 万+ 自托管用户共同喜爱。
★ 37,344已汉化DSH
71.5
终端编码代理esengine/DeepSeek-Reasonix
· 指南 · ACP · 扩展开发 · 规格 · 官方网站 · Discord · QQ
★ 36,045已汉化DSH
71.2
工作状态行动态ccch1mneyyy/working-activity
作者:chimney@ccch1mneyyy。社区项目,非 DeepSeek 官方项目。
★ 664已汉化DSH
71.2
多模型配置管家farion1231/cc-switch
跨平台桌面一体化助手,支持 Claude Code、Codex、OpenCode、DeepSeek Harness 等工具,唯一官网 ccswitch.io
★ 151,202已汉化DSH
71.1