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

启动器 joygqz/vscode-dsh

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

一键访问 —— 从状态栏或命令面板启动并打开 Harness。

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

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

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

状态速览

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

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

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

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

展开查看检查明细 ↓

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

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

验证方式:npm registry 存在性 + package.json 静态校验 · 最后检查 2026/10/13 15:40:47

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

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

可执行外部命令读写/删除本地文件写入剪贴板(不计风险)发起外部网络请求
查看扫描证据(共 32 处,展示前 30 条)
  • 写入剪贴板
    src/controller.ts:482
    await vscode.env.clipboard.writeText(externalUrl);
  • 写入本地文件
    src/homeLease.ts:141
    await rename(this.lockDirectory, releaseDirectory);
  • 删除本地文件递归
    src/homeLease.ts:153
    await rm(releaseDirectory, { recursive: true, force: true });
  • 写入本地文件
    src/homeLease.ts:199
    await mkdir(homeDirectory, { recursive: true, mode: 0o700 });
  • 写入本地文件
    src/homeLease.ts:216
    await rename(lockDirectory, staleDirectory);
  • 删除本地文件递归
    src/homeLease.ts:232
    await rm(staleDirectory, { recursive: true, force: true }).catch(() => undefined);
  • 删除本地文件递归
    src/homeLease.ts:235
    await rm(staleDirectory, { recursive: true, force: true }).catch(() => undefined);
  • 写入本地文件
    src/homeLease.ts:267
    await mkdir(candidateDirectory, { mode: 0o700 });
  • 写入本地文件
    src/homeLease.ts:270
    await rename(candidateDirectory, lockDirectory);
  • 删除本地文件递归
    src/homeLease.ts:280
    await rm(candidateDirectory, { recursive: true, force: true }).catch(() => undefined);
  • 读取本地文件
    src/homeLease.ts:323
    const before = await lstat(lockDirectory);
  • 读取本地文件
    src/homeLease.ts:327
    raw = await readFile(join(lockDirectory, METADATA_FILE_NAME), 'utf8');
  • 读取本地文件
    src/homeLease.ts:336
    const after = await lstat(lockDirectory);
  • 写入本地文件
    src/homeLease.ts:369
    await writeFile(temporaryFile, `${JSON.stringify(metadata, null, 2)}\n`, {
  • 读取本地文件
    src/homeLease.ts:375
    const current = await lstat(lockDirectory).catch(() => undefined);
  • 删除本地文件
    src/homeLease.ts:383
    await rm(temporaryFile, { force: true }).catch(() => undefined);
  • 读取本地文件
    src/homeLease.ts:503
    await lstat(path);
  • 发起网络请求
    src/http.ts:33
    const response = await fetch(url, {
  • 读取本地文件
    src/runtime.ts:46
    await access(npxPath, process.platform === 'win32' ? constants.F_OK : constants.X_OK);
  • 读取本地文件
    src/runtime.ts:47
    if (!(await stat(npxPath)).isFile()) throw new Error('not a file');
  • 读取本地文件
    src/runtime.ts:76
    await access(candidate, windows ? constants.F_OK : constants.X_OK);
  • 读取本地文件
    src/runtime.ts:77
    if ((await stat(candidate)).isFile()) return candidate;
  • 执行外部命令来自配置/变量
    src/runtime.ts:92
    execFile(executable, args, { timeout: 5000, windowsHide: true, env: environment }, (error, stdout) => {
  • 执行外部命令来自配置/变量
    src/serverManager.ts:132
    this.spawnImpl = deps.spawnImpl ?? ((command, args, options) => spawn(command, args, options));
  • 写入本地文件
    src/storage.ts:22
    await mkdir(dirname(targetDirectory), { recursive: true });
  • 写入本地文件
    src/storage.ts:24
    await mkdir(stagingDirectory, { mode: 0o700 });
  • 写入本地文件
    src/storage.ts:34
    await rename(stagingDirectory, targetDirectory);
  • 删除本地文件递归
    src/storage.ts:42
    await rm(stagingDirectory, { recursive: true, force: true }).catch(() => undefined);
  • 读取本地文件
    src/storage.ts:48
    return await readdir(directory);
  • 读取本地文件
    src/workspace.ts:65
    const info = await stat(path);
扫描于 2026/11/2(1 天前) · 范围 入口闭包 + 全包扫描 · 来源 GitHub 仓库

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

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

功能亮点

  • 启动DSH网页界面
  • 打开并管理WebUI

从 VS Code 启动、打开并管理 DeepSeek Harness Web UI。

README

由 DeepSeek 最新模型翻译生成
DeepSeek Harness Launcher 在 VS Code 里一键启动、打开并管理 DeepSeek Harness Web UI。插件会检查环境、通过 npm 拉取 DSH、挑一个安全端口、等待就绪,停止时清理进程。 功能 - 一键访问 —— 从状态栏或命令面板启动并打开 Harness。 - 环境检查 —— 校验 Node.js、npx、工作目录和启动设置。 - 服务生命周期 —— 启动、停止、重启、取消,或连接已有服务。 - 共享配置档 —— 同一环境下跨项目复用模型设置和会话。 - 远程访问 —— 支持本地、SSH、WSL、Dev Container 和 Codespaces 工作区。 - 浏览器或编辑器 —— 在系统浏览器或 VS Code webview 中打开 Harness。 前置条件 - VS Code 1.125 或更新版本。 - Node.js 22.19+(仅限 22.x)或 24+,且 node 与 npx 位于同一安装目录。 - 一个受信任的本地、SSH、WSL、Dev Container 或 Codespaces 工作区。 - 你有权限使用的模型的 API key(在 Harness 页面内配置;本插件不读取也不存储它)。
展开完整文档(README 剩余 1 节)
DeepSeek Harness Launcher

在 VS Code 里一键启动、打开并管理 DeepSeek Harness Web UI。插件会检查环境、通过 npm 拉取 DSH、挑一个安全端口、等待就绪,停止时清理进程。

功能

- 一键访问 —— 从状态栏或命令面板启动并打开 Harness。
- 环境检查 —— 校验 Node.js、npx、工作目录和启动设置。
- 服务生命周期 —— 启动、停止、重启、取消,或连接已有服务。
- 共享配置档 —— 同一环境下跨项目复用模型设置和会话。
- 远程访问 —— 支持本地、SSH、WSL、Dev Container 和 Codespaces 工作区。
- 浏览器或编辑器 —— 在系统浏览器或 VS Code webview 中打开 Harness。

前置条件

- VS Code 1.125 或更新版本。
- Node.js 22.19+(仅限 22.x)或 24+,且 node 与 npx 位于同一安装目录。
- 一个受信任的本地、SSH、WSL、Dev Container 或 Codespaces 工作区。
- 你有权限使用的模型的 API key(在 Harness 页面内配置;本插件不读取也不存储它)。

Harness 可以读写文件、运行命令:受限模式下插件不会启动或连接服务;从空窗口选择目录时,它会再次请求确认。

安装

在扩展视图(Ctrl/Cmd+Shift+X)中搜索 DeepSeek Harness Launcher,或访问 Visual Studio Marketplace 或 Open VSX。你也可以从 GitHub Releases 下载 .vsix,用 Extensions: Install from VSIX… 安装。

快速开始

1. 打开并信任一个项目文件夹,然后点击状态栏里的 DSH,或运行 DeepSeek Harness Launcher: Open。
2. 首次运行会通过 npm 拉取 DSH。状态栏显示 DSH Working…;点击它可以取消或查看输出。
3. 页面打开后,在 Harness 的 Settings → Models 下添加你的 API key,然后在 Choose workspace 中确认目录并启动会话。

workingDirectory 是 DSH 的启动目录和默认工作区上下文,会影响 AGENTS.md、CLAUDE.md、cwd .env 等文件。

命令

| 命令 | 说明 |
| DeepSeek Harness Launcher: Open | 需要时启动,或打开正在运行的 UI |
| DeepSeek Harness Launcher: Start Server | 启动服务器,不打开页面 |
| DeepSeek Harness Launcher: Open in Browser / DeepSeek Harness Launcher: Open in VS Code | 需要时先启动,再在选定的位置打开 |
| DeepSeek Harness Launcher: Stop Server | 停止托管的服务器;如果清理失败,再运行一次 |
| DeepSeek Harness Launcher: Restart Server | 应用新设置;workingDirectory 未变时复用已选目录 |
| DeepSeek Harness Launcher: Cancel Current Operation | 取消进行中的环境检查、启动、重启或连接 |
| DeepSeek Harness Launcher: Connect to Running Server… | 连接当前环境中已有的 DSH |
| DeepSeek Harness Launcher: Disconnect External Server | 停止跟踪外部 DSH,但不结束它的进程 |
| DeepSeek Harness Launcher: Copy Access URL | 复制客户端可用的完整地址 |
| DeepSeek Harness Launcher: Show Output / DeepSeek Harness Launcher: Open Settings | 打开输出面板或扩展设置 |

设置

| 设置项 | 说明 | 默认值 |
| vscode-dsh.startupBehavior | manual 按需启动;start 打开 VS Code 时静默启动;startAndOpen 启动并打开 | manual |
| vscode-dsh.openLocation | 主命令使用系统 browser 还是 VS Code 的 editor | browser |
| vscode-dsh.port | 自动挑选空闲端口。固定端口被占用时,扩展不会挂到其他实例上 | 0 |
| vscode-dsh.startupTimeout | 等待 DSH 就绪的最长秒数 | 120 |
| vscode-dsh.workingDirectory | 启动目录和默认工作区上下文;支持绝对路径、相对路径、~ 和 ${workspaceFolder}。相对路径要求已打开工作区文件夹 | "" |
| vscode-dsh.webArgs | 额外的 DSH Web 参数(不能包含 --host、--port 或 --patch) | [] |
| vscode-dsh.environment | 进程环境变量;可以覆盖 PATH,不能覆盖 DSH_HOME | {} |

用法

DeepSeek Harness Launcher: Open 是主命令:服务器没运行时启动它,已在运行时直接打开。

状态栏

状态栏会显示:盾牌 + DSH(不受信任)、DSH(未运行)、DSH Working…(点击可取消或查看输出)、DSH Stopping…(点击查看输出)、DSH: port(由当前窗口托管)、链接图标 + DSH: port(外部服务器)、DSH: port*(设置已更改;点击重启并应用),或错误图标 + DSH(悬停查看详情,点击执行恢复操作)。

托管服务器与外部服务器

- 扩展会启动一个托管服务器。它的数据存放在扩展的全局存储里,因此模型凭据、设置和会话在各个项目之间共享。单写入者租约保证配置档安全;另一个 VS Code 窗口会自动连接到正在运行的共享实例,而不是启动一个竞争进程。「Stop Server」会等待会话清理完毕,然后强制结束它,并确认端口已释放。
- 在这个环境里,外部服务器只能通过 HTTP 回环地址显式连接(例如 http://127.0.0.1:3080)。它只支持打开、复制、刷新和断开连接;扩展从不停止它,它保留自己的数据目录。
- 同一个本地或远程 VS Code 环境中的所有项目共用一个 DSH 应用配置档,并复用其正在运行的实例。本地、SSH、WSL 和容器环境各自保留独立的全局存储,因为它们运行在不同的机器/文件系统上。

远程、WSL 和容器

Node/npx、workingDirectory、相对路径、环境变量和连接地址都在工作区所在的环境中解析。系统浏览器通过 openExternal 打开,它会解析 localhost 转发;内置页面和「Copy Access URL」使用 asExternalUri。使用自动端口时,VS Code 返回的确切非回环 authority 会被加入 DSH Host 允许列表;如果无法确定转发的 authority,扩展会安全失败。

DSH 只监听 127.0.0.1,但转发的可见性由 VS Code、Codespaces 或 Dev Tunnels 控制。把转发的端口保持为 Private,不要分享转发的 URL。

安全与隐私

- 只在你完全信任的项目中使用 Harness。workingDirectory 以及任何添加的目录都可能被智能体读取、写入和执行。工作区信任不是文件系统沙箱。
- 扩展始终传入 --host 127.0.0.1,拒绝让用户覆盖监听地址,也不支持会改写这条边界的补丁。
- 上游 Web 服务没有适合公网的身份验证或 TLS。首次启动会从 npm 下载固定版本的顶层 DSH;传递依赖仍可能变化。
- API 密钥、模型配置和会话由 DSH 写入扩展的全局应用配置档,并在同一环境中的各个项目之间共享。本扩展不读取 API 密钥,也不包含任何遥测。

故障排查

| 问题 | 检查什么 |
| 找不到 Node.js / npx,或版本不受支持 | 在扩展的运行时环境中运行 node --version;Remote 使用远程 Node。集成终端可能由 nvm 初始化,而 Extension Host 的 PATH 没有同步;在 vscode-dsh.environment 中提供绝对 PATH。 |
| 首次启动很慢 | npx 会下载 DSH 及其依赖。点击状态栏中的「Show Output」,或调大 startupTimeout。 |
| 固定端口已被占用 | 改回 port: 0。如果占用该端口的是你自己启动的 DSH 实例,请用「Connect to Running Server…」。 |
| 页面能打开,但会话不工作 | 在 Settings → Models 下配置模型,然后在 Choose workspace 下添加并选择一个目录;参见官方 Web UI 指南。 |
| 内置页面空白或功能受限 | 改用 Open in Browser,并检查输出面板和 Remote port forwarding 的 Private 设置。 |
| 服务器意外退出 | 把鼠标悬停在错误状态上查看原因,然后选择恢复操作。托管进程必须先确认清理完成,才允许重启。 |

开发

使用 Node.js 24,以及 package.json 中声明的 pnpm 版本。

pnpm install --frozen-lockfile
pnpm compile
pnpm verify
pnpm ext:package

compile 生成开发包;verify 运行可用的静态检查和单元测试;build 先验证再生成生产包。ext:package 通过与 CI 相同的验证关卡构建 VSIX。开发过程中使用 watch。

模块边界与生命周期规则见架构,验证与发布约定见贡献指南。

反馈

- 报告 bug 或提功能需求:GitHub Issues
- Harness 使用问题:DeepSeek Harness Discussions

许可证

MIT

由 Quincy Zhang 维护。
预览分享卡片长什么样 ↓joygqz/vscode-dsh
分享 · DeepSeek Harness Hub
joygqz/vscode-dsh

一键访问 —— 从状态栏或命令面板启动并打开 Harness。

这是你的仓库?认领条目

回到顶部