@hongmaple0820/scale-engine 0.10.0 → 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.
Files changed (40) hide show
  1. package/README.en.md +127 -196
  2. package/README.md +168 -1114
  3. package/dist/api/cli.js +2 -2
  4. package/dist/api/cli.js.map +1 -1
  5. package/dist/artifact/types.d.ts +1 -1
  6. package/dist/artifact/types.js.map +1 -1
  7. package/dist/capabilities/BrowserQACapability.d.ts +151 -0
  8. package/dist/capabilities/BrowserQACapability.js +344 -0
  9. package/dist/capabilities/BrowserQACapability.js.map +1 -0
  10. package/dist/cli/evolutionCommands.d.ts +112 -0
  11. package/dist/cli/evolutionCommands.js +246 -0
  12. package/dist/cli/evolutionCommands.js.map +1 -0
  13. package/dist/cli/phaseCommands.d.ts +9 -0
  14. package/dist/cli/phaseCommands.js +169 -48
  15. package/dist/cli/phaseCommands.js.map +1 -1
  16. package/dist/guardrails/OWASPDetector.d.ts +58 -0
  17. package/dist/guardrails/OWASPDetector.js +508 -0
  18. package/dist/guardrails/OWASPDetector.js.map +1 -0
  19. package/dist/workflow/ReviewAnalyzer.d.ts +5 -0
  20. package/dist/workflow/ReviewAnalyzer.js +194 -10
  21. package/dist/workflow/ReviewAnalyzer.js.map +1 -1
  22. package/dist/workflow/VerificationCommands.d.ts +4 -0
  23. package/dist/workflow/VerificationCommands.js +2 -0
  24. package/dist/workflow/VerificationCommands.js.map +1 -1
  25. package/dist/workflow/WorkflowEngine.js +1 -1
  26. package/dist/workflow/WorkflowEngine.js.map +1 -1
  27. package/dist/workflow/evolution/LessonExtractor.d.ts +90 -0
  28. package/dist/workflow/evolution/LessonExtractor.js +317 -0
  29. package/dist/workflow/evolution/LessonExtractor.js.map +1 -0
  30. package/dist/workflow/evolution/SelfImproveEngine.d.ts +156 -0
  31. package/dist/workflow/evolution/SelfImproveEngine.js +361 -0
  32. package/dist/workflow/evolution/SelfImproveEngine.js.map +1 -0
  33. package/dist/workflow/gates/GateSystem.d.ts +28 -2
  34. package/dist/workflow/gates/GateSystem.js +291 -82
  35. package/dist/workflow/gates/GateSystem.js.map +1 -1
  36. package/dist/workflow/qa/E2ETestRunner.d.ts +102 -0
  37. package/dist/workflow/qa/E2ETestRunner.js +227 -0
  38. package/dist/workflow/qa/E2ETestRunner.js.map +1 -0
  39. package/dist/workflow/types.d.ts +7 -0
  40. package/package.json +3 -3
