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

侧边栏客户端 Mu-X-Yun/deepseek-harness-for-vscode-unofficial

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

在 VS Code 侧边栏直接与 dsh 代理对话

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

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

安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add Mu-X-Yun/deepseek-harness-for-vscode-unofficial
该包不可直接 npm 安装,改从 GitHub 源安装(明细见下方安装检查)

状态速览

判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态
信任档位:待复验
是什么[目录]—
dsh 原生插件 · browser
暂无时间戳·判据 →
装得上吗[实装验证]—
曾在 dsh 0.2.0-rc.2 下真实安装成功,但当前 dsh 已更新至 0.2.1-rc.5,本站尚未在新版下复验
L4 · 真实安装等级说明 →
数据截至 2026/10/07·判据 →
安全吗[自动扫描]—
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
数据截至 2026/11/03·判据 →
还在维护吗[仓库]—
更新放缓:最近一次提交在 69 天前
暂无时间戳·判据 →
图例:✓ 通过! 需注意— 未判定 / 无数据· 「未判定」= 本站尚无数据,不代表插件有问题
档位由哪些信号合成

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

验证判据与等级说明 →

可信度证据

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

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

可执行外部命令读写/删除本地文件发起外部网络请求
查看扫描证据(共 41 处,展示前 41 条)
  • 读取本地文件
    esbuild.mjs:42
    accessSync(p)
  • 写入本地文件
    esbuild.mjs:52
    mkdirSync(join(root, 'out'), { recursive: true })
  • 读取本地文件
    src/config.ts:108
    accessSync(`${candidate}/apps/cli/src/bin.ts`)
  • 执行外部命令固定命令
    src/extension.ts:186
    execFile('taskkill', ['/pid', String(child.pid), '/T', '/F'], { windowsHide: true }, () => {})
  • 执行外部命令来自配置/变量
    src/extension.ts:193
    child = execFile(
  • 删除本地文件递归
    src/extension.ts:292
    rmSync(join(runtimeRoot, 'node_modules'), { recursive: true, force: true })
  • 删除本地文件递归
    src/extension.ts:327
    rmSync(join(runtimeRoot, 'node_modules'), { recursive: true, force: true })
  • 读取本地文件
    src/extension.ts:516
    const existedBefore = existsSync(profileDir)
  • 删除本地文件递归
    src/extension.ts:523
    if (!existedBefore) rmSync(profileDir, { recursive: true, force: true })
  • 写入本地文件
    src/sdk/runtime.ts:38
    mkdirSync(runtimeDir, { recursive: true })
  • 写入本地文件
    src/sdk/runtime.ts:39
    writeFileSync(configPath, CORDIS_YML_TEMPLATE, 'utf8')
  • 读取本地文件
    src/sdk/runtime.ts:42
    const st = statSync(nmLink)
  • 删除本地文件递归
    src/sdk/runtime.ts:55
    rmSync(nmLink, { recursive: true, force: true })
  • 执行外部命令来自配置/变量
    src/server/DshServerManager.ts:424
    const child = spawn(launch.command, launch.args, {
  • 写入本地文件
    src/server/DshServerManager.ts:537
    writeFileSync(this.stateFile(), JSON.stringify({
  • 读取本地文件
    src/server/DshServerManager.ts:551
    const raw = readFileSync(this.stateFile(), 'utf8')
  • 写入本地文件
    src/server/DshServerManager.ts:564
    writeFileSync(this.stateFile(), '', 'utf8')
  • 发起网络请求
    src/server/DshServerManager.ts:588
    const response = await fetch(url, { method: 'GET', signal: AbortSignal.timeout(3_000) })
  • 发起网络请求
    src/server/DshServerManager.ts:613
    const response = await fetch(persisted.url, { method: 'GET', signal: AbortSignal.timeout(3_000) })
  • 执行外部命令固定命令
    src/server/DshServerManager.ts:704
    execFile('taskkill', ['/pid', String(pid), '/T', '/F'], { windowsHide: true }, (err) => {
  • 读取本地文件
    src/server/DshServerManager.ts:731
    accessSync(join(repoPath, 'node_modules'))
  • 读取本地文件
    src/server/DshServerManager.ts:741
    accessSync(join(repoPath, 'apps', 'web', 'dist', 'index.html'))
  • 写入本地文件
    src/server/profileDetect.ts:56
    mkdirSync(dir, { recursive: true })
  • 读取本地文件
    src/server/profileDetect.ts:58
    if (!existsSync(manifestPath)) {
  • 写入本地文件
    src/server/profileDetect.ts:59
    writeFileSync(manifestPath, JSON.stringify({
  • 读取本地文件
    src/server/profileDetect.ts:67
    if (!existsSync(patchPath)) writeFileSync(patchPath, PROFILE_PATCH_TEMPLATE, 'utf8')
  • 写入本地文件
    src/server/profileDetect.ts:67
    if (!existsSync(patchPath)) writeFileSync(patchPath, PROFILE_PATCH_TEMPLATE, 'utf8')
  • 读取本地文件
    src/server/profileDetect.ts:69
    if (!existsSync(workspacePath)) writeFileSync(workspacePath, PROFILE_PNPM_WORKSPACE, 'utf8')
  • 写入本地文件
    src/server/profileDetect.ts:69
    if (!existsSync(workspacePath)) writeFileSync(workspacePath, PROFILE_PNPM_WORKSPACE, 'utf8')
  • 读取本地文件
    src/server/profileDetect.ts:115
    entries = readdirSync(profilesDir, { withFileTypes: true })
  • 读取本地文件
    src/server/profileDetect.ts:124
    accessSync(join(profilesDir, name, marker))
  • 读取本地文件
    src/server/runtimeDetect.ts:23
    accessSync(dshBinIn(runtimePath))
  • 执行外部命令来自配置/变量
    src/server/runtimeDetect.ts:88
    const out = execFileSync(npmCommand(), ['root', '-g'], {
  • 读取本地文件
    src/server/runtimeDetect.ts:127
    entries = readdirSync(npxRoot, { withFileTypes: true })
  • 读取本地文件
    src/server/runtimeDetect.ts:140
    const st = statSync(join(candidate, 'node_modules', '@deepseek-ai', 'dsh'))
  • 读取本地文件
    src/server/runtimeDetect.ts:202
    accessSync(join(runtimePath, 'node_modules', pkg, file))
  • 读取本地文件
    src/server/runtimeDetect.ts:213
    const pkg = JSON.parse(readFileSync(join(runtimePath, 'node_modules', 'sharp', 'package.json'), 'utf8')) as { version?: string }
  • 写入本地文件
    src/server/runtimeDetect.ts:229
    mkdirSync(runtimeRoot, { recursive: true })
  • 读取本地文件
    src/server/runtimeDetect.ts:233
    pkg = JSON.parse(readFileSync(pkgPath, 'utf8')) as Record<string, unknown>
  • 写入本地文件
    src/server/runtimeDetect.ts:240
    writeFileSync(pkgPath, JSON.stringify(pkg, null, 2), 'utf8')
  • 发起网络请求
    src/workspace.ts:42
    response = await fetch(`${serverUrl}/api/workspace.create`, {
扫描于 2026/11/3(1 天前) · 范围 入口闭包 + 全包扫描 · 来源 GitHub 仓库

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

社区实装还没有人打卡 · 装过的第一个就是你
给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个

功能亮点

  • 侧边栏嵌入官方WebUI
  • 侧边栏与代理对话

非官方 DeepSeek Harness VS Code 客户端:在侧边栏嵌入官方 Web UI。第三方非官方 VS Code 客户端,把 Web UI 嵌进侧边栏。

README

由 DeepSeek 最新模型翻译生成
非官方 DeepSeek Harness for VSCode ⚠️ 非官方插件:本项目由社区开发者维护,与 DeepSeek AI 及其官方产品没有任何关联,非 DeepSeek 官方发布、认可或支持。 在 VS Code 侧边栏中使用 DeepSeek Harness(dsh,DeepSeek 官方的 AI 编程代理框架)的非官方客户端。 侧边栏嵌入 dsh 官方 Web UI(iframe 模式,功能最全)。 快速开始 1. 安装 扩展面板 → ... → Install from VSIX → 选择 Release 中下载的 deepseek-harness-for-vscode-unofficial-.vsix。 2. 打开侧边栏 点击活动栏的 DSH 鲸鱼图标 打开侧边栏。首次使用会先询问是否自动安装 dsh 运行时,确认后开始安装并启动(约 1 分钟,界面会显示加载进度);之后 Reload / 重启 VSCode 均秒开(复用运行中的 dsh)。 状态栏右侧显示 dsh 服务状态与端口,点击可在外置浏览器打开完整界面: DSH 状态栏端口 3. 配置 API Key 设置(Ctrl+,)→ 搜索 dsh.deepseekApiKey → 填入你的 DeepSeek API Key(或让扩展继承宿主环境的 DEEPSEEK_API_KEY)。
展开完整文档(README 剩余 1 节)
非官方 DeepSeek Harness for VSCode

⚠️ 非官方插件:本项目由社区开发者维护,与 DeepSeek AI 及其官方产品没有任何关联,非 DeepSeek 官方发布、认可或支持。

在 VS Code 侧边栏中使用 DeepSeek Harness(dsh,DeepSeek 官方的 AI 编程代理框架)的非官方客户端。

侧边栏嵌入 dsh 官方 Web UI(iframe 模式,功能最全)。

快速开始

1. 安装

扩展面板 → ... → Install from VSIX → 选择 Release 中下载的 deepseek-harness-for-vscode-unofficial-.vsix。

2. 打开侧边栏

点击活动栏的 DSH 鲸鱼图标 打开侧边栏。首次使用会先询问是否自动安装 dsh 运行时,确认后开始安装并启动(约 1 分钟,界面会显示加载进度);之后 Reload / 重启 VSCode 均秒开(复用运行中的 dsh)。

状态栏右侧显示 dsh 服务状态与端口,点击可在外置浏览器打开完整界面:

DSH 状态栏端口

3. 配置 API Key

设置(Ctrl+,)→ 搜索 dsh.deepseekApiKey → 填入你的 DeepSeek API Key(或让扩展继承宿主环境的 DEEPSEEK_API_KEY)。

4. 开始对话

在侧边栏中输入问题即可与 dsh 代理对话(embedded 为官方 Web UI 的完整交互,含会话、工具调用、模型选择等)。

将当前工作区加入 dsh 工作区:打开侧边栏时会自动把当前 VS Code 打开的文件夹收编为 dsh 工作区(会话自动归属该工作区;可在设置中关闭 dsh.autoAddWorkspace)。也可以随时点击侧边栏底部的 + 工作区 按钮手动添加:

Add workspace 按钮

切换 profile:侧边栏底部 + 工作区 右侧的 profile: 按钮可切换 DeepSeek Harness profile(扫描 $DSH_HOME/profiles,也可手动输入——不存在时自动初始化,web 模板)。选择即切换:若目标 profile 已在运行则直接接管(不重启),否则以新 profile 重启 dsh。会话与工作区数据由 dsh 全局共享,切换仅改变插件的 profile 选择。

其他常用命令(命令面板 Ctrl+Shift+P):

| 命令 | 说明 |
| DSH: Open in Secondary Sidebar | 在右侧辅助侧边栏打开(主/辅可同时显示,状态同步) |
| DSH: Open in browser | 外置浏览器打开完整界面 |
| DSH: Show server logs | 查看 dsh 进程与插件日志(排障用) |
| DSH: Stop server | 停止 dsh 服务器 |

与官方 DeepSeek Harness(dsh)的联系

本插件是官方 DeepSeek Harness(dsh,DeepSeek AI 开源的 MIT 项目)的第三方 VS Code 客户端,两者关系如下:

- 不包含、不修改官方源码:插件本身不含任何 dsh 代码,也不对其做补丁或修改;dsh 的源码、版权与发布权归 DeepSeek AI 所有。
- 驱动方式:插件启动你本机安装的 dsh(自动安装、全局安装或源码检出),通过其公开接口驱动:
- embedded 模式:spawn dsh web,在侧边栏 iframe 中嵌入官方 Web UI(界面本身即 dsh 官方 UI)
- 需要自备:DeepSeek API Key(dsh 运行时可由插件自动安装)。
- 上游依赖:dsh 仍处开发者预览阶段(0.1.0-rc.x),其更新可能改变行为、影响本插件 —— 上游变更不受本插件控制。

获取 dsh 运行时(三选一)

插件通过 dsh.runtime.mode 决定 dsh 运行时的来源:

| 模式 | 说明 | 适合 |
| auto-install(默认) | 首次启动自动 npm install @deepseek-ai/dsh 到扩展存储,之后复用 | 开箱即用(推荐) |
| installed | 自动探测已安装的 dsh:全局安装(npm i -g @deepseek-ai/dsh)或 npx 缓存(跑过一次 npx @deepseek-ai/dsh web 即可);dsh.runtime.path 可显式指定 | 已装过 dsh 的用户 |
| repo | 从 deepseek-harness-master 源码检出运行 | 开发/调试 dsh 本身 |

普通用户默认 auto-install 即可(首次启动自动下载);已装过 dsh 的切到 installed 模式直接复用:
npm i -g @deepseek-ai/dsh # 然后设 dsh.runtime.mode: installed

配置项

| 设置 | 默认 | 说明 |
| dsh.deepseekApiKey | (继承环境) | DeepSeek API Key,spawn 时注入进程环境 |
| dsh.deepseekBaseUrl | — | 可选自定义端点;仅接受进程环境注入 |
| dsh.runtime.mode | auto-install | auto-install(自动安装)/ installed(探测全局/npx)/ repo(源码检出) |
| dsh.runtime.path | 自动探测 | runtime 绝对路径(repo 检出目录或含 dsh 的 node_modules 根) |
| dsh.runtime.nodePath | node(PATH) | 用于 spawn dsh 的 Node 可执行文件。必须用系统 Node(process.execPath 在扩展宿主里指向 Code.exe,其内置 node 会破坏 tsx 的 tsconfig-paths 解析) |
| dsh.runtime.registry | (官方源) | npm 镜像源(如 https://registry.npmmirror.com),可加速首次安装 |
| dsh.runtime.port | 3080 | dsh web 端口;0 = 随机(3080 被占用时自动回退) |
| dsh.permissionMode | workspace-write | 注入为 DSH_PERMISSION_MODE |
| dsh.model | deepseek-v4-flash | native 聊天界面的新会话默认模型(当前未启用;embedded 界面自带模型选择器) |
| dsh.logLevel | info | 插件日志级别:过滤进入 DSH 输出通道的日志(error );侧边栏底部 profile: 按钮可切换(目标 profile 已在运行则直接接管,否则重启) |

前置要求

- VS Code ^1.85.0
- Node.js ^22.19 || >=24(dsh 的引擎要求)
- pnpm(仅 repo 模式:构建 dsh 源码时需要)

已知限制

- dsh 处于 developer preview(0.1.0-rc.x),兼容性可能变更;插件自身版本锁定,自动安装的 dsh 运行时跟随 @deepseek-ai/dsh 最新发布。
- embedded 界面是 dsh 自带 Web UI,主题与 VS Code 不完全统一。
- embedded 的 iframe 会捕获键盘焦点,部分 VS Code 快捷键在聊天区域不可用。
- 关闭 VSCode 时 dsh 进程会保留运行(便于下次秒开);需手动停止时用 DSH: Stop server 命令。
- 若 3080 端口上已有程序返回合法 dsh 页面指纹(__DSH_BOOT__ 清单),插件会将其当作运行中的 dsh 接管(本机已跑 dsh web 时是特性);请勿让不受信任的本地程序占用该端口——需要时可把 dsh.runtime.port 改为 0(随机端口)。

架构要点

- 进程归属:dsh web 子进程由扩展宿主(Extension Host)持有,不随侧边栏视图销毁;Reload 时保留复用(状态持久化到扩展存储,健康检查通过则秒开),Windows 上停止时 taskkill /T /F 清理进程树。
- 就绪检测:embedded 模式解析 dsh stdout 的 dsh web: http://127.0.0.1: 就绪行(--port 0 随机端口),而非轮询端口。
- 状态同步:宿主广播 + webview ready 握手 + 15 秒轮询兜底 —— 任何丢失的状态推送都会自愈。
- 嵌入安全:iframe 与 dsh 服务同源(127.0.0.1),通过 dsh 的浏览器信任栅栏;服务器无 CSP / X-Frame-Options,不阻止嵌入。
- 密钥注入:DEEPSEEK_API_KEY / DEEPSEEK_BASE_URL / DSH_ 只通过 spawn 环境注入 —— 这与 dsh 的 BOOTSTRAP 约束(禁止从 .env 读取)一致。
- 依赖修复:npm sharp 0.35.3 为坏发布(二进制无法加载),扩展通过 npm overrides 钉定 0.35.2(auto-install 自动处理;installed 模式检测并提示)。

开发环境(repo 模式)

扩展从 deepseek-harness-master/ 源码检出运行 dsh(自动探测扩展目录的兄弟目录,也可用 dsh.runtime.path 显式指定):

1. 准备 dsh 源码(一次性)
cd deepseek-harness-master
pnpm install
pnpm run build:lib:host && pnpm run build:lib:client # 或 pnpm run build
pnpm run build:web # 产出 apps/web/dist,否则 dsh 启动即失败

2. 安装并启动扩展(F5,Extension Development Host)
cd dsh-vscode
npm install
npm run watch # esbuild watch(launch.json 的 preLaunchTask 会自动执行)

测试

npm test # vitest:渲染/解析/运行时探测/服务器状态机 + SDK 握手 + 真实对话 e2e(无 key 自动跳过)
tests/native-chat.e2e.spec.ts 会用真实 API Key 跑完整对话链路(需要 DEEPSEEK_API_KEY 环境变量)。

打包

npm run package # esbuild build + vsce package → deepseek-harness-for-vscode-unofficial-.vsix
VSIX 不捆绑 dsh 运行时(auto-install 模式首次启动自动安装到扩展存储)。

许可

MIT —— 本项目(扩展本体)为独立开源项目。注意:DeepSeek Harness(dsh)本身是 DeepSeek AI 的 MIT 开源项目,本扩展只是它的外部驱动客户端,不包含其源码。
预览分享卡片长什么样 ↓Mu-X-Yun/deepseek-harness-for-vscode-unofficial
分享 · DeepSeek Harness Hub
Mu-X-Yun/deepseek-harness-for-vscode-unofficial

在 VS Code 侧边栏直接与 dsh 代理对话

这个插件是你维护的吗?
作者本人可认领并核对本条目;认领通过后,详情页会显示「作者已认领」标记。
认领条目 →
回到顶部