@gird/ccli 2.15.0 → 2.18.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.
Files changed (91) hide show
  1. package/README.md +22 -6
  2. package/dist/agent/ai.js +10 -345
  3. package/dist/agent/ai.js.map +1 -1
  4. package/dist/agent/providers/anthropic.js +258 -0
  5. package/dist/agent/providers/anthropic.js.map +1 -0
  6. package/dist/agent/providers/gemini.js +14 -0
  7. package/dist/agent/providers/gemini.js.map +1 -0
  8. package/dist/agent/providers/openai.js +110 -0
  9. package/dist/agent/providers/openai.js.map +1 -0
  10. package/dist/agent/tool-projection.js +57 -0
  11. package/dist/agent/tool-projection.js.map +1 -0
  12. package/dist/cli/args/index.js +4 -0
  13. package/dist/cli/args/index.js.map +1 -1
  14. package/dist/cli/clipboard-image.js +51 -0
  15. package/dist/cli/clipboard-image.js.map +1 -0
  16. package/dist/cli/image-compress.js +62 -0
  17. package/dist/cli/image-compress.js.map +1 -0
  18. package/dist/cli/image-reference.js +190 -0
  19. package/dist/cli/image-reference.js.map +1 -0
  20. package/dist/cli/repl/index.js +110 -60
  21. package/dist/cli/repl/index.js.map +1 -1
  22. package/dist/cli/run/event-renderer.js +57 -0
  23. package/dist/cli/run/event-renderer.js.map +1 -0
  24. package/dist/cli/run/hooks.js +58 -19
  25. package/dist/cli/run/hooks.js.map +1 -1
  26. package/dist/cli/run/index.js +218 -9
  27. package/dist/cli/run/index.js.map +1 -1
  28. package/dist/cli/run/task.js +58 -1
  29. package/dist/cli/run/task.js.map +1 -1
  30. package/dist/cli/run/todo-panel.js +13 -0
  31. package/dist/cli/run/todo-panel.js.map +1 -1
  32. package/dist/cli/session/checkpoint.js +252 -0
  33. package/dist/cli/session/checkpoint.js.map +1 -0
  34. package/dist/cli/session/index.js +1 -1
  35. package/dist/cli/session/index.js.map +1 -1
  36. package/dist/cli/slash/index.js +26 -2
  37. package/dist/cli/slash/index.js.map +1 -1
  38. package/dist/cli/slash/session/load.js +3 -0
  39. package/dist/cli/slash/session/load.js.map +1 -1
  40. package/dist/cli/slash/session/replay.js +118 -0
  41. package/dist/cli/slash/session/replay.js.map +1 -0
  42. package/dist/cli/slash/session/save.js +1 -0
  43. package/dist/cli/slash/session/save.js.map +1 -1
  44. package/dist/cli/slash/system/agent.js +38 -104
  45. package/dist/cli/slash/system/agent.js.map +1 -1
  46. package/dist/cli/slash/system/compact.js +26 -5
  47. package/dist/cli/slash/system/compact.js.map +1 -1
  48. package/dist/cli/slash/system/goal.js +34 -34
  49. package/dist/cli/slash/system/goal.js.map +1 -1
  50. package/dist/cli/slash/system/help.js +3 -0
  51. package/dist/cli/slash/system/help.js.map +1 -1
  52. package/dist/cli/slash/system/plan.js +140 -0
  53. package/dist/cli/slash/system/plan.js.map +1 -0
  54. package/dist/cli/slash/system/revert.js +133 -0
  55. package/dist/cli/slash/system/revert.js.map +1 -0
  56. package/dist/config/config.js +57 -4
  57. package/dist/config/config.js.map +1 -1
  58. package/dist/config/plugins.js +378 -0
  59. package/dist/config/plugins.js.map +1 -0
  60. package/dist/config/skills.js +68 -6
  61. package/dist/config/skills.js.map +1 -1
  62. package/dist/harness/index.js +334 -0
  63. package/dist/harness/index.js.map +1 -0
  64. package/dist/harness/records.js +98 -0
  65. package/dist/harness/records.js.map +1 -0
  66. package/dist/index.js +87 -42
  67. package/dist/index.js.map +1 -1
  68. package/dist/tools/bash-background.js +2 -2
  69. package/dist/tools/bash-background.js.map +1 -1
  70. package/dist/tools/bash.js +3 -2
  71. package/dist/tools/bash.js.map +1 -1
  72. package/dist/tools/edit-file.js +8 -2
  73. package/dist/tools/edit-file.js.map +1 -1
  74. package/dist/tools/glob.js +4 -3
  75. package/dist/tools/glob.js.map +1 -1
  76. package/dist/tools/grep.js +4 -3
  77. package/dist/tools/grep.js.map +1 -1
  78. package/dist/tools/index.js +20 -0
  79. package/dist/tools/index.js.map +1 -1
  80. package/dist/tools/list-dir.js +3 -2
  81. package/dist/tools/list-dir.js.map +1 -1
  82. package/dist/tools/read-file.js +3 -2
  83. package/dist/tools/read-file.js.map +1 -1
  84. package/dist/tools/shared.js.map +1 -1
  85. package/dist/tools/todo.js +17 -5
  86. package/dist/tools/todo.js.map +1 -1
  87. package/dist/tools/web-fetch.js +95 -0
  88. package/dist/tools/web-fetch.js.map +1 -0
  89. package/dist/tools/write-file.js +8 -2
  90. package/dist/tools/write-file.js.map +1 -1
  91. package/package.json +1 -1
