@hongmaple0820/scale-engine 0.8.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 (134) hide show
  1. package/README.en.md +237 -0
  2. package/README.md +111 -50
  3. package/dist/adapters/ClaudeCodeAdapter.d.ts +2 -0
  4. package/dist/adapters/ClaudeCodeAdapter.js +5 -0
  5. package/dist/adapters/ClaudeCodeAdapter.js.map +1 -1
  6. package/dist/adapters/CodexAdapter.d.ts +1 -0
  7. package/dist/adapters/CodexAdapter.js +5 -0
  8. package/dist/adapters/CodexAdapter.js.map +1 -1
  9. package/dist/adapters/GeminiAdapter.d.ts +1 -0
  10. package/dist/adapters/GeminiAdapter.js +4 -0
  11. package/dist/adapters/GeminiAdapter.js.map +1 -1
  12. package/dist/adapters/HermesAdapter.d.ts +1 -0
  13. package/dist/adapters/HermesAdapter.js +4 -0
  14. package/dist/adapters/HermesAdapter.js.map +1 -1
  15. package/dist/adapters/OpenClawAdapter.d.ts +1 -0
  16. package/dist/adapters/OpenClawAdapter.js +4 -0
  17. package/dist/adapters/OpenClawAdapter.js.map +1 -1
  18. package/dist/adapters/QCoderAdapter.d.ts +1 -0
  19. package/dist/adapters/QCoderAdapter.js +4 -0
  20. package/dist/adapters/QCoderAdapter.js.map +1 -1
  21. package/dist/adapters/TraeAdapter.d.ts +1 -0
  22. package/dist/adapters/TraeAdapter.js +4 -0
  23. package/dist/adapters/TraeAdapter.js.map +1 -1
  24. package/dist/adapters/VSCAdapter.d.ts +1 -0
  25. package/dist/adapters/VSCAdapter.js +4 -0
  26. package/dist/adapters/VSCAdapter.js.map +1 -1
  27. package/dist/adapters/WorkBuddyAdapter.d.ts +1 -0
  28. package/dist/adapters/WorkBuddyAdapter.js +4 -0
  29. package/dist/adapters/WorkBuddyAdapter.js.map +1 -1
  30. package/dist/agents/AgentSourceLoader.js +1 -1
  31. package/dist/agents/AgentSourceLoader.js.map +1 -1
  32. package/dist/agents/types.d.ts +1 -1
  33. package/dist/api/cli.js +236 -5
  34. package/dist/api/cli.js.map +1 -1
  35. package/dist/api/quickstart.d.ts +23 -0
  36. package/dist/api/quickstart.js +57 -0
  37. package/dist/api/quickstart.js.map +1 -0
  38. package/dist/artifact/types.d.ts +9 -1
  39. package/dist/artifact/types.js.map +1 -1
  40. package/dist/capabilities/BrowserCapability.d.ts +30 -0
  41. package/dist/capabilities/BrowserCapability.js +73 -0
  42. package/dist/capabilities/BrowserCapability.js.map +1 -0
  43. package/dist/capabilities/CapabilityRegistry.d.ts +17 -0
  44. package/dist/capabilities/CapabilityRegistry.js +65 -0
  45. package/dist/capabilities/CapabilityRegistry.js.map +1 -0
  46. package/dist/capabilities/ComputerCapability.d.ts +28 -0
  47. package/dist/capabilities/ComputerCapability.js +40 -0
  48. package/dist/capabilities/ComputerCapability.js.map +1 -0
  49. package/dist/capabilities/InstalledSkillsIntegration.d.ts +66 -0
  50. package/dist/capabilities/InstalledSkillsIntegration.js +188 -0
  51. package/dist/capabilities/InstalledSkillsIntegration.js.map +1 -0
  52. package/dist/capabilities/SearchCapability.d.ts +46 -0
  53. package/dist/capabilities/SearchCapability.js +88 -0
  54. package/dist/capabilities/SearchCapability.js.map +1 -0
  55. package/dist/capabilities/index.d.ts +6 -0
  56. package/dist/capabilities/index.js +9 -0
  57. package/dist/capabilities/index.js.map +1 -0
  58. package/dist/capabilities/types.d.ts +92 -0
  59. package/dist/capabilities/types.js +7 -0
  60. package/dist/capabilities/types.js.map +1 -0
  61. package/dist/cli/liteCommands.d.ts +81 -0
  62. package/dist/cli/liteCommands.js +148 -0
  63. package/dist/cli/liteCommands.js.map +1 -0
  64. package/dist/cli/phaseCommands.d.ts +159 -0
  65. package/dist/cli/phaseCommands.js +826 -0
  66. package/dist/cli/phaseCommands.js.map +1 -0
  67. package/dist/core/logger.js +9 -2
  68. package/dist/core/logger.js.map +1 -1
  69. package/dist/hooks/HookGeneratorEnhanced.js +84 -5
  70. package/dist/hooks/HookGeneratorEnhanced.js.map +1 -1
  71. package/dist/hooks/WorkflowHooksManager.d.ts +30 -0
  72. package/dist/hooks/WorkflowHooksManager.js +117 -0
  73. package/dist/hooks/WorkflowHooksManager.js.map +1 -0
  74. package/dist/hooks/index.d.ts +2 -0
  75. package/dist/hooks/index.js +2 -1
  76. package/dist/hooks/index.js.map +1 -1
  77. package/dist/skills/SkillDiscovery.d.ts +27 -1
  78. package/dist/skills/SkillDiscovery.js +106 -11
  79. package/dist/skills/SkillDiscovery.js.map +1 -1
  80. package/dist/skills/SkillExecutor.d.ts +11 -1
  81. package/dist/skills/SkillExecutor.js +160 -5
  82. package/dist/skills/SkillExecutor.js.map +1 -1
  83. package/dist/workflow/EvidenceStore.d.ts +20 -0
  84. package/dist/workflow/EvidenceStore.js +48 -0
  85. package/dist/workflow/EvidenceStore.js.map +1 -0
  86. package/dist/workflow/ReviewAnalyzer.d.ts +28 -0
  87. package/dist/workflow/ReviewAnalyzer.js +80 -0
  88. package/dist/workflow/ReviewAnalyzer.js.map +1 -0
  89. package/dist/workflow/ReviewStore.d.ts +32 -0
  90. package/dist/workflow/ReviewStore.js +42 -0
  91. package/dist/workflow/ReviewStore.js.map +1 -0
  92. package/dist/workflow/VerificationCommands.d.ts +19 -0
  93. package/dist/workflow/VerificationCommands.js +123 -0
  94. package/dist/workflow/VerificationCommands.js.map +1 -0
  95. package/dist/workflow/WorkflowEngine.d.ts +62 -0
  96. package/dist/workflow/WorkflowEngine.js +151 -0
  97. package/dist/workflow/WorkflowEngine.js.map +1 -0
  98. package/dist/workflow/cognitive/AmbiguityScorer.d.ts +17 -0
  99. package/dist/workflow/cognitive/AmbiguityScorer.js +107 -0
  100. package/dist/workflow/cognitive/AmbiguityScorer.js.map +1 -0
  101. package/dist/workflow/cognitive/ConsensusPlanner.d.ts +26 -0
  102. package/dist/workflow/cognitive/ConsensusPlanner.js +141 -0
  103. package/dist/workflow/cognitive/ConsensusPlanner.js.map +1 -0
  104. package/dist/workflow/cognitive/SocraticQuestioner.d.ts +33 -0
  105. package/dist/workflow/cognitive/SocraticQuestioner.js +276 -0
  106. package/dist/workflow/cognitive/SocraticQuestioner.js.map +1 -0
  107. package/dist/workflow/execution/RalphEngine.d.ts +36 -0
  108. package/dist/workflow/execution/RalphEngine.js +123 -0
  109. package/dist/workflow/execution/RalphEngine.js.map +1 -0
  110. package/dist/workflow/execution/UltraworkEngine.d.ts +43 -0
  111. package/dist/workflow/execution/UltraworkEngine.js +135 -0
  112. package/dist/workflow/execution/UltraworkEngine.js.map +1 -0
  113. package/dist/workflow/gates/GateSystem.d.ts +104 -0
  114. package/dist/workflow/gates/GateSystem.js +579 -0
  115. package/dist/workflow/gates/GateSystem.js.map +1 -0
  116. package/dist/workflow/index.d.ts +12 -0
  117. package/dist/workflow/index.js +14 -0
  118. package/dist/workflow/index.js.map +1 -0
  119. package/dist/workflow/quality/HonestDelivery.d.ts +19 -0
  120. package/dist/workflow/quality/HonestDelivery.js +77 -0
  121. package/dist/workflow/quality/HonestDelivery.js.map +1 -0
  122. package/dist/workflow/quality/KarpathyEvaluator.d.ts +18 -0
  123. package/dist/workflow/quality/KarpathyEvaluator.js +76 -0
  124. package/dist/workflow/quality/KarpathyEvaluator.js.map +1 -0
  125. package/dist/workflow/types.d.ts +139 -0
  126. package/dist/workflow/types.js +4 -0
  127. package/dist/workflow/types.js.map +1 -0
  128. package/dist/workflows/DAGBuilder.js +1 -1
  129. package/dist/workflows/DAGBuilder.js.map +1 -1
  130. package/dist/workflows/WorkflowOrchestrator.js +1 -1
  131. package/dist/workflows/WorkflowOrchestrator.js.map +1 -1
  132. package/dist/workflows/index.js +1 -1
  133. package/dist/workflows/index.js.map +1 -1
  134. package/package.json +2 -2
