@webless/agent 0.10.4 → 0.12.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.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/handoff.ts","../src/runtime/generated/handoff-contract.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 { createHandoffClient } from \"./handoff\";\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 readonly handoff;\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 this.handoff = createHandoffClient({\n getClient: () => this.ensureClient(),\n getSessionId: () => this.getActiveSessionId(),\n capability: this.capability,\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 handoff: session.handoff,\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, type Client } from \"eve/client\";\nimport {\n agentRuntimeHandoffCommandSchema,\n agentRuntimeHandoffMessageSchema,\n agentRuntimeHandoffPageSchema,\n agentRuntimeHandoffReadRequestSchema,\n agentRuntimeHandoffStartSchema,\n type AgentRuntimeHandoffPage,\n} from \"./generated/handoff-contract\";\nimport {\n withCapabilityRefresh,\n type AgentRuntimeCapability,\n} from \"./capability\";\n\nexport type AgentHandoffCommand = {\n operationId: string;\n handoffId: string;\n epoch: number;\n};\n\nexport type AgentHandoffClient = {\n read(options?: {\n after?: number;\n signal?: AbortSignal;\n }): Promise<AgentRuntimeHandoffPage>;\n start(operationId: string, signal?: AbortSignal): Promise<void>;\n send(\n command: AgentHandoffCommand & { message: string },\n signal?: AbortSignal,\n ): Promise<void>;\n returnToAI(command: AgentHandoffCommand, signal?: AbortSignal): Promise<void>;\n};\n\nexport function createHandoffClient(options: {\n getClient: () => Client;\n getSessionId: () => string | undefined;\n capability: AgentRuntimeCapability;\n}): AgentHandoffClient {\n const target = () => {\n const sessionId = options.getSessionId();\n if (!sessionId)\n throw new Error(\n \"Start a conversation before requesting a representative.\",\n );\n return {\n sessionId,\n path: `/webless/v1/session/${encodeURIComponent(sessionId)}/handoff`,\n };\n };\n\n const request = (path: string, init?: RequestInit) =>\n withCapabilityRefresh(options.capability, async () => {\n const response = await options.getClient().fetch(path, {\n ...init,\n cache: \"no-store\",\n redirect: \"error\",\n });\n if (!response.ok) {\n throw new ClientError(\n response.status,\n await response.text(),\n response.headers,\n );\n }\n return response;\n });\n\n const command = async (\n suffix: string,\n body: object,\n signal?: AbortSignal,\n ) => {\n const { path } = target();\n await request(path + suffix, {\n method: \"POST\",\n headers: { \"content-type\": \"application/json\" },\n body: JSON.stringify(body),\n signal,\n });\n };\n\n return {\n async read(input = {}) {\n const { after } = agentRuntimeHandoffReadRequestSchema.parse({\n after: input.after,\n });\n const { sessionId, path } = target();\n const response = await request(`${path}?after=${after}`, {\n signal: input.signal,\n });\n const value: unknown = await response.json();\n const page = agentRuntimeHandoffPageSchema.parse(value);\n if (page.sessionId !== sessionId || page.after !== after) {\n throw new Error(\n \"The handoff response does not belong to this conversation or cursor.\",\n );\n }\n return page;\n },\n start: (operationId, signal) =>\n command(\n \"\",\n agentRuntimeHandoffStartSchema.parse({ operationId }),\n signal,\n ),\n send: (input, signal) =>\n command(\n \"/messages\",\n agentRuntimeHandoffMessageSchema.parse(input),\n signal,\n ),\n returnToAI: (input, signal) =>\n command(\"/return\", agentRuntimeHandoffCommandSchema.parse(input), signal),\n };\n}\n\nexport type {\n AgentRuntimeHandoffEvent as AgentHandoffEvent,\n AgentRuntimeHandoffPage as AgentHandoffPage,\n AgentRuntimeHandoffStatus as AgentHandoffStatus,\n} from \"./generated/handoff-contract\";\n","// Generated from console/packages/contracts/src/agent-runtime-handoff.ts.\n// Source SHA-256: d4c9554c9e0a5be29e51ea9a74548aef58d4f5952c92209712bd80e8f1feb5c2\n// Regenerate with scripts/sync-handoff-contract.mjs; do not edit here.\nimport { z } from \"zod\";\n\nconst id = z.string().min(1).max(200);\nconst sequence = z.number().int().min(0).max(Number.MAX_SAFE_INTEGER);\nconst text = z.string().trim().min(1).max(16_000);\n\nexport const agentRuntimeHandoffVersion = \"webless.ai/agent-runtime-handoff/v1\";\n\nexport const agentRuntimeHandoffStatusSchema = z.enum([\n \"ai\",\n \"requesting\",\n \"queued\",\n \"human\",\n \"resolved\",\n \"failed\",\n]);\n\nexport const agentRuntimeHandoffActorSchema = z.strictObject({\n id,\n name: z.string().trim().min(1).max(200),\n});\n\nconst eventBase = {\n id,\n sequence: sequence.refine((value) => value > 0),\n handoffId: id,\n epoch: sequence.refine((value) => value > 0),\n createdAt: z.iso.datetime(),\n};\n\nexport const agentRuntimeHandoffEventSchema = z.discriminatedUnion(\"type\", [\n z.strictObject({\n ...eventBase,\n type: z.literal(\"status\"),\n status: agentRuntimeHandoffStatusSchema,\n actor: agentRuntimeHandoffActorSchema.nullable(),\n }),\n z.strictObject({\n ...eventBase,\n type: z.literal(\"visitor.message\"),\n message: text,\n operationId: id,\n }),\n z.strictObject({\n ...eventBase,\n type: z.literal(\"human.message\"),\n message: text,\n actor: agentRuntimeHandoffActorSchema,\n }),\n]);\n\nexport const agentRuntimeHandoffReadRequestSchema = z.strictObject({\n after: sequence.default(0),\n});\n\nexport const agentRuntimeHandoffPageSchema = z\n .strictObject({\n apiVersion: z.literal(agentRuntimeHandoffVersion),\n sessionId: id,\n enabled: z.boolean(),\n status: agentRuntimeHandoffStatusSchema,\n handoffId: id.nullable(),\n epoch: sequence,\n after: sequence,\n cursor: sequence,\n hasMore: z.boolean(),\n events: z.array(agentRuntimeHandoffEventSchema).max(100),\n })\n .superRefine((page, ctx) => {\n let cursor = page.after;\n let previousEpoch = 0;\n const statuses = new Map<\n number,\n z.infer<typeof agentRuntimeHandoffStatusSchema>\n >();\n const ids = new Set<string>();\n const handoffs = new Map<number, string>();\n const terminalEpochs = new Set<number>();\n let currentStatus:\n | z.infer<typeof agentRuntimeHandoffStatusSchema>\n | undefined;\n for (const event of page.events) {\n if (event.epoch < previousEpoch)\n ctx.addIssue({\n code: \"custom\",\n message: \"Handoff epochs cannot decrease.\",\n });\n previousEpoch = event.epoch;\n\n if (ids.has(event.id))\n ctx.addIssue({\n code: \"custom\",\n message: \"Duplicate handoff event ID.\",\n });\n ids.add(event.id);\n const handoffId = handoffs.get(event.epoch);\n if (\n (handoffId !== undefined && handoffId !== event.handoffId) ||\n (event.epoch === page.epoch && event.handoffId !== page.handoffId)\n )\n ctx.addIssue({\n code: \"custom\",\n message: \"Inconsistent handoff epoch identity.\",\n });\n handoffs.set(event.epoch, event.handoffId);\n if (\n terminalEpochs.has(event.epoch) &&\n (event.type !== \"status\" || event.status !== \"ai\")\n )\n ctx.addIssue({\n code: \"custom\",\n message: \"Handoff event follows resolution.\",\n });\n if (event.type === \"status\") {\n if (event.status === \"human\" && event.actor === null)\n ctx.addIssue({\n code: \"custom\",\n message: \"Human ownership requires a representative.\",\n });\n const previous = statuses.get(event.epoch);\n const transitions: Record<\n z.infer<typeof agentRuntimeHandoffStatusSchema>,\n readonly z.infer<typeof agentRuntimeHandoffStatusSchema>[]\n > = {\n ai: [],\n requesting: [\"queued\", \"resolved\", \"failed\"],\n queued: [\"human\", \"resolved\", \"failed\"],\n human: [\"resolved\", \"failed\"],\n resolved: [\"ai\"],\n failed: [],\n };\n if (\n previous !== undefined &&\n !transitions[previous].includes(event.status)\n )\n ctx.addIssue({\n code: \"custom\",\n message: \"Invalid handoff ownership transition.\",\n });\n statuses.set(event.epoch, event.status);\n if ([\"resolved\", \"failed\", \"ai\"].includes(event.status))\n terminalEpochs.add(event.epoch);\n if (event.epoch === page.epoch) currentStatus = event.status;\n }\n if (event.sequence !== cursor + 1) {\n ctx.addIssue({\n code: \"custom\",\n message: \"Handoff event gap or replay.\",\n });\n }\n cursor = event.sequence;\n if (event.epoch > page.epoch) {\n ctx.addIssue({\n code: \"custom\",\n message: \"Event exceeds current epoch.\",\n });\n }\n }\n if (\n !page.hasMore &&\n currentStatus !== undefined &&\n currentStatus !== page.status\n )\n ctx.addIssue({\n code: \"custom\",\n message: \"Handoff ownership contradicts its final status event.\",\n });\n if (page.cursor !== cursor || (page.hasMore && page.events.length === 0)) {\n ctx.addIssue({ code: \"custom\", message: \"Invalid handoff page cursor.\" });\n }\n if ((page.epoch === 0) !== (page.handoffId === null)) {\n ctx.addIssue({ code: \"custom\", message: \"Invalid handoff identity.\" });\n }\n if (page.handoffId === null && page.status !== \"ai\") {\n ctx.addIssue({\n code: \"custom\",\n message: \"Handoff identity is required.\",\n });\n }\n });\n\nexport const agentRuntimeHandoffStartSchema = z.strictObject({\n operationId: id,\n});\n\nexport const agentRuntimeHandoffCommandSchema = z.strictObject({\n operationId: id,\n handoffId: id,\n epoch: sequence.refine((value) => value > 0),\n});\n\nexport const agentRuntimeHandoffMessageSchema =\n agentRuntimeHandoffCommandSchema.extend({ message: text });\n\n// Server-to-server identity is derived from verified visitor capabilities.\nexport const agentRuntimeHandoffBindingSchema = z.strictObject({\n tenantId: id,\n indexId: id,\n visitorSubject: id,\n sessionId: id,\n handoffId: id,\n epoch: sequence.refine((value) => value > 0),\n});\n\nconst providerEventBase = {\n apiVersion: z.literal(agentRuntimeHandoffVersion),\n binding: agentRuntimeHandoffBindingSchema,\n eventId: id,\n sequence: sequence.refine((value) => value > 0),\n};\n\nexport const agentRuntimeHandoffProviderEventSchema = z.discriminatedUnion(\n \"type\",\n [\n z.strictObject({ ...providerEventBase, type: z.literal(\"queued\") }),\n z.strictObject({\n ...providerEventBase,\n type: z.literal(\"assigned\"),\n actor: agentRuntimeHandoffActorSchema,\n }),\n z.strictObject({\n ...providerEventBase,\n type: z.literal(\"human.message\"),\n actor: agentRuntimeHandoffActorSchema,\n message: text,\n }),\n z.strictObject({ ...providerEventBase, type: z.literal(\"resolved\") }),\n z.strictObject({ ...providerEventBase, type: z.literal(\"failed\") }),\n ],\n);\n\nexport type AgentRuntimeHandoffStatus = z.infer<\n typeof agentRuntimeHandoffStatusSchema\n>;\nexport type AgentRuntimeHandoffReadRequest = z.input<\n typeof agentRuntimeHandoffReadRequestSchema\n>;\nexport type AgentRuntimeHandoffStart = z.infer<\n typeof agentRuntimeHandoffStartSchema\n>;\nexport type AgentRuntimeHandoffCommand = z.infer<\n typeof agentRuntimeHandoffCommandSchema\n>;\nexport type AgentRuntimeHandoffMessage = z.infer<\n typeof agentRuntimeHandoffMessageSchema\n>;\nexport type AgentRuntimeHandoffEvent = z.infer<\n typeof agentRuntimeHandoffEventSchema\n>;\nexport type AgentRuntimeHandoffPage = z.infer<\n typeof agentRuntimeHandoffPageSchema\n>;\nexport type AgentRuntimeHandoffBinding = z.infer<\n typeof agentRuntimeHandoffBindingSchema\n>;\nexport type AgentRuntimeHandoffProviderEvent = z.infer<\n typeof agentRuntimeHandoffProviderEventSchema\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","ClientError","response","ClientError","isRecord","trimmed","item","current","ClientError","text","ClientError"]}