opensentinel 2.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 (83) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +283 -0
  3. package/dist/bot-KJ26BG56.js +15 -0
  4. package/dist/bot-KJ26BG56.js.map +1 -0
  5. package/dist/charts-MMXM6BWW.js +241 -0
  6. package/dist/charts-MMXM6BWW.js.map +1 -0
  7. package/dist/chunk-4LVWXUNC.js +1079 -0
  8. package/dist/chunk-4LVWXUNC.js.map +1 -0
  9. package/dist/chunk-4TG2IG5K.js +5249 -0
  10. package/dist/chunk-4TG2IG5K.js.map +1 -0
  11. package/dist/chunk-6DRDKB45.js +251 -0
  12. package/dist/chunk-6DRDKB45.js.map +1 -0
  13. package/dist/chunk-6SNHU3CY.js +123 -0
  14. package/dist/chunk-6SNHU3CY.js.map +1 -0
  15. package/dist/chunk-CI6Q63MM.js +1613 -0
  16. package/dist/chunk-CI6Q63MM.js.map +1 -0
  17. package/dist/chunk-CQ4JURG7.js +57 -0
  18. package/dist/chunk-CQ4JURG7.js.map +1 -0
  19. package/dist/chunk-F6QUZQGI.js +51 -0
  20. package/dist/chunk-F6QUZQGI.js.map +1 -0
  21. package/dist/chunk-GK3E2I7A.js +216 -0
  22. package/dist/chunk-GK3E2I7A.js.map +1 -0
  23. package/dist/chunk-GUBEEYDW.js +211 -0
  24. package/dist/chunk-GUBEEYDW.js.map +1 -0
  25. package/dist/chunk-GVJVEWHI.js +29 -0
  26. package/dist/chunk-GVJVEWHI.js.map +1 -0
  27. package/dist/chunk-HH2HBTQM.js +806 -0
  28. package/dist/chunk-HH2HBTQM.js.map +1 -0
  29. package/dist/chunk-JXUP2X7V.js +129 -0
  30. package/dist/chunk-JXUP2X7V.js.map +1 -0
  31. package/dist/chunk-KHNYJY2Z.js +178 -0
  32. package/dist/chunk-KHNYJY2Z.js.map +1 -0
  33. package/dist/chunk-L3F43VPB.js +652 -0
  34. package/dist/chunk-L3F43VPB.js.map +1 -0
  35. package/dist/chunk-L3PDU3XN.js +803 -0
  36. package/dist/chunk-L3PDU3XN.js.map +1 -0
  37. package/dist/chunk-NSBPE2FW.js +17 -0
  38. package/dist/chunk-NSBPE2FW.js.map +1 -0
  39. package/dist/cli.d.ts +1 -0
  40. package/dist/cli.js +52 -0
  41. package/dist/cli.js.map +1 -0
  42. package/dist/commands/setup.d.ts +9 -0
  43. package/dist/commands/setup.js +374 -0
  44. package/dist/commands/setup.js.map +1 -0
  45. package/dist/commands/start.d.ts +8 -0
  46. package/dist/commands/start.js +27 -0
  47. package/dist/commands/start.js.map +1 -0
  48. package/dist/commands/status.d.ts +8 -0
  49. package/dist/commands/status.js +57 -0
  50. package/dist/commands/status.js.map +1 -0
  51. package/dist/commands/stop.d.ts +8 -0
  52. package/dist/commands/stop.js +37 -0
  53. package/dist/commands/stop.js.map +1 -0
  54. package/dist/commands/utils.d.ts +50 -0
  55. package/dist/commands/utils.js +36 -0
  56. package/dist/commands/utils.js.map +1 -0
  57. package/dist/discord-ZOJFTVTB.js +49 -0
  58. package/dist/discord-ZOJFTVTB.js.map +1 -0
  59. package/dist/imessage-JFRB6EJ7.js +14 -0
  60. package/dist/imessage-JFRB6EJ7.js.map +1 -0
  61. package/dist/lib.d.ts +855 -0
  62. package/dist/lib.js +274 -0
  63. package/dist/lib.js.map +1 -0
  64. package/dist/mcp-LS7Q3Z5W.js +30 -0
  65. package/dist/mcp-LS7Q3Z5W.js.map +1 -0
  66. package/dist/scheduler-EZ7CZMCS.js +42 -0
  67. package/dist/scheduler-EZ7CZMCS.js.map +1 -0
  68. package/dist/signal-T3MCSULM.js +14 -0
  69. package/dist/signal-T3MCSULM.js.map +1 -0
  70. package/dist/slack-N2M4FHAJ.js +54 -0
  71. package/dist/slack-N2M4FHAJ.js.map +1 -0
  72. package/dist/src-K7GASHRH.js +430 -0
  73. package/dist/src-K7GASHRH.js.map +1 -0
  74. package/dist/tools-24GZHYRF.js +16 -0
  75. package/dist/tools-24GZHYRF.js.map +1 -0
  76. package/dist/whatsapp-VCRUPAO5.js +14 -0
  77. package/dist/whatsapp-VCRUPAO5.js.map +1 -0
  78. package/drizzle/0000_chilly_shinobi_shaw.sql +75 -0
  79. package/drizzle/0001_freezing_shape.sql +274 -0
  80. package/drizzle/meta/0000_snapshot.json +529 -0
  81. package/drizzle/meta/0001_snapshot.json +2576 -0
  82. package/drizzle/meta/_journal.json +20 -0
  83. package/package.json +98 -0
