@hongmaple0820/scale-engine 0.40.1 → 0.43.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 (228) hide show
  1. package/README.md +30 -2
  2. package/dist/api/cli.js +286 -7
  3. package/dist/api/cli.js.map +1 -1
  4. package/dist/api/doctor.js +1 -1
  5. package/dist/api/doctor.js.map +1 -1
  6. package/dist/api/quickstart.d.ts +11 -0
  7. package/dist/api/quickstart.js +98 -1
  8. package/dist/api/quickstart.js.map +1 -1
  9. package/dist/artifact/fsmDefinitions.js +15 -2
  10. package/dist/artifact/fsmDefinitions.js.map +1 -1
  11. package/dist/artifact/types.d.ts +1 -1
  12. package/dist/artifact/types.js.map +1 -1
  13. package/dist/bootstrap/DependencyBootstrap.d.ts +1 -0
  14. package/dist/bootstrap/DependencyBootstrap.js +137 -25
  15. package/dist/bootstrap/DependencyBootstrap.js.map +1 -1
  16. package/dist/cache/ScanCache.d.ts +41 -0
  17. package/dist/cache/ScanCache.js +120 -0
  18. package/dist/cache/ScanCache.js.map +1 -0
  19. package/dist/capabilities/BrowserQACapability.d.ts +14 -0
  20. package/dist/capabilities/BrowserQACapability.js +94 -0
  21. package/dist/capabilities/BrowserQACapability.js.map +1 -1
  22. package/dist/capabilities/InstalledSkillsIntegration.js +29 -9
  23. package/dist/capabilities/InstalledSkillsIntegration.js.map +1 -1
  24. package/dist/cli/autofixCommands.d.ts +22 -0
  25. package/dist/cli/autofixCommands.js +32 -0
  26. package/dist/cli/autofixCommands.js.map +1 -0
  27. package/dist/cli/cortexCommands.d.ts +71 -0
  28. package/dist/cli/cortexCommands.js +335 -0
  29. package/dist/cli/cortexCommands.js.map +1 -0
  30. package/dist/cli/costCommands.d.ts +13 -0
  31. package/dist/cli/costCommands.js +48 -0
  32. package/dist/cli/costCommands.js.map +1 -0
  33. package/dist/cli/orchCommands.d.ts +43 -0
  34. package/dist/cli/orchCommands.js +135 -0
  35. package/dist/cli/orchCommands.js.map +1 -0
  36. package/dist/cli/phaseCommands.js +1 -2
  37. package/dist/cli/phaseCommands.js.map +1 -1
  38. package/dist/cli/qaCommands.d.ts +22 -0
  39. package/dist/cli/qaCommands.js +84 -0
  40. package/dist/cli/qaCommands.js.map +1 -0
  41. package/dist/cli/quickstartCommands.d.ts +17 -0
  42. package/dist/cli/quickstartCommands.js +47 -0
  43. package/dist/cli/quickstartCommands.js.map +1 -0
  44. package/dist/cli/shieldCommands.d.ts +30 -0
  45. package/dist/cli/shieldCommands.js +212 -0
  46. package/dist/cli/shieldCommands.js.map +1 -0
  47. package/dist/cli/tuiCommands.d.ts +7 -0
  48. package/dist/cli/tuiCommands.js +33 -0
  49. package/dist/cli/tuiCommands.js.map +1 -0
  50. package/dist/config/profiles.js +26 -0
  51. package/dist/config/profiles.js.map +1 -1
  52. package/dist/context/ContextBudget.js +2 -2
  53. package/dist/core/GbrainRuntime.d.ts +25 -0
  54. package/dist/core/GbrainRuntime.js +270 -0
  55. package/dist/core/GbrainRuntime.js.map +1 -0
  56. package/dist/cortex/GovernanceMetrics.d.ts +66 -0
  57. package/dist/cortex/GovernanceMetrics.js +230 -0
  58. package/dist/cortex/GovernanceMetrics.js.map +1 -0
  59. package/dist/cortex/InstinctExtractor.d.ts +61 -0
  60. package/dist/cortex/InstinctExtractor.js +184 -0
  61. package/dist/cortex/InstinctExtractor.js.map +1 -0
  62. package/dist/cortex/InstinctStore.d.ts +54 -0
  63. package/dist/cortex/InstinctStore.js +266 -0
  64. package/dist/cortex/InstinctStore.js.map +1 -0
  65. package/dist/cortex/ReflexionEngine.d.ts +34 -0
  66. package/dist/cortex/ReflexionEngine.js +157 -0
  67. package/dist/cortex/ReflexionEngine.js.map +1 -0
  68. package/dist/cortex/SessionInjector.d.ts +44 -0
  69. package/dist/cortex/SessionInjector.js +127 -0
  70. package/dist/cortex/SessionInjector.js.map +1 -0
  71. package/dist/cortex/adapters/ClaudeAdapter.d.ts +17 -0
  72. package/dist/cortex/adapters/ClaudeAdapter.js +61 -0
  73. package/dist/cortex/adapters/ClaudeAdapter.js.map +1 -0
  74. package/dist/cortex/adapters/CodexAdapter.d.ts +10 -0
  75. package/dist/cortex/adapters/CodexAdapter.js +52 -0
  76. package/dist/cortex/adapters/CodexAdapter.js.map +1 -0
  77. package/dist/cortex/adapters/CursorAdapter.d.ts +10 -0
  78. package/dist/cortex/adapters/CursorAdapter.js +46 -0
  79. package/dist/cortex/adapters/CursorAdapter.js.map +1 -0
  80. package/dist/cortex/adapters/GeminiAdapter.d.ts +11 -0
  81. package/dist/cortex/adapters/GeminiAdapter.js +48 -0
  82. package/dist/cortex/adapters/GeminiAdapter.js.map +1 -0
  83. package/dist/env/EnvironmentDoctor.js +221 -5
  84. package/dist/env/EnvironmentDoctor.js.map +1 -1
  85. package/dist/eval/BenchmarkPublisher.d.ts +25 -0
  86. package/dist/eval/BenchmarkPublisher.js +27 -0
  87. package/dist/eval/BenchmarkPublisher.js.map +1 -0
  88. package/dist/guardrails/DependencyAuditor.js +10 -1
  89. package/dist/guardrails/DependencyAuditor.js.map +1 -1
  90. package/dist/memory/MemoryProviders.js +38 -91
  91. package/dist/memory/MemoryProviders.js.map +1 -1
  92. package/dist/orchestrator/OrchestratorDaemon.d.ts +44 -0
  93. package/dist/orchestrator/OrchestratorDaemon.js +150 -0
  94. package/dist/orchestrator/OrchestratorDaemon.js.map +1 -0
  95. package/dist/orchestrator/PolicyLoader.d.ts +80 -0
  96. package/dist/orchestrator/PolicyLoader.js +229 -0
  97. package/dist/orchestrator/PolicyLoader.js.map +1 -0
  98. package/dist/orchestrator/ReconciliationLoop.d.ts +71 -0
  99. package/dist/orchestrator/ReconciliationLoop.js +266 -0
  100. package/dist/orchestrator/ReconciliationLoop.js.map +1 -0
  101. package/dist/orchestrator/TrackerAdapter.d.ts +60 -0
  102. package/dist/orchestrator/TrackerAdapter.js +147 -0
  103. package/dist/orchestrator/TrackerAdapter.js.map +1 -0
  104. package/dist/orchestrator/WorkspaceManager.d.ts +66 -0
  105. package/dist/orchestrator/WorkspaceManager.js +257 -0
  106. package/dist/orchestrator/WorkspaceManager.js.map +1 -0
  107. package/dist/qa/BrowserDaemon.d.ts +23 -0
  108. package/dist/qa/BrowserDaemon.js +79 -0
  109. package/dist/qa/BrowserDaemon.js.map +1 -0
  110. package/dist/qa/E2ETestOrchestrator.d.ts +14 -0
  111. package/dist/qa/E2ETestOrchestrator.js +19 -0
  112. package/dist/qa/E2ETestOrchestrator.js.map +1 -0
  113. package/dist/review/CrossModelReviewer.d.ts +35 -0
  114. package/dist/review/CrossModelReviewer.js +75 -0
  115. package/dist/review/CrossModelReviewer.js.map +1 -0
  116. package/dist/review/ReviewAggregator.d.ts +13 -0
  117. package/dist/review/ReviewAggregator.js +28 -0
  118. package/dist/review/ReviewAggregator.js.map +1 -0
  119. package/dist/review/reviewCommands.d.ts +15 -0
  120. package/dist/review/reviewCommands.js +24 -0
  121. package/dist/review/reviewCommands.js.map +1 -0
  122. package/dist/routing/LocalModelProvider.d.ts +11 -0
  123. package/dist/routing/LocalModelProvider.js +21 -0
  124. package/dist/routing/LocalModelProvider.js.map +1 -0
  125. package/dist/routing/ModelRouter.d.ts +12 -0
  126. package/dist/routing/ModelRouter.js +31 -4
  127. package/dist/routing/ModelRouter.js.map +1 -1
  128. package/dist/runtime/AiOsRuntime.d.ts +1 -0
  129. package/dist/runtime/AiOsRuntime.js +15 -0
  130. package/dist/runtime/AiOsRuntime.js.map +1 -1
  131. package/dist/runtime/CostAnalyzer.d.ts +53 -0
  132. package/dist/runtime/CostAnalyzer.js +160 -0
  133. package/dist/runtime/CostAnalyzer.js.map +1 -0
  134. package/dist/runtime/CostOptimizer.d.ts +11 -0
  135. package/dist/runtime/CostOptimizer.js +21 -0
  136. package/dist/runtime/CostOptimizer.js.map +1 -0
  137. package/dist/runtime/ModelUsageLedger.d.ts +53 -2
  138. package/dist/runtime/ModelUsageLedger.js +243 -39
  139. package/dist/runtime/ModelUsageLedger.js.map +1 -1
  140. package/dist/setup/SetupVerification.d.ts +42 -0
  141. package/dist/setup/SetupVerification.js +180 -0
  142. package/dist/setup/SetupVerification.js.map +1 -0
  143. package/dist/shield/PolicyCompiler.d.ts +70 -0
  144. package/dist/shield/PolicyCompiler.js +540 -0
  145. package/dist/shield/PolicyCompiler.js.map +1 -0
  146. package/dist/shield/ProtectedPaths.d.ts +39 -0
  147. package/dist/shield/ProtectedPaths.js +179 -0
  148. package/dist/shield/ProtectedPaths.js.map +1 -0
  149. package/dist/shield/ShieldProtocol.d.ts +50 -0
  150. package/dist/shield/ShieldProtocol.js +103 -0
  151. package/dist/shield/ShieldProtocol.js.map +1 -0
  152. package/dist/skills/SkillMdStandard.d.ts +33 -0
  153. package/dist/skills/SkillMdStandard.js +88 -0
  154. package/dist/skills/SkillMdStandard.js.map +1 -0
  155. package/dist/skills/SkillRegistry.d.ts +9 -1
  156. package/dist/skills/SkillRegistry.js +20 -0
  157. package/dist/skills/SkillRegistry.js.map +1 -1
  158. package/dist/skills/interop/GStackInterop.d.ts +15 -0
  159. package/dist/skills/interop/GStackInterop.js +34 -0
  160. package/dist/skills/interop/GStackInterop.js.map +1 -0
  161. package/dist/skills/interop/OMCInterop.d.ts +15 -0
  162. package/dist/skills/interop/OMCInterop.js +34 -0
  163. package/dist/skills/interop/OMCInterop.js.map +1 -0
  164. package/dist/tools/ToolCapabilityRegistry.js +10 -0
  165. package/dist/tools/ToolCapabilityRegistry.js.map +1 -1
  166. package/dist/tui/TuiDashboard.d.ts +3 -0
  167. package/dist/tui/TuiDashboard.js +120 -0
  168. package/dist/tui/TuiDashboard.js.map +1 -0
  169. package/dist/workflow/GateCatalog.d.ts +2 -0
  170. package/dist/workflow/GateCatalog.js +59 -3
  171. package/dist/workflow/GateCatalog.js.map +1 -1
  172. package/dist/workflow/GovernanceTemplatePacks.d.ts +1 -1
  173. package/dist/workflow/GovernanceTemplatePacks.js +15 -0
  174. package/dist/workflow/GovernanceTemplatePacks.js.map +1 -1
  175. package/dist/workflow/TddLoop.d.ts +2 -0
  176. package/dist/workflow/TddLoop.js +2 -0
  177. package/dist/workflow/TddLoop.js.map +1 -1
  178. package/dist/workflow/UpgradeManager.d.ts +10 -1
  179. package/dist/workflow/UpgradeManager.js +55 -0
  180. package/dist/workflow/UpgradeManager.js.map +1 -1
  181. package/dist/workflow/VerificationProfile.d.ts +8 -0
  182. package/dist/workflow/VerificationProfile.js +62 -1
  183. package/dist/workflow/VerificationProfile.js.map +1 -1
  184. package/dist/workflow/VerificationSchema.d.ts +46 -0
  185. package/dist/workflow/VerificationSchema.js +97 -0
  186. package/dist/workflow/VerificationSchema.js.map +1 -0
  187. package/dist/workflow/autofix/AutoFixEngine.d.ts +37 -0
  188. package/dist/workflow/autofix/AutoFixEngine.js +169 -0
  189. package/dist/workflow/autofix/AutoFixEngine.js.map +1 -0
  190. package/dist/workflow/execution/RalphEngine.d.ts +18 -0
  191. package/dist/workflow/execution/RalphEngine.js +22 -0
  192. package/dist/workflow/execution/RalphEngine.js.map +1 -1
  193. package/dist/workflow/gates/EnhancedGates.d.ts +74 -0
  194. package/dist/workflow/gates/EnhancedGates.js +653 -0
  195. package/dist/workflow/gates/EnhancedGates.js.map +1 -0
  196. package/dist/workflow/gates/GateSystem.d.ts +3 -0
  197. package/dist/workflow/gates/GateSystem.js +94 -1
  198. package/dist/workflow/gates/GateSystem.js.map +1 -1
  199. package/dist/workflow/types.d.ts +1 -1
  200. package/docs/README.md +3 -0
  201. package/docs/guides/DEVELOPMENT_WORKFLOW.md +28 -9
  202. package/docs/guides/GETTING_STARTED.md +19 -0
  203. package/docs/guides/MIGRATION.md +119 -0
  204. package/docs/start/quickstart.md +1 -0
  205. package/docs/workflow/GATES_AND_SCORE.md +34 -1
  206. package/docs/workflow/README.md +58 -10
  207. package/package.json +7 -18
  208. package/scripts/workflow/lib/gbrain-runtime.mjs +185 -0
  209. package/scripts/workflow/lib/report-output.mjs +107 -0
  210. package/scripts/workflow/provider-rehearsal.mjs +129 -48
  211. package/scripts/workflow/setup-smoke.mjs +142 -8
  212. package/docs/ACTIVE_SECURITY_VISUAL_GATES.md +0 -87
  213. package/docs/AI_ENGINEERING_OS_POSITIONING.md +0 -607
  214. package/docs/BACKGROUND_HUNTER.md +0 -62
  215. package/docs/CODE_INTELLIGENCE.md +0 -180
  216. package/docs/CONTEXT_BUDGET.md +0 -155
  217. package/docs/DEPENDENCY_AUDIT.md +0 -118
  218. package/docs/EVOLUTION_SHADOW_MODE.md +0 -63
  219. package/docs/GITLAB_FLOW.md +0 -125
  220. package/docs/GOVERNANCE_DASHBOARD.md +0 -85
  221. package/docs/MEMORY_BRAIN.md +0 -104
  222. package/docs/MEMORY_FABRIC.md +0 -161
  223. package/docs/RESOURCE_GOVERNANCE.md +0 -92
  224. package/docs/RUNTIME_EVIDENCE.md +0 -101
  225. package/docs/WORKFLOW_EVAL.md +0 -151
  226. package/image/wechat-public.jpg +0 -0
  227. package/image/wxPay.jpg +0 -0
  228. package/image/zfb.jpg +0 -0
