dsh-task-planning-preset
Verifieddsh-task-planning-preset · v1.2.0 · MIT
DSH「任务规划」模式:以声明式 preset 注册一个只做规划、自己不动手实现的 Agent 组合
Install
dsh plugin add dsh-task-planning-preset Confirm the layer applied with dsh --profile default --dump-config — see the install guide.
Source
Tags
Creators
Readme
task-planning-bundle · 「任务规划」模式的 DSH bundle 包(新版机制)
适用:DSH 0.2.x(声明式 preset:
@deepseek-ai/dsh-agent-preset+@deepseek-ai/dsh-agent-preset-registry) 不适用:DSH 0.1.x 的目录机制(那套见../task-planning/,在本机运行版本上是死数据,见../../docs/实施记录/01-预设机制冲突-运行时版本不符.md) 本包自带 4 样东西(其余 preset 子插件全部来自 DSH 安装自带的包): ①cordis.patch.yml(组合补丁);②PROMPT.md(模式系统提示词正文,任务 04,由 persona 行的!!js按包名读入); ③plugins/token-estimator/(本地工具插件,任务 03,零第三方依赖);④skills/planning-templates/(规划文档模板 skill,任务 05)。
〇、本包的文件清单
task-planning-bundle/
├── package.json # dsh.bundle.patch → ./cordis.patch.yml;包名 dsh-task-planning-preset
├── cordis.patch.yml # insert 一行 @deepseek-ai/dsh-agent-preset(preset 本体)
├── PROMPT.md # 模式系统提示词正文(15 小节 + 12 条硬约束 + 4 组 25 条作业纪律,哨兵 v10)
├── plugins/token-estimator/index.js # 本地工具:estimate_tokens / usage_report
├── skills/planning-templates/SKILL.md # 规划文档模板:5 类文档的【必须】/【可选】章节 + 可复制骨架
└── README.md # 本文件
三处
!!js走同一条解析基准(profile 的node_modules里有本包的 link,按包名解析): persona 读PROMPT.md、skill-filesystem的customSkillDirs取skills/、token-estimator按包名子路径挂载。 都不要写相对路径 —— 补丁层行的baseUrl是 profile 配置目录,不是本目录(证据与实测见../../docs/实施记录/04-提示词接线实测.md§2 与../../docs/实施记录/05-模板接线记录.md§2)。
一、这个包做了什么
cordis.patch.yml 往 profile 的组合树里 insert 一行 @deepseek-ai/dsh-agent-preset,其 config 就是一个完整的 preset 声明:
| 字段 | 值 | 含义 |
|---|---|---|
id |
task-planning |
会话保存与选择器内部使用的 preset 标识符 |
name |
任务规划 |
选择器/设置页显示名 |
description |
把模糊想法问清楚并拆成可执行的规划与提示词,自己不动手实现。 | 显示说明 |
order |
5 |
列表排序(越小越靠前) |
plugins |
persona + agent-instructions + time-context + tool-bash/tool-pwsh(平台二选一)+ tool-fs + tool-fs-search + tool-jobs + skill-filesystem + tool-skill + tool-ask-user + tool-todo + tool-web + present + token-estimator + compaction 组 |
子插件行(任务 02 的标准档,任务 03 追加 token-estimator:现为顶层 16 行 / 展开 19 行;任务 01 的最小集是它的 5 行子集) |
字段名与约束来自本机运行的 @deepseek-ai/dsh-agent-preset 源码(lib/index.js):
static Config = z.object({
id: z.string().required(),
name: z.string(),
description: z.string(),
order: z.number(),
plugins: z.array(z.any()).required()
});
行 id(
preset-task-planning)与 preset id(config.id: task-planning)是两回事:前者是 Loader 的编辑地址(按 id 写覆盖补丁用),后者才是模式的身份。
二、安装(人工操作,铁律 11/12:AI 不写 profiles\)
在 DSH 桌面端里:
左侧栏点 插件(
ui-plugin-manager页面)。点 添加插件(或箭头菜单里的 安装第三方插件)。
在包名输入框里粘贴本目录的绝对路径:
<REPO>\presets\task-planning-bundle(安装对话框接受「包名(可带版本)、Git 地址、压缩包或本地绝对路径」,本地路径会直接读本目录的
package.json。)等 Host 读出
dsh-task-planning-preset与版本1.2.0,点 安装,等 pnpm 跑完。安装完成界面点 立即启用(或回插件列表打开该组合包的开关)。
新开一个会话,模式选择器里应出现「任务规划」。
- 若没有:重启桌面端再新开会话(未启用 HMR 的 profile,组合变更保留到重启)。
- 若显示「加载失败」:插件页会有该组合包的报错,把原文抄回报告(铁律 11)。
⚠️ 常见失败:ERR_PNPM_UNEXPECTED_STORE(本机已实测,修法已验证并已应用)
本机现状(2026-10-12 12:57):修法 1 已经应用(
<DSH_HOME>\profiles\desktop\pnpm-workspace.yaml已含storeDir: <DSH_HOME>\.pnpm-store),并用自带 pnpm 11.7.0 与全局 12.3.4 双重复核通过 (store path→<DSH_HOME>\.pnpm-store\v11)。本节留档:若你再次看到这个报错,说明那一行不在了, 按下面重新加回去即可。
现象原文:
[ERR_PNPM_UNEXPECTED_STORE] Unexpected store location
The dependencies at "<DSH_HOME>\profiles\desktop\node_modules" are currently linked from the store at "<DSH_HOME>\.pnpm-store\v11".
pnpm now wants to use the store at "D:\.pnpm-store\v11" to link dependencies.
原因:profile 的 node_modules 是早先用 <DSH_HOME>\.pnpm-store\v11 装的;
而桌面端自带的 pnpm(实测 11.7.0,宿主用 Electron 当 node 跑 resources\runtime\pnpm\bin\pnpm.mjs)
在 profile 目录下解析出的是 D:\.pnpm-store\v11 —— 只有 store 位置不同,store 版本号相同。
修法(二选一,都必须人工做:前者在 profile 目录,后者是全局配置,都属铁律 12 禁区)
推荐:在
<DSH_HOME>\profiles\desktop\pnpm-workspace.yaml末尾加一行(必须是 camelCase 的storeDir):storeDir: <DSH_HOME>\.pnpm-store已用自带 pnpm 11.7.0 与全局 pnpm 12.3.4 双重复核:
pnpm store path均回到<DSH_HOME>\.pnpm-store\v11。全局配置(一行命令;影响本机所有 pnpm 项目,但只是把 store 钉回 profile 已在用的那个):
pnpm config set store-dir <DSH_HOME>\.pnpm-store --global
已实测无效、不要再试的写法:
- 项目
.npmrc里写store-dir=…或storeDir=…(pnpm 11.7.0 与 12.3.4 都忽略); pnpm-workspace.yaml里写 kebab 的store-dir: …(忽略)。
失败是安全回滚的:本机实测,安装失败后 profile 的 package.json 里 dependencies 与 dsh.profile.bundles
都没有残留(pnpm 的失败流程会恢复 package.json 与 pnpm-lock.yaml)。修好后再回到第二节第 2 步重试安装。
命令行等价形式(本机没有全局
dsh命令,仅作参考):dsh plugin --profile desktop add <本目录绝对路径>
三、卸载与更新
- 卸载:插件页 → 该组合包卡片 → 卸载(会从
dsh.profile.bundles移除并pnpm remove;AI 不代做)。 - 更新:改完
cordis.patch.yml后重新安装(官方说明:插件安装后暂不支持自动更新,升级需先卸载再装新版)。 本地路径安装时,改动通常随重启桌面端加载,但以插件页显示的状态为准。
四、改这个包时的硬约束(与任务书一致)
不给
persona设complete: true—— 否则 DSH 的工具指引与运行上下文会全部丢失。服务类行必须放在带
isolate的cordis:group里;同一 realm 里同名服务只能注册一次。config.plugins里每行的id必须唯一;group 行的子行写在它的config列表里。preset 的服务提供方与其消费方要共享同一个 realm(本包的
compaction/toolResultPruner)。行引用的包名必须存在于 DSH 安装(
asar/dsh/node_modules/...)或 profile 的依赖里,否则该声明加载失败。必填 config 字段必须给全(本机实测踩过的坑):0.2.x 把若干 0.1.5 时代可选的字段改成了必填, 例如
@deepseek-ai/dsh-tool-fs-search的sampleOverCapGlobResults(z.boolean().required())。 少一个必填字段 → 整个 preset「加载失败」:设置页「自定义」分组里能看到卡片但带「加载失败」红标, 而模式选择器里完全看不到它(选择器只列健康 preset)。 改完务必跑校验脚本。三支校验当时都是临时产物(跑完即删,不随仓库发布),源码留档在各任务的 实施记录与验收报告里,可按需照抄重建(用本机任意 Node ≥ 20 跑即可):- bundle 校验:从安装树里逐个包提取 schema 的
.required()字段核对,并与打包版standard.patch.yml对照; - 清单校验(任务 02 起):核"该挂的 14 行都挂了 / 禁用的 11 个包一个都没挂 / 只有 compaction 带 isolate /
三个裁剪阈值 /
!!js原文"; - skill 校验(任务 05 起):核"
customSkillDirs的!!js在真实baseUrl下求值到本包的skills/+ 运行方自带 provider 能发现并加载planning-templates+ 骨架关键特征齐全"; (脚本源码留档在../../docs/实施记录/05-模板接线记录.md§5)
三支都跑,全 PASS 才算文件级通过(文件级通过 ≠ 能用:运行方口径的判据是"重启后新开会话里模式正常且工具可见",见
docs/实施记录/02-工具实测表.md§4.0)。- bundle 校验:从安装树里逐个包提取 schema 的
改完
cordis.patch.yml后重启桌面端即可(link:安装就地读文件,不需要重新安装)。 注意:只改PROMPT.md或只改skills/下的文件不会生效 —— preset 的重组代际只看补丁文件的 mtime+size, 而!!js只在挂载激活时求值一次。改完提示词或 skill 后,务必同时触碰cordis.patch.yml(改动其中一行注释即可)。只从本仓库这一份安装;不要在别处
pnpm add出一个副本,避免两份 patch 抢同一个 preset id。