@@ -1,22 +1,32 @@
1
1
  /**
2
2
  * 生命周期钩子(hooks)运行器。
3
3
  *
4
- * 一期支持两个事件:
4
+ * 支持的事件:
5
5
  * - PreToolUse:工具执行前触发,可拦截(退出码 2)
6
- * - PostToolUse:工具成功后触发,只观察
7
- * - PostToolUseFailure:工具失败后触发,只观察
6
+ * - PostToolUse / PostToolUseFailure:工具成功 / 失败后触发,只观察
7
+ * - UserPromptSubmit:用户输入发送给模型前,可拦截;stdout 作为补充上下文注入
8
+ * - SessionStart / SessionEnd:会话开始 / 结束,只观察
9
+ * - Stop:代理回合结束(最终回答 / 轮数触顶),只观察
10
+ * - PreCompact:上下文压缩前(手动 /compact 或自动),只观察
11
+ * - SubagentStart / SubagentStop:task 子代理开始 / 结束,只观察
8
12
  *
9
13
  * 协议(对齐 Claude Code):
10
- * - 通过 stdin 给 hook 进程喂 JSON:
11
- * { hook_event_name, cwd, tool_name, tool_input, tool_response? }
12
- * - 退出码 0 = 放行(stdout 打印给用户);2 = 拦截(stderr 作为原因喂回模型);
14
+ * - 通过 stdin 给 hook 进程喂 JSON:{ hook_event_name, cwd, ...事件特有字段 }
15
+ * - 退出码 0 = 放行(stdout 汇总到 result.output,由调用方决定打印还是注入);
16
+ * 2 = 拦截(仅可拦截事件生效;stderr 作为原因);
13
17
  * 其它非零 / 超时 / 启动失败 = fail open:打印警告但放行。
14
18
  * - 同一事件配了多个 hook 时按声明顺序执行;拦截后短路,后续不再执行。
19
+ * - matcher 只对工具事件(PreToolUse / PostToolUse*)生效,其余事件忽略 matcher。
15
20
  *
16
21
  * 安全底线:每次执行都打印一行透明日志(命令可见),让 hook 行为对用户可观测。
17
22
  */
18
23
  import { spawn } from 'node:child_process';
19
24
  import { style } from '../style.js';
25
+ /** 可拦截的事件(退出码 2 有意义);其余事件的退出码 2 按出错处理(fail open)。 */
26
+ const BLOCKABLE_EVENTS = new Set([
27
+ 'PreToolUse',
28
+ 'UserPromptSubmit',
29
+ ]);
20
30
  const DEFAULT_TIMEOUT_SEC = 10;
21
31
  /**
22
32
  * matcher 匹配规则:
@@ -38,7 +48,7 @@ export function matchHook(matcher, toolName) {
38
48
  });
39
49
  }
40
50
  /** 执行单个 hook:spawn shell,喂 stdin JSON,按退出码判定结果。 */
