@theihtisham/agent-shadow-brain 6.0.0 → 6.0.2

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 (144) hide show
  1. package/README.md +107 -7
  2. package/dist/brain/brain-3d.d.ts +79 -0
  3. package/dist/brain/brain-3d.d.ts.map +1 -0
  4. package/dist/brain/brain-3d.js +468 -0
  5. package/dist/brain/brain-3d.js.map +1 -0
  6. package/dist/brain/brain-active-learner.d.ts +74 -0
  7. package/dist/brain/brain-active-learner.d.ts.map +1 -0
  8. package/dist/brain/brain-active-learner.js +425 -0
  9. package/dist/brain/brain-active-learner.js.map +1 -0
  10. package/dist/brain/brain-ascii.d.ts +32 -0
  11. package/dist/brain/brain-ascii.d.ts.map +1 -0
  12. package/dist/brain/brain-ascii.js +402 -0
  13. package/dist/brain/brain-ascii.js.map +1 -0
  14. package/dist/brain/brain-cinema.d.ts +45 -0
  15. package/dist/brain/brain-cinema.d.ts.map +1 -0
  16. package/dist/brain/brain-cinema.js +393 -0
  17. package/dist/brain/brain-cinema.js.map +1 -0
  18. package/dist/brain/brain-coach.d.ts +45 -0
  19. package/dist/brain/brain-coach.d.ts.map +1 -0
  20. package/dist/brain/brain-coach.js +383 -0
  21. package/dist/brain/brain-coach.js.map +1 -0
  22. package/dist/brain/brain-consolidator.d.ts +56 -0
  23. package/dist/brain/brain-consolidator.d.ts.map +1 -0
  24. package/dist/brain/brain-consolidator.js +386 -0
  25. package/dist/brain/brain-consolidator.js.map +1 -0
  26. package/dist/brain/brain-contradictions.d.ts +57 -0
  27. package/dist/brain/brain-contradictions.d.ts.map +1 -0
  28. package/dist/brain/brain-contradictions.js +443 -0
  29. package/dist/brain/brain-contradictions.js.map +1 -0
  30. package/dist/brain/brain-diff.d.ts +61 -0
  31. package/dist/brain/brain-diff.d.ts.map +1 -0
  32. package/dist/brain/brain-diff.js +439 -0
  33. package/dist/brain/brain-diff.js.map +1 -0
  34. package/dist/brain/brain-dna.d.ts +59 -0
  35. package/dist/brain/brain-dna.d.ts.map +1 -0
  36. package/dist/brain/brain-dna.js +336 -0
  37. package/dist/brain/brain-dna.js.map +1 -0
  38. package/dist/brain/brain-doppelganger.d.ts +32 -0
  39. package/dist/brain/brain-doppelganger.d.ts.map +1 -0
  40. package/dist/brain/brain-doppelganger.js +417 -0
  41. package/dist/brain/brain-doppelganger.js.map +1 -0
  42. package/dist/brain/brain-graph-walker.d.ts +54 -0
  43. package/dist/brain/brain-graph-walker.d.ts.map +1 -0
  44. package/dist/brain/brain-graph-walker.js +412 -0
  45. package/dist/brain/brain-graph-walker.js.map +1 -0
  46. package/dist/brain/brain-holiday-card.d.ts +50 -0
  47. package/dist/brain/brain-holiday-card.d.ts.map +1 -0
  48. package/dist/brain/brain-holiday-card.js +432 -0
  49. package/dist/brain/brain-holiday-card.js.map +1 -0
  50. package/dist/brain/brain-memes.d.ts +44 -0
  51. package/dist/brain/brain-memes.d.ts.map +1 -0
  52. package/dist/brain/brain-memes.js +438 -0
  53. package/dist/brain/brain-memes.js.map +1 -0
  54. package/dist/brain/brain-memory-tiers.d.ts +67 -0
  55. package/dist/brain/brain-memory-tiers.d.ts.map +1 -0
  56. package/dist/brain/brain-memory-tiers.js +292 -0
  57. package/dist/brain/brain-memory-tiers.js.map +1 -0
  58. package/dist/brain/brain-notebook.d.ts +68 -0
  59. package/dist/brain/brain-notebook.d.ts.map +1 -0
  60. package/dist/brain/brain-notebook.js +379 -0
  61. package/dist/brain/brain-notebook.js.map +1 -0
  62. package/dist/brain/brain-quantize.d.ts +62 -0
  63. package/dist/brain/brain-quantize.d.ts.map +1 -0
  64. package/dist/brain/brain-quantize.js +346 -0
  65. package/dist/brain/brain-quantize.js.map +1 -0
  66. package/dist/brain/brain-query-expander.d.ts +31 -0
  67. package/dist/brain/brain-query-expander.d.ts.map +1 -0
  68. package/dist/brain/brain-query-expander.js +417 -0
  69. package/dist/brain/brain-query-expander.js.map +1 -0
  70. package/dist/brain/brain-quest.d.ts +58 -0
  71. package/dist/brain/brain-quest.d.ts.map +1 -0
  72. package/dist/brain/brain-quest.js +541 -0
  73. package/dist/brain/brain-quest.js.map +1 -0
  74. package/dist/brain/brain-recall-cache.d.ts +73 -0
  75. package/dist/brain/brain-recall-cache.d.ts.map +1 -0
  76. package/dist/brain/brain-recall-cache.js +444 -0
  77. package/dist/brain/brain-recall-cache.js.map +1 -0
  78. package/dist/brain/brain-reflex.d.ts +55 -0
  79. package/dist/brain/brain-reflex.d.ts.map +1 -0
  80. package/dist/brain/brain-reflex.js +364 -0
  81. package/dist/brain/brain-reflex.js.map +1 -0
  82. package/dist/brain/brain-replay.d.ts +74 -0
  83. package/dist/brain/brain-replay.d.ts.map +1 -0
  84. package/dist/brain/brain-replay.js +336 -0
  85. package/dist/brain/brain-replay.js.map +1 -0
  86. package/dist/brain/brain-rerank.d.ts +39 -0
  87. package/dist/brain/brain-rerank.d.ts.map +1 -0
  88. package/dist/brain/brain-rerank.js +216 -0
  89. package/dist/brain/brain-rerank.js.map +1 -0
  90. package/dist/brain/brain-roast.d.ts +44 -0
  91. package/dist/brain/brain-roast.d.ts.map +1 -0
  92. package/dist/brain/brain-roast.js +566 -0
  93. package/dist/brain/brain-roast.js.map +1 -0
  94. package/dist/brain/brain-sonification.d.ts +57 -0
  95. package/dist/brain/brain-sonification.d.ts.map +1 -0
  96. package/dist/brain/brain-sonification.js +286 -0
  97. package/dist/brain/brain-sonification.js.map +1 -0
  98. package/dist/brain/brain-tarot.d.ts +49 -0
  99. package/dist/brain/brain-tarot.d.ts.map +1 -0
  100. package/dist/brain/brain-tarot.js +634 -0
  101. package/dist/brain/brain-tarot.js.map +1 -0
  102. package/dist/brain/brain-time-capsule.d.ts +80 -0
  103. package/dist/brain/brain-time-capsule.d.ts.map +1 -0
  104. package/dist/brain/brain-time-capsule.js +289 -0
  105. package/dist/brain/brain-time-capsule.js.map +1 -0
  106. package/dist/brain/brain-trophies.d.ts +60 -0
  107. package/dist/brain/brain-trophies.d.ts.map +1 -0
  108. package/dist/brain/brain-trophies.js +431 -0
  109. package/dist/brain/brain-trophies.js.map +1 -0
  110. package/dist/brain/brain-working-memory.d.ts +78 -0
  111. package/dist/brain/brain-working-memory.d.ts.map +1 -0
  112. package/dist/brain/brain-working-memory.js +367 -0
  113. package/dist/brain/brain-working-memory.js.map +1 -0
  114. package/dist/brain/confidence-gate.d.ts +69 -0
  115. package/dist/brain/confidence-gate.d.ts.map +1 -0
  116. package/dist/brain/confidence-gate.js +244 -0
  117. package/dist/brain/confidence-gate.js.map +1 -0
  118. package/dist/brain/constitution.d.ts +59 -0
  119. package/dist/brain/constitution.d.ts.map +1 -0
  120. package/dist/brain/constitution.js +315 -0
  121. package/dist/brain/constitution.js.map +1 -0
  122. package/dist/brain/embeddings-v2.d.ts +58 -0
  123. package/dist/brain/embeddings-v2.d.ts.map +1 -0
  124. package/dist/brain/embeddings-v2.js +344 -0
  125. package/dist/brain/embeddings-v2.js.map +1 -0
  126. package/dist/brain/hive-voice.d.ts +71 -0
  127. package/dist/brain/hive-voice.d.ts.map +1 -0
  128. package/dist/brain/hive-voice.js +352 -0
  129. package/dist/brain/hive-voice.js.map +1 -0
  130. package/dist/brain/markdown-export.d.ts +48 -0
  131. package/dist/brain/markdown-export.d.ts.map +1 -0
  132. package/dist/brain/markdown-export.js +382 -0
  133. package/dist/brain/markdown-export.js.map +1 -0
  134. package/dist/brain/multimodal-vision.d.ts +38 -0
  135. package/dist/brain/multimodal-vision.d.ts.map +1 -0
  136. package/dist/brain/multimodal-vision.js +257 -0
  137. package/dist/brain/multimodal-vision.js.map +1 -0
  138. package/dist/brain/otel-lite.d.ts +71 -0
  139. package/dist/brain/otel-lite.d.ts.map +1 -0
  140. package/dist/brain/otel-lite.js +232 -0
  141. package/dist/brain/otel-lite.js.map +1 -0
  142. package/dist/cli.js +881 -2
  143. package/dist/cli.js.map +1 -1
  144. package/package.json +2 -2