@@ -0,0 +1,123 @@
1
+ // SCALE Engine — Ralph Engine
2
+ // PRD驱动持久执行引擎
3
+ import { HonestDelivery } from '../quality/HonestDelivery.js';
4
+ export class RalphEngine {
5
+ constructor(eventBus) {
6
+ this.prd = null;
7
+ this.maxIterations = 5;
8
+ this.currentIteration = 0;
9
+ this.eventBus = eventBus;
10
+ this.executor = new DefaultStoryExecutor();
11
+ this.verifier = new DefaultStoryVerifier();
12
+ }
13
+ setPRD(prd) {
14
+ this.prd = prd;
15
+ }
16
+ setMaxIterations(n) {
17
+ this.maxIterations = n;
18
+ }
19
+ async run() {
20
+ if (!this.prd) {
21
+ throw new Error('PRD not set');
22
+ }
23
+ this.currentIteration = 0;
24
+ while (!this.allStoriesPassed() && this.currentIteration < this.maxIterations) {
25
+ this.currentIteration++;
26
+ this.eventBus.emit('ralph.iteration', { iteration: this.currentIteration });
27
+ for (const story of this.prd.userStories) {
28
+ if (!story.passes) {
29
+ await this.executeStory(story);
30
+ }
31
+ }
32
+ }
33
+ if (this.allStoriesPassed()) {
34
+ await this.runDeslopPass();
35
+ this.prd.deslopPassed = true;
36
+ }
37
+ this.prd.iterations = this.currentIteration;
38
+ return this.prd;
39
+ }
40
+ async executeStory(story) {
41
+ this.eventBus.emit('ralph.story.start', { storyId: story.id });
42
+ const result = await this.executor.execute(story);
43
+ const verifications = await this.verifier.verify(story, result);
44
+ story.verificationResults = verifications;
45
+ story.passes = verifications.every(v => v.passed);
46
+ this.eventBus.emit('ralph.story.end', { storyId: story.id, passed: story.passes });
47
+ }
48
+ allStoriesPassed() {
49
+ return this.prd?.userStories.every(s => s.passes) ?? false;
50
+ }
51
+ async runDeslopPass() {
52
+ this.eventBus.emit('ralph.deslop.start', {});
53
+ // AI slop cleanup logic
54
+ this.eventBus.emit('ralph.deslop.end', {});
55
+ }
56
+ generateDeliveryReport() {
57
+ if (!this.prd)
58
+ return 'No PRD available';
59
+ const delivery = new HonestDelivery();
60
+ this.prd.userStories.forEach(s => {
61
+ if (s.passes) {
62
+ delivery.addCompleted(s.title);
63
+ s.verificationResults.forEach(v => delivery.addVerified(v));
64
+ }
65
+ else {
66
+ delivery.addBlocker(`Story ${s.id} not passed`);
67
+ }
68
+ });
69
+ return delivery.formatReport(delivery.generate());
70
+ }
71
+ getProgress() {
72
+ if (!this.prd)
73
+ return { total: 0, passed: 0, pending: 0 };
74
+ const total = this.prd.userStories.length;
75
+ const passed = this.prd.userStories.filter(s => s.passes).length;
76
+ return { total, passed, pending: total - passed };
77
+ }
78
+ }
79
+ class DefaultStoryExecutor {
80
+ async execute(story) {
81
+ return { executed: true, storyId: story.id };
82
+ }
83
+ }
84
+ class DefaultStoryVerifier {
85
+ async verify(story, _result) {
86
+ return story.acceptanceCriteria.map(criterion => ({
87
+ criterion,
88
+ passed: true,
89
+ evidence: 'Verified by default verifier'
90
+ }));
91
+ }
92
+ }
93
+ export class PRDManager {
94
+ constructor() {
95
+ this.prds = new Map();
96
+ }
97
+ createPRD(title, stories) {
98
+ const prd = {
99
+ id: `prd-${Date.now()}`,
100
+ title,
101
+ userStories: stories,
102
+ allStoriesPassed: false,
103
+ deslopPassed: false,
104
+ iterations: 0
105
+ };
106
+ this.prds.set(prd.id, prd);
107
+ return prd;
108
+ }
109
+ getPRD(id) {
110
+ return this.prds.get(id);
111
+ }
112
+ updatePRD(id, updates) {
113
+ const prd = this.prds.get(id);
114
+ if (prd) {
115
+ Object.assign(prd, updates);
116
+ }
117
+ return prd;
118
+ }
119
+ listPRDs() {
120
+ return Array.from(this.prds.values());
121
+ }
122
+ }
123
+ //# sourceMappingURL=RalphEngine.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RalphEngine.js","sourceRoot":"","sources":["../../../src/workflow/execution/RalphEngine.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,43 @@
1
+ import type { IEventBus } from '../../core/eventBus.js';
2
+ import type { TaskDefinition, ModelTier } from '../types.js';
3
+ export interface ITaskRunner {
4
+ run(task: TaskDefinition): Promise<{
5
+ success: boolean;
6
+ output?: unknown;
7
+ error?: string;
8
+ }>;
9
+ }
10
+ export declare class UltraworkEngine {
11
+ private eventBus;
12
+ private tasks;
13
+ private runners;
14
+ private results;
15
+ constructor(eventBus: IEventBus);
16
+ addTask(task: TaskDefinition): void;
17
+ addTasks(tasks: TaskDefinition[]): void;
18
+ executeAll(): Promise<Map<string, {
19
+ success: boolean;
20
+ output?: unknown;
21
+ error?: string;
22
+ }>>;
23
+ executeParallel(): Promise<Map<string, {
24
+ success: boolean;
25
+ output?: unknown;
26
+ error?: string;
27
+ }>>;
28
+ private sortByDependencies;
29
+ private canExecute;
30
+ private executeTask;
31
+ getResults(): Map<string, {
32
+ success: boolean;
33
+ output?: unknown;
34
+ error?: string;
35
+ }>;
36
+ getTask(id: string): TaskDefinition | undefined;
37
+ clear(): void;
38
+ }
39
+ export declare class ModelRouter {
40
+ private taskComplexityThresholds;
41
+ route(taskType: string): ModelTier;
42
+ routeByComplexity(complexity: 'simple' | 'moderate' | 'complex'): ModelTier;
43
+ }
@@ -0,0 +1,135 @@
1
+ // SCALE Engine — Ultrawork Engine
2
+ // 并行执行引擎 (模型路由)
3
+ export class UltraworkEngine {
4
+ constructor(eventBus) {
5
+ this.tasks = new Map();
6
+ this.runners = new Map();
7
+ this.results = new Map();
8
+ this.eventBus = eventBus;
9
+ this.runners.set('LOW', new LowTierRunner());
10
+ this.runners.set('MEDIUM', new MediumTierRunner());
11
+ this.runners.set('HIGH', new HighTierRunner());
12
+ }
13
+ addTask(task) {
14
+ this.tasks.set(task.id, task);
15
+ }
16
+ addTasks(tasks) {
17
+ tasks.forEach(t => this.addTask(t));
18
+ }
19
+ async executeAll() {
20
+ const sortedTasks = this.sortByDependencies();
21
+ for (const task of sortedTasks) {
22
+ if (this.canExecute(task)) {
23
+ await this.executeTask(task);
24
+ }
25
+ }
26
+ return this.results;
27
+ }
28
+ async executeParallel() {
29
+ const independentTasks = Array.from(this.tasks.values())
30
+ .filter(t => t.dependencies.length === 0 && t.status === 'PENDING');
31
+ await Promise.all(independentTasks.map(t => this.executeTask(t)));
32
+ // Then execute dependent tasks
33
+ const dependentTasks = Array.from(this.tasks.values())
34
+ .filter(t => t.dependencies.length > 0 && t.status === 'PENDING');
35
+ for (const task of dependentTasks) {
36
+ if (this.canExecute(task)) {
37
+ await this.executeTask(task);
38
+ }
39
+ }
40
+ return this.results;
41
+ }
42
+ sortByDependencies() {
43
+ const sorted = [];
44
+ const visited = new Set();
45
+ const visit = (taskId) => {
46
+ if (visited.has(taskId))
47
+ return;
48
+ visited.add(taskId);
49
+ const task = this.tasks.get(taskId);
50
+ if (task) {
51
+ task.dependencies.forEach(d => visit(d));
52
+ sorted.push(task);
53
+ }
54
+ };
55
+ for (const taskId of this.tasks.keys()) {
56
+ visit(taskId);
57
+ }
58
+ return sorted;
59
+ }
60
+ canExecute(task) {
61
+ return task.dependencies.every(depId => {
62
+ const depResult = this.results.get(depId);
63
+ return depResult?.success === true;
64
+ });
65
+ }
66
+ async executeTask(task) {
67
+ task.status = 'RUNNING';
68
+ this.eventBus.emit('ultrawork.task.start', { taskId: task.id, tier: task.tier });
69
+ const runner = this.runners.get(task.tier);
70
+ if (!runner) {
71
+ task.status = 'FAILED';
72
+ this.results.set(task.id, { success: false, error: 'No runner for tier' });
73
+ return;
74
+ }
75
+ try {
76
+ const result = await runner.run(task);
77
+ task.status = result.success ? 'COMPLETED' : 'FAILED';
78
+ this.results.set(task.id, result);
79
+ this.eventBus.emit('ultrawork.task.end', { taskId: task.id, success: result.success });
80
+ }
81
+ catch (e) {
82
+ task.status = 'FAILED';
83
+ this.results.set(task.id, { success: false, error: String(e) });
84
+ }
85
+ }
86
+ getResults() {
87
+ return this.results;
88
+ }
89
+ getTask(id) {
90
+ return this.tasks.get(id);
91
+ }
92
+ clear() {
93
+ this.tasks.clear();
94
+ this.results.clear();
95
+ }
96
+ }
97
+ class LowTierRunner {
98
+ async run(task) {
99
+ return { success: true, output: { task: task.id, tier: 'LOW', result: 'quick lookup completed' } };
100
+ }
101
+ }
102
+ class MediumTierRunner {
103
+ async run(task) {
104
+ return { success: true, output: { task: task.id, tier: 'MEDIUM', result: 'standard execution completed' } };
105
+ }
106
+ }
107
+ class HighTierRunner {
108
+ async run(task) {
109
+ return { success: true, output: { task: task.id, tier: 'HIGH', result: 'deep analysis completed' } };
110
+ }
111
+ }
112
+ export class ModelRouter {
113
+ constructor() {
114
+ this.taskComplexityThresholds = {
115
+ quickLookup: 'LOW',
116
+ codeGeneration: 'MEDIUM',
117
+ architectureDecision: 'HIGH',
118
+ securityAnalysis: 'HIGH',
119
+ debugging: 'MEDIUM',
120
+ refactoring: 'MEDIUM'
121
+ };
122
+ }
123
+ route(taskType) {
124
+ const tier = this.taskComplexityThresholds[taskType];
125
+ return tier || 'MEDIUM';
126
+ }
127
+ routeByComplexity(complexity) {
128
+ switch (complexity) {
129
+ case 'simple': return 'LOW';
130
+ case 'moderate': return 'MEDIUM';
131
+ case 'complex': return 'HIGH';
132
+ }
133
+ }
134
+ }
135
+ //# sourceMappingURL=UltraworkEngine.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"UltraworkEngine.js","sourceRoot":"","sources":["../../../src/workflow/execution/UltraworkEngine.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,104 @@
1
+ import type { IEventBus } from '../../core/eventBus.js';
2
+ import type { GateStage, GateResult } from '../types.js';
3
+ import { type ResolvedVerificationCommand, type VerificationCommandConfig } from '../VerificationCommands.js';
4
+ export interface IGate {
5
+ stage: GateStage;
6
+ name: string;
7
+ description: string;
8
+ requiredLevel: 'S' | 'M' | 'L' | 'ALWAYS' | 'CRITICAL';
9
+ execute(): Promise<GateResult>;
10
+ }
11
+ type RequiredLevel = 'S' | 'M' | 'L' | 'ALWAYS' | 'CRITICAL';
12
+ interface CommandResult {
13
+ code: number;
14
+ stdout: string;
15
+ stderr: string;
16
+ durationMs: number;
17
+ }
18
+ export declare function runShellCommand(command: string, timeout: number): Promise<CommandResult>;
19
+ export declare class GateSystem {
20
+ private eventBus;
21
+ private gates;
22
+ private results;
23
+ private evidenceStore;
24
+ private commands;
25
+ constructor(eventBus: IEventBus, commandConfig?: VerificationCommandConfig);
26
+ registerGate(gate: IGate): void;
27
+ executeGate(stage: GateStage): Promise<GateResult>;
28
+ private persistEvidence;
29
+ executeAll(order?: GateStage[]): Promise<GateResult[]>;
30
+ getResult(stage: GateStage): GateResult | undefined;
31
+ getAllResults(): Map<GateStage, GateResult>;
32
+ private registerDefaultGates;
33
+ }
34
+ export declare class ExplorationGate implements IGate {
35
+ stage: GateStage;
36
+ name: string;
37
+ description: string;
38
+ requiredLevel: RequiredLevel;
39
+ execute(): Promise<GateResult>;
40
+ private findKnowledgeFile;
41
+ private checkKnowledgeGraph;
42
+ }
43
+ export declare class PlanningGate implements IGate {
44
+ stage: GateStage;
45
+ name: string;
46
+ description: string;
47
+ requiredLevel: RequiredLevel;
48
+ execute(): Promise<GateResult>;
49
+ private checkSpecDocument;
50
+ }
51
+ export declare class TDDGate implements IGate {
52
+ stage: GateStage;
53
+ name: string;
54
+ description: string;
55
+ requiredLevel: RequiredLevel;
56
+ execute(): Promise<GateResult>;
57
+ }
58
+ export declare class BuildGate implements IGate {
59
+ private command;
60
+ stage: GateStage;
61
+ name: string;
62
+ description: string;
63
+ requiredLevel: RequiredLevel;
64
+ constructor(command: ResolvedVerificationCommand);
65
+ execute(): Promise<GateResult>;
66
+ }
67
+ export declare class LintGate implements IGate {
68
+ private command;
69
+ stage: GateStage;
70
+ name: string;
71
+ description: string;
72
+ requiredLevel: RequiredLevel;
73
+ constructor(command: ResolvedVerificationCommand);
74
+ execute(): Promise<GateResult>;
75
+ }
76
+ export declare class TestGate implements IGate {
77
+ private command;
78
+ stage: GateStage;
79
+ name: string;
80
+ description: string;
81
+ requiredLevel: RequiredLevel;
82
+ constructor(command: ResolvedVerificationCommand);
83
+ execute(): Promise<GateResult>;
84
+ }
85
+ export declare class CoverageGate implements IGate {
86
+ private command;
87
+ stage: GateStage;
88
+ name: string;
89
+ description: string;
90
+ requiredLevel: RequiredLevel;
91
+ constructor(command: ResolvedVerificationCommand);
92
+ execute(): Promise<GateResult>;
93
+ }
94
+ export declare class SecurityGate implements IGate {
95
+ stage: GateStage;
96
+ name: string;
97
+ description: string;
98
+ requiredLevel: RequiredLevel;
99
+ execute(): Promise<GateResult>;
100
+ private detectSecrets;
101
+ private walkDir;
102
+ private containsSecret;
103
+ }
104
+ export {};