flow-agent-bridge 0.32.0 → 0.34.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,5 +1,7 @@
1
1
  import { randomUUID } from 'node:crypto';
2
2
  import { WebSocket } from 'ws';
3
+ import { CallTurnQueue, HuddleContext } from './huddle-context.js';
4
+ import { SharedReplyScheduler } from './huddle-replies.js';
3
5
  const TERMINAL_INVITE_STATES = new Set(['ended', 'declined', 'missed', 'cancelled']);
4
6
  let liveKitLoggerInitialized = false;
5
7
  /** Convert LiveKit's call history into inputs for resumable and stateless CLIs. */
@@ -34,12 +36,61 @@ export class HuddleVoiceManager {
34
36
  terminalInvites = new Set();
35
37
  handledInvites = new Set();
36
38
  sessionFactory;
39
+ shared = null;
37
40
  constructor(options) {
38
41
  this.options = options;
39
42
  this.sessionFactory = options.sessionFactory ?? createLiveKitVoiceSession;
40
43
  }
41
44
  get activeChannelId() {
42
- 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);
43
94
  }
44
95
  async handleInvite(data) {
45
96
  if (this.stopping)
@@ -80,6 +131,25 @@ export class HuddleVoiceManager {
80
131
  }
81
132
  if (this.stopping || this.terminalInvites.has(invite.id))
82
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;
83
153
  // Accept first so the caller stops hearing a ring immediately. Context
84
154
  // loading and model connection happen while both users are in the room.
85
155
  const room = await this.options.api.acceptHuddleInvite(invite.id);
@@ -89,6 +159,7 @@ export class HuddleVoiceManager {
89
159
  return;
90
160
  }
91
161
  const instructions = await this.options.buildInstructions(invite.channelId, invite.startedBy);
162
+ await this.refreshContext(true);
92
163
  if (this.stopping || this.terminalInvites.has(invite.id)) {
93
164
  await this.leaveQuietly(invite.channelId);
94
165
  return;
@@ -109,15 +180,25 @@ export class HuddleVoiceManager {
109
180
  inferenceToken: room.inferenceToken,
110
181
  config: this.options.config,
111
182
  runTurn: async (turn) => {
112
- const result = await this.options.runTurn({
113
- ...turn,
114
- sessionId: runtimeSessionId,
115
- resume: runtimeStarted,
116
- systemPrompt: instructions,
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;
117
201
  });
118
- if (result.ok || result.sawSession)
119
- runtimeStarted = true;
120
- return result;
121
202
  },
122
203
  onEnded: () => {
123
204
  endedDuringStart = true;
@@ -136,6 +217,9 @@ export class HuddleVoiceManager {
136
217
  callerId: invite.startedBy,
137
218
  session,
138
219
  };
220
+ shared.session = session;
221
+ if (shared.changed)
222
+ session.sharedMaterialChanged?.();
139
223
  this.options.log(`answered huddle from ${this.options.callerName(invite.startedBy)}`);
140
224
  }
141
225
  catch (error) {
@@ -149,6 +233,8 @@ export class HuddleVoiceManager {
149
233
  }
150
234
  }
151
235
  finally {
236
+ if (this.active?.inviteId !== invite.id)
237
+ await this.closeShared(invite.id);
152
238
  if (this.acceptingInviteId === invite.id)
153
239
  this.acceptingInviteId = null;
154
240
  }
@@ -165,6 +251,17 @@ export class HuddleVoiceManager {
165
251
  async stop() {
166
252
  this.stopping = true;
167
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'));
168
265
  }
169
266
  async declineWithMessage(inviteId, channelId, message) {
170
267
  await this.options.api
@@ -179,6 +276,7 @@ export class HuddleVoiceManager {
179
276
  if (!active || active.inviteId !== inviteId)
180
277
  return;
181
278
  this.active = null;
279
+ await this.closeShared(inviteId);
182
280
  await this.leaveQuietly(active.channelId);
183
281
  this.options.log('huddle voice session ended');
184
282
  }
@@ -187,8 +285,10 @@ export class HuddleVoiceManager {
187
285
  if (!active)
188
286
  return;
189
287
  this.active = null;
288
+ this.shared?.abort.abort();
190
289
  this.options.log(`ending huddle voice (${reason})`);
191
290
  await active.session.close().catch((error) => this.options.log(`voice close failed: ${errorText(error)}`));
291
+ await this.closeShared(active.inviteId);
192
292
  await this.leaveQuietly(active.channelId);
193
293
  }
194
294
  async leaveQuietly(channelId) {
@@ -225,6 +325,7 @@ export async function createLiveKitVoiceSession(options) {
225
325
  import('@livekit/agents'),
226
326
  ]);
227
327
  const { inference, llm, voice } = agents;
328
+ let sharedReplies;
228
329
  if (!liveKitLoggerInitialized) {
229
330
  agents.initializeLogger({ pretty: false, level: 'warn' });
230
331
  liveKitLoggerInitialized = true;
@@ -254,6 +355,7 @@ export async function createLiveKitVoiceSession(options) {
254
355
  const input = buildVoiceRuntimeInput(messages.map((message) => ({ role: message.role, text: message.textContent ?? '' })), options.callerName, options.agentName);
255
356
  if (!input)
256
357
  return;
358
+ sharedReplies?.consumed();
257
359
  const responseId = `bridge-${randomUUID()}`;
258
360
  let emitted = false;
259
361
  let previous = '';
@@ -331,6 +433,7 @@ export async function createLiveKitVoiceSession(options) {
331
433
  if (ended)
332
434
  return;
333
435
  ended = true;
436
+ sharedReplies?.close();
334
437
  if (limitTimer)
335
438
  clearTimeout(limitTimer);
336
439
  options.onEnded();
@@ -348,6 +451,16 @@ export async function createLiveKitVoiceSession(options) {
348
451
  interruption: { enabled: true },
349
452
  },
350
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'),
463
+ });
351
464
  session.on(voice.AgentSessionEventTypes.Error, (event) => {
352
465
  options.log(`huddle voice error: ${errorText(event.error)}`);
353
466
  });
@@ -394,10 +507,12 @@ export async function createLiveKitVoiceSession(options) {
394
507
  throw error;
395
508
  }
396
509
  return {
510
+ sharedMaterialChanged: () => sharedReplies?.changed(),
397
511
  close: async () => {
398
512
  if (closing)
399
513
  return;
400
514
  closing = true;
515
+ sharedReplies?.close();
401
516
  if (limitTimer)
402
517
  clearTimeout(limitTimer);
403
518
  await session.close().catch((error) => options.log(`agent session close failed: ${errorText(error)}`));
@@ -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;
@@ -41,6 +45,19 @@ export interface RunResult {
41
45
  }
42
46
  /** One line per tool call, latest step shown: "Bash: pnpm test". */
43
47
  export declare function formatToolStep(name: string, input: unknown): string;
48
+ /**
49
+ * Turn-scoped signals a persistent session needs and a one-shot run doesn't:
50
+ * where one turn ends and the next begins, and whether the agent still has
51
+ * background work running (which is what holds the idle reaper off).
52
+ */
53
+ export interface StreamHooks {
54
+ /** A turn began — `system`/`init`, which the CLI re-emits for every turn. */
55
+ onTurnStart?(): void;
56
+ /** The turn's terminal `result` event; the parser's per-turn fields are set. */
57
+ onResult?(): void;
58
+ /** The count of open background tasks changed. */
59
+ onPendingChange?(pending: number): void;
60
+ }
44
61
  /**
45
62
  * Feed stream-json stdout lines; emits tool steps and captures the final
46
63
  * result. Tolerant of non-JSON noise on stdout.
@@ -48,6 +65,7 @@ export declare function formatToolStep(name: string, input: unknown): string;
48
65
  export declare class StreamJsonParser {
49
66
  private readonly onToolStep;
50
67
  private readonly onText;
68
+ private readonly hooks;
51
69
  private buf;
52
70
  finalText: string;
53
71
  isError: boolean;
@@ -72,17 +90,74 @@ export declare class StreamJsonParser {
72
90
  * (#162). A block identical to the one before it is swallowed: relaying the
73
91
  * same sentence twice reads as a glitch, never as progress.
74
92
  */
75
- constructor(onToolStep: (step: string) => void, onText?: (text: string) => void);
93
+ /**
94
+ * Background work the agent started and has not finished — the reason a
95
+ * session with no turn in flight is still not idle. Keyed by
96
+ * `tool:<tool_use_id>` until the CLI gives the task an id of its own, then by
97
+ * `task:<task_id>`; the value is a human description for the logs.
98
+ */
99
+ readonly pending: Map<string, string>;
100
+ constructor(onToolStep: (step: string) => void, onText?: (text: string) => void, hooks?: StreamHooks);
101
+ /**
102
+ * Forget the last turn so the next one is judged on its own events. Only the
103
+ * per-turn verdict is cleared: `sawEvent` (the session exists, so a respawn
104
+ * can `--resume`) and `pending` (background work outlives the turn that
105
+ * started it) are properties of the session, not of any one turn.
106
+ */
107
+ resetTurn(): void;
76
108
  feed(chunk: string): void;
77
109
  private handleLine;
110
+ /**
111
+ * `system` events carry the session's out-of-band state: `init` opens every
112
+ * turn (including the ones the SDK starts by itself when a background task
113
+ * finishes), and the task events say what is still running.
114
+ *
115
+ * `background_tasks_changed` is a full snapshot and therefore authoritative —
116
+ * it is what stops a task that never really started from pinning a session
117
+ * open forever. The narrower events keep the count honest in between.
118
+ */
119
+ private handleSystem;
120
+ /**
121
+ * A `run_in_background` tool call opens a pending entry straight away, keyed
122
+ * by the tool_use id: the task's own id only arrives with `task_started`, and
123
+ * between those two events the reaper must already know work is starting.
124
+ */
125
+ private openIfBackgrounded;
78
126
  }
79
- export declare function buildClaudeArgs(cfg: RuntimeConfig, opts: RunOpts): string[];
127
+ /** Just the fields the argv depends on — `RunOpts` satisfies it structurally. */
128
+ export interface ClaudeArgsOpts {
129
+ sessionId: string;
130
+ resume: boolean;
131
+ prompt: string;
132
+ systemPrompt: string;
133
+ mcpConfigPath?: string | undefined;
134
+ stdinPrompt?: boolean | undefined;
135
+ /**
136
+ * Persistent session: turns arrive as stream-json user messages on stdin, so
137
+ * there is no prompt on the command line at all and the process outlives the
138
+ * turn (see session.ts).
139
+ */
140
+ streamInput?: boolean | undefined;
141
+ }
142
+ export declare function buildClaudeArgs(cfg: RuntimeConfig, opts: ClaudeArgsOpts): string[];
80
143
  export declare function buildCodexArgs(cfg: RuntimeConfig, opts: RunOpts): string[];
81
144
  /** Demo mode: static canned reply, no CLI spawn. */
82
145
  export declare const DEMO_REPLY = "Your message was received";
146
+ /**
147
+ * Take down a runtime and everything it started. The negative pid targets the
148
+ * whole process group: a bare `child.kill()` reaches only the CLI, leaving its
149
+ * Bash-tool grandchildren (builds, test runs, dev servers) orphaned and running
150
+ * unsupervised. SIGTERM first so the CLI can flush its session transcript —
151
+ * that transcript is what makes the next turn resumable.
152
+ */
153
+ export declare function killGroup(pid: number, graceMs: number): void;
154
+ /** Persistent sessions join the same registry, so shutdown reaches them too. */
155
+ export declare function registerGroup(pid: number): void;
156
+ export declare function unregisterGroup(pid: number): void;
83
157
  /**
84
158
  * Shutdown hook: runtimes are spawned detached (own process group), so they no
85
159
  * longer die with the bridge on Ctrl-C — the daemon has to end them itself.
160
+ * Covers persistent sessions as well as one-shot runs (AC 6 of #519).
86
161
  */
87
162
  export declare function killAllRuntimes(): void;
88
163
  /**
package/dist/runtime.js CHANGED
@@ -1,8 +1,11 @@
1
- // Runtime exec: spawn a coding-agent CLI headlessly per conversation turn.
1
+ // Runtime exec: spawn a coding-agent CLI headlessly.
2
2
  //
3
- // Claude runtime (primary): `claude -p --output-format stream-json --verbose`
4
- // with `--session-id <uuid>` on the first turn and `--resume <uuid>` after.
5
- // Tool calls stream by as stream-json events surfaced as thinking steps.
3
+ // Claude runtime (primary) runs as a *persistent* process per conversation —
4
+ // see session.ts, which owns the lifecycle; this module supplies the pieces
5
+ // both paths share: the argv builder, the stream-json parser, and process-group
6
+ // bookkeeping. `runRuntime` below is the one-shot path, still used by the codex
7
+ // and demo runtimes and by voice calls (whose lifetime is the call, not the
8
+ // conversation).
6
9
  // Codex runtime: baseline "prompt in, stdout out" contract, no session resume
7
10
  // or thinking steps yet. The system prompt is folded into each invocation.
8
11
  import { spawn } from 'node:child_process';
@@ -49,6 +52,7 @@ export function formatToolStep(name, input) {
49
52
  export class StreamJsonParser {
50
53
  onToolStep;
51
54
  onText;
55
+ hooks;
52
56
  buf = '';
53
57
  finalText = '';
54
58
  isError = false;
@@ -73,9 +77,30 @@ export class StreamJsonParser {
73
77
  * (#162). A block identical to the one before it is swallowed: relaying the
74
78
  * same sentence twice reads as a glitch, never as progress.
75
79
  */
76
- constructor(onToolStep, onText = () => { }) {
80
+ /**
81
+ * Background work the agent started and has not finished — the reason a
82
+ * session with no turn in flight is still not idle. Keyed by
83
+ * `tool:<tool_use_id>` until the CLI gives the task an id of its own, then by
84
+ * `task:<task_id>`; the value is a human description for the logs.
85
+ */
86
+ pending = new Map();
87
+ constructor(onToolStep, onText = () => { }, hooks = {}) {
77
88
  this.onToolStep = onToolStep;
78
89
  this.onText = onText;
90
+ this.hooks = hooks;
91
+ }
92
+ /**
93
+ * Forget the last turn so the next one is judged on its own events. Only the
94
+ * per-turn verdict is cleared: `sawEvent` (the session exists, so a respawn
95
+ * can `--resume`) and `pending` (background work outlives the turn that
96
+ * started it) are properties of the session, not of any one turn.
97
+ */
98
+ resetTurn() {
99
+ this.finalText = '';
100
+ this.isError = false;
101
+ this.sawResult = false;
102
+ this.errorSubtype = '';
103
+ this.lastText = '';
79
104
  }
80
105
  feed(chunk) {
81
106
  this.buf += chunk;
@@ -98,10 +123,14 @@ export class StreamJsonParser {
98
123
  }
99
124
  if (typeof ev.type === 'string')
100
125
  this.sawEvent = true;
126
+ if (ev.type === 'system')
127
+ return this.handleSystem(ev);
101
128
  if (ev.type === 'assistant') {
102
129
  for (const block of ev.message?.content ?? []) {
103
- if (block.type === 'tool_use' && block.name)
130
+ if (block.type === 'tool_use' && block.name) {
131
+ this.openIfBackgrounded(block.id, block.name, block.input);
104
132
  this.onToolStep(formatToolStep(block.name, block.input));
133
+ }
105
134
  else if (block.type === 'text' && block.text?.trim()) {
106
135
  const text = block.text.trim();
107
136
  if (text !== this.lastText)
@@ -116,11 +145,76 @@ export class StreamJsonParser {
116
145
  this.isError = ev.is_error === true || (ev.subtype !== undefined && ev.subtype !== 'success');
117
146
  this.errorSubtype = this.isError ? (ev.subtype ?? '') : '';
118
147
  this.finalText = ev.result ?? '';
148
+ this.hooks.onResult?.();
119
149
  }
120
150
  }
151
+ /**
152
+ * `system` events carry the session's out-of-band state: `init` opens every
153
+ * turn (including the ones the SDK starts by itself when a background task
154
+ * finishes), and the task events say what is still running.
155
+ *
156
+ * `background_tasks_changed` is a full snapshot and therefore authoritative —
157
+ * it is what stops a task that never really started from pinning a session
158
+ * open forever. The narrower events keep the count honest in between.
159
+ */
160
+ handleSystem(ev) {
161
+ const before = this.pending.size;
162
+ switch (ev.subtype) {
163
+ case 'init':
164
+ this.hooks.onTurnStart?.();
165
+ return;
166
+ case 'background_tasks_changed': {
167
+ for (const key of [...this.pending.keys()])
168
+ if (key.startsWith('task:'))
169
+ this.pending.delete(key);
170
+ for (const t of ev.tasks ?? [])
171
+ if (t.task_id)
172
+ this.pending.set(`task:${t.task_id}`, t.description ?? t.task_id);
173
+ // Nothing is running, so no tool_use can still be waiting to start.
174
+ if ((ev.tasks ?? []).length === 0)
175
+ this.pending.clear();
176
+ break;
177
+ }
178
+ case 'task_started': {
179
+ if (ev.tool_use_id)
180
+ this.pending.delete(`tool:${ev.tool_use_id}`);
181
+ if (ev.is_backgrounded && ev.task_id)
182
+ this.pending.set(`task:${ev.task_id}`, ev.description ?? ev.task_id);
183
+ break;
184
+ }
185
+ case 'task_notification': {
186
+ // Anything but "running" is terminal — completed, failed, killed.
187
+ if (ev.status === 'running')
188
+ break;
189
+ if (ev.task_id)
190
+ this.pending.delete(`task:${ev.task_id}`);
191
+ if (ev.tool_use_id)
192
+ this.pending.delete(`tool:${ev.tool_use_id}`);
193
+ break;
194
+ }
195
+ default:
196
+ return;
197
+ }
198
+ if (this.pending.size !== before)
199
+ this.hooks.onPendingChange?.(this.pending.size);
200
+ }
201
+ /**
202
+ * A `run_in_background` tool call opens a pending entry straight away, keyed
203
+ * by the tool_use id: the task's own id only arrives with `task_started`, and
204
+ * between those two events the reaper must already know work is starting.
205
+ */
206
+ openIfBackgrounded(id, name, input) {
207
+ const i = (input ?? {});
208
+ if (i.run_in_background !== true || !id)
209
+ return;
210
+ this.pending.set(`tool:${id}`, formatToolStep(name, input));
211
+ this.hooks.onPendingChange?.(this.pending.size);
212
+ }
121
213
  }
122
214
  export function buildClaudeArgs(cfg, opts) {
123
215
  const args = ['-p', '--output-format', 'stream-json', '--verbose'];
216
+ if (opts.streamInput)
217
+ args.push('--input-format', 'stream-json');
124
218
  args.push(opts.resume ? '--resume' : '--session-id', opts.sessionId);
125
219
  args.push('--append-system-prompt', opts.systemPrompt);
126
220
  args.push('--max-turns', String(cfg.maxTurns));
@@ -143,14 +237,17 @@ export function buildClaudeArgs(cfg, opts) {
143
237
  if (allowed.length)
144
238
  args.push(`--allowedTools=${allowed.join(',')}`);
145
239
  args.push(...cfg.extraArgs);
146
- args.push(opts.prompt);
240
+ if (!opts.stdinPrompt && !opts.streamInput)
241
+ args.push(opts.prompt);
147
242
  return args;
148
243
  }
149
244
  export function buildCodexArgs(cfg, opts) {
150
245
  // Baseline contract only (stdout = reply). No session resume, so callers
151
246
  // that need continuity include the transcript in opts.prompt.
152
247
  const prompt = `${opts.systemPrompt}\n\n${opts.prompt}`;
153
- return ['exec', '--skip-git-repo-check', ...cfg.extraArgs, prompt];
248
+ const images = (opts.imagePaths ?? []).map((image) => `--image=${image}`);
249
+ return ['exec', '--skip-git-repo-check', ...images, ...cfg.extraArgs,
250
+ ...(images.length || opts.stdinPrompt ? ['--'] : []), opts.stdinPrompt ? '-' : prompt];
154
251
  }
155
252
  /** Demo mode: static canned reply, no CLI spawn. */
156
253
  export const DEMO_REPLY = 'Your message was received';
@@ -163,7 +260,7 @@ const liveGroups = new Set();
163
260
  * unsupervised. SIGTERM first so the CLI can flush its session transcript —
164
261
  * that transcript is what makes the next turn resumable.
165
262
  */
166
- function killGroup(pid, graceMs) {
263
+ export function killGroup(pid, graceMs) {
167
264
  const send = (sig) => {
168
265
  try {
169
266
  process.kill(-pid, sig);
@@ -180,9 +277,17 @@ function killGroup(pid, graceMs) {
180
277
  const t = setTimeout(() => send('SIGKILL'), graceMs);
181
278
  t.unref();
182
279
  }
280
+ /** Persistent sessions join the same registry, so shutdown reaches them too. */
281
+ export function registerGroup(pid) {
282
+ liveGroups.add(pid);
283
+ }
284
+ export function unregisterGroup(pid) {
285
+ liveGroups.delete(pid);
286
+ }
183
287
  /**
184
288
  * Shutdown hook: runtimes are spawned detached (own process group), so they no
185
289
  * longer die with the bridge on Ctrl-C — the daemon has to end them itself.
290
+ * Covers persistent sessions as well as one-shot runs (AC 6 of #519).
186
291
  */
187
292
  export function killAllRuntimes() {
188
293
  for (const pid of liveGroups)
@@ -224,7 +329,7 @@ export async function runRuntime(cfg, opts) {
224
329
  return new Promise((resolve) => {
225
330
  const child = spawn(cfg.command, args, {
226
331
  cwd: cfg.cwd,
227
- stdio: ['ignore', 'pipe', 'pipe'],
332
+ stdio: [opts.stdinPrompt ? 'pipe' : 'ignore', 'pipe', 'pipe'],
228
333
  env: { ...process.env },
229
334
  // Own process group, so expiry can kill the agent's whole subprocess tree
230
335
  // rather than just the CLI. Costs us the automatic teardown on bridge
@@ -233,6 +338,10 @@ export async function runRuntime(cfg, opts) {
233
338
  });
234
339
  if (child.pid)
235
340
  liveGroups.add(child.pid);
341
+ if (opts.stdinPrompt && child.stdin) {
342
+ child.stdin.on('error', () => { });
343
+ child.stdin.end(cfg.kind === 'codex' ? `${opts.systemPrompt}\n\n${opts.prompt}` : opts.prompt);
344
+ }
236
345
  const parser = new StreamJsonParser(opts.onToolStep, (t) => opts.onText?.(t));
237
346
  let stdout = '';
238
347
  let stderr = '';