dsh-task-decision
Manifest valid把 AI 每轮抛出的待决问题收进右侧边栏,选完写备注一键回传(DSH 桌面端插件)
dsh-task-decision · 本轮工作 & 待拍板
装上它之后:AI 每轮不再在正文里堆一长串"需要你拍板的问题",而是把「本轮总结 + 待决问题」收进右侧边栏的一个 tab —— 你一次选完、每题都能写备注、点一下提交,答案自动带着问题标题发回会话,AI 接着干活。
解决的核心痛点:多轮开发里 AI 经常一次抛出 3~5 个决策点,散落在正文里,容易漏答、答错题号;回传时 AI 又容易忘记"q1 到底问的是什么"。
功能
- 右侧独立面板:本轮摘要 + 全部待决问题集中一处,不再淹没在正文里
- 单选 / 多选:按问题类型渲染,勾选框区分圆形(单选)与方形(多选)
- 每题一个常驻备注框:选项都不满意?不选任何选项、只写一句自己的想法也能提交
- 提交前校验:既没选、也没写备注的题会被标红拦住,不会漏答
- 回传带问题标题:
q1(问题标题): 选 b「…」;整题备注:…,AI 拿到就能对上题 - 提交后自动收起侧边栏:把注意力还给 AI 的回复
- 提交后只读回放:已提交的轮次把「选了哪几项、每题备注、整体补充」原样列出来,核对时不用翻聊天记录
- 每题可加附件:图片/文件可以 Ctrl+V 粘贴、或点「添加附件」选;图片内联发出,其他文件走 DSH 自带的上传服务;提交时按题分组,哪道题的附件就跟在哪道题的文字后面
- 可以取消整轮:底栏「取消本轮」(提交占 2/3、取消占 1/3),点两次确认把这一批问题整个划掉,面板变成「已取消」、右侧栏自动收起;AI 下一轮登记新问题时自动恢复
- 末尾固定附加「继续深挖还是直接开干」:两道选项——选「先继续讨论」AI 会先讲清思路、细节、影响面、逻辑闭环再动手;选「不用讨论」直接执行。不答不能提交
- 整题备注可以语音输入:备注框下方「语音输入」→ 说完点「停止 5s」→ 自动转写并追加到备注(需相机/麦克风权限,且宿主已启用语音插件)
- 防重复提交:同步锁 + "本轮已提交"双闸,连点/关掉再开都不会重复发送
- 失败可重试:发送失败保留已填内容,一键重试
- 中英双语:文案走 locale 表,跟随 DSH 语言
安装
前置:已安装 DeepSeek Harness (dsh)。
⚠️ 适用面:仅桌面端 DSH 验证过。 作者只用桌面端(内嵌 Web UI 的 DSH)开发与测试; 浏览器里单独部署的
dsh web没有验证过,能不能用目前未知。
从 GitHub 源码安装
# profile 名换成你自己的(桌面端一般是 desktop)
dsh plugin --profile desktop add github:Long-Yin-Zi/dsh-task-decision
安装完成后重启 DSH(宿主半部在启动时加载)。
关于
package.json里的dsh.client.platform = "web":这是 DSH 客户端加载器的硬性校验(只接受字符串"web"), 桌面端也同样满足;它 不代表本插件“只支持网页端”,也不代表网页端可用。
本插件没有发布到 npm(DSH 插件中心只收能用包名一行安装的包),所以只能走上面的 GitHub 源码安装。
使用
- 正常对话。每轮结束时 AI 会调用
gate_ask工具登记摘要与问题。 - 聊天流里只出现一行卡片:
📋 本轮有待拍板项,见右侧面板,同时右侧自动打开「本轮工作 & 待拍板」。 - 逐题选择;如果选项都不合适,直接在那一题的备注框里写你的想法(此时可不选)。
- 需要给某道题附截图/文档?在那道题的备注框里 Ctrl+V 粘贴,或点「添加附件」选择。
- 点「提交拍板」→ 回传自动发回当前会话 → 面板自动收起。
- 面板被关掉后,点会话页头右侧的「拍板」按钮可重新打开;已提交的轮次不会再让你重复提交。
- 这一轮的问题不用处理了?点「提交拍板」右边那个「取消本轮」,**再点一下「确认取消」**就会把整轮划掉、右侧栏自动收起(只影响这个面板,不会往会话里发任何东西)。
- 最后一题固定是「继续深挖,还是直接开干」:选第一项 AI 会先把思路、影响面、风险讲清楚等你确认;选第二项则直接按上面的选择执行。
- 不想打字?备注框下方点「语音输入」,说完了再点一下停止(按钮上会显示录音秒数),文字会自动追加到备注里。
截图