package/dist/lib.js ADDED
@@ -0,0 +1,274 @@
1
+ import {
2
+ app
3
+ } from "./chunk-KHNYJY2Z.js";
4
+ import {
5
+ iMessageBot
6
+ } from "./chunk-GK3E2I7A.js";
7
+ import {
8
+ createBot
9
+ } from "./chunk-6DRDKB45.js";
10
+ import {
11
+ DiscordBot
12
+ } from "./chunk-HH2HBTQM.js";
13
+ import "./chunk-F6QUZQGI.js";
14
+ import {
15
+ SlackBot
16
+ } from "./chunk-L3PDU3XN.js";
17
+ import "./chunk-GVJVEWHI.js";
18
+ import {
19
+ cancelTask,
20
+ generateBriefing,
21
+ scheduleReminder,
22
+ scheduleTask
23
+ } from "./chunk-4LVWXUNC.js";
24
+ import {
25
+ WhatsAppBot
26
+ } from "./chunk-6SNHU3CY.js";
27
+ import {
28
+ SignalBot
29
+ } from "./chunk-JXUP2X7V.js";
30
+ import {
31
+ SYSTEM_PROMPT,
32
+ buildMemoryContext,
33
+ chat,
34
+ chatWithTools,
35
+ extractMemories,
36
+ generateEmbedding,
37
+ searchMemories,
38
+ storeMemory,
39
+ streamChat,
40
+ streamChatWithTools
41
+ } from "./chunk-CI6Q63MM.js";
42
+ import {
43
+ TOOLS,
44
+ configure,
45
+ db,
46
+ env,
47
+ executeTool
48
+ } from "./chunk-4TG2IG5K.js";
49
+ import "./chunk-CQ4JURG7.js";
50
+ import "./chunk-L3F43VPB.js";
51
+ import "./chunk-NSBPE2FW.js";
52
+
53
+ // src/app.ts
54
+ var OpenSentinel = class {
55
+ config;
56
+ _running = false;
57
+ _services = {};
58
+ constructor(config) {
59
+ this.config = config;
60
+ configure({
61
+ CLAUDE_API_KEY: config.claudeApiKey,
62
+ ...config.env || {}
63
+ });
64
+ }
65
+ async start() {
66
+ if (this._running) return;
67
+ const services = this.config.services || {};
68
+ if (services.telegram && env.TELEGRAM_BOT_TOKEN) {
69
+ const { createBot: createBot2 } = await import("./bot-KJ26BG56.js");
70
+ this._services.telegramBot = createBot2();
71
+ this._services.telegramBot.start({
72
+ onStart: (botInfo) => {
73
+ console.log(`[Telegram] Bot started as @${botInfo.username}`);
74
+ }
75
+ });
76
+ }
77
+ if (services.scheduler) {
78
+ try {
79
+ const { startWorker } = await import("./scheduler-EZ7CZMCS.js");
80
+ startWorker(async (task) => {
81
+ console.log(`[Scheduler] Executing task: ${task.type}`);
82
+ if (task.chatId && task.message && this._services.telegramBot) {
83
+ try {
84
+ await this._services.telegramBot.api.sendMessage(
85
+ task.chatId,
86
+ `Reminder: ${task.message}`
87
+ );
88
+ } catch (err) {
89
+ console.error("[Scheduler] Failed to send reminder:", err);
90
+ }
91
+ }
92
+ });
93
+ } catch (err) {
94
+ console.warn("[Scheduler] Could not start worker:", err);
95
+ }
96
+ }
97
+ if (services.mcp !== false && env.MCP_ENABLED) {
98
+ try {
99
+ const { initMCPRegistry, getMCPToolSummary } = await import("./mcp-LS7Q3Z5W.js");
100
+ const { setMCPRegistry } = await import("./tools-24GZHYRF.js");
101
+ this._services.mcpRegistry = await initMCPRegistry(env.MCP_CONFIG_PATH);
102
+ setMCPRegistry(this._services.mcpRegistry);
103
+ if (this._services.mcpRegistry.connectedCount > 0) {
104
+ console.log(
105
+ `[MCP] Connected to ${this._services.mcpRegistry.connectedCount} server(s), ${this._services.mcpRegistry.totalToolCount} tools available`
106
+ );
107
+ console.log(getMCPToolSummary(this._services.mcpRegistry));
108
+ }
109
+ } catch (err) {
110
+ console.warn("[MCP] Failed to initialize:", err);
111
+ this._services.mcpRegistry = null;
112
+ }
113
+ }
114
+ if (services.discord && env.DISCORD_BOT_TOKEN) {
115
+ try {
116
+ const { DiscordBot: DiscordBot2 } = await import("./discord-ZOJFTVTB.js");
117
+ this._services.discordBot = new DiscordBot2({
118
+ token: env.DISCORD_BOT_TOKEN,
119
+ clientId: env.DISCORD_CLIENT_ID || "",
120
+ guildId: env.DISCORD_GUILD_ID,
121
+ allowedUserIds: env.DISCORD_ALLOWED_USER_IDS?.split(",") || [],
122
+ allowedRoleIds: env.DISCORD_ALLOWED_ROLE_IDS?.split(",") || []
123
+ });
124
+ await this._services.discordBot.start();
125
+ console.log("[Discord] Bot started");
126
+ } catch (err) {
127
+ console.warn("[Discord] Failed to start bot:", err.message);
128
+ this._services.discordBot = null;
129
+ }
130
+ }
131
+ if (services.slack && env.SLACK_BOT_TOKEN && env.SLACK_SIGNING_SECRET) {
132
+ try {
133
+ const { SlackBot: SlackBot2 } = await import("./slack-N2M4FHAJ.js");
134
+ this._services.slackBot = new SlackBot2({
135
+ token: env.SLACK_BOT_TOKEN,
136
+ signingSecret: env.SLACK_SIGNING_SECRET,
137
+ appToken: env.SLACK_APP_TOKEN,
138
+ socketMode: env.SLACK_SOCKET_MODE,
139
+ port: parseInt(String(env.SLACK_PORT) || "3000"),
140
+ allowedUserIds: env.SLACK_ALLOWED_USER_IDS?.split(",") || [],
141
+ allowedChannelIds: env.SLACK_ALLOWED_CHANNEL_IDS?.split(",") || []
142
+ });
143
+ await this._services.slackBot.start();
144
+ console.log("[Slack] Bot started");
145
+ } catch (err) {
146
+ console.warn("[Slack] Failed to start bot:", err.message);
147
+ this._services.slackBot = null;
148
+ }
149
+ }
150
+ if (services.whatsapp && env.WHATSAPP_ENABLED) {
151
+ try {
152
+ const { WhatsAppBot: WhatsAppBot2 } = await import("./whatsapp-VCRUPAO5.js");
153
+ this._services.whatsappBot = new WhatsAppBot2({
154
+ authDir: env.WHATSAPP_AUTH_DIR,
155
+ allowedNumbers: env.WHATSAPP_ALLOWED_NUMBERS?.split(",").filter(Boolean) || [],
156
+ printQR: true
157
+ });
158
+ await this._services.whatsappBot.start();
159
+ console.log("[WhatsApp] Bot started");
160
+ } catch (err) {
161
+ console.warn("[WhatsApp] Failed to start bot:", err.message);
162
+ this._services.whatsappBot = null;
163
+ }
164
+ }
165
+ if (services.signal && env.SIGNAL_ENABLED && env.SIGNAL_PHONE_NUMBER) {
166
+ try {
167
+ const { SignalBot: SignalBot2 } = await import("./signal-T3MCSULM.js");
168
+ this._services.signalBot = new SignalBot2({
169
+ phoneNumber: env.SIGNAL_PHONE_NUMBER,
170
+ signalCliPath: env.SIGNAL_CLI_PATH,
171
+ allowedNumbers: env.SIGNAL_ALLOWED_NUMBERS?.split(",").filter(Boolean) || []
172
+ });
173
+ await this._services.signalBot.start();
174
+ console.log("[Signal] Bot started");
175
+ } catch (err) {
176
+ console.warn("[Signal] Failed to start bot:", err.message);
177
+ this._services.signalBot = null;
178
+ }
179
+ }
180
+ if (services.imessage && env.IMESSAGE_ENABLED) {
181
+ try {
182
+ const { iMessageBot: iMessageBot2 } = await import("./imessage-JFRB6EJ7.js");
183
+ this._services.imessageBot = new iMessageBot2({
184
+ mode: env.IMESSAGE_MODE,
185
+ serverUrl: env.IMESSAGE_BLUEBUBBLES_URL,
186
+ password: env.IMESSAGE_BLUEBUBBLES_PASSWORD,
187
+ allowedNumbers: env.IMESSAGE_ALLOWED_NUMBERS?.split(",").filter(Boolean) || []
188
+ });
189
+ await this._services.imessageBot.start();
190
+ console.log("[iMessage] Bot started");
191
+ } catch (err) {
192
+ console.warn("[iMessage] Failed to start bot:", err.message);
193
+ this._services.imessageBot = null;
194
+ }
195
+ }
196
+ this._running = true;
197
+ }
198
+ async stop() {
199
+ if (!this._running) return;
200
+ console.log("Shutting down OpenSentinel...");
201
+ const { stopWorker } = await import("./scheduler-EZ7CZMCS.js");
202
+ stopWorker();
203
+ if (this._services.mcpRegistry) {
204
+ await this._services.mcpRegistry.shutdown();
205
+ }
206
+ if (this._services.telegramBot) {
207
+ await this._services.telegramBot.stop();
208
+ }
209
+ if (this._services.discordBot) {
210
+ await this._services.discordBot.stop();
211
+ }
212
+ if (this._services.slackBot) {
213
+ await this._services.slackBot.stop();
214
+ }
215
+ if (this._services.whatsappBot) {
216
+ await this._services.whatsappBot.stop();
217
+ }
218
+ if (this._services.signalBot) {
219
+ await this._services.signalBot.stop();
220
+ }
221
+ if (this._services.imessageBot) {
222
+ await this._services.imessageBot.stop();
223
+ }
224
+ if (this._services.server) {
225
+ this._services.server.stop();
226
+ }
227
+ this._running = false;
228
+ console.log("OpenSentinel stopped.");
229
+ }
230
+ /** Send a simple chat message (no tools) */
231
+ async chat(messages, systemPrompt) {
232
+ return chat(messages, systemPrompt);
233
+ }
234
+ /** Send a chat message with tool execution */
235
+ async chatWithTools(messages, userId, onToolUse) {
236
+ return chatWithTools(messages, userId, onToolUse);
237
+ }
238
+ get running() {
239
+ return this._running;
240
+ }
241
+ get services() {
242
+ return { ...this._services };
243
+ }
244
+ };
245
+ export {
246
+ DiscordBot,
247
+ OpenSentinel,
248
+ SYSTEM_PROMPT,
249
+ SignalBot,
250
+ SlackBot,
251
+ TOOLS,
252
+ WhatsAppBot,
253
+ app as apiApp,
254
+ buildMemoryContext,
255
+ cancelTask,
256
+ chat,
257
+ chatWithTools,
258
+ configure,
259
+ createBot as createTelegramBot,
260
+ db,
261
+ env,
262
+ executeTool,
263
+ extractMemories,
264
+ generateBriefing,
265
+ generateEmbedding,
266
+ iMessageBot,
267
+ scheduleReminder,
268
+ scheduleTask,
269
+ searchMemories,
270
+ storeMemory,
271
+ streamChat,
272
+ streamChatWithTools
273
+ };
274
+ //# sourceMappingURL=lib.js.map
@@ -0,0 +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"]}
@@ -0,0 +1,30 @@
1
+ import {
2
+ MCPClient,
3
+ MCPRegistry,
4
+ createMCPToolName,
5
+ executeMCPTool,
6
+ findMCPTool,
7
+ getMCPToolSummary,
8
+ initMCPRegistry,
9
+ isMCPTool,
10
+ loadMCPConfig,
11
+ mcpToolToAnthropicTool,
12
+ mcpToolsToAnthropicTools,
13
+ parseMCPToolName
14
+ } from "./chunk-L3F43VPB.js";
15
+ import "./chunk-NSBPE2FW.js";
16
+ export {
17
+ MCPClient,
18
+ MCPRegistry,
19
+ createMCPToolName,
20
+ executeMCPTool,
21
+ findMCPTool,
22
+ getMCPToolSummary,
23
+ initMCPRegistry,
24
+ isMCPTool,
25
+ loadMCPConfig,
26
+ mcpToolToAnthropicTool,
27
+ mcpToolsToAnthropicTools,
28
+ parseMCPToolName
29
+ };
30
+ //# sourceMappingURL=mcp-LS7Q3Z5W.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
@@ -0,0 +1,42 @@
1
+ import {
2
+ cancelTask,
3
+ connection,
4
+ generateBriefing,
5
+ getQueueStats,
6
+ initializeScheduler,
7
+ maintenanceQueue,
8
+ scheduleRecurring,
9
+ scheduleReminder,
10
+ scheduleTask,
11
+ scheduleUserMaintenance,
12
+ shutdownScheduler,
13
+ startMaintenanceWorker,
14
+ startWorker,
15
+ stopMaintenanceWorker,
16
+ stopWorker,
17
+ taskQueue
18
+ } from "./chunk-4LVWXUNC.js";
19
+ import "./chunk-CI6Q63MM.js";
20
+ import "./chunk-4TG2IG5K.js";
21
+ import "./chunk-CQ4JURG7.js";
22
+ import "./chunk-L3F43VPB.js";
23
+ import "./chunk-NSBPE2FW.js";
24
+ export {
25
+ cancelTask,
26
+ connection,
27
+ generateBriefing,
28
+ getQueueStats,
29
+ initializeScheduler,
30
+ maintenanceQueue,
31
+ scheduleRecurring,
32
+ scheduleReminder,
33
+ scheduleTask,
34
+ scheduleUserMaintenance,
35
+ shutdownScheduler,
36
+ startMaintenanceWorker,
37
+ startWorker,
38
+ stopMaintenanceWorker,
39
+ stopWorker,
40
+ taskQueue
41
+ };
42
+ //# sourceMappingURL=scheduler-EZ7CZMCS.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
@@ -0,0 +1,14 @@
1
+ import {
2
+ SignalBot,
3
+ signal_default
4
+ } from "./chunk-JXUP2X7V.js";
5
+ import "./chunk-CI6Q63MM.js";
6
+ import "./chunk-4TG2IG5K.js";
7
+ import "./chunk-CQ4JURG7.js";
8
+ import "./chunk-L3F43VPB.js";
9
+ import "./chunk-NSBPE2FW.js";
10
+ export {
11
+ SignalBot,
12
+ signal_default as default
13
+ };
14
+ //# sourceMappingURL=signal-T3MCSULM.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
@@ -0,0 +1,54 @@
1
+ import {
2
+ SlackBot,
3
+ addToSession,
4
+ askCommand,
5
+ chatCommand,
6
+ clearCommand,
7
+ clearSession,
8
+ createErrorBlocks,
9
+ createSlackBot,
10
+ createSuccessBlocks,
11
+ formatAsBlocks,
12
+ getCommand,
13
+ getCommandNames,
14
+ getSession,
15
+ helpCommand,
16
+ mainCommand,
17
+ remindCommand,
18
+ sessions,
19
+ slack_default,
20
+ slashCommands,
21
+ splitMessage,
22
+ statusCommand
23
+ } from "./chunk-L3PDU3XN.js";
24
+ import "./chunk-GVJVEWHI.js";
25
+ import "./chunk-4LVWXUNC.js";
26
+ import "./chunk-CI6Q63MM.js";
27
+ import "./chunk-4TG2IG5K.js";
28
+ import "./chunk-CQ4JURG7.js";
29
+ import "./chunk-L3F43VPB.js";
30
+ import "./chunk-NSBPE2FW.js";
31
+ export {
32
+ SlackBot,
33
+ addToSession,
34
+ askCommand,
35
+ chatCommand,
36
+ clearCommand,
37
+ clearSession,
38
+ createErrorBlocks,
39
+ createSlackBot,
40
+ createSuccessBlocks,
41
+ slack_default as default,
42
+ formatAsBlocks,
43
+ getCommand,
44
+ getCommandNames,
45
+ getSession,
46
+ helpCommand,
47
+ mainCommand,
48
+ remindCommand,
49
+ sessions,
50
+ slashCommands,
51
+ splitMessage,
52
+ statusCommand
53
+ };
54
+ //# sourceMappingURL=slack-N2M4FHAJ.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}