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,103 @@
1
+ /**
2
+ * Forensic query helpers for the defence audit log
3
+ */
4
+ import { getDatabase } from '../../database/init.js';
5
+ // ── Query Functions ──
6
+ /**
7
+ * Query audit logs with flexible filters.
8
+ */
9
+ export function queryAuditLogs(options = {}) {
10
+ const db = getDatabase();
11
+ const conditions = [];
12
+ const params = {};
13
+ if (options.startTime) {
14
+ conditions.push('timestamp >= @startTime');
15
+ params.startTime = options.startTime;
16
+ }
17
+ if (options.endTime) {
18
+ conditions.push('timestamp <= @endTime');
19
+ params.endTime = options.endTime;
20
+ }
21
+ if (options.firewallResult) {
22
+ conditions.push('firewall_result = @firewallResult');
23
+ params.firewallResult = options.firewallResult;
24
+ }
25
+ if (options.source) {
26
+ conditions.push('source_type = @source');
27
+ params.source = options.source;
28
+ }
29
+ if (options.memoryId !== undefined) {
30
+ conditions.push('memory_id = @memoryId');
31
+ params.memoryId = options.memoryId;
32
+ }
33
+ const where = conditions.length > 0 ? `WHERE ${conditions.join(' AND ')}` : '';
34
+ const limit = options.limit ?? 50;
35
+ const sql = `SELECT * FROM defence_audit ${where} ORDER BY timestamp DESC LIMIT @limit`;
36
+ params.limit = limit;
37
+ return db.prepare(sql).all(params);
38
+ }
39
+ /**
40
+ * Get aggregate audit statistics for a time range.
41
+ */
42
+ export function getAuditStats(timeRange) {
43
+ const db = getDatabase();
44
+ const hoursMap = { '24h': 24, '7d': 168, '30d': 720 };
45
+ const hours = hoursMap[timeRange];
46
+ const since = new Date(Date.now() - hours * 3600_000).toISOString();
47
+ // Counts by firewall result
48
+ const counts = db.prepare(`
49
+ SELECT firewall_result, COUNT(*) as cnt
50
+ FROM defence_audit
51
+ WHERE timestamp >= ?
52
+ GROUP BY firewall_result
53
+ `).all(since);
54
+ let totalOperations = 0;
55
+ let allowedCount = 0;
56
+ let blockedCount = 0;
57
+ let quarantinedCount = 0;
58
+ for (const row of counts) {
59
+ totalOperations += row.cnt;
60
+ if (row.firewall_result === 'ALLOW')
61
+ allowedCount = row.cnt;
62
+ else if (row.firewall_result === 'BLOCK')
63
+ blockedCount = row.cnt;
64
+ else if (row.firewall_result === 'QUARANTINE')
65
+ quarantinedCount = row.cnt;
66
+ }
67
+ // Top sources
68
+ const topSources = db.prepare(`
69
+ SELECT source_type as source, COUNT(*) as count
70
+ FROM defence_audit
71
+ WHERE timestamp >= ?
72
+ GROUP BY source_type
73
+ ORDER BY count DESC
74
+ LIMIT 10
75
+ `).all(since);
76
+ // Threat indicator breakdown
77
+ const rows = db.prepare(`
78
+ SELECT threat_indicators
79
+ FROM defence_audit
80
+ WHERE timestamp >= ? AND threat_indicators != '[]'
81
+ `).all(since);
82
+ const threatBreakdown = {};
83
+ for (const row of rows) {
84
+ try {
85
+ const indicators = JSON.parse(row.threat_indicators);
86
+ for (const indicator of indicators) {
87
+ threatBreakdown[indicator] = (threatBreakdown[indicator] ?? 0) + 1;
88
+ }
89
+ }
90
+ catch {
91
+ // Skip malformed JSON
92
+ }
93
+ }
94
+ return {
95
+ totalOperations,
96
+ allowedCount,
97
+ blockedCount,
98
+ quarantinedCount,
99
+ topSources,
100
+ threatBreakdown,
101
+ };
102
+ }
103
+ //# sourceMappingURL=queries.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"queries.js","sourceRoot":"","sources":["../../../src/defence/audit/queries.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * Anomaly Scorer
3
+ *
4
+ * Scores how anomalous content is compared to normal memory patterns.
5
+ * Returns 0 (normal) to 1 (very anomalous).
6
+ */
7
+ export declare function scoreAnomaly(content: string, title: string): number;
8
+ //# sourceMappingURL=anomaly-scorer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"anomaly-scorer.d.ts","sourceRoot":"","sources":["../../../src/defence/firewall/anomaly-scorer.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAQH,wBAAgB,YAAY,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAoDnE"}
@@ -0,0 +1,58 @@
1
+ /**
2
+ * Anomaly Scorer
3
+ *
4
+ * Scores how anomalous content is compared to normal memory patterns.
5
+ * Returns 0 (normal) to 1 (very anomalous).
6
+ */
7
+ const URL_PATTERN = /https?:\/\/[^\s"'<>]+/gi;
8
+ const SPECIAL_CHAR_PATTERN = /[^a-zA-Z0-9\s.,!?;:'"()\-]/g;
9
+ const ALL_CAPS_SECTION = /\b[A-Z]{5,}\b/g;
10
+ const EXCESSIVE_PUNCTUATION = /[!?]{3,}/g;
11
+ const CODE_INDICATORS = /[{}()\[\];=<>|&$`\\]/g;
12
+ export function scoreAnomaly(content, title) {
13
+ const signals = [];
14
+ // Very long content
15
+ if (content.length > 5000) {
16
+ signals.push(Math.min((content.length - 5000) / 10000, 1.0) * 0.3);
17
+ }
18
+ // Special character ratio
19
+ const specialChars = (content.match(SPECIAL_CHAR_PATTERN) || []).length;
20
+ const specialRatio = specialChars / Math.max(content.length, 1);
21
+ if (specialRatio > 0.15) {
22
+ signals.push(Math.min((specialRatio - 0.15) / 0.35, 1.0) * 0.25);
23
+ }
24
+ // Many URLs
25
+ const urls = content.match(URL_PATTERN) || [];
26
+ if (urls.length > 3) {
27
+ signals.push(Math.min((urls.length - 3) / 7, 1.0) * 0.2);
28
+ }
29
+ // Mixed natural language with code/commands
30
+ const words = content.split(/\s+/).length;
31
+ const codeChars = (content.match(CODE_INDICATORS) || []).length;
32
+ const codeRatio = codeChars / Math.max(content.length, 1);
33
+ const hasNaturalLanguage = words > 10;
34
+ if (hasNaturalLanguage && codeRatio > 0.05) {
35
+ signals.push(Math.min(codeRatio / 0.15, 1.0) * 0.2);
36
+ }
37
+ // ALL CAPS sections
38
+ const capsMatches = content.match(ALL_CAPS_SECTION) || [];
39
+ if (capsMatches.length > 2) {
40
+ signals.push(Math.min(capsMatches.length / 10, 1.0) * 0.15);
41
+ }
42
+ // Excessive punctuation
43
+ const punctMatches = content.match(EXCESSIVE_PUNCTUATION) || [];
44
+ if (punctMatches.length > 0) {
45
+ signals.push(Math.min(punctMatches.length / 5, 1.0) * 0.15);
46
+ }
47
+ // Title anomalies — very long or very short titles
48
+ if (title.length > 200) {
49
+ signals.push(0.1);
50
+ }
51
+ else if (title.length === 0) {
52
+ signals.push(0.05);
53
+ }
54
+ // Sum all signals, cap at 1.0
55
+ const score = Math.min(signals.reduce((a, b) => a + b, 0), 1.0);
56
+ return Math.round(score * 100) / 100;
57
+ }
58
+ //# sourceMappingURL=anomaly-scorer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"anomaly-scorer.js","sourceRoot":"","sources":["../../../src/defence/firewall/anomaly-scorer.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ /**
2
+ * Encoding Detector
3
+ *
4
+ * Detects obfuscation attempts including base64, unicode tricks,
5
+ * hex encoding, suspicious URL encoding, and invisible characters.
6
+ */
7
+ export interface EncodingDetectionResult {
8
+ detected: boolean;
9
+ encodingTypes: string[];
10
+ decodedSnippets: string[];
11
+ }
12
+ export declare function detectEncoding(content: string): EncodingDetectionResult;
13
+ //# sourceMappingURL=encoding-detector.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"encoding-detector.d.ts","sourceRoot":"","sources":["../../../src/defence/firewall/encoding-detector.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,MAAM,WAAW,uBAAuB;IACtC,QAAQ,EAAE,OAAO,CAAC;IAClB,aAAa,EAAE,MAAM,EAAE,CAAC;IACxB,eAAe,EAAE,MAAM,EAAE,CAAC;CAC3B;AA8DD,wBAAgB,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,uBAAuB,CAgEvE"}
@@ -0,0 +1,120 @@
1
+ /**
2
+ * Encoding Detector
3
+ *
4
+ * Detects obfuscation attempts including base64, unicode tricks,
5
+ * hex encoding, suspicious URL encoding, and invisible characters.
6
+ */
7
+ // Base64: at least 20 chars of base64 alphabet, optionally padded
8
+ const BASE64_PATTERN = /(?:[A-Za-z0-9+/]{4}){5,}(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?/g;
9
+ // Hex sequences
10
+ const HEX_PATTERN = /(?:0x[0-9a-fA-F]{2}\s*){4,}|(?:\\x[0-9a-fA-F]{2}){4,}/g;
11
+ // Suspicious URL encoding (4+ encoded chars in sequence)
12
+ const URL_ENCODING_PATTERN = /(?:%[0-9A-Fa-f]{2}){4,}/g;
13
+ // Zero-width characters
14
+ const ZERO_WIDTH_PATTERN = /[\u200B\u200C\u200D\uFEFF]/g;
15
+ // RTL override
16
+ const RTL_OVERRIDE_PATTERN = /\u202E/g;
17
+ // Unicode homoglyphs — Cyrillic characters that look like Latin
18
+ const CYRILLIC_HOMOGLYPHS = /[\u0430\u0435\u043E\u0440\u0441\u0443\u0445\u0410\u0412\u0415\u041A\u041C\u041D\u041E\u0420\u0421\u0422\u0423\u0425]/g;
19
+ function tryBase64Decode(str) {
20
+ try {
21
+ const decoded = Buffer.from(str, 'base64').toString('utf-8');
22
+ // Check if decoded result looks like readable text (mostly printable ASCII)
23
+ const printableRatio = decoded.replace(/[^\x20-\x7E]/g, '').length / decoded.length;
24
+ if (printableRatio > 0.7 && decoded.length > 3) {
25
+ return decoded.slice(0, 100);
26
+ }
27
+ return null;
28
+ }
29
+ catch {
30
+ return null;
31
+ }
32
+ }
33
+ function tryHexDecode(str) {
34
+ try {
35
+ const hexChars = str.replace(/0x|\\x|\s/g, '');
36
+ const bytes = hexChars.match(/.{2}/g);
37
+ if (!bytes)
38
+ return null;
39
+ const decoded = bytes.map((b) => String.fromCharCode(parseInt(b, 16))).join('');
40
+ const printableRatio = decoded.replace(/[^\x20-\x7E]/g, '').length / decoded.length;
41
+ if (printableRatio > 0.7 && decoded.length > 3) {
42
+ return decoded.slice(0, 100);
43
+ }
44
+ return null;
45
+ }
46
+ catch {
47
+ return null;
48
+ }
49
+ }
50
+ function tryUrlDecode(str) {
51
+ try {
52
+ const decoded = decodeURIComponent(str);
53
+ if (decoded !== str && decoded.length > 3) {
54
+ return decoded.slice(0, 100);
55
+ }
56
+ return null;
57
+ }
58
+ catch {
59
+ return null;
60
+ }
61
+ }
62
+ export function detectEncoding(content) {
63
+ const encodingTypes = [];
64
+ const decodedSnippets = [];
65
+ // Base64
66
+ const base64Matches = content.match(BASE64_PATTERN);
67
+ if (base64Matches) {
68
+ for (const match of base64Matches) {
69
+ const decoded = tryBase64Decode(match);
70
+ if (decoded) {
71
+ encodingTypes.push('base64');
72
+ decodedSnippets.push(decoded);
73
+ break;
74
+ }
75
+ }
76
+ }
77
+ // Hex encoding
78
+ const hexMatches = content.match(HEX_PATTERN);
79
+ if (hexMatches) {
80
+ for (const match of hexMatches) {
81
+ const decoded = tryHexDecode(match);
82
+ if (decoded) {
83
+ encodingTypes.push('hex');
84
+ decodedSnippets.push(decoded);
85
+ break;
86
+ }
87
+ }
88
+ }
89
+ // URL encoding
90
+ const urlMatches = content.match(URL_ENCODING_PATTERN);
91
+ if (urlMatches) {
92
+ for (const match of urlMatches) {
93
+ const decoded = tryUrlDecode(match);
94
+ if (decoded) {
95
+ encodingTypes.push('url_encoding');
96
+ decodedSnippets.push(decoded);
97
+ break;
98
+ }
99
+ }
100
+ }
101
+ // Zero-width characters
102
+ if (ZERO_WIDTH_PATTERN.test(content)) {
103
+ encodingTypes.push('zero_width_chars');
104
+ }
105
+ // RTL override
106
+ if (RTL_OVERRIDE_PATTERN.test(content)) {
107
+ encodingTypes.push('rtl_override');
108
+ }
109
+ // Unicode homoglyphs
110
+ const homoglyphMatches = content.match(CYRILLIC_HOMOGLYPHS);
111
+ if (homoglyphMatches && homoglyphMatches.length >= 2) {
112
+ encodingTypes.push('unicode_homoglyph');
113
+ }
114
+ return {
115
+ detected: encodingTypes.length > 0,
116
+ encodingTypes: [...new Set(encodingTypes)],
117
+ decodedSnippets,
118
+ };
119
+ }
120
+ //# sourceMappingURL=encoding-detector.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"encoding-detector.js","sourceRoot":"","sources":["../../../src/defence/firewall/encoding-detector.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,21 @@
1
+ /**
2
+ * Memory Firewall
3
+ *
4
+ * Orchestrates all detection modules to scan memory writes for threats.
5
+ * Combines instruction detection, privilege escalation detection,
6
+ * encoding obfuscation detection, and anomaly scoring into a single
7
+ * firewall analysis result.
8
+ */
9
+ import type { FirewallAnalysis, DefenceSource, DefenceConfig } from '../types.js';
10
+ export { detectInstructions } from './instruction-detector.js';
11
+ export type { InstructionDetectionResult } from './instruction-detector.js';
12
+ export { detectPrivilegeEscalation } from './privilege-detector.js';
13
+ export type { PrivilegeDetectionResult } from './privilege-detector.js';
14
+ export { detectEncoding } from './encoding-detector.js';
15
+ export type { EncodingDetectionResult } from './encoding-detector.js';
16
+ export { scoreAnomaly } from './anomaly-scorer.js';
17
+ /**
18
+ * Run the full firewall analysis pipeline on memory content.
19
+ */
20
+ export declare function analyzeFirewall(content: string, title: string, source: DefenceSource, trustScore: number, config: DefenceConfig): FirewallAnalysis;
21
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/defence/firewall/index.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EACV,gBAAgB,EAEhB,aAAa,EACb,aAAa,EAEd,MAAM,aAAa,CAAC;AAcrB,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAC/D,YAAY,EAAE,0BAA0B,EAAE,MAAM,2BAA2B,CAAC;AAC5E,OAAO,EAAE,yBAAyB,EAAE,MAAM,yBAAyB,CAAC;AACpE,YAAY,EAAE,wBAAwB,EAAE,MAAM,yBAAyB,CAAC;AACxE,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AACxD,YAAY,EAAE,uBAAuB,EAAE,MAAM,wBAAwB,CAAC;AACtE,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAEnD;;GAEG;AACH,wBAAgB,eAAe,CAC7B,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,aAAa,EACrB,UAAU,EAAE,MAAM,EAClB,MAAM,EAAE,aAAa,GACpB,gBAAgB,CAoDlB"}
@@ -0,0 +1,133 @@
1
+ /**
2
+ * Memory Firewall
3
+ *
4
+ * Orchestrates all detection modules to scan memory writes for threats.
5
+ * Combines instruction detection, privilege escalation detection,
6
+ * encoding obfuscation detection, and anomaly scoring into a single
7
+ * firewall analysis result.
8
+ */
9
+ import { detectInstructions } from './instruction-detector.js';
10
+ import { detectPrivilegeEscalation } from './privilege-detector.js';
11
+ import { detectEncoding } from './encoding-detector.js';
12
+ import { scoreAnomaly } from './anomaly-scorer.js';
13
+ // Re-exports
14
+ export { detectInstructions } from './instruction-detector.js';
15
+ export { detectPrivilegeEscalation } from './privilege-detector.js';
16
+ export { detectEncoding } from './encoding-detector.js';
17
+ export { scoreAnomaly } from './anomaly-scorer.js';
18
+ /**
19
+ * Run the full firewall analysis pipeline on memory content.
20
+ */
21
+ export function analyzeFirewall(content, title, source, trustScore, config) {
22
+ const instructions = detectInstructions(content);
23
+ const privilege = detectPrivilegeEscalation(content);
24
+ const encoding = detectEncoding(content);
25
+ const anomaly = scoreAnomaly(content, title);
26
+ // Collect threat indicators
27
+ const threatIndicators = [];
28
+ const blockedPatterns = [];
29
+ if (instructions.detected) {
30
+ threatIndicators.push('instruction_injection');
31
+ blockedPatterns.push(...instructions.patterns);
32
+ }
33
+ if (privilege.detected) {
34
+ if (privilege.indicators.includes('credential_reference')) {
35
+ threatIndicators.push('credential_leak');
36
+ }
37
+ if (privilege.indicators.includes('external_url')) {
38
+ threatIndicators.push('external_url');
39
+ }
40
+ if (privilege.indicators.includes('system_access') ||
41
+ privilege.indicators.includes('destructive_filesystem') ||
42
+ privilege.indicators.includes('network_exfiltration')) {
43
+ threatIndicators.push('privilege_escalation');
44
+ }
45
+ }
46
+ if (encoding.detected) {
47
+ threatIndicators.push('encoding_obfuscation');
48
+ blockedPatterns.push(...encoding.encodingTypes);
49
+ }
50
+ // Determine result based on mode
51
+ const { result, reason } = determineResult(config.mode, instructions, privilege, encoding, anomaly, trustScore, threatIndicators);
52
+ return {
53
+ result,
54
+ reason,
55
+ threatIndicators,
56
+ anomalyScore: anomaly,
57
+ blockedPatterns,
58
+ };
59
+ }
60
+ function determineResult(mode, instructions, privilege, encoding, anomalyScore, trustScore, threatIndicators) {
61
+ const lowTrust = trustScore < 0.5;
62
+ const detectionCount = threatIndicators.length;
63
+ // ── Strict mode: any detection blocks ──
64
+ if (mode === 'strict') {
65
+ if (detectionCount > 0) {
66
+ return {
67
+ result: 'BLOCK',
68
+ reason: `Strict mode: detected ${threatIndicators.join(', ')}`,
69
+ };
70
+ }
71
+ if (anomalyScore > 0.7) {
72
+ return {
73
+ result: 'BLOCK',
74
+ reason: `Strict mode: high anomaly score (${anomalyScore})`,
75
+ };
76
+ }
77
+ return { result: 'ALLOW', reason: 'No threats detected' };
78
+ }
79
+ // ── Permissive mode: always allow, but populate indicators ──
80
+ if (mode === 'permissive') {
81
+ const reason = detectionCount > 0
82
+ ? `Permissive mode: allowing despite ${threatIndicators.join(', ')}`
83
+ : 'No threats detected';
84
+ return { result: 'ALLOW', reason };
85
+ }
86
+ // ── Balanced mode ──
87
+ // Instruction injection → quarantine
88
+ if (instructions.detected) {
89
+ const result = lowTrust ? 'BLOCK' : 'QUARANTINE';
90
+ return {
91
+ result,
92
+ reason: `Instruction injection detected (confidence: ${instructions.confidence})${lowTrust ? ', low trust source' : ''}`,
93
+ };
94
+ }
95
+ // High severity privilege escalation → quarantine
96
+ if (privilege.detected && privilege.severity === 'high') {
97
+ const result = lowTrust ? 'BLOCK' : 'QUARANTINE';
98
+ return {
99
+ result,
100
+ reason: `High severity privilege escalation: ${privilege.indicators.join(', ')}${lowTrust ? ', low trust source' : ''}`,
101
+ };
102
+ }
103
+ // Encoding combined with another detection → quarantine
104
+ if (encoding.detected && detectionCount >= 2) {
105
+ return {
106
+ result: 'QUARANTINE',
107
+ reason: `Encoding obfuscation combined with ${threatIndicators.filter((t) => t !== 'encoding_obfuscation').join(', ')}`,
108
+ };
109
+ }
110
+ // Low trust bumps medium-severity detections to quarantine
111
+ if (lowTrust && detectionCount > 0) {
112
+ return {
113
+ result: 'QUARANTINE',
114
+ reason: `Low trust source (${trustScore}) with detections: ${threatIndicators.join(', ')}`,
115
+ };
116
+ }
117
+ // Single low-severity detection → allow with warning
118
+ if (detectionCount > 0) {
119
+ return {
120
+ result: 'ALLOW',
121
+ reason: `Low severity detections: ${threatIndicators.join(', ')}`,
122
+ };
123
+ }
124
+ // High anomaly score alone
125
+ if (anomalyScore > 0.7 && lowTrust) {
126
+ return {
127
+ result: 'QUARANTINE',
128
+ reason: `High anomaly score (${anomalyScore}) from low trust source`,
129
+ };
130
+ }
131
+ return { result: 'ALLOW', reason: 'No threats detected' };
132
+ }
133
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/defence/firewall/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ /**
2
+ * Instruction Detector
3
+ *
4
+ * Detects prompt injection and hidden instruction patterns in memory content.
5
+ */
6
+ export interface InstructionDetectionResult {
7
+ detected: boolean;
8
+ patterns: string[];
9
+ confidence: number;
10
+ }
11
+ export declare function detectInstructions(content: string): InstructionDetectionResult;
12
+ //# sourceMappingURL=instruction-detector.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"instruction-detector.d.ts","sourceRoot":"","sources":["../../../src/defence/firewall/instruction-detector.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,MAAM,WAAW,0BAA0B;IACzC,QAAQ,EAAE,OAAO,CAAC;IAClB,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;CACpB;AA2ED,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,MAAM,GAAG,0BAA0B,CA6B9E"}
@@ -0,0 +1,99 @@
1
+ /**
2
+ * Instruction Detector
3
+ *
4
+ * Detects prompt injection and hidden instruction patterns in memory content.
5
+ */
6
+ const PATTERN_GROUPS = [
7
+ {
8
+ name: 'system_prompt_marker',
9
+ weight: 0.9,
10
+ patterns: [
11
+ /\[SYSTEM:/i,
12
+ /<<SYS>>/i,
13
+ /\[INST\]/i,
14
+ /<\/s>/i,
15
+ /<\|im_start\|>/i,
16
+ /<\|system\|>/i,
17
+ /<\|endoftext\|>/i,
18
+ ],
19
+ },
20
+ {
21
+ name: 'hidden_instruction',
22
+ weight: 0.8,
23
+ patterns: [
24
+ /ignore\s+(all\s+)?previous\s+(instructions?|prompts?|context)/i,
25
+ /forget\s+everything/i,
26
+ /new\s+instructions?\s*:/i,
27
+ /you\s+are\s+now\b/i,
28
+ /act\s+as\s+(a\s+|an\s+)?/i,
29
+ /pretend\s+to\s+be/i,
30
+ /disregard\s+(all\s+)?(previous|above|prior)/i,
31
+ /override\s+(previous|all|system)/i,
32
+ ],
33
+ },
34
+ {
35
+ name: 'memory_manipulation',
36
+ weight: 0.7,
37
+ patterns: [
38
+ /save\s+(this\s+)?to\s+memory/i,
39
+ /remember\s+this\s+(instruction|command|rule)/i,
40
+ /store\s+this\s+instruction/i,
41
+ /when\s+(the\s+)?user\s+asks/i,
42
+ /always\s+respond\s+with/i,
43
+ /from\s+now\s+on\s*(,\s*)?always/i,
44
+ /inject\s+(into\s+)?memory/i,
45
+ ],
46
+ },
47
+ {
48
+ name: 'command_injection',
49
+ weight: 0.85,
50
+ patterns: [
51
+ /\beval\s*\(/i,
52
+ /\bexec\s*\(/i,
53
+ /\bsystem\s*\(/i,
54
+ /\bimport\s+os\b/i,
55
+ /\brun\s+command\b/i,
56
+ /\bexecute\s+(this\s+)?(command|code|script)/i,
57
+ /\b__import__\s*\(/i,
58
+ /\bsubprocess\b/i,
59
+ ],
60
+ },
61
+ {
62
+ name: 'delimiter_attack',
63
+ weight: 0.75,
64
+ patterns: [
65
+ /\n{5,}.*\b(instruction|command|system|ignore)\b/is,
66
+ /<!--\s*(instruction|command|system|ignore|inject|override).*?-->/is,
67
+ /\r?\n-{5,}\r?\n/,
68
+ /\r?\n={5,}\r?\n/,
69
+ ],
70
+ },
71
+ ];
72
+ export function detectInstructions(content) {
73
+ const matchedPatterns = [];
74
+ let totalWeight = 0;
75
+ let maxWeight = 0;
76
+ for (const group of PATTERN_GROUPS) {
77
+ for (const pattern of group.patterns) {
78
+ if (pattern.test(content)) {
79
+ matchedPatterns.push(group.name);
80
+ totalWeight += group.weight;
81
+ if (group.weight > maxWeight) {
82
+ maxWeight = group.weight;
83
+ }
84
+ break; // one match per group is enough
85
+ }
86
+ }
87
+ }
88
+ // Confidence is based on the strongest match + bonus for multiple groups
89
+ const groupBonus = Math.min((matchedPatterns.length - 1) * 0.1, 0.3);
90
+ const confidence = matchedPatterns.length > 0
91
+ ? Math.min(maxWeight + groupBonus, 1.0)
92
+ : 0;
93
+ return {
94
+ detected: matchedPatterns.length > 0,
95
+ patterns: [...new Set(matchedPatterns)],
96
+ confidence: Math.round(confidence * 100) / 100,
97
+ };
98
+ }
99
+ //# sourceMappingURL=instruction-detector.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"instruction-detector.js","sourceRoot":"","sources":["../../../src/defence/firewall/instruction-detector.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAcH,MAAM,cAAc,GAAmB;IACrC;QACE,IAAI,EAAE,sBAAsB;QAC5B,MAAM,EAAE,GAAG;QACX,QAAQ,EAAE;YACR,YAAY;YACZ,UAAU;YACV,WAAW;YACX,QAAQ;YACR,iBAAiB;YACjB,eAAe;YACf,kBAAkB;SACnB;KACF;IACD;QACE,IAAI,EAAE,oBAAoB;QAC1B,MAAM,EAAE,GAAG;QACX,QAAQ,EAAE;YACR,gEAAgE;YAChE,sBAAsB;YACtB,0BAA0B;YAC1B,oBAAoB;YACpB,2BAA2B;YAC3B,oBAAoB;YACpB,8CAA8C;YAC9C,mCAAmC;SACpC;KACF;IACD;QACE,IAAI,EAAE,qBAAqB;QAC3B,MAAM,EAAE,GAAG;QACX,QAAQ,EAAE;YACR,+BAA+B;YAC/B,+CAA+C;YAC/C,6BAA6B;YAC7B,8BAA8B;YAC9B,0BAA0B;YAC1B,kCAAkC;YAClC,4BAA4B;SAC7B;KACF;IACD;QACE,IAAI,EAAE,mBAAmB;QACzB,MAAM,EAAE,IAAI;QACZ,QAAQ,EAAE;YACR,cAAc;YACd,cAAc;YACd,gBAAgB;YAChB,kBAAkB;YAClB,oBAAoB;YACpB,8CAA8C;YAC9C,oBAAoB;YACpB,iBAAiB;SAClB;KACF;IACD;QACE,IAAI,EAAE,kBAAkB;QACxB,MAAM,EAAE,IAAI;QACZ,QAAQ,EAAE;YACR,mDAAmD;YACnD,oEAAoE;YACpE,iBAAiB;YACjB,iBAAiB;SAClB;KACF;CACF,CAAC;AAEF,MAAM,UAAU,kBAAkB,CAAC,OAAe;IAChD,MAAM,eAAe,GAAa,EAAE,CAAC;IACrC,IAAI,WAAW,GAAG,CAAC,CAAC;IACpB,IAAI,SAAS,GAAG,CAAC,CAAC;IAElB,KAAK,MAAM,KAAK,IAAI,cAAc,EAAE,CAAC;QACnC,KAAK,MAAM,OAAO,IAAI,KAAK,CAAC,QAAQ,EAAE,CAAC;YACrC,IAAI,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;gBAC1B,eAAe,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;gBACjC,WAAW,IAAI,KAAK,CAAC,MAAM,CAAC;gBAC5B,IAAI,KAAK,CAAC,MAAM,GAAG,SAAS,EAAE,CAAC;oBAC7B,SAAS,GAAG,KAAK,CAAC,MAAM,CAAC;gBAC3B,CAAC;gBACD,MAAM,CAAC,gCAAgC;YACzC,CAAC;QACH,CAAC;IACH,CAAC;IAED,yEAAyE;IACzE,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,eAAe,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,GAAG,EAAE,GAAG,CAAC,CAAC;IACrE,MAAM,UAAU,GAAG,eAAe,CAAC,MAAM,GAAG,CAAC;QAC3C,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,SAAS,GAAG,UAAU,EAAE,GAAG,CAAC;QACvC,CAAC,CAAC,CAAC,CAAC;IAEN,OAAO;QACL,QAAQ,EAAE,eAAe,CAAC,MAAM,GAAG,CAAC;QACpC,QAAQ,EAAE,CAAC,GAAG,IAAI,GAAG,CAAC,eAAe,CAAC,CAAC;QACvC,UAAU,EAAE,IAAI,CAAC,KAAK,CAAC,UAAU,GAAG,GAAG,CAAC,GAAG,GAAG;KAC/C,CAAC;AACJ,CAAC"}
@@ -0,0 +1,13 @@
1
+ /**
2
+ * Privilege Detector
3
+ *
4
+ * Detects credential references, external URLs, system access,
5
+ * and network exfiltration attempts in memory content.
6
+ */
7
+ export interface PrivilegeDetectionResult {
8
+ detected: boolean;
9
+ indicators: string[];
10
+ severity: 'low' | 'medium' | 'high';
11
+ }
12
+ export declare function detectPrivilegeEscalation(content: string): PrivilegeDetectionResult;
13
+ //# sourceMappingURL=privilege-detector.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"privilege-detector.d.ts","sourceRoot":"","sources":["../../../src/defence/firewall/privilege-detector.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,MAAM,WAAW,wBAAwB;IACvC,QAAQ,EAAE,OAAO,CAAC;IAClB,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,QAAQ,EAAE,KAAK,GAAG,QAAQ,GAAG,MAAM,CAAC;CACrC;AAwED,wBAAgB,yBAAyB,CAAC,OAAO,EAAE,MAAM,GAAG,wBAAwB,CAqBnF"}