@theihtisham/agent-shadow-brain 5.2.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 (301) hide show
  1. package/README.md +310 -1014
  2. package/dist/brain/agent-firewall.d.ts +7 -0
  3. package/dist/brain/agent-firewall.d.ts.map +1 -0
  4. package/dist/brain/agent-firewall.js +152 -0
  5. package/dist/brain/agent-firewall.js.map +1 -0
  6. package/dist/brain/agent-handoff.d.ts +19 -0
  7. package/dist/brain/agent-handoff.d.ts.map +1 -0
  8. package/dist/brain/agent-handoff.js +127 -0
  9. package/dist/brain/agent-handoff.js.map +1 -0
  10. package/dist/brain/air-gap.d.ts +23 -0
  11. package/dist/brain/air-gap.d.ts.map +1 -0
  12. package/dist/brain/air-gap.js +137 -0
  13. package/dist/brain/air-gap.js.map +1 -0
  14. package/dist/brain/attention-heatmap.d.ts +24 -0
  15. package/dist/brain/attention-heatmap.d.ts.map +1 -0
  16. package/dist/brain/attention-heatmap.js +108 -0
  17. package/dist/brain/attention-heatmap.js.map +1 -0
  18. package/dist/brain/auto-setup.js +19 -14
  19. package/dist/brain/auto-setup.js.map +1 -1
  20. package/dist/brain/auto-update.js +1 -1
  21. package/dist/brain/brain-3d.d.ts +79 -0
  22. package/dist/brain/brain-3d.d.ts.map +1 -0
  23. package/dist/brain/brain-3d.js +468 -0
  24. package/dist/brain/brain-3d.js.map +1 -0
  25. package/dist/brain/brain-active-learner.d.ts +74 -0
  26. package/dist/brain/brain-active-learner.d.ts.map +1 -0
  27. package/dist/brain/brain-active-learner.js +425 -0
  28. package/dist/brain/brain-active-learner.js.map +1 -0
  29. package/dist/brain/brain-ascii.d.ts +32 -0
  30. package/dist/brain/brain-ascii.d.ts.map +1 -0
  31. package/dist/brain/brain-ascii.js +402 -0
  32. package/dist/brain/brain-ascii.js.map +1 -0
  33. package/dist/brain/brain-chat.d.ts +42 -0
  34. package/dist/brain/brain-chat.d.ts.map +1 -0
  35. package/dist/brain/brain-chat.js +162 -0
  36. package/dist/brain/brain-chat.js.map +1 -0
  37. package/dist/brain/brain-cinema.d.ts +45 -0
  38. package/dist/brain/brain-cinema.d.ts.map +1 -0
  39. package/dist/brain/brain-cinema.js +393 -0
  40. package/dist/brain/brain-cinema.js.map +1 -0
  41. package/dist/brain/brain-coach.d.ts +45 -0
  42. package/dist/brain/brain-coach.d.ts.map +1 -0
  43. package/dist/brain/brain-coach.js +383 -0
  44. package/dist/brain/brain-coach.js.map +1 -0
  45. package/dist/brain/brain-consolidator.d.ts +56 -0
  46. package/dist/brain/brain-consolidator.d.ts.map +1 -0
  47. package/dist/brain/brain-consolidator.js +386 -0
  48. package/dist/brain/brain-consolidator.js.map +1 -0
  49. package/dist/brain/brain-contradictions.d.ts +57 -0
  50. package/dist/brain/brain-contradictions.d.ts.map +1 -0
  51. package/dist/brain/brain-contradictions.js +443 -0
  52. package/dist/brain/brain-contradictions.js.map +1 -0
  53. package/dist/brain/brain-diff.d.ts +61 -0
  54. package/dist/brain/brain-diff.d.ts.map +1 -0
  55. package/dist/brain/brain-diff.js +439 -0
  56. package/dist/brain/brain-diff.js.map +1 -0
  57. package/dist/brain/brain-dna.d.ts +59 -0
  58. package/dist/brain/brain-dna.d.ts.map +1 -0
  59. package/dist/brain/brain-dna.js +336 -0
  60. package/dist/brain/brain-dna.js.map +1 -0
  61. package/dist/brain/brain-doppelganger.d.ts +32 -0
  62. package/dist/brain/brain-doppelganger.d.ts.map +1 -0
  63. package/dist/brain/brain-doppelganger.js +417 -0
  64. package/dist/brain/brain-doppelganger.js.map +1 -0
  65. package/dist/brain/brain-encryption.d.ts +14 -0
  66. package/dist/brain/brain-encryption.d.ts.map +1 -0
  67. package/dist/brain/brain-encryption.js +68 -0
  68. package/dist/brain/brain-encryption.js.map +1 -0
  69. package/dist/brain/brain-exchange.d.ts +30 -0
  70. package/dist/brain/brain-exchange.d.ts.map +1 -0
  71. package/dist/brain/brain-exchange.js +106 -0
  72. package/dist/brain/brain-exchange.js.map +1 -0
  73. package/dist/brain/brain-garden.d.ts +18 -0
  74. package/dist/brain/brain-garden.d.ts.map +1 -0
  75. package/dist/brain/brain-garden.js +81 -0
  76. package/dist/brain/brain-garden.js.map +1 -0
  77. package/dist/brain/brain-graph-walker.d.ts +54 -0
  78. package/dist/brain/brain-graph-walker.d.ts.map +1 -0
  79. package/dist/brain/brain-graph-walker.js +412 -0
  80. package/dist/brain/brain-graph-walker.js.map +1 -0
  81. package/dist/brain/brain-holiday-card.d.ts +50 -0
  82. package/dist/brain/brain-holiday-card.d.ts.map +1 -0
  83. package/dist/brain/brain-holiday-card.js +432 -0
  84. package/dist/brain/brain-holiday-card.js.map +1 -0
  85. package/dist/brain/brain-memes.d.ts +44 -0
  86. package/dist/brain/brain-memes.d.ts.map +1 -0
  87. package/dist/brain/brain-memes.js +438 -0
  88. package/dist/brain/brain-memes.js.map +1 -0
  89. package/dist/brain/brain-memory-tiers.d.ts +67 -0
  90. package/dist/brain/brain-memory-tiers.d.ts.map +1 -0
  91. package/dist/brain/brain-memory-tiers.js +292 -0
  92. package/dist/brain/brain-memory-tiers.js.map +1 -0
  93. package/dist/brain/brain-notebook.d.ts +68 -0
  94. package/dist/brain/brain-notebook.d.ts.map +1 -0
  95. package/dist/brain/brain-notebook.js +379 -0
  96. package/dist/brain/brain-notebook.js.map +1 -0
  97. package/dist/brain/brain-portability.js +1 -1
  98. package/dist/brain/brain-quantize.d.ts +62 -0
  99. package/dist/brain/brain-quantize.d.ts.map +1 -0
  100. package/dist/brain/brain-quantize.js +346 -0
  101. package/dist/brain/brain-quantize.js.map +1 -0
  102. package/dist/brain/brain-query-expander.d.ts +31 -0
  103. package/dist/brain/brain-query-expander.d.ts.map +1 -0
  104. package/dist/brain/brain-query-expander.js +417 -0
  105. package/dist/brain/brain-query-expander.js.map +1 -0
  106. package/dist/brain/brain-quest.d.ts +58 -0
  107. package/dist/brain/brain-quest.d.ts.map +1 -0
  108. package/dist/brain/brain-quest.js +541 -0
  109. package/dist/brain/brain-quest.js.map +1 -0
  110. package/dist/brain/brain-recall-cache.d.ts +73 -0
  111. package/dist/brain/brain-recall-cache.d.ts.map +1 -0
  112. package/dist/brain/brain-recall-cache.js +444 -0
  113. package/dist/brain/brain-recall-cache.js.map +1 -0
  114. package/dist/brain/brain-reflex.d.ts +55 -0
  115. package/dist/brain/brain-reflex.d.ts.map +1 -0
  116. package/dist/brain/brain-reflex.js +364 -0
  117. package/dist/brain/brain-reflex.js.map +1 -0
  118. package/dist/brain/brain-replay.d.ts +74 -0
  119. package/dist/brain/brain-replay.d.ts.map +1 -0
  120. package/dist/brain/brain-replay.js +336 -0
  121. package/dist/brain/brain-replay.js.map +1 -0
  122. package/dist/brain/brain-rerank.d.ts +39 -0
  123. package/dist/brain/brain-rerank.d.ts.map +1 -0
  124. package/dist/brain/brain-rerank.js +216 -0
  125. package/dist/brain/brain-rerank.js.map +1 -0
  126. package/dist/brain/brain-roast.d.ts +44 -0
  127. package/dist/brain/brain-roast.d.ts.map +1 -0
  128. package/dist/brain/brain-roast.js +566 -0
  129. package/dist/brain/brain-roast.js.map +1 -0
  130. package/dist/brain/brain-sonification.d.ts +57 -0
  131. package/dist/brain/brain-sonification.d.ts.map +1 -0
  132. package/dist/brain/brain-sonification.js +286 -0
  133. package/dist/brain/brain-sonification.js.map +1 -0
  134. package/dist/brain/brain-tarot.d.ts +49 -0
  135. package/dist/brain/brain-tarot.d.ts.map +1 -0
  136. package/dist/brain/brain-tarot.js +634 -0
  137. package/dist/brain/brain-tarot.js.map +1 -0
  138. package/dist/brain/brain-time-capsule.d.ts +80 -0
  139. package/dist/brain/brain-time-capsule.d.ts.map +1 -0
  140. package/dist/brain/brain-time-capsule.js +289 -0
  141. package/dist/brain/brain-time-capsule.js.map +1 -0
  142. package/dist/brain/brain-trophies.d.ts +60 -0
  143. package/dist/brain/brain-trophies.d.ts.map +1 -0
  144. package/dist/brain/brain-trophies.js +431 -0
  145. package/dist/brain/brain-trophies.js.map +1 -0
  146. package/dist/brain/brain-working-memory.d.ts +78 -0
  147. package/dist/brain/brain-working-memory.d.ts.map +1 -0
  148. package/dist/brain/brain-working-memory.js +367 -0
  149. package/dist/brain/brain-working-memory.js.map +1 -0
  150. package/dist/brain/branch-brain.d.ts +23 -0
  151. package/dist/brain/branch-brain.d.ts.map +1 -0
  152. package/dist/brain/branch-brain.js +159 -0
  153. package/dist/brain/branch-brain.js.map +1 -0
  154. package/dist/brain/calibration-monitor.d.ts +20 -0
  155. package/dist/brain/calibration-monitor.d.ts.map +1 -0
  156. package/dist/brain/calibration-monitor.js +144 -0
  157. package/dist/brain/calibration-monitor.js.map +1 -0
  158. package/dist/brain/causal-chains.d.ts +37 -0
  159. package/dist/brain/causal-chains.d.ts.map +1 -0
  160. package/dist/brain/causal-chains.js +250 -0
  161. package/dist/brain/causal-chains.js.map +1 -0
  162. package/dist/brain/collision-detective.d.ts +32 -0
  163. package/dist/brain/collision-detective.d.ts.map +1 -0
  164. package/dist/brain/collision-detective.js +233 -0
  165. package/dist/brain/collision-detective.js.map +1 -0
  166. package/dist/brain/confidence-gate.d.ts +69 -0
  167. package/dist/brain/confidence-gate.d.ts.map +1 -0
  168. package/dist/brain/confidence-gate.js +244 -0
  169. package/dist/brain/confidence-gate.js.map +1 -0
  170. package/dist/brain/constitution.d.ts +59 -0
  171. package/dist/brain/constitution.d.ts.map +1 -0
  172. package/dist/brain/constitution.js +315 -0
  173. package/dist/brain/constitution.js.map +1 -0
  174. package/dist/brain/cost-aware-spawner.d.ts +7 -0
  175. package/dist/brain/cost-aware-spawner.d.ts.map +1 -0
  176. package/dist/brain/cost-aware-spawner.js +77 -0
  177. package/dist/brain/cost-aware-spawner.js.map +1 -0
  178. package/dist/brain/dream-engine.d.ts +35 -0
  179. package/dist/brain/dream-engine.d.ts.map +1 -0
  180. package/dist/brain/dream-engine.js +273 -0
  181. package/dist/brain/dream-engine.js.map +1 -0
  182. package/dist/brain/embeddings-v2.d.ts +58 -0
  183. package/dist/brain/embeddings-v2.d.ts.map +1 -0
  184. package/dist/brain/embeddings-v2.js +344 -0
  185. package/dist/brain/embeddings-v2.js.map +1 -0
  186. package/dist/brain/embeddings.d.ts +27 -0
  187. package/dist/brain/embeddings.d.ts.map +1 -0
  188. package/dist/brain/embeddings.js +175 -0
  189. package/dist/brain/embeddings.js.map +1 -0
  190. package/dist/brain/forgetting-curve.d.ts +21 -0
  191. package/dist/brain/forgetting-curve.d.ts.map +1 -0
  192. package/dist/brain/forgetting-curve.js +174 -0
  193. package/dist/brain/forgetting-curve.js.map +1 -0
  194. package/dist/brain/formal-verification-bridge.d.ts +26 -0
  195. package/dist/brain/formal-verification-bridge.d.ts.map +1 -0
  196. package/dist/brain/formal-verification-bridge.js +219 -0
  197. package/dist/brain/formal-verification-bridge.js.map +1 -0
  198. package/dist/brain/global-brain.d.ts +8 -1
  199. package/dist/brain/global-brain.d.ts.map +1 -1
  200. package/dist/brain/global-brain.js +24 -0
  201. package/dist/brain/global-brain.js.map +1 -1
  202. package/dist/brain/hallucination-quarantine.d.ts +26 -0
  203. package/dist/brain/hallucination-quarantine.d.ts.map +1 -0
  204. package/dist/brain/hallucination-quarantine.js +135 -0
  205. package/dist/brain/hallucination-quarantine.js.map +1 -0
  206. package/dist/brain/hive-accelerator.d.ts +39 -0
  207. package/dist/brain/hive-accelerator.d.ts.map +1 -0
  208. package/dist/brain/hive-accelerator.js +152 -0
  209. package/dist/brain/hive-accelerator.js.map +1 -0
  210. package/dist/brain/hive-voice.d.ts +71 -0
  211. package/dist/brain/hive-voice.d.ts.map +1 -0
  212. package/dist/brain/hive-voice.js +352 -0
  213. package/dist/brain/hive-voice.js.map +1 -0
  214. package/dist/brain/json-output.d.ts +26 -0
  215. package/dist/brain/json-output.d.ts.map +1 -0
  216. package/dist/brain/json-output.js +112 -0
  217. package/dist/brain/json-output.js.map +1 -0
  218. package/dist/brain/l0-cache.js +1 -1
  219. package/dist/brain/l0-cache.js.map +1 -1
  220. package/dist/brain/local-llm.d.ts +20 -0
  221. package/dist/brain/local-llm.d.ts.map +1 -0
  222. package/dist/brain/local-llm.js +132 -0
  223. package/dist/brain/local-llm.js.map +1 -0
  224. package/dist/brain/markdown-export.d.ts +48 -0
  225. package/dist/brain/markdown-export.d.ts.map +1 -0
  226. package/dist/brain/markdown-export.js +382 -0
  227. package/dist/brain/markdown-export.js.map +1 -0
  228. package/dist/brain/mcp-server.d.ts +40 -0
  229. package/dist/brain/mcp-server.d.ts.map +1 -1
  230. package/dist/brain/mcp-server.js +395 -12
  231. package/dist/brain/mcp-server.js.map +1 -1
  232. package/dist/brain/model-registry.d.ts +96 -0
  233. package/dist/brain/model-registry.d.ts.map +1 -0
  234. package/dist/brain/model-registry.js +585 -0
  235. package/dist/brain/model-registry.js.map +1 -0
  236. package/dist/brain/multimodal-vision.d.ts +38 -0
  237. package/dist/brain/multimodal-vision.d.ts.map +1 -0
  238. package/dist/brain/multimodal-vision.js +257 -0
  239. package/dist/brain/multimodal-vision.js.map +1 -0
  240. package/dist/brain/orchestrator.js +1 -1
  241. package/dist/brain/otel-lite.d.ts +71 -0
  242. package/dist/brain/otel-lite.d.ts.map +1 -0
  243. package/dist/brain/otel-lite.js +232 -0
  244. package/dist/brain/otel-lite.js.map +1 -0
  245. package/dist/brain/pr-auto-review.d.ts +17 -0
  246. package/dist/brain/pr-auto-review.d.ts.map +1 -0
  247. package/dist/brain/pr-auto-review.js +73 -0
  248. package/dist/brain/pr-auto-review.js.map +1 -0
  249. package/dist/brain/pre-mortem.d.ts +21 -0
  250. package/dist/brain/pre-mortem.d.ts.map +1 -0
  251. package/dist/brain/pre-mortem.js +210 -0
  252. package/dist/brain/pre-mortem.js.map +1 -0
  253. package/dist/brain/prompt-cache.d.ts +54 -0
  254. package/dist/brain/prompt-cache.d.ts.map +1 -0
  255. package/dist/brain/prompt-cache.js +105 -0
  256. package/dist/brain/prompt-cache.js.map +1 -0
  257. package/dist/brain/reputation-ledger.d.ts +42 -0
  258. package/dist/brain/reputation-ledger.d.ts.map +1 -0
  259. package/dist/brain/reputation-ledger.js +326 -0
  260. package/dist/brain/reputation-ledger.js.map +1 -0
  261. package/dist/brain/session-hooks.d.ts +19 -0
  262. package/dist/brain/session-hooks.d.ts.map +1 -1
  263. package/dist/brain/session-hooks.js +249 -18
  264. package/dist/brain/session-hooks.js.map +1 -1
  265. package/dist/brain/subagent-bridge.d.ts +46 -0
  266. package/dist/brain/subagent-bridge.d.ts.map +1 -0
  267. package/dist/brain/subagent-bridge.js +364 -0
  268. package/dist/brain/subagent-bridge.js.map +1 -0
  269. package/dist/brain/swarm-debate.d.ts +22 -0
  270. package/dist/brain/swarm-debate.d.ts.map +1 -0
  271. package/dist/brain/swarm-debate.js +134 -0
  272. package/dist/brain/swarm-debate.js.map +1 -0
  273. package/dist/brain/team-brain-sync.d.ts +22 -0
  274. package/dist/brain/team-brain-sync.d.ts.map +1 -0
  275. package/dist/brain/team-brain-sync.js +132 -0
  276. package/dist/brain/team-brain-sync.js.map +1 -0
  277. package/dist/brain/token-economy.d.ts +25 -0
  278. package/dist/brain/token-economy.d.ts.map +1 -0
  279. package/dist/brain/token-economy.js +216 -0
  280. package/dist/brain/token-economy.js.map +1 -0
  281. package/dist/brain/voice-mode.d.ts +15 -0
  282. package/dist/brain/voice-mode.d.ts.map +1 -0
  283. package/dist/brain/voice-mode.js +97 -0
  284. package/dist/brain/voice-mode.js.map +1 -0
  285. package/dist/cli.js +1702 -4
  286. package/dist/cli.js.map +1 -1
  287. package/dist/dashboard/server.d.ts +6 -0
  288. package/dist/dashboard/server.d.ts.map +1 -1
  289. package/dist/dashboard/server.js +1118 -368
  290. package/dist/dashboard/server.js.map +1 -1
  291. package/dist/dashboard/v6-dashboard-html.d.ts +2 -0
  292. package/dist/dashboard/v6-dashboard-html.d.ts.map +1 -0
  293. package/dist/dashboard/v6-dashboard-html.js +2474 -0
  294. package/dist/dashboard/v6-dashboard-html.js.map +1 -0
  295. package/dist/index.d.ts +27 -0
  296. package/dist/index.d.ts.map +1 -1
  297. package/dist/index.js +29 -1
  298. package/dist/index.js.map +1 -1
  299. package/dist/types.d.ts +518 -2
  300. package/dist/types.d.ts.map +1 -1
  301. package/package.json +33 -4
@@ -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"}