@agent-native/core 0.15.5 → 0.15.7

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 (166) hide show
  1. package/dist/client/AgentPanel.d.ts.map +1 -1
  2. package/dist/client/AgentPanel.js +3 -2
  3. package/dist/client/AgentPanel.js.map +1 -1
  4. package/dist/client/AssistantChat.d.ts.map +1 -1
  5. package/dist/client/AssistantChat.js +14 -2
  6. package/dist/client/AssistantChat.js.map +1 -1
  7. package/dist/client/components/CodeRequiredDialog.js +1 -1
  8. package/dist/client/components/CodeRequiredDialog.js.map +1 -1
  9. package/dist/client/settings/BackgroundAgentSection.d.ts.map +1 -1
  10. package/dist/client/settings/BackgroundAgentSection.js +2 -1
  11. package/dist/client/settings/BackgroundAgentSection.js.map +1 -1
  12. package/dist/client/settings/BrowserSection.d.ts.map +1 -1
  13. package/dist/client/settings/BrowserSection.js +3 -2
  14. package/dist/client/settings/BrowserSection.js.map +1 -1
  15. package/dist/client/settings/SettingsPanel.js +1 -1
  16. package/dist/client/settings/SettingsPanel.js.map +1 -1
  17. package/dist/client/settings/VoiceTranscriptionSection.d.ts.map +1 -1
  18. package/dist/client/settings/VoiceTranscriptionSection.js +1 -0
  19. package/dist/client/settings/VoiceTranscriptionSection.js.map +1 -1
  20. package/dist/client/settings/useBuilderStatus.d.ts +1 -0
  21. package/dist/client/settings/useBuilderStatus.d.ts.map +1 -1
  22. package/dist/client/settings/useBuilderStatus.js +120 -23
  23. package/dist/client/settings/useBuilderStatus.js.map +1 -1
  24. package/dist/client/settings/useBuilderStatus.spec.js +85 -7
  25. package/dist/client/settings/useBuilderStatus.spec.js.map +1 -1
  26. package/dist/client/transcription/BuilderTranscriptionCta.d.ts.map +1 -1
  27. package/dist/client/transcription/BuilderTranscriptionCta.js +7 -2
  28. package/dist/client/transcription/BuilderTranscriptionCta.js.map +1 -1
  29. package/dist/server/agent-chat-plugin.d.ts.map +1 -1
  30. package/dist/server/agent-chat-plugin.js +3 -1
  31. package/dist/server/agent-chat-plugin.js.map +1 -1
  32. package/dist/server/auth.d.ts.map +1 -1
  33. package/dist/server/auth.js +19 -2
  34. package/dist/server/auth.js.map +1 -1
  35. package/dist/server/builder-browser.d.ts +8 -0
  36. package/dist/server/builder-browser.d.ts.map +1 -1
  37. package/dist/server/builder-browser.js +78 -4
  38. package/dist/server/builder-browser.js.map +1 -1
  39. package/dist/server/core-routes-plugin.d.ts.map +1 -1
  40. package/dist/server/core-routes-plugin.js +55 -23
  41. package/dist/server/core-routes-plugin.js.map +1 -1
  42. package/package.json +1 -1
  43. package/dist/client/dev-mode.d.ts +0 -14
  44. package/dist/client/dev-mode.d.ts.map +0 -1
  45. package/dist/client/dev-mode.js +0 -14
  46. package/dist/client/dev-mode.js.map +0 -1
  47. package/dist/client/extensions/EmbeddedTool.d.ts +0 -20
  48. package/dist/client/extensions/EmbeddedTool.d.ts.map +0 -1
  49. package/dist/client/extensions/EmbeddedTool.js +0 -199
  50. package/dist/client/extensions/EmbeddedTool.js.map +0 -1
  51. package/dist/client/extensions/ToolEditor.d.ts +0 -5
  52. package/dist/client/extensions/ToolEditor.d.ts.map +0 -1
  53. package/dist/client/extensions/ToolEditor.js +0 -129
  54. package/dist/client/extensions/ToolEditor.js.map +0 -1
  55. package/dist/client/extensions/ToolViewer.d.ts +0 -5
  56. package/dist/client/extensions/ToolViewer.d.ts.map +0 -1
  57. package/dist/client/extensions/ToolViewer.js +0 -400
  58. package/dist/client/extensions/ToolViewer.js.map +0 -1
  59. package/dist/client/extensions/ToolViewerPage.d.ts +0 -2
  60. package/dist/client/extensions/ToolViewerPage.d.ts.map +0 -1
  61. package/dist/client/extensions/ToolViewerPage.js +0 -24
  62. package/dist/client/extensions/ToolViewerPage.js.map +0 -1
  63. package/dist/client/extensions/ToolsListPage.d.ts +0 -2
  64. package/dist/client/extensions/ToolsListPage.d.ts.map +0 -1
  65. package/dist/client/extensions/ToolsListPage.js +0 -67
  66. package/dist/client/extensions/ToolsListPage.js.map +0 -1
  67. package/dist/client/extensions/ToolsSidebarSection.d.ts +0 -2
  68. package/dist/client/extensions/ToolsSidebarSection.d.ts.map +0 -1
  69. package/dist/client/extensions/ToolsSidebarSection.js +0 -236
  70. package/dist/client/extensions/ToolsSidebarSection.js.map +0 -1
  71. package/dist/client/extensions/tool-order.d.ts +0 -7
  72. package/dist/client/extensions/tool-order.d.ts.map +0 -1
  73. package/dist/client/extensions/tool-order.js +0 -47
  74. package/dist/client/extensions/tool-order.js.map +0 -1
  75. package/dist/client/tools/EmbeddedTool.d.ts +0 -20
  76. package/dist/client/tools/EmbeddedTool.d.ts.map +0 -1
  77. package/dist/client/tools/EmbeddedTool.js +0 -199
  78. package/dist/client/tools/EmbeddedTool.js.map +0 -1
  79. package/dist/client/tools/ExtensionSlot.d.ts +0 -27
  80. package/dist/client/tools/ExtensionSlot.d.ts.map +0 -1
  81. package/dist/client/tools/ExtensionSlot.js +0 -96
  82. package/dist/client/tools/ExtensionSlot.js.map +0 -1
  83. package/dist/client/tools/ToolEditor.d.ts +0 -5
  84. package/dist/client/tools/ToolEditor.d.ts.map +0 -1
  85. package/dist/client/tools/ToolEditor.js +0 -129
  86. package/dist/client/tools/ToolEditor.js.map +0 -1
  87. package/dist/client/tools/ToolViewer.d.ts +0 -5
  88. package/dist/client/tools/ToolViewer.d.ts.map +0 -1
  89. package/dist/client/tools/ToolViewer.js +0 -400
  90. package/dist/client/tools/ToolViewer.js.map +0 -1
  91. package/dist/client/tools/ToolViewerPage.d.ts +0 -2
  92. package/dist/client/tools/ToolViewerPage.d.ts.map +0 -1
  93. package/dist/client/tools/ToolViewerPage.js +0 -24
  94. package/dist/client/tools/ToolViewerPage.js.map +0 -1
  95. package/dist/client/tools/ToolsListPage.d.ts +0 -2
  96. package/dist/client/tools/ToolsListPage.d.ts.map +0 -1
  97. package/dist/client/tools/ToolsListPage.js +0 -67
  98. package/dist/client/tools/ToolsListPage.js.map +0 -1
  99. package/dist/client/tools/ToolsSidebarSection.d.ts +0 -2
  100. package/dist/client/tools/ToolsSidebarSection.d.ts.map +0 -1
  101. package/dist/client/tools/ToolsSidebarSection.js +0 -236
  102. package/dist/client/tools/ToolsSidebarSection.js.map +0 -1
  103. package/dist/client/tools/iframe-bridge.d.ts +0 -38
  104. package/dist/client/tools/iframe-bridge.d.ts.map +0 -1
  105. package/dist/client/tools/iframe-bridge.js +0 -207
  106. package/dist/client/tools/iframe-bridge.js.map +0 -1
  107. package/dist/client/tools/index.d.ts +0 -8
  108. package/dist/client/tools/index.d.ts.map +0 -1
  109. package/dist/client/tools/index.js +0 -8
  110. package/dist/client/tools/index.js.map +0 -1
  111. package/dist/client/tools/tool-order.d.ts +0 -7
  112. package/dist/client/tools/tool-order.d.ts.map +0 -1
  113. package/dist/client/tools/tool-order.js +0 -47
  114. package/dist/client/tools/tool-order.js.map +0 -1
  115. package/dist/server/local-migration.d.ts +0 -41
  116. package/dist/server/local-migration.d.ts.map +0 -1
  117. package/dist/server/local-migration.js +0 -235
  118. package/dist/server/local-migration.js.map +0 -1
  119. package/dist/tools/actions.d.ts +0 -3
  120. package/dist/tools/actions.d.ts.map +0 -1
  121. package/dist/tools/actions.js +0 -272
  122. package/dist/tools/actions.js.map +0 -1
  123. package/dist/tools/fetch-tool.d.ts +0 -23
  124. package/dist/tools/fetch-tool.d.ts.map +0 -1
  125. package/dist/tools/fetch-tool.js +0 -178
  126. package/dist/tools/fetch-tool.js.map +0 -1
  127. package/dist/tools/html-shell.d.ts +0 -45
  128. package/dist/tools/html-shell.d.ts.map +0 -1
  129. package/dist/tools/html-shell.js +0 -514
  130. package/dist/tools/html-shell.js.map +0 -1
  131. package/dist/tools/proxy-security.d.ts +0 -12
  132. package/dist/tools/proxy-security.d.ts.map +0 -1
  133. package/dist/tools/proxy-security.js +0 -158
  134. package/dist/tools/proxy-security.js.map +0 -1
  135. package/dist/tools/routes.d.ts +0 -2
  136. package/dist/tools/routes.d.ts.map +0 -1
  137. package/dist/tools/routes.js +0 -627
  138. package/dist/tools/routes.js.map +0 -1
  139. package/dist/tools/schema.d.ts +0 -664
  140. package/dist/tools/schema.d.ts.map +0 -1
  141. package/dist/tools/schema.js +0 -146
  142. package/dist/tools/schema.js.map +0 -1
  143. package/dist/tools/slots/routes.d.ts +0 -15
  144. package/dist/tools/slots/routes.d.ts.map +0 -1
  145. package/dist/tools/slots/routes.js +0 -94
  146. package/dist/tools/slots/routes.js.map +0 -1
  147. package/dist/tools/slots/schema.d.ts +0 -303
  148. package/dist/tools/slots/schema.d.ts.map +0 -1
  149. package/dist/tools/slots/schema.js +0 -76
  150. package/dist/tools/slots/schema.js.map +0 -1
  151. package/dist/tools/slots/store.d.ts +0 -66
  152. package/dist/tools/slots/store.d.ts.map +0 -1
  153. package/dist/tools/slots/store.js +0 -227
  154. package/dist/tools/slots/store.js.map +0 -1
  155. package/dist/tools/store.d.ts +0 -40
  156. package/dist/tools/store.d.ts.map +0 -1
  157. package/dist/tools/store.js +0 -193
  158. package/dist/tools/store.js.map +0 -1
  159. package/dist/tools/theme.d.ts +0 -2
  160. package/dist/tools/theme.d.ts.map +0 -1
  161. package/dist/tools/theme.js +0 -67
  162. package/dist/tools/theme.js.map +0 -1
  163. package/dist/tools/url-safety.d.ts +0 -24
  164. package/dist/tools/url-safety.d.ts.map +0 -1
  165. package/dist/tools/url-safety.js +0 -224
  166. package/dist/tools/url-safety.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"AgentPanel.js","sourceRoot":"","sources":["../../src/client/AgentPanel.tsx"],"names":[],"mappings":"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","sourcesContent":["/**\n * AgentPanel — unified agent component with chat, CLI, and workspace modes.\n *\n * A self-contained panel with no layout opinions — drop it into a sidebar,\n * popover, dialog, full page, or any container. It fills its parent via\n * flex and min-h-0.\n *\n * Features:\n * - Chat mode: assistant-ui powered chat with tool calls\n * - CLI mode: embedded xterm.js terminal (dev mode only)\n * - Toggle between modes via header buttons\n *\n * Usage:\n * // In a sidebar\n * <div style={{ width: 380 }}><AgentPanel /></div>\n *\n * // In a popover\n * <Popover><AgentPanel suggestions={[...]} /></Popover>\n *\n * // Full page\n * <AgentPanel className=\"h-screen\" />\n */\n\nimport React, {\n useState,\n useEffect,\n useRef,\n useCallback,\n useMemo,\n lazy,\n Suspense,\n startTransition,\n} from \"react\";\nimport * as TooltipPrimitive from \"@radix-ui/react-tooltip\";\nimport {\n Tooltip,\n TooltipContent,\n TooltipProvider,\n TooltipTrigger,\n normalizeTooltipText,\n} from \"./components/ui/tooltip.js\";\nimport {\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuItem,\n DropdownMenuShortcut,\n DropdownMenuTrigger,\n} from \"./components/ui/dropdown-menu.js\";\nimport {\n IconMessageCircle,\n IconMessageDots,\n IconTerminal2,\n IconSettings,\n IconLayoutSidebarRightCollapse,\n IconLayoutGrid,\n IconCheck,\n IconPlus,\n IconFolder,\n IconX,\n IconClockHour3,\n IconDotsVertical,\n IconHistory,\n IconTrash,\n IconArrowsMaximize,\n IconArrowsMinimize,\n IconExternalLink,\n} from \"@tabler/icons-react\";\nimport { FeedbackButton } from \"./FeedbackButton.js\";\nimport {\n MultiTabAssistantChat,\n type MultiTabAssistantChatHeaderProps,\n} from \"./MultiTabAssistantChat.js\";\nimport {\n isAssistantUiStaleIndexError,\n type AssistantChatProps,\n} from \"./AssistantChat.js\";\nimport { useDevMode } from \"./use-dev-mode.js\";\nimport { useScreenRefreshKey } from \"./use-db-sync.js\";\nimport { useQuery, useQueryClient } from \"@tanstack/react-query\";\nimport { useLocation, useNavigate } from \"react-router\";\nimport { cn } from \"./utils.js\";\nimport { agentNativePath } from \"./api-path.js\";\nimport { trackEvent } from \"./analytics.js\";\nimport { getFrameOrigin, isInFrame, isTrustedFrameMessage } from \"./frame.js\";\nimport { shouldParentFrameOwnAgentPanel } from \"./builder-frame.js\";\nimport {\n dispatchAgentSidebarStateChange,\n getInitialAgentSidebarOpen,\n SIDEBAR_OPEN_KEY,\n} from \"./agent-sidebar-state.js\";\n\n// Lazy-load AgentTerminal to avoid bundling xterm.js when not needed\nconst AgentTerminal = lazy(() =>\n import(\"./terminal/index.js\").then((m) => ({ default: m.AgentTerminal })),\n);\n\nfunction parentFrameTargetOrigin(): string {\n return getFrameOrigin() ?? window.location.origin;\n}\n\nfunction isAgentNativeDesktop() {\n if (typeof navigator === \"undefined\") return false;\n return /AgentNativeDesktop/i.test(navigator.userAgent);\n}\n\n// Lazy-load ResourcesPanel to avoid bundling when not needed\nconst ResourcesPanel = lazy(() =>\n import(\"./resources/ResourcesPanel.js\").then((m) => ({\n default: m.ResourcesPanel,\n })),\n);\n\n// Lazy-load SettingsPanel to avoid bundling when not needed\nconst SettingsPanel = lazy(() =>\n import(\"./settings/index.js\").then((m) => ({\n default: m.SettingsPanel,\n })),\n);\n\n// Lazy-load OnboardingPanel — only pulled in when onboarding is active.\nconst OnboardingPanel = lazy(() =>\n import(\"./onboarding/OnboardingPanel.js\").then((m) => ({\n default: m.OnboardingPanel,\n })),\n);\n\n// Lazy-load SetupButton — the header entry-point that re-opens the\n// onboarding panel after the user has dismissed it.\nconst SetupButton = lazy(() =>\n import(\"./onboarding/SetupButton.js\").then((m) => ({\n default: m.SetupButton,\n })),\n);\n\n// Setup/onboarding widget is hidden until the UX is improved.\n// Flip to `true` to restore the SetupButton in the header and the\n// OnboardingPanel above the chat.\nconst SHOW_ONBOARDING = false;\n\nconst CLI_STORAGE_KEY = \"agent-native-cli-command\";\nconst CLI_DEFAULT = \"claude\";\nconst EXEC_MODE_KEY = \"agent-native-exec-mode\";\ntype ExecMode = \"build\" | \"plan\";\ntype PanelMode = \"chat\" | \"cli\" | \"resources\" | \"settings\";\nconst AGENT_PANEL_FONT_FAMILY =\n 'ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, \"Segoe UI\", sans-serif';\nconst AGENT_PANEL_ROOT_STYLE = {\n fontFamily: AGENT_PANEL_FONT_FAMILY,\n fontSize: 13,\n lineHeight: 1.2,\n} satisfies React.CSSProperties;\nconst AGENT_PANEL_HEADER_CLASS =\n \"relative z-[240] flex h-12 shrink-0 items-center justify-between gap-2 border-b border-border\";\nconst AGENT_PANEL_HEADER_STYLE = {\n paddingLeft: 8,\n paddingRight: 8,\n} satisfies React.CSSProperties;\nconst AGENT_PANEL_CONTROL_STYLE = {\n fontSize: 12,\n lineHeight: 1,\n} satisfies React.CSSProperties;\nconst ACTIVATE_KEYS = new Set([\"Enter\", \" \"]);\n\ninterface AvailableCli {\n command: string;\n label: string;\n available: boolean;\n}\n\nfunction useAvailableClis() {\n const [clis, setClis] = useState<AvailableCli[]>([]);\n useEffect(() => {\n // Try to fetch available CLIs — endpoint is provided by the terminal plugin.\n // Returns 404 gracefully when the plugin isn't loaded.\n fetch(agentNativePath(\"/_agent-native/available-clis\"))\n .then((r) => (r.ok ? r.json() : []))\n .then((data) => setClis(Array.isArray(data) ? data : []))\n .catch(() => {});\n }, []);\n return clis;\n}\n\nfunction useCliSelection(keyPrefix: string) {\n const cliKey = `${CLI_STORAGE_KEY}${keyPrefix}`;\n const [selected, setSelected] = useState(CLI_DEFAULT);\n useEffect(() => {\n try {\n const saved = localStorage.getItem(cliKey);\n if (saved) setSelected(saved);\n } catch {}\n }, [cliKey]);\n const select = (cmd: string) => {\n setSelected(cmd);\n try {\n localStorage.setItem(cliKey, cmd);\n } catch {}\n };\n return [selected, select] as const;\n}\n\n// Detect dev mode at build time (Vite replaces this)\nconst IS_DEV: boolean = import.meta.env?.DEV === true;\n\n// ─── Settings panel components moved to ./settings/ ────────────────────────\n\nfunction IconTooltip({\n content,\n children,\n}: {\n content: string;\n children: React.ReactNode;\n}) {\n return (\n <TooltipPrimitive.Provider delayDuration={250}>\n <TooltipPrimitive.Root>\n <TooltipPrimitive.Trigger asChild>{children}</TooltipPrimitive.Trigger>\n <TooltipPrimitive.Portal>\n <TooltipPrimitive.Content\n side=\"bottom\"\n sideOffset={8}\n className=\"z-[300] overflow-hidden rounded-md border border-border bg-popover px-2 py-1 text-[11px] text-foreground shadow-md\"\n >\n {normalizeTooltipText(content)}\n <TooltipPrimitive.Arrow className=\"fill-popover\" />\n </TooltipPrimitive.Content>\n </TooltipPrimitive.Portal>\n </TooltipPrimitive.Root>\n </TooltipPrimitive.Provider>\n );\n}\n\n// AgentSettingsPopover and AgentsSection moved to ./settings/\n\n// ─── AgentPanel ─────────────────────────────────────────────────────────────\n\nexport interface AgentPanelCodeAccess {\n /** Whether this surface can safely edit source and run shell commands. */\n enabled: boolean;\n /** Heading shown when code access is unavailable. */\n unavailableTitle?: string;\n /** Detail copy shown when code access is unavailable. */\n unavailableDescription?: string;\n /** Optional CTA label for the unavailable state. */\n unavailableCtaLabel?: string;\n /** Optional CTA URL for the unavailable state. */\n unavailableCtaHref?: string;\n /** Optional secondary CTA label, usually for Builder cloud code changes. */\n unavailableSecondaryCtaLabel?: string;\n /** Optional secondary CTA URL, usually the Builder connect URL. */\n unavailableSecondaryCtaHref?: string;\n /** @deprecated Chat stays available when code access is unavailable. */\n unavailableComposerPlaceholder?: string;\n}\n\nfunction useBuilderConnectUrl() {\n const [connectUrl, setConnectUrl] = useState<string | null>(null);\n const [configured, setConfigured] = useState(false);\n\n useEffect(() => {\n let cancelled = false;\n // Track previous configured state so we only fanout the\n // `agent-engine:configured-changed` event on a real false→true\n // transition. Without this, every `/builder/status` response with\n // `configured: true` dispatched the event, our own `onConfigured`\n // listener caught it (because we both fire AND listen on the same\n // global), refresh fired again, and we'd loop forever.\n let lastConfigured = false;\n const refresh = () => {\n fetch(agentNativePath(\"/_agent-native/builder/status\"))\n .then((res) => (res.ok ? res.json() : null))\n .then((data) => {\n if (cancelled || !data) return;\n if (data.connectUrl) setConnectUrl(data.connectUrl);\n const nextConfigured = !!data.configured;\n setConfigured(nextConfigured);\n if (nextConfigured && !lastConfigured) {\n lastConfigured = true;\n // Tell other listeners (the agent panel's \"Use Builder\" CTA\n // lives in a different React tree than the connect-flow popup\n // poller, so a fresh status read here is the only thing that\n // flips its UI). Dispatch only on transition so listeners\n // that share this hook don't bounce the event back here.\n window.dispatchEvent(\n new CustomEvent(\"agent-engine:configured-changed\", {\n detail: { source: \"builder-status\" },\n }),\n );\n } else if (!nextConfigured) {\n lastConfigured = false;\n }\n })\n .catch(() => {});\n };\n refresh();\n // The \"Use Builder\" CTA opens Builder in a `<a target=\"_blank\">` tab\n // (not a popup), so the previous one-shot fetch never noticed the\n // connect succeeded when the user came back to the original tab.\n const onFocus = () => refresh();\n const onVisibility = () => {\n if (document.visibilityState === \"visible\") refresh();\n };\n const onConfigured = (e: Event) => {\n // Ignore our own dispatch — refresh() already wrote the new state.\n // Other dispatchers (the connect-flow popup poller, an external\n // tab that completed connect, etc.) get the refresh they need.\n const detail = (e as CustomEvent).detail as\n | { source?: string }\n | undefined;\n if (detail?.source === \"builder-status\") return;\n refresh();\n };\n window.addEventListener(\"focus\", onFocus);\n document.addEventListener(\"visibilitychange\", onVisibility);\n window.addEventListener(\"agent-engine:configured-changed\", onConfigured);\n let channel: BroadcastChannel | null = null;\n try {\n channel = new BroadcastChannel(`builder-connect:${window.location.host}`);\n channel.onmessage = (e: MessageEvent) => {\n const data = e.data as { type?: string } | undefined;\n if (data?.type === \"builder-connect-success\") refresh();\n };\n } catch {\n // BroadcastChannel missing — focus/visibility refresh still covers it.\n }\n const onMessage = (e: MessageEvent) => {\n if (e.origin !== window.location.origin) return;\n const data = e.data as { type?: string } | undefined;\n if (data?.type === \"builder-connect-success\") refresh();\n };\n window.addEventListener(\"message\", onMessage);\n return () => {\n cancelled = true;\n window.removeEventListener(\"focus\", onFocus);\n document.removeEventListener(\"visibilitychange\", onVisibility);\n window.removeEventListener(\n \"agent-engine:configured-changed\",\n onConfigured,\n );\n window.removeEventListener(\"message\", onMessage);\n channel?.close();\n };\n }, []);\n\n return { connectUrl, configured };\n}\n\nexport interface AgentPanelProps extends Omit<\n AssistantChatProps,\n \"onSwitchToCli\"\n> {\n /** Initial mode. Default: \"chat\" */\n defaultMode?: \"chat\" | \"cli\";\n /** CSS class for the outer container */\n className?: string;\n /** Called when the user clicks the collapse button. If provided, a collapse button appears in the header. */\n onCollapse?: () => void;\n /** Whether the panel is currently in fullscreen (Claude-style centered) mode. */\n isFullscreen?: boolean;\n /** Called when the user clicks the maximize/minimize button. If provided, the button appears next to the collapse button. */\n onToggleFullscreen?: () => void;\n /** URL of the app being developed (shown as \"Open app in new tab\" in settings). Set by frame. */\n devAppUrl?: string;\n /** Namespace for localStorage keys — used to isolate chat state per app in the frame. */\n storageKey?: string;\n /**\n * Bind the chat to a specific resource (deck, design, dashboard, ...).\n * When set, chats started inside the panel inherit this scope, the tab\n * bar partitions per (storageKey, scope), and the user gets a \"Working\n * on {label}\" badge with a Detach escape hatch. Templates compute this\n * from the current route — see the `Layout` files for each template.\n */\n scope?: import(\"./use-chat-threads.js\").ChatThreadScope | null;\n /** Stable browser tab id used for tab-scoped app-state context. */\n browserTabId?: string;\n /** Optional notice rendered below the main header while Chat mode is active. */\n chatNotice?: React.ReactNode;\n /** Capability gate for source edits and CLI access. */\n codeAccess?: AgentPanelCodeAccess;\n}\n\nfunction useClientOnly() {\n const [mounted, setMounted] = useState(false);\n useEffect(() => setMounted(true), []);\n return mounted;\n}\n\nfunction CodeAccessUnavailablePanel({\n title,\n description,\n ctaLabel,\n ctaHref,\n secondaryCtaLabel = \"Use Builder\",\n secondaryCtaHref,\n compact = false,\n}: {\n title: string;\n description: string;\n ctaLabel: string;\n ctaHref?: string;\n secondaryCtaLabel?: string;\n secondaryCtaHref?: string;\n compact?: boolean;\n}) {\n const { connectUrl: builderConnectUrl } = useBuilderConnectUrl();\n const builderHref =\n secondaryCtaHref ?? builderConnectUrl ?? \"https://builder.io\";\n\n return (\n <div\n className={cn(\n \"rounded-lg border border-border bg-muted/35 text-center\",\n compact ? \"mx-3 mt-2 px-3 py-2.5\" : \"max-w-[300px] px-4 py-4\",\n )}\n >\n <div\n className={cn(\n \"mx-auto flex items-center justify-center rounded-full bg-background text-muted-foreground\",\n compact ? \"mb-2 h-8 w-8\" : \"mb-3 h-10 w-10\",\n )}\n >\n <IconTerminal2 className={compact ? \"h-4 w-4\" : \"h-5 w-5\"} />\n </div>\n <p className=\"text-sm font-medium text-foreground\">{title}</p>\n <p\n className={cn(\n \"mt-1 text-muted-foreground\",\n compact ? \"text-[11px] leading-snug\" : \"text-xs leading-relaxed\",\n )}\n >\n {description}\n </p>\n <div className=\"mt-3 flex flex-wrap items-center justify-center gap-2\">\n {ctaHref ? (\n <a\n href={ctaHref}\n target=\"_blank\"\n rel=\"noreferrer\"\n className=\"inline-flex items-center gap-1.5 rounded-md bg-foreground px-3 py-1.5 text-xs font-medium text-background hover:opacity-90\"\n >\n {ctaLabel}\n <IconExternalLink className=\"h-3 w-3\" />\n </a>\n ) : null}\n <a\n href={builderHref}\n target=\"_blank\"\n rel=\"noreferrer\"\n onClick={() => {\n trackEvent(\"builder connect clicked\", {\n feature: \"builder\",\n stage: \"client\",\n source: \"code_access_unavailable_panel\",\n connect_url_kind: builderConnectUrl ? \"provided\" : \"fallback\",\n });\n }}\n className=\"inline-flex items-center gap-1.5 rounded-md border border-border bg-background px-3 py-1.5 text-xs font-medium text-foreground hover:bg-accent\"\n >\n {secondaryCtaLabel}\n <IconExternalLink className=\"h-3 w-3\" />\n </a>\n </div>\n </div>\n );\n}\n\nfunction AgentPanelInner({\n defaultMode = \"chat\",\n className,\n apiUrl,\n emptyStateText,\n suggestions,\n showHeader = true,\n onCollapse,\n isFullscreen,\n onToggleFullscreen,\n devAppUrl,\n storageKey,\n scope,\n browserTabId,\n chatNotice,\n codeAccess,\n}: AgentPanelProps) {\n const mounted = useClientOnly();\n const keyPrefix = storageKey ? `:${storageKey}` : \"\";\n const execModeKey = `${EXEC_MODE_KEY}${keyPrefix}`;\n const panelModeKey = `agent-native-panel-mode${keyPrefix}`;\n const isMac = useMemo(\n () =>\n typeof navigator !== \"undefined\" &&\n /Mac|iPhone|iPad/.test(navigator.userAgent),\n [],\n );\n const closeTabHint = isMac ? \"\\u2303W\" : \"Alt+W\";\n const closeAllTabsHint = isMac ? \"\\u2303\\u2325W\" : \"Ctrl+Alt+W\";\n\n const [execMode, setExecMode] = useState<ExecMode>(() => {\n try {\n const saved = localStorage.getItem(execModeKey);\n if (saved === \"build\" || saved === \"plan\") return saved;\n } catch {}\n return \"build\";\n });\n\n const switchExecMode = useCallback(\n (next: ExecMode) => {\n setExecMode(next);\n try {\n localStorage.setItem(execModeKey, next);\n } catch {}\n window.dispatchEvent(\n new CustomEvent(\"agent-panel:exec-mode-change\", {\n detail: { mode: next },\n }),\n );\n },\n [execModeKey],\n );\n\n const [mode, setMode] = useState<PanelMode>(() => {\n try {\n const saved = localStorage.getItem(panelModeKey);\n if (\n saved === \"chat\" ||\n saved === \"cli\" ||\n saved === \"resources\" ||\n saved === \"settings\"\n )\n return saved;\n } catch {}\n return defaultMode;\n });\n useEffect(() => {\n try {\n localStorage.setItem(panelModeKey, mode);\n } catch {}\n }, [mode, panelModeKey]);\n const [settingsSection, setSettingsSection] = useState<{\n section: string | null;\n requestKey: number;\n }>({ section: null, requestKey: 0 });\n const switchMode = useCallback((m: PanelMode) => {\n startTransition(() => setMode(m));\n }, []);\n const activateOnKeyDown = useCallback(\n (activate: () => void) => (event: React.KeyboardEvent) => {\n if (!ACTIVATE_KEYS.has(event.key)) return;\n event.preventDefault();\n activate();\n },\n [],\n );\n\n // Listen for mode changes from the frame parent (via AgentSidebar)\n useEffect(() => {\n function handler(e: Event) {\n const detail = (e as CustomEvent).detail;\n if (detail?.mode) switchMode(detail.mode);\n }\n window.addEventListener(\"agent-panel:set-mode\", handler);\n return () => window.removeEventListener(\"agent-panel:set-mode\", handler);\n }, [switchMode]);\n\n // Open settings tab when requested (replaces the old popover open event)\n useEffect(() => {\n function handleOpenSettings(event: Event) {\n const section = (event as CustomEvent<{ section?: string }>).detail\n ?.section;\n setSettingsSection((prev) => ({\n section: section ?? null,\n requestKey: prev.requestKey + 1,\n }));\n switchMode(\"settings\");\n }\n window.addEventListener(\"agent-panel:open-settings\", handleOpenSettings);\n return () =>\n window.removeEventListener(\n \"agent-panel:open-settings\",\n handleOpenSettings,\n );\n }, [switchMode]);\n\n // CLI terminal tabs (ephemeral — not persisted to SQL)\n const [cliTabs, setCliTabs] = useState<string[]>([\"cli-1\"]);\n const [activeCliTab, setActiveCliTab] = useState(\"cli-1\");\n const cliCounter = useRef(1);\n\n const addCliTab = useCallback(() => {\n const id = `cli-${++cliCounter.current}`;\n setCliTabs((prev) => [...prev, id]);\n setActiveCliTab(id);\n }, []);\n\n const closeCliTab = useCallback(\n (id: string) => {\n setCliTabs((prev) => {\n if (prev.length <= 1) {\n // Last tab — replace with a new one (acts as \"clear\")\n const newId = `cli-${++cliCounter.current}`;\n setActiveCliTab(newId);\n return [newId];\n }\n const next = prev.filter((t) => t !== id);\n if (id === activeCliTab) {\n const idx = prev.indexOf(id);\n setActiveCliTab(next[Math.min(idx, next.length - 1)]);\n }\n return next;\n });\n },\n [activeCliTab],\n );\n\n const closeOtherCliTabs = useCallback((id: string) => {\n setCliTabs([id]);\n setActiveCliTab(id);\n }, []);\n\n const closeAllCliTabs = useCallback(() => {\n const id = `cli-${++cliCounter.current}`;\n setCliTabs([id]);\n setActiveCliTab(id);\n }, []);\n\n // Tab close shortcuts. Avoid Cmd+W (browser/OS) and (on Windows) Ctrl+W.\n // Mac: Ctrl+W → close tab, Ctrl+Alt+W → close all\n // Windows/Linux: Alt+W → close tab, Ctrl+Alt+W → close all\n // Use e.code (physical key) — on Mac, Alt+W inserts ∑ and e.key isn't \"w\".\n useEffect(() => {\n const handleKeyDown = (e: KeyboardEvent) => {\n if (e.code !== \"KeyW\" || e.metaKey || e.shiftKey) return;\n const isCloseAll = e.ctrlKey && e.altKey;\n const isCloseOne = isMac\n ? e.ctrlKey && !e.altKey\n : e.altKey && !e.ctrlKey;\n if (!isCloseAll && !isCloseOne) return;\n e.preventDefault();\n if (mode === \"chat\") {\n window.dispatchEvent(\n new CustomEvent(\n isCloseAll\n ? \"agent-chat:close-all-tabs\"\n : \"agent-chat:close-current-tab\",\n ),\n );\n } else if (mode === \"cli\") {\n if (isCloseAll) closeAllCliTabs();\n else if (activeCliTab) closeCliTab(activeCliTab);\n }\n };\n document.addEventListener(\"keydown\", handleKeyDown);\n return () => document.removeEventListener(\"keydown\", handleKeyDown);\n }, [mode, activeCliTab, closeCliTab, closeAllCliTabs, isMac]);\n\n const availableClis = useAvailableClis();\n const [selectedCli, selectCli] = useCliSelection(keyPrefix);\n const selectedLabel =\n availableClis.find((c) => c.command === selectedCli)?.label || selectedCli;\n const { isDevMode, canToggle, setDevMode } = useDevMode(apiUrl);\n const inferredCodeAccessEnabled =\n !isDevMode || isAgentNativeDesktop() || isInFrame();\n const codeAccessEnabled = codeAccess?.enabled ?? inferredCodeAccessEnabled;\n const codeUnavailableTitle =\n codeAccess?.unavailableTitle ?? \"Open Desktop to edit code\";\n const codeUnavailableDescription =\n codeAccess?.unavailableDescription ??\n \"Source-code changes and CLI access are available in the Agent Native Desktop app.\";\n const codeUnavailableCtaLabel =\n codeAccess?.unavailableCtaLabel ?? \"Download Desktop\";\n const codeUnavailableCtaHref =\n codeAccess?.unavailableCtaHref ?? \"https://www.agent-native.com/download\";\n const codeUnavailableSecondaryCtaLabel =\n codeAccess?.unavailableSecondaryCtaLabel ?? \"Use Builder\";\n const codeUnavailableSecondaryCtaHref =\n codeAccess?.unavailableSecondaryCtaHref;\n const canUseCodeTools = isDevMode && codeAccessEnabled;\n // Hide the CLI tab when embedded in the Builder.io frame — code editing\n // there happens via Builder, and the CLI panel only offers a Download\n // Desktop CTA, which adds clutter without value.\n const showCliMode = (isDevMode || !codeAccessEnabled) && !isInFrame();\n useEffect(() => {\n if (mode === \"cli\" && !showCliMode) switchMode(\"chat\");\n }, [mode, showCliMode, switchMode]);\n\n // Notify frame when dev mode changes — use both a local CustomEvent (for\n // when AgentPanel is rendered directly in the frame) AND postMessage (for\n // when AgentPanel is inside the iframe and needs to cross the boundary).\n const prevIsDevMode = useRef(isDevMode);\n useEffect(() => {\n if (prevIsDevMode.current !== isDevMode) {\n prevIsDevMode.current = isDevMode;\n window.dispatchEvent(\n new CustomEvent(\"agent-panel:dev-mode-change\", {\n detail: { isDevMode },\n }),\n );\n // Cross iframe boundary to the frame parent\n if (window.parent !== window) {\n window.parent.postMessage(\n { type: \"agentNative.devModeChange\", data: { isDevMode } },\n parentFrameTargetOrigin(),\n );\n }\n }\n }, [isDevMode]);\n\n const isLocalhost =\n mounted &&\n typeof window !== \"undefined\" &&\n (window.location.hostname === \"localhost\" ||\n window.location.hostname === \"127.0.0.1\" ||\n window.location.hostname === \"::1\");\n const showDevToggle = canToggle && isLocalhost;\n\n const renderModeButtons = useCallback(\n (activeMode: PanelMode) => (\n <TooltipProvider delayDuration={200}>\n <div className=\"flex shrink-0 items-center gap-1\">\n <Tooltip>\n <TooltipTrigger asChild>\n <button\n onClick={() => switchMode(\"chat\")}\n aria-label=\"Chat mode\"\n className={cn(\n \"flex items-center gap-1 rounded-md px-2 py-1 text-[12px] leading-none\",\n activeMode === \"chat\"\n ? \"bg-accent text-foreground\"\n : \"text-muted-foreground hover:bg-accent/50 hover:text-foreground\",\n )}\n style={AGENT_PANEL_CONTROL_STYLE}\n >\n <IconMessageCircle size={14} />\n Chat\n </button>\n </TooltipTrigger>\n <TooltipContent>Chat mode</TooltipContent>\n </Tooltip>\n {showCliMode && (\n <Tooltip>\n <TooltipTrigger asChild>\n <button\n onClick={() => switchMode(\"cli\")}\n aria-label=\"CLI terminal mode\"\n className={cn(\n \"flex items-center gap-1 rounded-md px-2 py-1 text-[12px] leading-none\",\n activeMode === \"cli\"\n ? \"bg-accent text-foreground\"\n : \"text-muted-foreground hover:bg-accent/50 hover:text-foreground\",\n )}\n style={AGENT_PANEL_CONTROL_STYLE}\n >\n <IconTerminal2 size={14} />\n CLI\n </button>\n </TooltipTrigger>\n <TooltipContent className=\"max-w-[260px]\">\n {codeAccessEnabled\n ? \"CLI terminal mode\"\n : codeUnavailableDescription}\n </TooltipContent>\n </Tooltip>\n )}\n <Tooltip>\n <TooltipTrigger asChild>\n <button\n onClick={() => switchMode(\"resources\")}\n aria-label=\"Workspace files, agents, skills, and tasks\"\n className={cn(\n \"flex items-center gap-1 rounded-md px-2 py-1 text-[12px] leading-none\",\n activeMode === \"resources\"\n ? \"bg-accent text-foreground\"\n : \"text-muted-foreground hover:bg-accent/50 hover:text-foreground\",\n )}\n style={AGENT_PANEL_CONTROL_STYLE}\n >\n <IconLayoutGrid size={14} />\n Workspace\n </button>\n </TooltipTrigger>\n <TooltipContent>\n Workspace files, agents, skills, and tasks\n </TooltipContent>\n </Tooltip>\n <Tooltip>\n <TooltipTrigger asChild>\n <button\n onClick={() => switchMode(\"settings\")}\n aria-label=\"Setup and configuration\"\n className={cn(\n \"flex items-center justify-center rounded-md px-1.5 py-1\",\n activeMode === \"settings\"\n ? \"bg-accent text-foreground\"\n : \"text-muted-foreground hover:bg-accent/50 hover:text-foreground\",\n )}\n >\n <IconSettings size={14} />\n </button>\n </TooltipTrigger>\n <TooltipContent>Setup and configuration</TooltipContent>\n </Tooltip>\n </div>\n </TooltipProvider>\n ),\n [codeAccessEnabled, codeUnavailableDescription, showCliMode],\n );\n\n const renderHeaderActions = useCallback(\n () => (\n <div className=\"flex shrink-0 items-center gap-1.5\">\n {SHOW_ONBOARDING && canUseCodeTools && (\n <Suspense fallback={null}>\n <SetupButton />\n </Suspense>\n )}\n <FeedbackButton variant=\"icon\" side=\"bottom\" align=\"end\" />\n {onToggleFullscreen && (\n <IconTooltip\n content={isFullscreen ? \"Exit fullscreen\" : \"Fullscreen\"}\n >\n <button\n onClick={onToggleFullscreen}\n aria-label={isFullscreen ? \"Exit fullscreen\" : \"Enter fullscreen\"}\n className=\"flex h-6 w-6 items-center justify-center rounded text-muted-foreground hover:text-foreground hover:bg-accent/50\"\n >\n {isFullscreen ? (\n <IconArrowsMinimize size={14} />\n ) : (\n <IconArrowsMaximize size={14} />\n )}\n </button>\n </IconTooltip>\n )}\n {onCollapse && (\n <IconTooltip content=\"Collapse sidebar\">\n <button\n onClick={onCollapse}\n aria-label=\"Collapse sidebar\"\n className=\"flex h-6 w-6 items-center justify-center rounded text-muted-foreground hover:text-foreground hover:bg-accent/50\"\n >\n <IconLayoutSidebarRightCollapse size={14} />\n </button>\n </IconTooltip>\n )}\n </div>\n ),\n [onCollapse, canUseCodeTools, onToggleFullscreen, isFullscreen],\n );\n\n const [tabMenuOpen, setTabMenuOpen] = useState<string | null>(null);\n const [cliPickerOpen, setCliPickerOpen] = useState(false);\n\n // Ref callback: scroll the active tab into view in the overflow container.\n // Uses getBoundingClientRect for reliable positioning regardless of offsetParent.\n const activeTabRefCb = useCallback((el: HTMLDivElement | null) => {\n if (!el) return;\n const container = el.parentElement;\n if (!container) return;\n // Use rAF so layout is settled after React commit\n requestAnimationFrame(() => {\n const containerRect = container.getBoundingClientRect();\n const tabRect = el.getBoundingClientRect();\n if (tabRect.left < containerRect.left) {\n container.scrollLeft += tabRect.left - containerRect.left;\n } else if (tabRect.right > containerRect.right) {\n container.scrollLeft += tabRect.right - containerRect.right;\n }\n });\n }, []);\n\n const renderChatHeader = useCallback(\n ({\n tabs,\n activeTabId,\n setActiveTabId,\n addTab,\n closeTab,\n closeOtherTabs,\n closeAllTabs,\n showHistory,\n toggleHistory,\n }: MultiTabAssistantChatHeaderProps) => (\n <div className=\"flex flex-col shrink-0\">\n {/* Top bar: mode buttons + actions */}\n <div\n className={AGENT_PANEL_HEADER_CLASS}\n style={AGENT_PANEL_HEADER_STYLE}\n >\n <div className=\"flex min-w-0 flex-1 items-center gap-1 overflow-hidden\">\n {renderModeButtons(mode)}\n </div>\n <div className=\"flex items-center gap-0.5\">\n {renderHeaderActions()}\n </div>\n </div>\n {mode === \"chat\" && chatNotice ? (\n <div className=\"border-b border-border\">{chatNotice}</div>\n ) : null}\n {/* Tab bar: visible for chat, and for CLI only when terminals are usable. */}\n {(mode === \"chat\" || (mode === \"cli\" && canUseCodeTools)) &&\n (() => {\n // Compute parent/child tab groups for the sub-tab bar\n const activeTab = tabs.find((t) => t.id === activeTabId);\n // The \"focus parent\" is the parent thread for the active context\n const focusParentId = activeTab?.parentThreadId || activeTabId;\n const childTabs = tabs.filter(\n (t) => t.parentThreadId === focusParentId,\n );\n const hasSubTabs = childTabs.length > 0;\n // Main row: only show top-level (non-child) tabs\n const mainTabs = tabs.filter((t) => !t.parentThreadId);\n\n return (\n <>\n <div className=\"flex items-center px-2 py-1 border-b border-border gap-0.5\">\n <div className=\"agent-tabs-scroll flex items-center gap-0.5 min-w-0 overflow-x-auto flex-1\">\n {mode === \"chat\"\n ? mainTabs.map((tab) => {\n // Highlight the parent tab if a child is active\n const isActive =\n tab.id === activeTabId ||\n (tab.id === focusParentId &&\n activeTab?.parentThreadId === tab.id);\n return (\n <div\n key={tab.id}\n role=\"button\"\n tabIndex={0}\n ref={isActive ? activeTabRefCb : undefined}\n onClick={() => setActiveTabId(tab.id)}\n onKeyDown={activateOnKeyDown(() =>\n setActiveTabId(tab.id),\n )}\n className={cn(\n \"agent-tab relative flex shrink-0 items-center gap-1 rounded-md px-2.5 py-1.5 text-[11px] font-medium cursor-pointer max-w-[150px]\",\n isActive\n ? \"bg-accent text-foreground\"\n : \"text-muted-foreground hover:bg-accent hover:text-foreground\",\n )}\n >\n <span className=\"truncate pr-1\">{tab.label}</span>\n {tab.status === \"running\" && (\n <span className=\"h-1.5 w-1.5 shrink-0 rounded-full bg-muted-foreground/50 animate-pulse\" />\n )}\n <button\n type=\"button\"\n aria-label=\"Close tab\"\n onClick={(e) => {\n e.stopPropagation();\n closeTab(tab.id);\n }}\n className=\"agent-tab-close flex items-center justify-end text-muted-foreground hover:text-foreground\"\n style={{\n position: \"absolute\",\n right: 0,\n top: 0,\n bottom: 0,\n width: 28,\n paddingRight: 6,\n borderRadius: \"0 6px 6px 0\",\n background:\n \"linear-gradient(to right, transparent, hsl(var(--accent)) 40%)\",\n }}\n >\n <IconX size={10} />\n </button>\n </div>\n );\n })\n : cliTabs.map((id, i) => (\n <div\n key={id}\n role=\"button\"\n tabIndex={0}\n ref={\n id === activeCliTab ? activeTabRefCb : undefined\n }\n onClick={() => setActiveCliTab(id)}\n onKeyDown={activateOnKeyDown(() =>\n setActiveCliTab(id),\n )}\n className={cn(\n \"agent-tab relative flex shrink-0 items-center gap-1 rounded-md px-2.5 py-1.5 text-[11px] font-medium cursor-pointer\",\n id === activeCliTab\n ? \"bg-accent text-foreground\"\n : \"text-muted-foreground hover:bg-accent hover:text-foreground\",\n )}\n >\n <span>Terminal {i + 1}</span>\n <button\n type=\"button\"\n aria-label=\"Close tab\"\n onClick={(e) => {\n e.stopPropagation();\n closeCliTab(id);\n }}\n className=\"agent-tab-close flex items-center justify-end text-muted-foreground hover:text-foreground\"\n style={{\n position: \"absolute\",\n right: 0,\n top: 0,\n bottom: 0,\n width: 28,\n paddingRight: 6,\n borderRadius: \"0 6px 6px 0\",\n background:\n \"linear-gradient(to right, transparent, hsl(var(--accent)) 40%)\",\n }}\n >\n <IconX size={10} />\n </button>\n </div>\n ))}\n </div>\n <div className=\"flex items-center gap-0.5 shrink-0 ml-auto\">\n {mode === \"chat\" && (\n <>\n <IconTooltip content=\"New chat\">\n <button\n onClick={addTab}\n aria-label=\"New chat\"\n className=\"flex h-5 w-5 items-center justify-center rounded text-muted-foreground hover:text-foreground hover:bg-accent/50\"\n >\n <IconPlus size={14} />\n </button>\n </IconTooltip>\n {toggleHistory && (\n <IconTooltip content=\"All chats\">\n <button\n onClick={toggleHistory}\n aria-label=\"All chats\"\n className={cn(\n \"flex h-5 w-5 items-center justify-center rounded text-muted-foreground hover:text-foreground hover:bg-accent/50\",\n showHistory && \"bg-accent text-foreground\",\n )}\n >\n <IconHistory size={14} />\n </button>\n </IconTooltip>\n )}\n <DropdownMenu\n open={tabMenuOpen === \"__chat_global\"}\n onOpenChange={(open) =>\n setTabMenuOpen(open ? \"__chat_global\" : null)\n }\n >\n <DropdownMenuTrigger asChild>\n <button\n className={cn(\n \"flex h-5 w-5 items-center justify-center rounded text-muted-foreground hover:text-foreground hover:bg-accent/50\",\n tabMenuOpen === \"__chat_global\" &&\n \"bg-accent text-foreground\",\n )}\n aria-label=\"Chat tab options\"\n >\n <IconDotsVertical size={14} />\n </button>\n </DropdownMenuTrigger>\n <DropdownMenuContent\n align=\"end\"\n sideOffset={4}\n className=\"w-44\"\n >\n <DropdownMenuItem\n onSelect={() => closeTab(activeTabId)}\n >\n Close Tab\n <DropdownMenuShortcut>\n {closeTabHint}\n </DropdownMenuShortcut>\n </DropdownMenuItem>\n <DropdownMenuItem\n onSelect={() => closeOtherTabs(activeTabId)}\n >\n Close Other Tabs\n </DropdownMenuItem>\n <DropdownMenuItem onSelect={() => closeAllTabs()}>\n Close All Tabs\n <DropdownMenuShortcut>\n {closeAllTabsHint}\n </DropdownMenuShortcut>\n </DropdownMenuItem>\n </DropdownMenuContent>\n </DropdownMenu>\n </>\n )}\n {mode === \"cli\" && (\n <>\n <IconTooltip content=\"New terminal\">\n <button\n onClick={addCliTab}\n aria-label=\"New terminal\"\n className=\"flex h-5 w-5 items-center justify-center rounded text-muted-foreground hover:text-foreground hover:bg-accent/50\"\n >\n <IconPlus size={14} />\n </button>\n </IconTooltip>\n {availableClis.length > 0 && (\n <DropdownMenu\n open={cliPickerOpen}\n onOpenChange={setCliPickerOpen}\n >\n <DropdownMenuTrigger asChild>\n <button\n aria-label={`Select CLI, currently ${selectedLabel}`}\n className={cn(\n \"flex h-5 w-5 items-center justify-center rounded text-muted-foreground hover:text-foreground hover:bg-accent/50\",\n cliPickerOpen && \"bg-accent text-foreground\",\n )}\n >\n <IconSettings size={14} />\n </button>\n </DropdownMenuTrigger>\n <DropdownMenuContent\n align=\"end\"\n sideOffset={4}\n className=\"w-48\"\n >\n {availableClis.map((cli) => (\n <DropdownMenuItem\n key={cli.command}\n onSelect={() => selectCli(cli.command)}\n className={cn(\n cli.command === selectedCli\n ? \"font-medium\"\n : \"text-muted-foreground\",\n )}\n >\n {cli.command === selectedCli ? (\n <IconCheck size={12} className=\"shrink-0\" />\n ) : (\n <span className=\"w-3\" />\n )}\n {cli.label}\n </DropdownMenuItem>\n ))}\n </DropdownMenuContent>\n </DropdownMenu>\n )}\n <DropdownMenu\n open={tabMenuOpen === \"__cli_global\"}\n onOpenChange={(open) =>\n setTabMenuOpen(open ? \"__cli_global\" : null)\n }\n >\n <DropdownMenuTrigger asChild>\n <button\n className={cn(\n \"flex h-5 w-5 items-center justify-center rounded text-muted-foreground hover:text-foreground hover:bg-accent/50\",\n tabMenuOpen === \"__cli_global\" &&\n \"bg-accent text-foreground\",\n )}\n aria-label=\"Terminal tab options\"\n >\n <IconDotsVertical size={14} />\n </button>\n </DropdownMenuTrigger>\n <DropdownMenuContent\n align=\"end\"\n sideOffset={4}\n className=\"w-44\"\n >\n <DropdownMenuItem\n onSelect={() => closeCliTab(activeCliTab)}\n >\n Close Tab\n <DropdownMenuShortcut>\n {closeTabHint}\n </DropdownMenuShortcut>\n </DropdownMenuItem>\n <DropdownMenuItem\n onSelect={() => closeOtherCliTabs(activeCliTab)}\n >\n Close Other Tabs\n </DropdownMenuItem>\n <DropdownMenuItem\n onSelect={() => closeAllCliTabs()}\n >\n Close All Tabs\n <DropdownMenuShortcut>\n {closeAllTabsHint}\n </DropdownMenuShortcut>\n </DropdownMenuItem>\n </DropdownMenuContent>\n </DropdownMenu>\n </>\n )}\n </div>\n </div>\n {/* Sub-agent tab row — shown when the active context has children */}\n {mode === \"chat\" && hasSubTabs && (\n <div className=\"flex items-center px-2 py-0.5 border-b border-border gap-0.5 bg-muted/30\">\n <div className=\"agent-tabs-scroll flex items-center gap-0.5 min-w-0 overflow-x-auto flex-1\">\n <div\n role=\"button\"\n tabIndex={0}\n onClick={() => setActiveTabId(focusParentId)}\n onKeyDown={activateOnKeyDown(() =>\n setActiveTabId(focusParentId),\n )}\n className={cn(\n \"flex shrink-0 items-center gap-1 rounded-md px-2 py-1 text-[10px] font-medium cursor-pointer\",\n activeTabId === focusParentId\n ? \"bg-accent text-foreground\"\n : \"text-muted-foreground hover:bg-accent hover:text-foreground\",\n )}\n >\n Main\n </div>\n {childTabs.map((tab) => (\n <div\n key={tab.id}\n role=\"button\"\n tabIndex={0}\n ref={\n tab.id === activeTabId ? activeTabRefCb : undefined\n }\n onClick={() => setActiveTabId(tab.id)}\n onKeyDown={activateOnKeyDown(() =>\n setActiveTabId(tab.id),\n )}\n className={cn(\n \"agent-tab relative flex shrink-0 items-center gap-1 rounded-md px-2 py-1 text-[10px] font-medium cursor-pointer max-w-[140px]\",\n tab.id === activeTabId\n ? \"bg-accent text-foreground\"\n : \"text-muted-foreground hover:bg-accent hover:text-foreground\",\n )}\n >\n <span className=\"truncate pr-1\">\n {tab.subAgentName || tab.label}\n </span>\n {tab.status === \"running\" && (\n <span className=\"h-1 w-1 shrink-0 rounded-full bg-muted-foreground/50 animate-pulse\" />\n )}\n <button\n type=\"button\"\n aria-label=\"Close tab\"\n onClick={(e) => {\n e.stopPropagation();\n closeTab(tab.id);\n }}\n className=\"agent-tab-close flex items-center justify-end text-muted-foreground hover:text-foreground\"\n style={{\n position: \"absolute\",\n right: 0,\n top: 0,\n bottom: 0,\n width: 24,\n paddingRight: 4,\n borderRadius: \"0 6px 6px 0\",\n background:\n \"linear-gradient(to right, transparent, hsl(var(--accent)) 40%)\",\n }}\n >\n <IconX size={8} />\n </button>\n </div>\n ))}\n </div>\n </div>\n )}\n </>\n );\n })()}\n </div>\n ),\n [\n mode,\n renderHeaderActions,\n renderModeButtons,\n chatNotice,\n canUseCodeTools,\n cliTabs,\n activeCliTab,\n addCliTab,\n closeCliTab,\n closeOtherCliTabs,\n closeAllCliTabs,\n tabMenuOpen,\n availableClis,\n selectedCli,\n selectedLabel,\n selectCli,\n cliPickerOpen,\n closeTabHint,\n closeAllTabsHint,\n ],\n );\n\n return (\n <div\n className={cn(\n \"agent-panel-root flex flex-1 flex-col min-h-0 h-full text-[13px] leading-[1.2] antialiased\",\n className,\n )}\n style={AGENT_PANEL_ROOT_STYLE}\n data-agent-fullscreen={isFullscreen ? \"true\" : undefined}\n >\n {/* Tailwind group-hover/tab doesn't work in core package — inject directly.\n Fullscreen rules center the message stream and composer to a Claude-style\n column while leaving the header bar at full width so the action buttons\n stay pinned to the top corners. */}\n <style\n dangerouslySetInnerHTML={{\n __html:\n \".agent-tab-close{opacity:0}.agent-tab:hover .agent-tab-close{opacity:1}\" +\n \".agent-tabs-scroll{scrollbar-width:none;-ms-overflow-style:none;}\" +\n \".agent-tabs-scroll::-webkit-scrollbar{display:none;}\" +\n `[data-agent-fullscreen='true'] .agent-thread-content,` +\n `[data-agent-fullscreen='true'] .agent-composer-area{` +\n `max-width:${FULLSCREEN_CONTENT_MAX_PX}px;` +\n `margin-left:auto;margin-right:auto;width:100%;}`,\n }}\n />\n {/* Framework onboarding — appears above the chat/cli/settings tabs\n so it's visible regardless of which tab the user is on. The panel\n hides itself once all required steps are done or the user\n dismisses it. Gated by SHOW_ONBOARDING until the UX is improved. */}\n {SHOW_ONBOARDING && mounted && canUseCodeTools && (\n <Suspense fallback={null}>\n <OnboardingPanel />\n </Suspense>\n )}\n\n {/* Chat view — always mounted to preserve state.\n Header (with tabs + mode buttons) is always visible.\n Chat content is hidden when CLI or resources mode is active.\n The wrapper collapses (no flex-1) when another mode is active\n so it only takes the height of its header. */}\n <div\n className={cn(\n \"flex flex-col min-h-0\",\n mode === \"chat\" ? \"flex-1\" : \"shrink-0\",\n )}\n >\n {mounted && (\n <MultiTabAssistantChat\n apiUrl={apiUrl}\n showHeader={false}\n renderHeader={showHeader ? renderChatHeader : undefined}\n renderOverlay={undefined}\n contentHidden={mode !== \"chat\"}\n emptyStateText={emptyStateText}\n suggestions={suggestions}\n onSwitchToCli={() => switchMode(\"cli\")}\n execMode={execMode}\n onExecModeChange={switchExecMode}\n storageKey={storageKey}\n scope={scope}\n browserTabId={browserTabId}\n />\n )}\n </div>\n\n {/* CLI terminals — code-capable dev mode: real terminal, otherwise handoff. */}\n {canUseCodeTools\n ? mode === \"cli\" &&\n cliTabs.map((id) => (\n <div\n key={id}\n className=\"min-h-0 relative flex-1\"\n style={{\n display: id === activeCliTab ? undefined : \"none\",\n }}\n >\n <Suspense\n fallback={\n <div className=\"flex items-center justify-center h-full text-muted-foreground text-sm\">\n Loading terminal...\n </div>\n }\n >\n <AgentTerminal\n command={selectedCli}\n hideInFrame={false}\n className=\"h-full\"\n style={{ background: \"transparent\" }}\n />\n </Suspense>\n </div>\n ))\n : mode === \"cli\" && (\n <div className=\"flex flex-1 flex-col items-center justify-center min-h-0 px-6 gap-3\">\n <CodeAccessUnavailablePanel\n title={\n codeAccessEnabled\n ? \"CLI requires dev mode\"\n : codeUnavailableTitle\n }\n description={\n codeAccessEnabled\n ? \"Run this app locally with pnpm dev or use Builder.io to access the CLI terminal.\"\n : codeUnavailableDescription\n }\n ctaLabel={codeUnavailableCtaLabel}\n ctaHref={codeAccessEnabled ? undefined : codeUnavailableCtaHref}\n secondaryCtaLabel={codeUnavailableSecondaryCtaLabel}\n secondaryCtaHref={codeUnavailableSecondaryCtaHref}\n />\n </div>\n )}\n\n {/* Resources view */}\n {mode === \"resources\" && (\n <div className=\"flex-1 min-h-0\">\n <Suspense\n fallback={\n <div className=\"flex h-full flex-col min-h-0\">\n <div className=\"flex shrink-0 items-center justify-between border-b border-border px-2 py-1.5\">\n <div className=\"flex items-center gap-1\">\n <div className=\"h-5 w-16 rounded bg-muted animate-pulse\" />\n <div className=\"h-5 w-14 rounded bg-muted animate-pulse\" />\n </div>\n </div>\n </div>\n }\n >\n <ResourcesPanel />\n </Suspense>\n </div>\n )}\n\n {/* Settings / Setup view */}\n {mode === \"settings\" && (\n <div className=\"flex flex-col flex-1 min-h-0\">\n <Suspense\n fallback={\n <div className=\"p-3 space-y-2\">\n <div className=\"h-10 w-full rounded-lg bg-muted animate-pulse\" />\n <div className=\"h-10 w-full rounded-lg bg-muted animate-pulse\" />\n <div className=\"h-10 w-full rounded-lg bg-muted animate-pulse\" />\n </div>\n }\n >\n <SettingsPanel\n isDevMode={isDevMode}\n onToggleDevMode={() => setDevMode(!isDevMode)}\n showDevToggle={showDevToggle}\n devAppUrl={devAppUrl}\n initialSection={settingsSection.section}\n sectionRequestKey={settingsSection.requestKey}\n />\n </Suspense>\n </div>\n )}\n </div>\n );\n}\n\n// ─── Resize handle ──────────────────────────────────────────────────────────\n\nconst SIDEBAR_STORAGE_KEY = \"agent-native-sidebar-width\";\nconst SIDEBAR_FULLSCREEN_KEY = \"agent-native-sidebar-fullscreen\";\nconst SIDEBAR_MIN = 280;\nconst SIDEBAR_MAX = 700;\nconst SIDEBAR_OVERLAY_Z_INDEX = 70;\nconst SIDEBAR_FULLSCREEN_Z_INDEX = 90;\n/** Max width of the centered chat column in fullscreen mode (Claude-style). */\nconst FULLSCREEN_CONTENT_MAX_PX = 760;\n\nfunction ResizeHandle({\n position,\n onDrag,\n}: {\n position: \"left\" | \"right\";\n onDrag: (delta: number) => void;\n}) {\n const ref = useRef<HTMLDivElement>(null);\n const dragging = useRef(false);\n const lastX = useRef(0);\n const onDragRef = useRef(onDrag);\n onDragRef.current = onDrag;\n const GRAB_ZONE = 5; // px on each side of the border\n\n // All drag logic runs via document-level listeners so the 1px-wide\n // element doesn't need to capture pointer events itself.\n useEffect(() => {\n const el = ref.current;\n if (!el) return;\n let cursorActive = false;\n\n function onMouseDown(e: MouseEvent) {\n const rect = el!.getBoundingClientRect();\n const dist = Math.abs(e.clientX - (rect.left + rect.width / 2));\n if (dist > GRAB_ZONE) return;\n e.preventDefault();\n dragging.current = true;\n lastX.current = e.clientX;\n document.body.style.cursor = \"col-resize\";\n document.body.style.userSelect = \"none\";\n }\n\n function onMouseMove(e: MouseEvent) {\n if (dragging.current) {\n const delta = e.clientX - lastX.current;\n lastX.current = e.clientX;\n onDragRef.current(position === \"left\" ? delta : -delta);\n return;\n }\n // Hover cursor\n const rect = el!.getBoundingClientRect();\n const dist = Math.abs(e.clientX - (rect.left + rect.width / 2));\n const near = dist <= GRAB_ZONE;\n if (near && !cursorActive) {\n cursorActive = true;\n document.body.style.cursor = \"col-resize\";\n } else if (!near && cursorActive) {\n cursorActive = false;\n document.body.style.cursor = \"\";\n }\n }\n\n function onMouseUp() {\n if (!dragging.current) return;\n dragging.current = false;\n document.body.style.cursor = \"\";\n document.body.style.userSelect = \"\";\n }\n\n document.addEventListener(\"mousedown\", onMouseDown);\n document.addEventListener(\"mousemove\", onMouseMove);\n document.addEventListener(\"mouseup\", onMouseUp);\n return () => {\n document.removeEventListener(\"mousedown\", onMouseDown);\n document.removeEventListener(\"mousemove\", onMouseMove);\n document.removeEventListener(\"mouseup\", onMouseUp);\n if (cursorActive) document.body.style.cursor = \"\";\n };\n }, [position]);\n\n return (\n <div\n ref={ref}\n className={cn(\n \"relative z-20 shrink-0 w-px touch-none select-none transition-colors\",\n \"bg-border hover:bg-accent active:bg-accent\",\n )}\n style={{ cursor: \"col-resize\" }}\n />\n );\n}\n\n/**\n * Remounts its children whenever the framework's `refresh-screen` tool is\n * invoked. Used inside AgentSidebar so the main content area re-fetches\n * without disturbing the chat sidebar's in-flight state.\n *\n * Two mechanisms work together here:\n *\n * 1. Before the remount, every react-query cache entry is marked stale\n * via `invalidateQueries({ refetchType: \"none\" })`. This does NOT\n * trigger a refetch on its own, so active queries elsewhere (chat\n * sidebar, left nav) keep their current data — they'll refetch only\n * on their next natural trigger.\n * 2. The React `key` then bumps, unmounting and remounting the subtree.\n * On remount, child components re-subscribe to their queries, see\n * the data is stale, and refetch — regardless of configured\n * `staleTime`. This is what makes the dashboard pick up the agent's\n * edits even when the query uses `staleTime: 30_000` or similar.\n */\n/**\n * Syncs the current URL (pathname + search + hash) to application_state\n * under `__url__`, and processes one-shot URL-update commands the agent\n * writes to `__set_url__`. Lives inside AgentSidebar so every framework\n * template gets URL visibility + URL-write capability for its agent\n * without per-template wiring.\n *\n * Two directions:\n * UI → state — on route change, write `{ pathname, search, hash,\n * searchParams }` to `__url__`. The production agent reads\n * this and includes it in the auto-injected `<current-url>`\n * block, so the agent always knows what page the user is\n * on, including filter/search params like `?f_date=2026-01`.\n *\n * state → UI — the framework's `set-search-params` / `set-url-path`\n * tools write a command to `__set_url__`. This hook reads\n * the command, applies it via react-router, then deletes\n * the key. The UI reacts in one tick, no page reload.\n */\nconst SAFE_BROWSER_TAB_ID_RE = /^[A-Za-z0-9_-]{1,96}$/;\n\nfunction URLSync({ browserTabId }: { browserTabId?: string }) {\n const location = useLocation();\n const navigate = useNavigate();\n const queryClient = useQueryClient();\n const normalizedBrowserTabId = React.useMemo(() => {\n if (typeof browserTabId !== \"string\") return undefined;\n const trimmed = browserTabId.trim();\n return SAFE_BROWSER_TAB_ID_RE.test(trimmed) ? trimmed : undefined;\n }, [browserTabId]);\n const appStateKey = React.useCallback(\n (key: string) =>\n normalizedBrowserTabId ? `${key}:${normalizedBrowserTabId}` : key,\n [normalizedBrowserTabId],\n );\n const setUrlQueryKey = React.useMemo(\n () => [\"__set_url__\", normalizedBrowserTabId ?? \"global\"],\n [normalizedBrowserTabId],\n );\n\n // Outbound: write the current URL to app-state whenever it changes.\n React.useEffect(() => {\n const searchParams: Record<string, string> = {};\n for (const [k, v] of new URLSearchParams(location.search).entries()) {\n searchParams[k] = v;\n }\n const body = {\n pathname: location.pathname,\n search: location.search,\n hash: location.hash,\n searchParams,\n };\n const write = (key: string) =>\n fetch(agentNativePath(`/_agent-native/application-state/${key}`), {\n method: \"PUT\",\n keepalive: true,\n headers: { \"Content-Type\": \"application/json\" },\n body: JSON.stringify(body),\n }).catch(() => {});\n write(appStateKey(\"__url__\"));\n if (normalizedBrowserTabId) write(\"__url__\");\n }, [\n appStateKey,\n location.pathname,\n location.search,\n location.hash,\n normalizedBrowserTabId,\n ]);\n\n // Inbound: poll for URL-update commands from the agent. `useDbSync`\n // invalidates this key on every relevant app-state event, so default\n // `structuralSharing: true` is critical — without it, repeated reads of the\n // same stale command (when the consume-DELETE below races against the next\n // invalidation) churned the useEffect and re-applied the navigation in a\n // tight loop. With structural sharing on, the previous reference is reused\n // when the JSON is unchanged so the useEffect only fires when the command\n // actually changes; the `lastProcessedDedupKeyRef` below covers the residual\n // race window after the cache is cleared to `null`.\n const { data: command } = useQuery<{\n key: string;\n command: {\n pathname?: string;\n searchParams?: Record<string, string | null>;\n mergeSearchParams?: boolean;\n hash?: string;\n _writeId?: string;\n };\n } | null>({\n queryKey: setUrlQueryKey,\n queryFn: async () => {\n const read = async (key: string) => {\n const res = await fetch(\n agentNativePath(`/_agent-native/application-state/${key}`),\n );\n if (!res.ok || res.status === 204) return null;\n const text = await res.text();\n if (!text) return null;\n const data = JSON.parse(text);\n return data ? { key, command: data } : null;\n };\n try {\n return (\n (normalizedBrowserTabId\n ? await read(appStateKey(\"__set_url__\"))\n : null) ?? (await read(\"__set_url__\"))\n );\n } catch {\n return null;\n }\n },\n refetchInterval: 2_000,\n retry: false,\n });\n\n const lastProcessedDedupKeyRef = React.useRef<string | null>(null);\n\n React.useEffect(() => {\n if (!command) return;\n const cmd = command.command;\n const dedupKey =\n cmd._writeId ??\n JSON.stringify({\n pathname: cmd.pathname,\n searchParams: cmd.searchParams,\n mergeSearchParams: cmd.mergeSearchParams,\n hash: cmd.hash,\n });\n if (lastProcessedDedupKeyRef.current === dedupKey) {\n // Same command we already handled — the DELETE below races against the\n // next polling refetch, so when it loses the same command can show up\n // again on the next tick. Re-fire DELETE and bail rather than navigate\n // again.\n fetch(\n agentNativePath(`/_agent-native/application-state/${command.key}`),\n {\n method: \"DELETE\",\n headers: { \"X-Agent-Native-CSRF\": \"1\" },\n },\n ).catch(() => {});\n queryClient.setQueryData(setUrlQueryKey, null);\n return;\n }\n lastProcessedDedupKeyRef.current = dedupKey;\n\n // Delete the one-shot command before applying so duplicate events\n // don't cause repeated navigation.\n fetch(agentNativePath(`/_agent-native/application-state/${command.key}`), {\n method: \"DELETE\",\n headers: { \"X-Agent-Native-CSRF\": \"1\" },\n }).catch(() => {});\n try {\n const current = new URL(window.location.href);\n const nextPath = cmd.pathname ?? current.pathname;\n const nextSearch =\n cmd.mergeSearchParams !== false\n ? new URLSearchParams(current.search)\n : new URLSearchParams();\n if (cmd.searchParams) {\n for (const [k, v] of Object.entries(cmd.searchParams)) {\n if (v === null || v === \"\") nextSearch.delete(k);\n else nextSearch.set(k, v);\n }\n }\n const nextHash = cmd.hash ?? current.hash;\n const qs = nextSearch.toString();\n const url = nextPath + (qs ? `?${qs}` : \"\") + (nextHash || \"\");\n // Skip the navigation if the URL is already at the target state —\n // avoids needless react-router work and any revalidation side-effects\n // that come with it.\n // Mark that the agent just wrote the URL so consumers (e.g. a\n // dashboard restoring saved filter defaults) can skip any auto-\n // restore that would clobber the agent's change. Set this BEFORE\n // the same-URL short-circuit — a no-op nav is still an explicit\n // \"agent authored this state\" signal that consumers depend on.\n try {\n sessionStorage.setItem(\"__agentUrlAppliedAt__\", String(Date.now()));\n } catch {\n // sessionStorage unavailable — not fatal.\n }\n const currentUrl =\n current.pathname + (current.search || \"\") + (current.hash || \"\");\n if (url === currentUrl) {\n queryClient.setQueryData(setUrlQueryKey, null);\n return;\n }\n // Replace rather than push so repeated agent URL updates don't\n // clutter the history stack and can't trigger extra remounts from\n // router navigation lifecycle.\n navigate(url, { replace: true });\n } catch {\n // Malformed command — ignore.\n }\n queryClient.setQueryData(setUrlQueryKey, null);\n }, [command, navigate, queryClient, setUrlQueryKey]);\n\n return null;\n}\nfunction ScreenRefreshBoundary({ children }: { children: React.ReactNode }) {\n const key = useScreenRefreshKey();\n const queryClient = useQueryClient();\n const lastKeyRef = React.useRef(key);\n if (key !== lastKeyRef.current) {\n lastKeyRef.current = key;\n // Mark every cached query stale without kicking off a refetch. The\n // subtree-level refetches happen naturally when the new tree mounts\n // below and child components re-subscribe.\n queryClient.invalidateQueries({ refetchType: \"none\" });\n }\n return <React.Fragment key={key}>{children}</React.Fragment>;\n}\n\nclass AgentPanelErrorBoundary extends React.Component<\n { children: React.ReactNode; onReset: () => void },\n { error: Error | null; staleIndexRecoveryCount: number }\n> {\n state: { error: Error | null; staleIndexRecoveryCount: number } = {\n error: null,\n staleIndexRecoveryCount: 0,\n };\n\n private recoveryTimer: ReturnType<typeof setTimeout> | null = null;\n private recoveryCooldownTimer: ReturnType<typeof setTimeout> | null = null;\n\n static getDerivedStateFromError(error: Error) {\n return { error };\n }\n\n componentDidCatch(error: Error, errorInfo: React.ErrorInfo) {\n if (isAssistantUiStaleIndexError(error)) {\n console.warn(\n \"[agent-native] Recovering agent panel after stale UI index\",\n );\n if (this.state.staleIndexRecoveryCount >= 2) {\n console.error(\n \"[agent-native] Agent panel stale-index recovery failed\",\n error,\n errorInfo,\n );\n return;\n }\n if (!this.recoveryTimer) {\n this.recoveryTimer = setTimeout(() => {\n this.recoveryTimer = null;\n this.setState((state) => ({\n error: null,\n staleIndexRecoveryCount: state.staleIndexRecoveryCount + 1,\n }));\n this.props.onReset();\n }, 0);\n }\n return;\n }\n console.error(\"[agent-native] Agent panel crashed\", error, errorInfo);\n }\n\n componentDidUpdate(\n _prevProps: Readonly<{ children: React.ReactNode; onReset: () => void }>,\n prevState: Readonly<{\n error: Error | null;\n staleIndexRecoveryCount: number;\n }>,\n ) {\n if (\n prevState.error &&\n !this.state.error &&\n this.state.staleIndexRecoveryCount > 0\n ) {\n if (this.recoveryCooldownTimer) {\n clearTimeout(this.recoveryCooldownTimer);\n }\n this.recoveryCooldownTimer = setTimeout(() => {\n this.recoveryCooldownTimer = null;\n this.setState((state) =>\n state.error ? null : { staleIndexRecoveryCount: 0 },\n );\n }, 2_000);\n }\n }\n\n componentWillUnmount() {\n if (this.recoveryTimer) {\n clearTimeout(this.recoveryTimer);\n }\n if (this.recoveryCooldownTimer) {\n clearTimeout(this.recoveryCooldownTimer);\n }\n }\n\n render() {\n if (!this.state.error) return this.props.children;\n\n if (\n isAssistantUiStaleIndexError(this.state.error) &&\n this.state.staleIndexRecoveryCount < 2\n ) {\n return (\n <div className=\"flex h-full items-center justify-center p-6 text-center text-xs text-muted-foreground\">\n Reloading chat UI...\n </div>\n );\n }\n\n return (\n <div className=\"flex h-full flex-col items-center justify-center gap-3 p-6 text-center\">\n <div className=\"max-w-[260px] space-y-1\">\n <p className=\"text-sm font-medium text-foreground\">\n Agent panel hit an internal UI error.\n </p>\n <p className=\"text-xs leading-relaxed text-muted-foreground\">\n The app is still usable. Reset the panel to reload the chat UI.\n </p>\n </div>\n <button\n type=\"button\"\n className=\"rounded-md border border-border bg-background px-3 py-1.5 text-xs font-medium text-foreground hover:bg-accent\"\n onClick={() => {\n this.setState({ error: null, staleIndexRecoveryCount: 0 });\n this.props.onReset();\n }}\n >\n Reset agent panel\n </button>\n </div>\n );\n }\n}\n\nexport function AgentPanel(props: AgentPanelProps) {\n const [resetKey, setResetKey] = useState(0);\n const resetPanel = useCallback(() => {\n try {\n const keyPrefix = props.storageKey ? `:${props.storageKey}` : \"\";\n localStorage.setItem(`agent-native-panel-mode${keyPrefix}`, \"chat\");\n } catch {}\n setResetKey((key) => key + 1);\n }, [props.storageKey]);\n return (\n <TooltipProvider delayDuration={200}>\n <AgentPanelErrorBoundary onReset={resetPanel}>\n <AgentPanelInner key={resetKey} {...props} />\n </AgentPanelErrorBoundary>\n </TooltipProvider>\n );\n}\n\n// ─── AgentSidebar — wraps content with a toggleable agent panel ─────────────\n\nexport interface AgentSidebarProps {\n children: React.ReactNode;\n /** Placeholder text for the empty chat state */\n emptyStateText?: string;\n /** Suggestion prompts shown when no messages */\n suggestions?: string[];\n /** Initial sidebar width in pixels. Mount-only; user resize and a saved\n * localStorage value override this. Default: 380 */\n defaultSidebarWidth?: number;\n /** @deprecated Use `defaultSidebarWidth` — this prop is mount-only. */\n sidebarWidth?: number;\n /** Which side the sidebar appears on. Default: \"right\" */\n position?: \"left\" | \"right\";\n /** Whether the sidebar starts open. Default: false */\n defaultOpen?: boolean;\n /** Animate the mobile overlay in a sheet-style slide transition. */\n animateMobile?: boolean;\n /**\n * Bind chats to a resource. When set, every chat started here is\n * scoped to `{type, id}`, the tab bar/history partition by that scope,\n * and a \"Working on {label}\" badge appears with a Detach option.\n * Templates compute this from the active route (see template layouts).\n */\n scope?: import(\"./use-chat-threads.js\").ChatThreadScope | null;\n /** Stable browser tab id used for tab-scoped app-state context. */\n browserTabId?: string;\n}\n\n/**\n * Wraps app content with a toggleable agent sidebar.\n * Use AgentToggleButton in your header to open/close it.\n */\nexport function AgentSidebar({\n children,\n emptyStateText = \"How can I help you?\",\n suggestions,\n defaultSidebarWidth,\n sidebarWidth,\n position = \"right\",\n defaultOpen = false,\n animateMobile = false,\n scope,\n browserTabId,\n}: AgentSidebarProps) {\n const initialWidth = defaultSidebarWidth ?? sidebarWidth ?? 380;\n const [open, setOpen] = useState(() =>\n getInitialAgentSidebarOpen(defaultOpen),\n );\n const [presentationMode, setPresentationMode] = useState(false);\n const [width, setWidth] = useState(initialWidth);\n const [fullscreen, setFullscreen] = useState(() => {\n // Force-disable on mobile: a Claude-style centered column makes no sense\n // when the sidebar already covers most of the viewport.\n if (\n typeof window !== \"undefined\" &&\n window.matchMedia(\"(max-width: 767px)\").matches\n ) {\n return false;\n }\n try {\n return localStorage.getItem(SIDEBAR_FULLSCREEN_KEY) === \"true\";\n } catch {\n return false;\n }\n });\n\n // Track mobile viewport so we can switch to overlay mode.\n const [isMobile, setIsMobile] = useState(\n () =>\n typeof window !== \"undefined\" &&\n window.matchMedia(\"(max-width: 767px)\").matches,\n );\n useEffect(() => {\n const mq = window.matchMedia(\"(max-width: 767px)\");\n const handler = (e: MediaQueryListEvent) => setIsMobile(e.matches);\n mq.addEventListener(\"change\", handler);\n return () => mq.removeEventListener(\"change\", handler);\n }, []);\n useEffect(() => {\n try {\n const saved = localStorage.getItem(SIDEBAR_STORAGE_KEY);\n if (saved) {\n const n = parseInt(saved, 10);\n if (n >= SIDEBAR_MIN && n <= SIDEBAR_MAX) setWidth(n);\n }\n } catch {}\n }, []);\n\n const setOpenPersisted = useCallback(\n (next: boolean | ((prev: boolean) => boolean)) => {\n setOpen((prev) => {\n const value = typeof next === \"function\" ? next(prev) : next;\n try {\n localStorage.setItem(SIDEBAR_OPEN_KEY, String(value));\n } catch {}\n return value;\n });\n },\n [],\n );\n\n const toggleFullscreen = useCallback(() => {\n setFullscreen((prev) => {\n const next = !prev;\n try {\n localStorage.setItem(SIDEBAR_FULLSCREEN_KEY, String(next));\n } catch {}\n return next;\n });\n }, []);\n\n // Track whether the frame is controlling the sidebar (code mode = frame active).\n // Default to true when inside an iframe — assume the frame sidebar is active\n // until told otherwise. This prevents both sidebars flashing after hot reloads.\n const [frameCodeMode, setFrameCodeMode] = useState(() =>\n shouldParentFrameOwnAgentPanel(),\n );\n // Frame sidebar visibility: we don't know the frame's open/closed state at\n // mount, so start at false and wait for the frame to dispatch its real\n // state via the message handler below. Initializing to\n // `shouldParentFrameOwnAgentPanel()` here was a category error — that\n // helper reports ownership (which side renders the sidebar), not whether\n // the sidebar is currently open. Mixing them up dispatched a stale\n // \"open: true\" before the first frame message arrived.\n const [frameSidebarOpen, setFrameSidebarOpen] = useState(false);\n // Has the frame told us its sidebar state yet? In frame-owned mode we\n // don't know whether the sidebar is open or closed until the parent frame\n // dispatches `agentNative.sidebarMode`. Emitting a synthetic\n // `{ open: false }` before that message arrives makes downstream listeners\n // flip a moment later when the real state lands, which is the same\n // ownership-vs-open-state confusion the previous fix addressed.\n const [hasFrameSidebarState, setHasFrameSidebarState] = useState(false);\n\n useEffect(() => {\n const frameOwned = frameCodeMode && shouldParentFrameOwnAgentPanel();\n // Skip the initial emit in frame-owned mode — wait until the frame has\n // sent us its real sidebar state. Once we know, this effect re-runs and\n // dispatches the correct value.\n if (frameOwned && !hasFrameSidebarState) return;\n dispatchAgentSidebarStateChange({\n open: !presentationMode && (frameOwned ? frameSidebarOpen : open),\n source: frameOwned ? \"frame\" : \"app\",\n mode: frameOwned ? \"code\" : \"app\",\n });\n }, [\n frameCodeMode,\n frameSidebarOpen,\n open,\n presentationMode,\n hasFrameSidebarState,\n ]);\n\n useEffect(() => {\n const toggleHandler = () => {\n if (frameCodeMode && shouldParentFrameOwnAgentPanel()) {\n // Forward toggle to frame parent — the frame sidebar handles it\n window.parent.postMessage(\n { type: \"agentNative.toggleSidebar\" },\n parentFrameTargetOrigin(),\n );\n } else {\n setOpenPersisted((prev) => !prev);\n }\n };\n const openHandler = () => {\n if (frameCodeMode && shouldParentFrameOwnAgentPanel()) {\n window.parent.postMessage(\n { type: \"agentNative.toggleSidebar\", data: { open: true } },\n parentFrameTargetOrigin(),\n );\n } else {\n setOpenPersisted(true);\n }\n };\n const closeHandler = () => {\n if (frameCodeMode && shouldParentFrameOwnAgentPanel()) {\n window.parent.postMessage(\n { type: \"agentNative.toggleSidebar\", data: { open: false } },\n parentFrameTargetOrigin(),\n );\n } else {\n setOpenPersisted(false);\n }\n };\n window.addEventListener(\"agent-panel:toggle\", toggleHandler);\n window.addEventListener(\"agent-panel:open\", openHandler);\n window.addEventListener(\"agent-panel:close\", closeHandler);\n return () => {\n window.removeEventListener(\"agent-panel:toggle\", toggleHandler);\n window.removeEventListener(\"agent-panel:open\", openHandler);\n window.removeEventListener(\"agent-panel:close\", closeHandler);\n };\n }, [setOpenPersisted, frameCodeMode]);\n\n // Listen for sidebar mode commands from the frame parent.\n // When frame is in \"code\" mode, hide the app sidebar.\n // When frame is in \"app\" mode, show the app sidebar, sync width and panel mode.\n useEffect(() => {\n if (window.parent === window) return; // Not in an iframe\n\n function handleMessage(event: MessageEvent) {\n if (event.data?.type !== \"agentNative.sidebarMode\") return;\n if (event.source !== window.parent || !isTrustedFrameMessage(event))\n return;\n const {\n mode,\n appMode,\n width: frameWidth,\n open: frameOpen,\n } = event.data.data || {};\n if (mode === \"code\") {\n // Frame is showing its own sidebar — hide the app's\n setFrameCodeMode(true);\n setFrameSidebarOpen(frameOpen !== false);\n setHasFrameSidebarState(true);\n setOpenPersisted(false);\n } else if (mode === \"app\") {\n // Frame deferred to the app — show and sync width + mode\n setFrameCodeMode(false);\n setFrameSidebarOpen(false);\n setHasFrameSidebarState(true);\n setOpenPersisted(frameOpen !== false);\n if (\n frameWidth &&\n frameWidth >= SIDEBAR_MIN &&\n frameWidth <= SIDEBAR_MAX\n ) {\n setWidth(frameWidth);\n }\n // Sync the panel mode from frame tab selection\n if (\n appMode === \"cli\" ||\n appMode === \"resources\" ||\n appMode === \"chat\"\n ) {\n window.dispatchEvent(\n new CustomEvent(\"agent-panel:set-mode\", {\n detail: { mode: appMode },\n }),\n );\n }\n }\n }\n window.addEventListener(\"message\", handleMessage);\n return () => window.removeEventListener(\"message\", handleMessage);\n }, [setOpenPersisted]);\n\n // Cmd+\\ / Ctrl+\\ toggles the agent sidebar globally. Cmd+I / Ctrl+I focuses\n // chat and attaches selected page text as one-shot context for the next turn.\n useEffect(() => {\n const handleKeyDown = (e: KeyboardEvent) => {\n if (\n (e.metaKey || e.ctrlKey) &&\n !e.altKey &&\n !e.shiftKey &&\n (e.key === \"\\\\\" || e.code === \"Backslash\")\n ) {\n e.preventDefault();\n window.dispatchEvent(new Event(\"agent-panel:toggle\"));\n return;\n }\n if ((e.metaKey || e.ctrlKey) && e.key === \"i\") {\n e.preventDefault();\n let selectionText = \"\";\n try {\n selectionText = window.getSelection()?.toString().trim() ?? \"\";\n } catch {}\n if (selectionText) {\n fetch(\n agentNativePath(\n \"/_agent-native/application-state/pending-selection-context\",\n ),\n {\n method: \"PUT\",\n keepalive: true,\n headers: { \"Content-Type\": \"application/json\" },\n body: JSON.stringify({\n text: selectionText,\n capturedAt: Date.now(),\n }),\n },\n ).catch(() => {});\n window.dispatchEvent(\n new CustomEvent(\"agent-panel:selection-attached\", {\n detail: { text: selectionText, length: selectionText.length },\n }),\n );\n }\n focusAgentChat();\n }\n };\n document.addEventListener(\"keydown\", handleKeyDown);\n return () => document.removeEventListener(\"keydown\", handleKeyDown);\n }, []);\n\n // Hide sidebar during presentation mode\n useEffect(() => {\n const handler = (event: MessageEvent) => {\n if (event.data?.type !== \"agentNative.presentationMode\") return;\n if (event.source !== window.parent || !isTrustedFrameMessage(event))\n return;\n setPresentationMode(event.data.data?.active === true);\n };\n window.addEventListener(\"message\", handler);\n return () => window.removeEventListener(\"message\", handler);\n }, []);\n\n const handleDrag = useCallback((delta: number) => {\n setWidth((prev) => {\n const next = Math.min(SIDEBAR_MAX, Math.max(SIDEBAR_MIN, prev + delta));\n try {\n localStorage.setItem(SIDEBAR_STORAGE_KEY, String(next));\n } catch {}\n return next;\n });\n }, []);\n\n const isLeft = position === \"left\";\n // Fullscreen only applies on desktop — on mobile the existing overlay is\n // already viewport-covering, so the maximize button is hidden and the\n // mounted state ignores any persisted value.\n const effectiveFullscreen = fullscreen && !isMobile;\n // On desktop the resize handle is also the visual divider. Avoid painting a\n // second panel border next to it.\n const showResizeHandle = !isMobile && !effectiveFullscreen && open;\n\n // On mobile the sidebar floats as a fixed overlay so the content below isn't\n // squashed. On desktop it participates in the flex layout as before, except\n // in fullscreen mode where it overlays the entire viewport (Claude-style).\n let panelStyle: React.CSSProperties;\n if (isMobile) {\n panelStyle = {\n ...AGENT_PANEL_ROOT_STYLE,\n position: \"fixed\",\n top: 0,\n [isLeft ? \"left\" : \"right\"]: 0,\n height: \"100%\",\n width,\n maxWidth: \"85vw\",\n maxHeight: \"100vh\",\n zIndex: SIDEBAR_OVERLAY_Z_INDEX,\n background: \"hsl(var(--background))\",\n borderLeft: isLeft ? \"none\" : \"1px solid hsl(var(--border))\",\n borderRight: isLeft ? \"1px solid hsl(var(--border))\" : \"none\",\n display: animateMobile || open ? \"flex\" : \"none\",\n transform: animateMobile\n ? open\n ? \"translateX(0)\"\n : `translateX(${isLeft ? \"-\" : \"\"}calc(100% + 1px))`\n : undefined,\n pointerEvents: animateMobile && !open ? \"none\" : undefined,\n willChange: animateMobile ? \"transform\" : undefined,\n };\n } else if (effectiveFullscreen) {\n panelStyle = {\n ...AGENT_PANEL_ROOT_STYLE,\n position: \"fixed\",\n inset: 0,\n width: \"100%\",\n maxHeight: \"100vh\",\n zIndex: SIDEBAR_FULLSCREEN_Z_INDEX,\n background: \"hsl(var(--background))\",\n display: open ? \"flex\" : \"none\",\n };\n } else {\n panelStyle = {\n ...AGENT_PANEL_ROOT_STYLE,\n width,\n maxHeight: \"100vh\",\n borderLeft:\n isLeft || showResizeHandle ? \"none\" : \"1px solid hsl(var(--border))\",\n borderRight:\n !isLeft || showResizeHandle ? \"none\" : \"1px solid hsl(var(--border))\",\n display: open ? \"flex\" : \"none\",\n };\n }\n\n // Always render the sidebar panel (even when closed) so MultiTabAssistantChat\n // stays mounted and can receive messages (e.g. from voice dictation) while\n // the sidebar is visually hidden. When the user opens the sidebar they'll see\n // any in-progress or completed conversations.\n const sidebar = (\n <>\n {showResizeHandle && !isLeft && (\n <ResizeHandle position={position} onDrag={handleDrag} />\n )}\n <div\n className={cn(\n \"agent-sidebar-panel flex shrink-0 flex-col overflow-hidden text-[13px] leading-[1.2] antialiased\",\n animateMobile &&\n isMobile &&\n \"shadow-2xl transition-transform duration-[260ms] ease-[cubic-bezier(0.32,0.72,0,1)] motion-reduce:transition-none\",\n )}\n style={panelStyle}\n inert={isMobile && !open ? true : undefined}\n aria-hidden={isMobile && !open ? true : undefined}\n >\n <AgentPanel\n emptyStateText={emptyStateText}\n suggestions={suggestions}\n onCollapse={() => setOpenPersisted(false)}\n isFullscreen={effectiveFullscreen}\n onToggleFullscreen={isMobile ? undefined : toggleFullscreen}\n scope={scope}\n browserTabId={browserTabId}\n />\n </div>\n {showResizeHandle && isLeft && (\n <ResizeHandle position={position} onDrag={handleDrag} />\n )}\n </>\n );\n\n return (\n <div className=\"flex min-w-0 flex-1 h-screen overflow-hidden\">\n {/* Mobile backdrop — tapping it closes the sidebar */}\n {isMobile && !presentationMode && (animateMobile || open) && (\n <div\n className={cn(\n \"fixed inset-0 bg-black/40\",\n animateMobile &&\n \"transition-opacity duration-200 motion-reduce:transition-none\",\n animateMobile && !open && \"pointer-events-none opacity-0\",\n animateMobile && open && \"opacity-100\",\n )}\n style={{ zIndex: SIDEBAR_OVERLAY_Z_INDEX - 1 }}\n onClick={() => setOpenPersisted(false)}\n />\n )}\n {/* URLSync writes the current URL to application-state so the agent\n sees what page/filters the user is on, and applies URL-update\n commands the agent writes via `set-search-params` / `set-url`. */}\n <URLSync browserTabId={browserTabId} />\n {isLeft && !presentationMode ? sidebar : null}\n <div className=\"flex flex-1 flex-col overflow-auto min-w-0\">\n {/* Screen-refresh key: the agent's `refresh-screen` tool bumps this\n counter, remounting only the main content subtree so it re-fetches\n its data. The sidebar above stays mounted, preserving chat state. */}\n <ScreenRefreshBoundary>{children}</ScreenRefreshBoundary>\n </div>\n {!isLeft && !presentationMode ? sidebar : null}\n </div>\n );\n}\n\n/**\n * Focus the agent chat composer input.\n * Opens the sidebar if closed, then focuses the text input.\n */\nexport function focusAgentChat() {\n window.dispatchEvent(new Event(\"agent-panel:open\"));\n // Wait for sidebar to render, then focus the composer\n requestAnimationFrame(() => {\n const panel = document.querySelector(\".agent-sidebar-panel\");\n if (!panel) return;\n const prosemirror = panel.querySelector(\n \".ProseMirror\",\n ) as HTMLElement | null;\n if (prosemirror) {\n prosemirror.focus();\n return;\n }\n const textarea = panel.querySelector(\"textarea\") as HTMLElement | null;\n if (textarea) textarea.focus();\n });\n}\n\n/**\n * Button to toggle the agent sidebar. Place this in your app's header/toolbar.\n * Dispatches a custom event that AgentSidebar listens for.\n */\nexport function AgentToggleButton({ className }: { className?: string }) {\n return (\n <TooltipProvider delayDuration={200}>\n <Tooltip>\n <TooltipTrigger asChild>\n <button\n type=\"button\"\n aria-label=\"Toggle agent\"\n onClick={() =>\n window.dispatchEvent(new Event(\"agent-panel:toggle\"))\n }\n className={cn(\n \"inline-flex h-8 w-8 shrink-0 items-center justify-center rounded-md text-muted-foreground transition-colors hover:bg-accent/40 hover:text-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring\",\n className,\n )}\n >\n <IconMessageDots size={20} aria-hidden />\n </button>\n </TooltipTrigger>\n <TooltipContent>Toggle agent</TooltipContent>\n </Tooltip>\n </TooltipProvider>\n );\n}\n"]}
