@agent-native/dispatch 0.20.4 → 0.21.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/actions/provider-api-register.d.ts +6 -6
- package/dist/actions/start-workspace-app-creation.js +1 -1
- package/dist/actions/start-workspace-app-creation.js.map +1 -1
- package/dist/components/create-app-popover.d.ts.map +1 -1
- package/dist/components/create-app-popover.js +5 -71
- package/dist/components/create-app-popover.js.map +1 -1
- package/dist/components/layout/Layout.d.ts +23 -1
- package/dist/components/layout/Layout.d.ts.map +1 -1
- package/dist/components/layout/Layout.js +702 -15
- package/dist/components/layout/Layout.js.map +1 -1
- package/dist/lib/workspace-apps.d.ts +6 -0
- package/dist/lib/workspace-apps.d.ts.map +1 -1
- package/dist/lib/workspace-apps.js +21 -0
- package/dist/lib/workspace-apps.js.map +1 -1
- package/dist/routes/pages/settings.d.ts.map +1 -1
- package/dist/routes/pages/settings.js +21 -1
- package/dist/routes/pages/settings.js.map +1 -1
- package/dist/server/lib/app-creation-store.d.ts.map +1 -1
- package/dist/server/lib/app-creation-store.js +13 -0
- package/dist/server/lib/app-creation-store.js.map +1 -1
- package/dist/server/plugins/agent-chat.js +1 -0
- package/dist/server/plugins/agent-chat.js.map +1 -1
- package/dist/server/plugins/integrations.js +1 -1
- package/dist/server/plugins/integrations.js.map +1 -1
- package/package.json +3 -3
- package/src/actions/start-workspace-app-creation.ts +1 -1
- package/src/components/create-app-popover.spec.tsx +22 -0
- package/src/components/create-app-popover.tsx +30 -94
- package/src/components/layout/Layout.spec.tsx +16 -1
- package/src/components/layout/Layout.tsx +1356 -34
- package/src/lib/workspace-apps.ts +24 -0
- package/src/routes/pages/settings.tsx +72 -0
- package/src/server/lib/app-creation-store.spec.ts +13 -0
- package/src/server/lib/app-creation-store.ts +13 -0
- package/src/server/lib/mcp-gateway.spec.ts +18 -0
- package/src/server/plugins/agent-chat.ts +1 -0
- package/src/server/plugins/integrations.ts +1 -1
- package/src/styles/dispatch.css +29 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Layout.js","sourceRoot":"","sources":["../../../src/components/layout/Layout.tsx"],"names":[],"mappings":"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","sourcesContent":["import {\n AgentSidebar,\n focusAgentChat,\n navigateWithAgentChatViewTransition,\n useAgentChatHomeHandoff,\n useAgentChatHomeHandoffLinks,\n useChatThreads,\n type ChatThreadSummary,\n} from \"@agent-native/core/client/agent-chat\";\nimport { appBasePath, appPath } from \"@agent-native/core/client/api-path\";\nimport { useT } from \"@agent-native/core/client/i18n\";\nimport { openCommandMenu } from \"@agent-native/core/client/navigation\";\nimport { InvitationBanner, OrgSwitcher } from \"@agent-native/core/client/org\";\nimport { FeedbackButton } from \"@agent-native/core/client/ui\";\nimport { SidebarFooterActions } from \"@agent-native/toolkit/app-shell\";\nimport {\n ChatHistoryRail,\n type ChatHistoryItem,\n} from \"@agent-native/toolkit/chat-history\";\nimport {\n IconApps,\n IconBrandSlack,\n IconBrandTelegram,\n IconMessageQuestion,\n IconBroadcast,\n IconLayoutSidebarLeftCollapse,\n IconLayoutSidebarLeftExpand,\n IconSettings,\n IconShield,\n IconSearch,\n IconWorld,\n IconDeviceDesktop,\n} from \"@tabler/icons-react\";\nimport {\n createContext,\n useEffect,\n useMemo,\n useRef,\n useState,\n useContext,\n type ComponentType,\n type ReactNode,\n} from \"react\";\nimport { Link, useLocation, useNavigate } from \"react-router\";\n\nimport { cn } from \"../../lib/utils\";\nimport {\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuItem,\n DropdownMenuTrigger,\n} from \"../ui/dropdown-menu\";\nimport { Sheet, SheetContent, SheetDescription, SheetTitle } from \"../ui/sheet\";\nimport { Skeleton } from \"../ui/skeleton\";\nimport { Tooltip, TooltipContent, TooltipTrigger } from \"../ui/tooltip\";\nimport { Header } from \"./Header\";\nimport { HeaderActionsProvider } from \"./HeaderActions\";\nimport { WorkspaceAppsRail } from \"./workspace-apps-rail\";\n\nexport type DispatchNavSection = \"primary\" | \"operations\";\n\nexport type DispatchNavIcon = ComponentType<{\n size?: number | string;\n className?: string;\n}>;\n\nexport interface DispatchNavItem {\n /** Stable id used for keys and navigation.view. Avoid built-in ids. */\n id: string;\n /** React Router path for the tab, usually backed by an app/routes/*.tsx file. */\n to: string;\n label: string;\n icon?: DispatchNavIcon;\n /** Defaults to \"operations\", which renders under the Admin control plane. */\n section?: DispatchNavSection;\n /** Override active matching for nested or multi-route tools. */\n match?: (pathname: string) => boolean;\n /** Canonical path inside the Admin shell for management tabs. */\n adminTo?: string;\n}\n\nexport interface DispatchExtensionConfig {\n /** Extra sidebar tabs supplied by the generated workspace. */\n navItems?: readonly DispatchNavItem[];\n /** Extra React Query keys to invalidate when Dispatch receives DB sync events. */\n queryKeys?: readonly string[];\n}\n\nconst PRIMARY_NAV_ITEMS = [\n {\n id: \"overview\",\n to: \"/overview\",\n label: \"Overview\",\n icon: IconBroadcast,\n section: \"primary\",\n },\n {\n id: \"chat\",\n to: \"/chat\",\n label: \"Chat\",\n icon: IconMessageQuestion,\n section: \"primary\",\n },\n {\n id: \"apps\",\n to: \"/apps\",\n label: \"Apps\",\n icon: IconApps,\n section: \"primary\",\n },\n] as const satisfies readonly DispatchNavItem[];\n\nconst BOTTOM_NAV_ITEMS = [\n {\n id: \"admin\",\n to: \"/admin\",\n label: \"Admin\",\n icon: IconShield,\n },\n {\n id: \"settings\",\n to: \"/settings\",\n label: \"Settings\",\n icon: IconSettings,\n },\n] as const satisfies readonly DispatchNavItem[];\n\nconst EMPTY_NAV_ITEMS: readonly DispatchNavItem[] = [];\nconst DISPATCH_SIDEBAR_LABEL = \"Dispatch\";\n\nconst CHROMELESS_PATHS = [\"/approval\", \"/browser-chat\", \"/browser-connect\"];\nconst SIDEBAR_COLLAPSE_KEY = \"dispatch.sidebar.collapsed\";\nconst CHAT_HISTORY_SOURCE_KEY = \"dispatch.chat-history.source\";\n\nconst DispatchExtensionsContext = createContext<\n DispatchExtensionConfig | undefined\n>(undefined);\n\nexport function useDispatchExtensions(): DispatchExtensionConfig | undefined {\n return useContext(DispatchExtensionsContext);\n}\n\n// Routes whose page renders its own toolbar.\n// Layout still mounts the sidebar + AgentSidebar, but skips its own Header so\n// there's no double-header.\nfunction pageOwnsToolbar(pathname: string): boolean {\n if (pathname === \"/tools\" || pathname.startsWith(\"/tools/\")) return true;\n if (pathname === \"/extensions\" || pathname.startsWith(\"/extensions/\"))\n return true;\n if (pathname.startsWith(\"/apps/\")) return true;\n return false;\n}\n\nfunction sectionFor(item: DispatchNavItem): DispatchNavSection {\n return item.section ?? \"operations\";\n}\n\nfunction navItemMatchesPath(item: DispatchNavItem, pathname: string): boolean {\n if (item.match) {\n try {\n if (item.match(pathname)) return true;\n } catch {\n return false;\n }\n }\n return pathname === item.to || pathname.startsWith(`${item.to}/`);\n}\n\nfunction navItemsForSection(\n items: readonly DispatchNavItem[],\n section: DispatchNavSection,\n): DispatchNavItem[] {\n return items.filter((item) => sectionFor(item) === section);\n}\n\nfunction localDispatchPath(pathname: string): string {\n const basePath = appBasePath();\n if (!basePath) return pathname;\n if (pathname === basePath) return \"/\";\n if (pathname.startsWith(`${basePath}/`)) {\n return pathname.slice(basePath.length) || \"/\";\n }\n return pathname;\n}\n\nfunction dispatchNavLinkTarget(path: string): string {\n if (typeof window === \"undefined\") return path;\n const basePath = appBasePath();\n if (!basePath) return path;\n // Mirror the basename calculation entry.client.tsx uses to configure the\n // router (basePath iff the current URL is under that mount, \"\" otherwise).\n // Reading the live URL directly avoids races with the previous check on\n // `__reactRouterContext.basename`, which could read undefined before the\n // entry script set it — that race produced /dispatch/dispatch/<route>\n // history entries that 404'd on back-button navigation.\n const pathname = window.location.pathname;\n const routerHasBasename =\n pathname === basePath || pathname.startsWith(`${basePath}/`);\n return routerHasBasename ? path : appPath(path);\n}\n\nfunction chatThreadPath(threadId: string): string {\n return `/chat/${encodeURIComponent(threadId)}`;\n}\n\nfunction threadIdFromPath(pathname: string): string | null {\n const match = pathname.match(/^\\/chat\\/([^/]+)/);\n if (!match) return null;\n try {\n const value = decodeURIComponent(match[1]).trim();\n return value || null;\n } catch {\n return null;\n }\n}\n\nexport function formatThreadAge(updatedAt: number, now = Date.now()) {\n const diffMs = Math.max(0, now - updatedAt);\n const minutes = Math.floor(diffMs / 60_000);\n if (minutes < 1) return \"now\";\n if (minutes < 60) return `${minutes}m`;\n const hours = Math.floor(minutes / 60);\n if (hours < 24) return `${hours}h`;\n const days = Math.floor(hours / 24);\n if (days < 14) return `${days}d`;\n if (days < 365) return `${Math.floor(days / 7)}w`;\n return `${Math.floor(days / 365)}y`;\n}\n\nfunction threadTitle(thread: ChatThreadSummary, fallback: string) {\n return thread.title || thread.preview || fallback;\n}\n\nfunction readChatHistoryIncludesExternal(): boolean {\n if (typeof window === \"undefined\") return false;\n try {\n return localStorage.getItem(CHAT_HISTORY_SOURCE_KEY) === \"all\";\n } catch {\n // coercion-ok: localStorage is optional browser persistence.\n return false;\n }\n}\n\nfunction threadSourceIcon(platform: string | undefined): ReactNode {\n const normalized = platform?.trim().toLowerCase();\n if (!normalized) return null;\n if (normalized === \"slack\") {\n return <IconBrandSlack size={13} aria-hidden=\"true\" />;\n }\n if (normalized === \"telegram\") {\n return <IconBrandTelegram size={13} aria-hidden=\"true\" />;\n }\n return <IconWorld size={13} aria-hidden=\"true\" />;\n}\n\nfunction threadUpdatedAt(thread: ChatThreadSummary) {\n return Number.isFinite(thread.updatedAt)\n ? thread.updatedAt\n : Number.isFinite(thread.createdAt)\n ? thread.createdAt\n : 0;\n}\n\nfunction DispatchChatsSection({ onNavigate }: { onNavigate?: () => void }) {\n const t = useT();\n const navigate = useNavigate();\n const location = useLocation();\n const [includeExternal, setIncludeExternal] = useState(false);\n const [historyPreferenceReady, setHistoryPreferenceReady] = useState(false);\n const historyModeRef = useRef(includeExternal);\n const {\n threads,\n activeThreadId,\n isLoading: chatsLoading,\n createThread,\n switchThread,\n renameThread,\n refreshThreads,\n } = useChatThreads(undefined, \"dispatch\", undefined, {\n autoCreate: false,\n includeExternal,\n });\n\n const visibleThreads = useMemo(\n () =>\n threads\n .filter(\n (thread) => thread.messageCount > 0 || thread.id === activeThreadId,\n )\n .sort((a, b) => threadUpdatedAt(b) - threadUpdatedAt(a))\n .slice(0, 15),\n [activeThreadId, threads],\n );\n const localPathname = localDispatchPath(location.pathname);\n const displayedActiveThreadId =\n threadIdFromPath(localPathname) ??\n (localPathname === \"/chat\" ? null : activeThreadId);\n const chatItems: ChatHistoryItem[] = visibleThreads.map((thread) => {\n const title = threadTitle(thread, t(\"dispatch.sidebar.newChat\"));\n const sourceIcon = threadSourceIcon(thread.source?.platform);\n const sourceLabel = thread.source?.platform\n ? thread.source.platform[0].toUpperCase() +\n thread.source.platform.slice(1)\n : null;\n return {\n id: thread.id,\n title: (\n <span\n className=\"flex min-w-0 items-center gap-1\"\n title={sourceLabel ? `${sourceLabel}: ${title}` : title}\n >\n {sourceIcon ? (\n <span\n className=\"shrink-0 text-sidebar-foreground/55\"\n aria-label={sourceLabel ?? \"Connected source\"}\n >\n {sourceIcon}\n </span>\n ) : null}\n <span className=\"truncate\">{title}</span>\n </span>\n ),\n titleText: title,\n timestamp:\n thread.id === displayedActiveThreadId\n ? \"\"\n : formatThreadAge(threadUpdatedAt(thread)),\n };\n });\n\n useEffect(() => {\n setIncludeExternal(readChatHistoryIncludesExternal());\n setHistoryPreferenceReady(true);\n }, []);\n\n useEffect(() => {\n if (!historyPreferenceReady) return;\n try {\n localStorage.setItem(\n CHAT_HISTORY_SOURCE_KEY,\n includeExternal ? \"all\" : \"local\",\n );\n } catch {} // coercion-ok: localStorage is optional browser persistence.\n if (historyModeRef.current !== includeExternal) {\n historyModeRef.current = includeExternal;\n refreshThreads();\n }\n }, [historyPreferenceReady, includeExternal, refreshThreads]);\n\n useEffect(() => {\n const refresh = () => refreshThreads();\n const handleRunning = (event: Event) => {\n const detail = (event as CustomEvent).detail as\n | { isRunning?: unknown }\n | undefined;\n if (detail?.isRunning === false) refreshThreads();\n };\n\n window.addEventListener(\"agent-chat:threads-updated\", refresh);\n window.addEventListener(\"agentNative.chatRunning\", handleRunning);\n window.addEventListener(\"focus\", refresh);\n return () => {\n window.removeEventListener(\"agent-chat:threads-updated\", refresh);\n window.removeEventListener(\"agentNative.chatRunning\", handleRunning);\n window.removeEventListener(\"focus\", refresh);\n };\n }, [refreshThreads]);\n\n function openThread(threadId: string, options?: { isNew?: boolean }) {\n switchThread(threadId);\n navigateWithAgentChatViewTransition(\n navigate,\n dispatchNavLinkTarget(\n options?.isNew ? \"/chat\" : chatThreadPath(threadId),\n ),\n );\n onNavigate?.();\n window.requestAnimationFrame(() => {\n window.dispatchEvent(\n new CustomEvent(\"agent-chat:open-thread\", {\n detail: { threadId, newThread: options?.isNew === true },\n }),\n );\n });\n }\n\n async function handleNewChat() {\n const threadId = await createThread();\n if (threadId) openThread(threadId, { isNew: true });\n }\n\n return (\n <div className=\"ms-4 min-w-0 space-y-0.5\">\n <div className=\"flex justify-end px-2 pt-0.5\">\n <Tooltip>\n <TooltipTrigger asChild>\n <button\n type=\"button\"\n data-dispatch-chat-source-toggle\n aria-pressed={includeExternal}\n aria-label={\n includeExternal\n ? t(\"dispatch.sidebar.showLocalChats\", {\n defaultValue: \"Show local chats\",\n })\n : t(\"dispatch.sidebar.showAllChats\", {\n defaultValue: \"Show all chats\",\n })\n }\n onClick={() => setIncludeExternal((current) => !current)}\n className=\"flex size-6 items-center justify-center rounded-md text-sidebar-foreground/55 transition-colors hover:bg-sidebar-accent hover:text-sidebar-accent-foreground\"\n >\n {includeExternal ? (\n <IconWorld size={14} aria-hidden=\"true\" />\n ) : (\n <IconDeviceDesktop size={14} aria-hidden=\"true\" />\n )}\n </button>\n </TooltipTrigger>\n <TooltipContent side=\"right\">\n {includeExternal\n ? t(\"dispatch.sidebar.showLocalChats\", {\n defaultValue: \"Show local chats\",\n })\n : t(\"dispatch.sidebar.showAllChats\", {\n defaultValue: \"Show all chats\",\n })}\n </TooltipContent>\n </Tooltip>\n </div>\n {chatsLoading &&\n visibleThreads.length === 0 &&\n Array.from({ length: 3 }).map((_, index) => (\n <div\n key={`chat-skeleton-${index}`}\n className=\"flex items-center gap-2 px-3 py-1\"\n >\n <Skeleton className=\"size-3.5 shrink-0 rounded-sm\" />\n <Skeleton className=\"h-3 w-3/4 rounded\" />\n </div>\n ))}\n <ChatHistoryRail\n items={chatItems}\n activeId={displayedActiveThreadId}\n onSelect={(threadId) => openThread(threadId)}\n onNewChat={() => void handleNewChat()}\n railLabels={{\n newChat: t(\"dispatch.sidebar.newChat\"),\n showMore: t(\"dispatch.sidebar.chats\"),\n showLess: t(\"dispatch.sidebar.chats\"),\n }}\n renameMaxLength={160}\n onRename={(threadId, title) => void renameThread(threadId, title)}\n labels={{\n options: (item) =>\n t(\"dispatch.sidebar.chatOptions\", {\n title: item.titleText ?? \"\",\n }),\n renameInput: (item) =>\n t(\"dispatch.sidebar.renameThread\", {\n title: item.titleText ?? \"\",\n }),\n rename: t(\"dispatch.sidebar.renameChat\"),\n }}\n className=\"min-w-0\"\n />\n </div>\n );\n}\n\nexport function NavContent({\n onNavigate,\n extensions,\n collapsed = false,\n collapsible = false,\n onCollapsedChange,\n}: {\n onNavigate?: () => void;\n extensions?: DispatchExtensionConfig;\n collapsed?: boolean;\n collapsible?: boolean;\n onCollapsedChange?: (collapsed: boolean) => void;\n}) {\n const t = useT();\n const location = useLocation();\n const navigate = useNavigate();\n const extensionNavItems = extensions?.navItems ?? EMPTY_NAV_ITEMS;\n const primaryNavItems = [\n ...PRIMARY_NAV_ITEMS,\n ...navItemsForSection(extensionNavItems, \"primary\"),\n ];\n const localPathname = localDispatchPath(location.pathname);\n const navLabel = (item: DispatchNavItem) => {\n const key =\n item.id === \"thread-debug\"\n ? \"threadDebug\"\n : item.id === \"workspace\"\n ? \"resources\"\n : item.id;\n return t(`dispatch.nav.${key}`, { defaultValue: item.label });\n };\n\n const collapseButton = collapsible ? (\n <Tooltip>\n <TooltipTrigger asChild>\n <button\n type=\"button\"\n onClick={() => onCollapsedChange?.(!collapsed)}\n aria-label={\n collapsed\n ? t(\"sidebar.expandSidebar\")\n : t(\"sidebar.collapseSidebar\")\n }\n className=\"flex h-8 w-8 shrink-0 items-center justify-center rounded-md text-sidebar-foreground/65 transition-colors hover:bg-sidebar-accent hover:text-sidebar-accent-foreground\"\n >\n {collapsed ? (\n <IconLayoutSidebarLeftExpand className=\"h-4 w-4 rtl:-scale-x-100\" />\n ) : (\n <IconLayoutSidebarLeftCollapse className=\"h-4 w-4 rtl:-scale-x-100\" />\n )}\n </button>\n </TooltipTrigger>\n <TooltipContent side=\"right\">\n {collapsed ? t(\"sidebar.expandSidebar\") : t(\"sidebar.collapseSidebar\")}\n </TooltipContent>\n </Tooltip>\n ) : null;\n const searchButton = (\n <Tooltip>\n <TooltipTrigger asChild>\n <button\n type=\"button\"\n onClick={openCommandMenu}\n aria-label={t(\"sidebar.search\")}\n className=\"flex h-8 w-8 items-center justify-center rounded-md text-sidebar-foreground/65 transition-colors hover:bg-sidebar-accent hover:text-sidebar-accent-foreground\"\n >\n <IconSearch className=\"h-4 w-4\" />\n </button>\n </TooltipTrigger>\n <TooltipContent side=\"right\">{t(\"sidebar.search\")}</TooltipContent>\n </Tooltip>\n );\n const feedbackButton = (\n <FeedbackButton\n variant={collapsed ? \"icon\" : \"sidebar\"}\n side=\"right\"\n className={collapsed ? \"size-8\" : \"min-w-0\"}\n />\n );\n\n const renderNavItem = (item: DispatchNavItem) => {\n const Icon = item.icon;\n const itemMatchesLocalPath = navItemMatchesPath(item, localPathname);\n const label = navLabel(item);\n return (\n <li key={item.id}>\n {collapsed ? (\n <Tooltip>\n <TooltipTrigger asChild>\n <Link\n to={dispatchNavLinkTarget(item.to)}\n onClick={(event) => {\n if (\n item.id === \"chat\" &&\n localPathname !== \"/chat\" &&\n !event.metaKey &&\n !event.ctrlKey &&\n !event.shiftKey &&\n !event.altKey\n ) {\n event.preventDefault();\n navigateWithAgentChatViewTransition(\n navigate,\n dispatchNavLinkTarget(\"/chat\"),\n );\n onNavigate?.();\n return;\n }\n onNavigate?.();\n }}\n aria-label={label}\n className={cn(\n \"flex size-9 items-center justify-center rounded-md text-sm\",\n itemMatchesLocalPath\n ? \"bg-sidebar-accent font-medium text-sidebar-accent-foreground\"\n : \"text-sidebar-foreground/70 hover:bg-sidebar-accent hover:text-sidebar-accent-foreground\",\n )}\n >\n {Icon ? (\n <Icon size={16} className=\"shrink-0\" />\n ) : (\n <span className=\"h-4 w-4 shrink-0\" aria-hidden=\"true\" />\n )}\n </Link>\n </TooltipTrigger>\n <TooltipContent side=\"right\">{label}</TooltipContent>\n </Tooltip>\n ) : (\n <Link\n to={dispatchNavLinkTarget(item.to)}\n onClick={(event) => {\n if (\n item.id === \"chat\" &&\n localPathname !== \"/chat\" &&\n !event.metaKey &&\n !event.ctrlKey &&\n !event.shiftKey &&\n !event.altKey\n ) {\n event.preventDefault();\n navigateWithAgentChatViewTransition(\n navigate,\n dispatchNavLinkTarget(\"/chat\"),\n );\n onNavigate?.();\n return;\n }\n onNavigate?.();\n }}\n className={cn(\n \"flex h-8 w-full items-center gap-2 rounded-md px-2 text-sm\",\n itemMatchesLocalPath\n ? \"bg-sidebar-accent font-medium text-sidebar-accent-foreground\"\n : \"text-sidebar-foreground/70 hover:bg-sidebar-accent hover:text-sidebar-accent-foreground\",\n )}\n >\n {Icon ? (\n <Icon size={16} className=\"shrink-0\" />\n ) : (\n <span className=\"h-4 w-4 shrink-0\" aria-hidden=\"true\" />\n )}\n <span className=\"truncate\">{label}</span>\n </Link>\n )}\n {!collapsed && item.id === \"chat\" && itemMatchesLocalPath ? (\n <DispatchChatsSection onNavigate={onNavigate} />\n ) : null}\n </li>\n );\n };\n\n return (\n <>\n <div\n className={cn(\n \"flex h-12 shrink-0 items-center border-b border-sidebar-border\",\n collapsed ? \"justify-center px-0\" : \"px-4\",\n )}\n >\n <div\n className={cn(\n \"flex items-center\",\n collapsed ? \"justify-center\" : \"gap-2\",\n )}\n >\n <img\n src={appPath(\"/agent-native-icon-light.svg\")}\n alt=\"\"\n aria-hidden=\"true\"\n width={35}\n height={20}\n className={cn(\n \"block shrink-0 object-contain object-center dark:hidden\",\n collapsed ? \"h-4 w-7\" : \"h-5 w-[35px]\",\n )}\n />\n <img\n src={appPath(\"/agent-native-icon-dark.svg\")}\n alt=\"\"\n aria-hidden=\"true\"\n width={35}\n height={20}\n className={cn(\n \"hidden shrink-0 object-contain object-center dark:block\",\n collapsed ? \"h-4 w-7\" : \"h-5 w-[35px]\",\n )}\n />\n {!collapsed && (\n <div className=\"min-w-0 flex-1\">\n <div\n data-dispatch-sidebar-label\n className=\"truncate text-lg font-bold tracking-tight text-foreground\"\n >\n {DISPATCH_SIDEBAR_LABEL}\n </div>\n </div>\n )}\n </div>\n </div>\n\n <div className=\"flex min-h-0 flex-1 flex-col overflow-y-auto\">\n <nav className={cn(\"py-2\", collapsed ? \"px-1.5\" : \"px-2\")}>\n <ul\n className={cn(\n collapsed ? \"flex flex-col items-center gap-1\" : \"space-y-0.5\",\n )}\n >\n {primaryNavItems.map(renderNavItem)}\n </ul>\n\n <WorkspaceAppsRail collapsed={collapsed} onNavigate={onNavigate} />\n </nav>\n\n <div className=\"mt-auto shrink-0\">\n <nav className={cn(\"py-1\", collapsed ? \"px-1.5\" : \"px-2\")}>\n <ul\n className={cn(\n collapsed ? \"flex flex-col items-center gap-1\" : \"space-y-0.5\",\n )}\n >\n {BOTTOM_NAV_ITEMS.map(renderNavItem)}\n </ul>\n </nav>\n <div\n className={cn(\n \"py-2\",\n collapsed ? \"flex justify-center px-1\" : \"px-3\",\n )}\n >\n <OrgSwitcher compact={collapsed} reserveSpace />\n </div>\n </div>\n <SidebarFooterActions\n collapsed={collapsed}\n feedback={feedbackButton}\n search={searchButton}\n collapse={collapseButton}\n />\n </div>\n </>\n );\n}\n\nexport function Layout({\n children,\n extensions,\n agentPageHref,\n}: {\n children: ReactNode;\n extensions?: DispatchExtensionConfig;\n agentPageHref?: string;\n}) {\n const t = useT();\n const location = useLocation();\n const navigate = useNavigate();\n const [mobileOpen, setMobileOpen] = useState(false);\n const [sidebarCollapsed, setSidebarCollapsed] = useState(() => {\n if (typeof window === \"undefined\") return false;\n try {\n return window.localStorage.getItem(SIDEBAR_COLLAPSE_KEY) === \"1\";\n } catch {\n return false;\n }\n });\n const localPathname = localDispatchPath(location.pathname);\n const isChatRoute =\n localPathname === \"/chat\" || localPathname.startsWith(\"/chat/\");\n const isWorkspaceAppHostRoute = localPathname.startsWith(\"/apps/\");\n const sidebarBeforeAppRef = useRef<boolean | null>(null);\n const sidebarAutoCollapsedRef = useRef(false);\n const chatHomeHandoffActive = useAgentChatHomeHandoff({\n storageKey: \"dispatch\",\n activePath: localPathname,\n enabled: !isChatRoute,\n });\n const chatHandoffLinkOptions = {\n storageKey: \"dispatch\",\n isChatPath: (pathname: string) =>\n pathname === \"/chat\" || pathname.startsWith(\"/chat/\"),\n requireActiveHandoff: true,\n };\n useAgentChatHomeHandoffLinks(chatHandoffLinkOptions);\n\n useEffect(() => {\n if (isWorkspaceAppHostRoute) {\n if (!sidebarAutoCollapsedRef.current) {\n sidebarAutoCollapsedRef.current = true;\n sidebarBeforeAppRef.current = sidebarCollapsed;\n }\n if (!sidebarCollapsed) setSidebarCollapsed(true);\n return;\n }\n\n if (!sidebarAutoCollapsedRef.current) return;\n sidebarAutoCollapsedRef.current = false;\n const previousSidebarState = sidebarBeforeAppRef.current;\n sidebarBeforeAppRef.current = null;\n if (\n previousSidebarState !== null &&\n previousSidebarState !== sidebarCollapsed\n ) {\n setSidebarCollapsed(previousSidebarState);\n }\n }, [isWorkspaceAppHostRoute, sidebarCollapsed]);\n\n useEffect(() => {\n if (typeof window === \"undefined\" || isWorkspaceAppHostRoute) return;\n try {\n window.localStorage.setItem(\n SIDEBAR_COLLAPSE_KEY,\n sidebarCollapsed ? \"1\" : \"0\",\n );\n } catch {\n // Ignore storage failures; the in-memory preference still works.\n }\n }, [isWorkspaceAppHostRoute, sidebarCollapsed]);\n\n if (CHROMELESS_PATHS.some((path) => localPathname === path)) {\n return <>{children}</>;\n }\n\n const showHeader = !isChatRoute && !pageOwnsToolbar(localPathname);\n function openAskAgentFullscreen() {\n focusAgentChat();\n navigateWithAgentChatViewTransition(\n navigate,\n dispatchNavLinkTarget(\"/chat\"),\n );\n }\n const sidebarSuggestions = [\n t(\"dispatch.sidebar.suggestionBuildApp\"),\n t(\"dispatch.sidebar.suggestionRouteSlack\"),\n t(\"dispatch.sidebar.suggestionGrantKey\"),\n ];\n const appContent = (\n <div className=\"flex h-full min-w-0 flex-1 flex-col overflow-hidden\">\n {showHeader ? <Header onOpenMobile={() => setMobileOpen(true)} /> : null}\n <InvitationBanner />\n <main\n className={cn(\n \"flex-1\",\n isChatRoute || isWorkspaceAppHostRoute\n ? \"min-h-0 overflow-hidden\"\n : \"overflow-y-auto\",\n )}\n >\n {showHeader ? (\n <div className=\"mx-auto max-w-7xl space-y-10 px-4 py-6 sm:px-6\">\n {children}\n </div>\n ) : (\n children\n )}\n </main>\n </div>\n );\n const content = isChatRoute ? (\n <div className=\"agent-layout-main-surface flex min-w-0 flex-1 overflow-hidden\">\n {appContent}\n </div>\n ) : (\n <AgentSidebar\n position=\"right\"\n defaultOpen={false}\n agentPageHref={agentPageHref}\n chatViewTransition\n storageKey=\"dispatch\"\n openOnChatRunning={chatHomeHandoffActive}\n onFullscreenRequest={openAskAgentFullscreen}\n emptyStateText={t(\"dispatch.sidebar.emptyAgentText\")}\n suggestions={sidebarSuggestions}\n >\n {appContent}\n </AgentSidebar>\n );\n\n return (\n <DispatchExtensionsContext.Provider value={extensions}>\n <HeaderActionsProvider>\n <div className=\"agent-layout-shell flex h-screen w-full overflow-hidden bg-background\">\n <aside\n data-collapsed={sidebarCollapsed ? \"true\" : \"false\"}\n className={cn(\n \"agent-layout-left-drawer hidden shrink-0 flex-col border-e !border-e-sidebar-border bg-sidebar text-sidebar-foreground transition-[width] duration-200 ease-out lg:flex\",\n sidebarCollapsed ? \"w-14\" : \"w-56\",\n )}\n >\n <NavContent\n extensions={extensions}\n collapsed={sidebarCollapsed}\n collapsible\n onCollapsedChange={setSidebarCollapsed}\n />\n </aside>\n\n <Sheet open={mobileOpen} onOpenChange={setMobileOpen}>\n <SheetContent\n side=\"left\"\n className=\"w-72 p-0 bg-sidebar text-sidebar-foreground [&>button]:hidden\"\n >\n <SheetTitle className=\"sr-only\">\n {t(\"dispatch.nav.navigation\")}\n </SheetTitle>\n <SheetDescription className=\"sr-only\">\n {t(\"dispatch.nav.navigationDescription\")}\n </SheetDescription>\n <div className=\"flex h-full w-full flex-col\">\n <NavContent\n extensions={extensions}\n collapsed={false}\n onNavigate={() => setMobileOpen(false)}\n />\n </div>\n </SheetContent>\n </Sheet>\n\n {content}\n </div>\n </HeaderActionsProvider>\n </DispatchExtensionsContext.Provider>\n );\n}\n"]}
|
|
1
|
+
{"version":3,"file":"Layout.js","sourceRoot":"","sources":["../../../src/components/layout/Layout.tsx"],"names":[],"mappings":"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","sourcesContent":["import {\n CHAT_FIRST_MODE_CHANGED_EVENT,\n AgentChatSurface,\n chatFirstSurfaceTabId,\n AgentSidebar,\n ChatFirstSurfacePanelToggle,\n closeChatFirstSessionWatch,\n emitChatFirstSessionWatch,\n getChatFirstSurfaceTabsStore,\n focusAgentChat,\n navigateWithAgentChatViewTransition,\n readChatFirstAppLayout,\n readChatFirstMode,\n resolveChatFirstBrowserTarget,\n resolveChatFirstAppTarget,\n subscribeChatFirstOpenBrowser,\n subscribeChatFirstOpenApp,\n writeChatFirstAppLayout,\n useChatFirstSessionWatch,\n useChatFirstSurfacePanel,\n useChatFirstSurfaceResize,\n useChatFirstSurfaceTabs,\n type ChatFirstAppRegistration,\n type ChatFirstAppLayoutPreference,\n type ChatFirstAppResolution,\n type ChatFirstOpenBrowserDetail,\n type ChatFirstOpenAppDetail,\n type ChatFirstSessionReference,\n type ChatFirstSurfaceTab,\n type ChatFirstSurfaceKind,\n useAgentChatHomeHandoff,\n useAgentChatHomeHandoffLinks,\n useChatThreads,\n type ChatThreadSummary,\n} from \"@agent-native/core/client/agent-chat\";\nimport { appBasePath, appPath } from \"@agent-native/core/client/api-path\";\nimport {\n readClientAppState,\n writeClientAppState,\n} from \"@agent-native/core/client/application-state\";\nimport {\n ChatFirstAgentsPane,\n ChatFirstAppPane,\n ChatFirstAppsRail,\n ChatFirstBrowserPane,\n ChatFirstChatHistory,\n ChatFirstPrimaryNavigation,\n ChatFirstSessionWatchPane,\n ChatFirstSurfacePanel,\n ChatFirstSurfaceContent,\n ChatFirstSurfaceTabs,\n defaultChatFirstCopy,\n type ChatFirstAgentActivity,\n type ChatFirstAppItem,\n type ChatFirstCopy,\n type ChatFirstEmbedTarget,\n} from \"@agent-native/core/client/chat-first\";\nimport { writeClipboardText } from \"@agent-native/core/client/clipboard\";\nimport {\n useActionMutation,\n useActionQuery,\n} from \"@agent-native/core/client/hooks\";\nimport { useT } from \"@agent-native/core/client/i18n\";\nimport { openCommandMenu } from \"@agent-native/core/client/navigation\";\nimport { InvitationBanner, OrgSwitcher } from \"@agent-native/core/client/org\";\nimport { FeedbackButton } from \"@agent-native/core/client/ui\";\nimport { SidebarFooterActions } from \"@agent-native/toolkit/app-shell\";\nimport {\n ChatHistoryRail,\n type ChatHistoryItem,\n} from \"@agent-native/toolkit/chat-history\";\nimport {\n IconApps,\n IconBrandSlack,\n IconBrandTelegram,\n IconCopy,\n IconEye,\n IconMessageQuestion,\n IconBroadcast,\n IconLayoutSidebarLeftCollapse,\n IconLayoutSidebarLeftExpand,\n IconSettings,\n IconShield,\n IconSearch,\n IconWorld,\n IconDeviceDesktop,\n IconPlus,\n} from \"@tabler/icons-react\";\nimport {\n createContext,\n useEffect,\n useMemo,\n useRef,\n useState,\n useContext,\n useCallback,\n type ComponentType,\n type ReactNode,\n} from \"react\";\nimport { Link, useLocation, useNavigate } from \"react-router\";\nimport { toast } from \"sonner\";\n\nimport { cn } from \"../../lib/utils\";\nimport {\n mergeChatFirstWorkspaceApps,\n type WorkspaceAppSummary,\n} from \"../../lib/workspace-apps\";\nimport { AppIcon } from \"../app-icon\";\nimport { CreateAppPopover } from \"../create-app-popover\";\nimport {\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuItem,\n DropdownMenuTrigger,\n} from \"../ui/dropdown-menu\";\nimport { Sheet, SheetContent, SheetDescription, SheetTitle } from \"../ui/sheet\";\nimport { Skeleton } from \"../ui/skeleton\";\nimport { Tooltip, TooltipContent, TooltipTrigger } from \"../ui/tooltip\";\nimport { Header } from \"./Header\";\nimport { HeaderActionsProvider } from \"./HeaderActions\";\nimport { WorkspaceAppsRail } from \"./workspace-apps-rail\";\n\nexport type DispatchNavSection = \"primary\" | \"operations\";\n\nexport type DispatchNavIcon = ComponentType<{\n size?: number | string;\n className?: string;\n}>;\n\nexport interface DispatchNavItem {\n /** Stable id used for keys and navigation.view. Avoid built-in ids. */\n id: string;\n /** React Router path for the tab, usually backed by an app/routes/*.tsx file. */\n to: string;\n label: string;\n icon?: DispatchNavIcon;\n /** Defaults to \"operations\", which renders under the Admin control plane. */\n section?: DispatchNavSection;\n /** Override active matching for nested or multi-route tools. */\n match?: (pathname: string) => boolean;\n /** Canonical path inside the Admin shell for management tabs. */\n adminTo?: string;\n}\n\nexport interface DispatchExtensionConfig {\n /** Opt into the Codex/T3-like chat-first shell for chat routes. */\n chatFirst?: boolean;\n /** Extra sidebar tabs supplied by the generated workspace. */\n navItems?: readonly DispatchNavItem[];\n /** Extra React Query keys to invalidate when Dispatch receives DB sync events. */\n queryKeys?: readonly string[];\n}\n\nconst PRIMARY_NAV_ITEMS = [\n {\n id: \"overview\",\n to: \"/overview\",\n label: \"Overview\",\n icon: IconBroadcast,\n section: \"primary\",\n },\n {\n id: \"chat\",\n to: \"/chat\",\n label: \"Chat\",\n icon: IconMessageQuestion,\n section: \"primary\",\n },\n {\n id: \"apps\",\n to: \"/apps\",\n label: \"Apps\",\n icon: IconApps,\n section: \"primary\",\n },\n] as const satisfies readonly DispatchNavItem[];\n\nconst BOTTOM_NAV_ITEMS = [\n {\n id: \"admin\",\n to: \"/admin\",\n label: \"Admin\",\n icon: IconShield,\n },\n {\n id: \"settings\",\n to: \"/settings\",\n label: \"Settings\",\n icon: IconSettings,\n },\n] as const satisfies readonly DispatchNavItem[];\n\nconst EMPTY_NAV_ITEMS: readonly DispatchNavItem[] = [];\nconst DISPATCH_SIDEBAR_LABEL = \"Dispatch\";\n\nconst CHROMELESS_PATHS = [\"/approval\", \"/browser-chat\", \"/browser-connect\"];\nconst SIDEBAR_COLLAPSE_KEY = \"dispatch.sidebar.collapsed\";\nconst CHAT_HISTORY_SOURCE_KEY = \"dispatch.chat-history.source\";\nconst CHAT_FIRST_PANE_STATE_KEY = \"chat-first-pane\";\n\ninterface DispatchChatFirstPane {\n appId: string;\n path?: string;\n view?: string;\n}\n\ninterface ChatFirstEmbedSessionResult {\n startUrl: string;\n}\n\ninterface ChatFirstEmbedSessionInput {\n app?: string;\n path?: string;\n url?: string;\n chrome: \"minimal\";\n}\n\nexport function buildChatFirstEmbedSessionInput(\n appId: string,\n path: string,\n): ChatFirstEmbedSessionInput {\n return { app: appId, path, chrome: \"minimal\" };\n}\n\ninterface DispatchAgentThreadSummary {\n id: string;\n title: string;\n preview?: string;\n snippet?: string;\n updatedAt?: number;\n}\n\ninterface SearchAgentThreadsResult {\n threads: DispatchAgentThreadSummary[];\n}\n\nconst DispatchExtensionsContext = createContext<\n DispatchExtensionConfig | undefined\n>(undefined);\n\nexport function useDispatchExtensions(): DispatchExtensionConfig | undefined {\n return useContext(DispatchExtensionsContext);\n}\n\n// Routes whose page renders its own toolbar.\n// Layout still mounts the sidebar + AgentSidebar, but skips its own Header so\n// there's no double-header.\nfunction pageOwnsToolbar(pathname: string): boolean {\n if (pathname === \"/tools\" || pathname.startsWith(\"/tools/\")) return true;\n if (pathname === \"/extensions\" || pathname.startsWith(\"/extensions/\"))\n return true;\n if (pathname.startsWith(\"/apps/\")) return true;\n return false;\n}\n\nfunction sectionFor(item: DispatchNavItem): DispatchNavSection {\n return item.section ?? \"operations\";\n}\n\nfunction navItemMatchesPath(item: DispatchNavItem, pathname: string): boolean {\n if (item.match) {\n try {\n if (item.match(pathname)) return true;\n } catch {\n return false;\n }\n }\n return pathname === item.to || pathname.startsWith(`${item.to}/`);\n}\n\nfunction navItemsForSection(\n items: readonly DispatchNavItem[],\n section: DispatchNavSection,\n): DispatchNavItem[] {\n return items.filter((item) => sectionFor(item) === section);\n}\n\nfunction localDispatchPath(pathname: string): string {\n const basePath = appBasePath();\n if (!basePath) return pathname;\n if (pathname === basePath) return \"/\";\n if (pathname.startsWith(`${basePath}/`)) {\n return pathname.slice(basePath.length) || \"/\";\n }\n return pathname;\n}\n\nfunction dispatchNavLinkTarget(path: string): string {\n if (typeof window === \"undefined\") return path;\n const basePath = appBasePath();\n if (!basePath) return path;\n // Mirror the basename calculation entry.client.tsx uses to configure the\n // router (basePath iff the current URL is under that mount, \"\" otherwise).\n // Reading the live URL directly avoids races with the previous check on\n // `__reactRouterContext.basename`, which could read undefined before the\n // entry script set it — that race produced /dispatch/dispatch/<route>\n // history entries that 404'd on back-button navigation.\n const pathname = window.location.pathname;\n const routerHasBasename =\n pathname === basePath || pathname.startsWith(`${basePath}/`);\n return routerHasBasename ? path : appPath(path);\n}\n\nfunction chatFirstResolutionMessage(\n reason: Exclude<ChatFirstAppResolution, { status: \"ready\" }>[\"reason\"],\n): string {\n switch (reason) {\n case \"empty-detail\":\n return \"The agent did not provide an app target to open.\";\n case \"invalid-url\":\n return \"The requested app route was not registered for this workspace app.\";\n case \"unknown-app\":\n return \"That app is not available in this workspace.\";\n }\n return \"The requested app could not be opened.\";\n}\n\nfunction chatFirstBrowserResolutionMessage(\n reason: \"empty-detail\" | \"invalid-url\",\n): string {\n return reason === \"empty-detail\"\n ? \"The agent did not provide a browser URL to open.\"\n : \"The requested browser URL is not a safe HTTP(S) address.\";\n}\n\nconst DISPATCH_CHAT_FIRST_COPY_KEYS: Record<string, string> = {\n workspaceApps: \"chatFirstWorkspaceApps\",\n createWorkspaceApp: \"chatFirstCreateWorkspaceApp\",\n openApp: \"chatFirstOpenApp\",\n appsLoadError: \"chatFirstAppsLoadError\",\n noWorkspaceApps: \"chatFirstNoWorkspaceApps\",\n createApp: \"chatFirstCreateApp\",\n retry: \"chatFirstRetry\",\n dismiss: \"chatFirstDismiss\",\n unpinApp: \"chatFirstUnpinApp\",\n pinApp: \"chatFirstPinApp\",\n removePinned: \"chatFirstRemovePinned\",\n pinTop: \"chatFirstPinTop\",\n openSideSurfaces: \"chatFirstOpenSideSurfaces\",\n closeTab: \"chatFirstCloseTab\",\n close: \"chatFirstClose\",\n closeOthers: \"chatFirstCloseOthers\",\n closeToRight: \"chatFirstCloseToRight\",\n closeAll: \"chatFirstCloseAll\",\n unavailable: \"chatFirstUnavailable\",\n openActivity: \"chatFirstOpenActivity\",\n deferred: \"chatFirstDeferred\",\n browserBack: \"chatFirstBrowserBack\",\n browserForward: \"chatFirstBrowserForward\",\n browserReload: \"chatFirstBrowserReload\",\n browserAddress: \"chatFirstBrowserAddress\",\n browserOpenExternal: \"chatFirstBrowserOpenExternal\",\n browserClose: \"chatFirstBrowserClose\",\n browserPage: \"chatFirstBrowserPage\",\n browserInvalidUrl: \"chatFirstBrowserInvalidUrl\",\n browserPreviewStarting: \"chatFirstBrowserPreviewStarting\",\n browserPreviewError: \"chatFirstBrowserPreviewError\",\n appUnavailable: \"chatFirstAppUnavailable\",\n appLoading: \"chatFirstLoadingApp\",\n agentActivityEyebrow: \"chatFirstAgentActivityEyebrow\",\n agentActivityTitle: \"chatFirstAgentActivityTitle\",\n agentActivityDescription: \"chatFirstAgentActivityDescription\",\n refreshAgentActivity: \"chatFirstRefreshAgentActivity\",\n noAgentSessions: \"chatFirstNoAgentSessions\",\n startAgentSession: \"chatFirstStartAgentSession\",\n watchSession: \"chatFirstWatchSession\",\n copySessionId: \"chatFirstCopySessionId\",\n copySessionIdFor: \"chatFirstCopySessionIdFor\",\n sessionIdCopied: \"chatFirstSessionIdCopied\",\n sessionIdShort: \"chatFirstSessionIdShort\",\n copied: \"chatFirstCopied\",\n agentActivityStatusQueued: \"chatFirstAgentActivityStatusQueued\",\n agentActivityStatusRunning: \"chatFirstAgentActivityStatusRunning\",\n agentActivityStatusPaused: \"chatFirstAgentActivityStatusPaused\",\n agentActivityStatusNeedsApproval: \"chatFirstAgentActivityStatusNeedsApproval\",\n agentActivityStatusCompleted: \"chatFirstAgentActivityStatusCompleted\",\n agentActivityStatusErrored: \"chatFirstAgentActivityStatusErrored\",\n agentActivityStatusRecent: \"chatFirstAgentActivityStatusRecent\",\n agentActivityStatusUnknown: \"chatFirstAgentActivityStatusUnknown\",\n watchingSession: \"chatFirstWatchingSession\",\n session: \"chatFirstSession\",\n stopWatchingSession: \"chatFirstStopWatchingSession\",\n stopWatching: \"chatFirstStopWatching\",\n watchedSession: \"chatFirstWatchedSession\",\n agentsTitle: \"chatFirstAgentsTitle\",\n};\n\nconst DISPATCH_CHAT_FIRST_SURFACE_COPY_KEYS: Record<\n string,\n { label: string; reason: string }\n> = {\n browser: {\n label: \"chatFirstSurfaceBrowserLabel\",\n reason: \"chatFirstSurfaceBrowserReason\",\n },\n terminal: {\n label: \"chatFirstSurfaceTerminalLabel\",\n reason: \"chatFirstSurfaceTerminalReason\",\n },\n files: {\n label: \"chatFirstSurfaceFilesLabel\",\n reason: \"chatFirstSurfaceFilesReason\",\n },\n diff: {\n label: \"chatFirstSurfaceDiffLabel\",\n reason: \"chatFirstSurfaceDiffReason\",\n },\n \"side-chat\": {\n label: \"chatFirstSurfaceSideChatLabel\",\n reason: \"chatFirstSurfaceSideChatReason\",\n },\n agents: {\n label: \"chatFirstSurfaceAgentsLabel\",\n reason: \"chatFirstSurfaceAgentsReason\",\n },\n};\n\nfunction createDispatchChatFirstCopy(\n t: (key: string, options?: Record<string, unknown>) => string,\n): ChatFirstCopy {\n return (key, values) => {\n if (key.startsWith(\"surface.\")) {\n const [, kind, field] = key.split(\".\");\n const surface = DISPATCH_CHAT_FIRST_SURFACE_COPY_KEYS[kind];\n const translationKey =\n surface && (field === \"label\" || field === \"reason\")\n ? surface[field]\n : undefined;\n if (translationKey) {\n return t(`dispatch.pages.${translationKey}`, {\n ...(values ?? {}),\n defaultValue: defaultChatFirstCopy(key, values),\n });\n }\n }\n const translationKey = DISPATCH_CHAT_FIRST_COPY_KEYS[key];\n if (!translationKey) return defaultChatFirstCopy(key, values);\n return t(`dispatch.pages.${translationKey}`, {\n ...(values ?? {}),\n defaultValue: defaultChatFirstCopy(key, values),\n });\n };\n}\n\nfunction chatThreadPath(threadId: string | null): string {\n return threadId ? `/chat/${encodeURIComponent(threadId)}` : \"/chat\";\n}\n\nfunction persistedChatFirstPane(value: unknown): DispatchChatFirstPane | null {\n if (!value || typeof value !== \"object\") return null;\n const record = value as Record<string, unknown>;\n if (typeof record.appId !== \"string\" || !record.appId.trim()) return null;\n return {\n appId: record.appId,\n ...(typeof record.path === \"string\" ? { path: record.path } : {}),\n ...(typeof record.view === \"string\" ? { view: record.view } : {}),\n };\n}\n\nfunction threadIdFromPath(pathname: string): string | null {\n const match = pathname.match(/^\\/chat\\/([^/]+)/);\n if (!match) return null;\n try {\n const value = decodeURIComponent(match[1]).trim();\n return value || null;\n } catch {\n return null;\n }\n}\n\nexport function formatThreadAge(updatedAt: number, now = Date.now()) {\n const diffMs = Math.max(0, now - updatedAt);\n const minutes = Math.floor(diffMs / 60_000);\n if (minutes < 1) return \"now\";\n if (minutes < 60) return `${minutes}m`;\n const hours = Math.floor(minutes / 60);\n if (hours < 24) return `${hours}h`;\n const days = Math.floor(hours / 24);\n if (days < 14) return `${days}d`;\n if (days < 365) return `${Math.floor(days / 7)}w`;\n return `${Math.floor(days / 365)}y`;\n}\n\nfunction threadTitle(thread: ChatThreadSummary, fallback: string) {\n return thread.title || thread.preview || fallback;\n}\n\nfunction readChatHistoryIncludesExternal(): boolean {\n if (typeof window === \"undefined\") return false;\n try {\n return localStorage.getItem(CHAT_HISTORY_SOURCE_KEY) === \"all\";\n } catch {\n // coercion-ok: localStorage is optional browser persistence.\n return false;\n }\n}\n\nfunction threadSourceIcon(platform: string | undefined): ReactNode {\n const normalized = platform?.trim().toLowerCase();\n if (!normalized) return null;\n if (normalized === \"slack\") {\n return <IconBrandSlack size={13} aria-hidden=\"true\" />;\n }\n if (normalized === \"telegram\") {\n return <IconBrandTelegram size={13} aria-hidden=\"true\" />;\n }\n return <IconWorld size={13} aria-hidden=\"true\" />;\n}\n\nfunction threadUpdatedAt(thread: ChatThreadSummary) {\n return Number.isFinite(thread.updatedAt)\n ? thread.updatedAt\n : Number.isFinite(thread.createdAt)\n ? thread.createdAt\n : 0;\n}\n\nfunction DispatchChatsSection({\n onNavigate,\n showNewChat = false,\n prelude,\n chatFirstMode = false,\n chatFirstEmbedded = false,\n}: {\n onNavigate?: () => void;\n showNewChat?: boolean;\n prelude?: ReactNode;\n chatFirstMode?: boolean;\n chatFirstEmbedded?: boolean;\n}) {\n const t = useT();\n const navigate = useNavigate();\n const location = useLocation();\n const [includeExternal, setIncludeExternal] = useState(false);\n const [historyPreferenceReady, setHistoryPreferenceReady] = useState(false);\n const historyModeRef = useRef(includeExternal);\n const {\n threads,\n activeThreadId,\n isLoading: chatsLoading,\n createThread,\n switchThread,\n renameThread,\n refreshThreads,\n } = useChatThreads(undefined, \"dispatch\", undefined, {\n autoCreate: false,\n includeExternal,\n });\n\n const visibleThreads = useMemo(\n () =>\n threads\n .filter(\n (thread) => thread.messageCount > 0 || thread.id === activeThreadId,\n )\n .sort((a, b) => threadUpdatedAt(b) - threadUpdatedAt(a))\n .slice(0, 15),\n [activeThreadId, threads],\n );\n const localPathname = localDispatchPath(location.pathname);\n const displayedActiveThreadId =\n threadIdFromPath(localPathname) ??\n (localPathname === \"/chat\" ? null : activeThreadId);\n const chatItems: ChatHistoryItem[] = visibleThreads.map((thread) => {\n const title = threadTitle(thread, t(\"dispatch.sidebar.newChat\"));\n const sourceIcon = threadSourceIcon(thread.source?.platform);\n const sourceLabel = thread.source?.platform\n ? thread.source.platform[0].toUpperCase() +\n thread.source.platform.slice(1)\n : null;\n return {\n id: thread.id,\n title: (\n <span\n className=\"flex min-w-0 items-center gap-1\"\n title={sourceLabel ? `${sourceLabel}: ${title}` : title}\n >\n {sourceIcon ? (\n <span\n className=\"shrink-0 text-sidebar-foreground/55\"\n aria-label={sourceLabel ?? \"Connected source\"}\n >\n {sourceIcon}\n </span>\n ) : null}\n <span className=\"truncate\">{title}</span>\n </span>\n ),\n titleText: title,\n timestamp:\n thread.id === displayedActiveThreadId\n ? \"\"\n : formatThreadAge(threadUpdatedAt(thread)),\n };\n });\n\n useEffect(() => {\n setIncludeExternal(readChatHistoryIncludesExternal());\n setHistoryPreferenceReady(true);\n }, []);\n\n useEffect(() => {\n if (!historyPreferenceReady) return;\n try {\n localStorage.setItem(\n CHAT_HISTORY_SOURCE_KEY,\n includeExternal ? \"all\" : \"local\",\n );\n } catch {} // coercion-ok: localStorage is optional browser persistence.\n if (historyModeRef.current !== includeExternal) {\n historyModeRef.current = includeExternal;\n refreshThreads();\n }\n }, [historyPreferenceReady, includeExternal, refreshThreads]);\n\n useEffect(() => {\n const refresh = () => refreshThreads();\n const handleRunning = (event: Event) => {\n const detail = (event as CustomEvent).detail as\n | { isRunning?: unknown }\n | undefined;\n if (detail?.isRunning === false) refreshThreads();\n };\n\n window.addEventListener(\"agent-chat:threads-updated\", refresh);\n window.addEventListener(\"agentNative.chatRunning\", handleRunning);\n window.addEventListener(\"focus\", refresh);\n return () => {\n window.removeEventListener(\"agent-chat:threads-updated\", refresh);\n window.removeEventListener(\"agentNative.chatRunning\", handleRunning);\n window.removeEventListener(\"focus\", refresh);\n };\n }, [refreshThreads]);\n\n function openThread(threadId: string, options?: { isNew?: boolean }) {\n switchThread(threadId);\n navigateWithAgentChatViewTransition(\n navigate,\n dispatchNavLinkTarget(\n options?.isNew ? \"/chat\" : chatThreadPath(threadId),\n ),\n );\n onNavigate?.();\n window.requestAnimationFrame(() => {\n window.dispatchEvent(\n new CustomEvent(\"agent-chat:open-thread\", {\n detail: { threadId, newThread: options?.isNew === true },\n }),\n );\n });\n }\n\n async function handleNewChat() {\n const threadId = await createThread();\n if (threadId) openThread(threadId, { isNew: true });\n }\n\n return (\n <div\n className={cn(\n \"ms-4 min-w-0 space-y-0.5\",\n showNewChat && \"dispatch-chat-first-chats\",\n )}\n >\n {showNewChat ? (\n <button\n type=\"button\"\n className=\"flex h-7 w-[calc(100%-0.5rem)] items-center gap-2 rounded-md px-2 text-sm text-sidebar-foreground/80 transition-colors hover:bg-sidebar-accent hover:text-sidebar-accent-foreground\"\n onClick={() => void handleNewChat()}\n >\n <IconPlus size={16} className=\"shrink-0\" aria-hidden=\"true\" />\n <span>New chat</span>\n </button>\n ) : null}\n {prelude}\n <div className=\"flex justify-end px-2 pt-0.5\">\n <Tooltip>\n <TooltipTrigger asChild>\n <button\n type=\"button\"\n data-dispatch-chat-source-toggle\n aria-pressed={includeExternal}\n aria-label={\n includeExternal\n ? t(\"dispatch.sidebar.showLocalChats\", {\n defaultValue: \"Show local chats\",\n })\n : t(\"dispatch.sidebar.showAllChats\", {\n defaultValue: \"Show all chats\",\n })\n }\n onClick={() => setIncludeExternal((current) => !current)}\n className=\"flex size-6 items-center justify-center rounded-md text-sidebar-foreground/55 transition-colors hover:bg-sidebar-accent hover:text-sidebar-accent-foreground\"\n >\n {includeExternal ? (\n <IconWorld size={14} aria-hidden=\"true\" />\n ) : (\n <IconDeviceDesktop size={14} aria-hidden=\"true\" />\n )}\n </button>\n </TooltipTrigger>\n <TooltipContent side=\"right\">\n {includeExternal\n ? t(\"dispatch.sidebar.showLocalChats\", {\n defaultValue: \"Show local chats\",\n })\n : t(\"dispatch.sidebar.showAllChats\", {\n defaultValue: \"Show all chats\",\n })}\n </TooltipContent>\n </Tooltip>\n </div>\n {!chatFirstMode &&\n chatsLoading &&\n visibleThreads.length === 0 &&\n Array.from({ length: 3 }).map((_, index) => (\n <div\n key={`chat-skeleton-${index}`}\n className=\"flex items-center gap-2 px-3 py-1\"\n >\n <Skeleton className=\"size-3.5 shrink-0 rounded-sm\" />\n <Skeleton className=\"h-3 w-3/4 rounded\" />\n </div>\n ))}\n {chatFirstMode ? (\n <ChatFirstChatHistory\n items={chatItems}\n activeId={displayedActiveThreadId}\n loading={chatsLoading && visibleThreads.length === 0}\n loadingLabel={\n <div className=\"space-y-1 px-2 py-1\">\n {[0, 1, 2].map((index) => (\n <div key={index} className=\"flex items-center gap-2 px-1 py-1\">\n <Skeleton className=\"size-3.5 shrink-0 rounded-sm\" />\n <Skeleton className=\"h-3 w-3/4 rounded\" />\n </div>\n ))}\n </div>\n }\n label={t(\"dispatch.sidebar.chats\", { defaultValue: \"Chats\" })}\n onSelect={(threadId) => openThread(threadId)}\n renameMaxLength={160}\n onRename={(threadId, title) => void renameThread(threadId, title)}\n labels={{\n options: (item) =>\n t(\"dispatch.sidebar.chatOptions\", {\n title: item.titleText ?? \"\",\n }),\n renameInput: (item) =>\n t(\"dispatch.sidebar.renameThread\", {\n title: item.titleText ?? \"\",\n }),\n rename: t(\"dispatch.sidebar.renameChat\"),\n }}\n renderAdditionalRowActions={(item, closeMenu) => (\n <>\n <button\n type=\"button\"\n role=\"menuitem\"\n className=\"an-chat-history-row__menu-item\"\n onClick={() => {\n closeMenu();\n void writeClipboardText(item.id).then((copied) => {\n toast[copied ? \"success\" : \"error\"](\n copied\n ? \"Session ID copied\"\n : \"Could not copy the session ID\",\n );\n });\n }}\n >\n <IconCopy size={13} strokeWidth={1.8} />\n <span>Copy session ID</span>\n </button>\n {!chatFirstEmbedded ? (\n <button\n type=\"button\"\n role=\"menuitem\"\n className=\"an-chat-history-row__menu-item\"\n onClick={() => {\n closeMenu();\n emitChatFirstSessionWatch({\n sessionId: item.id,\n title: item.titleText,\n kind: \"agent-chat\",\n sourceSessionId: displayedActiveThreadId ?? undefined,\n });\n }}\n >\n <IconEye size={13} strokeWidth={1.8} />\n <span>Watch and message session</span>\n </button>\n ) : null}\n </>\n )}\n className=\"min-w-0\"\n />\n ) : (\n <ChatHistoryRail\n items={chatItems}\n activeId={displayedActiveThreadId}\n onSelect={(threadId) => openThread(threadId)}\n onNewChat={() => void handleNewChat()}\n railLabels={{\n newChat: t(\"dispatch.sidebar.newChat\"),\n showMore: t(\"dispatch.sidebar.chats\"),\n showLess: t(\"dispatch.sidebar.chats\"),\n }}\n renameMaxLength={160}\n onRename={(threadId, title) => void renameThread(threadId, title)}\n labels={{\n options: (item) =>\n t(\"dispatch.sidebar.chatOptions\", {\n title: item.titleText ?? \"\",\n }),\n renameInput: (item) =>\n t(\"dispatch.sidebar.renameThread\", {\n title: item.titleText ?? \"\",\n }),\n rename: t(\"dispatch.sidebar.renameChat\"),\n }}\n renderAdditionalRowActions={(item, closeMenu) => (\n <>\n <button\n type=\"button\"\n role=\"menuitem\"\n className=\"an-chat-history-row__menu-item\"\n onClick={() => {\n closeMenu();\n void writeClipboardText(item.id).then((copied) => {\n toast[copied ? \"success\" : \"error\"](\n copied\n ? \"Session ID copied\"\n : \"Could not copy the session ID\",\n );\n });\n }}\n >\n <IconCopy size={13} strokeWidth={1.8} />\n <span>Copy session ID</span>\n </button>\n {chatFirstMode && !chatFirstEmbedded ? (\n <button\n type=\"button\"\n role=\"menuitem\"\n className=\"an-chat-history-row__menu-item\"\n onClick={() => {\n closeMenu();\n emitChatFirstSessionWatch({\n sessionId: item.id,\n title: item.titleText,\n kind: \"agent-chat\",\n sourceSessionId: displayedActiveThreadId ?? undefined,\n });\n }}\n >\n <IconEye size={13} strokeWidth={1.8} />\n <span>Watch and message session</span>\n </button>\n ) : null}\n </>\n )}\n className=\"min-w-0\"\n />\n )}\n </div>\n );\n}\n\nexport function NavContent({\n onNavigate,\n extensions,\n chatFirstMode = false,\n chatFirstEmbedded = false,\n collapsed = false,\n collapsible = false,\n onCollapsedChange,\n chatFirstAppLayout,\n onChatFirstAppLayoutChange,\n chatFirstApps = [],\n chatFirstAppsLoading = false,\n chatFirstAppsError,\n chatFirstActiveAppId,\n onChatFirstAppOpen,\n onChatFirstAppsRetry,\n}: {\n onNavigate?: () => void;\n extensions?: DispatchExtensionConfig;\n chatFirstMode?: boolean;\n chatFirstEmbedded?: boolean;\n collapsed?: boolean;\n collapsible?: boolean;\n onCollapsedChange?: (collapsed: boolean) => void;\n chatFirstAppLayout?: ChatFirstAppLayoutPreference;\n onChatFirstAppLayoutChange?: (layout: ChatFirstAppLayoutPreference) => void;\n chatFirstApps?: readonly ChatFirstAppItem[];\n chatFirstAppsLoading?: boolean;\n chatFirstAppsError?: string | null;\n chatFirstActiveAppId?: string;\n onChatFirstAppOpen?: (app: ChatFirstAppItem) => void;\n onChatFirstAppsRetry?: () => void;\n}) {\n const t = useT();\n const chatFirstCopy = useMemo(() => createDispatchChatFirstCopy(t), [t]);\n const location = useLocation();\n const navigate = useNavigate();\n const extensionNavItems = extensions?.navItems ?? EMPTY_NAV_ITEMS;\n const primaryNavItems = [\n ...PRIMARY_NAV_ITEMS,\n ...navItemsForSection(extensionNavItems, \"primary\"),\n ];\n const localPathname = localDispatchPath(location.pathname);\n const navLabel = (item: DispatchNavItem) => {\n const key =\n item.id === \"thread-debug\"\n ? \"threadDebug\"\n : item.id === \"workspace\"\n ? \"resources\"\n : item.id;\n return t(`dispatch.nav.${key}`, { defaultValue: item.label });\n };\n\n const collapseButton = collapsible ? (\n <Tooltip>\n <TooltipTrigger asChild>\n <button\n type=\"button\"\n onClick={() => onCollapsedChange?.(!collapsed)}\n aria-label={\n collapsed\n ? t(\"sidebar.expandSidebar\")\n : t(\"sidebar.collapseSidebar\")\n }\n className=\"flex h-8 w-8 shrink-0 items-center justify-center rounded-md text-sidebar-foreground/65 transition-colors hover:bg-sidebar-accent hover:text-sidebar-accent-foreground\"\n >\n {collapsed ? (\n <IconLayoutSidebarLeftExpand className=\"h-4 w-4 rtl:-scale-x-100\" />\n ) : (\n <IconLayoutSidebarLeftCollapse className=\"h-4 w-4 rtl:-scale-x-100\" />\n )}\n </button>\n </TooltipTrigger>\n <TooltipContent side=\"right\">\n {collapsed ? t(\"sidebar.expandSidebar\") : t(\"sidebar.collapseSidebar\")}\n </TooltipContent>\n </Tooltip>\n ) : null;\n const searchButton = (\n <Tooltip>\n <TooltipTrigger asChild>\n <button\n type=\"button\"\n onClick={openCommandMenu}\n aria-label={t(\"sidebar.search\")}\n className=\"flex h-8 w-8 items-center justify-center rounded-md text-sidebar-foreground/65 transition-colors hover:bg-sidebar-accent hover:text-sidebar-accent-foreground\"\n >\n <IconSearch className=\"h-4 w-4\" />\n </button>\n </TooltipTrigger>\n <TooltipContent side=\"right\">{t(\"sidebar.search\")}</TooltipContent>\n </Tooltip>\n );\n const feedbackButton = (\n <FeedbackButton\n variant={collapsed ? \"icon\" : \"sidebar\"}\n side=\"right\"\n className={collapsed ? \"size-8\" : \"min-w-0\"}\n />\n );\n const chatFirstCreateAppTrigger = (\n <CreateAppPopover\n align=\"start\"\n trigger={\n <button\n type=\"button\"\n className=\"flex size-6 items-center justify-center rounded text-sidebar-foreground/55 hover:bg-sidebar-accent hover:text-sidebar-foreground\"\n aria-label={chatFirstCopy(\"createWorkspaceApp\")}\n title={chatFirstCopy(\"createWorkspaceApp\")}\n >\n <IconPlus size={14} aria-hidden=\"true\" />\n </button>\n }\n />\n );\n\n const chatFirstPrimaryNavigation = (\n <ChatFirstPrimaryNavigation\n copy={chatFirstCopy}\n onOpenIntegrations={() => {\n navigate(dispatchNavLinkTarget(\"/admin/integrations\"));\n onNavigate?.();\n }}\n onOpenScheduled={() => {\n navigate(dispatchNavLinkTarget(\"/admin/automations\"));\n onNavigate?.();\n }}\n />\n );\n\n const chatFirstAppsRail = (\n <ChatFirstAppsRail\n apps={chatFirstApps}\n activeAppId={chatFirstActiveAppId}\n collapsed={collapsed}\n loading={chatFirstAppsLoading}\n error={chatFirstAppsError}\n layout={chatFirstAppLayout}\n onLayoutChange={onChatFirstAppLayoutChange}\n onRetry={onChatFirstAppsRetry}\n onOpenApp={(app) => {\n onChatFirstAppOpen?.(app);\n onNavigate?.();\n }}\n createAppTrigger={chatFirstCreateAppTrigger}\n renderIcon={(app) => (\n <AppIcon\n id={app.id}\n name={app.name}\n size=\"sm\"\n className=\"size-5 rounded-md\"\n />\n )}\n copy={chatFirstCopy}\n />\n );\n\n const renderNavItem = (item: DispatchNavItem) => {\n const Icon = item.icon;\n const itemMatchesLocalPath = navItemMatchesPath(item, localPathname);\n const label = navLabel(item);\n return (\n <li key={item.id}>\n {collapsed ? (\n <Tooltip>\n <TooltipTrigger asChild>\n <Link\n to={dispatchNavLinkTarget(item.to)}\n onClick={(event) => {\n if (\n item.id === \"chat\" &&\n localPathname !== \"/chat\" &&\n !event.metaKey &&\n !event.ctrlKey &&\n !event.shiftKey &&\n !event.altKey\n ) {\n event.preventDefault();\n navigateWithAgentChatViewTransition(\n navigate,\n dispatchNavLinkTarget(\"/chat\"),\n );\n onNavigate?.();\n return;\n }\n onNavigate?.();\n }}\n aria-label={label}\n className={cn(\n \"flex size-9 items-center justify-center rounded-md text-sm\",\n itemMatchesLocalPath\n ? \"bg-sidebar-accent font-medium text-sidebar-accent-foreground\"\n : \"text-sidebar-foreground/70 hover:bg-sidebar-accent hover:text-sidebar-accent-foreground\",\n )}\n >\n {Icon ? (\n <Icon size={16} className=\"shrink-0\" />\n ) : (\n <span className=\"h-4 w-4 shrink-0\" aria-hidden=\"true\" />\n )}\n </Link>\n </TooltipTrigger>\n <TooltipContent side=\"right\">{label}</TooltipContent>\n </Tooltip>\n ) : (\n <Link\n to={dispatchNavLinkTarget(item.to)}\n onClick={(event) => {\n if (\n item.id === \"chat\" &&\n localPathname !== \"/chat\" &&\n !event.metaKey &&\n !event.ctrlKey &&\n !event.shiftKey &&\n !event.altKey\n ) {\n event.preventDefault();\n navigateWithAgentChatViewTransition(\n navigate,\n dispatchNavLinkTarget(\"/chat\"),\n );\n onNavigate?.();\n return;\n }\n onNavigate?.();\n }}\n className={cn(\n \"flex h-8 w-full items-center gap-2 rounded-md px-2 text-sm\",\n itemMatchesLocalPath\n ? \"bg-sidebar-accent font-medium text-sidebar-accent-foreground\"\n : \"text-sidebar-foreground/70 hover:bg-sidebar-accent hover:text-sidebar-accent-foreground\",\n )}\n >\n {Icon ? (\n <Icon size={16} className=\"shrink-0\" />\n ) : (\n <span className=\"h-4 w-4 shrink-0\" aria-hidden=\"true\" />\n )}\n <span className=\"truncate\">{label}</span>\n </Link>\n )}\n {!collapsed && item.id === \"chat\" && itemMatchesLocalPath ? (\n <DispatchChatsSection\n onNavigate={onNavigate}\n chatFirstMode={chatFirstMode}\n chatFirstEmbedded={chatFirstEmbedded}\n />\n ) : null}\n </li>\n );\n };\n\n return (\n <>\n <div\n className={cn(\n \"flex h-12 shrink-0 items-center border-b border-sidebar-border\",\n collapsed ? \"justify-center px-0\" : \"px-4\",\n )}\n >\n <div\n className={cn(\n \"flex items-center\",\n collapsed ? \"justify-center\" : \"gap-2\",\n )}\n >\n <img\n src={appPath(\"/agent-native-icon-light.svg\")}\n alt=\"\"\n aria-hidden=\"true\"\n width={35}\n height={20}\n className={cn(\n \"block shrink-0 object-contain object-center dark:hidden\",\n collapsed ? \"h-4 w-7\" : \"h-5 w-[35px]\",\n )}\n />\n <img\n src={appPath(\"/agent-native-icon-dark.svg\")}\n alt=\"\"\n aria-hidden=\"true\"\n width={35}\n height={20}\n className={cn(\n \"hidden shrink-0 object-contain object-center dark:block\",\n collapsed ? \"h-4 w-7\" : \"h-5 w-[35px]\",\n )}\n />\n {!collapsed && (\n <div className=\"min-w-0 flex-1\">\n <div\n data-dispatch-sidebar-label\n className=\"truncate text-lg font-bold tracking-tight text-foreground\"\n >\n {DISPATCH_SIDEBAR_LABEL}\n </div>\n </div>\n )}\n </div>\n </div>\n\n {chatFirstMode ? (\n <div className=\"flex min-h-0 flex-1 flex-col overflow-y-auto\">\n {!collapsed ? (\n <DispatchChatsSection\n onNavigate={onNavigate}\n showNewChat\n chatFirstMode\n prelude={\n <>\n <nav className=\"space-y-0.5 px-2 py-2\">\n {chatFirstPrimaryNavigation}\n </nav>\n {chatFirstAppsRail}\n </>\n }\n />\n ) : (\n chatFirstAppsRail\n )}\n </div>\n ) : null}\n <div\n className={cn(\n \"flex min-h-0 flex-1 flex-col overflow-y-auto\",\n chatFirstMode && \"hidden\",\n )}\n >\n <nav className={cn(\"py-2\", collapsed ? \"px-1.5\" : \"px-2\")}>\n <ul\n className={cn(\n collapsed ? \"flex flex-col items-center gap-1\" : \"space-y-0.5\",\n )}\n >\n {primaryNavItems.map(renderNavItem)}\n </ul>\n\n <WorkspaceAppsRail collapsed={collapsed} onNavigate={onNavigate} />\n </nav>\n\n <div className=\"mt-auto shrink-0\">\n <nav className={cn(\"py-1\", collapsed ? \"px-1.5\" : \"px-2\")}>\n <ul\n className={cn(\n collapsed ? \"flex flex-col items-center gap-1\" : \"space-y-0.5\",\n )}\n >\n {BOTTOM_NAV_ITEMS.map(renderNavItem)}\n </ul>\n </nav>\n <div\n className={cn(\n \"py-2\",\n collapsed ? \"flex justify-center px-1\" : \"px-3\",\n )}\n >\n <OrgSwitcher compact={collapsed} reserveSpace />\n </div>\n </div>\n <SidebarFooterActions\n collapsed={collapsed}\n feedback={feedbackButton}\n search={searchButton}\n collapse={collapseButton}\n />\n </div>\n {chatFirstMode && collapsed ? (\n <div className=\"mt-auto shrink-0\">\n <SidebarFooterActions\n collapsed\n feedback={feedbackButton}\n search={searchButton}\n collapse={collapseButton}\n />\n </div>\n ) : null}\n </>\n );\n}\n\nexport function Layout({\n children,\n extensions,\n agentPageHref,\n}: {\n children: ReactNode;\n extensions?: DispatchExtensionConfig;\n agentPageHref?: string;\n}) {\n const t = useT();\n const location = useLocation();\n const navigate = useNavigate();\n const [mobileOpen, setMobileOpen] = useState(false);\n const [sidebarCollapsed, setSidebarCollapsed] = useState(() => {\n if (typeof window === \"undefined\") return false;\n try {\n return window.localStorage.getItem(SIDEBAR_COLLAPSE_KEY) === \"1\";\n } catch {\n return false;\n }\n });\n const localPathname = localDispatchPath(location.pathname);\n const isChatRoute =\n localPathname === \"/chat\" || localPathname.startsWith(\"/chat/\");\n const chatFirstSurfaceScope = threadIdFromPath(localPathname) ?? \"new\";\n const isWorkspaceAppHostRoute = localPathname.startsWith(\"/apps/\");\n const [chatFirstPreference, setChatFirstPreference] = useState(() =>\n readChatFirstMode(),\n );\n const chatFirstEmbedded =\n typeof window !== \"undefined\" &&\n new URLSearchParams(window.location.search).get(\"chatFirst\") === \"1\";\n const chatFirstMode =\n extensions?.chatFirst === true || chatFirstPreference || chatFirstEmbedded;\n const [chatFirstAppLayout, setChatFirstAppLayout] =\n useState<ChatFirstAppLayoutPreference>(() => readChatFirstAppLayout());\n const chatFirstAppLayoutHydratedRef = useRef(false);\n const chatFirstAppsQuery = useActionQuery<WorkspaceAppSummary[]>(\n \"list-workspace-apps\",\n { includeAgentCards: false },\n { enabled: chatFirstMode && isChatRoute },\n );\n const chatFirstWorkspaceApps = useMemo(\n () => mergeChatFirstWorkspaceApps(chatFirstAppsQuery.data),\n [chatFirstAppsQuery.data],\n );\n const chatFirstAppRegistrations = useMemo<ChatFirstAppRegistration[]>(\n () =>\n chatFirstWorkspaceApps.map((app) => ({\n id: app.id,\n name: app.name,\n path: app.path,\n url: app.url,\n enabled: app.status !== \"pending\" && app.archived !== true,\n })),\n [chatFirstWorkspaceApps],\n );\n const chatFirstAppItems = useMemo<ChatFirstAppItem[]>(\n () =>\n chatFirstWorkspaceApps.map((app) => ({\n id: app.id,\n name: app.name,\n })),\n [chatFirstWorkspaceApps],\n );\n const chatFirstCopy = useMemo(() => createDispatchChatFirstCopy(t), [t]);\n const createChatFirstEmbedSession = useActionMutation<\n ChatFirstEmbedSessionResult,\n ChatFirstEmbedSessionInput\n >(\"create_embed_session\", { skipActionQueryInvalidation: true });\n const [chatFirstPane, setChatFirstPane] =\n useState<DispatchChatFirstPane | null>(null);\n const [chatFirstEmbedUrl, setChatFirstEmbedUrl] = useState<string | null>(\n null,\n );\n const [chatFirstEmbedError, setChatFirstEmbedError] = useState<string | null>(\n null,\n );\n const [chatFirstEmbedAttempt, setChatFirstEmbedAttempt] = useState(0);\n const [chatFirstNotice, setChatFirstNotice] = useState<string | null>(null);\n const chatFirstSessionWatch = useChatFirstSessionWatch();\n const chatFirstSurfaceTabs = useChatFirstSurfaceTabs(chatFirstSurfaceScope);\n const chatFirstSurfaceTabsStore = getChatFirstSurfaceTabsStore(\n chatFirstSurfaceScope,\n );\n const chatFirstAgentsQuery = useActionQuery<SearchAgentThreadsResult>(\n \"search-agent-threads\",\n { sourceId: \"current\", limit: 12 },\n {\n enabled:\n chatFirstMode &&\n isChatRoute &&\n chatFirstSurfaceTabs.activeTabId?.startsWith(\"agents:\") === true,\n },\n );\n const chatFirstSurfacePanel = useChatFirstSurfacePanel(chatFirstSurfaceScope);\n const { setOpen: setChatFirstSurfacePanelOpen } = chatFirstSurfacePanel;\n const chatFirstSurfaceResize = useChatFirstSurfaceResize(\n chatFirstSurfaceScope,\n );\n const chatFirstPaneHydratedRef = useRef(false);\n const pendingChatFirstOpenAppRef = useRef<ChatFirstOpenAppDetail | null>(\n null,\n );\n const previousChatFirstSurfaceScopeRef = useRef(chatFirstSurfaceScope);\n const previousChatFirstSurfaceTabCountRef = useRef<number | null>(null);\n const activeChatFirstSurfaceTab = useMemo(\n () =>\n chatFirstSurfaceTabs.tabs.find(\n (tab) => tab.id === chatFirstSurfaceTabs.activeTabId,\n ) ?? null,\n [chatFirstSurfaceTabs],\n );\n const activeChatFirstApp = useMemo(\n () =>\n activeChatFirstSurfaceTab?.kind === \"app\" &&\n activeChatFirstSurfaceTab.appId\n ? (chatFirstWorkspaceApps.find(\n (app) => app.id === activeChatFirstSurfaceTab.appId,\n ) ?? null)\n : null,\n [activeChatFirstSurfaceTab, chatFirstWorkspaceApps],\n );\n const chatFirstAgentActivities = useMemo<ChatFirstAgentActivity[]>(\n () =>\n (chatFirstAgentsQuery.data?.threads ?? []).map((thread) => ({\n sessionId: thread.id,\n title:\n thread.title || chatFirstCopy(\"agentsTitle\", { name: thread.id }),\n subtitle: thread.snippet || thread.preview || chatFirstCopy(\"session\"),\n status: \"recent\",\n ...(thread.updatedAt ? { updatedAt: thread.updatedAt } : {}),\n })),\n [chatFirstAgentsQuery.data, chatFirstCopy],\n );\n const chatFirstEmbedPath =\n activeChatFirstSurfaceTab?.kind === \"app\"\n ? (activeChatFirstSurfaceTab.path ??\n chatFirstPane?.path ??\n activeChatFirstApp?.path)\n : null;\n useEffect(() => {\n if (!chatFirstMode || !isChatRoute || !activeChatFirstApp) {\n setChatFirstEmbedUrl(null);\n setChatFirstEmbedError(null);\n return;\n }\n if (!chatFirstEmbedPath?.startsWith(\"/\")) {\n setChatFirstEmbedUrl(null);\n setChatFirstEmbedError(chatFirstCopy(\"appUnavailable\"));\n return;\n }\n let cancelled = false;\n setChatFirstEmbedUrl(null);\n setChatFirstEmbedError(null);\n void createChatFirstEmbedSession\n .mutateAsync(\n buildChatFirstEmbedSessionInput(\n activeChatFirstApp.id,\n chatFirstEmbedPath,\n ),\n )\n .then((result) => {\n if (!cancelled) setChatFirstEmbedUrl(result.startUrl);\n })\n .catch((cause: unknown) => {\n if (!cancelled) {\n setChatFirstEmbedError(\n cause instanceof Error\n ? cause.message\n : chatFirstCopy(\"appUnavailable\"),\n );\n }\n });\n return () => {\n cancelled = true;\n };\n }, [\n activeChatFirstApp,\n chatFirstCopy,\n chatFirstEmbedAttempt,\n chatFirstEmbedPath,\n chatFirstMode,\n createChatFirstEmbedSession.mutateAsync,\n isChatRoute,\n ]);\n const persistChatFirstPane = useCallback(\n (pane: DispatchChatFirstPane | null) => {\n setChatFirstPane(pane);\n void writeClientAppState(CHAT_FIRST_PANE_STATE_KEY, pane).catch(() => {\n setChatFirstNotice(\n \"The app pane opened locally, but its focus could not be synced.\",\n );\n });\n },\n [],\n );\n const openChatFirstPane = useCallback(\n (pane: DispatchChatFirstPane) => {\n setChatFirstNotice(null);\n closeChatFirstSessionWatch();\n const app = chatFirstAppRegistrations.find(\n (candidate) => candidate.id === pane.appId,\n );\n chatFirstSurfaceTabsStore.open({\n id: chatFirstSurfaceTabId(\n \"app\",\n `${pane.appId}:${pane.path ?? pane.view ?? \"/\"}`,\n ),\n kind: \"app\",\n title: app?.name ?? pane.appId,\n appId: pane.appId,\n ...(pane.path ? { path: pane.path } : {}),\n ...(pane.view ? { view: pane.view } : {}),\n });\n persistChatFirstPane(pane);\n },\n [\n chatFirstAppRegistrations,\n chatFirstSurfaceTabsStore,\n persistChatFirstPane,\n ],\n );\n const openChatFirstSurface = useCallback(\n (kind: ChatFirstSurfaceKind) => {\n if (kind !== \"agents\") return;\n persistChatFirstPane(null);\n closeChatFirstSessionWatch();\n chatFirstSurfaceTabsStore.open({\n id: chatFirstSurfaceTabId(\"agents\", \"activity\"),\n kind: \"agents\",\n title: \"Agents\",\n });\n },\n [chatFirstSurfaceTabsStore, persistChatFirstPane],\n );\n const resolveChatFirstOpenBrowser = useCallback(\n (detail: ChatFirstOpenBrowserDetail) => {\n const resolution = resolveChatFirstBrowserTarget(detail);\n if (resolution.status === \"unresolved\") {\n setChatFirstNotice(\n chatFirstBrowserResolutionMessage(resolution.reason),\n );\n return;\n }\n persistChatFirstPane(null);\n closeChatFirstSessionWatch();\n setChatFirstNotice(null);\n chatFirstSurfaceTabsStore.open({\n id: chatFirstSurfaceTabId(\"browser\", resolution.target.url),\n kind: \"browser\",\n title: resolution.target.title ?? \"Browser\",\n url: resolution.target.url,\n });\n },\n [chatFirstSurfaceTabsStore, persistChatFirstPane],\n );\n const resolveChatFirstOpenApp = useCallback(\n (detail: ChatFirstOpenAppDetail) => {\n if (chatFirstAppsQuery.isLoading) {\n pendingChatFirstOpenAppRef.current = detail;\n return;\n }\n if (chatFirstAppsQuery.isError) {\n pendingChatFirstOpenAppRef.current = null;\n setChatFirstNotice(\n \"Workspace apps could not be loaded, so the requested app was not opened.\",\n );\n return;\n }\n\n const resolution = resolveChatFirstAppTarget(\n detail,\n chatFirstAppRegistrations,\n {\n currentOrigin:\n typeof window === \"undefined\" ? undefined : window.location.origin,\n },\n );\n pendingChatFirstOpenAppRef.current = null;\n if (resolution.status === \"unresolved\") {\n setChatFirstNotice(chatFirstResolutionMessage(resolution.reason));\n return;\n }\n openChatFirstPane(resolution.target);\n },\n [\n chatFirstAppRegistrations,\n chatFirstAppsQuery.isError,\n chatFirstAppsQuery.isLoading,\n openChatFirstPane,\n ],\n );\n const sidebarBeforeAppRef = useRef<boolean | null>(null);\n const sidebarAutoCollapsedRef = useRef(false);\n const chatHomeHandoffActive = useAgentChatHomeHandoff({\n storageKey: \"dispatch\",\n activePath: localPathname,\n enabled: !isChatRoute,\n });\n const chatHandoffLinkOptions = {\n storageKey: \"dispatch\",\n isChatPath: (pathname: string) =>\n pathname === \"/chat\" || pathname.startsWith(\"/chat/\"),\n requireActiveHandoff: true,\n };\n useAgentChatHomeHandoffLinks(chatHandoffLinkOptions);\n\n useEffect(() => {\n const handleModeChange = (event: Event) => {\n const enabled = (event as CustomEvent<{ enabled?: unknown }>).detail\n ?.enabled;\n setChatFirstPreference(enabled === true);\n };\n window.addEventListener(CHAT_FIRST_MODE_CHANGED_EVENT, handleModeChange);\n return () =>\n window.removeEventListener(\n CHAT_FIRST_MODE_CHANGED_EVENT,\n handleModeChange,\n );\n }, []);\n\n useEffect(() => {\n if (\n !chatFirstMode ||\n !isChatRoute ||\n chatFirstAppLayoutHydratedRef.current\n ) {\n return;\n }\n chatFirstAppLayoutHydratedRef.current = true;\n void readClientAppState<unknown>(\"chat-first-app-layout\")\n .then((value) => {\n if (!value || typeof value !== \"object\") return;\n const candidate = value as Partial<ChatFirstAppLayoutPreference>;\n const ids = (input: unknown) =>\n Array.isArray(input)\n ? input.filter(\n (id): id is string =>\n typeof id === \"string\" && id.trim().length > 0,\n )\n : [];\n setChatFirstAppLayout({\n pinnedIds: [...new Set(ids(candidate.pinnedIds))],\n orderedIds: [...new Set(ids(candidate.orderedIds))],\n });\n })\n .catch(() => {\n // Device-local layout remains the fallback when workspace state is unavailable.\n });\n }, [chatFirstMode, isChatRoute]);\n\n const persistChatFirstAppLayout = useCallback(\n (layout: ChatFirstAppLayoutPreference) => {\n setChatFirstAppLayout(layout);\n void writeClientAppState(\"chat-first-app-layout\", layout).catch(() => {\n setChatFirstNotice(\n \"App order changed locally, but workspace state could not be synced.\",\n );\n });\n },\n [],\n );\n\n useEffect(() => {\n if (!chatFirstMode || !isChatRoute) {\n setChatFirstPane(null);\n closeChatFirstSessionWatch();\n chatFirstSurfaceTabsStore.closeAll();\n setChatFirstNotice(null);\n pendingChatFirstOpenAppRef.current = null;\n chatFirstPaneHydratedRef.current = false;\n return;\n }\n const unsubscribeApp = subscribeChatFirstOpenApp(resolveChatFirstOpenApp);\n const unsubscribeBrowser = subscribeChatFirstOpenBrowser(\n resolveChatFirstOpenBrowser,\n );\n return () => {\n unsubscribeApp();\n unsubscribeBrowser();\n };\n }, [\n chatFirstMode,\n isChatRoute,\n chatFirstSurfaceTabsStore,\n resolveChatFirstOpenApp,\n resolveChatFirstOpenBrowser,\n ]);\n\n useEffect(() => {\n if (\n !chatFirstMode ||\n !isChatRoute ||\n chatFirstPaneHydratedRef.current ||\n chatFirstAppsQuery.isLoading ||\n chatFirstAppsQuery.isError\n ) {\n return;\n }\n chatFirstPaneHydratedRef.current = true;\n if (chatFirstPane) return;\n let active = true;\n void readClientAppState<unknown>(CHAT_FIRST_PANE_STATE_KEY)\n .then((value) => {\n if (!active) return;\n const persisted = persistedChatFirstPane(value);\n if (!persisted) return;\n const resolution = resolveChatFirstAppTarget(\n {\n app: persisted.appId,\n path: persisted.path,\n view: persisted.view,\n },\n chatFirstAppRegistrations,\n {\n currentOrigin:\n typeof window === \"undefined\"\n ? undefined\n : window.location.origin,\n },\n );\n if (resolution.status === \"ready\") openChatFirstPane(resolution.target);\n })\n .catch(() => {\n if (active) {\n setChatFirstNotice(\n \"The last app pane could not be restored from workspace state.\",\n );\n }\n });\n return () => {\n active = false;\n };\n }, [\n chatFirstAppsQuery.isError,\n chatFirstAppsQuery.isLoading,\n chatFirstAppRegistrations,\n chatFirstMode,\n chatFirstPane,\n isChatRoute,\n openChatFirstPane,\n ]);\n\n useEffect(() => {\n if (previousChatFirstSurfaceScopeRef.current === chatFirstSurfaceScope) {\n return;\n }\n previousChatFirstSurfaceScopeRef.current = chatFirstSurfaceScope;\n persistChatFirstPane(null);\n setChatFirstEmbedUrl(null);\n setChatFirstEmbedError(null);\n setChatFirstNotice(null);\n pendingChatFirstOpenAppRef.current = null;\n chatFirstPaneHydratedRef.current = true;\n chatFirstSurfaceTabsStore.closeAll();\n setChatFirstSurfacePanelOpen(false);\n closeChatFirstSessionWatch();\n }, [\n chatFirstSurfaceScope,\n chatFirstSurfaceTabsStore,\n persistChatFirstPane,\n setChatFirstSurfacePanelOpen,\n ]);\n\n useEffect(() => {\n const tabCount = chatFirstSurfaceTabs.tabs.length;\n const previousTabCount = previousChatFirstSurfaceTabCountRef.current;\n if (!chatFirstMode || !isChatRoute) {\n setChatFirstSurfacePanelOpen(false);\n } else if (\n tabCount > 0 &&\n (previousTabCount === null || previousTabCount === 0)\n ) {\n setChatFirstSurfacePanelOpen(true);\n } else if (\n tabCount === 0 &&\n previousTabCount !== null &&\n previousTabCount > 0\n ) {\n setChatFirstSurfacePanelOpen(false);\n }\n previousChatFirstSurfaceTabCountRef.current = tabCount;\n }, [\n chatFirstMode,\n setChatFirstSurfacePanelOpen,\n chatFirstSurfaceTabs.tabs.length,\n isChatRoute,\n ]);\n\n useEffect(() => {\n const activeTab = activeChatFirstSurfaceTab;\n if (\n activeTab?.kind === \"side-chat\" &&\n activeTab.session &&\n !chatFirstSessionWatch.target\n ) {\n emitChatFirstSessionWatch(activeTab.session);\n }\n }, [activeChatFirstSurfaceTab, chatFirstSessionWatch.target]);\n\n useEffect(() => {\n const pending = pendingChatFirstOpenAppRef.current;\n if (!pending || chatFirstAppsQuery.isLoading) return;\n resolveChatFirstOpenApp(pending);\n }, [\n chatFirstAppsQuery.data,\n chatFirstAppsQuery.isError,\n chatFirstAppsQuery.isLoading,\n resolveChatFirstOpenApp,\n ]);\n\n useEffect(() => {\n const target = chatFirstSessionWatch.target;\n if (!target || !chatFirstMode || !isChatRoute) return;\n setChatFirstPane(null);\n chatFirstSurfaceTabsStore.open({\n id: chatFirstSurfaceTabId(\"side-chat\", target.sessionId),\n kind: \"side-chat\",\n title: target.title ? `Watch · ${target.title}` : \"Watched session\",\n session: target,\n });\n }, [\n chatFirstMode,\n chatFirstSessionWatch.target,\n chatFirstSurfaceTabsStore,\n isChatRoute,\n ]);\n\n useEffect(() => {\n if (isWorkspaceAppHostRoute) {\n if (!sidebarAutoCollapsedRef.current) {\n sidebarAutoCollapsedRef.current = true;\n sidebarBeforeAppRef.current = sidebarCollapsed;\n }\n if (!sidebarCollapsed) setSidebarCollapsed(true);\n return;\n }\n\n if (!sidebarAutoCollapsedRef.current) return;\n sidebarAutoCollapsedRef.current = false;\n const previousSidebarState = sidebarBeforeAppRef.current;\n sidebarBeforeAppRef.current = null;\n if (\n previousSidebarState !== null &&\n previousSidebarState !== sidebarCollapsed\n ) {\n setSidebarCollapsed(previousSidebarState);\n }\n }, [isWorkspaceAppHostRoute, sidebarCollapsed]);\n\n useEffect(() => {\n if (typeof window === \"undefined\" || isWorkspaceAppHostRoute) return;\n try {\n window.localStorage.setItem(\n SIDEBAR_COLLAPSE_KEY,\n sidebarCollapsed ? \"1\" : \"0\",\n );\n } catch {\n // Ignore storage failures; the in-memory preference still works.\n }\n }, [isWorkspaceAppHostRoute, sidebarCollapsed]);\n\n const activateChatFirstSurfaceTab = useCallback(\n (tab: (typeof chatFirstSurfaceTabs.tabs)[number]) => {\n chatFirstSurfaceTabsStore.activate(tab.id);\n if (tab.kind === \"app\" && tab.appId) {\n closeChatFirstSessionWatch();\n persistChatFirstPane({\n appId: tab.appId,\n ...(tab.path ? { path: tab.path } : {}),\n ...(tab.view ? { view: tab.view } : {}),\n });\n return;\n }\n if (tab.kind === \"browser\" && tab.url) {\n persistChatFirstPane(null);\n closeChatFirstSessionWatch();\n return;\n }\n if (tab.kind === \"side-chat\" && tab.session) {\n persistChatFirstPane(null);\n emitChatFirstSessionWatch(tab.session);\n return;\n }\n if (tab.kind === \"agents\") {\n persistChatFirstPane(null);\n closeChatFirstSessionWatch();\n }\n },\n [\n chatFirstSurfaceTabs.tabs,\n chatFirstSurfaceTabsStore,\n persistChatFirstPane,\n ],\n );\n\n const closeChatFirstSurfaceTab = useCallback(\n (tab: (typeof chatFirstSurfaceTabs.tabs)[number]) => {\n const isActive = chatFirstSurfaceTabs.activeTabId === tab.id;\n if (tab.kind === \"app\" && isActive) persistChatFirstPane(null);\n if (tab.kind === \"side-chat\" && isActive) {\n closeChatFirstSessionWatch();\n }\n chatFirstSurfaceTabsStore.close(tab.id);\n },\n [chatFirstSurfaceTabs, chatFirstSurfaceTabsStore, persistChatFirstPane],\n );\n\n const closeAllChatFirstSurfaceTabs = useCallback(() => {\n persistChatFirstPane(null);\n closeChatFirstSessionWatch();\n chatFirstSurfaceTabsStore.closeAll();\n }, [chatFirstSurfaceTabsStore, persistChatFirstPane]);\n\n const renderChatFirstWatchChat = useCallback(\n (target: ChatFirstSessionReference) => (\n <AgentChatSurface\n mode=\"page\"\n className=\"h-full min-h-0 w-full\"\n defaultMode=\"chat\"\n storageKey={`dispatch-session-watch:${target.sessionId}`}\n restoreActiveThread={false}\n threadUrlSync={{\n routeThreadId: target.sessionId,\n getPath: chatThreadPath,\n navigate: () => undefined,\n }}\n showHeader={false}\n showTabBar={false}\n showPageNewChatButton={false}\n chatOnly\n dynamicSuggestions={false}\n suggestions={[]}\n emptyStateDisplay=\"hidden\"\n composerPlaceholder={t(\n \"dispatch.pages.chatFirstSessionMessagePlaceholder\",\n )}\n />\n ),\n [t],\n );\n\n const renderChatFirstSurfaceTab = useCallback(\n (tab: ChatFirstSurfaceTab) => {\n if (tab.kind === \"app\") {\n if (tab.id !== chatFirstSurfaceTabs.activeTabId) return null;\n const app = tab.appId\n ? (chatFirstWorkspaceApps.find(\n (candidate) => candidate.id === tab.appId,\n ) ?? null)\n : null;\n return (\n <ChatFirstAppPane\n app={app}\n status={\n chatFirstEmbedError\n ? \"error\"\n : chatFirstEmbedUrl\n ? \"ready\"\n : chatFirstAppsQuery.isLoading\n ? \"loading\"\n : app\n ? \"loading\"\n : \"unresolved\"\n }\n embedUrl={chatFirstEmbedUrl}\n errorMessage={chatFirstEmbedError}\n onRetry={() => setChatFirstEmbedAttempt((value) => value + 1)}\n renderEmbed={({ url, title }: ChatFirstEmbedTarget) => (\n <iframe\n data-dispatch-chat-first-app-frame\n src={url}\n title={title ?? chatFirstCopy(\"appUnavailable\")}\n referrerPolicy=\"no-referrer\"\n allow=\"clipboard-read; clipboard-write\"\n className=\"h-full w-full border-0 bg-background\"\n />\n )}\n copy={chatFirstCopy}\n />\n );\n }\n if (tab.kind === \"browser\" && tab.url) {\n return (\n <ChatFirstBrowserPane\n url={tab.url}\n title={tab.title}\n onClose={() => closeChatFirstSurfaceTab(tab)}\n renderEmbed={({ url, title, key }: ChatFirstEmbedTarget) => (\n <iframe\n key={key}\n src={url}\n title={title ?? chatFirstCopy(\"browserPage\")}\n referrerPolicy=\"no-referrer\"\n allow=\"clipboard-read; clipboard-write\"\n className=\"h-full w-full border-0 bg-background\"\n />\n )}\n copy={chatFirstCopy}\n />\n );\n }\n if (tab.kind === \"side-chat\") {\n const target =\n tab.session ??\n (tab.id === chatFirstSurfaceTabs.activeTabId\n ? chatFirstSessionWatch.target\n : null);\n return target ? (\n <ChatFirstSessionWatchPane\n target={target}\n onClose={() => closeChatFirstSurfaceTab(tab)}\n renderChat={renderChatFirstWatchChat}\n copy={chatFirstCopy}\n />\n ) : null;\n }\n if (tab.kind === \"agents\") {\n return (\n <ChatFirstAgentsPane\n activities={chatFirstAgentActivities}\n loading={chatFirstAgentsQuery.isLoading}\n error={\n chatFirstAgentsQuery.isError\n ? chatFirstAgentsQuery.error.message\n : null\n }\n onRefresh={() => void chatFirstAgentsQuery.refetch()}\n onWatch={(activity) =>\n emitChatFirstSessionWatch({\n sessionId: activity.sessionId,\n title: activity.title,\n kind: \"agent-chat\",\n ...(activity.goalId ? { goalId: activity.goalId } : {}),\n })\n }\n copy={chatFirstCopy}\n />\n );\n }\n return null;\n },\n [\n chatFirstAgentActivities,\n chatFirstAgentsQuery.error,\n chatFirstAgentsQuery.isError,\n chatFirstAgentsQuery.isLoading,\n chatFirstAppsQuery.isLoading,\n chatFirstCopy,\n chatFirstEmbedError,\n chatFirstEmbedUrl,\n chatFirstSessionWatch.target,\n chatFirstSurfaceTabs.activeTabId,\n chatFirstWorkspaceApps,\n closeChatFirstSurfaceTab,\n renderChatFirstWatchChat,\n ],\n );\n\n if (CHROMELESS_PATHS.some((path) => localPathname === path)) {\n return <>{children}</>;\n }\n\n if (isWorkspaceAppHostRoute) {\n return (\n <DispatchExtensionsContext.Provider value={extensions}>\n <HeaderActionsProvider>\n <div\n data-dispatch-workspace-app-chrome-less\n className=\"h-screen w-full overflow-hidden bg-background\"\n >\n {children}\n </div>\n </HeaderActionsProvider>\n </DispatchExtensionsContext.Provider>\n );\n }\n\n const showHeader = !isChatRoute && !pageOwnsToolbar(localPathname);\n function openAskAgentFullscreen() {\n focusAgentChat();\n navigateWithAgentChatViewTransition(\n navigate,\n dispatchNavLinkTarget(\"/chat\"),\n );\n }\n const sidebarSuggestions = [\n t(\"dispatch.sidebar.suggestionBuildApp\"),\n t(\"dispatch.sidebar.suggestionRouteSlack\"),\n t(\"dispatch.sidebar.suggestionGrantKey\"),\n ];\n const appContent = (\n <div className=\"relative flex h-full min-w-0 flex-1 flex-col overflow-hidden\">\n {showHeader ? <Header onOpenMobile={() => setMobileOpen(true)} /> : null}\n <InvitationBanner />\n {isChatRoute && chatFirstMode ? (\n <ChatFirstSurfacePanelToggle\n open={chatFirstSurfacePanel.open}\n onToggle={chatFirstSurfacePanel.toggle}\n className=\"absolute right-3 top-2 z-[4]\"\n />\n ) : null}\n {isChatRoute && chatFirstMode && chatFirstNotice ? (\n <div\n className=\"dispatch-chat-first-notice\"\n role=\"status\"\n aria-live=\"polite\"\n >\n <span>{chatFirstNotice}</span>\n <button\n type=\"button\"\n onClick={() => setChatFirstNotice(null)}\n aria-label=\"Dismiss app notice\"\n >\n Dismiss\n </button>\n </div>\n ) : null}\n <main\n className={cn(\n \"flex-1\",\n isChatRoute || isWorkspaceAppHostRoute\n ? \"min-h-0 overflow-hidden\"\n : \"overflow-y-auto\",\n )}\n >\n {showHeader ? (\n <div className=\"mx-auto max-w-7xl space-y-10 px-4 py-6 sm:px-6\">\n {children}\n </div>\n ) : (\n children\n )}\n </main>\n </div>\n );\n const content = isChatRoute ? (\n <div\n className={cn(\n \"agent-layout-main-surface flex min-w-0 flex-1 overflow-hidden\",\n chatFirstMode && \"dispatch-chat-first-surface\",\n )}\n >\n {appContent}\n {chatFirstMode && chatFirstSurfacePanel.open ? (\n <ChatFirstSurfacePanel\n width={chatFirstSurfaceResize.width}\n onResizePointerDown={chatFirstSurfaceResize.onPointerDown}\n copy={chatFirstCopy}\n >\n <ChatFirstSurfaceTabs\n tabs={chatFirstSurfaceTabs.tabs}\n activeTabId={chatFirstSurfaceTabs.activeTabId}\n onActivate={activateChatFirstSurfaceTab}\n onClose={closeChatFirstSurfaceTab}\n onCloseOthers={(tab) => {\n activateChatFirstSurfaceTab(tab);\n chatFirstSurfaceTabsStore.closeOthers(tab.id);\n }}\n onCloseToRight={(tab) => {\n const targetIndex = chatFirstSurfaceTabs.tabs.findIndex(\n (candidate) => candidate.id === tab.id,\n );\n const activeIndex = chatFirstSurfaceTabs.tabs.findIndex(\n (candidate) =>\n candidate.id === chatFirstSurfaceTabs.activeTabId,\n );\n if (activeIndex > targetIndex) activateChatFirstSurfaceTab(tab);\n chatFirstSurfaceTabsStore.closeToRight(tab.id);\n }}\n onCloseAll={closeAllChatFirstSurfaceTabs}\n onOpenSurface={openChatFirstSurface}\n copy={chatFirstCopy}\n />\n {chatFirstSurfaceTabs.tabs.length > 0 ? (\n <ChatFirstSurfaceContent\n tabs={chatFirstSurfaceTabs.tabs}\n activeTabId={chatFirstSurfaceTabs.activeTabId}\n renderTab={renderChatFirstSurfaceTab}\n />\n ) : null}\n </ChatFirstSurfacePanel>\n ) : null}\n </div>\n ) : (\n <AgentSidebar\n position=\"right\"\n defaultOpen={false}\n agentPageHref={agentPageHref}\n chatViewTransition\n storageKey=\"dispatch\"\n openOnChatRunning={chatHomeHandoffActive}\n onFullscreenRequest={openAskAgentFullscreen}\n emptyStateText={t(\"dispatch.sidebar.emptyAgentText\")}\n suggestions={sidebarSuggestions}\n >\n {appContent}\n </AgentSidebar>\n );\n\n return (\n <DispatchExtensionsContext.Provider value={extensions}>\n <HeaderActionsProvider>\n <div className=\"agent-layout-shell flex h-screen w-full overflow-hidden bg-background\">\n <aside\n data-collapsed={sidebarCollapsed ? \"true\" : \"false\"}\n className={cn(\n \"agent-layout-left-drawer hidden shrink-0 flex-col border-e !border-e-sidebar-border bg-sidebar text-sidebar-foreground transition-[width] duration-200 ease-out lg:flex\",\n sidebarCollapsed ? \"w-14\" : \"w-56\",\n )}\n >\n <NavContent\n extensions={extensions}\n chatFirstMode={chatFirstMode}\n chatFirstEmbedded={chatFirstEmbedded}\n collapsed={sidebarCollapsed}\n chatFirstAppLayout={chatFirstAppLayout}\n onChatFirstAppLayoutChange={persistChatFirstAppLayout}\n chatFirstApps={chatFirstAppItems}\n chatFirstAppsLoading={chatFirstAppsQuery.isLoading}\n chatFirstAppsError={\n chatFirstAppsQuery.isError\n ? chatFirstCopy(\"appsLoadError\")\n : null\n }\n chatFirstActiveAppId={\n activeChatFirstSurfaceTab?.kind === \"app\"\n ? activeChatFirstSurfaceTab.appId\n : undefined\n }\n onChatFirstAppOpen={(app) => openChatFirstPane({ appId: app.id })}\n onChatFirstAppsRetry={() => void chatFirstAppsQuery.refetch()}\n collapsible\n onCollapsedChange={setSidebarCollapsed}\n />\n </aside>\n\n <Sheet open={mobileOpen} onOpenChange={setMobileOpen}>\n <SheetContent\n side=\"left\"\n className=\"w-72 p-0 bg-sidebar text-sidebar-foreground [&>button]:hidden\"\n >\n <SheetTitle className=\"sr-only\">\n {t(\"dispatch.nav.navigation\")}\n </SheetTitle>\n <SheetDescription className=\"sr-only\">\n {t(\"dispatch.nav.navigationDescription\")}\n </SheetDescription>\n <div className=\"flex h-full w-full flex-col\">\n <NavContent\n extensions={extensions}\n chatFirstMode={chatFirstMode}\n chatFirstEmbedded={chatFirstEmbedded}\n collapsed={false}\n chatFirstAppLayout={chatFirstAppLayout}\n onChatFirstAppLayoutChange={persistChatFirstAppLayout}\n chatFirstApps={chatFirstAppItems}\n chatFirstAppsLoading={chatFirstAppsQuery.isLoading}\n chatFirstAppsError={\n chatFirstAppsQuery.isError\n ? chatFirstCopy(\"appsLoadError\")\n : null\n }\n chatFirstActiveAppId={\n activeChatFirstSurfaceTab?.kind === \"app\"\n ? activeChatFirstSurfaceTab.appId\n : undefined\n }\n onChatFirstAppOpen={(app) =>\n openChatFirstPane({ appId: app.id })\n }\n onChatFirstAppsRetry={() => void chatFirstAppsQuery.refetch()}\n onNavigate={() => setMobileOpen(false)}\n />\n </div>\n </SheetContent>\n </Sheet>\n\n {content}\n </div>\n </HeaderActionsProvider>\n </DispatchExtensionsContext.Provider>\n );\n}\n"]}
|
|
@@ -26,4 +26,10 @@ export interface WorkspaceAppSummary {
|
|
|
26
26
|
export declare function workspaceAppRoute(appId: string): string;
|
|
27
27
|
export declare function workspaceAppHref(app: WorkspaceAppSummary): string | null;
|
|
28
28
|
export declare function isPendingBuilderHref(app: WorkspaceAppSummary): boolean;
|
|
29
|
+
/**
|
|
30
|
+
* Keep the chat-first rail useful before a workspace manifest is populated.
|
|
31
|
+
* Mounted workspace rows still win, so custom names and routes remain the
|
|
32
|
+
* source of truth once an app exists in the workspace.
|
|
33
|
+
*/
|
|
34
|
+
export declare function mergeChatFirstWorkspaceApps(apps: readonly WorkspaceAppSummary[] | undefined): WorkspaceAppSummary[];
|
|
29
35
|
//# sourceMappingURL=workspace-apps.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"workspace-apps.d.ts","sourceRoot":"","sources":["../../src/lib/workspace-apps.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"workspace-apps.d.ts","sourceRoot":"","sources":["../../src/lib/workspace-apps.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,mBAAmB;IAClC,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,QAAQ,CAAC,EAAE,UAAU,GAAG,QAAQ,CAAC;IACjC,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;IACvB,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;IAC1B,MAAM,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IAC7B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;IACjB,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,cAAc,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,gBAAgB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACjC,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAEvD;AAED,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,mBAAmB,GAAG,MAAM,GAAG,IAAI,CAUxE;AAED,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,mBAAmB,GAAG,OAAO,CAEtE;AAED;;;;GAIG;AACH,wBAAgB,2BAA2B,CACzC,IAAI,EAAE,SAAS,mBAAmB,EAAE,GAAG,SAAS,GAC/C,mBAAmB,EAAE,CAcvB"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { CHAT_FIRST_DEFAULT_APP_IDS } from "@agent-native/core/client/chat-first";
|
|
1
2
|
import { withBuilderUtmTrackingParams } from "@agent-native/core/shared/builder-link-tracking";
|
|
2
3
|
export function workspaceAppRoute(appId) {
|
|
3
4
|
return `/apps/${encodeURIComponent(appId)}`;
|
|
@@ -16,4 +17,24 @@ export function workspaceAppHref(app) {
|
|
|
16
17
|
export function isPendingBuilderHref(app) {
|
|
17
18
|
return app.status === "pending" && !!app.builderUrl;
|
|
18
19
|
}
|
|
20
|
+
/**
|
|
21
|
+
* Keep the chat-first rail useful before a workspace manifest is populated.
|
|
22
|
+
* Mounted workspace rows still win, so custom names and routes remain the
|
|
23
|
+
* source of truth once an app exists in the workspace.
|
|
24
|
+
*/
|
|
25
|
+
export function mergeChatFirstWorkspaceApps(apps) {
|
|
26
|
+
const merged = new Map();
|
|
27
|
+
for (const id of CHAT_FIRST_DEFAULT_APP_IDS) {
|
|
28
|
+
merged.set(id, {
|
|
29
|
+
id,
|
|
30
|
+
name: id.charAt(0).toUpperCase() + id.slice(1),
|
|
31
|
+
path: `/${id}`,
|
|
32
|
+
url: null,
|
|
33
|
+
status: "ready",
|
|
34
|
+
});
|
|
35
|
+
}
|
|
36
|
+
for (const app of apps ?? [])
|
|
37
|
+
merged.set(app.id, app);
|
|
38
|
+
return [...merged.values()];
|
|
39
|
+
}
|
|
19
40
|
//# sourceMappingURL=workspace-apps.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"workspace-apps.js","sourceRoot":"","sources":["../../src/lib/workspace-apps.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,4BAA4B,EAAE,MAAM,iDAAiD,CAAC;AA4B/F,MAAM,UAAU,iBAAiB,CAAC,KAAa;IAC7C,OAAO,SAAS,kBAAkB,CAAC,KAAK,CAAC,EAAE,CAAC;AAC9C,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,GAAwB;IACvD,IAAI,GAAG,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;QAC7B,OAAO,GAAG,CAAC,UAAU;YACnB,CAAC,CAAC,4BAA4B,CAAC,GAAG,CAAC,UAAU,EAAE;gBAC3C,QAAQ,EAAE,SAAS;gBACnB,OAAO,EAAE,iBAAiB;aAC3B,CAAC;YACJ,CAAC,CAAC,IAAI,CAAC;IACX,CAAC;IACD,OAAO,GAAG,CAAC,IAAI,IAAI,GAAG,CAAC,GAAG,IAAI,IAAI,CAAC;AACrC,CAAC;AAED,MAAM,UAAU,oBAAoB,CAAC,GAAwB;IAC3D,OAAO,GAAG,CAAC,MAAM,KAAK,SAAS,IAAI,CAAC,CAAC,GAAG,CAAC,UAAU,CAAC;AACtD,CAAC","sourcesContent":["import { withBuilderUtmTrackingParams } from \"@agent-native/core/shared/builder-link-tracking\";\n\nexport interface WorkspaceAppSummary {\n id: string;\n name: string;\n description?: string;\n path: string;\n url?: string | null;\n isDispatch?: boolean;\n audience?: \"internal\" | \"public\";\n publicPaths?: string[];\n protectedPaths?: string[];\n status?: \"ready\" | \"pending\";\n statusLabel?: string;\n builderUrl?: string | null;\n branchName?: string | null;\n createdAt?: string | null;\n createdBy?: string | null;\n owner?: string | null;\n teams?: string[];\n agentCardUrl?: string | null;\n agentCardReachable?: boolean;\n a2aEndpointUrl?: string | null;\n agentName?: string | null;\n agentSkillsCount?: number | null;\n archived?: boolean;\n}\n\nexport function workspaceAppRoute(appId: string): string {\n return `/apps/${encodeURIComponent(appId)}`;\n}\n\nexport function workspaceAppHref(app: WorkspaceAppSummary): string | null {\n if (app.status === \"pending\") {\n return app.builderUrl\n ? withBuilderUtmTrackingParams(app.builderUrl, {\n campaign: \"product\",\n content: \"dispatch_branch\",\n })\n : null;\n }\n return app.path || app.url || null;\n}\n\nexport function isPendingBuilderHref(app: WorkspaceAppSummary): boolean {\n return app.status === \"pending\" && !!app.builderUrl;\n}\n"]}
|
|
1
|
+
{"version":3,"file":"workspace-apps.js","sourceRoot":"","sources":["../../src/lib/workspace-apps.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,0BAA0B,EAAE,MAAM,sCAAsC,CAAC;AAClF,OAAO,EAAE,4BAA4B,EAAE,MAAM,iDAAiD,CAAC;AA4B/F,MAAM,UAAU,iBAAiB,CAAC,KAAa;IAC7C,OAAO,SAAS,kBAAkB,CAAC,KAAK,CAAC,EAAE,CAAC;AAC9C,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,GAAwB;IACvD,IAAI,GAAG,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;QAC7B,OAAO,GAAG,CAAC,UAAU;YACnB,CAAC,CAAC,4BAA4B,CAAC,GAAG,CAAC,UAAU,EAAE;gBAC3C,QAAQ,EAAE,SAAS;gBACnB,OAAO,EAAE,iBAAiB;aAC3B,CAAC;YACJ,CAAC,CAAC,IAAI,CAAC;IACX,CAAC;IACD,OAAO,GAAG,CAAC,IAAI,IAAI,GAAG,CAAC,GAAG,IAAI,IAAI,CAAC;AACrC,CAAC;AAED,MAAM,UAAU,oBAAoB,CAAC,GAAwB;IAC3D,OAAO,GAAG,CAAC,MAAM,KAAK,SAAS,IAAI,CAAC,CAAC,GAAG,CAAC,UAAU,CAAC;AACtD,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,2BAA2B,CACzC,IAAgD;IAEhD,MAAM,MAAM,GAAG,IAAI,GAAG,EAA+B,CAAC;IACtD,KAAK,MAAM,EAAE,IAAI,0BAA0B,EAAE,CAAC;QAC5C,MAAM,CAAC,GAAG,CAAC,EAAE,EAAE;YACb,EAAE;YACF,IAAI,EAAE,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC;YAC9C,IAAI,EAAE,IAAI,EAAE,EAAE;YACd,GAAG,EAAE,IAAI;YACT,MAAM,EAAE,OAAO;SAChB,CAAC,CAAC;IACL,CAAC;IACD,KAAK,MAAM,GAAG,IAAI,IAAI,IAAI,EAAE;QAAE,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC;IAEtD,OAAO,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC;AAC9B,CAAC","sourcesContent":["import { CHAT_FIRST_DEFAULT_APP_IDS } from \"@agent-native/core/client/chat-first\";\nimport { withBuilderUtmTrackingParams } from \"@agent-native/core/shared/builder-link-tracking\";\n\nexport interface WorkspaceAppSummary {\n id: string;\n name: string;\n description?: string;\n path: string;\n url?: string | null;\n isDispatch?: boolean;\n audience?: \"internal\" | \"public\";\n publicPaths?: string[];\n protectedPaths?: string[];\n status?: \"ready\" | \"pending\";\n statusLabel?: string;\n builderUrl?: string | null;\n branchName?: string | null;\n createdAt?: string | null;\n createdBy?: string | null;\n owner?: string | null;\n teams?: string[];\n agentCardUrl?: string | null;\n agentCardReachable?: boolean;\n a2aEndpointUrl?: string | null;\n agentName?: string | null;\n agentSkillsCount?: number | null;\n archived?: boolean;\n}\n\nexport function workspaceAppRoute(appId: string): string {\n return `/apps/${encodeURIComponent(appId)}`;\n}\n\nexport function workspaceAppHref(app: WorkspaceAppSummary): string | null {\n if (app.status === \"pending\") {\n return app.builderUrl\n ? withBuilderUtmTrackingParams(app.builderUrl, {\n campaign: \"product\",\n content: \"dispatch_branch\",\n })\n : null;\n }\n return app.path || app.url || null;\n}\n\nexport function isPendingBuilderHref(app: WorkspaceAppSummary): boolean {\n return app.status === \"pending\" && !!app.builderUrl;\n}\n\n/**\n * Keep the chat-first rail useful before a workspace manifest is populated.\n * Mounted workspace rows still win, so custom names and routes remain the\n * source of truth once an app exists in the workspace.\n */\nexport function mergeChatFirstWorkspaceApps(\n apps: readonly WorkspaceAppSummary[] | undefined,\n): WorkspaceAppSummary[] {\n const merged = new Map<string, WorkspaceAppSummary>();\n for (const id of CHAT_FIRST_DEFAULT_APP_IDS) {\n merged.set(id, {\n id,\n name: id.charAt(0).toUpperCase() + id.slice(1),\n path: `/${id}`,\n url: null,\n status: \"ready\",\n });\n }\n for (const app of apps ?? []) merged.set(app.id, app);\n\n return [...merged.values()];\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"settings.d.ts","sourceRoot":"","sources":["../../../src/routes/pages/settings.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"settings.d.ts","sourceRoot":"","sources":["../../../src/routes/pages/settings.tsx"],"names":[],"mappings":"AA4BA,wBAAgB,IAAI;;IAEnB;AAED,MAAM,CAAC,OAAO,UAAU,aAAa,oDAoKpC"}
|
|
@@ -1,20 +1,40 @@
|
|
|
1
1
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { CHAT_FIRST_MODE_CHANGED_EVENT, readChatFirstModeState, writeChatFirstMode, } from "@agent-native/core/client/agent-chat";
|
|
2
3
|
import { ChangelogSettingsCard } from "@agent-native/core/client/changelog";
|
|
3
4
|
import { LanguagePicker, useT } from "@agent-native/core/client/i18n";
|
|
4
5
|
import { TeamPage } from "@agent-native/core/client/org";
|
|
5
6
|
import { SettingsTabsPage, useAgentSettingsTabs, } from "@agent-native/core/client/settings";
|
|
7
|
+
import { useState } from "react";
|
|
6
8
|
import { Link } from "react-router";
|
|
7
9
|
import changelog from "../../../CHANGELOG.md?raw";
|
|
8
10
|
import { DispatchShell } from "../../components/dispatch-shell.js";
|
|
9
11
|
import { Button } from "../../components/ui/button.js";
|
|
10
12
|
import { Card, CardContent, CardDescription, CardHeader, CardTitle, } from "../../components/ui/card.js";
|
|
11
13
|
import { Label } from "../../components/ui/label.js";
|
|
14
|
+
import { Switch } from "../../components/ui/switch.js";
|
|
12
15
|
export function meta() {
|
|
13
16
|
return [{ title: "Settings - Dispatch" }];
|
|
14
17
|
}
|
|
15
18
|
export default function SettingsRoute() {
|
|
16
19
|
const t = useT();
|
|
17
20
|
const agentSettingsTabs = useAgentSettingsTabs();
|
|
18
|
-
|
|
21
|
+
const [chatFirstModeState] = useState(() => readChatFirstModeState());
|
|
22
|
+
const [chatFirstMode, setChatFirstMode] = useState(() => chatFirstModeState.enabled);
|
|
23
|
+
const [chatFirstStorageNotice, setChatFirstStorageNotice] = useState(chatFirstModeState.availability === "unavailable"
|
|
24
|
+
? "This browser is not allowing local preferences, so Chat-first mode cannot be persisted."
|
|
25
|
+
: null);
|
|
26
|
+
function updateChatFirstMode(enabled) {
|
|
27
|
+
const result = writeChatFirstMode(enabled);
|
|
28
|
+
if (!result.ok) {
|
|
29
|
+
setChatFirstStorageNotice("This browser blocked local preferences, so Chat-first mode was not changed.");
|
|
30
|
+
return;
|
|
31
|
+
}
|
|
32
|
+
setChatFirstStorageNotice(null);
|
|
33
|
+
setChatFirstMode(enabled);
|
|
34
|
+
window.dispatchEvent(new CustomEvent(CHAT_FIRST_MODE_CHANGED_EVENT, {
|
|
35
|
+
detail: { enabled },
|
|
36
|
+
}));
|
|
37
|
+
}
|
|
38
|
+
return (_jsx(DispatchShell, { title: t("settings.title"), description: t("settings.description"), children: _jsx(SettingsTabsPage, { extraTabs: agentSettingsTabs, general: _jsxs("div", { className: "mx-auto w-full max-w-3xl space-y-6", children: [_jsxs(Card, { children: [_jsxs(CardHeader, { children: [_jsx(CardTitle, { className: "text-base", children: t("settings.languageTitle") }), _jsx(CardDescription, { children: t("settings.languageDescription") })] }), _jsxs(CardContent, { className: "max-w-xs space-y-1.5", children: [_jsx(Label, { children: t("settings.languageLabel") }), _jsx(LanguagePicker, { label: t("settings.languageLabel") })] })] }), _jsxs(Card, { children: [_jsxs(CardHeader, { children: [_jsx(CardTitle, { className: "text-base", children: "Chat-first workspace" }), _jsx(CardDescription, { children: "Keep chats at the center and open workspace apps in a contextual pane beside them." })] }), _jsxs(CardContent, { className: "flex items-center justify-between gap-4", children: [_jsxs("div", { className: "space-y-1", children: [_jsx(Label, { htmlFor: "dispatch-chat-first-mode", children: "Use chat-first navigation" }), _jsx("p", { className: "text-sm text-muted-foreground", children: "This preference only changes your local Dispatch shell." }), _jsx("p", { className: "text-sm text-muted-foreground", children: "Session watch and follow-up messaging work in this browser pane too. Local CLI subscription detection stays in the Electron app; Dispatch uses workspace/provider credentials." })] }), _jsx(Switch, { id: "dispatch-chat-first-mode", checked: chatFirstMode, onCheckedChange: updateChatFirstMode })] }), chatFirstStorageNotice ? (_jsx("p", { className: "px-6 pb-4 text-sm text-destructive", role: "alert", children: chatFirstStorageNotice })) : null] }), _jsxs(Card, { children: [_jsxs(CardHeader, { children: [_jsx(CardTitle, { className: "text-base", children: t("settings.workspaceTitle") }), _jsx(CardDescription, { children: t("settings.workspaceDescription") })] }), _jsx(CardContent, { children: _jsx(Button, { variant: "outline", asChild: true, children: _jsx(Link, { to: "/admin/workspace", children: t("settings.openResourceSettings") }) }) })] }), _jsxs(Card, { children: [_jsxs(CardHeader, { children: [_jsx(CardTitle, { className: "text-base", children: t("settings.automationsTitle") }), _jsx(CardDescription, { children: t("settings.automationsDescription") })] }), _jsx(CardContent, { children: _jsx(Button, { variant: "outline", asChild: true, children: _jsx(Link, { to: "/admin/automations", children: t("settings.openAutomations") }) }) })] }), _jsxs(Card, { children: [_jsxs(CardHeader, { children: [_jsx(CardTitle, { className: "text-base", children: t("settings.deliveryTitle") }), _jsx(CardDescription, { children: t("settings.deliveryDescription") })] }), _jsx(CardContent, { children: _jsx(Button, { variant: "outline", asChild: true, children: _jsx(Link, { to: "/admin/destinations", children: t("settings.openDelivery") }) }) })] })] }), team: _jsx("div", { className: "mx-auto w-full max-w-3xl", children: _jsx(TeamPage, { showTitle: false, createOrgDescription: "Set up a team to share dispatch destinations and approvals with your colleagues." }) }), whatsNew: _jsx("div", { className: "mx-auto w-full max-w-3xl", children: _jsx(ChangelogSettingsCard, { markdown: changelog }) }) }) }));
|
|
19
39
|
}
|
|
20
40
|
//# sourceMappingURL=settings.js.map
|