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

远程节点 telunsu1999/dsh-design

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

把重型任务委托给另一台电脑执行并同步交付物

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

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

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

状态速览

判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态
信任档位:仅索引
是什么[目录]—
dsh 原生插件 · other
暂无时间戳·判据 →
装得上吗[实装验证]—
本站尚未做安装检查
暂无时间戳·判据 →
安全吗[自动扫描]—
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
数据截至 2026/11/04·判据 →
还在维护吗[仓库]✓
活跃:最近一次提交在 12 天前
暂无时间戳·判据 →
图例:✓ 通过! 需注意— 未判定 / 无数据· 「未判定」= 本站尚无数据,不代表插件有问题
档位由哪些信号合成

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

验证判据与等级说明 →

可信度证据

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

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

读写/删除本地文件写入剪贴板(不计风险)发起外部网络请求
查看扫描证据(共 32 处,展示前 32 条)
  • 发起网络请求
    plugins/remotenode/client.js:665
    return fetch(API + path, Object.assign({}, options, { headers: headers, cache: 'no-store' }))
  • 写入剪贴板
    plugins/remotenode/client.js:2210
    navigator.clipboard.writeText(token).then(function () { finish(true) }, function () { finish(false) })
  • 读取本地文件
    plugins/remotenode/index.js:99
    if (existsSync(configFile)) {
  • 读取本地文件
    plugins/remotenode/index.js:100
    const parsed = JSON.parse(readFileSync(configFile, 'utf8'))
  • 写入本地文件
    plugins/remotenode/index.js:632
    mkdirSync(config.workspace, { recursive: true })
  • 写入本地文件
    plugins/remotenode/index.js:633
    mkdirSync(config.dataDir, { recursive: true })
  • 读取本地文件
    plugins/remotenode/lib/deliverable-hub.js:67
    const stream = createReadStream(path)
  • 读取本地文件
    plugins/remotenode/lib/deliverable-hub.js:82
    const stream = createReadStream(path)
  • 发起网络请求
    plugins/remotenode/lib/deliverable-hub.js:297
    const result = await link.request('deliverable.sync', {
  • 读取本地文件
    plugins/remotenode/lib/deliverable-hub.js:349
    const stat = statSync(path)
  • 读取本地文件
    plugins/remotenode/lib/deliverable-hub.js:390
    if (!existsSync(absolute)) throw new Error(`file not found: ${path}`)
  • 读取本地文件
    plugins/remotenode/lib/deliverable-hub.js:391
    const stat = statSync(absolute)
  • 读取本地文件
    plugins/remotenode/lib/deliverable-hub.js:431
    const stat = statSync(source.path)
  • 发起网络请求
    plugins/remotenode/lib/deliverable-hub.js:567
    const result = await link.request('artifact.fetch', { artifactId, linkId: record.linkId }, { timeoutMs: 20000 })
  • 发起网络请求
    plugins/remotenode/lib/peer-manager.js:560
    return link.request(method, params, options)
  • 发起网络请求
    plugins/remotenode/lib/peer-manager.js:1379
    link.request('peer.ping', {}, { timeoutMs: Math.min(this.#requestTimeoutMs, 5000) })
  • 发起网络请求
    plugins/remotenode/lib/session-bridge.js:354
    const result = await link.request('session.attach', {
  • 发起网络请求
    plugins/remotenode/lib/session-bridge.js:483
    result = await link.request('session.create', {
  • 发起网络请求
    plugins/remotenode/lib/session-bridge.js:521
    await link.request('session.prompt', {
  • 发起网络请求
    plugins/remotenode/lib/session-bridge.js:540
    await link.request('session.cancel', { linkSessionId: record.linkSessionId }, { timeoutMs: 20000 })
  • 写入本地文件
    plugins/remotenode/lib/store.js:60
    mkdirSync(dir, { recursive: true })
  • 写入本地文件
    plugins/remotenode/lib/store.js:69
    renameSync(tmp, target)
  • 删除本地文件
    plugins/remotenode/lib/store.js:74
    try { unlinkSync(tmp) } catch { }
  • 写入本地文件
    plugins/remotenode/lib/store.js:97
    mkdirSync(root, { recursive: true })
  • 写入本地文件
    plugins/remotenode/lib/store.js:98
    for (const subdir of SUBDIRS) mkdirSync(join(root, subdir), { recursive: true })
  • 读取本地文件
    plugins/remotenode/lib/store.js:154
    text = readFileSync(file, 'utf8')
  • 写入本地文件
    plugins/remotenode/lib/store.js:203
    mkdirSync(dirname(file), { recursive: true })
  • 写入本地文件
    plugins/remotenode/lib/store.js:204
    appendFileSync(file, line, 'utf8')
  • 读取本地文件
    plugins/remotenode/lib/store.js:220
    text = readFileSync(file, 'utf8')
  • 读取本地文件
    plugins/remotenode/lib/store.js:284
    return existsSync(resolvePath(rel))
  • 读取本地文件
    plugins/remotenode/lib/store.js:304
    return readFileSync(file)
  • 读取本地文件
    plugins/remotenode/lib/store.js:325
    const stat = statSync(file)
扫描于 2026/11/4(1 天前) · 范围 全包扫描 · 来源 GitHub 仓库

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

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

README

由 DeepSeek 最新模型翻译生成
DSH 分布式 Worker:大脑节点 + 高性能台式机 📦 代码仓库(公开):<https://github.com/telunsu1999/dsh-design> —— 含 Remote Node 插件、设计文档与验收记录。 目标:本机(Linux 服务器)继续充当 大脑——模型调用、Web UI、会话与编排都在这里;把家里性能更强的 Windows 台式机 作为 worker 节点,由大脑按任务委托生图(ComfyUI)、Blender 建模/渲染等重型任务。 ✅ 插件模式实现(2026-10-23,v2 对等模型):Remote Node 远程节点插件已按设计 docs/06 / docs/07 实现为可安装 DSH bundle(Host + Client 半端,不改 DSH 源码、不写补丁脚本),并通过双 DSH 实例真实端到端验证:双向建远程会话、事件回传、断线续传、双向交付物同步、Web「远程节点」面板、模型工具 remotenode。用法见 plugins/remotenode/README.md,实现与验收记录见 docs/08。 下方 ACP + SSH 方案是更早的「一次性委托」实现(已可用但非插件模式),作为非 DSH agent / 无插件场景的备选保留。
展开完整文档(README 剩余 1 节)
DSH 分布式 Worker:大脑节点 + 高性能台式机

📦 代码仓库(公开):<https://github.com/telunsu1999/dsh-design> —— 含 Remote Node 插件、设计文档与验收记录。

目标:本机(Linux 服务器)继续充当 大脑——模型调用、Web UI、会话与编排都在这里;把家里性能更强的 Windows 台式机 作为 worker 节点,由大脑按任务委托生图(ComfyUI)、Blender 建模/渲染等重型任务。

✅ 插件模式实现(2026-10-23,v2 对等模型):Remote Node 远程节点插件已按设计 docs/06 / docs/07 实现为可安装 DSH bundle(Host + Client 半端,不改 DSH 源码、不写补丁脚本),并通过双 DSH 实例真实端到端验证:双向建远程会话、事件回传、断线续传、双向交付物同步、Web「远程节点」面板、模型工具 remotenode。用法见 plugins/remotenode/README.md,实现与验收记录见 docs/08。

下方 ACP + SSH 方案是更早的「一次性委托」实现(已可用但非插件模式),作为非 DSH agent / 无插件场景的备选保留。

插件模式(当前推荐)

1) 安装 bundle 到当前 web profile
本机:plugin_manager(action: install_bundle, target: /root/AiWork/DSH_Design/plugins/remotenode)
其他机器(从 GitHub):
dsh plugin --profile web add "github:telunsu1999/dsh-design#path:/plugins/remotenode"
然后在插件管理里启用 @dsh-design/remotenode(或把 "@dsh-design/remotenode" 加进 ~/.dsh/profiles/web/package.json 的 dsh.profile.bundles,重启 dsh web)
2) 配 $DSH_HOME/remotenode/config.json(nodeId / listen / peers / secret)
3) 第二节点:bash plugins/remotenode/scripts/setup-node-profile.sh 然后 bash plugins/remotenode/scripts/run-node.sh
4) 自检:bash plugins/remotenode/scripts/e2e.sh all
5) 打开 Web GUI → 侧栏「远程节点」

- 节点管理:面板内「配对令牌 + 添加节点 + 对端审批 + 删除」,无需手写配置(v0.2.0)
- 监听端口可改:面板「监听」卡片直接改绑定地址/端口(应对防火墙只放行特定端口,v0.3.0)
- 设计:docs/06(总体)· docs/07(协议 v1)
- 实现:plugins/remotenode/(含 SPEC.md 接口契约、scripts、tests)
- 验收:docs/08-remotenode-plugin.zh.md

直接回答:DSH 有没有分布式方案?

有原语,没有开箱即用的“多节点集群/调度器”。 DSH 0.2.1-rc.2 里有三块相关能力:

| 原语 | 能力 | 对本需求的结论 |
| SSH 远程执行世界(packages/ssh/*) | 把文件/进程/终端/沙箱/LSP 整个搬到远程 Linux/macOS 主机,模型与会话留在本机 | ❌ 不支持 Windows 远端;整进程一个执行世界,无法“本地日常 + 偶尔 GPU”按任务路由;Web 工作区 API 仍假设宿主文件系统,会坏 |
| ACP 远程子代理(packages/acp + packages/subagent/subagent-acp) | 每次委托在子进程里启动一个完整的 ACP agent,通过 stdio JSON-RPC 交互 | ✅ 选定路线:把 command 包装成 SSH + 远端 dsh --profile acp,即可让台式机跑一个独立 DSH 子代理 |
| MCP 扩展(packages/mcp/mcp-client) | 给大脑挂远程工具(stdio / Streamable HTTP),工具结果可回传图片附件 | ⭕ 可选补充:想“大脑直接调 ComfyUI 单工具”时再上;本方案先用完整子代理 |
| Agent Teams / Workflow | 同进程多 agent 协作 / 编排 | ❌ 不能跨机器(teammate 强制本地、共享同一文件系统) |

所以:“大脑 + 台式机子节点,按任务委托”可以实现,但不是官方成品,而是一套组合方案。 本项目提供经过本机回环验证的完整实现:ACP 协议桥 + 配置 + worker 脚本 + 部署文档。

架构

┌─────────────────── 大脑节点(本机 Linux,现有 dsh web)───────────────────┐ │ Web UI / 模型调用 / Session 持久化 / 工具编排 │ │ └─ 模型调用 subagent_worker(新增工具) │ │ └─ @deepseek-ai/dsh-subagent-acp(ACP 客户端 backend) │ │ └─ acp-ssh-bridge.mjs ── 改写 session cwd + 透明转发协议 │ └───────────────────────────────┬────────────────────────────────────────────┘ │ SSH stdio(ACP v1 / ndJSON) ┌───────────────────────────────┴────────────────────────────────────────────┐ │ 台式机 worker 节点(Windows,独立 DSH 进程,每次任务一个) │ │ dsh --profile acp │ │ ├─ pwsh / 文件工具 / skill / jobs │ │ ├─ ComfyUI HTTP API(127.0.0.1:8188)→ PNG │ │ └─ blender --background → GLB / 渲染图 │ │ 工作目录 C:\dsh-worker\workspace,产物写 out\ │ └────────────────────────────────────────────────────────────────────────────┘ 产物回传:大脑 scp 拉回本地 workspace → read_image / present

一次委托的数据流:

1. 大脑模型调用 subagent_worker,prompt 是自包含任务(worker 看不到当前会话)。
2. subagent-acp 启动桥进程 → 桥通过 ssh -T 启动台式机 run-acp.cmd。
3. worker 的 DSH 以 ACP server 模式启动,session/new 的 cwd 被桥改写成 C:/dsh-worker/workspace。
4. worker 模型自主执行多步任务:跑 ComfyUI 脚本、Blender、读写文件。
5. worker 把结果写成最终文本(含 artifacts JSON 路径清单)返回;ACP 只回文本,不回二进制。
6. 大脑用 fetch-artifact.sh 把文件 scp 回本地,再 present / read_image 给用户看。

已验证 / 未验证

已在本机回环(大脑与“worker”同一台 Linux,worker 用独立 DSH_HOME 的 dsh --profile acp 模拟)验证:

- ✅ subagent-acp provider + subagent_worker 工具挂载、ACP 握手、任务下发与结果回收;
- ✅ 桥对 session/new 的 cwd 改写(worker 里 pwd 输出 .../workspace,而不是大脑目录);
- ✅ 工具审批经 ACP permission: allow 自动放行,worker 能在无人值守下完成 bash 任务;
- ✅ 生产 web profile 安装 + HMR 热加载(subagent_worker 已出现在运行中的 Web 会话,remote-worker skill 自动发现)。

尚未在真实环境验证(需要你的台式机):

- ⏳ Windows 上 dsh --profile acp 的安装/运行细节;
- ⏳ SSH 到 Windows OpenSSH 的链路、scp 路径语义;
- ⏳ ComfyUI 实际 workflow 与 Blender 渲染;
- ⏳ 长任务(>5 分钟)与异常恢复。

验证证据与复现步骤见 docs/05-verification.zh.md。

快速开始

台式机(Windows,管理员 PowerShell) powershell

1) 安装 Node 22.19+ 与 dsh CLI

winget install OpenJS.NodeJS.LTS
npm install -g @deepseek-ai/dsh@0.2.1-rc.2

2) 把本项目 worker\ 目录准备好后执行(会创建 C:\dsh-worker、写入 ACP profile)

cd <本项目>\scripts
.\setup-worker-windows.ps1 -ApiKey 'sk-...' -EnableSsh

3) 把大脑节点的公钥追加到 C:\Users\<用户>\.ssh\authorized_keys

并保证 22 端口可从大脑访问(推荐 Tailscale)

大脑节点(本机) bash

1) 安装 provider/tool 补丁 + skill(幂等,会自动备份 patch)

DSH_HOME=/root/.dsh PROFILE=web \
DSH_CLI='node /root/.openclaw/workspace/deepseek-harness/apps/cli/lib/bin.js' \
./scripts/install-brain-worker.sh

2) 配置 ~/.ssh/config 别名 dsh-desktop 后自检

./scripts/check-worker.sh

3) 新开一个会话(当前会话的工具列表已固定),然后说:

“用 subagent_worker 让台式机生成一张 1024x1024 的图,然后把结果拉回来展示”

文件索引

| 路径 | 作用 |
| docs/01-architecture.zh.md | 方案对比、为何选 ACP、桥与 cwd 设计、网络/安全/成本 |
| docs/02-worker-windows.zh.md | 台式机 Windows 部署步骤(含 ComfyUI/Blender/SSH/Tailscale) |
| docs/03-brain-setup.zh.md | 大脑节点接入、验证、使用与回滚 |
| docs/04-operations.zh.md | 排障手册、限制清单、安全边界 |
| docs/05-verification.zh.md | 回环验证记录与复现方法 |
| docs/06-remotenode-design.zh.md | 新:Remote Node(对等远程节点)模式设计:对等 peer 协议、双向来源标记、remotenode 页签、双向交付物同步、实施路线与待拍板决策 |
| docs/07-remotenode-m0-protocol.zh.md | M0 细化:协议 v1 帧/方法/错误码、交付物同步对账算法、存储格式、状态机、测试向量、M1 WBS 与验收 |
| plugins/remotenode/README.md | 插件模式实现:Remote Node bundle(Host+Client)、安装/配置/使用/限制 |
| plugins/remotenode/SPEC.md | 插件实现接口契约(lib API、HTTP API、协议方法、数据格式) |
| docs/08-remotenode-plugin.zh.md | 插件模式实现说明与双实例端到端验收记录 |
| config/brain-worker.patch.yml | (旧 ACP 方案)大脑 profile 补丁片段(provider + 工具) |
| config/worker-acp.patch.yml | worker ACP profile 补丁(模型/MCP 可选) |
| config/remote-worker.SKILL.md | 大脑侧 skill:教模型何时/如何委托、如何拉产物 |
| scripts/acp-ssh-bridge.mjs | ACP-over-SSH 桥(cwd 改写 + 双向转发,无依赖) |
| scripts/install-brain-worker.sh | 大脑一键安装(幂等) |
| scripts/check-worker.sh | 大脑↔worker 六项自检 |
| scripts/fetch-artifact.sh | 从 worker 拉取产物(scp + base64 回退) |
| scripts/setup-worker-windows.ps1 | 台式机一键准备(目录/客户端/首启/profile/OpenSSH) |
| worker/run-acp.cmd | 台式机 SSH 启动入口 |
| worker/AGENTS.md | worker 行为约定(产物 JSON、无追问、安全) |
| worker/tools/comfy.py | ComfyUI 提交/轮询/下载(仅标准库) |
| worker/tools/blender_job.py | Blender 无界面任务包装器 |
| worker/tools/example_scene.py | 示例 bpy 脚本(渲染 + GLB 导出) |

成本与安全(摘要)

- 成本:worker 是完整 DSH,用自己的 DeepSeek key、独立上下文;每次委托 ≈ 两份模型计费。适合「重任务」,不适合把琐碎步骤都推过去。
- 安全:大脑上的 SSH 私钥等价于台式机 worker 账户的远程执行权;建议专用低权 Windows 账户、只在内网/Tailscale 暴露 SSH、不要 0.0.0.0 暴露 22 端口、worker 产物目录独立。
- 权限:大脑侧 ACP permission: allow 会自动批准 worker 的工具审批请求(无人值守所需);若想更严格,可改 reject 并预先在 worker 允许必要工具,但会显著降低可用性。
- 限制:一次委托一个独立进程、无追问/续聊、只回最终文本(二进制另走 scp)、SSH 断线不重连、ComfyUI 单实例串行。

更完整清单见 docs/04-operations.zh.md。
预览分享卡片长什么样 ↓telunsu1999/dsh-design
分享 · DeepSeek Harness Hub
telunsu1999/dsh-design

把重型任务委托给另一台电脑执行并同步交付物

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