@winspan/claude-forge 0.2.9 → 0.2.13

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 (40) 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 +9 -0
  10. package/dist/daemon/handlers/user-prompt-handler.d.ts.map +1 -1
  11. package/dist/daemon/handlers/user-prompt-handler.js +107 -34
  12. package/dist/daemon/handlers/user-prompt-handler.js.map +1 -1
  13. package/dist/daemon/index.d.ts.map +1 -1
  14. package/dist/daemon/index.js +28 -5
  15. package/dist/daemon/index.js.map +1 -1
  16. package/dist/daemon/tool-summary.d.ts +9 -0
  17. package/dist/daemon/tool-summary.d.ts.map +1 -0
  18. package/dist/daemon/tool-summary.js +63 -0
  19. package/dist/daemon/tool-summary.js.map +1 -0
  20. package/dist/distill/trigger.d.ts.map +1 -1
  21. package/dist/distill/trigger.js +2 -1
  22. package/dist/distill/trigger.js.map +1 -1
  23. package/dist/pattern-engine/convention-pattern-generator.d.ts.map +1 -1
  24. package/dist/pattern-engine/convention-pattern-generator.js +2 -1
  25. package/dist/pattern-engine/convention-pattern-generator.js.map +1 -1
  26. package/dist/pattern-engine/index.d.ts +12 -5
  27. package/dist/pattern-engine/index.d.ts.map +1 -1
  28. package/dist/pattern-engine/index.js +77 -22
  29. package/dist/pattern-engine/index.js.map +1 -1
  30. package/dist/pattern-engine/pattern-loader.js +5 -5
  31. package/dist/pattern-engine/pattern-loader.js.map +1 -1
  32. package/dist/pattern-engine/pattern-router.js +5 -5
  33. package/dist/pattern-engine/pattern-router.js.map +1 -1
  34. package/dist/skill-registry/orchestrator.d.ts.map +1 -1
  35. package/dist/skill-registry/orchestrator.js +9 -3
  36. package/dist/skill-registry/orchestrator.js.map +1 -1
  37. package/dist/skill-registry/registry.d.ts.map +1 -1
  38. package/dist/skill-registry/registry.js +1 -0
  39. package/dist/skill-registry/registry.js.map +1 -1
  40. 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":"AAAA,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,IAAI,MAAM,MAAM,CAAC;AAExB,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAe5C;;;;;;;GAOG;AACH,MAAM,OAAO,YAAY;IACf,GAAG,CAAa;IACxB,mCAAmC;IAC3B,cAAc,GAAG,IAAI,GAAG,EAA8C,CAAC;IAC/E,iCAAiC;IACzB,cAAc,GAAG,IAAI,GAAG,EAA8C,CAAC;IACvE,MAAM,CAAU,YAAY,GAAG,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC,OAAO;IAE7D,YAAY,GAAe;QACzB,IAAI,CAAC,GAAG,GAAG,GAAG,CAAC;IACjB,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,OAAO,CACX,UAAkB,EAClB,WAAmB,EACnB,SAAkB,EAClB,mBAA4B;QAE5B,iBAAiB;QACjB,uCAAuC;QACvC,MAAM,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC,UAAU,EAAE,CAAC,CAAC,mBAAmB,CAAC,CAAC;QACxE,IAAI,WAAW,EAAE,CAAC;YAChB,MAAM,CAAC,IAAI,CAAC,eAAe,WAAW,CAAC,UAAU,aAAa,WAAW,CAAC,SAAS,EAAE,CAAC,CAAC;YACvF,OAAO,WAAW,CAAC;QACrB,CAAC;QAED,kCAAkC;QAClC,IAAI,CAAC,iBAAiB,EAAE,CAAC;QAEzB,yBAAyB;QACzB,IAAI,CAAC;YACH,OAAO,MAAM,IAAI,CAAC,SAAS,CAAC,UAAU,EAAE,WAAW,EAAE,SAAS,EAAE,mBAAmB,CAAC,CAAC;QACvF,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,MAAM,CAAC,IAAI,CAAC,yBAAyB,GAAG,EAAE,CAAC,CAAC;YAC5C,OAAO,IAAI,CAAC,eAAe,CAAC,UAAU,CAAC,CAAC;QAC1C,CAAC;IACH,CAAC;IAED,yBAAyB;IACjB,iBAAiB;QACvB,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACvB,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,IAAI,CAAC,cAAc,EAAE,CAAC;YAC/C,IAAI,GAAG,IAAI,KAAK,CAAC,QAAQ;gBAAE,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QAC7D,CAAC;QACD,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,IAAI,CAAC,cAAc,EAAE,CAAC;YAC/C,IAAI,GAAG,IAAI,KAAK,CAAC,QAAQ;gBAAE,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QAC7D,CAAC;IACH,CAAC;IAED;;;OAGG;IACK,WAAW,CAAC,MAAc,EAAE,eAAwB;QAC1D,MAAM,KAAK,GAAG,MAAM,CAAC,WAAW,EAAE,CAAC,IAAI,EAAE,CAAC;QAE1C,8CAA8C;QAC9C,MAAM,eAAe,GAAG,mEAAmE,CAAC;QAC5F,IAAI,eAAe,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;YAChC,OAAO,IAAI,CAAC,CAAC,iBAAiB;QAChC,CAAC;QAED,iBAAiB;QACjB,MAAM,oBAAoB,GAAG;YAC3B,yCAAyC;YACzC,4CAA4C;YAC5C,0BAA0B;YAC1B,kCAAkC;SACnC,CAAC;QACF,KAAK,MAAM,OAAO,IAAI,oBAAoB,EAAE,CAAC;YAC3C,IAAI,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;gBACxB,OAAO;oBACL,UAAU,EAAE,QAAQ;oBACpB,gBAAgB,EAAE,KAAK;oBACvB,WAAW,EAAE,MAAM;oBACnB,SAAS,EAAE,gBAAgB;oBAC3B,cAAc,EAAE,CAAC;oBACjB,eAAe,EAAE,EAAE;iBACpB,CAAC;YACJ,CAAC;QACH,CAAC;QAED,qBAAqB;QACrB,MAAM,eAAe,GAAG;YACtB,yDAAyD;YACzD,mDAAmD;YACnD,uCAAuC;SACxC,CAAC;QACF,KAAK,MAAM,OAAO,IAAI,eAAe,EAAE,CAAC;YACtC,IAAI,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;gBACxB,OAAO;oBACL,UAAU,EAAE,QAAQ;oBACpB,gBAAgB,EAAE,KAAK;oBACvB,WAAW,EAAE,MAAM;oBACnB,SAAS,EAAE,qBAAqB;oBAChC,cAAc,EAAE,CAAC;oBACjB,eAAe,EAAE,EAAE;iBACpB,CAAC;YACJ,CAAC;QACH,CAAC;QAED,oCAAoC;QACpC,IAAI,CAAC,eAAe,EAAE,CAAC;YACrB,MAAM,aAAa,GAAG,yEAAyE,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YAC5G,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,aAAa,EAAE,CAAC;gBACxC,OAAO;oBACL,UAAU,EAAE,QAAQ;oBACpB,gBAAgB,EAAE,KAAK;oBACvB,WAAW,EAAE,MAAM;oBACnB,SAAS,EAAE,0BAA0B;oBACrC,cAAc,EAAE,CAAC;oBACjB,eAAe,EAAE,EAAE;iBACpB,CAAC;YACJ,CAAC;QACH,CAAC;QAED,OAAO,IAAI,CAAC,CAAC,WAAW;IAC1B,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,SAAS,CACrB,UAAkB,EAClB,WAAmB,EACnB,SAAkB,EAClB,mBAA4B;QAE5B,MAAM,WAAW,GAAG,IAAI,CAAC,oBAAoB,CAAC,WAAW,CAAC,CAAC;QAC3D,MAAM,gBAAgB,GAAG,IAAI,CAAC,mBAAmB,CAAC,WAAW,CAAC,CAAC;QAE/D,MAAM,cAAc,GAAG,mBAAmB;YACxC,CAAC,CAAC,yBAAyB,mBAAmB,IAAI;YAClD,CAAC,CAAC,EAAE,CAAC;QAEP,MAAM,MAAM,GAAG;;;EAGjB,UAAU;EACV,cAAc;;MAEV,WAAW;EACf,SAAS,CAAC,CAAC,CAAC,QAAQ,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE;EACpC,gBAAgB,CAAC,CAAC,CAAC,UAAU,gBAAgB,EAAE,CAAC,CAAC,CAAC,EAAE;EACpD,WAAW,CAAC,CAAC,CAAC,YAAY,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;kBA8C5B,CAAC;QAEf,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;QAC3D,OAAO,IAAI,CAAC,aAAa,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC;IAClD,CAAC;IAED;;OAEG;IACK,mBAAmB,CAAC,WAAmB;QAC7C,MAAM,MAAM,GAAG,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;QACpD,IAAI,MAAM,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,MAAM,CAAC,QAAQ;YAAE,OAAO,MAAM,CAAC,IAAI,CAAC;QAE/D,IAAI,CAAC;YACH,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,WAAW,CAAC;gBAAE,OAAO,EAAE,CAAC;YAE3C,MAAM,KAAK,GAAa,EAAE,CAAC;YAC3B,MAAM,OAAO,GAAG,EAAE,CAAC,WAAW,CAAC,WAAW,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;YAErE,cAAc;YACd,MAAM,IAAI,GAAa,EAAE,CAAC;YAC1B,MAAM,KAAK,GAAa,EAAE,CAAC;YAC3B,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAC,CAAC,cAAc,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,aAAa,EAAE,SAAS,EAAE,eAAe,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC,CAAC;YAE5I,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;gBAC5B,IAAI,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,cAAc;oBAAE,SAAS;gBAC1E,IAAI,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC;oBAAE,SAAS;gBAEvC,IAAI,KAAK,CAAC,WAAW,EAAE,EAAE,CAAC;oBACxB,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,GAAG,GAAG,CAAC,CAAC;gBAC9B,CAAC;qBAAM,CAAC;oBACN,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;gBACzB,CAAC;YACH,CAAC;YAED,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC;gBAAE,KAAK,CAAC,IAAI,CAAC,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YAC1D,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC;gBAAE,KAAK,CAAC,IAAI,CAAC,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YAE5D,0BAA0B;YAC1B,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC;YAC9C,IAAI,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;gBAC3B,MAAM,UAAU,GAAG,EAAE,CAAC,WAAW,CAAC,OAAO,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;gBACpE,MAAM,OAAO,GAAG,UAAU;qBACvB,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;qBACvD,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,GAAG,GAAG,CAAC,CAAC;gBAC1B,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;oBACvB,KAAK,CAAC,IAAI,CAAC,YAAY,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;gBAC/C,CAAC;YACH,CAAC;YAED,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAC9B,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,WAAW,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,YAAY,CAAC,YAAY,EAAE,CAAC,CAAC;YACjG,OAAO,IAAI,CAAC;QACd,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,EAAE,CAAC;QACZ,CAAC;IACH,CAAC;IAED;;;OAGG;IACK,eAAe,CAAC,MAAc;QACpC,wBAAwB;QACxB,MAAM,SAAS,GAAG,yEAAyE,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAEzG,IAAI,CAAC,SAAS,EAAE,CAAC;YACf,OAAO;gBACL,UAAU,EAAE,QAAQ;gBACpB,gBAAgB,EAAE,KAAK;gBACvB,WAAW,EAAE,MAAM;gBACnB,SAAS,EAAE,2BAA2B;gBACtC,cAAc,EAAE,CAAC;gBACjB,eAAe,EAAE,EAAE;aACpB,CAAC;QACJ,CAAC;QAED,OAAO;YACL,UAAU,EAAE,UAAU;YACtB,gBAAgB,EAAE,KAAK;YACvB,WAAW,EAAE,MAAM;YACnB,SAAS,EAAE,6BAA6B;YACxC,cAAc,EAAE,CAAC;YACjB,eAAe,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC;SAClC,CAAC;IACJ,CAAC;IAEO,aAAa,CAAC,QAAgB,EAAE,cAAsB;QAC5D,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,QAAQ,CAAC,OAAO,CAAC,aAAa,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC;YAC3E,MAAM,SAAS,GAAG,OAAO,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC;YAC/C,IAAI,CAAC,SAAS;gBAAE,MAAM,IAAI,KAAK,CAAC,eAAe,CAAC,CAAC;YAEjD,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;YACxC,OAAO;gBACL,UAAU,EAAE,MAAM,CAAC,UAAU,IAAI,UAAU;gBAC3C,gBAAgB,EAAE,MAAM,CAAC,gBAAgB,IAAI,KAAK;gBAClD,WAAW,EAAE,MAAM,CAAC,WAAW,IAAI,cAAc;gBACjD,SAAS,EAAE,MAAM,CAAC,SAAS,IAAI,EAAE;gBACjC,cAAc,EAAE,MAAM,CAAC,cAAc,IAAI,CAAC;gBAC1C,eAAe,EAAE,MAAM,CAAC,eAAe,IAAI,EAAE;gBAC7C,gBAAgB,EAAE,MAAM,CAAC,gBAAgB;gBACzC,cAAc,EAAE,MAAM,CAAC,cAAc;aACtC,CAAC;QACJ,CAAC;QAAC,MAAM,CAAC;YACP,MAAM,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;YAChC,OAAO,IAAI,CAAC,eAAe,CAAC,cAAc,CAAC,CAAC;QAC9C,CAAC;IACH,CAAC;IAED;;OAEG;IACK,oBAAoB,CAAC,WAAmB;QAC9C,MAAM,MAAM,GAAG,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;QACpD,IAAI,MAAM,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,MAAM,CAAC,QAAQ;YAAE,OAAO,MAAM,CAAC,IAAI,CAAC;QAE/D,IAAI,CAAC;YACH,MAAM,aAAa,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,eAAe,EAAE,cAAc,CAAC,CAAC;YAC9E,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,aAAa,CAAC;gBAAE,OAAO,EAAE,CAAC;YAC7C,MAAM,OAAO,GAAG,EAAE,CAAC,YAAY,CAAC,aAAa,EAAE,OAAO,CAAC,CAAC;YACxD,uBAAuB;YACvB,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC;YAC5B,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,WAAW,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,YAAY,CAAC,YAAY,EAAE,CAAC,CAAC;YACjG,OAAO,IAAI,CAAC;QACd,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,EAAE,CAAC;QACZ,CAAC;IACH,CAAC;IAED;;OAEG;IACH,iBAAiB,CAAC,QAAwB;QACxC,IAAI,QAAQ,CAAC,UAAU,KAAK,QAAQ;YAAE,OAAO,IAAI,CAAC;QAElD,MAAM,KAAK,GAAa,EAAE,CAAC;QAE3B,IAAI,QAAQ,CAAC,gBAAgB,EAAE,CAAC;YAC9B,KAAK,CAAC,IAAI,CAAC,4CAA4C,CAAC,CAAC;YACzD,KAAK,CAAC,IAAI,CAAC,MAAM,QAAQ,CAAC,WAAW,EAAE,CAAC,CAAC;YACzC,KAAK,CAAC,IAAI,CAAC,MAAM,QAAQ,CAAC,eAAe,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;YACzD,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YACf,KAAK,CAAC,IAAI,CAAC,qCAAqC,CAAC,CAAC;QACpD,CAAC;aAAM,CAAC;YACN,uBAAuB;YACvB,KAAK,CAAC,IAAI,CAAC,gBAAgB,QAAQ,CAAC,WAAW,EAAE,CAAC,CAAC;YAEnD,IAAI,QAAQ,CAAC,cAAc,IAAI,QAAQ,CAAC,cAAc,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAClE,KAAK,CAAC,IAAI,CAAC,SAAS,QAAQ,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YAC5D,CAAC;QACH,CAAC;QAED,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC1B,CAAC"}
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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"}
@@ -58,6 +58,10 @@ export declare class UserPromptHandler extends BaseHookHandler {
58
58
  private handleComplexTask;
59
59
  private autoStartPipeline;
60
60
  private promptPipelineChoice;
61
+ /**
62
+ * 简单任务的轻量注入:只注入规范和画像,不生成执行卡片和阶段计划。
63
+ */
64
+ private buildLightweightResponse;
61
65
  private buildSimpleResponse;
62
66
  /**
63
67
  * 读取项目决策历史(最近 800 字符),注入到会话上下文。
@@ -73,5 +77,10 @@ export declare class UserPromptHandler extends BaseHookHandler {
73
77
  * 处理用户对 Pipeline 选择的回复(A/B/C)
74
78
  */
75
79
  private startPipelineFromChoice;
80
+ /**
81
+ * 根据用户需求关键词推断当前最匹配的 Convention 角色。
82
+ * 纯关键词匹配,不调用 AI,用于日志展示。
83
+ */
84
+ private inferCurrentRole;
76
85
  }
