@webless/agent 0.9.0 → 0.9.1
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 +6 -0
- package/dist/{chunk-QMTI5646.js → chunk-3E632FNE.js} +332 -203
- package/dist/chunk-3E632FNE.js.map +1 -0
- package/dist/{chunk-5BCSXCLT.js → chunk-TCO62TRN.js} +40 -2
- package/dist/chunk-TCO62TRN.js.map +1 -0
- package/dist/embed.cjs +754 -625
- package/dist/embed.cjs.map +1 -1
- package/dist/embed.css +60 -10
- package/dist/embed.css.map +1 -1
- package/dist/embed.d.cts +3 -9
- package/dist/embed.d.ts +3 -9
- package/dist/embed.js +1 -1
- package/dist/index.cjs +752 -680
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +2 -2
- package/dist/index.d.ts +2 -2
- package/dist/index.js +43 -4
- package/dist/index.js.map +1 -1
- package/dist/{manifest-DgjT8-tW.d.cts → panel-controller-D_XIQa1U.d.cts} +9 -2
- package/dist/{manifest-DgjT8-tW.d.ts → panel-controller-D_XIQa1U.d.ts} +9 -2
- package/dist/presentation.cjs +79 -67
- package/dist/presentation.cjs.map +1 -1
- package/dist/presentation.d.cts +1 -1
- package/dist/presentation.d.ts +1 -1
- package/dist/presentation.js +7 -3
- package/dist/presentation.js.map +1 -1
- package/dist/react.cjs +756 -625
- package/dist/react.cjs.map +1 -1
- package/dist/react.css +60 -10
- package/dist/react.css.map +1 -1
- package/dist/react.d.cts +3 -3
- package/dist/react.d.ts +3 -3
- package/dist/react.js +3 -1
- package/dist/react.js.map +1 -1
- package/dist/{types-ohWeTG9i.d.cts → types-sLEIYDqm.d.cts} +1 -1
- package/dist/{types-ohWeTG9i.d.ts → types-sLEIYDqm.d.ts} +1 -1
- package/package.json +1 -1
- package/dist/chunk-5BCSXCLT.js.map +0 -1
- package/dist/chunk-QMTI5646.js.map +0 -1
package/dist/index.js
CHANGED
|
@@ -2,10 +2,12 @@ import {
|
|
|
2
2
|
AGENT_STRUCTURED_TOOL_INPUT_HEADER,
|
|
3
3
|
AGENT_STRUCTURED_TOOL_INPUT_SCHEMA_VERSION,
|
|
4
4
|
AGENT_TOOL_UI_SCHEMA_VERSION,
|
|
5
|
+
completeConnectedToolWork,
|
|
6
|
+
connectedToolWork,
|
|
5
7
|
formatAgentStructuredToolInput,
|
|
6
8
|
parseAgentToolResultEnvelope,
|
|
7
9
|
parseAgentToolUiSurface
|
|
8
|
-
} from "./chunk-
|
|
10
|
+
} from "./chunk-TCO62TRN.js";
|
|
9
11
|
|
|
10
12
|
// src/runtime/client.ts
|
|
11
13
|
import {
|
|
@@ -308,6 +310,18 @@ function parseChildStreamEvent(value) {
|
|
|
308
310
|
return { childStreamPath, type: "subagent.called" };
|
|
309
311
|
}
|
|
310
312
|
}
|
|
313
|
+
if (value.type === "actions.requested" && isRecord2(value.data) && Array.isArray(value.data.actions)) {
|
|
314
|
+
const items = value.data.actions.flatMap((action) => {
|
|
315
|
+
if (!isRecord2(action) || action.kind !== "tool-call" || typeof action.callId !== "string" || typeof action.toolName !== "string" || !isRecord2(action.input)) return [];
|
|
316
|
+
const item = connectedToolWork({
|
|
317
|
+
callId: action.callId,
|
|
318
|
+
toolName: action.toolName,
|
|
319
|
+
input: action.input
|
|
320
|
+
});
|
|
321
|
+
return item ? [item] : [];
|
|
322
|
+
});
|
|
323
|
+
return { type: "actions.requested", items };
|
|
324
|
+
}
|
|
311
325
|
if (value.type !== "action.result" || !isRecord2(value.data)) {
|
|
312
326
|
return { type: "other" };
|
|
313
327
|
}
|
|
@@ -329,7 +343,7 @@ function parseChildStreamEvent(value) {
|
|
|
329
343
|
result: {
|
|
330
344
|
callId: result.callId,
|
|
331
345
|
toolName: result.toolName,
|
|
332
|
-
status: data.status,
|
|
346
|
+
status: result.isError === true ? "failed" : data.status,
|
|
333
347
|
...Object.hasOwn(result, "output") ? { output: result.output } : {},
|
|
334
348
|
...error ? { error } : {}
|
|
335
349
|
}
|
|
@@ -430,6 +444,7 @@ var SubagentChildStreamCoordinator = class {
|
|
|
430
444
|
this.tasks.set(childStreamPath, task);
|
|
431
445
|
}
|
|
432
446
|
async consume(path, signal) {
|
|
447
|
+
const workItems = /* @__PURE__ */ new Map();
|
|
433
448
|
let streamIndex = 0;
|
|
434
449
|
let consecutiveRetries = 0;
|
|
435
450
|
let retryDelayMs = INITIAL_RETRY_DELAY_MS;
|
|
@@ -458,7 +473,18 @@ var SubagentChildStreamCoordinator = class {
|
|
|
458
473
|
this.beginPath(event.childStreamPath);
|
|
459
474
|
continue;
|
|
460
475
|
}
|
|
476
|
+
if (event.type === "actions.requested") {
|
|
477
|
+
for (const item2 of event.items) {
|
|
478
|
+
workItems.set(item2.id, item2);
|
|
479
|
+
this.handlers.onWork?.(item2);
|
|
480
|
+
}
|
|
481
|
+
continue;
|
|
482
|
+
}
|
|
461
483
|
if (event.type !== "action.result") continue;
|
|
484
|
+
const item = workItems.get(event.result.callId);
|
|
485
|
+
if (item) {
|
|
486
|
+
this.handlers.onWork?.(completeConnectedToolWork(item, event.result));
|
|
487
|
+
}
|
|
462
488
|
this.handlers.onToolResult?.(event.result);
|
|
463
489
|
if (event.hasOutput) {
|
|
464
490
|
this.handlers.onActionResult?.(event.result.output);
|
|
@@ -506,7 +532,7 @@ function emitActionResult(event, handlers) {
|
|
|
506
532
|
handlers.onToolResult?.({
|
|
507
533
|
callId: result.callId,
|
|
508
534
|
toolName: result.toolName,
|
|
509
|
-
status: event.data.status,
|
|
535
|
+
status: result.isError ? "failed" : event.data.status,
|
|
510
536
|
output: result.output,
|
|
511
537
|
...event.data.error ? { error: event.data.error } : {}
|
|
512
538
|
});
|
|
@@ -632,9 +658,13 @@ function requestedWorkItem(action) {
|
|
|
632
658
|
state: "active"
|
|
633
659
|
};
|
|
634
660
|
}
|
|
635
|
-
return null;
|
|
661
|
+
return action.kind === "tool-call" ? connectedToolWork(action) : null;
|
|
636
662
|
}
|
|
637
663
|
function applyWorkEvent(event, handlers, workItems) {
|
|
664
|
+
if (event.type === "subagent.event") {
|
|
665
|
+
applyWorkEvent(event.data.event, handlers, workItems);
|
|
666
|
+
return;
|
|
667
|
+
}
|
|
638
668
|
if (event.type === "step.started" && workItems.size === 0) {
|
|
639
669
|
emitWorkItem(
|
|
640
670
|
{
|
|
@@ -693,6 +723,15 @@ function applyWorkEvent(event, handlers, workItems) {
|
|
|
693
723
|
const { result, status } = event.data;
|
|
694
724
|
const current = workItems.get(result.callId);
|
|
695
725
|
if (!current) return;
|
|
726
|
+
if (current.kind === "tool" && result.kind === "tool-result") {
|
|
727
|
+
emitWorkItem(completeConnectedToolWork(current, {
|
|
728
|
+
callId: result.callId,
|
|
729
|
+
toolName: result.toolName,
|
|
730
|
+
status: result.isError ? "failed" : status,
|
|
731
|
+
output: result.output
|
|
732
|
+
}), handlers, workItems);
|
|
733
|
+
return;
|
|
734
|
+
}
|
|
696
735
|
const failed = status !== "completed" || result.isError === true;
|
|
697
736
|
emitWorkItem(
|
|
698
737
|
{
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/runtime/client.ts","../src/runtime/capability.ts","../src/runtime/config.ts","../src/runtime/session-store.ts","../src/runtime/subagent-child-stream.ts","../src/runtime/errors.ts","../src/runtime/health.ts"],"sourcesContent":["import {\n Client,\n ClientError,\n type ClientSession,\n type InputResponse,\n type MessageResponse,\n type MessageStreamEvent,\n} from \"eve/client\";\nimport {\n createAgentRuntimeCapability,\n type AgentRuntimeCapability,\n withCapabilityRefresh,\n} from \"./capability\";\nimport { resolveAgentRuntimeConfig } from \"./config\";\nimport {\n buildAgentStorageKeyPrefix,\n clearPersistedAgentSession,\n getOrCreateVisitorSessionId,\n loadPersistedAgentSession,\n savePersistedAgentSession,\n savePersistedAgentTurnMessage,\n type SessionStoreOptions,\n} from \"./session-store\";\nimport { SubagentChildStreamCoordinator } from \"./subagent-child-stream\";\nimport type {\n AgentClient,\n AgentClientOptions,\n AgentIndexVersion,\n AgentResumeTurnOptions,\n AgentRespondTurnOptions,\n AgentSendTurnOptions,\n AgentStreamHandlers,\n AgentWorkItem,\n} from \"./types\";\nimport { parseAgentToolUiSurface } from \"./tool-ui\";\n\ntype AgentRuntimeStreamEvent =\n | MessageStreamEvent\n | Extract<MessageStreamEvent, { type: \"subagent.event\" }>[\"data\"][\"event\"];\n\nfunction isTurnBoundary(event: MessageStreamEvent) {\n return (\n event.type === \"session.waiting\" ||\n event.type === \"session.completed\" ||\n event.type === \"session.failed\"\n );\n}\n\nfunction applyMessageEvent(\n event: MessageStreamEvent,\n rendered: string,\n handlers: AgentStreamHandlers,\n workItems: Map<string, AgentWorkItem>\n) {\n applyWorkEvent(event, handlers, workItems);\n\n if (event.type === \"session.failed\") {\n throw new Error(event.data.message || event.data.code);\n }\n\n if (event.type === \"message.completed\") {\n handlers.onComplete?.();\n }\n\n emitVisitorInteractionEvent(event, handlers);\n\n if (event.type !== \"message.appended\") return rendered;\n\n const { messageDelta, messageSoFar } = event.data;\n let delta = messageDelta;\n let next = rendered;\n if (messageSoFar.startsWith(rendered)) {\n delta = messageSoFar.slice(rendered.length);\n next = messageSoFar;\n } else if (messageDelta) {\n next += messageDelta;\n }\n if (delta) handlers.onDelta?.(delta);\n return next;\n}\n\nfunction emitActionResult(\n event: Extract<AgentRuntimeStreamEvent, { type: \"action.result\" }>,\n handlers: AgentStreamHandlers\n) {\n const result = event.data.result;\n if (result.kind === \"tool-result\") {\n handlers.onToolResult?.({\n callId: result.callId,\n toolName: result.toolName,\n status: event.data.status,\n output: result.output,\n ...(event.data.error ? { error: event.data.error } : {}),\n });\n }\n if (\"output\" in result) handlers.onActionResult?.(result.output);\n}\n\nfunction emitInputRequests(\n event: Extract<AgentRuntimeStreamEvent, { type: \"input.requested\" }>,\n handlers: AgentStreamHandlers\n) {\n handlers.onInputRequest?.(\n event.data.requests.map((request) => {\n const ui = parseAgentToolUiSurface(\n (request as unknown as { ui?: unknown }).ui\n );\n return {\n requestId: request.requestId,\n kind: request.kind,\n prompt: request.prompt,\n ...(request.display ? { display: request.display } : {}),\n ...(request.allowFreeform !== undefined\n ? { allowFreeform: request.allowFreeform }\n : {}),\n ...(request.options ? { options: request.options } : {}),\n ...(ui ? { ui } : {}),\n action: {\n callId: request.action.callId,\n kind: \"tool-call\" as const,\n toolName: request.action.toolName,\n },\n };\n })\n );\n}\n\nfunction emitVisitorInteractionEvent(\n event: AgentRuntimeStreamEvent,\n handlers: AgentStreamHandlers\n) {\n if (event.type === \"action.result\") emitActionResult(event, handlers);\n if (event.type === \"input.requested\") emitInputRequests(event, handlers);\n if (event.type === \"subagent.event\") {\n emitVisitorInteractionEvent(event.data.event, handlers);\n }\n}\n\nexport function isResumeTurnMessage(received: string, candidate: string) {\n if (received === candidate) return true;\n return Boolean(candidate) && received.endsWith(`\\n\\n${candidate}`);\n}\n\nfunction latestTurnEvents(events: readonly MessageStreamEvent[]) {\n let startIndex = -1;\n for (let index = events.length - 1; index >= 0; index -= 1) {\n if (events[index]?.type === \"message.received\") {\n startIndex = index;\n break;\n }\n }\n return startIndex >= 0 ? events.slice(startIndex) : [];\n}\n\nexport function streamIndexBeforeLastTurn(input: {\n currentStreamIndex: number;\n events: readonly MessageStreamEvent[];\n}): number | null {\n let turnStart = -1;\n for (let index = input.events.length - 1; index >= 0; index -= 1) {\n if (input.events[index]?.type === \"message.received\") {\n turnStart = index;\n break;\n }\n }\n if (turnStart < 0) return null;\n return Math.max(\n 0,\n input.currentStreamIndex - (input.events.length - turnStart)\n );\n}\n\nfunction renderTurn(events: readonly MessageStreamEvent[]) {\n let rendered = \"\";\n for (const event of events) {\n if (event.type !== \"message.appended\") continue;\n const { messageDelta, messageSoFar } = event.data;\n if (messageSoFar.startsWith(rendered)) {\n rendered = messageSoFar;\n } else if (messageDelta) {\n rendered += messageDelta;\n }\n }\n return rendered;\n}\n\nfunction emitWorkItem(\n item: AgentWorkItem,\n handlers: AgentStreamHandlers,\n workItems: Map<string, AgentWorkItem>\n) {\n workItems.set(item.id, item);\n handlers.onWork?.(item);\n handlers.onStep?.(item.label, item.detail);\n}\n\nfunction completePlanning(\n handlers: AgentStreamHandlers,\n workItems: Map<string, AgentWorkItem>,\n nextItems: readonly AgentWorkItem[] = []\n) {\n const planning = workItems.get(\"planning\");\n if (!planning || planning.state !== \"active\") return;\n const specialists = nextItems.filter((item) => item.kind === \"specialist\");\n const detail =\n specialists.length === 1\n ? `Delegating to ${specialists[0]?.label}`\n : specialists.length > 1\n ? `Delegating to ${specialists.length} specialists`\n : nextItems.some((item) => item.kind === \"search\")\n ? \"Using built-in Search & Discovery\"\n : \"Picked the best way to help\";\n emitWorkItem(\n {\n ...planning,\n detail,\n state: \"completed\",\n },\n handlers,\n workItems\n );\n}\n\nfunction specialistNameFromInput(input: Readonly<Record<string, unknown>>) {\n const message = input.message;\n if (typeof message !== \"string\") return undefined;\n const match = /^Webless-Agent-Name:\\s*(.+)$/imu.exec(message);\n return match?.[1]?.trim() || undefined;\n}\n\nfunction requestedWorkItem(\n action: Extract<\n Extract<\n MessageStreamEvent,\n { type: \"actions.requested\" }\n >[\"data\"][\"actions\"][number],\n { callId: string }\n >\n): AgentWorkItem | null {\n if (action.kind === \"tool-call\" && action.toolName === \"search_discovery\") {\n return {\n id: action.callId,\n kind: \"search\",\n label: \"Search & Discovery\",\n detail: \"Searching this site\",\n state: \"active\",\n };\n }\n\n if (\n action.kind === \"subagent-call\" ||\n action.kind === \"remote-agent-call\" ||\n (action.kind === \"tool-call\" && action.toolName === \"agent\")\n ) {\n const name = specialistNameFromInput(action.input) ?? \"Specialist\";\n return {\n id: action.callId,\n kind: \"specialist\",\n label: name,\n detail: \"Reviewing your question\",\n state: \"active\",\n };\n }\n\n return null;\n}\n\nexport function applyWorkEvent(\n event: MessageStreamEvent,\n handlers: AgentStreamHandlers,\n workItems: Map<string, AgentWorkItem>\n) {\n if (event.type === \"step.started\" && workItems.size === 0) {\n emitWorkItem(\n {\n id: \"planning\",\n kind: \"planning\",\n label: \"Understanding your question\",\n state: \"active\",\n },\n handlers,\n workItems\n );\n return;\n }\n\n if (event.type === \"actions.requested\") {\n const nextItems = event.data.actions.flatMap((action) => {\n const item = requestedWorkItem(action);\n return item ? [item] : [];\n });\n completePlanning(handlers, workItems, nextItems);\n for (const item of nextItems) emitWorkItem(item, handlers, workItems);\n return;\n }\n\n if (event.type === \"subagent.called\") {\n completePlanning(handlers, workItems);\n const current = workItems.get(event.data.callId);\n if (!current) {\n emitWorkItem(\n {\n id: event.data.callId,\n kind: \"specialist\",\n label: event.data.name || \"Specialist\",\n detail: \"Reviewing your question\",\n state: \"active\",\n },\n handlers,\n workItems\n );\n }\n return;\n }\n\n if (event.type === \"subagent.completed\") {\n const current = workItems.get(event.data.callId);\n if (!current) return;\n emitWorkItem(\n {\n ...current,\n detail: \"Guidance received\",\n state: \"completed\",\n },\n handlers,\n workItems\n );\n return;\n }\n\n if (event.type !== \"action.result\") return;\n const { result, status } = event.data;\n const current = workItems.get(result.callId);\n if (!current) return;\n const failed = status !== \"completed\" || result.isError === true;\n emitWorkItem(\n {\n ...current,\n detail: failed\n ? \"Couldn’t complete; continuing with available information\"\n : current.kind === \"search\"\n ? \"Found relevant site content\"\n : \"Guidance received\",\n state: failed ? \"error\" : \"completed\",\n },\n handlers,\n workItems\n );\n}\n\nclass AgentSession {\n private client: Client | undefined;\n private clientHost: string | undefined;\n private session: ClientSession | undefined;\n private activeResponse: MessageResponse | undefined;\n private childStreams: SubagentChildStreamCoordinator | undefined;\n private readonly capability: AgentRuntimeCapability;\n\n constructor(\n private readonly indexId: string,\n private readonly version: AgentIndexVersion,\n private readonly runtimeOrigin: string,\n private readonly visitorSessionId: string,\n private readonly storeOptions: SessionStoreOptions,\n previewBuildId?: string,\n getUnpublishedPreviewGrant?: () => Promise<string>\n ) {\n this.capability = createAgentRuntimeCapability({\n getUnpublishedPreviewGrant,\n indexId,\n previewBuildId,\n runtimeOrigin,\n version,\n visitorSessionId,\n });\n }\n\n getActiveSessionId(): string | undefined {\n return (\n this.session?.state.sessionId ??\n loadPersistedAgentSession(this.visitorSessionId, this.storeOptions)\n ?.sessionId\n );\n }\n\n reset() {\n this.childStreams?.abortAll();\n this.childStreams = undefined;\n if (this.activeResponse) {\n void this.activeResponse.cancel().catch(() => {});\n } else {\n void this.session?.cancel().catch(() => {});\n }\n this.activeResponse = undefined;\n this.session = undefined;\n this.capability.invalidate();\n clearPersistedAgentSession(this.visitorSessionId, this.storeOptions);\n }\n\n private persistSessionCursor(session: ClientSession) {\n savePersistedAgentSession(\n this.visitorSessionId,\n session.state.sessionId,\n session.state.streamIndex,\n this.storeOptions\n );\n }\n\n private async rewindBeforeLastTurn(signal: AbortSignal): Promise<boolean> {\n const persisted = loadPersistedAgentSession(\n this.visitorSessionId,\n this.storeOptions\n );\n if (!persisted?.sessionId) return false;\n\n const client = this.ensureClient();\n const attached = client.sessions.attach(persisted.sessionId, {\n streamIndex: persisted.streamIndex,\n });\n const snapshot = await withCapabilityRefresh(this.capability, () =>\n attached.snapshot({ signal })\n );\n const rewindStreamIndex = streamIndexBeforeLastTurn({\n currentStreamIndex: snapshot.session.streamIndex,\n events: snapshot.events,\n });\n if (rewindStreamIndex === null) return false;\n\n this.session = client.sessions.attach(persisted.sessionId, {\n streamIndex: rewindStreamIndex,\n });\n savePersistedAgentSession(\n this.visitorSessionId,\n persisted.sessionId,\n rewindStreamIndex,\n this.storeOptions\n );\n return true;\n }\n\n async regenerateTurn(\n message: string,\n signal: AbortSignal,\n handlers: AgentStreamHandlers\n ): Promise<string> {\n await this.rewindBeforeLastTurn(signal);\n return this.sendTurn(message, signal, handlers);\n }\n\n private ensureClient(): Client {\n const config = resolveAgentRuntimeConfig({\n indexId: this.indexId,\n version: this.version,\n runtimeOrigin: this.runtimeOrigin,\n });\n if (!config.indexId) {\n throw new Error(\"indexId is required.\");\n }\n\n if (this.client && this.clientHost === config.host) {\n return this.client;\n }\n\n this.activeResponse = undefined;\n this.session = undefined;\n this.client = new Client({\n auth: { bearer: () => this.capability.getAccessToken() },\n host: config.host,\n redirect: \"error\",\n });\n this.clientHost = config.host;\n return this.client;\n }\n\n private attachPersistedSession(client: Client): ClientSession | undefined {\n const persisted = loadPersistedAgentSession(\n this.visitorSessionId,\n this.storeOptions\n );\n if (!persisted?.sessionId) return undefined;\n\n return client.sessions.attach(persisted.sessionId, {\n streamIndex: persisted.streamIndex,\n });\n }\n\n async sendTurn(\n message: string,\n signal: AbortSignal,\n handlers: AgentStreamHandlers\n ): Promise<string> {\n const client = this.ensureClient();\n let response: MessageResponse | undefined;\n let session = this.session ?? this.attachPersistedSession(client);\n\n if (session) {\n this.session = session;\n try {\n const activeSession = session;\n savePersistedAgentTurnMessage(\n this.visitorSessionId,\n message,\n this.storeOptions\n );\n response = await withCapabilityRefresh(this.capability, () =>\n activeSession.send(message, { signal })\n );\n } catch (error) {\n if (\n error instanceof ClientError &&\n error.status === 409 &&\n error.code === \"session_not_active\"\n ) {\n clearPersistedAgentSession(this.visitorSessionId, this.storeOptions);\n this.session = undefined;\n session = undefined;\n } else {\n throw error;\n }\n }\n }\n\n if (!response) {\n savePersistedAgentTurnMessage(\n this.visitorSessionId,\n message,\n this.storeOptions\n );\n const created = await withCapabilityRefresh(this.capability, () =>\n client.sessions.create({ message, signal })\n );\n response = created.response;\n session = created.session;\n this.session = session;\n this.persistSessionCursor(session);\n }\n\n this.activeResponse = response;\n const childStreams = new SubagentChildStreamCoordinator(\n client,\n handlers,\n signal\n );\n this.childStreams = childStreams;\n let streamIndex = session?.state.streamIndex ?? 0;\n let rendered = \"\";\n const workItems = new Map<string, AgentWorkItem>();\n let requestedInput = false;\n\n try {\n for await (const event of response) {\n if (signal.aborted) break;\n if (event.type === \"subagent.called\") childStreams.begin(event);\n if (event.type === \"input.requested\") requestedInput = true;\n rendered = applyMessageEvent(event, rendered, handlers, workItems);\n streamIndex += 1;\n if (session) {\n savePersistedAgentSession(\n this.visitorSessionId,\n session.state.sessionId,\n streamIndex,\n this.storeOptions\n );\n }\n }\n await childStreams.waitForAll();\n } finally {\n childStreams.abortAll();\n this.activeResponse = undefined;\n if (this.childStreams === childStreams) this.childStreams = undefined;\n if (session) {\n this.persistSessionCursor(session);\n }\n }\n\n if (!rendered.trim() && !signal.aborted && !requestedInput) {\n throw new Error(\"Empty response from runtime\");\n }\n\n return rendered.trim();\n }\n\n async resumeTurn(\n message: string,\n signal: AbortSignal,\n handlers: AgentStreamHandlers,\n initialText = \"\"\n ): Promise<string | null> {\n const persisted = loadPersistedAgentSession(\n this.visitorSessionId,\n this.storeOptions\n );\n if (!persisted) return null;\n\n const client = this.ensureClient();\n const attached = client.sessions.attach(persisted.sessionId, {\n streamIndex: persisted.streamIndex,\n });\n const snapshot = await withCapabilityRefresh(this.capability, () =>\n attached.snapshot({ signal })\n );\n const turnEvents = latestTurnEvents(snapshot.events);\n const hasInputRequest = turnEvents.some(\n (event) => event.type === \"input.requested\"\n );\n const received = turnEvents[0];\n const lastSent = persisted.lastMessage;\n const inFlight = !turnEvents.some((event) => isTurnBoundary(event));\n if (\n received?.type !== \"message.received\" ||\n !(\n isResumeTurnMessage(received.data.message, message) ||\n (inFlight &&\n lastSent !== undefined &&\n received.data.message === lastSent)\n )\n ) {\n return null;\n }\n let rendered = renderTurn(turnEvents);\n const workItems = new Map<string, AgentWorkItem>();\n const childStreams = new SubagentChildStreamCoordinator(\n client,\n handlers,\n signal\n );\n this.childStreams = childStreams;\n try {\n for (const event of turnEvents) {\n if (event.type === \"subagent.called\") childStreams.begin(event);\n applyWorkEvent(event, handlers, workItems);\n emitVisitorInteractionEvent(event, handlers);\n }\n\n if (rendered.startsWith(initialText)) {\n const missedText = rendered.slice(initialText.length);\n if (missedText) handlers.onDelta(missedText);\n } else if (initialText.startsWith(rendered)) {\n rendered = initialText;\n } else if (!initialText.startsWith(rendered)) {\n rendered = initialText + rendered;\n }\n\n let session = client.sessions.attach(snapshot.session.sessionId, {\n streamIndex: snapshot.session.streamIndex,\n });\n this.session = session;\n this.persistSessionCursor(session);\n\n let snapshotBoundary: MessageStreamEvent | undefined;\n for (let index = turnEvents.length - 1; index >= 0; index -= 1) {\n const event = turnEvents[index];\n if (event && isTurnBoundary(event)) {\n snapshotBoundary = event;\n break;\n }\n }\n if (snapshotBoundary) {\n if (snapshotBoundary.type === \"session.failed\") {\n throw new Error(\n snapshotBoundary.data.message || snapshotBoundary.data.code\n );\n }\n handlers.onComplete?.();\n await childStreams.waitForAll();\n if (!rendered.trim() && !hasInputRequest) {\n throw new Error(\"Empty response from runtime\");\n }\n return rendered.trim();\n }\n\n let streamIndex = snapshot.session.streamIndex;\n for await (const event of session.stream({ signal })) {\n if (signal.aborted) break;\n if (event.type === \"subagent.called\") childStreams.begin(event);\n rendered = applyMessageEvent(event, rendered, handlers, workItems);\n streamIndex += 1;\n savePersistedAgentSession(\n this.visitorSessionId,\n session.state.sessionId,\n streamIndex,\n this.storeOptions\n );\n if (isTurnBoundary(event)) break;\n }\n await childStreams.waitForAll();\n\n session = client.sessions.attach(session.state.sessionId, {\n streamIndex,\n });\n this.session = session;\n this.persistSessionCursor(session);\n\n if (!rendered.trim() && !signal.aborted && !hasInputRequest) {\n throw new Error(\"Empty response from runtime\");\n }\n return rendered.trim();\n } finally {\n childStreams.abortAll();\n if (this.childStreams === childStreams) this.childStreams = undefined;\n }\n }\n\n async respondTurn(\n responses: AgentRespondTurnOptions[\"responses\"],\n signal: AbortSignal,\n handlers: AgentStreamHandlers\n ): Promise<string> {\n const client = this.ensureClient();\n const session = this.session ?? this.attachPersistedSession(client);\n if (!session) {\n throw new Error(\"No active session is waiting for input.\");\n }\n this.session = session;\n const inputResponses: InputResponse[] = responses.map(\n ({ requestId, optionId, text }) => ({\n requestId,\n ...(optionId ? { optionId } : {}),\n ...(text ? { text } : {}),\n })\n );\n const response = await withCapabilityRefresh(this.capability, () =>\n session.respond(inputResponses, { signal })\n );\n this.activeResponse = response;\n const childStreams = new SubagentChildStreamCoordinator(\n client,\n handlers,\n signal\n );\n this.childStreams = childStreams;\n let streamIndex = session.state.streamIndex;\n let rendered = \"\";\n let requestedInput = false;\n const workItems = new Map<string, AgentWorkItem>();\n\n try {\n for await (const event of response) {\n if (signal.aborted) break;\n if (event.type === \"subagent.called\") childStreams.begin(event);\n if (event.type === \"input.requested\") requestedInput = true;\n rendered = applyMessageEvent(event, rendered, handlers, workItems);\n streamIndex += 1;\n savePersistedAgentSession(\n this.visitorSessionId,\n session.state.sessionId,\n streamIndex,\n this.storeOptions\n );\n }\n await childStreams.waitForAll();\n } finally {\n childStreams.abortAll();\n this.activeResponse = undefined;\n if (this.childStreams === childStreams) this.childStreams = undefined;\n this.session = client.sessions.attach(session.state.sessionId, {\n streamIndex,\n });\n this.persistSessionCursor(this.session);\n }\n\n if (!rendered.trim() && !signal.aborted && !requestedInput) {\n throw new Error(\"Empty response from runtime\");\n }\n return rendered.trim();\n }\n\n cancelActive() {\n this.childStreams?.abortAll();\n if (this.activeResponse) {\n this.activeResponse.cancel().catch(() => {});\n } else {\n this.session?.cancel().catch(() => {});\n }\n }\n}\n\nexport function createAgentClient(options: AgentClientOptions): AgentClient {\n const indexId = options.indexId.trim();\n if (!indexId) {\n throw new Error(\"indexId is required.\");\n }\n\n const version = options.version ?? \"published\";\n const runtimeOrigin = resolveAgentRuntimeConfig({\n indexId,\n runtimeOrigin: options.runtimeOrigin,\n version,\n }).origin;\n const storeOptions: SessionStoreOptions = {\n storageKeyPrefix:\n options.storageKeyPrefix?.trim() ||\n buildAgentStorageKeyPrefix({\n customerId: options.customerId,\n indexId,\n version,\n runtimeOrigin,\n }),\n };\n const visitorSessionId =\n options.visitorSessionId?.trim() ||\n getOrCreateVisitorSessionId(storeOptions);\n\n const session = new AgentSession(\n indexId,\n version,\n runtimeOrigin,\n visitorSessionId,\n storeOptions,\n options.previewBuildId,\n options.getUnpublishedPreviewGrant\n );\n\n return {\n indexId,\n version,\n runtimeOrigin,\n visitorSessionId,\n sendTurn: (message, sendOptions: AgentSendTurnOptions) =>\n session.sendTurn(\n message,\n sendOptions.signal ?? new AbortController().signal,\n sendOptions.handlers\n ),\n resumeTurn: (resumeOptions: AgentResumeTurnOptions) =>\n session.resumeTurn(\n resumeOptions.message,\n resumeOptions.signal ?? new AbortController().signal,\n resumeOptions.handlers,\n resumeOptions.initialText\n ),\n respondTurn: (respondOptions: AgentRespondTurnOptions) =>\n session.respondTurn(\n respondOptions.responses,\n respondOptions.signal ?? new AbortController().signal,\n respondOptions.handlers\n ),\n regenerateTurn: (message, regenerateOptions: AgentSendTurnOptions) =>\n session.regenerateTurn(\n message,\n regenerateOptions.signal ?? new AbortController().signal,\n regenerateOptions.handlers\n ),\n reset: () => session.reset(),\n cancelActive: () => session.cancelActive(),\n getActiveSessionId: () => session.getActiveSessionId(),\n };\n}\n","import { ClientError } from \"eve/client\";\nimport type { AgentIndexVersion } from \"./types\";\n\ntype RuntimeCapability = {\n accessToken: string;\n refreshAt: number;\n};\n\ntype AgentRuntimeCapabilityOptions = {\n getUnpublishedPreviewGrant?: () => Promise<string>;\n indexId: string;\n previewBuildId?: string;\n runtimeOrigin: string;\n version: AgentIndexVersion;\n visitorSessionId: string;\n fetchImplementation?: typeof fetch;\n now?: () => number;\n};\n\nconst MAX_REFRESH_SKEW_MS = 30_000;\nconst LOCAL_LOOPBACK_ORIGINS = [\n \"http://127.0.0.1:3010\",\n \"http://127.0.0.1:3001\",\n] as const;\n\nfunction isLoopbackRuntimeOrigin(origin: string) {\n try {\n const host = new URL(origin).hostname;\n return host === \"127.0.0.1\" || host === \"localhost\";\n } catch {\n return false;\n }\n}\n\nfunction localBootstrapOrigins(origin: string) {\n const normalized = origin.replace(/\\/$/, \"\");\n if (!isLoopbackRuntimeOrigin(normalized)) return [normalized];\n return [\n normalized,\n ...LOCAL_LOOPBACK_ORIGINS.filter((candidate) => candidate !== normalized),\n ];\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\nfunction parseBootstrapResponse(\n value: unknown,\n indexId: string,\n now: number\n): RuntimeCapability {\n if (\n !isRecord(value) ||\n value.apiVersion !== \"webless.ai/agent-runtime-bootstrap/v1\" ||\n typeof value.accessToken !== \"string\" ||\n !value.accessToken ||\n typeof value.expiresAt !== \"string\" ||\n !isRecord(value.identity) ||\n value.identity.indexId !== indexId ||\n typeof value.identity.revision !== \"string\" ||\n !value.identity.revision ||\n typeof value.identity.tenantId !== \"string\" ||\n !value.identity.tenantId ||\n typeof value.origin !== \"string\" ||\n !value.origin ||\n value.tokenType !== \"Bearer\" ||\n typeof value.visitorSubject !== \"string\" ||\n !value.visitorSubject\n ) {\n throw new Error(\"Agent Runtime returned an invalid access response.\");\n }\n\n const expiresAt = Date.parse(value.expiresAt);\n if (!Number.isFinite(expiresAt) || expiresAt <= now) {\n throw new Error(\"Agent Runtime returned an expired access response.\");\n }\n\n const refreshSkew = Math.min(\n MAX_REFRESH_SKEW_MS,\n Math.floor((expiresAt - now) / 10)\n );\n return {\n accessToken: value.accessToken,\n refreshAt: expiresAt - refreshSkew,\n };\n}\n\nasync function readBootstrapError(response: Response): Promise<string> {\n const fallback = `Agent Runtime is unavailable (${response.status}).`;\n try {\n const value: unknown = await response.json();\n return isRecord(value) && typeof value.error === \"string\" && value.error\n ? value.error\n : fallback;\n } catch {\n return fallback;\n }\n}\n\nexport function createAgentRuntimeCapability(\n options: AgentRuntimeCapabilityOptions\n) {\n const fetchImplementation = options.fetchImplementation ?? fetch;\n const now = options.now ?? Date.now;\n let capability: RuntimeCapability | undefined;\n let generation = 0;\n let pendingBootstrap: Promise<RuntimeCapability> | undefined;\n\n const bootstrap = async (): Promise<RuntimeCapability> => {\n let previewGrant: string | undefined;\n const previewBuildId = options.previewBuildId?.trim();\n if (options.version === \"unpublished\") {\n previewGrant = previewBuildId\n ? undefined\n : (await options.getUnpublishedPreviewGrant?.())?.trim();\n if (!previewGrant && !previewBuildId) {\n throw new Error(\n \"Unpublished preview authorization is required to use the Agent Runtime preview.\"\n );\n }\n }\n\n const bootstrapBody = JSON.stringify({\n clientSessionId: options.visitorSessionId,\n indexId: options.indexId,\n ...(previewBuildId ? { previewBuildId } : {}),\n ...(previewGrant ? { previewGrant } : {}),\n version: options.version,\n });\n const postBootstrap = (origin: string) =>\n fetchImplementation(`${origin}/webless/v1/bootstrap`, {\n body: bootstrapBody,\n headers: { \"content-type\": \"application/json\" },\n method: \"POST\",\n });\n\n let response: Response | undefined;\n let lastError: unknown;\n for (const origin of localBootstrapOrigins(options.runtimeOrigin)) {\n try {\n response = await postBootstrap(origin);\n break;\n } catch (error) {\n lastError = error;\n }\n }\n if (!response) {\n throw lastError instanceof Error\n ? lastError\n : new Error(\"Agent Runtime is unavailable.\");\n }\n if (!response.ok) {\n throw new Error(await readBootstrapError(response));\n }\n\n let value: unknown;\n try {\n value = await response.json();\n } catch {\n throw new Error(\"Agent Runtime returned an invalid access response.\");\n }\n return parseBootstrapResponse(value, options.indexId, now());\n };\n\n const getAccessToken = async (): Promise<string> => {\n if (capability && capability.refreshAt > now()) {\n return capability.accessToken;\n }\n\n const requestedGeneration = generation;\n if (!pendingBootstrap) {\n const trackedBootstrap = bootstrap().finally(() => {\n if (pendingBootstrap === trackedBootstrap) {\n pendingBootstrap = undefined;\n }\n });\n pendingBootstrap = trackedBootstrap;\n }\n\n const nextCapability = await pendingBootstrap;\n if (requestedGeneration !== generation) {\n return getAccessToken();\n }\n\n capability = nextCapability;\n return capability.accessToken;\n };\n\n return {\n getAccessToken,\n invalidate: () => {\n capability = undefined;\n generation += 1;\n pendingBootstrap = undefined;\n },\n };\n}\n\nexport type AgentRuntimeCapability = ReturnType<\n typeof createAgentRuntimeCapability\n>;\n\nexport async function withCapabilityRefresh<T>(\n capability: AgentRuntimeCapability,\n request: () => Promise<T>\n): Promise<T> {\n try {\n return await request();\n } catch (error) {\n if (!(error instanceof ClientError) || error.status !== 401) {\n throw error;\n }\n capability.invalidate();\n return await request();\n }\n}\n","import type { AgentIndexVersion, AgentRuntimeConfig } from \"./types\";\n\nexport const DEFAULT_RUNTIME_ORIGIN = \"https://runtime.staging.webless.ai\";\n\nconst trimTrailingSlash = (value: string) => value.replace(/\\/+$/, \"\");\n\nexport function buildEveHost(\n origin: string,\n indexId: string,\n version: AgentIndexVersion = \"published\",\n): string {\n const base = trimTrailingSlash(origin);\n const searchParams = new URLSearchParams({ indexId: indexId.trim() });\n if (version === \"unpublished\") {\n searchParams.set(\"version\", version);\n }\n return `${base}?${searchParams.toString()}`;\n}\n\nexport function resolveAgentRuntimeConfig(input: {\n indexId: string;\n runtimeOrigin?: string;\n version?: AgentIndexVersion;\n}): AgentRuntimeConfig {\n const origin = trimTrailingSlash(input.runtimeOrigin?.trim() || DEFAULT_RUNTIME_ORIGIN);\n const resolvedIndexId = input.indexId.trim();\n const version = input.version ?? \"published\";\n\n return {\n origin,\n indexId: resolvedIndexId,\n version,\n host: resolvedIndexId ? buildEveHost(origin, resolvedIndexId, version) : origin,\n };\n}\n\nexport function agentHealthUrl(runtimeOrigin?: string): string {\n const origin = trimTrailingSlash(runtimeOrigin?.trim() || DEFAULT_RUNTIME_ORIGIN);\n return `${origin}/eve/v1/health`;\n}\n","import type { AgentIndexVersion, PersistedAgentSession } from \"./types\";\n\nconst DEFAULT_STORAGE_KEY_PREFIX = \"webless:agent\";\n\nexport type SessionStoreOptions = {\n storageKeyPrefix?: string;\n};\n\nfunction normalizeRuntimeOrigin(runtimeOrigin?: string) {\n const trimmed = runtimeOrigin?.trim();\n if (!trimmed) return \"_\";\n return trimmed.replace(/\\/+$/, \"\");\n}\n\nexport function buildAgentStorageKeyPrefix(input: {\n customerId?: string;\n indexId: string;\n runtimeOrigin?: string;\n version?: AgentIndexVersion;\n}) {\n const customerId = input.customerId?.trim() || \"_\";\n const indexId = input.indexId.trim();\n if (!indexId) {\n throw new Error(\"indexId is required to build agent storage keys.\");\n }\n\n const versionSuffix = input.version === \"unpublished\" ? \":unpublished\" : \"\";\n return `${DEFAULT_STORAGE_KEY_PREFIX}:${customerId}:${indexId}${versionSuffix}:${normalizeRuntimeOrigin(input.runtimeOrigin)}`;\n}\n\nfunction createSessionId(): string {\n if (typeof crypto !== \"undefined\" && typeof crypto.randomUUID === \"function\") {\n return crypto.randomUUID();\n }\n return `sess_${Math.random().toString(36).slice(2)}${Date.now().toString(36)}`;\n}\n\nfunction resolvePrefix(options?: SessionStoreOptions) {\n return options?.storageKeyPrefix?.trim() || DEFAULT_STORAGE_KEY_PREFIX;\n}\n\nexport function getOrCreateVisitorSessionId(options?: SessionStoreOptions): string {\n const prefix = resolvePrefix(options);\n const visitorKey = `${prefix}:visitorSessionId`;\n\n if (typeof sessionStorage === \"undefined\") {\n return createSessionId();\n }\n\n const existing = sessionStorage.getItem(visitorKey)?.trim();\n if (existing) return existing;\n\n const next = createSessionId();\n sessionStorage.setItem(visitorKey, next);\n return next;\n}\n\nexport function clearVisitorSessionId(options?: SessionStoreOptions) {\n if (typeof sessionStorage === \"undefined\") return;\n\n const prefix = resolvePrefix(options);\n sessionStorage.removeItem(`${prefix}:visitorSessionId`);\n}\n\nfunction runtimeSessionIdKey(visitorSessionId: string, prefix: string) {\n return `${prefix}:eve:${visitorSessionId}:sessionId`;\n}\n\nfunction runtimeStreamIndexKey(visitorSessionId: string, prefix: string) {\n return `${prefix}:eve:${visitorSessionId}:streamIndex`;\n}\n\nfunction runtimeLastMessageKey(visitorSessionId: string, prefix: string) {\n return `${prefix}:eve:${visitorSessionId}:lastMessage`;\n}\n\nexport function loadPersistedAgentSession(\n visitorSessionId: string,\n options?: SessionStoreOptions,\n): PersistedAgentSession | null {\n if (typeof sessionStorage === \"undefined\" || !visitorSessionId.trim()) return null;\n\n const prefix = resolvePrefix(options);\n const sessionId = sessionStorage.getItem(runtimeSessionIdKey(visitorSessionId, prefix))?.trim();\n if (!sessionId) return null;\n\n const rawIndex = sessionStorage.getItem(runtimeStreamIndexKey(visitorSessionId, prefix));\n const streamIndex = rawIndex ? Number.parseInt(rawIndex, 10) : 0;\n\n const lastMessage = sessionStorage\n .getItem(runtimeLastMessageKey(visitorSessionId, prefix))\n ?.trim();\n\n return {\n sessionId,\n streamIndex: Number.isFinite(streamIndex) && streamIndex >= 0 ? streamIndex : 0,\n ...(lastMessage ? { lastMessage } : {}),\n };\n}\n\nexport function savePersistedAgentSession(\n visitorSessionId: string,\n sessionId: string,\n streamIndex: number,\n options?: SessionStoreOptions,\n) {\n if (typeof sessionStorage === \"undefined\" || !visitorSessionId.trim() || !sessionId.trim()) {\n return;\n }\n\n const prefix = resolvePrefix(options);\n sessionStorage.setItem(runtimeSessionIdKey(visitorSessionId, prefix), sessionId);\n sessionStorage.setItem(\n runtimeStreamIndexKey(visitorSessionId, prefix),\n String(Math.max(0, streamIndex)),\n );\n}\n\nexport function savePersistedAgentTurnMessage(\n visitorSessionId: string,\n message: string,\n options?: SessionStoreOptions,\n) {\n if (typeof sessionStorage === \"undefined\" || !visitorSessionId.trim() || !message) {\n return;\n }\n\n const prefix = resolvePrefix(options);\n sessionStorage.setItem(runtimeLastMessageKey(visitorSessionId, prefix), message);\n}\n\nexport function clearPersistedAgentSession(\n visitorSessionId: string,\n options?: SessionStoreOptions,\n) {\n if (typeof sessionStorage === \"undefined\" || !visitorSessionId.trim()) return;\n const prefix = resolvePrefix(options);\n sessionStorage.removeItem(runtimeSessionIdKey(visitorSessionId, prefix));\n sessionStorage.removeItem(runtimeStreamIndexKey(visitorSessionId, prefix));\n sessionStorage.removeItem(runtimeLastMessageKey(visitorSessionId, prefix));\n}\n","import { type Client, type MessageStreamEvent } from \"eve/client\";\nimport type { AgentStreamHandlers, AgentToolResult } from \"./types\";\n\nconst INITIAL_RETRY_DELAY_MS = 100;\nconst MAX_RETRY_DELAY_MS = 2_000;\nconst MAX_CONSECUTIVE_RETRIES = 6;\n\ntype SubagentCalledEvent = Extract<\n MessageStreamEvent,\n { type: \"subagent.called\" }\n>;\n\ntype ChildStreamEvent =\n | {\n type: \"action.result\";\n result: AgentToolResult;\n hasOutput: boolean;\n }\n | {\n type: \"subagent.called\";\n childStreamPath: string;\n }\n | {\n type: \"session.boundary\";\n }\n | {\n type: \"other\";\n };\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\nfunction parseError(value: unknown): AgentToolResult[\"error\"] | undefined {\n if (!isRecord(value)) return undefined;\n const { code, message } = value;\n if (typeof code !== \"string\" || typeof message !== \"string\") {\n return undefined;\n }\n return { code, message };\n}\n\nfunction parseChildStreamEvent(value: unknown): ChildStreamEvent {\n if (!isRecord(value) || typeof value.type !== \"string\") {\n return { type: \"other\" };\n }\n\n if (\n value.type === \"session.waiting\" ||\n value.type === \"session.completed\" ||\n value.type === \"session.failed\"\n ) {\n return { type: \"session.boundary\" };\n }\n\n if (\n value.type === \"subagent.event\" &&\n isRecord(value.data) &&\n Object.hasOwn(value.data, \"event\")\n ) {\n return parseChildStreamEvent(value.data.event);\n }\n\n if (value.type === \"subagent.called\" && isRecord(value.data)) {\n const { childStreamPath } = value.data;\n if (typeof childStreamPath === \"string\") {\n return { childStreamPath, type: \"subagent.called\" };\n }\n }\n\n if (value.type !== \"action.result\" || !isRecord(value.data)) {\n return { type: \"other\" };\n }\n\n const { data } = value;\n if (\n data.status !== \"completed\" &&\n data.status !== \"failed\" &&\n data.status !== \"rejected\"\n ) {\n return { type: \"other\" };\n }\n if (!isRecord(data.result) || data.result.kind !== \"tool-result\") {\n return { type: \"other\" };\n }\n\n const result = data.result;\n if (\n typeof result.callId !== \"string\" ||\n typeof result.toolName !== \"string\"\n ) {\n return { type: \"other\" };\n }\n\n const error = parseError(data.error);\n return {\n type: \"action.result\",\n hasOutput: Object.hasOwn(result, \"output\"),\n result: {\n callId: result.callId,\n toolName: result.toolName,\n status: data.status,\n ...(Object.hasOwn(result, \"output\") ? { output: result.output } : {}),\n ...(error ? { error } : {}),\n },\n };\n}\n\nasync function* readNdjsonStream(\n body: ReadableStream<Uint8Array>\n): AsyncGenerator<unknown> {\n const reader = body.getReader();\n const decoder = new TextDecoder();\n let buffer = \"\";\n\n try {\n while (true) {\n const { done, value } = await reader.read();\n buffer += decoder.decode(value, { stream: !done });\n const lines = buffer.split(\"\\n\");\n buffer = lines.pop() ?? \"\";\n\n for (const line of lines) {\n const trimmed = line.trim();\n if (!trimmed) continue;\n try {\n const parsed: unknown = JSON.parse(trimmed);\n yield parsed;\n } catch {\n // Ignore one malformed event without dropping the remaining stream.\n }\n }\n\n if (done) break;\n }\n\n const trimmed = buffer.trim();\n if (trimmed) {\n try {\n const parsed: unknown = JSON.parse(trimmed);\n yield parsed;\n } catch {\n // Ignore a malformed trailing event.\n }\n }\n } finally {\n reader.releaseLock();\n }\n}\n\nfunction streamPathAt(path: string, streamIndex: number): string {\n if (streamIndex === 0) return path;\n return `${path}${path.includes(\"?\") ? \"&\" : \"?\"}startIndex=${streamIndex}`;\n}\n\nfunction abortableDelay(delayMs: number, signal: AbortSignal): Promise<void> {\n if (signal.aborted) return Promise.resolve();\n return new Promise((resolve) => {\n const finish = () => {\n clearTimeout(timeout);\n signal.removeEventListener(\"abort\", finish);\n resolve();\n };\n const timeout = setTimeout(finish, delayMs);\n signal.addEventListener(\"abort\", finish, { once: true });\n });\n}\n\nexport class SubagentChildStreamCoordinator {\n private readonly controllers = new Map<string, AbortController>();\n private readonly tasks = new Map<string, Promise<void>>();\n\n constructor(\n private readonly client: Client,\n private readonly handlers: AgentStreamHandlers,\n private readonly parentSignal: AbortSignal\n ) {}\n\n begin(event: SubagentCalledEvent): void {\n this.beginPath(event.data.childStreamPath);\n }\n\n async waitForAll(): Promise<void> {\n let observedTaskCount = -1;\n while (observedTaskCount !== this.tasks.size) {\n observedTaskCount = this.tasks.size;\n await Promise.all(this.tasks.values());\n }\n }\n\n abortAll(): void {\n for (const controller of this.controllers.values()) controller.abort();\n this.controllers.clear();\n }\n\n private beginPath(childStreamPath: string): void {\n if (this.tasks.has(childStreamPath)) return;\n\n const controller = new AbortController();\n const abort = () => controller.abort();\n if (this.parentSignal.aborted) {\n controller.abort();\n } else {\n this.parentSignal.addEventListener(\"abort\", abort, { once: true });\n }\n this.controllers.set(childStreamPath, controller);\n\n const task = this.consume(childStreamPath, controller.signal).finally(\n () => {\n this.parentSignal.removeEventListener(\"abort\", abort);\n if (this.controllers.get(childStreamPath) === controller) {\n this.controllers.delete(childStreamPath);\n }\n }\n );\n this.tasks.set(childStreamPath, task);\n }\n\n private async consume(path: string, signal: AbortSignal): Promise<void> {\n let streamIndex = 0;\n let consecutiveRetries = 0;\n let retryDelayMs = INITIAL_RETRY_DELAY_MS;\n\n while (!signal.aborted && consecutiveRetries < MAX_CONSECUTIVE_RETRIES) {\n let receivedEvent = false;\n try {\n const response = await this.client.fetch(\n streamPathAt(path, streamIndex),\n {\n cache: \"no-store\",\n signal,\n }\n );\n if (!response.ok || response.body === null) {\n await response.body?.cancel().catch(() => {});\n throw new Error(`Child stream returned ${response.status}.`);\n }\n\n for await (const rawEvent of readNdjsonStream(response.body)) {\n if (signal.aborted) return;\n receivedEvent = true;\n streamIndex += 1;\n const event = parseChildStreamEvent(rawEvent);\n if (event.type === \"session.boundary\") return;\n if (event.type === \"subagent.called\") {\n this.beginPath(event.childStreamPath);\n continue;\n }\n if (event.type !== \"action.result\") continue;\n this.handlers.onToolResult?.(event.result);\n if (event.hasOutput) {\n this.handlers.onActionResult?.(event.result.output);\n }\n }\n } catch {\n if (signal.aborted) return;\n }\n\n consecutiveRetries = receivedEvent ? 0 : consecutiveRetries + 1;\n retryDelayMs = receivedEvent\n ? INITIAL_RETRY_DELAY_MS\n : Math.min(retryDelayMs * 2, MAX_RETRY_DELAY_MS);\n await abortableDelay(retryDelayMs, signal);\n }\n }\n}\n","import { ClientError } from \"eve/client\";\n\nconst TRANSIENT_AGENT_ERROR_MESSAGE =\n \"The agent run stopped before the action finished. Please try again.\";\nconst PREVIEW_AUTHORIZATION_ERROR_MESSAGE =\n \"This preview could not be authorized. Open the latest preview from Webless.\";\n\nfunction isTransientRuntimeMessage(message: string) {\n const normalized = message.trim().toLowerCase();\n return (\n normalized.includes(\"empty response from runtime\") ||\n normalized.includes(\"failed to fetch\") ||\n normalized.includes(\"networkerror\") ||\n normalized.includes(\"network error\") ||\n normalized.includes(\"load failed\") ||\n normalized.includes(\"the stream\")\n );\n}\n\nfunction isPreviewAuthorizationMessage(message: string) {\n const normalized = message.trim().toLowerCase();\n return (\n normalized.includes(\"unpublished preview authorization\") ||\n normalized.includes(\"unpublished preview grant\") ||\n normalized.includes(\"agent studio preview grant\") ||\n normalized.includes(\"preview authorization\")\n );\n}\n\nexport function formatAgentError(error: unknown): string {\n if (error instanceof ClientError) {\n if (error.status === 401 && error.code === \"index_required\") {\n return \"Missing indexId — pass a published index id to createAgentClient().\";\n }\n if (error.status === 403 && error.code === \"agent_unavailable\") {\n return \"Agent unavailable for this index (disabled or unpublished).\";\n }\n if (error.status === 409 && error.code === \"session_not_active\") {\n return \"Session expired — send a new message to start again.\";\n }\n if (error.message && isPreviewAuthorizationMessage(error.message)) {\n return PREVIEW_AUTHORIZATION_ERROR_MESSAGE;\n }\n if (\n error.status >= 500 ||\n (error.message && isTransientRuntimeMessage(error.message))\n ) {\n return TRANSIENT_AGENT_ERROR_MESSAGE;\n }\n return error.message || \"This assistant is unavailable right now.\";\n }\n if (error instanceof DOMException && error.name === \"AbortError\") {\n return \"\";\n }\n if (error instanceof Error) {\n if (isPreviewAuthorizationMessage(error.message)) {\n return PREVIEW_AUTHORIZATION_ERROR_MESSAGE;\n }\n return isTransientRuntimeMessage(error.message)\n ? TRANSIENT_AGENT_ERROR_MESSAGE\n : error.message;\n }\n return TRANSIENT_AGENT_ERROR_MESSAGE;\n}\n","import { formatAgentError } from \"./errors\";\nimport { agentHealthUrl } from \"./config\";\nimport type { AgentHealthResult } from \"./types\";\n\nexport async function pingAgentHealth(\n runtimeOrigin?: string,\n fetchImpl: typeof fetch = fetch,\n): Promise<AgentHealthResult> {\n const healthUrl = agentHealthUrl(runtimeOrigin);\n\n try {\n const response = await fetchImpl(healthUrl, {\n headers: { Accept: \"application/json\" },\n cache: \"no-store\",\n });\n if (!response.ok) {\n return { ok: false, detail: `Health check failed (${response.status})` };\n }\n const payload = (await response.json()) as { status?: string; ok?: boolean };\n if (payload.ok === true) {\n return { ok: true, detail: payload.status ?? \"ready\" };\n }\n return { ok: false, detail: \"Runtime health response was not ok\" };\n } catch (error) {\n return { ok: false, detail: formatAgentError(error) || \"Health check failed\" };\n }\n}\n"],"mappings":";;;;;;;;;;AAAA;AAAA,EACE;AAAA,EACA,eAAAA;AAAA,OAKK;;;ACPP,SAAS,mBAAmB;AAmB5B,IAAM,sBAAsB;AAC5B,IAAM,yBAAyB;AAAA,EAC7B;AAAA,EACA;AACF;AAEA,SAAS,wBAAwB,QAAgB;AAC/C,MAAI;AACF,UAAM,OAAO,IAAI,IAAI,MAAM,EAAE;AAC7B,WAAO,SAAS,eAAe,SAAS;AAAA,EAC1C,QAAQ;AACN,WAAO;AAAA,EACT;AACF;AAEA,SAAS,sBAAsB,QAAgB;AAC7C,QAAM,aAAa,OAAO,QAAQ,OAAO,EAAE;AAC3C,MAAI,CAAC,wBAAwB,UAAU,EAAG,QAAO,CAAC,UAAU;AAC5D,SAAO;AAAA,IACL;AAAA,IACA,GAAG,uBAAuB,OAAO,CAAC,cAAc,cAAc,UAAU;AAAA,EAC1E;AACF;AAEA,SAAS,SAAS,OAAkD;AAClE,SAAO,OAAO,UAAU,YAAY,UAAU,QAAQ,CAAC,MAAM,QAAQ,KAAK;AAC5E;AAEA,SAAS,uBACP,OACA,SACA,KACmB;AACnB,MACE,CAAC,SAAS,KAAK,KACf,MAAM,eAAe,2CACrB,OAAO,MAAM,gBAAgB,YAC7B,CAAC,MAAM,eACP,OAAO,MAAM,cAAc,YAC3B,CAAC,SAAS,MAAM,QAAQ,KACxB,MAAM,SAAS,YAAY,WAC3B,OAAO,MAAM,SAAS,aAAa,YACnC,CAAC,MAAM,SAAS,YAChB,OAAO,MAAM,SAAS,aAAa,YACnC,CAAC,MAAM,SAAS,YAChB,OAAO,MAAM,WAAW,YACxB,CAAC,MAAM,UACP,MAAM,cAAc,YACpB,OAAO,MAAM,mBAAmB,YAChC,CAAC,MAAM,gBACP;AACA,UAAM,IAAI,MAAM,oDAAoD;AAAA,EACtE;AAEA,QAAM,YAAY,KAAK,MAAM,MAAM,SAAS;AAC5C,MAAI,CAAC,OAAO,SAAS,SAAS,KAAK,aAAa,KAAK;AACnD,UAAM,IAAI,MAAM,oDAAoD;AAAA,EACtE;AAEA,QAAM,cAAc,KAAK;AAAA,IACvB;AAAA,IACA,KAAK,OAAO,YAAY,OAAO,EAAE;AAAA,EACnC;AACA,SAAO;AAAA,IACL,aAAa,MAAM;AAAA,IACnB,WAAW,YAAY;AAAA,EACzB;AACF;AAEA,eAAe,mBAAmB,UAAqC;AACrE,QAAM,WAAW,iCAAiC,SAAS,MAAM;AACjE,MAAI;AACF,UAAM,QAAiB,MAAM,SAAS,KAAK;AAC3C,WAAO,SAAS,KAAK,KAAK,OAAO,MAAM,UAAU,YAAY,MAAM,QAC/D,MAAM,QACN;AAAA,EACN,QAAQ;AACN,WAAO;AAAA,EACT;AACF;AAEO,SAAS,6BACd,SACA;AACA,QAAM,sBAAsB,QAAQ,uBAAuB;AAC3D,QAAM,MAAM,QAAQ,OAAO,KAAK;AAChC,MAAI;AACJ,MAAI,aAAa;AACjB,MAAI;AAEJ,QAAM,YAAY,YAAwC;AACxD,QAAI;AACJ,UAAM,iBAAiB,QAAQ,gBAAgB,KAAK;AACpD,QAAI,QAAQ,YAAY,eAAe;AACrC,qBAAe,iBACX,UACC,MAAM,QAAQ,6BAA6B,IAAI,KAAK;AACzD,UAAI,CAAC,gBAAgB,CAAC,gBAAgB;AACpC,cAAM,IAAI;AAAA,UACR;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAEA,UAAM,gBAAgB,KAAK,UAAU;AAAA,MACnC,iBAAiB,QAAQ;AAAA,MACzB,SAAS,QAAQ;AAAA,MACjB,GAAI,iBAAiB,EAAE,eAAe,IAAI,CAAC;AAAA,MAC3C,GAAI,eAAe,EAAE,aAAa,IAAI,CAAC;AAAA,MACvC,SAAS,QAAQ;AAAA,IACnB,CAAC;AACD,UAAM,gBAAgB,CAAC,WACrB,oBAAoB,GAAG,MAAM,yBAAyB;AAAA,MACpD,MAAM;AAAA,MACN,SAAS,EAAE,gBAAgB,mBAAmB;AAAA,MAC9C,QAAQ;AAAA,IACV,CAAC;AAEH,QAAI;AACJ,QAAI;AACJ,eAAW,UAAU,sBAAsB,QAAQ,aAAa,GAAG;AACjE,UAAI;AACF,mBAAW,MAAM,cAAc,MAAM;AACrC;AAAA,MACF,SAAS,OAAO;AACd,oBAAY;AAAA,MACd;AAAA,IACF;AACA,QAAI,CAAC,UAAU;AACb,YAAM,qBAAqB,QACvB,YACA,IAAI,MAAM,+BAA+B;AAAA,IAC/C;AACA,QAAI,CAAC,SAAS,IAAI;AAChB,YAAM,IAAI,MAAM,MAAM,mBAAmB,QAAQ,CAAC;AAAA,IACpD;AAEA,QAAI;AACJ,QAAI;AACF,cAAQ,MAAM,SAAS,KAAK;AAAA,IAC9B,QAAQ;AACN,YAAM,IAAI,MAAM,oDAAoD;AAAA,IACtE;AACA,WAAO,uBAAuB,OAAO,QAAQ,SAAS,IAAI,CAAC;AAAA,EAC7D;AAEA,QAAM,iBAAiB,YAA6B;AAClD,QAAI,cAAc,WAAW,YAAY,IAAI,GAAG;AAC9C,aAAO,WAAW;AAAA,IACpB;AAEA,UAAM,sBAAsB;AAC5B,QAAI,CAAC,kBAAkB;AACrB,YAAM,mBAAmB,UAAU,EAAE,QAAQ,MAAM;AACjD,YAAI,qBAAqB,kBAAkB;AACzC,6BAAmB;AAAA,QACrB;AAAA,MACF,CAAC;AACD,yBAAmB;AAAA,IACrB;AAEA,UAAM,iBAAiB,MAAM;AAC7B,QAAI,wBAAwB,YAAY;AACtC,aAAO,eAAe;AAAA,IACxB;AAEA,iBAAa;AACb,WAAO,WAAW;AAAA,EACpB;AAEA,SAAO;AAAA,IACL;AAAA,IACA,YAAY,MAAM;AAChB,mBAAa;AACb,oBAAc;AACd,yBAAmB;AAAA,IACrB;AAAA,EACF;AACF;AAMA,eAAsB,sBACpB,YACA,SACY;AACZ,MAAI;AACF,WAAO,MAAM,QAAQ;AAAA,EACvB,SAAS,OAAO;AACd,QAAI,EAAE,iBAAiB,gBAAgB,MAAM,WAAW,KAAK;AAC3D,YAAM;AAAA,IACR;AACA,eAAW,WAAW;AACtB,WAAO,MAAM,QAAQ;AAAA,EACvB;AACF;;;ACtNO,IAAM,yBAAyB;AAEtC,IAAM,oBAAoB,CAAC,UAAkB,MAAM,QAAQ,QAAQ,EAAE;AAE9D,SAAS,aACd,QACA,SACA,UAA6B,aACrB;AACR,QAAM,OAAO,kBAAkB,MAAM;AACrC,QAAM,eAAe,IAAI,gBAAgB,EAAE,SAAS,QAAQ,KAAK,EAAE,CAAC;AACpE,MAAI,YAAY,eAAe;AAC7B,iBAAa,IAAI,WAAW,OAAO;AAAA,EACrC;AACA,SAAO,GAAG,IAAI,IAAI,aAAa,SAAS,CAAC;AAC3C;AAEO,SAAS,0BAA0B,OAInB;AACrB,QAAM,SAAS,kBAAkB,MAAM,eAAe,KAAK,KAAK,sBAAsB;AACtF,QAAM,kBAAkB,MAAM,QAAQ,KAAK;AAC3C,QAAM,UAAU,MAAM,WAAW;AAEjC,SAAO;AAAA,IACL;AAAA,IACA,SAAS;AAAA,IACT;AAAA,IACA,MAAM,kBAAkB,aAAa,QAAQ,iBAAiB,OAAO,IAAI;AAAA,EAC3E;AACF;AAEO,SAAS,eAAe,eAAgC;AAC7D,QAAM,SAAS,kBAAkB,eAAe,KAAK,KAAK,sBAAsB;AAChF,SAAO,GAAG,MAAM;AAClB;;;ACrCA,IAAM,6BAA6B;AAMnC,SAAS,uBAAuB,eAAwB;AACtD,QAAM,UAAU,eAAe,KAAK;AACpC,MAAI,CAAC,QAAS,QAAO;AACrB,SAAO,QAAQ,QAAQ,QAAQ,EAAE;AACnC;AAEO,SAAS,2BAA2B,OAKxC;AACD,QAAM,aAAa,MAAM,YAAY,KAAK,KAAK;AAC/C,QAAM,UAAU,MAAM,QAAQ,KAAK;AACnC,MAAI,CAAC,SAAS;AACZ,UAAM,IAAI,MAAM,kDAAkD;AAAA,EACpE;AAEA,QAAM,gBAAgB,MAAM,YAAY,gBAAgB,iBAAiB;AACzE,SAAO,GAAG,0BAA0B,IAAI,UAAU,IAAI,OAAO,GAAG,aAAa,IAAI,uBAAuB,MAAM,aAAa,CAAC;AAC9H;AAEA,SAAS,kBAA0B;AACjC,MAAI,OAAO,WAAW,eAAe,OAAO,OAAO,eAAe,YAAY;AAC5E,WAAO,OAAO,WAAW;AAAA,EAC3B;AACA,SAAO,QAAQ,KAAK,OAAO,EAAE,SAAS,EAAE,EAAE,MAAM,CAAC,CAAC,GAAG,KAAK,IAAI,EAAE,SAAS,EAAE,CAAC;AAC9E;AAEA,SAAS,cAAc,SAA+B;AACpD,SAAO,SAAS,kBAAkB,KAAK,KAAK;AAC9C;AAEO,SAAS,4BAA4B,SAAuC;AACjF,QAAM,SAAS,cAAc,OAAO;AACpC,QAAM,aAAa,GAAG,MAAM;AAE5B,MAAI,OAAO,mBAAmB,aAAa;AACzC,WAAO,gBAAgB;AAAA,EACzB;AAEA,QAAM,WAAW,eAAe,QAAQ,UAAU,GAAG,KAAK;AAC1D,MAAI,SAAU,QAAO;AAErB,QAAM,OAAO,gBAAgB;AAC7B,iBAAe,QAAQ,YAAY,IAAI;AACvC,SAAO;AACT;AAEO,SAAS,sBAAsB,SAA+B;AACnE,MAAI,OAAO,mBAAmB,YAAa;AAE3C,QAAM,SAAS,cAAc,OAAO;AACpC,iBAAe,WAAW,GAAG,MAAM,mBAAmB;AACxD;AAEA,SAAS,oBAAoB,kBAA0B,QAAgB;AACrE,SAAO,GAAG,MAAM,QAAQ,gBAAgB;AAC1C;AAEA,SAAS,sBAAsB,kBAA0B,QAAgB;AACvE,SAAO,GAAG,MAAM,QAAQ,gBAAgB;AAC1C;AAEA,SAAS,sBAAsB,kBAA0B,QAAgB;AACvE,SAAO,GAAG,MAAM,QAAQ,gBAAgB;AAC1C;AAEO,SAAS,0BACd,kBACA,SAC8B;AAC9B,MAAI,OAAO,mBAAmB,eAAe,CAAC,iBAAiB,KAAK,EAAG,QAAO;AAE9E,QAAM,SAAS,cAAc,OAAO;AACpC,QAAM,YAAY,eAAe,QAAQ,oBAAoB,kBAAkB,MAAM,CAAC,GAAG,KAAK;AAC9F,MAAI,CAAC,UAAW,QAAO;AAEvB,QAAM,WAAW,eAAe,QAAQ,sBAAsB,kBAAkB,MAAM,CAAC;AACvF,QAAM,cAAc,WAAW,OAAO,SAAS,UAAU,EAAE,IAAI;AAE/D,QAAM,cAAc,eACjB,QAAQ,sBAAsB,kBAAkB,MAAM,CAAC,GACtD,KAAK;AAET,SAAO;AAAA,IACL;AAAA,IACA,aAAa,OAAO,SAAS,WAAW,KAAK,eAAe,IAAI,cAAc;AAAA,IAC9E,GAAI,cAAc,EAAE,YAAY,IAAI,CAAC;AAAA,EACvC;AACF;AAEO,SAAS,0BACd,kBACA,WACA,aACA,SACA;AACA,MAAI,OAAO,mBAAmB,eAAe,CAAC,iBAAiB,KAAK,KAAK,CAAC,UAAU,KAAK,GAAG;AAC1F;AAAA,EACF;AAEA,QAAM,SAAS,cAAc,OAAO;AACpC,iBAAe,QAAQ,oBAAoB,kBAAkB,MAAM,GAAG,SAAS;AAC/E,iBAAe;AAAA,IACb,sBAAsB,kBAAkB,MAAM;AAAA,IAC9C,OAAO,KAAK,IAAI,GAAG,WAAW,CAAC;AAAA,EACjC;AACF;AAEO,SAAS,8BACd,kBACA,SACA,SACA;AACA,MAAI,OAAO,mBAAmB,eAAe,CAAC,iBAAiB,KAAK,KAAK,CAAC,SAAS;AACjF;AAAA,EACF;AAEA,QAAM,SAAS,cAAc,OAAO;AACpC,iBAAe,QAAQ,sBAAsB,kBAAkB,MAAM,GAAG,OAAO;AACjF;AAEO,SAAS,2BACd,kBACA,SACA;AACA,MAAI,OAAO,mBAAmB,eAAe,CAAC,iBAAiB,KAAK,EAAG;AACvE,QAAM,SAAS,cAAc,OAAO;AACpC,iBAAe,WAAW,oBAAoB,kBAAkB,MAAM,CAAC;AACvE,iBAAe,WAAW,sBAAsB,kBAAkB,MAAM,CAAC;AACzE,iBAAe,WAAW,sBAAsB,kBAAkB,MAAM,CAAC;AAC3E;;;ACzIA,IAAM,yBAAyB;AAC/B,IAAM,qBAAqB;AAC3B,IAAM,0BAA0B;AAwBhC,SAASC,UAAS,OAAkD;AAClE,SAAO,OAAO,UAAU,YAAY,UAAU,QAAQ,CAAC,MAAM,QAAQ,KAAK;AAC5E;AAEA,SAAS,WAAW,OAAsD;AACxE,MAAI,CAACA,UAAS,KAAK,EAAG,QAAO;AAC7B,QAAM,EAAE,MAAM,QAAQ,IAAI;AAC1B,MAAI,OAAO,SAAS,YAAY,OAAO,YAAY,UAAU;AAC3D,WAAO;AAAA,EACT;AACA,SAAO,EAAE,MAAM,QAAQ;AACzB;AAEA,SAAS,sBAAsB,OAAkC;AAC/D,MAAI,CAACA,UAAS,KAAK,KAAK,OAAO,MAAM,SAAS,UAAU;AACtD,WAAO,EAAE,MAAM,QAAQ;AAAA,EACzB;AAEA,MACE,MAAM,SAAS,qBACf,MAAM,SAAS,uBACf,MAAM,SAAS,kBACf;AACA,WAAO,EAAE,MAAM,mBAAmB;AAAA,EACpC;AAEA,MACE,MAAM,SAAS,oBACfA,UAAS,MAAM,IAAI,KACnB,OAAO,OAAO,MAAM,MAAM,OAAO,GACjC;AACA,WAAO,sBAAsB,MAAM,KAAK,KAAK;AAAA,EAC/C;AAEA,MAAI,MAAM,SAAS,qBAAqBA,UAAS,MAAM,IAAI,GAAG;AAC5D,UAAM,EAAE,gBAAgB,IAAI,MAAM;AAClC,QAAI,OAAO,oBAAoB,UAAU;AACvC,aAAO,EAAE,iBAAiB,MAAM,kBAAkB;AAAA,IACpD;AAAA,EACF;AAEA,MAAI,MAAM,SAAS,mBAAmB,CAACA,UAAS,MAAM,IAAI,GAAG;AAC3D,WAAO,EAAE,MAAM,QAAQ;AAAA,EACzB;AAEA,QAAM,EAAE,KAAK,IAAI;AACjB,MACE,KAAK,WAAW,eAChB,KAAK,WAAW,YAChB,KAAK,WAAW,YAChB;AACA,WAAO,EAAE,MAAM,QAAQ;AAAA,EACzB;AACA,MAAI,CAACA,UAAS,KAAK,MAAM,KAAK,KAAK,OAAO,SAAS,eAAe;AAChE,WAAO,EAAE,MAAM,QAAQ;AAAA,EACzB;AAEA,QAAM,SAAS,KAAK;AACpB,MACE,OAAO,OAAO,WAAW,YACzB,OAAO,OAAO,aAAa,UAC3B;AACA,WAAO,EAAE,MAAM,QAAQ;AAAA,EACzB;AAEA,QAAM,QAAQ,WAAW,KAAK,KAAK;AACnC,SAAO;AAAA,IACL,MAAM;AAAA,IACN,WAAW,OAAO,OAAO,QAAQ,QAAQ;AAAA,IACzC,QAAQ;AAAA,MACN,QAAQ,OAAO;AAAA,MACf,UAAU,OAAO;AAAA,MACjB,QAAQ,KAAK;AAAA,MACb,GAAI,OAAO,OAAO,QAAQ,QAAQ,IAAI,EAAE,QAAQ,OAAO,OAAO,IAAI,CAAC;AAAA,MACnE,GAAI,QAAQ,EAAE,MAAM,IAAI,CAAC;AAAA,IAC3B;AAAA,EACF;AACF;AAEA,gBAAgB,iBACd,MACyB;AACzB,QAAM,SAAS,KAAK,UAAU;AAC9B,QAAM,UAAU,IAAI,YAAY;AAChC,MAAI,SAAS;AAEb,MAAI;AACF,WAAO,MAAM;AACX,YAAM,EAAE,MAAM,MAAM,IAAI,MAAM,OAAO,KAAK;AAC1C,gBAAU,QAAQ,OAAO,OAAO,EAAE,QAAQ,CAAC,KAAK,CAAC;AACjD,YAAM,QAAQ,OAAO,MAAM,IAAI;AAC/B,eAAS,MAAM,IAAI,KAAK;AAExB,iBAAW,QAAQ,OAAO;AACxB,cAAMC,WAAU,KAAK,KAAK;AAC1B,YAAI,CAACA,SAAS;AACd,YAAI;AACF,gBAAM,SAAkB,KAAK,MAAMA,QAAO;AAC1C,gBAAM;AAAA,QACR,QAAQ;AAAA,QAER;AAAA,MACF;AAEA,UAAI,KAAM;AAAA,IACZ;AAEA,UAAM,UAAU,OAAO,KAAK;AAC5B,QAAI,SAAS;AACX,UAAI;AACF,cAAM,SAAkB,KAAK,MAAM,OAAO;AAC1C,cAAM;AAAA,MACR,QAAQ;AAAA,MAER;AAAA,IACF;AAAA,EACF,UAAE;AACA,WAAO,YAAY;AAAA,EACrB;AACF;AAEA,SAAS,aAAa,MAAc,aAA6B;AAC/D,MAAI,gBAAgB,EAAG,QAAO;AAC9B,SAAO,GAAG,IAAI,GAAG,KAAK,SAAS,GAAG,IAAI,MAAM,GAAG,cAAc,WAAW;AAC1E;AAEA,SAAS,eAAe,SAAiB,QAAoC;AAC3E,MAAI,OAAO,QAAS,QAAO,QAAQ,QAAQ;AAC3C,SAAO,IAAI,QAAQ,CAAC,YAAY;AAC9B,UAAM,SAAS,MAAM;AACnB,mBAAa,OAAO;AACpB,aAAO,oBAAoB,SAAS,MAAM;AAC1C,cAAQ;AAAA,IACV;AACA,UAAM,UAAU,WAAW,QAAQ,OAAO;AAC1C,WAAO,iBAAiB,SAAS,QAAQ,EAAE,MAAM,KAAK,CAAC;AAAA,EACzD,CAAC;AACH;AAEO,IAAM,iCAAN,MAAqC;AAAA,EAI1C,YACmB,QACA,UACA,cACjB;AAHiB;AACA;AACA;AAAA,EAChB;AAAA,EAHgB;AAAA,EACA;AAAA,EACA;AAAA,EANF,cAAc,oBAAI,IAA6B;AAAA,EAC/C,QAAQ,oBAAI,IAA2B;AAAA,EAQxD,MAAM,OAAkC;AACtC,SAAK,UAAU,MAAM,KAAK,eAAe;AAAA,EAC3C;AAAA,EAEA,MAAM,aAA4B;AAChC,QAAI,oBAAoB;AACxB,WAAO,sBAAsB,KAAK,MAAM,MAAM;AAC5C,0BAAoB,KAAK,MAAM;AAC/B,YAAM,QAAQ,IAAI,KAAK,MAAM,OAAO,CAAC;AAAA,IACvC;AAAA,EACF;AAAA,EAEA,WAAiB;AACf,eAAW,cAAc,KAAK,YAAY,OAAO,EAAG,YAAW,MAAM;AACrE,SAAK,YAAY,MAAM;AAAA,EACzB;AAAA,EAEQ,UAAU,iBAA+B;AAC/C,QAAI,KAAK,MAAM,IAAI,eAAe,EAAG;AAErC,UAAM,aAAa,IAAI,gBAAgB;AACvC,UAAM,QAAQ,MAAM,WAAW,MAAM;AACrC,QAAI,KAAK,aAAa,SAAS;AAC7B,iBAAW,MAAM;AAAA,IACnB,OAAO;AACL,WAAK,aAAa,iBAAiB,SAAS,OAAO,EAAE,MAAM,KAAK,CAAC;AAAA,IACnE;AACA,SAAK,YAAY,IAAI,iBAAiB,UAAU;AAEhD,UAAM,OAAO,KAAK,QAAQ,iBAAiB,WAAW,MAAM,EAAE;AAAA,MAC5D,MAAM;AACJ,aAAK,aAAa,oBAAoB,SAAS,KAAK;AACpD,YAAI,KAAK,YAAY,IAAI,eAAe,MAAM,YAAY;AACxD,eAAK,YAAY,OAAO,eAAe;AAAA,QACzC;AAAA,MACF;AAAA,IACF;AACA,SAAK,MAAM,IAAI,iBAAiB,IAAI;AAAA,EACtC;AAAA,EAEA,MAAc,QAAQ,MAAc,QAAoC;AACtE,QAAI,cAAc;AAClB,QAAI,qBAAqB;AACzB,QAAI,eAAe;AAEnB,WAAO,CAAC,OAAO,WAAW,qBAAqB,yBAAyB;AACtE,UAAI,gBAAgB;AACpB,UAAI;AACF,cAAM,WAAW,MAAM,KAAK,OAAO;AAAA,UACjC,aAAa,MAAM,WAAW;AAAA,UAC9B;AAAA,YACE,OAAO;AAAA,YACP;AAAA,UACF;AAAA,QACF;AACA,YAAI,CAAC,SAAS,MAAM,SAAS,SAAS,MAAM;AAC1C,gBAAM,SAAS,MAAM,OAAO,EAAE,MAAM,MAAM;AAAA,UAAC,CAAC;AAC5C,gBAAM,IAAI,MAAM,yBAAyB,SAAS,MAAM,GAAG;AAAA,QAC7D;AAEA,yBAAiB,YAAY,iBAAiB,SAAS,IAAI,GAAG;AAC5D,cAAI,OAAO,QAAS;AACpB,0BAAgB;AAChB,yBAAe;AACf,gBAAM,QAAQ,sBAAsB,QAAQ;AAC5C,cAAI,MAAM,SAAS,mBAAoB;AACvC,cAAI,MAAM,SAAS,mBAAmB;AACpC,iBAAK,UAAU,MAAM,eAAe;AACpC;AAAA,UACF;AACA,cAAI,MAAM,SAAS,gBAAiB;AACpC,eAAK,SAAS,eAAe,MAAM,MAAM;AACzC,cAAI,MAAM,WAAW;AACnB,iBAAK,SAAS,iBAAiB,MAAM,OAAO,MAAM;AAAA,UACpD;AAAA,QACF;AAAA,MACF,QAAQ;AACN,YAAI,OAAO,QAAS;AAAA,MACtB;AAEA,2BAAqB,gBAAgB,IAAI,qBAAqB;AAC9D,qBAAe,gBACX,yBACA,KAAK,IAAI,eAAe,GAAG,kBAAkB;AACjD,YAAM,eAAe,cAAc,MAAM;AAAA,IAC3C;AAAA,EACF;AACF;;;AJjOA,SAAS,eAAe,OAA2B;AACjD,SACE,MAAM,SAAS,qBACf,MAAM,SAAS,uBACf,MAAM,SAAS;AAEnB;AAEA,SAAS,kBACP,OACA,UACA,UACA,WACA;AACA,iBAAe,OAAO,UAAU,SAAS;AAEzC,MAAI,MAAM,SAAS,kBAAkB;AACnC,UAAM,IAAI,MAAM,MAAM,KAAK,WAAW,MAAM,KAAK,IAAI;AAAA,EACvD;AAEA,MAAI,MAAM,SAAS,qBAAqB;AACtC,aAAS,aAAa;AAAA,EACxB;AAEA,8BAA4B,OAAO,QAAQ;AAE3C,MAAI,MAAM,SAAS,mBAAoB,QAAO;AAE9C,QAAM,EAAE,cAAc,aAAa,IAAI,MAAM;AAC7C,MAAI,QAAQ;AACZ,MAAI,OAAO;AACX,MAAI,aAAa,WAAW,QAAQ,GAAG;AACrC,YAAQ,aAAa,MAAM,SAAS,MAAM;AAC1C,WAAO;AAAA,EACT,WAAW,cAAc;AACvB,YAAQ;AAAA,EACV;AACA,MAAI,MAAO,UAAS,UAAU,KAAK;AACnC,SAAO;AACT;AAEA,SAAS,iBACP,OACA,UACA;AACA,QAAM,SAAS,MAAM,KAAK;AAC1B,MAAI,OAAO,SAAS,eAAe;AACjC,aAAS,eAAe;AAAA,MACtB,QAAQ,OAAO;AAAA,MACf,UAAU,OAAO;AAAA,MACjB,QAAQ,MAAM,KAAK;AAAA,MACnB,QAAQ,OAAO;AAAA,MACf,GAAI,MAAM,KAAK,QAAQ,EAAE,OAAO,MAAM,KAAK,MAAM,IAAI,CAAC;AAAA,IACxD,CAAC;AAAA,EACH;AACA,MAAI,YAAY,OAAQ,UAAS,iBAAiB,OAAO,MAAM;AACjE;AAEA,SAAS,kBACP,OACA,UACA;AACA,WAAS;AAAA,IACP,MAAM,KAAK,SAAS,IAAI,CAAC,YAAY;AACnC,YAAM,KAAK;AAAA,QACR,QAAwC;AAAA,MAC3C;AACA,aAAO;AAAA,QACL,WAAW,QAAQ;AAAA,QACnB,MAAM,QAAQ;AAAA,QACd,QAAQ,QAAQ;AAAA,QAChB,GAAI,QAAQ,UAAU,EAAE,SAAS,QAAQ,QAAQ,IAAI,CAAC;AAAA,QACtD,GAAI,QAAQ,kBAAkB,SAC1B,EAAE,eAAe,QAAQ,cAAc,IACvC,CAAC;AAAA,QACL,GAAI,QAAQ,UAAU,EAAE,SAAS,QAAQ,QAAQ,IAAI,CAAC;AAAA,QACtD,GAAI,KAAK,EAAE,GAAG,IAAI,CAAC;AAAA,QACnB,QAAQ;AAAA,UACN,QAAQ,QAAQ,OAAO;AAAA,UACvB,MAAM;AAAA,UACN,UAAU,QAAQ,OAAO;AAAA,QAC3B;AAAA,MACF;AAAA,IACF,CAAC;AAAA,EACH;AACF;AAEA,SAAS,4BACP,OACA,UACA;AACA,MAAI,MAAM,SAAS,gBAAiB,kBAAiB,OAAO,QAAQ;AACpE,MAAI,MAAM,SAAS,kBAAmB,mBAAkB,OAAO,QAAQ;AACvE,MAAI,MAAM,SAAS,kBAAkB;AACnC,gCAA4B,MAAM,KAAK,OAAO,QAAQ;AAAA,EACxD;AACF;AAEO,SAAS,oBAAoB,UAAkB,WAAmB;AACvE,MAAI,aAAa,UAAW,QAAO;AACnC,SAAO,QAAQ,SAAS,KAAK,SAAS,SAAS;AAAA;AAAA,EAAO,SAAS,EAAE;AACnE;AAEA,SAAS,iBAAiB,QAAuC;AAC/D,MAAI,aAAa;AACjB,WAAS,QAAQ,OAAO,SAAS,GAAG,SAAS,GAAG,SAAS,GAAG;AAC1D,QAAI,OAAO,KAAK,GAAG,SAAS,oBAAoB;AAC9C,mBAAa;AACb;AAAA,IACF;AAAA,EACF;AACA,SAAO,cAAc,IAAI,OAAO,MAAM,UAAU,IAAI,CAAC;AACvD;AAEO,SAAS,0BAA0B,OAGxB;AAChB,MAAI,YAAY;AAChB,WAAS,QAAQ,MAAM,OAAO,SAAS,GAAG,SAAS,GAAG,SAAS,GAAG;AAChE,QAAI,MAAM,OAAO,KAAK,GAAG,SAAS,oBAAoB;AACpD,kBAAY;AACZ;AAAA,IACF;AAAA,EACF;AACA,MAAI,YAAY,EAAG,QAAO;AAC1B,SAAO,KAAK;AAAA,IACV;AAAA,IACA,MAAM,sBAAsB,MAAM,OAAO,SAAS;AAAA,EACpD;AACF;AAEA,SAAS,WAAW,QAAuC;AACzD,MAAI,WAAW;AACf,aAAW,SAAS,QAAQ;AAC1B,QAAI,MAAM,SAAS,mBAAoB;AACvC,UAAM,EAAE,cAAc,aAAa,IAAI,MAAM;AAC7C,QAAI,aAAa,WAAW,QAAQ,GAAG;AACrC,iBAAW;AAAA,IACb,WAAW,cAAc;AACvB,kBAAY;AAAA,IACd;AAAA,EACF;AACA,SAAO;AACT;AAEA,SAAS,aACP,MACA,UACA,WACA;AACA,YAAU,IAAI,KAAK,IAAI,IAAI;AAC3B,WAAS,SAAS,IAAI;AACtB,WAAS,SAAS,KAAK,OAAO,KAAK,MAAM;AAC3C;AAEA,SAAS,iBACP,UACA,WACA,YAAsC,CAAC,GACvC;AACA,QAAM,WAAW,UAAU,IAAI,UAAU;AACzC,MAAI,CAAC,YAAY,SAAS,UAAU,SAAU;AAC9C,QAAM,cAAc,UAAU,OAAO,CAAC,SAAS,KAAK,SAAS,YAAY;AACzE,QAAM,SACJ,YAAY,WAAW,IACnB,iBAAiB,YAAY,CAAC,GAAG,KAAK,KACtC,YAAY,SAAS,IACrB,iBAAiB,YAAY,MAAM,iBACnC,UAAU,KAAK,CAAC,SAAS,KAAK,SAAS,QAAQ,IAC/C,sCACA;AACN;AAAA,IACE;AAAA,MACE,GAAG;AAAA,MACH;AAAA,MACA,OAAO;AAAA,IACT;AAAA,IACA;AAAA,IACA;AAAA,EACF;AACF;AAEA,SAAS,wBAAwB,OAA0C;AACzE,QAAM,UAAU,MAAM;AACtB,MAAI,OAAO,YAAY,SAAU,QAAO;AACxC,QAAM,QAAQ,kCAAkC,KAAK,OAAO;AAC5D,SAAO,QAAQ,CAAC,GAAG,KAAK,KAAK;AAC/B;AAEA,SAAS,kBACP,QAOsB;AACtB,MAAI,OAAO,SAAS,eAAe,OAAO,aAAa,oBAAoB;AACzE,WAAO;AAAA,MACL,IAAI,OAAO;AAAA,MACX,MAAM;AAAA,MACN,OAAO;AAAA,MACP,QAAQ;AAAA,MACR,OAAO;AAAA,IACT;AAAA,EACF;AAEA,MACE,OAAO,SAAS,mBAChB,OAAO,SAAS,uBACf,OAAO,SAAS,eAAe,OAAO,aAAa,SACpD;AACA,UAAM,OAAO,wBAAwB,OAAO,KAAK,KAAK;AACtD,WAAO;AAAA,MACL,IAAI,OAAO;AAAA,MACX,MAAM;AAAA,MACN,OAAO;AAAA,MACP,QAAQ;AAAA,MACR,OAAO;AAAA,IACT;AAAA,EACF;AAEA,SAAO;AACT;AAEO,SAAS,eACd,OACA,UACA,WACA;AACA,MAAI,MAAM,SAAS,kBAAkB,UAAU,SAAS,GAAG;AACzD;AAAA,MACE;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO;AAAA,QACP,OAAO;AAAA,MACT;AAAA,MACA;AAAA,MACA;AAAA,IACF;AACA;AAAA,EACF;AAEA,MAAI,MAAM,SAAS,qBAAqB;AACtC,UAAM,YAAY,MAAM,KAAK,QAAQ,QAAQ,CAAC,WAAW;AACvD,YAAM,OAAO,kBAAkB,MAAM;AACrC,aAAO,OAAO,CAAC,IAAI,IAAI,CAAC;AAAA,IAC1B,CAAC;AACD,qBAAiB,UAAU,WAAW,SAAS;AAC/C,eAAW,QAAQ,UAAW,cAAa,MAAM,UAAU,SAAS;AACpE;AAAA,EACF;AAEA,MAAI,MAAM,SAAS,mBAAmB;AACpC,qBAAiB,UAAU,SAAS;AACpC,UAAMC,WAAU,UAAU,IAAI,MAAM,KAAK,MAAM;AAC/C,QAAI,CAACA,UAAS;AACZ;AAAA,QACE;AAAA,UACE,IAAI,MAAM,KAAK;AAAA,UACf,MAAM;AAAA,UACN,OAAO,MAAM,KAAK,QAAQ;AAAA,UAC1B,QAAQ;AAAA,UACR,OAAO;AAAA,QACT;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,IACF;AACA;AAAA,EACF;AAEA,MAAI,MAAM,SAAS,sBAAsB;AACvC,UAAMA,WAAU,UAAU,IAAI,MAAM,KAAK,MAAM;AAC/C,QAAI,CAACA,SAAS;AACd;AAAA,MACE;AAAA,QACE,GAAGA;AAAA,QACH,QAAQ;AAAA,QACR,OAAO;AAAA,MACT;AAAA,MACA;AAAA,MACA;AAAA,IACF;AACA;AAAA,EACF;AAEA,MAAI,MAAM,SAAS,gBAAiB;AACpC,QAAM,EAAE,QAAQ,OAAO,IAAI,MAAM;AACjC,QAAM,UAAU,UAAU,IAAI,OAAO,MAAM;AAC3C,MAAI,CAAC,QAAS;AACd,QAAM,SAAS,WAAW,eAAe,OAAO,YAAY;AAC5D;AAAA,IACE;AAAA,MACE,GAAG;AAAA,MACH,QAAQ,SACJ,kEACA,QAAQ,SAAS,WACjB,gCACA;AAAA,MACJ,OAAO,SAAS,UAAU;AAAA,IAC5B;AAAA,IACA;AAAA,IACA;AAAA,EACF;AACF;AAEA,IAAM,eAAN,MAAmB;AAAA,EAQjB,YACmB,SACA,SACA,eACA,kBACA,cACjB,gBACA,4BACA;AAPiB;AACA;AACA;AACA;AACA;AAIjB,SAAK,aAAa,6BAA6B;AAAA,MAC7C;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF,CAAC;AAAA,EACH;AAAA,EAhBmB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EAZX;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACS;AAAA,EAqBjB,qBAAyC;AACvC,WACE,KAAK,SAAS,MAAM,aACpB,0BAA0B,KAAK,kBAAkB,KAAK,YAAY,GAC9D;AAAA,EAER;AAAA,EAEA,QAAQ;AACN,SAAK,cAAc,SAAS;AAC5B,SAAK,eAAe;AACpB,QAAI,KAAK,gBAAgB;AACvB,WAAK,KAAK,eAAe,OAAO,EAAE,MAAM,MAAM;AAAA,MAAC,CAAC;AAAA,IAClD,OAAO;AACL,WAAK,KAAK,SAAS,OAAO,EAAE,MAAM,MAAM;AAAA,MAAC,CAAC;AAAA,IAC5C;AACA,SAAK,iBAAiB;AACtB,SAAK,UAAU;AACf,SAAK,WAAW,WAAW;AAC3B,+BAA2B,KAAK,kBAAkB,KAAK,YAAY;AAAA,EACrE;AAAA,EAEQ,qBAAqB,SAAwB;AACnD;AAAA,MACE,KAAK;AAAA,MACL,QAAQ,MAAM;AAAA,MACd,QAAQ,MAAM;AAAA,MACd,KAAK;AAAA,IACP;AAAA,EACF;AAAA,EAEA,MAAc,qBAAqB,QAAuC;AACxE,UAAM,YAAY;AAAA,MAChB,KAAK;AAAA,MACL,KAAK;AAAA,IACP;AACA,QAAI,CAAC,WAAW,UAAW,QAAO;AAElC,UAAM,SAAS,KAAK,aAAa;AACjC,UAAM,WAAW,OAAO,SAAS,OAAO,UAAU,WAAW;AAAA,MAC3D,aAAa,UAAU;AAAA,IACzB,CAAC;AACD,UAAM,WAAW,MAAM;AAAA,MAAsB,KAAK;AAAA,MAAY,MAC5D,SAAS,SAAS,EAAE,OAAO,CAAC;AAAA,IAC9B;AACA,UAAM,oBAAoB,0BAA0B;AAAA,MAClD,oBAAoB,SAAS,QAAQ;AAAA,MACrC,QAAQ,SAAS;AAAA,IACnB,CAAC;AACD,QAAI,sBAAsB,KAAM,QAAO;AAEvC,SAAK,UAAU,OAAO,SAAS,OAAO,UAAU,WAAW;AAAA,MACzD,aAAa;AAAA,IACf,CAAC;AACD;AAAA,MACE,KAAK;AAAA,MACL,UAAU;AAAA,MACV;AAAA,MACA,KAAK;AAAA,IACP;AACA,WAAO;AAAA,EACT;AAAA,EAEA,MAAM,eACJ,SACA,QACA,UACiB;AACjB,UAAM,KAAK,qBAAqB,MAAM;AACtC,WAAO,KAAK,SAAS,SAAS,QAAQ,QAAQ;AAAA,EAChD;AAAA,EAEQ,eAAuB;AAC7B,UAAM,SAAS,0BAA0B;AAAA,MACvC,SAAS,KAAK;AAAA,MACd,SAAS,KAAK;AAAA,MACd,eAAe,KAAK;AAAA,IACtB,CAAC;AACD,QAAI,CAAC,OAAO,SAAS;AACnB,YAAM,IAAI,MAAM,sBAAsB;AAAA,IACxC;AAEA,QAAI,KAAK,UAAU,KAAK,eAAe,OAAO,MAAM;AAClD,aAAO,KAAK;AAAA,IACd;AAEA,SAAK,iBAAiB;AACtB,SAAK,UAAU;AACf,SAAK,SAAS,IAAI,OAAO;AAAA,MACvB,MAAM,EAAE,QAAQ,MAAM,KAAK,WAAW,eAAe,EAAE;AAAA,MACvD,MAAM,OAAO;AAAA,MACb,UAAU;AAAA,IACZ,CAAC;AACD,SAAK,aAAa,OAAO;AACzB,WAAO,KAAK;AAAA,EACd;AAAA,EAEQ,uBAAuB,QAA2C;AACxE,UAAM,YAAY;AAAA,MAChB,KAAK;AAAA,MACL,KAAK;AAAA,IACP;AACA,QAAI,CAAC,WAAW,UAAW,QAAO;AAElC,WAAO,OAAO,SAAS,OAAO,UAAU,WAAW;AAAA,MACjD,aAAa,UAAU;AAAA,IACzB,CAAC;AAAA,EACH;AAAA,EAEA,MAAM,SACJ,SACA,QACA,UACiB;AACjB,UAAM,SAAS,KAAK,aAAa;AACjC,QAAI;AACJ,QAAI,UAAU,KAAK,WAAW,KAAK,uBAAuB,MAAM;AAEhE,QAAI,SAAS;AACX,WAAK,UAAU;AACf,UAAI;AACF,cAAM,gBAAgB;AACtB;AAAA,UACE,KAAK;AAAA,UACL;AAAA,UACA,KAAK;AAAA,QACP;AACA,mBAAW,MAAM;AAAA,UAAsB,KAAK;AAAA,UAAY,MACtD,cAAc,KAAK,SAAS,EAAE,OAAO,CAAC;AAAA,QACxC;AAAA,MACF,SAAS,OAAO;AACd,YACE,iBAAiBC,gBACjB,MAAM,WAAW,OACjB,MAAM,SAAS,sBACf;AACA,qCAA2B,KAAK,kBAAkB,KAAK,YAAY;AACnE,eAAK,UAAU;AACf,oBAAU;AAAA,QACZ,OAAO;AACL,gBAAM;AAAA,QACR;AAAA,MACF;AAAA,IACF;AAEA,QAAI,CAAC,UAAU;AACb;AAAA,QACE,KAAK;AAAA,QACL;AAAA,QACA,KAAK;AAAA,MACP;AACA,YAAM,UAAU,MAAM;AAAA,QAAsB,KAAK;AAAA,QAAY,MAC3D,OAAO,SAAS,OAAO,EAAE,SAAS,OAAO,CAAC;AAAA,MAC5C;AACA,iBAAW,QAAQ;AACnB,gBAAU,QAAQ;AAClB,WAAK,UAAU;AACf,WAAK,qBAAqB,OAAO;AAAA,IACnC;AAEA,SAAK,iBAAiB;AACtB,UAAM,eAAe,IAAI;AAAA,MACvB;AAAA,MACA;AAAA,MACA;AAAA,IACF;AACA,SAAK,eAAe;AACpB,QAAI,cAAc,SAAS,MAAM,eAAe;AAChD,QAAI,WAAW;AACf,UAAM,YAAY,oBAAI,IAA2B;AACjD,QAAI,iBAAiB;AAErB,QAAI;AACF,uBAAiB,SAAS,UAAU;AAClC,YAAI,OAAO,QAAS;AACpB,YAAI,MAAM,SAAS,kBAAmB,cAAa,MAAM,KAAK;AAC9D,YAAI,MAAM,SAAS,kBAAmB,kBAAiB;AACvD,mBAAW,kBAAkB,OAAO,UAAU,UAAU,SAAS;AACjE,uBAAe;AACf,YAAI,SAAS;AACX;AAAA,YACE,KAAK;AAAA,YACL,QAAQ,MAAM;AAAA,YACd;AAAA,YACA,KAAK;AAAA,UACP;AAAA,QACF;AAAA,MACF;AACA,YAAM,aAAa,WAAW;AAAA,IAChC,UAAE;AACA,mBAAa,SAAS;AACtB,WAAK,iBAAiB;AACtB,UAAI,KAAK,iBAAiB,aAAc,MAAK,eAAe;AAC5D,UAAI,SAAS;AACX,aAAK,qBAAqB,OAAO;AAAA,MACnC;AAAA,IACF;AAEA,QAAI,CAAC,SAAS,KAAK,KAAK,CAAC,OAAO,WAAW,CAAC,gBAAgB;AAC1D,YAAM,IAAI,MAAM,6BAA6B;AAAA,IAC/C;AAEA,WAAO,SAAS,KAAK;AAAA,EACvB;AAAA,EAEA,MAAM,WACJ,SACA,QACA,UACA,cAAc,IACU;AACxB,UAAM,YAAY;AAAA,MAChB,KAAK;AAAA,MACL,KAAK;AAAA,IACP;AACA,QAAI,CAAC,UAAW,QAAO;AAEvB,UAAM,SAAS,KAAK,aAAa;AACjC,UAAM,WAAW,OAAO,SAAS,OAAO,UAAU,WAAW;AAAA,MAC3D,aAAa,UAAU;AAAA,IACzB,CAAC;AACD,UAAM,WAAW,MAAM;AAAA,MAAsB,KAAK;AAAA,MAAY,MAC5D,SAAS,SAAS,EAAE,OAAO,CAAC;AAAA,IAC9B;AACA,UAAM,aAAa,iBAAiB,SAAS,MAAM;AACnD,UAAM,kBAAkB,WAAW;AAAA,MACjC,CAAC,UAAU,MAAM,SAAS;AAAA,IAC5B;AACA,UAAM,WAAW,WAAW,CAAC;AAC7B,UAAM,WAAW,UAAU;AAC3B,UAAM,WAAW,CAAC,WAAW,KAAK,CAAC,UAAU,eAAe,KAAK,CAAC;AAClE,QACE,UAAU,SAAS,sBACnB,EACE,oBAAoB,SAAS,KAAK,SAAS,OAAO,KACjD,YACC,aAAa,UACb,SAAS,KAAK,YAAY,WAE9B;AACA,aAAO;AAAA,IACT;AACA,QAAI,WAAW,WAAW,UAAU;AACpC,UAAM,YAAY,oBAAI,IAA2B;AACjD,UAAM,eAAe,IAAI;AAAA,MACvB;AAAA,MACA;AAAA,MACA;AAAA,IACF;AACA,SAAK,eAAe;AACpB,QAAI;AACF,iBAAW,SAAS,YAAY;AAC9B,YAAI,MAAM,SAAS,kBAAmB,cAAa,MAAM,KAAK;AAC9D,uBAAe,OAAO,UAAU,SAAS;AACzC,oCAA4B,OAAO,QAAQ;AAAA,MAC7C;AAEA,UAAI,SAAS,WAAW,WAAW,GAAG;AACpC,cAAM,aAAa,SAAS,MAAM,YAAY,MAAM;AACpD,YAAI,WAAY,UAAS,QAAQ,UAAU;AAAA,MAC7C,WAAW,YAAY,WAAW,QAAQ,GAAG;AAC3C,mBAAW;AAAA,MACb,WAAW,CAAC,YAAY,WAAW,QAAQ,GAAG;AAC5C,mBAAW,cAAc;AAAA,MAC3B;AAEA,UAAI,UAAU,OAAO,SAAS,OAAO,SAAS,QAAQ,WAAW;AAAA,QAC/D,aAAa,SAAS,QAAQ;AAAA,MAChC,CAAC;AACD,WAAK,UAAU;AACf,WAAK,qBAAqB,OAAO;AAEjC,UAAI;AACJ,eAAS,QAAQ,WAAW,SAAS,GAAG,SAAS,GAAG,SAAS,GAAG;AAC9D,cAAM,QAAQ,WAAW,KAAK;AAC9B,YAAI,SAAS,eAAe,KAAK,GAAG;AAClC,6BAAmB;AACnB;AAAA,QACF;AAAA,MACF;AACA,UAAI,kBAAkB;AACpB,YAAI,iBAAiB,SAAS,kBAAkB;AAC9C,gBAAM,IAAI;AAAA,YACR,iBAAiB,KAAK,WAAW,iBAAiB,KAAK;AAAA,UACzD;AAAA,QACF;AACA,iBAAS,aAAa;AACtB,cAAM,aAAa,WAAW;AAC9B,YAAI,CAAC,SAAS,KAAK,KAAK,CAAC,iBAAiB;AACxC,gBAAM,IAAI,MAAM,6BAA6B;AAAA,QAC/C;AACA,eAAO,SAAS,KAAK;AAAA,MACvB;AAEA,UAAI,cAAc,SAAS,QAAQ;AACnC,uBAAiB,SAAS,QAAQ,OAAO,EAAE,OAAO,CAAC,GAAG;AACpD,YAAI,OAAO,QAAS;AACpB,YAAI,MAAM,SAAS,kBAAmB,cAAa,MAAM,KAAK;AAC9D,mBAAW,kBAAkB,OAAO,UAAU,UAAU,SAAS;AACjE,uBAAe;AACf;AAAA,UACE,KAAK;AAAA,UACL,QAAQ,MAAM;AAAA,UACd;AAAA,UACA,KAAK;AAAA,QACP;AACA,YAAI,eAAe,KAAK,EAAG;AAAA,MAC7B;AACA,YAAM,aAAa,WAAW;AAE9B,gBAAU,OAAO,SAAS,OAAO,QAAQ,MAAM,WAAW;AAAA,QACxD;AAAA,MACF,CAAC;AACD,WAAK,UAAU;AACf,WAAK,qBAAqB,OAAO;AAEjC,UAAI,CAAC,SAAS,KAAK,KAAK,CAAC,OAAO,WAAW,CAAC,iBAAiB;AAC3D,cAAM,IAAI,MAAM,6BAA6B;AAAA,MAC/C;AACA,aAAO,SAAS,KAAK;AAAA,IACvB,UAAE;AACA,mBAAa,SAAS;AACtB,UAAI,KAAK,iBAAiB,aAAc,MAAK,eAAe;AAAA,IAC9D;AAAA,EACF;AAAA,EAEA,MAAM,YACJ,WACA,QACA,UACiB;AACjB,UAAM,SAAS,KAAK,aAAa;AACjC,UAAM,UAAU,KAAK,WAAW,KAAK,uBAAuB,MAAM;AAClE,QAAI,CAAC,SAAS;AACZ,YAAM,IAAI,MAAM,yCAAyC;AAAA,IAC3D;AACA,SAAK,UAAU;AACf,UAAM,iBAAkC,UAAU;AAAA,MAChD,CAAC,EAAE,WAAW,UAAU,KAAK,OAAO;AAAA,QAClC;AAAA,QACA,GAAI,WAAW,EAAE,SAAS,IAAI,CAAC;AAAA,QAC/B,GAAI,OAAO,EAAE,KAAK,IAAI,CAAC;AAAA,MACzB;AAAA,IACF;AACA,UAAM,WAAW,MAAM;AAAA,MAAsB,KAAK;AAAA,MAAY,MAC5D,QAAQ,QAAQ,gBAAgB,EAAE,OAAO,CAAC;AAAA,IAC5C;AACA,SAAK,iBAAiB;AACtB,UAAM,eAAe,IAAI;AAAA,MACvB;AAAA,MACA;AAAA,MACA;AAAA,IACF;AACA,SAAK,eAAe;AACpB,QAAI,cAAc,QAAQ,MAAM;AAChC,QAAI,WAAW;AACf,QAAI,iBAAiB;AACrB,UAAM,YAAY,oBAAI,IAA2B;AAEjD,QAAI;AACF,uBAAiB,SAAS,UAAU;AAClC,YAAI,OAAO,QAAS;AACpB,YAAI,MAAM,SAAS,kBAAmB,cAAa,MAAM,KAAK;AAC9D,YAAI,MAAM,SAAS,kBAAmB,kBAAiB;AACvD,mBAAW,kBAAkB,OAAO,UAAU,UAAU,SAAS;AACjE,uBAAe;AACf;AAAA,UACE,KAAK;AAAA,UACL,QAAQ,MAAM;AAAA,UACd;AAAA,UACA,KAAK;AAAA,QACP;AAAA,MACF;AACA,YAAM,aAAa,WAAW;AAAA,IAChC,UAAE;AACA,mBAAa,SAAS;AACtB,WAAK,iBAAiB;AACtB,UAAI,KAAK,iBAAiB,aAAc,MAAK,eAAe;AAC5D,WAAK,UAAU,OAAO,SAAS,OAAO,QAAQ,MAAM,WAAW;AAAA,QAC7D;AAAA,MACF,CAAC;AACD,WAAK,qBAAqB,KAAK,OAAO;AAAA,IACxC;AAEA,QAAI,CAAC,SAAS,KAAK,KAAK,CAAC,OAAO,WAAW,CAAC,gBAAgB;AAC1D,YAAM,IAAI,MAAM,6BAA6B;AAAA,IAC/C;AACA,WAAO,SAAS,KAAK;AAAA,EACvB;AAAA,EAEA,eAAe;AACb,SAAK,cAAc,SAAS;AAC5B,QAAI,KAAK,gBAAgB;AACvB,WAAK,eAAe,OAAO,EAAE,MAAM,MAAM;AAAA,MAAC,CAAC;AAAA,IAC7C,OAAO;AACL,WAAK,SAAS,OAAO,EAAE,MAAM,MAAM;AAAA,MAAC,CAAC;AAAA,IACvC;AAAA,EACF;AACF;AAEO,SAAS,kBAAkB,SAA0C;AAC1E,QAAM,UAAU,QAAQ,QAAQ,KAAK;AACrC,MAAI,CAAC,SAAS;AACZ,UAAM,IAAI,MAAM,sBAAsB;AAAA,EACxC;AAEA,QAAM,UAAU,QAAQ,WAAW;AACnC,QAAM,gBAAgB,0BAA0B;AAAA,IAC9C;AAAA,IACA,eAAe,QAAQ;AAAA,IACvB;AAAA,EACF,CAAC,EAAE;AACH,QAAM,eAAoC;AAAA,IACxC,kBACE,QAAQ,kBAAkB,KAAK,KAC/B,2BAA2B;AAAA,MACzB,YAAY,QAAQ;AAAA,MACpB;AAAA,MACA;AAAA,MACA;AAAA,IACF,CAAC;AAAA,EACL;AACA,QAAM,mBACJ,QAAQ,kBAAkB,KAAK,KAC/B,4BAA4B,YAAY;AAE1C,QAAM,UAAU,IAAI;AAAA,IAClB;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,QAAQ;AAAA,IACR,QAAQ;AAAA,EACV;AAEA,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,UAAU,CAAC,SAAS,gBAClB,QAAQ;AAAA,MACN;AAAA,MACA,YAAY,UAAU,IAAI,gBAAgB,EAAE;AAAA,MAC5C,YAAY;AAAA,IACd;AAAA,IACF,YAAY,CAAC,kBACX,QAAQ;AAAA,MACN,cAAc;AAAA,MACd,cAAc,UAAU,IAAI,gBAAgB,EAAE;AAAA,MAC9C,cAAc;AAAA,MACd,cAAc;AAAA,IAChB;AAAA,IACF,aAAa,CAAC,mBACZ,QAAQ;AAAA,MACN,eAAe;AAAA,MACf,eAAe,UAAU,IAAI,gBAAgB,EAAE;AAAA,MAC/C,eAAe;AAAA,IACjB;AAAA,IACF,gBAAgB,CAAC,SAAS,sBACxB,QAAQ;AAAA,MACN;AAAA,MACA,kBAAkB,UAAU,IAAI,gBAAgB,EAAE;AAAA,MAClD,kBAAkB;AAAA,IACpB;AAAA,IACF,OAAO,MAAM,QAAQ,MAAM;AAAA,IAC3B,cAAc,MAAM,QAAQ,aAAa;AAAA,IACzC,oBAAoB,MAAM,QAAQ,mBAAmB;AAAA,EACvD;AACF;;;AK/0BA,SAAS,eAAAC,oBAAmB;AAE5B,IAAM,gCACJ;AACF,IAAM,sCACJ;AAEF,SAAS,0BAA0B,SAAiB;AAClD,QAAM,aAAa,QAAQ,KAAK,EAAE,YAAY;AAC9C,SACE,WAAW,SAAS,6BAA6B,KACjD,WAAW,SAAS,iBAAiB,KACrC,WAAW,SAAS,cAAc,KAClC,WAAW,SAAS,eAAe,KACnC,WAAW,SAAS,aAAa,KACjC,WAAW,SAAS,YAAY;AAEpC;AAEA,SAAS,8BAA8B,SAAiB;AACtD,QAAM,aAAa,QAAQ,KAAK,EAAE,YAAY;AAC9C,SACE,WAAW,SAAS,mCAAmC,KACvD,WAAW,SAAS,2BAA2B,KAC/C,WAAW,SAAS,4BAA4B,KAChD,WAAW,SAAS,uBAAuB;AAE/C;AAEO,SAAS,iBAAiB,OAAwB;AACvD,MAAI,iBAAiBA,cAAa;AAChC,QAAI,MAAM,WAAW,OAAO,MAAM,SAAS,kBAAkB;AAC3D,aAAO;AAAA,IACT;AACA,QAAI,MAAM,WAAW,OAAO,MAAM,SAAS,qBAAqB;AAC9D,aAAO;AAAA,IACT;AACA,QAAI,MAAM,WAAW,OAAO,MAAM,SAAS,sBAAsB;AAC/D,aAAO;AAAA,IACT;AACA,QAAI,MAAM,WAAW,8BAA8B,MAAM,OAAO,GAAG;AACjE,aAAO;AAAA,IACT;AACA,QACE,MAAM,UAAU,OACf,MAAM,WAAW,0BAA0B,MAAM,OAAO,GACzD;AACA,aAAO;AAAA,IACT;AACA,WAAO,MAAM,WAAW;AAAA,EAC1B;AACA,MAAI,iBAAiB,gBAAgB,MAAM,SAAS,cAAc;AAChE,WAAO;AAAA,EACT;AACA,MAAI,iBAAiB,OAAO;AAC1B,QAAI,8BAA8B,MAAM,OAAO,GAAG;AAChD,aAAO;AAAA,IACT;AACA,WAAO,0BAA0B,MAAM,OAAO,IAC1C,gCACA,MAAM;AAAA,EACZ;AACA,SAAO;AACT;;;AC3DA,eAAsB,gBACpB,eACA,YAA0B,OACE;AAC5B,QAAM,YAAY,eAAe,aAAa;AAE9C,MAAI;AACF,UAAM,WAAW,MAAM,UAAU,WAAW;AAAA,MAC1C,SAAS,EAAE,QAAQ,mBAAmB;AAAA,MACtC,OAAO;AAAA,IACT,CAAC;AACD,QAAI,CAAC,SAAS,IAAI;AAChB,aAAO,EAAE,IAAI,OAAO,QAAQ,wBAAwB,SAAS,MAAM,IAAI;AAAA,IACzE;AACA,UAAM,UAAW,MAAM,SAAS,KAAK;AACrC,QAAI,QAAQ,OAAO,MAAM;AACvB,aAAO,EAAE,IAAI,MAAM,QAAQ,QAAQ,UAAU,QAAQ;AAAA,IACvD;AACA,WAAO,EAAE,IAAI,OAAO,QAAQ,qCAAqC;AAAA,EACnE,SAAS,OAAO;AACd,WAAO,EAAE,IAAI,OAAO,QAAQ,iBAAiB,KAAK,KAAK,sBAAsB;AAAA,EAC/E;AACF;","names":["ClientError","isRecord","trimmed","current","ClientError","ClientError"]}
|
|
1
|
+
{"version":3,"sources":["../src/runtime/client.ts","../src/runtime/capability.ts","../src/runtime/config.ts","../src/runtime/session-store.ts","../src/runtime/subagent-child-stream.ts","../src/runtime/errors.ts","../src/runtime/health.ts"],"sourcesContent":["import { connectedToolWork, completeConnectedToolWork } from \"./connected-tool-work\";\nimport {\n Client,\n ClientError,\n type ClientSession,\n type InputResponse,\n type MessageResponse,\n type MessageStreamEvent,\n} from \"eve/client\";\nimport {\n createAgentRuntimeCapability,\n type AgentRuntimeCapability,\n withCapabilityRefresh,\n} from \"./capability\";\nimport { resolveAgentRuntimeConfig } from \"./config\";\nimport {\n buildAgentStorageKeyPrefix,\n clearPersistedAgentSession,\n getOrCreateVisitorSessionId,\n loadPersistedAgentSession,\n savePersistedAgentSession,\n savePersistedAgentTurnMessage,\n type SessionStoreOptions,\n} from \"./session-store\";\nimport { SubagentChildStreamCoordinator } from \"./subagent-child-stream\";\nimport type {\n AgentClient,\n AgentClientOptions,\n AgentIndexVersion,\n AgentResumeTurnOptions,\n AgentRespondTurnOptions,\n AgentSendTurnOptions,\n AgentStreamHandlers,\n AgentWorkItem,\n} from \"./types\";\nimport { parseAgentToolUiSurface } from \"./tool-ui\";\n\ntype AgentRuntimeStreamEvent =\n | MessageStreamEvent\n | Extract<MessageStreamEvent, { type: \"subagent.event\" }>[\"data\"][\"event\"];\n\nfunction isTurnBoundary(event: MessageStreamEvent) {\n return (\n event.type === \"session.waiting\" ||\n event.type === \"session.completed\" ||\n event.type === \"session.failed\"\n );\n}\n\nfunction applyMessageEvent(\n event: MessageStreamEvent,\n rendered: string,\n handlers: AgentStreamHandlers,\n workItems: Map<string, AgentWorkItem>\n) {\n applyWorkEvent(event, handlers, workItems);\n\n if (event.type === \"session.failed\") {\n throw new Error(event.data.message || event.data.code);\n }\n\n if (event.type === \"message.completed\") {\n handlers.onComplete?.();\n }\n\n emitVisitorInteractionEvent(event, handlers);\n\n if (event.type !== \"message.appended\") return rendered;\n\n const { messageDelta, messageSoFar } = event.data;\n let delta = messageDelta;\n let next = rendered;\n if (messageSoFar.startsWith(rendered)) {\n delta = messageSoFar.slice(rendered.length);\n next = messageSoFar;\n } else if (messageDelta) {\n next += messageDelta;\n }\n if (delta) handlers.onDelta?.(delta);\n return next;\n}\n\nfunction emitActionResult(\n event: Extract<AgentRuntimeStreamEvent, { type: \"action.result\" }>,\n handlers: AgentStreamHandlers\n) {\n const result = event.data.result;\n if (result.kind === \"tool-result\") {\n handlers.onToolResult?.({\n callId: result.callId,\n toolName: result.toolName,\n status: result.isError ? \"failed\" : event.data.status,\n output: result.output,\n ...(event.data.error ? { error: event.data.error } : {}),\n });\n }\n if (\"output\" in result) handlers.onActionResult?.(result.output);\n}\n\nfunction emitInputRequests(\n event: Extract<AgentRuntimeStreamEvent, { type: \"input.requested\" }>,\n handlers: AgentStreamHandlers\n) {\n handlers.onInputRequest?.(\n event.data.requests.map((request) => {\n const ui = parseAgentToolUiSurface(\n (request as unknown as { ui?: unknown }).ui\n );\n return {\n requestId: request.requestId,\n kind: request.kind,\n prompt: request.prompt,\n ...(request.display ? { display: request.display } : {}),\n ...(request.allowFreeform !== undefined\n ? { allowFreeform: request.allowFreeform }\n : {}),\n ...(request.options ? { options: request.options } : {}),\n ...(ui ? { ui } : {}),\n action: {\n callId: request.action.callId,\n kind: \"tool-call\" as const,\n toolName: request.action.toolName,\n },\n };\n })\n );\n}\n\nfunction emitVisitorInteractionEvent(\n event: AgentRuntimeStreamEvent,\n handlers: AgentStreamHandlers\n) {\n if (event.type === \"action.result\") emitActionResult(event, handlers);\n if (event.type === \"input.requested\") emitInputRequests(event, handlers);\n if (event.type === \"subagent.event\") {\n emitVisitorInteractionEvent(event.data.event, handlers);\n }\n}\n\nexport function isResumeTurnMessage(received: string, candidate: string) {\n if (received === candidate) return true;\n return Boolean(candidate) && received.endsWith(`\\n\\n${candidate}`);\n}\n\nfunction latestTurnEvents(events: readonly MessageStreamEvent[]) {\n let startIndex = -1;\n for (let index = events.length - 1; index >= 0; index -= 1) {\n if (events[index]?.type === \"message.received\") {\n startIndex = index;\n break;\n }\n }\n return startIndex >= 0 ? events.slice(startIndex) : [];\n}\n\nexport function streamIndexBeforeLastTurn(input: {\n currentStreamIndex: number;\n events: readonly MessageStreamEvent[];\n}): number | null {\n let turnStart = -1;\n for (let index = input.events.length - 1; index >= 0; index -= 1) {\n if (input.events[index]?.type === \"message.received\") {\n turnStart = index;\n break;\n }\n }\n if (turnStart < 0) return null;\n return Math.max(\n 0,\n input.currentStreamIndex - (input.events.length - turnStart)\n );\n}\n\nfunction renderTurn(events: readonly MessageStreamEvent[]) {\n let rendered = \"\";\n for (const event of events) {\n if (event.type !== \"message.appended\") continue;\n const { messageDelta, messageSoFar } = event.data;\n if (messageSoFar.startsWith(rendered)) {\n rendered = messageSoFar;\n } else if (messageDelta) {\n rendered += messageDelta;\n }\n }\n return rendered;\n}\n\nfunction emitWorkItem(\n item: AgentWorkItem,\n handlers: AgentStreamHandlers,\n workItems: Map<string, AgentWorkItem>\n) {\n workItems.set(item.id, item);\n handlers.onWork?.(item);\n handlers.onStep?.(item.label, item.detail);\n}\n\nfunction completePlanning(\n handlers: AgentStreamHandlers,\n workItems: Map<string, AgentWorkItem>,\n nextItems: readonly AgentWorkItem[] = []\n) {\n const planning = workItems.get(\"planning\");\n if (!planning || planning.state !== \"active\") return;\n const specialists = nextItems.filter((item) => item.kind === \"specialist\");\n const detail =\n specialists.length === 1\n ? `Delegating to ${specialists[0]?.label}`\n : specialists.length > 1\n ? `Delegating to ${specialists.length} specialists`\n : nextItems.some((item) => item.kind === \"search\")\n ? \"Using built-in Search & Discovery\"\n : \"Picked the best way to help\";\n emitWorkItem(\n {\n ...planning,\n detail,\n state: \"completed\",\n },\n handlers,\n workItems\n );\n}\n\nfunction specialistNameFromInput(input: Readonly<Record<string, unknown>>) {\n const message = input.message;\n if (typeof message !== \"string\") return undefined;\n const match = /^Webless-Agent-Name:\\s*(.+)$/imu.exec(message);\n return match?.[1]?.trim() || undefined;\n}\n\nfunction requestedWorkItem(\n action: Extract<\n Extract<\n MessageStreamEvent,\n { type: \"actions.requested\" }\n >[\"data\"][\"actions\"][number],\n { callId: string }\n >\n): AgentWorkItem | null {\n if (action.kind === \"tool-call\" && action.toolName === \"search_discovery\") {\n return {\n id: action.callId,\n kind: \"search\",\n label: \"Search & Discovery\",\n detail: \"Searching this site\",\n state: \"active\",\n };\n }\n\n if (\n action.kind === \"subagent-call\" ||\n action.kind === \"remote-agent-call\" ||\n (action.kind === \"tool-call\" && action.toolName === \"agent\")\n ) {\n const name = specialistNameFromInput(action.input) ?? \"Specialist\";\n return {\n id: action.callId,\n kind: \"specialist\",\n label: name,\n detail: \"Reviewing your question\",\n state: \"active\",\n };\n }\n\n return action.kind === \"tool-call\" ? connectedToolWork(action) : null;\n}\n\nexport function applyWorkEvent(\n event: AgentRuntimeStreamEvent,\n handlers: AgentStreamHandlers,\n workItems: Map<string, AgentWorkItem>\n) {\n if (event.type === \"subagent.event\") {\n applyWorkEvent(event.data.event, handlers, workItems);\n return;\n }\n if (event.type === \"step.started\" && workItems.size === 0) {\n emitWorkItem(\n {\n id: \"planning\",\n kind: \"planning\",\n label: \"Understanding your question\",\n state: \"active\",\n },\n handlers,\n workItems\n );\n return;\n }\n\n if (event.type === \"actions.requested\") {\n const nextItems = event.data.actions.flatMap((action) => {\n const item = requestedWorkItem(action);\n return item ? [item] : [];\n });\n completePlanning(handlers, workItems, nextItems);\n for (const item of nextItems) emitWorkItem(item, handlers, workItems);\n return;\n }\n\n if (event.type === \"subagent.called\") {\n completePlanning(handlers, workItems);\n const current = workItems.get(event.data.callId);\n if (!current) {\n emitWorkItem(\n {\n id: event.data.callId,\n kind: \"specialist\",\n label: event.data.name || \"Specialist\",\n detail: \"Reviewing your question\",\n state: \"active\",\n },\n handlers,\n workItems\n );\n }\n return;\n }\n\n if (event.type === \"subagent.completed\") {\n const current = workItems.get(event.data.callId);\n if (!current) return;\n emitWorkItem(\n {\n ...current,\n detail: \"Guidance received\",\n state: \"completed\",\n },\n handlers,\n workItems\n );\n return;\n }\n\n if (event.type !== \"action.result\") return;\n const { result, status } = event.data;\n const current = workItems.get(result.callId);\n if (!current) return;\n if (current.kind === \"tool\" && result.kind === \"tool-result\") {\n emitWorkItem(completeConnectedToolWork(current, {\n callId: result.callId,\n toolName: result.toolName,\n status: result.isError ? \"failed\" : status,\n output: result.output,\n }), handlers, workItems);\n return;\n }\n const failed = status !== \"completed\" || result.isError === true;\n emitWorkItem(\n {\n ...current,\n detail: failed\n ? \"Couldn’t complete; continuing with available information\"\n : current.kind === \"search\"\n ? \"Found relevant site content\"\n : \"Guidance received\",\n state: failed ? \"error\" : \"completed\",\n },\n handlers,\n workItems\n );\n}\n\nclass AgentSession {\n private client: Client | undefined;\n private clientHost: string | undefined;\n private session: ClientSession | undefined;\n private activeResponse: MessageResponse | undefined;\n private childStreams: SubagentChildStreamCoordinator | undefined;\n private readonly capability: AgentRuntimeCapability;\n\n constructor(\n private readonly indexId: string,\n private readonly version: AgentIndexVersion,\n private readonly runtimeOrigin: string,\n private readonly visitorSessionId: string,\n private readonly storeOptions: SessionStoreOptions,\n previewBuildId?: string,\n getUnpublishedPreviewGrant?: () => Promise<string>\n ) {\n this.capability = createAgentRuntimeCapability({\n getUnpublishedPreviewGrant,\n indexId,\n previewBuildId,\n runtimeOrigin,\n version,\n visitorSessionId,\n });\n }\n\n getActiveSessionId(): string | undefined {\n return (\n this.session?.state.sessionId ??\n loadPersistedAgentSession(this.visitorSessionId, this.storeOptions)\n ?.sessionId\n );\n }\n\n reset() {\n this.childStreams?.abortAll();\n this.childStreams = undefined;\n if (this.activeResponse) {\n void this.activeResponse.cancel().catch(() => {});\n } else {\n void this.session?.cancel().catch(() => {});\n }\n this.activeResponse = undefined;\n this.session = undefined;\n this.capability.invalidate();\n clearPersistedAgentSession(this.visitorSessionId, this.storeOptions);\n }\n\n private persistSessionCursor(session: ClientSession) {\n savePersistedAgentSession(\n this.visitorSessionId,\n session.state.sessionId,\n session.state.streamIndex,\n this.storeOptions\n );\n }\n\n private async rewindBeforeLastTurn(signal: AbortSignal): Promise<boolean> {\n const persisted = loadPersistedAgentSession(\n this.visitorSessionId,\n this.storeOptions\n );\n if (!persisted?.sessionId) return false;\n\n const client = this.ensureClient();\n const attached = client.sessions.attach(persisted.sessionId, {\n streamIndex: persisted.streamIndex,\n });\n const snapshot = await withCapabilityRefresh(this.capability, () =>\n attached.snapshot({ signal })\n );\n const rewindStreamIndex = streamIndexBeforeLastTurn({\n currentStreamIndex: snapshot.session.streamIndex,\n events: snapshot.events,\n });\n if (rewindStreamIndex === null) return false;\n\n this.session = client.sessions.attach(persisted.sessionId, {\n streamIndex: rewindStreamIndex,\n });\n savePersistedAgentSession(\n this.visitorSessionId,\n persisted.sessionId,\n rewindStreamIndex,\n this.storeOptions\n );\n return true;\n }\n\n async regenerateTurn(\n message: string,\n signal: AbortSignal,\n handlers: AgentStreamHandlers\n ): Promise<string> {\n await this.rewindBeforeLastTurn(signal);\n return this.sendTurn(message, signal, handlers);\n }\n\n private ensureClient(): Client {\n const config = resolveAgentRuntimeConfig({\n indexId: this.indexId,\n version: this.version,\n runtimeOrigin: this.runtimeOrigin,\n });\n if (!config.indexId) {\n throw new Error(\"indexId is required.\");\n }\n\n if (this.client && this.clientHost === config.host) {\n return this.client;\n }\n\n this.activeResponse = undefined;\n this.session = undefined;\n this.client = new Client({\n auth: { bearer: () => this.capability.getAccessToken() },\n host: config.host,\n redirect: \"error\",\n });\n this.clientHost = config.host;\n return this.client;\n }\n\n private attachPersistedSession(client: Client): ClientSession | undefined {\n const persisted = loadPersistedAgentSession(\n this.visitorSessionId,\n this.storeOptions\n );\n if (!persisted?.sessionId) return undefined;\n\n return client.sessions.attach(persisted.sessionId, {\n streamIndex: persisted.streamIndex,\n });\n }\n\n async sendTurn(\n message: string,\n signal: AbortSignal,\n handlers: AgentStreamHandlers\n ): Promise<string> {\n const client = this.ensureClient();\n let response: MessageResponse | undefined;\n let session = this.session ?? this.attachPersistedSession(client);\n\n if (session) {\n this.session = session;\n try {\n const activeSession = session;\n savePersistedAgentTurnMessage(\n this.visitorSessionId,\n message,\n this.storeOptions\n );\n response = await withCapabilityRefresh(this.capability, () =>\n activeSession.send(message, { signal })\n );\n } catch (error) {\n if (\n error instanceof ClientError &&\n error.status === 409 &&\n error.code === \"session_not_active\"\n ) {\n clearPersistedAgentSession(this.visitorSessionId, this.storeOptions);\n this.session = undefined;\n session = undefined;\n } else {\n throw error;\n }\n }\n }\n\n if (!response) {\n savePersistedAgentTurnMessage(\n this.visitorSessionId,\n message,\n this.storeOptions\n );\n const created = await withCapabilityRefresh(this.capability, () =>\n client.sessions.create({ message, signal })\n );\n response = created.response;\n session = created.session;\n this.session = session;\n this.persistSessionCursor(session);\n }\n\n this.activeResponse = response;\n const childStreams = new SubagentChildStreamCoordinator(\n client,\n handlers,\n signal\n );\n this.childStreams = childStreams;\n let streamIndex = session?.state.streamIndex ?? 0;\n let rendered = \"\";\n const workItems = new Map<string, AgentWorkItem>();\n let requestedInput = false;\n\n try {\n for await (const event of response) {\n if (signal.aborted) break;\n if (event.type === \"subagent.called\") childStreams.begin(event);\n if (event.type === \"input.requested\") requestedInput = true;\n rendered = applyMessageEvent(event, rendered, handlers, workItems);\n streamIndex += 1;\n if (session) {\n savePersistedAgentSession(\n this.visitorSessionId,\n session.state.sessionId,\n streamIndex,\n this.storeOptions\n );\n }\n }\n await childStreams.waitForAll();\n } finally {\n childStreams.abortAll();\n this.activeResponse = undefined;\n if (this.childStreams === childStreams) this.childStreams = undefined;\n if (session) {\n this.persistSessionCursor(session);\n }\n }\n\n if (!rendered.trim() && !signal.aborted && !requestedInput) {\n throw new Error(\"Empty response from runtime\");\n }\n\n return rendered.trim();\n }\n\n async resumeTurn(\n message: string,\n signal: AbortSignal,\n handlers: AgentStreamHandlers,\n initialText = \"\"\n ): Promise<string | null> {\n const persisted = loadPersistedAgentSession(\n this.visitorSessionId,\n this.storeOptions\n );\n if (!persisted) return null;\n\n const client = this.ensureClient();\n const attached = client.sessions.attach(persisted.sessionId, {\n streamIndex: persisted.streamIndex,\n });\n const snapshot = await withCapabilityRefresh(this.capability, () =>\n attached.snapshot({ signal })\n );\n const turnEvents = latestTurnEvents(snapshot.events);\n const hasInputRequest = turnEvents.some(\n (event) => event.type === \"input.requested\"\n );\n const received = turnEvents[0];\n const lastSent = persisted.lastMessage;\n const inFlight = !turnEvents.some((event) => isTurnBoundary(event));\n if (\n received?.type !== \"message.received\" ||\n !(\n isResumeTurnMessage(received.data.message, message) ||\n (inFlight &&\n lastSent !== undefined &&\n received.data.message === lastSent)\n )\n ) {\n return null;\n }\n let rendered = renderTurn(turnEvents);\n const workItems = new Map<string, AgentWorkItem>();\n const childStreams = new SubagentChildStreamCoordinator(\n client,\n handlers,\n signal\n );\n this.childStreams = childStreams;\n try {\n for (const event of turnEvents) {\n if (event.type === \"subagent.called\") childStreams.begin(event);\n applyWorkEvent(event, handlers, workItems);\n emitVisitorInteractionEvent(event, handlers);\n }\n\n if (rendered.startsWith(initialText)) {\n const missedText = rendered.slice(initialText.length);\n if (missedText) handlers.onDelta(missedText);\n } else if (initialText.startsWith(rendered)) {\n rendered = initialText;\n } else if (!initialText.startsWith(rendered)) {\n rendered = initialText + rendered;\n }\n\n let session = client.sessions.attach(snapshot.session.sessionId, {\n streamIndex: snapshot.session.streamIndex,\n });\n this.session = session;\n this.persistSessionCursor(session);\n\n let snapshotBoundary: MessageStreamEvent | undefined;\n for (let index = turnEvents.length - 1; index >= 0; index -= 1) {\n const event = turnEvents[index];\n if (event && isTurnBoundary(event)) {\n snapshotBoundary = event;\n break;\n }\n }\n if (snapshotBoundary) {\n if (snapshotBoundary.type === \"session.failed\") {\n throw new Error(\n snapshotBoundary.data.message || snapshotBoundary.data.code\n );\n }\n handlers.onComplete?.();\n await childStreams.waitForAll();\n if (!rendered.trim() && !hasInputRequest) {\n throw new Error(\"Empty response from runtime\");\n }\n return rendered.trim();\n }\n\n let streamIndex = snapshot.session.streamIndex;\n for await (const event of session.stream({ signal })) {\n if (signal.aborted) break;\n if (event.type === \"subagent.called\") childStreams.begin(event);\n rendered = applyMessageEvent(event, rendered, handlers, workItems);\n streamIndex += 1;\n savePersistedAgentSession(\n this.visitorSessionId,\n session.state.sessionId,\n streamIndex,\n this.storeOptions\n );\n if (isTurnBoundary(event)) break;\n }\n await childStreams.waitForAll();\n\n session = client.sessions.attach(session.state.sessionId, {\n streamIndex,\n });\n this.session = session;\n this.persistSessionCursor(session);\n\n if (!rendered.trim() && !signal.aborted && !hasInputRequest) {\n throw new Error(\"Empty response from runtime\");\n }\n return rendered.trim();\n } finally {\n childStreams.abortAll();\n if (this.childStreams === childStreams) this.childStreams = undefined;\n }\n }\n\n async respondTurn(\n responses: AgentRespondTurnOptions[\"responses\"],\n signal: AbortSignal,\n handlers: AgentStreamHandlers\n ): Promise<string> {\n const client = this.ensureClient();\n const session = this.session ?? this.attachPersistedSession(client);\n if (!session) {\n throw new Error(\"No active session is waiting for input.\");\n }\n this.session = session;\n const inputResponses: InputResponse[] = responses.map(\n ({ requestId, optionId, text }) => ({\n requestId,\n ...(optionId ? { optionId } : {}),\n ...(text ? { text } : {}),\n })\n );\n const response = await withCapabilityRefresh(this.capability, () =>\n session.respond(inputResponses, { signal })\n );\n this.activeResponse = response;\n const childStreams = new SubagentChildStreamCoordinator(\n client,\n handlers,\n signal\n );\n this.childStreams = childStreams;\n let streamIndex = session.state.streamIndex;\n let rendered = \"\";\n let requestedInput = false;\n const workItems = new Map<string, AgentWorkItem>();\n\n try {\n for await (const event of response) {\n if (signal.aborted) break;\n if (event.type === \"subagent.called\") childStreams.begin(event);\n if (event.type === \"input.requested\") requestedInput = true;\n rendered = applyMessageEvent(event, rendered, handlers, workItems);\n streamIndex += 1;\n savePersistedAgentSession(\n this.visitorSessionId,\n session.state.sessionId,\n streamIndex,\n this.storeOptions\n );\n }\n await childStreams.waitForAll();\n } finally {\n childStreams.abortAll();\n this.activeResponse = undefined;\n if (this.childStreams === childStreams) this.childStreams = undefined;\n this.session = client.sessions.attach(session.state.sessionId, {\n streamIndex,\n });\n this.persistSessionCursor(this.session);\n }\n\n if (!rendered.trim() && !signal.aborted && !requestedInput) {\n throw new Error(\"Empty response from runtime\");\n }\n return rendered.trim();\n }\n\n cancelActive() {\n this.childStreams?.abortAll();\n if (this.activeResponse) {\n this.activeResponse.cancel().catch(() => {});\n } else {\n this.session?.cancel().catch(() => {});\n }\n }\n}\n\nexport function createAgentClient(options: AgentClientOptions): AgentClient {\n const indexId = options.indexId.trim();\n if (!indexId) {\n throw new Error(\"indexId is required.\");\n }\n\n const version = options.version ?? \"published\";\n const runtimeOrigin = resolveAgentRuntimeConfig({\n indexId,\n runtimeOrigin: options.runtimeOrigin,\n version,\n }).origin;\n const storeOptions: SessionStoreOptions = {\n storageKeyPrefix:\n options.storageKeyPrefix?.trim() ||\n buildAgentStorageKeyPrefix({\n customerId: options.customerId,\n indexId,\n version,\n runtimeOrigin,\n }),\n };\n const visitorSessionId =\n options.visitorSessionId?.trim() ||\n getOrCreateVisitorSessionId(storeOptions);\n\n const session = new AgentSession(\n indexId,\n version,\n runtimeOrigin,\n visitorSessionId,\n storeOptions,\n options.previewBuildId,\n options.getUnpublishedPreviewGrant\n );\n\n return {\n indexId,\n version,\n runtimeOrigin,\n visitorSessionId,\n sendTurn: (message, sendOptions: AgentSendTurnOptions) =>\n session.sendTurn(\n message,\n sendOptions.signal ?? new AbortController().signal,\n sendOptions.handlers\n ),\n resumeTurn: (resumeOptions: AgentResumeTurnOptions) =>\n session.resumeTurn(\n resumeOptions.message,\n resumeOptions.signal ?? new AbortController().signal,\n resumeOptions.handlers,\n resumeOptions.initialText\n ),\n respondTurn: (respondOptions: AgentRespondTurnOptions) =>\n session.respondTurn(\n respondOptions.responses,\n respondOptions.signal ?? new AbortController().signal,\n respondOptions.handlers\n ),\n regenerateTurn: (message, regenerateOptions: AgentSendTurnOptions) =>\n session.regenerateTurn(\n message,\n regenerateOptions.signal ?? new AbortController().signal,\n regenerateOptions.handlers\n ),\n reset: () => session.reset(),\n cancelActive: () => session.cancelActive(),\n getActiveSessionId: () => session.getActiveSessionId(),\n };\n}\n","import { ClientError } from \"eve/client\";\nimport type { AgentIndexVersion } from \"./types\";\n\ntype RuntimeCapability = {\n accessToken: string;\n refreshAt: number;\n};\n\ntype AgentRuntimeCapabilityOptions = {\n getUnpublishedPreviewGrant?: () => Promise<string>;\n indexId: string;\n previewBuildId?: string;\n runtimeOrigin: string;\n version: AgentIndexVersion;\n visitorSessionId: string;\n fetchImplementation?: typeof fetch;\n now?: () => number;\n};\n\nconst MAX_REFRESH_SKEW_MS = 30_000;\nconst LOCAL_LOOPBACK_ORIGINS = [\n \"http://127.0.0.1:3010\",\n \"http://127.0.0.1:3001\",\n] as const;\n\nfunction isLoopbackRuntimeOrigin(origin: string) {\n try {\n const host = new URL(origin).hostname;\n return host === \"127.0.0.1\" || host === \"localhost\";\n } catch {\n return false;\n }\n}\n\nfunction localBootstrapOrigins(origin: string) {\n const normalized = origin.replace(/\\/$/, \"\");\n if (!isLoopbackRuntimeOrigin(normalized)) return [normalized];\n return [\n normalized,\n ...LOCAL_LOOPBACK_ORIGINS.filter((candidate) => candidate !== normalized),\n ];\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\nfunction parseBootstrapResponse(\n value: unknown,\n indexId: string,\n now: number\n): RuntimeCapability {\n if (\n !isRecord(value) ||\n value.apiVersion !== \"webless.ai/agent-runtime-bootstrap/v1\" ||\n typeof value.accessToken !== \"string\" ||\n !value.accessToken ||\n typeof value.expiresAt !== \"string\" ||\n !isRecord(value.identity) ||\n value.identity.indexId !== indexId ||\n typeof value.identity.revision !== \"string\" ||\n !value.identity.revision ||\n typeof value.identity.tenantId !== \"string\" ||\n !value.identity.tenantId ||\n typeof value.origin !== \"string\" ||\n !value.origin ||\n value.tokenType !== \"Bearer\" ||\n typeof value.visitorSubject !== \"string\" ||\n !value.visitorSubject\n ) {\n throw new Error(\"Agent Runtime returned an invalid access response.\");\n }\n\n const expiresAt = Date.parse(value.expiresAt);\n if (!Number.isFinite(expiresAt) || expiresAt <= now) {\n throw new Error(\"Agent Runtime returned an expired access response.\");\n }\n\n const refreshSkew = Math.min(\n MAX_REFRESH_SKEW_MS,\n Math.floor((expiresAt - now) / 10)\n );\n return {\n accessToken: value.accessToken,\n refreshAt: expiresAt - refreshSkew,\n };\n}\n\nasync function readBootstrapError(response: Response): Promise<string> {\n const fallback = `Agent Runtime is unavailable (${response.status}).`;\n try {\n const value: unknown = await response.json();\n return isRecord(value) && typeof value.error === \"string\" && value.error\n ? value.error\n : fallback;\n } catch {\n return fallback;\n }\n}\n\nexport function createAgentRuntimeCapability(\n options: AgentRuntimeCapabilityOptions\n) {\n const fetchImplementation = options.fetchImplementation ?? fetch;\n const now = options.now ?? Date.now;\n let capability: RuntimeCapability | undefined;\n let generation = 0;\n let pendingBootstrap: Promise<RuntimeCapability> | undefined;\n\n const bootstrap = async (): Promise<RuntimeCapability> => {\n let previewGrant: string | undefined;\n const previewBuildId = options.previewBuildId?.trim();\n if (options.version === \"unpublished\") {\n previewGrant = previewBuildId\n ? undefined\n : (await options.getUnpublishedPreviewGrant?.())?.trim();\n if (!previewGrant && !previewBuildId) {\n throw new Error(\n \"Unpublished preview authorization is required to use the Agent Runtime preview.\"\n );\n }\n }\n\n const bootstrapBody = JSON.stringify({\n clientSessionId: options.visitorSessionId,\n indexId: options.indexId,\n ...(previewBuildId ? { previewBuildId } : {}),\n ...(previewGrant ? { previewGrant } : {}),\n version: options.version,\n });\n const postBootstrap = (origin: string) =>\n fetchImplementation(`${origin}/webless/v1/bootstrap`, {\n body: bootstrapBody,\n headers: { \"content-type\": \"application/json\" },\n method: \"POST\",\n });\n\n let response: Response | undefined;\n let lastError: unknown;\n for (const origin of localBootstrapOrigins(options.runtimeOrigin)) {\n try {\n response = await postBootstrap(origin);\n break;\n } catch (error) {\n lastError = error;\n }\n }\n if (!response) {\n throw lastError instanceof Error\n ? lastError\n : new Error(\"Agent Runtime is unavailable.\");\n }\n if (!response.ok) {\n throw new Error(await readBootstrapError(response));\n }\n\n let value: unknown;\n try {\n value = await response.json();\n } catch {\n throw new Error(\"Agent Runtime returned an invalid access response.\");\n }\n return parseBootstrapResponse(value, options.indexId, now());\n };\n\n const getAccessToken = async (): Promise<string> => {\n if (capability && capability.refreshAt > now()) {\n return capability.accessToken;\n }\n\n const requestedGeneration = generation;\n if (!pendingBootstrap) {\n const trackedBootstrap = bootstrap().finally(() => {\n if (pendingBootstrap === trackedBootstrap) {\n pendingBootstrap = undefined;\n }\n });\n pendingBootstrap = trackedBootstrap;\n }\n\n const nextCapability = await pendingBootstrap;\n if (requestedGeneration !== generation) {\n return getAccessToken();\n }\n\n capability = nextCapability;\n return capability.accessToken;\n };\n\n return {\n getAccessToken,\n invalidate: () => {\n capability = undefined;\n generation += 1;\n pendingBootstrap = undefined;\n },\n };\n}\n\nexport type AgentRuntimeCapability = ReturnType<\n typeof createAgentRuntimeCapability\n>;\n\nexport async function withCapabilityRefresh<T>(\n capability: AgentRuntimeCapability,\n request: () => Promise<T>\n): Promise<T> {\n try {\n return await request();\n } catch (error) {\n if (!(error instanceof ClientError) || error.status !== 401) {\n throw error;\n }\n capability.invalidate();\n return await request();\n }\n}\n","import type { AgentIndexVersion, AgentRuntimeConfig } from \"./types\";\n\nexport const DEFAULT_RUNTIME_ORIGIN = \"https://runtime.staging.webless.ai\";\n\nconst trimTrailingSlash = (value: string) => value.replace(/\\/+$/, \"\");\n\nexport function buildEveHost(\n origin: string,\n indexId: string,\n version: AgentIndexVersion = \"published\",\n): string {\n const base = trimTrailingSlash(origin);\n const searchParams = new URLSearchParams({ indexId: indexId.trim() });\n if (version === \"unpublished\") {\n searchParams.set(\"version\", version);\n }\n return `${base}?${searchParams.toString()}`;\n}\n\nexport function resolveAgentRuntimeConfig(input: {\n indexId: string;\n runtimeOrigin?: string;\n version?: AgentIndexVersion;\n}): AgentRuntimeConfig {\n const origin = trimTrailingSlash(input.runtimeOrigin?.trim() || DEFAULT_RUNTIME_ORIGIN);\n const resolvedIndexId = input.indexId.trim();\n const version = input.version ?? \"published\";\n\n return {\n origin,\n indexId: resolvedIndexId,\n version,\n host: resolvedIndexId ? buildEveHost(origin, resolvedIndexId, version) : origin,\n };\n}\n\nexport function agentHealthUrl(runtimeOrigin?: string): string {\n const origin = trimTrailingSlash(runtimeOrigin?.trim() || DEFAULT_RUNTIME_ORIGIN);\n return `${origin}/eve/v1/health`;\n}\n","import type { AgentIndexVersion, PersistedAgentSession } from \"./types\";\n\nconst DEFAULT_STORAGE_KEY_PREFIX = \"webless:agent\";\n\nexport type SessionStoreOptions = {\n storageKeyPrefix?: string;\n};\n\nfunction normalizeRuntimeOrigin(runtimeOrigin?: string) {\n const trimmed = runtimeOrigin?.trim();\n if (!trimmed) return \"_\";\n return trimmed.replace(/\\/+$/, \"\");\n}\n\nexport function buildAgentStorageKeyPrefix(input: {\n customerId?: string;\n indexId: string;\n runtimeOrigin?: string;\n version?: AgentIndexVersion;\n}) {\n const customerId = input.customerId?.trim() || \"_\";\n const indexId = input.indexId.trim();\n if (!indexId) {\n throw new Error(\"indexId is required to build agent storage keys.\");\n }\n\n const versionSuffix = input.version === \"unpublished\" ? \":unpublished\" : \"\";\n return `${DEFAULT_STORAGE_KEY_PREFIX}:${customerId}:${indexId}${versionSuffix}:${normalizeRuntimeOrigin(input.runtimeOrigin)}`;\n}\n\nfunction createSessionId(): string {\n if (typeof crypto !== \"undefined\" && typeof crypto.randomUUID === \"function\") {\n return crypto.randomUUID();\n }\n return `sess_${Math.random().toString(36).slice(2)}${Date.now().toString(36)}`;\n}\n\nfunction resolvePrefix(options?: SessionStoreOptions) {\n return options?.storageKeyPrefix?.trim() || DEFAULT_STORAGE_KEY_PREFIX;\n}\n\nexport function getOrCreateVisitorSessionId(options?: SessionStoreOptions): string {\n const prefix = resolvePrefix(options);\n const visitorKey = `${prefix}:visitorSessionId`;\n\n if (typeof sessionStorage === \"undefined\") {\n return createSessionId();\n }\n\n const existing = sessionStorage.getItem(visitorKey)?.trim();\n if (existing) return existing;\n\n const next = createSessionId();\n sessionStorage.setItem(visitorKey, next);\n return next;\n}\n\nexport function clearVisitorSessionId(options?: SessionStoreOptions) {\n if (typeof sessionStorage === \"undefined\") return;\n\n const prefix = resolvePrefix(options);\n sessionStorage.removeItem(`${prefix}:visitorSessionId`);\n}\n\nfunction runtimeSessionIdKey(visitorSessionId: string, prefix: string) {\n return `${prefix}:eve:${visitorSessionId}:sessionId`;\n}\n\nfunction runtimeStreamIndexKey(visitorSessionId: string, prefix: string) {\n return `${prefix}:eve:${visitorSessionId}:streamIndex`;\n}\n\nfunction runtimeLastMessageKey(visitorSessionId: string, prefix: string) {\n return `${prefix}:eve:${visitorSessionId}:lastMessage`;\n}\n\nexport function loadPersistedAgentSession(\n visitorSessionId: string,\n options?: SessionStoreOptions,\n): PersistedAgentSession | null {\n if (typeof sessionStorage === \"undefined\" || !visitorSessionId.trim()) return null;\n\n const prefix = resolvePrefix(options);\n const sessionId = sessionStorage.getItem(runtimeSessionIdKey(visitorSessionId, prefix))?.trim();\n if (!sessionId) return null;\n\n const rawIndex = sessionStorage.getItem(runtimeStreamIndexKey(visitorSessionId, prefix));\n const streamIndex = rawIndex ? Number.parseInt(rawIndex, 10) : 0;\n\n const lastMessage = sessionStorage\n .getItem(runtimeLastMessageKey(visitorSessionId, prefix))\n ?.trim();\n\n return {\n sessionId,\n streamIndex: Number.isFinite(streamIndex) && streamIndex >= 0 ? streamIndex : 0,\n ...(lastMessage ? { lastMessage } : {}),\n };\n}\n\nexport function savePersistedAgentSession(\n visitorSessionId: string,\n sessionId: string,\n streamIndex: number,\n options?: SessionStoreOptions,\n) {\n if (typeof sessionStorage === \"undefined\" || !visitorSessionId.trim() || !sessionId.trim()) {\n return;\n }\n\n const prefix = resolvePrefix(options);\n sessionStorage.setItem(runtimeSessionIdKey(visitorSessionId, prefix), sessionId);\n sessionStorage.setItem(\n runtimeStreamIndexKey(visitorSessionId, prefix),\n String(Math.max(0, streamIndex)),\n );\n}\n\nexport function savePersistedAgentTurnMessage(\n visitorSessionId: string,\n message: string,\n options?: SessionStoreOptions,\n) {\n if (typeof sessionStorage === \"undefined\" || !visitorSessionId.trim() || !message) {\n return;\n }\n\n const prefix = resolvePrefix(options);\n sessionStorage.setItem(runtimeLastMessageKey(visitorSessionId, prefix), message);\n}\n\nexport function clearPersistedAgentSession(\n visitorSessionId: string,\n options?: SessionStoreOptions,\n) {\n if (typeof sessionStorage === \"undefined\" || !visitorSessionId.trim()) return;\n const prefix = resolvePrefix(options);\n sessionStorage.removeItem(runtimeSessionIdKey(visitorSessionId, prefix));\n sessionStorage.removeItem(runtimeStreamIndexKey(visitorSessionId, prefix));\n sessionStorage.removeItem(runtimeLastMessageKey(visitorSessionId, prefix));\n}\n","import { connectedToolWork, completeConnectedToolWork } from \"./connected-tool-work\";\nimport { type Client, type MessageStreamEvent } from \"eve/client\";\nimport type { AgentStreamHandlers, AgentToolResult, AgentWorkItem } from \"./types\";\n\nconst INITIAL_RETRY_DELAY_MS = 100;\nconst MAX_RETRY_DELAY_MS = 2_000;\nconst MAX_CONSECUTIVE_RETRIES = 6;\n\ntype SubagentCalledEvent = Extract<\n MessageStreamEvent,\n { type: \"subagent.called\" }\n>;\n\ntype ChildStreamEvent =\n | { type: \"actions.requested\"; items: AgentWorkItem[] }\n | {\n type: \"action.result\";\n result: AgentToolResult;\n hasOutput: boolean;\n }\n | {\n type: \"subagent.called\";\n childStreamPath: string;\n }\n | {\n type: \"session.boundary\";\n }\n | {\n type: \"other\";\n };\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\nfunction parseError(value: unknown): AgentToolResult[\"error\"] | undefined {\n if (!isRecord(value)) return undefined;\n const { code, message } = value;\n if (typeof code !== \"string\" || typeof message !== \"string\") {\n return undefined;\n }\n return { code, message };\n}\n\nfunction parseChildStreamEvent(value: unknown): ChildStreamEvent {\n if (!isRecord(value) || typeof value.type !== \"string\") {\n return { type: \"other\" };\n }\n\n if (\n value.type === \"session.waiting\" ||\n value.type === \"session.completed\" ||\n value.type === \"session.failed\"\n ) {\n return { type: \"session.boundary\" };\n }\n\n if (\n value.type === \"subagent.event\" &&\n isRecord(value.data) &&\n Object.hasOwn(value.data, \"event\")\n ) {\n return parseChildStreamEvent(value.data.event);\n }\n\n if (value.type === \"subagent.called\" && isRecord(value.data)) {\n const { childStreamPath } = value.data;\n if (typeof childStreamPath === \"string\") {\n return { childStreamPath, type: \"subagent.called\" };\n }\n }\n\n if (\n value.type === \"actions.requested\" &&\n isRecord(value.data) &&\n Array.isArray(value.data.actions)\n ) {\n const items = value.data.actions.flatMap((action) => {\n if (\n !isRecord(action) ||\n action.kind !== \"tool-call\" ||\n typeof action.callId !== \"string\" ||\n typeof action.toolName !== \"string\" ||\n !isRecord(action.input)\n ) return [];\n const item = connectedToolWork({\n callId: action.callId,\n toolName: action.toolName,\n input: action.input,\n });\n return item ? [item] : [];\n });\n return { type: \"actions.requested\", items };\n }\n if (value.type !== \"action.result\" || !isRecord(value.data)) {\n return { type: \"other\" };\n }\n\n const { data } = value;\n if (\n data.status !== \"completed\" &&\n data.status !== \"failed\" &&\n data.status !== \"rejected\"\n ) {\n return { type: \"other\" };\n }\n if (!isRecord(data.result) || data.result.kind !== \"tool-result\") {\n return { type: \"other\" };\n }\n\n const result = data.result;\n if (\n typeof result.callId !== \"string\" ||\n typeof result.toolName !== \"string\"\n ) {\n return { type: \"other\" };\n }\n\n const error = parseError(data.error);\n return {\n type: \"action.result\",\n hasOutput: Object.hasOwn(result, \"output\"),\n result: {\n callId: result.callId,\n toolName: result.toolName,\n status: result.isError === true ? \"failed\" : data.status,\n ...(Object.hasOwn(result, \"output\") ? { output: result.output } : {}),\n ...(error ? { error } : {}),\n },\n };\n}\n\nasync function* readNdjsonStream(\n body: ReadableStream<Uint8Array>\n): AsyncGenerator<unknown> {\n const reader = body.getReader();\n const decoder = new TextDecoder();\n let buffer = \"\";\n\n try {\n while (true) {\n const { done, value } = await reader.read();\n buffer += decoder.decode(value, { stream: !done });\n const lines = buffer.split(\"\\n\");\n buffer = lines.pop() ?? \"\";\n\n for (const line of lines) {\n const trimmed = line.trim();\n if (!trimmed) continue;\n try {\n const parsed: unknown = JSON.parse(trimmed);\n yield parsed;\n } catch {\n // Ignore one malformed event without dropping the remaining stream.\n }\n }\n\n if (done) break;\n }\n\n const trimmed = buffer.trim();\n if (trimmed) {\n try {\n const parsed: unknown = JSON.parse(trimmed);\n yield parsed;\n } catch {\n // Ignore a malformed trailing event.\n }\n }\n } finally {\n reader.releaseLock();\n }\n}\n\nfunction streamPathAt(path: string, streamIndex: number): string {\n if (streamIndex === 0) return path;\n return `${path}${path.includes(\"?\") ? \"&\" : \"?\"}startIndex=${streamIndex}`;\n}\n\nfunction abortableDelay(delayMs: number, signal: AbortSignal): Promise<void> {\n if (signal.aborted) return Promise.resolve();\n return new Promise((resolve) => {\n const finish = () => {\n clearTimeout(timeout);\n signal.removeEventListener(\"abort\", finish);\n resolve();\n };\n const timeout = setTimeout(finish, delayMs);\n signal.addEventListener(\"abort\", finish, { once: true });\n });\n}\n\nexport class SubagentChildStreamCoordinator {\n private readonly controllers = new Map<string, AbortController>();\n private readonly tasks = new Map<string, Promise<void>>();\n\n constructor(\n private readonly client: Client,\n private readonly handlers: AgentStreamHandlers,\n private readonly parentSignal: AbortSignal\n ) {}\n\n begin(event: SubagentCalledEvent): void {\n this.beginPath(event.data.childStreamPath);\n }\n\n async waitForAll(): Promise<void> {\n let observedTaskCount = -1;\n while (observedTaskCount !== this.tasks.size) {\n observedTaskCount = this.tasks.size;\n await Promise.all(this.tasks.values());\n }\n }\n\n abortAll(): void {\n for (const controller of this.controllers.values()) controller.abort();\n this.controllers.clear();\n }\n\n private beginPath(childStreamPath: string): void {\n if (this.tasks.has(childStreamPath)) return;\n\n const controller = new AbortController();\n const abort = () => controller.abort();\n if (this.parentSignal.aborted) {\n controller.abort();\n } else {\n this.parentSignal.addEventListener(\"abort\", abort, { once: true });\n }\n this.controllers.set(childStreamPath, controller);\n\n const task = this.consume(childStreamPath, controller.signal).finally(\n () => {\n this.parentSignal.removeEventListener(\"abort\", abort);\n if (this.controllers.get(childStreamPath) === controller) {\n this.controllers.delete(childStreamPath);\n }\n }\n );\n this.tasks.set(childStreamPath, task);\n }\n\n private async consume(path: string, signal: AbortSignal): Promise<void> {\n const workItems = new Map<string, AgentWorkItem>();\n let streamIndex = 0;\n let consecutiveRetries = 0;\n let retryDelayMs = INITIAL_RETRY_DELAY_MS;\n\n while (!signal.aborted && consecutiveRetries < MAX_CONSECUTIVE_RETRIES) {\n let receivedEvent = false;\n try {\n const response = await this.client.fetch(\n streamPathAt(path, streamIndex),\n {\n cache: \"no-store\",\n signal,\n }\n );\n if (!response.ok || response.body === null) {\n await response.body?.cancel().catch(() => {});\n throw new Error(`Child stream returned ${response.status}.`);\n }\n\n for await (const rawEvent of readNdjsonStream(response.body)) {\n if (signal.aborted) return;\n receivedEvent = true;\n streamIndex += 1;\n const event = parseChildStreamEvent(rawEvent);\n if (event.type === \"session.boundary\") return;\n if (event.type === \"subagent.called\") {\n this.beginPath(event.childStreamPath);\n continue;\n }\n if (event.type === \"actions.requested\") {\n for (const item of event.items) {\n workItems.set(item.id, item);\n this.handlers.onWork?.(item);\n }\n continue;\n }\n if (event.type !== \"action.result\") continue;\n const item = workItems.get(event.result.callId);\n if (item) {\n this.handlers.onWork?.(completeConnectedToolWork(item, event.result));\n }\n this.handlers.onToolResult?.(event.result);\n if (event.hasOutput) {\n this.handlers.onActionResult?.(event.result.output);\n }\n }\n } catch {\n if (signal.aborted) return;\n }\n\n consecutiveRetries = receivedEvent ? 0 : consecutiveRetries + 1;\n retryDelayMs = receivedEvent\n ? INITIAL_RETRY_DELAY_MS\n : Math.min(retryDelayMs * 2, MAX_RETRY_DELAY_MS);\n await abortableDelay(retryDelayMs, signal);\n }\n }\n}\n","import { ClientError } from \"eve/client\";\n\nconst TRANSIENT_AGENT_ERROR_MESSAGE =\n \"The agent run stopped before the action finished. Please try again.\";\nconst PREVIEW_AUTHORIZATION_ERROR_MESSAGE =\n \"This preview could not be authorized. Open the latest preview from Webless.\";\n\nfunction isTransientRuntimeMessage(message: string) {\n const normalized = message.trim().toLowerCase();\n return (\n normalized.includes(\"empty response from runtime\") ||\n normalized.includes(\"failed to fetch\") ||\n normalized.includes(\"networkerror\") ||\n normalized.includes(\"network error\") ||\n normalized.includes(\"load failed\") ||\n normalized.includes(\"the stream\")\n );\n}\n\nfunction isPreviewAuthorizationMessage(message: string) {\n const normalized = message.trim().toLowerCase();\n return (\n normalized.includes(\"unpublished preview authorization\") ||\n normalized.includes(\"unpublished preview grant\") ||\n normalized.includes(\"agent studio preview grant\") ||\n normalized.includes(\"preview authorization\")\n );\n}\n\nexport function formatAgentError(error: unknown): string {\n if (error instanceof ClientError) {\n if (error.status === 401 && error.code === \"index_required\") {\n return \"Missing indexId — pass a published index id to createAgentClient().\";\n }\n if (error.status === 403 && error.code === \"agent_unavailable\") {\n return \"Agent unavailable for this index (disabled or unpublished).\";\n }\n if (error.status === 409 && error.code === \"session_not_active\") {\n return \"Session expired — send a new message to start again.\";\n }\n if (error.message && isPreviewAuthorizationMessage(error.message)) {\n return PREVIEW_AUTHORIZATION_ERROR_MESSAGE;\n }\n if (\n error.status >= 500 ||\n (error.message && isTransientRuntimeMessage(error.message))\n ) {\n return TRANSIENT_AGENT_ERROR_MESSAGE;\n }\n return error.message || \"This assistant is unavailable right now.\";\n }\n if (error instanceof DOMException && error.name === \"AbortError\") {\n return \"\";\n }\n if (error instanceof Error) {\n if (isPreviewAuthorizationMessage(error.message)) {\n return PREVIEW_AUTHORIZATION_ERROR_MESSAGE;\n }\n return isTransientRuntimeMessage(error.message)\n ? TRANSIENT_AGENT_ERROR_MESSAGE\n : error.message;\n }\n return TRANSIENT_AGENT_ERROR_MESSAGE;\n}\n","import { formatAgentError } from \"./errors\";\nimport { agentHealthUrl } from \"./config\";\nimport type { AgentHealthResult } from \"./types\";\n\nexport async function pingAgentHealth(\n runtimeOrigin?: string,\n fetchImpl: typeof fetch = fetch,\n): Promise<AgentHealthResult> {\n const healthUrl = agentHealthUrl(runtimeOrigin);\n\n try {\n const response = await fetchImpl(healthUrl, {\n headers: { Accept: \"application/json\" },\n cache: \"no-store\",\n });\n if (!response.ok) {\n return { ok: false, detail: `Health check failed (${response.status})` };\n }\n const payload = (await response.json()) as { status?: string; ok?: boolean };\n if (payload.ok === true) {\n return { ok: true, detail: payload.status ?? \"ready\" };\n }\n return { ok: false, detail: \"Runtime health response was not ok\" };\n } catch (error) {\n return { ok: false, detail: formatAgentError(error) || \"Health check failed\" };\n }\n}\n"],"mappings":"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","names":["ClientError","isRecord","trimmed","item","current","ClientError","ClientError"]}
|
|
@@ -263,7 +263,7 @@ type ToolStepState = "completed" | "active" | "pending" | "error";
|
|
|
263
263
|
type AgentMessageFeedback = "positive" | "negative";
|
|
264
264
|
type ToolStep = {
|
|
265
265
|
id: string;
|
|
266
|
-
kind: "planning" | "search" | "specialist";
|
|
266
|
+
kind: "planning" | "search" | "specialist" | "tool";
|
|
267
267
|
label: string;
|
|
268
268
|
state: ToolStepState;
|
|
269
269
|
detail?: string;
|
|
@@ -298,6 +298,7 @@ type ConversationMessage = {
|
|
|
298
298
|
citations?: Citation[];
|
|
299
299
|
searchResults?: VisitorSearchResultPresentation[];
|
|
300
300
|
toolReceipts?: string[];
|
|
301
|
+
toolResults?: (VisitorToolResultPresentation | VisitorEntityResultPresentation | VisitorCollectionResultPresentation | VisitorSignatureResultPresentation)[];
|
|
301
302
|
streaming?: boolean;
|
|
302
303
|
};
|
|
303
304
|
type AgentRailPhase = "idle" | "thinking" | "running-tools" | "waiting-input" | "streaming" | "error" | "complete";
|
|
@@ -432,4 +433,10 @@ declare function normalizeAgentTagManifest(manifest: AgentTagManifest): {
|
|
|
432
433
|
};
|
|
433
434
|
type NormalizedAgentTagManifest = ReturnType<typeof normalizeAgentTagManifest>;
|
|
434
435
|
|
|
435
|
-
|
|
436
|
+
type AgentPanelSubmitOptions = {
|
|
437
|
+
runtimeText?: string;
|
|
438
|
+
};
|
|
439
|
+
declare function resetAgentPanel(customerId: string): void;
|
|
440
|
+
declare function submitAgentPanel(customerId: string, message: string, options?: AgentPanelSubmitOptions): Promise<string | null>;
|
|
441
|
+
|
|
442
|
+
export { defaultDarkAgentRailTheme as $, AGENT_STRUCTURED_TOOL_INPUT_HEADER as A, type AgentToolUiOption as B, type AgentToolUiStep as C, type AgentToolUiSurface as D, AssistEdgeTab as E, type AssistTabSide as F, type AssistTabVariant as G, type Citation as H, type ConversationMessage as I, DEFAULT_AGENT_PLACEMENT as J, type FollowUpSuggestion as K, type JourneyContext as L, type ToolStepState as M, type NormalizedAgentTagManifest as N, type VisitorBookingResultPresentation as O, type VisitorSearchResultPresentation as P, type VisitorToolInputResultPresentation as Q, type ResolvedVisitorToolResultPresentation as R, type VisitorToolResultLink as S, type ToolStep as T, type VisitorToolResultPresentation as U, type VisitorBooking as V, type VisitorToolResultPresenter as W, type VisitorToolResultPresenterOutput as X, type VisitorToolResultRegistry as Y, builtInVisitorToolResultRegistry as Z, defaultAgentRailTheme as _, AGENT_STRUCTURED_TOOL_INPUT_SCHEMA_VERSION as a, formatAgentStructuredToolInput as a0, normalizeAgentPlacement as a1, normalizeAgentTagManifest as a2, presentVisitorToolResult as a3, resetAgentPanel as a4, submitAgentPanel as a5, type AgentAnalyticsConfig as b, type AgentBrandingConfig as c, type AgentColorScheme as d, type AgentIndexVersion as e, type AgentInputOption as f, type AgentInputRequest as g, type AgentInputResponse as h, type AgentMessageFeedback as i, type AgentMountStrategy as j, type AgentPanelSubmitOptions as k, type AgentPlacementConfig as l, type AgentRailPhase as m, type AgentRailState as n, type AgentRailTheme as o, type AgentSearchReferences as p, type AgentSearchSource as q, type AgentStructuredToolInput as r, type AgentTabSide as s, type AgentTabVariant as t, type AgentTagManifest as u, type AgentToolResult as v, type AgentToolResultJsonValue as w, type AgentToolUiAction as x, type AgentToolUiField as y, type AgentToolUiFieldKind as z };
|
|
@@ -263,7 +263,7 @@ type ToolStepState = "completed" | "active" | "pending" | "error";
|
|
|
263
263
|
type AgentMessageFeedback = "positive" | "negative";
|
|
264
264
|
type ToolStep = {
|
|
265
265
|
id: string;
|
|
266
|
-
kind: "planning" | "search" | "specialist";
|
|
266
|
+
kind: "planning" | "search" | "specialist" | "tool";
|
|
267
267
|
label: string;
|
|
268
268
|
state: ToolStepState;
|
|
269
269
|
detail?: string;
|
|
@@ -298,6 +298,7 @@ type ConversationMessage = {
|
|
|
298
298
|
citations?: Citation[];
|
|
299
299
|
searchResults?: VisitorSearchResultPresentation[];
|
|
300
300
|
toolReceipts?: string[];
|
|
301
|
+
toolResults?: (VisitorToolResultPresentation | VisitorEntityResultPresentation | VisitorCollectionResultPresentation | VisitorSignatureResultPresentation)[];
|
|
301
302
|
streaming?: boolean;
|
|
302
303
|
};
|
|
303
304
|
type AgentRailPhase = "idle" | "thinking" | "running-tools" | "waiting-input" | "streaming" | "error" | "complete";
|
|
@@ -432,4 +433,10 @@ declare function normalizeAgentTagManifest(manifest: AgentTagManifest): {
|
|
|
432
433
|
};
|
|
433
434
|
type NormalizedAgentTagManifest = ReturnType<typeof normalizeAgentTagManifest>;
|
|
434
435
|
|
|
435
|
-
|
|
436
|
+
type AgentPanelSubmitOptions = {
|
|
437
|
+
runtimeText?: string;
|
|
438
|
+
};
|
|
439
|
+
declare function resetAgentPanel(customerId: string): void;
|
|
440
|
+
declare function submitAgentPanel(customerId: string, message: string, options?: AgentPanelSubmitOptions): Promise<string | null>;
|
|
441
|
+
|
|
442
|
+
export { defaultDarkAgentRailTheme as $, AGENT_STRUCTURED_TOOL_INPUT_HEADER as A, type AgentToolUiOption as B, type AgentToolUiStep as C, type AgentToolUiSurface as D, AssistEdgeTab as E, type AssistTabSide as F, type AssistTabVariant as G, type Citation as H, type ConversationMessage as I, DEFAULT_AGENT_PLACEMENT as J, type FollowUpSuggestion as K, type JourneyContext as L, type ToolStepState as M, type NormalizedAgentTagManifest as N, type VisitorBookingResultPresentation as O, type VisitorSearchResultPresentation as P, type VisitorToolInputResultPresentation as Q, type ResolvedVisitorToolResultPresentation as R, type VisitorToolResultLink as S, type ToolStep as T, type VisitorToolResultPresentation as U, type VisitorBooking as V, type VisitorToolResultPresenter as W, type VisitorToolResultPresenterOutput as X, type VisitorToolResultRegistry as Y, builtInVisitorToolResultRegistry as Z, defaultAgentRailTheme as _, AGENT_STRUCTURED_TOOL_INPUT_SCHEMA_VERSION as a, formatAgentStructuredToolInput as a0, normalizeAgentPlacement as a1, normalizeAgentTagManifest as a2, presentVisitorToolResult as a3, resetAgentPanel as a4, submitAgentPanel as a5, type AgentAnalyticsConfig as b, type AgentBrandingConfig as c, type AgentColorScheme as d, type AgentIndexVersion as e, type AgentInputOption as f, type AgentInputRequest as g, type AgentInputResponse as h, type AgentMessageFeedback as i, type AgentMountStrategy as j, type AgentPanelSubmitOptions as k, type AgentPlacementConfig as l, type AgentRailPhase as m, type AgentRailState as n, type AgentRailTheme as o, type AgentSearchReferences as p, type AgentSearchSource as q, type AgentStructuredToolInput as r, type AgentTabSide as s, type AgentTabVariant as t, type AgentTagManifest as u, type AgentToolResult as v, type AgentToolResultJsonValue as w, type AgentToolUiAction as x, type AgentToolUiField as y, type AgentToolUiFieldKind as z };
|