@winspan/claude-forge 0.2.9 → 0.2.10

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 (32) hide show
  1. package/dist/autopilot/intent-engine.js +1 -1
  2. package/dist/autopilot/intent-engine.js.map +1 -1
  3. package/dist/daemon/handlers/pre-tool-use-handler.d.ts.map +1 -1
  4. package/dist/daemon/handlers/pre-tool-use-handler.js +6 -2
  5. package/dist/daemon/handlers/pre-tool-use-handler.js.map +1 -1
  6. package/dist/daemon/handlers/stop-handler.d.ts.map +1 -1
  7. package/dist/daemon/handlers/stop-handler.js +40 -22
  8. package/dist/daemon/handlers/stop-handler.js.map +1 -1
  9. package/dist/daemon/handlers/user-prompt-handler.d.ts +5 -0
  10. package/dist/daemon/handlers/user-prompt-handler.d.ts.map +1 -1
  11. package/dist/daemon/handlers/user-prompt-handler.js +78 -30
  12. package/dist/daemon/handlers/user-prompt-handler.js.map +1 -1
  13. package/dist/daemon/index.js +2 -2
  14. package/dist/daemon/index.js.map +1 -1
  15. package/dist/distill/trigger.d.ts.map +1 -1
  16. package/dist/distill/trigger.js +2 -1
  17. package/dist/distill/trigger.js.map +1 -1
  18. package/dist/pattern-engine/convention-pattern-generator.d.ts.map +1 -1
  19. package/dist/pattern-engine/convention-pattern-generator.js +2 -1
  20. package/dist/pattern-engine/convention-pattern-generator.js.map +1 -1
  21. package/dist/pattern-engine/index.d.ts +12 -5
  22. package/dist/pattern-engine/index.d.ts.map +1 -1
  23. package/dist/pattern-engine/index.js +77 -22
  24. package/dist/pattern-engine/index.js.map +1 -1
  25. package/dist/pattern-engine/pattern-loader.js +5 -5
  26. package/dist/pattern-engine/pattern-loader.js.map +1 -1
  27. package/dist/pattern-engine/pattern-router.js +5 -5
  28. package/dist/pattern-engine/pattern-router.js.map +1 -1
  29. package/dist/skill-registry/orchestrator.d.ts.map +1 -1
  30. package/dist/skill-registry/orchestrator.js +5 -3
  31. package/dist/skill-registry/orchestrator.js.map +1 -1
  32. package/package.json +1 -1
