DeepSeek Harness 待办任务插件

前言

DeepSeek Harness(DSH)的会话 todo 通常是临时的、仅当前会话可见的记录。在实际使用中,这些 todo 难以复用、难以调度、难以追踪执行状态,容易在多轮对话中丢失或遗忘。多数做法仍依赖外部工具或手动整理,缺乏与 DSH 交互上下文的紧密集成。

待办任务插件(dsh-ui-taskcards)为 DSH Web UI 注册了一个原生右侧栏标签页「待办任务」,将当前会话的 todos 转化为持久化的任务卡片,支持调度、顺序执行、历史归档与回写观察器状态。

这是什么

这是一个纯客户端 DSH Web UI 插件,注册类型为 sidebarRightTabs,槽位为 sidebar.right.pane.tab。它与 DSH Web 右侧栏的其他面板(工作区文件、浏览器、终端)共享同一套 dock 体验:支持拖拽分栏、全屏、宽度拖拽以及会话级布局记忆。插件依赖 DSH 官方提供的 sidebarRightTabs 服务与 sidebar.right.pane.tab 槽位,在 DSH Web 0.1.x ~ 0.2.x 上验证(已测版本 0.2.1-rc.2)。

核心功能

采集

  • 自动转卡:当前会话的 todos 通过 LCS(最长公共子序列)+ 相似度 ≥0.8 的模糊对齐自动转化为任务卡片,来源标记为 source=agent-todo。
  • 固定按钮转卡:输入框的 📌 按钮可将草稿固定为卡片(composer-pinned),不发送消息、不清除草稿。
  • 面板快捷输入:面板内支持 ! 前缀的即时建卡,多行粘贴可逐行建卡。

卡片

  • 编辑:修改标题、派发指令。
  • 修改目标:工作区、会话、定时执行、顺序执行成员,仅在 pending 状态下可修改目标。
  • 执行:通过 sessions.prompt 模式为 queue 执行队列,支持手动触发。
  • 回合观察器回写:手动执行的卡片,会话状态为 running 时标记为 running;回合结束且收件队列空时标记为 done 并自动归档;从未观察到 running 时,需满 15s 快速回合窗口;目标会话消失 45s 后置为 failed。
  • 工作区/会话徽标:点击会话徽标可调用 uiWorkspace.openSession 跳转。
  • 排序与归档:支持拖拽与 ↑↓ 排序;终态卡片自动归档至历史区,历史区可恢复或删除。

定时

  • 本地 30s 心跳调度器,设置定时时前置校验目标。
  • 到期派发后清除,补触发复用 requestId 幂等;到期目标失效时转 failed(防心跳反复拾起)。
  • 单轮心跳最多触发 3 张。

顺序执行

  • 每会话一个状态机,状态包括:idle / dispatching / waiting-running / waiting-interaction / advancing / stopped。
  • 复合轮次结束判定:running=false 且收件队列空;队列不可探测时降级为 3s 连续空闲。
  • pendingInteraction 暂停 + 10s 恢复计时。
  • 批次内同工作区复用新建会话,seqIsolatedSessions 可切换逐卡新建。
  • 连续 3 张 blocked 即停止。
  • 顺序执行开关(⛓)默认关闭且不持久化,每次打开页面需手动开启。
  • 由会话 todos 自动捕获的卡片默认不加入顺序执行队列,可在「修改」中显式加入。
  • 跨窗口存储同步时会立即停止本窗口在途的顺序执行批次。

目标解析

  • 会话存活时直接派发并归属自愈。
  • 无会话但有工作区时,调用 sessions.create({workspaceId}) 新建并回写。
  • 既无会话也无工作区时,拦截并引导用户设置工作区。

幂等与同步

  • 使用 write-ahead lastDispatch + requestId 单飞检查。
  • 跨窗口通过 storage 事件同步。

入口

  • 右侧栏「+ 新标签页 → 待办任务」添加入口,引导用户打开。
  • 面板内创建任务默认绑定该标签页所属会话。
  • 旧的 shell.overlay 抽屉已移除。

安装与启用

1) 安装包(本地目录或 Git 仓库;GitHub 简写亦可):

dsh plugin --profile web add file:<本插件目录>
#   或:dsh plugin --profile web add git+https://github.com/ydlly224/dsh-ui-taskcards.git

2) 在 ~/.dsh/profiles/web/package.json 的 dsh.profile.bundles 数组里追加 "dsh-ui-taskcards"(pnpm 已把依赖写入 dependencies,注册 bundle 需手动加一行)。

3) 重启一次 dsh web,浏览器刷新后在右侧栏「+ 新标签页 → 待办任务」打开;此后仅改 lib/client.js 会自动 HMR 热重载。

插件为纯客户端 bundle,无 npm 依赖、不发起网络请求、除 localStorage["dsh.taskcards.v1"] 之外不写本机持久化。

典型用法

  • 打开「待办任务」面板后,当前会话的 todos 会自动转卡。
  • 需要长期保存的 todo 可点击输入框的 📌 按钮,将草稿转为卡片。
  • 在面板内使用 ! 前缀快速建卡,支持多行粘贴。
  • 选中卡片后,可在「修改」中设置工作区、会话、定时执行、顺序执行成员等目标。
  • 开启顺序执行开关(⛓)后,卡片将按顺序执行,支持暂停、恢复、停止。
  • 卡片执行完成后会自动归档,可在历史区恢复或删除。

适用场景与注意

  • 适合需要在 DSH Web UI 内直接管理任务、追踪执行状态、实现调度与顺序执行的场景。
  • 插件以当前 DSH 进程的权限运行,安装前应检查源码与许可证。
  • 定时触发需页面保持开启,关闭期间错过的到期卡下次打开会补触发一次。
  • 轮次归因是会话级近似,用户排队消息会推迟顺序执行推进,不会卡死不跳队。
  • v1 版本存在单窗口约束,多窗口写冲突靠 storage 事件尽力同步。

结语

待办任务插件将 DSH 会话 todo 转化为持久化、可调度、可追踪的任务卡片,支持定时执行与顺序执行,并与 DSH 的会话、工作区、输入框交互深度集成。安装后即可在右侧栏「+ 新标签页 → 待办任务」使用。

目录页|GitHub 仓库

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

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

小夜