opensentinel 3.1.1 → 3.6.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (325) hide show
  1. package/README.md +126 -83
  2. package/dist/agent-manager-7N7REQZQ.js +39 -0
  3. package/dist/agent-processor-I23VWQY3.js +280 -0
  4. package/dist/agent-processor-I23VWQY3.js.map +1 -0
  5. package/dist/agent-types-2T4PXLFQ.js +12 -0
  6. package/dist/alerting-4I37GG4U.js +699 -0
  7. package/dist/alerting-4I37GG4U.js.map +1 -0
  8. package/dist/analysis-agent-JWN2GXYE.js +288 -0
  9. package/dist/analysis-agent-JWN2GXYE.js.map +1 -0
  10. package/dist/{archiver-AVNBYCKQ.js → archiver-XLRIIXPY.js} +86 -17
  11. package/dist/archiver-XLRIIXPY.js.map +1 -0
  12. package/dist/{audit-logger-OBPR7CRO.js → audit-logger-AU3TMWKI.js} +6 -5
  13. package/dist/{auth-UOX5K2BE.js → auth-PH5IHISW.js} +2 -2
  14. package/dist/{autonomy-ZXDBDQUJ.js → autonomy-N7W5XPLX.js} +4 -3
  15. package/dist/autonomy-N7W5XPLX.js.map +1 -0
  16. package/dist/{aws-s3-Q4LLZZPD.js → aws-s3-QZMURYXB.js} +2 -2
  17. package/dist/{backup-restore-PZ7CYYB7.js → backup-restore-72OQTZO3.js} +2 -2
  18. package/dist/{blocks-R3PODY47.js → blocks-YOWOESDD.js} +4 -4
  19. package/dist/bot-MU2TJQ3Y.js +46 -0
  20. package/dist/brain-SLA474EU.js +65 -0
  21. package/dist/{camera-monitor-M5CYKUU4.js → camera-monitor-LHTUWHEL.js} +2 -2
  22. package/dist/{charts-V7ARZNKF.js → charts-FJ32GQK7.js} +2 -2
  23. package/dist/{chunk-6PMVAAA7.js → chunk-2RGPWU77.js} +3 -3
  24. package/dist/{chunk-TVEWKIK3.js → chunk-2WTKTG2C.js} +2 -2
  25. package/dist/{chunk-MXAPLSJ5.js → chunk-45YXODSB.js} +2 -2
  26. package/dist/{chunk-SJSUSJ47.js → chunk-4YJRBMMA.js} +2 -2
  27. package/dist/chunk-643M3AP5.js +564 -0
  28. package/dist/chunk-643M3AP5.js.map +1 -0
  29. package/dist/{chunk-766ASQWE.js → chunk-6JY4HNUH.js} +2413 -2368
  30. package/dist/chunk-6JY4HNUH.js.map +1 -0
  31. package/dist/chunk-6LTLIYAQ.js +194 -0
  32. package/dist/chunk-6LTLIYAQ.js.map +1 -0
  33. package/dist/chunk-6UZPE35A.js +724 -0
  34. package/dist/chunk-6UZPE35A.js.map +1 -0
  35. package/dist/chunk-6W6PTJFT.js +181 -0
  36. package/dist/chunk-6W6PTJFT.js.map +1 -0
  37. package/dist/chunk-7MZN73J2.js +162 -0
  38. package/dist/chunk-7MZN73J2.js.map +1 -0
  39. package/dist/{chunk-SVAPX2XN.js → chunk-A24GPVLY.js} +9 -7
  40. package/dist/{chunk-SVAPX2XN.js.map → chunk-A24GPVLY.js.map} +1 -1
  41. package/dist/chunk-AD6YEH6U.js +3408 -0
  42. package/dist/chunk-AD6YEH6U.js.map +1 -0
  43. package/dist/chunk-ADTDYJO7.js +265 -0
  44. package/dist/chunk-ADTDYJO7.js.map +1 -0
  45. package/dist/{chunk-WRAKK6K6.js → chunk-AR34B6XR.js} +5 -3
  46. package/dist/{chunk-WRAKK6K6.js.map → chunk-AR34B6XR.js.map} +1 -1
  47. package/dist/chunk-BMOUYXLX.js +418 -0
  48. package/dist/chunk-BMOUYXLX.js.map +1 -0
  49. package/dist/chunk-C6PELIHS.js +60 -0
  50. package/dist/chunk-C6PELIHS.js.map +1 -0
  51. package/dist/{chunk-MQJ2ECQT.js → chunk-CUPEENUY.js} +3 -3
  52. package/dist/{chunk-RZ4YESBG.js → chunk-DOYGMNMK.js} +1 -1
  53. package/dist/chunk-DOYGMNMK.js.map +1 -0
  54. package/dist/chunk-FFV2SXFD.js +380 -0
  55. package/dist/chunk-FFV2SXFD.js.map +1 -0
  56. package/dist/{chunk-EVE7MIIY.js → chunk-GUKKW7JI.js} +15 -16
  57. package/dist/chunk-GUKKW7JI.js.map +1 -0
  58. package/dist/{chunk-66OJ3WB4.js → chunk-H3BOLSTS.js} +2 -2
  59. package/dist/chunk-HKOPRRDJ.js +1021 -0
  60. package/dist/chunk-HKOPRRDJ.js.map +1 -0
  61. package/dist/{chunk-BXZ6EA52.js → chunk-HTF2GIQC.js} +57 -3
  62. package/dist/chunk-HTF2GIQC.js.map +1 -0
  63. package/dist/{chunk-TYAGMJNV.js → chunk-JOA5A3G3.js} +5 -5
  64. package/dist/{chunk-OCVQGBJK.js → chunk-KABG5PG3.js} +6 -4
  65. package/dist/{chunk-OCVQGBJK.js.map → chunk-KABG5PG3.js.map} +1 -1
  66. package/dist/{chunk-VEHFVBLI.js → chunk-KT7NLIXP.js} +2 -2
  67. package/dist/chunk-LFDXEYYB.js +150 -0
  68. package/dist/chunk-LFDXEYYB.js.map +1 -0
  69. package/dist/{chunk-I6BDYQIG.js → chunk-M7YLQHFP.js} +6 -6
  70. package/dist/chunk-M7YLQHFP.js.map +1 -0
  71. package/dist/{chunk-AYUKPTSM.js → chunk-MFK34XSY.js} +96 -218
  72. package/dist/chunk-MFK34XSY.js.map +1 -0
  73. package/dist/chunk-MIC5IBQF.js +386 -0
  74. package/dist/chunk-MIC5IBQF.js.map +1 -0
  75. package/dist/{chunk-4UOE5TUZ.js → chunk-NMSHVO5O.js} +4 -4
  76. package/dist/{chunk-XKYRH4FM.js → chunk-NYVBXUGD.js} +13 -32
  77. package/dist/chunk-NYVBXUGD.js.map +1 -0
  78. package/dist/chunk-ODCFS5WD.js +463 -0
  79. package/dist/chunk-ODCFS5WD.js.map +1 -0
  80. package/dist/{chunk-ZLZKF2PM.js → chunk-PUNIMPMY.js} +32 -2
  81. package/dist/chunk-PUNIMPMY.js.map +1 -0
  82. package/dist/chunk-S4NJJS5C.js +37 -0
  83. package/dist/chunk-S4NJJS5C.js.map +1 -0
  84. package/dist/{chunk-NHMBTUMW.js → chunk-TAAZB5KN.js} +2 -2
  85. package/dist/{chunk-BRBWNV65.js → chunk-U2X2J3FI.js} +3 -3
  86. package/dist/chunk-U2X2J3FI.js.map +1 -0
  87. package/dist/{chunk-PLDDJCW6.js → chunk-UP2VWCW5.js} +1 -12
  88. package/dist/{chunk-4GLYY4NN.js → chunk-UWUIJTT4.js} +8 -2
  89. package/dist/chunk-UWUIJTT4.js.map +1 -0
  90. package/dist/{chunk-SPPMCAKG.js → chunk-VKMFUIVA.js} +2 -2
  91. package/dist/chunk-VKMFUIVA.js.map +1 -0
  92. package/dist/chunk-WZAH34TG.js +129 -0
  93. package/dist/chunk-WZAH34TG.js.map +1 -0
  94. package/dist/{chunk-H5RQOFO2.js → chunk-X6Q3K3L2.js} +6 -6
  95. package/dist/chunk-X6Q3K3L2.js.map +1 -0
  96. package/dist/chunk-XTX7EK43.js +134 -0
  97. package/dist/chunk-XTX7EK43.js.map +1 -0
  98. package/dist/chunk-ZIYTHUM5.js +457 -0
  99. package/dist/chunk-ZIYTHUM5.js.map +1 -0
  100. package/dist/chunker-K6WTR62A.js +12 -0
  101. package/dist/cli.js +1 -1
  102. package/dist/{client-ZQSFPMOB.js → client-FOIYPOZQ.js} +5 -6
  103. package/dist/{clipboard-manager-TEO2GEDN.js → clipboard-manager-4SBNESGZ.js} +2 -2
  104. package/dist/coding-agent-DESSU3AC.js +233 -0
  105. package/dist/coding-agent-DESSU3AC.js.map +1 -0
  106. package/dist/commands/setup.js +1 -1
  107. package/dist/commands/start.js +2 -2
  108. package/dist/commands/status.js +1 -1
  109. package/dist/commands/stop.js +1 -1
  110. package/dist/commands/utils.js +1 -1
  111. package/dist/cost-tracker-EMOIOYH7.js +11 -0
  112. package/dist/{cron-explain-HHQKPD3M.js → cron-explain-UOOOYWZZ.js} +2 -2
  113. package/dist/{crypto-4AP47IKC.js → crypto-2VG3RJR2.js} +2 -2
  114. package/dist/{databases-37X4CI2Y.js → databases-XDPMG5AV.js} +4 -4
  115. package/dist/db-LRIOKQBO.js +77 -0
  116. package/dist/discord-NKR3X4AV.js +80 -0
  117. package/dist/documents-EYIYLZK2.js +184 -0
  118. package/dist/documents-EYIYLZK2.js.map +1 -0
  119. package/dist/docx-parser-EXL4TN5E.js +16 -0
  120. package/dist/{email-K7LO2IPB.js → email-EAQNULVD.js} +33 -25
  121. package/dist/{email-K7LO2IPB.js.map → email-EAQNULVD.js.map} +1 -1
  122. package/dist/{enhanced-retrieval-DNLLEM4Z.js → enhanced-retrieval-OGHT6TS5.js} +11 -8
  123. package/dist/{enhanced-retrieval-DNLLEM4Z.js.map → enhanced-retrieval-OGHT6TS5.js.map} +1 -1
  124. package/dist/enrichment-pipeline-CMUVBDC7.js +14 -0
  125. package/dist/{entity-resolution-Y3IUWEAT.js → entity-resolution-4X4JU43O.js} +6 -5
  126. package/dist/env-CHOFICED.js +12 -0
  127. package/dist/error-tracker-SVQSDQDW.js +32 -0
  128. package/dist/finnhub-X7ZMQSXF.js +178 -0
  129. package/dist/finnhub-X7ZMQSXF.js.map +1 -0
  130. package/dist/fred-TMUF3J2V.js +203 -0
  131. package/dist/fred-TMUF3J2V.js.map +1 -0
  132. package/dist/github-KGNILDWJ.js +833 -0
  133. package/dist/github-KGNILDWJ.js.map +1 -0
  134. package/dist/{google-workspace-DKWUVNGC.js → google-workspace-TSZPZK5G.js} +2 -2
  135. package/dist/{hash-tool-ULQYD7B5.js → hash-tool-ENAB5LWH.js} +2 -2
  136. package/dist/{heartbeat-monitor-GCISLXI3.js → heartbeat-monitor-KRDYTDBF.js} +2 -2
  137. package/dist/hooks-N4MIFBVM.js +14 -0
  138. package/dist/{image-generation-OSU7FP6F.js → image-generation-MDE6AVQO.js} +2 -2
  139. package/dist/imessage-V2XNDDHT.js +43 -0
  140. package/dist/inbox-summarizer-DKKRYXDR.js +55 -0
  141. package/dist/{incident-response-C5J7Q6DT.js → incident-response-ZTIKUWEO.js} +8 -6
  142. package/dist/{incident-response-C5J7Q6DT.js.map → incident-response-ZTIKUWEO.js.map} +1 -1
  143. package/dist/{inventory-manager-352OHXWD.js → inventory-manager-C67BSZM6.js} +2 -2
  144. package/dist/{jira-GSGDBMIG.js → jira-PAGZWUBJ.js} +2 -2
  145. package/dist/{json-tool-QE2SYHEG.js → json-tool-4FK5RNER.js} +2 -2
  146. package/dist/{key-rotation-DPHU4ZTB.js → key-rotation-WCC5FOYS.js} +2 -2
  147. package/dist/knowledge-base-J7PJ7MZ3.js +46 -0
  148. package/dist/lib.d.ts +73 -1
  149. package/dist/lib.js +86 -76
  150. package/dist/lib.js.map +1 -1
  151. package/dist/{mailchimp-KKNF6QJ7.js → mailchimp-ZFYDC44J.js} +2 -2
  152. package/dist/{matrix-QVHG76I7.js → matrix-XHTR53VQ.js} +29 -21
  153. package/dist/{matrix-QVHG76I7.js.map → matrix-XHTR53VQ.js.map} +1 -1
  154. package/dist/{mcp-3JI6W7ZE.js → mcp-3C2TN67D.js} +3 -3
  155. package/dist/metrics-VJDWQWU7.js +25 -0
  156. package/dist/{microsoft365-UCBKJHNX.js → microsoft365-6G2IJMWC.js} +2 -2
  157. package/dist/multi-user-S56GUD6L.js +411 -0
  158. package/dist/multi-user-S56GUD6L.js.map +1 -0
  159. package/dist/{ocr-AC7NPX33.js → ocr-LGUIPKVZ.js} +6 -4
  160. package/dist/{ollama-BOAMSPLJ.js → ollama-J7CU45WT.js} +2 -2
  161. package/dist/osint-agent-RL5XPBRQ.js +189 -0
  162. package/dist/osint-agent-RL5XPBRQ.js.map +1 -0
  163. package/dist/{pages-MI523RB7.js → pages-XDE7JRCA.js} +5 -5
  164. package/dist/{pair-JDFTERIK.js → pair-YZJFQUU5.js} +2 -2
  165. package/dist/{pairing-IFQYCPNS.js → pairing-77N47RAT.js} +2 -2
  166. package/dist/{pdf-ALQVOEJR.js → pdf-67HGXCFJ.js} +3 -3
  167. package/dist/pdf-parser-YLMTTYHL.js +14 -0
  168. package/dist/{presentations-DSV5IHG5.js → presentations-HXTAMGHT.js} +3 -3
  169. package/dist/presentations-HXTAMGHT.js.map +1 -0
  170. package/dist/{prometheus-JNT2BD4L.js → prometheus-YETCZO4I.js} +2 -2
  171. package/dist/{providers-J4LYPHDR.js → providers-H6YIC3MG.js} +6 -4
  172. package/dist/{qr-code-WIX4PB4U.js → qr-code-6WZJHRKL.js} +2 -2
  173. package/dist/{quickbooks-XB4NII2S.js → quickbooks-N675W7IK.js} +2 -2
  174. package/dist/{regex-tool-W4ABRKGK.js → regex-tool-6Q63LQ7B.js} +2 -2
  175. package/dist/regex-tool-6Q63LQ7B.js.map +1 -0
  176. package/dist/research-agent-WCRSY3UZ.js +168 -0
  177. package/dist/research-agent-WCRSY3UZ.js.map +1 -0
  178. package/dist/risk-engine-YKCPT5D5.js +10 -0
  179. package/dist/risk-engine-YKCPT5D5.js.map +1 -0
  180. package/dist/scheduler-CA5UNHZV.js +73 -0
  181. package/dist/scheduler-CA5UNHZV.js.map +1 -0
  182. package/dist/schema-ALJ67YVG.js +72 -0
  183. package/dist/schema-ALJ67YVG.js.map +1 -0
  184. package/dist/{search-BCLBO5E3.js → search-GMLKBHSW.js} +4 -4
  185. package/dist/search-GMLKBHSW.js.map +1 -0
  186. package/dist/{sendgrid-RNXCAFKM.js → sendgrid-QGJIVPWV.js} +2 -2
  187. package/dist/{shopify-NCXYJB4R.js → shopify-ON2PAU27.js} +2 -2
  188. package/dist/signal-X7IQJGRQ.js +43 -0
  189. package/dist/signal-X7IQJGRQ.js.map +1 -0
  190. package/dist/slack-P2LFUJUQ.js +85 -0
  191. package/dist/slack-P2LFUJUQ.js.map +1 -0
  192. package/dist/{sms-M3JIOTCW.js → sms-4VME2HUL.js} +4 -4
  193. package/dist/sms-4VME2HUL.js.map +1 -0
  194. package/dist/{src-VYUE6LRA.js → src-S5KX4YEV.js} +179 -48
  195. package/dist/src-S5KX4YEV.js.map +1 -0
  196. package/dist/{stocks-XXWBPOCU.js → stocks-4M4HZWZS.js} +2 -2
  197. package/dist/stocks-4M4HZWZS.js.map +1 -0
  198. package/dist/text-extractor-OAUBAW5P.js +12 -0
  199. package/dist/text-extractor-OAUBAW5P.js.map +1 -0
  200. package/dist/{text-transform-6SGUA5Z4.js → text-transform-HCLCUDFZ.js} +2 -2
  201. package/dist/text-transform-HCLCUDFZ.js.map +1 -0
  202. package/dist/tools-FGPN522P.js +46 -0
  203. package/dist/tools-FGPN522P.js.map +1 -0
  204. package/dist/{tunnel-IWMXUML4.js → tunnel-XOUVVRAK.js} +4 -2
  205. package/dist/tunnel-XOUVVRAK.js.map +1 -0
  206. package/dist/{twilio-53GEW5JT.js → twilio-3L7DUNYQ.js} +2 -2
  207. package/dist/{unit-converter-ZYXMEZOE.js → unit-converter-LYPAHU64.js} +2 -2
  208. package/dist/unit-converter-LYPAHU64.js.map +1 -0
  209. package/dist/whatsapp-KRPQ4YUX.js +43 -0
  210. package/dist/whatsapp-KRPQ4YUX.js.map +1 -0
  211. package/dist/{word-document-7B6SJMAY.js → word-document-D6N2C47N.js} +4 -4
  212. package/dist/word-document-D6N2C47N.js.map +1 -0
  213. package/dist/workflow-store-ZYAYE5P6.js +373 -0
  214. package/dist/workflow-store-ZYAYE5P6.js.map +1 -0
  215. package/dist/writing-agent-VDGLNOGO.js +243 -0
  216. package/dist/writing-agent-VDGLNOGO.js.map +1 -0
  217. package/dist/{xero-QYO66D45.js → xero-UHAHVYSD.js} +2 -2
  218. package/dist/{zapier-webhook-TBZ5YF2A.js → zapier-webhook-NIELLTXR.js} +2 -2
  219. package/package.json +11 -1
  220. package/dist/archiver-AVNBYCKQ.js.map +0 -1
  221. package/dist/autonomy-ZXDBDQUJ.js.map +0 -1
  222. package/dist/bot-QRARP4UN.js +0 -36
  223. package/dist/brain-7XLLM3KC.js +0 -56
  224. package/dist/chunk-4GLYY4NN.js.map +0 -1
  225. package/dist/chunk-766ASQWE.js.map +0 -1
  226. package/dist/chunk-AYUKPTSM.js.map +0 -1
  227. package/dist/chunk-BRBWNV65.js.map +0 -1
  228. package/dist/chunk-BXZ6EA52.js.map +0 -1
  229. package/dist/chunk-EVE7MIIY.js.map +0 -1
  230. package/dist/chunk-H5RQOFO2.js.map +0 -1
  231. package/dist/chunk-I6BDYQIG.js.map +0 -1
  232. package/dist/chunk-IZJMVV7O.js +0 -347
  233. package/dist/chunk-IZJMVV7O.js.map +0 -1
  234. package/dist/chunk-O7IH7JTI.js +0 -1898
  235. package/dist/chunk-O7IH7JTI.js.map +0 -1
  236. package/dist/chunk-RZ4YESBG.js.map +0 -1
  237. package/dist/chunk-SPPMCAKG.js.map +0 -1
  238. package/dist/chunk-VRD5CYRL.js +0 -1568
  239. package/dist/chunk-VRD5CYRL.js.map +0 -1
  240. package/dist/chunk-XKYRH4FM.js.map +0 -1
  241. package/dist/chunk-ZLZKF2PM.js.map +0 -1
  242. package/dist/discord-B3HUPGQ6.js +0 -70
  243. package/dist/dist-UISMLMFN.js +0 -21847
  244. package/dist/dist-UISMLMFN.js.map +0 -1
  245. package/dist/enrichment-pipeline-MNHNW65K.js +0 -13
  246. package/dist/env-IWXUVTCB.js +0 -12
  247. package/dist/imessage-NGA2XF2V.js +0 -35
  248. package/dist/inbox-summarizer-NRI4S7IF.js +0 -47
  249. package/dist/presentations-DSV5IHG5.js.map +0 -1
  250. package/dist/scheduler-VK4WFERV.js +0 -63
  251. package/dist/signal-6CGDFYL2.js +0 -35
  252. package/dist/slack-IZQWIKOH.js +0 -75
  253. package/dist/src-VYUE6LRA.js.map +0 -1
  254. package/dist/tools-2RLEI2N6.js +0 -38
  255. package/dist/tunnel-IWMXUML4.js.map +0 -1
  256. package/dist/whatsapp-LFX6YKCM.js +0 -35
  257. package/dist/word-document-7B6SJMAY.js.map +0 -1
  258. /package/dist/{audit-logger-OBPR7CRO.js.map → agent-manager-7N7REQZQ.js.map} +0 -0
  259. /package/dist/{auth-UOX5K2BE.js.map → agent-types-2T4PXLFQ.js.map} +0 -0
  260. /package/dist/{backup-restore-PZ7CYYB7.js.map → audit-logger-AU3TMWKI.js.map} +0 -0
  261. /package/dist/{blocks-R3PODY47.js.map → auth-PH5IHISW.js.map} +0 -0
  262. /package/dist/{aws-s3-Q4LLZZPD.js.map → aws-s3-QZMURYXB.js.map} +0 -0
  263. /package/dist/{bot-QRARP4UN.js.map → backup-restore-72OQTZO3.js.map} +0 -0
  264. /package/dist/{brain-7XLLM3KC.js.map → blocks-YOWOESDD.js.map} +0 -0
  265. /package/dist/{chunk-PLDDJCW6.js.map → bot-MU2TJQ3Y.js.map} +0 -0
  266. /package/dist/{client-ZQSFPMOB.js.map → brain-SLA474EU.js.map} +0 -0
  267. /package/dist/{camera-monitor-M5CYKUU4.js.map → camera-monitor-LHTUWHEL.js.map} +0 -0
  268. /package/dist/{charts-V7ARZNKF.js.map → charts-FJ32GQK7.js.map} +0 -0
  269. /package/dist/{chunk-6PMVAAA7.js.map → chunk-2RGPWU77.js.map} +0 -0
  270. /package/dist/{chunk-TVEWKIK3.js.map → chunk-2WTKTG2C.js.map} +0 -0
  271. /package/dist/{chunk-MXAPLSJ5.js.map → chunk-45YXODSB.js.map} +0 -0
  272. /package/dist/{chunk-SJSUSJ47.js.map → chunk-4YJRBMMA.js.map} +0 -0
  273. /package/dist/{chunk-MQJ2ECQT.js.map → chunk-CUPEENUY.js.map} +0 -0
  274. /package/dist/{chunk-66OJ3WB4.js.map → chunk-H3BOLSTS.js.map} +0 -0
  275. /package/dist/{chunk-TYAGMJNV.js.map → chunk-JOA5A3G3.js.map} +0 -0
  276. /package/dist/{chunk-VEHFVBLI.js.map → chunk-KT7NLIXP.js.map} +0 -0
  277. /package/dist/{chunk-4UOE5TUZ.js.map → chunk-NMSHVO5O.js.map} +0 -0
  278. /package/dist/{chunk-NHMBTUMW.js.map → chunk-TAAZB5KN.js.map} +0 -0
  279. /package/dist/{clipboard-manager-TEO2GEDN.js.map → chunk-UP2VWCW5.js.map} +0 -0
  280. /package/dist/{cron-explain-HHQKPD3M.js.map → chunker-K6WTR62A.js.map} +0 -0
  281. /package/dist/{crypto-4AP47IKC.js.map → client-FOIYPOZQ.js.map} +0 -0
  282. /package/dist/{databases-37X4CI2Y.js.map → clipboard-manager-4SBNESGZ.js.map} +0 -0
  283. /package/dist/{discord-B3HUPGQ6.js.map → cost-tracker-EMOIOYH7.js.map} +0 -0
  284. /package/dist/{enrichment-pipeline-MNHNW65K.js.map → cron-explain-UOOOYWZZ.js.map} +0 -0
  285. /package/dist/{entity-resolution-Y3IUWEAT.js.map → crypto-2VG3RJR2.js.map} +0 -0
  286. /package/dist/{env-IWXUVTCB.js.map → databases-XDPMG5AV.js.map} +0 -0
  287. /package/dist/{hash-tool-ULQYD7B5.js.map → db-LRIOKQBO.js.map} +0 -0
  288. /package/dist/{heartbeat-monitor-GCISLXI3.js.map → discord-NKR3X4AV.js.map} +0 -0
  289. /package/dist/{imessage-NGA2XF2V.js.map → docx-parser-EXL4TN5E.js.map} +0 -0
  290. /package/dist/{inbox-summarizer-NRI4S7IF.js.map → enrichment-pipeline-CMUVBDC7.js.map} +0 -0
  291. /package/dist/{inventory-manager-352OHXWD.js.map → entity-resolution-4X4JU43O.js.map} +0 -0
  292. /package/dist/{json-tool-QE2SYHEG.js.map → env-CHOFICED.js.map} +0 -0
  293. /package/dist/{key-rotation-DPHU4ZTB.js.map → error-tracker-SVQSDQDW.js.map} +0 -0
  294. /package/dist/{google-workspace-DKWUVNGC.js.map → google-workspace-TSZPZK5G.js.map} +0 -0
  295. /package/dist/{mcp-3JI6W7ZE.js.map → hash-tool-ENAB5LWH.js.map} +0 -0
  296. /package/dist/{ocr-AC7NPX33.js.map → heartbeat-monitor-KRDYTDBF.js.map} +0 -0
  297. /package/dist/{ollama-BOAMSPLJ.js.map → hooks-N4MIFBVM.js.map} +0 -0
  298. /package/dist/{image-generation-OSU7FP6F.js.map → image-generation-MDE6AVQO.js.map} +0 -0
  299. /package/dist/{pages-MI523RB7.js.map → imessage-V2XNDDHT.js.map} +0 -0
  300. /package/dist/{pairing-IFQYCPNS.js.map → inbox-summarizer-DKKRYXDR.js.map} +0 -0
  301. /package/dist/{pdf-ALQVOEJR.js.map → inventory-manager-C67BSZM6.js.map} +0 -0
  302. /package/dist/{jira-GSGDBMIG.js.map → jira-PAGZWUBJ.js.map} +0 -0
  303. /package/dist/{prometheus-JNT2BD4L.js.map → json-tool-4FK5RNER.js.map} +0 -0
  304. /package/dist/{providers-J4LYPHDR.js.map → key-rotation-WCC5FOYS.js.map} +0 -0
  305. /package/dist/{qr-code-WIX4PB4U.js.map → knowledge-base-J7PJ7MZ3.js.map} +0 -0
  306. /package/dist/{mailchimp-KKNF6QJ7.js.map → mailchimp-ZFYDC44J.js.map} +0 -0
  307. /package/dist/{regex-tool-W4ABRKGK.js.map → mcp-3C2TN67D.js.map} +0 -0
  308. /package/dist/{scheduler-VK4WFERV.js.map → metrics-VJDWQWU7.js.map} +0 -0
  309. /package/dist/{microsoft365-UCBKJHNX.js.map → microsoft365-6G2IJMWC.js.map} +0 -0
  310. /package/dist/{search-BCLBO5E3.js.map → ocr-LGUIPKVZ.js.map} +0 -0
  311. /package/dist/{signal-6CGDFYL2.js.map → ollama-J7CU45WT.js.map} +0 -0
  312. /package/dist/{slack-IZQWIKOH.js.map → pages-XDE7JRCA.js.map} +0 -0
  313. /package/dist/{pair-JDFTERIK.js.map → pair-YZJFQUU5.js.map} +0 -0
  314. /package/dist/{sms-M3JIOTCW.js.map → pairing-77N47RAT.js.map} +0 -0
  315. /package/dist/{stocks-XXWBPOCU.js.map → pdf-67HGXCFJ.js.map} +0 -0
  316. /package/dist/{text-transform-6SGUA5Z4.js.map → pdf-parser-YLMTTYHL.js.map} +0 -0
  317. /package/dist/{tools-2RLEI2N6.js.map → prometheus-YETCZO4I.js.map} +0 -0
  318. /package/dist/{unit-converter-ZYXMEZOE.js.map → providers-H6YIC3MG.js.map} +0 -0
  319. /package/dist/{whatsapp-LFX6YKCM.js.map → qr-code-6WZJHRKL.js.map} +0 -0
  320. /package/dist/{quickbooks-XB4NII2S.js.map → quickbooks-N675W7IK.js.map} +0 -0
  321. /package/dist/{sendgrid-RNXCAFKM.js.map → sendgrid-QGJIVPWV.js.map} +0 -0
  322. /package/dist/{shopify-NCXYJB4R.js.map → shopify-ON2PAU27.js.map} +0 -0
  323. /package/dist/{twilio-53GEW5JT.js.map → twilio-3L7DUNYQ.js.map} +0 -0
  324. /package/dist/{xero-QYO66D45.js.map → xero-UHAHVYSD.js.map} +0 -0
  325. /package/dist/{zapier-webhook-TBZ5YF2A.js.map → zapier-webhook-NIELLTXR.js.map} +0 -0