@@ -28,7 +28,7 @@ export class IntentEngine {
28
28
  // 注意:有会话上下文时(多轮对话中),短输入可能是确认回复,不应被快速过滤
29
29
  const quickResult = this.quickFilter(userPrompt, !!conversationHistory);
30
30
  if (quickResult) {
31
- logger.info(`[意图引擎] 快速过滤:${quickResult.complexity} | reason=${quickResult.reasoning}`);
31
+ logger.info(`快速判定:${quickResult.complexity} | 理由=${quickResult.reasoning}`);
32
32
  return quickResult;
33
33
  }
34
34
  // 清理过期缓存条目(每次 analyze 时执行,避免长期积累)
@@ -1 +1 @@
1
- {"version":3,"file":"intent-engine.js","sourceRoot":"","sources":["../../src/autopilot/intent-engine.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"intent-engine.js","sourceRoot":"","sources":["../../src/autopilot/intent-engine.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"pre-tool-use-handler.d.ts","sourceRoot":"","sources":["../../../src/daemon/handlers/pre-tool-use-handler.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AACjD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAC5D,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAKpD,qBAAa,iBAAkB,SAAQ,eAAe;IACpD,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAwB;gBAE3C,GAAG,EAAE,cAAc;IAIzB,MAAM,CAAC,KAAK,EAAE,UAAU,GAAG,OAAO,CAAC,YAAY,GAAG,IAAI,CAAC;IA+C7D,OAAO,CAAC,mBAAmB;CAsB5B"}
1
+ {"version":3,"file":"pre-tool-use-handler.d.ts","sourceRoot":"","sources":["../../../src/daemon/handlers/pre-tool-use-handler.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AACjD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAC5D,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAKpD,qBAAa,iBAAkB,SAAQ,eAAe;IACpD,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAwB;gBAE3C,GAAG,EAAE,cAAc;IAIzB,MAAM,CAAC,KAAK,EAAE,UAAU,GAAG,OAAO,CAAC,YAAY,GAAG,IAAI,CAAC;IAkD7D,OAAO,CAAC,mBAAmB;CAsB5B"}
@@ -23,20 +23,24 @@ export class PreToolUseHandler extends BaseHookHandler {
23
23
  if (skillRec) {
24
24
  // 提取匹配的技能名列表作为日志预览(跳过标题行,提取 **name** 部分)
25
25
  const skillNames = skillRec.match(/\*\*([^*]+)\*\*/g)?.map(s => s.replace(/\*\*/g, '')).join(', ') || '(unknown)';
26
- logger.info(`[Forge:技能] 已注入推荐(触发工具:${event.tool_name}):${skillNames}`);
26
+ logger.info(`已注入技能推荐(触发工具:${event.tool_name}):${skillNames}`);
27
27
  decision = this.appendContext(decision, ForgeFormatter.formatModuleNotification('skill', skillRec));
28
28
  }
29
+ else {
30
+ logger.debug(`未匹配到相关技能(工具:${event.tool_name})`);
31
+ }
29
32
  // 3. Pipeline 阶段指令注入
30
33
  if (pipelineEngine) {
31
34
  const pipelineInstruction = await pipelineEngine.handlePreToolUse(event);
32
35
  if (pipelineInstruction) {
33
- logger.info(`[Forge:Pipeline] 已注入阶段指令:${pipelineInstruction.substring(0, 80)}...`);
36
+ logger.info(`已注入编排阶段指令:${pipelineInstruction.substring(0, 80)}...`);
34
37
  decision = this.appendContext(decision, ForgeFormatter.formatModuleNotification('pipeline', pipelineInstruction));
35
38
  }
36
39
  }
37
40
  // 4. 首次事件后台检查(不阻塞响应)
38
41
  if (!checkedProjects.has(event.project_path)) {
39
42
  checkedProjects.add(event.project_path);
43
+ logger.info(`启动后台检查(CLAUDE.md + 续接状态)`);
40
44
  this.runBackgroundChecks(event.project_path, config.claudemd.auto_generate, resumeEngine);
41
45
  }
42
46
  return decision ?? undefined;
@@ -1 +1 @@
1
- {"version":3,"file":"pre-tool-use-handler.js","sourceRoot":"","sources":["../../../src/daemon/handlers/pre-tool-use-handler.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"pre-tool-use-handler.js","sourceRoot":"","sources":["../../../src/daemon/handlers/pre-tool-use-handler.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"stop-handler.d.ts","sourceRoot":"","sources":["../../../src/daemon/handlers/stop-handler.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AACjD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAC5D,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAKpD,qBAAa,WAAY,SAAQ,eAAe;IAC9C,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAwB;IACvD,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAwB;IAChD,OAAO,CAAC,SAAS,CAAK;gBAEV,GAAG,EAAE,cAAc;IAKzB,MAAM,CAAC,KAAK,EAAE,UAAU,GAAG,OAAO,CAAC,YAAY,GAAG,IAAI,CAAC;CA8E9D"}
1
+ {"version":3,"file":"stop-handler.d.ts","sourceRoot":"","sources":["../../../src/daemon/handlers/stop-handler.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AACjD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAC5D,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAKpD,qBAAa,WAAY,SAAQ,eAAe;IAC9C,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAwB;IACvD,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAwB;IAChD,OAAO,CAAC,SAAS,CAAK;gBAEV,GAAG,EAAE,cAAc;IAKzB,MAAM,CAAC,KAAK,EAAE,UAAU,GAAG,OAAO,CAAC,YAAY,GAAG,IAAI,CAAC;CAsG9D"}
@@ -13,15 +13,15 @@ export class StopHandler extends BaseHookHandler {
13
13
  async handle(event) {
14
14
  const { resumeEngine, qualityGate, trigger, config } = this.ctx;
15
15
  this.stopCount++;
16
- logger.info(`[Forge:Stop] 会话结束 | session=${event.session_id} | project=${event.project_path.split('/').slice(-2).join('/')}`);
16
+ logger.info(`会话结束 | 第 ${this.stopCount} 次 Stop | 项目=${event.project_path.split('/').slice(-2).join('/')}`);
17
17
  // 1. 保存续接摘要
18
18
  if (resumeEngine) {
19
19
  try {
20
20
  await resumeEngine.saveOnStop(event.session_id, event.project_path);
21
- logger.info(`[Forge:续接] 快照已保存 | session=${event.session_id}`);
21
+ logger.info(`续接快照已保存`);
22
22
  }
23
23
  catch (err) {
24
- logger.warn(`[Forge:续接] 保存失败:${err}`);
24
+ logger.warn(`续接快照保存失败:${err}`);
25
25
  }
26
26
  }
27
27
  // 2. CLAUDE.md 检查
@@ -32,7 +32,7 @@ export class StopHandler extends BaseHookHandler {
32
32
  if (qualityGate) {
33
33
  const failures = qualityGate.getUnresolvedFailures();
34
34
  if (failures.length > 0) {
35
- logger.warn(`[Forge:质量门禁] 发现 ${failures.length} 个未解决的失败项,阻断会话结束`);
35
+ logger.warn(`质量门禁发现 ${failures.length} 个未解决的失败项,阻断会话结束`);
36
36
  const issueLines = [];
37
37
  for (const f of failures) {
38
38
  issueLines.push(`- ${f.summary}`);
@@ -46,7 +46,7 @@ export class StopHandler extends BaseHookHandler {
46
46
  }
47
47
  const report = qualityGate.generateReport();
48
48
  if (report && report !== '暂无审查记录。') {
49
- logger.info(`[Forge:质量门禁] 会话报告:\n${report}`);
49
+ logger.info(`质量门禁报告:\n${report}`);
50
50
  }
51
51
  qualityGate.reset();
52
52
  }
@@ -56,33 +56,51 @@ export class StopHandler extends BaseHookHandler {
56
56
  session_id: event.session_id,
57
57
  project_path: event.project_path,
58
58
  }).length;
59
- logger.info(`[Forge:蒸馏] 开始蒸馏 | session=${event.session_id} | events=${eventsCount}`);
59
+ logger.info(`开始蒸馏 | 事件数=${eventsCount}`);
60
60
  await trigger.onStopHook(event.session_id, event.project_path);
61
- logger.info(`[Forge:蒸馏] 完成 | decisions.md 和 timeline.md 已更新`);
61
+ logger.info(`蒸馏完成:decisions.md 和 timeline.md 已更新`);
62
62
  if (this.ctx.orchestration && config.orchestration.notify_on_distill) {
63
63
  this.ctx.orchestration.pushNotification('[Forge] 会话蒸馏完成');
64
64
  }
65
65
  }
66
66
  // 5-8. 异步清理任务(独立 try/catch,互不影响)
67
- // 使用 Promise.allSettled 确保所有任务的日志都能输出
68
67
  const cleanupTasks = [];
69
- if (this.stopCount % 5 === 0)
70
- cleanupTasks.push(this.cleanup.refineClaudeMd(event));
71
- cleanupTasks.push(this.cleanup.syncDocs(event));
72
- cleanupTasks.push(this.cleanup.evolveSkills());
73
- if (this.stopCount % 5 === 0)
74
- cleanupTasks.push(this.cleanup.learnFromProject(event));
75
- cleanupTasks.push(this.cleanup.updateProfile());
76
- if (this.stopCount % 10 === 0)
77
- cleanupTasks.push(this.cleanup.evolveProfile());
78
- logger.info(`[Forge:Stop] 启动 ${cleanupTasks.length} 个清理任务`);
79
- const results = await Promise.allSettled(cleanupTasks);
80
- const failed = results.filter(r => r.status === 'rejected');
68
+ const skipped = [];
69
+ if (this.stopCount % 5 === 0) {
70
+ cleanupTasks.push({ name: 'CLAUDE.md 精炼', task: this.cleanup.refineClaudeMd(event) });
71
+ }
72
+ else {
73
+ skipped.push(`CLAUDE.md 精炼(每5次,当前第${this.stopCount}次)`);
74
+ }
75
+ cleanupTasks.push({ name: '文档同步', task: this.cleanup.syncDocs(event) });
76
+ cleanupTasks.push({ name: '技能进化', task: this.cleanup.evolveSkills() });
77
+ if (this.stopCount % 5 === 0) {
78
+ cleanupTasks.push({ name: '项目技能学习', task: this.cleanup.learnFromProject(event) });
79
+ }
80
+ else {
81
+ skipped.push(`项目技能学习(每5次)`);
82
+ }
83
+ cleanupTasks.push({ name: '画像更新', task: this.cleanup.updateProfile() });
84
+ if (this.stopCount % 10 === 0) {
85
+ cleanupTasks.push({ name: '画像进化', task: this.cleanup.evolveProfile() });
86
+ }
87
+ else {
88
+ skipped.push(`画像进化(每10次)`);
89
+ }
90
+ const taskNames = cleanupTasks.map(t => t.name).join('、');
91
+ logger.info(`启动 ${cleanupTasks.length} 个清理任务:${taskNames}`);
92
+ if (skipped.length > 0) {
93
+ logger.info(`跳过 ${skipped.length} 个周期任务:${skipped.join('、')}`);
94
+ }
95
+ const results = await Promise.allSettled(cleanupTasks.map(t => t.task));
96
+ const failed = results
97
+ .map((r, i) => r.status === 'rejected' ? cleanupTasks[i].name : null)
98
+ .filter(Boolean);
81
99
  if (failed.length > 0) {
82
- logger.warn(`[Forge:Stop] ${failed.length}/${results.length} 个清理任务失败`);
100
+ logger.warn(`${failed.length} 个清理任务失败:${failed.join('、')}`);
83
101
  }
84
102
  else {
85
- logger.info(`[Forge:Stop] 全部 ${results.length} 个清理任务完成`);
103
+ logger.info(`全部 ${results.length} 个清理任务完成`);
86
104
  }
87
105
  }
88
106
  }
@@ -1 +1 @@
1
- {"version":3,"file":"stop-handler.js","sourceRoot":"","sources":["../../../src/daemon/handlers/stop-handler.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"stop-handler.js","sourceRoot":"","sources":["../../../src/daemon/handlers/stop-handler.ts"],"names":[],"mappings":"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"}
@@ -73,5 +73,10 @@ export declare class UserPromptHandler extends BaseHookHandler {
73
73
  * 处理用户对 Pipeline 选择的回复(A/B/C)
74
74
  */
75
75
  private startPipelineFromChoice;
76
+ /**
77
+ * 根据用户需求关键词推断当前最匹配的 Convention 角色。
78
+ * 纯关键词匹配,不调用 AI,用于日志展示。
79
+ */
80
+ private inferCurrentRole;
76
81
  }
77
82
  //# sourceMappingURL=user-prompt-handler.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"user-prompt-handler.d.ts","sourceRoot":"","sources":["../../../src/daemon/handlers/user-prompt-handler.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AACjD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAC5D,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAkBpD,qBAAa,iBAAkB,SAAQ,eAAe;IACpD;;;OAGG;IACH,OAAO,CAAC,iBAAiB,CAA8B;IACvD;;;OAGG;IACH,OAAO,CAAC,cAAc,CAA6B;IACnD;;;OAGG;IACH,OAAO,CAAC,cAAc,CAAqC;IAE3D,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,oBAAoB,CAAO;IACnD,iCAAiC;IACjC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,gBAAgB,CAAkB;IAE1D,OAAO,CAAC,aAAa,CAA8B;gBAEvC,GAAG,EAAE,cAAc;IAK/B,4DAA4D;IAC5D,OAAO,CAAC,oBAAoB,CAAqB;IACjD,6CAA6C;IAC7C,OAAO,CAAC,cAAc,CAA6B;IAE7C,MAAM,CAAC,KAAK,EAAE,UAAU,GAAG,OAAO,CAAC,YAAY,GAAG,IAAI,CAAC;IAoF7D;;;OAGG;YACW,mBAAmB;IAwBjC,6BAA6B;IAC7B,OAAO,CAAC,aAAa;IAYrB;;;OAGG;IACH,OAAO,CAAC,wBAAwB;IAqDhC,8CAA8C;IAC9C,OAAO,CAAC,iBAAiB;IAkBzB,OAAO,CAAC,oBAAoB;IAQ5B;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAiB3B,OAAO,CAAC,WAAW;IASnB;;;OAGG;YACW,kBAAkB;IA2ChC,OAAO,CAAC,kBAAkB;IAW1B,+DAA+D;YACjD,iBAAiB;YA4BjB,iBAAiB;IA+C/B,OAAO,CAAC,oBAAoB;YAkBd,mBAAmB;IA2CjC;;;OAGG;IACH,OAAO,CAAC,oBAAoB;IAoC5B;;;OAGG;IACH,OAAO,CAAC,aAAa;IAerB;;OAEG;YACW,uBAAuB;CA0BtC"}
1
+ {"version":3,"file":"user-prompt-handler.d.ts","sourceRoot":"","sources":["../../../src/daemon/handlers/user-prompt-handler.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AACjD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAC5D,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAmBpD,qBAAa,iBAAkB,SAAQ,eAAe;IACpD;;;OAGG;IACH,OAAO,CAAC,iBAAiB,CAA8B;IACvD;;;OAGG;IACH,OAAO,CAAC,cAAc,CAA6B;IACnD;;;OAGG;IACH,OAAO,CAAC,cAAc,CAAqC;IAE3D,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,oBAAoB,CAAO;IACnD,iCAAiC;IACjC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,gBAAgB,CAAkB;IAE1D,OAAO,CAAC,aAAa,CAA8B;gBAEvC,GAAG,EAAE,cAAc;IAK/B,4DAA4D;IAC5D,OAAO,CAAC,oBAAoB,CAAqB;IACjD,6CAA6C;IAC7C,OAAO,CAAC,cAAc,CAA6B;IAE7C,MAAM,CAAC,KAAK,EAAE,UAAU,GAAG,OAAO,CAAC,YAAY,GAAG,IAAI,CAAC;IAoF7D;;;OAGG;YACW,mBAAmB;IAwBjC,6BAA6B;IAC7B,OAAO,CAAC,aAAa;IAYrB;;;OAGG;IACH,OAAO,CAAC,wBAAwB;IAqDhC,8CAA8C;IAC9C,OAAO,CAAC,iBAAiB;IAkBzB,OAAO,CAAC,oBAAoB;IAQ5B;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAiB3B,OAAO,CAAC,WAAW;IASnB;;;OAGG;YACW,kBAAkB;IA8ChC,OAAO,CAAC,kBAAkB;IAW1B,+DAA+D;YACjD,iBAAiB;YA4BjB,iBAAiB;IA+C/B,OAAO,CAAC,oBAAoB;YAkBd,mBAAmB;IA6CjC;;;OAGG;IACH,OAAO,CAAC,oBAAoB;IAoC5B;;;OAGG;IACH,OAAO,CAAC,aAAa;IAerB;;OAEG;YACW,uBAAuB;IA2BrC;;;OAGG;IACH,OAAO,CAAC,gBAAgB;CA6CzB"}
@@ -42,9 +42,9 @@ export class UserPromptHandler extends BaseHookHandler {
42
42
  // 0. 检测项目是否已初始化,未初始化时提示用户(每个 session 只提示一次)
43
43
  const sessionKey = `${event.session_id}:${event.project_path}`;
44
44
  if (!this.initPromptedSessions.has(sessionKey) && !isForgeManaged(event.project_path)) {
45
+ logger.info(`项目未初始化,已注入配置引导提示`);
45
46
  this.initPromptedSessions.add(sessionKey);
46
47
  this.initPromptedAt.set(sessionKey, Date.now());
47
- logger.info(`[Forge:初始化] 项目未初始化,注入引导提示:${event.project_path}`);
48
48
  return {
49
49
  allow: true,
50
50
  additionalContext: ForgeFormatter.wrapInQuote(`[Claude Forge 提示]\n当前项目(${event.project_path})尚未加入 Claude Forge 管理。\n请询问用户:"是否将当前项目加入 Claude Forge 管理?(将自动分析技术栈并生成项目规范)(是/否)"\n如果用户确认,请执行:\`\`\`bash\nmkdir -p "${event.project_path}/.claude-forge" && cd "${event.project_path}" && cf convention distill\n\`\`\`\n执行完成后告知用户项目已加入管理并生成了自定义规范。`),
@@ -54,12 +54,12 @@ export class UserPromptHandler extends BaseHookHandler {
54
54
  // 0. 对话式配置意图检测(pattern-based,不依赖 AI,优先执行)
55
55
  const configMsg = await this.configHandler.handle(userPrompt, event.project_path);
56
56
  if (configMsg) {
57
- logger.info('[Forge:对话配置] 命中配置意图,已执行并注入确认消息');
57
+ logger.info('检测到配置意图,已执行并注入确认消息');
58
58
  // 注入确认消息后继续让 Claude 处理原始消息
59
59
  return { allow: true, additionalContext: ForgeFormatter.wrapInQuote(configMsg) };
60
60
  }
61
61
  if (!intentEngine) {
62
- logger.info('[Forge:处理器] intentEngine 不可用,跳过意图分析');
62
+ logger.info('AI 引擎不可用,跳过意图分析');
63
63
  return;
64
64
  }
65
65
  // 1. 检查是否是对 Pipeline 选择的回复(优先处理)
@@ -82,9 +82,9 @@ export class UserPromptHandler extends BaseHookHandler {
82
82
  return patternResponse;
83
83
  // 4. 干预级别
84
84
  const interventionLevel = this.ctx.profileManager.getInterventionLevel(analysis.complexity);
85
- logger.info(`[Forge:画像] intervention=${interventionLevel} | complexity=${analysis.complexity}`);
85
+ logger.info(`用户偏好介入程度:${interventionLevel}(任务复杂度:${analysis.complexity})`);
86
86
  if (interventionLevel === 'silent' || analysis.complexity === 'simple') {
87
- logger.info(`[Forge:处理器] 静默跳过:intervention=${interventionLevel} complexity=${analysis.complexity}`);
87
+ logger.info(`简单任务,跳过编排(规范仍生效)`);
88
88
  return;
89
89
  }
90
90
  // 5. 执行路径卡片
@@ -100,7 +100,7 @@ export class UserPromptHandler extends BaseHookHandler {
100
100
  return response;
101
101
  }
102
102
  catch (err) {
103
- logger.error(`[Forge:意图] 分析失败:${err}`);
103
+ logger.error(`意图分析失败:${err}`);
104
104
  }
105
105
  }
106
106
  // ── 私有方法 ──────────────────────────────────────────────────────────────
@@ -115,13 +115,13 @@ export class UserPromptHandler extends BaseHookHandler {
115
115
  const choice = parsePipelineChoice(userPrompt);
116
116
  if (choice) {
117
117
  this.setSuggestionPending(event.project_path, false);
118
- logger.info(`[Forge:处理器] Pipeline 选择已接受:${choice}`);
118
+ logger.info(`用户选择了工作流方案:${choice}`);
119
119
  profileManager.recordBehavior({ type: 'accept', context: `pipeline:${choice}`, timestamp: new Date().toISOString() });
120
120
  return this.startPipelineFromChoice(choice, event);
121
121
  }
122
122
  if (this.suggestionPending.get(event.project_path)) {
123
123
  this.setSuggestionPending(event.project_path, false);
124
- logger.info('[Forge:处理器] Pipeline 建议被忽略');
124
+ logger.info('用户忽略了工作流建议');
125
125
  profileManager.recordBehavior({ type: 'skip', context: 'pipeline:ignored', timestamp: new Date().toISOString() });
126
126
  }
127
127
  return undefined;
@@ -132,7 +132,7 @@ export class UserPromptHandler extends BaseHookHandler {
132
132
  this.evictStaleEntries(now);
133
133
  const lastAt = this.lastAnalysisAt.get(projectPath) ?? 0;
134
134
  if (now - lastAt < UserPromptHandler.ANALYSIS_COOLDOWN_MS) {
135
- logger.info(`[Forge:意图] ${projectPath} 处于冷却中,跳过分析`);
135
+ logger.info(`分析冷却中,跳过(${projectPath})`);
136
136
  return false;
137
137
  }
138
138
  this.lastAnalysisAt.set(projectPath, now);
@@ -229,14 +229,14 @@ export class UserPromptHandler extends BaseHookHandler {
229
229
  ...(cache ?? { decisionsKey: '', decisionsResult: '' }),
230
230
  profileInjected: true,
231
231
  });
232
- logger.info(`[Forge:画像] 注入用户画像:role=${profile.role} level=${profile.experience_level} style=${profile.work_style}`);
232
+ logger.info(`注入用户画像:角色=${profile.role} 经验=${profile.experience_level} 风格=${profile.work_style}`);
233
233
  return ForgeFormatter.formatProfileContext(profile);
234
234
  }
235
235
  logAnalysis(analysis) {
236
- logger.info(`[Forge:意图] complexity=${analysis.complexity} | pipeline=${analysis.requiresPipeline} | ` +
237
- `files=${analysis.estimatedFiles} | clarify=${analysis.clarifyQuestions?.length ?? 0} | ` +
238
- `requirement="${analysis.requirement}"`);
239
- logger.info(`[Forge:意图] reasoning: ${analysis.reasoning}`);
236
+ const pipelineStr = analysis.requiresPipeline ? '需要多步骤编排' : '直接执行';
237
+ logger.info(`意图分析:${analysis.complexity} | ${pipelineStr} | ` +
238
+ `预估文件=${analysis.estimatedFiles} | 需求="${analysis.requirement}"`);
239
+ logger.info(`分析理由:${analysis.reasoning}`);
240
240
  }
241
241
  /**
242
242
  * Pattern 路由:若命中 Pattern,注入结构化执行指令并返回 HookResponse。
@@ -251,7 +251,10 @@ export class UserPromptHandler extends BaseHookHandler {
251
251
  const activeConventions = this.ctx.conventionManager.getActiveConventions(event.project_path);
252
252
  const patternCtx = await patternEngine.routeAndStart(userPrompt, event.session_id, event.project_path, complexity, activeConventions);
253
253
  if (!patternCtx) {
254
- logger.info('[Forge:Pattern] 未匹配到 Pattern,走常规编排路径');
254
+ // 未匹配到 Pattern,走常规路径,但仍推断当前角色
255
+ const inferredRole = this.inferCurrentRole(analysis.requirement, activeConventions);
256
+ const roleInfo = inferredRole ? ` | 当前角色=${inferredRole.name}` : '';
257
+ logger.info(`未匹配到工作流模板,走常规路径${roleInfo}`);
255
258
  return undefined;
256
259
  }
257
260
  const plan = patternEngine.getActivePlan(event.project_path);
@@ -262,7 +265,7 @@ export class UserPromptHandler extends BaseHookHandler {
262
265
  const ctx = patternEngine.buildAdditionalContext(patternCtx, plan.patternId, primaryConvention);
263
266
  if (!ctx)
264
267
  return undefined;
265
- logger.info(`[Forge:Pattern] 命中 Pattern,注入执行指令:${patternCtx.patternName} — ${patternCtx.currentPhaseId}`);
268
+ logger.info(`匹配到工作流模板:${patternCtx.patternName} — 当前阶段:${patternCtx.currentPhaseId}`);
266
269
  // 执行路径卡片通过 systemMessage 展示给用户,Pattern 指令通过 additionalContext 传给 Claude
267
270
  const card = this.buildExecutionCard(analysis);
268
271
  const profileCtx = this.buildProfileContext(event.project_path);
@@ -270,7 +273,7 @@ export class UserPromptHandler extends BaseHookHandler {
270
273
  return { allow: true, systemMessage: card, additionalContext: ForgeFormatter.wrapInQuote(combinedCtx) };
271
274
  }
272
275
  catch (err) {
273
- logger.warn(`[Forge:Pattern] 路由失败,降级到 Skill 编排:${err}`);
276
+ logger.warn(`工作流路由失败,降级到技能编排:${err}`);
274
277
  return undefined;
275
278
  }
276
279
  }
@@ -290,7 +293,7 @@ export class UserPromptHandler extends BaseHookHandler {
290
293
  if (!pipelineEngine || !config.autopilot.auto_start_pipeline)
291
294
  return undefined;
292
295
  if (pipelineEngine.hasActivePipeline(event.project_path)) {
293
- logger.info('[Forge:处理器] Pipeline 已激活中');
296
+ logger.info('已有活跃的编排流程');
294
297
  return undefined;
295
298
  }
296
299
  const confirmMode = config.autopilot.pipeline_confirm_mode;
@@ -301,7 +304,7 @@ export class UserPromptHandler extends BaseHookHandler {
301
304
  return this.promptPipelineChoice(analysis, card, event);
302
305
  }
303
306
  // preview 模式:仅展示,不启动
304
- logger.info('[Forge:处理器] 预览模式,不启动 Pipeline');
307
+ logger.info('预览模式,不启动编排流程');
305
308
  return undefined;
306
309
  }
307
310
  async autoStartPipeline(analysis, card, event, qualityGate) {
@@ -314,7 +317,7 @@ export class UserPromptHandler extends BaseHookHandler {
314
317
  const activeConventions = this.ctx.conventionManager.getActiveConventions(event.project_path);
315
318
  const conventionPrompt = this.ctx.conventionManager.getActivePrompt(event.project_path) ?? undefined;
316
319
  if (activeConventions.length > 0) {
317
- logger.info(`[Forge:规范] ${ForgeFormatter.formatConventionSummary(activeConventions)}`);
320
+ logger.info(`已加载项目规范:${ForgeFormatter.formatConventionSummary(activeConventions)}`);
318
321
  }
319
322
  const context = ForgeFormatter.wrapInQuote(this.budgetContext({ content: this.buildProfileContext(event.project_path), priority: -1 }, { content: conventionPrompt, priority: 0 }, { content: autoMsg, priority: 1 }, { content: this.readDecisionsContext(analysis.requirement, event.project_path), priority: 2 }));
320
323
  if (analysis.clarifyQuestions?.length) {
@@ -326,7 +329,7 @@ export class UserPromptHandler extends BaseHookHandler {
326
329
  const pipelineInjected = ['Pipeline指令'];
327
330
  if (conventionPrompt)
328
331
  pipelineInjected.push(`规范(${activeConventions.map(c => c.id).join(',')})`);
329
- logger.info(`[Forge:Pipeline] 自动启动完成 | tasks=${pipeline.tasks.length} | 注入=[${pipelineInjected.join(', ')}]`);
332
+ logger.info(`自动启动多步骤编排 | 任务数=${pipeline.tasks.length} | 注入=[${pipelineInjected.join(', ')}]`);
330
333
  return { allow: true, systemMessage: card, additionalContext: context };
331
334
  }
332
335
  promptPipelineChoice(analysis, card, event) {
@@ -334,10 +337,10 @@ export class UserPromptHandler extends BaseHookHandler {
334
337
  this.setSuggestionPending(event.project_path, true);
335
338
  if (analysis.clarifyQuestions?.length) {
336
339
  const clarify = ForgeFormatter.formatClarifyRequest(analysis.clarifyQuestions);
337
- logger.info('[Forge:处理器] 向用户展示澄清 + Pipeline 选项');
340
+ logger.info('向用户展示澄清问题 + 编排方案选项');
338
341
  return { allow: true, systemMessage: card, additionalContext: ForgeFormatter.mergeContexts(ForgeFormatter.wrapInQuote(options), clarify) };
339
342
  }
340
- logger.info('[Forge:处理器] 向用户展示 Pipeline 选项');
343
+ logger.info('向用户展示编排方案选项');
341
344
  return { allow: true, systemMessage: card, additionalContext: ForgeFormatter.wrapInQuote(options) };
342
345
  }
343
346
  async buildSimpleResponse(analysis, card, projectPath) {
@@ -347,11 +350,11 @@ export class UserPromptHandler extends BaseHookHandler {
347
350
  const activeConventions = this.ctx.conventionManager.getActiveConventions(projectPath);
348
351
  const conventionPrompt = this.ctx.conventionManager.getActivePrompt(projectPath) ?? undefined;
349
352
  if (activeConventions.length > 0) {
350
- logger.info(`[Forge:规范] ${ForgeFormatter.formatConventionSummary(activeConventions)}`);
353
+ logger.info(`已加载项目规范:${ForgeFormatter.formatConventionSummary(activeConventions)}`);
351
354
  }
352
355
  if (analysis.clarifyQuestions?.length) {
353
356
  const clarify = ForgeFormatter.formatClarifyRequest(analysis.clarifyQuestions);
354
- logger.info(`[Forge:处理器] 注入澄清问题 ${analysis.clarifyQuestions.length} 个`);
357
+ logger.info(`注入澄清问题 ${analysis.clarifyQuestions.length} 个`);
355
358
  return {
356
359
  allow: true,
357
360
  systemMessage: card,
@@ -369,7 +372,9 @@ export class UserPromptHandler extends BaseHookHandler {
369
372
  injected.push('执行指令');
370
373
  if (decisionsContext)
371
374
  injected.push('决策历史');
372
- logger.info(`[Forge:处理器] 处理完成:path=直接执行 | complexity=${analysis.complexity} | 注入=[${injected.join(', ') || '无'}]`);
375
+ const inferredRole = this.inferCurrentRole(analysis.requirement, activeConventions);
376
+ const roleStr = inferredRole ? ` | 当前角色=${inferredRole.name}` : '';
377
+ logger.info(`处理完成:直接执行 | 复杂度=${analysis.complexity}${roleStr} | 注入=[${injected.join(', ') || '无'}]`);
373
378
  return {
374
379
  allow: true,
375
380
  systemMessage: card,
@@ -395,7 +400,7 @@ export class UserPromptHandler extends BaseHookHandler {
395
400
  const fingerprint = content.slice(0, 64);
396
401
  const cache = this.injectionCache.get(projectPath);
397
402
  if (cache?.decisionsKey === fingerprint) {
398
- logger.info('[Forge:决策] 内容未变,跳过重复注入');
403
+ logger.info('决策历史内容未变,跳过重复注入');
399
404
  return undefined;
400
405
  }
401
406
  const result = ForgeFormatter.formatModuleNotification('decisions', `项目决策历史(供参考):\n\`\`\`\n${recent}\n\`\`\``);
@@ -423,7 +428,7 @@ export class UserPromptHandler extends BaseHookHandler {
423
428
  const used = selected.reduce((sum, c) => sum + c.length, 0);
424
429
  if (selected.length === 0)
425
430
  return '';
426
- logger.info(`[Forge:预算] 注入 ${used} 字符,共 ${selected.length} 块`);
431
+ logger.info(`注入上下文 ${used} 字符,共 ${selected.length} 块`);
427
432
  return ForgeFormatter.mergeContexts(...selected);
428
433
  }
429
434
  /**
@@ -433,16 +438,59 @@ export class UserPromptHandler extends BaseHookHandler {
433
438
  const option = PIPELINE_OPTIONS[choice];
434
439
  if (choice === 'manual') {
435
440
  const msg = ForgeFormatter.formatModuleNotification('pipeline', '已切换到手动控制模式,请逐步告诉我你的需求');
436
- logger.info('[Forge:处理器] 用户选择了手动模式');
441
+ logger.info('用户选择了手动模式');
437
442
  return { allow: true, additionalContext: ForgeFormatter.wrapInQuote(msg) };
438
443
  }
439
444
  const requirement = event.tool_input?.user_prompt || '用户需求';
440
445
  const pipeline = await this.ctx.pipelineEngine.startPipeline(requirement, event.project_path, event.session_id);
441
446
  if (this.ctx.qualityGate)
442
447
  this.ctx.qualityGate.setRequirement(requirement);
443
- logger.info(`[Forge:Pipeline] 已启动(${option.description}):id=${pipeline.id} | tasks=${pipeline.tasks.length}`);
448
+ logger.info(`已启动编排(${option.description}):id=${pipeline.id} | 任务数=${pipeline.tasks.length}`);
444
449
  const msg = ForgeFormatter.formatModuleNotification('pipeline', `已启动${option.description},共 ${pipeline.tasks.length} 个任务\n阶段:${option.phases.join(' → ')}`);
445
450
  return { allow: true, additionalContext: ForgeFormatter.wrapInQuote(msg) };
446
451
  }
452
+ /**
453
+ * 根据用户需求关键词推断当前最匹配的 Convention 角色。
454
+ * 纯关键词匹配,不调用 AI,用于日志展示。
455
+ */
456
+ inferCurrentRole(requirement, conventions) {
457
+ const input = requirement.toLowerCase();
458
+ // 角色关键词映射(按优先级排序,先匹配先返回)
459
+ const roleKeywords = [
460
+ // 需求/产品阶段
461
+ { keywords: ['需求', '用户故事', '产品', '规格', '验收', 'spec', 'requirement'], roleKeys: ['product_manager'] },
462
+ // 架构/设计阶段
463
+ { keywords: ['架构', '设计', '方案', '技术选型', 'api', '数据模型', 'schema'], roleKeys: ['architect'] },
464
+ // 测试/安全网阶段
465
+ { keywords: ['测试', '覆盖', '安全网', 'test', '特征测试', '边界'], roleKeys: ['safety_net_engineer', 'verification_engineer'] },
466
+ // 审查阶段
467
+ { keywords: ['审查', 'review', '代码审查', '检查', '质量'], roleKeys: ['tech_lead', 'verification_engineer'] },
468
+ // 理解/分析阶段
469
+ { keywords: ['理解', '分析', '阅读', '调查', '排查', '诊断', 'debug'], roleKeys: ['code_archaeologist'] },
470
+ // 编码/实现阶段(最宽泛,放最后)
471
+ { keywords: ['实现', '编码', '开发', '修复', '重构', '优化', '改', '加', '写', 'fix', 'implement', 'refactor'], roleKeys: ['developer', 'surgeon'] },
472
+ ];
473
+ // 收集所有 Convention 的角色
474
+ const allRoles = new Map();
475
+ for (const conv of conventions) {
476
+ for (const [key, role] of Object.entries(conv.roles ?? {})) {
477
+ allRoles.set(key, role);
478
+ }
479
+ }
480
+ if (allRoles.size === 0)
481
+ return null;
482
+ // 按关键词匹配
483
+ for (const { keywords, roleKeys } of roleKeywords) {
484
+ if (keywords.some(kw => input.includes(kw))) {
485
+ for (const rk of roleKeys) {
486
+ const role = allRoles.get(rk);
487
+ if (role)
488
+ return role;
489
+ }
490
+ }
491
+ }
492
+ // 默认返回开发工程师(最常见的角色)
493
+ return allRoles.get('developer') ?? allRoles.get('surgeon') ?? null;
494
+ }
447
495
  }
448
496
  //# sourceMappingURL=user-prompt-handler.js.map