1
+ {"version":3,"file":"AgentPanel.js","sourceRoot":"","sources":["../../src/client/AgentPanel.tsx"],"names":[],"mappings":"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","sourcesContent":["/**\n * AgentPanel — unified agent component with chat, CLI, and workspace modes.\n *\n * A self-contained panel with no layout opinions — drop it into a sidebar,\n * popover, dialog, full page, or any container. It fills its parent via\n * flex and min-h-0.\n *\n * Features:\n * - Chat mode: assistant-ui powered chat with tool calls\n * - CLI mode: embedded xterm.js terminal (dev mode only)\n * - Toggle between modes via header buttons\n *\n * Usage:\n * // In a sidebar\n * <div style={{ width: 380 }}><AgentPanel /></div>\n *\n * // In a popover\n * <Popover><AgentPanel suggestions={[...]} /></Popover>\n *\n * // Full page\n * <AgentPanel className=\"h-screen\" />\n */\n\nimport React, {\n useState,\n useEffect,\n useRef,\n useCallback,\n useMemo,\n lazy,\n Suspense,\n startTransition,\n} from \"react\";\nimport * as TooltipPrimitive from \"@radix-ui/react-tooltip\";\nimport {\n Tooltip,\n TooltipContent,\n TooltipProvider,\n TooltipTrigger,\n normalizeTooltipText,\n} from \"./components/ui/tooltip.js\";\nimport {\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuItem,\n DropdownMenuShortcut,\n DropdownMenuTrigger,\n} from \"./components/ui/dropdown-menu.js\";\nimport {\n IconMessageCircle,\n IconMessageDots,\n IconTerminal2,\n IconSettings,\n IconLayoutSidebarRightCollapse,\n IconLayoutGrid,\n IconCheck,\n IconPlus,\n IconFolder,\n IconX,\n IconClockHour3,\n IconDotsVertical,\n IconHistory,\n IconTrash,\n IconArrowsMaximize,\n IconArrowsMinimize,\n IconExternalLink,\n} from \"@tabler/icons-react\";\nimport { FeedbackButton } from \"./FeedbackButton.js\";\nimport {\n MultiTabAssistantChat,\n type MultiTabAssistantChatHeaderProps,\n} from \"./MultiTabAssistantChat.js\";\nimport {\n isAssistantUiStaleIndexError,\n type AssistantChatProps,\n} from \"./AssistantChat.js\";\nimport { useDevMode } from \"./use-dev-mode.js\";\nimport { useScreenRefreshKey } from \"./use-db-sync.js\";\nimport { useQuery, useQueryClient } from \"@tanstack/react-query\";\nimport { useLocation, useNavigate } from \"react-router\";\nimport { cn } from \"./utils.js\";\nimport { agentNativePath } from \"./api-path.js\";\nimport { trackEvent } from \"./analytics.js\";\nimport { getFrameOrigin, isInFrame, isTrustedFrameMessage } from \"./frame.js\";\nimport { shouldParentFrameOwnAgentPanel } from \"./builder-frame.js\";\nimport {\n dispatchAgentSidebarStateChange,\n getInitialAgentSidebarOpen,\n SIDEBAR_OPEN_KEY,\n} from \"./agent-sidebar-state.js\";\n\n// Lazy-load AgentTerminal to avoid bundling xterm.js when not needed\nconst AgentTerminal = lazy(() =>\n import(\"./terminal/index.js\").then((m) => ({ default: m.AgentTerminal })),\n);\n\nfunction parentFrameTargetOrigin(): string {\n return getFrameOrigin() ?? window.location.origin;\n}\n\nfunction isAgentNativeDesktop() {\n if (typeof navigator === \"undefined\") return false;\n return /AgentNativeDesktop/i.test(navigator.userAgent);\n}\n\n// Lazy-load ResourcesPanel to avoid bundling when not needed\nconst ResourcesPanel = lazy(() =>\n import(\"./resources/ResourcesPanel.js\").then((m) => ({\n default: m.ResourcesPanel,\n })),\n);\n\n// Lazy-load SettingsPanel to avoid bundling when not needed\nconst SettingsPanel = lazy(() =>\n import(\"./settings/index.js\").then((m) => ({\n default: m.SettingsPanel,\n })),\n);\n\n// Lazy-load OnboardingPanel — only pulled in when onboarding is active.\nconst OnboardingPanel = lazy(() =>\n import(\"./onboarding/OnboardingPanel.js\").then((m) => ({\n default: m.OnboardingPanel,\n })),\n);\n\n// Lazy-load SetupButton — the header entry-point that re-opens the\n// onboarding panel after the user has dismissed it.\nconst SetupButton = lazy(() =>\n import(\"./onboarding/SetupButton.js\").then((m) => ({\n default: m.SetupButton,\n })),\n);\n\n// Setup/onboarding widget is hidden until the UX is improved.\n// Flip to `true` to restore the SetupButton in the header and the\n// OnboardingPanel above the chat.\nconst SHOW_ONBOARDING = false;\n\nconst CLI_STORAGE_KEY = \"agent-native-cli-command\";\nconst CLI_DEFAULT = \"claude\";\nconst EXEC_MODE_KEY = \"agent-native-exec-mode\";\ntype ExecMode = \"build\" | \"plan\";\ntype PanelMode = \"chat\" | \"cli\" | \"resources\" | \"settings\";\nconst AGENT_PANEL_FONT_FAMILY =\n 'ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, \"Segoe UI\", sans-serif';\nconst AGENT_PANEL_ROOT_STYLE = {\n fontFamily: AGENT_PANEL_FONT_FAMILY,\n fontSize: 13,\n lineHeight: 1.2,\n} satisfies React.CSSProperties;\nconst AGENT_PANEL_HEADER_CLASS =\n \"relative z-[240] flex h-12 shrink-0 items-center justify-between gap-2 border-b border-border\";\nconst AGENT_PANEL_HEADER_STYLE = {\n paddingLeft: 8,\n paddingRight: 8,\n} satisfies React.CSSProperties;\nconst AGENT_PANEL_CONTROL_STYLE = {\n fontSize: 12,\n lineHeight: 1,\n} satisfies React.CSSProperties;\nconst ACTIVATE_KEYS = new Set([\"Enter\", \" \"]);\n\ninterface AvailableCli {\n command: string;\n label: string;\n available: boolean;\n}\n\nfunction useAvailableClis() {\n const [clis, setClis] = useState<AvailableCli[]>([]);\n useEffect(() => {\n // Try to fetch available CLIs — endpoint is provided by the terminal plugin.\n // Returns 404 gracefully when the plugin isn't loaded.\n fetch(agentNativePath(\"/_agent-native/available-clis\"))\n .then((r) => (r.ok ? r.json() : []))\n .then((data) => setClis(Array.isArray(data) ? data : []))\n .catch(() => {});\n }, []);\n return clis;\n}\n\nfunction useCliSelection(keyPrefix: string) {\n const cliKey = `${CLI_STORAGE_KEY}${keyPrefix}`;\n const [selected, setSelected] = useState(CLI_DEFAULT);\n useEffect(() => {\n try {\n const saved = localStorage.getItem(cliKey);\n if (saved) setSelected(saved);\n } catch {}\n }, [cliKey]);\n const select = (cmd: string) => {\n setSelected(cmd);\n try {\n localStorage.setItem(cliKey, cmd);\n } catch {}\n };\n return [selected, select] as const;\n}\n\n// Detect dev mode at build time (Vite replaces this)\nconst IS_DEV: boolean = import.meta.env?.DEV === true;\n\n// ─── Settings panel components moved to ./settings/ ────────────────────────\n\nfunction IconTooltip({\n content,\n children,\n}: {\n content: string;\n children: React.ReactNode;\n}) {\n return (\n <TooltipPrimitive.Provider delayDuration={250}>\n <TooltipPrimitive.Root>\n <TooltipPrimitive.Trigger asChild>{children}</TooltipPrimitive.Trigger>\n <TooltipPrimitive.Portal>\n <TooltipPrimitive.Content\n side=\"bottom\"\n sideOffset={8}\n className=\"z-[300] overflow-hidden rounded-md border border-border bg-popover px-2 py-1 text-[11px] text-foreground shadow-md\"\n >\n {normalizeTooltipText(content)}\n <TooltipPrimitive.Arrow className=\"fill-popover\" />\n </TooltipPrimitive.Content>\n </TooltipPrimitive.Portal>\n </TooltipPrimitive.Root>\n </TooltipPrimitive.Provider>\n );\n}\n\n// AgentSettingsPopover and AgentsSection moved to ./settings/\n\n// ─── AgentPanel ─────────────────────────────────────────────────────────────\n\nexport interface AgentPanelCodeAccess {\n /** Whether this surface can safely edit source and run shell commands. */\n enabled: boolean;\n /** Heading shown when code access is unavailable. */\n unavailableTitle?: string;\n /** Detail copy shown when code access is unavailable. */\n unavailableDescription?: string;\n /** Optional CTA label for the unavailable state. */\n unavailableCtaLabel?: string;\n /** Optional CTA URL for the unavailable state. */\n unavailableCtaHref?: string;\n /** Optional secondary CTA label, usually for Builder cloud code changes. */\n unavailableSecondaryCtaLabel?: string;\n /** Optional secondary CTA URL, usually the Builder connect URL. */\n unavailableSecondaryCtaHref?: string;\n /** @deprecated Chat stays available when code access is unavailable. */\n unavailableComposerPlaceholder?: string;\n}\n\nfunction useBuilderConnectUrl() {\n const [connectUrl, setConnectUrl] = useState<string | null>(null);\n const [configured, setConfigured] = useState(false);\n\n useEffect(() => {\n let cancelled = false;\n // Track previous configured state so we only fanout the\n // `agent-engine:configured-changed` event on a real false→true\n // transition. Without this, every `/builder/status` response with\n // `configured: true` dispatched the event, our own `onConfigured`\n // listener caught it (because we both fire AND listen on the same\n // global), refresh fired again, and we'd loop forever.\n let lastConfigured = false;\n const refresh = () => {\n fetch(agentNativePath(\"/_agent-native/builder/status\"))\n .then((res) => (res.ok ? res.json() : null))\n .then((data) => {\n if (cancelled || !data) return;\n if (data.cliAuthUrl || data.connectUrl) {\n setConnectUrl(data.cliAuthUrl || data.connectUrl);\n }\n const nextConfigured = !!data.configured;\n setConfigured(nextConfigured);\n if (nextConfigured && !lastConfigured) {\n lastConfigured = true;\n // Tell other listeners (the agent panel's \"Use Builder\" CTA\n // lives in a different React tree than the connect-flow popup\n // poller, so a fresh status read here is the only thing that\n // flips its UI). Dispatch only on transition so listeners\n // that share this hook don't bounce the event back here.\n window.dispatchEvent(\n new CustomEvent(\"agent-engine:configured-changed\", {\n detail: { source: \"builder-status\" },\n }),\n );\n } else if (!nextConfigured) {\n lastConfigured = false;\n }\n })\n .catch(() => {});\n };\n refresh();\n // The \"Use Builder\" CTA opens Builder in a `<a target=\"_blank\">` tab\n // (not a popup), so the previous one-shot fetch never noticed the\n // connect succeeded when the user came back to the original tab.\n const onFocus = () => refresh();\n const onVisibility = () => {\n if (document.visibilityState === \"visible\") refresh();\n };\n const onConfigured = (e: Event) => {\n // Ignore our own dispatch — refresh() already wrote the new state.\n // Other dispatchers (the connect-flow popup poller, an external\n // tab that completed connect, etc.) get the refresh they need.\n const detail = (e as CustomEvent).detail as\n | { source?: string }\n | undefined;\n if (detail?.source === \"builder-status\") return;\n refresh();\n };\n window.addEventListener(\"focus\", onFocus);\n document.addEventListener(\"visibilitychange\", onVisibility);\n window.addEventListener(\"agent-engine:configured-changed\", onConfigured);\n let channel: BroadcastChannel | null = null;\n try {\n channel = new BroadcastChannel(`builder-connect:${window.location.host}`);\n channel.onmessage = (e: MessageEvent) => {\n const data = e.data as { type?: string } | undefined;\n if (data?.type === \"builder-connect-success\") refresh();\n };\n } catch {\n // BroadcastChannel missing — focus/visibility refresh still covers it.\n }\n const onMessage = (e: MessageEvent) => {\n if (e.origin !== window.location.origin) return;\n const data = e.data as { type?: string } | undefined;\n if (data?.type === \"builder-connect-success\") refresh();\n };\n window.addEventListener(\"message\", onMessage);\n return () => {\n cancelled = true;\n window.removeEventListener(\"focus\", onFocus);\n document.removeEventListener(\"visibilitychange\", onVisibility);\n window.removeEventListener(\n \"agent-engine:configured-changed\",\n onConfigured,\n );\n window.removeEventListener(\"message\", onMessage);\n channel?.close();\n };\n }, []);\n\n return { connectUrl, configured };\n}\n\nexport interface AgentPanelProps extends Omit<\n AssistantChatProps,\n \"onSwitchToCli\"\n> {\n /** Initial mode. Default: \"chat\" */\n defaultMode?: \"chat\" | \"cli\";\n /** CSS class for the outer container */\n className?: string;\n /** Called when the user clicks the collapse button. If provided, a collapse button appears in the header. */\n onCollapse?: () => void;\n /** Whether the panel is currently in fullscreen (Claude-style centered) mode. */\n isFullscreen?: boolean;\n /** Called when the user clicks the maximize/minimize button. If provided, the button appears next to the collapse button. */\n onToggleFullscreen?: () => void;\n /** URL of the app being developed (shown as \"Open app in new tab\" in settings). Set by frame. */\n devAppUrl?: string;\n /** Namespace for localStorage keys — used to isolate chat state per app in the frame. */\n storageKey?: string;\n /**\n * Bind the chat to a specific resource (deck, design, dashboard, ...).\n * When set, chats started inside the panel inherit this scope, the tab\n * bar partitions per (storageKey, scope), and the user gets a \"Working\n * on {label}\" badge with a Detach escape hatch. Templates compute this\n * from the current route — see the `Layout` files for each template.\n */\n scope?: import(\"./use-chat-threads.js\").ChatThreadScope | null;\n /** Stable browser tab id used for tab-scoped app-state context. */\n browserTabId?: string;\n /** Optional notice rendered below the main header while Chat mode is active. */\n chatNotice?: React.ReactNode;\n /** Capability gate for source edits and CLI access. */\n codeAccess?: AgentPanelCodeAccess;\n}\n\nfunction useClientOnly() {\n const [mounted, setMounted] = useState(false);\n useEffect(() => setMounted(true), []);\n return mounted;\n}\n\nfunction CodeAccessUnavailablePanel({\n title,\n description,\n ctaLabel,\n ctaHref,\n secondaryCtaLabel = \"Use Builder\",\n secondaryCtaHref,\n compact = false,\n}: {\n title: string;\n description: string;\n ctaLabel: string;\n ctaHref?: string;\n secondaryCtaLabel?: string;\n secondaryCtaHref?: string;\n compact?: boolean;\n}) {\n const { connectUrl: builderConnectUrl } = useBuilderConnectUrl();\n const builderHref =\n secondaryCtaHref ?? builderConnectUrl ?? \"https://builder.io\";\n\n return (\n <div\n className={cn(\n \"rounded-lg border border-border bg-muted/35 text-center\",\n compact ? \"mx-3 mt-2 px-3 py-2.5\" : \"max-w-[300px] px-4 py-4\",\n )}\n >\n <div\n className={cn(\n \"mx-auto flex items-center justify-center rounded-full bg-background text-muted-foreground\",\n compact ? \"mb-2 h-8 w-8\" : \"mb-3 h-10 w-10\",\n )}\n >\n <IconTerminal2 className={compact ? \"h-4 w-4\" : \"h-5 w-5\"} />\n </div>\n <p className=\"text-sm font-medium text-foreground\">{title}</p>\n <p\n className={cn(\n \"mt-1 text-muted-foreground\",\n compact ? \"text-[11px] leading-snug\" : \"text-xs leading-relaxed\",\n )}\n >\n {description}\n </p>\n <div className=\"mt-3 flex flex-wrap items-center justify-center gap-2\">\n {ctaHref ? (\n <a\n href={ctaHref}\n target=\"_blank\"\n rel=\"noreferrer\"\n className=\"inline-flex items-center gap-1.5 rounded-md bg-foreground px-3 py-1.5 text-xs font-medium text-background hover:opacity-90\"\n >\n {ctaLabel}\n <IconExternalLink className=\"h-3 w-3\" />\n </a>\n ) : null}\n <a\n href={builderHref}\n target=\"_blank\"\n rel=\"noreferrer\"\n onClick={() => {\n trackEvent(\"builder connect clicked\", {\n feature: \"builder\",\n stage: \"client\",\n source: \"code_access_unavailable_panel\",\n connect_url_kind: builderConnectUrl ? \"provided\" : \"fallback\",\n });\n }}\n className=\"inline-flex items-center gap-1.5 rounded-md border border-border bg-background px-3 py-1.5 text-xs font-medium text-foreground hover:bg-accent\"\n >\n {secondaryCtaLabel}\n <IconExternalLink className=\"h-3 w-3\" />\n </a>\n </div>\n </div>\n );\n}\n\nfunction AgentPanelInner({\n defaultMode = \"chat\",\n className,\n apiUrl,\n emptyStateText,\n suggestions,\n showHeader = true,\n onCollapse,\n isFullscreen,\n onToggleFullscreen,\n devAppUrl,\n storageKey,\n scope,\n browserTabId,\n chatNotice,\n codeAccess,\n}: AgentPanelProps) {\n const mounted = useClientOnly();\n const keyPrefix = storageKey ? `:${storageKey}` : \"\";\n const execModeKey = `${EXEC_MODE_KEY}${keyPrefix}`;\n const panelModeKey = `agent-native-panel-mode${keyPrefix}`;\n const isMac = useMemo(\n () =>\n typeof navigator !== \"undefined\" &&\n /Mac|iPhone|iPad/.test(navigator.userAgent),\n [],\n );\n const closeTabHint = isMac ? \"\\u2303W\" : \"Alt+W\";\n const closeAllTabsHint = isMac ? \"\\u2303\\u2325W\" : \"Ctrl+Alt+W\";\n\n const [execMode, setExecMode] = useState<ExecMode>(() => {\n try {\n const saved = localStorage.getItem(execModeKey);\n if (saved === \"build\" || saved === \"plan\") return saved;\n } catch {}\n return \"build\";\n });\n\n const switchExecMode = useCallback(\n (next: ExecMode) => {\n setExecMode(next);\n try {\n localStorage.setItem(execModeKey, next);\n } catch {}\n window.dispatchEvent(\n new CustomEvent(\"agent-panel:exec-mode-change\", {\n detail: { mode: next },\n }),\n );\n },\n [execModeKey],\n );\n\n const [mode, setMode] = useState<PanelMode>(() => {\n try {\n const saved = localStorage.getItem(panelModeKey);\n if (\n saved === \"chat\" ||\n saved === \"cli\" ||\n saved === \"resources\" ||\n saved === \"settings\"\n )\n return saved;\n } catch {}\n return defaultMode;\n });\n useEffect(() => {\n try {\n localStorage.setItem(panelModeKey, mode);\n } catch {}\n }, [mode, panelModeKey]);\n const [settingsSection, setSettingsSection] = useState<{\n section: string | null;\n requestKey: number;\n }>({ section: null, requestKey: 0 });\n const switchMode = useCallback((m: PanelMode) => {\n startTransition(() => setMode(m));\n }, []);\n const activateOnKeyDown = useCallback(\n (activate: () => void) => (event: React.KeyboardEvent) => {\n if (!ACTIVATE_KEYS.has(event.key)) return;\n event.preventDefault();\n activate();\n },\n [],\n );\n\n // Listen for mode changes from the frame parent (via AgentSidebar)\n useEffect(() => {\n function handler(e: Event) {\n const detail = (e as CustomEvent).detail;\n if (detail?.mode) switchMode(detail.mode);\n }\n window.addEventListener(\"agent-panel:set-mode\", handler);\n return () => window.removeEventListener(\"agent-panel:set-mode\", handler);\n }, [switchMode]);\n\n // Open settings tab when requested (replaces the old popover open event)\n useEffect(() => {\n function handleOpenSettings(event: Event) {\n const section = (event as CustomEvent<{ section?: string }>).detail\n ?.section;\n setSettingsSection((prev) => ({\n section: section ?? null,\n requestKey: prev.requestKey + 1,\n }));\n switchMode(\"settings\");\n }\n window.addEventListener(\"agent-panel:open-settings\", handleOpenSettings);\n return () =>\n window.removeEventListener(\n \"agent-panel:open-settings\",\n handleOpenSettings,\n );\n }, [switchMode]);\n\n // CLI terminal tabs (ephemeral — not persisted to SQL)\n const [cliTabs, setCliTabs] = useState<string[]>([\"cli-1\"]);\n const [activeCliTab, setActiveCliTab] = useState(\"cli-1\");\n const cliCounter = useRef(1);\n\n const addCliTab = useCallback(() => {\n const id = `cli-${++cliCounter.current}`;\n setCliTabs((prev) => [...prev, id]);\n setActiveCliTab(id);\n }, []);\n\n const closeCliTab = useCallback(\n (id: string) => {\n setCliTabs((prev) => {\n if (prev.length <= 1) {\n // Last tab — replace with a new one (acts as \"clear\")\n const newId = `cli-${++cliCounter.current}`;\n setActiveCliTab(newId);\n return [newId];\n }\n const next = prev.filter((t) => t !== id);\n if (id === activeCliTab) {\n const idx = prev.indexOf(id);\n setActiveCliTab(next[Math.min(idx, next.length - 1)]);\n }\n return next;\n });\n },\n [activeCliTab],\n );\n\n const closeOtherCliTabs = useCallback((id: string) => {\n setCliTabs([id]);\n setActiveCliTab(id);\n }, []);\n\n const closeAllCliTabs = useCallback(() => {\n const id = `cli-${++cliCounter.current}`;\n setCliTabs([id]);\n setActiveCliTab(id);\n }, []);\n\n // Tab close shortcuts. Avoid Cmd+W (browser/OS) and (on Windows) Ctrl+W.\n // Mac: Ctrl+W → close tab, Ctrl+Alt+W → close all\n // Windows/Linux: Alt+W → close tab, Ctrl+Alt+W → close all\n // Use e.code (physical key) — on Mac, Alt+W inserts ∑ and e.key isn't \"w\".\n useEffect(() => {\n const handleKeyDown = (e: KeyboardEvent) => {\n if (e.code !== \"KeyW\" || e.metaKey || e.shiftKey) return;\n const isCloseAll = e.ctrlKey && e.altKey;\n const isCloseOne = isMac\n ? e.ctrlKey && !e.altKey\n : e.altKey && !e.ctrlKey;\n if (!isCloseAll && !isCloseOne) return;\n e.preventDefault();\n if (mode === \"chat\") {\n window.dispatchEvent(\n new CustomEvent(\n isCloseAll\n ? \"agent-chat:close-all-tabs\"\n : \"agent-chat:close-current-tab\",\n ),\n );\n } else if (mode === \"cli\") {\n if (isCloseAll) closeAllCliTabs();\n else if (activeCliTab) closeCliTab(activeCliTab);\n }\n };\n document.addEventListener(\"keydown\", handleKeyDown);\n return () => document.removeEventListener(\"keydown\", handleKeyDown);\n }, [mode, activeCliTab, closeCliTab, closeAllCliTabs, isMac]);\n\n const availableClis = useAvailableClis();\n const [selectedCli, selectCli] = useCliSelection(keyPrefix);\n const selectedLabel =\n availableClis.find((c) => c.command === selectedCli)?.label || selectedCli;\n const { isDevMode, canToggle, setDevMode } = useDevMode(apiUrl);\n const inferredCodeAccessEnabled =\n !isDevMode || isAgentNativeDesktop() || isInFrame();\n const codeAccessEnabled = codeAccess?.enabled ?? inferredCodeAccessEnabled;\n const codeUnavailableTitle =\n codeAccess?.unavailableTitle ?? \"Open Desktop to edit code\";\n const codeUnavailableDescription =\n codeAccess?.unavailableDescription ??\n \"Source-code changes and CLI access are available in the Agent Native Desktop app.\";\n const codeUnavailableCtaLabel =\n codeAccess?.unavailableCtaLabel ?? \"Download Desktop\";\n const codeUnavailableCtaHref =\n codeAccess?.unavailableCtaHref ?? \"https://www.agent-native.com/download\";\n const codeUnavailableSecondaryCtaLabel =\n codeAccess?.unavailableSecondaryCtaLabel ?? \"Use Builder\";\n const codeUnavailableSecondaryCtaHref =\n codeAccess?.unavailableSecondaryCtaHref;\n const canUseCodeTools = isDevMode && codeAccessEnabled;\n // Hide the CLI tab when embedded in the Builder.io frame — code editing\n // there happens via Builder, and the CLI panel only offers a Download\n // Desktop CTA, which adds clutter without value.\n const showCliMode = (isDevMode || !codeAccessEnabled) && !isInFrame();\n useEffect(() => {\n if (mode === \"cli\" && !showCliMode) switchMode(\"chat\");\n }, [mode, showCliMode, switchMode]);\n\n // Notify frame when dev mode changes — use both a local CustomEvent (for\n // when AgentPanel is rendered directly in the frame) AND postMessage (for\n // when AgentPanel is inside the iframe and needs to cross the boundary).\n const prevIsDevMode = useRef(isDevMode);\n useEffect(() => {\n if (prevIsDevMode.current !== isDevMode) {\n prevIsDevMode.current = isDevMode;\n window.dispatchEvent(\n new CustomEvent(\"agent-panel:dev-mode-change\", {\n detail: { isDevMode },\n }),\n );\n // Cross iframe boundary to the frame parent\n if (window.parent !== window) {\n window.parent.postMessage(\n { type: \"agentNative.devModeChange\", data: { isDevMode } },\n parentFrameTargetOrigin(),\n );\n }\n }\n }, [isDevMode]);\n\n const isLocalhost =\n mounted &&\n typeof window !== \"undefined\" &&\n (window.location.hostname === \"localhost\" ||\n window.location.hostname === \"127.0.0.1\" ||\n window.location.hostname === \"::1\");\n const showDevToggle = canToggle && isLocalhost;\n\n const renderModeButtons = useCallback(\n (activeMode: PanelMode) => (\n <TooltipProvider delayDuration={200}>\n <div className=\"flex shrink-0 items-center gap-1\">\n <Tooltip>\n <TooltipTrigger asChild>\n <button\n onClick={() => switchMode(\"chat\")}\n aria-label=\"Chat mode\"\n className={cn(\n \"flex items-center gap-1 rounded-md px-2 py-1 text-[12px] leading-none\",\n activeMode === \"chat\"\n ? \"bg-accent text-foreground\"\n : \"text-muted-foreground hover:bg-accent/50 hover:text-foreground\",\n )}\n style={AGENT_PANEL_CONTROL_STYLE}\n >\n <IconMessageCircle size={14} />\n Chat\n </button>\n </TooltipTrigger>\n <TooltipContent>Chat mode</TooltipContent>\n </Tooltip>\n {showCliMode && (\n <Tooltip>\n <TooltipTrigger asChild>\n <button\n onClick={() => switchMode(\"cli\")}\n aria-label=\"CLI terminal mode\"\n className={cn(\n \"flex items-center gap-1 rounded-md px-2 py-1 text-[12px] leading-none\",\n activeMode === \"cli\"\n ? \"bg-accent text-foreground\"\n : \"text-muted-foreground hover:bg-accent/50 hover:text-foreground\",\n )}\n style={AGENT_PANEL_CONTROL_STYLE}\n >\n <IconTerminal2 size={14} />\n CLI\n </button>\n </TooltipTrigger>\n <TooltipContent className=\"max-w-[260px]\">\n {codeAccessEnabled\n ? \"CLI terminal mode\"\n : codeUnavailableDescription}\n </TooltipContent>\n </Tooltip>\n )}\n <Tooltip>\n <TooltipTrigger asChild>\n <button\n onClick={() => switchMode(\"resources\")}\n aria-label=\"Workspace files, agents, skills, and tasks\"\n className={cn(\n \"flex items-center gap-1 rounded-md px-2 py-1 text-[12px] leading-none\",\n activeMode === \"resources\"\n ? \"bg-accent text-foreground\"\n : \"text-muted-foreground hover:bg-accent/50 hover:text-foreground\",\n )}\n style={AGENT_PANEL_CONTROL_STYLE}\n >\n <IconLayoutGrid size={14} />\n Workspace\n </button>\n </TooltipTrigger>\n <TooltipContent>\n Workspace files, agents, skills, and tasks\n </TooltipContent>\n </Tooltip>\n <Tooltip>\n <TooltipTrigger asChild>\n <button\n onClick={() => switchMode(\"settings\")}\n aria-label=\"Setup and configuration\"\n className={cn(\n \"flex items-center justify-center rounded-md px-1.5 py-1\",\n activeMode === \"settings\"\n ? \"bg-accent text-foreground\"\n : \"text-muted-foreground hover:bg-accent/50 hover:text-foreground\",\n )}\n >\n <IconSettings size={14} />\n </button>\n </TooltipTrigger>\n <TooltipContent>Setup and configuration</TooltipContent>\n </Tooltip>\n </div>\n </TooltipProvider>\n ),\n [codeAccessEnabled, codeUnavailableDescription, showCliMode],\n );\n\n const renderHeaderActions = useCallback(\n () => (\n <div className=\"flex shrink-0 items-center gap-1.5\">\n {SHOW_ONBOARDING && canUseCodeTools && (\n <Suspense fallback={null}>\n <SetupButton />\n </Suspense>\n )}\n <FeedbackButton variant=\"icon\" side=\"bottom\" align=\"end\" />\n {onToggleFullscreen && (\n <IconTooltip\n content={isFullscreen ? \"Exit fullscreen\" : \"Fullscreen\"}\n >\n <button\n onClick={onToggleFullscreen}\n aria-label={isFullscreen ? \"Exit fullscreen\" : \"Enter fullscreen\"}\n className=\"flex h-6 w-6 items-center justify-center rounded text-muted-foreground hover:text-foreground hover:bg-accent/50\"\n >\n {isFullscreen ? (\n <IconArrowsMinimize size={14} />\n ) : (\n <IconArrowsMaximize size={14} />\n )}\n </button>\n </IconTooltip>\n )}\n {onCollapse && (\n <IconTooltip content=\"Collapse sidebar\">\n <button\n onClick={onCollapse}\n aria-label=\"Collapse sidebar\"\n className=\"flex h-6 w-6 items-center justify-center rounded text-muted-foreground hover:text-foreground hover:bg-accent/50\"\n >\n <IconLayoutSidebarRightCollapse size={14} />\n </button>\n </IconTooltip>\n )}\n </div>\n ),\n [onCollapse, canUseCodeTools, onToggleFullscreen, isFullscreen],\n );\n\n const [tabMenuOpen, setTabMenuOpen] = useState<string | null>(null);\n const [cliPickerOpen, setCliPickerOpen] = useState(false);\n\n // Ref callback: scroll the active tab into view in the overflow container.\n // Uses getBoundingClientRect for reliable positioning regardless of offsetParent.\n const activeTabRefCb = useCallback((el: HTMLDivElement | null) => {\n if (!el) return;\n const container = el.parentElement;\n if (!container) return;\n // Use rAF so layout is settled after React commit\n requestAnimationFrame(() => {\n const containerRect = container.getBoundingClientRect();\n const tabRect = el.getBoundingClientRect();\n if (tabRect.left < containerRect.left) {\n container.scrollLeft += tabRect.left - containerRect.left;\n } else if (tabRect.right > containerRect.right) {\n container.scrollLeft += tabRect.right - containerRect.right;\n }\n });\n }, []);\n\n const renderChatHeader = useCallback(\n ({\n tabs,\n activeTabId,\n setActiveTabId,\n addTab,\n closeTab,\n closeOtherTabs,\n closeAllTabs,\n showHistory,\n toggleHistory,\n }: MultiTabAssistantChatHeaderProps) => (\n <div className=\"flex flex-col shrink-0\">\n {/* Top bar: mode buttons + actions */}\n <div\n className={AGENT_PANEL_HEADER_CLASS}\n style={AGENT_PANEL_HEADER_STYLE}\n >\n <div className=\"flex min-w-0 flex-1 items-center gap-1 overflow-hidden\">\n {renderModeButtons(mode)}\n </div>\n <div className=\"flex items-center gap-0.5\">\n {renderHeaderActions()}\n </div>\n </div>\n {mode === \"chat\" && chatNotice ? (\n <div className=\"border-b border-border\">{chatNotice}</div>\n ) : null}\n {/* Tab bar: visible for chat, and for CLI only when terminals are usable. */}\n {(mode === \"chat\" || (mode === \"cli\" && canUseCodeTools)) &&\n (() => {\n // Compute parent/child tab groups for the sub-tab bar\n const activeTab = tabs.find((t) => t.id === activeTabId);\n // The \"focus parent\" is the parent thread for the active context\n const focusParentId = activeTab?.parentThreadId || activeTabId;\n const childTabs = tabs.filter(\n (t) => t.parentThreadId === focusParentId,\n );\n const hasSubTabs = childTabs.length > 0;\n // Main row: only show top-level (non-child) tabs\n const mainTabs = tabs.filter((t) => !t.parentThreadId);\n\n return (\n <>\n <div className=\"flex items-center px-2 py-1 border-b border-border gap-0.5\">\n <div className=\"agent-tabs-scroll flex items-center gap-0.5 min-w-0 overflow-x-auto flex-1\">\n {mode === \"chat\"\n ? mainTabs.map((tab) => {\n // Highlight the parent tab if a child is active\n const isActive =\n tab.id === activeTabId ||\n (tab.id === focusParentId &&\n activeTab?.parentThreadId === tab.id);\n return (\n <div\n key={tab.id}\n role=\"button\"\n tabIndex={0}\n ref={isActive ? activeTabRefCb : undefined}\n onClick={() => setActiveTabId(tab.id)}\n onKeyDown={activateOnKeyDown(() =>\n setActiveTabId(tab.id),\n )}\n className={cn(\n \"agent-tab relative flex shrink-0 items-center gap-1 rounded-md px-2.5 py-1.5 text-[11px] font-medium cursor-pointer max-w-[150px]\",\n isActive\n ? \"bg-accent text-foreground\"\n : \"text-muted-foreground hover:bg-accent hover:text-foreground\",\n )}\n >\n <span className=\"truncate pr-1\">{tab.label}</span>\n {tab.status === \"running\" && (\n <span className=\"h-1.5 w-1.5 shrink-0 rounded-full bg-muted-foreground/50 animate-pulse\" />\n )}\n <button\n type=\"button\"\n aria-label=\"Close tab\"\n onClick={(e) => {\n e.stopPropagation();\n closeTab(tab.id);\n }}\n className=\"agent-tab-close flex items-center justify-end text-muted-foreground hover:text-foreground\"\n style={{\n position: \"absolute\",\n right: 0,\n top: 0,\n bottom: 0,\n width: 28,\n paddingRight: 6,\n borderRadius: \"0 6px 6px 0\",\n background:\n \"linear-gradient(to right, transparent, hsl(var(--accent)) 40%)\",\n }}\n >\n <IconX size={10} />\n </button>\n </div>\n );\n })\n : cliTabs.map((id, i) => (\n <div\n key={id}\n role=\"button\"\n tabIndex={0}\n ref={\n id === activeCliTab ? activeTabRefCb : undefined\n }\n onClick={() => setActiveCliTab(id)}\n onKeyDown={activateOnKeyDown(() =>\n setActiveCliTab(id),\n )}\n className={cn(\n \"agent-tab relative flex shrink-0 items-center gap-1 rounded-md px-2.5 py-1.5 text-[11px] font-medium cursor-pointer\",\n id === activeCliTab\n ? \"bg-accent text-foreground\"\n : \"text-muted-foreground hover:bg-accent hover:text-foreground\",\n )}\n >\n <span>Terminal {i + 1}</span>\n <button\n type=\"button\"\n aria-label=\"Close tab\"\n onClick={(e) => {\n e.stopPropagation();\n closeCliTab(id);\n }}\n className=\"agent-tab-close flex items-center justify-end text-muted-foreground hover:text-foreground\"\n style={{\n position: \"absolute\",\n right: 0,\n top: 0,\n bottom: 0,\n width: 28,\n paddingRight: 6,\n borderRadius: \"0 6px 6px 0\",\n background:\n \"linear-gradient(to right, transparent, hsl(var(--accent)) 40%)\",\n }}\n >\n <IconX size={10} />\n </button>\n </div>\n ))}\n </div>\n <div className=\"flex items-center gap-0.5 shrink-0 ml-auto\">\n {mode === \"chat\" && (\n <>\n <IconTooltip content=\"New chat\">\n <button\n onClick={addTab}\n aria-label=\"New chat\"\n className=\"flex h-5 w-5 items-center justify-center rounded text-muted-foreground hover:text-foreground hover:bg-accent/50\"\n >\n <IconPlus size={14} />\n </button>\n </IconTooltip>\n {toggleHistory && (\n <IconTooltip content=\"All chats\">\n <button\n onClick={toggleHistory}\n aria-label=\"All chats\"\n className={cn(\n \"flex h-5 w-5 items-center justify-center rounded text-muted-foreground hover:text-foreground hover:bg-accent/50\",\n showHistory && \"bg-accent text-foreground\",\n )}\n >\n <IconHistory size={14} />\n </button>\n </IconTooltip>\n )}\n <DropdownMenu\n open={tabMenuOpen === \"__chat_global\"}\n onOpenChange={(open) =>\n setTabMenuOpen(open ? \"__chat_global\" : null)\n }\n >\n <DropdownMenuTrigger asChild>\n <button\n className={cn(\n \"flex h-5 w-5 items-center justify-center rounded text-muted-foreground hover:text-foreground hover:bg-accent/50\",\n tabMenuOpen === \"__chat_global\" &&\n \"bg-accent text-foreground\",\n )}\n aria-label=\"Chat tab options\"\n >\n <IconDotsVertical size={14} />\n </button>\n </DropdownMenuTrigger>\n <DropdownMenuContent\n align=\"end\"\n sideOffset={4}\n className=\"w-44\"\n >\n <DropdownMenuItem\n onSelect={() => closeTab(activeTabId)}\n >\n Close Tab\n <DropdownMenuShortcut>\n {closeTabHint}\n </DropdownMenuShortcut>\n </DropdownMenuItem>\n <DropdownMenuItem\n onSelect={() => closeOtherTabs(activeTabId)}\n >\n Close Other Tabs\n </DropdownMenuItem>\n <DropdownMenuItem onSelect={() => closeAllTabs()}>\n Close All Tabs\n <DropdownMenuShortcut>\n {closeAllTabsHint}\n </DropdownMenuShortcut>\n </DropdownMenuItem>\n </DropdownMenuContent>\n </DropdownMenu>\n </>\n )}\n {mode === \"cli\" && (\n <>\n <IconTooltip content=\"New terminal\">\n <button\n onClick={addCliTab}\n aria-label=\"New terminal\"\n className=\"flex h-5 w-5 items-center justify-center rounded text-muted-foreground hover:text-foreground hover:bg-accent/50\"\n >\n <IconPlus size={14} />\n </button>\n </IconTooltip>\n {availableClis.length > 0 && (\n <DropdownMenu\n open={cliPickerOpen}\n onOpenChange={setCliPickerOpen}\n >\n <DropdownMenuTrigger asChild>\n <button\n aria-label={`Select CLI, currently ${selectedLabel}`}\n className={cn(\n \"flex h-5 w-5 items-center justify-center rounded text-muted-foreground hover:text-foreground hover:bg-accent/50\",\n cliPickerOpen && \"bg-accent text-foreground\",\n )}\n >\n <IconSettings size={14} />\n </button>\n </DropdownMenuTrigger>\n <DropdownMenuContent\n align=\"end\"\n sideOffset={4}\n className=\"w-48\"\n >\n {availableClis.map((cli) => (\n <DropdownMenuItem\n key={cli.command}\n onSelect={() => selectCli(cli.command)}\n className={cn(\n cli.command === selectedCli\n ? \"font-medium\"\n : \"text-muted-foreground\",\n )}\n >\n {cli.command === selectedCli ? (\n <IconCheck size={12} className=\"shrink-0\" />\n ) : (\n <span className=\"w-3\" />\n )}\n {cli.label}\n </DropdownMenuItem>\n ))}\n </DropdownMenuContent>\n </DropdownMenu>\n )}\n <DropdownMenu\n open={tabMenuOpen === \"__cli_global\"}\n onOpenChange={(open) =>\n setTabMenuOpen(open ? \"__cli_global\" : null)\n }\n >\n <DropdownMenuTrigger asChild>\n <button\n className={cn(\n \"flex h-5 w-5 items-center justify-center rounded text-muted-foreground hover:text-foreground hover:bg-accent/50\",\n tabMenuOpen === \"__cli_global\" &&\n \"bg-accent text-foreground\",\n )}\n aria-label=\"Terminal tab options\"\n >\n <IconDotsVertical size={14} />\n </button>\n </DropdownMenuTrigger>\n <DropdownMenuContent\n align=\"end\"\n sideOffset={4}\n className=\"w-44\"\n >\n <DropdownMenuItem\n onSelect={() => closeCliTab(activeCliTab)}\n >\n Close Tab\n <DropdownMenuShortcut>\n {closeTabHint}\n </DropdownMenuShortcut>\n </DropdownMenuItem>\n <DropdownMenuItem\n onSelect={() => closeOtherCliTabs(activeCliTab)}\n >\n Close Other Tabs\n </DropdownMenuItem>\n <DropdownMenuItem\n onSelect={() => closeAllCliTabs()}\n >\n Close All Tabs\n <DropdownMenuShortcut>\n {closeAllTabsHint}\n </DropdownMenuShortcut>\n </DropdownMenuItem>\n </DropdownMenuContent>\n </DropdownMenu>\n </>\n )}\n </div>\n </div>\n {/* Sub-agent tab row — shown when the active context has children */}\n {mode === \"chat\" && hasSubTabs && (\n <div className=\"flex items-center px-2 py-0.5 border-b border-border gap-0.5 bg-muted/30\">\n <div className=\"agent-tabs-scroll flex items-center gap-0.5 min-w-0 overflow-x-auto flex-1\">\n <div\n role=\"button\"\n tabIndex={0}\n onClick={() => setActiveTabId(focusParentId)}\n onKeyDown={activateOnKeyDown(() =>\n setActiveTabId(focusParentId),\n )}\n className={cn(\n \"flex shrink-0 items-center gap-1 rounded-md px-2 py-1 text-[10px] font-medium cursor-pointer\",\n activeTabId === focusParentId\n ? \"bg-accent text-foreground\"\n : \"text-muted-foreground hover:bg-accent hover:text-foreground\",\n )}\n >\n Main\n </div>\n {childTabs.map((tab) => (\n <div\n key={tab.id}\n role=\"button\"\n tabIndex={0}\n ref={\n tab.id === activeTabId ? activeTabRefCb : undefined\n }\n onClick={() => setActiveTabId(tab.id)}\n onKeyDown={activateOnKeyDown(() =>\n setActiveTabId(tab.id),\n )}\n className={cn(\n \"agent-tab relative flex shrink-0 items-center gap-1 rounded-md px-2 py-1 text-[10px] font-medium cursor-pointer max-w-[140px]\",\n tab.id === activeTabId\n ? \"bg-accent text-foreground\"\n : \"text-muted-foreground hover:bg-accent hover:text-foreground\",\n )}\n >\n <span className=\"truncate pr-1\">\n {tab.subAgentName || tab.label}\n </span>\n {tab.status === \"running\" && (\n <span className=\"h-1 w-1 shrink-0 rounded-full bg-muted-foreground/50 animate-pulse\" />\n )}\n <button\n type=\"button\"\n aria-label=\"Close tab\"\n onClick={(e) => {\n e.stopPropagation();\n closeTab(tab.id);\n }}\n className=\"agent-tab-close flex items-center justify-end text-muted-foreground hover:text-foreground\"\n style={{\n position: \"absolute\",\n right: 0,\n top: 0,\n bottom: 0,\n width: 24,\n paddingRight: 4,\n borderRadius: \"0 6px 6px 0\",\n background:\n \"linear-gradient(to right, transparent, hsl(var(--accent)) 40%)\",\n }}\n >\n <IconX size={8} />\n </button>\n </div>\n ))}\n </div>\n </div>\n )}\n </>\n );\n })()}\n </div>\n ),\n [\n mode,\n renderHeaderActions,\n renderModeButtons,\n chatNotice,\n canUseCodeTools,\n cliTabs,\n activeCliTab,\n addCliTab,\n closeCliTab,\n closeOtherCliTabs,\n closeAllCliTabs,\n tabMenuOpen,\n availableClis,\n selectedCli,\n selectedLabel,\n selectCli,\n cliPickerOpen,\n closeTabHint,\n closeAllTabsHint,\n ],\n );\n\n return (\n <div\n className={cn(\n \"agent-panel-root flex flex-1 flex-col min-h-0 h-full text-[13px] leading-[1.2] antialiased\",\n className,\n )}\n style={AGENT_PANEL_ROOT_STYLE}\n data-agent-fullscreen={isFullscreen ? \"true\" : undefined}\n >\n {/* Tailwind group-hover/tab doesn't work in core package — inject directly.\n Fullscreen rules center the message stream and composer to a Claude-style\n column while leaving the header bar at full width so the action buttons\n stay pinned to the top corners. */}\n <style\n dangerouslySetInnerHTML={{\n __html:\n \".agent-tab-close{opacity:0}.agent-tab:hover .agent-tab-close{opacity:1}\" +\n \".agent-tabs-scroll{scrollbar-width:none;-ms-overflow-style:none;}\" +\n \".agent-tabs-scroll::-webkit-scrollbar{display:none;}\" +\n `[data-agent-fullscreen='true'] .agent-thread-content,` +\n `[data-agent-fullscreen='true'] .agent-composer-area{` +\n `max-width:${FULLSCREEN_CONTENT_MAX_PX}px;` +\n `margin-left:auto;margin-right:auto;width:100%;}`,\n }}\n />\n {/* Framework onboarding — appears above the chat/cli/settings tabs\n so it's visible regardless of which tab the user is on. The panel\n hides itself once all required steps are done or the user\n dismisses it. Gated by SHOW_ONBOARDING until the UX is improved. */}\n {SHOW_ONBOARDING && mounted && canUseCodeTools && (\n <Suspense fallback={null}>\n <OnboardingPanel />\n </Suspense>\n )}\n\n {/* Chat view — always mounted to preserve state.\n Header (with tabs + mode buttons) is always visible.\n Chat content is hidden when CLI or resources mode is active.\n The wrapper collapses (no flex-1) when another mode is active\n so it only takes the height of its header. */}\n <div\n className={cn(\n \"flex flex-col min-h-0\",\n mode === \"chat\" ? \"flex-1\" : \"shrink-0\",\n )}\n >\n {mounted && (\n <MultiTabAssistantChat\n apiUrl={apiUrl}\n showHeader={false}\n renderHeader={showHeader ? renderChatHeader : undefined}\n renderOverlay={undefined}\n contentHidden={mode !== \"chat\"}\n emptyStateText={emptyStateText}\n suggestions={suggestions}\n onSwitchToCli={() => switchMode(\"cli\")}\n execMode={execMode}\n onExecModeChange={switchExecMode}\n storageKey={storageKey}\n scope={scope}\n browserTabId={browserTabId}\n />\n )}\n </div>\n\n {/* CLI terminals — code-capable dev mode: real terminal, otherwise handoff. */}\n {canUseCodeTools\n ? mode === \"cli\" &&\n cliTabs.map((id) => (\n <div\n key={id}\n className=\"min-h-0 relative flex-1\"\n style={{\n display: id === activeCliTab ? undefined : \"none\",\n }}\n >\n <Suspense\n fallback={\n <div className=\"flex items-center justify-center h-full text-muted-foreground text-sm\">\n Loading terminal...\n </div>\n }\n >\n <AgentTerminal\n command={selectedCli}\n hideInFrame={false}\n className=\"h-full\"\n style={{ background: \"transparent\" }}\n />\n </Suspense>\n </div>\n ))\n : mode === \"cli\" && (\n <div className=\"flex flex-1 flex-col items-center justify-center min-h-0 px-6 gap-3\">\n <CodeAccessUnavailablePanel\n title={\n codeAccessEnabled\n ? \"CLI requires dev mode\"\n : codeUnavailableTitle\n }\n description={\n codeAccessEnabled\n ? \"Run this app locally with pnpm dev or use Builder.io to access the CLI terminal.\"\n : codeUnavailableDescription\n }\n ctaLabel={codeUnavailableCtaLabel}\n ctaHref={codeAccessEnabled ? undefined : codeUnavailableCtaHref}\n secondaryCtaLabel={codeUnavailableSecondaryCtaLabel}\n secondaryCtaHref={codeUnavailableSecondaryCtaHref}\n />\n </div>\n )}\n\n {/* Resources view */}\n {mode === \"resources\" && (\n <div className=\"flex-1 min-h-0\">\n <Suspense\n fallback={\n <div className=\"flex h-full flex-col min-h-0\">\n <div className=\"flex shrink-0 items-center justify-between border-b border-border px-2 py-1.5\">\n <div className=\"flex items-center gap-1\">\n <div className=\"h-5 w-16 rounded bg-muted animate-pulse\" />\n <div className=\"h-5 w-14 rounded bg-muted animate-pulse\" />\n </div>\n </div>\n </div>\n }\n >\n <ResourcesPanel />\n </Suspense>\n </div>\n )}\n\n {/* Settings / Setup view */}\n {mode === \"settings\" && (\n <div className=\"flex flex-col flex-1 min-h-0\">\n <Suspense\n fallback={\n <div className=\"p-3 space-y-2\">\n <div className=\"h-10 w-full rounded-lg bg-muted animate-pulse\" />\n <div className=\"h-10 w-full rounded-lg bg-muted animate-pulse\" />\n <div className=\"h-10 w-full rounded-lg bg-muted animate-pulse\" />\n </div>\n }\n >\n <SettingsPanel\n isDevMode={isDevMode}\n onToggleDevMode={() => setDevMode(!isDevMode)}\n showDevToggle={showDevToggle}\n devAppUrl={devAppUrl}\n initialSection={settingsSection.section}\n sectionRequestKey={settingsSection.requestKey}\n />\n </Suspense>\n </div>\n )}\n </div>\n );\n}\n\n// ─── Resize handle ──────────────────────────────────────────────────────────\n\nconst SIDEBAR_STORAGE_KEY = \"agent-native-sidebar-width\";\nconst SIDEBAR_FULLSCREEN_KEY = \"agent-native-sidebar-fullscreen\";\nconst SIDEBAR_MIN = 280;\nconst SIDEBAR_MAX = 700;\nconst SIDEBAR_OVERLAY_Z_INDEX = 70;\nconst SIDEBAR_FULLSCREEN_Z_INDEX = 90;\n/** Max width of the centered chat column in fullscreen mode (Claude-style). */\nconst FULLSCREEN_CONTENT_MAX_PX = 760;\n\nfunction ResizeHandle({\n position,\n onDrag,\n}: {\n position: \"left\" | \"right\";\n onDrag: (delta: number) => void;\n}) {\n const ref = useRef<HTMLDivElement>(null);\n const dragging = useRef(false);\n const lastX = useRef(0);\n const onDragRef = useRef(onDrag);\n onDragRef.current = onDrag;\n const GRAB_ZONE = 5; // px on each side of the border\n\n // All drag logic runs via document-level listeners so the 1px-wide\n // element doesn't need to capture pointer events itself.\n useEffect(() => {\n const el = ref.current;\n if (!el) return;\n let cursorActive = false;\n\n function onMouseDown(e: MouseEvent) {\n const rect = el!.getBoundingClientRect();\n const dist = Math.abs(e.clientX - (rect.left + rect.width / 2));\n if (dist > GRAB_ZONE) return;\n e.preventDefault();\n dragging.current = true;\n lastX.current = e.clientX;\n document.body.style.cursor = \"col-resize\";\n document.body.style.userSelect = \"none\";\n }\n\n function onMouseMove(e: MouseEvent) {\n if (dragging.current) {\n const delta = e.clientX - lastX.current;\n lastX.current = e.clientX;\n onDragRef.current(position === \"left\" ? delta : -delta);\n return;\n }\n // Hover cursor\n const rect = el!.getBoundingClientRect();\n const dist = Math.abs(e.clientX - (rect.left + rect.width / 2));\n const near = dist <= GRAB_ZONE;\n if (near && !cursorActive) {\n cursorActive = true;\n document.body.style.cursor = \"col-resize\";\n } else if (!near && cursorActive) {\n cursorActive = false;\n document.body.style.cursor = \"\";\n }\n }\n\n function onMouseUp() {\n if (!dragging.current) return;\n dragging.current = false;\n document.body.style.cursor = \"\";\n document.body.style.userSelect = \"\";\n }\n\n document.addEventListener(\"mousedown\", onMouseDown);\n document.addEventListener(\"mousemove\", onMouseMove);\n document.addEventListener(\"mouseup\", onMouseUp);\n return () => {\n document.removeEventListener(\"mousedown\", onMouseDown);\n document.removeEventListener(\"mousemove\", onMouseMove);\n document.removeEventListener(\"mouseup\", onMouseUp);\n if (cursorActive) document.body.style.cursor = \"\";\n };\n }, [position]);\n\n return (\n <div\n ref={ref}\n className={cn(\n \"relative z-20 shrink-0 w-px touch-none select-none transition-colors\",\n \"bg-border hover:bg-accent active:bg-accent\",\n )}\n style={{ cursor: \"col-resize\" }}\n />\n );\n}\n\n/**\n * Remounts its children whenever the framework's `refresh-screen` tool is\n * invoked. Used inside AgentSidebar so the main content area re-fetches\n * without disturbing the chat sidebar's in-flight state.\n *\n * Two mechanisms work together here:\n *\n * 1. Before the remount, every react-query cache entry is marked stale\n * via `invalidateQueries({ refetchType: \"none\" })`. This does NOT\n * trigger a refetch on its own, so active queries elsewhere (chat\n * sidebar, left nav) keep their current data — they'll refetch only\n * on their next natural trigger.\n * 2. The React `key` then bumps, unmounting and remounting the subtree.\n * On remount, child components re-subscribe to their queries, see\n * the data is stale, and refetch — regardless of configured\n * `staleTime`. This is what makes the dashboard pick up the agent's\n * edits even when the query uses `staleTime: 30_000` or similar.\n */\n/**\n * Syncs the current URL (pathname + search + hash) to application_state\n * under `__url__`, and processes one-shot URL-update commands the agent\n * writes to `__set_url__`. Lives inside AgentSidebar so every framework\n * template gets URL visibility + URL-write capability for its agent\n * without per-template wiring.\n *\n * Two directions:\n * UI → state — on route change, write `{ pathname, search, hash,\n * searchParams }` to `__url__`. The production agent reads\n * this and includes it in the auto-injected `<current-url>`\n * block, so the agent always knows what page the user is\n * on, including filter/search params like `?f_date=2026-01`.\n *\n * state → UI — the framework's `set-search-params` / `set-url-path`\n * tools write a command to `__set_url__`. This hook reads\n * the command, applies it via react-router, then deletes\n * the key. The UI reacts in one tick, no page reload.\n */\nconst SAFE_BROWSER_TAB_ID_RE = /^[A-Za-z0-9_-]{1,96}$/;\n\nfunction URLSync({ browserTabId }: { browserTabId?: string }) {\n const location = useLocation();\n const navigate = useNavigate();\n const queryClient = useQueryClient();\n const normalizedBrowserTabId = React.useMemo(() => {\n if (typeof browserTabId !== \"string\") return undefined;\n const trimmed = browserTabId.trim();\n return SAFE_BROWSER_TAB_ID_RE.test(trimmed) ? trimmed : undefined;\n }, [browserTabId]);\n const appStateKey = React.useCallback(\n (key: string) =>\n normalizedBrowserTabId ? `${key}:${normalizedBrowserTabId}` : key,\n [normalizedBrowserTabId],\n );\n const setUrlQueryKey = React.useMemo(\n () => [\"__set_url__\", normalizedBrowserTabId ?? \"global\"],\n [normalizedBrowserTabId],\n );\n\n // Outbound: write the current URL to app-state whenever it changes.\n React.useEffect(() => {\n const searchParams: Record<string, string> = {};\n for (const [k, v] of new URLSearchParams(location.search).entries()) {\n searchParams[k] = v;\n }\n const body = {\n pathname: location.pathname,\n search: location.search,\n hash: location.hash,\n searchParams,\n };\n const write = (key: string) =>\n fetch(agentNativePath(`/_agent-native/application-state/${key}`), {\n method: \"PUT\",\n keepalive: true,\n headers: { \"Content-Type\": \"application/json\" },\n body: JSON.stringify(body),\n }).catch(() => {});\n write(appStateKey(\"__url__\"));\n if (normalizedBrowserTabId) write(\"__url__\");\n }, [\n appStateKey,\n location.pathname,\n location.search,\n location.hash,\n normalizedBrowserTabId,\n ]);\n\n // Inbound: poll for URL-update commands from the agent. `useDbSync`\n // invalidates this key on every relevant app-state event, so default\n // `structuralSharing: true` is critical — without it, repeated reads of the\n // same stale command (when the consume-DELETE below races against the next\n // invalidation) churned the useEffect and re-applied the navigation in a\n // tight loop. With structural sharing on, the previous reference is reused\n // when the JSON is unchanged so the useEffect only fires when the command\n // actually changes; the `lastProcessedDedupKeyRef` below covers the residual\n // race window after the cache is cleared to `null`.\n const { data: command } = useQuery<{\n key: string;\n command: {\n pathname?: string;\n searchParams?: Record<string, string | null>;\n mergeSearchParams?: boolean;\n hash?: string;\n _writeId?: string;\n };\n } | null>({\n queryKey: setUrlQueryKey,\n queryFn: async () => {\n const read = async (key: string) => {\n const res = await fetch(\n agentNativePath(`/_agent-native/application-state/${key}`),\n );\n if (!res.ok || res.status === 204) return null;\n const text = await res.text();\n if (!text) return null;\n const data = JSON.parse(text);\n return data ? { key, command: data } : null;\n };\n try {\n return (\n (normalizedBrowserTabId\n ? await read(appStateKey(\"__set_url__\"))\n : null) ?? (await read(\"__set_url__\"))\n );\n } catch {\n return null;\n }\n },\n refetchInterval: 2_000,\n retry: false,\n });\n\n const lastProcessedDedupKeyRef = React.useRef<string | null>(null);\n\n React.useEffect(() => {\n if (!command) return;\n const cmd = command.command;\n const dedupKey =\n cmd._writeId ??\n JSON.stringify({\n pathname: cmd.pathname,\n searchParams: cmd.searchParams,\n mergeSearchParams: cmd.mergeSearchParams,\n hash: cmd.hash,\n });\n if (lastProcessedDedupKeyRef.current === dedupKey) {\n // Same command we already handled — the DELETE below races against the\n // next polling refetch, so when it loses the same command can show up\n // again on the next tick. Re-fire DELETE and bail rather than navigate\n // again.\n fetch(\n agentNativePath(`/_agent-native/application-state/${command.key}`),\n {\n method: \"DELETE\",\n headers: { \"X-Agent-Native-CSRF\": \"1\" },\n },\n ).catch(() => {});\n queryClient.setQueryData(setUrlQueryKey, null);\n return;\n }\n lastProcessedDedupKeyRef.current = dedupKey;\n\n // Delete the one-shot command before applying so duplicate events\n // don't cause repeated navigation.\n fetch(agentNativePath(`/_agent-native/application-state/${command.key}`), {\n method: \"DELETE\",\n headers: { \"X-Agent-Native-CSRF\": \"1\" },\n }).catch(() => {});\n try {\n const current = new URL(window.location.href);\n const nextPath = cmd.pathname ?? current.pathname;\n const nextSearch =\n cmd.mergeSearchParams !== false\n ? new URLSearchParams(current.search)\n : new URLSearchParams();\n if (cmd.searchParams) {\n for (const [k, v] of Object.entries(cmd.searchParams)) {\n if (v === null || v === \"\") nextSearch.delete(k);\n else nextSearch.set(k, v);\n }\n }\n const nextHash = cmd.hash ?? current.hash;\n const qs = nextSearch.toString();\n const url = nextPath + (qs ? `?${qs}` : \"\") + (nextHash || \"\");\n // Skip the navigation if the URL is already at the target state —\n // avoids needless react-router work and any revalidation side-effects\n // that come with it.\n // Mark that the agent just wrote the URL so consumers (e.g. a\n // dashboard restoring saved filter defaults) can skip any auto-\n // restore that would clobber the agent's change. Set this BEFORE\n // the same-URL short-circuit — a no-op nav is still an explicit\n // \"agent authored this state\" signal that consumers depend on.\n try {\n sessionStorage.setItem(\"__agentUrlAppliedAt__\", String(Date.now()));\n } catch {\n // sessionStorage unavailable — not fatal.\n }\n const currentUrl =\n current.pathname + (current.search || \"\") + (current.hash || \"\");\n if (url === currentUrl) {\n queryClient.setQueryData(setUrlQueryKey, null);\n return;\n }\n // Replace rather than push so repeated agent URL updates don't\n // clutter the history stack and can't trigger extra remounts from\n // router navigation lifecycle.\n navigate(url, { replace: true });\n } catch {\n // Malformed command — ignore.\n }\n queryClient.setQueryData(setUrlQueryKey, null);\n }, [command, navigate, queryClient, setUrlQueryKey]);\n\n return null;\n}\nfunction ScreenRefreshBoundary({ children }: { children: React.ReactNode }) {\n const key = useScreenRefreshKey();\n const queryClient = useQueryClient();\n const lastKeyRef = React.useRef(key);\n if (key !== lastKeyRef.current) {\n lastKeyRef.current = key;\n // Mark every cached query stale without kicking off a refetch. The\n // subtree-level refetches happen naturally when the new tree mounts\n // below and child components re-subscribe.\n queryClient.invalidateQueries({ refetchType: \"none\" });\n }\n return <React.Fragment key={key}>{children}</React.Fragment>;\n}\n\nclass AgentPanelErrorBoundary extends React.Component<\n { children: React.ReactNode; onReset: () => void },\n { error: Error | null; staleIndexRecoveryCount: number }\n> {\n state: { error: Error | null; staleIndexRecoveryCount: number } = {\n error: null,\n staleIndexRecoveryCount: 0,\n };\n\n private recoveryTimer: ReturnType<typeof setTimeout> | null = null;\n private recoveryCooldownTimer: ReturnType<typeof setTimeout> | null = null;\n\n static getDerivedStateFromError(error: Error) {\n return { error };\n }\n\n componentDidCatch(error: Error, errorInfo: React.ErrorInfo) {\n if (isAssistantUiStaleIndexError(error)) {\n console.warn(\n \"[agent-native] Recovering agent panel after stale UI index\",\n );\n if (this.state.staleIndexRecoveryCount >= 2) {\n console.error(\n \"[agent-native] Agent panel stale-index recovery failed\",\n error,\n errorInfo,\n );\n return;\n }\n if (!this.recoveryTimer) {\n this.recoveryTimer = setTimeout(() => {\n this.recoveryTimer = null;\n this.setState((state) => ({\n error: null,\n staleIndexRecoveryCount: state.staleIndexRecoveryCount + 1,\n }));\n this.props.onReset();\n }, 0);\n }\n return;\n }\n console.error(\"[agent-native] Agent panel crashed\", error, errorInfo);\n }\n\n componentDidUpdate(\n _prevProps: Readonly<{ children: React.ReactNode; onReset: () => void }>,\n prevState: Readonly<{\n error: Error | null;\n staleIndexRecoveryCount: number;\n }>,\n ) {\n if (\n prevState.error &&\n !this.state.error &&\n this.state.staleIndexRecoveryCount > 0\n ) {\n if (this.recoveryCooldownTimer) {\n clearTimeout(this.recoveryCooldownTimer);\n }\n this.recoveryCooldownTimer = setTimeout(() => {\n this.recoveryCooldownTimer = null;\n this.setState((state) =>\n state.error ? null : { staleIndexRecoveryCount: 0 },\n );\n }, 2_000);\n }\n }\n\n componentWillUnmount() {\n if (this.recoveryTimer) {\n clearTimeout(this.recoveryTimer);\n }\n if (this.recoveryCooldownTimer) {\n clearTimeout(this.recoveryCooldownTimer);\n }\n }\n\n render() {\n if (!this.state.error) return this.props.children;\n\n if (\n isAssistantUiStaleIndexError(this.state.error) &&\n this.state.staleIndexRecoveryCount < 2\n ) {\n return (\n <div className=\"flex h-full items-center justify-center p-6 text-center text-xs text-muted-foreground\">\n Reloading chat UI...\n </div>\n );\n }\n\n return (\n <div className=\"flex h-full flex-col items-center justify-center gap-3 p-6 text-center\">\n <div className=\"max-w-[260px] space-y-1\">\n <p className=\"text-sm font-medium text-foreground\">\n Agent panel hit an internal UI error.\n </p>\n <p className=\"text-xs leading-relaxed text-muted-foreground\">\n The app is still usable. Reset the panel to reload the chat UI.\n </p>\n </div>\n <button\n type=\"button\"\n className=\"rounded-md border border-border bg-background px-3 py-1.5 text-xs font-medium text-foreground hover:bg-accent\"\n onClick={() => {\n this.setState({ error: null, staleIndexRecoveryCount: 0 });\n this.props.onReset();\n }}\n >\n Reset agent panel\n </button>\n </div>\n );\n }\n}\n\nexport function AgentPanel(props: AgentPanelProps) {\n const [resetKey, setResetKey] = useState(0);\n const resetPanel = useCallback(() => {\n try {\n const keyPrefix = props.storageKey ? `:${props.storageKey}` : \"\";\n localStorage.setItem(`agent-native-panel-mode${keyPrefix}`, \"chat\");\n } catch {}\n setResetKey((key) => key + 1);\n }, [props.storageKey]);\n return (\n <TooltipProvider delayDuration={200}>\n <AgentPanelErrorBoundary onReset={resetPanel}>\n <AgentPanelInner key={resetKey} {...props} />\n </AgentPanelErrorBoundary>\n </TooltipProvider>\n );\n}\n\n// ─── AgentSidebar — wraps content with a toggleable agent panel ─────────────\n\nexport interface AgentSidebarProps {\n children: React.ReactNode;\n /** Placeholder text for the empty chat state */\n emptyStateText?: string;\n /** Suggestion prompts shown when no messages */\n suggestions?: string[];\n /** Initial sidebar width in pixels. Mount-only; user resize and a saved\n * localStorage value override this. Default: 380 */\n defaultSidebarWidth?: number;\n /** @deprecated Use `defaultSidebarWidth` — this prop is mount-only. */\n sidebarWidth?: number;\n /** Which side the sidebar appears on. Default: \"right\" */\n position?: \"left\" | \"right\";\n /** Whether the sidebar starts open. Default: false */\n defaultOpen?: boolean;\n /** Animate the mobile overlay in a sheet-style slide transition. */\n animateMobile?: boolean;\n /**\n * Bind chats to a resource. When set, every chat started here is\n * scoped to `{type, id}`, the tab bar/history partition by that scope,\n * and a \"Working on {label}\" badge appears with a Detach option.\n * Templates compute this from the active route (see template layouts).\n */\n scope?: import(\"./use-chat-threads.js\").ChatThreadScope | null;\n /** Stable browser tab id used for tab-scoped app-state context. */\n browserTabId?: string;\n}\n\n/**\n * Wraps app content with a toggleable agent sidebar.\n * Use AgentToggleButton in your header to open/close it.\n */\nexport function AgentSidebar({\n children,\n emptyStateText = \"How can I help you?\",\n suggestions,\n defaultSidebarWidth,\n sidebarWidth,\n position = \"right\",\n defaultOpen = false,\n animateMobile = false,\n scope,\n browserTabId,\n}: AgentSidebarProps) {\n const initialWidth = defaultSidebarWidth ?? sidebarWidth ?? 380;\n const [open, setOpen] = useState(() =>\n getInitialAgentSidebarOpen(defaultOpen),\n );\n const [presentationMode, setPresentationMode] = useState(false);\n const [width, setWidth] = useState(initialWidth);\n const [fullscreen, setFullscreen] = useState(() => {\n // Force-disable on mobile: a Claude-style centered column makes no sense\n // when the sidebar already covers most of the viewport.\n if (\n typeof window !== \"undefined\" &&\n window.matchMedia(\"(max-width: 767px)\").matches\n ) {\n return false;\n }\n try {\n return localStorage.getItem(SIDEBAR_FULLSCREEN_KEY) === \"true\";\n } catch {\n return false;\n }\n });\n\n // Track mobile viewport so we can switch to overlay mode.\n const [isMobile, setIsMobile] = useState(\n () =>\n typeof window !== \"undefined\" &&\n window.matchMedia(\"(max-width: 767px)\").matches,\n );\n useEffect(() => {\n const mq = window.matchMedia(\"(max-width: 767px)\");\n const handler = (e: MediaQueryListEvent) => setIsMobile(e.matches);\n mq.addEventListener(\"change\", handler);\n return () => mq.removeEventListener(\"change\", handler);\n }, []);\n useEffect(() => {\n try {\n const saved = localStorage.getItem(SIDEBAR_STORAGE_KEY);\n if (saved) {\n const n = parseInt(saved, 10);\n if (n >= SIDEBAR_MIN && n <= SIDEBAR_MAX) setWidth(n);\n }\n } catch {}\n }, []);\n\n const setOpenPersisted = useCallback(\n (next: boolean | ((prev: boolean) => boolean)) => {\n setOpen((prev) => {\n const value = typeof next === \"function\" ? next(prev) : next;\n try {\n localStorage.setItem(SIDEBAR_OPEN_KEY, String(value));\n } catch {}\n return value;\n });\n },\n [],\n );\n\n const toggleFullscreen = useCallback(() => {\n setFullscreen((prev) => {\n const next = !prev;\n try {\n localStorage.setItem(SIDEBAR_FULLSCREEN_KEY, String(next));\n } catch {}\n return next;\n });\n }, []);\n\n // Track whether the frame is controlling the sidebar (code mode = frame active).\n // Default to true when inside an iframe — assume the frame sidebar is active\n // until told otherwise. This prevents both sidebars flashing after hot reloads.\n const [frameCodeMode, setFrameCodeMode] = useState(() =>\n shouldParentFrameOwnAgentPanel(),\n );\n // Frame sidebar visibility: we don't know the frame's open/closed state at\n // mount, so start at false and wait for the frame to dispatch its real\n // state via the message handler below. Initializing to\n // `shouldParentFrameOwnAgentPanel()` here was a category error — that\n // helper reports ownership (which side renders the sidebar), not whether\n // the sidebar is currently open. Mixing them up dispatched a stale\n // \"open: true\" before the first frame message arrived.\n const [frameSidebarOpen, setFrameSidebarOpen] = useState(false);\n // Has the frame told us its sidebar state yet? In frame-owned mode we\n // don't know whether the sidebar is open or closed until the parent frame\n // dispatches `agentNative.sidebarMode`. Emitting a synthetic\n // `{ open: false }` before that message arrives makes downstream listeners\n // flip a moment later when the real state lands, which is the same\n // ownership-vs-open-state confusion the previous fix addressed.\n const [hasFrameSidebarState, setHasFrameSidebarState] = useState(false);\n\n useEffect(() => {\n const frameOwned = frameCodeMode && shouldParentFrameOwnAgentPanel();\n // Skip the initial emit in frame-owned mode — wait until the frame has\n // sent us its real sidebar state. Once we know, this effect re-runs and\n // dispatches the correct value.\n if (frameOwned && !hasFrameSidebarState) return;\n dispatchAgentSidebarStateChange({\n open: !presentationMode && (frameOwned ? frameSidebarOpen : open),\n source: frameOwned ? \"frame\" : \"app\",\n mode: frameOwned ? \"code\" : \"app\",\n });\n }, [\n frameCodeMode,\n frameSidebarOpen,\n open,\n presentationMode,\n hasFrameSidebarState,\n ]);\n\n useEffect(() => {\n const toggleHandler = () => {\n if (frameCodeMode && shouldParentFrameOwnAgentPanel()) {\n // Forward toggle to frame parent — the frame sidebar handles it\n window.parent.postMessage(\n { type: \"agentNative.toggleSidebar\" },\n parentFrameTargetOrigin(),\n );\n } else {\n setOpenPersisted((prev) => !prev);\n }\n };\n const openHandler = () => {\n if (frameCodeMode && shouldParentFrameOwnAgentPanel()) {\n window.parent.postMessage(\n { type: \"agentNative.toggleSidebar\", data: { open: true } },\n parentFrameTargetOrigin(),\n );\n } else {\n setOpenPersisted(true);\n }\n };\n const closeHandler = () => {\n if (frameCodeMode && shouldParentFrameOwnAgentPanel()) {\n window.parent.postMessage(\n { type: \"agentNative.toggleSidebar\", data: { open: false } },\n parentFrameTargetOrigin(),\n );\n } else {\n setOpenPersisted(false);\n }\n };\n window.addEventListener(\"agent-panel:toggle\", toggleHandler);\n window.addEventListener(\"agent-panel:open\", openHandler);\n window.addEventListener(\"agent-panel:close\", closeHandler);\n return () => {\n window.removeEventListener(\"agent-panel:toggle\", toggleHandler);\n window.removeEventListener(\"agent-panel:open\", openHandler);\n window.removeEventListener(\"agent-panel:close\", closeHandler);\n };\n }, [setOpenPersisted, frameCodeMode]);\n\n // Listen for sidebar mode commands from the frame parent.\n // When frame is in \"code\" mode, hide the app sidebar.\n // When frame is in \"app\" mode, show the app sidebar, sync width and panel mode.\n useEffect(() => {\n if (window.parent === window) return; // Not in an iframe\n\n function handleMessage(event: MessageEvent) {\n if (event.data?.type !== \"agentNative.sidebarMode\") return;\n if (event.source !== window.parent || !isTrustedFrameMessage(event))\n return;\n const {\n mode,\n appMode,\n width: frameWidth,\n open: frameOpen,\n } = event.data.data || {};\n if (mode === \"code\") {\n // Frame is showing its own sidebar — hide the app's\n setFrameCodeMode(true);\n setFrameSidebarOpen(frameOpen !== false);\n setHasFrameSidebarState(true);\n setOpenPersisted(false);\n } else if (mode === \"app\") {\n // Frame deferred to the app — show and sync width + mode\n setFrameCodeMode(false);\n setFrameSidebarOpen(false);\n setHasFrameSidebarState(true);\n setOpenPersisted(frameOpen !== false);\n if (\n frameWidth &&\n frameWidth >= SIDEBAR_MIN &&\n frameWidth <= SIDEBAR_MAX\n ) {\n setWidth(frameWidth);\n }\n // Sync the panel mode from frame tab selection\n if (\n appMode === \"cli\" ||\n appMode === \"resources\" ||\n appMode === \"chat\"\n ) {\n window.dispatchEvent(\n new CustomEvent(\"agent-panel:set-mode\", {\n detail: { mode: appMode },\n }),\n );\n }\n }\n }\n window.addEventListener(\"message\", handleMessage);\n return () => window.removeEventListener(\"message\", handleMessage);\n }, [setOpenPersisted]);\n\n // Cmd+\\ / Ctrl+\\ toggles the agent sidebar globally. Cmd+I / Ctrl+I focuses\n // chat and attaches selected page text as one-shot context for the next turn.\n useEffect(() => {\n const handleKeyDown = (e: KeyboardEvent) => {\n if (\n (e.metaKey || e.ctrlKey) &&\n !e.altKey &&\n !e.shiftKey &&\n (e.key === \"\\\\\" || e.code === \"Backslash\")\n ) {\n e.preventDefault();\n window.dispatchEvent(new Event(\"agent-panel:toggle\"));\n return;\n }\n if ((e.metaKey || e.ctrlKey) && e.key === \"i\") {\n e.preventDefault();\n let selectionText = \"\";\n try {\n selectionText = window.getSelection()?.toString().trim() ?? \"\";\n } catch {}\n if (selectionText) {\n fetch(\n agentNativePath(\n \"/_agent-native/application-state/pending-selection-context\",\n ),\n {\n method: \"PUT\",\n keepalive: true,\n headers: { \"Content-Type\": \"application/json\" },\n body: JSON.stringify({\n text: selectionText,\n capturedAt: Date.now(),\n }),\n },\n ).catch(() => {});\n window.dispatchEvent(\n new CustomEvent(\"agent-panel:selection-attached\", {\n detail: { text: selectionText, length: selectionText.length },\n }),\n );\n }\n focusAgentChat();\n }\n };\n document.addEventListener(\"keydown\", handleKeyDown);\n return () => document.removeEventListener(\"keydown\", handleKeyDown);\n }, []);\n\n // Hide sidebar during presentation mode\n useEffect(() => {\n const handler = (event: MessageEvent) => {\n if (event.data?.type !== \"agentNative.presentationMode\") return;\n if (event.source !== window.parent || !isTrustedFrameMessage(event))\n return;\n setPresentationMode(event.data.data?.active === true);\n };\n window.addEventListener(\"message\", handler);\n return () => window.removeEventListener(\"message\", handler);\n }, []);\n\n const handleDrag = useCallback((delta: number) => {\n setWidth((prev) => {\n const next = Math.min(SIDEBAR_MAX, Math.max(SIDEBAR_MIN, prev + delta));\n try {\n localStorage.setItem(SIDEBAR_STORAGE_KEY, String(next));\n } catch {}\n return next;\n });\n }, []);\n\n const isLeft = position === \"left\";\n // Fullscreen only applies on desktop — on mobile the existing overlay is\n // already viewport-covering, so the maximize button is hidden and the\n // mounted state ignores any persisted value.\n const effectiveFullscreen = fullscreen && !isMobile;\n // On desktop the resize handle is also the visual divider. Avoid painting a\n // second panel border next to it.\n const showResizeHandle = !isMobile && !effectiveFullscreen && open;\n\n // On mobile the sidebar floats as a fixed overlay so the content below isn't\n // squashed. On desktop it participates in the flex layout as before, except\n // in fullscreen mode where it overlays the entire viewport (Claude-style).\n let panelStyle: React.CSSProperties;\n if (isMobile) {\n panelStyle = {\n ...AGENT_PANEL_ROOT_STYLE,\n position: \"fixed\",\n top: 0,\n [isLeft ? \"left\" : \"right\"]: 0,\n height: \"100%\",\n width,\n maxWidth: \"85vw\",\n maxHeight: \"100vh\",\n zIndex: SIDEBAR_OVERLAY_Z_INDEX,\n background: \"hsl(var(--background))\",\n borderLeft: isLeft ? \"none\" : \"1px solid hsl(var(--border))\",\n borderRight: isLeft ? \"1px solid hsl(var(--border))\" : \"none\",\n display: animateMobile || open ? \"flex\" : \"none\",\n transform: animateMobile\n ? open\n ? \"translateX(0)\"\n : `translateX(${isLeft ? \"-\" : \"\"}calc(100% + 1px))`\n : undefined,\n pointerEvents: animateMobile && !open ? \"none\" : undefined,\n willChange: animateMobile ? \"transform\" : undefined,\n };\n } else if (effectiveFullscreen) {\n panelStyle = {\n ...AGENT_PANEL_ROOT_STYLE,\n position: \"fixed\",\n inset: 0,\n width: \"100%\",\n maxHeight: \"100vh\",\n zIndex: SIDEBAR_FULLSCREEN_Z_INDEX,\n background: \"hsl(var(--background))\",\n display: open ? \"flex\" : \"none\",\n };\n } else {\n panelStyle = {\n ...AGENT_PANEL_ROOT_STYLE,\n width,\n maxHeight: \"100vh\",\n borderLeft:\n isLeft || showResizeHandle ? \"none\" : \"1px solid hsl(var(--border))\",\n borderRight:\n !isLeft || showResizeHandle ? \"none\" : \"1px solid hsl(var(--border))\",\n display: open ? \"flex\" : \"none\",\n };\n }\n\n // Always render the sidebar panel (even when closed) so MultiTabAssistantChat\n // stays mounted and can receive messages (e.g. from voice dictation) while\n // the sidebar is visually hidden. When the user opens the sidebar they'll see\n // any in-progress or completed conversations.\n const sidebar = (\n <>\n {showResizeHandle && !isLeft && (\n <ResizeHandle position={position} onDrag={handleDrag} />\n )}\n <div\n className={cn(\n \"agent-sidebar-panel flex shrink-0 flex-col overflow-hidden text-[13px] leading-[1.2] antialiased\",\n animateMobile &&\n isMobile &&\n \"shadow-2xl transition-transform duration-[260ms] ease-[cubic-bezier(0.32,0.72,0,1)] motion-reduce:transition-none\",\n )}\n style={panelStyle}\n inert={isMobile && !open ? true : undefined}\n aria-hidden={isMobile && !open ? true : undefined}\n >\n <AgentPanel\n emptyStateText={emptyStateText}\n suggestions={suggestions}\n onCollapse={() => setOpenPersisted(false)}\n isFullscreen={effectiveFullscreen}\n onToggleFullscreen={isMobile ? undefined : toggleFullscreen}\n scope={scope}\n browserTabId={browserTabId}\n />\n </div>\n {showResizeHandle && isLeft && (\n <ResizeHandle position={position} onDrag={handleDrag} />\n )}\n </>\n );\n\n return (\n <div className=\"flex min-w-0 flex-1 h-screen overflow-hidden\">\n {/* Mobile backdrop — tapping it closes the sidebar */}\n {isMobile && !presentationMode && (animateMobile || open) && (\n <div\n className={cn(\n \"fixed inset-0 bg-black/40\",\n animateMobile &&\n \"transition-opacity duration-200 motion-reduce:transition-none\",\n animateMobile && !open && \"pointer-events-none opacity-0\",\n animateMobile && open && \"opacity-100\",\n )}\n style={{ zIndex: SIDEBAR_OVERLAY_Z_INDEX - 1 }}\n onClick={() => setOpenPersisted(false)}\n />\n )}\n {/* URLSync writes the current URL to application-state so the agent\n sees what page/filters the user is on, and applies URL-update\n commands the agent writes via `set-search-params` / `set-url`. */}\n <URLSync browserTabId={browserTabId} />\n {isLeft && !presentationMode ? sidebar : null}\n <div className=\"flex flex-1 flex-col overflow-auto min-w-0\">\n {/* Screen-refresh key: the agent's `refresh-screen` tool bumps this\n counter, remounting only the main content subtree so it re-fetches\n its data. The sidebar above stays mounted, preserving chat state. */}\n <ScreenRefreshBoundary>{children}</ScreenRefreshBoundary>\n </div>\n {!isLeft && !presentationMode ? sidebar : null}\n </div>\n );\n}\n\n/**\n * Focus the agent chat composer input.\n * Opens the sidebar if closed, then focuses the text input.\n */\nexport function focusAgentChat() {\n window.dispatchEvent(new Event(\"agent-panel:open\"));\n // Wait for sidebar to render, then focus the composer\n requestAnimationFrame(() => {\n const panel = document.querySelector(\".agent-sidebar-panel\");\n if (!panel) return;\n const prosemirror = panel.querySelector(\n \".ProseMirror\",\n ) as HTMLElement | null;\n if (prosemirror) {\n prosemirror.focus();\n return;\n }\n const textarea = panel.querySelector(\"textarea\") as HTMLElement | null;\n if (textarea) textarea.focus();\n });\n}\n\n/**\n * Button to toggle the agent sidebar. Place this in your app's header/toolbar.\n * Dispatches a custom event that AgentSidebar listens for.\n */\nexport function AgentToggleButton({ className }: { className?: string }) {\n return (\n <TooltipProvider delayDuration={200}>\n <Tooltip>\n <TooltipTrigger asChild>\n <button\n type=\"button\"\n aria-label=\"Toggle agent\"\n onClick={() =>\n window.dispatchEvent(new Event(\"agent-panel:toggle\"))\n }\n className={cn(\n \"inline-flex h-8 w-8 shrink-0 items-center justify-center rounded-md text-muted-foreground transition-colors hover:bg-accent/40 hover:text-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring\",\n className,\n )}\n >\n <IconMessageDots size={20} aria-hidden />\n </button>\n </TooltipTrigger>\n <TooltipContent>Toggle agent</TooltipContent>\n </Tooltip>\n </TooltipProvider>\n );\n}\n"]}