@winspan/claude-forge 8.33.3 → 8.34.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 (113) hide show
  1. package/dist/agents/definition.d.ts +3 -0
  2. package/dist/agents/definition.d.ts.map +1 -1
  3. package/dist/agents/definition.js +3 -0
  4. package/dist/agents/definition.js.map +1 -1
  5. package/dist/agents/official-agents.d.ts.map +1 -1
  6. package/dist/agents/official-agents.js +6 -3
  7. package/dist/agents/official-agents.js.map +1 -1
  8. package/dist/agents/registry.d.ts +17 -1
  9. package/dist/agents/registry.d.ts.map +1 -1
  10. package/dist/agents/registry.js +106 -7
  11. package/dist/agents/registry.js.map +1 -1
  12. package/dist/cli/commands/executions.d.ts +3 -0
  13. package/dist/cli/commands/executions.d.ts.map +1 -0
  14. package/dist/cli/commands/executions.js +109 -0
  15. package/dist/cli/commands/executions.js.map +1 -0
  16. package/dist/cli/commands/skills.d.ts.map +1 -1
  17. package/dist/cli/commands/skills.js +83 -20
  18. package/dist/cli/commands/skills.js.map +1 -1
  19. package/dist/cli/index.js +2 -0
  20. package/dist/cli/index.js.map +1 -1
  21. package/dist/core/storage/rows.d.ts +14 -0
  22. package/dist/core/storage/rows.d.ts.map +1 -1
  23. package/dist/core/storage/schema.sql +26 -0
  24. package/dist/core/storage/sqlite.d.ts +11 -2
  25. package/dist/core/storage/sqlite.d.ts.map +1 -1
  26. package/dist/core/storage/sqlite.js +32 -0
  27. package/dist/core/storage/sqlite.js.map +1 -1
  28. package/dist/daemon/handlers/stop.d.ts +5 -1
  29. package/dist/daemon/handlers/stop.d.ts.map +1 -1
  30. package/dist/daemon/handlers/stop.js +27 -1
  31. package/dist/daemon/handlers/stop.js.map +1 -1
  32. package/dist/daemon/handlers/user-prompt.d.ts +3 -1
  33. package/dist/daemon/handlers/user-prompt.d.ts.map +1 -1
  34. package/dist/daemon/handlers/user-prompt.js +37 -4
  35. package/dist/daemon/handlers/user-prompt.js.map +1 -1
  36. package/dist/daemon/index.d.ts.map +1 -1
  37. package/dist/daemon/index.js +10 -4
  38. package/dist/daemon/index.js.map +1 -1
  39. package/dist/daemon/routing-observer.d.ts.map +1 -1
  40. package/dist/daemon/routing-observer.js +25 -2
  41. package/dist/daemon/routing-observer.js.map +1 -1
  42. package/dist/engine/conventions/routing.yaml +11 -0
  43. package/dist/intelligence/execution-doc-builder.d.ts +61 -0
  44. package/dist/intelligence/execution-doc-builder.d.ts.map +1 -0
  45. package/dist/intelligence/execution-doc-builder.js +601 -0
  46. package/dist/intelligence/execution-doc-builder.js.map +1 -0
  47. package/dist/skills/invocation-guard.d.ts +45 -0
  48. package/dist/skills/invocation-guard.d.ts.map +1 -0
  49. package/dist/skills/invocation-guard.js +82 -0
  50. package/dist/skills/invocation-guard.js.map +1 -0
  51. package/dist/skills/registry.d.ts +22 -0
  52. package/dist/skills/registry.d.ts.map +1 -1
  53. package/dist/skills/registry.js +30 -2
  54. package/dist/skills/registry.js.map +1 -1
  55. package/dist/skills/tools/skill-invoke.d.ts +36 -0
  56. package/dist/skills/tools/skill-invoke.d.ts.map +1 -0
  57. package/dist/skills/tools/skill-invoke.js +82 -0
  58. package/dist/skills/tools/skill-invoke.js.map +1 -0
  59. package/dist/skills/tools/skill-list.d.ts +26 -0
  60. package/dist/skills/tools/skill-list.d.ts.map +1 -0
  61. package/dist/skills/tools/skill-list.js +35 -0
  62. package/dist/skills/tools/skill-list.js.map +1 -0
  63. package/dist/web/routes/ai.d.ts.map +1 -1
  64. package/dist/web/routes/ai.js +2 -7
  65. package/dist/web/routes/ai.js.map +1 -1
  66. package/dist/web/routes/execution-trace.d.ts +8 -0
  67. package/dist/web/routes/execution-trace.d.ts.map +1 -1
  68. package/dist/web/routes/execution-trace.js +46 -1
  69. package/dist/web/routes/execution-trace.js.map +1 -1
  70. package/dist/web/routes/routing.d.ts.map +1 -1
  71. package/dist/web/routes/routing.js +11 -1
  72. package/dist/web/routes/routing.js.map +1 -1
  73. package/dist/web/routes/skill-stats.d.ts +12 -0
  74. package/dist/web/routes/skill-stats.d.ts.map +1 -0
  75. package/dist/web/routes/skill-stats.js +72 -0
  76. package/dist/web/routes/skill-stats.js.map +1 -0
  77. package/dist/web/static/assets/{AIConfig-Dw13rVtT.js → AIConfig-DiUFET_Q.js} +2 -2
  78. package/dist/web/static/assets/{AIConfig-Dw13rVtT.js.map → AIConfig-DiUFET_Q.js.map} +1 -1
  79. package/dist/web/static/assets/{Agents-D1p3JhQs.js → Agents-bNNGbQnL.js} +2 -2
  80. package/dist/web/static/assets/{Agents-D1p3JhQs.js.map → Agents-bNNGbQnL.js.map} +1 -1
  81. package/dist/web/static/assets/{Dashboard-qUCxXFSI.js → Dashboard-Ciyyw6ph.js} +2 -2
  82. package/dist/web/static/assets/{Dashboard-qUCxXFSI.js.map → Dashboard-Ciyyw6ph.js.map} +1 -1
  83. package/dist/web/static/assets/{Drawer-DeKukfwJ.js → Drawer-DOUcx6m1.js} +2 -2
  84. package/dist/web/static/assets/{Drawer-DeKukfwJ.js.map → Drawer-DOUcx6m1.js.map} +1 -1
  85. package/dist/web/static/assets/{Events-DqzBTrly.js → Events-DQHP6Uaq.js} +2 -2
  86. package/dist/web/static/assets/{Events-DqzBTrly.js.map → Events-DQHP6Uaq.js.map} +1 -1
  87. package/dist/web/static/assets/ExecutionTrace-Co8ARdg-.js +3 -0
  88. package/dist/web/static/assets/ExecutionTrace-Co8ARdg-.js.map +1 -0
  89. package/dist/web/static/assets/{Methodologies-Br5KOWuF.js → Methodologies-CXNrDXwG.js} +2 -2
  90. package/dist/web/static/assets/{Methodologies-Br5KOWuF.js.map → Methodologies-CXNrDXwG.js.map} +1 -1
  91. package/dist/web/static/assets/{MethodologyDetail-Do1taSKM.js → MethodologyDetail-rV3W1utf.js} +2 -2
  92. package/dist/web/static/assets/{MethodologyDetail-Do1taSKM.js.map → MethodologyDetail-rV3W1utf.js.map} +1 -1
  93. package/dist/web/static/assets/{Routing-CFmM7JuB.js → Routing-BW3eGD-8.js} +2 -2
  94. package/dist/web/static/assets/{Routing-CFmM7JuB.js.map → Routing-BW3eGD-8.js.map} +1 -1
  95. package/dist/web/static/assets/{SessionDetail-DzTue2xK.js → SessionDetail-Cbd7Jwox.js} +2 -2
  96. package/dist/web/static/assets/{SessionDetail-DzTue2xK.js.map → SessionDetail-Cbd7Jwox.js.map} +1 -1
  97. package/dist/web/static/assets/{Sessions-DOd65EkN.js → Sessions-ZQSCgXyy.js} +2 -2
  98. package/dist/web/static/assets/{Sessions-DOd65EkN.js.map → Sessions-ZQSCgXyy.js.map} +1 -1
  99. package/dist/web/static/assets/{Skills-zacj_uSW.js → Skills-C5-5zOSH.js} +2 -2
  100. package/dist/web/static/assets/{Skills-zacj_uSW.js.map → Skills-C5-5zOSH.js.map} +1 -1
  101. package/dist/web/static/assets/{export-CEzDNM66.js → export-CbQTOt71.js} +2 -2
  102. package/dist/web/static/assets/{export-CEzDNM66.js.map → export-CbQTOt71.js.map} +1 -1
  103. package/dist/web/static/assets/{index-BVpUTHdp.js → index-DJK5beK6.js} +3 -3
  104. package/dist/web/static/assets/{index-BVpUTHdp.js.map → index-DJK5beK6.js.map} +1 -1
  105. package/dist/web/static/assets/index-phpuytMI.css +1 -0
  106. package/dist/web/static/assets/{lucide-DjB4fWNj.js → lucide-BanPULT1.js} +35 -40
  107. package/dist/web/static/assets/lucide-BanPULT1.js.map +1 -0
  108. package/dist/web/static/index.html +3 -3
  109. package/package.json +1 -1
  110. package/dist/web/static/assets/ExecutionTrace-Z-zlH0KH.js +0 -2
  111. package/dist/web/static/assets/ExecutionTrace-Z-zlH0KH.js.map +0 -1
  112. package/dist/web/static/assets/index-Drpf7sLl.css +0 -1
  113. package/dist/web/static/assets/lucide-DjB4fWNj.js.map +0 -1
