@wundr.io/autogen-orchestrator 1.0.3

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.
@@ -0,0 +1,600 @@
1
+ "use strict";
2
+ /**
3
+ * Nested Chat Handling for AutoGen-style Group Chat
4
+ *
5
+ * Implements support for sub-discussions within a main conversation,
6
+ * allowing focused interactions between subsets of participants.
7
+ */
8
+ Object.defineProperty(exports, "__esModule", { value: true });
9
+ exports.NestedChatConfigBuilder = exports.NestedChatManager = void 0;
10
+ const eventemitter3_1 = require("eventemitter3");
11
+ const uuid_1 = require("uuid");
12
+ /**
13
+ * Manager for nested chat sessions within a group chat
14
+ */
15
+ class NestedChatManager extends eventemitter3_1.EventEmitter {
16
+ configs = new Map();
17
+ activeChats = new Map();
18
+ completedChats = new Map();
19
+ /**
20
+ * Create a nested chat manager
21
+ * @param configs - Initial nested chat configurations
22
+ */
23
+ constructor(configs = []) {
24
+ super();
25
+ for (const config of configs) {
26
+ this.addConfig(config);
27
+ }
28
+ }
29
+ /**
30
+ * Add a nested chat configuration
31
+ * @param config - Configuration to add
32
+ */
33
+ addConfig(config) {
34
+ this.configs.set(config.id, config);
35
+ }
36
+ /**
37
+ * Remove a nested chat configuration
38
+ * @param configId - Configuration ID to remove
39
+ */
40
+ removeConfig(configId) {
41
+ this.configs.delete(configId);
42
+ }
43
+ /**
44
+ * Get all configurations
45
+ * @returns Array of nested chat configurations
46
+ */
47
+ getConfigs() {
48
+ return Array.from(this.configs.values());
49
+ }
50
+ /**
51
+ * Check if a message should trigger a nested chat
52
+ * @param message - Message to check
53
+ * @param participants - Current participants
54
+ * @param context - Current chat context
55
+ * @returns Triggered configuration or null
56
+ */
57
+ checkTrigger(message, participants, context) {
58
+ for (const config of this.configs.values()) {
59
+ if (this.evaluateTrigger(config.trigger, message, participants, context)) {
60
+ return config;
61
+ }
62
+ }
63
+ return null;
64
+ }
65
+ /**
66
+ * Evaluate if a trigger condition is met
67
+ * @param trigger - Trigger configuration
68
+ * @param message - Current message
69
+ * @param participants - Available participants
70
+ * @param context - Chat context
71
+ * @returns Whether the trigger is activated
72
+ */
73
+ evaluateTrigger(trigger, message, participants, context) {
74
+ switch (trigger.type) {
75
+ case 'keyword':
76
+ return this.evaluateKeywordTrigger(trigger.value, message);
77
+ case 'participant':
78
+ return this.evaluateParticipantTrigger(trigger.value, message, participants);
79
+ case 'condition':
80
+ return this.evaluateConditionTrigger(trigger.value, message, context);
81
+ case 'manual':
82
+ return this.evaluateManualTrigger(trigger.value, context);
83
+ default:
84
+ return false;
85
+ }
86
+ }
87
+ /**
88
+ * Evaluate keyword-based trigger
89
+ * @param value - Keyword(s) to check
90
+ * @param message - Message to check
91
+ * @returns Whether keyword is found
92
+ */
93
+ evaluateKeywordTrigger(value, message) {
94
+ const keywords = Array.isArray(value)
95
+ ? value
96
+ : typeof value === 'string'
97
+ ? [value]
98
+ : [];
99
+ const contentLower = message.content.toLowerCase();
100
+ return keywords.some(keyword => contentLower.includes(keyword.toLowerCase()));
101
+ }
102
+ /**
103
+ * Evaluate participant-based trigger
104
+ * @param value - Participant name(s)
105
+ * @param message - Current message
106
+ * @param participants - Available participants
107
+ * @returns Whether participant condition is met
108
+ */
109
+ evaluateParticipantTrigger(value, message, participants) {
110
+ const targetParticipants = Array.isArray(value)
111
+ ? value
112
+ : typeof value === 'string'
113
+ ? [value]
114
+ : [];
115
+ // Check if message is from one of the target participants
116
+ if (targetParticipants.includes(message.name)) {
117
+ return true;
118
+ }
119
+ // Check if message mentions target participants
120
+ for (const targetName of targetParticipants) {
121
+ const participant = participants.find(p => p.name === targetName);
122
+ if (participant && message.content.includes(`@${targetName}`)) {
123
+ return true;
124
+ }
125
+ }
126
+ return false;
127
+ }
128
+ /**
129
+ * Evaluate condition-based trigger
130
+ * @param value - Condition expression or function
131
+ * @param message - Current message
132
+ * @param context - Chat context
133
+ * @returns Whether condition is met
134
+ */
135
+ evaluateConditionTrigger(value, message, context) {
136
+ // Check if value is a function (NestedChatConditionFn)
137
+ if (typeof value === 'function') {
138
+ return value(message, context);
139
+ }
140
+ if (typeof value === 'string') {
141
+ // Simple condition parsing
142
+ const condition = value.toLowerCase();
143
+ if (condition.includes('round >')) {
144
+ const parts = condition.split('>');
145
+ const threshold = parseInt(parts[1]?.trim() || '0', 10);
146
+ return context.currentRound > threshold;
147
+ }
148
+ if (condition.includes('messages >')) {
149
+ const parts = condition.split('>');
150
+ const threshold = parseInt(parts[1]?.trim() || '0', 10);
151
+ return context.messageCount > threshold;
152
+ }
153
+ }
154
+ return false;
155
+ }
156
+ /**
157
+ * Evaluate manual trigger
158
+ * @param value - Manual trigger value (state key to check)
159
+ * @param context - Chat context
160
+ * @returns Whether manual trigger is set
161
+ */
162
+ evaluateManualTrigger(value, context) {
163
+ // For manual triggers, value should be a string representing the state key
164
+ const triggerKey = typeof value === 'string' ? value : String(value);
165
+ return context.state[triggerKey] === true;
166
+ }
167
+ /**
168
+ * Start a nested chat session
169
+ * @param config - Nested chat configuration
170
+ * @param parentChatId - Parent chat ID
171
+ * @param parentMessageId - Message that triggered the nested chat
172
+ * @param allParticipants - All available participants
173
+ * @param parentContext - Parent chat context
174
+ * @returns Nested chat ID
175
+ */
176
+ startNestedChat(config, parentChatId, parentMessageId, allParticipants, parentContext) {
177
+ const nestedChatId = (0, uuid_1.v4)();
178
+ // Select participants for nested chat
179
+ const nestedParticipants = allParticipants.filter(p => config.participants.includes(p.name));
180
+ if (nestedParticipants.length < 2) {
181
+ throw new Error(`Nested chat requires at least 2 participants, found ${nestedParticipants.length}`);
182
+ }
183
+ // Create nested context
184
+ const nestedContext = {
185
+ chatId: nestedChatId,
186
+ currentRound: 0,
187
+ messageCount: 0,
188
+ activeParticipants: nestedParticipants.map(p => p.name),
189
+ startTime: new Date(),
190
+ state: config.shareContext ? { ...parentContext.state } : {},
191
+ parentContext: parentContext,
192
+ };
193
+ // Create nested chat state
194
+ const state = {
195
+ id: nestedChatId,
196
+ config,
197
+ parentChatId,
198
+ parentMessageId,
199
+ participants: nestedParticipants,
200
+ messages: [],
201
+ status: 'active',
202
+ startedAt: new Date(),
203
+ context: nestedContext,
204
+ };
205
+ this.activeChats.set(nestedChatId, state);
206
+ // Add initial prompt message if configured
207
+ if (config.prompt) {
208
+ const systemMessage = this.createMessage({
209
+ role: 'system',
210
+ content: config.prompt,
211
+ name: 'system',
212
+ });
213
+ state.messages.push(systemMessage);
214
+ }
215
+ this.emit('nested:started', {
216
+ nestedChatId,
217
+ config,
218
+ parentMessageId,
219
+ });
220
+ return nestedChatId;
221
+ }
222
+ /**
223
+ * Add a message to a nested chat
224
+ * @param nestedChatId - Nested chat ID
225
+ * @param message - Message to add
226
+ */
227
+ addMessage(nestedChatId, message) {
228
+ const state = this.activeChats.get(nestedChatId);
229
+ if (!state) {
230
+ throw new Error(`Nested chat not found: ${nestedChatId}`);
231
+ }
232
+ if (state.status !== 'active') {
233
+ throw new Error(`Nested chat is not active: ${state.status}`);
234
+ }
235
+ state.messages.push(message);
236
+ state.context.messageCount = state.messages.length;
237
+ this.emit('nested:message', { nestedChatId, message });
238
+ }
239
+ /**
240
+ * End a nested chat session
241
+ * @param nestedChatId - Nested chat ID
242
+ * @param status - Final status
243
+ * @param terminationReason - Reason for ending
244
+ * @returns Nested chat result
245
+ */
246
+ async endNestedChat(nestedChatId, status = 'completed', terminationReason) {
247
+ const state = this.activeChats.get(nestedChatId);
248
+ if (!state) {
249
+ throw new Error(`Nested chat not found: ${nestedChatId}`);
250
+ }
251
+ state.status = status;
252
+ // Generate summary
253
+ const summary = await this.generateSummary(state.messages, state.config.summaryMethod || 'last');
254
+ // Create chat result
255
+ const endedAt = new Date();
256
+ const chatResult = {
257
+ chatId: nestedChatId,
258
+ status,
259
+ messages: state.messages,
260
+ summary,
261
+ terminationReason,
262
+ totalRounds: state.context.currentRound,
263
+ totalMessages: state.messages.length,
264
+ participants: state.participants.map(p => p.name),
265
+ durationMs: endedAt.getTime() - state.startedAt.getTime(),
266
+ startedAt: state.startedAt,
267
+ endedAt,
268
+ };
269
+ const result = {
270
+ nestedChatId,
271
+ configId: state.config.id,
272
+ result: chatResult,
273
+ summary,
274
+ parentMessageId: state.parentMessageId,
275
+ };
276
+ // Move from active to completed
277
+ this.activeChats.delete(nestedChatId);
278
+ this.completedChats.set(nestedChatId, result);
279
+ this.emit('nested:completed', { nestedChatId, result: chatResult });
280
+ return result;
281
+ }
282
+ /**
283
+ * Generate a summary of the nested chat
284
+ * @param messages - Chat messages
285
+ * @param method - Summary method
286
+ * @returns Generated summary
287
+ */
288
+ async generateSummary(messages, method) {
289
+ switch (method) {
290
+ case 'last':
291
+ return this.generateLastMessageSummary(messages);
292
+ case 'llm':
293
+ return this.generateLLMSummary(messages);
294
+ case 'reflection':
295
+ return this.generateReflectionSummary(messages);
296
+ case 'custom':
297
+ return this.generateCustomSummary(messages);
298
+ default:
299
+ return this.generateLastMessageSummary(messages);
300
+ }
301
+ }
302
+ /**
303
+ * Generate summary from the last message
304
+ * @param messages - Chat messages
305
+ * @returns Last message content as summary
306
+ */
307
+ generateLastMessageSummary(messages) {
308
+ const lastNonSystemMessage = [...messages]
309
+ .reverse()
310
+ .find(m => m.role !== 'system');
311
+ if (!lastNonSystemMessage) {
312
+ return 'No substantive messages in nested chat.';
313
+ }
314
+ return `${lastNonSystemMessage.name}: ${lastNonSystemMessage.content}`;
315
+ }
316
+ /**
317
+ * Generate summary using LLM (placeholder)
318
+ * @param messages - Chat messages
319
+ * @returns LLM-generated summary
320
+ */
321
+ async generateLLMSummary(messages) {
322
+ // In a real implementation, this would call an LLM
323
+ // For now, generate a structured summary
324
+ const participantMessages = new Map();
325
+ const topics = [];
326
+ for (const message of messages) {
327
+ if (message.role !== 'system') {
328
+ participantMessages.set(message.name, (participantMessages.get(message.name) || 0) + 1);
329
+ // Extract potential topics (simplified)
330
+ const words = message.content.split(/\s+/).filter(w => w.length > 5);
331
+ topics.push(...words.slice(0, 3));
332
+ }
333
+ }
334
+ const participantSummary = Array.from(participantMessages.entries())
335
+ .map(([name, count]) => `${name} (${count} messages)`)
336
+ .join(', ');
337
+ const uniqueTopics = [...new Set(topics)].slice(0, 5).join(', ');
338
+ return `Nested discussion with ${participantMessages.size} participants (${participantSummary}). Key topics: ${uniqueTopics || 'general discussion'}. Total ${messages.length} messages exchanged.`;
339
+ }
340
+ /**
341
+ * Generate a reflection-style summary
342
+ * @param messages - Chat messages
343
+ * @returns Reflection summary
344
+ */
345
+ generateReflectionSummary(messages) {
346
+ const nonSystemMessages = messages.filter(m => m.role !== 'system');
347
+ if (nonSystemMessages.length === 0) {
348
+ return 'No discussion occurred.';
349
+ }
350
+ const firstMessage = nonSystemMessages[0];
351
+ const lastMessage = nonSystemMessages[nonSystemMessages.length - 1];
352
+ // Check for resolution indicators
353
+ const resolutionKeywords = [
354
+ 'agree',
355
+ 'resolved',
356
+ 'decided',
357
+ 'conclusion',
358
+ 'done',
359
+ ];
360
+ const hasResolution = nonSystemMessages.some(m => resolutionKeywords.some(k => m.content.toLowerCase().includes(k)));
361
+ const participants = [...new Set(nonSystemMessages.map(m => m.name))];
362
+ return (`Discussion started with ${firstMessage.name}: "${firstMessage.content.slice(0, 50)}...". ` +
363
+ `${participants.length} participants contributed ${nonSystemMessages.length} messages. ` +
364
+ `${hasResolution ? 'A resolution was reached.' : 'Discussion ongoing.'} ` +
365
+ `Final message from ${lastMessage.name}: "${lastMessage.content.slice(0, 50)}..."`);
366
+ }
367
+ /**
368
+ * Generate a custom summary (placeholder)
369
+ * @param messages - Chat messages
370
+ * @returns Custom summary
371
+ */
372
+ generateCustomSummary(messages) {
373
+ // Default to last message summary
374
+ return this.generateLastMessageSummary(messages);
375
+ }
376
+ /**
377
+ * Get the state of an active nested chat
378
+ * @param nestedChatId - Nested chat ID
379
+ * @returns Nested chat state or undefined
380
+ */
381
+ getActiveChat(nestedChatId) {
382
+ return this.activeChats.get(nestedChatId);
383
+ }
384
+ /**
385
+ * Get a completed nested chat result
386
+ * @param nestedChatId - Nested chat ID
387
+ * @returns Nested chat result or undefined
388
+ */
389
+ getCompletedChat(nestedChatId) {
390
+ return this.completedChats.get(nestedChatId);
391
+ }
392
+ /**
393
+ * Get all active nested chat IDs
394
+ * @returns Array of active nested chat IDs
395
+ */
396
+ getActiveChats() {
397
+ return Array.from(this.activeChats.keys());
398
+ }
399
+ /**
400
+ * Get all completed nested chat results
401
+ * @returns Array of nested chat results
402
+ */
403
+ getCompletedChats() {
404
+ return Array.from(this.completedChats.values());
405
+ }
406
+ /**
407
+ * Check if there are any active nested chats
408
+ * @returns Whether there are active nested chats
409
+ */
410
+ hasActiveChats() {
411
+ return this.activeChats.size > 0;
412
+ }
413
+ /**
414
+ * Increment the round counter for a nested chat
415
+ * @param nestedChatId - Nested chat ID
416
+ */
417
+ incrementRound(nestedChatId) {
418
+ const state = this.activeChats.get(nestedChatId);
419
+ if (state) {
420
+ state.context.currentRound++;
421
+ }
422
+ }
423
+ /**
424
+ * Get the current context for a nested chat
425
+ * @param nestedChatId - Nested chat ID
426
+ * @returns Chat context or undefined
427
+ */
428
+ getContext(nestedChatId) {
429
+ return this.activeChats.get(nestedChatId)?.context;
430
+ }
431
+ /**
432
+ * Update state in a nested chat context
433
+ * @param nestedChatId - Nested chat ID
434
+ * @param key - State key
435
+ * @param value - State value
436
+ */
437
+ updateState(nestedChatId, key, value) {
438
+ const state = this.activeChats.get(nestedChatId);
439
+ if (state) {
440
+ state.context.state[key] = value;
441
+ }
442
+ }
443
+ /**
444
+ * Create a message object
445
+ * @param options - Message creation options
446
+ * @returns Created message
447
+ */
448
+ createMessage(options) {
449
+ return {
450
+ id: (0, uuid_1.v4)(),
451
+ role: options.role,
452
+ content: options.content,
453
+ name: options.name,
454
+ timestamp: new Date(),
455
+ contentType: options.contentType || 'text',
456
+ functionCall: options.functionCall,
457
+ metadata: options.metadata,
458
+ status: 'delivered',
459
+ };
460
+ }
461
+ /**
462
+ * Clear all nested chat data
463
+ */
464
+ clear() {
465
+ this.configs.clear();
466
+ this.activeChats.clear();
467
+ this.completedChats.clear();
468
+ }
469
+ }
470
+ exports.NestedChatManager = NestedChatManager;
471
+ /**
472
+ * Builder for creating nested chat configurations
473
+ */
474
+ class NestedChatConfigBuilder {
475
+ config = {};
476
+ /**
477
+ * Set the config ID
478
+ * @param id - Configuration ID
479
+ */
480
+ withId(id) {
481
+ this.config.id = id;
482
+ return this;
483
+ }
484
+ /**
485
+ * Set the config name
486
+ * @param name - Configuration name
487
+ */
488
+ withName(name) {
489
+ this.config.name = name;
490
+ return this;
491
+ }
492
+ /**
493
+ * Set a keyword trigger
494
+ * @param keywords - Keywords to trigger the nested chat
495
+ */
496
+ withKeywordTrigger(keywords) {
497
+ this.config.trigger = {
498
+ type: 'keyword',
499
+ value: keywords,
500
+ description: `Triggered by keyword(s): ${Array.isArray(keywords) ? keywords.join(', ') : keywords}`,
501
+ };
502
+ return this;
503
+ }
504
+ /**
505
+ * Set a participant trigger
506
+ * @param participants - Participants that trigger the nested chat
507
+ */
508
+ withParticipantTrigger(participants) {
509
+ this.config.trigger = {
510
+ type: 'participant',
511
+ value: participants,
512
+ description: `Triggered by participant(s): ${Array.isArray(participants) ? participants.join(', ') : participants}`,
513
+ };
514
+ return this;
515
+ }
516
+ /**
517
+ * Set a condition trigger
518
+ * @param condition - Condition expression or function
519
+ */
520
+ withConditionTrigger(condition) {
521
+ this.config.trigger = {
522
+ type: 'condition',
523
+ value: condition,
524
+ description: 'Triggered by condition',
525
+ };
526
+ return this;
527
+ }
528
+ /**
529
+ * Set a manual trigger
530
+ * @param stateKey - State key to check for manual trigger
531
+ */
532
+ withManualTrigger(stateKey) {
533
+ this.config.trigger = {
534
+ type: 'manual',
535
+ value: stateKey,
536
+ description: `Manually triggered via state key: ${stateKey}`,
537
+ };
538
+ return this;
539
+ }
540
+ /**
541
+ * Set the participants for the nested chat
542
+ * @param participants - Participant names
543
+ */
544
+ withParticipants(participants) {
545
+ this.config.participants = participants;
546
+ return this;
547
+ }
548
+ /**
549
+ * Set the maximum rounds
550
+ * @param maxRounds - Maximum number of rounds
551
+ */
552
+ withMaxRounds(maxRounds) {
553
+ this.config.maxRounds = maxRounds;
554
+ return this;
555
+ }
556
+ /**
557
+ * Set the summary method
558
+ * @param method - Summary method
559
+ */
560
+ withSummaryMethod(method) {
561
+ this.config.summaryMethod = method;
562
+ return this;
563
+ }
564
+ /**
565
+ * Set the initial prompt
566
+ * @param prompt - Prompt for the nested chat
567
+ */
568
+ withPrompt(prompt) {
569
+ this.config.prompt = prompt;
570
+ return this;
571
+ }
572
+ /**
573
+ * Enable context sharing with parent
574
+ */
575
+ withSharedContext() {
576
+ this.config.shareContext = true;
577
+ return this;
578
+ }
579
+ /**
580
+ * Build the configuration
581
+ * @returns Built nested chat configuration
582
+ */
583
+ build() {
584
+ if (!this.config.id) {
585
+ this.config.id = (0, uuid_1.v4)();
586
+ }
587
+ if (!this.config.name) {
588
+ this.config.name = `nested-chat-${this.config.id}`;
589
+ }
590
+ if (!this.config.trigger) {
591
+ throw new Error('Nested chat config requires a trigger');
592
+ }
593
+ if (!this.config.participants || this.config.participants.length < 2) {
594
+ throw new Error('Nested chat requires at least 2 participants');
595
+ }
596
+ return this.config;
597
+ }
598
+ }
599
+ exports.NestedChatConfigBuilder = NestedChatConfigBuilder;
600
+ //# sourceMappingURL=nested-chat.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"nested-chat.js","sourceRoot":"","sources":["../src/nested-chat.ts"],"names":[],"mappings":"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"}