@webless/agent 0.10.4 → 0.11.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.d.cts CHANGED
@@ -1,5 +1,5 @@
1
- import { d as AgentClientOptions, c as AgentClient, f as AgentIndexVersion, l as AgentRuntimeConfig, e as AgentHealthResult, P as PersistedAgentSession } from './types-sLEIYDqm.cjs';
2
- export { A as AGENT_STRUCTURED_TOOL_INPUT_HEADER, a as AGENT_STRUCTURED_TOOL_INPUT_SCHEMA_VERSION, b as AGENT_TOOL_UI_SCHEMA_VERSION, g as AgentInputOption, h as AgentInputRequest, i as AgentInputResponse, j as AgentRespondTurnOptions, k as AgentResumeTurnOptions, m as AgentSendTurnOptions, n as AgentStreamHandlers, o as AgentStructuredToolInput, p as AgentToolResult, q as AgentToolResultEnvelope, r as AgentToolResultJsonValue, s as AgentToolUiAction, t as AgentToolUiField, u as AgentToolUiFieldKind, v as AgentToolUiOption, w as AgentToolUiStep, x as AgentToolUiSurface, y as AgentWorkItem, z as formatAgentStructuredToolInput, B as parseAgentToolResultEnvelope, C as parseAgentToolUiSurface } from './types-sLEIYDqm.cjs';
1
+ import { d as AgentClientOptions, c as AgentClient, f as AgentIndexVersion, l as AgentRuntimeConfig, e as AgentHealthResult, P as PersistedAgentSession } from './types-B2j6hbI5.cjs';
2
+ export { A as AGENT_STRUCTURED_TOOL_INPUT_HEADER, a as AGENT_STRUCTURED_TOOL_INPUT_SCHEMA_VERSION, b as AGENT_TOOL_UI_SCHEMA_VERSION, g as AgentInputOption, h as AgentInputRequest, i as AgentInputResponse, j as AgentRespondTurnOptions, k as AgentResumeTurnOptions, m as AgentSendTurnOptions, n as AgentStreamHandlers, o as AgentStructuredToolInput, p as AgentToolResult, q as AgentToolResultEnvelope, r as AgentToolResultJsonValue, s as AgentToolUiAction, t as AgentToolUiField, u as AgentToolUiFieldKind, v as AgentToolUiOption, w as AgentToolUiStep, x as AgentToolUiSurface, y as AgentWorkItem, z as formatAgentStructuredToolInput, B as parseAgentToolResultEnvelope, C as parseAgentToolUiSurface } from './types-B2j6hbI5.cjs';
3
3
 
4
4
  declare function createAgentClient(options: AgentClientOptions): AgentClient;
5
5
 
package/dist/index.d.ts CHANGED
@@ -1,5 +1,5 @@
1
- import { d as AgentClientOptions, c as AgentClient, f as AgentIndexVersion, l as AgentRuntimeConfig, e as AgentHealthResult, P as PersistedAgentSession } from './types-sLEIYDqm.js';
2
- export { A as AGENT_STRUCTURED_TOOL_INPUT_HEADER, a as AGENT_STRUCTURED_TOOL_INPUT_SCHEMA_VERSION, b as AGENT_TOOL_UI_SCHEMA_VERSION, g as AgentInputOption, h as AgentInputRequest, i as AgentInputResponse, j as AgentRespondTurnOptions, k as AgentResumeTurnOptions, m as AgentSendTurnOptions, n as AgentStreamHandlers, o as AgentStructuredToolInput, p as AgentToolResult, q as AgentToolResultEnvelope, r as AgentToolResultJsonValue, s as AgentToolUiAction, t as AgentToolUiField, u as AgentToolUiFieldKind, v as AgentToolUiOption, w as AgentToolUiStep, x as AgentToolUiSurface, y as AgentWorkItem, z as formatAgentStructuredToolInput, B as parseAgentToolResultEnvelope, C as parseAgentToolUiSurface } from './types-sLEIYDqm.js';
1
+ import { d as AgentClientOptions, c as AgentClient, f as AgentIndexVersion, l as AgentRuntimeConfig, e as AgentHealthResult, P as PersistedAgentSession } from './types-B2j6hbI5.js';
2
+ export { A as AGENT_STRUCTURED_TOOL_INPUT_HEADER, a as AGENT_STRUCTURED_TOOL_INPUT_SCHEMA_VERSION, b as AGENT_TOOL_UI_SCHEMA_VERSION, g as AgentInputOption, h as AgentInputRequest, i as AgentInputResponse, j as AgentRespondTurnOptions, k as AgentResumeTurnOptions, m as AgentSendTurnOptions, n as AgentStreamHandlers, o as AgentStructuredToolInput, p as AgentToolResult, q as AgentToolResultEnvelope, r as AgentToolResultJsonValue, s as AgentToolUiAction, t as AgentToolUiField, u as AgentToolUiFieldKind, v as AgentToolUiOption, w as AgentToolUiStep, x as AgentToolUiSurface, y as AgentWorkItem, z as formatAgentStructuredToolInput, B as parseAgentToolResultEnvelope, C as parseAgentToolUiSurface } from './types-B2j6hbI5.js';
3
3
 
