dsh-tree-task-flow 0.2.0 → 0.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -10,7 +10,7 @@
10
10
 
11
11
  长任务跑到后半程,上下文里绝大多数内容是**过程**:读过哪些文件、试过哪些错、
12
12
  执行过哪些命令。这些内容对后面没有用,但会一直占着位置——每多一轮,
13
- 模型要被喂的就越长,缓存也越容易被顶掉。
13
+ 喂给模型的上下文就更长一分,而其中真正需要留住的只有寥寥几句。
14
14
 
15
15
  真正需要留给后面的只有一句话:**这一步做完了,它产出了什么。**
16
16
 
@@ -24,7 +24,7 @@
24
24
  ## 上下文怎么长
25
25
 
26
26
  ```
27
- [节点 0] 系统提示词(身份 / 工具 schema / 静态说明) ← 会话内逐字节不变
27
+ [节点 0] 系统提示词(身份 / 工具 schema / 工具说明) ← 不随计划变化
28
28
  [用户消息]
29
29
  [目标级汇总] ← 换目标时逐条累积
30
30
  [任务级汇总] ← 换任务时逐条累积
@@ -56,13 +56,13 @@
56
56
 
57
57
  ```
58
58
  检查点:任务「重构解析器」(t-3) 的子节点已全部结束。
