@theihtisham/agent-shadow-brain 5.0.0 → 5.1.1

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 (61) hide show
  1. package/README.md +575 -292
  2. package/dist/adapters/index.d.ts.map +1 -1
  3. package/dist/adapters/index.js +1 -0
  4. package/dist/adapters/index.js.map +1 -1
  5. package/dist/brain/auto-setup.d.ts +54 -0
  6. package/dist/brain/auto-setup.d.ts.map +1 -0
  7. package/dist/brain/auto-setup.js +660 -0
  8. package/dist/brain/auto-setup.js.map +1 -0
  9. package/dist/brain/brain-portability.d.ts +81 -0
  10. package/dist/brain/brain-portability.d.ts.map +1 -0
  11. package/dist/brain/brain-portability.js +329 -0
  12. package/dist/brain/brain-portability.js.map +1 -0
  13. package/dist/brain/code-dna.d.ts +70 -0
  14. package/dist/brain/code-dna.d.ts.map +1 -0
  15. package/dist/brain/code-dna.js +611 -0
  16. package/dist/brain/code-dna.js.map +1 -0
  17. package/dist/brain/fine-tuning-engine.d.ts +99 -0
  18. package/dist/brain/fine-tuning-engine.d.ts.map +1 -0
  19. package/dist/brain/fine-tuning-engine.js +681 -0
  20. package/dist/brain/fine-tuning-engine.js.map +1 -0
  21. package/dist/brain/intent-engine.d.ts +64 -0
  22. package/dist/brain/intent-engine.d.ts.map +1 -0
  23. package/dist/brain/intent-engine.js +374 -0
  24. package/dist/brain/intent-engine.js.map +1 -0
  25. package/dist/brain/lsp-server.d.ts +62 -0
  26. package/dist/brain/lsp-server.d.ts.map +1 -0
  27. package/dist/brain/lsp-server.js +480 -0
  28. package/dist/brain/lsp-server.js.map +1 -0
  29. package/dist/brain/mcp-server.d.ts +12 -0
  30. package/dist/brain/mcp-server.d.ts.map +1 -1
  31. package/dist/brain/mcp-server.js +396 -37
  32. package/dist/brain/mcp-server.js.map +1 -1
  33. package/dist/brain/orchestrator.d.ts +13 -0
  34. package/dist/brain/orchestrator.d.ts.map +1 -1
  35. package/dist/brain/orchestrator.js +25 -1
  36. package/dist/brain/orchestrator.js.map +1 -1
  37. package/dist/brain/plugin-system.d.ts +97 -0
  38. package/dist/brain/plugin-system.d.ts.map +1 -0
  39. package/dist/brain/plugin-system.js +404 -0
  40. package/dist/brain/plugin-system.js.map +1 -0
  41. package/dist/brain/smart-cache.d.ts +100 -0
  42. package/dist/brain/smart-cache.d.ts.map +1 -0
  43. package/dist/brain/smart-cache.js +417 -0
  44. package/dist/brain/smart-cache.js.map +1 -0
  45. package/dist/brain/temporal-intelligence.d.ts +89 -0
  46. package/dist/brain/temporal-intelligence.d.ts.map +1 -0
  47. package/dist/brain/temporal-intelligence.js +378 -0
  48. package/dist/brain/temporal-intelligence.js.map +1 -0
  49. package/dist/cli.js +444 -3
  50. package/dist/cli.js.map +1 -1
  51. package/dist/dashboard/server.d.ts +4 -0
  52. package/dist/dashboard/server.d.ts.map +1 -1
  53. package/dist/dashboard/server.js +453 -330
  54. package/dist/dashboard/server.js.map +1 -1
  55. package/dist/index.d.ts +11 -1
  56. package/dist/index.d.ts.map +1 -1
  57. package/dist/index.js +12 -1
  58. package/dist/index.js.map +1 -1
  59. package/dist/types.d.ts +284 -1
  60. package/dist/types.d.ts.map +1 -1
  61. package/package.json +28 -4
