opensentinel 3.1.1 → 3.7.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 (361) hide show
  1. package/README.md +138 -83
  2. package/dist/agent-manager-JZ4IM7XI.js +39 -0
  3. package/dist/agent-processor-DDDHC2SO.js +281 -0
  4. package/dist/agent-processor-DDDHC2SO.js.map +1 -0
  5. package/dist/agent-types-2T4PXLFQ.js +12 -0
  6. package/dist/alerting-LK7VVYTX.js +699 -0
  7. package/dist/alerting-LK7VVYTX.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/analyzer-OTWE3ARE.js +22 -0
  11. package/dist/{archiver-AVNBYCKQ.js → archiver-FPGKRP6P.js} +2 -2
  12. package/dist/{audit-logger-OBPR7CRO.js → audit-logger-CI4WZQPD.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-VDHBGUVI.js +47 -0
  20. package/dist/brain-6QTXN4QP.js +66 -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-WRAKK6K6.js → chunk-2I5QHYG6.js} +5 -3
  24. package/dist/chunk-2I5QHYG6.js.map +1 -0
  25. package/dist/{chunk-TVEWKIK3.js → chunk-2WTKTG2C.js} +2 -2
  26. package/dist/chunk-3AWAWRWB.js +143 -0
  27. package/dist/chunk-3AWAWRWB.js.map +1 -0
  28. package/dist/{chunk-ZLZKF2PM.js → chunk-4KIHDIXZ.js} +43 -2
  29. package/dist/chunk-4KIHDIXZ.js.map +1 -0
  30. package/dist/{chunk-EVE7MIIY.js → chunk-4WH6MFEW.js} +15 -16
  31. package/dist/chunk-4WH6MFEW.js.map +1 -0
  32. package/dist/{chunk-I6BDYQIG.js → chunk-56UJS2LA.js} +6 -6
  33. package/dist/chunk-56UJS2LA.js.map +1 -0
  34. package/dist/chunk-5BTVJR7R.js +37 -0
  35. package/dist/chunk-5BTVJR7R.js.map +1 -0
  36. package/dist/chunk-5JJTLWOR.js +1021 -0
  37. package/dist/chunk-5JJTLWOR.js.map +1 -0
  38. package/dist/chunk-66SAOZPU.js +236 -0
  39. package/dist/chunk-66SAOZPU.js.map +1 -0
  40. package/dist/chunk-6HGMRR4J.js +113 -0
  41. package/dist/chunk-6HGMRR4J.js.map +1 -0
  42. package/dist/chunk-6W6PTJFT.js +181 -0
  43. package/dist/chunk-6W6PTJFT.js.map +1 -0
  44. package/dist/chunk-6ZNCY2GI.js +418 -0
  45. package/dist/chunk-6ZNCY2GI.js.map +1 -0
  46. package/dist/chunk-7BNFELEK.js +31 -0
  47. package/dist/chunk-7BNFELEK.js.map +1 -0
  48. package/dist/chunk-ADTDYJO7.js +265 -0
  49. package/dist/chunk-ADTDYJO7.js.map +1 -0
  50. package/dist/{chunk-OCVQGBJK.js → chunk-BBN4VCNK.js} +6 -4
  51. package/dist/chunk-BBN4VCNK.js.map +1 -0
  52. package/dist/{chunk-SJSUSJ47.js → chunk-BNZHWAZC.js} +2 -2
  53. package/dist/chunk-C6PELIHS.js +60 -0
  54. package/dist/chunk-C6PELIHS.js.map +1 -0
  55. package/dist/{chunk-MQJ2ECQT.js → chunk-CUPEENUY.js} +3 -3
  56. package/dist/{chunk-NHMBTUMW.js → chunk-CWT6CAE5.js} +2 -2
  57. package/dist/{chunk-4GLYY4NN.js → chunk-CZTMGHUC.js} +8 -2
  58. package/dist/chunk-CZTMGHUC.js.map +1 -0
  59. package/dist/{chunk-RZ4YESBG.js → chunk-DOYGMNMK.js} +1 -1
  60. package/dist/chunk-DOYGMNMK.js.map +1 -0
  61. package/dist/chunk-DTISLIMB.js +89 -0
  62. package/dist/chunk-DTISLIMB.js.map +1 -0
  63. package/dist/{chunk-SPPMCAKG.js → chunk-GBVJTRXS.js} +2 -2
  64. package/dist/chunk-GBVJTRXS.js.map +1 -0
  65. package/dist/{chunk-AYUKPTSM.js → chunk-GJETKBOY.js} +96 -218
  66. package/dist/chunk-GJETKBOY.js.map +1 -0
  67. package/dist/{chunk-BXZ6EA52.js → chunk-GW6V4D43.js} +57 -3
  68. package/dist/chunk-GW6V4D43.js.map +1 -0
  69. package/dist/{chunk-6PMVAAA7.js → chunk-HJSEEFO3.js} +3 -3
  70. package/dist/{chunk-TYAGMJNV.js → chunk-HQZQFEAX.js} +5 -5
  71. package/dist/{chunk-MXAPLSJ5.js → chunk-J4JW73TT.js} +2 -2
  72. package/dist/{chunk-VEHFVBLI.js → chunk-JHYYFPKX.js} +2 -2
  73. package/dist/chunk-LFDXEYYB.js +150 -0
  74. package/dist/chunk-LFDXEYYB.js.map +1 -0
  75. package/dist/chunk-MIC5IBQF.js +386 -0
  76. package/dist/chunk-MIC5IBQF.js.map +1 -0
  77. package/dist/chunk-ODCFS5WD.js +463 -0
  78. package/dist/chunk-ODCFS5WD.js.map +1 -0
  79. package/dist/{chunk-XMCVRVTF.js → chunk-P64EV4YY.js} +1 -1
  80. package/dist/chunk-P64EV4YY.js.map +1 -0
  81. package/dist/chunk-PBOCSGNL.js +84 -0
  82. package/dist/chunk-PBOCSGNL.js.map +1 -0
  83. package/dist/{chunk-66OJ3WB4.js → chunk-PD3CTDO6.js} +2 -2
  84. package/dist/chunk-QPY3WRVM.js +647 -0
  85. package/dist/chunk-QPY3WRVM.js.map +1 -0
  86. package/dist/chunk-S2EOIVF4.js +3907 -0
  87. package/dist/chunk-S2EOIVF4.js.map +1 -0
  88. package/dist/chunk-SDLOMKCW.js +213 -0
  89. package/dist/chunk-SDLOMKCW.js.map +1 -0
  90. package/dist/chunk-TKBVW7ZJ.js +162 -0
  91. package/dist/chunk-TKBVW7ZJ.js.map +1 -0
  92. package/dist/{chunk-BRBWNV65.js → chunk-U2X2J3FI.js} +3 -3
  93. package/dist/chunk-U2X2J3FI.js.map +1 -0
  94. package/dist/{chunk-PLDDJCW6.js → chunk-UP2VWCW5.js} +1 -12
  95. package/dist/{chunk-SVAPX2XN.js → chunk-V3OKHQUX.js} +9 -7
  96. package/dist/{chunk-SVAPX2XN.js.map → chunk-V3OKHQUX.js.map} +1 -1
  97. package/dist/{chunk-4UOE5TUZ.js → chunk-WMDVOWN6.js} +4 -4
  98. package/dist/chunk-WMFYI7XC.js +564 -0
  99. package/dist/chunk-WMFYI7XC.js.map +1 -0
  100. package/dist/chunk-WZAH34TG.js +129 -0
  101. package/dist/chunk-WZAH34TG.js.map +1 -0
  102. package/dist/{chunk-H5RQOFO2.js → chunk-X6Q3K3L2.js} +6 -6
  103. package/dist/chunk-X6Q3K3L2.js.map +1 -0
  104. package/dist/chunk-XTX7EK43.js +134 -0
  105. package/dist/chunk-XTX7EK43.js.map +1 -0
  106. package/dist/chunk-YEDEAX6Y.js +194 -0
  107. package/dist/chunk-YEDEAX6Y.js.map +1 -0
  108. package/dist/{chunk-XKYRH4FM.js → chunk-ZIBRVA3Y.js} +70 -30
  109. package/dist/chunk-ZIBRVA3Y.js.map +1 -0
  110. package/dist/chunk-ZIYTHUM5.js +457 -0
  111. package/dist/chunk-ZIYTHUM5.js.map +1 -0
  112. package/dist/{chunk-766ASQWE.js → chunk-ZMML6T63.js} +2711 -2329
  113. package/dist/chunk-ZMML6T63.js.map +1 -0
  114. package/dist/chunk-ZVHG4KF2.js +380 -0
  115. package/dist/chunk-ZVHG4KF2.js.map +1 -0
  116. package/dist/chunker-K6WTR62A.js +12 -0
  117. package/dist/cli.js +1 -1
  118. package/dist/cli.js.map +1 -1
  119. package/dist/{client-ZQSFPMOB.js → client-FOIYPOZQ.js} +5 -6
  120. package/dist/{clipboard-manager-TEO2GEDN.js → clipboard-manager-4SBNESGZ.js} +2 -2
  121. package/dist/coding-agent-DESSU3AC.js +233 -0
  122. package/dist/coding-agent-DESSU3AC.js.map +1 -0
  123. package/dist/commands/setup.js +2 -2
  124. package/dist/commands/start.js +3 -3
  125. package/dist/commands/status.js +2 -2
  126. package/dist/commands/stop.js +2 -2
  127. package/dist/commands/utils.js +2 -2
  128. package/dist/cost-tracker-KZQSTSE2.js +11 -0
  129. package/dist/{cron-explain-HHQKPD3M.js → cron-explain-UOOOYWZZ.js} +2 -2
  130. package/dist/{crypto-4AP47IKC.js → crypto-2VG3RJR2.js} +2 -2
  131. package/dist/{databases-37X4CI2Y.js → databases-XDPMG5AV.js} +4 -4
  132. package/dist/db-I7MNG6CL.js +83 -0
  133. package/dist/discord-6UQHCN27.js +81 -0
  134. package/dist/documents-PFHSK7SZ.js +184 -0
  135. package/dist/documents-PFHSK7SZ.js.map +1 -0
  136. package/dist/docx-parser-EXL4TN5E.js +16 -0
  137. package/dist/{email-K7LO2IPB.js → email-6OIN4SYL.js} +34 -25
  138. package/dist/email-6OIN4SYL.js.map +1 -0
  139. package/dist/{enhanced-retrieval-DNLLEM4Z.js → enhanced-retrieval-JWX2HWU4.js} +12 -8
  140. package/dist/{enhanced-retrieval-DNLLEM4Z.js.map → enhanced-retrieval-JWX2HWU4.js.map} +1 -1
  141. package/dist/enrichment-pipeline-7FE5R5ZI.js +14 -0
  142. package/dist/{entity-resolution-Y3IUWEAT.js → entity-resolution-7Z6STVXX.js} +6 -5
  143. package/dist/env-GN5VHI43.js +12 -0
  144. package/dist/error-tracker-64DEH3D7.js +32 -0
  145. package/dist/finnhub-X7ZMQSXF.js +178 -0
  146. package/dist/finnhub-X7ZMQSXF.js.map +1 -0
  147. package/dist/fred-TMUF3J2V.js +203 -0
  148. package/dist/fred-TMUF3J2V.js.map +1 -0
  149. package/dist/github-DUWSXCNP.js +833 -0
  150. package/dist/github-DUWSXCNP.js.map +1 -0
  151. package/dist/{google-workspace-DKWUVNGC.js → google-workspace-TSZPZK5G.js} +2 -2
  152. package/dist/graph-client-NB475AK5.js +17 -0
  153. package/dist/{hash-tool-ULQYD7B5.js → hash-tool-ENAB5LWH.js} +2 -2
  154. package/dist/{heartbeat-monitor-GCISLXI3.js → heartbeat-monitor-KRDYTDBF.js} +2 -2
  155. package/dist/hooks-N4MIFBVM.js +14 -0
  156. package/dist/{image-generation-OSU7FP6F.js → image-generation-MDE6AVQO.js} +2 -2
  157. package/dist/imessage-DSGSGUZS.js +44 -0
  158. package/dist/inbox-summarizer-F2KAU72V.js +56 -0
  159. package/dist/{incident-response-C5J7Q6DT.js → incident-response-E3UGMX5G.js} +8 -6
  160. package/dist/incident-response-E3UGMX5G.js.map +1 -0
  161. package/dist/{inventory-manager-352OHXWD.js → inventory-manager-C67BSZM6.js} +2 -2
  162. package/dist/{jira-GSGDBMIG.js → jira-PAGZWUBJ.js} +2 -2
  163. package/dist/{json-tool-QE2SYHEG.js → json-tool-4FK5RNER.js} +2 -2
  164. package/dist/{key-rotation-DPHU4ZTB.js → key-rotation-WCC5FOYS.js} +2 -2
  165. package/dist/knowledge-base-5SMMOGQJ.js +46 -0
  166. package/dist/lib.d.ts +94 -1
  167. package/dist/lib.js +83 -66
  168. package/dist/lib.js.map +1 -1
  169. package/dist/{mailchimp-KKNF6QJ7.js → mailchimp-ZFYDC44J.js} +2 -2
  170. package/dist/{matrix-QVHG76I7.js → matrix-WYGEOZL5.js} +30 -21
  171. package/dist/{matrix-QVHG76I7.js.map → matrix-WYGEOZL5.js.map} +1 -1
  172. package/dist/{mcp-3JI6W7ZE.js → mcp-DJ2QDA6A.js} +3 -3
  173. package/dist/metrics-BH3ZLGEV.js +25 -0
  174. package/dist/{microsoft365-UCBKJHNX.js → microsoft365-6G2IJMWC.js} +2 -2
  175. package/dist/multi-user-XAEMB244.js +411 -0
  176. package/dist/multi-user-XAEMB244.js.map +1 -0
  177. package/dist/oauth-UPJYFOVU.js +34 -0
  178. package/dist/{ocr-AC7NPX33.js → ocr-UONKTQU7.js} +6 -4
  179. package/dist/{ollama-BOAMSPLJ.js → ollama-J7CU45WT.js} +2 -2
  180. package/dist/osint-agent-RL5XPBRQ.js +189 -0
  181. package/dist/osint-agent-RL5XPBRQ.js.map +1 -0
  182. package/dist/{pages-MI523RB7.js → pages-XDE7JRCA.js} +5 -5
  183. package/dist/{pair-JDFTERIK.js → pair-YZJFQUU5.js} +2 -2
  184. package/dist/{pairing-IFQYCPNS.js → pairing-77N47RAT.js} +2 -2
  185. package/dist/{pdf-ALQVOEJR.js → pdf-67HGXCFJ.js} +3 -3
  186. package/dist/pdf-parser-YLMTTYHL.js +14 -0
  187. package/dist/{presentations-DSV5IHG5.js → presentations-UOET2FVZ.js} +3 -3
  188. package/dist/presentations-UOET2FVZ.js.map +1 -0
  189. package/dist/{prometheus-JNT2BD4L.js → prometheus-YETCZO4I.js} +2 -2
  190. package/dist/prometheus-YETCZO4I.js.map +1 -0
  191. package/dist/{providers-J4LYPHDR.js → providers-2YQ6E3IF.js} +6 -4
  192. package/dist/providers-2YQ6E3IF.js.map +1 -0
  193. package/dist/{qr-code-WIX4PB4U.js → qr-code-6WZJHRKL.js} +2 -2
  194. package/dist/qr-code-6WZJHRKL.js.map +1 -0
  195. package/dist/{quickbooks-XB4NII2S.js → quickbooks-N675W7IK.js} +2 -2
  196. package/dist/{regex-tool-W4ABRKGK.js → regex-tool-6Q63LQ7B.js} +2 -2
  197. package/dist/regex-tool-6Q63LQ7B.js.map +1 -0
  198. package/dist/research-agent-WCRSY3UZ.js +168 -0
  199. package/dist/research-agent-WCRSY3UZ.js.map +1 -0
  200. package/dist/risk-engine-YKCPT5D5.js +10 -0
  201. package/dist/risk-engine-YKCPT5D5.js.map +1 -0
  202. package/dist/scheduler-6PLLAQI7.js +74 -0
  203. package/dist/scheduler-6PLLAQI7.js.map +1 -0
  204. package/dist/schema-ETY7L2VA.js +78 -0
  205. package/dist/schema-ETY7L2VA.js.map +1 -0
  206. package/dist/{search-BCLBO5E3.js → search-GMLKBHSW.js} +4 -4
  207. package/dist/search-GMLKBHSW.js.map +1 -0
  208. package/dist/{sendgrid-RNXCAFKM.js → sendgrid-QGJIVPWV.js} +2 -2
  209. package/dist/sharepoint-V5P4Q62L.js +30 -0
  210. package/dist/sharepoint-V5P4Q62L.js.map +1 -0
  211. package/dist/{shopify-NCXYJB4R.js → shopify-ON2PAU27.js} +2 -2
  212. package/dist/signal-7D5EPGVL.js +44 -0
  213. package/dist/signal-7D5EPGVL.js.map +1 -0
  214. package/dist/slack-KSS6YK5Z.js +86 -0
  215. package/dist/slack-KSS6YK5Z.js.map +1 -0
  216. package/dist/{sms-M3JIOTCW.js → sms-CSUCC7HL.js} +4 -4
  217. package/dist/sms-CSUCC7HL.js.map +1 -0
  218. package/dist/{src-VYUE6LRA.js → src-GO7GGW7O.js} +190 -52
  219. package/dist/src-GO7GGW7O.js.map +1 -0
  220. package/dist/{stocks-XXWBPOCU.js → stocks-4M4HZWZS.js} +2 -2
  221. package/dist/stocks-4M4HZWZS.js.map +1 -0
  222. package/dist/text-extractor-OAUBAW5P.js +12 -0
  223. package/dist/text-extractor-OAUBAW5P.js.map +1 -0
  224. package/dist/{text-transform-6SGUA5Z4.js → text-transform-HCLCUDFZ.js} +2 -2
  225. package/dist/text-transform-HCLCUDFZ.js.map +1 -0
  226. package/dist/token-store-SEWRX6RE.js +20 -0
  227. package/dist/token-store-SEWRX6RE.js.map +1 -0
  228. package/dist/tools-PJZ6RI4P.js +47 -0
  229. package/dist/tools-PJZ6RI4P.js.map +1 -0
  230. package/dist/{tunnel-IWMXUML4.js → tunnel-XOUVVRAK.js} +4 -2
  231. package/dist/tunnel-XOUVVRAK.js.map +1 -0
  232. package/dist/{twilio-53GEW5JT.js → twilio-3L7DUNYQ.js} +2 -2
  233. package/dist/{unit-converter-ZYXMEZOE.js → unit-converter-LYPAHU64.js} +2 -2
  234. package/dist/unit-converter-LYPAHU64.js.map +1 -0
  235. package/dist/whatsapp-DWXK25V2.js +44 -0
  236. package/dist/whatsapp-DWXK25V2.js.map +1 -0
  237. package/dist/{word-document-7B6SJMAY.js → word-document-AV3YB4L2.js} +4 -4
  238. package/dist/word-document-AV3YB4L2.js.map +1 -0
  239. package/dist/workflow-store-5Y56GUP7.js +373 -0
  240. package/dist/workflow-store-5Y56GUP7.js.map +1 -0
  241. package/dist/writing-agent-VDGLNOGO.js +243 -0
  242. package/dist/writing-agent-VDGLNOGO.js.map +1 -0
  243. package/dist/{xero-QYO66D45.js → xero-UHAHVYSD.js} +2 -2
  244. package/dist/{zapier-webhook-TBZ5YF2A.js → zapier-webhook-NIELLTXR.js} +2 -2
  245. package/drizzle/0002_mushy_master_mold.sql +139 -139
  246. package/drizzle/0003_overjoyed_rhodey.sql +46 -0
  247. package/drizzle/meta/0002_snapshot.json +3636 -3636
  248. package/drizzle/meta/0003_snapshot.json +3946 -0
  249. package/drizzle/meta/_journal.json +7 -0
  250. package/package.json +110 -100
  251. package/dist/autonomy-ZXDBDQUJ.js.map +0 -1
  252. package/dist/bot-QRARP4UN.js +0 -36
  253. package/dist/brain-7XLLM3KC.js +0 -56
  254. package/dist/chunk-4GLYY4NN.js.map +0 -1
  255. package/dist/chunk-766ASQWE.js.map +0 -1
  256. package/dist/chunk-AYUKPTSM.js.map +0 -1
  257. package/dist/chunk-BRBWNV65.js.map +0 -1
  258. package/dist/chunk-BXZ6EA52.js.map +0 -1
  259. package/dist/chunk-EVE7MIIY.js.map +0 -1
  260. package/dist/chunk-H5RQOFO2.js.map +0 -1
  261. package/dist/chunk-I6BDYQIG.js.map +0 -1
  262. package/dist/chunk-IZJMVV7O.js +0 -347
  263. package/dist/chunk-IZJMVV7O.js.map +0 -1
  264. package/dist/chunk-O7IH7JTI.js +0 -1898
  265. package/dist/chunk-O7IH7JTI.js.map +0 -1
  266. package/dist/chunk-OCVQGBJK.js.map +0 -1
  267. package/dist/chunk-RZ4YESBG.js.map +0 -1
  268. package/dist/chunk-SPPMCAKG.js.map +0 -1
  269. package/dist/chunk-VRD5CYRL.js +0 -1568
  270. package/dist/chunk-VRD5CYRL.js.map +0 -1
  271. package/dist/chunk-WRAKK6K6.js.map +0 -1
  272. package/dist/chunk-XKYRH4FM.js.map +0 -1
  273. package/dist/chunk-XMCVRVTF.js.map +0 -1
  274. package/dist/chunk-ZLZKF2PM.js.map +0 -1
  275. package/dist/discord-B3HUPGQ6.js +0 -70
  276. package/dist/dist-UISMLMFN.js +0 -21847
  277. package/dist/dist-UISMLMFN.js.map +0 -1
  278. package/dist/email-K7LO2IPB.js.map +0 -1
  279. package/dist/enrichment-pipeline-MNHNW65K.js +0 -13
  280. package/dist/env-IWXUVTCB.js +0 -12
  281. package/dist/imessage-NGA2XF2V.js +0 -35
  282. package/dist/inbox-summarizer-NRI4S7IF.js +0 -47
  283. package/dist/incident-response-C5J7Q6DT.js.map +0 -1
  284. package/dist/presentations-DSV5IHG5.js.map +0 -1
  285. package/dist/scheduler-VK4WFERV.js +0 -63
  286. package/dist/signal-6CGDFYL2.js +0 -35
  287. package/dist/slack-IZQWIKOH.js +0 -75
  288. package/dist/src-VYUE6LRA.js.map +0 -1
  289. package/dist/tools-2RLEI2N6.js +0 -38
  290. package/dist/tunnel-IWMXUML4.js.map +0 -1
  291. package/dist/whatsapp-LFX6YKCM.js +0 -35
  292. package/dist/word-document-7B6SJMAY.js.map +0 -1
  293. /package/dist/{audit-logger-OBPR7CRO.js.map → agent-manager-JZ4IM7XI.js.map} +0 -0
  294. /package/dist/{auth-UOX5K2BE.js.map → agent-types-2T4PXLFQ.js.map} +0 -0
  295. /package/dist/{backup-restore-PZ7CYYB7.js.map → analyzer-OTWE3ARE.js.map} +0 -0
  296. /package/dist/{archiver-AVNBYCKQ.js.map → archiver-FPGKRP6P.js.map} +0 -0
  297. /package/dist/{blocks-R3PODY47.js.map → audit-logger-CI4WZQPD.js.map} +0 -0
  298. /package/dist/{bot-QRARP4UN.js.map → auth-PH5IHISW.js.map} +0 -0
  299. /package/dist/{aws-s3-Q4LLZZPD.js.map → aws-s3-QZMURYXB.js.map} +0 -0
  300. /package/dist/{brain-7XLLM3KC.js.map → backup-restore-72OQTZO3.js.map} +0 -0
  301. /package/dist/{chunk-PLDDJCW6.js.map → blocks-YOWOESDD.js.map} +0 -0
  302. /package/dist/{client-ZQSFPMOB.js.map → bot-VDHBGUVI.js.map} +0 -0
  303. /package/dist/{clipboard-manager-TEO2GEDN.js.map → brain-6QTXN4QP.js.map} +0 -0
  304. /package/dist/{camera-monitor-M5CYKUU4.js.map → camera-monitor-LHTUWHEL.js.map} +0 -0
  305. /package/dist/{charts-V7ARZNKF.js.map → charts-FJ32GQK7.js.map} +0 -0
  306. /package/dist/{chunk-TVEWKIK3.js.map → chunk-2WTKTG2C.js.map} +0 -0
  307. /package/dist/{chunk-SJSUSJ47.js.map → chunk-BNZHWAZC.js.map} +0 -0
  308. /package/dist/{chunk-MQJ2ECQT.js.map → chunk-CUPEENUY.js.map} +0 -0
  309. /package/dist/{chunk-NHMBTUMW.js.map → chunk-CWT6CAE5.js.map} +0 -0
  310. /package/dist/{chunk-6PMVAAA7.js.map → chunk-HJSEEFO3.js.map} +0 -0
  311. /package/dist/{chunk-TYAGMJNV.js.map → chunk-HQZQFEAX.js.map} +0 -0
  312. /package/dist/{chunk-MXAPLSJ5.js.map → chunk-J4JW73TT.js.map} +0 -0
  313. /package/dist/{chunk-VEHFVBLI.js.map → chunk-JHYYFPKX.js.map} +0 -0
  314. /package/dist/{chunk-66OJ3WB4.js.map → chunk-PD3CTDO6.js.map} +0 -0
  315. /package/dist/{cron-explain-HHQKPD3M.js.map → chunk-UP2VWCW5.js.map} +0 -0
  316. /package/dist/{chunk-4UOE5TUZ.js.map → chunk-WMDVOWN6.js.map} +0 -0
  317. /package/dist/{crypto-4AP47IKC.js.map → chunker-K6WTR62A.js.map} +0 -0
  318. /package/dist/{databases-37X4CI2Y.js.map → client-FOIYPOZQ.js.map} +0 -0
  319. /package/dist/{discord-B3HUPGQ6.js.map → clipboard-manager-4SBNESGZ.js.map} +0 -0
  320. /package/dist/{enrichment-pipeline-MNHNW65K.js.map → cost-tracker-KZQSTSE2.js.map} +0 -0
  321. /package/dist/{entity-resolution-Y3IUWEAT.js.map → cron-explain-UOOOYWZZ.js.map} +0 -0
  322. /package/dist/{env-IWXUVTCB.js.map → crypto-2VG3RJR2.js.map} +0 -0
  323. /package/dist/{hash-tool-ULQYD7B5.js.map → databases-XDPMG5AV.js.map} +0 -0
  324. /package/dist/{heartbeat-monitor-GCISLXI3.js.map → db-I7MNG6CL.js.map} +0 -0
  325. /package/dist/{imessage-NGA2XF2V.js.map → discord-6UQHCN27.js.map} +0 -0
  326. /package/dist/{inbox-summarizer-NRI4S7IF.js.map → docx-parser-EXL4TN5E.js.map} +0 -0
  327. /package/dist/{inventory-manager-352OHXWD.js.map → enrichment-pipeline-7FE5R5ZI.js.map} +0 -0
  328. /package/dist/{json-tool-QE2SYHEG.js.map → entity-resolution-7Z6STVXX.js.map} +0 -0
  329. /package/dist/{key-rotation-DPHU4ZTB.js.map → env-GN5VHI43.js.map} +0 -0
  330. /package/dist/{mcp-3JI6W7ZE.js.map → error-tracker-64DEH3D7.js.map} +0 -0
  331. /package/dist/{google-workspace-DKWUVNGC.js.map → google-workspace-TSZPZK5G.js.map} +0 -0
  332. /package/dist/{ocr-AC7NPX33.js.map → graph-client-NB475AK5.js.map} +0 -0
  333. /package/dist/{ollama-BOAMSPLJ.js.map → hash-tool-ENAB5LWH.js.map} +0 -0
  334. /package/dist/{pages-MI523RB7.js.map → heartbeat-monitor-KRDYTDBF.js.map} +0 -0
  335. /package/dist/{pairing-IFQYCPNS.js.map → hooks-N4MIFBVM.js.map} +0 -0
  336. /package/dist/{image-generation-OSU7FP6F.js.map → image-generation-MDE6AVQO.js.map} +0 -0
  337. /package/dist/{pdf-ALQVOEJR.js.map → imessage-DSGSGUZS.js.map} +0 -0
  338. /package/dist/{prometheus-JNT2BD4L.js.map → inbox-summarizer-F2KAU72V.js.map} +0 -0
  339. /package/dist/{providers-J4LYPHDR.js.map → inventory-manager-C67BSZM6.js.map} +0 -0
  340. /package/dist/{jira-GSGDBMIG.js.map → jira-PAGZWUBJ.js.map} +0 -0
  341. /package/dist/{qr-code-WIX4PB4U.js.map → json-tool-4FK5RNER.js.map} +0 -0
  342. /package/dist/{regex-tool-W4ABRKGK.js.map → key-rotation-WCC5FOYS.js.map} +0 -0
  343. /package/dist/{scheduler-VK4WFERV.js.map → knowledge-base-5SMMOGQJ.js.map} +0 -0
  344. /package/dist/{mailchimp-KKNF6QJ7.js.map → mailchimp-ZFYDC44J.js.map} +0 -0
  345. /package/dist/{search-BCLBO5E3.js.map → mcp-DJ2QDA6A.js.map} +0 -0
  346. /package/dist/{signal-6CGDFYL2.js.map → metrics-BH3ZLGEV.js.map} +0 -0
  347. /package/dist/{microsoft365-UCBKJHNX.js.map → microsoft365-6G2IJMWC.js.map} +0 -0
  348. /package/dist/{slack-IZQWIKOH.js.map → oauth-UPJYFOVU.js.map} +0 -0
  349. /package/dist/{sms-M3JIOTCW.js.map → ocr-UONKTQU7.js.map} +0 -0
  350. /package/dist/{stocks-XXWBPOCU.js.map → ollama-J7CU45WT.js.map} +0 -0
  351. /package/dist/{text-transform-6SGUA5Z4.js.map → pages-XDE7JRCA.js.map} +0 -0
  352. /package/dist/{pair-JDFTERIK.js.map → pair-YZJFQUU5.js.map} +0 -0
  353. /package/dist/{tools-2RLEI2N6.js.map → pairing-77N47RAT.js.map} +0 -0
  354. /package/dist/{unit-converter-ZYXMEZOE.js.map → pdf-67HGXCFJ.js.map} +0 -0
  355. /package/dist/{whatsapp-LFX6YKCM.js.map → pdf-parser-YLMTTYHL.js.map} +0 -0
  356. /package/dist/{quickbooks-XB4NII2S.js.map → quickbooks-N675W7IK.js.map} +0 -0
  357. /package/dist/{sendgrid-RNXCAFKM.js.map → sendgrid-QGJIVPWV.js.map} +0 -0
  358. /package/dist/{shopify-NCXYJB4R.js.map → shopify-ON2PAU27.js.map} +0 -0
  359. /package/dist/{twilio-53GEW5JT.js.map → twilio-3L7DUNYQ.js.map} +0 -0
  360. /package/dist/{xero-QYO66D45.js.map → xero-UHAHVYSD.js.map} +0 -0
  361. /package/dist/{zapier-webhook-TBZ5YF2A.js.map → zapier-webhook-NIELLTXR.js.map} +0 -0
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/core/observability/alerting.ts"],"sourcesContent":["/**\r\n * Alerting System - Anomaly detection, cost alerts, error spikes, health monitoring\r\n *\r\n * Provides comprehensive alerting and monitoring for the OpenSentinel system,\r\n * including automatic anomaly detection, cost tracking, and health checks.\r\n */\r\n\r\nimport { db } from \"../../db\";\r\nimport { metrics, errorLogs, usageQuotas } from \"../../db/schema\";\r\nimport { eq, and, gte, lte, desc, sql } from \"drizzle-orm\";\r\nimport { EventEmitter } from \"events\";\r\n\r\n// Types\r\nexport interface Alert {\r\n id: string;\r\n type: AlertType;\r\n severity: AlertSeverity;\r\n title: string;\r\n message: string;\r\n source: string;\r\n timestamp: Date;\r\n metadata?: Record<string, unknown>;\r\n acknowledged: boolean;\r\n acknowledgedAt?: Date;\r\n acknowledgedBy?: string;\r\n resolved: boolean;\r\n resolvedAt?: Date;\r\n resolvedBy?: string;\r\n autoResolveTimeout?: number;\r\n}\r\n\r\nexport type AlertType =\r\n | \"anomaly\"\r\n | \"cost_threshold\"\r\n | \"error_spike\"\r\n | \"health_check\"\r\n | \"quota_warning\"\r\n | \"performance\"\r\n | \"security\"\r\n | \"system\";\r\n\r\nexport type AlertSeverity = \"info\" | \"warning\" | \"error\" | \"critical\";\r\n\r\nexport interface AlertRule {\r\n id: string;\r\n name: string;\r\n description: string;\r\n enabled: boolean;\r\n type: AlertType;\r\n condition: AlertCondition;\r\n severity: AlertSeverity;\r\n cooldownMinutes: number;\r\n channels: AlertChannel[];\r\n lastTriggered?: Date;\r\n triggerCount: number;\r\n}\r\n\r\nexport interface AlertCondition {\r\n metric?: string;\r\n operator: \"gt\" | \"lt\" | \"eq\" | \"gte\" | \"lte\" | \"anomaly\";\r\n threshold?: number;\r\n windowMinutes?: number;\r\n aggregation?: \"sum\" | \"avg\" | \"max\" | \"min\" | \"count\";\r\n customCheck?: () => Promise<boolean>;\r\n}\r\n\r\nexport type AlertChannel = \"console\" | \"telegram\" | \"webhook\" | \"email\" | \"database\";\r\n\r\nexport interface AlertChannelConfig {\r\n console: { enabled: boolean };\r\n telegram: { enabled: boolean; chatId?: string };\r\n webhook: { enabled: boolean; url?: string; headers?: Record<string, string> };\r\n email: { enabled: boolean; recipients?: string[] };\r\n database: { enabled: boolean };\r\n}\r\n\r\nexport interface HealthCheckResult {\r\n name: string;\r\n status: \"healthy\" | \"degraded\" | \"unhealthy\";\r\n message: string;\r\n latencyMs?: number;\r\n lastCheck: Date;\r\n metadata?: Record<string, unknown>;\r\n}\r\n\r\nexport interface CostMetrics {\r\n totalTokens: number;\r\n inputTokens: number;\r\n outputTokens: number;\r\n estimatedCost: number;\r\n period: \"hourly\" | \"daily\" | \"weekly\" | \"monthly\";\r\n startDate: Date;\r\n endDate: Date;\r\n breakdown: CostBreakdown[];\r\n}\r\n\r\nexport interface CostBreakdown {\r\n category: string;\r\n tokens: number;\r\n cost: number;\r\n percentage: number;\r\n}\r\n\r\nexport interface AnomalyDetection {\r\n metric: string;\r\n currentValue: number;\r\n expectedValue: number;\r\n deviation: number;\r\n deviationPercent: number;\r\n isAnomaly: boolean;\r\n confidence: number;\r\n timestamp: Date;\r\n}\r\n\r\n// Constants\r\n// Dynamic pricing — uses cost-tracker's MODEL_TIERS for accurate multi-model pricing.\r\n// These defaults are used as fallback (Sonnet pricing).\r\nimport { costTracker } from \"./cost-tracker\";\r\nconst TOKEN_COST_PER_MILLION_INPUT = 3.0; // Fallback: Claude Sonnet input\r\nconst TOKEN_COST_PER_MILLION_OUTPUT = 15.0; // Fallback: Claude Sonnet output\r\n\r\n// In-memory stores\r\nconst activeAlerts = new Map<string, Alert>();\r\nconst alertRules = new Map<string, AlertRule>();\r\nconst healthCheckResults = new Map<string, HealthCheckResult>();\r\nconst alertHistory: Alert[] = [];\r\n\r\n// Event emitter for alert notifications\r\nexport const alertEmitter = new EventEmitter();\r\n\r\n// Default channel configuration\r\nlet channelConfig: AlertChannelConfig = {\r\n console: { enabled: true },\r\n telegram: { enabled: false },\r\n webhook: { enabled: false },\r\n email: { enabled: false },\r\n database: { enabled: true },\r\n};\r\n\r\n/**\r\n * Load alert history from database on startup\r\n */\r\nlet historyLoaded = false;\r\nexport async function loadAlertHistoryFromDb(): Promise<void> {\r\n if (historyLoaded) return;\r\n try {\r\n const rows = await db\r\n .select()\r\n .from(errorLogs)\r\n .where(eq(errorLogs.source, \"alerting\"))\r\n .orderBy(desc(errorLogs.createdAt))\r\n .limit(500);\r\n\r\n for (const row of rows.reverse()) {\r\n // Parse the alert type and severity from stored fields\r\n const alertType = (row.errorType?.replace(\"Alert:\", \"\") || \"system\") as AlertType;\r\n const severity = (row.errorCode || \"info\") as AlertSeverity;\r\n const [title, ...msgParts] = (row.message || \"\").split(\": \");\r\n const alert: Alert = {\r\n id: String(row.id),\r\n type: alertType,\r\n severity,\r\n title: title || \"Alert\",\r\n message: msgParts.join(\": \") || row.message || \"\",\r\n source: \"alert_rule\",\r\n timestamp: new Date(row.createdAt),\r\n metadata: (row.context || {}) as Record<string, unknown>,\r\n acknowledged: false,\r\n resolved: true, // historical alerts are resolved\r\n };\r\n alertHistory.push(alert);\r\n }\r\n historyLoaded = true;\r\n if (alertHistory.length > 0) {\r\n console.log(`[Alerting] Loaded ${alertHistory.length} historical alerts from DB`);\r\n }\r\n } catch {\r\n // DB may not be available yet\r\n }\r\n}\r\n\r\n/**\r\n * Initialize default alert rules\r\n */\r\nexport function initializeDefaultRules(): void {\r\n // Error spike detection\r\n addAlertRule({\r\n id: \"error-spike\",\r\n name: \"Error Spike Detection\",\r\n description: \"Triggers when error rate exceeds normal levels\",\r\n enabled: true,\r\n type: \"error_spike\",\r\n condition: {\r\n metric: \"error_count\",\r\n operator: \"gt\",\r\n threshold: 10,\r\n windowMinutes: 5,\r\n aggregation: \"count\",\r\n },\r\n severity: \"error\",\r\n cooldownMinutes: 15,\r\n channels: [\"console\", \"database\"],\r\n triggerCount: 0,\r\n });\r\n\r\n // High latency detection\r\n addAlertRule({\r\n id: \"high-latency\",\r\n name: \"High Response Latency\",\r\n description: \"Triggers when average response time exceeds threshold\",\r\n enabled: true,\r\n type: \"performance\",\r\n condition: {\r\n metric: \"response_latency\",\r\n operator: \"gt\",\r\n threshold: 10000, // 10 seconds\r\n windowMinutes: 5,\r\n aggregation: \"avg\",\r\n },\r\n severity: \"warning\",\r\n cooldownMinutes: 10,\r\n channels: [\"console\", \"database\"],\r\n triggerCount: 0,\r\n });\r\n\r\n // Cost threshold\r\n addAlertRule({\r\n id: \"daily-cost-threshold\",\r\n name: \"Daily Cost Threshold\",\r\n description: \"Triggers when daily API costs exceed threshold\",\r\n enabled: true,\r\n type: \"cost_threshold\",\r\n condition: {\r\n metric: \"cost\",\r\n operator: \"gt\",\r\n threshold: 50, // $50\r\n windowMinutes: 1440, // 24 hours\r\n },\r\n severity: \"warning\",\r\n cooldownMinutes: 60,\r\n channels: [\"console\", \"database\"],\r\n triggerCount: 0,\r\n });\r\n\r\n // Memory usage anomaly\r\n addAlertRule({\r\n id: \"memory-anomaly\",\r\n name: \"Memory Usage Anomaly\",\r\n description: \"Triggers when memory usage is abnormally high\",\r\n enabled: true,\r\n type: \"anomaly\",\r\n condition: {\r\n metric: \"memory_usage\",\r\n operator: \"anomaly\",\r\n windowMinutes: 60,\r\n },\r\n severity: \"warning\",\r\n cooldownMinutes: 30,\r\n channels: [\"console\", \"database\"],\r\n triggerCount: 0,\r\n });\r\n\r\n // Quota warning\r\n addAlertRule({\r\n id: \"quota-80-percent\",\r\n name: \"80% Quota Usage\",\r\n description: \"Triggers when usage reaches 80% of quota\",\r\n enabled: true,\r\n type: \"quota_warning\",\r\n condition: {\r\n metric: \"quota_usage\",\r\n operator: \"gte\",\r\n threshold: 80,\r\n },\r\n severity: \"warning\",\r\n cooldownMinutes: 60,\r\n channels: [\"console\", \"database\"],\r\n triggerCount: 0,\r\n });\r\n\r\n // Tool failure rate\r\n addAlertRule({\r\n id: \"tool-failure-rate\",\r\n name: \"High Tool Failure Rate\",\r\n description: \"Triggers when tool failure rate is high\",\r\n enabled: true,\r\n type: \"performance\",\r\n condition: {\r\n metric: \"tool_failure\",\r\n operator: \"gt\",\r\n threshold: 5,\r\n windowMinutes: 10,\r\n aggregation: \"count\",\r\n },\r\n severity: \"warning\",\r\n cooldownMinutes: 15,\r\n channels: [\"console\", \"database\"],\r\n triggerCount: 0,\r\n });\r\n}\r\n\r\n/**\r\n * Add or update an alert rule\r\n */\r\nexport function addAlertRule(rule: AlertRule): void {\r\n alertRules.set(rule.id, rule);\r\n}\r\n\r\n/**\r\n * Remove an alert rule\r\n */\r\nexport function removeAlertRule(ruleId: string): boolean {\r\n return alertRules.delete(ruleId);\r\n}\r\n\r\n/**\r\n * Get all alert rules\r\n */\r\nexport function getAlertRules(): AlertRule[] {\r\n return Array.from(alertRules.values());\r\n}\r\n\r\n/**\r\n * Enable/disable an alert rule\r\n */\r\nexport function setRuleEnabled(ruleId: string, enabled: boolean): boolean {\r\n const rule = alertRules.get(ruleId);\r\n if (rule) {\r\n rule.enabled = enabled;\r\n return true;\r\n }\r\n return false;\r\n}\r\n\r\n/**\r\n * Configure alert channels\r\n */\r\nexport function configureChannels(config: Partial<AlertChannelConfig>): void {\r\n channelConfig = { ...channelConfig, ...config };\r\n}\r\n\r\n/**\r\n * Create and dispatch an alert\r\n */\r\nexport async function createAlert(\r\n type: AlertType,\r\n severity: AlertSeverity,\r\n title: string,\r\n message: string,\r\n source: string,\r\n metadata?: Record<string, unknown>\r\n): Promise<Alert> {\r\n const alert: Alert = {\r\n id: crypto.randomUUID(),\r\n type,\r\n severity,\r\n title,\r\n message,\r\n source,\r\n timestamp: new Date(),\r\n metadata,\r\n acknowledged: false,\r\n resolved: false,\r\n };\r\n\r\n activeAlerts.set(alert.id, alert);\r\n alertHistory.push(alert);\r\n\r\n // Dispatch to configured channels\r\n await dispatchAlert(alert);\r\n\r\n // Emit event\r\n alertEmitter.emit(\"alert\", alert);\r\n\r\n return alert;\r\n}\r\n\r\n/**\r\n * Dispatch alert to configured channels\r\n */\r\nasync function dispatchAlert(alert: Alert): Promise<void> {\r\n const promises: Promise<void>[] = [];\r\n\r\n if (channelConfig.console.enabled) {\r\n promises.push(dispatchToConsole(alert));\r\n }\r\n\r\n if (channelConfig.database.enabled) {\r\n promises.push(dispatchToDatabase(alert));\r\n }\r\n\r\n if (channelConfig.webhook.enabled && channelConfig.webhook.url) {\r\n promises.push(dispatchToWebhook(alert, channelConfig.webhook.url, channelConfig.webhook.headers));\r\n }\r\n\r\n // Telegram and email would need additional implementation\r\n // if (channelConfig.telegram.enabled) { ... }\r\n // if (channelConfig.email.enabled) { ... }\r\n\r\n await Promise.allSettled(promises);\r\n}\r\n\r\n/**\r\n * Dispatch alert to console\r\n */\r\nasync function dispatchToConsole(alert: Alert): Promise<void> {\r\n const severityColors: Record<AlertSeverity, string> = {\r\n info: \"\\x1b[36m\", // Cyan\r\n warning: \"\\x1b[33m\", // Yellow\r\n error: \"\\x1b[31m\", // Red\r\n critical: \"\\x1b[35m\", // Magenta\r\n };\r\n const reset = \"\\x1b[0m\";\r\n const color = severityColors[alert.severity];\r\n\r\n console.log(`${color}[ALERT ${alert.severity.toUpperCase()}]${reset} ${alert.title}`);\r\n console.log(` Source: ${alert.source}`);\r\n console.log(` Message: ${alert.message}`);\r\n if (alert.metadata) {\r\n console.log(` Metadata: ${JSON.stringify(alert.metadata)}`);\r\n }\r\n}\r\n\r\n/**\r\n * Dispatch alert to database (via error logs for now)\r\n */\r\nasync function dispatchToDatabase(alert: Alert): Promise<void> {\r\n await db.insert(errorLogs).values({\r\n source: \"alerting\",\r\n errorType: `Alert:${alert.type}`,\r\n errorCode: alert.severity,\r\n message: `${alert.title}: ${alert.message}`,\r\n context: alert.metadata,\r\n });\r\n}\r\n\r\n/**\r\n * Dispatch alert to webhook\r\n */\r\nasync function dispatchToWebhook(\r\n alert: Alert,\r\n url: string,\r\n headers?: Record<string, string>\r\n): Promise<void> {\r\n try {\r\n await fetch(url, {\r\n method: \"POST\",\r\n headers: {\r\n \"Content-Type\": \"application/json\",\r\n ...headers,\r\n },\r\n body: JSON.stringify(alert),\r\n });\r\n } catch (error) {\r\n console.error(\"[Alerting] Failed to dispatch to webhook:\", error);\r\n }\r\n}\r\n\r\n/**\r\n * Acknowledge an alert\r\n */\r\nexport function acknowledgeAlert(alertId: string, acknowledgedBy?: string): boolean {\r\n const alert = activeAlerts.get(alertId);\r\n if (alert) {\r\n alert.acknowledged = true;\r\n alert.acknowledgedAt = new Date();\r\n alert.acknowledgedBy = acknowledgedBy;\r\n alertEmitter.emit(\"alert:acknowledged\", alert);\r\n return true;\r\n }\r\n return false;\r\n}\r\n\r\n/**\r\n * Resolve an alert\r\n */\r\nexport function resolveAlert(alertId: string, resolvedBy?: string): boolean {\r\n const alert = activeAlerts.get(alertId);\r\n if (alert) {\r\n alert.resolved = true;\r\n alert.resolvedAt = new Date();\r\n alert.resolvedBy = resolvedBy;\r\n activeAlerts.delete(alertId);\r\n alertEmitter.emit(\"alert:resolved\", alert);\r\n return true;\r\n }\r\n return false;\r\n}\r\n\r\n/**\r\n * Get active alerts\r\n */\r\nexport function getActiveAlerts(type?: AlertType, severity?: AlertSeverity): Alert[] {\r\n let alerts = Array.from(activeAlerts.values());\r\n\r\n if (type) {\r\n alerts = alerts.filter(a => a.type === type);\r\n }\r\n\r\n if (severity) {\r\n alerts = alerts.filter(a => a.severity === severity);\r\n }\r\n\r\n return alerts.sort((a, b) => b.timestamp.getTime() - a.timestamp.getTime());\r\n}\r\n\r\n/**\r\n * Get alert history\r\n */\r\nexport function getAlertHistory(limit: number = 100): Alert[] {\r\n return alertHistory.slice(-limit).reverse();\r\n}\r\n\r\n/**\r\n * Clear alert history (in-memory + DB)\r\n */\r\nexport function clearAlertHistory(): void {\r\n alertHistory.length = 0;\r\n activeAlerts.clear();\r\n // Also clear from DB (fire-and-forget)\r\n db.delete(errorLogs)\r\n .where(eq(errorLogs.source, \"alerting\"))\r\n .catch(() => {});\r\n}\r\n\r\n/**\r\n * Run all enabled alert rules\r\n */\r\nexport async function evaluateAlertRules(): Promise<Alert[]> {\r\n const triggeredAlerts: Alert[] = [];\r\n\r\n for (const rule of alertRules.values()) {\r\n if (!rule.enabled) continue;\r\n\r\n // Check cooldown\r\n if (rule.lastTriggered) {\r\n const cooldownMs = rule.cooldownMinutes * 60 * 1000;\r\n if (Date.now() - rule.lastTriggered.getTime() < cooldownMs) {\r\n continue;\r\n }\r\n }\r\n\r\n try {\r\n const shouldTrigger = await evaluateCondition(rule.condition);\r\n\r\n if (shouldTrigger) {\r\n rule.lastTriggered = new Date();\r\n rule.triggerCount++;\r\n\r\n const alert = await createAlert(\r\n rule.type,\r\n rule.severity,\r\n rule.name,\r\n rule.description,\r\n \"alert_rule\",\r\n { ruleId: rule.id, triggerCount: rule.triggerCount }\r\n );\r\n\r\n triggeredAlerts.push(alert);\r\n }\r\n } catch (error) {\r\n console.error(`[Alerting] Error evaluating rule ${rule.id}:`, error);\r\n }\r\n }\r\n\r\n return triggeredAlerts;\r\n}\r\n\r\n/**\r\n * Evaluate an alert condition\r\n */\r\nasync function evaluateCondition(condition: AlertCondition): Promise<boolean> {\r\n // Custom check function\r\n if (condition.customCheck) {\r\n return condition.customCheck();\r\n }\r\n\r\n // Metric-based check\r\n if (condition.metric && condition.operator !== \"anomaly\") {\r\n const windowMs = (condition.windowMinutes || 5) * 60 * 1000;\r\n const startDate = new Date(Date.now() - windowMs);\r\n\r\n const results = await db\r\n .select()\r\n .from(metrics)\r\n .where(\r\n and(\r\n eq(metrics.name, condition.metric),\r\n gte(metrics.timestamp, startDate)\r\n )\r\n );\r\n\r\n if (results.length === 0) return false;\r\n\r\n const values = results.map(r => r.value);\r\n let aggregatedValue: number;\r\n\r\n switch (condition.aggregation || \"avg\") {\r\n case \"sum\":\r\n aggregatedValue = values.reduce((a, b) => a + b, 0);\r\n break;\r\n case \"max\":\r\n aggregatedValue = Math.max(...values);\r\n break;\r\n case \"min\":\r\n aggregatedValue = Math.min(...values);\r\n break;\r\n case \"count\":\r\n aggregatedValue = values.length;\r\n break;\r\n case \"avg\":\r\n default:\r\n aggregatedValue = values.reduce((a, b) => a + b, 0) / values.length;\r\n }\r\n\r\n const threshold = condition.threshold || 0;\r\n\r\n switch (condition.operator) {\r\n case \"gt\":\r\n return aggregatedValue > threshold;\r\n case \"lt\":\r\n return aggregatedValue < threshold;\r\n case \"eq\":\r\n return aggregatedValue === threshold;\r\n case \"gte\":\r\n return aggregatedValue >= threshold;\r\n case \"lte\":\r\n return aggregatedValue <= threshold;\r\n default:\r\n return false;\r\n }\r\n }\r\n\r\n // Anomaly detection\r\n if (condition.operator === \"anomaly\" && condition.metric) {\r\n const anomaly = await detectAnomaly(condition.metric, condition.windowMinutes || 60);\r\n return anomaly.isAnomaly;\r\n }\r\n\r\n return false;\r\n}\r\n\r\n/**\r\n * Detect anomalies in a metric\r\n */\r\nexport async function detectAnomaly(\r\n metricName: string,\r\n windowMinutes: number = 60\r\n): Promise<AnomalyDetection> {\r\n const windowMs = windowMinutes * 60 * 1000;\r\n const now = Date.now();\r\n\r\n // Get historical data (past week for baseline)\r\n const baselineStart = new Date(now - 7 * 24 * 60 * 60 * 1000);\r\n const baselineEnd = new Date(now - windowMs);\r\n\r\n const baselineResults = await db\r\n .select()\r\n .from(metrics)\r\n .where(\r\n and(\r\n eq(metrics.name, metricName),\r\n gte(metrics.timestamp, baselineStart),\r\n lte(metrics.timestamp, baselineEnd)\r\n )\r\n );\r\n\r\n // Get current window data\r\n const currentStart = new Date(now - windowMs);\r\n const currentResults = await db\r\n .select()\r\n .from(metrics)\r\n .where(\r\n and(\r\n eq(metrics.name, metricName),\r\n gte(metrics.timestamp, currentStart)\r\n )\r\n );\r\n\r\n if (baselineResults.length < 10 || currentResults.length === 0) {\r\n return {\r\n metric: metricName,\r\n currentValue: currentResults.length > 0\r\n ? currentResults.reduce((a, b) => a + b.value, 0) / currentResults.length\r\n : 0,\r\n expectedValue: 0,\r\n deviation: 0,\r\n deviationPercent: 0,\r\n isAnomaly: false,\r\n confidence: 0,\r\n timestamp: new Date(),\r\n };\r\n }\r\n\r\n // Calculate baseline statistics\r\n const baselineValues = baselineResults.map(r => r.value);\r\n const baselineMean = baselineValues.reduce((a, b) => a + b, 0) / baselineValues.length;\r\n const baselineStdDev = Math.sqrt(\r\n baselineValues.reduce((sum, val) => sum + Math.pow(val - baselineMean, 2), 0) / baselineValues.length\r\n );\r\n\r\n // Calculate current value\r\n const currentValue = currentResults.reduce((a, b) => a + b.value, 0) / currentResults.length;\r\n\r\n // Calculate z-score\r\n const zScore = baselineStdDev > 0 ? (currentValue - baselineMean) / baselineStdDev : 0;\r\n const deviation = currentValue - baselineMean;\r\n const deviationPercent = baselineMean !== 0 ? (deviation / baselineMean) * 100 : 0;\r\n\r\n // Consider anomaly if z-score > 2 (95% confidence)\r\n const isAnomaly = Math.abs(zScore) > 2;\r\n\r\n // Calculate confidence based on data quality\r\n const confidence = Math.min(\r\n baselineResults.length / 100, // More data = higher confidence\r\n 1 - (1 / (1 + Math.abs(zScore))) // Higher z-score = higher confidence\r\n );\r\n\r\n return {\r\n metric: metricName,\r\n currentValue,\r\n expectedValue: baselineMean,\r\n deviation,\r\n deviationPercent,\r\n isAnomaly,\r\n confidence,\r\n timestamp: new Date(),\r\n };\r\n}\r\n\r\n/**\r\n * Calculate cost metrics\r\n */\r\nexport async function calculateCostMetrics(\r\n period: CostMetrics[\"period\"],\r\n startDate?: Date\r\n): Promise<CostMetrics> {\r\n const now = new Date();\r\n let periodStart: Date;\r\n\r\n switch (period) {\r\n case \"hourly\":\r\n periodStart = startDate || new Date(now.getTime() - 60 * 60 * 1000);\r\n break;\r\n case \"daily\":\r\n periodStart = startDate || new Date(now.getTime() - 24 * 60 * 60 * 1000);\r\n break;\r\n case \"weekly\":\r\n periodStart = startDate || new Date(now.getTime() - 7 * 24 * 60 * 60 * 1000);\r\n break;\r\n case \"monthly\":\r\n periodStart = startDate || new Date(now.getTime() - 30 * 24 * 60 * 60 * 1000);\r\n break;\r\n }\r\n\r\n // Get input tokens\r\n const inputTokens = await db\r\n .select()\r\n .from(metrics)\r\n .where(\r\n and(\r\n eq(metrics.name, \"token_usage_input\"),\r\n gte(metrics.timestamp, periodStart)\r\n )\r\n );\r\n\r\n // Get output tokens\r\n const outputTokens = await db\r\n .select()\r\n .from(metrics)\r\n .where(\r\n and(\r\n eq(metrics.name, \"token_usage_output\"),\r\n gte(metrics.timestamp, periodStart)\r\n )\r\n );\r\n\r\n const totalInput = inputTokens.reduce((sum, m) => sum + m.value, 0);\r\n const totalOutput = outputTokens.reduce((sum, m) => sum + m.value, 0);\r\n\r\n const inputCost = (totalInput / 1_000_000) * TOKEN_COST_PER_MILLION_INPUT;\r\n const outputCost = (totalOutput / 1_000_000) * TOKEN_COST_PER_MILLION_OUTPUT;\r\n const totalCost = inputCost + outputCost;\r\n\r\n // Group by tags for breakdown\r\n const breakdown: CostBreakdown[] = [];\r\n\r\n // Group input tokens by source/tool if available\r\n const inputByTag = new Map<string, number>();\r\n for (const m of inputTokens) {\r\n const category = (m.tags as Record<string, string>)?.source || \"general\";\r\n inputByTag.set(category, (inputByTag.get(category) || 0) + m.value);\r\n }\r\n\r\n for (const [category, tokens] of inputByTag) {\r\n const cost = (tokens / 1_000_000) * TOKEN_COST_PER_MILLION_INPUT;\r\n breakdown.push({\r\n category: `input:${category}`,\r\n tokens,\r\n cost,\r\n percentage: totalCost > 0 ? (cost / totalCost) * 100 : 0,\r\n });\r\n }\r\n\r\n return {\r\n totalTokens: totalInput + totalOutput,\r\n inputTokens: totalInput,\r\n outputTokens: totalOutput,\r\n estimatedCost: totalCost,\r\n period,\r\n startDate: periodStart,\r\n endDate: now,\r\n breakdown,\r\n };\r\n}\r\n\r\n/**\r\n * Register a health check\r\n */\r\nexport function registerHealthCheck(\r\n name: string,\r\n check: () => Promise<{ status: \"healthy\" | \"degraded\" | \"unhealthy\"; message: string; metadata?: Record<string, unknown> }>\r\n): void {\r\n // Store the check function for periodic execution\r\n healthChecks.set(name, check);\r\n}\r\n\r\nconst healthChecks = new Map<string, () => Promise<{ status: \"healthy\" | \"degraded\" | \"unhealthy\"; message: string; metadata?: Record<string, unknown> }>>();\r\n\r\n/**\r\n * Run all health checks\r\n */\r\nexport async function runHealthChecks(): Promise<HealthCheckResult[]> {\r\n const results: HealthCheckResult[] = [];\r\n\r\n for (const [name, check] of healthChecks) {\r\n const startTime = Date.now();\r\n try {\r\n const result = await check();\r\n const checkResult: HealthCheckResult = {\r\n name,\r\n status: result.status,\r\n message: result.message,\r\n latencyMs: Date.now() - startTime,\r\n lastCheck: new Date(),\r\n metadata: result.metadata,\r\n };\r\n results.push(checkResult);\r\n healthCheckResults.set(name, checkResult);\r\n\r\n // Create alert if unhealthy\r\n if (result.status === \"unhealthy\") {\r\n await createAlert(\r\n \"health_check\",\r\n \"error\",\r\n `Health Check Failed: ${name}`,\r\n result.message,\r\n \"health_monitor\",\r\n result.metadata\r\n );\r\n } else if (result.status === \"degraded\") {\r\n await createAlert(\r\n \"health_check\",\r\n \"warning\",\r\n `Health Check Degraded: ${name}`,\r\n result.message,\r\n \"health_monitor\",\r\n result.metadata\r\n );\r\n }\r\n } catch (error) {\r\n const checkResult: HealthCheckResult = {\r\n name,\r\n status: \"unhealthy\",\r\n message: error instanceof Error ? error.message : \"Unknown error\",\r\n latencyMs: Date.now() - startTime,\r\n lastCheck: new Date(),\r\n };\r\n results.push(checkResult);\r\n healthCheckResults.set(name, checkResult);\r\n\r\n await createAlert(\r\n \"health_check\",\r\n \"error\",\r\n `Health Check Error: ${name}`,\r\n checkResult.message,\r\n \"health_monitor\"\r\n );\r\n }\r\n }\r\n\r\n return results;\r\n}\r\n\r\n/**\r\n * Get health check results\r\n */\r\nexport function getHealthCheckResults(): HealthCheckResult[] {\r\n return Array.from(healthCheckResults.values());\r\n}\r\n\r\n/**\r\n * Initialize default health checks\r\n */\r\nexport function initializeDefaultHealthChecks(): void {\r\n // Database health check\r\n registerHealthCheck(\"database\", async () => {\r\n try {\r\n await db.select().from(metrics).limit(1);\r\n return { status: \"healthy\", message: \"Database connection is healthy\" };\r\n } catch (error) {\r\n return {\r\n status: \"unhealthy\",\r\n message: `Database connection failed: ${error instanceof Error ? error.message : \"Unknown error\"}`,\r\n };\r\n }\r\n });\r\n\r\n // Memory health check\r\n registerHealthCheck(\"memory\", async () => {\r\n const memUsage = process.memoryUsage();\r\n const heapUsedPercent = (memUsage.heapUsed / memUsage.heapTotal) * 100;\r\n\r\n if (heapUsedPercent > 90) {\r\n return {\r\n status: \"unhealthy\",\r\n message: `Heap usage critical: ${heapUsedPercent.toFixed(1)}%`,\r\n metadata: { heapUsed: memUsage.heapUsed, heapTotal: memUsage.heapTotal },\r\n };\r\n } else if (heapUsedPercent > 75) {\r\n return {\r\n status: \"degraded\",\r\n message: `Heap usage high: ${heapUsedPercent.toFixed(1)}%`,\r\n metadata: { heapUsed: memUsage.heapUsed, heapTotal: memUsage.heapTotal },\r\n };\r\n }\r\n\r\n return {\r\n status: \"healthy\",\r\n message: `Heap usage: ${heapUsedPercent.toFixed(1)}%`,\r\n metadata: { heapUsed: memUsage.heapUsed, heapTotal: memUsage.heapTotal },\r\n };\r\n });\r\n\r\n // Error rate health check\r\n registerHealthCheck(\"error_rate\", async () => {\r\n const oneHourAgo = new Date(Date.now() - 60 * 60 * 1000);\r\n const errors = await db\r\n .select()\r\n .from(errorLogs)\r\n .where(gte(errorLogs.createdAt, oneHourAgo));\r\n\r\n const errorCount = errors.length;\r\n\r\n if (errorCount > 100) {\r\n return {\r\n status: \"unhealthy\",\r\n message: `High error rate: ${errorCount} errors in the last hour`,\r\n metadata: { errorCount },\r\n };\r\n } else if (errorCount > 50) {\r\n return {\r\n status: \"degraded\",\r\n message: `Elevated error rate: ${errorCount} errors in the last hour`,\r\n metadata: { errorCount },\r\n };\r\n }\r\n\r\n return {\r\n status: \"healthy\",\r\n message: `Error rate normal: ${errorCount} errors in the last hour`,\r\n metadata: { errorCount },\r\n };\r\n });\r\n}\r\n\r\n/**\r\n * Start the alerting system with periodic checks\r\n */\r\nexport function startAlertingSystem(intervalMs: number = 60000): void {\r\n // Initialize defaults\r\n initializeDefaultRules();\r\n initializeDefaultHealthChecks();\r\n\r\n // Run periodic checks\r\n setInterval(async () => {\r\n try {\r\n await evaluateAlertRules();\r\n await runHealthChecks();\r\n } catch (error) {\r\n console.error(\"[Alerting] Error in periodic check:\", error);\r\n }\r\n }, intervalMs);\r\n\r\n console.log(`[Alerting] System started with ${intervalMs}ms check interval`);\r\n}\r\n\r\n/**\r\n * Get alerting system status\r\n */\r\nexport function getAlertingStatus(): {\r\n activeAlerts: number;\r\n totalRules: number;\r\n enabledRules: number;\r\n healthChecks: number;\r\n healthyChecks: number;\r\n lastEvaluation?: Date;\r\n} {\r\n const healthResults = getHealthCheckResults();\r\n return {\r\n activeAlerts: activeAlerts.size,\r\n totalRules: alertRules.size,\r\n enabledRules: Array.from(alertRules.values()).filter(r => r.enabled).length,\r\n healthChecks: healthChecks.size,\r\n healthyChecks: healthResults.filter(r => r.status === \"healthy\").length,\r\n };\r\n}\r\n\r\n/**\r\n * Format alert for display\r\n */\r\nexport function formatAlert(alert: Alert): string {\r\n const lines: string[] = [];\r\n\r\n lines.push(`=== Alert: ${alert.title} ===`);\r\n lines.push(`ID: ${alert.id}`);\r\n lines.push(`Type: ${alert.type}`);\r\n lines.push(`Severity: ${alert.severity.toUpperCase()}`);\r\n lines.push(`Source: ${alert.source}`);\r\n lines.push(`Time: ${alert.timestamp.toISOString()}`);\r\n lines.push(\"\");\r\n lines.push(`Message: ${alert.message}`);\r\n\r\n if (alert.metadata) {\r\n lines.push(\"\");\r\n lines.push(\"Metadata:\");\r\n for (const [key, value] of Object.entries(alert.metadata)) {\r\n lines.push(` ${key}: ${JSON.stringify(value)}`);\r\n }\r\n }\r\n\r\n lines.push(\"\");\r\n lines.push(`Status: ${alert.resolved ? \"Resolved\" : alert.acknowledged ? \"Acknowledged\" : \"Active\"}`);\r\n\r\n return lines.join(\"\\n\");\r\n}\r\n"],"mappings":"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","names":[]}
@@ -0,0 +1,288 @@
1
+ import {
2
+ AGENT_SYSTEM_PROMPTS,
3
+ AGENT_TOOL_PERMISSIONS
4
+ } from "./chunk-LFDXEYYB.js";
5
+ import "./chunk-UP2VWCW5.js";
6
+
7
+ // src/core/agents/specialized/analysis-agent.ts
8
+ var ANALYSIS_AGENT_CONFIG = {
9
+ type: "analysis",
10
+ name: "Analysis Agent",
11
+ description: "Specialized agent for data analysis and insights generation",
12
+ systemPrompt: AGENT_SYSTEM_PROMPTS.analysis,
13
+ tools: AGENT_TOOL_PERMISSIONS.analysis,
14
+ // Analysis-specific settings
15
+ settings: {
16
+ maxDataPoints: 1e4,
17
+ visualizationSupport: true,
18
+ statisticalMethods: ["descriptive", "inferential", "predictive"],
19
+ outputFormats: ["text", "table", "chart"]
20
+ },
21
+ // Analysis methodologies
22
+ methodologies: {
23
+ descriptive: {
24
+ name: "Descriptive Analysis",
25
+ description: "Summarize and describe the main features of data",
26
+ outputs: ["summary statistics", "distributions", "patterns"]
27
+ },
28
+ diagnostic: {
29
+ name: "Diagnostic Analysis",
30
+ description: "Understand why something happened",
31
+ outputs: ["root cause analysis", "correlations", "contributing factors"]
32
+ },
33
+ predictive: {
34
+ name: "Predictive Analysis",
35
+ description: "Forecast future outcomes based on historical data",
36
+ outputs: ["predictions", "confidence intervals", "scenarios"]
37
+ },
38
+ prescriptive: {
39
+ name: "Prescriptive Analysis",
40
+ description: "Recommend actions based on analysis",
41
+ outputs: ["recommendations", "optimization suggestions", "action plans"]
42
+ }
43
+ }
44
+ };
45
+ var ANALYSIS_TASKS = {
46
+ dataExploration: {
47
+ name: "Data Exploration",
48
+ description: "Explore and understand a dataset",
49
+ steps: [
50
+ "Load and preview data",
51
+ "Check data types and quality",
52
+ "Calculate summary statistics",
53
+ "Identify patterns and outliers",
54
+ "Generate initial insights"
55
+ ]
56
+ },
57
+ trendAnalysis: {
58
+ name: "Trend Analysis",
59
+ description: "Analyze trends over time",
60
+ steps: [
61
+ "Define time periods",
62
+ "Calculate period-over-period changes",
63
+ "Identify seasonal patterns",
64
+ "Detect anomalies",
65
+ "Project future trends"
66
+ ]
67
+ },
68
+ comparativeAnalysis: {
69
+ name: "Comparative Analysis",
70
+ description: "Compare multiple items or groups",
71
+ steps: [
72
+ "Define comparison criteria",
73
+ "Normalize data if needed",
74
+ "Calculate differences",
75
+ "Rank items",
76
+ "Identify key differentiators"
77
+ ]
78
+ },
79
+ rootCauseAnalysis: {
80
+ name: "Root Cause Analysis",
81
+ description: "Identify underlying causes of issues",
82
+ steps: [
83
+ "Define the problem",
84
+ "Gather relevant data",
85
+ "Identify potential causes",
86
+ "Test hypotheses",
87
+ "Confirm root cause",
88
+ "Recommend solutions"
89
+ ]
90
+ },
91
+ performanceAnalysis: {
92
+ name: "Performance Analysis",
93
+ description: "Evaluate performance against goals",
94
+ steps: [
95
+ "Define KPIs and targets",
96
+ "Measure actual performance",
97
+ "Calculate variances",
98
+ "Identify drivers",
99
+ "Recommend improvements"
100
+ ]
101
+ },
102
+ segmentationAnalysis: {
103
+ name: "Segmentation Analysis",
104
+ description: "Divide data into meaningful groups",
105
+ steps: [
106
+ "Define segmentation criteria",
107
+ "Apply segmentation logic",
108
+ "Profile each segment",
109
+ "Compare segments",
110
+ "Identify actionable segments"
111
+ ]
112
+ }
113
+ };
114
+ function calculateStats(values) {
115
+ if (values.length === 0) {
116
+ return {
117
+ count: 0,
118
+ sum: 0,
119
+ mean: 0,
120
+ median: 0,
121
+ mode: null,
122
+ min: 0,
123
+ max: 0,
124
+ range: 0,
125
+ variance: 0,
126
+ stdDev: 0,
127
+ quartiles: { q1: 0, q2: 0, q3: 0 }
128
+ };
129
+ }
130
+ const sorted = [...values].sort((a, b) => a - b);
131
+ const count = values.length;
132
+ const sum = values.reduce((a, b) => a + b, 0);
133
+ const mean = sum / count;
134
+ const mid = Math.floor(count / 2);
135
+ const median = count % 2 !== 0 ? sorted[mid] : (sorted[mid - 1] + sorted[mid]) / 2;
136
+ const frequency = {};
137
+ let maxFreq = 0;
138
+ let mode = null;
139
+ for (const v of values) {
140
+ frequency[v] = (frequency[v] || 0) + 1;
141
+ if (frequency[v] > maxFreq) {
142
+ maxFreq = frequency[v];
143
+ mode = v;
144
+ }
145
+ }
146
+ if (maxFreq === 1) mode = null;
147
+ const min = sorted[0];
148
+ const max = sorted[count - 1];
149
+ const range = max - min;
150
+ const squaredDiffs = values.map((v) => Math.pow(v - mean, 2));
151
+ const variance = squaredDiffs.reduce((a, b) => a + b, 0) / count;
152
+ const stdDev = Math.sqrt(variance);
153
+ const q1Index = Math.floor(count * 0.25);
154
+ const q2Index = Math.floor(count * 0.5);
155
+ const q3Index = Math.floor(count * 0.75);
156
+ return {
157
+ count,
158
+ sum,
159
+ mean,
160
+ median,
161
+ mode,
162
+ min,
163
+ max,
164
+ range,
165
+ variance,
166
+ stdDev,
167
+ quartiles: {
168
+ q1: sorted[q1Index],
169
+ q2: sorted[q2Index],
170
+ q3: sorted[q3Index]
171
+ }
172
+ };
173
+ }
174
+ function calculateCorrelation(x, y) {
175
+ if (x.length !== y.length || x.length === 0) return 0;
176
+ const n = x.length;
177
+ const sumX = x.reduce((a, b) => a + b, 0);
178
+ const sumY = y.reduce((a, b) => a + b, 0);
179
+ const sumXY = x.reduce((acc, xi, i) => acc + xi * y[i], 0);
180
+ const sumX2 = x.reduce((acc, xi) => acc + xi * xi, 0);
181
+ const sumY2 = y.reduce((acc, yi) => acc + yi * yi, 0);
182
+ const numerator = n * sumXY - sumX * sumY;
183
+ const denominator = Math.sqrt(
184
+ (n * sumX2 - sumX * sumX) * (n * sumY2 - sumY * sumY)
185
+ );
186
+ return denominator === 0 ? 0 : numerator / denominator;
187
+ }
188
+ function calculateChange(oldValue, newValue) {
189
+ const absolute = newValue - oldValue;
190
+ const percentage = oldValue !== 0 ? absolute / oldValue * 100 : 0;
191
+ return { absolute, percentage };
192
+ }
193
+ function detectOutliers(values) {
194
+ const stats = calculateStats(values);
195
+ const iqr = stats.quartiles.q3 - stats.quartiles.q1;
196
+ const lowerBound = stats.quartiles.q1 - 1.5 * iqr;
197
+ const upperBound = stats.quartiles.q3 + 1.5 * iqr;
198
+ const outliers = values.filter((v) => v < lowerBound || v > upperBound);
199
+ return { outliers, lowerBound, upperBound };
200
+ }
201
+ function validateAnalysisOutput(output) {
202
+ const issues = [];
203
+ const suggestions = [];
204
+ const hasNumbers = /\d+/.test(output);
205
+ if (!hasNumbers) {
206
+ issues.push("Analysis lacks numerical evidence");
207
+ }
208
+ const insightKeywords = ["insight", "finding", "conclusion", "indicates", "suggests", "shows"];
209
+ const hasInsights = insightKeywords.some((k) => output.toLowerCase().includes(k));
210
+ if (!hasInsights) {
211
+ suggestions.push("Consider adding explicit insights or conclusions");
212
+ }
213
+ const recommendKeywords = ["recommend", "suggest", "should", "consider", "action"];
214
+ const hasRecommendations = recommendKeywords.some(
215
+ (k) => output.toLowerCase().includes(k)
216
+ );
217
+ if (!hasRecommendations) {
218
+ suggestions.push("Consider adding actionable recommendations");
219
+ }
220
+ const caveatsKeywords = ["limitation", "caveat", "note that", "however", "although"];
221
+ const hasCaveats = caveatsKeywords.some((k) => output.toLowerCase().includes(k));
222
+ if (!hasCaveats) {
223
+ suggestions.push("Consider acknowledging limitations or caveats");
224
+ }
225
+ return {
226
+ isValid: issues.length === 0,
227
+ issues,
228
+ suggestions
229
+ };
230
+ }
231
+ function buildAnalysisPrompt(taskType, subject, context) {
232
+ const task = ANALYSIS_TASKS[taskType];
233
+ let prompt = `Analysis Task: ${task.name}
234
+ `;
235
+ prompt += `Subject: ${subject}
236
+ `;
237
+ prompt += `Description: ${task.description}
238
+
239
+ `;
240
+ if (context?.methodology) {
241
+ const method = ANALYSIS_AGENT_CONFIG.methodologies[context.methodology];
242
+ prompt += `Methodology: ${method.name}
243
+ `;
244
+ prompt += `Expected Outputs: ${method.outputs.join(", ")}
245
+
246
+ `;
247
+ }
248
+ if (context?.data) {
249
+ prompt += `Data:
250
+ ${context.data}
251
+
252
+ `;
253
+ }
254
+ if (context?.questions?.length) {
255
+ prompt += `Questions to Answer:
256
+ ${context.questions.map((q) => `- ${q}`).join("\n")}
257
+
258
+ `;
259
+ }
260
+ prompt += `Analysis Steps:
261
+ ${task.steps.map((s, i) => `${i + 1}. ${s}`).join("\n")}
262
+
263
+ `;
264
+ prompt += `Please conduct this analysis following your guidelines and provide actionable insights.`;
265
+ return prompt;
266
+ }
267
+ var analysis_agent_default = {
268
+ ANALYSIS_AGENT_CONFIG,
269
+ ANALYSIS_TASKS,
270
+ calculateStats,
271
+ calculateCorrelation,
272
+ calculateChange,
273
+ detectOutliers,
274
+ validateAnalysisOutput,
275
+ buildAnalysisPrompt
276
+ };
277
+ export {
278
+ ANALYSIS_AGENT_CONFIG,
279
+ ANALYSIS_TASKS,
280
+ buildAnalysisPrompt,
281
+ calculateChange,
282
+ calculateCorrelation,
283
+ calculateStats,
284
+ analysis_agent_default as default,
285
+ detectOutliers,
286
+ validateAnalysisOutput
287
+ };
288
+ //# sourceMappingURL=analysis-agent-JWN2GXYE.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/core/agents/specialized/analysis-agent.ts"],"sourcesContent":["import { AgentType, AGENT_SYSTEM_PROMPTS, AGENT_TOOL_PERMISSIONS } from \"../agent-types\";\n\nexport const ANALYSIS_AGENT_CONFIG = {\n type: \"analysis\" as AgentType,\n name: \"Analysis Agent\",\n description: \"Specialized agent for data analysis and insights generation\",\n\n systemPrompt: AGENT_SYSTEM_PROMPTS.analysis,\n tools: AGENT_TOOL_PERMISSIONS.analysis,\n\n // Analysis-specific settings\n settings: {\n maxDataPoints: 10000,\n visualizationSupport: true,\n statisticalMethods: [\"descriptive\", \"inferential\", \"predictive\"],\n outputFormats: [\"text\", \"table\", \"chart\"],\n },\n\n // Analysis methodologies\n methodologies: {\n descriptive: {\n name: \"Descriptive Analysis\",\n description: \"Summarize and describe the main features of data\",\n outputs: [\"summary statistics\", \"distributions\", \"patterns\"],\n },\n diagnostic: {\n name: \"Diagnostic Analysis\",\n description: \"Understand why something happened\",\n outputs: [\"root cause analysis\", \"correlations\", \"contributing factors\"],\n },\n predictive: {\n name: \"Predictive Analysis\",\n description: \"Forecast future outcomes based on historical data\",\n outputs: [\"predictions\", \"confidence intervals\", \"scenarios\"],\n },\n prescriptive: {\n name: \"Prescriptive Analysis\",\n description: \"Recommend actions based on analysis\",\n outputs: [\"recommendations\", \"optimization suggestions\", \"action plans\"],\n },\n },\n};\n\n// Analysis task types\nexport const ANALYSIS_TASKS = {\n dataExploration: {\n name: \"Data Exploration\",\n description: \"Explore and understand a dataset\",\n steps: [\n \"Load and preview data\",\n \"Check data types and quality\",\n \"Calculate summary statistics\",\n \"Identify patterns and outliers\",\n \"Generate initial insights\",\n ],\n },\n trendAnalysis: {\n name: \"Trend Analysis\",\n description: \"Analyze trends over time\",\n steps: [\n \"Define time periods\",\n \"Calculate period-over-period changes\",\n \"Identify seasonal patterns\",\n \"Detect anomalies\",\n \"Project future trends\",\n ],\n },\n comparativeAnalysis: {\n name: \"Comparative Analysis\",\n description: \"Compare multiple items or groups\",\n steps: [\n \"Define comparison criteria\",\n \"Normalize data if needed\",\n \"Calculate differences\",\n \"Rank items\",\n \"Identify key differentiators\",\n ],\n },\n rootCauseAnalysis: {\n name: \"Root Cause Analysis\",\n description: \"Identify underlying causes of issues\",\n steps: [\n \"Define the problem\",\n \"Gather relevant data\",\n \"Identify potential causes\",\n \"Test hypotheses\",\n \"Confirm root cause\",\n \"Recommend solutions\",\n ],\n },\n performanceAnalysis: {\n name: \"Performance Analysis\",\n description: \"Evaluate performance against goals\",\n steps: [\n \"Define KPIs and targets\",\n \"Measure actual performance\",\n \"Calculate variances\",\n \"Identify drivers\",\n \"Recommend improvements\",\n ],\n },\n segmentationAnalysis: {\n name: \"Segmentation Analysis\",\n description: \"Divide data into meaningful groups\",\n steps: [\n \"Define segmentation criteria\",\n \"Apply segmentation logic\",\n \"Profile each segment\",\n \"Compare segments\",\n \"Identify actionable segments\",\n ],\n },\n};\n\n// Statistical calculations\nexport function calculateStats(values: number[]): {\n count: number;\n sum: number;\n mean: number;\n median: number;\n mode: number | null;\n min: number;\n max: number;\n range: number;\n variance: number;\n stdDev: number;\n quartiles: { q1: number; q2: number; q3: number };\n} {\n if (values.length === 0) {\n return {\n count: 0,\n sum: 0,\n mean: 0,\n median: 0,\n mode: null,\n min: 0,\n max: 0,\n range: 0,\n variance: 0,\n stdDev: 0,\n quartiles: { q1: 0, q2: 0, q3: 0 },\n };\n }\n\n const sorted = [...values].sort((a, b) => a - b);\n const count = values.length;\n const sum = values.reduce((a, b) => a + b, 0);\n const mean = sum / count;\n\n // Median\n const mid = Math.floor(count / 2);\n const median = count % 2 !== 0 ? sorted[mid] : (sorted[mid - 1] + sorted[mid]) / 2;\n\n // Mode\n const frequency: Record<number, number> = {};\n let maxFreq = 0;\n let mode: number | null = null;\n for (const v of values) {\n frequency[v] = (frequency[v] || 0) + 1;\n if (frequency[v] > maxFreq) {\n maxFreq = frequency[v];\n mode = v;\n }\n }\n if (maxFreq === 1) mode = null; // No mode if all values unique\n\n const min = sorted[0];\n const max = sorted[count - 1];\n const range = max - min;\n\n // Variance and standard deviation\n const squaredDiffs = values.map((v) => Math.pow(v - mean, 2));\n const variance = squaredDiffs.reduce((a, b) => a + b, 0) / count;\n const stdDev = Math.sqrt(variance);\n\n // Quartiles\n const q1Index = Math.floor(count * 0.25);\n const q2Index = Math.floor(count * 0.5);\n const q3Index = Math.floor(count * 0.75);\n\n return {\n count,\n sum,\n mean,\n median,\n mode,\n min,\n max,\n range,\n variance,\n stdDev,\n quartiles: {\n q1: sorted[q1Index],\n q2: sorted[q2Index],\n q3: sorted[q3Index],\n },\n };\n}\n\n// Correlation calculation\nexport function calculateCorrelation(x: number[], y: number[]): number {\n if (x.length !== y.length || x.length === 0) return 0;\n\n const n = x.length;\n const sumX = x.reduce((a, b) => a + b, 0);\n const sumY = y.reduce((a, b) => a + b, 0);\n const sumXY = x.reduce((acc, xi, i) => acc + xi * y[i], 0);\n const sumX2 = x.reduce((acc, xi) => acc + xi * xi, 0);\n const sumY2 = y.reduce((acc, yi) => acc + yi * yi, 0);\n\n const numerator = n * sumXY - sumX * sumY;\n const denominator = Math.sqrt(\n (n * sumX2 - sumX * sumX) * (n * sumY2 - sumY * sumY)\n );\n\n return denominator === 0 ? 0 : numerator / denominator;\n}\n\n// Percentage change calculation\nexport function calculateChange(\n oldValue: number,\n newValue: number\n): { absolute: number; percentage: number } {\n const absolute = newValue - oldValue;\n const percentage = oldValue !== 0 ? (absolute / oldValue) * 100 : 0;\n return { absolute, percentage };\n}\n\n// Outlier detection (IQR method)\nexport function detectOutliers(values: number[]): {\n outliers: number[];\n lowerBound: number;\n upperBound: number;\n} {\n const stats = calculateStats(values);\n const iqr = stats.quartiles.q3 - stats.quartiles.q1;\n const lowerBound = stats.quartiles.q1 - 1.5 * iqr;\n const upperBound = stats.quartiles.q3 + 1.5 * iqr;\n\n const outliers = values.filter((v) => v < lowerBound || v > upperBound);\n\n return { outliers, lowerBound, upperBound };\n}\n\n// Analysis output validation\nexport function validateAnalysisOutput(output: string): {\n isValid: boolean;\n issues: string[];\n suggestions: string[];\n} {\n const issues: string[] = [];\n const suggestions: string[] = [];\n\n // Check for data-backed claims\n const hasNumbers = /\\d+/.test(output);\n if (!hasNumbers) {\n issues.push(\"Analysis lacks numerical evidence\");\n }\n\n // Check for insights\n const insightKeywords = [\"insight\", \"finding\", \"conclusion\", \"indicates\", \"suggests\", \"shows\"];\n const hasInsights = insightKeywords.some((k) => output.toLowerCase().includes(k));\n if (!hasInsights) {\n suggestions.push(\"Consider adding explicit insights or conclusions\");\n }\n\n // Check for recommendations\n const recommendKeywords = [\"recommend\", \"suggest\", \"should\", \"consider\", \"action\"];\n const hasRecommendations = recommendKeywords.some((k) =>\n output.toLowerCase().includes(k)\n );\n if (!hasRecommendations) {\n suggestions.push(\"Consider adding actionable recommendations\");\n }\n\n // Check for caveats/limitations\n const caveatsKeywords = [\"limitation\", \"caveat\", \"note that\", \"however\", \"although\"];\n const hasCaveats = caveatsKeywords.some((k) => output.toLowerCase().includes(k));\n if (!hasCaveats) {\n suggestions.push(\"Consider acknowledging limitations or caveats\");\n }\n\n return {\n isValid: issues.length === 0,\n issues,\n suggestions,\n };\n}\n\n// Build analysis prompt\nexport function buildAnalysisPrompt(\n taskType: keyof typeof ANALYSIS_TASKS,\n subject: string,\n context?: {\n data?: string;\n questions?: string[];\n methodology?: keyof typeof ANALYSIS_AGENT_CONFIG.methodologies;\n }\n): string {\n const task = ANALYSIS_TASKS[taskType];\n let prompt = `Analysis Task: ${task.name}\\n`;\n prompt += `Subject: ${subject}\\n`;\n prompt += `Description: ${task.description}\\n\\n`;\n\n if (context?.methodology) {\n const method = ANALYSIS_AGENT_CONFIG.methodologies[context.methodology];\n prompt += `Methodology: ${method.name}\\n`;\n prompt += `Expected Outputs: ${method.outputs.join(\", \")}\\n\\n`;\n }\n\n if (context?.data) {\n prompt += `Data:\\n${context.data}\\n\\n`;\n }\n\n if (context?.questions?.length) {\n prompt += `Questions to Answer:\\n${context.questions.map((q) => `- ${q}`).join(\"\\n\")}\\n\\n`;\n }\n\n prompt += `Analysis Steps:\\n${task.steps.map((s, i) => `${i + 1}. ${s}`).join(\"\\n\")}\\n\\n`;\n prompt += `Please conduct this analysis following your guidelines and provide actionable insights.`;\n\n return prompt;\n}\n\nexport default {\n ANALYSIS_AGENT_CONFIG,\n ANALYSIS_TASKS,\n calculateStats,\n calculateCorrelation,\n calculateChange,\n detectOutliers,\n validateAnalysisOutput,\n buildAnalysisPrompt,\n};\n"],"mappings":"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","names":[]}
@@ -0,0 +1,22 @@
1
+ import {
2
+ analyzeEmail,
3
+ heuristicAnalyze,
4
+ listAnalyses,
5
+ parseJsonResponse,
6
+ persistAnalysis
7
+ } from "./chunk-SDLOMKCW.js";
8
+ import "./chunk-7BNFELEK.js";
9
+ import "./chunk-GW6V4D43.js";
10
+ import "./chunk-5BTVJR7R.js";
11
+ import "./chunk-4KIHDIXZ.js";
12
+ import "./chunk-ZIBRVA3Y.js";
13
+ import "./chunk-35WYTA3C.js";
14
+ import "./chunk-UP2VWCW5.js";
15
+ export {
16
+ analyzeEmail,
17
+ heuristicAnalyze,
18
+ listAnalyses,
19
+ parseJsonResponse,
20
+ persistAnalysis
21
+ };
22
+ //# sourceMappingURL=analyzer-OTWE3ARE.js.map
@@ -4,7 +4,7 @@ import {
4
4
  __export,
5
5
  __require,
6
6
  __toCommonJS
7
- } from "./chunk-PLDDJCW6.js";
7
+ } from "./chunk-UP2VWCW5.js";
8
8
 