77
86
  //# 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;IAyF7D;;;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;IAkB5B;;OAEG;IACH,OAAO,CAAC,wBAAwB;YAwBlB,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,25 +82,29 @@ 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}`);
86
- if (interventionLevel === 'silent' || analysis.complexity === 'simple') {
87
- logger.info(`[Forge:处理器] 静默跳过:intervention=${interventionLevel} complexity=${analysis.complexity}`);
85
+ logger.info(`用户偏好介入程度:${interventionLevel}(任务复杂度:${analysis.complexity})`);
86
+ if (interventionLevel === 'silent') {
87
+ logger.info(`用户偏好静默模式,跳过编排`);
88
88
  return;
89
89
  }
90
- // 5. 执行路径卡片
90
+ // 5. 简单任务:轻量注入(只注入规范和画像,跳过执行卡片和 Pipeline)
91
+ if (analysis.complexity === 'simple') {
92
+ return this.buildLightweightResponse(analysis, event.project_path);
93
+ }
94
+ // 6. 执行路径卡片(moderate/complex)
91
95
  const card = this.buildExecutionCard(analysis);
92
- // 6. 复杂任务 Pipeline 决策
96
+ // 7. 复杂任务 Pipeline 决策
93
97
  if (analysis.requiresPipeline) {
94
98
  const pipelineResponse = await this.handleComplexTask(analysis, card, event, interventionLevel);
95
99
  if (pipelineResponse !== undefined)
96
100
  return pipelineResponse;
97
101
  }
98
- // 7. 简单/中等任务:知识搜索 + 指令注入
102
+ // 8. 中等任务:知识搜索 + 指令注入
99
103
  const response = await this.buildSimpleResponse(analysis, card, event.project_path);
100
104
  return response;
101
105
  }