@@ -0,0 +1,378 @@
1
+ // src/brain/temporal-intelligence.ts — Time-series analysis of code evolution
2
+ // v6.0.0 — Temporal pattern detection and velocity tracking
3
+ import * as path from 'path';
4
+ // ── Temporal Intelligence Engine ────────────────────────────────────────────
5
+ export class TemporalIntelligence {
6
+ constructor(projectDir) {
7
+ this.events = [];
8
+ this.fileHistory = new Map();
9
+ this.anomalies = [];
10
+ this.fileHeatmaps = new Map();
11
+ this.bugPredictions = new Map();
12
+ this.projectDir = projectDir;
13
+ }
14
+ // ── Event Recording ─────────────────────────────────────────────────
15
+ recordEvent(event) {
16
+ const fullEvent = {
17
+ ...event,
18
+ id: `evt-${Date.now()}-${Math.random().toString(36).slice(2, 8)}`,
19
+ };
20
+ this.events.push(fullEvent);
21
+ if (this.events.length > 50000) {
22
+ this.events = this.events.slice(-30000);
23
+ }
24
+ // Track file history
25
+ if (fullEvent.file) {
26
+ if (!this.fileHistory.has(fullEvent.file)) {
27
+ this.fileHistory.set(fullEvent.file, []);
28
+ }
29
+ const history = this.fileHistory.get(fullEvent.file);
30
+ history.push(fullEvent);
31
+ if (history.length > 500) {
32
+ this.fileHistory.set(fullEvent.file, history.slice(-300));
33
+ }
34
+ this.updateFileHeatmap(fullEvent.file);
35
+ }
36
+ // Check for anomalies
37
+ this.detectAnomalies(fullEvent);
38
+ return fullEvent;
39
+ }
40
+ recordCommit(files, message, timestamp) {
41
+ const type = this.classifyCommit(message);
42
+ const ts = timestamp || Date.now();
43
+ for (const file of files) {
44
+ this.recordEvent({
45
+ timestamp: ts,
46
+ type,
47
+ file,
48
+ description: message,
49
+ impact: this.estimateImpact(message, files.length),
50
+ });
51
+ }
52
+ }
53
+ recordFileChange(file, changeType) {
54
+ this.recordEvent({
55
+ timestamp: Date.now(),
56
+ type: 'file-change',
57
+ file,
58
+ description: `${changeType}: ${path.basename(file)}`,
59
+ impact: changeType === 'delete' ? 0.5 : 0.3,
60
+ });
61
+ }
62
+ // ── Velocity Analysis ───────────────────────────────────────────────
63
+ getVelocity() {
64
+ const now = Date.now();
65
+ const dayMs = 24 * 60 * 60 * 1000;
66
+ const weekMs = 7 * dayMs;
67
+ const monthMs = 30 * dayMs;
68
+ const dailyEvents = this.events.filter(e => now - e.timestamp < dayMs);
69
+ const weeklyEvents = this.events.filter(e => now - e.timestamp < weekMs);
70
+ const monthlyEvents = this.events.filter(e => now - e.timestamp < monthMs);
71
+ // Peak hours analysis
72
+ const hourCounts = new Array(24).fill(0);
73
+ const dayCounts = new Array(7).fill(0);
74
+ for (const event of this.events) {
75
+ const date = new Date(event.timestamp);
76
+ hourCounts[date.getHours()]++;
77
+ dayCounts[date.getDay()]++;
78
+ }
79
+ const peakHours = hourCounts
80
+ .map((count, hour) => ({ hour, count }))
81
+ .sort((a, b) => b.count - a.count)
82
+ .slice(0, 3)
83
+ .map(h => h.hour);
84
+ const peakDays = dayCounts
85
+ .map((count, day) => ({ day, count }))
86
+ .sort((a, b) => b.count - a.count)
87
+ .slice(0, 3)
88
+ .map(d => d.day);
89
+ // Trend detection (compare recent vs older activity)
90
+ const recentWeek = this.events.filter(e => now - e.timestamp < weekMs).length;
91
+ const previousWeek = this.events.filter(e => now - e.timestamp >= weekMs && now - e.timestamp < 2 * weekMs).length;
92
+ let trend = 'stable';
93
+ let trendConfidence = 0.5;
94
+ if (previousWeek > 0) {
95
+ const ratio = recentWeek / previousWeek;
96
+ if (ratio > 1.3) {
97
+ trend = 'accelerating';
98
+ trendConfidence = Math.min(1, (ratio - 1) * 2);
99
+ }
100
+ else if (ratio < 0.7) {
101
+ trend = 'decelerating';
102
+ trendConfidence = Math.min(1, (1 - ratio) * 2);
103
+ }
104
+ else {
105
+ trend = 'stable';
106
+ trendConfidence = 1 - Math.abs(ratio - 1);
107
+ }
108
+ }
109
+ else if (recentWeek === 0) {
110
+ trend = 'stalled';
111
+ trendConfidence = 0.9;
112
+ }
113
+ // Average cycle time (time between feature-type events)
114
+ const featureEvents = this.events.filter(e => e.type === 'feature').sort((a, b) => a.timestamp - b.timestamp);
115
+ let avgCycleTime = 0;
116
+ if (featureEvents.length >= 2) {
117
+ const gaps = [];
118
+ for (let i = 1; i < featureEvents.length; i++) {
119
+ gaps.push(featureEvents[i].timestamp - featureEvents[i - 1].timestamp);
120
+ }
121
+ avgCycleTime = gaps.reduce((s, g) => s + g, 0) / gaps.length;
122
+ }
123
+ return {
124
+ daily: dailyEvents.length,
125
+ weekly: weeklyEvents.length,
126
+ monthly: monthlyEvents.length,
127
+ trend,
128
+ trendConfidence,
129
+ peakHours,
130
+ peakDays,
131
+ avgCycleTime,
132
+ };
133
+ }
134
+ // ── File Heatmap ────────────────────────────────────────────────────
135
+ updateFileHeatmap(file) {
136
+ const history = this.fileHistory.get(file);
137
+ if (!history || history.length === 0)
138
+ return;
139
+ const now = Date.now();
140
+ const timestamps = history.map(e => e.timestamp).sort((a, b) => a - b);
141
+ // Calculate average time between changes
142
+ let avgGap = 0;
143
+ if (timestamps.length >= 2) {
144
+ const gaps = [];
145
+ for (let i = 1; i < timestamps.length; i++) {
146
+ gaps.push(timestamps[i] - timestamps[i - 1]);
147
+ }
148
+ avgGap = gaps.reduce((s, g) => s + g, 0) / gaps.length;
149
+ }
150
+ const lastChanged = timestamps[timestamps.length - 1];
151
+ const dayMs = 24 * 60 * 60 * 1000;
152
+ const timeSinceLastChange = now - lastChanged;
153
+ // Hotness: recent changes with high frequency = hot
154
+ const recentChanges = timestamps.filter(t => now - t < 7 * dayMs).length;
155
+ const hotness = Math.min(1, recentChanges / 10);
156
+ // Churn risk: files changing too frequently may be unstable
157
+ const churnRisk = Math.min(1, (recentChanges / 7) * (history.filter(e => e.type === 'bug-fix').length / Math.max(1, history.length)));
158
+ // Stability: inverse of change frequency, weighted by time since last change
159
+ const stabilityScore = Math.min(1, Math.max(0, 1 - hotness + (timeSinceLastChange > 30 * dayMs ? 0.3 : 0)));
160
+ this.fileHeatmaps.set(file, {
161
+ file,
162
+ changeFrequency: history.length,
163
+ lastChanged,
164
+ avgTimeBetweenChanges: avgGap,
165
+ hotness,
166
+ churnRisk,
167
+ stabilityScore,
168
+ changeTimes: timestamps.slice(-50),
169
+ });
170
+ }
171
+ getHotFiles(n = 10) {
172
+ return Array.from(this.fileHeatmaps.values())
173
+ .sort((a, b) => b.hotness - a.hotness)
174
+ .slice(0, n);
175
+ }
176
+ getStableFiles(n = 10) {
177
+ return Array.from(this.fileHeatmaps.values())
178
+ .filter(f => f.changeFrequency >= 3) // Must have some history
179
+ .sort((a, b) => b.stabilityScore - a.stabilityScore)
180
+ .slice(0, n);
181
+ }
182
+ getChurnRisks(threshold = 0.5) {
183
+ return Array.from(this.fileHeatmaps.values())
184
+ .filter(f => f.churnRisk >= threshold)
185
+ .sort((a, b) => b.churnRisk - a.churnRisk);
186
+ }
187
+ // ── Bug Prediction ──────────────────────────────────────────────────
188
+ predictBugs(topN = 10) {
189
+ this.bugPredictions.clear();
190
+ for (const [file, history] of this.fileHistory) {
191
+ const bugFixes = history.filter(e => e.type === 'bug-fix');
192
+ const totalChanges = history.length;
193
+ const lastBugFix = bugFixes.length > 0 ? bugFixes[bugFixes.length - 1].timestamp : null;
194
+ const changesSinceLastFix = lastBugFix
195
+ ? history.filter(e => e.timestamp > lastBugFix).length
196
+ : totalChanges;
197
+ // Bug probability factors
198
+ const factors = [];
199
+ let probability = 0;
200
+ // Factor 1: Historical bug rate
201
+ const bugRate = totalChanges > 0 ? bugFixes.length / totalChanges : 0;
202
+ if (bugRate > 0.3) {
203
+ probability += 0.3;
204
+ factors.push(`High bug rate: ${(bugRate * 100).toFixed(0)}%`);
205
+ }
206
+ else if (bugRate > 0.1) {
207
+ probability += 0.15;
208
+ factors.push(`Moderate bug rate: ${(bugRate * 100).toFixed(0)}%`);
209
+ }
210
+ // Factor 2: High churn
211
+ const heatmap = this.fileHeatmaps.get(file);
212
+ if (heatmap && heatmap.hotness > 0.7) {
213
+ probability += 0.2;
214
+ factors.push('High churn rate');
215
+ }
216
+ // Factor 3: Recent rapid changes
217
+ const recentChanges = history.filter(e => Date.now() - e.timestamp < 7 * 24 * 60 * 60 * 1000).length;
218
+ if (recentChanges > 5) {
219
+ probability += 0.15;
220
+ factors.push(`${recentChanges} changes in last week`);
221
+ }
222
+ // Factor 4: Many changes since last bug fix
223
+ if (changesSinceLastFix > 10) {
224
+ probability += 0.15;
225
+ factors.push(`${changesSinceLastFix} changes since last fix`);
226
+ }
227
+ // Factor 5: High-impact changes
228
+ const highImpact = history.filter(e => e.impact > 0.7).length;
229
+ if (highImpact > 3) {
230
+ probability += 0.1;
231
+ factors.push(`${highImpact} high-impact changes`);
232
+ }
233
+ // Estimate complexity from change frequency
234
+ const complexity = Math.min(1, totalChanges / 50);
235
+ probability = Math.min(1, probability);
236
+ if (factors.length > 0) {
237
+ this.bugPredictions.set(file, {
238
+ file,
239
+ probability,
240
+ factors,
241
+ lastBugFix,
242
+ changesSinceLastFix,
243
+ complexity,
244
+ });
245
+ }
246
+ }
247
+ return Array.from(this.bugPredictions.values())
248
+ .sort((a, b) => b.probability - a.probability)
249
+ .slice(0, topN);
250
+ }
251
+ // ── Anomaly Detection ───────────────────────────────────────────────
252
+ detectAnomalies(event) {
253
+ const now = Date.now();
254
+ const hourMs = 60 * 60 * 1000;
255
+ // Detect burst: many events in short time
256
+ const recentEvents = this.events.filter(e => now - e.timestamp < hourMs);
257
+ if (recentEvents.length > 20) {
258
+ const existingBurst = this.anomalies.find(a => a.type === 'burst' && now - a.timestamp < hourMs);
259
+ if (!existingBurst) {
260
+ this.anomalies.push({
261
+ timestamp: now,
262
+ type: 'burst',
263
+ severity: recentEvents.length > 50 ? 'critical' : 'warning',
264
+ description: `${recentEvents.length} events in the last hour — unusual activity burst`,
265
+ evidence: recentEvents.slice(-5).map(e => e.description),
266
+ recommendation: 'Review recent changes for accidental bulk operations or CI issues',
267
+ });
268
+ }
269
+ }
270
+ // Detect unusual hour
271
+ const hour = new Date(event.timestamp).getHours();
272
+ if (hour >= 0 && hour < 6) {
273
+ this.anomalies.push({
274
+ timestamp: now,
275
+ type: 'unusual-hour',
276
+ severity: 'info',
277
+ description: `Activity at ${hour}:00 — outside normal working hours`,
278
+ evidence: [event.description],
279
+ recommendation: 'Late-night changes may need extra review',
280
+ });
281
+ }
282
+ // Keep anomalies manageable
283
+ if (this.anomalies.length > 1000) {
284
+ this.anomalies = this.anomalies.slice(-500);
285
+ }
286
+ }
287
+ detectDrought() {
288
+ if (this.events.length === 0)
289
+ return null;
290
+ const lastEvent = this.events[this.events.length - 1];
291
+ const gap = Date.now() - lastEvent.timestamp;
292
+ const dayMs = 24 * 60 * 60 * 1000;
293
+ if (gap > 3 * dayMs) {
294
+ return {
295
+ timestamp: Date.now(),
296
+ type: 'drought',
297
+ severity: gap > 7 * dayMs ? 'warning' : 'info',
298
+ description: `No activity for ${Math.floor(gap / dayMs)} days`,
299
+ evidence: [`Last event: ${lastEvent.description}`],
300
+ recommendation: 'Consider reviewing pending work or checking for blocked tasks',
301
+ };
302
+ }
303
+ return null;
304
+ }
305
+ getAnomalies(since) {
306
+ if (since) {
307
+ return this.anomalies.filter(a => a.timestamp >= since);
308
+ }
309
+ return [...this.anomalies];
310
+ }
311
+ // ── Timeline Analysis ───────────────────────────────────────────────
312
+ getTimeline(file, limit = 50) {
313
+ let events = file
314
+ ? this.fileHistory.get(file) || []
315
+ : this.events;
316
+ return events.slice(-limit);
317
+ }
318
+ getDayDistribution() {
319
+ const distribution = new Map();
320
+ for (const event of this.events) {
321
+ const date = new Date(event.timestamp).toISOString().split('T')[0];
322
+ if (!distribution.has(date)) {
323
+ distribution.set(date, { count: 0, types: {} });
324
+ }
325
+ const day = distribution.get(date);
326
+ day.count++;
327
+ day.types[event.type] = (day.types[event.type] || 0) + 1;
328
+ }
329
+ return Array.from(distribution.entries())
330
+ .map(([date, data]) => ({ date, ...data }))
331
+ .sort((a, b) => a.date.localeCompare(b.date));
332
+ }
333
+ // ── Helpers ──────────────────────────────────────────────────────────
334
+ classifyCommit(message) {
335
+ const msg = message.toLowerCase();
336
+ if (/^fix|bug|patch|hotfix|resolve/.test(msg))
337
+ return 'bug-fix';
338
+ if (/^feat|feature|add|new|implement/.test(msg))
339
+ return 'feature';
340
+ if (/^refactor|restructure|reorganize|simplify/.test(msg))
341
+ return 'refactor';
342
+ if (/^deploy|release|publish/.test(msg))
343
+ return 'deploy';
344
+ if (/^review|cr |code review/.test(msg))
345
+ return 'review';
346
+ return 'commit';
347
+ }
348
+ estimateImpact(message, fileCount) {
349
+ let impact = 0.3;
350
+ const msg = message.toLowerCase();
351
+ if (/breaking|critical|urgent|security/.test(msg))
352
+ impact += 0.4;
353
+ if (/major|significant|important/.test(msg))
354
+ impact += 0.2;
355
+ if (fileCount > 10)
356
+ impact += 0.2;
357
+ else if (fileCount > 5)
358
+ impact += 0.1;
359
+ return Math.min(1, impact);
360
+ }
361
+ // ── Stats ────────────────────────────────────────────────────────────
362
+ stats() {
363
+ const timestamps = this.events.map(e => e.timestamp);
364
+ const start = timestamps.length > 0 ? Math.min(...timestamps) : Date.now();
365
+ const end = timestamps.length > 0 ? Math.max(...timestamps) : Date.now();
366
+ const durationDays = Math.max(1, (end - start) / (24 * 60 * 60 * 1000));
367
+ return {
368
+ totalEvents: this.events.length,
369
+ timeSpan: { start, end, durationDays: Math.round(durationDays) },
370
+ velocity: this.getVelocity(),
371
+ anomalyCount: this.anomalies.length,
372
+ hotFiles: Array.from(this.fileHeatmaps.values()).filter(f => f.hotness > 0.5).length,
373
+ bugPredictions: this.bugPredictions.size,
374
+ avgEventsPerDay: Math.round(this.events.length / durationDays),
375
+ };
376
+ }
377
+ }
378
+ //# sourceMappingURL=temporal-intelligence.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"temporal-intelligence.js","sourceRoot":"","sources":["../../src/brain/temporal-intelligence.ts"],"names":[],"mappings":"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"}