@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,439 @@
1
+ // src/brain/brain-diff.ts — Brain Diff (viral feature)
2
+ // v6.0.2 — semantic diff between two brains
3
+ //
4
+ // "What did your brain learn that mine didn't?"
5
+ //
6
+ // Accepts either an in-memory BrainSnapshot or a path/capsuleId. Computes:
7
+ // • onlyInA / onlyInB / bothShared / conflicting entities
8
+ // • similarity score (cosine-mean over shared entity embeddings)
9
+ // • narrative (2-3 sentence English summary)
10
+ // • svg (Venn-diagram-style card, tweet-ready, 1200x600)
11
+ //
12
+ // Designed to coordinate with brain-time-capsule.ts via interfaces only — no
13
+ // hard import of capsule internals, so each module is independently testable.
14
+ import * as fs from 'fs';
15
+ import * as path from 'path';
16
+ import * as os from 'os';
17
+ import * as zlib from 'zlib';
18
+ const BRAIN_ROOT = path.join(os.homedir(), '.shadow-brain');
19
+ export class BrainDiff {
20
+ /** Compute a semantic diff between two brains. */
21
+ async diff(brainA, brainB) {
22
+ const a = await this.normalize(brainA, 'A');
23
+ const b = await this.normalize(brainB, 'B');
24
+ const byIdA = indexBy(a.entities, e => e.id);
25
+ const byIdB = indexBy(b.entities, e => e.id);
26
+ const onlyInA = [];
27
+ const onlyInB = [];
28
+ const bothShared = [];
29
+ const conflicting = [];
30
+ for (const e of a.entities) {
31
+ const other = byIdB.get(e.id);
32
+ if (!other)
33
+ onlyInA.push(e);
34
+ else if (sameContent(e, other))
35
+ bothShared.push(e);
36
+ else {
37
+ const sim = await this.cosine(e, other);
38
+ conflicting.push({ a: e, b: other, reason: 'same-id-different-content', similarity: sim });
39
+ }
40
+ }
41
+ for (const e of b.entities) {
42
+ if (!byIdA.has(e.id))
43
+ onlyInB.push(e);
44
+ }
45
+ // Mean cosine of shared entities — defaults to 1 when no overlap (vacuously identical).
46
+ const sharedSimilarities = [];
47
+ for (const e of bothShared) {
48
+ const other = byIdB.get(e.id);
49
+ if (!other)
50
+ continue;
51
+ sharedSimilarities.push(await this.cosine(e, other));
52
+ }
53
+ const similarityScore = sharedSimilarities.length
54
+ ? sharedSimilarities.reduce((s, x) => s + x, 0) / sharedSimilarities.length
55
+ : (bothShared.length === 0 && (a.entities.length || b.entities.length) ? 0 : 1);
56
+ const stats = {
57
+ addedCount: onlyInB.length,
58
+ removedCount: onlyInA.length,
59
+ conflictCount: conflicting.length,
60
+ similarityScore,
61
+ sizeA: a.entities.length,
62
+ sizeB: b.entities.length,
63
+ };
64
+ const narrative = this.narrate(a, b, onlyInA, onlyInB, bothShared, similarityScore);
65
+ const svg = this.renderSvg(a.label ?? 'Brain A', b.label ?? 'Brain B', onlyInA, onlyInB, bothShared, stats);
66
+ return {
67
+ labelA: a.label ?? 'Brain A',
68
+ labelB: b.label ?? 'Brain B',
69
+ onlyInA, onlyInB, bothShared, conflicting,
70
+ stats,
71
+ narrative,
72
+ svg,
73
+ };
74
+ }
75
+ /**
76
+ * Apply a diff back into a target brain snapshot. Returns the merged entities.
77
+ * Caller is responsible for persisting them.
78
+ */
79
+ async applyDiff(targetBrain, diff, opts) {
80
+ const merged = new Map();
81
+ for (const e of targetBrain.entities)
82
+ merged.set(e.id, e);
83
+ const consider = async (entities, from) => {
84
+ for (const e of entities) {
85
+ if (opts.strategy === 'addOnly' && merged.has(e.id))
86
+ continue;
87
+ if (opts.strategy === 'interactive') {
88
+ const keep = opts.decide ? await opts.decide(e, from) : true;
89
+ if (!keep)
90
+ continue;
91
+ }
92
+ merged.set(e.id, e);
93
+ }
94
+ };
95
+ // mergeAll: pull from both onlyInA + onlyInB + winning side of conflicts (use B as "newer").
96
+ if (opts.strategy === 'mergeAll' || opts.strategy === 'addOnly' || opts.strategy === 'interactive') {
97
+ await consider(diff.onlyInA, 'A');
98
+ await consider(diff.onlyInB, 'B');
99
+ if (opts.strategy === 'mergeAll') {
100
+ for (const c of diff.conflicting)
101
+ merged.set(c.b.id, c.b);
102
+ }
103
+ else if (opts.strategy === 'interactive') {
104
+ for (const c of diff.conflicting) {
105
+ const keepB = opts.decide ? await opts.decide(c.b, 'B') : true;
106
+ if (keepB)
107
+ merged.set(c.b.id, c.b);
108
+ }
109
+ }
110
+ }
111
+ return Array.from(merged.values());
112
+ }
113
+ // ── Internals ────────────────────────────────────────────────────────────────
114
+ async normalize(input, fallbackLabel) {
115
+ if (typeof input !== 'string') {
116
+ return { ...input, label: input.label ?? `Brain ${fallbackLabel}`, entities: input.entities ?? [] };
117
+ }
118
+ // Treat string as a path / capsuleId.
119
+ const snapshot = await loadFromPathOrCapsule(input);
120
+ if (snapshot.entities.length === 0)
121
+ snapshot.entities = [];
122
+ snapshot.label = snapshot.label ?? path.basename(input) ?? `Brain ${fallbackLabel}`;
123
+ return snapshot;
124
+ }
125
+ /** Cosine similarity between two entities. Embeds lazily if needed. */
126
+ async cosine(a, b) {
127
+ const va = await ensureVector(a);
128
+ const vb = await ensureVector(b);
129
+ if (!va || !vb)
130
+ return contentSimilarity(a.content, b.content);
131
+ const n = Math.min(va.length, vb.length);
132
+ let dot = 0;
133
+ for (let i = 0; i < n; i++)
134
+ dot += va[i] * vb[i];
135
+ return dot;
136
+ }
137
+ narrate(a, b, onlyA, onlyB, shared, sim) {
138
+ const topA = topCategories(onlyA);
139
+ const topB = topCategories(onlyB);
140
+ const sharedTop = topCategories(shared);
141
+ const labelA = a.label ?? 'Brain A';
142
+ const labelB = b.label ?? 'Brain B';
143
+ const sentences = [];
144
+ if (topA.length) {
145
+ sentences.push(`${labelA} focuses heavily on ${describeTop(topA)}.`);
146
+ }
147
+ else if (onlyA.length === 0) {
148
+ sentences.push(`${labelA} has no entities unique to it.`);
149
+ }
150
+ if (topB.length) {
151
+ sentences.push(`${labelB} is ${describeTop(topB)}-heavy.`);
152
+ }
153
+ else if (onlyB.length === 0) {
154
+ sentences.push(`${labelB} has no entities unique to it.`);
155
+ }
156
+ if (sharedTop.length) {
157
+ sentences.push(`Both share strong ${describeTop(sharedTop)} patterns (similarity ${(sim * 100).toFixed(0)}%).`);
158
+ }
159
+ const ratio = b.entities.length > 0 ? a.entities.length / b.entities.length : 1;
160
+ if (ratio !== 1 && Math.abs(ratio - 1) > 0.05 && a.entities.length && b.entities.length) {
161
+ const pct = Math.abs(ratio - 1) * 100;
162
+ const which = ratio > 1 ? labelA : labelB;
163
+ sentences.push(`${which} is ${pct.toFixed(0)}% larger.`);
164
+ }
165
+ return sentences.slice(0, 4).join(' ');
166
+ }
167
+ renderSvg(labelA, labelB, onlyA, onlyB, shared, stats) {
168
+ const W = 1200, H = 600;
169
+ const cx1 = 420, cx2 = 780, cy = 320, r = 240;
170
+ const topA = topEntities(onlyA, 5);
171
+ const topB = topEntities(onlyB, 5);
172
+ const topShared = topEntities(shared, 5);
173
+ const renderList = (items, x, anchor) => items.map((e, i) => {
174
+ const text = escapeXml(shortLabel(e));
175
+ return ` <text x="${x}" y="${cy - 30 + i * 18}" font-size="13" fill="#e8ecf4" text-anchor="${anchor}">• ${text}</text>`;
176
+ }).join('\n');
177
+ const safeA = escapeXml(labelA.length > 30 ? labelA.slice(0, 29) + '…' : labelA);
178
+ const safeB = escapeXml(labelB.length > 30 ? labelB.slice(0, 29) + '…' : labelB);
179
+ const simPct = (stats.similarityScore * 100).toFixed(0);
180
+ return `<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 ${W} ${H}" width="${W}" height="${H}" role="img" aria-label="Brain Diff card">
181
+ <defs>
182
+ <radialGradient id="bdA" cx="50%" cy="50%" r="50%">
183
+ <stop offset="0%" stop-color="#18ffff" stop-opacity="0.55"/>
184
+ <stop offset="100%" stop-color="#18ffff" stop-opacity="0.10"/>
185
+ </radialGradient>
186
+ <radialGradient id="bdB" cx="50%" cy="50%" r="50%">
187
+ <stop offset="0%" stop-color="#ec4899" stop-opacity="0.55"/>
188
+ <stop offset="100%" stop-color="#ec4899" stop-opacity="0.10"/>
189
+ </radialGradient>
190
+ <linearGradient id="bdBg" x1="0" y1="0" x2="1" y2="1">
191
+ <stop offset="0%" stop-color="#030509"/>
192
+ <stop offset="100%" stop-color="#10152a"/>
193
+ </linearGradient>
194
+ <linearGradient id="bdShared" x1="0" y1="0" x2="1" y2="0">
195
+ <stop offset="0%" stop-color="#18ffff"/>
196
+ <stop offset="100%" stop-color="#ec4899"/>
197
+ </linearGradient>
198
+ </defs>
199
+ <rect width="${W}" height="${H}" fill="url(#bdBg)"/>
200
+ <text x="40" y="44" font-family="ui-sans-serif,system-ui,sans-serif" font-size="22" font-weight="700" fill="#18ffff">Brain Diff</text>
201
+ <text x="40" y="68" font-family="ui-sans-serif,system-ui,sans-serif" font-size="13" fill="#a4afc4">${safeA} vs ${safeB} · similarity ${simPct}%</text>
202
+ <circle cx="${cx1}" cy="${cy}" r="${r}" fill="url(#bdA)" stroke="#18ffff" stroke-opacity="0.55"/>
203
+ <circle cx="${cx2}" cy="${cy}" r="${r}" fill="url(#bdB)" stroke="#ec4899" stroke-opacity="0.55"/>
204
+ <text x="${cx1 - r + 30}" y="${cy - r + 20}" font-size="16" font-weight="700" fill="#18ffff">${safeA}</text>
205
+ <text x="${cx1 - r + 30}" y="${cy - r + 42}" font-size="12" fill="#a4afc4">${onlyA.length} unique · ${stats.sizeA} total</text>
206
+ ${renderList(topA, cx1 - r + 30, 'start')}
207
+ <text x="${cx2 + r - 30}" y="${cy - r + 20}" font-size="16" font-weight="700" fill="#ec4899" text-anchor="end">${safeB}</text>
208
+ <text x="${cx2 + r - 30}" y="${cy - r + 42}" font-size="12" fill="#a4afc4" text-anchor="end">${onlyB.length} unique · ${stats.sizeB} total</text>
209
+ ${renderList(topB, cx2 + r - 30, 'end')}
210
+ <text x="${(cx1 + cx2) / 2}" y="${cy - r + 20}" font-size="14" font-weight="700" fill="url(#bdShared)" text-anchor="middle">SHARED</text>
211
+ <text x="${(cx1 + cx2) / 2}" y="${cy - r + 42}" font-size="12" fill="#a855f7" text-anchor="middle">${shared.length} entities</text>
212
+ ${renderList(topShared, (cx1 + cx2) / 2, 'middle')}
213
+ <text x="40" y="${H - 12}" font-family="ui-sans-serif,system-ui,sans-serif" font-size="11" fill="#3e4762">agent-shadow-brain · brain diff</text>
214
+ </svg>`;
215
+ }
216
+ }
217
+ // ── Snapshot loader: capsule-aware, but tolerant when capsule module isn't loaded ──
218
+ async function loadFromPathOrCapsule(input) {
219
+ // Case 1: literal JSON file path on disk.
220
+ if (input.endsWith('.json') && fs.existsSync(input)) {
221
+ try {
222
+ const raw = JSON.parse(fs.readFileSync(input, 'utf-8'));
223
+ return coerceSnapshot(raw, input);
224
+ }
225
+ catch { /* fall through */ }
226
+ }
227
+ // Case 2: capsule directory or capsule id under ~/.shadow-brain/time-capsules.
228
+ const capsulePath = resolveCapsulePath(input);
229
+ if (capsulePath) {
230
+ return await loadCapsuleSnapshot(capsulePath);
231
+ }
232
+ // Case 3: input is a directory containing brain-state files (live brain root).
233
+ if (fs.existsSync(input) && fs.statSync(input).isDirectory()) {
234
+ return loadLiveBrainSnapshot(input);
235
+ }
236
+ // Empty fallback — graceful.
237
+ return { label: path.basename(input) || 'unknown', entities: [], source: input };
238
+ }
239
+ function resolveCapsulePath(input) {
240
+ if (path.isAbsolute(input) && fs.existsSync(input) && fs.existsSync(path.join(input, 'manifest.json'))) {
241
+ return input;
242
+ }
243
+ const capsuleRoot = path.join(BRAIN_ROOT, 'time-capsules');
244
+ if (!fs.existsSync(capsuleRoot))
245
+ return null;
246
+ for (const project of fs.readdirSync(capsuleRoot)) {
247
+ const projectDir = path.join(capsuleRoot, project);
248
+ if (!fs.statSync(projectDir).isDirectory())
249
+ continue;
250
+ const direct = path.join(projectDir, input.endsWith('.tcz') ? input : `${input}.tcz`);
251
+ if (fs.existsSync(direct))
252
+ return direct;
253
+ }
254
+ return null;
255
+ }
256
+ async function loadCapsuleSnapshot(capsuleDir) {
257
+ const manifestPath = path.join(capsuleDir, 'manifest.json');
258
+ if (!fs.existsSync(manifestPath))
259
+ return { label: path.basename(capsuleDir), entities: [], source: capsuleDir };
260
+ const manifest = JSON.parse(fs.readFileSync(manifestPath, 'utf-8'));
261
+ const entities = [];
262
+ for (const f of manifest.files ?? []) {
263
+ try {
264
+ const gz = fs.readFileSync(path.join(capsuleDir, 'content', f.rel + '.gz'));
265
+ const raw = zlib.gunzipSync(gz).toString('utf-8');
266
+ extractEntitiesFrom(f.rel, raw, entities);
267
+ }
268
+ catch { /* skip */ }
269
+ }
270
+ return { label: manifest.label ?? manifest.project ?? path.basename(capsuleDir), entities, source: capsuleDir };
271
+ }
272
+ function loadLiveBrainSnapshot(dir) {
273
+ const entities = [];
274
+ walkBrain(dir, dir, entities);
275
+ return { label: path.basename(dir), entities, source: dir };
276
+ }
277
+ function walkBrain(absRoot, abs, out, depth = 0) {
278
+ if (depth > 5)
279
+ return;
280
+ let stat;
281
+ try {
282
+ stat = fs.statSync(abs);
283
+ }
284
+ catch {
285
+ return;
286
+ }
287
+ if (stat.isFile() && abs.endsWith('.json')) {
288
+ try {
289
+ const raw = fs.readFileSync(abs, 'utf-8');
290
+ const rel = path.relative(absRoot, abs).replace(/\\/g, '/');
291
+ extractEntitiesFrom(rel, raw, out);
292
+ }
293
+ catch { /* skip */ }
294
+ }
295
+ else if (stat.isDirectory()) {
296
+ for (const entry of fs.readdirSync(abs)) {
297
+ if (entry.startsWith('.'))
298
+ continue;
299
+ walkBrain(absRoot, path.join(abs, entry), out, depth + 1);
300
+ }
301
+ }
302
+ }
303
+ function extractEntitiesFrom(rel, raw, out) {
304
+ try {
305
+ const parsed = JSON.parse(raw);
306
+ // Common shapes: { entries: [...] }, { memories: [...] }, [...]
307
+ const candidates = Array.isArray(parsed) ? parsed :
308
+ Array.isArray(parsed.entries) ? parsed.entries :
309
+ Array.isArray(parsed.memories) ? parsed.memories :
310
+ Array.isArray(parsed.items) ? parsed.items :
311
+ [];
312
+ for (const c of candidates) {
313
+ if (!c || typeof c !== 'object')
314
+ continue;
315
+ const rec = c;
316
+ const id = String(rec.id ?? rec.key ?? `${rel}:${out.length}`);
317
+ const content = String(rec.content ?? rec.text ?? rec.body ?? rec.summary ?? '').slice(0, 1200);
318
+ if (!content)
319
+ continue;
320
+ out.push({
321
+ id,
322
+ category: typeof rec.category === 'string' ? rec.category : (typeof rec.type === 'string' ? rec.type : undefined),
323
+ content,
324
+ importance: typeof rec.importance === 'number' ? rec.importance : undefined,
325
+ vector: Array.isArray(rec.vector) ? rec.vector : undefined,
326
+ metadata: typeof rec.metadata === 'object' && rec.metadata ? rec.metadata : undefined,
327
+ });
328
+ }
329
+ }
330
+ catch { /* skip non-JSON */ }
331
+ }
332
+ function coerceSnapshot(raw, source) {
333
+ if (!raw || typeof raw !== 'object')
334
+ return { label: path.basename(source), entities: [], source };
335
+ const rec = raw;
336
+ if (Array.isArray(rec.entities)) {
337
+ return { label: typeof rec.label === 'string' ? rec.label : path.basename(source), entities: rec.entities, source };
338
+ }
339
+ const entities = [];
340
+ extractEntitiesFrom(source, JSON.stringify(raw), entities);
341
+ return { label: path.basename(source), entities, source };
342
+ }
343
+ // ── Vector / similarity helpers ──
344
+ async function ensureVector(e) {
345
+ if (e.vector && e.vector.length)
346
+ return e.vector;
347
+ // Try embeddings module dynamically. Defensive: fall back to local hash if not loaded.
348
+ try {
349
+ const mod = await import('./embeddings.js').catch(() => null);
350
+ if (mod && typeof mod.getEmbeddings === 'function') {
351
+ const emb = mod.getEmbeddings();
352
+ const v = await emb.embed(e.content);
353
+ if (Array.isArray(v) && v.length) {
354
+ e.vector = v;
355
+ return v;
356
+ }
357
+ }
358
+ }
359
+ catch { /* fall through */ }
360
+ // Local hash vector as last resort — keeps cosine math meaningful.
361
+ e.vector = hashVector(e.content, 128);
362
+ return e.vector;
363
+ }
364
+ function hashVector(text, dim) {
365
+ const v = new Array(dim).fill(0);
366
+ const norm = text.toLowerCase().replace(/[^a-z0-9\s]/g, ' ');
367
+ const tokens = norm.split(/\s+/).filter(t => t.length > 1);
368
+ for (const t of tokens) {
369
+ let h = 2166136261;
370
+ for (let i = 0; i < t.length; i++)
371
+ h = Math.imul(h ^ t.charCodeAt(i), 16777619);
372
+ v[(h >>> 0) % dim] += 1;
373
+ }
374
+ let n = 0;
375
+ for (const x of v)
376
+ n += x * x;
377
+ n = Math.sqrt(n) || 1;
378
+ for (let i = 0; i < dim; i++)
379
+ v[i] = v[i] / n;
380
+ return v;
381
+ }
382
+ function contentSimilarity(a, b) {
383
+ // Jaccard on token sets — fast fallback.
384
+ const sa = new Set(a.toLowerCase().split(/\s+/).filter(t => t.length > 2));
385
+ const sb = new Set(b.toLowerCase().split(/\s+/).filter(t => t.length > 2));
386
+ if (sa.size === 0 && sb.size === 0)
387
+ return 1;
388
+ let inter = 0;
389
+ for (const t of sa)
390
+ if (sb.has(t))
391
+ inter++;
392
+ return inter / (sa.size + sb.size - inter || 1);
393
+ }
394
+ function sameContent(a, b) {
395
+ return a.content === b.content && (a.category ?? '') === (b.category ?? '');
396
+ }
397
+ function indexBy(items, keyFn) {
398
+ const m = new Map();
399
+ for (const it of items)
400
+ m.set(keyFn(it), it);
401
+ return m;
402
+ }
403
+ function topCategories(entities) {
404
+ const counts = new Map();
405
+ for (const e of entities) {
406
+ const c = e.category ?? 'general';
407
+ counts.set(c, (counts.get(c) ?? 0) + 1);
408
+ }
409
+ return Array.from(counts.entries()).map(([category, count]) => ({ category, count })).sort((a, b) => b.count - a.count).slice(0, 3);
410
+ }
411
+ function describeTop(top) {
412
+ if (top.length === 0)
413
+ return 'general topics';
414
+ if (top.length === 1)
415
+ return `${top[0].category} (${top[0].count})`;
416
+ return `${top[0].category} (${top[0].count})`;
417
+ }
418
+ function topEntities(entities, k) {
419
+ return [...entities]
420
+ .sort((a, b) => (b.importance ?? 0.5) - (a.importance ?? 0.5) || b.content.length - a.content.length)
421
+ .slice(0, k);
422
+ }
423
+ function shortLabel(e) {
424
+ const cat = e.category ? `[${e.category}] ` : '';
425
+ const body = e.content.replace(/\s+/g, ' ').trim();
426
+ const label = cat + (body.length > 36 ? body.slice(0, 35) + '…' : body);
427
+ return label.slice(0, 44);
428
+ }
429
+ function escapeXml(s) {
430
+ return s.replace(/[<>&"']/g, c => ({ '<': '&lt;', '>': '&gt;', '&': '&amp;', '"': '&quot;', "'": '&apos;' }[c]));
431
+ }
432
+ let _instance = null;
433
+ export function getBrainDiff() {
434
+ if (!_instance)
435
+ _instance = new BrainDiff();
436
+ return _instance;
437
+ }
438
+ export function resetBrainDiffForTests() { _instance = null; }
439
+ //# sourceMappingURL=brain-diff.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"brain-diff.js","sourceRoot":"","sources":["../../src/brain/brain-diff.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,59 @@
1
+ import { GlobalBrain } from './global-brain.js';
2
+ import { BrainReplay } from './brain-replay.js';
3
+ export interface BrainDnaStats {
4
+ topEntities: string[];
5
+ dominantPatterns: string[];
6
+ agentContributions: Array<{
7
+ agent: string;
8
+ count: number;
9
+ }>;
10
+ totalMemories: number;
11
+ totalEntities: number;
12
+ ageDays: number;
13
+ topLanguages: string[];
14
+ hallucinationsCaught: number;
15
+ archetype: ArchetypeName;
16
+ archetypeTagline: string;
17
+ cacheHitRate?: number;
18
+ decisionsRecorded: number;
19
+ collisionsDetected: number;
20
+ }
21
+ export type ArchetypeName = 'The Debugger' | 'The Architect' | 'The Speedster' | 'The Scholar' | 'The Cartographer' | 'The Diplomat' | 'The Sentinel' | 'The Wanderer';
22
+ export interface ArchetypeDef {
23
+ name: ArchetypeName;
24
+ tagline: string;
25
+ accent: string;
26
+ glyph: string;
27
+ }
28
+ export declare class BrainDna {
29
+ private brain;
30
+ private replay;
31
+ constructor(brain?: GlobalBrain, replay?: BrainReplay);
32
+ /** Generate a DNA card for a project. Returns SVG string + computed stats. */
33
+ generate(project: string, opts?: {
34
+ style?: 'card' | 'poster' | 'banner';
35
+ }): {
36
+ svg: string;
37
+ stats: BrainDnaStats;
38
+ };
39
+ /** Side-by-side comparison of two projects. */
40
+ compareCards(projectA: string, projectB: string): {
41
+ svg: string;
42
+ };
43
+ /** Names of all defined archetypes. */
44
+ topArchetypes(): string[];
45
+ /** Compute the raw stats (no rendering). Public for tooling/tests. */
46
+ computeStats(project: string): BrainDnaStats;
47
+ private safeInit;
48
+ private resolveProjectId;
49
+ private pickArchetype;
50
+ private renderCard;
51
+ private renderBanner;
52
+ private renderPoster;
53
+ private composeSideBySide;
54
+ private metricGrid;
55
+ }
56
+ export declare function rasterizeToPng(_svg: string): Promise<Buffer | null>;
57
+ export declare function getBrainDna(): BrainDna;
58
+ export declare function resetBrainDnaForTests(): void;
59
+ //# sourceMappingURL=brain-dna.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"brain-dna.d.ts","sourceRoot":"","sources":["../../src/brain/brain-dna.ts"],"names":[],"mappings":"AAYA,OAAO,EAAE,WAAW,EAAkB,MAAM,mBAAmB,CAAC;AAChE,OAAO,EAAE,WAAW,EAA+B,MAAM,mBAAmB,CAAC;AAI7E,MAAM,WAAW,aAAa;IAC5B,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,gBAAgB,EAAE,MAAM,EAAE,CAAC;IAC3B,kBAAkB,EAAE,KAAK,CAAC;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAC5D,aAAa,EAAE,MAAM,CAAC;IACtB,aAAa,EAAE,MAAM,CAAC;IACtB,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,oBAAoB,EAAE,MAAM,CAAC;IAC7B,SAAS,EAAE,aAAa,CAAC;IACzB,gBAAgB,EAAE,MAAM,CAAC;IACzB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,kBAAkB,EAAE,MAAM,CAAC;CAC5B;AAED,MAAM,MAAM,aAAa,GACrB,cAAc,GACd,eAAe,GACf,eAAe,GACf,aAAa,GACb,kBAAkB,GAClB,cAAc,GACd,cAAc,GACd,cAAc,CAAC;AAEnB,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,aAAa,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;CACf;AAeD,qBAAa,QAAQ;IACnB,OAAO,CAAC,KAAK,CAAc;IAC3B,OAAO,CAAC,MAAM,CAAc;gBAEhB,KAAK,CAAC,EAAE,WAAW,EAAE,MAAM,CAAC,EAAE,WAAW;IAKrD,8EAA8E;IAC9E,QAAQ,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,GAAE;QAAE,KAAK,CAAC,EAAE,MAAM,GAAG,QAAQ,GAAG,QAAQ,CAAA;KAAO,GAAG;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,aAAa,CAAA;KAAE;IAWrH,+CAA+C;IAC/C,YAAY,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG;QAAE,GAAG,EAAE,MAAM,CAAA;KAAE;IAQjE,uCAAuC;IACvC,aAAa,IAAI,MAAM,EAAE;IAEzB,sEAAsE;IACtE,YAAY,CAAC,OAAO,EAAE,MAAM,GAAG,aAAa;IAgF5C,OAAO,CAAC,QAAQ;IAMhB,OAAO,CAAC,gBAAgB;IAIxB,OAAO,CAAC,aAAa;IAiBrB,OAAO,CAAC,UAAU;IA8DlB,OAAO,CAAC,YAAY;IAwBpB,OAAO,CAAC,YAAY;IA+BpB,OAAO,CAAC,iBAAiB;IAmBzB,OAAO,CAAC,UAAU;CAYnB;AAkBD,wBAAsB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAOzE;AAGD,wBAAgB,WAAW,IAAI,QAAQ,CAGtC;AACD,wBAAgB,qBAAqB,IAAI,IAAI,CAAsB"}