102
106
  catch (err) {
103
- logger.error(`[Forge:意图] 分析失败:${err}`);
107
+ logger.error(`意图分析失败:${err}`);
104
108
  }
105
109
  }
106
110
  // ── 私有方法 ──────────────────────────────────────────────────────────────
@@ -115,13 +119,13 @@ export class UserPromptHandler extends BaseHookHandler {
115
119
  const choice = parsePipelineChoice(userPrompt);
116
120
  if (choice) {
117
121
  this.setSuggestionPending(event.project_path, false);
118
- logger.info(`[Forge:处理器] Pipeline 选择已接受:${choice}`);
122
+ logger.info(`用户选择了工作流方案:${choice}`);
119
123
  profileManager.recordBehavior({ type: 'accept', context: `pipeline:${choice}`, timestamp: new Date().toISOString() });
120
124
  return this.startPipelineFromChoice(choice, event);
121
125
  }
122
126
  if (this.suggestionPending.get(event.project_path)) {
123
127
  this.setSuggestionPending(event.project_path, false);
124
- logger.info('[Forge:处理器] Pipeline 建议被忽略');
128
+ logger.info('用户忽略了工作流建议');
125
129
  profileManager.recordBehavior({ type: 'skip', context: 'pipeline:ignored', timestamp: new Date().toISOString() });
126
130
  }
127
131
  return undefined;
@@ -132,7 +136,7 @@ export class UserPromptHandler extends BaseHookHandler {
132
136
  this.evictStaleEntries(now);
133
137
  const lastAt = this.lastAnalysisAt.get(projectPath) ?? 0;
134
138
  if (now - lastAt < UserPromptHandler.ANALYSIS_COOLDOWN_MS) {
135
- logger.info(`[Forge:意图] ${projectPath} 处于冷却中,跳过分析`);
139
+ logger.info(`分析冷却中,跳过(${projectPath})`);
136
140
  return false;
137
141
  }
138
142
  this.lastAnalysisAt.set(projectPath, now);
@@ -229,14 +233,14 @@ export class UserPromptHandler extends BaseHookHandler {
229
233
  ...(cache ?? { decisionsKey: '', decisionsResult: '' }),
230
234
  profileInjected: true,
231
235
  });
232
- logger.info(`[Forge:画像] 注入用户画像:role=${profile.role} level=${profile.experience_level} style=${profile.work_style}`);
236
+ logger.info(`注入用户画像:角色=${profile.role} 经验=${profile.experience_level} 风格=${profile.work_style}`);
233
237
  return ForgeFormatter.formatProfileContext(profile);
234
238
  }
