@winspan/claude-forge 8.34.0 → 8.36.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 (186) hide show
  1. package/README.md +10 -30
  2. package/dist/capability/index.d.ts +6 -5
  3. package/dist/capability/index.d.ts.map +1 -1
  4. package/dist/capability/index.js +6 -5
  5. package/dist/capability/index.js.map +1 -1
  6. package/dist/capability/types.d.ts +5 -74
  7. package/dist/capability/types.d.ts.map +1 -1
  8. package/dist/capability/types.js +4 -1
  9. package/dist/capability/types.js.map +1 -1
  10. package/dist/core/ai/provider.d.ts +23 -1
  11. package/dist/core/ai/provider.d.ts.map +1 -1
  12. package/dist/core/ai/provider.js +67 -1
  13. package/dist/core/ai/provider.js.map +1 -1
  14. package/dist/core/ai/types.d.ts +28 -0
  15. package/dist/core/ai/types.d.ts.map +1 -1
  16. package/dist/core/storage/rows.d.ts +0 -36
  17. package/dist/core/storage/rows.d.ts.map +1 -1
  18. package/dist/core/storage/schema.sql +1 -45
  19. package/dist/core/storage/sqlite.d.ts +2 -79
  20. package/dist/core/storage/sqlite.d.ts.map +1 -1
  21. package/dist/core/storage/sqlite.js +3 -362
  22. package/dist/core/storage/sqlite.js.map +1 -1
  23. package/dist/core/utils/token-tracker.d.ts +0 -1
  24. package/dist/core/utils/token-tracker.d.ts.map +1 -1
  25. package/dist/core/utils/token-tracker.js +0 -1
  26. package/dist/core/utils/token-tracker.js.map +1 -1
  27. package/dist/daemon/handlers/post-tool-use.d.ts +1 -9
  28. package/dist/daemon/handlers/post-tool-use.d.ts.map +1 -1
  29. package/dist/daemon/handlers/post-tool-use.js +2 -99
  30. package/dist/daemon/handlers/post-tool-use.js.map +1 -1
  31. package/dist/daemon/handlers/stop.d.ts +1 -15
  32. package/dist/daemon/handlers/stop.d.ts.map +1 -1
  33. package/dist/daemon/handlers/stop.js +1 -95
  34. package/dist/daemon/handlers/stop.js.map +1 -1
  35. package/dist/daemon/handlers/user-prompt.d.ts +1 -5
  36. package/dist/daemon/handlers/user-prompt.d.ts.map +1 -1
  37. package/dist/daemon/handlers/user-prompt.js +29 -99
  38. package/dist/daemon/handlers/user-prompt.js.map +1 -1
  39. package/dist/daemon/index.d.ts.map +1 -1
  40. package/dist/daemon/index.js +9 -56
  41. package/dist/daemon/index.js.map +1 -1
  42. package/dist/engine/agent-router.d.ts +37 -0
  43. package/dist/engine/agent-router.d.ts.map +1 -1
  44. package/dist/engine/agent-router.js +58 -0
  45. package/dist/engine/agent-router.js.map +1 -1
  46. package/dist/engine/conventions/routing.yaml +31 -2
  47. package/dist/intelligence/classifier.d.ts +63 -43
  48. package/dist/intelligence/classifier.d.ts.map +1 -1
  49. package/dist/intelligence/classifier.js +256 -191
  50. package/dist/intelligence/classifier.js.map +1 -1
  51. package/dist/intelligence/context-gatherer.d.ts +101 -0
  52. package/dist/intelligence/context-gatherer.d.ts.map +1 -0
  53. package/dist/intelligence/context-gatherer.js +417 -0
  54. package/dist/intelligence/context-gatherer.js.map +1 -0
  55. package/dist/intelligence/cot-classifier.d.ts +95 -0
  56. package/dist/intelligence/cot-classifier.d.ts.map +1 -0
  57. package/dist/intelligence/cot-classifier.js +391 -0
  58. package/dist/intelligence/cot-classifier.js.map +1 -0
  59. package/dist/intelligence/execution-doc-builder.d.ts +90 -0
  60. package/dist/intelligence/execution-doc-builder.d.ts.map +1 -1
  61. package/dist/intelligence/execution-doc-builder.js +459 -42
  62. package/dist/intelligence/execution-doc-builder.js.map +1 -1
  63. package/dist/intelligence/intent-types.d.ts +13 -0
  64. package/dist/intelligence/intent-types.d.ts.map +1 -0
  65. package/dist/intelligence/intent-types.js +19 -0
  66. package/dist/intelligence/intent-types.js.map +1 -0
  67. package/dist/intelligence/multimodal-parser.d.ts +105 -0
  68. package/dist/intelligence/multimodal-parser.d.ts.map +1 -0
  69. package/dist/intelligence/multimodal-parser.js +425 -0
  70. package/dist/intelligence/multimodal-parser.js.map +1 -0
  71. package/dist/skills/official-skills.d.ts.map +1 -1
  72. package/dist/skills/official-skills.js +218 -20
  73. package/dist/skills/official-skills.js.map +1 -1
  74. package/dist/web/routes/status.d.ts.map +1 -1
  75. package/dist/web/routes/status.js +8 -10
  76. package/dist/web/routes/status.js.map +1 -1
  77. package/dist/web/routes/token-usage.d.ts +1 -1
  78. package/dist/web/routes/token-usage.d.ts.map +1 -1
  79. package/dist/web/routes/token-usage.js +1 -16
  80. package/dist/web/routes/token-usage.js.map +1 -1
  81. package/dist/web/routes/types.d.ts +0 -6
  82. package/dist/web/routes/types.d.ts.map +1 -1
  83. package/dist/web/routes/types.js.map +1 -1
  84. package/dist/web/server.d.ts +0 -6
  85. package/dist/web/server.d.ts.map +1 -1
  86. package/dist/web/server.js +0 -5
  87. package/dist/web/server.js.map +1 -1
  88. package/dist/web/static/assets/{AIConfig-DiUFET_Q.js → AIConfig-D4VglzCl.js} +2 -2
  89. package/dist/web/static/assets/{AIConfig-DiUFET_Q.js.map → AIConfig-D4VglzCl.js.map} +1 -1
  90. package/dist/web/static/assets/{Agents-bNNGbQnL.js → Agents-ne5lXc7V.js} +2 -2
  91. package/dist/web/static/assets/{Agents-bNNGbQnL.js.map → Agents-ne5lXc7V.js.map} +1 -1
  92. package/dist/web/static/assets/Dashboard-D4j0Zmek.js +2 -0
  93. package/dist/web/static/assets/Dashboard-D4j0Zmek.js.map +1 -0
  94. package/dist/web/static/assets/{Drawer-DOUcx6m1.js → Drawer-Lo5ihVP-.js} +2 -2
  95. package/dist/web/static/assets/{Drawer-DOUcx6m1.js.map → Drawer-Lo5ihVP-.js.map} +1 -1
  96. package/dist/web/static/assets/{Events-DQHP6Uaq.js → Events-DBJ1B7OW.js} +2 -2
  97. package/dist/web/static/assets/{Events-DQHP6Uaq.js.map → Events-DBJ1B7OW.js.map} +1 -1
  98. package/dist/web/static/assets/{ExecutionTrace-Co8ARdg-.js → ExecutionTrace-Du9XADc1.js} +2 -2
  99. package/dist/web/static/assets/{ExecutionTrace-Co8ARdg-.js.map → ExecutionTrace-Du9XADc1.js.map} +1 -1
  100. package/dist/web/static/assets/{Routing-BW3eGD-8.js → Routing-BNQ09OlH.js} +2 -2
  101. package/dist/web/static/assets/{Routing-BW3eGD-8.js.map → Routing-BNQ09OlH.js.map} +1 -1
  102. package/dist/web/static/assets/{SessionDetail-Cbd7Jwox.js → SessionDetail-BPrPyMNa.js} +2 -2
  103. package/dist/web/static/assets/{SessionDetail-Cbd7Jwox.js.map → SessionDetail-BPrPyMNa.js.map} +1 -1
  104. package/dist/web/static/assets/{Sessions-ZQSCgXyy.js → Sessions-o3EXsXz9.js} +2 -2
  105. package/dist/web/static/assets/{Sessions-ZQSCgXyy.js.map → Sessions-o3EXsXz9.js.map} +1 -1
  106. package/dist/web/static/assets/{Skills-C5-5zOSH.js → Skills-Czt5mkyc.js} +2 -2
  107. package/dist/web/static/assets/{Skills-C5-5zOSH.js.map → Skills-Czt5mkyc.js.map} +1 -1
  108. package/dist/web/static/assets/{export-CbQTOt71.js → export-C0mlC4AT.js} +2 -2
  109. package/dist/web/static/assets/{export-CbQTOt71.js.map → export-C0mlC4AT.js.map} +1 -1
  110. package/dist/web/static/assets/index-B1J7nBu0.js +3 -0
  111. package/dist/web/static/assets/index-B1J7nBu0.js.map +1 -0
  112. package/dist/web/static/assets/index-BVqk4bSO.css +1 -0
  113. package/dist/web/static/assets/{lucide-BanPULT1.js → lucide-Bu44HVAM.js} +33 -73
  114. package/dist/web/static/assets/lucide-Bu44HVAM.js.map +1 -0
  115. package/dist/web/static/index.html +3 -3
  116. package/package.json +2 -2
  117. package/dist/capability/execution-manager.d.ts +0 -96
  118. package/dist/capability/execution-manager.d.ts.map +0 -1
  119. package/dist/capability/execution-manager.js +0 -260
  120. package/dist/capability/execution-manager.js.map +0 -1
  121. package/dist/capability/executor/background-executor.d.ts +0 -58
  122. package/dist/capability/executor/background-executor.d.ts.map +0 -1
  123. package/dist/capability/executor/background-executor.js +0 -322
  124. package/dist/capability/executor/background-executor.js.map +0 -1
  125. package/dist/capability/executor/foreground-executor.d.ts +0 -26
  126. package/dist/capability/executor/foreground-executor.d.ts.map +0 -1
  127. package/dist/capability/executor/foreground-executor.js +0 -82
  128. package/dist/capability/executor/foreground-executor.js.map +0 -1
  129. package/dist/capability/executor/orchestrator.d.ts +0 -38
  130. package/dist/capability/executor/orchestrator.d.ts.map +0 -1
  131. package/dist/capability/executor/orchestrator.js +0 -158
  132. package/dist/capability/executor/orchestrator.js.map +0 -1
  133. package/dist/capability/executor/stream-parser.d.ts +0 -73
  134. package/dist/capability/executor/stream-parser.d.ts.map +0 -1
  135. package/dist/capability/executor/stream-parser.js +0 -56
  136. package/dist/capability/executor/stream-parser.js.map +0 -1
  137. package/dist/capability/executor/types.d.ts +0 -44
  138. package/dist/capability/executor/types.d.ts.map +0 -1
  139. package/dist/capability/executor/types.js +0 -9
  140. package/dist/capability/executor/types.js.map +0 -1
  141. package/dist/capability/executor/worker-auth-probe.d.ts +0 -30
  142. package/dist/capability/executor/worker-auth-probe.d.ts.map +0 -1
  143. package/dist/capability/executor/worker-auth-probe.js +0 -108
  144. package/dist/capability/executor/worker-auth-probe.js.map +0 -1
  145. package/dist/capability/methodologies/bmad.yaml +0 -81
  146. package/dist/capability/methodologies/code-quality-audit.yaml +0 -26
  147. package/dist/capability/methodologies/harness-engineering.yaml +0 -75
  148. package/dist/capability/methodologies/test-coverage-scan.yaml +0 -26
  149. package/dist/capability/methodology-planner.d.ts +0 -49
  150. package/dist/capability/methodology-planner.d.ts.map +0 -1
  151. package/dist/capability/methodology-planner.js +0 -306
  152. package/dist/capability/methodology-planner.js.map +0 -1
  153. package/dist/capability/methodology-registry.d.ts +0 -32
  154. package/dist/capability/methodology-registry.d.ts.map +0 -1
  155. package/dist/capability/methodology-registry.js +0 -113
  156. package/dist/capability/methodology-registry.js.map +0 -1
  157. package/dist/daemon/handlers/methodology-formatter.d.ts +0 -16
  158. package/dist/daemon/handlers/methodology-formatter.d.ts.map +0 -1
  159. package/dist/daemon/handlers/methodology-formatter.js +0 -119
  160. package/dist/daemon/handlers/methodology-formatter.js.map +0 -1
  161. package/dist/daemon/idle-detector.d.ts +0 -35
  162. package/dist/daemon/idle-detector.d.ts.map +0 -1
  163. package/dist/daemon/idle-detector.js +0 -56
  164. package/dist/daemon/idle-detector.js.map +0 -1
  165. package/dist/daemon/idle-trigger.d.ts +0 -53
  166. package/dist/daemon/idle-trigger.d.ts.map +0 -1
  167. package/dist/daemon/idle-trigger.js +0 -153
  168. package/dist/daemon/idle-trigger.js.map +0 -1
  169. package/dist/daemon/methodology-pending-queue.d.ts +0 -33
  170. package/dist/daemon/methodology-pending-queue.d.ts.map +0 -1
  171. package/dist/daemon/methodology-pending-queue.js +0 -120
  172. package/dist/daemon/methodology-pending-queue.js.map +0 -1
  173. package/dist/web/routes/methodology.d.ts +0 -12
  174. package/dist/web/routes/methodology.d.ts.map +0 -1
  175. package/dist/web/routes/methodology.js +0 -228
  176. package/dist/web/routes/methodology.js.map +0 -1
  177. package/dist/web/static/assets/Dashboard-Ciyyw6ph.js +0 -2
  178. package/dist/web/static/assets/Dashboard-Ciyyw6ph.js.map +0 -1
  179. package/dist/web/static/assets/Methodologies-CXNrDXwG.js +0 -5
  180. package/dist/web/static/assets/Methodologies-CXNrDXwG.js.map +0 -1
  181. package/dist/web/static/assets/MethodologyDetail-rV3W1utf.js +0 -2
  182. package/dist/web/static/assets/MethodologyDetail-rV3W1utf.js.map +0 -1
  183. package/dist/web/static/assets/index-DJK5beK6.js +0 -3
  184. package/dist/web/static/assets/index-DJK5beK6.js.map +0 -1
  185. package/dist/web/static/assets/index-phpuytMI.css +0 -1
  186. package/dist/web/static/assets/lucide-BanPULT1.js.map +0 -1
