@agent-native/core 0.15.7 → 0.15.10

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 (28) hide show
  1. package/dist/agent/engine/builder-engine.d.ts.map +1 -1
  2. package/dist/agent/engine/builder-engine.js +19 -1
  3. package/dist/agent/engine/builder-engine.js.map +1 -1
  4. package/dist/client/settings/SettingsPanel.js.map +1 -1
  5. package/dist/client/settings/useBuilderStatus.d.ts +10 -1
  6. package/dist/client/settings/useBuilderStatus.d.ts.map +1 -1
  7. package/dist/client/settings/useBuilderStatus.js +39 -3
  8. package/dist/client/settings/useBuilderStatus.js.map +1 -1
  9. package/dist/client/settings/useBuilderStatus.spec.js +76 -0
  10. package/dist/client/settings/useBuilderStatus.spec.js.map +1 -1
  11. package/dist/server/agent-chat-plugin.d.ts.map +1 -1
  12. package/dist/server/agent-chat-plugin.js +5 -2
  13. package/dist/server/agent-chat-plugin.js.map +1 -1
  14. package/dist/server/builder-browser.d.ts +52 -15
  15. package/dist/server/builder-browser.d.ts.map +1 -1
  16. package/dist/server/builder-browser.js +126 -15
  17. package/dist/server/builder-browser.js.map +1 -1
  18. package/dist/server/core-routes-plugin.d.ts.map +1 -1
  19. package/dist/server/core-routes-plugin.js +105 -19
  20. package/dist/server/core-routes-plugin.js.map +1 -1
  21. package/dist/server/credential-provider.d.ts +25 -4
  22. package/dist/server/credential-provider.d.ts.map +1 -1
  23. package/dist/server/credential-provider.js +112 -15
  24. package/dist/server/credential-provider.js.map +1 -1
  25. package/dist/server/google-realtime-session.d.ts.map +1 -1
  26. package/dist/server/google-realtime-session.js +1 -1
  27. package/dist/server/google-realtime-session.js.map +1 -1
  28. package/package.json +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"core-routes-plugin.js","sourceRoot":"","sources":["../../src/server/core-routes-plugin.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n getH3App,\n awaitBootstrap,\n markDefaultPluginProvided,\n} from \"./framework-request-handler.js\";\nimport {\n getAllowedCorsOrigin,\n readCorsAllowedOrigins,\n} from \"./cors-origins.js\";\nimport {\n defineEventHandler,\n setResponseStatus,\n setResponseHeader,\n getMethod,\n getHeader,\n getCookie,\n setCookie,\n deleteCookie,\n} from \"h3\";\nimport type { H3Event } from \"h3\";\nimport path from \"node:path\";\nimport { createPollHandler } from \"./poll.js\";\nimport { createPollEventsHandler } from \"./poll-events.js\";\nimport { upsertEnvFile } from \"./create-server.js\";\nimport type { EnvKeyConfig } from \"./create-server.js\";\nimport { readBody } from \"./h3-helpers.js\";\nimport {\n BUILDER_CONNECT_PARAM,\n BUILDER_CONNECT_OWNER_COOKIE,\n BUILDER_ENV_KEYS,\n BUILDER_STATE_PARAM,\n appendBuilderConnectToken,\n buildBuilderCliAuthUrl,\n createBuilderBrowserCallbackErrorPage,\n createBuilderBrowserCallbackPage,\n getBuilderBrowserOriginForEvent,\n getBuilderBrowserStatusForEvent,\n resolveBuilderBranchProjectId,\n resolveSafePreviewUrl,\n runBuilderAgent,\n signBuilderCallbackState,\n verifyBuilderConnectTokenAndGetOwner,\n verifyBuilderCallbackStateAndGetOwner,\n signBuilderConnectToken,\n} from \"./builder-browser.js\";\nimport {\n getState,\n putState,\n deleteState,\n listComposeDrafts,\n getComposeDraft,\n putComposeDraft,\n deleteComposeDraft,\n deleteAllComposeDrafts,\n} from \"../application-state/handlers.js\";\nimport { getSetting, putSetting, deleteSetting } from \"../settings/store.js\";\nimport {\n getUserSetting,\n putUserSetting,\n deleteUserSetting,\n} from \"../settings/user-settings.js\";\nimport { getSession } from \"./auth.js\";\nimport { getAppBasePath, getOrigin } from \"./google-oauth.js\";\nimport { findWorkspaceRoot } from \"../scripts/utils.js\";\nimport { listOnboardingSteps } from \"../onboarding/registry.js\";\nimport {\n uploadFile,\n getActiveFileUploadProvider,\n listFileUploadProviders,\n} from \"../file-upload/index.js\";\nimport { readMultipartFormData } from \"h3\";\nimport {\n createListSecretsHandler,\n createWriteSecretHandler,\n createTestSecretHandler,\n createAdHocSecretHandler,\n} from \"../secrets/routes.js\";\nimport { registerFrameworkSecrets } from \"../secrets/register-framework-secrets.js\";\nimport { registerBuiltinProviders } from \"../tracking/providers.js\";\nimport { track } from \"../tracking/index.js\";\nimport { registerBuiltinNotificationChannels } from \"../notifications/channels.js\";\nimport { createNotificationsHandler } from \"../notifications/routes.js\";\nimport { createProgressHandler } from \"../progress/routes.js\";\nimport { createGoogleRealtimeSessionHandler } from \"./google-realtime-session.js\";\nimport { createTranscribeVoiceHandler } from \"./transcribe-voice.js\";\nimport { runWithRequestContext } from \"./request-context.js\";\nimport { createVoiceProvidersStatusHandler } from \"./voice-providers-status.js\";\nimport { PROVIDER_ENV_META } from \"../agent/engine/provider-env-vars.js\";\nimport { DEFAULT_MODEL } from \"../agent/default-model.js\";\nimport { canUseDeployCredentialFallbackForRequest } from \"./credential-provider.js\";\nimport {\n canUpdateAgentLoopSettings,\n readAgentLoopSettings,\n resetAgentLoopSettings,\n validateMaxIterationsInput,\n writeAgentLoopSettings,\n} from \"../agent/loop-settings.js\";\nimport {\n isAgentEngineSettingConfigured,\n getAgentEngineEntry,\n detectEngineFromEnv,\n detectEngineFromUserSecrets,\n isStoredEngineUsableForRequest,\n} from \"../agent/engine/registry.js\";\nimport { registerBuiltinEngines } from \"../agent/engine/builtin.js\";\nimport { getOrgContext } from \"../org/context.js\";\nimport { isEnvVarWriteAllowed } from \"./env-var-writes.js\";\nimport { llmConnectionTrackingProperties } from \"../shared/llm-connection.js\";\n\n/**\n * The base path prefix for all framework-level routes.\n * All agent-native core routes live under this namespace to avoid\n * collisions with template-specific `/api/*` routes.\n */\nexport const FRAMEWORK_ROUTE_PREFIX = \"/_agent-native\";\n\nregisterBuiltinEngines();\n\nconst PROVIDER_ENV_VAR_KEYS = new Set(\n Object.values(PROVIDER_ENV_META).map(({ envVar }) => envVar),\n);\n\nasync function detectUsageEngineName(\n event: H3Event,\n userEmail: string | undefined,\n): Promise<string | null> {\n try {\n const stored = (await getSetting(\"agent-engine\")) as {\n engine?: string;\n } | null;\n if (isAgentEngineSettingConfigured(stored)) {\n return (stored as { engine: string }).engine;\n }\n let orgId: string | undefined;\n if (userEmail) {\n try {\n const orgCtx = await getOrgContext(event);\n orgId = orgCtx.orgId ?? undefined;\n } catch {\n /* org module not present in this template */\n }\n }\n const detectedFromUser = await runWithRequestContext(\n { userEmail, orgId },\n () => detectEngineFromUserSecrets(),\n );\n if (detectedFromUser?.name === \"builder\") return detectedFromUser.name;\n\n if (stored && typeof stored.engine === \"string\") {\n const entry = getAgentEngineEntry(stored.engine);\n if (\n entry &&\n (await runWithRequestContext({ userEmail, orgId }, () =>\n isStoredEngineUsableForRequest(stored, entry),\n ))\n ) {\n return stored.engine;\n }\n }\n if (detectedFromUser) return detectedFromUser.name;\n\n const canUseDeployEnv = await runWithRequestContext(\n { userEmail, orgId },\n () => canUseDeployCredentialFallbackForRequest(),\n );\n return canUseDeployEnv ? (detectEngineFromEnv()?.name ?? null) : null;\n } catch {\n return null;\n }\n}\n\nasync function trackBuilderLifecycle(\n event: H3Event,\n name: string,\n userEmail: string | undefined | null,\n properties: Record<string, unknown> = {},\n): Promise<void> {\n if (!userEmail) return;\n const engine = await detectUsageEngineName(event, userEmail);\n track(\n name,\n {\n feature: \"builder\",\n ...llmConnectionTrackingProperties({\n configured: Boolean(engine),\n engine,\n }),\n ...properties,\n },\n { userId: userEmail },\n );\n}\n\nfunction normalizeAppBasePath(value: string | undefined): string {\n if (!value || value === \"/\") return \"\";\n const trimmed = value.trim();\n if (!trimmed || trimmed === \"/\") return \"\";\n return `/${trimmed.replace(/^\\/+/, \"\").replace(/\\/+$/, \"\")}`;\n}\n\nfunction stripAppBasePath(pathname: string): string {\n const basePath = normalizeAppBasePath(\n process.env.VITE_APP_BASE_PATH || process.env.APP_BASE_PATH,\n );\n if (!basePath) return pathname;\n if (pathname === basePath) return \"/\";\n if (pathname.startsWith(`${basePath}/`)) {\n return pathname.slice(basePath.length) || \"/\";\n }\n return pathname;\n}\n\nfunction getBuilderConnectOwnerCookiePath(): string {\n return getAppBasePath() || \"/\";\n}\n\nfunction readBuilderConnectOwnerCookie(event: H3Event): string | null {\n return verifyBuilderConnectTokenAndGetOwner(\n getCookie(event, BUILDER_CONNECT_OWNER_COOKIE),\n );\n}\n\nfunction setBuilderConnectOwnerCookie(\n event: H3Event,\n ownerEmail: string,\n): void {\n setCookie(\n event,\n BUILDER_CONNECT_OWNER_COOKIE,\n signBuilderConnectToken(ownerEmail),\n {\n httpOnly: true,\n sameSite: \"lax\",\n secure: getOrigin(event).startsWith(\"https://\"),\n path: getBuilderConnectOwnerCookiePath(),\n maxAge: 10 * 60,\n },\n );\n}\n\nfunction clearBuilderConnectOwnerCookie(event: H3Event): void {\n deleteCookie(event, BUILDER_CONNECT_OWNER_COOKIE, {\n path: getBuilderConnectOwnerCookiePath(),\n });\n}\n\n/**\n * Resolves the page-level legacy `/tools` → `/extensions` redirect target.\n *\n * Returns the absolute path (with optional query string) to redirect to,\n * or `null` if the request should fall through to the SPA / next handler.\n *\n * Skips:\n * - Framework API namespace (`/_agent-native/tools/*` is handled separately\n * as a legacy alias and intentionally stays mounted as `tools`).\n * - Anything that isn't `/tools` or a `/tools/...` page navigation, after\n * the configured app base path is stripped off.\n *\n * Exported for tests; the runtime middleware below is a thin wrapper.\n */\nexport function resolveLegacyToolsRedirect(\n rawPath: string,\n search: string,\n): string | null {\n if (rawPath === \"/_agent-native\" || rawPath.startsWith(\"/_agent-native/\")) {\n return null;\n }\n const pathname = stripAppBasePath(rawPath);\n if (pathname !== \"/tools\" && !pathname.startsWith(\"/tools/\")) return null;\n const suffix = pathname === \"/tools\" ? \"\" : pathname.slice(\"/tools\".length);\n const basePath = normalizeAppBasePath(\n process.env.VITE_APP_BASE_PATH || process.env.APP_BASE_PATH,\n );\n return `${basePath}/extensions${suffix}${search}`;\n}\n\nfunction redactValues(text: string, values: Array<string | null | undefined>) {\n let out = text;\n for (const value of values) {\n if (value) out = out.split(value).join(\"[redacted]\");\n }\n return out;\n}\n\ntype NitroPluginDef = (nitroApp: any) => void | Promise<void>;\n\nexport interface CoreRoutesPluginOptions {\n /** Route path for the SSE endpoint. Default: \"/_agent-native/events\" */\n sseRoute?: string;\n /** Disable the SSE endpoint entirely. */\n disableSSE?: boolean;\n /** Disable the /_agent-native/ping health check. */\n disablePing?: boolean;\n /** Disable the /_agent-native/application-state routes. */\n disableAppState?: boolean;\n /** Env key configuration. Enables env-status and env-vars routes. */\n envKeys?: EnvKeyConfig[];\n /**\n * Optional owner resolver for narrowly-scoped public routes. Used by public\n * pages that let anonymous viewers connect Builder credentials for their\n * own browser-scoped agent session.\n */\n anonymousOwner?: (event: H3Event) => string | null | Promise<string | null>;\n}\n\n/**\n * Creates a Nitro plugin that mounts all standard agent-native framework routes.\n *\n * All routes are mounted under `/_agent-native/` to avoid collisions\n * with template-specific routes.\n *\n * Routes:\n * GET /_agent-native/poll — polling endpoint for change detection\n * GET /_agent-native/events (or custom) — SSE endpoint for real-time sync\n * GET /_agent-native/ping — health check\n * GET /_agent-native/env-status — env key configuration status (when envKeys provided)\n * POST /_agent-native/env-vars — save env vars to .env (when envKeys provided)\n * GET /_agent-native/application-state/:key — read application state\n * PUT /_agent-native/application-state/:key — write application state\n * DELETE /_agent-native/application-state/:key — delete application state\n * GET /_agent-native/application-state/compose — list compose drafts\n * DELETE /_agent-native/application-state/compose — delete all compose drafts\n * GET /_agent-native/application-state/compose/:id — get compose draft\n * PUT /_agent-native/application-state/compose/:id — upsert compose draft\n * DELETE /_agent-native/application-state/compose/:id — delete compose draft\n */\nexport function createCoreRoutesPlugin(\n options: CoreRoutesPluginOptions = {},\n): NitroPluginDef {\n return async (nitroApp: any) => {\n markDefaultPluginProvided(nitroApp, \"core-routes\");\n // No-op when called from inside the bootstrap (auto-mount path).\n // Otherwise wait so other default plugins finish mounting first.\n await awaitBootstrap(nitroApp);\n\n // Restore env vars from the settings table. On serverless, .env\n // writes don't persist across invocations — the DB is the durable\n // store. Only set keys that are currently empty so explicit env\n // vars (Netlify dashboard, process-level) always win.\n //\n // GATED: only rehydrate into `process.env` on local-dev SQLite (or\n // with the explicit single-tenant opt-in). On a shared-DB hosted\n // multi-tenant deploy the `persisted-env-vars` row is deployment-wide\n // global state — pushing user-supplied values into `process.env` from\n // it would let any one tenant's writes (or a stale dev seed) leak\n // into every other tenant's process. The opt-out scrub of legacy\n // BUILDER_* values still runs unconditionally so existing rows on\n // multi-tenant deploys self-heal, but new env-var writes never land\n // in `process.env` outside the allowed contexts.\n try {\n const persisted = (await getSetting(\"persisted-env-vars\")) as Record<\n string,\n string\n > | null;\n if (persisted) {\n const builderKeys = new Set<string>(BUILDER_ENV_KEYS);\n const writesAllowed = isEnvVarWriteAllowed();\n let scrubbed = 0;\n for (const [k, v] of Object.entries(persisted)) {\n if (builderKeys.has(k)) {\n scrubbed++;\n continue;\n }\n if (writesAllowed && typeof v === \"string\" && !process.env[k]) {\n process.env[k] = v;\n }\n }\n if (scrubbed > 0) {\n try {\n const cleaned: Record<string, string> = {};\n for (const [k, v] of Object.entries(persisted)) {\n if (!builderKeys.has(k)) cleaned[k] = v;\n }\n await putSetting(\"persisted-env-vars\", cleaned);\n console.warn(\n `[core] Removed ${scrubbed} legacy BUILDER_* key(s) from persisted-env-vars (cross-tenant leak fix).`,\n );\n } catch {\n // Couldn't rewrite the row — the skip-on-rehydrate above\n // is the load-bearing protection. We'll try again next boot.\n }\n }\n }\n } catch {\n // DB not ready yet — skip\n }\n\n // Honor Builder disconnect. Nitro's dev env-runner preserves\n // `process.env` across `.env` file reloads inside the same worker, so\n // deleting BUILDER_PRIVATE_KEY in the disconnect handler can bleed\n // back through an env-runner restart. We persist a\n // `builder-disconnected` flag in SQL and scrub BUILDER_* on every\n // plugin init while the flag is set. The flag is cleared by the\n // Builder cli-auth callback when the user re-connects.\n try {\n const disconnected = (await getSetting(\"builder-disconnected\")) as {\n at?: number;\n } | null;\n if (disconnected) {\n for (const key of BUILDER_ENV_KEYS) {\n delete process.env[key];\n }\n }\n } catch {\n // DB not ready — skip; the disconnect flag will be enforced on the\n // next plugin boot once the settings table is reachable.\n }\n\n // Register framework-level secrets (OPENAI_API_KEY for composer voice\n // transcription, etc.). Each registration is guarded so templates that\n // already registered the same key win.\n registerFrameworkSecrets();\n registerBuiltinProviders();\n registerBuiltinNotificationChannels();\n\n try {\n const { createObservabilityHandler } =\n await import(\"../observability/routes.js\");\n const { ensureObservabilityTables } =\n await import(\"../observability/store.js\");\n ensureObservabilityTables().catch(() => {});\n getH3App(nitroApp).use(\n `${FRAMEWORK_ROUTE_PREFIX}/observability`,\n createObservabilityHandler(),\n );\n } catch {\n // Observability module not available — skip\n }\n\n const P = FRAMEWORK_ROUTE_PREFIX;\n\n // Security response headers — emitted on every framework response.\n // Mounted before route handlers so 4xx/5xx error pages also carry the\n // headers. Routes that need to relax a specific header (e.g. the tools\n // /render route allowing same-origin framing) override via setResponseHeader.\n const { createSecurityHeadersMiddleware } =\n await import(\"./security-headers.js\");\n getH3App(nitroApp).use(createSecurityHeadersMiddleware());\n\n // CORS for framework routes. Desktop tray apps (Tauri/Electron) run on\n // their own dev origin (e.g. localhost:1420) and make credentialed\n // requests against the template's server at a different port. We echo\n // the exact origin + Allow-Credentials so same-site localhost ports\n // can cross-send cookies.\n const allowlist = readCorsAllowedOrigins();\n getH3App(nitroApp).use(\n defineEventHandler((event) => {\n const pathname = stripAppBasePath(\n event.url?.pathname ??\n String(event.node?.req?.url ?? event.path ?? \"/\").split(\"?\")[0],\n );\n if (!pathname.startsWith(P) && !pathname.startsWith(\"/api/\")) return;\n const origin = getHeader(event, \"origin\");\n const method = getMethod(event);\n\n // Decide whether this origin is allowed. We never fall back to the\n // first allowlist entry — that previously echoed `Access-Control-\n // Allow-Origin: <unrelated-allowed-origin>` for disallowed callers,\n // which is permissive enough that some clients followed through.\n const allowedOrigin = getAllowedCorsOrigin(origin, {\n allowedOrigins: allowlist,\n allowAnyOriginWhenNoAllowlist: false,\n allowLocalhostWhenNoAllowlist: true,\n });\n\n // Reject preflights from disallowed cross-origin callers BEFORE\n // returning 204. Previously the OPTIONS short-circuit returned 204\n // with no ACAO header, which the browser then treats as a CORS\n // failure — but also short-circuited any further checks. Now we\n // explicitly 403 disallowed cross-origin preflights.\n if (method === \"OPTIONS\") {\n if (origin && !allowedOrigin) {\n setResponseStatus(event, 403);\n return \"\";\n }\n if (allowedOrigin) {\n setResponseHeader(\n event,\n \"Access-Control-Allow-Origin\",\n allowedOrigin,\n );\n setResponseHeader(event, \"Vary\", \"Origin\");\n setResponseHeader(\n event,\n \"Access-Control-Allow-Credentials\",\n \"true\",\n );\n setResponseHeader(\n event,\n \"Access-Control-Allow-Methods\",\n \"GET,HEAD,POST,PUT,PATCH,DELETE,OPTIONS\",\n );\n setResponseHeader(\n event,\n \"Access-Control-Allow-Headers\",\n \"Content-Type,Authorization,X-Requested-With,X-Request-Source,X-Agent-Native-CSRF\",\n );\n }\n setResponseStatus(event, 204);\n return \"\";\n }\n\n // Non-preflight requests: only set CORS response headers when we\n // have an allowed origin. Same-origin / no-origin requests fall\n // through without explicit CORS headers (browser treats them as\n // same-origin by default).\n if (!allowedOrigin) return;\n setResponseHeader(event, \"Access-Control-Allow-Origin\", allowedOrigin);\n setResponseHeader(event, \"Vary\", \"Origin\");\n setResponseHeader(event, \"Access-Control-Allow-Credentials\", \"true\");\n setResponseHeader(\n event,\n \"Access-Control-Allow-Methods\",\n \"GET,HEAD,POST,PUT,PATCH,DELETE,OPTIONS\",\n );\n setResponseHeader(\n event,\n \"Access-Control-Allow-Headers\",\n \"Content-Type,Authorization,X-Requested-With,X-Request-Source,X-Agent-Native-CSRF\",\n );\n }),\n );\n\n // Defense-in-depth CSRF check for state-changing /_agent-native/* routes.\n // Mounted AFTER the CORS layer so disallowed-origin OPTIONS preflights\n // 403 first (rather than being rejected on a stale cookie heuristic).\n // See `csrf.ts` for the threat model and allowlist.\n const { createCsrfMiddleware } = await import(\"./csrf.js\");\n getH3App(nitroApp).use(createCsrfMiddleware(P));\n\n // Polling\n getH3App(nitroApp).use(`${P}/poll`, createPollHandler());\n\n // SSE\n if (!options.disableSSE) {\n const sseRoute = options.sseRoute ?? `${P}/events`;\n getH3App(nitroApp).use(sseRoute, createPollEventsHandler());\n }\n\n // Ping\n if (!options.disablePing) {\n getH3App(nitroApp).use(\n `${P}/ping`,\n defineEventHandler(() => ({\n message: process.env.PING_MESSAGE ?? \"pong\",\n })),\n );\n }\n\n type BuilderOwnerContext = {\n email: string | undefined;\n session: Awaited<ReturnType<typeof getSession>> | null;\n anonymous: boolean;\n };\n\n const resolveBuilderOwnerContext = async (\n event: H3Event,\n ): Promise<BuilderOwnerContext> => {\n const session = await getSession(event).catch(() => null);\n if (session?.email) {\n return { email: session.email, session, anonymous: false };\n }\n\n const rawUrl = event.node?.req?.url ?? event.path ?? \"/\";\n const queryStart = rawUrl.indexOf(\"?\");\n const rawPath = queryStart >= 0 ? rawUrl.slice(0, queryStart) : rawUrl;\n const search = queryStart >= 0 ? rawUrl.slice(queryStart + 1) : \"\";\n const path = stripAppBasePath(rawPath);\n\n if (path === `${P}/builder/connect`) {\n const ownerFromConnectToken = verifyBuilderConnectTokenAndGetOwner(\n new URLSearchParams(search).get(BUILDER_CONNECT_PARAM),\n );\n if (ownerFromConnectToken) {\n return {\n email: ownerFromConnectToken,\n session: null,\n anonymous: false,\n };\n }\n }\n\n if (path === `${P}/builder/callback`) {\n // Prefer the signed _an_state owner over the legacy\n // an_builder_connect_owner cookie. The cookie can be stale on a\n // shared browser — user A signed in earlier, user B starts a fresh\n // callback with a signed state for B — and using the cookie first\n // would mis-attribute B's Builder credentials to A. The signed\n // state is per-flow and TTL-bounded, so it's authoritative when\n // both are present.\n const ownerFromCallbackState = verifyBuilderCallbackStateAndGetOwner(\n new URLSearchParams(search).get(BUILDER_STATE_PARAM),\n );\n if (ownerFromCallbackState) {\n return {\n email: ownerFromCallbackState,\n session: null,\n anonymous: false,\n };\n }\n const ownerFromCookie = readBuilderConnectOwnerCookie(event);\n if (ownerFromCookie) {\n return { email: ownerFromCookie, session: null, anonymous: false };\n }\n }\n\n const anonymousOwner = await options.anonymousOwner?.(event);\n if (anonymousOwner) {\n return { email: anonymousOwner, session: null, anonymous: true };\n }\n\n return { email: undefined, session: null, anonymous: false };\n };\n\n getH3App(nitroApp).use(\n `${P}/builder/status`,\n defineEventHandler(async (event) => {\n const envStatus = getBuilderBrowserStatusForEvent(event);\n const ownerContext = await resolveBuilderOwnerContext(event);\n const userEmail = ownerContext.email;\n const withConnectToken = <T extends { connectUrl: string }>(\n status: T,\n ): T & { cliAuthUrl?: string } => {\n if (!userEmail) return status;\n // Use the preview-aware origin (same one connectUrl uses) so\n // Builder's CLI auth flow returns to the active preview deployment\n // instead of bouncing through the gateway. getOrigin(event) falls\n // back to the gateway on Builder preview hosts, which defeats the\n // whole preview-aware isolation goal of this PR.\n const callbackOrigin = getBuilderBrowserOriginForEvent(event);\n const cliAuthUrl = buildBuilderCliAuthUrl(\n callbackOrigin,\n signBuilderCallbackState(userEmail),\n );\n return {\n ...status,\n connectUrl: appendBuilderConnectToken(status.connectUrl, userEmail),\n cliAuthUrl,\n };\n };\n\n // Pass the user's active orgId so status reads can fall back to\n // org-scoped credentials and branch project IDs. Without it, an\n // admin's org-scope OAuth result is invisible to every other org\n // member's status poller and the UI would show \"not connected\" forever\n // even though the chat actually resolves the org-shared credential.\n let orgId: string | null = null;\n if (!ownerContext.anonymous) {\n try {\n const { getOrgContext } = await import(\"../org/context.js\");\n const orgCtx = await getOrgContext(event);\n orgId = orgCtx.orgId ?? null;\n } catch {\n /* org module not present in this template — keep userEmail-only */\n }\n }\n\n return runWithRequestContext({ userEmail, orgId }, async () => {\n const projectId = await resolveBuilderBranchProjectId();\n const requestStatus = {\n ...envStatus,\n builderEnabled: !!projectId,\n branchProjectIdConfigured: !!projectId,\n branchProjectId: projectId || undefined,\n };\n\n // Surface a recent OAuth callback failure before reporting a\n // deployment fallback as \"connected\"; otherwise a failed personal\n // connect attempt on a deploy that also has BUILDER_PRIVATE_KEY set\n // looks successful even though the user's credentials were not saved.\n try {\n if (userEmail) {\n const errKey = `builder-connect-error:${userEmail}`;\n const errRow = await getSetting(errKey);\n if (errRow && typeof errRow.message === \"string\") {\n await deleteSetting(errKey).catch(() => {});\n return withConnectToken({\n ...requestStatus,\n configured: false,\n privateKeyConfigured: false,\n publicKeyConfigured: false,\n userId: undefined,\n orgName: undefined,\n orgKind: undefined,\n connectError: {\n message: errRow.message as string,\n at:\n typeof errRow.at === \"number\"\n ? (errRow.at as number)\n : Date.now(),\n },\n });\n }\n }\n } catch {\n // settings store unavailable — fall through\n }\n\n // Read request-scoped Builder credentials first; deploy env is only\n // the fallback. This keeps a root/local BUILDER_PRIVATE_KEY from\n // blocking a user from connecting their own Builder account.\n try {\n const {\n resolveBuilderCredentials,\n resolveBuilderCredentialSource,\n } = await import(\"./credential-provider.js\");\n const [creds, credentialSource] = await Promise.all([\n resolveBuilderCredentials(),\n resolveBuilderCredentialSource(),\n ]);\n if (creds.privateKey) {\n return withConnectToken({\n ...requestStatus,\n configured: true,\n privateKeyConfigured: true,\n publicKeyConfigured: !!creds.publicKey,\n userId: creds.userId || envStatus.userId,\n orgName: creds.orgName || envStatus.orgName,\n orgKind: creds.orgKind || envStatus.orgKind,\n credentialSource: credentialSource ?? undefined,\n });\n }\n } catch {\n // Secrets table not ready — fall through to env status\n }\n\n // Honor legacy disconnect flag for existing deployments.\n try {\n const disconnected = await getSetting(\"builder-disconnected\");\n if (disconnected) {\n return withConnectToken({\n ...requestStatus,\n configured: false,\n privateKeyConfigured: false,\n publicKeyConfigured: false,\n userId: undefined,\n orgName: undefined,\n orgKind: undefined,\n });\n }\n } catch {\n // DB not reachable\n }\n // No env, no per-user creds → not configured. Both authenticated\n // and unauthenticated callers see \"not connected\" so they can\n // run through the OAuth flow.\n return withConnectToken({\n ...requestStatus,\n configured: false,\n privateKeyConfigured: false,\n publicKeyConfigured: false,\n userId: undefined,\n orgName: undefined,\n orgKind: undefined,\n });\n });\n }),\n );\n\n // How long a pending-connect row is valid. Must be long enough for\n // the user to complete the Builder CLI-auth flow, but short enough\n // that a stale row from an abandoned attempt doesn't accept a new\n // callback minutes later.\n const BUILDER_CONNECT_PENDING_TTL_MS = 10 * 60 * 1000; // 10 min\n\n // Decide whether a /builder/connect navigation originated from this\n // app's own UI (allowed) or from a foreign origin (cross-site CSRF\n // attempt — rejected). Sec-Fetch-Site is the modern signal:\n // - \"same-origin\": user clicked Connect from our own pages — allow\n // - \"none\": typed in URL bar / bookmark / browser extension — allow\n // - \"same-site\" / \"cross-site\" / missing-but-with-foreign-Origin\n // all map to reject.\n // For older browsers without Sec-Fetch-* we fall back to Origin and\n // then Referer, comparing against the request's resolved origin.\n function isSameOriginConnect(event: H3Event): boolean {\n const fetchSite = getHeader(event, \"sec-fetch-site\");\n if (fetchSite === \"same-origin\" || fetchSite === \"none\") return true;\n if (fetchSite) return false; // browser told us it's cross-site/same-site\n const expected = getBuilderBrowserOriginForEvent(event).replace(\n /\\/+$/,\n \"\",\n );\n const origin = getHeader(event, \"origin\");\n if (origin) return origin.replace(/\\/+$/, \"\") === expected;\n const referer = getHeader(event, \"referer\");\n if (referer) {\n try {\n return new URL(referer).origin === expected;\n } catch {\n return false;\n }\n }\n // No Sec-Fetch-Site, no Origin, no Referer — pre-2020 browser\n // making a top-level navigation. Allow; cookies are still\n // session-bound so the worst case degrades to the prior behavior.\n return true;\n }\n\n // Lightweight 302 to the Builder CLI-auth URL. Lets clients do\n // `window.open('/_agent-native/builder/connect', '_blank')` synchronously\n // inside a click handler, avoiding the popup-blocker downgrade that\n // happens when an await sits before window.open.\n //\n // CSRF protection here is layered because session cookies are\n // SameSite=None;Secure (so the editor iframe can ride along) — that\n // means a session cookie alone does NOT prevent cross-origin\n // window.open from initiating a connect flow on the victim's behalf:\n // 1. Signed connect token from /builder/status — proves the opener\n // could read same-origin JSON, which cross-site attackers cannot.\n // This covers local/embedded browsers that conservatively label a\n // legitimate popup navigation as same-site/cross-site.\n // 2. Sec-Fetch-Site header fallback — modern browsers stamp every\n // request with the navigation context. We allow `same-origin` or\n // `none` (typed/bookmark/extension); cross-site / same-site without\n // a valid connect token are rejected.\n // 3. Pending row keyed by session email + bound nonce — the callback\n // requires both a valid session and a one-time row that this\n // handler wrote during the same flow. Without the same-origin\n // gate or connect token above, an attacker could prime the row from\n // cross-site and then trick the victim into hitting a callback URL\n // with attacker-controlled p-key/api-key, hijacking the victim's\n // account.\n getH3App(nitroApp).use(\n `${P}/builder/connect`,\n defineEventHandler(async (event) => {\n const ownerContext = await resolveBuilderOwnerContext(event);\n const ownerEmail = ownerContext.email;\n if (!ownerEmail) {\n setResponseStatus(event, 401);\n return { error: \"Authentication required\" };\n }\n\n const requestUrl = new URL(\n `${event.url?.pathname || \"/\"}${event.url?.search || \"\"}`,\n getBuilderBrowserOriginForEvent(event),\n );\n const connectToken = requestUrl.searchParams.get(BUILDER_CONNECT_PARAM);\n const connectTokenOwner =\n verifyBuilderConnectTokenAndGetOwner(connectToken);\n // The token must both be well-formed AND minted for the current\n // session owner. Without the owner check, an attacker holding any\n // valid signed token could trick a victim into hitting this route\n // with that token to bypass the cross-origin gate.\n const hasValidConnectToken =\n Boolean(connectTokenOwner) && connectTokenOwner === ownerEmail;\n\n // Same-origin gate. Sec-Fetch-Site remains the fast path; the signed\n // connect token is the compatibility path for legitimate embedded or\n // local desktop popups stamped as same-site/cross-site by the browser.\n if (!isSameOriginConnect(event) && !hasValidConnectToken) {\n const crossOriginMessage = connectToken\n ? \"This Builder connect link is expired or belongs to a different deployment. Close this popup and click Connect account again.\"\n : \"Builder connect opened without a fresh signed link. Close this popup and click Connect account again.\";\n await trackBuilderLifecycle(\n event,\n \"builder connect failed\",\n ownerEmail,\n {\n reason: \"cross_origin\",\n stage: \"connect\",\n has_connect_token: Boolean(connectToken),\n has_valid_connect_token: false,\n connect_token_owner_matches_context: false,\n sec_fetch_site: getHeader(event, \"sec-fetch-site\") ?? null,\n },\n );\n await putSetting(`builder-connect-error:${ownerEmail}`, {\n message: crossOriginMessage,\n at: Date.now(),\n }).catch(() => {});\n console.warn(\"[builder-connect] rejected cross-origin connect\", {\n hasConnectToken: Boolean(connectToken),\n secFetchSite: getHeader(event, \"sec-fetch-site\") ?? null,\n origin: getHeader(event, \"origin\") ?? null,\n referer: getHeader(event, \"referer\") ?? null,\n });\n setResponseStatus(event, 403);\n setResponseHeader(event, \"Content-Type\", \"text/html; charset=utf-8\");\n return createBuilderBrowserCallbackErrorPage(crossOriginMessage, {\n title: \"Couldn't start Builder connection\",\n body: \"The connect popup did not include a valid signed link for this app.\",\n closeHint:\n \"Close this popup, refresh the app, and try Connect account again.\",\n });\n }\n\n // Clear any prior failure row from a previous attempt — otherwise\n // useBuilderStatus polling sees the stale error and aborts the\n // new attempt before it can complete.\n try {\n await deleteSetting(`builder-connect-error:${ownerEmail}`);\n } catch {\n // No prior error row — fine\n }\n\n // Store a short-lived pending row. If the DB is unavailable we\n // surface a popup-renderable error page that signals the parent\n // via BroadcastChannel, rather than letting the popup show raw\n // JSON and the parent poll for 5 minutes.\n try {\n await putSetting(`builder-pending-connect:${ownerEmail}`, {\n expiresAt: Date.now() + BUILDER_CONNECT_PENDING_TTL_MS,\n });\n } catch (err) {\n await trackBuilderLifecycle(\n event,\n \"builder connect failed\",\n ownerEmail,\n {\n reason: \"pending_storage_unavailable\",\n stage: \"connect\",\n },\n );\n const msg =\n \"Could not initiate Builder connect — storage unavailable. Try again.\";\n console.error(\n \"[builder] Could not store pending-connect state:\",\n (err as Error)?.message ?? err,\n );\n // Best-effort: also write the error row so the parent's\n // /builder/status poll picks it up if BroadcastChannel doesn't.\n await putSetting(`builder-connect-error:${ownerEmail}`, {\n message: msg,\n at: Date.now(),\n }).catch(() => {});\n setResponseStatus(event, 503);\n setResponseHeader(event, \"Content-Type\", \"text/html; charset=utf-8\");\n return createBuilderBrowserCallbackErrorPage(msg);\n }\n await trackBuilderLifecycle(\n event,\n \"builder connect started\",\n ownerEmail,\n {\n stage: \"connect\",\n connect_token_owner_matches_context:\n !connectTokenOwner || connectTokenOwner === ownerEmail,\n },\n );\n setBuilderConnectOwnerCookie(event, ownerEmail);\n // The primary UI now opens the signed Builder /cli-auth URL directly\n // from /builder/status. Keep this legacy trampoline working for older\n // clients, but still send it to Builder immediately and include signed\n // callback state so the callback does not depend on popup cookies.\n const cliAuthUrl = buildBuilderCliAuthUrl(\n getBuilderBrowserOriginForEvent(event),\n signBuilderCallbackState(ownerEmail),\n );\n setResponseStatus(event, 302);\n setResponseHeader(event, \"Location\", cliAuthUrl);\n return \"\";\n }),\n );\n\n getH3App(nitroApp).use(\n `${P}/builder/run`,\n defineEventHandler(async (event: H3Event) => {\n if (getMethod(event) !== \"POST\") {\n setResponseStatus(event, 405);\n return { error: \"Method not allowed\" };\n }\n const body = await readBody(event).catch(() => ({}) as any);\n const prompt = typeof body?.prompt === \"string\" ? body.prompt : \"\";\n if (!prompt.trim()) {\n setResponseStatus(event, 400);\n return { error: \"prompt is required\" };\n }\n const session = await getSession(event).catch(() => null);\n if (!session?.email) {\n setResponseStatus(event, 401);\n return { error: \"Authentication required\" };\n }\n const userEmail = session.email;\n\n let orgId: string | null = null;\n try {\n const orgCtx = await getOrgContext(event);\n orgId = orgCtx.orgId ?? null;\n } catch {\n /* org module not present in this template — keep userEmail-only */\n }\n\n // Wrap in runWithRequestContext so resolveBuilderCredential() inside\n // runBuilderAgent() resolves per-user app_secrets rather than falling\n // through to process.env — the same pattern the /builder/status endpoint\n // uses. Without this, per-user Builder keys stored in app_secrets are\n // invisible to the run path and the call throws \"Builder keys are not\n // configured\" even though the status endpoint correctly reports configured=true.\n return runWithRequestContext({ userEmail, orgId }, async () => {\n const projectId = await resolveBuilderBranchProjectId();\n if (!projectId) {\n setResponseStatus(event, 403);\n return {\n error:\n \"Builder branch creation is not available for this organization yet.\",\n };\n }\n\n const { resolveBuilderCredential: resolveBuilderCred } =\n await import(\"./credential-provider.js\");\n const builderUserId =\n (await resolveBuilderCred(\"BUILDER_USER_ID\")) || undefined;\n // Server-controlled projectId — don't let clients target arbitrary\n // Builder projects with our private key. When this feature graduates\n // past the hardcoded preview, the projectId will come from\n // workspace/org config, still resolved server-side.\n try {\n const result = await runBuilderAgent({\n prompt,\n projectId,\n branchName:\n typeof body?.branchName === \"string\"\n ? body.branchName\n : undefined,\n userEmail,\n userId: builderUserId,\n });\n return result;\n } catch (e) {\n setResponseStatus(event, 500);\n return {\n error: e instanceof Error ? e.message : \"Builder run failed\",\n };\n }\n });\n }),\n );\n\n // Branch-creation waitlist signup. Used by ConnectBuilderCard when the\n // current request has no Builder branch project configured — instead of\n // the raw 403 from /builder/run, the card surfaces a waitlist CTA that\n // POSTs here. Recorded as a tracking event so PostHog/Mixpanel/etc.\n // capture demand without us standing up new storage.\n getH3App(nitroApp).use(\n `${P}/builder/branch-waitlist`,\n defineEventHandler(async (event: H3Event) => {\n if (getMethod(event) !== \"POST\") {\n setResponseStatus(event, 405);\n return { error: \"Method not allowed\" };\n }\n const session = await getSession(event).catch(() => null);\n if (!session?.email) {\n setResponseStatus(event, 401);\n return { error: \"Authentication required\" };\n }\n await trackBuilderLifecycle(\n event,\n \"builder branch waitlist joined\",\n session.email,\n {\n stage: \"waitlist\",\n },\n );\n return { ok: true };\n }),\n );\n\n getH3App(nitroApp).use(\n `${P}/builder/callback`,\n defineEventHandler(async (event: H3Event) => {\n if (getMethod(event) !== \"GET\") {\n setResponseStatus(event, 405);\n return { error: \"Method not allowed\" };\n }\n\n // A real session or a template-approved anonymous owner is required;\n // the pending-row check below (combined with the same-origin gate on\n // /builder/connect) blocks CSRF and callback replay.\n const ownerContext = await resolveBuilderOwnerContext(event);\n const ownerEmail = ownerContext.email;\n if (!ownerEmail) {\n setResponseStatus(event, 401);\n return { error: \"Authentication required\" };\n }\n clearBuilderConnectOwnerCookie(event);\n\n const requestUrl = new URL(\n `${event.url?.pathname || \"/\"}${event.url?.search || \"\"}`,\n getOrigin(event),\n );\n const callbackStateOwner = verifyBuilderCallbackStateAndGetOwner(\n requestUrl.searchParams.get(BUILDER_STATE_PARAM),\n );\n const hasValidCallbackState = callbackStateOwner === ownerEmail;\n\n // Verify either:\n // 1. the signed callback state embedded in redirect_url by\n // /builder/status (primary flow), or\n // 2. the server-side pending-connect row written by the legacy\n // /builder/connect trampoline.\n //\n // For the pending-row path, delete must succeed before we proceed;\n // otherwise a DB blip\n // leaves the row in place and the same callback URL can be\n // replayed against the same session for up to 10 minutes (the\n // TTL window). Treat a delete failure as a hard failure: the\n // user retries, the next /builder/connect call rewrites the\n // pending row.\n let pendingValid = hasValidCallbackState;\n let pendingError: string | null = null;\n try {\n const pending = (await getSetting(\n `builder-pending-connect:${ownerEmail}`,\n )) as { expiresAt?: number } | null;\n if (\n pending &&\n typeof pending.expiresAt === \"number\" &&\n Date.now() < pending.expiresAt\n ) {\n try {\n await deleteSetting(`builder-pending-connect:${ownerEmail}`);\n pendingValid = true;\n } catch (err) {\n if (!hasValidCallbackState) {\n pendingError =\n \"Could not consume pending-connect token (storage error). Please retry.\";\n console.error(\n \"[builder] deleteSetting failed for pending-connect — refusing to proceed (replay risk):\",\n (err as Error)?.message ?? err,\n );\n }\n }\n }\n } catch {\n // DB temporarily unavailable — treat as missing.\n }\n\n if (pendingError) {\n await trackBuilderLifecycle(\n event,\n \"builder connect failed\",\n ownerEmail,\n {\n reason: \"pending_consume_storage_error\",\n stage: \"callback\",\n },\n );\n // Best-effort signal to the parent's poll loop, then render the\n // popup-friendly error page so the BroadcastChannel notify fires.\n await putSetting(`builder-connect-error:${ownerEmail}`, {\n message: pendingError,\n at: Date.now(),\n }).catch(() => {});\n setResponseStatus(event, 503);\n setResponseHeader(event, \"Content-Type\", \"text/html; charset=utf-8\");\n return createBuilderBrowserCallbackErrorPage(pendingError);\n }\n\n if (!pendingValid) {\n await trackBuilderLifecycle(\n event,\n \"builder connect failed\",\n ownerEmail,\n {\n reason: hasValidCallbackState\n ? \"callback_state_unexpectedly_rejected\"\n : \"missing_pending_connect\",\n stage: \"callback\",\n has_callback_state: Boolean(\n requestUrl.searchParams.get(BUILDER_STATE_PARAM),\n ),\n },\n );\n const msg =\n \"No active connect flow found. Restart the Builder connect flow from Settings.\";\n // Write an error signal so the polling loop in the parent tab\n // terminates quickly instead of waiting 5 minutes for the timeout.\n try {\n await putSetting(`builder-connect-error:${ownerEmail}`, {\n message: msg,\n at: Date.now(),\n });\n } catch {\n // DB unavailable — parent will time out naturally.\n }\n setResponseStatus(event, 403);\n setResponseHeader(event, \"Content-Type\", \"text/html; charset=utf-8\");\n return createBuilderBrowserCallbackErrorPage(msg);\n }\n\n const privateKey = requestUrl.searchParams.get(\"p-key\");\n const publicKey = requestUrl.searchParams.get(\"api-key\");\n\n if (!privateKey || !publicKey) {\n await trackBuilderLifecycle(\n event,\n \"builder connect failed\",\n ownerEmail,\n {\n reason: \"missing_credentials\",\n stage: \"callback\",\n },\n );\n // Render the popup-friendly error page (and write a status row)\n // instead of bare JSON, so the parent tab's poll loop terminates\n // immediately via BroadcastChannel rather than hanging until the\n // 5-minute timeout.\n const msg =\n \"Builder didn't return credentials. Restart the connect flow from settings.\";\n await putSetting(`builder-connect-error:${ownerEmail}`, {\n message: msg,\n at: Date.now(),\n }).catch(() => {});\n setResponseStatus(event, 400);\n setResponseHeader(event, \"Content-Type\", \"text/html; charset=utf-8\");\n return createBuilderBrowserCallbackErrorPage(msg);\n }\n\n const userId = requestUrl.searchParams.get(\"user-id\");\n const orgName = requestUrl.searchParams.get(\"org-name\");\n const orgKind = requestUrl.searchParams.get(\"kind\");\n\n // Store per-user in app_secrets so each user's Builder connection\n // is independent. No more shared env vars that the last connector\n // overwrites.\n //\n // Failure handling: a silent catch here (returning the success page\n // anyway) was Midhun's bug on 2026-04-28 — popup said \"yay\", parent\n // window polled `/builder/status` for 5 minutes seeing\n // configured:false, never got a real error. Now we surface the\n // failure two ways: (a) a settings row that the next /builder/status\n // poll picks up, and (b) postMessage from the error page itself,\n // wired into the popup HTML, so the parent stops polling immediately.\n let writeError: string | null = null;\n try {\n const { writeBuilderCredentials } =\n await import(\"./credential-provider.js\");\n // Resolve the user's active org / role so the credentials land\n // at org scope when an owner/admin is connecting (everyone in\n // the org auto-resolves them on next chat call). Members and\n // users with no active org silently fall back to user scope.\n // Failure to read org context is non-fatal — we just keep the\n // legacy per-user behaviour for that connection.\n let orgId: string | null = null;\n let role: string | null = null;\n if (!ownerContext.anonymous) {\n try {\n const { getOrgContext } = await import(\"../org/context.js\");\n const orgCtx = await getOrgContext(event);\n orgId = orgCtx.orgId ?? null;\n role = orgCtx.role ?? null;\n } catch {\n /* org module not present in this template — keep user scope */\n }\n }\n const target = await writeBuilderCredentials(\n ownerEmail,\n { privateKey, publicKey, userId, orgName, orgKind },\n { orgId, role },\n );\n console.log(\n `[builder-connect] wrote credentials email=${ownerEmail} requestOrgId=${orgId ?? \"(none)\"} role=${role ?? \"(none)\"} scope=${target.scope} scopeId=${target.scopeId}`,\n );\n } catch (err) {\n writeError = (err as Error)?.message ?? String(err);\n console.error(\n \"[builder] Failed to persist Builder credentials:\",\n writeError,\n );\n }\n\n if (writeError) {\n await trackBuilderLifecycle(\n event,\n \"builder connect failed\",\n ownerEmail,\n {\n reason: \"credential_write_failed\",\n stage: \"callback\",\n },\n );\n // Best-effort signal to /builder/status. If putSetting also fails\n // (entire DB unreachable) the popup's postMessage still notifies\n // the parent. If both fail the parent times out at 5min as today.\n try {\n await putSetting(`builder-connect-error:${ownerEmail}`, {\n message: writeError,\n at: Date.now(),\n });\n } catch (settingsErr) {\n console.error(\n \"[builder] Couldn't even record connect-error to settings:\",\n (settingsErr as Error)?.message ?? settingsErr,\n );\n }\n setResponseStatus(event, 500);\n setResponseHeader(event, \"Content-Type\", \"text/html; charset=utf-8\");\n return createBuilderBrowserCallbackErrorPage(writeError);\n }\n\n // Clear any legacy disconnect flag and any prior connect-error row\n // (so a successful retry doesn't surface the previous failure).\n try {\n await deleteSetting(\"builder-disconnected\");\n } catch {\n // DB not ready — proceed\n }\n try {\n await deleteSetting(`builder-connect-error:${ownerEmail}`);\n } catch {\n // No prior error row — fine\n }\n\n const previewUrl = resolveSafePreviewUrl(\n requestUrl.searchParams.get(\"preview-url\"),\n event,\n );\n await trackBuilderLifecycle(\n event,\n \"builder connect succeeded\",\n ownerEmail,\n {\n stage: \"callback\",\n has_preview_url: Boolean(previewUrl),\n org_kind: orgKind || undefined,\n },\n );\n setResponseHeader(event, \"Content-Type\", \"text/html; charset=utf-8\");\n return createBuilderBrowserCallbackPage(previewUrl);\n }),\n );\n\n // POST /_agent-native/builder/disconnect — revoke the user's per-user\n // or org-scoped Builder credentials in app_secrets. Deploy-level env\n // credentials are never mutated here; if env is configured it remains as\n // the fallback after request-scoped credentials are removed.\n getH3App(nitroApp).use(\n `${P}/builder/disconnect`,\n defineEventHandler(async (event: H3Event) => {\n if (getMethod(event) !== \"POST\") {\n setResponseStatus(event, 405);\n return { error: \"Method not allowed\" };\n }\n const session = await getSession(event).catch(() => null);\n if (!session?.email) {\n setResponseStatus(event, 401);\n return { error: \"unauthorized\" };\n }\n\n const { deleteBuilderCredentials } =\n await import(\"./credential-provider.js\");\n\n // Mirror the connect-side scope decision so disconnect undoes\n // exactly what connect wrote: owner/admin connections land at\n // org scope and tear down at org scope; member or no-org\n // connections stay user-scoped on both ends. Symmetric, so a\n // single Disconnect press always reverses what the same user's\n // Connect press did.\n let orgId: string | null = null;\n let role: string | null = null;\n try {\n const { getOrgContext } = await import(\"../org/context.js\");\n const orgCtx = await getOrgContext(event);\n orgId = orgCtx.orgId ?? null;\n role = orgCtx.role ?? null;\n } catch {\n /* org module not present — keep user scope */\n }\n\n try {\n await deleteBuilderCredentials(session.email, { orgId, role });\n } catch (err) {\n await trackBuilderLifecycle(\n event,\n \"builder disconnect failed\",\n session.email,\n {\n reason: \"credential_delete_failed\",\n },\n );\n setResponseStatus(event, 500);\n return {\n ok: false,\n error:\n \"Could not remove Builder credentials — your connection is unchanged. Please retry.\",\n cause: err instanceof Error ? err.message : String(err),\n };\n }\n\n await trackBuilderLifecycle(\n event,\n \"builder disconnect succeeded\",\n session.email,\n );\n return { ok: true };\n }),\n );\n\n // Proxy to Builder's agents-run API for background code changes.\n getH3App(nitroApp).use(\n `${P}/builder/agents-run`,\n defineEventHandler(async (event: H3Event) => {\n if (getMethod(event) !== \"POST\") {\n setResponseStatus(event, 405);\n return { error: \"Method not allowed\" };\n }\n\n const session = await getSession(event).catch(() => null);\n if (!session?.email) {\n setResponseStatus(event, 401);\n return { error: \"unauthorized\" };\n }\n\n return runWithRequestContext(\n { userEmail: session.email, orgId: session.orgId ?? undefined },\n async () => {\n const { resolveBuilderCredentials: resolveCreds } =\n await import(\"./credential-provider.js\");\n const creds = await resolveCreds();\n if (!creds.privateKey || !creds.publicKey) {\n setResponseStatus(event, 400);\n return {\n error:\n \"Builder not connected. Connect Builder in Setup to use background agent.\",\n };\n }\n const body = (await readBody(event)) as {\n userMessage?: string;\n branchName?: string;\n projectUrl?: string;\n };\n if (!body?.userMessage) {\n setResponseStatus(event, 400);\n return { error: \"userMessage is required\" };\n }\n const apiHost =\n process.env.BUILDER_API_HOST || \"https://ai-services.builder.io\";\n try {\n const res = await fetch(\n `${apiHost}/agents/run?apiKey=${encodeURIComponent(creds.publicKey)}`,\n {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n Authorization: `Bearer ${creds.privateKey}`,\n },\n body: JSON.stringify({\n userMessage: {\n userPrompt: body.userMessage,\n },\n branchName: body.branchName,\n }),\n },\n );\n if (!res.ok) {\n const err = await res.text().catch(() => \"Unknown error\");\n setResponseStatus(event, res.status);\n return {\n error: redactValues(err, [creds.privateKey, creds.publicKey]),\n };\n }\n return await res.json();\n } catch (err: any) {\n setResponseStatus(event, 500);\n return {\n error: redactValues(\n err?.message || \"Failed to reach Builder agents-run API\",\n [creds.privateKey, creds.publicKey],\n ),\n };\n }\n },\n );\n }),\n );\n\n // Env key management — framework keys are always included\n const frameworkEnvKeys: EnvKeyConfig[] = [\n { key: \"ENABLE_BUILDER\", label: \"Enable Builder.io features\" },\n {\n key: \"AGENT_ENGINE_PREFER_BYO_KEY\",\n label:\n \"Prefer BYO LLM key over Builder gateway (default: false — gateway wins)\",\n },\n ...Object.values(PROVIDER_ENV_META).map(({ envVar, label }) => ({\n key: envVar,\n label,\n })),\n ];\n {\n const envKeys = [...frameworkEnvKeys, ...(options.envKeys ?? [])];\n\n // Onboarding form fields are resolved per-request so late-registered\n // steps (and template overrides) are picked up without a restart.\n const collectOnboardingKeys = (): Set<string> => {\n const keys = new Set<string>();\n for (const step of listOnboardingSteps()) {\n for (const method of step.methods) {\n if (method.kind === \"form\") {\n for (const field of method.payload.fields) {\n if (field?.key) keys.add(field.key);\n }\n }\n if (method.kind === \"builder-cli-auth\") {\n keys.add(\"BUILDER_PRIVATE_KEY\");\n keys.add(\"BUILDER_PUBLIC_KEY\");\n }\n }\n }\n return keys;\n };\n\n getH3App(nitroApp).use(\n `${P}/env-status`,\n defineEventHandler(async (event) => {\n const session = await getSession(event).catch(() => null);\n const userEmail = session?.email;\n let orgId: string | undefined;\n if (userEmail) {\n try {\n const orgCtx = await getOrgContext(event);\n orgId = orgCtx.orgId ?? undefined;\n } catch {\n /* org module not present in this template */\n }\n }\n const canUseDeployEnv = await runWithRequestContext(\n { userEmail, orgId },\n () => canUseDeployCredentialFallbackForRequest(),\n );\n\n return envKeys.map((cfg) => {\n const isProviderKey = PROVIDER_ENV_VAR_KEYS.has(cfg.key);\n return {\n key: cfg.key,\n label: cfg.label,\n required: cfg.required ?? false,\n configured:\n !!process.env[cfg.key] && (!isProviderKey || canUseDeployEnv),\n ...(cfg.helpText ? { helpText: cfg.helpText } : {}),\n };\n });\n }),\n );\n\n getH3App(nitroApp).use(\n `${P}/env-vars`,\n defineEventHandler(async (event: H3Event) => {\n if (getMethod(event) !== \"POST\") {\n setResponseStatus(event, 405);\n return { error: \"Method not allowed\" };\n }\n\n // Env vars are deployment-wide globals, not per-tenant. On any\n // shared-DB multi-tenant deploy, allowing authenticated users to\n // write here lets one tenant overwrite Stripe / OpenAI / Sentry\n // keys for every other tenant. Disable the endpoint outside of\n // local-dev SQLite or an explicit single-tenant opt-in, and\n // direct callers to the per-org credential store instead.\n if (!isEnvVarWriteAllowed()) {\n setResponseStatus(event, 403);\n return {\n error:\n \"env-vars endpoint disabled on multi-tenant deployments. Use saveCredential(key, value, { userEmail, orgId, scope: 'org' }) to store per-org credentials.\",\n };\n }\n\n const body = await readBody(event);\n const { vars } = body as {\n vars?: Array<{ key: string; value: string }>;\n };\n\n if (!Array.isArray(vars) || vars.length === 0) {\n setResponseStatus(event, 400);\n return { error: \"vars array required\" };\n }\n\n const allowedKeys = new Set<string>([\n ...envKeys.map((k) => k.key),\n ...collectOnboardingKeys(),\n ]);\n\n const filtered = vars.filter(\n (v) =>\n typeof v.key === \"string\" &&\n allowedKeys.has(v.key) &&\n typeof v.value === \"string\" &&\n v.value.trim().length > 0,\n );\n if (filtered.length === 0) {\n setResponseStatus(event, 400);\n const rejectedEmpty = vars.some(\n (v) =>\n typeof v.key === \"string\" &&\n allowedKeys.has(v.key) &&\n (typeof v.value !== \"string\" || v.value.trim().length === 0),\n );\n return {\n error: rejectedEmpty\n ? \"Env values must be non-empty — refusing to clear a saved key\"\n : \"No recognized env keys in request\",\n };\n }\n\n // Write to .env file. When inside a workspace, write to the\n // workspace root .env so keys are shared across every app. The\n // per-app .env still wins at load time if it also defines a key.\n try {\n const scope =\n (body as { scope?: \"workspace\" | \"app\" })?.scope ?? \"auto\";\n const workspaceRoot = findWorkspaceRoot(process.cwd());\n const envPath =\n scope === \"app\"\n ? path.join(process.cwd(), \".env\")\n : workspaceRoot\n ? path.join(workspaceRoot, \".env\")\n : path.join(process.cwd(), \".env\");\n await upsertEnvFile(envPath, filtered);\n } catch {\n // Edge runtime — skip file write\n }\n\n // Update process.env immediately\n for (const { key, value } of filtered) {\n process.env[key] = value;\n }\n\n // Persist to settings table for serverless cold-start recovery.\n try {\n const envMap: Record<string, string> = {};\n for (const { key, value } of filtered) envMap[key] = value;\n const existing =\n ((await getSetting(\"persisted-env-vars\")) as Record<\n string,\n string\n > | null) ?? {};\n await putSetting(\"persisted-env-vars\", { ...existing, ...envMap });\n } catch {\n // DB not ready yet — skip\n }\n\n return { saved: filtered.map((v) => v.key) };\n }),\n );\n }\n\n // GET /_agent-native/agent-engine/status — reports whether an engine\n // is configured (settings row, settings+env, or auto-detected from env).\n // The agent-chat UI uses this to skip the onboarding gate for providers\n // not in the env-status list (OpenRouter, Groq, Ollama, …).\n getH3App(nitroApp).use(\n `${P}/agent-engine/status`,\n defineEventHandler(async (event) => {\n try {\n const session = await getSession(event).catch(() => null);\n const userEmail = session?.email;\n let orgId: string | undefined;\n if (userEmail) {\n try {\n const orgCtx = await getOrgContext(event);\n orgId = orgCtx.orgId ?? undefined;\n } catch {\n /* org module not present in this template */\n }\n }\n const stored = (await getSetting(\"agent-engine\")) as {\n engine?: string;\n model?: string;\n } | null;\n if (isAgentEngineSettingConfigured(stored)) {\n const engine = (stored as { engine: string }).engine;\n const entry = getAgentEngineEntry(engine);\n return {\n configured: true,\n engine,\n model: stored.model ?? entry?.defaultModel ?? DEFAULT_MODEL,\n source: \"settings\" as const,\n };\n }\n // Per-user app_secrets — a user who connected Builder (or pasted\n // their own provider key) may not have any deploy-level env vars\n // set, so check their per-user secret store before reporting \"no\n // engine configured\" and re-showing the onboarding gate.\n const detectedFromUser = await runWithRequestContext(\n { userEmail, orgId },\n () => detectEngineFromUserSecrets(),\n );\n if (detectedFromUser?.name === \"builder\") {\n return {\n configured: true,\n engine: detectedFromUser.name,\n model: detectedFromUser.defaultModel ?? DEFAULT_MODEL,\n source: \"app_secrets\" as const,\n envVar: detectedFromUser.requiredEnvVars[0],\n };\n }\n if (stored && typeof stored.engine === \"string\") {\n const entry = getAgentEngineEntry(stored.engine);\n if (\n entry &&\n (await runWithRequestContext({ userEmail, orgId }, () =>\n isStoredEngineUsableForRequest(stored, entry),\n ))\n ) {\n return {\n configured: true,\n engine: stored.engine,\n model: stored.model ?? entry.defaultModel ?? DEFAULT_MODEL,\n source: \"env\" as const,\n envVar: entry.requiredEnvVars[0],\n };\n }\n }\n if (detectedFromUser) {\n return {\n configured: true,\n engine: detectedFromUser.name,\n model: detectedFromUser.defaultModel ?? DEFAULT_MODEL,\n source: \"app_secrets\" as const,\n envVar: detectedFromUser.requiredEnvVars[0],\n };\n }\n const canUseDeployEnv = await runWithRequestContext(\n { userEmail, orgId },\n () => canUseDeployCredentialFallbackForRequest(),\n );\n const detected = canUseDeployEnv ? detectEngineFromEnv() : null;\n if (detected) {\n return {\n configured: true,\n engine: detected.name,\n model: detected.defaultModel ?? DEFAULT_MODEL,\n source: \"env\" as const,\n envVar: detected.requiredEnvVars[0],\n };\n }\n } catch {}\n return { configured: false };\n }),\n );\n\n // POST /_agent-native/agent-engine/disconnect — clear the agent-engine\n // setting. Env vars are left alone so the next chat turn falls back to\n // resolveEngine's env/default resolution.\n getH3App(nitroApp).use(\n `${P}/agent-engine/disconnect`,\n defineEventHandler(async (event: H3Event) => {\n if (getMethod(event) !== \"POST\") {\n setResponseStatus(event, 405);\n return { error: \"Method not allowed\" };\n }\n const session = await getSession(event).catch(() => null);\n if (!session?.email) {\n setResponseStatus(event, 401);\n return { error: \"unauthorized\" };\n }\n try {\n await deleteSetting(\"agent-engine\");\n return { ok: true };\n } catch (err) {\n setResponseStatus(event, 500);\n return {\n ok: false,\n error: err instanceof Error ? err.message : String(err),\n };\n }\n }),\n );\n\n // GET/PUT/DELETE /_agent-native/agent-loop-settings — org/user-scoped\n // ceiling for tool-calling loop iterations before the agent asks whether\n // it should keep going.\n getH3App(nitroApp).use(\n `${P}/agent-loop-settings`,\n defineEventHandler(async (event: H3Event) => {\n const session = await getSession(event).catch(() => null);\n if (!session?.email) {\n setResponseStatus(event, 401);\n return { error: \"unauthorized\" };\n }\n\n const orgCtx = await getOrgContext(event).catch(() => null);\n const orgId = orgCtx?.orgId ?? session.orgId ?? null;\n const ctx = { userEmail: session.email, orgId };\n const canUpdate = await canUpdateAgentLoopSettings(\n session.email,\n orgId,\n );\n\n const withContext = async () => ({\n ...(await readAgentLoopSettings(ctx)),\n canUpdate,\n orgId,\n orgName: orgCtx?.orgName ?? null,\n role: orgCtx?.role ?? null,\n });\n\n const method = getMethod(event);\n if (method === \"GET\") {\n return withContext();\n }\n\n if (method === \"PUT\") {\n if (!canUpdate) {\n setResponseStatus(event, 403);\n return {\n error: orgId\n ? \"Only organization owners and admins can change the agent step limit.\"\n : \"You cannot change the agent step limit.\",\n };\n }\n const body = await readBody(event).catch(() => ({}));\n const validation = validateMaxIterationsInput(\n (body as any)?.maxIterations,\n );\n if (validation.ok === false) {\n setResponseStatus(event, 400);\n return { error: validation.error };\n }\n const updated = await writeAgentLoopSettings(ctx, validation.value);\n return {\n ...updated,\n canUpdate,\n orgId,\n orgName: orgCtx?.orgName ?? null,\n role: orgCtx?.role ?? null,\n };\n }\n\n if (method === \"DELETE\") {\n if (!canUpdate) {\n setResponseStatus(event, 403);\n return {\n error: orgId\n ? \"Only organization owners and admins can reset the agent step limit.\"\n : \"You cannot reset the agent step limit.\",\n };\n }\n const updated = await resetAgentLoopSettings(ctx);\n return {\n ...updated,\n canUpdate,\n orgId,\n orgName: orgCtx?.orgName ?? null,\n role: orgCtx?.role ?? null,\n };\n }\n\n setResponseStatus(event, 405);\n return { error: \"Method not allowed\" };\n }),\n );\n\n // ─── Usage & cost summary ────────────────────────────────────────\n // GET /_agent-native/usage?sinceDays=30\n // Returns spend broken down by label, model, app, and day for the\n // current user. Powers the Usage section in the agent settings panel.\n getH3App(nitroApp).use(\n `${P}/usage`,\n defineEventHandler(async (event: H3Event) => {\n const session = await getSession(event).catch(() => null);\n if (!session?.email) {\n setResponseStatus(event, 401);\n return { error: \"unauthorized\" };\n }\n const sinceDaysParam = new URL(\n `${event.url?.pathname || \"/\"}${event.url?.search || \"\"}`,\n \"http://x\",\n ).searchParams.get(\"sinceDays\");\n const sinceDays = Math.max(\n 1,\n Math.min(365, Number(sinceDaysParam) || 30),\n );\n const { getUsageSummary, usageBillingForEngine } =\n await import(\"../usage/store.js\");\n const [summary, engineName] = await Promise.all([\n getUsageSummary({\n ownerEmail: session.email,\n sinceMs: Date.now() - sinceDays * 86_400_000,\n }),\n detectUsageEngineName(event, session.email),\n ]);\n return {\n ...summary,\n billing: usageBillingForEngine(engineName),\n };\n }),\n );\n\n // ─── File upload primitive ──────────────────────────────────────\n // GET /_agent-native/file-upload/status — report active provider\n // POST /_agent-native/file-upload — upload a file, return { url }\n getH3App(nitroApp).use(\n `${P}/file-upload/status`,\n defineEventHandler(async (event) => {\n const active = getActiveFileUploadProvider();\n // resolveBuilderPrivateKey() reads per-user credentials from app_secrets\n // (DB), which requires request context (AsyncLocalStorage) to know which\n // user to scope by. Without runWithRequestContext() the ALS store is empty\n // and it falls back to process.env only — missing OAuth-connected users.\n const session = await getSession(event).catch(() => null);\n const userEmail = session?.email;\n let builderConfigured = !!process.env.BUILDER_PRIVATE_KEY;\n try {\n const { resolveBuilderPrivateKey } =\n await import(\"./credential-provider.js\");\n const resolve = () => resolveBuilderPrivateKey().then((k) => !!k);\n builderConfigured = userEmail\n ? await runWithRequestContext({ userEmail }, resolve)\n : await resolve();\n } catch {\n // fall back to env check above\n }\n // When the builder builtin is selected via env var, its sync\n // isConfigured() doesn't reflect per-user OAuth credentials. Use the\n // async builderConfigured check so the status accurately represents\n // whether this specific user can actually upload (thread 7 fix).\n const isBuilderEnvActive = active?.id === \"builder\";\n const configured = isBuilderEnvActive\n ? builderConfigured\n : !!active || builderConfigured;\n const activeProvider = isBuilderEnvActive\n ? builderConfigured\n ? { id: \"builder\", name: \"Builder.io\" }\n : null\n : active\n ? { id: active.id, name: active.name }\n : builderConfigured\n ? { id: \"builder\", name: \"Builder.io\" }\n : null;\n return {\n configured,\n activeProvider,\n providers: listFileUploadProviders().map((p) => ({\n id: p.id,\n name: p.name,\n configured: p.isConfigured(),\n })),\n builderConfigured,\n };\n }),\n );\n\n getH3App(nitroApp).use(\n `${P}/file-upload`,\n defineEventHandler(async (event: H3Event) => {\n if (getMethod(event) !== \"POST\") {\n setResponseStatus(event, 405);\n return { error: \"Method not allowed\" };\n }\n const parts = await readMultipartFormData(event);\n const filePart = parts?.find((p) => p.name === \"file\");\n if (!filePart?.data) {\n setResponseStatus(event, 400);\n return { error: \"No file uploaded\" };\n }\n\n const session = await getSession(event);\n if (!session?.email) {\n setResponseStatus(event, 401);\n return { error: \"Unauthorized\" };\n }\n const userEmail = session.email;\n const result = await runWithRequestContext({ userEmail }, () =>\n uploadFile({\n data: filePart.data,\n filename: filePart.filename,\n mimeType: filePart.type,\n ownerEmail: userEmail,\n }),\n );\n\n if (result) {\n setResponseStatus(event, 201);\n return result;\n }\n\n setResponseStatus(event, 503);\n return {\n error:\n \"No file upload provider configured. Connect Builder.io in Settings → File uploads, or register a provider.\",\n };\n }),\n );\n\n // ─── Voice transcription (Whisper) ───────────────────────────────\n // POST /_agent-native/transcribe-voice — multipart audio → text\n getH3App(nitroApp).use(\n `${P}/transcribe-voice`,\n createTranscribeVoiceHandler(),\n );\n\n // ─── Google realtime transcription session bridge ───────────────\n // POST /_agent-native/transcribe-stream/session — resolve the user's\n // Google service-account credential server-side, mint an opaque managed\n // streaming session in ai-services, and return the websocket URL.\n getH3App(nitroApp).use(\n `${P}/transcribe-stream/session`,\n createGoogleRealtimeSessionHandler(),\n );\n\n // ─── Voice provider status ───────────────────────────────────────\n // GET /_agent-native/voice-providers/status — which providers are\n // configured for the current user (powers the Settings UI pills).\n getH3App(nitroApp).use(\n `${P}/voice-providers/status`,\n createVoiceProvidersStatusHandler(),\n );\n\n // ─── Ad-hoc secrets (user-created keys) ────────────────────────────\n // Must mount before the generic /secrets handler to avoid shadowing.\n const adHocSecretHandler = createAdHocSecretHandler();\n getH3App(nitroApp).use(`${P}/secrets/adhoc`, adHocSecretHandler);\n\n // ─── Secrets registry ────────────────────────────────────────────\n // GET /_agent-native/secrets — list registered secrets + status\n // POST /_agent-native/secrets/:key — write a secret value\n // DELETE /_agent-native/secrets/:key — remove a secret value\n // POST /_agent-native/secrets/:key/test — re-run the validator\n const listSecretsHandler = createListSecretsHandler();\n const writeSecretHandler = createWriteSecretHandler();\n const testSecretHandler = createTestSecretHandler();\n\n getH3App(nitroApp).use(\n `${P}/secrets`,\n defineEventHandler(async (event: H3Event) => {\n const pathname = (event.url?.pathname || \"\")\n .replace(/^\\/+/, \"\")\n .replace(/\\/+$/, \"\");\n const parts = pathname ? pathname.split(\"/\") : [];\n\n // Collection root — list handler.\n if (parts.length === 0) {\n return listSecretsHandler(event);\n }\n\n // /:key/test — re-validate stored value.\n if (parts.length === 2 && parts[1] === \"test\") {\n return testSecretHandler(event);\n }\n\n // /:key — write / delete a specific secret.\n if (parts.length === 1) {\n return writeSecretHandler(event);\n }\n\n setResponseStatus(event, 404);\n return { error: \"Not found\" };\n }),\n );\n\n // ─── Notifications inbox ──────────────────────────────────────────\n // GET /_agent-native/notifications[?unread&limit&before]\n // GET /_agent-native/notifications/count\n // POST /_agent-native/notifications/:id/read\n // POST /_agent-native/notifications/read-all\n // DELETE /_agent-native/notifications/:id\n getH3App(nitroApp).use(`${P}/notifications`, createNotificationsHandler());\n\n // ─── Extensions (sandboxed mini-app runtime + proxy) ────────────────\n try {\n const { ensureExtensionsTables, registerExtensionsShareable } =\n await import(\"../extensions/store.js\");\n const { createExtensionsHandler } =\n await import(\"../extensions/routes.js\");\n ensureExtensionsTables().catch(() => {});\n registerExtensionsShareable();\n const extensionsHandler = createExtensionsHandler();\n getH3App(nitroApp).use(`${P}/extensions`, extensionsHandler);\n // Legacy alias — the previous public API was /_agent-native/tools/*.\n // Mounted in addition to /extensions/* so any deployed iframes mid-flight\n // (or external integrations bookmarked the old path) keep working.\n getH3App(nitroApp).use(`${P}/tools`, extensionsHandler);\n\n // Extension-point slots — sub-system of extensions.\n const { ensureSlotTables } = await import(\"../extensions/slots/store.js\");\n const { createSlotsHandler } =\n await import(\"../extensions/slots/routes.js\");\n ensureSlotTables().catch(() => {});\n getH3App(nitroApp).use(`${P}/slots`, createSlotsHandler());\n } catch {\n // Extensions module not available — skip\n }\n\n // ─── Page-level legacy redirect: /tools → /extensions ──────────────\n // Catches direct browser navigation / bookmarks for the old page route\n // (`/tools`, `/tools/:id`) and 302s to the renamed equivalent under\n // `/extensions`. The framework API alias above (`/_agent-native/tools/*`)\n // is intentionally untouched — it stays mounted in parallel.\n //\n // Mounted with no path so the helper can do its own base-path stripping\n // (h3 mount-matching only allows base-path stripping for `/_agent-native`\n // and `/.well-known`). Returns undefined to fall through for anything\n // that isn't a `/tools` page navigation.\n getH3App(nitroApp).use(\n defineEventHandler((event) => {\n const method = getMethod(event);\n if (method !== \"GET\" && method !== \"HEAD\") return;\n const rawPath =\n event.url?.pathname ??\n String(event.node?.req?.url ?? event.path ?? \"/\").split(\"?\")[0];\n const search = event.url?.search ?? \"\";\n const target = resolveLegacyToolsRedirect(rawPath, search);\n if (!target) return;\n setResponseStatus(event, 302);\n setResponseHeader(event, \"Location\", target);\n return \"\";\n }),\n );\n\n // ─── Agent run progress ───────────────────────────────────────────\n // GET /_agent-native/runs[?active&limit]\n // GET /_agent-native/runs/:id\n // DELETE /_agent-native/runs/:id\n getH3App(nitroApp).use(`${P}/runs`, createProgressHandler());\n\n // ─── Automations API ──────────────────────────────────────────────\n // GET /_agent-native/automations — list all automations (parsed triggers)\n // POST /_agent-native/automations/fire-test — emit test.event.fired\n getH3App(nitroApp).use(\n `${P}/automations`,\n defineEventHandler(async (event: H3Event) => {\n const method = getMethod(event);\n const pathname = (event.path || event.url?.pathname || \"\")\n .split(\"?\")[0]\n .replace(/^\\/+/, \"\")\n .replace(/\\/+$/, \"\");\n\n // Auth check applies to every method. Without this, any anonymous\n // caller could `POST /fire-test` to emit unowned events that fan\n // out across every tenant's matching trigger (the dispatcher\n // short-circuits its owner check when `eventMeta.owner` is\n // undefined). See audit 12 / fire-test finding.\n const session = await getSession(event).catch(() => null);\n if (!session?.email) {\n setResponseStatus(event, 401);\n return { error: \"Unauthenticated\" };\n }\n\n if (\n (pathname === \"fire-test\" || pathname.endsWith(\"/fire-test\")) &&\n method === \"POST\"\n ) {\n try {\n const { emit } = await import(\"../event-bus/index.js\");\n const body = (await readBody(event).catch(() => ({}))) as Record<\n string,\n unknown\n >;\n // Scope the test event to the current user so only their\n // automations fire, not those owned by other tenants.\n emit(\n \"test.event.fired\",\n { data: body.data ?? {} },\n {\n owner: session.email,\n },\n );\n return { ok: true };\n } catch (err: any) {\n setResponseStatus(event, 500);\n return { error: err?.message ?? \"Failed to emit test event\" };\n }\n }\n\n if (method !== \"GET\") {\n setResponseStatus(event, 405);\n return { error: \"Method not allowed\" };\n }\n\n try {\n const owner = session.email;\n const { resourceListAllOwners, SHARED_OWNER } =\n await import(\"../resources/store.js\");\n const allResources = await resourceListAllOwners(\"jobs/\");\n const resources = allResources.filter(\n (r) => r.owner === owner || r.owner === SHARED_OWNER,\n );\n const FRONT_RE = /^---\\n([\\s\\S]*?)\\n---\\n?([\\s\\S]*)$/;\n const automations = resources\n .filter((r) => r.path.endsWith(\".md\") && !r.path.endsWith(\".keep\"))\n .map((r) => {\n const match = r.content.match(FRONT_RE);\n if (!match)\n return {\n id: r.id,\n name: r.path.replace(/^jobs\\//, \"\").replace(/\\.md$/, \"\"),\n path: r.path,\n owner: r.owner,\n triggerType: \"schedule\" as const,\n enabled: false,\n mode: \"agentic\" as const,\n body: r.content,\n };\n const yaml = match[1];\n const body = match[2].trim();\n const meta: Record<string, string> = {};\n for (const line of yaml.split(\"\\n\")) {\n const ci = line.indexOf(\":\");\n if (ci === -1) continue;\n const k = line.slice(0, ci).trim();\n let v = line.slice(ci + 1).trim();\n if (\n (v.startsWith('\"') && v.endsWith('\"')) ||\n (v.startsWith(\"'\") && v.endsWith(\"'\"))\n )\n v = v.slice(1, -1);\n meta[k] = v;\n }\n return {\n id: r.id,\n name: r.path.replace(/^jobs\\//, \"\").replace(/\\.md$/, \"\"),\n path: r.path,\n owner: r.owner,\n triggerType: meta.triggerType || \"schedule\",\n event: meta.event,\n schedule: meta.schedule,\n condition: meta.condition,\n mode: meta.mode || \"agentic\",\n domain: meta.domain,\n enabled: meta.enabled !== \"false\",\n lastStatus: meta.lastStatus,\n lastRun: meta.lastRun,\n lastError: meta.lastError,\n createdBy: meta.createdBy,\n body,\n };\n });\n return automations;\n } catch (err: any) {\n setResponseStatus(event, 500);\n return { error: err?.message ?? \"Failed to list automations\" };\n }\n }),\n );\n\n // ─── Application State CRUD ──────────────────────────────────────\n // Auto-mounted so templates don't need boilerplate route files.\n\n // ─── User-scoped settings store ────────────────────────────────────\n // GET /_agent-native/settings/:key — read current user's value\n // PUT /_agent-native/settings/:key — write current user's value\n // DELETE /_agent-native/settings/:key — clear current user's value\n //\n // Keys are auto-prefixed with `u:<email>:` so each user gets their\n // own row — no leakage between sessions sharing the same DB.\n getH3App(nitroApp).use(\n `${P}/settings`,\n defineEventHandler(async (event: H3Event) => {\n const rawKey =\n (event.url?.pathname || \"\").replace(/^\\/+/, \"\").split(\"/\")[0] || \"\";\n const key = rawKey.replace(/[^a-zA-Z0-9_-]/g, \"\");\n if (!key) {\n setResponseStatus(event, 404);\n return { error: \"Settings key required\" };\n }\n\n const session = await getSession(event);\n if (!session?.email) {\n setResponseStatus(event, 401);\n return { error: \"unauthorized\" };\n }\n\n const method = getMethod(event);\n const requestSource =\n (event.node?.req?.headers?.[\"x-request-source\"] as\n | string\n | undefined) || undefined;\n\n if (method === \"GET\") {\n const value = await getUserSetting(session.email, key);\n if (!value) {\n setResponseStatus(event, 404);\n return { error: `No setting for ${key}` };\n }\n return value;\n }\n\n if (method === \"PUT\") {\n const body = await readBody(event);\n await putUserSetting(session.email, key, body, { requestSource });\n return body;\n }\n\n if (method === \"DELETE\") {\n await deleteUserSetting(session.email, key, { requestSource });\n return { ok: true };\n }\n\n setResponseStatus(event, 405);\n return { error: \"Method not allowed\" };\n }),\n );\n\n // ─── Avatar routes ──────────────────────────────────────────────────\n // GET /_agent-native/avatar/:email — fetch any user's avatar (public)\n // PUT /_agent-native/avatar — update current user's avatar (auth required)\n getH3App(nitroApp).use(\n `${P}/avatar`,\n defineEventHandler(async (event: H3Event) => {\n const method = getMethod(event);\n const emailParam = (event.url?.pathname || \"\")\n .replace(/^\\/+/, \"\")\n .split(\"/\")[0];\n\n if (method === \"GET\") {\n if (!emailParam) {\n setResponseStatus(event, 400);\n return { error: \"email required\" };\n }\n const data = await getSetting(\n `avatar:${decodeURIComponent(emailParam)}`,\n );\n return { image: (data as any)?.image ?? null };\n }\n\n if (method === \"PUT\") {\n const session = await getSession(event);\n if (!session?.email) {\n setResponseStatus(event, 401);\n return { error: \"unauthorized\" };\n }\n const body = await readBody(event);\n const { image } = body as { image?: string };\n if (!image || !image.startsWith(\"data:image/\")) {\n setResponseStatus(event, 400);\n return { error: \"image (data URL) required\" };\n }\n await putSetting(`avatar:${session.email}`, { image });\n return { ok: true };\n }\n\n setResponseStatus(event, 405);\n return { error: \"Method not allowed\" };\n }),\n );\n\n if (!options.disableAppState) {\n // Compose draft routes (more specific path, mounted first so the\n // generic app-state matcher below doesn't shadow them). The framework\n // strips the mount prefix from event.url.pathname before calling us,\n // so we just see e.g. `/abc-123` (id) or `/` (collection root).\n getH3App(nitroApp).use(\n `${P}/application-state/compose`,\n defineEventHandler(async (event: H3Event) => {\n const id =\n (event.url?.pathname || \"\").replace(/^\\/+/, \"\").split(\"/\")[0] || \"\";\n if (event.context) {\n event.context.params = { ...event.context.params, id };\n }\n const method = getMethod(event);\n if (!id) {\n if (method === \"GET\") return listComposeDrafts(event);\n if (method === \"DELETE\") return deleteAllComposeDrafts(event);\n } else {\n if (method === \"GET\") return getComposeDraft(event);\n if (method === \"PUT\") return putComposeDraft(event);\n if (method === \"DELETE\") return deleteComposeDraft(event);\n }\n setResponseStatus(event, 405);\n return { error: \"Method not allowed\" };\n }),\n );\n\n // Generic application state — match `/application-state/:key` only\n // (NOT `/application-state/compose/...` which the handler above owns).\n getH3App(nitroApp).use(\n `${P}/application-state`,\n defineEventHandler(async (event: H3Event) => {\n const key =\n (event.url?.pathname || \"\").replace(/^\\/+/, \"\").split(\"/\")[0] || \"\";\n // Skip — compose handler above already handled it\n if (key === \"compose\" || key === \"\") return;\n if (event.context) {\n event.context.params = { ...event.context.params, key };\n }\n const method = getMethod(event);\n if (method === \"GET\") return getState(event);\n if (method === \"PUT\") return putState(event);\n if (method === \"DELETE\") return deleteState(event);\n setResponseStatus(event, 405);\n return { error: \"Method not allowed\" };\n }),\n );\n }\n };\n}\n\n/**\n * Default core routes plugin — mount with no configuration needed.\n *\n * Usage in templates:\n * ```ts\n * // server/plugins/core-routes.ts\n * export { defaultCoreRoutesPlugin as default } from \"@agent-native/core/server\";\n * ```\n */\nexport const defaultCoreRoutesPlugin: NitroPluginDef = createCoreRoutesPlugin();\n"]}
