opensentinel 3.1.1 → 3.7.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (361) hide show
  1. package/README.md +138 -83
  2. package/dist/agent-manager-JZ4IM7XI.js +39 -0
  3. package/dist/agent-processor-DDDHC2SO.js +281 -0
  4. package/dist/agent-processor-DDDHC2SO.js.map +1 -0
  5. package/dist/agent-types-2T4PXLFQ.js +12 -0
  6. package/dist/alerting-LK7VVYTX.js +699 -0
  7. package/dist/alerting-LK7VVYTX.js.map +1 -0
  8. package/dist/analysis-agent-JWN2GXYE.js +288 -0
  9. package/dist/analysis-agent-JWN2GXYE.js.map +1 -0
  10. package/dist/analyzer-OTWE3ARE.js +22 -0
  11. package/dist/{archiver-AVNBYCKQ.js → archiver-FPGKRP6P.js} +2 -2
  12. package/dist/{audit-logger-OBPR7CRO.js → audit-logger-CI4WZQPD.js} +6 -5
  13. package/dist/{auth-UOX5K2BE.js → auth-PH5IHISW.js} +2 -2
  14. package/dist/{autonomy-ZXDBDQUJ.js → autonomy-N7W5XPLX.js} +4 -3
  15. package/dist/autonomy-N7W5XPLX.js.map +1 -0
  16. package/dist/{aws-s3-Q4LLZZPD.js → aws-s3-QZMURYXB.js} +2 -2
  17. package/dist/{backup-restore-PZ7CYYB7.js → backup-restore-72OQTZO3.js} +2 -2
  18. package/dist/{blocks-R3PODY47.js → blocks-YOWOESDD.js} +4 -4
  19. package/dist/bot-VDHBGUVI.js +47 -0
  20. package/dist/brain-6QTXN4QP.js +66 -0
  21. package/dist/{camera-monitor-M5CYKUU4.js → camera-monitor-LHTUWHEL.js} +2 -2
  22. package/dist/{charts-V7ARZNKF.js → charts-FJ32GQK7.js} +2 -2
  23. package/dist/{chunk-WRAKK6K6.js → chunk-2I5QHYG6.js} +5 -3
  24. package/dist/chunk-2I5QHYG6.js.map +1 -0
  25. package/dist/{chunk-TVEWKIK3.js → chunk-2WTKTG2C.js} +2 -2
  26. package/dist/chunk-3AWAWRWB.js +143 -0
  27. package/dist/chunk-3AWAWRWB.js.map +1 -0
  28. package/dist/{chunk-ZLZKF2PM.js → chunk-4KIHDIXZ.js} +43 -2
  29. package/dist/chunk-4KIHDIXZ.js.map +1 -0
  30. package/dist/{chunk-EVE7MIIY.js → chunk-4WH6MFEW.js} +15 -16
  31. package/dist/chunk-4WH6MFEW.js.map +1 -0
  32. package/dist/{chunk-I6BDYQIG.js → chunk-56UJS2LA.js} +6 -6
  33. package/dist/chunk-56UJS2LA.js.map +1 -0
  34. package/dist/chunk-5BTVJR7R.js +37 -0
  35. package/dist/chunk-5BTVJR7R.js.map +1 -0
  36. package/dist/chunk-5JJTLWOR.js +1021 -0
  37. package/dist/chunk-5JJTLWOR.js.map +1 -0
  38. package/dist/chunk-66SAOZPU.js +236 -0
  39. package/dist/chunk-66SAOZPU.js.map +1 -0
  40. package/dist/chunk-6HGMRR4J.js +113 -0
  41. package/dist/chunk-6HGMRR4J.js.map +1 -0
  42. package/dist/chunk-6W6PTJFT.js +181 -0
  43. package/dist/chunk-6W6PTJFT.js.map +1 -0
  44. package/dist/chunk-6ZNCY2GI.js +418 -0
  45. package/dist/chunk-6ZNCY2GI.js.map +1 -0
  46. package/dist/chunk-7BNFELEK.js +31 -0
  47. package/dist/chunk-7BNFELEK.js.map +1 -0
  48. package/dist/chunk-ADTDYJO7.js +265 -0
  49. package/dist/chunk-ADTDYJO7.js.map +1 -0
  50. package/dist/{chunk-OCVQGBJK.js → chunk-BBN4VCNK.js} +6 -4
  51. package/dist/chunk-BBN4VCNK.js.map +1 -0
  52. package/dist/{chunk-SJSUSJ47.js → chunk-BNZHWAZC.js} +2 -2
  53. package/dist/chunk-C6PELIHS.js +60 -0
  54. package/dist/chunk-C6PELIHS.js.map +1 -0
  55. package/dist/{chunk-MQJ2ECQT.js → chunk-CUPEENUY.js} +3 -3
  56. package/dist/{chunk-NHMBTUMW.js → chunk-CWT6CAE5.js} +2 -2
  57. package/dist/{chunk-4GLYY4NN.js → chunk-CZTMGHUC.js} +8 -2
  58. package/dist/chunk-CZTMGHUC.js.map +1 -0
  59. package/dist/{chunk-RZ4YESBG.js → chunk-DOYGMNMK.js} +1 -1
  60. package/dist/chunk-DOYGMNMK.js.map +1 -0
  61. package/dist/chunk-DTISLIMB.js +89 -0
  62. package/dist/chunk-DTISLIMB.js.map +1 -0
  63. package/dist/{chunk-SPPMCAKG.js → chunk-GBVJTRXS.js} +2 -2
  64. package/dist/chunk-GBVJTRXS.js.map +1 -0
  65. package/dist/{chunk-AYUKPTSM.js → chunk-GJETKBOY.js} +96 -218
  66. package/dist/chunk-GJETKBOY.js.map +1 -0
  67. package/dist/{chunk-BXZ6EA52.js → chunk-GW6V4D43.js} +57 -3
  68. package/dist/chunk-GW6V4D43.js.map +1 -0
  69. package/dist/{chunk-6PMVAAA7.js → chunk-HJSEEFO3.js} +3 -3
  70. package/dist/{chunk-TYAGMJNV.js → chunk-HQZQFEAX.js} +5 -5
  71. package/dist/{chunk-MXAPLSJ5.js → chunk-J4JW73TT.js} +2 -2
  72. package/dist/{chunk-VEHFVBLI.js → chunk-JHYYFPKX.js} +2 -2
  73. package/dist/chunk-LFDXEYYB.js +150 -0
  74. package/dist/chunk-LFDXEYYB.js.map +1 -0
  75. package/dist/chunk-MIC5IBQF.js +386 -0
  76. package/dist/chunk-MIC5IBQF.js.map +1 -0
  77. package/dist/chunk-ODCFS5WD.js +463 -0
  78. package/dist/chunk-ODCFS5WD.js.map +1 -0
  79. package/dist/{chunk-XMCVRVTF.js → chunk-P64EV4YY.js} +1 -1
  80. package/dist/chunk-P64EV4YY.js.map +1 -0
  81. package/dist/chunk-PBOCSGNL.js +84 -0
  82. package/dist/chunk-PBOCSGNL.js.map +1 -0
  83. package/dist/{chunk-66OJ3WB4.js → chunk-PD3CTDO6.js} +2 -2
  84. package/dist/chunk-QPY3WRVM.js +647 -0
  85. package/dist/chunk-QPY3WRVM.js.map +1 -0
  86. package/dist/chunk-S2EOIVF4.js +3907 -0
  87. package/dist/chunk-S2EOIVF4.js.map +1 -0
  88. package/dist/chunk-SDLOMKCW.js +213 -0
  89. package/dist/chunk-SDLOMKCW.js.map +1 -0
  90. package/dist/chunk-TKBVW7ZJ.js +162 -0
  91. package/dist/chunk-TKBVW7ZJ.js.map +1 -0
  92. package/dist/{chunk-BRBWNV65.js → chunk-U2X2J3FI.js} +3 -3
  93. package/dist/chunk-U2X2J3FI.js.map +1 -0
  94. package/dist/{chunk-PLDDJCW6.js → chunk-UP2VWCW5.js} +1 -12
  95. package/dist/{chunk-SVAPX2XN.js → chunk-V3OKHQUX.js} +9 -7
  96. package/dist/{chunk-SVAPX2XN.js.map → chunk-V3OKHQUX.js.map} +1 -1
  97. package/dist/{chunk-4UOE5TUZ.js → chunk-WMDVOWN6.js} +4 -4
  98. package/dist/chunk-WMFYI7XC.js +564 -0
  99. package/dist/chunk-WMFYI7XC.js.map +1 -0
  100. package/dist/chunk-WZAH34TG.js +129 -0
  101. package/dist/chunk-WZAH34TG.js.map +1 -0
  102. package/dist/{chunk-H5RQOFO2.js → chunk-X6Q3K3L2.js} +6 -6
  103. package/dist/chunk-X6Q3K3L2.js.map +1 -0
  104. package/dist/chunk-XTX7EK43.js +134 -0
  105. package/dist/chunk-XTX7EK43.js.map +1 -0
  106. package/dist/chunk-YEDEAX6Y.js +194 -0
  107. package/dist/chunk-YEDEAX6Y.js.map +1 -0
  108. package/dist/{chunk-XKYRH4FM.js → chunk-ZIBRVA3Y.js} +70 -30
  109. package/dist/chunk-ZIBRVA3Y.js.map +1 -0
  110. package/dist/chunk-ZIYTHUM5.js +457 -0
  111. package/dist/chunk-ZIYTHUM5.js.map +1 -0
  112. package/dist/{chunk-766ASQWE.js → chunk-ZMML6T63.js} +2711 -2329
  113. package/dist/chunk-ZMML6T63.js.map +1 -0
  114. package/dist/chunk-ZVHG4KF2.js +380 -0
  115. package/dist/chunk-ZVHG4KF2.js.map +1 -0
  116. package/dist/chunker-K6WTR62A.js +12 -0
  117. package/dist/cli.js +1 -1
  118. package/dist/cli.js.map +1 -1
  119. package/dist/{client-ZQSFPMOB.js → client-FOIYPOZQ.js} +5 -6
  120. package/dist/{clipboard-manager-TEO2GEDN.js → clipboard-manager-4SBNESGZ.js} +2 -2
  121. package/dist/coding-agent-DESSU3AC.js +233 -0
  122. package/dist/coding-agent-DESSU3AC.js.map +1 -0
  123. package/dist/commands/setup.js +2 -2
  124. package/dist/commands/start.js +3 -3
  125. package/dist/commands/status.js +2 -2
  126. package/dist/commands/stop.js +2 -2
  127. package/dist/commands/utils.js +2 -2
  128. package/dist/cost-tracker-KZQSTSE2.js +11 -0
  129. package/dist/{cron-explain-HHQKPD3M.js → cron-explain-UOOOYWZZ.js} +2 -2
  130. package/dist/{crypto-4AP47IKC.js → crypto-2VG3RJR2.js} +2 -2
  131. package/dist/{databases-37X4CI2Y.js → databases-XDPMG5AV.js} +4 -4
  132. package/dist/db-I7MNG6CL.js +83 -0
  133. package/dist/discord-6UQHCN27.js +81 -0
  134. package/dist/documents-PFHSK7SZ.js +184 -0
  135. package/dist/documents-PFHSK7SZ.js.map +1 -0
  136. package/dist/docx-parser-EXL4TN5E.js +16 -0
  137. package/dist/{email-K7LO2IPB.js → email-6OIN4SYL.js} +34 -25
  138. package/dist/email-6OIN4SYL.js.map +1 -0
  139. package/dist/{enhanced-retrieval-DNLLEM4Z.js → enhanced-retrieval-JWX2HWU4.js} +12 -8
  140. package/dist/{enhanced-retrieval-DNLLEM4Z.js.map → enhanced-retrieval-JWX2HWU4.js.map} +1 -1
  141. package/dist/enrichment-pipeline-7FE5R5ZI.js +14 -0
  142. package/dist/{entity-resolution-Y3IUWEAT.js → entity-resolution-7Z6STVXX.js} +6 -5
  143. package/dist/env-GN5VHI43.js +12 -0
  144. package/dist/error-tracker-64DEH3D7.js +32 -0
  145. package/dist/finnhub-X7ZMQSXF.js +178 -0
  146. package/dist/finnhub-X7ZMQSXF.js.map +1 -0
  147. package/dist/fred-TMUF3J2V.js +203 -0
  148. package/dist/fred-TMUF3J2V.js.map +1 -0
  149. package/dist/github-DUWSXCNP.js +833 -0
  150. package/dist/github-DUWSXCNP.js.map +1 -0
  151. package/dist/{google-workspace-DKWUVNGC.js → google-workspace-TSZPZK5G.js} +2 -2
  152. package/dist/graph-client-NB475AK5.js +17 -0
  153. package/dist/{hash-tool-ULQYD7B5.js → hash-tool-ENAB5LWH.js} +2 -2
  154. package/dist/{heartbeat-monitor-GCISLXI3.js → heartbeat-monitor-KRDYTDBF.js} +2 -2
  155. package/dist/hooks-N4MIFBVM.js +14 -0
  156. package/dist/{image-generation-OSU7FP6F.js → image-generation-MDE6AVQO.js} +2 -2
  157. package/dist/imessage-DSGSGUZS.js +44 -0
  158. package/dist/inbox-summarizer-F2KAU72V.js +56 -0
  159. package/dist/{incident-response-C5J7Q6DT.js → incident-response-E3UGMX5G.js} +8 -6
  160. package/dist/incident-response-E3UGMX5G.js.map +1 -0
  161. package/dist/{inventory-manager-352OHXWD.js → inventory-manager-C67BSZM6.js} +2 -2
  162. package/dist/{jira-GSGDBMIG.js → jira-PAGZWUBJ.js} +2 -2
  163. package/dist/{json-tool-QE2SYHEG.js → json-tool-4FK5RNER.js} +2 -2
  164. package/dist/{key-rotation-DPHU4ZTB.js → key-rotation-WCC5FOYS.js} +2 -2
  165. package/dist/knowledge-base-5SMMOGQJ.js +46 -0
  166. package/dist/lib.d.ts +94 -1
  167. package/dist/lib.js +83 -66
  168. package/dist/lib.js.map +1 -1
  169. package/dist/{mailchimp-KKNF6QJ7.js → mailchimp-ZFYDC44J.js} +2 -2
  170. package/dist/{matrix-QVHG76I7.js → matrix-WYGEOZL5.js} +30 -21
  171. package/dist/{matrix-QVHG76I7.js.map → matrix-WYGEOZL5.js.map} +1 -1
  172. package/dist/{mcp-3JI6W7ZE.js → mcp-DJ2QDA6A.js} +3 -3
  173. package/dist/metrics-BH3ZLGEV.js +25 -0
  174. package/dist/{microsoft365-UCBKJHNX.js → microsoft365-6G2IJMWC.js} +2 -2
  175. package/dist/multi-user-XAEMB244.js +411 -0
  176. package/dist/multi-user-XAEMB244.js.map +1 -0
  177. package/dist/oauth-UPJYFOVU.js +34 -0
  178. package/dist/{ocr-AC7NPX33.js → ocr-UONKTQU7.js} +6 -4
  179. package/dist/{ollama-BOAMSPLJ.js → ollama-J7CU45WT.js} +2 -2
  180. package/dist/osint-agent-RL5XPBRQ.js +189 -0
  181. package/dist/osint-agent-RL5XPBRQ.js.map +1 -0
  182. package/dist/{pages-MI523RB7.js → pages-XDE7JRCA.js} +5 -5
  183. package/dist/{pair-JDFTERIK.js → pair-YZJFQUU5.js} +2 -2
  184. package/dist/{pairing-IFQYCPNS.js → pairing-77N47RAT.js} +2 -2
  185. package/dist/{pdf-ALQVOEJR.js → pdf-67HGXCFJ.js} +3 -3
  186. package/dist/pdf-parser-YLMTTYHL.js +14 -0
  187. package/dist/{presentations-DSV5IHG5.js → presentations-UOET2FVZ.js} +3 -3
  188. package/dist/presentations-UOET2FVZ.js.map +1 -0
  189. package/dist/{prometheus-JNT2BD4L.js → prometheus-YETCZO4I.js} +2 -2
  190. package/dist/prometheus-YETCZO4I.js.map +1 -0
  191. package/dist/{providers-J4LYPHDR.js → providers-2YQ6E3IF.js} +6 -4
  192. package/dist/providers-2YQ6E3IF.js.map +1 -0
  193. package/dist/{qr-code-WIX4PB4U.js → qr-code-6WZJHRKL.js} +2 -2
  194. package/dist/qr-code-6WZJHRKL.js.map +1 -0
  195. package/dist/{quickbooks-XB4NII2S.js → quickbooks-N675W7IK.js} +2 -2
  196. package/dist/{regex-tool-W4ABRKGK.js → regex-tool-6Q63LQ7B.js} +2 -2
  197. package/dist/regex-tool-6Q63LQ7B.js.map +1 -0
  198. package/dist/research-agent-WCRSY3UZ.js +168 -0
  199. package/dist/research-agent-WCRSY3UZ.js.map +1 -0
  200. package/dist/risk-engine-YKCPT5D5.js +10 -0
  201. package/dist/risk-engine-YKCPT5D5.js.map +1 -0
  202. package/dist/scheduler-6PLLAQI7.js +74 -0
  203. package/dist/scheduler-6PLLAQI7.js.map +1 -0
  204. package/dist/schema-ETY7L2VA.js +78 -0
  205. package/dist/schema-ETY7L2VA.js.map +1 -0
  206. package/dist/{search-BCLBO5E3.js → search-GMLKBHSW.js} +4 -4
  207. package/dist/search-GMLKBHSW.js.map +1 -0
  208. package/dist/{sendgrid-RNXCAFKM.js → sendgrid-QGJIVPWV.js} +2 -2
  209. package/dist/sharepoint-V5P4Q62L.js +30 -0
  210. package/dist/sharepoint-V5P4Q62L.js.map +1 -0
  211. package/dist/{shopify-NCXYJB4R.js → shopify-ON2PAU27.js} +2 -2
  212. package/dist/signal-7D5EPGVL.js +44 -0
  213. package/dist/signal-7D5EPGVL.js.map +1 -0
  214. package/dist/slack-KSS6YK5Z.js +86 -0
  215. package/dist/slack-KSS6YK5Z.js.map +1 -0
  216. package/dist/{sms-M3JIOTCW.js → sms-CSUCC7HL.js} +4 -4
  217. package/dist/sms-CSUCC7HL.js.map +1 -0
  218. package/dist/{src-VYUE6LRA.js → src-GO7GGW7O.js} +190 -52
  219. package/dist/src-GO7GGW7O.js.map +1 -0
  220. package/dist/{stocks-XXWBPOCU.js → stocks-4M4HZWZS.js} +2 -2
  221. package/dist/stocks-4M4HZWZS.js.map +1 -0
  222. package/dist/text-extractor-OAUBAW5P.js +12 -0
  223. package/dist/text-extractor-OAUBAW5P.js.map +1 -0
  224. package/dist/{text-transform-6SGUA5Z4.js → text-transform-HCLCUDFZ.js} +2 -2
  225. package/dist/text-transform-HCLCUDFZ.js.map +1 -0
  226. package/dist/token-store-SEWRX6RE.js +20 -0
  227. package/dist/token-store-SEWRX6RE.js.map +1 -0
  228. package/dist/tools-PJZ6RI4P.js +47 -0
  229. package/dist/tools-PJZ6RI4P.js.map +1 -0
  230. package/dist/{tunnel-IWMXUML4.js → tunnel-XOUVVRAK.js} +4 -2
  231. package/dist/tunnel-XOUVVRAK.js.map +1 -0
  232. package/dist/{twilio-53GEW5JT.js → twilio-3L7DUNYQ.js} +2 -2
  233. package/dist/{unit-converter-ZYXMEZOE.js → unit-converter-LYPAHU64.js} +2 -2
  234. package/dist/unit-converter-LYPAHU64.js.map +1 -0
  235. package/dist/whatsapp-DWXK25V2.js +44 -0
  236. package/dist/whatsapp-DWXK25V2.js.map +1 -0
  237. package/dist/{word-document-7B6SJMAY.js → word-document-AV3YB4L2.js} +4 -4
  238. package/dist/word-document-AV3YB4L2.js.map +1 -0
  239. package/dist/workflow-store-5Y56GUP7.js +373 -0
  240. package/dist/workflow-store-5Y56GUP7.js.map +1 -0
  241. package/dist/writing-agent-VDGLNOGO.js +243 -0
  242. package/dist/writing-agent-VDGLNOGO.js.map +1 -0
  243. package/dist/{xero-QYO66D45.js → xero-UHAHVYSD.js} +2 -2
  244. package/dist/{zapier-webhook-TBZ5YF2A.js → zapier-webhook-NIELLTXR.js} +2 -2
  245. package/drizzle/0002_mushy_master_mold.sql +139 -139
  246. package/drizzle/0003_overjoyed_rhodey.sql +46 -0
  247. package/drizzle/meta/0002_snapshot.json +3636 -3636
  248. package/drizzle/meta/0003_snapshot.json +3946 -0
  249. package/drizzle/meta/_journal.json +7 -0
  250. package/package.json +110 -100
  251. package/dist/autonomy-ZXDBDQUJ.js.map +0 -1
  252. package/dist/bot-QRARP4UN.js +0 -36
  253. package/dist/brain-7XLLM3KC.js +0 -56
  254. package/dist/chunk-4GLYY4NN.js.map +0 -1
  255. package/dist/chunk-766ASQWE.js.map +0 -1
  256. package/dist/chunk-AYUKPTSM.js.map +0 -1
  257. package/dist/chunk-BRBWNV65.js.map +0 -1
  258. package/dist/chunk-BXZ6EA52.js.map +0 -1
  259. package/dist/chunk-EVE7MIIY.js.map +0 -1
  260. package/dist/chunk-H5RQOFO2.js.map +0 -1
  261. package/dist/chunk-I6BDYQIG.js.map +0 -1
  262. package/dist/chunk-IZJMVV7O.js +0 -347
  263. package/dist/chunk-IZJMVV7O.js.map +0 -1
  264. package/dist/chunk-O7IH7JTI.js +0 -1898
  265. package/dist/chunk-O7IH7JTI.js.map +0 -1
  266. package/dist/chunk-OCVQGBJK.js.map +0 -1
  267. package/dist/chunk-RZ4YESBG.js.map +0 -1
  268. package/dist/chunk-SPPMCAKG.js.map +0 -1
  269. package/dist/chunk-VRD5CYRL.js +0 -1568
  270. package/dist/chunk-VRD5CYRL.js.map +0 -1
  271. package/dist/chunk-WRAKK6K6.js.map +0 -1
  272. package/dist/chunk-XKYRH4FM.js.map +0 -1
  273. package/dist/chunk-XMCVRVTF.js.map +0 -1
  274. package/dist/chunk-ZLZKF2PM.js.map +0 -1
  275. package/dist/discord-B3HUPGQ6.js +0 -70
  276. package/dist/dist-UISMLMFN.js +0 -21847
  277. package/dist/dist-UISMLMFN.js.map +0 -1
  278. package/dist/email-K7LO2IPB.js.map +0 -1
  279. package/dist/enrichment-pipeline-MNHNW65K.js +0 -13
  280. package/dist/env-IWXUVTCB.js +0 -12
  281. package/dist/imessage-NGA2XF2V.js +0 -35
  282. package/dist/inbox-summarizer-NRI4S7IF.js +0 -47
  283. package/dist/incident-response-C5J7Q6DT.js.map +0 -1
  284. package/dist/presentations-DSV5IHG5.js.map +0 -1
  285. package/dist/scheduler-VK4WFERV.js +0 -63
  286. package/dist/signal-6CGDFYL2.js +0 -35
  287. package/dist/slack-IZQWIKOH.js +0 -75
  288. package/dist/src-VYUE6LRA.js.map +0 -1
  289. package/dist/tools-2RLEI2N6.js +0 -38
  290. package/dist/tunnel-IWMXUML4.js.map +0 -1
  291. package/dist/whatsapp-LFX6YKCM.js +0 -35
  292. package/dist/word-document-7B6SJMAY.js.map +0 -1
  293. /package/dist/{audit-logger-OBPR7CRO.js.map → agent-manager-JZ4IM7XI.js.map} +0 -0
  294. /package/dist/{auth-UOX5K2BE.js.map → agent-types-2T4PXLFQ.js.map} +0 -0
  295. /package/dist/{backup-restore-PZ7CYYB7.js.map → analyzer-OTWE3ARE.js.map} +0 -0
  296. /package/dist/{archiver-AVNBYCKQ.js.map → archiver-FPGKRP6P.js.map} +0 -0
  297. /package/dist/{blocks-R3PODY47.js.map → audit-logger-CI4WZQPD.js.map} +0 -0
  298. /package/dist/{bot-QRARP4UN.js.map → auth-PH5IHISW.js.map} +0 -0
  299. /package/dist/{aws-s3-Q4LLZZPD.js.map → aws-s3-QZMURYXB.js.map} +0 -0
  300. /package/dist/{brain-7XLLM3KC.js.map → backup-restore-72OQTZO3.js.map} +0 -0
  301. /package/dist/{chunk-PLDDJCW6.js.map → blocks-YOWOESDD.js.map} +0 -0
  302. /package/dist/{client-ZQSFPMOB.js.map → bot-VDHBGUVI.js.map} +0 -0
  303. /package/dist/{clipboard-manager-TEO2GEDN.js.map → brain-6QTXN4QP.js.map} +0 -0
  304. /package/dist/{camera-monitor-M5CYKUU4.js.map → camera-monitor-LHTUWHEL.js.map} +0 -0
  305. /package/dist/{charts-V7ARZNKF.js.map → charts-FJ32GQK7.js.map} +0 -0
  306. /package/dist/{chunk-TVEWKIK3.js.map → chunk-2WTKTG2C.js.map} +0 -0
  307. /package/dist/{chunk-SJSUSJ47.js.map → chunk-BNZHWAZC.js.map} +0 -0
  308. /package/dist/{chunk-MQJ2ECQT.js.map → chunk-CUPEENUY.js.map} +0 -0
  309. /package/dist/{chunk-NHMBTUMW.js.map → chunk-CWT6CAE5.js.map} +0 -0
  310. /package/dist/{chunk-6PMVAAA7.js.map → chunk-HJSEEFO3.js.map} +0 -0
  311. /package/dist/{chunk-TYAGMJNV.js.map → chunk-HQZQFEAX.js.map} +0 -0
  312. /package/dist/{chunk-MXAPLSJ5.js.map → chunk-J4JW73TT.js.map} +0 -0
  313. /package/dist/{chunk-VEHFVBLI.js.map → chunk-JHYYFPKX.js.map} +0 -0
  314. /package/dist/{chunk-66OJ3WB4.js.map → chunk-PD3CTDO6.js.map} +0 -0
  315. /package/dist/{cron-explain-HHQKPD3M.js.map → chunk-UP2VWCW5.js.map} +0 -0
  316. /package/dist/{chunk-4UOE5TUZ.js.map → chunk-WMDVOWN6.js.map} +0 -0
  317. /package/dist/{crypto-4AP47IKC.js.map → chunker-K6WTR62A.js.map} +0 -0
  318. /package/dist/{databases-37X4CI2Y.js.map → client-FOIYPOZQ.js.map} +0 -0
  319. /package/dist/{discord-B3HUPGQ6.js.map → clipboard-manager-4SBNESGZ.js.map} +0 -0
  320. /package/dist/{enrichment-pipeline-MNHNW65K.js.map → cost-tracker-KZQSTSE2.js.map} +0 -0
  321. /package/dist/{entity-resolution-Y3IUWEAT.js.map → cron-explain-UOOOYWZZ.js.map} +0 -0
  322. /package/dist/{env-IWXUVTCB.js.map → crypto-2VG3RJR2.js.map} +0 -0
  323. /package/dist/{hash-tool-ULQYD7B5.js.map → databases-XDPMG5AV.js.map} +0 -0
  324. /package/dist/{heartbeat-monitor-GCISLXI3.js.map → db-I7MNG6CL.js.map} +0 -0
  325. /package/dist/{imessage-NGA2XF2V.js.map → discord-6UQHCN27.js.map} +0 -0
  326. /package/dist/{inbox-summarizer-NRI4S7IF.js.map → docx-parser-EXL4TN5E.js.map} +0 -0
  327. /package/dist/{inventory-manager-352OHXWD.js.map → enrichment-pipeline-7FE5R5ZI.js.map} +0 -0
  328. /package/dist/{json-tool-QE2SYHEG.js.map → entity-resolution-7Z6STVXX.js.map} +0 -0
  329. /package/dist/{key-rotation-DPHU4ZTB.js.map → env-GN5VHI43.js.map} +0 -0
  330. /package/dist/{mcp-3JI6W7ZE.js.map → error-tracker-64DEH3D7.js.map} +0 -0
  331. /package/dist/{google-workspace-DKWUVNGC.js.map → google-workspace-TSZPZK5G.js.map} +0 -0
  332. /package/dist/{ocr-AC7NPX33.js.map → graph-client-NB475AK5.js.map} +0 -0
  333. /package/dist/{ollama-BOAMSPLJ.js.map → hash-tool-ENAB5LWH.js.map} +0 -0
  334. /package/dist/{pages-MI523RB7.js.map → heartbeat-monitor-KRDYTDBF.js.map} +0 -0
  335. /package/dist/{pairing-IFQYCPNS.js.map → hooks-N4MIFBVM.js.map} +0 -0
  336. /package/dist/{image-generation-OSU7FP6F.js.map → image-generation-MDE6AVQO.js.map} +0 -0
  337. /package/dist/{pdf-ALQVOEJR.js.map → imessage-DSGSGUZS.js.map} +0 -0
  338. /package/dist/{prometheus-JNT2BD4L.js.map → inbox-summarizer-F2KAU72V.js.map} +0 -0
  339. /package/dist/{providers-J4LYPHDR.js.map → inventory-manager-C67BSZM6.js.map} +0 -0
  340. /package/dist/{jira-GSGDBMIG.js.map → jira-PAGZWUBJ.js.map} +0 -0
  341. /package/dist/{qr-code-WIX4PB4U.js.map → json-tool-4FK5RNER.js.map} +0 -0
  342. /package/dist/{regex-tool-W4ABRKGK.js.map → key-rotation-WCC5FOYS.js.map} +0 -0
  343. /package/dist/{scheduler-VK4WFERV.js.map → knowledge-base-5SMMOGQJ.js.map} +0 -0
  344. /package/dist/{mailchimp-KKNF6QJ7.js.map → mailchimp-ZFYDC44J.js.map} +0 -0
  345. /package/dist/{search-BCLBO5E3.js.map → mcp-DJ2QDA6A.js.map} +0 -0
  346. /package/dist/{signal-6CGDFYL2.js.map → metrics-BH3ZLGEV.js.map} +0 -0
  347. /package/dist/{microsoft365-UCBKJHNX.js.map → microsoft365-6G2IJMWC.js.map} +0 -0
  348. /package/dist/{slack-IZQWIKOH.js.map → oauth-UPJYFOVU.js.map} +0 -0
  349. /package/dist/{sms-M3JIOTCW.js.map → ocr-UONKTQU7.js.map} +0 -0
  350. /package/dist/{stocks-XXWBPOCU.js.map → ollama-J7CU45WT.js.map} +0 -0
  351. /package/dist/{text-transform-6SGUA5Z4.js.map → pages-XDE7JRCA.js.map} +0 -0
  352. /package/dist/{pair-JDFTERIK.js.map → pair-YZJFQUU5.js.map} +0 -0
  353. /package/dist/{tools-2RLEI2N6.js.map → pairing-77N47RAT.js.map} +0 -0
  354. /package/dist/{unit-converter-ZYXMEZOE.js.map → pdf-67HGXCFJ.js.map} +0 -0
  355. /package/dist/{whatsapp-LFX6YKCM.js.map → pdf-parser-YLMTTYHL.js.map} +0 -0
  356. /package/dist/{quickbooks-XB4NII2S.js.map → quickbooks-N675W7IK.js.map} +0 -0
  357. /package/dist/{sendgrid-RNXCAFKM.js.map → sendgrid-QGJIVPWV.js.map} +0 -0
  358. /package/dist/{shopify-NCXYJB4R.js.map → shopify-ON2PAU27.js.map} +0 -0
  359. /package/dist/{twilio-53GEW5JT.js.map → twilio-3L7DUNYQ.js.map} +0 -0
  360. /package/dist/{xero-QYO66D45.js.map → xero-UHAHVYSD.js.map} +0 -0
  361. /package/dist/{zapier-webhook-TBZ5YF2A.js.map → zapier-webhook-NIELLTXR.js.map} +0 -0
