@hongmaple0820/scale-engine 0.47.0 → 0.49.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 (128) hide show
  1. package/README.en.md +8 -2
  2. package/README.md +9 -3
  3. package/dist/agents/evidenceDiscipline.d.ts +7 -0
  4. package/dist/agents/evidenceDiscipline.js +21 -0
  5. package/dist/agents/evidenceDiscipline.js.map +1 -0
  6. package/dist/agents/profiles.js +8 -1
  7. package/dist/agents/profiles.js.map +1 -1
  8. package/dist/agents/types.d.ts +1 -0
  9. package/dist/api/cli.js +975 -6222
  10. package/dist/api/cli.js.map +1 -1
  11. package/dist/artifact/types.d.ts +59 -0
  12. package/dist/artifact/types.js.map +1 -1
  13. package/dist/cli/artifactCrudCommands.d.ts +67 -0
  14. package/dist/cli/artifactCrudCommands.js +182 -0
  15. package/dist/cli/artifactCrudCommands.js.map +1 -0
  16. package/dist/cli/codegraphCommands.d.ts +1 -0
  17. package/dist/cli/codegraphCommands.js +241 -0
  18. package/dist/cli/codegraphCommands.js.map +1 -0
  19. package/dist/cli/contextCommands.d.ts +1 -0
  20. package/dist/cli/contextCommands.js +415 -0
  21. package/dist/cli/contextCommands.js.map +1 -0
  22. package/dist/cli/cortexCommands.d.ts +36 -0
  23. package/dist/cli/cortexCommands.js +76 -4
  24. package/dist/cli/cortexCommands.js.map +1 -1
  25. package/dist/cli/dependencyTddCommands.d.ts +92 -0
  26. package/dist/cli/dependencyTddCommands.js +174 -0
  27. package/dist/cli/dependencyTddCommands.js.map +1 -0
  28. package/dist/cli/diagnoseHuntCommands.d.ts +135 -0
  29. package/dist/cli/diagnoseHuntCommands.js +224 -0
  30. package/dist/cli/diagnoseHuntCommands.js.map +1 -0
  31. package/dist/cli/engineBootstrap.d.ts +39 -0
  32. package/dist/cli/engineBootstrap.js +129 -0
  33. package/dist/cli/engineBootstrap.js.map +1 -0
  34. package/dist/cli/evalCommands.d.ts +1 -0
  35. package/dist/cli/evalCommands.js +273 -0
  36. package/dist/cli/evalCommands.js.map +1 -0
  37. package/dist/cli/evolveDoctorCommands.d.ts +18 -0
  38. package/dist/cli/evolveDoctorCommands.js +59 -0
  39. package/dist/cli/evolveDoctorCommands.js.map +1 -0
  40. package/dist/cli/gateInlineCommands.d.ts +43 -0
  41. package/dist/cli/gateInlineCommands.js +74 -0
  42. package/dist/cli/gateInlineCommands.js.map +1 -0
  43. package/dist/cli/initConfigCommands.d.ts +138 -0
  44. package/dist/cli/initConfigCommands.js +602 -0
  45. package/dist/cli/initConfigCommands.js.map +1 -0
  46. package/dist/cli/metaGovernanceCommands.d.ts +11 -0
  47. package/dist/cli/metaGovernanceCommands.js +55 -0
  48. package/dist/cli/metaGovernanceCommands.js.map +1 -0
  49. package/dist/cli/phaseCommands.d.ts +53 -1
  50. package/dist/cli/phaseCommands.js +317 -22
  51. package/dist/cli/phaseCommands.js.map +1 -1
  52. package/dist/cli/runtimeSkillCommands.d.ts +6 -0
  53. package/dist/cli/runtimeSkillCommands.js +1515 -0
  54. package/dist/cli/runtimeSkillCommands.js.map +1 -0
  55. package/dist/cli/sessionCommands.d.ts +17 -0
  56. package/dist/cli/sessionCommands.js +38 -0
  57. package/dist/cli/sessionCommands.js.map +1 -0
  58. package/dist/cli/toolAgentCommands.d.ts +3 -0
  59. package/dist/cli/toolAgentCommands.js +441 -0
  60. package/dist/cli/toolAgentCommands.js.map +1 -0
  61. package/dist/cli/transitionCommands.d.ts +62 -0
  62. package/dist/cli/transitionCommands.js +174 -0
  63. package/dist/cli/transitionCommands.js.map +1 -0
  64. package/dist/cli/upgradeAssetsCommands.d.ts +44 -0
  65. package/dist/cli/upgradeAssetsCommands.js +933 -0
  66. package/dist/cli/upgradeAssetsCommands.js.map +1 -0
  67. package/dist/cli/workflowEvidenceCommands.d.ts +34 -0
  68. package/dist/cli/workflowEvidenceCommands.js +130 -0
  69. package/dist/cli/workflowEvidenceCommands.js.map +1 -0
  70. package/dist/cortex/InstinctStore.d.ts +32 -1
  71. package/dist/cortex/InstinctStore.js +235 -42
  72. package/dist/cortex/InstinctStore.js.map +1 -1
  73. package/dist/cortex/InstinctValidation.d.ts +9 -0
  74. package/dist/cortex/InstinctValidation.js +55 -0
  75. package/dist/cortex/InstinctValidation.js.map +1 -0
  76. package/dist/cortex/SessionInjector.js +13 -6
  77. package/dist/cortex/SessionInjector.js.map +1 -1
  78. package/dist/eval/BenchmarkPublisher.d.ts +2 -0
  79. package/dist/eval/BenchmarkPublisher.js +43 -0
  80. package/dist/eval/BenchmarkPublisher.js.map +1 -1
  81. package/dist/guardrails/ast/confirmers.d.ts +18 -0
  82. package/dist/guardrails/ast/confirmers.js +69 -0
  83. package/dist/guardrails/ast/confirmers.js.map +1 -0
  84. package/dist/guardrails/ast/parse.d.ts +20 -0
  85. package/dist/guardrails/ast/parse.js +51 -0
  86. package/dist/guardrails/ast/parse.js.map +1 -0
  87. package/dist/output/HTMLDocumentRenderer.d.ts +9 -0
  88. package/dist/output/HTMLDocumentRenderer.js +19 -0
  89. package/dist/output/HTMLDocumentRenderer.js.map +1 -1
  90. package/dist/review/FreshContextVerifier.d.ts +35 -0
  91. package/dist/review/FreshContextVerifier.js +120 -0
  92. package/dist/review/FreshContextVerifier.js.map +1 -0
  93. package/dist/review/JsonLlmClient.d.ts +37 -0
  94. package/dist/review/JsonLlmClient.js +94 -0
  95. package/dist/review/JsonLlmClient.js.map +1 -0
  96. package/dist/review/LlmJudge.d.ts +61 -0
  97. package/dist/review/LlmJudge.js +167 -0
  98. package/dist/review/LlmJudge.js.map +1 -0
  99. package/dist/version.d.ts +1 -1
  100. package/dist/version.js +1 -1
  101. package/dist/workflow/BoundaryEnforcement.d.ts +60 -0
  102. package/dist/workflow/BoundaryEnforcement.js +182 -0
  103. package/dist/workflow/BoundaryEnforcement.js.map +1 -0
  104. package/dist/workflow/EngineeringStandards.js +19 -9
  105. package/dist/workflow/EngineeringStandards.js.map +1 -1
  106. package/dist/workflow/GateCatalog.js +12 -2
  107. package/dist/workflow/GateCatalog.js.map +1 -1
  108. package/dist/workflow/ProfileEnforcement.d.ts +7 -0
  109. package/dist/workflow/ProfileEnforcement.js +12 -0
  110. package/dist/workflow/ProfileEnforcement.js.map +1 -0
  111. package/dist/workflow/ReviewStore.d.ts +10 -0
  112. package/dist/workflow/ReviewStore.js.map +1 -1
  113. package/dist/workflow/SurfaceCoverage.d.ts +19 -0
  114. package/dist/workflow/SurfaceCoverage.js +57 -0
  115. package/dist/workflow/SurfaceCoverage.js.map +1 -0
  116. package/dist/workflow/gates/EnhancedGates.js +2 -0
  117. package/dist/workflow/gates/EnhancedGates.js.map +1 -1
  118. package/dist/workflow/gates/TestIntegrityGate.d.ts +51 -0
  119. package/dist/workflow/gates/TestIntegrityGate.js +175 -0
  120. package/dist/workflow/gates/TestIntegrityGate.js.map +1 -0
  121. package/dist/workflow/types.d.ts +1 -1
  122. package/docs/guides/DEVELOPMENT_WORKFLOW.md +28 -0
  123. package/docs/workflow/E2E_EXAMPLE.md +133 -0
  124. package/docs/workflow/README.md +6 -0
  125. package/docs/workflow/TEMPLATE_GUIDE.md +162 -0
  126. package/docs/workflow/templates/plan.md +26 -0
  127. package/docs/workflow/templates/spec.md +28 -0
  128. package/package.json +3 -1
