opensentinel 2.1.1 → 3.1.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 (268) hide show
  1. package/README.md +354 -283
  2. package/dist/archiver-AVNBYCKQ.js +15340 -0
  3. package/dist/archiver-AVNBYCKQ.js.map +1 -0
  4. package/dist/audit-logger-OBPR7CRO.js +22 -0
  5. package/dist/auth-UOX5K2BE.js +18 -0
  6. package/dist/autonomy-ZXDBDQUJ.js +86 -0
  7. package/dist/autonomy-ZXDBDQUJ.js.map +1 -0
  8. package/dist/aws-s3-Q4LLZZPD.js +146 -0
  9. package/dist/aws-s3-Q4LLZZPD.js.map +1 -0
  10. package/dist/backup-restore-PZ7CYYB7.js +16 -0
  11. package/dist/blocks-R3PODY47.js +23 -0
  12. package/dist/bot-QRARP4UN.js +36 -0
  13. package/dist/brain-7XLLM3KC.js +56 -0
  14. package/dist/camera-monitor-M5CYKUU4.js +335 -0
  15. package/dist/camera-monitor-M5CYKUU4.js.map +1 -0
  16. package/dist/{charts-MMXM6BWW.js → charts-V7ARZNKF.js} +2 -2
  17. package/dist/chunk-22VGGA7S.js +330 -0
  18. package/dist/chunk-22VGGA7S.js.map +1 -0
  19. package/dist/chunk-35WYTA3C.js +382 -0
  20. package/dist/chunk-35WYTA3C.js.map +1 -0
  21. package/dist/chunk-3E2PSU2C.js +146 -0
  22. package/dist/chunk-3E2PSU2C.js.map +1 -0
  23. package/dist/{chunk-L3F43VPB.js → chunk-4GLYY4NN.js} +2 -2
  24. package/dist/{chunk-L3F43VPB.js.map → chunk-4GLYY4NN.js.map} +1 -1
  25. package/dist/{chunk-L3PDU3XN.js → chunk-4UOE5TUZ.js} +4 -4
  26. package/dist/{chunk-6SNHU3CY.js → chunk-66OJ3WB4.js} +2 -2
  27. package/dist/chunk-6KONMXQ6.js +297 -0
  28. package/dist/chunk-6KONMXQ6.js.map +1 -0
  29. package/dist/chunk-6PMVAAA7.js +196 -0
  30. package/dist/chunk-6PMVAAA7.js.map +1 -0
  31. package/dist/chunk-766ASQWE.js +32620 -0
  32. package/dist/chunk-766ASQWE.js.map +1 -0
  33. package/dist/chunk-7WQO5J2M.js +29 -0
  34. package/dist/chunk-7WQO5J2M.js.map +1 -0
  35. package/dist/chunk-APHSRMBS.js +148 -0
  36. package/dist/chunk-APHSRMBS.js.map +1 -0
  37. package/dist/{chunk-4LVWXUNC.js → chunk-AYUKPTSM.js} +57 -39
  38. package/dist/chunk-AYUKPTSM.js.map +1 -0
  39. package/dist/chunk-BIPYADGB.js +84 -0
  40. package/dist/chunk-BIPYADGB.js.map +1 -0
  41. package/dist/chunk-BRBWNV65.js +457 -0
  42. package/dist/chunk-BRBWNV65.js.map +1 -0
  43. package/dist/chunk-BXZ6EA52.js +382 -0
  44. package/dist/chunk-BXZ6EA52.js.map +1 -0
  45. package/dist/chunk-EVE7MIIY.js +290 -0
  46. package/dist/chunk-EVE7MIIY.js.map +1 -0
  47. package/dist/chunk-F3TTNID2.js +138 -0
  48. package/dist/chunk-F3TTNID2.js.map +1 -0
  49. package/dist/chunk-H5RQOFO2.js +190 -0
  50. package/dist/chunk-H5RQOFO2.js.map +1 -0
  51. package/dist/chunk-HN3F4WSW.js +145 -0
  52. package/dist/chunk-HN3F4WSW.js.map +1 -0
  53. package/dist/{chunk-6DRDKB45.js → chunk-I6BDYQIG.js} +20 -9
  54. package/dist/chunk-I6BDYQIG.js.map +1 -0
  55. package/dist/chunk-IZJMVV7O.js +347 -0
  56. package/dist/chunk-IZJMVV7O.js.map +1 -0
  57. package/dist/chunk-KM22GV7G.js +211 -0
  58. package/dist/chunk-KM22GV7G.js.map +1 -0
  59. package/dist/chunk-MGFBLVR7.js +103 -0
  60. package/dist/chunk-MGFBLVR7.js.map +1 -0
  61. package/dist/chunk-MQJ2ECQT.js +228 -0
  62. package/dist/chunk-MQJ2ECQT.js.map +1 -0
  63. package/dist/{chunk-F6QUZQGI.js → chunk-MXAPLSJ5.js} +2 -2
  64. package/dist/{chunk-GK3E2I7A.js → chunk-NHMBTUMW.js} +2 -2
  65. package/dist/chunk-NPRTSZIF.js +131 -0
  66. package/dist/chunk-NPRTSZIF.js.map +1 -0
  67. package/dist/chunk-O7IH7JTI.js +1898 -0
  68. package/dist/chunk-O7IH7JTI.js.map +1 -0
  69. package/dist/chunk-OCVQGBJK.js +293 -0
  70. package/dist/chunk-OCVQGBJK.js.map +1 -0
  71. package/dist/chunk-P6QINGFL.js +332 -0
  72. package/dist/chunk-P6QINGFL.js.map +1 -0
  73. package/dist/chunk-PHDZKPNE.js +91 -0
  74. package/dist/chunk-PHDZKPNE.js.map +1 -0
  75. package/dist/chunk-PLDDJCW6.js +49 -0
  76. package/dist/chunk-PTGTGXV2.js +164 -0
  77. package/dist/chunk-PTGTGXV2.js.map +1 -0
  78. package/dist/chunk-REMIY4U2.js +171 -0
  79. package/dist/chunk-REMIY4U2.js.map +1 -0
  80. package/dist/chunk-RZ4YESBG.js +141 -0
  81. package/dist/chunk-RZ4YESBG.js.map +1 -0
  82. package/dist/chunk-SAX5MHK4.js +111 -0
  83. package/dist/chunk-SAX5MHK4.js.map +1 -0
  84. package/dist/{chunk-GVJVEWHI.js → chunk-SJSUSJ47.js} +2 -2
  85. package/dist/chunk-SPPMCAKG.js +777 -0
  86. package/dist/chunk-SPPMCAKG.js.map +1 -0
  87. package/dist/chunk-SVAPX2XN.js +2441 -0
  88. package/dist/chunk-SVAPX2XN.js.map +1 -0
  89. package/dist/chunk-TVEWKIK3.js +452 -0
  90. package/dist/chunk-TVEWKIK3.js.map +1 -0
  91. package/dist/{chunk-HH2HBTQM.js → chunk-TYAGMJNV.js} +5 -5
  92. package/dist/{chunk-JXUP2X7V.js → chunk-VEHFVBLI.js} +2 -2
  93. package/dist/chunk-VNX5GMTN.js +128 -0
  94. package/dist/chunk-VNX5GMTN.js.map +1 -0
  95. package/dist/chunk-VRD5CYRL.js +1568 -0
  96. package/dist/chunk-VRD5CYRL.js.map +1 -0
  97. package/dist/chunk-WLUHNG6X.js +122 -0
  98. package/dist/chunk-WLUHNG6X.js.map +1 -0
  99. package/dist/chunk-WRAKK6K6.js +265 -0
  100. package/dist/chunk-WRAKK6K6.js.map +1 -0
  101. package/dist/chunk-XKYRH4FM.js +681 -0
  102. package/dist/chunk-XKYRH4FM.js.map +1 -0
  103. package/dist/{chunk-GUBEEYDW.js → chunk-XMCVRVTF.js} +2 -2
  104. package/dist/{chunk-GUBEEYDW.js.map → chunk-XMCVRVTF.js.map} +1 -1
  105. package/dist/chunk-ZLZKF2PM.js +310 -0
  106. package/dist/chunk-ZLZKF2PM.js.map +1 -0
  107. package/dist/cli.js +5 -1
  108. package/dist/cli.js.map +1 -1
  109. package/dist/client-ZQSFPMOB.js +21 -0
  110. package/dist/clipboard-manager-TEO2GEDN.js +24 -0
  111. package/dist/commands/setup.js +3 -3
  112. package/dist/commands/setup.js.map +1 -1
  113. package/dist/commands/start.js +3 -3
  114. package/dist/commands/status.js +2 -2
  115. package/dist/commands/stop.js +2 -2
  116. package/dist/commands/utils.js +2 -2
  117. package/dist/cron-explain-HHQKPD3M.js +16 -0
  118. package/dist/crypto-4AP47IKC.js +14 -0
  119. package/dist/crypto-4AP47IKC.js.map +1 -0
  120. package/dist/databases-37X4CI2Y.js +21 -0
  121. package/dist/databases-37X4CI2Y.js.map +1 -0
  122. package/dist/discord-B3HUPGQ6.js +70 -0
  123. package/dist/discord-B3HUPGQ6.js.map +1 -0
  124. package/dist/dist-UISMLMFN.js +21847 -0
  125. package/dist/dist-UISMLMFN.js.map +1 -0
  126. package/dist/email-K7LO2IPB.js +268 -0
  127. package/dist/email-K7LO2IPB.js.map +1 -0
  128. package/dist/enhanced-retrieval-DNLLEM4Z.js +753 -0
  129. package/dist/enhanced-retrieval-DNLLEM4Z.js.map +1 -0
  130. package/dist/enrichment-pipeline-MNHNW65K.js +13 -0
  131. package/dist/enrichment-pipeline-MNHNW65K.js.map +1 -0
  132. package/dist/entity-resolution-Y3IUWEAT.js +24 -0
  133. package/dist/entity-resolution-Y3IUWEAT.js.map +1 -0
  134. package/dist/env-IWXUVTCB.js +12 -0
  135. package/dist/env-IWXUVTCB.js.map +1 -0
  136. package/dist/google-workspace-DKWUVNGC.js +169 -0
  137. package/dist/google-workspace-DKWUVNGC.js.map +1 -0
  138. package/dist/hash-tool-ULQYD7B5.js +22 -0
  139. package/dist/hash-tool-ULQYD7B5.js.map +1 -0
  140. package/dist/heartbeat-monitor-GCISLXI3.js +22 -0
  141. package/dist/heartbeat-monitor-GCISLXI3.js.map +1 -0
  142. package/dist/image-generation-OSU7FP6F.js +486 -0
  143. package/dist/image-generation-OSU7FP6F.js.map +1 -0
  144. package/dist/imessage-NGA2XF2V.js +35 -0
  145. package/dist/imessage-NGA2XF2V.js.map +1 -0
  146. package/dist/inbox-summarizer-NRI4S7IF.js +47 -0
  147. package/dist/inbox-summarizer-NRI4S7IF.js.map +1 -0
  148. package/dist/incident-response-C5J7Q6DT.js +244 -0
  149. package/dist/incident-response-C5J7Q6DT.js.map +1 -0
  150. package/dist/inventory-manager-352OHXWD.js +24 -0
  151. package/dist/inventory-manager-352OHXWD.js.map +1 -0
  152. package/dist/jira-GSGDBMIG.js +199 -0
  153. package/dist/jira-GSGDBMIG.js.map +1 -0
  154. package/dist/json-tool-QE2SYHEG.js +26 -0
  155. package/dist/json-tool-QE2SYHEG.js.map +1 -0
  156. package/dist/key-rotation-DPHU4ZTB.js +18 -0
  157. package/dist/key-rotation-DPHU4ZTB.js.map +1 -0
  158. package/dist/lib.d.ts +603 -11
  159. package/dist/lib.js +161 -35
  160. package/dist/lib.js.map +1 -1
  161. package/dist/mailchimp-KKNF6QJ7.js +152 -0
  162. package/dist/mailchimp-KKNF6QJ7.js.map +1 -0
  163. package/dist/matrix-QVHG76I7.js +279 -0
  164. package/dist/matrix-QVHG76I7.js.map +1 -0
  165. package/dist/{mcp-LS7Q3Z5W.js → mcp-3JI6W7ZE.js} +3 -3
  166. package/dist/mcp-3JI6W7ZE.js.map +1 -0
  167. package/dist/microsoft365-UCBKJHNX.js +164 -0
  168. package/dist/microsoft365-UCBKJHNX.js.map +1 -0
  169. package/dist/ocr-AC7NPX33.js +22 -0
  170. package/dist/ocr-AC7NPX33.js.map +1 -0
  171. package/dist/ollama-BOAMSPLJ.js +8 -0
  172. package/dist/ollama-BOAMSPLJ.js.map +1 -0
  173. package/dist/pages-MI523RB7.js +26 -0
  174. package/dist/pages-MI523RB7.js.map +1 -0
  175. package/dist/pair-JDFTERIK.js +24 -0
  176. package/dist/pair-JDFTERIK.js.map +1 -0
  177. package/dist/pairing-IFQYCPNS.js +10 -0
  178. package/dist/pairing-IFQYCPNS.js.map +1 -0
  179. package/dist/pdf-ALQVOEJR.js +17 -0
  180. package/dist/pdf-ALQVOEJR.js.map +1 -0
  181. package/dist/presentations-DSV5IHG5.js +1002 -0
  182. package/dist/presentations-DSV5IHG5.js.map +1 -0
  183. package/dist/prometheus-JNT2BD4L.js +10 -0
  184. package/dist/prometheus-JNT2BD4L.js.map +1 -0
  185. package/dist/providers-J4LYPHDR.js +19 -0
  186. package/dist/providers-J4LYPHDR.js.map +1 -0
  187. package/dist/qr-code-WIX4PB4U.js +16 -0
  188. package/dist/qr-code-WIX4PB4U.js.map +1 -0
  189. package/dist/quickbooks-XB4NII2S.js +190 -0
  190. package/dist/quickbooks-XB4NII2S.js.map +1 -0
  191. package/dist/regex-tool-W4ABRKGK.js +24 -0
  192. package/dist/regex-tool-W4ABRKGK.js.map +1 -0
  193. package/dist/scheduler-VK4WFERV.js +63 -0
  194. package/dist/scheduler-VK4WFERV.js.map +1 -0
  195. package/dist/search-BCLBO5E3.js +25 -0
  196. package/dist/search-BCLBO5E3.js.map +1 -0
  197. package/dist/sendgrid-RNXCAFKM.js +152 -0
  198. package/dist/sendgrid-RNXCAFKM.js.map +1 -0
  199. package/dist/shopify-NCXYJB4R.js +171 -0
  200. package/dist/shopify-NCXYJB4R.js.map +1 -0
  201. package/dist/signal-6CGDFYL2.js +35 -0
  202. package/dist/signal-6CGDFYL2.js.map +1 -0
  203. package/dist/slack-IZQWIKOH.js +75 -0
  204. package/dist/slack-IZQWIKOH.js.map +1 -0
  205. package/dist/sms-M3JIOTCW.js +23 -0
  206. package/dist/sms-M3JIOTCW.js.map +1 -0
  207. package/dist/{src-K7GASHRH.js → src-VYUE6LRA.js} +138 -32
  208. package/dist/src-VYUE6LRA.js.map +1 -0
  209. package/dist/stocks-XXWBPOCU.js +14 -0
  210. package/dist/stocks-XXWBPOCU.js.map +1 -0
  211. package/dist/text-transform-6SGUA5Z4.js +22 -0
  212. package/dist/text-transform-6SGUA5Z4.js.map +1 -0
  213. package/dist/tools-2RLEI2N6.js +38 -0
  214. package/dist/tools-2RLEI2N6.js.map +1 -0
  215. package/dist/tunnel-IWMXUML4.js +301 -0
  216. package/dist/tunnel-IWMXUML4.js.map +1 -0
  217. package/dist/twilio-53GEW5JT.js +139 -0
  218. package/dist/twilio-53GEW5JT.js.map +1 -0
  219. package/dist/unit-converter-ZYXMEZOE.js +14 -0
  220. package/dist/unit-converter-ZYXMEZOE.js.map +1 -0
  221. package/dist/whatsapp-LFX6YKCM.js +35 -0
  222. package/dist/whatsapp-LFX6YKCM.js.map +1 -0
  223. package/dist/word-document-7B6SJMAY.js +902 -0
  224. package/dist/word-document-7B6SJMAY.js.map +1 -0
  225. package/dist/xero-QYO66D45.js +162 -0
  226. package/dist/xero-QYO66D45.js.map +1 -0
  227. package/dist/zapier-webhook-TBZ5YF2A.js +106 -0
  228. package/dist/zapier-webhook-TBZ5YF2A.js.map +1 -0
  229. package/drizzle/0002_mushy_master_mold.sql +140 -0
  230. package/drizzle/meta/0002_snapshot.json +3637 -0
  231. package/drizzle/meta/_journal.json +7 -0
  232. package/package.json +100 -98
  233. package/dist/bot-KJ26BG56.js +0 -15
  234. package/dist/chunk-4LVWXUNC.js.map +0 -1
  235. package/dist/chunk-4TG2IG5K.js +0 -5249
  236. package/dist/chunk-4TG2IG5K.js.map +0 -1
  237. package/dist/chunk-6DRDKB45.js.map +0 -1
  238. package/dist/chunk-CI6Q63MM.js +0 -1613
  239. package/dist/chunk-CI6Q63MM.js.map +0 -1
  240. package/dist/chunk-KHNYJY2Z.js +0 -178
  241. package/dist/chunk-KHNYJY2Z.js.map +0 -1
  242. package/dist/chunk-NSBPE2FW.js +0 -17
  243. package/dist/discord-ZOJFTVTB.js +0 -49
  244. package/dist/imessage-JFRB6EJ7.js +0 -14
  245. package/dist/scheduler-EZ7CZMCS.js +0 -42
  246. package/dist/signal-T3MCSULM.js +0 -14
  247. package/dist/slack-N2M4FHAJ.js +0 -54
  248. package/dist/src-K7GASHRH.js.map +0 -1
  249. package/dist/tools-24GZHYRF.js +0 -16
  250. package/dist/whatsapp-VCRUPAO5.js +0 -14
  251. /package/dist/{bot-KJ26BG56.js.map → audit-logger-OBPR7CRO.js.map} +0 -0
  252. /package/dist/{chunk-NSBPE2FW.js.map → auth-UOX5K2BE.js.map} +0 -0
  253. /package/dist/{discord-ZOJFTVTB.js.map → backup-restore-PZ7CYYB7.js.map} +0 -0
  254. /package/dist/{imessage-JFRB6EJ7.js.map → blocks-R3PODY47.js.map} +0 -0
  255. /package/dist/{mcp-LS7Q3Z5W.js.map → bot-QRARP4UN.js.map} +0 -0
  256. /package/dist/{scheduler-EZ7CZMCS.js.map → brain-7XLLM3KC.js.map} +0 -0
  257. /package/dist/{charts-MMXM6BWW.js.map → charts-V7ARZNKF.js.map} +0 -0
  258. /package/dist/{chunk-L3PDU3XN.js.map → chunk-4UOE5TUZ.js.map} +0 -0
  259. /package/dist/{chunk-6SNHU3CY.js.map → chunk-66OJ3WB4.js.map} +0 -0
  260. /package/dist/{chunk-F6QUZQGI.js.map → chunk-MXAPLSJ5.js.map} +0 -0
  261. /package/dist/{chunk-GK3E2I7A.js.map → chunk-NHMBTUMW.js.map} +0 -0
  262. /package/dist/{signal-T3MCSULM.js.map → chunk-PLDDJCW6.js.map} +0 -0
  263. /package/dist/{chunk-GVJVEWHI.js.map → chunk-SJSUSJ47.js.map} +0 -0
  264. /package/dist/{chunk-HH2HBTQM.js.map → chunk-TYAGMJNV.js.map} +0 -0
  265. /package/dist/{chunk-JXUP2X7V.js.map → chunk-VEHFVBLI.js.map} +0 -0
  266. /package/dist/{slack-N2M4FHAJ.js.map → client-ZQSFPMOB.js.map} +0 -0
  267. /package/dist/{tools-24GZHYRF.js.map → clipboard-manager-TEO2GEDN.js.map} +0 -0
  268. /package/dist/{whatsapp-VCRUPAO5.js.map → cron-explain-HHQKPD3M.js.map} +0 -0