@@ -0,0 +1,386 @@
1
+ // src/brain/brain-consolidator.ts — Background consolidation engine
2
+ // v6.0.2 — Hive Mind Edition
3
+ //
4
+ // Over time the brain accumulates near-duplicates ("React useEffect needs
5
+ // cleanup" written 5 times by 5 sessions). Consolidation:
6
+ // 1. MERGE near-duplicates (cosine >= 0.92) into one canonical memory
7
+ // 2. ABSTRACT clusters of >= 5 similar memories into a new "Pattern: X"
8
+ // semantic memory (template-based summarization, no LLM call)
9
+ // 3. PRUNE stale episodic memories (opt-in via --prune)
10
+ // 4. LINK related semantic memories reciprocally
11
+ //
12
+ // Defensive: embeddings module is dynamic-imported so a missing or broken
13
+ // embeddings install degrades to keyword-Jaccard similarity rather than
14
+ // crashing the whole consolidator.
15
+ //
16
+ // Reports persist to ~/.shadow-brain/consolidation-reports/<project>-<ts>.json
17
+ //
18
+ // Exposed: BrainConsolidator, getBrainConsolidator(), resetBrainConsolidatorForTests()
19
+ import * as fs from 'fs';
20
+ import * as path from 'path';
21
+ import * as os from 'os';
22
+ import * as zlib from 'zlib';
23
+ import { getBrainMemoryTiers, } from './brain-memory-tiers.js';
24
+ const STORE_DIR = path.join(os.homedir(), '.shadow-brain', 'memory');
25
+ const REPORT_DIR = path.join(os.homedir(), '.shadow-brain', 'consolidation-reports');
26
+ const ARCHIVE_DIR = path.join(STORE_DIR, 'archive');
27
+ const DEFAULT_SIMILARITY = 0.92;
28
+ const ABSTRACTION_SIMILARITY = 0.75;
29
+ const DEFAULT_MIN_CLUSTER = 5;
30
+ const STALE_AGE_DAYS = 180;
31
+ const MS_PER_DAY = 24 * 60 * 60 * 1000;
32
+ export class BrainConsolidator {
33
+ constructor() {
34
+ this.lastReports = new Map();
35
+ this.timers = new Map();
36
+ this.initialized = false;
37
+ }
38
+ async init() {
39
+ if (this.initialized)
40
+ return;
41
+ fs.mkdirSync(REPORT_DIR, { recursive: true });
42
+ fs.mkdirSync(ARCHIVE_DIR, { recursive: true });
43
+ this.initialized = true;
44
+ }
45
+ async run(opts = {}) {
46
+ await this.init();
47
+ const startedAt = new Date().toISOString();
48
+ const startMs = Date.now();
49
+ const project = opts.project ?? 'default';
50
+ const dryRun = !!opts.dryRun;
51
+ const threshold = opts.similarityThreshold ?? DEFAULT_SIMILARITY;
52
+ const minCluster = opts.minCluster ?? DEFAULT_MIN_CLUSTER;
53
+ const tiers = getBrainMemoryTiers();
54
+ const all = await tiers.read({ tier: 'all', project, limit: 10000 });
55
+ const scanned = all.length;
56
+ if (scanned === 0) {
57
+ const report = {
58
+ project, startedAt, durationMs: Date.now() - startMs, scanned: 0,
59
+ mergedPairs: [], abstractionsCreated: [], pruned: [], dryRun,
60
+ similarityBackend: 'jaccard',
61
+ };
62
+ this.lastReports.set(project, report);
63
+ return report;
64
+ }
65
+ // 1. Compute pairwise similarity (lazy: embeddings if available)
66
+ const { sim, backend } = await this.similarityFn(all);
67
+ // 2. Find merge pairs (cosine >= threshold)
68
+ const merged = new Set();
69
+ const mergedPairs = [];
70
+ for (let i = 0; i < all.length; i++) {
71
+ const a = all[i];
72
+ if (merged.has(a.id))
73
+ continue;
74
+ const group = [];
75
+ for (let j = i + 1; j < all.length; j++) {
76
+ const b = all[j];
77
+ if (merged.has(b.id))
78
+ continue;
79
+ if (sim(a, b) >= threshold) {
80
+ group.push(b.id);
81
+ merged.add(b.id);
82
+ }
83
+ }
84
+ if (group.length > 0) {
85
+ // Keep the highest importance + most recent
86
+ const keepers = [a, ...group.map(id => all.find(m => m.id === id)).filter(Boolean)];
87
+ keepers.sort((x, y) => (y.importance - x.importance) || y.createdAt.localeCompare(x.createdAt));
88
+ const kept = keepers[0];
89
+ const droppedIds = keepers.slice(1).map(m => m.id);
90
+ mergedPairs.push({ kept: kept.id, merged: droppedIds });
91
+ if (!dryRun)
92
+ await this.writeMerge(kept, keepers.slice(1));
93
+ }
94
+ }
95
+ // 3. Find abstraction clusters (cosine >= 0.75 across all pairs in cluster)
96
+ const abstractionsCreated = [];
97
+ const usedInCluster = new Set();
98
+ for (let i = 0; i < all.length; i++) {
99
+ const seed = all[i];
100
+ if (usedInCluster.has(seed.id) || merged.has(seed.id))
101
+ continue;
102
+ const cluster = [seed];
103
+ for (let j = 0; j < all.length; j++) {
104
+ if (i === j)
105
+ continue;
106
+ const cand = all[j];
107
+ if (usedInCluster.has(cand.id) || merged.has(cand.id))
108
+ continue;
109
+ // Must be similar enough to ALL existing members
110
+ let allMatch = true;
111
+ for (const m of cluster) {
112
+ if (sim(m, cand) < ABSTRACTION_SIMILARITY) {
113
+ allMatch = false;
114
+ break;
115
+ }
116
+ }
117
+ if (allMatch)
118
+ cluster.push(cand);
119
+ }
120
+ if (cluster.length >= minCluster) {
121
+ const abs = await this.makeAbstraction(cluster, project, dryRun);
122
+ abstractionsCreated.push(abs);
123
+ for (const m of cluster)
124
+ usedInCluster.add(m.id);
125
+ }
126
+ }
127
+ // 4. Optional prune of cold episodic memories
128
+ const pruned = [];
129
+ if (opts.prune) {
130
+ const cutoff = Date.now() - STALE_AGE_DAYS * MS_PER_DAY;
131
+ for (const m of all) {
132
+ if (m.tier !== 'episodic')
133
+ continue;
134
+ if (m.accessCount !== 0)
135
+ continue;
136
+ if (Date.parse(m.createdAt) > cutoff)
137
+ continue;
138
+ if (!dryRun)
139
+ await this.archiveMemory(m);
140
+ pruned.push(m.id);
141
+ }
142
+ }
143
+ const report = {
144
+ project, startedAt,
145
+ durationMs: Date.now() - startMs,
146
+ scanned,
147
+ mergedPairs,
148
+ abstractionsCreated,
149
+ pruned,
150
+ dryRun,
151
+ similarityBackend: backend,
152
+ };
153
+ if (!dryRun)
154
+ await this.persistReport(report);
155
+ this.lastReports.set(project, report);
156
+ return report;
157
+ }
158
+ schedule(project, intervalMs) {
159
+ const existing = this.timers.get(project);
160
+ if (existing)
161
+ clearInterval(existing);
162
+ const timer = setInterval(() => {
163
+ this.run({ project }).catch(() => { });
164
+ }, Math.max(intervalMs, 1000));
165
+ // Don't block process exit on this background loop.
166
+ if (typeof timer.unref === 'function')
167
+ timer.unref();
168
+ this.timers.set(project, timer);
169
+ return {
170
+ stop: () => {
171
+ clearInterval(timer);
172
+ this.timers.delete(project);
173
+ },
174
+ };
175
+ }
176
+ lastReport(project) {
177
+ return this.lastReports.get(project) ?? null;
178
+ }
179
+ async previewMerge(memoryIds) {
180
+ await this.init();
181
+ if (memoryIds.length < 2) {
182
+ return { wouldMerge: false, mergedContent: '', droppedFields: [] };
183
+ }
184
+ const tiers = getBrainMemoryTiers();
185
+ const all = await tiers.read({ tier: 'all', limit: 10000 });
186
+ const targets = memoryIds.map(id => all.find(m => m.id === id)).filter(Boolean);
187
+ if (targets.length < 2)
188
+ return { wouldMerge: false, mergedContent: '', droppedFields: [] };
189
+ targets.sort((a, b) => (b.importance - a.importance) || b.createdAt.localeCompare(a.createdAt));
190
+ const kept = targets[0];
191
+ const dropped = targets.slice(1);
192
+ const droppedFields = [];
193
+ for (const d of dropped) {
194
+ if (d.entityRefs?.length && !overlap(kept.entityRefs, d.entityRefs))
195
+ droppedFields.push(`entityRefs:${d.id}`);
196
+ if (d.embedding && !kept.embedding)
197
+ droppedFields.push(`embedding:${d.id}`);
198
+ }
199
+ return { wouldMerge: true, mergedContent: kept.content, droppedFields };
200
+ }
201
+ // ── Internals ─────────────────────────────────────────────────────────
202
+ async similarityFn(all) {
203
+ // Try embeddings-v2 first; fall back to Jaccard
204
+ try {
205
+ const mod = await import('./embeddings-v2.js');
206
+ const ev2 = mod.getEmbeddingsV2();
207
+ // Pre-index any missing
208
+ const vecCache = new Map();
209
+ for (const m of all) {
210
+ if (m.embedding && m.embedding.length) {
211
+ vecCache.set(m.id, m.embedding);
212
+ continue;
213
+ }
214
+ try {
215
+ // Use the inner Embeddings (v1) for a fast cached embed call.
216
+ // EmbeddingsV2 doesn't expose direct embed; we use the underlying
217
+ // Embeddings via dynamic import for vector access.
218
+ const emb = await import('./embeddings.js');
219
+ const e = emb.getEmbeddings();
220
+ const v = await e.embed(m.content);
221
+ vecCache.set(m.id, v);
222
+ }
223
+ catch { /* skip */ }
224
+ }
225
+ void ev2; // imported for side-effect / availability check
226
+ const sim = (a, b) => {
227
+ const va = vecCache.get(a.id);
228
+ const vb = vecCache.get(b.id);
229
+ if (!va || !vb)
230
+ return jaccardSim(a.content, b.content);
231
+ return cosine(va, vb);
232
+ };
233
+ return { sim, backend: 'embeddings' };
234
+ }
235
+ catch {
236
+ const sim = (a, b) => jaccardSim(a.content, b.content);
237
+ return { sim, backend: 'jaccard' };
238
+ }
239
+ }
240
+ async writeMerge(kept, dropped) {
241
+ const tiers = getBrainMemoryTiers();
242
+ const transferredAccess = dropped.reduce((s, d) => s + d.accessCount, 0);
243
+ const lineage = [
244
+ ...(kept.derivedFromMemoryIds ?? []),
245
+ ...dropped.map(d => d.id),
246
+ ...dropped.flatMap(d => d.derivedFromMemoryIds ?? []),
247
+ ];
248
+ await tiers.write({
249
+ id: kept.id, // overwrite by appending a new entry with same id (last-write wins on read)
250
+ content: kept.content,
251
+ project: kept.project,
252
+ importance: Math.min(1, kept.importance + 0.05 * dropped.length),
253
+ sourceAgent: kept.sourceAgent,
254
+ entityRefs: dedupe([...(kept.entityRefs ?? []), ...dropped.flatMap(d => d.entityRefs ?? [])]),
255
+ tier: kept.tier,
256
+ embedding: kept.embedding,
257
+ });
258
+ // Note: in an append-only store we don't physically delete dropped rows;
259
+ // they remain readable until a compaction pass. The kept row's higher
260
+ // access count + lineage signals readers to prefer it.
261
+ void transferredAccess;
262
+ void lineage;
263
+ }
264
+ async makeAbstraction(cluster, project, dryRun) {
265
+ // Template summarization: longest common substring + most important fragment.
266
+ const lcs = longestCommonSubstring(cluster.map(m => m.content));
267
+ const topByImportance = [...cluster].sort((a, b) => b.importance - a.importance)[0];
268
+ const topic = (lcs.length > 12 ? lcs : topByImportance.content.slice(0, 60)).trim();
269
+ const content = `Pattern: ${topic}\nObserved ${cluster.length}x across ${new Set(cluster.map(c => c.sourceAgent)).size} agents. Highest-importance instance: "${topByImportance.content.slice(0, 200)}"`;
270
+ const abstractsOver = cluster.map(m => m.id);
271
+ if (dryRun) {
272
+ return { id: 'abs_preview', abstractsOver, content };
273
+ }
274
+ const tiers = getBrainMemoryTiers();
275
+ const entry = await tiers.write({
276
+ content,
277
+ project,
278
+ tier: 'semantic',
279
+ importance: Math.min(1, 0.6 + cluster.length * 0.02),
280
+ sourceAgent: 'consolidator',
281
+ entityRefs: dedupe(cluster.flatMap(c => c.entityRefs ?? [])),
282
+ });
283
+ return { id: entry.id, abstractsOver, content };
284
+ }
285
+ async archiveMemory(m) {
286
+ try {
287
+ const file = path.join(ARCHIVE_DIR, `${m.project}.jsonl.gz`);
288
+ const data = Buffer.from(JSON.stringify(m) + '\n', 'utf-8');
289
+ const gz = zlib.gzipSync(data);
290
+ fs.appendFileSync(file, gz);
291
+ }
292
+ catch { /* non-fatal */ }
293
+ }
294
+ async persistReport(report) {
295
+ try {
296
+ const stamp = report.startedAt.replace(/[:.]/g, '-');
297
+ const file = path.join(REPORT_DIR, `${report.project}-${stamp}.json`);
298
+ const tmp = file + '.tmp';
299
+ fs.writeFileSync(tmp, JSON.stringify(report, null, 2));
300
+ fs.renameSync(tmp, file);
301
+ }
302
+ catch { /* non-fatal */ }
303
+ }
304
+ }
305
+ // ── Similarity helpers ───────────────────────────────────────────────────
306
+ function cosine(a, b) {
307
+ let d = 0, na = 0, nb = 0;
308
+ const n = Math.min(a.length, b.length);
309
+ for (let i = 0; i < n; i++) {
310
+ d += a[i] * b[i];
311
+ na += a[i] * a[i];
312
+ nb += b[i] * b[i];
313
+ }
314
+ const denom = Math.sqrt(na) * Math.sqrt(nb);
315
+ return denom > 0 ? d / denom : 0;
316
+ }
317
+ function jaccardSim(a, b) {
318
+ const ta = tokenSet(a);
319
+ const tb = tokenSet(b);
320
+ if (ta.size === 0 && tb.size === 0)
321
+ return 0;
322
+ let inter = 0;
323
+ for (const t of ta)
324
+ if (tb.has(t))
325
+ inter++;
326
+ const union = ta.size + tb.size - inter;
327
+ return union > 0 ? inter / union : 0;
328
+ }
329
+ function tokenSet(s) {
330
+ return new Set((s || '').toLowerCase().replace(/[^a-z0-9\s]/g, ' ').split(/\s+/).filter(t => t.length > 2));
331
+ }
332
+ function longestCommonSubstring(strs) {
333
+ if (strs.length === 0)
334
+ return '';
335
+ if (strs.length === 1)
336
+ return strs[0].slice(0, 80);
337
+ let best = '';
338
+ const first = strs[0];
339
+ for (let i = 0; i < first.length; i++) {
340
+ for (let j = i + 4; j <= Math.min(first.length, i + 80); j++) {
341
+ const sub = first.slice(i, j);
342
+ if (sub.length <= best.length)
343
+ continue;
344
+ let allHave = true;
345
+ for (let k = 1; k < strs.length; k++) {
346
+ if (!strs[k].includes(sub)) {
347
+ allHave = false;
348
+ break;
349
+ }
350
+ }
351
+ if (allHave)
352
+ best = sub;
353
+ }
354
+ }
355
+ return best.trim();
356
+ }
357
+ function dedupe(arr) {
358
+ return Array.from(new Set(arr));
359
+ }
360
+ function overlap(a, b) {
361
+ if (!a || !b)
362
+ return false;
363
+ const sa = new Set(a);
364
+ for (const x of b)
365
+ if (sa.has(x))
366
+ return true;
367
+ return false;
368
+ }
369
+ let _instance = null;
370
+ export function getBrainConsolidator() {
371
+ if (!_instance)
372
+ _instance = new BrainConsolidator();
373
+ return _instance;
374
+ }
375
+ export function resetBrainConsolidatorForTests() {
376
+ if (_instance) {
377
+ for (const [, t] of _instance.timers ?? []) {
378
+ try {
379
+ clearInterval(t);
380
+ }
381
+ catch { /* skip */ }
382
+ }
383
+ }
384
+ _instance = null;
385
+ }
386
+ //# sourceMappingURL=brain-consolidator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"brain-consolidator.js","sourceRoot":"","sources":["../../src/brain/brain-consolidator.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,57 @@
1
+ import { GlobalBrain } from './global-brain.js';
2
+ export type ContradictionSeverity = 'high' | 'medium' | 'low';
3
+ export type ResolutionChoice = 'keep-newer' | 'keep-higher-importance' | 'merge' | 'mark-as-version' | 'human-review';
4
+ export interface ContradictionMemoryRef {
5
+ id: string;
6
+ content: string;
7
+ importance: number;
8
+ createdAt: Date;
9
+ }
10
+ export interface Contradiction {
11
+ id: string;
12
+ severity: ContradictionSeverity;
13
+ memoryA: ContradictionMemoryRef;
14
+ memoryB: ContradictionMemoryRef;
15
+ similarity: number;
16
+ contradictionEvidence: string;
17
+ suggestedResolution: ResolutionChoice;
18
+ detectedAt: Date;
19
+ archetype?: string;
20
+ }
21
+ export interface ContradictionReport {
22
+ scannedAt: Date;
23
+ totalMemories: number;
24
+ contradictions: Contradiction[];
25
+ durationMs: number;
26
+ }
27
+ export declare class BrainContradictions {
28
+ private readonly brain;
29
+ constructor(brain?: GlobalBrain);
30
+ /** Scan one project's memories and emit a report. */
31
+ scan(project: string, opts?: {
32
+ threshold?: number;
33
+ includeArchetype?: boolean;
34
+ }): Promise<ContradictionReport>;
35
+ /** Suggest a contradiction score + evidence for a specific memory pair. */
36
+ suggest(memoryAId: string, memoryBId: string): Promise<{
37
+ contradictionScore: number;
38
+ evidence: string;
39
+ }>;
40
+ /** Resolve a contradiction by user choice. Persists the suppression so it does not re-surface. */
41
+ resolve(contradictionId: string, choice: ResolutionChoice): Promise<{
42
+ success: boolean;
43
+ action: string;
44
+ }>;
45
+ /** Return the most recent scan reports for a project. */
46
+ history(project: string, limit?: number): Promise<ContradictionReport[]>;
47
+ private resolveProjectId;
48
+ private findSimilarPairs;
49
+ private cosineFor;
50
+ private detectContradiction;
51
+ private loadSuppressions;
52
+ private appendHistory;
53
+ private findContradictionById;
54
+ }
55
+ export declare function getBrainContradictions(): BrainContradictions;
56
+ export declare function resetBrainContradictionsForTests(): void;
57
+ //# sourceMappingURL=brain-contradictions.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"brain-contradictions.d.ts","sourceRoot":"","sources":["../../src/brain/brain-contradictions.ts"],"names":[],"mappings":"AA8BA,OAAO,EAAkB,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAOhE,MAAM,MAAM,qBAAqB,GAAG,MAAM,GAAG,QAAQ,GAAG,KAAK,CAAC;AAC9D,MAAM,MAAM,gBAAgB,GACxB,YAAY,GACZ,wBAAwB,GACxB,OAAO,GACP,iBAAiB,GACjB,cAAc,CAAC;AAEnB,MAAM,WAAW,sBAAsB;IACrC,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,IAAI,CAAC;CACjB;AAED,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,MAAM,CAAC;IACX,QAAQ,EAAE,qBAAqB,CAAC;IAChC,OAAO,EAAE,sBAAsB,CAAC;IAChC,OAAO,EAAE,sBAAsB,CAAC;IAChC,UAAU,EAAE,MAAM,CAAC;IACnB,qBAAqB,EAAE,MAAM,CAAC;IAC9B,mBAAmB,EAAE,gBAAgB,CAAC;IACtC,UAAU,EAAE,IAAI,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,mBAAmB;IAClC,SAAS,EAAE,IAAI,CAAC;IAChB,aAAa,EAAE,MAAM,CAAC;IACtB,cAAc,EAAE,aAAa,EAAE,CAAC;IAChC,UAAU,EAAE,MAAM,CAAC;CACpB;AAsCD,qBAAa,mBAAmB;IAC9B,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAc;gBAExB,KAAK,CAAC,EAAE,WAAW;IAI/B,qDAAqD;IAC/C,IAAI,CACR,OAAO,EAAE,MAAM,EACf,IAAI,GAAE;QAAE,SAAS,CAAC,EAAE,MAAM,CAAC;QAAC,gBAAgB,CAAC,EAAE,OAAO,CAAA;KAAO,GAC5D,OAAO,CAAC,mBAAmB,CAAC;IA8B/B,2EAA2E;IACrE,OAAO,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC;QAAE,kBAAkB,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,CAAC;IAU9G,kGAAkG;IAC5F,OAAO,CAAC,eAAe,EAAE,MAAM,EAAE,MAAM,EAAE,gBAAgB,GAAG,OAAO,CAAC;QAAE,OAAO,EAAE,OAAO,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC;IAa/G,yDAAyD;IACnD,OAAO,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,SAAK,GAAG,OAAO,CAAC,mBAAmB,EAAE,CAAC;IAa1E,OAAO,CAAC,gBAAgB;YAYV,gBAAgB;YA6ChB,SAAS;IAYvB,OAAO,CAAC,mBAAmB;YAwBb,gBAAgB;YAMhB,aAAa;YAQb,qBAAqB;CAepC;AAyLD,wBAAgB,sBAAsB,IAAI,mBAAmB,CAG5D;AACD,wBAAgB,gCAAgC,IAAI,IAAI,CAAsB"}