@agent-native/core 0.15.10 → 0.15.12

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (69) hide show
  1. package/dist/a2a/server.d.ts +1 -0
  2. package/dist/a2a/server.d.ts.map +1 -1
  3. package/dist/a2a/server.js +25 -13
  4. package/dist/a2a/server.js.map +1 -1
  5. package/dist/a2a/types.d.ts +8 -0
  6. package/dist/a2a/types.d.ts.map +1 -1
  7. package/dist/a2a/types.js +0 -1
  8. package/dist/a2a/types.js.map +1 -1
  9. package/dist/action.d.ts +15 -0
  10. package/dist/action.d.ts.map +1 -1
  11. package/dist/action.js +6 -0
  12. package/dist/action.js.map +1 -1
  13. package/dist/agent/production-agent.d.ts +3 -0
  14. package/dist/agent/production-agent.d.ts.map +1 -1
  15. package/dist/agent/production-agent.js.map +1 -1
  16. package/dist/agent-web/config.d.ts +41 -0
  17. package/dist/agent-web/config.d.ts.map +1 -0
  18. package/dist/agent-web/config.js +162 -0
  19. package/dist/agent-web/config.js.map +1 -0
  20. package/dist/agent-web/generator.d.ts +95 -0
  21. package/dist/agent-web/generator.d.ts.map +1 -0
  22. package/dist/agent-web/generator.js +270 -0
  23. package/dist/agent-web/generator.js.map +1 -0
  24. package/dist/agent-web/index.d.ts +3 -0
  25. package/dist/agent-web/index.d.ts.map +1 -0
  26. package/dist/agent-web/index.js +3 -0
  27. package/dist/agent-web/index.js.map +1 -0
  28. package/dist/cli/audit-agent-web.d.ts +2 -0
  29. package/dist/cli/audit-agent-web.d.ts.map +1 -0
  30. package/dist/cli/audit-agent-web.js +201 -0
  31. package/dist/cli/audit-agent-web.js.map +1 -0
  32. package/dist/cli/index.js +17 -0
  33. package/dist/cli/index.js.map +1 -1
  34. package/dist/cli/migrate.d.ts +10 -0
  35. package/dist/cli/migrate.d.ts.map +1 -0
  36. package/dist/cli/migrate.js +78 -0
  37. package/dist/cli/migrate.js.map +1 -0
  38. package/dist/cli/templates-meta.d.ts.map +1 -1
  39. package/dist/cli/templates-meta.js +12 -0
  40. package/dist/cli/templates-meta.js.map +1 -1
  41. package/dist/client/settings/SettingsPanel.d.ts.map +1 -1
  42. package/dist/client/settings/SettingsPanel.js +6 -5
  43. package/dist/client/settings/SettingsPanel.js.map +1 -1
  44. package/dist/client/settings/useBuilderStatus.d.ts.map +1 -1
  45. package/dist/client/settings/useBuilderStatus.js +79 -37
  46. package/dist/client/settings/useBuilderStatus.js.map +1 -1
  47. package/dist/client/settings/useBuilderStatus.spec.js +84 -6
  48. package/dist/client/settings/useBuilderStatus.spec.js.map +1 -1
  49. package/dist/index.d.ts +2 -1
  50. package/dist/index.d.ts.map +1 -1
  51. package/dist/index.js +2 -0
  52. package/dist/index.js.map +1 -1
  53. package/dist/server/agent-chat-plugin.d.ts.map +1 -1
  54. package/dist/server/agent-chat-plugin.js +2 -0
  55. package/dist/server/agent-chat-plugin.js.map +1 -1
  56. package/dist/server/credential-provider.d.ts.map +1 -1
  57. package/dist/server/credential-provider.js +4 -2
  58. package/dist/server/credential-provider.js.map +1 -1
  59. package/dist/vite/agent-web-plugin.d.ts +17 -0
  60. package/dist/vite/agent-web-plugin.d.ts.map +1 -0
  61. package/dist/vite/agent-web-plugin.js +48 -0
  62. package/dist/vite/agent-web-plugin.js.map +1 -0
  63. package/dist/vite/index.d.ts +1 -0
  64. package/dist/vite/index.d.ts.map +1 -1
  65. package/dist/vite/index.js +1 -0
  66. package/dist/vite/index.js.map +1 -1
  67. package/docs/content/agent-web-surfaces.md +143 -0
  68. package/docs/content/migration-workbench.md +110 -0
  69. package/package.json +2 -1