@@ -1,59 +1,48 @@
1
1
  /**
2
- * IntentClassifier — intent classification for UserPromptSubmit routing
2
+ * IntentClassifier — V2 intent classification facade (CoT + multimodal + context).
3
3
  *
4
- * Output contract:
5
- * { complexity, taskType, searchKeywords, reasoning }
4
+ * Pipeline:
5
+ * 1. Meta-prompt short-circuit (V1 logic preserved)
6
+ * 2. AI unavailable → regex/keyword fallback (V1 logic preserved)
7
+ * 3. V2 path:
8
+ * a. Parallel `MultimodalParser.parse` + `ContextGatherer.gather`
9
+ * b. `CoTClassifier.classify` → returns CoTResult
10
+ * c. On any failure (parser/gatherer/CoT) → fallback() with elapsed time
6
11
  *
7
- * Layered strategy (fast → slow):
8
- * 1. Regex ground-truth — explicit simple commands (ls/pwd/...) skip AI
9
- * 2. LRU cache — repeated prompts
10
- * 3. AI classification — 3s hard timeout
11
- * 4. Regex fallback — AI timeout/failure
12
+ * Output contract (`IntentAnalysis`):
13
+ * - V1 fields preserved: requirement / complexity / taskType / searchKeywords /
14
+ * reasoning / classificationMs / fallbackUsed / isMetaPrompt
15
+ * - V2 fields added: action / target / candidates / finalConfidence /
16
+ * reasoningSteps / needsClarification / clarificationQuestion
17
+ *
18
+ * Downstream consumers that only read V1 fields keep working unchanged.
19
+ * V2-aware consumers (e.g. AgentRouter) can use action/target for finer routing.
12
20
  */
