@hongmaple0820/scale-engine 0.40.2 → 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 (200) hide show
  1. package/README.md +30 -2
  2. package/dist/api/cli.js +19 -0
  3. package/dist/api/cli.js.map +1 -1
  4. package/dist/api/quickstart.d.ts +11 -0
  5. package/dist/api/quickstart.js +98 -1
  6. package/dist/api/quickstart.js.map +1 -1
  7. package/dist/artifact/fsmDefinitions.js +15 -2
  8. package/dist/artifact/fsmDefinitions.js.map +1 -1
  9. package/dist/artifact/types.d.ts +1 -1
  10. package/dist/artifact/types.js.map +1 -1
  11. package/dist/cache/ScanCache.d.ts +41 -0
  12. package/dist/cache/ScanCache.js +120 -0
  13. package/dist/cache/ScanCache.js.map +1 -0
  14. package/dist/capabilities/BrowserQACapability.d.ts +14 -0
  15. package/dist/capabilities/BrowserQACapability.js +94 -0
  16. package/dist/capabilities/BrowserQACapability.js.map +1 -1
  17. package/dist/cli/autofixCommands.d.ts +22 -0
  18. package/dist/cli/autofixCommands.js +32 -0
  19. package/dist/cli/autofixCommands.js.map +1 -0
  20. package/dist/cli/cortexCommands.d.ts +71 -0
  21. package/dist/cli/cortexCommands.js +335 -0
  22. package/dist/cli/cortexCommands.js.map +1 -0
  23. package/dist/cli/costCommands.d.ts +13 -0
  24. package/dist/cli/costCommands.js +48 -0
  25. package/dist/cli/costCommands.js.map +1 -0
  26. package/dist/cli/orchCommands.d.ts +43 -0
  27. package/dist/cli/orchCommands.js +135 -0
  28. package/dist/cli/orchCommands.js.map +1 -0
  29. package/dist/cli/phaseCommands.js +1 -2
  30. package/dist/cli/phaseCommands.js.map +1 -1
  31. package/dist/cli/qaCommands.d.ts +22 -0
  32. package/dist/cli/qaCommands.js +84 -0
  33. package/dist/cli/qaCommands.js.map +1 -0
  34. package/dist/cli/quickstartCommands.d.ts +17 -0
  35. package/dist/cli/quickstartCommands.js +47 -0
  36. package/dist/cli/quickstartCommands.js.map +1 -0
  37. package/dist/cli/shieldCommands.d.ts +30 -0
  38. package/dist/cli/shieldCommands.js +212 -0
  39. package/dist/cli/shieldCommands.js.map +1 -0
  40. package/dist/cli/tuiCommands.d.ts +7 -0
  41. package/dist/cli/tuiCommands.js +33 -0
  42. package/dist/cli/tuiCommands.js.map +1 -0
  43. package/dist/config/profiles.js +26 -0
  44. package/dist/config/profiles.js.map +1 -1
  45. package/dist/cortex/GovernanceMetrics.d.ts +66 -0
  46. package/dist/cortex/GovernanceMetrics.js +230 -0
  47. package/dist/cortex/GovernanceMetrics.js.map +1 -0
  48. package/dist/cortex/InstinctExtractor.d.ts +61 -0
  49. package/dist/cortex/InstinctExtractor.js +184 -0
  50. package/dist/cortex/InstinctExtractor.js.map +1 -0
  51. package/dist/cortex/InstinctStore.d.ts +54 -0
  52. package/dist/cortex/InstinctStore.js +266 -0
  53. package/dist/cortex/InstinctStore.js.map +1 -0
  54. package/dist/cortex/ReflexionEngine.d.ts +34 -0
  55. package/dist/cortex/ReflexionEngine.js +157 -0
  56. package/dist/cortex/ReflexionEngine.js.map +1 -0
  57. package/dist/cortex/SessionInjector.d.ts +44 -0
  58. package/dist/cortex/SessionInjector.js +127 -0
  59. package/dist/cortex/SessionInjector.js.map +1 -0
  60. package/dist/cortex/adapters/ClaudeAdapter.d.ts +17 -0
  61. package/dist/cortex/adapters/ClaudeAdapter.js +61 -0
  62. package/dist/cortex/adapters/ClaudeAdapter.js.map +1 -0
  63. package/dist/cortex/adapters/CodexAdapter.d.ts +10 -0
  64. package/dist/cortex/adapters/CodexAdapter.js +52 -0
  65. package/dist/cortex/adapters/CodexAdapter.js.map +1 -0
  66. package/dist/cortex/adapters/CursorAdapter.d.ts +10 -0
  67. package/dist/cortex/adapters/CursorAdapter.js +46 -0
  68. package/dist/cortex/adapters/CursorAdapter.js.map +1 -0
  69. package/dist/cortex/adapters/GeminiAdapter.d.ts +11 -0
  70. package/dist/cortex/adapters/GeminiAdapter.js +48 -0
  71. package/dist/cortex/adapters/GeminiAdapter.js.map +1 -0
  72. package/dist/eval/BenchmarkPublisher.d.ts +25 -0
  73. package/dist/eval/BenchmarkPublisher.js +27 -0
  74. package/dist/eval/BenchmarkPublisher.js.map +1 -0
  75. package/dist/guardrails/DependencyAuditor.js +10 -1
  76. package/dist/guardrails/DependencyAuditor.js.map +1 -1
  77. package/dist/orchestrator/OrchestratorDaemon.d.ts +44 -0
  78. package/dist/orchestrator/OrchestratorDaemon.js +150 -0
  79. package/dist/orchestrator/OrchestratorDaemon.js.map +1 -0
  80. package/dist/orchestrator/PolicyLoader.d.ts +80 -0
  81. package/dist/orchestrator/PolicyLoader.js +229 -0
  82. package/dist/orchestrator/PolicyLoader.js.map +1 -0
  83. package/dist/orchestrator/ReconciliationLoop.d.ts +71 -0
  84. package/dist/orchestrator/ReconciliationLoop.js +266 -0
  85. package/dist/orchestrator/ReconciliationLoop.js.map +1 -0
  86. package/dist/orchestrator/TrackerAdapter.d.ts +60 -0
  87. package/dist/orchestrator/TrackerAdapter.js +147 -0
  88. package/dist/orchestrator/TrackerAdapter.js.map +1 -0
  89. package/dist/orchestrator/WorkspaceManager.d.ts +66 -0
  90. package/dist/orchestrator/WorkspaceManager.js +257 -0
  91. package/dist/orchestrator/WorkspaceManager.js.map +1 -0
  92. package/dist/qa/BrowserDaemon.d.ts +23 -0
  93. package/dist/qa/BrowserDaemon.js +79 -0
  94. package/dist/qa/BrowserDaemon.js.map +1 -0
  95. package/dist/qa/E2ETestOrchestrator.d.ts +14 -0
  96. package/dist/qa/E2ETestOrchestrator.js +19 -0
  97. package/dist/qa/E2ETestOrchestrator.js.map +1 -0
  98. package/dist/review/CrossModelReviewer.d.ts +35 -0
  99. package/dist/review/CrossModelReviewer.js +75 -0
  100. package/dist/review/CrossModelReviewer.js.map +1 -0
  101. package/dist/review/ReviewAggregator.d.ts +13 -0
  102. package/dist/review/ReviewAggregator.js +28 -0
  103. package/dist/review/ReviewAggregator.js.map +1 -0
  104. package/dist/review/reviewCommands.d.ts +15 -0
  105. package/dist/review/reviewCommands.js +24 -0
  106. package/dist/review/reviewCommands.js.map +1 -0
  107. package/dist/routing/LocalModelProvider.d.ts +11 -0
  108. package/dist/routing/LocalModelProvider.js +21 -0
  109. package/dist/routing/LocalModelProvider.js.map +1 -0
  110. package/dist/routing/ModelRouter.d.ts +12 -0
  111. package/dist/routing/ModelRouter.js +31 -4
  112. package/dist/routing/ModelRouter.js.map +1 -1
  113. package/dist/runtime/AiOsRuntime.d.ts +1 -0
  114. package/dist/runtime/AiOsRuntime.js +15 -0
  115. package/dist/runtime/AiOsRuntime.js.map +1 -1
  116. package/dist/runtime/CostAnalyzer.d.ts +53 -0
  117. package/dist/runtime/CostAnalyzer.js +160 -0
  118. package/dist/runtime/CostAnalyzer.js.map +1 -0
  119. package/dist/runtime/CostOptimizer.d.ts +11 -0
  120. package/dist/runtime/CostOptimizer.js +21 -0
  121. package/dist/runtime/CostOptimizer.js.map +1 -0
  122. package/dist/shield/PolicyCompiler.d.ts +70 -0
  123. package/dist/shield/PolicyCompiler.js +540 -0
  124. package/dist/shield/PolicyCompiler.js.map +1 -0
  125. package/dist/shield/ProtectedPaths.d.ts +39 -0
  126. package/dist/shield/ProtectedPaths.js +179 -0
  127. package/dist/shield/ProtectedPaths.js.map +1 -0
  128. package/dist/shield/ShieldProtocol.d.ts +50 -0
  129. package/dist/shield/ShieldProtocol.js +103 -0
  130. package/dist/shield/ShieldProtocol.js.map +1 -0
  131. package/dist/skills/SkillMdStandard.d.ts +33 -0
  132. package/dist/skills/SkillMdStandard.js +88 -0
  133. package/dist/skills/SkillMdStandard.js.map +1 -0
  134. package/dist/skills/SkillRegistry.d.ts +9 -1
  135. package/dist/skills/SkillRegistry.js +20 -0
  136. package/dist/skills/SkillRegistry.js.map +1 -1
  137. package/dist/skills/interop/GStackInterop.d.ts +15 -0
  138. package/dist/skills/interop/GStackInterop.js +34 -0
  139. package/dist/skills/interop/GStackInterop.js.map +1 -0
  140. package/dist/skills/interop/OMCInterop.d.ts +15 -0
  141. package/dist/skills/interop/OMCInterop.js +34 -0
  142. package/dist/skills/interop/OMCInterop.js.map +1 -0
  143. package/dist/tui/TuiDashboard.d.ts +3 -0
  144. package/dist/tui/TuiDashboard.js +120 -0
  145. package/dist/tui/TuiDashboard.js.map +1 -0
  146. package/dist/workflow/GateCatalog.d.ts +2 -0
  147. package/dist/workflow/GateCatalog.js +59 -3
  148. package/dist/workflow/GateCatalog.js.map +1 -1
  149. package/dist/workflow/GovernanceTemplatePacks.d.ts +1 -1
  150. package/dist/workflow/GovernanceTemplatePacks.js +15 -0
  151. package/dist/workflow/GovernanceTemplatePacks.js.map +1 -1
  152. package/dist/workflow/TddLoop.d.ts +2 -0
  153. package/dist/workflow/TddLoop.js +2 -0
  154. package/dist/workflow/TddLoop.js.map +1 -1
  155. package/dist/workflow/UpgradeManager.d.ts +10 -1
  156. package/dist/workflow/UpgradeManager.js +55 -0
  157. package/dist/workflow/UpgradeManager.js.map +1 -1
  158. package/dist/workflow/VerificationProfile.d.ts +8 -0
  159. package/dist/workflow/VerificationProfile.js +61 -0
  160. package/dist/workflow/VerificationProfile.js.map +1 -1
  161. package/dist/workflow/VerificationSchema.d.ts +46 -0
  162. package/dist/workflow/VerificationSchema.js +97 -0
  163. package/dist/workflow/VerificationSchema.js.map +1 -0
  164. package/dist/workflow/autofix/AutoFixEngine.d.ts +37 -0
  165. package/dist/workflow/autofix/AutoFixEngine.js +169 -0
  166. package/dist/workflow/autofix/AutoFixEngine.js.map +1 -0
  167. package/dist/workflow/execution/RalphEngine.d.ts +18 -0
  168. package/dist/workflow/execution/RalphEngine.js +22 -0
  169. package/dist/workflow/execution/RalphEngine.js.map +1 -1
  170. package/dist/workflow/gates/EnhancedGates.d.ts +74 -0
  171. package/dist/workflow/gates/EnhancedGates.js +653 -0
  172. package/dist/workflow/gates/EnhancedGates.js.map +1 -0
  173. package/dist/workflow/gates/GateSystem.d.ts +3 -0
  174. package/dist/workflow/gates/GateSystem.js +94 -1
  175. package/dist/workflow/gates/GateSystem.js.map +1 -1
  176. package/dist/workflow/types.d.ts +1 -1
  177. package/docs/README.md +3 -0
  178. package/docs/guides/DEVELOPMENT_WORKFLOW.md +28 -9
  179. package/docs/guides/GETTING_STARTED.md +19 -0
  180. package/docs/guides/MIGRATION.md +119 -0
  181. package/docs/workflow/GATES_AND_SCORE.md +34 -1
  182. package/docs/workflow/README.md +58 -10
  183. package/package.json +5 -17
  184. package/docs/ACTIVE_SECURITY_VISUAL_GATES.md +0 -87
  185. package/docs/AI_ENGINEERING_OS_POSITIONING.md +0 -607
  186. package/docs/BACKGROUND_HUNTER.md +0 -62
  187. package/docs/CODE_INTELLIGENCE.md +0 -180
  188. package/docs/CONTEXT_BUDGET.md +0 -165
  189. package/docs/DEPENDENCY_AUDIT.md +0 -118
  190. package/docs/EVOLUTION_SHADOW_MODE.md +0 -63
  191. package/docs/GITLAB_FLOW.md +0 -125
  192. package/docs/GOVERNANCE_DASHBOARD.md +0 -92
  193. package/docs/MEMORY_BRAIN.md +0 -104
  194. package/docs/MEMORY_FABRIC.md +0 -161
  195. package/docs/RESOURCE_GOVERNANCE.md +0 -92
  196. package/docs/RUNTIME_EVIDENCE.md +0 -101
  197. package/docs/WORKFLOW_EVAL.md +0 -151
  198. package/image/wechat-public.jpg +0 -0
  199. package/image/wxPay.jpg +0 -0
  200. package/image/zfb.jpg +0 -0