41
- function runOneHook(def, payload) {
51
+ function runOneHook(def, payload, blockable) {
42
52
  return new Promise((resolve) => {
43
53
  const timeoutSec = def.timeout ?? DEFAULT_TIMEOUT_SEC;
44
54
  const shell = process.env.SHELL || '/bin/bash';
@@ -80,13 +90,14 @@ function runOneHook(def, payload) {
80
90
  if (code === 0) {
81
91
  finish({ action: 'allow', message: stdout.trim() || undefined });
82
92
  }
83
- else if (code === 2) {
93
+ else if (code === 2 && blockable) {
84
94
  finish({
85
95
  action: 'block',
86
96
  message: stderr.trim() || '(hook 未给出原因)',
87
97
  });
88
98
  }
89
99
  else {
100
+ // 不可拦截事件的退出码 2、以及其它非零码,统一按出错 fail open
90
101
  const detail = stderr.trim();
91
102
  finish({
92
103
  action: 'error',
@@ -101,7 +112,7 @@ function runOneHook(def, payload) {
101
112
  }
102
113
  /**
103
114
  * 执行某个事件下所有匹配的 hook。
104
- * @param defs 配置中的全部 hook(内部按 event + matcher 过滤)
115
+ * @param defs 配置中的全部 hook(内部按 event 过滤;工具事件再按 matcher 过滤)
105
116
  * @param event 触发事件
106
117
  * @param payload 事件载荷(不含 hook_event_name)
107
118
  * @param print 输出回调(子代理场景传缩进 print)
@@ -109,26 +120,54 @@ function runOneHook(def, payload) {
109
120
  export async function runHooks(defs, event, payload, print = (c) => process.stdout.write(c)) {
110
121
  if (!defs || defs.length === 0)
111
122
  return { blocked: false };
112
- const matched = defs.filter((d) => d.event === event && matchHook(d.matcher, payload.tool_name));
123
+ const matched = defs.filter((d) => d.event === event &&
124
+ (payload.tool_name === undefined ||
125
+ matchHook(d.matcher, payload.tool_name)));
126
+ const blockable = BLOCKABLE_EVENTS.has(event);
127
+ const outputs = [];
128
+ const collect = () => ({
129
+ blocked: false,
130
+ output: outputs.length > 0 ? outputs.join('\n') : undefined,
131
+ });
113
132
  for (const def of matched) {
114
133
  print(style.muted(`\n⏎ [hook] ${event} ← ${def.command}\n`));
115
- const outcome = await runOneHook(def, {
116
- hook_event_name: event,
117
- ...payload,
118
- });
134
+ const outcome = await runOneHook(def, { hook_event_name: event, ...payload }, blockable);
119
135
  if (outcome.action === 'allow') {
120
136
  if (outcome.message)
121
- print(outcome.message + '\n');
137
+ outputs.push(outcome.message);
122
138
  continue;
123
139
  }
124
140
  if (outcome.action === 'error') {
125
141
  print(style.warn(`[hook] 执行失败(已放行):${outcome.message}\n`));
126
142
  continue;
127
143
  }
128
- // 拦截:告知用户并短路,原因由调用方喂回模型
129
- print(style.warn(`[hook] 已拦截 ${payload.tool_name}:${outcome.message}\n`));
130
- return { blocked: true, reason: outcome.message };
144
+ // 拦截:告知用户并短路,原因由调用方处理(喂回模型或拒绝输入)
145
+ const target = payload.tool_name ?? event;
146
+ print(style.warn(`[hook] 已拦截 ${target}:${outcome.message}\n`));
147
+ return {
148
+ blocked: true,
149
+ reason: outcome.message,
150
+ output: outputs.length > 0 ? outputs.join('\n') : undefined,
151
+ };
152
+ }
153
+ return collect();
154
+ }
155
+ /**
156
+ * 用户输入提交钩子(UserPromptSubmit)。
157
+ * - 被拦截:返回 blocked,调用方应放弃本次输入(REPL 回到提示符、非交互退出);
158
+ * - 放行:把所有 hook 的 stdout 作为补充上下文追加到 prompt 末尾返回。
159
+ */
160
+ export async function runUserPromptHooks(defs, cwd, prompt, print) {
161
+ const res = await runHooks(defs, 'UserPromptSubmit', { cwd, prompt }, print);
162
+ if (res.blocked) {
163
+ return { blocked: true, reason: res.reason, prompt };
164
+ }
165
+ if (res.output) {
166
+ return {
167
+ blocked: false,
168
+ prompt: `${prompt}\n\n[hook 补充上下文]\n${res.output}`,
169
+ };
131
170
  }
132
- return { blocked: false };
171
+ return { blocked: false, prompt };
133
172
  }
134
173
  //# sourceMappingURL=hooks.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"hooks.js","sourceRoot":"","sources":["../../../src/cli/run/hooks.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"hooks.js","sourceRoot":"","sources":["../../../src/cli/run/hooks.ts"],"names":[],"mappings":"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"}
@@ -1,7 +1,7 @@
1
1
  import { style } from '../style.js';
2
2
  import { executeTool, getTool, registerMcpTools, registerTool, textToolResult, } from '../../tools/index.js';
3
3
  import { createTaskTool } from './task.js';
4
- import { renderTodoPanel } from '../../tools/todo.js';
4
+ import { getTodos, renderTodoPanel, resetTodos } from '../../tools/todo.js';
5
5
  import { ruleKeyFor } from './permissions.js';
6
6
  import { formatToolCall, formatToolResult, toolCallLines, } from './format.js';
7
7
  import { LineFoldPrinter, renderWithFold } from './fold.js';
@@ -30,6 +30,18 @@ const REPEAT_TOOL_REMINDER = '\n\n<system-reminder>\n' +
30
30
  const REPEAT_TOOL_STOP_REMINDER = '\n\n<system-reminder>\n' +
31
31
  '你已经多次重复同一个工具调用且没有取得进展。下一步不要继续调用这个完全相同的工具参数;请总结当前卡点,或改用不同工具/参数继续。\n' +
32
32
  '</system-reminder>';
33
+ /** 连续多少轮没写 todo(且还有未完成项)后,往工具结果里追加待办更新提醒。 */
34
+ const TODO_STALE_ROUNDS = 8;
35
+ const TODO_STALE_REMINDER = '\n\n<system-reminder>\n' +
36
+ '待办清单已多轮未更新。请用 todo 工具刷新进度:完成的项标 done,下一项标 in_progress,同时只保留一项 in_progress。' +
37
+ '若清单已与当前工作不符,请重写或清空它。\n' +
38
+ '</system-reminder>';
39
+ /**
40
+ * 生成工具调用的稳定指纹。
41
+ *
42
+ * 模型有时会把 JSON 参数键顺序换一下;这里先排序再 stringify,
43
+ * 让“同一个工具 + 同一组参数”能被可靠识别,用于重复调用提醒。
44
+ */
33
45
  function canonicalToolArgs(argsJson) {
34
46
  try {
35
47
  return JSON.stringify(sortJson(JSON.parse(argsJson || '{}')));
@@ -38,6 +50,12 @@ function canonicalToolArgs(argsJson) {
38
50
  return argsJson;
39
51
  }
40
52
  }
53
+ /**
54
+ * 递归排序 JSON 对象的 key。
55
+ *
56
+ * 只改变对象键顺序,不改变数组顺序和值本身;这样既能稳定比较,
57
+ * 又不会误把语义不同的数组参数视为相同。
58
+ */
41
59
  function sortJson(value) {
42
60
  if (Array.isArray(value))
43
61
  return value.map(sortJson);
@@ -50,6 +68,12 @@ function sortJson(value) {
50
68
  }
51
69
  return value;
52
70
  }
71
+ /**
72
+ * 根据连续重复次数选择给模型的提醒文案。
73
+ *
74
+ * 3 次开始轻提醒,5 次升级为强提醒;提醒只写入 tool result 给模型看,
75
+ * 不改变用户侧的工具输出。
76
+ */
53
77
  function repeatedToolReminder(repeatCount) {
54
78
  if (repeatCount >= 5)
55
79
  return REPEAT_TOOL_STOP_REMINDER;
@@ -57,6 +81,19 @@ function repeatedToolReminder(repeatCount) {
57
81
  return REPEAT_TOOL_REMINDER;
58
82
  return '';
59
83
  }
84
+ /** records:单条工具结果记录的字符上限,避免超大 bash 输出撑爆 JSONL。 */
85
+ const RECORD_OUTPUT_CAP = 50_000;
86
+ function capForRecord(s) {
87
+ return s.length > RECORD_OUTPUT_CAP
88
+ ? s.slice(0, RECORD_OUTPUT_CAP) + '…(记录截断)'
89
+ : s;
90
+ }
91
+ /**
92
+ * 把结构化工具结果转换成喂给模型的文本。
93
+ *
94
+ * 失败结果会加一个显式 system 标记,帮助模型区分“命令正常输出了一段错误文本”
95
+ * 和“工具执行真的失败了”,从而更容易自动修正下一步。
96
+ */
60
97
  function toolResultForModel(result, repeatCount) {
61
98
  const prefix = result.isError ? `${TOOL_ERROR_STATUS}\n` : '';
62
99
  return `${prefix}${result.output}${repeatedToolReminder(repeatCount)}`;
@@ -66,30 +103,64 @@ function toolResultForModel(result, repeatCount) {
66
103
  * 直到模型不再调用工具(给出最终回答)或达到轮数上限。
67
104
  */
68
105
  export async function runAgentTurn(options) {
69
- const { ai, history, confirm, stats, print = process.stdout.write.bind(process.stdout), maxRounds, requireToolsFirstRound, onToolCall, onToolResult, permission, configMaxSteps, todoPanel = true, endPanel = true, hooks, } = options;
106
+ const { ai, history, confirm, stats, print = process.stdout.write.bind(process.stdout), cwd = process.cwd(), maxRounds, requireToolsFirstRound, continueOnPendingTodos, allowedTools, onReasoning, onHookOutput, onPermissionRequest, onToolCall, onToolResult, permission, configMaxSteps, todoPanel = true, endPanel = true, hooks, record, sessionId, checkpointsDir, } = options;
70
107
  // 上限优先级:显式 maxRounds(/agent、/goal)> configMaxSteps(config 解析)> 默认 50。
71
108
  // limit <= 0 表示不限(跳过检查),对齐 config maxStepsPerTurn=0 语义。
72
109
  const limit = maxRounds ?? configMaxSteps ?? DEFAULT_MAX_STEPS;
110
+ // records:记录本回合新追加的用户消息(调用方在进来前刚 push 的最后一条)
111
+ const lastMsg = history[history.length - 1];
112
+ if (record && lastMsg?.role === 'user') {
113
+ record({
114
+ type: 'user',
115
+ // 多模态内容:只记文本与图片占位,避免把 base64 图片塞进 records
116
+ content: typeof lastMsg.content === 'string'
117
+ ? lastMsg.content
118
+ : (lastMsg.content ?? [])
119
+ .map((p) => p?.type === 'text' ? p.text : '[图片]')
120
+ .join(' '),
121
+ });
122
+ }
123
+ // hook 输出:事件模式交给 onHookOutput(独立事件),否则内联 print(CLI 行为不变)
124
+ const emitHookOutput = (text) => {
125
+ if (onHookOutput)
126
+ onHookOutput(text);
127
+ else
128
+ print(text + '\n');
129
+ };
73
130
  /** 工具执行上下文(供 task 等需要反向调用 AI / 复用会话的工具)。 */
74
131
  const toolCtx = {
132
+ sessionId,
133
+ checkpointsDir,
75
134
  ai,
76
135
  confirm,
77
136
  permission,
78
137
  stats,
79
138
  print,
80
- cwd: process.cwd(),
139
+ cwd,
81
140
  maxSteps: configMaxSteps,
82
141
  todoPanel,
83
142
  hooks,
143
+ record,
84
144
  };
85
145
  // 注册 task 子代理工具(每回合注册一次,registerTool 同名替换幂等)。
86
146
  registerTool(createTaskTool(toolCtx));
87
147
  let lastToolKey = null;
88
148
  let repeatCount = 0;
149
+ // 待办未完成时的续跑提醒计数:连续空转达到上限就放弃,避免死循环
150
+ let nudgeCount = 0;
151
+ const MAX_TODO_NUDGES = 3;
152
+ // 距离上次写 todo 的轮数:太久不更新(且还有未完成项)就提醒模型刷新
153
+ let roundsSinceTodoWrite = 0;
89
154
  for (let round = 0; limit <= 0 || round < limit; round++) {
90
155
  let reasoningStarted = false;
91
156
  let reasoningEnded = false;
92
157
  const onReasoningDelta = (text) => {
158
+ // 事件模式:把思考流作为独立信号交给调用方,不混入正文渲染
159
+ if (onReasoning) {
160
+ onReasoning(text);
161
+ return;
162
+ }
163
+ // CLI 默认:灰色内联渲染(行为不变)
93
164
  if (!reasoningStarted) {
94
165
  print(style.muted('思考中…\n'));
95
166
  reasoningStarted = true;
@@ -108,7 +179,12 @@ export async function runAgentTurn(options) {
108
179
  // 与子代理共用 WriteFileStreamPrinter,行为一致。
109
180
  const writePrinter = new WriteFileStreamPrinter();
110
181
  const onToolArgumentDelta = (index, name, argsSoFar) => writePrinter.handleDelta(index, name, argsSoFar, print);
111
- const turn = await ai.chat(history, onDelta, round === 0 && requireToolsFirstRound ? { requireTools: true } : undefined, onReasoningDelta, onToolArgumentDelta);
182
+ const chatOptions = {};
183
+ if (round === 0 && requireToolsFirstRound)
184
+ chatOptions.requireTools = true;
185
+ if (allowedTools)
186
+ chatOptions.allowedTools = allowedTools;
187
+ const turn = await ai.chat(history, onDelta, Object.keys(chatOptions).length > 0 ? chatOptions : undefined, onReasoningDelta, onToolArgumentDelta);
112
188
  // 优先使用后端返回的真实 usage;不支持时降级为字符估算
113
189
  if (turn.usage) {
114
190
  stats.promptTokens += turn.usage.promptTokens;
@@ -124,14 +200,54 @@ export async function runAgentTurn(options) {
124
200
  }
125
201
  // 没有工具调用 → 这是最终回答,收尾退出
126
202
  if (turn.toolCalls.length === 0) {
203
+ // /agent、/goal:待办列表还有未完成项时,模型的过渡性回答不算收尾,
204
+ // 补一条提醒消息让它继续执行(连续空转上限 MAX_TODO_NUDGES 次兜底)
205
+ if (continueOnPendingTodos && nudgeCount < MAX_TODO_NUDGES) {
206
+ const pending = getTodos().filter((t) => t.status !== 'done');
207
+ if (pending.length > 0) {
208
+ print('\n');
209
+ nudgeCount++;
210
+ history.push({
211
+ role: 'assistant',
212
+ content: turn.content,
213
+ });
214
+ record?.({ type: 'assistant', content: turn.content });
215
+ const list = pending
216
+ .map((t) => `- ${t.content}`)
217
+ .join('\n');
218
+ const nudge = `还有 ${pending.length} 项待办未完成:\n${list}\n` +
219
+ '请继续执行(先更新待办状态),直到全部完成。';
220
+ history.push({ role: 'user', content: nudge });
221
+ record?.({ type: 'user', content: nudge });
222
+ print(style.muted(`(待办未完成,继续执行 ${nudgeCount}/${MAX_TODO_NUDGES}…)\n`));
223
+ continue;
224
+ }
225
+ }
127
226
  print('\n');
227
+ // 待办全部完成:回合结束自动清空,面板不残留已完成清单
228
+ const todos = getTodos();
229
+ if (todos.length > 0 && todos.every((t) => t.status === 'done')) {
230
+ resetTodos();
231
+ }
232
+ // Stop hook:回合正常收尾(模型给出最终回答),仅观察
233
+ const stop = await runHooks(hooks, 'Stop', { cwd, stop_reason: 'final' }, print);
234
+ if (stop.output)
235
+ emitHookOutput(stop.output);
128
236
  // 回合结束:渲染待办面板(提示符上方常驻),无待办时为空串
129
237
  const panel = todoPanel && endPanel ? renderTodoPanel() : '';
130
238
  if (panel)
131
239
  print(panel);
132
240
  history.push({ role: 'assistant', content: turn.content });
241
+ record?.({ type: 'assistant', content: turn.content });
242
+ record?.({
243
+ type: 'turn_end',
244
+ stop_reason: 'final',
245
+ usage: { ...stats },
246
+ });
133
247
  return;
134
248
  }
249
+ // 本轮有工具调用,说明还在推进,重置空转计数
250
+ nudgeCount = 0;
135
251
  // 有工具调用:先把带 tool_calls 的 assistant 消息入历史
136
252
  history.push({
137
253
  role: 'assistant',
@@ -142,14 +258,41 @@ export async function runAgentTurn(options) {
142
258
  function: { name: tc.name, arguments: tc.arguments },
143
259
  })),
144
260
  });
261
+ record?.({
262
+ type: 'assistant',
263
+ content: turn.content || null,
264
+ tool_calls: turn.toolCalls.map((tc) => ({
265
+ name: tc.name,
266
+ arguments: tc.arguments,
267
+ })),
268
+ });
145
269
  // 逐个执行工具,结果以 role:'tool' 消息回传
146
270
  for (const tc of turn.toolCalls) {
147
271
  const tool = getTool(tc.name);
148
272
  const args = safeParse(tc.arguments);
273
+ // 只读护栏:allowedTools 之外的工具一律拒绝执行(plan mode 硬边界)
274
+ if (allowedTools && !allowedTools.includes(tc.name)) {
275
+ const denied = textToolResult(`当前为只读模式,工具 ${tc.name} 不可用。请只用只读工具(${allowedTools.join(' / ')})研究,完成后给出计划文本。`, true);
276
+ history.push({
277
+ role: 'tool',
278
+ tool_call_id: tc.id,
279
+ content: toolResultForModel(denied, 1),
280
+ });
281
+ record?.({
282
+ type: 'tool_result',
283
+ tool: tc.name,
284
+ is_error: true,
285
+ output: capForRecord(denied.output),
286
+ });
287
+ onToolResult?.(tc, denied);
288
+ continue;
289
+ }
149
290
  const toolKey = `${tc.name} ${canonicalToolArgs(tc.arguments)}`;
150
291
  // PreToolUse hook:在「始终允许 / 用户确认」之前触发,对所有工具生效;
151
292
  // 被拦截则短路——不弹确认、不执行,原因喂回模型。
152
293
  const pre = await runHooks(hooks, 'PreToolUse', { cwd: toolCtx.cwd, tool_name: tc.name, tool_input: args }, print);
294
+ if (pre.output)
295
+ emitHookOutput(pre.output);
153
296
  if (pre.blocked) {
154
297
  const blocked = textToolResult(`操作被 PreToolUse hook 拦截:${pre.reason ?? ''}。请勿重试,可询问用户希望如何继续。`, true);
155
298
  history.push({
@@ -157,6 +300,12 @@ export async function runAgentTurn(options) {
157
300
  tool_call_id: tc.id,
158
301
  content: toolResultForModel(blocked, 1),
159
302
  });
303
+ record?.({
304
+ type: 'tool_result',
305
+ tool: tc.name,
306
+ is_error: true,
307
+ output: capForRecord(blocked.output),
308
+ });
160
309
  continue;
161
310
  }
162
311
  // 破坏性工具:执行前展示预览并请用户确认
@@ -172,6 +321,12 @@ export async function runAgentTurn(options) {
172
321
  print(style.tool(`\n✓ 已自动允许(${ruleKey})\n`));
173
322
  }
174
323
  else {
324
+ // 事件模式:先通知「正在请求确认」(决定仍由 confirm 返回)
325
+ onPermissionRequest?.({
326
+ tool: tc.name,
327
+ preview,
328
+ ruleKey: ruleKey ?? undefined,
329
+ });
175
330
  const choice = await confirm(preview, ruleKey ? { ruleKey } : undefined);
176
331
  if (choice === 'no') {
177
332
  print('\n已取消。\n');
@@ -181,6 +336,12 @@ export async function runAgentTurn(options) {
181
336
  tool_call_id: tc.id,
182
337
  content: toolResultForModel(rejected, 1),
183
338
  });
339
+ record?.({
340
+ type: 'tool_result',
341
+ tool: tc.name,
342
+ is_error: true,
343
+ output: capForRecord(rejected.output),
344
+ });
184
345
  continue; // 不执行,继续下一个工具调用
185
346
  }
186
347
  if (choice === 'always' && ruleKey) {
@@ -203,9 +364,13 @@ export async function runAgentTurn(options) {
203
364
  }
204
365
  // bash 输出实时流式打印:包一层按行折叠(超 40 行停打 + ctrl+o 展开)
205
366
  const bashFold = tc.name === 'bash' ? new LineFoldPrinter(print) : null;
206
- const execCtx = bashFold
207
- ? { ...toolCtx, print: (c) => bashFold.write(c) }
208
- : toolCtx;
367
+ const execCtx = {
368
+ ...toolCtx,
369
+ stepIndex: round + 1,
370
+ print: bashFold
371
+ ? (c) => bashFold.write(c)
372
+ : toolCtx.print,
373
+ };
209
374
  const result = await executeTool(tc.name, tc.arguments, execCtx);
210
375
  bashFold?.finish();
211
376
  if (toolKey === lastToolKey) {
@@ -222,24 +387,64 @@ export async function runAgentTurn(options) {
222
387
  print(style.muted(` → ${formatToolResult(tc, result)}\n`));
223
388
  }
224
389
  // PostToolUse / PostToolUseFailure hook:只观察(stdout 仅打印给用户,不喂回模型)
225
- await runHooks(hooks, result.isError ? 'PostToolUseFailure' : 'PostToolUse', {
390
+ const post = await runHooks(hooks, result.isError ? 'PostToolUseFailure' : 'PostToolUse', {
226
391
  cwd: toolCtx.cwd,
227
392
  tool_name: tc.name,
228
393
  tool_input: args,
229
394
  tool_response: result.output,
230
395
  }, print);
396
+ if (post.output)
397
+ emitHookOutput(post.output);
231
398
  history.push({
232
399
  role: 'tool',
233
400
  tool_call_id: tc.id,
234
401
  content: toolResultForModel(result, repeatCount),
235
402
  });
403
+ record?.({
404
+ type: 'tool_result',
405
+ tool: tc.name,
406
+ is_error: !!result.isError,
407
+ output: capForRecord(result.output),
408
+ });
409
+ }
410
+ // 待办维护提醒:本轮写了 todo 则计数归零;连续多轮没写且还有未完成项时,
411
+ // 往最后一条工具结果后追加提醒(只进模型上下文,不影响用户侧输出)
412
+ if (turn.toolCalls.some((tc) => tc.name === 'todo')) {
413
+ roundsSinceTodoWrite = 0;
414
+ }
415
+ else {
416
+ roundsSinceTodoWrite++;
417
+ const pending = getTodos().filter((t) => t.status !== 'done');
418
+ if (roundsSinceTodoWrite >= TODO_STALE_ROUNDS && pending.length > 0) {
419
+ roundsSinceTodoWrite = 0;
420
+ const last = history[history.length - 1];
421
+ if (last?.role === 'tool' && typeof last.content === 'string') {
422
+ last.content += TODO_STALE_REMINDER;
423
+ }
424
+ }
236
425
  }
237
426
  // 继续下一轮,让模型基于工具结果接着回答
238
427
  }
239
428
  // 仅在上限生效(limit > 0)时才会跑到这里;不限(limit<=0)靠模型自己停止。
240
429
  if (limit > 0) {
241
430
  print(style.warn(`\n(已达到工具调用轮数上限 ${limit}。如需更高,请在 config 设 maxStepsPerTurn,或设 0 为不限。)\n`));
431
+ // 历史此时以 tool 结果收尾,模型不知道自己为什么停了;
432
+ // 补一条说明,下一轮对话才能讲清「做到哪、为什么停」
433
+ const pauseNote = `(系统提示:已达到工具调用轮数上限 ${limit},本轮执行被暂停。` +
434
+ '如任务未完成,下次回复请先说明当前进度和剩余工作。)';
435
+ history.push({ role: 'user', content: pauseNote });
436
+ record?.({ type: 'user', content: pauseNote });
437
+ }
438
+ // 待办全部完成:回合结束自动清空(触顶收尾同样处理)
439
+ const tailTodos = getTodos();
440
+ if (tailTodos.length > 0 && tailTodos.every((t) => t.status === 'done')) {
441
+ resetTodos();
242
442
  }
443
+ // Stop hook:轮数触顶收尾,仅观察
444
+ const tailStop = await runHooks(hooks, 'Stop', { cwd, stop_reason: 'round_limit' }, print);
445
+ if (tailStop.output)
446
+ emitHookOutput(tailStop.output);
447
+ record?.({ type: 'turn_end', stop_reason: 'round_limit', usage: { ...stats } });
243
448
  // 触顶收尾同样渲染待办面板
244
449
  const tailPanel = todoPanel && endPanel ? renderTodoPanel() : '';
245
450
  if (tailPanel)
@@ -250,7 +455,7 @@ export async function runAgentTurn(options) {
250
455
  * 以 systemPrompt 开场,把 prompt 作为 user 消息发送,执行一轮后返回。
251
456
  */
252
457
  export async function runOnce(options) {
253
- const { ai, prompt, confirm, print = process.stdout.write.bind(process.stdout), systemPrompt = DEFAULT_SYSTEM_PROMPT, mcpManager, configMaxSteps, hooks, } = options;
458
+ const { ai, prompt, confirm, print = process.stdout.write.bind(process.stdout), cwd = process.cwd(), systemPrompt = DEFAULT_SYSTEM_PROMPT, mcpManager, configMaxSteps, hooks, record, sessionId, checkpointsDir, } = options;
254
459
  if (mcpManager) {
255
460
  await registerMcpTools(mcpManager);
256
461
  }
@@ -262,13 +467,17 @@ export async function runOnce(options) {
262
467
  print(chunk);
263
468
  };
264
469
  await runAgentTurn({
470
+ sessionId,
471
+ checkpointsDir,
265
472
  ai,
266
473
  history,
267
474
  confirm,
268
475
  stats: { promptTokens: 0, completionTokens: 0, totalTokens: 0 },
269
476
  print: capturePrint,
477
+ cwd,
270
478
  configMaxSteps,
271
479
  hooks,
480
+ record,
272
481
  });
273
482
  return output;
274
483
  }
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/cli/run/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/cli/run/index.ts"],"names":[],"mappings":"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"}