9
9
  // node_modules/readdir-glob/node_modules/minimatch/lib/path.js
10
10
  var require_path = __commonJS({
@@ -15337,4 +15337,4 @@ archiver/index.js:
15337
15337
  * @copyright (c) 2012-2014 Chris Talkington, contributors.
15338
15338
  *)
15339
15339
  */
15340
- //# sourceMappingURL=archiver-AVNBYCKQ.js.map
15340
+ //# sourceMappingURL=archiver-FPGKRP6P.js.map
@@ -6,10 +6,11 @@ import {
6
6
  logAudit,
7
7
  queryAuditLogs,
8
8
  verifyAuditChain
9
- } from "./chunk-OCVQGBJK.js";
10
- import "./chunk-XKYRH4FM.js";
11
- import "./chunk-ZLZKF2PM.js";
12
- import "./chunk-PLDDJCW6.js";
9
+ } from "./chunk-BBN4VCNK.js";
10
+ import "./chunk-5BTVJR7R.js";
11
+ import "./chunk-4KIHDIXZ.js";
12
+ import "./chunk-ZIBRVA3Y.js";
13
+ import "./chunk-UP2VWCW5.js";
13
14
  export {
14
15
  audit,
15
16
  countActionsByType,
@@ -19,4 +20,4 @@ export {
19
20
  queryAuditLogs,
20
21
  verifyAuditChain
21
22
  };
22
- //# sourceMappingURL=audit-logger-OBPR7CRO.js.map
23
+ //# sourceMappingURL=audit-logger-CI4WZQPD.js.map
@@ -6,7 +6,7 @@ import {
6
6
  auth_default,
7
7
  createSpotifyAuth
8
8
  } from "./chunk-P6QINGFL.js";
9
- import "./chunk-PLDDJCW6.js";
9
+ import "./chunk-UP2VWCW5.js";
10
10
  export {
11
11
  DEFAULT_SCOPES,
12
12
  SPOTIFY_SCOPES,
@@ -15,4 +15,4 @@ export {
15
15
  createSpotifyAuth,
16
16
  auth_default as default
17
17
  };
18
- //# sourceMappingURL=auth-UOX5K2BE.js.map
18
+ //# sourceMappingURL=auth-PH5IHISW.js.map
@@ -1,4 +1,4 @@
1
- import "./chunk-PLDDJCW6.js";
1
+ import "./chunk-UP2VWCW5.js";
2
2
 
3
3
  // src/core/security/autonomy.ts
4
4
  var READONLY_TOOLS = /* @__PURE__ */ new Set([
@@ -18,7 +18,8 @@ var SUPERVISED_REQUIRE_APPROVAL = /* @__PURE__ */ new Set([
18
18
  "generate_spreadsheet",
19
19
  "send_email",
20
20
  "spawn_agent",
21
- "create_workflow"
21
+ "create_workflow",
22
+ "crypto_exchange"
22
23
  ]);
23
24
  var AutonomyManager = class {
24
25
  defaultLevel = "autonomous";
@@ -83,4 +84,4 @@ export {
83
84
  SUPERVISED_REQUIRE_APPROVAL,
84
85
  autonomyManager
85
86
  };
86
- //# sourceMappingURL=autonomy-ZXDBDQUJ.js.map
87
+ //# sourceMappingURL=autonomy-N7W5XPLX.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/core/security/autonomy.ts"],"sourcesContent":["/**\r\n * Autonomy Manager\r\n *\r\n * Controls the level of autonomy the assistant has when executing tools.\r\n * Three levels are supported:\r\n * - readonly: only safe, read-only tools are permitted\r\n * - supervised: all tools are permitted but certain high-impact tools are\r\n * flagged as requiring approval (enforcement happens upstream)\r\n * - autonomous: all tools are permitted without restriction\r\n */\r\n\r\nexport type AutonomyLevel = \"readonly\" | \"supervised\" | \"autonomous\";\r\n\r\n/** Tools that are allowed even in readonly mode. */\r\nexport const READONLY_TOOLS: Set<string> = new Set([\r\n \"search_web\",\r\n \"read_file\",\r\n \"list_files\",\r\n \"analyze_image\",\r\n \"get_time\",\r\n \"get_weather\",\r\n \"get_system_info\",\r\n \"get_calendar_events\",\r\n]);\r\n\r\n/** Tools that require explicit approval when running in supervised mode. */\r\nexport const SUPERVISED_REQUIRE_APPROVAL: Set<string> = new Set([\r\n \"execute_command\",\r\n \"write_file\",\r\n \"generate_document\",\r\n \"generate_spreadsheet\",\r\n \"send_email\",\r\n \"spawn_agent\",\r\n \"create_workflow\",\r\n \"crypto_exchange\",\r\n]);\r\n\r\nexport class AutonomyManager {\r\n private defaultLevel: AutonomyLevel = \"autonomous\";\r\n private userLevels: Map<string, AutonomyLevel> = new Map();\r\n\r\n /** Set the system-wide default autonomy level. */\r\n setDefaultLevel(level: AutonomyLevel): void {\r\n this.defaultLevel = level;\r\n }\r\n\r\n /** Get the system-wide default autonomy level. */\r\n getDefaultLevel(): AutonomyLevel {\r\n return this.defaultLevel;\r\n }\r\n\r\n /** Override the autonomy level for a specific user. */\r\n setLevel(userId: string, level: AutonomyLevel): void {\r\n this.userLevels.set(userId, level);\r\n }\r\n\r\n /** Get the effective autonomy level for a user (falls back to default). */\r\n getLevel(userId: string): AutonomyLevel {\r\n return this.userLevels.get(userId) ?? this.defaultLevel;\r\n }\r\n\r\n /**\r\n * Check whether a tool invocation is allowed for the given user.\r\n *\r\n * Returns an object with `allowed` (boolean) and an optional `reason`\r\n * string that explains the decision.\r\n */\r\n checkToolAccess(\r\n userId: string,\r\n toolName: string,\r\n ): { allowed: boolean; reason?: string } {\r\n const level = this.getLevel(userId);\r\n\r\n switch (level) {\r\n case \"autonomous\":\r\n return { allowed: true };\r\n\r\n case \"readonly\":\r\n if (READONLY_TOOLS.has(toolName)) {\r\n return { allowed: true };\r\n }\r\n return {\r\n allowed: false,\r\n reason: `Tool \"${toolName}\" is not permitted in readonly mode`,\r\n };\r\n\r\n case \"supervised\":\r\n if (SUPERVISED_REQUIRE_APPROVAL.has(toolName)) {\r\n return {\r\n allowed: true,\r\n reason: `Tool \"${toolName}\" requires approval in supervised mode`,\r\n };\r\n }\r\n return { allowed: true };\r\n }\r\n }\r\n\r\n /** Return high-level stats about the current autonomy configuration. */\r\n getStats(): { level: string; usersWithCustomLevel: number } {\r\n return {\r\n level: this.defaultLevel,\r\n usersWithCustomLevel: this.userLevels.size,\r\n };\r\n }\r\n}\r\n\r\nexport const autonomyManager = new AutonomyManager();\r\n"],"mappings":";;;AAcO,IAAM,iBAA8B,oBAAI,IAAI;AAAA,EACjD;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,CAAC;AAGM,IAAM,8BAA2C,oBAAI,IAAI;AAAA,EAC9D;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,CAAC;AAEM,IAAM,kBAAN,MAAsB;AAAA,EACnB,eAA8B;AAAA,EAC9B,aAAyC,oBAAI,IAAI;AAAA;AAAA,EAGzD,gBAAgB,OAA4B;AAC1C,SAAK,eAAe;AAAA,EACtB;AAAA;AAAA,EAGA,kBAAiC;AAC/B,WAAO,KAAK;AAAA,EACd;AAAA;AAAA,EAGA,SAAS,QAAgB,OAA4B;AACnD,SAAK,WAAW,IAAI,QAAQ,KAAK;AAAA,EACnC;AAAA;AAAA,EAGA,SAAS,QAA+B;AACtC,WAAO,KAAK,WAAW,IAAI,MAAM,KAAK,KAAK;AAAA,EAC7C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,gBACE,QACA,UACuC;AACvC,UAAM,QAAQ,KAAK,SAAS,MAAM;AAElC,YAAQ,OAAO;AAAA,MACb,KAAK;AACH,eAAO,EAAE,SAAS,KAAK;AAAA,MAEzB,KAAK;AACH,YAAI,eAAe,IAAI,QAAQ,GAAG;AAChC,iBAAO,EAAE,SAAS,KAAK;AAAA,QACzB;AACA,eAAO;AAAA,UACL,SAAS;AAAA,UACT,QAAQ,SAAS,QAAQ;AAAA,QAC3B;AAAA,MAEF,KAAK;AACH,YAAI,4BAA4B,IAAI,QAAQ,GAAG;AAC7C,iBAAO;AAAA,YACL,SAAS;AAAA,YACT,QAAQ,SAAS,QAAQ;AAAA,UAC3B;AAAA,QACF;AACA,eAAO,EAAE,SAAS,KAAK;AAAA,IAC3B;AAAA,EACF;AAAA;AAAA,EAGA,WAA4D;AAC1D,WAAO;AAAA,MACL,OAAO,KAAK;AAAA,MACZ,sBAAsB,KAAK,WAAW;AAAA,IACxC;AAAA,EACF;AACF;AAEO,IAAM,kBAAkB,IAAI,gBAAgB;","names":[]}
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  BaseAdapter
3
3
  } from "./chunk-7WQO5J2M.js";
4
- import "./chunk-PLDDJCW6.js";
4
+ import "./chunk-UP2VWCW5.js";
5
5
 
6
6
  // src/core/adapters/adapters/aws-s3.ts
7
7
  import { z } from "zod";
@@ -143,4 +143,4 @@ var AWSS3Adapter = class extends BaseAdapter {
143
143
  export {
144
144
  AWSS3Adapter
145
145
  };
146
- //# sourceMappingURL=aws-s3-Q4LLZZPD.js.map
146
+ //# sourceMappingURL=aws-s3-QZMURYXB.js.map
@@ -5,7 +5,7 @@ import {
5
5
  listBackups,
6
6
  restoreDatabase
7
7
  } from "./chunk-NPRTSZIF.js";
8
- import "./chunk-PLDDJCW6.js";
8
+ import "./chunk-UP2VWCW5.js";
9
9
  export {
10
10
  createDatabaseBackup,
11
11
  backup_restore_default as default,
@@ -13,4 +13,4 @@ export {
13
13
  listBackups,
14
14
  restoreDatabase
15
15
  };
16
- //# sourceMappingURL=backup-restore-PZ7CYYB7.js.map
16
+ //# sourceMappingURL=backup-restore-72OQTZO3.js.map
@@ -7,9 +7,9 @@ import {
7
7
  getBlocks,
8
8
  markdownToBlocks,
9
9
  updateBlock
10
- } from "./chunk-TVEWKIK3.js";
11
- import "./chunk-VRD5CYRL.js";
12
- import "./chunk-PLDDJCW6.js";
10
+ } from "./chunk-2WTKTG2C.js";
11
+ import "./chunk-C6PELIHS.js";
12
+ import "./chunk-UP2VWCW5.js";
13
13
  export {
14
14
  appendBlocks,
15
15
  blocksToMarkdown,
@@ -20,4 +20,4 @@ export {
20
20
  markdownToBlocks,
21
21
  updateBlock
22
22
  };
23
- //# sourceMappingURL=blocks-R3PODY47.js.map
23
+ //# sourceMappingURL=blocks-YOWOESDD.js.map
@@ -0,0 +1,47 @@
1
+ import {
2
+ createBot
3
+ } from "./chunk-56UJS2LA.js";
4
+ import "./chunk-J4JW73TT.js";
5
+ import "./chunk-BNZHWAZC.js";
6
+ import "./chunk-GJETKBOY.js";
7
+ import "./chunk-ZMML6T63.js";
8
+ import "./chunk-5JJTLWOR.js";
9
+ import "./chunk-QPY3WRVM.js";
10
+ import "./chunk-ADTDYJO7.js";
11
+ import "./chunk-LFDXEYYB.js";
12
+ import "./chunk-TKBVW7ZJ.js";
13
+ import "./chunk-DTISLIMB.js";
14
+ import "./chunk-CUPEENUY.js";
15
+ import "./chunk-2WTKTG2C.js";
16
+ import "./chunk-U2X2J3FI.js";
17
+ import "./chunk-X6Q3K3L2.js";
18
+ import "./chunk-ODCFS5WD.js";
19
+ import "./chunk-KM22GV7G.js";
20
+ import "./chunk-P6QINGFL.js";
21
+ import "./chunk-HJSEEFO3.js";
22
+ import "./chunk-C6PELIHS.js";
23
+ import "./chunk-7WQO5J2M.js";
24
+ import "./chunk-WMFYI7XC.js";
25
+ import "./chunk-YEDEAX6Y.js";
26
+ import "./chunk-6ZNCY2GI.js";
27
+ import "./chunk-WZAH34TG.js";
28
+ import "./chunk-6KONMXQ6.js";
29
+ import "./chunk-22VGGA7S.js";
30
+ import "./chunk-HN3F4WSW.js";
31
+ import "./chunk-V3OKHQUX.js";
32
+ import "./chunk-2I5QHYG6.js";
33
+ import "./chunk-CZTMGHUC.js";
34
+ import "./chunk-4WH6MFEW.js";
35
+ import "./chunk-GW6V4D43.js";
36
+ import "./chunk-DOYGMNMK.js";
37
+ import "./chunk-CQ4JURG7.js";
38
+ import "./chunk-BBN4VCNK.js";
39
+ import "./chunk-5BTVJR7R.js";
40
+ import "./chunk-4KIHDIXZ.js";
41
+ import "./chunk-ZIBRVA3Y.js";
42
+ import "./chunk-35WYTA3C.js";
43
+ import "./chunk-UP2VWCW5.js";
44
+ export {
45
+ createBot
46
+ };
47
+ //# sourceMappingURL=bot-VDHBGUVI.js.map