前言¶
在 DSH(DeepSeek Harness)里做多轮开发时,常见的一个场景是:AI 一轮抛出三五个需要你拍板的决策点,它们散落在正文里,逐条回复很容易漏答、或答错题号;等你把答案发回去,AI 又常常对不上”q1 到底问的是什么”。正文标记块的方案也不理想——DSH 聊天渲染器会把 HTML 注释原样转义显示,聊天流里会出现一大坨 JSON。
本文介绍的 long-yin-zi/dsh-task-decision 就是针对这个问题的 DSH 桌面端插件:AI 每轮结束时自动把「本轮摘要 + 待决问题」登记进右侧边栏的一个 tab,你在面板里一次选完、给每题写备注,点一下提交,答案带着问题标题自动发回当前会话。
这是什么¶
一句话定位:一个 DSH 客户端插件,把多轮会话中的”人-in-the-loop 拍板”环节从正文搬到右侧边栏,并保证回传内容结构化。
- 维护者:Long-Yin-Zi(GitHub 组织)
- 分类:客户端插件
- 许可证:MIT
- 版本:0.8.6(截至本文写作时 README 所列最新版本)
- 目标宿主:在 DSH 0.2.1-rc.2(nightly)桌面端验证
解决的核心痛点有三个:决策点散落正文容易漏答;回传内容不带题号和选项 id,AI 无法对题;多轮之间”上一轮没拍板、新一轮已到达”的状态容易丢。
核心功能¶
下面按 README 中列出的能力逐条介绍。
右侧独立面板。 本轮摘要与全部待决问题集中在一个 tab(「本轮工作 & 待拍板」),聊天流里只出现一行卡片:📋 本轮有待拍板项,见右侧面板。
单选 / 多选。 按问题类型渲染,勾选框区分样式:圆形为单选,方形为多选。
每题一个常驻备注框。 选项都不满意时,可以不选任何选项,只在备注框里写自己的想法,照样能提交。
提交前校验。 既没选选项、也没写备注的题会被标红拦住,避免漏答。
回传带问题标题。 提交后发回会话的内容形如 q1(问题标题): 选 b「…」;整题备注:…,AI 拿到即可对上题号与选项 id。若用户否掉全部选项,格式为 未选项;整题备注:…。
提交后自动收起侧边栏。 把注意力还给 AI 的回复。
提交后只读回放。 已提交的轮次把「选了哪几项、每题备注、整体补充」原样列出,关掉面板再打开也能核对,不必翻聊天记录。
每题可加附件。 在题卡里 Ctrl+V 粘贴,或点「添加附件」选择。图片内联发出,其他文件走 DSH 自带的上传服务;提交时按题分组,哪道题的附件就跟在哪道题的文字后面。
可以取消整轮。 底栏「提交拍板」占 2/3、「取消本轮」占 1/3,点两次确认后整批问题划掉,面板变「已取消」、右侧栏自动收起;AI 下一轮登记新问题时自动恢复。
末尾固定附加「继续深挖还是直接开干」。 每轮尾部追加一道必答单选题:选「先继续讨论」则回传要求 AI 先讲清思路、细节、影响面、逻辑闭环再动手;选「不用讨论」则直接执行。空轮(0 题)不渲染这道题,也不能提交空拍板。
整题备注支持语音输入。 备注框下方点「语音输入」,说完点停止,自动转写并追加到备注;需相机/麦克风权限,且宿主已启用语音插件。
防重复提交与失败重试。 同步锁加「本轮已提交」双闸,连点或关掉再开都不会重复发送;发送失败保留已填内容,一键重试。
中英双语。 文案走 locale 表(locale/zh.json、locale/en.json),跟随 DSH 界面语言。
安装与启用¶
前置:已安装 DeepSeek Harness (dsh)。本插件没有发布到 npm,只能从 GitHub 源码安装。
# profile 名换成你自己的(桌面端一般是 desktop)
dsh plugin --profile desktop add github:Long-Yin-Zi/dsh-task-decision
安装完成后需要重启 DSH,因为宿主半部(index.js)在启动时加载工具与提示词;客户端改动刷新页面即可生效。
两个容易误解的点,README 里专门做过说明:
package.json中的dsh.client.platform = "web"是 DSH 客户端加载器的硬性校验(只接受字符串"web"),桌面端同样满足;它不代表插件”只支持网页端”。- 插件仅在桌面端 DSH 验证过。浏览器里单独部署的
dsh web没有测试,是否可用未知。
启用后无需额外配置。每轮结束时 AI 会调用 gate_ask 工具登记摘要与问题,客户端侧自动弹出面板。
典型用法¶
- 正常对话,每轮结束时 AI 调用
gate_ask登记摘要与问题。 - 聊天流出现一行卡片,右侧自动打开「本轮工作 & 待拍板」。
- 逐题选择;选项都不合适时,直接在该题备注框里写想法,可不选。
- 需要截图或文档时,在这道题的备注框里 Ctrl+V 粘贴,或点「添加附件」选择。
- 点「提交拍板」,回传自动发回当前会话,面板自动收起。
- 面板被关掉后,点会话页头右侧的「拍板」按钮可重新打开;已提交的轮次不会重复提交。
- 这一轮不用处理了:点「提交拍板」右边的「取消本轮」,再点「确认取消」,整轮划掉,右侧栏收起。
- 最后一题固定是「继续深挖,还是直接开干」:选第一项,AI 先讲思路、影响面、风险等你确认;选第二项则直接按上面的选择执行。
回传格式示例(README 原样):
【拍板回传】
q1(学生全流程收尾做哪些): 选 b「…」、c「…」;整题备注:优先做风险低的
q2(推进节奏): 选 a「做完一项再汇报」
(整体补充:……)
它是怎么工作的,README 给出的链路如下:
模型每轮结束前调用工具 gate_ask({ summary, questions })
↓
聊天流里只显示一行卡片,右侧自动打开 tab
↓
页头探针从 tool-result 的 argsRaw 解析出 gate,写入模块 store
↓
用户选选项 / 写备注 → 点「提交拍板」
↓
ctx.sessions.scope(sessionId).conversation.send("【拍板回传】…")
↓
面板自动收起,AI 继续干活
实现上分宿主半部与浏览器半部:index.js 注册 gate_ask 工具并注入系统提示词规则,client.js 负责解析、页头探针、右侧 tab、面板 UI 和提交回传。早期 v0.1 用正文标记块,因渲染转义问题改为工具调用,残留的标记块解析路径仍保留作兼容。
适用场景与注意¶
适合谁:在 DSH 桌面端做多轮、带审批环节开发的人。这类会话里每轮决策点较多、需要逐项确认和留备注,用正文来回贴容易乱,面板化的收益比较直接。
注意事项:
- 安装前先读源码与许可证(MIT),确认
index.js注入的系统提示词规则和gate_ask工具的参数结构符合你的预期。插件以当前 dsh 进程权限运行。 - 插件自己不发起网络请求、不主动读写文件;只有你粘贴或选中的文件才由 DSH 自带的
fileUpload服务保存,回传走 DSH 自己的发送通道发回当前会话。 - 平台支持 Windows / macOS / Linux(纯 JS,无原生依赖,
react由宿主提供)。 - 已知边界:拖拽附件不可用(DSH 在
document冒泡阶段接管了拖拽事件),只能用 Ctrl+V 粘贴或「添加附件」;收起侧边栏依赖内部接口sidebarRight.actionsFor(...).setExpanded(...),DSH 升级若改名会退化为”不自动收起”,不影响提交。
结尾¶
dsh-task-decision 的价值在于把”拍板”这个环节从正文里拆出来,用结构化回传降低漏答和错题的概率。它对现有工作流的侵入很小:装完重启,之后每轮只需在右侧面板里点选。
- 目录页:https://www.skillhub.cn/plugins/Long-Yin-Zi/dsh-task-decision
- GitHub:https://github.com/Long-Yin-Zi/dsh-task-decision