@agent-native/core 0.49.21 → 0.49.23

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 (72) hide show
  1. package/dist/agent/production-agent.d.ts +1 -0
  2. package/dist/agent/production-agent.d.ts.map +1 -1
  3. package/dist/agent/production-agent.js +15 -0
  4. package/dist/agent/production-agent.js.map +1 -1
  5. package/dist/agent/tool-search.d.ts.map +1 -1
  6. package/dist/agent/tool-search.js +32 -7
  7. package/dist/agent/tool-search.js.map +1 -1
  8. package/dist/cli/connect.d.ts +2 -3
  9. package/dist/cli/connect.d.ts.map +1 -1
  10. package/dist/cli/connect.js +60 -37
  11. package/dist/cli/connect.js.map +1 -1
  12. package/dist/cli/pr-visual-recap-workflow.d.ts +5 -7
  13. package/dist/cli/pr-visual-recap-workflow.d.ts.map +1 -1
  14. package/dist/cli/pr-visual-recap-workflow.js +5 -7
  15. package/dist/cli/pr-visual-recap-workflow.js.map +1 -1
  16. package/dist/cli/recap.d.ts +44 -52
  17. package/dist/cli/recap.d.ts.map +1 -1
  18. package/dist/cli/recap.js +420 -414
  19. package/dist/cli/recap.js.map +1 -1
  20. package/dist/client/AssistantChat.d.ts +6 -3
  21. package/dist/client/AssistantChat.d.ts.map +1 -1
  22. package/dist/client/AssistantChat.js +1 -1
  23. package/dist/client/AssistantChat.js.map +1 -1
  24. package/dist/client/MultiTabAssistantChat.d.ts.map +1 -1
  25. package/dist/client/MultiTabAssistantChat.js +23 -3
  26. package/dist/client/MultiTabAssistantChat.js.map +1 -1
  27. package/dist/client/agent-chat.d.ts +8 -0
  28. package/dist/client/agent-chat.d.ts.map +1 -1
  29. package/dist/client/agent-chat.js +24 -1
  30. package/dist/client/agent-chat.js.map +1 -1
  31. package/dist/client/blocks/library/AnnotatedCodeBlock.d.ts.map +1 -1
  32. package/dist/client/blocks/library/AnnotatedCodeBlock.js +4 -1
  33. package/dist/client/blocks/library/AnnotatedCodeBlock.js.map +1 -1
  34. package/dist/client/blocks/library/DiffBlock.d.ts.map +1 -1
  35. package/dist/client/blocks/library/DiffBlock.js +20 -7
  36. package/dist/client/blocks/library/DiffBlock.js.map +1 -1
  37. package/dist/client/blocks/library/annotation-rail.js +5 -5
  38. package/dist/client/blocks/library/annotation-rail.js.map +1 -1
  39. package/dist/client/composer/TiptapComposer.d.ts.map +1 -1
  40. package/dist/client/composer/TiptapComposer.js +15 -2
  41. package/dist/client/composer/TiptapComposer.js.map +1 -1
  42. package/dist/coding-tools/run-code.d.ts.map +1 -1
  43. package/dist/coding-tools/run-code.js +69 -17
  44. package/dist/coding-tools/run-code.js.map +1 -1
  45. package/dist/integrations/plugin.d.ts.map +1 -1
  46. package/dist/integrations/plugin.js +2 -0
  47. package/dist/integrations/plugin.js.map +1 -1
  48. package/dist/mcp/build-server.d.ts +12 -10
  49. package/dist/mcp/build-server.d.ts.map +1 -1
  50. package/dist/mcp/build-server.js +53 -89
  51. package/dist/mcp/build-server.js.map +1 -1
  52. package/dist/mcp/connect-route.d.ts.map +1 -1
  53. package/dist/mcp/connect-route.js +5 -4
  54. package/dist/mcp/connect-route.js.map +1 -1
  55. package/dist/mcp/oauth-token.d.ts +6 -5
  56. package/dist/mcp/oauth-token.d.ts.map +1 -1
  57. package/dist/mcp/oauth-token.js.map +1 -1
  58. package/dist/mcp/stdio.d.ts.map +1 -1
  59. package/dist/mcp/stdio.js +9 -2
  60. package/dist/mcp/stdio.js.map +1 -1
  61. package/dist/provider-api/staging.d.ts.map +1 -1
  62. package/dist/provider-api/staging.js +6 -4
  63. package/dist/provider-api/staging.js.map +1 -1
  64. package/dist/server/agent-chat-plugin.d.ts +10 -7
  65. package/dist/server/agent-chat-plugin.d.ts.map +1 -1
  66. package/dist/server/agent-chat-plugin.js.map +1 -1
  67. package/docs/content/actions.md +1 -1
  68. package/docs/content/external-agents.md +53 -40
  69. package/docs/content/mcp-protocol.md +16 -11
  70. package/docs/content/pr-visual-recap.md +1 -1
  71. package/docs/content/template-plan.md +1 -1
  72. package/package.json +1 -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 EngineEvent,\n} from \"./engine/types.js\";\nimport { EngineError } from \"./engine/types.js\";\nimport { resolveMaxOutputTokensForEngine } from \"./engine/output-tokens.js\";\nimport {\n backfillEngineMessagesToolResults,\n stringifyToolUseInputForGateway,\n unmatchedToolResultReplayText,\n} from \"./engine/translate-anthropic.js\";\nimport {\n resolveEngine,\n registerBuiltinEngines,\n getStoredModelForEngine,\n normalizeModelForEngine,\n} from \"./engine/index.js\";\nimport {\n LLM_MISSING_CREDENTIALS_ERROR_CODE,\n LLM_MISSING_CREDENTIALS_MESSAGE,\n userFacingLlmCredentialError,\n} from \"./engine/credential-errors.js\";\nimport { PROVIDER_TO_ENV } from \"./engine/provider-env-vars.js\";\nimport { readAppState } from \"../application-state/script-helpers.js\";\nimport { isDemoModeEnabled } from \"../demo/config.js\";\nimport { redactDemoData, redactDemoString } from \"../demo/redact.js\";\nimport {\n startRun,\n subscribeToRun,\n getActiveRunForThread,\n getActiveRunForThreadAsync,\n getRun,\n abortRun,\n tryClaimRunSlot,\n} from \"./run-manager.js\";\nimport type { ActiveRun } from \"./run-manager.js\";\nimport { readBody } from \"../server/h3-helpers.js\";\nimport { isReadOnlyShellCommand } from \"../coding-tools/index.js\";\nimport {\n getRequestRunContext,\n ensureRequestRunContext,\n getRequestOrgId,\n getRequestUserEmail,\n} from \"../server/request-context.js\";\nimport { isMcpToolAllowedForRequest } from \"../mcp-client/visibility.js\";\nimport { isMcpActionResult } from \"../mcp-client/app-result.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 {\n writeLedgerEntry,\n readLedgerEntry,\n clearLedgerForThread,\n} from \"./run-store.js\";\nimport { preUploadAttachments } from \"../file-upload/pre-upload-attachments.js\";\nimport { extensionIdFromPathname } from \"../extensions/path.js\";\nimport { applyContextDirectives } from \"./context-xray/apply-directives.js\";\nimport {\n completeRun as completeProgressRun,\n startRun as startProgressRun,\n updateRunProgress,\n} from \"../progress/registry.js\";\nimport { loadContextDirectives } from \"./context-xray/directives-store.js\";\nimport {\n buildManifest,\n writeContextManifest,\n} from \"./context-xray/manifest.js\";\nimport { computeProtectedSegmentIds } from \"./context-xray/segments.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/**\n * Context passed as the optional second argument to an action's `run`.\n * Defined in `../action.js` (cycle-free home) and re-exported here so existing\n * importers (e.g. `scripts/call-agent.ts`) keep their import path.\n */\nexport type { ActionRunContext, ActionCaller } from \"../action.js\";\n\nexport interface ActionEntry {\n tool: ActionTool;\n run: (\n args: any,\n context?: import(\"../action.js\").ActionRunContext,\n ) => Promise<any> | any;\n /** HTTP exposure config. `false` = agent-only. Omitted = auto-inferred from name. */\n http?: import(\"../action.js\").ActionHttpConfig | false;\n /** Whether HTTP/frontend action calls must have an authenticated owner.\n * Defaults to true; false lets safe metadata/read actions run with\n * `ctx.userEmail` undefined when auth resolution returns 401/403. */\n requiresAuth?: boolean;\n /** Whether the action is exposed to the agent as a callable tool. Only an\n * explicit `false` hides it from every agent tool surface (in-app assistant,\n * MCP, A2A, job/trigger runners) while leaving it frontend/HTTP-callable.\n * Set by `defineAction`'s `agentTool` option. */\n agentTool?: boolean;\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 change 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 /** Optional deep-link builder. When set, MCP/A2A surfaces append an\n * \"Open in <app> →\" link built from the call's args + result. Pure, sync,\n * best-effort. See `defineAction` and the `external-agents` skill. */\n link?: import(\"../action.js\").ActionLinkBuilder;\n /** Optional MCP Apps UI resource for hosts that support inline interactive\n * app iframes. CLI/non-UI hosts still receive the normal tool result and\n * any deep link from `link`. */\n mcpApp?: import(\"../action.js\").ActionMcpAppConfig;\n /**\n * Per-tool timeout override in milliseconds. When set, the agent loop uses\n * this value instead of the global TOOL_TIMEOUT_MS (60 s) for this action.\n * Useful for long-running tools such as sandboxed code execution.\n */\n timeoutMs?: number;\n /**\n * Per-tool max-result-chars override. When set, the agent loop truncates\n * the result to this many characters instead of the global 50 000 cap.\n */\n maxResultChars?: number;\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 mutating bash 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 if (name === \"bash\") {\n return isPlanModeReadOnlyBashCall(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 isPlanModeReadOnlyBashCall(input: unknown): boolean {\n if (!input || typeof input !== \"object\") return false;\n const command = (input as Record<string, unknown>).command;\n if (typeof command !== \"string\") return false;\n return isReadOnlyShellCommand(command);\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\nfunction createPlanModeBashAction(entry: ActionEntry): ActionEntry {\n return {\n ...entry,\n readOnly: true,\n tool: {\n ...entry.tool,\n description: `${entry.tool.description}\\n\\nPlan mode: only read-only inspection commands such as pwd, ls, find, rg, grep, cat, sed -n, head, tail, wc, and git status/diff/show/log are allowed.`,\n },\n run: async (args, context) => {\n if (!isPlanModeReadOnlyBashCall(args)) {\n return planModeBlockedMessage(\"bash\", \"command is not read-only\");\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 (name === \"bash\") {\n filtered[name] = createPlanModeBashAction(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 /** App/template id used for org-scoped per-app model defaults. */\n appId?: 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 * App-level default tool limits. Each action's own `timeoutMs` /\n * `maxResultChars` takes precedence; this sets the fallback for actions\n * that don't declare their own limits.\n */\n toolLimits?: { timeoutMs?: number; maxResultChars?: number };\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;\nconst MAX_SELECTION_CONTEXT_CHARS = 8_000;\nconst MAX_RESOURCE_INVENTORY_ITEMS = 40;\nconst MAX_RESOURCE_INVENTORY_DESCRIPTION_CHARS = 160;\nconst MAX_INLINE_SKILL_REFERENCE_CHARS = 40_000;\n\n/**\n * Hard cap on the `<current-screen>` block injected into EVERY user message.\n *\n * The screen snapshot comes from the template's `view-screen` action, which can\n * be unbounded — e.g. a recording/meeting page returns the full transcript +\n * every segment. Injected on every turn with no cap, that single block can blow\n * past the model's context window and hard-error the chat with\n * `context_length_exceeded` (observed: a brand-new \"hi\" message failing because\n * an open recording's transcript shipped in `<current-screen>`). Keep this to a\n * compact page summary; the agent can call `view-screen` (or a data action like\n * `get-recording-player-data`) for full detail on demand.\n */\nconst MAX_SCREEN_CONTEXT_CHARS = 10_000;\n\nfunction capScreenContext(text: string): string {\n if (text.length <= MAX_SCREEN_CONTEXT_CHARS) return text;\n return `${text.slice(0, MAX_SCREEN_CONTEXT_CHARS)}\\n\\n…[current-screen snapshot truncated after ${MAX_SCREEN_CONTEXT_CHARS.toLocaleString()} chars to protect the context window. Call the view-screen action for the full snapshot, or a data action (e.g. get-recording-player-data) for full transcripts.]`;\n}\n\nfunction capSelectionContext(text: string): string {\n if (text.length <= MAX_SELECTION_CONTEXT_CHARS) return text;\n return `${text.slice(0, MAX_SELECTION_CONTEXT_CHARS)}\\n\\n…[selection truncated after ${MAX_SELECTION_CONTEXT_CHARS.toLocaleString()} chars. Ask the user or use an app data action if the omitted text is required.]`;\n}\n\nfunction compactInventoryDescription(description: string): string {\n const oneLine = description.replace(/\\s+/g, \" \").trim();\n if (oneLine.length <= MAX_RESOURCE_INVENTORY_DESCRIPTION_CHARS) {\n return oneLine;\n }\n return `${oneLine.slice(0, MAX_RESOURCE_INVENTORY_DESCRIPTION_CHARS - 1)}…`;\n}\n\nfunction limitInventoryLines(lines: string[], label: string): string[] {\n if (lines.length <= MAX_RESOURCE_INVENTORY_ITEMS) return lines;\n const omitted = lines.length - MAX_RESOURCE_INVENTORY_ITEMS;\n return [\n ...lines.slice(0, MAX_RESOURCE_INVENTORY_ITEMS),\n ` … ${omitted} more ${label} omitted; use the resources tool with action \"list\" or \"read\" for the full inventory.`,\n ];\n}\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\n * @internal exported for unit tests only\n */\nexport function 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 // Gemini phrasing\n msg.includes(\"input token count exceeds\") ||\n msg.includes(\"request too large\")\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\n/** @internal exported for unit tests only */\nexport function isRetryableError(err: unknown): boolean {\n if (!(err instanceof Error)) return false;\n const msg = err.message.toLowerCase();\n const engineErr = err instanceof EngineError ? err : null;\n const code = (engineErr?.errorCode ?? \"\").toLowerCase();\n\n // Hard non-retryable codes — check these first.\n if (code === \"builder_gateway_timeout\") return false;\n if (\n code === \"rate_limit_exceeded\" ||\n msg.includes(\"daily gateway request cap\")\n )\n return false;\n\n // Prefer structured fields from the engine before falling back to message\n // keyword matching — avoids false positives on user-supplied text that\n // happens to contain \"rate_limit\" etc.\n if (engineErr) {\n // Provider explicitly said it is retryable.\n if (engineErr.providerRetryable === true) return true;\n // HTTP status-code checks (429, 500, 502, 503, 529 = Anthropic overloaded).\n const sc = engineErr.statusCode;\n if (sc === 429 || sc === 500 || sc === 502 || sc === 503 || sc === 529)\n return true;\n }\n\n return (\n code === \"builder_gateway_error\" ||\n code === \"builder_gateway_network_error\" ||\n code === \"http_500\" ||\n code === \"http_502\" ||\n code === \"http_503\" ||\n code === \"http_504\" ||\n code === \"timeout\" ||\n // Anthropic\n msg.includes(\"overloaded\") ||\n msg.includes(\"rate_limit\") ||\n msg.includes(\"529\") ||\n // OpenAI phrasing\n msg.includes(\"rate limit reached\") ||\n // Google / Gemini\n msg.includes(\"resource_exhausted\") ||\n msg.includes(\"quota exceeded\") ||\n // Generic HTTP codes\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// ---------------------------------------------------------------------------\n// Context-window overflow recovery\n// ---------------------------------------------------------------------------\n\n/**\n * Number of recent messages to protect when trimming tool results.\n * Messages in the tail of this length are left completely intact; only\n * older messages have their tool-result text replaced with a stub.\n */\nconst CONTEXT_TRIM_KEEP_TAIL = 10;\nconst CONTEXT_TRIM_STUB =\n \"[result trimmed to save context — re-run the tool if needed]\";\n\n/**\n * Attempt one aggressive trim of old tool-result content to reduce the\n * context window usage. Tool-result messages older than the last\n * {@link CONTEXT_TRIM_KEEP_TAIL} messages have their text replaced with a\n * short stub. All user/assistant text messages and the recent tail are\n * preserved exactly.\n *\n * Returns a new array — the original is not mutated.\n * Returns `null` when there are no trimable tool results (so the caller can\n * skip the retry).\n */\nexport function trimOldToolResults(\n messages: EngineMessage[],\n keepTail = CONTEXT_TRIM_KEEP_TAIL,\n): EngineMessage[] | null {\n const cutoff = Math.max(0, messages.length - keepTail);\n let trimmed = false;\n\n const result = messages.map((msg, idx): EngineMessage => {\n // Keep messages in the protected tail intact\n if (idx >= cutoff) return msg;\n\n // Only touch user messages that contain tool-result parts\n if (msg.role !== \"user\") return msg;\n\n const hasToolResult = msg.content.some((p) => p.type === \"tool-result\");\n if (!hasToolResult) return msg;\n\n const stubbedContent = msg.content.map(\n (p): import(\"./engine/types.js\").EngineContentPart => {\n if (p.type !== \"tool-result\") return p;\n trimmed = true;\n return { ...p, content: CONTEXT_TRIM_STUB };\n },\n );\n\n return { role: \"user\", content: stubbedContent };\n });\n\n return trimmed ? result : null;\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 onAbort = () => {\n clearTimeout(timer);\n reject(new Error(\"aborted\"));\n };\n const timer = setTimeout(() => {\n signal.removeEventListener(\"abort\", onAbort);\n resolve();\n }, ms);\n signal.addEventListener(\"abort\", onAbort, { once: true });\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, attachmentName?: string): string {\n if (text.length <= MAX_TEXT_ATTACHMENT_CHARS) return text;\n\n const omitted = text.length - MAX_TEXT_ATTACHMENT_CHARS;\n const readHint = attachmentName\n ? ` Use the \\`read-attachment\\` tool with name=\"${escapeAttachmentAttribute(attachmentName)}\" to read the rest.`\n : \"\";\n return `${text.slice(0, MAX_TEXT_ATTACHMENT_CHARS)}\\n\\n[Attachment truncated after ${MAX_TEXT_ATTACHMENT_CHARS.toLocaleString()} characters; ${omitted.toLocaleString()} characters omitted.${readHint}]`;\n}\n\nfunction formatTextAttachment(att: AgentChatAttachment): string | null {\n if (typeof att.text !== \"string\" || att.text.length === 0) return null;\n const text = truncateTextAttachment(\n unwrapTextAttachmentEnvelope(att.text),\n att.name,\n );\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\") {\n // Prefer the hosted URL when one exists (set by preUploadAttachments).\n // Anthropic / AI SDK accept URL image parts natively; for other engines\n // the translate layer falls back to base64 automatically.\n const uploadedUrl = (att as any).url as string | undefined;\n if (uploadedUrl) {\n userContent.push({\n type: \"image\",\n url: uploadedUrl,\n } as unknown as EngineContentPart);\n continue;\n }\n\n if (!att.data) continue;\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 } else {\n // The client sent an image in an unsupported format (HEIC, TIFF, AVIF,\n // etc.). Inject a short text placeholder so the model knows the image\n // was present but could not be processed, rather than silently omitting\n // it and leaving the model confused (\"I don't see an image\").\n const mime = match?.[1] ?? att.contentType ?? \"unknown format\";\n const label = att.name ? `\"${att.name}\"` : \"An image\";\n textAttachments.push(\n `[${label} could not be processed — unsupported image format (${mime}). ` +\n `Inform the user that only JPEG, PNG, GIF, and WebP images are supported, ` +\n `and ask them to convert the file before attaching.]`,\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\nfunction coerceStructuredToolResultWire(part: {\n toolCallId?: unknown;\n content?: unknown;\n}): { toolCallId: string; content: string } {\n const toolCallId =\n typeof part.toolCallId === \"string\"\n ? part.toolCallId.trim()\n : part.toolCallId === undefined || part.toolCallId === null\n ? \"\"\n : String(part.toolCallId).trim();\n let content = \"\";\n if (typeof part.content === \"string\") {\n content = part.content;\n } else if (part.content !== undefined && part.content !== null) {\n try {\n content = JSON.stringify(part.content);\n } catch {\n content = String(part.content);\n }\n }\n return { toolCallId, content };\n}\n\nexport function structuredHistoryToEngineMessages(\n history: AgentChatStructuredMessage[] | undefined,\n): EngineMessage[] | null {\n if (!Array.isArray(history)) return null;\n\n const toolUseById = new Map<string, { name: string; input: unknown }>();\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 const input = part.input ?? part.args ?? {};\n toolUseById.set(id, { name, input });\n content.push({\n type: \"tool-call\",\n id,\n name,\n input,\n });\n continue;\n }\n\n if (part.type === \"tool-result\" && message.role === \"user\") {\n const wire = coerceStructuredToolResultWire(part);\n const lookup =\n wire.toolCallId.length > 0\n ? toolUseById.get(wire.toolCallId)\n : undefined;\n const toolName =\n typeof part.toolName === \"string\" && part.toolName.trim().length > 0\n ? part.toolName\n : lookup?.name;\n if (!toolName?.trim()) {\n content.push({\n type: \"text\",\n text: unmatchedToolResultReplayText({\n toolCallId:\n wire.toolCallId.length > 0 ? wire.toolCallId : \"(missing)\",\n content: wire.content,\n isError: part.isError,\n }),\n });\n continue;\n }\n if (!wire.toolCallId) {\n // Named tool but no id — cannot emit a valid paired `tool-result`.\n content.push({\n type: \"text\",\n text: unmatchedToolResultReplayText({\n toolCallId: \"(missing)\",\n content: wire.content,\n isError: part.isError,\n }),\n });\n continue;\n }\n const toolInput =\n typeof part.toolInput === \"string\" && part.toolInput.length > 0\n ? part.toolInput\n : stringifyToolUseInputForGateway(lookup?.input);\n content.push({\n type: \"tool-result\",\n toolCallId: wire.toolCallId,\n toolName,\n toolInput,\n content: wire.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\n ? backfillEngineMessagesToolResults(messages)\n : null;\n}\n\n/** Build enriched message with file/skill/mention references */\nfunction capInlineSkillReferenceContent(text: string): string {\n const trimmed = text.trim();\n if (trimmed.length <= MAX_INLINE_SKILL_REFERENCE_CHARS) return trimmed;\n const omitted = trimmed.length - MAX_INLINE_SKILL_REFERENCE_CHARS;\n return `${trimmed.slice(0, MAX_INLINE_SKILL_REFERENCE_CHARS)}\\n\\n[Skill content truncated after ${MAX_INLINE_SKILL_REFERENCE_CHARS.toLocaleString()} chars; ${omitted.toLocaleString()} chars omitted.]`;\n}\n\nfunction escapeReferenceAttribute(value: string): string {\n return value.replace(/&/g, \"&amp;\").replace(/\"/g, \"&quot;\");\n}\n\nasync function resolveSkillReferenceContent(\n ref: AgentChatReference,\n): Promise<string | null> {\n if (!ref.path && !ref.name) return null;\n\n if (ref.source === \"resource\") {\n const ownerEmail = getRequestUserEmail();\n if (!ownerEmail || !ref.path) return null;\n try {\n const { resourceEffectiveContext, resourceGet } =\n await import(\"../resources/store.js\");\n const resourceOptions = {\n userEmail: ownerEmail,\n orgId: getRequestOrgId() ?? null,\n };\n const effective = await resourceEffectiveContext(ownerEmail, ref.path, {\n ...resourceOptions,\n });\n if (!effective.effectiveResource) return null;\n const full = await resourceGet(effective.effectiveResource.id, {\n ...resourceOptions,\n });\n return full?.content ?? null;\n } catch {\n return null;\n }\n }\n\n try {\n const { loadAgentsBundle } = await import(\"../server/agents-bundle.js\");\n const bundle = await loadAgentsBundle();\n const normalizedPath = ref.path.replace(/\\/+$/g, \"\");\n const skill = Object.values(bundle.skills).find((candidate) => {\n const skillPath = candidate.dir.replace(/\\/+$/g, \"\");\n return (\n candidate.meta.name === ref.name ||\n normalizedPath === skillPath ||\n normalizedPath === `${skillPath}/SKILL.md`\n );\n });\n return skill?.content ?? null;\n } catch {\n return null;\n }\n}\n\nasync function enrichMessage(\n message: string,\n references: AgentChatReference[],\n): Promise<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 const skillLines = await Promise.all(\n skillRefs.map(async (r) => {\n const content = await resolveSkillReferenceContent(r);\n if (content?.trim()) {\n return `- ${r.name} (${r.path})\\n\\n<applied-skill name=\"${escapeReferenceAttribute(r.name)}\" path=\"${escapeReferenceAttribute(r.path)}\" source=\"${escapeReferenceAttribute(r.source)}\">\\n${capInlineSkillReferenceContent(content)}\\n</applied-skill>`;\n }\n return `- ${r.name} (${r.path})${\n r.source === \"resource\"\n ? ' — content was not inlined; read with the resources tool (action: \"read\") if needed'\n : \" — content was not inlined; read with the read tool if needed\"\n }`;\n }),\n );\n parts.push(\n \"Applied skills (read and follow before acting):\\n\" +\n skillLines.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 | \"max_tokens\"\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 === \"max_tokens\"\n ? \"The previous LLM call reached the model output-token cap before the response finished.\"\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 isToolResultOnlyUserMessage(message: EngineMessage): boolean {\n return (\n message.role === \"user\" &&\n message.content.length > 0 &&\n message.content.every((part) => part.type === \"tool-result\")\n );\n}\n\n/** Start of the active turn on an internal continuation (real user prompt). */\nfunction findCurrentTurnStartForContinuation(\n messages: EngineMessage[],\n): number {\n let i = messages.length - 1;\n while (i >= 0) {\n const message = messages[i];\n if (message.role !== \"user\") {\n i--;\n continue;\n }\n const userText = textFromEngineMessage(message);\n if (userText.startsWith(AGENT_INTERNAL_CONTINUE_PROMPT)) {\n i--;\n continue;\n }\n if (isToolResultOnlyUserMessage(message)) {\n i--;\n continue;\n }\n return i;\n }\n return 0;\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 * Counts how many times each write (non-read-only) tool call was interrupted\n * before returning a result in the continuation history. When a connection\n * drops mid-tool-execution the client sends a placeholder result\n * (\"Interrupted before this tool returned a result.\") so the model knows\n * what was attempted. If the same write tool is called again with identical\n * input in the next continuation, this count prevents infinite retry loops.\n */\nconst INTERRUPTED_TOOL_RESULT_MARKER =\n \"Interrupted before this tool returned a result.\";\nconst MAX_WRITE_TOOL_INTERRUPTIONS = 2;\n\nfunction seedWriteToolInterruptionsFromHistory(\n messages: EngineMessage[],\n actions: Record<string, ActionEntry>,\n): Map<string, number> {\n const interruptions = new Map<string, number>();\n if (!isInternalContinuationTurn(messages)) return interruptions;\n\n const turnStart = findCurrentTurnStartForContinuation(messages);\n const turnMessages = messages.slice(turnStart);\n\n const pendingToolCalls = new Map<string, { name: string; input: unknown }>();\n for (const message of turnMessages) {\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, { name: part.name, input: part.input });\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 if (\n typeof part.content === \"string\" &&\n part.content.includes(INTERRUPTED_TOOL_RESULT_MARKER)\n ) {\n const key = toolCallCacheKey(call.name, call.input);\n interruptions.set(key, (interruptions.get(key) ?? 0) + 1);\n }\n }\n }\n\n return interruptions;\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 /**\n * Attachments submitted with this turn (pasted text, files, images), passed\n * through to each tool's `ActionRunContext.attachments` so actions can\n * consume a large pasted artifact by reference instead of having the model\n * re-emit it as a tool argument. See `create-extension`'s\n * `contentFromAttachment`.\n */\n attachments?: AgentChatAttachment[];\n reasoningEffort?: ReasoningEffort;\n providerOptions?: any;\n maxOutputTokens?: number;\n executionMode?: AgentExecutionMode;\n maxIterations?: number;\n finalResponseGuard?: AgentLoopFinalResponseGuard;\n threadId?: string;\n turnId?: string;\n /**\n * App-level default limits applied to every tool call unless the individual\n * ActionEntry overrides them with its own timeoutMs / maxResultChars.\n */\n toolLimits?: { timeoutMs?: number; maxResultChars?: number };\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 writeToolInterruptions = seedWriteToolInterruptionsFromHistory(\n messages,\n actions,\n );\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 let terminalStopReason:\n | Extract<EngineEvent, { type: \"stop\" }>[\"reason\"]\n | undefined;\n const toolCallErrors = new Map<\n string,\n { name: string; input: unknown; error: string }\n >();\n let contextMessages = messages;\n\n if (opts.threadId) {\n try {\n const directives = await loadContextDirectives(opts.threadId, {\n ownerEmail: opts.ownerEmail ?? null,\n });\n const protectedSegmentIds = computeProtectedSegmentIds(messages);\n const { messages: transformedMessages, appliedStatus } =\n applyContextDirectives(messages, directives, {\n protectedSegmentIds,\n });\n const manifest = await buildManifest({\n threadId: opts.threadId,\n ...(opts.turnId ? { turnId: opts.turnId } : {}),\n model,\n rawMessages: messages,\n sentMessages: transformedMessages,\n appliedStatus,\n directives,\n protectedSegmentIds,\n source: \"structured\",\n enforceable: true,\n });\n contextMessages = transformedMessages;\n void writeContextManifest(opts.threadId, manifest).catch((err) => {\n console.warn(\n \"[context-xray] failed to write manifest:\",\n err instanceof Error ? err.message : String(err),\n );\n });\n } catch (err) {\n console.warn(\n \"[context-xray] context transform skipped:\",\n err instanceof Error ? err.message : String(err),\n );\n }\n }\n\n for (let retry = 0; ; retry++) {\n assistantContent = undefined;\n bufferedAssistantText = \"\";\n terminalStopReason = undefined;\n toolCallErrors.clear();\n try {\n const streamOpts = {\n model,\n systemPrompt,\n messages: contextMessages,\n tools,\n abortSignal: signal,\n maxOutputTokens: resolveMaxOutputTokensForEngine(\n engine.name,\n opts.maxOutputTokens,\n ),\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 // Forward thinking deltas as a distinct event type so the UI\n // can render a collapsible \"Thinking…\" cell while the model\n // reasons, then collapse it when content arrives.\n send({ type: \"thinking\", text: event.text });\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\") {\n terminalStopReason = event.reason;\n if (event.reason === \"error\") {\n throw new EngineError(event.error ?? \"Engine stream error\", {\n errorCode: event.errorCode,\n upgradeUrl: event.upgradeUrl,\n statusCode: event.statusCode,\n providerRetryable: event.providerRetryable,\n });\n }\n }\n }\n\n break;\n } catch (err: unknown) {\n if (signal.aborted) throw err;\n if (isContextTooLongError(err)) {\n // ── One-shot recovery: trim old tool results and retry once ────────\n // Only attempt recovery on the first overflow (retry === 0) to avoid\n // infinite trim loops. On subsequent overflows fall through to the\n // terminal error.\n if (retry === 0) {\n const trimmed = trimOldToolResults(contextMessages);\n if (trimmed !== null) {\n // Replace the sent messages for this iteration with the trimmed\n // version, clear any partial output, and retry immediately\n // (no delay — context errors are not transient).\n contextMessages = trimmed;\n send({ type: \"clear\" });\n continue;\n }\n }\n throw new EngineError(\n \"Conversation has grown too long. The agent tried to recover automatically but the context is still too large. You can continue in a new chat, or ask the agent to summarize the conversation and 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 if (terminalStopReason === \"max_tokens\") {\n flushBufferedAssistantText();\n appendAgentLoopContinuation(messages, \"max_tokens\");\n continue;\n }\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 // Reached only when the model made tool calls (toolCallParts.length > 0),\n // i.e. it's about to do more work and produce a *new* final answer. Give\n // that next final-answer cycle a fresh guard-retry budget; otherwise\n // finalGuardRetries stays at 1 from a prior cycle and the guard is\n // permanently disabled for the rest of a long multi-step run.\n finalGuardRetries = 0;\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 const wireToolInput = JSON.stringify(toolCall.input ?? {});\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 toolInput: wireToolInput,\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 toolInput: wireToolInput,\n content: result,\n };\n }\n\n // Guard against write tools that have been interrupted too many times in\n // this turn (connection drop mid-execution → agent retries → repeat).\n // A write tool that keeps failing likely has a timeout / large-payload\n // problem; retrying indefinitely creates duplicates and confuses users.\n //\n // LEDGER RECOVERY: before applying the give-up budget, check whether the\n // previous invocation's zombie actually completed and wrote its result to\n // the durable ledger. If so, return the ledger result without re-executing\n // (prevents the duplicate side effect) and skip counting it toward the\n // interruption budget.\n if (!actionEntry.readOnly) {\n const writeCacheKey = toolCallCacheKey(toolCall.name, toolCall.input);\n const priorInterruptions =\n writeToolInterruptions.get(writeCacheKey) ?? 0;\n\n if (priorInterruptions > 0 && opts.threadId) {\n const ledgerResult = await readLedgerEntry(\n opts.threadId,\n writeCacheKey,\n );\n if (ledgerResult !== null) {\n // Zombie completed — recover the real result without re-executing.\n const result =\n `(Recovered from prior interrupted chunk — action already completed.)\\n\\n` +\n ledgerResult;\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 return {\n type: \"tool-result\" as const,\n toolCallId: toolCall.id,\n toolName: toolCall.name,\n toolInput: wireToolInput,\n content: result,\n };\n }\n }\n\n if (priorInterruptions >= MAX_WRITE_TOOL_INTERRUPTIONS) {\n const result =\n `The ${toolCall.name} action was interrupted ${priorInterruptions} time(s) in this session — ` +\n `likely a connection timeout with a large payload. Please start a new chat and try again, ` +\n `or split the request into smaller pieces.`;\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 requestedActionStop ??= {\n message:\n `I stopped because the ${toolCall.name} action was interrupted ${priorInterruptions} time(s) in a row. ` +\n `This usually means the connection timed out while processing a large request. ` +\n `Please start a new chat and try again, or break the request into smaller parts.`,\n errorCode: \"repeated_write_tool_interruption\",\n };\n return {\n type: \"tool-result\" as const,\n toolCallId: toolCall.id,\n toolName: toolCall.name,\n toolInput: wireToolInput,\n content: result,\n isError: true,\n };\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 toolInput: wireToolInput,\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 toolInput: wireToolInput,\n content: result,\n isError: true,\n };\n }\n\n const DEFAULT_TOOL_RESULT_CHARS = 50_000;\n const DEFAULT_TOOL_TIMEOUT_MS = 60_000;\n const toolTimeoutMs =\n actionEntry.timeoutMs ??\n opts.toolLimits?.timeoutMs ??\n DEFAULT_TOOL_TIMEOUT_MS;\n const toolMaxResultChars =\n actionEntry.maxResultChars ??\n opts.toolLimits?.maxResultChars ??\n DEFAULT_TOOL_RESULT_CHARS;\n let result: string;\n let isError = false;\n let mcpApp:\n | import(\"../mcp-client/app-result.js\").AgentMcpAppPayload\n | undefined;\n try {\n const timeoutSignal = AbortSignal.timeout(toolTimeoutMs);\n // Keep a reference to the action promise so we can attach a zombie-\n // detection continuation AFTER Promise.race abandons it on run abort.\n // The promise itself is not awaited here — Promise.race owns the await.\n const actionPromise = Promise.resolve(\n actionEntry.run(toolCall.input as Record<string, string>, {\n send,\n userEmail: getRequestUserEmail(),\n orgId: getRequestOrgId() ?? null,\n caller: \"tool\",\n attachments: opts.attachments,\n signal,\n }),\n );\n\n // When the run is aborted (soft-timeout / user cancel) while this tool\n // call is in flight, Promise.race below will throw \"Run aborted\" and the\n // action's promise becomes a zombie — it keeps running but its result is\n // never returned to the loop. If the zombie eventually resolves, write\n // the result to the durable ledger keyed by (threadId, toolKey) so the\n // next continuation chunk can recover it instead of re-executing the\n // side effect.\n if (opts.threadId && !actionEntry.readOnly) {\n const ledgerThreadId = opts.threadId;\n const ledgerToolKey = toolCallCacheKey(toolCall.name, toolCall.input);\n actionPromise\n .then((zombieRaw: unknown) => {\n const zombieMcp = isMcpActionResult(zombieRaw) ? zombieRaw : null;\n const zombieText = zombieMcp ? zombieMcp.text : zombieRaw;\n const zombieStr =\n typeof zombieText === \"string\"\n ? zombieText\n : JSON.stringify(zombieText, null, 2);\n void writeLedgerEntry(ledgerThreadId, ledgerToolKey, zombieStr);\n })\n .catch(() => {\n // Action errored in the zombie — no result to ledger.\n });\n }\n\n const raw = await Promise.race([\n actionPromise,\n new Promise<never>((_, reject) => {\n timeoutSignal.addEventListener(\"abort\", () =>\n reject(\n new Error(\n `Tool call timed out after ${toolTimeoutMs / 1000} seconds`,\n ),\n ),\n );\n }),\n // Stop waiting on the tool when the run itself is aborted (e.g. the\n // run-manager soft timeout, or a user cancel). Without this leg the\n // loop blocks on an in-flight tool for up to TOOL_TIMEOUT_MS after\n // the run signal has already fired.\n new Promise<never>((_, reject) => {\n if (signal.aborted) {\n reject(new Error(\"Run aborted\"));\n return;\n }\n signal.addEventListener(\n \"abort\",\n () => reject(new Error(\"Run aborted\")),\n { once: true },\n );\n }),\n ]);\n const mcpResult = isMcpActionResult(raw) ? raw : null;\n const rawForAgent = mcpResult ? mcpResult.text : raw;\n if (\n mcpResult &&\n mcpResult.raw &&\n typeof mcpResult.raw === \"object\" &&\n (mcpResult.raw as Record<string, unknown>).isError === true\n ) {\n isError = true;\n }\n mcpApp = mcpResult?.mcpApp;\n // Demo mode: the agent must see the same fake data the UI shows, so\n // it can't read out a real name/email on a live screen share. Redact\n // the structured result (not the JSON string) so IDs/dates/URLs stay\n // intact and follow-up tool calls still work. Gated — the expensive\n // walk only runs when demo mode is on.\n let redacted: unknown = rawForAgent;\n const demoMode = await isDemoModeEnabled();\n if (demoMode) {\n mcpApp = undefined;\n if (typeof rawForAgent === \"string\") {\n try {\n redacted = JSON.stringify(\n redactDemoData(JSON.parse(rawForAgent)),\n null,\n 2,\n );\n } catch {\n redacted = redactDemoString(rawForAgent);\n }\n } else {\n redacted = redactDemoData(rawForAgent);\n }\n }\n let resultStr =\n typeof redacted === \"string\"\n ? redacted\n : JSON.stringify(redacted, null, 2);\n if (resultStr.length > toolMaxResultChars) {\n const truncated = resultStr.slice(0, toolMaxResultChars);\n resultStr = `${truncated}\\n\\n...[truncated — full result was ${resultStr.length.toLocaleString()} chars; only first ${toolMaxResultChars.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 change 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 { notifyActionChange } =\n await import(\"../server/action-change.js\");\n const owner = opts.ownerEmail ?? getRequestUserEmail() ?? undefined;\n const orgId = opts.orgId ?? getRequestOrgId() ?? undefined;\n await notifyActionChange({\n actionName: 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({\n type: \"tool_done\",\n tool: toolCall.name,\n result,\n ...(mcpApp ? { mcpApp } : {}),\n });\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 toolInput: wireToolInput,\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 // Unknown tool name → serialize (null), don't fold it into the read-only\n // parallel batch. Misclassifying it as \"read\" lets it run via Promise.all\n // alongside genuine reads, which can reorder it ahead of a later mutating\n // call and break the model's intended sequencing.\n if (!entry) return null;\n if (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 // TypeScript can't track ??= through async closures; cast to known type.\n const stop = requestedActionStop as {\n message: string;\n errorCode?: string;\n };\n send({ type: \"text\", text: stop.message });\n break;\n }\n }\n\n if (!signal.aborted) {\n send({ type: \"done\" });\n // Clean up any zombie-completion ledger entries for this thread now that\n // the turn completed normally. If the run was aborted the ledger must stay\n // intact so the next continuation chunk can still recover from it.\n if (opts.threadId) {\n void clearLedgerForThread(opts.threadId).catch(() => {});\n }\n }\n return usage;\n}\n\nfunction backgroundChatProgressRunId(turnId: string): string {\n const normalized = turnId\n .trim()\n .replace(/[^a-zA-Z0-9._:-]+/g, \"-\")\n .replace(/^-+|-+$/g, \"\")\n .slice(0, 160);\n return `agent-chat-${normalized || \"turn\"}`;\n}\n\nfunction isRecoverableContinuationError(event: {\n type: \"error\";\n error: string;\n errorCode?: string;\n recoverable?: boolean;\n}): boolean {\n const code = String(event.errorCode ?? \"\").toLowerCase();\n const message = event.error.toLowerCase();\n if (code === \"builder_gateway_error\") return false;\n return (\n event.recoverable === true ||\n code === \"builder_gateway_timeout\" ||\n code === \"stale_run\" ||\n code === \"timeout\" ||\n code === \"timeout_error\" ||\n code === \"http_408\" ||\n code === \"http_429\" ||\n code === \"http_529\" ||\n code === \"run_timeout\" ||\n message.includes(\"timeout\") ||\n message.includes(\"temporarily unavailable\")\n );\n}\n\nfunction endsAtInternalContinuationBoundary(run: ActiveRun): boolean {\n const last = run.events.at(-1)?.event;\n if (!last) return false;\n if (last.type === \"auto_continue\" || last.type === \"loop_limit\") {\n return true;\n }\n return last.type === \"error\" && isRecoverableContinuationError(last);\n}\n\nfunction progressStepFromAgentChatEvent(event: AgentChatEvent): string | null {\n switch (event.type) {\n case \"activity\":\n return event.label;\n case \"tool_start\":\n return `Using ${event.tool}.`;\n case \"tool_done\":\n return `Finished ${event.tool}.`;\n case \"agent_call\":\n return event.status === \"start\"\n ? `Calling ${event.agent}.`\n : event.status === \"done\"\n ? `Finished ${event.agent}.`\n : `${event.agent} failed.`;\n case \"agent_task\":\n return event.status === \"running\"\n ? \"Started background task.\"\n : event.status === \"completed\"\n ? \"Background task completed.\"\n : \"Background task failed.\";\n case \"agent_task_update\":\n return event.currentStep || event.preview || \"Background task updated.\";\n case \"text\":\n return \"Agent is responding.\";\n default:\n return null;\n }\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 turnId: requestTurnId,\n model: requestModel,\n engine: requestEngine,\n effort: requestEffort,\n browserTabId,\n scope,\n trackInRunsTray,\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 attachments (images AND files/PDFs) through the framework\n // file-upload provider (Builder.io by default). The model still sees the\n // base64 multimodal content for the current turn; each uploaded attachment\n // also gets a hosted `url` injected so the agent can embed it in slides,\n // docs, or outbound messages, and callers can persist a URL reference\n // instead of the raw base64.\n //\n // When no provider is configured, leave attachments untouched and inject a\n // hint recommending Builder.io connect — the model can still see images via\n // base64, and files via their data URL / text, but has no hosted URL.\n if (\n hasAttachments &&\n requestAttachments.some(\n (a) => a.type === \"image\" || a.type === \"file\" || a.type === \"document\",\n )\n ) {\n try {\n const preUpload = await preUploadAttachments({\n attachments: requestAttachments,\n ownerEmail,\n includeFiles: true,\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] preUploadAttachments failed:\",\n err instanceof Error ? err.message : String(err),\n );\n }\n }\n\n // Persist text-ish attachments as thread-scoped agent_scratch resources so\n // the model can page through them with the `read-attachment` tool. We do\n // this here — before buildUserContentWithAttachments — so the resource IDs\n // are available when we inject the truncation notice into the text content.\n const textAttachmentResourceMap = new Map<\n number,\n { resourceId: string; path: string; totalChars: number }\n >();\n if (hasAttachments && threadId) {\n try {\n const { persistTextAttachmentsAsResources } =\n await import(\"../server/attachment-actions.js\");\n const stored = await persistTextAttachmentsAsResources({\n attachments: requestAttachments,\n threadId,\n ownerEmail,\n });\n for (const [k, v] of stored) {\n textAttachmentResourceMap.set(k, v);\n }\n } catch (err) {\n console.warn(\n \"[agent-native] persistTextAttachmentsAsResources 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 appId: options.appId,\n });\n } catch {\n engine = await resolveEngine({\n apiKey: effectiveApiKey,\n appId: options.appId,\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 modelCandidate =\n requestModel ??\n configuredModel ??\n (await getStoredModelForEngine(engine, { appId: options.appId })) ??\n engine.defaultModel;\n const model = normalizeModelForEngine(engine, modelCandidate);\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({\n type: \"error\",\n error: LLM_MISSING_CREDENTIALS_MESSAGE,\n errorCode: LLM_MISSING_CREDENTIALS_ERROR_CODE,\n })}\\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 enrichedMessagePromise = 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 {},\n {\n userEmail: getRequestUserEmail(),\n orgId: getRequestOrgId() ?? null,\n caller: \"tool\",\n },\n );\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${capScreenContext(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${capScreenContext(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 const extensionId = url.pathname\n ? extensionIdFromPathname(url.pathname)\n : null;\n if (extensionId) lines.push(`extensionId: ${extensionId}`);\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${capSelectionContext(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 {\n resourceListAccessible,\n SHARED_OWNER,\n WORKSPACE_OWNER,\n 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 const orgId = getRequestOrgId();\n if (!ownerEmail) throw new Error(\"no authenticated user\");\n const allResources = await resourceListAccessible(\n ownerEmail,\n undefined,\n { userEmail: ownerEmail, orgId },\n );\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 =\n r.owner === WORKSPACE_OWNER\n ? \"workspace\"\n : r.owner === SHARED_OWNER\n ? \"shared\"\n : \"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 userEmail: ownerEmail,\n orgId,\n });\n if (!full) continue;\n if (kind === \"skill\") {\n const skill = parseSkillMetadata(full.content, r.path);\n skillLines.push(\n ` ${skill?.name || r.path} — ${compactInventoryDescription(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} — ${compactInventoryDescription(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} — ${compactInventoryDescription(agent?.description || \"Connected A2A agent\")} (${scope}, remote via ${r.path})`,\n );\n }\n }\n }\n const blocks: string[] = [];\n if (fileLines.length > 0) {\n const lines = limitInventoryLines(fileLines, \"files\");\n blocks.push(\n `<available-files>\\nFiles in the workspace:\\n${lines.join(\"\\n\")}\\n\\nTo read a resource file's contents, use the resources tool with action \"read\" and the file path.\\n</available-files>`,\n );\n }\n if (skillLines.length > 0) {\n const lines = limitInventoryLines(skillLines, \"skills\");\n blocks.push(\n `<available-skills>\\nSkills in the workspace:\\n${lines.join(\"\\n\")}\\n\\nBefore using a matching workspace skill, read its path with the resources tool using action \"read\"; slash-selected skills are inlined automatically when available.\\n</available-skills>`,\n );\n }\n if (agentLines.length > 0) {\n const lines = limitInventoryLines(agentLines, \"agents\");\n blocks.push(\n `<available-agents>\\nCustom and connected agents in the workspace:\\n${lines.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 const lines = limitInventoryLines(jobLines, \"jobs\");\n blocks.push(\n `<available-jobs>\\nScheduled tasks in the workspace:\\n${lines.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 enrichedMessage,\n ] = await Promise.all([\n systemPromptPromise,\n screenContextPromise,\n urlContextPromise,\n selectionContextPromise,\n filesContextPromise,\n loopSettingsPromise,\n enrichedMessagePromise,\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 // Atomically claim the run slot for this thread. The claim checks SQL for\n // a live (non-stale) running row so two near-simultaneous POSTs on\n // different serverless isolates both see the correct state — a plain\n // read-then-act check races on multi-isolate deployments because both\n // reads see no running row before either insert commits.\n if (threadId) {\n const slot = await tryClaimRunSlot(threadId);\n if (!slot.claimed) {\n setResponseStatus(event, 409);\n return {\n error: \"Run already in progress for this thread\",\n activeRunId: slot.activeRunId,\n };\n }\n }\n\n // Start agent loop in background via run-manager\n const runId = generateRunId();\n const effectiveThreadId = threadId ?? runId;\n const effectiveTurnId =\n typeof requestTurnId === \"string\" && requestTurnId.trim()\n ? requestTurnId.trim()\n : runId;\n const messageToPersist =\n typeof requestDisplayMessage === \"string\" &&\n requestDisplayMessage.trim().length > 0\n ? requestDisplayMessage\n : requestMessage;\n if (options.onRunPrepared && !internalContinuation) {\n await options.onRunPrepared({\n runId,\n threadId,\n message: messageToPersist,\n attachments: requestAttachments,\n });\n }\n\n const trackedProgressOwner =\n trackInRunsTray === true && ownerEmail ? ownerEmail : null;\n const trackedProgressRunId = trackedProgressOwner\n ? backgroundChatProgressRunId(effectiveTurnId)\n : null;\n const trackedProgressMetadata = trackedProgressRunId\n ? {\n kind: \"agent-chat-background\",\n threadId: effectiveThreadId,\n surfaceUrl: `agent-native://threads/${encodeURIComponent(effectiveThreadId)}`,\n turnId: effectiveTurnId,\n }\n : null;\n\n const completeTrackedProgressRun = async (\n run: ActiveRun,\n completionError?: unknown,\n ) => {\n if (!trackedProgressRunId || !trackedProgressOwner) return;\n if (!completionError && endsAtInternalContinuationBoundary(run)) {\n return;\n }\n const terminalStatus =\n run.status === \"aborted\"\n ? \"cancelled\"\n : run.status === \"errored\" || completionError\n ? \"failed\"\n : \"succeeded\";\n const step =\n terminalStatus === \"succeeded\"\n ? \"Agent finished.\"\n : terminalStatus === \"cancelled\"\n ? \"Agent run was cancelled.\"\n : \"Agent stopped with an error.\";\n await completeProgressRun(\n trackedProgressRunId,\n trackedProgressOwner,\n terminalStatus,\n {\n step,\n metadata: {\n ...(trackedProgressMetadata ?? {}),\n runId: run.runId,\n },\n },\n ).catch(() => {});\n };\n\n let lastTrackedProgressUpdateAt = 0;\n const updateTrackedProgressFromEvent = (event: AgentChatEvent) => {\n if (!trackedProgressRunId || !trackedProgressOwner) return;\n const step = progressStepFromAgentChatEvent(event);\n if (!step) return;\n const now = Date.now();\n if (now - lastTrackedProgressUpdateAt < 15_000) return;\n lastTrackedProgressUpdateAt = now;\n void updateRunProgress(trackedProgressRunId, trackedProgressOwner, {\n step,\n metadata: {\n ...(trackedProgressMetadata ?? {}),\n runId,\n },\n }).catch(() => {});\n };\n\n if (trackedProgressRunId && trackedProgressOwner && !internalContinuation) {\n await startProgressRun({\n id: trackedProgressRunId,\n owner: trackedProgressOwner,\n title: messageToPersist,\n step: \"Starting agent.\",\n metadata: trackedProgressMetadata ?? undefined,\n }).catch(() => {});\n }\n\n const handleRunComplete =\n options.onRunComplete || trackedProgressRunId\n ? async (run: ActiveRun) => {\n try {\n await options.onRunComplete?.(run, threadId);\n } catch (err) {\n await completeTrackedProgressRun(run, err);\n throw err;\n }\n await completeTrackedProgressRun(run);\n }\n : undefined;\n\n startRun(\n runId,\n effectiveThreadId,\n async (rawSend, signal) => {\n const send = (event: AgentChatEvent) => {\n rawSend(event);\n updateTrackedProgressFromEvent(event);\n };\n\n send({ type: \"activity\", label: \"Starting agent\" });\n\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 attachments: requestAttachments,\n reasoningEffort,\n providerOptions: options.providerOptions,\n executionMode: requestMode,\n maxIterations: loopSettings.maxIterations,\n finalResponseGuard: options.finalResponseGuard,\n ...(options.toolLimits ? { toolLimits: options.toolLimits } : {}),\n ...(threadId\n ? { threadId: effectiveThreadId, turnId: effectiveTurnId }\n : {}),\n };\n\n send({ type: \"activity\", label: \"Contacting model\" });\n\n // loopUsage is always assigned — either via instrumentAgentLoop or\n // runAgentLoop before use below. The definite-assignment guard is\n // conservative because the try/catch makes the control flow non-obvious.\n let loopUsage: AgentLoopUsage = undefined!;\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 handleRunComplete,\n {\n softTimeoutMs: options.runSoftTimeoutMs,\n useHostedSoftTimeoutDefault: true,\n // Fold continuation runs of one logical turn onto a single durable\n // assistant message. Falls back to the runId (turn == run) when the\n // client doesn't supply a turnId.\n turnId: effectiveTurnId,\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 EngineEvent,\n EngineToolResultPart,\n} from \"./engine/types.js\";\nimport { EngineError } from \"./engine/types.js\";\nimport { resolveMaxOutputTokensForEngine } from \"./engine/output-tokens.js\";\nimport {\n backfillEngineMessagesToolResults,\n stringifyToolUseInputForGateway,\n unmatchedToolResultReplayText,\n} from \"./engine/translate-anthropic.js\";\nimport {\n resolveEngine,\n registerBuiltinEngines,\n getStoredModelForEngine,\n normalizeModelForEngine,\n} from \"./engine/index.js\";\nimport {\n LLM_MISSING_CREDENTIALS_ERROR_CODE,\n LLM_MISSING_CREDENTIALS_MESSAGE,\n userFacingLlmCredentialError,\n} from \"./engine/credential-errors.js\";\nimport { PROVIDER_TO_ENV } from \"./engine/provider-env-vars.js\";\nimport { readAppState } from \"../application-state/script-helpers.js\";\nimport { isDemoModeEnabled } from \"../demo/config.js\";\nimport { redactDemoData, redactDemoString } from \"../demo/redact.js\";\nimport {\n startRun,\n subscribeToRun,\n getActiveRunForThread,\n getActiveRunForThreadAsync,\n getRun,\n abortRun,\n tryClaimRunSlot,\n} from \"./run-manager.js\";\nimport type { ActiveRun } from \"./run-manager.js\";\nimport { readBody } from \"../server/h3-helpers.js\";\nimport { isReadOnlyShellCommand } from \"../coding-tools/index.js\";\nimport {\n getRequestRunContext,\n ensureRequestRunContext,\n getRequestOrgId,\n getRequestUserEmail,\n} from \"../server/request-context.js\";\nimport { isMcpToolAllowedForRequest } from \"../mcp-client/visibility.js\";\nimport { isMcpActionResult } from \"../mcp-client/app-result.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 {\n writeLedgerEntry,\n readLedgerEntry,\n clearLedgerForThread,\n} from \"./run-store.js\";\nimport { preUploadAttachments } from \"../file-upload/pre-upload-attachments.js\";\nimport { extensionIdFromPathname } from \"../extensions/path.js\";\nimport { applyContextDirectives } from \"./context-xray/apply-directives.js\";\nimport {\n completeRun as completeProgressRun,\n startRun as startProgressRun,\n updateRunProgress,\n} from \"../progress/registry.js\";\nimport { loadContextDirectives } from \"./context-xray/directives-store.js\";\nimport {\n buildManifest,\n writeContextManifest,\n} from \"./context-xray/manifest.js\";\nimport { computeProtectedSegmentIds } from \"./context-xray/segments.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/**\n * Context passed as the optional second argument to an action's `run`.\n * Defined in `../action.js` (cycle-free home) and re-exported here so existing\n * importers (e.g. `scripts/call-agent.ts`) keep their import path.\n */\nexport type { ActionRunContext, ActionCaller } from \"../action.js\";\n\nexport interface ActionEntry {\n tool: ActionTool;\n run: (\n args: any,\n context?: import(\"../action.js\").ActionRunContext,\n ) => Promise<any> | any;\n /** HTTP exposure config. `false` = agent-only. Omitted = auto-inferred from name. */\n http?: import(\"../action.js\").ActionHttpConfig | false;\n /** Whether HTTP/frontend action calls must have an authenticated owner.\n * Defaults to true; false lets safe metadata/read actions run with\n * `ctx.userEmail` undefined when auth resolution returns 401/403. */\n requiresAuth?: boolean;\n /** Whether the action is exposed to the agent as a callable tool. Only an\n * explicit `false` hides it from every agent tool surface (in-app assistant,\n * MCP, A2A, job/trigger runners) while leaving it frontend/HTTP-callable.\n * Set by `defineAction`'s `agentTool` option. */\n agentTool?: boolean;\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 change 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 /** Optional deep-link builder. When set, MCP/A2A surfaces append an\n * \"Open in <app> →\" link built from the call's args + result. Pure, sync,\n * best-effort. See `defineAction` and the `external-agents` skill. */\n link?: import(\"../action.js\").ActionLinkBuilder;\n /** Optional MCP Apps UI resource for hosts that support inline interactive\n * app iframes. CLI/non-UI hosts still receive the normal tool result and\n * any deep link from `link`. */\n mcpApp?: import(\"../action.js\").ActionMcpAppConfig;\n /**\n * Per-tool timeout override in milliseconds. When set, the agent loop uses\n * this value instead of the global TOOL_TIMEOUT_MS (60 s) for this action.\n * Useful for long-running tools such as sandboxed code execution.\n */\n timeoutMs?: number;\n /**\n * Per-tool max-result-chars override. When set, the agent loop truncates\n * the result to this many characters instead of the global 50 000 cap.\n */\n maxResultChars?: number;\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 mutating bash 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 if (name === \"bash\") {\n return isPlanModeReadOnlyBashCall(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 isPlanModeReadOnlyBashCall(input: unknown): boolean {\n if (!input || typeof input !== \"object\") return false;\n const command = (input as Record<string, unknown>).command;\n if (typeof command !== \"string\") return false;\n return isReadOnlyShellCommand(command);\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\nfunction createPlanModeBashAction(entry: ActionEntry): ActionEntry {\n return {\n ...entry,\n readOnly: true,\n tool: {\n ...entry.tool,\n description: `${entry.tool.description}\\n\\nPlan mode: only read-only inspection commands such as pwd, ls, find, rg, grep, cat, sed -n, head, tail, wc, and git status/diff/show/log are allowed.`,\n },\n run: async (args, context) => {\n if (!isPlanModeReadOnlyBashCall(args)) {\n return planModeBlockedMessage(\"bash\", \"command is not read-only\");\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 (name === \"bash\") {\n filtered[name] = createPlanModeBashAction(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 /** App/template id used for org-scoped per-app model defaults. */\n appId?: 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 * App-level default tool limits. Each action's own `timeoutMs` /\n * `maxResultChars` takes precedence; this sets the fallback for actions\n * that don't declare their own limits.\n */\n toolLimits?: { timeoutMs?: number; maxResultChars?: number };\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;\nconst MAX_SELECTION_CONTEXT_CHARS = 8_000;\nconst MAX_RESOURCE_INVENTORY_ITEMS = 40;\nconst MAX_RESOURCE_INVENTORY_DESCRIPTION_CHARS = 160;\nconst MAX_INLINE_SKILL_REFERENCE_CHARS = 40_000;\n\n/**\n * Hard cap on the `<current-screen>` block injected into EVERY user message.\n *\n * The screen snapshot comes from the template's `view-screen` action, which can\n * be unbounded — e.g. a recording/meeting page returns the full transcript +\n * every segment. Injected on every turn with no cap, that single block can blow\n * past the model's context window and hard-error the chat with\n * `context_length_exceeded` (observed: a brand-new \"hi\" message failing because\n * an open recording's transcript shipped in `<current-screen>`). Keep this to a\n * compact page summary; the agent can call `view-screen` (or a data action like\n * `get-recording-player-data`) for full detail on demand.\n */\nconst MAX_SCREEN_CONTEXT_CHARS = 10_000;\n\nfunction capScreenContext(text: string): string {\n if (text.length <= MAX_SCREEN_CONTEXT_CHARS) return text;\n return `${text.slice(0, MAX_SCREEN_CONTEXT_CHARS)}\\n\\n…[current-screen snapshot truncated after ${MAX_SCREEN_CONTEXT_CHARS.toLocaleString()} chars to protect the context window. Call the view-screen action for the full snapshot, or a data action (e.g. get-recording-player-data) for full transcripts.]`;\n}\n\nfunction capSelectionContext(text: string): string {\n if (text.length <= MAX_SELECTION_CONTEXT_CHARS) return text;\n return `${text.slice(0, MAX_SELECTION_CONTEXT_CHARS)}\\n\\n…[selection truncated after ${MAX_SELECTION_CONTEXT_CHARS.toLocaleString()} chars. Ask the user or use an app data action if the omitted text is required.]`;\n}\n\nfunction compactInventoryDescription(description: string): string {\n const oneLine = description.replace(/\\s+/g, \" \").trim();\n if (oneLine.length <= MAX_RESOURCE_INVENTORY_DESCRIPTION_CHARS) {\n return oneLine;\n }\n return `${oneLine.slice(0, MAX_RESOURCE_INVENTORY_DESCRIPTION_CHARS - 1)}…`;\n}\n\nfunction limitInventoryLines(lines: string[], label: string): string[] {\n if (lines.length <= MAX_RESOURCE_INVENTORY_ITEMS) return lines;\n const omitted = lines.length - MAX_RESOURCE_INVENTORY_ITEMS;\n return [\n ...lines.slice(0, MAX_RESOURCE_INVENTORY_ITEMS),\n ` … ${omitted} more ${label} omitted; use the resources tool with action \"list\" or \"read\" for the full inventory.`,\n ];\n}\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\n * @internal exported for unit tests only\n */\nexport function 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 // Gemini phrasing\n msg.includes(\"input token count exceeds\") ||\n msg.includes(\"request too large\")\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\n/** @internal exported for unit tests only */\nexport function isRetryableError(err: unknown): boolean {\n if (!(err instanceof Error)) return false;\n const msg = err.message.toLowerCase();\n const engineErr = err instanceof EngineError ? err : null;\n const code = (engineErr?.errorCode ?? \"\").toLowerCase();\n\n // Hard non-retryable codes — check these first.\n if (code === \"builder_gateway_timeout\") return false;\n if (\n code === \"rate_limit_exceeded\" ||\n msg.includes(\"daily gateway request cap\")\n )\n return false;\n\n // Prefer structured fields from the engine before falling back to message\n // keyword matching — avoids false positives on user-supplied text that\n // happens to contain \"rate_limit\" etc.\n if (engineErr) {\n // Provider explicitly said it is retryable.\n if (engineErr.providerRetryable === true) return true;\n // HTTP status-code checks (429, 500, 502, 503, 529 = Anthropic overloaded).\n const sc = engineErr.statusCode;\n if (sc === 429 || sc === 500 || sc === 502 || sc === 503 || sc === 529)\n return true;\n }\n\n return (\n code === \"builder_gateway_error\" ||\n code === \"builder_gateway_network_error\" ||\n code === \"http_500\" ||\n code === \"http_502\" ||\n code === \"http_503\" ||\n code === \"http_504\" ||\n code === \"timeout\" ||\n // Anthropic\n msg.includes(\"overloaded\") ||\n msg.includes(\"rate_limit\") ||\n msg.includes(\"529\") ||\n // OpenAI phrasing\n msg.includes(\"rate limit reached\") ||\n // Google / Gemini\n msg.includes(\"resource_exhausted\") ||\n msg.includes(\"quota exceeded\") ||\n // Generic HTTP codes\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// ---------------------------------------------------------------------------\n// Context-window overflow recovery\n// ---------------------------------------------------------------------------\n\n/**\n * Number of recent messages to protect when trimming tool results.\n * Messages in the tail of this length are left completely intact; only\n * older messages have their tool-result text replaced with a stub.\n */\nconst CONTEXT_TRIM_KEEP_TAIL = 10;\nconst CONTEXT_TRIM_STUB =\n \"[result trimmed to save context — re-run the tool if needed]\";\n\n/**\n * Attempt one aggressive trim of old tool-result content to reduce the\n * context window usage. Tool-result messages older than the last\n * {@link CONTEXT_TRIM_KEEP_TAIL} messages have their text replaced with a\n * short stub. All user/assistant text messages and the recent tail are\n * preserved exactly.\n *\n * Returns a new array — the original is not mutated.\n * Returns `null` when there are no trimable tool results (so the caller can\n * skip the retry).\n */\nexport function trimOldToolResults(\n messages: EngineMessage[],\n keepTail = CONTEXT_TRIM_KEEP_TAIL,\n): EngineMessage[] | null {\n const cutoff = Math.max(0, messages.length - keepTail);\n let trimmed = false;\n\n const result = messages.map((msg, idx): EngineMessage => {\n // Keep messages in the protected tail intact\n if (idx >= cutoff) return msg;\n\n // Only touch user messages that contain tool-result parts\n if (msg.role !== \"user\") return msg;\n\n const hasToolResult = msg.content.some((p) => p.type === \"tool-result\");\n if (!hasToolResult) return msg;\n\n const stubbedContent = msg.content.map(\n (p): import(\"./engine/types.js\").EngineContentPart => {\n if (p.type !== \"tool-result\") return p;\n trimmed = true;\n return { ...p, content: CONTEXT_TRIM_STUB };\n },\n );\n\n return { role: \"user\", content: stubbedContent };\n });\n\n return trimmed ? result : null;\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 onAbort = () => {\n clearTimeout(timer);\n reject(new Error(\"aborted\"));\n };\n const timer = setTimeout(() => {\n signal.removeEventListener(\"abort\", onAbort);\n resolve();\n }, ms);\n signal.addEventListener(\"abort\", onAbort, { once: true });\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, attachmentName?: string): string {\n if (text.length <= MAX_TEXT_ATTACHMENT_CHARS) return text;\n\n const omitted = text.length - MAX_TEXT_ATTACHMENT_CHARS;\n const readHint = attachmentName\n ? ` Use the \\`read-attachment\\` tool with name=\"${escapeAttachmentAttribute(attachmentName)}\" to read the rest.`\n : \"\";\n return `${text.slice(0, MAX_TEXT_ATTACHMENT_CHARS)}\\n\\n[Attachment truncated after ${MAX_TEXT_ATTACHMENT_CHARS.toLocaleString()} characters; ${omitted.toLocaleString()} characters omitted.${readHint}]`;\n}\n\nfunction formatTextAttachment(att: AgentChatAttachment): string | null {\n if (typeof att.text !== \"string\" || att.text.length === 0) return null;\n const text = truncateTextAttachment(\n unwrapTextAttachmentEnvelope(att.text),\n att.name,\n );\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\") {\n // Prefer the hosted URL when one exists (set by preUploadAttachments).\n // Anthropic / AI SDK accept URL image parts natively; for other engines\n // the translate layer falls back to base64 automatically.\n const uploadedUrl = (att as any).url as string | undefined;\n if (uploadedUrl) {\n userContent.push({\n type: \"image\",\n url: uploadedUrl,\n } as unknown as EngineContentPart);\n continue;\n }\n\n if (!att.data) continue;\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 } else {\n // The client sent an image in an unsupported format (HEIC, TIFF, AVIF,\n // etc.). Inject a short text placeholder so the model knows the image\n // was present but could not be processed, rather than silently omitting\n // it and leaving the model confused (\"I don't see an image\").\n const mime = match?.[1] ?? att.contentType ?? \"unknown format\";\n const label = att.name ? `\"${att.name}\"` : \"An image\";\n textAttachments.push(\n `[${label} could not be processed — unsupported image format (${mime}). ` +\n `Inform the user that only JPEG, PNG, GIF, and WebP images are supported, ` +\n `and ask them to convert the file before attaching.]`,\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\nfunction coerceStructuredToolResultWire(part: {\n toolCallId?: unknown;\n content?: unknown;\n}): { toolCallId: string; content: string } {\n const toolCallId =\n typeof part.toolCallId === \"string\"\n ? part.toolCallId.trim()\n : part.toolCallId === undefined || part.toolCallId === null\n ? \"\"\n : String(part.toolCallId).trim();\n let content = \"\";\n if (typeof part.content === \"string\") {\n content = part.content;\n } else if (part.content !== undefined && part.content !== null) {\n try {\n content = JSON.stringify(part.content);\n } catch {\n content = String(part.content);\n }\n }\n return { toolCallId, content };\n}\n\nexport function structuredHistoryToEngineMessages(\n history: AgentChatStructuredMessage[] | undefined,\n): EngineMessage[] | null {\n if (!Array.isArray(history)) return null;\n\n const toolUseById = new Map<string, { name: string; input: unknown }>();\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 const input = part.input ?? part.args ?? {};\n toolUseById.set(id, { name, input });\n content.push({\n type: \"tool-call\",\n id,\n name,\n input,\n });\n continue;\n }\n\n if (part.type === \"tool-result\" && message.role === \"user\") {\n const wire = coerceStructuredToolResultWire(part);\n const lookup =\n wire.toolCallId.length > 0\n ? toolUseById.get(wire.toolCallId)\n : undefined;\n const toolName =\n typeof part.toolName === \"string\" && part.toolName.trim().length > 0\n ? part.toolName\n : lookup?.name;\n if (!toolName?.trim()) {\n content.push({\n type: \"text\",\n text: unmatchedToolResultReplayText({\n toolCallId:\n wire.toolCallId.length > 0 ? wire.toolCallId : \"(missing)\",\n content: wire.content,\n isError: part.isError,\n }),\n });\n continue;\n }\n if (!wire.toolCallId) {\n // Named tool but no id — cannot emit a valid paired `tool-result`.\n content.push({\n type: \"text\",\n text: unmatchedToolResultReplayText({\n toolCallId: \"(missing)\",\n content: wire.content,\n isError: part.isError,\n }),\n });\n continue;\n }\n const toolInput =\n typeof part.toolInput === \"string\" && part.toolInput.length > 0\n ? part.toolInput\n : stringifyToolUseInputForGateway(lookup?.input);\n content.push({\n type: \"tool-result\",\n toolCallId: wire.toolCallId,\n toolName,\n toolInput,\n content: wire.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\n ? backfillEngineMessagesToolResults(messages)\n : null;\n}\n\n/** Build enriched message with file/skill/mention references */\nfunction capInlineSkillReferenceContent(text: string): string {\n const trimmed = text.trim();\n if (trimmed.length <= MAX_INLINE_SKILL_REFERENCE_CHARS) return trimmed;\n const omitted = trimmed.length - MAX_INLINE_SKILL_REFERENCE_CHARS;\n return `${trimmed.slice(0, MAX_INLINE_SKILL_REFERENCE_CHARS)}\\n\\n[Skill content truncated after ${MAX_INLINE_SKILL_REFERENCE_CHARS.toLocaleString()} chars; ${omitted.toLocaleString()} chars omitted.]`;\n}\n\nfunction escapeReferenceAttribute(value: string): string {\n return value.replace(/&/g, \"&amp;\").replace(/\"/g, \"&quot;\");\n}\n\nasync function resolveSkillReferenceContent(\n ref: AgentChatReference,\n): Promise<string | null> {\n if (!ref.path && !ref.name) return null;\n\n if (ref.source === \"resource\") {\n const ownerEmail = getRequestUserEmail();\n if (!ownerEmail || !ref.path) return null;\n try {\n const { resourceEffectiveContext, resourceGet } =\n await import(\"../resources/store.js\");\n const resourceOptions = {\n userEmail: ownerEmail,\n orgId: getRequestOrgId() ?? null,\n };\n const effective = await resourceEffectiveContext(ownerEmail, ref.path, {\n ...resourceOptions,\n });\n if (!effective.effectiveResource) return null;\n const full = await resourceGet(effective.effectiveResource.id, {\n ...resourceOptions,\n });\n return full?.content ?? null;\n } catch {\n return null;\n }\n }\n\n try {\n const { loadAgentsBundle } = await import(\"../server/agents-bundle.js\");\n const bundle = await loadAgentsBundle();\n const normalizedPath = ref.path.replace(/\\/+$/g, \"\");\n const skill = Object.values(bundle.skills).find((candidate) => {\n const skillPath = candidate.dir.replace(/\\/+$/g, \"\");\n return (\n candidate.meta.name === ref.name ||\n normalizedPath === skillPath ||\n normalizedPath === `${skillPath}/SKILL.md`\n );\n });\n return skill?.content ?? null;\n } catch {\n return null;\n }\n}\n\nasync function enrichMessage(\n message: string,\n references: AgentChatReference[],\n): Promise<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 const skillLines = await Promise.all(\n skillRefs.map(async (r) => {\n const content = await resolveSkillReferenceContent(r);\n if (content?.trim()) {\n return `- ${r.name} (${r.path})\\n\\n<applied-skill name=\"${escapeReferenceAttribute(r.name)}\" path=\"${escapeReferenceAttribute(r.path)}\" source=\"${escapeReferenceAttribute(r.source)}\">\\n${capInlineSkillReferenceContent(content)}\\n</applied-skill>`;\n }\n return `- ${r.name} (${r.path})${\n r.source === \"resource\"\n ? ' — content was not inlined; read with the resources tool (action: \"read\") if needed'\n : \" — content was not inlined; read with the read tool if needed\"\n }`;\n }),\n );\n parts.push(\n \"Applied skills (read and follow before acting):\\n\" +\n skillLines.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 executionMode: AgentExecutionMode;\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 | \"max_tokens\"\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 === \"max_tokens\"\n ? \"The previous LLM call reached the model output-token cap before the response finished.\"\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 isToolResultOnlyUserMessage(message: EngineMessage): boolean {\n return (\n message.role === \"user\" &&\n message.content.length > 0 &&\n message.content.every((part) => part.type === \"tool-result\")\n );\n}\n\n/** Start of the active turn on an internal continuation (real user prompt). */\nfunction findCurrentTurnStartForContinuation(\n messages: EngineMessage[],\n): number {\n let i = messages.length - 1;\n while (i >= 0) {\n const message = messages[i];\n if (message.role !== \"user\") {\n i--;\n continue;\n }\n const userText = textFromEngineMessage(message);\n if (userText.startsWith(AGENT_INTERNAL_CONTINUE_PROMPT)) {\n i--;\n continue;\n }\n if (isToolResultOnlyUserMessage(message)) {\n i--;\n continue;\n }\n return i;\n }\n return 0;\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 if (!isReusableReadOnlyToolResult(part)) continue;\n cache.set(toolCallCacheKey(call.name, call.input), part.content);\n }\n }\n\n return cache;\n}\n\nfunction isReusableReadOnlyToolResult(part: EngineToolResultPart): boolean {\n if (part.isError) return false;\n const lower = part.content.trim().toLowerCase();\n if (!lower) return false;\n return !(\n lower.startsWith(\"error running \") ||\n lower.includes(\"run aborted\") ||\n lower.includes(\"tool call timed out\") ||\n lower.includes(\"stale_run\") ||\n lower.includes(\"connection_error\")\n );\n}\n\n/**\n * Counts how many times each write (non-read-only) tool call was interrupted\n * before returning a result in the continuation history. When a connection\n * drops mid-tool-execution the client sends a placeholder result\n * (\"Interrupted before this tool returned a result.\") so the model knows\n * what was attempted. If the same write tool is called again with identical\n * input in the next continuation, this count prevents infinite retry loops.\n */\nconst INTERRUPTED_TOOL_RESULT_MARKER =\n \"Interrupted before this tool returned a result.\";\nconst MAX_WRITE_TOOL_INTERRUPTIONS = 2;\n\nfunction seedWriteToolInterruptionsFromHistory(\n messages: EngineMessage[],\n actions: Record<string, ActionEntry>,\n): Map<string, number> {\n const interruptions = new Map<string, number>();\n if (!isInternalContinuationTurn(messages)) return interruptions;\n\n const turnStart = findCurrentTurnStartForContinuation(messages);\n const turnMessages = messages.slice(turnStart);\n\n const pendingToolCalls = new Map<string, { name: string; input: unknown }>();\n for (const message of turnMessages) {\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, { name: part.name, input: part.input });\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 if (\n typeof part.content === \"string\" &&\n part.content.includes(INTERRUPTED_TOOL_RESULT_MARKER)\n ) {\n const key = toolCallCacheKey(call.name, call.input);\n interruptions.set(key, (interruptions.get(key) ?? 0) + 1);\n }\n }\n }\n\n return interruptions;\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 /**\n * Attachments submitted with this turn (pasted text, files, images), passed\n * through to each tool's `ActionRunContext.attachments` so actions can\n * consume a large pasted artifact by reference instead of having the model\n * re-emit it as a tool argument. See `create-extension`'s\n * `contentFromAttachment`.\n */\n attachments?: AgentChatAttachment[];\n reasoningEffort?: ReasoningEffort;\n providerOptions?: any;\n maxOutputTokens?: number;\n executionMode?: AgentExecutionMode;\n maxIterations?: number;\n finalResponseGuard?: AgentLoopFinalResponseGuard;\n threadId?: string;\n turnId?: string;\n /**\n * App-level default limits applied to every tool call unless the individual\n * ActionEntry overrides them with its own timeoutMs / maxResultChars.\n */\n toolLimits?: { timeoutMs?: number; maxResultChars?: number };\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 writeToolInterruptions = seedWriteToolInterruptionsFromHistory(\n messages,\n actions,\n );\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 let terminalStopReason:\n | Extract<EngineEvent, { type: \"stop\" }>[\"reason\"]\n | undefined;\n const toolCallErrors = new Map<\n string,\n { name: string; input: unknown; error: string }\n >();\n let contextMessages = messages;\n\n if (opts.threadId) {\n try {\n const directives = await loadContextDirectives(opts.threadId, {\n ownerEmail: opts.ownerEmail ?? null,\n });\n const protectedSegmentIds = computeProtectedSegmentIds(messages);\n const { messages: transformedMessages, appliedStatus } =\n applyContextDirectives(messages, directives, {\n protectedSegmentIds,\n });\n const manifest = await buildManifest({\n threadId: opts.threadId,\n ...(opts.turnId ? { turnId: opts.turnId } : {}),\n model,\n rawMessages: messages,\n sentMessages: transformedMessages,\n appliedStatus,\n directives,\n protectedSegmentIds,\n source: \"structured\",\n enforceable: true,\n });\n contextMessages = transformedMessages;\n void writeContextManifest(opts.threadId, manifest).catch((err) => {\n console.warn(\n \"[context-xray] failed to write manifest:\",\n err instanceof Error ? err.message : String(err),\n );\n });\n } catch (err) {\n console.warn(\n \"[context-xray] context transform skipped:\",\n err instanceof Error ? err.message : String(err),\n );\n }\n }\n\n for (let retry = 0; ; retry++) {\n assistantContent = undefined;\n bufferedAssistantText = \"\";\n terminalStopReason = undefined;\n toolCallErrors.clear();\n try {\n const streamOpts = {\n model,\n systemPrompt,\n messages: contextMessages,\n tools,\n abortSignal: signal,\n maxOutputTokens: resolveMaxOutputTokensForEngine(\n engine.name,\n opts.maxOutputTokens,\n ),\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 // Forward thinking deltas as a distinct event type so the UI\n // can render a collapsible \"Thinking…\" cell while the model\n // reasons, then collapse it when content arrives.\n send({ type: \"thinking\", text: event.text });\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\") {\n terminalStopReason = event.reason;\n if (event.reason === \"error\") {\n throw new EngineError(event.error ?? \"Engine stream error\", {\n errorCode: event.errorCode,\n upgradeUrl: event.upgradeUrl,\n statusCode: event.statusCode,\n providerRetryable: event.providerRetryable,\n });\n }\n }\n }\n\n break;\n } catch (err: unknown) {\n if (signal.aborted) throw err;\n if (isContextTooLongError(err)) {\n // ── One-shot recovery: trim old tool results and retry once ────────\n // Only attempt recovery on the first overflow (retry === 0) to avoid\n // infinite trim loops. On subsequent overflows fall through to the\n // terminal error.\n if (retry === 0) {\n const trimmed = trimOldToolResults(contextMessages);\n if (trimmed !== null) {\n // Replace the sent messages for this iteration with the trimmed\n // version, clear any partial output, and retry immediately\n // (no delay — context errors are not transient).\n contextMessages = trimmed;\n send({ type: \"clear\" });\n continue;\n }\n }\n throw new EngineError(\n \"Conversation has grown too long. The agent tried to recover automatically but the context is still too large. You can continue in a new chat, or ask the agent to summarize the conversation and 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 if (terminalStopReason === \"max_tokens\") {\n flushBufferedAssistantText();\n appendAgentLoopContinuation(messages, \"max_tokens\");\n continue;\n }\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 executionMode: opts.executionMode ?? \"act\",\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 // Reached only when the model made tool calls (toolCallParts.length > 0),\n // i.e. it's about to do more work and produce a *new* final answer. Give\n // that next final-answer cycle a fresh guard-retry budget; otherwise\n // finalGuardRetries stays at 1 from a prior cycle and the guard is\n // permanently disabled for the rest of a long multi-step run.\n finalGuardRetries = 0;\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 const wireToolInput = JSON.stringify(toolCall.input ?? {});\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 toolInput: wireToolInput,\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 toolInput: wireToolInput,\n content: result,\n };\n }\n\n // Guard against write tools that have been interrupted too many times in\n // this turn (connection drop mid-execution → agent retries → repeat).\n // A write tool that keeps failing likely has a timeout / large-payload\n // problem; retrying indefinitely creates duplicates and confuses users.\n //\n // LEDGER RECOVERY: before applying the give-up budget, check whether the\n // previous invocation's zombie actually completed and wrote its result to\n // the durable ledger. If so, return the ledger result without re-executing\n // (prevents the duplicate side effect) and skip counting it toward the\n // interruption budget.\n if (!actionEntry.readOnly) {\n const writeCacheKey = toolCallCacheKey(toolCall.name, toolCall.input);\n const priorInterruptions =\n writeToolInterruptions.get(writeCacheKey) ?? 0;\n\n if (priorInterruptions > 0 && opts.threadId) {\n const ledgerResult = await readLedgerEntry(\n opts.threadId,\n writeCacheKey,\n );\n if (ledgerResult !== null) {\n // Zombie completed — recover the real result without re-executing.\n const result =\n `(Recovered from prior interrupted chunk — action already completed.)\\n\\n` +\n ledgerResult;\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 return {\n type: \"tool-result\" as const,\n toolCallId: toolCall.id,\n toolName: toolCall.name,\n toolInput: wireToolInput,\n content: result,\n };\n }\n }\n\n if (priorInterruptions >= MAX_WRITE_TOOL_INTERRUPTIONS) {\n const result =\n `The ${toolCall.name} action was interrupted ${priorInterruptions} time(s) in this session — ` +\n `likely a connection timeout with a large payload. Please start a new chat and try again, ` +\n `or split the request into smaller pieces.`;\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 requestedActionStop ??= {\n message:\n `I stopped because the ${toolCall.name} action was interrupted ${priorInterruptions} time(s) in a row. ` +\n `This usually means the connection timed out while processing a large request. ` +\n `Please start a new chat and try again, or break the request into smaller parts.`,\n errorCode: \"repeated_write_tool_interruption\",\n };\n return {\n type: \"tool-result\" as const,\n toolCallId: toolCall.id,\n toolName: toolCall.name,\n toolInput: wireToolInput,\n content: result,\n isError: true,\n };\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 toolInput: wireToolInput,\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 toolInput: wireToolInput,\n content: result,\n isError: true,\n };\n }\n\n const DEFAULT_TOOL_RESULT_CHARS = 50_000;\n const DEFAULT_TOOL_TIMEOUT_MS = 60_000;\n const toolTimeoutMs =\n actionEntry.timeoutMs ??\n opts.toolLimits?.timeoutMs ??\n DEFAULT_TOOL_TIMEOUT_MS;\n const toolMaxResultChars =\n actionEntry.maxResultChars ??\n opts.toolLimits?.maxResultChars ??\n DEFAULT_TOOL_RESULT_CHARS;\n let result: string;\n let isError = false;\n let mcpApp:\n | import(\"../mcp-client/app-result.js\").AgentMcpAppPayload\n | undefined;\n try {\n const timeoutSignal = AbortSignal.timeout(toolTimeoutMs);\n // Keep a reference to the action promise so we can attach a zombie-\n // detection continuation AFTER Promise.race abandons it on run abort.\n // The promise itself is not awaited here — Promise.race owns the await.\n const actionPromise = Promise.resolve(\n actionEntry.run(toolCall.input as Record<string, string>, {\n send,\n userEmail: getRequestUserEmail(),\n orgId: getRequestOrgId() ?? null,\n caller: \"tool\",\n attachments: opts.attachments,\n signal,\n }),\n );\n\n // When the run is aborted (soft-timeout / user cancel) while this tool\n // call is in flight, Promise.race below will throw \"Run aborted\" and the\n // action's promise becomes a zombie — it keeps running but its result is\n // never returned to the loop. If the zombie eventually resolves, write\n // the result to the durable ledger keyed by (threadId, toolKey) so the\n // next continuation chunk can recover it instead of re-executing the\n // side effect.\n if (opts.threadId && !actionEntry.readOnly) {\n const ledgerThreadId = opts.threadId;\n const ledgerToolKey = toolCallCacheKey(toolCall.name, toolCall.input);\n actionPromise\n .then((zombieRaw: unknown) => {\n const zombieMcp = isMcpActionResult(zombieRaw) ? zombieRaw : null;\n const zombieText = zombieMcp ? zombieMcp.text : zombieRaw;\n const zombieStr =\n typeof zombieText === \"string\"\n ? zombieText\n : JSON.stringify(zombieText, null, 2);\n void writeLedgerEntry(ledgerThreadId, ledgerToolKey, zombieStr);\n })\n .catch(() => {\n // Action errored in the zombie — no result to ledger.\n });\n }\n\n const raw = await Promise.race([\n actionPromise,\n new Promise<never>((_, reject) => {\n timeoutSignal.addEventListener(\"abort\", () =>\n reject(\n new Error(\n `Tool call timed out after ${toolTimeoutMs / 1000} seconds`,\n ),\n ),\n );\n }),\n // Stop waiting on the tool when the run itself is aborted (e.g. the\n // run-manager soft timeout, or a user cancel). Without this leg the\n // loop blocks on an in-flight tool for up to TOOL_TIMEOUT_MS after\n // the run signal has already fired.\n new Promise<never>((_, reject) => {\n if (signal.aborted) {\n reject(new Error(\"Run aborted\"));\n return;\n }\n signal.addEventListener(\n \"abort\",\n () => reject(new Error(\"Run aborted\")),\n { once: true },\n );\n }),\n ]);\n const mcpResult = isMcpActionResult(raw) ? raw : null;\n const rawForAgent = mcpResult ? mcpResult.text : raw;\n if (\n mcpResult &&\n mcpResult.raw &&\n typeof mcpResult.raw === \"object\" &&\n (mcpResult.raw as Record<string, unknown>).isError === true\n ) {\n isError = true;\n }\n mcpApp = mcpResult?.mcpApp;\n // Demo mode: the agent must see the same fake data the UI shows, so\n // it can't read out a real name/email on a live screen share. Redact\n // the structured result (not the JSON string) so IDs/dates/URLs stay\n // intact and follow-up tool calls still work. Gated — the expensive\n // walk only runs when demo mode is on.\n let redacted: unknown = rawForAgent;\n const demoMode = await isDemoModeEnabled();\n if (demoMode) {\n mcpApp = undefined;\n if (typeof rawForAgent === \"string\") {\n try {\n redacted = JSON.stringify(\n redactDemoData(JSON.parse(rawForAgent)),\n null,\n 2,\n );\n } catch {\n redacted = redactDemoString(rawForAgent);\n }\n } else {\n redacted = redactDemoData(rawForAgent);\n }\n }\n let resultStr =\n typeof redacted === \"string\"\n ? redacted\n : JSON.stringify(redacted, null, 2);\n if (resultStr.length > toolMaxResultChars) {\n const truncated = resultStr.slice(0, toolMaxResultChars);\n resultStr = `${truncated}\\n\\n...[truncated — full result was ${resultStr.length.toLocaleString()} chars; only first ${toolMaxResultChars.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 change 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 { notifyActionChange } =\n await import(\"../server/action-change.js\");\n const owner = opts.ownerEmail ?? getRequestUserEmail() ?? undefined;\n const orgId = opts.orgId ?? getRequestOrgId() ?? undefined;\n await notifyActionChange({\n actionName: 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({\n type: \"tool_done\",\n tool: toolCall.name,\n result,\n ...(mcpApp ? { mcpApp } : {}),\n });\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 toolInput: wireToolInput,\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 // Unknown tool name → serialize (null), don't fold it into the read-only\n // parallel batch. Misclassifying it as \"read\" lets it run via Promise.all\n // alongside genuine reads, which can reorder it ahead of a later mutating\n // call and break the model's intended sequencing.\n if (!entry) return null;\n if (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 // TypeScript can't track ??= through async closures; cast to known type.\n const stop = requestedActionStop as {\n message: string;\n errorCode?: string;\n };\n send({ type: \"text\", text: stop.message });\n break;\n }\n }\n\n if (!signal.aborted) {\n send({ type: \"done\" });\n // Clean up any zombie-completion ledger entries for this thread now that\n // the turn completed normally. If the run was aborted the ledger must stay\n // intact so the next continuation chunk can still recover from it.\n if (opts.threadId) {\n void clearLedgerForThread(opts.threadId).catch(() => {});\n }\n }\n return usage;\n}\n\nfunction backgroundChatProgressRunId(turnId: string): string {\n const normalized = turnId\n .trim()\n .replace(/[^a-zA-Z0-9._:-]+/g, \"-\")\n .replace(/^-+|-+$/g, \"\")\n .slice(0, 160);\n return `agent-chat-${normalized || \"turn\"}`;\n}\n\nfunction isRecoverableContinuationError(event: {\n type: \"error\";\n error: string;\n errorCode?: string;\n recoverable?: boolean;\n}): boolean {\n const code = String(event.errorCode ?? \"\").toLowerCase();\n const message = event.error.toLowerCase();\n if (code === \"builder_gateway_error\") return false;\n return (\n event.recoverable === true ||\n code === \"builder_gateway_timeout\" ||\n code === \"stale_run\" ||\n code === \"timeout\" ||\n code === \"timeout_error\" ||\n code === \"http_408\" ||\n code === \"http_429\" ||\n code === \"http_529\" ||\n code === \"run_timeout\" ||\n message.includes(\"timeout\") ||\n message.includes(\"temporarily unavailable\")\n );\n}\n\nfunction endsAtInternalContinuationBoundary(run: ActiveRun): boolean {\n const last = run.events.at(-1)?.event;\n if (!last) return false;\n if (last.type === \"auto_continue\" || last.type === \"loop_limit\") {\n return true;\n }\n return last.type === \"error\" && isRecoverableContinuationError(last);\n}\n\nfunction progressStepFromAgentChatEvent(event: AgentChatEvent): string | null {\n switch (event.type) {\n case \"activity\":\n return event.label;\n case \"tool_start\":\n return `Using ${event.tool}.`;\n case \"tool_done\":\n return `Finished ${event.tool}.`;\n case \"agent_call\":\n return event.status === \"start\"\n ? `Calling ${event.agent}.`\n : event.status === \"done\"\n ? `Finished ${event.agent}.`\n : `${event.agent} failed.`;\n case \"agent_task\":\n return event.status === \"running\"\n ? \"Started background task.\"\n : event.status === \"completed\"\n ? \"Background task completed.\"\n : \"Background task failed.\";\n case \"agent_task_update\":\n return event.currentStep || event.preview || \"Background task updated.\";\n case \"text\":\n return \"Agent is responding.\";\n default:\n return null;\n }\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 turnId: requestTurnId,\n model: requestModel,\n engine: requestEngine,\n effort: requestEffort,\n browserTabId,\n scope,\n trackInRunsTray,\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 attachments (images AND files/PDFs) through the framework\n // file-upload provider (Builder.io by default). The model still sees the\n // base64 multimodal content for the current turn; each uploaded attachment\n // also gets a hosted `url` injected so the agent can embed it in slides,\n // docs, or outbound messages, and callers can persist a URL reference\n // instead of the raw base64.\n //\n // When no provider is configured, leave attachments untouched and inject a\n // hint recommending Builder.io connect — the model can still see images via\n // base64, and files via their data URL / text, but has no hosted URL.\n if (\n hasAttachments &&\n requestAttachments.some(\n (a) => a.type === \"image\" || a.type === \"file\" || a.type === \"document\",\n )\n ) {\n try {\n const preUpload = await preUploadAttachments({\n attachments: requestAttachments,\n ownerEmail,\n includeFiles: true,\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] preUploadAttachments failed:\",\n err instanceof Error ? err.message : String(err),\n );\n }\n }\n\n // Persist text-ish attachments as thread-scoped agent_scratch resources so\n // the model can page through them with the `read-attachment` tool. We do\n // this here — before buildUserContentWithAttachments — so the resource IDs\n // are available when we inject the truncation notice into the text content.\n const textAttachmentResourceMap = new Map<\n number,\n { resourceId: string; path: string; totalChars: number }\n >();\n if (hasAttachments && threadId) {\n try {\n const { persistTextAttachmentsAsResources } =\n await import(\"../server/attachment-actions.js\");\n const stored = await persistTextAttachmentsAsResources({\n attachments: requestAttachments,\n threadId,\n ownerEmail,\n });\n for (const [k, v] of stored) {\n textAttachmentResourceMap.set(k, v);\n }\n } catch (err) {\n console.warn(\n \"[agent-native] persistTextAttachmentsAsResources 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 appId: options.appId,\n });\n } catch {\n engine = await resolveEngine({\n apiKey: effectiveApiKey,\n appId: options.appId,\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 modelCandidate =\n requestModel ??\n configuredModel ??\n (await getStoredModelForEngine(engine, { appId: options.appId })) ??\n engine.defaultModel;\n const model = normalizeModelForEngine(engine, modelCandidate);\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({\n type: \"error\",\n error: LLM_MISSING_CREDENTIALS_MESSAGE,\n errorCode: LLM_MISSING_CREDENTIALS_ERROR_CODE,\n })}\\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 enrichedMessagePromise = 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 {},\n {\n userEmail: getRequestUserEmail(),\n orgId: getRequestOrgId() ?? null,\n caller: \"tool\",\n },\n );\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${capScreenContext(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${capScreenContext(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 const extensionId = url.pathname\n ? extensionIdFromPathname(url.pathname)\n : null;\n if (extensionId) lines.push(`extensionId: ${extensionId}`);\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${capSelectionContext(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 {\n resourceListAccessible,\n SHARED_OWNER,\n WORKSPACE_OWNER,\n 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 const orgId = getRequestOrgId();\n if (!ownerEmail) throw new Error(\"no authenticated user\");\n const allResources = await resourceListAccessible(\n ownerEmail,\n undefined,\n { userEmail: ownerEmail, orgId },\n );\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 =\n r.owner === WORKSPACE_OWNER\n ? \"workspace\"\n : r.owner === SHARED_OWNER\n ? \"shared\"\n : \"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 userEmail: ownerEmail,\n orgId,\n });\n if (!full) continue;\n if (kind === \"skill\") {\n const skill = parseSkillMetadata(full.content, r.path);\n skillLines.push(\n ` ${skill?.name || r.path} — ${compactInventoryDescription(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} — ${compactInventoryDescription(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} — ${compactInventoryDescription(agent?.description || \"Connected A2A agent\")} (${scope}, remote via ${r.path})`,\n );\n }\n }\n }\n const blocks: string[] = [];\n if (fileLines.length > 0) {\n const lines = limitInventoryLines(fileLines, \"files\");\n blocks.push(\n `<available-files>\\nFiles in the workspace:\\n${lines.join(\"\\n\")}\\n\\nTo read a resource file's contents, use the resources tool with action \"read\" and the file path.\\n</available-files>`,\n );\n }\n if (skillLines.length > 0) {\n const lines = limitInventoryLines(skillLines, \"skills\");\n blocks.push(\n `<available-skills>\\nSkills in the workspace:\\n${lines.join(\"\\n\")}\\n\\nBefore using a matching workspace skill, read its path with the resources tool using action \"read\"; slash-selected skills are inlined automatically when available.\\n</available-skills>`,\n );\n }\n if (agentLines.length > 0) {\n const lines = limitInventoryLines(agentLines, \"agents\");\n blocks.push(\n `<available-agents>\\nCustom and connected agents in the workspace:\\n${lines.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 const lines = limitInventoryLines(jobLines, \"jobs\");\n blocks.push(\n `<available-jobs>\\nScheduled tasks in the workspace:\\n${lines.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 enrichedMessage,\n ] = await Promise.all([\n systemPromptPromise,\n screenContextPromise,\n urlContextPromise,\n selectionContextPromise,\n filesContextPromise,\n loopSettingsPromise,\n enrichedMessagePromise,\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 // Atomically claim the run slot for this thread. The claim checks SQL for\n // a live (non-stale) running row so two near-simultaneous POSTs on\n // different serverless isolates both see the correct state — a plain\n // read-then-act check races on multi-isolate deployments because both\n // reads see no running row before either insert commits.\n if (threadId) {\n const slot = await tryClaimRunSlot(threadId);\n if (!slot.claimed) {\n setResponseStatus(event, 409);\n return {\n error: \"Run already in progress for this thread\",\n activeRunId: slot.activeRunId,\n };\n }\n }\n\n // Start agent loop in background via run-manager\n const runId = generateRunId();\n const effectiveThreadId = threadId ?? runId;\n const effectiveTurnId =\n typeof requestTurnId === \"string\" && requestTurnId.trim()\n ? requestTurnId.trim()\n : runId;\n const messageToPersist =\n typeof requestDisplayMessage === \"string\" &&\n requestDisplayMessage.trim().length > 0\n ? requestDisplayMessage\n : requestMessage;\n if (options.onRunPrepared && !internalContinuation) {\n await options.onRunPrepared({\n runId,\n threadId,\n message: messageToPersist,\n attachments: requestAttachments,\n });\n }\n\n const trackedProgressOwner =\n trackInRunsTray === true && ownerEmail ? ownerEmail : null;\n const trackedProgressRunId = trackedProgressOwner\n ? backgroundChatProgressRunId(effectiveTurnId)\n : null;\n const trackedProgressMetadata = trackedProgressRunId\n ? {\n kind: \"agent-chat-background\",\n threadId: effectiveThreadId,\n surfaceUrl: `agent-native://threads/${encodeURIComponent(effectiveThreadId)}`,\n turnId: effectiveTurnId,\n }\n : null;\n\n const completeTrackedProgressRun = async (\n run: ActiveRun,\n completionError?: unknown,\n ) => {\n if (!trackedProgressRunId || !trackedProgressOwner) return;\n if (!completionError && endsAtInternalContinuationBoundary(run)) {\n return;\n }\n const terminalStatus =\n run.status === \"aborted\"\n ? \"cancelled\"\n : run.status === \"errored\" || completionError\n ? \"failed\"\n : \"succeeded\";\n const step =\n terminalStatus === \"succeeded\"\n ? \"Agent finished.\"\n : terminalStatus === \"cancelled\"\n ? \"Agent run was cancelled.\"\n : \"Agent stopped with an error.\";\n await completeProgressRun(\n trackedProgressRunId,\n trackedProgressOwner,\n terminalStatus,\n {\n step,\n metadata: {\n ...(trackedProgressMetadata ?? {}),\n runId: run.runId,\n },\n },\n ).catch(() => {});\n };\n\n let lastTrackedProgressUpdateAt = 0;\n const updateTrackedProgressFromEvent = (event: AgentChatEvent) => {\n if (!trackedProgressRunId || !trackedProgressOwner) return;\n const step = progressStepFromAgentChatEvent(event);\n if (!step) return;\n const now = Date.now();\n if (now - lastTrackedProgressUpdateAt < 15_000) return;\n lastTrackedProgressUpdateAt = now;\n void updateRunProgress(trackedProgressRunId, trackedProgressOwner, {\n step,\n metadata: {\n ...(trackedProgressMetadata ?? {}),\n runId,\n },\n }).catch(() => {});\n };\n\n if (trackedProgressRunId && trackedProgressOwner && !internalContinuation) {\n await startProgressRun({\n id: trackedProgressRunId,\n owner: trackedProgressOwner,\n title: messageToPersist,\n step: \"Starting agent.\",\n metadata: trackedProgressMetadata ?? undefined,\n }).catch(() => {});\n }\n\n const handleRunComplete =\n options.onRunComplete || trackedProgressRunId\n ? async (run: ActiveRun) => {\n try {\n await options.onRunComplete?.(run, threadId);\n } catch (err) {\n await completeTrackedProgressRun(run, err);\n throw err;\n }\n await completeTrackedProgressRun(run);\n }\n : undefined;\n\n startRun(\n runId,\n effectiveThreadId,\n async (rawSend, signal) => {\n const send = (event: AgentChatEvent) => {\n rawSend(event);\n updateTrackedProgressFromEvent(event);\n };\n\n send({ type: \"activity\", label: \"Starting agent\" });\n\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 attachments: requestAttachments,\n reasoningEffort,\n providerOptions: options.providerOptions,\n executionMode: requestMode,\n maxIterations: loopSettings.maxIterations,\n finalResponseGuard: options.finalResponseGuard,\n ...(options.toolLimits ? { toolLimits: options.toolLimits } : {}),\n ...(threadId\n ? { threadId: effectiveThreadId, turnId: effectiveTurnId }\n : {}),\n };\n\n send({ type: \"activity\", label: \"Contacting model\" });\n\n // loopUsage is always assigned — either via instrumentAgentLoop or\n // runAgentLoop before use below. The definite-assignment guard is\n // conservative because the try/catch makes the control flow non-obvious.\n let loopUsage: AgentLoopUsage = undefined!;\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 handleRunComplete,\n {\n softTimeoutMs: options.runSoftTimeoutMs,\n useHostedSoftTimeoutDefault: true,\n // Fold continuation runs of one logical turn onto a single durable\n // assistant message. Falls back to the runId (turn == run) when the\n // client doesn't supply a turnId.\n turnId: effectiveTurnId,\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"]}