@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.
Files changed (39) hide show
  1. package/README.md +6 -0
  2. package/dist/{chunk-QMTI5646.js → chunk-3E632FNE.js} +332 -203
  3. package/dist/chunk-3E632FNE.js.map +1 -0
  4. package/dist/{chunk-5BCSXCLT.js → chunk-TCO62TRN.js} +40 -2
  5. package/dist/chunk-TCO62TRN.js.map +1 -0
  6. package/dist/embed.cjs +754 -625
  7. package/dist/embed.cjs.map +1 -1
  8. package/dist/embed.css +60 -10
  9. package/dist/embed.css.map +1 -1
  10. package/dist/embed.d.cts +3 -9
  11. package/dist/embed.d.ts +3 -9
  12. package/dist/embed.js +1 -1
  13. package/dist/index.cjs +752 -680
  14. package/dist/index.cjs.map +1 -1
  15. package/dist/index.d.cts +2 -2
  16. package/dist/index.d.ts +2 -2
  17. package/dist/index.js +43 -4
  18. package/dist/index.js.map +1 -1
  19. package/dist/{manifest-DgjT8-tW.d.cts → panel-controller-D_XIQa1U.d.cts} +9 -2
  20. package/dist/{manifest-DgjT8-tW.d.ts → panel-controller-D_XIQa1U.d.ts} +9 -2
  21. package/dist/presentation.cjs +79 -67
  22. package/dist/presentation.cjs.map +1 -1
  23. package/dist/presentation.d.cts +1 -1
  24. package/dist/presentation.d.ts +1 -1
  25. package/dist/presentation.js +7 -3
  26. package/dist/presentation.js.map +1 -1
  27. package/dist/react.cjs +756 -625
  28. package/dist/react.cjs.map +1 -1
  29. package/dist/react.css +60 -10
  30. package/dist/react.css.map +1 -1
  31. package/dist/react.d.cts +3 -3
  32. package/dist/react.d.ts +3 -3
  33. package/dist/react.js +3 -1
  34. package/dist/react.js.map +1 -1
  35. package/dist/{types-ohWeTG9i.d.cts → types-sLEIYDqm.d.cts} +1 -1
  36. package/dist/{types-ohWeTG9i.d.ts → types-sLEIYDqm.d.ts} +1 -1
  37. package/package.json +1 -1
  38. package/dist/chunk-5BCSXCLT.js.map +0 -1
  39. 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-5BCSXCLT.js";
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":"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","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
- export { formatAgentStructuredToolInput as $, AGENT_STRUCTURED_TOOL_INPUT_HEADER as A, type AgentToolUiStep as B, type AgentToolUiSurface as C, AssistEdgeTab as D, type AssistTabSide as E, type AssistTabVariant as F, type Citation as G, type ConversationMessage as H, DEFAULT_AGENT_PLACEMENT as I, type FollowUpSuggestion as J, type JourneyContext as K, type ToolStepState as L, type VisitorBookingResultPresentation as M, type NormalizedAgentTagManifest as N, type VisitorSearchResultPresentation as O, type VisitorToolInputResultPresentation as P, type VisitorToolResultLink as Q, type ResolvedVisitorToolResultPresentation as R, type VisitorToolResultPresentation as S, type ToolStep as T, type VisitorToolResultPresenter as U, type VisitorBooking as V, type VisitorToolResultPresenterOutput as W, type VisitorToolResultRegistry as X, builtInVisitorToolResultRegistry as Y, defaultAgentRailTheme as Z, defaultDarkAgentRailTheme as _, AGENT_STRUCTURED_TOOL_INPUT_SCHEMA_VERSION as a, normalizeAgentPlacement as a0, normalizeAgentTagManifest as a1, presentVisitorToolResult as a2, 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 AgentPlacementConfig as k, type AgentRailPhase as l, type AgentRailState as m, type AgentRailTheme as n, type AgentSearchReferences as o, type AgentSearchSource as p, type AgentStructuredToolInput as q, type AgentTabSide as r, type AgentTabVariant as s, type AgentTagManifest as t, type AgentToolResult as u, type AgentToolResultJsonValue as v, type AgentToolUiAction as w, type AgentToolUiField as x, type AgentToolUiFieldKind as y, type AgentToolUiOption as z };
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
- export { formatAgentStructuredToolInput as $, AGENT_STRUCTURED_TOOL_INPUT_HEADER as A, type AgentToolUiStep as B, type AgentToolUiSurface as C, AssistEdgeTab as D, type AssistTabSide as E, type AssistTabVariant as F, type Citation as G, type ConversationMessage as H, DEFAULT_AGENT_PLACEMENT as I, type FollowUpSuggestion as J, type JourneyContext as K, type ToolStepState as L, type VisitorBookingResultPresentation as M, type NormalizedAgentTagManifest as N, type VisitorSearchResultPresentation as O, type VisitorToolInputResultPresentation as P, type VisitorToolResultLink as Q, type ResolvedVisitorToolResultPresentation as R, type VisitorToolResultPresentation as S, type ToolStep as T, type VisitorToolResultPresenter as U, type VisitorBooking as V, type VisitorToolResultPresenterOutput as W, type VisitorToolResultRegistry as X, builtInVisitorToolResultRegistry as Y, defaultAgentRailTheme as Z, defaultDarkAgentRailTheme as _, AGENT_STRUCTURED_TOOL_INPUT_SCHEMA_VERSION as a, normalizeAgentPlacement as a0, normalizeAgentTagManifest as a1, presentVisitorToolResult as a2, 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 AgentPlacementConfig as k, type AgentRailPhase as l, type AgentRailState as m, type AgentRailTheme as n, type AgentSearchReferences as o, type AgentSearchSource as p, type AgentStructuredToolInput as q, type AgentTabSide as r, type AgentTabVariant as s, type AgentTagManifest as t, type AgentToolResult as u, type AgentToolResultJsonValue as v, type AgentToolUiAction as w, type AgentToolUiField as x, type AgentToolUiFieldKind as y, type AgentToolUiOption as z };
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 };