package/dist/lib.js CHANGED
@@ -1,54 +1,140 @@
1
1
  import {
2
2
  app
3
- } from "./chunk-KHNYJY2Z.js";
3
+ } from "./chunk-O7IH7JTI.js";
4
+ import {
5
+ SignalBot
6
+ } from "./chunk-VEHFVBLI.js";
4
7
  import {
5
8
  iMessageBot
6
- } from "./chunk-GK3E2I7A.js";
9
+ } from "./chunk-NHMBTUMW.js";
7
10
  import {
8
11
  createBot
9
- } from "./chunk-6DRDKB45.js";
12
+ } from "./chunk-I6BDYQIG.js";
10
13
  import {
11
14
  DiscordBot
12
- } from "./chunk-HH2HBTQM.js";
13
- import "./chunk-F6QUZQGI.js";
15
+ } from "./chunk-TYAGMJNV.js";
16
+ import "./chunk-MXAPLSJ5.js";
14
17
  import {
15
18
  SlackBot
16
- } from "./chunk-L3PDU3XN.js";
17
- import "./chunk-GVJVEWHI.js";
19
+ } from "./chunk-4UOE5TUZ.js";
20
+ import "./chunk-SJSUSJ47.js";
18
21
  import {
19
22
  cancelTask,
20
23
  generateBriefing,
21
24
  scheduleReminder,
22
25
  scheduleTask
23
- } from "./chunk-4LVWXUNC.js";
26
+ } from "./chunk-AYUKPTSM.js";
24
27
  import {
25
28
  WhatsAppBot
26
- } from "./chunk-6SNHU3CY.js";
27
- import {
28
- SignalBot
29
- } from "./chunk-JXUP2X7V.js";
29
+ } from "./chunk-66OJ3WB4.js";
30
30
  import {
31
31
  SYSTEM_PROMPT,
32
- buildMemoryContext,
32
+ TOOLS,
33
33
  chat,
34
34
  chatWithTools,
35
+ executeTool,
36
+ streamChat,
37
+ streamChatWithTools
38
+ } from "./chunk-766ASQWE.js";
39
+ import {
40
+ buildMemoryContext,
35
41
  extractMemories,
36
42
  generateEmbedding,
37
43
  searchMemories,
38
- storeMemory,
39
- streamChat,
40
- streamChatWithTools
41
- } from "./chunk-CI6Q63MM.js";
44
+ storeMemory
45
+ } from "./chunk-IZJMVV7O.js";
46
+ import {
47
+ changeCase,
48
+ countText,
49
+ detectLanguage,
50
+ extractKeywords,
51
+ transformText
52
+ } from "./chunk-PTGTGXV2.js";
53
+ import {
54
+ diffJson,
55
+ flattenJson,
56
+ formatJson,
57
+ jsonTool,
58
+ queryJson,
59
+ validateJson
60
+ } from "./chunk-F3TTNID2.js";
61
+ import {
62
+ cronTool,
63
+ explainCron,
64
+ getNextRuns,
65
+ validateCron
66
+ } from "./chunk-APHSRMBS.js";
67
+ import {
68
+ compareHashes,
69
+ generateToken,
70
+ hashString,
71
+ hashTool
72
+ } from "./chunk-PHDZKPNE.js";
73
+ import {
74
+ extractCaptures,
75
+ regexTool,
76
+ replaceWithRegex,
77
+ testRegex
78
+ } from "./chunk-WLUHNG6X.js";
79
+ import {
80
+ convert,
81
+ unitConverter
82
+ } from "./chunk-REMIY4U2.js";
83
+ import {
84
+ generateQRSvg,
85
+ qrCodeTool
86
+ } from "./chunk-VNX5GMTN.js";
87
+ import {
88
+ clipboardTool
89
+ } from "./chunk-MGFBLVR7.js";
90
+ import {
91
+ generateEncryptionKey,
92
+ getRotationInfo,
93
+ reEncryptValue
94
+ } from "./chunk-BIPYADGB.js";
95
+ import {
96
+ createDatabaseBackup,
97
+ listBackups,
98
+ restoreDatabase
99
+ } from "./chunk-NPRTSZIF.js";
100
+ import {
101
+ checkHeartbeats,
102
+ getHeartbeatSummary,
103
+ recordBeat,
104
+ registerService
105
+ } from "./chunk-SAX5MHK4.js";
106
+ import "./chunk-6PMVAAA7.js";
107
+ import "./chunk-MQJ2ECQT.js";
108
+ import "./chunk-TVEWKIK3.js";
109
+ import "./chunk-BRBWNV65.js";
110
+ import "./chunk-H5RQOFO2.js";
111
+ import "./chunk-VRD5CYRL.js";
112
+ import "./chunk-KM22GV7G.js";
113
+ import "./chunk-P6QINGFL.js";
114
+ import "./chunk-HN3F4WSW.js";
115
+ import "./chunk-SVAPX2XN.js";
116
+ import "./chunk-WRAKK6K6.js";
117
+ import "./chunk-7WQO5J2M.js";
118
+ import {
119
+ initializeProviders
120
+ } from "./chunk-BXZ6EA52.js";
121
+ import "./chunk-4GLYY4NN.js";
122
+ import "./chunk-EVE7MIIY.js";
123
+ import "./chunk-RZ4YESBG.js";
124
+ import "./chunk-CQ4JURG7.js";
125
+ import "./chunk-OCVQGBJK.js";
126
+ import {
127
+ db
128
+ } from "./chunk-XKYRH4FM.js";
42
129
  import {
43
- TOOLS,
44
130
  configure,
45
- db,
46
131
  env,
47
- executeTool
48
- } from "./chunk-4TG2IG5K.js";
49
- import "./chunk-CQ4JURG7.js";
50
- import "./chunk-L3F43VPB.js";
51
- import "./chunk-NSBPE2FW.js";
132
+ ready
133
+ } from "./chunk-ZLZKF2PM.js";
134
+ import "./chunk-6KONMXQ6.js";
135
+ import "./chunk-22VGGA7S.js";
136
+ import "./chunk-35WYTA3C.js";
137
+ import "./chunk-PLDDJCW6.js";
52
138
 