4
4
  declare function createAgentClient(options: AgentClientOptions): AgentClient;
5
5
 
package/dist/index.js CHANGED
@@ -84,18 +84,26 @@ function createAgentRuntimeCapability(options) {
84
84
  );
85
85
  }
86
86
  }
87
- const bootstrapBody = JSON.stringify({
87
+ const bootstrapBody = {
88
88
  clientSessionId: options.visitorSessionId,
89
89
  indexId: options.indexId,
90
90
  ...previewBuildId ? { previewBuildId } : {},
91
91
  ...previewGrant ? { previewGrant } : {},
92
92
  version: options.version
93
- });
94
- const postBootstrap = (origin) => fetchImplementation(`${origin}/webless/v1/bootstrap`, {
95
- body: bootstrapBody,
96
- headers: { "content-type": "application/json" },
97
- method: "POST"
98
- });
93
+ };
94
+ const postBootstrap = async (origin) => {
95
+ const send = (advertiseLocation) => fetchImplementation(`${origin}/webless/v1/bootstrap`, {
96
+ body: JSON.stringify({ ...bootstrapBody, ...advertiseLocation ? { locationConsent: "v1" } : {} }),
97
+ headers: { "content-type": "application/json" },
98
+ method: "POST"
99
+ });
100
+ const response2 = await send(Boolean(options.locationConsent));
101
+ if (options.locationConsent && response2.status === 400) {
102
+ const error = await response2.clone().json().catch(() => null);
103
+ if (isRecord(error) && error.code === "invalid_request") return send(false);
104
+ }
105
+ return response2;
106
+ };
99
107
  let response;
100
108
  let lastError;
101
109
  for (const origin of localBootstrapOrigins(options.runtimeOrigin)) {
@@ -639,6 +647,7 @@ function specialistNameFromInput(input) {
639
647
  return match?.[1]?.trim() || void 0;
640
648
  }
641
649
  function requestedWorkItem(action) {
650
+ if (action.kind === "tool-call" && action.toolName === "request_location") return null;
642
651
  if (action.kind === "tool-call" && action.toolName === "search_discovery") {
643
652
  return {
644
653
  id: action.callId,
@@ -744,13 +753,14 @@ function applyWorkEvent(event, handlers, workItems) {
744
753
  );
745
754
  }
746
755
  var AgentSession = class {
747
- constructor(indexId, version, runtimeOrigin, visitorSessionId, storeOptions, previewBuildId, getUnpublishedPreviewGrant) {
756
+ constructor(indexId, version, runtimeOrigin, visitorSessionId, storeOptions, previewBuildId, getUnpublishedPreviewGrant, locationConsent) {
748
757
  this.indexId = indexId;
749
758
  this.version = version;
750
759
  this.runtimeOrigin = runtimeOrigin;
751
760
  this.visitorSessionId = visitorSessionId;
752
761
  this.storeOptions = storeOptions;
753
762
  this.capability = createAgentRuntimeCapability({
763
+ locationConsent,
754
764
  getUnpublishedPreviewGrant,
755
765
  indexId,
756
766
  previewBuildId,
@@ -1142,7 +1152,8 @@ function createAgentClient(options) {
1142
1152
  visitorSessionId,
1143
1153
  storeOptions,
1144
1154
  options.previewBuildId,
1145
- options.getUnpublishedPreviewGrant
1155
+ options.getUnpublishedPreviewGrant,
1156
+ options.locationConsent
1146
1157
  );
1147
1158
  return {
1148
1159
  indexId,
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 { 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"]}
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 === \"request_location\") return 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 locationConsent?: boolean\n ) {\n this.capability = createAgentRuntimeCapability({\n locationConsent,\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 options.locationConsent\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 locationConsent?: boolean;\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 = {\n clientSessionId: options.visitorSessionId,\n indexId: options.indexId,\n ...(previewBuildId ? { previewBuildId } : {}),\n ...(previewGrant ? { previewGrant } : {}),\n version: options.version,\n };\n const postBootstrap = async (origin: string) => {\n const send = (advertiseLocation: boolean) => fetchImplementation(`${origin}/webless/v1/bootstrap`, {\n body: JSON.stringify({ ...bootstrapBody, ...(advertiseLocation ? { locationConsent: \"v1\" } : {}) }),\n headers: { \"content-type\": \"application/json\" },\n method: \"POST\",\n });\n const response = await send(Boolean(options.locationConsent));\n if (options.locationConsent && response.status === 400) {\n const error: unknown = await response.clone().json().catch(() => null);\n // Older runtimes reject unknown bootstrap fields during rolling upgrades.\n if (isRecord(error) && error.code === \"invalid_request\") return send(false);\n }\n return response;\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","response","isRecord","trimmed","item","current","ClientError","ClientError"]}
@@ -736,6 +736,9 @@ function finalizeSummaryPresentation(result, proposed) {
736
736
  };
737
737
  }
738
738
  function presentVisitorToolResult(result, registry = []) {
739
+ if (result.toolName === "request_location") {
740
+ return { id: result.callId, toolName: result.toolName, status: result.status, kind: "hidden" };
741
+ }
739
742
  if (result.status === "completed" && toolResultFailed(result)) {
740
743
  result = { ...result, status: "failed" };
741
744
  }