@gird/ccli 2.13.1 → 2.13.2
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 +1 -1
- package/dist/cli/repl/index.js +21 -0
- package/dist/cli/repl/index.js.map +1 -1
- package/dist/cli/run/index.js +3 -3
- package/dist/cli/run/index.js.map +1 -1
- package/dist/cli/run/todo-panel.js +168 -0
- package/dist/cli/run/todo-panel.js.map +1 -0
- package/dist/tools/todo.js +14 -0
- package/dist/tools/todo.js.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -42,7 +42,7 @@ ccli --role coder "review 这段代码" # 使用 coding 角色单次调用
|
|
|
42
42
|
- 对接支持思考(reasoning)的模型(如 DeepSeek-R1、Kimi、Qwen3-thinking)时,会在正文前用灰色流式展示「思考中…」;不支持的模型(如默认的 `qwen-plus`)自动跳过,不影响使用。
|
|
43
43
|
- `write` / `edit` 的内容超过 40 行会自动折叠为「…(还有 N 行,按 ctrl+o 展开)」;在空闲提示符下按 `ctrl+o` 会进入**全屏可滚动查看器**(alternate screen,类 `less`)查看完整内容,↑/↓/PgUp/PgDn/Home/End 滚动,`q` / `Enter` / `Esc` 退出后回到原提示符(未提交输入原样保留)。
|
|
44
44
|
- `write_file` 的内容会随模型生成**逐行实时流式**显示(`⚙ write_file …(生成中…)` 后一行行长出来,像看着模型写代码),不再等参数到齐才一次性铺出;`edit_file` 等工具仍走「摘要 + 折叠」。流式超过 40 行也会**自动停打**并显示「…(后续内容已折叠,按 ctrl+o 展开)」,在空闲提示符下按 `ctrl+o` 同样进入全屏可滚动查看器查看被隐藏的剩余行(主 / 子代理共用同一套,阈值与第 57 步折叠一致)。
|
|
45
|
-
- 多步骤任务时模型可用 `todo`
|
|
45
|
+
- 多步骤任务时模型可用 `todo` 工具把任务拆成**待办清单**(`[x]` 完成 / `[>]` 进行中 / `[ ]` 待办,按状态上色),一眼看到总共几步、走到哪;无副作用、不需确认。待办面板**常驻在终端底部**(滚动区域法固定,不进全屏、保留 scrollback),todo 一更新立即重绘;非 TTY 时回退为回合末打印;子代理的待办与主会话隔离,各自展示。
|
|
46
46
|
- 模型可调用 `task` 工具把**独立子任务委派给子代理**:子代理用独立上下文 + 全套工具(读/写/编辑/搜索/bash)自行完成,完成后只把结论返回主代理,避免中间过程污染主对话;子代理共享主会话的确认/「始终允许」/token 统计,且**不可再调用 task 继续委派**(防递归);子代理的 `write_file` 同样**逐行实时流式**展示,与主代理观感一致;可用 `subagent_type` 选 `explore`(只读探索,仅 `read_file`/`list_dir`/`grep`/`bash_output`,执行层硬边界保证不能改文件)或 `code`(编码,除 `task` 外全套工具),省略则为通用子代理;子代理运行时的工具调用 / 结果 / 流式写入 / 结论都会**缩进成 ` │ ` 嵌套块**(开始 / 结束横幅顶格作边界),与主代理输出区分开,折叠块按 `ctrl+o` 展开时同样带缩进。
|
|
47
47
|
- `/help` 查看可用命令,`/clear` 清空历史,`/undo [n]` 撤销最近 n 轮对话。
|
|
48
48
|
- `/compact` 把对话历史压缩成一段摘要,释放上下文(长对话逼近上限时用;仅在确有收益时替换)。上下文占比达到约 80% 时也会**自动压缩**。
|
package/dist/cli/repl/index.js
CHANGED
|
@@ -27,6 +27,8 @@ import { consumeFolded } from '../run/fold.js';
|
|
|
27
27
|
import { openFoldPager } from '../run/pager.js';
|
|
28
28
|
import { Permission, alwaysLabelFor } from '../run/permissions.js';
|
|
29
29
|
import { autoCompactIfNeeded } from '../slash/system/compact.js';
|
|
30
|
+
import { TodoPanel } from '../run/todo-panel.js';
|
|
31
|
+
import { onTodoChange } from '../../tools/todo.js';
|
|
30
32
|
const PROMPT = '› ';
|
|
31
33
|
export async function startRepl() {
|
|
32
34
|
// 启动即解析配置:缺失就明确报错退出,不进入循环
|
|
@@ -87,6 +89,15 @@ export async function startRepl() {
|
|
|
87
89
|
history: loadHistory(),
|
|
88
90
|
historySize: 1000,
|
|
89
91
|
});
|
|
92
|
+
// 常驻 todo 面板(仅 TTY 启用;非 TTY 回退为回合末打印面板)。
|
|
93
|
+
// 滚动区域法:底部固定为面板区,todo 一变化即时重绘。
|
|
94
|
+
const panel = process.stdout.isTTY ? new TodoPanel() : null;
|
|
95
|
+
const unsubTodo = panel
|
|
96
|
+
? onTodoChange((items) => panel.update(items))
|
|
97
|
+
: null;
|
|
98
|
+
if (panel) {
|
|
99
|
+
process.stdout.on('resize', () => panel.handleResize());
|
|
100
|
+
}
|
|
90
101
|
console.log(style.label(`${NAME} v${VERSION}`));
|
|
91
102
|
console.log(style.muted(`后端: ${config.provider} 模型: ${config.model} 密钥: ${maskKey(config.apiKey)}`));
|
|
92
103
|
for (const m of memories) {
|
|
@@ -100,6 +111,7 @@ export async function startRepl() {
|
|
|
100
111
|
const permission = new Permission();
|
|
101
112
|
const confirm = async (preview, opts) => {
|
|
102
113
|
console.log('\n' + preview);
|
|
114
|
+
panel?.suspend(); // confirm 要占用底部:先挂起面板(恢复全屏滚动)
|
|
103
115
|
rl.pause();
|
|
104
116
|
try {
|
|
105
117
|
return await confirmSelectChoice({
|
|
@@ -111,6 +123,7 @@ export async function startRepl() {
|
|
|
111
123
|
}
|
|
112
124
|
finally {
|
|
113
125
|
rl.resume();
|
|
126
|
+
panel?.resume(); // 重设滚动区 + 重绘面板
|
|
114
127
|
}
|
|
115
128
|
};
|
|
116
129
|
// 正在等待 AI 回复时置 true,避免这期间的输入被重复处理
|
|
@@ -133,12 +146,14 @@ export async function startRepl() {
|
|
|
133
146
|
rl.write(pending);
|
|
134
147
|
return;
|
|
135
148
|
}
|
|
149
|
+
panel?.suspend(); // pager 进 alternate screen 全屏:先挂起面板
|
|
136
150
|
rl.pause();
|
|
137
151
|
void openFoldPager({
|
|
138
152
|
lines: folded.lines,
|
|
139
153
|
gutter: folded.gutter,
|
|
140
154
|
}).then(() => {
|
|
141
155
|
rl.resume();
|
|
156
|
+
panel?.resume(); // 回到主屏后重设滚动区 + 重绘
|
|
142
157
|
rl.prompt(true);
|
|
143
158
|
if (pending)
|
|
144
159
|
rl.write(pending);
|
|
@@ -191,6 +206,7 @@ export async function startRepl() {
|
|
|
191
206
|
},
|
|
192
207
|
ask: (prompt) => new Promise((resolve) => rl.question(prompt, resolve)),
|
|
193
208
|
confirm: async (prompt) => {
|
|
209
|
+
panel?.suspend();
|
|
194
210
|
rl.pause();
|
|
195
211
|
try {
|
|
196
212
|
return await confirmSelect({
|
|
@@ -200,6 +216,7 @@ export async function startRepl() {
|
|
|
200
216
|
}
|
|
201
217
|
finally {
|
|
202
218
|
rl.resume();
|
|
219
|
+
panel?.resume();
|
|
203
220
|
}
|
|
204
221
|
},
|
|
205
222
|
reloadConfig: () => {
|
|
@@ -227,6 +244,7 @@ export async function startRepl() {
|
|
|
227
244
|
stats,
|
|
228
245
|
permission,
|
|
229
246
|
configMaxSteps: resolveMaxStepsPerTurn(config),
|
|
247
|
+
endPanel: !panel, // 有常驻面板时,回合末不再打印一次性面板
|
|
230
248
|
});
|
|
231
249
|
// 本回合结束,显示本次 token 消耗
|
|
232
250
|
console.log(style.muted(`\n${formatStats(stats, ai.getModel())}`));
|
|
@@ -239,6 +257,7 @@ export async function startRepl() {
|
|
|
239
257
|
}
|
|
240
258
|
finally {
|
|
241
259
|
busy = false;
|
|
260
|
+
panel?.beforePrompt(); // 光标定位到面板正上方,提示符贴住面板
|
|
242
261
|
rl.prompt();
|
|
243
262
|
}
|
|
244
263
|
}
|
|
@@ -256,6 +275,8 @@ export async function startRepl() {
|
|
|
256
275
|
});
|
|
257
276
|
// Ctrl-D(EOF)或 rl.close() 触发
|
|
258
277
|
rl.on('close', async () => {
|
|
278
|
+
unsubTodo?.();
|
|
279
|
+
panel?.dispose(); // 恢复全屏滚动、清掉面板行,再交给 shell
|
|
259
280
|
saveLastSession(history);
|
|
260
281
|
if (mcp) {
|
|
261
282
|
await mcp.closeAll();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/cli/repl/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAChD,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AAC3C,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AACjD,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AACpC,OAAO,EACH,UAAU,EACV,OAAO,EACP,qBAAqB,EACrB,aAAa,EACb,sBAAsB,GACzB,MAAM,wBAAwB,CAAC;AAChC,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAClD,OAAO,EACH,cAAc,EACd,mBAAmB,EACnB,YAAY,EACZ,WAAW,GACd,MAAM,wBAAwB,CAAC;AAChC,OAAO,EAAE,cAAc,EAAoB,MAAM,mBAAmB,CAAC;AACrE,OAAO,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAChE,OAAO,EACH,oBAAoB,EACpB,qBAAqB,GACxB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AACtD,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAC1D,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AACzC,OAAO,EAAE,aAAa,EAAE,mBAAmB,EAAsB,MAAM,sBAAsB,CAAC;AAC9F,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,EAAE,gBAAgB,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AACpE,OAAO,EACH,UAAU,EAEV,WAAW,GAEd,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,YAAY,EAAgB,MAAM,iBAAiB,CAAC;AAC7D,OAAO,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAC/C,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACnE,OAAO,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/cli/repl/index.ts"],"names":[],"mappings":"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"}
|
package/dist/cli/run/index.js
CHANGED
|
@@ -26,7 +26,7 @@ function safeParse(argsJson) {
|
|
|
26
26
|
* 直到模型不再调用工具(给出最终回答)或达到轮数上限。
|
|
27
27
|
*/
|
|
28
28
|
export async function runAgentTurn(options) {
|
|
29
|
-
const { ai, history, confirm, stats, print = process.stdout.write.bind(process.stdout), maxRounds, requireToolsFirstRound, onToolCall, onToolResult, permission, configMaxSteps, todoPanel = true, } = options;
|
|
29
|
+
const { ai, history, confirm, stats, print = process.stdout.write.bind(process.stdout), maxRounds, requireToolsFirstRound, onToolCall, onToolResult, permission, configMaxSteps, todoPanel = true, endPanel = true, } = options;
|
|
30
30
|
// 上限优先级:显式 maxRounds(/agent、/goal)> configMaxSteps(config 解析)> 默认 50。
|
|
31
31
|
// limit <= 0 表示不限(跳过检查),对齐 config maxStepsPerTurn=0 语义。
|
|
32
32
|
const limit = maxRounds ?? configMaxSteps ?? DEFAULT_MAX_STEPS;
|
|
@@ -83,7 +83,7 @@ export async function runAgentTurn(options) {
|
|
|
83
83
|
if (turn.toolCalls.length === 0) {
|
|
84
84
|
print('\n');
|
|
85
85
|
// 回合结束:渲染待办面板(提示符上方常驻),无待办时为空串
|
|
86
|
-
const panel = todoPanel ? renderTodoPanel() : '';
|
|
86
|
+
const panel = todoPanel && endPanel ? renderTodoPanel() : '';
|
|
87
87
|
if (panel)
|
|
88
88
|
print(panel);
|
|
89
89
|
history.push({ role: 'assistant', content: turn.content });
|
|
@@ -170,7 +170,7 @@ export async function runAgentTurn(options) {
|
|
|
170
170
|
print(style.warn(`\n(已达到工具调用轮数上限 ${limit}。如需更高,请在 config 设 maxStepsPerTurn,或设 0 为不限。)\n`));
|
|
171
171
|
}
|
|
172
172
|
// 触顶收尾同样渲染待办面板
|
|
173
|
-
const tailPanel = todoPanel ? renderTodoPanel() : '';
|
|
173
|
+
const tailPanel = todoPanel && endPanel ? renderTodoPanel() : '';
|
|
174
174
|
if (tailPanel)
|
|
175
175
|
print(tailPanel);
|
|
176
176
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/cli/run/index.ts"],"names":[],"mappings":"AASA,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AACpC,OAAO,EACH,WAAW,EACX,OAAO,EACP,gBAAgB,EAChB,YAAY,GAEf,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAC3C,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AACtD,OAAO,EAAE,UAAU,EAAc,MAAM,kBAAkB,CAAC;AAC1D,OAAO,EACH,cAAc,EACd,gBAAgB,EAChB,aAAa,GAChB,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAC5D,OAAO,EAAE,sBAAsB,EAAE,MAAM,mBAAmB,CAAC;AAE3D,OAAO,EACH,oBAAoB,EACpB,cAAc,GAEjB,MAAM,mBAAmB,CAAC;AAE3B;kDACkD;AAClD,MAAM,iBAAiB,GAAG,EAAE,CAAC;AAW7B;;GAEG;AACH,SAAS,SAAS,CAAC,QAAgB;IAC/B,IAAI,CAAC;QACD,OAAO,IAAI,CAAC,KAAK,CAAC,QAAQ,IAAI,IAAI,CAAC,CAAC;IACxC,CAAC;IAAC,MAAM,CAAC;QACL,OAAO,EAAE,CAAC;IACd,CAAC;AACL,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/cli/run/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,168 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 常驻 todo 面板 —— 把待办钉在终端底部、todo 一更新就即时重绘。
|
|
3
|
+
*
|
|
4
|
+
* 实现方式(滚动区域法,不进 alternate screen,保留 scrollback):
|
|
5
|
+
* 用 CSI 滚动区 `\x1b[1;{rows-H}r` 把屏幕底部 H 行划出滚动区之外,
|
|
6
|
+
* 面板内容用绝对定位 `\x1b[{row};1H` 直接写(保存/恢复光标 `\x1b7` / `\x1b8`,
|
|
7
|
+
* 可在流式输出中途安全重绘)。
|
|
8
|
+
*
|
|
9
|
+
* 固定高度 H = 8(分隔线 1 + 标题 1 + 6 个待办槽),todo 超过 6 项时第 6 槽
|
|
10
|
+
* 显示「…还有 N 项」。高度固定 → 滚动区只设一次,不随项数变化抖动。
|
|
11
|
+
*
|
|
12
|
+
* 避让约定(由 REPL 调用):
|
|
13
|
+
* - confirm / pager 等要占用底部时 suspend()(恢复全屏滚动),用完 resume() 重设 + 重绘;
|
|
14
|
+
* - 回合结束打印提示符前 beforePrompt() 把光标定位到滚动区底行;
|
|
15
|
+
* - 会话结束 dispose() 清掉面板、恢复全屏滚动。
|
|
16
|
+
*/
|
|
17
|
+
import { style } from '../style.js';
|
|
18
|
+
/** 面板待办槽位数(超出时最后一槽显示「…还有 N 项」)。 */
|
|
19
|
+
const ITEM_SLOTS = 6;
|
|
20
|
+
/** 面板固定高度(行):分隔线 1 + 标题 1 + 待办槽 6。 */
|
|
21
|
+
export const TODO_PANEL_HEIGHT = ITEM_SLOTS + 2;
|
|
22
|
+
const MARK = {
|
|
23
|
+
pending: '[ ]',
|
|
24
|
+
in_progress: '[>]',
|
|
25
|
+
done: '[x]',
|
|
26
|
+
};
|
|
27
|
+
function colorize(status, text) {
|
|
28
|
+
if (status === 'done')
|
|
29
|
+
return style.done(text);
|
|
30
|
+
if (status === 'in_progress')
|
|
31
|
+
return style.step(text);
|
|
32
|
+
return style.muted(text);
|
|
33
|
+
}
|
|
34
|
+
export class TodoPanel {
|
|
35
|
+
out;
|
|
36
|
+
active = false;
|
|
37
|
+
suspended = false;
|
|
38
|
+
items = [];
|
|
39
|
+
rows;
|
|
40
|
+
cols;
|
|
41
|
+
constructor(out = (s) => process.stdout.write(s)) {
|
|
42
|
+
this.out = out;
|
|
43
|
+
this.rows = process.stdout.rows ?? 24;
|
|
44
|
+
this.cols = process.stdout.columns ?? 80;
|
|
45
|
+
}
|
|
46
|
+
get isActive() {
|
|
47
|
+
return this.active;
|
|
48
|
+
}
|
|
49
|
+
/** todo 快照变化:按需启用 / 重绘 / 停用面板。 */
|
|
50
|
+
update(items) {
|
|
51
|
+
this.items = items;
|
|
52
|
+
if (items.length === 0) {
|
|
53
|
+
if (this.active)
|
|
54
|
+
this.deactivate();
|
|
55
|
+
return;
|
|
56
|
+
}
|
|
57
|
+
if (!this.active) {
|
|
58
|
+
this.activate();
|
|
59
|
+
}
|
|
60
|
+
else if (!this.suspended) {
|
|
61
|
+
this.paint();
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
/** 终端尺寸变化:重设滚动区 + 重绘。 */
|
|
65
|
+
handleResize() {
|
|
66
|
+
this.rows = process.stdout.rows ?? 24;
|
|
67
|
+
this.cols = process.stdout.columns ?? 80;
|
|
68
|
+
if (this.active && !this.suspended) {
|
|
69
|
+
this.setScrollRegion();
|
|
70
|
+
this.paint();
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
/** 临时挂起(confirm / pager 占用底部):恢复全屏滚动,面板行内容暂留。 */
|
|
74
|
+
suspend() {
|
|
75
|
+
if (!this.active || this.suspended)
|
|
76
|
+
return;
|
|
77
|
+
this.suspended = true;
|
|
78
|
+
this.out('\x1b[r');
|
|
79
|
+
}
|
|
80
|
+
/** 从挂起恢复:重设滚动区 + 重绘(覆盖可能被污染的底部行)。 */
|
|
81
|
+
resume() {
|
|
82
|
+
if (!this.active || !this.suspended)
|
|
83
|
+
return;
|
|
84
|
+
this.suspended = false;
|
|
85
|
+
this.setScrollRegion();
|
|
86
|
+
this.paint();
|
|
87
|
+
}
|
|
88
|
+
/**
|
|
89
|
+
* 回合输出结束、打印提示符之前调用:
|
|
90
|
+
* 在滚动区底行换一次行(滚动区内容上滚、光标留在底行新空行),再定位到该行,
|
|
91
|
+
* 保证随后 rl.prompt() 的提示符恰好贴在面板上方。
|
|
92
|
+
*/
|
|
93
|
+
beforePrompt() {
|
|
94
|
+
if (!this.active || this.suspended)
|
|
95
|
+
return;
|
|
96
|
+
this.out('\n');
|
|
97
|
+
this.out(`\x1b[${this.scrollBottom};1H`);
|
|
98
|
+
}
|
|
99
|
+
/** 会话结束:恢复全屏滚动、清掉面板行、光标送到最底行交给 shell。 */
|
|
100
|
+
dispose() {
|
|
101
|
+
if (!this.active)
|
|
102
|
+
return;
|
|
103
|
+
this.out('\x1b[r');
|
|
104
|
+
this.clearPanelLines();
|
|
105
|
+
this.out(`\x1b[${this.rows};1H`);
|
|
106
|
+
this.active = false;
|
|
107
|
+
this.suspended = false;
|
|
108
|
+
}
|
|
109
|
+
/** 滚动区下沿行号;面板占其下方 PANEL_HEIGHT 行。 */
|
|
110
|
+
get scrollBottom() {
|
|
111
|
+
return this.rows - TODO_PANEL_HEIGHT;
|
|
112
|
+
}
|
|
113
|
+
activate() {
|
|
114
|
+
this.active = true;
|
|
115
|
+
// 先空出底部 PANEL_HEIGHT 行(现有内容整体上滚),再划出滚动区
|
|
116
|
+
this.out('\n'.repeat(TODO_PANEL_HEIGHT));
|
|
117
|
+
this.setScrollRegion();
|
|
118
|
+
this.paint();
|
|
119
|
+
// 回到输出区底行,后续输出从这里继续
|
|
120
|
+
this.out(`\x1b[${this.scrollBottom};1H`);
|
|
121
|
+
}
|
|
122
|
+
deactivate() {
|
|
123
|
+
this.out('\x1b7'); // 保存当前光标(输出位置)
|
|
124
|
+
this.out('\x1b[r'); // 恢复全屏滚动
|
|
125
|
+
this.clearPanelLines(); // 清掉面板行
|
|
126
|
+
this.out('\x1b8'); // 回到输出位置,下方已腾出空行
|
|
127
|
+
this.active = false;
|
|
128
|
+
}
|
|
129
|
+
setScrollRegion() {
|
|
130
|
+
this.out(`\x1b[1;${this.scrollBottom}r`);
|
|
131
|
+
}
|
|
132
|
+
clearPanelLines() {
|
|
133
|
+
for (let i = 1; i <= TODO_PANEL_HEIGHT; i++) {
|
|
134
|
+
this.out(`\x1b[${this.scrollBottom + i};1H\x1b[2K`);
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
/** 面板各行内容(固定 TODO_PANEL_HEIGHT 行,不足补空行)。 */
|
|
138
|
+
renderLines() {
|
|
139
|
+
const width = Math.min(50, Math.max(20, this.cols - 2));
|
|
140
|
+
const bar = style.muted('─'.repeat(width));
|
|
141
|
+
const done = this.items.filter((t) => t.status === 'done').length;
|
|
142
|
+
const inProgress = this.items.filter((t) => t.status === 'in_progress').length;
|
|
143
|
+
const title = style.tool(`待办(${done}/${this.items.length} 完成${inProgress > 0 ? ` · ${inProgress} 进行中` : ''})`);
|
|
144
|
+
const lines = [bar, ` ${title}`];
|
|
145
|
+
const overflow = this.items.length - ITEM_SLOTS;
|
|
146
|
+
const shown = overflow > 0 ? ITEM_SLOTS - 1 : this.items.length;
|
|
147
|
+
for (let i = 0; i < shown; i++) {
|
|
148
|
+
const t = this.items[i];
|
|
149
|
+
lines.push(` ${colorize(t.status, `${MARK[t.status]} ${t.content}`)}`);
|
|
150
|
+
}
|
|
151
|
+
if (overflow > 0) {
|
|
152
|
+
lines.push(style.muted(` …还有 ${overflow} 项`));
|
|
153
|
+
}
|
|
154
|
+
while (lines.length < TODO_PANEL_HEIGHT)
|
|
155
|
+
lines.push('');
|
|
156
|
+
return lines;
|
|
157
|
+
}
|
|
158
|
+
/** 重绘面板(保存 / 恢复光标,输出流动中途也可安全调用)。 */
|
|
159
|
+
paint() {
|
|
160
|
+
const lines = this.renderLines();
|
|
161
|
+
this.out('\x1b7');
|
|
162
|
+
for (let i = 0; i < TODO_PANEL_HEIGHT; i++) {
|
|
163
|
+
this.out(`\x1b[${this.scrollBottom + 1 + i};1H\x1b[2K${lines[i]}`);
|
|
164
|
+
}
|
|
165
|
+
this.out('\x1b8');
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
//# sourceMappingURL=todo-panel.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"todo-panel.js","sourceRoot":"","sources":["../../../src/cli/run/todo-panel.ts"],"names":[],"mappings":"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"}
|
package/dist/tools/todo.js
CHANGED
|
@@ -17,6 +17,19 @@ export function resetTodos() {
|
|
|
17
17
|
/** 直接设置待办快照(供子代理隔离:进入时保存、退出时恢复)。 */
|
|
18
18
|
export function setTodos(items) {
|
|
19
19
|
currentTodos = items;
|
|
20
|
+
notify();
|
|
21
|
+
}
|
|
22
|
+
const listeners = new Set();
|
|
23
|
+
/** 订阅 todo 变化(供常驻面板重绘);返回取消订阅函数。 */
|
|
24
|
+
export function onTodoChange(fn) {
|
|
25
|
+
listeners.add(fn);
|
|
26
|
+
return () => {
|
|
27
|
+
listeners.delete(fn);
|
|
28
|
+
};
|
|
29
|
+
}
|
|
30
|
+
function notify() {
|
|
31
|
+
for (const fn of listeners)
|
|
32
|
+
fn(currentTodos);
|
|
20
33
|
}
|
|
21
34
|
/**
|
|
22
35
|
* 渲染「提示符上方持久面板」文本(含上下分隔线,上色)。
|
|
@@ -116,6 +129,7 @@ export const todoTool = {
|
|
|
116
129
|
status: normalizeStatus(it.status),
|
|
117
130
|
}));
|
|
118
131
|
currentTodos = items;
|
|
132
|
+
notify();
|
|
119
133
|
// 面板模式(ctx.todoPanel=true):主会话由 runAgentTurn 在回合结束统一
|
|
120
134
|
// 渲染「提示符上方持久面板」,这里不再即时打印,避免重复展示。
|
|
121
135
|
const panelMode = ctx?.todoPanel ?? false;
|
package/dist/tools/todo.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"todo.js","sourceRoot":"","sources":["../../src/tools/todo.ts"],"names":[],"mappings":"AAUA,OAAO,EAAE,KAAK,EAAE,MAAM,iBAAiB,CAAC;AAUxC,MAAM,cAAc,GAA8B;IAC9C,SAAS;IACT,aAAa;IACb,MAAM;CACT,CAAC;AAEF,4BAA4B;AAC5B,IAAI,YAAY,GAAe,EAAE,CAAC;AAElC,0BAA0B;AAC1B,MAAM,UAAU,QAAQ;IACpB,OAAO,YAAY,CAAC;AACxB,CAAC;AAED,iBAAiB;AACjB,MAAM,UAAU,UAAU;IACtB,YAAY,GAAG,EAAE,CAAC;AACtB,CAAC;AAED,oCAAoC;AACpC,MAAM,UAAU,QAAQ,CAAC,KAAiB;IACtC,YAAY,GAAG,KAAK,CAAC;
|
|
1
|
+
{"version":3,"file":"todo.js","sourceRoot":"","sources":["../../src/tools/todo.ts"],"names":[],"mappings":"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"}
|