@@ -0,0 +1,266 @@
1
+ // SCALE Cortex — Instinct Store
2
+ // 对齐 ECC: hierarchical filesystem-based storage under .scale/instincts/
3
+ // Future: SQLite-backed in Cortex v2
4
+ import { existsSync, mkdirSync, readdirSync, readFileSync, writeFileSync, unlinkSync } from 'node:fs';
5
+ import { join } from 'node:path';
6
+ import { createHash } from 'node:crypto';
7
+ import { logger } from '../core/logger.js';
8
+ // ---------------------------------------------------------------------------
9
+ // InstinctStore
10
+ // ---------------------------------------------------------------------------
11
+ export class InstinctStore {
12
+ constructor(baseDir = join(process.cwd(), '.scale', 'instincts')) {
13
+ this.baseDir = baseDir;
14
+ if (!existsSync(baseDir))
15
+ mkdirSync(baseDir, { recursive: true });
16
+ }
17
+ /**
18
+ * Save an instinct to disk.
19
+ * Deduplication: if an instinct with the same trigger exists, only keep the higher-confidence one.
20
+ */
21
+ save(instinct) {
22
+ const existing = this.findByTrigger(instinct.trigger);
23
+ if (existing && existing.confidence >= instinct.confidence) {
24
+ // Keep existing. Increment observation count.
25
+ existing.observations += instinct.observations;
26
+ existing.updatedAt = new Date().toISOString();
27
+ this.writeInstinctFile(existing);
28
+ return existing.id;
29
+ }
30
+ // New or higher-confidence instinct replaces existing
31
+ if (existing) {
32
+ this.delete(existing.id);
33
+ }
34
+ instinct.updatedAt = new Date().toISOString();
35
+ this.writeInstinctFile(instinct);
36
+ return instinct.id;
37
+ }
38
+ /**
39
+ * Load all instincts from disk.
40
+ */
41
+ loadAll() {
42
+ const instincts = [];
43
+ if (!existsSync(this.baseDir))
44
+ return instincts;
45
+ try {
46
+ for (const domain of readdirSync(this.baseDir)) {
47
+ const domainDir = join(this.baseDir, domain);
48
+ if (!domain.endsWith('.yaml') && existsSync(domainDir) && !domain.startsWith('.')) {
49
+ // Directory-based domain
50
+ try {
51
+ for (const file of readdirSync(domainDir)) {
52
+ if (!file.endsWith('.yaml'))
53
+ continue;
54
+ const instinct = this.parseInstinctFile(join(domainDir, file));
55
+ if (instinct)
56
+ instincts.push(instinct);
57
+ }
58
+ }
59
+ catch { /* skip unreadable domains */ }
60
+ }
61
+ else if (domain.endsWith('.yaml')) {
62
+ // Flat file in root
63
+ const instinct = this.parseInstinctFile(join(this.baseDir, domain));
64
+ if (instinct)
65
+ instincts.push(instinct);
66
+ }
67
+ }
68
+ }
69
+ catch (err) {
70
+ logger.warn({ err }, 'Failed to load instincts');
71
+ }
72
+ return instincts.sort((a, b) => b.confidence - a.confidence);
73
+ }
74
+ /**
75
+ * Get instincts filtered by confidence threshold and scope.
76
+ */
77
+ query(options) {
78
+ let instincts = this.loadAll();
79
+ if (options.minConfidence) {
80
+ instincts = instincts.filter(i => i.confidence >= options.minConfidence);
81
+ }
82
+ if (options.domain) {
83
+ instincts = instincts.filter(i => i.domain === options.domain);
84
+ }
85
+ if (options.scope) {
86
+ instincts = instincts.filter(i => i.scope === options.scope);
87
+ }
88
+ if (options.projectId) {
89
+ instincts = instincts.filter(i => !i.projectId || i.projectId === options.projectId);
90
+ }
91
+ return instincts;
92
+ }
93
+ /**
94
+ * Get high-confidence instincts for SessionStart injection (0.7+).
95
+ */
96
+ getInjectionInstincts(projectId) {
97
+ return this.query({ minConfidence: 0.7, projectId });
98
+ }
99
+ /**
100
+ * Find an instinct by trigger pattern.
101
+ */
102
+ findByTrigger(trigger) {
103
+ const hash = createHash('sha256').update(trigger).digest('hex').slice(0, 10);
104
+ const id = `instinct-${hash}`;
105
+ return this.findById(id);
106
+ }
107
+ /**
108
+ * Find an instinct by ID.
109
+ */
110
+ findById(id) {
111
+ // Search all domain directories
112
+ if (!existsSync(this.baseDir))
113
+ return null;
114
+ try {
115
+ for (const entry of readdirSync(this.baseDir)) {
116
+ const full = join(this.baseDir, entry);
117
+ if (existsSync(full) && !entry.startsWith('.')) {
118
+ if (!entry.endsWith('.yaml')) {
119
+ // Domain directory
120
+ const filePath = join(full, `${id}.yaml`);
121
+ if (existsSync(filePath))
122
+ return this.parseInstinctFile(filePath);
123
+ }
124
+ }
125
+ }
126
+ }
127
+ catch { /* skip */ }
128
+ // Flat file search
129
+ const flatPath = join(this.baseDir, `${id}.yaml`);
130
+ if (existsSync(flatPath))
131
+ return this.parseInstinctFile(flatPath);
132
+ return null;
133
+ }
134
+ /**
135
+ * Delete an instinct by ID.
136
+ */
137
+ delete(id) {
138
+ const instinct = this.findById(id);
139
+ if (!instinct)
140
+ return false;
141
+ const domainDir = join(this.baseDir, instinct.domain);
142
+ const filePath = join(domainDir, `${id}.yaml`);
143
+ try {
144
+ if (existsSync(filePath))
145
+ unlinkSync(filePath);
146
+ return true;
147
+ }
148
+ catch (err) {
149
+ logger.warn({ err, id }, 'Failed to delete instinct');
150
+ return false;
151
+ }
152
+ }
153
+ /**
154
+ * Record an instinct was applied (for hit rate tracking).
155
+ */
156
+ recordApplication(id, success) {
157
+ const instinct = this.findById(id);
158
+ if (!instinct)
159
+ return;
160
+ instinct.appliedCount++;
161
+ instinct.hitRate = instinct.observations > 0
162
+ ? instinct.appliedCount / instinct.observations
163
+ : 0;
164
+ instinct.updatedAt = new Date().toISOString();
165
+ this.writeInstinctFile(instinct);
166
+ }
167
+ /**
168
+ * Get store statistics.
169
+ */
170
+ stats() {
171
+ const all = this.loadAll();
172
+ const byDomain = {};
173
+ const byConfidence = {
174
+ 'near-certain (0.9)': 0,
175
+ 'strong (0.7)': 0,
176
+ 'moderate (0.5)': 0,
177
+ 'tentative (0.3)': 0,
178
+ };
179
+ for (const i of all) {
180
+ byDomain[i.domain] = (byDomain[i.domain] ?? 0) + 1;
181
+ if (i.confidence >= 0.9)
182
+ byConfidence['near-certain (0.9)']++;
183
+ else if (i.confidence >= 0.7)
184
+ byConfidence['strong (0.7)']++;
185
+ else if (i.confidence >= 0.5)
186
+ byConfidence['moderate (0.5)']++;
187
+ else
188
+ byConfidence['tentative (0.3)']++;
189
+ }
190
+ return { total: all.length, byDomain, byConfidence };
191
+ }
192
+ // -----------------------------------------------------------------------
193
+ // Internal
194
+ // -----------------------------------------------------------------------
195
+ writeInstinctFile(instinct) {
196
+ const domainDir = join(this.baseDir, instinct.domain);
197
+ if (!existsSync(domainDir))
198
+ mkdirSync(domainDir, { recursive: true });
199
+ const filePath = join(domainDir, `${instinct.id}.yaml`);
200
+ const yaml = this.serializeInstinct(instinct);
201
+ writeFileSync(filePath, yaml, 'utf-8');
202
+ }
203
+ serializeInstinct(instinct) {
204
+ const frontmatter = [
205
+ `id: ${instinct.id}`,
206
+ `trigger: "${instinct.trigger.replace(/"/g, '\\"')}"`,
207
+ `confidence: ${instinct.confidence}`,
208
+ `domain: ${instinct.domain}`,
209
+ `source: "${instinct.source}"`,
210
+ `scope: ${instinct.scope}`,
211
+ `project_id: ${instinct.projectId ?? ''}`,
212
+ `observations: ${instinct.observations}`,
213
+ `applied_count: ${instinct.appliedCount}`,
214
+ `hit_rate: ${instinct.hitRate.toFixed(2)}`,
215
+ `created_at: ${instinct.createdAt}`,
216
+ `updated_at: ${instinct.updatedAt}`,
217
+ ].join('\n');
218
+ const evidence = instinct.evidence.map(e => ` - "${e}"`).join('\n');
219
+ return [
220
+ '---',
221
+ frontmatter,
222
+ '---',
223
+ '',
224
+ instinct.action,
225
+ '',
226
+ '## Evidence',
227
+ evidence,
228
+ '',
229
+ ].join('\n');
230
+ }
231
+ parseInstinctFile(filePath) {
232
+ try {
233
+ const raw = readFileSync(filePath, 'utf-8');
234
+ const fmMatch = raw.match(/^---\n([\s\S]*?)\n---\n([\s\S]*)$/);
235
+ if (!fmMatch)
236
+ return null;
237
+ const frontmatter = fmMatch[1];
238
+ const body = fmMatch[2] ?? '';
239
+ const getYamlVal = (key) => {
240
+ const m = frontmatter.match(new RegExp(`^${key}:\\s*(.+?)$`, 'm'));
241
+ return m ? m[1].trim().replace(/^"(.*)"$/, '$1') : '';
242
+ };
243
+ return {
244
+ id: getYamlVal('id'),
245
+ trigger: getYamlVal('trigger'),
246
+ confidence: parseFloat(getYamlVal('confidence')) || 0.3,
247
+ domain: getYamlVal('domain') || 'general',
248
+ source: getYamlVal('source'),
249
+ scope: getYamlVal('scope') || 'project',
250
+ projectId: getYamlVal('project_id') || undefined,
251
+ action: body.trim(),
252
+ evidence: [],
253
+ observations: parseInt(getYamlVal('observations'), 10) || 0,
254
+ createdAt: getYamlVal('created_at') || new Date().toISOString(),
255
+ updatedAt: getYamlVal('updated_at') || new Date().toISOString(),
256
+ appliedCount: parseInt(getYamlVal('applied_count'), 10) || 0,
257
+ hitRate: parseFloat(getYamlVal('hit_rate')) || 0,
258
+ };
259
+ }
260
+ catch (err) {
261
+ logger.warn({ err, path: filePath }, 'Failed to parse instinct file');
262
+ return null;
263
+ }
264
+ }
265
+ }
266
+ //# sourceMappingURL=InstinctStore.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"InstinctStore.js","sourceRoot":"","sources":["../../src/cortex/InstinctStore.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,34 @@
1
+ import type { Observation, Instinct } from './InstinctExtractor.js';
2
+ export interface ReflexionResult {
3
+ rootCause: string;
4
+ confidence: number;
5
+ suggestedAction: string;
6
+ relatedFailures: string[];
7
+ instinct: Instinct | null;
8
+ modelUsed: string;
9
+ tokensUsed: number;
10
+ }
11
+ export declare class ReflexionEngine {
12
+ private modelEndpoint;
13
+ private modelName;
14
+ private enabled;
15
+ constructor(options?: {
16
+ endpoint?: string;
17
+ model?: string;
18
+ });
19
+ /**
20
+ * Reflect on a set of failed observations to produce root cause analysis.
21
+ */
22
+ reflect(observations: Observation[]): Promise<ReflexionResult>;
23
+ /**
24
+ * Reflect on gate failure patterns and generate improvement instincts.
25
+ */
26
+ reflectOnGate(gateName: string, failures: Observation[]): Promise<ReflexionResult>;
27
+ /**
28
+ * Batch reflect across all failing gates and merge results.
29
+ */
30
+ reflectAll(observations: Observation[]): Promise<ReflexionResult[]>;
31
+ private llmReflect;
32
+ private heuristicReflect;
33
+ private buildReflectionPrompt;
34
+ }
@@ -0,0 +1,157 @@
1
+ // SCALE Cortex — Reflexion Engine
2
+ // 对齐 ECC: local LLM (Qwen/GLM/DeepSeek) reflection on failure evidence
3
+ // Output: root cause analysis + improvement suggestions + actionable instincts
4
+ // Cost: $0 API fees (local model)
5
+ import { logger } from '../core/logger.js';
6
+ // ---------------------------------------------------------------------------
7
+ // ReflexionEngine
8
+ // ---------------------------------------------------------------------------
9
+ export class ReflexionEngine {
10
+ constructor(options) {
11
+ this.modelEndpoint = options?.endpoint ?? process.env.SCALE_LOCAL_BASE_URL ?? 'http://localhost:11434';
12
+ this.modelName = options?.model ?? process.env.SCALE_LOCAL_MODEL ?? 'qwen-2.5';
13
+ this.enabled = !!process.env.SCALE_LOCAL_MODEL || !!options?.model;
14
+ }
15
+ /**
16
+ * Reflect on a set of failed observations to produce root cause analysis.
17
+ */
18
+ async reflect(observations) {
19
+ if (observations.length === 0) {
20
+ return {
21
+ rootCause: 'No observations to reflect on',
22
+ confidence: 0,
23
+ suggestedAction: 'Collect more data',
24
+ relatedFailures: [],
25
+ instinct: null,
26
+ modelUsed: 'none',
27
+ tokensUsed: 0,
28
+ };
29
+ }
30
+ if (!this.enabled) {
31
+ return this.heuristicReflect(observations);
32
+ }
33
+ try {
34
+ return await this.llmReflect(observations);
35
+ }
36
+ catch (err) {
37
+ logger.warn({ err }, 'LLM reflection failed, falling back to heuristic');
38
+ return this.heuristicReflect(observations);
39
+ }
40
+ }
41
+ /**
42
+ * Reflect on gate failure patterns and generate improvement instincts.
43
+ */
44
+ async reflectOnGate(gateName, failures) {
45
+ const gateFailures = failures.filter(o => o.gateName === gateName && o.gateStatus === 'FAIL');
46
+ return this.reflect(gateFailures);
47
+ }
48
+ /**
49
+ * Batch reflect across all failing gates and merge results.
50
+ */
51
+ async reflectAll(observations) {
52
+ const failures = observations.filter(o => o.gateStatus === 'FAIL');
53
+ const byGate = new Map();
54
+ for (const obs of failures) {
55
+ if (!byGate.has(obs.gateName))
56
+ byGate.set(obs.gateName, []);
57
+ byGate.get(obs.gateName).push(obs);
58
+ }
59
+ const results = [];
60
+ for (const [gate, obs] of byGate) {
61
+ results.push(await this.reflectOnGate(gate, obs));
62
+ }
63
+ return results;
64
+ }
65
+ // -----------------------------------------------------------------------
66
+ // Internal
67
+ // -----------------------------------------------------------------------
68
+ async llmReflect(observations) {
69
+ const prompt = this.buildReflectionPrompt(observations);
70
+ const response = await fetch(`${this.modelEndpoint}/v1/chat/completions`, {
71
+ method: 'POST',
72
+ headers: { 'Content-Type': 'application/json' },
73
+ body: JSON.stringify({
74
+ model: this.modelName,
75
+ messages: [
76
+ { role: 'system', content: 'You are a root cause analysis engine. Analyze the following gate failures and output structured JSON only.' },
77
+ { role: 'user', content: prompt },
78
+ ],
79
+ temperature: 0.3,
80
+ max_tokens: 500,
81
+ }),
82
+ signal: AbortSignal.timeout(15000),
83
+ });
84
+ if (!response.ok)
85
+ throw new Error(`LLM endpoint returned ${response.status}`);
86
+ const data = await response.json();
87
+ const content = data.choices?.[0]?.message?.content ?? '';
88
+ try {
89
+ const parsed = JSON.parse(content);
90
+ return {
91
+ rootCause: parsed.rootCause ?? 'Unknown',
92
+ confidence: parsed.confidence ?? 0.5,
93
+ suggestedAction: parsed.suggestedAction ?? 'Manual investigation recommended',
94
+ relatedFailures: parsed.relatedFailures ?? [],
95
+ instinct: null, // Caller should create instinct from this
96
+ modelUsed: this.modelName,
97
+ tokensUsed: data.usage?.total_tokens ?? 0,
98
+ };
99
+ }
100
+ catch {
101
+ // If LLM didn't return valid JSON, use heuristic
102
+ return this.heuristicReflect(observations);
103
+ }
104
+ }
105
+ heuristicReflect(observations) {
106
+ const gateName = observations[0]?.gateName ?? 'unknown';
107
+ const errorPatterns = observations
108
+ .map(o => o.errorPattern)
109
+ .filter(Boolean);
110
+ // Most common error pattern
111
+ const patternCounts = new Map();
112
+ for (const p of errorPatterns) {
113
+ patternCounts.set(p, (patternCounts.get(p) ?? 0) + 1);
114
+ }
115
+ let dominantPattern = '';
116
+ let maxCount = 0;
117
+ for (const [p, c] of patternCounts) {
118
+ if (c > maxCount) {
119
+ maxCount = c;
120
+ dominantPattern = p;
121
+ }
122
+ }
123
+ const rootCause = dominantPattern
124
+ ? `Gate "${gateName}" recurring failure: "${dominantPattern}" (${maxCount}/${observations.length} occurrences)`
125
+ : `Gate "${gateName}" failed ${observations.length} time(s) — investigate patterns`;
126
+ return {
127
+ rootCause,
128
+ confidence: maxCount > 2 ? 0.7 : 0.4,
129
+ suggestedAction: dominantPattern
130
+ ? `Run 'scale auto-fix' targeting ${gateName} failures. Check the most recent evidence for resolution clues.`
131
+ : `Collect more failure data for gate "${gateName}" to identify patterns.`,
132
+ relatedFailures: errorPatterns.slice(0, 5),
133
+ instinct: null,
134
+ modelUsed: 'heuristic',
135
+ tokensUsed: 0,
136
+ };
137
+ }
138
+ buildReflectionPrompt(observations) {
139
+ const failures = observations
140
+ .map(o => `[${o.timestamp}] Gate: ${o.gateName} | Pattern: ${o.errorPattern ?? 'unknown'} | RC: ${o.rootCause ?? 'unknown'}`)
141
+ .join('\n');
142
+ return [
143
+ 'Analyze these gate failures and output JSON:',
144
+ '',
145
+ failures,
146
+ '',
147
+ 'Output format:',
148
+ '{',
149
+ ' "rootCause": "primary root cause",',
150
+ ' "confidence": 0.0-1.0,',
151
+ ' "suggestedAction": "concrete actionable step",',
152
+ ' "relatedFailures": ["pattern1", "pattern2"]',
153
+ '}',
154
+ ].join('\n');
155
+ }
156
+ }
157
+ //# sourceMappingURL=ReflexionEngine.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ReflexionEngine.js","sourceRoot":"","sources":["../../src/cortex/ReflexionEngine.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,44 @@
1
+ import type { InstinctStore } from './InstinctStore.js';
2
+ export interface SessionInjection {
3
+ /** Rendered text injected into session start */
4
+ content: string;
5
+ /** Number of instincts injected */
6
+ instinctCount: number;
7
+ /** Metadata for metrics */
8
+ metadata: {
9
+ projectId?: string;
10
+ projectType?: string;
11
+ packageManager?: string;
12
+ instinctsApplied: string[];
13
+ };
14
+ }
15
+ export interface PriorSessionBrief {
16
+ sessionId: string;
17
+ timestamp: string;
18
+ summary: string;
19
+ taskCompleted: string;
20
+ filesChanged: string[];
21
+ gatesPassed: boolean;
22
+ }
23
+ export declare class SessionInjector {
24
+ private instinctStore;
25
+ constructor(instinctStore: InstinctStore);
26
+ /**
27
+ * Build the full SessionStart injection payload.
28
+ */
29
+ build(projectId?: string, priorSessions?: PriorSessionBrief[]): SessionInjection;
30
+ /**
31
+ * Build a minimal injection suitable for constrained context budgets.
32
+ */
33
+ buildMinimal(projectId?: string): SessionInjection;
34
+ /**
35
+ * Detect project type from filesystem.
36
+ */
37
+ detectProject(projectDir?: string): {
38
+ projectType: string;
39
+ packageManager: string;
40
+ hasGit: boolean;
41
+ };
42
+ private renderInstinctBlock;
43
+ private renderPriorSession;
44
+ }
@@ -0,0 +1,127 @@
1
+ // SCALE Cortex — Session Injector
2
+ // 对齐 ECC: SessionStart injection of high-confidence instincts
3
+ // Historical context wrapped in narrative sentinels (anti-replay protection)
4
+ // Injects: instincts + prior session summary + learned skills + project detection
5
+ // ---------------------------------------------------------------------------
6
+ // SessionInjector
7
+ // ---------------------------------------------------------------------------
8
+ const HISTORICAL_SENTINEL_START = '<!-- HISTORICAL CONTEXT — DO NOT RE-EXECUTE COMMANDS BELOW -->';
9
+ const HISTORICAL_SENTINEL_END = '<!-- END HISTORICAL CONTEXT -->';
10
+ export class SessionInjector {
11
+ constructor(instinctStore) {
12
+ this.instinctStore = instinctStore;
13
+ }
14
+ /**
15
+ * Build the full SessionStart injection payload.
16
+ */
17
+ build(projectId, priorSessions = []) {
18
+ const instincts = this.instinctStore.getInjectionInstincts(projectId);
19
+ const sections = [];
20
+ // 1. High-confidence instincts (main payload)
21
+ if (instincts.length > 0) {
22
+ sections.push('## SCALE Cortex — Learned Instincts\n');
23
+ sections.push('The following patterns have been learned from prior sessions. Use them to avoid repeating mistakes.\n');
24
+ for (const instinct of instincts) {
25
+ sections.push(this.renderInstinctBlock(instinct));
26
+ }
27
+ }
28
+ // 2. Prior session summaries (with stale replay protection)
29
+ if (priorSessions.length > 0) {
30
+ sections.push('## Recent Session History\n');
31
+ sections.push(HISTORICAL_SENTINEL_START);
32
+ sections.push('The following is historical context only. Do NOT re-execute any commands mentioned.\n');
33
+ for (const session of priorSessions.slice(0, 3)) {
34
+ sections.push(this.renderPriorSession(session));
35
+ }
36
+ sections.push(HISTORICAL_SENTINEL_END);
37
+ }
38
+ // 3. Cortex usage hint
39
+ sections.push('---');
40
+ sections.push('_SCALE Cortex is active. Run `scale cortex metrics` for ROI dashboard._');
41
+ const content = sections.join('\n');
42
+ const instinctIds = instincts.map(i => i.id);
43
+ return {
44
+ content,
45
+ instinctCount: instincts.length,
46
+ metadata: {
47
+ projectId,
48
+ instinctsApplied: instinctIds,
49
+ },
50
+ };
51
+ }
52
+ /**
53
+ * Build a minimal injection suitable for constrained context budgets.
54
+ */
55
+ buildMinimal(projectId) {
56
+ const instincts = this.instinctStore.getInjectionInstincts(projectId);
57
+ if (instincts.length === 0) {
58
+ return {
59
+ content: '',
60
+ instinctCount: 0,
61
+ metadata: { projectId, instinctsApplied: [] },
62
+ };
63
+ }
64
+ // One-liner format for minimal context consumption
65
+ const lines = instincts.map(i => `[Cortex ${i.confidence}] ${i.domain}: ${i.action.split('\n')[0]?.replace(/^##\s*/, '')?.slice(0, 120)}`);
66
+ return {
67
+ content: `SCALE Cortex Instincts (${instincts.length}):\n${lines.join('\n')}`,
68
+ instinctCount: instincts.length,
69
+ metadata: { projectId, instinctsApplied: instincts.map(i => i.id) },
70
+ };
71
+ }
72
+ /**
73
+ * Detect project type from filesystem.
74
+ */
75
+ detectProject(projectDir = process.cwd()) {
76
+ const { existsSync } = require('fs');
77
+ const { join } = require('path');
78
+ let projectType = 'generic';
79
+ let packageManager = 'none';
80
+ if (existsSync(join(projectDir, 'package.json'))) {
81
+ projectType = 'node';
82
+ if (existsSync(join(projectDir, 'pnpm-lock.yaml')))
83
+ packageManager = 'pnpm';
84
+ else if (existsSync(join(projectDir, 'yarn.lock')))
85
+ packageManager = 'yarn';
86
+ else
87
+ packageManager = 'npm';
88
+ }
89
+ else if (existsSync(join(projectDir, 'go.mod'))) {
90
+ projectType = 'go';
91
+ packageManager = 'go modules';
92
+ }
93
+ else if (existsSync(join(projectDir, 'pyproject.toml'))) {
94
+ projectType = 'python';
95
+ packageManager = 'pip/poetry';
96
+ }
97
+ else if (existsSync(join(projectDir, 'Cargo.toml'))) {
98
+ projectType = 'rust';
99
+ packageManager = 'cargo';
100
+ }
101
+ const hasGit = existsSync(join(projectDir, '.git'));
102
+ return { projectType, packageManager, hasGit };
103
+ }
104
+ // -----------------------------------------------------------------------
105
+ // Internal
106
+ // -----------------------------------------------------------------------
107
+ renderInstinctBlock(instinct) {
108
+ const confidenceLabel = instinct.confidence >= 0.9 ? 'NEAR-CERTAIN' :
109
+ instinct.confidence >= 0.7 ? 'STRONG' :
110
+ instinct.confidence >= 0.5 ? 'MODERATE' : 'TENTATIVE';
111
+ return [
112
+ `### [${confidenceLabel}] ${instinct.domain}/${instinct.id}`,
113
+ `**Confidence:** ${(instinct.confidence * 100).toFixed(0)}% | **Observed:** ${instinct.observations} times | **Hit Rate:** ${(instinct.hitRate * 100).toFixed(0)}%`,
114
+ '',
115
+ instinct.action,
116
+ '',
117
+ ].join('\n');
118
+ }
119
+ renderPriorSession(session) {
120
+ return [
121
+ `- **${session.timestamp.slice(0, 10)}**: ${session.summary}`,
122
+ ` Files: ${session.filesChanged.slice(0, 5).join(', ')}${session.filesChanged.length > 5 ? '...' : ''}`,
123
+ ` Gates: ${session.gatesPassed ? 'PASS' : 'FAIL'} | Task: ${session.taskCompleted}`,
124
+ ].join('\n');
125
+ }
126
+ }
127
+ //# sourceMappingURL=SessionInjector.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SessionInjector.js","sourceRoot":"","sources":["../../src/cortex/SessionInjector.ts"],"names":[],"mappings":"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"}