@hongmaple0820/scale-engine 0.9.0 → 0.10.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 (103) hide show
  1. package/README.en.md +18 -1
  2. package/README.md +22 -2
  3. package/dist/agents/AgentSourceLoader.js +1 -1
  4. package/dist/agents/AgentSourceLoader.js.map +1 -1
  5. package/dist/agents/types.d.ts +1 -1
  6. package/dist/api/cli.js +222 -6
  7. package/dist/api/cli.js.map +1 -1
  8. package/dist/api/quickstart.d.ts +23 -0
  9. package/dist/api/quickstart.js +57 -0
  10. package/dist/api/quickstart.js.map +1 -0
  11. package/dist/artifact/types.d.ts +5 -1
  12. package/dist/artifact/types.js.map +1 -1
  13. package/dist/capabilities/BrowserCapability.d.ts +30 -0
  14. package/dist/capabilities/BrowserCapability.js +73 -0
  15. package/dist/capabilities/BrowserCapability.js.map +1 -0
  16. package/dist/capabilities/CapabilityRegistry.d.ts +17 -0
  17. package/dist/capabilities/CapabilityRegistry.js +65 -0
  18. package/dist/capabilities/CapabilityRegistry.js.map +1 -0
  19. package/dist/capabilities/ComputerCapability.d.ts +28 -0
  20. package/dist/capabilities/ComputerCapability.js +40 -0
  21. package/dist/capabilities/ComputerCapability.js.map +1 -0
  22. package/dist/capabilities/InstalledSkillsIntegration.d.ts +66 -0
  23. package/dist/capabilities/InstalledSkillsIntegration.js +188 -0
  24. package/dist/capabilities/InstalledSkillsIntegration.js.map +1 -0
  25. package/dist/capabilities/SearchCapability.d.ts +46 -0
  26. package/dist/capabilities/SearchCapability.js +88 -0
  27. package/dist/capabilities/SearchCapability.js.map +1 -0
  28. package/dist/capabilities/index.d.ts +6 -0
  29. package/dist/capabilities/index.js +9 -0
  30. package/dist/capabilities/index.js.map +1 -0
  31. package/dist/capabilities/types.d.ts +92 -0
  32. package/dist/capabilities/types.js +7 -0
  33. package/dist/capabilities/types.js.map +1 -0
  34. package/dist/cli/liteCommands.js +1 -1
  35. package/dist/cli/liteCommands.js.map +1 -1
  36. package/dist/cli/phaseCommands.d.ts +33 -3
  37. package/dist/cli/phaseCommands.js +398 -144
  38. package/dist/cli/phaseCommands.js.map +1 -1
  39. package/dist/core/logger.js +9 -2
  40. package/dist/core/logger.js.map +1 -1
  41. package/dist/hooks/HookGeneratorEnhanced.js +84 -5
  42. package/dist/hooks/HookGeneratorEnhanced.js.map +1 -1
  43. package/dist/hooks/WorkflowHooksManager.d.ts +30 -0
  44. package/dist/hooks/WorkflowHooksManager.js +117 -0
  45. package/dist/hooks/WorkflowHooksManager.js.map +1 -0
  46. package/dist/hooks/index.d.ts +2 -0
  47. package/dist/hooks/index.js +2 -1
  48. package/dist/hooks/index.js.map +1 -1
  49. package/dist/skills/SkillExecutor.d.ts +11 -1
  50. package/dist/skills/SkillExecutor.js +160 -5
  51. package/dist/skills/SkillExecutor.js.map +1 -1
  52. package/dist/workflow/EvidenceStore.d.ts +20 -0
  53. package/dist/workflow/EvidenceStore.js +48 -0
  54. package/dist/workflow/EvidenceStore.js.map +1 -0
  55. package/dist/workflow/ReviewAnalyzer.d.ts +28 -0
  56. package/dist/workflow/ReviewAnalyzer.js +80 -0
  57. package/dist/workflow/ReviewAnalyzer.js.map +1 -0
  58. package/dist/workflow/ReviewStore.d.ts +32 -0
  59. package/dist/workflow/ReviewStore.js +42 -0
  60. package/dist/workflow/ReviewStore.js.map +1 -0
  61. package/dist/workflow/VerificationCommands.d.ts +19 -0
  62. package/dist/workflow/VerificationCommands.js +123 -0
  63. package/dist/workflow/VerificationCommands.js.map +1 -0
  64. package/dist/workflow/WorkflowEngine.d.ts +62 -0
  65. package/dist/workflow/WorkflowEngine.js +151 -0
  66. package/dist/workflow/WorkflowEngine.js.map +1 -0
  67. package/dist/workflow/cognitive/AmbiguityScorer.d.ts +17 -0
  68. package/dist/workflow/cognitive/AmbiguityScorer.js +107 -0
  69. package/dist/workflow/cognitive/AmbiguityScorer.js.map +1 -0
  70. package/dist/workflow/cognitive/ConsensusPlanner.d.ts +26 -0
  71. package/dist/workflow/cognitive/ConsensusPlanner.js +141 -0
  72. package/dist/workflow/cognitive/ConsensusPlanner.js.map +1 -0
  73. package/dist/workflow/cognitive/SocraticQuestioner.d.ts +33 -0
  74. package/dist/workflow/cognitive/SocraticQuestioner.js +276 -0
  75. package/dist/workflow/cognitive/SocraticQuestioner.js.map +1 -0
  76. package/dist/workflow/execution/RalphEngine.d.ts +36 -0
  77. package/dist/workflow/execution/RalphEngine.js +123 -0
  78. package/dist/workflow/execution/RalphEngine.js.map +1 -0
  79. package/dist/workflow/execution/UltraworkEngine.d.ts +43 -0
  80. package/dist/workflow/execution/UltraworkEngine.js +135 -0
  81. package/dist/workflow/execution/UltraworkEngine.js.map +1 -0
  82. package/dist/workflow/gates/GateSystem.d.ts +104 -0
  83. package/dist/workflow/gates/GateSystem.js +579 -0
  84. package/dist/workflow/gates/GateSystem.js.map +1 -0
  85. package/dist/workflow/index.d.ts +12 -0
  86. package/dist/workflow/index.js +14 -0
  87. package/dist/workflow/index.js.map +1 -0
  88. package/dist/workflow/quality/HonestDelivery.d.ts +19 -0
  89. package/dist/workflow/quality/HonestDelivery.js +77 -0
  90. package/dist/workflow/quality/HonestDelivery.js.map +1 -0
  91. package/dist/workflow/quality/KarpathyEvaluator.d.ts +18 -0
  92. package/dist/workflow/quality/KarpathyEvaluator.js +76 -0
  93. package/dist/workflow/quality/KarpathyEvaluator.js.map +1 -0
  94. package/dist/workflow/types.d.ts +139 -0
  95. package/dist/workflow/types.js +4 -0
  96. package/dist/workflow/types.js.map +1 -0
  97. package/dist/workflows/DAGBuilder.js +1 -1
  98. package/dist/workflows/DAGBuilder.js.map +1 -1
  99. package/dist/workflows/WorkflowOrchestrator.js +1 -1
  100. package/dist/workflows/WorkflowOrchestrator.js.map +1 -1
  101. package/dist/workflows/index.js +1 -1
  102. package/dist/workflows/index.js.map +1 -1
  103. package/package.json +2 -2
