@theihtisham/agent-shadow-brain 6.0.0 → 6.0.3

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 (191) hide show
  1. package/CHANGELOG.md +372 -0
  2. package/README.md +366 -355
  3. package/dist/brain/auto-update.js +1 -1
  4. package/dist/brain/brain-3d.d.ts +79 -0
  5. package/dist/brain/brain-3d.d.ts.map +1 -0
  6. package/dist/brain/brain-3d.js +468 -0
  7. package/dist/brain/brain-3d.js.map +1 -0
  8. package/dist/brain/brain-active-learner.d.ts +74 -0
  9. package/dist/brain/brain-active-learner.d.ts.map +1 -0
  10. package/dist/brain/brain-active-learner.js +425 -0
  11. package/dist/brain/brain-active-learner.js.map +1 -0
  12. package/dist/brain/brain-ascii.d.ts +32 -0
  13. package/dist/brain/brain-ascii.d.ts.map +1 -0
  14. package/dist/brain/brain-ascii.js +402 -0
  15. package/dist/brain/brain-ascii.js.map +1 -0
  16. package/dist/brain/brain-cinema.d.ts +45 -0
  17. package/dist/brain/brain-cinema.d.ts.map +1 -0
  18. package/dist/brain/brain-cinema.js +393 -0
  19. package/dist/brain/brain-cinema.js.map +1 -0
  20. package/dist/brain/brain-coach.d.ts +45 -0
  21. package/dist/brain/brain-coach.d.ts.map +1 -0
  22. package/dist/brain/brain-coach.js +383 -0
  23. package/dist/brain/brain-coach.js.map +1 -0
  24. package/dist/brain/brain-consolidator.d.ts +56 -0
  25. package/dist/brain/brain-consolidator.d.ts.map +1 -0
  26. package/dist/brain/brain-consolidator.js +386 -0
  27. package/dist/brain/brain-consolidator.js.map +1 -0
  28. package/dist/brain/brain-contradictions.d.ts +57 -0
  29. package/dist/brain/brain-contradictions.d.ts.map +1 -0
  30. package/dist/brain/brain-contradictions.js +443 -0
  31. package/dist/brain/brain-contradictions.js.map +1 -0
  32. package/dist/brain/brain-diff.d.ts +61 -0
  33. package/dist/brain/brain-diff.d.ts.map +1 -0
  34. package/dist/brain/brain-diff.js +439 -0
  35. package/dist/brain/brain-diff.js.map +1 -0
  36. package/dist/brain/brain-dna.d.ts +59 -0
  37. package/dist/brain/brain-dna.d.ts.map +1 -0
  38. package/dist/brain/brain-dna.js +336 -0
  39. package/dist/brain/brain-dna.js.map +1 -0
  40. package/dist/brain/brain-doppelganger.d.ts +32 -0
  41. package/dist/brain/brain-doppelganger.d.ts.map +1 -0
  42. package/dist/brain/brain-doppelganger.js +417 -0
  43. package/dist/brain/brain-doppelganger.js.map +1 -0
  44. package/dist/brain/brain-graph-walker.d.ts +54 -0
  45. package/dist/brain/brain-graph-walker.d.ts.map +1 -0
  46. package/dist/brain/brain-graph-walker.js +412 -0
  47. package/dist/brain/brain-graph-walker.js.map +1 -0
  48. package/dist/brain/brain-holiday-card.d.ts +50 -0
  49. package/dist/brain/brain-holiday-card.d.ts.map +1 -0
  50. package/dist/brain/brain-holiday-card.js +432 -0
  51. package/dist/brain/brain-holiday-card.js.map +1 -0
  52. package/dist/brain/brain-memes.d.ts +44 -0
  53. package/dist/brain/brain-memes.d.ts.map +1 -0
  54. package/dist/brain/brain-memes.js +438 -0
  55. package/dist/brain/brain-memes.js.map +1 -0
  56. package/dist/brain/brain-memory-tiers.d.ts +67 -0
  57. package/dist/brain/brain-memory-tiers.d.ts.map +1 -0
  58. package/dist/brain/brain-memory-tiers.js +292 -0
  59. package/dist/brain/brain-memory-tiers.js.map +1 -0
  60. package/dist/brain/brain-notebook.d.ts +68 -0
  61. package/dist/brain/brain-notebook.d.ts.map +1 -0
  62. package/dist/brain/brain-notebook.js +379 -0
  63. package/dist/brain/brain-notebook.js.map +1 -0
  64. package/dist/brain/brain-portability.js +3 -3
  65. package/dist/brain/brain-portability.js.map +1 -1
  66. package/dist/brain/brain-quantize.d.ts +62 -0
  67. package/dist/brain/brain-quantize.d.ts.map +1 -0
  68. package/dist/brain/brain-quantize.js +346 -0
  69. package/dist/brain/brain-quantize.js.map +1 -0
  70. package/dist/brain/brain-query-expander.d.ts +31 -0
  71. package/dist/brain/brain-query-expander.d.ts.map +1 -0
  72. package/dist/brain/brain-query-expander.js +417 -0
  73. package/dist/brain/brain-query-expander.js.map +1 -0
  74. package/dist/brain/brain-quest.d.ts +58 -0
  75. package/dist/brain/brain-quest.d.ts.map +1 -0
  76. package/dist/brain/brain-quest.js +541 -0
  77. package/dist/brain/brain-quest.js.map +1 -0
  78. package/dist/brain/brain-recall-cache.d.ts +73 -0
  79. package/dist/brain/brain-recall-cache.d.ts.map +1 -0
  80. package/dist/brain/brain-recall-cache.js +444 -0
  81. package/dist/brain/brain-recall-cache.js.map +1 -0
  82. package/dist/brain/brain-reflex.d.ts +55 -0
  83. package/dist/brain/brain-reflex.d.ts.map +1 -0
  84. package/dist/brain/brain-reflex.js +364 -0
  85. package/dist/brain/brain-reflex.js.map +1 -0
  86. package/dist/brain/brain-replay.d.ts +74 -0
  87. package/dist/brain/brain-replay.d.ts.map +1 -0
  88. package/dist/brain/brain-replay.js +336 -0
  89. package/dist/brain/brain-replay.js.map +1 -0
  90. package/dist/brain/brain-rerank.d.ts +39 -0
  91. package/dist/brain/brain-rerank.d.ts.map +1 -0
  92. package/dist/brain/brain-rerank.js +216 -0
  93. package/dist/brain/brain-rerank.js.map +1 -0
  94. package/dist/brain/brain-roast.d.ts +44 -0
  95. package/dist/brain/brain-roast.d.ts.map +1 -0
  96. package/dist/brain/brain-roast.js +566 -0
  97. package/dist/brain/brain-roast.js.map +1 -0
  98. package/dist/brain/brain-sonification.d.ts +57 -0
  99. package/dist/brain/brain-sonification.d.ts.map +1 -0
  100. package/dist/brain/brain-sonification.js +286 -0
  101. package/dist/brain/brain-sonification.js.map +1 -0
  102. package/dist/brain/brain-tarot.d.ts +49 -0
  103. package/dist/brain/brain-tarot.d.ts.map +1 -0
  104. package/dist/brain/brain-tarot.js +634 -0
  105. package/dist/brain/brain-tarot.js.map +1 -0
  106. package/dist/brain/brain-time-capsule.d.ts +80 -0
  107. package/dist/brain/brain-time-capsule.d.ts.map +1 -0
  108. package/dist/brain/brain-time-capsule.js +289 -0
  109. package/dist/brain/brain-time-capsule.js.map +1 -0
  110. package/dist/brain/brain-trophies.d.ts +60 -0
  111. package/dist/brain/brain-trophies.d.ts.map +1 -0
  112. package/dist/brain/brain-trophies.js +431 -0
  113. package/dist/brain/brain-trophies.js.map +1 -0
  114. package/dist/brain/brain-working-memory.d.ts +78 -0
  115. package/dist/brain/brain-working-memory.d.ts.map +1 -0
  116. package/dist/brain/brain-working-memory.js +367 -0
  117. package/dist/brain/brain-working-memory.js.map +1 -0
  118. package/dist/brain/confidence-gate.d.ts +69 -0
  119. package/dist/brain/confidence-gate.d.ts.map +1 -0
  120. package/dist/brain/confidence-gate.js +244 -0
  121. package/dist/brain/confidence-gate.js.map +1 -0
  122. package/dist/brain/constitution.d.ts +59 -0
  123. package/dist/brain/constitution.d.ts.map +1 -0
  124. package/dist/brain/constitution.js +315 -0
  125. package/dist/brain/constitution.js.map +1 -0
  126. package/dist/brain/context-continuity.d.ts +78 -0
  127. package/dist/brain/context-continuity.d.ts.map +1 -0
  128. package/dist/brain/context-continuity.js +341 -0
  129. package/dist/brain/context-continuity.js.map +1 -0
  130. package/dist/brain/embeddings-v2.d.ts +58 -0
  131. package/dist/brain/embeddings-v2.d.ts.map +1 -0
  132. package/dist/brain/embeddings-v2.js +344 -0
  133. package/dist/brain/embeddings-v2.js.map +1 -0
  134. package/dist/brain/global-brain.d.ts.map +1 -1
  135. package/dist/brain/global-brain.js +35 -9
  136. package/dist/brain/global-brain.js.map +1 -1
  137. package/dist/brain/hive-voice.d.ts +71 -0
  138. package/dist/brain/hive-voice.d.ts.map +1 -0
  139. package/dist/brain/hive-voice.js +352 -0
  140. package/dist/brain/hive-voice.js.map +1 -0
  141. package/dist/brain/live-brain.d.ts +119 -0
  142. package/dist/brain/live-brain.d.ts.map +1 -0
  143. package/dist/brain/live-brain.js +405 -0
  144. package/dist/brain/live-brain.js.map +1 -0
  145. package/dist/brain/markdown-export.d.ts +48 -0
  146. package/dist/brain/markdown-export.d.ts.map +1 -0
  147. package/dist/brain/markdown-export.js +382 -0
  148. package/dist/brain/markdown-export.js.map +1 -0
  149. package/dist/brain/mcp-server.d.ts +4 -0
  150. package/dist/brain/mcp-server.d.ts.map +1 -1
  151. package/dist/brain/mcp-server.js +81 -5
  152. package/dist/brain/mcp-server.js.map +1 -1
  153. package/dist/brain/memory-seeder.d.ts +78 -0
  154. package/dist/brain/memory-seeder.d.ts.map +1 -0
  155. package/dist/brain/memory-seeder.js +326 -0
  156. package/dist/brain/memory-seeder.js.map +1 -0
  157. package/dist/brain/multimodal-vision.d.ts +38 -0
  158. package/dist/brain/multimodal-vision.d.ts.map +1 -0
  159. package/dist/brain/multimodal-vision.js +257 -0
  160. package/dist/brain/multimodal-vision.js.map +1 -0
  161. package/dist/brain/orchestrator.js +1 -1
  162. package/dist/brain/otel-lite.d.ts +71 -0
  163. package/dist/brain/otel-lite.d.ts.map +1 -0
  164. package/dist/brain/otel-lite.js +232 -0
  165. package/dist/brain/otel-lite.js.map +1 -0
  166. package/dist/brain/token-economy.d.ts +2 -0
  167. package/dist/brain/token-economy.d.ts.map +1 -1
  168. package/dist/brain/token-economy.js +80 -24
  169. package/dist/brain/token-economy.js.map +1 -1
  170. package/dist/cli.js +1120 -32
  171. package/dist/cli.js.map +1 -1
  172. package/dist/dashboard/server.d.ts +5 -0
  173. package/dist/dashboard/server.d.ts.map +1 -1
  174. package/dist/dashboard/server.js +355 -2
  175. package/dist/dashboard/server.js.map +1 -1
  176. package/dist/dashboard/v6-dashboard-html.d.ts +1 -1
  177. package/dist/dashboard/v6-dashboard-html.d.ts.map +1 -1
  178. package/dist/dashboard/v6-dashboard-html.js +755 -85
  179. package/dist/dashboard/v6-dashboard-html.js.map +1 -1
  180. package/dist/index.d.ts +4 -0
  181. package/dist/index.d.ts.map +1 -1
  182. package/dist/index.js +4 -0
  183. package/dist/index.js.map +1 -1
  184. package/dist/types.d.ts +17 -12
  185. package/dist/types.d.ts.map +1 -1
  186. package/docs/launch/README.md +61 -0
  187. package/docs/launch/RELEASE_CHECKLIST_v6.0.3.md +102 -0
  188. package/docs/launch/RELEASE_NOTES_v6.0.3.md +111 -0
  189. package/package.json +25 -13
  190. package/tools/export-resume-pack.mjs +56 -0
  191. package/tools/record-global-memory.mjs +72 -0
