dsh-task-manager:给 DSH 聊天加一个悬浮任务面板

前言

在 Harness 里让模型跑多步任务时,常见三种混乱:任务散落在对话各处,回头找不到;任务是模型提的还是自己手抄的,已经分不清;模型说「完成了」就自动打勾,其实没人确认过。dsh-task-manager 针对这三件事:把任务收进一个悬浮面板,每条标注来源,模型要完成时只能提议、由你拍板。

这是什么

dsh-task-manager 由 caipanjin 维护,是 DeepSeek Harness(DSH)的一个插件,发布在 npm 上,当前版本 1.1.5。它提供一个右下角的悬浮任务面板,把模型建议的任务和手动添加的任务放在同一处,并额外处理三件事:点「开始」需二次确认后才把任务发进对话,模型报完成时只提议、不自动落定,面板位置按浏览器记住。README 自述为「无依赖的小插件」。许可证是 MIT。

核心功能

1、两种任务来源:模型通过 task_write 工具写入的任务标注「模型建议」,你在面板输入框添加的标注「手动添加」。每条都带来源徽标。

2、选中文字建任务:在对话里选中一段文字,旁边浮出「+ 添加为任务」按钮。当选中内容是渲染出来的列表(-、1.、2. 等)时,按钮变成「+ 添加 N 个任务」,为每个列表项建一条任务。列表标记是 CSS ::marker 画的、不包含在选中文字里,因此插件读 DOM 的 <li> 结构来识别条目,而不是正则匹配文本。

3、悬浮面板:位于 shell 浮层之上,从紧凑小胶囊展开,可拖到任意位置,位置按浏览器保存。

4、状态圆点加状态文字:每行显示状态圆点,并显示「待办 / 进行中 / 已完成」文字,颜色只作辅助(待办灰、进行中琥珀、已完成绿)。

5、显式完成、确认后落定:每行只有一个随状态变化的操作按钮(「标记进行中」→「✓ 完成」→「重新打开」)。当模型判断任务完成时,只是提议;面板出现「全部确认 / 忽略」横幅,未经你确认不会真正落定。

6、启动任务需二次确认:点行内「开始」先弹确认条,点「发送」才把「开始执行这个任务:<标题>」发到对话框,面板随后自动收起。

7、删除与清空:模型任务与用户任务都带「✕」,另有「清除已完成」批量移除(待确认的除外)。

8、主题与语言:只使用 Harness 真实主题 token,自动跟随应用浅色 / 深色;提供简体中文与 English。

安装与启用

已发布到 npm,安装命令为:

dsh plugin --profile web add @caipj/dsh-task-manager

也可以直接从源码安装:

dsh plugin --profile web add github:caipanjin/dsh-task-manager

安装后重启一次 Harness 宿主,让宿主侧工具 task_write 注册生效,并刷新窗口。任务小胶囊会出现在右下角,点击展开,拖动可移动。

典型用法

下面按 README 里的步骤走一遍。

1、添加任务:展开胶囊,在输入框输入后点「添加」。任务只留在列表里,不会被复制到聊天框。

2、从对话文字添加:选中文字点浮出的「+ 添加为任务」;选中列表则点「+ 添加 N 个任务」。

3、模型任务:模型调用 task_write 时任务自动出现并标注「模型建议」。

4、切换状态:待办点「标记进行中」,进行中点「✓ 完成」,已完成点「重新打开」。

5、启动任务:点某行「开始」,确认条出现后点「发送」,提示被发送到对话。

6、完成确认:模型报完成后出现确认横幅,可「全部确认」或逐行「确认」。模型上报时除了任务 id,也可以直接写标题,标题会按忽略大小写、全半角、空格、标点做归一化匹配,唯一命中即生效,唯一前缀也接受;命中多个则报错并列出候选。

7、删除 / 清空:行内「✕」删除单条,「清除已完成」批量移除。

工作原理与兼容性

宿主端(index.js)注册一个面向模型的工具 task_write,子命令有 add、set_status、propose_done、remove、replace、clear、list,并有一个会话投影 taskManager。工具的渲染结果内嵌一行机器标记 TASK_STATE::<json>,携带完整任务列表;投影从既有的 tool/result 事件中折叠出这些标记,不引入自定义会话事件类型。

客户端(client.js)把两个挂件注册到 shell.overlay 插槽:任务卡片,以及选中文字时出现的浮层按钮。客户端从投影读模型任务,用户任务、对模型任务的本地状态修改(完成 / 隐藏)和确认状态存于 localStorage——已安装插件无法写入宿主投影,这些状态按设计放在客户端。「开始」调用当前会话的 conversation.send(text)。

关于 1.1.5 的一处修复值得留意:模型用 replace 重写任务列表时,此前每条任务都会拿到新 id,导致客户端已做的隐藏、状态修改、完成确认按 id 记录而全部丢失。现在 replace 会按标题复用已有任务的 id,只有真正新增的任务才生成新 id,标题匹配同样走归一化。

平台是 web(Harness 桌面 / 网页 UI)。需要 Harness 暴露 shell.overlay 插槽、sessionProjections 服务,以及 conversation.send / sessions.scope 客户端服务。插件只使用公开稳定的主题 token(--dsw-alias-*)。

权限方面:无网络请求、无外部服务、无遥测;读取会话投影中的任务,只写入自己的 localStorage 键 @caipj/dsh-task-manager:*;新增一个模型工具 task_write,不触碰其他东西。

适用场景与注意

适合希望在 Harness 聊天里维护多步任务、又不想手动复制粘贴要点到对话中的开发者。

使用前应确认三件事:

1、Harness 版本是否暴露 shell.overlay 插槽、sessionProjections 服务与相关客户端服务;不满足时面板不会出现。
2、该插件以当前 dsh 进程权限运行,安装前应阅读源码与许可证(MIT),确认信任后再装。
3、已知限制:模型任务的完成 / 删除是本地覆盖,按会话存于 localStorage,不回写会话日志,重开会话时以本地记录为准;用户任务只存在于本地浏览器 / 会话,点「开始」之前不会进入模型上下文;选中文字建任务依赖 DOM 结构识别列表条目,文字来自代码块或纯文本(标记是真实字符)时,会退回按文本中的 - / 1. 切分。

结尾

dsh-task-manager 做的事情很具体:给 Harness 聊天补上一块带来源标注、需确认才落地的任务面板,让多步任务的执行顺序与完成状态至少有据可查。目录页在 https://www.skillhub.cn/plugins/caipanjin/dsh-task-manager ,源码在 https://github.com/caipanjin/dsh-task-manager 。

羽毛球分组比赛记分
小程序二维码

欢迎使用《羽毛球分组比赛记分》微信小程序

小夜