右侧边栏里的完整面板:上方是「本轮摘要」,下方是「待拍板问题」逐题卡片。 每题可以选选项、写整题备注、粘贴截图或文件(Ctrl+V / 「添加附件」), 底部「提交拍板」固定在底栏,选好后一提交就把结构化回传发回当前会话。
它是怎么工作的
模型每轮结束前调用工具 gate_ask({ summary, questions })
↓
聊天流里只显示一行卡片:📋 本轮有待拍板项,见右侧面板 [打开面板]
↓
页头探针从 tool-result 的 argsRaw 解析出 gate,写入模块 store
↓
自动打开右侧 tab「本轮工作 & 待拍板」
↓
用户选选项 / 写整题备注 → 点「提交拍板」
↓
ctx.sessions.scope(sessionId).conversation.send("【拍板回传】…")
↓
面板自动收起,AI 继续干活
为什么用工具调用而不是正文标记块
v0.1 用 <!-- dsh-gate:start … --> 标记块,但 DSH 的聊天渲染器会把 HTML 注释原样转义显示,聊天流里会出现一大坨 JSON。改成工具调用后:聊天里是标准工具卡片(只显示一行),参数是结构化 JSON,客户端从 argsRaw 解析,不用从正文抠文本。
回传格式
【拍板回传】
q1(学生全流程收尾做哪些): 选 b「…」、c「…」;整题备注:优先做风险低的
q2(推进节奏): 选 a「做完一项再汇报」
(整体补充:……)
- 保留题号 + 问题标题 + 选项 id:AI 才能既对上"哪道题",也知道"选了什么"
未选项;整题备注:…表示用户否掉了所有选项、按备注执行
文件结构
| 文件 | 作用 |
|---|---|
index.js | 宿主半部:注册 gate_ask 工具 + 注入系统提示词规则 |
client.js | 浏览器半部:解析、页头探针、右侧 tab、面板 UI、提交与回传 |
cordis.patch.yml | 组合补丁:向 DSH 插件表插入本插件一行 |
locale/zh.json、locale/en.json | 界面文案 |
icon.svg | 插件图标 |
design/ui-spec.md | 面板设计与交互规格(设计文档,可选读) |
权限与外部服务
- 不发起任何网络请求:不访问第三方接口、不上传任何数据
- 不主动读写你的文件:面板本身不扫描磁盘、不碰工作区;只有你亲自粘贴/选中的文件才会由 DSH 自带的
fileUpload服务保存 (图片随消息内联后由宿主规范化存入附件库;普通文件存到 harness 主目录,模型按需读取) - 外部交互:把「拍板回传」(文字 + 你选定的附件)发回当前会话,走 DSH 自己的发送通道;插件自己不发起网络请求
- 唯一注册的宿主能力:一个工具(
gate_ask)与一段系统提示词规则
兼容性
| 项 | 说明 |
|---|---|
| DSH 目标版本 | 在 0.2.1-rc.2(nightly)桌面端验证 |
| 客户端载体 | 仅桌面端验证;浏览器单独部署的 dsh web 未测试,是否可用未知 |
dsh.client.platform | 必须是 "web":DSH 客户端加载器的硬性校验,桌面端同样满足(不代表网页端可用) |
| 平台 | Windows / macOS / Linux(纯 JS,无原生依赖) |
| 依赖 | 无第三方运行时依赖(react 由 DSH 宿主提供) |
⚠️ 作者只在桌面端使用和测试;网页端(浏览器里单独跑的
dsh web)未知。在网页端遇到问题,不代表桌面端有问题。
版本
| 版本 | 内容 |
|---|---|
| 0.8.6 | 修「有拍板却不弹」:自动打开不再依赖 running 从 true→false(探针可能在本轮跑完后才挂载,armed 永不置位);改成按 gate key 持久化「已弹过」,新的一轮照常弹,切会话/刷新不重复弹 |
| 0.8.5 | 修「切换会话 / 刷新页面后拍板反复弹出」:① localStorage 记住已提交/已取消的轮次 key;② 只有「刚跑完这一轮」才自动展开面板,切会话、刷新不弹;③ 聊天里的历史工具卡只写 store、不自动打开 |
| 0.8.4 | ① 修「切到新一轮」提示常年常驻:0 题的旧轮不算未完成、不排队,直接覆盖;② 转写中图标改为方形外框 + 内部小环自转,与 DSH 停止按钮形态一致,动画更平滑 |
| 0.8.3 | 未提交的拍板不再被新一轮覆盖:旧题留在面板,顶部出现「上一轮拍板还没提交,新一轮已到达」+「切到新一轮」;提交或取消旧轮后自动切到排队的新一轮 |
| 0.8.2 | 没有拍板项(0 题)时面板只显示「本轮无待拍板」信息:不再渲染「继续深挖」题和底部提交/取消栏,也不能提交空拍板 |
| 0.8.1 | 麦克风按钮从单独一行移到「添加附件」同一行,并且排在添加附件前面;旧的 .wg-voice-row 容器删除,秒数/转写中/错误提示都在行内显示 |
| 0.8.0 | 语音停止后立即反馈:点停止→按钮变旋转圈并显示「转写中…」(按钮禁用),转写完成才恢复;“点停止没反应、等一会才出字”的观感问题解决 |
| 0.7.9 | 修“面板渲染报错 / 空白”的真因:语音的 useRef/useState/useEffect 原本写在 if (!gate) return 之后,首次渲染(无数据)跳过它们、有数据后 hooks 变多,React 直接抛 Minified error #300;现已全部前移到所有 early return 之前,并加冒烟断言防回归 |
| 0.7.8 | 语音再修:Cordis 对嵌套服务名按 remote.speech 判定注入,因此 inject 同时声明 remote 与 remote.speech,取值时先试 ctx.get('remote.speech');错误文案带版本号便于确认 |
| 0.7.7 | 面板空白可诊断:外面包一层渲染错误边界(抛错时显示错误文本),空态显示版本号(v0.7.7),.wg-wrap 加最小高度 200px(防宿主容器高度为 0) |
| 0.7.6 | 插件中心显示的标题/描述改成英文:locale/zh.json 的 meta 也改为 Task Decision + 英文描述(面板内文案仍跟随 DSH 语言) |
| 0.7.5 | 语音改用 ctx.get('remote') 可选查找:直接写 ctx.remote 会受 Cordis fiber.inject 约束,而插件由宿主 bundle 加载、模块导出的 inject 未被采纳,因此仍抛 without inject |
| 0.7.4 | 修“面板弹出但空白”:① 工具卡作为第二条数据通道(从 toolview 的 block 直接解析并写 store)② 解析兼容嵌套/变体字段(args/input/arguments/block…)③ 探针解析失败后 600ms×3 重试 ④ 空态文案改为「本轮还没有拍板项」+ 排查提示 |
| 0.7.3 | 真正修复语音注入报错:package.json 的 dsh.client.inject 补上 @deepseek-ai/dsh-api-remotes(之前只声明了模块 inject,但 manifest 没加载 remote 服务);注入错误也换成中文提示 |
| 0.7.2 | ① 语音按钮改成麦克风图标(录音中变红色停止方块 + 秒数)② 修复 cannot get property 'remote.speech' without inject:插件声明 remote 依赖 |
| 0.7.1 | 整题备注支持语音输入:录音→16kHz WAV→宿主 speech.transcribe 转写→追加到备注;含麦克风权限/未就绪提示 |
| 0.7.0 | ① 插件改名 dsh-task-decision(包名 / 仓库 / 本地目录统一)② 每轮末尾固定附加「继续深挖还是直接开干」单选题,必答;选「先讨论」则回传要求 AI 先讲思路/影响面/闭环,选「直接开干」则直接执行 |
| 0.6.5 | 确认取消后右侧栏自动收起(延迟 250ms 让用户看到“已取消”状态,与提交成功后的行为一致) |
| 0.6.4 | 底栏按钮比例改为「提交拍板 2/3、取消本轮 1/3」 |
| 0.6.3 | 「取消本轮」从底栏角落的小灰字改成跟「提交拍板」并列的按钮(初始五五开),确认文案缩成「确认取消」 |
| 0.6.2 | ① 新增「取消本轮」:两步确认后整轮划掉,面板转「已取消」,角标归零,AI 下一轮自动恢复 ② 滚动性能:面板组件加浅比较 memo(避免宿主重渲染时重建整棵题卡树)、<style> 节点只创建一次、.wg-scroll 加 will-change/contain |
| 0.6.1 | 去掉拖拽入口:DSH 在 document 冒泡阶段接管了拖拽事件,全窗口弹遮罩、松手直接上传到左侧聊天框,题卡拿不到事件;所以只保留 Ctrl+V 粘贴 与 「添加附件」 两种入口,并在「已知边界」里写明 |
| 0.6.0 | ① 插件改名为 dsh-task-decision ② 每题支持附件:Ctrl+V 粘贴 / 拖拽 / 点按钮选文件 ③ 图片内联 base64、普通文件走后台上传并引用 receiptId ④ 回传按题分组(先文字后附件),模型能分清哪个附件属于哪道题 ⑤ 已提交后附件一并只读回放 |
| 0.5.0 | ① 提交后只读回放(选项、每题备注、整题备注、整体补充;关掉面板再打开也看得到)② 删掉遗留的 CSS / CSS2 两份死样式,全插件只留一份 <style> ③ 补全中英文字典并真正注册给 locale 服务(英文界面不再回落成中文) |
| 0.4.1 | ① 每题常驻备注框(不选也能提交)② 回传带上问题标题 ③ 提交后自动收起右侧栏 ④ 防重复提交(同步锁 + 本轮已提交闸) |
| 0.4.0 | 按 design/ui-spec.md 重做面板:头/尾固定、只有中间滚动;主按钮反色;勾选框改 CSS 圆/方;题号徽标、进度条、未选校验、错误条 + 重试 |
| 0.3.0 | 发送通道修复(binding.session.prompt 优先、conversation 兜底)+ 页头常驻「拍板」入口 |
| 0.2.0 | 改用工具 gate_ask 登记,聊天流里只显示一行卡片 |
| 0.1.0 | 首版:正文标记块 + 右侧 tab |
已知边界
- 宿主半部(
index.js)改动需要重启 DSH 才会重新加载工具与提示词;客户端改动刷新页面即可。 ctx.sidebarRight不在客户端服务目录里,自动开 tab 用ctx.get('sidebarRight')懒取;拿不到就只注册 tab、不自动弹。- 收起侧边栏依赖
sidebarRight.actionsFor(sessionId).setExpanded(sessionId,false)(内部面),DSH 升级若改名会退化为"不自动收起",不影响提交。 - 残留的 v0.1 文本标记块解析仍保留,作为兼容路径。
- 拖拽附件不可用:DSH 自己会在
document冒泡阶段接管dragenter/dragover/drop(全窗口遮罩 → 松手进左侧聊天框),题卡收不到事件;要恢复拖拽得先在window捕获阶段拦截,本次未做。
许可证
MIT © 2026 tdcy
本项目为社区插件,与 DeepSeek AI 无隶属关系。
Comments
Loading…
Similar plugins
by Long-Yin-Zi
把 AI 每轮抛出的待决问题收进右侧边栏,选完写备注一键回传(DSH 桌面端插件)
★ 0
MIT
JavaScript
Oct 20, 2026
dsh plugin --profile web add task-decisionby Anionex
DSH Web 预测回复插件:AI 回复后在输入框上方生成可点击填入草稿的下一步消息候选
★ 3
↓ 25/wk
MIT
TypeScript
Sep 3, 2026
dsh plugin --profile web add @anionex/dsh-suggested-repliesby lemonhall
DSH 右侧栏轻量待办:一行一件、回车就加、勾掉即完成(todo_panel)。
★ 0
JavaScript
Oct 3, 2026
dsh plugin --profile web add dsh-todo-dockby uigdwunm
Groups each DSH Web turn's thinking, tool calls and context into an expandable process box that shows the latest two items by default, while keeping user dialogue, interactive questions and final answ
★ 1
MIT
TypeScript
Sep 14, 2026
dsh plugin --profile web add dsh-process-foldby Yebeimu
A DSH plugin: collect pending ask_user_question prompts from other sessions and answer them without leaving the current one.
★ 0
MIT
JavaScript
Oct 23, 2026
dsh plugin --profile web add dsh-sideaskAdds lightweight selected-text references to DSH assistant replies: selections stay outside the editor as removable draft contexts, remain marked beside the source, and render as hoverable annotations
★ 0
dsh plugin --profile web add dsh-add-to-chat