@@ -0,0 +1,579 @@
1
+ // SCALE Engine - Gate System
2
+ // Quality gate system G0-G7.
3
+ import { EvidenceStore } from '../EvidenceStore.js';
4
+ import { detectVerificationCommands } from '../VerificationCommands.js';
5
+ import { execa } from 'execa';
6
+ export async function runShellCommand(command, timeout) {
7
+ const start = Date.now();
8
+ try {
9
+ const result = await execa(command, {
10
+ shell: true,
11
+ timeout,
12
+ reject: false,
13
+ all: false,
14
+ });
15
+ return {
16
+ code: result.exitCode ?? 1,
17
+ stdout: result.stdout ?? '',
18
+ stderr: result.stderr ?? '',
19
+ durationMs: Date.now() - start,
20
+ };
21
+ }
22
+ catch (error) {
23
+ return {
24
+ code: 1,
25
+ stdout: '',
26
+ stderr: error instanceof Error ? error.message : String(error),
27
+ durationMs: Date.now() - start,
28
+ };
29
+ }
30
+ }
31
+ function createEvidence(input) {
32
+ return {
33
+ id: `EVID-${Date.now()}-${Math.random().toString(36).slice(2, 8)}`,
34
+ ...input,
35
+ };
36
+ }
37
+ function textEvidence(items) {
38
+ return items.map(item => `${item.label}: ${item.detail}`).join('\n');
39
+ }
40
+ export class GateSystem {
41
+ constructor(eventBus, commandConfig = {}) {
42
+ this.gates = new Map();
43
+ this.results = new Map();
44
+ this.eventBus = eventBus;
45
+ this.evidenceStore = new EvidenceStore();
46
+ this.commands = detectVerificationCommands(process.cwd(), commandConfig);
47
+ this.registerDefaultGates();
48
+ }
49
+ registerGate(gate) {
50
+ this.gates.set(gate.stage, gate);
51
+ }
52
+ async executeGate(stage) {
53
+ const gate = this.gates.get(stage);
54
+ if (!gate) {
55
+ const evidenceItems = [
56
+ createEvidence({
57
+ kind: 'manual',
58
+ label: 'Gate registry',
59
+ passed: false,
60
+ detail: `Gate ${stage} is not registered`,
61
+ }),
62
+ ];
63
+ return {
64
+ gate: stage,
65
+ status: 'FAILED',
66
+ passed: false,
67
+ evidence: textEvidence(evidenceItems),
68
+ evidenceItems,
69
+ blockers: [],
70
+ durationMs: 0,
71
+ };
72
+ }
73
+ const start = Date.now();
74
+ try {
75
+ const result = await gate.execute();
76
+ result.durationMs = Date.now() - start;
77
+ this.results.set(stage, result);
78
+ this.persistEvidence(result);
79
+ this.eventBus.emit('gate.executed', { stage, passed: result.passed });
80
+ return result;
81
+ }
82
+ catch (e) {
83
+ const result = {
84
+ gate: stage,
85
+ status: 'FAILED',
86
+ passed: false,
87
+ evidence: `Gate execution failed: ${e}`,
88
+ evidenceItems: [
89
+ createEvidence({
90
+ kind: 'manual',
91
+ label: 'Gate execution',
92
+ passed: false,
93
+ detail: String(e),
94
+ }),
95
+ ],
96
+ blockers: [String(e)],
97
+ durationMs: Date.now() - start
98
+ };
99
+ this.results.set(stage, result);
100
+ this.persistEvidence(result);
101
+ return result;
102
+ }
103
+ }
104
+ persistEvidence(result) {
105
+ try {
106
+ const record = this.evidenceStore.saveGateResult(result);
107
+ result.evidenceRecordId = record.id;
108
+ }
109
+ catch {
110
+ // Evidence persistence must not mask the gate decision itself.
111
+ }
112
+ }
113
+ async executeAll(order = ['G0', 'G1', 'G2', 'G3', 'G4', 'G5', 'G6', 'G7']) {
114
+ const results = [];
115
+ for (const stage of order) {
116
+ const result = await this.executeGate(stage);
117
+ results.push(result);
118
+ if (!result.passed && stage !== 'G1' && stage !== 'G2') {
119
+ this.eventBus.emit('gate.blocked', { stage, blockers: result.blockers });
120
+ break;
121
+ }
122
+ }
123
+ return results;
124
+ }
125
+ getResult(stage) {
126
+ return this.results.get(stage);
127
+ }
128
+ getAllResults() {
129
+ return this.results;
130
+ }
131
+ registerDefaultGates() {
132
+ this.registerGate(new ExplorationGate());
133
+ this.registerGate(new PlanningGate());
134
+ this.registerGate(new TDDGate());
135
+ this.registerGate(new BuildGate(this.commands.build));
136
+ this.registerGate(new LintGate(this.commands.lint));
137
+ this.registerGate(new TestGate(this.commands.test));
138
+ this.registerGate(new CoverageGate(this.commands.coverage));
139
+ this.registerGate(new SecurityGate());
140
+ }
141
+ }
142
+ function missingCommandResult(stage, label, command) {
143
+ const evidenceItems = [
144
+ createEvidence({
145
+ kind: 'command',
146
+ label,
147
+ passed: false,
148
+ detail: command.reason,
149
+ }),
150
+ ];
151
+ return {
152
+ gate: stage,
153
+ status: 'BLOCKED',
154
+ passed: false,
155
+ evidence: textEvidence(evidenceItems),
156
+ evidenceItems,
157
+ blockers: [command.reason],
158
+ durationMs: 0,
159
+ };
160
+ }
161
+ export class ExplorationGate {
162
+ constructor() {
163
+ this.stage = 'G1';
164
+ this.name = 'Exploration';
165
+ this.description = 'Project knowledge file, knowledge graph, and contradiction analysis checks';
166
+ this.requiredLevel = 'M';
167
+ }
168
+ async execute() {
169
+ const blockers = [];
170
+ const knowledgeFile = await this.findKnowledgeFile();
171
+ if (!knowledgeFile) {
172
+ blockers.push('No project knowledge file found');
173
+ }
174
+ const hasKnowledgeGraph = await this.checkKnowledgeGraph();
175
+ const evidenceItems = [
176
+ createEvidence({
177
+ kind: 'file',
178
+ label: 'Project knowledge file',
179
+ passed: Boolean(knowledgeFile),
180
+ path: knowledgeFile ?? undefined,
181
+ detail: knowledgeFile ? `found ${knowledgeFile}` : 'missing AGENTS.md, CLAUDE.md, .cursorrules, and GEMINI.md',
182
+ }),
183
+ createEvidence({
184
+ kind: 'file',
185
+ label: 'Knowledge graph',
186
+ passed: hasKnowledgeGraph,
187
+ path: 'graphify-out/GRAPH_REPORT.md',
188
+ detail: hasKnowledgeGraph ? 'available' : 'not available',
189
+ }),
190
+ ];
191
+ const passed = blockers.length === 0;
192
+ return {
193
+ gate: this.stage,
194
+ status: passed ? 'PASSED' : 'BLOCKED',
195
+ passed,
196
+ evidence: textEvidence(evidenceItems),
197
+ evidenceItems,
198
+ blockers
199
+ };
200
+ }
201
+ async findKnowledgeFile() {
202
+ const fs = await import('fs/promises');
203
+ const candidates = ['AGENTS.md', 'CLAUDE.md', '.cursorrules', 'GEMINI.md'];
204
+ for (const candidate of candidates) {
205
+ try {
206
+ await fs.access(candidate);
207
+ return candidate;
208
+ }
209
+ catch {
210
+ // Try the next platform-specific knowledge file.
211
+ }
212
+ }
213
+ return null;
214
+ }
215
+ async checkKnowledgeGraph() {
216
+ try {
217
+ const fs = await import('fs/promises');
218
+ await fs.access('graphify-out/GRAPH_REPORT.md');
219
+ return true;
220
+ }
221
+ catch {
222
+ return false;
223
+ }
224
+ }
225
+ }
226
+ export class PlanningGate {
227
+ constructor() {
228
+ this.stage = 'G2';
229
+ this.name = 'Planning';
230
+ this.description = 'Mini-Spec or SDD planning artifact checks';
231
+ this.requiredLevel = 'L';
232
+ }
233
+ async execute() {
234
+ const blockers = [];
235
+ const hasSpec = await this.checkSpecDocument();
236
+ if (!hasSpec) {
237
+ blockers.push('Spec document not found');
238
+ }
239
+ const evidenceItems = [
240
+ createEvidence({
241
+ kind: 'file',
242
+ label: 'Spec document',
243
+ passed: hasSpec,
244
+ path: '.scale/specs',
245
+ detail: hasSpec ? 'spec directory contains at least one markdown spec' : 'missing spec directory or markdown spec',
246
+ }),
247
+ ];
248
+ const passed = blockers.length === 0;
249
+ return {
250
+ gate: this.stage,
251
+ status: passed ? 'PASSED' : 'BLOCKED',
252
+ passed,
253
+ evidence: textEvidence(evidenceItems),
254
+ evidenceItems,
255
+ blockers
256
+ };
257
+ }
258
+ async checkSpecDocument() {
259
+ try {
260
+ const fs = await import('fs/promises');
261
+ const specDir = '.scale/specs';
262
+ const entries = await fs.readdir(specDir);
263
+ return entries.some(entry => entry.endsWith('.md'));
264
+ }
265
+ catch {
266
+ return false;
267
+ }
268
+ }
269
+ }
270
+ export class TDDGate {
271
+ constructor() {
272
+ this.stage = 'G3';
273
+ this.name = 'TDD';
274
+ this.description = 'RED->GREEN->REFACTOR寰幆';
275
+ this.requiredLevel = 'CRITICAL';
276
+ }
277
+ async execute() {
278
+ // TDD gate requires manual verification in CRITICAL mode
279
+ const evidenceItems = [
280
+ createEvidence({
281
+ kind: 'manual',
282
+ label: 'TDD cycle',
283
+ passed: true,
284
+ detail: 'TDD cycle marked as manually verified',
285
+ }),
286
+ ];
287
+ return {
288
+ gate: this.stage,
289
+ status: 'PASSED',
290
+ passed: true,
291
+ evidence: textEvidence(evidenceItems),
292
+ evidenceItems,
293
+ blockers: [],
294
+ durationMs: 0
295
+ };
296
+ }
297
+ }
298
+ export class BuildGate {
299
+ constructor(command) {
300
+ this.command = command;
301
+ this.stage = 'G0';
302
+ this.name = 'Build';
303
+ this.description = 'Run configured build or typecheck command';
304
+ this.requiredLevel = 'ALWAYS';
305
+ }
306
+ async execute() {
307
+ if (!this.command.command) {
308
+ return missingCommandResult(this.stage, 'Build command', this.command);
309
+ }
310
+ const blockers = [];
311
+ let commandResult = null;
312
+ try {
313
+ commandResult = await runShellCommand(this.command.command, 120000);
314
+ if (commandResult.code !== 0) {
315
+ blockers.push(`Build failed: ${commandResult.stderr}`);
316
+ }
317
+ }
318
+ catch (e) {
319
+ blockers.push(`Build execution failed: ${e}`);
320
+ }
321
+ const passed = blockers.length === 0;
322
+ const evidenceItems = [
323
+ createEvidence({
324
+ kind: 'command',
325
+ label: 'Build command',
326
+ passed,
327
+ command: this.command.command,
328
+ exitCode: commandResult?.code,
329
+ durationMs: commandResult?.durationMs,
330
+ detail: commandResult
331
+ ? `${this.command.reason}\n${(commandResult.stdout || commandResult.stderr || `exit code ${commandResult.code}`).slice(-500)}`
332
+ : 'command did not complete',
333
+ }),
334
+ ];
335
+ return {
336
+ gate: this.stage,
337
+ status: passed ? 'PASSED' : 'FAILED',
338
+ passed,
339
+ evidence: textEvidence(evidenceItems),
340
+ evidenceItems,
341
+ blockers
342
+ };
343
+ }
344
+ }
345
+ export class LintGate {
346
+ constructor(command) {
347
+ this.command = command;
348
+ this.stage = 'G4';
349
+ this.name = 'Lint';
350
+ this.description = 'Run configured lint command';
351
+ this.requiredLevel = 'ALWAYS';
352
+ }
353
+ async execute() {
354
+ if (!this.command.command) {
355
+ return missingCommandResult(this.stage, 'Lint command', this.command);
356
+ }
357
+ const blockers = [];
358
+ let commandResult = null;
359
+ try {
360
+ commandResult = await runShellCommand(this.command.command, 60000);
361
+ if (commandResult.code !== 0) {
362
+ blockers.push(`Lint failed: ${commandResult.stderr}`);
363
+ }
364
+ }
365
+ catch (e) {
366
+ blockers.push(`Lint execution failed: ${e}`);
367
+ }
368
+ const passed = blockers.length === 0;
369
+ const evidenceItems = [
370
+ createEvidence({
371
+ kind: 'command',
372
+ label: 'Lint command',
373
+ passed,
374
+ command: this.command.command,
375
+ exitCode: commandResult?.code,
376
+ durationMs: commandResult?.durationMs,
377
+ detail: commandResult
378
+ ? `${this.command.reason}\n${(commandResult.stdout || commandResult.stderr || `exit code ${commandResult.code}`).slice(-500)}`
379
+ : 'command did not complete',
380
+ }),
381
+ ];
382
+ return {
383
+ gate: this.stage,
384
+ status: passed ? 'PASSED' : 'FAILED',
385
+ passed,
386
+ evidence: textEvidence(evidenceItems),
387
+ evidenceItems,
388
+ blockers
389
+ };
390
+ }
391
+ }
392
+ export class TestGate {
393
+ constructor(command) {
394
+ this.command = command;
395
+ this.stage = 'G5';
396
+ this.name = 'Test';
397
+ this.description = 'Run configured test command';
398
+ this.requiredLevel = 'ALWAYS';
399
+ }
400
+ async execute() {
401
+ if (!this.command.command) {
402
+ return missingCommandResult(this.stage, 'Test command', this.command);
403
+ }
404
+ const blockers = [];
405
+ let commandResult = null;
406
+ try {
407
+ commandResult = await runShellCommand(this.command.command, 120000);
408
+ if (commandResult.code !== 0) {
409
+ blockers.push(`Tests failed: ${commandResult.stderr}`);
410
+ }
411
+ }
412
+ catch (e) {
413
+ blockers.push(`Test execution failed: ${e}`);
414
+ }
415
+ const passed = blockers.length === 0;
416
+ const evidenceItems = [
417
+ createEvidence({
418
+ kind: 'command',
419
+ label: 'Test command',
420
+ passed,
421
+ command: this.command.command,
422
+ exitCode: commandResult?.code,
423
+ durationMs: commandResult?.durationMs,
424
+ detail: commandResult
425
+ ? `${this.command.reason}\n${(commandResult.stdout || commandResult.stderr || `exit code ${commandResult.code}`).slice(-500)}`
426
+ : 'command did not complete',
427
+ }),
428
+ ];
429
+ return {
430
+ gate: this.stage,
431
+ status: passed ? 'PASSED' : 'FAILED',
432
+ passed,
433
+ evidence: textEvidence(evidenceItems),
434
+ evidenceItems,
435
+ blockers
436
+ };
437
+ }
438
+ }
439
+ export class CoverageGate {
440
+ constructor(command) {
441
+ this.command = command;
442
+ this.stage = 'G6';
443
+ this.name = 'Coverage';
444
+ this.description = 'Run configured coverage command';
445
+ this.requiredLevel = 'ALWAYS';
446
+ }
447
+ async execute() {
448
+ if (!this.command.command) {
449
+ return missingCommandResult(this.stage, 'Coverage command', this.command);
450
+ }
451
+ const blockers = [];
452
+ let detail = '';
453
+ let commandResult = null;
454
+ try {
455
+ commandResult = await runShellCommand(this.command.command, 120000);
456
+ if (commandResult.code !== 0) {
457
+ blockers.push(`Coverage command failed: ${commandResult.stderr}`);
458
+ }
459
+ const coverageMatch = commandResult.stdout.match(/All files[^|]*\|[^|]*\|[^|]*\|[^|]*\|[^|]*\|\s*(\d+\.?\d*)/);
460
+ if (coverageMatch) {
461
+ const coverage = parseFloat(coverageMatch[1]);
462
+ detail = `Coverage: ${coverage}%`;
463
+ if (coverage < 80) {
464
+ blockers.push(`Coverage ${coverage}% below 80% threshold`);
465
+ }
466
+ }
467
+ else {
468
+ detail = (commandResult.stdout || commandResult.stderr || `exit code ${commandResult.code}`).slice(-500);
469
+ blockers.push('Coverage percentage could not be parsed');
470
+ }
471
+ }
472
+ catch (e) {
473
+ blockers.push(`Coverage check failed: ${e}`);
474
+ }
475
+ const passed = blockers.length === 0;
476
+ const evidenceItems = [
477
+ createEvidence({
478
+ kind: 'command',
479
+ label: 'Coverage command',
480
+ passed,
481
+ command: this.command.command,
482
+ exitCode: commandResult?.code,
483
+ durationMs: commandResult?.durationMs,
484
+ detail: detail ? `${this.command.reason}\n${detail}` : 'command did not complete',
485
+ }),
486
+ ];
487
+ return {
488
+ gate: this.stage,
489
+ status: passed ? 'PASSED' : 'FAILED',
490
+ passed,
491
+ evidence: textEvidence(evidenceItems),
492
+ evidenceItems,
493
+ blockers
494
+ };
495
+ }
496
+ }
497
+ export class SecurityGate {
498
+ constructor() {
499
+ this.stage = 'G7';
500
+ this.name = 'Security';
501
+ this.description = 'Hardcoded secret and OWASP-oriented security checks';
502
+ this.requiredLevel = 'ALWAYS';
503
+ }
504
+ async execute() {
505
+ const blockers = [];
506
+ const hasHardcodedSecrets = await this.detectSecrets();
507
+ if (hasHardcodedSecrets) {
508
+ blockers.push('Hardcoded secrets detected');
509
+ }
510
+ const passed = blockers.length === 0;
511
+ const evidenceItems = [
512
+ createEvidence({
513
+ kind: 'scan',
514
+ label: 'Secret scan',
515
+ passed,
516
+ path: 'src',
517
+ detail: hasHardcodedSecrets ? 'hardcoded secret pattern detected' : 'no hardcoded secret patterns detected',
518
+ }),
519
+ ];
520
+ return {
521
+ gate: this.stage,
522
+ status: passed ? 'PASSED' : 'FAILED',
523
+ passed,
524
+ evidence: textEvidence(evidenceItems),
525
+ evidenceItems,
526
+ blockers
527
+ };
528
+ }
529
+ async detectSecrets() {
530
+ try {
531
+ const fs = await import('fs/promises');
532
+ const { join } = await import('path');
533
+ const files = await this.walkDir('src', '.ts');
534
+ for (const file of files) {
535
+ const content = await fs.readFile(join('src', file), 'utf-8');
536
+ if (this.containsSecret(content)) {
537
+ return true;
538
+ }
539
+ }
540
+ return false;
541
+ }
542
+ catch {
543
+ return false;
544
+ }
545
+ }
546
+ async walkDir(dir, ext) {
547
+ const fs = await import('fs/promises');
548
+ const { join } = await import('path');
549
+ const results = [];
550
+ try {
551
+ const entries = await fs.readdir(dir, { withFileTypes: true });
552
+ for (const entry of entries) {
553
+ const fullPath = join(dir, entry.name);
554
+ if (entry.isDirectory()) {
555
+ const subFiles = await this.walkDir(fullPath, ext);
556
+ results.push(...subFiles.map(f => join(entry.name, f)));
557
+ }
558
+ else if (entry.name.endsWith(ext)) {
559
+ results.push(fullPath);
560
+ }
561
+ }
562
+ }
563
+ catch {
564
+ // Ignore errors
565
+ }
566
+ return results;
567
+ }
568
+ containsSecret(content) {
569
+ const patterns = [
570
+ /password\s*=\s*['"][^'"]+['"]/i,
571
+ /api[_-]?key\s*=\s*['"][^'"]+['"]/i,
572
+ /secret\s*=\s*['"][^'"]+['"]/i,
573
+ /token\s*=\s*['"][^'"]+['"]/i,
574
+ /auth\s*=\s*['"][^'"]+['"]/i,
575
+ ];
576
+ return patterns.some(p => p.test(content));
577
+ }
578
+ }
579
+ //# sourceMappingURL=GateSystem.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"GateSystem.js","sourceRoot":"","sources":["../../../src/workflow/gates/GateSystem.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ export * from './types.js';
2
+ export * from './gates/GateSystem.js';
3
+ export * from './quality/HonestDelivery.js';
4
+ export * from './quality/KarpathyEvaluator.js';
5
+ export * from './cognitive/AmbiguityScorer.js';
6
+ export * from './cognitive/ConsensusPlanner.js';
7
+ export * from './cognitive/SocraticQuestioner.js';
8
+ export * from './execution/RalphEngine.js';
9
+ export * from './execution/UltraworkEngine.js';
10
+ export * from './EvidenceStore.js';
11
+ export * from './ReviewStore.js';
12
+ export * from './WorkflowEngine.js';
@@ -0,0 +1,14 @@
1
+ // SCALE Engine - Workflow Module Index
2
+ export * from './types.js';
3
+ export * from './gates/GateSystem.js';
4
+ export * from './quality/HonestDelivery.js';
5
+ export * from './quality/KarpathyEvaluator.js';
6
+ export * from './cognitive/AmbiguityScorer.js';
7
+ export * from './cognitive/ConsensusPlanner.js';
8
+ export * from './cognitive/SocraticQuestioner.js';
9
+ export * from './execution/RalphEngine.js';
10
+ export * from './execution/UltraworkEngine.js';
11
+ export * from './EvidenceStore.js';
12
+ export * from './ReviewStore.js';
13
+ export * from './WorkflowEngine.js';
14
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/workflow/index.ts"],"names":[],"mappings":"AAAA,uCAAuC;AAEvC,cAAc,YAAY,CAAA;AAC1B,cAAc,uBAAuB,CAAA;AACrC,cAAc,6BAA6B,CAAA;AAC3C,cAAc,gCAAgC,CAAA;AAC9C,cAAc,gCAAgC,CAAA;AAC9C,cAAc,iCAAiC,CAAA;AAC/C,cAAc,mCAAmC,CAAA;AACjD,cAAc,4BAA4B,CAAA;AAC1C,cAAc,gCAAgC,CAAA;AAC9C,cAAc,oBAAoB,CAAA;AAClC,cAAc,kBAAkB,CAAA;AAChC,cAAc,qBAAqB,CAAA"}
@@ -0,0 +1,19 @@
1
+ import type { DeliveryReport, VerificationResult } from '../types.js';
2
+ export declare class HonestDelivery {
3
+ private completedItems;
4
+ private verifiedItems;
5
+ private unverifiedItems;
6
+ private blockers;
7
+ private recommendations;
8
+ addCompleted(item: string): void;
9
+ addVerified(result: VerificationResult): void;
10
+ addUnverified(item: string): void;
11
+ addBlocker(blocker: string): void;
12
+ addRecommendation(rec: string): void;
13
+ generate(): DeliveryReport;
14
+ formatReport(report: DeliveryReport): string;
15
+ static createFromGateResults(gateResults: Map<string, {
16
+ passed: boolean;
17
+ evidence: string;
18
+ }>): DeliveryReport;
19
+ }