53
139
  // src/app.ts
54
140
  var OpenSentinel = class {
@@ -66,7 +152,7 @@ var OpenSentinel = class {
66
152
  if (this._running) return;
67
153
  const services = this.config.services || {};
68
154
  if (services.telegram && env.TELEGRAM_BOT_TOKEN) {
69
- const { createBot: createBot2 } = await import("./bot-KJ26BG56.js");
155
+ const { createBot: createBot2 } = await import("./bot-QRARP4UN.js");
70
156
  this._services.telegramBot = createBot2();
71
157
  this._services.telegramBot.start({
72
158
  onStart: (botInfo) => {
@@ -76,7 +162,7 @@ var OpenSentinel = class {
76
162
  }
77
163
  if (services.scheduler) {
78
164
  try {
79
- const { startWorker } = await import("./scheduler-EZ7CZMCS.js");
165
+ const { startWorker } = await import("./scheduler-VK4WFERV.js");
80
166
  startWorker(async (task) => {
81
167
  console.log(`[Scheduler] Executing task: ${task.type}`);
82
168
  if (task.chatId && task.message && this._services.telegramBot) {
@@ -96,8 +182,8 @@ var OpenSentinel = class {
96
182
  }
97
183
  if (services.mcp !== false && env.MCP_ENABLED) {
98
184
  try {
99
- const { initMCPRegistry, getMCPToolSummary } = await import("./mcp-LS7Q3Z5W.js");
100
- const { setMCPRegistry } = await import("./tools-24GZHYRF.js");
185
+ const { initMCPRegistry, getMCPToolSummary } = await import("./mcp-3JI6W7ZE.js");
186
+ const { setMCPRegistry } = await import("./tools-2RLEI2N6.js");
101
187
  this._services.mcpRegistry = await initMCPRegistry(env.MCP_CONFIG_PATH);
102
188
  setMCPRegistry(this._services.mcpRegistry);
103
189
  if (this._services.mcpRegistry.connectedCount > 0) {
@@ -113,7 +199,7 @@ var OpenSentinel = class {
113
199
  }
114
200
  if (services.discord && env.DISCORD_BOT_TOKEN) {
115
201
  try {
116
- const { DiscordBot: DiscordBot2 } = await import("./discord-ZOJFTVTB.js");
202
+ const { DiscordBot: DiscordBot2 } = await import("./discord-B3HUPGQ6.js");
117
203
  this._services.discordBot = new DiscordBot2({
118
204
  token: env.DISCORD_BOT_TOKEN,
119
205
  clientId: env.DISCORD_CLIENT_ID || "",
@@ -130,7 +216,7 @@ var OpenSentinel = class {
130
216
  }
131
217
  if (services.slack && env.SLACK_BOT_TOKEN && env.SLACK_SIGNING_SECRET) {
132
218
  try {
133
- const { SlackBot: SlackBot2 } = await import("./slack-N2M4FHAJ.js");
219
+ const { SlackBot: SlackBot2 } = await import("./slack-IZQWIKOH.js");
134
220
  this._services.slackBot = new SlackBot2({
135
221
  token: env.SLACK_BOT_TOKEN,
136
222
  signingSecret: env.SLACK_SIGNING_SECRET,
@@ -149,7 +235,7 @@ var OpenSentinel = class {
149
235
  }
150
236
  if (services.whatsapp && env.WHATSAPP_ENABLED) {
151
237
  try {
152
- const { WhatsAppBot: WhatsAppBot2 } = await import("./whatsapp-VCRUPAO5.js");
238
+ const { WhatsAppBot: WhatsAppBot2 } = await import("./whatsapp-LFX6YKCM.js");
153
239
  this._services.whatsappBot = new WhatsAppBot2({
154
240
  authDir: env.WHATSAPP_AUTH_DIR,
155
241
  allowedNumbers: env.WHATSAPP_ALLOWED_NUMBERS?.split(",").filter(Boolean) || [],
@@ -164,7 +250,7 @@ var OpenSentinel = class {
164
250
  }
165
251
  if (services.signal && env.SIGNAL_ENABLED && env.SIGNAL_PHONE_NUMBER) {
166
252
  try {
167
- const { SignalBot: SignalBot2 } = await import("./signal-T3MCSULM.js");
253
+ const { SignalBot: SignalBot2 } = await import("./signal-6CGDFYL2.js");
168
254
  this._services.signalBot = new SignalBot2({
169
255
  phoneNumber: env.SIGNAL_PHONE_NUMBER,
170
256
  signalCliPath: env.SIGNAL_CLI_PATH,
@@ -179,7 +265,7 @@ var OpenSentinel = class {
179
265
  }
180
266
  if (services.imessage && env.IMESSAGE_ENABLED) {
181
267
  try {
182
- const { iMessageBot: iMessageBot2 } = await import("./imessage-JFRB6EJ7.js");
268
+ const { iMessageBot: iMessageBot2 } = await import("./imessage-NGA2XF2V.js");
183
269
  this._services.imessageBot = new iMessageBot2({
184
270
  mode: env.IMESSAGE_MODE,
185
271
  serverUrl: env.IMESSAGE_BLUEBUBBLES_URL,
@@ -198,7 +284,7 @@ var OpenSentinel = class {
198
284
  async stop() {
199
285
  if (!this._running) return;
200
286
  console.log("Shutting down OpenSentinel...");
201
- const { stopWorker } = await import("./scheduler-EZ7CZMCS.js");
287
+ const { stopWorker } = await import("./scheduler-VK4WFERV.js");
202
288
  stopWorker();
203
289
  if (this._services.mcpRegistry) {
204
290
  await this._services.mcpRegistry.shutdown();
@@ -253,22 +339,62 @@ export {
253
339
  app as apiApp,
254
340
  buildMemoryContext,
255
341
  cancelTask,
342
+ changeCase,
256
343
  chat,
257
344
  chatWithTools,
345
+ checkHeartbeats,
346
+ clipboardTool,
347
+ compareHashes,
258
348
  configure,
349
+ convert,
350
+ countText,
351
+ createDatabaseBackup,
259
352
  createBot as createTelegramBot,
353
+ cronTool,
260
354
  db,
355
+ detectLanguage,
356
+ diffJson,
261
357
  env,
262
358
  executeTool,
359
+ explainCron,
360
+ extractCaptures,
361
+ extractKeywords,
263
362
  extractMemories,
363
+ flattenJson,
364
+ formatJson,
264
365
  generateBriefing,
265
366
  generateEmbedding,
367
+ generateEncryptionKey,
368
+ generateQRSvg,
369
+ generateToken,
370
+ getHeartbeatSummary,
371
+ getNextRuns,
372
+ getRotationInfo,
373
+ hashString,
374
+ hashTool,
266
375
  iMessageBot,
376
+ initializeProviders,
377
+ jsonTool,
378
+ listBackups,
379
+ qrCodeTool,
380
+ queryJson,
381
+ reEncryptValue,
382
+ ready,
383
+ recordBeat,
384
+ regexTool,
385
+ registerService,
386
+ replaceWithRegex,
387
+ restoreDatabase,
267
388
  scheduleReminder,
268
389
  scheduleTask,
269
390
  searchMemories,
270
391
  storeMemory,
271
392
  streamChat,
272
- streamChatWithTools
393
+ streamChatWithTools,
394
+ testRegex,
395
+ transformText,
396
+ unitConverter,
397
+ validateCron,
398
+ validateJson
273
399
  };
274
400
  //# sourceMappingURL=lib.js.map
package/dist/lib.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/app.ts"],"sourcesContent":["/**\n * OpenSentinel - Programmatic API\n *\n * Usage:\n * import { OpenSentinel } from 'opensentinel';\n *\n * const sentinel = new OpenSentinel({\n * claudeApiKey: 'sk-ant-...',\n * env: { DATABASE_URL: 'postgresql://...', TELEGRAM_BOT_TOKEN: '...' },\n * services: { telegram: true, api: true },\n * });\n *\n * await sentinel.start();\n */\n\nimport { configure, env, type Env } from \"./config/env\";\nimport { chat, chatWithTools, type Message, type BrainResponse } from \"./core/brain\";\n\nexport interface OpenSentinelConfig {\n /** Required: your Claude API key */\n claudeApiKey: string;\n /** All other env vars as optional overrides */\n env?: Partial<Env>;\n /** Which services to start (all default to false except api) */\n services?: {\n telegram?: boolean;\n discord?: boolean;\n slack?: boolean;\n whatsapp?: boolean;\n signal?: boolean;\n imessage?: boolean;\n api?: boolean;\n scheduler?: boolean;\n mcp?: boolean;\n websocket?: boolean;\n };\n}\n\nexport class OpenSentinel {\n private config: OpenSentinelConfig;\n private _running = false;\n private _services: {\n telegramBot?: any;\n discordBot?: any;\n slackBot?: any;\n whatsappBot?: any;\n signalBot?: any;\n imessageBot?: any;\n mcpRegistry?: any;\n server?: any;\n } = {};\n\n constructor(config: OpenSentinelConfig) {\n this.config = config;\n\n // Configure the env singleton\n configure({\n CLAUDE_API_KEY: config.claudeApiKey,\n ...(config.env || {}),\n } as Partial<Env> & { CLAUDE_API_KEY: string });\n }\n\n async start(): Promise<void> {\n if (this._running) return;\n\n const services = this.config.services || {};\n\n // Start Telegram bot\n if (services.telegram && env.TELEGRAM_BOT_TOKEN) {\n const { createBot } = await import(\"./inputs/telegram/bot\");\n this._services.telegramBot = createBot();\n this._services.telegramBot.start({\n onStart: (botInfo: any) => {\n console.log(`[Telegram] Bot started as @${botInfo.username}`);\n },\n });\n }\n\n // Start scheduler\n if (services.scheduler) {\n try {\n const { startWorker } = await import(\"./core/scheduler\");\n startWorker(async (task: any) => {\n console.log(`[Scheduler] Executing task: ${task.type}`);\n if (task.chatId && task.message && this._services.telegramBot) {\n try {\n await this._services.telegramBot.api.sendMessage(\n task.chatId,\n `Reminder: ${task.message}`\n );\n } catch (err) {\n console.error(\"[Scheduler] Failed to send reminder:\", err);\n }\n }\n });\n } catch (err) {\n console.warn(\"[Scheduler] Could not start worker:\", err);\n }\n }\n\n // Initialize MCP\n if (services.mcp !== false && env.MCP_ENABLED) {\n try {\n const { initMCPRegistry, getMCPToolSummary } = await import(\"./core/mcp\");\n const { setMCPRegistry } = await import(\"./tools\");\n this._services.mcpRegistry = await initMCPRegistry(env.MCP_CONFIG_PATH);\n setMCPRegistry(this._services.mcpRegistry);\n\n if (this._services.mcpRegistry.connectedCount > 0) {\n console.log(\n `[MCP] Connected to ${this._services.mcpRegistry.connectedCount} server(s), ${this._services.mcpRegistry.totalToolCount} tools available`\n );\n console.log(getMCPToolSummary(this._services.mcpRegistry));\n }\n } catch (err) {\n console.warn(\"[MCP] Failed to initialize:\", err);\n this._services.mcpRegistry = null;\n }\n }\n\n // Start Discord bot\n if (services.discord && env.DISCORD_BOT_TOKEN) {\n try {\n const { DiscordBot } = await import(\"./inputs/discord\");\n this._services.discordBot = new DiscordBot({\n token: env.DISCORD_BOT_TOKEN,\n clientId: env.DISCORD_CLIENT_ID || \"\",\n guildId: env.DISCORD_GUILD_ID,\n allowedUserIds: env.DISCORD_ALLOWED_USER_IDS?.split(\",\") || [],\n allowedRoleIds: env.DISCORD_ALLOWED_ROLE_IDS?.split(\",\") || [],\n });\n await this._services.discordBot.start();\n console.log(\"[Discord] Bot started\");\n } catch (err: any) {\n console.warn(\"[Discord] Failed to start bot:\", err.message);\n this._services.discordBot = null;\n }\n }\n\n // Start Slack bot\n if (services.slack && env.SLACK_BOT_TOKEN && env.SLACK_SIGNING_SECRET) {\n try {\n const { SlackBot } = await import(\"./inputs/slack\");\n this._services.slackBot = new SlackBot({\n token: env.SLACK_BOT_TOKEN,\n signingSecret: env.SLACK_SIGNING_SECRET,\n appToken: env.SLACK_APP_TOKEN,\n socketMode: env.SLACK_SOCKET_MODE,\n port: parseInt(String(env.SLACK_PORT) || \"3000\"),\n allowedUserIds: env.SLACK_ALLOWED_USER_IDS?.split(\",\") || [],\n allowedChannelIds: env.SLACK_ALLOWED_CHANNEL_IDS?.split(\",\") || [],\n });\n await this._services.slackBot.start();\n console.log(\"[Slack] Bot started\");\n } catch (err: any) {\n console.warn(\"[Slack] Failed to start bot:\", err.message);\n this._services.slackBot = null;\n }\n }\n\n // Start WhatsApp bot\n if (services.whatsapp && env.WHATSAPP_ENABLED) {\n try {\n const { WhatsAppBot } = await import(\"./inputs/whatsapp\");\n this._services.whatsappBot = new WhatsAppBot({\n authDir: env.WHATSAPP_AUTH_DIR,\n allowedNumbers:\n env.WHATSAPP_ALLOWED_NUMBERS?.split(\",\").filter(Boolean) || [],\n printQR: true,\n });\n await this._services.whatsappBot.start();\n console.log(\"[WhatsApp] Bot started\");\n } catch (err: any) {\n console.warn(\"[WhatsApp] Failed to start bot:\", err.message);\n this._services.whatsappBot = null;\n }\n }\n\n // Start Signal bot\n if (services.signal && env.SIGNAL_ENABLED && env.SIGNAL_PHONE_NUMBER) {\n try {\n const { SignalBot } = await import(\"./inputs/signal\");\n this._services.signalBot = new SignalBot({\n phoneNumber: env.SIGNAL_PHONE_NUMBER,\n signalCliPath: env.SIGNAL_CLI_PATH,\n allowedNumbers:\n env.SIGNAL_ALLOWED_NUMBERS?.split(\",\").filter(Boolean) || [],\n });\n await this._services.signalBot.start();\n console.log(\"[Signal] Bot started\");\n } catch (err: any) {\n console.warn(\"[Signal] Failed to start bot:\", err.message);\n this._services.signalBot = null;\n }\n }\n\n // Start iMessage bot\n if (services.imessage && env.IMESSAGE_ENABLED) {\n try {\n const { iMessageBot } = await import(\"./inputs/imessage\");\n this._services.imessageBot = new iMessageBot({\n mode: env.IMESSAGE_MODE as \"bluebubbles\" | \"applescript\",\n serverUrl: env.IMESSAGE_BLUEBUBBLES_URL,\n password: env.IMESSAGE_BLUEBUBBLES_PASSWORD,\n allowedNumbers:\n env.IMESSAGE_ALLOWED_NUMBERS?.split(\",\").filter(Boolean) || [],\n });\n await this._services.imessageBot.start();\n console.log(\"[iMessage] Bot started\");\n } catch (err: any) {\n console.warn(\"[iMessage] Failed to start bot:\", err.message);\n this._services.imessageBot = null;\n }\n }\n\n this._running = true;\n }\n\n async stop(): Promise<void> {\n if (!this._running) return;\n\n console.log(\"Shutting down OpenSentinel...\");\n\n const { stopWorker } = await import(\"./core/scheduler\");\n stopWorker();\n\n if (this._services.mcpRegistry) {\n await this._services.mcpRegistry.shutdown();\n }\n if (this._services.telegramBot) {\n await this._services.telegramBot.stop();\n }\n if (this._services.discordBot) {\n await this._services.discordBot.stop();\n }\n if (this._services.slackBot) {\n await this._services.slackBot.stop();\n }\n if (this._services.whatsappBot) {\n await this._services.whatsappBot.stop();\n }\n if (this._services.signalBot) {\n await this._services.signalBot.stop();\n }\n if (this._services.imessageBot) {\n await this._services.imessageBot.stop();\n }\n if (this._services.server) {\n this._services.server.stop();\n }\n\n this._running = false;\n console.log(\"OpenSentinel stopped.\");\n }\n\n /** Send a simple chat message (no tools) */\n async chat(\n messages: Message[],\n systemPrompt?: string\n ): Promise<BrainResponse> {\n return chat(messages, systemPrompt);\n }\n\n /** Send a chat message with tool execution */\n async chatWithTools(\n messages: Message[],\n userId?: string,\n onToolUse?: (toolName: string, input: unknown) => void\n ): Promise<BrainResponse> {\n return chatWithTools(messages, userId, onToolUse);\n }\n\n get running(): boolean {\n return this._running;\n }\n\n get services() {\n return { ...this._services };\n }\n}\n"],"mappings":"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","names":["createBot","DiscordBot","SlackBot","WhatsAppBot","SignalBot","iMessageBot"]}
1
+ {"version":3,"sources":["../src/app.ts"],"sourcesContent":["/**\n * OpenSentinel - Programmatic API\n *\n * Usage:\n * import { OpenSentinel } from 'opensentinel';\n *\n * const sentinel = new OpenSentinel({\n * claudeApiKey: 'sk-ant-...',\n * env: { DATABASE_URL: 'postgresql://...', TELEGRAM_BOT_TOKEN: '...' },\n * services: { telegram: true, api: true },\n * });\n *\n * await sentinel.start();\n */\n\nimport { configure, env, type Env } from \"./config/env\";\nimport { chat, chatWithTools, type Message, type BrainResponse } from \"./core/brain\";\n\nexport interface OpenSentinelConfig {\n /** Required: your Claude API key */\n claudeApiKey: string;\n /** All other env vars as optional overrides */\n env?: Partial<Env>;\n /** Which services to start (all default to false except api) */\n services?: {\n telegram?: boolean;\n discord?: boolean;\n slack?: boolean;\n whatsapp?: boolean;\n signal?: boolean;\n imessage?: boolean;\n api?: boolean;\n scheduler?: boolean;\n mcp?: boolean;\n websocket?: boolean;\n };\n}\n\nexport class OpenSentinel {\n private config: OpenSentinelConfig;\n private _running = false;\n private _services: {\n telegramBot?: any;\n discordBot?: any;\n slackBot?: any;\n whatsappBot?: any;\n signalBot?: any;\n imessageBot?: any;\n mcpRegistry?: any;\n server?: any;\n } = {};\n\n constructor(config: OpenSentinelConfig) {\n this.config = config;\n\n // Configure the env singleton\n configure({\n CLAUDE_API_KEY: config.claudeApiKey,\n ...(config.env || {}),\n } as Partial<Env> & { CLAUDE_API_KEY: string });\n }\n\n async start(): Promise<void> {\n if (this._running) return;\n\n const services = this.config.services || {};\n\n // Start Telegram bot\n if (services.telegram && env.TELEGRAM_BOT_TOKEN) {\n const { createBot } = await import(\"./inputs/telegram/bot\");\n this._services.telegramBot = createBot();\n this._services.telegramBot.start({\n onStart: (botInfo: any) => {\n console.log(`[Telegram] Bot started as @${botInfo.username}`);\n },\n });\n }\n\n // Start scheduler\n if (services.scheduler) {\n try {\n const { startWorker } = await import(\"./core/scheduler\");\n startWorker(async (task: any) => {\n console.log(`[Scheduler] Executing task: ${task.type}`);\n if (task.chatId && task.message && this._services.telegramBot) {\n try {\n await this._services.telegramBot.api.sendMessage(\n task.chatId,\n `Reminder: ${task.message}`\n );\n } catch (err) {\n console.error(\"[Scheduler] Failed to send reminder:\", err);\n }\n }\n });\n } catch (err) {\n console.warn(\"[Scheduler] Could not start worker:\", err);\n }\n }\n\n // Initialize MCP\n if (services.mcp !== false && env.MCP_ENABLED) {\n try {\n const { initMCPRegistry, getMCPToolSummary } = await import(\"./core/mcp\");\n const { setMCPRegistry } = await import(\"./tools\");\n this._services.mcpRegistry = await initMCPRegistry(env.MCP_CONFIG_PATH);\n setMCPRegistry(this._services.mcpRegistry);\n\n if (this._services.mcpRegistry.connectedCount > 0) {\n console.log(\n `[MCP] Connected to ${this._services.mcpRegistry.connectedCount} server(s), ${this._services.mcpRegistry.totalToolCount} tools available`\n );\n console.log(getMCPToolSummary(this._services.mcpRegistry));\n }\n } catch (err) {\n console.warn(\"[MCP] Failed to initialize:\", err);\n this._services.mcpRegistry = null;\n }\n }\n\n // Start Discord bot\n if (services.discord && env.DISCORD_BOT_TOKEN) {\n try {\n const { DiscordBot } = await import(\"./inputs/discord\");\n this._services.discordBot = new DiscordBot({\n token: env.DISCORD_BOT_TOKEN,\n clientId: env.DISCORD_CLIENT_ID || \"\",\n guildId: env.DISCORD_GUILD_ID,\n allowedUserIds: env.DISCORD_ALLOWED_USER_IDS?.split(\",\") || [],\n allowedRoleIds: env.DISCORD_ALLOWED_ROLE_IDS?.split(\",\") || [],\n });\n await this._services.discordBot.start();\n console.log(\"[Discord] Bot started\");\n } catch (err: any) {\n console.warn(\"[Discord] Failed to start bot:\", err.message);\n this._services.discordBot = null;\n }\n }\n\n // Start Slack bot\n if (services.slack && env.SLACK_BOT_TOKEN && env.SLACK_SIGNING_SECRET) {\n try {\n const { SlackBot } = await import(\"./inputs/slack\");\n this._services.slackBot = new SlackBot({\n token: env.SLACK_BOT_TOKEN,\n signingSecret: env.SLACK_SIGNING_SECRET,\n appToken: env.SLACK_APP_TOKEN,\n socketMode: env.SLACK_SOCKET_MODE,\n port: parseInt(String(env.SLACK_PORT) || \"3000\"),\n allowedUserIds: env.SLACK_ALLOWED_USER_IDS?.split(\",\") || [],\n allowedChannelIds: env.SLACK_ALLOWED_CHANNEL_IDS?.split(\",\") || [],\n });\n await this._services.slackBot.start();\n console.log(\"[Slack] Bot started\");\n } catch (err: any) {\n console.warn(\"[Slack] Failed to start bot:\", err.message);\n this._services.slackBot = null;\n }\n }\n\n // Start WhatsApp bot\n if (services.whatsapp && env.WHATSAPP_ENABLED) {\n try {\n const { WhatsAppBot } = await import(\"./inputs/whatsapp\");\n this._services.whatsappBot = new WhatsAppBot({\n authDir: env.WHATSAPP_AUTH_DIR,\n allowedNumbers:\n env.WHATSAPP_ALLOWED_NUMBERS?.split(\",\").filter(Boolean) || [],\n printQR: true,\n });\n await this._services.whatsappBot.start();\n console.log(\"[WhatsApp] Bot started\");\n } catch (err: any) {\n console.warn(\"[WhatsApp] Failed to start bot:\", err.message);\n this._services.whatsappBot = null;\n }\n }\n\n // Start Signal bot\n if (services.signal && env.SIGNAL_ENABLED && env.SIGNAL_PHONE_NUMBER) {\n try {\n const { SignalBot } = await import(\"./inputs/signal\");\n this._services.signalBot = new SignalBot({\n phoneNumber: env.SIGNAL_PHONE_NUMBER,\n signalCliPath: env.SIGNAL_CLI_PATH,\n allowedNumbers:\n env.SIGNAL_ALLOWED_NUMBERS?.split(\",\").filter(Boolean) || [],\n });\n await this._services.signalBot.start();\n console.log(\"[Signal] Bot started\");\n } catch (err: any) {\n console.warn(\"[Signal] Failed to start bot:\", err.message);\n this._services.signalBot = null;\n }\n }\n\n // Start iMessage bot\n if (services.imessage && env.IMESSAGE_ENABLED) {\n try {\n const { iMessageBot } = await import(\"./inputs/imessage\");\n this._services.imessageBot = new iMessageBot({\n mode: env.IMESSAGE_MODE as \"bluebubbles\" | \"applescript\",\n serverUrl: env.IMESSAGE_BLUEBUBBLES_URL,\n password: env.IMESSAGE_BLUEBUBBLES_PASSWORD,\n allowedNumbers:\n env.IMESSAGE_ALLOWED_NUMBERS?.split(\",\").filter(Boolean) || [],\n });\n await this._services.imessageBot.start();\n console.log(\"[iMessage] Bot started\");\n } catch (err: any) {\n console.warn(\"[iMessage] Failed to start bot:\", err.message);\n this._services.imessageBot = null;\n }\n }\n\n this._running = true;\n }\n\n async stop(): Promise<void> {\n if (!this._running) return;\n\n console.log(\"Shutting down OpenSentinel...\");\n\n const { stopWorker } = await import(\"./core/scheduler\");\n stopWorker();\n\n if (this._services.mcpRegistry) {\n await this._services.mcpRegistry.shutdown();\n }\n if (this._services.telegramBot) {\n await this._services.telegramBot.stop();\n }\n if (this._services.discordBot) {\n await this._services.discordBot.stop();\n }\n if (this._services.slackBot) {\n await this._services.slackBot.stop();\n }\n if (this._services.whatsappBot) {\n await this._services.whatsappBot.stop();\n }\n if (this._services.signalBot) {\n await this._services.signalBot.stop();\n }\n if (this._services.imessageBot) {\n await this._services.imessageBot.stop();\n }\n if (this._services.server) {\n this._services.server.stop();\n }\n\n this._running = false;\n console.log(\"OpenSentinel stopped.\");\n }\n\n /** Send a simple chat message (no tools) */\n async chat(\n messages: Message[],\n systemPrompt?: string\n ): Promise<BrainResponse> {\n return chat(messages, systemPrompt);\n }\n\n /** Send a chat message with tool execution */\n async chatWithTools(\n messages: Message[],\n userId?: string,\n onToolUse?: (toolName: string, input: unknown) => void\n ): Promise<BrainResponse> {\n return chatWithTools(messages, userId, onToolUse);\n }\n\n get running(): boolean {\n return this._running;\n }\n\n get services() {\n return { ...this._services };\n }\n}\n"],"mappings":"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","names":["createBot","DiscordBot","SlackBot","WhatsAppBot","SignalBot","iMessageBot"]}
@@ -0,0 +1,152 @@
1
+ import {
2
+ BaseAdapter
3
+ } from "./chunk-7WQO5J2M.js";
4
+ import "./chunk-PLDDJCW6.js";
5
+
6
+ // src/core/adapters/adapters/mailchimp.ts
7
+ import { z } from "zod";
8
+ var MailchimpAdapter = class extends BaseAdapter {
9
+ metadata = {
10
+ name: "Mailchimp",
11
+ slug: "mailchimp",
12
+ displayName: "Mailchimp",
13
+ description: "Manage subscribers, create and send email campaigns with Mailchimp",
14
+ category: "marketing",
15
+ authType: "api_key"
16
+ };
17
+ async authenticate(credentials) {
18
+ const apiKey = credentials.apiKey || credentials.accessToken || "";
19
+ const dc = apiKey.includes("-") ? apiKey.split("-").pop() : credentials.dc || "us1";
20
+ return {
21
+ accessToken: apiKey,
22
+ metadata: {
23
+ dc,
24
+ defaultListId: credentials.defaultListId
25
+ }
26
+ };
27
+ }
28
+ getBaseUrl(auth) {
29
+ const dc = auth.metadata?.dc || "us1";
30
+ return `https://${dc}.api.mailchimp.com/3.0`;
31
+ }
32
+ actions = {
33
+ addSubscriber: {
34
+ name: "Add Subscriber",
35
+ description: "Add or update a subscriber in a Mailchimp audience",
36
+ inputSchema: z.object({
37
+ listId: z.string().optional(),
38
+ email: z.string().email(),
39
+ firstName: z.string().optional(),
40
+ lastName: z.string().optional(),
41
+ status: z.enum(["subscribed", "unsubscribed", "cleaned", "pending"]).optional().default("subscribed"),
42
+ tags: z.array(z.string()).optional(),
43
+ mergeFields: z.record(z.string()).optional()
44
+ }),
45
+ outputSchema: z.object({ id: z.string(), email_address: z.string(), status: z.string(), list_id: z.string() }),
46
+ execute: async (input, auth) => {
47
+ const { listId, email, firstName, lastName, status, tags, mergeFields } = input;
48
+ const baseUrl = this.getBaseUrl(auth);
49
+ const audienceId = listId || auth.metadata?.defaultListId || "";
50
+ const member = {
51
+ email_address: email,
52
+ status,
53
+ merge_fields: {
54
+ ...mergeFields || {},
55
+ ...firstName ? { FNAME: firstName } : {},
56
+ ...lastName ? { LNAME: lastName } : {}
57
+ }
58
+ };
59
+ if (tags) member.tags = tags.map((tag) => ({ name: tag, status: "active" }));
60
+ const response = await this.makeRequest(
61
+ `${baseUrl}/lists/${audienceId}/members`,
62
+ { method: "POST", body: JSON.stringify(member), auth }
63
+ );
64
+ return response.json();
65
+ }
66
+ },
67
+ createCampaign: {
68
+ name: "Create Campaign",
69
+ description: "Create a new email campaign in Mailchimp",
70
+ inputSchema: z.object({
71
+ listId: z.string().optional(),
72
+ subject: z.string(),
73
+ previewText: z.string().optional(),
74
+ fromName: z.string(),
75
+ replyTo: z.string().email(),
76
+ templateId: z.number().optional(),
77
+ htmlContent: z.string().optional(),
78
+ type: z.enum(["regular", "plaintext", "absplit"]).optional().default("regular")
79
+ }),
80
+ outputSchema: z.object({ id: z.string(), web_id: z.number(), status: z.string(), archive_url: z.string() }),
81
+ execute: async (input, auth) => {
82
+ const { listId, subject, previewText, fromName, replyTo, templateId, htmlContent, type } = input;
83
+ const baseUrl = this.getBaseUrl(auth);
84
+ const audienceId = listId || auth.metadata?.defaultListId || "";
85
+ const campaign = {
86
+ type,
87
+ recipients: { list_id: audienceId },
88
+ settings: {
89
+ subject_line: subject,
90
+ preview_text: previewText || "",
91
+ from_name: fromName,
92
+ reply_to: replyTo,
93
+ template_id: templateId
94
+ }
95
+ };
96
+ const response = await this.makeRequest(
97
+ `${baseUrl}/campaigns`,
98
+ { method: "POST", body: JSON.stringify(campaign), auth }
99
+ );
100
+ const result = await response.json();
101
+ if (htmlContent && result.id) {
102
+ await this.makeRequest(
103
+ `${baseUrl}/campaigns/${result.id}/content`,
104
+ { method: "PUT", body: JSON.stringify({ html: htmlContent }), auth }
105
+ );
106
+ }
107
+ return result;
108
+ }
109
+ },
110
+ sendCampaign: {
111
+ name: "Send Campaign",
112
+ description: "Send an existing Mailchimp campaign",
113
+ inputSchema: z.object({
114
+ campaignId: z.string()
115
+ }),
116
+ outputSchema: z.object({ complete: z.boolean(), campaignId: z.string() }),
117
+ execute: async (input, auth) => {
118
+ const { campaignId } = input;
119
+ const baseUrl = this.getBaseUrl(auth);
120
+ await this.makeRequest(
121
+ `${baseUrl}/campaigns/${campaignId}/actions/send`,
122
+ { method: "POST", auth }
123
+ );
124
+ return { complete: true, campaignId };
125
+ }
126
+ }
127
+ };
128
+ triggers = {
129
+ onNewSubscriber: {
130
+ name: "New Subscriber",
131
+ description: "Triggered when a new subscriber is added to an audience",
132
+ outputSchema: z.object({ email: z.string(), firstName: z.string().optional(), lastName: z.string().optional(), listId: z.string() }),
133
+ subscribe: async (_config, _auth) => {
134
+ },
135
+ unsubscribe: async (_config, _auth) => {
136
+ }
137
+ },
138
+ onCampaignSent: {
139
+ name: "Campaign Sent",
140
+ description: "Triggered when a campaign is sent",
141
+ outputSchema: z.object({ campaignId: z.string(), subject: z.string(), sendTime: z.string(), emailsSent: z.number() }),
142
+ subscribe: async (_config, _auth) => {
143
+ },
144
+ unsubscribe: async (_config, _auth) => {
145
+ }
146
+ }
147
+ };
148
+ };
149
+ export {
150
+ MailchimpAdapter
151
+ };
152
+ //# sourceMappingURL=mailchimp-KKNF6QJ7.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/core/adapters/adapters/mailchimp.ts"],"sourcesContent":["import { z } from \"zod\";\nimport { BaseAdapter } from \"../base-adapter\";\nimport type { AuthResult, ActionDefinition, TriggerDefinition, TriggerConfig } from \"../types\";\n\nexport class MailchimpAdapter extends BaseAdapter {\n metadata = {\n name: \"Mailchimp\",\n slug: \"mailchimp\",\n displayName: \"Mailchimp\",\n description: \"Manage subscribers, create and send email campaigns with Mailchimp\",\n category: \"marketing\",\n authType: \"api_key\" as const,\n };\n\n async authenticate(credentials: Record<string, string>): Promise<AuthResult> {\n const apiKey = credentials.apiKey || credentials.accessToken || \"\";\n const dc = apiKey.includes(\"-\") ? apiKey.split(\"-\").pop() : credentials.dc || \"us1\";\n return {\n accessToken: apiKey,\n metadata: {\n dc,\n defaultListId: credentials.defaultListId,\n },\n };\n }\n\n private getBaseUrl(auth: AuthResult): string {\n const dc = (auth.metadata?.dc as string) || \"us1\";\n return `https://${dc}.api.mailchimp.com/3.0`;\n }\n\n actions: Record<string, ActionDefinition> = {\n addSubscriber: {\n name: \"Add Subscriber\",\n description: \"Add or update a subscriber in a Mailchimp audience\",\n inputSchema: z.object({\n listId: z.string().optional(),\n email: z.string().email(),\n firstName: z.string().optional(),\n lastName: z.string().optional(),\n status: z.enum([\"subscribed\", \"unsubscribed\", \"cleaned\", \"pending\"]).optional().default(\"subscribed\"),\n tags: z.array(z.string()).optional(),\n mergeFields: z.record(z.string()).optional(),\n }),\n outputSchema: z.object({ id: z.string(), email_address: z.string(), status: z.string(), list_id: z.string() }),\n execute: async (input: unknown, auth: AuthResult) => {\n const { listId, email, firstName, lastName, status, tags, mergeFields } = input as {\n listId?: string; email: string; firstName?: string; lastName?: string;\n status: string; tags?: string[]; mergeFields?: Record<string, string>;\n };\n const baseUrl = this.getBaseUrl(auth);\n const audienceId = listId || (auth.metadata?.defaultListId as string) || \"\";\n const member: Record<string, unknown> = {\n email_address: email,\n status,\n merge_fields: {\n ...(mergeFields || {}),\n ...(firstName ? { FNAME: firstName } : {}),\n ...(lastName ? { LNAME: lastName } : {}),\n },\n };\n if (tags) member.tags = tags.map((tag) => ({ name: tag, status: \"active\" }));\n const response = await this.makeRequest(\n `${baseUrl}/lists/${audienceId}/members`,\n { method: \"POST\", body: JSON.stringify(member), auth }\n );\n return response.json();\n },\n },\n createCampaign: {\n name: \"Create Campaign\",\n description: \"Create a new email campaign in Mailchimp\",\n inputSchema: z.object({\n listId: z.string().optional(),\n subject: z.string(),\n previewText: z.string().optional(),\n fromName: z.string(),\n replyTo: z.string().email(),\n templateId: z.number().optional(),\n htmlContent: z.string().optional(),\n type: z.enum([\"regular\", \"plaintext\", \"absplit\"]).optional().default(\"regular\"),\n }),\n outputSchema: z.object({ id: z.string(), web_id: z.number(), status: z.string(), archive_url: z.string() }),\n execute: async (input: unknown, auth: AuthResult) => {\n const { listId, subject, previewText, fromName, replyTo, templateId, htmlContent, type } = input as {\n listId?: string; subject: string; previewText?: string; fromName: string;\n replyTo: string; templateId?: number; htmlContent?: string; type: string;\n };\n const baseUrl = this.getBaseUrl(auth);\n const audienceId = listId || (auth.metadata?.defaultListId as string) || \"\";\n const campaign = {\n type,\n recipients: { list_id: audienceId },\n settings: {\n subject_line: subject,\n preview_text: previewText || \"\",\n from_name: fromName,\n reply_to: replyTo,\n template_id: templateId,\n },\n };\n const response = await this.makeRequest(\n `${baseUrl}/campaigns`,\n { method: \"POST\", body: JSON.stringify(campaign), auth }\n );\n const result = await response.json() as { id: string; web_id: number; status: string; archive_url: string };\n if (htmlContent && result.id) {\n await this.makeRequest(\n `${baseUrl}/campaigns/${result.id}/content`,\n { method: \"PUT\", body: JSON.stringify({ html: htmlContent }), auth }\n );\n }\n return result;\n },\n },\n sendCampaign: {\n name: \"Send Campaign\",\n description: \"Send an existing Mailchimp campaign\",\n inputSchema: z.object({\n campaignId: z.string(),\n }),\n outputSchema: z.object({ complete: z.boolean(), campaignId: z.string() }),\n execute: async (input: unknown, auth: AuthResult) => {\n const { campaignId } = input as { campaignId: string };\n const baseUrl = this.getBaseUrl(auth);\n await this.makeRequest(\n `${baseUrl}/campaigns/${campaignId}/actions/send`,\n { method: \"POST\", auth }\n );\n return { complete: true, campaignId };\n },\n },\n };\n\n triggers: Record<string, TriggerDefinition> = {\n onNewSubscriber: {\n name: \"New Subscriber\",\n description: \"Triggered when a new subscriber is added to an audience\",\n outputSchema: z.object({ email: z.string(), firstName: z.string().optional(), lastName: z.string().optional(), listId: z.string() }),\n subscribe: async (_config: TriggerConfig, _auth: AuthResult) => {},\n unsubscribe: async (_config: TriggerConfig, _auth: AuthResult) => {},\n },\n onCampaignSent: {\n name: \"Campaign Sent\",\n description: \"Triggered when a campaign is sent\",\n outputSchema: z.object({ campaignId: z.string(), subject: z.string(), sendTime: z.string(), emailsSent: z.number() }),\n subscribe: async (_config: TriggerConfig, _auth: AuthResult) => {},\n unsubscribe: async (_config: TriggerConfig, _auth: AuthResult) => {},\n },\n };\n}\n"],"mappings":"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","names":[]}