flow-agent-bridge 0.31.0 → 0.33.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.
@@ -1,11 +1,32 @@
1
+ import { randomUUID } from 'node:crypto';
2
+ import { WebSocket } from 'ws';
3
+ import { CallTurnQueue, HuddleContext } from './huddle-context.js';
4
+ import { SharedReplyScheduler } from './huddle-replies.js';
1
5
  const TERMINAL_INVITE_STATES = new Set(['ended', 'declined', 'missed', 'cancelled']);
2
- const MAX_HANDOFF_LENGTH = 4000;
3
6
  let liveKitLoggerInitialized = false;
7
+ /** Convert LiveKit's call history into inputs for resumable and stateless CLIs. */
8
+ export function buildVoiceRuntimeInput(messages, callerName, agentName) {
9
+ const conversational = messages.filter((message) => (message.role === 'user' || message.role === 'assistant') && message.text.trim().length > 0);
10
+ const latestUser = [...conversational]
11
+ .reverse()
12
+ .find((message) => message.role === 'user')
13
+ ?.text.trim();
14
+ if (!latestUser)
15
+ return null;
16
+ return {
17
+ prompt: latestUser,
18
+ transcript: conversational
19
+ .map((message) => `${message.role === 'user' ? callerName : agentName}: ${message.text.trim()}`)
20
+ .join('\n'),
21
+ };
22
+ }
4
23
  /**
5
24
  * Turns the existing DM ring into a real bot call. The server remains the
6
25
  * source of truth for invite and roster state; this class just performs the
7
26
  * same accept / join / leave operations as a human client, then attaches a
8
- * realtime audio participant to the minted LiveKit room token.
27
+ * realtime audio participant to the minted LiveKit room token. Speech uses a
28
+ * short-lived inference grant from Flow; reasoning uses the bridge's existing
29
+ * Claude/Codex runtime login.
9
30
  */