@@ -0,0 +1,224 @@
1
+ // SCALE Engine — Diagnose and Hunt Commands
2
+ import { defineCommand } from 'citty';
3
+ import { SCALE_DIR, PROJECT_DIR, isTruthyFlag } from './engineBootstrap.js';
4
+ import { WorkflowArtifactWriter } from '../workflow/WorkflowArtifactWriter.js';
5
+ import { createDiagnosticLoop, renderDiagnosticLoopMarkdown, validateDiagnosticLoop, } from '../workflow/DiagnosticLoop.js';
6
+ import { BackgroundHunter, HuntFindingStore } from '../workflow/autonomous/BackgroundHunter.js';
7
+ import { removeWorkflowOpenTask } from '../workflow/WorkflowOpenTasks.js';
8
+ import { appendDiagnosticLoopArtifact } from '../workflow/TaskArtifactScaffolder.js';
9
+ function parseCommaList(value) {
10
+ if (value === undefined || value === null || value === '')
11
+ return [];
12
+ return String(value).split(',').map(s => s.trim()).filter(s => s.length > 0);
13
+ }
14
+ function uniqueStrings(items) {
15
+ return [...new Set(items)];
16
+ }
17
+ function resolveChangedFilesArg(args) {
18
+ if (args['changed-files'])
19
+ return parseCommaList(args['changed-files']);
20
+ if (!args.changed)
21
+ return undefined;
22
+ return undefined;
23
+ }
24
+ export const diagnosePlanCommand = defineCommand({
25
+ meta: { name: 'plan', description: 'Create a reproducible diagnostic loop before fixing a bug' },
26
+ args: {
27
+ 'task-id': { type: 'string', required: true },
28
+ symptom: { type: 'string', required: true },
29
+ repro: { type: 'string', description: 'Command that reproduces the current failure' },
30
+ 'expected-failure': { type: 'string', description: 'Expected failing behavior or assertion' },
31
+ files: { type: 'string', description: 'Comma-separated changed or suspicious files' },
32
+ verify: { type: 'string', description: 'Comma-separated verification commands after the fix' },
33
+ 'artifact-dir': { type: 'string', description: 'Task artifact directory where plan.md should be updated' },
34
+ write: { type: 'boolean', default: false, description: 'Append diagnostic loop output to the task plan artifact' },
35
+ json: { type: 'boolean', default: false },
36
+ },
37
+ run({ args }) {
38
+ const changedFiles = parseCommaList(args.files);
39
+ const loop = createDiagnosticLoop({
40
+ taskId: String(args['task-id']),
41
+ symptom: String(args.symptom),
42
+ reproductionCommand: args.repro ? String(args.repro) : undefined,
43
+ expectedFailure: args['expected-failure'] ? String(args['expected-failure']) : undefined,
44
+ changedFiles,
45
+ verificationCommands: parseCommaList(args.verify),
46
+ });
47
+ const validation = validateDiagnosticLoop(loop);
48
+ const artifactPath = isTruthyFlag(args.write)
49
+ ? appendDiagnosticLoopArtifact({
50
+ projectDir: PROJECT_DIR,
51
+ artifactsDir: args['artifact-dir'] ? String(args['artifact-dir']) : undefined,
52
+ loop,
53
+ validation,
54
+ }) ?? undefined
55
+ : undefined;
56
+ if (artifactPath || args['artifact-dir']) {
57
+ const writer = new WorkflowArtifactWriter(SCALE_DIR);
58
+ const current = writer.readCurrentState();
59
+ const currentOpenTasks = current?.taskId === loop.taskId ? current.openTasks : [];
60
+ writer.updateCurrentState({
61
+ taskId: loop.taskId,
62
+ phase: 'plan',
63
+ artifactsDir: args['artifact-dir'] ? String(args['artifact-dir']).replace(/\\/g, '/') : undefined,
64
+ filesModified: changedFiles,
65
+ openTasks: validation.ready
66
+ ? removeWorkflowOpenTask(currentOpenTasks.filter(task => task.trim().startsWith('scale ')), 'diagnostic-loop')
67
+ : uniqueStrings([
68
+ ...currentOpenTasks,
69
+ ...validation.blockers,
70
+ ]),
71
+ });
72
+ }
73
+ if (args.json) {
74
+ console.log(JSON.stringify({ loop, validation, artifactPath }, null, 2));
75
+ return;
76
+ }
77
+ console.log(renderDiagnosticLoopMarkdown(loop));
78
+ if (!validation.ready) {
79
+ console.log('\nBlockers:');
80
+ for (const blocker of validation.blockers)
81
+ console.log(` - ${blocker}`);
82
+ }
83
+ if (artifactPath)
84
+ console.log(`\nArtifact: ${artifactPath}`);
85
+ },
86
+ });
87
+ export const diagnoseCommand = defineCommand({
88
+ meta: { name: 'diagnose', description: 'Evidence-first debugging workflows' },
89
+ subCommands: { plan: diagnosePlanCommand },
90
+ });
91
+ function createBackgroundHunter(args) {
92
+ return new BackgroundHunter({ projectDir: args.dir ? String(args.dir) : PROJECT_DIR });
93
+ }
94
+ export const huntScanCommand = defineCommand({
95
+ meta: { name: 'scan', description: 'Run a readonly proactive governance scan' },
96
+ args: {
97
+ dir: { type: 'string', default: PROJECT_DIR, description: 'Project directory' },
98
+ changed: { type: 'boolean', default: false, description: 'Scan changed Git files only' },
99
+ 'changed-files': { type: 'string', description: 'Comma or newline separated file list to scan' },
100
+ json: { type: 'boolean', default: false },
101
+ },
102
+ run({ args }) {
103
+ const report = createBackgroundHunter(args).scan({
104
+ changedFiles: resolveChangedFilesArg(args),
105
+ });
106
+ if (args.json) {
107
+ console.log(JSON.stringify(report, null, 2));
108
+ return;
109
+ }
110
+ printHuntReport(report);
111
+ },
112
+ });
113
+ export const huntReportCommand = defineCommand({
114
+ meta: { name: 'report', description: 'Print open and ignored hunt findings' },
115
+ args: {
116
+ dir: { type: 'string', default: PROJECT_DIR, description: 'Project directory' },
117
+ changed: { type: 'boolean', default: false, description: 'Scan changed Git files only' },
118
+ 'changed-files': { type: 'string', description: 'Comma or newline separated file list to scan' },
119
+ json: { type: 'boolean', default: false },
120
+ },
121
+ run({ args }) {
122
+ const report = createBackgroundHunter(args).scan({
123
+ changedFiles: resolveChangedFilesArg(args),
124
+ });
125
+ if (args.json) {
126
+ console.log(JSON.stringify(report, null, 2));
127
+ return;
128
+ }
129
+ printHuntReport(report);
130
+ },
131
+ });
132
+ export const huntDiagnoseCommand = defineCommand({
133
+ meta: { name: 'diagnose', description: 'Create a diagnostic loop from a hunt finding' },
134
+ args: {
135
+ id: { type: 'positional', required: true, description: 'Hunt finding id' },
136
+ dir: { type: 'string', default: PROJECT_DIR, description: 'Project directory' },
137
+ changed: { type: 'boolean', default: false, description: 'Scan changed Git files only' },
138
+ 'changed-files': { type: 'string', description: 'Comma or newline separated file list to scan' },
139
+ json: { type: 'boolean', default: false },
140
+ },
141
+ run({ args }) {
142
+ const report = createBackgroundHunter(args).scan({
143
+ changedFiles: resolveChangedFilesArg(args),
144
+ });
145
+ const finding = report.findings.find(item => item.id === String(args.id));
146
+ if (!finding) {
147
+ console.error(`Hunt finding not found: ${String(args.id)}`);
148
+ process.exitCode = 1;
149
+ return;
150
+ }
151
+ const loop = createDiagnosticLoop(finding.diagnosticInput);
152
+ const validation = validateDiagnosticLoop(loop);
153
+ if (args.json) {
154
+ console.log(JSON.stringify({ finding, loop, validation }, null, 2));
155
+ return;
156
+ }
157
+ console.log(renderDiagnosticLoopMarkdown(loop));
158
+ if (!validation.ready) {
159
+ console.log('\nBlockers:');
160
+ for (const blocker of validation.blockers)
161
+ console.log(` - ${blocker}`);
162
+ }
163
+ },
164
+ });
165
+ export const huntIgnoreCommand = defineCommand({
166
+ meta: { name: 'ignore', description: 'Ignore a stable hunt finding fingerprint' },
167
+ args: {
168
+ id: { type: 'positional', required: true, description: 'Hunt finding id' },
169
+ reason: { type: 'string', description: 'Why this finding is accepted or deferred' },
170
+ dir: { type: 'string', default: PROJECT_DIR, description: 'Project directory' },
171
+ changed: { type: 'boolean', default: false, description: 'Scan changed Git files only' },
172
+ 'changed-files': { type: 'string', description: 'Comma or newline separated file list to scan' },
173
+ json: { type: 'boolean', default: false },
174
+ },
175
+ run({ args }) {
176
+ const projectDir = args.dir ? String(args.dir) : PROJECT_DIR;
177
+ const report = new BackgroundHunter({ projectDir }).scan({
178
+ changedFiles: resolveChangedFilesArg(args),
179
+ });
180
+ const finding = report.findings.find(item => item.id === String(args.id));
181
+ if (!finding) {
182
+ console.error(`Hunt finding not found: ${String(args.id)}`);
183
+ process.exitCode = 1;
184
+ return;
185
+ }
186
+ const ignored = new HuntFindingStore({ projectDir }).ignore({
187
+ id: finding.id,
188
+ fingerprint: finding.fingerprint,
189
+ reason: args.reason ? String(args.reason) : undefined,
190
+ ignoredAt: new Date().toISOString(),
191
+ });
192
+ if (args.json) {
193
+ console.log(JSON.stringify({ ignored }, null, 2));
194
+ return;
195
+ }
196
+ console.log(`Ignored hunt finding: ${ignored.id}`);
197
+ if (ignored.reason)
198
+ console.log(` Reason: ${ignored.reason}`);
199
+ },
200
+ });
201
+ export const huntCommand = defineCommand({
202
+ meta: { name: 'hunt', description: 'Readonly proactive governance scans' },
203
+ subCommands: {
204
+ scan: huntScanCommand,
205
+ report: huntReportCommand,
206
+ diagnose: huntDiagnoseCommand,
207
+ ignore: huntIgnoreCommand,
208
+ },
209
+ });
210
+ function printHuntReport(report) {
211
+ console.log('SCALE Hunt Report');
212
+ console.log(` Project: ${report.projectDir}`);
213
+ console.log(` Open findings: ${report.summary.open}`);
214
+ console.log(` Ignored findings: ${report.summary.ignored}`);
215
+ console.log(` Blocking findings: ${report.summary.blocking}`);
216
+ for (const finding of report.findings.slice(0, 20)) {
217
+ const line = finding.line ? `:${finding.line}` : '';
218
+ const status = finding.status === 'ignored' ? 'IGNORED' : finding.severity.toUpperCase();
219
+ console.log(` [${status}] ${finding.id} ${finding.ruleId} ${finding.path ?? 'project'}${line}: ${finding.message}`);
220
+ }
221
+ if (report.findings.length > 20)
222
+ console.log(` ... ${report.findings.length - 20} more finding(s)`);
223
+ }
224
+ //# sourceMappingURL=diagnoseHuntCommands.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"diagnoseHuntCommands.js","sourceRoot":"","sources":["../../src/cli/diagnoseHuntCommands.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,39 @@
1
+ import { EventBus } from '../core/eventBus.js';
2
+ import { SQLiteArtifactStore } from '../artifact/sqliteStore.js';
3
+ import { FSM } from '../artifact/fsm.js';
4
+ import { Gateway } from '../guardrails/Gateway.js';
5
+ import { RoleGateDetector } from '../guardrails/advancedDetectors.js';
6
+ import { GraphifyKnowledgeBase } from '../knowledge/GraphifyKnowledgeBase.js';
7
+ import { ContextBuilder } from '../context/ContextBuilder.js';
8
+ import { FSMAgentBridge } from '../fsm/FSMAgentBridge.js';
9
+ import { WorkflowEngine } from '../workflow/WorkflowEngine.js';
10
+ import type { GateStage } from '../workflow/types.js';
11
+ import type { GovernanceMode } from '../workflow/GovernanceTemplates.js';
12
+ import type { TddCommandEvidence } from '../workflow/TddLoop.js';
13
+ export declare const SCALE_DIR: string;
14
+ export declare const PROJECT_DIR: string;
15
+ export declare const DB_PATH: string;
16
+ export declare function ensureDir(dir: string): void;
17
+ export declare function isTruthyFlag(value: unknown): boolean;
18
+ export declare function governanceModeFromScenario(scenario: string): GovernanceMode;
19
+ export declare function profileFromScenario(scenario: string): string;
20
+ export declare function writeConfigYaml(projectDir: string, profileId: string, projectName: string, agents: string[]): string;
21
+ export declare function commandEvidence(command: string, exitCode: unknown, summary: unknown): TddCommandEvidence | undefined;
22
+ export type PreflightProfile = 'quick' | 'full' | 'ci';
23
+ export declare function normalizePreflightProfile(value: unknown): PreflightProfile;
24
+ export declare function gatesForPreflightProfile(profile: PreflightProfile): GateStage[];
25
+ export declare function resolveScaleDirForProject(projectDir: string): string;
26
+ interface Engine {
27
+ eventBus: EventBus;
28
+ store: SQLiteArtifactStore;
29
+ fsm: FSM;
30
+ gateway: Gateway;
31
+ roleGate: RoleGateDetector;
32
+ kb: GraphifyKnowledgeBase;
33
+ ctx: ContextBuilder;
34
+ fsmAgentBridge: FSMAgentBridge;
35
+ workflowEngine: WorkflowEngine;
36
+ }
37
+ export declare function getEngine(): Engine;
38
+ export declare function createVerificationWorkflowEngine(scaleDir: string): WorkflowEngine;
39
+ export {};
@@ -0,0 +1,129 @@
1
+ // SCALE Engine — CLI Engine Bootstrap (shared singleton)
2
+ // All command modules import getEngine() from here instead of creating their own instances.
3
+ import { existsSync, mkdirSync, writeFileSync } from 'node:fs';
4
+ import { isAbsolute, join } from 'node:path';
5
+ import { EventBus } from '../core/eventBus.js';
6
+ import { SQLiteArtifactStore } from '../artifact/sqliteStore.js';
7
+ import { FSM } from '../artifact/fsm.js';
8
+ import { registerAllFSMs } from '../artifact/fsmDefinitions.js';
9
+ import { Gateway } from '../guardrails/Gateway.js';
10
+ import { BruteRetryDetector, PrematureDoneDetector, BlameShiftDetector } from '../guardrails/detectors.js';
11
+ import { DangerousCommandDetector, SecretLeakDetector, RoleGateDetector, ScopeCreepDetector } from '../guardrails/advancedDetectors.js';
12
+ import { GraphifyKnowledgeBase } from '../knowledge/GraphifyKnowledgeBase.js';
13
+ import { ContextBuilder } from '../context/ContextBuilder.js';
14
+ import { FSMAgentBridge } from '../fsm/FSMAgentBridge.js';
15
+ import { CapabilityRegistry } from '../capabilities/CapabilityRegistry.js';
16
+ import { SkillRegistry } from '../skills/SkillRegistry.js';
17
+ import { registerCoreSkills } from '../skills/coreSkills.js';
18
+ import { registerExternalSkills } from '../skills/ExternalSkills.js';
19
+ import { WorkflowEngine } from '../workflow/WorkflowEngine.js';
20
+ import { generateConfigForProfile } from '../config/profiles.js';
21
+ export const SCALE_DIR = process.env.SCALE_DIR ?? '.scale';
22
+ export const PROJECT_DIR = process.env.SCALE_PROJECT_DIR ?? process.cwd();
23
+ export const DB_PATH = join(SCALE_DIR, 'scale.db');
24
+ export function ensureDir(dir) {
25
+ if (!existsSync(dir))
26
+ mkdirSync(dir, { recursive: true });
27
+ }
28
+ export function isTruthyFlag(value) {
29
+ return value === true || value === '' || value === 'true' || value === '1';
30
+ }
31
+ export function governanceModeFromScenario(scenario) {
32
+ if (scenario === 'critical')
33
+ return 'critical';
34
+ if (scenario === 'sandbox')
35
+ return 'minimal';
36
+ return 'standard';
37
+ }
38
+ export function profileFromScenario(scenario) {
39
+ if (scenario === 'sandbox')
40
+ return 'minimal';
41
+ if (scenario === 'critical')
42
+ return 'advanced';
43
+ return 'standard';
44
+ }
45
+ export function writeConfigYaml(projectDir, profileId, projectName, agents) {
46
+ const configPath = join(projectDir, '.scale', 'config.yaml');
47
+ const content = generateConfigForProfile(profileId, { name: projectName, agents });
48
+ writeFileSync(configPath, content, 'utf-8');
49
+ return configPath;
50
+ }
51
+ export function commandEvidence(command, exitCode, summary) {
52
+ if (exitCode === undefined || exitCode === null || exitCode === '')
53
+ return undefined;
54
+ const parsed = Number.parseInt(String(exitCode), 10);
55
+ if (Number.isNaN(parsed))
56
+ return undefined;
57
+ return {
58
+ command,
59
+ exitCode: parsed,
60
+ outputSummary: summary ? String(summary) : `Command exited ${parsed}`,
61
+ };
62
+ }
63
+ export function normalizePreflightProfile(value) {
64
+ const normalized = String(value ?? 'quick').trim().toLowerCase();
65
+ if (normalized === 'full' || normalized === 'ci')
66
+ return normalized;
67
+ return 'quick';
68
+ }
69
+ export function gatesForPreflightProfile(profile) {
70
+ const { preflightGateStages } = require('../workflow/GateCatalog.js');
71
+ return preflightGateStages(profile);
72
+ }
73
+ export function resolveScaleDirForProject(projectDir) {
74
+ return isAbsolute(SCALE_DIR) ? SCALE_DIR : join(projectDir, SCALE_DIR);
75
+ }
76
+ let _engine = null;
77
+ export function getEngine() {
78
+ if (!_engine)
79
+ _engine = createEngine();
80
+ return _engine;
81
+ }
82
+ function createEngine() {
83
+ ensureDir(SCALE_DIR);
84
+ const eventBus = new EventBus({ eventsDir: join(SCALE_DIR, 'events') });
85
+ const store = new SQLiteArtifactStore(eventBus, {
86
+ dbPath: DB_PATH,
87
+ artifactsDir: join(SCALE_DIR, 'artifacts'),
88
+ });
89
+ const fsm = new FSM(store, eventBus);
90
+ registerAllFSMs(fsm);
91
+ const gateway = new Gateway(eventBus);
92
+ const roleGate = new RoleGateDetector();
93
+ gateway.registerDetector(new DangerousCommandDetector(), 'preTool');
94
+ gateway.registerDetector(new SecretLeakDetector(), 'preTool');
95
+ gateway.registerDetector(roleGate, 'preTool');
96
+ gateway.registerDetector(new BruteRetryDetector(), 'preTool');
97
+ gateway.registerDetector(new ScopeCreepDetector(), 'preTool');
98
+ gateway.registerDetector(new PrematureDoneDetector(), 'beforeStop');
99
+ gateway.registerDetector(new BlameShiftDetector(), 'postTool');
100
+ const kb = new GraphifyKnowledgeBase(eventBus, { projectDir: PROJECT_DIR, scaleDir: SCALE_DIR });
101
+ const ctx = new ContextBuilder(store, kb, eventBus);
102
+ const fsmAgentBridge = new FSMAgentBridge(fsm, store);
103
+ const capabilityRegistry = new CapabilityRegistry(eventBus);
104
+ const skillRegistry = new SkillRegistry(eventBus);
105
+ registerCoreSkills(skillRegistry);
106
+ registerExternalSkills(skillRegistry, eventBus);
107
+ const workflowEngine = new WorkflowEngine({
108
+ eventBus,
109
+ capabilityRegistry,
110
+ skillRegistry,
111
+ scaleDir: SCALE_DIR,
112
+ });
113
+ return { eventBus, store, fsm, gateway, roleGate, kb, ctx, fsmAgentBridge, workflowEngine };
114
+ }
115
+ export function createVerificationWorkflowEngine(scaleDir) {
116
+ ensureDir(scaleDir);
117
+ const eventBus = new EventBus({ eventsDir: join(scaleDir, 'events') });
118
+ const capabilityRegistry = new CapabilityRegistry(eventBus);
119
+ const skillRegistry = new SkillRegistry(eventBus);
120
+ registerCoreSkills(skillRegistry);
121
+ registerExternalSkills(skillRegistry, eventBus);
122
+ return new WorkflowEngine({
123
+ eventBus,
124
+ capabilityRegistry,
125
+ skillRegistry,
126
+ scaleDir,
127
+ });
128
+ }
129
+ //# sourceMappingURL=engineBootstrap.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"engineBootstrap.js","sourceRoot":"","sources":["../../src/cli/engineBootstrap.ts"],"names":[],"mappings":"AAAA,yDAAyD;AACzD,4FAA4F;AAE5F,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,SAAS,CAAA;AAC9D,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,WAAW,CAAA;AAC5C,OAAO,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAA;AAC9C,OAAO,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAA;AAChE,OAAO,EAAE,GAAG,EAAE,MAAM,oBAAoB,CAAA;AACxC,OAAO,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAA;AAC/D,OAAO,EAAE,OAAO,EAAE,MAAM,0BAA0B,CAAA;AAClD,OAAO,EAAE,kBAAkB,EAAE,qBAAqB,EAAE,kBAAkB,EAAE,MAAM,4BAA4B,CAAA;AAC1G,OAAO,EAAE,wBAAwB,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,MAAM,oCAAoC,CAAA;AACvI,OAAO,EAAE,qBAAqB,EAAE,MAAM,uCAAuC,CAAA;AAC7E,OAAO,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAA;AAC7D,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAA;AACzD,OAAO,EAAE,kBAAkB,EAAE,MAAM,uCAAuC,CAAA;AAC1E,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAA;AAC1D,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAA;AAC5D,OAAO,EAAE,sBAAsB,EAAE,MAAM,6BAA6B,CAAA;AACpE,OAAO,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAA;AAC9D,OAAO,EAAE,wBAAwB,EAAE,MAAM,uBAAuB,CAAA;AAMhE,MAAM,CAAC,MAAM,SAAS,GAAG,OAAO,CAAC,GAAG,CAAC,SAAS,IAAI,QAAQ,CAAA;AAC1D,MAAM,CAAC,MAAM,WAAW,GAAG,OAAO,CAAC,GAAG,CAAC,iBAAiB,IAAI,OAAO,CAAC,GAAG,EAAE,CAAA;AACzE,MAAM,CAAC,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,EAAE,UAAU,CAAC,CAAA;AAElD,MAAM,UAAU,SAAS,CAAC,GAAW;IACnC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC;QAAE,SAAS,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAA;AAC3D,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,KAAc;IACzC,OAAO,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,EAAE,IAAI,KAAK,KAAK,MAAM,IAAI,KAAK,KAAK,GAAG,CAAA;AAC5E,CAAC;AAED,MAAM,UAAU,0BAA0B,CAAC,QAAgB;IACzD,IAAI,QAAQ,KAAK,UAAU;QAAE,OAAO,UAAU,CAAA;IAC9C,IAAI,QAAQ,KAAK,SAAS;QAAE,OAAO,SAAS,CAAA;IAC5C,OAAO,UAAU,CAAA;AACnB,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,QAAgB;IAClD,IAAI,QAAQ,KAAK,SAAS;QAAE,OAAO,SAAS,CAAA;IAC5C,IAAI,QAAQ,KAAK,UAAU;QAAE,OAAO,UAAU,CAAA;IAC9C,OAAO,UAAU,CAAA;AACnB,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,UAAkB,EAAE,SAAiB,EAAE,WAAmB,EAAE,MAAgB;IAC1G,MAAM,UAAU,GAAG,IAAI,CAAC,UAAU,EAAE,QAAQ,EAAE,aAAa,CAAC,CAAA;IAC5D,MAAM,OAAO,GAAG,wBAAwB,CAAC,SAAS,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,MAAM,EAAE,CAAC,CAAA;IAClF,aAAa,CAAC,UAAU,EAAE,OAAO,EAAE,OAAO,CAAC,CAAA;IAC3C,OAAO,UAAU,CAAA;AACnB,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,OAAe,EAAE,QAAiB,EAAE,OAAgB;IAClF,IAAI,QAAQ,KAAK,SAAS,IAAI,QAAQ,KAAK,IAAI,IAAI,QAAQ,KAAK,EAAE;QAAE,OAAO,SAAS,CAAA;IACpF,MAAM,MAAM,GAAG,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC,CAAA;IACpD,IAAI,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC;QAAE,OAAO,SAAS,CAAA;IAC1C,OAAO;QACL,OAAO;QACP,QAAQ,EAAE,MAAM;QAChB,aAAa,EAAE,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,kBAAkB,MAAM,EAAE;KACtE,CAAA;AACH,CAAC;AAID,MAAM,UAAU,yBAAyB,CAAC,KAAc;IACtD,MAAM,UAAU,GAAG,MAAM,CAAC,KAAK,IAAI,OAAO,CAAC,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAA;IAChE,IAAI,UAAU,KAAK,MAAM,IAAI,UAAU,KAAK,IAAI;QAAE,OAAO,UAAU,CAAA;IACnE,OAAO,OAAO,CAAA;AAChB,CAAC;AAED,MAAM,UAAU,wBAAwB,CAAC,OAAyB;IAChE,MAAM,EAAE,mBAAmB,EAAE,GAAG,OAAO,CAAC,4BAA4B,CAAC,CAAA;IACrE,OAAO,mBAAmB,CAAC,OAAO,CAAC,CAAA;AACrC,CAAC;AAED,MAAM,UAAU,yBAAyB,CAAC,UAAkB;IAC1D,OAAO,UAAU,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,UAAU,EAAE,SAAS,CAAC,CAAA;AACxE,CAAC;AAeD,IAAI,OAAO,GAAkB,IAAI,CAAA;AAEjC,MAAM,UAAU,SAAS;IACvB,IAAI,CAAC,OAAO;QAAE,OAAO,GAAG,YAAY,EAAE,CAAA;IACtC,OAAO,OAAO,CAAA;AAChB,CAAC;AAED,SAAS,YAAY;IACnB,SAAS,CAAC,SAAS,CAAC,CAAA;IACpB,MAAM,QAAQ,GAAG,IAAI,QAAQ,CAAC,EAAE,SAAS,EAAE,IAAI,CAAC,SAAS,EAAE,QAAQ,CAAC,EAAE,CAAC,CAAA;IACvE,MAAM,KAAK,GAAG,IAAI,mBAAmB,CAAC,QAAQ,EAAE;QAC9C,MAAM,EAAE,OAAO;QACf,YAAY,EAAE,IAAI,CAAC,SAAS,EAAE,WAAW,CAAC;KAC3C,CAAC,CAAA;IACF,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAA;IACpC,eAAe,CAAC,GAAG,CAAC,CAAA;IAEpB,MAAM,OAAO,GAAG,IAAI,OAAO,CAAC,QAAQ,CAAC,CAAA;IACrC,MAAM,QAAQ,GAAG,IAAI,gBAAgB,EAAE,CAAA;IAEvC,OAAO,CAAC,gBAAgB,CAAC,IAAI,wBAAwB,EAAE,EAAE,SAAS,CAAC,CAAA;IACnE,OAAO,CAAC,gBAAgB,CAAC,IAAI,kBAAkB,EAAE,EAAE,SAAS,CAAC,CAAA;IAC7D,OAAO,CAAC,gBAAgB,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAA;IAC7C,OAAO,CAAC,gBAAgB,CAAC,IAAI,kBAAkB,EAAE,EAAE,SAAS,CAAC,CAAA;IAC7D,OAAO,CAAC,gBAAgB,CAAC,IAAI,kBAAkB,EAAE,EAAE,SAAS,CAAC,CAAA;IAC7D,OAAO,CAAC,gBAAgB,CAAC,IAAI,qBAAqB,EAAE,EAAE,YAAY,CAAC,CAAA;IACnE,OAAO,CAAC,gBAAgB,CAAC,IAAI,kBAAkB,EAAE,EAAE,UAAU,CAAC,CAAA;IAE9D,MAAM,EAAE,GAAG,IAAI,qBAAqB,CAAC,QAAQ,EAAE,EAAE,UAAU,EAAE,WAAW,EAAE,QAAQ,EAAE,SAAS,EAAE,CAAC,CAAA;IAChG,MAAM,GAAG,GAAG,IAAI,cAAc,CAAC,KAAK,EAAE,EAAE,EAAE,QAAQ,CAAC,CAAA;IACnD,MAAM,cAAc,GAAG,IAAI,cAAc,CAAC,GAAG,EAAE,KAAK,CAAC,CAAA;IACrD,MAAM,kBAAkB,GAAG,IAAI,kBAAkB,CAAC,QAAQ,CAAC,CAAA;IAC3D,MAAM,aAAa,GAAG,IAAI,aAAa,CAAC,QAAQ,CAAC,CAAA;IACjD,kBAAkB,CAAC,aAAa,CAAC,CAAA;IACjC,sBAAsB,CAAC,aAAa,EAAE,QAAQ,CAAC,CAAA;IAC/C,MAAM,cAAc,GAAG,IAAI,cAAc,CAAC;QACxC,QAAQ;QACR,kBAAkB;QAClB,aAAa;QACb,QAAQ,EAAE,SAAS;KACpB,CAAC,CAAA;IAEF,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,GAAG,EAAE,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,GAAG,EAAE,cAAc,EAAE,cAAc,EAAE,CAAA;AAC7F,CAAC;AAED,MAAM,UAAU,gCAAgC,CAAC,QAAgB;IAC/D,SAAS,CAAC,QAAQ,CAAC,CAAA;IACnB,MAAM,QAAQ,GAAG,IAAI,QAAQ,CAAC,EAAE,SAAS,EAAE,IAAI,CAAC,QAAQ,EAAE,QAAQ,CAAC,EAAE,CAAC,CAAA;IACtE,MAAM,kBAAkB,GAAG,IAAI,kBAAkB,CAAC,QAAQ,CAAC,CAAA;IAC3D,MAAM,aAAa,GAAG,IAAI,aAAa,CAAC,QAAQ,CAAC,CAAA;IACjD,kBAAkB,CAAC,aAAa,CAAC,CAAA;IACjC,sBAAsB,CAAC,aAAa,EAAE,QAAQ,CAAC,CAAA;IAC/C,OAAO,IAAI,cAAc,CAAC;QACxB,QAAQ;QACR,kBAAkB;QAClB,aAAa;QACb,QAAQ;KACT,CAAC,CAAA;AACJ,CAAC"}
@@ -0,0 +1 @@
1
+ export declare const evalCommand: import("citty").CommandDef<import("citty").ArgsDef>;