opensentinel 3.1.1 → 3.6.1

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 (325) hide show
  1. package/README.md +126 -83
  2. package/dist/agent-manager-7N7REQZQ.js +39 -0
  3. package/dist/agent-processor-I23VWQY3.js +280 -0
  4. package/dist/agent-processor-I23VWQY3.js.map +1 -0
  5. package/dist/agent-types-2T4PXLFQ.js +12 -0
  6. package/dist/alerting-4I37GG4U.js +699 -0
  7. package/dist/alerting-4I37GG4U.js.map +1 -0
  8. package/dist/analysis-agent-JWN2GXYE.js +288 -0
  9. package/dist/analysis-agent-JWN2GXYE.js.map +1 -0
  10. package/dist/{archiver-AVNBYCKQ.js → archiver-XLRIIXPY.js} +86 -17
  11. package/dist/archiver-XLRIIXPY.js.map +1 -0
  12. package/dist/{audit-logger-OBPR7CRO.js → audit-logger-AU3TMWKI.js} +6 -5
  13. package/dist/{auth-UOX5K2BE.js → auth-PH5IHISW.js} +2 -2
  14. package/dist/{autonomy-ZXDBDQUJ.js → autonomy-N7W5XPLX.js} +4 -3
  15. package/dist/autonomy-N7W5XPLX.js.map +1 -0
  16. package/dist/{aws-s3-Q4LLZZPD.js → aws-s3-QZMURYXB.js} +2 -2
  17. package/dist/{backup-restore-PZ7CYYB7.js → backup-restore-72OQTZO3.js} +2 -2
  18. package/dist/{blocks-R3PODY47.js → blocks-YOWOESDD.js} +4 -4
  19. package/dist/bot-MU2TJQ3Y.js +46 -0
  20. package/dist/brain-SLA474EU.js +65 -0
  21. package/dist/{camera-monitor-M5CYKUU4.js → camera-monitor-LHTUWHEL.js} +2 -2
  22. package/dist/{charts-V7ARZNKF.js → charts-FJ32GQK7.js} +2 -2
  23. package/dist/{chunk-6PMVAAA7.js → chunk-2RGPWU77.js} +3 -3
  24. package/dist/{chunk-TVEWKIK3.js → chunk-2WTKTG2C.js} +2 -2
  25. package/dist/{chunk-MXAPLSJ5.js → chunk-45YXODSB.js} +2 -2
  26. package/dist/{chunk-SJSUSJ47.js → chunk-4YJRBMMA.js} +2 -2
  27. package/dist/chunk-643M3AP5.js +564 -0
  28. package/dist/chunk-643M3AP5.js.map +1 -0
  29. package/dist/{chunk-766ASQWE.js → chunk-6JY4HNUH.js} +2413 -2368
  30. package/dist/chunk-6JY4HNUH.js.map +1 -0
  31. package/dist/chunk-6LTLIYAQ.js +194 -0
  32. package/dist/chunk-6LTLIYAQ.js.map +1 -0
  33. package/dist/chunk-6UZPE35A.js +724 -0
  34. package/dist/chunk-6UZPE35A.js.map +1 -0
  35. package/dist/chunk-6W6PTJFT.js +181 -0
  36. package/dist/chunk-6W6PTJFT.js.map +1 -0
  37. package/dist/chunk-7MZN73J2.js +162 -0
  38. package/dist/chunk-7MZN73J2.js.map +1 -0
  39. package/dist/{chunk-SVAPX2XN.js → chunk-A24GPVLY.js} +9 -7
  40. package/dist/{chunk-SVAPX2XN.js.map → chunk-A24GPVLY.js.map} +1 -1
  41. package/dist/chunk-AD6YEH6U.js +3408 -0
  42. package/dist/chunk-AD6YEH6U.js.map +1 -0
  43. package/dist/chunk-ADTDYJO7.js +265 -0
  44. package/dist/chunk-ADTDYJO7.js.map +1 -0
  45. package/dist/{chunk-WRAKK6K6.js → chunk-AR34B6XR.js} +5 -3
  46. package/dist/{chunk-WRAKK6K6.js.map → chunk-AR34B6XR.js.map} +1 -1
  47. package/dist/chunk-BMOUYXLX.js +418 -0
  48. package/dist/chunk-BMOUYXLX.js.map +1 -0
  49. package/dist/chunk-C6PELIHS.js +60 -0
  50. package/dist/chunk-C6PELIHS.js.map +1 -0
  51. package/dist/{chunk-MQJ2ECQT.js → chunk-CUPEENUY.js} +3 -3
  52. package/dist/{chunk-RZ4YESBG.js → chunk-DOYGMNMK.js} +1 -1
  53. package/dist/chunk-DOYGMNMK.js.map +1 -0
  54. package/dist/chunk-FFV2SXFD.js +380 -0
  55. package/dist/chunk-FFV2SXFD.js.map +1 -0
  56. package/dist/{chunk-EVE7MIIY.js → chunk-GUKKW7JI.js} +15 -16
  57. package/dist/chunk-GUKKW7JI.js.map +1 -0
  58. package/dist/{chunk-66OJ3WB4.js → chunk-H3BOLSTS.js} +2 -2
  59. package/dist/chunk-HKOPRRDJ.js +1021 -0
  60. package/dist/chunk-HKOPRRDJ.js.map +1 -0
  61. package/dist/{chunk-BXZ6EA52.js → chunk-HTF2GIQC.js} +57 -3
  62. package/dist/chunk-HTF2GIQC.js.map +1 -0
  63. package/dist/{chunk-TYAGMJNV.js → chunk-JOA5A3G3.js} +5 -5
  64. package/dist/{chunk-OCVQGBJK.js → chunk-KABG5PG3.js} +6 -4
  65. package/dist/{chunk-OCVQGBJK.js.map → chunk-KABG5PG3.js.map} +1 -1
  66. package/dist/{chunk-VEHFVBLI.js → chunk-KT7NLIXP.js} +2 -2
  67. package/dist/chunk-LFDXEYYB.js +150 -0
  68. package/dist/chunk-LFDXEYYB.js.map +1 -0
  69. package/dist/{chunk-I6BDYQIG.js → chunk-M7YLQHFP.js} +6 -6
  70. package/dist/chunk-M7YLQHFP.js.map +1 -0
  71. package/dist/{chunk-AYUKPTSM.js → chunk-MFK34XSY.js} +96 -218
  72. package/dist/chunk-MFK34XSY.js.map +1 -0
  73. package/dist/chunk-MIC5IBQF.js +386 -0
  74. package/dist/chunk-MIC5IBQF.js.map +1 -0
  75. package/dist/{chunk-4UOE5TUZ.js → chunk-NMSHVO5O.js} +4 -4
  76. package/dist/{chunk-XKYRH4FM.js → chunk-NYVBXUGD.js} +13 -32
  77. package/dist/chunk-NYVBXUGD.js.map +1 -0
  78. package/dist/chunk-ODCFS5WD.js +463 -0
  79. package/dist/chunk-ODCFS5WD.js.map +1 -0
  80. package/dist/{chunk-ZLZKF2PM.js → chunk-PUNIMPMY.js} +32 -2
  81. package/dist/chunk-PUNIMPMY.js.map +1 -0
  82. package/dist/chunk-S4NJJS5C.js +37 -0
  83. package/dist/chunk-S4NJJS5C.js.map +1 -0
  84. package/dist/{chunk-NHMBTUMW.js → chunk-TAAZB5KN.js} +2 -2
  85. package/dist/{chunk-BRBWNV65.js → chunk-U2X2J3FI.js} +3 -3
  86. package/dist/chunk-U2X2J3FI.js.map +1 -0
  87. package/dist/{chunk-PLDDJCW6.js → chunk-UP2VWCW5.js} +1 -12
  88. package/dist/{chunk-4GLYY4NN.js → chunk-UWUIJTT4.js} +8 -2
  89. package/dist/chunk-UWUIJTT4.js.map +1 -0
  90. package/dist/{chunk-SPPMCAKG.js → chunk-VKMFUIVA.js} +2 -2
  91. package/dist/chunk-VKMFUIVA.js.map +1 -0
  92. package/dist/chunk-WZAH34TG.js +129 -0
  93. package/dist/chunk-WZAH34TG.js.map +1 -0
  94. package/dist/{chunk-H5RQOFO2.js → chunk-X6Q3K3L2.js} +6 -6
  95. package/dist/chunk-X6Q3K3L2.js.map +1 -0
  96. package/dist/chunk-XTX7EK43.js +134 -0
  97. package/dist/chunk-XTX7EK43.js.map +1 -0
  98. package/dist/chunk-ZIYTHUM5.js +457 -0
  99. package/dist/chunk-ZIYTHUM5.js.map +1 -0
  100. package/dist/chunker-K6WTR62A.js +12 -0
  101. package/dist/cli.js +1 -1
  102. package/dist/{client-ZQSFPMOB.js → client-FOIYPOZQ.js} +5 -6
  103. package/dist/{clipboard-manager-TEO2GEDN.js → clipboard-manager-4SBNESGZ.js} +2 -2
  104. package/dist/coding-agent-DESSU3AC.js +233 -0
  105. package/dist/coding-agent-DESSU3AC.js.map +1 -0
  106. package/dist/commands/setup.js +1 -1
  107. package/dist/commands/start.js +2 -2
  108. package/dist/commands/status.js +1 -1
  109. package/dist/commands/stop.js +1 -1
  110. package/dist/commands/utils.js +1 -1
  111. package/dist/cost-tracker-EMOIOYH7.js +11 -0
  112. package/dist/{cron-explain-HHQKPD3M.js → cron-explain-UOOOYWZZ.js} +2 -2
  113. package/dist/{crypto-4AP47IKC.js → crypto-2VG3RJR2.js} +2 -2
  114. package/dist/{databases-37X4CI2Y.js → databases-XDPMG5AV.js} +4 -4
  115. package/dist/db-LRIOKQBO.js +77 -0
  116. package/dist/discord-NKR3X4AV.js +80 -0
  117. package/dist/documents-EYIYLZK2.js +184 -0
  118. package/dist/documents-EYIYLZK2.js.map +1 -0
  119. package/dist/docx-parser-EXL4TN5E.js +16 -0
  120. package/dist/{email-K7LO2IPB.js → email-EAQNULVD.js} +33 -25
  121. package/dist/{email-K7LO2IPB.js.map → email-EAQNULVD.js.map} +1 -1
  122. package/dist/{enhanced-retrieval-DNLLEM4Z.js → enhanced-retrieval-OGHT6TS5.js} +11 -8
  123. package/dist/{enhanced-retrieval-DNLLEM4Z.js.map → enhanced-retrieval-OGHT6TS5.js.map} +1 -1
  124. package/dist/enrichment-pipeline-CMUVBDC7.js +14 -0
  125. package/dist/{entity-resolution-Y3IUWEAT.js → entity-resolution-4X4JU43O.js} +6 -5
  126. package/dist/env-CHOFICED.js +12 -0
  127. package/dist/error-tracker-SVQSDQDW.js +32 -0
  128. package/dist/finnhub-X7ZMQSXF.js +178 -0
  129. package/dist/finnhub-X7ZMQSXF.js.map +1 -0
  130. package/dist/fred-TMUF3J2V.js +203 -0
  131. package/dist/fred-TMUF3J2V.js.map +1 -0
  132. package/dist/github-KGNILDWJ.js +833 -0
  133. package/dist/github-KGNILDWJ.js.map +1 -0
  134. package/dist/{google-workspace-DKWUVNGC.js → google-workspace-TSZPZK5G.js} +2 -2
  135. package/dist/{hash-tool-ULQYD7B5.js → hash-tool-ENAB5LWH.js} +2 -2
  136. package/dist/{heartbeat-monitor-GCISLXI3.js → heartbeat-monitor-KRDYTDBF.js} +2 -2
  137. package/dist/hooks-N4MIFBVM.js +14 -0
  138. package/dist/{image-generation-OSU7FP6F.js → image-generation-MDE6AVQO.js} +2 -2
  139. package/dist/imessage-V2XNDDHT.js +43 -0
  140. package/dist/inbox-summarizer-DKKRYXDR.js +55 -0
  141. package/dist/{incident-response-C5J7Q6DT.js → incident-response-ZTIKUWEO.js} +8 -6
  142. package/dist/{incident-response-C5J7Q6DT.js.map → incident-response-ZTIKUWEO.js.map} +1 -1
  143. package/dist/{inventory-manager-352OHXWD.js → inventory-manager-C67BSZM6.js} +2 -2
  144. package/dist/{jira-GSGDBMIG.js → jira-PAGZWUBJ.js} +2 -2
  145. package/dist/{json-tool-QE2SYHEG.js → json-tool-4FK5RNER.js} +2 -2
  146. package/dist/{key-rotation-DPHU4ZTB.js → key-rotation-WCC5FOYS.js} +2 -2
  147. package/dist/knowledge-base-J7PJ7MZ3.js +46 -0
  148. package/dist/lib.d.ts +73 -1
  149. package/dist/lib.js +86 -76
  150. package/dist/lib.js.map +1 -1
  151. package/dist/{mailchimp-KKNF6QJ7.js → mailchimp-ZFYDC44J.js} +2 -2
  152. package/dist/{matrix-QVHG76I7.js → matrix-XHTR53VQ.js} +29 -21
  153. package/dist/{matrix-QVHG76I7.js.map → matrix-XHTR53VQ.js.map} +1 -1
  154. package/dist/{mcp-3JI6W7ZE.js → mcp-3C2TN67D.js} +3 -3
  155. package/dist/metrics-VJDWQWU7.js +25 -0
  156. package/dist/{microsoft365-UCBKJHNX.js → microsoft365-6G2IJMWC.js} +2 -2
  157. package/dist/multi-user-S56GUD6L.js +411 -0
  158. package/dist/multi-user-S56GUD6L.js.map +1 -0
  159. package/dist/{ocr-AC7NPX33.js → ocr-LGUIPKVZ.js} +6 -4
  160. package/dist/{ollama-BOAMSPLJ.js → ollama-J7CU45WT.js} +2 -2
  161. package/dist/osint-agent-RL5XPBRQ.js +189 -0
  162. package/dist/osint-agent-RL5XPBRQ.js.map +1 -0
  163. package/dist/{pages-MI523RB7.js → pages-XDE7JRCA.js} +5 -5
  164. package/dist/{pair-JDFTERIK.js → pair-YZJFQUU5.js} +2 -2
  165. package/dist/{pairing-IFQYCPNS.js → pairing-77N47RAT.js} +2 -2
  166. package/dist/{pdf-ALQVOEJR.js → pdf-67HGXCFJ.js} +3 -3
  167. package/dist/pdf-parser-YLMTTYHL.js +14 -0
  168. package/dist/{presentations-DSV5IHG5.js → presentations-HXTAMGHT.js} +3 -3
  169. package/dist/presentations-HXTAMGHT.js.map +1 -0
  170. package/dist/{prometheus-JNT2BD4L.js → prometheus-YETCZO4I.js} +2 -2
  171. package/dist/{providers-J4LYPHDR.js → providers-H6YIC3MG.js} +6 -4
  172. package/dist/{qr-code-WIX4PB4U.js → qr-code-6WZJHRKL.js} +2 -2
  173. package/dist/{quickbooks-XB4NII2S.js → quickbooks-N675W7IK.js} +2 -2
  174. package/dist/{regex-tool-W4ABRKGK.js → regex-tool-6Q63LQ7B.js} +2 -2
  175. package/dist/regex-tool-6Q63LQ7B.js.map +1 -0
  176. package/dist/research-agent-WCRSY3UZ.js +168 -0
  177. package/dist/research-agent-WCRSY3UZ.js.map +1 -0
  178. package/dist/risk-engine-YKCPT5D5.js +10 -0
  179. package/dist/risk-engine-YKCPT5D5.js.map +1 -0
  180. package/dist/scheduler-CA5UNHZV.js +73 -0
  181. package/dist/scheduler-CA5UNHZV.js.map +1 -0
  182. package/dist/schema-ALJ67YVG.js +72 -0
  183. package/dist/schema-ALJ67YVG.js.map +1 -0
  184. package/dist/{search-BCLBO5E3.js → search-GMLKBHSW.js} +4 -4
  185. package/dist/search-GMLKBHSW.js.map +1 -0
  186. package/dist/{sendgrid-RNXCAFKM.js → sendgrid-QGJIVPWV.js} +2 -2
  187. package/dist/{shopify-NCXYJB4R.js → shopify-ON2PAU27.js} +2 -2
  188. package/dist/signal-X7IQJGRQ.js +43 -0
  189. package/dist/signal-X7IQJGRQ.js.map +1 -0
  190. package/dist/slack-P2LFUJUQ.js +85 -0
  191. package/dist/slack-P2LFUJUQ.js.map +1 -0
  192. package/dist/{sms-M3JIOTCW.js → sms-4VME2HUL.js} +4 -4
  193. package/dist/sms-4VME2HUL.js.map +1 -0
  194. package/dist/{src-VYUE6LRA.js → src-S5KX4YEV.js} +179 -48
  195. package/dist/src-S5KX4YEV.js.map +1 -0
  196. package/dist/{stocks-XXWBPOCU.js → stocks-4M4HZWZS.js} +2 -2
  197. package/dist/stocks-4M4HZWZS.js.map +1 -0
  198. package/dist/text-extractor-OAUBAW5P.js +12 -0
  199. package/dist/text-extractor-OAUBAW5P.js.map +1 -0
  200. package/dist/{text-transform-6SGUA5Z4.js → text-transform-HCLCUDFZ.js} +2 -2
  201. package/dist/text-transform-HCLCUDFZ.js.map +1 -0
  202. package/dist/tools-FGPN522P.js +46 -0
  203. package/dist/tools-FGPN522P.js.map +1 -0
  204. package/dist/{tunnel-IWMXUML4.js → tunnel-XOUVVRAK.js} +4 -2
  205. package/dist/tunnel-XOUVVRAK.js.map +1 -0
  206. package/dist/{twilio-53GEW5JT.js → twilio-3L7DUNYQ.js} +2 -2
  207. package/dist/{unit-converter-ZYXMEZOE.js → unit-converter-LYPAHU64.js} +2 -2
  208. package/dist/unit-converter-LYPAHU64.js.map +1 -0
  209. package/dist/whatsapp-KRPQ4YUX.js +43 -0
  210. package/dist/whatsapp-KRPQ4YUX.js.map +1 -0
  211. package/dist/{word-document-7B6SJMAY.js → word-document-D6N2C47N.js} +4 -4
  212. package/dist/word-document-D6N2C47N.js.map +1 -0
  213. package/dist/workflow-store-ZYAYE5P6.js +373 -0
  214. package/dist/workflow-store-ZYAYE5P6.js.map +1 -0
  215. package/dist/writing-agent-VDGLNOGO.js +243 -0
  216. package/dist/writing-agent-VDGLNOGO.js.map +1 -0
  217. package/dist/{xero-QYO66D45.js → xero-UHAHVYSD.js} +2 -2
  218. package/dist/{zapier-webhook-TBZ5YF2A.js → zapier-webhook-NIELLTXR.js} +2 -2
  219. package/package.json +11 -1
  220. package/dist/archiver-AVNBYCKQ.js.map +0 -1
  221. package/dist/autonomy-ZXDBDQUJ.js.map +0 -1
  222. package/dist/bot-QRARP4UN.js +0 -36
  223. package/dist/brain-7XLLM3KC.js +0 -56
  224. package/dist/chunk-4GLYY4NN.js.map +0 -1
  225. package/dist/chunk-766ASQWE.js.map +0 -1
  226. package/dist/chunk-AYUKPTSM.js.map +0 -1
  227. package/dist/chunk-BRBWNV65.js.map +0 -1
  228. package/dist/chunk-BXZ6EA52.js.map +0 -1
  229. package/dist/chunk-EVE7MIIY.js.map +0 -1
  230. package/dist/chunk-H5RQOFO2.js.map +0 -1
  231. package/dist/chunk-I6BDYQIG.js.map +0 -1
  232. package/dist/chunk-IZJMVV7O.js +0 -347
  233. package/dist/chunk-IZJMVV7O.js.map +0 -1
  234. package/dist/chunk-O7IH7JTI.js +0 -1898
  235. package/dist/chunk-O7IH7JTI.js.map +0 -1
  236. package/dist/chunk-RZ4YESBG.js.map +0 -1
  237. package/dist/chunk-SPPMCAKG.js.map +0 -1
  238. package/dist/chunk-VRD5CYRL.js +0 -1568
  239. package/dist/chunk-VRD5CYRL.js.map +0 -1
  240. package/dist/chunk-XKYRH4FM.js.map +0 -1
  241. package/dist/chunk-ZLZKF2PM.js.map +0 -1
  242. package/dist/discord-B3HUPGQ6.js +0 -70
  243. package/dist/dist-UISMLMFN.js +0 -21847
  244. package/dist/dist-UISMLMFN.js.map +0 -1
  245. package/dist/enrichment-pipeline-MNHNW65K.js +0 -13
  246. package/dist/env-IWXUVTCB.js +0 -12
  247. package/dist/imessage-NGA2XF2V.js +0 -35
  248. package/dist/inbox-summarizer-NRI4S7IF.js +0 -47
  249. package/dist/presentations-DSV5IHG5.js.map +0 -1
  250. package/dist/scheduler-VK4WFERV.js +0 -63
  251. package/dist/signal-6CGDFYL2.js +0 -35
  252. package/dist/slack-IZQWIKOH.js +0 -75
  253. package/dist/src-VYUE6LRA.js.map +0 -1
  254. package/dist/tools-2RLEI2N6.js +0 -38
  255. package/dist/tunnel-IWMXUML4.js.map +0 -1
  256. package/dist/whatsapp-LFX6YKCM.js +0 -35
  257. package/dist/word-document-7B6SJMAY.js.map +0 -1
  258. /package/dist/{audit-logger-OBPR7CRO.js.map → agent-manager-7N7REQZQ.js.map} +0 -0
  259. /package/dist/{auth-UOX5K2BE.js.map → agent-types-2T4PXLFQ.js.map} +0 -0
  260. /package/dist/{backup-restore-PZ7CYYB7.js.map → audit-logger-AU3TMWKI.js.map} +0 -0
  261. /package/dist/{blocks-R3PODY47.js.map → auth-PH5IHISW.js.map} +0 -0
  262. /package/dist/{aws-s3-Q4LLZZPD.js.map → aws-s3-QZMURYXB.js.map} +0 -0
  263. /package/dist/{bot-QRARP4UN.js.map → backup-restore-72OQTZO3.js.map} +0 -0
  264. /package/dist/{brain-7XLLM3KC.js.map → blocks-YOWOESDD.js.map} +0 -0
  265. /package/dist/{chunk-PLDDJCW6.js.map → bot-MU2TJQ3Y.js.map} +0 -0
  266. /package/dist/{client-ZQSFPMOB.js.map → brain-SLA474EU.js.map} +0 -0
  267. /package/dist/{camera-monitor-M5CYKUU4.js.map → camera-monitor-LHTUWHEL.js.map} +0 -0
  268. /package/dist/{charts-V7ARZNKF.js.map → charts-FJ32GQK7.js.map} +0 -0
  269. /package/dist/{chunk-6PMVAAA7.js.map → chunk-2RGPWU77.js.map} +0 -0
  270. /package/dist/{chunk-TVEWKIK3.js.map → chunk-2WTKTG2C.js.map} +0 -0
  271. /package/dist/{chunk-MXAPLSJ5.js.map → chunk-45YXODSB.js.map} +0 -0
  272. /package/dist/{chunk-SJSUSJ47.js.map → chunk-4YJRBMMA.js.map} +0 -0
  273. /package/dist/{chunk-MQJ2ECQT.js.map → chunk-CUPEENUY.js.map} +0 -0
  274. /package/dist/{chunk-66OJ3WB4.js.map → chunk-H3BOLSTS.js.map} +0 -0
  275. /package/dist/{chunk-TYAGMJNV.js.map → chunk-JOA5A3G3.js.map} +0 -0
  276. /package/dist/{chunk-VEHFVBLI.js.map → chunk-KT7NLIXP.js.map} +0 -0
  277. /package/dist/{chunk-4UOE5TUZ.js.map → chunk-NMSHVO5O.js.map} +0 -0
  278. /package/dist/{chunk-NHMBTUMW.js.map → chunk-TAAZB5KN.js.map} +0 -0
  279. /package/dist/{clipboard-manager-TEO2GEDN.js.map → chunk-UP2VWCW5.js.map} +0 -0
  280. /package/dist/{cron-explain-HHQKPD3M.js.map → chunker-K6WTR62A.js.map} +0 -0
  281. /package/dist/{crypto-4AP47IKC.js.map → client-FOIYPOZQ.js.map} +0 -0
  282. /package/dist/{databases-37X4CI2Y.js.map → clipboard-manager-4SBNESGZ.js.map} +0 -0
  283. /package/dist/{discord-B3HUPGQ6.js.map → cost-tracker-EMOIOYH7.js.map} +0 -0
  284. /package/dist/{enrichment-pipeline-MNHNW65K.js.map → cron-explain-UOOOYWZZ.js.map} +0 -0
  285. /package/dist/{entity-resolution-Y3IUWEAT.js.map → crypto-2VG3RJR2.js.map} +0 -0
  286. /package/dist/{env-IWXUVTCB.js.map → databases-XDPMG5AV.js.map} +0 -0
  287. /package/dist/{hash-tool-ULQYD7B5.js.map → db-LRIOKQBO.js.map} +0 -0
  288. /package/dist/{heartbeat-monitor-GCISLXI3.js.map → discord-NKR3X4AV.js.map} +0 -0
  289. /package/dist/{imessage-NGA2XF2V.js.map → docx-parser-EXL4TN5E.js.map} +0 -0
  290. /package/dist/{inbox-summarizer-NRI4S7IF.js.map → enrichment-pipeline-CMUVBDC7.js.map} +0 -0
  291. /package/dist/{inventory-manager-352OHXWD.js.map → entity-resolution-4X4JU43O.js.map} +0 -0
  292. /package/dist/{json-tool-QE2SYHEG.js.map → env-CHOFICED.js.map} +0 -0
  293. /package/dist/{key-rotation-DPHU4ZTB.js.map → error-tracker-SVQSDQDW.js.map} +0 -0
  294. /package/dist/{google-workspace-DKWUVNGC.js.map → google-workspace-TSZPZK5G.js.map} +0 -0
  295. /package/dist/{mcp-3JI6W7ZE.js.map → hash-tool-ENAB5LWH.js.map} +0 -0
  296. /package/dist/{ocr-AC7NPX33.js.map → heartbeat-monitor-KRDYTDBF.js.map} +0 -0
  297. /package/dist/{ollama-BOAMSPLJ.js.map → hooks-N4MIFBVM.js.map} +0 -0
  298. /package/dist/{image-generation-OSU7FP6F.js.map → image-generation-MDE6AVQO.js.map} +0 -0
  299. /package/dist/{pages-MI523RB7.js.map → imessage-V2XNDDHT.js.map} +0 -0
  300. /package/dist/{pairing-IFQYCPNS.js.map → inbox-summarizer-DKKRYXDR.js.map} +0 -0
  301. /package/dist/{pdf-ALQVOEJR.js.map → inventory-manager-C67BSZM6.js.map} +0 -0
  302. /package/dist/{jira-GSGDBMIG.js.map → jira-PAGZWUBJ.js.map} +0 -0
  303. /package/dist/{prometheus-JNT2BD4L.js.map → json-tool-4FK5RNER.js.map} +0 -0
  304. /package/dist/{providers-J4LYPHDR.js.map → key-rotation-WCC5FOYS.js.map} +0 -0
  305. /package/dist/{qr-code-WIX4PB4U.js.map → knowledge-base-J7PJ7MZ3.js.map} +0 -0
  306. /package/dist/{mailchimp-KKNF6QJ7.js.map → mailchimp-ZFYDC44J.js.map} +0 -0
  307. /package/dist/{regex-tool-W4ABRKGK.js.map → mcp-3C2TN67D.js.map} +0 -0
  308. /package/dist/{scheduler-VK4WFERV.js.map → metrics-VJDWQWU7.js.map} +0 -0
  309. /package/dist/{microsoft365-UCBKJHNX.js.map → microsoft365-6G2IJMWC.js.map} +0 -0
  310. /package/dist/{search-BCLBO5E3.js.map → ocr-LGUIPKVZ.js.map} +0 -0
  311. /package/dist/{signal-6CGDFYL2.js.map → ollama-J7CU45WT.js.map} +0 -0
  312. /package/dist/{slack-IZQWIKOH.js.map → pages-XDE7JRCA.js.map} +0 -0
  313. /package/dist/{pair-JDFTERIK.js.map → pair-YZJFQUU5.js.map} +0 -0
  314. /package/dist/{sms-M3JIOTCW.js.map → pairing-77N47RAT.js.map} +0 -0
  315. /package/dist/{stocks-XXWBPOCU.js.map → pdf-67HGXCFJ.js.map} +0 -0
  316. /package/dist/{text-transform-6SGUA5Z4.js.map → pdf-parser-YLMTTYHL.js.map} +0 -0
  317. /package/dist/{tools-2RLEI2N6.js.map → prometheus-YETCZO4I.js.map} +0 -0
  318. /package/dist/{unit-converter-ZYXMEZOE.js.map → providers-H6YIC3MG.js.map} +0 -0
  319. /package/dist/{whatsapp-LFX6YKCM.js.map → qr-code-6WZJHRKL.js.map} +0 -0
  320. /package/dist/{quickbooks-XB4NII2S.js.map → quickbooks-N675W7IK.js.map} +0 -0
  321. /package/dist/{sendgrid-RNXCAFKM.js.map → sendgrid-QGJIVPWV.js.map} +0 -0
  322. /package/dist/{shopify-NCXYJB4R.js.map → shopify-ON2PAU27.js.map} +0 -0
  323. /package/dist/{twilio-53GEW5JT.js.map → twilio-3L7DUNYQ.js.map} +0 -0
  324. /package/dist/{xero-QYO66D45.js.map → xero-UHAHVYSD.js.map} +0 -0
  325. /package/dist/{zapier-webhook-TBZ5YF2A.js.map → zapier-webhook-NIELLTXR.js.map} +0 -0