@@ -1,8 +1,8 @@
1
1
  import {
2
2
  OllamaProvider
3
3
  } from "./chunk-35WYTA3C.js";
4
- import "./chunk-PLDDJCW6.js";
4
+ import "./chunk-UP2VWCW5.js";
5
5
  export {
6
6
  OllamaProvider
7
7
  };
8
- //# sourceMappingURL=ollama-BOAMSPLJ.js.map
8
+ //# sourceMappingURL=ollama-J7CU45WT.js.map
@@ -0,0 +1,189 @@
1
+ import {
2
+ AGENT_SYSTEM_PROMPTS,
3
+ AGENT_TOOL_PERMISSIONS
4
+ } from "./chunk-LFDXEYYB.js";
5
+ import "./chunk-UP2VWCW5.js";
6
+
7
+ // src/core/agents/specialized/osint-agent.ts
8
+ var OSINT_AGENT_CONFIG = {
9
+ type: "osint",
10
+ name: "OSINT Agent",
11
+ description: "Specialized agent for open source intelligence gathering, entity investigation, and relationship mapping using public records",
12
+ systemPrompt: AGENT_SYSTEM_PROMPTS.osint,
13
+ tools: AGENT_TOOL_PERMISSIONS.osint,
14
+ settings: {
15
+ maxApiCalls: 50,
16
+ maxEntitiesPerInvestigation: 200,
17
+ requireProvenance: true,
18
+ autoEnrichDepth: 2,
19
+ confidenceThreshold: 0.7,
20
+ sources: ["fec", "irs990", "usaspending", "sec", "opencorporates"]
21
+ },
22
+ outputFormat: {
23
+ sections: [
24
+ "Target Overview",
25
+ "Financial Connections",
26
+ "Organizational Structure",
27
+ "Political Contributions",
28
+ "Government Contracts",
29
+ "Regulatory Filings",
30
+ "Relationship Map",
31
+ "Key Findings",
32
+ "Confidence Assessment",
33
+ "Recommended Next Steps"
34
+ ],
35
+ requireProvenance: true,
36
+ maxLength: 1e4
37
+ },
38
+ strategies: {
39
+ financialTrace: {
40
+ description: "Trace money flows through political and business entities",
41
+ primarySources: ["fec", "usaspending", "irs990"]
42
+ },
43
+ corporateStructure: {
44
+ description: "Map corporate hierarchies and officer networks",
45
+ primarySources: ["opencorporates", "sec"]
46
+ },
47
+ politicalNetwork: {
48
+ description: "Map political donation networks and lobbying connections",
49
+ primarySources: ["fec", "irs990"]
50
+ },
51
+ fullProfile: {
52
+ description: "Comprehensive investigation using all sources",
53
+ primarySources: ["fec", "irs990", "usaspending", "sec", "opencorporates"]
54
+ }
55
+ }
56
+ };
57
+ var OSINT_TEMPLATES = {
58
+ personInvestigation: {
59
+ name: "Person Investigation",
60
+ objective: "Build a comprehensive profile of an individual's public financial and organizational connections",
61
+ steps: [
62
+ "Search FEC for political donations",
63
+ "Search OpenCorporates for officer positions",
64
+ "Search SEC for insider transactions",
65
+ "Cross-reference organizations found",
66
+ "Enrich all discovered entities",
67
+ "Build relationship graph",
68
+ "Analyze financial patterns",
69
+ "Generate intelligence report"
70
+ ]
71
+ },
72
+ organizationInvestigation: {
73
+ name: "Organization Investigation",
74
+ objective: "Map an organization's financial flows, government contracts, and leadership network",
75
+ steps: [
76
+ "Search IRS 990 for nonprofit filings and grants",
77
+ "Search USAspending for federal contracts",
78
+ "Search SEC for corporate filings",
79
+ "Search OpenCorporates for corporate structure",
80
+ "Identify officers and board members",
81
+ "Cross-reference with FEC for political activity",
82
+ "Map financial flow graph",
83
+ "Generate intelligence report"
84
+ ]
85
+ },
86
+ financialFlowAnalysis: {
87
+ name: "Financial Flow Analysis",
88
+ objective: "Trace money flows between entities through grants, donations, and contracts",
89
+ steps: [
90
+ "Identify root funding source",
91
+ "Search IRS 990 for grant disbursements",
92
+ "Search USAspending for government funding",
93
+ "Map pass-through organizations",
94
+ "Build Sankey flow graph",
95
+ "Identify concentrations and patterns",
96
+ "Generate financial flow report"
97
+ ]
98
+ },
99
+ politicalInfluenceMapping: {
100
+ name: "Political Influence Mapping",
101
+ objective: "Map political donation networks and organizational influence",
102
+ steps: [
103
+ "Search FEC for donor history",
104
+ "Identify connected committees and PACs",
105
+ "Cross-reference with IRS 990 for nonprofit political activity",
106
+ "Map donor-to-candidate relationships",
107
+ "Identify bundlers and intermediaries",
108
+ "Analyze donation timing patterns",
109
+ "Generate influence map report"
110
+ ]
111
+ }
112
+ };
113
+ function validateOSINTOutput(output) {
114
+ const issues = [];
115
+ let score = 100;
116
+ const sourceKeywords = ["source:", "fec", "irs 990", "usaspending", "sec", "opencorporates", "ein:", "cik:"];
117
+ const hasProvenance = sourceKeywords.some((k) => output.toLowerCase().includes(k));
118
+ if (!hasProvenance) {
119
+ issues.push("Missing data source provenance");
120
+ score -= 25;
121
+ }
122
+ if (!output.toLowerCase().includes("confidence")) {
123
+ issues.push("Missing confidence assessment");
124
+ score -= 15;
125
+ }
126
+ const hasFinancialData = /\$[\d,]+/.test(output) || output.toLowerCase().includes("amount");
127
+ if (!hasFinancialData) {
128
+ issues.push("No financial figures cited");
129
+ score -= 10;
130
+ }
131
+ if (output.length < 1e3) {
132
+ issues.push("Investigation output too brief");
133
+ score -= 15;
134
+ }
135
+ const relationKeywords = ["connected to", "related to", "officer of", "donated to", "funded", "contracted"];
136
+ const hasRelationships = relationKeywords.some((k) => output.toLowerCase().includes(k));
137
+ if (!hasRelationships) {
138
+ issues.push("Missing entity relationship descriptions");
139
+ score -= 10;
140
+ }
141
+ const hasIdentifiers = /\b\d{2}-\d{7}\b/.test(output) || /\bEIN\b/i.test(output) || /\bCIK\b/i.test(output);
142
+ if (!hasIdentifiers) {
143
+ issues.push("No entity identifiers (EIN, CIK) referenced");
144
+ score -= 5;
145
+ }
146
+ return {
147
+ isValid: issues.length === 0,
148
+ issues,
149
+ score: Math.max(0, score)
150
+ };
151
+ }
152
+ function buildOSINTPrompt(target, investigationType, additionalContext) {
153
+ let prompt = `Investigation Target: ${target}
154
+
155
+ `;
156
+ if (investigationType && OSINT_TEMPLATES[investigationType]) {
157
+ const t = OSINT_TEMPLATES[investigationType];
158
+ prompt += `Investigation Type: ${t.name}
159
+ `;
160
+ prompt += `Objective: ${t.objective}
161
+ `;
162
+ prompt += `Steps:
163
+ ${t.steps.map((s, i) => `${i + 1}. ${s}`).join("\n")}
164
+
165
+ `;
166
+ }
167
+ if (additionalContext) {
168
+ prompt += `Additional Context:
169
+ ${additionalContext}
170
+
171
+ `;
172
+ }
173
+ prompt += `Conduct a thorough OSINT investigation following your guidelines. Use osint_search to query public records, osint_enrich to build the knowledge graph, osint_graph to query relationships, and osint_analyze to generate insights. Report findings with provenance and confidence levels.`;
174
+ return prompt;
175
+ }
176
+ var osint_agent_default = {
177
+ OSINT_AGENT_CONFIG,
178
+ OSINT_TEMPLATES,
179
+ validateOSINTOutput,
180
+ buildOSINTPrompt
181
+ };
182
+ export {
183
+ OSINT_AGENT_CONFIG,
184
+ OSINT_TEMPLATES,
185
+ buildOSINTPrompt,
186
+ osint_agent_default as default,
187
+ validateOSINTOutput
188
+ };
189
+ //# sourceMappingURL=osint-agent-RL5XPBRQ.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/core/agents/specialized/osint-agent.ts"],"sourcesContent":["import { AgentType, AGENT_SYSTEM_PROMPTS, AGENT_TOOL_PERMISSIONS } from \"../agent-types\";\n\nexport const OSINT_AGENT_CONFIG = {\n type: \"osint\" as AgentType,\n name: \"OSINT Agent\",\n description: \"Specialized agent for open source intelligence gathering, entity investigation, and relationship mapping using public records\",\n\n systemPrompt: AGENT_SYSTEM_PROMPTS.osint,\n tools: AGENT_TOOL_PERMISSIONS.osint,\n\n settings: {\n maxApiCalls: 50,\n maxEntitiesPerInvestigation: 200,\n requireProvenance: true,\n autoEnrichDepth: 2,\n confidenceThreshold: 0.7,\n sources: [\"fec\", \"irs990\", \"usaspending\", \"sec\", \"opencorporates\"],\n },\n\n outputFormat: {\n sections: [\n \"Target Overview\",\n \"Financial Connections\",\n \"Organizational Structure\",\n \"Political Contributions\",\n \"Government Contracts\",\n \"Regulatory Filings\",\n \"Relationship Map\",\n \"Key Findings\",\n \"Confidence Assessment\",\n \"Recommended Next Steps\",\n ],\n requireProvenance: true,\n maxLength: 10000,\n },\n\n strategies: {\n financialTrace: {\n description: \"Trace money flows through political and business entities\",\n primarySources: [\"fec\", \"usaspending\", \"irs990\"],\n },\n corporateStructure: {\n description: \"Map corporate hierarchies and officer networks\",\n primarySources: [\"opencorporates\", \"sec\"],\n },\n politicalNetwork: {\n description: \"Map political donation networks and lobbying connections\",\n primarySources: [\"fec\", \"irs990\"],\n },\n fullProfile: {\n description: \"Comprehensive investigation using all sources\",\n primarySources: [\"fec\", \"irs990\", \"usaspending\", \"sec\", \"opencorporates\"],\n },\n },\n};\n\nexport const OSINT_TEMPLATES = {\n personInvestigation: {\n name: \"Person Investigation\",\n objective: \"Build a comprehensive profile of an individual's public financial and organizational connections\",\n steps: [\n \"Search FEC for political donations\",\n \"Search OpenCorporates for officer positions\",\n \"Search SEC for insider transactions\",\n \"Cross-reference organizations found\",\n \"Enrich all discovered entities\",\n \"Build relationship graph\",\n \"Analyze financial patterns\",\n \"Generate intelligence report\",\n ],\n },\n organizationInvestigation: {\n name: \"Organization Investigation\",\n objective: \"Map an organization's financial flows, government contracts, and leadership network\",\n steps: [\n \"Search IRS 990 for nonprofit filings and grants\",\n \"Search USAspending for federal contracts\",\n \"Search SEC for corporate filings\",\n \"Search OpenCorporates for corporate structure\",\n \"Identify officers and board members\",\n \"Cross-reference with FEC for political activity\",\n \"Map financial flow graph\",\n \"Generate intelligence report\",\n ],\n },\n financialFlowAnalysis: {\n name: \"Financial Flow Analysis\",\n objective: \"Trace money flows between entities through grants, donations, and contracts\",\n steps: [\n \"Identify root funding source\",\n \"Search IRS 990 for grant disbursements\",\n \"Search USAspending for government funding\",\n \"Map pass-through organizations\",\n \"Build Sankey flow graph\",\n \"Identify concentrations and patterns\",\n \"Generate financial flow report\",\n ],\n },\n politicalInfluenceMapping: {\n name: \"Political Influence Mapping\",\n objective: \"Map political donation networks and organizational influence\",\n steps: [\n \"Search FEC for donor history\",\n \"Identify connected committees and PACs\",\n \"Cross-reference with IRS 990 for nonprofit political activity\",\n \"Map donor-to-candidate relationships\",\n \"Identify bundlers and intermediaries\",\n \"Analyze donation timing patterns\",\n \"Generate influence map report\",\n ],\n },\n};\n\nexport function validateOSINTOutput(output: string): {\n isValid: boolean;\n issues: string[];\n score: number;\n} {\n const issues: string[] = [];\n let score = 100;\n\n // Check for provenance/source references\n const sourceKeywords = [\"source:\", \"fec\", \"irs 990\", \"usaspending\", \"sec\", \"opencorporates\", \"ein:\", \"cik:\"];\n const hasProvenance = sourceKeywords.some((k) => output.toLowerCase().includes(k));\n if (!hasProvenance) {\n issues.push(\"Missing data source provenance\");\n score -= 25;\n }\n\n // Check for confidence assessment\n if (!output.toLowerCase().includes(\"confidence\")) {\n issues.push(\"Missing confidence assessment\");\n score -= 15;\n }\n\n // Check for financial data\n const hasFinancialData = /\\$[\\d,]+/.test(output) || output.toLowerCase().includes(\"amount\");\n if (!hasFinancialData) {\n issues.push(\"No financial figures cited\");\n score -= 10;\n }\n\n // Check minimum length (OSINT reports should be substantial)\n if (output.length < 1000) {\n issues.push(\"Investigation output too brief\");\n score -= 15;\n }\n\n // Check for relationship descriptions\n const relationKeywords = [\"connected to\", \"related to\", \"officer of\", \"donated to\", \"funded\", \"contracted\"];\n const hasRelationships = relationKeywords.some((k) => output.toLowerCase().includes(k));\n if (!hasRelationships) {\n issues.push(\"Missing entity relationship descriptions\");\n score -= 10;\n }\n\n // Check for entity identifiers\n const hasIdentifiers = /\\b\\d{2}-\\d{7}\\b/.test(output) || /\\bEIN\\b/i.test(output) || /\\bCIK\\b/i.test(output);\n if (!hasIdentifiers) {\n issues.push(\"No entity identifiers (EIN, CIK) referenced\");\n score -= 5;\n }\n\n return {\n isValid: issues.length === 0,\n issues,\n score: Math.max(0, score),\n };\n}\n\nexport function buildOSINTPrompt(\n target: string,\n investigationType?: keyof typeof OSINT_TEMPLATES,\n additionalContext?: string\n): string {\n let prompt = `Investigation Target: ${target}\\n\\n`;\n\n if (investigationType && OSINT_TEMPLATES[investigationType]) {\n const t = OSINT_TEMPLATES[investigationType];\n prompt += `Investigation Type: ${t.name}\\n`;\n prompt += `Objective: ${t.objective}\\n`;\n prompt += `Steps:\\n${t.steps.map((s, i) => `${i + 1}. ${s}`).join(\"\\n\")}\\n\\n`;\n }\n\n if (additionalContext) {\n prompt += `Additional Context:\\n${additionalContext}\\n\\n`;\n }\n\n prompt += `Conduct a thorough OSINT investigation following your guidelines. Use osint_search to query public records, osint_enrich to build the knowledge graph, osint_graph to query relationships, and osint_analyze to generate insights. Report findings with provenance and confidence levels.`;\n\n return prompt;\n}\n\nexport default {\n OSINT_AGENT_CONFIG,\n OSINT_TEMPLATES,\n validateOSINTOutput,\n buildOSINTPrompt,\n};\n"],"mappings":"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","names":[]}
@@ -8,10 +8,10 @@ import {
8
8
  replacePageContent,
9
9
  restorePage,
10
10
  updatePage
11
- } from "./chunk-MQJ2ECQT.js";
12
- import "./chunk-TVEWKIK3.js";
13
- import "./chunk-VRD5CYRL.js";
14
- import "./chunk-PLDDJCW6.js";
11
+ } from "./chunk-CUPEENUY.js";
12
+ import "./chunk-2WTKTG2C.js";
13
+ import "./chunk-C6PELIHS.js";
14
+ import "./chunk-UP2VWCW5.js";
15
15
  export {
16
16
  appendToPage,
17
17
  archivePage,
@@ -23,4 +23,4 @@ export {
23
23
  restorePage,
24
24
  updatePage
25
25
  };
26
- //# sourceMappingURL=pages-MI523RB7.js.map
26
+ //# sourceMappingURL=pages-XDE7JRCA.js.map
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  pairingManager
3
3
  } from "./chunk-3E2PSU2C.js";
