@theihtisham/agent-shadow-brain 3.0.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 (73) hide show
  1. package/README.md +443 -602
  2. package/dist/brain/adversarial-defense.d.ts +57 -0
  3. package/dist/brain/adversarial-defense.d.ts.map +1 -0
  4. package/dist/brain/adversarial-defense.js +303 -0
  5. package/dist/brain/adversarial-defense.js.map +1 -0
  6. package/dist/brain/cognitive-load.d.ts +27 -0
  7. package/dist/brain/cognitive-load.d.ts.map +1 -0
  8. package/dist/brain/cognitive-load.js +304 -0
  9. package/dist/brain/cognitive-load.js.map +1 -0
  10. package/dist/brain/cross-agent-protocol.d.ts +48 -0
  11. package/dist/brain/cross-agent-protocol.d.ts.map +1 -0
  12. package/dist/brain/cross-agent-protocol.js +306 -0
  13. package/dist/brain/cross-agent-protocol.js.map +1 -0
  14. package/dist/brain/influence-map.d.ts +31 -0
  15. package/dist/brain/influence-map.d.ts.map +1 -0
  16. package/dist/brain/influence-map.js +375 -0
  17. package/dist/brain/influence-map.js.map +1 -0
  18. package/dist/brain/knowledge-graph.d.ts +56 -0
  19. package/dist/brain/knowledge-graph.d.ts.map +1 -0
  20. package/dist/brain/knowledge-graph.js +427 -0
  21. package/dist/brain/knowledge-graph.js.map +1 -0
  22. package/dist/brain/learning-engine.d.ts +11 -0
  23. package/dist/brain/learning-engine.d.ts.map +1 -1
  24. package/dist/brain/learning-engine.js +44 -1
  25. package/dist/brain/learning-engine.js.map +1 -1
  26. package/dist/brain/neural-mesh.d.ts +9 -1
  27. package/dist/brain/neural-mesh.d.ts.map +1 -1
  28. package/dist/brain/neural-mesh.js +75 -16
  29. package/dist/brain/neural-mesh.js.map +1 -1
  30. package/dist/brain/orchestrator.d.ts +24 -2
  31. package/dist/brain/orchestrator.d.ts.map +1 -1
  32. package/dist/brain/orchestrator.js +208 -4
  33. package/dist/brain/orchestrator.js.map +1 -1
  34. package/dist/brain/pattern-memory.d.ts +8 -3
  35. package/dist/brain/pattern-memory.d.ts.map +1 -1
  36. package/dist/brain/pattern-memory.js +71 -3
  37. package/dist/brain/pattern-memory.js.map +1 -1
  38. package/dist/brain/predictive-engine.d.ts +45 -0
  39. package/dist/brain/predictive-engine.d.ts.map +1 -0
  40. package/dist/brain/predictive-engine.js +238 -0
  41. package/dist/brain/predictive-engine.js.map +1 -0
  42. package/dist/brain/security-audit.d.ts +20 -0
  43. package/dist/brain/security-audit.d.ts.map +1 -0
  44. package/dist/brain/security-audit.js +340 -0
  45. package/dist/brain/security-audit.js.map +1 -0
  46. package/dist/brain/self-evolution.d.ts +53 -0
  47. package/dist/brain/self-evolution.d.ts.map +1 -0
  48. package/dist/brain/self-evolution.js +278 -0
  49. package/dist/brain/self-evolution.js.map +1 -0
  50. package/dist/brain/sssp-router.d.ts +58 -0
  51. package/dist/brain/sssp-router.d.ts.map +1 -0
  52. package/dist/brain/sssp-router.js +295 -0
  53. package/dist/brain/sssp-router.js.map +1 -0
  54. package/dist/brain/swarm-intelligence.d.ts +48 -0
  55. package/dist/brain/swarm-intelligence.d.ts.map +1 -0
  56. package/dist/brain/swarm-intelligence.js +215 -0
  57. package/dist/brain/swarm-intelligence.js.map +1 -0
  58. package/dist/brain/turbo-memory.d.ts +56 -0
  59. package/dist/brain/turbo-memory.d.ts.map +1 -0
  60. package/dist/brain/turbo-memory.js +388 -0
  61. package/dist/brain/turbo-memory.js.map +1 -0
  62. package/dist/cli.js +339 -3
  63. package/dist/cli.js.map +1 -1
  64. package/dist/index.d.ts +9 -1
  65. package/dist/index.d.ts.map +1 -1
  66. package/dist/index.js +10 -1
  67. package/dist/index.js.map +1 -1
  68. package/dist/types.d.ts +272 -1
  69. package/dist/types.d.ts.map +1 -1
  70. package/dist/ui/dashboard.d.ts.map +1 -1
  71. package/dist/ui/dashboard.js +20 -3
  72. package/dist/ui/dashboard.js.map +1 -1
  73. package/package.json +16 -7
