← 返回条目

dsh-tool-todo-plus · 使用说明

中文版:依据官方 README 翻译整理,保留原有结构与命令

dsh-tool-todo-plus

DeepSeek Harness 任务清单插件 —— 官方 todo_write 的增强 fork

优先级标签 · 完整清单渲染 · 会话内浮动任务面板

[](https://www.npmjs.com/package/dsh-tool-todo-plus)

[](./LICENSE)

[](https://nodejs.org)

安装 · 功能 · 常见问题 · 安全 · 上游致谢

界面预览

浮动任务面板(展开态)——模型写入清单时自动弹出,实时跟随状态流转;毛玻璃表面与原生主题融合:

执行中——两次清单写入之间,⚙ 行实时显示模型此刻执行的工具(截图中对应正在进行的第 2 步):

胶囊态——收起为 ZCode 计划面板同款的内容优先级链(进行中项 →,截图中为"编写 README 使用说明"),点击展开:

面板可拖动 + 双击复位——按住卡片头部实时拖动,展开态 / 胶囊态下均可;双击头部,面板一步跳回默认锚定位置(实拍 GIF,约 7 秒):

目录

它是什么

零网络请求、零运行时 npm 依赖(依赖仅在构建期),宿主半不触文件系统——安全细节见文末。

一个"模型侧工具 + 用户侧面板"的组合:

功能

功能速览:

增强工具(模型侧)

浮动任务面板(用户侧)

与官方版共存

安装

方式适合谁特点
npm 包名大多数用户(CLI / 桌面端均可)最简,可指定版本
git 直装急用最新版始终拉取 main 最新
桌面端插件页桌面端、不想敲命令行图形界面操作
源码构建开发者 / 二次开发本地构建 tgz

方式一:npm 包名安装(最简)

包已发布到 npm:dsh-tool-todo-plus——安装时只需包名,无需 git 地址,且可指定版本。

CLI profile(有 dsh 命令的环境):

dsh plugin --profile  add dsh-tool-todo-plus

桌面端(Git Bash,先完全退出应用,含系统托盘):

ELECTRON_RUN_AS_NODE=1 "/d/DeepSeek Harness/DeepSeek Harness.exe" --expose-internals "D:/DeepSeek Harness/resources/app.asar/dsh/node_modules/@deepseek-ai/dsh-desktop-host/lib/cli.js" plugin --profile desktop add dsh-tool-todo-plus

安装后验证版本:grep '"version"' ~/.dsh/profiles/desktop/node_modules/dsh-tool-todo-plus/package.json

注意:包名安装走 npm registry(国内镜像站通常已同步,偶有几分钟延迟);新版本发布后的数天冷却期内,裸包名会解析到旧版——请带版本号安装(见常见问题);急用最新版也可走方式二。

方式二:git 直装(始终最新 main)

Git Bash(桌面端;先完全退出应用):

ELECTRON_RUN_AS_NODE=1 "/d/DeepSeek Harness/DeepSeek Harness.exe" --expose-internals "D:/DeepSeek Harness/resources/app.asar/dsh/node_modules/@deepseek-ai/dsh-desktop-host/lib/cli.js" plugin --profile desktop add https://github.com/shuxidemosheng/dsh-tool-todo-plus.git

CLI profile:dsh plugin --profile add https://github.com/shuxidemosheng/dsh-tool-todo-plus.git

方式三:桌面端插件页

打开 dsh 桌面端 → 侧边栏「插件」→ 添加插件 → 粘贴仓库地址或包名 → 安装(失败会自动回滚)。同样需要先完全退出应用。

方式四:源码构建

pnpm install
pnpm build        # tsc + esbuild:产出 lib/index.js(宿主半)与 lib/client.js(客户端半),并打 eval 补丁
npm pack          # 产出可安装的 tgz

要求:Node.js ≥ 24。

更新到新版

npm 渠道重跑方式一的命令(pnpm 会拉取最新发布版);git 渠道重跑方式二(拉取 main 分支最新提交)。装完重启应用。

配置

在 cordis.patch.yml bundle 行的 config 里设置(仓库自带的 patch 已按桌面端推荐值配置):

字段默认说明
allowParallelInProgressfalse是否允许多个任务同时 in_progress。false 为单活跃纪律(同 ZCode),多标即拒绝;true 适合有并行工作的部署(subagent、后台命令、workflow fan-out)
toolName'todo_write'注册的工具名。桌面端等使用 agent preset 的部署无法禁用官方 tool-todo 行,设为 'todo_write_plus'(本仓库默认)可与官方共存

安全

常见问题

dsh 升级后插件加载失败(提示 incompatible / 插件被禁用)?

dsh 0.2.1-rc.2 起会在启动时检查插件的兼容性声明:优先读 engines.dsh,没有它才逐个检查 peerDependencies 里的 @deepseek-ai/dsh-* 版本范围;运行时版本不满足就拒绝加载。0.7.3 及更早把 peer 精确锁死在 0.2.0-rc.2,所以在 0.2.1-rc.2 上会被判为不兼容。

装完后完全重启客户端生效;可在 ~/.dsh/profiles//node_modules/dsh-tool-todo-plus/package.json 里核对 "version"。

面板停在某一步「进行中」不动,但任务其实已经做完了?

显示不实时几乎都出在数据源,而不是面板渲染:浮窗与官方内联任务条读的是同一个 todos 投影(会话日志里最后一次被接受的 todo/write),两边同时停在同一步,就说明后续没有任何清单写入被接受。按三步排查:

  1. 确认插件版本 —— minimumReleaseAge 冷却期内裸包名会装到旧版(见上一条)
  2. 看「轨迹」标签页里 todo_write_plus 的调用记录:
  1. 缓解与根治:

会与官方 todo_write 冲突吗?

不会。桌面端注册为 todo_write_plus,与官方 todo_write 并存;工具名万一被占用(例如装了两份本插件),本插件记日志后优雅让位,entry 正常激活,不会导致 agent preset 审计失败。桌面端 agent preset 声明的官方 tool-todo 行不受 profile 补丁控制,因此默认共存而非替换;CLI profile 可按 id 禁用官方行后改回原名,见配置。

官方客户端消息区已经自带一个任务面板,为什么还要这个浮窗?

官方内联面板由官方客户端渲染,不显示 priority 字段;本插件浮窗是完整视图(状态点 / 划线 / 优先级徽章 / 进度计数 / "进行中"标记 / 当前动作 / 上一轮保留),且可拖动。两者可同时使用,互不干扰。

旧会话日志、官方插件写出的数据能读吗?

能,双向兼容:官方持久化 invariant 只校验 content / status,不拒绝 priority 字段;官方投影 schema 剥离未知键,带 priority 的条目在官方组件眼中只是普通条目;投影 key(todos)与折叠语义和官方逐字一致,stateVersion 保持 2,官方写出的旧 checkpoint 在本插件下照常通过校验。

为什么重新进入会话时面板没有自动弹出?

设计行为:只有模型的实时写入才自动弹出;历史回放(重进会话 / 切换会话 / 重启应用)只同步数据、不弹面板——关了就保持关着。边界情况见已知限制。

面板挡住界面内容了?

按住卡片头部拖到任意位置即可,位置自动记忆(重进会话/重启保持);双击头部复位到默认锚定位置。

想让本插件独占 todo_write 原名?

CLI profile 里按 id 禁用官方 tool-todo 行后,把 cordis.patch.yml 里的 toolName 改回 'todo_write',见配置。

已知限制

上游致谢

本插件是 @deepseek-ai/dsh-tool-todo 的增强 fork:持久化事件、投影折叠语义与并行策略沿用上游实现,浮窗的胶囊优先级链移植自 ZCode 计划面板(zai-org/ZCode)的行为逻辑。上游以 MIT 许可发布。

许可证

MIT

内容取自仓库 README,未做删改性总结。命令与参数以原文为准。