4
- import "./chunk-PLDDJCW6.js";
4
+ import "./chunk-UP2VWCW5.js";
5
5
 
6
6
  // src/commands/pair.ts
7
7
  function showPairingInfo() {
@@ -21,4 +21,4 @@ export {
21
21
  regeneratePairingCode,
22
22
  showPairingInfo
23
23
  };
24
- //# sourceMappingURL=pair-JDFTERIK.js.map
24
+ //# sourceMappingURL=pair-YZJFQUU5.js.map
@@ -2,9 +2,9 @@ import {
2
2
  PairingManager,
3
3
  pairingManager
4
4
  } from "./chunk-3E2PSU2C.js";
5
- import "./chunk-PLDDJCW6.js";
5
+ import "./chunk-UP2VWCW5.js";
6
6
  export {
7
7
  PairingManager,
8
8
  pairingManager
9
9
  };
10
- //# sourceMappingURL=pairing-IFQYCPNS.js.map
10
+ //# sourceMappingURL=pairing-77N47RAT.js.map
@@ -4,9 +4,9 @@ import {
4
4
  generatePDFFromMarkdown,
5
5
  generatePDFNative,
6
6
  pdf_default
7
- } from "./chunk-RZ4YESBG.js";
7
+ } from "./chunk-DOYGMNMK.js";
8
8
  import "./chunk-CQ4JURG7.js";
