@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,292 @@
1
+ // src/brain/brain-memory-tiers.ts — Episodic vs semantic memory split
2
+ // v6.0.2 — Hive Mind Edition
3
+ //
4
+ // Human brains separate episodic memory (what happened, when, by whom) from
5
+ // semantic memory (abstract facts distilled from many episodes). Mixing them
6
+ // poisons recall — every "I solved this last Tuesday" buries the underlying
7
+ // pattern. This module enforces the split with two append-only stores and a
8
+ // promotion path from episodic → semantic when the same fact recurs.
9
+ //
10
+ // Storage layout (under ~/.shadow-brain/memory/):
11
+ // episodic/<project>.jsonl — raw events, daily-rotated
12
+ // episodic/<project>-YYYY-MM-DD.jsonl — rotated archives
13
+ // semantic/<project>.jsonl — curated, mergeable facts
14
+ //
15
+ // Promotion criteria (ALL must hold):
16
+ // 1. accessCount >= 3 — recalled repeatedly
17
+ // 2. importance >= 0.5 — non-trivial
18
+ // 3. linked to >= 2 other memories — connected to the graph
19
+ // 4. lastAccessed within 30 days — still warm
20
+ //
21
+ // New memories always land in episodic. Promotion is explicit (callable) or
22
+ // happens lazily during read() when criteria are met.
23
+ //
24
+ // Exposed: BrainMemoryTiers, getBrainMemoryTiers(), resetBrainMemoryTiersForTests()
25
+ import * as fs from 'fs';
26
+ import * as path from 'path';
27
+ import * as os from 'os';
28
+ const STORE_DIR = path.join(os.homedir(), '.shadow-brain', 'memory');
29
+ const EPISODIC_DIR = path.join(STORE_DIR, 'episodic');
30
+ const SEMANTIC_DIR = path.join(STORE_DIR, 'semantic');
31
+ const DEFAULT_PROJECT = 'default';
32
+ const PROMOTE_MIN_ACCESS = 3;
33
+ const PROMOTE_MIN_IMPORTANCE = 0.5;
34
+ const PROMOTE_MIN_LINKS = 2;
35
+ const PROMOTE_MAX_AGE_DAYS = 30;
36
+ const MS_PER_DAY = 24 * 60 * 60 * 1000;
37
+ export class BrainMemoryTiers {
38
+ constructor() {
39
+ this.initialized = false;
40
+ }
41
+ async init() {
42
+ if (this.initialized)
43
+ return;
44
+ fs.mkdirSync(EPISODIC_DIR, { recursive: true });
45
+ fs.mkdirSync(SEMANTIC_DIR, { recursive: true });
46
+ this.initialized = true;
47
+ }
48
+ /** Write a new memory. Defaults to episodic; module picks tier if not forced. */
49
+ async write(memory) {
50
+ await this.init();
51
+ const project = sanitizeProject(memory.project);
52
+ const now = new Date().toISOString();
53
+ const entry = {
54
+ id: memory.id ?? newId('mem'),
55
+ tier: memory.tier ?? 'episodic',
56
+ content: (memory.content || '').slice(0, 8000),
57
+ project,
58
+ createdAt: now,
59
+ lastAccessed: now,
60
+ accessCount: 0,
61
+ importance: clamp01(memory.importance ?? 0.5),
62
+ sourceAgent: memory.sourceAgent || 'unknown',
63
+ entityRefs: memory.entityRefs ?? [],
64
+ embedding: memory.embedding,
65
+ relatedTo: [],
66
+ };
67
+ this.rotateIfNeeded(project);
68
+ this.appendEntry(entry);
69
+ return entry;
70
+ }
71
+ /**
72
+ * Promote an episodic memory to semantic. If criteria are not met, throws
73
+ * unless the caller already forced it (re-issued with tier='semantic').
74
+ */
75
+ async promote(memoryId) {
76
+ await this.init();
77
+ const existing = this.findById(memoryId);
78
+ if (!existing)
79
+ throw new Error(`memory ${memoryId} not found`);
80
+ if (existing.tier === 'semantic')
81
+ return existing;
82
+ if (!this.meetsPromotionCriteria(existing)) {
83
+ throw new Error(`memory ${memoryId} does not meet promotion criteria`);
84
+ }
85
+ const promoted = {
86
+ ...existing,
87
+ id: newId('sem'),
88
+ tier: 'semantic',
89
+ derivedFromMemoryIds: [...(existing.derivedFromMemoryIds ?? []), existing.id],
90
+ lastAccessed: new Date().toISOString(),
91
+ };
92
+ this.appendEntry(promoted);
93
+ return promoted;
94
+ }
95
+ /** Read memories matching the options. Lazily promotes warm episodic on access. */
96
+ async read(opts = {}) {
97
+ await this.init();
98
+ const project = sanitizeProject(opts.project);
99
+ const wantTier = opts.tier ?? 'all';
100
+ const limit = opts.limit ?? 50;
101
+ const pool = [];
102
+ if (wantTier === 'episodic' || wantTier === 'all') {
103
+ pool.push(...this.loadTier('episodic', project));
104
+ }
105
+ if (wantTier === 'semantic' || wantTier === 'all') {
106
+ pool.push(...this.loadTier('semantic', project));
107
+ }
108
+ let results = pool;
109
+ if (opts.query) {
110
+ const q = opts.query.toLowerCase();
111
+ results = pool.filter(m => m.content.toLowerCase().includes(q));
112
+ }
113
+ // Mark access on the returned slice. (Cheap rewrite of last-accessed; we
114
+ // do NOT persist accessCount mutations here because the store is append-
115
+ // only — instead, we touch a sidecar.) For now, in-process mutation.
116
+ const now = new Date().toISOString();
117
+ const touched = results.slice(0, limit).map(m => ({
118
+ ...m,
119
+ lastAccessed: now,
120
+ accessCount: m.accessCount + 1,
121
+ }));
122
+ // Lazy promotion: if an episodic entry now meets criteria, queue a write.
123
+ for (const m of touched) {
124
+ if (m.tier === 'episodic' && this.meetsPromotionCriteria(m)) {
125
+ try {
126
+ await this.promote(m.id);
127
+ }
128
+ catch { /* skip */ }
129
+ }
130
+ }
131
+ // Sort by importance desc, then recency desc
132
+ touched.sort((a, b) => (b.importance - a.importance) || b.createdAt.localeCompare(a.createdAt));
133
+ return touched;
134
+ }
135
+ stats(project) {
136
+ if (!this.initialized) {
137
+ // best-effort sync init for stats
138
+ try {
139
+ fs.mkdirSync(EPISODIC_DIR, { recursive: true });
140
+ fs.mkdirSync(SEMANTIC_DIR, { recursive: true });
141
+ }
142
+ catch { /* skip */ }
143
+ }
144
+ const proj = sanitizeProject(project);
145
+ const ep = this.loadTier('episodic', proj);
146
+ const sem = this.loadTier('semantic', proj);
147
+ const epStats = bucket(ep);
148
+ const semStats = bucket(sem);
149
+ const totalEpisodic = ep.length + sem.length;
150
+ const promotionRate = totalEpisodic > 0 ? +(sem.length / totalEpisodic).toFixed(3) : 0;
151
+ return { episodic: epStats, semantic: semStats, promotionRate };
152
+ }
153
+ // ── Internals ─────────────────────────────────────────────────────────
154
+ meetsPromotionCriteria(m) {
155
+ if (m.accessCount < PROMOTE_MIN_ACCESS)
156
+ return false;
157
+ if (m.importance < PROMOTE_MIN_IMPORTANCE)
158
+ return false;
159
+ const linkCount = (m.entityRefs?.length ?? 0) + (m.relatedTo?.length ?? 0);
160
+ if (linkCount < PROMOTE_MIN_LINKS)
161
+ return false;
162
+ const ageMs = Date.now() - Date.parse(m.lastAccessed);
163
+ if (!Number.isFinite(ageMs) || ageMs > PROMOTE_MAX_AGE_DAYS * MS_PER_DAY)
164
+ return false;
165
+ return true;
166
+ }
167
+ findById(id) {
168
+ for (const tier of ['episodic', 'semantic']) {
169
+ const dir = tier === 'episodic' ? EPISODIC_DIR : SEMANTIC_DIR;
170
+ if (!fs.existsSync(dir))
171
+ continue;
172
+ for (const file of fs.readdirSync(dir)) {
173
+ if (!file.endsWith('.jsonl'))
174
+ continue;
175
+ try {
176
+ const lines = fs.readFileSync(path.join(dir, file), 'utf-8').split('\n');
177
+ for (const line of lines) {
178
+ if (!line.trim())
179
+ continue;
180
+ try {
181
+ const obj = JSON.parse(line);
182
+ if (obj.id === id)
183
+ return obj;
184
+ }
185
+ catch { /* skip line */ }
186
+ }
187
+ }
188
+ catch { /* skip file */ }
189
+ }
190
+ }
191
+ return null;
192
+ }
193
+ loadTier(tier, project) {
194
+ const dir = tier === 'episodic' ? EPISODIC_DIR : SEMANTIC_DIR;
195
+ if (!fs.existsSync(dir))
196
+ return [];
197
+ const out = [];
198
+ const prefix = `${project}`;
199
+ for (const file of fs.readdirSync(dir)) {
200
+ if (!file.endsWith('.jsonl'))
201
+ continue;
202
+ if (!file.startsWith(prefix))
203
+ continue;
204
+ try {
205
+ const lines = fs.readFileSync(path.join(dir, file), 'utf-8').split('\n');
206
+ for (const line of lines) {
207
+ if (!line.trim())
208
+ continue;
209
+ try {
210
+ const obj = JSON.parse(line);
211
+ if (obj.project !== project)
212
+ continue;
213
+ if (obj.tier !== tier)
214
+ continue;
215
+ out.push(obj);
216
+ }
217
+ catch { /* skip bad line */ }
218
+ }
219
+ }
220
+ catch { /* skip bad file */ }
221
+ }
222
+ return out;
223
+ }
224
+ appendEntry(entry) {
225
+ const dir = entry.tier === 'episodic' ? EPISODIC_DIR : SEMANTIC_DIR;
226
+ const file = path.join(dir, `${entry.project}.jsonl`);
227
+ try {
228
+ fs.appendFileSync(file, JSON.stringify(entry) + '\n');
229
+ }
230
+ catch { /* non-fatal */ }
231
+ }
232
+ rotateIfNeeded(project) {
233
+ // Daily rotation: if today's episodic file exceeds 2MB, archive it.
234
+ const file = path.join(EPISODIC_DIR, `${project}.jsonl`);
235
+ if (!fs.existsSync(file))
236
+ return;
237
+ try {
238
+ const sz = fs.statSync(file).size;
239
+ if (sz < 2 * 1024 * 1024)
240
+ return;
241
+ const stamp = new Date().toISOString().slice(0, 10);
242
+ const dest = path.join(EPISODIC_DIR, `${project}-${stamp}.jsonl`);
243
+ if (!fs.existsSync(dest))
244
+ fs.renameSync(file, dest);
245
+ }
246
+ catch { /* skip */ }
247
+ }
248
+ }
249
+ function sanitizeProject(p) {
250
+ if (!p)
251
+ return DEFAULT_PROJECT;
252
+ return p.replace(/[^a-zA-Z0-9_-]/g, '_').slice(0, 80) || DEFAULT_PROJECT;
253
+ }
254
+ function clamp01(n) {
255
+ if (!Number.isFinite(n))
256
+ return 0;
257
+ return Math.max(0, Math.min(1, n));
258
+ }
259
+ function newId(prefix) {
260
+ const r = Math.random().toString(36).slice(2, 10);
261
+ const t = Date.now().toString(36);
262
+ return `${prefix}_${t}_${r}`;
263
+ }
264
+ function bucket(entries) {
265
+ if (entries.length === 0) {
266
+ return { count: 0, oldestAt: null, newestAt: null, avgImportance: 0 };
267
+ }
268
+ let oldest = entries[0].createdAt;
269
+ let newest = entries[0].createdAt;
270
+ let impSum = 0;
271
+ for (const e of entries) {
272
+ if (e.createdAt < oldest)
273
+ oldest = e.createdAt;
274
+ if (e.createdAt > newest)
275
+ newest = e.createdAt;
276
+ impSum += e.importance;
277
+ }
278
+ return {
279
+ count: entries.length,
280
+ oldestAt: oldest,
281
+ newestAt: newest,
282
+ avgImportance: +(impSum / entries.length).toFixed(3),
283
+ };
284
+ }
285
+ let _instance = null;
286
+ export function getBrainMemoryTiers() {
287
+ if (!_instance)
288
+ _instance = new BrainMemoryTiers();
289
+ return _instance;
290
+ }
291
+ export function resetBrainMemoryTiersForTests() { _instance = null; }
292
+ //# sourceMappingURL=brain-memory-tiers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"brain-memory-tiers.js","sourceRoot":"","sources":["../../src/brain/brain-memory-tiers.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,68 @@
1
+ export type QueryType = 'recall' | 'search' | 'dna' | 'replay' | 'archetype' | 'stats';
2
+ export type Cell = {
3
+ kind: 'markdown';
4
+ source: string;
5
+ } | {
6
+ kind: 'query';
7
+ queryType: QueryType;
8
+ source: string;
9
+ lastResult?: string;
10
+ lastRun?: string;
11
+ } | {
12
+ kind: 'code';
13
+ language: 'ts' | 'py' | 'sh';
14
+ source: string;
15
+ };
16
+ export interface NotebookMetadata {
17
+ project: string;
18
+ created: string;
19
+ modified: string;
20
+ brain_version: string;
21
+ }
22
+ export interface Notebook {
23
+ title: string;
24
+ cells: Cell[];
25
+ metadata: NotebookMetadata;
26
+ }
27
+ export interface NotebookRunResult {
28
+ cells: Array<{
29
+ index: number;
30
+ kind: Cell['kind'];
31
+ result?: string;
32
+ durationMs?: number;
33
+ error?: string;
34
+ }>;
35
+ totalDurationMs: number;
36
+ ranAt: string;
37
+ }
38
+ export declare class BrainNotebook {
39
+ /** Create a starter notebook on disk and return its path. */
40
+ createNotebook(project: string, title: string): Promise<{
41
+ path: string;
42
+ }>;
43
+ /** Parse a notebook from disk. */
44
+ parse(filePath: string): Promise<Notebook>;
45
+ /** Parse a notebook from a raw string (useful for tests). */
46
+ parseString(raw: string, source?: string): Notebook;
47
+ /** Run a single cell. Markdown cells are no-ops; code cells echo with a TODO. */
48
+ runCell(notebook: Notebook, cellIndex: number): Promise<{
49
+ result: string;
50
+ durationMs: number;
51
+ }>;
52
+ /** Run every query cell in order. */
53
+ runAll(notebook: Notebook): Promise<NotebookRunResult>;
54
+ /** Write the notebook back to disk with the latest run results inlined. */
55
+ save(notebook: Notebook, filePath: string): Promise<void>;
56
+ /** Render the notebook as a plain Markdown document. */
57
+ toMarkdown(notebook: Notebook): string;
58
+ private executeQuery;
59
+ private runRecall;
60
+ private runDna;
61
+ private runReplay;
62
+ private runArchetype;
63
+ private runStats;
64
+ private fallbackResult;
65
+ }
66
+ export declare function getBrainNotebook(): BrainNotebook;
67
+ export declare function resetBrainNotebookForTests(): void;
68
+ //# sourceMappingURL=brain-notebook.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"brain-notebook.d.ts","sourceRoot":"","sources":["../../src/brain/brain-notebook.ts"],"names":[],"mappings":"AAiBA,MAAM,MAAM,SAAS,GAAG,QAAQ,GAAG,QAAQ,GAAG,KAAK,GAAG,QAAQ,GAAG,WAAW,GAAG,OAAO,CAAC;AAEvF,MAAM,MAAM,IAAI,GACZ;IAAE,IAAI,EAAE,UAAU,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GACpC;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,SAAS,EAAE,SAAS,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAA;CAAE,GAC9F;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC;AAEnE,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,aAAa,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,QAAQ;IACvB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,IAAI,EAAE,CAAC;IACd,QAAQ,EAAE,gBAAgB,CAAC;CAC5B;AAED,MAAM,WAAW,iBAAiB;IAChC,KAAK,EAAE,KAAK,CAAC;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAC;QAAC,UAAU,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAC1G,eAAe,EAAE,MAAM,CAAC;IACxB,KAAK,EAAE,MAAM,CAAC;CACf;AAED,qBAAa,aAAa;IACxB,6DAA6D;IACvD,cAAc,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC;IAgB/E,kCAAkC;IAC5B,KAAK,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,CAAC;IAKhD,6DAA6D;IAC7D,WAAW,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,SAAY,GAAG,QAAQ;IA2GtD,iFAAiF;IAC3E,OAAO,CAAC,QAAQ,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAA;KAAE,CAAC;IAkBrG,qCAAqC;IAC/B,MAAM,CAAC,QAAQ,EAAE,QAAQ,GAAG,OAAO,CAAC,iBAAiB,CAAC;IAmB5D,2EAA2E;IACrE,IAAI,CAAC,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAQ/D,wDAAwD;IACxD,UAAU,CAAC,QAAQ,EAAE,QAAQ,GAAG,MAAM;YA2BxB,YAAY;YAyBZ,SAAS;YAiBT,MAAM;YAUN,SAAS;YAUT,YAAY;YAUZ,QAAQ;IAUtB,OAAO,CAAC,cAAc;CAGvB;AA6DD,wBAAgB,gBAAgB,IAAI,aAAa,CAGhD;AACD,wBAAgB,0BAA0B,IAAI,IAAI,CAAsB"}