dsh-web
zhu1090093659/dsh-webDeepSeek Harness(DSH)Web 插件聚合生态包 · 一切皆插件,创意工坊分发(dsh-market.com)
把多个 DSH 会话并排摆到一屏。谁在等你,一眼就看见。

同一屏里三种状态并存:一个是空对话,一个是正在跑(转圈 + 工具调用),一个卡在等待审批(审批卡就在那一格里,顶栏同步计数)。
截图由真实 DSH 宿主驱动,工作区与会话均为虚构演示数据。
并行推进三四个需求时,你一次只能看一个会话。切走的那几格如果卡在等待审批、等待计划确认、或者有一个问题要你回答,它们就安静地空等 —— 你不知道,机器也停在那儿。
调音台把这件事摊平:多个会话横着摆开,每个一格,等待你的那一格会亮。
Cmd/Ctrl + Alt + 1..9 跳第 N 个通道,] / [ 上下切换,S solo。走 DSH 自己的快捷键服务,可以在设置里改键。需要 DSH 0.2.1 或更新的 Web 端(dsh web;本版在 0.2.1-rc.2 上验证通过)。
# 一行装好(Web profile)
dsh plugin --profile web add github:dtdths/dsh-mixer#v1.5.2
dsh不在 PATH 里(从源码 checkout 跑)就用pnpm dsh plugin --profile web add …,见下面折叠。
然后重启 DSH,并在浏览器里硬刷新一次(Cmd/Ctrl + Shift + R —— 插件改动必须走冷启动,热重载会骗人):
dsh web # 或你平时启动 DSH 的方式
看到会话头部多出一个 调音台 按钮,就装好了;也可以在输入框里敲 /mixer 进入。
从 DSH 源码 checkout 运行(仓库根目录):
pnpm dsh plugin --profile web add github:dtdths/dsh-mixer#v1.5.2
装在 Desktop 版(先完整退出 Desktop,否则 profile 被占用):
dsh plugin --profile desktop add github:dtdths/dsh-mixer#v1.5.2
改代码 / 开发调试(link: 本地目录,改完刷新即生效):
dsh plugin --profile web add /绝对路径/dsh-mixer
完全离线(打包成 tgz 传过去):
npm pack --cache /tmp/npm-cache # 产出 dsh-mixer-1.5.2.tgz
dsh plugin --profile web add /绝对路径/dsh-mixer-1.5.2.tgz
不想敲命令:如果你的 DSH 里有 plugin_manager 工具,直接在会话里说一句「安装插件 github:dtdths/dsh-mixer#v1.5.2」即可。
装过早期原型
dsh-mixer-spike的话请先卸掉 —— 它和正式版会抢同一个视图入口。
1. 加通道 —— 顶栏的 会话 浮层里勾选会话,勾上即入、取消即出。浮层左列每个工作区行 hover 会出 +会话,点它就在那个工作区新建一个会话,并直接成为第 0 个通道。
2. 等你的通道会亮 —— 某个通道的会话在等你处理时,头部左侧出现琥珀竖条,顶栏同步累加计数;点顶栏的汇总条可以把移出的通道全部放回。
通道里的审批卡:拒绝 / 允许一次就在这一格完成,不用切走。
3. solo 一下 —— 通道头部的 solo、顶栏的 solo:… 退出、或 Cmd/Ctrl + Alt + S,三处进出。其余通道压成窄条,状态点仍然准确。

4. 排布 —— 拖通道头部换位置;拖格与格之间的分界线调宽(单格最小 380px,超宽就横向滚动);× 把通道移出屏幕,顶栏可再放回。
5. 回常规视图 —— 顶栏「常规视图」,或点左侧栏的会话行。侧栏恢复原状,原来那格的滚动位置与草稿都还在。
| 动作 | 默认键位 |
|---|---|
| 跳到第 1–9 个通道 | Cmd/Ctrl + Alt + 1..9 |
| 下一个 / 上一个通道 | Cmd/Ctrl + Alt + ] / [ |
| solo 光标所在通道 | Cmd/Ctrl + Alt + S |
全部注册在 DSH 的快捷键设置里,可以改成你自己的。跳过去时光标落在该格草稿的末尾,接着写就行。
mainView、不碰模型配置。sidebarRight: no session surface is mounted」,重试也没用。退出调音台回到常规视图后就正常(v1.5.2 修掉了退出的落点,见 docs/spec.md §7.4);视图内这一下要等宿主修。npm run check # 语法 + 97 个用例 + 冷启动守卫
DSH_REPO=/另一个/DSH/checkout npm run check # 换宿主重验:契约漂移会指到具体断言
npm run check 里的冷启动守卫不是可选项:本插件踩过「服务边写错 → 整页启动失败、而热重载看起来一切正常」的坑,所以任何 apply() / inject 改动都要走这条。
客户端全部逻辑在单文件 client.js(React.createElement,非 JSX);判断逻辑抽成纯函数并经 __test 暴露给 tests/。换宿主时最该读的是 tests/host-contract.test.mjs —— 它把插件依赖的每一条宿主契约都钉成了会失败的断言。
| 想知道什么 | 看哪里 |
|---|---|
| 需求、决策、验收判据、实现红线、内部缝 | docs/spec.md(§11 是实现状态与缝表) |
| 三条不改的架构决策 | docs/adr/ |
| 插件开发踩过的坑(服务边、冷启动、拖拽、键位校验) | docs/plugin-gotchas.md |
| 术语 | CONTEXT.md、docs/naming.md |
| README 里的截图怎么来的(宿主版本、复现步骤、演示数据说明) | docs/assets/PROVENANCE.md |
| 待办增强 | issue #12 |
报 bug、提需求都走 GitHub issues(带一张截图最好)。
dsh-mixer/
├── package.json # bundle 清单 + dsh.client.external / inject
├── cordis.patch.yml # 插入行 id=dsh-mixer
├── index.js # Host half(保持为空)
├── client.js # Client half:全部 UI 与状态,单文件
├── boot-check.mjs # 冷启动守卫(真实 Cordis Context + 对照项)
├── tests/ # 纯函数缝 / 真 React 静态渲染 / jsdom 交互 / 宿主契约
├── locale/{en,zh}.json # meta.title / meta.description
├── icon.svg # 三路推子,其中一路亮灯
├── docs/ # spec / ADR / 踩坑 / 命名 / 调研
│ └── assets/ # README 截图 + 出处记录
└── LICENSE
dsh-mixer is a mixer-style multi-session view for DeepSeek Harness: several independent conversations side by side, each with its own history and composer, with the channels blocked on an approval or a question lit up — so nothing waits for you silently.
dsh plugin --profile web add github:dtdths/dsh-mixer#v1.5.2
Restart DSH, hard-refresh the page, then press the Mixer button in the session header (or type /mixer). Requires DSH 0.2.1+ web. Screenshots use fabricated demo data.
MIT,见 LICENSE。