13
- import { LRUCache } from '../core/utils/lru-cache.js';
21
+ import { ContextGatherer } from './context-gatherer.js';
22
+ import { MultimodalParser } from './multimodal-parser.js';
23
+ import { CoTClassifier, } from './cot-classifier.js';
24
+ import { TASK_TYPES, } from './intent-types.js';
14
25
  import { logger } from '../core/utils/logger.js';
15
- export const TASK_TYPES = [
16
- 'build_system', 'add_feature', 'refactor', 'migrate', 'fix_bug',
17
- 'analyze_requirement', 'design_architecture', 'design_api', 'design_schema',
18
- 'write_code', 'write_test', 'review', 'audit_security', 'optimize_perf',
19
- 'write_spec', 'review_doc', 'create_pr', 'explain', 'setup_project',
20
- 'cleanup_code', 'upgrade_dependency', 'improve_coverage', 'check_quality',
21
- 'research', 'investigate', 'compare_solutions', 'write_doc',
22
- 'analyze_codebase', 'multi_domain', 'other',
23
- ];
24
- // -- Ground-truth patterns (layer 1) --
26
+ export { TASK_TYPES };
27
+ // ── Meta-prompt detection (V1 logic preserved) ────────────────────────────
25
28
  /**
26
- * Meta 控制类 prompt 识别模式。
27
- *
28
- * 典型场景:用户发"继续"、"接着做"、"开启多个 agent 同时进行"、列表型
29
- * "1. xxx 2. xxx" 等**指令性**短语,它们本身不是具体任务,而是对上一轮
30
- * 任务的控制指令。classifier 如果把它们分类成 refactor/complex,会触发
31
- * 不该触发的路由 + 方法论,造成违抗数据 + 死循环。
32
- *
33
- * 这些 pattern 会在 classify() 入口短路返回 isMetaPrompt=true。
29
+ * Meta 控制类 prompt 识别模式。"继续"/"开启多个 agent"/列表前缀等指令性短语
30
+ * 本身不是具体任务,classifier 直接短路返回,下游跳过路由和方法论。
34
31
  */