@@ -0,0 +1,102 @@
1
+ import type { IEventBus } from '../../core/eventBus.js';
2
+ import type { VerificationResult } from '../types.js';
3
+ import { BrowserQACapability, type UserFlow, type QAResult } from '../../capabilities/BrowserQACapability.js';
4
+ /**
5
+ * E2E 测试配置
6
+ */
7
+ export interface E2ETestConfig {
8
+ baseUrl: string;
9
+ flows: UserFlow[];
10
+ timeoutMs: number;
11
+ retryCount: number;
12
+ screenshotDir: string;
13
+ accessibilityCheck: boolean;
14
+ performanceCheck: boolean;
15
+ }
16
+ /**
17
+ * E2E 测试结果
18
+ */
19
+ export interface E2ETestResult {
20
+ passed: boolean;
21
+ totalFlows: number;
22
+ passedFlows: number;
23
+ failedFlows: number;
24
+ results: QAResult[];
25
+ accessibilityIssues: number;
26
+ performanceMetrics?: {
27
+ avgLoadTimeMs: number;
28
+ maxLoadTimeMs: number;
29
+ };
30
+ report: string;
31
+ }
32
+ /**
33
+ * E2E Test Runner
34
+ *
35
+ * 运行 E2E 测试并生成验证结果:
36
+ * 1. 执行用户流程测试
37
+ * 2. 检查 Console 错误
38
+ * 3. Accessibility 检查(可选)
39
+ * 4. 性能检查(可选)
40
+ * 5. 生成 Honest Delivery 报告
41
+ */
42
+ export declare class E2ETestRunner {
43
+ private eventBus;
44
+ private browserQA;
45
+ private config;
46
+ constructor(eventBus: IEventBus, config: E2ETestConfig);
47
+ /**
48
+ * 运行完整 E2E 测试
49
+ */
50
+ run(): Promise<E2ETestResult>;
51
+ /**
52
+ * 转换为 VerificationResult(用于 WorkflowEngine G8 门控)
53
+ */
54
+ toVerificationResult(result: E2ETestResult): VerificationResult[];
55
+ /**
56
+ * 运行并生成 VerificationResult(用于 G8 门控)
57
+ */
58
+ runForVerification(): Promise<VerificationResult[]>;
59
+ /**
60
+ * 添加自定义流程
61
+ */
62
+ addFlow(flow: UserFlow): void;
63
+ /**
64
+ * 获取 MCP 工具调用序列(用于 Claude Code 实际执行)
65
+ */
66
+ getMCPExecutionPlan(): {
67
+ flow: UserFlow;
68
+ calls: ReturnType<BrowserQACapability['getMCPCallSequence']>;
69
+ }[];
70
+ /**
71
+ * 快速验证(仅检查关键流程)
72
+ */
73
+ quickVerify(): Promise<boolean>;
74
+ private sleep;
75
+ }
76
+ /**
77
+ * E2E 测试配置预设
78
+ */
79
+ export declare const E2EPresets: {
80
+ /**
81
+ * 快速测试(仅关键流程,无重试)
82
+ */
83
+ quick: (baseUrl: string, flows: UserFlow[]) => E2ETestConfig;
84
+ /**
85
+ * 标准测试(完整流程,2次重试)
86
+ */
87
+ standard: (baseUrl: string, flows: UserFlow[]) => E2ETestConfig;
88
+ /**
89
+ * 完整测试(所有检查,3次重试)
90
+ */
91
+ full: (baseUrl: string, flows: UserFlow[]) => E2ETestConfig;
92
+ };
93
+ /**
94
+ * G8 浏览器门控检查
95
+ *
96
+ * 用于 WorkflowEngine 的第 8 个门控(浏览器 QA)
97
+ */
98
+ export declare function browserGateCheck(eventBus: IEventBus, baseUrl: string, flows: UserFlow[]): Promise<{
99
+ passed: boolean;
100
+ verifications: VerificationResult[];
101
+ report: string;
102
+ }>;
@@ -0,0 +1,227 @@
1
+ // SCALE Engine — E2E Test Runner
2
+ // 集成 BrowserQACapability 到 WorkflowEngine 的 G8 门控
3
+ // 设计参考:docs/03-CORE-MODULES.md §3.5 + WorkflowEngine
4
+ import { BrowserQACapability } from '../../capabilities/BrowserQACapability.js';
5
+ /**
6
+ * E2E Test Runner
7
+ *
8
+ * 运行 E2E 测试并生成验证结果:
9
+ * 1. 执行用户流程测试
10
+ * 2. 检查 Console 错误
11
+ * 3. Accessibility 检查(可选)
12
+ * 4. 性能检查(可选)
13
+ * 5. 生成 Honest Delivery 报告
14
+ */
15
+ export class E2ETestRunner {
16
+ constructor(eventBus, config) {
17
+ this.eventBus = eventBus;
18
+ this.config = config;
19
+ this.browserQA = new BrowserQACapability(eventBus, config.baseUrl, config.screenshotDir);
20
+ }
21
+ /**
22
+ * 运行完整 E2E 测试
23
+ */
24
+ async run() {
25
+ this.eventBus.emit('e2e.start', {
26
+ baseUrl: this.config.baseUrl,
27
+ flowsCount: this.config.flows.length
28
+ });
29
+ const startTime = Date.now();
30
+ let results = [];
31
+ let accessibilityIssues = 0;
32
+ let performanceMetrics;
33
+ // 执行流程测试(带重试)
34
+ for (const flow of this.config.flows) {
35
+ let flowResult = null;
36
+ let attempts = 0;
37
+ while (attempts < this.config.retryCount && (flowResult === null || !flowResult.passed)) {
38
+ attempts++;
39
+ this.eventBus.emit('e2e.flow.attempt', {
40
+ flowName: flow.name,
41
+ attempt: attempts
42
+ });
43
+ flowResult = await this.browserQA.runE2ETest(this.config.baseUrl, flow);
44
+ if (!flowResult.passed && attempts < this.config.retryCount) {
45
+ this.eventBus.emit('e2e.flow.retry', {
46
+ flowName: flow.name,
47
+ reason: flowResult.error ?? 'Console errors detected'
48
+ });
49
+ // 等待后重试
50
+ await this.sleep(1000);
51
+ }
52
+ }
53
+ if (flowResult) {
54
+ results.push(flowResult);
55
+ }
56
+ }
57
+ // Accessibility 检查
58
+ if (this.config.accessibilityCheck) {
59
+ this.eventBus.emit('e2e.accessibility.check', {});
60
+ const issues = await this.browserQA.runAccessibilityCheck(this.config.baseUrl);
61
+ accessibilityIssues = issues.length;
62
+ }
63
+ // 性能检查
64
+ if (this.config.performanceCheck) {
65
+ this.eventBus.emit('e2e.performance.check', {});
66
+ const perfResult = await this.browserQA.runPerformanceCheck(this.config.baseUrl);
67
+ performanceMetrics = {
68
+ avgLoadTimeMs: perfResult.loadTimeMs,
69
+ maxLoadTimeMs: perfResult.domContentLoadedMs
70
+ };
71
+ }
72
+ // 生成报告
73
+ const report = this.browserQA.generateQAReport(results);
74
+ const passedCount = results.filter(r => r.passed).length;
75
+ const passed = passedCount === results.length && accessibilityIssues === 0;
76
+ const testResult = {
77
+ passed,
78
+ totalFlows: results.length,
79
+ passedFlows: passedCount,
80
+ failedFlows: results.length - passedCount,
81
+ results,
82
+ accessibilityIssues,
83
+ performanceMetrics,
84
+ report
85
+ };
86
+ this.eventBus.emit('e2e.end', {
87
+ passed: testResult.passed,
88
+ durationMs: Date.now() - startTime,
89
+ passedFlows: testResult.passedFlows,
90
+ failedFlows: testResult.failedFlows
91
+ });
92
+ return testResult;
93
+ }
94
+ /**
95
+ * 转换为 VerificationResult(用于 WorkflowEngine G8 门控)
96
+ */
97
+ toVerificationResult(result) {
98
+ const verifications = [];
99
+ // 流程验证
100
+ for (const qaResult of result.results) {
101
+ verifications.push({
102
+ criterion: `E2E Flow: ${qaResult.flowName}`,
103
+ passed: qaResult.passed,
104
+ evidence: qaResult.passed
105
+ ? `Flow completed in ${qaResult.durationMs}ms without errors`
106
+ : `Flow failed: ${qaResult.error ?? qaResult.consoleErrors.map(e => e.text).join(', ')}`
107
+ });
108
+ }
109
+ // Accessibility 验证
110
+ if (this.config.accessibilityCheck) {
111
+ verifications.push({
112
+ criterion: 'Accessibility Check',
113
+ passed: result.accessibilityIssues === 0,
114
+ evidence: result.accessibilityIssues === 0
115
+ ? 'No accessibility issues detected'
116
+ : `${result.accessibilityIssues} accessibility issues found`
117
+ });
118
+ }
119
+ // 性能验证
120
+ if (this.config.performanceCheck && result.performanceMetrics) {
121
+ const loadTimeOk = result.performanceMetrics.avgLoadTimeMs < 3000; // 3秒阈值
122
+ verifications.push({
123
+ criterion: 'Performance Check (Load Time < 3s)',
124
+ passed: loadTimeOk,
125
+ evidence: loadTimeOk
126
+ ? `Average load time: ${result.performanceMetrics.avgLoadTimeMs}ms`
127
+ : `Load time exceeds threshold: ${result.performanceMetrics.avgLoadTimeMs}ms`
128
+ });
129
+ }
130
+ return verifications;
131
+ }
132
+ /**
133
+ * 运行并生成 VerificationResult(用于 G8 门控)
134
+ */
135
+ async runForVerification() {
136
+ const result = await this.run();
137
+ return this.toVerificationResult(result);
138
+ }
139
+ /**
140
+ * 添加自定义流程
141
+ */
142
+ addFlow(flow) {
143
+ this.config.flows.push(flow);
144
+ }
145
+ /**
146
+ * 获取 MCP 工具调用序列(用于 Claude Code 实际执行)
147
+ */
148
+ getMCPExecutionPlan() {
149
+ return this.config.flows.map(flow => ({
150
+ flow,
151
+ calls: this.browserQA.getMCPCallSequence(this.config.baseUrl, flow)
152
+ }));
153
+ }
154
+ /**
155
+ * 快速验证(仅检查关键流程)
156
+ */
157
+ async quickVerify() {
158
+ // 只运行第一个流程,快速检查
159
+ if (this.config.flows.length === 0) {
160
+ this.eventBus.emit('e2e.quick.empty', {});
161
+ return true;
162
+ }
163
+ const criticalFlow = this.config.flows[0];
164
+ const result = await this.browserQA.runE2ETest(this.config.baseUrl, criticalFlow);
165
+ return result.passed && result.consoleErrors.length === 0;
166
+ }
167
+ sleep(ms) {
168
+ return new Promise(resolve => setTimeout(resolve, ms));
169
+ }
170
+ }
171
+ /**
172
+ * E2E 测试配置预设
173
+ */
174
+ export const E2EPresets = {
175
+ /**
176
+ * 快速测试(仅关键流程,无重试)
177
+ */
178
+ quick: (baseUrl, flows) => ({
179
+ baseUrl,
180
+ flows,
181
+ timeoutMs: 5000,
182
+ retryCount: 1,
183
+ screenshotDir: './qa-screenshots',
184
+ accessibilityCheck: false,
185
+ performanceCheck: false
186
+ }),
187
+ /**
188
+ * 标准测试(完整流程,2次重试)
189
+ */
190
+ standard: (baseUrl, flows) => ({
191
+ baseUrl,
192
+ flows,
193
+ timeoutMs: 10000,
194
+ retryCount: 2,
195
+ screenshotDir: './qa-screenshots',
196
+ accessibilityCheck: true,
197
+ performanceCheck: false
198
+ }),
199
+ /**
200
+ * 完整测试(所有检查,3次重试)
201
+ */
202
+ full: (baseUrl, flows) => ({
203
+ baseUrl,
204
+ flows,
205
+ timeoutMs: 15000,
206
+ retryCount: 3,
207
+ screenshotDir: './qa-screenshots',
208
+ accessibilityCheck: true,
209
+ performanceCheck: true
210
+ })
211
+ };
212
+ /**
213
+ * G8 浏览器门控检查
214
+ *
215
+ * 用于 WorkflowEngine 的第 8 个门控(浏览器 QA)
216
+ */
217
+ export async function browserGateCheck(eventBus, baseUrl, flows) {
218
+ const config = E2EPresets.standard(baseUrl, flows);
219
+ const runner = new E2ETestRunner(eventBus, config);
220
+ const verifications = await runner.runForVerification();
221
+ const passed = verifications.every(v => v.passed);
222
+ const report = passed
223
+ ? 'All browser QA checks passed'
224
+ : `Browser QA failed: ${verifications.filter(v => !v.passed).map(v => v.criterion).join(', ')}`;
225
+ return { passed, verifications, report };
226
+ }
227
+ //# sourceMappingURL=E2ETestRunner.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"E2ETestRunner.js","sourceRoot":"","sources":["../../../src/workflow/qa/E2ETestRunner.ts"],"names":[],"mappings":"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"}
@@ -12,6 +12,13 @@ export interface GateEvidence {
12
12
  exitCode?: number;
13
13
  path?: string;
14
14
  durationMs?: number;
15
+ cwd?: string;
16
+ startedAt?: number;
17
+ endedAt?: number;
18
+ stdoutTail?: string;
19
+ stderrTail?: string;
20
+ outputHash?: string;
21
+ source?: string;
15
22
  }
16
23
  export interface GateResult {
17
24
  gate: GateStage;
package/package.json CHANGED
@@ -1,10 +1,10 @@
1
1
  {
2
2
  "name": "@hongmaple0820/scale-engine",
3
- "version": "0.10.0",
4
- "description": "SCALE Engine v0.10.0 - AI engineering scaffold: phase-aligned commands (DEFINE -> PLAN -> BUILD -> VERIFY -> REVIEW -> SHIP) with FSM integration, 11 platform adapters with skills directory support, artifact lifecycle management, and auto-evolution loop",
3
+ "version": "0.11.0",
4
+ "description": "SCALE Engine v0.10.1 - AI engineering scaffold with hardened phase workflow gates, scoped ship safety, TDD evidence, deterministic review scanning, built-in G7 security evidence, 11 platform adapters, artifact lifecycle management, and auto-evolution loop",
5
5
  "type": "module",
6
6
  "bin": {
7
- "scale": "./dist/api/cli.js"
7
+ "scale": "dist/api/cli.js"
8
8
  },
9
9
  "main": "./dist/index.js",
10
10
  "types": "./dist/index.d.ts",