@winspan/claude-forge 0.7.2 → 0.7.4
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/dist/ai-gateway/index.d.ts.map +1 -1
- package/dist/ai-gateway/index.js +30 -9
- package/dist/ai-gateway/index.js.map +1 -1
- package/dist/ai-gateway/model-selector.d.ts +12 -0
- package/dist/ai-gateway/model-selector.d.ts.map +1 -1
- package/dist/ai-gateway/model-selector.js +20 -0
- package/dist/ai-gateway/model-selector.js.map +1 -1
- package/dist/autopilot/intent-engine.d.ts +0 -4
- package/dist/autopilot/intent-engine.d.ts.map +1 -1
- package/dist/autopilot/intent-engine.js +32 -102
- package/dist/autopilot/intent-engine.js.map +1 -1
- package/dist/autopilot/issue-tracker.d.ts +48 -0
- package/dist/autopilot/issue-tracker.d.ts.map +1 -0
- package/dist/autopilot/issue-tracker.js +94 -0
- package/dist/autopilot/issue-tracker.js.map +1 -0
- package/dist/autopilot/phase-gap-detector.d.ts +25 -0
- package/dist/autopilot/phase-gap-detector.d.ts.map +1 -0
- package/dist/autopilot/phase-gap-detector.js +80 -0
- package/dist/autopilot/phase-gap-detector.js.map +1 -0
- package/dist/autopilot/quality-gate.d.ts +22 -0
- package/dist/autopilot/quality-gate.d.ts.map +1 -1
- package/dist/autopilot/quality-gate.js +108 -25
- package/dist/autopilot/quality-gate.js.map +1 -1
- package/dist/autopilot/task-completion-detector.d.ts +32 -0
- package/dist/autopilot/task-completion-detector.d.ts.map +1 -0
- package/dist/autopilot/task-completion-detector.js +103 -0
- package/dist/autopilot/task-completion-detector.js.map +1 -0
- package/dist/cli/commands/pattern.d.ts.map +1 -1
- package/dist/cli/commands/pattern.js +44 -38
- package/dist/cli/commands/pattern.js.map +1 -1
- package/dist/daemon/engine-registry.js +1 -1
- package/dist/daemon/handlers/context-builder.d.ts +8 -7
- package/dist/daemon/handlers/context-builder.d.ts.map +1 -1
- package/dist/daemon/handlers/context-builder.js +16 -20
- package/dist/daemon/handlers/context-builder.js.map +1 -1
- package/dist/daemon/handlers/orchestration-context.d.ts +6 -9
- package/dist/daemon/handlers/orchestration-context.d.ts.map +1 -1
- package/dist/daemon/handlers/post-tool-use-handler.d.ts.map +1 -1
- package/dist/daemon/handlers/post-tool-use-handler.js +12 -0
- package/dist/daemon/handlers/post-tool-use-handler.js.map +1 -1
- package/dist/daemon/handlers/stages/01-failure-signal.d.ts +1 -0
- package/dist/daemon/handlers/stages/01-failure-signal.d.ts.map +1 -1
- package/dist/daemon/handlers/stages/01-failure-signal.js +2 -2
- package/dist/daemon/handlers/stages/01-failure-signal.js.map +1 -1
- package/dist/daemon/handlers/stages/02-active-intervention.d.ts +1 -0
- package/dist/daemon/handlers/stages/02-active-intervention.d.ts.map +1 -1
- package/dist/daemon/handlers/stages/02-active-intervention.js +1 -0
- package/dist/daemon/handlers/stages/02-active-intervention.js.map +1 -1
- package/dist/daemon/handlers/stages/03-init-prompt.d.ts +1 -0
- package/dist/daemon/handlers/stages/03-init-prompt.d.ts.map +1 -1
- package/dist/daemon/handlers/stages/03-init-prompt.js +2 -2
- package/dist/daemon/handlers/stages/03-init-prompt.js.map +1 -1
- package/dist/daemon/handlers/stages/04-skill-suggestions.d.ts +1 -0
- package/dist/daemon/handlers/stages/04-skill-suggestions.d.ts.map +1 -1
- package/dist/daemon/handlers/stages/04-skill-suggestions.js +2 -1
- package/dist/daemon/handlers/stages/04-skill-suggestions.js.map +1 -1
- package/dist/daemon/handlers/stages/05-conv-config.d.ts +1 -0
- package/dist/daemon/handlers/stages/05-conv-config.d.ts.map +1 -1
- package/dist/daemon/handlers/stages/05-conv-config.js +1 -0
- package/dist/daemon/handlers/stages/05-conv-config.js.map +1 -1
- package/dist/daemon/handlers/stages/06-engine-check.d.ts +1 -0
- package/dist/daemon/handlers/stages/06-engine-check.d.ts.map +1 -1
- package/dist/daemon/handlers/stages/06-engine-check.js +1 -0
- package/dist/daemon/handlers/stages/06-engine-check.js.map +1 -1
- package/dist/daemon/handlers/stages/07-pipeline-reply.d.ts +1 -0
- package/dist/daemon/handlers/stages/07-pipeline-reply.d.ts.map +1 -1
- package/dist/daemon/handlers/stages/07-pipeline-reply.js +1 -2
- package/dist/daemon/handlers/stages/07-pipeline-reply.js.map +1 -1
- package/dist/daemon/handlers/stages/08-esc-interrupt.d.ts +1 -0
- package/dist/daemon/handlers/stages/08-esc-interrupt.d.ts.map +1 -1
- package/dist/daemon/handlers/stages/08-esc-interrupt.js +1 -0
- package/dist/daemon/handlers/stages/08-esc-interrupt.js.map +1 -1
- package/dist/daemon/handlers/stages/09-pipeline-active.d.ts +1 -0
- package/dist/daemon/handlers/stages/09-pipeline-active.d.ts.map +1 -1
- package/dist/daemon/handlers/stages/09-pipeline-active.js +1 -0
- package/dist/daemon/handlers/stages/09-pipeline-active.js.map +1 -1
- package/dist/daemon/handlers/stages/10-cooldown.d.ts +1 -1
- package/dist/daemon/handlers/stages/10-cooldown.d.ts.map +1 -1
- package/dist/daemon/handlers/stages/10-cooldown.js +1 -39
- package/dist/daemon/handlers/stages/10-cooldown.js.map +1 -1
- package/dist/daemon/handlers/stages/11-intent-analysis.d.ts +1 -0
- package/dist/daemon/handlers/stages/11-intent-analysis.d.ts.map +1 -1
- package/dist/daemon/handlers/stages/11-intent-analysis.js +4 -3
- package/dist/daemon/handlers/stages/11-intent-analysis.js.map +1 -1
- package/dist/daemon/handlers/stages/12-strategy-advice.d.ts +1 -0
- package/dist/daemon/handlers/stages/12-strategy-advice.d.ts.map +1 -1
- package/dist/daemon/handlers/stages/12-strategy-advice.js +1 -0
- package/dist/daemon/handlers/stages/12-strategy-advice.js.map +1 -1
- package/dist/daemon/handlers/stages/13-template-route.d.ts +1 -0
- package/dist/daemon/handlers/stages/13-template-route.d.ts.map +1 -1
- package/dist/daemon/handlers/stages/13-template-route.js +1 -0
- package/dist/daemon/handlers/stages/13-template-route.js.map +1 -1
- package/dist/daemon/handlers/stages/14-plan-resume.d.ts +1 -0
- package/dist/daemon/handlers/stages/14-plan-resume.d.ts.map +1 -1
- package/dist/daemon/handlers/stages/14-plan-resume.js +1 -0
- package/dist/daemon/handlers/stages/14-plan-resume.js.map +1 -1
- package/dist/daemon/handlers/stages/15-plan-enforcement.d.ts +1 -0
- package/dist/daemon/handlers/stages/15-plan-enforcement.d.ts.map +1 -1
- package/dist/daemon/handlers/stages/15-plan-enforcement.js +1 -0
- package/dist/daemon/handlers/stages/15-plan-enforcement.js.map +1 -1
- package/dist/daemon/handlers/stages/16-intervention-level.d.ts +1 -0
- package/dist/daemon/handlers/stages/16-intervention-level.d.ts.map +1 -1
- package/dist/daemon/handlers/stages/16-intervention-level.js +1 -0
- package/dist/daemon/handlers/stages/16-intervention-level.js.map +1 -1
- package/dist/daemon/handlers/stages/17-simple-task.d.ts +1 -0
- package/dist/daemon/handlers/stages/17-simple-task.d.ts.map +1 -1
- package/dist/daemon/handlers/stages/17-simple-task.js +2 -1
- package/dist/daemon/handlers/stages/17-simple-task.js.map +1 -1
- package/dist/daemon/handlers/stages/18-complex-task.d.ts +1 -0
- package/dist/daemon/handlers/stages/18-complex-task.d.ts.map +1 -1
- package/dist/daemon/handlers/stages/18-complex-task.js +4 -4
- package/dist/daemon/handlers/stages/18-complex-task.js.map +1 -1
- package/dist/daemon/handlers/stages/19-moderate-task.d.ts +1 -0
- package/dist/daemon/handlers/stages/19-moderate-task.d.ts.map +1 -1
- package/dist/daemon/handlers/stages/19-moderate-task.js +3 -2
- package/dist/daemon/handlers/stages/19-moderate-task.js.map +1 -1
- package/dist/daemon/handlers/stages/stage-interface.d.ts +3 -0
- package/dist/daemon/handlers/stages/stage-interface.d.ts.map +1 -1
- package/dist/daemon/handlers/stages/stage-scheduler.d.ts +27 -0
- package/dist/daemon/handlers/stages/stage-scheduler.d.ts.map +1 -0
- package/dist/daemon/handlers/stages/stage-scheduler.js +105 -0
- package/dist/daemon/handlers/stages/stage-scheduler.js.map +1 -0
- package/dist/daemon/handlers/user-prompt-handler.d.ts +3 -12
- package/dist/daemon/handlers/user-prompt-handler.d.ts.map +1 -1
- package/dist/daemon/handlers/user-prompt-handler.js +73 -94
- package/dist/daemon/handlers/user-prompt-handler.js.map +1 -1
- package/dist/pipeline/index.d.ts +1 -5
- package/dist/pipeline/index.d.ts.map +1 -1
- package/dist/pipeline/index.js +29 -25
- package/dist/pipeline/index.js.map +1 -1
- package/dist/{pattern-engine/types.d.ts → pipeline/pattern-types.d.ts} +1 -1
- package/dist/pipeline/pattern-types.d.ts.map +1 -0
- package/dist/{pattern-engine/types.js → pipeline/pattern-types.js} +1 -1
- package/dist/pipeline/pattern-types.js.map +1 -0
- package/dist/pipeline/phase-manager.d.ts +6 -1
- package/dist/pipeline/phase-manager.d.ts.map +1 -1
- package/dist/pipeline/phase-manager.js +68 -38
- package/dist/pipeline/phase-manager.js.map +1 -1
- package/dist/pipeline/report-generator.d.ts +20 -0
- package/dist/pipeline/report-generator.d.ts.map +1 -0
- package/dist/pipeline/report-generator.js +123 -0
- package/dist/pipeline/report-generator.js.map +1 -0
- package/dist/prompts/intent-analysis.md +62 -0
- package/dist/prompts/registry.d.ts +17 -0
- package/dist/prompts/registry.d.ts.map +1 -0
- package/dist/prompts/registry.js +40 -0
- package/dist/prompts/registry.js.map +1 -0
- package/dist/skill-registry/evolver/index.d.ts +1 -1
- package/dist/skill-registry/evolver/index.d.ts.map +1 -1
- package/dist/{pattern-engine → skill-registry}/pattern-evolver.d.ts +6 -2
- package/dist/skill-registry/pattern-evolver.d.ts.map +1 -0
- package/dist/{pattern-engine → skill-registry}/pattern-evolver.js +30 -6
- package/dist/skill-registry/pattern-evolver.js.map +1 -0
- package/dist/storage/repositories/distill-repository.d.ts +2 -1
- package/dist/storage/repositories/distill-repository.d.ts.map +1 -1
- package/dist/storage/repositories/distill-repository.js +6 -0
- package/dist/storage/repositories/distill-repository.js.map +1 -1
- package/dist/storage/sqlite.d.ts +96 -157
- package/dist/storage/sqlite.d.ts.map +1 -1
- package/dist/storage/sqlite.js +123 -896
- package/dist/storage/sqlite.js.map +1 -1
- package/package.json +2 -2
- package/dist/daemon/engine-registry/init-pattern-engine.d.ts +0 -9
- package/dist/daemon/engine-registry/init-pattern-engine.d.ts.map +0 -1
- package/dist/daemon/engine-registry/init-pattern-engine.js +0 -22
- package/dist/daemon/engine-registry/init-pattern-engine.js.map +0 -1
- package/dist/pattern-engine/convention-pattern-generator.d.ts +0 -14
- package/dist/pattern-engine/convention-pattern-generator.d.ts.map +0 -1
- package/dist/pattern-engine/convention-pattern-generator.js +0 -120
- package/dist/pattern-engine/convention-pattern-generator.js.map +0 -1
- package/dist/pattern-engine/execution-tracker.d.ts +0 -45
- package/dist/pattern-engine/execution-tracker.d.ts.map +0 -1
- package/dist/pattern-engine/execution-tracker.js +0 -136
- package/dist/pattern-engine/execution-tracker.js.map +0 -1
- package/dist/pattern-engine/index.d.ts +0 -75
- package/dist/pattern-engine/index.d.ts.map +0 -1
- package/dist/pattern-engine/index.js +0 -247
- package/dist/pattern-engine/index.js.map +0 -1
- package/dist/pattern-engine/pattern-evolver.d.ts.map +0 -1
- package/dist/pattern-engine/pattern-evolver.js.map +0 -1
- package/dist/pattern-engine/pattern-executor.d.ts +0 -43
- package/dist/pattern-engine/pattern-executor.d.ts.map +0 -1
- package/dist/pattern-engine/pattern-executor.js +0 -228
- package/dist/pattern-engine/pattern-executor.js.map +0 -1
- package/dist/pattern-engine/pattern-loader.d.ts +0 -14
- package/dist/pattern-engine/pattern-loader.d.ts.map +0 -1
- package/dist/pattern-engine/pattern-loader.js +0 -111
- package/dist/pattern-engine/pattern-loader.js.map +0 -1
- package/dist/pattern-engine/pattern-router.d.ts +0 -31
- package/dist/pattern-engine/pattern-router.d.ts.map +0 -1
- package/dist/pattern-engine/pattern-router.js +0 -160
- package/dist/pattern-engine/pattern-router.js.map +0 -1
- package/dist/pattern-engine/types.d.ts.map +0 -1
- package/dist/pattern-engine/types.js.map +0 -1
|
@@ -1,247 +0,0 @@
|
|
|
1
|
-
import { PatternLoader } from './pattern-loader.js';
|
|
2
|
-
import { PatternRouter } from './pattern-router.js';
|
|
3
|
-
import { PatternExecutor } from './pattern-executor.js';
|
|
4
|
-
import { ExecutionTracer } from './execution-tracker.js';
|
|
5
|
-
import { generatePatternsFromConventions } from './convention-pattern-generator.js';
|
|
6
|
-
import { ThompsonSampler } from '../strategy/bandit.js';
|
|
7
|
-
import { logger } from '../utils/logger.js';
|
|
8
|
-
import { memoryManager } from '../utils/memory-manager.js';
|
|
9
|
-
import fs from 'fs';
|
|
10
|
-
import path from 'path';
|
|
11
|
-
import crypto from 'crypto';
|
|
12
|
-
/**
|
|
13
|
-
* PatternEngine 门面类:统一入口,供 daemon handler 调用。
|
|
14
|
-
*
|
|
15
|
-
* @deprecated Batch 4:PatternEngine 已被 TemplateRegistry + TemplateRouter 替代。
|
|
16
|
-
* 现有 Pattern YAML 文件会被 TemplateRegistry 自动加载并转换为 PipelineTemplate。
|
|
17
|
-
* 此类将在 3 个版本后移除(给用户升级时间)。
|
|
18
|
-
*
|
|
19
|
-
* Pattern 来源:
|
|
20
|
-
* 1. 全局用户自定义:~/.claude-forge/patterns/*.yaml(用户手动创建/进化器产出)
|
|
21
|
-
* 2. 项目级持久化:.claude-forge/patterns/*.yaml(从 Convention 首次生成后保存,可被进化器优化)
|
|
22
|
-
*
|
|
23
|
-
* 路由优先级:项目级 Pattern 优先于全局 Pattern(更贴合项目规范)
|
|
24
|
-
*/
|
|
25
|
-
export class PatternEngine {
|
|
26
|
-
loader;
|
|
27
|
-
router;
|
|
28
|
-
executor;
|
|
29
|
-
tracer;
|
|
30
|
-
storage;
|
|
31
|
-
bandit = new ThompsonSampler();
|
|
32
|
-
/** 全局 Pattern(用户自定义 + yaml 文件) */
|
|
33
|
-
globalPatterns = [];
|
|
34
|
-
/** 项目级 Pattern 内存缓存(LRU,max=50,TTL=1h) */
|
|
35
|
-
projectPatternsCache = memoryManager.register('pattern:projectCache', { max: 50, ttl: 3600_000 });
|
|
36
|
-
constructor(api, storage) {
|
|
37
|
-
this.loader = new PatternLoader();
|
|
38
|
-
this.router = new PatternRouter(api);
|
|
39
|
-
this.executor = new PatternExecutor();
|
|
40
|
-
this.tracer = new ExecutionTracer(storage, this.executor);
|
|
41
|
-
this.storage = storage;
|
|
42
|
-
}
|
|
43
|
-
/** 初始化:加载全局 Pattern 文件 */
|
|
44
|
-
initialize() {
|
|
45
|
-
this.globalPatterns = this.loader.loadAll();
|
|
46
|
-
logger.info(`工作流引擎已初始化 | 全局模板=${this.globalPatterns.length} 个`);
|
|
47
|
-
}
|
|
48
|
-
/** 重新加载全局 Pattern 文件(热更新) */
|
|
49
|
-
reload() {
|
|
50
|
-
this.globalPatterns = this.loader.loadAll();
|
|
51
|
-
this.projectPatternsCache.clear();
|
|
52
|
-
logger.info(`工作流引擎已重新加载 | 全局模板=${this.globalPatterns.length} 个`);
|
|
53
|
-
}
|
|
54
|
-
/**
|
|
55
|
-
* 获取项目可用的所有 Pattern(全局 + 项目级持久化)。
|
|
56
|
-
*
|
|
57
|
-
* 策略:
|
|
58
|
-
* 1. 内存缓存命中 → 直接返回
|
|
59
|
-
* 2. 项目 .claude-forge/patterns/ 目录存在且指纹匹配 → 从文件加载
|
|
60
|
-
* 3. 否则从 Convention 生成 → 保存到项目文件 → 写入内存缓存
|
|
61
|
-
*/
|
|
62
|
-
getPatternsForProject(projectPath, conventions) {
|
|
63
|
-
// 1. 内存缓存
|
|
64
|
-
const cached = this.projectPatternsCache.get(projectPath);
|
|
65
|
-
if (cached) {
|
|
66
|
-
return [...cached, ...this.globalPatterns];
|
|
67
|
-
}
|
|
68
|
-
const projectPatternsDir = path.join(projectPath, '.claude-forge', 'patterns');
|
|
69
|
-
const fingerprintPath = path.join(projectPatternsDir, '.fingerprint.json');
|
|
70
|
-
// 2. 尝试从项目文件加载
|
|
71
|
-
if (fs.existsSync(projectPatternsDir) && fs.existsSync(fingerprintPath)) {
|
|
72
|
-
const currentHash = conventions ? this.computeConventionHash(conventions) : '';
|
|
73
|
-
try {
|
|
74
|
-
const fp = JSON.parse(fs.readFileSync(fingerprintPath, 'utf-8'));
|
|
75
|
-
// 指纹匹配 → 直接从文件加载
|
|
76
|
-
if (fp.hash === currentHash || !conventions) {
|
|
77
|
-
const projectLoader = new PatternLoader(projectPatternsDir);
|
|
78
|
-
const projectPatterns = projectLoader.loadAll();
|
|
79
|
-
if (projectPatterns.length > 0) {
|
|
80
|
-
this.projectPatternsCache.set(projectPath, projectPatterns);
|
|
81
|
-
logger.info(`已加载项目工作流模板 ${projectPatterns.length} 个(从文件读取)`);
|
|
82
|
-
return [...projectPatterns, ...this.globalPatterns];
|
|
83
|
-
}
|
|
84
|
-
}
|
|
85
|
-
else {
|
|
86
|
-
logger.info('项目规范已变更,重新生成工作流模板');
|
|
87
|
-
}
|
|
88
|
-
}
|
|
89
|
-
catch {
|
|
90
|
-
// 指纹文件损坏,重新生成
|
|
91
|
-
}
|
|
92
|
-
}
|
|
93
|
-
// 3. 从 Convention 生成并持久化
|
|
94
|
-
const projectPatterns = conventions ? generatePatternsFromConventions(conventions) : [];
|
|
95
|
-
if (projectPatterns.length > 0) {
|
|
96
|
-
this.saveProjectPatterns(projectPath, projectPatterns, conventions ?? []);
|
|
97
|
-
logger.info(`首次生成项目工作流模板:${projectPatterns.map(p => p.name).join('、')}(已保存到 .claude-forge/patterns/)`);
|
|
98
|
-
}
|
|
99
|
-
this.projectPatternsCache.set(projectPath, projectPatterns);
|
|
100
|
-
return [...projectPatterns, ...this.globalPatterns];
|
|
101
|
-
}
|
|
102
|
-
/**
|
|
103
|
-
* 路由并启动执行计划。
|
|
104
|
-
* 先从项目绑定的 Convention 生成项目级 Pattern,合并全局 Pattern 后路由。
|
|
105
|
-
*/
|
|
106
|
-
async routeAndStart(userInput, sessionId, projectPath, complexity, conventions) {
|
|
107
|
-
const patterns = this.getPatternsForProject(projectPath, conventions);
|
|
108
|
-
if (patterns.length === 0) {
|
|
109
|
-
logger.info('无可用工作流模板(项目无绑定规范且无全局模板)');
|
|
110
|
-
return null;
|
|
111
|
-
}
|
|
112
|
-
// simple 复杂度快速过滤:检查是否有任何 Pattern 支持 simple
|
|
113
|
-
if (complexity === 'simple') {
|
|
114
|
-
const hasSimplePattern = patterns.some(p => !p.trigger.complexity ||
|
|
115
|
-
p.trigger.complexity.length === 0 ||
|
|
116
|
-
p.trigger.complexity.includes('simple'));
|
|
117
|
-
if (!hasSimplePattern) {
|
|
118
|
-
logger.info('简单任务跳过工作流路由(所有模板仅支持中等/复杂任务)');
|
|
119
|
-
return null;
|
|
120
|
-
}
|
|
121
|
-
}
|
|
122
|
-
// 将合并后的 Pattern 列表设置到路由器
|
|
123
|
-
this.router.setPatterns(patterns);
|
|
124
|
-
const result = await this.router.route(userInput, complexity);
|
|
125
|
-
if (!result.pattern)
|
|
126
|
-
return null;
|
|
127
|
-
// 多臂老虎机:当关键词匹配有 2+ 个候选时,用 Thompson Sampling 选择
|
|
128
|
-
let pattern = result.pattern;
|
|
129
|
-
if (result.method === 'keyword') {
|
|
130
|
-
const candidates = this.router.routeAllCandidates(userInput, complexity);
|
|
131
|
-
if (candidates.length >= 2) {
|
|
132
|
-
const arms = candidates.map(c => {
|
|
133
|
-
const rows = this.storage.getTopPatterns(c.pattern.id, 1);
|
|
134
|
-
const row = rows[0];
|
|
135
|
-
return {
|
|
136
|
-
id: c.pattern.id,
|
|
137
|
-
adoptionCount: Number(row?.['adoption_count'] ?? 0),
|
|
138
|
-
effectivenessScore: Number(row?.['effectiveness_score'] ?? 0.5),
|
|
139
|
-
lastUsed: row?.['last_used'] ? String(row['last_used']) : null, // v5 新增:时间衰减
|
|
140
|
-
};
|
|
141
|
-
});
|
|
142
|
-
const selectedId = this.bandit.sample(arms);
|
|
143
|
-
const selected = candidates.find(c => c.pattern.id === selectedId);
|
|
144
|
-
if (selected?.pattern) {
|
|
145
|
-
pattern = selected.pattern;
|
|
146
|
-
logger.info(`[Forge:多臂老虎机] Thompson Sampling 选择:${pattern.id}(候选数=${candidates.length})`);
|
|
147
|
-
// 记录采用次数
|
|
148
|
-
try {
|
|
149
|
-
this.storage.incrementPatternAdoption(pattern.id);
|
|
150
|
-
}
|
|
151
|
-
catch { /* 静默 */ }
|
|
152
|
-
}
|
|
153
|
-
}
|
|
154
|
-
}
|
|
155
|
-
logger.info(`工作流路由命中:${pattern.id}(匹配方式=${result.method}, 置信度=${result.confidence.toFixed(2)})`);
|
|
156
|
-
const plan = this.executor.startPlan(pattern, sessionId, projectPath);
|
|
157
|
-
// 记录第一个阶段的开始时间
|
|
158
|
-
if (plan.currentPhaseId) {
|
|
159
|
-
this.tracer.recordPhaseStart(plan.id, plan.currentPhaseId, pattern.id, sessionId, projectPath);
|
|
160
|
-
}
|
|
161
|
-
return this.executor.execute(pattern, plan, userInput);
|
|
162
|
-
}
|
|
163
|
-
/** 从当前活跃计划生成 additionalContext 字符串(供 UserPromptHandler 注入) */
|
|
164
|
-
buildAdditionalContext(patternCtx, patternId, convention) {
|
|
165
|
-
// 在全局和所有缓存的项目 Pattern 中查找
|
|
166
|
-
const allPatterns = this.getAllKnownPatterns();
|
|
167
|
-
const pattern = allPatterns.find((p) => p.id === patternId) ?? null;
|
|
168
|
-
if (!pattern)
|
|
169
|
-
return null;
|
|
170
|
-
return this.executor.buildAdditionalContext(patternCtx, pattern, convention);
|
|
171
|
-
}
|
|
172
|
-
/**
|
|
173
|
-
* 处理 PostToolUse 事件:检测 completion_signal → 推进状态机 → 记录轨迹。
|
|
174
|
-
* 返回下一阶段 ID(null 表示未推进或 Pattern 已完成)。
|
|
175
|
-
*/
|
|
176
|
-
async onPostToolUse(event) {
|
|
177
|
-
const plan = this.executor.getActivePlan(event.project_path);
|
|
178
|
-
if (!plan)
|
|
179
|
-
return null;
|
|
180
|
-
const allPatterns = this.getAllKnownPatterns();
|
|
181
|
-
const pattern = allPatterns.find((p) => p.id === plan.patternId) ?? null;
|
|
182
|
-
if (!pattern)
|
|
183
|
-
return null;
|
|
184
|
-
const nextPhaseId = await this.tracer.onPostToolUse(event, pattern);
|
|
185
|
-
// 若推进到下一阶段,记录其开始时间
|
|
186
|
-
if (nextPhaseId) {
|
|
187
|
-
this.tracer.recordPhaseStart(plan.id, nextPhaseId, pattern.id, plan.sessionId, event.project_path);
|
|
188
|
-
}
|
|
189
|
-
return nextPhaseId;
|
|
190
|
-
}
|
|
191
|
-
/** 获取当前活跃计划(供外部判断是否有活跃 Pattern) */
|
|
192
|
-
getActivePlan(projectPath) {
|
|
193
|
-
return this.executor.getActivePlan(projectPath);
|
|
194
|
-
}
|
|
195
|
-
/** 返回所有已加载的全局 Pattern(只读) */
|
|
196
|
-
listPatterns() {
|
|
197
|
-
return this.globalPatterns;
|
|
198
|
-
}
|
|
199
|
-
/** 按 ID 查找 Pattern(全局 + 缓存的项目级) */
|
|
200
|
-
getPattern(id) {
|
|
201
|
-
return this.getAllKnownPatterns().find((p) => p.id === id) ?? null;
|
|
202
|
-
}
|
|
203
|
-
/** 获取 PatternLoader(供 PatternEvolver 调用 savePattern) */
|
|
204
|
-
getLoader() {
|
|
205
|
-
return this.loader;
|
|
206
|
-
}
|
|
207
|
-
/** 获取 ExecutionTracer(供外部更新满意度) */
|
|
208
|
-
getTracer() {
|
|
209
|
-
return this.tracer;
|
|
210
|
-
}
|
|
211
|
-
/** 合并所有已知 Pattern(全局 + 所有项目缓存) */
|
|
212
|
-
getAllKnownPatterns() {
|
|
213
|
-
const all = [...this.globalPatterns];
|
|
214
|
-
for (const patterns of this.projectPatternsCache.values()) {
|
|
215
|
-
all.push(...patterns);
|
|
216
|
-
}
|
|
217
|
-
return all;
|
|
218
|
-
}
|
|
219
|
-
/** 将项目 Pattern 持久化到 .claude-forge/patterns/ 目录 */
|
|
220
|
-
saveProjectPatterns(projectPath, patterns, conventions) {
|
|
221
|
-
const projectPatternsDir = path.join(projectPath, '.claude-forge', 'patterns');
|
|
222
|
-
if (!fs.existsSync(projectPatternsDir)) {
|
|
223
|
-
fs.mkdirSync(projectPatternsDir, { recursive: true });
|
|
224
|
-
}
|
|
225
|
-
const projectLoader = new PatternLoader(projectPatternsDir);
|
|
226
|
-
for (const pattern of patterns) {
|
|
227
|
-
pattern.filePath = path.join(projectPatternsDir, `${pattern.id}.yaml`);
|
|
228
|
-
projectLoader.savePattern(pattern);
|
|
229
|
-
}
|
|
230
|
-
// 写入指纹文件
|
|
231
|
-
const fingerprint = {
|
|
232
|
-
hash: this.computeConventionHash(conventions),
|
|
233
|
-
generatedAt: new Date().toISOString(),
|
|
234
|
-
conventionIds: conventions.map(c => `${c.id}@${c.version}`),
|
|
235
|
-
};
|
|
236
|
-
fs.writeFileSync(path.join(projectPatternsDir, '.fingerprint.json'), JSON.stringify(fingerprint, null, 2), 'utf-8');
|
|
237
|
-
}
|
|
238
|
-
/** 计算 Convention 列表的内容指纹(id+version+roles hash) */
|
|
239
|
-
computeConventionHash(conventions) {
|
|
240
|
-
const content = conventions
|
|
241
|
-
.map(c => `${c.id}:${c.version}:${JSON.stringify(c.roles ?? {})}`)
|
|
242
|
-
.sort()
|
|
243
|
-
.join('|');
|
|
244
|
-
return crypto.createHash('sha256').update(content).digest('hex').slice(0, 16);
|
|
245
|
-
}
|
|
246
|
-
}
|
|
247
|
-
//# sourceMappingURL=index.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/pattern-engine/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AACxD,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,EAAE,+BAA+B,EAAE,MAAM,mCAAmC,CAAC;AACpF,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AACxD,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAC5C,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAC3D,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,MAAM,MAAM,QAAQ,CAAC;AAc5B;;;;;;;;;;;;GAYG;AACH,MAAM,OAAO,aAAa;IAChB,MAAM,CAAgB;IACtB,MAAM,CAAgB;IACtB,QAAQ,CAAkB;IAC1B,MAAM,CAAkB;IACxB,OAAO,CAAgB;IACvB,MAAM,GAAG,IAAI,eAAe,EAAE,CAAC;IACvC,kCAAkC;IAC1B,cAAc,GAAc,EAAE,CAAC;IACvC,0CAA0C;IAClC,oBAAoB,GAAG,aAAa,CAAC,QAAQ,CAAoB,sBAAsB,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,QAAQ,EAAE,CAAC,CAAC;IAE7H,YAAY,GAAe,EAAE,OAAsB;QACjD,IAAI,CAAC,MAAM,GAAG,IAAI,aAAa,EAAE,CAAC;QAClC,IAAI,CAAC,MAAM,GAAG,IAAI,aAAa,CAAC,GAAG,CAAC,CAAC;QACrC,IAAI,CAAC,QAAQ,GAAG,IAAI,eAAe,EAAE,CAAC;QACtC,IAAI,CAAC,MAAM,GAAG,IAAI,eAAe,CAAC,OAAO,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;QAC1D,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;IACzB,CAAC;IAED,0BAA0B;IAC1B,UAAU;QACR,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;QAC5C,MAAM,CAAC,IAAI,CAAC,oBAAoB,IAAI,CAAC,cAAc,CAAC,MAAM,IAAI,CAAC,CAAC;IAClE,CAAC;IAED,6BAA6B;IAC7B,MAAM;QACJ,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;QAC5C,IAAI,CAAC,oBAAoB,CAAC,KAAK,EAAE,CAAC;QAClC,MAAM,CAAC,IAAI,CAAC,qBAAqB,IAAI,CAAC,cAAc,CAAC,MAAM,IAAI,CAAC,CAAC;IACnE,CAAC;IAED;;;;;;;OAOG;IACH,qBAAqB,CAAC,WAAmB,EAAE,WAA0B;QACnE,UAAU;QACV,MAAM,MAAM,GAAG,IAAI,CAAC,oBAAoB,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;QAC1D,IAAI,MAAM,EAAE,CAAC;YACX,OAAO,CAAC,GAAG,MAAM,EAAE,GAAG,IAAI,CAAC,cAAc,CAAC,CAAC;QAC7C,CAAC;QAED,MAAM,kBAAkB,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,eAAe,EAAE,UAAU,CAAC,CAAC;QAC/E,MAAM,eAAe,GAAG,IAAI,CAAC,IAAI,CAAC,kBAAkB,EAAE,mBAAmB,CAAC,CAAC;QAE3E,eAAe;QACf,IAAI,EAAE,CAAC,UAAU,CAAC,kBAAkB,CAAC,IAAI,EAAE,CAAC,UAAU,CAAC,eAAe,CAAC,EAAE,CAAC;YACxE,MAAM,WAAW,GAAG,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,qBAAqB,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;YAE/E,IAAI,CAAC;gBACH,MAAM,EAAE,GAA0B,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,YAAY,CAAC,eAAe,EAAE,OAAO,CAAC,CAAC,CAAC;gBAExF,iBAAiB;gBACjB,IAAI,EAAE,CAAC,IAAI,KAAK,WAAW,IAAI,CAAC,WAAW,EAAE,CAAC;oBAC5C,MAAM,aAAa,GAAG,IAAI,aAAa,CAAC,kBAAkB,CAAC,CAAC;oBAC5D,MAAM,eAAe,GAAG,aAAa,CAAC,OAAO,EAAE,CAAC;oBAChD,IAAI,eAAe,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;wBAC/B,IAAI,CAAC,oBAAoB,CAAC,GAAG,CAAC,WAAW,EAAE,eAAe,CAAC,CAAC;wBAC5D,MAAM,CAAC,IAAI,CAAC,cAAc,eAAe,CAAC,MAAM,WAAW,CAAC,CAAC;wBAC7D,OAAO,CAAC,GAAG,eAAe,EAAE,GAAG,IAAI,CAAC,cAAc,CAAC,CAAC;oBACtD,CAAC;gBACH,CAAC;qBAAM,CAAC;oBACN,MAAM,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC;gBACnC,CAAC;YACH,CAAC;YAAC,MAAM,CAAC;gBACP,cAAc;YAChB,CAAC;QACH,CAAC;QAED,yBAAyB;QACzB,MAAM,eAAe,GAAG,WAAW,CAAC,CAAC,CAAC,+BAA+B,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QAExF,IAAI,eAAe,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC/B,IAAI,CAAC,mBAAmB,CAAC,WAAW,EAAE,eAAe,EAAE,WAAW,IAAI,EAAE,CAAC,CAAC;YAC1E,MAAM,CAAC,IAAI,CAAC,eAAe,eAAe,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,gCAAgC,CAAC,CAAC;QACzG,CAAC;QAED,IAAI,CAAC,oBAAoB,CAAC,GAAG,CAAC,WAAW,EAAE,eAAe,CAAC,CAAC;QAC5D,OAAO,CAAC,GAAG,eAAe,EAAE,GAAG,IAAI,CAAC,cAAc,CAAC,CAAC;IACtD,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,aAAa,CACjB,SAAiB,EACjB,SAAiB,EACjB,WAAmB,EACnB,UAA8C,EAC9C,WAA0B;QAE1B,MAAM,QAAQ,GAAG,IAAI,CAAC,qBAAqB,CAAC,WAAW,EAAE,WAAW,CAAC,CAAC;QAEtE,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC1B,MAAM,CAAC,IAAI,CAAC,yBAAyB,CAAC,CAAC;YACvC,OAAO,IAAI,CAAC;QACd,CAAC;QAED,2CAA2C;QAC3C,IAAI,UAAU,KAAK,QAAQ,EAAE,CAAC;YAC5B,MAAM,gBAAgB,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CACzC,CAAC,CAAC,CAAC,OAAO,CAAC,UAAU;gBACrB,CAAC,CAAC,OAAO,CAAC,UAAU,CAAC,MAAM,KAAK,CAAC;gBACjC,CAAC,CAAC,OAAO,CAAC,UAAU,CAAC,QAAQ,CAAC,QAAQ,CAAC,CACxC,CAAC;YACF,IAAI,CAAC,gBAAgB,EAAE,CAAC;gBACtB,MAAM,CAAC,IAAI,CAAC,6BAA6B,CAAC,CAAC;gBAC3C,OAAO,IAAI,CAAC;YACd,CAAC;QACH,CAAC;QAED,yBAAyB;QACzB,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;QAElC,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC;QAC9D,IAAI,CAAC,MAAM,CAAC,OAAO;YAAE,OAAO,IAAI,CAAC;QAEjC,+CAA+C;QAC/C,IAAI,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC;QAC7B,IAAI,MAAM,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;YAChC,MAAM,UAAU,GAAG,IAAI,CAAC,MAAM,CAAC,kBAAkB,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC;YACzE,IAAI,UAAU,CAAC,MAAM,IAAI,CAAC,EAAE,CAAC;gBAC3B,MAAM,IAAI,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE;oBAC9B,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC,CAAC,OAAQ,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;oBAC3D,MAAM,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;oBACpB,OAAO;wBACL,EAAE,EAAE,CAAC,CAAC,OAAQ,CAAC,EAAE;wBACjB,aAAa,EAAE,MAAM,CAAC,GAAG,EAAE,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC;wBACnD,kBAAkB,EAAE,MAAM,CAAC,GAAG,EAAE,CAAC,qBAAqB,CAAC,IAAI,GAAG,CAAC;wBAC/D,QAAQ,EAAE,GAAG,EAAE,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,EAAG,aAAa;qBAC/E,CAAC;gBACJ,CAAC,CAAC,CAAC;gBACH,MAAM,UAAU,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;gBAC5C,MAAM,QAAQ,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAQ,CAAC,EAAE,KAAK,UAAU,CAAC,CAAC;gBACpE,IAAI,QAAQ,EAAE,OAAO,EAAE,CAAC;oBACtB,OAAO,GAAG,QAAQ,CAAC,OAAO,CAAC;oBAC3B,MAAM,CAAC,IAAI,CAAC,sCAAsC,OAAO,CAAC,EAAE,QAAQ,UAAU,CAAC,MAAM,GAAG,CAAC,CAAC;oBAC1F,SAAS;oBACT,IAAI,CAAC;wBAAC,IAAI,CAAC,OAAO,CAAC,wBAAwB,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;oBAAC,CAAC;oBAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,CAAC;gBAC/E,CAAC;YACH,CAAC;QACH,CAAC;QAED,MAAM,CAAC,IAAI,CAAC,WAAW,OAAO,CAAC,EAAE,SAAS,MAAM,CAAC,MAAM,SAAS,MAAM,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;QAEjG,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,OAAO,EAAE,SAAS,EAAE,WAAW,CAAC,CAAC;QAEtE,eAAe;QACf,IAAI,IAAI,CAAC,cAAc,EAAE,CAAC;YACxB,IAAI,CAAC,MAAM,CAAC,gBAAgB,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,cAAc,EAAE,OAAO,CAAC,EAAE,EAAE,SAAS,EAAE,WAAW,CAAC,CAAC;QACjG,CAAC;QAED,OAAO,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,OAAO,EAAE,IAAI,EAAE,SAAS,CAAC,CAAC;IACzD,CAAC;IAED,8DAA8D;IAC9D,sBAAsB,CAAC,UAA0B,EAAE,SAAiB,EAAE,UAA8B;QAClG,0BAA0B;QAC1B,MAAM,WAAW,GAAG,IAAI,CAAC,mBAAmB,EAAE,CAAC;QAC/C,MAAM,OAAO,GAAG,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,SAAS,CAAC,IAAI,IAAI,CAAC;QACpE,IAAI,CAAC,OAAO;YAAE,OAAO,IAAI,CAAC;QAC1B,OAAO,IAAI,CAAC,QAAQ,CAAC,sBAAsB,CAAC,UAAU,EAAE,OAAO,EAAE,UAAU,CAAC,CAAC;IAC/E,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,aAAa,CAAC,KAAiB;QACnC,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;QAC7D,IAAI,CAAC,IAAI;YAAE,OAAO,IAAI,CAAC;QAEvB,MAAM,WAAW,GAAG,IAAI,CAAC,mBAAmB,EAAE,CAAC;QAC/C,MAAM,OAAO,GAAG,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,IAAI,CAAC,SAAS,CAAC,IAAI,IAAI,CAAC;QACzE,IAAI,CAAC,OAAO;YAAE,OAAO,IAAI,CAAC;QAE1B,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;QAEpE,mBAAmB;QACnB,IAAI,WAAW,EAAE,CAAC;YAChB,IAAI,CAAC,MAAM,CAAC,gBAAgB,CAAC,IAAI,CAAC,EAAE,EAAE,WAAW,EAAE,OAAO,CAAC,EAAE,EAAE,IAAI,CAAC,SAAS,EAAE,KAAK,CAAC,YAAY,CAAC,CAAC;QACrG,CAAC;QAED,OAAO,WAAW,CAAC;IACrB,CAAC;IAED,mCAAmC;IACnC,aAAa,CAAC,WAAmB;QAC/B,OAAO,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,WAAW,CAAC,CAAC;IAClD,CAAC;IAED,6BAA6B;IAC7B,YAAY;QACV,OAAO,IAAI,CAAC,cAAc,CAAC;IAC7B,CAAC;IAED,mCAAmC;IACnC,UAAU,CAAC,EAAU;QACnB,OAAO,IAAI,CAAC,mBAAmB,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,IAAI,IAAI,CAAC;IACrE,CAAC;IAED,wDAAwD;IACxD,SAAS;QACP,OAAO,IAAI,CAAC,MAAM,CAAC;IACrB,CAAC;IAED,mCAAmC;IACnC,SAAS;QACP,OAAO,IAAI,CAAC,MAAM,CAAC;IACrB,CAAC;IAED,kCAAkC;IAC1B,mBAAmB;QACzB,MAAM,GAAG,GAAG,CAAC,GAAG,IAAI,CAAC,cAAc,CAAC,CAAC;QACrC,KAAK,MAAM,QAAQ,IAAI,IAAI,CAAC,oBAAoB,CAAC,MAAM,EAAE,EAAE,CAAC;YAC1D,GAAG,CAAC,IAAI,CAAC,GAAG,QAAQ,CAAC,CAAC;QACxB,CAAC;QACD,OAAO,GAAG,CAAC;IACb,CAAC;IAED,kDAAkD;IAC1C,mBAAmB,CAAC,WAAmB,EAAE,QAAmB,EAAE,WAAyB;QAC7F,MAAM,kBAAkB,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,eAAe,EAAE,UAAU,CAAC,CAAC;QAC/E,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,kBAAkB,CAAC,EAAE,CAAC;YACvC,EAAE,CAAC,SAAS,CAAC,kBAAkB,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QACxD,CAAC;QAED,MAAM,aAAa,GAAG,IAAI,aAAa,CAAC,kBAAkB,CAAC,CAAC;QAC5D,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;YAC/B,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,kBAAkB,EAAE,GAAG,OAAO,CAAC,EAAE,OAAO,CAAC,CAAC;YACvE,aAAa,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;QACrC,CAAC;QAED,SAAS;QACT,MAAM,WAAW,GAA0B;YACzC,IAAI,EAAE,IAAI,CAAC,qBAAqB,CAAC,WAAW,CAAC;YAC7C,WAAW,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;YACrC,aAAa,EAAE,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,OAAO,EAAE,CAAC;SAC5D,CAAC;QACF,EAAE,CAAC,aAAa,CACd,IAAI,CAAC,IAAI,CAAC,kBAAkB,EAAE,mBAAmB,CAAC,EAClD,IAAI,CAAC,SAAS,CAAC,WAAW,EAAE,IAAI,EAAE,CAAC,CAAC,EACpC,OAAO,CACR,CAAC;IACJ,CAAC;IAED,mDAAmD;IAC3C,qBAAqB,CAAC,WAAyB;QACrD,MAAM,OAAO,GAAG,WAAW;aACxB,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,OAAO,IAAI,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC,EAAE,CAAC;aACjE,IAAI,EAAE;aACN,IAAI,CAAC,GAAG,CAAC,CAAC;QACb,OAAO,MAAM,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IAChF,CAAC;CACF"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"pattern-evolver.d.ts","sourceRoot":"","sources":["../../src/pattern-engine/pattern-evolver.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AAC1D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,KAAK,EAAE,OAAO,EAAoB,MAAM,YAAY,CAAC;AAE5D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AAWzD,UAAU,YAAY;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,eAAe,EAAE,MAAM,CAAC;IACxB,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,EAAE,CAAC;CACnB;AAED;;;GAGG;AACH,qBAAa,cAAc;IACzB,OAAO,CAAC,GAAG,CAAa;IACxB,OAAO,CAAC,OAAO,CAAgB;IAC/B,OAAO,CAAC,MAAM,CAAgB;IAC9B,OAAO,CAAC,oBAAoB,CAAS;gBAEzB,GAAG,EAAE,UAAU,EAAE,OAAO,EAAE,aAAa,EAAE,oBAAoB,SAAK;IAO9E;;;;OAIG;IACG,MAAM,CAAC,aAAa,CAAC,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,UAAU,GAAG,IAAI,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC;IAiB7F;;;;OAIG;IACG,aAAa,CAAC,OAAO,EAAE,OAAO,EAAE,aAAa,SAAK,EAAE,UAAU,CAAC,EAAE,UAAU,GAAG,IAAI,GAAG,OAAO,CAAC,YAAY,GAAG,IAAI,CAAC;IAqCvH,OAAO,CAAC,cAAc;YAuBR,cAAc;IAkE5B,OAAO,CAAC,WAAW;IASnB,OAAO,CAAC,SAAS;CAuClB"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"pattern-evolver.js","sourceRoot":"","sources":["../../src/pattern-engine/pattern-evolver.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,IAAI,MAAM,SAAS,CAAC;AAC3B,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAI5C,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAmBpD;;;GAGG;AACH,MAAM,OAAO,cAAc;IACjB,GAAG,CAAa;IAChB,OAAO,CAAgB;IACvB,MAAM,CAAgB;IACtB,oBAAoB,CAAS;IAErC,YAAY,GAAe,EAAE,OAAsB,EAAE,oBAAoB,GAAG,EAAE;QAC5E,IAAI,CAAC,GAAG,GAAG,GAAG,CAAC;QACf,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;QACvB,IAAI,CAAC,MAAM,GAAG,IAAI,aAAa,EAAE,CAAC;QAClC,IAAI,CAAC,oBAAoB,GAAG,oBAAoB,CAAC;IACnD,CAAC;IAED;;;;OAIG;IACH,KAAK,CAAC,MAAM,CAAC,aAAsB,EAAE,UAA8B;QACjE,MAAM,SAAS,GAAG,aAAa,IAAI,IAAI,CAAC,oBAAoB,CAAC;QAC7D,MAAM,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;QACvC,MAAM,OAAO,GAAmB,EAAE,CAAC;QAEnC,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;YAC/B,IAAI,CAAC;gBACH,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,OAAO,EAAE,SAAS,EAAE,UAAU,CAAC,CAAC;gBACxE,IAAI,MAAM;oBAAE,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YACnC,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,MAAM,CAAC,IAAI,CAAC,gBAAgB,OAAO,CAAC,EAAE,SAAS,GAAG,EAAE,CAAC,CAAC;YACxD,CAAC;QACH,CAAC;QAED,OAAO,OAAO,CAAC;IACjB,CAAC;IAED;;;;OAIG;IACH,KAAK,CAAC,aAAa,CAAC,OAAgB,EAAE,aAAa,GAAG,EAAE,EAAE,UAA8B;QACtF,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,sBAAsB,CAAC,OAAO,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;QAEvE,IAAI,UAAU,CAAC,MAAM,GAAG,aAAa,EAAE,CAAC;YACtC,MAAM,CAAC,IAAI,CAAC,gBAAgB,OAAO,CAAC,EAAE,WAAW,UAAU,CAAC,MAAM,IAAI,aAAa,MAAM,CAAC,CAAC;YAC3F,OAAO,IAAI,CAAC;QACd,CAAC;QAED,MAAM,OAAO,GAAG,IAAI,CAAC,cAAc,CAAC,UAAU,CAAC,CAAC;QAChD,MAAM,aAAa,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,GAAG,CAAC,CAAC,KAAK,GAAG,GAAG,IAAI,CAAC,CAAC,eAAe,GAAG,CAAC,CAAC,CAAC;QAElG,IAAI,aAAa,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC/B,MAAM,CAAC,IAAI,CAAC,gBAAgB,OAAO,CAAC,EAAE,aAAa,CAAC,CAAC;YACrD,OAAO,IAAI,CAAC;QACd,CAAC;QAED,MAAM,CAAC,IAAI,CAAC,gBAAgB,OAAO,CAAC,EAAE,OAAO,aAAa,CAAC,MAAM,iBAAiB,CAAC,CAAC;QAEpF,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,OAAO,EAAE,OAAO,EAAE,aAAa,EAAE,UAAU,CAAC,CAAC;QACzF,IAAI,CAAC,SAAS;YAAE,OAAO,IAAI,CAAC;QAE5B,MAAM,eAAe,GAAG,OAAO,CAAC,OAAO,CAAC;QACxC,MAAM,UAAU,GAAG,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;QACrD,SAAS,CAAC,OAAO,GAAG,UAAU,CAAC;QAE/B,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;QAEnC,MAAM,OAAO,GAAG,aAAa,CAAC,GAAG,CAC/B,CAAC,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,CAAC,OAAO,QAAQ,CAAC,CAAC,CAAC,CAAC,SAAS,GAAG,CAAC,CAAC,KAAK,CAAC,GAAG,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAClF,CAAC;QAEF,MAAM,CAAC,IAAI,CAAC,gBAAgB,OAAO,CAAC,EAAE,UAAU,eAAe,OAAO,UAAU,EAAE,CAAC,CAAC;QACpF,OAAO,EAAE,SAAS,EAAE,OAAO,CAAC,EAAE,EAAE,eAAe,EAAE,UAAU,EAAE,OAAO,EAAE,CAAC;IACzE,CAAC;IAED,yEAAyE;IAEjE,cAAc,CAAC,UAA8B;QACnD,MAAM,OAAO,GAAG,IAAI,GAAG,EAA8B,CAAC;QACtD,KAAK,MAAM,CAAC,IAAI,UAAU,EAAE,CAAC;YAC3B,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;YAC3C,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YACb,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;QAChC,CAAC;QAED,MAAM,OAAO,GAAmB,EAAE,CAAC;QACnC,KAAK,MAAM,CAAC,OAAO,EAAE,OAAO,CAAC,IAAI,OAAO,EAAE,CAAC;YACzC,MAAM,SAAS,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,WAAW,CAAC,CAAC,MAAM,CAAC;YACzE,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,QAAQ,CAAC,CAAC,MAAM,CAAC;YACnE,MAAM,SAAS,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,IAAI,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,WAAqB,CAAC,CAAC;YACnG,MAAM,aAAa,GAAG,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;YACzG,MAAM,aAAa,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,iBAAiB,IAAI,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,iBAA2B,CAAC,CAAC;YACnH,MAAM,eAAe,GAAG,aAAa,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,GAAG,aAAa,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;YAEvH,OAAO,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,CAAC,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,aAAa,EAAE,eAAe,EAAE,CAAC,CAAC;QACtG,CAAC;QAED,OAAO,OAAO,CAAC;IACjB,CAAC;IAEO,KAAK,CAAC,cAAc,CAC1B,OAAgB,EAChB,UAA0B,EAC1B,aAA6B,EAC7B,UAA8B;QAE9B,MAAM,WAAW,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CACvC,KAAK,CAAC,CAAC,OAAO,SAAS,CAAC,CAAC,CAAC,CAAC,SAAS,GAAG,CAAC,CAAC,KAAK,CAAC,GAAG,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,MAAM,GAAG;YACpF,QAAQ,CAAC,CAAC,CAAC,aAAa,GAAG,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CACnF,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAEb,MAAM,WAAW,GAAG,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAEnE,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC;YAC5B,EAAE,EAAE,OAAO,CAAC,EAAE;YACd,IAAI,EAAE,OAAO,CAAC,IAAI;YAClB,OAAO,EAAE,OAAO,CAAC,OAAO;YACxB,WAAW,EAAE,OAAO,CAAC,WAAW;YAChC,OAAO,EAAE,OAAO,CAAC,OAAO;YACxB,MAAM,EAAE,OAAO,CAAC,MAAM;YACtB,SAAS,EAAE,OAAO,CAAC,SAAS;SAC7B,CAAC,CAAC;QAEH,MAAM,SAAS,GAAG,UAAU,EAAE,iBAAiB,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,MAAM,CAAC,IAAI,EAAE,CAAC;QAC5F,MAAM,iBAAiB,GAAG,SAAS,CAAC,MAAM,GAAG,CAAC;YAC5C,CAAC,CAAC,sBAAsB,UAAW,CAAC,IAAI,UAAU;gBAChD,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,CAAC,QAAQ,KAAK,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,IAAI;YACvE,CAAC,CAAC,EAAE,CAAC;QAEP,MAAM,MAAM,GAAG;;;EAGjB,WAAW;;;EAGX,WAAW;;;;EAIX,WAAW;;EAEX,iBAAiB;;;;;2BAKQ,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,8DAA8D,CAAC,CAAC,CAAC,EAAE;;;8BAGvF,CAAC;QAE3B,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,MAAM,EAAE,iBAAiB,EAAE,EAAE,OAAO,EAAE,CAAC,EAAE,SAAS,EAAE,MAAM,EAAE,CAAC,CAAC;YACvG,MAAM,SAAS,GAAG,QAAQ,CAAC,KAAK,CAAC,wBAAwB,CAAC,IAAI,QAAQ,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC;YAC5F,IAAI,CAAC,SAAS;gBAAE,OAAO,IAAI,CAAC;YAE5B,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAY,CAAC;YAClD,IAAI,CAAC,MAAM,EAAE,EAAE,IAAI,CAAC,MAAM,EAAE,MAAM;gBAAE,OAAO,IAAI,CAAC;YAEhD,OAAO,MAAM,CAAC;QAChB,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,MAAM,CAAC,IAAI,CAAC,wBAAwB,GAAG,EAAE,CAAC,CAAC;YAC3C,OAAO,IAAI,CAAC;QACd,CAAC;IACH,CAAC;IAEO,WAAW,CAAC,OAAe;QACjC,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QACjC,IAAI,KAAK,CAAC,MAAM,IAAI,CAAC,EAAE,CAAC;YACtB,MAAM,KAAK,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC;YAC9C,OAAO,GAAG,KAAK,CAAC,CAAC,CAAC,IAAI,KAAK,EAAE,CAAC;QAChC,CAAC;QACD,OAAO,GAAG,OAAO,IAAI,CAAC;IACxB,CAAC;IAEO,SAAS,CAAC,QAAiB,EAAE,SAAkB;QACrD,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE,CAAC;YACvB,MAAM,CAAC,IAAI,CAAC,gBAAgB,QAAQ,CAAC,EAAE,aAAa,CAAC,CAAC;YACtD,OAAO;QACT,CAAC;QAED,kBAAkB;QAClB,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,EAAE,CAAC,YAAY,CAAC,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;YAC5D,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC;gBACxB,EAAE,EAAE,SAAS,CAAC,EAAE;gBAChB,IAAI,EAAE,SAAS,CAAC,IAAI;gBACpB,OAAO,EAAE,SAAS,CAAC,OAAO;gBAC1B,UAAU,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;gBACpC,WAAW,EAAE,SAAS,CAAC,WAAW;gBAClC,MAAM,EAAE,QAAQ,CAAC,MAAM;gBACvB,OAAO,EAAE,SAAS,CAAC,OAAO;gBAC1B,MAAM,EAAE,SAAS,CAAC,MAAM;gBACxB,SAAS,EAAE,SAAS,CAAC,SAAS;aAC/B,EAAE,EAAE,SAAS,EAAE,GAAG,EAAE,CAAC,CAAC;YAEvB,MAAM,SAAS,GAAG,OAAO,IAAI,CAAC,GAAG,EAAE,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC;YAChF,IAAI,CAAC,OAAO,CAAC,sBAAsB,CAAC;gBAClC,EAAE,EAAE,SAAS;gBACb,UAAU,EAAE,QAAQ,CAAC,EAAE;gBACvB,WAAW,EAAE,QAAQ,CAAC,OAAO;gBAC7B,WAAW,EAAE,SAAS,CAAC,OAAO;gBAC9B,QAAQ,EAAE,OAAO;gBACjB,QAAQ,EAAE,OAAO;gBACjB,UAAU,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;aACrC,CAAC,CAAC;YAEH,OAAO;YACP,EAAE,CAAC,aAAa,CAAC,QAAQ,CAAC,QAAQ,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;YACtD,MAAM,CAAC,IAAI,CAAC,gBAAgB,QAAQ,CAAC,EAAE,QAAQ,QAAQ,CAAC,OAAO,MAAM,SAAS,CAAC,OAAO,SAAS,SAAS,GAAG,CAAC,CAAC;QAC/G,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,MAAM,CAAC,IAAI,CAAC,gBAAgB,QAAQ,CAAC,EAAE,SAAS,GAAG,EAAE,CAAC,CAAC;QACzD,CAAC;IACH,CAAC;CACF"}
|
|
@@ -1,43 +0,0 @@
|
|
|
1
|
-
import type { Pattern, ExecutionPlan, PatternContext } from './types.js';
|
|
2
|
-
import type { Convention } from '../convention/types.js';
|
|
3
|
-
/**
|
|
4
|
-
* PatternExecutor:将匹配到的 Pattern 展开为 ExecutionPlan,
|
|
5
|
-
* 渲染当前阶段的 prompt_template,生成注入给 Claude 的 additionalContext。
|
|
6
|
-
*
|
|
7
|
-
* 职责边界:
|
|
8
|
-
* - 创建和管理内存中的 ExecutionPlan(持久化由 ExecutionTracer 负责)
|
|
9
|
-
* - 模板渲染
|
|
10
|
-
* - 生成 PatternContext 供 UserPromptHandler 注入
|
|
11
|
-
*
|
|
12
|
-
* 不负责:AI 调用、SQLite 写入、状态机推进
|
|
13
|
-
*/
|
|
14
|
-
export declare class PatternExecutor {
|
|
15
|
-
/** 按 projectPath 存储当前活跃的执行计划(每个项目同时只有一个) */
|
|
16
|
-
private activePlans;
|
|
17
|
-
/**
|
|
18
|
-
* 为指定项目启动一个新的执行计划。
|
|
19
|
-
* 若该项目已有活跃计划,先清除(不支持并发 Pattern 执行)。
|
|
20
|
-
*/
|
|
21
|
-
startPlan(pattern: Pattern, sessionId: string, projectPath: string): ExecutionPlan;
|
|
22
|
-
/**
|
|
23
|
-
* 生成当前活跃阶段的 PatternContext(含渲染后的 prompt)。
|
|
24
|
-
* 返回 null 表示无活跃计划或当前阶段已执行完毕。
|
|
25
|
-
*/
|
|
26
|
-
execute(pattern: Pattern, plan: ExecutionPlan, requirement: string): PatternContext | null;
|
|
27
|
-
/**
|
|
28
|
-
* 将指定阶段标记为已完成,并推进到下一个可执行阶段。
|
|
29
|
-
* 供 ExecutionTracer 在检测到 completion_signal 时调用。
|
|
30
|
-
*
|
|
31
|
-
* @returns 下一个阶段 ID,null 表示整个 Pattern 已执行完毕
|
|
32
|
-
*/
|
|
33
|
-
advancePhase(projectPath: string, completedPhaseId: string, phaseOutput: string, pattern: Pattern): string | null;
|
|
34
|
-
/** 获取项目当前活跃计划(不存在则返回 null) */
|
|
35
|
-
getActivePlan(projectPath: string): ExecutionPlan | null;
|
|
36
|
-
/** 清除项目的活跃计划(Pattern 完成或被中断时调用) */
|
|
37
|
-
clearPlan(projectPath: string): void;
|
|
38
|
-
/** 构建注入给 Claude 的 additionalContext 字符串,可选传入 Convention 以注入角色约束 */
|
|
39
|
-
buildAdditionalContext(patternCtx: PatternContext, pattern: Pattern, convention?: Convention | null): string;
|
|
40
|
-
/** 检测 PostToolUse 事件是否触发了当前阶段的 completion_signal */
|
|
41
|
-
checkCompletionSignal(projectPath: string, toolName: string, toolInput: Record<string, unknown>, pattern: Pattern): boolean;
|
|
42
|
-
}
|
|
43
|
-
//# sourceMappingURL=pattern-executor.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"pattern-executor.d.ts","sourceRoot":"","sources":["../../src/pattern-engine/pattern-executor.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,OAAO,EAAgB,aAAa,EAAE,cAAc,EAAoB,MAAM,YAAY,CAAC;AACzG,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AAqEzD;;;;;;;;;;GAUG;AACH,qBAAa,eAAe;IAC1B,4CAA4C;IAC5C,OAAO,CAAC,WAAW,CAAoC;IAEvD;;;OAGG;IACH,SAAS,CAAC,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,aAAa;IAkClF;;;OAGG;IACH,OAAO,CACL,OAAO,EAAE,OAAO,EAChB,IAAI,EAAE,aAAa,EACnB,WAAW,EAAE,MAAM,GAClB,cAAc,GAAG,IAAI;IAwBxB;;;;;OAKG;IACH,YAAY,CACV,WAAW,EAAE,MAAM,EACnB,gBAAgB,EAAE,MAAM,EACxB,WAAW,EAAE,MAAM,EACnB,OAAO,EAAE,OAAO,GACf,MAAM,GAAG,IAAI;IA2BhB,8BAA8B;IAC9B,aAAa,CAAC,WAAW,EAAE,MAAM,GAAG,aAAa,GAAG,IAAI;IAIxD,mCAAmC;IACnC,SAAS,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI;IAKpC,mEAAmE;IACnE,sBAAsB,CAAC,UAAU,EAAE,cAAc,EAAE,OAAO,EAAE,OAAO,EAAE,UAAU,CAAC,EAAE,UAAU,GAAG,IAAI,GAAG,MAAM;IAkC5G,oDAAoD;IACpD,qBAAqB,CACnB,WAAW,EAAE,MAAM,EACnB,QAAQ,EAAE,MAAM,EAChB,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAClC,OAAO,EAAE,OAAO,GACf,OAAO;CAqBX"}
|
|
@@ -1,228 +0,0 @@
|
|
|
1
|
-
import { randomUUID } from 'crypto';
|
|
2
|
-
import { logger } from '../utils/logger.js';
|
|
3
|
-
/**
|
|
4
|
-
* 将 Mustache 风格的 {{key}} 占位符替换为 context 中的对应值。
|
|
5
|
-
* 未找到的 key 保留原始占位符。
|
|
6
|
-
*/
|
|
7
|
-
function renderTemplate(template, context) {
|
|
8
|
-
return template.replace(/\{\{(\w+)\}\}/g, (_, key) => {
|
|
9
|
-
return context[key] ?? `{{${key}}}`;
|
|
10
|
-
});
|
|
11
|
-
}
|
|
12
|
-
/**
|
|
13
|
-
* 按 depends_on 拓扑排序,返回无依赖冲突的执行顺序。
|
|
14
|
-
* 找到的第一个可执行阶段(所有依赖均已 completed)视为 currentPhaseId。
|
|
15
|
-
*/
|
|
16
|
-
function findNextPhase(plan, pattern) {
|
|
17
|
-
for (const phase of pattern.phases) {
|
|
18
|
-
if (plan.phases[phase.id] !== 'pending')
|
|
19
|
-
continue;
|
|
20
|
-
const allDepsCompleted = phase.depends_on.every((dep) => plan.phases[dep] === 'completed');
|
|
21
|
-
if (allDepsCompleted)
|
|
22
|
-
return phase.id;
|
|
23
|
-
}
|
|
24
|
-
return null;
|
|
25
|
-
}
|
|
26
|
-
/**
|
|
27
|
-
* 检测 Pattern 的 depends_on 是否存在循环依赖(DAG 验证)。
|
|
28
|
-
* 使用 DFS + visited/inStack 双色标记法。
|
|
29
|
-
* @returns 检测到的环路径(如 "A → B → A"),无环返回 null
|
|
30
|
-
*/
|
|
31
|
-
function detectCyclicDependency(pattern) {
|
|
32
|
-
const visited = new Set();
|
|
33
|
-
const inStack = new Set();
|
|
34
|
-
const phaseMap = new Map(pattern.phases.map(p => [p.id, p]));
|
|
35
|
-
function dfs(id, path) {
|
|
36
|
-
if (inStack.has(id)) {
|
|
37
|
-
const cycleStart = path.indexOf(id);
|
|
38
|
-
return [...path.slice(cycleStart), id].join(' → ');
|
|
39
|
-
}
|
|
40
|
-
if (visited.has(id))
|
|
41
|
-
return null;
|
|
42
|
-
visited.add(id);
|
|
43
|
-
inStack.add(id);
|
|
44
|
-
path.push(id);
|
|
45
|
-
const phase = phaseMap.get(id);
|
|
46
|
-
if (phase) {
|
|
47
|
-
for (const dep of phase.depends_on) {
|
|
48
|
-
const cycle = dfs(dep, path);
|
|
49
|
-
if (cycle)
|
|
50
|
-
return cycle;
|
|
51
|
-
}
|
|
52
|
-
}
|
|
53
|
-
path.pop();
|
|
54
|
-
inStack.delete(id);
|
|
55
|
-
return null;
|
|
56
|
-
}
|
|
57
|
-
for (const phase of pattern.phases) {
|
|
58
|
-
const cycle = dfs(phase.id, []);
|
|
59
|
-
if (cycle)
|
|
60
|
-
return cycle;
|
|
61
|
-
}
|
|
62
|
-
return null;
|
|
63
|
-
}
|
|
64
|
-
/**
|
|
65
|
-
* PatternExecutor:将匹配到的 Pattern 展开为 ExecutionPlan,
|
|
66
|
-
* 渲染当前阶段的 prompt_template,生成注入给 Claude 的 additionalContext。
|
|
67
|
-
*
|
|
68
|
-
* 职责边界:
|
|
69
|
-
* - 创建和管理内存中的 ExecutionPlan(持久化由 ExecutionTracer 负责)
|
|
70
|
-
* - 模板渲染
|
|
71
|
-
* - 生成 PatternContext 供 UserPromptHandler 注入
|
|
72
|
-
*
|
|
73
|
-
* 不负责:AI 调用、SQLite 写入、状态机推进
|
|
74
|
-
*/
|
|
75
|
-
export class PatternExecutor {
|
|
76
|
-
/** 按 projectPath 存储当前活跃的执行计划(每个项目同时只有一个) */
|
|
77
|
-
activePlans = new Map();
|
|
78
|
-
/**
|
|
79
|
-
* 为指定项目启动一个新的执行计划。
|
|
80
|
-
* 若该项目已有活跃计划,先清除(不支持并发 Pattern 执行)。
|
|
81
|
-
*/
|
|
82
|
-
startPlan(pattern, sessionId, projectPath) {
|
|
83
|
-
// DAG 验证:检测循环依赖
|
|
84
|
-
const cycle = detectCyclicDependency(pattern);
|
|
85
|
-
if (cycle) {
|
|
86
|
-
throw new Error(`Pattern "${pattern.id}" 存在循环依赖:${cycle}`);
|
|
87
|
-
}
|
|
88
|
-
const phases = {};
|
|
89
|
-
for (const phase of pattern.phases) {
|
|
90
|
-
phases[phase.id] = 'pending';
|
|
91
|
-
}
|
|
92
|
-
const plan = {
|
|
93
|
-
id: randomUUID(),
|
|
94
|
-
patternId: pattern.id,
|
|
95
|
-
sessionId,
|
|
96
|
-
projectPath,
|
|
97
|
-
phases,
|
|
98
|
-
currentPhaseId: null,
|
|
99
|
-
context: { requirement: '' }, // 将在 execute() 中填充
|
|
100
|
-
startedAt: new Date().toISOString(),
|
|
101
|
-
};
|
|
102
|
-
// 找到第一个可以执行的阶段
|
|
103
|
-
plan.currentPhaseId = findNextPhase(plan, pattern);
|
|
104
|
-
if (plan.currentPhaseId) {
|
|
105
|
-
plan.phases[plan.currentPhaseId] = 'running';
|
|
106
|
-
}
|
|
107
|
-
this.activePlans.set(projectPath, plan);
|
|
108
|
-
logger.info(`[Forge:执行器] 新计划 id=${plan.id} | pattern=${pattern.id} | 当前阶段=${plan.currentPhaseId ?? '无'}`);
|
|
109
|
-
return plan;
|
|
110
|
-
}
|
|
111
|
-
/**
|
|
112
|
-
* 生成当前活跃阶段的 PatternContext(含渲染后的 prompt)。
|
|
113
|
-
* 返回 null 表示无活跃计划或当前阶段已执行完毕。
|
|
114
|
-
*/
|
|
115
|
-
execute(pattern, plan, requirement) {
|
|
116
|
-
if (!plan.currentPhaseId) {
|
|
117
|
-
logger.info(`[Forge:执行器] 计划 ${plan.id} 无可执行阶段`);
|
|
118
|
-
return null;
|
|
119
|
-
}
|
|
120
|
-
const phase = pattern.phases.find((p) => p.id === plan.currentPhaseId);
|
|
121
|
-
if (!phase) {
|
|
122
|
-
logger.warn(`[Forge:执行器] 找不到阶段 ${plan.currentPhaseId}`);
|
|
123
|
-
return null;
|
|
124
|
-
}
|
|
125
|
-
// 将 requirement 注入上下文后渲染模板
|
|
126
|
-
const context = { ...plan.context, requirement };
|
|
127
|
-
const phasePrompt = renderTemplate(phase.prompt_template, context);
|
|
128
|
-
return {
|
|
129
|
-
phasePrompt,
|
|
130
|
-
planId: plan.id,
|
|
131
|
-
currentPhaseId: plan.currentPhaseId,
|
|
132
|
-
patternName: pattern.name,
|
|
133
|
-
};
|
|
134
|
-
}
|
|
135
|
-
/**
|
|
136
|
-
* 将指定阶段标记为已完成,并推进到下一个可执行阶段。
|
|
137
|
-
* 供 ExecutionTracer 在检测到 completion_signal 时调用。
|
|
138
|
-
*
|
|
139
|
-
* @returns 下一个阶段 ID,null 表示整个 Pattern 已执行完毕
|
|
140
|
-
*/
|
|
141
|
-
advancePhase(projectPath, completedPhaseId, phaseOutput, pattern) {
|
|
142
|
-
const plan = this.activePlans.get(projectPath);
|
|
143
|
-
if (!plan)
|
|
144
|
-
return null;
|
|
145
|
-
// 标记阶段完成
|
|
146
|
-
plan.phases[completedPhaseId] = 'completed';
|
|
147
|
-
// 如果该阶段有 output_key,写入执行上下文供后续阶段模板使用
|
|
148
|
-
const phase = pattern.phases.find((p) => p.id === completedPhaseId);
|
|
149
|
-
if (phase?.output_key) {
|
|
150
|
-
plan.context[phase.output_key] = phaseOutput;
|
|
151
|
-
}
|
|
152
|
-
// 找下一个可执行阶段
|
|
153
|
-
const nextPhaseId = findNextPhase(plan, pattern);
|
|
154
|
-
plan.currentPhaseId = nextPhaseId;
|
|
155
|
-
if (nextPhaseId) {
|
|
156
|
-
plan.phases[nextPhaseId] = 'running';
|
|
157
|
-
logger.info(`[Forge:执行器] 阶段推进:${completedPhaseId} → ${nextPhaseId}`);
|
|
158
|
-
}
|
|
159
|
-
else {
|
|
160
|
-
plan.completedAt = new Date().toISOString();
|
|
161
|
-
logger.info(`[Forge:执行器] Pattern ${plan.patternId} 全部阶段完成`);
|
|
162
|
-
}
|
|
163
|
-
return nextPhaseId;
|
|
164
|
-
}
|
|
165
|
-
/** 获取项目当前活跃计划(不存在则返回 null) */
|
|
166
|
-
getActivePlan(projectPath) {
|
|
167
|
-
return this.activePlans.get(projectPath) ?? null;
|
|
168
|
-
}
|
|
169
|
-
/** 清除项目的活跃计划(Pattern 完成或被中断时调用) */
|
|
170
|
-
clearPlan(projectPath) {
|
|
171
|
-
this.activePlans.delete(projectPath);
|
|
172
|
-
logger.info(`[Forge:执行器] 清除项目 ${projectPath} 的执行计划`);
|
|
173
|
-
}
|
|
174
|
-
/** 构建注入给 Claude 的 additionalContext 字符串,可选传入 Convention 以注入角色约束 */
|
|
175
|
-
buildAdditionalContext(patternCtx, pattern, convention) {
|
|
176
|
-
const currentPhase = pattern.phases.find((p) => p.id === patternCtx.currentPhaseId);
|
|
177
|
-
if (!currentPhase)
|
|
178
|
-
return patternCtx.phasePrompt;
|
|
179
|
-
const phaseIndex = pattern.phases.indexOf(currentPhase) + 1;
|
|
180
|
-
const totalPhases = pattern.phases.length;
|
|
181
|
-
const toolsHint = currentPhase.tools_allowed.length > 0
|
|
182
|
-
? `\n可用工具:${currentPhase.tools_allowed.join('、')}`
|
|
183
|
-
: '';
|
|
184
|
-
// 从 Convention 查找当前角色的约束定义
|
|
185
|
-
let roleConstraint = '';
|
|
186
|
-
if (convention?.roles) {
|
|
187
|
-
const roleDef = convention.roles[currentPhase.agent_role];
|
|
188
|
-
if (roleDef) {
|
|
189
|
-
roleConstraint = [
|
|
190
|
-
'',
|
|
191
|
-
`## 角色规范约束(来自 ${convention.name} v${convention.version})`,
|
|
192
|
-
`职责:${roleDef.responsibilities.trim()}`,
|
|
193
|
-
`约束:${roleDef.constraints.trim()}`,
|
|
194
|
-
].join('\n');
|
|
195
|
-
}
|
|
196
|
-
}
|
|
197
|
-
return [
|
|
198
|
-
`【Pattern 编排】${patternCtx.patternName} — 第 ${phaseIndex}/${totalPhases} 阶段:${currentPhase.name}`,
|
|
199
|
-
`角色:${currentPhase.agent_role}${toolsHint}`,
|
|
200
|
-
'',
|
|
201
|
-
patternCtx.phasePrompt,
|
|
202
|
-
roleConstraint,
|
|
203
|
-
].join('\n');
|
|
204
|
-
}
|
|
205
|
-
/** 检测 PostToolUse 事件是否触发了当前阶段的 completion_signal */
|
|
206
|
-
checkCompletionSignal(projectPath, toolName, toolInput, pattern) {
|
|
207
|
-
const plan = this.activePlans.get(projectPath);
|
|
208
|
-
if (!plan?.currentPhaseId)
|
|
209
|
-
return false;
|
|
210
|
-
const phase = pattern.phases.find((p) => p.id === plan.currentPhaseId);
|
|
211
|
-
if (!phase?.completion_signal)
|
|
212
|
-
return false;
|
|
213
|
-
const signal = phase.completion_signal;
|
|
214
|
-
if (signal.tool_used && toolName !== signal.tool_used)
|
|
215
|
-
return false;
|
|
216
|
-
if (signal.file_pattern) {
|
|
217
|
-
const filePath = String(toolInput['file_path'] ?? toolInput['path'] ?? '');
|
|
218
|
-
if (!filePath)
|
|
219
|
-
return false;
|
|
220
|
-
// 简单 glob 匹配(仅支持 * 通配符)
|
|
221
|
-
const regex = new RegExp('^' + signal.file_pattern.replace(/\./g, '\\.').replace(/\*/g, '.*') + '$');
|
|
222
|
-
if (!regex.test(filePath.split('/').pop() ?? filePath))
|
|
223
|
-
return false;
|
|
224
|
-
}
|
|
225
|
-
return true;
|
|
226
|
-
}
|
|
227
|
-
}
|
|
228
|
-
//# sourceMappingURL=pattern-executor.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"pattern-executor.js","sourceRoot":"","sources":["../../src/pattern-engine/pattern-executor.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
import type { Pattern } from './types.js';
|
|
2
|
-
export declare class PatternLoader {
|
|
3
|
-
private patternsDir;
|
|
4
|
-
constructor(patternsDir?: string);
|
|
5
|
-
/** 加载目录下所有 .yaml/.yml Pattern 文件 */
|
|
6
|
-
loadAll(): Pattern[];
|
|
7
|
-
/** 加载并验证单个 Pattern 文件 */
|
|
8
|
-
loadFile(filePath: string): Pattern | null;
|
|
9
|
-
/** 将 Pattern 写回 YAML 文件(供 PatternEvolver 调用) */
|
|
10
|
-
savePattern(pattern: Pattern): void;
|
|
11
|
-
/** 返回 patterns 目录路径 */
|
|
12
|
-
getPatternsDir(): string;
|
|
13
|
-
}
|
|
14
|
-
//# sourceMappingURL=pattern-loader.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"pattern-loader.d.ts","sourceRoot":"","sources":["../../src/pattern-engine/pattern-loader.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAsD1C,qBAAa,aAAa;IACxB,OAAO,CAAC,WAAW,CAAS;gBAEhB,WAAW,GAAE,MAAqB;IAI9C,oCAAoC;IACpC,OAAO,IAAI,OAAO,EAAE;IAuBpB,yBAAyB;IACzB,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,GAAG,IAAI;IAuB1C,gDAAgD;IAChD,WAAW,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI;IAanC,uBAAuB;IACvB,cAAc,IAAI,MAAM;CAGzB"}
|