@llmrtc/llmrtc-core 1.0.0 → 1.2.0

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.
@@ -100,12 +100,10 @@ export class ConversationOrchestrator {
100
100
  content: transcript.text,
101
101
  attachments: attachments.length ? attachments : undefined
102
102
  };
103
- if (this.systemPrompt && !this.history.length) {
104
- this.history.push({ role: 'system', content: this.systemPrompt });
105
- }
103
+ this.ensureSystemMessage();
106
104
  this.pushHistory(userMessage);
107
105
  const llmRequest = {
108
- messages: this.history.slice(-this.historyLimit),
106
+ messages: this.buildRequestMessages(),
109
107
  config: {
110
108
  systemPrompt: this.systemPrompt,
111
109
  historyLimit: this.historyLimit,
@@ -132,7 +130,8 @@ export class ConversationOrchestrator {
132
130
  *
133
131
  * Hooks and metrics are called throughout the turn lifecycle.
134
132
  */
135
- async *runTurnStream(audio, attachments = []) {
133
+ async *runTurnStream(audio, attachments = [], options) {
134
+ const signal = options?.signal;
136
135
  // Generate turn context
137
136
  const turnStartTime = Date.now();
138
137
  const ctx = {
@@ -140,6 +139,109 @@ export class ConversationOrchestrator {
140
139
  sessionId: this.sessionId,
141
140
  startTime: turnStartTime
142
141
  };
142
+ let errored = false;
143
+ let turnEnded = false;
144
+ const endTurn = async () => {
145
+ if (turnEnded)
146
+ return;
147
+ turnEnded = true;
148
+ const turnTiming = createTimingInfo(turnStartTime, Date.now());
149
+ this.metrics.timing(MetricNames.TURN_DURATION, turnTiming.durationMs);
150
+ await callHookSafe(this.hooks.onTurnEnd, ctx, turnTiming);
151
+ };
152
+ try {
153
+ yield* this.runTurnStreamInternal(ctx, audio, attachments, signal, () => {
154
+ errored = true;
155
+ });
156
+ }
157
+ finally {
158
+ // Runs on normal completion, barge-in abort, and consumer abandonment,
159
+ // so turn metrics and onTurnEnd are never skipped. Errors keep the
160
+ // previous semantics: the turn ends without onTurnEnd.
161
+ if (!errored) {
162
+ await endTurn();
163
+ }
164
+ }
165
+ }
166
+ /**
167
+ * Streaming-STT version of runTurnStream: consumes live audio frames
168
+ * (16kHz mono 16-bit PCM Buffers) through the STT provider's
169
+ * transcribeStream, yielding every interim STTResult as it arrives.
170
+ * Final results are concatenated into the transcript that drives the
171
+ * same LLM/TTS pipeline as runTurnStream. Requires a provider with
172
+ * transcribeStream support.
173
+ */
174
+ async *runTurnStreamFromAudioStream(frames, attachments = [], options) {
175
+ const signal = options?.signal;
176
+ const turnStartTime = Date.now();
177
+ const ctx = {
178
+ turnId: globalThis.crypto.randomUUID(),
179
+ sessionId: this.sessionId,
180
+ startTime: turnStartTime
181
+ };
182
+ let errored = false;
183
+ let turnEnded = false;
184
+ const endTurn = async () => {
185
+ if (turnEnded)
186
+ return;
187
+ turnEnded = true;
188
+ const turnTiming = createTimingInfo(turnStartTime, Date.now());
189
+ this.metrics.timing(MetricNames.TURN_DURATION, turnTiming.durationMs);
190
+ await callHookSafe(this.hooks.onTurnEnd, ctx, turnTiming);
191
+ };
192
+ try {
193
+ yield* this.runTurnStreamFromAudioStreamInternal(ctx, frames, attachments, signal, () => {
194
+ errored = true;
195
+ });
196
+ }
197
+ finally {
198
+ if (!errored) {
199
+ await endTurn();
200
+ }
201
+ }
202
+ }
203
+ async *runTurnStreamFromAudioStreamInternal(ctx, frames, attachments, signal, markErrored) {
204
+ // Audio arrives as a stream, so turn/STT hooks receive an empty buffer
205
+ const emptyAudio = Buffer.alloc(0);
206
+ await callHookSafe(this.hooks.onTurnStart, ctx, emptyAudio);
207
+ const sttStartTime = Date.now();
208
+ await callHookSafe(this.hooks.onSTTStart, ctx, emptyAudio);
209
+ let transcript;
210
+ try {
211
+ if (!this.providers.stt.transcribeStream) {
212
+ throw new Error(`STT provider "${this.providers.stt.name}" does not support transcribeStream`);
213
+ }
214
+ // Yield every interim result; providers may emit several finals
215
+ // (one per segment), so finals are accumulated into the transcript
216
+ const finalParts = [];
217
+ let lastResult;
218
+ for await (const result of this.providers.stt.transcribeStream(frames)) {
219
+ yield result;
220
+ lastResult = result;
221
+ if (result.isFinal && result.text.trim()) {
222
+ finalParts.push(result.text.trim());
223
+ }
224
+ if (signal?.aborted) {
225
+ return;
226
+ }
227
+ }
228
+ transcript = { text: finalParts.join(' '), isFinal: true, raw: lastResult?.raw };
229
+ const sttTiming = createTimingInfo(sttStartTime, Date.now());
230
+ this.metrics.timing(MetricNames.STT_DURATION, sttTiming.durationMs, {
231
+ provider: this.providers.stt.name
232
+ });
233
+ await callHookSafe(this.hooks.onSTTEnd, ctx, transcript, sttTiming);
234
+ }
235
+ catch (error) {
236
+ const err = error instanceof Error ? error : new Error(String(error));
237
+ await callHookSafe(this.hooks.onSTTError, ctx, err);
238
+ this.metrics.increment(MetricNames.ERRORS, 1, { component: 'stt' });
239
+ markErrored();
240
+ throw error;
241
+ }
242
+ yield* this.completeTurnFromTranscript(ctx, transcript, attachments, signal, markErrored);
243
+ }
244
+ async *runTurnStreamInternal(ctx, audio, attachments, signal, markErrored) {
143
245
  // Call onTurnStart hook
144
246
  await callHookSafe(this.hooks.onTurnStart, ctx, audio);
145
247
  // -------------------------------------------------------------------------
@@ -160,12 +262,29 @@ export class ConversationOrchestrator {
160
262
  const err = error instanceof Error ? error : new Error(String(error));
161
263
  await callHookSafe(this.hooks.onSTTError, ctx, err);
162
264
  this.metrics.increment(MetricNames.ERRORS, 1, { component: 'stt' });
265
+ markErrored();
163
266
  throw error;
164
267
  }
165
- this.pushHistory({ role: 'user', content: transcript.text, attachments: attachments.length ? attachments : undefined });
166
268
  yield transcript;
269
+ yield* this.completeTurnFromTranscript(ctx, transcript, attachments, signal, markErrored);
270
+ }
271
+ /**
272
+ * Everything after the transcript is known: history, LLM, TTS.
273
+ * Shared by the buffered and streaming STT entry points.
274
+ */
275
+ async *completeTurnFromTranscript(ctx, transcript, attachments, signal, markErrored) {
276
+ // Empty transcript guard: VAD misfires and silent audio produce empty
277
+ // text - don't burn an LLM/TTS round trip or pollute history with it.
278
+ if (!transcript.text.trim()) {
279
+ return;
280
+ }
281
+ if (signal?.aborted) {
282
+ return;
283
+ }
284
+ this.ensureSystemMessage();
285
+ this.pushHistory({ role: 'user', content: transcript.text, attachments: attachments.length ? attachments : undefined });
167
286
  const llmRequest = {
168
- messages: this.history.slice(-this.historyLimit),
287
+ messages: this.buildRequestMessages(),
169
288
  config: {
170
289
  systemPrompt: this.systemPrompt,
171
290
  historyLimit: this.historyLimit,
@@ -183,28 +302,44 @@ export class ConversationOrchestrator {
183
302
  let llmFirstChunkTime;
184
303
  // Non-streaming LLM fallback
185
304
  if (!this.providers.llm.stream) {
305
+ let llm;
306
+ let llmTiming;
186
307
  try {
187
- const llm = await this.providers.llm.complete(llmRequest);
188
- const llmTiming = createTimingInfo(llmStartTime, Date.now());
308
+ llm = await this.providers.llm.complete(llmRequest);
309
+ llmTiming = createTimingInfo(llmStartTime, Date.now());
189
310
  this.metrics.timing(MetricNames.LLM_DURATION, llmTiming.durationMs, {
190
311
  provider: this.providers.llm.name
191
312
  });
192
- await callHookSafe(this.hooks.onLLMEnd, ctx, llm, llmTiming);
193
- this.pushHistory({ role: 'assistant', content: llm.fullText });
194
- yield llm;
195
- yield* this.generateTTSWithHooks(ctx, llm.fullText);
196
- // Turn complete
197
- const turnTiming = createTimingInfo(turnStartTime, Date.now());
198
- this.metrics.timing(MetricNames.TURN_DURATION, turnTiming.durationMs);
199
- await callHookSafe(this.hooks.onTurnEnd, ctx, turnTiming);
200
- return;
201
313
  }
202
314
  catch (error) {
203
315
  const err = error instanceof Error ? error : new Error(String(error));
204
316
  await callHookSafe(this.hooks.onLLMError, ctx, err);
205
317
  this.metrics.increment(MetricNames.ERRORS, 1, { component: 'llm' });
318
+ markErrored();
206
319
  throw error;
207
320
  }
321
+ if (llm.stopReason === 'refusal' ||
322
+ llm.stopReason === 'content_filter' ||
323
+ llm.stopReason === 'context_overflow' ||
324
+ llm.stopReason === 'pause_turn') {
325
+ this.logger.warn?.(`[orchestrator] LLM stopped with '${llm.stopReason}' - the response may be empty or truncated`);
326
+ }
327
+ // Guardrail: a throw from onLLMEnd cancels the response - it is not
328
+ // committed to history and no TTS is produced.
329
+ try {
330
+ await this.hooks.onLLMEnd?.(ctx, llm, llmTiming);
331
+ }
332
+ catch (error) {
333
+ markErrored();
334
+ throw error;
335
+ }
336
+ this.pushHistory({ role: 'assistant', content: llm.fullText });
337
+ yield llm;
338
+ if (signal?.aborted) {
339
+ return;
340
+ }
341
+ yield* this.generateTTSWithHooks(ctx, llm.fullText);
342
+ return;
208
343
  }
209
344
  // Check if we can do streaming TTS (requires config enabled AND provider support)
210
345
  const canStreamTTS = this.streamingTTS && !!this.providers.tts.speakStream;
@@ -212,11 +347,16 @@ export class ConversationOrchestrator {
212
347
  let pendingText = '';
213
348
  let ttsStarted = false;
214
349
  let chunkIndex = 0;
215
- const ttsStartTime = Date.now();
350
+ let ttsStartTime;
351
+ let aborted = false;
216
352
  try {
217
353
  for await (const chunk of this.providers.llm.stream(llmRequest)) {
354
+ if (signal?.aborted) {
355
+ aborted = true;
356
+ break;
357
+ }
218
358
  // Track time to first token
219
- if (chunkIndex === 0 && chunk.content) {
359
+ if (llmFirstChunkTime === undefined && chunk.content) {
220
360
  llmFirstChunkTime = Date.now();
221
361
  this.metrics.timing(MetricNames.LLM_TTFT, llmFirstChunkTime - llmStartTime, {
222
362
  provider: this.providers.llm.name
@@ -239,37 +379,62 @@ export class ConversationOrchestrator {
239
379
  const completeSentences = sentences.slice(0, -1);
240
380
  pendingText = sentences[sentences.length - 1];
241
381
  for (const completeSentence of completeSentences) {
382
+ if (signal?.aborted) {
383
+ aborted = true;
384
+ break;
385
+ }
242
386
  if (completeSentence.trim()) {
243
387
  // Signal TTS start on first sentence
244
388
  if (!ttsStarted) {
245
389
  ttsStarted = true;
390
+ ttsStartTime = Date.now();
246
391
  await callHookSafe(this.hooks.onTTSStart, ctx, completeSentence.trim());
247
392
  yield { type: 'tts-start' };
248
393
  }
249
394
  // Stream TTS for this sentence
250
- yield* this.streamTTSChunksWithHooks(ctx, completeSentence.trim());
395
+ yield* this.streamTTSChunksWithHooks(ctx, completeSentence.trim(), signal);
251
396
  }
252
397
  }
398
+ if (aborted) {
399
+ break;
400
+ }
253
401
  }
254
402
  }
255
403
  }
256
- // LLM complete
257
- const llmEndTime = Date.now();
258
- const llmTiming = createTimingInfo(llmStartTime, llmEndTime);
259
- this.metrics.timing(MetricNames.LLM_DURATION, llmTiming.durationMs, {
260
- provider: this.providers.llm.name
261
- });
262
- const llmResult = { fullText: assembled };
263
- await callHookSafe(this.hooks.onLLMEnd, ctx, llmResult, llmTiming);
264
- this.pushHistory({ role: 'assistant', content: assembled });
265
- yield llmResult;
266
404
  }
267
405
  catch (error) {
268
406
  const err = error instanceof Error ? error : new Error(String(error));
269
407
  await callHookSafe(this.hooks.onLLMError, ctx, err);
270
408
  this.metrics.increment(MetricNames.ERRORS, 1, { component: 'llm' });
409
+ markErrored();
271
410
  throw error;
272
411
  }
412
+ // LLM complete (or interrupted)
413
+ const llmTiming = createTimingInfo(llmStartTime, Date.now());
414
+ this.metrics.timing(MetricNames.LLM_DURATION, llmTiming.durationMs, {
415
+ provider: this.providers.llm.name
416
+ });
417
+ if (aborted) {
418
+ // Barge-in: commit what was generated so far so history reflects what
419
+ // the user (partially) heard, then stop without further TTS.
420
+ if (assembled) {
421
+ this.pushHistory({ role: 'assistant', content: assembled });
422
+ }
423
+ return;
424
+ }
425
+ const llmResult = { fullText: assembled };
426
+ // Guardrail: a throw from onLLMEnd cancels the response - it is not
427
+ // committed to history and no further TTS is produced. (With streaming
428
+ // TTS, audio for earlier sentences may already have been emitted.)
429
+ try {
430
+ await this.hooks.onLLMEnd?.(ctx, llmResult, llmTiming);
431
+ }
432
+ catch (error) {
433
+ markErrored();
434
+ throw error;
435
+ }
436
+ this.pushHistory({ role: 'assistant', content: assembled });
437
+ yield llmResult;
273
438
  // -------------------------------------------------------------------------
274
439
  // TTS Phase (remaining text)
275
440
  // -------------------------------------------------------------------------
@@ -277,17 +442,18 @@ export class ConversationOrchestrator {
277
442
  // Handle remaining text after LLM completes
278
443
  if (canStreamTTS) {
279
444
  const remainingText = pendingText.trim();
280
- if (remainingText) {
445
+ if (remainingText && !signal?.aborted) {
281
446
  if (!ttsStarted) {
282
447
  ttsStarted = true;
448
+ ttsStartTime = Date.now();
283
449
  await callHookSafe(this.hooks.onTTSStart, ctx, remainingText);
284
450
  yield { type: 'tts-start' };
285
451
  }
286
- yield* this.streamTTSChunksWithHooks(ctx, remainingText);
452
+ yield* this.streamTTSChunksWithHooks(ctx, remainingText, signal);
287
453
  }
288
454
  // Signal TTS complete
289
455
  if (ttsStarted) {
290
- const ttsTiming = createTimingInfo(ttsStartTime, Date.now());
456
+ const ttsTiming = createTimingInfo(ttsStartTime ?? llmStartTime, Date.now());
291
457
  this.metrics.timing(MetricNames.TTS_DURATION, ttsTiming.durationMs, {
292
458
  provider: this.providers.tts.name
293
459
  });
@@ -295,7 +461,7 @@ export class ConversationOrchestrator {
295
461
  yield { type: 'tts-complete' };
296
462
  }
297
463
  }
298
- else {
464
+ else if (!signal?.aborted) {
299
465
  // Fallback to non-streaming TTS
300
466
  yield* this.generateTTSWithHooks(ctx, assembled);
301
467
  }
@@ -304,12 +470,9 @@ export class ConversationOrchestrator {
304
470
  const err = error instanceof Error ? error : new Error(String(error));
305
471
  await callHookSafe(this.hooks.onTTSError, ctx, err);
306
472
  this.metrics.increment(MetricNames.ERRORS, 1, { component: 'tts' });
473
+ markErrored();
307
474
  throw error;
308
475
  }
309
- // Turn complete
310
- const turnTiming = createTimingInfo(turnStartTime, Date.now());
311
- this.metrics.timing(MetricNames.TURN_DURATION, turnTiming.durationMs);
312
- await callHookSafe(this.hooks.onTurnEnd, ctx, turnTiming);
313
476
  }
314
477
  /**
315
478
  * Split text into sentences using custom chunker or default regex
@@ -336,26 +499,37 @@ export class ConversationOrchestrator {
336
499
  * Stream TTS chunks for a sentence using PCM format with hooks.
337
500
  * Yields TTSChunk events as audio data arrives.
338
501
  */
339
- async *streamTTSChunksWithHooks(ctx, text) {
502
+ async *streamTTSChunksWithHooks(ctx, text, signal) {
340
503
  if (!this.providers.tts.speakStream)
341
504
  return;
505
+ const sampleRate = this.providers.tts.pcmSampleRate ?? 24000;
342
506
  let chunkIndex = 0;
507
+ let emittedChunks = false;
343
508
  try {
344
509
  for await (const audioChunk of this.providers.tts.speakStream(text, { format: 'pcm' })) {
510
+ if (signal?.aborted) {
511
+ return;
512
+ }
345
513
  const ttsChunk = {
346
514
  type: 'tts-chunk',
347
515
  audio: audioChunk,
348
516
  format: 'pcm',
349
- sampleRate: 24000, // OpenAI/ElevenLabs PCM is 24kHz
517
+ sampleRate,
350
518
  sentence: text
351
519
  };
352
520
  await callHookSafe(this.hooks.onTTSChunk, ctx, ttsChunk, chunkIndex);
353
521
  chunkIndex++;
522
+ emittedChunks = true;
354
523
  yield ttsChunk;
355
524
  }
356
525
  }
357
526
  catch (err) {
358
527
  this.logger.error?.('[orchestrator] TTS stream error:', err);
528
+ if (emittedChunks) {
529
+ // Part of this sentence was already emitted; re-speaking it would
530
+ // duplicate audio, so surface the failure instead.
531
+ throw err;
532
+ }
359
533
  // Fallback: try non-streaming TTS
360
534
  try {
361
535
  const tts = await this.providers.tts.speak(text, { format: 'pcm' });
@@ -363,7 +537,7 @@ export class ConversationOrchestrator {
363
537
  type: 'tts-chunk',
364
538
  audio: tts.audio,
365
539
  format: 'pcm',
366
- sampleRate: 24000,
540
+ sampleRate,
367
541
  sentence: text
368
542
  };
369
543
  await callHookSafe(this.hooks.onTTSChunk, ctx, ttsChunk, chunkIndex);
@@ -392,58 +566,31 @@ export class ConversationOrchestrator {
392
566
  yield { type: 'tts-complete' };
393
567
  }
394
568
  /**
395
- * @deprecated Use streamTTSChunksWithHooks instead
396
- * Stream TTS chunks for a sentence using PCM format.
569
+ * Ensure the system prompt is seeded as the first history message.
397
570
  */
398
- async *streamTTSChunks(text) {
399
- if (!this.providers.tts.speakStream)
400
- return;
401
- try {
402
- for await (const audioChunk of this.providers.tts.speakStream(text, { format: 'pcm' })) {
403
- yield {
404
- type: 'tts-chunk',
405
- audio: audioChunk,
406
- format: 'pcm',
407
- sampleRate: 24000, // OpenAI/ElevenLabs PCM is 24kHz
408
- sentence: text
409
- };
410
- }
411
- }
412
- catch (err) {
413
- this.logger.error?.('[orchestrator] TTS stream error:', err);
414
- // Fallback: try non-streaming TTS
415
- try {
416
- const tts = await this.providers.tts.speak(text, { format: 'pcm' });
417
- yield {
418
- type: 'tts-chunk',
419
- audio: tts.audio,
420
- format: 'pcm',
421
- sampleRate: 24000,
422
- sentence: text
423
- };
424
- }
425
- catch (fallbackErr) {
426
- this.logger.error?.('[orchestrator] TTS fallback also failed:', fallbackErr);
427
- }
571
+ ensureSystemMessage() {
572
+ if (this.systemPrompt && this.history[0]?.role !== 'system') {
573
+ this.history.unshift({ role: 'system', content: this.systemPrompt });
428
574
  }
429
575
  }
430
576
  /**
431
- * @deprecated Use generateTTSWithHooks instead
432
- * Non-streaming TTS: generates complete audio and yields as single TTSResult.
577
+ * Build the message window for an LLM request.
578
+ * The system message is always included and does not consume history slots,
579
+ * so long conversations never lose the assistant's instructions.
433
580
  */
434
- async *generateTTS(text) {
435
- yield { type: 'tts-start' };
436
- const tts = await this.providers.tts.speak(text);
437
- yield tts;
438
- yield { type: 'tts-complete' };
581
+ buildRequestMessages() {
582
+ const hasSystem = this.history[0]?.role === 'system';
583
+ const conversation = hasSystem ? this.history.slice(1) : this.history;
584
+ const window = conversation.slice(-this.historyLimit);
585
+ return hasSystem ? [this.history[0], ...window] : window;
439
586
  }
440
587
  pushHistory(message) {
441
588
  this.history.push(message);
442
- if (this.history.length > this.historyLimit + 2) {
443
- // keep system prompt if present
444
- const start = this.history[0]?.role === 'system' ? 1 : 0;
445
- const overflow = this.history.length - (this.historyLimit + 2);
446
- this.history.splice(start, overflow);
589
+ const hasSystem = this.history[0]?.role === 'system';
590
+ const start = hasSystem ? 1 : 0;
591
+ const maxLength = this.historyLimit + 2 + start;
592
+ if (this.history.length > maxLength) {
593
+ this.history.splice(start, this.history.length - maxLength);
447
594
  }
448
595
  }
449
596
  }
@@ -1 +1 @@
1
- {"version":3,"file":"orchestrator.js","sourceRoot":"","sources":["../src/orchestrator.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"orchestrator.js","sourceRoot":"","sources":["../src/orchestrator.ts"],"names":[],"mappings":"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"}
@@ -17,6 +17,12 @@ export interface PlaybookEngineOptions {
17
17
  warn: (msg: string, ...args: unknown[]) => void;
18
18
  error: (msg: string, ...args: unknown[]) => void;
19
19
  };
20
+ /**
21
+ * Called when a transition with clearHistory is executed. The engine does
22
+ * not own the conversation history, so the owner (typically an
23
+ * orchestrator) supplies the actual clearing behavior.
24
+ */
25
+ onClearHistory?: () => void;
20
26
  }
21
27
  /**
22
28
  * Event emitted during playbook execution
@@ -135,7 +135,7 @@ export class PlaybookEngine {
135
135
  switch (condition.type) {
136
136
  case 'tool_call':
137
137
  return context.lastToolCalls?.some(tc => tc.name === condition.toolName) ?? false;
138
- case 'intent':
138
+ case 'intent': {
139
139
  // Intent detection would typically be done by the LLM or a classifier
140
140
  // For now, check if the intent is in the conversation context
141
141
  const detectedIntent = context.conversationContext.detectedIntent;
@@ -146,9 +146,11 @@ export class PlaybookEngine {
146
146
  return detectedIntent === condition.intent && (confidence ?? 0) >= condition.confidence;
147
147
  }
148
148
  return detectedIntent === condition.intent;
149
- case 'keyword':
149
+ }
150
+ case 'keyword': {
150
151
  const message = context.lastAssistantMessage?.toLowerCase() ?? '';
151
152
  return condition.keywords.some(kw => message.includes(kw.toLowerCase()));
153
+ }
152
154
  case 'llm_decision':
153
155
  // LLM decision is handled via the playbook_transition tool
154
156
  // Check if the LLM called the transition tool
@@ -255,9 +257,11 @@ export class PlaybookEngine {
255
257
  }
256
258
  // Emit exit event
257
259
  await this.emit({ type: 'stage_exit', stage: fromStage, nextStage: toStage });
258
- // Clear history if requested
260
+ // Clear conversation history if requested. The accumulated
261
+ // conversationContext is intentionally preserved - it carries
262
+ // cross-stage state, not messages.
259
263
  if (transition.action.clearHistory) {
260
- this.state.conversationContext = {};
264
+ this.options.onClearHistory?.();
261
265
  }
262
266
  // Record transition in history
263
267
  this.state.transitionHistory.push({