远程运行时管理 ArtificialNotImbecile/dsh-remote-runtime
DeepSeek Harness通过 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🔵 扫描:含敏感能力尚无人工评估展开查看扫描说明与证据 ↓
安全扫描自动 · 静态分析源码
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。
预览分享卡片长什么样 ↓
分享 · DeepSeek Harness Hub
ArtificialNotImbecile/dsh-remote-runtime
通过 SSH 托管隔离运行时并管理远端会话
相关插件 · 开发 / 工程
隐私简历生成器reactive-resume/reactive-resume
Reactive Resume 已迁至 GitHub 上的…
★ 45,288已汉化MCP
71.7
长时任务执行闭环AMAP-ML/LongHorizon-Harness
面向 Computer-Use Agent 的 Loop Engineering
★ 1,764已汉化DSH
70.5
多代理编排运行时Enderfga/claw-orchestrator
面向编程智能体的运行时。把 Claude Code、Codex、Antigravity、Grok…
★ 586已汉化MCP
69.4
记忆进化插件csyangwen/dsh-memory-evolve
dsh-memory-evolve 使用场景指南
★ 461已汉化DSH
67.9
原生编程智能体paean-ai/deeptide
由 DeepSeek 打造,为 DeepSeek 而生。
★ 1,107已汉化DSH
67.7
多引擎接力台emo-xiaoyu/harness-mix
macOS/Linux 已加入源码构建与启动适配;目标系统的完整桌面验收仍需在对应机器执行。安装方式、Linux…
★ 419已汉化DSH
66.8
这是你的仓库?认领条目