@agent-native/core 0.14.5 → 0.14.6

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.
@@ -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 type { AssistantChatProps } 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 { getFrameOrigin, isInFrame, isTrustedFrameMessage } from \"./frame.js\";\nimport {\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, access workspace files, 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\n useEffect(() => {\n let cancelled = false;\n fetch(agentNativePath(\"/_agent-native/builder/status\"))\n .then((res) => (res.ok ? res.json() : null))\n .then((data) => {\n if (!cancelled && data?.connectUrl) {\n setConnectUrl(data.connectUrl);\n }\n })\n .catch(() => {});\n return () => {\n cancelled = true;\n };\n }, []);\n\n return connectUrl;\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 /** Optional notice rendered below the main header while Chat mode is active. */\n chatNotice?: React.ReactNode;\n /** Capability gate for source edits, workspace files, 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 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 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 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 useEffect(() => {\n const handleKeyDown = (e: KeyboardEvent) => {\n if (e.key.toLowerCase() !== \"w\" || 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, workspace files, 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 const showCliMode = isDevMode || !codeAccessEnabled;\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>\n {codeAccessEnabled\n ? \"CLI terminal mode\"\n : \"Open Desktop to use CLI\"}\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 {codeAccessEnabled\n ? \"Workspace files, agents, skills, and tasks\"\n : \"Open Desktop to use Workspace\"}\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, 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 />\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 {codeAccessEnabled ? (\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 ) : (\n <div className=\"flex h-full items-center justify-center px-6\">\n <CodeAccessUnavailablePanel\n title=\"Open Desktop to use Workspace\"\n description={codeUnavailableDescription}\n ctaLabel={codeUnavailableCtaLabel}\n ctaHref={codeUnavailableCtaHref}\n secondaryCtaLabel={codeUnavailableSecondaryCtaLabel}\n secondaryCtaHref={codeUnavailableSecondaryCtaHref}\n />\n </div>\n )}\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 */\nfunction URLSync() {\n const location = useLocation();\n const navigate = useNavigate();\n const queryClient = useQueryClient();\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 fetch(agentNativePath(\"/_agent-native/application-state/__url__\"), {\n method: \"PUT\",\n keepalive: true,\n headers: { \"Content-Type\": \"application/json\" },\n body: JSON.stringify(body),\n }).catch(() => {});\n }, [location.pathname, location.search, location.hash]);\n\n // Inbound: poll for URL-update commands from the agent. We piggyback on\n // the same 2-second cadence useDbSync uses so there's no extra timer.\n const { data: command } = useQuery({\n queryKey: [\"__set_url__\"],\n queryFn: async () => {\n try {\n const res = await fetch(\n agentNativePath(\"/_agent-native/application-state/__set_url__\"),\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 ? { ...data, _ts: Date.now() } : null;\n } catch {\n return null;\n }\n },\n refetchInterval: 2_000,\n structuralSharing: false,\n retry: false,\n });\n\n React.useEffect(() => {\n if (!command) return;\n // Delete the one-shot command before applying so duplicate events\n // don't cause repeated navigation.\n fetch(agentNativePath(\"/_agent-native/application-state/__set_url__\"), {\n method: \"DELETE\",\n headers: { \"X-Agent-Native-CSRF\": \"1\" },\n }).catch(() => {});\n const cmd = command as {\n pathname?: string;\n searchParams?: Record<string, string | null>;\n mergeSearchParams?: boolean;\n hash?: string;\n };\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([\"__set_url__\"], 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([\"__set_url__\"], null);\n }, [command, navigate, queryClient]);\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 }\n> {\n state: { error: Error | null } = { error: null };\n\n static getDerivedStateFromError(error: Error) {\n return { error };\n }\n\n componentDidCatch(error: Error, errorInfo: React.ErrorInfo) {\n console.error(\"[agent-native] Agent panel crashed\", error, errorInfo);\n }\n\n render() {\n if (!this.state.error) return this.props.children;\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 });\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\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}: 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 () => typeof window !== \"undefined\" && window.parent !== window,\n );\n\n useEffect(() => {\n const toggleHandler = () => {\n if (frameCodeMode && window.parent !== window) {\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 && window.parent !== window) {\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 && window.parent !== window) {\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 setOpenPersisted(false);\n } else if (mode === \"app\") {\n // Frame deferred to the app — show and sync width + mode\n setFrameCodeMode(false);\n if (frameOpen !== false) {\n setOpenPersisted(true);\n }\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+I / Ctrl+I to focus the agent chat. If the user has selected text,\n // capture it into application_state under `pending-selection-context` so\n // the agent's next turn includes it as immediate context to act on.\n useEffect(() => {\n const handleKeyDown = (e: KeyboardEvent) => {\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 />\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 />\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 type { AssistantChatProps } 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 { getFrameOrigin, isInFrame, isTrustedFrameMessage } from \"./frame.js\";\nimport {\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, access workspace files, 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\n useEffect(() => {\n let cancelled = false;\n fetch(agentNativePath(\"/_agent-native/builder/status\"))\n .then((res) => (res.ok ? res.json() : null))\n .then((data) => {\n if (!cancelled && data?.connectUrl) {\n setConnectUrl(data.connectUrl);\n }\n })\n .catch(() => {});\n return () => {\n cancelled = true;\n };\n }, []);\n\n return connectUrl;\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 /** Optional notice rendered below the main header while Chat mode is active. */\n chatNotice?: React.ReactNode;\n /** Capability gate for source edits, workspace files, 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 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 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 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 useEffect(() => {\n const handleKeyDown = (e: KeyboardEvent) => {\n if (e.key.toLowerCase() !== \"w\" || 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, workspace files, 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>\n {codeAccessEnabled\n ? \"CLI terminal mode\"\n : \"Open Desktop to use CLI\"}\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 {codeAccessEnabled\n ? \"Workspace files, agents, skills, and tasks\"\n : \"Open Desktop to use Workspace\"}\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, 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 />\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 {codeAccessEnabled ? (\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 ) : (\n <div className=\"flex h-full items-center justify-center px-6\">\n <CodeAccessUnavailablePanel\n title=\"Open Desktop to use Workspace\"\n description={codeUnavailableDescription}\n ctaLabel={codeUnavailableCtaLabel}\n ctaHref={codeUnavailableCtaHref}\n secondaryCtaLabel={codeUnavailableSecondaryCtaLabel}\n secondaryCtaHref={codeUnavailableSecondaryCtaHref}\n />\n </div>\n )}\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 */\nfunction URLSync() {\n const location = useLocation();\n const navigate = useNavigate();\n const queryClient = useQueryClient();\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 fetch(agentNativePath(\"/_agent-native/application-state/__url__\"), {\n method: \"PUT\",\n keepalive: true,\n headers: { \"Content-Type\": \"application/json\" },\n body: JSON.stringify(body),\n }).catch(() => {});\n }, [location.pathname, location.search, location.hash]);\n\n // Inbound: poll for URL-update commands from the agent. We piggyback on\n // the same 2-second cadence useDbSync uses so there's no extra timer.\n const { data: command } = useQuery({\n queryKey: [\"__set_url__\"],\n queryFn: async () => {\n try {\n const res = await fetch(\n agentNativePath(\"/_agent-native/application-state/__set_url__\"),\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 ? { ...data, _ts: Date.now() } : null;\n } catch {\n return null;\n }\n },\n refetchInterval: 2_000,\n structuralSharing: false,\n retry: false,\n });\n\n React.useEffect(() => {\n if (!command) return;\n // Delete the one-shot command before applying so duplicate events\n // don't cause repeated navigation.\n fetch(agentNativePath(\"/_agent-native/application-state/__set_url__\"), {\n method: \"DELETE\",\n headers: { \"X-Agent-Native-CSRF\": \"1\" },\n }).catch(() => {});\n const cmd = command as {\n pathname?: string;\n searchParams?: Record<string, string | null>;\n mergeSearchParams?: boolean;\n hash?: string;\n };\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([\"__set_url__\"], 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([\"__set_url__\"], null);\n }, [command, navigate, queryClient]);\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 }\n> {\n state: { error: Error | null } = { error: null };\n\n static getDerivedStateFromError(error: Error) {\n return { error };\n }\n\n componentDidCatch(error: Error, errorInfo: React.ErrorInfo) {\n console.error(\"[agent-native] Agent panel crashed\", error, errorInfo);\n }\n\n render() {\n if (!this.state.error) return this.props.children;\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 });\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\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}: 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 () => typeof window !== \"undefined\" && window.parent !== window,\n );\n\n useEffect(() => {\n const toggleHandler = () => {\n if (frameCodeMode && window.parent !== window) {\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 && window.parent !== window) {\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 && window.parent !== window) {\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 setOpenPersisted(false);\n } else if (mode === \"app\") {\n // Frame deferred to the app — show and sync width + mode\n setFrameCodeMode(false);\n if (frameOpen !== false) {\n setOpenPersisted(true);\n }\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+I / Ctrl+I to focus the agent chat. If the user has selected text,\n // capture it into application_state under `pending-selection-context` so\n // the agent's next turn includes it as immediate context to act on.\n useEffect(() => {\n const handleKeyDown = (e: KeyboardEvent) => {\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 />\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 />\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"]}