shieldcortex 2.0.0

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 (377) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +282 -0
  3. package/dashboard/components.json +22 -0
  4. package/dashboard/eslint.config.mjs +42 -0
  5. package/dashboard/next.config.ts +7 -0
  6. package/dashboard/package-lock.json +8053 -0
  7. package/dashboard/package.json +44 -0
  8. package/dashboard/postcss.config.mjs +7 -0
  9. package/dashboard/public/file.svg +1 -0
  10. package/dashboard/public/globe.svg +1 -0
  11. package/dashboard/public/next.svg +1 -0
  12. package/dashboard/public/vercel.svg +1 -0
  13. package/dashboard/public/window.svg +1 -0
  14. package/dashboard/scripts/ensure-api.mjs +76 -0
  15. package/dashboard/src/app/error.tsx +49 -0
  16. package/dashboard/src/app/favicon.ico +0 -0
  17. package/dashboard/src/app/globals.css +130 -0
  18. package/dashboard/src/app/layout.tsx +35 -0
  19. package/dashboard/src/app/page.tsx +364 -0
  20. package/dashboard/src/components/Providers.tsx +27 -0
  21. package/dashboard/src/components/brain/ActivityPulseSystem.tsx +229 -0
  22. package/dashboard/src/components/brain/BrainMesh.tsx +133 -0
  23. package/dashboard/src/components/brain/BrainRegions.tsx +254 -0
  24. package/dashboard/src/components/brain/BrainScene.tsx +255 -0
  25. package/dashboard/src/components/brain/CategoryLabels.tsx +103 -0
  26. package/dashboard/src/components/brain/CoreSphere.tsx +215 -0
  27. package/dashboard/src/components/brain/DataFlowParticles.tsx +123 -0
  28. package/dashboard/src/components/brain/DataStreamRings.tsx +161 -0
  29. package/dashboard/src/components/brain/ElectronFlow.tsx +323 -0
  30. package/dashboard/src/components/brain/HolographicGrid.tsx +235 -0
  31. package/dashboard/src/components/brain/MemoryLinks.tsx +271 -0
  32. package/dashboard/src/components/brain/MemoryNode.tsx +245 -0
  33. package/dashboard/src/components/brain/NeuralPathways.tsx +441 -0
  34. package/dashboard/src/components/brain/SynapseNodes.tsx +312 -0
  35. package/dashboard/src/components/brain/TimelineControls.tsx +205 -0
  36. package/dashboard/src/components/chip/ChipScene.tsx +497 -0
  37. package/dashboard/src/components/chip/ChipSubstrate.tsx +238 -0
  38. package/dashboard/src/components/chip/CortexCore.tsx +210 -0
  39. package/dashboard/src/components/chip/DataBus.tsx +416 -0
  40. package/dashboard/src/components/chip/MemoryCell.tsx +225 -0
  41. package/dashboard/src/components/chip/MemoryGrid.tsx +328 -0
  42. package/dashboard/src/components/chip/QuantumCell.tsx +316 -0
  43. package/dashboard/src/components/chip/SectionLabel.tsx +113 -0
  44. package/dashboard/src/components/chip/index.ts +14 -0
  45. package/dashboard/src/components/controls/ControlPanel.tsx +106 -0
  46. package/dashboard/src/components/controls/VersionPanel.tsx +185 -0
  47. package/dashboard/src/components/dashboard/StatsPanel.tsx +164 -0
  48. package/dashboard/src/components/debug/ActivityLog.tsx +250 -0
  49. package/dashboard/src/components/debug/DebugPanel.tsx +101 -0
  50. package/dashboard/src/components/debug/QueryTester.tsx +192 -0
  51. package/dashboard/src/components/debug/RelationshipGraph.tsx +403 -0
  52. package/dashboard/src/components/debug/SqlConsole.tsx +319 -0
  53. package/dashboard/src/components/graph/KnowledgeGraph.tsx +230 -0
  54. package/dashboard/src/components/graph/OntologyGraph.tsx +631 -0
  55. package/dashboard/src/components/insights/ActivityHeatmap.tsx +131 -0
  56. package/dashboard/src/components/insights/InsightsView.tsx +46 -0
  57. package/dashboard/src/components/insights/KnowledgeMapPanel.tsx +80 -0
  58. package/dashboard/src/components/insights/QualityPanel.tsx +116 -0
  59. package/dashboard/src/components/memories/MemoriesView.tsx +150 -0
  60. package/dashboard/src/components/memories/MemoryCard.tsx +103 -0
  61. package/dashboard/src/components/memory/MemoryDetail.tsx +325 -0
  62. package/dashboard/src/components/nav/NavRail.tsx +54 -0
  63. package/dashboard/src/components/ui/button.tsx +62 -0
  64. package/dashboard/src/components/ui/card.tsx +92 -0
  65. package/dashboard/src/components/ui/input.tsx +21 -0
  66. package/dashboard/src/hooks/useDebouncedValue.ts +24 -0
  67. package/dashboard/src/hooks/useMemories.ts +458 -0
  68. package/dashboard/src/hooks/useSuggestions.ts +46 -0
  69. package/dashboard/src/lib/category-colors.ts +84 -0
  70. package/dashboard/src/lib/position-algorithm.ts +177 -0
  71. package/dashboard/src/lib/simplex-noise.ts +217 -0
  72. package/dashboard/src/lib/store.ts +88 -0
  73. package/dashboard/src/lib/utils.ts +6 -0
  74. package/dashboard/src/lib/websocket.ts +249 -0
  75. package/dashboard/src/types/memory.ts +73 -0
  76. package/dashboard/tsconfig.json +34 -0
  77. package/dist/__tests__/consolidation-merge.test.d.ts +9 -0
  78. package/dist/__tests__/consolidation-merge.test.d.ts.map +1 -0
  79. package/dist/__tests__/consolidation-merge.test.js +137 -0
  80. package/dist/__tests__/consolidation-merge.test.js.map +1 -0
  81. package/dist/__tests__/contradictions.test.d.ts +8 -0
  82. package/dist/__tests__/contradictions.test.d.ts.map +1 -0
  83. package/dist/__tests__/contradictions.test.js +78 -0
  84. package/dist/__tests__/contradictions.test.js.map +1 -0
  85. package/dist/__tests__/salience-evolution.test.d.ts +7 -0
  86. package/dist/__tests__/salience-evolution.test.d.ts.map +1 -0
  87. package/dist/__tests__/salience-evolution.test.js +151 -0
  88. package/dist/__tests__/salience-evolution.test.js.map +1 -0
  89. package/dist/__tests__/store.test.d.ts +7 -0
  90. package/dist/__tests__/store.test.d.ts.map +1 -0
  91. package/dist/__tests__/store.test.js +582 -0
  92. package/dist/__tests__/store.test.js.map +1 -0
  93. package/dist/api/control.d.ts +27 -0
  94. package/dist/api/control.d.ts.map +1 -0
  95. package/dist/api/control.js +60 -0
  96. package/dist/api/control.js.map +1 -0
  97. package/dist/api/events.d.ts +159 -0
  98. package/dist/api/events.d.ts.map +1 -0
  99. package/dist/api/events.js +155 -0
  100. package/dist/api/events.js.map +1 -0
  101. package/dist/api/version.d.ts +36 -0
  102. package/dist/api/version.d.ts.map +1 -0
  103. package/dist/api/version.js +146 -0
  104. package/dist/api/version.js.map +1 -0
  105. package/dist/api/visualization-server.d.ts +11 -0
  106. package/dist/api/visualization-server.d.ts.map +1 -0
  107. package/dist/api/visualization-server.js +1186 -0
  108. package/dist/api/visualization-server.js.map +1 -0
  109. package/dist/context/project-context.d.ts +57 -0
  110. package/dist/context/project-context.d.ts.map +1 -0
  111. package/dist/context/project-context.js +135 -0
  112. package/dist/context/project-context.js.map +1 -0
  113. package/dist/database/init.d.ts +49 -0
  114. package/dist/database/init.d.ts.map +1 -0
  115. package/dist/database/init.js +567 -0
  116. package/dist/database/init.js.map +1 -0
  117. package/dist/defence/__tests__/firewall.test.d.ts +8 -0
  118. package/dist/defence/__tests__/firewall.test.d.ts.map +1 -0
  119. package/dist/defence/__tests__/firewall.test.js +123 -0
  120. package/dist/defence/__tests__/firewall.test.js.map +1 -0
  121. package/dist/defence/__tests__/fragmentation.test.d.ts +7 -0
  122. package/dist/defence/__tests__/fragmentation.test.d.ts.map +1 -0
  123. package/dist/defence/__tests__/fragmentation.test.js +51 -0
  124. package/dist/defence/__tests__/fragmentation.test.js.map +1 -0
  125. package/dist/defence/__tests__/pipeline.test.d.ts +8 -0
  126. package/dist/defence/__tests__/pipeline.test.d.ts.map +1 -0
  127. package/dist/defence/__tests__/pipeline.test.js +61 -0
  128. package/dist/defence/__tests__/pipeline.test.js.map +1 -0
  129. package/dist/defence/__tests__/sensitivity.test.d.ts +7 -0
  130. package/dist/defence/__tests__/sensitivity.test.d.ts.map +1 -0
  131. package/dist/defence/__tests__/sensitivity.test.js +61 -0
  132. package/dist/defence/__tests__/sensitivity.test.js.map +1 -0
  133. package/dist/defence/__tests__/trust.test.d.ts +7 -0
  134. package/dist/defence/__tests__/trust.test.d.ts.map +1 -0
  135. package/dist/defence/__tests__/trust.test.js +49 -0
  136. package/dist/defence/__tests__/trust.test.js.map +1 -0
  137. package/dist/defence/audit/index.d.ts +4 -0
  138. package/dist/defence/audit/index.d.ts.map +1 -0
  139. package/dist/defence/audit/index.js +3 -0
  140. package/dist/defence/audit/index.js.map +1 -0
  141. package/dist/defence/audit/logger.d.ts +14 -0
  142. package/dist/defence/audit/logger.d.ts.map +1 -0
  143. package/dist/defence/audit/logger.js +54 -0
  144. package/dist/defence/audit/logger.js.map +1 -0
  145. package/dist/defence/audit/queries.d.ts +33 -0
  146. package/dist/defence/audit/queries.d.ts.map +1 -0
  147. package/dist/defence/audit/queries.js +103 -0
  148. package/dist/defence/audit/queries.js.map +1 -0
  149. package/dist/defence/firewall/anomaly-scorer.d.ts +8 -0
  150. package/dist/defence/firewall/anomaly-scorer.d.ts.map +1 -0
  151. package/dist/defence/firewall/anomaly-scorer.js +58 -0
  152. package/dist/defence/firewall/anomaly-scorer.js.map +1 -0
  153. package/dist/defence/firewall/encoding-detector.d.ts +13 -0
  154. package/dist/defence/firewall/encoding-detector.d.ts.map +1 -0
  155. package/dist/defence/firewall/encoding-detector.js +120 -0
  156. package/dist/defence/firewall/encoding-detector.js.map +1 -0
  157. package/dist/defence/firewall/index.d.ts +21 -0
  158. package/dist/defence/firewall/index.d.ts.map +1 -0
  159. package/dist/defence/firewall/index.js +133 -0
  160. package/dist/defence/firewall/index.js.map +1 -0
  161. package/dist/defence/firewall/instruction-detector.d.ts +12 -0
  162. package/dist/defence/firewall/instruction-detector.d.ts.map +1 -0
  163. package/dist/defence/firewall/instruction-detector.js +99 -0
  164. package/dist/defence/firewall/instruction-detector.js.map +1 -0
  165. package/dist/defence/firewall/privilege-detector.d.ts +13 -0
  166. package/dist/defence/firewall/privilege-detector.d.ts.map +1 -0
  167. package/dist/defence/firewall/privilege-detector.js +89 -0
  168. package/dist/defence/firewall/privilege-detector.js.map +1 -0
  169. package/dist/defence/fragmentation/assembly-detector.d.ts +18 -0
  170. package/dist/defence/fragmentation/assembly-detector.d.ts.map +1 -0
  171. package/dist/defence/fragmentation/assembly-detector.js +72 -0
  172. package/dist/defence/fragmentation/assembly-detector.js.map +1 -0
  173. package/dist/defence/fragmentation/entity-extractor.d.ts +19 -0
  174. package/dist/defence/fragmentation/entity-extractor.d.ts.map +1 -0
  175. package/dist/defence/fragmentation/entity-extractor.js +86 -0
  176. package/dist/defence/fragmentation/entity-extractor.js.map +1 -0
  177. package/dist/defence/fragmentation/index.d.ts +23 -0
  178. package/dist/defence/fragmentation/index.d.ts.map +1 -0
  179. package/dist/defence/fragmentation/index.js +49 -0
  180. package/dist/defence/fragmentation/index.js.map +1 -0
  181. package/dist/defence/fragmentation/temporal-analyzer.d.ts +28 -0
  182. package/dist/defence/fragmentation/temporal-analyzer.d.ts.map +1 -0
  183. package/dist/defence/fragmentation/temporal-analyzer.js +41 -0
  184. package/dist/defence/fragmentation/temporal-analyzer.js.map +1 -0
  185. package/dist/defence/index.d.ts +12 -0
  186. package/dist/defence/index.d.ts.map +1 -0
  187. package/dist/defence/index.js +18 -0
  188. package/dist/defence/index.js.map +1 -0
  189. package/dist/defence/pipeline.d.ts +9 -0
  190. package/dist/defence/pipeline.d.ts.map +1 -0
  191. package/dist/defence/pipeline.js +115 -0
  192. package/dist/defence/pipeline.js.map +1 -0
  193. package/dist/defence/scanner/index.d.ts +5 -0
  194. package/dist/defence/scanner/index.d.ts.map +1 -0
  195. package/dist/defence/scanner/index.js +5 -0
  196. package/dist/defence/scanner/index.js.map +1 -0
  197. package/dist/defence/scanner/scan-existing.d.ts +34 -0
  198. package/dist/defence/scanner/scan-existing.d.ts.map +1 -0
  199. package/dist/defence/scanner/scan-existing.js +136 -0
  200. package/dist/defence/scanner/scan-existing.js.map +1 -0
  201. package/dist/defence/sensitivity/classifier.d.ts +6 -0
  202. package/dist/defence/sensitivity/classifier.d.ts.map +1 -0
  203. package/dist/defence/sensitivity/classifier.js +50 -0
  204. package/dist/defence/sensitivity/classifier.js.map +1 -0
  205. package/dist/defence/sensitivity/index.d.ts +11 -0
  206. package/dist/defence/sensitivity/index.d.ts.map +1 -0
  207. package/dist/defence/sensitivity/index.js +13 -0
  208. package/dist/defence/sensitivity/index.js.map +1 -0
  209. package/dist/defence/sensitivity/patterns.d.ts +14 -0
  210. package/dist/defence/sensitivity/patterns.d.ts.map +1 -0
  211. package/dist/defence/sensitivity/patterns.js +67 -0
  212. package/dist/defence/sensitivity/patterns.js.map +1 -0
  213. package/dist/defence/sensitivity/redaction.d.ts +17 -0
  214. package/dist/defence/sensitivity/redaction.d.ts.map +1 -0
  215. package/dist/defence/sensitivity/redaction.js +47 -0
  216. package/dist/defence/sensitivity/redaction.js.map +1 -0
  217. package/dist/defence/trust/index.d.ts +3 -0
  218. package/dist/defence/trust/index.d.ts.map +1 -0
  219. package/dist/defence/trust/index.js +3 -0
  220. package/dist/defence/trust/index.js.map +1 -0
  221. package/dist/defence/trust/recall-filter.d.ts +10 -0
  222. package/dist/defence/trust/recall-filter.d.ts.map +1 -0
  223. package/dist/defence/trust/recall-filter.js +38 -0
  224. package/dist/defence/trust/recall-filter.js.map +1 -0
  225. package/dist/defence/trust/source-scorer.d.ts +6 -0
  226. package/dist/defence/trust/source-scorer.d.ts.map +1 -0
  227. package/dist/defence/trust/source-scorer.js +34 -0
  228. package/dist/defence/trust/source-scorer.js.map +1 -0
  229. package/dist/defence/types.d.ts +88 -0
  230. package/dist/defence/types.d.ts.map +1 -0
  231. package/dist/defence/types.js +15 -0
  232. package/dist/defence/types.js.map +1 -0
  233. package/dist/embeddings/generator.d.ts +20 -0
  234. package/dist/embeddings/generator.d.ts.map +1 -0
  235. package/dist/embeddings/generator.js +83 -0
  236. package/dist/embeddings/generator.js.map +1 -0
  237. package/dist/embeddings/index.d.ts +2 -0
  238. package/dist/embeddings/index.d.ts.map +1 -0
  239. package/dist/embeddings/index.js +2 -0
  240. package/dist/embeddings/index.js.map +1 -0
  241. package/dist/errors.d.ts +74 -0
  242. package/dist/errors.d.ts.map +1 -0
  243. package/dist/errors.js +131 -0
  244. package/dist/errors.js.map +1 -0
  245. package/dist/graph/backfill.d.ts +6 -0
  246. package/dist/graph/backfill.d.ts.map +1 -0
  247. package/dist/graph/backfill.js +33 -0
  248. package/dist/graph/backfill.js.map +1 -0
  249. package/dist/graph/extract.d.ts +21 -0
  250. package/dist/graph/extract.d.ts.map +1 -0
  251. package/dist/graph/extract.js +231 -0
  252. package/dist/graph/extract.js.map +1 -0
  253. package/dist/graph/resolve.d.ts +6 -0
  254. package/dist/graph/resolve.d.ts.map +1 -0
  255. package/dist/graph/resolve.js +126 -0
  256. package/dist/graph/resolve.js.map +1 -0
  257. package/dist/index.d.ts +31 -0
  258. package/dist/index.d.ts.map +1 -0
  259. package/dist/index.js +248 -0
  260. package/dist/index.js.map +1 -0
  261. package/dist/memory/activation.d.ts +69 -0
  262. package/dist/memory/activation.d.ts.map +1 -0
  263. package/dist/memory/activation.js +168 -0
  264. package/dist/memory/activation.js.map +1 -0
  265. package/dist/memory/consolidate.d.ts +98 -0
  266. package/dist/memory/consolidate.d.ts.map +1 -0
  267. package/dist/memory/consolidate.js +511 -0
  268. package/dist/memory/consolidate.js.map +1 -0
  269. package/dist/memory/contradiction.d.ts +69 -0
  270. package/dist/memory/contradiction.d.ts.map +1 -0
  271. package/dist/memory/contradiction.js +286 -0
  272. package/dist/memory/contradiction.js.map +1 -0
  273. package/dist/memory/decay.d.ts +62 -0
  274. package/dist/memory/decay.d.ts.map +1 -0
  275. package/dist/memory/decay.js +184 -0
  276. package/dist/memory/decay.js.map +1 -0
  277. package/dist/memory/salience.d.ts +36 -0
  278. package/dist/memory/salience.d.ts.map +1 -0
  279. package/dist/memory/salience.js +216 -0
  280. package/dist/memory/salience.js.map +1 -0
  281. package/dist/memory/similarity.d.ts +57 -0
  282. package/dist/memory/similarity.d.ts.map +1 -0
  283. package/dist/memory/similarity.js +114 -0
  284. package/dist/memory/similarity.js.map +1 -0
  285. package/dist/memory/store.d.ts +179 -0
  286. package/dist/memory/store.d.ts.map +1 -0
  287. package/dist/memory/store.js +1184 -0
  288. package/dist/memory/store.js.map +1 -0
  289. package/dist/memory/types.d.ts +97 -0
  290. package/dist/memory/types.d.ts.map +1 -0
  291. package/dist/memory/types.js +30 -0
  292. package/dist/memory/types.js.map +1 -0
  293. package/dist/server.d.ts +12 -0
  294. package/dist/server.d.ts.map +1 -0
  295. package/dist/server.js +568 -0
  296. package/dist/server.js.map +1 -0
  297. package/dist/service/install.d.ts +15 -0
  298. package/dist/service/install.d.ts.map +1 -0
  299. package/dist/service/install.js +178 -0
  300. package/dist/service/install.js.map +1 -0
  301. package/dist/service/templates.d.ts +13 -0
  302. package/dist/service/templates.d.ts.map +1 -0
  303. package/dist/service/templates.js +58 -0
  304. package/dist/service/templates.js.map +1 -0
  305. package/dist/setup/claude-md.d.ts +12 -0
  306. package/dist/setup/claude-md.d.ts.map +1 -0
  307. package/dist/setup/claude-md.js +68 -0
  308. package/dist/setup/claude-md.js.map +1 -0
  309. package/dist/setup/clawdbot.d.ts +15 -0
  310. package/dist/setup/clawdbot.d.ts.map +1 -0
  311. package/dist/setup/clawdbot.js +118 -0
  312. package/dist/setup/clawdbot.js.map +1 -0
  313. package/dist/setup/doctor.d.ts +5 -0
  314. package/dist/setup/doctor.d.ts.map +1 -0
  315. package/dist/setup/doctor.js +141 -0
  316. package/dist/setup/doctor.js.map +1 -0
  317. package/dist/setup/hooks.d.ts +6 -0
  318. package/dist/setup/hooks.d.ts.map +1 -0
  319. package/dist/setup/hooks.js +36 -0
  320. package/dist/setup/hooks.js.map +1 -0
  321. package/dist/setup/migrate.d.ts +16 -0
  322. package/dist/setup/migrate.d.ts.map +1 -0
  323. package/dist/setup/migrate.js +164 -0
  324. package/dist/setup/migrate.js.map +1 -0
  325. package/dist/setup/settings-hooks.d.ts +7 -0
  326. package/dist/setup/settings-hooks.d.ts.map +1 -0
  327. package/dist/setup/settings-hooks.js +83 -0
  328. package/dist/setup/settings-hooks.js.map +1 -0
  329. package/dist/setup/uninstall.d.ts +12 -0
  330. package/dist/setup/uninstall.d.ts.map +1 -0
  331. package/dist/setup/uninstall.js +125 -0
  332. package/dist/setup/uninstall.js.map +1 -0
  333. package/dist/tools/context.d.ts +135 -0
  334. package/dist/tools/context.d.ts.map +1 -0
  335. package/dist/tools/context.js +273 -0
  336. package/dist/tools/context.js.map +1 -0
  337. package/dist/tools/forget.d.ts +53 -0
  338. package/dist/tools/forget.d.ts.map +1 -0
  339. package/dist/tools/forget.js +179 -0
  340. package/dist/tools/forget.js.map +1 -0
  341. package/dist/tools/graph.d.ts +46 -0
  342. package/dist/tools/graph.d.ts.map +1 -0
  343. package/dist/tools/graph.js +206 -0
  344. package/dist/tools/graph.js.map +1 -0
  345. package/dist/tools/recall.d.ts +79 -0
  346. package/dist/tools/recall.d.ts.map +1 -0
  347. package/dist/tools/recall.js +156 -0
  348. package/dist/tools/recall.js.map +1 -0
  349. package/dist/tools/remember.d.ts +83 -0
  350. package/dist/tools/remember.d.ts.map +1 -0
  351. package/dist/tools/remember.js +151 -0
  352. package/dist/tools/remember.js.map +1 -0
  353. package/dist/worker/brain-worker.d.ts +100 -0
  354. package/dist/worker/brain-worker.d.ts.map +1 -0
  355. package/dist/worker/brain-worker.js +283 -0
  356. package/dist/worker/brain-worker.js.map +1 -0
  357. package/dist/worker/link-discovery.d.ts +47 -0
  358. package/dist/worker/link-discovery.d.ts.map +1 -0
  359. package/dist/worker/link-discovery.js +103 -0
  360. package/dist/worker/link-discovery.js.map +1 -0
  361. package/dist/worker/predictive-consolidation.d.ts +46 -0
  362. package/dist/worker/predictive-consolidation.d.ts.map +1 -0
  363. package/dist/worker/predictive-consolidation.js +110 -0
  364. package/dist/worker/predictive-consolidation.js.map +1 -0
  365. package/dist/worker/types.d.ts +91 -0
  366. package/dist/worker/types.d.ts.map +1 -0
  367. package/dist/worker/types.js +22 -0
  368. package/dist/worker/types.js.map +1 -0
  369. package/hooks/clawdbot/cortex-memory/HOOK.md +71 -0
  370. package/hooks/clawdbot/cortex-memory/handler.js +279 -0
  371. package/package.json +73 -0
  372. package/scripts/pre-compact-hook.mjs +716 -0
  373. package/scripts/session-end-hook.mjs +548 -0
  374. package/scripts/session-start-hook.mjs +221 -0
  375. package/scripts/start-dashboard.sh +41 -0
  376. package/scripts/stop-dashboard.sh +21 -0
  377. package/scripts/stop-hook.mjs +163 -0
