@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
@@ -0,0 +1,190 @@
1
+ /**
2
+ * 图片引用支持(多模态输入)。
3
+ *
4
+ * 用户在提示词里写 `@shot.png`,若该文件是图片,就把它作为**图像**随消息发给
5
+ * 支持视觉的模型(读成 base64 data URL,走 OpenAI/Gemini 的 image_url 或
6
+ * Anthropic 的 image block)。这与 `@file.ts` 的「注入文本」是两条路:
7
+ * 图片走这里、其余文本文件走 file-reference。
8
+ *
9
+ * 能力降级:当前模型不支持图像时,不发二进制,改成一行文字说明,避免报错或
10
+ * 把 base64 塞进上下文。
11
+ */
12
+ import { resolve } from 'node:path';
13
+ import { existsSync, statSync, readFileSync } from 'node:fs';
14
+ import { compressImageForModel } from './image-compress.js';
15
+ /** 识别为图片的扩展名 → MIME 类型。 */
16
+ const IMAGE_MEDIA_TYPES = {
17
+ png: 'image/png',
18
+ jpg: 'image/jpeg',
19
+ jpeg: 'image/jpeg',
20
+ gif: 'image/gif',
21
+ webp: 'image/webp',
22
+ };
23
+ /** 单张图片最大字节数(5MB),超过则拒绝,避免撑爆请求体。 */
24
+ export const MAX_IMAGE_BYTES = 5 * 1024 * 1024;
25
+ /** 与 file-reference 相同的 `@路径` 匹配规则。 */
26
+ const REF_REGEX = /@([^\s,。!?;:"'()【】、,!?;:'"()\[\]{}]+)/g;
27
+ /** 取小写扩展名。 */
28
+ function extOf(path) {
29
+ const dot = path.lastIndexOf('.');
30
+ return dot === -1 ? '' : path.slice(dot + 1).toLowerCase();
31
+ }
32
+ /**
33
+ * 把一个磁盘图片加载成可发送的 ImageRef:先按需降分辨率(compressImageForModel),
34
+ * 再按最终字节数校验、读成 data URL。压缩过则带一条说明 note。
35
+ * @param displayPath 展示用名字(@路径 或 粘贴#N)
36
+ * @param origMediaType 原始 MIME(未压缩时沿用;压缩后统一为 image/png)
37
+ */
38
+ function loadImageForSend(absPath, displayPath, origMediaType) {
39
+ const c = compressImageForModel(absPath);
40
+ const readPath = c.path;
41
+ let size;
42
+ try {
43
+ size = statSync(readPath).size;
44
+ }
45
+ catch {
46
+ return { ok: false, error: `图片读取失败:${displayPath}` };
47
+ }
48
+ if (size > MAX_IMAGE_BYTES) {
49
+ const mb = (size / 1024 / 1024).toFixed(1);
50
+ return {
51
+ ok: false,
52
+ error: `图片过大:${displayPath}(${mb}MB,超过 ${MAX_IMAGE_BYTES / 1024 / 1024}MB 上限)`,
53
+ };
54
+ }
55
+ try {
56
+ const b64 = readFileSync(readPath).toString('base64');
57
+ const mediaType = c.changed ? 'image/png' : origMediaType;
58
+ const ref = {
59
+ path: displayPath,
60
+ mediaType,
61
+ dataUrl: `data:${mediaType};base64,${b64}`,
62
+ };
63
+ const note = c.changed && c.from && c.to
64
+ ? `图片已压缩:${displayPath} ${c.from.width}×${c.from.height} → ${c.to.width}×${c.to.height}`
65
+ : undefined;
66
+ return { ok: true, ref, note };
67
+ }
68
+ catch (e) {
69
+ return {
70
+ ok: false,
71
+ error: `图片读取失败:${displayPath}(${e?.message ?? e})`,
72
+ };
73
+ }
74
+ }
75
+ /**
76
+ * 从输入里抽取图片引用 `@a.png`,读成 data URL。
77
+ * - 命中的图片标记替换成 `[图片: 路径]`,从文本里让出,避免又被当文本文件注入;
78
+ * - 不存在 / 过大的图片标记替换成内联错误说明;
79
+ * - 非图片扩展名的 `@ref` 原样保留(留给 file-reference 处理)。
80
+ */
81
+ export function extractImageReferences(input, cwd) {
82
+ const matches = [...input.matchAll(REF_REGEX)];
83
+ const images = [];
84
+ const errors = [];
85
+ const notes = [];
86
+ const seen = new Set();
87
+ let text = input;
88
+ for (const match of matches) {
89
+ const refPath = match[1];
90
+ const mediaType = IMAGE_MEDIA_TYPES[extOf(refPath)];
91
+ if (!mediaType)
92
+ continue; // 非图片,交给 file-reference
93
+ if (seen.has(refPath))
94
+ continue;
95
+ seen.add(refPath);
96
+ const full = resolve(cwd, refPath);
97
+ if (!existsSync(full) || !statSync(full).isFile()) {
98
+ text = text.replaceAll(`@${refPath}`, `[图片不存在:${refPath}]`);
99
+ errors.push(`图片不存在:${refPath}`);
100
+ continue;
101
+ }
102
+ const loaded = loadImageForSend(full, refPath, mediaType);
103
+ if (!loaded.ok) {
104
+ text = text.replaceAll(`@${refPath}`, `[${loaded.error}]`);
105
+ errors.push(loaded.error);
106
+ continue;
107
+ }
108
+ images.push(loaded.ref);
109
+ if (loaded.note)
110
+ notes.push(loaded.note);
111
+ text = text.replaceAll(`@${refPath}`, `[图片: ${refPath}]`);
112
+ }
113
+ return { text, images, errors, notes };
114
+ }
115
+ /**
116
+ * 粘贴图片占位符:`[图片 #1]` 或带尺寸 `[图片 #1 640×480]`。
117
+ * id 对应 store 里的临时文件路径;尺寸部分可选,匹配时忽略。
118
+ */
119
+ const PASTE_MARKER_REGEX = /\[图片 #(\d+)(?: [^\]]*)?\]/g;
120
+ /** 读取 PNG 的宽高(解析 IHDR 头);非 PNG 或读失败返回 null。 */
121
+ export function pngDimensions(path) {
122
+ try {
123
+ const buf = readFileSync(path);
124
+ // PNG 签名 8B + IHDR:长度4 + "IHDR"4 + 宽4 + 高4;宽在偏移16、高在偏移20
125
+ if (buf.length < 24 || buf.toString('ascii', 12, 16) !== 'IHDR') {
126
+ return null;
127
+ }
128
+ return { width: buf.readUInt32BE(16), height: buf.readUInt32BE(20) };
129
+ }
130
+ catch {
131
+ return null;
132
+ }
133
+ }
134
+ /** 生成粘贴占位符文本(供 REPL 插入输入行);有尺寸时附 `宽×高`。 */
135
+ export function pasteMarker(id, dims) {
136
+ return dims
137
+ ? `[图片 #${id} ${dims.width}×${dims.height}]`
138
+ : `[图片 #${id}]`;
139
+ }
140
+ /**
141
+ * 解析文本里的粘贴占位符 `[图片 #N]`,用 store(id→临时文件路径)取回图片。
142
+ * - 只解析 store 里存在的 id;用户自己敲的陌生 `[图片 #999]` 原样留作文本。
143
+ * - 占位符文本保留在原处(既是给模型的位置提示,也避免改乱用户输入)。
144
+ */
145
+ export function resolvePastedImages(text, store) {
146
+ const images = [];
147
+ const errors = [];
148
+ const notes = [];
149
+ const seen = new Set();
150
+ for (const m of text.matchAll(PASTE_MARKER_REGEX)) {
151
+ const id = Number(m[1]);
152
+ if (seen.has(id))
153
+ continue;
154
+ const path = store.get(id);
155
+ if (path === undefined)
156
+ continue; // 陌生占位符:留作文本
157
+ seen.add(id);
158
+ const loaded = loadImageForSend(path, `粘贴#${id}`, 'image/png');
159
+ if (!loaded.ok) {
160
+ errors.push(loaded.error);
161
+ continue;
162
+ }
163
+ images.push(loaded.ref);
164
+ if (loaded.note)
165
+ notes.push(loaded.note);
166
+ }
167
+ return { images, errors, notes };
168
+ }
169
+ /**
170
+ * 把文本与图片组合成用户消息内容。
171
+ * - 无图片:返回纯文本字符串(保持与旧路径一致)。
172
+ * - 有图片且模型支持视觉:返回「文本 + image_url」多模态数组。
173
+ * - 有图片但模型不支持视觉:降级为纯文本,附一行说明(不发二进制)。
174
+ */
175
+ export function buildUserContent(text, images, supportsVision, model) {
176
+ if (images.length === 0)
177
+ return text;
178
+ if (!supportsVision) {
179
+ const names = images.map((i) => i.path).join('、');
180
+ return (`${text}\n\n[附带了 ${images.length} 张图片,但当前模型 ${model} 不支持图像输入,已忽略:${names}]`);
181
+ }
182
+ return [
183
+ { type: 'text', text },
184
+ ...images.map((img) => ({
185
+ type: 'image_url',
186
+ image_url: { url: img.dataUrl },
187
+ })),
188
+ ];
189
+ }
190
+ //# sourceMappingURL=image-reference.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"image-reference.js","sourceRoot":"","sources":["../../src/cli/image-reference.ts"],"names":[],"mappings":"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"}
@@ -6,81 +6,59 @@
6
6
  * 支持优雅退出:/exit、/quit,或按 Ctrl-D(EOF)、Ctrl-C。
7
7
  */
8
8
  import { createInterface } from 'node:readline';
9
- import { join, relative } from 'node:path';
9
+ import { relative } from 'node:path';
10
10
  import { NAME, VERSION } from '../../version.js';
11
11
  import { style } from '../style.js';
12
- import { loadConfig, maskKey, DEFAULT_SYSTEM_PROMPT, getRolePrompt, resolveMaxStepsPerTurn, } from '../../config/config.js';
13
- import { loadEnvFile } from '../../config/env.js';
14
- import { appendMemories, appendProjectMemory, loadMemories, SCOPE_LABEL, } from '../../config/memory.js';
15
- import { loadSkills, resolveSkillPrompt, formatSkillList, } from '../../config/skills.js';
16
- import { createAIClient } from '../../agent/ai.js';
12
+ import { maskKey, } from '../../config/config.js';
13
+ import { appendProjectMemory, SCOPE_LABEL, } from '../../config/memory.js';
14
+ import { resolveSkillPrompt, formatSkillList, } from '../../config/skills.js';
17
15
  import { handleSlash, slashCompleter } from '../slash/index.js';
18
16
  import { injectFileReferences, completeFileReference, } from '../file-reference.js';
17
+ import { extractImageReferences, resolvePastedImages, pasteMarker, pngDimensions, buildUserContent, } from '../image-reference.js';
18
+ import { readClipboardImage } from '../clipboard-image.js';
19
19
  import { saveLastSession } from '../session/index.js';
20
20
  import { appendHistory, loadHistory } from './history.js';
21
21
  import { InputBuffer } from './input.js';
22
22
  import { confirmSelect, confirmSelectChoice } from '../confirm-select.js';
23
- import { McpClientManager } from '../../agent/mcp.js';
24
- import { registerMcpTools, resetTools, registerTool } from '../../tools/index.js';
25
- import { makeSkillTool } from '../../tools/skill-tool.js';
26
23
  import { emptyStats, formatStats } from '../stats/index.js';
27
- import { runAgentTurn } from '../run/index.js';
24
+ import { createHarnessEventRenderer } from '../run/event-renderer.js';
28
25
  import { consumeFolded } from '../run/fold.js';
29
26
  import { openFoldPager } from '../run/pager.js';
30
27
  import { Permission, alwaysLabelFor } from '../run/permissions.js';
31
28
  import { autoCompactIfNeeded } from '../slash/system/compact.js';
32
29
  import { TodoPanel } from '../run/todo-panel.js';
33
30
  import { onTodoChange } from '../../tools/todo.js';
31
+ import { createCcliHarness } from '../../harness/index.js';
34
32
  const PROMPT = '› ';
35
33
  export async function startRepl(options) {
36
34
  // 启动即解析配置:缺失就明确报错退出,不进入循环
37
- const result = loadConfig();
35
+ const result = await createCcliHarness({ noHooks: options?.noHooks });
38
36
  if (!result.ok) {
39
37
  console.error(style.error(result.message));
40
38
  process.exit(1);
41
39
  }
42
- const { config } = result;
43
- // 生命周期钩子(--no-hooks 时整体禁用)
44
- const hooks = options?.noHooks ? undefined : config.hooks;
45
- // 项目 .env 也参与 MCP 环境变量查找,方便把 token 放在本地不被 git 跟踪
46
- const dotenv = loadEnvFile(join(process.cwd(), '.env'));
47
- const envLookup = (name) => process.env[name] ?? dotenv[name];
48
- // 连接配置的 MCP server,把它们的 tools 注册到 CCLI
49
- let mcp = null;
50
- if (config.mcpServers && Object.keys(config.mcpServers).length > 0) {
51
- resetTools();
52
- mcp = new McpClientManager(config.mcpServers, { name: NAME, version: VERSION }, envLookup);
53
- const errors = await mcp.connectAll();
54
- if (errors.length > 0) {
55
- console.error(style.error('部分 MCP server 连接失败:'));
56
- for (const e of errors)
57
- console.error(style.muted(` ${e}`));
58
- }
59
- await registerMcpTools(mcp);
40
+ const { harness } = result;
41
+ let config = harness.config;
42
+ let hooks = harness.hooks;
43
+ let ai = harness.ai;
44
+ const mcp = harness.mcpManager;
45
+ const skills = harness.skills;
46
+ if (harness.mcpErrors.length > 0) {
47
+ console.error(style.error('部分 MCP server 连接失败:'));
48
+ for (const e of harness.mcpErrors)
49
+ console.error(style.muted(` ${e}`));
60
50
  }
61
- const ai = createAIClient(config);
62
- // 用户自定义技能:启动时扫描 .ccli/skills/ 与 ~/.ccli/skills/
63
- const skills = loadSkills(process.cwd());
64
- // 把可供模型调用的技能注册成 skill 工具(技能 v3)
65
- const skillTool = makeSkillTool(skills);
66
- if (skillTool)
67
- registerTool(skillTool);
68
51
  // 记忆分层:启动时读一次(全局 + 项目根 + 子目录),注入 system 提示;切换角色或 # 写入时重读
69
- let memories = loadMemories(process.cwd());
52
+ let memories = harness.memories;
70
53
  // 对话历史:以 system 提示词开场,之后累积 user / assistant 轮次
71
- const history = [
72
- {
73
- role: 'system',
74
- content: appendMemories(DEFAULT_SYSTEM_PROMPT, memories),
75
- },
76
- ];
77
54
  let currentRole = 'default';
55
+ const history = harness.createHistory(currentRole);
78
56
  let stats = emptyStats();
79
57
  /** 当前角色的 system 提示基础文本(不含记忆)。 */
80
- const currentRoleBase = () => getRolePrompt(currentRole, config.roles) ?? DEFAULT_SYSTEM_PROMPT;
58
+ const currentRoleBase = () => harness.roleBasePrompt(currentRole);
81
59
  /** 用最新记忆重建 history[0] 的 system 提示(切角色、# 写入后调用)。 */
82
60
  const refreshSystemPrompt = () => {
83
- history[0].content = appendMemories(currentRoleBase(), memories);
61
+ history[0].content = harness.buildSystemPrompt(currentRoleBase());
84
62
  };
85
63
  /** 组合补全:技能名 > 文件引用 > 斜杠命令。 */
86
64
  const inputCompleter = (line) => {
@@ -124,6 +102,10 @@ export async function startRepl(options) {
124
102
  console.log(style.success(`已加载${SCOPE_LABEL[m.scope]}:${m.file}`));
125
103
  }
126
104
  console.log(style.info('进入交互式会话。输入 /help 查看命令,/exit 退出。\n'));
105
+ // SessionStart hook:会话开始,仅观察(stdout 打印给用户)
106
+ const started = await harness.runSessionStart('repl');
107
+ if (started.output)
108
+ console.log(started.output);
127
109
  rl.prompt();
128
110
  // 请用户确认破坏性操作:展示预览 + 方向键选择。
129
111
  // bash 命令多出「始终允许 '<首词>'」第三选项;选中会把规则记进会话 allow-list,
@@ -144,13 +126,44 @@ export async function startRepl(options) {
144
126
  finally {
145
127
  rl.resume();
146
128
  panel?.resume(); // 重设滚动区 + 重绘面板
129
+ panel?.afterConfirm(); // 光标挪回滚动区底行,避免后续输出写进面板区
147
130
  }
148
131
  };
149
132
  // 正在等待 AI 回复时置 true,避免这期间的输入被重复处理
150
133
  let busy = false;
134
+ // 粘贴图片存放:占位符 id → 临时文件路径。输入行里只显示 `[图片 #N]`,
135
+ // 不暴露路径;提交时按 id 取回图片。
136
+ const pasteStore = new Map();
137
+ let pasteCounter = 0;
151
138
  // ctrl+o:在空闲提示符下查看被折叠的长块(write/edit 内容)。
152
139
  // 无折叠块 → 提示「没有可展开的内容」;有折叠块 → 进入全屏可滚动查看器
153
140
  // (alternate screen,类 less),退出后还原提示符与未提交输入。
141
+ // ctrl+v:把剪贴板里的图片落成临时文件,并在输入行插入 `@路径` 引用,
142
+ // 交给已有的图片管线(提交时 extractImageReferences 会处理)。
143
+ // 终端 App 会截走 Cmd-V,所以和 Kimi 一样用 Ctrl-V。
144
+ process.stdin.on('keypress', (_str, key) => {
145
+ if (!key || !key.ctrl || key.name !== 'v')
146
+ return;
147
+ if (busy)
148
+ return;
149
+ const result = readClipboardImage();
150
+ if (!result.ok) {
151
+ // 无图:沿用 ctrl+o 的清行—提示—重绘—恢复输入套路
152
+ const pending = rl.line;
153
+ process.stdout.write('\r\x1b[K');
154
+ console.log(style.muted(`(${result.reason})`));
155
+ rl.prompt(true);
156
+ if (pending)
157
+ rl.write(pending);
158
+ return;
159
+ }
160
+ // 有图:存进 pasteStore,只在输入行插入短占位符 `[图片 #N]`,
161
+ // 不暴露临时路径。提交时按 id 取回图片。
162
+ const id = ++pasteCounter;
163
+ pasteStore.set(id, result.path);
164
+ const sep = rl.line && !/\s$/.test(rl.line) ? ' ' : '';
165
+ rl.write(`${sep}${pasteMarker(id, pngDimensions(result.path))} `);
166
+ });
154
167
  process.stdin.on('keypress', (_str, key) => {
155
168
  if (!key || !key.ctrl || key.name !== 'o')
156
169
  return;
@@ -194,7 +207,7 @@ export async function startRepl(options) {
194
207
  return;
195
208
  }
196
209
  const file = appendProjectMemory(note, process.cwd());
197
- memories = loadMemories(process.cwd());
210
+ memories = harness.refreshMemories();
198
211
  refreshSystemPrompt();
199
212
  const display = relative(process.cwd(), file) || file;
200
213
  console.log(style.success(`已记住(${display}):${note}`));
@@ -220,14 +233,28 @@ export async function startRepl(options) {
220
233
  skillPrompt = r.prompt;
221
234
  console.log(style.muted(`(运行技能:${r.name})`));
222
235
  }
223
- // @文件引用 解析并注入文件内容(技能展开后的文本同样支持 @)
224
- const processedInput = injectFileReferences(skillPrompt ?? input, process.cwd());
236
+ // 先解析粘贴占位符 `[图片 #N]`,再抽取 @图片,最后把剩余 @文件引用注入文本
237
+ //(技能展开后的文本同样支持 @)
238
+ const rawText = skillPrompt ?? input;
239
+ const pasted = resolvePastedImages(rawText, pasteStore);
240
+ const extracted = extractImageReferences(rawText, process.cwd());
241
+ const images = [...pasted.images, ...extracted.images];
242
+ for (const e of [...pasted.errors, ...extracted.errors]) {
243
+ console.log(style.warn(e));
244
+ }
245
+ for (const n of [...pasted.notes, ...extracted.notes]) {
246
+ console.log(style.muted(`(${n})`));
247
+ }
248
+ const processedInput = injectFileReferences(extracted.text, process.cwd());
225
249
  // 斜杠命令:交给 handleSlash,不发给 AI(技能已在上面处理并落到消息路径)
226
250
  // (/model 会联网列模型,故也置 busy 防止期间重复处理)
227
251
  if (skillPrompt === null && input.startsWith('/')) {
228
252
  busy = true;
229
253
  let exiting = false;
230
254
  await handleSlash(processedInput, {
255
+ get sessionId() { return harness.sessionId; },
256
+ set sessionId(val) { harness.sessionId = val; },
257
+ get checkpointsDir() { return harness.checkpointsDir; },
231
258
  history,
232
259
  ai,
233
260
  stats,
@@ -235,6 +262,8 @@ export async function startRepl(options) {
235
262
  mcpManager: mcp,
236
263
  roles: config.roles,
237
264
  hooks,
265
+ record: (e) => harness.recordEvent(e),
266
+ recordsDir: harness.recordsDir,
238
267
  currentRole,
239
268
  setRole: (name) => {
240
269
  currentRole = name;
@@ -245,24 +274,30 @@ export async function startRepl(options) {
245
274
  rl.close();
246
275
  },
247
276
  ask: (prompt) => new Promise((resolve) => rl.question(prompt, resolve)),
248
- confirm: async (prompt) => {
277
+ confirm: async (prompt, confirmLabel, cancelLabel) => {
249
278
  panel?.suspend();
250
279
  rl.pause();
251
280
  try {
252
281
  return await confirmSelect({
253
282
  prompt,
254
283
  defaultConfirm: false,
284
+ confirmLabel,
285
+ cancelLabel,
255
286
  });
256
287
  }
257
288
  finally {
258
289
  rl.resume();
259
290
  panel?.resume();
291
+ panel?.afterConfirm(); // 光标挪回滚动区底行
260
292
  }
261
293
  },
294
+ confirmChoice: confirm,
262
295
  reloadConfig: () => {
263
- const r = loadConfig();
296
+ const r = harness.reloadConfig();
264
297
  if (r.ok) {
265
- Object.assign(config, r.config);
298
+ config = r.config;
299
+ hooks = harness.hooks;
300
+ ai = harness.ai;
266
301
  return { ok: true, config };
267
302
  }
268
303
  return r;
@@ -274,23 +309,36 @@ export async function startRepl(options) {
274
309
  return;
275
310
  }
276
311
  busy = true;
312
+ // UserPromptSubmit hook:可拦截输入;放行时 stdout 作为补充上下文追加
313
+ const submitted = await harness.runUserPromptHooks(processedInput);
314
+ if (submitted.blocked) {
315
+ busy = false;
316
+ rl.prompt();
317
+ return;
318
+ }
277
319
  const mark = history.length; // 出错时回滚到这里,避免半截上下文
278
- history.push({ role: 'user', content: processedInput });
320
+ history.push({
321
+ role: 'user',
322
+ content: buildUserContent(submitted.prompt, images, ai.supportsVision(), ai.getModel()),
323
+ });
279
324
  try {
280
- await runAgentTurn({
281
- ai,
325
+ await harness.runTurnWithEvents({
282
326
  history,
283
327
  confirm,
284
328
  stats,
285
329
  permission,
286
- configMaxSteps: resolveMaxStepsPerTurn(config),
287
330
  endPanel: !panel, // 有常驻面板时,回合末不再打印一次性面板
288
- hooks,
331
+ emit: createHarnessEventRenderer({
332
+ print: process.stdout.write.bind(process.stdout),
333
+ }),
289
334
  });
290
335
  // 本回合结束,显示本次 token 消耗
291
336
  console.log(style.muted(`\n${formatStats(stats, ai.getModel())}`));
292
337
  // 上下文接近上限时自动压缩,避免下一轮溢出
293
- await autoCompactIfNeeded(ai, history, stats);
338
+ await autoCompactIfNeeded(ai, history, stats, {
339
+ hooks,
340
+ cwd: process.cwd(),
341
+ });
294
342
  }
295
343
  catch (e) {
296
344
  console.error(style.error(`\n[请求失败] ${e?.message ?? e}`));
@@ -318,10 +366,12 @@ export async function startRepl(options) {
318
366
  rl.on('close', async () => {
319
367
  unsubTodo?.();
320
368
  panel?.dispose(); // 恢复全屏滚动、清掉面板行,再交给 shell
369
+ // SessionEnd hook:会话结束,仅观察
370
+ const ended = await harness.runSessionEnd();
371
+ if (ended.output)
372
+ console.log(ended.output);
321
373
  saveLastSession(history);
322
- if (mcp) {
323
- await mcp.closeAll();
324
- }
374
+ await harness.close();
325
375
  console.log(style.info('\n再见 👋'));
326
376
  process.exit(0);
327
377
  });
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/cli/repl/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/cli/repl/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,57 @@
1
+ import { style } from '../style.js';
2
+ import { formatToolCall, formatToolResult, toolCallLines, } from './format.js';
3
+ import { renderWithFold } from './fold.js';
4
+ /**
5
+ * 创建 CLI Harness 事件渲染器。
6
+ *
7
+ * - text_delta:原样输出文本片段。
8
+ * - tool_call:渲染成原来的 `⚙ 工具摘要` + 可折叠内容块。
9
+ * - tool_result:渲染成原来的 `→ 工具结果摘要`。
10
+ */
11
+ export function createHarnessEventRenderer(options) {
12
+ const { print } = options;
13
+ // 思考流状态:首个 reasoning delta 打印「思考中…」,正文到达时补一行分隔
14
+ let reasoningStarted = false;
15
+ return (event) => {
16
+ if (event.type === 'reasoning_delta') {
17
+ if (!reasoningStarted) {
18
+ print(style.muted('思考中…\n'));
19
+ reasoningStarted = true;
20
+ }
21
+ print(style.muted(event.text));
22
+ return;
23
+ }
24
+ if (event.type === 'text_delta') {
25
+ if (reasoningStarted) {
26
+ print('\n'); // 思考块与正文之间补分隔
27
+ reasoningStarted = false;
28
+ }
29
+ print(event.text);
30
+ return;
31
+ }
32
+ if (event.type === 'tool_call') {
33
+ reasoningStarted = false;
34
+ print(style.tool(`\n⚙ ${formatToolCall(event.toolCall)}\n`));
35
+ const lines = toolCallLines(event.toolCall);
36
+ if (lines)
37
+ print(renderWithFold(lines));
38
+ return;
39
+ }
40
+ if (event.type === 'tool_result') {
41
+ print(style.muted(` → ${formatToolResult(event.toolCall, event.result)}\n`));
42
+ return;
43
+ }
44
+ if (event.type === 'hook_output') {
45
+ // 与非事件路径一致:hook stdout 原样打印
46
+ print(event.text + '\n');
47
+ return;
48
+ }
49
+ if (event.type === 'permission_request') {
50
+ // 终端由 confirm 回调自行展示预览与选择器,这里不重复渲染
51
+ return;
52
+ }
53
+ // turn_error
54
+ print(style.error(`\n[请求失败] ${event.error}\n`));
55
+ };
56
+ }
57
+ //# sourceMappingURL=event-renderer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"event-renderer.js","sourceRoot":"","sources":["../../../src/cli/run/event-renderer.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AACpC,OAAO,EACH,cAAc,EACd,gBAAgB,EAChB,aAAa,GAChB,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAO3C;;;;;;GAMG;AACH,MAAM,UAAU,0BAA0B,CACtC,OAAoC;IAEpC,MAAM,EAAE,KAAK,EAAE,GAAG,OAAO,CAAC;IAC1B,+CAA+C;IAC/C,IAAI,gBAAgB,GAAG,KAAK,CAAC;IAC7B,OAAO,CAAC,KAAK,EAAE,EAAE;QACb,IAAI,KAAK,CAAC,IAAI,KAAK,iBAAiB,EAAE,CAAC;YACnC,IAAI,CAAC,gBAAgB,EAAE,CAAC;gBACpB,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC;gBAC7B,gBAAgB,GAAG,IAAI,CAAC;YAC5B,CAAC;YACD,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC;YAC/B,OAAO;QACX,CAAC;QAED,IAAI,KAAK,CAAC,IAAI,KAAK,YAAY,EAAE,CAAC;YAC9B,IAAI,gBAAgB,EAAE,CAAC;gBACnB,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,cAAc;gBAC3B,gBAAgB,GAAG,KAAK,CAAC;YAC7B,CAAC;YACD,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YAClB,OAAO;QACX,CAAC;QAED,IAAI,KAAK,CAAC,IAAI,KAAK,WAAW,EAAE,CAAC;YAC7B,gBAAgB,GAAG,KAAK,CAAC;YACzB,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,cAAc,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC;YAC7D,MAAM,KAAK,GAAG,aAAa,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;YAC5C,IAAI,KAAK;gBAAE,KAAK,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC,CAAC;YACxC,OAAO;QACX,CAAC;QAED,IAAI,KAAK,CAAC,IAAI,KAAK,aAAa,EAAE,CAAC;YAC/B,KAAK,CACD,KAAK,CAAC,KAAK,CACP,OAAO,gBAAgB,CAAC,KAAK,CAAC,QAAQ,EAAE,KAAK,CAAC,MAAM,CAAC,IAAI,CAC5D,CACJ,CAAC;YACF,OAAO;QACX,CAAC;QAED,IAAI,KAAK,CAAC,IAAI,KAAK,aAAa,EAAE,CAAC;YAC/B,4BAA4B;YAC5B,KAAK,CAAC,KAAK,CAAC,IAAI,GAAG,IAAI,CAAC,CAAC;YACzB,OAAO;QACX,CAAC;QAED,IAAI,KAAK,CAAC,IAAI,KAAK,oBAAoB,EAAE,CAAC;YACtC,mCAAmC;YACnC,OAAO;QACX,CAAC;QAED,aAAa;QACb,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,YAAY,KAAK,CAAC,KAAK,IAAI,CAAC,CAAC,CAAC;IACpD,CAAC,CAAC;AACN,CAAC"}