10
31
  export class HuddleVoiceManager {
11
32
  options;
@@ -15,12 +36,61 @@ export class HuddleVoiceManager {
15
36
  terminalInvites = new Set();
16
37
  handledInvites = new Set();
17
38
  sessionFactory;
39
+ shared = null;
18
40
  constructor(options) {
19
41
  this.options = options;
20
42
  this.sessionFactory = options.sessionFactory ?? createLiveKitVoiceSession;
21
43
  }
22
44
  get activeChannelId() {
23
- return this.active?.channelId ?? null;
45
+ return this.active?.channelId ?? this.shared?.channelId ?? null;
46
+ }
47
+ handleMessage(message, notify = true) {
48
+ return this.shared?.context.message(message, notify) ?? false;
49
+ }
50
+ handleArtifact(artifact, deleted = false) {
51
+ this.shared?.context.artifact(artifact, deleted);
52
+ }
53
+ removeMessage(id, channelId, at) {
54
+ if (this.shared?.channelId === channelId)
55
+ this.shared.context.removeMessage(id, at);
56
+ }
57
+ /** Backfill after socket reconnect; versions/deduplication preserve newer live events. */
58
+ async refreshContext(initial = false) {
59
+ const shared = this.shared;
60
+ if (!shared)
61
+ return;
62
+ const at = new Date().toISOString();
63
+ let timeout;
64
+ try {
65
+ const [page, artifacts] = await Promise.race([
66
+ Promise.all([
67
+ this.options.api.listMessages?.(shared.channelId, 200),
68
+ this.options.listArtifacts?.(),
69
+ ]),
70
+ new Promise((_, reject) => { timeout = setTimeout(() => reject(new Error('Context refresh timed out')), 5000); }),
71
+ ]);
72
+ if (this.shared !== shared)
73
+ return;
74
+ if (page)
75
+ shared.context.reconcileMessages(page.messages, at, initial ? undefined : shared.startedAt);
76
+ if (artifacts)
77
+ shared.context.reconcileArtifacts(artifacts, at, initial ? undefined : shared.startedAt);
78
+ }
79
+ catch {
80
+ this.options.log('could not refresh shared call material');
81
+ }
82
+ finally {
83
+ if (timeout)
84
+ clearTimeout(timeout);
85
+ }
86
+ }
87
+ async memberLeft(channelId, userId) {
88
+ const shared = this.shared;
89
+ if (shared?.channelId !== channelId || (userId !== this.options.agentId && userId !== shared.callerId))
90
+ return;
91
+ this.rememberTerminal(shared.inviteId);
92
+ await this.endActive('call participant lost channel access');
93
+ await this.closeShared(shared.inviteId);
24
94
  }
25
95
  async handleInvite(data) {
26
96
  if (this.stopping)
@@ -50,11 +120,6 @@ export class HuddleVoiceManager {
50
120
  await this.declineWithMessage(invite.id, invite.channelId, `📞 Voice huddles are turned off for me. Set \`voice.enabled\` to \`true\` in my bridge config and restart me.`);
51
121
  return;
52
122
  }
53
- const apiKey = this.options.apiKey?.trim();
54
- if (!apiKey) {
55
- await this.declineWithMessage(invite.id, invite.channelId, `📞 I can’t answer voice yet because my bridge is missing \`OPENAI_API_KEY\`. Add it to the bridge environment, restart me, and call again.`);
56
- return;
57
- }
58
123
  // Reserve the one call slot before the asynchronous directory lookup. Two
59
124
  // different rings can arrive on the socket in the same event-loop turn.
60
125
  this.acceptingInviteId = invite.id;
@@ -66,6 +131,25 @@ export class HuddleVoiceManager {
66
131
  }
67
132
  if (this.stopping || this.terminalInvites.has(invite.id))
68
133
  return;
134
+ const shared = {
135
+ inviteId: invite.id, channelId: invite.channelId, callerId: invite.startedBy, startedAt: new Date().toISOString(),
136
+ abort: new AbortController(), turns: new CallTurnQueue(),
137
+ session: null, changed: false,
138
+ context: null,
139
+ };
140
+ shared.context = new HuddleContext({
141
+ channelId: invite.channelId, callerId: invite.startedBy,
142
+ download: (id, signal) => {
143
+ if (!this.options.api.downloadCallFile)
144
+ throw new Error('Call file downloads are unavailable');
145
+ return this.options.api.downloadCallFile(id, signal);
146
+ },
147
+ changed: () => {
148
+ shared.changed = true;
149
+ shared.session?.sharedMaterialChanged?.();
150
+ },
151
+ });
152
+ this.shared = shared;
69
153
  // Accept first so the caller stops hearing a ring immediately. Context
70
154
  // loading and model connection happen while both users are in the room.
71
155
  const room = await this.options.api.acceptHuddleInvite(invite.id);
@@ -75,10 +159,16 @@ export class HuddleVoiceManager {
75
159
  return;
76
160
  }
77
161
  const instructions = await this.options.buildInstructions(invite.channelId, invite.startedBy);
162
+ await this.refreshContext(true);
78
163
  if (this.stopping || this.terminalInvites.has(invite.id)) {
79
164
  await this.leaveQuietly(invite.channelId);
80
165
  return;
81
166
  }
167
+ if (!room.inferenceToken?.trim()) {
168
+ throw new Error('Flow server did not provide an agent inference token; update the server and bridge together');
169
+ }
170
+ const runtimeSessionId = randomUUID();
171
+ let runtimeStarted = false;
82
172
  let endedDuringStart = false;
83
173
  const session = await this.sessionFactory({
84
174
  url: room.url,
@@ -87,13 +177,28 @@ export class HuddleVoiceManager {
87
177
  callerName: this.options.callerName(invite.startedBy),
88
178
  agentName: this.options.agentName,
89
179
  instructions,
90
- apiKey,
180
+ inferenceToken: room.inferenceToken,
91
181
  config: this.options.config,
92
- handoff: async (request) => {
93
- const clean = request.trim().slice(0, MAX_HANDOFF_LENGTH);
94
- if (!clean)
95
- return 'Nothing was queued because the request was empty.';
96
- return this.options.handoff(invite.channelId, invite.startedBy, clean);
182
+ runTurn: async (turn) => {
183
+ const signal = AbortSignal.any([turn.signal, shared.abort.signal]);
184
+ return shared.turns.run(signal, async () => {
185
+ const material = shared.context.snapshot();
186
+ const context = material.text ? `\n\n${material.text}` : '';
187
+ const result = await this.options.runTurn({
188
+ ...turn, signal,
189
+ prompt: turn.prompt + context,
190
+ transcript: turn.transcript + context,
191
+ imagePaths: material.imagePaths,
192
+ sessionId: runtimeSessionId,
193
+ resume: runtimeStarted,
194
+ systemPrompt: instructions,
195
+ });
196
+ if (result.ok || result.sawSession)
197
+ runtimeStarted = true;
198
+ if (result.ok && !result.interrupted && !signal.aborted)
199
+ material.acknowledge();
200
+ return result;
201
+ });
97
202
  },
98
203
  onEnded: () => {
99
204
  endedDuringStart = true;
@@ -112,6 +217,9 @@ export class HuddleVoiceManager {
112
217
  callerId: invite.startedBy,
113
218
  session,
114
219
  };
220
+ shared.session = session;
221
+ if (shared.changed)
222
+ session.sharedMaterialChanged?.();
115
223
  this.options.log(`answered huddle from ${this.options.callerName(invite.startedBy)}`);
116
224
  }
117
225
  catch (error) {
@@ -125,6 +233,8 @@ export class HuddleVoiceManager {
125
233
  }
126
234
  }
127
235
  finally {
236
+ if (this.active?.inviteId !== invite.id)
237
+ await this.closeShared(invite.id);
128
238
  if (this.acceptingInviteId === invite.id)
129
239
  this.acceptingInviteId = null;
130
240
  }
@@ -141,6 +251,17 @@ export class HuddleVoiceManager {
141
251
  async stop() {
142
252
  this.stopping = true;
143
253
  await this.endActive('bridge stopping');
254
+ if (this.shared)
255
+ await this.closeShared(this.shared.inviteId);
256
+ }
257
+ async closeShared(inviteId) {
258
+ const shared = this.shared;
259
+ if (!shared || shared.inviteId !== inviteId)
260
+ return;
261
+ this.shared = null;
262
+ shared.abort.abort();
263
+ await shared.turns.idle();
264
+ await shared.context.close().catch(() => this.options.log('call temporary-file cleanup failed'));
144
265
  }
145
266
  async declineWithMessage(inviteId, channelId, message) {
146
267
  await this.options.api
@@ -155,6 +276,7 @@ export class HuddleVoiceManager {
155
276
  if (!active || active.inviteId !== inviteId)
156
277
  return;
157
278
  this.active = null;
279
+ await this.closeShared(inviteId);
158
280
  await this.leaveQuietly(active.channelId);
159
281
  this.options.log('huddle voice session ended');
160
282
  }
@@ -163,8 +285,10 @@ export class HuddleVoiceManager {
163
285
  if (!active)
164
286
  return;
165
287
  this.active = null;
288
+ this.shared?.abort.abort();
166
289
  this.options.log(`ending huddle voice (${reason})`);
167
290
  await active.session.close().catch((error) => this.options.log(`voice close failed: ${errorText(error)}`));
291
+ await this.closeShared(active.inviteId);
168
292
  await this.leaveQuietly(active.channelId);
169
293
  }
170
294
  async leaveQuietly(channelId) {
@@ -191,72 +315,154 @@ export class HuddleVoiceManager {
191
315
  }
192
316
  /**
193
317
  * Production session adapter. Imports are deliberately lazy: a text-only
194
- * bridge can start without loading LiveKit's native RTC binding, and unit
195
- * tests exercise the call state machine without a room or API key.
318
+ * bridge can start without loading LiveKit's native RTC binding. Audio uses
319
+ * LiveKit Inference with a short-lived server-minted grant; the LLM below is
320
+ * the bridge's already-authenticated Claude/Codex CLI runtime.
196
321
  */
197
322
  export async function createLiveKitVoiceSession(options) {
198
- const [{ Room, RoomEvent }, agents, openai] = await Promise.all([
323
+ const [{ Room, RoomEvent }, agents] = await Promise.all([
199
324
  import('@livekit/rtc-node'),
200
325
  import('@livekit/agents'),
201
- import('@livekit/agents-plugin-openai'),
202
326
  ]);
203
- const { llm, voice } = agents;
204
- // Worker-based LiveKit apps get this from cli.runApp(). The bridge embeds an
205
- // AgentSession directly, so it must initialize the framework logger itself.
327
+ const { inference, llm, voice } = agents;
328
+ let sharedReplies;
206
329
  if (!liveKitLoggerInitialized) {
207
330
  agents.initializeLogger({ pretty: false, level: 'warn' });
208
331
  liveKitLoggerInitialized = true;
209
332
  }
333
+ /** Adapt the bridge's ordinary runtime contract to LiveKit's streaming LLM. */
334
+ class RuntimeLLM extends llm.LLM {
335
+ label() {
336
+ return 'flow.bridge-runtime';
337
+ }
338
+ get provider() {
339
+ return 'flow';
340
+ }
341
+ get model() {
342
+ return 'agent-bridge';
343
+ }
344
+ chat(args) {
345
+ return new RuntimeLLMStream(this, {
346
+ chatCtx: args.chatCtx,
347
+ ...(args.toolCtx ? { toolCtx: args.toolCtx } : {}),
348
+ connOptions: args.connOptions ?? agents.DEFAULT_API_CONNECT_OPTIONS,
349
+ });
350
+ }
351
+ }
352
+ class RuntimeLLMStream extends llm.LLMStream {
353
+ async run() {
354
+ const messages = this.chatCtx.items.filter((item) => item.type === 'message');
355
+ const input = buildVoiceRuntimeInput(messages.map((message) => ({ role: message.role, text: message.textContent ?? '' })), options.callerName, options.agentName);
356
+ if (!input)
357
+ return;
358
+ sharedReplies?.consumed();
359
+ const responseId = `bridge-${randomUUID()}`;
360
+ let emitted = false;
361
+ let previous = '';
362
+ const emit = (text) => {
363
+ const clean = text.trim();
364
+ if (!clean || clean === previous || this.abortController.signal.aborted)
365
+ return;
366
+ previous = clean;
367
+ emitted = true;
368
+ this.queue.put({ id: responseId, delta: { role: 'assistant', content: `${clean} ` } });
369
+ };
370
+ const result = await options.runTurn({
371
+ prompt: input.prompt,
372
+ transcript: input.transcript,
373
+ signal: this.abortController.signal,
374
+ onText: emit,
375
+ });
376
+ if (this.abortController.signal.aborted || result.interrupted)
377
+ return;
378
+ if (!emitted && result.text.trim())
379
+ emit(result.text);
380
+ if (!result.ok) {
381
+ options.log(`voice runtime error: ${result.error ?? 'unknown'}`);
382
+ }
383
+ if (!emitted && !result.ok) {
384
+ emit('I hit a problem while working on that. Please try asking me again.');
385
+ }
386
+ }
387
+ }
388
+ const baseUrl = options.config.inferenceUrl.replace(/\/+$/, '');
389
+ const connect = (path, timeout, session) => connectInferenceWebSocket(baseUrl, path, options.inferenceToken, timeout, session);
390
+ // The SDK normally mints an inference token from LIVEKIT_API_SECRET. Flow
391
+ // must never place that project secret on a bot host, so construct the
392
+ // stock streaming codecs and replace only their public WebSocket connector
393
+ // with one authenticated by the narrow, short-lived token from the server.
394
+ const speechToText = new inference.STT({
395
+ model: options.config.sttModel,
396
+ baseURL: baseUrl,
397
+ sampleRate: 16_000,
398
+ encoding: 'pcm_s16le',
399
+ apiKey: 'server-minted-token',
400
+ apiSecret: 'not-used-by-flow-bridge',
401
+ });
402
+ speechToText.connectWs = (timeout) => connect('/stt', timeout, {
403
+ type: 'session.create',
404
+ model: options.config.sttModel,
405
+ settings: { sample_rate: '16000', encoding: 'pcm_s16le', extra: {} },
406
+ connection: { timeout: timeout / 1000, retries: 3 },
407
+ });
408
+ const textToSpeech = new inference.TTS({
409
+ model: options.config.ttsModel,
410
+ voice: options.config.ttsVoice,
411
+ language: 'en',
412
+ baseURL: baseUrl,
413
+ sampleRate: 16_000,
414
+ encoding: 'pcm_s16le',
415
+ apiKey: 'server-minted-token',
416
+ apiSecret: 'not-used-by-flow-bridge',
417
+ });
418
+ textToSpeech.connectWs = (timeout) => connect('/tts', timeout, {
419
+ type: 'session.create',
420
+ model: options.config.ttsModel,
421
+ voice: options.config.ttsVoice,
422
+ language: 'en',
423
+ sample_rate: '16000',
424
+ encoding: 'pcm_s16le',
425
+ extra: {},
426
+ connection: { timeout: timeout / 1000, retries: 3 },
427
+ });
210
428
  const room = new Room();
211
429
  let closing = false;
212
430
  let ended = false;
431
+ let limitTimer;
213
432
  const emitEnded = () => {
214
433
  if (ended)
215
434
  return;
216
435
  ended = true;
436
+ sharedReplies?.close();
437
+ if (limitTimer)
438
+ clearTimeout(limitTimer);
217
439
  options.onEnded();
218
440
  };
219
441
  await room.connect(options.url, options.token, { autoSubscribe: true, dynacast: true });
220
442
  room.on(RoomEvent.Disconnected, emitEnded);
221
- const model = new openai.realtime.RealtimeModel({
222
- apiKey: options.apiKey,
223
- model: options.config.model,
224
- voice: options.config.voice,
225
- maxSessionDuration: options.config.maxSessionMinutes * 60_000,
226
- turnDetection: {
227
- type: 'semantic_vad',
228
- eagerness: 'auto',
229
- create_response: true,
230
- interrupt_response: true,
231
- },
232
- });
233
- const handoffTool = llm.tool({
234
- name: 'handoff_to_chat',
235
- description: 'Queue substantial work in the normal Flow chat agent after the caller explicitly asks you to do it. ' +
236
- 'Use this for code changes, repository work, research, or anything requiring tools. Ask for missing details first.',
237
- parameters: {
238
- type: 'object',
239
- additionalProperties: false,
240
- properties: {
241
- request: {
242
- type: 'string',
243
- minLength: 1,
244
- maxLength: MAX_HANDOFF_LENGTH,
245
- description: 'A self-contained task request preserving the caller’s constraints and decisions from this call.',
246
- },
247
- },
248
- required: ['request'],
249
- },
250
- execute: async (args) => options.handoff(args.request),
251
- });
252
443
  const session = new voice.AgentSession({
253
- llm: model,
444
+ stt: speechToText,
445
+ llm: new RuntimeLLM(),
446
+ tts: textToSpeech,
254
447
  vad: null,
255
448
  userAwayTimeout: null,
256
- turnHandling: { turnDetection: 'realtime_llm' },
449
+ turnHandling: {
450
+ turnDetection: 'stt',
451
+ interruption: { enabled: true },
452
+ },
453
+ });
454
+ sharedReplies = new SharedReplyScheduler({
455
+ idle: () => session.agentState === 'listening' && session.userState !== 'speaking' && !closing && !ended,
456
+ reply: async () => {
457
+ await session.generateReply({
458
+ userInput: '[Flow call update: shared material changed. Acknowledge newly received files briefly, without claiming to have inspected them. If a NEW typed message asks a question, answer it aloud using the shared material. If a file the caller asked about has finished opening, continue their request. Do not repeat completed requests from older messages. Do not post a chat reply.]',
459
+ allowInterruptions: true,
460
+ }).waitForPlayout();
461
+ },
462
+ error: () => options.log('could not speak shared call update'),
257
463
  });
258
464
  session.on(voice.AgentSessionEventTypes.Error, (event) => {
259
- options.log(`realtime voice error: ${errorText(event.error)}`);
465
+ options.log(`huddle voice error: ${errorText(event.error)}`);
260
466
  });
261
467
  session.on(voice.AgentSessionEventTypes.UserInputTranscribed, (event) => {
262
468
  if (event.isFinal && event.transcript.trim())
@@ -266,10 +472,7 @@ export async function createLiveKitVoiceSession(options) {
266
472
  try {
267
473
  await session.start({
268
474
  room,
269
- agent: voice.Agent.create({
270
- instructions: options.instructions,
271
- tools: [handoffTool],
272
- }),
475
+ agent: voice.Agent.create({ instructions: options.instructions }),
273
476
  inputOptions: {
274
477
  participantIdentity: options.callerId,
275
478
  audioEnabled: true,
@@ -286,22 +489,32 @@ export async function createLiveKitVoiceSession(options) {
286
489
  // optional audio, trace, log, and transcript upload disabled as well.
287
490
  record: false,
288
491
  });
289
- session.generateReply({
290
- instructions: `Greet ${options.callerName} by name in one short, natural sentence. ` +
291
- `You just answered their Flow Huddle, so sound like you picked up a call rather than starting a demo.`,
492
+ session.say(`Hey ${options.callerName}, I’m here.`, {
292
493
  allowInterruptions: true,
494
+ addToChatCtx: true,
293
495
  });
496
+ limitTimer = setTimeout(() => {
497
+ options.log(`ending huddle after ${options.config.maxSessionMinutes} minute limit`);
498
+ void session.close();
499
+ }, options.config.maxSessionMinutes * 60_000);
500
+ limitTimer.unref();
294
501
  }
295
502
  catch (error) {
503
+ if (limitTimer)
504
+ clearTimeout(limitTimer);
296
505
  await session.close().catch(() => undefined);
297
506
  await room.disconnect().catch(() => undefined);
298
507
  throw error;
299
508
  }
300
509
  return {
510
+ sharedMaterialChanged: () => sharedReplies?.changed(),
301
511
  close: async () => {
302
512
  if (closing)
303
513
  return;
304
514
  closing = true;
515
+ sharedReplies?.close();
516
+ if (limitTimer)
517
+ clearTimeout(limitTimer);
305
518
  await session.close().catch((error) => options.log(`agent session close failed: ${errorText(error)}`));
306
519
  if (room.isConnected) {
307
520
  await room.disconnect().catch((error) => options.log(`LiveKit disconnect failed: ${errorText(error)}`));
@@ -309,6 +522,40 @@ export async function createLiveKitVoiceSession(options) {
309
522
  },
310
523
  };
311
524
  }
525
+ /** Connect to LiveKit Inference without ever holding the project API secret. */
526
+ export function connectInferenceWebSocket(baseUrl, path, token, timeout, session) {
527
+ const websocketUrl = `${baseUrl.replace(/^http/, 'ws')}${path}`;
528
+ return new Promise((resolve, reject) => {
529
+ const socket = new WebSocket(websocketUrl, { headers: { Authorization: `Bearer ${token}` } });
530
+ const timer = setTimeout(() => {
531
+ cleanup();
532
+ socket.terminate();
533
+ reject(new Error(`LiveKit inference ${path.slice(1)} connection timed out`));
534
+ }, timeout);
535
+ const cleanup = () => {
536
+ clearTimeout(timer);
537
+ socket.off('open', onOpen);
538
+ socket.off('error', onError);
539
+ };
540
+ const onOpen = () => {
541
+ cleanup();
542
+ try {
543
+ socket.send(JSON.stringify(session));
544
+ resolve(socket);
545
+ }
546
+ catch (error) {
547
+ socket.terminate();
548
+ reject(error);
549
+ }
550
+ };
551
+ const onError = (error) => {
552
+ cleanup();
553
+ reject(error);
554
+ };
555
+ socket.once('open', onOpen);
556
+ socket.once('error', onError);
557
+ });
558
+ }
312
559
  function errorText(error) {
313
560
  if (error instanceof Error)
314
561
  return error.message;
@@ -1 +1 @@
1
- {"version":3,"file":"huddle-voice.js","sourceRoot":"","sources":["../src/huddle-voice.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"huddle-voice.js","sourceRoot":"","sources":["../src/huddle-voice.ts"],"names":[],"mappings":"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"}
package/dist/runtime.d.ts CHANGED
@@ -1,5 +1,9 @@
1
1
  import type { RuntimeConfig } from './config.js';
2
2
  export interface RunOpts {
3
+ /** Prepared call images/PDF previews. Claude reads paths; Codex receives image inputs. */
4
+ imagePaths?: string[] | undefined;
5
+ /** Avoid OS command-line limits for document context and call transcripts. */
6
+ stdinPrompt?: boolean;
3
7
  sessionId: string;
4
8
  /** false → --session-id (new session); true → --resume. */
5
9
  resume: boolean;
@@ -77,6 +81,7 @@ export declare class StreamJsonParser {
77
81
  private handleLine;
78
82
  }
79
83
  export declare function buildClaudeArgs(cfg: RuntimeConfig, opts: RunOpts): string[];
84
+ export declare function buildCodexArgs(cfg: RuntimeConfig, opts: RunOpts): string[];
80
85
  /** Demo mode: static canned reply, no CLI spawn. */
81
86
  export declare const DEMO_REPLY = "Your message was received";
82
87
  /**