dsh-todos: Add cross-session Plan/Backlog todos for DeepSeek Harness

前言

用 DeepSeek Harness(DSH)做智能体开发或日常协作时,会话里的任务往往有两层含义:这一轮具体怎么推进,以及关掉窗口、换一天之后还要不要继续做。官方自带的 todo_write 回答的是前者——当前这一轮的执行清单,在 turn/start 时会清空,并不承担「明天还要做什么」。

若把后续工作只留在对话记录里,重启 Host、新开会话后很难找回;若和会话内临时清单强行双向同步,又容易两边抢着当唯一真相而失真。dsh-todos(npm 包名 dsh-plugin-todos,仓库 zhihuz123/dsh-todos)由维护者 zhihuz123 发布,分类为工作流类社区插件,在 workspace 层持久化 Plan 与 Backlog,并通过侧边栏、Agent 工具与 /todo 命令写入。下文按定位、功能、安装与用法说明如何接入。

这是什么

dsh-todos 是 DeepSeek Harness 的持久工作区待办面板:把「这次怎么做」留在会话里,把「接下来做什么」留在工作区。

它与官方 todo_write 的关系可以概括为三层,且彼此不自动同步(README 明确为有意设计):

Session todo_write   这次怎么做(当前轮,临时)
Workspace Plan       已经决定接下来做什么(持久,用户明确承诺)
Workspace Backlog    值得以后做什么(持久,暂未承诺)

当前 npm 版本为 0.2.0,许可证 MIT;要求 DSH >= 0.2.1-rc.1 < 0.3.0(engines.dsh)。README 记载早期版本已在 Desktop 0.2.2-rc.1(macOS)上验证。插件目录页:skillhub.cn/plugins/zhihuz123/dsh-todos。

核心功能

下面介绍 README 中已列出的能力,均可在仓库文档中核对。

  • 侧边栏 Overview:未完成 / 已完成两个 tab;未完成分 Plan / Backlog,已完成按 workspace 分组并按完成时间倒序。
  • Plan / Backlog 语义:Plan 为已承诺的下一步,支持优先级 high / medium / low(默认 high),列表按 priority → order 排序;Backlog 为发现但暂不执行的事项,无优先级字段。
  • Workspace 级持久化:数据落在 storageDomain: workspace_todos,不依赖某次会话是否仍打开,Host 重启后仍在。
  • 三种写入方式:Overview UI、Agent 的 todo_add / todo_update、会话内 /todo 命令。
  • 完成与清理:完成只改状态不删除,可恢复;支持单条永久删除与按 workspace 批量清理已完成。
  • 来源追溯:Agent 写入可记录 sourceSessionId,便于从条目回到来源会话。
  • 鉴权与请求路径:HTTP 走 DSH Connection 的 owner Peer、cookie 与 Host/Origin 约束,插件不单独引入鉴权 token。
  • 轮询策略:Overview 挂载且页面可见时约 4.5s 刷新一次;页面 hidden 时停止;focus / visibility 变化时立即刷新(当前无 SSE,见已知限制)。

安装与启用

安装前请确认本机 DSH 版本满足 engines.dsh,并知悉:插件在当前 DSH 进程权限下运行,安装前应自行查阅 GitHub 源码 与 MIT 许可证。社区目录 skillhub.cn 为独立站点,与 DeepSeek / 幻方无官方从属关系。

Web profile

在已配置 DSH Web 的环境中执行:

dsh plugin --profile web add dsh-plugin-todos

刷新 DSH Web 后,侧边栏会出现「待办」;可在 设置 → 插件 中启停。

Desktop

方式 A(推荐,无需退出 Desktop):在侧边栏 插件 → Add plugin 中输入 dsh-plugin-todos,由 Host 读取包清单后安装并启用,再刷新页面。

方式 B(完全退出 Desktop 后):

"/Applications/DeepSeek Harness.app/Contents/Resources/runtime/cli/bin/dsh" \
  plugin --profile desktop add dsh-plugin-todos

README 强调:desktop profile 由 Electron 管理,应使用 Desktop 自带 CLI,不要用外部全局 dsh;安装会写入 ~/.dsh/profiles/desktop/package.json 的依赖与 bundle 配置,重新打开 Desktop 后生效。

仓库名是 dsh-todos,安装用的包名是 dsh-plugin-todos(npm 上 dsh-todos 已被占用)。

典型用法

Overview 手动添加

顶部 composer 支持选择标题、位置(Workspace / 收件箱 Inbox)、类型(Plan / Backlog)后添加。手动创建的 Plan 默认 high;Inbox 只能放 Backlog。

/todo 命令

在会话里直接输入,不经过模型,也不会开启新一轮对话:

/todo <text>              → Backlog
/todo add <text>          → Backlog(标题以 plan/backlog 开头时用)
/todo backlog <text>      → Backlog
/todo plan <text>         → Plan(默认 high)

示例:

/todo Fix authentication bug
/todo plan Implement SSE
/todo backlog Investigate flaky test
/todo add plan the migration

结果以命令卡片显示;只负责记录,不会让 Agent 自动执行。Inbox 里使用 /todo plan 会直接报错,而非静默降级。

Agent 工具

todo_add({ title, bucket?, description?, priority? })
todo_update({ id, status?, bucket?, title?, description?, priority? })

todo_add 不接受 workspaceId:Host 从当前 session 的 workspace membership、父 session、cwd 最长前缀到 Inbox 依次解析。README 约定:Agent 自主发现的后续工作默认写 Backlog;Plan 仅在用户明确承诺(如「加到 plan」「接下来做」)时写入;用户说「记住」时,仅当是可执行工作才应写 todo。

状态流转

pending / in_progress
        │ complete
        ▼
    completed ── restore ──▶ pending
        │
        ├─ delete           单条永久删除
        └─ clear completed  按 workspace 批量永久删除

适用场景与注意

适合谁:需要在多个 DSH 会话、甚至重启 Host 之后,仍保留「已承诺的 Plan」与「暂留的 Backlog」的开发者;希望 Agent 在对话中发现后续工作时能落入 workspace,而不是只留在聊天记录里。

设计取舍:不要期待它与 session 的 todo_write 自动对齐;若你需要的是「仅本轮执行清单」,继续用官方能力即可,与本插件并列使用。

已知限制(摘自 README):无 SSE,依赖可见时轮询;单用户 / 单 Host 语义,多窗口同时编辑为最后写入者胜;无拖拽排序、Overview 暂无标题编辑 UI(todo_update 已支持);workspace 删除后相关 todo 会显示为 “Removed workspace”;Desktop 上完整增删改与 /todo 的逐项 smoke test 尚未全部完成。升级 DSH 大版本前,应重新验证 connection.fetch、storageDomain 等 API 面。

结尾

经过上面的步骤,可以把跨会话待办从「散落在对话里」收束到 workspace 的 Plan / Backlog,并与本轮 todo_write 分工清晰。进一步了解与安装:

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

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

Xiaoye