@agent-native/core 0.51.14 → 0.52.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (64) hide show
  1. package/README.md +3 -3
  2. package/dist/cli/connect.d.ts +4 -3
  3. package/dist/cli/connect.d.ts.map +1 -1
  4. package/dist/cli/connect.js +67 -26
  5. package/dist/cli/connect.js.map +1 -1
  6. package/dist/cli/mcp-config-writers.d.ts +20 -13
  7. package/dist/cli/mcp-config-writers.d.ts.map +1 -1
  8. package/dist/cli/mcp-config-writers.js +152 -13
  9. package/dist/cli/mcp-config-writers.js.map +1 -1
  10. package/dist/cli/mcp.d.ts +2 -2
  11. package/dist/cli/mcp.d.ts.map +1 -1
  12. package/dist/cli/mcp.js +41 -193
  13. package/dist/cli/mcp.js.map +1 -1
  14. package/dist/cli/plan-local.d.ts +13 -1
  15. package/dist/cli/plan-local.d.ts.map +1 -1
  16. package/dist/cli/plan-local.js +62 -8
  17. package/dist/cli/plan-local.js.map +1 -1
  18. package/dist/cli/recap.d.ts.map +1 -1
  19. package/dist/cli/recap.js +1 -1
  20. package/dist/cli/recap.js.map +1 -1
  21. package/dist/cli/skills.d.ts +13 -6
  22. package/dist/cli/skills.d.ts.map +1 -1
  23. package/dist/cli/skills.js +224 -59
  24. package/dist/cli/skills.js.map +1 -1
  25. package/dist/client/agent-engine-key.d.ts +6 -4
  26. package/dist/client/agent-engine-key.d.ts.map +1 -1
  27. package/dist/client/agent-engine-key.js +9 -6
  28. package/dist/client/agent-engine-key.js.map +1 -1
  29. package/dist/client/chat/run-recovery.js +1 -1
  30. package/dist/client/chat/run-recovery.js.map +1 -1
  31. package/dist/client/settings/SettingsPanel.d.ts.map +1 -1
  32. package/dist/client/settings/SettingsPanel.js +7 -14
  33. package/dist/client/settings/SettingsPanel.js.map +1 -1
  34. package/dist/coding-tools/run-code.d.ts +7 -0
  35. package/dist/coding-tools/run-code.d.ts.map +1 -1
  36. package/dist/coding-tools/run-code.js +21 -106
  37. package/dist/coding-tools/run-code.js.map +1 -1
  38. package/dist/coding-tools/sandbox/adapter.d.ts +79 -0
  39. package/dist/coding-tools/sandbox/adapter.d.ts.map +1 -0
  40. package/dist/coding-tools/sandbox/adapter.js +24 -0
  41. package/dist/coding-tools/sandbox/adapter.js.map +1 -0
  42. package/dist/coding-tools/sandbox/index.d.ts +51 -0
  43. package/dist/coding-tools/sandbox/index.d.ts.map +1 -0
  44. package/dist/coding-tools/sandbox/index.js +79 -0
  45. package/dist/coding-tools/sandbox/index.js.map +1 -0
  46. package/dist/coding-tools/sandbox/local-child-process-adapter.d.ts +24 -0
  47. package/dist/coding-tools/sandbox/local-child-process-adapter.d.ts.map +1 -0
  48. package/dist/coding-tools/sandbox/local-child-process-adapter.js +141 -0
  49. package/dist/coding-tools/sandbox/local-child-process-adapter.js.map +1 -0
  50. package/dist/server/agent-engine-api-key-route.d.ts +37 -0
  51. package/dist/server/agent-engine-api-key-route.d.ts.map +1 -0
  52. package/dist/server/agent-engine-api-key-route.js +105 -0
  53. package/dist/server/agent-engine-api-key-route.js.map +1 -0
  54. package/dist/server/core-routes-plugin.d.ts.map +1 -1
  55. package/dist/server/core-routes-plugin.js +10 -6
  56. package/dist/server/core-routes-plugin.js.map +1 -1
  57. package/dist/server/create-server.js +1 -1
  58. package/dist/server/create-server.js.map +1 -1
  59. package/dist/templates/workspace-core/.agents/skills/external-agents/SKILL.md +7 -4
  60. package/docs/content/plan-plugin.md +5 -4
  61. package/docs/content/pr-visual-recap.md +1 -1
  62. package/docs/content/template-plan.md +1 -1
  63. package/package.json +1 -1
  64. package/src/templates/workspace-core/.agents/skills/external-agents/SKILL.md +7 -4
