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.
- package/LICENSE +21 -0
- package/README.md +283 -0
- package/dist/bot-KJ26BG56.js +15 -0
- package/dist/bot-KJ26BG56.js.map +1 -0
- package/dist/charts-MMXM6BWW.js +241 -0
- package/dist/charts-MMXM6BWW.js.map +1 -0
- package/dist/chunk-4LVWXUNC.js +1079 -0
- package/dist/chunk-4LVWXUNC.js.map +1 -0
- package/dist/chunk-4TG2IG5K.js +5249 -0
- package/dist/chunk-4TG2IG5K.js.map +1 -0
- package/dist/chunk-6DRDKB45.js +251 -0
- package/dist/chunk-6DRDKB45.js.map +1 -0
- package/dist/chunk-6SNHU3CY.js +123 -0
- package/dist/chunk-6SNHU3CY.js.map +1 -0
- package/dist/chunk-CI6Q63MM.js +1613 -0
- package/dist/chunk-CI6Q63MM.js.map +1 -0
- package/dist/chunk-CQ4JURG7.js +57 -0
- package/dist/chunk-CQ4JURG7.js.map +1 -0
- package/dist/chunk-F6QUZQGI.js +51 -0
- package/dist/chunk-F6QUZQGI.js.map +1 -0
- package/dist/chunk-GK3E2I7A.js +216 -0
- package/dist/chunk-GK3E2I7A.js.map +1 -0
- package/dist/chunk-GUBEEYDW.js +211 -0
- package/dist/chunk-GUBEEYDW.js.map +1 -0
- package/dist/chunk-GVJVEWHI.js +29 -0
- package/dist/chunk-GVJVEWHI.js.map +1 -0
- package/dist/chunk-HH2HBTQM.js +806 -0
- package/dist/chunk-HH2HBTQM.js.map +1 -0
- package/dist/chunk-JXUP2X7V.js +129 -0
- package/dist/chunk-JXUP2X7V.js.map +1 -0
- package/dist/chunk-KHNYJY2Z.js +178 -0
- package/dist/chunk-KHNYJY2Z.js.map +1 -0
- package/dist/chunk-L3F43VPB.js +652 -0
- package/dist/chunk-L3F43VPB.js.map +1 -0
- package/dist/chunk-L3PDU3XN.js +803 -0
- package/dist/chunk-L3PDU3XN.js.map +1 -0
- package/dist/chunk-NSBPE2FW.js +17 -0
- package/dist/chunk-NSBPE2FW.js.map +1 -0
- package/dist/cli.d.ts +1 -0
- package/dist/cli.js +52 -0
- package/dist/cli.js.map +1 -0
- package/dist/commands/setup.d.ts +9 -0
- package/dist/commands/setup.js +374 -0
- package/dist/commands/setup.js.map +1 -0
- package/dist/commands/start.d.ts +8 -0
- package/dist/commands/start.js +27 -0
- package/dist/commands/start.js.map +1 -0
- package/dist/commands/status.d.ts +8 -0
- package/dist/commands/status.js +57 -0
- package/dist/commands/status.js.map +1 -0
- package/dist/commands/stop.d.ts +8 -0
- package/dist/commands/stop.js +37 -0
- package/dist/commands/stop.js.map +1 -0
- package/dist/commands/utils.d.ts +50 -0
- package/dist/commands/utils.js +36 -0
- package/dist/commands/utils.js.map +1 -0
- package/dist/discord-ZOJFTVTB.js +49 -0
- package/dist/discord-ZOJFTVTB.js.map +1 -0
- package/dist/imessage-JFRB6EJ7.js +14 -0
- package/dist/imessage-JFRB6EJ7.js.map +1 -0
- package/dist/lib.d.ts +855 -0
- package/dist/lib.js +274 -0
- package/dist/lib.js.map +1 -0
- package/dist/mcp-LS7Q3Z5W.js +30 -0
- package/dist/mcp-LS7Q3Z5W.js.map +1 -0
- package/dist/scheduler-EZ7CZMCS.js +42 -0
- package/dist/scheduler-EZ7CZMCS.js.map +1 -0
- package/dist/signal-T3MCSULM.js +14 -0
- package/dist/signal-T3MCSULM.js.map +1 -0
- package/dist/slack-N2M4FHAJ.js +54 -0
- package/dist/slack-N2M4FHAJ.js.map +1 -0
- package/dist/src-K7GASHRH.js +430 -0
- package/dist/src-K7GASHRH.js.map +1 -0
- package/dist/tools-24GZHYRF.js +16 -0
- package/dist/tools-24GZHYRF.js.map +1 -0
- package/dist/whatsapp-VCRUPAO5.js +14 -0
- package/dist/whatsapp-VCRUPAO5.js.map +1 -0
- package/drizzle/0000_chilly_shinobi_shaw.sql +75 -0
- package/drizzle/0001_freezing_shape.sql +274 -0
- package/drizzle/meta/0000_snapshot.json +529 -0
- package/drizzle/meta/0001_snapshot.json +2576 -0
- package/drizzle/meta/_journal.json +20 -0
- 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
|
package/dist/lib.js.map
ADDED
|
@@ -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":[]}
|