@theihtisham/agent-shadow-brain 2.1.0 → 4.0.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 (116) hide show
  1. package/README.md +443 -602
  2. package/dist/brain/accessibility-checker.d.ts +10 -0
  3. package/dist/brain/accessibility-checker.d.ts.map +1 -0
  4. package/dist/brain/accessibility-checker.js +379 -0
  5. package/dist/brain/accessibility-checker.js.map +1 -0
  6. package/dist/brain/adversarial-defense.d.ts +57 -0
  7. package/dist/brain/adversarial-defense.d.ts.map +1 -0
  8. package/dist/brain/adversarial-defense.js +303 -0
  9. package/dist/brain/adversarial-defense.js.map +1 -0
  10. package/dist/brain/api-contract-analyzer.d.ts +19 -0
  11. package/dist/brain/api-contract-analyzer.d.ts.map +1 -0
  12. package/dist/brain/api-contract-analyzer.js +251 -0
  13. package/dist/brain/api-contract-analyzer.js.map +1 -0
  14. package/dist/brain/ast-analyzer.d.ts +23 -0
  15. package/dist/brain/ast-analyzer.d.ts.map +1 -0
  16. package/dist/brain/ast-analyzer.js +462 -0
  17. package/dist/brain/ast-analyzer.js.map +1 -0
  18. package/dist/brain/code-age-analyzer.d.ts +11 -0
  19. package/dist/brain/code-age-analyzer.d.ts.map +1 -0
  20. package/dist/brain/code-age-analyzer.js +152 -0
  21. package/dist/brain/code-age-analyzer.js.map +1 -0
  22. package/dist/brain/cognitive-load.d.ts +27 -0
  23. package/dist/brain/cognitive-load.d.ts.map +1 -0
  24. package/dist/brain/cognitive-load.js +304 -0
  25. package/dist/brain/cognitive-load.js.map +1 -0
  26. package/dist/brain/config-drift-detector.d.ts +13 -0
  27. package/dist/brain/config-drift-detector.d.ts.map +1 -0
  28. package/dist/brain/config-drift-detector.js +198 -0
  29. package/dist/brain/config-drift-detector.js.map +1 -0
  30. package/dist/brain/cross-agent-protocol.d.ts +48 -0
  31. package/dist/brain/cross-agent-protocol.d.ts.map +1 -0
  32. package/dist/brain/cross-agent-protocol.js +306 -0
  33. package/dist/brain/cross-agent-protocol.js.map +1 -0
  34. package/dist/brain/dead-code-eliminator.d.ts +16 -0
  35. package/dist/brain/dead-code-eliminator.d.ts.map +1 -0
  36. package/dist/brain/dead-code-eliminator.js +359 -0
  37. package/dist/brain/dead-code-eliminator.js.map +1 -0
  38. package/dist/brain/env-analyzer.d.ts +13 -0
  39. package/dist/brain/env-analyzer.d.ts.map +1 -0
  40. package/dist/brain/env-analyzer.js +277 -0
  41. package/dist/brain/env-analyzer.js.map +1 -0
  42. package/dist/brain/i18n-detector.d.ts +12 -0
  43. package/dist/brain/i18n-detector.d.ts.map +1 -0
  44. package/dist/brain/i18n-detector.js +242 -0
  45. package/dist/brain/i18n-detector.js.map +1 -0
  46. package/dist/brain/influence-map.d.ts +31 -0
  47. package/dist/brain/influence-map.d.ts.map +1 -0
  48. package/dist/brain/influence-map.js +375 -0
  49. package/dist/brain/influence-map.js.map +1 -0
  50. package/dist/brain/knowledge-graph.d.ts +56 -0
  51. package/dist/brain/knowledge-graph.d.ts.map +1 -0
  52. package/dist/brain/knowledge-graph.js +427 -0
  53. package/dist/brain/knowledge-graph.js.map +1 -0
  54. package/dist/brain/learning-engine.d.ts +11 -0
  55. package/dist/brain/learning-engine.d.ts.map +1 -1
  56. package/dist/brain/learning-engine.js +44 -1
  57. package/dist/brain/learning-engine.js.map +1 -1
  58. package/dist/brain/license-compliance.d.ts +13 -0
  59. package/dist/brain/license-compliance.d.ts.map +1 -0
  60. package/dist/brain/license-compliance.js +213 -0
  61. package/dist/brain/license-compliance.js.map +1 -0
  62. package/dist/brain/llm-client.d.ts.map +1 -1
  63. package/dist/brain/llm-client.js +3 -0
  64. package/dist/brain/llm-client.js.map +1 -1
  65. package/dist/brain/mutation-advisor.d.ts +11 -0
  66. package/dist/brain/mutation-advisor.d.ts.map +1 -0
  67. package/dist/brain/mutation-advisor.js +154 -0
  68. package/dist/brain/mutation-advisor.js.map +1 -0
  69. package/dist/brain/neural-mesh.d.ts +9 -1
  70. package/dist/brain/neural-mesh.d.ts.map +1 -1
  71. package/dist/brain/neural-mesh.js +75 -16
  72. package/dist/brain/neural-mesh.js.map +1 -1
  73. package/dist/brain/orchestrator.d.ts +71 -2
  74. package/dist/brain/orchestrator.d.ts.map +1 -1
  75. package/dist/brain/orchestrator.js +383 -3
  76. package/dist/brain/orchestrator.js.map +1 -1
  77. package/dist/brain/pattern-memory.d.ts +8 -3
  78. package/dist/brain/pattern-memory.d.ts.map +1 -1
  79. package/dist/brain/pattern-memory.js +71 -3
  80. package/dist/brain/pattern-memory.js.map +1 -1
  81. package/dist/brain/predictive-engine.d.ts +45 -0
  82. package/dist/brain/predictive-engine.d.ts.map +1 -0
  83. package/dist/brain/predictive-engine.js +238 -0
  84. package/dist/brain/predictive-engine.js.map +1 -0
  85. package/dist/brain/security-audit.d.ts +20 -0
  86. package/dist/brain/security-audit.d.ts.map +1 -0
  87. package/dist/brain/security-audit.js +340 -0
  88. package/dist/brain/security-audit.js.map +1 -0
  89. package/dist/brain/self-evolution.d.ts +53 -0
  90. package/dist/brain/self-evolution.d.ts.map +1 -0
  91. package/dist/brain/self-evolution.js +278 -0
  92. package/dist/brain/self-evolution.js.map +1 -0
  93. package/dist/brain/sssp-router.d.ts +58 -0
  94. package/dist/brain/sssp-router.d.ts.map +1 -0
  95. package/dist/brain/sssp-router.js +295 -0
  96. package/dist/brain/sssp-router.js.map +1 -0
  97. package/dist/brain/swarm-intelligence.d.ts +48 -0
  98. package/dist/brain/swarm-intelligence.d.ts.map +1 -0
  99. package/dist/brain/swarm-intelligence.js +215 -0
  100. package/dist/brain/swarm-intelligence.js.map +1 -0
  101. package/dist/brain/turbo-memory.d.ts +56 -0
  102. package/dist/brain/turbo-memory.d.ts.map +1 -0
  103. package/dist/brain/turbo-memory.js +388 -0
  104. package/dist/brain/turbo-memory.js.map +1 -0
  105. package/dist/cli.js +744 -3
  106. package/dist/cli.js.map +1 -1
  107. package/dist/index.d.ts +19 -1
  108. package/dist/index.d.ts.map +1 -1
  109. package/dist/index.js +21 -1
  110. package/dist/index.js.map +1 -1
  111. package/dist/types.d.ts +422 -2
  112. package/dist/types.d.ts.map +1 -1
  113. package/dist/ui/dashboard.d.ts.map +1 -1
  114. package/dist/ui/dashboard.js +20 -3
  115. package/dist/ui/dashboard.js.map +1 -1
  116. package/package.json +16 -7