@@ -1,9 +1,6 @@
1
- import {
2
- env
3
- } from "./chunk-ZLZKF2PM.js";
4
1
  import {
5
2
  __export
6
- } from "./chunk-PLDDJCW6.js";
3
+ } from "./chunk-UP2VWCW5.js";
7
4
 
8
5
  // src/db/schema.ts
9
6
  var schema_exports = {};
@@ -626,40 +623,17 @@ var incidentTimeline = pgTable(
626
623
  (table) => [index("incident_timeline_incident_idx").on(table.incidentId)]
627
624
  );
628
625
 
629
- // src/db/index.ts
630
- import { drizzle } from "drizzle-orm/postgres-js";
631
- import postgres from "postgres";
632
- var _client = null;
633
- var _db = null;
634
- function getDb() {
635
- if (!_db) {
636
- _client = postgres(env.DATABASE_URL);
637
- _db = drizzle(_client, { schema: schema_exports });
638
- }
639
- return _db;
640
- }
641
- var db = new Proxy(
642
- {},
643
- {
644
- get(_target, prop) {
645
- const instance = getDb();
646
- const value = instance[prop];
647
- if (typeof value === "function") {
648
- return value.bind(instance);
649
- }
650
- return value;
651
- }
652
- }
653
- );
654
-
655
626
  export {
627
+ users,
656
628
  conversations,
657
629
  messages,
658
630
  memories,
631
+ scheduledTasks,
659
632
  toolLogs,
660
633
  sessions,
661
634
  auditLogs,
662
635
  apiKeys,
636
+ rateLimits,
663
637
  metrics,
664
638
  errorLogs,
665
639
  usagePatterns,
@@ -672,10 +646,17 @@ export {
672
646
  agentMessages,
673
647
  agentProgress,
674
648
  personas,
649
+ organizations,
650
+ organizationMembers,
651
+ sharedMemories,
652
+ usageQuotas,
675
653
  graphEntities,
676
654
  graphRelationships,
655
+ documents,
656
+ documentChunks,
657
+ twoFactorAuth,
677
658
  securityIncidents,
678
659
  incidentTimeline,
679
- db
660
+ schema_exports
680
661
  };
681
- //# sourceMappingURL=chunk-XKYRH4FM.js.map
662
+ //# sourceMappingURL=chunk-NYVBXUGD.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/db/schema.ts"],"sourcesContent":["import {\n pgTable,\n text,\n timestamp,\n uuid,\n integer,\n jsonb,\n boolean,\n vector,\n index,\n customType,\n} from \"drizzle-orm/pg-core\";\n\n// Custom tsvector type for full-text search\nconst tsvector = customType<{ data: string }>({\n dataType() {\n return \"tsvector\";\n },\n});\n\n// Users table\nexport const users = pgTable(\"users\", {\n id: uuid(\"id\").primaryKey().defaultRandom(),\n telegramId: text(\"telegram_id\").unique(),\n name: text(\"name\"),\n preferences: jsonb(\"preferences\").$type<{\n timezone?: string;\n language?: string;\n verbosity?: \"terse\" | \"normal\" | \"detailed\";\n persona?: \"formal\" | \"casual\" | \"snarky\";\n }>(),\n createdAt: timestamp(\"created_at\").defaultNow().notNull(),\n updatedAt: timestamp(\"updated_at\").defaultNow().notNull(),\n});\n\n// Conversations table\nexport const conversations = pgTable(\"conversations\", {\n id: uuid(\"id\").primaryKey().defaultRandom(),\n userId: uuid(\"user_id\").references(() => users.id),\n title: text(\"title\"),\n source: text(\"source\").notNull().default(\"telegram\"), // telegram, web, api\n metadata: jsonb(\"metadata\"),\n createdAt: timestamp(\"created_at\").defaultNow().notNull(),\n updatedAt: timestamp(\"updated_at\").defaultNow().notNull(),\n});\n\n// Messages table\nexport const messages = pgTable(\n \"messages\",\n {\n id: uuid(\"id\").primaryKey().defaultRandom(),\n conversationId: uuid(\"conversation_id\")\n .references(() => conversations.id)\n .notNull(),\n role: text(\"role\").notNull().$type<\"user\" | \"assistant\" | \"system\">(),\n content: text(\"content\").notNull(),\n tokenCount: integer(\"token_count\"),\n metadata: jsonb(\"metadata\"),\n encrypted: boolean(\"encrypted\").default(false).notNull(),\n createdAt: timestamp(\"created_at\").defaultNow().notNull(),\n },\n (table) => [index(\"messages_conversation_idx\").on(table.conversationId)]\n);\n\n// Memories table with vector embeddings for RAG\nexport const memories = pgTable(\n \"memories\",\n {\n id: uuid(\"id\").primaryKey().defaultRandom(),\n userId: uuid(\"user_id\").references(() => users.id),\n type: text(\"type\")\n .notNull()\n .$type<\"episodic\" | \"semantic\" | \"procedural\">(),\n content: text(\"content\").notNull(),\n embedding: vector(\"embedding\", { dimensions: 1536 }), // OpenAI embedding size\n searchVector: tsvector(\"search_vector\"), // Full-text search vector (GIN indexed)\n importance: integer(\"importance\").default(5), // 1-10 scale\n source: text(\"source\"), // Where this memory came from\n provenance: text(\"provenance\"), // Origin tracking: \"conversation:id\", \"api:manual\", \"extraction:auto\"\n metadata: jsonb(\"metadata\"),\n encrypted: boolean(\"encrypted\").default(false).notNull(),\n lastAccessed: timestamp(\"last_accessed\").defaultNow(),\n createdAt: timestamp(\"created_at\").defaultNow().notNull(),\n },\n (table) => [index(\"memories_user_idx\").on(table.userId)]\n);\n\n// Scheduled tasks table\nexport const scheduledTasks = pgTable(\"scheduled_tasks\", {\n id: uuid(\"id\").primaryKey().defaultRandom(),\n userId: uuid(\"user_id\").references(() => users.id),\n name: text(\"name\").notNull(),\n description: text(\"description\"),\n cronExpression: text(\"cron_expression\"),\n nextRunAt: timestamp(\"next_run_at\"),\n lastRunAt: timestamp(\"last_run_at\"),\n enabled: boolean(\"enabled\").default(true),\n action: jsonb(\"action\").$type<{\n type: \"message\" | \"command\" | \"webhook\";\n payload: Record<string, unknown>;\n }>(),\n createdAt: timestamp(\"created_at\").defaultNow().notNull(),\n});\n\n// Tool execution logs\nexport const toolLogs = pgTable(\n \"tool_logs\",\n {\n id: uuid(\"id\").primaryKey().defaultRandom(),\n conversationId: uuid(\"conversation_id\").references(() => conversations.id),\n toolName: text(\"tool_name\").notNull(),\n input: jsonb(\"input\"),\n output: jsonb(\"output\"),\n success: boolean(\"success\").notNull(),\n durationMs: integer(\"duration_ms\"),\n createdAt: timestamp(\"created_at\").defaultNow().notNull(),\n },\n (table) => [index(\"tool_logs_conversation_idx\").on(table.conversationId)]\n);\n\n// ============================================\n// SECURITY TABLES (Phase 1)\n// ============================================\n\n// Sessions table for session management\nexport const sessions = pgTable(\n \"sessions\",\n {\n id: uuid(\"id\").primaryKey().defaultRandom(),\n userId: uuid(\"user_id\")\n .references(() => users.id)\n .notNull(),\n token: text(\"token\").notNull().unique(),\n deviceInfo: jsonb(\"device_info\").$type<{\n userAgent?: string;\n platform?: string;\n browser?: string;\n }>(),\n ipAddress: text(\"ip_address\"),\n createdAt: timestamp(\"created_at\").defaultNow().notNull(),\n expiresAt: timestamp(\"expires_at\").notNull(),\n lastActiveAt: timestamp(\"last_active_at\").defaultNow(),\n },\n (table) => [index(\"sessions_user_idx\").on(table.userId)]\n);\n\n// Audit logs table for tracking all actions\nexport const auditLogs = pgTable(\n \"audit_logs\",\n {\n id: uuid(\"id\").primaryKey().defaultRandom(),\n userId: uuid(\"user_id\").references(() => users.id),\n sessionId: uuid(\"session_id\").references(() => sessions.id),\n action: text(\"action\").notNull(), // 'tool_use', 'login', 'settings_change', etc.\n resource: text(\"resource\"), // 'shell', 'file', 'memory', etc.\n resourceId: text(\"resource_id\"), // ID of the affected resource\n details: jsonb(\"details\"),\n ipAddress: text(\"ip_address\"),\n userAgent: text(\"user_agent\"),\n success: boolean(\"success\").default(true),\n createdAt: timestamp(\"created_at\").defaultNow().notNull(),\n // Tamper-proof chain fields (SOC 2)\n sequenceNumber: integer(\"sequence_number\"),\n entryHash: text(\"entry_hash\"),\n previousHash: text(\"previous_hash\"),\n },\n (table) => [\n index(\"audit_logs_user_idx\").on(table.userId),\n index(\"audit_logs_action_idx\").on(table.action),\n index(\"audit_logs_created_idx\").on(table.createdAt),\n index(\"audit_logs_sequence_idx\").on(table.sequenceNumber),\n ]\n);\n\n// API keys table for programmatic access\nexport const apiKeys = pgTable(\n \"api_keys\",\n {\n id: uuid(\"id\").primaryKey().defaultRandom(),\n userId: uuid(\"user_id\")\n .references(() => users.id)\n .notNull(),\n name: text(\"name\").notNull(),\n keyHash: text(\"key_hash\").notNull(), // bcrypt hash of the key\n keyPrefix: text(\"key_prefix\").notNull(), // First 8 chars for identification (e.g., \"mb_live_\")\n permissions: jsonb(\"permissions\").$type<string[]>(), // ['chat:basic', 'tools:shell', etc.]\n lastUsedAt: timestamp(\"last_used_at\"),\n expiresAt: timestamp(\"expires_at\"),\n createdAt: timestamp(\"created_at\").defaultNow().notNull(),\n revokedAt: timestamp(\"revoked_at\"),\n },\n (table) => [index(\"api_keys_user_idx\").on(table.userId)]\n);\n\n// Rate limits table for tracking request rates\nexport const rateLimits = pgTable(\n \"rate_limits\",\n {\n id: uuid(\"id\").primaryKey().defaultRandom(),\n identifier: text(\"identifier\").notNull(), // userId, IP, or API key prefix\n endpoint: text(\"endpoint\").notNull(), // 'api/chat', 'tool/shell', etc.\n windowStart: timestamp(\"window_start\").notNull(),\n requestCount: integer(\"request_count\").default(0),\n lastRequest: timestamp(\"last_request\"),\n },\n (table) => [\n index(\"rate_limits_identifier_endpoint_idx\").on(\n table.identifier,\n table.endpoint\n ),\n ]\n);\n\n// ============================================\n// OBSERVABILITY TABLES (Phase 1)\n// ============================================\n\n// Metrics table for performance tracking\nexport const metrics = pgTable(\n \"metrics\",\n {\n id: uuid(\"id\").primaryKey().defaultRandom(),\n name: text(\"name\").notNull(), // 'response_latency', 'token_usage', 'tool_duration', etc.\n value: integer(\"value\").notNull(),\n unit: text(\"unit\"), // 'ms', 'tokens', 'bytes', etc.\n tags: jsonb(\"tags\").$type<Record<string, string>>(), // { tool: 'shell', status: 'success' }\n timestamp: timestamp(\"timestamp\").defaultNow().notNull(),\n },\n (table) => [\n index(\"metrics_name_timestamp_idx\").on(table.name, table.timestamp),\n ]\n);\n\n// Error logs table for centralized error tracking\nexport const errorLogs = pgTable(\n \"error_logs\",\n {\n id: uuid(\"id\").primaryKey().defaultRandom(),\n source: text(\"source\").notNull(), // 'brain', 'tool', 'telegram', 'api', 'scheduler'\n errorType: text(\"error_type\").notNull(), // 'ApiError', 'ValidationError', etc.\n errorCode: text(\"error_code\"), // Application-specific error codes\n message: text(\"message\").notNull(),\n stack: text(\"stack\"),\n context: jsonb(\"context\"), // Additional context like request data\n userId: uuid(\"user_id\").references(() => users.id),\n conversationId: uuid(\"conversation_id\").references(() => conversations.id),\n resolved: boolean(\"resolved\").default(false),\n createdAt: timestamp(\"created_at\").defaultNow().notNull(),\n },\n (table) => [\n index(\"error_logs_source_idx\").on(table.source),\n index(\"error_logs_created_idx\").on(table.createdAt),\n ]\n);\n\n// ============================================\n// EVOLUTION SYSTEM TABLES (Phase 2)\n// ============================================\n\n// Usage patterns for evolution tracking\nexport const usagePatterns = pgTable(\n \"usage_patterns\",\n {\n id: uuid(\"id\").primaryKey().defaultRandom(),\n userId: uuid(\"user_id\")\n .references(() => users.id)\n .notNull(),\n patternType: text(\"pattern_type\").notNull(), // 'tool_usage', 'topic', 'time_of_day', 'complexity'\n patternKey: text(\"pattern_key\").notNull(), // e.g., 'shell', 'morning', 'coding'\n patternData: jsonb(\"pattern_data\"),\n confidence: integer(\"confidence\").default(0), // 0-100\n firstSeen: timestamp(\"first_seen\").defaultNow().notNull(),\n lastSeen: timestamp(\"last_seen\").defaultNow(),\n occurrences: integer(\"occurrences\").default(1),\n },\n (table) => [\n index(\"usage_patterns_user_idx\").on(table.userId),\n index(\"usage_patterns_type_idx\").on(table.patternType),\n ]\n);\n\n// Achievements definitions\nexport const achievements = pgTable(\"achievements\", {\n id: uuid(\"id\").primaryKey().defaultRandom(),\n code: text(\"code\").notNull().unique(), // 'first_tool_use', 'power_user', 'researcher'\n name: text(\"name\").notNull(),\n description: text(\"description\"),\n iconEmoji: text(\"icon_emoji\"), // Emoji to display\n category: text(\"category\"), // 'exploration', 'productivity', 'mastery'\n criteria: jsonb(\"criteria\").$type<{\n type: string; // 'count', 'streak', 'threshold'\n metric: string; // 'tool_uses', 'conversations', 'memories'\n threshold: number;\n conditions?: Record<string, unknown>;\n }>(),\n points: integer(\"points\").default(10),\n createdAt: timestamp(\"created_at\").defaultNow().notNull(),\n});\n\n// User achievements (unlocked)\nexport const userAchievements = pgTable(\n \"user_achievements\",\n {\n id: uuid(\"id\").primaryKey().defaultRandom(),\n userId: uuid(\"user_id\")\n .references(() => users.id)\n .notNull(),\n achievementId: uuid(\"achievement_id\")\n .references(() => achievements.id)\n .notNull(),\n unlockedAt: timestamp(\"unlocked_at\").defaultNow().notNull(),\n progress: integer(\"progress\").default(100), // For progressive achievements\n notified: boolean(\"notified\").default(false),\n },\n (table) => [index(\"user_achievements_user_idx\").on(table.userId)]\n);\n\n// Evolution transformation modes\nexport const evolutionModes = pgTable(\n \"molt_modes\",\n {\n id: uuid(\"id\").primaryKey().defaultRandom(),\n userId: uuid(\"user_id\")\n .references(() => users.id)\n .notNull(),\n mode: text(\"mode\")\n .notNull()\n .$type<\"productivity\" | \"creative\" | \"research\" | \"learning\">(),\n activatedAt: timestamp(\"activated_at\").defaultNow().notNull(),\n deactivatedAt: timestamp(\"deactivated_at\"),\n metadata: jsonb(\"metadata\"),\n },\n (table) => [index(\"molt_modes_user_idx\").on(table.userId)]\n);\n\n// Archived memories (for memory shedding)\nexport const archivedMemories = pgTable(\n \"archived_memories\",\n {\n id: uuid(\"id\").primaryKey().defaultRandom(),\n originalMemoryId: uuid(\"original_memory_id\").notNull(),\n userId: uuid(\"user_id\").references(() => users.id),\n type: text(\"type\")\n .notNull()\n .$type<\"episodic\" | \"semantic\" | \"procedural\">(),\n content: text(\"content\").notNull(),\n reason: text(\"reason\"), // 'stale', 'duplicate', 'low_importance', 'user_request'\n originalCreatedAt: timestamp(\"original_created_at\"),\n archivedAt: timestamp(\"archived_at\").defaultNow().notNull(),\n },\n (table) => [index(\"archived_memories_user_idx\").on(table.userId)]\n);\n\n// ============================================\n// CALENDAR & TRIGGERS TABLES (Phase 3)\n// ============================================\n\nexport const calendarTriggers = pgTable(\n \"calendar_triggers\",\n {\n id: uuid(\"id\").primaryKey().defaultRandom(),\n userId: uuid(\"user_id\")\n .references(() => users.id)\n .notNull(),\n name: text(\"name\").notNull(),\n calendarSource: text(\"calendar_source\").notNull(), // 'google', 'outlook', 'ical'\n calendarId: text(\"calendar_id\"),\n triggerType: text(\"trigger_type\").notNull(), // 'event_start', 'event_end', 'daily_briefing'\n offsetMinutes: integer(\"offset_minutes\").default(0), // Trigger X minutes before/after\n action: jsonb(\"action\").$type<{\n type: \"message\" | \"tool\" | \"webhook\";\n payload: Record<string, unknown>;\n }>(),\n enabled: boolean(\"enabled\").default(true),\n lastTriggered: timestamp(\"last_triggered\"),\n createdAt: timestamp(\"created_at\").defaultNow().notNull(),\n },\n (table) => [index(\"calendar_triggers_user_idx\").on(table.userId)]\n);\n\n// ============================================\n// SUB-AGENT TABLES (Phase 4)\n// ============================================\n\nexport const subAgents = pgTable(\n \"sub_agents\",\n {\n id: uuid(\"id\").primaryKey().defaultRandom(),\n parentConversationId: uuid(\"parent_conversation_id\").references(\n () => conversations.id\n ),\n userId: uuid(\"user_id\")\n .references(() => users.id)\n .notNull(),\n type: text(\"type\")\n .notNull()\n .$type<\"research\" | \"coding\" | \"writing\" | \"analysis\">(),\n name: text(\"name\").notNull(),\n status: text(\"status\")\n .notNull()\n .$type<\"pending\" | \"running\" | \"completed\" | \"failed\" | \"cancelled\">(),\n objective: text(\"objective\").notNull(),\n context: jsonb(\"context\"),\n result: jsonb(\"result\"),\n tokenBudget: integer(\"token_budget\").default(50000),\n tokensUsed: integer(\"tokens_used\").default(0),\n timeBudgetMs: integer(\"time_budget_ms\").default(3600000), // 1 hour default\n startedAt: timestamp(\"started_at\"),\n completedAt: timestamp(\"completed_at\"),\n createdAt: timestamp(\"created_at\").defaultNow().notNull(),\n },\n (table) => [\n index(\"sub_agents_user_idx\").on(table.userId),\n index(\"sub_agents_status_idx\").on(table.status),\n ]\n);\n\nexport const agentMessages = pgTable(\n \"agent_messages\",\n {\n id: uuid(\"id\").primaryKey().defaultRandom(),\n agentId: uuid(\"agent_id\")\n .references(() => subAgents.id)\n .notNull(),\n role: text(\"role\")\n .notNull()\n .$type<\"user\" | \"assistant\" | \"system\" | \"tool_result\">(),\n content: text(\"content\").notNull(),\n metadata: jsonb(\"metadata\"),\n createdAt: timestamp(\"created_at\").defaultNow().notNull(),\n },\n (table) => [index(\"agent_messages_agent_idx\").on(table.agentId)]\n);\n\nexport const agentProgress = pgTable(\n \"agent_progress\",\n {\n id: uuid(\"id\").primaryKey().defaultRandom(),\n agentId: uuid(\"agent_id\")\n .references(() => subAgents.id)\n .notNull(),\n step: integer(\"step\").notNull(),\n description: text(\"description\").notNull(),\n status: text(\"status\")\n .notNull()\n .$type<\"pending\" | \"running\" | \"completed\" | \"failed\">(),\n output: jsonb(\"output\"),\n createdAt: timestamp(\"created_at\").defaultNow().notNull(),\n },\n (table) => [index(\"agent_progress_agent_idx\").on(table.agentId)]\n);\n\n// ============================================\n// PERSONALITY TABLES (Phase 5)\n// ============================================\n\nexport const personas = pgTable(\n \"personas\",\n {\n id: uuid(\"id\").primaryKey().defaultRandom(),\n userId: uuid(\"user_id\").references(() => users.id), // null = system persona\n name: text(\"name\").notNull(),\n description: text(\"description\"),\n basePrompt: text(\"base_prompt\").notNull(),\n isDefault: boolean(\"is_default\").default(false),\n isSystem: boolean(\"is_system\").default(false), // Built-in personas\n settings: jsonb(\"settings\").$type<{\n verbosity: \"terse\" | \"normal\" | \"detailed\";\n humor: \"off\" | \"subtle\" | \"full\";\n formality: \"formal\" | \"casual\" | \"professional\";\n emoji: boolean;\n proactivity: \"minimal\" | \"moderate\" | \"proactive\";\n }>(),\n createdAt: timestamp(\"created_at\").defaultNow().notNull(),\n },\n (table) => [index(\"personas_user_idx\").on(table.userId)]\n);\n\n// ============================================\n// ENTERPRISE TABLES (Phase 6)\n// ============================================\n\nexport const organizations = pgTable(\"organizations\", {\n id: uuid(\"id\").primaryKey().defaultRandom(),\n name: text(\"name\").notNull(),\n slug: text(\"slug\").unique(),\n settings: jsonb(\"settings\"),\n createdAt: timestamp(\"created_at\").defaultNow().notNull(),\n updatedAt: timestamp(\"updated_at\").defaultNow(),\n});\n\nexport const organizationMembers = pgTable(\n \"organization_members\",\n {\n id: uuid(\"id\").primaryKey().defaultRandom(),\n organizationId: uuid(\"organization_id\")\n .references(() => organizations.id)\n .notNull(),\n userId: uuid(\"user_id\")\n .references(() => users.id)\n .notNull(),\n role: text(\"role\").notNull().$type<\"owner\" | \"admin\" | \"member\" | \"viewer\">(),\n joinedAt: timestamp(\"joined_at\").defaultNow().notNull(),\n },\n (table) => [\n index(\"org_members_org_idx\").on(table.organizationId),\n index(\"org_members_user_idx\").on(table.userId),\n ]\n);\n\nexport const sharedMemories = pgTable(\n \"shared_memories\",\n {\n id: uuid(\"id\").primaryKey().defaultRandom(),\n organizationId: uuid(\"organization_id\")\n .references(() => organizations.id)\n .notNull(),\n memoryId: uuid(\"memory_id\")\n .references(() => memories.id)\n .notNull(),\n sharedBy: uuid(\"shared_by\")\n .references(() => users.id)\n .notNull(),\n sharedAt: timestamp(\"shared_at\").defaultNow().notNull(),\n },\n (table) => [index(\"shared_memories_org_idx\").on(table.organizationId)]\n);\n\nexport const usageQuotas = pgTable(\n \"usage_quotas\",\n {\n id: uuid(\"id\").primaryKey().defaultRandom(),\n userId: uuid(\"user_id\").references(() => users.id),\n organizationId: uuid(\"organization_id\").references(() => organizations.id),\n quotaType: text(\"quota_type\").notNull(), // 'tokens_daily', 'tokens_monthly', 'agents_concurrent'\n limitValue: integer(\"limit_value\").notNull(),\n currentValue: integer(\"current_value\").default(0),\n resetAt: timestamp(\"reset_at\"),\n updatedAt: timestamp(\"updated_at\").defaultNow(),\n },\n (table) => [\n index(\"usage_quotas_user_idx\").on(table.userId),\n index(\"usage_quotas_org_idx\").on(table.organizationId),\n ]\n);\n\n// ============================================\n// KNOWLEDGE GRAPH TABLES\n// ============================================\n\n// Graph entities — people, projects, topics, events, organizations, locations\nexport const graphEntities = pgTable(\n \"graph_entities\",\n {\n id: uuid(\"id\").primaryKey().defaultRandom(),\n userId: uuid(\"user_id\").references(() => users.id),\n type: text(\"type\")\n .notNull()\n .$type<\"person\" | \"project\" | \"topic\" | \"event\" | \"organization\" | \"location\">(),\n name: text(\"name\").notNull(),\n aliases: jsonb(\"aliases\").$type<string[]>().default([]),\n description: text(\"description\"),\n attributes: jsonb(\"attributes\").$type<Record<string, unknown>>().default({}),\n importance: integer(\"importance\").default(50), // 0-100\n mentionCount: integer(\"mention_count\").default(1),\n embedding: vector(\"embedding\", { dimensions: 1536 }),\n createdAt: timestamp(\"created_at\").defaultNow().notNull(),\n updatedAt: timestamp(\"updated_at\").defaultNow().notNull(),\n },\n (table) => [\n index(\"graph_entities_user_idx\").on(table.userId),\n index(\"graph_entities_type_idx\").on(table.type),\n index(\"graph_entities_name_idx\").on(table.name),\n ]\n);\n\n// Graph relationships — connections between entities\nexport const graphRelationships = pgTable(\n \"graph_relationships\",\n {\n id: uuid(\"id\").primaryKey().defaultRandom(),\n sourceEntityId: uuid(\"source_entity_id\")\n .references(() => graphEntities.id, { onDelete: \"cascade\" })\n .notNull(),\n targetEntityId: uuid(\"target_entity_id\")\n .references(() => graphEntities.id, { onDelete: \"cascade\" })\n .notNull(),\n type: text(\"type\")\n .notNull()\n .$type<\n | \"knows\" | \"works_with\" | \"works_on\" | \"family\" | \"friend\"\n | \"colleague\" | \"manages\" | \"reports_to\" | \"belongs_to\"\n | \"related_to\" | \"located_in\" | \"interested_in\" | \"expert_in\"\n | \"mentioned_in\" | \"participates_in\"\n >(),\n strength: integer(\"strength\").default(50), // 0-100\n bidirectional: boolean(\"bidirectional\").default(false),\n context: text(\"context\"),\n attributes: jsonb(\"attributes\").$type<Record<string, unknown>>().default({}),\n createdAt: timestamp(\"created_at\").defaultNow().notNull(),\n updatedAt: timestamp(\"updated_at\").defaultNow().notNull(),\n },\n (table) => [\n index(\"graph_rel_source_idx\").on(table.sourceEntityId),\n index(\"graph_rel_target_idx\").on(table.targetEntityId),\n index(\"graph_rel_type_idx\").on(table.type),\n ]\n);\n\n// ============================================\n// DOCUMENT KNOWLEDGE BASE TABLES\n// ============================================\n\nexport const documents = pgTable(\n \"documents\",\n {\n id: uuid(\"id\").primaryKey().defaultRandom(),\n name: text(\"name\").notNull(),\n filename: text(\"filename\"),\n mimeType: text(\"mime_type\"),\n fileSize: integer(\"file_size\"),\n source: text(\"source\"), // 'upload', 'url', 'api'\n sourceUrl: text(\"source_url\"),\n metadata: jsonb(\"metadata\"),\n status: text(\"status\")\n .notNull()\n .$type<\"pending\" | \"processing\" | \"completed\" | \"failed\">()\n .default(\"pending\"),\n errorMessage: text(\"error_message\"),\n chunkCount: integer(\"chunk_count\").default(0),\n totalTokens: integer(\"total_tokens\").default(0),\n userId: uuid(\"user_id\").references(() => users.id),\n createdAt: timestamp(\"created_at\").defaultNow().notNull(),\n updatedAt: timestamp(\"updated_at\").defaultNow().notNull(),\n processedAt: timestamp(\"processed_at\"),\n },\n (table) => [\n index(\"documents_user_idx\").on(table.userId),\n index(\"documents_status_idx\").on(table.status),\n ]\n);\n\nexport const documentChunks = pgTable(\n \"document_chunks\",\n {\n id: uuid(\"id\").primaryKey().defaultRandom(),\n documentId: uuid(\"document_id\")\n .references(() => documents.id, { onDelete: \"cascade\" })\n .notNull(),\n chunkIndex: integer(\"chunk_index\").notNull(),\n content: text(\"content\").notNull(),\n embedding: vector(\"embedding\", { dimensions: 1536 }),\n tokenCount: integer(\"token_count\"),\n metadata: jsonb(\"metadata\"),\n createdAt: timestamp(\"created_at\").defaultNow().notNull(),\n },\n (table) => [\n index(\"document_chunks_document_idx\").on(table.documentId),\n ]\n);\n\n// ============================================\n// TYPE EXPORTS\n// ============================================\n\nexport type User = typeof users.$inferSelect;\nexport type NewUser = typeof users.$inferInsert;\nexport type Conversation = typeof conversations.$inferSelect;\nexport type NewConversation = typeof conversations.$inferInsert;\nexport type Message = typeof messages.$inferSelect;\nexport type NewMessage = typeof messages.$inferInsert;\nexport type Memory = typeof memories.$inferSelect;\nexport type NewMemory = typeof memories.$inferInsert;\n\n// Security types\nexport type Session = typeof sessions.$inferSelect;\nexport type NewSession = typeof sessions.$inferInsert;\nexport type AuditLog = typeof auditLogs.$inferSelect;\nexport type NewAuditLog = typeof auditLogs.$inferInsert;\nexport type ApiKey = typeof apiKeys.$inferSelect;\nexport type NewApiKey = typeof apiKeys.$inferInsert;\n\n// Observability types\nexport type Metric = typeof metrics.$inferSelect;\nexport type NewMetric = typeof metrics.$inferInsert;\nexport type ErrorLog = typeof errorLogs.$inferSelect;\nexport type NewErrorLog = typeof errorLogs.$inferInsert;\n\n// Evolution system types\nexport type UsagePattern = typeof usagePatterns.$inferSelect;\nexport type NewUsagePattern = typeof usagePatterns.$inferInsert;\nexport type Achievement = typeof achievements.$inferSelect;\nexport type NewAchievement = typeof achievements.$inferInsert;\nexport type UserAchievement = typeof userAchievements.$inferSelect;\nexport type EvolutionMode = typeof evolutionModes.$inferSelect;\nexport type NewEvolutionMode = typeof evolutionModes.$inferInsert;\n\n// Sub-agent types\nexport type SubAgent = typeof subAgents.$inferSelect;\nexport type NewSubAgent = typeof subAgents.$inferInsert;\nexport type AgentMessage = typeof agentMessages.$inferSelect;\nexport type AgentProgress = typeof agentProgress.$inferSelect;\n\n// Personality types\nexport type Persona = typeof personas.$inferSelect;\nexport type NewPersona = typeof personas.$inferInsert;\n\n// Enterprise types\nexport type Organization = typeof organizations.$inferSelect;\nexport type NewOrganization = typeof organizations.$inferInsert;\nexport type OrganizationMember = typeof organizationMembers.$inferSelect;\n\n// Knowledge graph types\nexport type GraphEntity = typeof graphEntities.$inferSelect;\nexport type NewGraphEntity = typeof graphEntities.$inferInsert;\nexport type GraphRelationship = typeof graphRelationships.$inferSelect;\nexport type NewGraphRelationship = typeof graphRelationships.$inferInsert;\n\n// Document knowledge base types\nexport type Document = typeof documents.$inferSelect;\nexport type NewDocument = typeof documents.$inferInsert;\nexport type DocumentChunk = typeof documentChunks.$inferSelect;\nexport type NewDocumentChunk = typeof documentChunks.$inferInsert;\n\n// ============================================\n// SOC 2 COMPLIANCE TABLES\n// ============================================\n\n// Two-factor authentication (persisted, encrypted secrets)\nexport const twoFactorAuth = pgTable(\n \"two_factor_auth\",\n {\n id: uuid(\"id\").primaryKey().defaultRandom(),\n userId: uuid(\"user_id\")\n .references(() => users.id, { onDelete: \"cascade\" })\n .notNull()\n .unique(),\n secretEncrypted: text(\"secret_encrypted\").notNull(),\n recoveryCodes: jsonb(\"recovery_codes\").$type<string[]>().notNull(),\n enabledAt: timestamp(\"enabled_at\").notNull(),\n lastVerifiedAt: timestamp(\"last_verified_at\"),\n keyVersion: integer(\"key_version\").default(1).notNull(),\n metadata: jsonb(\"metadata\"),\n createdAt: timestamp(\"created_at\").defaultNow().notNull(),\n updatedAt: timestamp(\"updated_at\").defaultNow().notNull(),\n },\n (table) => [index(\"two_factor_auth_user_idx\").on(table.userId)]\n);\n\n// Security incidents tracking\nexport const securityIncidents = pgTable(\n \"security_incidents\",\n {\n id: uuid(\"id\").primaryKey().defaultRandom(),\n incidentNumber: text(\"incident_number\").notNull().unique(),\n title: text(\"title\").notNull(),\n description: text(\"description\").notNull(),\n type: text(\"type\")\n .notNull()\n .$type<\n | \"brute_force\"\n | \"unauthorized_access\"\n | \"data_breach\"\n | \"suspicious_activity\"\n | \"system_compromise\"\n | \"policy_violation\"\n >(),\n severity: text(\"severity\")\n .notNull()\n .$type<\"low\" | \"medium\" | \"high\" | \"critical\">(),\n status: text(\"status\")\n .notNull()\n .$type<\"open\" | \"investigating\" | \"contained\" | \"resolved\" | \"closed\">()\n .default(\"open\"),\n userId: uuid(\"user_id\").references(() => users.id),\n assignedTo: uuid(\"assigned_to\").references(() => users.id),\n source: text(\"source\").notNull(),\n sourceData: jsonb(\"source_data\"),\n impactAssessment: text(\"impact_assessment\"),\n containmentActions: jsonb(\"containment_actions\"),\n resolutionNotes: text(\"resolution_notes\"),\n relatedIncidents: jsonb(\"related_incidents\").$type<string[]>(),\n metadata: jsonb(\"metadata\"),\n createdAt: timestamp(\"created_at\").defaultNow().notNull(),\n updatedAt: timestamp(\"updated_at\").defaultNow().notNull(),\n investigatedAt: timestamp(\"investigated_at\"),\n containedAt: timestamp(\"contained_at\"),\n resolvedAt: timestamp(\"resolved_at\"),\n closedAt: timestamp(\"closed_at\"),\n },\n (table) => [\n index(\"security_incidents_status_idx\").on(table.status),\n index(\"security_incidents_severity_idx\").on(table.severity),\n index(\"security_incidents_created_idx\").on(table.createdAt),\n ]\n);\n\n// Incident timeline events\nexport const incidentTimeline = pgTable(\n \"incident_timeline\",\n {\n id: uuid(\"id\").primaryKey().defaultRandom(),\n incidentId: uuid(\"incident_id\")\n .references(() => securityIncidents.id, { onDelete: \"cascade\" })\n .notNull(),\n eventType: text(\"event_type\")\n .notNull()\n .$type<\n | \"created\"\n | \"status_change\"\n | \"assignment\"\n | \"comment\"\n | \"action_taken\"\n | \"escalation\"\n | \"resolution\"\n >(),\n description: text(\"description\").notNull(),\n performedBy: uuid(\"performed_by\").references(() => users.id),\n metadata: jsonb(\"metadata\"),\n createdAt: timestamp(\"created_at\").defaultNow().notNull(),\n },\n (table) => [index(\"incident_timeline_incident_idx\").on(table.incidentId)]\n);\n\n// SOC 2 types\nexport type TwoFactorAuthRecord = typeof twoFactorAuth.$inferSelect;\nexport type NewTwoFactorAuthRecord = typeof twoFactorAuth.$inferInsert;\nexport type SecurityIncident = typeof securityIncidents.$inferSelect;\nexport type NewSecurityIncident = typeof securityIncidents.$inferInsert;\nexport type IncidentTimelineEvent = typeof incidentTimeline.$inferSelect;\n"],"mappings":"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","names":[]}
@@ -0,0 +1,463 @@
1
+ // src/core/intelligence/risk-engine.ts
2
+ var DEFAULT_CONFIG = {
3
+ maxCostPerRequest: 5,
4
+ maxCostPerHour: 50,
5
+ maxCostPerDay: 200,
6
+ maxToolsPerMinute: 30,
7
+ maxToolsPerHour: 500,
8
+ maxMessagesPerMinute: 60,
9
+ blockedTools: [],
10
+ blockedPatterns: [],
11
+ safeMode: false,
12
+ killSwitch: false,
13
+ customChecks: [],
14
+ maxTradeSize: 100,
15
+ maxDailyTradeSpend: 500,
16
+ maxTradesPerHour: 5
17
+ };
18
+ var costTracker = {
19
+ hourly: /* @__PURE__ */ new Map(),
20
+ daily: /* @__PURE__ */ new Map()
21
+ };
22
+ var rateTracker = /* @__PURE__ */ new Map();
23
+ var tradeSpendTracker = {
24
+ daily: /* @__PURE__ */ new Map(),
25
+ hourlyCount: /* @__PURE__ */ new Map()
26
+ };
27
+ var auditLog = [];
28
+ var RiskEngine = class {
29
+ config;
30
+ checks = [];
31
+ constructor(config = {}) {
32
+ this.config = { ...DEFAULT_CONFIG, ...config };
33
+ this.initializeBuiltInChecks();
34
+ this.checks.push(...this.config.customChecks);
35
+ }
36
+ initializeBuiltInChecks() {
37
+ this.checks.push({
38
+ name: "kill_switch",
39
+ description: "Emergency kill switch - blocks all actions",
40
+ severity: "critical",
41
+ check: () => !this.config.killSwitch,
42
+ failMessage: "Kill switch is active. All actions are blocked."
43
+ });
44
+ this.checks.push({
45
+ name: "safe_mode",
46
+ description: "Safe mode restricts to read-only operations",
47
+ severity: "high",
48
+ check: (ctx) => {
49
+ if (!this.config.safeMode) return true;
50
+ const readOnlyActions = [
51
+ "read",
52
+ "search",
53
+ "list",
54
+ "get",
55
+ "query",
56
+ "analyze",
57
+ "view"
58
+ ];
59
+ return readOnlyActions.some(
60
+ (a) => ctx.action.toLowerCase().includes(a)
61
+ );
62
+ },
63
+ failMessage: "Safe mode is active. Only read-only operations are allowed."
64
+ });
65
+ this.checks.push({
66
+ name: "blocked_tools",
67
+ description: "Prevents execution of blocked tools",
68
+ severity: "high",
69
+ check: (ctx) => !ctx.toolName || !this.config.blockedTools.includes(ctx.toolName),
70
+ failMessage: "This tool is blocked by the risk policy."
71
+ });
72
+ this.checks.push({
73
+ name: "blocked_patterns",
74
+ description: "Prevents actions matching blocked patterns",
75
+ severity: "high",
76
+ check: (ctx) => {
77
+ const inputStr = JSON.stringify(ctx.input || {});
78
+ return !this.config.blockedPatterns.some(
79
+ (pattern) => new RegExp(pattern, "i").test(inputStr)
80
+ );
81
+ },
82
+ failMessage: "Input matches a blocked pattern."
83
+ });
84
+ this.checks.push({
85
+ name: "cost_per_request",
86
+ description: "Limits cost per individual request",
87
+ severity: "medium",
88
+ check: (ctx) => !ctx.estimatedCost || ctx.estimatedCost <= this.config.maxCostPerRequest,
89
+ failMessage: `Request exceeds maximum cost of $${this.config.maxCostPerRequest}.`
90
+ });
91
+ this.checks.push({
92
+ name: "hourly_cost_limit",
93
+ description: "Limits total cost per hour",
94
+ severity: "high",
95
+ check: (ctx) => {
96
+ const key = ctx.userId || "global";
97
+ const now = Date.now();
98
+ const hourMs = 3600 * 1e3;
99
+ const entry = costTracker.hourly.get(key);
100
+ if (!entry || now - entry.windowStart > hourMs) {
101
+ return true;
102
+ }
103
+ return entry.total + (ctx.estimatedCost || 0) <= this.config.maxCostPerHour;
104
+ },
105
+ failMessage: `Hourly cost limit of $${this.config.maxCostPerHour} exceeded.`
106
+ });
107
+ this.checks.push({
108
+ name: "daily_cost_limit",
109
+ description: "Limits total cost per day",
110
+ severity: "high",
111
+ check: (ctx) => {
112
+ const key = ctx.userId || "global";
113
+ const now = Date.now();
114
+ const dayMs = 86400 * 1e3;
115
+ const entry = costTracker.daily.get(key);
116
+ if (!entry || now - entry.windowStart > dayMs) {
117
+ return true;
118
+ }
119
+ return entry.total + (ctx.estimatedCost || 0) <= this.config.maxCostPerDay;
120
+ },
121
+ failMessage: `Daily cost limit of $${this.config.maxCostPerDay} exceeded.`
122
+ });
123
+ this.checks.push({
124
+ name: "tool_rate_limit_minute",
125
+ description: "Limits tool executions per minute",
126
+ severity: "medium",
127
+ check: (ctx) => {
128
+ if (!ctx.toolName) return true;
129
+ return this.checkRate(
130
+ `tool:${ctx.userId || "global"}`,
131
+ 60 * 1e3,
132
+ this.config.maxToolsPerMinute
133
+ );
134
+ },
135
+ failMessage: `Tool execution rate limit exceeded (${this.config.maxToolsPerMinute}/min).`
136
+ });
137
+ this.checks.push({
138
+ name: "tool_rate_limit_hour",
139
+ description: "Limits tool executions per hour",
140
+ severity: "medium",
141
+ check: (ctx) => {
142
+ if (!ctx.toolName) return true;
143
+ return this.checkRate(
144
+ `tool_hourly:${ctx.userId || "global"}`,
145
+ 3600 * 1e3,
146
+ this.config.maxToolsPerHour
147
+ );
148
+ },
149
+ failMessage: `Tool execution hourly limit exceeded (${this.config.maxToolsPerHour}/hr).`
150
+ });
151
+ this.checks.push({
152
+ name: "message_rate_limit",
153
+ description: "Limits messages per minute",
154
+ severity: "medium",
155
+ check: (ctx) => {
156
+ if (ctx.action !== "send_message") return true;
157
+ return this.checkRate(
158
+ `msg:${ctx.userId || "global"}`,
159
+ 60 * 1e3,
160
+ this.config.maxMessagesPerMinute
161
+ );
162
+ },
163
+ failMessage: `Message rate limit exceeded (${this.config.maxMessagesPerMinute}/min).`
164
+ });
165
+ this.checks.push({
166
+ name: "command_injection",
167
+ description: "Prevents command injection in tool inputs",
168
+ severity: "critical",
169
+ check: (ctx) => {
170
+ if (!ctx.input) return true;
171
+ const dangerousPatterns = [
172
+ /;\s*(rm|del|format|mkfs|dd)\s/i,
173
+ /\|\s*(bash|sh|cmd|powershell)/i,
174
+ /`[^`]*`/,
175
+ /\$\([^)]*\)/,
176
+ />\s*\/dev\//i
177
+ ];
178
+ const inputStr = JSON.stringify(ctx.input);
179
+ return !dangerousPatterns.some((p) => p.test(inputStr));
180
+ },
181
+ failMessage: "Potential command injection detected in input."
182
+ });
183
+ this.checks.push({
184
+ name: "sensitive_data",
185
+ description: "Prevents leaking sensitive data patterns",
186
+ severity: "high",
187
+ check: (ctx) => {
188
+ if (!ctx.input) return true;
189
+ const sensitivePatterns = [
190
+ /\b\d{4}[\s-]?\d{4}[\s-]?\d{4}[\s-]?\d{4}\b/,
191
+ // credit card
192
+ /\b\d{3}-\d{2}-\d{4}\b/,
193
+ // SSN
194
+ /-----BEGIN\s+(RSA\s+)?PRIVATE\s+KEY-----/
195
+ // private key
196
+ ];
197
+ const inputStr = JSON.stringify(ctx.input);
198
+ return !sensitivePatterns.some((p) => p.test(inputStr));
199
+ },
200
+ failMessage: "Sensitive data pattern detected in input."
201
+ });
202
+ this.checks.push({
203
+ name: "trade_size_limit",
204
+ description: "Blocks orders exceeding maximum single trade size",
205
+ severity: "critical",
206
+ check: (ctx) => {
207
+ if (ctx.toolName !== "crypto_exchange") return true;
208
+ const input = ctx.input || {};
209
+ if (input.action !== "place_order") return true;
210
+ const estimatedTotal = input._estimatedTotal || 0;
211
+ if (estimatedTotal <= 0) return true;
212
+ return estimatedTotal <= this.config.maxTradeSize;
213
+ },
214
+ failMessage: `Trade exceeds maximum single order size of $${this.config.maxTradeSize}.`
215
+ });
216
+ this.checks.push({
217
+ name: "daily_trade_spend_limit",
218
+ description: "Blocks when daily trade spending cap exceeded",
219
+ severity: "critical",
220
+ check: (ctx) => {
221
+ if (ctx.toolName !== "crypto_exchange") return true;
222
+ const input = ctx.input || {};
223
+ if (input.action !== "place_order") return true;
224
+ const estimatedTotal = input._estimatedTotal || 0;
225
+ if (estimatedTotal <= 0) return true;
226
+ const key = ctx.userId || "global";
227
+ const now = Date.now();
228
+ const dayMs = 86400 * 1e3;
229
+ const entry = tradeSpendTracker.daily.get(key);
230
+ if (!entry || now - entry.windowStart > dayMs) {
231
+ return true;
232
+ }
233
+ return entry.total + estimatedTotal <= this.config.maxDailyTradeSpend;
234
+ },
235
+ failMessage: `Daily trade spend limit of $${this.config.maxDailyTradeSpend} exceeded.`
236
+ });
237
+ this.checks.push({
238
+ name: "trade_rate_limit",
239
+ description: "Blocks when hourly trade count exceeded",
240
+ severity: "high",
241
+ check: (ctx) => {
242
+ if (ctx.toolName !== "crypto_exchange") return true;
243
+ const input = ctx.input || {};
244
+ if (input.action !== "place_order") return true;
245
+ const key = ctx.userId || "global";
246
+ const now = Date.now();
247
+ const hourMs = 3600 * 1e3;
248
+ const entry = tradeSpendTracker.hourlyCount.get(key);
249
+ if (!entry || now - entry.windowStart > hourMs) {
250
+ return true;
251
+ }
252
+ return entry.count < this.config.maxTradesPerHour;
253
+ },
254
+ failMessage: `Trade rate limit exceeded (${this.config.maxTradesPerHour}/hr).`
255
+ });
256
+ }
257
+ checkRate(key, windowMs, maxCount) {
258
+ const now = Date.now();
259
+ let entry = rateTracker.get(key);
260
+ if (!entry) {
261
+ entry = { timestamps: [] };
262
+ rateTracker.set(key, entry);
263
+ }
264
+ entry.timestamps = entry.timestamps.filter((t) => now - t < windowMs);
265
+ return entry.timestamps.length < maxCount;
266
+ }
267
+ recordRate(key) {
268
+ let entry = rateTracker.get(key);
269
+ if (!entry) {
270
+ entry = { timestamps: [] };
271
+ rateTracker.set(key, entry);
272
+ }
273
+ entry.timestamps.push(Date.now());
274
+ }
275
+ /**
276
+ * Evaluate all risk checks for an action
277
+ * This is the main entry point - NON-BYPASSABLE
278
+ */
279
+ async evaluate(context) {
280
+ const results = [];
281
+ let allowed = true;
282
+ for (const check of this.checks) {
283
+ let passed;
284
+ try {
285
+ passed = await check.check(context);
286
+ } catch {
287
+ passed = false;
288
+ }
289
+ results.push({
290
+ name: check.name,
291
+ passed,
292
+ severity: check.severity,
293
+ message: passed ? void 0 : check.failMessage
294
+ });
295
+ if (!passed && (check.severity === "critical" || check.severity === "high")) {
296
+ allowed = false;
297
+ }
298
+ }
299
+ const decision = {
300
+ allowed,
301
+ checks: results,
302
+ timestamp: /* @__PURE__ */ new Date(),
303
+ context
304
+ };
305
+ auditLog.push(decision);
306
+ if (auditLog.length > 1e4) {
307
+ auditLog.splice(0, auditLog.length - 5e3);
308
+ }
309
+ if (allowed) {
310
+ if (context.toolName) {
311
+ this.recordRate(`tool:${context.userId || "global"}`);
312
+ this.recordRate(`tool_hourly:${context.userId || "global"}`);
313
+ }
314
+ if (context.action === "send_message") {
315
+ this.recordRate(`msg:${context.userId || "global"}`);
316
+ }
317
+ if (context.estimatedCost) {
318
+ this.recordCost(context.userId || "global", context.estimatedCost);
319
+ }
320
+ }
321
+ return decision;
322
+ }
323
+ recordCost(userId, cost) {
324
+ const now = Date.now();
325
+ const hourMs = 3600 * 1e3;
326
+ const dayMs = 86400 * 1e3;
327
+ let hourly = costTracker.hourly.get(userId);
328
+ if (!hourly || now - hourly.windowStart > hourMs) {
329
+ hourly = { total: 0, windowStart: now };
330
+ costTracker.hourly.set(userId, hourly);
331
+ }
332
+ hourly.total += cost;
333
+ let daily = costTracker.daily.get(userId);
334
+ if (!daily || now - daily.windowStart > dayMs) {
335
+ daily = { total: 0, windowStart: now };
336
+ costTracker.daily.set(userId, daily);
337
+ }
338
+ daily.total += cost;
339
+ }
340
+ /**
341
+ * Add a custom risk check
342
+ */
343
+ addCheck(check) {
344
+ this.checks.push(check);
345
+ }
346
+ /**
347
+ * Activate kill switch
348
+ */
349
+ activateKillSwitch() {
350
+ this.config.killSwitch = true;
351
+ }
352
+ /**
353
+ * Deactivate kill switch
354
+ */
355
+ deactivateKillSwitch() {
356
+ this.config.killSwitch = false;
357
+ }
358
+ /**
359
+ * Enable safe mode
360
+ */
361
+ enableSafeMode() {
362
+ this.config.safeMode = true;
363
+ }
364
+ /**
365
+ * Disable safe mode
366
+ */
367
+ disableSafeMode() {
368
+ this.config.safeMode = false;
369
+ }
370
+ /**
371
+ * Block a tool
372
+ */
373
+ blockTool(toolName) {
374
+ if (!this.config.blockedTools.includes(toolName)) {
375
+ this.config.blockedTools.push(toolName);
376
+ }
377
+ }
378
+ /**
379
+ * Unblock a tool
380
+ */
381
+ unblockTool(toolName) {
382
+ this.config.blockedTools = this.config.blockedTools.filter(
383
+ (t) => t !== toolName
384
+ );
385
+ }
386
+ /**
387
+ * Get recent audit log
388
+ */
389
+ getAuditLog(limit = 100) {
390
+ return auditLog.slice(-limit);
391
+ }
392
+ /**
393
+ * Get current configuration
394
+ */
395
+ getConfig() {
396
+ return { ...this.config };
397
+ }
398
+ /**
399
+ * Update configuration
400
+ */
401
+ updateConfig(updates) {
402
+ Object.assign(this.config, updates);
403
+ }
404
+ /**
405
+ * Record trade spend after a successful trade execution.
406
+ * Call this after a trade completes to track daily/hourly limits.
407
+ */
408
+ recordTradeSpend(userId, amountUsd) {
409
+ const now = Date.now();
410
+ const dayMs = 86400 * 1e3;
411
+ const hourMs = 3600 * 1e3;
412
+ let daily = tradeSpendTracker.daily.get(userId);
413
+ if (!daily || now - daily.windowStart > dayMs) {
414
+ daily = { total: 0, windowStart: now };
415
+ tradeSpendTracker.daily.set(userId, daily);
416
+ }
417
+ daily.total += amountUsd;
418
+ let hourly = tradeSpendTracker.hourlyCount.get(userId);
419
+ if (!hourly || now - hourly.windowStart > hourMs) {
420
+ hourly = { count: 0, windowStart: now };
421
+ tradeSpendTracker.hourlyCount.set(userId, hourly);
422
+ }
423
+ hourly.count += 1;
424
+ }
425
+ /**
426
+ * Register risk engine as a hook on tool:execute to intercept
427
+ * financial tool calls at the hook level.
428
+ */
429
+ registerAsHook(hookMgr) {
430
+ return hookMgr.register({
431
+ event: "tool:execute",
432
+ phase: "before",
433
+ name: "risk-engine-financial",
434
+ priority: 3,
435
+ // Run before tool sandbox (priority 5)
436
+ handler: async (context) => {
437
+ const toolName = context.data.toolName || "";
438
+ const input = context.data.input || {};
439
+ if (toolName !== "crypto_exchange") return context;
440
+ const decision = await this.evaluate({
441
+ action: "tool_execute",
442
+ userId: context.userId,
443
+ toolName,
444
+ input
445
+ });
446
+ if (!decision.allowed) {
447
+ context.cancelled = true;
448
+ const failedChecks = decision.checks.filter((c) => !c.passed).map((c) => c.message).join("; ");
449
+ context.cancelReason = `[RiskEngine] BLOCKED: ${failedChecks}`;
450
+ console.log(`[RiskEngine] Blocked ${toolName}: ${failedChecks}`);
451
+ }
452
+ return context;
453
+ }
454
+ });
455
+ }
456
+ };
457
+ var riskEngine = new RiskEngine();
458
+
459
+ export {
460
+ RiskEngine,
461
+ riskEngine
462
+ };
463
+ //# sourceMappingURL=chunk-ODCFS5WD.js.map