9
- import "./chunk-PLDDJCW6.js";
9
+ import "./chunk-UP2VWCW5.js";
10
10
  export {
11
11
  pdf_default as default,
12
12
  generatePDF,
@@ -14,4 +14,4 @@ export {
14
14
  generatePDFFromMarkdown,
15
15
  generatePDFNative
16
16
  };
17
- //# sourceMappingURL=pdf-ALQVOEJR.js.map
17
+ //# sourceMappingURL=pdf-67HGXCFJ.js.map
@@ -0,0 +1,14 @@
1
+ import {
2
+ extractPDFPages,
3
+ getPDFMetadata,
4
+ isValidPDF,
5
+ parsePDF
6
+ } from "./chunk-XTX7EK43.js";
7
+ import "./chunk-UP2VWCW5.js";
8
+ export {
9
+ extractPDFPages,
10
+ getPDFMetadata,
11
+ isValidPDF,
12
+ parsePDF
13
+ };
14
+ //# sourceMappingURL=pdf-parser-YLMTTYHL.js.map
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  isPathAllowed
3
3
  } from "./chunk-CQ4JURG7.js";
4
- import "./chunk-PLDDJCW6.js";
4
+ import "./chunk-UP2VWCW5.js";
5
5
 
6
6
  // src/tools/file-generation/presentations.ts
7
7
  import { join } from "path";
