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

远程运行时管理 ArtificialNotImbecile/dsh-remote-runtime

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

通过 SSH 托管隔离运行时并管理远端会话

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

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

安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add ArtificialNotImbecile/dsh-remote-runtime
该包不可直接 npm 安装,改从 GitHub 源安装(明细见下方安装检查)

状态速览

判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态
信任档位:仅索引
是什么
dsh 原生插件 · dev
装得上吗
本站尚未做安装检查
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
更新放缓:最近一次提交在 75 天前
档位由哪些信号合成

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

验证判据与等级说明 →
社区实装还没有人打卡 · 装过的第一个就是你
安全扫描自动 · 静态分析源码
v2.7.0
🔵 扫描:含敏感能力尚无人工评估
展开查看扫描说明与证据 ↓

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

读写/删除本地文件发起外部网络请求
查看扫描证据(共 44 处,展示前 42 条)
  • 读取本地文件
    src/artifact.ts:107
    const info = await stat(this.manifestPath)
  • 读取本地文件
    src/artifact.ts:111
    source = await readFile(this.manifestPath, 'utf8')
  • 写入本地文件
    src/artifact.ts:169
    await mkdir(objectRoot, { recursive: true, mode: 0o700 })
  • 删除本地文件
    src/artifact.ts:173
    await rm(localPath, { force: true })
  • 写入本地文件
    src/artifact.ts:244
    await rename(temporary, destination)
  • 删除本地文件
    src/artifact.ts:251
    await rm(temporary, { force: true }).catch(() => undefined)
  • 发起网络请求
    src/artifact.ts:257
    environmentProxyDispatcher ??= new EnvHttpProxyAgent()
  • 发起网络请求
    src/artifact.ts:258
    return await undiciFetch(input as Parameters<typeof undiciFetch>[0], {
  • 读取本地文件
    src/artifact.ts:330
    info = await stat(path)
  • 读取本地文件
    src/artifact.ts:345
    const stream = createReadStream(path)
  • 读取本地文件
    src/artifact.ts:374
    const compressed = createReadStream(path)
  • 写入本地文件
    src/audit.ts:44
    await mkdir(path.dirname(this.filePath), { recursive: true, mode: 0o700 })
  • 读取本地文件
    src/audit.ts:45
    const info = await stat(this.filePath).catch(() => null)
  • 删除本地文件
    src/audit.ts:48
    await rm(rotated, { force: true }).catch(() => undefined)
  • 写入本地文件
    src/audit.ts:49
    await rename(this.filePath, rotated)
  • 写入本地文件
    src/audit.ts:51
    await appendFile(this.filePath, `${JSON.stringify(safe)}\n`, { encoding: 'utf8', mode: 0o600 })
  • 读取本地文件
    src/file-lock.ts:36
    const claimed = await stat(tombstonePath).catch(() => null)
  • 写入本地文件
    src/file-lock.ts:38
    await rename(tombstonePath, path.join(lockPath, ownerName))
  • 写入本地文件
    src/file-lock.ts:51
    await rename(path.join(lockPath, ownerName), tombstonePath)
  • 删除本地文件
    src/file-lock.ts:66
    await rm(tombstonePath, { force: true })
  • 删除本地文件
    src/file-lock.ts:75
    await rmdir(lockPath)
  • 写入本地文件
    src/file-lock.ts:102
    await mkdir(path.dirname(lockPath), { recursive: true, mode: 0o700 })
  • 写入本地文件
    src/file-lock.ts:105
    await mkdir(candidatePath, { mode: 0o700 })
  • 写入本地文件
    src/file-lock.ts:106
    await writeFile(
  • 写入本地文件
    src/file-lock.ts:116
    await rename(candidatePath, lockPath)
  • 删除本地文件递归
    src/file-lock.ts:160
    if (!acquired) await rm(candidatePath, { recursive: true, force: true }).catch(() => undefined)
  • 读取本地文件
    src/file-lock.ts:167
    entries = await readdir(lockPath, { withFileTypes: true })
  • 读取本地文件
    src/file-lock.ts:178
    const info = await stat(path.join(lockPath, owner.name)).catch(() => null)
  • 读取本地文件
    src/file-lock.ts:188
    const info = await stat(target).catch(() => null)
  • 删除本地文件
    src/file-lock.ts:189
    if (info && info.mtimeMs <= staleBefore) await rm(target, { force: true }).catch(() => undefined)
  • 删除本地文件
    src/file-lock.ts:191
    await rmdir(lockPath).catch((error) => {
  • 发起网络请求
    src/gateway.ts:274
    const forwarded = transport.request({
  • 读取本地文件
    src/profiles.ts:272
    raw = await readFile(this.filePath, 'utf8')
  • 写入本地文件
    src/profiles.ts:294
    await mkdir(path.dirname(this.filePath), { recursive: true, mode: 0o700 })
  • 写入本地文件
    src/profiles.ts:297
    await writeFile(temporary, `${JSON.stringify(document, null, 2)}\n`, { encoding: 'utf8', mode: 0o600 })
  • 写入本地文件
    src/profiles.ts:298
    await rename(temporary, this.filePath)
  • 删除本地文件
    src/profiles.ts:300
    await rm(temporary, { force: true }).catch(() => undefined)
  • 写入本地文件
    src/service.ts:116
    await mkdir(resolve(this.config.root), { recursive: true, mode: 0o700 })
  • 删除本地文件
    src/service.ts:156
    rm(audit.filePath, { force: true }),
  • 删除本地文件
    src/service.ts:157
    rm(`${audit.filePath}.1`, { force: true }),
  • 读取本地文件
    src/ssh.ts:288
    const info = await stat(localPath).catch((error) => {
  • 读取本地文件
    src/ssh.ts:313
    const source = createReadStream(localPath)
扫描于 2026/11/3(1 天前) · 范围 全包扫描(包内未声明入口) · 来源 GitHub 仓库

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

依赖的 DSH / Cordis 模块
@deepseek-ai/schemastery@deepseek-ai/cordis@deepseek-ai/dsh-api-remotes@deepseek-ai/dsh-client-locale@deepseek-ai/dsh-client-runtime@deepseek-ai/dsh-client-test-runtime@deepseek-ai/dsh-client-ui-settings@deepseek-ai/dsh-client-ui-slots@deepseek-ai/dsh-typert-generator@deepseek-ai/dsh-typert-protocol
给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个

功能亮点

  • SSH托管隔离运行时
  • 管理远端会话
  • 原生Web控制界面

通过 OpenSSH 管理隔离的 DeepSeek Harness 运行时,自带原生 Web 控制界面。

README

由 DeepSeek 最新模型翻译生成
DSH Remote Runtime 在 Linux 主机上运行一套隔离的官方 DeepSeek Harness,并通过 OpenSSH 管理。 这是面向 DSH 0.1.0-rc.8 Web UI 的独立社区插件,提供远端配置、Doctor、已校验运行时安装、隧道、工作区、凭据和 Session 历史;不修改 Harness 源码。 SSH、文件、进程与秘密全部留在插件 Host 侧。浏览器只接收有界 JSON 摘要,永远不会读回已保存凭据。 真实演示 素材来自真实 OpenSSH 托管运行时,并使用了真实 DeepSeek API 凭据。Key 在录制前由 Host 导入,从未进入浏览器、截图、GIF、日志或仓库。
展开完整文档(README 剩余 1 节)
DSH Remote Runtime

在 Linux 主机上运行一套隔离的官方 DeepSeek Harness,并通过 OpenSSH 管理。 这是面向 DSH 0.1.0-rc.8 Web UI 的独立社区插件,提供远端配置、Doctor、已校验运行时安装、隧道、工作区、凭据和 Session 历史;不修改 Harness 源码。

SSH、文件、进程与秘密全部留在插件 Host 侧。浏览器只接收有界 JSON 摘要,永远不会读回已保存凭据。

真实演示

素材来自真实 OpenSSH 托管运行时,并使用了真实 DeepSeek API 凭据。Key 在录制前由 Host 导入,从未进入浏览器、截图、GIF、日志或仓库。

更多截图

已连接配置与运行时只读 Doctor 检查

只写凭据状态已保存及 Harness workspace

官方 Session 历史与提示界面经 loopback 隧道打开完整 DSH UI

Host 与隔离 workspace Remote-direct 或 client-proxy

安装

npx.cmd --yes @deepseek-ai/dsh@0.1.0-rc.8 plugin --profile web add
@artificialnotimbecile/dsh-remote-runtime@latest
npx.cmd --yes @deepseek-ai/dsh@0.1.0-rc.8 web

安装、更新或移除插件后,请重启已经运行的 Web profile。

从本地代码构建

corepack pnpm install --frozen-lockfile --ignore-scripts
corepack pnpm run check
corepack pnpm pack --pack-destination test-results

npx.cmd --yes @deepseek-ai/dsh@0.1.0-rc.8 plugin --profile web add
.\test-results\artificialnotimbecile-dsh-remote-runtime-0.1.2.tgz

使用

打开 Settings → 远程运行时:

1. 添加 OpenSSH host 和可选远端 workspace。
2. 选择创建后不可修改的 remote-direct 或 client-proxy。
3. 运行只读 Doctor,再明确安装已校验运行时。
4. 通过只写表单导入 DeepSeek Key。
5. 启动运行时并打开 loopback 隧道地址。
6. 浏览 workspace、Session 历史,并发送或取消提示。

Disconnect 只断开连接,远端 Harness 继续运行;Stop 是独立操作。删除本地配置也不会删除远端 runtime 或 Session 数据。

主要能力

- 每个 profile UUID 拥有独立远端 DSH_HOME,隔离凭据、Session、workspace 与进程状态。
- 使用系统 OpenSSH,保留 SSH config、IdentityFile、ssh-agent 与 ProxyJump。
- 内容寻址运行时包含 Node 22.19 与官方 DSH rc.8;外层制品和每个解包文件都经过 SHA-256 校验。
- Workspace、Session、history、prompt 与 cancel 全部使用官方 DSH Host API。
- 凭据以 mode 0600 写入,不返回浏览器状态、日志、快照或进程参数。
- 认证 client-proxy 只允许公网 HTTP(S);私网、loopback、link-local、CGNAT、metadata、multicast、文档地址及 IPv6 本地范围全部 fail closed。

兼容与安全

- 本地 DSH:精确版本 0.1.0-rc.8;界面:Web profile。
- 客户端:Windows、macOS 或 Linux;Node ^22.19.0 || >=24;系统 ssh。
- 远端:Linux x64、glibc 2.28+、Bash、tar、gzip、sha256sum 与可写 HOME。
- 所有隧道只监听 loopback;远端 DSH Web API 不会暴露到 0.0.0.0。
- SSH 是访问控制边界。需要隔离同 UID 进程时,请使用独立远端 OS 账号。

DeepSeek Harness 仍处于预发布阶段。只有 peer 版本、Typert 生成、组装 profile CI 和真实验收一起迁移并通过后,才会支持后续 DSH 版本。

开发

corepack pnpm run typecheck
corepack pnpm run test
corepack pnpm run build
corepack pnpm run pack:check

托管运行时需在 Linux 或 WSL 中构建;执行它需要 glibc 2.28+。生成的 archive、profile、截图和 live log 位于忽略的 runtime/artifacts/ 与 test-results/。

许可证

MIT。独立社区插件,与 DeepSeek 无隶属或背书关系。第三方说明见 THIRD_PARTY_NOTICES.md。
预览分享卡片长什么样 ↓ArtificialNotImbecile/dsh-remote-runtime
分享 · DeepSeek Harness Hub
ArtificialNotImbecile/dsh-remote-runtime

通过 SSH 托管隔离运行时并管理远端会话

这是你的仓库?认领条目

回到顶部