@@ -1 +1 @@
1
- {"version":3,"file":"SettingsPanel.js","sourceRoot":"","sources":["../../../src/client/settings/SettingsPanel.tsx"],"names":[],"mappings":"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","sourcesContent":["import { agentNativePath } from \"../api-path.js\";\nimport React, {\n Suspense,\n lazy,\n useState,\n useEffect,\n useCallback,\n useRef,\n} from \"react\";\nimport * as SelectPrimitive from \"@radix-ui/react-select\";\nimport {\n IconChevronDown,\n IconCheck,\n IconExternalLink,\n IconBrain,\n IconBrowser,\n IconGitBranch,\n IconCloud,\n IconDatabase,\n IconShield,\n IconPlugConnected,\n IconTopologyRing2,\n IconLoader2,\n IconUpload,\n IconCoin,\n IconMail,\n IconKey,\n IconMicrophone,\n IconEyeOff,\n IconBolt,\n IconGauge,\n IconUserCircle,\n IconApps,\n} from \"@tabler/icons-react\";\nimport { SettingsSection } from \"./SettingsSection.js\";\nimport {\n type BuilderConnectFlow,\n useBuilderConnectFlow,\n useBuilderStatus,\n} from \"./useBuilderStatus.js\";\nimport { BuilderBMark } from \"../builder-mark.js\";\nimport { AgentsSection } from \"./AgentsSection.js\";\nimport { UsageSection } from \"./UsageSection.js\";\nimport { SecretsSection } from \"./SecretsSection.js\";\nimport { VoiceTranscriptionSection } from \"./VoiceTranscriptionSection.js\";\nimport { DemoModeSection } from \"./DemoModeSection.js\";\nimport { AutomationsSection } from \"./AutomationsSection.js\";\nimport { PROVIDER_ENV_PLACEHOLDERS } from \"../../agent/engine/provider-env-vars.js\";\nimport {\n Tooltip,\n TooltipContent,\n TooltipTrigger,\n} from \"../components/ui/tooltip.js\";\nimport { useSession } from \"../use-session.js\";\nimport { uploadAvatar, useAvatarUrl } from \"../use-avatar.js\";\nimport { callAction } from \"../use-action.js\";\n\nconst IntegrationsPanel = lazy(() =>\n import(\"../integrations/IntegrationsPanel.js\").then((m) => ({\n default: m.IntegrationsPanel,\n })),\n);\n\n// ─── Shared helpers ─────────────────────────────────────────────────────────\n\nfunction SettingsSkeleton({ lines = 3 }: { lines?: number }) {\n return (\n <div className=\"space-y-3 animate-pulse\">\n {Array.from({ length: lines }, (_, i) => (\n <div key={i} className=\"space-y-1.5\">\n <div\n className=\"h-3 rounded bg-muted-foreground/10\"\n style={{ width: i === 0 ? \"30%\" : i === 1 ? \"100%\" : \"60%\" }}\n />\n {i < 2 && (\n <div className=\"h-9 rounded-md border border-border bg-muted-foreground/5\" />\n )}\n </div>\n ))}\n </div>\n );\n}\n\ninterface SettingsSelectOption {\n value: string;\n label: string;\n description?: string;\n}\n\nconst CONTROL_STYLE = {\n fontSize: 12,\n lineHeight: 1,\n} satisfies React.CSSProperties;\n\nfunction SettingsSelect({\n label,\n labelAdornment,\n value,\n options,\n onValueChange,\n}: {\n label: string;\n labelAdornment?: React.ReactNode;\n value: string;\n options: SettingsSelectOption[];\n onValueChange: (value: string) => void;\n}) {\n const selected = options.find((option) => option.value === value);\n\n return (\n <div className=\"space-y-1.5\">\n <div className=\"flex items-center justify-between\">\n <p className=\"text-[12px] font-medium text-foreground\">{label}</p>\n {labelAdornment}\n </div>\n <SelectPrimitive.Root value={value} onValueChange={onValueChange}>\n <SelectPrimitive.Trigger\n className=\"flex h-9 w-full items-center justify-between rounded-md border border-border bg-background px-3 text-left text-[12px] text-foreground outline-none transition-colors hover:bg-accent/40 data-[placeholder]:text-muted-foreground\"\n aria-label={label}\n style={CONTROL_STYLE}\n >\n <SelectPrimitive.Value>\n {selected?.label ?? value}\n </SelectPrimitive.Value>\n <SelectPrimitive.Icon asChild>\n <IconChevronDown size={14} className=\"text-muted-foreground\" />\n </SelectPrimitive.Icon>\n </SelectPrimitive.Trigger>\n <SelectPrimitive.Portal>\n <SelectPrimitive.Content\n position=\"popper\"\n sideOffset={6}\n className=\"z-[9999] w-[var(--radix-select-trigger-width)] overflow-hidden rounded-lg border border-border bg-popover shadow-lg\"\n >\n <SelectPrimitive.Viewport className=\"p-1\">\n {options.map((option) => (\n <SelectPrimitive.Item\n key={option.value}\n value={option.value}\n className=\"relative flex w-full cursor-pointer select-none items-start gap-2 rounded-md px-8 py-2.5 text-[12px] outline-none data-[highlighted]:bg-accent/60 data-[state=checked]:bg-accent/40\"\n style={CONTROL_STYLE}\n >\n <span className=\"absolute left-2 top-2.5 flex h-4 w-4 items-center justify-center text-muted-foreground\">\n <SelectPrimitive.ItemIndicator>\n <IconCheck size={14} />\n </SelectPrimitive.ItemIndicator>\n </span>\n <div className=\"flex min-w-0 flex-col\">\n <SelectPrimitive.ItemText>\n <span className=\"text-foreground\">{option.label}</span>\n </SelectPrimitive.ItemText>\n {option.description ? (\n <span className=\"mt-0.5 text-[11px] leading-relaxed text-muted-foreground\">\n {option.description}\n </span>\n ) : null}\n </div>\n </SelectPrimitive.Item>\n ))}\n </SelectPrimitive.Viewport>\n </SelectPrimitive.Content>\n </SelectPrimitive.Portal>\n </SelectPrimitive.Root>\n </div>\n );\n}\n\n// ─── Disconnect button for the Builder card's connected state ───────────────\n//\n// Two-step confirmation: first click arms the button (\"Confirm?\"), second\n// click actually disconnects. Arm auto-reverts after 4s of idle so a user\n// who wandered off doesn't come back to a disconnect waiting for them.\n//\n// Hits /_agent-native/builder/disconnect which removes request-scoped\n// Builder credentials from app_secrets. Deployment env credentials are left\n// alone and remain as fallback. On success we dispatch\n// `agent-engine:configured-changed` so dependent cards refresh inline.\nfunction DisconnectBuilderButton() {\n const { status } = useBuilderStatus();\n const [phase, setPhase] = useState<\"idle\" | \"armed\" | \"busy\">(\"idle\");\n const [err, setErr] = useState<string | null>(null);\n const armedTimerRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n\n const clearArmedTimer = useCallback(() => {\n if (armedTimerRef.current) {\n clearTimeout(armedTimerRef.current);\n armedTimerRef.current = null;\n }\n }, []);\n\n useEffect(() => {\n return () => clearArmedTimer();\n }, [clearArmedTimer]);\n\n const performDisconnect = useCallback(async () => {\n setPhase(\"busy\");\n setErr(null);\n clearArmedTimer();\n try {\n const res = await fetch(\n agentNativePath(\"/_agent-native/builder/disconnect\"),\n {\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n },\n );\n // Parse defensively — a nitro 404 fallback returns HTML, not JSON,\n // and res.json() on that would throw.\n const text = await res.text();\n let body: {\n ok?: boolean;\n error?: string;\n warnings?: Record<string, string>;\n } = {};\n if (text) {\n try {\n body = JSON.parse(text);\n } catch {\n // Non-JSON response — likely a 404/HTML fallback.\n }\n }\n if (!res.ok) {\n throw new Error(\n body.error ||\n `Failed (${res.status}). Is your dev server up to date?`,\n );\n }\n if (body.ok !== true) {\n throw new Error(body.error || \"Disconnect didn't confirm ok\");\n }\n if (body.warnings && Object.keys(body.warnings).length > 0) {\n // Disconnect flag persisted (we only reach here when ok:true), so\n // the user IS disconnected — but some ancillary cleanup failed.\n // Log so it's visible during dev; don't block the success path.\n console.warn(\n \"[builder-disconnect] completed with warnings:\",\n body.warnings,\n );\n }\n window.dispatchEvent(new CustomEvent(\"agent-engine:configured-changed\"));\n setPhase(\"idle\");\n } catch (e) {\n setErr(e instanceof Error ? e.message : \"Disconnect failed\");\n setPhase(\"idle\");\n }\n }, [clearArmedTimer]);\n\n const handleDisconnectClick = useCallback(() => {\n if (phase === \"busy\") return;\n if (phase === \"idle\") {\n // First click — arm the button. Auto-revert after 4s to avoid a\n // stale \"confirm\" state someone else could hit by accident.\n setPhase(\"armed\");\n setErr(null);\n clearArmedTimer();\n armedTimerRef.current = setTimeout(() => {\n setPhase(\"idle\");\n armedTimerRef.current = null;\n }, 4000);\n return;\n }\n // phase === \"armed\" — user confirmed, actually disconnect.\n void performDisconnect();\n }, [phase, performDisconnect, clearArmedTimer]);\n\n const handleCancel = useCallback(() => {\n clearArmedTimer();\n setPhase(\"idle\");\n }, [clearArmedTimer]);\n\n // When only the deploy fallback is active there is nothing request-scoped\n // for this button to remove. The early return MUST come after every hook\n // above to satisfy rules-of-hooks.\n if (status?.credentialSource === \"env\") return null;\n\n if (phase === \"armed\") {\n return (\n <>\n <button\n type=\"button\"\n onClick={handleDisconnectClick}\n className=\"inline-flex items-center gap-1 rounded border border-destructive/40 bg-destructive/10 px-2 py-0.5 text-[10px] font-medium text-destructive hover:bg-destructive/20\"\n >\n Confirm disconnect\n </button>\n <button\n type=\"button\"\n onClick={handleCancel}\n className=\"inline-flex items-center gap-1 rounded border border-border px-2 py-0.5 text-[10px] text-muted-foreground hover:text-foreground hover:bg-accent/40\"\n >\n Cancel\n </button>\n </>\n );\n }\n\n return (\n <>\n <button\n type=\"button\"\n onClick={handleDisconnectClick}\n disabled={phase === \"busy\"}\n className=\"inline-flex items-center gap-1 rounded border border-border px-2 py-0.5 text-[10px] text-muted-foreground hover:text-foreground hover:bg-accent/40 disabled:opacity-60 disabled:cursor-wait\"\n aria-busy={phase === \"busy\"}\n >\n {phase === \"busy\" ? (\n <>\n <IconLoader2 size={10} className=\"animate-spin\" />\n Disconnecting…\n </>\n ) : (\n \"Disconnect\"\n )}\n </button>\n {err && <span className=\"text-[10px] text-destructive\">{err}</span>}\n </>\n );\n}\n\n// ─── \"Connect Builder.io\" card (shared across all sections) ─────────────────\n\nfunction UseBuilderCard({\n builderFlow,\n connectUrl,\n connected,\n orgName,\n envManaged,\n credentialSource,\n trackingSource = \"settings_panel_builder_card\",\n trackingFlow = \"connect_llm\",\n label = \"Connect Builder.io\",\n subtitle = \"Free credits to start — no API key needed.\",\n dim,\n}: {\n builderFlow: BuilderConnectFlow;\n connectUrl?: string;\n connected: boolean;\n orgName?: string;\n envManaged?: boolean;\n credentialSource?: \"user\" | \"org\" | \"workspace\" | \"env\";\n trackingSource?: string;\n trackingFlow?: string;\n label?: string;\n subtitle?: string;\n dim?: boolean;\n}) {\n const effectiveConnected = connected || builderFlow.configured;\n const effectiveOrgName = builderFlow.orgName ?? orgName;\n const bgClass = dim ? \"\" : \"bg-accent/30\";\n\n if (effectiveConnected) {\n return (\n <div className={`rounded-md border border-border px-2.5 py-2 ${bgClass}`}>\n <div className=\"flex items-center justify-between\">\n <div className=\"text-[11px] font-medium text-foreground\">\n Builder.io\n </div>\n <span className=\"flex items-center gap-1 text-[10px] text-green-500\">\n <IconCheck size={10} />\n Connected\n </span>\n </div>\n {effectiveOrgName && (\n <p className=\"text-[10px] text-muted-foreground mt-0.5\">\n {effectiveOrgName}\n </p>\n )}\n {envManaged ? (\n <p className=\"text-[10px] text-muted-foreground mt-1\">\n {credentialSource === \"env\"\n ? \"Deployment fallback is available. Connect your own account to override it.\"\n : \"Using your connected Builder account. Deployment fallback is still available.\"}\n </p>\n ) : null}\n {connectUrl || credentialSource !== \"env\" ? (\n <div className=\"flex items-center gap-2 mt-2.5\">\n {connectUrl && (\n <button\n type=\"button\"\n onClick={() =>\n builderFlow.start({ trackingSource, trackingFlow })\n }\n disabled={builderFlow.connecting}\n className=\"inline-flex items-center gap-1 rounded border border-border px-2 py-0.5 text-[10px] no-underline text-muted-foreground hover:text-foreground hover:bg-accent/40 disabled:opacity-60\"\n >\n {builderFlow.connecting\n ? \"Connecting...\"\n : credentialSource === \"env\"\n ? \"Connect account\"\n : \"Reconnect\"}\n <IconExternalLink size={10} />\n </button>\n )}\n {credentialSource !== \"env\" ? <DisconnectBuilderButton /> : null}\n </div>\n ) : null}\n </div>\n );\n }\n\n if (!connectUrl) return null;\n\n return (\n <button\n type=\"button\"\n onClick={() => builderFlow.start({ trackingSource, trackingFlow })}\n disabled={builderFlow.connecting}\n className={`block w-full rounded-md border border-border px-3 py-3 text-left no-underline bg-gradient-to-br from-teal-500/10 via-transparent to-transparent hover:border-foreground/30 transition-colors disabled:cursor-wait disabled:opacity-70`}\n >\n <div className=\"flex items-start gap-2.5\">\n <div className=\"flex h-7 w-7 shrink-0 items-center justify-center rounded-md bg-foreground text-background\">\n <BuilderBMark className=\"h-3.5 w-3.5\" />\n </div>\n <div className=\"flex-1 min-w-0\">\n <div className=\"flex items-center gap-1.5 flex-wrap\">\n <span className=\"text-[12px] font-semibold text-foreground\">\n {builderFlow.connecting ? \"Connecting Builder.io...\" : label}\n </span>\n {builderFlow.connecting && (\n <IconLoader2\n size={12}\n className=\"shrink-0 animate-spin text-muted-foreground\"\n />\n )}\n </div>\n <p className=\"text-[10.5px] text-muted-foreground mt-0.5 leading-snug\">\n {subtitle}\n </p>\n {builderFlow.error && (\n <p className=\"mt-1 text-[10px] text-destructive\">\n {builderFlow.error}\n </p>\n )}\n </div>\n <IconExternalLink\n size={12}\n className=\"shrink-0 text-muted-foreground mt-0.5\"\n />\n </div>\n </button>\n );\n}\n\n// ─── Manual setup card ──────────────────────────────────────────────────────\n\nfunction ManualSetupCard({\n hint,\n docsUrl,\n docsLabel = \"Read the docs\",\n children,\n dim,\n sourceBadge,\n}: {\n hint?: string;\n docsUrl?: string;\n docsLabel?: string;\n children?: React.ReactNode;\n dim?: boolean;\n /** Optional \"Connected via X\" badge shown in the header row. */\n sourceBadge?: string;\n}) {\n return (\n <div\n className={`rounded-md border border-border px-2.5 py-2 ${dim ? \"\" : \"bg-accent/30\"}`}\n >\n <div className=\"flex items-center justify-between mb-1\">\n <div className=\"text-[11px] font-medium text-foreground\">\n Set up manually\n </div>\n {sourceBadge ? (\n <span className=\"flex items-center gap-1 text-[10px] text-green-500\">\n <IconCheck size={10} />\n {sourceBadge}\n </span>\n ) : null}\n </div>\n {hint && (\n <p className=\"text-[10px] text-muted-foreground mb-1.5\">{hint}</p>\n )}\n {children}\n {docsUrl && (\n <a\n href={docsUrl}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n className=\"inline-flex items-center gap-1 mt-1.5 rounded border border-border px-2.5 py-1 text-[10px] font-medium no-underline text-muted-foreground hover:text-foreground hover:bg-accent/40\"\n >\n {docsLabel}\n <IconExternalLink size={10} />\n </a>\n )}\n </div>\n );\n}\n\n// ─── LLM helpers ────────────────────────────────────────────────────────────\n\nfunction friendlyModelName(model: string): string {\n const claude = model.match(\n /^claude-(opus|sonnet|haiku)-(\\d+)-(\\d+)(?:-\\d{8,})?$/,\n );\n if (claude) {\n const tier = claude[1][0].toUpperCase() + claude[1].slice(1);\n return `${tier} ${claude[2]}.${claude[3]}`;\n }\n if (model.startsWith(\"gpt-\")) return `GPT-${model.slice(4)}`;\n if (/^o\\d/.test(model)) return model;\n const gemini = model.match(/^gemini-(.+?)(?:-preview)?$/);\n if (gemini) {\n const parts = gemini[1]\n .split(\"-\")\n .map((s) => s[0].toUpperCase() + s.slice(1))\n .join(\" \");\n return `Gemini ${parts}${model.endsWith(\"-preview\") ? \" (preview)\" : \"\"}`;\n }\n return model;\n}\n\ntype SettingsStatus = {\n engine: string;\n source: \"env\" | \"settings\";\n envVar: string | null;\n} | null;\n\nfunction computeSourceBadge(args: {\n settingsConfigured: boolean;\n settingsStatus: SettingsStatus;\n envConfigured: boolean;\n envVar: string | undefined;\n builderConnected: boolean;\n}): string | undefined {\n const { settingsConfigured, settingsStatus } = args;\n if (args.builderConnected) return \"Connected via Builder\";\n if (settingsConfigured) {\n if (settingsStatus?.source === \"env\") {\n return `Connected via ${settingsStatus.envVar ?? args.envVar ?? \"env\"}`;\n }\n return \"Connected via template (server-side)\";\n }\n if (args.envConfigured) return `Connected via ${args.envVar ?? \"env\"}`;\n return undefined;\n}\n\nfunction latestModelsOnly(models: string[]): string[] {\n const seen = new Set<string>();\n return models.filter((m) => {\n const claude = m.match(/^claude-(opus|sonnet|haiku)-/);\n if (claude) {\n if (seen.has(claude[1])) return false;\n seen.add(claude[1]);\n return true;\n }\n const gemini = m.match(/^gemini-(\\d+(?:\\.\\d+)?)-(.+?)(?:-preview)?$/);\n if (gemini) {\n const family = gemini[2];\n if (seen.has(`gemini-${family}`)) return false;\n seen.add(`gemini-${family}`);\n return true;\n }\n return true;\n });\n}\n\n// ─── LLM Section ────────────────────────────────────────────────────────────\n\ninterface EngineInfo {\n name: string;\n label: string;\n description: string;\n defaultModel: string;\n supportedModels: string[];\n requiredEnvVars: string[];\n installPackage?: string;\n packageInstalled?: boolean;\n}\n\nconst PROVIDER_DOCS: Record<string, string> = {\n anthropic: \"https://console.anthropic.com/settings/keys\",\n \"ai-sdk:anthropic\": \"https://console.anthropic.com/settings/keys\",\n \"ai-sdk:openai\": \"https://platform.openai.com/api-keys\",\n \"ai-sdk:google\": \"https://aistudio.google.com/apikey\",\n \"ai-sdk:openrouter\": \"https://openrouter.ai/keys\",\n \"ai-sdk:groq\": \"https://console.groq.com/keys\",\n \"ai-sdk:mistral\": \"https://console.mistral.ai/api-keys/\",\n \"ai-sdk:cohere\": \"https://dashboard.cohere.com/api-keys\",\n};\n\nfunction LLMSectionInner({\n builderFlow,\n builderLoading,\n connectUrl,\n connected,\n orgName,\n envManaged,\n credentialSource,\n open,\n onToggle,\n}: {\n builderFlow: BuilderConnectFlow;\n builderLoading?: boolean;\n connectUrl?: string;\n connected: boolean;\n orgName?: string;\n envManaged?: boolean;\n credentialSource?: \"user\" | \"org\" | \"workspace\" | \"env\";\n open?: boolean;\n onToggle?: () => void;\n}) {\n const [envKeys, setEnvKeys] = useState<\n Array<{ key: string; configured: boolean }>\n >([]);\n const [apiKey, setApiKey] = useState(\"\");\n const [saving, setSaving] = useState(false);\n const [saved, setSaved] = useState(false);\n const [engines, setEngines] = useState<EngineInfo[]>([]);\n const [currentEngine, setCurrentEngine] = useState(\"anthropic\");\n const [currentModel, setCurrentModel] = useState(\"\");\n const [selectedEngine, setSelectedEngine] = useState(\"anthropic\");\n const [selectedModel, setSelectedModel] = useState(\"\");\n const [applyNote, setApplyNote] = useState(false);\n const [testing, setTesting] = useState(false);\n const [testResult, setTestResult] = useState<\n | { ok: true; latencyMs: number; model: string }\n | { ok: false; error: string }\n | null\n >(null);\n const [settingsStatus, setSettingsStatus] = useState<SettingsStatus>(null);\n const [disconnectError, setDisconnectError] = useState<string | null>(null);\n const [envLoaded, setEnvLoaded] = useState(false);\n const [enginesLoaded, setEnginesLoaded] = useState(false);\n const [statusLoaded, setStatusLoaded] = useState(false);\n\n const initialLoading =\n !envLoaded || !enginesLoaded || !statusLoaded || !!builderLoading;\n\n useEffect(() => {\n fetch(agentNativePath(\"/_agent-native/env-status\"))\n .then((r) => (r.ok ? r.json() : []))\n .then(setEnvKeys)\n .catch(() => {})\n .finally(() => setEnvLoaded(true));\n }, [saved]);\n\n const notifyConfigChanged = useCallback(() => {\n window.dispatchEvent(new CustomEvent(\"agent-engine:configured-changed\"));\n }, []);\n\n const refreshSettingsStatus = useCallback(() => {\n fetch(agentNativePath(\"/_agent-native/agent-engine/status\"))\n .then((r) => (r.ok ? r.json() : null))\n .then((data) => {\n if (\n data?.configured &&\n typeof data.engine === \"string\" &&\n (data.source === \"env\" || data.source === \"settings\")\n ) {\n setSettingsStatus({\n engine: data.engine,\n source: data.source,\n envVar: typeof data.envVar === \"string\" ? data.envVar : null,\n });\n } else {\n setSettingsStatus(null);\n }\n })\n .catch(() => {})\n .finally(() => setStatusLoaded(true));\n }, []);\n\n useEffect(() => {\n refreshSettingsStatus();\n }, [refreshSettingsStatus]);\n\n useEffect(() => {\n callAction(\"manage-agent-engine\" as any, { action: \"list\" } as any)\n .then((data) => {\n if (!data) return;\n const engineData = data as {\n engines?: EngineInfo[];\n current?: { engine?: string; model?: string };\n };\n setEngines(engineData.engines ?? []);\n const cur = engineData.current ?? {};\n setCurrentEngine(cur.engine ?? \"anthropic\");\n setCurrentModel(cur.model ?? \"\");\n setSelectedEngine(cur.engine ?? \"anthropic\");\n setSelectedModel(cur.model ?? \"\");\n })\n .catch(() => {})\n .finally(() => setEnginesLoaded(true));\n }, []);\n\n const selectedEngineInfo = engines.find((e) => e.name === selectedEngine);\n const envVar = selectedEngineInfo?.requiredEnvVars?.[0];\n const selectedEnginePackageInstalled =\n selectedEngineInfo?.packageInstalled !== false;\n const envConfigured = envVar\n ? (envKeys.find((k) => k.key === envVar)?.configured ?? false)\n : false;\n const settingsConfigured =\n settingsStatus != null && settingsStatus.engine === currentEngine;\n const builderConnected = connected || builderFlow.configured;\n const anyKeyConfigured =\n builderConnected ||\n (selectedEnginePackageInstalled && (envConfigured || settingsConfigured));\n const sourceBadge = computeSourceBadge({\n settingsConfigured,\n settingsStatus,\n envConfigured,\n envVar,\n builderConnected,\n });\n\n const engineChanged =\n selectedEngine !== currentEngine || selectedModel !== currentModel;\n\n // Hide the Anthropic-via-AI-SDK alias (redundant with the native entry)\n // and Ollama (no API key to set here). The currently-selected engine is\n // always kept so a stale setting doesn't vanish from the picker.\n const providerOptions: SettingsSelectOption[] = engines\n .filter(\n (e) =>\n e.name === selectedEngine ||\n (e.name !== \"ai-sdk:anthropic\" && e.name !== \"ai-sdk:ollama\"),\n )\n .map((e) => ({ value: e.name, label: e.label }));\n\n const modelOptions: SettingsSelectOption[] = latestModelsOnly(\n selectedEngineInfo?.supportedModels ?? [],\n ).map((m) => ({ value: m, label: friendlyModelName(m) }));\n\n const handleSave = async () => {\n if (!apiKey.trim() || !envVar) return;\n setSaving(true);\n try {\n const res = await fetch(agentNativePath(\"/_agent-native/env-vars\"), {\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n body: JSON.stringify({\n vars: [{ key: envVar, value: apiKey.trim() }],\n }),\n });\n if (res.ok) {\n setSaved(true);\n setApiKey(\"\");\n refreshSettingsStatus();\n notifyConfigChanged();\n setTimeout(() => setSaved(false), 2000);\n }\n } finally {\n setSaving(false);\n }\n };\n\n const handleDisconnect = async () => {\n setDisconnectError(null);\n try {\n const res = await fetch(\n agentNativePath(\"/_agent-native/agent-engine/disconnect\"),\n {\n method: \"POST\",\n },\n );\n if (res.ok) {\n setTestResult(null);\n setApplyNote(false);\n refreshSettingsStatus();\n notifyConfigChanged();\n return;\n }\n const body = (await res.json().catch(() => null)) as {\n error?: string;\n } | null;\n setDisconnectError(\n body?.error ??\n (res.status === 401\n ? \"You must be signed in to disconnect.\"\n : `Disconnect failed (HTTP ${res.status})`),\n );\n } catch (err) {\n setDisconnectError(err instanceof Error ? err.message : String(err));\n }\n };\n\n const handleTest = async () => {\n setTesting(true);\n setTestResult(null);\n try {\n const data = await callAction(\n \"manage-agent-engine\" as any,\n {\n action: \"test\",\n engine: selectedEngine,\n model: selectedModel || selectedEngineInfo?.defaultModel,\n } as any,\n );\n // Older action paths wrapped tool output in { result }. Accept either\n // shape while the action route normalizes JSON-string script output.\n const parsed =\n typeof data === \"string\"\n ? JSON.parse(data)\n : typeof data?.result === \"string\"\n ? JSON.parse(data.result)\n : data;\n if (parsed?.ok) {\n setTestResult({\n ok: true,\n latencyMs: parsed.latencyMs ?? 0,\n model: parsed.model ?? selectedModel,\n });\n } else {\n setTestResult({\n ok: false,\n error: parsed?.error ?? \"Test failed (no error message)\",\n });\n }\n } catch (err) {\n setTestResult({\n ok: false,\n error: err instanceof Error ? err.message : String(err),\n });\n } finally {\n setTesting(false);\n }\n };\n\n const handleApply = async () => {\n try {\n const res = await fetch(\n agentNativePath(\"/_agent-native/actions/manage-agent-engine\"),\n {\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n body: JSON.stringify({\n action: \"set\",\n engine: selectedEngine,\n model: selectedModel,\n }),\n },\n );\n if (res.ok) {\n setCurrentEngine(selectedEngine);\n setCurrentModel(selectedModel);\n setApplyNote(true);\n refreshSettingsStatus();\n notifyConfigChanged();\n setTimeout(() => setApplyNote(false), 4000);\n }\n } catch {}\n };\n\n return (\n <SettingsSection\n icon={<IconBrain size={14} />}\n title=\"LLM\"\n subtitle=\"Connect any major LLM — Claude, GPT, Gemini, and more.\"\n required\n connected={initialLoading ? undefined : anyKeyConfigured}\n open={open}\n onToggle={onToggle}\n >\n {initialLoading ? (\n <SettingsSkeleton lines={3} />\n ) : (\n <div className=\"space-y-2\">\n <UseBuilderCard\n builderFlow={builderFlow}\n connectUrl={connectUrl}\n connected={connected}\n orgName={orgName}\n envManaged={envManaged}\n credentialSource={credentialSource}\n trackingSource=\"llm_settings\"\n trackingFlow=\"connect_llm\"\n label=\"Connect Builder.io\"\n />\n {!builderConnected && (\n <ManualSetupCard\n hint=\"Choose your AI provider and model.\"\n docsUrl={PROVIDER_DOCS[selectedEngine]}\n sourceBadge={sourceBadge}\n docsLabel=\"Get an API key\"\n >\n <div className=\"space-y-2 mb-1\">\n <SettingsSelect\n label=\"Provider\"\n value={selectedEngine}\n options={providerOptions}\n onValueChange={(val) => {\n setSelectedEngine(val);\n const info = engines.find((e) => e.name === val);\n setSelectedModel(info?.defaultModel ?? \"\");\n setApiKey(\"\");\n }}\n />\n\n {/* Free-form input so OpenRouter/Ollama custom model IDs can\n be typed — the registry's supportedModels is only suggestions. */}\n <div className=\"space-y-1.5\">\n <p className=\"text-[12px] font-medium text-foreground\">\n Model\n </p>\n <input\n type=\"text\"\n list={`model-suggestions-${selectedEngine}`}\n value={selectedModel}\n onChange={(e) => setSelectedModel(e.target.value)}\n placeholder={\n selectedEngineInfo?.defaultModel ?? \"e.g. model-id\"\n }\n spellCheck={false}\n autoComplete=\"off\"\n className=\"flex h-9 w-full rounded-md border border-border bg-background px-3 text-[12px] text-foreground outline-none transition-colors hover:bg-accent/40 focus:ring-1 focus:ring-accent placeholder:text-muted-foreground/50\"\n style={CONTROL_STYLE}\n />\n {modelOptions.length > 0 && (\n <datalist id={`model-suggestions-${selectedEngine}`}>\n {modelOptions.map((opt) => (\n <option\n key={opt.value}\n value={opt.value}\n label={opt.label}\n />\n ))}\n </datalist>\n )}\n </div>\n\n {envVar && envConfigured ? (\n <div className=\"flex items-center gap-1.5 text-[10px] text-green-500\">\n <IconCheck size={10} />\n {envVar} configured\n </div>\n ) : envVar ? (\n <div className=\"flex gap-1.5\">\n <input\n type=\"password\"\n value={apiKey}\n onChange={(e) => setApiKey(e.target.value)}\n onKeyDown={(e) => {\n if (e.key === \"Enter\") handleSave();\n }}\n placeholder={PROVIDER_ENV_PLACEHOLDERS[envVar] ?? \"...\"}\n className=\"flex-1 rounded border border-border bg-background px-2 py-1 text-[11px] text-foreground outline-none placeholder:text-muted-foreground/50 focus:ring-1 focus:ring-accent\"\n />\n <button\n onClick={handleSave}\n disabled={!apiKey.trim() || saving}\n className=\"rounded bg-accent px-2 py-1 text-[10px] font-medium text-foreground hover:bg-accent/80 disabled:opacity-40\"\n >\n {saving ? (\n <IconLoader2 size={10} className=\"animate-spin\" />\n ) : saved ? (\n <IconCheck size={10} />\n ) : (\n \"Save\"\n )}\n </button>\n </div>\n ) : null}\n\n <div className=\"flex items-center gap-2\">\n <button\n onClick={handleTest}\n disabled={testing}\n className=\"rounded border border-border px-2.5 py-1 text-[10px] font-medium text-foreground hover:bg-accent/40 disabled:opacity-40\"\n >\n {testing ? (\n <span className=\"flex items-center gap-1\">\n <IconLoader2 size={10} className=\"animate-spin\" />\n Testing…\n </span>\n ) : (\n \"Test\"\n )}\n </button>\n {engineChanged && (\n <button\n onClick={handleApply}\n className=\"rounded bg-accent px-2.5 py-1 text-[10px] font-medium text-foreground hover:bg-accent/80\"\n >\n Apply\n </button>\n )}\n {settingsStatus != null && (\n <Tooltip>\n <TooltipTrigger asChild>\n <button\n onClick={handleDisconnect}\n className=\"ml-auto rounded border border-border px-2.5 py-1 text-[10px] font-medium text-muted-foreground hover:bg-destructive/10 hover:text-destructive hover:border-destructive/40\"\n >\n Disconnect\n </button>\n </TooltipTrigger>\n <TooltipContent>\n Clear the saved engine — the app will fall back to the\n default until you re-apply.\n </TooltipContent>\n </Tooltip>\n )}\n </div>\n {testResult && testResult.ok && (\n <p className=\"flex items-center gap-1 text-[10px] text-green-500\">\n <IconCheck size={10} />\n Test passed — {testResult.latencyMs}ms\n </p>\n )}\n {testResult && testResult.ok === false && (\n <p className=\"text-[10px] text-destructive\">\n Test failed: {testResult.error}\n </p>\n )}\n {disconnectError && (\n <p className=\"text-[10px] text-destructive\">\n Disconnect failed: {disconnectError}\n </p>\n )}\n {applyNote && (\n <p className=\"text-[10px] text-muted-foreground\">\n Changes take effect on next conversation\n </p>\n )}\n </div>\n </ManualSetupCard>\n )}\n </div>\n )}\n </SettingsSection>\n );\n}\n\n// ─── App Default Model Section ──────────────────────────────────────────────\n\ninterface AppModelDefaultEngine extends EngineInfo {\n configured: boolean;\n}\n\ninterface AppModelDefaultsResponse {\n appId: string;\n engine: string | null;\n model: string | null;\n scope: \"org\" | \"user\" | \"default\";\n source: \"org\" | \"user\" | \"default\";\n canUpdate: boolean;\n orgId?: string | null;\n orgName?: string | null;\n role?: string | null;\n engines: AppModelDefaultEngine[];\n}\n\nfunction friendlyAppName(appId: string): string {\n return appId\n .split(\"-\")\n .filter(Boolean)\n .map((part) => part[0]?.toUpperCase() + part.slice(1))\n .join(\" \");\n}\n\nfunction AppModelDefaultsSectionInner({\n open,\n onToggle,\n}: {\n open?: boolean;\n onToggle?: () => void;\n}) {\n const [settings, setSettings] = useState<AppModelDefaultsResponse | null>(\n null,\n );\n const [selectedEngine, setSelectedEngine] = useState(\"\");\n const [selectedModel, setSelectedModel] = useState(\"\");\n const [loading, setLoading] = useState(true);\n const [saving, setSaving] = useState(false);\n const [saved, setSaved] = useState(false);\n const [error, setError] = useState<string | null>(null);\n\n const load = useCallback(() => {\n let cancelled = false;\n setLoading(true);\n fetch(agentNativePath(\"/_agent-native/agent-model-defaults\"))\n .then((r) => (r.ok ? r.json() : null))\n .then((data: AppModelDefaultsResponse | null) => {\n if (cancelled || !data) return;\n setSettings(data);\n const firstConfigured =\n data.engines.find((engine) => engine.configured) ?? data.engines[0];\n const nextEngine = data.engine ?? firstConfigured?.name ?? \"\";\n const nextEngineInfo =\n data.engines.find((engine) => engine.name === nextEngine) ??\n firstConfigured;\n setSelectedEngine(nextEngine);\n setSelectedModel(data.model ?? nextEngineInfo?.defaultModel ?? \"\");\n })\n .catch(() => {})\n .finally(() => {\n if (!cancelled) setLoading(false);\n });\n return () => {\n cancelled = true;\n };\n }, []);\n\n useEffect(() => load(), [load]);\n\n const selectedEngineInfo =\n settings?.engines.find((engine) => engine.name === selectedEngine) ?? null;\n const engineOptions: SettingsSelectOption[] = (settings?.engines ?? [])\n .filter(\n (engine) =>\n engine.name === selectedEngine ||\n (engine.name !== \"ai-sdk:anthropic\" && engine.name !== \"ai-sdk:ollama\"),\n )\n .map((engine) => ({\n value: engine.name,\n label:\n engine.name === \"builder\"\n ? \"Builder.io Gateway\"\n : engine.label || engine.name,\n description: engine.configured\n ? \"Configured for this workspace\"\n : engine.packageInstalled === false\n ? `Install ${engine.installPackage ?? \"the provider packages\"} to use this provider`\n : \"Credentials not detected yet\",\n }));\n const modelOptions: SettingsSelectOption[] = latestModelsOnly(\n selectedEngineInfo?.supportedModels ?? [],\n ).map((model) => ({ value: model, label: friendlyModelName(model) }));\n const hasPendingChange =\n !!settings &&\n settings.canUpdate &&\n !!selectedEngine &&\n !!selectedModel.trim() &&\n (selectedEngine !== settings.engine ||\n selectedModel.trim() !== settings.model);\n const hasAppDefault = settings?.source !== \"default\";\n const scopeLabel =\n settings?.scope === \"org\"\n ? settings.orgName\n ? `${settings.orgName} organization`\n : \"organization\"\n : \"your account\";\n\n const notifyChanged = () => {\n window.dispatchEvent(new CustomEvent(\"agent-engine:configured-changed\"));\n };\n\n const save = async () => {\n if (!hasPendingChange) return;\n setSaving(true);\n setSaved(false);\n setError(null);\n try {\n const res = await fetch(\n agentNativePath(\"/_agent-native/agent-model-defaults\"),\n {\n method: \"PUT\",\n headers: { \"Content-Type\": \"application/json\" },\n body: JSON.stringify({\n engine: selectedEngine,\n model: selectedModel.trim(),\n }),\n },\n );\n const body = await res.json().catch(() => ({}));\n if (!res.ok)\n throw new Error(body?.error ?? `Save failed (${res.status})`);\n const next = body as AppModelDefaultsResponse;\n setSettings(next);\n setSelectedEngine(next.engine ?? selectedEngine);\n setSelectedModel(next.model ?? selectedModel.trim());\n setSaved(true);\n notifyChanged();\n setTimeout(() => setSaved(false), 2000);\n } catch (err) {\n setError(err instanceof Error ? err.message : \"Save failed\");\n } finally {\n setSaving(false);\n }\n };\n\n const reset = async () => {\n if (!settings?.canUpdate || !hasAppDefault) return;\n setSaving(true);\n setSaved(false);\n setError(null);\n try {\n const res = await fetch(\n agentNativePath(\"/_agent-native/agent-model-defaults\"),\n { method: \"DELETE\" },\n );\n const body = await res.json().catch(() => ({}));\n if (!res.ok)\n throw new Error(body?.error ?? `Reset failed (${res.status})`);\n const next = body as AppModelDefaultsResponse;\n setSettings(next);\n const fallback = next.engines.find((engine) => engine.configured);\n setSelectedEngine(next.engine ?? fallback?.name ?? selectedEngine);\n setSelectedModel(next.model ?? fallback?.defaultModel ?? selectedModel);\n notifyChanged();\n } catch (err) {\n setError(err instanceof Error ? err.message : \"Reset failed\");\n } finally {\n setSaving(false);\n }\n };\n\n return (\n <SettingsSection\n id={settingsSectionDomId(\"app-models\")}\n icon={<IconApps size={14} />}\n title=\"App Default Model\"\n subtitle=\"Choose the default model for this app/template when no one-off composer model is selected.\"\n connected={loading ? undefined : hasAppDefault}\n open={open}\n onToggle={onToggle}\n >\n {loading ? (\n <SettingsSkeleton lines={2} />\n ) : settings ? (\n <div className=\"space-y-2\">\n <div className=\"rounded-md border border-border bg-accent/20 px-2.5 py-2\">\n <div className=\"mb-2 flex items-center justify-between gap-2\">\n <div className=\"min-w-0\">\n <p className=\"truncate text-[11px] font-medium text-foreground\">\n {friendlyAppName(settings.appId) || \"This app\"}\n </p>\n <p className=\"mt-0.5 text-[10px] text-muted-foreground\">\n {hasAppDefault\n ? `Applies to ${scopeLabel}.`\n : \"Using the global LLM default.\"}\n </p>\n </div>\n <span className=\"shrink-0 rounded-full bg-background px-2 py-0.5 text-[10px] font-medium text-muted-foreground\">\n {settings.source}\n </span>\n </div>\n\n <div className=\"space-y-2\">\n <SettingsSelect\n label=\"Provider\"\n value={selectedEngine}\n options={engineOptions}\n onValueChange={(value) => {\n setSelectedEngine(value);\n const info = settings.engines.find(\n (engine) => engine.name === value,\n );\n setSelectedModel(info?.defaultModel ?? \"\");\n setError(null);\n }}\n />\n\n <div className=\"space-y-1.5\">\n <p className=\"text-[12px] font-medium text-foreground\">Model</p>\n <input\n type=\"text\"\n list={`app-model-suggestions-${selectedEngine}`}\n value={selectedModel}\n disabled={!settings.canUpdate || saving}\n onChange={(event) => {\n setSelectedModel(event.target.value);\n setError(null);\n }}\n onKeyDown={(event) => {\n if (event.key === \"Enter\" && hasPendingChange) void save();\n }}\n placeholder={selectedEngineInfo?.defaultModel ?? \"model-id\"}\n spellCheck={false}\n autoComplete=\"off\"\n className=\"flex h-9 w-full rounded-md border border-border bg-background px-3 text-[12px] text-foreground outline-none transition-colors hover:bg-accent/40 focus:ring-1 focus:ring-accent placeholder:text-muted-foreground/50 disabled:opacity-60\"\n style={CONTROL_STYLE}\n />\n {modelOptions.length > 0 && (\n <datalist id={`app-model-suggestions-${selectedEngine}`}>\n {modelOptions.map((option) => (\n <option\n key={option.value}\n value={option.value}\n label={option.label}\n />\n ))}\n </datalist>\n )}\n </div>\n\n <div className=\"flex items-center gap-1.5\">\n <button\n type=\"button\"\n onClick={save}\n disabled={!hasPendingChange || saving}\n className=\"inline-flex h-8 items-center gap-1 rounded bg-accent px-2.5 text-[10px] font-medium text-foreground hover:bg-accent/80 disabled:opacity-40\"\n >\n {saving ? (\n <IconLoader2 size={10} className=\"animate-spin\" />\n ) : saved ? (\n <IconCheck size={10} />\n ) : (\n \"Save\"\n )}\n </button>\n <button\n type=\"button\"\n onClick={reset}\n disabled={!settings.canUpdate || !hasAppDefault || saving}\n className=\"h-8 rounded border border-border px-2.5 text-[10px] font-medium text-muted-foreground hover:bg-accent/40 hover:text-foreground disabled:opacity-40\"\n >\n Reset\n </button>\n </div>\n </div>\n\n {!settings.canUpdate && (\n <p className=\"mt-2 text-[10px] text-muted-foreground\">\n Only organization owners and admins can change app model\n defaults.\n </p>\n )}\n {selectedEngineInfo?.packageInstalled === false ? (\n <p className=\"mt-2 text-[10px] text-muted-foreground\">\n This app does not include the optional runtime packages for this\n provider.\n </p>\n ) : selectedEngineInfo && !selectedEngineInfo.configured ? (\n <p className=\"mt-2 text-[10px] text-muted-foreground\">\n Credentials for this provider were not detected; runtime will\n fall back if the model cannot be used.\n </p>\n ) : null}\n {error && (\n <p className=\"mt-2 text-[10px] text-destructive\">{error}</p>\n )}\n </div>\n </div>\n ) : (\n <p className=\"text-[10px] text-muted-foreground\">\n App model defaults are unavailable.\n </p>\n )}\n </SettingsSection>\n );\n}\n\n// ─── Email Section ──────────────────────────────────────────────────────────\n\nfunction EmailSectionInner({\n open,\n onToggle,\n}: {\n open?: boolean;\n onToggle?: () => void;\n}) {\n const [envKeys, setEnvKeys] = useState<\n Array<{ key: string; configured: boolean }>\n >([]);\n const [resendKey, setResendKey] = useState(\"\");\n const [sendgridKey, setSendgridKey] = useState(\"\");\n const [fromAddr, setFromAddr] = useState(\"\");\n const [saving, setSaving] = useState(false);\n const [saved, setSaved] = useState(false);\n const [emailProvider, setEmailProvider] = useState<\"resend\" | \"sendgrid\">(\n \"resend\",\n );\n const [envLoaded, setEnvLoaded] = useState(false);\n\n useEffect(() => {\n fetch(agentNativePath(\"/_agent-native/env-status\"))\n .then((r) => (r.ok ? r.json() : []))\n .then(setEnvKeys)\n .catch(() => {})\n .finally(() => setEnvLoaded(true));\n }, [saved]);\n\n const resendConfigured =\n envKeys.find((k) => k.key === \"RESEND_API_KEY\")?.configured ?? false;\n const sendgridConfigured =\n envKeys.find((k) => k.key === \"SENDGRID_API_KEY\")?.configured ?? false;\n const fromConfigured =\n envKeys.find((k) => k.key === \"EMAIL_FROM\")?.configured ?? false;\n const anyConfigured = resendConfigured || sendgridConfigured;\n\n useEffect(() => {\n if (sendgridConfigured && !resendConfigured) {\n setEmailProvider(\"sendgrid\");\n }\n }, [resendConfigured, sendgridConfigured]);\n\n const save = async (vars: Array<{ key: string; value: string }>) => {\n setSaving(true);\n try {\n const res = await fetch(agentNativePath(\"/_agent-native/env-vars\"), {\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n body: JSON.stringify({ vars }),\n });\n if (res.ok) {\n setSaved(true);\n setResendKey(\"\");\n setSendgridKey(\"\");\n setFromAddr(\"\");\n setTimeout(() => setSaved(false), 2000);\n }\n } finally {\n setSaving(false);\n }\n };\n\n const saveResend = () => {\n const vars: Array<{ key: string; value: string }> = [];\n if (resendKey.trim())\n vars.push({ key: \"RESEND_API_KEY\", value: resendKey.trim() });\n if (fromAddr.trim())\n vars.push({ key: \"EMAIL_FROM\", value: fromAddr.trim() });\n if (vars.length) save(vars);\n };\n\n const saveSendgrid = () => {\n const vars: Array<{ key: string; value: string }> = [];\n if (sendgridKey.trim())\n vars.push({ key: \"SENDGRID_API_KEY\", value: sendgridKey.trim() });\n if (fromAddr.trim())\n vars.push({ key: \"EMAIL_FROM\", value: fromAddr.trim() });\n if (vars.length) save(vars);\n };\n\n return (\n <SettingsSection\n icon={<IconMail size={14} />}\n title=\"Email\"\n subtitle=\"Needed before deploy for password resets, team invitations, and share notifications. Local development can run without it.\"\n connected={!envLoaded ? undefined : anyConfigured}\n open={open}\n onToggle={onToggle}\n >\n {!envLoaded ? (\n <SettingsSkeleton lines={2} />\n ) : (\n <div className=\"space-y-2\">\n <label className=\"block space-y-1\">\n <span className=\"text-[10px] uppercase tracking-wide text-muted-foreground\">\n Provider\n </span>\n <select\n value={emailProvider}\n onChange={(e) =>\n setEmailProvider(e.target.value as \"resend\" | \"sendgrid\")\n }\n className=\"w-full rounded border border-border bg-background px-2 py-1 text-[11px] text-foreground outline-none focus:ring-1 focus:ring-accent\"\n >\n <option value=\"resend\">Resend</option>\n <option value=\"sendgrid\">SendGrid</option>\n </select>\n </label>\n\n {emailProvider === \"resend\" ? (\n <ManualSetupCard\n hint=\"Use Resend for transactional email.\"\n docsUrl=\"https://resend.com/api-keys\"\n docsLabel=\"Get a Resend key\"\n >\n {resendConfigured ? (\n <div className=\"mb-1 flex items-center gap-1.5 text-[10px] text-green-500\">\n <IconCheck size={10} />\n RESEND_API_KEY configured\n </div>\n ) : (\n <div className=\"mb-1 flex gap-1.5\">\n <input\n type=\"password\"\n value={resendKey}\n onChange={(e) => setResendKey(e.target.value)}\n onKeyDown={(e) => {\n if (e.key === \"Enter\") saveResend();\n }}\n placeholder=\"re_...\"\n className=\"flex-1 rounded border border-border bg-background px-2 py-1 text-[11px] text-foreground outline-none placeholder:text-muted-foreground/50 focus:ring-1 focus:ring-accent\"\n />\n <button\n onClick={saveResend}\n disabled={!resendKey.trim() || saving}\n className=\"rounded bg-accent px-2 py-1 text-[10px] font-medium text-foreground hover:bg-accent/80 disabled:opacity-40\"\n >\n {saving ? (\n <IconLoader2 size={10} className=\"animate-spin\" />\n ) : saved ? (\n <IconCheck size={10} />\n ) : (\n \"Save\"\n )}\n </button>\n </div>\n )}\n {fromConfigured ? (\n <div className=\"flex items-center gap-1.5 text-[10px] text-green-500\">\n <IconCheck size={10} />\n EMAIL_FROM configured\n </div>\n ) : (\n <div className=\"flex gap-1.5\">\n <input\n type=\"text\"\n value={fromAddr}\n onChange={(e) => setFromAddr(e.target.value)}\n onKeyDown={(e) => {\n if (e.key === \"Enter\") saveResend();\n }}\n placeholder=\"From address - e.g. Acme <hi@acme.com>\"\n className=\"flex-1 rounded border border-border bg-background px-2 py-1 text-[11px] text-foreground outline-none placeholder:text-muted-foreground/50 focus:ring-1 focus:ring-accent\"\n />\n {!resendConfigured ? null : (\n <button\n onClick={saveResend}\n disabled={!fromAddr.trim() || saving}\n className=\"rounded bg-accent px-2 py-1 text-[10px] font-medium text-foreground hover:bg-accent/80 disabled:opacity-40\"\n >\n {saving ? (\n <IconLoader2 size={10} className=\"animate-spin\" />\n ) : saved ? (\n <IconCheck size={10} />\n ) : (\n \"Save\"\n )}\n </button>\n )}\n </div>\n )}\n </ManualSetupCard>\n ) : (\n <ManualSetupCard\n hint=\"Use SendGrid for transactional email. SendGrid requires a verified from address.\"\n docsUrl=\"https://app.sendgrid.com/settings/api_keys\"\n docsLabel=\"Get a SendGrid key\"\n >\n {sendgridConfigured ? (\n <div className=\"mb-1 flex items-center gap-1.5 text-[10px] text-green-500\">\n <IconCheck size={10} />\n SENDGRID_API_KEY configured\n </div>\n ) : (\n <div className=\"mb-1 flex gap-1.5\">\n <input\n type=\"password\"\n value={sendgridKey}\n onChange={(e) => setSendgridKey(e.target.value)}\n onKeyDown={(e) => {\n if (e.key === \"Enter\") saveSendgrid();\n }}\n placeholder=\"SG....\"\n className=\"flex-1 rounded border border-border bg-background px-2 py-1 text-[11px] text-foreground outline-none placeholder:text-muted-foreground/50 focus:ring-1 focus:ring-accent\"\n />\n <button\n onClick={saveSendgrid}\n disabled={!sendgridKey.trim() || saving}\n className=\"rounded bg-accent px-2 py-1 text-[10px] font-medium text-foreground hover:bg-accent/80 disabled:opacity-40\"\n >\n {saving ? (\n <IconLoader2 size={10} className=\"animate-spin\" />\n ) : saved ? (\n <IconCheck size={10} />\n ) : (\n \"Save\"\n )}\n </button>\n </div>\n )}\n {fromConfigured ? (\n <div className=\"flex items-center gap-1.5 text-[10px] text-green-500\">\n <IconCheck size={10} />\n EMAIL_FROM configured\n </div>\n ) : (\n <div className=\"flex gap-1.5\">\n <input\n type=\"text\"\n value={fromAddr}\n onChange={(e) => setFromAddr(e.target.value)}\n onKeyDown={(e) => {\n if (e.key === \"Enter\") saveSendgrid();\n }}\n placeholder=\"From address - e.g. Acme <hi@acme.com>\"\n className=\"flex-1 rounded border border-border bg-background px-2 py-1 text-[11px] text-foreground outline-none placeholder:text-muted-foreground/50 focus:ring-1 focus:ring-accent\"\n />\n {!sendgridConfigured ? null : (\n <button\n onClick={saveSendgrid}\n disabled={!fromAddr.trim() || saving}\n className=\"rounded bg-accent px-2 py-1 text-[10px] font-medium text-foreground hover:bg-accent/80 disabled:opacity-40\"\n >\n {saving ? (\n <IconLoader2 size={10} className=\"animate-spin\" />\n ) : saved ? (\n <IconCheck size={10} />\n ) : (\n \"Save\"\n )}\n </button>\n )}\n </div>\n )}\n </ManualSetupCard>\n )}\n </div>\n )}\n </SettingsSection>\n );\n}\n\n// ─── Agent Limits Section ──────────────────────────────────────────────────\n\ninterface AgentLoopSettingsResponse {\n maxIterations: number;\n defaultMaxIterations: number;\n minMaxIterations: number;\n maxMaxIterations: number;\n scope: \"org\" | \"user\" | \"default\";\n source: \"org\" | \"user\" | \"env\" | \"default\";\n canUpdate: boolean;\n orgName?: string | null;\n role?: string | null;\n}\n\nfunction AgentLimitsSectionInner({\n open,\n onToggle,\n}: {\n open?: boolean;\n onToggle?: () => void;\n}) {\n const [settings, setSettings] = useState<AgentLoopSettingsResponse | null>(\n null,\n );\n const [value, setValue] = useState(\"\");\n const [loading, setLoading] = useState(true);\n const [saving, setSaving] = useState(false);\n const [saved, setSaved] = useState(false);\n const [error, setError] = useState<string | null>(null);\n\n const load = useCallback(() => {\n let cancelled = false;\n setLoading(true);\n fetch(agentNativePath(\"/_agent-native/agent-loop-settings\"))\n .then((r) => (r.ok ? r.json() : null))\n .then((data: AgentLoopSettingsResponse | null) => {\n if (cancelled || !data) return;\n setSettings(data);\n setValue(String(data.maxIterations));\n })\n .catch(() => {})\n .finally(() => {\n if (!cancelled) setLoading(false);\n });\n return () => {\n cancelled = true;\n };\n }, []);\n\n useEffect(() => load(), [load]);\n\n useEffect(() => {\n const handler = (event: Event) => {\n const detail = (event as CustomEvent).detail as\n | AgentLoopSettingsResponse\n | undefined;\n if (!detail?.maxIterations) return;\n setSettings(detail);\n setValue(String(detail.maxIterations));\n };\n window.addEventListener(\"agent-loop-settings:changed\", handler);\n return () =>\n window.removeEventListener(\"agent-loop-settings:changed\", handler);\n }, []);\n\n const numericValue = Number(value);\n const hasPendingChange =\n !!settings &&\n settings.canUpdate &&\n Number.isInteger(numericValue) &&\n numericValue !== settings.maxIterations;\n const scopeLabel =\n settings?.scope === \"org\"\n ? settings.orgName\n ? `${settings.orgName} organization`\n : \"organization\"\n : \"your account\";\n\n const save = async () => {\n if (!settings?.canUpdate) return;\n setSaving(true);\n setSaved(false);\n setError(null);\n try {\n const res = await fetch(\n agentNativePath(\"/_agent-native/agent-loop-settings\"),\n {\n method: \"PUT\",\n headers: { \"Content-Type\": \"application/json\" },\n body: JSON.stringify({ maxIterations: numericValue }),\n },\n );\n const body = await res.json().catch(() => ({}));\n if (!res.ok) {\n throw new Error(body?.error ?? `Save failed (${res.status})`);\n }\n setSettings(body as AgentLoopSettingsResponse);\n setValue(String((body as AgentLoopSettingsResponse).maxIterations));\n setSaved(true);\n window.dispatchEvent(\n new CustomEvent(\"agent-loop-settings:changed\", { detail: body }),\n );\n setTimeout(() => setSaved(false), 2000);\n } catch (err) {\n setError(err instanceof Error ? err.message : \"Save failed\");\n } finally {\n setSaving(false);\n }\n };\n\n const reset = async () => {\n if (!settings?.canUpdate) return;\n setSaving(true);\n setSaved(false);\n setError(null);\n try {\n const res = await fetch(\n agentNativePath(\"/_agent-native/agent-loop-settings\"),\n { method: \"DELETE\" },\n );\n const body = await res.json().catch(() => ({}));\n if (!res.ok) {\n throw new Error(body?.error ?? `Reset failed (${res.status})`);\n }\n setSettings(body as AgentLoopSettingsResponse);\n setValue(String((body as AgentLoopSettingsResponse).maxIterations));\n window.dispatchEvent(\n new CustomEvent(\"agent-loop-settings:changed\", { detail: body }),\n );\n } catch (err) {\n setError(err instanceof Error ? err.message : \"Reset failed\");\n } finally {\n setSaving(false);\n }\n };\n\n return (\n <SettingsSection\n icon={<IconGauge size={14} />}\n title=\"Agent Limits\"\n subtitle=\"Control how long a single agent response can work before pausing.\"\n connected={\n loading\n ? undefined\n : settings\n ? settings.maxIterations !== settings.defaultMaxIterations\n : false\n }\n open={open}\n onToggle={onToggle}\n >\n {loading ? (\n <SettingsSkeleton lines={2} />\n ) : settings ? (\n <div className=\"space-y-2\">\n <div className=\"rounded-md border border-border px-2.5 py-2 bg-accent/20\">\n <div className=\"flex items-center justify-between gap-2\">\n <div>\n <p className=\"text-[11px] font-medium text-foreground\">\n Max iterations\n </p>\n <p className=\"mt-0.5 text-[10px] text-muted-foreground\">\n Applies to {scopeLabel}. Default is{\" \"}\n {settings.defaultMaxIterations.toLocaleString()}.\n </p>\n </div>\n <span className=\"rounded-full bg-background px-2 py-0.5 text-[10px] font-medium text-muted-foreground\">\n {settings.source}\n </span>\n </div>\n <div className=\"mt-2 flex items-center gap-1.5\">\n <input\n type=\"number\"\n min={settings.minMaxIterations}\n max={settings.maxMaxIterations}\n value={value}\n disabled={!settings.canUpdate || saving}\n onChange={(e) => {\n setValue(e.target.value);\n setError(null);\n }}\n onKeyDown={(e) => {\n if (e.key === \"Enter\" && hasPendingChange) void save();\n }}\n className=\"h-8 min-w-0 flex-1 rounded border border-border bg-background px-2 text-[11px] text-foreground outline-none focus:ring-1 focus:ring-accent disabled:opacity-60\"\n />\n <button\n type=\"button\"\n onClick={save}\n disabled={!hasPendingChange || saving}\n className=\"inline-flex h-8 items-center gap-1 rounded bg-accent px-2.5 text-[10px] font-medium text-foreground hover:bg-accent/80 disabled:opacity-40\"\n >\n {saving ? (\n <IconLoader2 size={10} className=\"animate-spin\" />\n ) : saved ? (\n <IconCheck size={10} />\n ) : (\n \"Save\"\n )}\n </button>\n <button\n type=\"button\"\n onClick={reset}\n disabled={\n !settings.canUpdate ||\n saving ||\n settings.maxIterations === settings.defaultMaxIterations\n }\n className=\"h-8 rounded border border-border px-2.5 text-[10px] font-medium text-muted-foreground hover:bg-accent/40 hover:text-foreground disabled:opacity-40\"\n >\n Reset\n </button>\n </div>\n {!settings.canUpdate && (\n <p className=\"mt-2 text-[10px] text-muted-foreground\">\n Only organization owners and admins can change this limit.\n </p>\n )}\n {error && (\n <p className=\"mt-2 text-[10px] text-destructive\">{error}</p>\n )}\n </div>\n </div>\n ) : (\n <p className=\"text-[10px] text-muted-foreground\">\n Agent limit settings are unavailable.\n </p>\n )}\n </SettingsSection>\n );\n}\n\n// ─── Main SettingsPanel ─────────────────────────────────────────────────────\n\nexport interface SettingsPanelProps {\n isDevMode: boolean;\n onToggleDevMode: () => void;\n showDevToggle: boolean;\n devAppUrl?: string;\n initialSection?: string | null;\n sectionRequestKey?: number;\n}\n\ntype SettingsSectionId =\n | \"account\"\n | \"llm\"\n | \"app-models\"\n | \"limits\"\n | \"voice\"\n | \"demo-mode\"\n | \"automations\"\n | \"secrets\"\n | \"hosting\"\n | \"database\"\n | \"uploads\"\n | \"auth\"\n | \"email\"\n | \"browser\"\n | \"background\"\n | \"integrations\"\n | \"usage\"\n | \"a2a\";\n\nconst SETTINGS_SECTION_IDS = new Set<SettingsSectionId>([\n \"account\",\n \"llm\",\n \"app-models\",\n \"limits\",\n \"voice\",\n \"demo-mode\",\n \"automations\",\n \"secrets\",\n \"hosting\",\n \"database\",\n \"uploads\",\n \"auth\",\n \"email\",\n \"browser\",\n \"background\",\n \"integrations\",\n \"usage\",\n \"a2a\",\n]);\n\nfunction normalizeSettingsSection(\n value?: string | null,\n): SettingsSectionId | null {\n const normalized = value?.replace(/^#/, \"\").toLowerCase() ?? \"\";\n if (!normalized) return null;\n if (normalized.startsWith(\"secrets\")) return \"secrets\";\n if (\n normalized === \"workspace\" ||\n normalized === \"workspace-settings\" ||\n normalized === \"organization\" ||\n normalized === \"org\"\n ) {\n return \"secrets\";\n }\n if (normalized === \"agent-engine\") return \"llm\";\n if (\n normalized === \"agent-model-defaults\" ||\n normalized === \"app-model-defaults\" ||\n normalized === \"models\"\n ) {\n return \"app-models\";\n }\n if (normalized === \"agent-limits\" || normalized === \"loop-settings\") {\n return \"limits\";\n }\n return SETTINGS_SECTION_IDS.has(normalized as SettingsSectionId)\n ? (normalized as SettingsSectionId)\n : null;\n}\n\nfunction settingsSectionDomId(section: SettingsSectionId): string {\n return `agent-settings-section-${section}`;\n}\n\nfunction initialOpenSection(): SettingsSectionId {\n if (typeof window === \"undefined\") return \"llm\";\n return normalizeSettingsSection(window.location.hash) ?? \"llm\";\n}\n\n// Agent capability modes. The internal values (\"production\"/\"development\") are\n// kept for back-compat with the AGENT_MODE wiring; only the visible labels\n// changed to \"App mode\" / \"Code mode\" so this control reads as the agent\n// capability it is — not the deployment environment (NODE_ENV).\nconst agentModeOptions: SettingsSelectOption[] = [\n {\n value: \"production\",\n label: \"App mode\",\n description:\n \"App tools only; code, bash, and files require Builder or a local clone.\",\n },\n {\n value: \"development\",\n label: \"Code mode\",\n description: \"Full access to code editing, bash, and files.\",\n },\n];\n\nfunction CapabilityStatusRow({\n label,\n value,\n active,\n}: {\n label: string;\n value: React.ReactNode;\n active: boolean;\n}) {\n return (\n <div className=\"flex items-center justify-between gap-2 text-[10px]\">\n <span className=\"flex items-center gap-1.5 text-muted-foreground\">\n <span\n className={`h-1.5 w-1.5 rounded-full ${active ? \"bg-green-500\" : \"bg-muted-foreground/30\"}`}\n aria-hidden=\"true\"\n />\n {label}\n </span>\n <span className=\"min-w-0 truncate text-right text-foreground\">\n {value}\n </span>\n </div>\n );\n}\n\nfunction CapabilityStatusStrip({\n isDevMode,\n builderConnected,\n builderLoading,\n builderBranchesAvailable,\n onOpenLlm,\n}: {\n isDevMode: boolean;\n builderConnected: boolean;\n builderLoading: boolean;\n builderBranchesAvailable: boolean;\n onOpenLlm: () => void;\n}) {\n const codeAvailable =\n isDevMode || (builderConnected && builderBranchesAvailable);\n const codeLabel = isDevMode\n ? \"Local tools\"\n : builderConnected && builderBranchesAvailable\n ? \"Builder branches\"\n : \"Desktop/local\";\n\n return (\n <div className=\"rounded-md border border-border bg-muted/20 px-2.5 py-2\">\n <div className=\"mb-1.5 text-[10px] font-medium text-muted-foreground\">\n Available now\n </div>\n <div className=\"space-y-1.5\">\n <CapabilityStatusRow label=\"App\" value=\"Chat + actions\" active />\n <CapabilityStatusRow\n label=\"Code\"\n value={codeLabel}\n active={codeAvailable}\n />\n <CapabilityStatusRow\n label=\"Builder\"\n active={builderConnected}\n value={\n builderLoading ? (\n \"Checking...\"\n ) : builderConnected ? (\n \"Connected\"\n ) : (\n <button\n type=\"button\"\n onClick={onOpenLlm}\n className=\"rounded border border-border px-1.5 py-0.5 text-[10px] text-muted-foreground transition-colors hover:bg-accent/40 hover:text-foreground\"\n >\n Connect\n </button>\n )\n }\n />\n </div>\n </div>\n );\n}\n\nfunction AccountSectionInner({\n open,\n onToggle,\n}: {\n open: boolean;\n onToggle: () => void;\n}) {\n const { session, isLoading } = useSession();\n const email = session?.email;\n const avatarUrl = useAvatarUrl(email);\n const fileInputRef = useRef<HTMLInputElement>(null);\n const [uploading, setUploading] = useState(false);\n const [status, setStatus] = useState<\"idle\" | \"saved\" | \"error\">(\"idle\");\n\n const displayName = session?.name || email || \"Signed out\";\n const initials = (session?.name || email || \"?\")\n .split(/[ @._-]+/)\n .filter(Boolean)\n .slice(0, 2)\n .map((part) => part[0]?.toUpperCase())\n .join(\"\");\n\n const handleAvatarChange = async (\n event: React.ChangeEvent<HTMLInputElement>,\n ) => {\n const file = event.target.files?.[0];\n event.target.value = \"\";\n if (!file || !email) return;\n setUploading(true);\n setStatus(\"idle\");\n try {\n await uploadAvatar(file, email);\n setStatus(\"saved\");\n } catch {\n setStatus(\"error\");\n } finally {\n setUploading(false);\n }\n };\n\n return (\n <SettingsSection\n icon={<IconUserCircle size={14} />}\n title=\"Account\"\n subtitle=\"Your profile photo and signed-in identity.\"\n open={open}\n onToggle={onToggle}\n >\n <div className=\"flex items-center gap-3\">\n <div className=\"flex h-12 w-12 shrink-0 items-center justify-center overflow-hidden rounded-full border border-border bg-accent text-[13px] font-semibold text-muted-foreground\">\n {avatarUrl ? (\n <img\n src={avatarUrl}\n alt=\"\"\n className=\"h-full w-full object-cover\"\n />\n ) : (\n initials\n )}\n </div>\n <div className=\"min-w-0 flex-1\">\n <p className=\"truncate text-[12px] font-medium text-foreground\">\n {isLoading ? \"Loading...\" : displayName}\n </p>\n {email && (\n <p className=\"truncate text-[11px] text-muted-foreground\">\n {email}\n </p>\n )}\n {status === \"saved\" && (\n <p className=\"mt-1 text-[11px] text-green-600 dark:text-green-400\">\n Photo updated\n </p>\n )}\n {status === \"error\" && (\n <p className=\"mt-1 text-[11px] text-destructive\">\n Could not update photo\n </p>\n )}\n </div>\n <input\n ref={fileInputRef}\n type=\"file\"\n accept=\"image/*\"\n className=\"hidden\"\n onChange={handleAvatarChange}\n />\n <button\n type=\"button\"\n disabled={!email || uploading}\n onClick={() => fileInputRef.current?.click()}\n className=\"inline-flex h-8 shrink-0 items-center justify-center rounded-md border border-border bg-background px-3 text-[12px] font-medium text-foreground transition-colors hover:bg-accent/50 disabled:cursor-not-allowed disabled:opacity-50\"\n >\n {uploading ? \"Uploading...\" : \"Change photo\"}\n </button>\n </div>\n </SettingsSection>\n );\n}\n\nexport function SettingsPanel({\n isDevMode,\n onToggleDevMode,\n showDevToggle,\n devAppUrl,\n initialSection,\n sectionRequestKey,\n}: SettingsPanelProps) {\n const { status: builder, loading: builderLoading } = useBuilderStatus();\n const connected = builder?.configured ?? false;\n const connectUrl = builder?.cliAuthUrl ?? builder?.connectUrl;\n const orgName = builder?.orgName;\n const envManaged = !!builder?.envManaged;\n const credentialSource = builder?.credentialSource;\n const builderBranchesAvailable = !!builder?.builderEnabled;\n const builderFlow = useBuilderConnectFlow({\n popupUrl: connectUrl,\n trackingSource: \"settings_panel_builder_card\",\n });\n\n // When opened via a `#secrets:<KEY>` hash, focus that specific secret input\n // inside the \"API Keys & Connections\" section.\n const [focusSecretKey, setFocusSecretKey] = useState<string | undefined>(\n undefined,\n );\n\n // Accordion: only one section open at a time (null = all closed)\n const [openSection, setOpenSection] = useState<string | null>(\n initialOpenSection,\n );\n const toggle = (id: string) =>\n setOpenSection((prev) => (prev === id ? null : id));\n\n const scrollSectionIntoView = useCallback((section: SettingsSectionId) => {\n window.requestAnimationFrame(() => {\n document.getElementById(settingsSectionDomId(section))?.scrollIntoView({\n block: \"start\",\n behavior: \"smooth\",\n });\n });\n }, []);\n\n const openSettingsSection = useCallback(\n (section: SettingsSectionId, scroll = false) => {\n setOpenSection(section);\n if (scroll) scrollSectionIntoView(section);\n },\n [scrollSectionIntoView],\n );\n\n useEffect(() => {\n const section = normalizeSettingsSection(initialSection);\n if (!section) return;\n if (section !== \"secrets\") setFocusSecretKey(undefined);\n openSettingsSection(section, true);\n }, [initialSection, sectionRequestKey, openSettingsSection]);\n\n // Support `#secrets:<KEY>` hash fragments from the onboarding CTA — opens\n // the section and focuses the matching input.\n useEffect(() => {\n if (typeof window === \"undefined\") return;\n const handleHash = () => {\n const hash = window.location.hash?.replace(/^#/, \"\") ?? \"\";\n const section = normalizeSettingsSection(hash);\n if (!section) return;\n if (hash.startsWith(\"secrets:\") || hash === \"secrets\") {\n const key = hash.slice(\"secrets:\".length);\n setFocusSecretKey(key || undefined);\n } else {\n setFocusSecretKey(undefined);\n }\n openSettingsSection(section, true);\n };\n handleHash();\n window.addEventListener(\"hashchange\", handleHash);\n return () => window.removeEventListener(\"hashchange\", handleHash);\n }, [openSettingsSection]);\n\n return (\n <div\n className=\"flex-1 min-h-0 overflow-y-auto p-3 space-y-2\"\n style={{ overflowY: \"auto\" }}\n >\n {/* Agent capability mode (App vs Code) + app link */}\n {(showDevToggle || devAppUrl) && (\n <div className=\"space-y-2 pb-2 border-b border-border mb-2\">\n {showDevToggle && (\n <SettingsSelect\n label=\"Agent mode\"\n labelAdornment={\n devAppUrl ? (\n <Tooltip>\n <TooltipTrigger asChild>\n <a\n href={devAppUrl}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n aria-label=\"Open app in new tab\"\n className=\"flex items-center text-muted-foreground hover:text-foreground\"\n >\n <IconExternalLink size={14} />\n </a>\n </TooltipTrigger>\n <TooltipContent>Open app in new tab</TooltipContent>\n </Tooltip>\n ) : undefined\n }\n value={isDevMode ? \"development\" : \"production\"}\n options={agentModeOptions}\n onValueChange={(next) => {\n const nextIsDev = next === \"development\";\n if (nextIsDev !== isDevMode) onToggleDevMode();\n }}\n />\n )}\n </div>\n )}\n\n <CapabilityStatusStrip\n isDevMode={isDevMode}\n builderConnected={connected}\n builderLoading={builderLoading}\n builderBranchesAvailable={builderBranchesAvailable}\n onOpenLlm={() => openSettingsSection(\"llm\", true)}\n />\n\n {/* Account */}\n <AccountSectionInner\n open={openSection === \"account\"}\n onToggle={() => toggle(\"account\")}\n />\n\n {/* LLM */}\n <LLMSectionInner\n builderFlow={builderFlow}\n builderLoading={builderLoading}\n connectUrl={connectUrl}\n connected={connected}\n orgName={orgName}\n envManaged={envManaged}\n credentialSource={credentialSource}\n open={openSection === \"llm\"}\n onToggle={() => toggle(\"llm\")}\n />\n\n {/* App default model */}\n <AppModelDefaultsSectionInner\n open={openSection === \"app-models\"}\n onToggle={() => toggle(\"app-models\")}\n />\n\n {/* Agent limits */}\n <AgentLimitsSectionInner\n open={openSection === \"limits\"}\n onToggle={() => toggle(\"limits\")}\n />\n\n {/* Voice transcription */}\n <SettingsSection\n icon={<IconMicrophone size={14} />}\n title=\"Voice Transcription\"\n subtitle=\"How the composer microphone turns your voice into text.\"\n open={openSection === \"voice\"}\n onToggle={() => toggle(\"voice\")}\n >\n <VoiceTranscriptionSection />\n </SettingsSection>\n\n {/* Demo mode */}\n <SettingsSection\n icon={<IconEyeOff size={14} />}\n title=\"Demo mode\"\n subtitle=\"Replace names, emails, and numbers with realistic fake data everywhere — in the UI and what the agent sees. IDs and structure are preserved so the app keeps working.\"\n open={openSection === \"demo-mode\"}\n onToggle={() => toggle(\"demo-mode\")}\n >\n <DemoModeSection />\n </SettingsSection>\n\n {/* Automations */}\n <SettingsSection\n icon={<IconBolt size={14} />}\n title=\"Automations\"\n subtitle=\"Event-triggered and scheduled automations.\"\n open={openSection === \"automations\"}\n onToggle={() => toggle(\"automations\")}\n >\n <AutomationsSection />\n </SettingsSection>\n\n {/* API Keys & Connections */}\n <SettingsSection\n id={settingsSectionDomId(\"secrets\")}\n icon={<IconKey size={14} />}\n title=\"API Keys & Connections\"\n subtitle=\"Service credentials and automation keys.\"\n open={openSection === \"secrets\"}\n onToggle={() => toggle(\"secrets\")}\n >\n <SecretsSection focusKey={focusSecretKey} />\n </SettingsSection>\n\n {/* Hosting */}\n <SettingsSection\n icon={<IconCloud size={14} />}\n title=\"Hosting\"\n subtitle=\"Deploy your app to the cloud.\"\n connected={connected}\n open={openSection === \"hosting\"}\n onToggle={() => toggle(\"hosting\")}\n >\n <div className=\"space-y-2\">\n <UseBuilderCard\n builderFlow={builderFlow}\n connectUrl={connectUrl}\n connected={connected}\n orgName={orgName}\n envManaged={envManaged}\n credentialSource={credentialSource}\n trackingSource=\"hosting_settings\"\n trackingFlow=\"hosting\"\n />\n <ManualSetupCard\n hint=\"Deploy manually to Netlify, Vercel, Cloudflare, or any Nitro-supported target.\"\n docsUrl=\"https://www.builder.io/c/docs/agent-native-deployment\"\n dim={connected}\n />\n </div>\n </SettingsSection>\n\n {/* Database */}\n <SettingsSection\n icon={<IconDatabase size={14} />}\n title=\"Database\"\n subtitle=\"Connect a cloud database for persistent storage.\"\n connected={connected}\n open={openSection === \"database\"}\n onToggle={() => toggle(\"database\")}\n >\n <div className=\"space-y-2\">\n <UseBuilderCard\n builderFlow={builderFlow}\n connectUrl={connectUrl}\n connected={connected}\n orgName={orgName}\n envManaged={envManaged}\n credentialSource={credentialSource}\n trackingSource=\"database_settings\"\n trackingFlow=\"database\"\n />\n <ManualSetupCard\n hint=\"Set DATABASE_URL in your .env to connect Neon, Supabase, Turso, or any Postgres/SQLite database.\"\n docsUrl=\"https://www.builder.io/c/docs/agent-native-database\"\n dim={connected}\n />\n </div>\n </SettingsSection>\n\n {/* File uploads */}\n <SettingsSection\n icon={<IconUpload size={14} />}\n title=\"File uploads\"\n subtitle=\"Where user-uploaded files (avatars, chat attachments) are stored.\"\n connected={connected}\n open={openSection === \"uploads\"}\n onToggle={() => toggle(\"uploads\")}\n >\n <div className=\"space-y-2\">\n <UseBuilderCard\n builderFlow={builderFlow}\n connectUrl={connectUrl}\n connected={connected}\n orgName={orgName}\n envManaged={envManaged}\n credentialSource={credentialSource}\n trackingSource=\"file_upload_settings\"\n trackingFlow=\"file_upload\"\n />\n <ManualSetupCard\n hint=\"Without a provider, files are stored as base64 in your database. Fine for dev, not recommended for production.\"\n docsUrl=\"https://www.builder.io/c/docs/agent-native-file-uploads\"\n dim={connected}\n />\n </div>\n </SettingsSection>\n\n {/* Authentication */}\n <SettingsSection\n icon={<IconShield size={14} />}\n title=\"Authentication\"\n subtitle=\"Set up user authentication and access control.\"\n connected={connected}\n open={openSection === \"auth\"}\n onToggle={() => toggle(\"auth\")}\n >\n <div className=\"space-y-2\">\n <UseBuilderCard\n builderFlow={builderFlow}\n connectUrl={connectUrl}\n connected={connected}\n orgName={orgName}\n envManaged={envManaged}\n credentialSource={credentialSource}\n trackingSource=\"auth_settings\"\n trackingFlow=\"auth\"\n />\n <ManualSetupCard\n hint=\"Configure Better Auth with BETTER_AUTH_SECRET and optional Google/GitHub OAuth providers.\"\n docsUrl=\"https://www.builder.io/c/docs/agent-native-authentication\"\n dim={connected}\n />\n </div>\n </SettingsSection>\n\n {/* Email */}\n <EmailSectionInner\n open={openSection === \"email\"}\n onToggle={() => toggle(\"email\")}\n />\n\n {/* Browser Automation */}\n <SettingsSection\n icon={<IconBrowser size={14} />}\n title=\"Browser Automation\"\n subtitle=\"Let agents control a real browser for web tasks.\"\n connected={connected}\n open={openSection === \"browser\"}\n onToggle={() => toggle(\"browser\")}\n >\n <UseBuilderCard\n builderFlow={builderFlow}\n connectUrl={connectUrl}\n connected={connected}\n orgName={orgName}\n envManaged={envManaged}\n credentialSource={credentialSource}\n trackingSource=\"browser_settings\"\n trackingFlow=\"browser_automation\"\n />\n </SettingsSection>\n\n {builderBranchesAvailable && (\n <SettingsSection\n icon={<IconGitBranch size={14} />}\n title=\"Background Agent\"\n subtitle=\"Make code changes from production mode via Builder.\"\n connected={connected}\n open={openSection === \"background\"}\n onToggle={() => toggle(\"background\")}\n >\n <UseBuilderCard\n builderFlow={builderFlow}\n connectUrl={connectUrl}\n connected={connected}\n orgName={orgName}\n envManaged={envManaged}\n credentialSource={credentialSource}\n trackingSource=\"background_agent_settings\"\n trackingFlow=\"background_agent\"\n />\n </SettingsSection>\n )}\n\n {/* Integrations */}\n <SettingsSection\n icon={<IconPlugConnected size={14} />}\n title=\"Integrations\"\n subtitle=\"Connect messaging platforms and external services.\"\n open={openSection === \"integrations\"}\n onToggle={() => toggle(\"integrations\")}\n >\n <Suspense fallback={null}>\n <IntegrationsPanel />\n </Suspense>\n </SettingsSection>\n\n {/* Usage & spend */}\n <SettingsSection\n icon={<IconCoin size={14} />}\n title=\"Usage\"\n subtitle=\"Track token consumption and estimated cost — broken down by chat, automations, and background jobs.\"\n open={openSection === \"usage\"}\n onToggle={() => toggle(\"usage\")}\n >\n <UsageSection />\n </SettingsSection>\n\n {/* A2A Agents */}\n <SettingsSection\n icon={<IconTopologyRing2 size={14} />}\n title=\"Connected Agents (A2A)\"\n subtitle=\"Manage remote agents connected via the A2A protocol.\"\n open={openSection === \"a2a\"}\n onToggle={() => toggle(\"a2a\")}\n >\n <AgentsSection />\n </SettingsSection>\n </div>\n );\n}\n"]}
1
+ {"version":3,"file":"SettingsPanel.js","sourceRoot":"","sources":["../../../src/client/settings/SettingsPanel.tsx"],"names":[],"mappings":"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","sourcesContent":["import { agentNativePath } from \"../api-path.js\";\nimport React, {\n Suspense,\n lazy,\n useState,\n useEffect,\n useCallback,\n useRef,\n} from \"react\";\nimport * as SelectPrimitive from \"@radix-ui/react-select\";\nimport {\n IconChevronDown,\n IconCheck,\n IconExternalLink,\n IconBrain,\n IconBrowser,\n IconGitBranch,\n IconCloud,\n IconDatabase,\n IconShield,\n IconPlugConnected,\n IconTopologyRing2,\n IconLoader2,\n IconUpload,\n IconCoin,\n IconMail,\n IconKey,\n IconMicrophone,\n IconEyeOff,\n IconBolt,\n IconGauge,\n IconUserCircle,\n IconApps,\n} from \"@tabler/icons-react\";\nimport { SettingsSection } from \"./SettingsSection.js\";\nimport {\n type BuilderConnectFlow,\n useBuilderConnectFlow,\n useBuilderStatus,\n} from \"./useBuilderStatus.js\";\nimport { BuilderBMark } from \"../builder-mark.js\";\nimport { AgentsSection } from \"./AgentsSection.js\";\nimport { UsageSection } from \"./UsageSection.js\";\nimport { SecretsSection } from \"./SecretsSection.js\";\nimport { VoiceTranscriptionSection } from \"./VoiceTranscriptionSection.js\";\nimport { DemoModeSection } from \"./DemoModeSection.js\";\nimport { AutomationsSection } from \"./AutomationsSection.js\";\nimport { PROVIDER_ENV_PLACEHOLDERS } from \"../../agent/engine/provider-env-vars.js\";\nimport {\n Tooltip,\n TooltipContent,\n TooltipTrigger,\n} from \"../components/ui/tooltip.js\";\nimport { useSession } from \"../use-session.js\";\nimport { uploadAvatar, useAvatarUrl } from \"../use-avatar.js\";\nimport { callAction } from \"../use-action.js\";\nimport { saveAgentEngineApiKey } from \"../agent-engine-key.js\";\n\nconst IntegrationsPanel = lazy(() =>\n import(\"../integrations/IntegrationsPanel.js\").then((m) => ({\n default: m.IntegrationsPanel,\n })),\n);\n\n// ─── Shared helpers ─────────────────────────────────────────────────────────\n\nfunction SettingsSkeleton({ lines = 3 }: { lines?: number }) {\n return (\n <div className=\"space-y-3 animate-pulse\">\n {Array.from({ length: lines }, (_, i) => (\n <div key={i} className=\"space-y-1.5\">\n <div\n className=\"h-3 rounded bg-muted-foreground/10\"\n style={{ width: i === 0 ? \"30%\" : i === 1 ? \"100%\" : \"60%\" }}\n />\n {i < 2 && (\n <div className=\"h-9 rounded-md border border-border bg-muted-foreground/5\" />\n )}\n </div>\n ))}\n </div>\n );\n}\n\ninterface SettingsSelectOption {\n value: string;\n label: string;\n description?: string;\n}\n\nconst CONTROL_STYLE = {\n fontSize: 12,\n lineHeight: 1,\n} satisfies React.CSSProperties;\n\nfunction SettingsSelect({\n label,\n labelAdornment,\n value,\n options,\n onValueChange,\n}: {\n label: string;\n labelAdornment?: React.ReactNode;\n value: string;\n options: SettingsSelectOption[];\n onValueChange: (value: string) => void;\n}) {\n const selected = options.find((option) => option.value === value);\n\n return (\n <div className=\"space-y-1.5\">\n <div className=\"flex items-center justify-between\">\n <p className=\"text-[12px] font-medium text-foreground\">{label}</p>\n {labelAdornment}\n </div>\n <SelectPrimitive.Root value={value} onValueChange={onValueChange}>\n <SelectPrimitive.Trigger\n className=\"flex h-9 w-full items-center justify-between rounded-md border border-border bg-background px-3 text-left text-[12px] text-foreground outline-none transition-colors hover:bg-accent/40 data-[placeholder]:text-muted-foreground\"\n aria-label={label}\n style={CONTROL_STYLE}\n >\n <SelectPrimitive.Value>\n {selected?.label ?? value}\n </SelectPrimitive.Value>\n <SelectPrimitive.Icon asChild>\n <IconChevronDown size={14} className=\"text-muted-foreground\" />\n </SelectPrimitive.Icon>\n </SelectPrimitive.Trigger>\n <SelectPrimitive.Portal>\n <SelectPrimitive.Content\n position=\"popper\"\n sideOffset={6}\n className=\"z-[9999] w-[var(--radix-select-trigger-width)] overflow-hidden rounded-lg border border-border bg-popover shadow-lg\"\n >\n <SelectPrimitive.Viewport className=\"p-1\">\n {options.map((option) => (\n <SelectPrimitive.Item\n key={option.value}\n value={option.value}\n className=\"relative flex w-full cursor-pointer select-none items-start gap-2 rounded-md px-8 py-2.5 text-[12px] outline-none data-[highlighted]:bg-accent/60 data-[state=checked]:bg-accent/40\"\n style={CONTROL_STYLE}\n >\n <span className=\"absolute left-2 top-2.5 flex h-4 w-4 items-center justify-center text-muted-foreground\">\n <SelectPrimitive.ItemIndicator>\n <IconCheck size={14} />\n </SelectPrimitive.ItemIndicator>\n </span>\n <div className=\"flex min-w-0 flex-col\">\n <SelectPrimitive.ItemText>\n <span className=\"text-foreground\">{option.label}</span>\n </SelectPrimitive.ItemText>\n {option.description ? (\n <span className=\"mt-0.5 text-[11px] leading-relaxed text-muted-foreground\">\n {option.description}\n </span>\n ) : null}\n </div>\n </SelectPrimitive.Item>\n ))}\n </SelectPrimitive.Viewport>\n </SelectPrimitive.Content>\n </SelectPrimitive.Portal>\n </SelectPrimitive.Root>\n </div>\n );\n}\n\n// ─── Disconnect button for the Builder card's connected state ───────────────\n//\n// Two-step confirmation: first click arms the button (\"Confirm?\"), second\n// click actually disconnects. Arm auto-reverts after 4s of idle so a user\n// who wandered off doesn't come back to a disconnect waiting for them.\n//\n// Hits /_agent-native/builder/disconnect which removes request-scoped\n// Builder credentials from app_secrets. Deployment env credentials are left\n// alone and remain as fallback. On success we dispatch\n// `agent-engine:configured-changed` so dependent cards refresh inline.\nfunction DisconnectBuilderButton() {\n const { status } = useBuilderStatus();\n const [phase, setPhase] = useState<\"idle\" | \"armed\" | \"busy\">(\"idle\");\n const [err, setErr] = useState<string | null>(null);\n const armedTimerRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n\n const clearArmedTimer = useCallback(() => {\n if (armedTimerRef.current) {\n clearTimeout(armedTimerRef.current);\n armedTimerRef.current = null;\n }\n }, []);\n\n useEffect(() => {\n return () => clearArmedTimer();\n }, [clearArmedTimer]);\n\n const performDisconnect = useCallback(async () => {\n setPhase(\"busy\");\n setErr(null);\n clearArmedTimer();\n try {\n const res = await fetch(\n agentNativePath(\"/_agent-native/builder/disconnect\"),\n {\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n },\n );\n // Parse defensively — a nitro 404 fallback returns HTML, not JSON,\n // and res.json() on that would throw.\n const text = await res.text();\n let body: {\n ok?: boolean;\n error?: string;\n warnings?: Record<string, string>;\n } = {};\n if (text) {\n try {\n body = JSON.parse(text);\n } catch {\n // Non-JSON response — likely a 404/HTML fallback.\n }\n }\n if (!res.ok) {\n throw new Error(\n body.error ||\n `Failed (${res.status}). Is your dev server up to date?`,\n );\n }\n if (body.ok !== true) {\n throw new Error(body.error || \"Disconnect didn't confirm ok\");\n }\n if (body.warnings && Object.keys(body.warnings).length > 0) {\n // Disconnect flag persisted (we only reach here when ok:true), so\n // the user IS disconnected — but some ancillary cleanup failed.\n // Log so it's visible during dev; don't block the success path.\n console.warn(\n \"[builder-disconnect] completed with warnings:\",\n body.warnings,\n );\n }\n window.dispatchEvent(new CustomEvent(\"agent-engine:configured-changed\"));\n setPhase(\"idle\");\n } catch (e) {\n setErr(e instanceof Error ? e.message : \"Disconnect failed\");\n setPhase(\"idle\");\n }\n }, [clearArmedTimer]);\n\n const handleDisconnectClick = useCallback(() => {\n if (phase === \"busy\") return;\n if (phase === \"idle\") {\n // First click — arm the button. Auto-revert after 4s to avoid a\n // stale \"confirm\" state someone else could hit by accident.\n setPhase(\"armed\");\n setErr(null);\n clearArmedTimer();\n armedTimerRef.current = setTimeout(() => {\n setPhase(\"idle\");\n armedTimerRef.current = null;\n }, 4000);\n return;\n }\n // phase === \"armed\" — user confirmed, actually disconnect.\n void performDisconnect();\n }, [phase, performDisconnect, clearArmedTimer]);\n\n const handleCancel = useCallback(() => {\n clearArmedTimer();\n setPhase(\"idle\");\n }, [clearArmedTimer]);\n\n // When only the deploy fallback is active there is nothing request-scoped\n // for this button to remove. The early return MUST come after every hook\n // above to satisfy rules-of-hooks.\n if (status?.credentialSource === \"env\") return null;\n\n if (phase === \"armed\") {\n return (\n <>\n <button\n type=\"button\"\n onClick={handleDisconnectClick}\n className=\"inline-flex items-center gap-1 rounded border border-destructive/40 bg-destructive/10 px-2 py-0.5 text-[10px] font-medium text-destructive hover:bg-destructive/20\"\n >\n Confirm disconnect\n </button>\n <button\n type=\"button\"\n onClick={handleCancel}\n className=\"inline-flex items-center gap-1 rounded border border-border px-2 py-0.5 text-[10px] text-muted-foreground hover:text-foreground hover:bg-accent/40\"\n >\n Cancel\n </button>\n </>\n );\n }\n\n return (\n <>\n <button\n type=\"button\"\n onClick={handleDisconnectClick}\n disabled={phase === \"busy\"}\n className=\"inline-flex items-center gap-1 rounded border border-border px-2 py-0.5 text-[10px] text-muted-foreground hover:text-foreground hover:bg-accent/40 disabled:opacity-60 disabled:cursor-wait\"\n aria-busy={phase === \"busy\"}\n >\n {phase === \"busy\" ? (\n <>\n <IconLoader2 size={10} className=\"animate-spin\" />\n Disconnecting…\n </>\n ) : (\n \"Disconnect\"\n )}\n </button>\n {err && <span className=\"text-[10px] text-destructive\">{err}</span>}\n </>\n );\n}\n\n// ─── \"Connect Builder.io\" card (shared across all sections) ─────────────────\n\nfunction UseBuilderCard({\n builderFlow,\n connectUrl,\n connected,\n orgName,\n envManaged,\n credentialSource,\n trackingSource = \"settings_panel_builder_card\",\n trackingFlow = \"connect_llm\",\n label = \"Connect Builder.io\",\n subtitle = \"Free credits to start — no API key needed.\",\n dim,\n}: {\n builderFlow: BuilderConnectFlow;\n connectUrl?: string;\n connected: boolean;\n orgName?: string;\n envManaged?: boolean;\n credentialSource?: \"user\" | \"org\" | \"workspace\" | \"env\";\n trackingSource?: string;\n trackingFlow?: string;\n label?: string;\n subtitle?: string;\n dim?: boolean;\n}) {\n const effectiveConnected = connected || builderFlow.configured;\n const effectiveOrgName = builderFlow.orgName ?? orgName;\n const bgClass = dim ? \"\" : \"bg-accent/30\";\n\n if (effectiveConnected) {\n return (\n <div className={`rounded-md border border-border px-2.5 py-2 ${bgClass}`}>\n <div className=\"flex items-center justify-between\">\n <div className=\"text-[11px] font-medium text-foreground\">\n Builder.io\n </div>\n <span className=\"flex items-center gap-1 text-[10px] text-green-500\">\n <IconCheck size={10} />\n Connected\n </span>\n </div>\n {effectiveOrgName && (\n <p className=\"text-[10px] text-muted-foreground mt-0.5\">\n {effectiveOrgName}\n </p>\n )}\n {envManaged ? (\n <p className=\"text-[10px] text-muted-foreground mt-1\">\n {credentialSource === \"env\"\n ? \"Deployment fallback is available. Connect your own account to override it.\"\n : \"Using your connected Builder account. Deployment fallback is still available.\"}\n </p>\n ) : null}\n {connectUrl || credentialSource !== \"env\" ? (\n <div className=\"flex items-center gap-2 mt-2.5\">\n {connectUrl && (\n <button\n type=\"button\"\n onClick={() =>\n builderFlow.start({ trackingSource, trackingFlow })\n }\n disabled={builderFlow.connecting}\n className=\"inline-flex items-center gap-1 rounded border border-border px-2 py-0.5 text-[10px] no-underline text-muted-foreground hover:text-foreground hover:bg-accent/40 disabled:opacity-60\"\n >\n {builderFlow.connecting\n ? \"Connecting...\"\n : credentialSource === \"env\"\n ? \"Connect account\"\n : \"Reconnect\"}\n <IconExternalLink size={10} />\n </button>\n )}\n {credentialSource !== \"env\" ? <DisconnectBuilderButton /> : null}\n </div>\n ) : null}\n </div>\n );\n }\n\n if (!connectUrl) return null;\n\n return (\n <button\n type=\"button\"\n onClick={() => builderFlow.start({ trackingSource, trackingFlow })}\n disabled={builderFlow.connecting}\n className={`block w-full rounded-md border border-border px-3 py-3 text-left no-underline bg-gradient-to-br from-teal-500/10 via-transparent to-transparent hover:border-foreground/30 transition-colors disabled:cursor-wait disabled:opacity-70`}\n >\n <div className=\"flex items-start gap-2.5\">\n <div className=\"flex h-7 w-7 shrink-0 items-center justify-center rounded-md bg-foreground text-background\">\n <BuilderBMark className=\"h-3.5 w-3.5\" />\n </div>\n <div className=\"flex-1 min-w-0\">\n <div className=\"flex items-center gap-1.5 flex-wrap\">\n <span className=\"text-[12px] font-semibold text-foreground\">\n {builderFlow.connecting ? \"Connecting Builder.io...\" : label}\n </span>\n {builderFlow.connecting && (\n <IconLoader2\n size={12}\n className=\"shrink-0 animate-spin text-muted-foreground\"\n />\n )}\n </div>\n <p className=\"text-[10.5px] text-muted-foreground mt-0.5 leading-snug\">\n {subtitle}\n </p>\n {builderFlow.error && (\n <p className=\"mt-1 text-[10px] text-destructive\">\n {builderFlow.error}\n </p>\n )}\n </div>\n <IconExternalLink\n size={12}\n className=\"shrink-0 text-muted-foreground mt-0.5\"\n />\n </div>\n </button>\n );\n}\n\n// ─── Manual setup card ──────────────────────────────────────────────────────\n\nfunction ManualSetupCard({\n hint,\n docsUrl,\n docsLabel = \"Read the docs\",\n children,\n dim,\n sourceBadge,\n}: {\n hint?: string;\n docsUrl?: string;\n docsLabel?: string;\n children?: React.ReactNode;\n dim?: boolean;\n /** Optional \"Connected via X\" badge shown in the header row. */\n sourceBadge?: string;\n}) {\n return (\n <div\n className={`rounded-md border border-border px-2.5 py-2 ${dim ? \"\" : \"bg-accent/30\"}`}\n >\n <div className=\"flex items-center justify-between mb-1\">\n <div className=\"text-[11px] font-medium text-foreground\">\n Set up manually\n </div>\n {sourceBadge ? (\n <span className=\"flex items-center gap-1 text-[10px] text-green-500\">\n <IconCheck size={10} />\n {sourceBadge}\n </span>\n ) : null}\n </div>\n {hint && (\n <p className=\"text-[10px] text-muted-foreground mb-1.5\">{hint}</p>\n )}\n {children}\n {docsUrl && (\n <a\n href={docsUrl}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n className=\"inline-flex items-center gap-1 mt-1.5 rounded border border-border px-2.5 py-1 text-[10px] font-medium no-underline text-muted-foreground hover:text-foreground hover:bg-accent/40\"\n >\n {docsLabel}\n <IconExternalLink size={10} />\n </a>\n )}\n </div>\n );\n}\n\n// ─── LLM helpers ────────────────────────────────────────────────────────────\n\nfunction friendlyModelName(model: string): string {\n const claude = model.match(\n /^claude-(opus|sonnet|haiku)-(\\d+)-(\\d+)(?:-\\d{8,})?$/,\n );\n if (claude) {\n const tier = claude[1][0].toUpperCase() + claude[1].slice(1);\n return `${tier} ${claude[2]}.${claude[3]}`;\n }\n if (model.startsWith(\"gpt-\")) return `GPT-${model.slice(4)}`;\n if (/^o\\d/.test(model)) return model;\n const gemini = model.match(/^gemini-(.+?)(?:-preview)?$/);\n if (gemini) {\n const parts = gemini[1]\n .split(\"-\")\n .map((s) => s[0].toUpperCase() + s.slice(1))\n .join(\" \");\n return `Gemini ${parts}${model.endsWith(\"-preview\") ? \" (preview)\" : \"\"}`;\n }\n return model;\n}\n\ntype SettingsStatus = {\n engine: string;\n source: \"env\" | \"settings\";\n envVar: string | null;\n} | null;\n\nfunction computeSourceBadge(args: {\n settingsConfigured: boolean;\n settingsStatus: SettingsStatus;\n envConfigured: boolean;\n envVar: string | undefined;\n builderConnected: boolean;\n}): string | undefined {\n const { settingsConfigured, settingsStatus } = args;\n if (args.builderConnected) return \"Connected via Builder\";\n if (settingsConfigured) {\n if (settingsStatus?.source === \"env\") {\n return `Connected via ${settingsStatus.envVar ?? args.envVar ?? \"env\"}`;\n }\n return \"Connected via template (server-side)\";\n }\n if (args.envConfigured) return `Connected via ${args.envVar ?? \"env\"}`;\n return undefined;\n}\n\nfunction latestModelsOnly(models: string[]): string[] {\n const seen = new Set<string>();\n return models.filter((m) => {\n const claude = m.match(/^claude-(opus|sonnet|haiku)-/);\n if (claude) {\n if (seen.has(claude[1])) return false;\n seen.add(claude[1]);\n return true;\n }\n const gemini = m.match(/^gemini-(\\d+(?:\\.\\d+)?)-(.+?)(?:-preview)?$/);\n if (gemini) {\n const family = gemini[2];\n if (seen.has(`gemini-${family}`)) return false;\n seen.add(`gemini-${family}`);\n return true;\n }\n return true;\n });\n}\n\n// ─── LLM Section ────────────────────────────────────────────────────────────\n\ninterface EngineInfo {\n name: string;\n label: string;\n description: string;\n defaultModel: string;\n supportedModels: string[];\n requiredEnvVars: string[];\n installPackage?: string;\n packageInstalled?: boolean;\n}\n\nconst PROVIDER_DOCS: Record<string, string> = {\n anthropic: \"https://console.anthropic.com/settings/keys\",\n \"ai-sdk:anthropic\": \"https://console.anthropic.com/settings/keys\",\n \"ai-sdk:openai\": \"https://platform.openai.com/api-keys\",\n \"ai-sdk:google\": \"https://aistudio.google.com/apikey\",\n \"ai-sdk:openrouter\": \"https://openrouter.ai/keys\",\n \"ai-sdk:groq\": \"https://console.groq.com/keys\",\n \"ai-sdk:mistral\": \"https://console.mistral.ai/api-keys/\",\n \"ai-sdk:cohere\": \"https://dashboard.cohere.com/api-keys\",\n};\n\nfunction LLMSectionInner({\n builderFlow,\n builderLoading,\n connectUrl,\n connected,\n orgName,\n envManaged,\n credentialSource,\n open,\n onToggle,\n}: {\n builderFlow: BuilderConnectFlow;\n builderLoading?: boolean;\n connectUrl?: string;\n connected: boolean;\n orgName?: string;\n envManaged?: boolean;\n credentialSource?: \"user\" | \"org\" | \"workspace\" | \"env\";\n open?: boolean;\n onToggle?: () => void;\n}) {\n const [envKeys, setEnvKeys] = useState<\n Array<{ key: string; configured: boolean }>\n >([]);\n const [apiKey, setApiKey] = useState(\"\");\n const [saving, setSaving] = useState(false);\n const [saved, setSaved] = useState(false);\n const [engines, setEngines] = useState<EngineInfo[]>([]);\n const [currentEngine, setCurrentEngine] = useState(\"anthropic\");\n const [currentModel, setCurrentModel] = useState(\"\");\n const [selectedEngine, setSelectedEngine] = useState(\"anthropic\");\n const [selectedModel, setSelectedModel] = useState(\"\");\n const [applyNote, setApplyNote] = useState(false);\n const [testing, setTesting] = useState(false);\n const [testResult, setTestResult] = useState<\n | { ok: true; latencyMs: number; model: string }\n | { ok: false; error: string }\n | null\n >(null);\n const [settingsStatus, setSettingsStatus] = useState<SettingsStatus>(null);\n const [disconnectError, setDisconnectError] = useState<string | null>(null);\n const [envLoaded, setEnvLoaded] = useState(false);\n const [enginesLoaded, setEnginesLoaded] = useState(false);\n const [statusLoaded, setStatusLoaded] = useState(false);\n\n const initialLoading =\n !envLoaded || !enginesLoaded || !statusLoaded || !!builderLoading;\n\n useEffect(() => {\n fetch(agentNativePath(\"/_agent-native/env-status\"))\n .then((r) => (r.ok ? r.json() : []))\n .then(setEnvKeys)\n .catch(() => {})\n .finally(() => setEnvLoaded(true));\n }, [saved]);\n\n const notifyConfigChanged = useCallback(() => {\n window.dispatchEvent(new CustomEvent(\"agent-engine:configured-changed\"));\n }, []);\n\n const refreshSettingsStatus = useCallback(() => {\n fetch(agentNativePath(\"/_agent-native/agent-engine/status\"))\n .then((r) => (r.ok ? r.json() : null))\n .then((data) => {\n if (\n data?.configured &&\n typeof data.engine === \"string\" &&\n (data.source === \"env\" || data.source === \"settings\")\n ) {\n setSettingsStatus({\n engine: data.engine,\n source: data.source,\n envVar: typeof data.envVar === \"string\" ? data.envVar : null,\n });\n } else {\n setSettingsStatus(null);\n }\n })\n .catch(() => {})\n .finally(() => setStatusLoaded(true));\n }, []);\n\n useEffect(() => {\n refreshSettingsStatus();\n }, [refreshSettingsStatus]);\n\n useEffect(() => {\n callAction(\"manage-agent-engine\" as any, { action: \"list\" } as any)\n .then((data) => {\n if (!data) return;\n const engineData = data as {\n engines?: EngineInfo[];\n current?: { engine?: string; model?: string };\n };\n setEngines(engineData.engines ?? []);\n const cur = engineData.current ?? {};\n setCurrentEngine(cur.engine ?? \"anthropic\");\n setCurrentModel(cur.model ?? \"\");\n setSelectedEngine(cur.engine ?? \"anthropic\");\n setSelectedModel(cur.model ?? \"\");\n })\n .catch(() => {})\n .finally(() => setEnginesLoaded(true));\n }, []);\n\n const selectedEngineInfo = engines.find((e) => e.name === selectedEngine);\n const envVar = selectedEngineInfo?.requiredEnvVars?.[0];\n const selectedEnginePackageInstalled =\n selectedEngineInfo?.packageInstalled !== false;\n const envConfigured = envVar\n ? (envKeys.find((k) => k.key === envVar)?.configured ?? false)\n : false;\n const settingsConfigured =\n settingsStatus != null && settingsStatus.engine === currentEngine;\n const builderConnected = connected || builderFlow.configured;\n const anyKeyConfigured =\n builderConnected ||\n (selectedEnginePackageInstalled && (envConfigured || settingsConfigured));\n const sourceBadge = computeSourceBadge({\n settingsConfigured,\n settingsStatus,\n envConfigured,\n envVar,\n builderConnected,\n });\n\n const engineChanged =\n selectedEngine !== currentEngine || selectedModel !== currentModel;\n\n // Hide the Anthropic-via-AI-SDK alias (redundant with the native entry)\n // and Ollama (no API key to set here). The currently-selected engine is\n // always kept so a stale setting doesn't vanish from the picker.\n const providerOptions: SettingsSelectOption[] = engines\n .filter(\n (e) =>\n e.name === selectedEngine ||\n (e.name !== \"ai-sdk:anthropic\" && e.name !== \"ai-sdk:ollama\"),\n )\n .map((e) => ({ value: e.name, label: e.label }));\n\n const modelOptions: SettingsSelectOption[] = latestModelsOnly(\n selectedEngineInfo?.supportedModels ?? [],\n ).map((m) => ({ value: m, label: friendlyModelName(m) }));\n\n const handleSave = async () => {\n if (!apiKey.trim() || !envVar) return;\n setSaving(true);\n try {\n await saveAgentEngineApiKey({ key: envVar, apiKey });\n setSaved(true);\n setApiKey(\"\");\n refreshSettingsStatus();\n notifyConfigChanged();\n setTimeout(() => setSaved(false), 2000);\n } finally {\n setSaving(false);\n }\n };\n\n const handleDisconnect = async () => {\n setDisconnectError(null);\n try {\n const res = await fetch(\n agentNativePath(\"/_agent-native/agent-engine/disconnect\"),\n {\n method: \"POST\",\n },\n );\n if (res.ok) {\n setTestResult(null);\n setApplyNote(false);\n refreshSettingsStatus();\n notifyConfigChanged();\n return;\n }\n const body = (await res.json().catch(() => null)) as {\n error?: string;\n } | null;\n setDisconnectError(\n body?.error ??\n (res.status === 401\n ? \"You must be signed in to disconnect.\"\n : `Disconnect failed (HTTP ${res.status})`),\n );\n } catch (err) {\n setDisconnectError(err instanceof Error ? err.message : String(err));\n }\n };\n\n const handleTest = async () => {\n setTesting(true);\n setTestResult(null);\n try {\n const data = await callAction(\n \"manage-agent-engine\" as any,\n {\n action: \"test\",\n engine: selectedEngine,\n model: selectedModel || selectedEngineInfo?.defaultModel,\n } as any,\n );\n // Older action paths wrapped tool output in { result }. Accept either\n // shape while the action route normalizes JSON-string script output.\n const parsed =\n typeof data === \"string\"\n ? JSON.parse(data)\n : typeof data?.result === \"string\"\n ? JSON.parse(data.result)\n : data;\n if (parsed?.ok) {\n setTestResult({\n ok: true,\n latencyMs: parsed.latencyMs ?? 0,\n model: parsed.model ?? selectedModel,\n });\n } else {\n setTestResult({\n ok: false,\n error: parsed?.error ?? \"Test failed (no error message)\",\n });\n }\n } catch (err) {\n setTestResult({\n ok: false,\n error: err instanceof Error ? err.message : String(err),\n });\n } finally {\n setTesting(false);\n }\n };\n\n const handleApply = async () => {\n try {\n const res = await fetch(\n agentNativePath(\"/_agent-native/actions/manage-agent-engine\"),\n {\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n body: JSON.stringify({\n action: \"set\",\n engine: selectedEngine,\n model: selectedModel,\n }),\n },\n );\n if (res.ok) {\n setCurrentEngine(selectedEngine);\n setCurrentModel(selectedModel);\n setApplyNote(true);\n refreshSettingsStatus();\n notifyConfigChanged();\n setTimeout(() => setApplyNote(false), 4000);\n }\n } catch {}\n };\n\n return (\n <SettingsSection\n icon={<IconBrain size={14} />}\n title=\"LLM\"\n subtitle=\"Connect any major LLM — Claude, GPT, Gemini, and more.\"\n required\n connected={initialLoading ? undefined : anyKeyConfigured}\n open={open}\n onToggle={onToggle}\n >\n {initialLoading ? (\n <SettingsSkeleton lines={3} />\n ) : (\n <div className=\"space-y-2\">\n <UseBuilderCard\n builderFlow={builderFlow}\n connectUrl={connectUrl}\n connected={connected}\n orgName={orgName}\n envManaged={envManaged}\n credentialSource={credentialSource}\n trackingSource=\"llm_settings\"\n trackingFlow=\"connect_llm\"\n label=\"Connect Builder.io\"\n />\n {!builderConnected && (\n <ManualSetupCard\n hint=\"Choose your AI provider and model.\"\n docsUrl={PROVIDER_DOCS[selectedEngine]}\n sourceBadge={sourceBadge}\n docsLabel=\"Get an API key\"\n >\n <div className=\"space-y-2 mb-1\">\n <SettingsSelect\n label=\"Provider\"\n value={selectedEngine}\n options={providerOptions}\n onValueChange={(val) => {\n setSelectedEngine(val);\n const info = engines.find((e) => e.name === val);\n setSelectedModel(info?.defaultModel ?? \"\");\n setApiKey(\"\");\n }}\n />\n\n {/* Free-form input so OpenRouter/Ollama custom model IDs can\n be typed — the registry's supportedModels is only suggestions. */}\n <div className=\"space-y-1.5\">\n <p className=\"text-[12px] font-medium text-foreground\">\n Model\n </p>\n <input\n type=\"text\"\n list={`model-suggestions-${selectedEngine}`}\n value={selectedModel}\n onChange={(e) => setSelectedModel(e.target.value)}\n placeholder={\n selectedEngineInfo?.defaultModel ?? \"e.g. model-id\"\n }\n spellCheck={false}\n autoComplete=\"off\"\n className=\"flex h-9 w-full rounded-md border border-border bg-background px-3 text-[12px] text-foreground outline-none transition-colors hover:bg-accent/40 focus:ring-1 focus:ring-accent placeholder:text-muted-foreground/50\"\n style={CONTROL_STYLE}\n />\n {modelOptions.length > 0 && (\n <datalist id={`model-suggestions-${selectedEngine}`}>\n {modelOptions.map((opt) => (\n <option\n key={opt.value}\n value={opt.value}\n label={opt.label}\n />\n ))}\n </datalist>\n )}\n </div>\n\n {envVar && envConfigured ? (\n <div className=\"flex items-center gap-1.5 text-[10px] text-green-500\">\n <IconCheck size={10} />\n {envVar} configured\n </div>\n ) : envVar ? (\n <div className=\"flex gap-1.5\">\n <input\n type=\"password\"\n value={apiKey}\n onChange={(e) => setApiKey(e.target.value)}\n onKeyDown={(e) => {\n if (e.key === \"Enter\") handleSave();\n }}\n placeholder={PROVIDER_ENV_PLACEHOLDERS[envVar] ?? \"...\"}\n className=\"flex-1 rounded border border-border bg-background px-2 py-1 text-[11px] text-foreground outline-none placeholder:text-muted-foreground/50 focus:ring-1 focus:ring-accent\"\n />\n <button\n onClick={handleSave}\n disabled={!apiKey.trim() || saving}\n className=\"rounded bg-accent px-2 py-1 text-[10px] font-medium text-foreground hover:bg-accent/80 disabled:opacity-40\"\n >\n {saving ? (\n <IconLoader2 size={10} className=\"animate-spin\" />\n ) : saved ? (\n <IconCheck size={10} />\n ) : (\n \"Save\"\n )}\n </button>\n </div>\n ) : null}\n\n <div className=\"flex items-center gap-2\">\n <button\n onClick={handleTest}\n disabled={testing}\n className=\"rounded border border-border px-2.5 py-1 text-[10px] font-medium text-foreground hover:bg-accent/40 disabled:opacity-40\"\n >\n {testing ? (\n <span className=\"flex items-center gap-1\">\n <IconLoader2 size={10} className=\"animate-spin\" />\n Testing…\n </span>\n ) : (\n \"Test\"\n )}\n </button>\n {engineChanged && (\n <button\n onClick={handleApply}\n className=\"rounded bg-accent px-2.5 py-1 text-[10px] font-medium text-foreground hover:bg-accent/80\"\n >\n Apply\n </button>\n )}\n {settingsStatus != null && (\n <Tooltip>\n <TooltipTrigger asChild>\n <button\n onClick={handleDisconnect}\n className=\"ml-auto rounded border border-border px-2.5 py-1 text-[10px] font-medium text-muted-foreground hover:bg-destructive/10 hover:text-destructive hover:border-destructive/40\"\n >\n Disconnect\n </button>\n </TooltipTrigger>\n <TooltipContent>\n Clear the saved engine — the app will fall back to the\n default until you re-apply.\n </TooltipContent>\n </Tooltip>\n )}\n </div>\n {testResult && testResult.ok && (\n <p className=\"flex items-center gap-1 text-[10px] text-green-500\">\n <IconCheck size={10} />\n Test passed — {testResult.latencyMs}ms\n </p>\n )}\n {testResult && testResult.ok === false && (\n <p className=\"text-[10px] text-destructive\">\n Test failed: {testResult.error}\n </p>\n )}\n {disconnectError && (\n <p className=\"text-[10px] text-destructive\">\n Disconnect failed: {disconnectError}\n </p>\n )}\n {applyNote && (\n <p className=\"text-[10px] text-muted-foreground\">\n Changes take effect on next conversation\n </p>\n )}\n </div>\n </ManualSetupCard>\n )}\n </div>\n )}\n </SettingsSection>\n );\n}\n\n// ─── App Default Model Section ──────────────────────────────────────────────\n\ninterface AppModelDefaultEngine extends EngineInfo {\n configured: boolean;\n}\n\ninterface AppModelDefaultsResponse {\n appId: string;\n engine: string | null;\n model: string | null;\n scope: \"org\" | \"user\" | \"default\";\n source: \"org\" | \"user\" | \"default\";\n canUpdate: boolean;\n orgId?: string | null;\n orgName?: string | null;\n role?: string | null;\n engines: AppModelDefaultEngine[];\n}\n\nfunction friendlyAppName(appId: string): string {\n return appId\n .split(\"-\")\n .filter(Boolean)\n .map((part) => part[0]?.toUpperCase() + part.slice(1))\n .join(\" \");\n}\n\nfunction AppModelDefaultsSectionInner({\n open,\n onToggle,\n}: {\n open?: boolean;\n onToggle?: () => void;\n}) {\n const [settings, setSettings] = useState<AppModelDefaultsResponse | null>(\n null,\n );\n const [selectedEngine, setSelectedEngine] = useState(\"\");\n const [selectedModel, setSelectedModel] = useState(\"\");\n const [loading, setLoading] = useState(true);\n const [saving, setSaving] = useState(false);\n const [saved, setSaved] = useState(false);\n const [error, setError] = useState<string | null>(null);\n\n const load = useCallback(() => {\n let cancelled = false;\n setLoading(true);\n fetch(agentNativePath(\"/_agent-native/agent-model-defaults\"))\n .then((r) => (r.ok ? r.json() : null))\n .then((data: AppModelDefaultsResponse | null) => {\n if (cancelled || !data) return;\n setSettings(data);\n const firstConfigured =\n data.engines.find((engine) => engine.configured) ?? data.engines[0];\n const nextEngine = data.engine ?? firstConfigured?.name ?? \"\";\n const nextEngineInfo =\n data.engines.find((engine) => engine.name === nextEngine) ??\n firstConfigured;\n setSelectedEngine(nextEngine);\n setSelectedModel(data.model ?? nextEngineInfo?.defaultModel ?? \"\");\n })\n .catch(() => {})\n .finally(() => {\n if (!cancelled) setLoading(false);\n });\n return () => {\n cancelled = true;\n };\n }, []);\n\n useEffect(() => load(), [load]);\n\n const selectedEngineInfo =\n settings?.engines.find((engine) => engine.name === selectedEngine) ?? null;\n const engineOptions: SettingsSelectOption[] = (settings?.engines ?? [])\n .filter(\n (engine) =>\n engine.name === selectedEngine ||\n (engine.name !== \"ai-sdk:anthropic\" && engine.name !== \"ai-sdk:ollama\"),\n )\n .map((engine) => ({\n value: engine.name,\n label:\n engine.name === \"builder\"\n ? \"Builder.io Gateway\"\n : engine.label || engine.name,\n description: engine.configured\n ? \"Configured for this workspace\"\n : engine.packageInstalled === false\n ? `Install ${engine.installPackage ?? \"the provider packages\"} to use this provider`\n : \"Credentials not detected yet\",\n }));\n const modelOptions: SettingsSelectOption[] = latestModelsOnly(\n selectedEngineInfo?.supportedModels ?? [],\n ).map((model) => ({ value: model, label: friendlyModelName(model) }));\n const hasPendingChange =\n !!settings &&\n settings.canUpdate &&\n !!selectedEngine &&\n !!selectedModel.trim() &&\n (selectedEngine !== settings.engine ||\n selectedModel.trim() !== settings.model);\n const hasAppDefault = settings?.source !== \"default\";\n const scopeLabel =\n settings?.scope === \"org\"\n ? settings.orgName\n ? `${settings.orgName} organization`\n : \"organization\"\n : \"your account\";\n\n const notifyChanged = () => {\n window.dispatchEvent(new CustomEvent(\"agent-engine:configured-changed\"));\n };\n\n const save = async () => {\n if (!hasPendingChange) return;\n setSaving(true);\n setSaved(false);\n setError(null);\n try {\n const res = await fetch(\n agentNativePath(\"/_agent-native/agent-model-defaults\"),\n {\n method: \"PUT\",\n headers: { \"Content-Type\": \"application/json\" },\n body: JSON.stringify({\n engine: selectedEngine,\n model: selectedModel.trim(),\n }),\n },\n );\n const body = await res.json().catch(() => ({}));\n if (!res.ok)\n throw new Error(body?.error ?? `Save failed (${res.status})`);\n const next = body as AppModelDefaultsResponse;\n setSettings(next);\n setSelectedEngine(next.engine ?? selectedEngine);\n setSelectedModel(next.model ?? selectedModel.trim());\n setSaved(true);\n notifyChanged();\n setTimeout(() => setSaved(false), 2000);\n } catch (err) {\n setError(err instanceof Error ? err.message : \"Save failed\");\n } finally {\n setSaving(false);\n }\n };\n\n const reset = async () => {\n if (!settings?.canUpdate || !hasAppDefault) return;\n setSaving(true);\n setSaved(false);\n setError(null);\n try {\n const res = await fetch(\n agentNativePath(\"/_agent-native/agent-model-defaults\"),\n { method: \"DELETE\" },\n );\n const body = await res.json().catch(() => ({}));\n if (!res.ok)\n throw new Error(body?.error ?? `Reset failed (${res.status})`);\n const next = body as AppModelDefaultsResponse;\n setSettings(next);\n const fallback = next.engines.find((engine) => engine.configured);\n setSelectedEngine(next.engine ?? fallback?.name ?? selectedEngine);\n setSelectedModel(next.model ?? fallback?.defaultModel ?? selectedModel);\n notifyChanged();\n } catch (err) {\n setError(err instanceof Error ? err.message : \"Reset failed\");\n } finally {\n setSaving(false);\n }\n };\n\n return (\n <SettingsSection\n id={settingsSectionDomId(\"app-models\")}\n icon={<IconApps size={14} />}\n title=\"App Default Model\"\n subtitle=\"Choose the default model for this app/template when no one-off composer model is selected.\"\n connected={loading ? undefined : hasAppDefault}\n open={open}\n onToggle={onToggle}\n >\n {loading ? (\n <SettingsSkeleton lines={2} />\n ) : settings ? (\n <div className=\"space-y-2\">\n <div className=\"rounded-md border border-border bg-accent/20 px-2.5 py-2\">\n <div className=\"mb-2 flex items-center justify-between gap-2\">\n <div className=\"min-w-0\">\n <p className=\"truncate text-[11px] font-medium text-foreground\">\n {friendlyAppName(settings.appId) || \"This app\"}\n </p>\n <p className=\"mt-0.5 text-[10px] text-muted-foreground\">\n {hasAppDefault\n ? `Applies to ${scopeLabel}.`\n : \"Using the global LLM default.\"}\n </p>\n </div>\n <span className=\"shrink-0 rounded-full bg-background px-2 py-0.5 text-[10px] font-medium text-muted-foreground\">\n {settings.source}\n </span>\n </div>\n\n <div className=\"space-y-2\">\n <SettingsSelect\n label=\"Provider\"\n value={selectedEngine}\n options={engineOptions}\n onValueChange={(value) => {\n setSelectedEngine(value);\n const info = settings.engines.find(\n (engine) => engine.name === value,\n );\n setSelectedModel(info?.defaultModel ?? \"\");\n setError(null);\n }}\n />\n\n <div className=\"space-y-1.5\">\n <p className=\"text-[12px] font-medium text-foreground\">Model</p>\n <input\n type=\"text\"\n list={`app-model-suggestions-${selectedEngine}`}\n value={selectedModel}\n disabled={!settings.canUpdate || saving}\n onChange={(event) => {\n setSelectedModel(event.target.value);\n setError(null);\n }}\n onKeyDown={(event) => {\n if (event.key === \"Enter\" && hasPendingChange) void save();\n }}\n placeholder={selectedEngineInfo?.defaultModel ?? \"model-id\"}\n spellCheck={false}\n autoComplete=\"off\"\n className=\"flex h-9 w-full rounded-md border border-border bg-background px-3 text-[12px] text-foreground outline-none transition-colors hover:bg-accent/40 focus:ring-1 focus:ring-accent placeholder:text-muted-foreground/50 disabled:opacity-60\"\n style={CONTROL_STYLE}\n />\n {modelOptions.length > 0 && (\n <datalist id={`app-model-suggestions-${selectedEngine}`}>\n {modelOptions.map((option) => (\n <option\n key={option.value}\n value={option.value}\n label={option.label}\n />\n ))}\n </datalist>\n )}\n </div>\n\n <div className=\"flex items-center gap-1.5\">\n <button\n type=\"button\"\n onClick={save}\n disabled={!hasPendingChange || saving}\n className=\"inline-flex h-8 items-center gap-1 rounded bg-accent px-2.5 text-[10px] font-medium text-foreground hover:bg-accent/80 disabled:opacity-40\"\n >\n {saving ? (\n <IconLoader2 size={10} className=\"animate-spin\" />\n ) : saved ? (\n <IconCheck size={10} />\n ) : (\n \"Save\"\n )}\n </button>\n <button\n type=\"button\"\n onClick={reset}\n disabled={!settings.canUpdate || !hasAppDefault || saving}\n className=\"h-8 rounded border border-border px-2.5 text-[10px] font-medium text-muted-foreground hover:bg-accent/40 hover:text-foreground disabled:opacity-40\"\n >\n Reset\n </button>\n </div>\n </div>\n\n {!settings.canUpdate && (\n <p className=\"mt-2 text-[10px] text-muted-foreground\">\n Only organization owners and admins can change app model\n defaults.\n </p>\n )}\n {selectedEngineInfo?.packageInstalled === false ? (\n <p className=\"mt-2 text-[10px] text-muted-foreground\">\n This app does not include the optional runtime packages for this\n provider.\n </p>\n ) : selectedEngineInfo && !selectedEngineInfo.configured ? (\n <p className=\"mt-2 text-[10px] text-muted-foreground\">\n Credentials for this provider were not detected; runtime will\n fall back if the model cannot be used.\n </p>\n ) : null}\n {error && (\n <p className=\"mt-2 text-[10px] text-destructive\">{error}</p>\n )}\n </div>\n </div>\n ) : (\n <p className=\"text-[10px] text-muted-foreground\">\n App model defaults are unavailable.\n </p>\n )}\n </SettingsSection>\n );\n}\n\n// ─── Email Section ──────────────────────────────────────────────────────────\n\nfunction EmailSectionInner({\n open,\n onToggle,\n}: {\n open?: boolean;\n onToggle?: () => void;\n}) {\n const [envKeys, setEnvKeys] = useState<\n Array<{ key: string; configured: boolean }>\n >([]);\n const [resendKey, setResendKey] = useState(\"\");\n const [sendgridKey, setSendgridKey] = useState(\"\");\n const [fromAddr, setFromAddr] = useState(\"\");\n const [saving, setSaving] = useState(false);\n const [saved, setSaved] = useState(false);\n const [emailProvider, setEmailProvider] = useState<\"resend\" | \"sendgrid\">(\n \"resend\",\n );\n const [envLoaded, setEnvLoaded] = useState(false);\n\n useEffect(() => {\n fetch(agentNativePath(\"/_agent-native/env-status\"))\n .then((r) => (r.ok ? r.json() : []))\n .then(setEnvKeys)\n .catch(() => {})\n .finally(() => setEnvLoaded(true));\n }, [saved]);\n\n const resendConfigured =\n envKeys.find((k) => k.key === \"RESEND_API_KEY\")?.configured ?? false;\n const sendgridConfigured =\n envKeys.find((k) => k.key === \"SENDGRID_API_KEY\")?.configured ?? false;\n const fromConfigured =\n envKeys.find((k) => k.key === \"EMAIL_FROM\")?.configured ?? false;\n const anyConfigured = resendConfigured || sendgridConfigured;\n\n useEffect(() => {\n if (sendgridConfigured && !resendConfigured) {\n setEmailProvider(\"sendgrid\");\n }\n }, [resendConfigured, sendgridConfigured]);\n\n const save = async (vars: Array<{ key: string; value: string }>) => {\n setSaving(true);\n try {\n const res = await fetch(agentNativePath(\"/_agent-native/env-vars\"), {\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n body: JSON.stringify({ vars }),\n });\n if (res.ok) {\n setSaved(true);\n setResendKey(\"\");\n setSendgridKey(\"\");\n setFromAddr(\"\");\n setTimeout(() => setSaved(false), 2000);\n }\n } finally {\n setSaving(false);\n }\n };\n\n const saveResend = () => {\n const vars: Array<{ key: string; value: string }> = [];\n if (resendKey.trim())\n vars.push({ key: \"RESEND_API_KEY\", value: resendKey.trim() });\n if (fromAddr.trim())\n vars.push({ key: \"EMAIL_FROM\", value: fromAddr.trim() });\n if (vars.length) save(vars);\n };\n\n const saveSendgrid = () => {\n const vars: Array<{ key: string; value: string }> = [];\n if (sendgridKey.trim())\n vars.push({ key: \"SENDGRID_API_KEY\", value: sendgridKey.trim() });\n if (fromAddr.trim())\n vars.push({ key: \"EMAIL_FROM\", value: fromAddr.trim() });\n if (vars.length) save(vars);\n };\n\n return (\n <SettingsSection\n icon={<IconMail size={14} />}\n title=\"Email\"\n subtitle=\"Needed before deploy for password resets, team invitations, and share notifications. Local development can run without it.\"\n connected={!envLoaded ? undefined : anyConfigured}\n open={open}\n onToggle={onToggle}\n >\n {!envLoaded ? (\n <SettingsSkeleton lines={2} />\n ) : (\n <div className=\"space-y-2\">\n <label className=\"block space-y-1\">\n <span className=\"text-[10px] uppercase tracking-wide text-muted-foreground\">\n Provider\n </span>\n <select\n value={emailProvider}\n onChange={(e) =>\n setEmailProvider(e.target.value as \"resend\" | \"sendgrid\")\n }\n className=\"w-full rounded border border-border bg-background px-2 py-1 text-[11px] text-foreground outline-none focus:ring-1 focus:ring-accent\"\n >\n <option value=\"resend\">Resend</option>\n <option value=\"sendgrid\">SendGrid</option>\n </select>\n </label>\n\n {emailProvider === \"resend\" ? (\n <ManualSetupCard\n hint=\"Use Resend for transactional email.\"\n docsUrl=\"https://resend.com/api-keys\"\n docsLabel=\"Get a Resend key\"\n >\n {resendConfigured ? (\n <div className=\"mb-1 flex items-center gap-1.5 text-[10px] text-green-500\">\n <IconCheck size={10} />\n RESEND_API_KEY configured\n </div>\n ) : (\n <div className=\"mb-1 flex gap-1.5\">\n <input\n type=\"password\"\n value={resendKey}\n onChange={(e) => setResendKey(e.target.value)}\n onKeyDown={(e) => {\n if (e.key === \"Enter\") saveResend();\n }}\n placeholder=\"re_...\"\n className=\"flex-1 rounded border border-border bg-background px-2 py-1 text-[11px] text-foreground outline-none placeholder:text-muted-foreground/50 focus:ring-1 focus:ring-accent\"\n />\n <button\n onClick={saveResend}\n disabled={!resendKey.trim() || saving}\n className=\"rounded bg-accent px-2 py-1 text-[10px] font-medium text-foreground hover:bg-accent/80 disabled:opacity-40\"\n >\n {saving ? (\n <IconLoader2 size={10} className=\"animate-spin\" />\n ) : saved ? (\n <IconCheck size={10} />\n ) : (\n \"Save\"\n )}\n </button>\n </div>\n )}\n {fromConfigured ? (\n <div className=\"flex items-center gap-1.5 text-[10px] text-green-500\">\n <IconCheck size={10} />\n EMAIL_FROM configured\n </div>\n ) : (\n <div className=\"flex gap-1.5\">\n <input\n type=\"text\"\n value={fromAddr}\n onChange={(e) => setFromAddr(e.target.value)}\n onKeyDown={(e) => {\n if (e.key === \"Enter\") saveResend();\n }}\n placeholder=\"From address - e.g. Acme <hi@acme.com>\"\n className=\"flex-1 rounded border border-border bg-background px-2 py-1 text-[11px] text-foreground outline-none placeholder:text-muted-foreground/50 focus:ring-1 focus:ring-accent\"\n />\n {!resendConfigured ? null : (\n <button\n onClick={saveResend}\n disabled={!fromAddr.trim() || saving}\n className=\"rounded bg-accent px-2 py-1 text-[10px] font-medium text-foreground hover:bg-accent/80 disabled:opacity-40\"\n >\n {saving ? (\n <IconLoader2 size={10} className=\"animate-spin\" />\n ) : saved ? (\n <IconCheck size={10} />\n ) : (\n \"Save\"\n )}\n </button>\n )}\n </div>\n )}\n </ManualSetupCard>\n ) : (\n <ManualSetupCard\n hint=\"Use SendGrid for transactional email. SendGrid requires a verified from address.\"\n docsUrl=\"https://app.sendgrid.com/settings/api_keys\"\n docsLabel=\"Get a SendGrid key\"\n >\n {sendgridConfigured ? (\n <div className=\"mb-1 flex items-center gap-1.5 text-[10px] text-green-500\">\n <IconCheck size={10} />\n SENDGRID_API_KEY configured\n </div>\n ) : (\n <div className=\"mb-1 flex gap-1.5\">\n <input\n type=\"password\"\n value={sendgridKey}\n onChange={(e) => setSendgridKey(e.target.value)}\n onKeyDown={(e) => {\n if (e.key === \"Enter\") saveSendgrid();\n }}\n placeholder=\"SG....\"\n className=\"flex-1 rounded border border-border bg-background px-2 py-1 text-[11px] text-foreground outline-none placeholder:text-muted-foreground/50 focus:ring-1 focus:ring-accent\"\n />\n <button\n onClick={saveSendgrid}\n disabled={!sendgridKey.trim() || saving}\n className=\"rounded bg-accent px-2 py-1 text-[10px] font-medium text-foreground hover:bg-accent/80 disabled:opacity-40\"\n >\n {saving ? (\n <IconLoader2 size={10} className=\"animate-spin\" />\n ) : saved ? (\n <IconCheck size={10} />\n ) : (\n \"Save\"\n )}\n </button>\n </div>\n )}\n {fromConfigured ? (\n <div className=\"flex items-center gap-1.5 text-[10px] text-green-500\">\n <IconCheck size={10} />\n EMAIL_FROM configured\n </div>\n ) : (\n <div className=\"flex gap-1.5\">\n <input\n type=\"text\"\n value={fromAddr}\n onChange={(e) => setFromAddr(e.target.value)}\n onKeyDown={(e) => {\n if (e.key === \"Enter\") saveSendgrid();\n }}\n placeholder=\"From address - e.g. Acme <hi@acme.com>\"\n className=\"flex-1 rounded border border-border bg-background px-2 py-1 text-[11px] text-foreground outline-none placeholder:text-muted-foreground/50 focus:ring-1 focus:ring-accent\"\n />\n {!sendgridConfigured ? null : (\n <button\n onClick={saveSendgrid}\n disabled={!fromAddr.trim() || saving}\n className=\"rounded bg-accent px-2 py-1 text-[10px] font-medium text-foreground hover:bg-accent/80 disabled:opacity-40\"\n >\n {saving ? (\n <IconLoader2 size={10} className=\"animate-spin\" />\n ) : saved ? (\n <IconCheck size={10} />\n ) : (\n \"Save\"\n )}\n </button>\n )}\n </div>\n )}\n </ManualSetupCard>\n )}\n </div>\n )}\n </SettingsSection>\n );\n}\n\n// ─── Agent Limits Section ──────────────────────────────────────────────────\n\ninterface AgentLoopSettingsResponse {\n maxIterations: number;\n defaultMaxIterations: number;\n minMaxIterations: number;\n maxMaxIterations: number;\n scope: \"org\" | \"user\" | \"default\";\n source: \"org\" | \"user\" | \"env\" | \"default\";\n canUpdate: boolean;\n orgName?: string | null;\n role?: string | null;\n}\n\nfunction AgentLimitsSectionInner({\n open,\n onToggle,\n}: {\n open?: boolean;\n onToggle?: () => void;\n}) {\n const [settings, setSettings] = useState<AgentLoopSettingsResponse | null>(\n null,\n );\n const [value, setValue] = useState(\"\");\n const [loading, setLoading] = useState(true);\n const [saving, setSaving] = useState(false);\n const [saved, setSaved] = useState(false);\n const [error, setError] = useState<string | null>(null);\n\n const load = useCallback(() => {\n let cancelled = false;\n setLoading(true);\n fetch(agentNativePath(\"/_agent-native/agent-loop-settings\"))\n .then((r) => (r.ok ? r.json() : null))\n .then((data: AgentLoopSettingsResponse | null) => {\n if (cancelled || !data) return;\n setSettings(data);\n setValue(String(data.maxIterations));\n })\n .catch(() => {})\n .finally(() => {\n if (!cancelled) setLoading(false);\n });\n return () => {\n cancelled = true;\n };\n }, []);\n\n useEffect(() => load(), [load]);\n\n useEffect(() => {\n const handler = (event: Event) => {\n const detail = (event as CustomEvent).detail as\n | AgentLoopSettingsResponse\n | undefined;\n if (!detail?.maxIterations) return;\n setSettings(detail);\n setValue(String(detail.maxIterations));\n };\n window.addEventListener(\"agent-loop-settings:changed\", handler);\n return () =>\n window.removeEventListener(\"agent-loop-settings:changed\", handler);\n }, []);\n\n const numericValue = Number(value);\n const hasPendingChange =\n !!settings &&\n settings.canUpdate &&\n Number.isInteger(numericValue) &&\n numericValue !== settings.maxIterations;\n const scopeLabel =\n settings?.scope === \"org\"\n ? settings.orgName\n ? `${settings.orgName} organization`\n : \"organization\"\n : \"your account\";\n\n const save = async () => {\n if (!settings?.canUpdate) return;\n setSaving(true);\n setSaved(false);\n setError(null);\n try {\n const res = await fetch(\n agentNativePath(\"/_agent-native/agent-loop-settings\"),\n {\n method: \"PUT\",\n headers: { \"Content-Type\": \"application/json\" },\n body: JSON.stringify({ maxIterations: numericValue }),\n },\n );\n const body = await res.json().catch(() => ({}));\n if (!res.ok) {\n throw new Error(body?.error ?? `Save failed (${res.status})`);\n }\n setSettings(body as AgentLoopSettingsResponse);\n setValue(String((body as AgentLoopSettingsResponse).maxIterations));\n setSaved(true);\n window.dispatchEvent(\n new CustomEvent(\"agent-loop-settings:changed\", { detail: body }),\n );\n setTimeout(() => setSaved(false), 2000);\n } catch (err) {\n setError(err instanceof Error ? err.message : \"Save failed\");\n } finally {\n setSaving(false);\n }\n };\n\n const reset = async () => {\n if (!settings?.canUpdate) return;\n setSaving(true);\n setSaved(false);\n setError(null);\n try {\n const res = await fetch(\n agentNativePath(\"/_agent-native/agent-loop-settings\"),\n { method: \"DELETE\" },\n );\n const body = await res.json().catch(() => ({}));\n if (!res.ok) {\n throw new Error(body?.error ?? `Reset failed (${res.status})`);\n }\n setSettings(body as AgentLoopSettingsResponse);\n setValue(String((body as AgentLoopSettingsResponse).maxIterations));\n window.dispatchEvent(\n new CustomEvent(\"agent-loop-settings:changed\", { detail: body }),\n );\n } catch (err) {\n setError(err instanceof Error ? err.message : \"Reset failed\");\n } finally {\n setSaving(false);\n }\n };\n\n return (\n <SettingsSection\n icon={<IconGauge size={14} />}\n title=\"Agent Limits\"\n subtitle=\"Control how long a single agent response can work before pausing.\"\n connected={\n loading\n ? undefined\n : settings\n ? settings.maxIterations !== settings.defaultMaxIterations\n : false\n }\n open={open}\n onToggle={onToggle}\n >\n {loading ? (\n <SettingsSkeleton lines={2} />\n ) : settings ? (\n <div className=\"space-y-2\">\n <div className=\"rounded-md border border-border px-2.5 py-2 bg-accent/20\">\n <div className=\"flex items-center justify-between gap-2\">\n <div>\n <p className=\"text-[11px] font-medium text-foreground\">\n Max iterations\n </p>\n <p className=\"mt-0.5 text-[10px] text-muted-foreground\">\n Applies to {scopeLabel}. Default is{\" \"}\n {settings.defaultMaxIterations.toLocaleString()}.\n </p>\n </div>\n <span className=\"rounded-full bg-background px-2 py-0.5 text-[10px] font-medium text-muted-foreground\">\n {settings.source}\n </span>\n </div>\n <div className=\"mt-2 flex items-center gap-1.5\">\n <input\n type=\"number\"\n min={settings.minMaxIterations}\n max={settings.maxMaxIterations}\n value={value}\n disabled={!settings.canUpdate || saving}\n onChange={(e) => {\n setValue(e.target.value);\n setError(null);\n }}\n onKeyDown={(e) => {\n if (e.key === \"Enter\" && hasPendingChange) void save();\n }}\n className=\"h-8 min-w-0 flex-1 rounded border border-border bg-background px-2 text-[11px] text-foreground outline-none focus:ring-1 focus:ring-accent disabled:opacity-60\"\n />\n <button\n type=\"button\"\n onClick={save}\n disabled={!hasPendingChange || saving}\n className=\"inline-flex h-8 items-center gap-1 rounded bg-accent px-2.5 text-[10px] font-medium text-foreground hover:bg-accent/80 disabled:opacity-40\"\n >\n {saving ? (\n <IconLoader2 size={10} className=\"animate-spin\" />\n ) : saved ? (\n <IconCheck size={10} />\n ) : (\n \"Save\"\n )}\n </button>\n <button\n type=\"button\"\n onClick={reset}\n disabled={\n !settings.canUpdate ||\n saving ||\n settings.maxIterations === settings.defaultMaxIterations\n }\n className=\"h-8 rounded border border-border px-2.5 text-[10px] font-medium text-muted-foreground hover:bg-accent/40 hover:text-foreground disabled:opacity-40\"\n >\n Reset\n </button>\n </div>\n {!settings.canUpdate && (\n <p className=\"mt-2 text-[10px] text-muted-foreground\">\n Only organization owners and admins can change this limit.\n </p>\n )}\n {error && (\n <p className=\"mt-2 text-[10px] text-destructive\">{error}</p>\n )}\n </div>\n </div>\n ) : (\n <p className=\"text-[10px] text-muted-foreground\">\n Agent limit settings are unavailable.\n </p>\n )}\n </SettingsSection>\n );\n}\n\n// ─── Main SettingsPanel ─────────────────────────────────────────────────────\n\nexport interface SettingsPanelProps {\n isDevMode: boolean;\n onToggleDevMode: () => void;\n showDevToggle: boolean;\n devAppUrl?: string;\n initialSection?: string | null;\n sectionRequestKey?: number;\n}\n\ntype SettingsSectionId =\n | \"account\"\n | \"llm\"\n | \"app-models\"\n | \"limits\"\n | \"voice\"\n | \"demo-mode\"\n | \"automations\"\n | \"secrets\"\n | \"hosting\"\n | \"database\"\n | \"uploads\"\n | \"auth\"\n | \"email\"\n | \"browser\"\n | \"background\"\n | \"integrations\"\n | \"usage\"\n | \"a2a\";\n\nconst SETTINGS_SECTION_IDS = new Set<SettingsSectionId>([\n \"account\",\n \"llm\",\n \"app-models\",\n \"limits\",\n \"voice\",\n \"demo-mode\",\n \"automations\",\n \"secrets\",\n \"hosting\",\n \"database\",\n \"uploads\",\n \"auth\",\n \"email\",\n \"browser\",\n \"background\",\n \"integrations\",\n \"usage\",\n \"a2a\",\n]);\n\nfunction normalizeSettingsSection(\n value?: string | null,\n): SettingsSectionId | null {\n const normalized = value?.replace(/^#/, \"\").toLowerCase() ?? \"\";\n if (!normalized) return null;\n if (normalized.startsWith(\"secrets\")) return \"secrets\";\n if (\n normalized === \"workspace\" ||\n normalized === \"workspace-settings\" ||\n normalized === \"organization\" ||\n normalized === \"org\"\n ) {\n return \"secrets\";\n }\n if (normalized === \"agent-engine\") return \"llm\";\n if (\n normalized === \"agent-model-defaults\" ||\n normalized === \"app-model-defaults\" ||\n normalized === \"models\"\n ) {\n return \"app-models\";\n }\n if (normalized === \"agent-limits\" || normalized === \"loop-settings\") {\n return \"limits\";\n }\n return SETTINGS_SECTION_IDS.has(normalized as SettingsSectionId)\n ? (normalized as SettingsSectionId)\n : null;\n}\n\nfunction settingsSectionDomId(section: SettingsSectionId): string {\n return `agent-settings-section-${section}`;\n}\n\nfunction initialOpenSection(): SettingsSectionId {\n if (typeof window === \"undefined\") return \"llm\";\n return normalizeSettingsSection(window.location.hash) ?? \"llm\";\n}\n\n// Agent capability modes. The internal values (\"production\"/\"development\") are\n// kept for back-compat with the AGENT_MODE wiring; only the visible labels\n// changed to \"App mode\" / \"Code mode\" so this control reads as the agent\n// capability it is — not the deployment environment (NODE_ENV).\nconst agentModeOptions: SettingsSelectOption[] = [\n {\n value: \"production\",\n label: \"App mode\",\n description:\n \"App tools only; code, bash, and files require Builder or a local clone.\",\n },\n {\n value: \"development\",\n label: \"Code mode\",\n description: \"Full access to code editing, bash, and files.\",\n },\n];\n\nfunction CapabilityStatusRow({\n label,\n value,\n active,\n}: {\n label: string;\n value: React.ReactNode;\n active: boolean;\n}) {\n return (\n <div className=\"flex items-center justify-between gap-2 text-[10px]\">\n <span className=\"flex items-center gap-1.5 text-muted-foreground\">\n <span\n className={`h-1.5 w-1.5 rounded-full ${active ? \"bg-green-500\" : \"bg-muted-foreground/30\"}`}\n aria-hidden=\"true\"\n />\n {label}\n </span>\n <span className=\"min-w-0 truncate text-right text-foreground\">\n {value}\n </span>\n </div>\n );\n}\n\nfunction CapabilityStatusStrip({\n isDevMode,\n builderConnected,\n builderLoading,\n builderBranchesAvailable,\n onOpenLlm,\n}: {\n isDevMode: boolean;\n builderConnected: boolean;\n builderLoading: boolean;\n builderBranchesAvailable: boolean;\n onOpenLlm: () => void;\n}) {\n const codeAvailable =\n isDevMode || (builderConnected && builderBranchesAvailable);\n const codeLabel = isDevMode\n ? \"Local tools\"\n : builderConnected && builderBranchesAvailable\n ? \"Builder branches\"\n : \"Desktop/local\";\n\n return (\n <div className=\"rounded-md border border-border bg-muted/20 px-2.5 py-2\">\n <div className=\"mb-1.5 text-[10px] font-medium text-muted-foreground\">\n Available now\n </div>\n <div className=\"space-y-1.5\">\n <CapabilityStatusRow label=\"App\" value=\"Chat + actions\" active />\n <CapabilityStatusRow\n label=\"Code\"\n value={codeLabel}\n active={codeAvailable}\n />\n <CapabilityStatusRow\n label=\"Builder\"\n active={builderConnected}\n value={\n builderLoading ? (\n \"Checking...\"\n ) : builderConnected ? (\n \"Connected\"\n ) : (\n <button\n type=\"button\"\n onClick={onOpenLlm}\n className=\"rounded border border-border px-1.5 py-0.5 text-[10px] text-muted-foreground transition-colors hover:bg-accent/40 hover:text-foreground\"\n >\n Connect\n </button>\n )\n }\n />\n </div>\n </div>\n );\n}\n\nfunction AccountSectionInner({\n open,\n onToggle,\n}: {\n open: boolean;\n onToggle: () => void;\n}) {\n const { session, isLoading } = useSession();\n const email = session?.email;\n const avatarUrl = useAvatarUrl(email);\n const fileInputRef = useRef<HTMLInputElement>(null);\n const [uploading, setUploading] = useState(false);\n const [status, setStatus] = useState<\"idle\" | \"saved\" | \"error\">(\"idle\");\n\n const displayName = session?.name || email || \"Signed out\";\n const initials = (session?.name || email || \"?\")\n .split(/[ @._-]+/)\n .filter(Boolean)\n .slice(0, 2)\n .map((part) => part[0]?.toUpperCase())\n .join(\"\");\n\n const handleAvatarChange = async (\n event: React.ChangeEvent<HTMLInputElement>,\n ) => {\n const file = event.target.files?.[0];\n event.target.value = \"\";\n if (!file || !email) return;\n setUploading(true);\n setStatus(\"idle\");\n try {\n await uploadAvatar(file, email);\n setStatus(\"saved\");\n } catch {\n setStatus(\"error\");\n } finally {\n setUploading(false);\n }\n };\n\n return (\n <SettingsSection\n icon={<IconUserCircle size={14} />}\n title=\"Account\"\n subtitle=\"Your profile photo and signed-in identity.\"\n open={open}\n onToggle={onToggle}\n >\n <div className=\"flex items-center gap-3\">\n <div className=\"flex h-12 w-12 shrink-0 items-center justify-center overflow-hidden rounded-full border border-border bg-accent text-[13px] font-semibold text-muted-foreground\">\n {avatarUrl ? (\n <img\n src={avatarUrl}\n alt=\"\"\n className=\"h-full w-full object-cover\"\n />\n ) : (\n initials\n )}\n </div>\n <div className=\"min-w-0 flex-1\">\n <p className=\"truncate text-[12px] font-medium text-foreground\">\n {isLoading ? \"Loading...\" : displayName}\n </p>\n {email && (\n <p className=\"truncate text-[11px] text-muted-foreground\">\n {email}\n </p>\n )}\n {status === \"saved\" && (\n <p className=\"mt-1 text-[11px] text-green-600 dark:text-green-400\">\n Photo updated\n </p>\n )}\n {status === \"error\" && (\n <p className=\"mt-1 text-[11px] text-destructive\">\n Could not update photo\n </p>\n )}\n </div>\n <input\n ref={fileInputRef}\n type=\"file\"\n accept=\"image/*\"\n className=\"hidden\"\n onChange={handleAvatarChange}\n />\n <button\n type=\"button\"\n disabled={!email || uploading}\n onClick={() => fileInputRef.current?.click()}\n className=\"inline-flex h-8 shrink-0 items-center justify-center rounded-md border border-border bg-background px-3 text-[12px] font-medium text-foreground transition-colors hover:bg-accent/50 disabled:cursor-not-allowed disabled:opacity-50\"\n >\n {uploading ? \"Uploading...\" : \"Change photo\"}\n </button>\n </div>\n </SettingsSection>\n );\n}\n\nexport function SettingsPanel({\n isDevMode,\n onToggleDevMode,\n showDevToggle,\n devAppUrl,\n initialSection,\n sectionRequestKey,\n}: SettingsPanelProps) {\n const { status: builder, loading: builderLoading } = useBuilderStatus();\n const connected = builder?.configured ?? false;\n const connectUrl = builder?.cliAuthUrl ?? builder?.connectUrl;\n const orgName = builder?.orgName;\n const envManaged = !!builder?.envManaged;\n const credentialSource = builder?.credentialSource;\n const builderBranchesAvailable = !!builder?.builderEnabled;\n const builderFlow = useBuilderConnectFlow({\n popupUrl: connectUrl,\n trackingSource: \"settings_panel_builder_card\",\n });\n\n // When opened via a `#secrets:<KEY>` hash, focus that specific secret input\n // inside the \"API Keys & Connections\" section.\n const [focusSecretKey, setFocusSecretKey] = useState<string | undefined>(\n undefined,\n );\n\n // Accordion: only one section open at a time (null = all closed)\n const [openSection, setOpenSection] = useState<string | null>(\n initialOpenSection,\n );\n const toggle = (id: string) =>\n setOpenSection((prev) => (prev === id ? null : id));\n\n const scrollSectionIntoView = useCallback((section: SettingsSectionId) => {\n window.requestAnimationFrame(() => {\n document.getElementById(settingsSectionDomId(section))?.scrollIntoView({\n block: \"start\",\n behavior: \"smooth\",\n });\n });\n }, []);\n\n const openSettingsSection = useCallback(\n (section: SettingsSectionId, scroll = false) => {\n setOpenSection(section);\n if (scroll) scrollSectionIntoView(section);\n },\n [scrollSectionIntoView],\n );\n\n useEffect(() => {\n const section = normalizeSettingsSection(initialSection);\n if (!section) return;\n if (section !== \"secrets\") setFocusSecretKey(undefined);\n openSettingsSection(section, true);\n }, [initialSection, sectionRequestKey, openSettingsSection]);\n\n // Support `#secrets:<KEY>` hash fragments from the onboarding CTA — opens\n // the section and focuses the matching input.\n useEffect(() => {\n if (typeof window === \"undefined\") return;\n const handleHash = () => {\n const hash = window.location.hash?.replace(/^#/, \"\") ?? \"\";\n const section = normalizeSettingsSection(hash);\n if (!section) return;\n if (hash.startsWith(\"secrets:\") || hash === \"secrets\") {\n const key = hash.slice(\"secrets:\".length);\n setFocusSecretKey(key || undefined);\n } else {\n setFocusSecretKey(undefined);\n }\n openSettingsSection(section, true);\n };\n handleHash();\n window.addEventListener(\"hashchange\", handleHash);\n return () => window.removeEventListener(\"hashchange\", handleHash);\n }, [openSettingsSection]);\n\n return (\n <div\n className=\"flex-1 min-h-0 overflow-y-auto p-3 space-y-2\"\n style={{ overflowY: \"auto\" }}\n >\n {/* Agent capability mode (App vs Code) + app link */}\n {(showDevToggle || devAppUrl) && (\n <div className=\"space-y-2 pb-2 border-b border-border mb-2\">\n {showDevToggle && (\n <SettingsSelect\n label=\"Agent mode\"\n labelAdornment={\n devAppUrl ? (\n <Tooltip>\n <TooltipTrigger asChild>\n <a\n href={devAppUrl}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n aria-label=\"Open app in new tab\"\n className=\"flex items-center text-muted-foreground hover:text-foreground\"\n >\n <IconExternalLink size={14} />\n </a>\n </TooltipTrigger>\n <TooltipContent>Open app in new tab</TooltipContent>\n </Tooltip>\n ) : undefined\n }\n value={isDevMode ? \"development\" : \"production\"}\n options={agentModeOptions}\n onValueChange={(next) => {\n const nextIsDev = next === \"development\";\n if (nextIsDev !== isDevMode) onToggleDevMode();\n }}\n />\n )}\n </div>\n )}\n\n <CapabilityStatusStrip\n isDevMode={isDevMode}\n builderConnected={connected}\n builderLoading={builderLoading}\n builderBranchesAvailable={builderBranchesAvailable}\n onOpenLlm={() => openSettingsSection(\"llm\", true)}\n />\n\n {/* Account */}\n <AccountSectionInner\n open={openSection === \"account\"}\n onToggle={() => toggle(\"account\")}\n />\n\n {/* LLM */}\n <LLMSectionInner\n builderFlow={builderFlow}\n builderLoading={builderLoading}\n connectUrl={connectUrl}\n connected={connected}\n orgName={orgName}\n envManaged={envManaged}\n credentialSource={credentialSource}\n open={openSection === \"llm\"}\n onToggle={() => toggle(\"llm\")}\n />\n\n {/* App default model */}\n <AppModelDefaultsSectionInner\n open={openSection === \"app-models\"}\n onToggle={() => toggle(\"app-models\")}\n />\n\n {/* Agent limits */}\n <AgentLimitsSectionInner\n open={openSection === \"limits\"}\n onToggle={() => toggle(\"limits\")}\n />\n\n {/* Voice transcription */}\n <SettingsSection\n icon={<IconMicrophone size={14} />}\n title=\"Voice Transcription\"\n subtitle=\"How the composer microphone turns your voice into text.\"\n open={openSection === \"voice\"}\n onToggle={() => toggle(\"voice\")}\n >\n <VoiceTranscriptionSection />\n </SettingsSection>\n\n {/* Demo mode */}\n <SettingsSection\n icon={<IconEyeOff size={14} />}\n title=\"Demo mode\"\n subtitle=\"Replace names, emails, and numbers with realistic fake data everywhere — in the UI and what the agent sees. IDs and structure are preserved so the app keeps working.\"\n open={openSection === \"demo-mode\"}\n onToggle={() => toggle(\"demo-mode\")}\n >\n <DemoModeSection />\n </SettingsSection>\n\n {/* Automations */}\n <SettingsSection\n icon={<IconBolt size={14} />}\n title=\"Automations\"\n subtitle=\"Event-triggered and scheduled automations.\"\n open={openSection === \"automations\"}\n onToggle={() => toggle(\"automations\")}\n >\n <AutomationsSection />\n </SettingsSection>\n\n {/* API Keys & Connections */}\n <SettingsSection\n id={settingsSectionDomId(\"secrets\")}\n icon={<IconKey size={14} />}\n title=\"API Keys & Connections\"\n subtitle=\"Service credentials and automation keys.\"\n open={openSection === \"secrets\"}\n onToggle={() => toggle(\"secrets\")}\n >\n <SecretsSection focusKey={focusSecretKey} />\n </SettingsSection>\n\n {/* Hosting */}\n <SettingsSection\n icon={<IconCloud size={14} />}\n title=\"Hosting\"\n subtitle=\"Deploy your app to the cloud.\"\n connected={connected}\n open={openSection === \"hosting\"}\n onToggle={() => toggle(\"hosting\")}\n >\n <div className=\"space-y-2\">\n <UseBuilderCard\n builderFlow={builderFlow}\n connectUrl={connectUrl}\n connected={connected}\n orgName={orgName}\n envManaged={envManaged}\n credentialSource={credentialSource}\n trackingSource=\"hosting_settings\"\n trackingFlow=\"hosting\"\n />\n <ManualSetupCard\n hint=\"Deploy manually to Netlify, Vercel, Cloudflare, or any Nitro-supported target.\"\n docsUrl=\"https://www.builder.io/c/docs/agent-native-deployment\"\n dim={connected}\n />\n </div>\n </SettingsSection>\n\n {/* Database */}\n <SettingsSection\n icon={<IconDatabase size={14} />}\n title=\"Database\"\n subtitle=\"Connect a cloud database for persistent storage.\"\n connected={connected}\n open={openSection === \"database\"}\n onToggle={() => toggle(\"database\")}\n >\n <div className=\"space-y-2\">\n <UseBuilderCard\n builderFlow={builderFlow}\n connectUrl={connectUrl}\n connected={connected}\n orgName={orgName}\n envManaged={envManaged}\n credentialSource={credentialSource}\n trackingSource=\"database_settings\"\n trackingFlow=\"database\"\n />\n <ManualSetupCard\n hint=\"Set DATABASE_URL in your .env to connect Neon, Supabase, Turso, or any Postgres/SQLite database.\"\n docsUrl=\"https://www.builder.io/c/docs/agent-native-database\"\n dim={connected}\n />\n </div>\n </SettingsSection>\n\n {/* File uploads */}\n <SettingsSection\n icon={<IconUpload size={14} />}\n title=\"File uploads\"\n subtitle=\"Where user-uploaded files (avatars, chat attachments) are stored.\"\n connected={connected}\n open={openSection === \"uploads\"}\n onToggle={() => toggle(\"uploads\")}\n >\n <div className=\"space-y-2\">\n <UseBuilderCard\n builderFlow={builderFlow}\n connectUrl={connectUrl}\n connected={connected}\n orgName={orgName}\n envManaged={envManaged}\n credentialSource={credentialSource}\n trackingSource=\"file_upload_settings\"\n trackingFlow=\"file_upload\"\n />\n <ManualSetupCard\n hint=\"Without a provider, files are stored as base64 in your database. Fine for dev, not recommended for production.\"\n docsUrl=\"https://www.builder.io/c/docs/agent-native-file-uploads\"\n dim={connected}\n />\n </div>\n </SettingsSection>\n\n {/* Authentication */}\n <SettingsSection\n icon={<IconShield size={14} />}\n title=\"Authentication\"\n subtitle=\"Set up user authentication and access control.\"\n connected={connected}\n open={openSection === \"auth\"}\n onToggle={() => toggle(\"auth\")}\n >\n <div className=\"space-y-2\">\n <UseBuilderCard\n builderFlow={builderFlow}\n connectUrl={connectUrl}\n connected={connected}\n orgName={orgName}\n envManaged={envManaged}\n credentialSource={credentialSource}\n trackingSource=\"auth_settings\"\n trackingFlow=\"auth\"\n />\n <ManualSetupCard\n hint=\"Configure Better Auth with BETTER_AUTH_SECRET and optional Google/GitHub OAuth providers.\"\n docsUrl=\"https://www.builder.io/c/docs/agent-native-authentication\"\n dim={connected}\n />\n </div>\n </SettingsSection>\n\n {/* Email */}\n <EmailSectionInner\n open={openSection === \"email\"}\n onToggle={() => toggle(\"email\")}\n />\n\n {/* Browser Automation */}\n <SettingsSection\n icon={<IconBrowser size={14} />}\n title=\"Browser Automation\"\n subtitle=\"Let agents control a real browser for web tasks.\"\n connected={connected}\n open={openSection === \"browser\"}\n onToggle={() => toggle(\"browser\")}\n >\n <UseBuilderCard\n builderFlow={builderFlow}\n connectUrl={connectUrl}\n connected={connected}\n orgName={orgName}\n envManaged={envManaged}\n credentialSource={credentialSource}\n trackingSource=\"browser_settings\"\n trackingFlow=\"browser_automation\"\n />\n </SettingsSection>\n\n {builderBranchesAvailable && (\n <SettingsSection\n icon={<IconGitBranch size={14} />}\n title=\"Background Agent\"\n subtitle=\"Make code changes from production mode via Builder.\"\n connected={connected}\n open={openSection === \"background\"}\n onToggle={() => toggle(\"background\")}\n >\n <UseBuilderCard\n builderFlow={builderFlow}\n connectUrl={connectUrl}\n connected={connected}\n orgName={orgName}\n envManaged={envManaged}\n credentialSource={credentialSource}\n trackingSource=\"background_agent_settings\"\n trackingFlow=\"background_agent\"\n />\n </SettingsSection>\n )}\n\n {/* Integrations */}\n <SettingsSection\n icon={<IconPlugConnected size={14} />}\n title=\"Integrations\"\n subtitle=\"Connect messaging platforms and external services.\"\n open={openSection === \"integrations\"}\n onToggle={() => toggle(\"integrations\")}\n >\n <Suspense fallback={null}>\n <IntegrationsPanel />\n </Suspense>\n </SettingsSection>\n\n {/* Usage & spend */}\n <SettingsSection\n icon={<IconCoin size={14} />}\n title=\"Usage\"\n subtitle=\"Track token consumption and estimated cost — broken down by chat, automations, and background jobs.\"\n open={openSection === \"usage\"}\n onToggle={() => toggle(\"usage\")}\n >\n <UsageSection />\n </SettingsSection>\n\n {/* A2A Agents */}\n <SettingsSection\n icon={<IconTopologyRing2 size={14} />}\n title=\"Connected Agents (A2A)\"\n subtitle=\"Manage remote agents connected via the A2A protocol.\"\n open={openSection === \"a2a\"}\n onToggle={() => toggle(\"a2a\")}\n >\n <AgentsSection />\n </SettingsSection>\n </div>\n );\n}\n"]}