dsh-tree-task-flow 0.1.1 → 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 +68 -25
- package/client.js +426 -598
- package/cordis.patch.yml +1 -1
- package/lib/auto-continue.js +3 -5
- package/lib/commands.js +20 -20
- package/lib/http.js +17 -61
- package/lib/index.js +18 -12
- package/lib/pause.js +138 -0
- package/lib/plan.js +5 -6
- package/lib/prompt.js +28 -30
- package/lib/tools.js +1 -62
- package/package.json +1 -1
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
|
-
|
|
59
|
+
此刻轮到你的判断:用 tree_task_plan 继续给 t-3 拆子节点,
|
|
60
|
+
或者用 tree_task_done 提交这个任务的结果并完成它。
|
|
60
61
|
```
|
|
61
62
|
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
检查点只拦模型(`tools/pre-execute`),拦不住人:`/task-tree` 命令随时能接管。
|
|
63
|
+
**检查点只是提示,不是闸门。** 它出现在 `tree_task_done` 的回执、树上和汇总消息里,
|
|
64
|
+
但插件**不会拦住任何工具**——"这一层到底做完了没有"由模型判断,插件既不替它定死,
|
|
65
|
+
也不靠拒绝别的工具把它逼到墙角。
|
|
66
66
|
|
|
67
67
|
## 六个工具
|
|
68
68
|
|
|
@@ -114,20 +114,30 @@ dsh plugin --profile web add dsh-tree-task-flow
|
|
|
114
114
|
> ⚠️ profile 这一层按行覆盖时 `config` 是**整体替换**,不是逐字段深合并——
|
|
115
115
|
> 覆盖时要把想保留的字段一起写全,没写的会走插件默认值(见下面的配置表)。
|
|
116
116
|
|
|
117
|
-
|
|
118
|
-
|
|
117
|
+
没启用时插件**一个字节都不碰会话**:不注册工具、不加提示词段落、不折叠、不续行、
|
|
118
|
+
不挂暂停闸门。只留一条 `/task-tree` 命令让你确认"装了但没开"以及怎么开。
|
|
119
119
|
|
|
120
120
|
## 界面
|
|
121
121
|
|
|
122
|
-
|
|
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 秒自动拉一次,模型在后台改计划时界面会自己跟上。
|
|
123
136
|
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
- 节点上可以直接完成、丢弃,不用敲命令
|
|
127
|
-
- 顶部状态条:「停止自动续行」「清空计划」「刷新」
|
|
137
|
+
**没有计划的会话一个像素都不占**——读不到计划就返回 `null`,不会平白挤掉内置的
|
|
138
|
+
待办与目标条目。
|
|
128
139
|
|
|
129
|
-
|
|
130
|
-
以及怎么开、怎么关。
|
|
140
|
+
开关不在界面上,在 profile 的 `cordis.patch.yml` 里(见下面的「启用」一节)。
|
|
131
141
|
|
|
132
142
|
## 命令
|
|
133
143
|
|
|
@@ -138,8 +148,8 @@ dsh plugin --profile web add dsh-tree-task-flow
|
|
|
138
148
|
| `/task-tree` | 查看本会话的任务树与检查点状态 |
|
|
139
149
|
| `/task-tree done <id> <结果>` | 提交某个节点的结果并完成它 |
|
|
140
150
|
| `/task-tree drop <id>` | 丢弃某个节点 |
|
|
141
|
-
| `/task-tree
|
|
142
|
-
| `/task-tree resume` |
|
|
151
|
+
| `/task-tree pause` | 暂停:正在跑的工具跑完就停住,不再往下推进 |
|
|
152
|
+
| `/task-tree resume` | 继续:从停住的地方接着跑,不往会话里插消息 |
|
|
143
153
|
| `/task-tree reset` | 清掉本会话的计划树 |
|
|
144
154
|
|
|
145
155
|
## 配置
|
|
@@ -151,9 +161,30 @@ dsh plugin --profile web add dsh-tree-task-flow
|
|
|
151
161
|
| `enabled` | `false` | 总开关 |
|
|
152
162
|
| `autoContinue` | `false` | 模型停下时是否自动续行 |
|
|
153
163
|
| `maxAutoRounds` | `5` | 连续自动续行的轮次上限 |
|
|
154
|
-
| `promptOrder` | `
|
|
164
|
+
| `promptOrder` | `1800` | 工具说明段落的排序 |
|
|
155
165
|
| `rootDir` | `null` | 状态目录,默认 `$DSH_HOME/dsh-task-tree` |
|
|
156
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
|
+
|
|
157
188
|
## 自动续行的四道闸门
|
|
158
189
|
|
|
159
190
|
`autoContinue` 默认关闭,开着也只是**兜底**:`tree_task_done` 的返回文本里已经带了
|
|
@@ -169,6 +200,9 @@ dsh plugin --profile web add dsh-tree-task-flow
|
|
|
169
200
|
|
|
170
201
|
队列里还有排队输入时也不抢,让用户先说话。
|
|
171
202
|
|
|
203
|
+
另外,**暂停会一并压住它**:`/task-tree pause` 之后,即使模型自己停了下来,
|
|
204
|
+
兜底也不会把它重新拉起来;`/task-tree resume` 再放开。
|
|
205
|
+
|
|
172
206
|
## 状态文件
|
|
173
207
|
|
|
174
208
|
全部在 `$DSH_HOME/dsh-task-tree/` 下,**以 `sessionId` 为键**:
|
|
@@ -195,8 +229,9 @@ dsh plugin --profile web add dsh-tree-task-flow
|
|
|
195
229
|
2. **折叠是尽力而为的。** 游标被压缩遮掉时收不起来,但结果一定进上下文。
|
|
196
230
|
面板上看到某段过程还在,通常是这个原因。
|
|
197
231
|
|
|
198
|
-
3.
|
|
199
|
-
|
|
232
|
+
3. **模型看到的工具说明不随计划变化,也不复述工具清单。** 那一段只讲什么时候用
|
|
233
|
+
这组工具、完成时守什么规矩;每个工具的用法由它自己的 `description` 承担。
|
|
234
|
+
要了解计划就让模型调 `tree_task_status`。
|
|
200
235
|
|
|
201
236
|
4. **每次折叠,界面上的"系统提示词"卡片会重新渲染一次,但提示词一个字都没变。**
|
|
202
237
|
DSH 把"上下文被替换过"记成一次请求序列的边界,界面在 `reason` 不是 `change`
|
|
@@ -207,6 +242,10 @@ dsh plugin --profile web add dsh-tree-task-flow
|
|
|
207
242
|
5. **改需求用「丢弃 + 追加」,不要重建整棵树。** 丢掉的节点留在树里可查,
|
|
208
243
|
它和完成的节点会合进同一条汇总。
|
|
209
244
|
|
|
245
|
+
6. **暂停不留痕迹。** 暂停后模型看到的是"没有下一条请求",看不到任何"你被暂停了"
|
|
246
|
+
之类的提示;继续之后也不会有"继续"消息进上下文。想让模型知道中间发生过什么,
|
|
247
|
+
得自己发消息说。
|
|
248
|
+
|
|
210
249
|
## 不做的事
|
|
211
250
|
|
|
212
251
|
| 不做 | 原因 |
|
|
@@ -214,18 +253,22 @@ dsh plugin --profile web add dsh-tree-task-flow
|
|
|
214
253
|
| 资料 / 文件快照 / 记忆 | 上下文里值得留下的只有结果,其余靠模型自己重读 |
|
|
215
254
|
| 文件回退 / 撤销 | 改需求用「丢弃 + 追加」 |
|
|
216
255
|
| 多目标并行(多个根) | 单活动计划,数据结构已预留扩展 |
|
|
217
|
-
| 把计划内容注入提示词 |
|
|
256
|
+
| 把计划内容注入提示词 | 计划状态由 `tree_task_status` 现取,提示词里只放不随计划变化的说明 |
|
|
218
257
|
|
|
219
258
|
## 自检
|
|
220
259
|
|
|
221
|
-
|
|
260
|
+
六个自检脚本都不 import 任何 `@deepseek-ai/*` 运行时包——插件以 `link:` 方式安装时,
|
|
222
261
|
从插件目录往上找不到宿主作用域的包,一旦 import 就根本跑不起来。
|
|
262
|
+
`verify-client.mjs` 因此自带一套最小的 `window` / `document` / React 替身,
|
|
263
|
+
真去物化 `client.js`、真调一次 `apply`、真渲染一遍条目。
|
|
223
264
|
|
|
224
265
|
```powershell
|
|
225
266
|
node verify-entry.mjs # 入口装配:启用/未启用两条路径各注册了什么
|
|
226
|
-
node verify-tools.mjs # 工具层:schema、result
|
|
267
|
+
node verify-tools.mjs # 工具层:schema、result 必填、三级约束
|
|
227
268
|
node verify-region.mjs # 折叠行为:游标推进、降级追加、检查点提示
|
|
228
269
|
node verify-plan.mjs # 计划树纯逻辑:状态流转、自动完成、丢弃级联
|
|
270
|
+
node verify-pause.mjs # 暂停闸门:挂起、放行、取消信号、真人发言、会话隔离
|
|
271
|
+
node verify-client.mjs # 客户端条目:挂载点、样式注入、文案键集、四种渲染态
|
|
229
272
|
```
|
|
230
273
|
|
|
231
274
|
`verify-region.mjs` 用假 session 忠实复刻了 DSH surface 的三条硬规则
|
|
@@ -242,7 +285,7 @@ dsh plugin --profile web remove dsh-tree-task-flow
|
|
|
242
285
|
|
|
243
286
|
## 设计文档
|
|
244
287
|
|
|
245
|
-
- `docs/02-DSH插件开发方案.md` ——
|
|
288
|
+
- `docs/02-DSH插件开发方案.md` —— 完整设计:上下文组成、游标、折叠、检查点
|
|
246
289
|
- `docs/01-AIDesktop联动设计整理.md` —— 本插件最初的设计来源
|
|
247
290
|
|
|
248
291
|
## 许可
|