@@ -1,13 +0,0 @@
1
- import {
2
- batchEnrich,
3
- enrichEntity
4
- } from "./chunk-SVAPX2XN.js";
5
- import "./chunk-WRAKK6K6.js";
6
- import "./chunk-XKYRH4FM.js";
7
- import "./chunk-ZLZKF2PM.js";
8
- import "./chunk-PLDDJCW6.js";
9
- export {
10
- batchEnrich,
11
- enrichEntity
12
- };
13
- //# sourceMappingURL=enrichment-pipeline-MNHNW65K.js.map
@@ -1,12 +0,0 @@
1
- import {
2
- configure,
3
- env,
4
- ready
5
- } from "./chunk-ZLZKF2PM.js";
6
- import "./chunk-PLDDJCW6.js";
7
- export {
8
- configure,
9
- env,
10
- ready
11
- };
12
- //# sourceMappingURL=env-IWXUVTCB.js.map
@@ -1,35 +0,0 @@
1
- import {
2
- iMessageBot,
3
- imessage_default
4
- } from "./chunk-NHMBTUMW.js";
5
- import "./chunk-766ASQWE.js";
6
- import "./chunk-IZJMVV7O.js";
7
- import "./chunk-6PMVAAA7.js";
8
- import "./chunk-MQJ2ECQT.js";
9
- import "./chunk-TVEWKIK3.js";
10
- import "./chunk-BRBWNV65.js";
11
- import "./chunk-H5RQOFO2.js";
12
- import "./chunk-VRD5CYRL.js";
13
- import "./chunk-KM22GV7G.js";
14
- import "./chunk-P6QINGFL.js";
15
- import "./chunk-HN3F4WSW.js";
16
- import "./chunk-SVAPX2XN.js";
17
- import "./chunk-WRAKK6K6.js";
18
- import "./chunk-7WQO5J2M.js";
19
- import "./chunk-BXZ6EA52.js";
20
- import "./chunk-4GLYY4NN.js";
21
- import "./chunk-EVE7MIIY.js";
22
- import "./chunk-RZ4YESBG.js";
23
- import "./chunk-CQ4JURG7.js";
24
- import "./chunk-OCVQGBJK.js";
25
- import "./chunk-XKYRH4FM.js";
26
- import "./chunk-ZLZKF2PM.js";
27
- import "./chunk-6KONMXQ6.js";
28
- import "./chunk-22VGGA7S.js";
29
- import "./chunk-35WYTA3C.js";
30
- import "./chunk-PLDDJCW6.js";
31
- export {
32
- imessage_default as default,
33
- iMessageBot
34
- };
35
- //# sourceMappingURL=imessage-NGA2XF2V.js.map
@@ -1,47 +0,0 @@
1
- import {
2
- analyzeSentiment,
3
- categorizeEmail,
4
- extractActionItems,
5
- generateDailyDigest,
6
- inbox_summarizer_default,
7
- suggestReplies,
8
- summarizeInbox,
9
- summarizeThread
10
- } from "./chunk-SPPMCAKG.js";
11
- import "./chunk-766ASQWE.js";
12
- import "./chunk-IZJMVV7O.js";
13
- import "./chunk-6PMVAAA7.js";
14
- import "./chunk-MQJ2ECQT.js";
15
- import "./chunk-TVEWKIK3.js";
16
- import "./chunk-BRBWNV65.js";
17
- import "./chunk-H5RQOFO2.js";
18
- import "./chunk-VRD5CYRL.js";
19
- import "./chunk-KM22GV7G.js";
20
- import "./chunk-P6QINGFL.js";
21
- import "./chunk-HN3F4WSW.js";
22
- import "./chunk-SVAPX2XN.js";
23
- import "./chunk-WRAKK6K6.js";
24
- import "./chunk-7WQO5J2M.js";
25
- import "./chunk-BXZ6EA52.js";
26
- import "./chunk-4GLYY4NN.js";
27
- import "./chunk-EVE7MIIY.js";
28
- import "./chunk-RZ4YESBG.js";
29
- import "./chunk-CQ4JURG7.js";
30
- import "./chunk-OCVQGBJK.js";
31
- import "./chunk-XKYRH4FM.js";
32
- import "./chunk-ZLZKF2PM.js";
33
- import "./chunk-6KONMXQ6.js";
34
- import "./chunk-22VGGA7S.js";
35
- import "./chunk-35WYTA3C.js";
36
- import "./chunk-PLDDJCW6.js";
37
- export {
38
- analyzeSentiment,
39
- categorizeEmail,
40
- inbox_summarizer_default as default,
41
- extractActionItems,
42
- generateDailyDigest,
43
- suggestReplies,
44
- summarizeInbox,
45
- summarizeThread
46
- };
47
- //# sourceMappingURL=inbox-summarizer-NRI4S7IF.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/tools/file-generation/presentations.ts"],"sourcesContent":["import { join } from \"path\";\nimport { tmpdir } from \"os\";\nimport { randomBytes } from \"crypto\";\nimport { writeFile, mkdir } from \"fs/promises\";\nimport { dirname } from \"path\";\nimport { isPathAllowed } from \"../../utils/paths\";\n\nexport interface PresentationOptions {\n title?: string;\n author?: string;\n subject?: string;\n company?: string;\n layout?: \"LAYOUT_16x9\" | \"LAYOUT_4x3\" | \"LAYOUT_WIDE\";\n theme?: PresentationTheme;\n}\n\nexport interface PresentationTheme {\n backgroundColor?: string;\n titleColor?: string;\n textColor?: string;\n accentColor?: string;\n titleFont?: string;\n bodyFont?: string;\n}\n\nexport interface PresentationResult {\n success: boolean;\n filePath?: string;\n error?: string;\n}\n\nexport type SlideLayout =\n | \"title\"\n | \"title-content\"\n | \"title-two-columns\"\n | \"section\"\n | \"comparison\"\n | \"blank\"\n | \"title-only\"\n | \"content-only\";\n\nexport interface SlideElement {\n type: \"text\" | \"bullet-list\" | \"numbered-list\" | \"image\" | \"shape\" | \"table\" | \"chart\";\n x?: number; // Percentage from left (0-100)\n y?: number; // Percentage from top (0-100)\n width?: number; // Percentage of slide width\n height?: number; // Percentage of slide height\n}\n\nexport interface TextElement extends SlideElement {\n type: \"text\";\n text: string;\n fontSize?: number;\n fontFace?: string;\n color?: string;\n bold?: boolean;\n italic?: boolean;\n underline?: boolean;\n align?: \"left\" | \"center\" | \"right\";\n valign?: \"top\" | \"middle\" | \"bottom\";\n}\n\nexport interface BulletListElement extends SlideElement {\n type: \"bullet-list\";\n items: string[];\n fontSize?: number;\n color?: string;\n bulletColor?: string;\n}\n\nexport interface NumberedListElement extends SlideElement {\n type: \"numbered-list\";\n items: string[];\n fontSize?: number;\n color?: string;\n startNumber?: number;\n}\n\nexport interface ImageElement extends SlideElement {\n type: \"image\";\n path: string;\n sizing?: \"contain\" | \"cover\" | \"stretch\";\n}\n\nexport interface ShapeElement extends SlideElement {\n type: \"shape\";\n shapeType: \"rectangle\" | \"ellipse\" | \"triangle\" | \"arrow\" | \"line\";\n fill?: string;\n stroke?: string;\n strokeWidth?: number;\n text?: string;\n textColor?: string;\n}\n\nexport interface TableElement extends SlideElement {\n type: \"table\";\n headers?: string[];\n rows: string[][];\n headerColor?: string;\n headerTextColor?: string;\n borderColor?: string;\n alternateRowColor?: string;\n}\n\nexport interface ChartElement extends SlideElement {\n type: \"chart\";\n chartType: \"bar\" | \"line\" | \"pie\" | \"doughnut\" | \"area\";\n title?: string;\n labels: string[];\n data: number[] | { name: string; values: number[] }[];\n colors?: string[];\n}\n\nexport type SlideContent =\n | TextElement\n | BulletListElement\n | NumberedListElement\n | ImageElement\n | ShapeElement\n | TableElement\n | ChartElement;\n\nexport interface Slide {\n layout?: SlideLayout;\n title?: string;\n subtitle?: string;\n content?: SlideContent[];\n notes?: string;\n backgroundColor?: string;\n backgroundImage?: string;\n transition?: \"none\" | \"fade\" | \"slide\" | \"zoom\";\n}\n\n// Default theme\nconst DEFAULT_THEME: PresentationTheme = {\n backgroundColor: \"FFFFFF\",\n titleColor: \"2F5496\",\n textColor: \"333333\",\n accentColor: \"4472C4\",\n titleFont: \"Calibri Light\",\n bodyFont: \"Calibri\",\n};\n\n// Default options\nconst DEFAULT_OPTIONS: PresentationOptions = {\n layout: \"LAYOUT_16x9\",\n theme: DEFAULT_THEME,\n};\n\n// Generate temp file path\nfunction getTempPath(): string {\n const id = randomBytes(8).toString(\"hex\");\n return join(tmpdir(), `sentinel-presentation-${id}.pptx`);\n}\n\n// Escape XML special characters\nfunction escapeXml(str: string): string {\n return str\n .replace(/&/g, \"&amp;\")\n .replace(/</g, \"&lt;\")\n .replace(/>/g, \"&gt;\")\n .replace(/\"/g, \"&quot;\")\n .replace(/'/g, \"&apos;\");\n}\n\n// Convert percentage to EMUs (English Metric Units)\n// Slide dimensions in EMUs: 16:9 is 9144000 x 5143500\nfunction percentToEmuX(percent: number, layout: string = \"LAYOUT_16x9\"): number {\n const slideWidth = layout === \"LAYOUT_4x3\" ? 9144000 : 12192000;\n return Math.round((percent / 100) * slideWidth);\n}\n\nfunction percentToEmuY(percent: number, layout: string = \"LAYOUT_16x9\"): number {\n const slideHeight = layout === \"LAYOUT_4x3\" ? 6858000 : 6858000;\n return Math.round((percent / 100) * slideHeight);\n}\n\n// Convert points to EMUs (1 point = 12700 EMUs)\nfunction pointsToEmu(points: number): number {\n return points * 12700;\n}\n\n// Convert color to OOXML format (remove # if present)\nfunction normalizeColor(color: string): string {\n return color.replace(\"#\", \"\").toUpperCase();\n}\n\n// Generate [Content_Types].xml\nfunction generateContentTypesXml(slideCount: number): string {\n let overrides = \"\";\n for (let i = 1; i <= slideCount; i++) {\n overrides += `<Override PartName=\"/ppt/slides/slide${i}.xml\" ContentType=\"application/vnd.openxmlformats-officedocument.presentationml.slide+xml\"/>`;\n }\n\n return `<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>\n<Types xmlns=\"http://schemas.openxmlformats.org/package/2006/content-types\">\n <Default Extension=\"rels\" ContentType=\"application/vnd.openxmlformats-package.relationships+xml\"/>\n <Default Extension=\"xml\" ContentType=\"application/xml\"/>\n <Default Extension=\"jpeg\" ContentType=\"image/jpeg\"/>\n <Default Extension=\"jpg\" ContentType=\"image/jpeg\"/>\n <Default Extension=\"png\" ContentType=\"image/png\"/>\n <Override PartName=\"/ppt/presentation.xml\" ContentType=\"application/vnd.openxmlformats-officedocument.presentationml.presentation.main+xml\"/>\n <Override PartName=\"/ppt/slideMasters/slideMaster1.xml\" ContentType=\"application/vnd.openxmlformats-officedocument.presentationml.slideMaster+xml\"/>\n <Override PartName=\"/ppt/slideLayouts/slideLayout1.xml\" ContentType=\"application/vnd.openxmlformats-officedocument.presentationml.slideLayout+xml\"/>\n <Override PartName=\"/ppt/slideLayouts/slideLayout2.xml\" ContentType=\"application/vnd.openxmlformats-officedocument.presentationml.slideLayout+xml\"/>\n <Override PartName=\"/ppt/theme/theme1.xml\" ContentType=\"application/vnd.openxmlformats-officedocument.theme+xml\"/>\n ${overrides}\n <Override PartName=\"/docProps/core.xml\" ContentType=\"application/vnd.openxmlformats-package.core-properties+xml\"/>\n <Override PartName=\"/docProps/app.xml\" ContentType=\"application/vnd.openxmlformats-officedocument.extended-properties+xml\"/>\n</Types>`;\n}\n\n// Generate _rels/.rels\nfunction generateRootRelsXml(): string {\n return `<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>\n<Relationships xmlns=\"http://schemas.openxmlformats.org/package/2006/relationships\">\n <Relationship Id=\"rId1\" Type=\"http://schemas.openxmlformats.org/officeDocument/2006/relationships/officeDocument\" Target=\"ppt/presentation.xml\"/>\n <Relationship Id=\"rId2\" Type=\"http://schemas.openxmlformats.org/package/2006/relationships/metadata/core-properties\" Target=\"docProps/core.xml\"/>\n <Relationship Id=\"rId3\" Type=\"http://schemas.openxmlformats.org/officeDocument/2006/relationships/extended-properties\" Target=\"docProps/app.xml\"/>\n</Relationships>`;\n}\n\n// Generate ppt/presentation.xml\nfunction generatePresentationXml(slideCount: number, options: PresentationOptions): string {\n let slideIdList = \"\";\n let slideRelIds = \"\";\n\n for (let i = 1; i <= slideCount; i++) {\n slideIdList += `<p:sldId id=\"${255 + i}\" r:id=\"rId${i + 2}\"/>`;\n }\n\n const layout = options.layout || \"LAYOUT_16x9\";\n const slideWidth = layout === \"LAYOUT_4x3\" ? \"9144000\" : \"12192000\";\n const slideHeight = \"6858000\";\n\n return `<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>\n<p:presentation xmlns:a=\"http://schemas.openxmlformats.org/drawingml/2006/main\"\n xmlns:r=\"http://schemas.openxmlformats.org/officeDocument/2006/relationships\"\n xmlns:p=\"http://schemas.openxmlformats.org/presentationml/2006/main\"\n saveSubsetFonts=\"1\">\n <p:sldMasterIdLst>\n <p:sldMasterId id=\"2147483648\" r:id=\"rId1\"/>\n </p:sldMasterIdLst>\n <p:sldIdLst>\n ${slideIdList}\n </p:sldIdLst>\n <p:sldSz cx=\"${slideWidth}\" cy=\"${slideHeight}\"/>\n <p:notesSz cx=\"${slideHeight}\" cy=\"${slideWidth}\"/>\n</p:presentation>`;\n}\n\n// Generate ppt/_rels/presentation.xml.rels\nfunction generatePresentationRelsXml(slideCount: number): string {\n let slideRels = \"\";\n for (let i = 1; i <= slideCount; i++) {\n slideRels += `<Relationship Id=\"rId${i + 2}\" Type=\"http://schemas.openxmlformats.org/officeDocument/2006/relationships/slide\" Target=\"slides/slide${i}.xml\"/>`;\n }\n\n return `<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>\n<Relationships xmlns=\"http://schemas.openxmlformats.org/package/2006/relationships\">\n <Relationship Id=\"rId1\" Type=\"http://schemas.openxmlformats.org/officeDocument/2006/relationships/slideMaster\" Target=\"slideMasters/slideMaster1.xml\"/>\n <Relationship Id=\"rId2\" Type=\"http://schemas.openxmlformats.org/officeDocument/2006/relationships/theme\" Target=\"theme/theme1.xml\"/>\n ${slideRels}\n</Relationships>`;\n}\n\n// Generate ppt/theme/theme1.xml\nfunction generateThemeXml(theme: PresentationTheme): string {\n const t = { ...DEFAULT_THEME, ...theme };\n\n return `<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>\n<a:theme xmlns:a=\"http://schemas.openxmlformats.org/drawingml/2006/main\" name=\"OpenSentinel Theme\">\n <a:themeElements>\n <a:clrScheme name=\"OpenSentinel\">\n <a:dk1><a:srgbClr val=\"000000\"/></a:dk1>\n <a:lt1><a:srgbClr val=\"${normalizeColor(t.backgroundColor!)}\"/></a:lt1>\n <a:dk2><a:srgbClr val=\"${normalizeColor(t.titleColor!)}\"/></a:dk2>\n <a:lt2><a:srgbClr val=\"EEECE1\"/></a:lt2>\n <a:accent1><a:srgbClr val=\"${normalizeColor(t.accentColor!)}\"/></a:accent1>\n <a:accent2><a:srgbClr val=\"C0504D\"/></a:accent2>\n <a:accent3><a:srgbClr val=\"9BBB59\"/></a:accent3>\n <a:accent4><a:srgbClr val=\"8064A2\"/></a:accent4>\n <a:accent5><a:srgbClr val=\"4BACC6\"/></a:accent5>\n <a:accent6><a:srgbClr val=\"F79646\"/></a:accent6>\n <a:hlink><a:srgbClr val=\"0000FF\"/></a:hlink>\n <a:folHlink><a:srgbClr val=\"800080\"/></a:folHlink>\n </a:clrScheme>\n <a:fontScheme name=\"OpenSentinel\">\n <a:majorFont>\n <a:latin typeface=\"${t.titleFont}\"/>\n <a:ea typeface=\"\"/>\n <a:cs typeface=\"\"/>\n </a:majorFont>\n <a:minorFont>\n <a:latin typeface=\"${t.bodyFont}\"/>\n <a:ea typeface=\"\"/>\n <a:cs typeface=\"\"/>\n </a:minorFont>\n </a:fontScheme>\n <a:fmtScheme name=\"OpenSentinel\">\n <a:fillStyleLst>\n <a:solidFill><a:schemeClr val=\"phClr\"/></a:solidFill>\n <a:solidFill><a:schemeClr val=\"phClr\"/></a:solidFill>\n <a:solidFill><a:schemeClr val=\"phClr\"/></a:solidFill>\n </a:fillStyleLst>\n <a:lnStyleLst>\n <a:ln w=\"9525\"><a:solidFill><a:schemeClr val=\"phClr\"/></a:solidFill></a:ln>\n <a:ln w=\"25400\"><a:solidFill><a:schemeClr val=\"phClr\"/></a:solidFill></a:ln>\n <a:ln w=\"38100\"><a:solidFill><a:schemeClr val=\"phClr\"/></a:solidFill></a:ln>\n </a:lnStyleLst>\n <a:effectStyleLst>\n <a:effectStyle><a:effectLst/></a:effectStyle>\n <a:effectStyle><a:effectLst/></a:effectStyle>\n <a:effectStyle><a:effectLst/></a:effectStyle>\n </a:effectStyleLst>\n <a:bgFillStyleLst>\n <a:solidFill><a:schemeClr val=\"phClr\"/></a:solidFill>\n <a:solidFill><a:schemeClr val=\"phClr\"/></a:solidFill>\n <a:solidFill><a:schemeClr val=\"phClr\"/></a:solidFill>\n </a:bgFillStyleLst>\n </a:fmtScheme>\n </a:themeElements>\n</a:theme>`;\n}\n\n// Generate ppt/slideMasters/slideMaster1.xml\nfunction generateSlideMasterXml(theme: PresentationTheme, layout: string): string {\n const t = { ...DEFAULT_THEME, ...theme };\n const slideWidth = layout === \"LAYOUT_4x3\" ? 9144000 : 12192000;\n const slideHeight = 6858000;\n\n return `<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>\n<p:sldMaster xmlns:a=\"http://schemas.openxmlformats.org/drawingml/2006/main\"\n xmlns:r=\"http://schemas.openxmlformats.org/officeDocument/2006/relationships\"\n xmlns:p=\"http://schemas.openxmlformats.org/presentationml/2006/main\">\n <p:cSld>\n <p:bg>\n <p:bgPr>\n <a:solidFill>\n <a:srgbClr val=\"${normalizeColor(t.backgroundColor!)}\"/>\n </a:solidFill>\n <a:effectLst/>\n </p:bgPr>\n </p:bg>\n <p:spTree>\n <p:nvGrpSpPr>\n <p:cNvPr id=\"1\" name=\"\"/>\n <p:cNvGrpSpPr/>\n <p:nvPr/>\n </p:nvGrpSpPr>\n <p:grpSpPr>\n <a:xfrm>\n <a:off x=\"0\" y=\"0\"/>\n <a:ext cx=\"0\" cy=\"0\"/>\n <a:chOff x=\"0\" y=\"0\"/>\n <a:chExt cx=\"0\" cy=\"0\"/>\n </a:xfrm>\n </p:grpSpPr>\n </p:spTree>\n </p:cSld>\n <p:clrMap bg1=\"lt1\" tx1=\"dk1\" bg2=\"lt2\" tx2=\"dk2\" accent1=\"accent1\" accent2=\"accent2\" accent3=\"accent3\" accent4=\"accent4\" accent5=\"accent5\" accent6=\"accent6\" hlink=\"hlink\" folHlink=\"folHlink\"/>\n <p:sldLayoutIdLst>\n <p:sldLayoutId id=\"2147483649\" r:id=\"rId1\"/>\n <p:sldLayoutId id=\"2147483650\" r:id=\"rId2\"/>\n </p:sldLayoutIdLst>\n</p:sldMaster>`;\n}\n\n// Generate ppt/slideMasters/_rels/slideMaster1.xml.rels\nfunction generateSlideMasterRelsXml(): string {\n return `<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>\n<Relationships xmlns=\"http://schemas.openxmlformats.org/package/2006/relationships\">\n <Relationship Id=\"rId1\" Type=\"http://schemas.openxmlformats.org/officeDocument/2006/relationships/slideLayout\" Target=\"../slideLayouts/slideLayout1.xml\"/>\n <Relationship Id=\"rId2\" Type=\"http://schemas.openxmlformats.org/officeDocument/2006/relationships/slideLayout\" Target=\"../slideLayouts/slideLayout2.xml\"/>\n <Relationship Id=\"rId3\" Type=\"http://schemas.openxmlformats.org/officeDocument/2006/relationships/theme\" Target=\"../theme/theme1.xml\"/>\n</Relationships>`;\n}\n\n// Generate slide layout XML\nfunction generateSlideLayoutXml(layoutType: \"title\" | \"content\"): string {\n return `<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>\n<p:sldLayout xmlns:a=\"http://schemas.openxmlformats.org/drawingml/2006/main\"\n xmlns:r=\"http://schemas.openxmlformats.org/officeDocument/2006/relationships\"\n xmlns:p=\"http://schemas.openxmlformats.org/presentationml/2006/main\"\n type=\"${layoutType === \"title\" ? \"title\" : \"obj\"}\">\n <p:cSld name=\"${layoutType === \"title\" ? \"Title Slide\" : \"Title and Content\"}\">\n <p:spTree>\n <p:nvGrpSpPr>\n <p:cNvPr id=\"1\" name=\"\"/>\n <p:cNvGrpSpPr/>\n <p:nvPr/>\n </p:nvGrpSpPr>\n <p:grpSpPr/>\n </p:spTree>\n </p:cSld>\n <p:clrMapOvr><a:masterClrMapping/></p:clrMapOvr>\n</p:sldLayout>`;\n}\n\n// Generate slide layout rels\nfunction generateSlideLayoutRelsXml(): string {\n return `<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>\n<Relationships xmlns=\"http://schemas.openxmlformats.org/package/2006/relationships\">\n <Relationship Id=\"rId1\" Type=\"http://schemas.openxmlformats.org/officeDocument/2006/relationships/slideMaster\" Target=\"../slideMasters/slideMaster1.xml\"/>\n</Relationships>`;\n}\n\n// Generate slide XML\nfunction generateSlideXml(\n slide: Slide,\n slideIndex: number,\n options: PresentationOptions\n): string {\n const theme = { ...DEFAULT_THEME, ...options.theme };\n const layout = options.layout || \"LAYOUT_16x9\";\n const slideWidth = layout === \"LAYOUT_4x3\" ? 9144000 : 12192000;\n const slideHeight = 6858000;\n\n let shapesXml = \"\";\n let shapeId = 2;\n\n // Background\n let bgXml = \"\";\n if (slide.backgroundColor) {\n bgXml = `<p:bg>\n <p:bgPr>\n <a:solidFill><a:srgbClr val=\"${normalizeColor(slide.backgroundColor)}\"/></a:solidFill>\n <a:effectLst/>\n </p:bgPr>\n </p:bg>`;\n }\n\n // Title\n if (slide.title) {\n const titleY = slide.layout === \"title\" ? 30 : 5;\n const titleFontSize = slide.layout === \"title\" ? 4400 : 3200;\n\n shapesXml += `<p:sp>\n <p:nvSpPr>\n <p:cNvPr id=\"${shapeId++}\" name=\"Title\"/>\n <p:cNvSpPr><a:spLocks noGrp=\"1\"/></p:cNvSpPr>\n <p:nvPr><p:ph type=\"title\"/></p:nvPr>\n </p:nvSpPr>\n <p:spPr>\n <a:xfrm>\n <a:off x=\"${Math.round(slideWidth * 0.05)}\" y=\"${Math.round(slideHeight * titleY / 100)}\"/>\n <a:ext cx=\"${Math.round(slideWidth * 0.9)}\" cy=\"${Math.round(slideHeight * 0.15)}\"/>\n </a:xfrm>\n </p:spPr>\n <p:txBody>\n <a:bodyPr anchor=\"ctr\"/>\n <a:lstStyle/>\n <a:p>\n <a:pPr algn=\"ctr\"/>\n <a:r>\n <a:rPr lang=\"en-US\" sz=\"${titleFontSize}\" b=\"1\">\n <a:solidFill><a:srgbClr val=\"${normalizeColor(theme.titleColor!)}\"/></a:solidFill>\n <a:latin typeface=\"${theme.titleFont}\"/>\n </a:rPr>\n <a:t>${escapeXml(slide.title)}</a:t>\n </a:r>\n </a:p>\n </p:txBody>\n </p:sp>`;\n }\n\n // Subtitle (for title slides)\n if (slide.subtitle && slide.layout === \"title\") {\n shapesXml += `<p:sp>\n <p:nvSpPr>\n <p:cNvPr id=\"${shapeId++}\" name=\"Subtitle\"/>\n <p:cNvSpPr><a:spLocks noGrp=\"1\"/></p:cNvSpPr>\n <p:nvPr><p:ph type=\"subTitle\"/></p:nvPr>\n </p:nvSpPr>\n <p:spPr>\n <a:xfrm>\n <a:off x=\"${Math.round(slideWidth * 0.1)}\" y=\"${Math.round(slideHeight * 0.55)}\"/>\n <a:ext cx=\"${Math.round(slideWidth * 0.8)}\" cy=\"${Math.round(slideHeight * 0.15)}\"/>\n </a:xfrm>\n </p:spPr>\n <p:txBody>\n <a:bodyPr anchor=\"t\"/>\n <a:lstStyle/>\n <a:p>\n <a:pPr algn=\"ctr\"/>\n <a:r>\n <a:rPr lang=\"en-US\" sz=\"2400\">\n <a:solidFill><a:srgbClr val=\"${normalizeColor(theme.textColor!)}\"/></a:solidFill>\n <a:latin typeface=\"${theme.bodyFont}\"/>\n </a:rPr>\n <a:t>${escapeXml(slide.subtitle)}</a:t>\n </a:r>\n </a:p>\n </p:txBody>\n </p:sp>`;\n }\n\n // Content elements\n if (slide.content) {\n for (const element of slide.content) {\n shapesXml += generateContentElementXml(element, shapeId++, options, theme);\n }\n }\n\n return `<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>\n<p:sld xmlns:a=\"http://schemas.openxmlformats.org/drawingml/2006/main\"\n xmlns:r=\"http://schemas.openxmlformats.org/officeDocument/2006/relationships\"\n xmlns:p=\"http://schemas.openxmlformats.org/presentationml/2006/main\">\n <p:cSld>\n ${bgXml}\n <p:spTree>\n <p:nvGrpSpPr>\n <p:cNvPr id=\"1\" name=\"\"/>\n <p:cNvGrpSpPr/>\n <p:nvPr/>\n </p:nvGrpSpPr>\n <p:grpSpPr>\n <a:xfrm>\n <a:off x=\"0\" y=\"0\"/>\n <a:ext cx=\"0\" cy=\"0\"/>\n <a:chOff x=\"0\" y=\"0\"/>\n <a:chExt cx=\"0\" cy=\"0\"/>\n </a:xfrm>\n </p:grpSpPr>\n ${shapesXml}\n </p:spTree>\n </p:cSld>\n <p:clrMapOvr><a:masterClrMapping/></p:clrMapOvr>\n</p:sld>`;\n}\n\n// Generate content element XML\nfunction generateContentElementXml(\n element: SlideContent,\n shapeId: number,\n options: PresentationOptions,\n theme: PresentationTheme\n): string {\n const layout = options.layout || \"LAYOUT_16x9\";\n const slideWidth = layout === \"LAYOUT_4x3\" ? 9144000 : 12192000;\n const slideHeight = 6858000;\n\n // Default positions based on content type\n const x = element.x !== undefined ? percentToEmuX(element.x, layout) : Math.round(slideWidth * 0.05);\n const y = element.y !== undefined ? percentToEmuY(element.y, layout) : Math.round(slideHeight * 0.25);\n const width = element.width !== undefined ? percentToEmuX(element.width, layout) : Math.round(slideWidth * 0.9);\n const height = element.height !== undefined ? percentToEmuY(element.height, layout) : Math.round(slideHeight * 0.65);\n\n switch (element.type) {\n case \"text\":\n return generateTextElementXml(element, shapeId, x, y, width, height, theme);\n case \"bullet-list\":\n return generateBulletListElementXml(element, shapeId, x, y, width, height, theme);\n case \"numbered-list\":\n return generateNumberedListElementXml(element, shapeId, x, y, width, height, theme);\n case \"table\":\n return generateTableElementXml(element, shapeId, x, y, width, height, theme);\n case \"shape\":\n return generateShapeElementXml(element, shapeId, x, y, width, height);\n case \"image\":\n return generateImagePlaceholderXml(element, shapeId, x, y, width, height);\n case \"chart\":\n return generateChartPlaceholderXml(element, shapeId, x, y, width, height, theme);\n default:\n return \"\";\n }\n}\n\n// Generate text element XML\nfunction generateTextElementXml(\n element: TextElement,\n shapeId: number,\n x: number,\n y: number,\n width: number,\n height: number,\n theme: PresentationTheme\n): string {\n const fontSize = (element.fontSize || 18) * 100;\n const color = element.color ? normalizeColor(element.color) : normalizeColor(theme.textColor!);\n const font = element.fontFace || theme.bodyFont;\n const align = element.align || \"left\";\n const valign = element.valign || \"top\";\n\n let rPr = `<a:rPr lang=\"en-US\" sz=\"${fontSize}\"`;\n if (element.bold) rPr += ' b=\"1\"';\n if (element.italic) rPr += ' i=\"1\"';\n if (element.underline) rPr += ' u=\"sng\"';\n rPr += `><a:solidFill><a:srgbClr val=\"${color}\"/></a:solidFill><a:latin typeface=\"${font}\"/></a:rPr>`;\n\n return `<p:sp>\n <p:nvSpPr>\n <p:cNvPr id=\"${shapeId}\" name=\"TextBox ${shapeId}\"/>\n <p:cNvSpPr txBox=\"1\"/>\n <p:nvPr/>\n </p:nvSpPr>\n <p:spPr>\n <a:xfrm><a:off x=\"${x}\" y=\"${y}\"/><a:ext cx=\"${width}\" cy=\"${height}\"/></a:xfrm>\n <a:prstGeom prst=\"rect\"><a:avLst/></a:prstGeom>\n <a:noFill/>\n </p:spPr>\n <p:txBody>\n <a:bodyPr anchor=\"${valign === \"middle\" ? \"ctr\" : valign === \"bottom\" ? \"b\" : \"t\"}\"/>\n <a:lstStyle/>\n <a:p>\n <a:pPr algn=\"${align === \"center\" ? \"ctr\" : align === \"right\" ? \"r\" : \"l\"}\"/>\n <a:r>${rPr}<a:t>${escapeXml(element.text)}</a:t></a:r>\n </a:p>\n </p:txBody>\n </p:sp>`;\n}\n\n// Generate bullet list element XML\nfunction generateBulletListElementXml(\n element: BulletListElement,\n shapeId: number,\n x: number,\n y: number,\n width: number,\n height: number,\n theme: PresentationTheme\n): string {\n const fontSize = (element.fontSize || 18) * 100;\n const color = element.color ? normalizeColor(element.color) : normalizeColor(theme.textColor!);\n const bulletColor = element.bulletColor ? normalizeColor(element.bulletColor) : normalizeColor(theme.accentColor!);\n\n let paragraphs = \"\";\n for (const item of element.items) {\n paragraphs += `<a:p>\n <a:pPr marL=\"457200\" indent=\"-457200\">\n <a:buFont typeface=\"Arial\"/>\n <a:buChar char=\"\\u2022\"/>\n <a:buClr><a:srgbClr val=\"${bulletColor}\"/></a:buClr>\n </a:pPr>\n <a:r>\n <a:rPr lang=\"en-US\" sz=\"${fontSize}\">\n <a:solidFill><a:srgbClr val=\"${color}\"/></a:solidFill>\n <a:latin typeface=\"${theme.bodyFont}\"/>\n </a:rPr>\n <a:t>${escapeXml(item)}</a:t>\n </a:r>\n </a:p>`;\n }\n\n return `<p:sp>\n <p:nvSpPr>\n <p:cNvPr id=\"${shapeId}\" name=\"Content ${shapeId}\"/>\n <p:cNvSpPr><a:spLocks noGrp=\"1\"/></p:cNvSpPr>\n <p:nvPr><p:ph idx=\"1\"/></p:nvPr>\n </p:nvSpPr>\n <p:spPr>\n <a:xfrm><a:off x=\"${x}\" y=\"${y}\"/><a:ext cx=\"${width}\" cy=\"${height}\"/></a:xfrm>\n </p:spPr>\n <p:txBody>\n <a:bodyPr/>\n <a:lstStyle/>\n ${paragraphs}\n </p:txBody>\n </p:sp>`;\n}\n\n// Generate numbered list element XML\nfunction generateNumberedListElementXml(\n element: NumberedListElement,\n shapeId: number,\n x: number,\n y: number,\n width: number,\n height: number,\n theme: PresentationTheme\n): string {\n const fontSize = (element.fontSize || 18) * 100;\n const color = element.color ? normalizeColor(element.color) : normalizeColor(theme.textColor!);\n const startNum = element.startNumber || 1;\n\n let paragraphs = \"\";\n for (let i = 0; i < element.items.length; i++) {\n paragraphs += `<a:p>\n <a:pPr marL=\"457200\" indent=\"-457200\">\n <a:buFont typeface=\"Arial\"/>\n <a:buAutoNum type=\"arabicPeriod\" startAt=\"${startNum}\"/>\n </a:pPr>\n <a:r>\n <a:rPr lang=\"en-US\" sz=\"${fontSize}\">\n <a:solidFill><a:srgbClr val=\"${color}\"/></a:solidFill>\n <a:latin typeface=\"${theme.bodyFont}\"/>\n </a:rPr>\n <a:t>${escapeXml(element.items[i])}</a:t>\n </a:r>\n </a:p>`;\n }\n\n return `<p:sp>\n <p:nvSpPr>\n <p:cNvPr id=\"${shapeId}\" name=\"Content ${shapeId}\"/>\n <p:cNvSpPr><a:spLocks noGrp=\"1\"/></p:cNvSpPr>\n <p:nvPr><p:ph idx=\"1\"/></p:nvPr>\n </p:nvSpPr>\n <p:spPr>\n <a:xfrm><a:off x=\"${x}\" y=\"${y}\"/><a:ext cx=\"${width}\" cy=\"${height}\"/></a:xfrm>\n </p:spPr>\n <p:txBody>\n <a:bodyPr/>\n <a:lstStyle/>\n ${paragraphs}\n </p:txBody>\n </p:sp>`;\n}\n\n// Generate table element XML\nfunction generateTableElementXml(\n element: TableElement,\n shapeId: number,\n x: number,\n y: number,\n width: number,\n height: number,\n theme: PresentationTheme\n): string {\n const colCount = element.headers?.length || element.rows[0]?.length || 1;\n const rowCount = (element.headers ? 1 : 0) + element.rows.length;\n const colWidth = Math.round(width / colCount);\n const rowHeight = Math.round(height / rowCount);\n\n const headerColor = element.headerColor ? normalizeColor(element.headerColor) : normalizeColor(theme.accentColor!);\n const headerTextColor = element.headerTextColor ? normalizeColor(element.headerTextColor) : \"FFFFFF\";\n const borderColor = element.borderColor ? normalizeColor(element.borderColor) : \"CCCCCC\";\n const altRowColor = element.alternateRowColor ? normalizeColor(element.alternateRowColor) : \"F5F5F5\";\n\n let gridCols = \"\";\n for (let i = 0; i < colCount; i++) {\n gridCols += `<a:gridCol w=\"${colWidth}\"/>`;\n }\n\n let rowsXml = \"\";\n\n // Header row\n if (element.headers) {\n let cells = \"\";\n for (const header of element.headers) {\n cells += `<a:tc>\n <a:txBody>\n <a:bodyPr/>\n <a:lstStyle/>\n <a:p>\n <a:pPr algn=\"ctr\"/>\n <a:r>\n <a:rPr lang=\"en-US\" sz=\"1400\" b=\"1\">\n <a:solidFill><a:srgbClr val=\"${headerTextColor}\"/></a:solidFill>\n </a:rPr>\n <a:t>${escapeXml(header)}</a:t>\n </a:r>\n </a:p>\n </a:txBody>\n <a:tcPr>\n <a:solidFill><a:srgbClr val=\"${headerColor}\"/></a:solidFill>\n </a:tcPr>\n </a:tc>`;\n }\n rowsXml += `<a:tr h=\"${rowHeight}\">${cells}</a:tr>`;\n }\n\n // Data rows\n for (let rowIdx = 0; rowIdx < element.rows.length; rowIdx++) {\n const row = element.rows[rowIdx];\n const rowBg = rowIdx % 2 === 1 ? altRowColor : \"FFFFFF\";\n let cells = \"\";\n\n for (const cell of row) {\n cells += `<a:tc>\n <a:txBody>\n <a:bodyPr/>\n <a:lstStyle/>\n <a:p>\n <a:r>\n <a:rPr lang=\"en-US\" sz=\"1200\">\n <a:solidFill><a:srgbClr val=\"${normalizeColor(theme.textColor!)}\"/></a:solidFill>\n </a:rPr>\n <a:t>${escapeXml(cell)}</a:t>\n </a:r>\n </a:p>\n </a:txBody>\n <a:tcPr>\n <a:solidFill><a:srgbClr val=\"${rowBg}\"/></a:solidFill>\n </a:tcPr>\n </a:tc>`;\n }\n rowsXml += `<a:tr h=\"${rowHeight}\">${cells}</a:tr>`;\n }\n\n return `<p:graphicFrame>\n <p:nvGraphicFramePr>\n <p:cNvPr id=\"${shapeId}\" name=\"Table ${shapeId}\"/>\n <p:cNvGraphicFramePr><a:graphicFrameLocks noGrp=\"1\"/></p:cNvGraphicFramePr>\n <p:nvPr/>\n </p:nvGraphicFramePr>\n <p:xfrm><a:off x=\"${x}\" y=\"${y}\"/><a:ext cx=\"${width}\" cy=\"${height}\"/></p:xfrm>\n <a:graphic>\n <a:graphicData uri=\"http://schemas.openxmlformats.org/drawingml/2006/table\">\n <a:tbl>\n <a:tblPr firstRow=\"1\" bandRow=\"1\">\n <a:tableStyleId>{5C22544A-7EE6-4342-B048-85BDC9FD1C3A}</a:tableStyleId>\n </a:tblPr>\n <a:tblGrid>${gridCols}</a:tblGrid>\n ${rowsXml}\n </a:tbl>\n </a:graphicData>\n </a:graphic>\n </p:graphicFrame>`;\n}\n\n// Generate shape element XML\nfunction generateShapeElementXml(\n element: ShapeElement,\n shapeId: number,\n x: number,\n y: number,\n width: number,\n height: number\n): string {\n const shapeTypeMap: Record<string, string> = {\n rectangle: \"rect\",\n ellipse: \"ellipse\",\n triangle: \"triangle\",\n arrow: \"rightArrow\",\n line: \"line\",\n };\n\n const prstGeom = shapeTypeMap[element.shapeType] || \"rect\";\n const fill = element.fill ? normalizeColor(element.fill) : \"4472C4\";\n const stroke = element.stroke ? normalizeColor(element.stroke) : fill;\n const strokeWidth = (element.strokeWidth || 1) * 12700;\n\n let textXml = \"\";\n if (element.text) {\n const textColor = element.textColor ? normalizeColor(element.textColor) : \"FFFFFF\";\n textXml = `<p:txBody>\n <a:bodyPr anchor=\"ctr\"/>\n <a:lstStyle/>\n <a:p>\n <a:pPr algn=\"ctr\"/>\n <a:r>\n <a:rPr lang=\"en-US\" sz=\"1400\">\n <a:solidFill><a:srgbClr val=\"${textColor}\"/></a:solidFill>\n </a:rPr>\n <a:t>${escapeXml(element.text)}</a:t>\n </a:r>\n </a:p>\n </p:txBody>`;\n }\n\n return `<p:sp>\n <p:nvSpPr>\n <p:cNvPr id=\"${shapeId}\" name=\"Shape ${shapeId}\"/>\n <p:cNvSpPr/>\n <p:nvPr/>\n </p:nvSpPr>\n <p:spPr>\n <a:xfrm><a:off x=\"${x}\" y=\"${y}\"/><a:ext cx=\"${width}\" cy=\"${height}\"/></a:xfrm>\n <a:prstGeom prst=\"${prstGeom}\"><a:avLst/></a:prstGeom>\n <a:solidFill><a:srgbClr val=\"${fill}\"/></a:solidFill>\n <a:ln w=\"${strokeWidth}\"><a:solidFill><a:srgbClr val=\"${stroke}\"/></a:solidFill></a:ln>\n </p:spPr>\n ${textXml}\n </p:sp>`;\n}\n\n// Generate image placeholder XML\nfunction generateImagePlaceholderXml(\n element: ImageElement,\n shapeId: number,\n x: number,\n y: number,\n width: number,\n height: number\n): string {\n return `<p:sp>\n <p:nvSpPr>\n <p:cNvPr id=\"${shapeId}\" name=\"Image Placeholder ${shapeId}\"/>\n <p:cNvSpPr/>\n <p:nvPr/>\n </p:nvSpPr>\n <p:spPr>\n <a:xfrm><a:off x=\"${x}\" y=\"${y}\"/><a:ext cx=\"${width}\" cy=\"${height}\"/></a:xfrm>\n <a:prstGeom prst=\"rect\"><a:avLst/></a:prstGeom>\n <a:solidFill><a:srgbClr val=\"E0E0E0\"/></a:solidFill>\n <a:ln><a:solidFill><a:srgbClr val=\"CCCCCC\"/></a:solidFill></a:ln>\n </p:spPr>\n <p:txBody>\n <a:bodyPr anchor=\"ctr\"/>\n <a:lstStyle/>\n <a:p>\n <a:pPr algn=\"ctr\"/>\n <a:r>\n <a:rPr lang=\"en-US\" sz=\"1200\" i=\"1\">\n <a:solidFill><a:srgbClr val=\"666666\"/></a:solidFill>\n </a:rPr>\n <a:t>[Image: ${escapeXml(element.path)}]</a:t>\n </a:r>\n </a:p>\n </p:txBody>\n </p:sp>`;\n}\n\n// Generate chart placeholder XML\nfunction generateChartPlaceholderXml(\n element: ChartElement,\n shapeId: number,\n x: number,\n y: number,\n width: number,\n height: number,\n theme: PresentationTheme\n): string {\n const title = element.title || `${element.chartType.charAt(0).toUpperCase() + element.chartType.slice(1)} Chart`;\n\n return `<p:sp>\n <p:nvSpPr>\n <p:cNvPr id=\"${shapeId}\" name=\"Chart Placeholder ${shapeId}\"/>\n <p:cNvSpPr/>\n <p:nvPr/>\n </p:nvSpPr>\n <p:spPr>\n <a:xfrm><a:off x=\"${x}\" y=\"${y}\"/><a:ext cx=\"${width}\" cy=\"${height}\"/></a:xfrm>\n <a:prstGeom prst=\"rect\"><a:avLst/></a:prstGeom>\n <a:solidFill><a:srgbClr val=\"F5F5F5\"/></a:solidFill>\n <a:ln><a:solidFill><a:srgbClr val=\"${normalizeColor(theme.accentColor!)}\"/></a:solidFill></a:ln>\n </p:spPr>\n <p:txBody>\n <a:bodyPr anchor=\"ctr\"/>\n <a:lstStyle/>\n <a:p>\n <a:pPr algn=\"ctr\"/>\n <a:r>\n <a:rPr lang=\"en-US\" sz=\"1400\" b=\"1\">\n <a:solidFill><a:srgbClr val=\"${normalizeColor(theme.textColor!)}\"/></a:solidFill>\n </a:rPr>\n <a:t>${escapeXml(title)}</a:t>\n </a:r>\n </a:p>\n <a:p>\n <a:pPr algn=\"ctr\"/>\n <a:r>\n <a:rPr lang=\"en-US\" sz=\"1000\" i=\"1\">\n <a:solidFill><a:srgbClr val=\"666666\"/></a:solidFill>\n </a:rPr>\n <a:t>[Chart placeholder - Labels: ${element.labels.join(\", \")}]</a:t>\n </a:r>\n </a:p>\n </p:txBody>\n </p:sp>`;\n}\n\n// Generate slide rels XML\nfunction generateSlideRelsXml(slideIndex: number): string {\n return `<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>\n<Relationships xmlns=\"http://schemas.openxmlformats.org/package/2006/relationships\">\n <Relationship Id=\"rId1\" Type=\"http://schemas.openxmlformats.org/officeDocument/2006/relationships/slideLayout\" Target=\"../slideLayouts/slideLayout2.xml\"/>\n</Relationships>`;\n}\n\n// Generate docProps/core.xml\nfunction generateCorePropsXml(options: PresentationOptions): string {\n const now = new Date().toISOString();\n return `<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>\n<cp:coreProperties xmlns:cp=\"http://schemas.openxmlformats.org/package/2006/metadata/core-properties\"\n xmlns:dc=\"http://purl.org/dc/elements/1.1/\"\n xmlns:dcterms=\"http://purl.org/dc/terms/\"\n xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\">\n ${options.title ? `<dc:title>${escapeXml(options.title)}</dc:title>` : \"\"}\n ${options.author ? `<dc:creator>${escapeXml(options.author)}</dc:creator>` : \"<dc:creator>OpenSentinel</dc:creator>\"}\n ${options.subject ? `<dc:subject>${escapeXml(options.subject)}</dc:subject>` : \"\"}\n <dcterms:created xsi:type=\"dcterms:W3CDTF\">${now}</dcterms:created>\n <dcterms:modified xsi:type=\"dcterms:W3CDTF\">${now}</dcterms:modified>\n</cp:coreProperties>`;\n}\n\n// Generate docProps/app.xml\nfunction generateAppPropsXml(options: PresentationOptions, slideCount: number): string {\n return `<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>\n<Properties xmlns=\"http://schemas.openxmlformats.org/officeDocument/2006/extended-properties\">\n <Application>OpenSentinel Presentation Generator</Application>\n <AppVersion>1.0</AppVersion>\n ${options.company ? `<Company>${escapeXml(options.company)}</Company>` : \"\"}\n <Slides>${slideCount}</Slides>\n <HiddenSlides>0</HiddenSlides>\n</Properties>`;\n}\n\n// Generate presentation using pptxgenjs library if available, otherwise create raw OOXML\nexport async function generatePresentation(\n slides: Slide[],\n filename?: string,\n options: PresentationOptions = {}\n): Promise<PresentationResult> {\n const filePath = filename\n ? isPathAllowed(filename)\n ? filename\n : join(tmpdir(), filename)\n : getTempPath();\n\n if (slides.length === 0) {\n return { success: false, error: \"No slides provided\" };\n }\n\n try {\n await mkdir(dirname(filePath), { recursive: true });\n\n // Try to use pptxgenjs library if available\n try {\n const PptxGenJS = await import(\"pptxgenjs\");\n return await generateWithPptxGenJs(slides, filePath, options, PptxGenJS.default);\n } catch {\n // Fallback: generate raw OOXML and create the ZIP manually\n console.log(\"[Presentations] pptxgenjs library not available, using raw OOXML generation\");\n return await generateRawPptx(slides, filePath, options);\n }\n } catch (error) {\n return {\n success: false,\n error: error instanceof Error ? error.message : String(error),\n };\n }\n}\n\n// Generate using pptxgenjs library\nasync function generateWithPptxGenJs(\n slides: Slide[],\n filePath: string,\n options: PresentationOptions,\n PptxGenJS: typeof import(\"pptxgenjs\").default\n): Promise<PresentationResult> {\n const pptx = new PptxGenJS();\n\n // Set presentation properties\n if (options.title) pptx.title = options.title;\n if (options.author) pptx.author = options.author;\n if (options.subject) pptx.subject = options.subject;\n if (options.company) pptx.company = options.company;\n\n // Set layout\n if (options.layout === \"LAYOUT_4x3\") {\n pptx.layout = \"LAYOUT_4x3\";\n } else {\n pptx.layout = \"LAYOUT_16x9\";\n }\n\n const theme = { ...DEFAULT_THEME, ...options.theme };\n\n for (const slideData of slides) {\n const slide = pptx.addSlide();\n\n // Background\n if (slideData.backgroundColor) {\n slide.background = { color: slideData.backgroundColor.replace(\"#\", \"\") };\n }\n\n // Title\n if (slideData.title) {\n const titleY = slideData.layout === \"title\" ? \"40%\" : \"5%\";\n const fontSize = slideData.layout === \"title\" ? 44 : 32;\n\n slide.addText(slideData.title, {\n x: \"5%\",\n y: titleY,\n w: \"90%\",\n h: \"15%\",\n fontSize,\n bold: true,\n color: theme.titleColor?.replace(\"#\", \"\"),\n fontFace: theme.titleFont,\n align: \"center\",\n valign: \"middle\",\n });\n }\n\n // Subtitle\n if (slideData.subtitle && slideData.layout === \"title\") {\n slide.addText(slideData.subtitle, {\n x: \"10%\",\n y: \"55%\",\n w: \"80%\",\n h: \"15%\",\n fontSize: 24,\n color: theme.textColor?.replace(\"#\", \"\"),\n fontFace: theme.bodyFont,\n align: \"center\",\n valign: \"top\",\n });\n }\n\n // Content elements\n if (slideData.content) {\n for (const element of slideData.content) {\n addContentElementToPptx(slide, element, theme);\n }\n }\n\n // Speaker notes\n if (slideData.notes) {\n slide.addNotes(slideData.notes);\n }\n }\n\n await pptx.writeFile({ fileName: filePath });\n return { success: true, filePath };\n}\n\n// Add content element to pptx slide\nfunction addContentElementToPptx(\n slide: ReturnType<import(\"pptxgenjs\").default[\"addSlide\"]>,\n element: SlideContent,\n theme: PresentationTheme\n): void {\n const x = element.x !== undefined ? `${element.x}%` : \"5%\";\n const y = element.y !== undefined ? `${element.y}%` : \"25%\";\n const w = element.width !== undefined ? `${element.width}%` : \"90%\";\n const h = element.height !== undefined ? `${element.height}%` : \"65%\";\n\n switch (element.type) {\n case \"text\":\n slide.addText(element.text, {\n x,\n y,\n w,\n h,\n fontSize: element.fontSize || 18,\n fontFace: element.fontFace || theme.bodyFont,\n color: element.color?.replace(\"#\", \"\") || theme.textColor?.replace(\"#\", \"\"),\n bold: element.bold,\n italic: element.italic,\n underline: element.underline ? { style: \"sng\" } : undefined,\n align: element.align,\n valign: element.valign,\n });\n break;\n\n case \"bullet-list\":\n slide.addText(\n element.items.map((item) => ({\n text: item,\n options: { bullet: { type: \"bullet\" } },\n })),\n {\n x,\n y,\n w,\n h,\n fontSize: element.fontSize || 18,\n color: element.color?.replace(\"#\", \"\") || theme.textColor?.replace(\"#\", \"\"),\n }\n );\n break;\n\n case \"numbered-list\":\n slide.addText(\n element.items.map((item, idx) => ({\n text: item,\n options: { bullet: { type: \"number\", numberStartAt: element.startNumber || 1 } },\n })),\n {\n x,\n y,\n w,\n h,\n fontSize: element.fontSize || 18,\n color: element.color?.replace(\"#\", \"\") || theme.textColor?.replace(\"#\", \"\"),\n }\n );\n break;\n\n case \"table\":\n const tableData: string[][] = [];\n if (element.headers) {\n tableData.push(element.headers);\n }\n tableData.push(...element.rows);\n\n slide.addTable(tableData, {\n x,\n y,\n w,\n h,\n border: { color: element.borderColor?.replace(\"#\", \"\") || \"CCCCCC\" },\n fill: { color: \"FFFFFF\" },\n fontFace: theme.bodyFont,\n fontSize: 12,\n });\n break;\n\n case \"shape\":\n const shapeTypeMap: Record<string, \"rect\" | \"ellipse\" | \"triangle\" | \"rightArrow\" | \"line\"> = {\n rectangle: \"rect\",\n ellipse: \"ellipse\",\n triangle: \"triangle\",\n arrow: \"rightArrow\",\n line: \"line\",\n };\n\n slide.addShape(shapeTypeMap[element.shapeType] || \"rect\", {\n x,\n y,\n w,\n h,\n fill: { color: element.fill?.replace(\"#\", \"\") || theme.accentColor?.replace(\"#\", \"\") },\n line: {\n color: element.stroke?.replace(\"#\", \"\") || element.fill?.replace(\"#\", \"\") || theme.accentColor?.replace(\"#\", \"\"),\n width: element.strokeWidth || 1,\n },\n });\n\n if (element.text) {\n slide.addText(element.text, {\n x,\n y,\n w,\n h,\n align: \"center\",\n valign: \"middle\",\n color: element.textColor?.replace(\"#\", \"\") || \"FFFFFF\",\n });\n }\n break;\n\n case \"image\":\n // For actual implementation, would need to read the image file\n slide.addText(`[Image: ${element.path}]`, {\n x,\n y,\n w,\n h,\n align: \"center\",\n valign: \"middle\",\n italic: true,\n color: \"666666\",\n fill: { color: \"E0E0E0\" },\n });\n break;\n\n case \"chart\":\n // For actual implementation, would need to create chart objects\n slide.addText(`[${element.chartType} Chart: ${element.title || \"Data\"}]`, {\n x,\n y,\n w,\n h,\n align: \"center\",\n valign: \"middle\",\n italic: true,\n color: \"666666\",\n fill: { color: \"F5F5F5\" },\n });\n break;\n }\n}\n\n// Generate raw OOXML and create ZIP\nasync function generateRawPptx(\n slides: Slide[],\n filePath: string,\n options: PresentationOptions\n): Promise<PresentationResult> {\n const finalOptions = { ...DEFAULT_OPTIONS, ...options };\n const theme = { ...DEFAULT_THEME, ...finalOptions.theme };\n\n try {\n // Try to use archiver for ZIP creation\n const archiver = await import(\"archiver\");\n const fs = await import(\"fs\");\n\n const output = fs.createWriteStream(filePath);\n const archive = archiver.default(\"zip\", { zlib: { level: 9 } });\n\n return new Promise((resolve) => {\n output.on(\"close\", () => {\n resolve({ success: true, filePath });\n });\n\n archive.on(\"error\", (err: Error) => {\n resolve({ success: false, error: err.message });\n });\n\n archive.pipe(output);\n\n // Add files to archive\n archive.append(generateContentTypesXml(slides.length), { name: \"[Content_Types].xml\" });\n archive.append(generateRootRelsXml(), { name: \"_rels/.rels\" });\n archive.append(generatePresentationXml(slides.length, finalOptions), { name: \"ppt/presentation.xml\" });\n archive.append(generatePresentationRelsXml(slides.length), { name: \"ppt/_rels/presentation.xml.rels\" });\n archive.append(generateThemeXml(theme), { name: \"ppt/theme/theme1.xml\" });\n archive.append(generateSlideMasterXml(theme, finalOptions.layout || \"LAYOUT_16x9\"), { name: \"ppt/slideMasters/slideMaster1.xml\" });\n archive.append(generateSlideMasterRelsXml(), { name: \"ppt/slideMasters/_rels/slideMaster1.xml.rels\" });\n archive.append(generateSlideLayoutXml(\"title\"), { name: \"ppt/slideLayouts/slideLayout1.xml\" });\n archive.append(generateSlideLayoutXml(\"content\"), { name: \"ppt/slideLayouts/slideLayout2.xml\" });\n archive.append(generateSlideLayoutRelsXml(), { name: \"ppt/slideLayouts/_rels/slideLayout1.xml.rels\" });\n archive.append(generateSlideLayoutRelsXml(), { name: \"ppt/slideLayouts/_rels/slideLayout2.xml.rels\" });\n\n // Add slides\n for (let i = 0; i < slides.length; i++) {\n archive.append(generateSlideXml(slides[i], i + 1, finalOptions), { name: `ppt/slides/slide${i + 1}.xml` });\n archive.append(generateSlideRelsXml(i + 1), { name: `ppt/slides/_rels/slide${i + 1}.xml.rels` });\n }\n\n // Add document properties\n archive.append(generateCorePropsXml(finalOptions), { name: \"docProps/core.xml\" });\n archive.append(generateAppPropsXml(finalOptions, slides.length), { name: \"docProps/app.xml\" });\n\n archive.finalize();\n });\n } catch {\n // Ultimate fallback: save slide content as text\n const txtPath = filePath.replace(\".pptx\", \".txt\");\n let content = `Presentation: ${options.title || \"Untitled\"}\\n${\"=\".repeat(50)}\\n\\n`;\n\n for (let i = 0; i < slides.length; i++) {\n const slide = slides[i];\n content += `--- Slide ${i + 1} ---\\n`;\n if (slide.title) content += `Title: ${slide.title}\\n`;\n if (slide.subtitle) content += `Subtitle: ${slide.subtitle}\\n`;\n if (slide.content) {\n content += \"Content:\\n\";\n for (const element of slide.content) {\n if (\"text\" in element && element.type === \"text\") content += ` ${element.text}\\n`;\n if (\"items\" in element) content += element.items.map((item: string) => ` - ${item}`).join(\"\\n\") + \"\\n\";\n }\n }\n content += \"\\n\";\n }\n\n await writeFile(txtPath, content, \"utf-8\");\n return { success: true, filePath: txtPath };\n }\n}\n\n// Quick presentation from outline\nexport async function quickPresentation(\n title: string,\n outline: Array<{ title: string; bullets?: string[] }>,\n filename?: string,\n options?: PresentationOptions\n): Promise<PresentationResult> {\n const slides: Slide[] = [\n {\n layout: \"title\",\n title,\n subtitle: options?.author ? `By ${options.author}` : undefined,\n },\n ];\n\n for (const section of outline) {\n slides.push({\n layout: \"title-content\",\n title: section.title,\n content: section.bullets\n ? [{ type: \"bullet-list\", items: section.bullets }]\n : undefined,\n });\n }\n\n return generatePresentation(slides, filename, options);\n}\n\n// Main function for tool use\nexport async function generatePPTX(\n slides: Slide[],\n filename: string,\n options?: PresentationOptions\n): Promise<PresentationResult> {\n return generatePresentation(slides, filename, options);\n}\n\nexport default {\n generatePresentation,\n generatePPTX,\n quickPresentation,\n};\n"],"mappings":"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","names":[]}
@@ -1,63 +0,0 @@
1
- import {
2
- cancelTask,
3
- connection,
4
- generateBriefing,
5
- getQueueStats,
6
- initializeScheduler,
7
- maintenanceQueue,
8
- scheduleRecurring,
9
- scheduleReminder,
10
- scheduleTask,
11
- scheduleUserMaintenance,
12
- shutdownScheduler,
13
- startMaintenanceWorker,
14
- startWorker,
15
- stopMaintenanceWorker,
16
- stopWorker,
17
- taskQueue
18
- } from "./chunk-AYUKPTSM.js";
19
- import "./chunk-766ASQWE.js";
20
- import "./chunk-IZJMVV7O.js";
21
- import "./chunk-6PMVAAA7.js";
22
- import "./chunk-MQJ2ECQT.js";
23
- import "./chunk-TVEWKIK3.js";
24
- import "./chunk-BRBWNV65.js";
25
- import "./chunk-H5RQOFO2.js";
26
- import "./chunk-VRD5CYRL.js";
27
- import "./chunk-KM22GV7G.js";
28
- import "./chunk-P6QINGFL.js";
29
- import "./chunk-HN3F4WSW.js";
30
- import "./chunk-SVAPX2XN.js";
31
- import "./chunk-WRAKK6K6.js";
32
- import "./chunk-7WQO5J2M.js";
33
- import "./chunk-BXZ6EA52.js";
34
- import "./chunk-4GLYY4NN.js";
35
- import "./chunk-EVE7MIIY.js";
36
- import "./chunk-RZ4YESBG.js";
37
- import "./chunk-CQ4JURG7.js";
38
- import "./chunk-OCVQGBJK.js";
39
- import "./chunk-XKYRH4FM.js";
40
- import "./chunk-ZLZKF2PM.js";
41
- import "./chunk-6KONMXQ6.js";
42
- import "./chunk-22VGGA7S.js";
43
- import "./chunk-35WYTA3C.js";
44
- import "./chunk-PLDDJCW6.js";
45
- export {
46
- cancelTask,
47
- connection,
48
- generateBriefing,
49
- getQueueStats,
50
- initializeScheduler,
51
- maintenanceQueue,
52
- scheduleRecurring,
53
- scheduleReminder,
54
- scheduleTask,
55
- scheduleUserMaintenance,
56
- shutdownScheduler,
57
- startMaintenanceWorker,
58
- startWorker,
59
- stopMaintenanceWorker,
60
- stopWorker,
61
- taskQueue
62
- };
63
- //# sourceMappingURL=scheduler-VK4WFERV.js.map
@@ -1,35 +0,0 @@
1
- import {
2
- SignalBot,
3
- signal_default
4
- } from "./chunk-VEHFVBLI.js";
5
- import "./chunk-766ASQWE.js";
6
- import "./chunk-IZJMVV7O.js";
7
- import "./chunk-6PMVAAA7.js";
8
- import "./chunk-MQJ2ECQT.js";
9
- import "./chunk-TVEWKIK3.js";
10
- import "./chunk-BRBWNV65.js";
11
- import "./chunk-H5RQOFO2.js";
12
- import "./chunk-VRD5CYRL.js";
13
- import "./chunk-KM22GV7G.js";
14
- import "./chunk-P6QINGFL.js";
15
- import "./chunk-HN3F4WSW.js";
16
- import "./chunk-SVAPX2XN.js";
17
- import "./chunk-WRAKK6K6.js";
18
- import "./chunk-7WQO5J2M.js";
19
- import "./chunk-BXZ6EA52.js";
20
- import "./chunk-4GLYY4NN.js";
21
- import "./chunk-EVE7MIIY.js";
22
- import "./chunk-RZ4YESBG.js";
23
- import "./chunk-CQ4JURG7.js";
24
- import "./chunk-OCVQGBJK.js";
25
- import "./chunk-XKYRH4FM.js";
26
- import "./chunk-ZLZKF2PM.js";
27
- import "./chunk-6KONMXQ6.js";
28
- import "./chunk-22VGGA7S.js";
29
- import "./chunk-35WYTA3C.js";
30
- import "./chunk-PLDDJCW6.js";
31
- export {
32
- SignalBot,
33
- signal_default as default
34
- };
35
- //# sourceMappingURL=signal-6CGDFYL2.js.map
@@ -1,75 +0,0 @@
1
- import {
2
- SlackBot,
3
- addToSession,
4
- askCommand,
5
- chatCommand,
6
- clearCommand,
7
- clearSession,
8
- createErrorBlocks,
9
- createSlackBot,
10
- createSuccessBlocks,
11
- formatAsBlocks,
12
- getCommand,
13
- getCommandNames,
14
- getSession,
15
- helpCommand,
16
- mainCommand,
17
- remindCommand,
18
- sessions,
19
- slack_default,
20
- slashCommands,
21
- splitMessage,
22
- statusCommand
23
- } from "./chunk-4UOE5TUZ.js";
24
- import "./chunk-SJSUSJ47.js";
25
- import "./chunk-AYUKPTSM.js";
26
- import "./chunk-766ASQWE.js";
27
- import "./chunk-IZJMVV7O.js";
28
- import "./chunk-6PMVAAA7.js";
29
- import "./chunk-MQJ2ECQT.js";
30
- import "./chunk-TVEWKIK3.js";
31
- import "./chunk-BRBWNV65.js";
32
- import "./chunk-H5RQOFO2.js";
33
- import "./chunk-VRD5CYRL.js";
34
- import "./chunk-KM22GV7G.js";
35
- import "./chunk-P6QINGFL.js";
36
- import "./chunk-HN3F4WSW.js";
37
- import "./chunk-SVAPX2XN.js";
38
- import "./chunk-WRAKK6K6.js";
39
- import "./chunk-7WQO5J2M.js";
40
- import "./chunk-BXZ6EA52.js";
41
- import "./chunk-4GLYY4NN.js";
42
- import "./chunk-EVE7MIIY.js";
43
- import "./chunk-RZ4YESBG.js";
44
- import "./chunk-CQ4JURG7.js";
45
- import "./chunk-OCVQGBJK.js";
46
- import "./chunk-XKYRH4FM.js";
47
- import "./chunk-ZLZKF2PM.js";
48
- import "./chunk-6KONMXQ6.js";
49
- import "./chunk-22VGGA7S.js";
50
- import "./chunk-35WYTA3C.js";
51
- import "./chunk-PLDDJCW6.js";
52
- export {
53
- SlackBot,
54
- addToSession,
55
- askCommand,
56
- chatCommand,
57
- clearCommand,
58
- clearSession,
59
- createErrorBlocks,
60
- createSlackBot,
61
- createSuccessBlocks,
62
- slack_default as default,
63
- formatAsBlocks,
64
- getCommand,
65
- getCommandNames,
66
- getSession,
67
- helpCommand,
68
- mainCommand,
69
- remindCommand,
70
- sessions,
71
- slashCommands,
72
- splitMessage,
73
- statusCommand
74
- };
75
- //# sourceMappingURL=slack-IZQWIKOH.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/inputs/websocket/index.ts","../src/inputs/websocket/protocol.ts","../src/index.ts"],"sourcesContent":["/**\r\n * WebSocket Handler - Real-time streaming for OpenSentinel\r\n */\r\n\r\n// Generic WebSocket interface compatible with Bun's ServerWebSocket\r\ninterface ServerWebSocket<T = unknown> {\r\n send(data: string | Buffer): void;\r\n close(code?: number, reason?: string): void;\r\n data: T;\r\n}\r\nimport { nanoid } from \"nanoid\";\r\nimport { getGatewayToken, timingSafeEqual } from \"../../core/security/gateway-utils\";\r\nimport {\r\n type WSClientMessage,\r\n type ConnectionState,\r\n createServerMessage,\r\n parseClientMessage,\r\n isValidClientMessage,\r\n} from \"./protocol\";\r\nimport { chat, streamChat, chatWithTools, streamChatWithTools } from \"../../core/brain\";\r\nimport type { Message } from \"../../core/brain\";\r\n\r\n// ============================================\r\n// CONNECTION MANAGEMENT\r\n// ============================================\r\n\r\nconst connections = new Map<ServerWebSocket<ConnectionState>, ConnectionState>();\r\n\r\nfunction createConnectionState(): ConnectionState {\r\n return {\r\n id: nanoid(),\r\n connectedAt: new Date(),\r\n lastActivity: new Date(),\r\n activeRequests: new Map(),\r\n };\r\n}\r\n\r\n// ============================================\r\n// MESSAGE HANDLERS\r\n// ============================================\r\n\r\nasync function handleChat(\r\n ws: ServerWebSocket<ConnectionState>,\r\n msg: WSClientMessage\r\n): Promise<void> {\r\n const { id, payload } = msg;\r\n const messages = payload.messages || [];\r\n\r\n if (messages.length === 0) {\r\n ws.send(createServerMessage(\"error\", id, { error: \"No messages provided\" }));\r\n return;\r\n }\r\n\r\n try {\r\n // Use streaming for real-time response\r\n let fullContent = \"\";\r\n\r\n await streamChat(\r\n messages,\r\n payload.systemPrompt,\r\n (chunk) => {\r\n fullContent += chunk;\r\n ws.send(createServerMessage(\"chunk\", id, { text: chunk }));\r\n }\r\n );\r\n\r\n ws.send(createServerMessage(\"complete\", id, { content: fullContent }));\r\n } catch (error) {\r\n const errorMessage = error instanceof Error ? error.message : \"Unknown error\";\r\n ws.send(createServerMessage(\"error\", id, { error: errorMessage }));\r\n }\r\n}\r\n\r\nasync function handleChatWithTools(\r\n ws: ServerWebSocket<ConnectionState>,\r\n msg: WSClientMessage\r\n): Promise<void> {\r\n const { id, payload } = msg;\r\n const messages = payload.messages || [];\r\n\r\n if (messages.length === 0) {\r\n ws.send(createServerMessage(\"error\", id, { error: \"No messages provided\" }));\r\n return;\r\n }\r\n\r\n try {\r\n // Use streaming generator for real-time events\r\n const stream = streamChatWithTools(messages, payload.userId);\r\n\r\n for await (const event of stream) {\r\n switch (event.type) {\r\n case \"chunk\":\r\n ws.send(createServerMessage(\"chunk\", id, { text: event.data.text }));\r\n break;\r\n case \"tool_start\":\r\n ws.send(createServerMessage(\"tool_start\", id, {\r\n toolName: event.data.toolName,\r\n toolInput: event.data.toolInput,\r\n }));\r\n break;\r\n case \"tool_result\":\r\n ws.send(createServerMessage(\"tool_result\", id, {\r\n toolName: event.data.toolName,\r\n toolResult: event.data.toolResult,\r\n }));\r\n break;\r\n case \"complete\":\r\n ws.send(createServerMessage(\"complete\", id, {\r\n content: event.data.content,\r\n usage: {\r\n inputTokens: event.data.inputTokens || 0,\r\n outputTokens: event.data.outputTokens || 0,\r\n },\r\n toolsUsed: event.data.toolsUsed,\r\n }));\r\n break;\r\n case \"error\":\r\n ws.send(createServerMessage(\"error\", id, { error: event.data.error }));\r\n break;\r\n }\r\n }\r\n } catch (error) {\r\n const errorMessage = error instanceof Error ? error.message : \"Unknown error\";\r\n ws.send(createServerMessage(\"error\", id, { error: errorMessage }));\r\n }\r\n}\r\n\r\nfunction handlePing(ws: ServerWebSocket<ConnectionState>, msg: WSClientMessage): void {\r\n ws.send(createServerMessage(\"pong\", msg.id, {}));\r\n}\r\n\r\nfunction handleCancel(ws: ServerWebSocket<ConnectionState>, msg: WSClientMessage): void {\r\n const state = connections.get(ws);\r\n if (state) {\r\n const controller = state.activeRequests.get(msg.id);\r\n if (controller) {\r\n controller.abort();\r\n state.activeRequests.delete(msg.id);\r\n ws.send(createServerMessage(\"complete\", msg.id, { content: \"Request cancelled\" }));\r\n }\r\n }\r\n}\r\n\r\n// ============================================\r\n// WEBSOCKET HANDLERS\r\n// ============================================\r\n\r\nexport const websocketHandlers = {\r\n open(ws: ServerWebSocket<ConnectionState>) {\r\n const state = createConnectionState();\r\n connections.set(ws, state);\r\n console.log(`[WebSocket] Client connected: ${state.id}`);\r\n ws.send(createServerMessage(\"connected\", \"system\", { message: \"Connected to OpenSentinel\" }));\r\n },\r\n\r\n close(ws: ServerWebSocket<ConnectionState>, code: number, reason: string) {\r\n const state = connections.get(ws);\r\n if (state) {\r\n // Cancel any active requests\r\n for (const controller of state.activeRequests.values()) {\r\n controller.abort();\r\n }\r\n console.log(`[WebSocket] Client disconnected: ${state.id} (${code}: ${reason})`);\r\n }\r\n connections.delete(ws);\r\n },\r\n\r\n async message(ws: ServerWebSocket<ConnectionState>, message: string | Buffer) {\r\n const state = connections.get(ws);\r\n if (state) {\r\n state.lastActivity = new Date();\r\n }\r\n\r\n const data = typeof message === \"string\" ? message : message.toString();\r\n const msg = parseClientMessage(data);\r\n\r\n if (!msg || !isValidClientMessage(msg)) {\r\n ws.send(createServerMessage(\"error\", \"unknown\", { error: \"Invalid message format\" }));\r\n return;\r\n }\r\n\r\n console.log(`[WebSocket] Received: ${msg.type} (${msg.id})`);\r\n\r\n switch (msg.type) {\r\n case \"chat\":\r\n await handleChat(ws, msg);\r\n break;\r\n case \"chat_with_tools\":\r\n await handleChatWithTools(ws, msg);\r\n break;\r\n case \"ping\":\r\n handlePing(ws, msg);\r\n break;\r\n case \"cancel\":\r\n handleCancel(ws, msg);\r\n break;\r\n default:\r\n ws.send(createServerMessage(\"error\", msg.id, { error: `Unknown message type: ${msg.type}` }));\r\n }\r\n },\r\n\r\n drain(ws: ServerWebSocket<ConnectionState>) {\r\n // Called when the socket is ready to receive more data after backpressure\r\n console.log(\"[WebSocket] Socket drained, ready for more data\");\r\n },\r\n};\r\n\r\n// ============================================\r\n// UPGRADE HANDLER\r\n// ============================================\r\n\r\nexport function handleUpgrade(\r\n req: Request,\r\n server: { upgrade: (req: Request, options?: { data?: ConnectionState }) => boolean }\r\n): Response | undefined {\r\n const url = new URL(req.url);\r\n\r\n // Only handle /ws path\r\n if (url.pathname !== \"/ws\") {\r\n return undefined;\r\n }\r\n\r\n // Gateway token auth for WebSocket connections\r\n const gwToken = getGatewayToken();\r\n if (gwToken) {\r\n const tokenParam = url.searchParams.get(\"token\");\r\n const authHeader = req.headers.get(\"Authorization\");\r\n const headerToken = authHeader?.startsWith(\"Bearer \") ? authHeader.slice(7) : null;\r\n const providedToken = tokenParam || headerToken;\r\n\r\n if (!providedToken || !timingSafeEqual(providedToken, gwToken)) {\r\n return new Response(\"Unauthorized\", { status: 401 });\r\n }\r\n }\r\n\r\n const state = createConnectionState();\r\n const success = server.upgrade(req, { data: state });\r\n\r\n if (success) {\r\n return undefined; // Upgrade successful, Bun handles the response\r\n }\r\n\r\n return new Response(\"WebSocket upgrade failed\", { status: 500 });\r\n}\r\n\r\n// ============================================\r\n// UTILITIES\r\n// ============================================\r\n\r\nexport function getConnectionCount(): number {\r\n return connections.size;\r\n}\r\n\r\nexport function broadcastMessage(message: string): void {\r\n for (const ws of connections.keys()) {\r\n ws.send(message);\r\n }\r\n}\r\n\r\nexport function closeAllConnections(): void {\r\n for (const ws of connections.keys()) {\r\n ws.close(1000, \"Server shutting down\");\r\n }\r\n connections.clear();\r\n}\r\n\r\nexport default {\r\n handlers: websocketHandlers,\r\n handleUpgrade,\r\n getConnectionCount,\r\n broadcastMessage,\r\n closeAllConnections,\r\n};\r\n","/**\r\n * WebSocket Protocol - Message types for real-time streaming\r\n * OpenSentinel WebSocket API\r\n */\r\n\r\nimport type { Message } from \"../../core/brain\";\r\n\r\n// ============================================\r\n// CLIENT → SERVER MESSAGES\r\n// ============================================\r\n\r\nexport type WSClientMessageType = \"chat\" | \"chat_with_tools\" | \"ping\" | \"cancel\";\r\n\r\nexport interface WSClientMessage {\r\n type: WSClientMessageType;\r\n id: string;\r\n payload: WSClientPayload;\r\n}\r\n\r\nexport interface WSClientPayload {\r\n messages?: Message[];\r\n userId?: string;\r\n systemPrompt?: string;\r\n}\r\n\r\n// ============================================\r\n// SERVER → CLIENT MESSAGES\r\n// ============================================\r\n\r\nexport type WSServerMessageType =\r\n | \"chunk\"\r\n | \"tool_start\"\r\n | \"tool_result\"\r\n | \"complete\"\r\n | \"error\"\r\n | \"pong\"\r\n | \"connected\";\r\n\r\nexport interface WSServerMessage {\r\n type: WSServerMessageType;\r\n id: string;\r\n payload: WSServerPayload;\r\n}\r\n\r\nexport interface WSServerPayload {\r\n // For chunk events\r\n text?: string;\r\n\r\n // For tool events\r\n toolName?: string;\r\n toolInput?: unknown;\r\n toolResult?: unknown;\r\n\r\n // For complete events\r\n content?: string;\r\n usage?: {\r\n inputTokens: number;\r\n outputTokens: number;\r\n };\r\n toolsUsed?: string[];\r\n\r\n // For error events\r\n error?: string;\r\n code?: string;\r\n\r\n // For connected events\r\n message?: string;\r\n}\r\n\r\n// ============================================\r\n// STREAM EVENTS (internal)\r\n// ============================================\r\n\r\nexport type StreamEventType = \"chunk\" | \"tool_start\" | \"tool_result\" | \"complete\" | \"error\";\r\n\r\nexport interface StreamEvent {\r\n type: StreamEventType;\r\n data: {\r\n text?: string;\r\n toolName?: string;\r\n toolInput?: unknown;\r\n toolResult?: unknown;\r\n content?: string;\r\n inputTokens?: number;\r\n outputTokens?: number;\r\n toolsUsed?: string[];\r\n error?: string;\r\n };\r\n}\r\n\r\n// ============================================\r\n// CONNECTION STATE\r\n// ============================================\r\n\r\nexport interface ConnectionState {\r\n id: string;\r\n userId?: string;\r\n connectedAt: Date;\r\n lastActivity: Date;\r\n activeRequests: Map<string, AbortController>;\r\n}\r\n\r\n// ============================================\r\n// HELPER FUNCTIONS\r\n// ============================================\r\n\r\nexport function createServerMessage(\r\n type: WSServerMessageType,\r\n id: string,\r\n payload: Partial<WSServerPayload> = {}\r\n): string {\r\n const message: WSServerMessage = { type, id, payload };\r\n return JSON.stringify(message);\r\n}\r\n\r\nexport function parseClientMessage(data: string): WSClientMessage | null {\r\n try {\r\n const parsed = JSON.parse(data);\r\n if (!parsed.type || !parsed.id) {\r\n return null;\r\n }\r\n return parsed as WSClientMessage;\r\n } catch {\r\n return null;\r\n }\r\n}\r\n\r\nexport function isValidClientMessage(msg: unknown): msg is WSClientMessage {\r\n if (!msg || typeof msg !== \"object\") return false;\r\n const m = msg as Record<string, unknown>;\r\n return (\r\n typeof m.type === \"string\" &&\r\n typeof m.id === \"string\" &&\r\n [\"chat\", \"chat_with_tools\", \"ping\", \"cancel\"].includes(m.type)\r\n );\r\n}\r\n","import { env } from \"./config/env\";\r\nimport { createBot } from \"./inputs/telegram/bot\";\r\nimport { app } from \"./inputs/api/server\";\r\nimport { startWorker, stopWorker } from \"./core/scheduler\";\r\nimport { DiscordBot } from \"./inputs/discord\";\r\nimport { SlackBot } from \"./inputs/slack\";\r\nimport { WhatsAppBot } from \"./inputs/whatsapp\";\r\nimport { SignalBot } from \"./inputs/signal\";\r\nimport { iMessageBot } from \"./inputs/imessage\";\r\nimport wsHandler from \"./inputs/websocket\";\r\nimport { initMCPRegistry, type MCPRegistry, getMCPToolSummary } from \"./core/mcp\";\r\nimport { setMCPRegistry } from \"./tools\";\r\nimport { initializeProviders } from \"./core/providers\";\r\n\r\nexport async function main() {\r\n console.log(`\r\n╔══════════════════════════════════════════╗\r\n║ OPENSENTINEL v3.0.0 ║\r\n║ Your Personal AI Assistant ║\r\n╚══════════════════════════════════════════╝\r\n`);\r\n\r\n // Initialize LLM providers (Anthropic, OpenRouter, Groq, Mistral, Ollama, etc.)\r\n await initializeProviders();\r\n\r\n // Start Telegram bot (only if token is configured)\r\n let bot: ReturnType<typeof createBot> | null = null;\r\n if (env.TELEGRAM_BOT_TOKEN) {\r\n console.log(\"[Telegram] Starting bot...\");\r\n bot = createBot();\r\n\r\n bot.start({\r\n onStart: (botInfo) => {\r\n console.log(`[Telegram] Bot started as @${botInfo.username}`);\r\n },\r\n });\r\n } else {\r\n console.log(\"[Telegram] No bot token configured, skipping\");\r\n }\r\n\r\n // Start scheduler worker\r\n try {\r\n startWorker(async (task) => {\r\n console.log(`[Scheduler] Executing task: ${task.type}`);\r\n if (task.chatId && task.message && bot) {\r\n try {\r\n await bot.api.sendMessage(task.chatId, `⏰ Reminder: ${task.message}`);\r\n } catch (err) {\r\n console.error(\"[Scheduler] Failed to send reminder:\", err);\r\n }\r\n }\r\n });\r\n } catch (err) {\r\n console.warn(\"[Scheduler] Could not start worker (Redis may be unavailable):\", err);\r\n }\r\n\r\n // Initialize MCP (Model Context Protocol) servers\r\n let mcpRegistry: MCPRegistry | null = null;\r\n if (env.MCP_ENABLED) {\r\n try {\r\n console.log(\"[MCP] Initializing MCP servers...\");\r\n mcpRegistry = await initMCPRegistry(env.MCP_CONFIG_PATH);\r\n setMCPRegistry(mcpRegistry);\r\n\r\n if (mcpRegistry.connectedCount > 0) {\r\n console.log(`[MCP] Connected to ${mcpRegistry.connectedCount} server(s), ${mcpRegistry.totalToolCount} tools available`);\r\n console.log(getMCPToolSummary(mcpRegistry));\r\n } else {\r\n console.log(\"[MCP] No servers configured (add servers to mcp.json)\");\r\n }\r\n } catch (err) {\r\n console.warn(\"[MCP] Failed to initialize:\", err);\r\n mcpRegistry = null;\r\n }\r\n }\r\n\r\n // Start Discord bot if configured\r\n let discordBot: DiscordBot | null = null;\r\n if (env.DISCORD_BOT_TOKEN) {\r\n console.log(\"[Discord] Starting bot...\");\r\n try {\r\n discordBot = new DiscordBot({\r\n token: env.DISCORD_BOT_TOKEN,\r\n clientId: env.DISCORD_CLIENT_ID || \"\",\r\n guildId: env.DISCORD_GUILD_ID,\r\n allowedUserIds: env.DISCORD_ALLOWED_USER_IDS?.split(\",\") || [],\r\n allowedRoleIds: env.DISCORD_ALLOWED_ROLE_IDS?.split(\",\") || [],\r\n });\r\n await discordBot.start();\r\n console.log(\"[Discord] Bot started\");\r\n } catch (err: any) {\r\n console.warn(\"[Discord] Failed to start bot:\", err.message);\r\n if (err.message?.includes(\"disallowed intents\") || err.message?.includes(\"Disallowed\")) {\r\n console.warn(\"[Discord] ⚠️ Enable Privileged Gateway Intents in Discord Developer Portal:\");\r\n console.warn(\"[Discord] 1. Go to https://discord.com/developers/applications\");\r\n console.warn(\"[Discord] 2. Select your bot application\");\r\n console.warn(\"[Discord] 3. Go to Bot → Privileged Gateway Intents\");\r\n console.warn(\"[Discord] 4. Enable: Presence Intent, Server Members Intent, Message Content Intent\");\r\n console.warn(\"[Discord] 5. Save and restart OpenSentinel\");\r\n }\r\n discordBot = null;\r\n }\r\n }\r\n\r\n // Start Slack bot if configured\r\n let slackBot: SlackBot | null = null;\r\n if (env.SLACK_BOT_TOKEN && env.SLACK_SIGNING_SECRET) {\r\n console.log(\"[Slack] Starting bot...\");\r\n slackBot = new SlackBot({\r\n token: env.SLACK_BOT_TOKEN,\r\n signingSecret: env.SLACK_SIGNING_SECRET,\r\n appToken: env.SLACK_APP_TOKEN,\r\n socketMode: env.SLACK_SOCKET_MODE === \"true\",\r\n port: parseInt(env.SLACK_PORT || \"3000\"),\r\n allowedUserIds: env.SLACK_ALLOWED_USER_IDS?.split(\",\") || [],\r\n allowedChannelIds: env.SLACK_ALLOWED_CHANNEL_IDS?.split(\",\") || [],\r\n });\r\n await slackBot.start();\r\n console.log(\"[Slack] Bot started\");\r\n }\r\n\r\n // Start WhatsApp bot if configured\r\n let whatsappBot: WhatsAppBot | null = null;\r\n if (env.WHATSAPP_ENABLED) {\r\n console.log(\"[WhatsApp] Starting bot...\");\r\n try {\r\n whatsappBot = new WhatsAppBot({\r\n authDir: env.WHATSAPP_AUTH_DIR,\r\n allowedNumbers: env.WHATSAPP_ALLOWED_NUMBERS?.split(\",\").filter(Boolean) || [],\r\n printQR: true,\r\n });\r\n await whatsappBot.start();\r\n console.log(\"[WhatsApp] Bot started (scan QR code if prompted)\");\r\n } catch (err: any) {\r\n console.warn(\"[WhatsApp] Failed to start bot:\", err.message);\r\n whatsappBot = null;\r\n }\r\n }\r\n\r\n // Start Signal bot if configured\r\n let signalBot: SignalBot | null = null;\r\n if (env.SIGNAL_ENABLED && env.SIGNAL_PHONE_NUMBER) {\r\n console.log(\"[Signal] Starting bot...\");\r\n try {\r\n signalBot = new SignalBot({\r\n phoneNumber: env.SIGNAL_PHONE_NUMBER,\r\n signalCliPath: env.SIGNAL_CLI_PATH,\r\n allowedNumbers: env.SIGNAL_ALLOWED_NUMBERS?.split(\",\").filter(Boolean) || [],\r\n });\r\n await signalBot.start();\r\n console.log(\"[Signal] Bot started\");\r\n } catch (err: any) {\r\n console.warn(\"[Signal] Failed to start bot:\", err.message);\r\n console.warn(\"[Signal] Make sure signal-cli is installed and configured\");\r\n signalBot = null;\r\n }\r\n }\r\n\r\n // Start iMessage bot if configured (macOS only)\r\n let imessageBot: iMessageBot | null = null;\r\n if (env.IMESSAGE_ENABLED) {\r\n console.log(\"[iMessage] Starting bot...\");\r\n try {\r\n imessageBot = new iMessageBot({\r\n mode: env.IMESSAGE_MODE as \"bluebubbles\" | \"applescript\",\r\n serverUrl: env.IMESSAGE_BLUEBUBBLES_URL,\r\n password: env.IMESSAGE_BLUEBUBBLES_PASSWORD,\r\n allowedNumbers: env.IMESSAGE_ALLOWED_NUMBERS?.split(\",\").filter(Boolean) || [],\r\n });\r\n await imessageBot.start();\r\n console.log(\"[iMessage] Bot started\");\r\n } catch (err: any) {\r\n console.warn(\"[iMessage] Failed to start bot:\", err.message);\r\n if (process.platform !== \"darwin\") {\r\n console.warn(\"[iMessage] iMessage is only available on macOS\");\r\n }\r\n imessageBot = null;\r\n }\r\n }\r\n\r\n // Start API server with WebSocket support\r\n console.log(`[API] Starting server on port ${env.PORT}...`);\r\n const server = Bun.serve({\r\n port: env.PORT,\r\n fetch: (req, server) => {\r\n // Handle WebSocket upgrade requests\r\n if (req.headers.get(\"upgrade\") === \"websocket\") {\r\n const result = wsHandler.handleUpgrade(req, server);\r\n if (result) return result;\r\n // If handleUpgrade returns undefined, the upgrade was successful\r\n return undefined as unknown as Response;\r\n }\r\n // Handle regular HTTP requests\r\n return app.fetch(req);\r\n },\r\n websocket: wsHandler.handlers,\r\n });\r\n\r\n console.log(`[API] Server running at http://localhost:${server.port}`);\r\n console.log(`[WebSocket] Available at ws://localhost:${server.port}/ws`);\r\n console.log(`[Web] Dashboard available at http://localhost:${server.port}`);\r\n\r\n // Start tunnel if configured\r\n let tunnelUrl: string | null = null;\r\n if ((env as any).TUNNEL_ENABLED) {\r\n try {\r\n const { autoStartTunnel } = await import(\"./core/tunnel\");\r\n tunnelUrl = await autoStartTunnel(\r\n env.PORT,\r\n (env as any).TUNNEL_PROVIDER || \"cloudflare\",\r\n {\r\n authToken: (env as any).TUNNEL_AUTH_TOKEN,\r\n subdomain: (env as any).TUNNEL_SUBDOMAIN,\r\n }\r\n );\r\n } catch (err: any) {\r\n console.warn(\"[Tunnel] Failed to start:\", err.message);\r\n }\r\n }\r\n\r\n // Initialize autonomy manager\r\n if ((env as any).AUTONOMY_LEVEL) {\r\n try {\r\n const { autonomyManager } = await import(\"./core/security/autonomy\");\r\n autonomyManager.setDefaultLevel((env as any).AUTONOMY_LEVEL);\r\n console.log(`[Autonomy] Level: ${(env as any).AUTONOMY_LEVEL}`);\r\n } catch {\r\n // Autonomy system non-critical\r\n }\r\n }\r\n\r\n // Initialize device pairing\r\n if ((env as any).PAIRING_ENABLED) {\r\n try {\r\n const { pairingManager } = await import(\"./core/security/pairing\");\r\n if ((env as any).PAIRING_CODE_LIFETIME_MINUTES) {\r\n pairingManager.setCodeLifetime((env as any).PAIRING_CODE_LIFETIME_MINUTES);\r\n }\r\n const code = pairingManager.generateCode();\r\n console.log(`[Pairing] Device pairing enabled. Code: ${code}`);\r\n } catch {\r\n // Pairing system non-critical\r\n }\r\n }\r\n\r\n // Start Matrix bot if configured\r\n let matrixBot: any = null;\r\n if ((env as any).MATRIX_ENABLED && (env as any).MATRIX_HOMESERVER_URL && (env as any).MATRIX_ACCESS_TOKEN) {\r\n console.log(\"[Matrix] Starting bot...\");\r\n try {\r\n const { MatrixBot } = await import(\"./inputs/matrix\");\r\n matrixBot = new MatrixBot({\r\n homeserverUrl: (env as any).MATRIX_HOMESERVER_URL,\r\n accessToken: (env as any).MATRIX_ACCESS_TOKEN,\r\n userId: (env as any).MATRIX_USER_ID || \"\",\r\n allowedRoomIds: (env as any).MATRIX_ALLOWED_ROOM_IDS?.split(\",\").filter(Boolean),\r\n autoJoin: (env as any).MATRIX_AUTO_JOIN ?? true,\r\n e2eEnabled: (env as any).MATRIX_E2E_ENABLED ?? false,\r\n });\r\n await matrixBot.start();\r\n console.log(\"[Matrix] Bot started\");\r\n } catch (err: any) {\r\n console.warn(\"[Matrix] Failed to start bot:\", err.message);\r\n matrixBot = null;\r\n }\r\n }\r\n\r\n console.log(\"\");\r\n const channels = [\r\n bot ? \"Telegram\" : null,\r\n discordBot ? \"Discord\" : null,\r\n slackBot ? \"Slack\" : null,\r\n whatsappBot ? \"WhatsApp\" : null,\r\n signalBot ? \"Signal\" : null,\r\n imessageBot ? \"iMessage\" : null,\r\n matrixBot ? \"Matrix\" : null,\r\n \"API\",\r\n \"WebSocket\",\r\n ].filter(Boolean).join(\", \");\r\n console.log(`OpenSentinel is ready! Send a message via ${channels}.`);\r\n if (tunnelUrl) {\r\n console.log(`Public URL: ${tunnelUrl}`);\r\n }\r\n\r\n // Return shutdown function for CLI to wire up\r\n return async function shutdown() {\r\n console.log(\"\\nShutting down...\");\r\n stopWorker();\r\n wsHandler.closeAllConnections();\r\n if (mcpRegistry) await mcpRegistry.shutdown();\r\n if (bot) await bot.stop();\r\n if (discordBot) await discordBot.stop();\r\n if (slackBot) await slackBot.stop();\r\n if (whatsappBot) await whatsappBot.stop();\r\n if (signalBot) await signalBot.stop();\r\n if (imessageBot) await imessageBot.stop();\r\n if (matrixBot) await matrixBot.stop();\r\n // Stop tunnel\r\n try {\r\n const { stopTunnel } = await import(\"./core/tunnel\");\r\n await stopTunnel();\r\n } catch { /* tunnel not loaded */ }\r\n server.stop();\r\n };\r\n}\r\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAUA,SAAS,cAAc;;;ACgGhB,SAAS,oBACd,MACA,IACA,UAAoC,CAAC,GAC7B;AACR,QAAM,UAA2B,EAAE,MAAM,IAAI,QAAQ;AACrD,SAAO,KAAK,UAAU,OAAO;AAC/B;AAEO,SAAS,mBAAmB,MAAsC;AACvE,MAAI;AACF,UAAM,SAAS,KAAK,MAAM,IAAI;AAC9B,QAAI,CAAC,OAAO,QAAQ,CAAC,OAAO,IAAI;AAC9B,aAAO;AAAA,IACT;AACA,WAAO;AAAA,EACT,QAAQ;AACN,WAAO;AAAA,EACT;AACF;AAEO,SAAS,qBAAqB,KAAsC;AACzE,MAAI,CAAC,OAAO,OAAO,QAAQ,SAAU,QAAO;AAC5C,QAAM,IAAI;AACV,SACE,OAAO,EAAE,SAAS,YAClB,OAAO,EAAE,OAAO,YAChB,CAAC,QAAQ,mBAAmB,QAAQ,QAAQ,EAAE,SAAS,EAAE,IAAI;AAEjE;;;AD7GA,IAAM,cAAc,oBAAI,IAAuD;AAE/E,SAAS,wBAAyC;AAChD,SAAO;AAAA,IACL,IAAI,OAAO;AAAA,IACX,aAAa,oBAAI,KAAK;AAAA,IACtB,cAAc,oBAAI,KAAK;AAAA,IACvB,gBAAgB,oBAAI,IAAI;AAAA,EAC1B;AACF;AAMA,eAAe,WACb,IACA,KACe;AACf,QAAM,EAAE,IAAI,QAAQ,IAAI;AACxB,QAAM,WAAW,QAAQ,YAAY,CAAC;AAEtC,MAAI,SAAS,WAAW,GAAG;AACzB,OAAG,KAAK,oBAAoB,SAAS,IAAI,EAAE,OAAO,uBAAuB,CAAC,CAAC;AAC3E;AAAA,EACF;AAEA,MAAI;AAEF,QAAI,cAAc;AAElB,UAAM;AAAA,MACJ;AAAA,MACA,QAAQ;AAAA,MACR,CAAC,UAAU;AACT,uBAAe;AACf,WAAG,KAAK,oBAAoB,SAAS,IAAI,EAAE,MAAM,MAAM,CAAC,CAAC;AAAA,MAC3D;AAAA,IACF;AAEA,OAAG,KAAK,oBAAoB,YAAY,IAAI,EAAE,SAAS,YAAY,CAAC,CAAC;AAAA,EACvE,SAAS,OAAO;AACd,UAAM,eAAe,iBAAiB,QAAQ,MAAM,UAAU;AAC9D,OAAG,KAAK,oBAAoB,SAAS,IAAI,EAAE,OAAO,aAAa,CAAC,CAAC;AAAA,EACnE;AACF;AAEA,eAAe,oBACb,IACA,KACe;AACf,QAAM,EAAE,IAAI,QAAQ,IAAI;AACxB,QAAM,WAAW,QAAQ,YAAY,CAAC;AAEtC,MAAI,SAAS,WAAW,GAAG;AACzB,OAAG,KAAK,oBAAoB,SAAS,IAAI,EAAE,OAAO,uBAAuB,CAAC,CAAC;AAC3E;AAAA,EACF;AAEA,MAAI;AAEF,UAAM,SAAS,oBAAoB,UAAU,QAAQ,MAAM;AAE3D,qBAAiB,SAAS,QAAQ;AAChC,cAAQ,MAAM,MAAM;AAAA,QAClB,KAAK;AACH,aAAG,KAAK,oBAAoB,SAAS,IAAI,EAAE,MAAM,MAAM,KAAK,KAAK,CAAC,CAAC;AACnE;AAAA,QACF,KAAK;AACH,aAAG,KAAK,oBAAoB,cAAc,IAAI;AAAA,YAC5C,UAAU,MAAM,KAAK;AAAA,YACrB,WAAW,MAAM,KAAK;AAAA,UACxB,CAAC,CAAC;AACF;AAAA,QACF,KAAK;AACH,aAAG,KAAK,oBAAoB,eAAe,IAAI;AAAA,YAC7C,UAAU,MAAM,KAAK;AAAA,YACrB,YAAY,MAAM,KAAK;AAAA,UACzB,CAAC,CAAC;AACF;AAAA,QACF,KAAK;AACH,aAAG,KAAK,oBAAoB,YAAY,IAAI;AAAA,YAC1C,SAAS,MAAM,KAAK;AAAA,YACpB,OAAO;AAAA,cACL,aAAa,MAAM,KAAK,eAAe;AAAA,cACvC,cAAc,MAAM,KAAK,gBAAgB;AAAA,YAC3C;AAAA,YACA,WAAW,MAAM,KAAK;AAAA,UACxB,CAAC,CAAC;AACF;AAAA,QACF,KAAK;AACH,aAAG,KAAK,oBAAoB,SAAS,IAAI,EAAE,OAAO,MAAM,KAAK,MAAM,CAAC,CAAC;AACrE;AAAA,MACJ;AAAA,IACF;AAAA,EACF,SAAS,OAAO;AACd,UAAM,eAAe,iBAAiB,QAAQ,MAAM,UAAU;AAC9D,OAAG,KAAK,oBAAoB,SAAS,IAAI,EAAE,OAAO,aAAa,CAAC,CAAC;AAAA,EACnE;AACF;AAEA,SAAS,WAAW,IAAsC,KAA4B;AACpF,KAAG,KAAK,oBAAoB,QAAQ,IAAI,IAAI,CAAC,CAAC,CAAC;AACjD;AAEA,SAAS,aAAa,IAAsC,KAA4B;AACtF,QAAM,QAAQ,YAAY,IAAI,EAAE;AAChC,MAAI,OAAO;AACT,UAAM,aAAa,MAAM,eAAe,IAAI,IAAI,EAAE;AAClD,QAAI,YAAY;AACd,iBAAW,MAAM;AACjB,YAAM,eAAe,OAAO,IAAI,EAAE;AAClC,SAAG,KAAK,oBAAoB,YAAY,IAAI,IAAI,EAAE,SAAS,oBAAoB,CAAC,CAAC;AAAA,IACnF;AAAA,EACF;AACF;AAMO,IAAM,oBAAoB;AAAA,EAC/B,KAAK,IAAsC;AACzC,UAAM,QAAQ,sBAAsB;AACpC,gBAAY,IAAI,IAAI,KAAK;AACzB,YAAQ,IAAI,iCAAiC,MAAM,EAAE,EAAE;AACvD,OAAG,KAAK,oBAAoB,aAAa,UAAU,EAAE,SAAS,4BAA4B,CAAC,CAAC;AAAA,EAC9F;AAAA,EAEA,MAAM,IAAsC,MAAc,QAAgB;AACxE,UAAM,QAAQ,YAAY,IAAI,EAAE;AAChC,QAAI,OAAO;AAET,iBAAW,cAAc,MAAM,eAAe,OAAO,GAAG;AACtD,mBAAW,MAAM;AAAA,MACnB;AACA,cAAQ,IAAI,oCAAoC,MAAM,EAAE,KAAK,IAAI,KAAK,MAAM,GAAG;AAAA,IACjF;AACA,gBAAY,OAAO,EAAE;AAAA,EACvB;AAAA,EAEA,MAAM,QAAQ,IAAsC,SAA0B;AAC5E,UAAM,QAAQ,YAAY,IAAI,EAAE;AAChC,QAAI,OAAO;AACT,YAAM,eAAe,oBAAI,KAAK;AAAA,IAChC;AAEA,UAAM,OAAO,OAAO,YAAY,WAAW,UAAU,QAAQ,SAAS;AACtE,UAAM,MAAM,mBAAmB,IAAI;AAEnC,QAAI,CAAC,OAAO,CAAC,qBAAqB,GAAG,GAAG;AACtC,SAAG,KAAK,oBAAoB,SAAS,WAAW,EAAE,OAAO,yBAAyB,CAAC,CAAC;AACpF;AAAA,IACF;AAEA,YAAQ,IAAI,yBAAyB,IAAI,IAAI,KAAK,IAAI,EAAE,GAAG;AAE3D,YAAQ,IAAI,MAAM;AAAA,MAChB,KAAK;AACH,cAAM,WAAW,IAAI,GAAG;AACxB;AAAA,MACF,KAAK;AACH,cAAM,oBAAoB,IAAI,GAAG;AACjC;AAAA,MACF,KAAK;AACH,mBAAW,IAAI,GAAG;AAClB;AAAA,MACF,KAAK;AACH,qBAAa,IAAI,GAAG;AACpB;AAAA,MACF;AACE,WAAG,KAAK,oBAAoB,SAAS,IAAI,IAAI,EAAE,OAAO,yBAAyB,IAAI,IAAI,GAAG,CAAC,CAAC;AAAA,IAChG;AAAA,EACF;AAAA,EAEA,MAAM,IAAsC;AAE1C,YAAQ,IAAI,iDAAiD;AAAA,EAC/D;AACF;AAMO,SAAS,cACd,KACA,QACsB;AACtB,QAAM,MAAM,IAAI,IAAI,IAAI,GAAG;AAG3B,MAAI,IAAI,aAAa,OAAO;AAC1B,WAAO;AAAA,EACT;AAGA,QAAM,UAAU,gBAAgB;AAChC,MAAI,SAAS;AACX,UAAM,aAAa,IAAI,aAAa,IAAI,OAAO;AAC/C,UAAM,aAAa,IAAI,QAAQ,IAAI,eAAe;AAClD,UAAM,cAAc,YAAY,WAAW,SAAS,IAAI,WAAW,MAAM,CAAC,IAAI;AAC9E,UAAM,gBAAgB,cAAc;AAEpC,QAAI,CAAC,iBAAiB,CAAC,gBAAgB,eAAe,OAAO,GAAG;AAC9D,aAAO,IAAI,SAAS,gBAAgB,EAAE,QAAQ,IAAI,CAAC;AAAA,IACrD;AAAA,EACF;AAEA,QAAM,QAAQ,sBAAsB;AACpC,QAAM,UAAU,OAAO,QAAQ,KAAK,EAAE,MAAM,MAAM,CAAC;AAEnD,MAAI,SAAS;AACX,WAAO;AAAA,EACT;AAEA,SAAO,IAAI,SAAS,4BAA4B,EAAE,QAAQ,IAAI,CAAC;AACjE;AAMO,SAAS,qBAA6B;AAC3C,SAAO,YAAY;AACrB;AAEO,SAAS,iBAAiB,SAAuB;AACtD,aAAW,MAAM,YAAY,KAAK,GAAG;AACnC,OAAG,KAAK,OAAO;AAAA,EACjB;AACF;AAEO,SAAS,sBAA4B;AAC1C,aAAW,MAAM,YAAY,KAAK,GAAG;AACnC,OAAG,MAAM,KAAM,sBAAsB;AAAA,EACvC;AACA,cAAY,MAAM;AACpB;AAEA,IAAO,oBAAQ;AAAA,EACb,UAAU;AAAA,EACV;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;;;AElQA,eAAsB,OAAO;AAC3B,UAAQ,IAAI;AAAA;AAAA;AAAA;AAAA;AAAA,CAKb;AAGC,QAAM,oBAAoB;AAG1B,MAAI,MAA2C;AAC/C,MAAI,IAAI,oBAAoB;AAC1B,YAAQ,IAAI,4BAA4B;AACxC,UAAM,UAAU;AAEhB,QAAI,MAAM;AAAA,MACR,SAAS,CAAC,YAAY;AACpB,gBAAQ,IAAI,8BAA8B,QAAQ,QAAQ,EAAE;AAAA,MAC9D;AAAA,IACF,CAAC;AAAA,EACH,OAAO;AACL,YAAQ,IAAI,8CAA8C;AAAA,EAC5D;AAGA,MAAI;AACF,gBAAY,OAAO,SAAS;AAC1B,cAAQ,IAAI,+BAA+B,KAAK,IAAI,EAAE;AACtD,UAAI,KAAK,UAAU,KAAK,WAAW,KAAK;AACtC,YAAI;AACF,gBAAM,IAAI,IAAI,YAAY,KAAK,QAAQ,oBAAe,KAAK,OAAO,EAAE;AAAA,QACtE,SAAS,KAAK;AACZ,kBAAQ,MAAM,wCAAwC,GAAG;AAAA,QAC3D;AAAA,MACF;AAAA,IACF,CAAC;AAAA,EACH,SAAS,KAAK;AACZ,YAAQ,KAAK,kEAAkE,GAAG;AAAA,EACpF;AAGA,MAAI,cAAkC;AACtC,MAAI,IAAI,aAAa;AACnB,QAAI;AACF,cAAQ,IAAI,mCAAmC;AAC/C,oBAAc,MAAM,gBAAgB,IAAI,eAAe;AACvD,qBAAe,WAAW;AAE1B,UAAI,YAAY,iBAAiB,GAAG;AAClC,gBAAQ,IAAI,sBAAsB,YAAY,cAAc,eAAe,YAAY,cAAc,kBAAkB;AACvH,gBAAQ,IAAI,kBAAkB,WAAW,CAAC;AAAA,MAC5C,OAAO;AACL,gBAAQ,IAAI,uDAAuD;AAAA,MACrE;AAAA,IACF,SAAS,KAAK;AACZ,cAAQ,KAAK,+BAA+B,GAAG;AAC/C,oBAAc;AAAA,IAChB;AAAA,EACF;AAGA,MAAI,aAAgC;AACpC,MAAI,IAAI,mBAAmB;AACzB,YAAQ,IAAI,2BAA2B;AACvC,QAAI;AACF,mBAAa,IAAI,WAAW;AAAA,QAC1B,OAAO,IAAI;AAAA,QACX,UAAU,IAAI,qBAAqB;AAAA,QACnC,SAAS,IAAI;AAAA,QACb,gBAAgB,IAAI,0BAA0B,MAAM,GAAG,KAAK,CAAC;AAAA,QAC7D,gBAAgB,IAAI,0BAA0B,MAAM,GAAG,KAAK,CAAC;AAAA,MAC/D,CAAC;AACD,YAAM,WAAW,MAAM;AACvB,cAAQ,IAAI,uBAAuB;AAAA,IACrC,SAAS,KAAU;AACjB,cAAQ,KAAK,kCAAkC,IAAI,OAAO;AAC1D,UAAI,IAAI,SAAS,SAAS,oBAAoB,KAAK,IAAI,SAAS,SAAS,YAAY,GAAG;AACtF,gBAAQ,KAAK,wFAA8E;AAC3F,gBAAQ,KAAK,mEAAmE;AAChF,gBAAQ,KAAK,6CAA6C;AAC1D,gBAAQ,KAAK,6DAAwD;AACrE,gBAAQ,KAAK,wFAAwF;AACrG,gBAAQ,KAAK,+CAA+C;AAAA,MAC9D;AACA,mBAAa;AAAA,IACf;AAAA,EACF;AAGA,MAAI,WAA4B;AAChC,MAAI,IAAI,mBAAmB,IAAI,sBAAsB;AACnD,YAAQ,IAAI,yBAAyB;AACrC,eAAW,IAAI,SAAS;AAAA,MACtB,OAAO,IAAI;AAAA,MACX,eAAe,IAAI;AAAA,MACnB,UAAU,IAAI;AAAA,MACd,YAAY,IAAI,sBAAsB;AAAA,MACtC,MAAM,SAAS,IAAI,cAAc,MAAM;AAAA,MACvC,gBAAgB,IAAI,wBAAwB,MAAM,GAAG,KAAK,CAAC;AAAA,MAC3D,mBAAmB,IAAI,2BAA2B,MAAM,GAAG,KAAK,CAAC;AAAA,IACnE,CAAC;AACD,UAAM,SAAS,MAAM;AACrB,YAAQ,IAAI,qBAAqB;AAAA,EACnC;AAGA,MAAI,cAAkC;AACtC,MAAI,IAAI,kBAAkB;AACxB,YAAQ,IAAI,4BAA4B;AACxC,QAAI;AACF,oBAAc,IAAI,YAAY;AAAA,QAC5B,SAAS,IAAI;AAAA,QACb,gBAAgB,IAAI,0BAA0B,MAAM,GAAG,EAAE,OAAO,OAAO,KAAK,CAAC;AAAA,QAC7E,SAAS;AAAA,MACX,CAAC;AACD,YAAM,YAAY,MAAM;AACxB,cAAQ,IAAI,mDAAmD;AAAA,IACjE,SAAS,KAAU;AACjB,cAAQ,KAAK,mCAAmC,IAAI,OAAO;AAC3D,oBAAc;AAAA,IAChB;AAAA,EACF;AAGA,MAAI,YAA8B;AAClC,MAAI,IAAI,kBAAkB,IAAI,qBAAqB;AACjD,YAAQ,IAAI,0BAA0B;AACtC,QAAI;AACF,kBAAY,IAAI,UAAU;AAAA,QACxB,aAAa,IAAI;AAAA,QACjB,eAAe,IAAI;AAAA,QACnB,gBAAgB,IAAI,wBAAwB,MAAM,GAAG,EAAE,OAAO,OAAO,KAAK,CAAC;AAAA,MAC7E,CAAC;AACD,YAAM,UAAU,MAAM;AACtB,cAAQ,IAAI,sBAAsB;AAAA,IACpC,SAAS,KAAU;AACjB,cAAQ,KAAK,iCAAiC,IAAI,OAAO;AACzD,cAAQ,KAAK,2DAA2D;AACxE,kBAAY;AAAA,IACd;AAAA,EACF;AAGA,MAAI,cAAkC;AACtC,MAAI,IAAI,kBAAkB;AACxB,YAAQ,IAAI,4BAA4B;AACxC,QAAI;AACF,oBAAc,IAAI,YAAY;AAAA,QAC5B,MAAM,IAAI;AAAA,QACV,WAAW,IAAI;AAAA,QACf,UAAU,IAAI;AAAA,QACd,gBAAgB,IAAI,0BAA0B,MAAM,GAAG,EAAE,OAAO,OAAO,KAAK,CAAC;AAAA,MAC/E,CAAC;AACD,YAAM,YAAY,MAAM;AACxB,cAAQ,IAAI,wBAAwB;AAAA,IACtC,SAAS,KAAU;AACjB,cAAQ,KAAK,mCAAmC,IAAI,OAAO;AAC3D,UAAI,QAAQ,aAAa,UAAU;AACjC,gBAAQ,KAAK,gDAAgD;AAAA,MAC/D;AACA,oBAAc;AAAA,IAChB;AAAA,EACF;AAGA,UAAQ,IAAI,iCAAiC,IAAI,IAAI,KAAK;AAC1D,QAAM,SAAS,IAAI,MAAM;AAAA,IACvB,MAAM,IAAI;AAAA,IACV,OAAO,CAAC,KAAKA,YAAW;AAEtB,UAAI,IAAI,QAAQ,IAAI,SAAS,MAAM,aAAa;AAC9C,cAAM,SAAS,kBAAU,cAAc,KAAKA,OAAM;AAClD,YAAI,OAAQ,QAAO;AAEnB,eAAO;AAAA,MACT;AAEA,aAAO,IAAI,MAAM,GAAG;AAAA,IACtB;AAAA,IACA,WAAW,kBAAU;AAAA,EACvB,CAAC;AAED,UAAQ,IAAI,4CAA4C,OAAO,IAAI,EAAE;AACrE,UAAQ,IAAI,2CAA2C,OAAO,IAAI,KAAK;AACvE,UAAQ,IAAI,iDAAiD,OAAO,IAAI,EAAE;AAG1E,MAAI,YAA2B;AAC/B,MAAK,IAAY,gBAAgB;AAC/B,QAAI;AACF,YAAM,EAAE,gBAAgB,IAAI,MAAM,OAAO,sBAAe;AACxD,kBAAY,MAAM;AAAA,QAChB,IAAI;AAAA,QACH,IAAY,mBAAmB;AAAA,QAChC;AAAA,UACE,WAAY,IAAY;AAAA,UACxB,WAAY,IAAY;AAAA,QAC1B;AAAA,MACF;AAAA,IACF,SAAS,KAAU;AACjB,cAAQ,KAAK,6BAA6B,IAAI,OAAO;AAAA,IACvD;AAAA,EACF;AAGA,MAAK,IAAY,gBAAgB;AAC/B,QAAI;AACF,YAAM,EAAE,gBAAgB,IAAI,MAAM,OAAO,wBAA0B;AACnE,sBAAgB,gBAAiB,IAAY,cAAc;AAC3D,cAAQ,IAAI,qBAAsB,IAAY,cAAc,EAAE;AAAA,IAChE,QAAQ;AAAA,IAER;AAAA,EACF;AAGA,MAAK,IAAY,iBAAiB;AAChC,QAAI;AACF,YAAM,EAAE,eAAe,IAAI,MAAM,OAAO,uBAAyB;AACjE,UAAK,IAAY,+BAA+B;AAC9C,uBAAe,gBAAiB,IAAY,6BAA6B;AAAA,MAC3E;AACA,YAAM,OAAO,eAAe,aAAa;AACzC,cAAQ,IAAI,2CAA2C,IAAI,EAAE;AAAA,IAC/D,QAAQ;AAAA,IAER;AAAA,EACF;AAGA,MAAI,YAAiB;AACrB,MAAK,IAAY,kBAAmB,IAAY,yBAA0B,IAAY,qBAAqB;AACzG,YAAQ,IAAI,0BAA0B;AACtC,QAAI;AACF,YAAM,EAAE,UAAU,IAAI,MAAM,OAAO,sBAAiB;AACpD,kBAAY,IAAI,UAAU;AAAA,QACxB,eAAgB,IAAY;AAAA,QAC5B,aAAc,IAAY;AAAA,QAC1B,QAAS,IAAY,kBAAkB;AAAA,QACvC,gBAAiB,IAAY,yBAAyB,MAAM,GAAG,EAAE,OAAO,OAAO;AAAA,QAC/E,UAAW,IAAY,oBAAoB;AAAA,QAC3C,YAAa,IAAY,sBAAsB;AAAA,MACjD,CAAC;AACD,YAAM,UAAU,MAAM;AACtB,cAAQ,IAAI,sBAAsB;AAAA,IACpC,SAAS,KAAU;AACjB,cAAQ,KAAK,iCAAiC,IAAI,OAAO;AACzD,kBAAY;AAAA,IACd;AAAA,EACF;AAEA,UAAQ,IAAI,EAAE;AACd,QAAM,WAAW;AAAA,IACf,MAAM,aAAa;AAAA,IACnB,aAAa,YAAY;AAAA,IACzB,WAAW,UAAU;AAAA,IACrB,cAAc,aAAa;AAAA,IAC3B,YAAY,WAAW;AAAA,IACvB,cAAc,aAAa;AAAA,IAC3B,YAAY,WAAW;AAAA,IACvB;AAAA,IACA;AAAA,EACF,EAAE,OAAO,OAAO,EAAE,KAAK,IAAI;AAC3B,UAAQ,IAAI,6CAA6C,QAAQ,GAAG;AACpE,MAAI,WAAW;AACb,YAAQ,IAAI,eAAe,SAAS,EAAE;AAAA,EACxC;AAGA,SAAO,eAAe,WAAW;AAC/B,YAAQ,IAAI,oBAAoB;AAChC,eAAW;AACX,sBAAU,oBAAoB;AAC9B,QAAI,YAAa,OAAM,YAAY,SAAS;AAC5C,QAAI,IAAK,OAAM,IAAI,KAAK;AACxB,QAAI,WAAY,OAAM,WAAW,KAAK;AACtC,QAAI,SAAU,OAAM,SAAS,KAAK;AAClC,QAAI,YAAa,OAAM,YAAY,KAAK;AACxC,QAAI,UAAW,OAAM,UAAU,KAAK;AACpC,QAAI,YAAa,OAAM,YAAY,KAAK;AACxC,QAAI,UAAW,OAAM,UAAU,KAAK;AAEpC,QAAI;AACF,YAAM,EAAE,WAAW,IAAI,MAAM,OAAO,sBAAe;AACnD,YAAM,WAAW;AAAA,IACnB,QAAQ;AAAA,IAA0B;AAClC,WAAO,KAAK;AAAA,EACd;AACF;","names":["server"]}
@@ -1,38 +0,0 @@
1
- import {
2
- TOOLS,
3
- executeTool,
4
- getMCPRegistry,
5
- setMCPRegistry
6
- } from "./chunk-766ASQWE.js";
7
- import "./chunk-IZJMVV7O.js";
8
- import "./chunk-6PMVAAA7.js";
9
- import "./chunk-MQJ2ECQT.js";
10
- import "./chunk-TVEWKIK3.js";
11
- import "./chunk-BRBWNV65.js";
12
- import "./chunk-H5RQOFO2.js";
13
- import "./chunk-VRD5CYRL.js";
14
- import "./chunk-KM22GV7G.js";
15
- import "./chunk-P6QINGFL.js";
16
- import "./chunk-HN3F4WSW.js";
17
- import "./chunk-SVAPX2XN.js";
18
- import "./chunk-WRAKK6K6.js";
19
- import "./chunk-7WQO5J2M.js";
20
- import "./chunk-BXZ6EA52.js";
21
- import "./chunk-4GLYY4NN.js";
22
- import "./chunk-EVE7MIIY.js";
23
- import "./chunk-RZ4YESBG.js";
24
- import "./chunk-CQ4JURG7.js";
25
- import "./chunk-OCVQGBJK.js";
26
- import "./chunk-XKYRH4FM.js";
27
- import "./chunk-ZLZKF2PM.js";
28
- import "./chunk-6KONMXQ6.js";
29
- import "./chunk-22VGGA7S.js";
30
- import "./chunk-35WYTA3C.js";
31
- import "./chunk-PLDDJCW6.js";
32
- export {
33
- TOOLS,
34
- executeTool,
35
- getMCPRegistry,
36
- setMCPRegistry
37
- };
38
- //# sourceMappingURL=tools-2RLEI2N6.js.map