@@ -0,0 +1,601 @@
1
+ /**
2
+ * ExecutionDocBuilder — 为每个路由生成 Agent/Skill 执行文档
3
+ *
4
+ * 触发时机:Stop hook 异步 tail(由 daemon 集成方调用)
5
+ * 输出位置:<projectPath>/.claude-forge/executions/
6
+ *
7
+ * 目录结构:
8
+ * <projectPath>/.claude-forge/executions/
9
+ * ├─ index.md 全局索引
10
+ * └─ by-route/
11
+ * └─ {route_request_id}/
12
+ * ├─ overview.md 路由概览 + 执行链路
13
+ * ├─ agent-{slug}.md Agent 执行文档
14
+ * └─ skill-{slug}-{seq}.md Skill 调用文档
15
+ *
16
+ * 数据流:
17
+ * session → routing_events (group by route_request_id)
18
+ * → events / v2_tool_events / skill_invocations / injections
19
+ * → 模板渲染 + AI 总结(可选)
20
+ * → 写入 md 文件
21
+ */
22
+ import fs from 'node:fs';
23
+ import path from 'node:path';
24
+ import { logger } from '../core/utils/logger.js';
25
+ const DEFAULT_AI_TIMEOUT_MS = 15_000;
26
+ const MAX_AI_SUMMARY_CHARS = 600;
27
+ const MAX_TIMELINE_ROWS = 30;
28
+ const MAX_BASH_COMMANDS = 10;
29
+ const MAX_FILE_CHANGES = 30;
30
+ export class ExecutionDocBuilder {
31
+ storage;
32
+ ai;
33
+ constructor(storage, ai = null) {
34
+ this.storage = storage;
35
+ this.ai = ai;
36
+ }
37
+ /**
38
+ * 为指定 session 的所有路由生成执行文档。
39
+ * 失败时记录 warn 不抛异常,避免阻塞 hook。
40
+ */
41
+ async build(sessionId, projectPath) {
42
+ try {
43
+ const baseDir = path.join(projectPath, '.claude-forge', 'executions');
44
+ const byRouteDir = path.join(baseDir, 'by-route');
45
+ fs.mkdirSync(byRouteDir, { recursive: true });
46
+ const routes = this.storage.queryRoutingEvents({
47
+ session_id: sessionId,
48
+ limit: 100,
49
+ });
50
+ if (routes.length === 0) {
51
+ logger.debug(`[ExecutionDoc] No routes for session ${sessionId}`);
52
+ return;
53
+ }
54
+ let generated = 0;
55
+ for (const route of routes) {
56
+ if (!route.route_request_id)
57
+ continue;
58
+ try {
59
+ await this.buildForRoute(route, byRouteDir);
60
+ generated++;
61
+ }
62
+ catch (err) {
63
+ logger.warn(`[ExecutionDoc] Failed to build route ${route.route_request_id}: ${err}`);
64
+ }
65
+ }
66
+ this.updateIndex(baseDir);
67
+ logger.info(`[ExecutionDoc] Generated ${generated} route document(s) for session ${sessionId}`);
68
+ }
69
+ catch (err) {
70
+ logger.warn(`[ExecutionDoc] Failed to build: ${err}`);
71
+ }
72
+ }
73
+ // ── Per-route orchestration ───────────────────────────────────────────
74
+ async buildForRoute(route, byRouteDir) {
75
+ const routeId = route.route_request_id;
76
+ const routeDir = path.join(byRouteDir, this.safeDirName(routeId));
77
+ fs.mkdirSync(routeDir, { recursive: true });
78
+ // Query associated data
79
+ const events = this.storage.queryEvents({
80
+ session_id: route.session_id,
81
+ limit: 1000,
82
+ });
83
+ const toolEvents = this.queryToolEventsByRoute(routeId);
84
+ const skillInvocations = this.safeQuerySkillInvocations(routeId);
85
+ // Agent document
86
+ if (route.routed_to_type === 'agent' && route.routed_to_name) {
87
+ const agentMd = await this.renderAgentExecution(route, events, toolEvents, skillInvocations);
88
+ const agentFile = path.join(routeDir, `agent-${this.slug(route.routed_to_name)}.md`);
89
+ fs.writeFileSync(agentFile, agentMd, 'utf-8');
90
+ }
91
+ // Skill documents
92
+ skillInvocations.forEach((inv, idx) => {
93
+ const skillMd = this.renderSkillExecution(inv, route);
94
+ const seq = String(idx + 1).padStart(2, '0');
95
+ const skillFile = path.join(routeDir, `skill-${this.slug(inv.skill_id)}-${seq}.md`);
96
+ fs.writeFileSync(skillFile, skillMd, 'utf-8');
97
+ });
98
+ // Overview
99
+ if (route.routed_to_name || skillInvocations.length > 0) {
100
+ const overviewMd = this.renderOverview(route, skillInvocations);
101
+ fs.writeFileSync(path.join(routeDir, 'overview.md'), overviewMd, 'utf-8');
102
+ }
103
+ }
104
+ // ── Queries ───────────────────────────────────────────────────────────
105
+ queryToolEventsByRoute(routeRequestId) {
106
+ try {
107
+ const db = this.storage.getDatabase();
108
+ return db
109
+ .prepare(`SELECT id, session_id, route_request_id, tool, args, result,
110
+ success, error, timestamp
111
+ FROM v2_tool_events
112
+ WHERE route_request_id = ?
113
+ ORDER BY timestamp ASC`)
114
+ .all(routeRequestId);
115
+ }
116
+ catch (err) {
117
+ logger.debug(`[ExecutionDoc] queryToolEvents failed: ${err}`);
118
+ return [];
119
+ }
120
+ }
121
+ safeQuerySkillInvocations(routeRequestId) {
122
+ try {
123
+ const rows = this.storage.querySkillInvocations({
124
+ route_request_id: routeRequestId,
125
+ limit: 100,
126
+ });
127
+ return [...rows].sort((a, b) => a.timestamp - b.timestamp);
128
+ }
129
+ catch (err) {
130
+ logger.debug(`[ExecutionDoc] querySkillInvocations failed: ${err}`);
131
+ return [];
132
+ }
133
+ }
134
+ // ── Agent execution rendering ─────────────────────────────────────────
135
+ async renderAgentExecution(route, events, toolEvents, skillInvocations) {
136
+ const agentName = route.routed_to_name ?? 'unknown';
137
+ const intent = this.safeJson(route.intent_json);
138
+ const taskType = intent?.taskType ?? 'unknown';
139
+ const complexity = intent?.complexity ?? 'unknown';
140
+ const verdict = this.verdictLabel(route);
141
+ const durationMs = route.total_execution_ms ?? null;
142
+ const shortId = this.shortRouteId(route.route_request_id);
143
+ const postUseEvents = events.filter(e => e.hook_type === 'PostToolUse');
144
+ const toolCounts = this.countTools(postUseEvents);
145
+ const toolCountsLine = this.formatToolCounts(toolCounts);
146
+ const timelineRows = this.buildTimelineRows(postUseEvents);
147
+ const fileChanges = this.extractFileChanges(postUseEvents);
148
+ const bashCommands = this.extractBashCommands(postUseEvents);
149
+ const startedAt = new Date(route.ts).toISOString();
150
+ const completedAt = route.completed_ts
151
+ ? new Date(route.completed_ts).toISOString()
152
+ : '';
153
+ const aiSummary = await this.tryGenerateSummary({
154
+ agentName,
155
+ prompt: route.prompt,
156
+ toolCounts,
157
+ fileChanges,
158
+ skillInvocations,
159
+ events: postUseEvents,
160
+ });
161
+ const errorCount = toolEvents.filter(t => t.success === 0).length;
162
+ const frontmatter = [
163
+ '---',
164
+ 'type: agent_execution',
165
+ `agent_id: ${agentName}`,
166
+ `route_request_id: ${route.route_request_id}`,
167
+ `session_id: ${route.session_id}`,
168
+ `started_at: ${startedAt}`,
169
+ `completed_at: ${completedAt}`,
170
+ `duration_ms: ${durationMs ?? ''}`,
171
+ `verdict: ${verdict.key}`,
172
+ `tool_call_count: ${postUseEvents.length}`,
173
+ '---',
174
+ ].join('\n');
175
+ const promptPreview = this.truncate(route.prompt, 100);
176
+ const body = [
177
+ `# Agent 执行 · ${agentName}`,
178
+ '',
179
+ `> 路由追踪 · [Web 查看](http://localhost:3721/trace?id=${shortId})`,
180
+ '',
181
+ '## 一、概览',
182
+ '',
183
+ '| 项 | 值 |',
184
+ '|---|---|',
185
+ `| User Prompt | ${this.mdEscape(promptPreview)} |`,
186
+ `| 路由决策 | ${taskType} + ${complexity} → ${agentName} |`,
187
+ `| 遵守判定 | ${verdict.label} |`,
188
+ `| 耗时 | ${this.formatDuration(durationMs)} |`,
189
+ `| 工具调用 | ${toolCountsLine || '(无)'} |`,
190
+ '',
191
+ '## 二、时间线',
192
+ '',
193
+ timelineRows.length > 0
194
+ ? this.renderTimelineTable(timelineRows)
195
+ : '_本次路由未产生 PostToolUse 事件_',
196
+ '',
197
+ '## 三、输入参数',
198
+ '',
199
+ '### Original Prompt',
200
+ '',
201
+ '```',
202
+ route.prompt,
203
+ '```',
204
+ '',
205
+ '## 四、子任务调用',
206
+ '',
207
+ this.renderSkillInvocationsSection(skillInvocations),
208
+ '',
209
+ '## 五、产物清单',
210
+ '',
211
+ '### 文件改动',
212
+ fileChanges.length > 0
213
+ ? fileChanges
214
+ .slice(0, MAX_FILE_CHANGES)
215
+ .map(f => `- ${f.action} \`${f.path}\``)
216
+ .join('\n')
217
+ : '_无文件改动_',
218
+ '',
219
+ '### Bash 命令',
220
+ bashCommands.length > 0
221
+ ? ['```bash', ...bashCommands.slice(0, MAX_BASH_COMMANDS), '```'].join('\n')
222
+ : '_无 Bash 命令_',
223
+ '',
224
+ '## 六、执行结果总结',
225
+ '',
226
+ aiSummary,
227
+ '',
228
+ '## 七、元数据',
229
+ '',
230
+ '| 项 | 值 |',
231
+ '|---|---|',
232
+ `| 工具事件数 | ${toolEvents.length} |`,
233
+ `| 错误 | ${errorCount} |`,
234
+ `| Skill 调用 | ${skillInvocations.length} |`,
235
+ '',
236
+ ].join('\n');
237
+ return `${frontmatter}\n\n${body}`;
238
+ }
239
+ // ── Skill execution rendering ─────────────────────────────────────────
240
+ renderSkillExecution(inv, route) {
241
+ const invokedAt = new Date(inv.timestamp).toISOString();
242
+ const frontmatter = [
243
+ '---',
244
+ 'type: skill_execution',
245
+ `skill_id: ${inv.skill_id}`,
246
+ `invocation_id: ${inv.id}`,
247
+ `route_request_id: ${inv.route_request_id ?? ''}`,
248
+ `session_id: ${inv.session_id}`,
249
+ `agent_id: ${inv.agent_id ?? ''}`,
250
+ `invocation_type: ${inv.invocation_type}`,
251
+ `invoked_at: ${invokedAt}`,
252
+ `success: ${inv.success === 1}`,
253
+ '---',
254
+ ].join('\n');
255
+ const body = [
256
+ `# Skill 调用 · ${inv.skill_id}`,
257
+ '',
258
+ '## 一、调用上下文',
259
+ '',
260
+ '| 项 | 值 |',
261
+ '|---|---|',
262
+ `| Skill ID | \`${inv.skill_id}\` |`,
263
+ `| 调用类型 | ${this.skillInvocationTypeLabel(inv.invocation_type)} |`,
264
+ `| 发起者 | ${inv.agent_id ? `\`${inv.agent_id}\`` : '主 Claude'} |`,
265
+ `| 嵌套深度 | ${inv.depth} |`,
266
+ `| 调用时间 | ${invokedAt} |`,
267
+ `| 执行结果 | ${inv.success === 1 ? '成功' : '失败'} |`,
268
+ inv.error ? `| 错误信息 | ${this.mdEscape(inv.error)} |` : '',
269
+ '',
270
+ '## 二、Skill 内容概要',
271
+ '',
272
+ inv.reason
273
+ ? this.truncate(inv.reason, 400)
274
+ : '_未记录调用理由_',
275
+ '',
276
+ '## 三、关联',
277
+ '',
278
+ `- 所属路由:\`${inv.route_request_id ?? 'N/A'}\``,
279
+ `- 发起 Agent:${route.routed_to_name ? `\`${route.routed_to_name}\`` : '_无(直接调用)_'}`,
280
+ '',
281
+ '## 四、元数据',
282
+ '',
283
+ '| 项 | 值 |',
284
+ '|---|---|',
285
+ `| Invocation ID | \`${inv.id}\` |`,
286
+ `| Session ID | \`${inv.session_id}\` |`,
287
+ `| 时间戳 | ${inv.timestamp} |`,
288
+ '',
289
+ ]
290
+ .filter(line => line !== '')
291
+ .join('\n');
292
+ return `${frontmatter}\n\n${body}`;
293
+ }
294
+ // ── Overview rendering ──────────────────────────────────────────────────
295
+ renderOverview(route, skillInvocations) {
296
+ const routeId = route.route_request_id;
297
+ const shortId = this.shortRouteId(routeId);
298
+ const intent = this.safeJson(route.intent_json);
299
+ const taskType = intent?.taskType ?? 'unknown';
300
+ const complexity = intent?.complexity ?? 'unknown';
301
+ const verdict = this.verdictLabel(route);
302
+ const startedAt = new Date(route.ts).toISOString();
303
+ const completedAt = route.completed_ts
304
+ ? new Date(route.completed_ts).toISOString()
305
+ : '';
306
+ const frontmatter = [
307
+ '---',
308
+ 'type: route_overview',
309
+ `route_request_id: ${routeId}`,
310
+ `session_id: ${route.session_id}`,
311
+ `started_at: ${startedAt}`,
312
+ `completed_at: ${completedAt}`,
313
+ `routed_to: ${route.routed_to_name ?? 'none'}`,
314
+ `verdict: ${verdict.key}`,
315
+ '---',
316
+ ].join('\n');
317
+ // Build execution chain tree
318
+ const treeLines = [];
319
+ treeLines.push(`[Router] ${taskType} + ${complexity}`);
320
+ if (route.routed_to_name) {
321
+ treeLines.push(` └─ [Agent] ${route.routed_to_name}`);
322
+ skillInvocations.forEach((inv, idx) => {
323
+ const prefix = idx === skillInvocations.length - 1 ? ' └─' : ' ├─';
324
+ const status = inv.success === 1 ? 'OK' : 'FAIL';
325
+ treeLines.push(`${prefix} [Skill] ${inv.skill_id} (${status})`);
326
+ });
327
+ }
328
+ const body = [
329
+ `# 路由概览 · ${shortId}`,
330
+ '',
331
+ `> [Web 查看](http://localhost:3721/trace?id=${shortId})`,
332
+ '',
333
+ '## 一、路由决策',
334
+ '',
335
+ '| 项 | 值 |',
336
+ '|---|---|',
337
+ `| Prompt | ${this.mdEscape(this.truncate(route.prompt, 80))} |`,
338
+ `| 任务类型 | ${taskType} |`,
339
+ `| 复杂度 | ${complexity} |`,
340
+ `| 路由目标 | ${route.routed_to_type ?? 'none'} → ${route.routed_to_name ?? 'N/A'} |`,
341
+ `| 遵守判定 | ${verdict.label} |`,
342
+ `| 分类耗时 | ${route.classification_ms ?? '-'}ms |`,
343
+ `| 执行耗时 | ${this.formatDuration(route.total_execution_ms ?? null)} |`,
344
+ '',
345
+ '## 二、执行链路',
346
+ '',
347
+ '```',
348
+ ...treeLines,
349
+ '```',
350
+ '',
351
+ '## 三、产物',
352
+ '',
353
+ route.routed_to_name
354
+ ? `- [Agent 执行文档](./agent-${this.slug(route.routed_to_name)}.md)`
355
+ : '_无 Agent 文档_',
356
+ ...skillInvocations.map((inv, idx) => {
357
+ const seq = String(idx + 1).padStart(2, '0');
358
+ return `- [Skill: ${inv.skill_id}](./skill-${this.slug(inv.skill_id)}-${seq}.md)`;
359
+ }),
360
+ '',
361
+ '## 四、相关文档',
362
+ '',
363
+ '- [全局索引](../index.md)',
364
+ '',
365
+ ].join('\n');
366
+ return `${frontmatter}\n\n${body}`;
367
+ }
368
+ // ── Index generation ──────────────────────────────────────────────────
369
+ updateIndex(baseDir) {
370
+ const byRouteDir = path.join(baseDir, 'by-route');
371
+ if (!fs.existsSync(byRouteDir))
372
+ return;
373
+ const routeDirs = fs
374
+ .readdirSync(byRouteDir, { withFileTypes: true })
375
+ .filter(d => d.isDirectory())
376
+ .map(d => d.name)
377
+ .sort();
378
+ const lines = [
379
+ '# Execution Documents Index',
380
+ '',
381
+ `> 生成时间: ${new Date().toISOString()}`,
382
+ '',
383
+ `共 ${routeDirs.length} 个路由执行记录。`,
384
+ '',
385
+ '| # | Route ID | 文件 |',
386
+ '|---|---|---|',
387
+ ];
388
+ routeDirs.forEach((dir, idx) => {
389
+ const files = fs.readdirSync(path.join(byRouteDir, dir));
390
+ const fileList = files.map(f => `\`${f}\``).join(', ');
391
+ lines.push(`| ${idx + 1} | \`${dir}\` | ${fileList} |`);
392
+ });
393
+ lines.push('');
394
+ fs.writeFileSync(path.join(baseDir, 'index.md'), lines.join('\n'), 'utf-8');
395
+ }
396
+ // ── AI summary ────────────────────────────────────────────────────────
397
+ async tryGenerateSummary(ctx) {
398
+ const fallback = this.buildFallbackSummary(ctx);
399
+ if (!this.ai)
400
+ return fallback;
401
+ try {
402
+ const eventsSummary = ctx.events
403
+ .slice(0, 40)
404
+ .map(e => `${e.tool_name ?? e.hook_type}`)
405
+ .join(', ');
406
+ const prompt = [
407
+ '基于以下 Agent 执行数据,用中文 100 字以内总结 Agent 做了什么。',
408
+ '只输出总结文本,不要加标题或前缀。',
409
+ '',
410
+ `Agent: ${ctx.agentName}`,
411
+ `用户请求: ${this.truncate(ctx.prompt, 200)}`,
412
+ `工具调用: ${eventsSummary}`,
413
+ `文件改动: ${ctx.fileChanges.map(f => `${f.action} ${f.path}`).join(', ') || '无'}`,
414
+ `Skill 调用: ${ctx.skillInvocations.map(s => s.skill_id).join(', ') || '无'}`,
415
+ ].join('\n');
416
+ const result = await this.ai.complete(prompt, {
417
+ maxTokens: 256,
418
+ timeoutMs: DEFAULT_AI_TIMEOUT_MS,
419
+ });
420
+ return result.slice(0, MAX_AI_SUMMARY_CHARS) || fallback;
421
+ }
422
+ catch (err) {
423
+ logger.debug(`[ExecutionDoc] AI summary failed, using fallback: ${err}`);
424
+ return fallback;
425
+ }
426
+ }
427
+ buildFallbackSummary(ctx) {
428
+ const totalCalls = ctx.events.length;
429
+ const fileCount = ctx.fileChanges.length;
430
+ return `本次 ${ctx.agentName} 执行了 ${totalCalls} 个工具调用,涉及 ${fileCount} 个文件改动。`;
431
+ }
432
+ // ── Helper: timeline ──────────────────────────────────────────────────
433
+ buildTimelineRows(events) {
434
+ return events
435
+ .sort((a, b) => new Date(a.timestamp).getTime() - new Date(b.timestamp).getTime())
436
+ .slice(0, MAX_TIMELINE_ROWS)
437
+ .map(e => {
438
+ const time = this.formatTime(e.timestamp);
439
+ const action = e.tool_name ?? e.hook_type;
440
+ const target = this.extractTarget(e);
441
+ return { time, action, target };
442
+ });
443
+ }
444
+ renderTimelineTable(rows) {
445
+ const header = '| 时间 | 动作 | 对象 |\n|---|---|---|';
446
+ const body = rows
447
+ .map(r => `| ${r.time} | ${r.action} | ${this.mdEscape(r.target)} |`)
448
+ .join('\n');
449
+ return `${header}\n${body}`;
450
+ }
451
+ // ── Helper: file changes & bash ───────────────────────────────────────
452
+ extractFileChanges(events) {
453
+ const changes = [];
454
+ for (const e of events) {
455
+ if (!e.tool_name || !e.tool_input)
456
+ continue;
457
+ if (e.tool_name === 'Edit' || e.tool_name === 'Write') {
458
+ const filePath = e.tool_input.file_path ??
459
+ e.tool_input.path ??
460
+ '';
461
+ if (filePath) {
462
+ changes.push({ action: e.tool_name, path: filePath });
463
+ }
464
+ }
465
+ }
466
+ return changes;
467
+ }
468
+ extractBashCommands(events) {
469
+ const commands = [];
470
+ for (const e of events) {
471
+ if (e.tool_name !== 'Bash' || !e.tool_input)
472
+ continue;
473
+ const cmd = e.tool_input.command ?? '';
474
+ if (cmd)
475
+ commands.push(cmd);
476
+ }
477
+ return commands;
478
+ }
479
+ // ── Helper: skill invocations section ─────────────────────────────────
480
+ renderSkillInvocationsSection(invocations) {
481
+ if (invocations.length === 0)
482
+ return '_无子任务调用_';
483
+ const header = '| # | Skill ID | 类型 | 结果 | 时间 |\n|---|---|---|---|---|';
484
+ const rows = invocations.map((inv, idx) => {
485
+ const status = inv.success === 1 ? 'OK' : 'FAIL';
486
+ const time = this.formatTime(new Date(inv.timestamp).toISOString());
487
+ const typeLabel = this.skillInvocationTypeLabel(inv.invocation_type);
488
+ return `| ${idx + 1} | \`${inv.skill_id}\` | ${typeLabel} | ${status} | ${time} |`;
489
+ });
490
+ return `${header}\n${rows.join('\n')}`;
491
+ }
492
+ // ── Utility methods ───────────────────────────────────────────────────
493
+ slug(name) {
494
+ return name
495
+ .toLowerCase()
496
+ .replace(/[^a-z0-9-]/g, '-')
497
+ .replace(/-+/g, '-')
498
+ .slice(0, 32);
499
+ }
500
+ safeDirName(routeId) {
501
+ return routeId.replace(/[^a-zA-Z0-9_:-]/g, '_');
502
+ }
503
+ shortRouteId(routeId) {
504
+ // route_request_id format: "route:<uuid>" or just a uuid
505
+ const parts = routeId.split(':');
506
+ const uuid = parts.length > 1 ? parts[1] : parts[0];
507
+ return uuid.slice(0, 8);
508
+ }
509
+ verdictLabel(route) {
510
+ if (!route.routed_to_name)
511
+ return { key: 'not_applicable', label: '不适用' };
512
+ if (route.obeyed === 1)
513
+ return { key: 'obeyed', label: '已遵守' };
514
+ if (route.obeyed === 0)
515
+ return { key: 'disobeyed', label: '未遵守' };
516
+ if (route.completion_reason === 'timeout')
517
+ return { key: 'timeout', label: '超时' };
518
+ return { key: 'pending', label: '待判定' };
519
+ }
520
+ countTools(events) {
521
+ const counts = new Map();
522
+ for (const e of events) {
523
+ if (e.tool_name) {
524
+ counts.set(e.tool_name, (counts.get(e.tool_name) ?? 0) + 1);
525
+ }
526
+ }
527
+ return counts;
528
+ }
529
+ formatToolCounts(counts) {
530
+ if (counts.size === 0)
531
+ return '';
532
+ return [...counts.entries()]
533
+ .sort((a, b) => b[1] - a[1])
534
+ .map(([tool, count]) => `${tool}x${count}`)
535
+ .join(' / ');
536
+ }
537
+ formatDuration(ms) {
538
+ if (ms === null)
539
+ return '-';
540
+ if (ms < 1000)
541
+ return `${ms}ms`;
542
+ if (ms < 60_000)
543
+ return `${(ms / 1000).toFixed(1)}s`;
544
+ return `${(ms / 60_000).toFixed(1)}min`;
545
+ }
546
+ formatTime(isoOrTs) {
547
+ try {
548
+ const d = new Date(isoOrTs);
549
+ return d.toTimeString().slice(0, 8); // HH:mm:ss
550
+ }
551
+ catch {
552
+ return isoOrTs;
553
+ }
554
+ }
555
+ extractTarget(event) {
556
+ if (!event.tool_input)
557
+ return '';
558
+ const input = event.tool_input;
559
+ if (typeof input.file_path === 'string')
560
+ return input.file_path;
561
+ if (typeof input.path === 'string')
562
+ return input.path;
563
+ if (typeof input.command === 'string') {
564
+ return this.truncate(input.command, 60);
565
+ }
566
+ if (typeof input.pattern === 'string')
567
+ return input.pattern;
568
+ return '';
569
+ }
570
+ truncate(text, maxLen) {
571
+ if (text.length <= maxLen)
572
+ return text;
573
+ return text.slice(0, maxLen) + '...';
574
+ }
575
+ mdEscape(text) {
576
+ return text.replace(/\|/g, '\\|').replace(/\n/g, ' ');
577
+ }
578
+ safeJson(json) {
579
+ if (!json)
580
+ return null;
581
+ try {
582
+ return JSON.parse(json);
583
+ }
584
+ catch {
585
+ return null;
586
+ }
587
+ }
588
+ skillInvocationTypeLabel(type) {
589
+ switch (type) {
590
+ case 'static':
591
+ return '静态依赖';
592
+ case 'dynamic':
593
+ return '动态调用';
594
+ case 'slash_command':
595
+ return '命令触发';
596
+ default:
597
+ return type;
598
+ }
599
+ }
600
+ }
601
+ //# sourceMappingURL=execution-doc-builder.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"execution-doc-builder.js","sourceRoot":"","sources":["../../src/intelligence/execution-doc-builder.ts"],"names":[],"mappings":"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"}