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,458 @@
1
+ 'use client';
2
+
3
+ /**
4
+ * Memory Data Hooks
5
+ * TanStack Query hooks for fetching memory data
6
+ *
7
+ * Uses WebSocket for real-time updates with polling as fallback.
8
+ */
9
+
10
+ import { useQuery, useMutation, useQueryClient } from '@tanstack/react-query';
11
+ import { Memory, MemoryStats, MemoryLink } from '@/types/memory';
12
+ import { useMemoryWebSocket } from '@/lib/websocket';
13
+
14
+ const API_BASE = process.env.NEXT_PUBLIC_API_URL || 'http://localhost:3001';
15
+
16
+ // Pagination metadata from API
17
+ export interface PaginationInfo {
18
+ offset: number;
19
+ limit: number;
20
+ total: number;
21
+ hasMore: boolean;
22
+ }
23
+
24
+ // Paginated response from API
25
+ interface PaginatedMemoriesResponse {
26
+ memories: Memory[];
27
+ pagination: PaginationInfo;
28
+ }
29
+
30
+ // Fetch memories with pagination support
31
+ async function fetchMemories(options?: {
32
+ project?: string;
33
+ type?: string;
34
+ category?: string;
35
+ limit?: number;
36
+ offset?: number;
37
+ mode?: 'recent' | 'important' | 'search';
38
+ query?: string;
39
+ }): Promise<PaginatedMemoriesResponse> {
40
+ const params = new URLSearchParams();
41
+ if (options?.project) params.set('project', options.project);
42
+ if (options?.type) params.set('type', options.type);
43
+ if (options?.category) params.set('category', options.category);
44
+ if (options?.limit) params.set('limit', options.limit.toString());
45
+ if (options?.offset) params.set('offset', options.offset.toString());
46
+ if (options?.mode) params.set('mode', options.mode);
47
+ if (options?.query) params.set('query', options.query);
48
+
49
+ const response = await fetch(`${API_BASE}/api/memories?${params}`);
50
+ if (!response.ok) throw new Error('Failed to fetch memories');
51
+ return response.json();
52
+ }
53
+
54
+ // Fetch memory stats
55
+ async function fetchStats(project?: string): Promise<MemoryStats> {
56
+ const params = project ? `?project=${project}` : '';
57
+ const response = await fetch(`${API_BASE}/api/stats${params}`);
58
+ if (!response.ok) throw new Error('Failed to fetch stats');
59
+ return response.json();
60
+ }
61
+
62
+ // Fetch memory links
63
+ async function fetchLinks(project?: string): Promise<MemoryLink[]> {
64
+ const params = project ? `?project=${project}` : '';
65
+ const response = await fetch(`${API_BASE}/api/links${params}`);
66
+ if (!response.ok) throw new Error('Failed to fetch links');
67
+ return response.json();
68
+ }
69
+
70
+ // Project info from API
71
+ export interface ProjectInfo {
72
+ project: string | null;
73
+ memory_count: number;
74
+ label: string;
75
+ }
76
+
77
+ // Fetch list of projects
78
+ async function fetchProjects(): Promise<{ projects: ProjectInfo[] }> {
79
+ const response = await fetch(`${API_BASE}/api/projects`);
80
+ if (!response.ok) throw new Error('Failed to fetch projects');
81
+ return response.json();
82
+ }
83
+
84
+ // Access a memory (reinforce)
85
+ async function accessMemory(id: number): Promise<Memory> {
86
+ const response = await fetch(`${API_BASE}/api/memories/${id}/access`, {
87
+ method: 'POST',
88
+ });
89
+ if (!response.ok) throw new Error('Failed to access memory');
90
+ return response.json();
91
+ }
92
+
93
+ // Trigger consolidation
94
+ async function triggerConsolidation(): Promise<{
95
+ success: boolean;
96
+ consolidated: number;
97
+ decayed: number;
98
+ deleted: number;
99
+ }> {
100
+ const response = await fetch(`${API_BASE}/api/consolidate`, {
101
+ method: 'POST',
102
+ });
103
+ if (!response.ok) throw new Error('Failed to consolidate');
104
+ return response.json();
105
+ }
106
+
107
+ // Hook: Get all memories with pagination
108
+ // Polling is reduced because WebSocket handles real-time updates
109
+ export function useMemories(options?: {
110
+ project?: string;
111
+ type?: string;
112
+ category?: string;
113
+ limit?: number;
114
+ offset?: number;
115
+ mode?: 'recent' | 'important' | 'search';
116
+ query?: string;
117
+ }) {
118
+ const query = useQuery({
119
+ queryKey: ['memories', options],
120
+ queryFn: () => fetchMemories(options),
121
+ refetchInterval: 30000, // Fallback poll every 30 seconds (WebSocket handles real-time)
122
+ });
123
+
124
+ // Extract memories array and pagination from response
125
+ return {
126
+ ...query,
127
+ data: query.data?.memories,
128
+ pagination: query.data?.pagination,
129
+ };
130
+ }
131
+
132
+ // Hook: Get memory stats
133
+ export function useStats(project?: string) {
134
+ return useQuery({
135
+ queryKey: ['stats', project],
136
+ queryFn: () => fetchStats(project),
137
+ refetchInterval: 30000, // Fallback poll every 30 seconds
138
+ });
139
+ }
140
+
141
+ // Hook: Get memory links
142
+ export function useMemoryLinks(project?: string) {
143
+ return useQuery({
144
+ queryKey: ['links', project],
145
+ queryFn: () => fetchLinks(project),
146
+ refetchInterval: 60000, // Fallback poll every 60 seconds
147
+ });
148
+ }
149
+
150
+ // Hook: Get list of projects
151
+ export function useProjects() {
152
+ return useQuery({
153
+ queryKey: ['projects'],
154
+ queryFn: fetchProjects,
155
+ refetchInterval: 60000, // Refresh project list every minute
156
+ });
157
+ }
158
+
159
+ // Hook: Combined memories with WebSocket real-time updates
160
+ export function useMemoriesWithRealtime(options?: {
161
+ project?: string;
162
+ type?: string;
163
+ category?: string;
164
+ limit?: number;
165
+ offset?: number;
166
+ mode?: 'recent' | 'important' | 'search';
167
+ query?: string;
168
+ }) {
169
+ // Connect to WebSocket for real-time updates
170
+ const ws = useMemoryWebSocket();
171
+
172
+ // Fetch memories with reduced polling (WebSocket handles most updates)
173
+ const memories = useMemories(options);
174
+
175
+ return {
176
+ ...memories,
177
+ isConnected: ws.isConnected,
178
+ lastEvent: ws.lastEvent,
179
+ };
180
+ }
181
+
182
+ // Hook: Access/reinforce a memory
183
+ export function useAccessMemory() {
184
+ const queryClient = useQueryClient();
185
+
186
+ return useMutation({
187
+ mutationFn: accessMemory,
188
+ onSuccess: () => {
189
+ // Invalidate memories to trigger refetch
190
+ queryClient.invalidateQueries({ queryKey: ['memories'] });
191
+ queryClient.invalidateQueries({ queryKey: ['stats'] });
192
+ },
193
+ });
194
+ }
195
+
196
+ // Hook: Trigger consolidation
197
+ export function useConsolidate() {
198
+ const queryClient = useQueryClient();
199
+
200
+ return useMutation({
201
+ mutationFn: triggerConsolidation,
202
+ onSuccess: () => {
203
+ queryClient.invalidateQueries({ queryKey: ['memories'] });
204
+ queryClient.invalidateQueries({ queryKey: ['stats'] });
205
+ },
206
+ });
207
+ }
208
+
209
+ // ============================================
210
+ // CONTROL API
211
+ // ============================================
212
+
213
+ // Control status response
214
+ export interface ControlStatus {
215
+ paused: boolean;
216
+ uptime: number;
217
+ uptimeFormatted: string;
218
+ }
219
+
220
+ // Fetch control status
221
+ async function fetchControlStatus(): Promise<ControlStatus> {
222
+ const response = await fetch(`${API_BASE}/api/control/status`);
223
+ if (!response.ok) throw new Error('Failed to fetch control status');
224
+ return response.json();
225
+ }
226
+
227
+ // Pause memory creation
228
+ async function pauseMemoryCreation(): Promise<{ paused: boolean }> {
229
+ const response = await fetch(`${API_BASE}/api/control/pause`, {
230
+ method: 'POST',
231
+ });
232
+ if (!response.ok) throw new Error('Failed to pause');
233
+ return response.json();
234
+ }
235
+
236
+ // Resume memory creation
237
+ async function resumeMemoryCreation(): Promise<{ paused: boolean }> {
238
+ const response = await fetch(`${API_BASE}/api/control/resume`, {
239
+ method: 'POST',
240
+ });
241
+ if (!response.ok) throw new Error('Failed to resume');
242
+ return response.json();
243
+ }
244
+
245
+ // Hook: Get control status
246
+ export function useControlStatus() {
247
+ return useQuery({
248
+ queryKey: ['control-status'],
249
+ queryFn: fetchControlStatus,
250
+ refetchInterval: 10000, // Poll every 10 seconds for uptime updates
251
+ });
252
+ }
253
+
254
+ // Hook: Pause memory creation
255
+ export function usePauseMemory() {
256
+ const queryClient = useQueryClient();
257
+
258
+ return useMutation({
259
+ mutationFn: pauseMemoryCreation,
260
+ onSuccess: () => {
261
+ queryClient.invalidateQueries({ queryKey: ['control-status'] });
262
+ },
263
+ });
264
+ }
265
+
266
+ // Hook: Resume memory creation
267
+ export function useResumeMemory() {
268
+ const queryClient = useQueryClient();
269
+
270
+ return useMutation({
271
+ mutationFn: resumeMemoryCreation,
272
+ onSuccess: () => {
273
+ queryClient.invalidateQueries({ queryKey: ['control-status'] });
274
+ },
275
+ });
276
+ }
277
+
278
+ // ============================================
279
+ // VERSION API
280
+ // ============================================
281
+
282
+ // Version info from API
283
+ export interface VersionInfo {
284
+ currentVersion: string;
285
+ latestVersion: string | null;
286
+ updateAvailable: boolean;
287
+ checkedAt: string;
288
+ cacheHit: boolean;
289
+ }
290
+
291
+ // Update result from API
292
+ export interface UpdateResult {
293
+ success: boolean;
294
+ previousVersion: string;
295
+ newVersion: string | null;
296
+ error?: string;
297
+ requiresRestart: boolean;
298
+ }
299
+
300
+ // Fetch current version
301
+ async function fetchVersion(): Promise<{ version: string }> {
302
+ const response = await fetch(`${API_BASE}/api/version`);
303
+ if (!response.ok) throw new Error('Failed to fetch version');
304
+ return response.json();
305
+ }
306
+
307
+ // Check for updates
308
+ async function checkForUpdates(force = false): Promise<VersionInfo> {
309
+ const params = force ? '?force=true' : '';
310
+ const response = await fetch(`${API_BASE}/api/version/check${params}`);
311
+ if (!response.ok) throw new Error('Failed to check for updates');
312
+ return response.json();
313
+ }
314
+
315
+ // Perform update
316
+ async function performUpdate(): Promise<UpdateResult> {
317
+ const response = await fetch(`${API_BASE}/api/version/update`, {
318
+ method: 'POST',
319
+ });
320
+ if (!response.ok) throw new Error('Failed to perform update');
321
+ return response.json();
322
+ }
323
+
324
+ // Restart server
325
+ async function restartServer(): Promise<{ success: boolean; message: string }> {
326
+ const response = await fetch(`${API_BASE}/api/version/restart`, {
327
+ method: 'POST',
328
+ });
329
+ if (!response.ok) throw new Error('Failed to restart server');
330
+ return response.json();
331
+ }
332
+
333
+ // Hook: Get current version
334
+ export function useVersion() {
335
+ return useQuery({
336
+ queryKey: ['version'],
337
+ queryFn: fetchVersion,
338
+ staleTime: Infinity, // Version doesn't change during session
339
+ });
340
+ }
341
+
342
+ // Hook: Check for updates (enabled on demand)
343
+ export function useCheckForUpdates(enabled = false) {
344
+ return useQuery({
345
+ queryKey: ['version-check'],
346
+ queryFn: () => checkForUpdates(false),
347
+ enabled,
348
+ staleTime: 5 * 60 * 1000, // Match server cache TTL (5 minutes)
349
+ });
350
+ }
351
+
352
+ // Hook: Force check for updates
353
+ export function useForceCheckForUpdates() {
354
+ const queryClient = useQueryClient();
355
+
356
+ return useMutation({
357
+ mutationFn: () => checkForUpdates(true),
358
+ onSuccess: data => {
359
+ queryClient.setQueryData(['version-check'], data);
360
+ },
361
+ });
362
+ }
363
+
364
+ // Hook: Perform update
365
+ export function usePerformUpdate() {
366
+ const queryClient = useQueryClient();
367
+
368
+ return useMutation({
369
+ mutationFn: performUpdate,
370
+ onSuccess: result => {
371
+ if (result.success) {
372
+ // Invalidate version queries to pick up new version
373
+ queryClient.invalidateQueries({ queryKey: ['version'] });
374
+ queryClient.invalidateQueries({ queryKey: ['version-check'] });
375
+ }
376
+ },
377
+ });
378
+ }
379
+
380
+ // Hook: Restart server
381
+ export function useRestartServer() {
382
+ return useMutation({
383
+ mutationFn: restartServer,
384
+ });
385
+ }
386
+
387
+ // ============================================
388
+ // INSIGHTS API
389
+ // ============================================
390
+
391
+ // Activity data for heatmap
392
+ export interface ActivityDay {
393
+ date: string;
394
+ count: number;
395
+ }
396
+
397
+ async function fetchActivity(project?: string): Promise<{ activity: ActivityDay[] }> {
398
+ const params = project ? `?project=${project}` : '';
399
+ const response = await fetch(`${API_BASE}/api/memories/activity${params}`);
400
+ if (!response.ok) throw new Error('Failed to fetch activity');
401
+ return response.json();
402
+ }
403
+
404
+ export function useActivity(project?: string) {
405
+ return useQuery({
406
+ queryKey: ['activity', project],
407
+ queryFn: () => fetchActivity(project),
408
+ staleTime: 5 * 60 * 1000,
409
+ });
410
+ }
411
+
412
+ // Memory quality data
413
+ export interface QualityData {
414
+ neverAccessed: { count: number; items: Array<Record<string, unknown>> };
415
+ stale: { count: number; items: Array<Record<string, unknown>> };
416
+ duplicates: { count: number; items: Array<Record<string, unknown>> };
417
+ }
418
+
419
+ async function fetchQuality(project?: string): Promise<QualityData> {
420
+ const params = project ? `?project=${project}` : '';
421
+ const response = await fetch(`${API_BASE}/api/memories/quality${params}`);
422
+ if (!response.ok) throw new Error('Failed to fetch quality');
423
+ return response.json();
424
+ }
425
+
426
+ export function useQuality(project?: string) {
427
+ return useQuery({
428
+ queryKey: ['quality', project],
429
+ queryFn: () => fetchQuality(project),
430
+ staleTime: 5 * 60 * 1000,
431
+ });
432
+ }
433
+
434
+ // Contradictions data
435
+ export interface Contradiction {
436
+ memoryAId: number;
437
+ memoryATitle: string;
438
+ memoryBId: number;
439
+ memoryBTitle: string;
440
+ score: number;
441
+ reason: string;
442
+ sharedTopics: string[];
443
+ }
444
+
445
+ async function fetchContradictions(project?: string): Promise<{ contradictions: Contradiction[]; count: number }> {
446
+ const params = project ? `?project=${project}` : '';
447
+ const response = await fetch(`${API_BASE}/api/contradictions${params}`);
448
+ if (!response.ok) throw new Error('Failed to fetch contradictions');
449
+ return response.json();
450
+ }
451
+
452
+ export function useContradictions(project?: string) {
453
+ return useQuery({
454
+ queryKey: ['contradictions', project],
455
+ queryFn: () => fetchContradictions(project),
456
+ staleTime: 5 * 60 * 1000,
457
+ });
458
+ }
@@ -0,0 +1,46 @@
1
+ /**
2
+ * Search Suggestions Hook
3
+ *
4
+ * Fetches autocomplete suggestions for the search input.
5
+ */
6
+
7
+ import { useQuery } from '@tanstack/react-query';
8
+ import { useDebouncedValue } from './useDebouncedValue';
9
+
10
+ const API_URL = process.env.NEXT_PUBLIC_API_URL || 'http://localhost:3001';
11
+
12
+ interface Suggestion {
13
+ text: string;
14
+ type: 'title' | 'category' | 'project';
15
+ count: number;
16
+ }
17
+
18
+ async function fetchSuggestions(query: string): Promise<Suggestion[]> {
19
+ if (!query || query.length < 2) {
20
+ return [];
21
+ }
22
+
23
+ const response = await fetch(
24
+ `${API_URL}/api/suggestions?q=${encodeURIComponent(query)}&limit=8`
25
+ );
26
+
27
+ if (!response.ok) {
28
+ throw new Error('Failed to fetch suggestions');
29
+ }
30
+
31
+ const data = await response.json();
32
+ return data.suggestions;
33
+ }
34
+
35
+ export function useSuggestions(query: string) {
36
+ // Debounce the query to avoid too many requests
37
+ const debouncedQuery = useDebouncedValue(query, 200);
38
+
39
+ return useQuery({
40
+ queryKey: ['suggestions', debouncedQuery],
41
+ queryFn: () => fetchSuggestions(debouncedQuery),
42
+ enabled: debouncedQuery.length >= 2,
43
+ staleTime: 30000, // Cache for 30 seconds
44
+ refetchOnWindowFocus: false,
45
+ });
46
+ }
@@ -0,0 +1,84 @@
1
+ /**
2
+ * Category Colors
3
+ * Visual color mappings for memory categories
4
+ *
5
+ * Includes both classic (cool blue/purple) and Jarvis (warm gold/orange) palettes
6
+ */
7
+
8
+ import { MemoryCategory, MemoryType } from '@/types/memory';
9
+
10
+ // Classic color palette (cool blues and purples)
11
+ export const CATEGORY_COLORS: Record<MemoryCategory, string> = {
12
+ architecture: '#3B82F6', // Blue
13
+ pattern: '#8B5CF6', // Purple
14
+ preference: '#EC4899', // Pink
15
+ error: '#EF4444', // Red
16
+ context: '#10B981', // Green
17
+ learning: '#F59E0B', // Amber
18
+ todo: '#F97316', // Orange
19
+ note: '#6B7280', // Gray
20
+ relationship: '#06B6D4', // Cyan
21
+ custom: '#A855F7', // Violet
22
+ };
23
+
24
+ export const TYPE_COLORS: Record<MemoryType, string> = {
25
+ short_term: '#F97316', // Orange
26
+ long_term: '#3B82F6', // Blue
27
+ episodic: '#8B5CF6', // Purple
28
+ };
29
+
30
+ // Jarvis color palette (warm gold/orange holographic style)
31
+ export const JARVIS_CATEGORY_COLORS: Record<MemoryCategory, string> = {
32
+ architecture: '#FFD700', // Bright gold
33
+ pattern: '#FFB347', // Warm gold
34
+ preference: '#FFA500', // Pure orange
35
+ error: '#FF6B6B', // Keep red-ish for errors
36
+ context: '#FFC080', // Soft peach
37
+ learning: '#FFE4B5', // Moccasin
38
+ todo: '#FF8C00', // Deep orange
39
+ note: '#FFCC66', // Light amber
40
+ relationship: '#00D4FF', // Cyan accent
41
+ custom: '#FFB347', // Warm gold
42
+ };
43
+
44
+ export const JARVIS_TYPE_COLORS: Record<MemoryType, string> = {
45
+ short_term: '#FFD700', // Bright gold (front)
46
+ episodic: '#FFB347', // Warm gold (middle)
47
+ long_term: '#FF8C00', // Deep orange (back)
48
+ };
49
+
50
+ // Color mode toggle - defaults to Jarvis mode
51
+ let useJarvisColors = true;
52
+
53
+ export function setUseJarvisColors(value: boolean): void {
54
+ useJarvisColors = value;
55
+ }
56
+
57
+ export function getUseJarvisColors(): boolean {
58
+ return useJarvisColors;
59
+ }
60
+
61
+ export function getCategoryColor(category: MemoryCategory): string {
62
+ if (useJarvisColors) {
63
+ return JARVIS_CATEGORY_COLORS[category] || JARVIS_CATEGORY_COLORS.custom;
64
+ }
65
+ return CATEGORY_COLORS[category] || CATEGORY_COLORS.custom;
66
+ }
67
+
68
+ export function getTypeColor(type: MemoryType): string {
69
+ if (useJarvisColors) {
70
+ return JARVIS_TYPE_COLORS[type] || JARVIS_TYPE_COLORS.short_term;
71
+ }
72
+ return TYPE_COLORS[type] || TYPE_COLORS.short_term;
73
+ }
74
+
75
+ export function hexToRgb(hex: string): { r: number; g: number; b: number } {
76
+ const result = /^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i.exec(hex);
77
+ return result
78
+ ? {
79
+ r: parseInt(result[1], 16) / 255,
80
+ g: parseInt(result[2], 16) / 255,
81
+ b: parseInt(result[3], 16) / 255,
82
+ }
83
+ : { r: 1, g: 1, b: 1 };
84
+ }