35
32
  const META_PATTERNS = [
36
- // 中文短指令:继续 / 接着 / 开启 / 启动 / 推进 / 开搞 …
37
33
  /^(继续|接着|然后|接下来|开启|开始|启动|推进|那么做|开搞|干吧|搞起)(\s|$|[,。!?!?,.])/,
38
- // "继续执行" / "接着做" / "继续推进" 等 2 段式
39
34
  /^(继续|接着).{0,6}(执行|进行|做|干|推进)/,
40
- // "开启多个 agent" / "派多个代理" / "使用几个 Agent"
41
35
  /^(开启|使用|派|分派|开).{0,4}(多|几|多个|几个).{0,4}(agent|Agent|代理)/,
42
- // "并行进行" / "同时执行"
43
36
  /^(并行|同时|一起).{0,8}(进行|做|执行|跑|运行)/,
44
- // 英文控制指令
45
37
  /^(go ahead|continue|proceed|do it|keep going|carry on)\b/i,
46
- // 英文列表前缀 "1. " / "1) "(标点后必须有空格,避免把 "1.5 xxx" 误判成列表)
47
38
  /^\s*\d+[.)]\s+/,
48
- // 中文列表前缀 "1、xxx"(顿号后通常直接跟内容,不强制空格)
49
39
  /^\s*\d+、/,
50
40
  ];
51
- function isMetaPrompt(prompt) {
41
+ export function isMetaPrompt(prompt) {
52
42
  const trimmed = prompt.trim();
53
43
  if (trimmed.length === 0)
54
44
  return false;
55
45
  // 列表型 prompt(开头就是编号)— 不管多长都视作 meta
56
- // (classifier 对列表型不稳定,多项表达易误判为 complex)
57
46
  if (/^\s*\d+[.)]\s+/.test(trimmed) || /^\s*\d+、/.test(trimmed))
58
47
  return true;
59
48
  // 短 meta 指令:30 字以内,整体是控制性
@@ -64,19 +53,18 @@ function isMetaPrompt(prompt) {
64
53
  }
65
54
  return false;
66
55
  }
67
- const SIMPLE_PATTERNS = [
68
- /^(ls|pwd|echo|cat|git status|git log|git diff|git show|git branch)/i,
69
- /^(help|version|--help|-h)\s*$/i,
70
- ];
56
+ // ── Fallback keyword buckets (V1 logic preserved) ─────────────────────────
71
57
  const COMPLEX_PATTERNS = [
72
58
  /重构|架构|迁移|升级|refactor|architect|migrate|redesign/i,
73
59
  /重写|rewrite|overhaul|从零|from scratch/i,
74
60
  /全面|comprehensive|系统性|systematic/i,
75
61
  ];