@@ -1 +1 @@
1
- {"version":3,"file":"production-agent.js","sourceRoot":"","sources":["../../src/agent/production-agent.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n defineEventHandler,\n setResponseHeader,\n setResponseStatus,\n getMethod,\n} from \"h3\";\nimport {\n isDeployCredentialFallbackAllowed,\n readDeployCredentialEnv,\n} from \"../server/credential-provider.js\";\nimport type { EventHandler as H3EventHandler } from \"h3\";\nimport type {\n ActionTool,\n AgentChatAttachment,\n AgentChatRequest,\n AgentChatEvent,\n AgentChatReference,\n AgentChatStructuredMessage,\n} from \"./types.js\";\nimport type {\n AgentEngine,\n EngineTool,\n EngineMessage,\n EngineContentPart,\n} from \"./engine/types.js\";\nimport { EngineError } from \"./engine/types.js\";\nimport {\n resolveEngine,\n registerBuiltinEngines,\n getStoredModelForEngine,\n} from \"./engine/index.js\";\nimport { userFacingLlmCredentialError } from \"./engine/credential-errors.js\";\nimport { PROVIDER_TO_ENV } from \"./engine/provider-env-vars.js\";\nimport { readAppState } from \"../application-state/script-helpers.js\";\nimport {\n startRun,\n subscribeToRun,\n getActiveRunForThread,\n getActiveRunForThreadAsync,\n getRun,\n abortRun,\n} from \"./run-manager.js\";\nimport type { ActiveRun } from \"./run-manager.js\";\nimport { readBody } from \"../server/h3-helpers.js\";\nimport {\n getRequestRunContext,\n ensureRequestRunContext,\n getRequestOrgId,\n getRequestUserEmail,\n} from \"../server/request-context.js\";\nimport { isMcpToolAllowedForRequest } from \"../mcp-client/visibility.js\";\nimport {\n createToolSearchEntry,\n TOOL_SEARCH_ACTION_NAME,\n} from \"./tool-search.js\";\nimport {\n getDefaultMaxIterations,\n normalizeMaxIterations,\n readAgentLoopSettings,\n} from \"./loop-settings.js\";\nimport {\n isReasoningEffort,\n normalizeReasoningEffortForModel,\n type ReasoningEffort,\n} from \"../shared/reasoning-effort.js\";\nimport { isAgentActionStopError } from \"../action.js\";\nimport { preUploadImageAttachments } from \"../file-upload/pre-upload-attachments.js\";\n\n// Register built-in engines on first import\nregisterBuiltinEngines();\n\nexport { PROVIDER_TO_ENV };\n\nconst SAFE_BROWSER_TAB_ID_RE = /^[A-Za-z0-9_-]{1,96}$/;\n\nfunction normalizeBrowserTabId(value: unknown): string | undefined {\n if (typeof value !== \"string\") return undefined;\n const trimmed = value.trim();\n return SAFE_BROWSER_TAB_ID_RE.test(trimmed) ? trimmed : undefined;\n}\n\nfunction normalizeChatScope(\n value: unknown,\n): { type: string; id: string; label?: string } | null | undefined {\n if (value == null) return null;\n if (typeof value !== \"object\") return undefined;\n const record = value as Record<string, unknown>;\n const type = typeof record.type === \"string\" ? record.type.trim() : \"\";\n const id = typeof record.id === \"string\" ? record.id.trim() : \"\";\n if (!type || !id || type.length > 64 || id.length > 256) {\n return undefined;\n }\n const label =\n typeof record.label === \"string\" && record.label.trim().length > 0\n ? record.label.trim().slice(0, 256)\n : undefined;\n return { type, id, ...(label ? { label } : {}) };\n}\n\nfunction appStateKeyForBrowserTab(key: string, browserTabId?: string): string {\n return browserTabId ? `${key}:${browserTabId}` : key;\n}\n\nasync function readAppStateForBrowserTab<T>(\n key: string,\n browserTabId?: string,\n): Promise<T | null> {\n const tabKey = appStateKeyForBrowserTab(key, browserTabId);\n if (tabKey !== key) {\n const scoped = (await readAppState(tabKey).catch(() => null)) as T | null;\n if (scoped) return scoped;\n }\n return (await readAppState(key)) as T | null;\n}\n\n/**\n * Look up a user's persisted API key for the given provider. Returns\n * `undefined` for unauthenticated callers.\n *\n * Read order:\n * 1. `app_secrets` — encrypted user override, then active org/workspace.\n * 2. Legacy `user-api-key:<provider>:<email>` settings row — pre-migration\n * data that hasn't been backfilled yet. Surfaced for compat only;\n * writes always go to app_secrets now.\n */\nexport async function getOwnerApiKey(\n provider: string,\n ownerEmail: string | null | undefined,\n): Promise<string | undefined> {\n if (!ownerEmail) return undefined;\n const secretKey =\n PROVIDER_TO_ENV[provider] ?? `${provider.toUpperCase()}_API_KEY`;\n try {\n const { readAppSecret } = await import(\"../secrets/storage.js\");\n const refs: Array<{\n scope: \"user\" | \"org\" | \"workspace\";\n scopeId: string;\n }> = [{ scope: \"user\", scopeId: ownerEmail }];\n const orgId = getRequestOrgId();\n if (orgId) {\n refs.push(\n { scope: \"org\", scopeId: orgId },\n { scope: \"workspace\", scopeId: orgId },\n );\n } else {\n refs.push({ scope: \"workspace\", scopeId: `solo:${ownerEmail}` });\n }\n for (const ref of refs) {\n const fromSecrets = await readAppSecret({\n key: secretKey,\n scope: ref.scope,\n scopeId: ref.scopeId,\n });\n if (fromSecrets?.value) return fromSecrets.value;\n }\n } catch {\n // app_secrets table not ready — fall through to legacy lookup.\n }\n try {\n const { getSetting } = await import(\"../settings/store.js\");\n const stored = await getSetting(`user-api-key:${provider}:${ownerEmail}`);\n const key =\n stored && typeof stored.key === \"string\" ? stored.key.trim() : \"\";\n if (key) return key;\n if (provider === \"anthropic\") {\n const legacy = await getSetting(`user-anthropic-api-key:${ownerEmail}`);\n const legacyKey =\n legacy && typeof legacy.key === \"string\" ? legacy.key.trim() : \"\";\n return legacyKey || undefined;\n }\n return undefined;\n } catch {\n return undefined;\n }\n}\n\n/**\n * Derive the provider name from the active engine setting.\n * \"ai-sdk:openai\" → \"openai\", \"anthropic\" → \"anthropic\"\n */\nexport function engineToProvider(engineName: string): string {\n return engineName.startsWith(\"ai-sdk:\") ? engineName.slice(7) : engineName;\n}\n\n/**\n * Returns true when this process should block generic deploy-level provider\n * credentials for signed-in chat requests.\n *\n * Self-hosted single-tenant deployments keep the env-var fallback so the\n * original BYO-server UX continues to work without a per-user key.\n */\nfunction shouldBlockDeployCredentialFallback(): boolean {\n return !isDeployCredentialFallbackAllowed();\n}\n\n/**\n * Resolve the active engine's provider and look up the user's API key for it.\n *\n * In shared hosted deploys we deliberately refuse the deploy-level fallback\n * for authenticated users. Without that gate any\n * signed-in user who hasn't configured their own provider key would silently\n * inherit the deployment's key (uncapped billing on the owner's account,\n * prompt logging tied to the deployment owner) — exactly the prior-incident\n * pattern we hit on 2026-04-29.\n *\n * Single-tenant (local-dev, self-hosted SQLite) keeps the env fallback.\n *\n * Callers in `agent-chat-plugin.ts`, `triggers/dispatcher.ts`,\n * `jobs/scheduler.ts`, and `integrations/plugin.ts` historically layer\n * another deployment-key fallback after this must keep the same gate.\n */\nexport async function getOwnerActiveApiKey(\n ownerEmail: string | null | undefined,\n): Promise<string | undefined> {\n try {\n const { getSetting } = await import(\"../settings/store.js\");\n const engineSetting = await getSetting(\"agent-engine\");\n const activeEngine =\n (engineSetting?.engine as string | undefined) ?? \"anthropic\";\n const provider = engineToProvider(activeEngine);\n const userKey = await getOwnerApiKey(provider, ownerEmail);\n if (userKey) return userKey;\n if (shouldBlockDeployCredentialFallback()) {\n // Shared hosted default: refuse the env fallback. A null user\n // (unauthenticated / background context with no owner) gets undefined\n // here too — there's no user to bill, and the call site must surface a\n // \"configure a key\" error to the requester rather than silently using\n // the deploy key.\n return undefined;\n }\n const envVar = PROVIDER_TO_ENV[provider];\n return envVar ? readDeployCredentialEnv(envVar) : undefined;\n } catch {\n return undefined;\n }\n}\n\n/** @deprecated Use getOwnerApiKey(\"anthropic\", ownerEmail) instead */\nexport async function getOwnerAnthropicApiKey(\n ownerEmail: string | null | undefined,\n): Promise<string | undefined> {\n return getOwnerApiKey(\"anthropic\", ownerEmail);\n}\n\n/** Context passed to action run() for emitting intermediate events */\nexport interface ActionRunContext {\n /** Emit an SSE event to the client (e.g., agent_call_text for streaming) */\n send: (event: AgentChatEvent) => void;\n}\n\nexport interface ActionEntry {\n tool: ActionTool;\n run: (\n args: Record<string, string>,\n context?: ActionRunContext,\n ) => Promise<any>;\n /** HTTP exposure config. `false` = agent-only. Omitted = auto-inferred from name. */\n http?: import(\"../action.js\").ActionHttpConfig | false;\n /** If true, completion does NOT trigger a screen-refresh poll event.\n * Set automatically by `defineAction` when `http.method === \"GET\"`. */\n readOnly?: boolean;\n /** If true, this action can run concurrently with other same-turn\n * read-only/parallel-safe tool calls. Only use for actions that handle\n * their own write ordering and idempotency. */\n parallelSafe?: boolean;\n /** Whether this action may be invoked from the tools-iframe bridge.\n * **Default-allow opt-out**: only an explicit `false` returns 403.\n * - `true` / `undefined` — allow.\n * - `false` — explicit deny; the tools bridge returns 403.\n * See `defineAction` (`packages/core/src/action.ts`) and audit H5 in\n * `security-audit/05-tools-sandbox.md`. */\n toolCallable?: boolean;\n}\n\n/** @deprecated Use `ActionEntry` instead */\nexport type ScriptEntry = ActionEntry;\n\nexport type AgentExecutionMode = \"act\" | \"plan\";\n\nexport const PLAN_MODE_SYSTEM_PROMPT = `## Plan Mode Active\n\nYou are in Plan mode. This turn is for research, clarification, and a proposed approach only.\n\nHard rules:\n- Use only read-only tools. Do not edit files, write resources, run shell commands, mutate SQL rows, navigate the UI, send notifications, create jobs, create tools, call external agents, or change external systems.\n- If a needed detail is unclear, ask a concise clarifying question before proposing a plan.\n- When ready, present a concrete plan with the files/tools you expect to touch, the intended changes, validation steps, and notable risks.\n- Do not treat approval as implicit while Plan mode is still active. Tell the user to switch to Act mode with the mode selector or /act before implementation.`;\n\nconst PLAN_MODE_BLOCKED_READONLY_TOOLS = new Set([\n \"refresh-screen\",\n \"set-search-params\",\n \"set-url-path\",\n]);\n\nconst PLAN_MODE_ALLOWED_ACTIONS: Record<string, readonly string[]> = {\n resources: [\"list\", \"read\"],\n \"chat-history\": [\"search\"],\n \"agent-teams\": [\"status\", \"read-result\", \"list\"],\n \"manage-jobs\": [\"list\"],\n \"manage-automations\": [\"list-events\", \"list\"],\n \"manage-notifications\": [\"list\"],\n \"manage-progress\": [\"list\"],\n \"manage-agent-engine\": [\"list\"],\n};\n\nconst PLAN_MODE_WEB_REQUEST_METHODS = new Set([\"GET\", \"HEAD\"]);\n\nfunction getToolAction(name: string, args: unknown): string {\n const raw =\n args && typeof args === \"object\" && \"action\" in args\n ? (args as Record<string, unknown>).action\n : undefined;\n if (raw == null && name === \"chat-history\") return \"search\";\n return String(raw ?? \"\").toLowerCase();\n}\n\nfunction getWebRequestMethod(args: unknown): string {\n const raw =\n args && typeof args === \"object\" && \"method\" in args\n ? (args as Record<string, unknown>).method\n : undefined;\n return String(raw ?? \"GET\").toUpperCase();\n}\n\nfunction restrictActionEnum(\n parameters: ActionTool[\"parameters\"] | undefined,\n allowedActions: readonly string[],\n): ActionTool[\"parameters\"] | undefined {\n if (!parameters) return parameters;\n const actionParam = parameters.properties.action;\n if (!actionParam) return parameters;\n return {\n ...parameters,\n properties: {\n ...parameters.properties,\n action: {\n ...actionParam,\n enum: [...allowedActions],\n },\n },\n };\n}\n\nfunction restrictWebRequestMethods(\n parameters: ActionTool[\"parameters\"] | undefined,\n): ActionTool[\"parameters\"] | undefined {\n if (!parameters) return parameters;\n const methodParam = parameters.properties.method;\n if (!methodParam) return parameters;\n return {\n ...parameters,\n properties: {\n ...parameters.properties,\n method: {\n ...methodParam,\n enum: [...PLAN_MODE_WEB_REQUEST_METHODS],\n },\n },\n };\n}\n\nfunction planModeBlockedMessage(toolName: string, reason?: string): string {\n return (\n `Plan mode blocked \\`${toolName}\\`` +\n (reason ? ` (${reason})` : \"\") +\n \". Switch to Act mode after the user approves the plan, then retry the action.\"\n );\n}\n\nexport function isPlanModeToolCallAllowed(\n name: string,\n input: unknown,\n entry: ActionEntry,\n): boolean {\n if (PLAN_MODE_BLOCKED_READONLY_TOOLS.has(name)) return false;\n\n if (name === \"web-request\") {\n return PLAN_MODE_WEB_REQUEST_METHODS.has(getWebRequestMethod(input));\n }\n\n const allowedActions = PLAN_MODE_ALLOWED_ACTIONS[name];\n if (allowedActions) {\n return allowedActions.includes(getToolAction(name, input));\n }\n\n return entry.readOnly === true;\n}\n\nfunction createPlanModeGuardedAction(\n name: string,\n entry: ActionEntry,\n allowedActions: readonly string[],\n): ActionEntry {\n return {\n ...entry,\n readOnly: true,\n tool: {\n ...entry.tool,\n description:\n `${entry.tool.description}\\n\\nPlan mode: only these read-only actions are available: ` +\n allowedActions.map((action) => `\"${action}\"`).join(\", \") +\n \".\",\n parameters: restrictActionEnum(entry.tool.parameters, allowedActions),\n },\n run: async (args, context) => {\n const action = getToolAction(name, args);\n if (!allowedActions.includes(action)) {\n return planModeBlockedMessage(\n name,\n `action=\"${action || \"(missing)\"}\"`,\n );\n }\n return entry.run(args, context);\n },\n };\n}\n\nfunction createPlanModeWebRequestAction(entry: ActionEntry): ActionEntry {\n return {\n ...entry,\n readOnly: true,\n tool: {\n ...entry.tool,\n description: `${entry.tool.description}\\n\\nPlan mode: only GET and HEAD requests are allowed.`,\n parameters: restrictWebRequestMethods(entry.tool.parameters),\n },\n run: async (args, context) => {\n const method = getWebRequestMethod(args);\n if (!PLAN_MODE_WEB_REQUEST_METHODS.has(method)) {\n return planModeBlockedMessage(\"web-request\", `method=\"${method}\"`);\n }\n return entry.run(args, context);\n },\n };\n}\n\nexport function createPlanModeActionRegistry(\n actions: Record<string, ActionEntry>,\n): Record<string, ActionEntry> {\n const filtered: Record<string, ActionEntry> = {};\n\n for (const [name, entry] of Object.entries(actions)) {\n if (name === TOOL_SEARCH_ACTION_NAME) continue;\n if (PLAN_MODE_BLOCKED_READONLY_TOOLS.has(name)) continue;\n\n const allowedActions = PLAN_MODE_ALLOWED_ACTIONS[name];\n if (allowedActions) {\n filtered[name] = createPlanModeGuardedAction(name, entry, allowedActions);\n continue;\n }\n\n if (name === \"web-request\") {\n filtered[name] = createPlanModeWebRequestAction(entry);\n continue;\n }\n\n if (entry.readOnly === true) {\n filtered[name] = entry;\n }\n }\n\n if (actions[TOOL_SEARCH_ACTION_NAME]) {\n filtered[TOOL_SEARCH_ACTION_NAME] = createToolSearchEntry(() => filtered);\n }\n\n return filtered;\n}\n\nexport interface ProductionAgentOptions {\n /** Action entries for the agent. Use `actions` (preferred) or `scripts` (deprecated alias). */\n actions?: Record<string, ActionEntry>;\n /** @deprecated Use `actions` instead */\n scripts?: Record<string, ActionEntry>;\n /** Static system prompt string, or async function called per-request with the H3 event */\n systemPrompt: string | ((event: any) => string | Promise<string>);\n /** Falls back to ANTHROPIC_API_KEY env var. Ignored when `engine` is provided. */\n apiKey?: string;\n /** Agent engine to use. Defaults to the \"anthropic\" engine. */\n engine?:\n | AgentEngine\n | string\n | { name: string; config: Record<string, unknown> };\n /** Model to use. Defaults to the resolved engine's default model. */\n model?: string;\n /** Default reasoning effort for requests that do not supply an override. */\n reasoningEffort?: ReasoningEffort;\n /** Provider-specific options passed through to the engine */\n providerOptions?: EngineMessage extends never ? never : any;\n /** Called when a run completes (for server-side thread persistence) */\n onRunComplete?: (run: ActiveRun, threadId: string | undefined) => void;\n /** Called after request validation but before a run is started. */\n onRunPrepared?: (details: {\n runId: string;\n threadId: string | undefined;\n message: string;\n attachments?: AgentChatAttachment[];\n }) => void | Promise<void>;\n /**\n * Optional per-template request normalizer. Runs after owner resolution and\n * before system/context assembly so templates can materialize uploaded chat\n * attachments or append app-specific, non-visible instructions.\n */\n prepareRequest?: (details: {\n event: any;\n ownerEmail: string | null;\n message: string;\n displayMessage?: string;\n attachments: AgentChatAttachment[];\n references: AgentChatReference[];\n threadId?: string;\n internalContinuation?: boolean;\n mode: AgentExecutionMode;\n }) =>\n | void\n | {\n message?: string;\n displayMessage?: string;\n attachments?: AgentChatAttachment[];\n }\n | Promise<void | {\n message?: string;\n displayMessage?: string;\n attachments?: AgentChatAttachment[];\n }>;\n /** Optional per-app agent run chunk budget in milliseconds. Defaults to\n * AGENT_RUN_SOFT_TIMEOUT_MS when set, otherwise no framework-imposed\n * timeout. When reached, the client receives an internal auto-continuation\n * signal instead of a user-facing warning. */\n runSoftTimeoutMs?: number;\n /** Called when a run starts, with the send function for emitting events and the threadId */\n onRunStart?: (\n send: (event: AgentChatEvent) => void,\n threadId: string,\n ) => void | Promise<void>;\n /**\n * Called after the engine + model are resolved for this request. Used by\n * the plugin layer to thread the parent's choices into sub-agents so\n * delegated tasks don't default back to Anthropic + Claude.\n */\n onEngineResolved?: (engine: AgentEngine, model: string) => void;\n /** Resolve the owner email from the H3 event (for usage tracking) */\n resolveOwnerEmail?: (event: any) => string | Promise<string>;\n /**\n * Optional final-answer guard. If it returns a message after a text-only\n * assistant turn, the loop clears that draft once and asks the model to\n * continue with the returned corrective instruction before allowing a final.\n */\n finalResponseGuard?: AgentLoopFinalResponseGuard;\n /**\n * Skip auto-injecting the workspace files/skills/agents inventory on the\n * first message of a conversation. Useful for minimal/voice apps where\n * the ~2KB inventory of unrelated resources is noise, not signal.\n * Default: false (inventory is injected).\n */\n skipFilesContext?: boolean;\n}\n\nexport async function resolveAgentOwnerEmail(\n options: Pick<ProductionAgentOptions, \"resolveOwnerEmail\">,\n event: any,\n): Promise<string | null> {\n let ownerEmail: string | null = null;\n if (options.resolveOwnerEmail) {\n try {\n ownerEmail = await options.resolveOwnerEmail(event);\n } catch {\n ownerEmail = null;\n }\n }\n return ownerEmail ?? getRequestUserEmail() ?? null;\n}\n\nconst MAX_RETRIES = 3;\n/**\n * Retry budget override for `builder_gateway_error` — the no-detail Builder\n * gateway fallback. Production data shows this code is almost never\n * transient: it's the gateway emitting `{type:\"stop\",reason:\"error\"}` with\n * no explanation, which usually means the upstream provider rejected the\n * call (model quota, account misconfiguration). Retrying the same request\n * synchronously rarely recovers, and each retry emits a `clear` event that\n * wipes the user's visible content and re-streams from scratch — three\n * cycles of \"regenerate, clear, regenerate\" inside a single run for a\n * failure mode where retrying doesn't help. Keep the budget at 1 so we\n * cover genuinely transient cases without the visible flicker storm.\n */\nconst BUILDER_GATEWAY_ERROR_MAX_RETRIES = 1;\nconst RETRY_BASE_DELAY_MS = 2000;\n\nfunction maxRetriesForError(err: unknown): number {\n if (err instanceof EngineError) {\n const code = (err.errorCode ?? \"\").toLowerCase();\n if (code === \"builder_gateway_error\") {\n return BUILDER_GATEWAY_ERROR_MAX_RETRIES;\n }\n }\n return MAX_RETRIES;\n}\nconst TOOL_INPUT_ACTIVITY_INTERVAL_MS = 1500;\nconst MAX_TEXT_ATTACHMENT_CHARS = 60_000;\n\nfunction generateRunId(): string {\n return `run-${Date.now()}-${Math.random().toString(36).slice(2, 8)}`;\n}\n\nfunction toolInputActivityLabel(toolName?: string): string {\n return toolName ? `Preparing ${toolName} action` : \"Preparing action input\";\n}\n\n/** Check if an error is transient and should be retried */\nfunction isContextTooLongError(err: unknown): boolean {\n if (!(err instanceof Error)) return false;\n const msg = err.message.toLowerCase();\n if (\n msg.includes(\"context_length_exceeded\") ||\n msg.includes(\"input_too_long\") ||\n msg.includes(\"too many tokens\") ||\n msg.includes(\"prompt is too long\") ||\n msg.includes(\"reduce the length\")\n )\n return true;\n if (err instanceof EngineError) {\n const code = (err.errorCode ?? \"\").toLowerCase();\n if (code.includes(\"context_length\") || code.includes(\"input_too_long\"))\n return true;\n }\n return false;\n}\n\nfunction isRetryableError(err: unknown): boolean {\n if (!(err instanceof Error)) return false;\n const msg = err.message.toLowerCase();\n const code =\n err instanceof EngineError ? (err.errorCode ?? \"\").toLowerCase() : \"\";\n if (code === \"builder_gateway_timeout\") return false;\n return (\n code === \"builder_gateway_error\" ||\n code === \"builder_gateway_network_error\" ||\n code === \"http_502\" ||\n code === \"http_503\" ||\n code === \"http_504\" ||\n code === \"timeout\" ||\n msg.includes(\"overloaded\") ||\n msg.includes(\"rate_limit\") ||\n msg.includes(\"529\") ||\n msg.includes(\"502\") ||\n msg.includes(\"503\") ||\n msg.includes(\"504\") ||\n msg.includes(\"gateway error\") ||\n msg.includes(\"socket hang up\") ||\n msg.includes(\"connection reset\") ||\n msg.includes(\"too many requests\") ||\n msg.includes(\"timeout\") ||\n msg.includes(\"gateway timeout\") ||\n msg.includes(\"inactivity timeout\") ||\n msg.includes(\"too much time has passed without sending any data\")\n );\n}\n\n/** Wait with exponential backoff, respecting abort signal */\nfunction retryDelay(attempt: number, signal: AbortSignal): Promise<void> {\n const baseMs = RETRY_BASE_DELAY_MS * Math.pow(2, attempt);\n const jitter = baseMs * 0.1;\n const ms = Math.max(0, baseMs + (Math.random() * 2 - 1) * jitter);\n return new Promise((resolve, reject) => {\n if (signal.aborted) return reject(new Error(\"aborted\"));\n const timer = setTimeout(resolve, ms);\n signal.addEventListener(\n \"abort\",\n () => {\n clearTimeout(timer);\n reject(new Error(\"aborted\"));\n },\n { once: true },\n );\n });\n}\n\ntype SupportedImageMediaType =\n | \"image/jpeg\"\n | \"image/png\"\n | \"image/gif\"\n | \"image/webp\";\n\nfunction isSupportedImageMediaType(\n mediaType: string,\n): mediaType is SupportedImageMediaType {\n return (\n mediaType === \"image/jpeg\" ||\n mediaType === \"image/png\" ||\n mediaType === \"image/gif\" ||\n mediaType === \"image/webp\"\n );\n}\n\nfunction escapeAttachmentAttribute(value: string): string {\n return value\n .replace(/&/g, \"&amp;\")\n .replace(/\"/g, \"&quot;\")\n .replace(/</g, \"&lt;\")\n .replace(/>/g, \"&gt;\");\n}\n\nfunction unwrapTextAttachmentEnvelope(text: string): string {\n const match = text.match(/^<attachment\\b[^>]*>\\n([\\s\\S]*)\\n<\\/attachment>$/);\n return match ? match[1] : text;\n}\n\nfunction truncateTextAttachment(text: string): string {\n if (text.length <= MAX_TEXT_ATTACHMENT_CHARS) return text;\n\n const omitted = text.length - MAX_TEXT_ATTACHMENT_CHARS;\n return `${text.slice(0, MAX_TEXT_ATTACHMENT_CHARS)}\\n\\n[Attachment truncated after ${MAX_TEXT_ATTACHMENT_CHARS.toLocaleString()} characters; ${omitted.toLocaleString()} characters omitted to keep the agent request within model context limits.]`;\n}\n\nfunction formatTextAttachment(att: AgentChatAttachment): string | null {\n if (typeof att.text !== \"string\" || att.text.length === 0) return null;\n const text = truncateTextAttachment(unwrapTextAttachmentEnvelope(att.text));\n\n const attrs = [\n `name=\"${escapeAttachmentAttribute(att.name || \"attachment\")}\"`,\n att.contentType\n ? `contentType=\"${escapeAttachmentAttribute(att.contentType)}\"`\n : null,\n att.type ? `type=\"${escapeAttachmentAttribute(att.type)}\"` : null,\n ].filter(Boolean);\n\n return `<attachment ${attrs.join(\" \")}>\\n${text}\\n</attachment>`;\n}\n\nfunction dataUrlToFilePart(\n att: AgentChatAttachment,\n): { type: \"file\"; data: string; mediaType: string; filename?: string } | null {\n if (att.type !== \"file\" || typeof att.data !== \"string\") return null;\n const match = att.data.match(/^data:([^;]+);base64,(.+)$/);\n if (!match) return null;\n return {\n type: \"file\",\n data: match[2],\n mediaType: att.contentType || match[1],\n filename: att.name || undefined,\n };\n}\n\nexport function buildUserContentWithAttachments(opts: {\n text: string;\n attachments?: AgentChatAttachment[];\n}): EngineContentPart[] {\n const userContent: EngineContentPart[] = [];\n const textAttachments: string[] = [];\n\n for (const att of opts.attachments ?? []) {\n if (att.type === \"image\" && att.data) {\n const match = att.data.match(/^data:(image\\/[^;]+);base64,(.+)$/);\n if (match && isSupportedImageMediaType(match[1])) {\n userContent.push({\n type: \"image\",\n data: match[2],\n mediaType: match[1],\n });\n }\n continue;\n }\n\n const filePart = dataUrlToFilePart(att);\n if (filePart) {\n userContent.push(filePart);\n continue;\n }\n\n const textAttachment = formatTextAttachment(att);\n if (textAttachment) {\n textAttachments.push(textAttachment);\n }\n }\n\n userContent.push({\n type: \"text\",\n text:\n textAttachments.length > 0\n ? `${textAttachments.join(\"\\n\\n\")}\\n\\n${opts.text}`\n : opts.text,\n });\n\n return userContent;\n}\n\nexport function structuredHistoryToEngineMessages(\n history: AgentChatStructuredMessage[] | undefined,\n): EngineMessage[] | null {\n if (!Array.isArray(history)) return null;\n\n const messages: EngineMessage[] = [];\n for (const message of history) {\n if (\n !message ||\n (message.role !== \"user\" && message.role !== \"assistant\") ||\n !Array.isArray(message.content)\n ) {\n continue;\n }\n\n const content: EngineContentPart[] = [];\n for (const part of message.content) {\n if (!part || typeof part !== \"object\") continue;\n if (part.type === \"text\" && typeof part.text === \"string\") {\n if (part.text.length > 0) {\n content.push({ type: \"text\", text: part.text });\n }\n continue;\n }\n\n if (part.type === \"tool-call\" && message.role === \"assistant\") {\n const id =\n typeof part.id === \"string\"\n ? part.id\n : typeof part.toolCallId === \"string\"\n ? part.toolCallId\n : \"\";\n const name =\n typeof part.name === \"string\"\n ? part.name\n : typeof part.toolName === \"string\"\n ? part.toolName\n : \"\";\n if (!id || !name) continue;\n content.push({\n type: \"tool-call\",\n id,\n name,\n input: part.input ?? part.args ?? {},\n });\n continue;\n }\n\n if (part.type === \"tool-result\" && message.role === \"user\") {\n if (\n typeof part.toolCallId !== \"string\" ||\n typeof part.content !== \"string\"\n ) {\n continue;\n }\n content.push({\n type: \"tool-result\",\n toolCallId: part.toolCallId,\n ...(typeof part.toolName === \"string\"\n ? { toolName: part.toolName }\n : {}),\n content: part.content,\n ...(part.isError ? { isError: true } : {}),\n });\n }\n }\n\n if (content.length > 0) {\n messages.push({ role: message.role, content });\n }\n }\n\n return messages.length > 0 ? messages : null;\n}\n\n/** Build enriched message with file/skill/mention references */\nfunction enrichMessage(\n message: string,\n references: AgentChatReference[],\n): string {\n if (references.length === 0) return message;\n\n const fileRefs = references.filter((r) => r.type === \"file\");\n const skillRefs = references.filter((r) => r.type === \"skill\");\n const customAgentRefs = references.filter((r) => r.type === \"custom-agent\");\n const mentionRefs = references.filter((r) => r.type === \"mention\");\n\n const parts: string[] = [];\n if (fileRefs.length > 0) {\n parts.push(\n \"Referenced files:\\n\" +\n fileRefs\n .map(\n (r) => `- ${r.path}${r.source === \"resource\" ? \" (resource)\" : \"\"}`,\n )\n .join(\"\\n\"),\n );\n }\n if (skillRefs.length > 0) {\n parts.push(\n \"Applied skills:\\n\" +\n skillRefs\n .map(\n (r) =>\n `- ${r.name} (${r.path})${r.source === \"resource\" ? \" — read with resource-read\" : \" — read with read-file\"}`,\n )\n .join(\"\\n\"),\n );\n }\n if (customAgentRefs.length > 0) {\n parts.push(\n \"Requested custom agents:\\n\" +\n customAgentRefs\n .map(\n (r) =>\n `- ${r.name}${r.refId ? ` (id: ${r.refId})` : \"\"}${r.path ? ` (path: ${r.path})` : \"\"}`,\n )\n .join(\"\\n\"),\n );\n }\n if (mentionRefs.length > 0) {\n parts.push(\n \"Referenced items:\\n\" +\n mentionRefs\n .map(\n (r) =>\n `- [${r.refType || \"item\"}] ${r.name}${r.refId ? ` (id: ${r.refId})` : \"\"}${r.path ? ` (path: ${r.path})` : \"\"}`,\n )\n .join(\"\\n\"),\n );\n }\n\n return `${parts.join(\"\\n\\n\")}\\n\\n${message}`;\n}\n\n/** Accumulated token usage from an agent loop run */\nexport interface AgentLoopUsage {\n inputTokens: number;\n outputTokens: number;\n cacheReadTokens: number;\n cacheWriteTokens: number;\n model: string;\n}\n\nexport interface AgentLoopToolCallSummary {\n name: string;\n input: unknown;\n}\n\nexport interface AgentLoopToolResultSummary {\n name: string;\n content: string;\n isError: boolean;\n}\n\nexport interface AgentLoopFinalResponseGuardContext {\n messages: EngineMessage[];\n assistantContent: EngineContentPart[];\n text: string;\n toolCalls: AgentLoopToolCallSummary[];\n toolResults: AgentLoopToolResultSummary[];\n retryCount: number;\n}\n\nexport type AgentLoopFinalResponseGuardResult =\n | string\n | {\n retryMessage: string;\n fallbackMessage?: string;\n };\n\nexport type AgentLoopFinalResponseGuard = (\n context: AgentLoopFinalResponseGuardContext,\n) =>\n | AgentLoopFinalResponseGuardResult\n | null\n | undefined\n | Promise<AgentLoopFinalResponseGuardResult | null | undefined>;\n\nfunction collectTextParts(parts: EngineContentPart[]): string {\n return parts\n .filter(\n (part): part is import(\"./engine/types.js\").EngineTextPart =>\n part.type === \"text\",\n )\n .map((part) => part.text)\n .join(\"\");\n}\n\nexport const AGENT_INTERNAL_CONTINUE_PROMPT =\n \"Continue from where you left off and finish the user's original request. Do not repeat completed work, do not mention internal reconnects, time limits, or step limits, and continue as if this is the same uninterrupted run.\";\n\nexport type AgentLoopContinuationReason =\n | \"run_timeout\"\n | \"loop_limit\"\n | \"stream_ended\"\n | \"gateway_timeout\"\n | \"network_interrupted\";\n\nexport function appendAgentLoopContinuation(\n messages: EngineMessage[],\n reason: AgentLoopContinuationReason,\n) {\n const note =\n reason === \"loop_limit\"\n ? \"The previous run reached an internal step budget.\"\n : reason === \"stream_ended\"\n ? \"The previous stream ended before the agent sent a final completion signal.\"\n : reason === \"gateway_timeout\"\n ? \"The previous LLM call hit an upstream gateway timeout before the response finished streaming.\"\n : reason === \"network_interrupted\"\n ? \"The previous LLM call was cut off by a transport-level interruption (socket dropped, connection reset, or stream closed unexpectedly).\"\n : \"The previous run reached an internal execution budget.\";\n messages.push({\n role: \"user\",\n content: [\n {\n type: \"text\",\n text: `${AGENT_INTERNAL_CONTINUE_PROMPT}\\n\\nInternal note: ${note}`,\n },\n ],\n });\n}\n\n/**\n * True when an error thrown by `runAgentLoop` is a recoverable transport- or\n * gateway-level interruption that the agent can resume from rather than a\n * terminal failure. The continuation pattern works because the LLM call's\n * conversation prefix is preserved on the next attempt — Anthropic's prompt\n * cache rescues the latency, and the agent gets a \"you got cut off, continue\"\n * nudge so it doesn't redo work it already finished.\n *\n * Distinct from `isRetryableError` which guides per-engine quick retries:\n * `isResumableEngineError` is checked AFTER engine retries are exhausted, at\n * the run level. It catches both gateway-reported timeouts (where engine\n * retries don't apply because the gateway already gave up) and transport\n * errors that survived engine retry budgets.\n */\nexport function isResumableEngineError(err: unknown): boolean {\n if (!(err instanceof Error)) return false;\n const code =\n err instanceof EngineError ? (err.errorCode ?? \"\").toLowerCase() : \"\";\n if (\n code === \"builder_gateway_timeout\" ||\n code === \"builder_gateway_network_error\"\n ) {\n return true;\n }\n if (\n code === \"http_502\" ||\n code === \"http_503\" ||\n code === \"http_504\" ||\n code === \"timeout\"\n ) {\n return true;\n }\n const text = errorSearchText(err);\n return (\n text.includes(\"socket hang up\") ||\n text.includes(\"econnreset\") ||\n text.includes(\"enetreset\") ||\n text.includes(\"econnaborted\") ||\n text.includes(\"fetch failed\") ||\n text.includes(\"network error\") ||\n text.includes(\"connection reset\") ||\n text.includes(\"connection closed\") ||\n text.includes(\"stream closed\") ||\n text.includes(\"inactivity timeout\") ||\n text.includes(\"gateway timeout\") ||\n text.includes(\"upstream timeout\") ||\n text.includes(\"function timeout\") ||\n text.includes(\"too much time has passed without sending any data\") ||\n text.includes(\"terminated\")\n );\n}\n\n/**\n * Map a resumable error to the most descriptive continuation reason. Used\n * when surfacing the resume to the agent and to clients via the\n * `auto_continue` event.\n */\nexport function continuationReasonForResumableError(\n err: unknown,\n): \"gateway_timeout\" | \"network_interrupted\" {\n const code =\n err instanceof EngineError ? (err.errorCode ?? \"\").toLowerCase() : \"\";\n if (code === \"builder_gateway_timeout\") return \"gateway_timeout\";\n const text = err instanceof Error ? err.message.toLowerCase() : \"\";\n if (\n text.includes(\"gateway timeout\") ||\n text.includes(\"upstream timeout\") ||\n text.includes(\"function timeout\")\n ) {\n return \"gateway_timeout\";\n }\n return \"network_interrupted\";\n}\n\nfunction errorSearchText(err: unknown): string {\n const parts: string[] = [];\n if (err instanceof Error) {\n parts.push(err.name, err.message);\n const maybe = err as Error & { code?: unknown; cause?: unknown };\n if (typeof maybe.code === \"string\") parts.push(maybe.code);\n if (maybe.cause) parts.push(errorSearchText(maybe.cause));\n } else {\n parts.push(String(err));\n }\n return parts.join(\" \").toLowerCase();\n}\n\nfunction textFromEngineMessage(message: EngineMessage): string {\n return message.content\n .filter(\n (part): part is import(\"./engine/types.js\").EngineTextPart =>\n part.type === \"text\",\n )\n .map((part) => part.text)\n .join(\"\\n\");\n}\n\nfunction isInternalContinuationTurn(messages: EngineMessage[]): boolean {\n for (let i = messages.length - 1; i >= 0; i--) {\n const message = messages[i];\n if (message.role !== \"user\") continue;\n return textFromEngineMessage(message).startsWith(\n AGENT_INTERNAL_CONTINUE_PROMPT,\n );\n }\n return false;\n}\n\nfunction seedReadOnlyToolResultsFromHistory(\n messages: EngineMessage[],\n actions: Record<string, ActionEntry>,\n): Map<string, string> {\n const cache = new Map<string, string>();\n if (!isInternalContinuationTurn(messages)) return cache;\n\n const pendingToolCalls = new Map<string, { name: string; input: unknown }>();\n for (const message of messages) {\n if (message.role === \"assistant\") {\n for (const part of message.content) {\n if (part.type !== \"tool-call\") continue;\n const entry = actions[part.name];\n if (entry?.readOnly !== true) continue;\n pendingToolCalls.set(part.id, {\n name: part.name,\n input: part.input,\n });\n }\n continue;\n }\n\n for (const part of message.content) {\n if (part.type !== \"tool-result\") continue;\n const call = pendingToolCalls.get(part.toolCallId);\n if (!call) continue;\n cache.set(toolCallCacheKey(call.name, call.input), part.content);\n }\n }\n\n return cache;\n}\n\n/**\n * Convert ActionEntry registry to EngineTool array.\n */\nexport function actionsToEngineTools(\n actions: Record<string, ActionEntry>,\n): EngineTool[] {\n const tools: EngineTool[] = [];\n for (const [name, entry] of Object.entries(actions)) {\n const inputSchema = normalizeToolInputSchema(entry.tool.parameters);\n if (!inputSchema) {\n console.warn(\n `[agent] Skipping tool \"${name}\" because its input schema is not an object.`,\n );\n continue;\n }\n tools.push({\n name,\n description: entry.tool.description,\n inputSchema,\n });\n }\n return tools;\n}\n\nfunction normalizeToolInputSchema(\n schema: ActionTool[\"parameters\"] | undefined,\n): EngineTool[\"inputSchema\"] | null {\n if (!schema) return { type: \"object\", properties: {} };\n if (schema.type !== \"object\") return null;\n return {\n ...schema,\n type: \"object\",\n properties:\n schema.properties && typeof schema.properties === \"object\"\n ? schema.properties\n : {},\n required: Array.isArray(schema.required) ? schema.required : [],\n };\n}\n\nfunction stringifyToolInput(input: unknown): string {\n try {\n const str = JSON.stringify(input);\n if (!str) return String(input);\n return str.length > 500 ? `${str.slice(0, 500)}…` : str;\n } catch {\n return String(input);\n }\n}\n\nfunction stableStringify(value: unknown): string {\n if (value === null || typeof value !== \"object\") {\n return JSON.stringify(value);\n }\n if (Array.isArray(value)) {\n return `[${value.map((item) => stableStringify(item)).join(\",\")}]`;\n }\n const obj = value as Record<string, unknown>;\n return `{${Object.keys(obj)\n .sort()\n .map((key) => `${JSON.stringify(key)}:${stableStringify(obj[key])}`)\n .join(\",\")}}`;\n}\n\nfunction toolCallCacheKey(toolName: string, input: unknown): string {\n return `${toolName}:${stableStringify(normalizeToolCallInputForHistory(input))}`;\n}\n\nfunction normalizeToolCallInputForHistory(\n input: unknown,\n): Record<string, unknown> {\n if (input && typeof input === \"object\" && !Array.isArray(input)) {\n return input as Record<string, unknown>;\n }\n return { rawInput: input };\n}\n\nfunction toolInputSchemaErrorResult(\n toolName: string,\n input: unknown,\n error: string,\n): string {\n return (\n `Invalid action parameters for ${toolName}: ${error}. ` +\n `Received: ${stringifyToolInput(input)}. ` +\n \"The tool was not executed; retry with arguments that match the tool schema.\"\n );\n}\n\n/**\n * The core agent loop — calls the engine iteratively until no more tool calls.\n * Decoupled from HTTP transport so it can run in the background.\n * Returns accumulated token usage for cost tracking.\n */\nexport async function runAgentLoop(opts: {\n engine: AgentEngine;\n model: string;\n systemPrompt: string;\n tools: EngineTool[];\n messages: EngineMessage[];\n actions: Record<string, ActionEntry>;\n send: (event: AgentChatEvent) => void;\n signal: AbortSignal;\n ownerEmail?: string | null;\n orgId?: string | null;\n reasoningEffort?: ReasoningEffort;\n providerOptions?: any;\n executionMode?: AgentExecutionMode;\n maxIterations?: number;\n finalResponseGuard?: AgentLoopFinalResponseGuard;\n}): Promise<AgentLoopUsage> {\n const {\n engine,\n model,\n systemPrompt,\n tools,\n messages,\n actions,\n send,\n signal,\n } = opts;\n\n const usage: AgentLoopUsage = {\n inputTokens: 0,\n outputTokens: 0,\n cacheReadTokens: 0,\n cacheWriteTokens: 0,\n model,\n };\n\n const maxIterations = normalizeMaxIterations(\n opts.maxIterations,\n getDefaultMaxIterations(),\n );\n const toolCallHistory: AgentLoopToolCallSummary[] = [];\n const toolResultHistory: AgentLoopToolResultSummary[] = [];\n const runCtx = getRequestRunContext();\n if (runCtx) {\n runCtx.toolCalls = toolCallHistory;\n runCtx.toolResults = toolResultHistory;\n }\n const readOnlyToolResultCache = seedReadOnlyToolResultsFromHistory(\n messages,\n actions,\n );\n const duplicateReadOnlyToolCalls = new Map<string, number>();\n const bufferTextUntilFinalGuard = Boolean(opts.finalResponseGuard);\n let finalGuardRetries = 0;\n let iterations = 0;\n while (true) {\n if (signal.aborted) break;\n if (++iterations > maxIterations) {\n appendAgentLoopContinuation(messages, \"loop_limit\");\n iterations = 1;\n }\n\n let assistantContent: EngineContentPart[] | undefined;\n let bufferedAssistantText = \"\";\n const toolCallErrors = new Map<\n string,\n { name: string; input: unknown; error: string }\n >();\n\n for (let retry = 0; ; retry++) {\n assistantContent = undefined;\n bufferedAssistantText = \"\";\n toolCallErrors.clear();\n try {\n const streamOpts = {\n model,\n systemPrompt,\n messages,\n tools,\n abortSignal: signal,\n reasoningEffort: opts.reasoningEffort,\n providerOptions: opts.providerOptions,\n };\n\n const eventStream = engine.stream(streamOpts);\n let thinkingBuffer = \"\";\n const toolInputNames = new Map<string, string>();\n let lastToolInputActivityAt = 0;\n const sendToolInputActivity = (\n toolName: string | undefined,\n force = false,\n ) => {\n const now = Date.now();\n if (\n !force &&\n now - lastToolInputActivityAt < TOOL_INPUT_ACTIVITY_INTERVAL_MS\n ) {\n return;\n }\n lastToolInputActivityAt = now;\n send({\n type: \"activity\",\n label: toolInputActivityLabel(toolName),\n ...(toolName ? { tool: toolName } : {}),\n });\n };\n\n for await (const event of eventStream) {\n if (event.type === \"text-delta\") {\n if (bufferTextUntilFinalGuard) {\n bufferedAssistantText += event.text;\n } else {\n send({ type: \"text\", text: event.text });\n }\n } else if (event.type === \"thinking-delta\") {\n thinkingBuffer += event.text;\n // Thinking deltas are not forwarded to the SSE client yet —\n // we accumulate them. In a future iteration, we can surface\n // them as a collapsible \"reasoning\" section in the UI.\n } else if (event.type === \"tool-input-start\") {\n if (event.id && event.name) {\n toolInputNames.set(event.id, event.name);\n }\n sendToolInputActivity(event.name, true);\n } else if (event.type === \"tool-input-delta\") {\n const toolName =\n event.name ??\n (event.id ? toolInputNames.get(event.id) : undefined);\n sendToolInputActivity(toolName);\n } else if (event.type === \"tool-call\") {\n // The authoritative tool-call blocks arrive in assistant-content.\n } else if (event.type === \"tool-call-error\") {\n toolCallErrors.set(event.id, {\n name: event.name,\n input: event.input,\n error: event.error,\n });\n } else if (event.type === \"assistant-content\") {\n assistantContent = event.parts;\n } else if (event.type === \"usage\") {\n usage.inputTokens += event.inputTokens;\n usage.outputTokens += event.outputTokens;\n usage.cacheReadTokens += event.cacheReadTokens ?? 0;\n usage.cacheWriteTokens += event.cacheWriteTokens ?? 0;\n } else if (event.type === \"stop\" && event.reason === \"error\") {\n throw new EngineError(event.error ?? \"Engine stream error\", {\n errorCode: event.errorCode,\n upgradeUrl: event.upgradeUrl,\n });\n }\n }\n\n break;\n } catch (err: unknown) {\n if (signal.aborted) throw err;\n if (isContextTooLongError(err)) {\n throw new EngineError(\n \"Conversation has grown too long. Start a new conversation to continue.\",\n { errorCode: \"context_length_exceeded\" },\n );\n }\n if (retry < maxRetriesForError(err) && isRetryableError(err)) {\n // Clear partial text from the failed attempt so the retry\n // doesn't produce garbled duplicate output. Keep the retry itself\n // silent so transient provider/backend failures do not leak into\n // the assistant's final answer.\n send({ type: \"clear\" });\n await retryDelay(retry, signal);\n continue;\n }\n throw err;\n }\n }\n\n if (!assistantContent && toolCallErrors.size > 0) {\n assistantContent = [];\n }\n\n if (!assistantContent) {\n // No content — done\n break;\n }\n\n if (toolCallErrors.size > 0) {\n const existingToolCallIds = new Set(\n assistantContent\n .filter(\n (part): part is import(\"./engine/types.js\").EngineToolCallPart =>\n part.type === \"tool-call\",\n )\n .map((part) => part.id),\n );\n for (const [id, info] of toolCallErrors) {\n if (!existingToolCallIds.has(id)) {\n assistantContent.push({\n type: \"tool-call\",\n id,\n name: info.name,\n input: info.input,\n });\n }\n }\n }\n\n const assistantContentForHistory = assistantContent.map((part) =>\n part.type === \"tool-call\"\n ? {\n ...part,\n input: normalizeToolCallInputForHistory(part.input),\n }\n : part,\n );\n\n messages.push({ role: \"assistant\", content: assistantContentForHistory });\n\n const toolCallParts = assistantContent.filter(\n (p): p is import(\"./engine/types.js\").EngineToolCallPart =>\n p.type === \"tool-call\",\n );\n const flushBufferedAssistantText = () => {\n if (!bufferTextUntilFinalGuard) return;\n const text =\n bufferedAssistantText || collectTextParts(assistantContentForHistory);\n if (text) send({ type: \"text\", text });\n };\n\n if (toolCallParts.length === 0) {\n const guard = opts.finalResponseGuard\n ? await opts.finalResponseGuard({\n messages,\n assistantContent: assistantContentForHistory,\n text: collectTextParts(assistantContentForHistory),\n toolCalls: [...toolCallHistory],\n toolResults: [...toolResultHistory],\n retryCount: finalGuardRetries,\n })\n : null;\n let guardEmittedFallback = false;\n if (guard) {\n const retryMessage =\n typeof guard === \"string\" ? guard : guard.retryMessage;\n const fallbackMessage =\n typeof guard === \"string\" ? guard : guard.fallbackMessage;\n if (finalGuardRetries < 1) {\n finalGuardRetries += 1;\n messages.push({\n role: \"user\",\n content: [{ type: \"text\", text: retryMessage }],\n });\n continue;\n }\n send({ type: \"text\", text: fallbackMessage ?? retryMessage });\n guardEmittedFallback = true;\n } else {\n flushBufferedAssistantText();\n }\n // Some providers (notably OpenAI Responses for gpt-5+) can stream a\n // successful turn that contains only reasoning content and zero output\n // text — typically when reasoning consumes the entire output-token\n // budget. Without a final text part the SSE stream still ends with a\n // clean `done`, which renders as a totally empty assistant bubble.\n // Surface a plain-language error so the user knows what happened.\n if (\n !guardEmittedFallback &&\n collectTextParts(assistantContentForHistory).trim().length === 0 &&\n bufferedAssistantText.trim().length === 0\n ) {\n send({\n type: \"text\",\n text: \"The model returned an empty response. This usually means reasoning used the full output-token budget. Try again, or pick a different model from the model menu.\",\n });\n }\n break;\n }\n\n flushBufferedAssistantText();\n\n let requestedActionStop: { message: string; errorCode?: string } | null =\n null;\n\n const runToolCall = async (\n toolCall: import(\"./engine/types.js\").EngineToolCallPart,\n ): Promise<EngineContentPart> => {\n toolCallHistory.push({\n name: toolCall.name,\n input: normalizeToolCallInputForHistory(toolCall.input),\n });\n const recordToolResult = (content: string, isError: boolean) => {\n toolResultHistory.push({\n name: toolCall.name,\n content,\n isError,\n });\n };\n const actionEntry = actions[toolCall.name];\n if (!actionEntry) {\n const result = `Error: Unknown tool \"${toolCall.name}\"`;\n send({\n type: \"tool_start\",\n tool: toolCall.name,\n input: toolCall.input as Record<string, string>,\n });\n send({ type: \"tool_done\", tool: toolCall.name, result });\n recordToolResult(result, true);\n return {\n type: \"tool-result\" as const,\n toolCallId: toolCall.id,\n toolName: toolCall.name,\n content: result,\n isError: true,\n };\n }\n\n const cacheKey =\n actionEntry.readOnly === true\n ? toolCallCacheKey(toolCall.name, toolCall.input)\n : null;\n if (cacheKey && readOnlyToolResultCache.has(cacheKey)) {\n const repeats = (duplicateReadOnlyToolCalls.get(cacheKey) ?? 0) + 1;\n duplicateReadOnlyToolCalls.set(cacheKey, repeats);\n const previousResult = readOnlyToolResultCache.get(cacheKey) ?? \"\";\n const result =\n `Skipped duplicate read-only call to ${toolCall.name}: identical input already ran in this turn. ` +\n `Use the previous result already in the conversation instead of calling this tool again.\\n\\n` +\n `Previous result:\\n${previousResult}`;\n send({\n type: \"tool_start\",\n tool: toolCall.name,\n input: toolCall.input as Record<string, string>,\n });\n send({ type: \"tool_done\", tool: toolCall.name, result });\n recordToolResult(result, false);\n if (repeats >= 3) {\n requestedActionStop ??= {\n message:\n \"I stopped because the agent kept asking for the same read-only context it already had. Please send the request again if you want me to retry from a fresh turn.\",\n errorCode: \"duplicate_read_only_tool\",\n };\n }\n return {\n type: \"tool-result\" as const,\n toolCallId: toolCall.id,\n toolName: toolCall.name,\n content: result,\n };\n }\n\n send({\n type: \"tool_start\",\n tool: toolCall.name,\n input: toolCall.input as Record<string, string>,\n });\n\n const toolCallSchemaError = toolCallErrors.get(toolCall.id);\n if (toolCallSchemaError) {\n const result = toolInputSchemaErrorResult(\n toolCall.name,\n toolCallSchemaError.input,\n toolCallSchemaError.error,\n );\n send({ type: \"tool_done\", tool: toolCall.name, result });\n recordToolResult(result, true);\n return {\n type: \"tool-result\" as const,\n toolCallId: toolCall.id,\n toolName: toolCall.name,\n content: result,\n isError: true,\n };\n }\n\n if (\n opts.executionMode === \"plan\" &&\n !isPlanModeToolCallAllowed(toolCall.name, toolCall.input, actionEntry)\n ) {\n const result = planModeBlockedMessage(toolCall.name);\n send({ type: \"tool_done\", tool: toolCall.name, result });\n recordToolResult(result, true);\n return {\n type: \"tool-result\" as const,\n toolCallId: toolCall.id,\n toolName: toolCall.name,\n content: result,\n isError: true,\n };\n }\n\n const MAX_TOOL_RESULT_CHARS = 50_000;\n const TOOL_TIMEOUT_MS = 60_000;\n let result: string;\n let isError = false;\n try {\n const timeoutSignal = AbortSignal.timeout(TOOL_TIMEOUT_MS);\n const raw = await Promise.race([\n actionEntry.run(toolCall.input as Record<string, string>, { send }),\n new Promise<never>((_, reject) => {\n timeoutSignal.addEventListener(\"abort\", () =>\n reject(new Error(\"Tool call timed out after 60 seconds\")),\n );\n }),\n ]);\n let resultStr =\n typeof raw === \"string\" ? raw : JSON.stringify(raw, null, 2);\n if (resultStr.length > MAX_TOOL_RESULT_CHARS) {\n const truncated = resultStr.slice(0, MAX_TOOL_RESULT_CHARS);\n resultStr = `${truncated}\\n\\n...[truncated — full result was ${resultStr.length.toLocaleString()} chars; only first ${MAX_TOOL_RESULT_CHARS.toLocaleString()} shown]`;\n }\n result = resultStr;\n } catch (err: any) {\n if (isAgentActionStopError(err)) {\n const message =\n err.message || `Stopped after ${toolCall.name} failed.`;\n result = err.toolResult || message;\n requestedActionStop ??= {\n message,\n ...(err.errorCode ? { errorCode: err.errorCode } : {}),\n };\n } else {\n result = `Error running ${toolCall.name}: ${err?.message ?? String(err)}`;\n }\n isError = true;\n }\n\n // Auto-refresh the UI after a successful mutating tool call. Any action\n // that isn't explicitly read-only is assumed to mutate. The client's\n // useDbSync listener sees a poll event with source:\"action\" and\n // invalidates [\"action\"] queries so list-* / get-* refetch. This makes\n // refresh after agent writes reliable without the model needing to\n // remember to call `refresh-screen` itself.\n if (!isError && actionEntry.readOnly !== true) {\n try {\n const { recordChange } = await import(\"../server/poll.js\");\n const owner = opts.ownerEmail ?? getRequestUserEmail() ?? undefined;\n const orgId = opts.orgId ?? getRequestOrgId() ?? undefined;\n recordChange({\n source: \"action\",\n type: \"change\",\n key: toolCall.name,\n ...(owner ? { owner } : {}),\n ...(orgId ? { orgId } : {}),\n });\n } catch {\n // poll module may be unavailable in non-server contexts — ignore\n }\n }\n\n send({ type: \"tool_done\", tool: toolCall.name, result });\n recordToolResult(result, isError);\n if (!isError) {\n if (cacheKey) {\n readOnlyToolResultCache.set(cacheKey, result);\n } else {\n readOnlyToolResultCache.clear();\n duplicateReadOnlyToolCalls.clear();\n }\n }\n return {\n type: \"tool-result\" as const,\n toolCallId: toolCall.id,\n toolName: toolCall.name,\n content: result,\n ...(isError ? { isError } : {}),\n };\n };\n\n type ParallelBatchKind = \"read\" | \"parallel-write\";\n const getParallelBatchKind = (\n toolCall: import(\"./engine/types.js\").EngineToolCallPart,\n ): ParallelBatchKind | null => {\n const entry = actions[toolCall.name];\n if (!entry || entry.readOnly === true) return \"read\";\n if (entry.parallelSafe === true) return \"parallel-write\";\n return null;\n };\n\n // Engines can emit several tool-call blocks in one turn. Read-only calls\n // are always parallel. Mutating calls remain serialized by default, but\n // consecutive actions that explicitly declare `parallelSafe` can run in a\n // write batch. Reads and writes are separate batches so the model's stated\n // order still controls what data a same-turn read can observe.\n const toolResultParts: EngineContentPart[] = [];\n let parallelBatch: import(\"./engine/types.js\").EngineToolCallPart[] = [];\n let parallelBatchKind: ParallelBatchKind | null = null;\n const flushParallelBatch = async () => {\n if (parallelBatch.length === 0) return;\n const batch = parallelBatch;\n parallelBatch = [];\n parallelBatchKind = null;\n toolResultParts.push(...(await Promise.all(batch.map(runToolCall))));\n };\n\n for (const toolCall of toolCallParts) {\n const batchKind = getParallelBatchKind(toolCall);\n if (batchKind) {\n if (parallelBatchKind && parallelBatchKind !== batchKind) {\n await flushParallelBatch();\n }\n parallelBatchKind = batchKind;\n parallelBatch.push(toolCall);\n } else {\n await flushParallelBatch();\n toolResultParts.push(await runToolCall(toolCall));\n }\n }\n await flushParallelBatch();\n\n messages.push({ role: \"user\", content: toolResultParts });\n if (requestedActionStop) {\n send({ type: \"text\", text: requestedActionStop.message });\n break;\n }\n }\n\n if (!signal.aborted) send({ type: \"done\" });\n return usage;\n}\n\nexport function createProductionAgentHandler(\n options: ProductionAgentOptions,\n): H3EventHandler {\n // Undefined = let each engine pick its own defaultModel at request time.\n const configuredModel = options.model;\n\n // Resolve actions — prefer `actions`, fall back to deprecated `scripts`\n const resolvedActions = options.actions ?? options.scripts ?? {};\n\n // Engine tools are derived from the action registry at request time so that\n // registries which mutate after handler creation (e.g. MCP servers added via\n // the settings UI) show up to the LLM without a process restart. MCP tools\n // are also scope-filtered per request — a user-scope server added by Alice\n // must not appear in Bob's tool list in a shared-process deployment.\n const getEngineTools = (\n actions: Record<string, ActionEntry> = resolvedActions,\n ) => {\n const filtered: Record<string, ActionEntry> = {};\n for (const [name, entry] of Object.entries(actions)) {\n if (name.startsWith(\"mcp__\") && !isMcpToolAllowedForRequest(name)) {\n continue;\n }\n filtered[name] = entry;\n }\n return actionsToEngineTools(filtered);\n };\n\n return defineEventHandler(async (event) => {\n if (getMethod(event) !== \"POST\") {\n setResponseStatus(event, 405);\n return { error: \"Method not allowed\" };\n }\n\n let body: AgentChatRequest;\n try {\n body = await readBody(event);\n } catch {\n setResponseStatus(event, 400);\n return { error: \"Invalid request body\" };\n }\n\n const {\n message,\n history = [],\n structuredHistory,\n references = [],\n threadId,\n attachments,\n displayMessage,\n internalContinuation,\n model: requestModel,\n engine: requestEngine,\n effort: requestEffort,\n browserTabId,\n scope,\n } = body;\n const requestBrowserTabId = normalizeBrowserTabId(browserTabId);\n const requestChatScope = normalizeChatScope(scope);\n const requestRunCtx = ensureRequestRunContext();\n if (requestRunCtx) {\n requestRunCtx.browserTabId = requestBrowserTabId;\n requestRunCtx.chatScope = requestChatScope;\n }\n const requestMode: AgentExecutionMode =\n body.mode === \"plan\" ? \"plan\" : \"act\";\n const hasMessageText =\n typeof message === \"string\" && message.trim().length > 0;\n const hasAttachments = Array.isArray(attachments) && attachments.length > 0;\n if (!hasMessageText && !hasAttachments) {\n setResponseStatus(event, 400);\n return { error: \"message is required\" };\n }\n let requestMessage = hasMessageText ? message : \"Use the attached context.\";\n let requestAttachments = Array.isArray(attachments) ? attachments : [];\n let requestDisplayMessage = displayMessage;\n\n // Resolve owner first so we can look up a per-owner API key. Users\n // who bring their own key use their key for this request (durable\n // across serverless cold starts via the settings table).\n const ownerEmail = await resolveAgentOwnerEmail(options, event);\n const preparedRequest = await options.prepareRequest?.({\n event,\n ownerEmail,\n message: requestMessage,\n displayMessage: requestDisplayMessage,\n attachments: requestAttachments,\n references,\n threadId,\n internalContinuation: Boolean(internalContinuation),\n mode: requestMode,\n });\n if (preparedRequest) {\n if (\n typeof preparedRequest.message === \"string\" &&\n preparedRequest.message.trim().length > 0\n ) {\n requestMessage = preparedRequest.message;\n }\n if (typeof preparedRequest.displayMessage === \"string\") {\n requestDisplayMessage = preparedRequest.displayMessage;\n }\n if (Array.isArray(preparedRequest.attachments)) {\n requestAttachments = preparedRequest.attachments;\n }\n }\n\n // Pre-upload chat image attachments through the framework file-upload\n // provider (Builder.io by default). The model still sees the base64\n // multimodal content for vision; we only ADD the hosted URL so the agent\n // can embed the image in slides / docs / outbound messages.\n //\n // When no provider is configured, leave attachments untouched and inject a\n // hint recommending Builder.io connect — the model can still see the\n // image, it just can't reference it as a URL until upload is set up.\n if (hasAttachments && requestAttachments.some((a) => a.type === \"image\")) {\n try {\n const preUpload = await preUploadImageAttachments({\n attachments: requestAttachments,\n ownerEmail,\n });\n if (preUpload.injectedText) {\n requestMessage = requestMessage\n ? `${requestMessage}\\n\\n${preUpload.injectedText}`\n : preUpload.injectedText;\n }\n } catch (err) {\n console.warn(\n \"[agent-native] preUploadImageAttachments failed:\",\n err instanceof Error ? err.message : String(err),\n );\n }\n }\n\n // When a per-request engine override is specified, resolve the API key\n // for that provider instead of the global active engine's provider.\n let userApiKey: string | undefined;\n if (requestEngine) {\n const provider = engineToProvider(requestEngine);\n userApiKey = await getOwnerApiKey(provider, ownerEmail);\n if (!userApiKey && !shouldBlockDeployCredentialFallback()) {\n // Single-tenant only: env fallback for the requested provider. Shared\n // hosted deploys never silently substitute the deploy-level key for\n // an authenticated user (see getOwnerActiveApiKey for the full\n // rationale).\n const envVar = PROVIDER_TO_ENV[provider];\n userApiKey = envVar ? readDeployCredentialEnv(envVar) : undefined;\n }\n } else {\n userApiKey = await getOwnerActiveApiKey(ownerEmail);\n }\n\n // `options.apiKey` is the value the template constructed the plugin with\n // (e.g. wired from a deployment env var). On a shared hosted deploy this\n // is the same cross-tenant hazard as any deploy-level provider key:\n // accepting it as the final fallback would silently bill every key-less\n // user to the deployment's account. Honour it only when the generic\n // deploy fallback policy allows it.\n const effectiveApiKey = shouldBlockDeployCredentialFallback()\n ? userApiKey\n : (userApiKey ??\n options.apiKey ??\n readDeployCredentialEnv(\"ANTHROPIC_API_KEY\"));\n\n // Resolve engine — per-request engine override takes priority\n let engine: AgentEngine;\n try {\n engine = await resolveEngine({\n engineOption: requestEngine ?? options.engine,\n apiKey: effectiveApiKey,\n model: configuredModel,\n });\n } catch {\n engine = await resolveEngine({\n apiKey: effectiveApiKey,\n });\n }\n\n // Honor the model the user picked in the settings UI (written via\n // `manage-agent-engine` action=\"set\"), but only when the caller hasn't overridden it for\n // this request or at plugin construction time. Read per-request so a\n // dropdown change in the UI takes effect without a server restart. Skip\n // the DB read entirely when a higher-precedence value is set.\n const model =\n requestModel ??\n configuredModel ??\n (await getStoredModelForEngine(engine)) ??\n engine.defaultModel;\n const reasoningEffort = normalizeReasoningEffortForModel(\n model,\n isReasoningEffort(requestEffort)\n ? requestEffort\n : options.reasoningEffort,\n );\n\n options.onEngineResolved?.(engine, model);\n\n // One-line per-turn resolution log so it's obvious in dev which engine\n // is actually handling the request. `requestEngine` is what the client\n // sent from the model picker; `engine.name` is what resolveEngine picked.\n // Divergence between them is the usual cause of \"status says builder but\n // no [builder-engine] log lines appear\" confusion.\n console.log(\n `[agent-chat] resolved engine=${engine.name} model=${model} requestEngine=${requestEngine ?? \"(none)\"}`,\n );\n\n // Check for API key before starting a run (only for anthropic engine)\n if (engine.name === \"anthropic\" && !effectiveApiKey) {\n setResponseHeader(event, \"Content-Type\", \"text/event-stream\");\n setResponseHeader(event, \"Cache-Control\", \"no-cache\");\n setResponseHeader(event, \"Connection\", \"keep-alive\");\n const encoder = new TextEncoder();\n return new ReadableStream({\n start(controller) {\n controller.enqueue(\n encoder.encode(\n `data: ${JSON.stringify({ type: \"missing_api_key\" })}\\n\\n`,\n ),\n );\n controller.close();\n },\n });\n }\n\n // Run all independent pre-send steps in parallel. Each of these hits\n // the DB or invokes an action; running them sequentially was the\n // single biggest contributor to pre-LLM latency.\n const enrichedMessage = enrichMessage(requestMessage, references);\n const loopSettingsPromise = readAgentLoopSettings({\n userEmail: ownerEmail ?? getRequestUserEmail() ?? null,\n orgId: getRequestOrgId() ?? null,\n }).catch(() => readAgentLoopSettings({}));\n\n let systemPromptError: any = null;\n const systemPromptPromise = (async (): Promise<string> => {\n try {\n return typeof options.systemPrompt === \"function\"\n ? await options.systemPrompt(event)\n : options.systemPrompt;\n } catch (error) {\n systemPromptError = error;\n return \"\";\n }\n })();\n\n const screenContextPromise = (async (): Promise<string> => {\n try {\n const viewScreenAction = resolvedActions[\"view-screen\"];\n if (viewScreenAction) {\n const result = await viewScreenAction.run({});\n if (result && result !== \"(no output)\") {\n const screenText =\n typeof result === \"string\"\n ? result\n : JSON.stringify(result, null, 2);\n return `\\n\\n<current-screen>\\n${screenText}\\n</current-screen>`;\n }\n } else {\n const navigation = await readAppStateForBrowserTab(\n \"navigation\",\n requestBrowserTabId,\n );\n if (navigation) {\n return `\\n\\n<current-screen>\\n${JSON.stringify(navigation, null, 2)}\\n</current-screen>`;\n }\n }\n } catch {\n // DB not ready or no navigation state — skip silently\n }\n return \"\";\n })();\n\n const urlContextPromise = (async (): Promise<string> => {\n try {\n const url = (await readAppStateForBrowserTab(\n \"__url__\",\n requestBrowserTabId,\n )) as {\n pathname?: string;\n search?: string;\n hash?: string;\n searchParams?: Record<string, string>;\n } | null;\n if (url && (url.pathname || url.search || url.hash)) {\n const lines: string[] = [];\n if (url.pathname) lines.push(`pathname: ${url.pathname}`);\n if (url.search) lines.push(`search: ${url.search}`);\n if (url.hash) lines.push(`hash: ${url.hash}`);\n if (url.searchParams && Object.keys(url.searchParams).length > 0) {\n lines.push(\"searchParams:\");\n for (const [k, v] of Object.entries(url.searchParams)) {\n lines.push(` ${k}: ${v}`);\n }\n }\n return `\\n\\n<current-url>\\n${lines.join(\"\\n\")}\\n</current-url>`;\n }\n } catch {\n // DB not ready — skip silently\n }\n return \"\";\n })();\n\n // Selection context: written by the client when the user presses Cmd+I\n // with text selected on the page. Treat anything older than 5 minutes\n // as stale and ignore it.\n const SELECTION_TTL_MS = 5 * 60 * 1000;\n const selectionContextPromise = (async (): Promise<string> => {\n try {\n const sel = (await readAppState(\"pending-selection-context\")) as {\n text?: string;\n capturedAt?: number;\n } | null;\n if (!sel?.text) return \"\";\n const capturedAt =\n typeof sel.capturedAt === \"number\" ? sel.capturedAt : 0;\n if (Date.now() - capturedAt > SELECTION_TTL_MS) return \"\";\n return (\n `\\n\\nThe user has selected the following text and pressed Cmd+I to focus the agent. ` +\n `Treat this as the immediate context to act on:\\n` +\n `<selection>\\n${sel.text}\\n</selection>`\n );\n } catch {\n // DB not ready — skip silently\n }\n return \"\";\n })();\n\n // On the first message of a conversation, inject workspace inventory\n // so the agent knows what files, skills, jobs, and custom agents exist.\n // Templates can opt out via `skipFilesContext: true` when the inventory\n // is unrelated to the app's job (e.g. a voice-first macro tracker).\n const filesContextPromise = (async (): Promise<string> => {\n let filesContext = \"\";\n if (options.skipFilesContext) return filesContext;\n if (history.length === 0) {\n try {\n const { resourceListAccessible, SHARED_OWNER, resourceGet } =\n await import(\"../resources/store.js\");\n const {\n getResourceKind,\n parseCustomAgentProfile,\n parseRemoteAgentManifest,\n parseSkillMetadata,\n } = await import(\"../resources/metadata.js\");\n const ownerEmail = getRequestUserEmail();\n if (!ownerEmail) throw new Error(\"no authenticated user\");\n const allResources = await resourceListAccessible(ownerEmail);\n\n if (allResources.length > 0) {\n const fileLines: string[] = [];\n const skillLines: string[] = [];\n const agentLines: string[] = [];\n const jobLines: string[] = [];\n for (const r of allResources) {\n const scope = r.owner === SHARED_OWNER ? \"shared\" : \"personal\";\n const kind = getResourceKind(r.path);\n if (kind === \"file\") {\n fileLines.push(` ${r.path} (${scope})`);\n continue;\n }\n\n if (kind === \"job\") {\n jobLines.push(` ${r.path} (${scope})`);\n continue;\n }\n\n if (\n kind === \"skill\" ||\n kind === \"agent\" ||\n kind === \"remote-agent\"\n ) {\n const full = await resourceGet(r.id);\n if (!full) continue;\n if (kind === \"skill\") {\n const skill = parseSkillMetadata(full.content, r.path);\n skillLines.push(\n ` ${skill?.name || r.path} — ${skill?.description || r.path} (${scope}, ${r.path})`,\n );\n } else if (kind === \"agent\") {\n const agent = parseCustomAgentProfile(full.content, r.path);\n agentLines.push(\n ` ${agent?.name || r.path} — ${agent?.description || \"Custom workspace agent\"} (${scope}, ${r.path}${agent?.model ? `, model: ${agent.model}` : \"\"})`,\n );\n } else {\n const agent = parseRemoteAgentManifest(full.content, r.path);\n agentLines.push(\n ` ${agent?.name || r.path} — ${agent?.description || \"Connected A2A agent\"} (${scope}, remote via ${r.path})`,\n );\n }\n }\n }\n const blocks: string[] = [];\n if (fileLines.length > 0) {\n blocks.push(\n `<available-files>\\nFiles in the workspace:\\n${fileLines.join(\"\\n\")}\\n\\nTo read a file's contents, use the resource-read action with the file path.\\n</available-files>`,\n );\n }\n if (skillLines.length > 0) {\n blocks.push(\n `<available-skills>\\nSkills in the workspace:\\n${skillLines.join(\"\\n\")}\\n</available-skills>`,\n );\n }\n if (agentLines.length > 0) {\n blocks.push(\n `<available-agents>\\nCustom and connected agents in the workspace:\\n${agentLines.join(\"\\n\")}\\n\\nCustom agents under agents/*.md can be mentioned or used via agent-teams (action: \"spawn\") with the agent parameter.\\n</available-agents>`,\n );\n }\n if (jobLines.length > 0) {\n blocks.push(\n `<available-jobs>\\nScheduled tasks in the workspace:\\n${jobLines.join(\"\\n\")}\\n</available-jobs>`,\n );\n }\n filesContext =\n blocks.length > 0 ? `\\n\\n${blocks.join(\"\\n\\n\")}` : \"\";\n }\n } catch {\n // Resources not available — skip silently\n }\n }\n return filesContext;\n })();\n\n const [\n systemPrompt,\n screenBlock,\n urlBlock,\n selectionBlock,\n filesContext,\n loopSettings,\n ] = await Promise.all([\n systemPromptPromise,\n screenContextPromise,\n urlContextPromise,\n selectionContextPromise,\n filesContextPromise,\n loopSettingsPromise,\n ]);\n\n if (systemPromptError) {\n setResponseHeader(event, \"Content-Type\", \"text/event-stream\");\n setResponseHeader(event, \"Cache-Control\", \"no-cache\");\n const encoder = new TextEncoder();\n const err = systemPromptError;\n return new ReadableStream({\n start(controller) {\n controller.enqueue(\n encoder.encode(\n `data: ${JSON.stringify({ type: \"error\", error: `Failed to load system prompt: ${err?.message ?? String(err)}` })}\\n\\n`,\n ),\n );\n controller.close();\n },\n });\n }\n const screenContext = screenBlock + urlBlock + selectionBlock;\n const requestActions =\n requestMode === \"plan\"\n ? createPlanModeActionRegistry(resolvedActions)\n : resolvedActions;\n const requestTools = getEngineTools(requestActions);\n const requestSystemPrompt =\n requestMode === \"plan\"\n ? `${systemPrompt}\\n\\n${PLAN_MODE_SYSTEM_PROMPT}`\n : systemPrompt;\n\n // Pre-compute agent references for A2A resolution inside the run\n const agentRefs = references.filter((r) => r.type === \"agent\");\n const customAgentRefs = references.filter((r) => r.type === \"custom-agent\");\n const planModeAgentNote =\n requestMode === \"plan\" && agentRefs.length > 0\n ? \"\\n\\n<plan-mode-note>Connected external agent mentions were not called because Plan mode is read-only. Mention that they can be called after the user switches to Act mode if the plan needs them.</plan-mode-note>\"\n : \"\";\n\n const userContent = buildUserContentWithAttachments({\n text: enrichedMessage + screenContext + filesContext + planModeAgentNote,\n attachments: requestAttachments,\n });\n\n const historyMessages =\n structuredHistoryToEngineMessages(structuredHistory) ??\n history\n .filter((m) => m.content.trim())\n .map(\n (m): EngineMessage => ({\n role: m.role as \"user\" | \"assistant\",\n content: [{ type: \"text\" as const, text: m.content }],\n }),\n );\n\n const messages: EngineMessage[] = [\n ...historyMessages,\n { role: \"user\" as const, content: userContent },\n ];\n\n // If there's already an active run for this thread, reject with 409 so\n // the client can queue or wait rather than silently aborting the existing run.\n if (threadId) {\n const existingRun = await getActiveRunForThreadAsync(threadId);\n if (existingRun?.status === \"running\") {\n setResponseStatus(event, 409);\n return {\n error: \"Run already in progress for this thread\",\n activeRunId: existingRun.runId,\n };\n }\n }\n\n // Start agent loop in background via run-manager\n const runId = generateRunId();\n if (options.onRunPrepared && !internalContinuation) {\n const messageToPersist =\n typeof requestDisplayMessage === \"string\" &&\n requestDisplayMessage.trim().length > 0\n ? requestDisplayMessage\n : requestMessage;\n await options.onRunPrepared({\n runId,\n threadId,\n message: messageToPersist,\n attachments: requestAttachments,\n });\n }\n startRun(\n runId,\n threadId ?? runId,\n async (send, signal) => {\n // Notify listeners that a run has started (used by agent teams)\n if (options.onRunStart) {\n await options.onRunStart(send, threadId ?? runId);\n }\n\n // Resolve custom workspace agent mentions first.\n if (customAgentRefs.length > 0) {\n const ownerEmail = getRequestUserEmail();\n if (!ownerEmail) throw new Error(\"no authenticated user\");\n const { findAccessibleCustomAgent } =\n await import(\"../resources/agents.js\");\n const customResults = await Promise.allSettled(\n customAgentRefs.map(async (ref) => {\n send({\n type: \"agent_call\",\n agent: ref.name,\n status: \"start\",\n });\n try {\n const profile = await findAccessibleCustomAgent(\n ownerEmail,\n ref.refId || ref.path || ref.name,\n );\n if (!profile) {\n throw new Error(\"Profile not found\");\n }\n\n const profilePrompt =\n `${requestSystemPrompt}\\n\\n<custom-agent-profile name=\"${profile.name}\" path=\"${profile.path}\">\\n` +\n (profile.description ? `${profile.description}\\n\\n` : \"\") +\n `${profile.instructions}\\n</custom-agent-profile>`;\n\n let responseText = \"\";\n const subUsage = await runAgentLoop({\n engine,\n model: profile.model ?? model,\n systemPrompt: profilePrompt,\n tools: requestTools,\n messages: [\n {\n role: \"user\",\n content: [\n { type: \"text\", text: enrichedMessage + screenContext },\n ],\n },\n ],\n actions: requestActions,\n send: (event) => {\n if (event.type === \"text\") {\n responseText += event.text;\n send({\n type: \"agent_call_text\",\n agent: ref.name,\n text: event.text,\n });\n }\n },\n signal,\n reasoningEffort,\n providerOptions: options.providerOptions,\n executionMode: requestMode,\n maxIterations: loopSettings.maxIterations,\n });\n\n // Attribute custom-agent sub-calls under their own label\n // so the Usage panel separates them from the main chat.\n try {\n const ownerEmail = options.resolveOwnerEmail\n ? await options.resolveOwnerEmail(event)\n : getRequestUserEmail();\n if (!ownerEmail) {\n // Skip usage recording for unauthenticated runs.\n return;\n }\n const { recordUsage } = await import(\"../usage/store.js\");\n await recordUsage({\n ownerEmail,\n inputTokens: subUsage.inputTokens,\n outputTokens: subUsage.outputTokens,\n cacheReadTokens: subUsage.cacheReadTokens,\n cacheWriteTokens: subUsage.cacheWriteTokens,\n model: subUsage.model,\n label: `custom-agent:${ref.name}`,\n });\n } catch {}\n\n send({\n type: \"agent_call\",\n agent: ref.name,\n status: \"done\",\n });\n return `<agent-response name=\"${ref.name}\" id=\"${ref.refId}\" type=\"custom-agent\">\\n${responseText}\\n</agent-response>`;\n } catch (err: any) {\n send({\n type: \"agent_call\",\n agent: ref.name,\n status: \"error\",\n });\n const message =\n userFacingLlmCredentialError(err, {\n agentName: ref.name,\n }) ?? `Failed to run ${ref.name}: ${err?.message}`;\n return `<agent-response name=\"${ref.name}\" id=\"${ref.refId}\" type=\"custom-agent\" error=\"true\">\\n${message}\\n</agent-response>`;\n }\n }),\n );\n\n const customResponses = customResults\n .filter(\n (result): result is PromiseFulfilledResult<string> =>\n result.status === \"fulfilled\",\n )\n .map((result) => result.value);\n\n if (customResponses.length > 0) {\n const agentContext =\n \"Responses from custom workspace agents:\\n\\n\" +\n customResponses.join(\"\\n\\n\");\n const lastMsg = messages[messages.length - 1];\n if (lastMsg?.role === \"user\" && Array.isArray(lastMsg.content)) {\n const textPart = lastMsg.content.find(\n (p): p is import(\"./engine/types.js\").EngineTextPart =>\n p.type === \"text\",\n );\n if (textPart) {\n textPart.text = agentContext + \"\\n\\n\" + textPart.text;\n }\n }\n }\n }\n\n // Resolve connected agent @-mentions via A2A calls.\n if (agentRefs.length > 0 && requestMode !== \"plan\") {\n const [{ A2AClient, callAgent }, { resolveA2ACallerAuth }] =\n await Promise.all([\n import(\"../a2a/client.js\"),\n import(\"../a2a/caller-auth.js\"),\n ]);\n const results = await Promise.allSettled(\n agentRefs.map(async (ref) => {\n send({\n type: \"agent_call\",\n agent: ref.name,\n status: \"start\",\n });\n try {\n const callerAuth = await resolveA2ACallerAuth({\n includeGoogleToken: true,\n });\n const a2aClient = new A2AClient(ref.path, callerAuth.apiKey);\n const a2aMetadata = callerAuth.metadata;\n\n let responseText = \"\";\n let lastSentLength = 0;\n\n try {\n for await (const task of a2aClient.stream(\n {\n role: \"user\",\n parts: [\n {\n type: \"text\",\n text: enrichedMessage + screenContext,\n },\n ],\n },\n Object.keys(a2aMetadata).length > 0\n ? { metadata: a2aMetadata }\n : undefined,\n )) {\n const newText =\n task.status?.message?.parts\n ?.filter(\n (p): p is { type: \"text\"; text: string } =>\n p.type === \"text\",\n )\n ?.map((p) => p.text)\n ?.join(\"\") ?? \"\";\n\n if (newText.length > lastSentLength) {\n send({\n type: \"agent_call_text\",\n agent: ref.name,\n text: newText.slice(lastSentLength),\n });\n lastSentLength = newText.length;\n }\n responseText = newText;\n }\n } catch {\n if (!responseText) {\n responseText = await callAgent(\n ref.path,\n enrichedMessage + screenContext,\n {\n apiKey: callerAuth.apiKey,\n userEmail: callerAuth.userEmail,\n orgDomain: callerAuth.orgDomain,\n orgSecret: callerAuth.orgSecret,\n },\n );\n }\n }\n responseText =\n userFacingLlmCredentialError(responseText, {\n agentName: ref.name,\n }) ?? responseText;\n\n send({\n type: \"agent_call\",\n agent: ref.name,\n status: \"done\",\n });\n return `<agent-response name=\"${ref.name}\" id=\"${ref.refId}\">\\n${responseText}\\n</agent-response>`;\n } catch (err: any) {\n send({\n type: \"agent_call\",\n agent: ref.name,\n status: \"error\",\n });\n const message =\n userFacingLlmCredentialError(err, {\n agentName: ref.name,\n }) ?? `Failed to reach ${ref.name}: ${err?.message}`;\n return `<agent-response name=\"${ref.name}\" id=\"${ref.refId}\" error=\"true\">\\n${message}\\n</agent-response>`;\n }\n }),\n );\n\n const agentResponses_local: string[] = [];\n for (const result of results) {\n if (result.status === \"fulfilled\") {\n agentResponses_local.push(result.value);\n }\n }\n\n if (agentResponses_local.length > 0) {\n const agentContext =\n \"Responses from other agents:\\n\\n\" +\n agentResponses_local.join(\"\\n\\n\");\n const lastMsg = messages[messages.length - 1];\n if (lastMsg?.role === \"user\" && Array.isArray(lastMsg.content)) {\n const textPart = lastMsg.content.find(\n (p): p is import(\"./engine/types.js\").EngineTextPart =>\n p.type === \"text\",\n );\n if (textPart) {\n textPart.text = agentContext + \"\\n\\n\" + textPart.text;\n }\n }\n }\n }\n\n // Apply experiment variant overrides (A/B testing)\n let effectiveModel = model;\n try {\n const { resolveActiveExperimentConfig } =\n await import(\"../observability/experiments.js\");\n if (!ownerEmail) {\n // Without an authenticated owner we can't resolve user-scoped experiments.\n throw new Error(\"no authenticated user\");\n }\n const expConfig = await resolveActiveExperimentConfig(ownerEmail);\n if (expConfig) {\n if (typeof expConfig.configs.model === \"string\") {\n effectiveModel = expConfig.configs.model;\n }\n }\n } catch {\n // Experiments module unavailable — use default model\n }\n\n const agentLoopOpts = {\n engine,\n model: effectiveModel,\n systemPrompt: requestSystemPrompt,\n tools: requestTools,\n messages,\n actions: requestActions,\n send,\n signal,\n ownerEmail,\n orgId: getRequestOrgId() ?? null,\n reasoningEffort,\n providerOptions: options.providerOptions,\n executionMode: requestMode,\n maxIterations: loopSettings.maxIterations,\n finalResponseGuard: options.finalResponseGuard,\n };\n\n let loopUsage: AgentLoopUsage;\n let instrumented = false;\n try {\n const { getObservabilityConfig, instrumentAgentLoop } =\n await import(\"../observability/traces.js\");\n const obsConfig = await getObservabilityConfig();\n if (obsConfig.enabled) {\n instrumented = true;\n loopUsage = await instrumentAgentLoop({\n runAgentLoop,\n loopOpts: agentLoopOpts,\n runId,\n threadId: threadId ?? null,\n userId: ownerEmail,\n config: obsConfig,\n });\n }\n } catch (err) {\n // If instrumentation setup failed, fall through to uninstrumented.\n // If the agent loop itself failed (via instrumentAgentLoop), re-throw.\n if (instrumented) throw err;\n }\n if (!instrumented) {\n loopUsage = await runAgentLoop(agentLoopOpts);\n }\n\n // Record token usage for cost monitoring so the Usage panel in\n // settings works in every mode, including local dev.\n try {\n const ownerEmail = options.resolveOwnerEmail\n ? await options.resolveOwnerEmail(event)\n : getRequestUserEmail();\n if (\n ownerEmail &&\n (loopUsage.inputTokens > 0 ||\n loopUsage.outputTokens > 0 ||\n loopUsage.cacheReadTokens > 0 ||\n loopUsage.cacheWriteTokens > 0)\n ) {\n const { recordUsage } = await import(\"../usage/store.js\");\n await recordUsage({\n ownerEmail,\n inputTokens: loopUsage.inputTokens,\n outputTokens: loopUsage.outputTokens,\n cacheReadTokens: loopUsage.cacheReadTokens,\n cacheWriteTokens: loopUsage.cacheWriteTokens,\n model: loopUsage.model,\n label: body.usageLabel || \"chat\",\n });\n }\n } catch {\n // Usage recording failed — don't break the run\n }\n },\n options.onRunComplete\n ? (run) => options.onRunComplete!(run, threadId)\n : undefined,\n {\n softTimeoutMs: options.runSoftTimeoutMs,\n useHostedSoftTimeoutDefault: true,\n },\n );\n\n // Subscribe to the run and stream events to the client\n const stream = subscribeToRun(runId, 0);\n if (!stream) {\n setResponseStatus(event, 500);\n return { error: \"Failed to start agent run\" };\n }\n\n setResponseHeader(event, \"Content-Type\", \"text/event-stream\");\n setResponseHeader(event, \"Cache-Control\", \"no-cache\");\n setResponseHeader(event, \"Connection\", \"keep-alive\");\n setResponseHeader(event, \"X-Run-Id\", runId);\n\n return stream;\n });\n}\n\nexport {\n getActiveRunForThread,\n getActiveRunForThreadAsync,\n getRun,\n abortRun,\n subscribeToRun,\n};\n"]}
1
+ {"version":3,"file":"production-agent.js","sourceRoot":"","sources":["../../src/agent/production-agent.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n defineEventHandler,\n setResponseHeader,\n setResponseStatus,\n getMethod,\n} from \"h3\";\nimport {\n isDeployCredentialFallbackAllowed,\n readDeployCredentialEnv,\n} from \"../server/credential-provider.js\";\nimport type { EventHandler as H3EventHandler } from \"h3\";\nimport type {\n ActionTool,\n AgentChatAttachment,\n AgentChatRequest,\n AgentChatEvent,\n AgentChatReference,\n AgentChatStructuredMessage,\n} from \"./types.js\";\nimport type {\n AgentEngine,\n EngineTool,\n EngineMessage,\n EngineContentPart,\n} from \"./engine/types.js\";\nimport { EngineError } from \"./engine/types.js\";\nimport {\n resolveEngine,\n registerBuiltinEngines,\n getStoredModelForEngine,\n} from \"./engine/index.js\";\nimport { userFacingLlmCredentialError } from \"./engine/credential-errors.js\";\nimport { PROVIDER_TO_ENV } from \"./engine/provider-env-vars.js\";\nimport { readAppState } from \"../application-state/script-helpers.js\";\nimport {\n startRun,\n subscribeToRun,\n getActiveRunForThread,\n getActiveRunForThreadAsync,\n getRun,\n abortRun,\n} from \"./run-manager.js\";\nimport type { ActiveRun } from \"./run-manager.js\";\nimport { readBody } from \"../server/h3-helpers.js\";\nimport {\n getRequestRunContext,\n ensureRequestRunContext,\n getRequestOrgId,\n getRequestUserEmail,\n} from \"../server/request-context.js\";\nimport { isMcpToolAllowedForRequest } from \"../mcp-client/visibility.js\";\nimport {\n createToolSearchEntry,\n TOOL_SEARCH_ACTION_NAME,\n} from \"./tool-search.js\";\nimport {\n getDefaultMaxIterations,\n normalizeMaxIterations,\n readAgentLoopSettings,\n} from \"./loop-settings.js\";\nimport {\n isReasoningEffort,\n normalizeReasoningEffortForModel,\n type ReasoningEffort,\n} from \"../shared/reasoning-effort.js\";\nimport { isAgentActionStopError } from \"../action.js\";\nimport { preUploadImageAttachments } from \"../file-upload/pre-upload-attachments.js\";\n\n// Register built-in engines on first import\nregisterBuiltinEngines();\n\nexport { PROVIDER_TO_ENV };\n\nconst SAFE_BROWSER_TAB_ID_RE = /^[A-Za-z0-9_-]{1,96}$/;\n\nfunction normalizeBrowserTabId(value: unknown): string | undefined {\n if (typeof value !== \"string\") return undefined;\n const trimmed = value.trim();\n return SAFE_BROWSER_TAB_ID_RE.test(trimmed) ? trimmed : undefined;\n}\n\nfunction normalizeChatScope(\n value: unknown,\n): { type: string; id: string; label?: string } | null | undefined {\n if (value == null) return null;\n if (typeof value !== \"object\") return undefined;\n const record = value as Record<string, unknown>;\n const type = typeof record.type === \"string\" ? record.type.trim() : \"\";\n const id = typeof record.id === \"string\" ? record.id.trim() : \"\";\n if (!type || !id || type.length > 64 || id.length > 256) {\n return undefined;\n }\n const label =\n typeof record.label === \"string\" && record.label.trim().length > 0\n ? record.label.trim().slice(0, 256)\n : undefined;\n return { type, id, ...(label ? { label } : {}) };\n}\n\nfunction appStateKeyForBrowserTab(key: string, browserTabId?: string): string {\n return browserTabId ? `${key}:${browserTabId}` : key;\n}\n\nasync function readAppStateForBrowserTab<T>(\n key: string,\n browserTabId?: string,\n): Promise<T | null> {\n const tabKey = appStateKeyForBrowserTab(key, browserTabId);\n if (tabKey !== key) {\n const scoped = (await readAppState(tabKey).catch(() => null)) as T | null;\n if (scoped) return scoped;\n }\n return (await readAppState(key)) as T | null;\n}\n\n/**\n * Look up a user's persisted API key for the given provider. Returns\n * `undefined` for unauthenticated callers.\n *\n * Read order:\n * 1. `app_secrets` — encrypted user override, then active org/workspace.\n * 2. Legacy `user-api-key:<provider>:<email>` settings row — pre-migration\n * data that hasn't been backfilled yet. Surfaced for compat only;\n * writes always go to app_secrets now.\n */\nexport async function getOwnerApiKey(\n provider: string,\n ownerEmail: string | null | undefined,\n): Promise<string | undefined> {\n if (!ownerEmail) return undefined;\n const secretKey =\n PROVIDER_TO_ENV[provider] ?? `${provider.toUpperCase()}_API_KEY`;\n try {\n const { readAppSecret } = await import(\"../secrets/storage.js\");\n const refs: Array<{\n scope: \"user\" | \"org\" | \"workspace\";\n scopeId: string;\n }> = [{ scope: \"user\", scopeId: ownerEmail }];\n const orgId = getRequestOrgId();\n if (orgId) {\n refs.push(\n { scope: \"org\", scopeId: orgId },\n { scope: \"workspace\", scopeId: orgId },\n );\n } else {\n refs.push({ scope: \"workspace\", scopeId: `solo:${ownerEmail}` });\n }\n for (const ref of refs) {\n const fromSecrets = await readAppSecret({\n key: secretKey,\n scope: ref.scope,\n scopeId: ref.scopeId,\n });\n if (fromSecrets?.value) return fromSecrets.value;\n }\n } catch {\n // app_secrets table not ready — fall through to legacy lookup.\n }\n try {\n const { getSetting } = await import(\"../settings/store.js\");\n const stored = await getSetting(`user-api-key:${provider}:${ownerEmail}`);\n const key =\n stored && typeof stored.key === \"string\" ? stored.key.trim() : \"\";\n if (key) return key;\n if (provider === \"anthropic\") {\n const legacy = await getSetting(`user-anthropic-api-key:${ownerEmail}`);\n const legacyKey =\n legacy && typeof legacy.key === \"string\" ? legacy.key.trim() : \"\";\n return legacyKey || undefined;\n }\n return undefined;\n } catch {\n return undefined;\n }\n}\n\n/**\n * Derive the provider name from the active engine setting.\n * \"ai-sdk:openai\" → \"openai\", \"anthropic\" → \"anthropic\"\n */\nexport function engineToProvider(engineName: string): string {\n return engineName.startsWith(\"ai-sdk:\") ? engineName.slice(7) : engineName;\n}\n\n/**\n * Returns true when this process should block generic deploy-level provider\n * credentials for signed-in chat requests.\n *\n * Self-hosted single-tenant deployments keep the env-var fallback so the\n * original BYO-server UX continues to work without a per-user key.\n */\nfunction shouldBlockDeployCredentialFallback(): boolean {\n return !isDeployCredentialFallbackAllowed();\n}\n\n/**\n * Resolve the active engine's provider and look up the user's API key for it.\n *\n * In shared hosted deploys we deliberately refuse the deploy-level fallback\n * for authenticated users. Without that gate any\n * signed-in user who hasn't configured their own provider key would silently\n * inherit the deployment's key (uncapped billing on the owner's account,\n * prompt logging tied to the deployment owner) — exactly the prior-incident\n * pattern we hit on 2026-04-29.\n *\n * Single-tenant (local-dev, self-hosted SQLite) keeps the env fallback.\n *\n * Callers in `agent-chat-plugin.ts`, `triggers/dispatcher.ts`,\n * `jobs/scheduler.ts`, and `integrations/plugin.ts` historically layer\n * another deployment-key fallback after this must keep the same gate.\n */\nexport async function getOwnerActiveApiKey(\n ownerEmail: string | null | undefined,\n): Promise<string | undefined> {\n try {\n const { getSetting } = await import(\"../settings/store.js\");\n const engineSetting = await getSetting(\"agent-engine\");\n const activeEngine =\n (engineSetting?.engine as string | undefined) ?? \"anthropic\";\n const provider = engineToProvider(activeEngine);\n const userKey = await getOwnerApiKey(provider, ownerEmail);\n if (userKey) return userKey;\n if (shouldBlockDeployCredentialFallback()) {\n // Shared hosted default: refuse the env fallback. A null user\n // (unauthenticated / background context with no owner) gets undefined\n // here too — there's no user to bill, and the call site must surface a\n // \"configure a key\" error to the requester rather than silently using\n // the deploy key.\n return undefined;\n }\n const envVar = PROVIDER_TO_ENV[provider];\n return envVar ? readDeployCredentialEnv(envVar) : undefined;\n } catch {\n return undefined;\n }\n}\n\n/** @deprecated Use getOwnerApiKey(\"anthropic\", ownerEmail) instead */\nexport async function getOwnerAnthropicApiKey(\n ownerEmail: string | null | undefined,\n): Promise<string | undefined> {\n return getOwnerApiKey(\"anthropic\", ownerEmail);\n}\n\n/** Context passed to action run() for emitting intermediate events */\nexport interface ActionRunContext {\n /** Emit an SSE event to the client (e.g., agent_call_text for streaming) */\n send: (event: AgentChatEvent) => void;\n}\n\nexport interface ActionEntry {\n tool: ActionTool;\n run: (\n args: Record<string, string>,\n context?: ActionRunContext,\n ) => Promise<any>;\n /** HTTP exposure config. `false` = agent-only. Omitted = auto-inferred from name. */\n http?: import(\"../action.js\").ActionHttpConfig | false;\n /** Explicit opt-in metadata for public agent protocols. Public routes never\n * imply public tool exposure; MCP/A2A/OpenAPI surfaces must filter for this. */\n publicAgent?: import(\"../action.js\").PublicAgentActionConfig;\n /** If true, completion does NOT trigger a screen-refresh poll event.\n * Set automatically by `defineAction` when `http.method === \"GET\"`. */\n readOnly?: boolean;\n /** If true, this action can run concurrently with other same-turn\n * read-only/parallel-safe tool calls. Only use for actions that handle\n * their own write ordering and idempotency. */\n parallelSafe?: boolean;\n /** Whether this action may be invoked from the tools-iframe bridge.\n * **Default-allow opt-out**: only an explicit `false` returns 403.\n * - `true` / `undefined` — allow.\n * - `false` — explicit deny; the tools bridge returns 403.\n * See `defineAction` (`packages/core/src/action.ts`) and audit H5 in\n * `security-audit/05-tools-sandbox.md`. */\n toolCallable?: boolean;\n}\n\n/** @deprecated Use `ActionEntry` instead */\nexport type ScriptEntry = ActionEntry;\n\nexport type AgentExecutionMode = \"act\" | \"plan\";\n\nexport const PLAN_MODE_SYSTEM_PROMPT = `## Plan Mode Active\n\nYou are in Plan mode. This turn is for research, clarification, and a proposed approach only.\n\nHard rules:\n- Use only read-only tools. Do not edit files, write resources, run shell commands, mutate SQL rows, navigate the UI, send notifications, create jobs, create tools, call external agents, or change external systems.\n- If a needed detail is unclear, ask a concise clarifying question before proposing a plan.\n- When ready, present a concrete plan with the files/tools you expect to touch, the intended changes, validation steps, and notable risks.\n- Do not treat approval as implicit while Plan mode is still active. Tell the user to switch to Act mode with the mode selector or /act before implementation.`;\n\nconst PLAN_MODE_BLOCKED_READONLY_TOOLS = new Set([\n \"refresh-screen\",\n \"set-search-params\",\n \"set-url-path\",\n]);\n\nconst PLAN_MODE_ALLOWED_ACTIONS: Record<string, readonly string[]> = {\n resources: [\"list\", \"read\"],\n \"chat-history\": [\"search\"],\n \"agent-teams\": [\"status\", \"read-result\", \"list\"],\n \"manage-jobs\": [\"list\"],\n \"manage-automations\": [\"list-events\", \"list\"],\n \"manage-notifications\": [\"list\"],\n \"manage-progress\": [\"list\"],\n \"manage-agent-engine\": [\"list\"],\n};\n\nconst PLAN_MODE_WEB_REQUEST_METHODS = new Set([\"GET\", \"HEAD\"]);\n\nfunction getToolAction(name: string, args: unknown): string {\n const raw =\n args && typeof args === \"object\" && \"action\" in args\n ? (args as Record<string, unknown>).action\n : undefined;\n if (raw == null && name === \"chat-history\") return \"search\";\n return String(raw ?? \"\").toLowerCase();\n}\n\nfunction getWebRequestMethod(args: unknown): string {\n const raw =\n args && typeof args === \"object\" && \"method\" in args\n ? (args as Record<string, unknown>).method\n : undefined;\n return String(raw ?? \"GET\").toUpperCase();\n}\n\nfunction restrictActionEnum(\n parameters: ActionTool[\"parameters\"] | undefined,\n allowedActions: readonly string[],\n): ActionTool[\"parameters\"] | undefined {\n if (!parameters) return parameters;\n const actionParam = parameters.properties.action;\n if (!actionParam) return parameters;\n return {\n ...parameters,\n properties: {\n ...parameters.properties,\n action: {\n ...actionParam,\n enum: [...allowedActions],\n },\n },\n };\n}\n\nfunction restrictWebRequestMethods(\n parameters: ActionTool[\"parameters\"] | undefined,\n): ActionTool[\"parameters\"] | undefined {\n if (!parameters) return parameters;\n const methodParam = parameters.properties.method;\n if (!methodParam) return parameters;\n return {\n ...parameters,\n properties: {\n ...parameters.properties,\n method: {\n ...methodParam,\n enum: [...PLAN_MODE_WEB_REQUEST_METHODS],\n },\n },\n };\n}\n\nfunction planModeBlockedMessage(toolName: string, reason?: string): string {\n return (\n `Plan mode blocked \\`${toolName}\\`` +\n (reason ? ` (${reason})` : \"\") +\n \". Switch to Act mode after the user approves the plan, then retry the action.\"\n );\n}\n\nexport function isPlanModeToolCallAllowed(\n name: string,\n input: unknown,\n entry: ActionEntry,\n): boolean {\n if (PLAN_MODE_BLOCKED_READONLY_TOOLS.has(name)) return false;\n\n if (name === \"web-request\") {\n return PLAN_MODE_WEB_REQUEST_METHODS.has(getWebRequestMethod(input));\n }\n\n const allowedActions = PLAN_MODE_ALLOWED_ACTIONS[name];\n if (allowedActions) {\n return allowedActions.includes(getToolAction(name, input));\n }\n\n return entry.readOnly === true;\n}\n\nfunction createPlanModeGuardedAction(\n name: string,\n entry: ActionEntry,\n allowedActions: readonly string[],\n): ActionEntry {\n return {\n ...entry,\n readOnly: true,\n tool: {\n ...entry.tool,\n description:\n `${entry.tool.description}\\n\\nPlan mode: only these read-only actions are available: ` +\n allowedActions.map((action) => `\"${action}\"`).join(\", \") +\n \".\",\n parameters: restrictActionEnum(entry.tool.parameters, allowedActions),\n },\n run: async (args, context) => {\n const action = getToolAction(name, args);\n if (!allowedActions.includes(action)) {\n return planModeBlockedMessage(\n name,\n `action=\"${action || \"(missing)\"}\"`,\n );\n }\n return entry.run(args, context);\n },\n };\n}\n\nfunction createPlanModeWebRequestAction(entry: ActionEntry): ActionEntry {\n return {\n ...entry,\n readOnly: true,\n tool: {\n ...entry.tool,\n description: `${entry.tool.description}\\n\\nPlan mode: only GET and HEAD requests are allowed.`,\n parameters: restrictWebRequestMethods(entry.tool.parameters),\n },\n run: async (args, context) => {\n const method = getWebRequestMethod(args);\n if (!PLAN_MODE_WEB_REQUEST_METHODS.has(method)) {\n return planModeBlockedMessage(\"web-request\", `method=\"${method}\"`);\n }\n return entry.run(args, context);\n },\n };\n}\n\nexport function createPlanModeActionRegistry(\n actions: Record<string, ActionEntry>,\n): Record<string, ActionEntry> {\n const filtered: Record<string, ActionEntry> = {};\n\n for (const [name, entry] of Object.entries(actions)) {\n if (name === TOOL_SEARCH_ACTION_NAME) continue;\n if (PLAN_MODE_BLOCKED_READONLY_TOOLS.has(name)) continue;\n\n const allowedActions = PLAN_MODE_ALLOWED_ACTIONS[name];\n if (allowedActions) {\n filtered[name] = createPlanModeGuardedAction(name, entry, allowedActions);\n continue;\n }\n\n if (name === \"web-request\") {\n filtered[name] = createPlanModeWebRequestAction(entry);\n continue;\n }\n\n if (entry.readOnly === true) {\n filtered[name] = entry;\n }\n }\n\n if (actions[TOOL_SEARCH_ACTION_NAME]) {\n filtered[TOOL_SEARCH_ACTION_NAME] = createToolSearchEntry(() => filtered);\n }\n\n return filtered;\n}\n\nexport interface ProductionAgentOptions {\n /** Action entries for the agent. Use `actions` (preferred) or `scripts` (deprecated alias). */\n actions?: Record<string, ActionEntry>;\n /** @deprecated Use `actions` instead */\n scripts?: Record<string, ActionEntry>;\n /** Static system prompt string, or async function called per-request with the H3 event */\n systemPrompt: string | ((event: any) => string | Promise<string>);\n /** Falls back to ANTHROPIC_API_KEY env var. Ignored when `engine` is provided. */\n apiKey?: string;\n /** Agent engine to use. Defaults to the \"anthropic\" engine. */\n engine?:\n | AgentEngine\n | string\n | { name: string; config: Record<string, unknown> };\n /** Model to use. Defaults to the resolved engine's default model. */\n model?: string;\n /** Default reasoning effort for requests that do not supply an override. */\n reasoningEffort?: ReasoningEffort;\n /** Provider-specific options passed through to the engine */\n providerOptions?: EngineMessage extends never ? never : any;\n /** Called when a run completes (for server-side thread persistence) */\n onRunComplete?: (run: ActiveRun, threadId: string | undefined) => void;\n /** Called after request validation but before a run is started. */\n onRunPrepared?: (details: {\n runId: string;\n threadId: string | undefined;\n message: string;\n attachments?: AgentChatAttachment[];\n }) => void | Promise<void>;\n /**\n * Optional per-template request normalizer. Runs after owner resolution and\n * before system/context assembly so templates can materialize uploaded chat\n * attachments or append app-specific, non-visible instructions.\n */\n prepareRequest?: (details: {\n event: any;\n ownerEmail: string | null;\n message: string;\n displayMessage?: string;\n attachments: AgentChatAttachment[];\n references: AgentChatReference[];\n threadId?: string;\n internalContinuation?: boolean;\n mode: AgentExecutionMode;\n }) =>\n | void\n | {\n message?: string;\n displayMessage?: string;\n attachments?: AgentChatAttachment[];\n }\n | Promise<void | {\n message?: string;\n displayMessage?: string;\n attachments?: AgentChatAttachment[];\n }>;\n /** Optional per-app agent run chunk budget in milliseconds. Defaults to\n * AGENT_RUN_SOFT_TIMEOUT_MS when set, otherwise no framework-imposed\n * timeout. When reached, the client receives an internal auto-continuation\n * signal instead of a user-facing warning. */\n runSoftTimeoutMs?: number;\n /** Called when a run starts, with the send function for emitting events and the threadId */\n onRunStart?: (\n send: (event: AgentChatEvent) => void,\n threadId: string,\n ) => void | Promise<void>;\n /**\n * Called after the engine + model are resolved for this request. Used by\n * the plugin layer to thread the parent's choices into sub-agents so\n * delegated tasks don't default back to Anthropic + Claude.\n */\n onEngineResolved?: (engine: AgentEngine, model: string) => void;\n /** Resolve the owner email from the H3 event (for usage tracking) */\n resolveOwnerEmail?: (event: any) => string | Promise<string>;\n /**\n * Optional final-answer guard. If it returns a message after a text-only\n * assistant turn, the loop clears that draft once and asks the model to\n * continue with the returned corrective instruction before allowing a final.\n */\n finalResponseGuard?: AgentLoopFinalResponseGuard;\n /**\n * Skip auto-injecting the workspace files/skills/agents inventory on the\n * first message of a conversation. Useful for minimal/voice apps where\n * the ~2KB inventory of unrelated resources is noise, not signal.\n * Default: false (inventory is injected).\n */\n skipFilesContext?: boolean;\n}\n\nexport async function resolveAgentOwnerEmail(\n options: Pick<ProductionAgentOptions, \"resolveOwnerEmail\">,\n event: any,\n): Promise<string | null> {\n let ownerEmail: string | null = null;\n if (options.resolveOwnerEmail) {\n try {\n ownerEmail = await options.resolveOwnerEmail(event);\n } catch {\n ownerEmail = null;\n }\n }\n return ownerEmail ?? getRequestUserEmail() ?? null;\n}\n\nconst MAX_RETRIES = 3;\n/**\n * Retry budget override for `builder_gateway_error` — the no-detail Builder\n * gateway fallback. Production data shows this code is almost never\n * transient: it's the gateway emitting `{type:\"stop\",reason:\"error\"}` with\n * no explanation, which usually means the upstream provider rejected the\n * call (model quota, account misconfiguration). Retrying the same request\n * synchronously rarely recovers, and each retry emits a `clear` event that\n * wipes the user's visible content and re-streams from scratch — three\n * cycles of \"regenerate, clear, regenerate\" inside a single run for a\n * failure mode where retrying doesn't help. Keep the budget at 1 so we\n * cover genuinely transient cases without the visible flicker storm.\n */\nconst BUILDER_GATEWAY_ERROR_MAX_RETRIES = 1;\nconst RETRY_BASE_DELAY_MS = 2000;\n\nfunction maxRetriesForError(err: unknown): number {\n if (err instanceof EngineError) {\n const code = (err.errorCode ?? \"\").toLowerCase();\n if (code === \"builder_gateway_error\") {\n return BUILDER_GATEWAY_ERROR_MAX_RETRIES;\n }\n }\n return MAX_RETRIES;\n}\nconst TOOL_INPUT_ACTIVITY_INTERVAL_MS = 1500;\nconst MAX_TEXT_ATTACHMENT_CHARS = 60_000;\n\nfunction generateRunId(): string {\n return `run-${Date.now()}-${Math.random().toString(36).slice(2, 8)}`;\n}\n\nfunction toolInputActivityLabel(toolName?: string): string {\n return toolName ? `Preparing ${toolName} action` : \"Preparing action input\";\n}\n\n/** Check if an error is transient and should be retried */\nfunction isContextTooLongError(err: unknown): boolean {\n if (!(err instanceof Error)) return false;\n const msg = err.message.toLowerCase();\n if (\n msg.includes(\"context_length_exceeded\") ||\n msg.includes(\"input_too_long\") ||\n msg.includes(\"too many tokens\") ||\n msg.includes(\"prompt is too long\") ||\n msg.includes(\"reduce the length\")\n )\n return true;\n if (err instanceof EngineError) {\n const code = (err.errorCode ?? \"\").toLowerCase();\n if (code.includes(\"context_length\") || code.includes(\"input_too_long\"))\n return true;\n }\n return false;\n}\n\nfunction isRetryableError(err: unknown): boolean {\n if (!(err instanceof Error)) return false;\n const msg = err.message.toLowerCase();\n const code =\n err instanceof EngineError ? (err.errorCode ?? \"\").toLowerCase() : \"\";\n if (code === \"builder_gateway_timeout\") return false;\n return (\n code === \"builder_gateway_error\" ||\n code === \"builder_gateway_network_error\" ||\n code === \"http_502\" ||\n code === \"http_503\" ||\n code === \"http_504\" ||\n code === \"timeout\" ||\n msg.includes(\"overloaded\") ||\n msg.includes(\"rate_limit\") ||\n msg.includes(\"529\") ||\n msg.includes(\"502\") ||\n msg.includes(\"503\") ||\n msg.includes(\"504\") ||\n msg.includes(\"gateway error\") ||\n msg.includes(\"socket hang up\") ||\n msg.includes(\"connection reset\") ||\n msg.includes(\"too many requests\") ||\n msg.includes(\"timeout\") ||\n msg.includes(\"gateway timeout\") ||\n msg.includes(\"inactivity timeout\") ||\n msg.includes(\"too much time has passed without sending any data\")\n );\n}\n\n/** Wait with exponential backoff, respecting abort signal */\nfunction retryDelay(attempt: number, signal: AbortSignal): Promise<void> {\n const baseMs = RETRY_BASE_DELAY_MS * Math.pow(2, attempt);\n const jitter = baseMs * 0.1;\n const ms = Math.max(0, baseMs + (Math.random() * 2 - 1) * jitter);\n return new Promise((resolve, reject) => {\n if (signal.aborted) return reject(new Error(\"aborted\"));\n const timer = setTimeout(resolve, ms);\n signal.addEventListener(\n \"abort\",\n () => {\n clearTimeout(timer);\n reject(new Error(\"aborted\"));\n },\n { once: true },\n );\n });\n}\n\ntype SupportedImageMediaType =\n | \"image/jpeg\"\n | \"image/png\"\n | \"image/gif\"\n | \"image/webp\";\n\nfunction isSupportedImageMediaType(\n mediaType: string,\n): mediaType is SupportedImageMediaType {\n return (\n mediaType === \"image/jpeg\" ||\n mediaType === \"image/png\" ||\n mediaType === \"image/gif\" ||\n mediaType === \"image/webp\"\n );\n}\n\nfunction escapeAttachmentAttribute(value: string): string {\n return value\n .replace(/&/g, \"&amp;\")\n .replace(/\"/g, \"&quot;\")\n .replace(/</g, \"&lt;\")\n .replace(/>/g, \"&gt;\");\n}\n\nfunction unwrapTextAttachmentEnvelope(text: string): string {\n const match = text.match(/^<attachment\\b[^>]*>\\n([\\s\\S]*)\\n<\\/attachment>$/);\n return match ? match[1] : text;\n}\n\nfunction truncateTextAttachment(text: string): string {\n if (text.length <= MAX_TEXT_ATTACHMENT_CHARS) return text;\n\n const omitted = text.length - MAX_TEXT_ATTACHMENT_CHARS;\n return `${text.slice(0, MAX_TEXT_ATTACHMENT_CHARS)}\\n\\n[Attachment truncated after ${MAX_TEXT_ATTACHMENT_CHARS.toLocaleString()} characters; ${omitted.toLocaleString()} characters omitted to keep the agent request within model context limits.]`;\n}\n\nfunction formatTextAttachment(att: AgentChatAttachment): string | null {\n if (typeof att.text !== \"string\" || att.text.length === 0) return null;\n const text = truncateTextAttachment(unwrapTextAttachmentEnvelope(att.text));\n\n const attrs = [\n `name=\"${escapeAttachmentAttribute(att.name || \"attachment\")}\"`,\n att.contentType\n ? `contentType=\"${escapeAttachmentAttribute(att.contentType)}\"`\n : null,\n att.type ? `type=\"${escapeAttachmentAttribute(att.type)}\"` : null,\n ].filter(Boolean);\n\n return `<attachment ${attrs.join(\" \")}>\\n${text}\\n</attachment>`;\n}\n\nfunction dataUrlToFilePart(\n att: AgentChatAttachment,\n): { type: \"file\"; data: string; mediaType: string; filename?: string } | null {\n if (att.type !== \"file\" || typeof att.data !== \"string\") return null;\n const match = att.data.match(/^data:([^;]+);base64,(.+)$/);\n if (!match) return null;\n return {\n type: \"file\",\n data: match[2],\n mediaType: att.contentType || match[1],\n filename: att.name || undefined,\n };\n}\n\nexport function buildUserContentWithAttachments(opts: {\n text: string;\n attachments?: AgentChatAttachment[];\n}): EngineContentPart[] {\n const userContent: EngineContentPart[] = [];\n const textAttachments: string[] = [];\n\n for (const att of opts.attachments ?? []) {\n if (att.type === \"image\" && att.data) {\n const match = att.data.match(/^data:(image\\/[^;]+);base64,(.+)$/);\n if (match && isSupportedImageMediaType(match[1])) {\n userContent.push({\n type: \"image\",\n data: match[2],\n mediaType: match[1],\n });\n }\n continue;\n }\n\n const filePart = dataUrlToFilePart(att);\n if (filePart) {\n userContent.push(filePart);\n continue;\n }\n\n const textAttachment = formatTextAttachment(att);\n if (textAttachment) {\n textAttachments.push(textAttachment);\n }\n }\n\n userContent.push({\n type: \"text\",\n text:\n textAttachments.length > 0\n ? `${textAttachments.join(\"\\n\\n\")}\\n\\n${opts.text}`\n : opts.text,\n });\n\n return userContent;\n}\n\nexport function structuredHistoryToEngineMessages(\n history: AgentChatStructuredMessage[] | undefined,\n): EngineMessage[] | null {\n if (!Array.isArray(history)) return null;\n\n const messages: EngineMessage[] = [];\n for (const message of history) {\n if (\n !message ||\n (message.role !== \"user\" && message.role !== \"assistant\") ||\n !Array.isArray(message.content)\n ) {\n continue;\n }\n\n const content: EngineContentPart[] = [];\n for (const part of message.content) {\n if (!part || typeof part !== \"object\") continue;\n if (part.type === \"text\" && typeof part.text === \"string\") {\n if (part.text.length > 0) {\n content.push({ type: \"text\", text: part.text });\n }\n continue;\n }\n\n if (part.type === \"tool-call\" && message.role === \"assistant\") {\n const id =\n typeof part.id === \"string\"\n ? part.id\n : typeof part.toolCallId === \"string\"\n ? part.toolCallId\n : \"\";\n const name =\n typeof part.name === \"string\"\n ? part.name\n : typeof part.toolName === \"string\"\n ? part.toolName\n : \"\";\n if (!id || !name) continue;\n content.push({\n type: \"tool-call\",\n id,\n name,\n input: part.input ?? part.args ?? {},\n });\n continue;\n }\n\n if (part.type === \"tool-result\" && message.role === \"user\") {\n if (\n typeof part.toolCallId !== \"string\" ||\n typeof part.content !== \"string\"\n ) {\n continue;\n }\n content.push({\n type: \"tool-result\",\n toolCallId: part.toolCallId,\n ...(typeof part.toolName === \"string\"\n ? { toolName: part.toolName }\n : {}),\n content: part.content,\n ...(part.isError ? { isError: true } : {}),\n });\n }\n }\n\n if (content.length > 0) {\n messages.push({ role: message.role, content });\n }\n }\n\n return messages.length > 0 ? messages : null;\n}\n\n/** Build enriched message with file/skill/mention references */\nfunction enrichMessage(\n message: string,\n references: AgentChatReference[],\n): string {\n if (references.length === 0) return message;\n\n const fileRefs = references.filter((r) => r.type === \"file\");\n const skillRefs = references.filter((r) => r.type === \"skill\");\n const customAgentRefs = references.filter((r) => r.type === \"custom-agent\");\n const mentionRefs = references.filter((r) => r.type === \"mention\");\n\n const parts: string[] = [];\n if (fileRefs.length > 0) {\n parts.push(\n \"Referenced files:\\n\" +\n fileRefs\n .map(\n (r) => `- ${r.path}${r.source === \"resource\" ? \" (resource)\" : \"\"}`,\n )\n .join(\"\\n\"),\n );\n }\n if (skillRefs.length > 0) {\n parts.push(\n \"Applied skills:\\n\" +\n skillRefs\n .map(\n (r) =>\n `- ${r.name} (${r.path})${r.source === \"resource\" ? \" — read with resource-read\" : \" — read with read-file\"}`,\n )\n .join(\"\\n\"),\n );\n }\n if (customAgentRefs.length > 0) {\n parts.push(\n \"Requested custom agents:\\n\" +\n customAgentRefs\n .map(\n (r) =>\n `- ${r.name}${r.refId ? ` (id: ${r.refId})` : \"\"}${r.path ? ` (path: ${r.path})` : \"\"}`,\n )\n .join(\"\\n\"),\n );\n }\n if (mentionRefs.length > 0) {\n parts.push(\n \"Referenced items:\\n\" +\n mentionRefs\n .map(\n (r) =>\n `- [${r.refType || \"item\"}] ${r.name}${r.refId ? ` (id: ${r.refId})` : \"\"}${r.path ? ` (path: ${r.path})` : \"\"}`,\n )\n .join(\"\\n\"),\n );\n }\n\n return `${parts.join(\"\\n\\n\")}\\n\\n${message}`;\n}\n\n/** Accumulated token usage from an agent loop run */\nexport interface AgentLoopUsage {\n inputTokens: number;\n outputTokens: number;\n cacheReadTokens: number;\n cacheWriteTokens: number;\n model: string;\n}\n\nexport interface AgentLoopToolCallSummary {\n name: string;\n input: unknown;\n}\n\nexport interface AgentLoopToolResultSummary {\n name: string;\n content: string;\n isError: boolean;\n}\n\nexport interface AgentLoopFinalResponseGuardContext {\n messages: EngineMessage[];\n assistantContent: EngineContentPart[];\n text: string;\n toolCalls: AgentLoopToolCallSummary[];\n toolResults: AgentLoopToolResultSummary[];\n retryCount: number;\n}\n\nexport type AgentLoopFinalResponseGuardResult =\n | string\n | {\n retryMessage: string;\n fallbackMessage?: string;\n };\n\nexport type AgentLoopFinalResponseGuard = (\n context: AgentLoopFinalResponseGuardContext,\n) =>\n | AgentLoopFinalResponseGuardResult\n | null\n | undefined\n | Promise<AgentLoopFinalResponseGuardResult | null | undefined>;\n\nfunction collectTextParts(parts: EngineContentPart[]): string {\n return parts\n .filter(\n (part): part is import(\"./engine/types.js\").EngineTextPart =>\n part.type === \"text\",\n )\n .map((part) => part.text)\n .join(\"\");\n}\n\nexport const AGENT_INTERNAL_CONTINUE_PROMPT =\n \"Continue from where you left off and finish the user's original request. Do not repeat completed work, do not mention internal reconnects, time limits, or step limits, and continue as if this is the same uninterrupted run.\";\n\nexport type AgentLoopContinuationReason =\n | \"run_timeout\"\n | \"loop_limit\"\n | \"stream_ended\"\n | \"gateway_timeout\"\n | \"network_interrupted\";\n\nexport function appendAgentLoopContinuation(\n messages: EngineMessage[],\n reason: AgentLoopContinuationReason,\n) {\n const note =\n reason === \"loop_limit\"\n ? \"The previous run reached an internal step budget.\"\n : reason === \"stream_ended\"\n ? \"The previous stream ended before the agent sent a final completion signal.\"\n : reason === \"gateway_timeout\"\n ? \"The previous LLM call hit an upstream gateway timeout before the response finished streaming.\"\n : reason === \"network_interrupted\"\n ? \"The previous LLM call was cut off by a transport-level interruption (socket dropped, connection reset, or stream closed unexpectedly).\"\n : \"The previous run reached an internal execution budget.\";\n messages.push({\n role: \"user\",\n content: [\n {\n type: \"text\",\n text: `${AGENT_INTERNAL_CONTINUE_PROMPT}\\n\\nInternal note: ${note}`,\n },\n ],\n });\n}\n\n/**\n * True when an error thrown by `runAgentLoop` is a recoverable transport- or\n * gateway-level interruption that the agent can resume from rather than a\n * terminal failure. The continuation pattern works because the LLM call's\n * conversation prefix is preserved on the next attempt — Anthropic's prompt\n * cache rescues the latency, and the agent gets a \"you got cut off, continue\"\n * nudge so it doesn't redo work it already finished.\n *\n * Distinct from `isRetryableError` which guides per-engine quick retries:\n * `isResumableEngineError` is checked AFTER engine retries are exhausted, at\n * the run level. It catches both gateway-reported timeouts (where engine\n * retries don't apply because the gateway already gave up) and transport\n * errors that survived engine retry budgets.\n */\nexport function isResumableEngineError(err: unknown): boolean {\n if (!(err instanceof Error)) return false;\n const code =\n err instanceof EngineError ? (err.errorCode ?? \"\").toLowerCase() : \"\";\n if (\n code === \"builder_gateway_timeout\" ||\n code === \"builder_gateway_network_error\"\n ) {\n return true;\n }\n if (\n code === \"http_502\" ||\n code === \"http_503\" ||\n code === \"http_504\" ||\n code === \"timeout\"\n ) {\n return true;\n }\n const text = errorSearchText(err);\n return (\n text.includes(\"socket hang up\") ||\n text.includes(\"econnreset\") ||\n text.includes(\"enetreset\") ||\n text.includes(\"econnaborted\") ||\n text.includes(\"fetch failed\") ||\n text.includes(\"network error\") ||\n text.includes(\"connection reset\") ||\n text.includes(\"connection closed\") ||\n text.includes(\"stream closed\") ||\n text.includes(\"inactivity timeout\") ||\n text.includes(\"gateway timeout\") ||\n text.includes(\"upstream timeout\") ||\n text.includes(\"function timeout\") ||\n text.includes(\"too much time has passed without sending any data\") ||\n text.includes(\"terminated\")\n );\n}\n\n/**\n * Map a resumable error to the most descriptive continuation reason. Used\n * when surfacing the resume to the agent and to clients via the\n * `auto_continue` event.\n */\nexport function continuationReasonForResumableError(\n err: unknown,\n): \"gateway_timeout\" | \"network_interrupted\" {\n const code =\n err instanceof EngineError ? (err.errorCode ?? \"\").toLowerCase() : \"\";\n if (code === \"builder_gateway_timeout\") return \"gateway_timeout\";\n const text = err instanceof Error ? err.message.toLowerCase() : \"\";\n if (\n text.includes(\"gateway timeout\") ||\n text.includes(\"upstream timeout\") ||\n text.includes(\"function timeout\")\n ) {\n return \"gateway_timeout\";\n }\n return \"network_interrupted\";\n}\n\nfunction errorSearchText(err: unknown): string {\n const parts: string[] = [];\n if (err instanceof Error) {\n parts.push(err.name, err.message);\n const maybe = err as Error & { code?: unknown; cause?: unknown };\n if (typeof maybe.code === \"string\") parts.push(maybe.code);\n if (maybe.cause) parts.push(errorSearchText(maybe.cause));\n } else {\n parts.push(String(err));\n }\n return parts.join(\" \").toLowerCase();\n}\n\nfunction textFromEngineMessage(message: EngineMessage): string {\n return message.content\n .filter(\n (part): part is import(\"./engine/types.js\").EngineTextPart =>\n part.type === \"text\",\n )\n .map((part) => part.text)\n .join(\"\\n\");\n}\n\nfunction isInternalContinuationTurn(messages: EngineMessage[]): boolean {\n for (let i = messages.length - 1; i >= 0; i--) {\n const message = messages[i];\n if (message.role !== \"user\") continue;\n return textFromEngineMessage(message).startsWith(\n AGENT_INTERNAL_CONTINUE_PROMPT,\n );\n }\n return false;\n}\n\nfunction seedReadOnlyToolResultsFromHistory(\n messages: EngineMessage[],\n actions: Record<string, ActionEntry>,\n): Map<string, string> {\n const cache = new Map<string, string>();\n if (!isInternalContinuationTurn(messages)) return cache;\n\n const pendingToolCalls = new Map<string, { name: string; input: unknown }>();\n for (const message of messages) {\n if (message.role === \"assistant\") {\n for (const part of message.content) {\n if (part.type !== \"tool-call\") continue;\n const entry = actions[part.name];\n if (entry?.readOnly !== true) continue;\n pendingToolCalls.set(part.id, {\n name: part.name,\n input: part.input,\n });\n }\n continue;\n }\n\n for (const part of message.content) {\n if (part.type !== \"tool-result\") continue;\n const call = pendingToolCalls.get(part.toolCallId);\n if (!call) continue;\n cache.set(toolCallCacheKey(call.name, call.input), part.content);\n }\n }\n\n return cache;\n}\n\n/**\n * Convert ActionEntry registry to EngineTool array.\n */\nexport function actionsToEngineTools(\n actions: Record<string, ActionEntry>,\n): EngineTool[] {\n const tools: EngineTool[] = [];\n for (const [name, entry] of Object.entries(actions)) {\n const inputSchema = normalizeToolInputSchema(entry.tool.parameters);\n if (!inputSchema) {\n console.warn(\n `[agent] Skipping tool \"${name}\" because its input schema is not an object.`,\n );\n continue;\n }\n tools.push({\n name,\n description: entry.tool.description,\n inputSchema,\n });\n }\n return tools;\n}\n\nfunction normalizeToolInputSchema(\n schema: ActionTool[\"parameters\"] | undefined,\n): EngineTool[\"inputSchema\"] | null {\n if (!schema) return { type: \"object\", properties: {} };\n if (schema.type !== \"object\") return null;\n return {\n ...schema,\n type: \"object\",\n properties:\n schema.properties && typeof schema.properties === \"object\"\n ? schema.properties\n : {},\n required: Array.isArray(schema.required) ? schema.required : [],\n };\n}\n\nfunction stringifyToolInput(input: unknown): string {\n try {\n const str = JSON.stringify(input);\n if (!str) return String(input);\n return str.length > 500 ? `${str.slice(0, 500)}…` : str;\n } catch {\n return String(input);\n }\n}\n\nfunction stableStringify(value: unknown): string {\n if (value === null || typeof value !== \"object\") {\n return JSON.stringify(value);\n }\n if (Array.isArray(value)) {\n return `[${value.map((item) => stableStringify(item)).join(\",\")}]`;\n }\n const obj = value as Record<string, unknown>;\n return `{${Object.keys(obj)\n .sort()\n .map((key) => `${JSON.stringify(key)}:${stableStringify(obj[key])}`)\n .join(\",\")}}`;\n}\n\nfunction toolCallCacheKey(toolName: string, input: unknown): string {\n return `${toolName}:${stableStringify(normalizeToolCallInputForHistory(input))}`;\n}\n\nfunction normalizeToolCallInputForHistory(\n input: unknown,\n): Record<string, unknown> {\n if (input && typeof input === \"object\" && !Array.isArray(input)) {\n return input as Record<string, unknown>;\n }\n return { rawInput: input };\n}\n\nfunction toolInputSchemaErrorResult(\n toolName: string,\n input: unknown,\n error: string,\n): string {\n return (\n `Invalid action parameters for ${toolName}: ${error}. ` +\n `Received: ${stringifyToolInput(input)}. ` +\n \"The tool was not executed; retry with arguments that match the tool schema.\"\n );\n}\n\n/**\n * The core agent loop — calls the engine iteratively until no more tool calls.\n * Decoupled from HTTP transport so it can run in the background.\n * Returns accumulated token usage for cost tracking.\n */\nexport async function runAgentLoop(opts: {\n engine: AgentEngine;\n model: string;\n systemPrompt: string;\n tools: EngineTool[];\n messages: EngineMessage[];\n actions: Record<string, ActionEntry>;\n send: (event: AgentChatEvent) => void;\n signal: AbortSignal;\n ownerEmail?: string | null;\n orgId?: string | null;\n reasoningEffort?: ReasoningEffort;\n providerOptions?: any;\n executionMode?: AgentExecutionMode;\n maxIterations?: number;\n finalResponseGuard?: AgentLoopFinalResponseGuard;\n}): Promise<AgentLoopUsage> {\n const {\n engine,\n model,\n systemPrompt,\n tools,\n messages,\n actions,\n send,\n signal,\n } = opts;\n\n const usage: AgentLoopUsage = {\n inputTokens: 0,\n outputTokens: 0,\n cacheReadTokens: 0,\n cacheWriteTokens: 0,\n model,\n };\n\n const maxIterations = normalizeMaxIterations(\n opts.maxIterations,\n getDefaultMaxIterations(),\n );\n const toolCallHistory: AgentLoopToolCallSummary[] = [];\n const toolResultHistory: AgentLoopToolResultSummary[] = [];\n const runCtx = getRequestRunContext();\n if (runCtx) {\n runCtx.toolCalls = toolCallHistory;\n runCtx.toolResults = toolResultHistory;\n }\n const readOnlyToolResultCache = seedReadOnlyToolResultsFromHistory(\n messages,\n actions,\n );\n const duplicateReadOnlyToolCalls = new Map<string, number>();\n const bufferTextUntilFinalGuard = Boolean(opts.finalResponseGuard);\n let finalGuardRetries = 0;\n let iterations = 0;\n while (true) {\n if (signal.aborted) break;\n if (++iterations > maxIterations) {\n appendAgentLoopContinuation(messages, \"loop_limit\");\n iterations = 1;\n }\n\n let assistantContent: EngineContentPart[] | undefined;\n let bufferedAssistantText = \"\";\n const toolCallErrors = new Map<\n string,\n { name: string; input: unknown; error: string }\n >();\n\n for (let retry = 0; ; retry++) {\n assistantContent = undefined;\n bufferedAssistantText = \"\";\n toolCallErrors.clear();\n try {\n const streamOpts = {\n model,\n systemPrompt,\n messages,\n tools,\n abortSignal: signal,\n reasoningEffort: opts.reasoningEffort,\n providerOptions: opts.providerOptions,\n };\n\n const eventStream = engine.stream(streamOpts);\n let thinkingBuffer = \"\";\n const toolInputNames = new Map<string, string>();\n let lastToolInputActivityAt = 0;\n const sendToolInputActivity = (\n toolName: string | undefined,\n force = false,\n ) => {\n const now = Date.now();\n if (\n !force &&\n now - lastToolInputActivityAt < TOOL_INPUT_ACTIVITY_INTERVAL_MS\n ) {\n return;\n }\n lastToolInputActivityAt = now;\n send({\n type: \"activity\",\n label: toolInputActivityLabel(toolName),\n ...(toolName ? { tool: toolName } : {}),\n });\n };\n\n for await (const event of eventStream) {\n if (event.type === \"text-delta\") {\n if (bufferTextUntilFinalGuard) {\n bufferedAssistantText += event.text;\n } else {\n send({ type: \"text\", text: event.text });\n }\n } else if (event.type === \"thinking-delta\") {\n thinkingBuffer += event.text;\n // Thinking deltas are not forwarded to the SSE client yet —\n // we accumulate them. In a future iteration, we can surface\n // them as a collapsible \"reasoning\" section in the UI.\n } else if (event.type === \"tool-input-start\") {\n if (event.id && event.name) {\n toolInputNames.set(event.id, event.name);\n }\n sendToolInputActivity(event.name, true);\n } else if (event.type === \"tool-input-delta\") {\n const toolName =\n event.name ??\n (event.id ? toolInputNames.get(event.id) : undefined);\n sendToolInputActivity(toolName);\n } else if (event.type === \"tool-call\") {\n // The authoritative tool-call blocks arrive in assistant-content.\n } else if (event.type === \"tool-call-error\") {\n toolCallErrors.set(event.id, {\n name: event.name,\n input: event.input,\n error: event.error,\n });\n } else if (event.type === \"assistant-content\") {\n assistantContent = event.parts;\n } else if (event.type === \"usage\") {\n usage.inputTokens += event.inputTokens;\n usage.outputTokens += event.outputTokens;\n usage.cacheReadTokens += event.cacheReadTokens ?? 0;\n usage.cacheWriteTokens += event.cacheWriteTokens ?? 0;\n } else if (event.type === \"stop\" && event.reason === \"error\") {\n throw new EngineError(event.error ?? \"Engine stream error\", {\n errorCode: event.errorCode,\n upgradeUrl: event.upgradeUrl,\n });\n }\n }\n\n break;\n } catch (err: unknown) {\n if (signal.aborted) throw err;\n if (isContextTooLongError(err)) {\n throw new EngineError(\n \"Conversation has grown too long. Start a new conversation to continue.\",\n { errorCode: \"context_length_exceeded\" },\n );\n }\n if (retry < maxRetriesForError(err) && isRetryableError(err)) {\n // Clear partial text from the failed attempt so the retry\n // doesn't produce garbled duplicate output. Keep the retry itself\n // silent so transient provider/backend failures do not leak into\n // the assistant's final answer.\n send({ type: \"clear\" });\n await retryDelay(retry, signal);\n continue;\n }\n throw err;\n }\n }\n\n if (!assistantContent && toolCallErrors.size > 0) {\n assistantContent = [];\n }\n\n if (!assistantContent) {\n // No content — done\n break;\n }\n\n if (toolCallErrors.size > 0) {\n const existingToolCallIds = new Set(\n assistantContent\n .filter(\n (part): part is import(\"./engine/types.js\").EngineToolCallPart =>\n part.type === \"tool-call\",\n )\n .map((part) => part.id),\n );\n for (const [id, info] of toolCallErrors) {\n if (!existingToolCallIds.has(id)) {\n assistantContent.push({\n type: \"tool-call\",\n id,\n name: info.name,\n input: info.input,\n });\n }\n }\n }\n\n const assistantContentForHistory = assistantContent.map((part) =>\n part.type === \"tool-call\"\n ? {\n ...part,\n input: normalizeToolCallInputForHistory(part.input),\n }\n : part,\n );\n\n messages.push({ role: \"assistant\", content: assistantContentForHistory });\n\n const toolCallParts = assistantContent.filter(\n (p): p is import(\"./engine/types.js\").EngineToolCallPart =>\n p.type === \"tool-call\",\n );\n const flushBufferedAssistantText = () => {\n if (!bufferTextUntilFinalGuard) return;\n const text =\n bufferedAssistantText || collectTextParts(assistantContentForHistory);\n if (text) send({ type: \"text\", text });\n };\n\n if (toolCallParts.length === 0) {\n const guard = opts.finalResponseGuard\n ? await opts.finalResponseGuard({\n messages,\n assistantContent: assistantContentForHistory,\n text: collectTextParts(assistantContentForHistory),\n toolCalls: [...toolCallHistory],\n toolResults: [...toolResultHistory],\n retryCount: finalGuardRetries,\n })\n : null;\n let guardEmittedFallback = false;\n if (guard) {\n const retryMessage =\n typeof guard === \"string\" ? guard : guard.retryMessage;\n const fallbackMessage =\n typeof guard === \"string\" ? guard : guard.fallbackMessage;\n if (finalGuardRetries < 1) {\n finalGuardRetries += 1;\n messages.push({\n role: \"user\",\n content: [{ type: \"text\", text: retryMessage }],\n });\n continue;\n }\n send({ type: \"text\", text: fallbackMessage ?? retryMessage });\n guardEmittedFallback = true;\n } else {\n flushBufferedAssistantText();\n }\n // Some providers (notably OpenAI Responses for gpt-5+) can stream a\n // successful turn that contains only reasoning content and zero output\n // text — typically when reasoning consumes the entire output-token\n // budget. Without a final text part the SSE stream still ends with a\n // clean `done`, which renders as a totally empty assistant bubble.\n // Surface a plain-language error so the user knows what happened.\n if (\n !guardEmittedFallback &&\n collectTextParts(assistantContentForHistory).trim().length === 0 &&\n bufferedAssistantText.trim().length === 0\n ) {\n send({\n type: \"text\",\n text: \"The model returned an empty response. This usually means reasoning used the full output-token budget. Try again, or pick a different model from the model menu.\",\n });\n }\n break;\n }\n\n flushBufferedAssistantText();\n\n let requestedActionStop: { message: string; errorCode?: string } | null =\n null;\n\n const runToolCall = async (\n toolCall: import(\"./engine/types.js\").EngineToolCallPart,\n ): Promise<EngineContentPart> => {\n toolCallHistory.push({\n name: toolCall.name,\n input: normalizeToolCallInputForHistory(toolCall.input),\n });\n const recordToolResult = (content: string, isError: boolean) => {\n toolResultHistory.push({\n name: toolCall.name,\n content,\n isError,\n });\n };\n const actionEntry = actions[toolCall.name];\n if (!actionEntry) {\n const result = `Error: Unknown tool \"${toolCall.name}\"`;\n send({\n type: \"tool_start\",\n tool: toolCall.name,\n input: toolCall.input as Record<string, string>,\n });\n send({ type: \"tool_done\", tool: toolCall.name, result });\n recordToolResult(result, true);\n return {\n type: \"tool-result\" as const,\n toolCallId: toolCall.id,\n toolName: toolCall.name,\n content: result,\n isError: true,\n };\n }\n\n const cacheKey =\n actionEntry.readOnly === true\n ? toolCallCacheKey(toolCall.name, toolCall.input)\n : null;\n if (cacheKey && readOnlyToolResultCache.has(cacheKey)) {\n const repeats = (duplicateReadOnlyToolCalls.get(cacheKey) ?? 0) + 1;\n duplicateReadOnlyToolCalls.set(cacheKey, repeats);\n const previousResult = readOnlyToolResultCache.get(cacheKey) ?? \"\";\n const result =\n `Skipped duplicate read-only call to ${toolCall.name}: identical input already ran in this turn. ` +\n `Use the previous result already in the conversation instead of calling this tool again.\\n\\n` +\n `Previous result:\\n${previousResult}`;\n send({\n type: \"tool_start\",\n tool: toolCall.name,\n input: toolCall.input as Record<string, string>,\n });\n send({ type: \"tool_done\", tool: toolCall.name, result });\n recordToolResult(result, false);\n if (repeats >= 3) {\n requestedActionStop ??= {\n message:\n \"I stopped because the agent kept asking for the same read-only context it already had. Please send the request again if you want me to retry from a fresh turn.\",\n errorCode: \"duplicate_read_only_tool\",\n };\n }\n return {\n type: \"tool-result\" as const,\n toolCallId: toolCall.id,\n toolName: toolCall.name,\n content: result,\n };\n }\n\n send({\n type: \"tool_start\",\n tool: toolCall.name,\n input: toolCall.input as Record<string, string>,\n });\n\n const toolCallSchemaError = toolCallErrors.get(toolCall.id);\n if (toolCallSchemaError) {\n const result = toolInputSchemaErrorResult(\n toolCall.name,\n toolCallSchemaError.input,\n toolCallSchemaError.error,\n );\n send({ type: \"tool_done\", tool: toolCall.name, result });\n recordToolResult(result, true);\n return {\n type: \"tool-result\" as const,\n toolCallId: toolCall.id,\n toolName: toolCall.name,\n content: result,\n isError: true,\n };\n }\n\n if (\n opts.executionMode === \"plan\" &&\n !isPlanModeToolCallAllowed(toolCall.name, toolCall.input, actionEntry)\n ) {\n const result = planModeBlockedMessage(toolCall.name);\n send({ type: \"tool_done\", tool: toolCall.name, result });\n recordToolResult(result, true);\n return {\n type: \"tool-result\" as const,\n toolCallId: toolCall.id,\n toolName: toolCall.name,\n content: result,\n isError: true,\n };\n }\n\n const MAX_TOOL_RESULT_CHARS = 50_000;\n const TOOL_TIMEOUT_MS = 60_000;\n let result: string;\n let isError = false;\n try {\n const timeoutSignal = AbortSignal.timeout(TOOL_TIMEOUT_MS);\n const raw = await Promise.race([\n actionEntry.run(toolCall.input as Record<string, string>, { send }),\n new Promise<never>((_, reject) => {\n timeoutSignal.addEventListener(\"abort\", () =>\n reject(new Error(\"Tool call timed out after 60 seconds\")),\n );\n }),\n ]);\n let resultStr =\n typeof raw === \"string\" ? raw : JSON.stringify(raw, null, 2);\n if (resultStr.length > MAX_TOOL_RESULT_CHARS) {\n const truncated = resultStr.slice(0, MAX_TOOL_RESULT_CHARS);\n resultStr = `${truncated}\\n\\n...[truncated — full result was ${resultStr.length.toLocaleString()} chars; only first ${MAX_TOOL_RESULT_CHARS.toLocaleString()} shown]`;\n }\n result = resultStr;\n } catch (err: any) {\n if (isAgentActionStopError(err)) {\n const message =\n err.message || `Stopped after ${toolCall.name} failed.`;\n result = err.toolResult || message;\n requestedActionStop ??= {\n message,\n ...(err.errorCode ? { errorCode: err.errorCode } : {}),\n };\n } else {\n result = `Error running ${toolCall.name}: ${err?.message ?? String(err)}`;\n }\n isError = true;\n }\n\n // Auto-refresh the UI after a successful mutating tool call. Any action\n // that isn't explicitly read-only is assumed to mutate. The client's\n // useDbSync listener sees a poll event with source:\"action\" and\n // invalidates [\"action\"] queries so list-* / get-* refetch. This makes\n // refresh after agent writes reliable without the model needing to\n // remember to call `refresh-screen` itself.\n if (!isError && actionEntry.readOnly !== true) {\n try {\n const { recordChange } = await import(\"../server/poll.js\");\n const owner = opts.ownerEmail ?? getRequestUserEmail() ?? undefined;\n const orgId = opts.orgId ?? getRequestOrgId() ?? undefined;\n recordChange({\n source: \"action\",\n type: \"change\",\n key: toolCall.name,\n ...(owner ? { owner } : {}),\n ...(orgId ? { orgId } : {}),\n });\n } catch {\n // poll module may be unavailable in non-server contexts — ignore\n }\n }\n\n send({ type: \"tool_done\", tool: toolCall.name, result });\n recordToolResult(result, isError);\n if (!isError) {\n if (cacheKey) {\n readOnlyToolResultCache.set(cacheKey, result);\n } else {\n readOnlyToolResultCache.clear();\n duplicateReadOnlyToolCalls.clear();\n }\n }\n return {\n type: \"tool-result\" as const,\n toolCallId: toolCall.id,\n toolName: toolCall.name,\n content: result,\n ...(isError ? { isError } : {}),\n };\n };\n\n type ParallelBatchKind = \"read\" | \"parallel-write\";\n const getParallelBatchKind = (\n toolCall: import(\"./engine/types.js\").EngineToolCallPart,\n ): ParallelBatchKind | null => {\n const entry = actions[toolCall.name];\n if (!entry || entry.readOnly === true) return \"read\";\n if (entry.parallelSafe === true) return \"parallel-write\";\n return null;\n };\n\n // Engines can emit several tool-call blocks in one turn. Read-only calls\n // are always parallel. Mutating calls remain serialized by default, but\n // consecutive actions that explicitly declare `parallelSafe` can run in a\n // write batch. Reads and writes are separate batches so the model's stated\n // order still controls what data a same-turn read can observe.\n const toolResultParts: EngineContentPart[] = [];\n let parallelBatch: import(\"./engine/types.js\").EngineToolCallPart[] = [];\n let parallelBatchKind: ParallelBatchKind | null = null;\n const flushParallelBatch = async () => {\n if (parallelBatch.length === 0) return;\n const batch = parallelBatch;\n parallelBatch = [];\n parallelBatchKind = null;\n toolResultParts.push(...(await Promise.all(batch.map(runToolCall))));\n };\n\n for (const toolCall of toolCallParts) {\n const batchKind = getParallelBatchKind(toolCall);\n if (batchKind) {\n if (parallelBatchKind && parallelBatchKind !== batchKind) {\n await flushParallelBatch();\n }\n parallelBatchKind = batchKind;\n parallelBatch.push(toolCall);\n } else {\n await flushParallelBatch();\n toolResultParts.push(await runToolCall(toolCall));\n }\n }\n await flushParallelBatch();\n\n messages.push({ role: \"user\", content: toolResultParts });\n if (requestedActionStop) {\n send({ type: \"text\", text: requestedActionStop.message });\n break;\n }\n }\n\n if (!signal.aborted) send({ type: \"done\" });\n return usage;\n}\n\nexport function createProductionAgentHandler(\n options: ProductionAgentOptions,\n): H3EventHandler {\n // Undefined = let each engine pick its own defaultModel at request time.\n const configuredModel = options.model;\n\n // Resolve actions — prefer `actions`, fall back to deprecated `scripts`\n const resolvedActions = options.actions ?? options.scripts ?? {};\n\n // Engine tools are derived from the action registry at request time so that\n // registries which mutate after handler creation (e.g. MCP servers added via\n // the settings UI) show up to the LLM without a process restart. MCP tools\n // are also scope-filtered per request — a user-scope server added by Alice\n // must not appear in Bob's tool list in a shared-process deployment.\n const getEngineTools = (\n actions: Record<string, ActionEntry> = resolvedActions,\n ) => {\n const filtered: Record<string, ActionEntry> = {};\n for (const [name, entry] of Object.entries(actions)) {\n if (name.startsWith(\"mcp__\") && !isMcpToolAllowedForRequest(name)) {\n continue;\n }\n filtered[name] = entry;\n }\n return actionsToEngineTools(filtered);\n };\n\n return defineEventHandler(async (event) => {\n if (getMethod(event) !== \"POST\") {\n setResponseStatus(event, 405);\n return { error: \"Method not allowed\" };\n }\n\n let body: AgentChatRequest;\n try {\n body = await readBody(event);\n } catch {\n setResponseStatus(event, 400);\n return { error: \"Invalid request body\" };\n }\n\n const {\n message,\n history = [],\n structuredHistory,\n references = [],\n threadId,\n attachments,\n displayMessage,\n internalContinuation,\n model: requestModel,\n engine: requestEngine,\n effort: requestEffort,\n browserTabId,\n scope,\n } = body;\n const requestBrowserTabId = normalizeBrowserTabId(browserTabId);\n const requestChatScope = normalizeChatScope(scope);\n const requestRunCtx = ensureRequestRunContext();\n if (requestRunCtx) {\n requestRunCtx.browserTabId = requestBrowserTabId;\n requestRunCtx.chatScope = requestChatScope;\n }\n const requestMode: AgentExecutionMode =\n body.mode === \"plan\" ? \"plan\" : \"act\";\n const hasMessageText =\n typeof message === \"string\" && message.trim().length > 0;\n const hasAttachments = Array.isArray(attachments) && attachments.length > 0;\n if (!hasMessageText && !hasAttachments) {\n setResponseStatus(event, 400);\n return { error: \"message is required\" };\n }\n let requestMessage = hasMessageText ? message : \"Use the attached context.\";\n let requestAttachments = Array.isArray(attachments) ? attachments : [];\n let requestDisplayMessage = displayMessage;\n\n // Resolve owner first so we can look up a per-owner API key. Users\n // who bring their own key use their key for this request (durable\n // across serverless cold starts via the settings table).\n const ownerEmail = await resolveAgentOwnerEmail(options, event);\n const preparedRequest = await options.prepareRequest?.({\n event,\n ownerEmail,\n message: requestMessage,\n displayMessage: requestDisplayMessage,\n attachments: requestAttachments,\n references,\n threadId,\n internalContinuation: Boolean(internalContinuation),\n mode: requestMode,\n });\n if (preparedRequest) {\n if (\n typeof preparedRequest.message === \"string\" &&\n preparedRequest.message.trim().length > 0\n ) {\n requestMessage = preparedRequest.message;\n }\n if (typeof preparedRequest.displayMessage === \"string\") {\n requestDisplayMessage = preparedRequest.displayMessage;\n }\n if (Array.isArray(preparedRequest.attachments)) {\n requestAttachments = preparedRequest.attachments;\n }\n }\n\n // Pre-upload chat image attachments through the framework file-upload\n // provider (Builder.io by default). The model still sees the base64\n // multimodal content for vision; we only ADD the hosted URL so the agent\n // can embed the image in slides / docs / outbound messages.\n //\n // When no provider is configured, leave attachments untouched and inject a\n // hint recommending Builder.io connect — the model can still see the\n // image, it just can't reference it as a URL until upload is set up.\n if (hasAttachments && requestAttachments.some((a) => a.type === \"image\")) {\n try {\n const preUpload = await preUploadImageAttachments({\n attachments: requestAttachments,\n ownerEmail,\n });\n if (preUpload.injectedText) {\n requestMessage = requestMessage\n ? `${requestMessage}\\n\\n${preUpload.injectedText}`\n : preUpload.injectedText;\n }\n } catch (err) {\n console.warn(\n \"[agent-native] preUploadImageAttachments failed:\",\n err instanceof Error ? err.message : String(err),\n );\n }\n }\n\n // When a per-request engine override is specified, resolve the API key\n // for that provider instead of the global active engine's provider.\n let userApiKey: string | undefined;\n if (requestEngine) {\n const provider = engineToProvider(requestEngine);\n userApiKey = await getOwnerApiKey(provider, ownerEmail);\n if (!userApiKey && !shouldBlockDeployCredentialFallback()) {\n // Single-tenant only: env fallback for the requested provider. Shared\n // hosted deploys never silently substitute the deploy-level key for\n // an authenticated user (see getOwnerActiveApiKey for the full\n // rationale).\n const envVar = PROVIDER_TO_ENV[provider];\n userApiKey = envVar ? readDeployCredentialEnv(envVar) : undefined;\n }\n } else {\n userApiKey = await getOwnerActiveApiKey(ownerEmail);\n }\n\n // `options.apiKey` is the value the template constructed the plugin with\n // (e.g. wired from a deployment env var). On a shared hosted deploy this\n // is the same cross-tenant hazard as any deploy-level provider key:\n // accepting it as the final fallback would silently bill every key-less\n // user to the deployment's account. Honour it only when the generic\n // deploy fallback policy allows it.\n const effectiveApiKey = shouldBlockDeployCredentialFallback()\n ? userApiKey\n : (userApiKey ??\n options.apiKey ??\n readDeployCredentialEnv(\"ANTHROPIC_API_KEY\"));\n\n // Resolve engine — per-request engine override takes priority\n let engine: AgentEngine;\n try {\n engine = await resolveEngine({\n engineOption: requestEngine ?? options.engine,\n apiKey: effectiveApiKey,\n model: configuredModel,\n });\n } catch {\n engine = await resolveEngine({\n apiKey: effectiveApiKey,\n });\n }\n\n // Honor the model the user picked in the settings UI (written via\n // `manage-agent-engine` action=\"set\"), but only when the caller hasn't overridden it for\n // this request or at plugin construction time. Read per-request so a\n // dropdown change in the UI takes effect without a server restart. Skip\n // the DB read entirely when a higher-precedence value is set.\n const model =\n requestModel ??\n configuredModel ??\n (await getStoredModelForEngine(engine)) ??\n engine.defaultModel;\n const reasoningEffort = normalizeReasoningEffortForModel(\n model,\n isReasoningEffort(requestEffort)\n ? requestEffort\n : options.reasoningEffort,\n );\n\n options.onEngineResolved?.(engine, model);\n\n // One-line per-turn resolution log so it's obvious in dev which engine\n // is actually handling the request. `requestEngine` is what the client\n // sent from the model picker; `engine.name` is what resolveEngine picked.\n // Divergence between them is the usual cause of \"status says builder but\n // no [builder-engine] log lines appear\" confusion.\n console.log(\n `[agent-chat] resolved engine=${engine.name} model=${model} requestEngine=${requestEngine ?? \"(none)\"}`,\n );\n\n // Check for API key before starting a run (only for anthropic engine)\n if (engine.name === \"anthropic\" && !effectiveApiKey) {\n setResponseHeader(event, \"Content-Type\", \"text/event-stream\");\n setResponseHeader(event, \"Cache-Control\", \"no-cache\");\n setResponseHeader(event, \"Connection\", \"keep-alive\");\n const encoder = new TextEncoder();\n return new ReadableStream({\n start(controller) {\n controller.enqueue(\n encoder.encode(\n `data: ${JSON.stringify({ type: \"missing_api_key\" })}\\n\\n`,\n ),\n );\n controller.close();\n },\n });\n }\n\n // Run all independent pre-send steps in parallel. Each of these hits\n // the DB or invokes an action; running them sequentially was the\n // single biggest contributor to pre-LLM latency.\n const enrichedMessage = enrichMessage(requestMessage, references);\n const loopSettingsPromise = readAgentLoopSettings({\n userEmail: ownerEmail ?? getRequestUserEmail() ?? null,\n orgId: getRequestOrgId() ?? null,\n }).catch(() => readAgentLoopSettings({}));\n\n let systemPromptError: any = null;\n const systemPromptPromise = (async (): Promise<string> => {\n try {\n return typeof options.systemPrompt === \"function\"\n ? await options.systemPrompt(event)\n : options.systemPrompt;\n } catch (error) {\n systemPromptError = error;\n return \"\";\n }\n })();\n\n const screenContextPromise = (async (): Promise<string> => {\n try {\n const viewScreenAction = resolvedActions[\"view-screen\"];\n if (viewScreenAction) {\n const result = await viewScreenAction.run({});\n if (result && result !== \"(no output)\") {\n const screenText =\n typeof result === \"string\"\n ? result\n : JSON.stringify(result, null, 2);\n return `\\n\\n<current-screen>\\n${screenText}\\n</current-screen>`;\n }\n } else {\n const navigation = await readAppStateForBrowserTab(\n \"navigation\",\n requestBrowserTabId,\n );\n if (navigation) {\n return `\\n\\n<current-screen>\\n${JSON.stringify(navigation, null, 2)}\\n</current-screen>`;\n }\n }\n } catch {\n // DB not ready or no navigation state — skip silently\n }\n return \"\";\n })();\n\n const urlContextPromise = (async (): Promise<string> => {\n try {\n const url = (await readAppStateForBrowserTab(\n \"__url__\",\n requestBrowserTabId,\n )) as {\n pathname?: string;\n search?: string;\n hash?: string;\n searchParams?: Record<string, string>;\n } | null;\n if (url && (url.pathname || url.search || url.hash)) {\n const lines: string[] = [];\n if (url.pathname) lines.push(`pathname: ${url.pathname}`);\n if (url.search) lines.push(`search: ${url.search}`);\n if (url.hash) lines.push(`hash: ${url.hash}`);\n if (url.searchParams && Object.keys(url.searchParams).length > 0) {\n lines.push(\"searchParams:\");\n for (const [k, v] of Object.entries(url.searchParams)) {\n lines.push(` ${k}: ${v}`);\n }\n }\n return `\\n\\n<current-url>\\n${lines.join(\"\\n\")}\\n</current-url>`;\n }\n } catch {\n // DB not ready — skip silently\n }\n return \"\";\n })();\n\n // Selection context: written by the client when the user presses Cmd+I\n // with text selected on the page. Treat anything older than 5 minutes\n // as stale and ignore it.\n const SELECTION_TTL_MS = 5 * 60 * 1000;\n const selectionContextPromise = (async (): Promise<string> => {\n try {\n const sel = (await readAppState(\"pending-selection-context\")) as {\n text?: string;\n capturedAt?: number;\n } | null;\n if (!sel?.text) return \"\";\n const capturedAt =\n typeof sel.capturedAt === \"number\" ? sel.capturedAt : 0;\n if (Date.now() - capturedAt > SELECTION_TTL_MS) return \"\";\n return (\n `\\n\\nThe user has selected the following text and pressed Cmd+I to focus the agent. ` +\n `Treat this as the immediate context to act on:\\n` +\n `<selection>\\n${sel.text}\\n</selection>`\n );\n } catch {\n // DB not ready — skip silently\n }\n return \"\";\n })();\n\n // On the first message of a conversation, inject workspace inventory\n // so the agent knows what files, skills, jobs, and custom agents exist.\n // Templates can opt out via `skipFilesContext: true` when the inventory\n // is unrelated to the app's job (e.g. a voice-first macro tracker).\n const filesContextPromise = (async (): Promise<string> => {\n let filesContext = \"\";\n if (options.skipFilesContext) return filesContext;\n if (history.length === 0) {\n try {\n const { resourceListAccessible, SHARED_OWNER, resourceGet } =\n await import(\"../resources/store.js\");\n const {\n getResourceKind,\n parseCustomAgentProfile,\n parseRemoteAgentManifest,\n parseSkillMetadata,\n } = await import(\"../resources/metadata.js\");\n const ownerEmail = getRequestUserEmail();\n if (!ownerEmail) throw new Error(\"no authenticated user\");\n const allResources = await resourceListAccessible(ownerEmail);\n\n if (allResources.length > 0) {\n const fileLines: string[] = [];\n const skillLines: string[] = [];\n const agentLines: string[] = [];\n const jobLines: string[] = [];\n for (const r of allResources) {\n const scope = r.owner === SHARED_OWNER ? \"shared\" : \"personal\";\n const kind = getResourceKind(r.path);\n if (kind === \"file\") {\n fileLines.push(` ${r.path} (${scope})`);\n continue;\n }\n\n if (kind === \"job\") {\n jobLines.push(` ${r.path} (${scope})`);\n continue;\n }\n\n if (\n kind === \"skill\" ||\n kind === \"agent\" ||\n kind === \"remote-agent\"\n ) {\n const full = await resourceGet(r.id);\n if (!full) continue;\n if (kind === \"skill\") {\n const skill = parseSkillMetadata(full.content, r.path);\n skillLines.push(\n ` ${skill?.name || r.path} — ${skill?.description || r.path} (${scope}, ${r.path})`,\n );\n } else if (kind === \"agent\") {\n const agent = parseCustomAgentProfile(full.content, r.path);\n agentLines.push(\n ` ${agent?.name || r.path} — ${agent?.description || \"Custom workspace agent\"} (${scope}, ${r.path}${agent?.model ? `, model: ${agent.model}` : \"\"})`,\n );\n } else {\n const agent = parseRemoteAgentManifest(full.content, r.path);\n agentLines.push(\n ` ${agent?.name || r.path} — ${agent?.description || \"Connected A2A agent\"} (${scope}, remote via ${r.path})`,\n );\n }\n }\n }\n const blocks: string[] = [];\n if (fileLines.length > 0) {\n blocks.push(\n `<available-files>\\nFiles in the workspace:\\n${fileLines.join(\"\\n\")}\\n\\nTo read a file's contents, use the resource-read action with the file path.\\n</available-files>`,\n );\n }\n if (skillLines.length > 0) {\n blocks.push(\n `<available-skills>\\nSkills in the workspace:\\n${skillLines.join(\"\\n\")}\\n</available-skills>`,\n );\n }\n if (agentLines.length > 0) {\n blocks.push(\n `<available-agents>\\nCustom and connected agents in the workspace:\\n${agentLines.join(\"\\n\")}\\n\\nCustom agents under agents/*.md can be mentioned or used via agent-teams (action: \"spawn\") with the agent parameter.\\n</available-agents>`,\n );\n }\n if (jobLines.length > 0) {\n blocks.push(\n `<available-jobs>\\nScheduled tasks in the workspace:\\n${jobLines.join(\"\\n\")}\\n</available-jobs>`,\n );\n }\n filesContext =\n blocks.length > 0 ? `\\n\\n${blocks.join(\"\\n\\n\")}` : \"\";\n }\n } catch {\n // Resources not available — skip silently\n }\n }\n return filesContext;\n })();\n\n const [\n systemPrompt,\n screenBlock,\n urlBlock,\n selectionBlock,\n filesContext,\n loopSettings,\n ] = await Promise.all([\n systemPromptPromise,\n screenContextPromise,\n urlContextPromise,\n selectionContextPromise,\n filesContextPromise,\n loopSettingsPromise,\n ]);\n\n if (systemPromptError) {\n setResponseHeader(event, \"Content-Type\", \"text/event-stream\");\n setResponseHeader(event, \"Cache-Control\", \"no-cache\");\n const encoder = new TextEncoder();\n const err = systemPromptError;\n return new ReadableStream({\n start(controller) {\n controller.enqueue(\n encoder.encode(\n `data: ${JSON.stringify({ type: \"error\", error: `Failed to load system prompt: ${err?.message ?? String(err)}` })}\\n\\n`,\n ),\n );\n controller.close();\n },\n });\n }\n const screenContext = screenBlock + urlBlock + selectionBlock;\n const requestActions =\n requestMode === \"plan\"\n ? createPlanModeActionRegistry(resolvedActions)\n : resolvedActions;\n const requestTools = getEngineTools(requestActions);\n const requestSystemPrompt =\n requestMode === \"plan\"\n ? `${systemPrompt}\\n\\n${PLAN_MODE_SYSTEM_PROMPT}`\n : systemPrompt;\n\n // Pre-compute agent references for A2A resolution inside the run\n const agentRefs = references.filter((r) => r.type === \"agent\");\n const customAgentRefs = references.filter((r) => r.type === \"custom-agent\");\n const planModeAgentNote =\n requestMode === \"plan\" && agentRefs.length > 0\n ? \"\\n\\n<plan-mode-note>Connected external agent mentions were not called because Plan mode is read-only. Mention that they can be called after the user switches to Act mode if the plan needs them.</plan-mode-note>\"\n : \"\";\n\n const userContent = buildUserContentWithAttachments({\n text: enrichedMessage + screenContext + filesContext + planModeAgentNote,\n attachments: requestAttachments,\n });\n\n const historyMessages =\n structuredHistoryToEngineMessages(structuredHistory) ??\n history\n .filter((m) => m.content.trim())\n .map(\n (m): EngineMessage => ({\n role: m.role as \"user\" | \"assistant\",\n content: [{ type: \"text\" as const, text: m.content }],\n }),\n );\n\n const messages: EngineMessage[] = [\n ...historyMessages,\n { role: \"user\" as const, content: userContent },\n ];\n\n // If there's already an active run for this thread, reject with 409 so\n // the client can queue or wait rather than silently aborting the existing run.\n if (threadId) {\n const existingRun = await getActiveRunForThreadAsync(threadId);\n if (existingRun?.status === \"running\") {\n setResponseStatus(event, 409);\n return {\n error: \"Run already in progress for this thread\",\n activeRunId: existingRun.runId,\n };\n }\n }\n\n // Start agent loop in background via run-manager\n const runId = generateRunId();\n if (options.onRunPrepared && !internalContinuation) {\n const messageToPersist =\n typeof requestDisplayMessage === \"string\" &&\n requestDisplayMessage.trim().length > 0\n ? requestDisplayMessage\n : requestMessage;\n await options.onRunPrepared({\n runId,\n threadId,\n message: messageToPersist,\n attachments: requestAttachments,\n });\n }\n startRun(\n runId,\n threadId ?? runId,\n async (send, signal) => {\n // Notify listeners that a run has started (used by agent teams)\n if (options.onRunStart) {\n await options.onRunStart(send, threadId ?? runId);\n }\n\n // Resolve custom workspace agent mentions first.\n if (customAgentRefs.length > 0) {\n const ownerEmail = getRequestUserEmail();\n if (!ownerEmail) throw new Error(\"no authenticated user\");\n const { findAccessibleCustomAgent } =\n await import(\"../resources/agents.js\");\n const customResults = await Promise.allSettled(\n customAgentRefs.map(async (ref) => {\n send({\n type: \"agent_call\",\n agent: ref.name,\n status: \"start\",\n });\n try {\n const profile = await findAccessibleCustomAgent(\n ownerEmail,\n ref.refId || ref.path || ref.name,\n );\n if (!profile) {\n throw new Error(\"Profile not found\");\n }\n\n const profilePrompt =\n `${requestSystemPrompt}\\n\\n<custom-agent-profile name=\"${profile.name}\" path=\"${profile.path}\">\\n` +\n (profile.description ? `${profile.description}\\n\\n` : \"\") +\n `${profile.instructions}\\n</custom-agent-profile>`;\n\n let responseText = \"\";\n const subUsage = await runAgentLoop({\n engine,\n model: profile.model ?? model,\n systemPrompt: profilePrompt,\n tools: requestTools,\n messages: [\n {\n role: \"user\",\n content: [\n { type: \"text\", text: enrichedMessage + screenContext },\n ],\n },\n ],\n actions: requestActions,\n send: (event) => {\n if (event.type === \"text\") {\n responseText += event.text;\n send({\n type: \"agent_call_text\",\n agent: ref.name,\n text: event.text,\n });\n }\n },\n signal,\n reasoningEffort,\n providerOptions: options.providerOptions,\n executionMode: requestMode,\n maxIterations: loopSettings.maxIterations,\n });\n\n // Attribute custom-agent sub-calls under their own label\n // so the Usage panel separates them from the main chat.\n try {\n const ownerEmail = options.resolveOwnerEmail\n ? await options.resolveOwnerEmail(event)\n : getRequestUserEmail();\n if (!ownerEmail) {\n // Skip usage recording for unauthenticated runs.\n return;\n }\n const { recordUsage } = await import(\"../usage/store.js\");\n await recordUsage({\n ownerEmail,\n inputTokens: subUsage.inputTokens,\n outputTokens: subUsage.outputTokens,\n cacheReadTokens: subUsage.cacheReadTokens,\n cacheWriteTokens: subUsage.cacheWriteTokens,\n model: subUsage.model,\n label: `custom-agent:${ref.name}`,\n });\n } catch {}\n\n send({\n type: \"agent_call\",\n agent: ref.name,\n status: \"done\",\n });\n return `<agent-response name=\"${ref.name}\" id=\"${ref.refId}\" type=\"custom-agent\">\\n${responseText}\\n</agent-response>`;\n } catch (err: any) {\n send({\n type: \"agent_call\",\n agent: ref.name,\n status: \"error\",\n });\n const message =\n userFacingLlmCredentialError(err, {\n agentName: ref.name,\n }) ?? `Failed to run ${ref.name}: ${err?.message}`;\n return `<agent-response name=\"${ref.name}\" id=\"${ref.refId}\" type=\"custom-agent\" error=\"true\">\\n${message}\\n</agent-response>`;\n }\n }),\n );\n\n const customResponses = customResults\n .filter(\n (result): result is PromiseFulfilledResult<string> =>\n result.status === \"fulfilled\",\n )\n .map((result) => result.value);\n\n if (customResponses.length > 0) {\n const agentContext =\n \"Responses from custom workspace agents:\\n\\n\" +\n customResponses.join(\"\\n\\n\");\n const lastMsg = messages[messages.length - 1];\n if (lastMsg?.role === \"user\" && Array.isArray(lastMsg.content)) {\n const textPart = lastMsg.content.find(\n (p): p is import(\"./engine/types.js\").EngineTextPart =>\n p.type === \"text\",\n );\n if (textPart) {\n textPart.text = agentContext + \"\\n\\n\" + textPart.text;\n }\n }\n }\n }\n\n // Resolve connected agent @-mentions via A2A calls.\n if (agentRefs.length > 0 && requestMode !== \"plan\") {\n const [{ A2AClient, callAgent }, { resolveA2ACallerAuth }] =\n await Promise.all([\n import(\"../a2a/client.js\"),\n import(\"../a2a/caller-auth.js\"),\n ]);\n const results = await Promise.allSettled(\n agentRefs.map(async (ref) => {\n send({\n type: \"agent_call\",\n agent: ref.name,\n status: \"start\",\n });\n try {\n const callerAuth = await resolveA2ACallerAuth({\n includeGoogleToken: true,\n });\n const a2aClient = new A2AClient(ref.path, callerAuth.apiKey);\n const a2aMetadata = callerAuth.metadata;\n\n let responseText = \"\";\n let lastSentLength = 0;\n\n try {\n for await (const task of a2aClient.stream(\n {\n role: \"user\",\n parts: [\n {\n type: \"text\",\n text: enrichedMessage + screenContext,\n },\n ],\n },\n Object.keys(a2aMetadata).length > 0\n ? { metadata: a2aMetadata }\n : undefined,\n )) {\n const newText =\n task.status?.message?.parts\n ?.filter(\n (p): p is { type: \"text\"; text: string } =>\n p.type === \"text\",\n )\n ?.map((p) => p.text)\n ?.join(\"\") ?? \"\";\n\n if (newText.length > lastSentLength) {\n send({\n type: \"agent_call_text\",\n agent: ref.name,\n text: newText.slice(lastSentLength),\n });\n lastSentLength = newText.length;\n }\n responseText = newText;\n }\n } catch {\n if (!responseText) {\n responseText = await callAgent(\n ref.path,\n enrichedMessage + screenContext,\n {\n apiKey: callerAuth.apiKey,\n userEmail: callerAuth.userEmail,\n orgDomain: callerAuth.orgDomain,\n orgSecret: callerAuth.orgSecret,\n },\n );\n }\n }\n responseText =\n userFacingLlmCredentialError(responseText, {\n agentName: ref.name,\n }) ?? responseText;\n\n send({\n type: \"agent_call\",\n agent: ref.name,\n status: \"done\",\n });\n return `<agent-response name=\"${ref.name}\" id=\"${ref.refId}\">\\n${responseText}\\n</agent-response>`;\n } catch (err: any) {\n send({\n type: \"agent_call\",\n agent: ref.name,\n status: \"error\",\n });\n const message =\n userFacingLlmCredentialError(err, {\n agentName: ref.name,\n }) ?? `Failed to reach ${ref.name}: ${err?.message}`;\n return `<agent-response name=\"${ref.name}\" id=\"${ref.refId}\" error=\"true\">\\n${message}\\n</agent-response>`;\n }\n }),\n );\n\n const agentResponses_local: string[] = [];\n for (const result of results) {\n if (result.status === \"fulfilled\") {\n agentResponses_local.push(result.value);\n }\n }\n\n if (agentResponses_local.length > 0) {\n const agentContext =\n \"Responses from other agents:\\n\\n\" +\n agentResponses_local.join(\"\\n\\n\");\n const lastMsg = messages[messages.length - 1];\n if (lastMsg?.role === \"user\" && Array.isArray(lastMsg.content)) {\n const textPart = lastMsg.content.find(\n (p): p is import(\"./engine/types.js\").EngineTextPart =>\n p.type === \"text\",\n );\n if (textPart) {\n textPart.text = agentContext + \"\\n\\n\" + textPart.text;\n }\n }\n }\n }\n\n // Apply experiment variant overrides (A/B testing)\n let effectiveModel = model;\n try {\n const { resolveActiveExperimentConfig } =\n await import(\"../observability/experiments.js\");\n if (!ownerEmail) {\n // Without an authenticated owner we can't resolve user-scoped experiments.\n throw new Error(\"no authenticated user\");\n }\n const expConfig = await resolveActiveExperimentConfig(ownerEmail);\n if (expConfig) {\n if (typeof expConfig.configs.model === \"string\") {\n effectiveModel = expConfig.configs.model;\n }\n }\n } catch {\n // Experiments module unavailable — use default model\n }\n\n const agentLoopOpts = {\n engine,\n model: effectiveModel,\n systemPrompt: requestSystemPrompt,\n tools: requestTools,\n messages,\n actions: requestActions,\n send,\n signal,\n ownerEmail,\n orgId: getRequestOrgId() ?? null,\n reasoningEffort,\n providerOptions: options.providerOptions,\n executionMode: requestMode,\n maxIterations: loopSettings.maxIterations,\n finalResponseGuard: options.finalResponseGuard,\n };\n\n let loopUsage: AgentLoopUsage;\n let instrumented = false;\n try {\n const { getObservabilityConfig, instrumentAgentLoop } =\n await import(\"../observability/traces.js\");\n const obsConfig = await getObservabilityConfig();\n if (obsConfig.enabled) {\n instrumented = true;\n loopUsage = await instrumentAgentLoop({\n runAgentLoop,\n loopOpts: agentLoopOpts,\n runId,\n threadId: threadId ?? null,\n userId: ownerEmail,\n config: obsConfig,\n });\n }\n } catch (err) {\n // If instrumentation setup failed, fall through to uninstrumented.\n // If the agent loop itself failed (via instrumentAgentLoop), re-throw.\n if (instrumented) throw err;\n }\n if (!instrumented) {\n loopUsage = await runAgentLoop(agentLoopOpts);\n }\n\n // Record token usage for cost monitoring so the Usage panel in\n // settings works in every mode, including local dev.\n try {\n const ownerEmail = options.resolveOwnerEmail\n ? await options.resolveOwnerEmail(event)\n : getRequestUserEmail();\n if (\n ownerEmail &&\n (loopUsage.inputTokens > 0 ||\n loopUsage.outputTokens > 0 ||\n loopUsage.cacheReadTokens > 0 ||\n loopUsage.cacheWriteTokens > 0)\n ) {\n const { recordUsage } = await import(\"../usage/store.js\");\n await recordUsage({\n ownerEmail,\n inputTokens: loopUsage.inputTokens,\n outputTokens: loopUsage.outputTokens,\n cacheReadTokens: loopUsage.cacheReadTokens,\n cacheWriteTokens: loopUsage.cacheWriteTokens,\n model: loopUsage.model,\n label: body.usageLabel || \"chat\",\n });\n }\n } catch {\n // Usage recording failed — don't break the run\n }\n },\n options.onRunComplete\n ? (run) => options.onRunComplete!(run, threadId)\n : undefined,\n {\n softTimeoutMs: options.runSoftTimeoutMs,\n useHostedSoftTimeoutDefault: true,\n },\n );\n\n // Subscribe to the run and stream events to the client\n const stream = subscribeToRun(runId, 0);\n if (!stream) {\n setResponseStatus(event, 500);\n return { error: \"Failed to start agent run\" };\n }\n\n setResponseHeader(event, \"Content-Type\", \"text/event-stream\");\n setResponseHeader(event, \"Cache-Control\", \"no-cache\");\n setResponseHeader(event, \"Connection\", \"keep-alive\");\n setResponseHeader(event, \"X-Run-Id\", runId);\n\n return stream;\n });\n}\n\nexport {\n getActiveRunForThread,\n getActiveRunForThreadAsync,\n getRun,\n abortRun,\n subscribeToRun,\n};\n"]}