59
- 此刻只放行两个工具:tree_task_plan 与 tree_task_done。
59
+ 此刻轮到你的判断:用 tree_task_plan 继续给 t-3 拆子节点,
60
+ 或者用 tree_task_done 提交这个任务的结果并完成它。
60
61
  ```
61
62
 
62
- 检查点只放行 `tree_task_plan`(继续拆子节点)和 `tree_task_done`(提交结果并完成),
63
- 其余工具**一律被拒**。"这一层到底做完了没有"要由模型判断,不能被计数规则替它定死。
64
-
65
- 检查点只拦模型(`tools/pre-execute`),拦不住人:`/task-tree` 命令随时能接管。
63
+ **检查点只是提示,不是闸门。** 它出现在 `tree_task_done` 的回执、树上和汇总消息里,
64
+ 但插件**不会拦住任何工具**——"这一层到底做完了没有"由模型判断,插件既不替它定死,
65
+ 也不靠拒绝别的工具把它逼到墙角。
66
66
 
67
67
  ## 六个工具
68
68
 
@@ -114,17 +114,25 @@ dsh plugin --profile web add dsh-tree-task-flow
114
114
  > ⚠️ profile 这一层按行覆盖时 `config` 是**整体替换**,不是逐字段深合并——
115
115
  > 覆盖时要把想保留的字段一起写全,没写的会走插件默认值(见下面的配置表)。
116
116
 
117
- 没启用时插件**一个字节都不碰会话**:不注册工具、不加提示词段落、不折叠、不续行。
118
- 只留一条 `/task-tree` 命令让你确认"装了但没开"以及怎么开。
117
+ 没启用时插件**一个字节都不碰会话**:不注册工具、不加提示词段落、不折叠、不续行、
118
+ 不挂暂停闸门。只留一条 `/task-tree` 命令让你确认"装了但没开"以及怎么开。
119
119
 
120
120
  ## 界面
121
121
 
122
- **输入框上方的「树形任务流」条目**(和内置的待办、目标条目并排,宽度与消息正文对齐):
123
-
124
- - 折叠时一行:标题 + `已完成/总数 · 当前节点`
125
- - 展开后是三级树,当前节点高亮,已完成节点直接显示已提交的结果
126
- - 节点上可以直接完成、丢弃,不用敲命令
127
- - 顶部状态条:「停止自动续行」「清空计划」「刷新」
122
+ **输入框上方的「树形任务流」条目**(和内置的待办、目标条目并排,宽度与消息正文对齐)。
123
+ 外观照内置条目做——用的是同一套 UI 基座(`@deepseek-ai/dsh-client-ui-primitives`
124
+ 的图标、Tooltip 与 CSS 变量),所以它看起来就是内置的一部分:
125
+
126
+ - **折叠时**是目标条那样的 36px 单行条:左边清单图标,中间「阶段标签 + 目标标题 + 进度」,
127
+ 右边一排圆形图标按钮——**暂停/继续**、清空计划、展开。
128
+ 阶段标签四种:进行中 / 已暂停 / 检查点 / 已全部完成。
129
+ - **展开后**是待办清单那样的卡片:三级树之间有竖线与拐角连线,层级一眼看得出来;
130
+ 同一层的节点之间、节点内部的各个内容块之间,各有一条分界线。
131
+ 当前节点用虚线圈标出,已完成打勾、丢弃的划掉。
132
+ - 节点标题**不缩略**:有多长写多长,多了自动换行。
133
+ - 提交的结果**默认只占一行**,点一下摊开看全文。
134
+ - 节点上可以直接完成、丢弃,不用敲命令。
135
+ - 数据每 4 秒自动拉一次,模型在后台改计划时界面会自己跟上。
128
136
 
129
137
  **没有计划的会话一个像素都不占**——读不到计划就返回 `null`,不会平白挤掉内置的
130
138
  待办与目标条目。
@@ -140,8 +148,8 @@ dsh plugin --profile web add dsh-tree-task-flow
140
148
  | `/task-tree` | 查看本会话的任务树与检查点状态 |
141
149
  | `/task-tree done <id> <结果>` | 提交某个节点的结果并完成它 |
142
150
  | `/task-tree drop <id>` | 丢弃某个节点 |
143
- | `/task-tree stop` | 停止本会话的自动续行 |
144
- | `/task-tree resume` | 重新允许自动续行(需 config 里 `autoContinue` 为 true) |
151
+ | `/task-tree pause` | 暂停:正在跑的工具跑完就停住,不再往下推进 |
152
+ | `/task-tree resume` | 继续:从停住的地方接着跑,不往会话里插消息 |
145
153
  | `/task-tree reset` | 清掉本会话的计划树 |
146
154
 
147
155
  ## 配置
@@ -153,9 +161,30 @@ dsh plugin --profile web add dsh-tree-task-flow
153
161
  | `enabled` | `false` | 总开关 |
154
162
  | `autoContinue` | `false` | 模型停下时是否自动续行 |
155
163
  | `maxAutoRounds` | `5` | 连续自动续行的轮次上限 |
156
- | `promptOrder` | `2000` | 静态说明段落的排序 |
164
+ | `promptOrder` | `1800` | 工具说明段落的排序 |
157
165
  | `rootDir` | `null` | 状态目录,默认 `$DSH_HOME/dsh-task-tree` |
158
166
 
167
+ ## 暂停与继续
168
+
169
+ 界面上的暂停按钮(或 `/task-tree pause`)是**真暂停**,不是"关掉自动续行":
170
+
171
+ - **正在执行的那个工具会正常跑完**,不会被中途掐断;
172
+ - 它跑完之后,会话就静静停在原地——不再发起模型请求,也不再往下走一步;
173
+ - **全程不往会话里插任何消息**,上下文干干净净。
174
+
175
+ 继续(界面按钮或 `/task-tree resume`)就是从这个岔口放行:模型从它原本要请求的地方
176
+ 接着请求,同样**零新增消息**。任务树的进度停在哪儿,就从哪儿接着跑。
177
+
178
+ 闸门开在 agent 的 `agent/pre-step` 上——一个 step 走完、工具结果都已落盘、模型还没
179
+ 发起下一次请求的那一刻。这是唯一同时满足"不打断工具"和"不留痕迹"的位置:再晚一点
180
+ 的 `agent/turn-stopping` 一旦放行,就得靠 `steer()` 推一条消息才能续上,那就留下痕迹了。
181
+
182
+ **闸门只拦自动推进,不拦真人发言。** 暂停期间你自己发一条消息,说明你要它跑,
183
+ 插件会直接放行并解除暂停,不会把你堵在门外。
184
+
185
+ 暂停期间人按界面上的停止(中断本轮)也不会卡住:闸门盯着本轮的取消信号,
186
+ 信号一 abort 就立刻放行。
187
+
159
188
  ## 自动续行的四道闸门
160
189
 
161
190
  `autoContinue` 默认关闭,开着也只是**兜底**:`tree_task_done` 的返回文本里已经带了
@@ -171,6 +200,9 @@ dsh plugin --profile web add dsh-tree-task-flow
171
200
 
172
201
  队列里还有排队输入时也不抢,让用户先说话。
173
202
 
203
+ 另外,**暂停会一并压住它**:`/task-tree pause` 之后,即使模型自己停了下来,
204
+ 兜底也不会把它重新拉起来;`/task-tree resume` 再放开。
205
+
174
206
  ## 状态文件
175
207
 
176
208
  全部在 `$DSH_HOME/dsh-task-tree/` 下,**以 `sessionId` 为键**:
@@ -197,8 +229,9 @@ dsh plugin --profile web add dsh-tree-task-flow
197
229
  2. **折叠是尽力而为的。** 游标被压缩遮掉时收不起来,但结果一定进上下文。
198
230
  面板上看到某段过程还在,通常是这个原因。
199
231
 
200
- 3. **模型看到的是静态的工具组说明,不随计划变化。** 提示词一变,整个上下文
201
- 从第一个 token 起失去缓存。要了解计划就让模型调 `tree_task_status`。
232
+ 3. **模型看到的工具说明不随计划变化,也不复述工具清单。** 那一段只讲什么时候用
233
+ 这组工具、完成时守什么规矩;每个工具的用法由它自己的 `description` 承担。
234
+ 要了解计划就让模型调 `tree_task_status`。
202
235
 
203
236
  4. **每次折叠,界面上的"系统提示词"卡片会重新渲染一次,但提示词一个字都没变。**
204
237
  DSH 把"上下文被替换过"记成一次请求序列的边界,界面在 `reason` 不是 `change`
@@ -209,6 +242,10 @@ dsh plugin --profile web add dsh-tree-task-flow
209
242
  5. **改需求用「丢弃 + 追加」,不要重建整棵树。** 丢掉的节点留在树里可查,
210
243
  它和完成的节点会合进同一条汇总。
211
244
 
245
+ 6. **暂停不留痕迹。** 暂停后模型看到的是"没有下一条请求",看不到任何"你被暂停了"
246
+ 之类的提示;继续之后也不会有"继续"消息进上下文。想让模型知道中间发生过什么,
247
+ 得自己发消息说。
248
+
212
249
  ## 不做的事
213
250
 
214
251
  | 不做 | 原因 |
@@ -216,18 +253,22 @@ dsh plugin --profile web add dsh-tree-task-flow
216
253
  | 资料 / 文件快照 / 记忆 | 上下文里值得留下的只有结果,其余靠模型自己重读 |
217
254
  | 文件回退 / 撤销 | 改需求用「丢弃 + 追加」 |
218
255
  | 多目标并行(多个根) | 单活动计划,数据结构已预留扩展 |
219
- | 把计划内容注入提示词 | 提示词必须逐字节不变,否则整个上下文失去缓存 |
256
+ | 把计划内容注入提示词 | 计划状态由 `tree_task_status` 现取,提示词里只放不随计划变化的说明 |
220
257
 
221
258
  ## 自检
222
259
 
223
- 三个自检脚本都不 import 任何 `@deepseek-ai/*` 运行时包——插件以 `link:` 方式安装时,
260
+ 六个自检脚本都不 import 任何 `@deepseek-ai/*` 运行时包——插件以 `link:` 方式安装时,
224
261
  从插件目录往上找不到宿主作用域的包,一旦 import 就根本跑不起来。
262
+ `verify-client.mjs` 因此自带一套最小的 `window` / `document` / React 替身,
263
+ 真去物化 `client.js`、真调一次 `apply`、真渲染一遍条目。
225
264
 
226
265
  ```powershell
227
266
  node verify-entry.mjs # 入口装配:启用/未启用两条路径各注册了什么
228
- node verify-tools.mjs # 工具层:schema、result 必填、检查点闸门、三级约束
267
+ node verify-tools.mjs # 工具层:schema、result 必填、三级约束
229
268
  node verify-region.mjs # 折叠行为:游标推进、降级追加、检查点提示
230
269
  node verify-plan.mjs # 计划树纯逻辑:状态流转、自动完成、丢弃级联
270
+ node verify-pause.mjs # 暂停闸门:挂起、放行、取消信号、真人发言、会话隔离
271
+ node verify-client.mjs # 客户端条目:挂载点、样式注入、文案键集、四种渲染态
231
272
  ```
232
273
 
233
274
  `verify-region.mjs` 用假 session 忠实复刻了 DSH surface 的三条硬规则
@@ -244,7 +285,7 @@ dsh plugin --profile web remove dsh-tree-task-flow
244
285
 
245
286
  ## 设计文档
246
287
 
247
- - `docs/02-DSH插件开发方案.md` —— 完整设计:上下文组成、游标、折叠、检查点、缓存推理
288
+ - `docs/02-DSH插件开发方案.md` —— 完整设计:上下文组成、游标、折叠、检查点
248
289
  - `docs/01-AIDesktop联动设计整理.md` —— 本插件最初的设计来源
249
290
 
250
291
  ## 许可