@hongmaple0820/scale-engine 0.10.1 → 0.11.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/dist/artifact/types.d.ts +1 -1
- package/dist/artifact/types.js.map +1 -1
- package/dist/capabilities/BrowserQACapability.d.ts +151 -0
- package/dist/capabilities/BrowserQACapability.js +344 -0
- package/dist/capabilities/BrowserQACapability.js.map +1 -0
- package/dist/cli/evolutionCommands.d.ts +112 -0
- package/dist/cli/evolutionCommands.js +246 -0
- package/dist/cli/evolutionCommands.js.map +1 -0
- package/dist/cli/phaseCommands.js +74 -40
- package/dist/cli/phaseCommands.js.map +1 -1
- package/dist/guardrails/OWASPDetector.d.ts +58 -0
- package/dist/guardrails/OWASPDetector.js +508 -0
- package/dist/guardrails/OWASPDetector.js.map +1 -0
- package/dist/workflow/evolution/LessonExtractor.d.ts +90 -0
- package/dist/workflow/evolution/LessonExtractor.js +317 -0
- package/dist/workflow/evolution/LessonExtractor.js.map +1 -0
- package/dist/workflow/evolution/SelfImproveEngine.d.ts +156 -0
- package/dist/workflow/evolution/SelfImproveEngine.js +361 -0
- package/dist/workflow/evolution/SelfImproveEngine.js.map +1 -0
- package/dist/workflow/qa/E2ETestRunner.d.ts +102 -0
- package/dist/workflow/qa/E2ETestRunner.js +227 -0
- package/dist/workflow/qa/E2ETestRunner.js.map +1 -0
- package/package.json +2 -2
|
@@ -0,0 +1,317 @@
|
|
|
1
|
+
// SCALE Engine — Lesson Extractor
|
|
2
|
+
// 从会话 Defect 事件提取可复用的 Lessons
|
|
3
|
+
// 设计参考:docs/03-CORE-MODULES.md §3.6 + L6 Evolution
|
|
4
|
+
/**
|
|
5
|
+
* Lesson Extractor
|
|
6
|
+
*
|
|
7
|
+
* 从会话历史中提取可复用的 Lessons:
|
|
8
|
+
* 1. 查询 defect.opened 事件
|
|
9
|
+
* 2. 分析修复过程和根因
|
|
10
|
+
* 3. 提取 pattern-solution 对
|
|
11
|
+
* 4. 聚合高频模式
|
|
12
|
+
* 5. 生成 Lesson Candidates
|
|
13
|
+
*/
|
|
14
|
+
export class LessonExtractor {
|
|
15
|
+
constructor(eventBus, minOccurrences = 2) {
|
|
16
|
+
this.minOccurrences = 2; // 成为 Lesson 的最小出现次数
|
|
17
|
+
this.eventBus = eventBus;
|
|
18
|
+
this.minOccurrences = minOccurrences;
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* 从会话提取 Lessons
|
|
22
|
+
*/
|
|
23
|
+
async extractFromSession(sessionId) {
|
|
24
|
+
this.eventBus.emit('lesson.extract.start', { sessionId });
|
|
25
|
+
// 1. 查询 defect 相关事件
|
|
26
|
+
const defectEvents = await this.eventBus.query({
|
|
27
|
+
sessionId,
|
|
28
|
+
types: ['defect.opened', 'defect.resolved'],
|
|
29
|
+
limit: 50
|
|
30
|
+
});
|
|
31
|
+
if (defectEvents.length === 0) {
|
|
32
|
+
this.eventBus.emit('lesson.extract.empty', { sessionId });
|
|
33
|
+
return [];
|
|
34
|
+
}
|
|
35
|
+
// 2. 分析每个 Defect
|
|
36
|
+
const analyses = [];
|
|
37
|
+
for (const defectEvent of defectEvents.filter(e => e.type === 'defect.opened')) {
|
|
38
|
+
const analysis = await this.analyzeDefect(sessionId, defectEvent);
|
|
39
|
+
if (analysis) {
|
|
40
|
+
analyses.push(analysis);
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
// 3. 提取 Patterns
|
|
44
|
+
const patterns = this.identifyPatterns(analyses);
|
|
45
|
+
// 4. 聚合为 Lesson Candidates
|
|
46
|
+
const candidates = this.aggregateToLessons(patterns, analyses);
|
|
47
|
+
this.eventBus.emit('lesson.extract.end', {
|
|
48
|
+
sessionId,
|
|
49
|
+
defectsAnalyzed: analyses.length,
|
|
50
|
+
candidatesGenerated: candidates.length
|
|
51
|
+
});
|
|
52
|
+
return candidates;
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* 分析单个 Defect
|
|
56
|
+
*/
|
|
57
|
+
async analyzeDefect(sessionId, defectEvent) {
|
|
58
|
+
const defect = defectEvent.payload;
|
|
59
|
+
if (!defect?.id)
|
|
60
|
+
return null;
|
|
61
|
+
// 查询该 defect 的修复过程
|
|
62
|
+
const fixEvents = await this.eventBus.query({
|
|
63
|
+
sessionId,
|
|
64
|
+
types: ['tool.completed', 'tool.failed'],
|
|
65
|
+
filter: (e) => {
|
|
66
|
+
const p = e.payload;
|
|
67
|
+
// 查找与缺陷修复相关的工具调用
|
|
68
|
+
return ['Edit', 'Write', 'Bash'].includes(p.tool);
|
|
69
|
+
},
|
|
70
|
+
limit: 20
|
|
71
|
+
});
|
|
72
|
+
// 计算修复时间和尝试次数
|
|
73
|
+
const openedAt = defect.createdAt ?? Date.now();
|
|
74
|
+
const resolvedEvents = await this.eventBus.query({
|
|
75
|
+
sessionId,
|
|
76
|
+
types: ['defect.resolved'],
|
|
77
|
+
filter: (e) => {
|
|
78
|
+
const p = e.payload;
|
|
79
|
+
return p.defectId === defect.id;
|
|
80
|
+
},
|
|
81
|
+
limit: 1
|
|
82
|
+
});
|
|
83
|
+
const resolvedAt = resolvedEvents[0]?.timestamp ?? Date.now();
|
|
84
|
+
const timeToFix = resolvedAt - openedAt;
|
|
85
|
+
// 分析根因
|
|
86
|
+
const rootCause = this.inferRootCause(defect, fixEvents);
|
|
87
|
+
const resolutionSteps = this.extractResolutionSteps(fixEvents);
|
|
88
|
+
// 识别模式
|
|
89
|
+
const patternsIdentified = this.extractPatternsFromFix(rootCause, resolutionSteps);
|
|
90
|
+
return {
|
|
91
|
+
defectId: defect.id,
|
|
92
|
+
rootCause,
|
|
93
|
+
resolutionSteps,
|
|
94
|
+
timeToFix,
|
|
95
|
+
attempts: fixEvents.filter(e => e.type === 'tool.failed').length + 1,
|
|
96
|
+
patternsIdentified
|
|
97
|
+
};
|
|
98
|
+
}
|
|
99
|
+
/**
|
|
100
|
+
* 推断根因
|
|
101
|
+
*/
|
|
102
|
+
inferRootCause(defect, fixEvents) {
|
|
103
|
+
// 从缺陷 payload 和修复历史推断根因
|
|
104
|
+
const payload = defect.payload;
|
|
105
|
+
const symptom = payload?.symptom ?? '';
|
|
106
|
+
const title = defect.title ?? '';
|
|
107
|
+
// 常见根因模式
|
|
108
|
+
if (symptom.includes('undefined') || symptom.includes('null')) {
|
|
109
|
+
return 'Missing null check or initialization';
|
|
110
|
+
}
|
|
111
|
+
if (symptom.includes('type') || symptom.includes('TypeScript')) {
|
|
112
|
+
return 'Type mismatch or incorrect type definition';
|
|
113
|
+
}
|
|
114
|
+
if (symptom.includes('async') || symptom.includes('await')) {
|
|
115
|
+
return 'Async/await handling issue';
|
|
116
|
+
}
|
|
117
|
+
if (symptom.includes('import') || symptom.includes('module')) {
|
|
118
|
+
return 'Missing or incorrect import';
|
|
119
|
+
}
|
|
120
|
+
if (symptom.includes('test') && fixEvents.some(e => {
|
|
121
|
+
const p = e.payload;
|
|
122
|
+
return p.args?.command?.includes('test');
|
|
123
|
+
})) {
|
|
124
|
+
return 'Test assertion failure or test setup issue';
|
|
125
|
+
}
|
|
126
|
+
// 默认:从标题推断
|
|
127
|
+
return title ?? 'Unknown root cause';
|
|
128
|
+
}
|
|
129
|
+
/**
|
|
130
|
+
* 提取修复步骤
|
|
131
|
+
*/
|
|
132
|
+
extractResolutionSteps(fixEvents) {
|
|
133
|
+
const steps = [];
|
|
134
|
+
for (const event of fixEvents) {
|
|
135
|
+
const p = event.payload;
|
|
136
|
+
if (p.tool === 'Edit' && p.args?.file_path) {
|
|
137
|
+
steps.push(`Edit ${p.args.file_path}`);
|
|
138
|
+
}
|
|
139
|
+
if (p.tool === 'Write' && p.args?.file_path) {
|
|
140
|
+
steps.push(`Write ${p.args.file_path}`);
|
|
141
|
+
}
|
|
142
|
+
if (p.tool === 'Bash' && p.args?.command) {
|
|
143
|
+
steps.push(`Run: ${p.args.command}`);
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
return steps;
|
|
147
|
+
}
|
|
148
|
+
/**
|
|
149
|
+
* 从修复过程提取模式
|
|
150
|
+
*/
|
|
151
|
+
extractPatternsFromFix(rootCause, steps) {
|
|
152
|
+
const patterns = [];
|
|
153
|
+
// 根因到模式的映射
|
|
154
|
+
const rootCausePatterns = {
|
|
155
|
+
'Missing null check or initialization': 'Always check for null/undefined before accessing properties',
|
|
156
|
+
'Type mismatch or incorrect type definition': 'Use strict type checking and avoid type assertions',
|
|
157
|
+
'Async/await handling issue': 'Always await async operations and handle promise errors',
|
|
158
|
+
'Missing or incorrect import': 'Verify imports before using; check module exports',
|
|
159
|
+
'Test assertion failure or test setup issue': 'Ensure test data and mocks are properly initialized'
|
|
160
|
+
};
|
|
161
|
+
if (rootCausePatterns[rootCause]) {
|
|
162
|
+
patterns.push(rootCausePatterns[rootCause]);
|
|
163
|
+
}
|
|
164
|
+
// 从修复步骤提取模式
|
|
165
|
+
for (const step of steps) {
|
|
166
|
+
if (step.includes('Edit') && patterns.length === 0) {
|
|
167
|
+
patterns.push(`Fix involved: ${step}`);
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
return patterns;
|
|
171
|
+
}
|
|
172
|
+
/**
|
|
173
|
+
* 识别重复模式
|
|
174
|
+
*/
|
|
175
|
+
identifyPatterns(analyses) {
|
|
176
|
+
const patternMap = new Map();
|
|
177
|
+
for (const analysis of analyses) {
|
|
178
|
+
for (const pattern of analysis.patternsIdentified) {
|
|
179
|
+
const existing = patternMap.get(pattern) ?? [];
|
|
180
|
+
existing.push(analysis);
|
|
181
|
+
patternMap.set(pattern, existing);
|
|
182
|
+
}
|
|
183
|
+
}
|
|
184
|
+
return patternMap;
|
|
185
|
+
}
|
|
186
|
+
/**
|
|
187
|
+
* 聚合为 Lesson Candidates
|
|
188
|
+
*/
|
|
189
|
+
aggregateToLessons(patternMap, analyses) {
|
|
190
|
+
const candidates = [];
|
|
191
|
+
for (const [pattern, relatedAnalyses] of patternMap.entries()) {
|
|
192
|
+
// 只有高频模式才成为 Lesson
|
|
193
|
+
if (relatedAnalyses.length < this.minOccurrences)
|
|
194
|
+
continue;
|
|
195
|
+
// 生成解决方案
|
|
196
|
+
const solutions = relatedAnalyses.map(a => a.resolutionSteps.join(' → '));
|
|
197
|
+
const commonSolution = this.findCommonSolution(solutions);
|
|
198
|
+
// 计算优先级
|
|
199
|
+
const avgTimeToFix = relatedAnalyses.reduce((sum, a) => sum + a.timeToFix, 0) / relatedAnalyses.length;
|
|
200
|
+
const totalAttempts = relatedAnalyses.reduce((sum, a) => sum + a.attempts, 0);
|
|
201
|
+
const priority = avgTimeToFix > 300000 || totalAttempts > 5 ? 'HIGH'
|
|
202
|
+
: avgTimeToFix > 60000 || totalAttempts > 2 ? 'MEDIUM'
|
|
203
|
+
: 'LOW';
|
|
204
|
+
candidates.push({
|
|
205
|
+
pattern,
|
|
206
|
+
solution: commonSolution,
|
|
207
|
+
context: this.generateContext(pattern, relatedAnalyses),
|
|
208
|
+
defectIds: relatedAnalyses.map(a => a.defectId),
|
|
209
|
+
frequency: relatedAnalyses.length,
|
|
210
|
+
verified: false, // 需要后续验证
|
|
211
|
+
priority
|
|
212
|
+
});
|
|
213
|
+
}
|
|
214
|
+
// 按频率和优先级排序
|
|
215
|
+
return candidates.sort((a, b) => {
|
|
216
|
+
if (a.priority !== b.priority) {
|
|
217
|
+
return a.priority === 'HIGH' ? -1 : 1;
|
|
218
|
+
}
|
|
219
|
+
return b.frequency - a.frequency;
|
|
220
|
+
});
|
|
221
|
+
}
|
|
222
|
+
/**
|
|
223
|
+
* 找到共同解决方案
|
|
224
|
+
*/
|
|
225
|
+
findCommonSolution(solutions) {
|
|
226
|
+
if (solutions.length === 0)
|
|
227
|
+
return 'No solution found';
|
|
228
|
+
if (solutions.length === 1)
|
|
229
|
+
return solutions[0];
|
|
230
|
+
// 找出最短的共同路径
|
|
231
|
+
const steps = solutions[0].split(' → ');
|
|
232
|
+
const commonSteps = [];
|
|
233
|
+
for (const step of steps) {
|
|
234
|
+
if (solutions.every(s => s.includes(step))) {
|
|
235
|
+
commonSteps.push(step);
|
|
236
|
+
}
|
|
237
|
+
}
|
|
238
|
+
return commonSteps.length > 0 ? commonSteps.join(' → ') : solutions[0];
|
|
239
|
+
}
|
|
240
|
+
/**
|
|
241
|
+
* 生成上下文描述
|
|
242
|
+
*/
|
|
243
|
+
generateContext(pattern, analyses) {
|
|
244
|
+
const avgFixTime = Math.round(analyses.reduce((s, a) => s + a.timeToFix, 0) / analyses.length / 1000);
|
|
245
|
+
return `This pattern occurred ${analyses.length} times with average fix time of ${avgFixTime}s. ` +
|
|
246
|
+
`Apply when: ${pattern}`;
|
|
247
|
+
}
|
|
248
|
+
/**
|
|
249
|
+
* 转换为 Lesson Artifact
|
|
250
|
+
*/
|
|
251
|
+
toLessonArtifact(candidate) {
|
|
252
|
+
const lessonPayload = {
|
|
253
|
+
type: 'lesson',
|
|
254
|
+
};
|
|
255
|
+
return {
|
|
256
|
+
id: `lesson-${Date.now()}-${candidate.defectIds[0]}`,
|
|
257
|
+
type: 'Lesson',
|
|
258
|
+
version: 1,
|
|
259
|
+
title: candidate.pattern,
|
|
260
|
+
status: candidate.verified ? 'VERIFIED' : 'DRAFT',
|
|
261
|
+
statusHistory: [],
|
|
262
|
+
parents: [],
|
|
263
|
+
children: [],
|
|
264
|
+
contentRef: '',
|
|
265
|
+
payload: lessonPayload,
|
|
266
|
+
gates: [],
|
|
267
|
+
createdBy: { kind: 'system', component: 'LessonExtractor' },
|
|
268
|
+
createdAt: Date.now(),
|
|
269
|
+
updatedAt: Date.now(),
|
|
270
|
+
tags: [`priority:${candidate.priority}`, `frequency:${candidate.frequency}`],
|
|
271
|
+
labels: {},
|
|
272
|
+
};
|
|
273
|
+
}
|
|
274
|
+
/**
|
|
275
|
+
* 批量转换
|
|
276
|
+
*/
|
|
277
|
+
toLessonArtifacts(candidates) {
|
|
278
|
+
return candidates.map(c => this.toLessonArtifact(c));
|
|
279
|
+
}
|
|
280
|
+
}
|
|
281
|
+
/**
|
|
282
|
+
* 从多个会话聚合 Lessons
|
|
283
|
+
*/
|
|
284
|
+
export async function aggregateLessonsFromSessions(eventBus, sessionIds) {
|
|
285
|
+
const extractor = new LessonExtractor(eventBus);
|
|
286
|
+
const allCandidates = [];
|
|
287
|
+
for (const sessionId of sessionIds) {
|
|
288
|
+
const candidates = await extractor.extractFromSession(sessionId);
|
|
289
|
+
allCandidates.push(...candidates);
|
|
290
|
+
}
|
|
291
|
+
// 聚合相同模式的候选
|
|
292
|
+
const patternCounts = new Map();
|
|
293
|
+
for (const candidate of allCandidates) {
|
|
294
|
+
const existing = patternCounts.get(candidate.pattern) ?? [];
|
|
295
|
+
existing.push(candidate);
|
|
296
|
+
patternCounts.set(candidate.pattern, existing);
|
|
297
|
+
}
|
|
298
|
+
// 合并高频模式
|
|
299
|
+
const merged = [];
|
|
300
|
+
for (const [pattern, candidates] of patternCounts.entries()) {
|
|
301
|
+
const totalFrequency = candidates.reduce((s, c) => s + c.frequency, 0);
|
|
302
|
+
const allDefectIds = candidates.flatMap(c => c.defectIds);
|
|
303
|
+
merged.push({
|
|
304
|
+
pattern,
|
|
305
|
+
solution: candidates[0].solution,
|
|
306
|
+
context: candidates[0].context,
|
|
307
|
+
defectIds: allDefectIds,
|
|
308
|
+
frequency: totalFrequency,
|
|
309
|
+
verified: candidates.some(c => c.verified),
|
|
310
|
+
priority: candidates.some(c => c.priority === 'HIGH') ? 'HIGH'
|
|
311
|
+
: candidates.some(c => c.priority === 'MEDIUM') ? 'MEDIUM'
|
|
312
|
+
: 'LOW'
|
|
313
|
+
});
|
|
314
|
+
}
|
|
315
|
+
return merged.sort((a, b) => b.frequency - a.frequency);
|
|
316
|
+
}
|
|
317
|
+
//# sourceMappingURL=LessonExtractor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"LessonExtractor.js","sourceRoot":"","sources":["../../../src/workflow/evolution/LessonExtractor.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,156 @@
|
|
|
1
|
+
import type { IEventBus } from '../../core/eventBus.js';
|
|
2
|
+
import { type LessonCandidate } from './LessonExtractor.js';
|
|
3
|
+
/**
|
|
4
|
+
* Hook 配置格式(用于 settings.json)
|
|
5
|
+
*/
|
|
6
|
+
interface HookConfig {
|
|
7
|
+
matcher: string;
|
|
8
|
+
command: string;
|
|
9
|
+
description?: string;
|
|
10
|
+
timeout?: number;
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* 自改进闭环状态
|
|
14
|
+
*/
|
|
15
|
+
export interface SelfImproveState {
|
|
16
|
+
lessonsExtracted: number;
|
|
17
|
+
lessonsVerified: number;
|
|
18
|
+
rulesCreated: number;
|
|
19
|
+
rulesActive: number;
|
|
20
|
+
hooksGenerated: number;
|
|
21
|
+
lastRunAt: number;
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Rule 候选
|
|
25
|
+
*/
|
|
26
|
+
export interface RuleCandidate {
|
|
27
|
+
id: string;
|
|
28
|
+
name: string;
|
|
29
|
+
pattern: RegExp | string;
|
|
30
|
+
severity: 'block' | 'warn' | 'info';
|
|
31
|
+
description: string;
|
|
32
|
+
remediation: string;
|
|
33
|
+
lessonId: string;
|
|
34
|
+
hitCount: number;
|
|
35
|
+
lastHitAt: number;
|
|
36
|
+
active: boolean;
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Hook 生成结果
|
|
40
|
+
*/
|
|
41
|
+
export interface HookGenerationResult {
|
|
42
|
+
hookType: 'PreToolUse' | 'PostToolUse' | 'Stop';
|
|
43
|
+
matcher: string;
|
|
44
|
+
command: string;
|
|
45
|
+
description: string;
|
|
46
|
+
ruleId: string;
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* 自改进阈值配置
|
|
50
|
+
*/
|
|
51
|
+
export interface SelfImproveThresholds {
|
|
52
|
+
lessonVerificationThreshold: number;
|
|
53
|
+
ruleActivationThreshold: number;
|
|
54
|
+
hookGenerationThreshold: number;
|
|
55
|
+
maxHooks: number;
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* Self-Improve Engine
|
|
59
|
+
*
|
|
60
|
+
* 实现自改进闭环:
|
|
61
|
+
* 1. Defect → Lesson: 从缺陷提取可复用教训
|
|
62
|
+
* 2. Lesson → Rule: 经过验证的教训转化为规则
|
|
63
|
+
* 3. Rule → Hook: 高频规则转化为自动化 Hook
|
|
64
|
+
*
|
|
65
|
+
* 闭环流程:
|
|
66
|
+
* - Lesson 需要 verified 3 次才能晋升为 Rule Candidate
|
|
67
|
+
* - Rule 需要 hit 10 换才能晋升为 Hook Candidate
|
|
68
|
+
* - Hook 生成后自动注册到 Gateway
|
|
69
|
+
*/
|
|
70
|
+
export declare class SelfImproveEngine {
|
|
71
|
+
private eventBus;
|
|
72
|
+
private lessonExtractor;
|
|
73
|
+
private thresholds;
|
|
74
|
+
private state;
|
|
75
|
+
private lessonCandidates;
|
|
76
|
+
private ruleCandidates;
|
|
77
|
+
private generatedHooks;
|
|
78
|
+
constructor(eventBus: IEventBus, thresholds?: Partial<SelfImproveThresholds>);
|
|
79
|
+
/**
|
|
80
|
+
* 运行自改进闭环
|
|
81
|
+
*/
|
|
82
|
+
run(sessionId: string): Promise<SelfImproveState>;
|
|
83
|
+
/**
|
|
84
|
+
* Phase 1: 从会话提取 Lessons
|
|
85
|
+
*/
|
|
86
|
+
private extractLessons;
|
|
87
|
+
/**
|
|
88
|
+
* Phase 2: 验证并晋升 Lessons 为 Rules
|
|
89
|
+
*/
|
|
90
|
+
private verifyAndPromoteLessons;
|
|
91
|
+
/**
|
|
92
|
+
* 创建 Rule Candidate
|
|
93
|
+
*/
|
|
94
|
+
private createRuleCandidate;
|
|
95
|
+
/**
|
|
96
|
+
* 将模式字符串转换为 RegExp
|
|
97
|
+
*/
|
|
98
|
+
private patternToRegExp;
|
|
99
|
+
/**
|
|
100
|
+
* Phase 3: 激活 Rules 并跟踪触发次数
|
|
101
|
+
*/
|
|
102
|
+
private activateRules;
|
|
103
|
+
/**
|
|
104
|
+
* Phase 4: 从高频 Rules 生成 Hooks
|
|
105
|
+
*/
|
|
106
|
+
private generateHooksFromRules;
|
|
107
|
+
/**
|
|
108
|
+
* 从 Rule 生成 Hook 配置
|
|
109
|
+
*/
|
|
110
|
+
private generateHookFromRule;
|
|
111
|
+
/**
|
|
112
|
+
* 生成 Hook 检查命令
|
|
113
|
+
*/
|
|
114
|
+
private generateHookCommand;
|
|
115
|
+
/**
|
|
116
|
+
* 获取生成的 Hooks 配置(用于注册到 settings.json)
|
|
117
|
+
*/
|
|
118
|
+
getGeneratedHooksConfig(): Record<string, HookConfig[]>;
|
|
119
|
+
/**
|
|
120
|
+
* 记录 Rule 触发(用于跟踪)
|
|
121
|
+
*/
|
|
122
|
+
recordRuleHit(ruleId: string): void;
|
|
123
|
+
/**
|
|
124
|
+
* 获取当前状态
|
|
125
|
+
*/
|
|
126
|
+
getState(): SelfImproveState;
|
|
127
|
+
/**
|
|
128
|
+
* 获取所有 Lesson Candidates
|
|
129
|
+
*/
|
|
130
|
+
getLessonCandidates(): LessonCandidate[];
|
|
131
|
+
/**
|
|
132
|
+
* 获取所有 Rule Candidates
|
|
133
|
+
*/
|
|
134
|
+
getRuleCandidates(): RuleCandidate[];
|
|
135
|
+
/**
|
|
136
|
+
* 获取所有生成的 Hooks
|
|
137
|
+
*/
|
|
138
|
+
getGeneratedHooks(): HookGenerationResult[];
|
|
139
|
+
/**
|
|
140
|
+
* 生成自改进报告
|
|
141
|
+
*/
|
|
142
|
+
generateReport(): string;
|
|
143
|
+
/**
|
|
144
|
+
* 重置引擎状态
|
|
145
|
+
*/
|
|
146
|
+
reset(): void;
|
|
147
|
+
}
|
|
148
|
+
/**
|
|
149
|
+
* 手动验证 Lesson(用于外部确认)
|
|
150
|
+
*/
|
|
151
|
+
export declare function verifyLesson(engine: SelfImproveEngine, pattern: string): Promise<void>;
|
|
152
|
+
/**
|
|
153
|
+
* 从多个会话运行自改进
|
|
154
|
+
*/
|
|
155
|
+
export declare function runSelfImproveFromSessions(eventBus: IEventBus, sessionIds: string[]): Promise<SelfImproveState[]>;
|
|
156
|
+
export {};
|