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,699 @@
1
+ import {
2
+ db
3
+ } from "./chunk-5BTVJR7R.js";
4
+ import "./chunk-4KIHDIXZ.js";
5
+ import {
6
+ errorLogs,
7
+ metrics
8
+ } from "./chunk-ZIBRVA3Y.js";
9
+ import "./chunk-UP2VWCW5.js";
10
+
11
+ // src/core/observability/alerting.ts
12
+ import { eq, and, gte, lte, desc } from "drizzle-orm";
13
+ import { EventEmitter } from "events";
14
+ var TOKEN_COST_PER_MILLION_INPUT = 3;
15
+ var TOKEN_COST_PER_MILLION_OUTPUT = 15;
16
+ var activeAlerts = /* @__PURE__ */ new Map();
17
+ var alertRules = /* @__PURE__ */ new Map();
18
+ var healthCheckResults = /* @__PURE__ */ new Map();
19
+ var alertHistory = [];
20
+ var alertEmitter = new EventEmitter();
21
+ var channelConfig = {
22
+ console: { enabled: true },
23
+ telegram: { enabled: false },
24
+ webhook: { enabled: false },
25
+ email: { enabled: false },
26
+ database: { enabled: true }
27
+ };
28
+ var historyLoaded = false;
29
+ async function loadAlertHistoryFromDb() {
30
+ if (historyLoaded) return;
31
+ try {
32
+ const rows = await db.select().from(errorLogs).where(eq(errorLogs.source, "alerting")).orderBy(desc(errorLogs.createdAt)).limit(500);
33
+ for (const row of rows.reverse()) {
34
+ const alertType = row.errorType?.replace("Alert:", "") || "system";
35
+ const severity = row.errorCode || "info";
36
+ const [title, ...msgParts] = (row.message || "").split(": ");
37
+ const alert = {
38
+ id: String(row.id),
39
+ type: alertType,
40
+ severity,
41
+ title: title || "Alert",
42
+ message: msgParts.join(": ") || row.message || "",
43
+ source: "alert_rule",
44
+ timestamp: new Date(row.createdAt),
45
+ metadata: row.context || {},
46
+ acknowledged: false,
47
+ resolved: true
48
+ // historical alerts are resolved
49
+ };
50
+ alertHistory.push(alert);
51
+ }
52
+ historyLoaded = true;
53
+ if (alertHistory.length > 0) {
54
+ console.log(`[Alerting] Loaded ${alertHistory.length} historical alerts from DB`);
55
+ }
56
+ } catch {
57
+ }
58
+ }
59
+ function initializeDefaultRules() {
60
+ addAlertRule({
61
+ id: "error-spike",
62
+ name: "Error Spike Detection",
63
+ description: "Triggers when error rate exceeds normal levels",
64
+ enabled: true,
65
+ type: "error_spike",
66
+ condition: {
67
+ metric: "error_count",
68
+ operator: "gt",
69
+ threshold: 10,
70
+ windowMinutes: 5,
71
+ aggregation: "count"
72
+ },
73
+ severity: "error",
74
+ cooldownMinutes: 15,
75
+ channels: ["console", "database"],
76
+ triggerCount: 0
77
+ });
78
+ addAlertRule({
79
+ id: "high-latency",
80
+ name: "High Response Latency",
81
+ description: "Triggers when average response time exceeds threshold",
82
+ enabled: true,
83
+ type: "performance",
84
+ condition: {
85
+ metric: "response_latency",
86
+ operator: "gt",
87
+ threshold: 1e4,
88
+ // 10 seconds
89
+ windowMinutes: 5,
90
+ aggregation: "avg"
91
+ },
92
+ severity: "warning",
93
+ cooldownMinutes: 10,
94
+ channels: ["console", "database"],
95
+ triggerCount: 0
96
+ });
97
+ addAlertRule({
98
+ id: "daily-cost-threshold",
99
+ name: "Daily Cost Threshold",
100
+ description: "Triggers when daily API costs exceed threshold",
101
+ enabled: true,
102
+ type: "cost_threshold",
103
+ condition: {
104
+ metric: "cost",
105
+ operator: "gt",
106
+ threshold: 50,
107
+ // $50
108
+ windowMinutes: 1440
109
+ // 24 hours
110
+ },
111
+ severity: "warning",
112
+ cooldownMinutes: 60,
113
+ channels: ["console", "database"],
114
+ triggerCount: 0
115
+ });
116
+ addAlertRule({
117
+ id: "memory-anomaly",
118
+ name: "Memory Usage Anomaly",
119
+ description: "Triggers when memory usage is abnormally high",
120
+ enabled: true,
121
+ type: "anomaly",
122
+ condition: {
123
+ metric: "memory_usage",
124
+ operator: "anomaly",
125
+ windowMinutes: 60
126
+ },
127
+ severity: "warning",
128
+ cooldownMinutes: 30,
129
+ channels: ["console", "database"],
130
+ triggerCount: 0
131
+ });
132
+ addAlertRule({
133
+ id: "quota-80-percent",
134
+ name: "80% Quota Usage",
135
+ description: "Triggers when usage reaches 80% of quota",
136
+ enabled: true,
137
+ type: "quota_warning",
138
+ condition: {
139
+ metric: "quota_usage",
140
+ operator: "gte",
141
+ threshold: 80
142
+ },
143
+ severity: "warning",
144
+ cooldownMinutes: 60,
145
+ channels: ["console", "database"],
146
+ triggerCount: 0
147
+ });
148
+ addAlertRule({
149
+ id: "tool-failure-rate",
150
+ name: "High Tool Failure Rate",
151
+ description: "Triggers when tool failure rate is high",
152
+ enabled: true,
153
+ type: "performance",
154
+ condition: {
155
+ metric: "tool_failure",
156
+ operator: "gt",
157
+ threshold: 5,
158
+ windowMinutes: 10,
159
+ aggregation: "count"
160
+ },
161
+ severity: "warning",
162
+ cooldownMinutes: 15,
163
+ channels: ["console", "database"],
164
+ triggerCount: 0
165
+ });
166
+ }
167
+ function addAlertRule(rule) {
168
+ alertRules.set(rule.id, rule);
169
+ }
170
+ function removeAlertRule(ruleId) {
171
+ return alertRules.delete(ruleId);
172
+ }
173
+ function getAlertRules() {
174
+ return Array.from(alertRules.values());
175
+ }
176
+ function setRuleEnabled(ruleId, enabled) {
177
+ const rule = alertRules.get(ruleId);
178
+ if (rule) {
179
+ rule.enabled = enabled;
180
+ return true;
181
+ }
182
+ return false;
183
+ }
184
+ function configureChannels(config) {
185
+ channelConfig = { ...channelConfig, ...config };
186
+ }
187
+ async function createAlert(type, severity, title, message, source, metadata) {
188
+ const alert = {
189
+ id: crypto.randomUUID(),
190
+ type,
191
+ severity,
192
+ title,
193
+ message,
194
+ source,
195
+ timestamp: /* @__PURE__ */ new Date(),
196
+ metadata,
197
+ acknowledged: false,
198
+ resolved: false
199
+ };
200
+ activeAlerts.set(alert.id, alert);
201
+ alertHistory.push(alert);
202
+ await dispatchAlert(alert);
203
+ alertEmitter.emit("alert", alert);
204
+ return alert;
205
+ }
206
+ async function dispatchAlert(alert) {
207
+ const promises = [];
208
+ if (channelConfig.console.enabled) {
209
+ promises.push(dispatchToConsole(alert));
210
+ }
211
+ if (channelConfig.database.enabled) {
212
+ promises.push(dispatchToDatabase(alert));
213
+ }
214
+ if (channelConfig.webhook.enabled && channelConfig.webhook.url) {
215
+ promises.push(dispatchToWebhook(alert, channelConfig.webhook.url, channelConfig.webhook.headers));
216
+ }
217
+ await Promise.allSettled(promises);
218
+ }
219
+ async function dispatchToConsole(alert) {
220
+ const severityColors = {
221
+ info: "\x1B[36m",
222
+ // Cyan
223
+ warning: "\x1B[33m",
224
+ // Yellow
225
+ error: "\x1B[31m",
226
+ // Red
227
+ critical: "\x1B[35m"
228
+ // Magenta
229
+ };
230
+ const reset = "\x1B[0m";
231
+ const color = severityColors[alert.severity];
232
+ console.log(`${color}[ALERT ${alert.severity.toUpperCase()}]${reset} ${alert.title}`);
233
+ console.log(` Source: ${alert.source}`);
234
+ console.log(` Message: ${alert.message}`);
235
+ if (alert.metadata) {
236
+ console.log(` Metadata: ${JSON.stringify(alert.metadata)}`);
237
+ }
238
+ }
239
+ async function dispatchToDatabase(alert) {
240
+ await db.insert(errorLogs).values({
241
+ source: "alerting",
242
+ errorType: `Alert:${alert.type}`,
243
+ errorCode: alert.severity,
244
+ message: `${alert.title}: ${alert.message}`,
245
+ context: alert.metadata
246
+ });
247
+ }
248
+ async function dispatchToWebhook(alert, url, headers) {
249
+ try {
250
+ await fetch(url, {
251
+ method: "POST",
252
+ headers: {
253
+ "Content-Type": "application/json",
254
+ ...headers
255
+ },
256
+ body: JSON.stringify(alert)
257
+ });
258
+ } catch (error) {
259
+ console.error("[Alerting] Failed to dispatch to webhook:", error);
260
+ }
261
+ }
262
+ function acknowledgeAlert(alertId, acknowledgedBy) {
263
+ const alert = activeAlerts.get(alertId);
264
+ if (alert) {
265
+ alert.acknowledged = true;
266
+ alert.acknowledgedAt = /* @__PURE__ */ new Date();
267
+ alert.acknowledgedBy = acknowledgedBy;
268
+ alertEmitter.emit("alert:acknowledged", alert);
269
+ return true;
270
+ }
271
+ return false;
272
+ }
273
+ function resolveAlert(alertId, resolvedBy) {
274
+ const alert = activeAlerts.get(alertId);
275
+ if (alert) {
276
+ alert.resolved = true;
277
+ alert.resolvedAt = /* @__PURE__ */ new Date();
278
+ alert.resolvedBy = resolvedBy;
279
+ activeAlerts.delete(alertId);
280
+ alertEmitter.emit("alert:resolved", alert);
281
+ return true;
282
+ }
283
+ return false;
284
+ }
285
+ function getActiveAlerts(type, severity) {
286
+ let alerts = Array.from(activeAlerts.values());
287
+ if (type) {
288
+ alerts = alerts.filter((a) => a.type === type);
289
+ }
290
+ if (severity) {
291
+ alerts = alerts.filter((a) => a.severity === severity);
292
+ }
293
+ return alerts.sort((a, b) => b.timestamp.getTime() - a.timestamp.getTime());
294
+ }
295
+ function getAlertHistory(limit = 100) {
296
+ return alertHistory.slice(-limit).reverse();
297
+ }
298
+ function clearAlertHistory() {
299
+ alertHistory.length = 0;
300
+ activeAlerts.clear();
301
+ db.delete(errorLogs).where(eq(errorLogs.source, "alerting")).catch(() => {
302
+ });
303
+ }
304
+ async function evaluateAlertRules() {
305
+ const triggeredAlerts = [];
306
+ for (const rule of alertRules.values()) {
307
+ if (!rule.enabled) continue;
308
+ if (rule.lastTriggered) {
309
+ const cooldownMs = rule.cooldownMinutes * 60 * 1e3;
310
+ if (Date.now() - rule.lastTriggered.getTime() < cooldownMs) {
311
+ continue;
312
+ }
313
+ }
314
+ try {
315
+ const shouldTrigger = await evaluateCondition(rule.condition);
316
+ if (shouldTrigger) {
317
+ rule.lastTriggered = /* @__PURE__ */ new Date();
318
+ rule.triggerCount++;
319
+ const alert = await createAlert(
320
+ rule.type,
321
+ rule.severity,
322
+ rule.name,
323
+ rule.description,
324
+ "alert_rule",
325
+ { ruleId: rule.id, triggerCount: rule.triggerCount }
326
+ );
327
+ triggeredAlerts.push(alert);
328
+ }
329
+ } catch (error) {
330
+ console.error(`[Alerting] Error evaluating rule ${rule.id}:`, error);
331
+ }
332
+ }
333
+ return triggeredAlerts;
334
+ }
335
+ async function evaluateCondition(condition) {
336
+ if (condition.customCheck) {
337
+ return condition.customCheck();
338
+ }
339
+ if (condition.metric && condition.operator !== "anomaly") {
340
+ const windowMs = (condition.windowMinutes || 5) * 60 * 1e3;
341
+ const startDate = new Date(Date.now() - windowMs);
342
+ const results = await db.select().from(metrics).where(
343
+ and(
344
+ eq(metrics.name, condition.metric),
345
+ gte(metrics.timestamp, startDate)
346
+ )
347
+ );
348
+ if (results.length === 0) return false;
349
+ const values = results.map((r) => r.value);
350
+ let aggregatedValue;
351
+ switch (condition.aggregation || "avg") {
352
+ case "sum":
353
+ aggregatedValue = values.reduce((a, b) => a + b, 0);
354
+ break;
355
+ case "max":
356
+ aggregatedValue = Math.max(...values);
357
+ break;
358
+ case "min":
359
+ aggregatedValue = Math.min(...values);
360
+ break;
361
+ case "count":
362
+ aggregatedValue = values.length;
363
+ break;
364
+ case "avg":
365
+ default:
366
+ aggregatedValue = values.reduce((a, b) => a + b, 0) / values.length;
367
+ }
368
+ const threshold = condition.threshold || 0;
369
+ switch (condition.operator) {
370
+ case "gt":
371
+ return aggregatedValue > threshold;
372
+ case "lt":
373
+ return aggregatedValue < threshold;
374
+ case "eq":
375
+ return aggregatedValue === threshold;
376
+ case "gte":
377
+ return aggregatedValue >= threshold;
378
+ case "lte":
379
+ return aggregatedValue <= threshold;
380
+ default:
381
+ return false;
382
+ }
383
+ }
384
+ if (condition.operator === "anomaly" && condition.metric) {
385
+ const anomaly = await detectAnomaly(condition.metric, condition.windowMinutes || 60);
386
+ return anomaly.isAnomaly;
387
+ }
388
+ return false;
389
+ }
390
+ async function detectAnomaly(metricName, windowMinutes = 60) {
391
+ const windowMs = windowMinutes * 60 * 1e3;
392
+ const now = Date.now();
393
+ const baselineStart = new Date(now - 7 * 24 * 60 * 60 * 1e3);
394
+ const baselineEnd = new Date(now - windowMs);
395
+ const baselineResults = await db.select().from(metrics).where(
396
+ and(
397
+ eq(metrics.name, metricName),
398
+ gte(metrics.timestamp, baselineStart),
399
+ lte(metrics.timestamp, baselineEnd)
400
+ )
401
+ );
402
+ const currentStart = new Date(now - windowMs);
403
+ const currentResults = await db.select().from(metrics).where(
404
+ and(
405
+ eq(metrics.name, metricName),
406
+ gte(metrics.timestamp, currentStart)
407
+ )
408
+ );
409
+ if (baselineResults.length < 10 || currentResults.length === 0) {
410
+ return {
411
+ metric: metricName,
412
+ currentValue: currentResults.length > 0 ? currentResults.reduce((a, b) => a + b.value, 0) / currentResults.length : 0,
413
+ expectedValue: 0,
414
+ deviation: 0,
415
+ deviationPercent: 0,
416
+ isAnomaly: false,
417
+ confidence: 0,
418
+ timestamp: /* @__PURE__ */ new Date()
419
+ };
420
+ }
421
+ const baselineValues = baselineResults.map((r) => r.value);
422
+ const baselineMean = baselineValues.reduce((a, b) => a + b, 0) / baselineValues.length;
423
+ const baselineStdDev = Math.sqrt(
424
+ baselineValues.reduce((sum, val) => sum + Math.pow(val - baselineMean, 2), 0) / baselineValues.length
425
+ );
426
+ const currentValue = currentResults.reduce((a, b) => a + b.value, 0) / currentResults.length;
427
+ const zScore = baselineStdDev > 0 ? (currentValue - baselineMean) / baselineStdDev : 0;
428
+ const deviation = currentValue - baselineMean;
429
+ const deviationPercent = baselineMean !== 0 ? deviation / baselineMean * 100 : 0;
430
+ const isAnomaly = Math.abs(zScore) > 2;
431
+ const confidence = Math.min(
432
+ baselineResults.length / 100,
433
+ // More data = higher confidence
434
+ 1 - 1 / (1 + Math.abs(zScore))
435
+ // Higher z-score = higher confidence
436
+ );
437
+ return {
438
+ metric: metricName,
439
+ currentValue,
440
+ expectedValue: baselineMean,
441
+ deviation,
442
+ deviationPercent,
443
+ isAnomaly,
444
+ confidence,
445
+ timestamp: /* @__PURE__ */ new Date()
446
+ };
447
+ }
448
+ async function calculateCostMetrics(period, startDate) {
449
+ const now = /* @__PURE__ */ new Date();
450
+ let periodStart;
451
+ switch (period) {
452
+ case "hourly":
453
+ periodStart = startDate || new Date(now.getTime() - 60 * 60 * 1e3);
454
+ break;
455
+ case "daily":
456
+ periodStart = startDate || new Date(now.getTime() - 24 * 60 * 60 * 1e3);
457
+ break;
458
+ case "weekly":
459
+ periodStart = startDate || new Date(now.getTime() - 7 * 24 * 60 * 60 * 1e3);
460
+ break;
461
+ case "monthly":
462
+ periodStart = startDate || new Date(now.getTime() - 30 * 24 * 60 * 60 * 1e3);
463
+ break;
464
+ }
465
+ const inputTokens = await db.select().from(metrics).where(
466
+ and(
467
+ eq(metrics.name, "token_usage_input"),
468
+ gte(metrics.timestamp, periodStart)
469
+ )
470
+ );
471
+ const outputTokens = await db.select().from(metrics).where(
472
+ and(
473
+ eq(metrics.name, "token_usage_output"),
474
+ gte(metrics.timestamp, periodStart)
475
+ )
476
+ );
477
+ const totalInput = inputTokens.reduce((sum, m) => sum + m.value, 0);
478
+ const totalOutput = outputTokens.reduce((sum, m) => sum + m.value, 0);
479
+ const inputCost = totalInput / 1e6 * TOKEN_COST_PER_MILLION_INPUT;
480
+ const outputCost = totalOutput / 1e6 * TOKEN_COST_PER_MILLION_OUTPUT;
481
+ const totalCost = inputCost + outputCost;
482
+ const breakdown = [];
483
+ const inputByTag = /* @__PURE__ */ new Map();
484
+ for (const m of inputTokens) {
485
+ const category = m.tags?.source || "general";
486
+ inputByTag.set(category, (inputByTag.get(category) || 0) + m.value);
487
+ }
488
+ for (const [category, tokens] of inputByTag) {
489
+ const cost = tokens / 1e6 * TOKEN_COST_PER_MILLION_INPUT;
490
+ breakdown.push({
491
+ category: `input:${category}`,
492
+ tokens,
493
+ cost,
494
+ percentage: totalCost > 0 ? cost / totalCost * 100 : 0
495
+ });
496
+ }
497
+ return {
498
+ totalTokens: totalInput + totalOutput,
499
+ inputTokens: totalInput,
500
+ outputTokens: totalOutput,
501
+ estimatedCost: totalCost,
502
+ period,
503
+ startDate: periodStart,
504
+ endDate: now,
505
+ breakdown
506
+ };
507
+ }
508
+ function registerHealthCheck(name, check) {
509
+ healthChecks.set(name, check);
510
+ }
511
+ var healthChecks = /* @__PURE__ */ new Map();
512
+ async function runHealthChecks() {
513
+ const results = [];
514
+ for (const [name, check] of healthChecks) {
515
+ const startTime = Date.now();
516
+ try {
517
+ const result = await check();
518
+ const checkResult = {
519
+ name,
520
+ status: result.status,
521
+ message: result.message,
522
+ latencyMs: Date.now() - startTime,
523
+ lastCheck: /* @__PURE__ */ new Date(),
524
+ metadata: result.metadata
525
+ };
526
+ results.push(checkResult);
527
+ healthCheckResults.set(name, checkResult);
528
+ if (result.status === "unhealthy") {
529
+ await createAlert(
530
+ "health_check",
531
+ "error",
532
+ `Health Check Failed: ${name}`,
533
+ result.message,
534
+ "health_monitor",
535
+ result.metadata
536
+ );
537
+ } else if (result.status === "degraded") {
538
+ await createAlert(
539
+ "health_check",
540
+ "warning",
541
+ `Health Check Degraded: ${name}`,
542
+ result.message,
543
+ "health_monitor",
544
+ result.metadata
545
+ );
546
+ }
547
+ } catch (error) {
548
+ const checkResult = {
549
+ name,
550
+ status: "unhealthy",
551
+ message: error instanceof Error ? error.message : "Unknown error",
552
+ latencyMs: Date.now() - startTime,
553
+ lastCheck: /* @__PURE__ */ new Date()
554
+ };
555
+ results.push(checkResult);
556
+ healthCheckResults.set(name, checkResult);
557
+ await createAlert(
558
+ "health_check",
559
+ "error",
560
+ `Health Check Error: ${name}`,
561
+ checkResult.message,
562
+ "health_monitor"
563
+ );
564
+ }
565
+ }
566
+ return results;
567
+ }
568
+ function getHealthCheckResults() {
569
+ return Array.from(healthCheckResults.values());
570
+ }
571
+ function initializeDefaultHealthChecks() {
572
+ registerHealthCheck("database", async () => {
573
+ try {
574
+ await db.select().from(metrics).limit(1);
575
+ return { status: "healthy", message: "Database connection is healthy" };
576
+ } catch (error) {
577
+ return {
578
+ status: "unhealthy",
579
+ message: `Database connection failed: ${error instanceof Error ? error.message : "Unknown error"}`
580
+ };
581
+ }
582
+ });
583
+ registerHealthCheck("memory", async () => {
584
+ const memUsage = process.memoryUsage();
585
+ const heapUsedPercent = memUsage.heapUsed / memUsage.heapTotal * 100;
586
+ if (heapUsedPercent > 90) {
587
+ return {
588
+ status: "unhealthy",
589
+ message: `Heap usage critical: ${heapUsedPercent.toFixed(1)}%`,
590
+ metadata: { heapUsed: memUsage.heapUsed, heapTotal: memUsage.heapTotal }
591
+ };
592
+ } else if (heapUsedPercent > 75) {
593
+ return {
594
+ status: "degraded",
595
+ message: `Heap usage high: ${heapUsedPercent.toFixed(1)}%`,
596
+ metadata: { heapUsed: memUsage.heapUsed, heapTotal: memUsage.heapTotal }
597
+ };
598
+ }
599
+ return {
600
+ status: "healthy",
601
+ message: `Heap usage: ${heapUsedPercent.toFixed(1)}%`,
602
+ metadata: { heapUsed: memUsage.heapUsed, heapTotal: memUsage.heapTotal }
603
+ };
604
+ });
605
+ registerHealthCheck("error_rate", async () => {
606
+ const oneHourAgo = new Date(Date.now() - 60 * 60 * 1e3);
607
+ const errors = await db.select().from(errorLogs).where(gte(errorLogs.createdAt, oneHourAgo));
608
+ const errorCount = errors.length;
609
+ if (errorCount > 100) {
610
+ return {
611
+ status: "unhealthy",
612
+ message: `High error rate: ${errorCount} errors in the last hour`,
613
+ metadata: { errorCount }
614
+ };
615
+ } else if (errorCount > 50) {
616
+ return {
617
+ status: "degraded",
618
+ message: `Elevated error rate: ${errorCount} errors in the last hour`,
619
+ metadata: { errorCount }
620
+ };
621
+ }
622
+ return {
623
+ status: "healthy",
624
+ message: `Error rate normal: ${errorCount} errors in the last hour`,
625
+ metadata: { errorCount }
626
+ };
627
+ });
628
+ }
629
+ function startAlertingSystem(intervalMs = 6e4) {
630
+ initializeDefaultRules();
631
+ initializeDefaultHealthChecks();
632
+ setInterval(async () => {
633
+ try {
634
+ await evaluateAlertRules();
635
+ await runHealthChecks();
636
+ } catch (error) {
637
+ console.error("[Alerting] Error in periodic check:", error);
638
+ }
639
+ }, intervalMs);
640
+ console.log(`[Alerting] System started with ${intervalMs}ms check interval`);
641
+ }
642
+ function getAlertingStatus() {
643
+ const healthResults = getHealthCheckResults();
644
+ return {
645
+ activeAlerts: activeAlerts.size,
646
+ totalRules: alertRules.size,
647
+ enabledRules: Array.from(alertRules.values()).filter((r) => r.enabled).length,
648
+ healthChecks: healthChecks.size,
649
+ healthyChecks: healthResults.filter((r) => r.status === "healthy").length
650
+ };
651
+ }
652
+ function formatAlert(alert) {
653
+ const lines = [];
654
+ lines.push(`=== Alert: ${alert.title} ===`);
655
+ lines.push(`ID: ${alert.id}`);
656
+ lines.push(`Type: ${alert.type}`);
657
+ lines.push(`Severity: ${alert.severity.toUpperCase()}`);
658
+ lines.push(`Source: ${alert.source}`);
659
+ lines.push(`Time: ${alert.timestamp.toISOString()}`);
660
+ lines.push("");
661
+ lines.push(`Message: ${alert.message}`);
662
+ if (alert.metadata) {
663
+ lines.push("");
664
+ lines.push("Metadata:");
665
+ for (const [key, value] of Object.entries(alert.metadata)) {
666
+ lines.push(` ${key}: ${JSON.stringify(value)}`);
667
+ }
668
+ }
669
+ lines.push("");
670
+ lines.push(`Status: ${alert.resolved ? "Resolved" : alert.acknowledged ? "Acknowledged" : "Active"}`);
671
+ return lines.join("\n");
672
+ }
673
+ export {
674
+ acknowledgeAlert,
675
+ addAlertRule,
676
+ alertEmitter,
677
+ calculateCostMetrics,
678
+ clearAlertHistory,
679
+ configureChannels,
680
+ createAlert,
681
+ detectAnomaly,
682
+ evaluateAlertRules,
683
+ formatAlert,
684
+ getActiveAlerts,
685
+ getAlertHistory,
686
+ getAlertRules,
687
+ getAlertingStatus,
688
+ getHealthCheckResults,
689
+ initializeDefaultHealthChecks,
690
+ initializeDefaultRules,
691
+ loadAlertHistoryFromDb,
692
+ registerHealthCheck,
693
+ removeAlertRule,
694
+ resolveAlert,
695
+ runHealthChecks,
696
+ setRuleEnabled,
697
+ startAlertingSystem
698
+ };
699
+ //# sourceMappingURL=alerting-LK7VVYTX.js.map