@timmeck/brain-core 2.36.38 → 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.
@@ -572,6 +572,18 @@ canvas{display:block;width:100%;height:100%}
572
572
  </div>
573
573
  <div id="featureWishlist" style="margin-top:12px"></div>
574
574
  </div>
575
+
576
+ <!-- Traces / Observability -->
577
+ <div class="section">
578
+ <div class="section-title"><span class="icon">&#x1F50D;</span> Observability — <span data-t="Traces & Spans">Traces & Spans</span></div>
579
+ <p style="font-size:12px;color:var(--text-dim);margin-bottom:12px" data-t="OpenTelemetry-artige Traces: Jeder Workflow wird in Spans aufgeteilt mit Token- und Cost-Tracking.">OpenTelemetry-artige Traces: Jeder Workflow wird in Spans aufgeteilt mit Token- und Cost-Tracking.</p>
580
+ <div class="grid grid-4">
581
+ <div class="card" style="text-align:center"><div class="card-value" id="int-tr-total" style="color:var(--cyan)">0</div><div class="card-sub" data-t="Traces gesamt">Traces gesamt</div></div>
582
+ <div class="card" style="text-align:center"><div class="card-value" id="int-tr-active" style="color:var(--green)">0</div><div class="card-sub" data-t="Aktiv">Aktiv</div></div>
583
+ <div class="card" style="text-align:center"><div class="card-value" id="int-tr-spans" style="color:var(--yellow)">0</div><div class="card-sub" data-t="Spans gesamt">Spans gesamt</div></div>
584
+ <div class="card" style="text-align:center"><div class="card-value" id="int-tr-cost" style="color:var(--magenta)">$0.00</div><div class="card-sub" data-t="Gesamtkosten">Gesamtkosten</div></div>
585
+ </div>
586
+ </div>
575
587
  </div>
576
588
 
577
589
  <!-- ════ Page 6: Cross-Brain & Borg ═════════════════ -->
@@ -819,6 +831,7 @@ const translations = { en: {
819
831
  'Der Lern-Kreislauf':'The Learning Cycle','Aktivität & Missionen':'Activity & Missions','Bewusstsein':'Consciousness',
820
832
  'Was Brain sich wünscht':'What Brain wants','Wünsche':'Wishes','Offen':'Open','Gefunden':'Found','Übernommen':'Adopted',
821
833
  'Verbindungen':'Connections','Letzter Scan':'Last scan','Suche läuft':'Searching','Verworfen':'Dismissed','Priorität':'Priority',
834
+ 'Traces & Spans':'Traces & Spans','Traces gesamt':'Total Traces','Aktiv':'Active','Spans gesamt':'Total Spans','Gesamtkosten':'Total Cost',
822
835
  'Noch keine Feature-Wünsche — Brain analysiert automatisch':'No feature wishes yet — Brain analyzes automatically',
823
836
  'Brain erkennt was ihm fehlt und sucht nach passenden Features aus absorbierten Repos.':'Brain detects what it needs and searches for matching features from absorbed repos.',
824
837
  }};
@@ -1248,6 +1261,15 @@ function renderIntelligence() {
1248
1261
  wishEl.innerHTML = `<div class="empty">${t('Noch keine Feature-Wünsche — Brain analysiert automatisch')}</div>`;
1249
1262
  }
1250
1263
  }
1264
+
1265
+ // Traces / Observability
1266
+ const tr = d.traces;
1267
+ if (tr) {
1268
+ setText('int-tr-total', (tr.totalTraces || 0).toLocaleString());
1269
+ setText('int-tr-active', (tr.activeTraces || 0).toLocaleString());
1270
+ setText('int-tr-spans', (tr.totalSpans || 0).toLocaleString());
1271
+ setText('int-tr-cost', '$' + (tr.totalCost || 0).toFixed(2));
1272
+ }
1251
1273
  }
1252
1274
 
1253
1275
  // ── Knowledge Growth ──────────────────────────────────────
package/dist/index.d.ts CHANGED
@@ -239,3 +239,7 @@ export { ActiveLearner, runActiveLearningMigration } from './active-learning/ind
239
239
  export type { ActiveLearnerConfig, LearningGap, LearningStrategy, ActiveLearnerStatus } from './active-learning/index.js';
240
240
  export { CheckpointManager, runCheckpointMigration } from './checkpoint/index.js';
241
241
  export type { Checkpoint, CheckpointSummary, CheckpointManagerStatus } from './checkpoint/index.js';
242
+ export { TraceCollector, runTraceMigration } from './observability/index.js';
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
@@ -207,4 +207,8 @@ export { ConsensusEngine, runConsensusMigration } from './consensus/index.js';
207
207
  export { ActiveLearner, runActiveLearningMigration } from './active-learning/index.js';
208
208
  // ── Checkpoint Manager ──────────────────────────────────────
209
209
  export { CheckpointManager, runCheckpointMigration } from './checkpoint/index.js';
210
+ // ── Observability / Tracing ─────────────────────────────────
211
+ export { TraceCollector, runTraceMigration } from './observability/index.js';
212
+ // ── Messaging (Bidirectional Bots) ──────────────────────────
213
+ export { MessageRouter, TelegramBot, DiscordBot } from './messaging/index.js';
210
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