235
239
  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}`);
240
+ const pipelineStr = analysis.requiresPipeline ? '需要多步骤编排' : '直接执行';
241
+ logger.info(`意图分析:${analysis.complexity} | ${pipelineStr} | ` +
242
+ `预估文件=${analysis.estimatedFiles} | 需求="${analysis.requirement}"`);
243
+ logger.info(`分析理由:${analysis.reasoning}`);
240
244
  }
241
245
  /**
242
246
  * Pattern 路由:若命中 Pattern,注入结构化执行指令并返回 HookResponse。
@@ -251,7 +255,10 @@ export class UserPromptHandler extends BaseHookHandler {
251
255
  const activeConventions = this.ctx.conventionManager.getActiveConventions(event.project_path);
252
256
  const patternCtx = await patternEngine.routeAndStart(userPrompt, event.session_id, event.project_path, complexity, activeConventions);
253
257
  if (!patternCtx) {
254
- logger.info('[Forge:Pattern] 未匹配到 Pattern,走常规编排路径');
258
+ // 未匹配到 Pattern,走常规路径,但仍推断当前角色
259
+ const inferredRole = this.inferCurrentRole(analysis.requirement, activeConventions);
260
+ const roleInfo = inferredRole ? ` | 当前角色=${inferredRole.name}` : '';
261
+ logger.info(`未匹配到工作流模板,走常规路径${roleInfo}`);
255
262
  return undefined;
256
263
  }
257
264
  const plan = patternEngine.getActivePlan(event.project_path);
@@ -262,7 +269,7 @@ export class UserPromptHandler extends BaseHookHandler {
262
269
  const ctx = patternEngine.buildAdditionalContext(patternCtx, plan.patternId, primaryConvention);
263
270
  if (!ctx)
264
271
  return undefined;
265
- logger.info(`[Forge:Pattern] 命中 Pattern,注入执行指令:${patternCtx.patternName} — ${patternCtx.currentPhaseId}`);
272
+ logger.info(`匹配到工作流模板:${patternCtx.patternName} — 当前阶段:${patternCtx.currentPhaseId}`);
266
273
  // 执行路径卡片通过 systemMessage 展示给用户,Pattern 指令通过 additionalContext 传给 Claude
267
274
  const card = this.buildExecutionCard(analysis);
268
275
  const profileCtx = this.buildProfileContext(event.project_path);
@@ -270,7 +277,7 @@ export class UserPromptHandler extends BaseHookHandler {
270
277
  return { allow: true, systemMessage: card, additionalContext: ForgeFormatter.wrapInQuote(combinedCtx) };
271
278
  }
272
279
  catch (err) {
273
- logger.warn(`[Forge:Pattern] 路由失败,降级到 Skill 编排:${err}`);
280
+ logger.warn(`工作流路由失败,降级到技能编排:${err}`);
274
281
  return undefined;
275
282
  }
276
283
  }
@@ -290,7 +297,7 @@ export class UserPromptHandler extends BaseHookHandler {
290
297
  if (!pipelineEngine || !config.autopilot.auto_start_pipeline)
291
298
  return undefined;
292
299
  if (pipelineEngine.hasActivePipeline(event.project_path)) {
293
- logger.info('[Forge:处理器] Pipeline 已激活中');
300
+ logger.info('已有活跃的编排流程');
294
301
  return undefined;
295
302
  }
296
303
  const confirmMode = config.autopilot.pipeline_confirm_mode;
@@ -301,7 +308,7 @@ export class UserPromptHandler extends BaseHookHandler {
301
308
  return this.promptPipelineChoice(analysis, card, event);
302
309
  }
303
310
  // preview 模式:仅展示,不启动
304
- logger.info('[Forge:处理器] 预览模式,不启动 Pipeline');
311
+ logger.info('预览模式,不启动编排流程');
305
312
  return undefined;
306
313
  }
307
314
  async autoStartPipeline(analysis, card, event, qualityGate) {
@@ -314,7 +321,7 @@ export class UserPromptHandler extends BaseHookHandler {
314
321
  const activeConventions = this.ctx.conventionManager.getActiveConventions(event.project_path);
315
322
  const conventionPrompt = this.ctx.conventionManager.getActivePrompt(event.project_path) ?? undefined;
316
323
  if (activeConventions.length > 0) {
317
- logger.info(`[Forge:规范] ${ForgeFormatter.formatConventionSummary(activeConventions)}`);
324
+ logger.info(`已加载项目规范:${ForgeFormatter.formatConventionSummary(activeConventions)}`);
318
325
  }
319
326
  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
327
  if (analysis.clarifyQuestions?.length) {
@@ -326,7 +333,7 @@ export class UserPromptHandler extends BaseHookHandler {
326
333
  const pipelineInjected = ['Pipeline指令'];
327
334
  if (conventionPrompt)
328
335
  pipelineInjected.push(`规范(${activeConventions.map(c => c.id).join(',')})`);
329
- logger.info(`[Forge:Pipeline] 自动启动完成 | tasks=${pipeline.tasks.length} | 注入=[${pipelineInjected.join(', ')}]`);
336
+ logger.info(`自动启动多步骤编排 | 任务数=${pipeline.tasks.length} | 注入=[${pipelineInjected.join(', ')}]`);
330
337
  return { allow: true, systemMessage: card, additionalContext: context };
331
338
  }
332
339
  promptPipelineChoice(analysis, card, event) {
@@ -334,12 +341,33 @@ export class UserPromptHandler extends BaseHookHandler {
334
341
  this.setSuggestionPending(event.project_path, true);
335
342
  if (analysis.clarifyQuestions?.length) {
336
343
  const clarify = ForgeFormatter.formatClarifyRequest(analysis.clarifyQuestions);
337
- logger.info('[Forge:处理器] 向用户展示澄清 + Pipeline 选项');
344
+ logger.info('向用户展示澄清问题 + 编排方案选项');
338
345
  return { allow: true, systemMessage: card, additionalContext: ForgeFormatter.mergeContexts(ForgeFormatter.wrapInQuote(options), clarify) };
339
346
  }
340
- logger.info('[Forge:处理器] 向用户展示 Pipeline 选项');
347
+ logger.info('向用户展示编排方案选项');
341
348
  return { allow: true, systemMessage: card, additionalContext: ForgeFormatter.wrapInQuote(options) };
342
349
  }
350
+ /**
351
+ * 简单任务的轻量注入:只注入规范和画像,不生成执行卡片和阶段计划。
352
+ */
353
+ buildLightweightResponse(analysis, projectPath) {
354
+ const activeConventions = this.ctx.conventionManager.getActiveConventions(projectPath);
355
+ const conventionPrompt = this.ctx.conventionManager.getActivePrompt(projectPath) ?? undefined;
356
+ if (activeConventions.length > 0) {
357
+ logger.info(`[轻量注入] 规范:${ForgeFormatter.formatConventionSummary(activeConventions)}`);
358
+ }
359
+ const body = this.budgetContext({ content: this.buildProfileContext(projectPath), priority: -1 }, { content: conventionPrompt, priority: 0 });
360
+ const injected = [];
361
+ if (this.injectionCache.get(projectPath)?.profileInjected)
362
+ injected.push('画像');
363
+ if (conventionPrompt)
364
+ injected.push(`规范(${activeConventions.map(c => c.id).join(',')})`);
365
+ logger.info(`处理完成:轻量注入 | 复杂度=simple | 注入=[${injected.join(', ') || '无'}]`);
366
+ return {
367
+ allow: true,
368
+ additionalContext: body ? ForgeFormatter.wrapInQuote(body) : undefined,
369
+ };
370
+ }
343
371
  async buildSimpleResponse(analysis, card, projectPath) {
344
372
  const directive = this.ctx.intentEngine.generateDirective(analysis);
345
373
  const decisionsContext = this.readDecisionsContext(analysis.requirement, projectPath);
@@ -347,11 +375,11 @@ export class UserPromptHandler extends BaseHookHandler {
347
375
  const activeConventions = this.ctx.conventionManager.getActiveConventions(projectPath);
348
376
  const conventionPrompt = this.ctx.conventionManager.getActivePrompt(projectPath) ?? undefined;
349
377
  if (activeConventions.length > 0) {
350
- logger.info(`[Forge:规范] ${ForgeFormatter.formatConventionSummary(activeConventions)}`);
378
+ logger.info(`已加载项目规范:${ForgeFormatter.formatConventionSummary(activeConventions)}`);
351
379
  }
352
380
  if (analysis.clarifyQuestions?.length) {
353
381
  const clarify = ForgeFormatter.formatClarifyRequest(analysis.clarifyQuestions);
354
- logger.info(`[Forge:处理器] 注入澄清问题 ${analysis.clarifyQuestions.length} 个`);
382
+ logger.info(`注入澄清问题 ${analysis.clarifyQuestions.length} 个`);
355
383
  return {
356
384
  allow: true,
357
385
  systemMessage: card,
@@ -369,7 +397,9 @@ export class UserPromptHandler extends BaseHookHandler {
369
397
  injected.push('执行指令');
370
398
  if (decisionsContext)
371
399
  injected.push('决策历史');
372
- logger.info(`[Forge:处理器] 处理完成:path=直接执行 | complexity=${analysis.complexity} | 注入=[${injected.join(', ') || '无'}]`);
400
+ const inferredRole = this.inferCurrentRole(analysis.requirement, activeConventions);
401
+ const roleStr = inferredRole ? ` | 当前角色=${inferredRole.name}` : '';
402
+ logger.info(`处理完成:直接执行 | 复杂度=${analysis.complexity}${roleStr} | 注入=[${injected.join(', ') || '无'}]`);
373
403
  return {
374
404
  allow: true,
375
405
  systemMessage: card,
@@ -395,7 +425,7 @@ export class UserPromptHandler extends BaseHookHandler {
395
425
  const fingerprint = content.slice(0, 64);
396
426
  const cache = this.injectionCache.get(projectPath);
397
427
  if (cache?.decisionsKey === fingerprint) {
398
- logger.info('[Forge:决策] 内容未变,跳过重复注入');
428
+ logger.info('决策历史内容未变,跳过重复注入');
399
429
  return undefined;
400
430
  }
401
431
  const result = ForgeFormatter.formatModuleNotification('decisions', `项目决策历史(供参考):\n\`\`\`\n${recent}\n\`\`\``);