1
+ {"version":3,"file":"core-routes-plugin.js","sourceRoot":"","sources":["../../src/server/core-routes-plugin.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n getH3App,\n awaitBootstrap,\n markDefaultPluginProvided,\n} from \"./framework-request-handler.js\";\nimport {\n getAllowedCorsOrigin,\n readCorsAllowedOrigins,\n} from \"./cors-origins.js\";\nimport {\n defineEventHandler,\n setResponseStatus,\n setResponseHeader,\n getMethod,\n getHeader,\n getCookie,\n setCookie,\n deleteCookie,\n} from \"h3\";\nimport type { H3Event } from \"h3\";\nimport path from \"node:path\";\nimport { createPollHandler } from \"./poll.js\";\nimport { createPollEventsHandler } from \"./poll-events.js\";\nimport { upsertEnvFile } from \"./create-server.js\";\nimport type { EnvKeyConfig } from \"./create-server.js\";\nimport { readBody } from \"./h3-helpers.js\";\nimport {\n BUILDER_CONNECT_PARAM,\n BUILDER_CONNECT_OWNER_COOKIE,\n BUILDER_ENV_KEYS,\n BUILDER_OPENER_PARAM,\n BUILDER_STATE_PARAM,\n appendBuilderConnectToken,\n buildBuilderCliAuthUrl,\n createBuilderBrowserCallbackErrorPage,\n createBuilderBrowserCallbackPage,\n getBuilderCliAuthCallbackOriginForEvent,\n getBuilderBrowserOriginForEvent,\n getBuilderBrowserStatusForEvent,\n resolveBuilderBranchProjectId,\n resolveSafePreviewUrl,\n runBuilderAgent,\n signBuilderCallbackState,\n verifyBuilderConnectTokenAndGetOwner,\n verifyBuilderCallbackStateAndGetOwner,\n signBuilderConnectToken,\n} from \"./builder-browser.js\";\nimport {\n getState,\n putState,\n deleteState,\n listComposeDrafts,\n getComposeDraft,\n putComposeDraft,\n deleteComposeDraft,\n deleteAllComposeDrafts,\n} from \"../application-state/handlers.js\";\nimport { getSetting, putSetting, deleteSetting } from \"../settings/store.js\";\nimport {\n getUserSetting,\n putUserSetting,\n deleteUserSetting,\n} from \"../settings/user-settings.js\";\nimport { getSession } from \"./auth.js\";\nimport { getAppBasePath, getOrigin } from \"./google-oauth.js\";\nimport { findWorkspaceRoot } from \"../scripts/utils.js\";\nimport { listOnboardingSteps } from \"../onboarding/registry.js\";\nimport {\n uploadFile,\n getActiveFileUploadProvider,\n listFileUploadProviders,\n} from \"../file-upload/index.js\";\nimport { readMultipartFormData } from \"h3\";\nimport {\n createListSecretsHandler,\n createWriteSecretHandler,\n createTestSecretHandler,\n createAdHocSecretHandler,\n} from \"../secrets/routes.js\";\nimport { registerFrameworkSecrets } from \"../secrets/register-framework-secrets.js\";\nimport { registerBuiltinProviders } from \"../tracking/providers.js\";\nimport { track } from \"../tracking/index.js\";\nimport { registerBuiltinNotificationChannels } from \"../notifications/channels.js\";\nimport { createNotificationsHandler } from \"../notifications/routes.js\";\nimport { createProgressHandler } from \"../progress/routes.js\";\nimport { createGoogleRealtimeSessionHandler } from \"./google-realtime-session.js\";\nimport { createTranscribeVoiceHandler } from \"./transcribe-voice.js\";\nimport { runWithRequestContext } from \"./request-context.js\";\nimport { createVoiceProvidersStatusHandler } from \"./voice-providers-status.js\";\nimport { PROVIDER_ENV_META } from \"../agent/engine/provider-env-vars.js\";\nimport { DEFAULT_MODEL } from \"../agent/default-model.js\";\nimport { canUseDeployCredentialFallbackForRequest } from \"./credential-provider.js\";\nimport {\n canUpdateAgentLoopSettings,\n readAgentLoopSettings,\n resetAgentLoopSettings,\n validateMaxIterationsInput,\n writeAgentLoopSettings,\n} from \"../agent/loop-settings.js\";\nimport {\n isAgentEngineSettingConfigured,\n getAgentEngineEntry,\n detectEngineFromEnv,\n detectEngineFromUserSecrets,\n isStoredEngineUsableForRequest,\n} from \"../agent/engine/registry.js\";\nimport { registerBuiltinEngines } from \"../agent/engine/builtin.js\";\nimport { getOrgContext } from \"../org/context.js\";\nimport { isEnvVarWriteAllowed } from \"./env-var-writes.js\";\nimport { llmConnectionTrackingProperties } from \"../shared/llm-connection.js\";\n\n/**\n * The base path prefix for all framework-level routes.\n * All agent-native core routes live under this namespace to avoid\n * collisions with template-specific `/api/*` routes.\n */\nexport const FRAMEWORK_ROUTE_PREFIX = \"/_agent-native\";\n\nregisterBuiltinEngines();\n\nconst PROVIDER_ENV_VAR_KEYS = new Set(\n Object.values(PROVIDER_ENV_META).map(({ envVar }) => envVar),\n);\n\nasync function detectUsageEngineName(\n event: H3Event,\n userEmail: string | undefined,\n): Promise<string | null> {\n try {\n const stored = (await getSetting(\"agent-engine\")) as {\n engine?: string;\n } | null;\n if (isAgentEngineSettingConfigured(stored)) {\n return (stored as { engine: string }).engine;\n }\n let orgId: string | undefined;\n if (userEmail) {\n try {\n const orgCtx = await getOrgContext(event);\n orgId = orgCtx.orgId ?? undefined;\n } catch {\n /* org module not present in this template */\n }\n }\n const detectedFromUser = await runWithRequestContext(\n { userEmail, orgId },\n () => detectEngineFromUserSecrets(),\n );\n if (detectedFromUser?.name === \"builder\") return detectedFromUser.name;\n\n if (stored && typeof stored.engine === \"string\") {\n const entry = getAgentEngineEntry(stored.engine);\n if (\n entry &&\n (await runWithRequestContext({ userEmail, orgId }, () =>\n isStoredEngineUsableForRequest(stored, entry),\n ))\n ) {\n return stored.engine;\n }\n }\n if (detectedFromUser) return detectedFromUser.name;\n\n const canUseDeployEnv = await runWithRequestContext(\n { userEmail, orgId },\n () => canUseDeployCredentialFallbackForRequest(),\n );\n return canUseDeployEnv ? (detectEngineFromEnv()?.name ?? null) : null;\n } catch {\n return null;\n }\n}\n\nasync function trackBuilderLifecycle(\n event: H3Event,\n name: string,\n userEmail: string | undefined | null,\n properties: Record<string, unknown> = {},\n): Promise<void> {\n if (!userEmail) return;\n const engine = await detectUsageEngineName(event, userEmail);\n track(\n name,\n {\n feature: \"builder\",\n ...llmConnectionTrackingProperties({\n configured: Boolean(engine),\n engine,\n }),\n ...properties,\n },\n { userId: userEmail },\n );\n}\n\nfunction normalizeAppBasePath(value: string | undefined): string {\n if (!value || value === \"/\") return \"\";\n const trimmed = value.trim();\n if (!trimmed || trimmed === \"/\") return \"\";\n return `/${trimmed.replace(/^\\/+/, \"\").replace(/\\/+$/, \"\")}`;\n}\n\nfunction stripAppBasePath(pathname: string): string {\n const basePath = normalizeAppBasePath(\n process.env.VITE_APP_BASE_PATH || process.env.APP_BASE_PATH,\n );\n if (!basePath) return pathname;\n if (pathname === basePath) return \"/\";\n if (pathname.startsWith(`${basePath}/`)) {\n return pathname.slice(basePath.length) || \"/\";\n }\n return pathname;\n}\n\nfunction getBuilderConnectOwnerCookiePath(): string {\n return getAppBasePath() || \"/\";\n}\n\nfunction readBuilderConnectOwnerCookie(event: H3Event): string | null {\n return verifyBuilderConnectTokenAndGetOwner(\n getCookie(event, BUILDER_CONNECT_OWNER_COOKIE),\n );\n}\n\nfunction setBuilderConnectOwnerCookie(\n event: H3Event,\n ownerEmail: string,\n): void {\n setCookie(\n event,\n BUILDER_CONNECT_OWNER_COOKIE,\n signBuilderConnectToken(ownerEmail),\n {\n httpOnly: true,\n sameSite: \"lax\",\n secure: getOrigin(event).startsWith(\"https://\"),\n path: getBuilderConnectOwnerCookiePath(),\n maxAge: 10 * 60,\n },\n );\n}\n\nfunction clearBuilderConnectOwnerCookie(event: H3Event): void {\n deleteCookie(event, BUILDER_CONNECT_OWNER_COOKIE, {\n path: getBuilderConnectOwnerCookiePath(),\n });\n}\n\n/**\n * Resolves the page-level legacy `/tools` → `/extensions` redirect target.\n *\n * Returns the absolute path (with optional query string) to redirect to,\n * or `null` if the request should fall through to the SPA / next handler.\n *\n * Skips:\n * - Framework API namespace (`/_agent-native/tools/*` is handled separately\n * as a legacy alias and intentionally stays mounted as `tools`).\n * - Anything that isn't `/tools` or a `/tools/...` page navigation, after\n * the configured app base path is stripped off.\n *\n * Exported for tests; the runtime middleware below is a thin wrapper.\n */\nexport function resolveLegacyToolsRedirect(\n rawPath: string,\n search: string,\n): string | null {\n if (rawPath === \"/_agent-native\" || rawPath.startsWith(\"/_agent-native/\")) {\n return null;\n }\n const pathname = stripAppBasePath(rawPath);\n if (pathname !== \"/tools\" && !pathname.startsWith(\"/tools/\")) return null;\n const suffix = pathname === \"/tools\" ? \"\" : pathname.slice(\"/tools\".length);\n const basePath = normalizeAppBasePath(\n process.env.VITE_APP_BASE_PATH || process.env.APP_BASE_PATH,\n );\n return `${basePath}/extensions${suffix}${search}`;\n}\n\nfunction redactValues(text: string, values: Array<string | null | undefined>) {\n let out = text;\n for (const value of values) {\n if (value) out = out.split(value).join(\"[redacted]\");\n }\n return out;\n}\n\ntype NitroPluginDef = (nitroApp: any) => void | Promise<void>;\n\nexport interface CoreRoutesPluginOptions {\n /** Route path for the SSE endpoint. Default: \"/_agent-native/events\" */\n sseRoute?: string;\n /** Disable the SSE endpoint entirely. */\n disableSSE?: boolean;\n /** Disable the /_agent-native/ping health check. */\n disablePing?: boolean;\n /** Disable the /_agent-native/application-state routes. */\n disableAppState?: boolean;\n /** Env key configuration. Enables env-status and env-vars routes. */\n envKeys?: EnvKeyConfig[];\n /**\n * Optional owner resolver for narrowly-scoped public routes. Used by public\n * pages that let anonymous viewers connect Builder credentials for their\n * own browser-scoped agent session.\n */\n anonymousOwner?: (event: H3Event) => string | null | Promise<string | null>;\n}\n\n/**\n * Creates a Nitro plugin that mounts all standard agent-native framework routes.\n *\n * All routes are mounted under `/_agent-native/` to avoid collisions\n * with template-specific routes.\n *\n * Routes:\n * GET /_agent-native/poll — polling endpoint for change detection\n * GET /_agent-native/events (or custom) — SSE endpoint for real-time sync\n * GET /_agent-native/ping — health check\n * GET /_agent-native/env-status — env key configuration status (when envKeys provided)\n * POST /_agent-native/env-vars — save env vars to .env (when envKeys provided)\n * GET /_agent-native/application-state/:key — read application state\n * PUT /_agent-native/application-state/:key — write application state\n * DELETE /_agent-native/application-state/:key — delete application state\n * GET /_agent-native/application-state/compose — list compose drafts\n * DELETE /_agent-native/application-state/compose — delete all compose drafts\n * GET /_agent-native/application-state/compose/:id — get compose draft\n * PUT /_agent-native/application-state/compose/:id — upsert compose draft\n * DELETE /_agent-native/application-state/compose/:id — delete compose draft\n */\nexport function createCoreRoutesPlugin(\n options: CoreRoutesPluginOptions = {},\n): NitroPluginDef {\n return async (nitroApp: any) => {\n markDefaultPluginProvided(nitroApp, \"core-routes\");\n // No-op when called from inside the bootstrap (auto-mount path).\n // Otherwise wait so other default plugins finish mounting first.\n await awaitBootstrap(nitroApp);\n\n // Restore env vars from the settings table. On serverless, .env\n // writes don't persist across invocations — the DB is the durable\n // store. Only set keys that are currently empty so explicit env\n // vars (Netlify dashboard, process-level) always win.\n //\n // GATED: only rehydrate into `process.env` on local-dev SQLite (or\n // with the explicit single-tenant opt-in). On a shared-DB hosted\n // multi-tenant deploy the `persisted-env-vars` row is deployment-wide\n // global state — pushing user-supplied values into `process.env` from\n // it would let any one tenant's writes (or a stale dev seed) leak\n // into every other tenant's process. The opt-out scrub of legacy\n // BUILDER_* values still runs unconditionally so existing rows on\n // multi-tenant deploys self-heal, but new env-var writes never land\n // in `process.env` outside the allowed contexts.\n try {\n const persisted = (await getSetting(\"persisted-env-vars\")) as Record<\n string,\n string\n > | null;\n if (persisted) {\n const builderKeys = new Set<string>(BUILDER_ENV_KEYS);\n const writesAllowed = isEnvVarWriteAllowed();\n let scrubbed = 0;\n for (const [k, v] of Object.entries(persisted)) {\n if (builderKeys.has(k)) {\n scrubbed++;\n continue;\n }\n if (writesAllowed && typeof v === \"string\" && !process.env[k]) {\n process.env[k] = v;\n }\n }\n if (scrubbed > 0) {\n try {\n const cleaned: Record<string, string> = {};\n for (const [k, v] of Object.entries(persisted)) {\n if (!builderKeys.has(k)) cleaned[k] = v;\n }\n await putSetting(\"persisted-env-vars\", cleaned);\n console.warn(\n `[core] Removed ${scrubbed} legacy BUILDER_* key(s) from persisted-env-vars (cross-tenant leak fix).`,\n );\n } catch {\n // Couldn't rewrite the row — the skip-on-rehydrate above\n // is the load-bearing protection. We'll try again next boot.\n }\n }\n }\n } catch {\n // DB not ready yet — skip\n }\n\n // Honor Builder disconnect. Nitro's dev env-runner preserves\n // `process.env` across `.env` file reloads inside the same worker, so\n // deleting BUILDER_PRIVATE_KEY in the disconnect handler can bleed\n // back through an env-runner restart. We persist a\n // `builder-disconnected` flag in SQL and scrub BUILDER_* on every\n // plugin init while the flag is set. The flag is cleared by the\n // Builder cli-auth callback when the user re-connects.\n try {\n const disconnected = (await getSetting(\"builder-disconnected\")) as {\n at?: number;\n } | null;\n if (disconnected) {\n for (const key of BUILDER_ENV_KEYS) {\n delete process.env[key];\n }\n }\n } catch {\n // DB not ready — skip; the disconnect flag will be enforced on the\n // next plugin boot once the settings table is reachable.\n }\n\n // Register framework-level secrets (OPENAI_API_KEY for composer voice\n // transcription, etc.). Each registration is guarded so templates that\n // already registered the same key win.\n registerFrameworkSecrets();\n registerBuiltinProviders();\n registerBuiltinNotificationChannels();\n\n try {\n const { createObservabilityHandler } =\n await import(\"../observability/routes.js\");\n const { ensureObservabilityTables } =\n await import(\"../observability/store.js\");\n ensureObservabilityTables().catch(() => {});\n getH3App(nitroApp).use(\n `${FRAMEWORK_ROUTE_PREFIX}/observability`,\n createObservabilityHandler(),\n );\n } catch {\n // Observability module not available — skip\n }\n\n const P = FRAMEWORK_ROUTE_PREFIX;\n\n // Security response headers — emitted on every framework response.\n // Mounted before route handlers so 4xx/5xx error pages also carry the\n // headers. Routes that need to relax a specific header (e.g. the tools\n // /render route allowing same-origin framing) override via setResponseHeader.\n const { createSecurityHeadersMiddleware } =\n await import(\"./security-headers.js\");\n getH3App(nitroApp).use(createSecurityHeadersMiddleware());\n\n // CORS for framework routes. Desktop tray apps (Tauri/Electron) run on\n // their own dev origin (e.g. localhost:1420) and make credentialed\n // requests against the template's server at a different port. We echo\n // the exact origin + Allow-Credentials so same-site localhost ports\n // can cross-send cookies.\n const allowlist = readCorsAllowedOrigins();\n getH3App(nitroApp).use(\n defineEventHandler((event) => {\n const pathname = stripAppBasePath(\n event.url?.pathname ??\n String(event.node?.req?.url ?? event.path ?? \"/\").split(\"?\")[0],\n );\n if (!pathname.startsWith(P) && !pathname.startsWith(\"/api/\")) return;\n const origin = getHeader(event, \"origin\");\n const method = getMethod(event);\n\n // Decide whether this origin is allowed. We never fall back to the\n // first allowlist entry — that previously echoed `Access-Control-\n // Allow-Origin: <unrelated-allowed-origin>` for disallowed callers,\n // which is permissive enough that some clients followed through.\n const allowedOrigin = getAllowedCorsOrigin(origin, {\n allowedOrigins: allowlist,\n allowAnyOriginWhenNoAllowlist: false,\n allowLocalhostWhenNoAllowlist: true,\n });\n\n // Reject preflights from disallowed cross-origin callers BEFORE\n // returning 204. Previously the OPTIONS short-circuit returned 204\n // with no ACAO header, which the browser then treats as a CORS\n // failure — but also short-circuited any further checks. Now we\n // explicitly 403 disallowed cross-origin preflights.\n if (method === \"OPTIONS\") {\n if (origin && !allowedOrigin) {\n setResponseStatus(event, 403);\n return \"\";\n }\n if (allowedOrigin) {\n setResponseHeader(\n event,\n \"Access-Control-Allow-Origin\",\n allowedOrigin,\n );\n setResponseHeader(event, \"Vary\", \"Origin\");\n setResponseHeader(\n event,\n \"Access-Control-Allow-Credentials\",\n \"true\",\n );\n setResponseHeader(\n event,\n \"Access-Control-Allow-Methods\",\n \"GET,HEAD,POST,PUT,PATCH,DELETE,OPTIONS\",\n );\n setResponseHeader(\n event,\n \"Access-Control-Allow-Headers\",\n \"Content-Type,Authorization,X-Requested-With,X-Request-Source,X-Agent-Native-CSRF\",\n );\n }\n setResponseStatus(event, 204);\n return \"\";\n }\n\n // Non-preflight requests: only set CORS response headers when we\n // have an allowed origin. Same-origin / no-origin requests fall\n // through without explicit CORS headers (browser treats them as\n // same-origin by default).\n if (!allowedOrigin) return;\n setResponseHeader(event, \"Access-Control-Allow-Origin\", allowedOrigin);\n setResponseHeader(event, \"Vary\", \"Origin\");\n setResponseHeader(event, \"Access-Control-Allow-Credentials\", \"true\");\n setResponseHeader(\n event,\n \"Access-Control-Allow-Methods\",\n \"GET,HEAD,POST,PUT,PATCH,DELETE,OPTIONS\",\n );\n setResponseHeader(\n event,\n \"Access-Control-Allow-Headers\",\n \"Content-Type,Authorization,X-Requested-With,X-Request-Source,X-Agent-Native-CSRF\",\n );\n }),\n );\n\n // Defense-in-depth CSRF check for state-changing /_agent-native/* routes.\n // Mounted AFTER the CORS layer so disallowed-origin OPTIONS preflights\n // 403 first (rather than being rejected on a stale cookie heuristic).\n // See `csrf.ts` for the threat model and allowlist.\n const { createCsrfMiddleware } = await import(\"./csrf.js\");\n getH3App(nitroApp).use(createCsrfMiddleware(P));\n\n // Polling\n getH3App(nitroApp).use(`${P}/poll`, createPollHandler());\n\n // SSE\n if (!options.disableSSE) {\n const sseRoute = options.sseRoute ?? `${P}/events`;\n getH3App(nitroApp).use(sseRoute, createPollEventsHandler());\n }\n\n // Ping\n if (!options.disablePing) {\n getH3App(nitroApp).use(\n `${P}/ping`,\n defineEventHandler(() => ({\n message: process.env.PING_MESSAGE ?? \"pong\",\n })),\n );\n }\n\n type BuilderOwnerContext = {\n email: string | undefined;\n session: Awaited<ReturnType<typeof getSession>> | null;\n anonymous: boolean;\n };\n\n const resolveBuilderOwnerContext = async (\n event: H3Event,\n ): Promise<BuilderOwnerContext> => {\n const session = await getSession(event).catch(() => null);\n if (session?.email) {\n return { email: session.email, session, anonymous: false };\n }\n\n const rawUrl = event.node?.req?.url ?? event.path ?? \"/\";\n const queryStart = rawUrl.indexOf(\"?\");\n const rawPath = queryStart >= 0 ? rawUrl.slice(0, queryStart) : rawUrl;\n const search = queryStart >= 0 ? rawUrl.slice(queryStart + 1) : \"\";\n const path = stripAppBasePath(rawPath);\n\n if (path === `${P}/builder/connect`) {\n const ownerFromConnectToken = verifyBuilderConnectTokenAndGetOwner(\n new URLSearchParams(search).get(BUILDER_CONNECT_PARAM),\n );\n if (ownerFromConnectToken) {\n return {\n email: ownerFromConnectToken,\n session: null,\n anonymous: false,\n };\n }\n }\n\n if (path === `${P}/builder/callback`) {\n // Prefer the signed _an_state owner over the legacy\n // an_builder_connect_owner cookie. The cookie can be stale on a\n // shared browser — user A signed in earlier, user B starts a fresh\n // callback with a signed state for B — and using the cookie first\n // would mis-attribute B's Builder credentials to A. The signed\n // state is per-flow and TTL-bounded, so it's authoritative when\n // both are present.\n const ownerFromCallbackState = verifyBuilderCallbackStateAndGetOwner(\n new URLSearchParams(search).get(BUILDER_STATE_PARAM),\n );\n if (ownerFromCallbackState) {\n return {\n email: ownerFromCallbackState,\n session: null,\n anonymous: false,\n };\n }\n const ownerFromCookie = readBuilderConnectOwnerCookie(event);\n if (ownerFromCookie) {\n return { email: ownerFromCookie, session: null, anonymous: false };\n }\n }\n\n const anonymousOwner = await options.anonymousOwner?.(event);\n if (anonymousOwner) {\n return { email: anonymousOwner, session: null, anonymous: true };\n }\n\n return { email: undefined, session: null, anonymous: false };\n };\n\n getH3App(nitroApp).use(\n `${P}/builder/status`,\n defineEventHandler(async (event) => {\n const envStatus = getBuilderBrowserStatusForEvent(event);\n const ownerContext = await resolveBuilderOwnerContext(event);\n const userEmail = ownerContext.email;\n const withConnectToken = <T extends { connectUrl: string }>(\n status: T,\n ): T & { cliAuthUrl?: string } => {\n if (!userEmail) return status;\n const previewOrigin = getBuilderBrowserOriginForEvent(event);\n const callbackOrigin = getBuilderCliAuthCallbackOriginForEvent(event);\n const statusWithConnectToken = {\n ...status,\n connectUrl: appendBuilderConnectToken(status.connectUrl, userEmail),\n } as T & { cliAuthUrl?: string };\n // Direct cli-auth only works when the callback lands on the same\n // deployment that minted the signed state. Builder/Fusion previews\n // often need a gateway callback origin; in that case use the\n // /builder/connect trampoline so it can write the pending-connect\n // row that the gateway callback validates against.\n if (\n previewOrigin.replace(/\\/+$/, \"\") !==\n callbackOrigin.replace(/\\/+$/, \"\")\n ) {\n return statusWithConnectToken;\n }\n const cliAuthUrl = buildBuilderCliAuthUrl(\n callbackOrigin,\n signBuilderCallbackState(userEmail),\n { previewOrigin },\n );\n return {\n ...statusWithConnectToken,\n cliAuthUrl,\n };\n };\n\n // Pass the user's active orgId so status reads can fall back to\n // org-scoped credentials and branch project IDs. Without it, an\n // admin's org-scope OAuth result is invisible to every other org\n // member's status poller and the UI would show \"not connected\" forever\n // even though the chat actually resolves the org-shared credential.\n let orgId: string | null = null;\n if (!ownerContext.anonymous) {\n try {\n const { getOrgContext } = await import(\"../org/context.js\");\n const orgCtx = await getOrgContext(event);\n orgId = orgCtx.orgId ?? null;\n } catch {\n /* org module not present in this template — keep userEmail-only */\n }\n }\n\n return runWithRequestContext({ userEmail, orgId }, async () => {\n const projectId = await resolveBuilderBranchProjectId();\n const requestStatus = {\n ...envStatus,\n builderEnabled: !!projectId,\n branchProjectIdConfigured: !!projectId,\n branchProjectId: projectId || undefined,\n };\n\n // Surface a recent OAuth callback failure before reporting a\n // deployment fallback as \"connected\"; otherwise a failed personal\n // connect attempt on a deploy that also has BUILDER_PRIVATE_KEY set\n // looks successful even though the user's credentials were not saved.\n try {\n if (userEmail) {\n const errKey = `builder-connect-error:${userEmail}`;\n const errRow = await getSetting(errKey);\n if (errRow && typeof errRow.message === \"string\") {\n await deleteSetting(errKey).catch(() => {});\n return withConnectToken({\n ...requestStatus,\n configured: false,\n privateKeyConfigured: false,\n publicKeyConfigured: false,\n userId: undefined,\n orgName: undefined,\n orgKind: undefined,\n connectError: {\n message: errRow.message as string,\n at:\n typeof errRow.at === \"number\"\n ? (errRow.at as number)\n : Date.now(),\n },\n });\n }\n }\n } catch {\n // settings store unavailable — fall through\n }\n\n // Read request-scoped Builder credentials first; deploy env is only\n // the fallback. This keeps a root/local BUILDER_PRIVATE_KEY from\n // blocking a user from connecting their own Builder account.\n try {\n const {\n resolveBuilderCredentials,\n resolveBuilderCredentialSource,\n getBuilderCredentialAuthFailure,\n } = await import(\"./credential-provider.js\");\n const [creds, credentialSource] = await Promise.all([\n resolveBuilderCredentials(),\n resolveBuilderCredentialSource(),\n ]);\n const authFailure = await getBuilderCredentialAuthFailure(creds);\n if (authFailure) {\n return withConnectToken({\n ...requestStatus,\n configured: false,\n privateKeyConfigured: false,\n publicKeyConfigured: false,\n userId: undefined,\n orgName: undefined,\n orgKind: undefined,\n credentialSource: credentialSource ?? undefined,\n // Surface durable credential rejection separately from\n // one-shot cli-auth callback failures. The reconnect UI keeps\n // polling through authError while the user chooses a new\n // Builder space; connectError means the active callback itself\n // failed and should stop the flow.\n authError: {\n message: authFailure.message,\n at: authFailure.at,\n },\n });\n }\n if (creds.privateKey && creds.publicKey) {\n return withConnectToken({\n ...requestStatus,\n configured: true,\n privateKeyConfigured: true,\n publicKeyConfigured: !!creds.publicKey,\n userId: creds.userId || envStatus.userId,\n orgName: creds.orgName || envStatus.orgName,\n orgKind: creds.orgKind || envStatus.orgKind,\n credentialSource: credentialSource ?? undefined,\n });\n }\n } catch {\n // Secrets table not ready — fall through to env status\n }\n\n // Honor legacy disconnect flag for existing deployments.\n try {\n const disconnected = await getSetting(\"builder-disconnected\");\n if (disconnected) {\n return withConnectToken({\n ...requestStatus,\n configured: false,\n privateKeyConfigured: false,\n publicKeyConfigured: false,\n userId: undefined,\n orgName: undefined,\n orgKind: undefined,\n });\n }\n } catch {\n // DB not reachable\n }\n // No env, no per-user creds → not configured. Both authenticated\n // and unauthenticated callers see \"not connected\" so they can\n // run through the OAuth flow.\n return withConnectToken({\n ...requestStatus,\n configured: false,\n privateKeyConfigured: false,\n publicKeyConfigured: false,\n userId: undefined,\n orgName: undefined,\n orgKind: undefined,\n });\n });\n }),\n );\n\n // How long a pending-connect row is valid. Must be long enough for\n // the user to complete the Builder CLI-auth flow, but short enough\n // that a stale row from an abandoned attempt doesn't accept a new\n // callback minutes later.\n const BUILDER_CONNECT_PENDING_TTL_MS = 10 * 60 * 1000; // 10 min\n\n // Decide whether a /builder/connect navigation originated from this\n // app's own UI (allowed) or from a foreign origin (cross-site CSRF\n // attempt — rejected). Sec-Fetch-Site is the modern signal:\n // - \"same-origin\": user clicked Connect from our own pages — allow\n // - \"none\": typed in URL bar / bookmark / browser extension — allow\n // - \"same-site\" / \"cross-site\" / missing-but-with-foreign-Origin\n // all map to reject.\n // For older browsers without Sec-Fetch-* we fall back to Origin and\n // then Referer, comparing against the request's resolved origin.\n function isSameOriginConnect(event: H3Event): boolean {\n const fetchSite = getHeader(event, \"sec-fetch-site\");\n if (fetchSite === \"same-origin\" || fetchSite === \"none\") return true;\n if (fetchSite) return false; // browser told us it's cross-site/same-site\n const expected = getBuilderBrowserOriginForEvent(event).replace(\n /\\/+$/,\n \"\",\n );\n const origin = getHeader(event, \"origin\");\n if (origin) return origin.replace(/\\/+$/, \"\") === expected;\n const referer = getHeader(event, \"referer\");\n if (referer) {\n try {\n return new URL(referer).origin === expected;\n } catch {\n return false;\n }\n }\n // No Sec-Fetch-Site, no Origin, no Referer — pre-2020 browser\n // making a top-level navigation. Allow; cookies are still\n // session-bound so the worst case degrades to the prior behavior.\n return true;\n }\n\n // Lightweight 302 to the Builder CLI-auth URL. Lets clients do\n // `window.open('/_agent-native/builder/connect', '_blank')` synchronously\n // inside a click handler, avoiding the popup-blocker downgrade that\n // happens when an await sits before window.open.\n //\n // CSRF protection here is layered because session cookies are\n // SameSite=None;Secure (so the editor iframe can ride along) — that\n // means a session cookie alone does NOT prevent cross-origin\n // window.open from initiating a connect flow on the victim's behalf:\n // 1. Signed connect token from /builder/status — proves the opener\n // could read same-origin JSON, which cross-site attackers cannot.\n // This covers local/embedded browsers that conservatively label a\n // legitimate popup navigation as same-site/cross-site.\n // 2. Sec-Fetch-Site header fallback — modern browsers stamp every\n // request with the navigation context. We allow `same-origin` or\n // `none` (typed/bookmark/extension); cross-site / same-site without\n // a valid connect token are rejected.\n // 3. Pending row keyed by session email + bound nonce — the callback\n // requires both a valid session and a one-time row that this\n // handler wrote during the same flow. Without the same-origin\n // gate or connect token above, an attacker could prime the row from\n // cross-site and then trick the victim into hitting a callback URL\n // with attacker-controlled p-key/api-key, hijacking the victim's\n // account.\n getH3App(nitroApp).use(\n `${P}/builder/connect`,\n defineEventHandler(async (event) => {\n const ownerContext = await resolveBuilderOwnerContext(event);\n const ownerEmail = ownerContext.email;\n if (!ownerEmail) {\n setResponseStatus(event, 401);\n return { error: \"Authentication required\" };\n }\n\n const requestUrl = new URL(\n `${event.url?.pathname || \"/\"}${event.url?.search || \"\"}`,\n getBuilderBrowserOriginForEvent(event),\n );\n const connectToken = requestUrl.searchParams.get(BUILDER_CONNECT_PARAM);\n const connectTokenOwner =\n verifyBuilderConnectTokenAndGetOwner(connectToken);\n // The token must both be well-formed AND minted for the current\n // session owner. Without the owner check, an attacker holding any\n // valid signed token could trick a victim into hitting this route\n // with that token to bypass the cross-origin gate.\n const hasValidConnectToken =\n Boolean(connectTokenOwner) && connectTokenOwner === ownerEmail;\n\n // Same-origin gate. Sec-Fetch-Site remains the fast path; the signed\n // connect token is the compatibility path for legitimate embedded or\n // local desktop popups stamped as same-site/cross-site by the browser.\n if (!isSameOriginConnect(event) && !hasValidConnectToken) {\n const crossOriginMessage = connectToken\n ? \"This Builder connect link is expired or belongs to a different deployment. Close this popup and click Connect account again.\"\n : \"Builder connect opened without a fresh signed link. Close this popup and click Connect account again.\";\n await trackBuilderLifecycle(\n event,\n \"builder connect failed\",\n ownerEmail,\n {\n reason: \"cross_origin\",\n stage: \"connect\",\n has_connect_token: Boolean(connectToken),\n has_valid_connect_token: false,\n connect_token_owner_matches_context: false,\n sec_fetch_site: getHeader(event, \"sec-fetch-site\") ?? null,\n },\n );\n await putSetting(`builder-connect-error:${ownerEmail}`, {\n message: crossOriginMessage,\n at: Date.now(),\n }).catch(() => {});\n console.warn(\"[builder-connect] rejected cross-origin connect\", {\n hasConnectToken: Boolean(connectToken),\n secFetchSite: getHeader(event, \"sec-fetch-site\") ?? null,\n origin: getHeader(event, \"origin\") ?? null,\n referer: getHeader(event, \"referer\") ?? null,\n });\n setResponseStatus(event, 403);\n setResponseHeader(event, \"Content-Type\", \"text/html; charset=utf-8\");\n return createBuilderBrowserCallbackErrorPage(crossOriginMessage, {\n title: \"Couldn't start Builder connection\",\n body: \"The connect popup did not include a valid signed link for this app.\",\n closeHint:\n \"Close this popup, refresh the app, and try Connect account again.\",\n parentOrigin: getBuilderBrowserOriginForEvent(event),\n });\n }\n\n // Clear any prior failure row from a previous attempt — otherwise\n // useBuilderStatus polling sees the stale error and aborts the\n // new attempt before it can complete.\n try {\n await deleteSetting(`builder-connect-error:${ownerEmail}`);\n } catch {\n // No prior error row — fine\n }\n\n // Store a short-lived pending row. If the DB is unavailable we\n // surface a popup-renderable error page that signals the parent\n // via BroadcastChannel, rather than letting the popup show raw\n // JSON and the parent poll for 5 minutes.\n try {\n await putSetting(`builder-pending-connect:${ownerEmail}`, {\n expiresAt: Date.now() + BUILDER_CONNECT_PENDING_TTL_MS,\n });\n } catch (err) {\n await trackBuilderLifecycle(\n event,\n \"builder connect failed\",\n ownerEmail,\n {\n reason: \"pending_storage_unavailable\",\n stage: \"connect\",\n },\n );\n const msg =\n \"Could not initiate Builder connect — storage unavailable. Try again.\";\n console.error(\n \"[builder] Could not store pending-connect state:\",\n (err as Error)?.message ?? err,\n );\n // Best-effort: also write the error row so the parent's\n // /builder/status poll picks it up if BroadcastChannel doesn't.\n await putSetting(`builder-connect-error:${ownerEmail}`, {\n message: msg,\n at: Date.now(),\n }).catch(() => {});\n setResponseStatus(event, 503);\n setResponseHeader(event, \"Content-Type\", \"text/html; charset=utf-8\");\n return createBuilderBrowserCallbackErrorPage(msg, {\n parentOrigin: getBuilderBrowserOriginForEvent(event),\n });\n }\n await trackBuilderLifecycle(\n event,\n \"builder connect started\",\n ownerEmail,\n {\n stage: \"connect\",\n connect_token_owner_matches_context:\n !connectTokenOwner || connectTokenOwner === ownerEmail,\n },\n );\n setBuilderConnectOwnerCookie(event, ownerEmail);\n // The primary UI now opens the signed Builder /cli-auth URL directly\n // from /builder/status. Keep this legacy trampoline working for older\n // clients, but still send it to Builder immediately and include signed\n // callback state so the callback does not depend on popup cookies.\n const cliAuthUrl = buildBuilderCliAuthUrl(\n getBuilderCliAuthCallbackOriginForEvent(event),\n signBuilderCallbackState(ownerEmail),\n { previewOrigin: getBuilderBrowserOriginForEvent(event) },\n );\n setResponseStatus(event, 302);\n setResponseHeader(event, \"Location\", cliAuthUrl);\n return \"\";\n }),\n );\n\n getH3App(nitroApp).use(\n `${P}/builder/run`,\n defineEventHandler(async (event: H3Event) => {\n if (getMethod(event) !== \"POST\") {\n setResponseStatus(event, 405);\n return { error: \"Method not allowed\" };\n }\n const body = await readBody(event).catch(() => ({}) as any);\n const prompt = typeof body?.prompt === \"string\" ? body.prompt : \"\";\n if (!prompt.trim()) {\n setResponseStatus(event, 400);\n return { error: \"prompt is required\" };\n }\n const session = await getSession(event).catch(() => null);\n if (!session?.email) {\n setResponseStatus(event, 401);\n return { error: \"Authentication required\" };\n }\n const userEmail = session.email;\n\n let orgId: string | null = null;\n try {\n const orgCtx = await getOrgContext(event);\n orgId = orgCtx.orgId ?? null;\n } catch {\n /* org module not present in this template — keep userEmail-only */\n }\n\n // Wrap in runWithRequestContext so resolveBuilderCredential() inside\n // runBuilderAgent() resolves per-user app_secrets rather than falling\n // through to process.env — the same pattern the /builder/status endpoint\n // uses. Without this, per-user Builder keys stored in app_secrets are\n // invisible to the run path and the call throws \"Builder keys are not\n // configured\" even though the status endpoint correctly reports configured=true.\n return runWithRequestContext({ userEmail, orgId }, async () => {\n const projectId = await resolveBuilderBranchProjectId();\n if (!projectId) {\n setResponseStatus(event, 403);\n return {\n error:\n \"Builder branch creation is not available for this organization yet.\",\n };\n }\n\n const { resolveBuilderCredential: resolveBuilderCred } =\n await import(\"./credential-provider.js\");\n const builderUserId =\n (await resolveBuilderCred(\"BUILDER_USER_ID\")) || undefined;\n // Server-controlled projectId — don't let clients target arbitrary\n // Builder projects with our private key. When this feature graduates\n // past the hardcoded preview, the projectId will come from\n // workspace/org config, still resolved server-side.\n try {\n const result = await runBuilderAgent({\n prompt,\n projectId,\n branchName:\n typeof body?.branchName === \"string\"\n ? body.branchName\n : undefined,\n userEmail,\n userId: builderUserId,\n });\n return result;\n } catch (e) {\n setResponseStatus(event, 500);\n return {\n error: e instanceof Error ? e.message : \"Builder run failed\",\n };\n }\n });\n }),\n );\n\n // Branch-creation waitlist signup. Used by ConnectBuilderCard when the\n // current request has no Builder branch project configured — instead of\n // the raw 403 from /builder/run, the card surfaces a waitlist CTA that\n // POSTs here. Recorded as a tracking event so PostHog/Mixpanel/etc.\n // capture demand without us standing up new storage.\n getH3App(nitroApp).use(\n `${P}/builder/branch-waitlist`,\n defineEventHandler(async (event: H3Event) => {\n if (getMethod(event) !== \"POST\") {\n setResponseStatus(event, 405);\n return { error: \"Method not allowed\" };\n }\n const session = await getSession(event).catch(() => null);\n if (!session?.email) {\n setResponseStatus(event, 401);\n return { error: \"Authentication required\" };\n }\n await trackBuilderLifecycle(\n event,\n \"builder branch waitlist joined\",\n session.email,\n {\n stage: \"waitlist\",\n },\n );\n return { ok: true };\n }),\n );\n\n getH3App(nitroApp).use(\n `${P}/builder/callback`,\n defineEventHandler(async (event: H3Event) => {\n if (getMethod(event) !== \"GET\") {\n setResponseStatus(event, 405);\n return { error: \"Method not allowed\" };\n }\n\n // A real session or a template-approved anonymous owner is required;\n // the pending-row check below (combined with the same-origin gate on\n // /builder/connect) blocks CSRF and callback replay.\n const ownerContext = await resolveBuilderOwnerContext(event);\n const ownerEmail = ownerContext.email;\n // Diagnostic: log the resolver's inputs for debugging \"No active\n // connect flow found\" reports. Reveals session-vs-state owner\n // mismatches and missing/forged _an_state without leaking the\n // signed token itself.\n try {\n const debugSearch = new URLSearchParams(\n (event.url?.search || \"\").replace(/^\\?/, \"\"),\n );\n const stateRaw = debugSearch.get(BUILDER_STATE_PARAM);\n const stateOwnerProbe =\n verifyBuilderCallbackStateAndGetOwner(stateRaw);\n const session = await getSession(event).catch(() => null);\n console.log(\n `[builder-callback] resolved-owner=${ownerEmail ?? \"(none)\"} session-email=${session?.email ?? \"(none)\"} state-owner=${stateOwnerProbe ?? \"(none)\"} state-present=${Boolean(stateRaw)} anon=${ownerContext.anonymous} host=${getHeader(event, \"host\") ?? \"(none)\"} sec-fetch-site=${getHeader(event, \"sec-fetch-site\") ?? \"(none)\"} origin=${getHeader(event, \"origin\") ?? \"(none)\"} referer=${getHeader(event, \"referer\") ?? \"(none)\"}`,\n );\n } catch {\n // Diagnostic logging is best-effort; do not break the callback.\n }\n if (!ownerEmail) {\n setResponseStatus(event, 401);\n return { error: \"Authentication required\" };\n }\n clearBuilderConnectOwnerCookie(event);\n\n const requestUrl = new URL(\n `${event.url?.pathname || \"/\"}${event.url?.search || \"\"}`,\n getOrigin(event),\n );\n // postMessage from the callback success/error pages must target the\n // original preview opener, not the callback server. On the fallback\n // path the callback is served from the env-configured gateway while\n // the opener lives on the preview origin. Three sources of opener\n // origin, in priority order:\n // 1. `_an_opener` — written into the callback URL's query by\n // buildBuilderCliAuthUrl when cli-auth's allow-list forced\n // preview_url onto the gateway. Survives Builder's redirect\n // verbatim (Builder preserves redirect_url's query string).\n // 2. `preview-url` — Builder echoes the top-level preview_url back\n // as a query param on the callback. Reflects the gateway on\n // the fallback path, but matches the opener on the happy path.\n // 3. The event's own origin — last-resort fallback.\n const openerOriginFromQuery =\n requestUrl.searchParams.get(BUILDER_OPENER_PARAM);\n const callbackParentOrigin =\n resolveSafePreviewUrl(openerOriginFromQuery, event) ||\n resolveSafePreviewUrl(\n requestUrl.searchParams.get(\"preview-url\"),\n event,\n ) ||\n getBuilderBrowserOriginForEvent(event);\n const callbackStateOwner = verifyBuilderCallbackStateAndGetOwner(\n requestUrl.searchParams.get(BUILDER_STATE_PARAM),\n );\n const hasValidCallbackState = callbackStateOwner === ownerEmail;\n\n // Verify either:\n // 1. the signed callback state embedded in redirect_url by\n // /builder/status (primary flow), or\n // 2. the server-side pending-connect row written by the legacy\n // /builder/connect trampoline.\n //\n // For the pending-row path, delete must succeed before we proceed;\n // otherwise a DB blip\n // leaves the row in place and the same callback URL can be\n // replayed against the same session for up to 10 minutes (the\n // TTL window). Treat a delete failure as a hard failure: the\n // user retries, the next /builder/connect call rewrites the\n // pending row.\n let pendingValid = hasValidCallbackState;\n let pendingError: string | null = null;\n try {\n const pending = (await getSetting(\n `builder-pending-connect:${ownerEmail}`,\n )) as { expiresAt?: number } | null;\n if (\n pending &&\n typeof pending.expiresAt === \"number\" &&\n Date.now() < pending.expiresAt\n ) {\n try {\n await deleteSetting(`builder-pending-connect:${ownerEmail}`);\n pendingValid = true;\n } catch (err) {\n if (!hasValidCallbackState) {\n pendingError =\n \"Could not consume pending-connect token (storage error). Please retry.\";\n console.error(\n \"[builder] deleteSetting failed for pending-connect — refusing to proceed (replay risk):\",\n (err as Error)?.message ?? err,\n );\n }\n }\n }\n } catch {\n // DB temporarily unavailable — treat as missing.\n }\n\n if (pendingError) {\n await trackBuilderLifecycle(\n event,\n \"builder connect failed\",\n ownerEmail,\n {\n reason: \"pending_consume_storage_error\",\n stage: \"callback\",\n },\n );\n // Best-effort signal to the parent's poll loop, then render the\n // popup-friendly error page so the BroadcastChannel notify fires.\n await putSetting(`builder-connect-error:${ownerEmail}`, {\n message: pendingError,\n at: Date.now(),\n }).catch(() => {});\n setResponseStatus(event, 503);\n setResponseHeader(event, \"Content-Type\", \"text/html; charset=utf-8\");\n return createBuilderBrowserCallbackErrorPage(pendingError, {\n parentOrigin: callbackParentOrigin,\n });\n }\n\n if (!pendingValid) {\n // Diagnostic: log the exact reason pendingValid is false so we can\n // distinguish \"state didn't validate\" from \"no pending row\" in\n // production \"No active connect flow found\" reports.\n console.warn(\n `[builder-callback] pending-invalid owner=${ownerEmail} has-state-param=${Boolean(requestUrl.searchParams.get(BUILDER_STATE_PARAM))} state-validated=${hasValidCallbackState} pending-error=${pendingError ?? \"(none)\"}`,\n );\n await trackBuilderLifecycle(\n event,\n \"builder connect failed\",\n ownerEmail,\n {\n reason: hasValidCallbackState\n ? \"callback_state_unexpectedly_rejected\"\n : \"missing_pending_connect\",\n stage: \"callback\",\n has_callback_state: Boolean(\n requestUrl.searchParams.get(BUILDER_STATE_PARAM),\n ),\n },\n );\n const msg =\n \"No active connect flow found. Restart the Builder connect flow from Settings.\";\n // Write an error signal so the polling loop in the parent tab\n // terminates quickly instead of waiting 5 minutes for the timeout.\n try {\n await putSetting(`builder-connect-error:${ownerEmail}`, {\n message: msg,\n at: Date.now(),\n });\n } catch {\n // DB unavailable — parent will time out naturally.\n }\n setResponseStatus(event, 403);\n setResponseHeader(event, \"Content-Type\", \"text/html; charset=utf-8\");\n return createBuilderBrowserCallbackErrorPage(msg, {\n parentOrigin: callbackParentOrigin,\n });\n }\n\n const privateKey = requestUrl.searchParams.get(\"p-key\");\n const publicKey = requestUrl.searchParams.get(\"api-key\");\n\n if (!privateKey || !publicKey) {\n await trackBuilderLifecycle(\n event,\n \"builder connect failed\",\n ownerEmail,\n {\n reason: \"missing_credentials\",\n stage: \"callback\",\n },\n );\n // Render the popup-friendly error page (and write a status row)\n // instead of bare JSON, so the parent tab's poll loop terminates\n // immediately via BroadcastChannel rather than hanging until the\n // 5-minute timeout.\n const msg =\n \"Builder didn't return credentials. Restart the connect flow from settings.\";\n await putSetting(`builder-connect-error:${ownerEmail}`, {\n message: msg,\n at: Date.now(),\n }).catch(() => {});\n setResponseStatus(event, 400);\n setResponseHeader(event, \"Content-Type\", \"text/html; charset=utf-8\");\n return createBuilderBrowserCallbackErrorPage(msg, {\n parentOrigin: callbackParentOrigin,\n });\n }\n\n const userId = requestUrl.searchParams.get(\"user-id\");\n const orgName = requestUrl.searchParams.get(\"org-name\");\n const orgKind = requestUrl.searchParams.get(\"kind\");\n\n // Store per-user in app_secrets so each user's Builder connection\n // is independent. No more shared env vars that the last connector\n // overwrites.\n //\n // Failure handling: a silent catch here (returning the success page\n // anyway) was Midhun's bug on 2026-04-28 — popup said \"yay\", parent\n // window polled `/builder/status` for 5 minutes seeing\n // configured:false, never got a real error. Now we surface the\n // failure two ways: (a) a settings row that the next /builder/status\n // poll picks up, and (b) postMessage from the error page itself,\n // wired into the popup HTML, so the parent stops polling immediately.\n let writeError: string | null = null;\n try {\n const { writeBuilderCredentials } =\n await import(\"./credential-provider.js\");\n // Resolve the user's active org / role so the credentials land\n // at org scope when an owner/admin is connecting (everyone in\n // the org auto-resolves them on next chat call). Members and\n // users with no active org silently fall back to user scope.\n // Failure to read org context is non-fatal — we just keep the\n // legacy per-user behaviour for that connection.\n let orgId: string | null = null;\n let role: string | null = null;\n if (!ownerContext.anonymous) {\n try {\n const { getOrgContext } = await import(\"../org/context.js\");\n const orgCtx = await getOrgContext(event);\n orgId = orgCtx.orgId ?? null;\n role = orgCtx.role ?? null;\n } catch {\n /* org module not present in this template — keep user scope */\n }\n }\n const target = await writeBuilderCredentials(\n ownerEmail,\n { privateKey, publicKey, userId, orgName, orgKind },\n { orgId, role },\n );\n console.log(\n `[builder-connect] wrote credentials email=${ownerEmail} requestOrgId=${orgId ?? \"(none)\"} role=${role ?? \"(none)\"} scope=${target.scope} scopeId=${target.scopeId}`,\n );\n } catch (err) {\n writeError = (err as Error)?.message ?? String(err);\n console.error(\n \"[builder] Failed to persist Builder credentials:\",\n writeError,\n );\n }\n\n if (writeError) {\n await trackBuilderLifecycle(\n event,\n \"builder connect failed\",\n ownerEmail,\n {\n reason: \"credential_write_failed\",\n stage: \"callback\",\n },\n );\n // Best-effort signal to /builder/status. If putSetting also fails\n // (entire DB unreachable) the popup's postMessage still notifies\n // the parent. If both fail the parent times out at 5min as today.\n try {\n await putSetting(`builder-connect-error:${ownerEmail}`, {\n message: writeError,\n at: Date.now(),\n });\n } catch (settingsErr) {\n console.error(\n \"[builder] Couldn't even record connect-error to settings:\",\n (settingsErr as Error)?.message ?? settingsErr,\n );\n }\n setResponseStatus(event, 500);\n setResponseHeader(event, \"Content-Type\", \"text/html; charset=utf-8\");\n return createBuilderBrowserCallbackErrorPage(writeError, {\n parentOrigin: callbackParentOrigin,\n });\n }\n\n // Clear any legacy disconnect flag and any prior connect-error row\n // (so a successful retry doesn't surface the previous failure).\n try {\n await deleteSetting(\"builder-disconnected\");\n } catch {\n // DB not ready — proceed\n }\n try {\n await deleteSetting(`builder-connect-error:${ownerEmail}`);\n } catch {\n // No prior error row — fine\n }\n\n const previewUrl = resolveSafePreviewUrl(\n requestUrl.searchParams.get(\"preview-url\"),\n event,\n );\n await trackBuilderLifecycle(\n event,\n \"builder connect succeeded\",\n ownerEmail,\n {\n stage: \"callback\",\n has_preview_url: Boolean(previewUrl),\n org_kind: orgKind || undefined,\n },\n );\n setResponseHeader(event, \"Content-Type\", \"text/html; charset=utf-8\");\n // The parent (opener) is the original preview surface that started the\n // connect flow, NOT the callback server's own origin — when the\n // env-configured gateway is used as the callback fallback (because\n // Builder rejects the preview host), the callback server and the\n // opener live on different origins, and postMessage to the gateway\n // origin would be dropped by the preview opener. callbackParentOrigin\n // is the precomputed best-available opener origin (`_an_opener` →\n // `preview-url` → event origin).\n return createBuilderBrowserCallbackPage(previewUrl, {\n parentOrigin: callbackParentOrigin,\n });\n }),\n );\n\n // POST /_agent-native/builder/disconnect — revoke the user's per-user\n // or org-scoped Builder credentials in app_secrets. Deploy-level env\n // credentials are never mutated here; if env is configured it remains as\n // the fallback after request-scoped credentials are removed.\n getH3App(nitroApp).use(\n `${P}/builder/disconnect`,\n defineEventHandler(async (event: H3Event) => {\n if (getMethod(event) !== \"POST\") {\n setResponseStatus(event, 405);\n return { error: \"Method not allowed\" };\n }\n const session = await getSession(event).catch(() => null);\n if (!session?.email) {\n setResponseStatus(event, 401);\n return { error: \"unauthorized\" };\n }\n\n const { deleteBuilderCredentials } =\n await import(\"./credential-provider.js\");\n\n // Mirror the connect-side scope decision so disconnect undoes\n // exactly what connect wrote: owner/admin connections land at\n // org scope and tear down at org scope; member or no-org\n // connections stay user-scoped on both ends. Symmetric, so a\n // single Disconnect press always reverses what the same user's\n // Connect press did.\n let orgId: string | null = null;\n let role: string | null = null;\n try {\n const { getOrgContext } = await import(\"../org/context.js\");\n const orgCtx = await getOrgContext(event);\n orgId = orgCtx.orgId ?? null;\n role = orgCtx.role ?? null;\n } catch {\n /* org module not present — keep user scope */\n }\n\n try {\n await deleteBuilderCredentials(session.email, { orgId, role });\n } catch (err) {\n await trackBuilderLifecycle(\n event,\n \"builder disconnect failed\",\n session.email,\n {\n reason: \"credential_delete_failed\",\n },\n );\n setResponseStatus(event, 500);\n return {\n ok: false,\n error:\n \"Could not remove Builder credentials — your connection is unchanged. Please retry.\",\n cause: err instanceof Error ? err.message : String(err),\n };\n }\n\n await trackBuilderLifecycle(\n event,\n \"builder disconnect succeeded\",\n session.email,\n );\n return { ok: true };\n }),\n );\n\n // Proxy to Builder's agents-run API for background code changes.\n getH3App(nitroApp).use(\n `${P}/builder/agents-run`,\n defineEventHandler(async (event: H3Event) => {\n if (getMethod(event) !== \"POST\") {\n setResponseStatus(event, 405);\n return { error: \"Method not allowed\" };\n }\n\n const session = await getSession(event).catch(() => null);\n if (!session?.email) {\n setResponseStatus(event, 401);\n return { error: \"unauthorized\" };\n }\n\n return runWithRequestContext(\n { userEmail: session.email, orgId: session.orgId ?? undefined },\n async () => {\n const { resolveBuilderCredentials: resolveCreds } =\n await import(\"./credential-provider.js\");\n const creds = await resolveCreds();\n if (!creds.privateKey || !creds.publicKey) {\n setResponseStatus(event, 400);\n return {\n error:\n \"Builder not connected. Connect Builder in Setup to use background agent.\",\n };\n }\n const body = (await readBody(event)) as {\n userMessage?: string;\n branchName?: string;\n projectUrl?: string;\n };\n if (!body?.userMessage) {\n setResponseStatus(event, 400);\n return { error: \"userMessage is required\" };\n }\n const apiHost =\n process.env.BUILDER_API_HOST || \"https://api.builder.io\";\n try {\n const res = await fetch(\n `${apiHost}/agents/run?apiKey=${encodeURIComponent(creds.publicKey)}`,\n {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n Authorization: `Bearer ${creds.privateKey}`,\n },\n body: JSON.stringify({\n userMessage: {\n userPrompt: body.userMessage,\n },\n branchName: body.branchName,\n }),\n },\n );\n if (!res.ok) {\n const err = await res.text().catch(() => \"Unknown error\");\n setResponseStatus(event, res.status);\n return {\n error: redactValues(err, [creds.privateKey, creds.publicKey]),\n };\n }\n return await res.json();\n } catch (err: any) {\n setResponseStatus(event, 500);\n return {\n error: redactValues(\n err?.message || \"Failed to reach Builder agents-run API\",\n [creds.privateKey, creds.publicKey],\n ),\n };\n }\n },\n );\n }),\n );\n\n // Env key management — framework keys are always included\n const frameworkEnvKeys: EnvKeyConfig[] = [\n { key: \"ENABLE_BUILDER\", label: \"Enable Builder.io features\" },\n {\n key: \"AGENT_ENGINE_PREFER_BYO_KEY\",\n label:\n \"Prefer BYO LLM key over Builder gateway (default: false — gateway wins)\",\n },\n ...Object.values(PROVIDER_ENV_META).map(({ envVar, label }) => ({\n key: envVar,\n label,\n })),\n ];\n {\n const envKeys = [...frameworkEnvKeys, ...(options.envKeys ?? [])];\n\n // Onboarding form fields are resolved per-request so late-registered\n // steps (and template overrides) are picked up without a restart.\n const collectOnboardingKeys = (): Set<string> => {\n const keys = new Set<string>();\n for (const step of listOnboardingSteps()) {\n for (const method of step.methods) {\n if (method.kind === \"form\") {\n for (const field of method.payload.fields) {\n if (field?.key) keys.add(field.key);\n }\n }\n if (method.kind === \"builder-cli-auth\") {\n keys.add(\"BUILDER_PRIVATE_KEY\");\n keys.add(\"BUILDER_PUBLIC_KEY\");\n }\n }\n }\n return keys;\n };\n\n getH3App(nitroApp).use(\n `${P}/env-status`,\n defineEventHandler(async (event) => {\n const session = await getSession(event).catch(() => null);\n const userEmail = session?.email;\n let orgId: string | undefined;\n if (userEmail) {\n try {\n const orgCtx = await getOrgContext(event);\n orgId = orgCtx.orgId ?? undefined;\n } catch {\n /* org module not present in this template */\n }\n }\n const canUseDeployEnv = await runWithRequestContext(\n { userEmail, orgId },\n () => canUseDeployCredentialFallbackForRequest(),\n );\n\n return envKeys.map((cfg) => {\n const isProviderKey = PROVIDER_ENV_VAR_KEYS.has(cfg.key);\n return {\n key: cfg.key,\n label: cfg.label,\n required: cfg.required ?? false,\n configured:\n !!process.env[cfg.key] && (!isProviderKey || canUseDeployEnv),\n ...(cfg.helpText ? { helpText: cfg.helpText } : {}),\n };\n });\n }),\n );\n\n getH3App(nitroApp).use(\n `${P}/env-vars`,\n defineEventHandler(async (event: H3Event) => {\n if (getMethod(event) !== \"POST\") {\n setResponseStatus(event, 405);\n return { error: \"Method not allowed\" };\n }\n\n // Env vars are deployment-wide globals, not per-tenant. On any\n // shared-DB multi-tenant deploy, allowing authenticated users to\n // write here lets one tenant overwrite Stripe / OpenAI / Sentry\n // keys for every other tenant. Disable the endpoint outside of\n // local-dev SQLite or an explicit single-tenant opt-in, and\n // direct callers to the per-org credential store instead.\n if (!isEnvVarWriteAllowed()) {\n setResponseStatus(event, 403);\n return {\n error:\n \"env-vars endpoint disabled on multi-tenant deployments. Use saveCredential(key, value, { userEmail, orgId, scope: 'org' }) to store per-org credentials.\",\n };\n }\n\n const body = await readBody(event);\n const { vars } = body as {\n vars?: Array<{ key: string; value: string }>;\n };\n\n if (!Array.isArray(vars) || vars.length === 0) {\n setResponseStatus(event, 400);\n return { error: \"vars array required\" };\n }\n\n const allowedKeys = new Set<string>([\n ...envKeys.map((k) => k.key),\n ...collectOnboardingKeys(),\n ]);\n\n const filtered = vars.filter(\n (v) =>\n typeof v.key === \"string\" &&\n allowedKeys.has(v.key) &&\n typeof v.value === \"string\" &&\n v.value.trim().length > 0,\n );\n if (filtered.length === 0) {\n setResponseStatus(event, 400);\n const rejectedEmpty = vars.some(\n (v) =>\n typeof v.key === \"string\" &&\n allowedKeys.has(v.key) &&\n (typeof v.value !== \"string\" || v.value.trim().length === 0),\n );\n return {\n error: rejectedEmpty\n ? \"Env values must be non-empty — refusing to clear a saved key\"\n : \"No recognized env keys in request\",\n };\n }\n\n // Write to .env file. When inside a workspace, write to the\n // workspace root .env so keys are shared across every app. The\n // per-app .env still wins at load time if it also defines a key.\n try {\n const scope =\n (body as { scope?: \"workspace\" | \"app\" })?.scope ?? \"auto\";\n const workspaceRoot = findWorkspaceRoot(process.cwd());\n const envPath =\n scope === \"app\"\n ? path.join(process.cwd(), \".env\")\n : workspaceRoot\n ? path.join(workspaceRoot, \".env\")\n : path.join(process.cwd(), \".env\");\n await upsertEnvFile(envPath, filtered);\n } catch {\n // Edge runtime — skip file write\n }\n\n // Update process.env immediately\n for (const { key, value } of filtered) {\n process.env[key] = value;\n }\n\n // Persist to settings table for serverless cold-start recovery.\n try {\n const envMap: Record<string, string> = {};\n for (const { key, value } of filtered) envMap[key] = value;\n const existing =\n ((await getSetting(\"persisted-env-vars\")) as Record<\n string,\n string\n > | null) ?? {};\n await putSetting(\"persisted-env-vars\", { ...existing, ...envMap });\n } catch {\n // DB not ready yet — skip\n }\n\n return { saved: filtered.map((v) => v.key) };\n }),\n );\n }\n\n // GET /_agent-native/agent-engine/status — reports whether an engine\n // is configured (settings row, settings+env, or auto-detected from env).\n // The agent-chat UI uses this to skip the onboarding gate for providers\n // not in the env-status list (OpenRouter, Groq, Ollama, …).\n getH3App(nitroApp).use(\n `${P}/agent-engine/status`,\n defineEventHandler(async (event) => {\n try {\n const session = await getSession(event).catch(() => null);\n const userEmail = session?.email;\n let orgId: string | undefined;\n if (userEmail) {\n try {\n const orgCtx = await getOrgContext(event);\n orgId = orgCtx.orgId ?? undefined;\n } catch {\n /* org module not present in this template */\n }\n }\n const stored = (await getSetting(\"agent-engine\")) as {\n engine?: string;\n model?: string;\n } | null;\n if (isAgentEngineSettingConfigured(stored)) {\n const engine = (stored as { engine: string }).engine;\n const entry = getAgentEngineEntry(engine);\n return {\n configured: true,\n engine,\n model: stored.model ?? entry?.defaultModel ?? DEFAULT_MODEL,\n source: \"settings\" as const,\n };\n }\n // Per-user app_secrets — a user who connected Builder (or pasted\n // their own provider key) may not have any deploy-level env vars\n // set, so check their per-user secret store before reporting \"no\n // engine configured\" and re-showing the onboarding gate.\n const detectedFromUser = await runWithRequestContext(\n { userEmail, orgId },\n () => detectEngineFromUserSecrets(),\n );\n if (detectedFromUser?.name === \"builder\") {\n return {\n configured: true,\n engine: detectedFromUser.name,\n model: detectedFromUser.defaultModel ?? DEFAULT_MODEL,\n source: \"app_secrets\" as const,\n envVar: detectedFromUser.requiredEnvVars[0],\n };\n }\n if (stored && typeof stored.engine === \"string\") {\n const entry = getAgentEngineEntry(stored.engine);\n if (\n entry &&\n (await runWithRequestContext({ userEmail, orgId }, () =>\n isStoredEngineUsableForRequest(stored, entry),\n ))\n ) {\n return {\n configured: true,\n engine: stored.engine,\n model: stored.model ?? entry.defaultModel ?? DEFAULT_MODEL,\n source: \"env\" as const,\n envVar: entry.requiredEnvVars[0],\n };\n }\n }\n if (detectedFromUser) {\n return {\n configured: true,\n engine: detectedFromUser.name,\n model: detectedFromUser.defaultModel ?? DEFAULT_MODEL,\n source: \"app_secrets\" as const,\n envVar: detectedFromUser.requiredEnvVars[0],\n };\n }\n const canUseDeployEnv = await runWithRequestContext(\n { userEmail, orgId },\n () => canUseDeployCredentialFallbackForRequest(),\n );\n const detected = canUseDeployEnv ? detectEngineFromEnv() : null;\n if (detected) {\n return {\n configured: true,\n engine: detected.name,\n model: detected.defaultModel ?? DEFAULT_MODEL,\n source: \"env\" as const,\n envVar: detected.requiredEnvVars[0],\n };\n }\n } catch {}\n return { configured: false };\n }),\n );\n\n // POST /_agent-native/agent-engine/disconnect — clear the agent-engine\n // setting. Env vars are left alone so the next chat turn falls back to\n // resolveEngine's env/default resolution.\n getH3App(nitroApp).use(\n `${P}/agent-engine/disconnect`,\n defineEventHandler(async (event: H3Event) => {\n if (getMethod(event) !== \"POST\") {\n setResponseStatus(event, 405);\n return { error: \"Method not allowed\" };\n }\n const session = await getSession(event).catch(() => null);\n if (!session?.email) {\n setResponseStatus(event, 401);\n return { error: \"unauthorized\" };\n }\n try {\n await deleteSetting(\"agent-engine\");\n return { ok: true };\n } catch (err) {\n setResponseStatus(event, 500);\n return {\n ok: false,\n error: err instanceof Error ? err.message : String(err),\n };\n }\n }),\n );\n\n // GET/PUT/DELETE /_agent-native/agent-loop-settings — org/user-scoped\n // ceiling for tool-calling loop iterations before the agent asks whether\n // it should keep going.\n getH3App(nitroApp).use(\n `${P}/agent-loop-settings`,\n defineEventHandler(async (event: H3Event) => {\n const session = await getSession(event).catch(() => null);\n if (!session?.email) {\n setResponseStatus(event, 401);\n return { error: \"unauthorized\" };\n }\n\n const orgCtx = await getOrgContext(event).catch(() => null);\n const orgId = orgCtx?.orgId ?? session.orgId ?? null;\n const ctx = { userEmail: session.email, orgId };\n const canUpdate = await canUpdateAgentLoopSettings(\n session.email,\n orgId,\n );\n\n const withContext = async () => ({\n ...(await readAgentLoopSettings(ctx)),\n canUpdate,\n orgId,\n orgName: orgCtx?.orgName ?? null,\n role: orgCtx?.role ?? null,\n });\n\n const method = getMethod(event);\n if (method === \"GET\") {\n return withContext();\n }\n\n if (method === \"PUT\") {\n if (!canUpdate) {\n setResponseStatus(event, 403);\n return {\n error: orgId\n ? \"Only organization owners and admins can change the agent step limit.\"\n : \"You cannot change the agent step limit.\",\n };\n }\n const body = await readBody(event).catch(() => ({}));\n const validation = validateMaxIterationsInput(\n (body as any)?.maxIterations,\n );\n if (validation.ok === false) {\n setResponseStatus(event, 400);\n return { error: validation.error };\n }\n const updated = await writeAgentLoopSettings(ctx, validation.value);\n return {\n ...updated,\n canUpdate,\n orgId,\n orgName: orgCtx?.orgName ?? null,\n role: orgCtx?.role ?? null,\n };\n }\n\n if (method === \"DELETE\") {\n if (!canUpdate) {\n setResponseStatus(event, 403);\n return {\n error: orgId\n ? \"Only organization owners and admins can reset the agent step limit.\"\n : \"You cannot reset the agent step limit.\",\n };\n }\n const updated = await resetAgentLoopSettings(ctx);\n return {\n ...updated,\n canUpdate,\n orgId,\n orgName: orgCtx?.orgName ?? null,\n role: orgCtx?.role ?? null,\n };\n }\n\n setResponseStatus(event, 405);\n return { error: \"Method not allowed\" };\n }),\n );\n\n // ─── Usage & cost summary ────────────────────────────────────────\n // GET /_agent-native/usage?sinceDays=30\n // Returns spend broken down by label, model, app, and day for the\n // current user. Powers the Usage section in the agent settings panel.\n getH3App(nitroApp).use(\n `${P}/usage`,\n defineEventHandler(async (event: H3Event) => {\n const session = await getSession(event).catch(() => null);\n if (!session?.email) {\n setResponseStatus(event, 401);\n return { error: \"unauthorized\" };\n }\n const sinceDaysParam = new URL(\n `${event.url?.pathname || \"/\"}${event.url?.search || \"\"}`,\n \"http://x\",\n ).searchParams.get(\"sinceDays\");\n const sinceDays = Math.max(\n 1,\n Math.min(365, Number(sinceDaysParam) || 30),\n );\n const { getUsageSummary, usageBillingForEngine } =\n await import(\"../usage/store.js\");\n const [summary, engineName] = await Promise.all([\n getUsageSummary({\n ownerEmail: session.email,\n sinceMs: Date.now() - sinceDays * 86_400_000,\n }),\n detectUsageEngineName(event, session.email),\n ]);\n return {\n ...summary,\n billing: usageBillingForEngine(engineName),\n };\n }),\n );\n\n // ─── File upload primitive ──────────────────────────────────────\n // GET /_agent-native/file-upload/status — report active provider\n // POST /_agent-native/file-upload — upload a file, return { url }\n getH3App(nitroApp).use(\n `${P}/file-upload/status`,\n defineEventHandler(async (event) => {\n const active = getActiveFileUploadProvider();\n // resolveBuilderPrivateKey() reads per-user credentials from app_secrets\n // (DB), which requires request context (AsyncLocalStorage) to know which\n // user to scope by. Without runWithRequestContext() the ALS store is empty\n // and it falls back to process.env only — missing OAuth-connected users.\n const session = await getSession(event).catch(() => null);\n const userEmail = session?.email;\n let builderConfigured = !!process.env.BUILDER_PRIVATE_KEY;\n try {\n const { resolveBuilderPrivateKey } =\n await import(\"./credential-provider.js\");\n const resolve = () => resolveBuilderPrivateKey().then((k) => !!k);\n builderConfigured = userEmail\n ? await runWithRequestContext({ userEmail }, resolve)\n : await resolve();\n } catch {\n // fall back to env check above\n }\n // When the builder builtin is selected via env var, its sync\n // isConfigured() doesn't reflect per-user OAuth credentials. Use the\n // async builderConfigured check so the status accurately represents\n // whether this specific user can actually upload (thread 7 fix).\n const isBuilderEnvActive = active?.id === \"builder\";\n const configured = isBuilderEnvActive\n ? builderConfigured\n : !!active || builderConfigured;\n const activeProvider = isBuilderEnvActive\n ? builderConfigured\n ? { id: \"builder\", name: \"Builder.io\" }\n : null\n : active\n ? { id: active.id, name: active.name }\n : builderConfigured\n ? { id: \"builder\", name: \"Builder.io\" }\n : null;\n return {\n configured,\n activeProvider,\n providers: listFileUploadProviders().map((p) => ({\n id: p.id,\n name: p.name,\n configured: p.isConfigured(),\n })),\n builderConfigured,\n };\n }),\n );\n\n getH3App(nitroApp).use(\n `${P}/file-upload`,\n defineEventHandler(async (event: H3Event) => {\n if (getMethod(event) !== \"POST\") {\n setResponseStatus(event, 405);\n return { error: \"Method not allowed\" };\n }\n const parts = await readMultipartFormData(event);\n const filePart = parts?.find((p) => p.name === \"file\");\n if (!filePart?.data) {\n setResponseStatus(event, 400);\n return { error: \"No file uploaded\" };\n }\n\n const session = await getSession(event);\n if (!session?.email) {\n setResponseStatus(event, 401);\n return { error: \"Unauthorized\" };\n }\n const userEmail = session.email;\n const result = await runWithRequestContext({ userEmail }, () =>\n uploadFile({\n data: filePart.data,\n filename: filePart.filename,\n mimeType: filePart.type,\n ownerEmail: userEmail,\n }),\n );\n\n if (result) {\n setResponseStatus(event, 201);\n return result;\n }\n\n setResponseStatus(event, 503);\n return {\n error:\n \"No file upload provider configured. Connect Builder.io in Settings → File uploads, or register a provider.\",\n };\n }),\n );\n\n // ─── Voice transcription (Whisper) ───────────────────────────────\n // POST /_agent-native/transcribe-voice — multipart audio → text\n getH3App(nitroApp).use(\n `${P}/transcribe-voice`,\n createTranscribeVoiceHandler(),\n );\n\n // ─── Google realtime transcription session bridge ───────────────\n // POST /_agent-native/transcribe-stream/session — resolve the user's\n // Google service-account credential server-side, mint an opaque managed\n // streaming session in ai-services, and return the websocket URL.\n getH3App(nitroApp).use(\n `${P}/transcribe-stream/session`,\n createGoogleRealtimeSessionHandler(),\n );\n\n // ─── Voice provider status ───────────────────────────────────────\n // GET /_agent-native/voice-providers/status — which providers are\n // configured for the current user (powers the Settings UI pills).\n getH3App(nitroApp).use(\n `${P}/voice-providers/status`,\n createVoiceProvidersStatusHandler(),\n );\n\n // ─── Ad-hoc secrets (user-created keys) ────────────────────────────\n // Must mount before the generic /secrets handler to avoid shadowing.\n const adHocSecretHandler = createAdHocSecretHandler();\n getH3App(nitroApp).use(`${P}/secrets/adhoc`, adHocSecretHandler);\n\n // ─── Secrets registry ────────────────────────────────────────────\n // GET /_agent-native/secrets — list registered secrets + status\n // POST /_agent-native/secrets/:key — write a secret value\n // DELETE /_agent-native/secrets/:key — remove a secret value\n // POST /_agent-native/secrets/:key/test — re-run the validator\n const listSecretsHandler = createListSecretsHandler();\n const writeSecretHandler = createWriteSecretHandler();\n const testSecretHandler = createTestSecretHandler();\n\n getH3App(nitroApp).use(\n `${P}/secrets`,\n defineEventHandler(async (event: H3Event) => {\n const pathname = (event.url?.pathname || \"\")\n .replace(/^\\/+/, \"\")\n .replace(/\\/+$/, \"\");\n const parts = pathname ? pathname.split(\"/\") : [];\n\n // Collection root — list handler.\n if (parts.length === 0) {\n return listSecretsHandler(event);\n }\n\n // /:key/test — re-validate stored value.\n if (parts.length === 2 && parts[1] === \"test\") {\n return testSecretHandler(event);\n }\n\n // /:key — write / delete a specific secret.\n if (parts.length === 1) {\n return writeSecretHandler(event);\n }\n\n setResponseStatus(event, 404);\n return { error: \"Not found\" };\n }),\n );\n\n // ─── Notifications inbox ──────────────────────────────────────────\n // GET /_agent-native/notifications[?unread&limit&before]\n // GET /_agent-native/notifications/count\n // POST /_agent-native/notifications/:id/read\n // POST /_agent-native/notifications/read-all\n // DELETE /_agent-native/notifications/:id\n getH3App(nitroApp).use(`${P}/notifications`, createNotificationsHandler());\n\n // ─── Extensions (sandboxed mini-app runtime + proxy) ────────────────\n try {\n const { ensureExtensionsTables, registerExtensionsShareable } =\n await import(\"../extensions/store.js\");\n const { createExtensionsHandler } =\n await import(\"../extensions/routes.js\");\n ensureExtensionsTables().catch(() => {});\n registerExtensionsShareable();\n const extensionsHandler = createExtensionsHandler();\n getH3App(nitroApp).use(`${P}/extensions`, extensionsHandler);\n // Legacy alias — the previous public API was /_agent-native/tools/*.\n // Mounted in addition to /extensions/* so any deployed iframes mid-flight\n // (or external integrations bookmarked the old path) keep working.\n getH3App(nitroApp).use(`${P}/tools`, extensionsHandler);\n\n // Extension-point slots — sub-system of extensions.\n const { ensureSlotTables } = await import(\"../extensions/slots/store.js\");\n const { createSlotsHandler } =\n await import(\"../extensions/slots/routes.js\");\n ensureSlotTables().catch(() => {});\n getH3App(nitroApp).use(`${P}/slots`, createSlotsHandler());\n } catch {\n // Extensions module not available — skip\n }\n\n // ─── Page-level legacy redirect: /tools → /extensions ──────────────\n // Catches direct browser navigation / bookmarks for the old page route\n // (`/tools`, `/tools/:id`) and 302s to the renamed equivalent under\n // `/extensions`. The framework API alias above (`/_agent-native/tools/*`)\n // is intentionally untouched — it stays mounted in parallel.\n //\n // Mounted with no path so the helper can do its own base-path stripping\n // (h3 mount-matching only allows base-path stripping for `/_agent-native`\n // and `/.well-known`). Returns undefined to fall through for anything\n // that isn't a `/tools` page navigation.\n getH3App(nitroApp).use(\n defineEventHandler((event) => {\n const method = getMethod(event);\n if (method !== \"GET\" && method !== \"HEAD\") return;\n const rawPath =\n event.url?.pathname ??\n String(event.node?.req?.url ?? event.path ?? \"/\").split(\"?\")[0];\n const search = event.url?.search ?? \"\";\n const target = resolveLegacyToolsRedirect(rawPath, search);\n if (!target) return;\n setResponseStatus(event, 302);\n setResponseHeader(event, \"Location\", target);\n return \"\";\n }),\n );\n\n // ─── Agent run progress ───────────────────────────────────────────\n // GET /_agent-native/runs[?active&limit]\n // GET /_agent-native/runs/:id\n // DELETE /_agent-native/runs/:id\n getH3App(nitroApp).use(`${P}/runs`, createProgressHandler());\n\n // ─── Automations API ──────────────────────────────────────────────\n // GET /_agent-native/automations — list all automations (parsed triggers)\n // POST /_agent-native/automations/fire-test — emit test.event.fired\n getH3App(nitroApp).use(\n `${P}/automations`,\n defineEventHandler(async (event: H3Event) => {\n const method = getMethod(event);\n const pathname = (event.path || event.url?.pathname || \"\")\n .split(\"?\")[0]\n .replace(/^\\/+/, \"\")\n .replace(/\\/+$/, \"\");\n\n // Auth check applies to every method. Without this, any anonymous\n // caller could `POST /fire-test` to emit unowned events that fan\n // out across every tenant's matching trigger (the dispatcher\n // short-circuits its owner check when `eventMeta.owner` is\n // undefined). See audit 12 / fire-test finding.\n const session = await getSession(event).catch(() => null);\n if (!session?.email) {\n setResponseStatus(event, 401);\n return { error: \"Unauthenticated\" };\n }\n\n if (\n (pathname === \"fire-test\" || pathname.endsWith(\"/fire-test\")) &&\n method === \"POST\"\n ) {\n try {\n const { emit } = await import(\"../event-bus/index.js\");\n const body = (await readBody(event).catch(() => ({}))) as Record<\n string,\n unknown\n >;\n // Scope the test event to the current user so only their\n // automations fire, not those owned by other tenants.\n emit(\n \"test.event.fired\",\n { data: body.data ?? {} },\n {\n owner: session.email,\n },\n );\n return { ok: true };\n } catch (err: any) {\n setResponseStatus(event, 500);\n return { error: err?.message ?? \"Failed to emit test event\" };\n }\n }\n\n if (method !== \"GET\") {\n setResponseStatus(event, 405);\n return { error: \"Method not allowed\" };\n }\n\n try {\n const owner = session.email;\n const { resourceListAllOwners, SHARED_OWNER } =\n await import(\"../resources/store.js\");\n const allResources = await resourceListAllOwners(\"jobs/\");\n const resources = allResources.filter(\n (r) => r.owner === owner || r.owner === SHARED_OWNER,\n );\n const FRONT_RE = /^---\\n([\\s\\S]*?)\\n---\\n?([\\s\\S]*)$/;\n const automations = resources\n .filter((r) => r.path.endsWith(\".md\") && !r.path.endsWith(\".keep\"))\n .map((r) => {\n const match = r.content.match(FRONT_RE);\n if (!match)\n return {\n id: r.id,\n name: r.path.replace(/^jobs\\//, \"\").replace(/\\.md$/, \"\"),\n path: r.path,\n owner: r.owner,\n triggerType: \"schedule\" as const,\n enabled: false,\n mode: \"agentic\" as const,\n body: r.content,\n };\n const yaml = match[1];\n const body = match[2].trim();\n const meta: Record<string, string> = {};\n for (const line of yaml.split(\"\\n\")) {\n const ci = line.indexOf(\":\");\n if (ci === -1) continue;\n const k = line.slice(0, ci).trim();\n let v = line.slice(ci + 1).trim();\n if (\n (v.startsWith('\"') && v.endsWith('\"')) ||\n (v.startsWith(\"'\") && v.endsWith(\"'\"))\n )\n v = v.slice(1, -1);\n meta[k] = v;\n }\n return {\n id: r.id,\n name: r.path.replace(/^jobs\\//, \"\").replace(/\\.md$/, \"\"),\n path: r.path,\n owner: r.owner,\n triggerType: meta.triggerType || \"schedule\",\n event: meta.event,\n schedule: meta.schedule,\n condition: meta.condition,\n mode: meta.mode || \"agentic\",\n domain: meta.domain,\n enabled: meta.enabled !== \"false\",\n lastStatus: meta.lastStatus,\n lastRun: meta.lastRun,\n lastError: meta.lastError,\n createdBy: meta.createdBy,\n body,\n };\n });\n return automations;\n } catch (err: any) {\n setResponseStatus(event, 500);\n return { error: err?.message ?? \"Failed to list automations\" };\n }\n }),\n );\n\n // ─── Application State CRUD ──────────────────────────────────────\n // Auto-mounted so templates don't need boilerplate route files.\n\n // ─── User-scoped settings store ────────────────────────────────────\n // GET /_agent-native/settings/:key — read current user's value\n // PUT /_agent-native/settings/:key — write current user's value\n // DELETE /_agent-native/settings/:key — clear current user's value\n //\n // Keys are auto-prefixed with `u:<email>:` so each user gets their\n // own row — no leakage between sessions sharing the same DB.\n getH3App(nitroApp).use(\n `${P}/settings`,\n defineEventHandler(async (event: H3Event) => {\n const rawKey =\n (event.url?.pathname || \"\").replace(/^\\/+/, \"\").split(\"/\")[0] || \"\";\n const key = rawKey.replace(/[^a-zA-Z0-9_-]/g, \"\");\n if (!key) {\n setResponseStatus(event, 404);\n return { error: \"Settings key required\" };\n }\n\n const session = await getSession(event);\n if (!session?.email) {\n setResponseStatus(event, 401);\n return { error: \"unauthorized\" };\n }\n\n const method = getMethod(event);\n const requestSource =\n (event.node?.req?.headers?.[\"x-request-source\"] as\n | string\n | undefined) || undefined;\n\n if (method === \"GET\") {\n const value = await getUserSetting(session.email, key);\n if (!value) {\n setResponseStatus(event, 404);\n return { error: `No setting for ${key}` };\n }\n return value;\n }\n\n if (method === \"PUT\") {\n const body = await readBody(event);\n await putUserSetting(session.email, key, body, { requestSource });\n return body;\n }\n\n if (method === \"DELETE\") {\n await deleteUserSetting(session.email, key, { requestSource });\n return { ok: true };\n }\n\n setResponseStatus(event, 405);\n return { error: \"Method not allowed\" };\n }),\n );\n\n // ─── Avatar routes ──────────────────────────────────────────────────\n // GET /_agent-native/avatar/:email — fetch any user's avatar (public)\n // PUT /_agent-native/avatar — update current user's avatar (auth required)\n getH3App(nitroApp).use(\n `${P}/avatar`,\n defineEventHandler(async (event: H3Event) => {\n const method = getMethod(event);\n const emailParam = (event.url?.pathname || \"\")\n .replace(/^\\/+/, \"\")\n .split(\"/\")[0];\n\n if (method === \"GET\") {\n if (!emailParam) {\n setResponseStatus(event, 400);\n return { error: \"email required\" };\n }\n const data = await getSetting(\n `avatar:${decodeURIComponent(emailParam)}`,\n );\n return { image: (data as any)?.image ?? null };\n }\n\n if (method === \"PUT\") {\n const session = await getSession(event);\n if (!session?.email) {\n setResponseStatus(event, 401);\n return { error: \"unauthorized\" };\n }\n const body = await readBody(event);\n const { image } = body as { image?: string };\n if (!image || !image.startsWith(\"data:image/\")) {\n setResponseStatus(event, 400);\n return { error: \"image (data URL) required\" };\n }\n await putSetting(`avatar:${session.email}`, { image });\n return { ok: true };\n }\n\n setResponseStatus(event, 405);\n return { error: \"Method not allowed\" };\n }),\n );\n\n if (!options.disableAppState) {\n // Compose draft routes (more specific path, mounted first so the\n // generic app-state matcher below doesn't shadow them). The framework\n // strips the mount prefix from event.url.pathname before calling us,\n // so we just see e.g. `/abc-123` (id) or `/` (collection root).\n getH3App(nitroApp).use(\n `${P}/application-state/compose`,\n defineEventHandler(async (event: H3Event) => {\n const id =\n (event.url?.pathname || \"\").replace(/^\\/+/, \"\").split(\"/\")[0] || \"\";\n if (event.context) {\n event.context.params = { ...event.context.params, id };\n }\n const method = getMethod(event);\n if (!id) {\n if (method === \"GET\") return listComposeDrafts(event);\n if (method === \"DELETE\") return deleteAllComposeDrafts(event);\n } else {\n if (method === \"GET\") return getComposeDraft(event);\n if (method === \"PUT\") return putComposeDraft(event);\n if (method === \"DELETE\") return deleteComposeDraft(event);\n }\n setResponseStatus(event, 405);\n return { error: \"Method not allowed\" };\n }),\n );\n\n // Generic application state — match `/application-state/:key` only\n // (NOT `/application-state/compose/...` which the handler above owns).\n getH3App(nitroApp).use(\n `${P}/application-state`,\n defineEventHandler(async (event: H3Event) => {\n const key =\n (event.url?.pathname || \"\").replace(/^\\/+/, \"\").split(\"/\")[0] || \"\";\n // Skip — compose handler above already handled it\n if (key === \"compose\" || key === \"\") return;\n if (event.context) {\n event.context.params = { ...event.context.params, key };\n }\n const method = getMethod(event);\n if (method === \"GET\") return getState(event);\n if (method === \"PUT\") return putState(event);\n if (method === \"DELETE\") return deleteState(event);\n setResponseStatus(event, 405);\n return { error: \"Method not allowed\" };\n }),\n );\n }\n };\n}\n\n/**\n * Default core routes plugin — mount with no configuration needed.\n *\n * Usage in templates:\n * ```ts\n * // server/plugins/core-routes.ts\n * export { defaultCoreRoutesPlugin as default } from \"@agent-native/core/server\";\n * ```\n */\nexport const defaultCoreRoutesPlugin: NitroPluginDef = createCoreRoutesPlugin();\n"]}