@timmeck/brain-core 2.36.39 → 2.36.40

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/dist/index.d.ts CHANGED
@@ -241,3 +241,5 @@ export { CheckpointManager, runCheckpointMigration } from './checkpoint/index.js
241
241
  export type { Checkpoint, CheckpointSummary, CheckpointManagerStatus } from './checkpoint/index.js';
242
242
  export { TraceCollector, runTraceMigration } from './observability/index.js';
243
243
  export type { Trace, Span, TraceTree, TraceStats, TraceListOptions, TraceCollectorStatus } from './observability/index.js';
244
+ export { MessageRouter, TelegramBot, DiscordBot } from './messaging/index.js';
245
+ export type { IncomingMessage, OutgoingResponse, MessageRouterConfig, MessageRouterStatus, TelegramBotConfig, TelegramBotStatus, DiscordBotConfig, DiscordBotStatus, } from './messaging/index.js';
package/dist/index.js CHANGED
@@ -209,4 +209,6 @@ export { ActiveLearner, runActiveLearningMigration } from './active-learning/ind
209
209
  export { CheckpointManager, runCheckpointMigration } from './checkpoint/index.js';
210
210
  // ── Observability / Tracing ─────────────────────────────────
211
211
  export { TraceCollector, runTraceMigration } from './observability/index.js';
