前言¶
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 的会话、工作区、输入框交互深度集成。安装后即可在右侧栏「+ 新标签页 → 待办任务」使用。