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 @@
1
+ {"version":3,"file":"pipeline.js","sourceRoot":"","sources":["../../src/defence/pipeline.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Scanner module — retroactive memory scanning for poisoning detection.
3
+ */
4
+ export { scanExistingMemories, type ScanOptions, type ScanReport, type ThreatFinding, } from './scan-existing.js';
5
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/defence/scanner/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EACL,oBAAoB,EACpB,KAAK,WAAW,EAChB,KAAK,UAAU,EACf,KAAK,aAAa,GACnB,MAAM,oBAAoB,CAAC"}
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Scanner module — retroactive memory scanning for poisoning detection.
3
+ */
4
+ export { scanExistingMemories, } from './scan-existing.js';
5
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/defence/scanner/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EACL,oBAAoB,GAIrB,MAAM,oBAAoB,CAAC"}
@@ -0,0 +1,34 @@
1
+ /**
2
+ * Retroactive Memory Scanner
3
+ *
4
+ * Scans existing memories in the database for signs of poisoning,
5
+ * injection attacks, or sensitive data stored in plain text.
6
+ * "Is Your AI Agent Compromised?"
7
+ */
8
+ import type { DefenceConfig, ThreatIndicator } from '../types.js';
9
+ export interface ScanOptions {
10
+ project?: string;
11
+ limit?: number;
12
+ config?: DefenceConfig;
13
+ }
14
+ export interface ThreatFinding {
15
+ memoryId: number;
16
+ title: string;
17
+ severity: 'low' | 'medium' | 'high' | 'critical';
18
+ threatType: ThreatIndicator;
19
+ details: string;
20
+ content_preview: string;
21
+ }
22
+ export interface ScanReport {
23
+ totalScanned: number;
24
+ cleanCount: number;
25
+ suspiciousCount: number;
26
+ threatsFound: ThreatFinding[];
27
+ scanDuration: number;
28
+ summary: string;
29
+ }
30
+ /**
31
+ * Scan existing memories for signs of poisoning or sensitive data exposure.
32
+ */
33
+ export declare function scanExistingMemories(options?: ScanOptions): ScanReport;
34
+ //# sourceMappingURL=scan-existing.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scan-existing.d.ts","sourceRoot":"","sources":["../../../src/defence/scanner/scan-existing.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAKH,OAAO,KAAK,EACV,aAAa,EAEb,eAAe,EAChB,MAAM,aAAa,CAAC;AAKrB,MAAM,WAAW,WAAW;IAC1B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,aAAa,CAAC;CACxB;AAED,MAAM,WAAW,aAAa;IAC5B,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,KAAK,GAAG,QAAQ,GAAG,MAAM,GAAG,UAAU,CAAC;IACjD,UAAU,EAAE,eAAe,CAAC;IAC5B,OAAO,EAAE,MAAM,CAAC;IAChB,eAAe,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,WAAW,UAAU;IACzB,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;IACnB,eAAe,EAAE,MAAM,CAAC;IACxB,YAAY,EAAE,aAAa,EAAE,CAAC;IAC9B,YAAY,EAAE,MAAM,CAAC;IACrB,OAAO,EAAE,MAAM,CAAC;CACjB;AAqDD;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,OAAO,CAAC,EAAE,WAAW,GAAG,UAAU,CA+GtE"}
@@ -0,0 +1,136 @@
1
+ /**
2
+ * Retroactive Memory Scanner
3
+ *
4
+ * Scans existing memories in the database for signs of poisoning,
5
+ * injection attacks, or sensitive data stored in plain text.
6
+ * "Is Your AI Agent Compromised?"
7
+ */
8
+ import { getDatabase } from '../../database/init.js';
9
+ import { analyzeFirewall } from '../firewall/index.js';
10
+ import { classifySensitivity } from '../sensitivity/index.js';
11
+ import { DEFAULT_DEFENCE_CONFIG } from '../types.js';
12
+ const BATCH_SIZE = 100;
13
+ /**
14
+ * Parse a source string like "user:direct" into a DefenceSource.
15
+ */
16
+ function parseSource(raw) {
17
+ if (!raw || !raw.includes(':')) {
18
+ return { type: 'user', identifier: 'direct' };
19
+ }
20
+ const [type, ...rest] = raw.split(':');
21
+ const validTypes = new Set(['user', 'email', 'web', 'agent', 'file', 'api']);
22
+ return {
23
+ type: (validTypes.has(type) ? type : 'user'),
24
+ identifier: rest.join(':') || 'direct',
25
+ };
26
+ }
27
+ /**
28
+ * Map firewall result + threat indicators to a severity level.
29
+ */
30
+ function deriveSeverity(firewallResult, indicators) {
31
+ if (firewallResult === 'BLOCK') {
32
+ if (indicators.includes('instruction_injection') || indicators.includes('credential_leak')) {
33
+ return 'critical';
34
+ }
35
+ return 'high';
36
+ }
37
+ if (firewallResult === 'QUARANTINE') {
38
+ if (indicators.includes('instruction_injection')) {
39
+ return 'high';
40
+ }
41
+ return 'medium';
42
+ }
43
+ return 'low';
44
+ }
45
+ /**
46
+ * Scan existing memories for signs of poisoning or sensitive data exposure.
47
+ */
48
+ export function scanExistingMemories(options) {
49
+ const startTime = Date.now();
50
+ const config = options?.config ?? DEFAULT_DEFENCE_CONFIG;
51
+ const limit = options?.limit ?? 1000;
52
+ const project = options?.project;
53
+ const db = getDatabase();
54
+ // Build query
55
+ let query = 'SELECT id, title, content, project, trust_score, sensitivity_level, source FROM memories';
56
+ const params = [];
57
+ if (project) {
58
+ query += ' WHERE project = ?';
59
+ params.push(project);
60
+ }
61
+ query += ' ORDER BY id ASC LIMIT ?';
62
+ params.push(limit);
63
+ const allRows = db.prepare(query).all(...params);
64
+ const threatsFound = [];
65
+ // Process in batches
66
+ for (let i = 0; i < allRows.length; i += BATCH_SIZE) {
67
+ const batch = allRows.slice(i, i + BATCH_SIZE);
68
+ for (const row of batch) {
69
+ const source = parseSource(row.source);
70
+ const trustScore = row.trust_score ?? 1.0;
71
+ const preview = row.content.slice(0, 100);
72
+ // Run firewall analysis
73
+ const firewall = analyzeFirewall(row.content, row.title, source, trustScore, config);
74
+ // Collect threats from firewall
75
+ if (firewall.result === 'BLOCK' || firewall.result === 'QUARANTINE') {
76
+ for (const indicator of firewall.threatIndicators) {
77
+ threatsFound.push({
78
+ memoryId: row.id,
79
+ title: row.title,
80
+ severity: deriveSeverity(firewall.result, firewall.threatIndicators),
81
+ threatType: indicator,
82
+ details: firewall.reason,
83
+ content_preview: preview,
84
+ });
85
+ }
86
+ // If no specific indicators but still blocked/quarantined (e.g. high anomaly)
87
+ if (firewall.threatIndicators.length === 0) {
88
+ threatsFound.push({
89
+ memoryId: row.id,
90
+ title: row.title,
91
+ severity: firewall.result === 'BLOCK' ? 'high' : 'medium',
92
+ threatType: 'instruction_injection', // fallback indicator
93
+ details: firewall.reason,
94
+ content_preview: preview,
95
+ });
96
+ }
97
+ }
98
+ // Run sensitivity classification
99
+ const sensitivity = classifySensitivity(row.content, row.title);
100
+ // Flag RESTRICTED content stored in plain text
101
+ if (sensitivity.level === 'RESTRICTED') {
102
+ threatsFound.push({
103
+ memoryId: row.id,
104
+ title: row.title,
105
+ severity: 'high',
106
+ threatType: 'credential_leak',
107
+ details: `RESTRICTED sensitivity content stored in plain text. Detected patterns: ${sensitivity.detectedPatterns.join(', ')}`,
108
+ content_preview: preview,
109
+ });
110
+ }
111
+ }
112
+ }
113
+ const totalScanned = allRows.length;
114
+ // Count unique memory IDs with threats
115
+ const suspiciousIds = new Set(threatsFound.map((t) => t.memoryId));
116
+ const suspiciousCount = suspiciousIds.size;
117
+ const cleanCount = totalScanned - suspiciousCount;
118
+ // Build severity counts for summary
119
+ const severityCounts = { critical: 0, high: 0, medium: 0, low: 0 };
120
+ for (const t of threatsFound) {
121
+ severityCounts[t.severity]++;
122
+ }
123
+ const summary = `Scanned ${totalScanned} memories. Found ${threatsFound.length} threats ` +
124
+ `(${severityCounts.critical} critical, ${severityCounts.high} high, ` +
125
+ `${severityCounts.medium} medium, ${severityCounts.low} low). ` +
126
+ `${cleanCount} clean.`;
127
+ return {
128
+ totalScanned,
129
+ cleanCount,
130
+ suspiciousCount,
131
+ threatsFound,
132
+ scanDuration: Date.now() - startTime,
133
+ summary,
134
+ };
135
+ }
136
+ //# sourceMappingURL=scan-existing.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scan-existing.js","sourceRoot":"","sources":["../../../src/defence/scanner/scan-existing.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Content sensitivity classifier.
3
+ */
4
+ import type { SensitivityClassification } from '../types.js';
5
+ export declare function classifyContent(content: string, title: string): SensitivityClassification;
6
+ //# sourceMappingURL=classifier.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"classifier.d.ts","sourceRoot":"","sources":["../../../src/defence/sensitivity/classifier.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,yBAAyB,EAAoB,MAAM,aAAa,CAAC;AA2B/E,wBAAgB,eAAe,CAC7B,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,MAAM,GACZ,yBAAyB,CAkC3B"}
@@ -0,0 +1,50 @@
1
+ /**
2
+ * Content sensitivity classifier.
3
+ */
4
+ import { RESTRICTED_PATTERNS, CONFIDENTIAL_PATTERNS, INTERNAL_PATTERNS, } from './patterns.js';
5
+ function matchPatterns(text, patterns) {
6
+ const labels = [];
7
+ let maxWeight = 0;
8
+ for (const { pattern, label, weight } of patterns) {
9
+ // Reset lastIndex for global regexes
10
+ pattern.lastIndex = 0;
11
+ if (pattern.test(text)) {
12
+ labels.push(label);
13
+ if (weight > maxWeight)
14
+ maxWeight = weight;
15
+ }
16
+ }
17
+ return { labels, maxWeight };
18
+ }
19
+ export function classifyContent(content, title) {
20
+ const text = `${title}\n${content}`;
21
+ const allLabels = [];
22
+ let level = 'PUBLIC';
23
+ let confidence = 0.5;
24
+ // Check in priority order: RESTRICTED > CONFIDENTIAL > INTERNAL
25
+ const restricted = matchPatterns(text, RESTRICTED_PATTERNS);
26
+ allLabels.push(...restricted.labels);
27
+ const confidential = matchPatterns(text, CONFIDENTIAL_PATTERNS);
28
+ allLabels.push(...confidential.labels);
29
+ const internal = matchPatterns(text, INTERNAL_PATTERNS);
30
+ allLabels.push(...internal.labels);
31
+ if (restricted.labels.length > 0) {
32
+ level = 'RESTRICTED';
33
+ confidence = restricted.maxWeight;
34
+ }
35
+ else if (confidential.labels.length > 0) {
36
+ level = 'CONFIDENTIAL';
37
+ confidence = confidential.maxWeight;
38
+ }
39
+ else if (internal.labels.length > 0) {
40
+ level = 'INTERNAL';
41
+ confidence = internal.maxWeight;
42
+ }
43
+ return {
44
+ level,
45
+ confidence,
46
+ detectedPatterns: allLabels,
47
+ redactionRequired: level === 'RESTRICTED',
48
+ };
49
+ }
50
+ //# sourceMappingURL=classifier.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"classifier.js","sourceRoot":"","sources":["../../../src/defence/sensitivity/classifier.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,EACL,mBAAmB,EACnB,qBAAqB,EACrB,iBAAiB,GAElB,MAAM,eAAe,CAAC;AAEvB,SAAS,aAAa,CACpB,IAAY,EACZ,QAA8B;IAE9B,MAAM,MAAM,GAAa,EAAE,CAAC;IAC5B,IAAI,SAAS,GAAG,CAAC,CAAC;IAElB,KAAK,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,QAAQ,EAAE,CAAC;QAClD,qCAAqC;QACrC,OAAO,CAAC,SAAS,GAAG,CAAC,CAAC;QACtB,IAAI,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;YACvB,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACnB,IAAI,MAAM,GAAG,SAAS;gBAAE,SAAS,GAAG,MAAM,CAAC;QAC7C,CAAC;IACH,CAAC;IAED,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC;AAC/B,CAAC;AAED,MAAM,UAAU,eAAe,CAC7B,OAAe,EACf,KAAa;IAEb,MAAM,IAAI,GAAG,GAAG,KAAK,KAAK,OAAO,EAAE,CAAC;IAEpC,MAAM,SAAS,GAAa,EAAE,CAAC;IAC/B,IAAI,KAAK,GAAqB,QAAQ,CAAC;IACvC,IAAI,UAAU,GAAG,GAAG,CAAC;IAErB,gEAAgE;IAChE,MAAM,UAAU,GAAG,aAAa,CAAC,IAAI,EAAE,mBAAmB,CAAC,CAAC;IAC5D,SAAS,CAAC,IAAI,CAAC,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC;IAErC,MAAM,YAAY,GAAG,aAAa,CAAC,IAAI,EAAE,qBAAqB,CAAC,CAAC;IAChE,SAAS,CAAC,IAAI,CAAC,GAAG,YAAY,CAAC,MAAM,CAAC,CAAC;IAEvC,MAAM,QAAQ,GAAG,aAAa,CAAC,IAAI,EAAE,iBAAiB,CAAC,CAAC;IACxD,SAAS,CAAC,IAAI,CAAC,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC;IAEnC,IAAI,UAAU,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACjC,KAAK,GAAG,YAAY,CAAC;QACrB,UAAU,GAAG,UAAU,CAAC,SAAS,CAAC;IACpC,CAAC;SAAM,IAAI,YAAY,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC1C,KAAK,GAAG,cAAc,CAAC;QACvB,UAAU,GAAG,YAAY,CAAC,SAAS,CAAC;IACtC,CAAC;SAAM,IAAI,QAAQ,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACtC,KAAK,GAAG,UAAU,CAAC;QACnB,UAAU,GAAG,QAAQ,CAAC,SAAS,CAAC;IAClC,CAAC;IAED,OAAO;QACL,KAAK;QACL,UAAU;QACV,gBAAgB,EAAE,SAAS;QAC3B,iBAAiB,EAAE,KAAK,KAAK,YAAY;KAC1C,CAAC;AACJ,CAAC"}
@@ -0,0 +1,11 @@
1
+ /**
2
+ * Sensitivity classification and redaction.
3
+ */
4
+ import type { SensitivityClassification } from '../types.js';
5
+ export { redactContent, redactForDisplay } from './redaction.js';
6
+ export { classifyContent } from './classifier.js';
7
+ /**
8
+ * Classify content sensitivity — convenience wrapper around classifyContent.
9
+ */
10
+ export declare function classifySensitivity(content: string, title: string): SensitivityClassification;
11
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/defence/sensitivity/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,aAAa,CAAC;AAG7D,OAAO,EAAE,aAAa,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AACjE,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAElD;;GAEG;AACH,wBAAgB,mBAAmB,CACjC,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,MAAM,GACZ,yBAAyB,CAE3B"}
@@ -0,0 +1,13 @@
1
+ /**
2
+ * Sensitivity classification and redaction.
3
+ */
4
+ import { classifyContent } from './classifier.js';
5
+ export { redactContent, redactForDisplay } from './redaction.js';
6
+ export { classifyContent } from './classifier.js';
7
+ /**
8
+ * Classify content sensitivity — convenience wrapper around classifyContent.
9
+ */
10
+ export function classifySensitivity(content, title) {
11
+ return classifyContent(content, title);
12
+ }
13
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/defence/sensitivity/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAElD,OAAO,EAAE,aAAa,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AACjE,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAElD;;GAEG;AACH,MAAM,UAAU,mBAAmB,CACjC,OAAe,EACf,KAAa;IAEb,OAAO,eAAe,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;AACzC,CAAC"}
@@ -0,0 +1,14 @@
1
+ /**
2
+ * Detection patterns for sensitive content classification.
3
+ *
4
+ * Each pattern set is ordered by priority: RESTRICTED > CONFIDENTIAL > INTERNAL.
5
+ */
6
+ export interface SensitivityPattern {
7
+ pattern: RegExp;
8
+ label: string;
9
+ weight: number;
10
+ }
11
+ export declare const RESTRICTED_PATTERNS: SensitivityPattern[];
12
+ export declare const CONFIDENTIAL_PATTERNS: SensitivityPattern[];
13
+ export declare const INTERNAL_PATTERNS: SensitivityPattern[];
14
+ //# sourceMappingURL=patterns.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"patterns.d.ts","sourceRoot":"","sources":["../../../src/defence/sensitivity/patterns.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,MAAM,WAAW,kBAAkB;IACjC,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;CAChB;AAID,eAAO,MAAM,mBAAmB,EAAE,kBAAkB,EAiCnD,CAAC;AAIF,eAAO,MAAM,qBAAqB,EAAE,kBAAkB,EAqBrD,CAAC;AAIF,eAAO,MAAM,iBAAiB,EAAE,kBAAkB,EAgBjD,CAAC"}
@@ -0,0 +1,67 @@
1
+ /**
2
+ * Detection patterns for sensitive content classification.
3
+ *
4
+ * Each pattern set is ordered by priority: RESTRICTED > CONFIDENTIAL > INTERNAL.
5
+ */
6
+ // ── RESTRICTED — credentials, secrets, PII that must never leak ──
7
+ export const RESTRICTED_PATTERNS = [
8
+ // Passwords
9
+ { pattern: /password\s*[:=]\s*\S+/gi, label: 'password', weight: 0.95 },
10
+ { pattern: /passwd\s*[:=]\s*\S+/gi, label: 'password', weight: 0.95 },
11
+ // AWS keys
12
+ { pattern: /AKIA[0-9A-Z]{16}/g, label: 'aws-access-key', weight: 0.99 },
13
+ { pattern: /aws_secret_access_key\s*[:=]\s*\S+/gi, label: 'aws-secret-key', weight: 0.99 },
14
+ // GitHub tokens
15
+ { pattern: /gh[ps]_[A-Za-z0-9_]{36,}/g, label: 'github-token', weight: 0.98 },
16
+ { pattern: /github_pat_[A-Za-z0-9_]{22,}/g, label: 'github-pat', weight: 0.98 },
17
+ // Stripe keys
18
+ { pattern: /sk_live_[A-Za-z0-9]{24,}/g, label: 'stripe-secret-key', weight: 0.98 },
19
+ { pattern: /rk_live_[A-Za-z0-9]{24,}/g, label: 'stripe-restricted-key', weight: 0.98 },
20
+ // Generic API keys
21
+ { pattern: /api[_-]?key\s*[:=]\s*\S+/gi, label: 'api-key', weight: 0.90 },
22
+ { pattern: /api[_-]?secret\s*[:=]\s*\S+/gi, label: 'api-secret', weight: 0.92 },
23
+ { pattern: /bearer\s+[A-Za-z0-9\-._~+/]+=*/gi, label: 'bearer-token', weight: 0.90 },
24
+ // Private keys
25
+ { pattern: /-----BEGIN RSA PRIVATE KEY-----/g, label: 'rsa-private-key', weight: 1.0 },
26
+ { pattern: /-----BEGIN EC PRIVATE KEY-----/g, label: 'ec-private-key', weight: 1.0 },
27
+ { pattern: /-----BEGIN PGP PRIVATE KEY BLOCK-----/g, label: 'pgp-private-key', weight: 1.0 },
28
+ { pattern: /-----BEGIN PRIVATE KEY-----/g, label: 'private-key', weight: 1.0 },
29
+ // SSN
30
+ { pattern: /\b\d{3}-\d{2}-\d{4}\b/g, label: 'ssn', weight: 0.93 },
31
+ // Credit card numbers (basic Luhn-length patterns)
32
+ { pattern: /\b(?:4\d{3}|5[1-5]\d{2}|3[47]\d{2}|6(?:011|5\d{2}))[- ]?\d{4}[- ]?\d{4}[- ]?\d{4}\b/g, label: 'credit-card', weight: 0.95 },
33
+ ];
34
+ // ── CONFIDENTIAL — personal / financial data ──
35
+ export const CONFIDENTIAL_PATTERNS = [
36
+ // Email addresses
37
+ { pattern: /[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}/g, label: 'email-address', weight: 0.75 },
38
+ // Phone numbers
39
+ { pattern: /\b(?:\+?1[-.\s]?)?\(?\d{3}\)?[-.\s]?\d{3}[-.\s]?\d{4}\b/g, label: 'phone-number', weight: 0.70 },
40
+ { pattern: /\b\+44\s?\d{4}\s?\d{6}\b/g, label: 'uk-phone-number', weight: 0.70 },
41
+ // Physical addresses (street number + street name pattern)
42
+ { pattern: /\b\d{1,5}\s[A-Z][a-z]+(?:\s[A-Z][a-z]+)*\s(?:Street|St|Avenue|Ave|Road|Rd|Boulevard|Blvd|Drive|Dr|Lane|Ln|Court|Ct)\b/g, label: 'physical-address', weight: 0.72 },
43
+ // Financial — account numbers, sort codes, IBANs
44
+ { pattern: /\baccount\s*(?:number|no|#)\s*[:=]?\s*\d{6,}/gi, label: 'account-number', weight: 0.85 },
45
+ { pattern: /\bsort\s*code\s*[:=]?\s*\d{2}-?\d{2}-?\d{2}\b/gi, label: 'sort-code', weight: 0.85 },
46
+ { pattern: /\b[A-Z]{2}\d{2}[A-Z0-9]{4}\d{7}(?:[A-Z0-9]{0,16})\b/g, label: 'iban', weight: 0.88 },
47
+ // Personal names with identifiers
48
+ { pattern: /\b(?:patient|employee|client|customer)\s*(?:id|#|number)\s*[:=]?\s*\S+/gi, label: 'personal-identifier', weight: 0.80 },
49
+ // Medical terms
50
+ { pattern: /\b(?:diagnosis|prescription|medication|treatment|symptoms?|blood\s*type|allergies|medical\s*record)\b/gi, label: 'medical-term', weight: 0.65 },
51
+ ];
52
+ // ── INTERNAL — org-internal references ──
53
+ export const INTERNAL_PATTERNS = [
54
+ // Internal URLs
55
+ { pattern: /https?:\/\/localhost[:\d]*/g, label: 'localhost-url', weight: 0.55 },
56
+ { pattern: /https?:\/\/[a-zA-Z0-9.-]+\.local\b/g, label: 'local-domain', weight: 0.55 },
57
+ { pattern: /https?:\/\/[a-zA-Z0-9.-]+\.internal\b/g, label: 'internal-domain', weight: 0.55 },
58
+ // Internal file paths
59
+ { pattern: /(?:\/(?:home|Users)\/\w+\/|C:\\Users\\\w+\\)/g, label: 'internal-path', weight: 0.50 },
60
+ // Project names with internal identifiers
61
+ { pattern: /\b(?:PROJ|INT|PRIV)-\d{3,}/g, label: 'internal-project-id', weight: 0.55 },
62
+ { pattern: /\bjira[:\s]+[A-Z]+-\d+\b/gi, label: 'internal-ticket', weight: 0.50 },
63
+ // Meeting notes / draft markers
64
+ { pattern: /\b(?:meeting\s*notes?|standup|retro(?:spective)?|sprint\s*review)\b/gi, label: 'meeting-notes', weight: 0.45 },
65
+ { pattern: /\b(?:DRAFT|INTERNAL(?:\s+ONLY)?|DO NOT (?:SHARE|DISTRIBUTE))\b/gi, label: 'internal-label', weight: 0.60 },
66
+ ];
67
+ //# sourceMappingURL=patterns.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"patterns.js","sourceRoot":"","sources":["../../../src/defence/sensitivity/patterns.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAQH,oEAAoE;AAEpE,MAAM,CAAC,MAAM,mBAAmB,GAAyB;IACvD,YAAY;IACZ,EAAE,OAAO,EAAE,yBAAyB,EAAE,KAAK,EAAE,UAAU,EAAE,MAAM,EAAE,IAAI,EAAE;IACvE,EAAE,OAAO,EAAE,uBAAuB,EAAE,KAAK,EAAE,UAAU,EAAE,MAAM,EAAE,IAAI,EAAE;IAErE,WAAW;IACX,EAAE,OAAO,EAAE,mBAAmB,EAAE,KAAK,EAAE,gBAAgB,EAAE,MAAM,EAAE,IAAI,EAAE;IACvE,EAAE,OAAO,EAAE,sCAAsC,EAAE,KAAK,EAAE,gBAAgB,EAAE,MAAM,EAAE,IAAI,EAAE;IAE1F,gBAAgB;IAChB,EAAE,OAAO,EAAE,2BAA2B,EAAE,KAAK,EAAE,cAAc,EAAE,MAAM,EAAE,IAAI,EAAE;IAC7E,EAAE,OAAO,EAAE,+BAA+B,EAAE,KAAK,EAAE,YAAY,EAAE,MAAM,EAAE,IAAI,EAAE;IAE/E,cAAc;IACd,EAAE,OAAO,EAAE,2BAA2B,EAAE,KAAK,EAAE,mBAAmB,EAAE,MAAM,EAAE,IAAI,EAAE;IAClF,EAAE,OAAO,EAAE,2BAA2B,EAAE,KAAK,EAAE,uBAAuB,EAAE,MAAM,EAAE,IAAI,EAAE;IAEtF,mBAAmB;IACnB,EAAE,OAAO,EAAE,4BAA4B,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE;IACzE,EAAE,OAAO,EAAE,+BAA+B,EAAE,KAAK,EAAE,YAAY,EAAE,MAAM,EAAE,IAAI,EAAE;IAC/E,EAAE,OAAO,EAAE,kCAAkC,EAAE,KAAK,EAAE,cAAc,EAAE,MAAM,EAAE,IAAI,EAAE;IAEpF,eAAe;IACf,EAAE,OAAO,EAAE,kCAAkC,EAAE,KAAK,EAAE,iBAAiB,EAAE,MAAM,EAAE,GAAG,EAAE;IACtF,EAAE,OAAO,EAAE,iCAAiC,EAAE,KAAK,EAAE,gBAAgB,EAAE,MAAM,EAAE,GAAG,EAAE;IACpF,EAAE,OAAO,EAAE,wCAAwC,EAAE,KAAK,EAAE,iBAAiB,EAAE,MAAM,EAAE,GAAG,EAAE;IAC5F,EAAE,OAAO,EAAE,8BAA8B,EAAE,KAAK,EAAE,aAAa,EAAE,MAAM,EAAE,GAAG,EAAE;IAE9E,MAAM;IACN,EAAE,OAAO,EAAE,wBAAwB,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE;IAEjE,mDAAmD;IACnD,EAAE,OAAO,EAAE,sFAAsF,EAAE,KAAK,EAAE,aAAa,EAAE,MAAM,EAAE,IAAI,EAAE;CACxI,CAAC;AAEF,iDAAiD;AAEjD,MAAM,CAAC,MAAM,qBAAqB,GAAyB;IACzD,kBAAkB;IAClB,EAAE,OAAO,EAAE,iDAAiD,EAAE,KAAK,EAAE,eAAe,EAAE,MAAM,EAAE,IAAI,EAAE;IAEpG,gBAAgB;IAChB,EAAE,OAAO,EAAE,0DAA0D,EAAE,KAAK,EAAE,cAAc,EAAE,MAAM,EAAE,IAAI,EAAE;IAC5G,EAAE,OAAO,EAAE,2BAA2B,EAAE,KAAK,EAAE,iBAAiB,EAAE,MAAM,EAAE,IAAI,EAAE;IAEhF,2DAA2D;IAC3D,EAAE,OAAO,EAAE,wHAAwH,EAAE,KAAK,EAAE,kBAAkB,EAAE,MAAM,EAAE,IAAI,EAAE;IAE9K,iDAAiD;IACjD,EAAE,OAAO,EAAE,gDAAgD,EAAE,KAAK,EAAE,gBAAgB,EAAE,MAAM,EAAE,IAAI,EAAE;IACpG,EAAE,OAAO,EAAE,iDAAiD,EAAE,KAAK,EAAE,WAAW,EAAE,MAAM,EAAE,IAAI,EAAE;IAChG,EAAE,OAAO,EAAE,sDAAsD,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE;IAEhG,kCAAkC;IAClC,EAAE,OAAO,EAAE,0EAA0E,EAAE,KAAK,EAAE,qBAAqB,EAAE,MAAM,EAAE,IAAI,EAAE;IAEnI,gBAAgB;IAChB,EAAE,OAAO,EAAE,yGAAyG,EAAE,KAAK,EAAE,cAAc,EAAE,MAAM,EAAE,IAAI,EAAE;CAC5J,CAAC;AAEF,2CAA2C;AAE3C,MAAM,CAAC,MAAM,iBAAiB,GAAyB;IACrD,gBAAgB;IAChB,EAAE,OAAO,EAAE,6BAA6B,EAAE,KAAK,EAAE,eAAe,EAAE,MAAM,EAAE,IAAI,EAAE;IAChF,EAAE,OAAO,EAAE,qCAAqC,EAAE,KAAK,EAAE,cAAc,EAAE,MAAM,EAAE,IAAI,EAAE;IACvF,EAAE,OAAO,EAAE,wCAAwC,EAAE,KAAK,EAAE,iBAAiB,EAAE,MAAM,EAAE,IAAI,EAAE;IAE7F,sBAAsB;IACtB,EAAE,OAAO,EAAE,+CAA+C,EAAE,KAAK,EAAE,eAAe,EAAE,MAAM,EAAE,IAAI,EAAE;IAElG,0CAA0C;IAC1C,EAAE,OAAO,EAAE,6BAA6B,EAAE,KAAK,EAAE,qBAAqB,EAAE,MAAM,EAAE,IAAI,EAAE;IACtF,EAAE,OAAO,EAAE,4BAA4B,EAAE,KAAK,EAAE,iBAAiB,EAAE,MAAM,EAAE,IAAI,EAAE;IAEjF,gCAAgC;IAChC,EAAE,OAAO,EAAE,uEAAuE,EAAE,KAAK,EAAE,eAAe,EAAE,MAAM,EAAE,IAAI,EAAE;IAC1H,EAAE,OAAO,EAAE,kEAAkE,EAAE,KAAK,EAAE,gBAAgB,EAAE,MAAM,EAAE,IAAI,EAAE;CACvH,CAAC"}
@@ -0,0 +1,17 @@
1
+ /**
2
+ * Content redaction utilities.
3
+ */
4
+ import type { SensitivityLevel } from '../types.js';
5
+ /**
6
+ * Replace all RESTRICTED pattern matches with [REDACTED].
7
+ */
8
+ export declare function redactContent(content: string): string;
9
+ /**
10
+ * Redact content appropriate to its sensitivity level.
11
+ *
12
+ * - RESTRICTED: fully redact all restricted patterns
13
+ * - CONFIDENTIAL: partially mask confidential patterns (show first/last chars)
14
+ * - INTERNAL / PUBLIC: return as-is
15
+ */
16
+ export declare function redactForDisplay(content: string, level: SensitivityLevel): string;
17
+ //# sourceMappingURL=redaction.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"redaction.d.ts","sourceRoot":"","sources":["../../../src/defence/sensitivity/redaction.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAGpD;;GAEG;AACH,wBAAgB,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAUrD;AAWD;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAC9B,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,gBAAgB,GACtB,MAAM,CAeR"}
@@ -0,0 +1,47 @@
1
+ /**
2
+ * Content redaction utilities.
3
+ */
4
+ import { RESTRICTED_PATTERNS, CONFIDENTIAL_PATTERNS } from './patterns.js';
5
+ /**
6
+ * Replace all RESTRICTED pattern matches with [REDACTED].
7
+ */
8
+ export function redactContent(content) {
9
+ let result = content;
10
+ for (const { pattern } of RESTRICTED_PATTERNS) {
11
+ // Clone the regex to avoid shared lastIndex state
12
+ const re = new RegExp(pattern.source, pattern.flags);
13
+ result = result.replace(re, '[REDACTED]');
14
+ }
15
+ return result;
16
+ }
17
+ /**
18
+ * Partially mask a string: show first and last characters, mask the middle.
19
+ * For strings <= 4 chars, mask everything.
20
+ */
21
+ function partialMask(value) {
22
+ if (value.length <= 4)
23
+ return '*'.repeat(value.length);
24
+ return value[0] + '*'.repeat(value.length - 2) + value[value.length - 1];
25
+ }
26
+ /**
27
+ * Redact content appropriate to its sensitivity level.
28
+ *
29
+ * - RESTRICTED: fully redact all restricted patterns
30
+ * - CONFIDENTIAL: partially mask confidential patterns (show first/last chars)
31
+ * - INTERNAL / PUBLIC: return as-is
32
+ */
33
+ export function redactForDisplay(content, level) {
34
+ if (level === 'RESTRICTED') {
35
+ return redactContent(content);
36
+ }
37
+ if (level === 'CONFIDENTIAL') {
38
+ let result = content;
39
+ for (const { pattern } of CONFIDENTIAL_PATTERNS) {
40
+ const re = new RegExp(pattern.source, pattern.flags);
41
+ result = result.replace(re, (match) => partialMask(match));
42
+ }
43
+ return result;
44
+ }
45
+ return content;
46
+ }
47
+ //# sourceMappingURL=redaction.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"redaction.js","sourceRoot":"","sources":["../../../src/defence/sensitivity/redaction.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,EAAE,mBAAmB,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAC;AAE3E;;GAEG;AACH,MAAM,UAAU,aAAa,CAAC,OAAe;IAC3C,IAAI,MAAM,GAAG,OAAO,CAAC;IAErB,KAAK,MAAM,EAAE,OAAO,EAAE,IAAI,mBAAmB,EAAE,CAAC;QAC9C,kDAAkD;QAClD,MAAM,EAAE,GAAG,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC;QACrD,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,EAAE,EAAE,YAAY,CAAC,CAAC;IAC5C,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;;GAGG;AACH,SAAS,WAAW,CAAC,KAAa;IAChC,IAAI,KAAK,CAAC,MAAM,IAAI,CAAC;QAAE,OAAO,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;IACvD,OAAO,KAAK,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;AAC3E,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,gBAAgB,CAC9B,OAAe,EACf,KAAuB;IAEvB,IAAI,KAAK,KAAK,YAAY,EAAE,CAAC;QAC3B,OAAO,aAAa,CAAC,OAAO,CAAC,CAAC;IAChC,CAAC;IAED,IAAI,KAAK,KAAK,cAAc,EAAE,CAAC;QAC7B,IAAI,MAAM,GAAG,OAAO,CAAC;QACrB,KAAK,MAAM,EAAE,OAAO,EAAE,IAAI,qBAAqB,EAAE,CAAC;YAChD,MAAM,EAAE,GAAG,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC;YACrD,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,EAAE,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC;QAC7D,CAAC;QACD,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,OAAO,OAAO,CAAC;AACjB,CAAC"}
@@ -0,0 +1,3 @@
1
+ export { scoreSource } from './source-scorer.js';
2
+ export { filterByTrust } from './recall-filter.js';
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/defence/trust/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC"}
@@ -0,0 +1,3 @@
1
+ export { scoreSource } from './source-scorer.js';
2
+ export { filterByTrust } from './recall-filter.js';
3
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/defence/trust/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC"}
@@ -0,0 +1,10 @@
1
+ /**
2
+ * Recall filter — filters recall results by trust score and sensitivity.
3
+ */
4
+ export declare function filterByTrust<T extends {
5
+ trust_score?: number;
6
+ sensitivity_level?: string;
7
+ content?: string;
8
+ metadata?: Record<string, unknown>;
9
+ }>(results: T[], minTrust: number, context?: string): T[];
10
+ //# sourceMappingURL=recall-filter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"recall-filter.d.ts","sourceRoot":"","sources":["../../../src/defence/trust/recall-filter.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,wBAAgB,aAAa,CAC3B,CAAC,SAAS;IACR,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACpC,EACD,OAAO,EAAE,CAAC,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,CAAC,EAAE,CAqCvD"}
@@ -0,0 +1,38 @@
1
+ /**
2
+ * Recall filter — filters recall results by trust score and sensitivity.
3
+ */
4
+ export function filterByTrust(results, minTrust, context) {
5
+ return results
6
+ .filter((item) => {
7
+ const score = item.trust_score ?? 0;
8
+ // Never return quarantined items
9
+ if (score === 0)
10
+ return false;
11
+ // Filter below minimum trust
12
+ if (score < minTrust)
13
+ return false;
14
+ // CONFIDENTIAL: only include if context matches
15
+ if (item.sensitivity_level === 'CONFIDENTIAL') {
16
+ if (!context || item.metadata?.context !== context)
17
+ return false;
18
+ }
19
+ return true;
20
+ })
21
+ .map((item) => {
22
+ const score = item.trust_score ?? 0;
23
+ let result = item;
24
+ // RESTRICTED: redact content
25
+ if (item.sensitivity_level === 'RESTRICTED') {
26
+ result = { ...result, content: '[REDACTED - RESTRICTED]' };
27
+ }
28
+ // Low trust: mark as unverified
29
+ if (score < 0.5) {
30
+ result = {
31
+ ...result,
32
+ metadata: { ...result.metadata, unverified: true },
33
+ };
34
+ }
35
+ return result;
36
+ });
37
+ }
38
+ //# sourceMappingURL=recall-filter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"recall-filter.js","sourceRoot":"","sources":["../../../src/defence/trust/recall-filter.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,MAAM,UAAU,aAAa,CAO3B,OAAY,EAAE,QAAgB,EAAE,OAAgB;IAChD,OAAO,OAAO;SACX,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE;QACf,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,IAAI,CAAC,CAAC;QAEpC,iCAAiC;QACjC,IAAI,KAAK,KAAK,CAAC;YAAE,OAAO,KAAK,CAAC;QAE9B,6BAA6B;QAC7B,IAAI,KAAK,GAAG,QAAQ;YAAE,OAAO,KAAK,CAAC;QAEnC,gDAAgD;QAChD,IAAI,IAAI,CAAC,iBAAiB,KAAK,cAAc,EAAE,CAAC;YAC9C,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,QAAQ,EAAE,OAAO,KAAK,OAAO;gBAAE,OAAO,KAAK,CAAC;QACnE,CAAC;QAED,OAAO,IAAI,CAAC;IACd,CAAC,CAAC;SACD,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE;QACZ,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,IAAI,CAAC,CAAC;QACpC,IAAI,MAAM,GAAG,IAAI,CAAC;QAElB,6BAA6B;QAC7B,IAAI,IAAI,CAAC,iBAAiB,KAAK,YAAY,EAAE,CAAC;YAC5C,MAAM,GAAG,EAAE,GAAG,MAAM,EAAE,OAAO,EAAE,yBAAyB,EAAE,CAAC;QAC7D,CAAC;QAED,gCAAgC;QAChC,IAAI,KAAK,GAAG,GAAG,EAAE,CAAC;YAChB,MAAM,GAAG;gBACP,GAAG,MAAM;gBACT,QAAQ,EAAE,EAAE,GAAG,MAAM,CAAC,QAAQ,EAAE,UAAU,EAAE,IAAI,EAAE;aACnD,CAAC;QACJ,CAAC;QAED,OAAO,MAAM,CAAC;IAChB,CAAC,CAAC,CAAC;AACP,CAAC"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Trust source scorer — assigns trust levels based on memory source.
3
+ */
4
+ import type { DefenceSource, TrustScore } from '../types.js';
5
+ export declare function scoreSource(source: DefenceSource): TrustScore;
6
+ //# sourceMappingURL=source-scorer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"source-scorer.d.ts","sourceRoot":"","sources":["../../../src/defence/trust/source-scorer.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAgB7D,wBAAgB,WAAW,CAAC,MAAM,EAAE,aAAa,GAAG,UAAU,CAkB7D"}
@@ -0,0 +1,34 @@
1
+ /**
2
+ * Trust source scorer — assigns trust levels based on memory source.
3
+ */
4
+ const BASE_SCORES = {
5
+ 'user:direct': 1.0,
6
+ 'user:approved': 0.9,
7
+ };
8
+ const TYPE_SCORES = {
9
+ user: 0.9,
10
+ api: 0.7,
11
+ file: 0.6,
12
+ email: 0.4,
13
+ web: 0.3,
14
+ agent: 0.1,
15
+ };
16
+ export function scoreSource(source) {
17
+ const key = `${source.type}:${source.identifier}`;
18
+ const score = BASE_SCORES[key] ?? TYPE_SCORES[source.type] ?? 0;
19
+ return {
20
+ score,
21
+ source,
22
+ hierarchy: [
23
+ 'user:direct = 1.0',
24
+ 'user:approved = 0.9',
25
+ 'api:* = 0.7',
26
+ 'file:* = 0.6',
27
+ 'email:* = 0.4',
28
+ 'web:* = 0.3',
29
+ 'agent:* = 0.1',
30
+ `>> ${key} = ${score}`,
31
+ ],
32
+ };
33
+ }
34
+ //# sourceMappingURL=source-scorer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"source-scorer.js","sourceRoot":"","sources":["../../../src/defence/trust/source-scorer.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH,MAAM,WAAW,GAA2B;IAC1C,aAAa,EAAE,GAAG;IAClB,eAAe,EAAE,GAAG;CACrB,CAAC;AAEF,MAAM,WAAW,GAA0C;IACzD,IAAI,EAAE,GAAG;IACT,GAAG,EAAE,GAAG;IACR,IAAI,EAAE,GAAG;IACT,KAAK,EAAE,GAAG;IACV,GAAG,EAAE,GAAG;IACR,KAAK,EAAE,GAAG;CACX,CAAC;AAEF,MAAM,UAAU,WAAW,CAAC,MAAqB;IAC/C,MAAM,GAAG,GAAG,GAAG,MAAM,CAAC,IAAI,IAAI,MAAM,CAAC,UAAU,EAAE,CAAC;IAClD,MAAM,KAAK,GAAG,WAAW,CAAC,GAAG,CAAC,IAAI,WAAW,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAEhE,OAAO;QACL,KAAK;QACL,MAAM;QACN,SAAS,EAAE;YACT,mBAAmB;YACnB,qBAAqB;YACrB,aAAa;YACb,cAAc;YACd,eAAe;YACf,aAAa;YACb,eAAe;YACf,MAAM,GAAG,MAAM,KAAK,EAAE;SACvB;KACF,CAAC;AACJ,CAAC"}