@@ -0,0 +1,335 @@
1
+ import { defineCommand } from 'citty';
2
+ import { join } from 'node:path';
3
+ import { InstinctExtractor } from '../cortex/InstinctExtractor.js';
4
+ import { InstinctStore } from '../cortex/InstinctStore.js';
5
+ import { ReflexionEngine } from '../cortex/ReflexionEngine.js';
6
+ import { SessionInjector } from '../cortex/SessionInjector.js';
7
+ import { GovernanceMetricsCalculator } from '../cortex/GovernanceMetrics.js';
8
+ // ---------------------------------------------------------------------------
9
+ // scale cortex extract
10
+ // ---------------------------------------------------------------------------
11
+ export const cortexExtractCommand = defineCommand({
12
+ meta: {
13
+ name: 'extract',
14
+ description: 'Extract instincts from observation logs — detect failure patterns and create learning entries',
15
+ },
16
+ args: {
17
+ dir: { type: 'string', default: process.cwd(), description: 'Project directory' },
18
+ 'min-confidence': { type: 'string', default: '0.5', description: 'Minimum confidence threshold (0.3-0.9)' },
19
+ json: { type: 'boolean', default: false },
20
+ },
21
+ async run({ args }) {
22
+ const projectDir = String(args.dir ?? process.cwd());
23
+ const scaleDir = join(projectDir, '.scale');
24
+ const minConfidence = parseFloat(String(args['min-confidence'] ?? 0.5));
25
+ const extractor = new InstinctExtractor(scaleDir);
26
+ const store = new InstinctStore(join(scaleDir, 'instincts'));
27
+ console.log('SCALE Cortex — Extracting Instincts\n');
28
+ const observations = extractor.loadObservations();
29
+ console.log(` Observations loaded: ${observations.length}`);
30
+ if (observations.length === 0) {
31
+ console.log(' No observations found. Instincts are built from gate failure data.');
32
+ console.log(' Run gates first, then re-run: scale cortex extract\n');
33
+ return;
34
+ }
35
+ const patterns = extractor.detectPatterns(observations);
36
+ console.log(` Patterns detected: ${patterns.length}`);
37
+ const instincts = extractor.extract(patterns);
38
+ const filtered = instincts.filter(i => i.confidence >= minConfidence);
39
+ console.log(` Instincts extracted: ${instincts.length} (${filtered.length} ≥ ${minConfidence} confidence)\n`);
40
+ let saved = 0;
41
+ for (const instinct of filtered) {
42
+ store.save(instinct);
43
+ saved++;
44
+ }
45
+ console.log(` Saved: ${saved} instincts to .scale/instincts/`);
46
+ if (args.json) {
47
+ console.log(JSON.stringify(filtered, null, 2));
48
+ return;
49
+ }
50
+ if (filtered.length > 0) {
51
+ console.log('\n Top instincts:');
52
+ for (const i of filtered.slice(0, 5)) {
53
+ console.log(` [${(i.confidence * 100).toFixed(0)}%] ${i.domain}: ${i.trigger}`);
54
+ }
55
+ }
56
+ console.log();
57
+ },
58
+ });
59
+ // ---------------------------------------------------------------------------
60
+ // scale cortex inject
61
+ // ---------------------------------------------------------------------------
62
+ export const cortexInjectCommand = defineCommand({
63
+ meta: {
64
+ name: 'inject',
65
+ description: 'Preview what SCALE Cortex would inject at SessionStart — high-confidence instincts',
66
+ },
67
+ args: {
68
+ dir: { type: 'string', default: process.cwd(), description: 'Project directory' },
69
+ minimal: { type: 'boolean', default: false, description: 'Show minimal (low-context) injection format' },
70
+ json: { type: 'boolean', default: false },
71
+ },
72
+ async run({ args }) {
73
+ const projectDir = String(args.dir ?? process.cwd());
74
+ const scaleDir = join(projectDir, '.scale');
75
+ const store = new InstinctStore(join(scaleDir, 'instincts'));
76
+ const injector = new SessionInjector(store);
77
+ const injection = args.minimal
78
+ ? injector.buildMinimal()
79
+ : injector.build();
80
+ if (args.json) {
81
+ console.log(JSON.stringify(injection, null, 2));
82
+ return;
83
+ }
84
+ console.log('SCALE Cortex — SessionStart Injection Preview\n');
85
+ console.log(` Instincts: ${injection.instinctCount}`);
86
+ console.log(` Character count: ${injection.content.length}\n`);
87
+ console.log('─── Injection Content ───\n');
88
+ console.log(injection.content || '(no high-confidence instincts to inject)');
89
+ console.log();
90
+ },
91
+ });
92
+ // ---------------------------------------------------------------------------
93
+ // scale cortex metrics
94
+ // ---------------------------------------------------------------------------
95
+ export const cortexMetricsCommand = defineCommand({
96
+ meta: {
97
+ name: 'metrics',
98
+ description: 'Compute SCALE Cortex governance ROI — gate pass rates, instinct hit rates, cost savings',
99
+ },
100
+ args: {
101
+ dir: { type: 'string', default: process.cwd(), description: 'Project directory' },
102
+ days: { type: 'string', default: '30', description: 'Lookback period in days' },
103
+ json: { type: 'boolean', default: false },
104
+ },
105
+ async run({ args }) {
106
+ const projectDir = String(args.dir ?? process.cwd());
107
+ const scaleDir = join(projectDir, '.scale');
108
+ const store = new InstinctStore(join(scaleDir, 'instincts'));
109
+ const calculator = new GovernanceMetricsCalculator(scaleDir);
110
+ const days = parseInt(String(args.days ?? 30), 10);
111
+ const instincts = store.loadAll();
112
+ const metrics = calculator.compute(instincts, days);
113
+ if (args.json) {
114
+ console.log(JSON.stringify(metrics, null, 2));
115
+ return;
116
+ }
117
+ console.log(calculator.render(metrics));
118
+ },
119
+ });
120
+ // ---------------------------------------------------------------------------
121
+ // scale cortex evolve
122
+ // ---------------------------------------------------------------------------
123
+ export const cortexEvolveCommand = defineCommand({
124
+ meta: {
125
+ name: 'evolve',
126
+ description: 'Run full Cortex evolution cycle: reflect → extract → save high-confidence instincts',
127
+ },
128
+ args: {
129
+ dir: { type: 'string', default: process.cwd(), description: 'Project directory' },
130
+ json: { type: 'boolean', default: false },
131
+ },
132
+ async run({ args }) {
133
+ const projectDir = String(args.dir ?? process.cwd());
134
+ const scaleDir = join(projectDir, '.scale');
135
+ const extractor = new InstinctExtractor(scaleDir);
136
+ const store = new InstinctStore(join(scaleDir, 'instincts'));
137
+ const reflector = new ReflexionEngine();
138
+ console.log('SCALE Cortex — Evolution Cycle\n');
139
+ // 1. Load observations
140
+ const observations = extractor.loadObservations();
141
+ console.log(` 1. Observations: ${observations.length}`);
142
+ // 2. Reflect on failures
143
+ const reflections = await reflector.reflectAll(observations);
144
+ console.log(` 2. Reflections: ${reflections.length}`);
145
+ // 3. Extract patterns
146
+ const patterns = extractor.detectPatterns(observations);
147
+ console.log(` 3. Patterns: ${patterns.length}`);
148
+ // 4. Extract instincts
149
+ const instincts = extractor.extract(patterns);
150
+ console.log(` 4. Instincts: ${instincts.length}`);
151
+ // 5. Save high-confidence (0.7+) instincts
152
+ const highConf = instincts.filter(i => i.confidence >= 0.7);
153
+ let saved = 0;
154
+ for (const instinct of highConf) {
155
+ store.save(instinct);
156
+ saved++;
157
+ }
158
+ console.log(` 5. Saved: ${saved} (confidence ≥ 0.7)\n`);
159
+ // 6. Show reflection results
160
+ for (const r of reflections.slice(0, 5)) {
161
+ console.log(` [${(r.confidence * 100).toFixed(0)}%] ${r.rootCause}`);
162
+ console.log(` Action: ${r.suggestedAction}\n`);
163
+ }
164
+ // 7. Stats
165
+ const stats = store.stats();
166
+ console.log(` Store: ${stats.total} total instincts`);
167
+ for (const [bucket, count] of Object.entries(stats.byConfidence)) {
168
+ if (count > 0)
169
+ console.log(` ${bucket}: ${count}`);
170
+ }
171
+ console.log();
172
+ if (args.json) {
173
+ console.log(JSON.stringify({
174
+ observations: observations.length,
175
+ reflections: reflections.length,
176
+ patterns: patterns.length,
177
+ instincts: instincts.length,
178
+ saved,
179
+ stats,
180
+ }, null, 2));
181
+ }
182
+ },
183
+ });
184
+ // ---------------------------------------------------------------------------
185
+ // scale cortex verify
186
+ // ---------------------------------------------------------------------------
187
+ export const cortexVerifyCommand = defineCommand({
188
+ meta: {
189
+ name: 'verify',
190
+ description: 'Verify Cortex pipeline health — instinct store integrity, observation data, injection readiness',
191
+ },
192
+ args: {
193
+ dir: { type: 'string', default: process.cwd(), description: 'Project directory' },
194
+ json: { type: 'boolean', default: false },
195
+ },
196
+ async run({ args }) {
197
+ const projectDir = String(args.dir ?? process.cwd());
198
+ const scaleDir = join(projectDir, '.scale');
199
+ const checks = [];
200
+ // 1. Instinct store integrity
201
+ const store = new InstinctStore(join(scaleDir, 'instincts'));
202
+ const allInstincts = store.loadAll();
203
+ const storeStats = store.stats();
204
+ let storeIssues = 0;
205
+ for (const instinct of allInstincts) {
206
+ if (!instinct.id || !instinct.trigger) {
207
+ storeIssues++;
208
+ continue;
209
+ }
210
+ if (instinct.confidence < 0 || instinct.confidence > 1)
211
+ storeIssues++;
212
+ if (instinct.hitRate < 0 || instinct.hitRate > 1)
213
+ storeIssues++;
214
+ if (instinct.observations < 0)
215
+ storeIssues++;
216
+ }
217
+ checks.push({
218
+ name: 'Instinct store integrity',
219
+ status: storeIssues > 0 ? 'WARN' : 'PASS',
220
+ detail: storeIssues > 0
221
+ ? `${storeIssues} instinct(s) with invalid fields out of ${allInstincts.length}`
222
+ : `${allInstincts.length} instincts loaded, all fields valid`,
223
+ });
224
+ // 2. Observation data validity
225
+ const extractor = new InstinctExtractor(scaleDir);
226
+ const observations = extractor.loadObservations();
227
+ let validObs = 0;
228
+ let invalidObs = 0;
229
+ for (const obs of observations) {
230
+ if (obs.timestamp && obs.gateName && obs.gateStatus)
231
+ validObs++;
232
+ else
233
+ invalidObs++;
234
+ }
235
+ checks.push({
236
+ name: 'Observation data',
237
+ status: invalidObs > 0 ? 'WARN' : observations.length === 0 ? 'WARN' : 'PASS',
238
+ detail: observations.length === 0
239
+ ? 'No observations found — run gates first to generate data'
240
+ : invalidObs > 0
241
+ ? `${invalidObs} malformed observation(s) out of ${observations.length}`
242
+ : `${observations.length} observations, all valid`,
243
+ });
244
+ // 3. Pipeline connectivity (observations → patterns → instincts)
245
+ if (observations.length > 0) {
246
+ const patterns = extractor.detectPatterns(observations);
247
+ const extracted = extractor.extract(patterns);
248
+ checks.push({
249
+ name: 'Pipeline connectivity',
250
+ status: patterns.length > 0 && extracted.length > 0 ? 'PASS' : 'WARN',
251
+ detail: `${observations.length} observations → ${patterns.length} patterns → ${extracted.length} instincts`,
252
+ });
253
+ }
254
+ else {
255
+ checks.push({
256
+ name: 'Pipeline connectivity',
257
+ status: 'WARN',
258
+ detail: 'No observations to test pipeline — skipped',
259
+ });
260
+ }
261
+ // 4. Injection readiness
262
+ const injector = new SessionInjector(store);
263
+ const injection = injector.build();
264
+ checks.push({
265
+ name: 'Injection readiness',
266
+ status: injection.instinctCount > 0 ? 'PASS' : 'WARN',
267
+ detail: injection.instinctCount > 0
268
+ ? `${injection.instinctCount} high-confidence instincts ready (${injection.content.length} chars)`
269
+ : 'No high-confidence instincts (≥0.7) for injection',
270
+ });
271
+ // 5. Metrics computability
272
+ try {
273
+ const calculator = new GovernanceMetricsCalculator(scaleDir);
274
+ const metrics = calculator.compute(allInstincts, 30);
275
+ const hasPlaceholders = metrics.cost.estimatedSavingsFromCaching > 0 &&
276
+ metrics.trends.instinctHitRateDelta === 0;
277
+ checks.push({
278
+ name: 'Metrics computability',
279
+ status: 'PASS',
280
+ detail: hasPlaceholders
281
+ ? `Gate pass rate: ${(metrics.gates.passRate * 100).toFixed(0)}%, instinct hit rate: ${(metrics.instincts.hitRate * 100).toFixed(0)}% (some values use estimates)`
282
+ : `Gate pass rate: ${(metrics.gates.passRate * 100).toFixed(0)}%, instinct hit rate: ${(metrics.instincts.hitRate * 100).toFixed(0)}%`,
283
+ });
284
+ }
285
+ catch (err) {
286
+ checks.push({
287
+ name: 'Metrics computability',
288
+ status: 'FAIL',
289
+ detail: `Failed to compute metrics: ${err.message}`,
290
+ });
291
+ }
292
+ // 6. Reflexion engine availability
293
+ const hasLocalModel = !!process.env.SCALE_LOCAL_MODEL;
294
+ checks.push({
295
+ name: 'Reflexion engine',
296
+ status: hasLocalModel ? 'PASS' : 'WARN',
297
+ detail: hasLocalModel
298
+ ? `Local model configured: ${process.env.SCALE_LOCAL_MODEL}`
299
+ : 'SCALE_LOCAL_MODEL not set — reflexion uses heuristic fallback',
300
+ });
301
+ // Output
302
+ const passed = checks.filter(c => c.status === 'PASS').length;
303
+ const warned = checks.filter(c => c.status === 'WARN').length;
304
+ const failed = checks.filter(c => c.status === 'FAIL').length;
305
+ const overall = failed > 0 ? 'FAIL' : warned > 0 ? 'WARN' : 'PASS';
306
+ if (args.json) {
307
+ console.log(JSON.stringify({ overall, checks, store: storeStats }, null, 2));
308
+ return;
309
+ }
310
+ console.log('SCALE Cortex — Pipeline Verification\n');
311
+ for (const check of checks) {
312
+ const icon = check.status === 'PASS' ? '[OK]' : check.status === 'WARN' ? '[WARN]' : '[FAIL]';
313
+ console.log(` ${icon} ${check.name}: ${check.detail}`);
314
+ }
315
+ console.log(`\n Overall: ${overall} (${passed} passed, ${warned} warnings, ${failed} failures)`);
316
+ console.log(` Store: ${storeStats.total} instincts across ${Object.keys(storeStats.byDomain).length} domain(s)\n`);
317
+ },
318
+ });
319
+ // ---------------------------------------------------------------------------
320
+ // scale cortex (parent)
321
+ // ---------------------------------------------------------------------------
322
+ export const cortexCommand = defineCommand({
323
+ meta: {
324
+ name: 'cortex',
325
+ description: 'SCALE Cortex — Evidence-driven continuous learning and governance evolution',
326
+ },
327
+ subCommands: {
328
+ extract: cortexExtractCommand,
329
+ inject: cortexInjectCommand,
330
+ metrics: cortexMetricsCommand,
331
+ evolve: cortexEvolveCommand,
332
+ verify: cortexVerifyCommand,
333
+ },
334
+ });
335
+ //# sourceMappingURL=cortexCommands.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cortexCommands.js","sourceRoot":"","sources":["../../src/cli/cortexCommands.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ export declare const costReportCommand: import("citty").CommandDef<{
2
+ days: {
3
+ type: "string";
4
+ default: string;
5
+ description: string;
6
+ };
7
+ format: {
8
+ type: "string";
9
+ default: string;
10
+ description: string;
11
+ };
12
+ }>;
13
+ export declare const costOptimizeCommand: import("citty").CommandDef<{}>;
@@ -0,0 +1,48 @@
1
+ import { defineCommand } from 'citty';
2
+ import { CostAnalyzer } from '../runtime/CostAnalyzer.js';
3
+ export const costReportCommand = defineCommand({
4
+ meta: {
5
+ name: 'cost-report',
6
+ description: 'Show token usage and estimated cost by model, task, and day',
7
+ },
8
+ args: {
9
+ days: { type: 'string', default: '30', description: 'Lookback days' },
10
+ format: { type: 'string', default: 'text', description: 'Output format: text|json' },
11
+ },
12
+ async run({ args }) {
13
+ const analyzer = new CostAnalyzer();
14
+ const records = analyzer.loadRecords();
15
+ const breakdown = analyzer.analyze(records, parseInt(args.days, 10) || 30);
16
+ const suggestions = analyzer.suggestOptimizations(breakdown);
17
+ if (args.format === 'json') {
18
+ console.log(JSON.stringify({ breakdown: { total: breakdown.total, byModel: breakdown.byModel, byDay: breakdown.byDay }, suggestions }, null, 2));
19
+ }
20
+ else {
21
+ console.log(analyzer.renderReport(breakdown, suggestions));
22
+ }
23
+ },
24
+ });
25
+ export const costOptimizeCommand = defineCommand({
26
+ meta: {
27
+ name: 'cost-optimize',
28
+ description: 'Show cost optimization recommendations',
29
+ },
30
+ args: {},
31
+ async run() {
32
+ const analyzer = new CostAnalyzer();
33
+ const records = analyzer.loadRecords();
34
+ const breakdown = analyzer.analyze(records);
35
+ const suggestions = analyzer.suggestOptimizations(breakdown);
36
+ console.log('--- Cost Optimization Recommendations ---\n');
37
+ for (const s of suggestions) {
38
+ console.log(` Category: ${s.category}`);
39
+ console.log(` ${s.description}`);
40
+ console.log(` Estimated monthly savings: $${s.estimatedMonthlySavings.toFixed(2)}`);
41
+ console.log(` Confidence: ${Math.round(s.confidence * 100)}%\n`);
42
+ }
43
+ if (suggestions.length === 0) {
44
+ console.log(' No optimization suggestions available.');
45
+ }
46
+ },
47
+ });
48
+ //# sourceMappingURL=costCommands.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"costCommands.js","sourceRoot":"","sources":["../../src/cli/costCommands.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,OAAO,CAAA;AACrC,OAAO,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAA;AAEzD,MAAM,CAAC,MAAM,iBAAiB,GAAG,aAAa,CAAC;IAC7C,IAAI,EAAE;QACJ,IAAI,EAAE,aAAa;QACnB,WAAW,EAAE,6DAA6D;KAC3E;IACD,IAAI,EAAE;QACJ,IAAI,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE,eAAe,EAAE;QACrE,MAAM,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,0BAA0B,EAAE;KACrF;IACD,KAAK,CAAC,GAAG,CAAC,EAAE,IAAI,EAAE;QAChB,MAAM,QAAQ,GAAG,IAAI,YAAY,EAAE,CAAA;QACnC,MAAM,OAAO,GAAG,QAAQ,CAAC,WAAW,EAAE,CAAA;QACtC,MAAM,SAAS,GAAG,QAAQ,CAAC,OAAO,CAAC,OAAO,EAAE,QAAQ,CAAC,IAAI,CAAC,IAAc,EAAE,EAAE,CAAC,IAAI,EAAE,CAAC,CAAA;QACpF,MAAM,WAAW,GAAG,QAAQ,CAAC,oBAAoB,CAAC,SAAS,CAAC,CAAA;QAE5D,IAAK,IAAI,CAAC,MAAiB,KAAK,MAAM,EAAE,CAAC;YACvC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,SAAS,EAAE,EAAE,KAAK,EAAE,SAAS,CAAC,KAAK,EAAE,OAAO,EAAE,SAAS,CAAC,OAAO,EAAE,KAAK,EAAE,SAAS,CAAC,KAAK,EAAE,EAAE,WAAW,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAA;QAClJ,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,YAAY,CAAC,SAAS,EAAE,WAAW,CAAC,CAAC,CAAA;QAC5D,CAAC;IACH,CAAC;CACF,CAAC,CAAA;AAEF,MAAM,CAAC,MAAM,mBAAmB,GAAG,aAAa,CAAC;IAC/C,IAAI,EAAE;QACJ,IAAI,EAAE,eAAe;QACrB,WAAW,EAAE,wCAAwC;KACtD;IACD,IAAI,EAAE,EAAE;IACR,KAAK,CAAC,GAAG;QACP,MAAM,QAAQ,GAAG,IAAI,YAAY,EAAE,CAAA;QACnC,MAAM,OAAO,GAAG,QAAQ,CAAC,WAAW,EAAE,CAAA;QACtC,MAAM,SAAS,GAAG,QAAQ,CAAC,OAAO,CAAC,OAAO,CAAC,CAAA;QAC3C,MAAM,WAAW,GAAG,QAAQ,CAAC,oBAAoB,CAAC,SAAS,CAAC,CAAA;QAE5D,OAAO,CAAC,GAAG,CAAC,6CAA6C,CAAC,CAAA;QAC1D,KAAK,MAAM,CAAC,IAAI,WAAW,EAAE,CAAC;YAC5B,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAA;YACxC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,WAAW,EAAE,CAAC,CAAA;YACjC,OAAO,CAAC,GAAG,CAAC,iCAAiC,CAAC,CAAC,uBAAuB,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,CAAA;YACpF,OAAO,CAAC,GAAG,CAAC,iBAAiB,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,UAAU,GAAG,GAAG,CAAC,KAAK,CAAC,CAAA;QACnE,CAAC;QAED,IAAI,WAAW,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC7B,OAAO,CAAC,GAAG,CAAC,0CAA0C,CAAC,CAAA;QACzD,CAAC;IACH,CAAC;CACF,CAAC,CAAA"}
@@ -0,0 +1,43 @@
1
+ export declare const orchStartCommand: import("citty").CommandDef<{
2
+ dir: {
3
+ type: "string";
4
+ default: string;
5
+ description: string;
6
+ };
7
+ foreground: {
8
+ type: "boolean";
9
+ default: false;
10
+ description: string;
11
+ };
12
+ }>;
13
+ export declare const orchStopCommand: import("citty").CommandDef<{
14
+ dir: {
15
+ type: "string";
16
+ default: string;
17
+ description: string;
18
+ };
19
+ }>;
20
+ export declare const orchStatusCommand: import("citty").CommandDef<{
21
+ dir: {
22
+ type: "string";
23
+ default: string;
24
+ description: string;
25
+ };
26
+ json: {
27
+ type: "boolean";
28
+ default: false;
29
+ };
30
+ }>;
31
+ export declare const orchLogCommand: import("citty").CommandDef<{
32
+ dir: {
33
+ type: "string";
34
+ default: string;
35
+ description: string;
36
+ };
37
+ lines: {
38
+ type: "string";
39
+ default: string;
40
+ description: string;
41
+ };
42
+ }>;
43
+ export declare const orchCommand: import("citty").CommandDef<import("citty").ArgsDef>;
@@ -0,0 +1,135 @@
1
+ import { defineCommand } from 'citty';
2
+ import { OrchestratorDaemon } from '../orchestrator/OrchestratorDaemon.js';
3
+ // ---------------------------------------------------------------------------
4
+ // scale orch start
5
+ // ---------------------------------------------------------------------------
6
+ export const orchStartCommand = defineCommand({
7
+ meta: {
8
+ name: 'start',
9
+ description: 'Start the SCALE Orchestrator daemon for autonomous issue processing',
10
+ },
11
+ args: {
12
+ dir: { type: 'string', default: process.cwd(), description: 'Project directory' },
13
+ foreground: { type: 'boolean', default: false, description: 'Run in foreground (blocking)' },
14
+ },
15
+ async run({ args }) {
16
+ const projectDir = String(args.dir ?? process.cwd());
17
+ const daemon = new OrchestratorDaemon(projectDir);
18
+ console.log('SCALE Orchestrator — Starting daemon\n');
19
+ const result = await daemon.start();
20
+ if (!result.success) {
21
+ console.log(` ${result.reason ?? 'Failed to start'}`);
22
+ return;
23
+ }
24
+ console.log(` PID: ${result.pid}`);
25
+ console.log(` Config: SCALE_POLICY.md`);
26
+ console.log(` Poll interval: 30s`);
27
+ console.log(` Max parallel: 3`);
28
+ console.log();
29
+ if (args.foreground) {
30
+ console.log(' Running in foreground. Press Ctrl+C to stop.\n');
31
+ // Keep alive in foreground
32
+ await new Promise(() => { }); // never resolve — wait for SIGINT
33
+ }
34
+ else {
35
+ console.log(' Daemon running in background.');
36
+ console.log(' Use: scale orch status | scale orch stop | scale orch log\n');
37
+ }
38
+ },
39
+ });
40
+ // ---------------------------------------------------------------------------
41
+ // scale orch stop
42
+ // ---------------------------------------------------------------------------
43
+ export const orchStopCommand = defineCommand({
44
+ meta: {
45
+ name: 'stop',
46
+ description: 'Stop the SCALE Orchestrator daemon gracefully',
47
+ },
48
+ args: {
49
+ dir: { type: 'string', default: process.cwd(), description: 'Project directory' },
50
+ },
51
+ async run({ args }) {
52
+ const projectDir = String(args.dir ?? process.cwd());
53
+ const daemon = new OrchestratorDaemon(projectDir);
54
+ console.log('Stopping SCALE Orchestrator...');
55
+ const result = await daemon.stop();
56
+ console.log(result.success ? ' Daemon stopped' : ' Daemon was not running');
57
+ },
58
+ });
59
+ // ---------------------------------------------------------------------------
60
+ // scale orch status
61
+ // ---------------------------------------------------------------------------
62
+ export const orchStatusCommand = defineCommand({
63
+ meta: {
64
+ name: 'status',
65
+ description: 'Show SCALE Orchestrator daemon status and active workspaces',
66
+ },
67
+ args: {
68
+ dir: { type: 'string', default: process.cwd(), description: 'Project directory' },
69
+ json: { type: 'boolean', default: false },
70
+ },
71
+ async run({ args }) {
72
+ const projectDir = String(args.dir ?? process.cwd());
73
+ const daemon = new OrchestratorDaemon(projectDir);
74
+ const status = daemon.status();
75
+ if (args.json) {
76
+ console.log(JSON.stringify(status, null, 2));
77
+ return;
78
+ }
79
+ console.log('SCALE Orchestrator Status\n');
80
+ console.log(` Running: ${status.running ? '✅ Yes' : '❌ No'}`);
81
+ if (status.pid)
82
+ console.log(` PID: ${status.pid}`);
83
+ if (status.startedAt)
84
+ console.log(` Started: ${status.startedAt}`);
85
+ if (status.uptime)
86
+ console.log(` Uptime: ${Math.round(status.uptime / 60000)} minutes`);
87
+ console.log(` Policy: ${status.policyPath} (hash: ${status.policyHash})`);
88
+ console.log(` Workspaces: ${status.activeWorkspaces} active`);
89
+ console.log(` Dispatched: ${status.totalDispatched} total`);
90
+ if (status.activeIssues.length > 0) {
91
+ console.log('\n Active issues:');
92
+ for (const id of status.activeIssues) {
93
+ console.log(` → #${id}`);
94
+ }
95
+ }
96
+ console.log();
97
+ },
98
+ });
99
+ // ---------------------------------------------------------------------------
100
+ // scale orch log
101
+ // ---------------------------------------------------------------------------
102
+ export const orchLogCommand = defineCommand({
103
+ meta: {
104
+ name: 'log',
105
+ description: 'Show recent SCALE Orchestrator daemon log entries',
106
+ },
107
+ args: {
108
+ dir: { type: 'string', default: process.cwd(), description: 'Project directory' },
109
+ lines: { type: 'string', default: '50', description: 'Number of recent log lines' },
110
+ },
111
+ async run({ args }) {
112
+ const projectDir = String(args.dir ?? process.cwd());
113
+ const daemon = new OrchestratorDaemon(projectDir);
114
+ const lines = parseInt(String(args.lines ?? 50), 10) || 50;
115
+ console.log('SCALE Orchestrator Log\n');
116
+ console.log(daemon.readLog(lines));
117
+ console.log();
118
+ },
119
+ });
120
+ // ---------------------------------------------------------------------------
121
+ // scale orch (parent)
122
+ // ---------------------------------------------------------------------------
123
+ export const orchCommand = defineCommand({
124
+ meta: {
125
+ name: 'orch',
126
+ description: 'SCALE Orchestrator — Declarative daemon-based orchestration',
127
+ },
128
+ subCommands: {
129
+ start: orchStartCommand,
130
+ stop: orchStopCommand,
131
+ status: orchStatusCommand,
132
+ log: orchLogCommand,
133
+ },
134
+ });
135
+ //# sourceMappingURL=orchCommands.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"orchCommands.js","sourceRoot":"","sources":["../../src/cli/orchCommands.ts"],"names":[],"mappings":"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"}
@@ -1203,8 +1203,7 @@ export const phaseVerify = defineCommand({
1203
1203
  toolEvidenceGatePassed: finalToolEvidenceGate ? !finalToolEvidenceGate.blocked : true,
1204
1204
  };
1205
1205
  await store.update(args['task-id'], { payload: finalPayload });
1206
- const metricGateStatus = codePassed &&
1207
- (finalArtifactGate.blocked || finalSkillGate?.blocked || skillInstallationBlocked || engineeringStandards.blocked || finalToolEvidenceGate?.blocked || workflowOpenTasksBlocked)
1206
+ const metricGateStatus = (finalArtifactGate.blocked || finalSkillGate?.blocked || skillInstallationBlocked || engineeringStandards.blocked || finalToolEvidenceGate?.blocked || workflowOpenTasksBlocked)
1208
1207
  ? 'blocked'
1209
1208
  : undefined;
1210
1209
  const metricRecord = await recordVerificationMetric({