76
- // TaskType fallback rules — keyword buckets used when AI fails.
77
- // Order matters: earlier wins when multiple buckets would match.
62
+ const SIMPLE_PATTERNS = [
63
+ /^(ls|pwd|echo|cat|git status|git log|git diff|git show|git branch)/i,
64
+ /^(help|version|--help|-h)\s*$/i,
65
+ ];
66
+ // 顺序敏感:靠前的规则优先匹配。
78
67
  const TASK_TYPE_KEYWORDS = [
79
- // 精确短语优先(限定词多的在前)
80
68
  { taskType: 'create_pr', patterns: [/提\s*pr|pull request|create pr|发\s*pr|open pr|合并.*分支/i] },
81
69
  { taskType: 'build_system', patterns: [/实现.*系统|构建.*系统|搭建.*系统|build a .* system|create a .* system|从零.*(搭|写|建)/i] },
82
70
  { taskType: 'setup_project', patterns: [/搭建项目|初始化项目|setup project|init project|脚手架|scaffold/i] },
@@ -94,194 +82,271 @@ const TASK_TYPE_KEYWORDS = [
94
82
  { taskType: 'analyze_requirement', patterns: [/需求分析|澄清.*需求|requirement analysis|user story|需求拆解|需求.*(澄清|梳理|评审)/i] },
95
83
  { taskType: 'migrate', patterns: [/迁移|migrate|从.*迁到|换成|替换为/i] },
96
84
  { taskType: 'upgrade_dependency', patterns: [/升级依赖|upgrade dependency|dependency update|版本升级|npm update|package update/i] },
97
- { taskType: 'fix_bug', patterns: [/修.*bug|fix.*bug|修复|报错|异常|crash|error|报一下错|不工作|失败|broken|traceback|stack trace|改一下.*(错|问题|bug)|解决.*(报错|问题|异常|错误)/i] },
85
+ // 问题型"为什么"优先(investigate / fix_bug 前置)
86
+ { taskType: 'investigate', patterns: [/调查|investigate|排查|定位问题|分析原因|find root cause|为什么.*(还有|还在|没有|不|失败|错误|问题|异常)/i] },
87
+ { taskType: 'fix_bug', patterns: [/修.*bug|fix.*bug|修复|报错|异常|crash|error|报一下错|不工作|失败|broken|traceback|stack trace|改一下.*(错|问题|bug)|解决.*(报错|问题|异常|错误)|为什么.*(报错|崩溃|不工作|失败|broken)/i] },
98
88
  { taskType: 'cleanup_code', patterns: [/清理代码|cleanup code|整理代码|清理冗余|去掉冗余|重构.*清理/i] },
99
89
  { taskType: 'refactor', patterns: [/重构|refactor|cleanup|restructure|整理.*代码|抽取.*函数|提取.*方法|拆分.*模块|清理.*冗余|把.*拆|(模块|函数|类).*(拆分|拆解|合并)/i] },
100
90
  { taskType: 'optimize_perf', patterns: [/性能|优化|performance|optimize|slow|瓶颈|慢|加速|提速|降低.*耗时|减少.*开销/i] },
101
91
  { taskType: 'add_feature', patterns: [/加一个|加一下|新增|加上|增加.*(功能|能力|选项)|add.*feature|implement.*feature|new feature|支持.*功能|support.*for|接入/i] },
102
92
  { taskType: 'write_code', patterns: [/写一下|写个|写段|写一?个?(函数|脚本|组件|工具|方法)|帮我写|write (a |the )?code|code it|实现一个|实现一下|补充实现|generate.*code/i] },
103
93
  { taskType: 'research', patterns: [/调研|research|技术调研|方案对比|最佳实践|best practice|选型|技术选型/i] },
104
- { taskType: 'investigate', patterns: [/调查|investigate|排查|定位问题|分析原因|find root cause/i] },
105
94
  { taskType: 'compare_solutions', patterns: [/对比方案|compare solutions|方案对比|比较.*方案|比较.*技术/i] },
106
95
  { taskType: 'analyze_codebase', patterns: [/分析.*代码库|分析.*项目|看看.*项目|代码库分析|项目分析|冗余代码|代码清理|清理.*逻辑/i] },
107
96
  { taskType: 'multi_domain', patterns: [/跨领域|复杂任务|综合分析|全面分析|多方面|multi.*domain/i] },
108
- { taskType: 'explain', patterns: [/解释|说明|解读|理解|explain|what (does|is)|为什么|这段.*(做什么|含义|意思)|这是.*(什么|做什么)|how does/i] },
97
+ // 解释型"为什么"后置(负向前瞻排除问题型)
98
+ { taskType: 'explain', patterns: [/解释|说明|解读|理解|explain|what (does|is)|为什么(?!.*(还有|还在|没有|不|失败|错误|问题|异常|报错|崩溃|不工作|broken))|这段.*(做什么|含义|意思)|这是.*(什么|做什么)|how does/i] },
109
99
  ];
110
- // Special case: doc writing falls through to skill fallback in Phase 1.
111
- // Add explicit agent wiring in Phase 2 if needed.
112
- const DEFAULT_AI_TIMEOUT_MS = 10_000;
100
+ function guessTaskType(prompt) {
101
+ // 优先匹配高优先级模式(investigate / fix_bug)
102
+ const priorityBuckets = TASK_TYPE_KEYWORDS.filter(b => ['investigate', 'fix_bug'].includes(b.taskType));
103
+ for (const bucket of priorityBuckets) {
104
+ if (bucket.patterns.some(p => p.test(prompt)))
105
+ return bucket.taskType;
106
+ }
107
+ for (const bucket of TASK_TYPE_KEYWORDS) {
108
+ if (bucket.patterns.some(p => p.test(prompt)))
109
+ return bucket.taskType;
110
+ }
111
+ return 'other';
112
+ }
113
+ function extractKeywords(prompt) {
114
+ // 1. 过滤特殊标记
115
+ const cleaned = prompt
116
+ .replace(/\[Image\s+#\d+\]/gi, '')
117
+ .replace(/\[.*?\]/g, '');
118
+ // 2. 停用词
119
+ const chineseStopWords = new Set([
120
+ '的', '了', '在', '是', '我', '有', '和', '就', '不', '人', '都', '一', '一个',
121
+ '上', '也', '很', '到', '说', '要', '去', '你', '会', '着', '没有', '看', '好',
122
+ '为什么', '怎么', '什么', '这个', '那个', '还有', '之后', '之前',
123
+ ]);
124
+ const englishStopWords = new Set([
125
+ 'the', 'and', 'for', 'with', 'this', 'that', 'from', 'have', 'will',
126
+ 'why', 'how', 'what', 'when', 'where', 'after', 'before',
127
+ ]);
128
+ const words = cleaned
129
+ .split(/[\s,;.!?,。!?]+/)
130
+ .filter(w => {
131
+ if (w.length < 2)
132
+ return false;
133
+ if (chineseStopWords.has(w) || englishStopWords.has(w.toLowerCase()))
134
+ return false;
135
+ return true;
136
+ });
137
+ const techTerms = words.filter(w => /^(npm|git|api|sql|http|json|yaml|tsx?|jsx?|css|html)$/i.test(w) ||
138
+ /方法论|打包|构建|编译|测试|部署/.test(w));
139
+ return [...techTerms, ...words.filter(w => !techTerms.includes(w))].slice(0, 5);
140
+ }
141
+ // ── Default V2 envelope helpers ───────────────────────────────────────────
142
+ /**
143
+ * Build a CoT-shaped envelope around a V1-style classification. Used for:
144
+ * - Meta prompts (skipRouting short-circuit)
145
+ * - AI-unavailable fallback
146
+ * - V2 pipeline failures
147
+ *
148
+ * Action / target / candidates use neutral defaults derived from the inferred
149
+ * taskType so downstream routing still has something to consume.
150
+ */
151
+ function buildV1Envelope(prompt, options) {
152
+ const { complexity, taskType, reasoning, isMetaPrompt: meta, fallbackUsed, classificationMs } = options;
153
+ const action = inferActionFromTaskType(taskType);
154
+ const envelope = {
155
+ requirement: prompt,
156
+ complexity,
157
+ taskType,
158
+ searchKeywords: extractKeywords(prompt),
159
+ reasoning,
160
+ action,
161
+ target: { domain: 'cross', artifact: 'code', scope: 'module' },
162
+ candidates: [
163
+ {
164
+ action,
165
+ taskType,
166
+ confidence: meta ? 1.0 : 0.5,
167
+ reasoning: meta ? 'meta prompt — control instruction' : 'regex fallback',
168
+ },
169
+ ],
170
+ finalConfidence: meta ? 1.0 : 0.5,
171
+ reasoningSteps: [
172
+ {
173
+ step: 1,
174
+ name: meta ? 'meta-shortcut' : 'fallback',
175
+ content: reasoning,
176
+ },
177
+ ],
178
+ };
179
+ if (meta !== undefined)
180
+ envelope.isMetaPrompt = meta;
181
+ if (fallbackUsed !== undefined)
182
+ envelope.fallbackUsed = fallbackUsed;
183
+ if (classificationMs !== undefined)
184
+ envelope.classificationMs = classificationMs;
185
+ return envelope;
186
+ }
187
+ /**
188
+ * Map V1 taskType to a sensible V2 action verb. Keeps routing usable for
189
+ * fallback envelopes that never went through the CoT engine.
190
+ */
191
+ function inferActionFromTaskType(taskType) {
192
+ switch (taskType) {
193
+ case 'investigate':
194
+ case 'analyze_codebase':
195
+ case 'analyze_requirement':
196
+ return 'investigate';
197
+ case 'fix_bug':
198
+ return 'fix';
199
+ case 'add_feature':
200
+ case 'write_code':
201
+ case 'build_system':
202
+ case 'write_test':
203
+ case 'write_doc':
204
+ case 'write_spec':
205
+ case 'design_api':
206
+ case 'design_architecture':
207
+ case 'design_schema':
208
+ case 'create_pr':
209
+ return 'create';
210
+ case 'refactor':
211
+ case 'cleanup_code':
212
+ case 'optimize_perf':
213
+ case 'improve_coverage':
214
+ return 'modify';
215
+ case 'review':
216
+ case 'review_doc':
217
+ case 'audit_security':
218
+ case 'check_quality':
219
+ return 'verify';
220
+ case 'explain':
221
+ return 'explain';
222
+ case 'setup_project':
223
+ return 'setup';
224
+ case 'migrate':
225
+ case 'upgrade_dependency':
226
+ return 'migrate';
227
+ case 'research':
228
+ case 'compare_solutions':
229
+ return 'research';
230
+ default:
231
+ return 'investigate';
232
+ }
233
+ }
234
+ // ── Classifier ────────────────────────────────────────────────────────────
235
+ const DEFAULT_TIMEOUT_MS = 20_000;
113
236
  export class IntentClassifier {
114
237
  ai;
115
- cache = new LRUCache(50);
116
- model;
117
- timeoutMs;
238
+ options;
239
+ parser;
240
+ gatherer;
241
+ cot;
118
242
  constructor(ai, options) {
119
243
  this.ai = ai;
120
- this.model = options?.model;
121
- this.timeoutMs = options?.timeoutMs ?? DEFAULT_AI_TIMEOUT_MS;
244
+ this.options = options;
245
+ const visionOptions = {};
246
+ if (options.visionModel !== undefined)
247
+ visionOptions.visionModel = options.visionModel;
248
+ if (options.visionTimeoutMs !== undefined)
249
+ visionOptions.visionTimeoutMs = options.visionTimeoutMs;
250
+ this.parser = new MultimodalParser(ai, visionOptions);
251
+ this.gatherer = new ContextGatherer(options.storage, options.projectPath);
252
+ if (ai) {
253
+ const cotOpts = {
254
+ timeoutMs: options.timeoutMs ?? DEFAULT_TIMEOUT_MS,
255
+ };
256
+ if (options.model !== undefined)
257
+ cotOpts.model = options.model;
258
+ if (options.clarificationThreshold !== undefined) {
259
+ cotOpts.clarificationThreshold = options.clarificationThreshold;
260
+ }
261
+ this.cot = new CoTClassifier(ai, cotOpts);
262
+ }
263
+ else {
264
+ this.cot = null;
265
+ }
122
266
  }
123
- async classify(prompt, projectPath) {
124
- // Layer 0: meta prompt short-circuit
125
- // 指令性 prompt("继续"/"开启多个 agent"/列表前缀等)直接短路返回,
126
- // 下游 user-prompt handler 看到 isMetaPrompt=true 就跳过路由和方法论。
267
+ /**
268
+ * Classify a user prompt.
269
+ *
270
+ * @param prompt Raw user prompt (may include `[Image #N]` markers or code blocks).
271
+ * @param sessionId Used by ContextGatherer to fetch the session's prior history.
272
+ */
273
+ async classify(prompt, sessionId) {
274
+ // Layer 0: meta-prompt short-circuit
127
275
  if (isMetaPrompt(prompt)) {
128
276
  logger.info('[IntentClassifier] Meta prompt detected — skipRouting');
129
- return {
130
- requirement: prompt,
277
+ return buildV1Envelope(prompt, {
131
278
  complexity: 'simple',
132
279
  taskType: 'other',
133
- searchKeywords: [],
134
280
  reasoning: 'meta prompt — skipRouting',
135
281
  isMetaPrompt: true,
136
282
  fallbackUsed: false,
137
- };
283
+ });
138
284
  }
139
- // Layer 1: ground truth
140
- const groundTruth = this.matchGroundTruth(prompt);
285
+ // Layer 1: V1 ground-truth (cheap, regex-only — skip AI when matched)
286
+ const groundTruth = matchGroundTruth(prompt);
141
287
  if (groundTruth) {
142
288
  logger.info(`[IntentClassifier] Ground truth: ${groundTruth.complexity}/${groundTruth.taskType}`);
143
289
  return groundTruth;
144
290
  }
145
- // Layer 1.5: no AI provider skip to keyword-based fallback immediately.
146
- if (!this.ai) {
147
- const fb = this.fallback(prompt);
148
- fb.fallbackUsed = true;
149
- fb.classificationMs = 0;
291
+ // Layer 2: no AI provider regex fallback only
292
+ if (!this.ai || !this.cot) {
293
+ const fb = buildV1Envelope(prompt, {
294
+ complexity: 'moderate',
295
+ taskType: guessTaskType(prompt),
296
+ reasoning: 'Fallback: regex-based classification (no AI provider)',
297
+ fallbackUsed: true,
298
+ classificationMs: 0,
299
+ });
150
300
  return fb;
151
301
  }
152
- // Layer 2: cache
153
- const cacheKey = `${prompt}:${projectPath}`;
154
- const cached = this.cache.get(cacheKey);
155
- if (cached) {
156
- logger.debug('[IntentClassifier] Cache hit');
157
- return cached;
158
- }
159
- // Layer 3: AI with hard timeout
302
+ // Layer 3: V2 path — parser + gatherer in parallel, then CoT.
160
303
  const start = Date.now();
161
304
  try {
162
- const result = await this.aiClassifyWithTimeout(prompt, projectPath);
305
+ const [input, context] = await Promise.all([
306
+ this.parser.parse(prompt),
307
+ this.gatherer.gather(sessionId),
308
+ ]);
309
+ const result = await this.cot.classify(input, context);
163
310
  result.classificationMs = Date.now() - start;
164
- this.cache.set(cacheKey, result);
311
+ logger.info(`[IntentClassifier] V2 classify: action=${result.action} taskType=${result.taskType} ` +
312
+ `complexity=${result.complexity} confidence=${result.finalConfidence.toFixed(2)} ` +
313
+ `(${result.classificationMs}ms${result.fallbackUsed ? ', fallback' : ''})`);
165
314
  return result;
166
315
  }
167
316
  catch (err) {
168
- logger.warn(`[IntentClassifier] AI classification failed, using fallback: ${err}`);
169
- const fallback = this.fallback(prompt);
170
- fallback.fallbackUsed = true;
171
- fallback.classificationMs = Date.now() - start;
172
- return fallback;
173
- }
174
- }
175
- matchGroundTruth(prompt) {
176
- for (const pattern of SIMPLE_PATTERNS) {
177
- if (pattern.test(prompt)) {
178
- return {
179
- requirement: prompt,
180
- complexity: 'simple',
181
- taskType: 'other',
182
- searchKeywords: this.extractKeywords(prompt),
183
- reasoning: `Matches simple command pattern: ${pattern.source}`,
184
- };
185
- }
186
- }
187
- for (const pattern of COMPLEX_PATTERNS) {
188
- if (pattern.test(prompt)) {
189
- return {
190
- requirement: prompt,
191
- complexity: 'complex',
192
- taskType: this.guessTaskType(prompt),
193
- searchKeywords: this.extractKeywords(prompt),
194
- reasoning: `Matches complex task pattern: ${pattern.source}`,
195
- };
196
- }
317
+ logger.warn(`[IntentClassifier] V2 pipeline failed, using regex fallback: ${err instanceof Error ? err.message : String(err)}`);
318
+ return buildV1Envelope(prompt, {
319
+ complexity: 'moderate',
320
+ taskType: guessTaskType(prompt),
321
+ reasoning: 'Fallback: V2 pipeline failed',
322
+ fallbackUsed: true,
323
+ classificationMs: Date.now() - start,
324
+ });
197
325
  }
198
- return null;
199
326
  }
200
- async aiClassifyWithTimeout(prompt, projectPath) {
201
- return await Promise.race([
202
- this.aiClassify(prompt, projectPath),
203
- new Promise((_, reject) => setTimeout(() => reject(new Error(`AI timeout ${this.timeoutMs}ms`)), this.timeoutMs)),
204
- ]);
205
- }
206
- async aiClassify(prompt, projectPath) {
207
- const aiPrompt = [
208
- 'Classify the user task. Respond with ONLY a JSON object, no other text.',
209
- '',
210
- 'Complexity levels:',
211
- '- simple: single-file change, quick fix, read-only query',
212
- '- moderate: multi-file change, new feature, bug fix requiring investigation',
213
- '- complex: architecture change, migration, large refactor',
214
- '',
215
- 'taskType enum (choose exactly one):',
216
- TASK_TYPES.join(', '),
217
- '',
218
- 'Guidance:',
219
- '- "帮我实现一个 X 系统" → build_system',
220
- '- "加一个功能 / 实现 X" → add_feature',
221
- '- "修 bug / 报错" → fix_bug',
222
- '- "设计接口" → design_api; "设计表 / schema" → design_schema',
223
- '- "写测试" → write_test; "评审代码 / PR" → review',
224
- '- "解释这段代码" → explain',
225
- '- Default to "other" if none fits',
226
- '',
227
- `Project: ${projectPath}`,
228
- `Task: ${prompt}`,
229
- '',
230
- 'Response format:',
231
- '{"complexity": "...", "taskType": "...", "searchKeywords": ["k1"], "reasoning": "why"}',
232
- ].join('\n');
233
- const response = await this.ai.complete(aiPrompt, this.model ? { model: this.model } : undefined);
234
- return this.parseAIResponse(response, prompt);
235
- }
236
- parseAIResponse(response, originalPrompt) {
237
- try {
238
- const cleaned = response.replace(/```json\s*/g, '').replace(/```\s*/g, '');
239
- const jsonMatch = cleaned.match(/\{[\s\S]*\}/);
240
- if (!jsonMatch)
241
- throw new Error('No JSON found');
242
- const parsed = JSON.parse(jsonMatch[0]);
243
- const complexity = (['simple', 'moderate', 'complex'].includes(parsed.complexity)
244
- ? parsed.complexity
245
- : 'moderate');
246
- const taskType = TASK_TYPES.includes(parsed.taskType)
247
- ? parsed.taskType
248
- : 'other';
249
- return {
250
- requirement: originalPrompt,
251
- complexity,
252
- taskType,
253
- searchKeywords: Array.isArray(parsed.searchKeywords) ? parsed.searchKeywords : [],
254
- reasoning: parsed.reasoning || 'AI classification',
255
- };
256
- }
257
- catch {
258
- logger.warn('[IntentClassifier] Failed to parse AI response');
259
- return this.fallback(originalPrompt);
327
+ }
328
+ // ── V1 ground-truth (regex-only, no AI) ───────────────────────────────────
329
+ function matchGroundTruth(prompt) {
330
+ for (const pattern of SIMPLE_PATTERNS) {
331
+ if (pattern.test(prompt)) {
332
+ return buildV1Envelope(prompt, {
333
+ complexity: 'simple',
334
+ taskType: 'other',
335
+ reasoning: `Matches simple command pattern: ${pattern.source}`,
336
+ });
260
337
  }
261
338
  }
262
- fallback(prompt) {
263
- return {
264
- requirement: prompt,
265
- complexity: 'moderate',
266
- taskType: this.guessTaskType(prompt),
267
- searchKeywords: this.extractKeywords(prompt),
268
- reasoning: 'Fallback: regex-based classification',
269
- };
270
- }
271
- guessTaskType(prompt) {
272
- for (const bucket of TASK_TYPE_KEYWORDS) {
273
- if (bucket.patterns.some((p) => p.test(prompt))) {
274
- return bucket.taskType;
275
- }
339
+ for (const pattern of COMPLEX_PATTERNS) {
340
+ if (pattern.test(prompt)) {
341
+ return buildV1Envelope(prompt, {
342
+ complexity: 'complex',
343
+ taskType: guessTaskType(prompt),
344
+ reasoning: `Matches complex task pattern: ${pattern.source}`,
345
+ });
276
346
  }
277
- return 'other';
278
- }
279
- extractKeywords(prompt) {
280
- const stopWords = new Set(['the', 'and', 'for', 'with', 'this', 'that', 'from', 'have', 'will']);
281
- return prompt
282
- .split(/[\s,;.!?]+/)
283
- .filter(w => w.length >= 3 && !stopWords.has(w.toLowerCase()))
284
- .slice(0, 5);
285
347
  }
348
+ return null;
286
349
  }
350
+ // ── Public helpers (kept exported for tests / downstream consumers) ───────
351
+ export { guessTaskType, extractKeywords, TASK_TYPE_KEYWORDS };
287
352
  //# sourceMappingURL=classifier.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"classifier.js","sourceRoot":"","sources":["../../src/intelligence/classifier.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"classifier.js","sourceRoot":"","sources":["../../src/intelligence/classifier.ts"],"names":[],"mappings":"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"}