← 返回列表
需源码安装
在 DeepSeek Harness GUI 内部与其他编码 CLI 对话——并保持会话线程。
暂不能直接安装(需源码编译或环境不满足):仓库 package.json 标记 private,未发布到 npm,需从源码安装。 · 最近上游提交 2026/9/24 · 已提供中文文档
DeepSeek Harness 插件:从 GUI 与编码 CLI(Claude Code、Cursor 等)对话,并保持对话线程。
综合分
32.9
GitHub 分
32.9
用户评分
—
★ Stars
4
周下载量
—
安装插件(需先安装 dsh CLI 引擎:npm install -g @deepseek-ai/dsh)
dsh plugin --profile web add FreePeak/dsh-mux仓库 package.json 标记 private,未发布到 npm,需从源码安装,改用 GitHub 源安装
信任档位:已验证本站已于 2 天前真实安装成功(L4 · 真实安装)
- 是什么
- dsh 原生插件 · ui
- 装得上吗
- 本站已真实安装成功(L4 · 真实安装,非静态推断)
- 安全吗
- 本站尚未对该插件做风险分级(暂未覆盖,不等同于无风险)
- 还在维护吗
- 活跃:最近一次提交在 1 天前
档位由下列信号合成:本站实装验证(真实安装,当前最高到 L4)· 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。下方各区块是它的证据明细。 验证判据与等级说明 →
🟢实装验证通过· 2026/9/23
由本站实装验证器在真实 dsh 环境安装成功,非静态推断。
数据截至 2026/9/24(元数据每日更新 · 实装验证按队列轮转,单条结论的验证时间见上方)
安装兼容性检查需源码安装
以下结论由程序自动检查 npm 包、engines 声明与入口文件得出,未做人工实机验证——能装不等于用着没问题。
✗npm 包@freepeak/dsh-mux(未发布到 npm,仅可源码安装)
✓Node 引擎要求 >=22 · 基线 Node 22.19 满足
✓dsh CLI 依赖未声明 dsh 版本约束
✓入口文件main/exports/bin 已声明
仓库 package.json 标记 private,未发布到 npm,需从源码安装
验证方式:npm registry 存在性 + package.json 静态校验 · 最后验证 2026/9/23 19:03:12
依赖的 DSH / Cordis 模块
@deepseek-ai/schemastery@deepseek-ai/cordis@deepseek-ai/dsh-tools@deepseek-ai/dsh-typert-protocol用户评分
还没有人投票,来当第一个
订阅周报,不错过优质插件更新
每周一封 · 高评分插件 + 新用户活动
README
由 DeepSeek 最新模型翻译生成在 DeepSeek Harness GUI 内部与其他编码 CLI 对话——并保持会话线程。
安装 ·
CLI ·
架构 ·
Docker ·
开发 ·
许可证
它是什么
dsh-mux 是一个 DeepSeek Harness 外部 bundle:包含一个侧边栏页面、斜杠命令、一个宿主工具,以及一个远程服务,让你能够从 DSH Web GUI 与其他编码 CLI 对话——Claude Code、OMP、Pi、Cursor、Agy、Command Code、opencode——并且每个对话都作为一个线程保持存活。
无需切换终端,打开 Mux,选择一个 CLI,输入后续消息,同一个 CLI 会话便会从上次中断的地方继续(通过 CLI 自身的 session id 恢复)。实时流式输出,停止进行中的回合,或使用 mux 工具将会话 id 交给模型。
这不是一个独立服务器,不是 HarnessRouter 部署,也不是实时双向 PTY。它每个回合运行一个 CLI 进程,通过 session id 恢复。
目录
- 安装
- 首次运行
- 在 Docker 中运行
- 验证(容器)
- 支持的 CLI
- 架构
- 工作原理
- 配置
- 开发
- 品牌资产
- 安全
- 贡献
- 更新日志
- 许可证
安装
from a clone or release checkout
dsh plugin install /path/to/dsh-mux
安装到当前活动的 web profile(该 profile 上的补丁重载是实时的,因此
对 bundle 的后续编辑会被拾取,无需完全重启)。
将目标 CLI 二进制文件(claude、omp、pi、cursor、agy、
command-code)放到你的 PATH 上。opencode 会被跟踪,但在其二进制文件
出现之前会报告为缺失。
要求
| | |
| --- | --- |
| Node.js | ≥ 22(构建 + 测试) |
| 宿主 | DeepSeek Harness web 配置文件(dsh web) |
| 可选 | Playwright(容器驱动脚本) |
首次运行
1. 启动 GUI(dsh web 会打印 http://127.0.0.1:3081/?token=...)。
2. 点击侧边栏中的 Mux —— 发现条会显示已安装哪些 CLI。
3. 输入一条消息并点击 Send。CLI 以非交互方式运行(accept 模式),并将其回复流式传输到面板和 DSH 记录中。
4. 输入一条后续消息 —— 它会恢复同一个 CLI 会话 id,而不是重新开始。
从 composer 中:
/mux # open the Mux panel
/mux claude say hi # start a thread; result goes to the transcript
/ask omp explain this # same thing, shorter name
在 Docker 中运行
一个自包含容器会启动带有 dsh-mux 的 DSH,其中包括一个
fixture claude CLI(docker/fixtures/claude),它无需模型凭据即可验证完整的
spawn → stdin → session-id → resume 流水线:
docker compose -f docker/docker-compose.yml up --build -d
docker compose -f docker/docker-compose.yml logs -f # dsh web: line has the token
打开 http://127.0.0.1:3101/?token=...(仅限宿主回环 —— harness
拒绝通配符绑定,因此容器内中继会转发到其私有的
127.0.0.1:3099)。
| | |
| --- | --- |
| 重新播种配置文件 | FORCE_REINIT=1 docker compose -f docker/docker-compose.yml up -d |
| 完全重置 | docker compose -f docker/docker-compose.yml down -v |
验证(容器)
scripts/drive.py 通过 harness wire API
(workspace → session → commands.execute → panel)端到端地遍历容器,
并捕获:
| 截图 | 证明 |
| --- | --- |
| 01 · boot / sidebar | 容器启动;客户端 bundle 加载;Mux 条目渲染 |
| 02 · commands | /mux + /ask claude 执行;fixture 返回 mux · claude · exit 0 |
| 03 · discovery | 通过 remote.mux.discover() 显示面板 + 发现条 |
| 04 · thread turns | 存储的 thread 显示 prompt / answer 轮次 |
完整记录(包括 resume 证明 —— 在同一 thread 上的第二次发送会将
cliSessionId 传递给 --resume,fixture 会将其回显):
docs/screenshots/drive.log。
python3 scripts/drive.py "http://127.0.0.1:3101/?token=..." # needs Playwright
python3 scripts/shot.py "http://127.0.0.1:3101/?token=..." # onboarding walkthrough
支持的 CLI
每个适配器都将提示词放在 stdin 上,绝不放在 argv 中,并以非交互式接受模式运行,因此一轮对话永远不会因为无人可见的提示而阻塞。
| CLI | 首轮 | 恢复轮 | 状态 |
| --- | --- | --- | --- |
| Claude Code | -p --output-format stream-json | --resume -p | 已启用 |
| OMP | -p --mode json | --resume -p | 已检测到,已禁用 |
| Pi | -p --mode json | --resume -p | 已检测到,已禁用 |
| Cursor | agent -p --output-format stream-json | agent --resume -p | 已检测到,已禁用 |
| Agy | -p --output-format stream-json | --conversation -p | 已检测到,已禁用 |
| Command Code | -p --output-format json --skip-onboarding | --resume -p | 已检测到,已禁用 |
| opencode | _(缺少二进制文件)_ | _(不适用)_ | 缺失,已禁用 |
在此构建中,只有 Claude Code 启用了发送/选择功能
(ENABLED_ADAPTER_IDS):它是第一个拥有经过验证的答案解析器的适配器——
Claude 的 stream-json NDJSON 会被归约为最终结果文本,然后再存储为
线程答案。其他适配器仍会出现在发现列表中(已安装/缺失),但在每个适配器
获得相同处理之前都处于禁用状态。
架构
You ──► DSH Web GUI
│
┌──────┴──────────┐
▼ ▼
Mux page DSH agent
(thread list, (/mux, /ask,
composer, tool mux)
Send / Stop)
│ │
└────────┬─────────┘
▼
dsh-mux host ──► Thread store (cliSessionId)
│
▼
Coding CLIs (one process per turn)
交互式图表:
- 架构
- 单轮工作流
- 恢复序列
设计决策
- 每轮一个 CLI 进程。 恢复由 CLI 自身的会话 id 驱动——
在全部七个目标之间保持一致,无需长期存活的 RPC 管道。
- 故障关闭。 超时、空 stdout 或未知 ID 都会产生明确的错误。
Stop 会终止正在运行的进程(SIGTERM → SIGKILL)。
- 线程以 JSON 形式持久化,位于配置文件数据目录下。删除仅移除
mux 记录——CLI 自身的会话文件不受影响。
- 模型可以驱动它。 工具 mux 接受 { tool, prompt, threadId },
因此智能体可以在更大的任务中启动或继续一个线程。
- 主机远程 + 浏览器挂载。 页面挂载一个手工编写的 typert
贡献(ctx.remote.$mount),并通过 ctx.get('remote.mux') 读取。
工作原理
1. runTurn 使用打印参数 + 权限模式标志启动所选的 CLI。
2. 提示词写入 stdin;stdin 关闭;stdout/stderr 流式输出。
3. 从 CLI 输出中解析出会话 id,并存储在线程上。
4. 下一轮通过 CLI 的恢复标志传入该 id。
5. 每个结果都带有一个头部:mux · claude · 4.2s · exit 0。
默认上限:每轮 10 分钟,合并输出 1 MiB。
配置
宿主配置(schemastery)——所有字段均为 .default(...)(没有 .optional()):
| 键 | 默认值 | 含义 |
| --- | --- | --- |
| 轮次超时 | 600000 毫秒 | 每次启动的挂钟时间 |
| 输出上限 | 1048576 字节 | stdout + stderr 合并 |
| (空字符串字段) | '' | 保留 / 路径覆盖 |
实时 schema 见 src/plugin.ts。
开发
npm install
npm test # 28 个测试,离线运行
npm run build # tsdown → lib/.mjs
| 脚本 | 用途 |
| --- | --- |
| test | node --experimental-strip-types --test test/.test.ts |
| build | 将 src/index.ts + src/remote.ts 打包进 lib/ |
CI
每次推送到 main 以及向 main 发起的拉取请求都会运行 .github/workflows/ci.yml:
npm ci → 单元测试 → 构建 → 产物门禁。在仓库为
私有期间,任务运行在标记为 dsh-mux 的自托管 macOS runner 上
(~/actions-runners/dsh-mux,launchd 服务),以免消耗组织有限的
托管 Actions 分钟数。如果仓库转为公开,请在开放之前
将 runs-on 改回 ubuntu-latest——fork PR 代码绝不能
在维护者机器上执行。
项目结构
dsh-mux/
├── assets/ # logo、mark、favicon、social card
├── package.json # dsh.bundle + dsh.client,exports(./、./remote、./client)
├── cordis.patch.yml # 行:dsh-mux + dsh-mux-remote
├── client.js # 浏览器:侧边栏 + 面板 + 远程贡献
├── docker/ # Dockerfile、compose、entrypoint、fixture claude
├── scripts/drive.py # 容器验证 + 截图
├── src/
│ ├── adapters.ts # 七个 CLI 规格
│ ├── discovery.ts # PATH 剥离
│ ├── run.ts # spawn / stream / cap / kill
│ ├── threads.ts # JSON 线程存储
│ ├── commands.ts # /mux + /ask 解析器
│ ├── plugin.ts # 宿主工具 + 命令(无默认导出)
│ ├── remote.ts # 宿主远程(手动应用的 @Remote 标记)
│ └── index.ts # cordis 入口(仅具名导出)
├── test/ # 28 个测试 + 产物门禁
└── docs/ # PRD、图表、截图、UI 草图
来之不易的约束(也见 CONTRIBUTING.md):
- 函数插件不得 export default(否则注入会被剥离)。
- 发布的 JS 中不得有原始 @Remote——手动应用标记。
- schemastery:用 .default(),而非 .optional()。
- 浏览器:用 ctx.get('remote.mux'),而非 ctx.remote.mux。
品牌资产
| 资产 | |
| --- | --- |
| mark | mark.svg · favicon.svg |
| | logo.svg · logo-dark.svg |
| | mark-light.svg · mark-mono.svg |
| | social-card.svg(1280×640) |
两条入站笔画在 mux 节点汇合,并以一条出站主干离开,带有
绿色连续性圆点——多个 CLI 输入,一个恢复的线程输出。详情:
assets/README.md。
安全
生成本地 CLI 是有意为之且受约束的:提示通过 stdin(绝不通过
argv),回合故障关闭,实时/输出上限。有关支持的版本行以及如何私下报告
漏洞,请参阅
SECURITY.md。
贡献
欢迎贡献。在进行重大更改之前,请先开一个 issue。阅读
CONTRIBUTING.md 和
行为准则。
PR 检查清单(简版):
- [ ] npm test 通过(28)
- [ ] 如果主机/远程源发生更改,运行 npm run build
- [ ] 没有无正当理由的新运行时依赖
- [ ] 行为变更时更新 CHANGELOG.md
变更日志
请参阅 CHANGELOG.md。
许可证
MIT © FreePeak
为 DeepSeek Harness 生态系统构建。与 Anthropic、OpenAI、
Cursor 或任何受支持的 CLI 均无关联。