212
+ // ── Messaging (Bidirectional Bots) ──────────────────────────
213
+ export { MessageRouter, TelegramBot, DiscordBot } from './messaging/index.js';
212
214
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,51 @@
1
+ /**
2
+ * Discord Bot — Bidirektionaler Message-Handler
3
+ *
4
+ * Empfängt Nachrichten via discord.js Gateway, routet sie durch
5
+ * den MessageRouter und sendet die Antwort zurück.
6
+ *
7
+ * Voraussetzungen:
8
+ * npm install discord.js (optional dependency)
9
+ * DISCORD_BOT_TOKEN in .env
10
+ * DISCORD_CHANNEL_ID in .env (optional: beschränkt auf einen Channel)
11
+ */
12
+ import type { MessageRouter } from './message-router.js';
13
+ export interface DiscordBotConfig {
14
+ botToken?: string;
15
+ /** If set, only respond in this channel. */
16
+ channelId?: string;
17
+ /** Allowed user IDs (if empty, all allowed). */
18
+ allowedUsers?: string[];
19
+ /** Only respond when mentioned or prefixed. Default: false */
20
+ mentionOnly?: boolean;
21
+ }
22
+ export interface DiscordBotStatus {
23
+ running: boolean;
24
+ messagesReceived: number;
25
+ messagesSent: number;
26
+ errors: number;
27
+ startedAt: number | null;
28
+ guilds: number;
29
+ }
30
+ export declare class DiscordBot {
31
+ private readonly log;
32
+ private readonly botToken;
33
+ private readonly channelId;
34
+ private readonly allowedUsers;
35
+ private readonly mentionOnly;
36
+ private client;
37
+ private router;
38
+ private running;
39
+ private stats;
40
+ constructor(config?: DiscordBotConfig);
41
+ /** Set the message router for dispatching incoming messages. */
42
+ setRouter(router: MessageRouter): void;
43
+ /** Check if Discord bot can start. */
44
+ isConfigured(): boolean;
45
+ /** Start listening for messages. */
46
+ start(): Promise<void>;
47
+ /** Stop the bot. */
48
+ stop(): Promise<void>;
49
+ /** Get bot status. */
50
+ getStatus(): DiscordBotStatus;
51
+ }
@@ -0,0 +1,152 @@
1
+ /**
2
+ * Discord Bot — Bidirektionaler Message-Handler
3
+ *
4
+ * Empfängt Nachrichten via discord.js Gateway, routet sie durch
5
+ * den MessageRouter und sendet die Antwort zurück.
6
+ *
7
+ * Voraussetzungen:
8
+ * npm install discord.js (optional dependency)
9
+ * DISCORD_BOT_TOKEN in .env
10
+ * DISCORD_CHANNEL_ID in .env (optional: beschränkt auf einen Channel)
11
+ */
12
+ import { getLogger } from '../utils/logger.js';
13
+ export class DiscordBot {
14
+ log = getLogger();
15
+ botToken;
16
+ channelId;
17
+ allowedUsers;
18
+ mentionOnly;
19
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
20
+ client = null;
21
+ router = null;
22
+ running = false;
23
+ stats = {
24
+ messagesReceived: 0,
25
+ messagesSent: 0,
26
+ errors: 0,
27
+ startedAt: null,
28
+ guilds: 0,
29
+ };
30
+ constructor(config = {}) {
31
+ this.botToken = config.botToken ?? process.env.DISCORD_BOT_TOKEN ?? null;
32
+ this.channelId = config.channelId ?? process.env.DISCORD_CHANNEL_ID ?? null;
33
+ this.allowedUsers = new Set(config.allowedUsers ?? []);
34
+ this.mentionOnly = config.mentionOnly ?? false;
35
+ }
36
+ /** Set the message router for dispatching incoming messages. */
37
+ setRouter(router) {
38
+ this.router = router;
39
+ }
40
+ /** Check if Discord bot can start. */
41
+ isConfigured() {
42
+ return !!this.botToken;
43
+ }
44
+ /** Start listening for messages. */
45
+ async start() {
46
+ if (!this.botToken) {
47
+ this.log.debug('[DiscordBot] No DISCORD_BOT_TOKEN set, skipping');
48
+ return;
49
+ }
50
+ if (this.running)
51
+ return;
52
+ try {
53
+ const modulePath = 'discord.js';
54
+ const { Client, GatewayIntentBits } = await import(/* webpackIgnore: true */ modulePath);
55
+ this.client = new Client({
56
+ intents: [
57
+ GatewayIntentBits.Guilds,
58
+ GatewayIntentBits.GuildMessages,
59
+ GatewayIntentBits.MessageContent,
60
+ ],
61
+ });
62
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
63
+ this.client.on('ready', (c) => {
64
+ this.stats.guilds = c.guilds?.cache?.size ?? 0;
65
+ this.log.info(`[DiscordBot] Bot ready in ${this.stats.guilds} guilds`);
66
+ });
67
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
68
+ this.client.on('messageCreate', async (msg) => {
69
+ try {
70
+ // Ignore own messages
71
+ if (msg.author?.bot)
72
+ return;
73
+ // Channel filter
74
+ if (this.channelId && msg.channel?.id !== this.channelId)
75
+ return;
76
+ // Mention filter
77
+ if (this.mentionOnly && !msg.mentions?.has(this.client.user)) {
78
+ // Still allow /commands
79
+ if (!msg.content?.startsWith('/'))
80
+ return;
81
+ }
82
+ const senderId = String(msg.author?.id ?? '');
83
+ const senderName = msg.author?.username ?? 'unknown';
84
+ // User filter
85
+ if (this.allowedUsers.size > 0 && !this.allowedUsers.has(senderId))
86
+ return;
87
+ this.stats.messagesReceived++;
88
+ if (!this.router) {
89
+ await msg.reply('MessageRouter nicht konfiguriert.');
90
+ return;
91
+ }
92
+ // Strip bot mention from beginning of text
93
+ let text = msg.content ?? '';
94
+ if (this.client.user) {
95
+ text = text.replace(new RegExp(`^<@!?${this.client.user.id}>\\s*`), '');
96
+ }
97
+ const response = await this.router.route({
98
+ text,
99
+ senderId,
100
+ senderName,
101
+ platform: 'discord',
102
+ channelId: msg.channel?.id,
103
+ });
104
+ if (response.code) {
105
+ await msg.reply(`\`\`\`\n${response.text}\n\`\`\``);
106
+ }
107
+ else {
108
+ await msg.reply(response.text);
109
+ }
110
+ this.stats.messagesSent++;
111
+ }
112
+ catch (err) {
113
+ this.stats.errors++;
114
+ this.log.warn(`[DiscordBot] Error handling message: ${err.message}`);
115
+ try {
116
+ await msg.reply('Interner Fehler.');
117
+ }
118
+ catch { /* best effort */ }
119
+ }
120
+ });
121
+ await this.client.login(this.botToken);
122
+ this.running = true;
123
+ this.stats.startedAt = Date.now();
124
+ }
125
+ catch (err) {
126
+ this.log.warn(`[DiscordBot] Failed to start: ${err.message}`);
127
+ }
128
+ }
129
+ /** Stop the bot. */
130
+ async stop() {
131
+ if (this.client && this.running) {
132
+ try {
133
+ await this.client.destroy();
134
+ }
135
+ catch { /* best effort */ }
136
+ this.running = false;
137
+ this.client = null;
138
+ }
139
+ }
140
+ /** Get bot status. */
141
+ getStatus() {
142
+ return {
143
+ running: this.running,
144
+ messagesReceived: this.stats.messagesReceived,
145
+ messagesSent: this.stats.messagesSent,
146
+ errors: this.stats.errors,
147
+ startedAt: this.stats.startedAt,
148
+ guilds: this.stats.guilds,
149
+ };
150
+ }
151
+ }
152
+ //# sourceMappingURL=discord-bot.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"discord-bot.js","sourceRoot":"","sources":["../../src/messaging/discord-bot.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ export { MessageRouter } from './message-router.js';
2
+ export type { IncomingMessage, OutgoingResponse, MessageRouterConfig, MessageRouterStatus, IpcDispatcher } from './message-router.js';
3
+ export { TelegramBot } from './telegram-bot.js';
4
+ export type { TelegramBotConfig, TelegramBotStatus } from './telegram-bot.js';
5
+ export { DiscordBot } from './discord-bot.js';
6
+ export type { DiscordBotConfig, DiscordBotStatus } from './discord-bot.js';
@@ -0,0 +1,4 @@
1
+ export { MessageRouter } from './message-router.js';
2
+ export { TelegramBot } from './telegram-bot.js';
3
+ export { DiscordBot } from './discord-bot.js';
4
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/messaging/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAGpD,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAGhD,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC"}
@@ -0,0 +1,67 @@
1
+ /**
2
+ * Message Router — Bidirektionale Messaging-Bridge
3
+ *
4
+ * Empfängt Nachrichten von Telegram/Discord, erkennt die Intention,
5
+ * dispatcht an die richtige IPC-Route und formatiert die Antwort.
6
+ *
7
+ * Unterstützte Befehle:
8
+ * /status → brain status
9
+ * /query <text> → error query
10
+ * /intel → intelligence stats
11
+ * /mission <t> → create research mission
12
+ * /traces → trace stats
13
+ * /help → command list
14
+ * Freitext → LLM query (if available)
15
+ */
16
+ /** Simple interface for dispatching IPC calls. */
17
+ export interface IpcDispatcher {
18
+ request(method: string, params?: unknown): Promise<unknown>;
19
+ }
20
+ export interface IncomingMessage {
21
+ text: string;
22
+ senderId: string;
23
+ senderName: string;
24
+ platform: 'telegram' | 'discord';
25
+ channelId?: string;
26
+ }
27
+ export interface OutgoingResponse {
28
+ text: string;
29
+ /** If true, send as code/pre block */
30
+ code?: boolean;
31
+ }
32
+ export interface MessageRouterConfig {
33
+ /** Allowed sender IDs (if empty, all senders allowed) */
34
+ allowedSenders?: string[];
35
+ /** Prefix for commands. Default: '/' */
36
+ commandPrefix?: string;
37
+ /** Brain name for IPC routing. Default: 'brain' */
38
+ brainName?: string;
39
+ }
40
+ export interface MessageRouterStatus {
41
+ messagesReceived: number;
42
+ messagesRouted: number;
43
+ errors: number;
44
+ lastMessageAt: number | null;
45
+ uptime: number;
46
+ }
47
+ type IntentHandler = (args: string, msg: IncomingMessage) => Promise<OutgoingResponse>;
48
+ export declare class MessageRouter {
49
+ private readonly log;
50
+ private readonly prefix;
51
+ private readonly allowedSenders;
52
+ private readonly brainName;
53
+ private ipcClient;
54
+ private intents;
55
+ private stats;
56
+ constructor(config?: MessageRouterConfig);
57
+ /** Connect to Brain IPC for dispatching commands. */
58
+ setIpcClient(client: IpcDispatcher): void;
59
+ /** Process an incoming message. Returns response text. */
60
+ route(msg: IncomingMessage): Promise<OutgoingResponse>;
61
+ /** Register a custom intent handler. */
62
+ registerIntent(command: string, handler: IntentHandler): void;
63
+ /** Get router status. */
64
+ getStatus(): MessageRouterStatus;
65
+ private registerDefaultIntents;
66
+ }
67
+ export {};
@@ -0,0 +1,249 @@
1
+ /**
2
+ * Message Router — Bidirektionale Messaging-Bridge
3
+ *
4
+ * Empfängt Nachrichten von Telegram/Discord, erkennt die Intention,
5
+ * dispatcht an die richtige IPC-Route und formatiert die Antwort.
6
+ *
7
+ * Unterstützte Befehle:
8
+ * /status → brain status
9
+ * /query <text> → error query
10
+ * /intel → intelligence stats
11
+ * /mission <t> → create research mission
12
+ * /traces → trace stats
13
+ * /help → command list
14
+ * Freitext → LLM query (if available)
15
+ */
16
+ import { getLogger } from '../utils/logger.js';
17
+ // ── Router ──────────────────────────────────────────────
18
+ export class MessageRouter {
19
+ log = getLogger();
20
+ prefix;
21
+ allowedSenders;
22
+ brainName;
23
+ ipcClient = null;
24
+ intents = new Map();
25
+ stats = {
26
+ messagesReceived: 0,
27
+ messagesRouted: 0,
28
+ errors: 0,
29
+ lastMessageAt: null,
30
+ startedAt: Date.now(),
31
+ };
32
+ constructor(config = {}) {
33
+ this.prefix = config.commandPrefix ?? '/';
34
+ this.allowedSenders = new Set(config.allowedSenders ?? []);
35
+ this.brainName = config.brainName ?? 'brain';
36
+ this.registerDefaultIntents();
37
+ }
38
+ /** Connect to Brain IPC for dispatching commands. */
39
+ setIpcClient(client) {
40
+ this.ipcClient = client;
41
+ }
42
+ /** Process an incoming message. Returns response text. */
43
+ async route(msg) {
44
+ this.stats.messagesReceived++;
45
+ this.stats.lastMessageAt = Date.now();
46
+ // Access control
47
+ if (this.allowedSenders.size > 0 && !this.allowedSenders.has(msg.senderId)) {
48
+ return { text: 'Zugriff verweigert. Deine ID ist nicht autorisiert.' };
49
+ }
50
+ const text = msg.text.trim();
51
+ // Command parsing
52
+ if (text.startsWith(this.prefix)) {
53
+ const withoutPrefix = text.slice(this.prefix.length);
54
+ const spaceIdx = withoutPrefix.indexOf(' ');
55
+ const command = spaceIdx >= 0 ? withoutPrefix.slice(0, spaceIdx).toLowerCase() : withoutPrefix.toLowerCase();
56
+ const args = spaceIdx >= 0 ? withoutPrefix.slice(spaceIdx + 1).trim() : '';
57
+ const handler = this.intents.get(command);
58
+ if (handler) {
59
+ try {
60
+ this.stats.messagesRouted++;
61
+ return await handler(args, msg);
62
+ }
63
+ catch (err) {
64
+ this.stats.errors++;
65
+ this.log.warn(`[MessageRouter] Command '${command}' failed: ${err.message}`);
66
+ return { text: `Fehler: ${err.message}` };
67
+ }
68
+ }
69
+ return { text: `Unbekannter Befehl: ${this.prefix}${command}\nTippe ${this.prefix}help für alle Befehle.` };
70
+ }
71
+ // Free text → query if IPC available
72
+ if (this.ipcClient) {
73
+ try {
74
+ this.stats.messagesRouted++;
75
+ const result = await this.ipcClient.request('query', { query: text });
76
+ if (result?.results?.length) {
77
+ const top = result.results.slice(0, 3);
78
+ const lines = top.map((r, i) => `${i + 1}. ${r.title ?? r.message ?? 'Ergebnis'}`);
79
+ return { text: `Ergebnisse:\n${lines.join('\n')}` };
80
+ }
81
+ return { text: 'Keine Ergebnisse gefunden.' };
82
+ }
83
+ catch {
84
+ return { text: 'Freitext-Suche fehlgeschlagen. Nutze /help für Befehle.' };
85
+ }
86
+ }
87
+ return { text: `Ich verstehe Befehle mit ${this.prefix} Prefix. Tippe ${this.prefix}help für alle Befehle.` };
88
+ }
89
+ /** Register a custom intent handler. */
90
+ registerIntent(command, handler) {
91
+ this.intents.set(command.toLowerCase(), handler);
92
+ }
93
+ /** Get router status. */
94
+ getStatus() {
95
+ return {
96
+ messagesReceived: this.stats.messagesReceived,
97
+ messagesRouted: this.stats.messagesRouted,
98
+ errors: this.stats.errors,
99
+ lastMessageAt: this.stats.lastMessageAt,
100
+ uptime: Math.floor((Date.now() - this.stats.startedAt) / 1000),
101
+ };
102
+ }
103
+ // ── Default Intents ─────────────────────────────────
104
+ registerDefaultIntents() {
105
+ this.intents.set('help', async () => ({
106
+ text: [
107
+ `Brain Befehle:`,
108
+ `${this.prefix}status — Brain Status & Statistiken`,
109
+ `${this.prefix}query <text> — Fehler/Lösungen suchen`,
110
+ `${this.prefix}intel — Intelligence Stats`,
111
+ `${this.prefix}mission <topic> — Research-Mission starten`,
112
+ `${this.prefix}traces — Trace-Statistiken`,
113
+ `${this.prefix}engines — Engine-Übersicht`,
114
+ `${this.prefix}health — System-Gesundheit`,
115
+ `${this.prefix}help — Diese Hilfe`,
116
+ ``,
117
+ `Oder einfach Freitext eingeben für Suche.`,
118
+ ].join('\n'),
119
+ }));
120
+ this.intents.set('status', async () => {
121
+ if (!this.ipcClient)
122
+ return { text: 'IPC nicht verbunden.' };
123
+ try {
124
+ const status = await this.ipcClient.request('status', {});
125
+ return {
126
+ text: [
127
+ `Brain Status:`,
128
+ `Name: ${status.name ?? this.brainName}`,
129
+ `Version: ${status.version ?? '?'}`,
130
+ `Uptime: ${status.uptime ?? '?'}s`,
131
+ `PID: ${status.pid ?? '?'}`,
132
+ `Methods: ${status.methods ?? '?'}`,
133
+ ].join('\n'),
134
+ code: true,
135
+ };
136
+ }
137
+ catch (err) {
138
+ return { text: `Status-Abfrage fehlgeschlagen: ${err.message}` };
139
+ }
140
+ });
141
+ this.intents.set('query', async (args) => {
142
+ if (!args)
143
+ return { text: 'Bitte Suchtext angeben: /query <text>' };
144
+ if (!this.ipcClient)
145
+ return { text: 'IPC nicht verbunden.' };
146
+ try {
147
+ const result = await this.ipcClient.request('error.search', { query: args, limit: 5 });
148
+ if (!result?.results?.length)
149
+ return { text: 'Keine Ergebnisse.' };
150
+ const lines = result.results.map((r, i) => `${i + 1}. ${r.title ?? r.message ?? '?'} (Score: ${r.score?.toFixed(2) ?? '?'})`);
151
+ return { text: `Suchergebnisse:\n${lines.join('\n')}` };
152
+ }
153
+ catch (err) {
154
+ return { text: `Suche fehlgeschlagen: ${err.message}` };
155
+ }
156
+ });
157
+ this.intents.set('intel', async () => {
158
+ if (!this.ipcClient)
159
+ return { text: 'IPC nicht verbunden.' };
160
+ try {
161
+ const stats = await this.ipcClient.request('intelligence.stats', {});
162
+ const lines = ['Intelligence Stats:'];
163
+ for (const [key, val] of Object.entries(stats)) {
164
+ if (val && typeof val === 'object' && 'totalFacts' in val) {
165
+ lines.push(`${key}: ${val.totalFacts} facts`);
166
+ }
167
+ else if (val && typeof val === 'object' && 'totalTraces' in val) {
168
+ lines.push(`${key}: ${val.totalTraces} traces`);
169
+ }
170
+ }
171
+ return { text: lines.length > 1 ? lines.join('\n') : 'Keine Intelligence-Daten.' };
172
+ }
173
+ catch {
174
+ return { text: 'Intelligence-Abfrage fehlgeschlagen.' };
175
+ }
176
+ });
177
+ this.intents.set('mission', async (args) => {
178
+ if (!args)
179
+ return { text: 'Bitte Thema angeben: /mission <topic>' };
180
+ if (!this.ipcClient)
181
+ return { text: 'IPC nicht verbunden.' };
182
+ try {
183
+ const result = await this.ipcClient.request('mission.create', { topic: args, depth: 'standard' });
184
+ return { text: `Mission erstellt: ${result?.id ?? 'OK'}\nThema: ${args}` };
185
+ }
186
+ catch (err) {
187
+ return { text: `Mission fehlgeschlagen: ${err.message}` };
188
+ }
189
+ });
190
+ this.intents.set('traces', async () => {
191
+ if (!this.ipcClient)
192
+ return { text: 'IPC nicht verbunden.' };
193
+ try {
194
+ const stats = await this.ipcClient.request('trace.stats', {});
195
+ return {
196
+ text: [
197
+ `Trace-Statistiken:`,
198
+ `Traces: ${stats.totalTraces ?? 0}`,
199
+ `Spans: ${stats.totalSpans ?? 0}`,
200
+ `Tokens: ${stats.totalTokens ?? 0}`,
201
+ `Kosten: $${(Number(stats.totalCost) || 0).toFixed(2)}`,
202
+ `Aktiv: ${stats.activeTraces ?? 0}`,
203
+ `Ø Latenz: ${stats.avgDurationMs ?? 0}ms`,
204
+ ].join('\n'),
205
+ code: true,
206
+ };
207
+ }
208
+ catch {
209
+ return { text: 'Trace-Abfrage fehlgeschlagen.' };
210
+ }
211
+ });
212
+ this.intents.set('engines', async () => {
213
+ if (!this.ipcClient)
214
+ return { text: 'IPC nicht verbunden.' };
215
+ try {
216
+ const result = await this.ipcClient.request('consciousness.engines', {});
217
+ if (!Array.isArray(result) || result.length === 0)
218
+ return { text: 'Keine Engines gefunden.' };
219
+ const activeCount = result.filter(e => e.active).length;
220
+ return { text: `Engines: ${result.length} registriert, ${activeCount} aktiv` };
221
+ }
222
+ catch {
223
+ return { text: 'Engine-Abfrage fehlgeschlagen.' };
224
+ }
225
+ });
226
+ this.intents.set('health', async () => {
227
+ if (!this.ipcClient)
228
+ return { text: 'IPC nicht verbunden.' };
229
+ try {
230
+ const status = await this.ipcClient.request('status', {});
231
+ const memMB = Math.round(process.memoryUsage().rss / 1024 / 1024);
232
+ return {
233
+ text: [
234
+ `System Health:`,
235
+ `Uptime: ${status.uptime ?? '?'}s`,
236
+ `Memory: ${memMB} MB`,
237
+ `PID: ${status.pid ?? process.pid}`,
238
+ `IPC: verbunden`,
239
+ ].join('\n'),
240
+ code: true,
241
+ };
242
+ }
243
+ catch {
244
+ return { text: 'Health-Check fehlgeschlagen.' };
245
+ }
246
+ });
247
+ }
248
+ }
249
+ //# sourceMappingURL=message-router.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"message-router.js","sourceRoot":"","sources":["../../src/messaging/message-router.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,48 @@
1
+ /**
2
+ * Telegram Bot — Bidirektionaler Message-Handler
3
+ *
4
+ * Empfängt Nachrichten via grammy Long Polling, routet sie durch
5
+ * den MessageRouter und sendet die Antwort zurück.
6
+ *
7
+ * Voraussetzungen:
8
+ * npm install grammy (optional dependency)
9
+ * TELEGRAM_BOT_TOKEN in .env
10
+ * TELEGRAM_CHAT_ID in .env (optional: beschränkt auf einen Chat)
11
+ */
12
+ import type { MessageRouter } from './message-router.js';
13
+ export interface TelegramBotConfig {
14
+ botToken?: string;
15
+ /** If set, only respond in this chat. */
16
+ chatId?: string;
17
+ /** Allowed user IDs (if empty, all allowed). */
18
+ allowedUsers?: string[];
19
+ }
20
+ export interface TelegramBotStatus {
21
+ running: boolean;
22
+ messagesReceived: number;
23
+ messagesSent: number;
24
+ errors: number;
25
+ startedAt: number | null;
26
+ }
27
+ export declare class TelegramBot {
28
+ private readonly log;
29
+ private readonly botToken;
30
+ private readonly chatId;
31
+ private readonly allowedUsers;
32
+ private bot;
33
+ private router;
34
+ private running;
35
+ private stats;
36
+ constructor(config?: TelegramBotConfig);
37
+ /** Set the message router for dispatching incoming messages. */
38
+ setRouter(router: MessageRouter): void;
39
+ /** Check if Telegram bot can start. */
40
+ isConfigured(): boolean;
41
+ /** Start listening for messages. */
42
+ start(): Promise<void>;
43
+ /** Stop the bot. */
44
+ stop(): Promise<void>;
45
+ /** Get bot status. */
46
+ getStatus(): TelegramBotStatus;
47
+ private escapeHtml;
48
+ }
@@ -0,0 +1,133 @@
1
+ /**
2
+ * Telegram Bot — Bidirektionaler Message-Handler
3
+ *
4
+ * Empfängt Nachrichten via grammy Long Polling, routet sie durch
5
+ * den MessageRouter und sendet die Antwort zurück.
6
+ *
7
+ * Voraussetzungen:
8
+ * npm install grammy (optional dependency)
9
+ * TELEGRAM_BOT_TOKEN in .env
10
+ * TELEGRAM_CHAT_ID in .env (optional: beschränkt auf einen Chat)
11
+ */
12
+ import { getLogger } from '../utils/logger.js';
13
+ export class TelegramBot {
14
+ log = getLogger();
15
+ botToken;
16
+ chatId;
17
+ allowedUsers;
18
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
19
+ bot = null;
20
+ router = null;
21
+ running = false;
22
+ stats = {
23
+ messagesReceived: 0,
24
+ messagesSent: 0,
25
+ errors: 0,
26
+ startedAt: null,
27
+ };
28
+ constructor(config = {}) {
29
+ this.botToken = config.botToken ?? process.env.TELEGRAM_BOT_TOKEN ?? null;
30
+ this.chatId = config.chatId ?? process.env.TELEGRAM_CHAT_ID ?? null;
31
+ this.allowedUsers = new Set(config.allowedUsers ?? []);
32
+ }
33
+ /** Set the message router for dispatching incoming messages. */
34
+ setRouter(router) {
35
+ this.router = router;
36
+ }
37
+ /** Check if Telegram bot can start. */
38
+ isConfigured() {
39
+ return !!this.botToken;
40
+ }
41
+ /** Start listening for messages. */
42
+ async start() {
43
+ if (!this.botToken) {
44
+ this.log.debug('[TelegramBot] No TELEGRAM_BOT_TOKEN set, skipping');
45
+ return;
46
+ }
47
+ if (this.running)
48
+ return;
49
+ try {
50
+ const modulePath = 'grammy';
51
+ const { Bot } = await import(/* webpackIgnore: true */ modulePath);
52
+ this.bot = new Bot(this.botToken);
53
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
54
+ this.bot.on('message:text', async (ctx) => {
55
+ try {
56
+ const senderId = String(ctx.from?.id ?? '');
57
+ const senderName = ctx.from?.first_name ?? ctx.from?.username ?? 'unknown';
58
+ const chatId = String(ctx.chat?.id ?? '');
59
+ // Chat filter
60
+ if (this.chatId && chatId !== this.chatId)
61
+ return;
62
+ // User filter
63
+ if (this.allowedUsers.size > 0 && !this.allowedUsers.has(senderId)) {
64
+ await ctx.reply('Zugriff verweigert.');
65
+ return;
66
+ }
67
+ this.stats.messagesReceived++;
68
+ if (!this.router) {
69
+ await ctx.reply('MessageRouter nicht konfiguriert.');
70
+ return;
71
+ }
72
+ const response = await this.router.route({
73
+ text: ctx.message.text,
74
+ senderId,
75
+ senderName,
76
+ platform: 'telegram',
77
+ channelId: chatId,
78
+ });
79
+ if (response.code) {
80
+ await ctx.reply(`<pre>${this.escapeHtml(response.text)}</pre>`, { parse_mode: 'HTML' });
81
+ }
82
+ else {
83
+ await ctx.reply(response.text);
84
+ }
85
+ this.stats.messagesSent++;
86
+ }
87
+ catch (err) {
88
+ this.stats.errors++;
89
+ this.log.warn(`[TelegramBot] Error handling message: ${err.message}`);
90
+ try {
91
+ await ctx.reply('Interner Fehler.');
92
+ }
93
+ catch { /* best effort */ }
94
+ }
95
+ });
96
+ // Start polling (non-blocking)
97
+ this.bot.start({
98
+ onStart: () => {
99
+ this.log.info('[TelegramBot] Bot started, listening for messages');
100
+ },
101
+ });
102
+ this.running = true;
103
+ this.stats.startedAt = Date.now();
104
+ }
105
+ catch (err) {
106
+ this.log.warn(`[TelegramBot] Failed to start: ${err.message}`);
107
+ }
108
+ }
109
+ /** Stop the bot. */
110
+ async stop() {
111
+ if (this.bot && this.running) {
112
+ try {
113
+ await this.bot.stop();
114
+ }
115
+ catch { /* best effort */ }
116
+ this.running = false;
117
+ }
118
+ }
119
+ /** Get bot status. */
120
+ getStatus() {
121
+ return {
122
+ running: this.running,
123
+ messagesReceived: this.stats.messagesReceived,
124
+ messagesSent: this.stats.messagesSent,
125
+ errors: this.stats.errors,
126
+ startedAt: this.stats.startedAt,
127
+ };
128
+ }
129
+ escapeHtml(text) {
130
+ return text.replace(/&/g, '&amp;').replace(/</g, '&lt;').replace(/>/g, '&gt;');
131
+ }
132
+ }
133
+ //# sourceMappingURL=telegram-bot.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"telegram-bot.js","sourceRoot":"","sources":["../../src/messaging/telegram-bot.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@timmeck/brain-core",
3
- "version": "2.36.39",
3
+ "version": "2.36.40",
4
4
  "description": "Shared core infrastructure for the Brain ecosystem — IPC, MCP, CLI, DB connection, and utilities",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",