@@ -0,0 +1,427 @@
1
+ // src/brain/knowledge-graph.ts — Code Entity Graph with PageRank
2
+ // Builds a living graph of all code entities and their relationships.
3
+ // Scores importance using PageRank algorithm.
4
+ // v4.0.0 — Hyper-Intelligence Edition
5
+ import * as fs from 'fs';
6
+ import * as path from 'path';
7
+ const GRAPH_DIR = path.join(process.env.HOME || process.env.USERPROFILE || '~', '.shadow-brain', 'knowledge-graph');
8
+ /**
9
+ * Knowledge Graph — maps your entire codebase as a living graph.
10
+ *
11
+ * Entity extraction: Parse source files for functions, classes, interfaces,
12
+ * modules, variables (exported only).
13
+ *
14
+ * Relations: calls, imports, extends, implements, uses, tests
15
+ *
16
+ * PageRank: Damping factor 0.85, convergence < 0.0001, max 100 iterations.
17
+ * Result: normalized score 0-1 for each entity.
18
+ *
19
+ * Use cases:
20
+ * - Most critical functions to test (high PageRank)
21
+ * - Orphan code (zero in-degree, zero PageRank)
22
+ * - Circular dependency detection (cycles)
23
+ * - Impact analysis: what breaks if X changes?
24
+ */
25
+ export class KnowledgeGraph {
26
+ constructor(projectDir) {
27
+ this.projectDir = projectDir;
28
+ this.graph = {
29
+ entities: new Map(),
30
+ relations: [],
31
+ lastBuilt: new Date(0),
32
+ fileCount: 0,
33
+ };
34
+ this.loadFromDisk();
35
+ }
36
+ // ── Graph Construction ──────────────────────────────────────────────────────
37
+ /** Build the knowledge graph from project source files */
38
+ async build() {
39
+ this.graph = {
40
+ entities: new Map(),
41
+ relations: [],
42
+ lastBuilt: new Date(),
43
+ fileCount: 0,
44
+ };
45
+ // Scan project for source files
46
+ const extensions = ['.ts', '.tsx', '.js', '.jsx', '.py', '.go', '.rs', '.java'];
47
+ const sourceFiles = this.findSourceFiles(this.projectDir, extensions);
48
+ for (const file of sourceFiles) {
49
+ try {
50
+ const content = fs.readFileSync(file, 'utf-8');
51
+ this.graph.fileCount++;
52
+ this.extractEntities(content, file);
53
+ }
54
+ catch {
55
+ // Skip unreadable files
56
+ }
57
+ }
58
+ // Extract relations between entities
59
+ this.extractRelations();
60
+ // Save to disk
61
+ await this.saveToDisk();
62
+ return this.graph;
63
+ }
64
+ /** Add a single entity */
65
+ addEntity(entity) {
66
+ this.graph.entities.set(entity.id, entity);
67
+ }
68
+ /** Add a relation */
69
+ addRelation(relation) {
70
+ this.graph.relations.push(relation);
71
+ }
72
+ // ── Entity Extraction ───────────────────────────────────────────────────────
73
+ /** Extract code entities from source file content */
74
+ extractEntities(content, filePath) {
75
+ const lines = content.split('\n');
76
+ const relativePath = path.relative(this.projectDir, filePath);
77
+ for (let i = 0; i < lines.length; i++) {
78
+ const line = lines[i];
79
+ // Functions
80
+ const funcMatch = line.match(/(?:export\s+)?(?:async\s+)?function\s+(\w+)/);
81
+ if (funcMatch) {
82
+ this.addEntity({
83
+ id: `${relativePath}:${funcMatch[1]}`,
84
+ type: 'function',
85
+ name: funcMatch[1],
86
+ file: relativePath,
87
+ line: i + 1,
88
+ refs: [],
89
+ pageRankScore: 0,
90
+ exported: line.includes('export'),
91
+ async: line.includes('async'),
92
+ });
93
+ }
94
+ // Arrow functions (exported)
95
+ const arrowMatch = line.match(/export\s+(?:const|let)\s+(\w+)\s*=\s*(?:async\s*)?\(/);
96
+ if (arrowMatch) {
97
+ this.addEntity({
98
+ id: `${relativePath}:${arrowMatch[1]}`,
99
+ type: 'function',
100
+ name: arrowMatch[1],
101
+ file: relativePath,
102
+ line: i + 1,
103
+ refs: [],
104
+ pageRankScore: 0,
105
+ exported: true,
106
+ async: line.includes('async'),
107
+ });
108
+ }
109
+ // Classes
110
+ const classMatch = line.match(/(?:export\s+)?(?:abstract\s+)?class\s+(\w+)/);
111
+ if (classMatch) {
112
+ this.addEntity({
113
+ id: `${relativePath}:${classMatch[1]}`,
114
+ type: 'class',
115
+ name: classMatch[1],
116
+ file: relativePath,
117
+ line: i + 1,
118
+ refs: [],
119
+ pageRankScore: 0,
120
+ exported: line.includes('export'),
121
+ async: false,
122
+ });
123
+ }
124
+ // Interfaces
125
+ const ifaceMatch = line.match(/(?:export\s+)?interface\s+(\w+)/);
126
+ if (ifaceMatch) {
127
+ this.addEntity({
128
+ id: `${relativePath}:${ifaceMatch[1]}`,
129
+ type: 'interface',
130
+ name: ifaceMatch[1],
131
+ file: relativePath,
132
+ line: i + 1,
133
+ refs: [],
134
+ pageRankScore: 0,
135
+ exported: line.includes('export'),
136
+ async: false,
137
+ });
138
+ }
139
+ // Methods (inside classes)
140
+ const methodMatch = line.match(/(?:public|private|protected)?\s*(?:async\s+)?(\w+)\s*\(/);
141
+ if (methodMatch && !funcMatch && !classMatch) {
142
+ const name = methodMatch[1];
143
+ // Skip keywords
144
+ if (['if', 'for', 'while', 'switch', 'catch', 'constructor', 'return', 'throw', 'new'].includes(name))
145
+ continue;
146
+ this.addEntity({
147
+ id: `${relativePath}:${name}:${i + 1}`,
148
+ type: 'method',
149
+ name,
150
+ file: relativePath,
151
+ line: i + 1,
152
+ refs: [],
153
+ pageRankScore: 0,
154
+ exported: false,
155
+ async: line.includes('async'),
156
+ });
157
+ }
158
+ }
159
+ }
160
+ /** Extract relations between entities based on imports, calls, etc. */
161
+ extractRelations() {
162
+ for (const [entityId, entity] of this.graph.entities) {
163
+ // Find references to other entities
164
+ for (const [otherId, other] of this.graph.entities) {
165
+ if (entityId === otherId)
166
+ continue;
167
+ // Same file references (calls/uses)
168
+ if (entity.file === other.file && entity.type !== 'interface') {
169
+ this.addRelation({
170
+ from: entityId,
171
+ to: otherId,
172
+ type: 'uses',
173
+ weight: 1,
174
+ });
175
+ }
176
+ }
177
+ }
178
+ // Parse import statements for cross-file relations
179
+ for (const [entityId, entity] of this.graph.entities) {
180
+ try {
181
+ const fullPath = path.join(this.projectDir, entity.file);
182
+ if (!fs.existsSync(fullPath))
183
+ continue;
184
+ const content = fs.readFileSync(fullPath, 'utf-8');
185
+ const lines = content.split('\n');
186
+ for (const line of lines) {
187
+ const importMatch = line.match(/import\s+.*?\s+from\s+['"](.+?)['"]/);
188
+ if (importMatch) {
189
+ const importPath = importMatch[1];
190
+ // Find entities in the imported file
191
+ for (const [otherId, other] of this.graph.entities) {
192
+ if (other.file.includes(importPath.replace('./', '').replace('../', ''))) {
193
+ this.addRelation({
194
+ from: entityId,
195
+ to: otherId,
196
+ type: 'imports',
197
+ weight: 0.5,
198
+ });
199
+ }
200
+ }
201
+ }
202
+ }
203
+ }
204
+ catch {
205
+ // Skip
206
+ }
207
+ }
208
+ }
209
+ // ── PageRank ────────────────────────────────────────────────────────────────
210
+ /**
211
+ * Compute PageRank scores for all entities.
212
+ * Damping factor: 0.85, convergence: < 0.0001, max iterations: 100.
213
+ */
214
+ pageRank(iterations = 100) {
215
+ const DAMPING = 0.85;
216
+ const CONVERGENCE = 0.0001;
217
+ const entityIds = Array.from(this.graph.entities.keys());
218
+ const n = entityIds.length;
219
+ if (n === 0) {
220
+ return { scores: new Map(), iterations: 0, converged: true, danglingNodes: 0 };
221
+ }
222
+ // Build adjacency: out-links and in-links
223
+ const outLinks = new Map();
224
+ const inLinks = new Map();
225
+ for (const id of entityIds) {
226
+ outLinks.set(id, new Set());
227
+ inLinks.set(id, new Set());
228
+ }
229
+ for (const rel of this.graph.relations) {
230
+ outLinks.get(rel.from)?.add(rel.to);
231
+ inLinks.get(rel.to)?.add(rel.from);
232
+ }
233
+ // Count dangling nodes (no out-links)
234
+ let danglingNodes = 0;
235
+ for (const [_, links] of outLinks) {
236
+ if (links.size === 0)
237
+ danglingNodes++;
238
+ }
239
+ // Initialize scores uniformly
240
+ let scores = new Map();
241
+ for (const id of entityIds) {
242
+ scores.set(id, 1 / n);
243
+ }
244
+ let converged = false;
245
+ let iter = 0;
246
+ for (iter = 0; iter < iterations; iter++) {
247
+ const newScores = new Map();
248
+ // Dangling node contribution
249
+ let danglingSum = 0;
250
+ for (const id of entityIds) {
251
+ if (outLinks.get(id).size === 0) {
252
+ danglingSum += scores.get(id) ?? 0;
253
+ }
254
+ }
255
+ // Update scores
256
+ for (const id of entityIds) {
257
+ let rank = (1 - DAMPING) / n;
258
+ // Contribution from in-links
259
+ const incoming = inLinks.get(id) ?? new Set();
260
+ for (const source of incoming) {
261
+ const sourceScore = scores.get(source) ?? 0;
262
+ const sourceOutCount = outLinks.get(source)?.size ?? 1;
263
+ rank += DAMPING * (sourceScore / Math.max(sourceOutCount, 1));
264
+ }
265
+ // Dangling node redistribution
266
+ rank += DAMPING * (danglingSum / n);
267
+ newScores.set(id, rank);
268
+ }
269
+ // Check convergence
270
+ let maxDelta = 0;
271
+ for (const id of entityIds) {
272
+ const delta = Math.abs((newScores.get(id) ?? 0) - (scores.get(id) ?? 0));
273
+ if (delta > maxDelta)
274
+ maxDelta = delta;
275
+ }
276
+ scores = newScores;
277
+ if (maxDelta < CONVERGENCE) {
278
+ converged = true;
279
+ break;
280
+ }
281
+ }
282
+ // Normalize scores to [0, 1]
283
+ const maxScore = Math.max(...Array.from(scores.values()));
284
+ if (maxScore > 0) {
285
+ for (const [id, score] of scores) {
286
+ scores.set(id, score / maxScore);
287
+ }
288
+ }
289
+ // Update entity PageRank scores
290
+ for (const [id, score] of scores) {
291
+ const entity = this.graph.entities.get(id);
292
+ if (entity)
293
+ entity.pageRankScore = score;
294
+ }
295
+ return { scores, iterations: iter, converged, danglingNodes };
296
+ }
297
+ // ── Analysis Queries ────────────────────────────────────────────────────────
298
+ /** Get top-N most important entities by PageRank */
299
+ getTopEntities(topN = 20) {
300
+ return Array.from(this.graph.entities.values())
301
+ .sort((a, b) => b.pageRankScore - a.pageRankScore)
302
+ .slice(0, topN);
303
+ }
304
+ /** Find entities impacted by a change to the given entity */
305
+ getImpactedBy(entityId) {
306
+ const impacted = new Set();
307
+ this.findDownstream(entityId, impacted, 5);
308
+ return Array.from(impacted)
309
+ .map(id => this.graph.entities.get(id))
310
+ .filter((e) => e !== undefined && e.id !== entityId);
311
+ }
312
+ findDownstream(entityId, visited, depth) {
313
+ if (depth <= 0 || visited.has(entityId))
314
+ return;
315
+ visited.add(entityId);
316
+ for (const rel of this.graph.relations) {
317
+ if (rel.from === entityId) {
318
+ this.findDownstream(rel.to, visited, depth - 1);
319
+ }
320
+ }
321
+ }
322
+ /** Find circular dependencies */
323
+ findCycles() {
324
+ const cycles = [];
325
+ const visited = new Set();
326
+ const stack = new Set();
327
+ const path = [];
328
+ const dfs = (node) => {
329
+ if (stack.has(node)) {
330
+ // Found cycle
331
+ const cycleStart = path.indexOf(node);
332
+ if (cycleStart >= 0) {
333
+ cycles.push(path.slice(cycleStart).concat(node));
334
+ }
335
+ return;
336
+ }
337
+ if (visited.has(node))
338
+ return;
339
+ visited.add(node);
340
+ stack.add(node);
341
+ path.push(node);
342
+ for (const rel of this.graph.relations) {
343
+ if (rel.from === node) {
344
+ dfs(rel.to);
345
+ }
346
+ }
347
+ path.pop();
348
+ stack.delete(node);
349
+ };
350
+ for (const id of this.graph.entities.keys()) {
351
+ dfs(id);
352
+ }
353
+ return cycles;
354
+ }
355
+ /** Get graph statistics */
356
+ getStats() {
357
+ const entities = this.graph.entities.size;
358
+ const relations = this.graph.relations.length;
359
+ const scores = Array.from(this.graph.entities.values()).map(e => e.pageRankScore);
360
+ const avgPageRank = scores.length > 0 ? scores.reduce((a, b) => a + b, 0) / scores.length : 0;
361
+ const orphanCount = Array.from(this.graph.entities.values())
362
+ .filter(e => !this.graph.relations.some(r => r.to === e.id)).length;
363
+ return { entities, relations, avgPageRank, orphanCount };
364
+ }
365
+ // ── File Discovery ──────────────────────────────────────────────────────────
366
+ findSourceFiles(dir, extensions) {
367
+ const results = [];
368
+ try {
369
+ const entries = fs.readdirSync(dir, { withFileTypes: true });
370
+ for (const entry of entries) {
371
+ const fullPath = path.join(dir, entry.name);
372
+ if (entry.isDirectory()) {
373
+ // Skip common non-source directories
374
+ if (['node_modules', '.git', 'dist', 'build', '.next', '__pycache__', 'target', 'vendor'].includes(entry.name))
375
+ continue;
376
+ results.push(...this.findSourceFiles(fullPath, extensions));
377
+ }
378
+ else if (extensions.some(ext => entry.name.endsWith(ext))) {
379
+ results.push(fullPath);
380
+ }
381
+ }
382
+ }
383
+ catch {
384
+ // Permission denied or other — skip
385
+ }
386
+ return results;
387
+ }
388
+ // ── Persistence ─────────────────────────────────────────────────────────────
389
+ async saveToDisk() {
390
+ try {
391
+ if (!fs.existsSync(GRAPH_DIR)) {
392
+ fs.mkdirSync(GRAPH_DIR, { recursive: true });
393
+ }
394
+ const serializable = {
395
+ entities: Array.from(this.graph.entities.entries()).map(([id, e]) => [id, {
396
+ ...e,
397
+ refs: e.refs,
398
+ }]),
399
+ relations: this.graph.relations,
400
+ lastBuilt: this.graph.lastBuilt.toISOString(),
401
+ fileCount: this.graph.fileCount,
402
+ };
403
+ fs.writeFileSync(path.join(GRAPH_DIR, 'graph.json'), JSON.stringify(serializable));
404
+ }
405
+ catch {
406
+ // Non-blocking
407
+ }
408
+ }
409
+ loadFromDisk() {
410
+ try {
411
+ const graphFile = path.join(GRAPH_DIR, 'graph.json');
412
+ if (!fs.existsSync(graphFile))
413
+ return;
414
+ const data = JSON.parse(fs.readFileSync(graphFile, 'utf-8'));
415
+ this.graph = {
416
+ entities: new Map(data.entities.map(([id, e]) => [id, e])),
417
+ relations: data.relations || [],
418
+ lastBuilt: new Date(data.lastBuilt),
419
+ fileCount: data.fileCount || 0,
420
+ };
421
+ }
422
+ catch {
423
+ // Fresh start
424
+ }
425
+ }
426
+ }
427
+ //# sourceMappingURL=knowledge-graph.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"knowledge-graph.js","sourceRoot":"","sources":["../../src/brain/knowledge-graph.ts"],"names":[],"mappings":"AAAA,iEAAiE;AACjE,sEAAsE;AACtE,8CAA8C;AAC9C,sCAAsC;AAEtC,OAAO,KAAK,EAAE,MAAM,IAAI,CAAC;AACzB,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAG7B,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,IAAI,OAAO,CAAC,GAAG,CAAC,WAAW,IAAI,GAAG,EAAE,eAAe,EAAE,iBAAiB,CAAC,CAAC;AAEpH;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,OAAO,cAAc;IAIzB,YAAY,UAAkB;QAC5B,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;QAC7B,IAAI,CAAC,KAAK,GAAG;YACX,QAAQ,EAAE,IAAI,GAAG,EAAE;YACnB,SAAS,EAAE,EAAE;YACb,SAAS,EAAE,IAAI,IAAI,CAAC,CAAC,CAAC;YACtB,SAAS,EAAE,CAAC;SACb,CAAC;QACF,IAAI,CAAC,YAAY,EAAE,CAAC;IACtB,CAAC;IAED,+EAA+E;IAE/E,0DAA0D;IAC1D,KAAK,CAAC,KAAK;QACT,IAAI,CAAC,KAAK,GAAG;YACX,QAAQ,EAAE,IAAI,GAAG,EAAE;YACnB,SAAS,EAAE,EAAE;YACb,SAAS,EAAE,IAAI,IAAI,EAAE;YACrB,SAAS,EAAE,CAAC;SACb,CAAC;QAEF,gCAAgC;QAChC,MAAM,UAAU,GAAG,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC;QAChF,MAAM,WAAW,GAAG,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC;QAEtE,KAAK,MAAM,IAAI,IAAI,WAAW,EAAE,CAAC;YAC/B,IAAI,CAAC;gBACH,MAAM,OAAO,GAAG,EAAE,CAAC,YAAY,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;gBAC/C,IAAI,CAAC,KAAK,CAAC,SAAS,EAAE,CAAC;gBACvB,IAAI,CAAC,eAAe,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;YACtC,CAAC;YAAC,MAAM,CAAC;gBACP,wBAAwB;YAC1B,CAAC;QACH,CAAC;QAED,qCAAqC;QACrC,IAAI,CAAC,gBAAgB,EAAE,CAAC;QAExB,eAAe;QACf,MAAM,IAAI,CAAC,UAAU,EAAE,CAAC;QAExB,OAAO,IAAI,CAAC,KAAK,CAAC;IACpB,CAAC;IAED,0BAA0B;IAC1B,SAAS,CAAC,MAAgB;QACxB,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC;IAC7C,CAAC;IAED,qBAAqB;IACrB,WAAW,CAAC,QAAoB;QAC9B,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IACtC,CAAC;IAED,+EAA+E;IAE/E,qDAAqD;IAC7C,eAAe,CAAC,OAAe,EAAE,QAAgB;QACvD,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAClC,MAAM,YAAY,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;QAE9D,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YACtC,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;YAEtB,YAAY;YACZ,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,6CAA6C,CAAC,CAAC;YAC5E,IAAI,SAAS,EAAE,CAAC;gBACd,IAAI,CAAC,SAAS,CAAC;oBACb,EAAE,EAAE,GAAG,YAAY,IAAI,SAAS,CAAC,CAAC,CAAC,EAAE;oBACrC,IAAI,EAAE,UAAU;oBAChB,IAAI,EAAE,SAAS,CAAC,CAAC,CAAC;oBAClB,IAAI,EAAE,YAAY;oBAClB,IAAI,EAAE,CAAC,GAAG,CAAC;oBACX,IAAI,EAAE,EAAE;oBACR,aAAa,EAAE,CAAC;oBAChB,QAAQ,EAAE,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC;oBACjC,KAAK,EAAE,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC;iBAC9B,CAAC,CAAC;YACL,CAAC;YAED,6BAA6B;YAC7B,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,sDAAsD,CAAC,CAAC;YACtF,IAAI,UAAU,EAAE,CAAC;gBACf,IAAI,CAAC,SAAS,CAAC;oBACb,EAAE,EAAE,GAAG,YAAY,IAAI,UAAU,CAAC,CAAC,CAAC,EAAE;oBACtC,IAAI,EAAE,UAAU;oBAChB,IAAI,EAAE,UAAU,CAAC,CAAC,CAAC;oBACnB,IAAI,EAAE,YAAY;oBAClB,IAAI,EAAE,CAAC,GAAG,CAAC;oBACX,IAAI,EAAE,EAAE;oBACR,aAAa,EAAE,CAAC;oBAChB,QAAQ,EAAE,IAAI;oBACd,KAAK,EAAE,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC;iBAC9B,CAAC,CAAC;YACL,CAAC;YAED,UAAU;YACV,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,6CAA6C,CAAC,CAAC;YAC7E,IAAI,UAAU,EAAE,CAAC;gBACf,IAAI,CAAC,SAAS,CAAC;oBACb,EAAE,EAAE,GAAG,YAAY,IAAI,UAAU,CAAC,CAAC,CAAC,EAAE;oBACtC,IAAI,EAAE,OAAO;oBACb,IAAI,EAAE,UAAU,CAAC,CAAC,CAAC;oBACnB,IAAI,EAAE,YAAY;oBAClB,IAAI,EAAE,CAAC,GAAG,CAAC;oBACX,IAAI,EAAE,EAAE;oBACR,aAAa,EAAE,CAAC;oBAChB,QAAQ,EAAE,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC;oBACjC,KAAK,EAAE,KAAK;iBACb,CAAC,CAAC;YACL,CAAC;YAED,aAAa;YACb,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,iCAAiC,CAAC,CAAC;YACjE,IAAI,UAAU,EAAE,CAAC;gBACf,IAAI,CAAC,SAAS,CAAC;oBACb,EAAE,EAAE,GAAG,YAAY,IAAI,UAAU,CAAC,CAAC,CAAC,EAAE;oBACtC,IAAI,EAAE,WAAW;oBACjB,IAAI,EAAE,UAAU,CAAC,CAAC,CAAC;oBACnB,IAAI,EAAE,YAAY;oBAClB,IAAI,EAAE,CAAC,GAAG,CAAC;oBACX,IAAI,EAAE,EAAE;oBACR,aAAa,EAAE,CAAC;oBAChB,QAAQ,EAAE,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC;oBACjC,KAAK,EAAE,KAAK;iBACb,CAAC,CAAC;YACL,CAAC;YAED,2BAA2B;YAC3B,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,yDAAyD,CAAC,CAAC;YAC1F,IAAI,WAAW,IAAI,CAAC,SAAS,IAAI,CAAC,UAAU,EAAE,CAAC;gBAC7C,MAAM,IAAI,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC;gBAC5B,gBAAgB;gBAChB,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,aAAa,EAAE,QAAQ,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC;oBAAE,SAAS;gBAChH,IAAI,CAAC,SAAS,CAAC;oBACb,EAAE,EAAE,GAAG,YAAY,IAAI,IAAI,IAAI,CAAC,GAAG,CAAC,EAAE;oBACtC,IAAI,EAAE,QAAQ;oBACd,IAAI;oBACJ,IAAI,EAAE,YAAY;oBAClB,IAAI,EAAE,CAAC,GAAG,CAAC;oBACX,IAAI,EAAE,EAAE;oBACR,aAAa,EAAE,CAAC;oBAChB,QAAQ,EAAE,KAAK;oBACf,KAAK,EAAE,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC;iBAC9B,CAAC,CAAC;YACL,CAAC;QACH,CAAC;IACH,CAAC;IAED,uEAAuE;IAC/D,gBAAgB;QACtB,KAAK,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC;YACrD,oCAAoC;YACpC,KAAK,MAAM,CAAC,OAAO,EAAE,KAAK,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC;gBACnD,IAAI,QAAQ,KAAK,OAAO;oBAAE,SAAS;gBAEnC,oCAAoC;gBACpC,IAAI,MAAM,CAAC,IAAI,KAAK,KAAK,CAAC,IAAI,IAAI,MAAM,CAAC,IAAI,KAAK,WAAW,EAAE,CAAC;oBAC9D,IAAI,CAAC,WAAW,CAAC;wBACf,IAAI,EAAE,QAAQ;wBACd,EAAE,EAAE,OAAO;wBACX,IAAI,EAAE,MAAM;wBACZ,MAAM,EAAE,CAAC;qBACV,CAAC,CAAC;gBACL,CAAC;YACH,CAAC;QACH,CAAC;QAED,mDAAmD;QACnD,KAAK,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC;YACrD,IAAI,CAAC;gBACH,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC;gBACzD,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC;oBAAE,SAAS;gBACvC,MAAM,OAAO,GAAG,EAAE,CAAC,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;gBACnD,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;gBAElC,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;oBACzB,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,qCAAqC,CAAC,CAAC;oBACtE,IAAI,WAAW,EAAE,CAAC;wBAChB,MAAM,UAAU,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC;wBAClC,qCAAqC;wBACrC,KAAK,MAAM,CAAC,OAAO,EAAE,KAAK,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC;4BACnD,IAAI,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC;gCACzE,IAAI,CAAC,WAAW,CAAC;oCACf,IAAI,EAAE,QAAQ;oCACd,EAAE,EAAE,OAAO;oCACX,IAAI,EAAE,SAAS;oCACf,MAAM,EAAE,GAAG;iCACZ,CAAC,CAAC;4BACL,CAAC;wBACH,CAAC;oBACH,CAAC;gBACH,CAAC;YACH,CAAC;YAAC,MAAM,CAAC;gBACP,OAAO;YACT,CAAC;QACH,CAAC;IACH,CAAC;IAED,+EAA+E;IAE/E;;;OAGG;IACH,QAAQ,CAAC,aAAqB,GAAG;QAC/B,MAAM,OAAO,GAAG,IAAI,CAAC;QACrB,MAAM,WAAW,GAAG,MAAM,CAAC;QAC3B,MAAM,SAAS,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC;QACzD,MAAM,CAAC,GAAG,SAAS,CAAC,MAAM,CAAC;QAE3B,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;YACZ,OAAO,EAAE,MAAM,EAAE,IAAI,GAAG,EAAE,EAAE,UAAU,EAAE,CAAC,EAAE,SAAS,EAAE,IAAI,EAAE,aAAa,EAAE,CAAC,EAAE,CAAC;QACjF,CAAC;QAED,0CAA0C;QAC1C,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAuB,CAAC;QAChD,MAAM,OAAO,GAAG,IAAI,GAAG,EAAuB,CAAC;QAE/C,KAAK,MAAM,EAAE,IAAI,SAAS,EAAE,CAAC;YAC3B,QAAQ,CAAC,GAAG,CAAC,EAAE,EAAE,IAAI,GAAG,EAAE,CAAC,CAAC;YAC5B,OAAO,CAAC,GAAG,CAAC,EAAE,EAAE,IAAI,GAAG,EAAE,CAAC,CAAC;QAC7B,CAAC;QAED,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,KAAK,CAAC,SAAS,EAAE,CAAC;YACvC,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YACpC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QACrC,CAAC;QAED,sCAAsC;QACtC,IAAI,aAAa,GAAG,CAAC,CAAC;QACtB,KAAK,MAAM,CAAC,CAAC,EAAE,KAAK,CAAC,IAAI,QAAQ,EAAE,CAAC;YAClC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC;gBAAE,aAAa,EAAE,CAAC;QACxC,CAAC;QAED,8BAA8B;QAC9B,IAAI,MAAM,GAAG,IAAI,GAAG,EAAkB,CAAC;QACvC,KAAK,MAAM,EAAE,IAAI,SAAS,EAAE,CAAC;YAC3B,MAAM,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;QACxB,CAAC;QAED,IAAI,SAAS,GAAG,KAAK,CAAC;QACtB,IAAI,IAAI,GAAG,CAAC,CAAC;QAEb,KAAK,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,UAAU,EAAE,IAAI,EAAE,EAAE,CAAC;YACzC,MAAM,SAAS,GAAG,IAAI,GAAG,EAAkB,CAAC;YAE5C,6BAA6B;YAC7B,IAAI,WAAW,GAAG,CAAC,CAAC;YACpB,KAAK,MAAM,EAAE,IAAI,SAAS,EAAE,CAAC;gBAC3B,IAAI,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAE,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC;oBACjC,WAAW,IAAI,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC;gBACrC,CAAC;YACH,CAAC;YAED,gBAAgB;YAChB,KAAK,MAAM,EAAE,IAAI,SAAS,EAAE,CAAC;gBAC3B,IAAI,IAAI,GAAG,CAAC,CAAC,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;gBAE7B,6BAA6B;gBAC7B,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,IAAI,GAAG,EAAE,CAAC;gBAC9C,KAAK,MAAM,MAAM,IAAI,QAAQ,EAAE,CAAC;oBAC9B,MAAM,WAAW,GAAG,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;oBAC5C,MAAM,cAAc,GAAG,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,IAAI,IAAI,CAAC,CAAC;oBACvD,IAAI,IAAI,OAAO,GAAG,CAAC,WAAW,GAAG,IAAI,CAAC,GAAG,CAAC,cAAc,EAAE,CAAC,CAAC,CAAC,CAAC;gBAChE,CAAC;gBAED,+BAA+B;gBAC/B,IAAI,IAAI,OAAO,GAAG,CAAC,WAAW,GAAG,CAAC,CAAC,CAAC;gBAEpC,SAAS,CAAC,GAAG,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;YAC1B,CAAC;YAED,oBAAoB;YACpB,IAAI,QAAQ,GAAG,CAAC,CAAC;YACjB,KAAK,MAAM,EAAE,IAAI,SAAS,EAAE,CAAC;gBAC3B,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;gBACzE,IAAI,KAAK,GAAG,QAAQ;oBAAE,QAAQ,GAAG,KAAK,CAAC;YACzC,CAAC;YAED,MAAM,GAAG,SAAS,CAAC;YAEnB,IAAI,QAAQ,GAAG,WAAW,EAAE,CAAC;gBAC3B,SAAS,GAAG,IAAI,CAAC;gBACjB,MAAM;YACR,CAAC;QACH,CAAC;QAED,6BAA6B;QAC7B,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;QAC1D,IAAI,QAAQ,GAAG,CAAC,EAAE,CAAC;YACjB,KAAK,MAAM,CAAC,EAAE,EAAE,KAAK,CAAC,IAAI,MAAM,EAAE,CAAC;gBACjC,MAAM,CAAC,GAAG,CAAC,EAAE,EAAE,KAAK,GAAG,QAAQ,CAAC,CAAC;YACnC,CAAC;QACH,CAAC;QAED,gCAAgC;QAChC,KAAK,MAAM,CAAC,EAAE,EAAE,KAAK,CAAC,IAAI,MAAM,EAAE,CAAC;YACjC,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YAC3C,IAAI,MAAM;gBAAE,MAAM,CAAC,aAAa,GAAG,KAAK,CAAC;QAC3C,CAAC;QAED,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,IAAI,EAAE,SAAS,EAAE,aAAa,EAAE,CAAC;IAChE,CAAC;IAED,+EAA+E;IAE/E,oDAAoD;IACpD,cAAc,CAAC,OAAe,EAAE;QAC9B,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC;aAC5C,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,aAAa,GAAG,CAAC,CAAC,aAAa,CAAC;aACjD,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;IACpB,CAAC;IAED,6DAA6D;IAC7D,aAAa,CAAC,QAAgB;QAC5B,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAU,CAAC;QACnC,IAAI,CAAC,cAAc,CAAC,QAAQ,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC;QAE3C,OAAO,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC;aACxB,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;aACtC,MAAM,CAAC,CAAC,CAAC,EAAiB,EAAE,CAAC,CAAC,KAAK,SAAS,IAAI,CAAC,CAAC,EAAE,KAAK,QAAQ,CAAC,CAAC;IACxE,CAAC;IAEO,cAAc,CAAC,QAAgB,EAAE,OAAoB,EAAE,KAAa;QAC1E,IAAI,KAAK,IAAI,CAAC,IAAI,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC;YAAE,OAAO;QAChD,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QAEtB,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,KAAK,CAAC,SAAS,EAAE,CAAC;YACvC,IAAI,GAAG,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;gBAC1B,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,EAAE,EAAE,OAAO,EAAE,KAAK,GAAG,CAAC,CAAC,CAAC;YAClD,CAAC;QACH,CAAC;IACH,CAAC;IAED,iCAAiC;IACjC,UAAU;QACR,MAAM,MAAM,GAAe,EAAE,CAAC;QAC9B,MAAM,OAAO,GAAG,IAAI,GAAG,EAAU,CAAC;QAClC,MAAM,KAAK,GAAG,IAAI,GAAG,EAAU,CAAC;QAChC,MAAM,IAAI,GAAa,EAAE,CAAC;QAE1B,MAAM,GAAG,GAAG,CAAC,IAAY,EAAQ,EAAE;YACjC,IAAI,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;gBACpB,cAAc;gBACd,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;gBACtC,IAAI,UAAU,IAAI,CAAC,EAAE,CAAC;oBACpB,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;gBACnD,CAAC;gBACD,OAAO;YACT,CAAC;YACD,IAAI,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC;gBAAE,OAAO;YAE9B,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;YAClB,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;YAChB,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAEhB,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,KAAK,CAAC,SAAS,EAAE,CAAC;gBACvC,IAAI,GAAG,CAAC,IAAI,KAAK,IAAI,EAAE,CAAC;oBACtB,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;gBACd,CAAC;YACH,CAAC;YAED,IAAI,CAAC,GAAG,EAAE,CAAC;YACX,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QACrB,CAAC,CAAC;QAEF,KAAK,MAAM,EAAE,IAAI,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,EAAE,EAAE,CAAC;YAC5C,GAAG,CAAC,EAAE,CAAC,CAAC;QACV,CAAC;QAED,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,2BAA2B;IAC3B,QAAQ;QACN,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC;QAC1C,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,MAAM,CAAC;QAC9C,MAAM,MAAM,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC;QAClF,MAAM,WAAW,GAAG,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;QAC9F,MAAM,WAAW,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC;aACzD,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC;QAEtE,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,WAAW,EAAE,WAAW,EAAE,CAAC;IAC3D,CAAC;IAED,+EAA+E;IAEvE,eAAe,CAAC,GAAW,EAAE,UAAoB;QACvD,MAAM,OAAO,GAAa,EAAE,CAAC;QAC7B,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,EAAE,CAAC,WAAW,CAAC,GAAG,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;YAC7D,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;gBAC5B,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;gBAC5C,IAAI,KAAK,CAAC,WAAW,EAAE,EAAE,CAAC;oBACxB,qCAAqC;oBACrC,IAAI,CAAC,cAAc,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,aAAa,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC;wBAAE,SAAS;oBACzH,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,eAAe,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC,CAAC;gBAC9D,CAAC;qBAAM,IAAI,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC;oBAC5D,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;gBACzB,CAAC;YACH,CAAC;QACH,CAAC;QAAC,MAAM,CAAC;YACP,oCAAoC;QACtC,CAAC;QACD,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,+EAA+E;IAEvE,KAAK,CAAC,UAAU;QACtB,IAAI,CAAC;YACH,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;gBAC9B,EAAE,CAAC,SAAS,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;YAC/C,CAAC;YAED,MAAM,YAAY,GAAG;gBACnB,QAAQ,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE;wBACxE,GAAG,CAAC;wBACJ,IAAI,EAAE,CAAC,CAAC,IAAI;qBACb,CAAC,CAAC;gBACH,SAAS,EAAE,IAAI,CAAC,KAAK,CAAC,SAAS;gBAC/B,SAAS,EAAE,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,WAAW,EAAE;gBAC7C,SAAS,EAAE,IAAI,CAAC,KAAK,CAAC,SAAS;aAChC,CAAC;YAEF,EAAE,CAAC,aAAa,CACd,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,YAAY,CAAC,EAClC,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,CAC7B,CAAC;QACJ,CAAC;QAAC,MAAM,CAAC;YACP,eAAe;QACjB,CAAC;IACH,CAAC;IAEO,YAAY;QAClB,IAAI,CAAC;YACH,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,YAAY,CAAC,CAAC;YACrD,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,SAAS,CAAC;gBAAE,OAAO;YAEtC,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,YAAY,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC,CAAC;YAC7D,IAAI,CAAC,KAAK,GAAG;gBACX,QAAQ,EAAE,IAAI,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAqB,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC;gBAC9E,SAAS,EAAE,IAAI,CAAC,SAAS,IAAI,EAAE;gBAC/B,SAAS,EAAE,IAAI,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC;gBACnC,SAAS,EAAE,IAAI,CAAC,SAAS,IAAI,CAAC;aAC/B,CAAC;QACJ,CAAC;QAAC,MAAM,CAAC;YACP,cAAc;QAChB,CAAC;IACH,CAAC;CACF"}
@@ -1,11 +1,14 @@
1
1
  import type { BrainInsight, FileChange, ProjectContext, LearnedLesson, ProjectKnowledge } from '../types.js';
2
2
  import type { LLMClient } from './llm-client.js';
3
+ import { SelfEvolution } from './self-evolution.js';
3
4
  export declare class LearningEngine {
4
5
  private store;
5
6
  private storePath;
6
7
  private saveTimer;
7
8
  private projectDir;
8
9
  private llmClient;
10
+ private selfEvolution;
11
+ private evolveCounter;
9
12
  constructor(projectDir: string, llmClient?: LLMClient);
10
13
  load(): Promise<void>;
11
14
  save(): Promise<void>;
@@ -50,5 +53,13 @@ export declare class LearningEngine {
50
53
  private extractCodePattern;
51
54
  private contentFollowsConvention;
52
55
  private generateLLMInsights;
56
+ /** v4.0.0: Get the self-evolution engine reference */
57
+ getSelfEvolution(): SelfEvolution;
58
+ /** v4.0.0: Get evolution stats */
59
+ getEvolutionStats(): {
60
+ generation: number;
61
+ populationSize: number;
62
+ bestFitness: number;
63
+ };
53
64
  }
54
65
  //# sourceMappingURL=learning-engine.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"learning-engine.d.ts","sourceRoot":"","sources":["../../src/brain/learning-engine.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,YAAY,EAAE,UAAU,EAAE,cAAc,EAAE,aAAa,EAAe,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAC1H,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAgBjD,qBAAa,cAAc;IACzB,OAAO,CAAC,KAAK,CAAgB;IAC7B,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,SAAS,CAA8C;IAC/D,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,SAAS,CAAmB;gBAExB,UAAU,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,SAAS;IAkB/C,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAmDrB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAY3B,OAAO,CAAC,YAAY;IAcpB,iBAAiB,CAAC,QAAQ,EAAE,YAAY,EAAE,EAAE,OAAO,EAAE,UAAU,EAAE,GAAG,IAAI;IAgFxE,iBAAiB,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,GAAG,IAAI;IAwBvD,oBAAoB,CAAC,OAAO,EAAE,cAAc,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IA6DnF,kBAAkB,CAAC,OAAO,EAAE,UAAU,EAAE,GAAG,aAAa,EAAE;IAuC1D,mBAAmB,CAAC,UAAU,EAAE,MAAM,GAAG,gBAAgB,GAAG,IAAI;IAI1D,oBAAoB,CACxB,OAAO,EAAE,UAAU,EAAE,EACrB,OAAO,EAAE,cAAc,GACtB,OAAO,CAAC,YAAY,EAAE,CAAC;IA0E1B,QAAQ,IAAI;QAAE,YAAY,EAAE,MAAM,CAAC;QAAC,aAAa,EAAE,MAAM,CAAC;QAAC,aAAa,EAAE,MAAM,CAAC;QAAC,YAAY,EAAE,MAAM,CAAA;KAAE;IAexG;;;OAGG;IACG,gBAAgB,IAAI,OAAO,CAAC,IAAI,CAAC;IAiEvC;;OAEG;IACG,UAAU,IAAI,OAAO,CAAC,KAAK,CAAC;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAW7G;;;OAGG;IACG,aAAa,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC;IA8CzD,OAAO,IAAI,IAAI;YAqBD,SAAS;YAST,kBAAkB;IA+ChC,OAAO,CAAC,uBAAuB;YAiGjB,oBAAoB;IAiFlC,OAAO,CAAC,cAAc;IAetB,OAAO,CAAC,kBAAkB;IAkC1B,OAAO,CAAC,wBAAwB;YAYlB,mBAAmB;CAyFlC"}
1
+ {"version":3,"file":"learning-engine.d.ts","sourceRoot":"","sources":["../../src/brain/learning-engine.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,YAAY,EAAE,UAAU,EAAE,cAAc,EAAE,aAAa,EAAe,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAC1H,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AACjD,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAgBpD,qBAAa,cAAc;IACzB,OAAO,CAAC,KAAK,CAAgB;IAC7B,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,SAAS,CAA8C;IAC/D,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,SAAS,CAAmB;IACpC,OAAO,CAAC,aAAa,CAAgB;IACrC,OAAO,CAAC,aAAa,CAAK;gBAEd,UAAU,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,SAAS;IAmB/C,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAkErB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAY3B,OAAO,CAAC,YAAY;IAcpB,iBAAiB,CAAC,QAAQ,EAAE,YAAY,EAAE,EAAE,OAAO,EAAE,UAAU,EAAE,GAAG,IAAI;IAsFxE,iBAAiB,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,GAAG,IAAI;IAkCvD,oBAAoB,CAAC,OAAO,EAAE,cAAc,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IA6DnF,kBAAkB,CAAC,OAAO,EAAE,UAAU,EAAE,GAAG,aAAa,EAAE;IAgD1D,mBAAmB,CAAC,UAAU,EAAE,MAAM,GAAG,gBAAgB,GAAG,IAAI;IAI1D,oBAAoB,CACxB,OAAO,EAAE,UAAU,EAAE,EACrB,OAAO,EAAE,cAAc,GACtB,OAAO,CAAC,YAAY,EAAE,CAAC;IA0E1B,QAAQ,IAAI;QAAE,YAAY,EAAE,MAAM,CAAC;QAAC,aAAa,EAAE,MAAM,CAAC;QAAC,aAAa,EAAE,MAAM,CAAC;QAAC,YAAY,EAAE,MAAM,CAAA;KAAE;IAexG;;;OAGG;IACG,gBAAgB,IAAI,OAAO,CAAC,IAAI,CAAC;IAiEvC;;OAEG;IACG,UAAU,IAAI,OAAO,CAAC,KAAK,CAAC;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAW7G;;;OAGG;IACG,aAAa,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC;IA8CzD,OAAO,IAAI,IAAI;YAqBD,SAAS;YAST,kBAAkB;IA+ChC,OAAO,CAAC,uBAAuB;YAiGjB,oBAAoB;IAiFlC,OAAO,CAAC,cAAc;IAetB,OAAO,CAAC,kBAAkB;IAkC1B,OAAO,CAAC,wBAAwB;YAYlB,mBAAmB;IA0FjC,sDAAsD;IACtD,gBAAgB,IAAI,aAAa;IAIjC,kCAAkC;IAClC,iBAAiB,IAAI;QAAE,UAAU,EAAE,MAAM,CAAC;QAAC,cAAc,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAA;KAAE;CAQzF"}
@@ -1,16 +1,20 @@
1
1
  // src/brain/learning-engine.ts — Self-Improvement Learning Engine for Shadow Brain
2
2
  // Learns from past analysis sessions and gets smarter over time.
3
+ // v4.0.0 — SelfEvolution genetic rule optimization integration
3
4
  import * as fs from 'fs/promises';
4
5
  import * as path from 'path';
5
6
  import * as os from 'os';
6
7
  import * as crypto from 'crypto';
8
+ import { SelfEvolution } from './self-evolution.js';
7
9
  // ── Learning Engine ─────────────────────────────────────────────────────────
8
10
  export class LearningEngine {
9
11
  constructor(projectDir, llmClient) {
10
12
  this.saveTimer = null;
13
+ this.evolveCounter = 0;
11
14
  this.projectDir = projectDir;
12
15
  this.llmClient = llmClient ?? null;
13
16
  this.storePath = path.join(os.homedir(), '.shadow-brain', 'learning.json');
17
+ this.selfEvolution = new SelfEvolution();
14
18
  this.store = {
15
19
  version: 1,
16
20
  lessons: [],
@@ -70,6 +74,19 @@ export class LearningEngine {
70
74
  lastTraining: new Date(),
71
75
  };
72
76
  }
77
+ // v4.0.0: Apply evolved rules to adjust lesson confidence
78
+ const bestRules = this.selfEvolution.getBestRules('all', 10);
79
+ for (const lesson of this.store.lessons) {
80
+ const matchingRule = bestRules.find(r => r.category === lesson.category || r.category === 'all');
81
+ if (matchingRule) {
82
+ if (matchingRule.fitness > 0.7) {
83
+ lesson.confidence = Math.min(1.0, lesson.confidence + 0.1);
84
+ }
85
+ else if (matchingRule.fitness < 0.3) {
86
+ lesson.confidence = Math.max(0, lesson.confidence - 0.05);
87
+ }
88
+ }
89
+ }
73
90
  }
74
91
  async save() {
75
92
  try {
@@ -162,6 +179,11 @@ export class LearningEngine {
162
179
  }
163
180
  this.store.lastTraining = now;
164
181
  this.scheduleSave();
182
+ // v4.0.0: Trigger self-evolution every 10 calls
183
+ this.evolveCounter++;
184
+ if (this.evolveCounter % 10 === 0) {
185
+ this.selfEvolution.evolve(insights).catch(() => { });
186
+ }
165
187
  }
166
188
  catch (err) {
167
189
  console.error(`[LearningEngine] learnFromInsights error: ${err.message}`);
@@ -181,6 +203,9 @@ export class LearningEngine {
181
203
  }
182
204
  this.store.falsePositiveRates[insightId].dismissed++;
183
205
  }
206
+ // v4.0.0: Feed self-evolution meta-learning
207
+ const category = this.store.lessons.find((l) => l.lesson.slice(0, 50) === insightId.slice(0, 50))?.category || 'general';
208
+ this.selfEvolution.updateMetaLearning(`feedback:${insightId.slice(0, 30)}`, accepted, category);
184
209
  this.scheduleSave();
185
210
  }
186
211
  catch (err) {
@@ -243,6 +268,8 @@ Return a JSON object with these fields:
243
268
  getRelevantLessons(changes) {
244
269
  const now = new Date();
245
270
  const relevant = [];
271
+ // v4.0.0: Get best evolved rules for confidence adjustment
272
+ const bestRules = this.selfEvolution.getBestRules('all', 10);
246
273
  for (const change of changes) {
247
274
  const pattern = this.extractPattern(change);
248
275
  if (!pattern)
@@ -255,9 +282,12 @@ Return a JSON object with these fields:
255
282
  // Boost confidence for recently seen lessons
256
283
  const daysSinceLastSeen = (now.getTime() - new Date(lesson.lastSeen).getTime()) / (1000 * 60 * 60 * 24);
257
284
  const recencyBoost = Math.max(0, 1 - daysSinceLastSeen / 30) * 0.1;
285
+ // v4.0.0: Apply evolved rule fitness as confidence modifier
286
+ const matchingRule = bestRules.find(r => r.category === lesson.category || r.category === 'all');
287
+ const fitnessBoost = matchingRule ? matchingRule.fitness * 0.2 : 0;
258
288
  relevant.push({
259
289
  ...lesson,
260
- confidence: Math.min(1.0, lesson.confidence + recencyBoost),
290
+ confidence: Math.min(1.0, lesson.confidence + recencyBoost + fitnessBoost),
261
291
  });
262
292
  }
263
293
  }
@@ -851,5 +881,18 @@ Do NOT report obvious linting issues — only things that require deep understan
851
881
  return [];
852
882
  }
853
883
  }
884
+ /** v4.0.0: Get the self-evolution engine reference */
885
+ getSelfEvolution() {
886
+ return this.selfEvolution;
887
+ }
888
+ /** v4.0.0: Get evolution stats */
889
+ getEvolutionStats() {
890
+ const bestRules = this.selfEvolution.getBestRules('all', 1);
891
+ return {
892
+ generation: this.selfEvolution.getGeneration(),
893
+ populationSize: this.selfEvolution.getPopulationSize(),
894
+ bestFitness: bestRules.length > 0 ? bestRules[0].fitness : 0,
895
+ };
896
+ }
854
897
  }
855
898
  //# sourceMappingURL=learning-engine.js.map