@@ -0,0 +1,151 @@
1
+ /**
2
+ * Remember Tool
3
+ *
4
+ * Store memories with automatic salience detection and categorization.
5
+ */
6
+ import { z } from 'zod';
7
+ import { addMemory, searchMemories, detectRelationships, createMemoryLink, getLastTruncationInfo } from '../memory/store.js';
8
+ import { analyzeSalienceFactors, explainSalience } from '../memory/salience.js';
9
+ import { formatErrorForMcp } from '../errors.js';
10
+ import { resolveProject } from '../context/project-context.js';
11
+ // Input schema for the remember tool
12
+ export const rememberSchema = z.object({
13
+ title: z.string().describe('Short title for the memory (what to remember)'),
14
+ content: z.string().describe('Detailed content of the memory'),
15
+ category: z.enum([
16
+ 'architecture', 'pattern', 'preference', 'error',
17
+ 'context', 'learning', 'todo', 'note', 'relationship', 'custom'
18
+ ]).optional().describe('Category of memory (auto-detected if not provided)'),
19
+ type: z.enum(['short_term', 'long_term', 'episodic']).optional()
20
+ .describe('Memory type (auto-determined based on salience if not provided)'),
21
+ project: z.string().optional().describe('Project this memory belongs to'),
22
+ tags: z.array(z.string()).optional().describe('Tags for categorization'),
23
+ importance: z.enum(['low', 'normal', 'high', 'critical']).optional()
24
+ .describe('Override automatic salience detection'),
25
+ scope: z.enum(['project', 'global']).optional()
26
+ .describe('Memory scope: project (default) or global (cross-project)'),
27
+ transferable: z.boolean().optional()
28
+ .describe('Whether this memory can be transferred to other projects'),
29
+ source: z.object({
30
+ type: z.enum(['user', 'email', 'web', 'agent', 'file', 'api']),
31
+ identifier: z.string(),
32
+ }).optional().describe('Source of this memory for trust scoring'),
33
+ });
34
+ /**
35
+ * Execute the remember tool
36
+ */
37
+ export async function executeRemember(input) {
38
+ try {
39
+ // Resolve project (auto-detect if not provided)
40
+ const resolvedProject = resolveProject(input.project);
41
+ // Map importance to salience override
42
+ let salienceOverride;
43
+ if (input.importance) {
44
+ const importanceMap = {
45
+ low: 0.3,
46
+ normal: 0.5,
47
+ high: 0.8,
48
+ critical: 1.0,
49
+ };
50
+ salienceOverride = importanceMap[input.importance];
51
+ }
52
+ // Check for duplicates
53
+ const existing = await searchMemories({
54
+ query: input.title,
55
+ project: resolvedProject ?? undefined,
56
+ limit: 3,
57
+ });
58
+ // If very similar memory exists, update instead
59
+ if (existing.length > 0 && existing[0].relevanceScore > 0.9) {
60
+ const existingMemory = existing[0].memory;
61
+ return {
62
+ success: true,
63
+ memory: {
64
+ id: existingMemory.id,
65
+ title: existingMemory.title,
66
+ salience: existingMemory.salience,
67
+ type: existingMemory.type,
68
+ category: existingMemory.category,
69
+ reason: 'Updated existing similar memory',
70
+ },
71
+ };
72
+ }
73
+ // Create the memory
74
+ const memory = addMemory({
75
+ title: input.title,
76
+ content: input.content,
77
+ category: input.category,
78
+ type: input.type,
79
+ project: resolvedProject ?? undefined,
80
+ tags: input.tags,
81
+ salience: salienceOverride,
82
+ scope: input.scope,
83
+ transferable: input.transferable,
84
+ }, undefined, input.source ? { type: input.source.type, identifier: input.source.identifier } : undefined);
85
+ // Auto-detect and create relationships with existing memories
86
+ let linksCreated = 0;
87
+ try {
88
+ const potentialLinks = detectRelationships(memory, 3);
89
+ for (const link of potentialLinks) {
90
+ const created = createMemoryLink(memory.id, link.targetId, link.relationship, link.strength);
91
+ if (created)
92
+ linksCreated++;
93
+ }
94
+ }
95
+ catch {
96
+ // Silently ignore relationship detection errors
97
+ }
98
+ // Explain why this was remembered
99
+ const factors = analyzeSalienceFactors({ title: input.title, content: input.content });
100
+ const reason = explainSalience(factors);
101
+ // Check if content was truncated
102
+ const truncationInfo = getLastTruncationInfo();
103
+ return {
104
+ success: true,
105
+ memory: {
106
+ id: memory.id,
107
+ title: memory.title,
108
+ salience: memory.salience,
109
+ type: memory.type,
110
+ category: memory.category,
111
+ reason,
112
+ linksCreated,
113
+ truncated: truncationInfo?.wasTruncated ? truncationInfo : undefined,
114
+ },
115
+ };
116
+ }
117
+ catch (error) {
118
+ return {
119
+ success: false,
120
+ error: formatErrorForMcp(error),
121
+ };
122
+ }
123
+ }
124
+ /**
125
+ * Format the remember result for MCP response
126
+ */
127
+ export function formatRememberResult(result) {
128
+ if (!result.success) {
129
+ return `Failed to remember: ${result.error}`;
130
+ }
131
+ const m = result.memory;
132
+ const lines = [
133
+ `✓ Remembered: "${m.title}"`,
134
+ ` ID: ${m.id}`,
135
+ ` Type: ${m.type}`,
136
+ ` Category: ${m.category}`,
137
+ ` Salience: ${(m.salience * 100).toFixed(0)}%`,
138
+ ` Reason: ${m.reason}`,
139
+ ];
140
+ if (m.linksCreated && m.linksCreated > 0) {
141
+ lines.push(` Links: ${m.linksCreated} related memories connected`);
142
+ }
143
+ if (m.truncated && m.truncated.wasTruncated) {
144
+ const originalKB = (m.truncated.originalLength / 1024).toFixed(1);
145
+ const truncatedKB = (m.truncated.truncatedLength / 1024).toFixed(1);
146
+ lines.push(` ⚠️ WARNING: Content truncated from ${originalKB}KB to ${truncatedKB}KB (10KB limit)`);
147
+ lines.push(` Consider splitting large memories into smaller, focused pieces.`);
148
+ }
149
+ return lines.join('\n');
150
+ }
151
+ //# sourceMappingURL=remember.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"remember.js","sourceRoot":"","sources":["../../src/tools/remember.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,SAAS,EAAE,cAAc,EAAE,mBAAmB,EAAE,gBAAgB,EAAE,qBAAqB,EAAE,MAAM,oBAAoB,CAAC;AAC7H,OAAO,EAAqB,sBAAsB,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAEnG,OAAO,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AACjD,OAAO,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAE/D,qCAAqC;AACrC,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,CAAC,MAAM,CAAC;IACrC,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,+CAA+C,CAAC;IAC3E,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,gCAAgC,CAAC;IAC9D,QAAQ,EAAE,CAAC,CAAC,IAAI,CAAC;QACf,cAAc,EAAE,SAAS,EAAE,YAAY,EAAE,OAAO;QAChD,SAAS,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,cAAc,EAAE,QAAQ;KAChE,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,oDAAoD,CAAC;IAC5E,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,YAAY,EAAE,WAAW,EAAE,UAAU,CAAC,CAAC,CAAC,QAAQ,EAAE;SAC7D,QAAQ,CAAC,iEAAiE,CAAC;IAC9E,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,gCAAgC,CAAC;IACzE,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,yBAAyB,CAAC;IACxE,UAAU,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,UAAU,CAAC,CAAC,CAAC,QAAQ,EAAE;SACjE,QAAQ,CAAC,uCAAuC,CAAC;IACpD,KAAK,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC,CAAC,QAAQ,EAAE;SAC5C,QAAQ,CAAC,2DAA2D,CAAC;IACxE,YAAY,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE;SACjC,QAAQ,CAAC,0DAA0D,CAAC;IACvE,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC;QACf,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC;QAC9D,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE;KACvB,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,yCAAyC,CAAC;CAClE,CAAC,CAAC;AAIH;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,eAAe,CAAC,KAAoB;IAkBxD,IAAI,CAAC;QACH,gDAAgD;QAChD,MAAM,eAAe,GAAG,cAAc,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QAEtD,sCAAsC;QACtC,IAAI,gBAAoC,CAAC;QACzC,IAAI,KAAK,CAAC,UAAU,EAAE,CAAC;YACrB,MAAM,aAAa,GAA2B;gBAC5C,GAAG,EAAE,GAAG;gBACR,MAAM,EAAE,GAAG;gBACX,IAAI,EAAE,GAAG;gBACT,QAAQ,EAAE,GAAG;aACd,CAAC;YACF,gBAAgB,GAAG,aAAa,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;QACrD,CAAC;QAED,uBAAuB;QACvB,MAAM,QAAQ,GAAG,MAAM,cAAc,CAAC;YACpC,KAAK,EAAE,KAAK,CAAC,KAAK;YAClB,OAAO,EAAE,eAAe,IAAI,SAAS;YACrC,KAAK,EAAE,CAAC;SACT,CAAC,CAAC;QAEH,gDAAgD;QAChD,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,IAAI,QAAQ,CAAC,CAAC,CAAC,CAAC,cAAc,GAAG,GAAG,EAAE,CAAC;YAC5D,MAAM,cAAc,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;YAC1C,OAAO;gBACL,OAAO,EAAE,IAAI;gBACb,MAAM,EAAE;oBACN,EAAE,EAAE,cAAc,CAAC,EAAE;oBACrB,KAAK,EAAE,cAAc,CAAC,KAAK;oBAC3B,QAAQ,EAAE,cAAc,CAAC,QAAQ;oBACjC,IAAI,EAAE,cAAc,CAAC,IAAI;oBACzB,QAAQ,EAAE,cAAc,CAAC,QAAQ;oBACjC,MAAM,EAAE,iCAAiC;iBAC1C;aACF,CAAC;QACJ,CAAC;QAED,oBAAoB;QACpB,MAAM,MAAM,GAAG,SAAS,CAAC;YACvB,KAAK,EAAE,KAAK,CAAC,KAAK;YAClB,OAAO,EAAE,KAAK,CAAC,OAAO;YACtB,QAAQ,EAAE,KAAK,CAAC,QAAQ;YACxB,IAAI,EAAE,KAAK,CAAC,IAAI;YAChB,OAAO,EAAE,eAAe,IAAI,SAAS;YACrC,IAAI,EAAE,KAAK,CAAC,IAAI;YAChB,QAAQ,EAAE,gBAAgB;YAC1B,KAAK,EAAE,KAAK,CAAC,KAAK;YAClB,YAAY,EAAE,KAAK,CAAC,YAAY;SACjC,EAAE,SAAS,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,CAAC,MAAM,CAAC,IAAI,EAAE,UAAU,EAAE,KAAK,CAAC,MAAM,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;QAE3G,8DAA8D;QAC9D,IAAI,YAAY,GAAG,CAAC,CAAC;QACrB,IAAI,CAAC;YACH,MAAM,cAAc,GAAG,mBAAmB,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;YACtD,KAAK,MAAM,IAAI,IAAI,cAAc,EAAE,CAAC;gBAClC,MAAM,OAAO,GAAG,gBAAgB,CAAC,MAAM,CAAC,EAAE,EAAE,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;gBAC7F,IAAI,OAAO;oBAAE,YAAY,EAAE,CAAC;YAC9B,CAAC;QACH,CAAC;QAAC,MAAM,CAAC;YACP,gDAAgD;QAClD,CAAC;QAED,kCAAkC;QAClC,MAAM,OAAO,GAAG,sBAAsB,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,OAAO,EAAE,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;QACvF,MAAM,MAAM,GAAG,eAAe,CAAC,OAAO,CAAC,CAAC;QAExC,iCAAiC;QACjC,MAAM,cAAc,GAAG,qBAAqB,EAAE,CAAC;QAE/C,OAAO;YACL,OAAO,EAAE,IAAI;YACb,MAAM,EAAE;gBACN,EAAE,EAAE,MAAM,CAAC,EAAE;gBACb,KAAK,EAAE,MAAM,CAAC,KAAK;gBACnB,QAAQ,EAAE,MAAM,CAAC,QAAQ;gBACzB,IAAI,EAAE,MAAM,CAAC,IAAI;gBACjB,QAAQ,EAAE,MAAM,CAAC,QAAQ;gBACzB,MAAM;gBACN,YAAY;gBACZ,SAAS,EAAE,cAAc,EAAE,YAAY,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,SAAS;aACrE;SACF,CAAC;IACJ,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO;YACL,OAAO,EAAE,KAAK;YACd,KAAK,EAAE,iBAAiB,CAAC,KAAK,CAAC;SAChC,CAAC;IACJ,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,oBAAoB,CAAC,MAAmD;IACtF,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;QACpB,OAAO,uBAAuB,MAAM,CAAC,KAAK,EAAE,CAAC;IAC/C,CAAC;IAED,MAAM,CAAC,GAAG,MAAM,CAAC,MAAO,CAAC;IACzB,MAAM,KAAK,GAAG;QACZ,kBAAkB,CAAC,CAAC,KAAK,GAAG;QAC5B,SAAS,CAAC,CAAC,EAAE,EAAE;QACf,WAAW,CAAC,CAAC,IAAI,EAAE;QACnB,eAAe,CAAC,CAAC,QAAQ,EAAE;QAC3B,eAAe,CAAC,CAAC,CAAC,QAAQ,GAAG,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG;QAC/C,aAAa,CAAC,CAAC,MAAM,EAAE;KACxB,CAAC;IACF,IAAI,CAAC,CAAC,YAAY,IAAI,CAAC,CAAC,YAAY,GAAG,CAAC,EAAE,CAAC;QACzC,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,YAAY,6BAA6B,CAAC,CAAC;IACtE,CAAC;IACD,IAAI,CAAC,CAAC,SAAS,IAAI,CAAC,CAAC,SAAS,CAAC,YAAY,EAAE,CAAC;QAC5C,MAAM,UAAU,GAAG,CAAC,CAAC,CAAC,SAAS,CAAC,cAAc,GAAG,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;QAClE,MAAM,WAAW,GAAG,CAAC,CAAC,CAAC,SAAS,CAAC,eAAe,GAAG,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;QACpE,KAAK,CAAC,IAAI,CAAC,yCAAyC,UAAU,SAAS,WAAW,iBAAiB,CAAC,CAAC;QACrG,KAAK,CAAC,IAAI,CAAC,mEAAmE,CAAC,CAAC;IAClF,CAAC;IACD,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC"}
@@ -0,0 +1,100 @@
1
+ /**
2
+ * Brain Worker
3
+ *
4
+ * Phase 4 Organic Brain Feature
5
+ *
6
+ * Background worker that performs brain-like maintenance operations:
7
+ * - Light tick (5 min): Prune activation cache, check predictive consolidation
8
+ * - Medium tick (30 min): Discover missing links, scan for contradictions
9
+ *
10
+ * This transforms the memory system from reactive to continuously organic.
11
+ */
12
+ import { WorkerConfig, LightTickResult, MediumTickResult, WorkerStatus } from './types.js';
13
+ /**
14
+ * Brain Worker Class
15
+ *
16
+ * Manages background processing timers and operations.
17
+ * Designed to be started by the visualization server and run continuously.
18
+ */
19
+ export declare class BrainWorker {
20
+ private lightTimer;
21
+ private mediumTimer;
22
+ private isRunning;
23
+ private config;
24
+ private stats;
25
+ private lastLightTick;
26
+ private lastMediumTick;
27
+ private lastConsolidation;
28
+ /**
29
+ * Create a new BrainWorker
30
+ *
31
+ * @param config - Partial configuration to override defaults
32
+ */
33
+ constructor(config?: Partial<WorkerConfig>);
34
+ /**
35
+ * Start the background worker
36
+ * Sets up interval timers for light and medium ticks
37
+ */
38
+ start(): void;
39
+ /**
40
+ * Stop the background worker
41
+ * Clears all interval timers
42
+ */
43
+ stop(): void;
44
+ /**
45
+ * Check if the worker is currently running
46
+ */
47
+ isActive(): boolean;
48
+ /**
49
+ * Light tick - runs every 5 minutes
50
+ *
51
+ * Operations:
52
+ * 1. Prune stale activation cache entries
53
+ * 2. Check if predictive consolidation should run
54
+ */
55
+ lightTick(): Promise<LightTickResult>;
56
+ /**
57
+ * Medium tick - runs every 30 minutes
58
+ *
59
+ * Operations:
60
+ * 1. Discover and create missing links
61
+ * 2. Scan for contradictions
62
+ */
63
+ mediumTick(): Promise<MediumTickResult>;
64
+ /**
65
+ * Get current worker status
66
+ */
67
+ getStatus(): WorkerStatus;
68
+ /**
69
+ * Get current configuration
70
+ */
71
+ getConfig(): WorkerConfig;
72
+ /**
73
+ * Update configuration
74
+ * Note: Changes won't affect running timers until restart
75
+ */
76
+ updateConfig(config: Partial<WorkerConfig>): void;
77
+ /**
78
+ * Manually trigger a light tick
79
+ * Useful for testing or immediate cache pruning
80
+ */
81
+ triggerLightTick(): Promise<LightTickResult>;
82
+ /**
83
+ * Manually trigger a medium tick
84
+ * Useful for testing or immediate link discovery
85
+ */
86
+ triggerMediumTick(): Promise<MediumTickResult>;
87
+ }
88
+ /**
89
+ * Get or create the default worker instance
90
+ */
91
+ export declare function getDefaultWorker(): BrainWorker;
92
+ /**
93
+ * Start the default worker if not already running
94
+ */
95
+ export declare function startDefaultWorker(): BrainWorker;
96
+ /**
97
+ * Stop the default worker
98
+ */
99
+ export declare function stopDefaultWorker(): void;
100
+ //# sourceMappingURL=brain-worker.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"brain-worker.d.ts","sourceRoot":"","sources":["../../src/worker/brain-worker.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,EACL,YAAY,EAEZ,eAAe,EACf,gBAAgB,EAChB,YAAY,EACb,MAAM,YAAY,CAAC;AAiBpB;;;;;GAKG;AACH,qBAAa,WAAW;IACtB,OAAO,CAAC,UAAU,CAA+B;IACjD,OAAO,CAAC,WAAW,CAA+B;IAClD,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,MAAM,CAAe;IAG7B,OAAO,CAAC,KAAK,CAIX;IAGF,OAAO,CAAC,aAAa,CAAqB;IAC1C,OAAO,CAAC,cAAc,CAAqB;IAC3C,OAAO,CAAC,iBAAiB,CAAqB;IAE9C;;;;OAIG;gBACS,MAAM,GAAE,OAAO,CAAC,YAAY,CAAM;IAI9C;;;OAGG;IACH,KAAK,IAAI,IAAI;IAgCb;;;OAGG;IACH,IAAI,IAAI,IAAI;IAqBZ;;OAEG;IACH,QAAQ,IAAI,OAAO;IAInB;;;;;;OAMG;IACG,SAAS,IAAI,OAAO,CAAC,eAAe,CAAC;IAqD3C;;;;;;OAMG;IACG,UAAU,IAAI,OAAO,CAAC,gBAAgB,CAAC;IAmE7C;;OAEG;IACH,SAAS,IAAI,YAAY;IAUzB;;OAEG;IACH,SAAS,IAAI,YAAY;IAIzB;;;OAGG;IACH,YAAY,CAAC,MAAM,EAAE,OAAO,CAAC,YAAY,CAAC,GAAG,IAAI;IAMjD;;;OAGG;IACH,gBAAgB,IAAI,OAAO,CAAC,eAAe,CAAC;IAI5C;;;OAGG;IACH,iBAAiB,IAAI,OAAO,CAAC,gBAAgB,CAAC;CAG/C;AAKD;;GAEG;AACH,wBAAgB,gBAAgB,IAAI,WAAW,CAK9C;AAED;;GAEG;AACH,wBAAgB,kBAAkB,IAAI,WAAW,CAMhD;AAED;;GAEG;AACH,wBAAgB,iBAAiB,IAAI,IAAI,CAIxC"}
@@ -0,0 +1,283 @@
1
+ /**
2
+ * Brain Worker
3
+ *
4
+ * Phase 4 Organic Brain Feature
5
+ *
6
+ * Background worker that performs brain-like maintenance operations:
7
+ * - Light tick (5 min): Prune activation cache, check predictive consolidation
8
+ * - Medium tick (30 min): Discover missing links, scan for contradictions
9
+ *
10
+ * This transforms the memory system from reactive to continuously organic.
11
+ */
12
+ import { DEFAULT_WORKER_CONFIG, } from './types.js';
13
+ import { getDatabase } from '../database/init.js';
14
+ import { pruneActivationCache } from '../memory/activation.js';
15
+ import { getMemoryStats } from '../memory/store.js';
16
+ import { consolidate } from '../memory/consolidate.js';
17
+ import { detectContradictions, linkContradictions, } from '../memory/contradiction.js';
18
+ import { discoverMissingLinks, findUnlinkedMemories } from './link-discovery.js';
19
+ import { shouldTriggerPredictiveConsolidation } from './predictive-consolidation.js';
20
+ import { emitWorkerLightTick, emitWorkerMediumTick, emitPredictiveConsolidation, } from '../api/events.js';
21
+ /**
22
+ * Brain Worker Class
23
+ *
24
+ * Manages background processing timers and operations.
25
+ * Designed to be started by the visualization server and run continuously.
26
+ */
27
+ export class BrainWorker {
28
+ lightTimer = null;
29
+ mediumTimer = null;
30
+ isRunning = false;
31
+ config;
32
+ // Statistics tracking
33
+ stats = {
34
+ lightTicks: 0,
35
+ mediumTicks: 0,
36
+ consolidations: 0,
37
+ };
38
+ // Timestamps
39
+ lastLightTick = null;
40
+ lastMediumTick = null;
41
+ lastConsolidation = null;
42
+ /**
43
+ * Create a new BrainWorker
44
+ *
45
+ * @param config - Partial configuration to override defaults
46
+ */
47
+ constructor(config = {}) {
48
+ this.config = { ...DEFAULT_WORKER_CONFIG, ...config };
49
+ }
50
+ /**
51
+ * Start the background worker
52
+ * Sets up interval timers for light and medium ticks
53
+ */
54
+ start() {
55
+ if (this.isRunning) {
56
+ console.log('[BrainWorker] Already running');
57
+ return;
58
+ }
59
+ this.isRunning = true;
60
+ console.log('[BrainWorker] Starting background worker');
61
+ console.log(`[BrainWorker] Light tick interval: ${this.config.lightTickIntervalMs / 1000}s`);
62
+ console.log(`[BrainWorker] Medium tick interval: ${this.config.mediumTickIntervalMs / 1000}s`);
63
+ // Light tick every 5 minutes (by default)
64
+ this.lightTimer = setInterval(() => this.lightTick(), this.config.lightTickIntervalMs);
65
+ // Medium tick every 30 minutes (by default)
66
+ this.mediumTimer = setInterval(() => this.mediumTick(), this.config.mediumTickIntervalMs);
67
+ // Run initial light tick after a short delay (10 seconds)
68
+ // This allows the server to fully initialize first
69
+ setTimeout(() => {
70
+ if (this.isRunning) {
71
+ this.lightTick();
72
+ }
73
+ }, 10000);
74
+ }
75
+ /**
76
+ * Stop the background worker
77
+ * Clears all interval timers
78
+ */
79
+ stop() {
80
+ if (!this.isRunning) {
81
+ console.log('[BrainWorker] Not running');
82
+ return;
83
+ }
84
+ this.isRunning = false;
85
+ if (this.lightTimer) {
86
+ clearInterval(this.lightTimer);
87
+ this.lightTimer = null;
88
+ }
89
+ if (this.mediumTimer) {
90
+ clearInterval(this.mediumTimer);
91
+ this.mediumTimer = null;
92
+ }
93
+ console.log('[BrainWorker] Stopped');
94
+ }
95
+ /**
96
+ * Check if the worker is currently running
97
+ */
98
+ isActive() {
99
+ return this.isRunning;
100
+ }
101
+ /**
102
+ * Light tick - runs every 5 minutes
103
+ *
104
+ * Operations:
105
+ * 1. Prune stale activation cache entries
106
+ * 2. Check if predictive consolidation should run
107
+ */
108
+ async lightTick() {
109
+ const result = {
110
+ activationsPruned: 0,
111
+ predictiveConsolidation: null,
112
+ timestamp: new Date(),
113
+ };
114
+ try {
115
+ // 1. Prune activation cache
116
+ result.activationsPruned = pruneActivationCache();
117
+ // 2. Check if predictive consolidation is needed
118
+ const stats = getMemoryStats();
119
+ const decision = shouldTriggerPredictiveConsolidation(stats, this.config);
120
+ if (decision.shouldRun) {
121
+ console.log(`[BrainWorker] Predictive consolidation triggered: ${decision.reason}`);
122
+ result.predictiveConsolidation = consolidate();
123
+ this.lastConsolidation = new Date();
124
+ this.stats.consolidations++;
125
+ // Emit event for dashboard
126
+ emitPredictiveConsolidation({
127
+ trigger: decision.reason,
128
+ urgency: decision.urgency,
129
+ result: result.predictiveConsolidation,
130
+ });
131
+ }
132
+ // Update stats
133
+ this.lastLightTick = result.timestamp;
134
+ this.stats.lightTicks++;
135
+ // Emit light tick event
136
+ emitWorkerLightTick(result);
137
+ // Log summary
138
+ if (result.activationsPruned > 0 || result.predictiveConsolidation) {
139
+ console.log(`[BrainWorker] Light tick: pruned ${result.activationsPruned} activations` +
140
+ (result.predictiveConsolidation
141
+ ? `, consolidated ${result.predictiveConsolidation.consolidated}`
142
+ : ''));
143
+ }
144
+ }
145
+ catch (e) {
146
+ console.error('[BrainWorker] Light tick failed:', e);
147
+ }
148
+ return result;
149
+ }
150
+ /**
151
+ * Medium tick - runs every 30 minutes
152
+ *
153
+ * Operations:
154
+ * 1. Discover and create missing links
155
+ * 2. Scan for contradictions
156
+ */
157
+ async mediumTick() {
158
+ const result = {
159
+ linksDiscovered: 0,
160
+ contradictionsFound: 0,
161
+ contradictionsLinked: 0,
162
+ memoriesScanned: 0,
163
+ timestamp: new Date(),
164
+ };
165
+ try {
166
+ // 1. Link discovery - find unlinked memories and create relationships
167
+ const unlinked = findUnlinkedMemories(this.config.maxLinksPerCycle);
168
+ result.memoriesScanned = unlinked.length;
169
+ result.linksDiscovered = discoverMissingLinks(this.config.maxLinksPerCycle);
170
+ // 2. Contradiction scan
171
+ const contradictions = detectContradictions({
172
+ minScore: 0.5,
173
+ limit: this.config.contradictionScanLimit,
174
+ });
175
+ result.contradictionsFound = contradictions.length;
176
+ result.contradictionsLinked = linkContradictions(contradictions);
177
+ // Update stats
178
+ this.lastMediumTick = result.timestamp;
179
+ this.stats.mediumTicks++;
180
+ // Emit medium tick event
181
+ emitWorkerMediumTick(result);
182
+ // Log summary
183
+ console.log(`[BrainWorker] Medium tick: scanned ${result.memoriesScanned} memories, ` +
184
+ `discovered ${result.linksDiscovered} links, ` +
185
+ `found ${result.contradictionsFound} contradictions`);
186
+ }
187
+ catch (e) {
188
+ console.error('[BrainWorker] Medium tick failed:', e);
189
+ }
190
+ // ONTOLOGY: Graph maintenance — prune orphan entities
191
+ try {
192
+ const db = getDatabase();
193
+ const orphans = db.prepare(`
194
+ SELECT e.id FROM entities e
195
+ WHERE e.memory_count = 0
196
+ AND NOT EXISTS (SELECT 1 FROM triples WHERE subject_id = e.id OR object_id = e.id)
197
+ `).all();
198
+ if (orphans.length > 0) {
199
+ const deleteStmt = db.prepare('DELETE FROM entities WHERE id = ?');
200
+ for (const orphan of orphans) {
201
+ deleteStmt.run(orphan.id);
202
+ }
203
+ }
204
+ const entityCount = db.prepare('SELECT COUNT(*) as c FROM entities').get().c;
205
+ const tripleCount = db.prepare('SELECT COUNT(*) as c FROM triples').get().c;
206
+ console.log(`[brain-worker] Graph: ${entityCount} entities, ${tripleCount} triples${orphans.length > 0 ? `, pruned ${orphans.length} orphans` : ''}`);
207
+ }
208
+ catch (e) {
209
+ console.error('[brain-worker] Graph maintenance failed:', e);
210
+ }
211
+ return result;
212
+ }
213
+ /**
214
+ * Get current worker status
215
+ */
216
+ getStatus() {
217
+ return {
218
+ isRunning: this.isRunning,
219
+ lastLightTick: this.lastLightTick,
220
+ lastMediumTick: this.lastMediumTick,
221
+ lastConsolidation: this.lastConsolidation,
222
+ stats: { ...this.stats },
223
+ };
224
+ }
225
+ /**
226
+ * Get current configuration
227
+ */
228
+ getConfig() {
229
+ return { ...this.config };
230
+ }
231
+ /**
232
+ * Update configuration
233
+ * Note: Changes won't affect running timers until restart
234
+ */
235
+ updateConfig(config) {
236
+ this.config = { ...this.config, ...config };
237
+ }
238
+ // Manual triggers for testing and API endpoints
239
+ /**
240
+ * Manually trigger a light tick
241
+ * Useful for testing or immediate cache pruning
242
+ */
243
+ triggerLightTick() {
244
+ return this.lightTick();
245
+ }
246
+ /**
247
+ * Manually trigger a medium tick
248
+ * Useful for testing or immediate link discovery
249
+ */
250
+ triggerMediumTick() {
251
+ return this.mediumTick();
252
+ }
253
+ }
254
+ // Default singleton instance (optional - server can create its own)
255
+ let defaultWorker = null;
256
+ /**
257
+ * Get or create the default worker instance
258
+ */
259
+ export function getDefaultWorker() {
260
+ if (!defaultWorker) {
261
+ defaultWorker = new BrainWorker();
262
+ }
263
+ return defaultWorker;
264
+ }
265
+ /**
266
+ * Start the default worker if not already running
267
+ */
268
+ export function startDefaultWorker() {
269
+ const worker = getDefaultWorker();
270
+ if (!worker.isActive()) {
271
+ worker.start();
272
+ }
273
+ return worker;
274
+ }
275
+ /**
276
+ * Stop the default worker
277
+ */
278
+ export function stopDefaultWorker() {
279
+ if (defaultWorker) {
280
+ defaultWorker.stop();
281
+ }
282
+ }
283
+ //# sourceMappingURL=brain-worker.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"brain-worker.js","sourceRoot":"","sources":["../../src/worker/brain-worker.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,47 @@
1
+ /**
2
+ * Link Discovery Module
3
+ *
4
+ * Phase 4 Organic Brain Feature
5
+ *
6
+ * Finds memories that have no links and discovers relationships
7
+ * for them during background worker cycles.
8
+ */
9
+ import { Memory } from '../memory/types.js';
10
+ /**
11
+ * Find memories that have no outgoing links
12
+ * These are candidates for relationship discovery
13
+ *
14
+ * @param limit - Maximum number of memories to return
15
+ * @returns Array of Memory objects with no outgoing links
16
+ */
17
+ export declare function findUnlinkedMemories(limit?: number): Memory[];
18
+ /**
19
+ * Find memories with few links (under-linked)
20
+ * These might benefit from additional connections
21
+ *
22
+ * @param maxLinks - Maximum number of existing links to qualify
23
+ * @param limit - Maximum number of memories to return
24
+ * @returns Array of Memory objects with fewer than maxLinks links
25
+ */
26
+ export declare function findUnderlinkedMemories(maxLinks?: number, limit?: number): Memory[];
27
+ /**
28
+ * Discover and create links for unlinked memories
29
+ * Called during medium tick to build the knowledge graph organically
30
+ *
31
+ * @param limit - Maximum number of memories to process per cycle
32
+ * @returns Number of new links created
33
+ */
34
+ export declare function discoverMissingLinks(limit?: number): number;
35
+ /**
36
+ * Get statistics about memory link coverage
37
+ * Useful for dashboard visualization
38
+ *
39
+ * @returns Object with link coverage stats
40
+ */
41
+ export declare function getLinkCoverageStats(): {
42
+ totalMemories: number;
43
+ memoriesWithLinks: number;
44
+ memoriesWithoutLinks: number;
45
+ averageLinksPerMemory: number;
46
+ };
47
+ //# sourceMappingURL=link-discovery.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"link-discovery.d.ts","sourceRoot":"","sources":["../../src/worker/link-discovery.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAQH,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAE5C;;;;;;GAMG;AACH,wBAAgB,oBAAoB,CAAC,KAAK,GAAE,MAAW,GAAG,MAAM,EAAE,CAcjE;AAED;;;;;;;GAOG;AACH,wBAAgB,uBAAuB,CACrC,QAAQ,GAAE,MAAU,EACpB,KAAK,GAAE,MAAW,GACjB,MAAM,EAAE,CAeV;AAED;;;;;;GAMG;AACH,wBAAgB,oBAAoB,CAAC,KAAK,GAAE,MAAW,GAAG,MAAM,CA8B/D;AAED;;;;;GAKG;AACH,wBAAgB,oBAAoB,IAAI;IACtC,aAAa,EAAE,MAAM,CAAC;IACtB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,oBAAoB,EAAE,MAAM,CAAC;IAC7B,qBAAqB,EAAE,MAAM,CAAC;CAC/B,CAuBA"}