DSH 的多机多 Agent 编排与控制平台:发现各设备上的 Agent 与工作区,按机器、仓库、能力和负载将任务路由到本地或远程 Agent Runtime,统一回传进度、审批与结果,并在断线后恢复持久任务。
安装
# npm 包(预构建)
dsh plugin --profile web add dsh-alpha
# GitHub 源码(首次需按提示配置 allowBuilds 构建授权后重试)
dsh plugin --profile web add github:songofhawk/dsh-alpha
装任何插件都等于在你的机器上跑第三方代码,权限和你本人一样大——能读你的文件、用你的凭据、访问网络,工具审批管不到它。GitHub 来源的插件还会在安装时执行构建脚本——pnpm 默认拦截,所以安装可能停在 ERR_PNPM_GIT_DEP_PREPARE_NOT_ALLOWED 或 ERR_PNPM_IGNORED_BUILDS;dsh 会打印出需要添加的确切键名,把它加进该 profile 的 pnpm-workspace.yaml 的 allowBuilds 下,重跑一次即可装上。放行构建本身就是一次信任判断:请只安装可信来源,并尽量锁定 commit(github:owner/repo#sha)。
README
在一段 DSH 对话里,把编码任务派发到不同机器、不同 Agent runtime 的统一主控层。

演示使用隔离环境;机器名、工作区和路径信息均已打码。
项目主页中的方形宣传片使用开源 HyperFrames 框架在本地渲染。
为什么需要 dsh-alpha
单个编码 Agent 已经很有用,但真实工程很快会分散到笔记本、构建机、GPU 主机,以及路径各不相同的代码仓库。dsh-alpha 补上了中间缺失的控制面:
- 看清哪些机器、哪些 Agent 当前在线;
- 把不同机器上的同一个 Git 仓库识别为一个逻辑工作区;
- 按任务选择机器、runtime、模型、推理强度和权限模式;
- 把进度、审批、取消和结果持续回传到同一段对话;
- Worker 临时断线后重连,并恢复持久化的任务历史。
dsh-alpha 是 DSH(DeepSeek Harness) 插件。它负责编排已有的 provider CLI,不替代它们各自的安装、登录和安全控制。
一张图理解
DSH Web / headless 主控
├─ 全局工作区目录
├─ Agent 能力与负载目录
├─ 任务 / 审批 / 恢复状态
└─ 反向 WebSocket gateway
├─ Worker A → Codex / Claude Code
├─ Worker B → Kimi Code / ZCode
└─ Worker C → OpenCode / Qoder / WorkBuddy
Worker 主动连接主控,因此不需要公网 IP。仓库身份与机器本地路径彼此分离,实际执行始终受每台 Worker 显式配置的 allowed roots 约束。
核心能力
| 能力 | 带来的变化 |
|---|---|
| 全局工作区目录 | 同一个仓库可以跨多台机器、多个本地路径聚合展示。 |
| 仓库感知调度 | 优先选择已经持有仓库的 Worker;确需 clone 时也只能落在 allowed root。 |
| 逐轮 Worker 控制 | 不离开当前对话,即可选择 Agent、模型、推理强度和权限模式。 |
| 事件驱动结果 | 只派发一次,按事件等待;中断后用同一个持久化 task ID 继续。 |
| 审批回传 | Worker 的审批请求回到当前 Alpha 会话,不再隐形挂起。 |
| 反向 gateway | Worker 以带认证的 WebSocket 主动连接主控,断线后自动重连。 |
| 运维工具 | Web 侧栏、headless runner、状态 CLI、Worker doctor 和多设备验收清单。 |
快速开始
环境要求
- Node.js 22.13 或更高版本(任务事件使用内置 SQLite)
- DSH
0.1.0-rc.8或更高版本 - pnpm(
dsh plugin会调用) - 实际执行任务的机器上,已经安装并登录所需 provider CLI
dsh --version
pnpm --version
DSH Web
dsh plugin --profile web add dsh-alpha
node ~/.dsh/profiles/web/node_modules/dsh-alpha/scripts/install-preset.mjs
dsh web
在 Web 侧栏打开 Alpha 主控,选择工作区或保留自动调度,然后创建会话。
Headless 主控
dsh plugin --profile alpha add dsh-alpha
node ~/.dsh/profiles/alpha/node_modules/dsh-alpha/scripts/install-alpha-profile.mjs
dsh --profile alpha "用 list_agents 查看可用 Agent,派发一个简短任务,并汇报结果。"
安装脚本只更新 dsh-alpha 托管区块,不会覆盖区块之外的本地配置。
可选:Jev 自动路由
主控进程配置 TYPESAFE_API_KEY 并设置 DSH_ALPHA_JEV_ROUTING=1 后,未在界面指定 Agent 的新请求会先由 Jev 一次判断工作区、Agent 和模型。界面已指定 Agent 时仍直接派发。Jev 只从在线目录候选中选择;工作区范围、模型能力、目录边界和审批仍由现有任务引擎检查。Jev 不确定、超时或服务不可用时,交回原有主控 LLM。
密钥只放在主控进程环境中,不写入仓库。可通过 DSH_ALPHA_JEV_ENDPOINT 指向使用 HTTPS 且实现 TypeSafe v1/systemone 完整 Choice 响应的兼容服务,响应须包含 choice、confidence 和 probabilities。当前置信门槛是保守的试用值,上线前应以本项目真实请求评估正确率、回退率和延迟。
从源码测试可用 node --env-file=.env 加载本地配置;仅把 .env 放在目录中不会改变已运行主控进程的环境。
从源码开发
git clone https://github.com/songofhawk/dsh-alpha.git
cd dsh-alpha
npm install
npm run setup
npm test
接入远程 Worker
在主控端为每台 Worker 配置独立 token:
export DSH_ALPHA_GATEWAY_HOST=0.0.0.0
export DSH_ALPHA_GATEWAY_PORT=4310
export DSH_ALPHA_GATEWAY_TOKENS='build-1:replace-with-a-long-random-token'
在目标机器上安装并启动 Worker:
npm install dsh-alpha
export DSH_ALPHA_HUB_URL='ws://<master>:4310/'
export DSH_ALPHA_WORKER_MACHINE_ID='build-1'
export DSH_ALPHA_WORKER_TOKEN='replace-with-a-long-random-token'
export DSH_ALPHA_WORKER_ALLOWED_ROOTS='/work'
./node_modules/.bin/dsh-alpha-worker-doctor
./node_modules/.bin/dsh-alpha-worker
离开可信局域网或 VPN 后,请使用 wss:// 并在网络层限制来源。不要把 token 放进仓库、URL、截图或进程日志。
支持的 runtime
默认逐个探测以下 runtime,已安装且可执行的 Agent 自动出现在目录。DSH_ALPHA_WORKER_PROVIDERS 仅用于需要限制候选时的显式覆盖。
| Provider ID | Runtime | 发现方式 |
|---|---|---|
codex |
Codex app server / CLI | 自动探测 |
claude-code |
Claude Code headless | 自动探测 |
kimi-code |
Kimi ACP | 自动探测 |
dsh |
DSH headless profile | 自动探测 |
zcode |
智谱 ZCode headless | 自动探测 |
opencode |
OpenCode ACP | 自动探测 |
qoder |
Qoder headless | 自动探测 |
workbuddy |
腾讯 WorkBuddy(通过 codebuddy) | 自动探测 |
自动探测只确认可执行文件存在;每个 runtime 仍需独立完成登录,并用真实任务验收。mock 只用于测试和本地诊断。
dsh 在 Worker 的目标目录执行 dsh --profile headless,使用该机器 headless profile 的默认模型。此入口只返回最终文本;暂不支持逐轮模型参数或把 DSH 内部审批转发到主控。
Codex Worker 会按目标机的实际执行目录查找 Codex 项目;没有匹配项目时,以目录名创建,并把目标机的 projectId 传给新会话。续接旧会话时也会补齐项目归属。同一目录的并发创建使用幂等键,主控的项目 ID 不会跨机器复用。目标机 Codex 需要支持 project/list、project/create、thread/start.projectId 和 thread/metadata/update.projectId;关联失败会报错并停止该轮执行。GUI 要显示这些项目和会话,需要访问同一目标机、同一用户的 Codex 存储。
日常派发流程
list_workspaces解析逻辑仓库及其机器位置。list_agents提供在线状态、能力、负载和工作区亲和度。dispatch_task返回持久化taskId;wait_task通过事件流等待,不做忙轮询。agent_approve或agent_cancel在当前 Alpha 会话处理 Worker 审批。task_status与task_result用于断线恢复或历史任务回读。
Web 工作区选择器可以形成明确的机器/项目硬约束。未手工选择时,调度器可以自动选择匹配 Worker,并把 Git 工作区 clone 到该 Worker 的 allowed root。
默认安全边界
- Gateway 缺少认证 token 时拒绝启动。
- 本机和远程路径都必须通过显式 allowed roots 校验。
- Clone 目标由 Worker 在允许范围内决定,任务不能提交任意落盘路径。
- Web 主控与 headless 主控不能占用同一个 gateway 端口。
- 健康检查只暴露存活状态和 Worker 数量,不暴露身份与密钥。
- Worker doctor 是只读检查,且不会打印 Worker token。
- 审批、取消、重连和中断恢复都有自动化测试覆盖。
常用命令
dsh-alpha status
dsh-alpha web
dsh-alpha run "总结当前工作区"
dsh-alpha-worker-doctor
dsh-alpha-worker
npm test
文档导航
- 设计与架构
- 部署指南
- 多设备验收清单
- 局域网访问 bundle
- Vendor adapter 说明
- 宣传文章:中文 / English
- Doco 发布版:中文 / English
项目状态
当前公开源码版本:0.2.1。仓库已经覆盖本机编排、反向 gateway Worker、仓库感知调度、递归主控、审批转发、全局工作区选择、任务持久化恢复,以及七种产品 runtime 集成。
升级线上实例后,请重新运行对应的 preset/profile 安装脚本,并按多设备验收清单逐台验证。
链接
同类插件
zhu1090093659/dsh-web#packages/dsh-remote-web-ui★ 8835
手机/PC 远程操控 dsh web 工作区:扫码配对、令牌门控通道、SSE 实时同步,提供移动端与完整桌面 GUI 两种远程形态。
zhu1090093659/dsh-web#packages/dsh-ssh★ 8835
SSH 远程运维面板:Web 终端、SFTP 传输、本地端口转发与一条命令并发集群执行,Agent 与面板共用同一份主机配置。
saya-ch/dsh-mobile★ 479
通过 Android App 或手机浏览器访问 DeepSeek Harness,支持安全局域网连接、远程访问、持久设备配对和可自定义移动界面。
liguobao/ds-harness-remote★ 345
DeepSeek Harness 多端远程访问:从手机、平板、浏览器或另一台电脑继续进行中的会话,端到端加密通道(Noise IK + 自适应 Relay/WebRTC 传输),设备授权管理;远程端仅开放 ApiProxy 能力,支持 dsh-file-viewer 只读文件预览,不提供 Shell、远程桌面或写入权限。
ZSeven-W/dsh-ios★ 326
在对话里直接操作 iOS 模拟器或 USB 连接的 iPhone:22 个 Agent 工具用于启动、构建、按无障碍标识或 OCR 文本驱动 UI、列表行操作与 SwiftUI 预览热重载,并附带可点击拖拽的流式侧边栏面板。
wenbin-wb/dsh-bridge★ 199
DeepSeek Harness 远程与移动端接入插件:提供局域网扫码直连、Cloudflare 与自建公网隧道,以及微信、QQ、飞书、Telegram 机器人交互,内置安全认证与访问控制。
社区评论
评论公开保存在 GitHub Discussions。加载评论会连接 GitHub 和 Giscus;发表内容需要 GitHub 账号。