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.
- package/README.md +48 -0
- package/dist/api.d.ts +2 -0
- package/dist/api.js +31 -0
- package/dist/api.js.map +1 -1
- package/dist/bridge.d.ts +19 -0
- package/dist/bridge.js +162 -28
- package/dist/bridge.js.map +1 -1
- package/dist/config.d.ts +13 -0
- package/dist/config.js +6 -1
- package/dist/config.js.map +1 -1
- package/dist/huddle-context.d.ts +41 -0
- package/dist/huddle-context.js +190 -0
- package/dist/huddle-context.js.map +1 -0
- package/dist/huddle-replies.d.ts +17 -0
- package/dist/huddle-replies.js +39 -0
- package/dist/huddle-replies.js.map +1 -0
- package/dist/huddle-voice.d.ts +14 -1
- package/dist/huddle-voice.js +124 -9
- package/dist/huddle-voice.js.map +1 -1
- package/dist/runtime.d.ts +77 -2
- package/dist/runtime.js +119 -10
- package/dist/runtime.js.map +1 -1
- package/dist/session.d.ts +152 -0
- package/dist/session.js +480 -0
- package/dist/session.js.map +1 -0
- package/dist/shared-file-worker.d.ts +7 -0
- package/dist/shared-file-worker.js +93 -0
- package/dist/shared-file-worker.js.map +1 -0
- package/dist/shared-files.d.ts +11 -0
- package/dist/shared-files.js +52 -0
- package/dist/shared-files.js.map +1 -0
- package/package.json +9 -4
package/dist/huddle-voice.js
CHANGED
|
@@ -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
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
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)}`));
|
package/dist/huddle-voice.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"huddle-voice.js","sourceRoot":"","sources":["../src/huddle-voice.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,SAAS,EAAE,MAAM,IAAI,CAAC;AAI/B,MAAM,sBAAsB,GAAG,IAAI,GAAG,CAAC,CAAC,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,WAAW,CAAC,CAAC,CAAC;AACrF,IAAI,wBAAwB,GAAG,KAAK,CAAC;AAgDrC,mFAAmF;AACnF,MAAM,UAAU,sBAAsB,CACpC,QAA2C,EAC3C,UAAkB,EAClB,SAAiB;IAEjB,MAAM,cAAc,GAAG,QAAQ,CAAC,MAAM,CACpC,CAAC,OAAO,EAAE,EAAE,CACV,CAAC,OAAO,CAAC,IAAI,KAAK,MAAM,IAAI,OAAO,CAAC,IAAI,KAAK,WAAW,CAAC,IAAI,OAAO,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,CAC9F,CAAC;IACF,MAAM,UAAU,GAAG,CAAC,GAAG,cAAc,CAAC;SACnC,OAAO,EAAE;SACT,IAAI,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,KAAK,MAAM,CAAC;QAC3C,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC;IAChB,IAAI,CAAC,UAAU;QAAE,OAAO,IAAI,CAAC;IAC7B,OAAO;QACL,MAAM,EAAE,UAAU;QAClB,UAAU,EAAE,cAAc;aACvB,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,GAAG,OAAO,CAAC,IAAI,KAAK,MAAM,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,SAAS,KAAK,OAAO,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,CAAC;aAC/F,IAAI,CAAC,IAAI,CAAC;KACd,CAAC;AACJ,CAAC;AA4BD;;;;;;;GAOG;AACH,MAAM,OAAO,kBAAkB;IAQA;IAPrB,MAAM,GAAsB,IAAI,CAAC;IACjC,iBAAiB,GAAkB,IAAI,CAAC;IACxC,QAAQ,GAAG,KAAK,CAAC;IACR,eAAe,GAAG,IAAI,GAAG,EAAU,CAAC;IACpC,cAAc,GAAG,IAAI,GAAG,EAAU,CAAC;IACnC,cAAc,CAA0B;IAEzD,YAA6B,OAAkC;QAAlC,YAAO,GAAP,OAAO,CAA2B;QAC7D,IAAI,CAAC,cAAc,GAAG,OAAO,CAAC,cAAc,IAAI,yBAAyB,CAAC;IAC5E,CAAC;IAED,IAAI,eAAe;QACjB,OAAO,IAAI,CAAC,MAAM,EAAE,SAAS,IAAI,IAAI,CAAC;IACxC,CAAC;IAED,KAAK,CAAC,YAAY,CAAC,IAAsB;QACvC,IAAI,IAAI,CAAC,QAAQ;YAAE,OAAO;QAC1B,MAAM,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC;QACxB,MAAM,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,MAAM,KAAK,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;QACjF,IAAI,CAAC,MAAM,IAAI,MAAM,CAAC,SAAS,KAAK,IAAI,CAAC,OAAO,CAAC,OAAO;YAAE,OAAO;QAEjE,IAAI,sBAAsB,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC;YAC9C,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;YACjC,IAAI,IAAI,CAAC,MAAM,EAAE,QAAQ,KAAK,MAAM,CAAC,EAAE;gBAAE,MAAM,IAAI,CAAC,SAAS,CAAC,UAAU,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC;YACzF,OAAO;QACT,CAAC;QAED,sEAAsE;QACtE,mCAAmC;QACnC,IAAI,MAAM,CAAC,MAAM,KAAK,SAAS,IAAI,MAAM,CAAC,MAAM,KAAK,SAAS;YAAE,OAAO;QACvE,IAAI,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC;YAAE,OAAO;QAC/C,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QAEhC,IAAI,IAAI,CAAC,iBAAiB,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;YAC1C,MAAM,IAAI,CAAC,kBAAkB,CAC3B,MAAM,CAAC,EAAE,EACT,MAAM,CAAC,SAAS,EAChB,uEAAuE,CACxE,CAAC;YACF,OAAO;QACT,CAAC;QAED,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;YACjC,MAAM,IAAI,CAAC,kBAAkB,CAC3B,MAAM,CAAC,EAAE,EACT,MAAM,CAAC,SAAS,EAChB,+GAA+G,CAChH,CAAC;YACF,OAAO;QACT,CAAC;QAED,0EAA0E;QAC1E,wEAAwE;QACxE,IAAI,CAAC,iBAAiB,GAAG,MAAM,CAAC,EAAE,CAAC;QACnC,IAAI,MAAM,GAAG,KAAK,CAAC;QACnB,IAAI,CAAC;YACH,IAAI,CAAC,CAAC,MAAM,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC;gBACzD,MAAM,IAAI,CAAC,kBAAkB,CAC3B,MAAM,CAAC,EAAE,EACT,MAAM,CAAC,SAAS,EAChB,+GAA+G,CAChH,CAAC;gBACF,OAAO;YACT,CAAC;YACD,IAAI,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC;gBAAE,OAAO;YAEjE,uEAAuE;YACvE,wEAAwE;YACxE,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,kBAAkB,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;YAClE,MAAM,GAAG,IAAI,CAAC;YACd,IAAI,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC;gBACzD,MAAM,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;gBAC1C,OAAO;YACT,CAAC;YACD,MAAM,YAAY,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,iBAAiB,CAAC,MAAM,CAAC,SAAS,EAAE,MAAM,CAAC,SAAS,CAAC,CAAC;YAC9F,IAAI,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC;gBACzD,MAAM,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;gBAC1C,OAAO;YACT,CAAC;YACD,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE,IAAI,EAAE,EAAE,CAAC;gBACjC,MAAM,IAAI,KAAK,CAAC,6FAA6F,CAAC,CAAC;YACjH,CAAC;YACD,MAAM,gBAAgB,GAAG,UAAU,EAAE,CAAC;YACtC,IAAI,cAAc,GAAG,KAAK,CAAC;YAC3B,IAAI,gBAAgB,GAAG,KAAK,CAAC;YAC7B,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC;gBACxC,GAAG,EAAE,IAAI,CAAC,GAAG;gBACb,KAAK,EAAE,IAAI,CAAC,KAAK;gBACjB,QAAQ,EAAE,MAAM,CAAC,SAAS;gBAC1B,UAAU,EAAE,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,MAAM,CAAC,SAAS,CAAC;gBACrD,SAAS,EAAE,IAAI,CAAC,OAAO,CAAC,SAAS;gBACjC,YAAY;gBACZ,cAAc,EAAE,IAAI,CAAC,cAAc;gBACnC,MAAM,EAAE,IAAI,CAAC,OAAO,CAAC,MAAM;gBAC3B,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE;oBACtB,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC;wBACxC,GAAG,IAAI;wBACP,SAAS,EAAE,gBAAgB;wBAC3B,MAAM,EAAE,cAAc;wBACtB,YAAY,EAAE,YAAY;qBAC3B,CAAC,CAAC;oBACH,IAAI,MAAM,CAAC,EAAE,IAAI,MAAM,CAAC,UAAU;wBAAE,cAAc,GAAG,IAAI,CAAC;oBAC1D,OAAO,MAAM,CAAC;gBAChB,CAAC;gBACD,OAAO,EAAE,GAAG,EAAE;oBACZ,gBAAgB,GAAG,IAAI,CAAC;oBACxB,KAAK,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;gBACpC,CAAC;gBACD,GAAG,EAAE,IAAI,CAAC,OAAO,CAAC,GAAG;aACtB,CAAC,CAAC;YAEH,IAAI,gBAAgB,IAAI,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC;gBAC7E,MAAM,OAAO,CAAC,KAAK,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;gBAC7C,MAAM,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;gBAC1C,OAAO;YACT,CAAC;YAED,IAAI,CAAC,MAAM,GAAG;gBACZ,QAAQ,EAAE,MAAM,CAAC,EAAE;gBACnB,SAAS,EAAE,MAAM,CAAC,SAAS;gBAC3B,QAAQ,EAAE,MAAM,CAAC,SAAS;gBAC1B,OAAO;aACR,CAAC;YACF,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,wBAAwB,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,MAAM,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;QACxF,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,iCAAiC,SAAS,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;YACtE,IAAI,MAAM;gBAAE,MAAM,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;YACtD,IAAI,MAAM,IAAI,CAAC,IAAI,CAAC,QAAQ,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC;gBACrE,MAAM,IAAI,CAAC,OAAO,CAAC,GAAG;qBACnB,WAAW,CACV,MAAM,CAAC,SAAS,EAChB,2HAA2H,CAC5H;qBACA,KAAK,CAAC,CAAC,SAAkB,EAAE,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,iCAAiC,SAAS,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC,CAAC;YAC9G,CAAC;QACH,CAAC;gBAAS,CAAC;YACT,IAAI,IAAI,CAAC,iBAAiB,KAAK,MAAM,CAAC,EAAE;gBAAE,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC;QAC1E,CAAC;IACH,CAAC;IAED,KAAK,CAAC,YAAY,CAAC,IAAuB;QACxC,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;QAC3B,IAAI,CAAC,MAAM,IAAI,MAAM,CAAC,SAAS,KAAK,IAAI,CAAC,SAAS;YAAE,OAAO;QAC3D,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,WAAW,EAAE,EAAE,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC;QAChF,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC;YAChE,MAAM,IAAI,CAAC,SAAS,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC;QACjF,CAAC;IACH,CAAC;IAED,KAAK,CAAC,IAAI;QACR,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;QACrB,MAAM,IAAI,CAAC,SAAS,CAAC,iBAAiB,CAAC,CAAC;IAC1C,CAAC;IAEO,KAAK,CAAC,kBAAkB,CAAC,QAAgB,EAAE,SAAiB,EAAE,OAAe;QACnF,MAAM,IAAI,CAAC,OAAO,CAAC,GAAG;aACnB,mBAAmB,CAAC,QAAQ,CAAC;aAC7B,KAAK,CAAC,CAAC,KAAc,EAAE,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,6BAA6B,SAAS,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC;QAChG,MAAM,IAAI,CAAC,OAAO,CAAC,GAAG;aACnB,WAAW,CAAC,SAAS,EAAE,OAAO,CAAC;aAC/B,KAAK,CAAC,CAAC,KAAc,EAAE,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,iCAAiC,SAAS,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC;IACtG,CAAC;IAEO,KAAK,CAAC,YAAY,CAAC,QAAgB;QACzC,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;QAC3B,IAAI,CAAC,MAAM,IAAI,MAAM,CAAC,QAAQ,KAAK,QAAQ;YAAE,OAAO;QACpD,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;QACnB,MAAM,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;QAC1C,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,4BAA4B,CAAC,CAAC;IACjD,CAAC;IAEO,KAAK,CAAC,SAAS,CAAC,MAAc;QACpC,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;QAC3B,IAAI,CAAC,MAAM;YAAE,OAAO;QACpB,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;QACnB,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,wBAAwB,MAAM,GAAG,CAAC,CAAC;QACpD,MAAM,MAAM,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC,KAAK,CAAC,CAAC,KAAc,EAAE,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,uBAAuB,SAAS,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC;QACpH,MAAM,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;IAC5C,CAAC;IAEO,KAAK,CAAC,YAAY,CAAC,SAAiB;QAC1C,MAAM,IAAI,CAAC,OAAO,CAAC,GAAG;aACnB,WAAW,CAAC,SAAS,CAAC;aACtB,KAAK,CAAC,CAAC,KAAc,EAAE,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,2BAA2B,SAAS,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC;IAChG,CAAC;IAEO,eAAe,CAAC,QAAgB;QACtC,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QAClC,IAAI,IAAI,CAAC,cAAc,CAAC,IAAI,IAAI,GAAG;YAAE,OAAO;QAC5C,MAAM,MAAM,GAAG,IAAI,CAAC,cAAc,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,CAAC,KAA2B,CAAC;QAC/E,IAAI,MAAM;YAAE,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IACjD,CAAC;IAEO,gBAAgB,CAAC,QAAgB;QACvC,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QACnC,IAAI,IAAI,CAAC,eAAe,CAAC,IAAI,IAAI,GAAG;YAAE,OAAO;QAC7C,MAAM,MAAM,GAAG,IAAI,CAAC,eAAe,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,CAAC,KAA2B,CAAC;QAChF,IAAI,MAAM;YAAE,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IAClD,CAAC;CACF;AAED;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,yBAAyB,CAAC,OAAgC;IAC9E,MAAM,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,EAAE,MAAM,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;QACtD,MAAM,CAAC,mBAAmB,CAAC;QAC3B,MAAM,CAAC,iBAAiB,CAAC;KAC1B,CAAC,CAAC;IACH,MAAM,EAAE,SAAS,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,MAAM,CAAC;IACzC,IAAI,CAAC,wBAAwB,EAAE,CAAC;QAC9B,MAAM,CAAC,gBAAgB,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC;QAC1D,wBAAwB,GAAG,IAAI,CAAC;IAClC,CAAC;IAED,+EAA+E;IAC/E,MAAM,UAAW,SAAQ,GAAG,CAAC,GAAG;QAC9B,KAAK;YACH,OAAO,qBAAqB,CAAC;QAC/B,CAAC;QAED,IAAa,QAAQ;YACnB,OAAO,MAAM,CAAC;QAChB,CAAC;QAED,IAAa,KAAK;YAChB,OAAO,cAAc,CAAC;QACxB,CAAC;QAED,IAAI,CAAC,IAAyD;YAC5D,OAAO,IAAI,gBAAgB,CAAC,IAAI,EAAE;gBAChC,OAAO,EAAE,IAAI,CAAC,OAAO;gBACrB,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBAClD,WAAW,EAAE,IAAI,CAAC,WAAW,IAAI,MAAM,CAAC,2BAA2B;aACpE,CAAC,CAAC;QACL,CAAC;KACF;IAED,MAAM,gBAAiB,SAAQ,GAAG,CAAC,SAAS;QAChC,KAAK,CAAC,GAAG;YACjB,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC;YAC9E,MAAM,KAAK,GAAG,sBAAsB,CAClC,QAAQ,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,OAAO,CAAC,IAAI,EAAE,IAAI,EAAE,OAAO,CAAC,WAAW,IAAI,EAAE,EAAE,CAAC,CAAC,EACpF,OAAO,CAAC,UAAU,EAClB,OAAO,CAAC,SAAS,CAClB,CAAC;YACF,IAAI,CAAC,KAAK;gBAAE,OAAO;YACnB,MAAM,UAAU,GAAG,UAAU,UAAU,EAAE,EAAE,CAAC;YAC5C,IAAI,OAAO,GAAG,KAAK,CAAC;YACpB,IAAI,QAAQ,GAAG,EAAE,CAAC;YAClB,MAAM,IAAI,GAAG,CAAC,IAAY,EAAQ,EAAE;gBAClC,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;gBAC1B,IAAI,CAAC,KAAK,IAAI,KAAK,KAAK,QAAQ,IAAI,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,OAAO;oBAAE,OAAO;gBAChF,QAAQ,GAAG,KAAK,CAAC;gBACjB,OAAO,GAAG,IAAI,CAAC;gBACf,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,UAAU,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,OAAO,EAAE,GAAG,KAAK,GAAG,EAAE,EAAE,CAAC,CAAC;YACzF,CAAC,CAAC;YAEF,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,OAAO,CAAC;gBACnC,MAAM,EAAE,KAAK,CAAC,MAAM;gBACpB,UAAU,EAAE,KAAK,CAAC,UAAU;gBAC5B,MAAM,EAAE,IAAI,CAAC,eAAe,CAAC,MAAM;gBACnC,MAAM,EAAE,IAAI;aACb,CAAC,CAAC;YACH,IAAI,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,OAAO,IAAI,MAAM,CAAC,WAAW;gBAAE,OAAO;YACtE,IAAI,CAAC,OAAO,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE;gBAAE,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;YACtD,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC;gBACf,OAAO,CAAC,GAAG,CAAC,wBAAwB,MAAM,CAAC,KAAK,IAAI,SAAS,EAAE,CAAC,CAAC;YACnE,CAAC;YACD,IAAI,CAAC,OAAO,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC;gBAC3B,IAAI,CAAC,oEAAoE,CAAC,CAAC;YAC7E,CAAC;QACH,CAAC;KACF;IAED,MAAM,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,YAAY,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;IAChE,MAAM,OAAO,GAAG,CAAC,IAAqB,EAAE,OAAe,EAAE,OAAgC,EAAE,EAAE,CAC3F,yBAAyB,CAAC,OAAO,EAAE,IAAI,EAAE,OAAO,CAAC,cAAc,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;IAErF,0EAA0E;IAC1E,uEAAuE;IACvE,2EAA2E;IAC3E,2EAA2E;IAC3E,MAAM,YAAY,GAAG,IAAI,SAAS,CAAC,GAAG,CAAC;QACrC,KAAK,EAAE,OAAO,CAAC,MAAM,CAAC,QAAQ;QAC9B,OAAO,EAAE,OAAO;QAChB,UAAU,EAAE,MAAM;QAClB,QAAQ,EAAE,WAAW;QACrB,MAAM,EAAE,qBAAqB;QAC7B,SAAS,EAAE,yBAAyB;KACrC,CAAC,CAAC;IACH,YAAY,CAAC,SAAS,GAAG,CAAC,OAAO,EAAE,EAAE,CACnC,OAAO,CAAC,MAAM,EAAE,OAAO,EAAE;QACvB,IAAI,EAAE,gBAAgB;QACtB,KAAK,EAAE,OAAO,CAAC,MAAM,CAAC,QAAQ;QAC9B,QAAQ,EAAE,EAAE,WAAW,EAAE,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,KAAK,EAAE,EAAE,EAAE;QACpE,UAAU,EAAE,EAAE,OAAO,EAAE,OAAO,GAAG,IAAI,EAAE,OAAO,EAAE,CAAC,EAAE;KACpD,CAAC,CAAC;IAEL,MAAM,YAAY,GAAG,IAAI,SAAS,CAAC,GAAG,CAAC;QACrC,KAAK,EAAE,OAAO,CAAC,MAAM,CAAC,QAAQ;QAC9B,KAAK,EAAE,OAAO,CAAC,MAAM,CAAC,QAAQ;QAC9B,QAAQ,EAAE,IAAI;QACd,OAAO,EAAE,OAAO;QAChB,UAAU,EAAE,MAAM;QAClB,QAAQ,EAAE,WAAW;QACrB,MAAM,EAAE,qBAAqB;QAC7B,SAAS,EAAE,yBAAyB;KACrC,CAAC,CAAC;IACH,YAAY,CAAC,SAAS,GAAG,CAAC,OAAO,EAAE,EAAE,CACnC,OAAO,CAAC,MAAM,EAAE,OAAO,EAAE;QACvB,IAAI,EAAE,gBAAgB;QACtB,KAAK,EAAE,OAAO,CAAC,MAAM,CAAC,QAAQ;QAC9B,KAAK,EAAE,OAAO,CAAC,MAAM,CAAC,QAAQ;QAC9B,QAAQ,EAAE,IAAI;QACd,WAAW,EAAE,OAAO;QACpB,QAAQ,EAAE,WAAW;QACrB,KAAK,EAAE,EAAE;QACT,UAAU,EAAE,EAAE,OAAO,EAAE,OAAO,GAAG,IAAI,EAAE,OAAO,EAAE,CAAC,EAAE;KACpD,CAAC,CAAC;IAEL,MAAM,IAAI,GAAG,IAAI,IAAI,EAAE,CAAC;IACxB,IAAI,OAAO,GAAG,KAAK,CAAC;IACpB,IAAI,KAAK,GAAG,KAAK,CAAC;IAClB,IAAI,UAAsC,CAAC;IAC3C,MAAM,SAAS,GAAG,GAAS,EAAE;QAC3B,IAAI,KAAK;YAAE,OAAO;QAClB,KAAK,GAAG,IAAI,CAAC;QACb,IAAI,UAAU;YAAE,YAAY,CAAC,UAAU,CAAC,CAAC;QACzC,OAAO,CAAC,OAAO,EAAE,CAAC;IACpB,CAAC,CAAC;IAEF,MAAM,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,OAAO,CAAC,KAAK,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;IACxF,IAAI,CAAC,EAAE,CAAC,SAAS,CAAC,YAAY,EAAE,SAAS,CAAC,CAAC;IAE3C,MAAM,OAAO,GAAG,IAAI,KAAK,CAAC,YAAY,CAAC;QACrC,GAAG,EAAE,YAAY;QACjB,GAAG,EAAE,IAAI,UAAU,EAAE;QACrB,GAAG,EAAE,YAAY;QACjB,GAAG,EAAE,IAAI;QACT,eAAe,EAAE,IAAI;QACrB,YAAY,EAAE;YACZ,aAAa,EAAE,KAAK;YACpB,YAAY,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE;SAChC;KACF,CAAC,CAAC;IACH,OAAO,CAAC,EAAE,CAAC,KAAK,CAAC,sBAAsB,CAAC,KAAK,EAAE,CAAC,KAAK,EAAE,EAAE;QACvD,OAAO,CAAC,GAAG,CAAC,uBAAuB,SAAS,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;IAC/D,CAAC,CAAC,CAAC;IACH,OAAO,CAAC,EAAE,CAAC,KAAK,CAAC,sBAAsB,CAAC,oBAAoB,EAAE,CAAC,KAAK,EAAE,EAAE;QACtE,IAAI,KAAK,CAAC,OAAO,IAAI,KAAK,CAAC,UAAU,CAAC,IAAI,EAAE;YAAE,OAAO,CAAC,GAAG,CAAC,wBAAwB,CAAC,CAAC;IACtF,CAAC,CAAC,CAAC;IACH,OAAO,CAAC,EAAE,CAAC,KAAK,CAAC,sBAAsB,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC;IAE1D,IAAI,CAAC;QACH,MAAM,OAAO,CAAC,KAAK,CAAC;YAClB,IAAI;YACJ,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,YAAY,EAAE,OAAO,CAAC,YAAY,EAAE,CAAC;YACjE,YAAY,EAAE;gBACZ,mBAAmB,EAAE,OAAO,CAAC,QAAQ;gBACrC,YAAY,EAAE,IAAI;gBAClB,YAAY,EAAE,KAAK;gBACnB,WAAW,EAAE,KAAK;gBAClB,iBAAiB,EAAE,IAAI;gBACvB,iBAAiB,EAAE,KAAK;aACzB;YACD,aAAa,EAAE;gBACb,YAAY,EAAE,IAAI;gBAClB,oBAAoB,EAAE,KAAK;aAC5B;YACD,oEAAoE;YACpE,sEAAsE;YACtE,MAAM,EAAE,KAAK;SACd,CAAC,CAAC;QACH,OAAO,CAAC,GAAG,CAAC,OAAO,OAAO,CAAC,UAAU,aAAa,EAAE;YAClD,kBAAkB,EAAE,IAAI;YACxB,YAAY,EAAE,IAAI;SACnB,CAAC,CAAC;QACH,UAAU,GAAG,UAAU,CAAC,GAAG,EAAE;YAC3B,OAAO,CAAC,GAAG,CAAC,uBAAuB,OAAO,CAAC,MAAM,CAAC,iBAAiB,eAAe,CAAC,CAAC;YACpF,KAAK,OAAO,CAAC,KAAK,EAAE,CAAC;QACvB,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,iBAAiB,GAAG,MAAM,CAAC,CAAC;QAC9C,UAAU,CAAC,KAAK,EAAE,CAAC;IACrB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,UAAU;YAAE,YAAY,CAAC,UAAU,CAAC,CAAC;QACzC,MAAM,OAAO,CAAC,KAAK,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;QAC7C,MAAM,IAAI,CAAC,UAAU,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;QAC/C,MAAM,KAAK,CAAC;IACd,CAAC;IAED,OAAO;QACL,KAAK,EAAE,KAAK,IAAI,EAAE;YAChB,IAAI,OAAO;gBAAE,OAAO;YACpB,OAAO,GAAG,IAAI,CAAC;YACf,IAAI,UAAU;gBAAE,YAAY,CAAC,UAAU,CAAC,CAAC;YACzC,MAAM,OAAO,CAAC,KAAK,EAAE,CAAC,KAAK,CAAC,CAAC,KAAc,EAAE,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,+BAA+B,SAAS,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC;YAChH,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;gBACrB,MAAM,IAAI,CAAC,UAAU,EAAE,CAAC,KAAK,CAAC,CAAC,KAAc,EAAE,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,8BAA8B,SAAS,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC;YACnH,CAAC;QACH,CAAC;KACF,CAAC;AACJ,CAAC;AAED,gFAAgF;AAChF,MAAM,UAAU,yBAAyB,CACvC,OAAe,EACf,IAAqB,EACrB,KAAa,EACb,OAAe,EACf,OAAgC;IAEhC,MAAM,YAAY,GAAG,GAAG,OAAO,CAAC,OAAO,CAAC,OAAO,EAAE,IAAI,CAAC,GAAG,IAAI,EAAE,CAAC;IAChE,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QACrC,MAAM,MAAM,GAAG,IAAI,SAAS,CAAC,YAAY,EAAE,EAAE,OAAO,EAAE,EAAE,aAAa,EAAE,UAAU,KAAK,EAAE,EAAE,EAAE,CAAC,CAAC;QAC9F,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE;YAC5B,OAAO,EAAE,CAAC;YACV,MAAM,CAAC,SAAS,EAAE,CAAC;YACnB,MAAM,CAAC,IAAI,KAAK,CAAC,qBAAqB,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,uBAAuB,CAAC,CAAC,CAAC;QAC/E,CAAC,EAAE,OAAO,CAAC,CAAC;QACZ,MAAM,OAAO,GAAG,GAAS,EAAE;YACzB,YAAY,CAAC,KAAK,CAAC,CAAC;YACpB,MAAM,CAAC,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;YAC3B,MAAM,CAAC,GAAG,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QAC/B,CAAC,CAAC;QACF,MAAM,MAAM,GAAG,GAAS,EAAE;YACxB,OAAO,EAAE,CAAC;YACV,IAAI,CAAC;gBACH,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC;gBACrC,OAAO,CAAC,MAAM,CAAC,CAAC;YAClB,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,MAAM,CAAC,SAAS,EAAE,CAAC;gBACnB,MAAM,CAAC,KAAK,CAAC,CAAC;YAChB,CAAC;QACH,CAAC,CAAC;QACF,MAAM,OAAO,GAAG,CAAC,KAAY,EAAQ,EAAE;YACrC,OAAO,EAAE,CAAC;YACV,MAAM,CAAC,KAAK,CAAC,CAAC;QAChB,CAAC,CAAC;QACF,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QAC5B,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;IAChC,CAAC,CAAC,CAAC;AACL,CAAC;AAED,SAAS,SAAS,CAAC,KAAc;IAC/B,IAAI,KAAK,YAAY,KAAK;QAAE,OAAO,KAAK,CAAC,OAAO,CAAC;IACjD,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC;AACvB,CAAC"}
|
|
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
|
-
|
|
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
|
-
|
|
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
|
|
1
|
+
// Runtime exec: spawn a coding-agent CLI headlessly.
|
|
2
2
|
//
|
|
3
|
-
// Claude runtime (primary)
|
|
4
|
-
//
|
|
5
|
-
//
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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 = '';
|