opensentinel 3.1.1 → 3.6.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +126 -83
- package/dist/agent-manager-7N7REQZQ.js +39 -0
- package/dist/agent-processor-I23VWQY3.js +280 -0
- package/dist/agent-processor-I23VWQY3.js.map +1 -0
- package/dist/agent-types-2T4PXLFQ.js +12 -0
- package/dist/alerting-4I37GG4U.js +699 -0
- package/dist/alerting-4I37GG4U.js.map +1 -0
- package/dist/analysis-agent-JWN2GXYE.js +288 -0
- package/dist/analysis-agent-JWN2GXYE.js.map +1 -0
- package/dist/{archiver-AVNBYCKQ.js → archiver-XLRIIXPY.js} +86 -17
- package/dist/archiver-XLRIIXPY.js.map +1 -0
- package/dist/{audit-logger-OBPR7CRO.js → audit-logger-AU3TMWKI.js} +6 -5
- package/dist/{auth-UOX5K2BE.js → auth-PH5IHISW.js} +2 -2
- package/dist/{autonomy-ZXDBDQUJ.js → autonomy-N7W5XPLX.js} +4 -3
- package/dist/autonomy-N7W5XPLX.js.map +1 -0
- package/dist/{aws-s3-Q4LLZZPD.js → aws-s3-QZMURYXB.js} +2 -2
- package/dist/{backup-restore-PZ7CYYB7.js → backup-restore-72OQTZO3.js} +2 -2
- package/dist/{blocks-R3PODY47.js → blocks-YOWOESDD.js} +4 -4
- package/dist/bot-MU2TJQ3Y.js +46 -0
- package/dist/brain-SLA474EU.js +65 -0
- package/dist/{camera-monitor-M5CYKUU4.js → camera-monitor-LHTUWHEL.js} +2 -2
- package/dist/{charts-V7ARZNKF.js → charts-FJ32GQK7.js} +2 -2
- package/dist/{chunk-6PMVAAA7.js → chunk-2RGPWU77.js} +3 -3
- package/dist/{chunk-TVEWKIK3.js → chunk-2WTKTG2C.js} +2 -2
- package/dist/{chunk-MXAPLSJ5.js → chunk-45YXODSB.js} +2 -2
- package/dist/{chunk-SJSUSJ47.js → chunk-4YJRBMMA.js} +2 -2
- package/dist/chunk-643M3AP5.js +564 -0
- package/dist/chunk-643M3AP5.js.map +1 -0
- package/dist/{chunk-766ASQWE.js → chunk-6JY4HNUH.js} +2413 -2368
- package/dist/chunk-6JY4HNUH.js.map +1 -0
- package/dist/chunk-6LTLIYAQ.js +194 -0
- package/dist/chunk-6LTLIYAQ.js.map +1 -0
- package/dist/chunk-6UZPE35A.js +724 -0
- package/dist/chunk-6UZPE35A.js.map +1 -0
- package/dist/chunk-6W6PTJFT.js +181 -0
- package/dist/chunk-6W6PTJFT.js.map +1 -0
- package/dist/chunk-7MZN73J2.js +162 -0
- package/dist/chunk-7MZN73J2.js.map +1 -0
- package/dist/{chunk-SVAPX2XN.js → chunk-A24GPVLY.js} +9 -7
- package/dist/{chunk-SVAPX2XN.js.map → chunk-A24GPVLY.js.map} +1 -1
- package/dist/chunk-AD6YEH6U.js +3408 -0
- package/dist/chunk-AD6YEH6U.js.map +1 -0
- package/dist/chunk-ADTDYJO7.js +265 -0
- package/dist/chunk-ADTDYJO7.js.map +1 -0
- package/dist/{chunk-WRAKK6K6.js → chunk-AR34B6XR.js} +5 -3
- package/dist/{chunk-WRAKK6K6.js.map → chunk-AR34B6XR.js.map} +1 -1
- package/dist/chunk-BMOUYXLX.js +418 -0
- package/dist/chunk-BMOUYXLX.js.map +1 -0
- package/dist/chunk-C6PELIHS.js +60 -0
- package/dist/chunk-C6PELIHS.js.map +1 -0
- package/dist/{chunk-MQJ2ECQT.js → chunk-CUPEENUY.js} +3 -3
- package/dist/{chunk-RZ4YESBG.js → chunk-DOYGMNMK.js} +1 -1
- package/dist/chunk-DOYGMNMK.js.map +1 -0
- package/dist/chunk-FFV2SXFD.js +380 -0
- package/dist/chunk-FFV2SXFD.js.map +1 -0
- package/dist/{chunk-EVE7MIIY.js → chunk-GUKKW7JI.js} +15 -16
- package/dist/chunk-GUKKW7JI.js.map +1 -0
- package/dist/{chunk-66OJ3WB4.js → chunk-H3BOLSTS.js} +2 -2
- package/dist/chunk-HKOPRRDJ.js +1021 -0
- package/dist/chunk-HKOPRRDJ.js.map +1 -0
- package/dist/{chunk-BXZ6EA52.js → chunk-HTF2GIQC.js} +57 -3
- package/dist/chunk-HTF2GIQC.js.map +1 -0
- package/dist/{chunk-TYAGMJNV.js → chunk-JOA5A3G3.js} +5 -5
- package/dist/{chunk-OCVQGBJK.js → chunk-KABG5PG3.js} +6 -4
- package/dist/{chunk-OCVQGBJK.js.map → chunk-KABG5PG3.js.map} +1 -1
- package/dist/{chunk-VEHFVBLI.js → chunk-KT7NLIXP.js} +2 -2
- package/dist/chunk-LFDXEYYB.js +150 -0
- package/dist/chunk-LFDXEYYB.js.map +1 -0
- package/dist/{chunk-I6BDYQIG.js → chunk-M7YLQHFP.js} +6 -6
- package/dist/chunk-M7YLQHFP.js.map +1 -0
- package/dist/{chunk-AYUKPTSM.js → chunk-MFK34XSY.js} +96 -218
- package/dist/chunk-MFK34XSY.js.map +1 -0
- package/dist/chunk-MIC5IBQF.js +386 -0
- package/dist/chunk-MIC5IBQF.js.map +1 -0
- package/dist/{chunk-4UOE5TUZ.js → chunk-NMSHVO5O.js} +4 -4
- package/dist/{chunk-XKYRH4FM.js → chunk-NYVBXUGD.js} +13 -32
- package/dist/chunk-NYVBXUGD.js.map +1 -0
- package/dist/chunk-ODCFS5WD.js +463 -0
- package/dist/chunk-ODCFS5WD.js.map +1 -0
- package/dist/{chunk-ZLZKF2PM.js → chunk-PUNIMPMY.js} +32 -2
- package/dist/chunk-PUNIMPMY.js.map +1 -0
- package/dist/chunk-S4NJJS5C.js +37 -0
- package/dist/chunk-S4NJJS5C.js.map +1 -0
- package/dist/{chunk-NHMBTUMW.js → chunk-TAAZB5KN.js} +2 -2
- package/dist/{chunk-BRBWNV65.js → chunk-U2X2J3FI.js} +3 -3
- package/dist/chunk-U2X2J3FI.js.map +1 -0
- package/dist/{chunk-PLDDJCW6.js → chunk-UP2VWCW5.js} +1 -12
- package/dist/{chunk-4GLYY4NN.js → chunk-UWUIJTT4.js} +8 -2
- package/dist/chunk-UWUIJTT4.js.map +1 -0
- package/dist/{chunk-SPPMCAKG.js → chunk-VKMFUIVA.js} +2 -2
- package/dist/chunk-VKMFUIVA.js.map +1 -0
- package/dist/chunk-WZAH34TG.js +129 -0
- package/dist/chunk-WZAH34TG.js.map +1 -0
- package/dist/{chunk-H5RQOFO2.js → chunk-X6Q3K3L2.js} +6 -6
- package/dist/chunk-X6Q3K3L2.js.map +1 -0
- package/dist/chunk-XTX7EK43.js +134 -0
- package/dist/chunk-XTX7EK43.js.map +1 -0
- package/dist/chunk-ZIYTHUM5.js +457 -0
- package/dist/chunk-ZIYTHUM5.js.map +1 -0
- package/dist/chunker-K6WTR62A.js +12 -0
- package/dist/cli.js +1 -1
- package/dist/{client-ZQSFPMOB.js → client-FOIYPOZQ.js} +5 -6
- package/dist/{clipboard-manager-TEO2GEDN.js → clipboard-manager-4SBNESGZ.js} +2 -2
- package/dist/coding-agent-DESSU3AC.js +233 -0
- package/dist/coding-agent-DESSU3AC.js.map +1 -0
- package/dist/commands/setup.js +1 -1
- package/dist/commands/start.js +2 -2
- package/dist/commands/status.js +1 -1
- package/dist/commands/stop.js +1 -1
- package/dist/commands/utils.js +1 -1
- package/dist/cost-tracker-EMOIOYH7.js +11 -0
- package/dist/{cron-explain-HHQKPD3M.js → cron-explain-UOOOYWZZ.js} +2 -2
- package/dist/{crypto-4AP47IKC.js → crypto-2VG3RJR2.js} +2 -2
- package/dist/{databases-37X4CI2Y.js → databases-XDPMG5AV.js} +4 -4
- package/dist/db-LRIOKQBO.js +77 -0
- package/dist/discord-NKR3X4AV.js +80 -0
- package/dist/documents-EYIYLZK2.js +184 -0
- package/dist/documents-EYIYLZK2.js.map +1 -0
- package/dist/docx-parser-EXL4TN5E.js +16 -0
- package/dist/{email-K7LO2IPB.js → email-EAQNULVD.js} +33 -25
- package/dist/{email-K7LO2IPB.js.map → email-EAQNULVD.js.map} +1 -1
- package/dist/{enhanced-retrieval-DNLLEM4Z.js → enhanced-retrieval-OGHT6TS5.js} +11 -8
- package/dist/{enhanced-retrieval-DNLLEM4Z.js.map → enhanced-retrieval-OGHT6TS5.js.map} +1 -1
- package/dist/enrichment-pipeline-CMUVBDC7.js +14 -0
- package/dist/{entity-resolution-Y3IUWEAT.js → entity-resolution-4X4JU43O.js} +6 -5
- package/dist/env-CHOFICED.js +12 -0
- package/dist/error-tracker-SVQSDQDW.js +32 -0
- package/dist/finnhub-X7ZMQSXF.js +178 -0
- package/dist/finnhub-X7ZMQSXF.js.map +1 -0
- package/dist/fred-TMUF3J2V.js +203 -0
- package/dist/fred-TMUF3J2V.js.map +1 -0
- package/dist/github-KGNILDWJ.js +833 -0
- package/dist/github-KGNILDWJ.js.map +1 -0
- package/dist/{google-workspace-DKWUVNGC.js → google-workspace-TSZPZK5G.js} +2 -2
- package/dist/{hash-tool-ULQYD7B5.js → hash-tool-ENAB5LWH.js} +2 -2
- package/dist/{heartbeat-monitor-GCISLXI3.js → heartbeat-monitor-KRDYTDBF.js} +2 -2
- package/dist/hooks-N4MIFBVM.js +14 -0
- package/dist/{image-generation-OSU7FP6F.js → image-generation-MDE6AVQO.js} +2 -2
- package/dist/imessage-V2XNDDHT.js +43 -0
- package/dist/inbox-summarizer-DKKRYXDR.js +55 -0
- package/dist/{incident-response-C5J7Q6DT.js → incident-response-ZTIKUWEO.js} +8 -6
- package/dist/{incident-response-C5J7Q6DT.js.map → incident-response-ZTIKUWEO.js.map} +1 -1
- package/dist/{inventory-manager-352OHXWD.js → inventory-manager-C67BSZM6.js} +2 -2
- package/dist/{jira-GSGDBMIG.js → jira-PAGZWUBJ.js} +2 -2
- package/dist/{json-tool-QE2SYHEG.js → json-tool-4FK5RNER.js} +2 -2
- package/dist/{key-rotation-DPHU4ZTB.js → key-rotation-WCC5FOYS.js} +2 -2
- package/dist/knowledge-base-J7PJ7MZ3.js +46 -0
- package/dist/lib.d.ts +73 -1
- package/dist/lib.js +86 -76
- package/dist/lib.js.map +1 -1
- package/dist/{mailchimp-KKNF6QJ7.js → mailchimp-ZFYDC44J.js} +2 -2
- package/dist/{matrix-QVHG76I7.js → matrix-XHTR53VQ.js} +29 -21
- package/dist/{matrix-QVHG76I7.js.map → matrix-XHTR53VQ.js.map} +1 -1
- package/dist/{mcp-3JI6W7ZE.js → mcp-3C2TN67D.js} +3 -3
- package/dist/metrics-VJDWQWU7.js +25 -0
- package/dist/{microsoft365-UCBKJHNX.js → microsoft365-6G2IJMWC.js} +2 -2
- package/dist/multi-user-S56GUD6L.js +411 -0
- package/dist/multi-user-S56GUD6L.js.map +1 -0
- package/dist/{ocr-AC7NPX33.js → ocr-LGUIPKVZ.js} +6 -4
- package/dist/{ollama-BOAMSPLJ.js → ollama-J7CU45WT.js} +2 -2
- package/dist/osint-agent-RL5XPBRQ.js +189 -0
- package/dist/osint-agent-RL5XPBRQ.js.map +1 -0
- package/dist/{pages-MI523RB7.js → pages-XDE7JRCA.js} +5 -5
- package/dist/{pair-JDFTERIK.js → pair-YZJFQUU5.js} +2 -2
- package/dist/{pairing-IFQYCPNS.js → pairing-77N47RAT.js} +2 -2
- package/dist/{pdf-ALQVOEJR.js → pdf-67HGXCFJ.js} +3 -3
- package/dist/pdf-parser-YLMTTYHL.js +14 -0
- package/dist/{presentations-DSV5IHG5.js → presentations-HXTAMGHT.js} +3 -3
- package/dist/presentations-HXTAMGHT.js.map +1 -0
- package/dist/{prometheus-JNT2BD4L.js → prometheus-YETCZO4I.js} +2 -2
- package/dist/{providers-J4LYPHDR.js → providers-H6YIC3MG.js} +6 -4
- package/dist/{qr-code-WIX4PB4U.js → qr-code-6WZJHRKL.js} +2 -2
- package/dist/{quickbooks-XB4NII2S.js → quickbooks-N675W7IK.js} +2 -2
- package/dist/{regex-tool-W4ABRKGK.js → regex-tool-6Q63LQ7B.js} +2 -2
- package/dist/regex-tool-6Q63LQ7B.js.map +1 -0
- package/dist/research-agent-WCRSY3UZ.js +168 -0
- package/dist/research-agent-WCRSY3UZ.js.map +1 -0
- package/dist/risk-engine-YKCPT5D5.js +10 -0
- package/dist/risk-engine-YKCPT5D5.js.map +1 -0
- package/dist/scheduler-CA5UNHZV.js +73 -0
- package/dist/scheduler-CA5UNHZV.js.map +1 -0
- package/dist/schema-ALJ67YVG.js +72 -0
- package/dist/schema-ALJ67YVG.js.map +1 -0
- package/dist/{search-BCLBO5E3.js → search-GMLKBHSW.js} +4 -4
- package/dist/search-GMLKBHSW.js.map +1 -0
- package/dist/{sendgrid-RNXCAFKM.js → sendgrid-QGJIVPWV.js} +2 -2
- package/dist/{shopify-NCXYJB4R.js → shopify-ON2PAU27.js} +2 -2
- package/dist/signal-X7IQJGRQ.js +43 -0
- package/dist/signal-X7IQJGRQ.js.map +1 -0
- package/dist/slack-P2LFUJUQ.js +85 -0
- package/dist/slack-P2LFUJUQ.js.map +1 -0
- package/dist/{sms-M3JIOTCW.js → sms-4VME2HUL.js} +4 -4
- package/dist/sms-4VME2HUL.js.map +1 -0
- package/dist/{src-VYUE6LRA.js → src-S5KX4YEV.js} +179 -48
- package/dist/src-S5KX4YEV.js.map +1 -0
- package/dist/{stocks-XXWBPOCU.js → stocks-4M4HZWZS.js} +2 -2
- package/dist/stocks-4M4HZWZS.js.map +1 -0
- package/dist/text-extractor-OAUBAW5P.js +12 -0
- package/dist/text-extractor-OAUBAW5P.js.map +1 -0
- package/dist/{text-transform-6SGUA5Z4.js → text-transform-HCLCUDFZ.js} +2 -2
- package/dist/text-transform-HCLCUDFZ.js.map +1 -0
- package/dist/tools-FGPN522P.js +46 -0
- package/dist/tools-FGPN522P.js.map +1 -0
- package/dist/{tunnel-IWMXUML4.js → tunnel-XOUVVRAK.js} +4 -2
- package/dist/tunnel-XOUVVRAK.js.map +1 -0
- package/dist/{twilio-53GEW5JT.js → twilio-3L7DUNYQ.js} +2 -2
- package/dist/{unit-converter-ZYXMEZOE.js → unit-converter-LYPAHU64.js} +2 -2
- package/dist/unit-converter-LYPAHU64.js.map +1 -0
- package/dist/whatsapp-KRPQ4YUX.js +43 -0
- package/dist/whatsapp-KRPQ4YUX.js.map +1 -0
- package/dist/{word-document-7B6SJMAY.js → word-document-D6N2C47N.js} +4 -4
- package/dist/word-document-D6N2C47N.js.map +1 -0
- package/dist/workflow-store-ZYAYE5P6.js +373 -0
- package/dist/workflow-store-ZYAYE5P6.js.map +1 -0
- package/dist/writing-agent-VDGLNOGO.js +243 -0
- package/dist/writing-agent-VDGLNOGO.js.map +1 -0
- package/dist/{xero-QYO66D45.js → xero-UHAHVYSD.js} +2 -2
- package/dist/{zapier-webhook-TBZ5YF2A.js → zapier-webhook-NIELLTXR.js} +2 -2
- package/package.json +11 -1
- package/dist/archiver-AVNBYCKQ.js.map +0 -1
- package/dist/autonomy-ZXDBDQUJ.js.map +0 -1
- package/dist/bot-QRARP4UN.js +0 -36
- package/dist/brain-7XLLM3KC.js +0 -56
- package/dist/chunk-4GLYY4NN.js.map +0 -1
- package/dist/chunk-766ASQWE.js.map +0 -1
- package/dist/chunk-AYUKPTSM.js.map +0 -1
- package/dist/chunk-BRBWNV65.js.map +0 -1
- package/dist/chunk-BXZ6EA52.js.map +0 -1
- package/dist/chunk-EVE7MIIY.js.map +0 -1
- package/dist/chunk-H5RQOFO2.js.map +0 -1
- package/dist/chunk-I6BDYQIG.js.map +0 -1
- package/dist/chunk-IZJMVV7O.js +0 -347
- package/dist/chunk-IZJMVV7O.js.map +0 -1
- package/dist/chunk-O7IH7JTI.js +0 -1898
- package/dist/chunk-O7IH7JTI.js.map +0 -1
- package/dist/chunk-RZ4YESBG.js.map +0 -1
- package/dist/chunk-SPPMCAKG.js.map +0 -1
- package/dist/chunk-VRD5CYRL.js +0 -1568
- package/dist/chunk-VRD5CYRL.js.map +0 -1
- package/dist/chunk-XKYRH4FM.js.map +0 -1
- package/dist/chunk-ZLZKF2PM.js.map +0 -1
- package/dist/discord-B3HUPGQ6.js +0 -70
- package/dist/dist-UISMLMFN.js +0 -21847
- package/dist/dist-UISMLMFN.js.map +0 -1
- package/dist/enrichment-pipeline-MNHNW65K.js +0 -13
- package/dist/env-IWXUVTCB.js +0 -12
- package/dist/imessage-NGA2XF2V.js +0 -35
- package/dist/inbox-summarizer-NRI4S7IF.js +0 -47
- package/dist/presentations-DSV5IHG5.js.map +0 -1
- package/dist/scheduler-VK4WFERV.js +0 -63
- package/dist/signal-6CGDFYL2.js +0 -35
- package/dist/slack-IZQWIKOH.js +0 -75
- package/dist/src-VYUE6LRA.js.map +0 -1
- package/dist/tools-2RLEI2N6.js +0 -38
- package/dist/tunnel-IWMXUML4.js.map +0 -1
- package/dist/whatsapp-LFX6YKCM.js +0 -35
- package/dist/word-document-7B6SJMAY.js.map +0 -1
- /package/dist/{audit-logger-OBPR7CRO.js.map → agent-manager-7N7REQZQ.js.map} +0 -0
- /package/dist/{auth-UOX5K2BE.js.map → agent-types-2T4PXLFQ.js.map} +0 -0
- /package/dist/{backup-restore-PZ7CYYB7.js.map → audit-logger-AU3TMWKI.js.map} +0 -0
- /package/dist/{blocks-R3PODY47.js.map → auth-PH5IHISW.js.map} +0 -0
- /package/dist/{aws-s3-Q4LLZZPD.js.map → aws-s3-QZMURYXB.js.map} +0 -0
- /package/dist/{bot-QRARP4UN.js.map → backup-restore-72OQTZO3.js.map} +0 -0
- /package/dist/{brain-7XLLM3KC.js.map → blocks-YOWOESDD.js.map} +0 -0
- /package/dist/{chunk-PLDDJCW6.js.map → bot-MU2TJQ3Y.js.map} +0 -0
- /package/dist/{client-ZQSFPMOB.js.map → brain-SLA474EU.js.map} +0 -0
- /package/dist/{camera-monitor-M5CYKUU4.js.map → camera-monitor-LHTUWHEL.js.map} +0 -0
- /package/dist/{charts-V7ARZNKF.js.map → charts-FJ32GQK7.js.map} +0 -0
- /package/dist/{chunk-6PMVAAA7.js.map → chunk-2RGPWU77.js.map} +0 -0
- /package/dist/{chunk-TVEWKIK3.js.map → chunk-2WTKTG2C.js.map} +0 -0
- /package/dist/{chunk-MXAPLSJ5.js.map → chunk-45YXODSB.js.map} +0 -0
- /package/dist/{chunk-SJSUSJ47.js.map → chunk-4YJRBMMA.js.map} +0 -0
- /package/dist/{chunk-MQJ2ECQT.js.map → chunk-CUPEENUY.js.map} +0 -0
- /package/dist/{chunk-66OJ3WB4.js.map → chunk-H3BOLSTS.js.map} +0 -0
- /package/dist/{chunk-TYAGMJNV.js.map → chunk-JOA5A3G3.js.map} +0 -0
- /package/dist/{chunk-VEHFVBLI.js.map → chunk-KT7NLIXP.js.map} +0 -0
- /package/dist/{chunk-4UOE5TUZ.js.map → chunk-NMSHVO5O.js.map} +0 -0
- /package/dist/{chunk-NHMBTUMW.js.map → chunk-TAAZB5KN.js.map} +0 -0
- /package/dist/{clipboard-manager-TEO2GEDN.js.map → chunk-UP2VWCW5.js.map} +0 -0
- /package/dist/{cron-explain-HHQKPD3M.js.map → chunker-K6WTR62A.js.map} +0 -0
- /package/dist/{crypto-4AP47IKC.js.map → client-FOIYPOZQ.js.map} +0 -0
- /package/dist/{databases-37X4CI2Y.js.map → clipboard-manager-4SBNESGZ.js.map} +0 -0
- /package/dist/{discord-B3HUPGQ6.js.map → cost-tracker-EMOIOYH7.js.map} +0 -0
- /package/dist/{enrichment-pipeline-MNHNW65K.js.map → cron-explain-UOOOYWZZ.js.map} +0 -0
- /package/dist/{entity-resolution-Y3IUWEAT.js.map → crypto-2VG3RJR2.js.map} +0 -0
- /package/dist/{env-IWXUVTCB.js.map → databases-XDPMG5AV.js.map} +0 -0
- /package/dist/{hash-tool-ULQYD7B5.js.map → db-LRIOKQBO.js.map} +0 -0
- /package/dist/{heartbeat-monitor-GCISLXI3.js.map → discord-NKR3X4AV.js.map} +0 -0
- /package/dist/{imessage-NGA2XF2V.js.map → docx-parser-EXL4TN5E.js.map} +0 -0
- /package/dist/{inbox-summarizer-NRI4S7IF.js.map → enrichment-pipeline-CMUVBDC7.js.map} +0 -0
- /package/dist/{inventory-manager-352OHXWD.js.map → entity-resolution-4X4JU43O.js.map} +0 -0
- /package/dist/{json-tool-QE2SYHEG.js.map → env-CHOFICED.js.map} +0 -0
- /package/dist/{key-rotation-DPHU4ZTB.js.map → error-tracker-SVQSDQDW.js.map} +0 -0
- /package/dist/{google-workspace-DKWUVNGC.js.map → google-workspace-TSZPZK5G.js.map} +0 -0
- /package/dist/{mcp-3JI6W7ZE.js.map → hash-tool-ENAB5LWH.js.map} +0 -0
- /package/dist/{ocr-AC7NPX33.js.map → heartbeat-monitor-KRDYTDBF.js.map} +0 -0
- /package/dist/{ollama-BOAMSPLJ.js.map → hooks-N4MIFBVM.js.map} +0 -0
- /package/dist/{image-generation-OSU7FP6F.js.map → image-generation-MDE6AVQO.js.map} +0 -0
- /package/dist/{pages-MI523RB7.js.map → imessage-V2XNDDHT.js.map} +0 -0
- /package/dist/{pairing-IFQYCPNS.js.map → inbox-summarizer-DKKRYXDR.js.map} +0 -0
- /package/dist/{pdf-ALQVOEJR.js.map → inventory-manager-C67BSZM6.js.map} +0 -0
- /package/dist/{jira-GSGDBMIG.js.map → jira-PAGZWUBJ.js.map} +0 -0
- /package/dist/{prometheus-JNT2BD4L.js.map → json-tool-4FK5RNER.js.map} +0 -0
- /package/dist/{providers-J4LYPHDR.js.map → key-rotation-WCC5FOYS.js.map} +0 -0
- /package/dist/{qr-code-WIX4PB4U.js.map → knowledge-base-J7PJ7MZ3.js.map} +0 -0
- /package/dist/{mailchimp-KKNF6QJ7.js.map → mailchimp-ZFYDC44J.js.map} +0 -0
- /package/dist/{regex-tool-W4ABRKGK.js.map → mcp-3C2TN67D.js.map} +0 -0
- /package/dist/{scheduler-VK4WFERV.js.map → metrics-VJDWQWU7.js.map} +0 -0
- /package/dist/{microsoft365-UCBKJHNX.js.map → microsoft365-6G2IJMWC.js.map} +0 -0
- /package/dist/{search-BCLBO5E3.js.map → ocr-LGUIPKVZ.js.map} +0 -0
- /package/dist/{signal-6CGDFYL2.js.map → ollama-J7CU45WT.js.map} +0 -0
- /package/dist/{slack-IZQWIKOH.js.map → pages-XDE7JRCA.js.map} +0 -0
- /package/dist/{pair-JDFTERIK.js.map → pair-YZJFQUU5.js.map} +0 -0
- /package/dist/{sms-M3JIOTCW.js.map → pairing-77N47RAT.js.map} +0 -0
- /package/dist/{stocks-XXWBPOCU.js.map → pdf-67HGXCFJ.js.map} +0 -0
- /package/dist/{text-transform-6SGUA5Z4.js.map → pdf-parser-YLMTTYHL.js.map} +0 -0
- /package/dist/{tools-2RLEI2N6.js.map → prometheus-YETCZO4I.js.map} +0 -0
- /package/dist/{unit-converter-ZYXMEZOE.js.map → providers-H6YIC3MG.js.map} +0 -0
- /package/dist/{whatsapp-LFX6YKCM.js.map → qr-code-6WZJHRKL.js.map} +0 -0
- /package/dist/{quickbooks-XB4NII2S.js.map → quickbooks-N675W7IK.js.map} +0 -0
- /package/dist/{sendgrid-RNXCAFKM.js.map → sendgrid-QGJIVPWV.js.map} +0 -0
- /package/dist/{shopify-NCXYJB4R.js.map → shopify-ON2PAU27.js.map} +0 -0
- /package/dist/{twilio-53GEW5JT.js.map → twilio-3L7DUNYQ.js.map} +0 -0
- /package/dist/{xero-QYO66D45.js.map → xero-UHAHVYSD.js.map} +0 -0
- /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":["/**\n * Alerting System - Anomaly detection, cost alerts, error spikes, health monitoring\n *\n * Provides comprehensive alerting and monitoring for the OpenSentinel system,\n * including automatic anomaly detection, cost tracking, and health checks.\n */\n\nimport { db } from \"../../db\";\nimport { metrics, errorLogs, usageQuotas } from \"../../db/schema\";\nimport { eq, and, gte, lte, desc, sql } from \"drizzle-orm\";\nimport { EventEmitter } from \"events\";\n\n// Types\nexport interface Alert {\n id: string;\n type: AlertType;\n severity: AlertSeverity;\n title: string;\n message: string;\n source: string;\n timestamp: Date;\n metadata?: Record<string, unknown>;\n acknowledged: boolean;\n acknowledgedAt?: Date;\n acknowledgedBy?: string;\n resolved: boolean;\n resolvedAt?: Date;\n resolvedBy?: string;\n autoResolveTimeout?: number;\n}\n\nexport type AlertType =\n | \"anomaly\"\n | \"cost_threshold\"\n | \"error_spike\"\n | \"health_check\"\n | \"quota_warning\"\n | \"performance\"\n | \"security\"\n | \"system\";\n\nexport type AlertSeverity = \"info\" | \"warning\" | \"error\" | \"critical\";\n\nexport interface AlertRule {\n id: string;\n name: string;\n description: string;\n enabled: boolean;\n type: AlertType;\n condition: AlertCondition;\n severity: AlertSeverity;\n cooldownMinutes: number;\n channels: AlertChannel[];\n lastTriggered?: Date;\n triggerCount: number;\n}\n\nexport interface AlertCondition {\n metric?: string;\n operator: \"gt\" | \"lt\" | \"eq\" | \"gte\" | \"lte\" | \"anomaly\";\n threshold?: number;\n windowMinutes?: number;\n aggregation?: \"sum\" | \"avg\" | \"max\" | \"min\" | \"count\";\n customCheck?: () => Promise<boolean>;\n}\n\nexport type AlertChannel = \"console\" | \"telegram\" | \"webhook\" | \"email\" | \"database\";\n\nexport interface AlertChannelConfig {\n console: { enabled: boolean };\n telegram: { enabled: boolean; chatId?: string };\n webhook: { enabled: boolean; url?: string; headers?: Record<string, string> };\n email: { enabled: boolean; recipients?: string[] };\n database: { enabled: boolean };\n}\n\nexport interface HealthCheckResult {\n name: string;\n status: \"healthy\" | \"degraded\" | \"unhealthy\";\n message: string;\n latencyMs?: number;\n lastCheck: Date;\n metadata?: Record<string, unknown>;\n}\n\nexport interface CostMetrics {\n totalTokens: number;\n inputTokens: number;\n outputTokens: number;\n estimatedCost: number;\n period: \"hourly\" | \"daily\" | \"weekly\" | \"monthly\";\n startDate: Date;\n endDate: Date;\n breakdown: CostBreakdown[];\n}\n\nexport interface CostBreakdown {\n category: string;\n tokens: number;\n cost: number;\n percentage: number;\n}\n\nexport interface AnomalyDetection {\n metric: string;\n currentValue: number;\n expectedValue: number;\n deviation: number;\n deviationPercent: number;\n isAnomaly: boolean;\n confidence: number;\n timestamp: Date;\n}\n\n// Constants\n// Dynamic pricing — uses cost-tracker's MODEL_TIERS for accurate multi-model pricing.\n// These defaults are used as fallback (Sonnet pricing).\nimport { costTracker } from \"./cost-tracker\";\nconst TOKEN_COST_PER_MILLION_INPUT = 3.0; // Fallback: Claude Sonnet input\nconst TOKEN_COST_PER_MILLION_OUTPUT = 15.0; // Fallback: Claude Sonnet output\n\n// In-memory stores\nconst activeAlerts = new Map<string, Alert>();\nconst alertRules = new Map<string, AlertRule>();\nconst healthCheckResults = new Map<string, HealthCheckResult>();\nconst alertHistory: Alert[] = [];\n\n// Event emitter for alert notifications\nexport const alertEmitter = new EventEmitter();\n\n// Default channel configuration\nlet channelConfig: AlertChannelConfig = {\n console: { enabled: true },\n telegram: { enabled: false },\n webhook: { enabled: false },\n email: { enabled: false },\n database: { enabled: true },\n};\n\n/**\n * Load alert history from database on startup\n */\nlet historyLoaded = false;\nexport async function loadAlertHistoryFromDb(): Promise<void> {\n if (historyLoaded) return;\n try {\n const rows = await db\n .select()\n .from(errorLogs)\n .where(eq(errorLogs.source, \"alerting\"))\n .orderBy(desc(errorLogs.createdAt))\n .limit(500);\n\n for (const row of rows.reverse()) {\n // Parse the alert type and severity from stored fields\n const alertType = (row.errorType?.replace(\"Alert:\", \"\") || \"system\") as AlertType;\n const severity = (row.errorCode || \"info\") as AlertSeverity;\n const [title, ...msgParts] = (row.message || \"\").split(\": \");\n const alert: Alert = {\n id: String(row.id),\n type: alertType,\n severity,\n title: title || \"Alert\",\n message: msgParts.join(\": \") || row.message || \"\",\n source: \"alert_rule\",\n timestamp: new Date(row.createdAt),\n metadata: (row.context || {}) as Record<string, unknown>,\n acknowledged: false,\n resolved: true, // historical alerts are resolved\n };\n alertHistory.push(alert);\n }\n historyLoaded = true;\n if (alertHistory.length > 0) {\n console.log(`[Alerting] Loaded ${alertHistory.length} historical alerts from DB`);\n }\n } catch {\n // DB may not be available yet\n }\n}\n\n/**\n * Initialize default alert rules\n */\nexport function initializeDefaultRules(): void {\n // Error spike detection\n addAlertRule({\n id: \"error-spike\",\n name: \"Error Spike Detection\",\n description: \"Triggers when error rate exceeds normal levels\",\n enabled: true,\n type: \"error_spike\",\n condition: {\n metric: \"error_count\",\n operator: \"gt\",\n threshold: 10,\n windowMinutes: 5,\n aggregation: \"count\",\n },\n severity: \"error\",\n cooldownMinutes: 15,\n channels: [\"console\", \"database\"],\n triggerCount: 0,\n });\n\n // High latency detection\n addAlertRule({\n id: \"high-latency\",\n name: \"High Response Latency\",\n description: \"Triggers when average response time exceeds threshold\",\n enabled: true,\n type: \"performance\",\n condition: {\n metric: \"response_latency\",\n operator: \"gt\",\n threshold: 10000, // 10 seconds\n windowMinutes: 5,\n aggregation: \"avg\",\n },\n severity: \"warning\",\n cooldownMinutes: 10,\n channels: [\"console\", \"database\"],\n triggerCount: 0,\n });\n\n // Cost threshold\n addAlertRule({\n id: \"daily-cost-threshold\",\n name: \"Daily Cost Threshold\",\n description: \"Triggers when daily API costs exceed threshold\",\n enabled: true,\n type: \"cost_threshold\",\n condition: {\n metric: \"cost\",\n operator: \"gt\",\n threshold: 50, // $50\n windowMinutes: 1440, // 24 hours\n },\n severity: \"warning\",\n cooldownMinutes: 60,\n channels: [\"console\", \"database\"],\n triggerCount: 0,\n });\n\n // Memory usage anomaly\n addAlertRule({\n id: \"memory-anomaly\",\n name: \"Memory Usage Anomaly\",\n description: \"Triggers when memory usage is abnormally high\",\n enabled: true,\n type: \"anomaly\",\n condition: {\n metric: \"memory_usage\",\n operator: \"anomaly\",\n windowMinutes: 60,\n },\n severity: \"warning\",\n cooldownMinutes: 30,\n channels: [\"console\", \"database\"],\n triggerCount: 0,\n });\n\n // Quota warning\n addAlertRule({\n id: \"quota-80-percent\",\n name: \"80% Quota Usage\",\n description: \"Triggers when usage reaches 80% of quota\",\n enabled: true,\n type: \"quota_warning\",\n condition: {\n metric: \"quota_usage\",\n operator: \"gte\",\n threshold: 80,\n },\n severity: \"warning\",\n cooldownMinutes: 60,\n channels: [\"console\", \"database\"],\n triggerCount: 0,\n });\n\n // Tool failure rate\n addAlertRule({\n id: \"tool-failure-rate\",\n name: \"High Tool Failure Rate\",\n description: \"Triggers when tool failure rate is high\",\n enabled: true,\n type: \"performance\",\n condition: {\n metric: \"tool_failure\",\n operator: \"gt\",\n threshold: 5,\n windowMinutes: 10,\n aggregation: \"count\",\n },\n severity: \"warning\",\n cooldownMinutes: 15,\n channels: [\"console\", \"database\"],\n triggerCount: 0,\n });\n}\n\n/**\n * Add or update an alert rule\n */\nexport function addAlertRule(rule: AlertRule): void {\n alertRules.set(rule.id, rule);\n}\n\n/**\n * Remove an alert rule\n */\nexport function removeAlertRule(ruleId: string): boolean {\n return alertRules.delete(ruleId);\n}\n\n/**\n * Get all alert rules\n */\nexport function getAlertRules(): AlertRule[] {\n return Array.from(alertRules.values());\n}\n\n/**\n * Enable/disable an alert rule\n */\nexport function setRuleEnabled(ruleId: string, enabled: boolean): boolean {\n const rule = alertRules.get(ruleId);\n if (rule) {\n rule.enabled = enabled;\n return true;\n }\n return false;\n}\n\n/**\n * Configure alert channels\n */\nexport function configureChannels(config: Partial<AlertChannelConfig>): void {\n channelConfig = { ...channelConfig, ...config };\n}\n\n/**\n * Create and dispatch an alert\n */\nexport async function createAlert(\n type: AlertType,\n severity: AlertSeverity,\n title: string,\n message: string,\n source: string,\n metadata?: Record<string, unknown>\n): Promise<Alert> {\n const alert: Alert = {\n id: crypto.randomUUID(),\n type,\n severity,\n title,\n message,\n source,\n timestamp: new Date(),\n metadata,\n acknowledged: false,\n resolved: false,\n };\n\n activeAlerts.set(alert.id, alert);\n alertHistory.push(alert);\n\n // Dispatch to configured channels\n await dispatchAlert(alert);\n\n // Emit event\n alertEmitter.emit(\"alert\", alert);\n\n return alert;\n}\n\n/**\n * Dispatch alert to configured channels\n */\nasync function dispatchAlert(alert: Alert): Promise<void> {\n const promises: Promise<void>[] = [];\n\n if (channelConfig.console.enabled) {\n promises.push(dispatchToConsole(alert));\n }\n\n if (channelConfig.database.enabled) {\n promises.push(dispatchToDatabase(alert));\n }\n\n if (channelConfig.webhook.enabled && channelConfig.webhook.url) {\n promises.push(dispatchToWebhook(alert, channelConfig.webhook.url, channelConfig.webhook.headers));\n }\n\n // Telegram and email would need additional implementation\n // if (channelConfig.telegram.enabled) { ... }\n // if (channelConfig.email.enabled) { ... }\n\n await Promise.allSettled(promises);\n}\n\n/**\n * Dispatch alert to console\n */\nasync function dispatchToConsole(alert: Alert): Promise<void> {\n const severityColors: Record<AlertSeverity, string> = {\n info: \"\\x1b[36m\", // Cyan\n warning: \"\\x1b[33m\", // Yellow\n error: \"\\x1b[31m\", // Red\n critical: \"\\x1b[35m\", // Magenta\n };\n const reset = \"\\x1b[0m\";\n const color = severityColors[alert.severity];\n\n console.log(`${color}[ALERT ${alert.severity.toUpperCase()}]${reset} ${alert.title}`);\n console.log(` Source: ${alert.source}`);\n console.log(` Message: ${alert.message}`);\n if (alert.metadata) {\n console.log(` Metadata: ${JSON.stringify(alert.metadata)}`);\n }\n}\n\n/**\n * Dispatch alert to database (via error logs for now)\n */\nasync function dispatchToDatabase(alert: Alert): Promise<void> {\n await db.insert(errorLogs).values({\n source: \"alerting\",\n errorType: `Alert:${alert.type}`,\n errorCode: alert.severity,\n message: `${alert.title}: ${alert.message}`,\n context: alert.metadata,\n });\n}\n\n/**\n * Dispatch alert to webhook\n */\nasync function dispatchToWebhook(\n alert: Alert,\n url: string,\n headers?: Record<string, string>\n): Promise<void> {\n try {\n await fetch(url, {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n ...headers,\n },\n body: JSON.stringify(alert),\n });\n } catch (error) {\n console.error(\"[Alerting] Failed to dispatch to webhook:\", error);\n }\n}\n\n/**\n * Acknowledge an alert\n */\nexport function acknowledgeAlert(alertId: string, acknowledgedBy?: string): boolean {\n const alert = activeAlerts.get(alertId);\n if (alert) {\n alert.acknowledged = true;\n alert.acknowledgedAt = new Date();\n alert.acknowledgedBy = acknowledgedBy;\n alertEmitter.emit(\"alert:acknowledged\", alert);\n return true;\n }\n return false;\n}\n\n/**\n * Resolve an alert\n */\nexport function resolveAlert(alertId: string, resolvedBy?: string): boolean {\n const alert = activeAlerts.get(alertId);\n if (alert) {\n alert.resolved = true;\n alert.resolvedAt = new Date();\n alert.resolvedBy = resolvedBy;\n activeAlerts.delete(alertId);\n alertEmitter.emit(\"alert:resolved\", alert);\n return true;\n }\n return false;\n}\n\n/**\n * Get active alerts\n */\nexport function getActiveAlerts(type?: AlertType, severity?: AlertSeverity): Alert[] {\n let alerts = Array.from(activeAlerts.values());\n\n if (type) {\n alerts = alerts.filter(a => a.type === type);\n }\n\n if (severity) {\n alerts = alerts.filter(a => a.severity === severity);\n }\n\n return alerts.sort((a, b) => b.timestamp.getTime() - a.timestamp.getTime());\n}\n\n/**\n * Get alert history\n */\nexport function getAlertHistory(limit: number = 100): Alert[] {\n return alertHistory.slice(-limit).reverse();\n}\n\n/**\n * Clear alert history (in-memory + DB)\n */\nexport function clearAlertHistory(): void {\n alertHistory.length = 0;\n activeAlerts.clear();\n // Also clear from DB (fire-and-forget)\n db.delete(errorLogs)\n .where(eq(errorLogs.source, \"alerting\"))\n .catch(() => {});\n}\n\n/**\n * Run all enabled alert rules\n */\nexport async function evaluateAlertRules(): Promise<Alert[]> {\n const triggeredAlerts: Alert[] = [];\n\n for (const rule of alertRules.values()) {\n if (!rule.enabled) continue;\n\n // Check cooldown\n if (rule.lastTriggered) {\n const cooldownMs = rule.cooldownMinutes * 60 * 1000;\n if (Date.now() - rule.lastTriggered.getTime() < cooldownMs) {\n continue;\n }\n }\n\n try {\n const shouldTrigger = await evaluateCondition(rule.condition);\n\n if (shouldTrigger) {\n rule.lastTriggered = new Date();\n rule.triggerCount++;\n\n const alert = await createAlert(\n rule.type,\n rule.severity,\n rule.name,\n rule.description,\n \"alert_rule\",\n { ruleId: rule.id, triggerCount: rule.triggerCount }\n );\n\n triggeredAlerts.push(alert);\n }\n } catch (error) {\n console.error(`[Alerting] Error evaluating rule ${rule.id}:`, error);\n }\n }\n\n return triggeredAlerts;\n}\n\n/**\n * Evaluate an alert condition\n */\nasync function evaluateCondition(condition: AlertCondition): Promise<boolean> {\n // Custom check function\n if (condition.customCheck) {\n return condition.customCheck();\n }\n\n // Metric-based check\n if (condition.metric && condition.operator !== \"anomaly\") {\n const windowMs = (condition.windowMinutes || 5) * 60 * 1000;\n const startDate = new Date(Date.now() - windowMs);\n\n const results = await db\n .select()\n .from(metrics)\n .where(\n and(\n eq(metrics.name, condition.metric),\n gte(metrics.timestamp, startDate)\n )\n );\n\n if (results.length === 0) return false;\n\n const values = results.map(r => r.value);\n let aggregatedValue: number;\n\n switch (condition.aggregation || \"avg\") {\n case \"sum\":\n aggregatedValue = values.reduce((a, b) => a + b, 0);\n break;\n case \"max\":\n aggregatedValue = Math.max(...values);\n break;\n case \"min\":\n aggregatedValue = Math.min(...values);\n break;\n case \"count\":\n aggregatedValue = values.length;\n break;\n case \"avg\":\n default:\n aggregatedValue = values.reduce((a, b) => a + b, 0) / values.length;\n }\n\n const threshold = condition.threshold || 0;\n\n switch (condition.operator) {\n case \"gt\":\n return aggregatedValue > threshold;\n case \"lt\":\n return aggregatedValue < threshold;\n case \"eq\":\n return aggregatedValue === threshold;\n case \"gte\":\n return aggregatedValue >= threshold;\n case \"lte\":\n return aggregatedValue <= threshold;\n default:\n return false;\n }\n }\n\n // Anomaly detection\n if (condition.operator === \"anomaly\" && condition.metric) {\n const anomaly = await detectAnomaly(condition.metric, condition.windowMinutes || 60);\n return anomaly.isAnomaly;\n }\n\n return false;\n}\n\n/**\n * Detect anomalies in a metric\n */\nexport async function detectAnomaly(\n metricName: string,\n windowMinutes: number = 60\n): Promise<AnomalyDetection> {\n const windowMs = windowMinutes * 60 * 1000;\n const now = Date.now();\n\n // Get historical data (past week for baseline)\n const baselineStart = new Date(now - 7 * 24 * 60 * 60 * 1000);\n const baselineEnd = new Date(now - windowMs);\n\n const baselineResults = await db\n .select()\n .from(metrics)\n .where(\n and(\n eq(metrics.name, metricName),\n gte(metrics.timestamp, baselineStart),\n lte(metrics.timestamp, baselineEnd)\n )\n );\n\n // Get current window data\n const currentStart = new Date(now - windowMs);\n const currentResults = await db\n .select()\n .from(metrics)\n .where(\n and(\n eq(metrics.name, metricName),\n gte(metrics.timestamp, currentStart)\n )\n );\n\n if (baselineResults.length < 10 || currentResults.length === 0) {\n return {\n metric: metricName,\n currentValue: currentResults.length > 0\n ? currentResults.reduce((a, b) => a + b.value, 0) / currentResults.length\n : 0,\n expectedValue: 0,\n deviation: 0,\n deviationPercent: 0,\n isAnomaly: false,\n confidence: 0,\n timestamp: new Date(),\n };\n }\n\n // Calculate baseline statistics\n const baselineValues = baselineResults.map(r => r.value);\n const baselineMean = baselineValues.reduce((a, b) => a + b, 0) / baselineValues.length;\n const baselineStdDev = Math.sqrt(\n baselineValues.reduce((sum, val) => sum + Math.pow(val - baselineMean, 2), 0) / baselineValues.length\n );\n\n // Calculate current value\n const currentValue = currentResults.reduce((a, b) => a + b.value, 0) / currentResults.length;\n\n // Calculate z-score\n const zScore = baselineStdDev > 0 ? (currentValue - baselineMean) / baselineStdDev : 0;\n const deviation = currentValue - baselineMean;\n const deviationPercent = baselineMean !== 0 ? (deviation / baselineMean) * 100 : 0;\n\n // Consider anomaly if z-score > 2 (95% confidence)\n const isAnomaly = Math.abs(zScore) > 2;\n\n // Calculate confidence based on data quality\n const confidence = Math.min(\n baselineResults.length / 100, // More data = higher confidence\n 1 - (1 / (1 + Math.abs(zScore))) // Higher z-score = higher confidence\n );\n\n return {\n metric: metricName,\n currentValue,\n expectedValue: baselineMean,\n deviation,\n deviationPercent,\n isAnomaly,\n confidence,\n timestamp: new Date(),\n };\n}\n\n/**\n * Calculate cost metrics\n */\nexport async function calculateCostMetrics(\n period: CostMetrics[\"period\"],\n startDate?: Date\n): Promise<CostMetrics> {\n const now = new Date();\n let periodStart: Date;\n\n switch (period) {\n case \"hourly\":\n periodStart = startDate || new Date(now.getTime() - 60 * 60 * 1000);\n break;\n case \"daily\":\n periodStart = startDate || new Date(now.getTime() - 24 * 60 * 60 * 1000);\n break;\n case \"weekly\":\n periodStart = startDate || new Date(now.getTime() - 7 * 24 * 60 * 60 * 1000);\n break;\n case \"monthly\":\n periodStart = startDate || new Date(now.getTime() - 30 * 24 * 60 * 60 * 1000);\n break;\n }\n\n // Get input tokens\n const inputTokens = await db\n .select()\n .from(metrics)\n .where(\n and(\n eq(metrics.name, \"token_usage_input\"),\n gte(metrics.timestamp, periodStart)\n )\n );\n\n // Get output tokens\n const outputTokens = await db\n .select()\n .from(metrics)\n .where(\n and(\n eq(metrics.name, \"token_usage_output\"),\n gte(metrics.timestamp, periodStart)\n )\n );\n\n const totalInput = inputTokens.reduce((sum, m) => sum + m.value, 0);\n const totalOutput = outputTokens.reduce((sum, m) => sum + m.value, 0);\n\n const inputCost = (totalInput / 1_000_000) * TOKEN_COST_PER_MILLION_INPUT;\n const outputCost = (totalOutput / 1_000_000) * TOKEN_COST_PER_MILLION_OUTPUT;\n const totalCost = inputCost + outputCost;\n\n // Group by tags for breakdown\n const breakdown: CostBreakdown[] = [];\n\n // Group input tokens by source/tool if available\n const inputByTag = new Map<string, number>();\n for (const m of inputTokens) {\n const category = (m.tags as Record<string, string>)?.source || \"general\";\n inputByTag.set(category, (inputByTag.get(category) || 0) + m.value);\n }\n\n for (const [category, tokens] of inputByTag) {\n const cost = (tokens / 1_000_000) * TOKEN_COST_PER_MILLION_INPUT;\n breakdown.push({\n category: `input:${category}`,\n tokens,\n cost,\n percentage: totalCost > 0 ? (cost / totalCost) * 100 : 0,\n });\n }\n\n return {\n totalTokens: totalInput + totalOutput,\n inputTokens: totalInput,\n outputTokens: totalOutput,\n estimatedCost: totalCost,\n period,\n startDate: periodStart,\n endDate: now,\n breakdown,\n };\n}\n\n/**\n * Register a health check\n */\nexport function registerHealthCheck(\n name: string,\n check: () => Promise<{ status: \"healthy\" | \"degraded\" | \"unhealthy\"; message: string; metadata?: Record<string, unknown> }>\n): void {\n // Store the check function for periodic execution\n healthChecks.set(name, check);\n}\n\nconst healthChecks = new Map<string, () => Promise<{ status: \"healthy\" | \"degraded\" | \"unhealthy\"; message: string; metadata?: Record<string, unknown> }>>();\n\n/**\n * Run all health checks\n */\nexport async function runHealthChecks(): Promise<HealthCheckResult[]> {\n const results: HealthCheckResult[] = [];\n\n for (const [name, check] of healthChecks) {\n const startTime = Date.now();\n try {\n const result = await check();\n const checkResult: HealthCheckResult = {\n name,\n status: result.status,\n message: result.message,\n latencyMs: Date.now() - startTime,\n lastCheck: new Date(),\n metadata: result.metadata,\n };\n results.push(checkResult);\n healthCheckResults.set(name, checkResult);\n\n // Create alert if unhealthy\n if (result.status === \"unhealthy\") {\n await createAlert(\n \"health_check\",\n \"error\",\n `Health Check Failed: ${name}`,\n result.message,\n \"health_monitor\",\n result.metadata\n );\n } else if (result.status === \"degraded\") {\n await createAlert(\n \"health_check\",\n \"warning\",\n `Health Check Degraded: ${name}`,\n result.message,\n \"health_monitor\",\n result.metadata\n );\n }\n } catch (error) {\n const checkResult: HealthCheckResult = {\n name,\n status: \"unhealthy\",\n message: error instanceof Error ? error.message : \"Unknown error\",\n latencyMs: Date.now() - startTime,\n lastCheck: new Date(),\n };\n results.push(checkResult);\n healthCheckResults.set(name, checkResult);\n\n await createAlert(\n \"health_check\",\n \"error\",\n `Health Check Error: ${name}`,\n checkResult.message,\n \"health_monitor\"\n );\n }\n }\n\n return results;\n}\n\n/**\n * Get health check results\n */\nexport function getHealthCheckResults(): HealthCheckResult[] {\n return Array.from(healthCheckResults.values());\n}\n\n/**\n * Initialize default health checks\n */\nexport function initializeDefaultHealthChecks(): void {\n // Database health check\n registerHealthCheck(\"database\", async () => {\n try {\n await db.select().from(metrics).limit(1);\n return { status: \"healthy\", message: \"Database connection is healthy\" };\n } catch (error) {\n return {\n status: \"unhealthy\",\n message: `Database connection failed: ${error instanceof Error ? error.message : \"Unknown error\"}`,\n };\n }\n });\n\n // Memory health check\n registerHealthCheck(\"memory\", async () => {\n const memUsage = process.memoryUsage();\n const heapUsedPercent = (memUsage.heapUsed / memUsage.heapTotal) * 100;\n\n if (heapUsedPercent > 90) {\n return {\n status: \"unhealthy\",\n message: `Heap usage critical: ${heapUsedPercent.toFixed(1)}%`,\n metadata: { heapUsed: memUsage.heapUsed, heapTotal: memUsage.heapTotal },\n };\n } else if (heapUsedPercent > 75) {\n return {\n status: \"degraded\",\n message: `Heap usage high: ${heapUsedPercent.toFixed(1)}%`,\n metadata: { heapUsed: memUsage.heapUsed, heapTotal: memUsage.heapTotal },\n };\n }\n\n return {\n status: \"healthy\",\n message: `Heap usage: ${heapUsedPercent.toFixed(1)}%`,\n metadata: { heapUsed: memUsage.heapUsed, heapTotal: memUsage.heapTotal },\n };\n });\n\n // Error rate health check\n registerHealthCheck(\"error_rate\", async () => {\n const oneHourAgo = new Date(Date.now() - 60 * 60 * 1000);\n const errors = await db\n .select()\n .from(errorLogs)\n .where(gte(errorLogs.createdAt, oneHourAgo));\n\n const errorCount = errors.length;\n\n if (errorCount > 100) {\n return {\n status: \"unhealthy\",\n message: `High error rate: ${errorCount} errors in the last hour`,\n metadata: { errorCount },\n };\n } else if (errorCount > 50) {\n return {\n status: \"degraded\",\n message: `Elevated error rate: ${errorCount} errors in the last hour`,\n metadata: { errorCount },\n };\n }\n\n return {\n status: \"healthy\",\n message: `Error rate normal: ${errorCount} errors in the last hour`,\n metadata: { errorCount },\n };\n });\n}\n\n/**\n * Start the alerting system with periodic checks\n */\nexport function startAlertingSystem(intervalMs: number = 60000): void {\n // Initialize defaults\n initializeDefaultRules();\n initializeDefaultHealthChecks();\n\n // Run periodic checks\n setInterval(async () => {\n try {\n await evaluateAlertRules();\n await runHealthChecks();\n } catch (error) {\n console.error(\"[Alerting] Error in periodic check:\", error);\n }\n }, intervalMs);\n\n console.log(`[Alerting] System started with ${intervalMs}ms check interval`);\n}\n\n/**\n * Get alerting system status\n */\nexport function getAlertingStatus(): {\n activeAlerts: number;\n totalRules: number;\n enabledRules: number;\n healthChecks: number;\n healthyChecks: number;\n lastEvaluation?: Date;\n} {\n const healthResults = getHealthCheckResults();\n return {\n activeAlerts: activeAlerts.size,\n totalRules: alertRules.size,\n enabledRules: Array.from(alertRules.values()).filter(r => r.enabled).length,\n healthChecks: healthChecks.size,\n healthyChecks: healthResults.filter(r => r.status === \"healthy\").length,\n };\n}\n\n/**\n * Format alert for display\n */\nexport function formatAlert(alert: Alert): string {\n const lines: string[] = [];\n\n lines.push(`=== Alert: ${alert.title} ===`);\n lines.push(`ID: ${alert.id}`);\n lines.push(`Type: ${alert.type}`);\n lines.push(`Severity: ${alert.severity.toUpperCase()}`);\n lines.push(`Source: ${alert.source}`);\n lines.push(`Time: ${alert.timestamp.toISOString()}`);\n lines.push(\"\");\n lines.push(`Message: ${alert.message}`);\n\n if (alert.metadata) {\n lines.push(\"\");\n lines.push(\"Metadata:\");\n for (const [key, value] of Object.entries(alert.metadata)) {\n lines.push(` ${key}: ${JSON.stringify(value)}`);\n }\n }\n\n lines.push(\"\");\n lines.push(`Status: ${alert.resolved ? \"Resolved\" : alert.acknowledged ? \"Acknowledged\" : \"Active\"}`);\n\n return lines.join(\"\\n\");\n}\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":[]}
|
|
@@ -4,7 +4,7 @@ import {
|
|
|
4
4
|
__export,
|
|
5
5
|
__require,
|
|
6
6
|
__toCommonJS
|
|
7
|
-
} from "./chunk-
|
|
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({
|
|
@@ -15,9 +15,9 @@ var require_path = __commonJS({
|
|
|
15
15
|
}
|
|
16
16
|
});
|
|
17
17
|
|
|
18
|
-
// node_modules/balanced-match/index.js
|
|
18
|
+
// node_modules/readdir-glob/node_modules/balanced-match/index.js
|
|
19
19
|
var require_balanced_match = __commonJS({
|
|
20
|
-
"node_modules/balanced-match/index.js"(exports, module) {
|
|
20
|
+
"node_modules/readdir-glob/node_modules/balanced-match/index.js"(exports, module) {
|
|
21
21
|
"use strict";
|
|
22
22
|
module.exports = balanced;
|
|
23
23
|
function balanced(a, b, str) {
|
|
@@ -73,9 +73,9 @@ var require_balanced_match = __commonJS({
|
|
|
73
73
|
}
|
|
74
74
|
});
|
|
75
75
|
|
|
76
|
-
// node_modules/brace-expansion/index.js
|
|
76
|
+
// node_modules/readdir-glob/node_modules/brace-expansion/index.js
|
|
77
77
|
var require_brace_expansion = __commonJS({
|
|
78
|
-
"node_modules/brace-expansion/index.js"(exports, module) {
|
|
78
|
+
"node_modules/readdir-glob/node_modules/brace-expansion/index.js"(exports, module) {
|
|
79
79
|
"use strict";
|
|
80
80
|
var balanced = require_balanced_match();
|
|
81
81
|
module.exports = expandTop;
|
|
@@ -3686,9 +3686,9 @@ var require_process_nextick_args = __commonJS({
|
|
|
3686
3686
|
}
|
|
3687
3687
|
});
|
|
3688
3688
|
|
|
3689
|
-
// node_modules/isarray/index.js
|
|
3689
|
+
// node_modules/lazystream/node_modules/isarray/index.js
|
|
3690
3690
|
var require_isarray = __commonJS({
|
|
3691
|
-
"node_modules/isarray/index.js"(exports, module) {
|
|
3691
|
+
"node_modules/lazystream/node_modules/isarray/index.js"(exports, module) {
|
|
3692
3692
|
"use strict";
|
|
3693
3693
|
var toString = {}.toString;
|
|
3694
3694
|
module.exports = Array.isArray || function(arr) {
|
|
@@ -3705,9 +3705,9 @@ var require_stream = __commonJS({
|
|
|
3705
3705
|
}
|
|
3706
3706
|
});
|
|
3707
3707
|
|
|
3708
|
-
// node_modules/safe-buffer/index.js
|
|
3708
|
+
// node_modules/lazystream/node_modules/safe-buffer/index.js
|
|
3709
3709
|
var require_safe_buffer = __commonJS({
|
|
3710
|
-
"node_modules/safe-buffer/index.js"(exports, module) {
|
|
3710
|
+
"node_modules/lazystream/node_modules/safe-buffer/index.js"(exports, module) {
|
|
3711
3711
|
"use strict";
|
|
3712
3712
|
var buffer = __require("buffer");
|
|
3713
3713
|
var Buffer2 = buffer.Buffer;
|
|
@@ -5885,6 +5885,17 @@ var require_lodash = __commonJS({
|
|
|
5885
5885
|
}
|
|
5886
5886
|
});
|
|
5887
5887
|
|
|
5888
|
+
// node_modules/archiver-utils/node_modules/isarray/index.js
|
|
5889
|
+
var require_isarray2 = __commonJS({
|
|
5890
|
+
"node_modules/archiver-utils/node_modules/isarray/index.js"(exports, module) {
|
|
5891
|
+
"use strict";
|
|
5892
|
+
var toString = {}.toString;
|
|
5893
|
+
module.exports = Array.isArray || function(arr) {
|
|
5894
|
+
return toString.call(arr) == "[object Array]";
|
|
5895
|
+
};
|
|
5896
|
+
}
|
|
5897
|
+
});
|
|
5898
|
+
|
|
5888
5899
|
// node_modules/archiver-utils/node_modules/readable-stream/lib/internal/streams/stream.js
|
|
5889
5900
|
var require_stream2 = __commonJS({
|
|
5890
5901
|
"node_modules/archiver-utils/node_modules/readable-stream/lib/internal/streams/stream.js"(exports, module) {
|
|
@@ -5893,6 +5904,64 @@ var require_stream2 = __commonJS({
|
|
|
5893
5904
|
}
|
|
5894
5905
|
});
|
|
5895
5906
|
|
|
5907
|
+
// node_modules/archiver-utils/node_modules/safe-buffer/index.js
|
|
5908
|
+
var require_safe_buffer2 = __commonJS({
|
|
5909
|
+
"node_modules/archiver-utils/node_modules/safe-buffer/index.js"(exports, module) {
|
|
5910
|
+
"use strict";
|
|
5911
|
+
var buffer = __require("buffer");
|
|
5912
|
+
var Buffer2 = buffer.Buffer;
|
|
5913
|
+
function copyProps(src, dst) {
|
|
5914
|
+
for (var key in src) {
|
|
5915
|
+
dst[key] = src[key];
|
|
5916
|
+
}
|
|
5917
|
+
}
|
|
5918
|
+
if (Buffer2.from && Buffer2.alloc && Buffer2.allocUnsafe && Buffer2.allocUnsafeSlow) {
|
|
5919
|
+
module.exports = buffer;
|
|
5920
|
+
} else {
|
|
5921
|
+
copyProps(buffer, exports);
|
|
5922
|
+
exports.Buffer = SafeBuffer;
|
|
5923
|
+
}
|
|
5924
|
+
function SafeBuffer(arg, encodingOrOffset, length) {
|
|
5925
|
+
return Buffer2(arg, encodingOrOffset, length);
|
|
5926
|
+
}
|
|
5927
|
+
copyProps(Buffer2, SafeBuffer);
|
|
5928
|
+
SafeBuffer.from = function(arg, encodingOrOffset, length) {
|
|
5929
|
+
if (typeof arg === "number") {
|
|
5930
|
+
throw new TypeError("Argument must not be a number");
|
|
5931
|
+
}
|
|
5932
|
+
return Buffer2(arg, encodingOrOffset, length);
|
|
5933
|
+
};
|
|
5934
|
+
SafeBuffer.alloc = function(size, fill, encoding) {
|
|
5935
|
+
if (typeof size !== "number") {
|
|
5936
|
+
throw new TypeError("Argument must be a number");
|
|
5937
|
+
}
|
|
5938
|
+
var buf = Buffer2(size);
|
|
5939
|
+
if (fill !== void 0) {
|
|
5940
|
+
if (typeof encoding === "string") {
|
|
5941
|
+
buf.fill(fill, encoding);
|
|
5942
|
+
} else {
|
|
5943
|
+
buf.fill(fill);
|
|
5944
|
+
}
|
|
5945
|
+
} else {
|
|
5946
|
+
buf.fill(0);
|
|
5947
|
+
}
|
|
5948
|
+
return buf;
|
|
5949
|
+
};
|
|
5950
|
+
SafeBuffer.allocUnsafe = function(size) {
|
|
5951
|
+
if (typeof size !== "number") {
|
|
5952
|
+
throw new TypeError("Argument must be a number");
|
|
5953
|
+
}
|
|
5954
|
+
return Buffer2(size);
|
|
5955
|
+
};
|
|
5956
|
+
SafeBuffer.allocUnsafeSlow = function(size) {
|
|
5957
|
+
if (typeof size !== "number") {
|
|
5958
|
+
throw new TypeError("Argument must be a number");
|
|
5959
|
+
}
|
|
5960
|
+
return buffer.SlowBuffer(size);
|
|
5961
|
+
};
|
|
5962
|
+
}
|
|
5963
|
+
});
|
|
5964
|
+
|
|
5896
5965
|
// node_modules/archiver-utils/node_modules/readable-stream/lib/internal/streams/BufferList.js
|
|
5897
5966
|
var require_BufferList2 = __commonJS({
|
|
5898
5967
|
"node_modules/archiver-utils/node_modules/readable-stream/lib/internal/streams/BufferList.js"(exports, module) {
|
|
@@ -5902,7 +5971,7 @@ var require_BufferList2 = __commonJS({
|
|
|
5902
5971
|
throw new TypeError("Cannot call a class as a function");
|
|
5903
5972
|
}
|
|
5904
5973
|
}
|
|
5905
|
-
var Buffer2 =
|
|
5974
|
+
var Buffer2 = require_safe_buffer2().Buffer;
|
|
5906
5975
|
var util = __require("util");
|
|
5907
5976
|
function copyBuffer(src, target, offset) {
|
|
5908
5977
|
src.copy(target, offset);
|
|
@@ -6063,7 +6132,7 @@ var require_stream_writable2 = __commonJS({
|
|
|
6063
6132
|
deprecate: require_node()
|
|
6064
6133
|
};
|
|
6065
6134
|
var Stream = require_stream2();
|
|
6066
|
-
var Buffer2 =
|
|
6135
|
+
var Buffer2 = require_safe_buffer2().Buffer;
|
|
6067
6136
|
var OurUint8Array = (typeof global !== "undefined" ? global : typeof window !== "undefined" ? window : typeof self !== "undefined" ? self : {}).Uint8Array || function() {
|
|
6068
6137
|
};
|
|
6069
6138
|
function _uint8ArrayToBuffer(chunk) {
|
|
@@ -6561,7 +6630,7 @@ var require_stream_duplex2 = __commonJS({
|
|
|
6561
6630
|
var require_string_decoder2 = __commonJS({
|
|
6562
6631
|
"node_modules/archiver-utils/node_modules/readable-stream/node_modules/string_decoder/lib/string_decoder.js"(exports) {
|
|
6563
6632
|
"use strict";
|
|
6564
|
-
var Buffer2 =
|
|
6633
|
+
var Buffer2 = require_safe_buffer2().Buffer;
|
|
6565
6634
|
var isEncoding = Buffer2.isEncoding || function(encoding) {
|
|
6566
6635
|
encoding = "" + encoding;
|
|
6567
6636
|
switch (encoding && encoding.toLowerCase()) {
|
|
@@ -6801,7 +6870,7 @@ var require_stream_readable2 = __commonJS({
|
|
|
6801
6870
|
"use strict";
|
|
6802
6871
|
var pna = require_process_nextick_args();
|
|
6803
6872
|
module.exports = Readable;
|
|
6804
|
-
var isArray =
|
|
6873
|
+
var isArray = require_isarray2();
|
|
6805
6874
|
var Duplex;
|
|
6806
6875
|
Readable.ReadableState = ReadableState;
|
|
6807
6876
|
var EE = __require("events").EventEmitter;
|
|
@@ -6809,7 +6878,7 @@ var require_stream_readable2 = __commonJS({
|
|
|
6809
6878
|
return emitter.listeners(type).length;
|
|
6810
6879
|
};
|
|
6811
6880
|
var Stream = require_stream2();
|
|
6812
|
-
var Buffer2 =
|
|
6881
|
+
var Buffer2 = require_safe_buffer2().Buffer;
|
|
6813
6882
|
var OurUint8Array = (typeof global !== "undefined" ? global : typeof window !== "undefined" ? window : typeof self !== "undefined" ? self : {}).Uint8Array || function() {
|
|
6814
6883
|
};
|
|
6815
6884
|
function _uint8ArrayToBuffer(chunk) {
|
|
@@ -9892,7 +9961,7 @@ var require_stream_duplex3 = __commonJS({
|
|
|
9892
9961
|
});
|
|
9893
9962
|
|
|
9894
9963
|
// node_modules/string_decoder/node_modules/safe-buffer/index.js
|
|
9895
|
-
var
|
|
9964
|
+
var require_safe_buffer3 = __commonJS({
|
|
9896
9965
|
"node_modules/string_decoder/node_modules/safe-buffer/index.js"(exports, module) {
|
|
9897
9966
|
"use strict";
|
|
9898
9967
|
var buffer = __require("buffer");
|
|
@@ -9954,7 +10023,7 @@ var require_safe_buffer2 = __commonJS({
|
|
|
9954
10023
|
var require_string_decoder3 = __commonJS({
|
|
9955
10024
|
"node_modules/string_decoder/lib/string_decoder.js"(exports) {
|
|
9956
10025
|
"use strict";
|
|
9957
|
-
var Buffer2 =
|
|
10026
|
+
var Buffer2 = require_safe_buffer3().Buffer;
|
|
9958
10027
|
var isEncoding = Buffer2.isEncoding || function(encoding) {
|
|
9959
10028
|
encoding = "" + encoding;
|
|
9960
10029
|
switch (encoding && encoding.toLowerCase()) {
|
|
@@ -15337,4 +15406,4 @@ archiver/index.js:
|
|
|
15337
15406
|
* @copyright (c) 2012-2014 Chris Talkington, contributors.
|
|
15338
15407
|
*)
|
|
15339
15408
|
*/
|
|
15340
|
-
//# sourceMappingURL=archiver-
|
|
15409
|
+
//# sourceMappingURL=archiver-XLRIIXPY.js.map
|