@@ -423,7 +453,7 @@ export class UserPromptHandler extends BaseHookHandler {
423
453
  const used = selected.reduce((sum, c) => sum + c.length, 0);
424
454
  if (selected.length === 0)
425
455
  return '';
426
- logger.info(`[Forge:预算] 注入 ${used} 字符,共 ${selected.length} 块`);
456
+ logger.info(`注入上下文 ${used} 字符,共 ${selected.length} 块`);
427
457
  return ForgeFormatter.mergeContexts(...selected);
428
458
  }
429
459
  /**
@@ -433,16 +463,59 @@ export class UserPromptHandler extends BaseHookHandler {
433
463
  const option = PIPELINE_OPTIONS[choice];
434
464
  if (choice === 'manual') {
435
465
  const msg = ForgeFormatter.formatModuleNotification('pipeline', '已切换到手动控制模式,请逐步告诉我你的需求');
436
- logger.info('[Forge:处理器] 用户选择了手动模式');
466
+ logger.info('用户选择了手动模式');
437
467
  return { allow: true, additionalContext: ForgeFormatter.wrapInQuote(msg) };
438
468
  }
439
469
  const requirement = event.tool_input?.user_prompt || '用户需求';
440
470
  const pipeline = await this.ctx.pipelineEngine.startPipeline(requirement, event.project_path, event.session_id);
441
471
  if (this.ctx.qualityGate)
442
472
  this.ctx.qualityGate.setRequirement(requirement);
443
- logger.info(`[Forge:Pipeline] 已启动(${option.description}):id=${pipeline.id} | tasks=${pipeline.tasks.length}`);
473
+ logger.info(`已启动编排(${option.description}):id=${pipeline.id} | 任务数=${pipeline.tasks.length}`);
444
474
  const msg = ForgeFormatter.formatModuleNotification('pipeline', `已启动${option.description},共 ${pipeline.tasks.length} 个任务\n阶段:${option.phases.join(' → ')}`);
445
475
  return { allow: true, additionalContext: ForgeFormatter.wrapInQuote(msg) };
446
476
  }
477
+ /**
478
+ * 根据用户需求关键词推断当前最匹配的 Convention 角色。
479
+ * 纯关键词匹配,不调用 AI,用于日志展示。
480
+ */
481
+ inferCurrentRole(requirement, conventions) {
482
+ const input = requirement.toLowerCase();
483
+ // 角色关键词映射(按优先级排序,先匹配先返回)
484
+ const roleKeywords = [
485
+ // 需求/产品阶段
486
+ { keywords: ['需求', '用户故事', '产品', '规格', '验收', 'spec', 'requirement'], roleKeys: ['product_manager'] },
487
+ // 架构/设计阶段
488
+ { keywords: ['架构', '设计', '方案', '技术选型', 'api', '数据模型', 'schema'], roleKeys: ['architect'] },
489
+ // 测试/安全网阶段
490
+ { keywords: ['测试', '覆盖', '安全网', 'test', '特征测试', '边界'], roleKeys: ['safety_net_engineer', 'verification_engineer'] },
491
+ // 审查阶段
492
+ { keywords: ['审查', 'review', '代码审查', '检查', '质量'], roleKeys: ['tech_lead', 'verification_engineer'] },
493
+ // 理解/分析阶段
494
+ { keywords: ['理解', '分析', '阅读', '调查', '排查', '诊断', 'debug'], roleKeys: ['code_archaeologist'] },
495
+ // 编码/实现阶段(最宽泛,放最后)
496
+ { keywords: ['实现', '编码', '开发', '修复', '重构', '优化', '改', '加', '写', 'fix', 'implement', 'refactor'], roleKeys: ['developer', 'surgeon'] },
497
+ ];
498
+ // 收集所有 Convention 的角色
499
+ const allRoles = new Map();
500
+ for (const conv of conventions) {
501
+ for (const [key, role] of Object.entries(conv.roles ?? {})) {
502
+ allRoles.set(key, role);
503
+ }
504
+ }
505
+ if (allRoles.size === 0)
506
+ return null;
507
+ // 按关键词匹配
508
+ for (const { keywords, roleKeys } of roleKeywords) {
509
+ if (keywords.some(kw => input.includes(kw))) {
510
+ for (const rk of roleKeys) {
511
+ const role = allRoles.get(rk);
512
+ if (role)
513
+ return role;
514
+ }
515
+ }
516
+ }
517
+ // 默认返回开发工程师(最常见的角色)
518
+ return allRoles.get('developer') ?? allRoles.get('surgeon') ?? null;
519
+ }
447
520
  }
448
521
  //# sourceMappingURL=user-prompt-handler.js.map