@winspan/claude-forge 8.35.0 → 8.37.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.
- package/README.md +5 -0
- package/dist/agents/registry.d.ts +2 -1
- package/dist/agents/registry.d.ts.map +1 -1
- package/dist/agents/registry.js +17 -4
- package/dist/agents/registry.js.map +1 -1
- package/dist/cli/commands/init.d.ts.map +1 -1
- package/dist/cli/commands/init.js +5 -1
- package/dist/cli/commands/init.js.map +1 -1
- package/dist/cli/commands/mcp.d.ts +14 -0
- package/dist/cli/commands/mcp.d.ts.map +1 -0
- package/dist/cli/commands/mcp.js +164 -0
- package/dist/cli/commands/mcp.js.map +1 -0
- package/dist/cli/commands/menu.js +33 -0
- package/dist/cli/commands/menu.js.map +1 -1
- package/dist/cli/index.js +2 -0
- package/dist/cli/index.js.map +1 -1
- package/dist/core/ai/provider.d.ts +23 -1
- package/dist/core/ai/provider.d.ts.map +1 -1
- package/dist/core/ai/provider.js +67 -1
- package/dist/core/ai/provider.js.map +1 -1
- package/dist/core/ai/types.d.ts +28 -0
- package/dist/core/ai/types.d.ts.map +1 -1
- package/dist/daemon/handlers/user-prompt.d.ts.map +1 -1
- package/dist/daemon/handlers/user-prompt.js +25 -3
- package/dist/daemon/handlers/user-prompt.js.map +1 -1
- package/dist/daemon/index.d.ts.map +1 -1
- package/dist/daemon/index.js +7 -2
- package/dist/daemon/index.js.map +1 -1
- package/dist/daemon/routing-state.d.ts +14 -0
- package/dist/daemon/routing-state.d.ts.map +1 -1
- package/dist/daemon/routing-state.js +34 -0
- package/dist/daemon/routing-state.js.map +1 -1
- package/dist/engine/agent-router.d.ts +37 -0
- package/dist/engine/agent-router.d.ts.map +1 -1
- package/dist/engine/agent-router.js +58 -0
- package/dist/engine/agent-router.js.map +1 -1
- package/dist/engine/conventions/routing.yaml +31 -2
- package/dist/intelligence/classifier.d.ts +63 -43
- package/dist/intelligence/classifier.d.ts.map +1 -1
- package/dist/intelligence/classifier.js +256 -191
- package/dist/intelligence/classifier.js.map +1 -1
- package/dist/intelligence/context-gatherer.d.ts +101 -0
- package/dist/intelligence/context-gatherer.d.ts.map +1 -0
- package/dist/intelligence/context-gatherer.js +417 -0
- package/dist/intelligence/context-gatherer.js.map +1 -0
- package/dist/intelligence/cot-classifier.d.ts +95 -0
- package/dist/intelligence/cot-classifier.d.ts.map +1 -0
- package/dist/intelligence/cot-classifier.js +391 -0
- package/dist/intelligence/cot-classifier.js.map +1 -0
- package/dist/intelligence/execution-doc-builder.d.ts +90 -0
- package/dist/intelligence/execution-doc-builder.d.ts.map +1 -1
- package/dist/intelligence/execution-doc-builder.js +459 -42
- package/dist/intelligence/execution-doc-builder.js.map +1 -1
- package/dist/intelligence/intent-types.d.ts +13 -0
- package/dist/intelligence/intent-types.d.ts.map +1 -0
- package/dist/intelligence/intent-types.js +19 -0
- package/dist/intelligence/intent-types.js.map +1 -0
- package/dist/intelligence/multimodal-parser.d.ts +105 -0
- package/dist/intelligence/multimodal-parser.d.ts.map +1 -0
- package/dist/intelligence/multimodal-parser.js +425 -0
- package/dist/intelligence/multimodal-parser.js.map +1 -0
- package/dist/mcp/server.d.ts +58 -0
- package/dist/mcp/server.d.ts.map +1 -0
- package/dist/mcp/server.js +201 -0
- package/dist/mcp/server.js.map +1 -0
- package/dist/skills/registry.d.ts.map +1 -1
- package/dist/skills/registry.js +2 -1
- package/dist/skills/registry.js.map +1 -1
- package/dist/skills/tools/skill-invoke.d.ts +5 -4
- package/dist/skills/tools/skill-invoke.d.ts.map +1 -1
- package/dist/skills/tools/skill-invoke.js +6 -5
- package/dist/skills/tools/skill-invoke.js.map +1 -1
- package/dist/web/server.d.ts +2 -0
- package/dist/web/server.d.ts.map +1 -1
- package/dist/web/server.js +13 -0
- package/dist/web/server.js.map +1 -1
- package/dist/web/static/assets/{AIConfig-DiUFET_Q.js → AIConfig-D4VglzCl.js} +2 -2
- package/dist/web/static/assets/{AIConfig-DiUFET_Q.js.map → AIConfig-D4VglzCl.js.map} +1 -1
- package/dist/web/static/assets/{Agents-bNNGbQnL.js → Agents-ne5lXc7V.js} +2 -2
- package/dist/web/static/assets/{Agents-bNNGbQnL.js.map → Agents-ne5lXc7V.js.map} +1 -1
- package/dist/web/static/assets/Dashboard-D4j0Zmek.js +2 -0
- package/dist/web/static/assets/Dashboard-D4j0Zmek.js.map +1 -0
- package/dist/web/static/assets/{Drawer-DOUcx6m1.js → Drawer-Lo5ihVP-.js} +2 -2
- package/dist/web/static/assets/{Drawer-DOUcx6m1.js.map → Drawer-Lo5ihVP-.js.map} +1 -1
- package/dist/web/static/assets/{Events-DQHP6Uaq.js → Events-DBJ1B7OW.js} +2 -2
- package/dist/web/static/assets/{Events-DQHP6Uaq.js.map → Events-DBJ1B7OW.js.map} +1 -1
- package/dist/web/static/assets/{ExecutionTrace-Co8ARdg-.js → ExecutionTrace-Du9XADc1.js} +2 -2
- package/dist/web/static/assets/{ExecutionTrace-Co8ARdg-.js.map → ExecutionTrace-Du9XADc1.js.map} +1 -1
- package/dist/web/static/assets/{Routing-BW3eGD-8.js → Routing-BNQ09OlH.js} +2 -2
- package/dist/web/static/assets/{Routing-BW3eGD-8.js.map → Routing-BNQ09OlH.js.map} +1 -1
- package/dist/web/static/assets/{SessionDetail-Cbd7Jwox.js → SessionDetail-BPrPyMNa.js} +2 -2
- package/dist/web/static/assets/{SessionDetail-Cbd7Jwox.js.map → SessionDetail-BPrPyMNa.js.map} +1 -1
- package/dist/web/static/assets/{Sessions-ZQSCgXyy.js → Sessions-o3EXsXz9.js} +2 -2
- package/dist/web/static/assets/{Sessions-ZQSCgXyy.js.map → Sessions-o3EXsXz9.js.map} +1 -1
- package/dist/web/static/assets/{Skills-C5-5zOSH.js → Skills-Czt5mkyc.js} +2 -2
- package/dist/web/static/assets/{Skills-C5-5zOSH.js.map → Skills-Czt5mkyc.js.map} +1 -1
- package/dist/web/static/assets/{export-CbQTOt71.js → export-C0mlC4AT.js} +2 -2
- package/dist/web/static/assets/{export-CbQTOt71.js.map → export-C0mlC4AT.js.map} +1 -1
- package/dist/web/static/assets/index-B1J7nBu0.js +3 -0
- package/dist/web/static/assets/index-B1J7nBu0.js.map +1 -0
- package/dist/web/static/assets/index-BVqk4bSO.css +1 -0
- package/dist/web/static/assets/{lucide-BanPULT1.js → lucide-Bu44HVAM.js} +33 -73
- package/dist/web/static/assets/lucide-Bu44HVAM.js.map +1 -0
- package/dist/web/static/index.html +3 -3
- package/package.json +2 -1
- package/dist/web/static/assets/Dashboard-Ciyyw6ph.js +0 -2
- package/dist/web/static/assets/Dashboard-Ciyyw6ph.js.map +0 -1
- package/dist/web/static/assets/Methodologies-CXNrDXwG.js +0 -5
- package/dist/web/static/assets/Methodologies-CXNrDXwG.js.map +0 -1
- package/dist/web/static/assets/MethodologyDetail-rV3W1utf.js +0 -2
- package/dist/web/static/assets/MethodologyDetail-rV3W1utf.js.map +0 -1
- package/dist/web/static/assets/index-DJK5beK6.js +0 -3
- package/dist/web/static/assets/index-DJK5beK6.js.map +0 -1
- package/dist/web/static/assets/index-phpuytMI.css +0 -1
- package/dist/web/static/assets/lucide-BanPULT1.js.map +0 -1
|
@@ -1,59 +1,48 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* IntentClassifier — intent classification
|
|
2
|
+
* IntentClassifier — V2 intent classification facade (CoT + multimodal + context).
|
|
3
3
|
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
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
|
-
*
|
|
8
|
-
*
|
|
9
|
-
*
|
|
10
|
-
*
|
|
11
|
-
*
|
|
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 {
|
|
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
|
|
16
|
-
|
|
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
|
-
|
|
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
|
-
|
|
77
|
-
|
|
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
|
-
|
|
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
|
-
|
|
97
|
+
// 解释型"为什么"后置(负向前瞻排除问题型)
|
|
98
|
+
{ taskType: 'explain', patterns: [/解释|说明|解读|理解|explain|what (does|is)|为什么(?!.*(还有|还在|没有|不|失败|错误|问题|异常|报错|崩溃|不工作|broken))|这段.*(做什么|含义|意思)|这是.*(什么|做什么)|how does/i] },
|
|
109
99
|
];
|
|
110
|
-
|
|
111
|
-
//
|
|
112
|
-
const
|
|
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
|
-
|
|
116
|
-
|
|
117
|
-
|
|
238
|
+
options;
|
|
239
|
+
parser;
|
|
240
|
+
gatherer;
|
|
241
|
+
cot;
|
|
118
242
|
constructor(ai, options) {
|
|
119
243
|
this.ai = ai;
|
|
120
|
-
this.
|
|
121
|
-
|
|
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
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
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
|
|
140
|
-
const groundTruth =
|
|
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
|
|
146
|
-
if (!this.ai) {
|
|
147
|
-
const fb =
|
|
148
|
-
|
|
149
|
-
|
|
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
|
|
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
|
|
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
|
-
|
|
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]
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
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
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
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
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
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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"}
|