@agent-native/core 0.7.80 → 0.7.82
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/action.d.ts +8 -0
- package/dist/action.d.ts.map +1 -1
- package/dist/action.js +4 -0
- package/dist/action.js.map +1 -1
- package/dist/agent/production-agent.d.ts +12 -2
- package/dist/agent/production-agent.d.ts.map +1 -1
- package/dist/agent/production-agent.js +58 -20
- package/dist/agent/production-agent.js.map +1 -1
- package/dist/agent/run-manager.d.ts +8 -1
- package/dist/agent/run-manager.d.ts.map +1 -1
- package/dist/agent/run-manager.js +11 -12
- package/dist/agent/run-manager.js.map +1 -1
- package/dist/agent/thread-data-builder.d.ts.map +1 -1
- package/dist/agent/thread-data-builder.js +13 -17
- package/dist/agent/thread-data-builder.js.map +1 -1
- package/dist/agent/types.d.ts +4 -0
- package/dist/agent/types.d.ts.map +1 -1
- package/dist/agent/types.js.map +1 -1
- package/dist/application-state/handlers.d.ts.map +1 -1
- package/dist/application-state/handlers.js +3 -8
- package/dist/application-state/handlers.js.map +1 -1
- package/dist/application-state/script-helpers.d.ts +2 -4
- package/dist/application-state/script-helpers.d.ts.map +1 -1
- package/dist/application-state/script-helpers.js +10 -47
- package/dist/application-state/script-helpers.js.map +1 -1
- package/dist/cli/workspace-dev.js +78 -15
- package/dist/cli/workspace-dev.js.map +1 -1
- package/dist/client/AgentPanel.d.ts.map +1 -1
- package/dist/client/AgentPanel.js +6 -2
- package/dist/client/AgentPanel.js.map +1 -1
- package/dist/client/AssistantChat.d.ts +0 -15
- package/dist/client/AssistantChat.d.ts.map +1 -1
- package/dist/client/AssistantChat.js +69 -57
- package/dist/client/AssistantChat.js.map +1 -1
- package/dist/client/ConnectBuilderCard.d.ts +7 -1
- package/dist/client/ConnectBuilderCard.d.ts.map +1 -1
- package/dist/client/ConnectBuilderCard.js +46 -5
- package/dist/client/ConnectBuilderCard.js.map +1 -1
- package/dist/client/ErrorBoundary.d.ts.map +1 -1
- package/dist/client/ErrorBoundary.js +20 -5
- package/dist/client/ErrorBoundary.js.map +1 -1
- package/dist/client/FeedbackButton.d.ts.map +1 -1
- package/dist/client/FeedbackButton.js +5 -1
- package/dist/client/FeedbackButton.js.map +1 -1
- package/dist/client/agent-chat-adapter.d.ts.map +1 -1
- package/dist/client/agent-chat-adapter.js +303 -169
- package/dist/client/agent-chat-adapter.js.map +1 -1
- package/dist/client/builder-frame.d.ts +25 -0
- package/dist/client/builder-frame.d.ts.map +1 -1
- package/dist/client/builder-frame.js +40 -0
- package/dist/client/builder-frame.js.map +1 -1
- package/dist/client/composer/ComposerPlusMenu.d.ts.map +1 -1
- package/dist/client/composer/ComposerPlusMenu.js +7 -2
- package/dist/client/composer/ComposerPlusMenu.js.map +1 -1
- package/dist/client/composer/PastedTextChip.d.ts +9 -0
- package/dist/client/composer/PastedTextChip.d.ts.map +1 -0
- package/dist/client/composer/PastedTextChip.js +47 -0
- package/dist/client/composer/PastedTextChip.js.map +1 -0
- package/dist/client/composer/PromptComposer.d.ts +2 -2
- package/dist/client/composer/PromptComposer.d.ts.map +1 -1
- package/dist/client/composer/PromptComposer.js +32 -4
- package/dist/client/composer/PromptComposer.js.map +1 -1
- package/dist/client/composer/TiptapComposer.d.ts +11 -1
- package/dist/client/composer/TiptapComposer.d.ts.map +1 -1
- package/dist/client/composer/TiptapComposer.js +49 -16
- package/dist/client/composer/TiptapComposer.js.map +1 -1
- package/dist/client/composer/VoiceButton.d.ts.map +1 -1
- package/dist/client/composer/VoiceButton.js +5 -1
- package/dist/client/composer/VoiceButton.js.map +1 -1
- package/dist/client/composer/pasted-text.d.ts +6 -0
- package/dist/client/composer/pasted-text.d.ts.map +1 -0
- package/dist/client/composer/pasted-text.js +49 -0
- package/dist/client/composer/pasted-text.js.map +1 -0
- package/dist/client/composer/useVoiceDictation.d.ts +1 -0
- package/dist/client/composer/useVoiceDictation.d.ts.map +1 -1
- package/dist/client/composer/useVoiceDictation.js +18 -0
- package/dist/client/composer/useVoiceDictation.js.map +1 -1
- package/dist/client/index.d.ts +0 -1
- package/dist/client/index.d.ts.map +1 -1
- package/dist/client/index.js +0 -1
- package/dist/client/index.js.map +1 -1
- package/dist/client/integrations/IntegrationCard.d.ts.map +1 -1
- package/dist/client/integrations/IntegrationCard.js +14 -2
- package/dist/client/integrations/IntegrationCard.js.map +1 -1
- package/dist/client/integrations/IntegrationsPanel.d.ts.map +1 -1
- package/dist/client/integrations/IntegrationsPanel.js +19 -3
- package/dist/client/integrations/IntegrationsPanel.js.map +1 -1
- package/dist/client/notifications/NotificationsBell.d.ts.map +1 -1
- package/dist/client/notifications/NotificationsBell.js +4 -42
- package/dist/client/notifications/NotificationsBell.js.map +1 -1
- package/dist/client/org/OrgSwitcher.d.ts +4 -6
- package/dist/client/org/OrgSwitcher.d.ts.map +1 -1
- package/dist/client/org/OrgSwitcher.js +84 -74
- package/dist/client/org/OrgSwitcher.js.map +1 -1
- package/dist/client/org/TeamPage.d.ts.map +1 -1
- package/dist/client/org/TeamPage.js +3 -154
- package/dist/client/org/TeamPage.js.map +1 -1
- package/dist/client/resources/ResourcesPanel.d.ts.map +1 -1
- package/dist/client/resources/ResourcesPanel.js +13 -35
- package/dist/client/resources/ResourcesPanel.js.map +1 -1
- package/dist/client/settings/SettingsPanel.js +1 -1
- package/dist/client/settings/SettingsPanel.js.map +1 -1
- package/dist/client/settings/useBuilderStatus.d.ts +6 -0
- package/dist/client/settings/useBuilderStatus.d.ts.map +1 -1
- package/dist/client/settings/useBuilderStatus.js +3 -0
- package/dist/client/settings/useBuilderStatus.js.map +1 -1
- package/dist/client/sse-event-processor.d.ts +15 -1
- package/dist/client/sse-event-processor.d.ts.map +1 -1
- package/dist/client/sse-event-processor.js +58 -54
- package/dist/client/sse-event-processor.js.map +1 -1
- package/dist/client/tools/ToolEditor.d.ts.map +1 -1
- package/dist/client/tools/ToolEditor.js +34 -4
- package/dist/client/tools/ToolEditor.js.map +1 -1
- package/dist/client/tools/ToolViewer.d.ts.map +1 -1
- package/dist/client/tools/ToolViewer.js +20 -1
- package/dist/client/tools/ToolViewer.js.map +1 -1
- package/dist/client/tools/ToolsListPage.d.ts.map +1 -1
- package/dist/client/tools/ToolsListPage.js +2 -1
- package/dist/client/tools/ToolsListPage.js.map +1 -1
- package/dist/client/transcription/BuilderTranscriptionCta.js +1 -1
- package/dist/client/transcription/BuilderTranscriptionCta.js.map +1 -1
- package/dist/client/use-chat-threads.d.ts.map +1 -1
- package/dist/client/use-chat-threads.js +7 -2
- package/dist/client/use-chat-threads.js.map +1 -1
- package/dist/collab/client.d.ts.map +1 -1
- package/dist/collab/client.js +26 -7
- package/dist/collab/client.js.map +1 -1
- package/dist/integrations/a2a-continuations-store.d.ts.map +1 -1
- package/dist/integrations/a2a-continuations-store.js +20 -19
- package/dist/integrations/a2a-continuations-store.js.map +1 -1
- package/dist/jobs/scheduler.js +0 -4
- package/dist/jobs/scheduler.js.map +1 -1
- package/dist/oauth-tokens/store.d.ts +0 -4
- package/dist/oauth-tokens/store.d.ts.map +1 -1
- package/dist/oauth-tokens/store.js +3 -24
- package/dist/oauth-tokens/store.js.map +1 -1
- package/dist/observability/routes.d.ts.map +1 -1
- package/dist/observability/routes.js +1 -9
- package/dist/observability/routes.js.map +1 -1
- package/dist/onboarding/default-steps.js +1 -1
- package/dist/onboarding/default-steps.js.map +1 -1
- package/dist/onboarding/plugin.d.ts.map +1 -1
- package/dist/onboarding/plugin.js +1 -8
- package/dist/onboarding/plugin.js.map +1 -1
- package/dist/org/accept-pending.d.ts.map +1 -1
- package/dist/org/accept-pending.js +1 -2
- package/dist/org/accept-pending.js.map +1 -1
- package/dist/org/context.d.ts +0 -2
- package/dist/org/context.d.ts.map +1 -1
- package/dist/org/context.js +0 -5
- package/dist/org/context.js.map +1 -1
- package/dist/resources/script-helpers.d.ts +3 -4
- package/dist/resources/script-helpers.d.ts.map +1 -1
- package/dist/resources/script-helpers.js +8 -15
- package/dist/resources/script-helpers.js.map +1 -1
- package/dist/scripts/chat/search-chats.d.ts.map +1 -1
- package/dist/scripts/chat/search-chats.js +4 -4
- package/dist/scripts/chat/search-chats.js.map +1 -1
- package/dist/scripts/manage-agent-loop-settings.js +2 -2
- package/dist/scripts/manage-agent-loop-settings.js.map +1 -1
- package/dist/scripts/resources/delete-memory.d.ts.map +1 -1
- package/dist/scripts/resources/delete-memory.js +4 -2
- package/dist/scripts/resources/delete-memory.js.map +1 -1
- package/dist/scripts/resources/delete.d.ts.map +1 -1
- package/dist/scripts/resources/delete.js +11 -4
- package/dist/scripts/resources/delete.js.map +1 -1
- package/dist/scripts/resources/list.d.ts.map +1 -1
- package/dist/scripts/resources/list.js +5 -3
- package/dist/scripts/resources/list.js.map +1 -1
- package/dist/scripts/resources/migrate-learnings.d.ts.map +1 -1
- package/dist/scripts/resources/migrate-learnings.js +5 -2
- package/dist/scripts/resources/migrate-learnings.js.map +1 -1
- package/dist/scripts/resources/read.d.ts.map +1 -1
- package/dist/scripts/resources/read.js +4 -2
- package/dist/scripts/resources/read.js.map +1 -1
- package/dist/scripts/resources/save-memory.d.ts.map +1 -1
- package/dist/scripts/resources/save-memory.js +4 -2
- package/dist/scripts/resources/save-memory.js.map +1 -1
- package/dist/scripts/resources/write.d.ts.map +1 -1
- package/dist/scripts/resources/write.js +11 -4
- package/dist/scripts/resources/write.js.map +1 -1
- package/dist/secrets/onboarding.d.ts.map +1 -1
- package/dist/secrets/onboarding.js +1 -9
- package/dist/secrets/onboarding.js.map +1 -1
- package/dist/secrets/routes.d.ts.map +1 -1
- package/dist/secrets/routes.js +2 -7
- package/dist/secrets/routes.js.map +1 -1
- package/dist/server/action-discovery.d.ts.map +1 -1
- package/dist/server/action-discovery.js +4 -0
- package/dist/server/action-discovery.js.map +1 -1
- package/dist/server/agent-chat-plugin.d.ts +5 -0
- package/dist/server/agent-chat-plugin.d.ts.map +1 -1
- package/dist/server/agent-chat-plugin.js +81 -20
- package/dist/server/agent-chat-plugin.js.map +1 -1
- package/dist/server/agent-discovery.d.ts.map +1 -1
- package/dist/server/agent-discovery.js +5 -7
- package/dist/server/agent-discovery.js.map +1 -1
- package/dist/server/auth.d.ts +16 -21
- package/dist/server/auth.d.ts.map +1 -1
- package/dist/server/auth.js +45 -315
- package/dist/server/auth.js.map +1 -1
- package/dist/server/core-routes-plugin.d.ts.map +1 -1
- package/dist/server/core-routes-plugin.js +22 -13
- package/dist/server/core-routes-plugin.js.map +1 -1
- package/dist/server/credential-provider.d.ts.map +1 -1
- package/dist/server/credential-provider.js +1 -2
- package/dist/server/credential-provider.js.map +1 -1
- package/dist/server/google-oauth.d.ts +14 -2
- package/dist/server/google-oauth.d.ts.map +1 -1
- package/dist/server/google-oauth.js +17 -7
- package/dist/server/google-oauth.js.map +1 -1
- package/dist/server/index.d.ts +1 -1
- package/dist/server/index.d.ts.map +1 -1
- package/dist/server/index.js +1 -1
- package/dist/server/index.js.map +1 -1
- package/dist/server/oauth-helpers.d.ts +2 -4
- package/dist/server/oauth-helpers.d.ts.map +1 -1
- package/dist/server/oauth-helpers.js +2 -4
- package/dist/server/oauth-helpers.js.map +1 -1
- package/dist/server/transcribe-voice.d.ts.map +1 -1
- package/dist/server/transcribe-voice.js +2 -4
- package/dist/server/transcribe-voice.js.map +1 -1
- package/dist/triggers/dispatcher.d.ts.map +1 -1
- package/dist/triggers/dispatcher.js +0 -3
- package/dist/triggers/dispatcher.js.map +1 -1
- package/dist/vite/client.d.ts.map +1 -1
- package/dist/vite/client.js +6 -0
- package/dist/vite/client.js.map +1 -1
- package/docs/content/actions.md +1 -0
- package/docs/content/authentication.md +3 -20
- package/docs/content/creating-templates.md +1 -1
- package/docs/content/deployment.md +0 -1
- package/docs/content/security.md +0 -1
- package/docs/content/template-content.md +1 -1
- package/docs/content/template-starter.md +1 -1
- package/package.json +1 -1
- package/dist/client/dev-mode.d.ts +0 -14
- package/dist/client/dev-mode.d.ts.map +0 -1
- package/dist/client/dev-mode.js +0 -14
- package/dist/client/dev-mode.js.map +0 -1
- package/dist/server/local-migration.d.ts +0 -41
- package/dist/server/local-migration.d.ts.map +0 -1
- package/dist/server/local-migration.js +0 -235
- package/dist/server/local-migration.js.map +0 -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} from \"h3\";\nimport type { H3Event } from \"h3\";\nimport path from \"node:path\";\nimport { createPollHandler } from \"./poll.js\";\nimport { createSSEHandler } from \"./sse.js\";\nimport { upsertEnvFile } from \"./create-server.js\";\nimport type { EnvKeyConfig } from \"./create-server.js\";\nimport { readBody } from \"./h3-helpers.js\";\nimport {\n BUILDER_ENV_KEYS,\n buildBuilderCliAuthUrl,\n createBuilderBrowserCallbackErrorPage,\n createBuilderBrowserCallbackPage,\n getBuilderBranchProjectId,\n getBuilderBrowserStatusForEvent,\n isBuilderBranchingEnabled,\n resolveSafePreviewUrl,\n runBuilderAgent,\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, DEV_MODE_USER_EMAIL } from \"./auth.js\";\nimport { 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 {\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 isStoredEngineUsable,\n} from \"../agent/engine/registry.js\";\nimport { getOrgContext } from \"../org/context.js\";\nimport { isEnvVarWriteAllowed } from \"./env-var-writes.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\nfunction trackBuilderLifecycle(\n name: string,\n userEmail: string | undefined | null,\n properties: Record<string, unknown> = {},\n): void {\n if (!userEmail) return;\n track(\n name,\n {\n feature: \"builder\",\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 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\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 reqHeaders = (event.node?.req?.headers ?? {}) as Record<\n string,\n string | string[] | undefined\n >;\n const originRaw = reqHeaders[\"origin\"];\n const origin = Array.isArray(originRaw) ? originRaw[0] : originRaw;\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, createSSEHandler());\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 getH3App(nitroApp).use(\n `${P}/builder/status`,\n defineEventHandler(async (event) => {\n const envStatus = getBuilderBrowserStatusForEvent(event);\n const session = await getSession(event).catch(() => null);\n const userEmail = session?.email;\n\n // Env-managed mode: BUILDER_PRIVATE_KEY is set at the deployment\n // level, so every user shares the operator's Builder identity.\n // Skip per-user lookups entirely — the env key is authoritative\n // and the UI must hide the connect/disconnect controls.\n if (envStatus.envManaged) {\n return envStatus;\n }\n\n return runWithRequestContext({ userEmail }, async () => {\n // Per-user OAuth mode: read the user's app_secrets-stored creds.\n try {\n const { resolveBuilderCredentials } =\n await import(\"./credential-provider.js\");\n const creds = await resolveBuilderCredentials();\n if (creds.privateKey) {\n return {\n ...envStatus,\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 };\n }\n } catch {\n // Secrets table not ready — fall through to env status\n }\n // Surface a recent OAuth callback failure so the parent's polling\n // stops with a clear message instead of timing out at 5min. The\n // callback handler writes a `builder-connect-error:<email>` row\n // when `writeBuilderCredentials` throws; this read self-clears so\n // the message only fires once.\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 {\n ...envStatus,\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 // Honor legacy disconnect flag for existing deployments.\n try {\n const disconnected = await getSetting(\"builder-disconnected\");\n if (disconnected) {\n return {\n ...envStatus,\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 {\n ...envStatus,\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 = getOrigin(event).replace(/\\/+$/, \"\");\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 two-layer 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. Sec-Fetch-Site header — modern browsers stamp every request\n // with the navigation context. We only allow `same-origin` or\n // `none` (typed/bookmark/extension); cross-site / same-site are\n // rejected. The previous \"URL-embedded signed state\" was dropped\n // because Builder's /cli-auth strips arbitrary query params; this\n // replaces that defense with a browser-native one.\n // 2. 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 // check above, an attacker could prime the row from cross-site\n // and then trick the victim into hitting a callback URL with\n // attacker-controlled p-key/api-key, hijacking the victim's\n // account. With the check, the attacker can't prime the row.\n getH3App(nitroApp).use(\n `${P}/builder/connect`,\n defineEventHandler(async (event) => {\n const session = await getSession(event).catch(() => null);\n if (!session?.email) {\n setResponseStatus(event, 401);\n return { error: \"Authentication required\" };\n }\n\n // Env-managed mode: per-user OAuth is disabled because the operator\n // already provided a deploy-level Builder identity. Reject the\n // connect attempt — any per-user keys we wrote would be ignored\n // by the resolver, so completing the OAuth flow would be a no-op\n // that misleads the user about the resulting connection state.\n const { isBuilderEnvManaged } =\n await import(\"./credential-provider.js\");\n if (isBuilderEnvManaged()) {\n setResponseStatus(event, 409);\n return {\n error:\n \"Builder is managed by the deployment (BUILDER_PRIVATE_KEY is set). Per-user connect is disabled.\",\n envManaged: true,\n };\n }\n\n // Same-origin gate. Sec-Fetch-Site is the primary signal; fall\n // back to Origin/Referer for older browsers. Reject any context\n // that isn't this exact app's origin — including same-site\n // subdomains, since a compromised subdomain shouldn't be able\n // to mint Builder credential writes for users of the main app.\n if (!isSameOriginConnect(event)) {\n trackBuilderLifecycle(\"builder connect failed\", session.email, {\n reason: \"cross_origin\",\n stage: \"connect\",\n });\n setResponseStatus(event, 403);\n return { error: \"Cross-origin connect requests are not allowed\" };\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:${session.email}`);\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:${session.email}`, {\n expiresAt: Date.now() + BUILDER_CONNECT_PENDING_TTL_MS,\n });\n } catch (err) {\n trackBuilderLifecycle(\"builder connect failed\", session.email, {\n reason: \"pending_storage_unavailable\",\n stage: \"connect\",\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:${session.email}`, {\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 trackBuilderLifecycle(\"builder connect started\", session.email, {\n stage: \"connect\",\n });\n // Build the cli-auth URL without embedding state in redirect_url:\n // Builder's /cli-auth appends params directly to redirect_url and\n // does not preserve any pre-existing query string we put there.\n const cliAuthUrl = buildBuilderCliAuthUrl(getOrigin(event), null);\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 // `local@localhost` is the dev/local-mode bypass session. In a\n // hosted production deploy it means either AUTH_MODE=local was\n // misconfigured or AUTH_DISABLED=true is in use — either way the\n // caller isn't a named user we should spend a Builder private key\n // on. Allow it only when the environment explicitly opts into\n // local mode (dev, tests, or AUTH_MODE=local).\n if (\n session.email === DEV_MODE_USER_EMAIL &&\n process.env.NODE_ENV === \"production\" &&\n process.env.AUTH_MODE !== \"local\"\n ) {\n setResponseStatus(event, 401);\n return { error: \"A signed-in user is required to run Builder\" };\n }\n const userEmail = session.email;\n if (!isBuilderBranchingEnabled()) {\n setResponseStatus(event, 403);\n return {\n error:\n \"Builder branch creation is not enabled for this deployment. Set ENABLE_BUILDER=true or BUILDER_BRANCH_PROJECT_ID.\",\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 }, async () => {\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: getBuilderBranchProjectId(),\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 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 // Session blocks anonymous callers; the pending-row check below\n // (combined with the same-origin gate on /builder/connect) blocks\n // CSRF. Session cookies are SameSite=None;Secure for the iframe\n // editor, so they ride along on attacker-crafted top-level links —\n // the SameSite=None concession is exactly why the connect flow\n // can't rely on session-cookie identity alone.\n const session = await getSession(event).catch(() => null);\n if (!session?.email) {\n setResponseStatus(event, 401);\n return { error: \"Authentication required\" };\n }\n\n const requestUrl = new URL(\n `${event.url?.pathname || \"/\"}${event.url?.search || \"\"}`,\n getOrigin(event),\n );\n\n // Verify and consume the server-side pending-connect row that the\n // /builder/connect route stored. This replaces the old URL-embedded\n // signed CSRF state (_an_state) which Builder's /cli-auth page was\n // stripping from the redirect_url query string.\n //\n // The delete must succeed before we proceed — 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 = false;\n let pendingError: string | null = null;\n try {\n const pending = (await getSetting(\n `builder-pending-connect:${session.email}`,\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:${session.email}`);\n pendingValid = true;\n } catch (err) {\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 } catch {\n // DB temporarily unavailable — treat as missing.\n }\n\n if (pendingError) {\n trackBuilderLifecycle(\"builder connect failed\", session.email, {\n reason: \"pending_consume_storage_error\",\n stage: \"callback\",\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:${session.email}`, {\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 trackBuilderLifecycle(\"builder connect failed\", session.email, {\n reason: \"missing_pending_connect\",\n stage: \"callback\",\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:${session.email}`, {\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 trackBuilderLifecycle(\"builder connect failed\", session.email, {\n reason: \"missing_credentials\",\n stage: \"callback\",\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:${session.email}`, {\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 await writeBuilderCredentials(session.email, {\n privateKey,\n publicKey,\n userId,\n orgName,\n orgKind,\n });\n } catch (err) {\n writeError = (err as Error)?.message ?? String(err);\n console.error(\n \"[builder] Failed to persist per-user credentials:\",\n writeError,\n );\n }\n\n if (writeError) {\n trackBuilderLifecycle(\"builder connect failed\", session.email, {\n reason: \"credential_write_failed\",\n stage: \"callback\",\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:${session.email}`, {\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:${session.email}`);\n } catch {\n // No prior error row — fine\n }\n\n const previewUrl = resolveSafePreviewUrl(\n requestUrl.searchParams.get(\"preview-url\"),\n event,\n );\n trackBuilderLifecycle(\"builder connect succeeded\", session.email, {\n stage: \"callback\",\n has_preview_url: Boolean(previewUrl),\n org_kind: orgKind || undefined,\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 // Builder credentials in app_secrets. In env-managed mode (deploy-level\n // BUILDER_PRIVATE_KEY set) disconnection is operator-controlled — this\n // endpoint refuses with 409 so a stale UI button can't pretend to\n // disconnect a deploy-level identity it doesn't own.\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 { isBuilderEnvManaged, deleteBuilderCredentials } =\n await import(\"./credential-provider.js\");\n if (isBuilderEnvManaged()) {\n setResponseStatus(event, 409);\n return {\n ok: false,\n error:\n \"Builder is managed by deploy-level BUILDER_PRIVATE_KEY. To disconnect, the operator must remove the env var.\",\n envManaged: true,\n };\n }\n\n // Delete per-user Builder credentials from app_secrets.\n try {\n await deleteBuilderCredentials(session.email);\n } catch (err) {\n trackBuilderLifecycle(\"builder disconnect failed\", session.email, {\n reason: \"credential_delete_failed\",\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 trackBuilderLifecycle(\"builder disconnect succeeded\", session.email);\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(() =>\n envKeys.map((cfg) => ({\n key: cfg.key,\n label: cfg.label,\n required: cfg.required ?? false,\n configured: !!process.env[cfg.key],\n ...(cfg.helpText ? { helpText: cfg.helpText } : {}),\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 () => {\n try {\n const stored = (await getSetting(\"agent-engine\")) as {\n engine?: string;\n } | null;\n if (isAgentEngineSettingConfigured(stored)) {\n return {\n configured: true,\n engine: (stored as { engine: string }).engine,\n source: \"settings\" as const,\n };\n }\n if (stored && typeof stored.engine === \"string\") {\n const entry = getAgentEngineEntry(stored.engine);\n if (entry && isStoredEngineUsable(stored, entry)) {\n return {\n configured: true,\n engine: stored.engine,\n source: \"env\" as const,\n envVar: entry.requiredEnvVars[0],\n };\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 detectEngineFromUserSecrets();\n if (detectedFromUser) {\n return {\n configured: true,\n engine: detectedFromUser.name,\n source: \"app_secrets\" as const,\n envVar: detectedFromUser.requiredEnvVars[0],\n };\n }\n const detected = detectEngineFromEnv();\n if (detected) {\n return {\n configured: true,\n engine: detected.name,\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 } = await import(\"../usage/store.js\");\n return getUsageSummary({\n ownerEmail: session.email,\n sinceMs: Date.now() - sinceDays * 86_400_000,\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 // ─── Tools (mini-app runtime + proxy) ───────────────────────────────\n try {\n const { ensureToolsTables, registerToolsShareable } =\n await import(\"../tools/store.js\");\n const { createToolsHandler } = await import(\"../tools/routes.js\");\n ensureToolsTables().catch(() => {});\n registerToolsShareable();\n getH3App(nitroApp).use(`${P}/tools`, createToolsHandler());\n\n // Tool extension-point slots — sub-system of tools.\n const { ensureSlotTables } = await import(\"../tools/slots/store.js\");\n const { createSlotsHandler } = await import(\"../tools/slots/routes.js\");\n ensureSlotTables().catch(() => {});\n getH3App(nitroApp).use(`${P}/slots`, createSlotsHandler());\n } catch {\n // Tools module not available — skip\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.url?.pathname || \"\")\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 (pathname === \"fire-test\" && method === \"POST\") {\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} from \"h3\";\nimport type { H3Event } from \"h3\";\nimport path from \"node:path\";\nimport { createPollHandler } from \"./poll.js\";\nimport { createSSEHandler } from \"./sse.js\";\nimport { upsertEnvFile } from \"./create-server.js\";\nimport type { EnvKeyConfig } from \"./create-server.js\";\nimport { readBody } from \"./h3-helpers.js\";\nimport {\n BUILDER_ENV_KEYS,\n buildBuilderCliAuthUrl,\n createBuilderBrowserCallbackErrorPage,\n createBuilderBrowserCallbackPage,\n getBuilderBranchProjectId,\n getBuilderBrowserStatusForEvent,\n isBuilderBranchingEnabled,\n resolveSafePreviewUrl,\n runBuilderAgent,\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 { 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 {\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 isStoredEngineUsable,\n} from \"../agent/engine/registry.js\";\nimport { getOrgContext } from \"../org/context.js\";\nimport { isEnvVarWriteAllowed } from \"./env-var-writes.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\nfunction trackBuilderLifecycle(\n name: string,\n userEmail: string | undefined | null,\n properties: Record<string, unknown> = {},\n): void {\n if (!userEmail) return;\n track(\n name,\n {\n feature: \"builder\",\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 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\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 reqHeaders = (event.node?.req?.headers ?? {}) as Record<\n string,\n string | string[] | undefined\n >;\n const originRaw = reqHeaders[\"origin\"];\n const origin = Array.isArray(originRaw) ? originRaw[0] : originRaw;\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, createSSEHandler());\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 getH3App(nitroApp).use(\n `${P}/builder/status`,\n defineEventHandler(async (event) => {\n const envStatus = getBuilderBrowserStatusForEvent(event);\n const session = await getSession(event).catch(() => null);\n const userEmail = session?.email;\n\n // Env-managed mode: BUILDER_PRIVATE_KEY is set at the deployment\n // level, so every user shares the operator's Builder identity.\n // Skip per-user lookups entirely — the env key is authoritative\n // and the UI must hide the connect/disconnect controls.\n if (envStatus.envManaged) {\n return envStatus;\n }\n\n return runWithRequestContext({ userEmail }, async () => {\n // Per-user OAuth mode: read the user's app_secrets-stored creds.\n try {\n const { resolveBuilderCredentials } =\n await import(\"./credential-provider.js\");\n const creds = await resolveBuilderCredentials();\n if (creds.privateKey) {\n return {\n ...envStatus,\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 };\n }\n } catch {\n // Secrets table not ready — fall through to env status\n }\n // Surface a recent OAuth callback failure so the parent's polling\n // stops with a clear message instead of timing out at 5min. The\n // callback handler writes a `builder-connect-error:<email>` row\n // when `writeBuilderCredentials` throws; this read self-clears so\n // the message only fires once.\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 {\n ...envStatus,\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 // Honor legacy disconnect flag for existing deployments.\n try {\n const disconnected = await getSetting(\"builder-disconnected\");\n if (disconnected) {\n return {\n ...envStatus,\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 {\n ...envStatus,\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 = getOrigin(event).replace(/\\/+$/, \"\");\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 two-layer 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. Sec-Fetch-Site header — modern browsers stamp every request\n // with the navigation context. We only allow `same-origin` or\n // `none` (typed/bookmark/extension); cross-site / same-site are\n // rejected. The previous \"URL-embedded signed state\" was dropped\n // because Builder's /cli-auth strips arbitrary query params; this\n // replaces that defense with a browser-native one.\n // 2. 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 // check above, an attacker could prime the row from cross-site\n // and then trick the victim into hitting a callback URL with\n // attacker-controlled p-key/api-key, hijacking the victim's\n // account. With the check, the attacker can't prime the row.\n getH3App(nitroApp).use(\n `${P}/builder/connect`,\n defineEventHandler(async (event) => {\n const session = await getSession(event).catch(() => null);\n if (!session?.email) {\n setResponseStatus(event, 401);\n return { error: \"Authentication required\" };\n }\n\n // Env-managed mode: per-user OAuth is disabled because the operator\n // already provided a deploy-level Builder identity. Reject the\n // connect attempt — any per-user keys we wrote would be ignored\n // by the resolver, so completing the OAuth flow would be a no-op\n // that misleads the user about the resulting connection state.\n const { isBuilderEnvManaged } =\n await import(\"./credential-provider.js\");\n if (isBuilderEnvManaged()) {\n setResponseStatus(event, 409);\n return {\n error:\n \"Builder is managed by the deployment (BUILDER_PRIVATE_KEY is set). Per-user connect is disabled.\",\n envManaged: true,\n };\n }\n\n // Same-origin gate. Sec-Fetch-Site is the primary signal; fall\n // back to Origin/Referer for older browsers. Reject any context\n // that isn't this exact app's origin — including same-site\n // subdomains, since a compromised subdomain shouldn't be able\n // to mint Builder credential writes for users of the main app.\n if (!isSameOriginConnect(event)) {\n trackBuilderLifecycle(\"builder connect failed\", session.email, {\n reason: \"cross_origin\",\n stage: \"connect\",\n });\n setResponseStatus(event, 403);\n return { error: \"Cross-origin connect requests are not allowed\" };\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:${session.email}`);\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:${session.email}`, {\n expiresAt: Date.now() + BUILDER_CONNECT_PENDING_TTL_MS,\n });\n } catch (err) {\n trackBuilderLifecycle(\"builder connect failed\", session.email, {\n reason: \"pending_storage_unavailable\",\n stage: \"connect\",\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:${session.email}`, {\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 trackBuilderLifecycle(\"builder connect started\", session.email, {\n stage: \"connect\",\n });\n // Build the cli-auth URL without embedding state in redirect_url:\n // Builder's /cli-auth appends params directly to redirect_url and\n // does not preserve any pre-existing query string we put there.\n const cliAuthUrl = buildBuilderCliAuthUrl(getOrigin(event), null);\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 if (!isBuilderBranchingEnabled()) {\n setResponseStatus(event, 403);\n return {\n error:\n \"Builder branch creation is not enabled for this deployment. Set ENABLE_BUILDER=true or BUILDER_BRANCH_PROJECT_ID.\",\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 }, async () => {\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: getBuilderBranchProjectId(),\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 // deploy hasn't been opted into Builder branch creation (no\n // ENABLE_BUILDER / BUILDER_BRANCH_PROJECT_ID) — instead of the raw 403\n // from /builder/run, the card surfaces a \"coming soon\" CTA that POSTs\n // here. Recorded as a tracking event so PostHog/Mixpanel/etc. capture\n // 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 trackBuilderLifecycle(\"builder branch waitlist joined\", session.email, {\n stage: \"waitlist\",\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 // Session blocks anonymous callers; the pending-row check below\n // (combined with the same-origin gate on /builder/connect) blocks\n // CSRF. Session cookies are SameSite=None;Secure for the iframe\n // editor, so they ride along on attacker-crafted top-level links —\n // the SameSite=None concession is exactly why the connect flow\n // can't rely on session-cookie identity alone.\n const session = await getSession(event).catch(() => null);\n if (!session?.email) {\n setResponseStatus(event, 401);\n return { error: \"Authentication required\" };\n }\n\n const requestUrl = new URL(\n `${event.url?.pathname || \"/\"}${event.url?.search || \"\"}`,\n getOrigin(event),\n );\n\n // Verify and consume the server-side pending-connect row that the\n // /builder/connect route stored. This replaces the old URL-embedded\n // signed CSRF state (_an_state) which Builder's /cli-auth page was\n // stripping from the redirect_url query string.\n //\n // The delete must succeed before we proceed — 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 = false;\n let pendingError: string | null = null;\n try {\n const pending = (await getSetting(\n `builder-pending-connect:${session.email}`,\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:${session.email}`);\n pendingValid = true;\n } catch (err) {\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 } catch {\n // DB temporarily unavailable — treat as missing.\n }\n\n if (pendingError) {\n trackBuilderLifecycle(\"builder connect failed\", session.email, {\n reason: \"pending_consume_storage_error\",\n stage: \"callback\",\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:${session.email}`, {\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 trackBuilderLifecycle(\"builder connect failed\", session.email, {\n reason: \"missing_pending_connect\",\n stage: \"callback\",\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:${session.email}`, {\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 trackBuilderLifecycle(\"builder connect failed\", session.email, {\n reason: \"missing_credentials\",\n stage: \"callback\",\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:${session.email}`, {\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 await writeBuilderCredentials(session.email, {\n privateKey,\n publicKey,\n userId,\n orgName,\n orgKind,\n });\n } catch (err) {\n writeError = (err as Error)?.message ?? String(err);\n console.error(\n \"[builder] Failed to persist per-user credentials:\",\n writeError,\n );\n }\n\n if (writeError) {\n trackBuilderLifecycle(\"builder connect failed\", session.email, {\n reason: \"credential_write_failed\",\n stage: \"callback\",\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:${session.email}`, {\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:${session.email}`);\n } catch {\n // No prior error row — fine\n }\n\n const previewUrl = resolveSafePreviewUrl(\n requestUrl.searchParams.get(\"preview-url\"),\n event,\n );\n trackBuilderLifecycle(\"builder connect succeeded\", session.email, {\n stage: \"callback\",\n has_preview_url: Boolean(previewUrl),\n org_kind: orgKind || undefined,\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 // Builder credentials in app_secrets. In env-managed mode (deploy-level\n // BUILDER_PRIVATE_KEY set) disconnection is operator-controlled — this\n // endpoint refuses with 409 so a stale UI button can't pretend to\n // disconnect a deploy-level identity it doesn't own.\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 { isBuilderEnvManaged, deleteBuilderCredentials } =\n await import(\"./credential-provider.js\");\n if (isBuilderEnvManaged()) {\n setResponseStatus(event, 409);\n return {\n ok: false,\n error:\n \"Builder is managed by deploy-level BUILDER_PRIVATE_KEY. To disconnect, the operator must remove the env var.\",\n envManaged: true,\n };\n }\n\n // Delete per-user Builder credentials from app_secrets.\n try {\n await deleteBuilderCredentials(session.email);\n } catch (err) {\n trackBuilderLifecycle(\"builder disconnect failed\", session.email, {\n reason: \"credential_delete_failed\",\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 trackBuilderLifecycle(\"builder disconnect succeeded\", session.email);\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(() =>\n envKeys.map((cfg) => ({\n key: cfg.key,\n label: cfg.label,\n required: cfg.required ?? false,\n configured: !!process.env[cfg.key],\n ...(cfg.helpText ? { helpText: cfg.helpText } : {}),\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 () => {\n try {\n const stored = (await getSetting(\"agent-engine\")) as {\n engine?: string;\n } | null;\n if (isAgentEngineSettingConfigured(stored)) {\n return {\n configured: true,\n engine: (stored as { engine: string }).engine,\n source: \"settings\" as const,\n };\n }\n if (stored && typeof stored.engine === \"string\") {\n const entry = getAgentEngineEntry(stored.engine);\n if (entry && isStoredEngineUsable(stored, entry)) {\n return {\n configured: true,\n engine: stored.engine,\n source: \"env\" as const,\n envVar: entry.requiredEnvVars[0],\n };\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 detectEngineFromUserSecrets();\n if (detectedFromUser) {\n return {\n configured: true,\n engine: detectedFromUser.name,\n source: \"app_secrets\" as const,\n envVar: detectedFromUser.requiredEnvVars[0],\n };\n }\n const detected = detectEngineFromEnv();\n if (detected) {\n return {\n configured: true,\n engine: detected.name,\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 } = await import(\"../usage/store.js\");\n return getUsageSummary({\n ownerEmail: session.email,\n sinceMs: Date.now() - sinceDays * 86_400_000,\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 // ─── Tools (mini-app runtime + proxy) ───────────────────────────────\n try {\n const { ensureToolsTables, registerToolsShareable } =\n await import(\"../tools/store.js\");\n const { createToolsHandler } = await import(\"../tools/routes.js\");\n ensureToolsTables().catch(() => {});\n registerToolsShareable();\n getH3App(nitroApp).use(`${P}/tools`, createToolsHandler());\n\n // Tool extension-point slots — sub-system of tools.\n const { ensureSlotTables } = await import(\"../tools/slots/store.js\");\n const { createSlotsHandler } = await import(\"../tools/slots/routes.js\");\n ensureSlotTables().catch(() => {});\n getH3App(nitroApp).use(`${P}/slots`, createSlotsHandler());\n } catch {\n // Tools module not available — skip\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.url?.pathname || \"\")\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 (pathname === \"fire-test\" && method === \"POST\") {\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"]}
|