@@ -0,0 +1,304 @@
1
+ // src/brain/cognitive-load.ts — Cognitive complexity analysis
2
+ // v3.1.0 — Measures function cognitive complexity: nesting, boolean ops, control flow
3
+ import * as fs from 'fs';
4
+ import * as path from 'path';
5
+ const IGNORE_DIRS = new Set([
6
+ 'node_modules', '.git', 'dist', 'build', 'out', 'coverage', '.next', '.nuxt', '.cache',
7
+ ]);
8
+ const CODE_EXTENSIONS = new Set(['.ts', '.tsx', '.js', '.jsx', '.py', '.rs', '.go', '.java']);
9
+ export class CognitiveLoadAnalyzer {
10
+ constructor(projectDir) {
11
+ this.projectDir = projectDir;
12
+ }
13
+ async analyzeProject(maxFiles = 300) {
14
+ const files = this.collectFiles(this.projectDir, maxFiles);
15
+ const insights = [];
16
+ const allFunctions = [];
17
+ for (const filePath of files) {
18
+ const functions = this.analyzeFile(filePath);
19
+ allFunctions.push(...functions);
20
+ }
21
+ // Sort by cognitive score descending
22
+ allFunctions.sort((a, b) => b.cognitiveScore - a.cognitiveScore);
23
+ // Generate insights for functions exceeding thresholds
24
+ for (const fn of allFunctions) {
25
+ if (fn.cognitiveScore > 15) {
26
+ insights.push(this.functionToInsight(fn));
27
+ }
28
+ }
29
+ // Summary insight for high-complexity hotspots
30
+ const highCount = allFunctions.filter(f => f.cognitiveScore > 25).length;
31
+ const mediumCount = allFunctions.filter(f => f.cognitiveScore > 15 && f.cognitiveScore <= 25).length;
32
+ const totalFunctions = allFunctions.length;
33
+ if ((highCount + mediumCount) > 0 && totalFunctions > 5) {
34
+ insights.push({
35
+ type: 'complexity',
36
+ priority: highCount > 5 ? 'high' : 'medium',
37
+ title: `[complexity] ${highCount + mediumCount} functions with high cognitive complexity`,
38
+ content: `Cognitive complexity analysis found ${highCount} high (>25) and ${mediumCount} medium (>15) complexity functions.\n` +
39
+ ` Total functions analyzed: ${totalFunctions}\n` +
40
+ ` High complexity makes code harder to understand, test, and maintain.\n` +
41
+ ` Consider breaking complex functions into smaller, well-named helpers.\n` +
42
+ ` Top offenders:\n` +
43
+ allFunctions.slice(0, 5).map(f => ` - ${f.name} in ${f.file}:${f.startLine} (score: ${f.cognitiveScore})`).join('\n'),
44
+ files: allFunctions.filter(f => f.cognitiveScore > 15).map(f => f.file).slice(0, 20),
45
+ timestamp: new Date(),
46
+ confidence: 0.8,
47
+ metadata: {
48
+ totalFunctions,
49
+ highComplexityCount: highCount,
50
+ mediumComplexityCount: mediumCount,
51
+ avgComplexity: totalFunctions > 0
52
+ ? Math.round(allFunctions.reduce((s, f) => s + f.cognitiveScore, 0) / totalFunctions * 10) / 10
53
+ : 0,
54
+ },
55
+ });
56
+ }
57
+ return insights;
58
+ }
59
+ analyzeFile(filePath) {
60
+ let content;
61
+ try {
62
+ content = fs.readFileSync(filePath, 'utf-8');
63
+ }
64
+ catch {
65
+ return [];
66
+ }
67
+ const relPath = path.relative(this.projectDir, filePath);
68
+ const ext = path.extname(filePath);
69
+ const functions = [];
70
+ // Extract function boundaries using regex
71
+ const functionPattern = this.getFunctionPattern(ext);
72
+ let match;
73
+ functionPattern.lastIndex = 0;
74
+ while ((match = functionPattern.exec(content)) !== null) {
75
+ const name = match[1] || match[2] || '<anonymous>';
76
+ const startLine = content.substring(0, match.index).split('\n').length;
77
+ // Find the function body by matching braces
78
+ const bodyResult = this.extractFunctionBody(content, match.index);
79
+ if (!bodyResult)
80
+ continue;
81
+ const { body, endIndex } = bodyResult;
82
+ const endLine = content.substring(0, endIndex).split('\n').length;
83
+ // Calculate cognitive complexity
84
+ const score = this.calculateCognitiveComplexity(body, name);
85
+ functions.push({
86
+ name,
87
+ file: relPath,
88
+ startLine,
89
+ endLine,
90
+ cognitiveScore: score.total,
91
+ nestingContributions: score.nesting,
92
+ booleanContributions: score.booleanOps,
93
+ controlFlowContributions: score.controlFlow,
94
+ recursionContributions: score.recursion,
95
+ linesOfCode: body.split('\n').length,
96
+ });
97
+ }
98
+ return functions;
99
+ }
100
+ getFunctionPattern(ext) {
101
+ if (ext === '.py') {
102
+ return /def\s+(\w+)\s*\(/g;
103
+ }
104
+ if (ext === '.rs') {
105
+ return /(?:fn|pub\s+fn)\s+(\w+)\s*[<(]/g;
106
+ }
107
+ if (ext === '.go') {
108
+ return /func\s+(?:\([^)]*\)\s+)?(\w+)\s*\(/g;
109
+ }
110
+ if (ext === '.java') {
111
+ return /(?:public|private|protected|static)\s+\w+(?:<[^>]+>)?\s+(\w+)\s*\(/g;
112
+ }
113
+ // TypeScript / JavaScript
114
+ return /(?:function\s+(\w+)|(?:const|let|var)\s+(\w+)\s*=\s*(?:async\s+)?(?:\([^)]*\)|[^=])\s*=>)/g;
115
+ }
116
+ extractFunctionBody(content, startIndex) {
117
+ // Find the opening brace
118
+ let braceIndex = content.indexOf('{', startIndex);
119
+ if (braceIndex === -1)
120
+ return null;
121
+ // For arrow functions without braces, find the line end
122
+ const arrowMatch = content.substring(startIndex, braceIndex).match(/=>\s*[^{]/);
123
+ if (arrowMatch) {
124
+ // Arrow function with expression body (no braces)
125
+ const lineEnd = content.indexOf('\n', startIndex);
126
+ const body = content.substring(startIndex, lineEnd !== -1 ? lineEnd : content.length);
127
+ return { body, endIndex: lineEnd !== -1 ? lineEnd : content.length };
128
+ }
129
+ // Match braces to find the end of the function
130
+ let depth = 0;
131
+ let i = braceIndex;
132
+ while (i < content.length) {
133
+ if (content[i] === '{')
134
+ depth++;
135
+ else if (content[i] === '}') {
136
+ depth--;
137
+ if (depth === 0) {
138
+ const body = content.substring(startIndex, i + 1);
139
+ return { body, endIndex: i + 1 };
140
+ }
141
+ }
142
+ // Skip strings
143
+ if (content[i] === '"' || content[i] === "'" || content[i] === '`') {
144
+ i = this.skipString(content, i);
145
+ continue;
146
+ }
147
+ i++;
148
+ }
149
+ return null;
150
+ }
151
+ skipString(content, start) {
152
+ const quote = content[start];
153
+ let i = start + 1;
154
+ while (i < content.length) {
155
+ if (content[i] === '\\') {
156
+ i += 2;
157
+ continue;
158
+ }
159
+ if (content[i] === quote)
160
+ return i + 1;
161
+ if (quote !== '`' && content[i] === '\n')
162
+ return i;
163
+ i++;
164
+ }
165
+ return i;
166
+ }
167
+ calculateCognitiveComplexity(body, functionName) {
168
+ let nesting = 0;
169
+ let booleanOps = 0;
170
+ let controlFlow = 0;
171
+ let recursion = 0;
172
+ // Remove string literals and comments to avoid false positives
173
+ const cleaned = this.removeStringsAndComments(body);
174
+ const lines = cleaned.split('\n');
175
+ for (let i = 0; i < lines.length; i++) {
176
+ const line = lines[i].trim();
177
+ if (line === '' || line.startsWith('//') || line.startsWith('/*') || line.startsWith('*'))
178
+ continue;
179
+ // Nesting depth: count open braces minus close braces
180
+ const opens = (line.match(/\{/g) || []).length;
181
+ const closes = (line.match(/\}/g) || []).length;
182
+ const prevNesting = nesting;
183
+ // Count nesting contributions (only for lines that open blocks)
184
+ if (opens > closes) {
185
+ nesting += (opens - closes);
186
+ }
187
+ // Nesting complexity: +1 per nesting level for control flow
188
+ if (/\b(if|else|for|while|switch|try|catch|finally)\b/.test(line)) {
189
+ controlFlow += Math.max(0, nesting - 1);
190
+ }
191
+ // else / else if: +1 each
192
+ if (/\belse\s+(if\s*)?[\{(]/.test(line) || line === 'else {') {
193
+ controlFlow += 1;
194
+ }
195
+ // catch: +1
196
+ if (/\bcatch\s*\(/.test(line)) {
197
+ controlFlow += 1;
198
+ }
199
+ // break / continue in loops: +1
200
+ if (/\b(break|continue)\b/.test(line) && !line.startsWith('//')) {
201
+ controlFlow += 1;
202
+ }
203
+ // Boolean operators: && and || each +1
204
+ const andMatches = line.match(/&&/g);
205
+ const orMatches = line.match(/\|\|/g);
206
+ booleanOps += (andMatches ? andMatches.length : 0) + (orMatches ? orMatches.length : 0);
207
+ // Recursive calls: +2
208
+ const escapedName = functionName.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
209
+ if (functionName !== '<anonymous>' && new RegExp(`\\b${escapedName}\\s*\\(`).test(line)) {
210
+ // Make sure it's not just the function declaration
211
+ if (!line.includes(`function ${functionName}`) && !line.includes(`${functionName} =`)) {
212
+ recursion += 2;
213
+ }
214
+ }
215
+ }
216
+ return {
217
+ total: nesting + booleanOps + controlFlow + recursion,
218
+ nesting,
219
+ booleanOps,
220
+ controlFlow,
221
+ recursion,
222
+ };
223
+ }
224
+ removeStringsAndComments(code) {
225
+ // Remove single-line comments
226
+ let result = code.replace(/\/\/.*$/gm, '');
227
+ // Remove multi-line comments
228
+ result = result.replace(/\/\*[\s\S]*?\*\//g, '');
229
+ // Remove double-quoted strings
230
+ result = result.replace(/"(?:[^"\\]|\\.)*"/g, '""');
231
+ // Remove single-quoted strings
232
+ result = result.replace(/'(?:[^'\\]|\\.)*'/g, "''");
233
+ // Remove template literals
234
+ result = result.replace(/`(?:[^`\\]|\\.)*`/g, '``');
235
+ return result;
236
+ }
237
+ functionToInsight(fn) {
238
+ const priority = fn.cognitiveScore > 25 ? 'high' : 'medium';
239
+ const severity = fn.cognitiveScore > 25 ? 'HIGH' : 'MEDIUM';
240
+ return {
241
+ type: 'complexity',
242
+ priority,
243
+ title: `[complexity] ${severity} cognitive load in ${fn.name} (${fn.file}:${fn.startLine})`,
244
+ content: `Function \`${fn.name}\` in ${fn.file}:${fn.startLine}-${fn.endLine} has cognitive complexity of ${fn.cognitiveScore}.\n` +
245
+ ` Score breakdown:\n` +
246
+ ` - Nesting depth: ${fn.nestingContributions}\n` +
247
+ ` - Boolean operators: ${fn.booleanContributions}\n` +
248
+ ` - Control flow (else/catch/break): ${fn.controlFlowContributions}\n` +
249
+ ` - Recursion: ${fn.recursionContributions}\n` +
250
+ ` Lines of code: ${fn.linesOfCode}\n` +
251
+ ` Thresholds: medium >15, high >25\n` +
252
+ ` Suggestion: Break into smaller functions with single responsibilities. ` +
253
+ `Extract complex conditions into well-named variables.`,
254
+ files: [fn.file],
255
+ timestamp: new Date(),
256
+ confidence: 0.75,
257
+ metadata: {
258
+ functionName: fn.name,
259
+ cognitiveScore: fn.cognitiveScore,
260
+ startLine: fn.startLine,
261
+ endLine: fn.endLine,
262
+ linesOfCode: fn.linesOfCode,
263
+ breakdown: {
264
+ nesting: fn.nestingContributions,
265
+ booleanOps: fn.booleanContributions,
266
+ controlFlow: fn.controlFlowContributions,
267
+ recursion: fn.recursionContributions,
268
+ },
269
+ },
270
+ };
271
+ }
272
+ collectFiles(dir, maxFiles) {
273
+ const results = [];
274
+ const walk = (currentDir, depth) => {
275
+ if (results.length >= maxFiles || depth > 10)
276
+ return;
277
+ let entries;
278
+ try {
279
+ entries = fs.readdirSync(currentDir, { withFileTypes: true });
280
+ }
281
+ catch {
282
+ return;
283
+ }
284
+ for (const entry of entries) {
285
+ if (results.length >= maxFiles)
286
+ return;
287
+ if (entry.name.startsWith('.'))
288
+ continue;
289
+ const fullPath = path.join(currentDir, entry.name);
290
+ if (entry.isDirectory()) {
291
+ if (IGNORE_DIRS.has(entry.name))
292
+ continue;
293
+ walk(fullPath, depth + 1);
294
+ }
295
+ else if (entry.isFile() && CODE_EXTENSIONS.has(path.extname(entry.name))) {
296
+ results.push(fullPath);
297
+ }
298
+ }
299
+ };
300
+ walk(dir, 0);
301
+ return results;
302
+ }
303
+ }
304
+ //# sourceMappingURL=cognitive-load.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cognitive-load.js","sourceRoot":"","sources":["../../src/brain/cognitive-load.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,48 @@
1
+ import { AgentTool, CAIPMessage, CAIPHandshake, CAIPChannel, AgentBoostPacket, CrossAgentBus } from '../types.js';
2
+ /**
3
+ * Cross-Agent Intelligence Protocol — the hub that makes all coding agents talk to each other.
4
+ *
5
+ * Transport:
6
+ * Primary: WebSocket on port 7344 (CAIP bus)
7
+ * Fallback: Shared filesystem at ~/.shadow-brain-caip/ (polling every 2s)
8
+ *
9
+ * Protocol:
10
+ * 1. Handshake — each agent sends identity, version, capabilities
11
+ * 2. Channels — broadcast (all), pair (two agents), team (subset)
12
+ * 3. Boost Packet — high-value insight shared to all connected agents
13
+ * 4. Deduplication — message hash ring prevents infinite loops
14
+ */
15
+ export declare class CrossAgentProtocol {
16
+ private wss;
17
+ private clients;
18
+ private bus;
19
+ private messageHashes;
20
+ private boostHandlers;
21
+ private filePollTimer;
22
+ private running;
23
+ constructor();
24
+ /** Start the CAIP WebSocket server + filesystem fallback */
25
+ start(): Promise<void>;
26
+ /** Stop the CAIP server */
27
+ stop(): Promise<void>;
28
+ /** Register an agent via handshake */
29
+ connect(handshake: CAIPHandshake): Promise<CAIPChannel>;
30
+ /** Broadcast a message to all connected agents */
31
+ broadcast(from: AgentTool, payload: unknown, priority?: CAIPMessage['priority']): Promise<void>;
32
+ /** Send a boost packet — high-value insights shared across agents */
33
+ sendBoostPacket(packet: AgentBoostPacket): Promise<void>;
34
+ /** Send targeted message to specific agent */
35
+ sendDirect(from: AgentTool, to: AgentTool, payload: unknown): Promise<void>;
36
+ /** Subscribe to boost packets from a specific agent */
37
+ subscribeToBoosts(agent: AgentTool, handler: (packet: AgentBoostPacket) => void): void;
38
+ /** Get all connected agents */
39
+ getConnectedAgents(): AgentTool[];
40
+ /** Get bus statistics */
41
+ getBusStats(): CrossAgentBus;
42
+ private handleMessage;
43
+ private deliverMessage;
44
+ private writeFileMessage;
45
+ private startFilePolling;
46
+ private hashMessage;
47
+ }
48
+ //# sourceMappingURL=cross-agent-protocol.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cross-agent-protocol.d.ts","sourceRoot":"","sources":["../../src/brain/cross-agent-protocol.ts"],"names":[],"mappings":"AASA,OAAO,EACL,SAAS,EACT,WAAW,EAAE,aAAa,EAAE,WAAW,EAAE,gBAAgB,EAAE,aAAa,EACzE,MAAM,aAAa,CAAC;AAOrB;;;;;;;;;;;;GAYG;AACH,qBAAa,kBAAkB;IAC7B,OAAO,CAAC,GAAG,CAAgC;IAC3C,OAAO,CAAC,OAAO,CAAwC;IACvD,OAAO,CAAC,GAAG,CAAgB;IAC3B,OAAO,CAAC,aAAa,CAA0B;IAC/C,OAAO,CAAC,aAAa,CAAwE;IAC7F,OAAO,CAAC,aAAa,CAA+B;IACpD,OAAO,CAAC,OAAO,CAAS;;IAwBxB,4DAA4D;IACtD,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAuC5B,2BAA2B;IACrB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAa3B,sCAAsC;IAChC,OAAO,CAAC,SAAS,EAAE,aAAa,GAAG,OAAO,CAAC,WAAW,CAAC;IAmC7D,kDAAkD;IAC5C,SAAS,CAAC,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,OAAO,EAAE,QAAQ,GAAE,WAAW,CAAC,UAAU,CAAY,GAAG,OAAO,CAAC,IAAI,CAAC;IAc/G,qEAAqE;IAC/D,eAAe,CAAC,MAAM,EAAE,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC;IAoB9D,8CAA8C;IACxC,UAAU,CAAC,IAAI,EAAE,SAAS,EAAE,EAAE,EAAE,SAAS,EAAE,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC;IAajF,uDAAuD;IACvD,iBAAiB,CAAC,KAAK,EAAE,SAAS,EAAE,OAAO,EAAE,CAAC,MAAM,EAAE,gBAAgB,KAAK,IAAI,GAAG,IAAI;IAOtF,+BAA+B;IAC/B,kBAAkB,IAAI,SAAS,EAAE;IAIjC,yBAAyB;IACzB,WAAW,IAAI,aAAa;IAM5B,OAAO,CAAC,aAAa;IAwBrB,OAAO,CAAC,cAAc;IA2BtB,OAAO,CAAC,gBAAgB;IAmBxB,OAAO,CAAC,gBAAgB;IAgCxB,OAAO,CAAC,WAAW;CAIpB"}