@@ -909,7 +909,7 @@ async function generateRawPptx(slides, filePath, options) {
909
909
  const finalOptions = { ...DEFAULT_OPTIONS, ...options };
910
910
  const theme = { ...DEFAULT_THEME, ...finalOptions.theme };
911
911
  try {
912
- const archiver = await import("./archiver-AVNBYCKQ.js");
912
+ const archiver = await import("./archiver-FPGKRP6P.js");
913
913
  const fs = await import("fs");
914
914
  const output = fs.createWriteStream(filePath);
915
915
  const archive = archiver.default("zip", { zlib: { level: 9 } });
@@ -999,4 +999,4 @@ export {
999
999
  generatePresentation,
1000
1000
  quickPresentation
1001
1001
  };
1002
- //# sourceMappingURL=presentations-DSV5IHG5.js.map
1002
+ //# sourceMappingURL=presentations-UOET2FVZ.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/tools/file-generation/presentations.ts"],"sourcesContent":["import { join } from \"path\";\r\nimport { tmpdir } from \"os\";\r\nimport { randomBytes } from \"crypto\";\r\nimport { writeFile, mkdir } from \"fs/promises\";\r\nimport { dirname } from \"path\";\r\nimport { isPathAllowed } from \"../../utils/paths\";\r\n\r\nexport interface PresentationOptions {\r\n title?: string;\r\n author?: string;\r\n subject?: string;\r\n company?: string;\r\n layout?: \"LAYOUT_16x9\" | \"LAYOUT_4x3\" | \"LAYOUT_WIDE\";\r\n theme?: PresentationTheme;\r\n}\r\n\r\nexport interface PresentationTheme {\r\n backgroundColor?: string;\r\n titleColor?: string;\r\n textColor?: string;\r\n accentColor?: string;\r\n titleFont?: string;\r\n bodyFont?: string;\r\n}\r\n\r\nexport interface PresentationResult {\r\n success: boolean;\r\n filePath?: string;\r\n error?: string;\r\n}\r\n\r\nexport type SlideLayout =\r\n | \"title\"\r\n | \"title-content\"\r\n | \"title-two-columns\"\r\n | \"section\"\r\n | \"comparison\"\r\n | \"blank\"\r\n | \"title-only\"\r\n | \"content-only\";\r\n\r\nexport interface SlideElement {\r\n type: \"text\" | \"bullet-list\" | \"numbered-list\" | \"image\" | \"shape\" | \"table\" | \"chart\";\r\n x?: number; // Percentage from left (0-100)\r\n y?: number; // Percentage from top (0-100)\r\n width?: number; // Percentage of slide width\r\n height?: number; // Percentage of slide height\r\n}\r\n\r\nexport interface TextElement extends SlideElement {\r\n type: \"text\";\r\n text: string;\r\n fontSize?: number;\r\n fontFace?: string;\r\n color?: string;\r\n bold?: boolean;\r\n italic?: boolean;\r\n underline?: boolean;\r\n align?: \"left\" | \"center\" | \"right\";\r\n valign?: \"top\" | \"middle\" | \"bottom\";\r\n}\r\n\r\nexport interface BulletListElement extends SlideElement {\r\n type: \"bullet-list\";\r\n items: string[];\r\n fontSize?: number;\r\n color?: string;\r\n bulletColor?: string;\r\n}\r\n\r\nexport interface NumberedListElement extends SlideElement {\r\n type: \"numbered-list\";\r\n items: string[];\r\n fontSize?: number;\r\n color?: string;\r\n startNumber?: number;\r\n}\r\n\r\nexport interface ImageElement extends SlideElement {\r\n type: \"image\";\r\n path: string;\r\n sizing?: \"contain\" | \"cover\" | \"stretch\";\r\n}\r\n\r\nexport interface ShapeElement extends SlideElement {\r\n type: \"shape\";\r\n shapeType: \"rectangle\" | \"ellipse\" | \"triangle\" | \"arrow\" | \"line\";\r\n fill?: string;\r\n stroke?: string;\r\n strokeWidth?: number;\r\n text?: string;\r\n textColor?: string;\r\n}\r\n\r\nexport interface TableElement extends SlideElement {\r\n type: \"table\";\r\n headers?: string[];\r\n rows: string[][];\r\n headerColor?: string;\r\n headerTextColor?: string;\r\n borderColor?: string;\r\n alternateRowColor?: string;\r\n}\r\n\r\nexport interface ChartElement extends SlideElement {\r\n type: \"chart\";\r\n chartType: \"bar\" | \"line\" | \"pie\" | \"doughnut\" | \"area\";\r\n title?: string;\r\n labels: string[];\r\n data: number[] | { name: string; values: number[] }[];\r\n colors?: string[];\r\n}\r\n\r\nexport type SlideContent =\r\n | TextElement\r\n | BulletListElement\r\n | NumberedListElement\r\n | ImageElement\r\n | ShapeElement\r\n | TableElement\r\n | ChartElement;\r\n\r\nexport interface Slide {\r\n layout?: SlideLayout;\r\n title?: string;\r\n subtitle?: string;\r\n content?: SlideContent[];\r\n notes?: string;\r\n backgroundColor?: string;\r\n backgroundImage?: string;\r\n transition?: \"none\" | \"fade\" | \"slide\" | \"zoom\";\r\n}\r\n\r\n// Default theme\r\nconst DEFAULT_THEME: PresentationTheme = {\r\n backgroundColor: \"FFFFFF\",\r\n titleColor: \"2F5496\",\r\n textColor: \"333333\",\r\n accentColor: \"4472C4\",\r\n titleFont: \"Calibri Light\",\r\n bodyFont: \"Calibri\",\r\n};\r\n\r\n// Default options\r\nconst DEFAULT_OPTIONS: PresentationOptions = {\r\n layout: \"LAYOUT_16x9\",\r\n theme: DEFAULT_THEME,\r\n};\r\n\r\n// Generate temp file path\r\nfunction getTempPath(): string {\r\n const id = randomBytes(8).toString(\"hex\");\r\n return join(tmpdir(), `sentinel-presentation-${id}.pptx`);\r\n}\r\n\r\n// Escape XML special characters\r\nfunction escapeXml(str: string): string {\r\n return str\r\n .replace(/&/g, \"&amp;\")\r\n .replace(/</g, \"&lt;\")\r\n .replace(/>/g, \"&gt;\")\r\n .replace(/\"/g, \"&quot;\")\r\n .replace(/'/g, \"&apos;\");\r\n}\r\n\r\n// Convert percentage to EMUs (English Metric Units)\r\n// Slide dimensions in EMUs: 16:9 is 9144000 x 5143500\r\nfunction percentToEmuX(percent: number, layout: string = \"LAYOUT_16x9\"): number {\r\n const slideWidth = layout === \"LAYOUT_4x3\" ? 9144000 : 12192000;\r\n return Math.round((percent / 100) * slideWidth);\r\n}\r\n\r\nfunction percentToEmuY(percent: number, layout: string = \"LAYOUT_16x9\"): number {\r\n const slideHeight = layout === \"LAYOUT_4x3\" ? 6858000 : 6858000;\r\n return Math.round((percent / 100) * slideHeight);\r\n}\r\n\r\n// Convert points to EMUs (1 point = 12700 EMUs)\r\nfunction pointsToEmu(points: number): number {\r\n return points * 12700;\r\n}\r\n\r\n// Convert color to OOXML format (remove # if present)\r\nfunction normalizeColor(color: string): string {\r\n return color.replace(\"#\", \"\").toUpperCase();\r\n}\r\n\r\n// Generate [Content_Types].xml\r\nfunction generateContentTypesXml(slideCount: number): string {\r\n let overrides = \"\";\r\n for (let i = 1; i <= slideCount; i++) {\r\n overrides += `<Override PartName=\"/ppt/slides/slide${i}.xml\" ContentType=\"application/vnd.openxmlformats-officedocument.presentationml.slide+xml\"/>`;\r\n }\r\n\r\n return `<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>\r\n<Types xmlns=\"http://schemas.openxmlformats.org/package/2006/content-types\">\r\n <Default Extension=\"rels\" ContentType=\"application/vnd.openxmlformats-package.relationships+xml\"/>\r\n <Default Extension=\"xml\" ContentType=\"application/xml\"/>\r\n <Default Extension=\"jpeg\" ContentType=\"image/jpeg\"/>\r\n <Default Extension=\"jpg\" ContentType=\"image/jpeg\"/>\r\n <Default Extension=\"png\" ContentType=\"image/png\"/>\r\n <Override PartName=\"/ppt/presentation.xml\" ContentType=\"application/vnd.openxmlformats-officedocument.presentationml.presentation.main+xml\"/>\r\n <Override PartName=\"/ppt/slideMasters/slideMaster1.xml\" ContentType=\"application/vnd.openxmlformats-officedocument.presentationml.slideMaster+xml\"/>\r\n <Override PartName=\"/ppt/slideLayouts/slideLayout1.xml\" ContentType=\"application/vnd.openxmlformats-officedocument.presentationml.slideLayout+xml\"/>\r\n <Override PartName=\"/ppt/slideLayouts/slideLayout2.xml\" ContentType=\"application/vnd.openxmlformats-officedocument.presentationml.slideLayout+xml\"/>\r\n <Override PartName=\"/ppt/theme/theme1.xml\" ContentType=\"application/vnd.openxmlformats-officedocument.theme+xml\"/>\r\n ${overrides}\r\n <Override PartName=\"/docProps/core.xml\" ContentType=\"application/vnd.openxmlformats-package.core-properties+xml\"/>\r\n <Override PartName=\"/docProps/app.xml\" ContentType=\"application/vnd.openxmlformats-officedocument.extended-properties+xml\"/>\r\n</Types>`;\r\n}\r\n\r\n// Generate _rels/.rels\r\nfunction generateRootRelsXml(): string {\r\n return `<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>\r\n<Relationships xmlns=\"http://schemas.openxmlformats.org/package/2006/relationships\">\r\n <Relationship Id=\"rId1\" Type=\"http://schemas.openxmlformats.org/officeDocument/2006/relationships/officeDocument\" Target=\"ppt/presentation.xml\"/>\r\n <Relationship Id=\"rId2\" Type=\"http://schemas.openxmlformats.org/package/2006/relationships/metadata/core-properties\" Target=\"docProps/core.xml\"/>\r\n <Relationship Id=\"rId3\" Type=\"http://schemas.openxmlformats.org/officeDocument/2006/relationships/extended-properties\" Target=\"docProps/app.xml\"/>\r\n</Relationships>`;\r\n}\r\n\r\n// Generate ppt/presentation.xml\r\nfunction generatePresentationXml(slideCount: number, options: PresentationOptions): string {\r\n let slideIdList = \"\";\r\n let slideRelIds = \"\";\r\n\r\n for (let i = 1; i <= slideCount; i++) {\r\n slideIdList += `<p:sldId id=\"${255 + i}\" r:id=\"rId${i + 2}\"/>`;\r\n }\r\n\r\n const layout = options.layout || \"LAYOUT_16x9\";\r\n const slideWidth = layout === \"LAYOUT_4x3\" ? \"9144000\" : \"12192000\";\r\n const slideHeight = \"6858000\";\r\n\r\n return `<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>\r\n<p:presentation xmlns:a=\"http://schemas.openxmlformats.org/drawingml/2006/main\"\r\n xmlns:r=\"http://schemas.openxmlformats.org/officeDocument/2006/relationships\"\r\n xmlns:p=\"http://schemas.openxmlformats.org/presentationml/2006/main\"\r\n saveSubsetFonts=\"1\">\r\n <p:sldMasterIdLst>\r\n <p:sldMasterId id=\"2147483648\" r:id=\"rId1\"/>\r\n </p:sldMasterIdLst>\r\n <p:sldIdLst>\r\n ${slideIdList}\r\n </p:sldIdLst>\r\n <p:sldSz cx=\"${slideWidth}\" cy=\"${slideHeight}\"/>\r\n <p:notesSz cx=\"${slideHeight}\" cy=\"${slideWidth}\"/>\r\n</p:presentation>`;\r\n}\r\n\r\n// Generate ppt/_rels/presentation.xml.rels\r\nfunction generatePresentationRelsXml(slideCount: number): string {\r\n let slideRels = \"\";\r\n for (let i = 1; i <= slideCount; i++) {\r\n slideRels += `<Relationship Id=\"rId${i + 2}\" Type=\"http://schemas.openxmlformats.org/officeDocument/2006/relationships/slide\" Target=\"slides/slide${i}.xml\"/>`;\r\n }\r\n\r\n return `<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>\r\n<Relationships xmlns=\"http://schemas.openxmlformats.org/package/2006/relationships\">\r\n <Relationship Id=\"rId1\" Type=\"http://schemas.openxmlformats.org/officeDocument/2006/relationships/slideMaster\" Target=\"slideMasters/slideMaster1.xml\"/>\r\n <Relationship Id=\"rId2\" Type=\"http://schemas.openxmlformats.org/officeDocument/2006/relationships/theme\" Target=\"theme/theme1.xml\"/>\r\n ${slideRels}\r\n</Relationships>`;\r\n}\r\n\r\n// Generate ppt/theme/theme1.xml\r\nfunction generateThemeXml(theme: PresentationTheme): string {\r\n const t = { ...DEFAULT_THEME, ...theme };\r\n\r\n return `<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>\r\n<a:theme xmlns:a=\"http://schemas.openxmlformats.org/drawingml/2006/main\" name=\"OpenSentinel Theme\">\r\n <a:themeElements>\r\n <a:clrScheme name=\"OpenSentinel\">\r\n <a:dk1><a:srgbClr val=\"000000\"/></a:dk1>\r\n <a:lt1><a:srgbClr val=\"${normalizeColor(t.backgroundColor!)}\"/></a:lt1>\r\n <a:dk2><a:srgbClr val=\"${normalizeColor(t.titleColor!)}\"/></a:dk2>\r\n <a:lt2><a:srgbClr val=\"EEECE1\"/></a:lt2>\r\n <a:accent1><a:srgbClr val=\"${normalizeColor(t.accentColor!)}\"/></a:accent1>\r\n <a:accent2><a:srgbClr val=\"C0504D\"/></a:accent2>\r\n <a:accent3><a:srgbClr val=\"9BBB59\"/></a:accent3>\r\n <a:accent4><a:srgbClr val=\"8064A2\"/></a:accent4>\r\n <a:accent5><a:srgbClr val=\"4BACC6\"/></a:accent5>\r\n <a:accent6><a:srgbClr val=\"F79646\"/></a:accent6>\r\n <a:hlink><a:srgbClr val=\"0000FF\"/></a:hlink>\r\n <a:folHlink><a:srgbClr val=\"800080\"/></a:folHlink>\r\n </a:clrScheme>\r\n <a:fontScheme name=\"OpenSentinel\">\r\n <a:majorFont>\r\n <a:latin typeface=\"${t.titleFont}\"/>\r\n <a:ea typeface=\"\"/>\r\n <a:cs typeface=\"\"/>\r\n </a:majorFont>\r\n <a:minorFont>\r\n <a:latin typeface=\"${t.bodyFont}\"/>\r\n <a:ea typeface=\"\"/>\r\n <a:cs typeface=\"\"/>\r\n </a:minorFont>\r\n </a:fontScheme>\r\n <a:fmtScheme name=\"OpenSentinel\">\r\n <a:fillStyleLst>\r\n <a:solidFill><a:schemeClr val=\"phClr\"/></a:solidFill>\r\n <a:solidFill><a:schemeClr val=\"phClr\"/></a:solidFill>\r\n <a:solidFill><a:schemeClr val=\"phClr\"/></a:solidFill>\r\n </a:fillStyleLst>\r\n <a:lnStyleLst>\r\n <a:ln w=\"9525\"><a:solidFill><a:schemeClr val=\"phClr\"/></a:solidFill></a:ln>\r\n <a:ln w=\"25400\"><a:solidFill><a:schemeClr val=\"phClr\"/></a:solidFill></a:ln>\r\n <a:ln w=\"38100\"><a:solidFill><a:schemeClr val=\"phClr\"/></a:solidFill></a:ln>\r\n </a:lnStyleLst>\r\n <a:effectStyleLst>\r\n <a:effectStyle><a:effectLst/></a:effectStyle>\r\n <a:effectStyle><a:effectLst/></a:effectStyle>\r\n <a:effectStyle><a:effectLst/></a:effectStyle>\r\n </a:effectStyleLst>\r\n <a:bgFillStyleLst>\r\n <a:solidFill><a:schemeClr val=\"phClr\"/></a:solidFill>\r\n <a:solidFill><a:schemeClr val=\"phClr\"/></a:solidFill>\r\n <a:solidFill><a:schemeClr val=\"phClr\"/></a:solidFill>\r\n </a:bgFillStyleLst>\r\n </a:fmtScheme>\r\n </a:themeElements>\r\n</a:theme>`;\r\n}\r\n\r\n// Generate ppt/slideMasters/slideMaster1.xml\r\nfunction generateSlideMasterXml(theme: PresentationTheme, layout: string): string {\r\n const t = { ...DEFAULT_THEME, ...theme };\r\n const slideWidth = layout === \"LAYOUT_4x3\" ? 9144000 : 12192000;\r\n const slideHeight = 6858000;\r\n\r\n return `<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>\r\n<p:sldMaster xmlns:a=\"http://schemas.openxmlformats.org/drawingml/2006/main\"\r\n xmlns:r=\"http://schemas.openxmlformats.org/officeDocument/2006/relationships\"\r\n xmlns:p=\"http://schemas.openxmlformats.org/presentationml/2006/main\">\r\n <p:cSld>\r\n <p:bg>\r\n <p:bgPr>\r\n <a:solidFill>\r\n <a:srgbClr val=\"${normalizeColor(t.backgroundColor!)}\"/>\r\n </a:solidFill>\r\n <a:effectLst/>\r\n </p:bgPr>\r\n </p:bg>\r\n <p:spTree>\r\n <p:nvGrpSpPr>\r\n <p:cNvPr id=\"1\" name=\"\"/>\r\n <p:cNvGrpSpPr/>\r\n <p:nvPr/>\r\n </p:nvGrpSpPr>\r\n <p:grpSpPr>\r\n <a:xfrm>\r\n <a:off x=\"0\" y=\"0\"/>\r\n <a:ext cx=\"0\" cy=\"0\"/>\r\n <a:chOff x=\"0\" y=\"0\"/>\r\n <a:chExt cx=\"0\" cy=\"0\"/>\r\n </a:xfrm>\r\n </p:grpSpPr>\r\n </p:spTree>\r\n </p:cSld>\r\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\"/>\r\n <p:sldLayoutIdLst>\r\n <p:sldLayoutId id=\"2147483649\" r:id=\"rId1\"/>\r\n <p:sldLayoutId id=\"2147483650\" r:id=\"rId2\"/>\r\n </p:sldLayoutIdLst>\r\n</p:sldMaster>`;\r\n}\r\n\r\n// Generate ppt/slideMasters/_rels/slideMaster1.xml.rels\r\nfunction generateSlideMasterRelsXml(): string {\r\n return `<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>\r\n<Relationships xmlns=\"http://schemas.openxmlformats.org/package/2006/relationships\">\r\n <Relationship Id=\"rId1\" Type=\"http://schemas.openxmlformats.org/officeDocument/2006/relationships/slideLayout\" Target=\"../slideLayouts/slideLayout1.xml\"/>\r\n <Relationship Id=\"rId2\" Type=\"http://schemas.openxmlformats.org/officeDocument/2006/relationships/slideLayout\" Target=\"../slideLayouts/slideLayout2.xml\"/>\r\n <Relationship Id=\"rId3\" Type=\"http://schemas.openxmlformats.org/officeDocument/2006/relationships/theme\" Target=\"../theme/theme1.xml\"/>\r\n</Relationships>`;\r\n}\r\n\r\n// Generate slide layout XML\r\nfunction generateSlideLayoutXml(layoutType: \"title\" | \"content\"): string {\r\n return `<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>\r\n<p:sldLayout xmlns:a=\"http://schemas.openxmlformats.org/drawingml/2006/main\"\r\n xmlns:r=\"http://schemas.openxmlformats.org/officeDocument/2006/relationships\"\r\n xmlns:p=\"http://schemas.openxmlformats.org/presentationml/2006/main\"\r\n type=\"${layoutType === \"title\" ? \"title\" : \"obj\"}\">\r\n <p:cSld name=\"${layoutType === \"title\" ? \"Title Slide\" : \"Title and Content\"}\">\r\n <p:spTree>\r\n <p:nvGrpSpPr>\r\n <p:cNvPr id=\"1\" name=\"\"/>\r\n <p:cNvGrpSpPr/>\r\n <p:nvPr/>\r\n </p:nvGrpSpPr>\r\n <p:grpSpPr/>\r\n </p:spTree>\r\n </p:cSld>\r\n <p:clrMapOvr><a:masterClrMapping/></p:clrMapOvr>\r\n</p:sldLayout>`;\r\n}\r\n\r\n// Generate slide layout rels\r\nfunction generateSlideLayoutRelsXml(): string {\r\n return `<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>\r\n<Relationships xmlns=\"http://schemas.openxmlformats.org/package/2006/relationships\">\r\n <Relationship Id=\"rId1\" Type=\"http://schemas.openxmlformats.org/officeDocument/2006/relationships/slideMaster\" Target=\"../slideMasters/slideMaster1.xml\"/>\r\n</Relationships>`;\r\n}\r\n\r\n// Generate slide XML\r\nfunction generateSlideXml(\r\n slide: Slide,\r\n slideIndex: number,\r\n options: PresentationOptions\r\n): string {\r\n const theme = { ...DEFAULT_THEME, ...options.theme };\r\n const layout = options.layout || \"LAYOUT_16x9\";\r\n const slideWidth = layout === \"LAYOUT_4x3\" ? 9144000 : 12192000;\r\n const slideHeight = 6858000;\r\n\r\n let shapesXml = \"\";\r\n let shapeId = 2;\r\n\r\n // Background\r\n let bgXml = \"\";\r\n if (slide.backgroundColor) {\r\n bgXml = `<p:bg>\r\n <p:bgPr>\r\n <a:solidFill><a:srgbClr val=\"${normalizeColor(slide.backgroundColor)}\"/></a:solidFill>\r\n <a:effectLst/>\r\n </p:bgPr>\r\n </p:bg>`;\r\n }\r\n\r\n // Title\r\n if (slide.title) {\r\n const titleY = slide.layout === \"title\" ? 30 : 5;\r\n const titleFontSize = slide.layout === \"title\" ? 4400 : 3200;\r\n\r\n shapesXml += `<p:sp>\r\n <p:nvSpPr>\r\n <p:cNvPr id=\"${shapeId++}\" name=\"Title\"/>\r\n <p:cNvSpPr><a:spLocks noGrp=\"1\"/></p:cNvSpPr>\r\n <p:nvPr><p:ph type=\"title\"/></p:nvPr>\r\n </p:nvSpPr>\r\n <p:spPr>\r\n <a:xfrm>\r\n <a:off x=\"${Math.round(slideWidth * 0.05)}\" y=\"${Math.round(slideHeight * titleY / 100)}\"/>\r\n <a:ext cx=\"${Math.round(slideWidth * 0.9)}\" cy=\"${Math.round(slideHeight * 0.15)}\"/>\r\n </a:xfrm>\r\n </p:spPr>\r\n <p:txBody>\r\n <a:bodyPr anchor=\"ctr\"/>\r\n <a:lstStyle/>\r\n <a:p>\r\n <a:pPr algn=\"ctr\"/>\r\n <a:r>\r\n <a:rPr lang=\"en-US\" sz=\"${titleFontSize}\" b=\"1\">\r\n <a:solidFill><a:srgbClr val=\"${normalizeColor(theme.titleColor!)}\"/></a:solidFill>\r\n <a:latin typeface=\"${theme.titleFont}\"/>\r\n </a:rPr>\r\n <a:t>${escapeXml(slide.title)}</a:t>\r\n </a:r>\r\n </a:p>\r\n </p:txBody>\r\n </p:sp>`;\r\n }\r\n\r\n // Subtitle (for title slides)\r\n if (slide.subtitle && slide.layout === \"title\") {\r\n shapesXml += `<p:sp>\r\n <p:nvSpPr>\r\n <p:cNvPr id=\"${shapeId++}\" name=\"Subtitle\"/>\r\n <p:cNvSpPr><a:spLocks noGrp=\"1\"/></p:cNvSpPr>\r\n <p:nvPr><p:ph type=\"subTitle\"/></p:nvPr>\r\n </p:nvSpPr>\r\n <p:spPr>\r\n <a:xfrm>\r\n <a:off x=\"${Math.round(slideWidth * 0.1)}\" y=\"${Math.round(slideHeight * 0.55)}\"/>\r\n <a:ext cx=\"${Math.round(slideWidth * 0.8)}\" cy=\"${Math.round(slideHeight * 0.15)}\"/>\r\n </a:xfrm>\r\n </p:spPr>\r\n <p:txBody>\r\n <a:bodyPr anchor=\"t\"/>\r\n <a:lstStyle/>\r\n <a:p>\r\n <a:pPr algn=\"ctr\"/>\r\n <a:r>\r\n <a:rPr lang=\"en-US\" sz=\"2400\">\r\n <a:solidFill><a:srgbClr val=\"${normalizeColor(theme.textColor!)}\"/></a:solidFill>\r\n <a:latin typeface=\"${theme.bodyFont}\"/>\r\n </a:rPr>\r\n <a:t>${escapeXml(slide.subtitle)}</a:t>\r\n </a:r>\r\n </a:p>\r\n </p:txBody>\r\n </p:sp>`;\r\n }\r\n\r\n // Content elements\r\n if (slide.content) {\r\n for (const element of slide.content) {\r\n shapesXml += generateContentElementXml(element, shapeId++, options, theme);\r\n }\r\n }\r\n\r\n return `<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>\r\n<p:sld xmlns:a=\"http://schemas.openxmlformats.org/drawingml/2006/main\"\r\n xmlns:r=\"http://schemas.openxmlformats.org/officeDocument/2006/relationships\"\r\n xmlns:p=\"http://schemas.openxmlformats.org/presentationml/2006/main\">\r\n <p:cSld>\r\n ${bgXml}\r\n <p:spTree>\r\n <p:nvGrpSpPr>\r\n <p:cNvPr id=\"1\" name=\"\"/>\r\n <p:cNvGrpSpPr/>\r\n <p:nvPr/>\r\n </p:nvGrpSpPr>\r\n <p:grpSpPr>\r\n <a:xfrm>\r\n <a:off x=\"0\" y=\"0\"/>\r\n <a:ext cx=\"0\" cy=\"0\"/>\r\n <a:chOff x=\"0\" y=\"0\"/>\r\n <a:chExt cx=\"0\" cy=\"0\"/>\r\n </a:xfrm>\r\n </p:grpSpPr>\r\n ${shapesXml}\r\n </p:spTree>\r\n </p:cSld>\r\n <p:clrMapOvr><a:masterClrMapping/></p:clrMapOvr>\r\n</p:sld>`;\r\n}\r\n\r\n// Generate content element XML\r\nfunction generateContentElementXml(\r\n element: SlideContent,\r\n shapeId: number,\r\n options: PresentationOptions,\r\n theme: PresentationTheme\r\n): string {\r\n const layout = options.layout || \"LAYOUT_16x9\";\r\n const slideWidth = layout === \"LAYOUT_4x3\" ? 9144000 : 12192000;\r\n const slideHeight = 6858000;\r\n\r\n // Default positions based on content type\r\n const x = element.x !== undefined ? percentToEmuX(element.x, layout) : Math.round(slideWidth * 0.05);\r\n const y = element.y !== undefined ? percentToEmuY(element.y, layout) : Math.round(slideHeight * 0.25);\r\n const width = element.width !== undefined ? percentToEmuX(element.width, layout) : Math.round(slideWidth * 0.9);\r\n const height = element.height !== undefined ? percentToEmuY(element.height, layout) : Math.round(slideHeight * 0.65);\r\n\r\n switch (element.type) {\r\n case \"text\":\r\n return generateTextElementXml(element, shapeId, x, y, width, height, theme);\r\n case \"bullet-list\":\r\n return generateBulletListElementXml(element, shapeId, x, y, width, height, theme);\r\n case \"numbered-list\":\r\n return generateNumberedListElementXml(element, shapeId, x, y, width, height, theme);\r\n case \"table\":\r\n return generateTableElementXml(element, shapeId, x, y, width, height, theme);\r\n case \"shape\":\r\n return generateShapeElementXml(element, shapeId, x, y, width, height);\r\n case \"image\":\r\n return generateImagePlaceholderXml(element, shapeId, x, y, width, height);\r\n case \"chart\":\r\n return generateChartPlaceholderXml(element, shapeId, x, y, width, height, theme);\r\n default:\r\n return \"\";\r\n }\r\n}\r\n\r\n// Generate text element XML\r\nfunction generateTextElementXml(\r\n element: TextElement,\r\n shapeId: number,\r\n x: number,\r\n y: number,\r\n width: number,\r\n height: number,\r\n theme: PresentationTheme\r\n): string {\r\n const fontSize = (element.fontSize || 18) * 100;\r\n const color = element.color ? normalizeColor(element.color) : normalizeColor(theme.textColor!);\r\n const font = element.fontFace || theme.bodyFont;\r\n const align = element.align || \"left\";\r\n const valign = element.valign || \"top\";\r\n\r\n let rPr = `<a:rPr lang=\"en-US\" sz=\"${fontSize}\"`;\r\n if (element.bold) rPr += ' b=\"1\"';\r\n if (element.italic) rPr += ' i=\"1\"';\r\n if (element.underline) rPr += ' u=\"sng\"';\r\n rPr += `><a:solidFill><a:srgbClr val=\"${color}\"/></a:solidFill><a:latin typeface=\"${font}\"/></a:rPr>`;\r\n\r\n return `<p:sp>\r\n <p:nvSpPr>\r\n <p:cNvPr id=\"${shapeId}\" name=\"TextBox ${shapeId}\"/>\r\n <p:cNvSpPr txBox=\"1\"/>\r\n <p:nvPr/>\r\n </p:nvSpPr>\r\n <p:spPr>\r\n <a:xfrm><a:off x=\"${x}\" y=\"${y}\"/><a:ext cx=\"${width}\" cy=\"${height}\"/></a:xfrm>\r\n <a:prstGeom prst=\"rect\"><a:avLst/></a:prstGeom>\r\n <a:noFill/>\r\n </p:spPr>\r\n <p:txBody>\r\n <a:bodyPr anchor=\"${valign === \"middle\" ? \"ctr\" : valign === \"bottom\" ? \"b\" : \"t\"}\"/>\r\n <a:lstStyle/>\r\n <a:p>\r\n <a:pPr algn=\"${align === \"center\" ? \"ctr\" : align === \"right\" ? \"r\" : \"l\"}\"/>\r\n <a:r>${rPr}<a:t>${escapeXml(element.text)}</a:t></a:r>\r\n </a:p>\r\n </p:txBody>\r\n </p:sp>`;\r\n}\r\n\r\n// Generate bullet list element XML\r\nfunction generateBulletListElementXml(\r\n element: BulletListElement,\r\n shapeId: number,\r\n x: number,\r\n y: number,\r\n width: number,\r\n height: number,\r\n theme: PresentationTheme\r\n): string {\r\n const fontSize = (element.fontSize || 18) * 100;\r\n const color = element.color ? normalizeColor(element.color) : normalizeColor(theme.textColor!);\r\n const bulletColor = element.bulletColor ? normalizeColor(element.bulletColor) : normalizeColor(theme.accentColor!);\r\n\r\n let paragraphs = \"\";\r\n for (const item of element.items) {\r\n paragraphs += `<a:p>\r\n <a:pPr marL=\"457200\" indent=\"-457200\">\r\n <a:buFont typeface=\"Arial\"/>\r\n <a:buChar char=\"\\u2022\"/>\r\n <a:buClr><a:srgbClr val=\"${bulletColor}\"/></a:buClr>\r\n </a:pPr>\r\n <a:r>\r\n <a:rPr lang=\"en-US\" sz=\"${fontSize}\">\r\n <a:solidFill><a:srgbClr val=\"${color}\"/></a:solidFill>\r\n <a:latin typeface=\"${theme.bodyFont}\"/>\r\n </a:rPr>\r\n <a:t>${escapeXml(item)}</a:t>\r\n </a:r>\r\n </a:p>`;\r\n }\r\n\r\n return `<p:sp>\r\n <p:nvSpPr>\r\n <p:cNvPr id=\"${shapeId}\" name=\"Content ${shapeId}\"/>\r\n <p:cNvSpPr><a:spLocks noGrp=\"1\"/></p:cNvSpPr>\r\n <p:nvPr><p:ph idx=\"1\"/></p:nvPr>\r\n </p:nvSpPr>\r\n <p:spPr>\r\n <a:xfrm><a:off x=\"${x}\" y=\"${y}\"/><a:ext cx=\"${width}\" cy=\"${height}\"/></a:xfrm>\r\n </p:spPr>\r\n <p:txBody>\r\n <a:bodyPr/>\r\n <a:lstStyle/>\r\n ${paragraphs}\r\n </p:txBody>\r\n </p:sp>`;\r\n}\r\n\r\n// Generate numbered list element XML\r\nfunction generateNumberedListElementXml(\r\n element: NumberedListElement,\r\n shapeId: number,\r\n x: number,\r\n y: number,\r\n width: number,\r\n height: number,\r\n theme: PresentationTheme\r\n): string {\r\n const fontSize = (element.fontSize || 18) * 100;\r\n const color = element.color ? normalizeColor(element.color) : normalizeColor(theme.textColor!);\r\n const startNum = element.startNumber || 1;\r\n\r\n let paragraphs = \"\";\r\n for (let i = 0; i < element.items.length; i++) {\r\n paragraphs += `<a:p>\r\n <a:pPr marL=\"457200\" indent=\"-457200\">\r\n <a:buFont typeface=\"Arial\"/>\r\n <a:buAutoNum type=\"arabicPeriod\" startAt=\"${startNum}\"/>\r\n </a:pPr>\r\n <a:r>\r\n <a:rPr lang=\"en-US\" sz=\"${fontSize}\">\r\n <a:solidFill><a:srgbClr val=\"${color}\"/></a:solidFill>\r\n <a:latin typeface=\"${theme.bodyFont}\"/>\r\n </a:rPr>\r\n <a:t>${escapeXml(element.items[i])}</a:t>\r\n </a:r>\r\n </a:p>`;\r\n }\r\n\r\n return `<p:sp>\r\n <p:nvSpPr>\r\n <p:cNvPr id=\"${shapeId}\" name=\"Content ${shapeId}\"/>\r\n <p:cNvSpPr><a:spLocks noGrp=\"1\"/></p:cNvSpPr>\r\n <p:nvPr><p:ph idx=\"1\"/></p:nvPr>\r\n </p:nvSpPr>\r\n <p:spPr>\r\n <a:xfrm><a:off x=\"${x}\" y=\"${y}\"/><a:ext cx=\"${width}\" cy=\"${height}\"/></a:xfrm>\r\n </p:spPr>\r\n <p:txBody>\r\n <a:bodyPr/>\r\n <a:lstStyle/>\r\n ${paragraphs}\r\n </p:txBody>\r\n </p:sp>`;\r\n}\r\n\r\n// Generate table element XML\r\nfunction generateTableElementXml(\r\n element: TableElement,\r\n shapeId: number,\r\n x: number,\r\n y: number,\r\n width: number,\r\n height: number,\r\n theme: PresentationTheme\r\n): string {\r\n const colCount = element.headers?.length || element.rows[0]?.length || 1;\r\n const rowCount = (element.headers ? 1 : 0) + element.rows.length;\r\n const colWidth = Math.round(width / colCount);\r\n const rowHeight = Math.round(height / rowCount);\r\n\r\n const headerColor = element.headerColor ? normalizeColor(element.headerColor) : normalizeColor(theme.accentColor!);\r\n const headerTextColor = element.headerTextColor ? normalizeColor(element.headerTextColor) : \"FFFFFF\";\r\n const borderColor = element.borderColor ? normalizeColor(element.borderColor) : \"CCCCCC\";\r\n const altRowColor = element.alternateRowColor ? normalizeColor(element.alternateRowColor) : \"F5F5F5\";\r\n\r\n let gridCols = \"\";\r\n for (let i = 0; i < colCount; i++) {\r\n gridCols += `<a:gridCol w=\"${colWidth}\"/>`;\r\n }\r\n\r\n let rowsXml = \"\";\r\n\r\n // Header row\r\n if (element.headers) {\r\n let cells = \"\";\r\n for (const header of element.headers) {\r\n cells += `<a:tc>\r\n <a:txBody>\r\n <a:bodyPr/>\r\n <a:lstStyle/>\r\n <a:p>\r\n <a:pPr algn=\"ctr\"/>\r\n <a:r>\r\n <a:rPr lang=\"en-US\" sz=\"1400\" b=\"1\">\r\n <a:solidFill><a:srgbClr val=\"${headerTextColor}\"/></a:solidFill>\r\n </a:rPr>\r\n <a:t>${escapeXml(header)}</a:t>\r\n </a:r>\r\n </a:p>\r\n </a:txBody>\r\n <a:tcPr>\r\n <a:solidFill><a:srgbClr val=\"${headerColor}\"/></a:solidFill>\r\n </a:tcPr>\r\n </a:tc>`;\r\n }\r\n rowsXml += `<a:tr h=\"${rowHeight}\">${cells}</a:tr>`;\r\n }\r\n\r\n // Data rows\r\n for (let rowIdx = 0; rowIdx < element.rows.length; rowIdx++) {\r\n const row = element.rows[rowIdx];\r\n const rowBg = rowIdx % 2 === 1 ? altRowColor : \"FFFFFF\";\r\n let cells = \"\";\r\n\r\n for (const cell of row) {\r\n cells += `<a:tc>\r\n <a:txBody>\r\n <a:bodyPr/>\r\n <a:lstStyle/>\r\n <a:p>\r\n <a:r>\r\n <a:rPr lang=\"en-US\" sz=\"1200\">\r\n <a:solidFill><a:srgbClr val=\"${normalizeColor(theme.textColor!)}\"/></a:solidFill>\r\n </a:rPr>\r\n <a:t>${escapeXml(cell)}</a:t>\r\n </a:r>\r\n </a:p>\r\n </a:txBody>\r\n <a:tcPr>\r\n <a:solidFill><a:srgbClr val=\"${rowBg}\"/></a:solidFill>\r\n </a:tcPr>\r\n </a:tc>`;\r\n }\r\n rowsXml += `<a:tr h=\"${rowHeight}\">${cells}</a:tr>`;\r\n }\r\n\r\n return `<p:graphicFrame>\r\n <p:nvGraphicFramePr>\r\n <p:cNvPr id=\"${shapeId}\" name=\"Table ${shapeId}\"/>\r\n <p:cNvGraphicFramePr><a:graphicFrameLocks noGrp=\"1\"/></p:cNvGraphicFramePr>\r\n <p:nvPr/>\r\n </p:nvGraphicFramePr>\r\n <p:xfrm><a:off x=\"${x}\" y=\"${y}\"/><a:ext cx=\"${width}\" cy=\"${height}\"/></p:xfrm>\r\n <a:graphic>\r\n <a:graphicData uri=\"http://schemas.openxmlformats.org/drawingml/2006/table\">\r\n <a:tbl>\r\n <a:tblPr firstRow=\"1\" bandRow=\"1\">\r\n <a:tableStyleId>{5C22544A-7EE6-4342-B048-85BDC9FD1C3A}</a:tableStyleId>\r\n </a:tblPr>\r\n <a:tblGrid>${gridCols}</a:tblGrid>\r\n ${rowsXml}\r\n </a:tbl>\r\n </a:graphicData>\r\n </a:graphic>\r\n </p:graphicFrame>`;\r\n}\r\n\r\n// Generate shape element XML\r\nfunction generateShapeElementXml(\r\n element: ShapeElement,\r\n shapeId: number,\r\n x: number,\r\n y: number,\r\n width: number,\r\n height: number\r\n): string {\r\n const shapeTypeMap: Record<string, string> = {\r\n rectangle: \"rect\",\r\n ellipse: \"ellipse\",\r\n triangle: \"triangle\",\r\n arrow: \"rightArrow\",\r\n line: \"line\",\r\n };\r\n\r\n const prstGeom = shapeTypeMap[element.shapeType] || \"rect\";\r\n const fill = element.fill ? normalizeColor(element.fill) : \"4472C4\";\r\n const stroke = element.stroke ? normalizeColor(element.stroke) : fill;\r\n const strokeWidth = (element.strokeWidth || 1) * 12700;\r\n\r\n let textXml = \"\";\r\n if (element.text) {\r\n const textColor = element.textColor ? normalizeColor(element.textColor) : \"FFFFFF\";\r\n textXml = `<p:txBody>\r\n <a:bodyPr anchor=\"ctr\"/>\r\n <a:lstStyle/>\r\n <a:p>\r\n <a:pPr algn=\"ctr\"/>\r\n <a:r>\r\n <a:rPr lang=\"en-US\" sz=\"1400\">\r\n <a:solidFill><a:srgbClr val=\"${textColor}\"/></a:solidFill>\r\n </a:rPr>\r\n <a:t>${escapeXml(element.text)}</a:t>\r\n </a:r>\r\n </a:p>\r\n </p:txBody>`;\r\n }\r\n\r\n return `<p:sp>\r\n <p:nvSpPr>\r\n <p:cNvPr id=\"${shapeId}\" name=\"Shape ${shapeId}\"/>\r\n <p:cNvSpPr/>\r\n <p:nvPr/>\r\n </p:nvSpPr>\r\n <p:spPr>\r\n <a:xfrm><a:off x=\"${x}\" y=\"${y}\"/><a:ext cx=\"${width}\" cy=\"${height}\"/></a:xfrm>\r\n <a:prstGeom prst=\"${prstGeom}\"><a:avLst/></a:prstGeom>\r\n <a:solidFill><a:srgbClr val=\"${fill}\"/></a:solidFill>\r\n <a:ln w=\"${strokeWidth}\"><a:solidFill><a:srgbClr val=\"${stroke}\"/></a:solidFill></a:ln>\r\n </p:spPr>\r\n ${textXml}\r\n </p:sp>`;\r\n}\r\n\r\n// Generate image placeholder XML\r\nfunction generateImagePlaceholderXml(\r\n element: ImageElement,\r\n shapeId: number,\r\n x: number,\r\n y: number,\r\n width: number,\r\n height: number\r\n): string {\r\n return `<p:sp>\r\n <p:nvSpPr>\r\n <p:cNvPr id=\"${shapeId}\" name=\"Image Placeholder ${shapeId}\"/>\r\n <p:cNvSpPr/>\r\n <p:nvPr/>\r\n </p:nvSpPr>\r\n <p:spPr>\r\n <a:xfrm><a:off x=\"${x}\" y=\"${y}\"/><a:ext cx=\"${width}\" cy=\"${height}\"/></a:xfrm>\r\n <a:prstGeom prst=\"rect\"><a:avLst/></a:prstGeom>\r\n <a:solidFill><a:srgbClr val=\"E0E0E0\"/></a:solidFill>\r\n <a:ln><a:solidFill><a:srgbClr val=\"CCCCCC\"/></a:solidFill></a:ln>\r\n </p:spPr>\r\n <p:txBody>\r\n <a:bodyPr anchor=\"ctr\"/>\r\n <a:lstStyle/>\r\n <a:p>\r\n <a:pPr algn=\"ctr\"/>\r\n <a:r>\r\n <a:rPr lang=\"en-US\" sz=\"1200\" i=\"1\">\r\n <a:solidFill><a:srgbClr val=\"666666\"/></a:solidFill>\r\n </a:rPr>\r\n <a:t>[Image: ${escapeXml(element.path)}]</a:t>\r\n </a:r>\r\n </a:p>\r\n </p:txBody>\r\n </p:sp>`;\r\n}\r\n\r\n// Generate chart placeholder XML\r\nfunction generateChartPlaceholderXml(\r\n element: ChartElement,\r\n shapeId: number,\r\n x: number,\r\n y: number,\r\n width: number,\r\n height: number,\r\n theme: PresentationTheme\r\n): string {\r\n const title = element.title || `${element.chartType.charAt(0).toUpperCase() + element.chartType.slice(1)} Chart`;\r\n\r\n return `<p:sp>\r\n <p:nvSpPr>\r\n <p:cNvPr id=\"${shapeId}\" name=\"Chart Placeholder ${shapeId}\"/>\r\n <p:cNvSpPr/>\r\n <p:nvPr/>\r\n </p:nvSpPr>\r\n <p:spPr>\r\n <a:xfrm><a:off x=\"${x}\" y=\"${y}\"/><a:ext cx=\"${width}\" cy=\"${height}\"/></a:xfrm>\r\n <a:prstGeom prst=\"rect\"><a:avLst/></a:prstGeom>\r\n <a:solidFill><a:srgbClr val=\"F5F5F5\"/></a:solidFill>\r\n <a:ln><a:solidFill><a:srgbClr val=\"${normalizeColor(theme.accentColor!)}\"/></a:solidFill></a:ln>\r\n </p:spPr>\r\n <p:txBody>\r\n <a:bodyPr anchor=\"ctr\"/>\r\n <a:lstStyle/>\r\n <a:p>\r\n <a:pPr algn=\"ctr\"/>\r\n <a:r>\r\n <a:rPr lang=\"en-US\" sz=\"1400\" b=\"1\">\r\n <a:solidFill><a:srgbClr val=\"${normalizeColor(theme.textColor!)}\"/></a:solidFill>\r\n </a:rPr>\r\n <a:t>${escapeXml(title)}</a:t>\r\n </a:r>\r\n </a:p>\r\n <a:p>\r\n <a:pPr algn=\"ctr\"/>\r\n <a:r>\r\n <a:rPr lang=\"en-US\" sz=\"1000\" i=\"1\">\r\n <a:solidFill><a:srgbClr val=\"666666\"/></a:solidFill>\r\n </a:rPr>\r\n <a:t>[Chart placeholder - Labels: ${element.labels.join(\", \")}]</a:t>\r\n </a:r>\r\n </a:p>\r\n </p:txBody>\r\n </p:sp>`;\r\n}\r\n\r\n// Generate slide rels XML\r\nfunction generateSlideRelsXml(slideIndex: number): string {\r\n return `<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>\r\n<Relationships xmlns=\"http://schemas.openxmlformats.org/package/2006/relationships\">\r\n <Relationship Id=\"rId1\" Type=\"http://schemas.openxmlformats.org/officeDocument/2006/relationships/slideLayout\" Target=\"../slideLayouts/slideLayout2.xml\"/>\r\n</Relationships>`;\r\n}\r\n\r\n// Generate docProps/core.xml\r\nfunction generateCorePropsXml(options: PresentationOptions): string {\r\n const now = new Date().toISOString();\r\n return `<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>\r\n<cp:coreProperties xmlns:cp=\"http://schemas.openxmlformats.org/package/2006/metadata/core-properties\"\r\n xmlns:dc=\"http://purl.org/dc/elements/1.1/\"\r\n xmlns:dcterms=\"http://purl.org/dc/terms/\"\r\n xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\">\r\n ${options.title ? `<dc:title>${escapeXml(options.title)}</dc:title>` : \"\"}\r\n ${options.author ? `<dc:creator>${escapeXml(options.author)}</dc:creator>` : \"<dc:creator>OpenSentinel</dc:creator>\"}\r\n ${options.subject ? `<dc:subject>${escapeXml(options.subject)}</dc:subject>` : \"\"}\r\n <dcterms:created xsi:type=\"dcterms:W3CDTF\">${now}</dcterms:created>\r\n <dcterms:modified xsi:type=\"dcterms:W3CDTF\">${now}</dcterms:modified>\r\n</cp:coreProperties>`;\r\n}\r\n\r\n// Generate docProps/app.xml\r\nfunction generateAppPropsXml(options: PresentationOptions, slideCount: number): string {\r\n return `<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>\r\n<Properties xmlns=\"http://schemas.openxmlformats.org/officeDocument/2006/extended-properties\">\r\n <Application>OpenSentinel Presentation Generator</Application>\r\n <AppVersion>1.0</AppVersion>\r\n ${options.company ? `<Company>${escapeXml(options.company)}</Company>` : \"\"}\r\n <Slides>${slideCount}</Slides>\r\n <HiddenSlides>0</HiddenSlides>\r\n</Properties>`;\r\n}\r\n\r\n// Generate presentation using pptxgenjs library if available, otherwise create raw OOXML\r\nexport async function generatePresentation(\r\n slides: Slide[],\r\n filename?: string,\r\n options: PresentationOptions = {}\r\n): Promise<PresentationResult> {\r\n const filePath = filename\r\n ? isPathAllowed(filename)\r\n ? filename\r\n : join(tmpdir(), filename)\r\n : getTempPath();\r\n\r\n if (slides.length === 0) {\r\n return { success: false, error: \"No slides provided\" };\r\n }\r\n\r\n try {\r\n await mkdir(dirname(filePath), { recursive: true });\r\n\r\n // Try to use pptxgenjs library if available\r\n try {\r\n // @ts-expect-error pptxgenjs may not have type declarations\r\n const PptxGenJS = await import(\"pptxgenjs\");\r\n return await generateWithPptxGenJs(slides, filePath, options, PptxGenJS.default);\r\n } catch {\r\n // Fallback: generate raw OOXML and create the ZIP manually\r\n console.log(\"[Presentations] pptxgenjs library not available, using raw OOXML generation\");\r\n return await generateRawPptx(slides, filePath, options);\r\n }\r\n } catch (error) {\r\n return {\r\n success: false,\r\n error: error instanceof Error ? error.message : String(error),\r\n };\r\n }\r\n}\r\n\r\n// Generate using pptxgenjs library\r\nasync function generateWithPptxGenJs(\r\n slides: Slide[],\r\n filePath: string,\r\n options: PresentationOptions,\r\n PptxGenJS: any\r\n): Promise<PresentationResult> {\r\n const pptx = new PptxGenJS();\r\n\r\n // Set presentation properties\r\n if (options.title) pptx.title = options.title;\r\n if (options.author) pptx.author = options.author;\r\n if (options.subject) pptx.subject = options.subject;\r\n if (options.company) pptx.company = options.company;\r\n\r\n // Set layout\r\n if (options.layout === \"LAYOUT_4x3\") {\r\n pptx.layout = \"LAYOUT_4x3\";\r\n } else {\r\n pptx.layout = \"LAYOUT_16x9\";\r\n }\r\n\r\n const theme = { ...DEFAULT_THEME, ...options.theme };\r\n\r\n for (const slideData of slides) {\r\n const slide = pptx.addSlide();\r\n\r\n // Background\r\n if (slideData.backgroundColor) {\r\n slide.background = { color: slideData.backgroundColor.replace(\"#\", \"\") };\r\n }\r\n\r\n // Title\r\n if (slideData.title) {\r\n const titleY = slideData.layout === \"title\" ? \"40%\" : \"5%\";\r\n const fontSize = slideData.layout === \"title\" ? 44 : 32;\r\n\r\n slide.addText(slideData.title, {\r\n x: \"5%\",\r\n y: titleY,\r\n w: \"90%\",\r\n h: \"15%\",\r\n fontSize,\r\n bold: true,\r\n color: theme.titleColor?.replace(\"#\", \"\"),\r\n fontFace: theme.titleFont,\r\n align: \"center\",\r\n valign: \"middle\",\r\n });\r\n }\r\n\r\n // Subtitle\r\n if (slideData.subtitle && slideData.layout === \"title\") {\r\n slide.addText(slideData.subtitle, {\r\n x: \"10%\",\r\n y: \"55%\",\r\n w: \"80%\",\r\n h: \"15%\",\r\n fontSize: 24,\r\n color: theme.textColor?.replace(\"#\", \"\"),\r\n fontFace: theme.bodyFont,\r\n align: \"center\",\r\n valign: \"top\",\r\n });\r\n }\r\n\r\n // Content elements\r\n if (slideData.content) {\r\n for (const element of slideData.content) {\r\n addContentElementToPptx(slide, element, theme);\r\n }\r\n }\r\n\r\n // Speaker notes\r\n if (slideData.notes) {\r\n slide.addNotes(slideData.notes);\r\n }\r\n }\r\n\r\n await pptx.writeFile({ fileName: filePath });\r\n return { success: true, filePath };\r\n}\r\n\r\n// Add content element to pptx slide\r\nfunction addContentElementToPptx(\r\n slide: any,\r\n element: SlideContent,\r\n theme: PresentationTheme\r\n): void {\r\n const x = element.x !== undefined ? `${element.x}%` : \"5%\";\r\n const y = element.y !== undefined ? `${element.y}%` : \"25%\";\r\n const w = element.width !== undefined ? `${element.width}%` : \"90%\";\r\n const h = element.height !== undefined ? `${element.height}%` : \"65%\";\r\n\r\n switch (element.type) {\r\n case \"text\":\r\n slide.addText(element.text, {\r\n x,\r\n y,\r\n w,\r\n h,\r\n fontSize: element.fontSize || 18,\r\n fontFace: element.fontFace || theme.bodyFont,\r\n color: element.color?.replace(\"#\", \"\") || theme.textColor?.replace(\"#\", \"\"),\r\n bold: element.bold,\r\n italic: element.italic,\r\n underline: element.underline ? { style: \"sng\" } : undefined,\r\n align: element.align,\r\n valign: element.valign,\r\n });\r\n break;\r\n\r\n case \"bullet-list\":\r\n slide.addText(\r\n element.items.map((item) => ({\r\n text: item,\r\n options: { bullet: { type: \"bullet\" } },\r\n })),\r\n {\r\n x,\r\n y,\r\n w,\r\n h,\r\n fontSize: element.fontSize || 18,\r\n color: element.color?.replace(\"#\", \"\") || theme.textColor?.replace(\"#\", \"\"),\r\n }\r\n );\r\n break;\r\n\r\n case \"numbered-list\":\r\n slide.addText(\r\n element.items.map((item, idx) => ({\r\n text: item,\r\n options: { bullet: { type: \"number\", numberStartAt: element.startNumber || 1 } },\r\n })),\r\n {\r\n x,\r\n y,\r\n w,\r\n h,\r\n fontSize: element.fontSize || 18,\r\n color: element.color?.replace(\"#\", \"\") || theme.textColor?.replace(\"#\", \"\"),\r\n }\r\n );\r\n break;\r\n\r\n case \"table\":\r\n const tableData: string[][] = [];\r\n if (element.headers) {\r\n tableData.push(element.headers);\r\n }\r\n tableData.push(...element.rows);\r\n\r\n slide.addTable(tableData, {\r\n x,\r\n y,\r\n w,\r\n h,\r\n border: { color: element.borderColor?.replace(\"#\", \"\") || \"CCCCCC\" },\r\n fill: { color: \"FFFFFF\" },\r\n fontFace: theme.bodyFont,\r\n fontSize: 12,\r\n });\r\n break;\r\n\r\n case \"shape\":\r\n const shapeTypeMap: Record<string, \"rect\" | \"ellipse\" | \"triangle\" | \"rightArrow\" | \"line\"> = {\r\n rectangle: \"rect\",\r\n ellipse: \"ellipse\",\r\n triangle: \"triangle\",\r\n arrow: \"rightArrow\",\r\n line: \"line\",\r\n };\r\n\r\n slide.addShape(shapeTypeMap[element.shapeType] || \"rect\", {\r\n x,\r\n y,\r\n w,\r\n h,\r\n fill: { color: element.fill?.replace(\"#\", \"\") || theme.accentColor?.replace(\"#\", \"\") },\r\n line: {\r\n color: element.stroke?.replace(\"#\", \"\") || element.fill?.replace(\"#\", \"\") || theme.accentColor?.replace(\"#\", \"\"),\r\n width: element.strokeWidth || 1,\r\n },\r\n });\r\n\r\n if (element.text) {\r\n slide.addText(element.text, {\r\n x,\r\n y,\r\n w,\r\n h,\r\n align: \"center\",\r\n valign: \"middle\",\r\n color: element.textColor?.replace(\"#\", \"\") || \"FFFFFF\",\r\n });\r\n }\r\n break;\r\n\r\n case \"image\":\r\n // For actual implementation, would need to read the image file\r\n slide.addText(`[Image: ${element.path}]`, {\r\n x,\r\n y,\r\n w,\r\n h,\r\n align: \"center\",\r\n valign: \"middle\",\r\n italic: true,\r\n color: \"666666\",\r\n fill: { color: \"E0E0E0\" },\r\n });\r\n break;\r\n\r\n case \"chart\":\r\n // For actual implementation, would need to create chart objects\r\n slide.addText(`[${element.chartType} Chart: ${element.title || \"Data\"}]`, {\r\n x,\r\n y,\r\n w,\r\n h,\r\n align: \"center\",\r\n valign: \"middle\",\r\n italic: true,\r\n color: \"666666\",\r\n fill: { color: \"F5F5F5\" },\r\n });\r\n break;\r\n }\r\n}\r\n\r\n// Generate raw OOXML and create ZIP\r\nasync function generateRawPptx(\r\n slides: Slide[],\r\n filePath: string,\r\n options: PresentationOptions\r\n): Promise<PresentationResult> {\r\n const finalOptions = { ...DEFAULT_OPTIONS, ...options };\r\n const theme = { ...DEFAULT_THEME, ...finalOptions.theme };\r\n\r\n try {\r\n // Try to use archiver for ZIP creation\r\n // @ts-expect-error archiver has no type declarations\r\n const archiver = await import(\"archiver\");\r\n const fs = await import(\"fs\");\r\n\r\n const output = fs.createWriteStream(filePath);\r\n const archive = archiver.default(\"zip\", { zlib: { level: 9 } });\r\n\r\n return new Promise((resolve) => {\r\n output.on(\"close\", () => {\r\n resolve({ success: true, filePath });\r\n });\r\n\r\n archive.on(\"error\", (err: Error) => {\r\n resolve({ success: false, error: err.message });\r\n });\r\n\r\n archive.pipe(output);\r\n\r\n // Add files to archive\r\n archive.append(generateContentTypesXml(slides.length), { name: \"[Content_Types].xml\" });\r\n archive.append(generateRootRelsXml(), { name: \"_rels/.rels\" });\r\n archive.append(generatePresentationXml(slides.length, finalOptions), { name: \"ppt/presentation.xml\" });\r\n archive.append(generatePresentationRelsXml(slides.length), { name: \"ppt/_rels/presentation.xml.rels\" });\r\n archive.append(generateThemeXml(theme), { name: \"ppt/theme/theme1.xml\" });\r\n archive.append(generateSlideMasterXml(theme, finalOptions.layout || \"LAYOUT_16x9\"), { name: \"ppt/slideMasters/slideMaster1.xml\" });\r\n archive.append(generateSlideMasterRelsXml(), { name: \"ppt/slideMasters/_rels/slideMaster1.xml.rels\" });\r\n archive.append(generateSlideLayoutXml(\"title\"), { name: \"ppt/slideLayouts/slideLayout1.xml\" });\r\n archive.append(generateSlideLayoutXml(\"content\"), { name: \"ppt/slideLayouts/slideLayout2.xml\" });\r\n archive.append(generateSlideLayoutRelsXml(), { name: \"ppt/slideLayouts/_rels/slideLayout1.xml.rels\" });\r\n archive.append(generateSlideLayoutRelsXml(), { name: \"ppt/slideLayouts/_rels/slideLayout2.xml.rels\" });\r\n\r\n // Add slides\r\n for (let i = 0; i < slides.length; i++) {\r\n archive.append(generateSlideXml(slides[i], i + 1, finalOptions), { name: `ppt/slides/slide${i + 1}.xml` });\r\n archive.append(generateSlideRelsXml(i + 1), { name: `ppt/slides/_rels/slide${i + 1}.xml.rels` });\r\n }\r\n\r\n // Add document properties\r\n archive.append(generateCorePropsXml(finalOptions), { name: \"docProps/core.xml\" });\r\n archive.append(generateAppPropsXml(finalOptions, slides.length), { name: \"docProps/app.xml\" });\r\n\r\n archive.finalize();\r\n });\r\n } catch {\r\n // Ultimate fallback: save slide content as text\r\n const txtPath = filePath.replace(\".pptx\", \".txt\");\r\n let content = `Presentation: ${options.title || \"Untitled\"}\\n${\"=\".repeat(50)}\\n\\n`;\r\n\r\n for (let i = 0; i < slides.length; i++) {\r\n const slide = slides[i];\r\n content += `--- Slide ${i + 1} ---\\n`;\r\n if (slide.title) content += `Title: ${slide.title}\\n`;\r\n if (slide.subtitle) content += `Subtitle: ${slide.subtitle}\\n`;\r\n if (slide.content) {\r\n content += \"Content:\\n\";\r\n for (const element of slide.content) {\r\n if (\"text\" in element && element.type === \"text\") content += ` ${element.text}\\n`;\r\n if (\"items\" in element) content += element.items.map((item: string) => ` - ${item}`).join(\"\\n\") + \"\\n\";\r\n }\r\n }\r\n content += \"\\n\";\r\n }\r\n\r\n await writeFile(txtPath, content, \"utf-8\");\r\n return { success: true, filePath: txtPath };\r\n }\r\n}\r\n\r\n// Quick presentation from outline\r\nexport async function quickPresentation(\r\n title: string,\r\n outline: Array<{ title: string; bullets?: string[] }>,\r\n filename?: string,\r\n options?: PresentationOptions\r\n): Promise<PresentationResult> {\r\n const slides: Slide[] = [\r\n {\r\n layout: \"title\",\r\n title,\r\n subtitle: options?.author ? `By ${options.author}` : undefined,\r\n },\r\n ];\r\n\r\n for (const section of outline) {\r\n slides.push({\r\n layout: \"title-content\",\r\n title: section.title,\r\n content: section.bullets\r\n ? [{ type: \"bullet-list\", items: section.bullets }]\r\n : undefined,\r\n });\r\n }\r\n\r\n return generatePresentation(slides, filename, options);\r\n}\r\n\r\n// Main function for tool use\r\nexport async function generatePPTX(\r\n slides: Slide[],\r\n filename: string,\r\n options?: PresentationOptions\r\n): Promise<PresentationResult> {\r\n return generatePresentation(slides, filename, options);\r\n}\r\n\r\nexport default {\r\n generatePresentation,\r\n generatePPTX,\r\n quickPresentation,\r\n};\r\n"],"mappings":"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","names":[]}
@@ -2,9 +2,9 @@ import {
2
2
  PrometheusExporter,
3
3
  prometheusExporter
4
4
  } from "./chunk-KM22GV7G.js";
5
- import "./chunk-PLDDJCW6.js";
5
+ import "./chunk-UP2VWCW5.js";
6
6
  export {
7
7
  PrometheusExporter,
8
8
  prometheusExporter
9
9
  };
10
- //# sourceMappingURL=prometheus-JNT2BD4L.js.map
10
+ //# sourceMappingURL=prometheus-YETCZO4I.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
@@ -1,19 +1,21 @@
1
1
  import {
2
2
  AnthropicProvider,
3
+ GeminiProvider,
3
4
  initializeProviders,
4
5
  providerRegistry
5
- } from "./chunk-BXZ6EA52.js";
6
- import "./chunk-ZLZKF2PM.js";
6
+ } from "./chunk-GW6V4D43.js";
7
+ import "./chunk-4KIHDIXZ.js";
7
8
  import {
8
9
  OllamaProvider,
9
10
  OpenAICompatibleProvider
10
11
  } from "./chunk-35WYTA3C.js";
11
- import "./chunk-PLDDJCW6.js";
12
+ import "./chunk-UP2VWCW5.js";
12
13
  export {
13
14
  AnthropicProvider,
15
+ GeminiProvider,
14
16
  OllamaProvider,
15
17
  OpenAICompatibleProvider,
16
18
  initializeProviders,
17
19
  providerRegistry
18
20
  };
19
- //# sourceMappingURL=providers-J4LYPHDR.js.map
21
+ //# sourceMappingURL=providers-2YQ6E3IF.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
@@ -5,7 +5,7 @@ import {
5
5
  vcardQRData,
6
6
  wifiQRData
7
7
  } from "./chunk-VNX5GMTN.js";
8
- import "./chunk-PLDDJCW6.js";
8
+ import "./chunk-UP2VWCW5.js";
9
9
  export {
10
10
  qr_code_default as default,
11
11
  generateQRSvg,
@@ -13,4 +13,4 @@ export {
13
13
  vcardQRData,
14
14
  wifiQRData
15
15
  };
16
- //# sourceMappingURL=qr-code-WIX4PB4U.js.map
16
+ //# sourceMappingURL=qr-code-6WZJHRKL.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  BaseAdapter
3
3
  } from "./chunk-7WQO5J2M.js";
4
- import "./chunk-PLDDJCW6.js";
4
+ import "./chunk-UP2VWCW5.js";
5
5
 
6
6
  // src/core/adapters/adapters/quickbooks.ts
7
7
  import { z } from "zod";
@@ -187,4 +187,4 @@ var QuickBooksAdapter = class extends BaseAdapter {
187
187
  export {
188
188
  QuickBooksAdapter
189
189
  };
190
- //# sourceMappingURL=quickbooks-XB4NII2S.js.map
190
+ //# sourceMappingURL=quickbooks-N675W7IK.js.map
@@ -9,7 +9,7 @@ import {
9
9
  testRegex,
10
10
  validateRegex
11
11
  } from "./chunk-WLUHNG6X.js";
12
- import "./chunk-PLDDJCW6.js";
12
+ import "./chunk-UP2VWCW5.js";
13
13
  export {
14
14
  regex_tool_default as default,
15
15
  escapeRegex,
@@ -21,4 +21,4 @@ export {
21
21
  testRegex,
22
22
  validateRegex
23
23
  };
24
- //# sourceMappingURL=regex-tool-W4ABRKGK.js.map
24
+ //# sourceMappingURL=regex-tool-6Q63LQ7B.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}