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,323 @@
1
+ 'use client';
2
+
3
+ /**
4
+ * Electron Flow
5
+ * GPU-efficient particle system showing electrical signals flowing through the brain
6
+ * Uses buffer attributes for performant animation of many particles
7
+ */
8
+
9
+ import { useMemo, useRef } from 'react';
10
+ import { useFrame } from '@react-three/fiber';
11
+ import * as THREE from 'three';
12
+
13
+ interface ElectronFlowProps {
14
+ count?: number;
15
+ speed?: number;
16
+ color?: string;
17
+ size?: number;
18
+ }
19
+
20
+ /**
21
+ * Main electron flow through the brain
22
+ * Particles flow from front (STM) to back (LTM) with some randomness
23
+ */
24
+ export function ElectronFlow({
25
+ count = 250,
26
+ speed = 0.5,
27
+ color = '#FFD700',
28
+ size = 0.04,
29
+ }: ElectronFlowProps) {
30
+ const pointsRef = useRef<THREE.Points>(null);
31
+
32
+ // Initialize particle positions, velocities, and properties
33
+ const { positions, velocities, phases, colors } = useMemo(() => {
34
+ const positions = new Float32Array(count * 3);
35
+ const velocities = new Float32Array(count * 3);
36
+ const phases = new Float32Array(count);
37
+ const colors = new Float32Array(count * 3);
38
+
39
+ for (let i = 0; i < count; i++) {
40
+ // Random position within brain volume
41
+ const theta = Math.random() * Math.PI * 2;
42
+ const phi = Math.PI * 0.2 + Math.random() * Math.PI * 0.6;
43
+ const r = 1.5 + Math.random() * 2;
44
+
45
+ positions[i * 3] = r * Math.sin(phi) * Math.cos(theta);
46
+ positions[i * 3 + 1] = r * Math.cos(phi);
47
+ positions[i * 3 + 2] = -3 + Math.random() * 6;
48
+
49
+ // Velocity - mostly flowing backward (STM to LTM direction)
50
+ velocities[i * 3] = (Math.random() - 0.5) * 0.3;
51
+ velocities[i * 3 + 1] = (Math.random() - 0.5) * 0.2;
52
+ velocities[i * 3 + 2] = -0.5 - Math.random() * 0.5; // Backward flow
53
+
54
+ // Random phase for varied animation
55
+ phases[i] = Math.random() * Math.PI * 2;
56
+
57
+ // Color gradient based on Z position (front=bright gold, middle=warm gold, back=deep orange)
58
+ const normalizedZ = (positions[i * 3 + 2] + 3) / 6;
59
+ if (normalizedZ > 0.6) {
60
+ // Front - bright gold (#FFD700)
61
+ colors[i * 3] = 1.0;
62
+ colors[i * 3 + 1] = 0.843;
63
+ colors[i * 3 + 2] = 0.0;
64
+ } else if (normalizedZ > 0.4) {
65
+ // Middle - warm gold (#FFB347)
66
+ colors[i * 3] = 1.0;
67
+ colors[i * 3 + 1] = 0.702;
68
+ colors[i * 3 + 2] = 0.278;
69
+ } else {
70
+ // Back - deep orange (#FF8C00)
71
+ colors[i * 3] = 1.0;
72
+ colors[i * 3 + 1] = 0.549;
73
+ colors[i * 3 + 2] = 0.0;
74
+ }
75
+ }
76
+
77
+ return { positions, velocities, phases, colors };
78
+ }, [count]);
79
+
80
+ // Animate particles
81
+ useFrame((state, delta) => {
82
+ if (!pointsRef.current) return;
83
+
84
+ const positionAttr = pointsRef.current.geometry.attributes
85
+ .position as THREE.BufferAttribute;
86
+ const colorAttr = pointsRef.current.geometry.attributes
87
+ .color as THREE.BufferAttribute;
88
+ const positions = positionAttr.array as Float32Array;
89
+ const colors = colorAttr.array as Float32Array;
90
+
91
+ for (let i = 0; i < count; i++) {
92
+ // Update position based on velocity
93
+ positions[i * 3] += velocities[i * 3] * delta * speed;
94
+ positions[i * 3 + 1] += velocities[i * 3 + 1] * delta * speed;
95
+ positions[i * 3 + 2] += velocities[i * 3 + 2] * delta * speed;
96
+
97
+ // Add some wave motion
98
+ const phase = phases[i];
99
+ positions[i * 3] += Math.sin(state.clock.elapsedTime * 2 + phase) * 0.002;
100
+ positions[i * 3 + 1] += Math.cos(state.clock.elapsedTime * 1.5 + phase) * 0.002;
101
+
102
+ // Wrap around when reaching back of brain
103
+ if (positions[i * 3 + 2] < -3.5) {
104
+ positions[i * 3 + 2] = 3.5;
105
+ // Randomize X and Y on wrap
106
+ const theta = Math.random() * Math.PI * 2;
107
+ const r = 1 + Math.random() * 2;
108
+ positions[i * 3] = r * Math.cos(theta);
109
+ positions[i * 3 + 1] = (Math.random() - 0.5) * 2;
110
+ }
111
+
112
+ // Update color based on new Z position (golden gradient)
113
+ const normalizedZ = (positions[i * 3 + 2] + 3.5) / 7;
114
+ if (normalizedZ > 0.6) {
115
+ // Front - bright gold (#FFD700)
116
+ colors[i * 3] = 1.0;
117
+ colors[i * 3 + 1] = 0.843;
118
+ colors[i * 3 + 2] = 0.0;
119
+ } else if (normalizedZ > 0.35) {
120
+ // Middle - warm gold (#FFB347)
121
+ colors[i * 3] = 1.0;
122
+ colors[i * 3 + 1] = 0.702;
123
+ colors[i * 3 + 2] = 0.278;
124
+ } else {
125
+ // Back - deep orange (#FF8C00)
126
+ colors[i * 3] = 1.0;
127
+ colors[i * 3 + 1] = 0.549;
128
+ colors[i * 3 + 2] = 0.0;
129
+ }
130
+ }
131
+
132
+ positionAttr.needsUpdate = true;
133
+ colorAttr.needsUpdate = true;
134
+ });
135
+
136
+ return (
137
+ <points ref={pointsRef}>
138
+ <bufferGeometry>
139
+ <bufferAttribute
140
+ attach="attributes-position"
141
+ args={[positions, 3]}
142
+ />
143
+ <bufferAttribute
144
+ attach="attributes-color"
145
+ args={[colors, 3]}
146
+ />
147
+ </bufferGeometry>
148
+ <pointsMaterial
149
+ size={size}
150
+ vertexColors
151
+ transparent
152
+ opacity={0.8}
153
+ blending={THREE.AdditiveBlending}
154
+ depthWrite={false}
155
+ sizeAttenuation
156
+ />
157
+ </points>
158
+ );
159
+ }
160
+
161
+ /**
162
+ * Radial burst of electrons (for action potential visualization)
163
+ */
164
+ interface ElectronBurstProps {
165
+ origin: [number, number, number];
166
+ count?: number;
167
+ duration?: number;
168
+ color?: string;
169
+ onComplete?: () => void;
170
+ }
171
+
172
+ export function ElectronBurst({
173
+ origin,
174
+ count = 20,
175
+ duration = 1,
176
+ color = '#ffffff',
177
+ onComplete,
178
+ }: ElectronBurstProps) {
179
+ const pointsRef = useRef<THREE.Points>(null);
180
+ const progressRef = useRef(0);
181
+
182
+ const { positions, velocities } = useMemo(() => {
183
+ const positions = new Float32Array(count * 3);
184
+ const velocities = new Float32Array(count * 3);
185
+
186
+ for (let i = 0; i < count; i++) {
187
+ // Start at origin
188
+ positions[i * 3] = origin[0];
189
+ positions[i * 3 + 1] = origin[1];
190
+ positions[i * 3 + 2] = origin[2];
191
+
192
+ // Random outward velocity
193
+ const theta = Math.random() * Math.PI * 2;
194
+ const phi = Math.random() * Math.PI;
195
+ const speed = 1 + Math.random() * 2;
196
+
197
+ velocities[i * 3] = Math.sin(phi) * Math.cos(theta) * speed;
198
+ velocities[i * 3 + 1] = Math.cos(phi) * speed;
199
+ velocities[i * 3 + 2] = Math.sin(phi) * Math.sin(theta) * speed;
200
+ }
201
+
202
+ return { positions, velocities };
203
+ }, [origin, count]);
204
+
205
+ useFrame((_, delta) => {
206
+ if (!pointsRef.current) return;
207
+
208
+ progressRef.current += delta / duration;
209
+
210
+ if (progressRef.current >= 1) {
211
+ onComplete?.();
212
+ return;
213
+ }
214
+
215
+ const positionAttr = pointsRef.current.geometry.attributes
216
+ .position as THREE.BufferAttribute;
217
+ const positions = positionAttr.array as Float32Array;
218
+
219
+ for (let i = 0; i < count; i++) {
220
+ positions[i * 3] += velocities[i * 3] * delta;
221
+ positions[i * 3 + 1] += velocities[i * 3 + 1] * delta;
222
+ positions[i * 3 + 2] += velocities[i * 3 + 2] * delta;
223
+ }
224
+
225
+ positionAttr.needsUpdate = true;
226
+
227
+ // Fade out
228
+ (pointsRef.current.material as THREE.PointsMaterial).opacity =
229
+ 0.9 * (1 - progressRef.current);
230
+ });
231
+
232
+ return (
233
+ <points ref={pointsRef}>
234
+ <bufferGeometry>
235
+ <bufferAttribute
236
+ attach="attributes-position"
237
+ args={[positions, 3]}
238
+ />
239
+ </bufferGeometry>
240
+ <pointsMaterial
241
+ size={0.06}
242
+ color={color}
243
+ transparent
244
+ opacity={0.9}
245
+ blending={THREE.AdditiveBlending}
246
+ depthWrite={false}
247
+ />
248
+ </points>
249
+ );
250
+ }
251
+
252
+ /**
253
+ * Spiral flow around the brain (decorative)
254
+ */
255
+ export function SpiralFlow({
256
+ count = 60,
257
+ radius = 4,
258
+ speed = 0.3,
259
+ color = '#FFB347',
260
+ }: {
261
+ count?: number;
262
+ radius?: number;
263
+ speed?: number;
264
+ color?: string;
265
+ }) {
266
+ const pointsRef = useRef<THREE.Points>(null);
267
+
268
+ const { positions, phases } = useMemo(() => {
269
+ const positions = new Float32Array(count * 3);
270
+ const phases = new Float32Array(count);
271
+
272
+ for (let i = 0; i < count; i++) {
273
+ const t = i / count;
274
+ phases[i] = t * Math.PI * 4; // Multiple loops
275
+
276
+ positions[i * 3] = Math.cos(phases[i]) * radius;
277
+ positions[i * 3 + 1] = (t - 0.5) * 6;
278
+ positions[i * 3 + 2] = Math.sin(phases[i]) * radius;
279
+ }
280
+
281
+ return { positions, phases };
282
+ }, [count, radius]);
283
+
284
+ useFrame((state) => {
285
+ if (!pointsRef.current) return;
286
+
287
+ const positionAttr = pointsRef.current.geometry.attributes
288
+ .position as THREE.BufferAttribute;
289
+ const positions = positionAttr.array as Float32Array;
290
+ const time = state.clock.elapsedTime * speed;
291
+
292
+ for (let i = 0; i < count; i++) {
293
+ const t = i / count;
294
+ const phase = phases[i] + time;
295
+ const r = radius + Math.sin(phase * 2) * 0.3;
296
+
297
+ positions[i * 3] = Math.cos(phase) * r;
298
+ positions[i * 3 + 1] = (t - 0.5) * 6 + Math.sin(time + t * Math.PI * 2) * 0.2;
299
+ positions[i * 3 + 2] = Math.sin(phase) * r;
300
+ }
301
+
302
+ positionAttr.needsUpdate = true;
303
+ });
304
+
305
+ return (
306
+ <points ref={pointsRef}>
307
+ <bufferGeometry>
308
+ <bufferAttribute
309
+ attach="attributes-position"
310
+ args={[positions, 3]}
311
+ />
312
+ </bufferGeometry>
313
+ <pointsMaterial
314
+ size={0.05}
315
+ color={color}
316
+ transparent
317
+ opacity={0.4}
318
+ blending={THREE.AdditiveBlending}
319
+ depthWrite={false}
320
+ />
321
+ </points>
322
+ );
323
+ }
@@ -0,0 +1,235 @@
1
+ 'use client';
2
+
3
+ /**
4
+ * Holographic Grid
5
+ * Geodesic wireframe sphere surrounding the brain
6
+ * Creates the iconic Jarvis-style holographic grid effect
7
+ *
8
+ * Features:
9
+ * - IcosahedronGeometry with detail level 2 for geodesic look
10
+ * - EdgesGeometry for clean wireframe rendering
11
+ * - Subtle pulsing animation (opacity oscillation)
12
+ * - Scan line effect (bright band moving vertically through the grid)
13
+ */
14
+
15
+ import { useMemo, useRef, useEffect } from 'react';
16
+ import { useFrame } from '@react-three/fiber';
17
+ import * as THREE from 'three';
18
+
19
+ interface HolographicGridProps {
20
+ /** Radius of the geodesic sphere (default: 6) */
21
+ radius?: number;
22
+ /** Base color of the grid (default: #FFB347 - warm gold) */
23
+ color?: string;
24
+ /** Base opacity of the grid (default: 0.08) */
25
+ opacity?: number;
26
+ /** Enable pulsing animation (default: true) */
27
+ enablePulse?: boolean;
28
+ /** Enable scan line effect (default: true) */
29
+ enableScanLine?: boolean;
30
+ /** Speed of the scan line (default: 1) */
31
+ scanLineSpeed?: number;
32
+ /** Visibility toggle */
33
+ visible?: boolean;
34
+ }
35
+
36
+ /**
37
+ * Custom shader material for the holographic grid with scan line effect
38
+ */
39
+ function createGridShaderMaterial(color: THREE.Color, baseOpacity: number) {
40
+ return new THREE.ShaderMaterial({
41
+ uniforms: {
42
+ uColor: { value: color },
43
+ uBaseOpacity: { value: baseOpacity },
44
+ uPulseOpacity: { value: 0 },
45
+ uScanLineY: { value: 0 },
46
+ uScanLineWidth: { value: 0.3 },
47
+ uScanLineIntensity: { value: 0.15 },
48
+ uTime: { value: 0 },
49
+ },
50
+ vertexShader: `
51
+ varying vec3 vPosition;
52
+
53
+ void main() {
54
+ vPosition = position;
55
+ gl_Position = projectionMatrix * modelViewMatrix * vec4(position, 1.0);
56
+ }
57
+ `,
58
+ fragmentShader: `
59
+ uniform vec3 uColor;
60
+ uniform float uBaseOpacity;
61
+ uniform float uPulseOpacity;
62
+ uniform float uScanLineY;
63
+ uniform float uScanLineWidth;
64
+ uniform float uScanLineIntensity;
65
+ uniform float uTime;
66
+
67
+ varying vec3 vPosition;
68
+
69
+ void main() {
70
+ // Base opacity with pulse
71
+ float opacity = uBaseOpacity + uPulseOpacity;
72
+
73
+ // Scan line effect - bright band at current Y position
74
+ float scanLineDist = abs(vPosition.y - uScanLineY);
75
+ float scanLineEffect = smoothstep(uScanLineWidth, 0.0, scanLineDist);
76
+
77
+ // Add scan line brightness
78
+ float finalOpacity = opacity + scanLineEffect * uScanLineIntensity;
79
+
80
+ // Slight color shift for scan line (more white/bright)
81
+ vec3 finalColor = mix(uColor, vec3(1.0, 0.95, 0.8), scanLineEffect * 0.5);
82
+
83
+ gl_FragColor = vec4(finalColor, finalOpacity);
84
+ }
85
+ `,
86
+ transparent: true,
87
+ depthWrite: false,
88
+ side: THREE.DoubleSide,
89
+ blending: THREE.AdditiveBlending,
90
+ });
91
+ }
92
+
93
+ export function HolographicGrid({
94
+ radius = 6,
95
+ color = '#FFB347',
96
+ opacity = 0.04,
97
+ enablePulse = true,
98
+ enableScanLine = true,
99
+ scanLineSpeed = 1,
100
+ visible = true,
101
+ }: HolographicGridProps) {
102
+ const lineSegmentsRef = useRef<THREE.LineSegments>(null);
103
+ const materialRef = useRef<THREE.ShaderMaterial | null>(null);
104
+
105
+ // Create the geodesic geometry and edges
106
+ const { geometry, edgesGeometry } = useMemo(() => {
107
+ // IcosahedronGeometry with detail level 2 creates a nice geodesic sphere
108
+ const icosahedron = new THREE.IcosahedronGeometry(radius, 2);
109
+ // EdgesGeometry extracts the edges for wireframe rendering
110
+ const edges = new THREE.EdgesGeometry(icosahedron);
111
+
112
+ return { geometry: icosahedron, edgesGeometry: edges };
113
+ }, [radius]);
114
+
115
+ // Create shader material
116
+ const material = useMemo(() => {
117
+ const colorObj = new THREE.Color(color);
118
+ return createGridShaderMaterial(colorObj, opacity);
119
+ }, [color, opacity]);
120
+
121
+ // Sync materialRef with material (cannot update ref during render)
122
+ useEffect(() => {
123
+ materialRef.current = material;
124
+ }, [material]);
125
+
126
+ // Cleanup on unmount
127
+ useEffect(() => {
128
+ return () => {
129
+ geometry.dispose();
130
+ edgesGeometry.dispose();
131
+ material.dispose();
132
+ };
133
+ }, [geometry, edgesGeometry, material]);
134
+
135
+ // Animation loop
136
+ useFrame((state) => {
137
+ if (!materialRef.current || !visible) return;
138
+
139
+ const time = state.clock.elapsedTime;
140
+ const uniforms = materialRef.current.uniforms;
141
+
142
+ // Update time uniform
143
+ uniforms.uTime.value = time;
144
+
145
+ // Subtle pulsing animation - opacity varies slightly
146
+ if (enablePulse) {
147
+ // Slow breathing effect with slight random flicker
148
+ const breathe = Math.sin(time * 0.8) * 0.015;
149
+ const flicker = Math.random() > 0.97 ? 0.02 : 0;
150
+ uniforms.uPulseOpacity.value = breathe + flicker;
151
+ } else {
152
+ uniforms.uPulseOpacity.value = 0;
153
+ }
154
+
155
+ // Scan line effect - bright band moving vertically
156
+ if (enableScanLine) {
157
+ // Scan line moves from bottom (-radius) to top (+radius) and wraps
158
+ const scanCycle = (time * scanLineSpeed * 0.3) % 1;
159
+ // Smooth ease in/out for the scan position
160
+ const eased = scanCycle < 0.5
161
+ ? 2 * scanCycle * scanCycle
162
+ : 1 - Math.pow(-2 * scanCycle + 2, 2) / 2;
163
+ const scanY = (eased * 2 - 1) * radius;
164
+ uniforms.uScanLineY.value = scanY;
165
+ }
166
+ });
167
+
168
+ if (!visible) return null;
169
+
170
+ return (
171
+ <lineSegments ref={lineSegmentsRef} geometry={edgesGeometry} material={material} />
172
+ );
173
+ }
174
+
175
+ /**
176
+ * Alternative simpler version using LineBasicMaterial (no scan line effect)
177
+ * Use this if you don't need the scan line or want better performance
178
+ */
179
+ export function HolographicGridSimple({
180
+ radius = 6,
181
+ color = '#FFB347',
182
+ opacity = 0.04,
183
+ enablePulse = true,
184
+ visible = true,
185
+ }: Omit<HolographicGridProps, 'enableScanLine' | 'scanLineSpeed'>) {
186
+ const lineSegmentsRef = useRef<THREE.LineSegments>(null);
187
+
188
+ // Create the geodesic geometry and edges
189
+ const { geometry, edgesGeometry } = useMemo(() => {
190
+ const icosahedron = new THREE.IcosahedronGeometry(radius, 2);
191
+ const edges = new THREE.EdgesGeometry(icosahedron);
192
+ return { geometry: icosahedron, edgesGeometry: edges };
193
+ }, [radius]);
194
+
195
+ // Create line material
196
+ const material = useMemo(() => {
197
+ return new THREE.LineBasicMaterial({
198
+ color: new THREE.Color(color),
199
+ transparent: true,
200
+ opacity: opacity,
201
+ depthWrite: false,
202
+ blending: THREE.AdditiveBlending,
203
+ });
204
+ }, [color, opacity]);
205
+
206
+ // Cleanup on unmount
207
+ useEffect(() => {
208
+ return () => {
209
+ geometry.dispose();
210
+ edgesGeometry.dispose();
211
+ material.dispose();
212
+ };
213
+ }, [geometry, edgesGeometry, material]);
214
+
215
+ // Pulsing animation
216
+ useFrame((state) => {
217
+ if (!lineSegmentsRef.current || !visible || !enablePulse) return;
218
+
219
+ const time = state.clock.elapsedTime;
220
+ const mat = lineSegmentsRef.current.material as THREE.LineBasicMaterial;
221
+
222
+ // Subtle breathing effect
223
+ const breathe = Math.sin(time * 0.8) * 0.015;
224
+ const flicker = Math.random() > 0.97 ? 0.02 : 0;
225
+ mat.opacity = opacity + breathe + flicker;
226
+ });
227
+
228
+ if (!visible) return null;
229
+
230
+ return (
231
+ <lineSegments ref={lineSegmentsRef} geometry={edgesGeometry} material={material} />
232
+ );
233
+ }
234
+
235
+ export default HolographicGrid;