@@ -0,0 +1,412 @@
1
+ // src/brain/brain-graph-walker.ts — Multi-hop entity graph traversal
2
+ // v6.0.2 — Hive Mind Edition
3
+ //
4
+ // Single-vector ANN gets you memories that are semantically NEAR the query,
5
+ // but it misses memories that are RELATED but worded differently. Walking
6
+ // the entity graph 2-3 hops bridges that gap: from a seed memory, we follow
7
+ // 5 edge types (similarity, causal, temporal, agent-handoff, co-occurrence)
8
+ // with priority-queue BFS and per-hop score decay so close hits keep their
9
+ // weight and distant hits fade gracefully.
10
+ //
11
+ // Edges (constructed online, lazily per edge type):
12
+ // - similarity : cosine ≥ 0.5 via embeddings-v2 (top-5 neighbors)
13
+ // - causal : dynamic-import causal-chains.ts, walk parents+children
14
+ // - temporal : memories in same project within 1 hour of each other
15
+ // - agent-handoff : memories created by sub-agent that inherited from parent
16
+ // - co-occurrence : shared entity references in metadata.entities[]
17
+ //
18
+ // Algorithm: priority-queue BFS. For each pop, expand by every enabled edge
19
+ // type, attach edges, push unseen targets with score *= decay. Stop at
20
+ // maxNodes (default 50) or maxHops (default 3). Final score per node is the
21
+ // max over all arrival paths so the most direct route wins.
22
+ //
23
+ // Convenience: relevantToQuery(query) embeds the query, picks top-3 ANN seeds,
24
+ // then walks. Used by the dashboard's "What does X relate to?" panel.
25
+ //
26
+ // Exposed: BrainGraphWalker, getBrainGraphWalker(), reset…ForTests().
27
+ import { getGlobalBrain } from './global-brain.js';
28
+ const DEFAULT_MAX_HOPS = 3;
29
+ const DEFAULT_MAX_NODES = 50;
30
+ const DEFAULT_DECAY = 0.7;
31
+ const SIMILARITY_THRESHOLD = 0.5;
32
+ const SIMILARITY_TOP_K = 5;
33
+ const TEMPORAL_WINDOW_MS = 60 * 60 * 1000; // 1 hour
34
+ const ALL_EDGE_TYPES = [
35
+ 'similarity', 'causal', 'temporal', 'agent-handoff', 'co-occurrence',
36
+ ];
37
+ export class BrainGraphWalker {
38
+ constructor(brain) {
39
+ this.memoryCache = null;
40
+ this.brain = brain ?? getGlobalBrain();
41
+ }
42
+ /** Walk the graph starting from seedMemoryIds. */
43
+ async walk(seedMemoryIds, opts = {}) {
44
+ const startedAt = Date.now();
45
+ await this.brain.init();
46
+ this.memoryCache = null;
47
+ const maxHops = opts.maxHops ?? DEFAULT_MAX_HOPS;
48
+ const maxNodes = opts.maxNodes ?? DEFAULT_MAX_NODES;
49
+ const decay = clamp(opts.scoreDecayPerHop ?? DEFAULT_DECAY, 0.05, 1);
50
+ const edgeTypes = (opts.edgeTypes && opts.edgeTypes.length > 0)
51
+ ? Array.from(new Set(opts.edgeTypes))
52
+ : Array.from(ALL_EDGE_TYPES);
53
+ const memById = this.memories();
54
+ const validSeeds = seedMemoryIds.filter(id => memById.has(id));
55
+ if (validSeeds.length === 0) {
56
+ return emptyResult(seedMemoryIds, Date.now() - startedAt);
57
+ }
58
+ const nodes = new Map();
59
+ const frontier = validSeeds.map(id => ({
60
+ memoryId: id, hops: 0, score: 1, parent: null, parentEdge: null,
61
+ }));
62
+ const seedSet = new Set(validSeeds);
63
+ while (frontier.length > 0 && nodes.size < maxNodes) {
64
+ // Priority by score (max-heap via sort — corpus is small)
65
+ frontier.sort((a, b) => b.score - a.score);
66
+ const cur = frontier.shift();
67
+ const existing = nodes.get(cur.memoryId);
68
+ if (!existing) {
69
+ nodes.set(cur.memoryId, {
70
+ ref: {
71
+ memoryId: cur.memoryId,
72
+ hopsFromSeed: cur.hops,
73
+ scoreFromSeed: cur.score,
74
+ edgesIn: cur.parent && cur.parentEdge
75
+ ? [{ from: cur.parent, type: cur.parentEdge, weight: cur.score }]
76
+ : [],
77
+ },
78
+ bestParent: cur.parent,
79
+ bestParentEdge: cur.parentEdge,
80
+ });
81
+ }
82
+ else {
83
+ // Update if we found a higher-scoring arrival
84
+ if (cur.score > existing.ref.scoreFromSeed) {
85
+ existing.ref.scoreFromSeed = cur.score;
86
+ existing.ref.hopsFromSeed = cur.hops;
87
+ existing.bestParent = cur.parent;
88
+ existing.bestParentEdge = cur.parentEdge;
89
+ }
90
+ if (cur.parent && cur.parentEdge) {
91
+ const dup = existing.ref.edgesIn.find(e => e.from === cur.parent && e.type === cur.parentEdge);
92
+ if (!dup)
93
+ existing.ref.edgesIn.push({ from: cur.parent, type: cur.parentEdge, weight: cur.score });
94
+ }
95
+ continue; // already expanded
96
+ }
97
+ if (cur.hops >= maxHops)
98
+ continue;
99
+ for (const et of edgeTypes) {
100
+ const neighbors = await this.edgesFrom(cur.memoryId, et);
101
+ for (const n of neighbors) {
102
+ if (n.targetId === cur.memoryId)
103
+ continue;
104
+ const nextScore = cur.score * decay * Math.min(1, n.weight);
105
+ frontier.push({
106
+ memoryId: n.targetId,
107
+ hops: cur.hops + 1,
108
+ score: nextScore,
109
+ parent: cur.memoryId,
110
+ parentEdge: et,
111
+ });
112
+ }
113
+ }
114
+ }
115
+ const visited = Array.from(nodes.values()).map(n => n.ref);
116
+ visited.sort((a, b) => b.scoreFromSeed - a.scoreFromSeed);
117
+ const paths = buildPaths(nodes, seedSet);
118
+ const histogram = histogramByHops(visited, maxHops);
119
+ return {
120
+ seeds: validSeeds,
121
+ visited,
122
+ paths,
123
+ durationMs: Date.now() - startedAt,
124
+ hopHistogram: histogram,
125
+ };
126
+ }
127
+ /** Embed the query, pick the top-3 ANN seeds, then walk. */
128
+ async relevantToQuery(query, opts = {}) {
129
+ const startedAt = Date.now();
130
+ let seedIds = [];
131
+ try {
132
+ const v2 = (await import('./embeddings-v2.js')).getEmbeddingsV2();
133
+ const hits = await v2.search(query, 3);
134
+ seedIds = hits.map(h => h.id);
135
+ }
136
+ catch {
137
+ seedIds = [];
138
+ }
139
+ if (seedIds.length === 0) {
140
+ // Fallback: rank memories by keyword overlap with the query
141
+ const memories = Array.from(this.memories().values());
142
+ const qTokens = tokenize(query);
143
+ if (qTokens.size === 0)
144
+ return emptyResult([], Date.now() - startedAt);
145
+ const scored = memories.map(m => ({ id: m.id, score: keywordOverlap(qTokens, m.content) }));
146
+ scored.sort((a, b) => b.score - a.score);
147
+ seedIds = scored.slice(0, 3).filter(s => s.score > 0).map(s => s.id);
148
+ }
149
+ return this.walk(seedIds, opts);
150
+ }
151
+ // ── Edges ──────────────────────────────────────────────────────────────
152
+ async edgesFrom(memoryId, type) {
153
+ const all = this.memories();
154
+ const me = all.get(memoryId);
155
+ if (!me)
156
+ return [];
157
+ if (type === 'similarity')
158
+ return this.similarityEdges(me);
159
+ if (type === 'causal')
160
+ return this.causalEdges(memoryId);
161
+ if (type === 'temporal')
162
+ return this.temporalEdges(me, all);
163
+ if (type === 'agent-handoff')
164
+ return this.handoffEdges(me, all);
165
+ if (type === 'co-occurrence')
166
+ return this.coOccurrenceEdges(me, all);
167
+ return [];
168
+ }
169
+ async similarityEdges(me) {
170
+ try {
171
+ const v2 = (await import('./embeddings-v2.js')).getEmbeddingsV2();
172
+ const hits = await v2.search(me.content, SIMILARITY_TOP_K + 1);
173
+ const out = [];
174
+ for (const h of hits) {
175
+ if (h.id === me.id)
176
+ continue;
177
+ if (h.score < SIMILARITY_THRESHOLD)
178
+ continue;
179
+ out.push({ targetId: h.id, weight: h.score });
180
+ if (out.length >= SIMILARITY_TOP_K)
181
+ break;
182
+ }
183
+ return out;
184
+ }
185
+ catch {
186
+ return [];
187
+ }
188
+ }
189
+ async causalEdges(memoryId) {
190
+ try {
191
+ const mod = await import('./causal-chains.js');
192
+ const cc = mod.getCausalChains
193
+ ? (mod.getCausalChains())
194
+ : new mod.CausalChains();
195
+ const trace = await cc.trace(memoryId, { maxDepth: 1 });
196
+ const inflow = await cc.influence(memoryId, { maxDepth: 1 });
197
+ const out = [];
198
+ for (const link of trace.links) {
199
+ const other = link.effectId === memoryId ? link.causeId : link.effectId;
200
+ if (other !== memoryId)
201
+ out.push({ targetId: other, weight: link.strength });
202
+ }
203
+ for (const link of inflow.links) {
204
+ const other = link.causeId === memoryId ? link.effectId : link.causeId;
205
+ if (other !== memoryId)
206
+ out.push({ targetId: other, weight: link.strength });
207
+ }
208
+ return dedupeEdges(out);
209
+ }
210
+ catch {
211
+ return [];
212
+ }
213
+ }
214
+ temporalEdges(me, all) {
215
+ const out = [];
216
+ const t0 = me.createdAt.getTime();
217
+ for (const other of all.values()) {
218
+ if (other.id === me.id)
219
+ continue;
220
+ if (other.projectId !== me.projectId)
221
+ continue;
222
+ const dt = Math.abs(other.createdAt.getTime() - t0);
223
+ if (dt <= TEMPORAL_WINDOW_MS) {
224
+ const weight = 1 - dt / TEMPORAL_WINDOW_MS;
225
+ out.push({ targetId: other.id, weight: Math.max(0.1, weight) });
226
+ }
227
+ }
228
+ // Keep the strongest 8 temporal neighbors per node
229
+ out.sort((a, b) => b.weight - a.weight);
230
+ return out.slice(0, 8);
231
+ }
232
+ handoffEdges(me, all) {
233
+ const out = [];
234
+ const meta = (me.metadata ?? {});
235
+ const parentId = meta.handoffOf;
236
+ if (parentId && all.has(parentId))
237
+ out.push({ targetId: parentId, weight: 0.9 });
238
+ // Find children: any memory whose metadata.handoffOf === me.id
239
+ for (const other of all.values()) {
240
+ if (other.id === me.id)
241
+ continue;
242
+ const om = (other.metadata ?? {});
243
+ if (om.handoffOf === me.id)
244
+ out.push({ targetId: other.id, weight: 0.9 });
245
+ }
246
+ // Same-project agent transitions in close temporal window
247
+ const myAgent = me.agentTool;
248
+ const t0 = me.createdAt.getTime();
249
+ for (const other of all.values()) {
250
+ if (other.id === me.id)
251
+ continue;
252
+ if (other.projectId !== me.projectId)
253
+ continue;
254
+ if (other.agentTool === myAgent)
255
+ continue;
256
+ const dt = Math.abs(other.createdAt.getTime() - t0);
257
+ if (dt <= TEMPORAL_WINDOW_MS / 2)
258
+ out.push({ targetId: other.id, weight: 0.5 });
259
+ }
260
+ return dedupeEdges(out).slice(0, 6);
261
+ }
262
+ coOccurrenceEdges(me, all) {
263
+ const meta = (me.metadata ?? {});
264
+ const myEntities = collectEntities(meta);
265
+ if (myEntities.size === 0)
266
+ return [];
267
+ const out = [];
268
+ for (const other of all.values()) {
269
+ if (other.id === me.id)
270
+ continue;
271
+ const otherEntities = collectEntities((other.metadata ?? {}));
272
+ if (otherEntities.size === 0)
273
+ continue;
274
+ let shared = 0;
275
+ const smaller = myEntities.size <= otherEntities.size ? myEntities : otherEntities;
276
+ const larger = myEntities.size <= otherEntities.size ? otherEntities : myEntities;
277
+ for (const e of smaller)
278
+ if (larger.has(e))
279
+ shared++;
280
+ if (shared === 0)
281
+ continue;
282
+ const denom = myEntities.size + otherEntities.size - shared;
283
+ const weight = denom > 0 ? shared / denom : 0;
284
+ if (weight > 0)
285
+ out.push({ targetId: other.id, weight: Math.min(1, weight) });
286
+ }
287
+ out.sort((a, b) => b.weight - a.weight);
288
+ return out.slice(0, 6);
289
+ }
290
+ // ── Memory access ──────────────────────────────────────────────────────
291
+ memories() {
292
+ if (this.memoryCache)
293
+ return this.memoryCache;
294
+ const internal = this.brain.entries;
295
+ if (internal) {
296
+ this.memoryCache = internal;
297
+ return internal;
298
+ }
299
+ // Fallback: pull via public recall
300
+ const list = this.brain.recall({ limit: 10000 });
301
+ const map = new Map();
302
+ for (const m of list)
303
+ map.set(m.id, m);
304
+ this.memoryCache = map;
305
+ return map;
306
+ }
307
+ }
308
+ // ── Pure helpers ──────────────────────────────────────────────────────────
309
+ function emptyResult(seeds, durationMs) {
310
+ return { seeds, visited: [], paths: [], durationMs, hopHistogram: [0] };
311
+ }
312
+ function dedupeEdges(edges) {
313
+ const best = new Map();
314
+ for (const e of edges) {
315
+ const prev = best.get(e.targetId);
316
+ if (prev === undefined || e.weight > prev)
317
+ best.set(e.targetId, e.weight);
318
+ }
319
+ return Array.from(best.entries()).map(([targetId, weight]) => ({ targetId, weight }));
320
+ }
321
+ function collectEntities(meta) {
322
+ const out = new Set();
323
+ const arr = meta.entities;
324
+ if (Array.isArray(arr)) {
325
+ for (const x of arr) {
326
+ if (typeof x === 'string' && x.length > 1)
327
+ out.add(x.toLowerCase());
328
+ else if (x && typeof x === 'object' && typeof x.name === 'string') {
329
+ out.add((x.name).toLowerCase());
330
+ }
331
+ }
332
+ }
333
+ else if (typeof arr === 'string') {
334
+ for (const t of arr.split(/[,;\s]+/))
335
+ if (t.length > 1)
336
+ out.add(t.toLowerCase());
337
+ }
338
+ return out;
339
+ }
340
+ function clamp(n, lo, hi) {
341
+ if (!Number.isFinite(n))
342
+ return lo;
343
+ return Math.max(lo, Math.min(hi, n));
344
+ }
345
+ function tokenize(text) {
346
+ return new Set((text || '').toLowerCase().split(/[^a-z0-9]+/).filter(t => t.length > 2));
347
+ }
348
+ function keywordOverlap(qTokens, text) {
349
+ if (qTokens.size === 0)
350
+ return 0;
351
+ const t = tokenize(text);
352
+ if (t.size === 0)
353
+ return 0;
354
+ let inter = 0;
355
+ for (const q of qTokens)
356
+ if (t.has(q))
357
+ inter++;
358
+ return inter / Math.max(1, qTokens.size);
359
+ }
360
+ function histogramByHops(nodes, maxHops) {
361
+ const buckets = new Array(maxHops + 1).fill(0);
362
+ for (const n of nodes) {
363
+ const idx = Math.min(n.hopsFromSeed, maxHops);
364
+ buckets[idx]++;
365
+ }
366
+ return buckets;
367
+ }
368
+ function buildPaths(nodes, seeds) {
369
+ const paths = [];
370
+ for (const node of nodes.values()) {
371
+ if (seeds.has(node.ref.memoryId))
372
+ continue;
373
+ const path = reconstructPath(nodes, node.ref.memoryId, seeds);
374
+ if (!path)
375
+ continue;
376
+ paths.push(path);
377
+ }
378
+ paths.sort((a, b) => b.totalScore - a.totalScore);
379
+ return paths;
380
+ }
381
+ function reconstructPath(nodes, target, seeds) {
382
+ const hops = [];
383
+ let cur = target;
384
+ const guard = new Set();
385
+ while (cur && !seeds.has(cur)) {
386
+ if (guard.has(cur))
387
+ return null; // cycle protection
388
+ guard.add(cur);
389
+ const node = nodes.get(cur);
390
+ if (!node || !node.bestParent || !node.bestParentEdge)
391
+ return null;
392
+ hops.unshift({ memoryId: cur, edgeType: node.bestParentEdge });
393
+ cur = node.bestParent;
394
+ }
395
+ if (!cur)
396
+ return null;
397
+ const targetNode = nodes.get(target);
398
+ return {
399
+ seed: cur,
400
+ target,
401
+ hops,
402
+ totalScore: targetNode?.ref.scoreFromSeed ?? 0,
403
+ };
404
+ }
405
+ let _instance = null;
406
+ export function getBrainGraphWalker() {
407
+ if (!_instance)
408
+ _instance = new BrainGraphWalker();
409
+ return _instance;
410
+ }
411
+ export function resetBrainGraphWalkerForTests() { _instance = null; }
412
+ //# sourceMappingURL=brain-graph-walker.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"brain-graph-walker.js","sourceRoot":"","sources":["../../src/brain/brain-graph-walker.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,50 @@
1
+ import { GlobalBrain } from './global-brain.js';
2
+ import { BrainReplay } from './brain-replay.js';
3
+ import { BrainDna, ArchetypeName } from './brain-dna.js';
4
+ export type HolidayStyle = 'wrapped' | 'classic' | 'minimalist';
5
+ export interface HolidayManifest {
6
+ year: number;
7
+ totalEvents: number;
8
+ topMonth: string;
9
+ topAgent: string;
10
+ topMemoryType: string;
11
+ longestStreak: number;
12
+ archetypeEvolution: Array<{
13
+ month: string;
14
+ archetype: ArchetypeName;
15
+ }>;
16
+ biggestMilestone: string;
17
+ hours_saved_estimate: number;
18
+ top_quote: string;
19
+ }
20
+ export interface HolidayResult {
21
+ svg: string;
22
+ manifest: HolidayManifest;
23
+ }
24
+ export declare class BrainHolidayCard {
25
+ private brain;
26
+ private replay;
27
+ private dna;
28
+ constructor(brain?: GlobalBrain, replay?: BrainReplay, dna?: BrainDna);
29
+ /** Generate a year-in-review card. Returns SVG + the underlying manifest. */
30
+ generate(project: string, opts?: {
31
+ year?: number;
32
+ style?: HolidayStyle;
33
+ }): Promise<HolidayResult>;
34
+ /** Pure manifest (no rendering). Useful for tests/tooling. */
35
+ computeManifest(project: string, year: number): HolidayManifest;
36
+ private memoryTypeOf;
37
+ private archetypeFromEvent;
38
+ private computeLongestStreak;
39
+ private pickBiggestMilestone;
40
+ private pickTopQuote;
41
+ private persist;
42
+ private render;
43
+ private renderHeatmap;
44
+ private renderArchetypeTimeline;
45
+ private renderTypePie;
46
+ private renderEmpty;
47
+ }
48
+ export declare function getBrainHolidayCard(): BrainHolidayCard;
49
+ export declare function resetBrainHolidayCardForTests(): void;
50
+ //# sourceMappingURL=brain-holiday-card.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"brain-holiday-card.d.ts","sourceRoot":"","sources":["../../src/brain/brain-holiday-card.ts"],"names":[],"mappings":"AAcA,OAAO,EAAE,WAAW,EAAkB,MAAM,mBAAmB,CAAC;AAChE,OAAO,EAAE,WAAW,EAA+B,MAAM,mBAAmB,CAAC;AAC7E,OAAO,EAAE,QAAQ,EAAe,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAMtE,MAAM,MAAM,YAAY,GAAG,SAAS,GAAG,SAAS,GAAG,YAAY,CAAC;AAEhE,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,aAAa,EAAE,MAAM,CAAC;IACtB,aAAa,EAAE,MAAM,CAAC;IACtB,kBAAkB,EAAE,KAAK,CAAC;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,aAAa,CAAA;KAAE,CAAC,CAAC;IACvE,gBAAgB,EAAE,MAAM,CAAC;IACzB,oBAAoB,EAAE,MAAM,CAAC;IAC7B,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,aAAa;IAC5B,GAAG,EAAE,MAAM,CAAC;IACZ,QAAQ,EAAE,eAAe,CAAC;CAC3B;AAaD,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,KAAK,CAAc;IAC3B,OAAO,CAAC,MAAM,CAAc;IAC5B,OAAO,CAAC,GAAG,CAAW;gBAEV,KAAK,CAAC,EAAE,WAAW,EAAE,MAAM,CAAC,EAAE,WAAW,EAAE,GAAG,CAAC,EAAE,QAAQ;IAOrE,6EAA6E;IACvE,QAAQ,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,GAAE;QAAE,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,YAAY,CAAA;KAAO,GAAG,OAAO,CAAC,aAAa,CAAC;IAW3G,8DAA8D;IAC9D,eAAe,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,eAAe;IAmE/D,OAAO,CAAC,YAAY;IAKpB,OAAO,CAAC,kBAAkB;IAU1B,OAAO,CAAC,oBAAoB;IAc5B,OAAO,CAAC,oBAAoB;IAW5B,OAAO,CAAC,YAAY;IAyBpB,OAAO,CAAC,OAAO;IASf,OAAO,CAAC,MAAM;IAwFd,OAAO,CAAC,aAAa;IA+BrB,OAAO,CAAC,uBAAuB;IAuB/B,OAAO,CAAC,aAAa;IAwCrB,OAAO,CAAC,WAAW;CAkBpB;AAwBD,wBAAgB,mBAAmB,IAAI,gBAAgB,CAGtD;AACD,wBAAgB,6BAA6B,IAAI,IAAI,CAAsB"}