@agent-native/dispatch 0.40.0-nightly-20260929180759 → 0.40.2
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/CHANGELOG.md +42 -93
- package/dist/actions/provider-api-register.d.ts +7 -7
- package/dist/components/app-open-actions.d.ts +1 -1
- package/dist/components/app-open-actions.d.ts.map +1 -1
- package/dist/components/app-open-actions.js +1 -1
- package/dist/components/app-open-actions.js.map +1 -1
- package/dist/components/app-row-settings.js +1 -1
- package/dist/components/app-row-settings.js.map +1 -1
- package/dist/components/automation-create-dialog.js +2 -2
- package/dist/components/automation-create-dialog.js.map +1 -1
- package/dist/components/automation-details-panel.js +1 -1
- package/dist/components/automation-details-panel.js.map +1 -1
- package/dist/components/chat-home-apps.js +1 -1
- package/dist/components/chat-home-apps.js.map +1 -1
- package/dist/components/create-app-popover.js +3 -3
- package/dist/components/create-app-popover.js.map +1 -1
- package/dist/components/dispatch-control-plane.d.ts.map +1 -1
- package/dist/components/dispatch-control-plane.js +9 -30
- package/dist/components/dispatch-control-plane.js.map +1 -1
- package/dist/components/layout/Header.js +2 -2
- package/dist/components/layout/Header.js.map +1 -1
- package/dist/components/layout/Layout.d.ts +6 -5
- package/dist/components/layout/Layout.d.ts.map +1 -1
- package/dist/components/layout/Layout.js +73 -113
- package/dist/components/layout/Layout.js.map +1 -1
- package/dist/components/layout/workspace-apps-rail.d.ts.map +1 -1
- package/dist/components/layout/workspace-apps-rail.js +7 -19
- package/dist/components/layout/workspace-apps-rail.js.map +1 -1
- package/dist/components/messaging-setup-panel.js +2 -1
- package/dist/components/messaging-setup-panel.js.map +1 -1
- package/dist/components/workspace-app-card.js +2 -2
- package/dist/components/workspace-app-card.js.map +1 -1
- package/dist/components/workspace-app-host.d.ts +1 -1
- package/dist/components/workspace-app-host.d.ts.map +1 -1
- package/dist/components/workspace-app-host.js +7 -74
- package/dist/components/workspace-app-host.js.map +1 -1
- package/dist/hooks/use-navigation-state.js +1 -1
- package/dist/hooks/use-navigation-state.js.map +1 -1
- package/dist/lib/workspace-apps.js +1 -1
- package/dist/lib/workspace-apps.js.map +1 -1
- package/dist/routes/pages/$appId.js +1 -1
- package/dist/routes/pages/$appId.js.map +1 -1
- package/dist/routes/pages/_index.js +1 -1
- package/dist/routes/pages/_index.js.map +1 -1
- package/dist/routes/pages/admin._index.js +1 -1
- package/dist/routes/pages/admin._index.js.map +1 -1
- package/dist/routes/pages/agent-integrations.js +1 -1
- package/dist/routes/pages/agent-integrations.js.map +1 -1
- package/dist/routes/pages/apps.d.ts.map +1 -1
- package/dist/routes/pages/apps.js +3 -43
- package/dist/routes/pages/apps.js.map +1 -1
- package/dist/routes/pages/browser-chat.js +1 -1
- package/dist/routes/pages/browser-chat.js.map +1 -1
- package/dist/routes/pages/chat.d.ts.map +1 -1
- package/dist/routes/pages/chat.js +24 -43
- package/dist/routes/pages/chat.js.map +1 -1
- package/dist/routes/pages/extensions.$id.js +1 -1
- package/dist/routes/pages/extensions.$id.js.map +1 -1
- package/dist/routes/pages/extensions._index.js +1 -1
- package/dist/routes/pages/extensions._index.js.map +1 -1
- package/dist/routes/pages/integrations.js +1 -1
- package/dist/routes/pages/integrations.js.map +1 -1
- package/dist/routes/pages/new-app.js +1 -1
- package/dist/routes/pages/new-app.js.map +1 -1
- package/dist/routes/pages/operations.js +2 -2
- package/dist/routes/pages/operations.js.map +1 -1
- package/dist/routes/pages/overview.d.ts +2 -2
- package/dist/routes/pages/settings.d.ts.map +1 -1
- package/dist/routes/pages/settings.js +26 -8
- package/dist/routes/pages/settings.js.map +1 -1
- package/dist/routes/pages/tools.$id.js +1 -1
- package/dist/routes/pages/tools.$id.js.map +1 -1
- package/dist/routes/pages/tools._index.js +1 -1
- package/dist/routes/pages/tools._index.js.map +1 -1
- package/dist/routes/pages/vault.d.ts +1 -1
- package/dist/routes/pages/vault.js +1 -1
- package/dist/routes/pages/vault.js.map +1 -1
- package/dist/shared/app-roles.js.map +1 -1
- package/package.json +4 -4
- package/src/components/app-open-actions.tsx +1 -1
- package/src/components/app-row-settings.tsx +1 -1
- package/src/components/automation-create-dialog.tsx +7 -7
- package/src/components/automation-details-panel.tsx +1 -1
- package/src/components/chat-home-apps.tsx +1 -1
- package/src/components/create-app-popover.spec.tsx +5 -7
- package/src/components/create-app-popover.tsx +3 -3
- package/src/components/dispatch-control-plane.spec.tsx +12 -19
- package/src/components/dispatch-control-plane.tsx +10 -84
- package/src/components/layout/Header.tsx +2 -2
- package/src/components/layout/Layout.app-chat.spec.ts +1 -0
- package/src/components/layout/Layout.spec.tsx +18 -20
- package/src/components/layout/Layout.tsx +153 -205
- package/src/components/layout/workspace-apps-rail.spec.tsx +79 -0
- package/src/components/layout/workspace-apps-rail.tsx +6 -30
- package/src/components/messaging-setup-panel.tsx +1 -1
- package/src/components/workspace-app-card.tsx +2 -2
- package/src/components/workspace-app-chat-rail.spec.tsx +1 -1
- package/src/components/workspace-app-host.spec.tsx +19 -19
- package/src/components/workspace-app-host.tsx +12 -129
- package/src/hooks/use-navigation-state.ts +1 -1
- package/src/lib/workspace-apps.ts +1 -1
- package/src/routes/pages/$appId.tsx +1 -1
- package/src/routes/pages/_index.tsx +1 -1
- package/src/routes/pages/admin._index.tsx +1 -1
- package/src/routes/pages/agent-integrations.tsx +1 -1
- package/src/routes/pages/apps.tsx +2 -86
- package/src/routes/pages/automations.spec.tsx +1 -1
- package/src/routes/pages/browser-chat.tsx +1 -1
- package/src/routes/pages/chat.spec.tsx +23 -46
- package/src/routes/pages/chat.tsx +20 -57
- package/src/routes/pages/extensions.$id.tsx +1 -1
- package/src/routes/pages/extensions._index.tsx +1 -1
- package/src/routes/pages/integrations.tsx +1 -1
- package/src/routes/pages/new-app.tsx +1 -1
- package/src/routes/pages/operations.tsx +2 -2
- package/src/routes/pages/settings.spec.tsx +30 -8
- package/src/routes/pages/settings.tsx +75 -7
- package/src/routes/pages/tools.$id.tsx +1 -1
- package/src/routes/pages/tools._index.tsx +1 -1
- package/src/routes/pages/vault.tsx +1 -1
- package/src/shared/app-roles.ts +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dispatch-control-plane.js","sourceRoot":"","sources":["../../src/components/dispatch-control-plane.tsx"],"names":[],"mappings":"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","sourcesContent":["import {\n chatModelSelectionStorageKey,\n navigateWithAgentChatViewTransition,\n useChatModels,\n} from \"@agent-native/core/client/agent-chat\";\nimport { PromptBar, PromptComposer } from \"@agent-native/core/client/composer\";\nimport { useActionQuery } from \"@agent-native/core/client/hooks\";\nimport { useT } from \"@agent-native/core/client/i18n\";\nimport { useOrgRole } from \"@agent-native/core/client/org\";\nimport { IconChevronDown, IconClockHour4, IconPlus } from \"@tabler/icons-react\";\nimport type { ReactNode } from \"react\";\nimport { useState } from \"react\";\nimport { Link, useNavigate } from \"react-router\";\n\nimport type { ConnectedAppSummary } from \"../lib/other-apps\";\nimport { cn } from \"../lib/utils\";\nimport {\n orderWorkspaceApps,\n useWorkspaceAppLayout,\n workspaceAppMatchesQuery,\n} from \"../lib/workspace-app-layout\";\nimport {\n isWorkspaceAppVisibleInDefaultLaunchers,\n type WorkspaceAppSummary,\n} from \"../lib/workspace-apps\";\nimport { ActionQueryError } from \"./action-query-error\";\nimport {\n APP_LIST_GRID_CLASS,\n AppList,\n APP_LIST_GRID_ROW_CLASS,\n} from \"./app-list-row\";\nimport { CreateAppPopover } from \"./create-app-popover\";\nimport { useSetPageTitle } from \"./layout/HeaderActions\";\nimport {\n filterOtherAppEntries,\n mergeOtherAppEntries,\n OtherAppsSection,\n} from \"./other-apps-section\";\nimport { Button } from \"./ui/button\";\nimport {\n Collapsible,\n CollapsibleContent,\n CollapsibleTrigger,\n} from \"./ui/collapsible\";\nimport { Skeleton } from \"./ui/skeleton\";\nimport { WorkspaceAppCard } from \"./workspace-app-card\";\nimport {\n WorkspaceAppSearch,\n WorkspaceAppSearchEmpty,\n} from \"./workspace-app-search\";\nimport type { CuratedWorkspaceTemplatesResult } from \"./workspace-template-card\";\n\nfunction SectionHeader({\n title,\n action,\n}: {\n title: string;\n action?: ReactNode;\n}) {\n return (\n <div className=\"flex min-w-0 items-center justify-between gap-3\">\n <h2 className=\"truncate text-sm font-semibold text-foreground\">\n {title}\n </h2>\n {action ? <div className=\"shrink-0\">{action}</div> : null}\n </div>\n );\n}\n\nfunction CommandPanel() {\n const t = useT();\n const { org } = useOrgRole();\n const draftScope = org?.orgId?.trim()\n ? `dispatch:overview:${org.orgId}`\n : \"dispatch:overview\";\n const {\n availableModels,\n isLoading: modelListLoading,\n onEffortChange,\n onModelChange,\n selectedEffort,\n selectedEngine,\n selectedModel,\n } = useChatModels({ storageKey: chatModelSelectionStorageKey(\"dispatch\") });\n const navigate = useNavigate();\n const promptSuggestions = [\n t(\"dispatch.pages.suggestionOnboardingApp\", {\n defaultValue: \"Create an app for onboarding requests\",\n }),\n t(\"dispatch.pages.suggestionAnalyticsAgents\", {\n defaultValue: \"Check which agents can help with analytics\",\n }),\n ];\n\n function send(message: string) {\n const trimmed = message.trim();\n if (!trimmed) return;\n\n navigateWithAgentChatViewTransition(navigate, \"/chat\", {\n state: {\n dispatchPrompt: {\n id: `${Date.now()}-${Math.random().toString(36).slice(2, 8)}`,\n message: trimmed,\n selectedModel,\n selectedEngine,\n selectedEffort,\n },\n },\n });\n }\n\n return (\n <section className=\"flex flex-col\">\n <div className=\"mx-auto flex w-full max-w-[750px] flex-col pt-4 sm:pt-6\">\n <div className=\"mb-5 text-center\">\n <h2 className=\"text-2xl font-semibold tracking-tight text-foreground sm:text-3xl\">\n {t(\"dispatch.pages.chatAcrossApps\", {\n defaultValue: \"Chat across your apps\",\n })}\n </h2>\n <p className=\"mx-auto mt-2 max-w-xl text-sm leading-6 text-muted-foreground\">\n {t(\"dispatch.pages.chatAcrossAppsDescription\", {\n defaultValue:\n \"Route work, inspect status, or create something new from one place.\",\n })}\n </p>\n </div>\n <PromptBar mode=\"inline\" className=\"contents\">\n <PromptComposer\n availableModels={availableModels}\n draftScope={draftScope}\n modelListLoading={modelListLoading}\n placeholder={t(\"dispatch.pages.overviewPromptPlaceholder\", {\n defaultValue: \"Ask Dispatch anything...\",\n })}\n selectedEffort={selectedEffort}\n selectedEngine={selectedEngine}\n selectedModel={selectedModel}\n layoutVariant=\"hero\"\n rootClassName=\"bg-card\"\n onEffortChange={onEffortChange}\n onModelChange={onModelChange}\n onSubmit={(text) => send(text)}\n />\n </PromptBar>\n <div className=\"mt-3 flex flex-wrap justify-center gap-2\">\n {promptSuggestions.map((suggestion) => (\n <button\n key={suggestion}\n type=\"button\"\n onClick={() => send(suggestion)}\n className=\"cursor-pointer rounded-md border border-transparent bg-muted/60 px-2.5 py-1.5 text-xs text-muted-foreground transition-[background-color,color] hover:bg-muted hover:text-foreground\"\n >\n {suggestion}\n </button>\n ))}\n </div>\n </div>\n </section>\n );\n}\n\nfunction AppsPanel({\n apps,\n isLoading,\n connectedApps,\n connectedAppsError,\n connectedAppsLoading,\n onRetryConnectedApps,\n curatedTemplates,\n curatedTemplatesError,\n curatedTemplatesLoading,\n onRetryCuratedTemplates,\n}: {\n apps: WorkspaceAppSummary[];\n isLoading: boolean;\n connectedApps: ConnectedAppSummary[];\n connectedAppsError?: Error | null;\n connectedAppsLoading: boolean;\n onRetryConnectedApps: () => void;\n curatedTemplates?: CuratedWorkspaceTemplatesResult;\n curatedTemplatesError?: Error | null;\n curatedTemplatesLoading: boolean;\n onRetryCuratedTemplates: () => void;\n}) {\n const t = useT();\n const [showPending, setShowPending] = useState(false);\n const [searchQuery, setSearchQuery] = useState(\"\");\n const { layout, persistenceError, togglePinned } = useWorkspaceAppLayout();\n const visibleApps = apps.filter(\n (app) => isWorkspaceAppVisibleInDefaultLaunchers(app) && !app.archived,\n );\n const activeApps = visibleApps.filter((app) => app.status !== \"pending\");\n const pendingApps = visibleApps.filter((app) => app.status === \"pending\");\n const orderedActiveApps = orderWorkspaceApps(activeApps, layout);\n const orderedPendingApps = orderWorkspaceApps(pendingApps, layout);\n const filteredActiveApps = orderedActiveApps.filter((app) =>\n workspaceAppMatchesQuery(app, searchQuery),\n );\n const filteredPendingApps = orderedPendingApps.filter((app) =>\n workspaceAppMatchesQuery(app, searchQuery),\n );\n const otherAppEntries = filterOtherAppEntries(\n mergeOtherAppEntries({\n templates: curatedTemplates,\n connectedApps,\n workspaceApps: apps,\n }),\n searchQuery,\n );\n const hasSearchResults =\n filteredActiveApps.length > 0 ||\n filteredPendingApps.length > 0 ||\n otherAppEntries.length > 0;\n const otherAppsLoading = curatedTemplatesLoading || connectedAppsLoading;\n const otherAppsError = curatedTemplatesError || connectedAppsError;\n const showSkeletons =\n isLoading && activeApps.length === 0 && pendingApps.length === 0;\n\n return (\n <section className=\"mx-auto flex w-full max-w-[1000px] flex-col gap-3\">\n <SectionHeader\n title=\"Apps\"\n action={\n <div className=\"flex min-w-0 flex-wrap items-center justify-end gap-1.5\">\n <Button variant=\"ghost\" size=\"sm\" asChild>\n <Link to=\"/apps\" className=\"text-muted-foreground\">\n View all\n </Link>\n </Button>\n {!showSkeletons &&\n (visibleApps.length > 0 ||\n otherAppEntries.length > 0 ||\n Boolean(searchQuery.trim())) ? (\n <WorkspaceAppSearch\n className=\"w-[220px]\"\n query={searchQuery}\n onQueryChange={setSearchQuery}\n />\n ) : null}\n <CreateAppPopover\n align=\"end\"\n trigger={\n <Button variant=\"default\" size=\"sm\" className=\"gap-1.5\">\n <IconPlus size={14} />\n {t(\"dispatch.pages.newApp\", { defaultValue: \"New\" })}\n </Button>\n }\n />\n </div>\n }\n />\n {!showSkeletons && visibleApps.length > 0 && persistenceError ? (\n <p className=\"text-xs text-muted-foreground\" role=\"status\">\n {persistenceError === \"both\"\n ? t(\"dispatch.pages.appPinSaveFailed\", {\n defaultValue: \"App pins could not be saved.\",\n })\n : t(\"dispatch.pages.appPinSavedLocally\", {\n defaultValue: \"App pins are saved on this device only.\",\n })}\n </p>\n ) : null}\n {showSkeletons ? (\n <OverviewAppsSkeleton />\n ) : searchQuery.trim() &&\n !hasSearchResults &&\n !otherAppsLoading &&\n !otherAppsError ? (\n <WorkspaceAppSearchEmpty\n query={searchQuery}\n onClear={() => setSearchQuery(\"\")}\n />\n ) : (\n <>\n <AppList className={APP_LIST_GRID_CLASS}>\n {filteredActiveApps.map((app) => (\n <WorkspaceAppCard\n key={app.id}\n app={app}\n className={APP_LIST_GRID_ROW_CLASS}\n isPinned={layout.pinnedIds.includes(app.id.toLowerCase())}\n onTogglePinned={() => togglePinned(app.id)}\n />\n ))}\n {filteredActiveApps.length === 0 &&\n !searchQuery.trim() &&\n otherAppEntries.length === 0 &&\n !curatedTemplatesLoading &&\n !connectedAppsLoading &&\n !curatedTemplatesError &&\n !connectedAppsError ? (\n <p className=\"px-4 py-3 text-sm text-muted-foreground\">\n {t(\"dispatch.pages.noApps\", {\n defaultValue: \"No apps yet.\",\n })}\n </p>\n ) : null}\n <OtherAppsSection\n templates={curatedTemplates}\n connectedApps={connectedApps}\n workspaceApps={apps}\n templatesLoading={curatedTemplatesLoading}\n connectedAppsLoading={connectedAppsLoading}\n templatesError={curatedTemplatesError}\n connectedAppsError={connectedAppsError}\n query={searchQuery}\n onRetryTemplates={onRetryCuratedTemplates}\n onRetryConnectedApps={onRetryConnectedApps}\n heading={null}\n embeddedInList\n />\n </AppList>\n </>\n )}\n {pendingApps.length > 0 &&\n (!searchQuery.trim() || filteredPendingApps.length > 0) ? (\n <Collapsible\n open={showPending || Boolean(searchQuery.trim())}\n onOpenChange={setShowPending}\n >\n <div className=\"space-y-3 border-t pt-3\">\n <div className=\"flex flex-wrap items-center justify-between gap-3\">\n <div className=\"flex min-w-0 items-center gap-2\">\n <IconClockHour4\n size={15}\n className=\"shrink-0 text-muted-foreground\"\n />\n <div className=\"min-w-0\">\n <h3 className=\"text-xs font-semibold text-foreground\">\n {t(\"dispatch.pages.pendingApps\")}\n </h3>\n <p className=\"text-xs text-muted-foreground\">\n {t(\"dispatch.pages.pendingAppsDescription\", {\n count: pendingApps.length,\n })}\n </p>\n </div>\n </div>\n <CollapsibleTrigger asChild>\n <Button\n type=\"button\"\n variant=\"ghost\"\n size=\"sm\"\n className=\"h-7 gap-1.5 px-2 text-xs\"\n >\n {showPending || Boolean(searchQuery.trim())\n ? t(\"dispatch.pages.hidePendingApps\")\n : t(\"dispatch.pages.showPendingApps\")}\n <IconChevronDown\n size={13}\n className={\n showPending || searchQuery.trim()\n ? \"rotate-180\"\n : undefined\n }\n />\n </Button>\n </CollapsibleTrigger>\n </div>\n <CollapsibleContent>\n <AppList className={APP_LIST_GRID_CLASS}>\n {filteredPendingApps.map((app) => (\n <WorkspaceAppCard\n key={app.id}\n app={app}\n className={APP_LIST_GRID_ROW_CLASS}\n />\n ))}\n </AppList>\n </CollapsibleContent>\n </div>\n </Collapsible>\n ) : null}\n </section>\n );\n}\n\nfunction OverviewAppsSkeleton() {\n return (\n <AppList className={APP_LIST_GRID_CLASS}>\n {Array.from({ length: 4 }).map((_, index) => (\n <div\n key={index}\n className={cn(\n \"flex min-w-0 items-center gap-3 border-b px-4 py-3.5 last:border-b-0\",\n APP_LIST_GRID_ROW_CLASS,\n )}\n >\n <Skeleton className=\"size-8 shrink-0 rounded-xl\" />\n <div className=\"min-w-0 flex-1 space-y-2\">\n <Skeleton className=\"h-4 w-32\" />\n <Skeleton className=\"h-3 w-2/3\" />\n </div>\n <Skeleton className=\"h-9 w-24 shrink-0 rounded-md\" />\n </div>\n ))}\n </AppList>\n );\n}\n\nexport function DispatchControlPlane() {\n useSetPageTitle(<span aria-hidden />);\n const appsQuery = useActionQuery<WorkspaceAppSummary[]>(\n \"list-workspace-apps\",\n { includeAgentCards: false, includeArchived: true },\n );\n const connectedAppsQuery = useActionQuery<ConnectedAppSummary[]>(\n \"list-connected-agents\",\n {},\n );\n const curatedTemplatesQuery = useActionQuery<CuratedWorkspaceTemplatesResult>(\n \"list-curated-workspace-templates\",\n {},\n );\n const { data: workspaceApps = [], isLoading: appsLoading } = appsQuery;\n\n return (\n <div className=\"flex flex-col gap-8\">\n <CommandPanel />\n {appsQuery.isError ? (\n <ActionQueryError\n error={appsQuery.error}\n onRetry={() => void appsQuery.refetch()}\n />\n ) : (\n <AppsPanel\n apps={workspaceApps ?? []}\n isLoading={appsLoading}\n connectedApps={connectedAppsQuery.data ?? []}\n connectedAppsError={connectedAppsQuery.error}\n connectedAppsLoading={connectedAppsQuery.isLoading}\n onRetryConnectedApps={() => void connectedAppsQuery.refetch()}\n curatedTemplates={curatedTemplatesQuery.data}\n curatedTemplatesError={curatedTemplatesQuery.error}\n curatedTemplatesLoading={curatedTemplatesQuery.isLoading}\n onRetryCuratedTemplates={() => void curatedTemplatesQuery.refetch()}\n />\n )}\n </div>\n );\n}\n"]}
|
|
1
|
+
{"version":3,"file":"dispatch-control-plane.js","sourceRoot":"","sources":["../../src/components/dispatch-control-plane.tsx"],"names":[],"mappings":"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","sourcesContent":["import {\n chatModelSelectionStorageKey,\n navigateWithAgentChatViewTransition,\n useChatModels,\n} from \"@agent-native/core/client/agent-chat\";\nimport { useActionQuery } from \"@agent-native/core/client/hooks\";\nimport { useT } from \"@agent-native/core/client/i18n\";\nimport { useOrgRole } from \"@agent-native/core/client/org\";\nimport {\n PromptBar,\n PromptComposer,\n} from \"@agent-native/toolkit/app/chat/composer/index\";\nimport { IconChevronDown, IconClockHour4, IconPlus } from \"@tabler/icons-react\";\nimport type { ReactNode } from \"react\";\nimport { useState } from \"react\";\nimport { Link, useNavigate } from \"react-router\";\n\nimport { cn } from \"../lib/utils\";\nimport {\n orderWorkspaceApps,\n useWorkspaceAppLayout,\n workspaceAppMatchesQuery,\n} from \"../lib/workspace-app-layout\";\nimport {\n isWorkspaceAppVisibleInDefaultLaunchers,\n type WorkspaceAppSummary,\n} from \"../lib/workspace-apps\";\nimport { ActionQueryError } from \"./action-query-error\";\nimport {\n APP_LIST_GRID_CLASS,\n AppList,\n APP_LIST_GRID_ROW_CLASS,\n} from \"./app-list-row\";\nimport { CreateAppPopover } from \"./create-app-popover\";\nimport { useSetPageTitle } from \"./layout/HeaderActions\";\nimport { Button } from \"./ui/button\";\nimport {\n Collapsible,\n CollapsibleContent,\n CollapsibleTrigger,\n} from \"./ui/collapsible\";\nimport { Skeleton } from \"./ui/skeleton\";\nimport { WorkspaceAppCard } from \"./workspace-app-card\";\nimport {\n WorkspaceAppSearch,\n WorkspaceAppSearchEmpty,\n} from \"./workspace-app-search\";\n\nfunction SectionHeader({\n title,\n action,\n}: {\n title: string;\n action?: ReactNode;\n}) {\n return (\n <div className=\"flex min-w-0 items-center justify-between gap-3\">\n <h2 className=\"truncate text-sm font-semibold text-foreground\">\n {title}\n </h2>\n {action ? <div className=\"shrink-0\">{action}</div> : null}\n </div>\n );\n}\n\nfunction CommandPanel() {\n const t = useT();\n const { org } = useOrgRole();\n const draftScope = org?.orgId?.trim()\n ? `dispatch:overview:${org.orgId}`\n : \"dispatch:overview\";\n const {\n availableModels,\n isLoading: modelListLoading,\n onEffortChange,\n onModelChange,\n selectedEffort,\n selectedEngine,\n selectedModel,\n } = useChatModels({ storageKey: chatModelSelectionStorageKey(\"dispatch\") });\n const navigate = useNavigate();\n const promptSuggestions = [\n t(\"dispatch.pages.suggestionOnboardingApp\", {\n defaultValue: \"Create an app for onboarding requests\",\n }),\n t(\"dispatch.pages.suggestionAnalyticsAgents\", {\n defaultValue: \"Check which agents can help with analytics\",\n }),\n ];\n\n function send(message: string) {\n const trimmed = message.trim();\n if (!trimmed) return;\n\n navigateWithAgentChatViewTransition(navigate, \"/chat\", {\n state: {\n dispatchPrompt: {\n id: `${Date.now()}-${Math.random().toString(36).slice(2, 8)}`,\n message: trimmed,\n selectedModel,\n selectedEngine,\n selectedEffort,\n },\n },\n });\n }\n\n return (\n <section className=\"flex flex-col\">\n <div className=\"mx-auto flex w-full max-w-[750px] flex-col pt-4 sm:pt-6\">\n <div className=\"mb-5 text-center\">\n <h2 className=\"text-2xl font-semibold tracking-tight text-foreground sm:text-3xl\">\n {t(\"dispatch.pages.chatAcrossApps\", {\n defaultValue: \"Chat across your apps\",\n })}\n </h2>\n <p className=\"mx-auto mt-2 max-w-xl text-sm leading-6 text-muted-foreground\">\n {t(\"dispatch.pages.chatAcrossAppsDescription\", {\n defaultValue:\n \"Route work, inspect status, or create something new from one place.\",\n })}\n </p>\n </div>\n <PromptBar mode=\"inline\" className=\"contents\">\n <PromptComposer\n availableModels={availableModels}\n draftScope={draftScope}\n modelListLoading={modelListLoading}\n placeholder={t(\"dispatch.pages.overviewPromptPlaceholder\", {\n defaultValue: \"Ask Dispatch anything...\",\n })}\n selectedEffort={selectedEffort}\n selectedEngine={selectedEngine}\n selectedModel={selectedModel}\n layoutVariant=\"hero\"\n rootClassName=\"bg-card\"\n onEffortChange={onEffortChange}\n onModelChange={onModelChange}\n onSubmit={(text) => send(text)}\n />\n </PromptBar>\n <div className=\"mt-3 flex flex-wrap justify-center gap-2\">\n {promptSuggestions.map((suggestion) => (\n <button\n key={suggestion}\n type=\"button\"\n onClick={() => send(suggestion)}\n className=\"cursor-pointer rounded-md border border-transparent bg-muted/60 px-2.5 py-1.5 text-xs text-muted-foreground transition-[background-color,color] hover:bg-muted hover:text-foreground\"\n >\n {suggestion}\n </button>\n ))}\n </div>\n </div>\n </section>\n );\n}\n\nfunction AppsPanel({\n apps,\n isLoading,\n}: {\n apps: WorkspaceAppSummary[];\n isLoading: boolean;\n}) {\n const t = useT();\n const [showPending, setShowPending] = useState(false);\n const [searchQuery, setSearchQuery] = useState(\"\");\n const { layout, persistenceError, togglePinned } = useWorkspaceAppLayout();\n const visibleApps = apps.filter(\n (app) => isWorkspaceAppVisibleInDefaultLaunchers(app) && !app.archived,\n );\n const activeApps = visibleApps.filter((app) => app.status !== \"pending\");\n const pendingApps = visibleApps.filter((app) => app.status === \"pending\");\n const orderedActiveApps = orderWorkspaceApps(activeApps, layout);\n const orderedPendingApps = orderWorkspaceApps(pendingApps, layout);\n const filteredActiveApps = orderedActiveApps.filter((app) =>\n workspaceAppMatchesQuery(app, searchQuery),\n );\n const filteredPendingApps = orderedPendingApps.filter((app) =>\n workspaceAppMatchesQuery(app, searchQuery),\n );\n const hasSearchResults =\n filteredActiveApps.length > 0 || filteredPendingApps.length > 0;\n const showSkeletons =\n isLoading && activeApps.length === 0 && pendingApps.length === 0;\n\n return (\n <section className=\"mx-auto flex w-full max-w-[1000px] flex-col gap-3\">\n <SectionHeader\n title=\"Apps\"\n action={\n <div className=\"flex min-w-0 flex-wrap items-center justify-end gap-1.5\">\n <Button variant=\"ghost\" size=\"sm\" asChild>\n <Link to=\"/apps\" className=\"text-muted-foreground\">\n View all\n </Link>\n </Button>\n {!showSkeletons &&\n (visibleApps.length > 0 || Boolean(searchQuery.trim())) ? (\n <WorkspaceAppSearch\n className=\"w-[220px]\"\n query={searchQuery}\n onQueryChange={setSearchQuery}\n />\n ) : null}\n <CreateAppPopover\n align=\"end\"\n trigger={\n <Button variant=\"default\" size=\"sm\" className=\"gap-1.5\">\n <IconPlus size={14} />\n {t(\"dispatch.pages.newApp\", { defaultValue: \"New\" })}\n </Button>\n }\n />\n </div>\n }\n />\n {!showSkeletons && visibleApps.length > 0 && persistenceError ? (\n <p className=\"text-xs text-muted-foreground\" role=\"status\">\n {persistenceError === \"both\"\n ? t(\"dispatch.pages.appPinSaveFailed\", {\n defaultValue: \"App pins could not be saved.\",\n })\n : t(\"dispatch.pages.appPinSavedLocally\", {\n defaultValue: \"App pins are saved on this device only.\",\n })}\n </p>\n ) : null}\n {showSkeletons ? (\n <OverviewAppsSkeleton />\n ) : searchQuery.trim() && !hasSearchResults ? (\n <WorkspaceAppSearchEmpty\n query={searchQuery}\n onClear={() => setSearchQuery(\"\")}\n />\n ) : (\n <>\n <AppList className={APP_LIST_GRID_CLASS}>\n {filteredActiveApps.map((app) => (\n <WorkspaceAppCard\n key={app.id}\n app={app}\n className={APP_LIST_GRID_ROW_CLASS}\n isPinned={layout.pinnedIds.includes(app.id.toLowerCase())}\n onTogglePinned={() => togglePinned(app.id)}\n />\n ))}\n {filteredActiveApps.length === 0 &&\n pendingApps.length === 0 &&\n !searchQuery.trim() ? (\n <p className=\"px-4 py-3 text-sm text-muted-foreground\">\n {t(\"dispatch.pages.noApps\", {\n defaultValue: \"No apps yet.\",\n })}\n </p>\n ) : null}\n </AppList>\n </>\n )}\n {pendingApps.length > 0 &&\n (!searchQuery.trim() || filteredPendingApps.length > 0) ? (\n <Collapsible\n open={showPending || Boolean(searchQuery.trim())}\n onOpenChange={setShowPending}\n >\n <div className=\"space-y-3 border-t pt-3\">\n <div className=\"flex flex-wrap items-center justify-between gap-3\">\n <div className=\"flex min-w-0 items-center gap-2\">\n <IconClockHour4\n size={15}\n className=\"shrink-0 text-muted-foreground\"\n />\n <div className=\"min-w-0\">\n <h3 className=\"text-xs font-semibold text-foreground\">\n {t(\"dispatch.pages.pendingApps\")}\n </h3>\n <p className=\"text-xs text-muted-foreground\">\n {t(\"dispatch.pages.pendingAppsDescription\", {\n count: pendingApps.length,\n })}\n </p>\n </div>\n </div>\n <CollapsibleTrigger asChild>\n <Button\n type=\"button\"\n variant=\"ghost\"\n size=\"sm\"\n className=\"h-7 gap-1.5 px-2 text-xs\"\n >\n {showPending || Boolean(searchQuery.trim())\n ? t(\"dispatch.pages.hidePendingApps\")\n : t(\"dispatch.pages.showPendingApps\")}\n <IconChevronDown\n size={13}\n className={\n showPending || searchQuery.trim()\n ? \"rotate-180\"\n : undefined\n }\n />\n </Button>\n </CollapsibleTrigger>\n </div>\n <CollapsibleContent>\n <AppList className={APP_LIST_GRID_CLASS}>\n {filteredPendingApps.map((app) => (\n <WorkspaceAppCard\n key={app.id}\n app={app}\n className={APP_LIST_GRID_ROW_CLASS}\n />\n ))}\n </AppList>\n </CollapsibleContent>\n </div>\n </Collapsible>\n ) : null}\n </section>\n );\n}\n\nfunction OverviewAppsSkeleton() {\n return (\n <AppList className={APP_LIST_GRID_CLASS}>\n {Array.from({ length: 4 }).map((_, index) => (\n <div\n key={index}\n className={cn(\n \"flex min-w-0 items-center gap-3 border-b px-4 py-3.5 last:border-b-0\",\n APP_LIST_GRID_ROW_CLASS,\n )}\n >\n <Skeleton className=\"size-8 shrink-0 rounded-xl\" />\n <div className=\"min-w-0 flex-1 space-y-2\">\n <Skeleton className=\"h-4 w-32\" />\n <Skeleton className=\"h-3 w-2/3\" />\n </div>\n <Skeleton className=\"h-9 w-24 shrink-0 rounded-md\" />\n </div>\n ))}\n </AppList>\n );\n}\n\nexport function DispatchControlPlane() {\n useSetPageTitle(<span aria-hidden />);\n const appsQuery = useActionQuery<WorkspaceAppSummary[]>(\n \"list-workspace-apps\",\n { includeAgentCards: false, includeArchived: true },\n );\n const { data: workspaceApps = [], isLoading: appsLoading } = appsQuery;\n\n return (\n <div className=\"flex flex-col gap-8\">\n <CommandPanel />\n {appsQuery.isError ? (\n <ActionQueryError\n error={appsQuery.error}\n onRetry={() => void appsQuery.refetch()}\n />\n ) : (\n <AppsPanel apps={workspaceApps ?? []} isLoading={appsLoading} />\n )}\n </div>\n );\n}\n"]}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
-
import { AgentToggleButton } from "@agent-native/
|
|
3
|
-
import { RunsTray } from "@agent-native/
|
|
2
|
+
import { AgentToggleButton } from "@agent-native/toolkit/app/chat";
|
|
3
|
+
import { RunsTray } from "@agent-native/toolkit/app/progress";
|
|
4
4
|
import { IconLayoutSidebar } from "@tabler/icons-react";
|
|
5
5
|
import { useLocation, useNavigate } from "react-router";
|
|
6
6
|
import { Button } from "../ui/button.js";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Header.js","sourceRoot":"","sources":["../../../src/components/layout/Header.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"Header.js","sourceRoot":"","sources":["../../../src/components/layout/Header.tsx"],"names":[],"mappings":"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","sourcesContent":["import { AgentToggleButton } from \"@agent-native/toolkit/app/chat\";\nimport { RunsTray } from \"@agent-native/toolkit/app/progress\";\nimport { IconLayoutSidebar } from \"@tabler/icons-react\";\nimport { useLocation, useNavigate } from \"react-router\";\n\nimport { Button } from \"../ui/button\";\nimport { useHeaderTitle, useHeaderActions } from \"./HeaderActions\";\n\nconst pageTitles: Record<string, string> = {\n \"/\": \"Overview\",\n \"/overview\": \"Overview\",\n \"/vault\": \"Vault\",\n \"/integrations\": \"Integrations\",\n \"/workspace\": \"Resources\",\n \"/messaging\": \"Messaging\",\n \"/agents\": \"Agents\",\n \"/destinations\": \"Destinations\",\n \"/identities\": \"Identities\",\n \"/approvals\": \"Approvals\",\n \"/automations\": \"Automations\",\n \"/audit\": \"Audit\",\n \"/dreams\": \"Dreams\",\n \"/thread-debug\": \"Thread Debug\",\n \"/transactional-email\": \"Transactional email\",\n \"/settings\": \"Settings\",\n};\n\nfunction resolveTitle(pathname: string): string {\n if (pathname === \"/admin\" || pathname === \"/admin/\") return \"Admin\";\n if (pathname.startsWith(\"/admin/\")) {\n const adminPath = pathname.slice(\"/admin\".length);\n return pageTitles[adminPath] ?? \"Admin\";\n }\n if (pageTitles[pathname]) return pageTitles[pathname];\n\n if (pathname.startsWith(\"/extensions\")) return \"Extensions\";\n\n return \"Dispatch\";\n}\n\nexport function Header({\n onOpenMobile,\n showAgentToggle = true,\n}: {\n onOpenMobile?: () => void;\n showAgentToggle?: boolean;\n}) {\n const location = useLocation();\n const navigate = useNavigate();\n const title = useHeaderTitle();\n const actions = useHeaderActions();\n\n function openRunThread(threadId: string) {\n void navigate(\"/chat\", {\n state: {\n dispatchThread: {\n id: `${Date.now()}-${threadId}`,\n threadId,\n },\n },\n });\n window.requestAnimationFrame(() => {\n window.dispatchEvent(\n new CustomEvent(\"agent-chat:open-thread\", {\n detail: { threadId },\n }),\n );\n });\n }\n\n return (\n <header className=\"flex h-12 shrink-0 items-center gap-3 border-b border-border bg-background px-4 lg:px-6\">\n {onOpenMobile ? (\n <Button\n variant=\"ghost\"\n size=\"icon-sm\"\n className=\"lg:hidden cursor-pointer\"\n onClick={onOpenMobile}\n aria-label=\"Open navigation\"\n >\n <IconLayoutSidebar />\n </Button>\n ) : null}\n <div className=\"flex items-center gap-3 flex-1 min-w-0\">\n {title ?? (\n <h1 className=\"text-lg font-semibold tracking-tight truncate\">\n {resolveTitle(location.pathname)}\n </h1>\n )}\n </div>\n <div className=\"flex items-center gap-2 shrink-0\">\n {actions}\n <RunsTray limit={8} onOpenThread={openRunThread} />\n {showAgentToggle ? (\n <AgentToggleButton className=\"h-8 w-8 rounded-md hover:bg-accent\" />\n ) : null}\n </div>\n </header>\n );\n}\n"]}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { type ChatFirstAppRegistration, type ChatFirstAppLayoutPreference } from "@agent-native/core/client/agent-chat";
|
|
2
|
-
import { type
|
|
2
|
+
import { type FeatureFlagState } from "@agent-native/core/client/feature-flags";
|
|
3
|
+
import { type ChatFirstAppItem, type ChatFirstCopy, type ChatFirstPrimaryTab } from "@agent-native/toolkit/app/chat/chat-first";
|
|
3
4
|
import { type ComponentType, type ReactNode } from "react";
|
|
4
5
|
import { type WorkspaceAppSummary } from "../../lib/workspace-apps.js";
|
|
5
6
|
export { buildChatFirstEmbedSessionInput } from "../workspace-app-host.js";
|
|
@@ -52,7 +53,6 @@ export interface DispatchLayoutProps extends DispatchSidebarBrandProps {
|
|
|
52
53
|
}
|
|
53
54
|
export declare const CHAT_FIRST_SURFACE_PANEL_TOGGLE_CLASS_NAME = "absolute right-3 top-2 z-20";
|
|
54
55
|
interface DispatchWorkspaceAppLauncher {
|
|
55
|
-
apps: readonly ChatFirstAppItem[];
|
|
56
56
|
workspaceApps: readonly WorkspaceAppSummary[];
|
|
57
57
|
isLoading: boolean;
|
|
58
58
|
error?: unknown;
|
|
@@ -65,10 +65,11 @@ export declare function isElectronEmbeddedSearch(search: string): boolean;
|
|
|
65
65
|
export declare function shouldAutoCollapseDispatchSidebar(pathname: string): boolean;
|
|
66
66
|
export declare function shouldQueryChatFirstApps(isChatRoute: boolean, chatFirstMode: boolean): boolean;
|
|
67
67
|
/**
|
|
68
|
-
* Settings brings its own navigation, header, and agent
|
|
69
|
-
* full width.
|
|
68
|
+
* The redesigned Settings brings its own navigation, header, and agent
|
|
69
|
+
* toggle, so it renders full width. While the flag loads it shows the
|
|
70
|
+
* shell's skeleton, which needs the same frame.
|
|
70
71
|
*/
|
|
71
|
-
export declare function
|
|
72
|
+
export declare function isRedesignedSettingsPath(pathname: string, settingsRedesign: FeatureFlagState): boolean;
|
|
72
73
|
export declare function dispatchNavLinkTarget(path: string): string;
|
|
73
74
|
export declare function formatThreadAge(updatedAt: number, now?: number): string;
|
|
74
75
|
export declare function NavContent({ onNavigate, extensions, brandName, brandIcon, chatFirstMode, chatFirstEmbedded, collapsed, collapsible, onCollapsedChange, chatFirstAppLayout, onChatFirstAppLayoutChange, chatFirstApps, chatFirstAppsLoading, chatFirstAppsError, chatFirstActiveAppId, chatFirstActivePrimaryTab, onChatFirstNewChat, onChatFirstAppOpen, onChatFirstAppsRetry, }: DispatchNavContentProps): import("node_modules/@types/react").JSX.Element;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Layout.d.ts","sourceRoot":"","sources":["../../../src/components/layout/Layout.tsx"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"Layout.d.ts","sourceRoot":"","sources":["../../../src/components/layout/Layout.tsx"],"names":[],"mappings":"AAAA,OAAO,EAiBL,KAAK,wBAAwB,EAC7B,KAAK,4BAA4B,EAYlC,MAAM,sCAAsC,CAAC;AAM9C,OAAO,EAEL,KAAK,gBAAgB,EACtB,MAAM,yCAAyC,CAAC;AAWjD,OAAO,EAaL,KAAK,gBAAgB,EACrB,KAAK,aAAa,EAElB,KAAK,mBAAmB,EACzB,MAAM,2CAA2C,CAAC;AAiCnD,OAAO,EAQL,KAAK,aAAa,EAClB,KAAK,SAAS,EACf,MAAM,OAAO,CAAC;AAOf,OAAO,EAYL,KAAK,mBAAmB,EACzB,MAAM,0BAA0B,CAAC;AAoBlC,OAAO,EAAE,+BAA+B,EAAE,MAAM,uBAAuB,CAAC;AAExE,MAAM,MAAM,kBAAkB,GAAG,SAAS,GAAG,YAAY,CAAC;AAE1D,MAAM,MAAM,eAAe,GAAG,aAAa,CAAC;IAC1C,IAAI,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACvB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,CAAC,CAAC;AAEH,MAAM,WAAW,eAAe;IAC9B,EAAE,EAAE,MAAM,CAAC;IACX,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,eAAe,CAAC;IACvB,OAAO,CAAC,EAAE,kBAAkB,CAAC;IAC7B,KAAK,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,OAAO,CAAC;IACtC,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,uBAAuB;IACtC,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,QAAQ,CAAC,EAAE,SAAS,eAAe,EAAE,CAAC;IACtC,SAAS,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;CAC/B;AAmDD,MAAM,WAAW,yBAAyB;IACxC,SAAS,CAAC,EAAE,SAAS,CAAC;IACtB,SAAS,CAAC,EAAE,SAAS,CAAC;CACvB;AAED,MAAM,WAAW,uBAAwB,SAAQ,yBAAyB;IACxE,UAAU,CAAC,EAAE,MAAM,IAAI,CAAC;IACxB,UAAU,CAAC,EAAE,uBAAuB,CAAC;IACrC,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,iBAAiB,CAAC,EAAE,CAAC,SAAS,EAAE,OAAO,KAAK,IAAI,CAAC;IACjD,kBAAkB,CAAC,EAAE,4BAA4B,CAAC;IAClD,0BAA0B,CAAC,EAAE,CAAC,MAAM,EAAE,4BAA4B,KAAK,IAAI,CAAC;IAC5E,aAAa,CAAC,EAAE,SAAS,gBAAgB,EAAE,CAAC;IAC5C,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAC/B,kBAAkB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACnC,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,yBAAyB,CAAC,EAAE,mBAAmB,CAAC;IAChD,kBAAkB,CAAC,EAAE,MAAM,IAAI,CAAC;IAChC,kBAAkB,CAAC,EAAE,CAAC,GAAG,EAAE,gBAAgB,KAAK,IAAI,CAAC;IACrD,oBAAoB,CAAC,EAAE,MAAM,IAAI,CAAC;CACnC;AAED,MAAM,WAAW,mBAAoB,SAAQ,yBAAyB;IACpE,QAAQ,EAAE,SAAS,CAAC;IACpB,UAAU,CAAC,EAAE,uBAAuB,CAAC;IACrC,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAKD,eAAO,MAAM,0CAA0C,gCACxB,CAAC;AAwBhC,UAAU,4BAA4B;IACpC,aAAa,EAAE,SAAS,mBAAmB,EAAE,CAAC;IAC9C,SAAS,EAAE,OAAO,CAAC;IACnB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,OAAO,EAAE,CAAC,GAAG,EAAE,gBAAgB,KAAK,IAAI,CAAC;IACzC,KAAK,EAAE,MAAM,IAAI,CAAC;CACnB;AAKD,wBAAgB,qBAAqB,IAAI,uBAAuB,GAAG,SAAS,CAE3E;AAED,wBAAgB,+BAA+B,wCAE9C;AA0CD,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAEhE;AAED,wBAAgB,iCAAiC,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAE3E;AAED,wBAAgB,wBAAwB,CACtC,WAAW,EAAE,OAAO,EACpB,aAAa,EAAE,OAAO,GACrB,OAAO,CAET;AAED;;;;GAIG;AACH,wBAAgB,wBAAwB,CACtC,QAAQ,EAAE,MAAM,EAChB,gBAAgB,EAAE,gBAAgB,GACjC,OAAO,CAKT;AA2BD,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAQ1D;AA4KD,wBAAgB,eAAe,CAAC,SAAS,EAAE,MAAM,EAAE,GAAG,SAAa,UAWlE;AAwaD,wBAAgB,UAAU,CAAC,EACzB,UAAU,EACV,UAAU,EACV,SAAkC,EAClC,SAAS,EACT,aAAqB,EACrB,iBAAyB,EACzB,SAAiB,EACjB,WAAmB,EACnB,iBAAiB,EACjB,kBAAkB,EAClB,0BAA0B,EAC1B,aAAkB,EAClB,oBAA4B,EAC5B,kBAAkB,EAClB,oBAAoB,EACpB,yBAAyB,EACzB,kBAAkB,EAClB,kBAAkB,EAClB,oBAAoB,GACrB,EAAE,uBAAuB,mDAsRzB;AAED,wBAAgB,4BAA4B,CAAC,EAC3C,YAAY,EACZ,SAAS,EACT,OAAO,EACP,eAAe,EACf,IAAI,GACL,EAAE;IACD,YAAY,EAAE,wBAAwB,GAAG,IAAI,CAAC;IAC9C,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,OAAO,CAAC;IACjB,eAAe,EAAE,OAAO,CAAC;IACzB,IAAI,EAAE,aAAa,CAAC;CACrB,GAAG,SAAS,CAuCZ;AAED,wBAAgB,MAAM,CAAC,EACrB,QAAQ,EACR,UAAU,EACV,aAAa,EACb,SAAS,EACT,SAAS,GACV,EAAE,mBAAmB,mDAguCrB"}
|
|
@@ -1,17 +1,21 @@
|
|
|
1
1
|
import { Fragment as _Fragment, jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
-
import { CHAT_FIRST_MODE_CHANGED_EVENT,
|
|
2
|
+
import { CHAT_FIRST_MODE_CHANGED_EVENT, chatFirstSurfaceTabId, closeChatFirstSessionWatch, emitChatFirstSessionWatch, getChatFirstSurfaceTabsStore, navigateWithAgentChatViewTransition, readChatFirstAppLayout, readChatFirstMode, resolveChatFirstBrowserTarget, resolveChatFirstAppTarget, subscribeChatFirstOpenBrowser, subscribeChatFirstOpenApp, useChatFirstSessionWatch, useChatFirstSurfacePanel, useChatFirstSurfaceResize, useChatFirstSurfaceTabs, useAgentChatHomeHandoff, useAgentChatHomeHandoffLinks, useChatThreads, } from "@agent-native/core/client/agent-chat";
|
|
3
3
|
import { appBasePath, appPath } from "@agent-native/core/client/api-path";
|
|
4
4
|
import { readClientAppState, writeClientAppState, } from "@agent-native/core/client/application-state";
|
|
5
|
-
import {
|
|
6
|
-
import { writeClipboardText } from "@agent-native/core/client/clipboard";
|
|
5
|
+
import { useFeatureFlagState, } from "@agent-native/core/client/feature-flags";
|
|
7
6
|
import { useActionQuery } from "@agent-native/core/client/hooks";
|
|
8
7
|
import { useT } from "@agent-native/core/client/i18n";
|
|
9
|
-
import {
|
|
10
|
-
import {
|
|
11
|
-
import {
|
|
12
|
-
import {
|
|
13
|
-
import {
|
|
8
|
+
import { SETTINGS_REDESIGN_FLAG } from "@agent-native/core/feature-flags/registry";
|
|
9
|
+
import { AgentChatSurface, AgentToggleButton, AgentSidebar, focusAgentChat, } from "@agent-native/toolkit/app/chat";
|
|
10
|
+
import { ChatFirstSurfacePanelToggle } from "@agent-native/toolkit/app/chat/chat-first";
|
|
11
|
+
import { ChatFirstAgentsPane, ChatFirstAppPane, ChatFirstAppsRail, ChatFirstBrowserPane, ChatFirstChatHistory, ChatFirstPrimaryNavigation, ChatFirstSessionWatchPane, ChatFirstSurfacePanel, ChatFirstSurfaceContent, ChatFirstSurfaceTabs, defaultChatFirstCopy, } from "@agent-native/toolkit/app/chat/chat-first";
|
|
12
|
+
import { FeedbackButton } from "@agent-native/toolkit/app/feedback";
|
|
13
|
+
import { InvitationBanner, OrgSwitcher } from "@agent-native/toolkit/app/org";
|
|
14
|
+
import { RunsTray } from "@agent-native/toolkit/app/progress";
|
|
15
|
+
import { isSettingsPathname } from "@agent-native/toolkit/app/settings";
|
|
16
|
+
import { AppSidebarFooter, AppSidebarHeader, openCommandMenu, } from "@agent-native/toolkit/app/shared";
|
|
14
17
|
import { ChatHistoryRail, } from "@agent-native/toolkit/chat-history";
|
|
18
|
+
import { writeClipboardText } from "@agent-native/toolkit/clipboard";
|
|
15
19
|
import { IconApps, IconBrandSlack, IconBrandTelegram, IconCopy, IconEye, IconHierarchy2, IconMessageQuestion, IconBroadcast, IconLayoutSidebar, IconLayoutSidebarLeftCollapse, IconLayoutSidebarLeftExpand, IconSettings, IconShield, IconWorld, IconDeviceDesktop, IconPlus, } from "@tabler/icons-react";
|
|
16
20
|
import { createContext, useEffect, useMemo, useRef, useState, useContext, useCallback, } from "react";
|
|
17
21
|
import { Link, useLocation, useNavigate } from "react-router";
|
|
@@ -19,7 +23,7 @@ import { toast } from "sonner";
|
|
|
19
23
|
import { useIsMobile } from "../../hooks/use-mobile.js";
|
|
20
24
|
import { cn } from "../../lib/utils.js";
|
|
21
25
|
import { normalizeWorkspaceAppLayout } from "../../lib/workspace-app-layout.js";
|
|
22
|
-
import { isDispatchWorkspaceAppId, isPathMountedWorkspaceApp, isWorkspaceAppVisibleInDefaultLaunchers, isWorkspaceSsoApp,
|
|
26
|
+
import { isDispatchWorkspaceAppId, isPathMountedWorkspaceApp, isWorkspaceAppVisibleInDefaultLaunchers, isWorkspaceSsoApp, navigateToWorkspaceApp, shouldOpenWorkspaceAppInTopWindow, workspaceAppIdFromRoute, workspaceAppDirectHref, workspaceAppDirectLaunchHref, workspaceAppRoute, workspaceAppTargetPath, } from "../../lib/workspace-apps.js";
|
|
23
27
|
import { CHAT_FIRST_PANE_STATE_KEY } from "../../shared/chat-first-pane.js";
|
|
24
28
|
import { AppIcon } from "../app-icon.js";
|
|
25
29
|
import { CreateAppPopover } from "../create-app-popover.js";
|
|
@@ -137,11 +141,13 @@ export function shouldQueryChatFirstApps(isChatRoute, chatFirstMode) {
|
|
|
137
141
|
return isChatRoute || chatFirstMode;
|
|
138
142
|
}
|
|
139
143
|
/**
|
|
140
|
-
* Settings brings its own navigation, header, and agent
|
|
141
|
-
* full width.
|
|
144
|
+
* The redesigned Settings brings its own navigation, header, and agent
|
|
145
|
+
* toggle, so it renders full width. While the flag loads it shows the
|
|
146
|
+
* shell's skeleton, which needs the same frame.
|
|
142
147
|
*/
|
|
143
|
-
export function
|
|
144
|
-
return isSettingsPathname(localDispatchPath(pathname))
|
|
148
|
+
export function isRedesignedSettingsPath(pathname, settingsRedesign) {
|
|
149
|
+
return (isSettingsPathname(localDispatchPath(pathname)) &&
|
|
150
|
+
(settingsRedesign.enabled || settingsRedesign.status === "loading"));
|
|
145
151
|
}
|
|
146
152
|
function chatFirstPrimaryTabForPath(pathname) {
|
|
147
153
|
if (pathname === "/chat" || pathname.startsWith("/chat/")) {
|
|
@@ -657,7 +663,7 @@ export function Layout({ children, extensions, agentPageHref, brandName, brandIc
|
|
|
657
663
|
? isElectronEmbeddedSearch(window.location.search)
|
|
658
664
|
: false);
|
|
659
665
|
const isChatRoute = localPathname === "/chat" || localPathname.startsWith("/chat/");
|
|
660
|
-
const
|
|
666
|
+
const isRedesignedSettingsRoute = isRedesignedSettingsPath(location.pathname, useFeatureFlagState(SETTINGS_REDESIGN_FLAG.key));
|
|
661
667
|
const chatFirstSurfaceScope = threadIdFromPath(localPathname) ?? "new";
|
|
662
668
|
const isWorkspaceAppRoute = shouldAutoCollapseDispatchSidebar(location.pathname);
|
|
663
669
|
const workspaceAppId = isWorkspaceAppRoute
|
|
@@ -683,61 +689,31 @@ export function Layout({ children, extensions, agentPageHref, brandName, brandIc
|
|
|
683
689
|
}, [electronEmbedded, location.pathname, location.search]);
|
|
684
690
|
const [chatFirstAppLayout, setChatFirstAppLayout] = useState(() => normalizeWorkspaceAppLayout(readChatFirstAppLayout()));
|
|
685
691
|
const chatFirstAppLayoutHydratedRef = useRef(false);
|
|
686
|
-
const chatFirstAppsQuery = useActionQuery("list-workspace-apps", { includeAgentCards: false, includeArchived: true }, {
|
|
687
|
-
|
|
688
|
-
|
|
689
|
-
|
|
690
|
-
const
|
|
691
|
-
?.filter((app) => app.source === "builtin")
|
|
692
|
-
.map((app) => app.id), [chatFirstConnectedAppsQuery.data]);
|
|
693
|
-
const chatFirstWorkspaceApps = useMemo(() => mergeChatFirstWorkspaceApps(chatFirstAppsQuery.data, chatFirstEnabledBuiltinAppIds), [chatFirstAppsQuery.data, chatFirstEnabledBuiltinAppIds]);
|
|
694
|
-
const chatHomeWorkspaceApps = useMemo(() => mergeChatFirstWorkspaceApps(chatFirstWorkspaceApps, chatFirstEnabledBuiltinAppIds, chatFirstConnectedAppsQuery.data?.map((app) => ({
|
|
695
|
-
id: app.id,
|
|
696
|
-
name: app.name,
|
|
697
|
-
description: app.description,
|
|
698
|
-
url: app.homeUrl?.trim() || app.url,
|
|
699
|
-
source: workspaceAppSourceFromConnected(app.source),
|
|
700
|
-
}))).filter((app) => app.status !== "pending" &&
|
|
692
|
+
const chatFirstAppsQuery = useActionQuery("list-workspace-apps", { includeAgentCards: false, includeArchived: true }, {
|
|
693
|
+
enabled: shouldQueryChatFirstApps(isChatRoute, chatFirstMode) ||
|
|
694
|
+
workspaceAppRouteActive,
|
|
695
|
+
});
|
|
696
|
+
const chatFirstWorkspaceApps = useMemo(() => (chatFirstAppsQuery.data ?? []).filter((app) => app.status !== "pending" &&
|
|
701
697
|
app.archived !== true &&
|
|
702
|
-
isWorkspaceAppVisibleInDefaultLaunchers(app)), [
|
|
703
|
-
chatFirstConnectedAppsQuery.data,
|
|
704
|
-
chatFirstEnabledBuiltinAppIds,
|
|
705
|
-
chatFirstWorkspaceApps,
|
|
706
|
-
]);
|
|
698
|
+
isWorkspaceAppVisibleInDefaultLaunchers(app)), [chatFirstAppsQuery.data]);
|
|
707
699
|
const chatFirstAppRegistrations = useMemo(() => {
|
|
708
|
-
|
|
709
|
-
|
|
710
|
-
|
|
711
|
-
|
|
712
|
-
|
|
713
|
-
|
|
714
|
-
|
|
715
|
-
|
|
716
|
-
|
|
717
|
-
|
|
718
|
-
|
|
719
|
-
|
|
720
|
-
|
|
721
|
-
const id = app.id.trim().toLowerCase();
|
|
722
|
-
if (!id || registrations.has(id))
|
|
723
|
-
continue;
|
|
724
|
-
registrations.set(id, {
|
|
725
|
-
id,
|
|
726
|
-
name: app.name,
|
|
727
|
-
source: workspaceAppSourceFromConnected(app.source),
|
|
728
|
-
url: app.homeUrl?.trim() || app.url,
|
|
729
|
-
enabled: true,
|
|
730
|
-
});
|
|
731
|
-
}
|
|
732
|
-
return [...registrations.values()];
|
|
733
|
-
}, [chatFirstConnectedAppsQuery.data, chatFirstWorkspaceApps]);
|
|
734
|
-
const chatFirstAppItems = useMemo(() => chatFirstAppRegistrations
|
|
735
|
-
.filter((app) => app.enabled && isWorkspaceAppVisibleInDefaultLaunchers(app))
|
|
736
|
-
.map((app) => ({
|
|
700
|
+
return (chatFirstAppsQuery.data ?? [])
|
|
701
|
+
.filter((app) => app.status !== "pending" && app.archived !== true)
|
|
702
|
+
.map((app) => ({
|
|
703
|
+
id: app.id,
|
|
704
|
+
name: app.name,
|
|
705
|
+
source: app.source ?? "workspace",
|
|
706
|
+
path: app.path,
|
|
707
|
+
url: app.url,
|
|
708
|
+
homePath: app.homePath,
|
|
709
|
+
enabled: true,
|
|
710
|
+
}));
|
|
711
|
+
}, [chatFirstAppsQuery.data]);
|
|
712
|
+
const chatFirstAppItems = useMemo(() => chatFirstWorkspaceApps.map((app) => ({
|
|
737
713
|
id: app.id,
|
|
738
|
-
name: app.name
|
|
739
|
-
source: app.source,
|
|
740
|
-
})), [
|
|
714
|
+
name: app.name,
|
|
715
|
+
source: app.source ?? "workspace",
|
|
716
|
+
})), [chatFirstWorkspaceApps]);
|
|
741
717
|
const openChatFirstApp = useCallback((app) => {
|
|
742
718
|
if (isDispatchWorkspaceAppId(app.id))
|
|
743
719
|
return;
|
|
@@ -763,30 +739,17 @@ export function Layout({ children, extensions, agentPageHref, brandName, brandIc
|
|
|
763
739
|
void navigate(dispatchNavLinkTarget(workspaceAppRoute(app.id)));
|
|
764
740
|
}, [chatFirstAppRegistrations, navigate]);
|
|
765
741
|
const chatHomeAppLauncher = useMemo(() => ({
|
|
766
|
-
|
|
767
|
-
|
|
768
|
-
|
|
769
|
-
error: chatFirstAppsQuery.isError
|
|
770
|
-
? chatFirstAppsQuery.error
|
|
771
|
-
: chatFirstConnectedAppsQuery.isError
|
|
772
|
-
? chatFirstConnectedAppsQuery.error
|
|
773
|
-
: undefined,
|
|
742
|
+
workspaceApps: chatFirstWorkspaceApps,
|
|
743
|
+
isLoading: chatFirstAppsQuery.isLoading,
|
|
744
|
+
error: chatFirstAppsQuery.isError ? chatFirstAppsQuery.error : undefined,
|
|
774
745
|
openApp: openChatFirstApp,
|
|
775
|
-
retry: () =>
|
|
776
|
-
void chatFirstAppsQuery.refetch();
|
|
777
|
-
void chatFirstConnectedAppsQuery.refetch();
|
|
778
|
-
},
|
|
746
|
+
retry: () => void chatFirstAppsQuery.refetch(),
|
|
779
747
|
}), [
|
|
780
748
|
chatFirstAppsQuery.error,
|
|
781
749
|
chatFirstAppsQuery.isError,
|
|
782
750
|
chatFirstAppsQuery.isLoading,
|
|
783
751
|
chatFirstAppsQuery.refetch,
|
|
784
|
-
|
|
785
|
-
chatFirstConnectedAppsQuery.isError,
|
|
786
|
-
chatFirstConnectedAppsQuery.isLoading,
|
|
787
|
-
chatFirstConnectedAppsQuery.refetch,
|
|
788
|
-
chatFirstAppItems,
|
|
789
|
-
chatHomeWorkspaceApps,
|
|
752
|
+
chatFirstWorkspaceApps,
|
|
790
753
|
openChatFirstApp,
|
|
791
754
|
]);
|
|
792
755
|
const chatFirstCopy = useMemo(() => createDispatchChatFirstCopy(t), [t]);
|
|
@@ -929,8 +892,7 @@ export function Layout({ children, extensions, agentPageHref, brandName, brandIc
|
|
|
929
892
|
});
|
|
930
893
|
}, [chatFirstSurfaceTabsStore, persistChatFirstPane]);
|
|
931
894
|
const resolveChatFirstOpenApp = useCallback((detail) => {
|
|
932
|
-
if (chatFirstAppsQuery.isLoading
|
|
933
|
-
chatFirstConnectedAppsQuery.isLoading) {
|
|
895
|
+
if (chatFirstAppsQuery.isLoading) {
|
|
934
896
|
pendingChatFirstOpenAppRef.current = detail;
|
|
935
897
|
return;
|
|
936
898
|
}
|
|
@@ -962,7 +924,6 @@ export function Layout({ children, extensions, agentPageHref, brandName, brandIc
|
|
|
962
924
|
chatFirstAppRegistrations,
|
|
963
925
|
chatFirstAppsQuery.isError,
|
|
964
926
|
chatFirstAppsQuery.isLoading,
|
|
965
|
-
chatFirstConnectedAppsQuery.isLoading,
|
|
966
927
|
chatFirstSurfaceTabsStore,
|
|
967
928
|
openChatFirstPane,
|
|
968
929
|
navigate,
|
|
@@ -1136,17 +1097,13 @@ export function Layout({ children, extensions, agentPageHref, brandName, brandIc
|
|
|
1136
1097
|
}, [activeChatFirstSurfaceTab, chatFirstSessionWatch.target]);
|
|
1137
1098
|
useEffect(() => {
|
|
1138
1099
|
const pending = pendingChatFirstOpenAppRef.current;
|
|
1139
|
-
if (!pending ||
|
|
1140
|
-
chatFirstAppsQuery.isLoading ||
|
|
1141
|
-
chatFirstConnectedAppsQuery.isLoading)
|
|
1100
|
+
if (!pending || chatFirstAppsQuery.isLoading)
|
|
1142
1101
|
return;
|
|
1143
1102
|
resolveChatFirstOpenApp(pending);
|
|
1144
1103
|
}, [
|
|
1145
1104
|
chatFirstAppsQuery.data,
|
|
1146
1105
|
chatFirstAppsQuery.isError,
|
|
1147
1106
|
chatFirstAppsQuery.isLoading,
|
|
1148
|
-
chatFirstConnectedAppsQuery.data,
|
|
1149
|
-
chatFirstConnectedAppsQuery.isLoading,
|
|
1150
1107
|
resolveChatFirstOpenApp,
|
|
1151
1108
|
]);
|
|
1152
1109
|
useEffect(() => {
|
|
@@ -1317,16 +1274,32 @@ export function Layout({ children, extensions, agentPageHref, brandName, brandIc
|
|
|
1317
1274
|
isMobileSurface,
|
|
1318
1275
|
renderChatFirstWatchChat,
|
|
1319
1276
|
]);
|
|
1277
|
+
const chatFirstSurfaceTabsBar = activeChatFirstSurfaceTab?.kind === "app" ? null : (_jsx(ChatFirstSurfaceTabs, { tabs: chatFirstSurfaceTabs.tabs, activeTabId: chatFirstSurfaceTabs.activeTabId, onActivate: activateChatFirstSurfaceTab, onClose: closeChatFirstSurfaceTab, onCloseOthers: (tab) => {
|
|
1278
|
+
activateChatFirstSurfaceTab(tab);
|
|
1279
|
+
chatFirstSurfaceTabsStore.closeOthers(tab.id);
|
|
1280
|
+
}, onCloseToRight: (tab) => {
|
|
1281
|
+
const targetIndex = chatFirstSurfaceTabs.tabs.findIndex((candidate) => candidate.id === tab.id);
|
|
1282
|
+
const activeIndex = chatFirstSurfaceTabs.tabs.findIndex((candidate) => candidate.id === chatFirstSurfaceTabs.activeTabId);
|
|
1283
|
+
if (activeIndex > targetIndex)
|
|
1284
|
+
activateChatFirstSurfaceTab(tab);
|
|
1285
|
+
chatFirstSurfaceTabsStore.closeToRight(tab.id);
|
|
1286
|
+
}, onCloseAll: closeAllChatFirstSurfaceTabs, onOpenSurface: openChatFirstSurface, apps: chatFirstAppItems, onOpenApp: (app) => openChatFirstPane({ appId: app.id }, "side"), renderAppIcon: (app) => (_jsx(AppIcon, { id: app.id, name: app.name, size: "sm", className: "size-7 rounded-lg" })), copy: chatFirstCopy }));
|
|
1287
|
+
const chatFirstSurfaceContent = chatFirstSurfaceTabs.tabs.length > 0 ? (_jsx(ChatFirstSurfaceContent, { tabs: chatFirstSurfaceTabs.tabs, activeTabId: chatFirstSurfaceTabs.activeTabId, renderTab: renderChatFirstSurfaceTab })) : null;
|
|
1320
1288
|
if (CHROMELESS_PATHS.some((path) => localPathname === path)) {
|
|
1321
1289
|
return _jsx(_Fragment, { children: children });
|
|
1322
1290
|
}
|
|
1323
1291
|
if (electronEmbedded) {
|
|
1324
|
-
return (_jsx(DispatchExtensionsContext.Provider, { value: extensions, children: _jsx(DispatchWorkspaceAppLauncherContext.Provider, { value: chatHomeAppLauncher, children: _jsx(HeaderActionsProvider, { children: _jsx("div", { "data-dispatch-electron-control-plane": true, className: "flex h-screen w-full overflow-hidden bg-background", children: _jsxs("div", { className: "relative flex min-w-0 flex-1 flex-col overflow-hidden", children: [_jsx(Header, { showAgentToggle: false }), _jsx(InvitationBanner, {}),
|
|
1292
|
+
return (_jsx(DispatchExtensionsContext.Provider, { value: extensions, children: _jsx(DispatchWorkspaceAppLauncherContext.Provider, { value: chatHomeAppLauncher, children: _jsx(HeaderActionsProvider, { children: _jsx("div", { "data-dispatch-electron-control-plane": true, className: "flex h-screen w-full overflow-hidden bg-background", children: _jsxs("div", { className: "relative flex min-w-0 flex-1 flex-col overflow-hidden", children: [_jsx(Header, { showAgentToggle: false }), _jsx(InvitationBanner, {}), _jsxs("main", { className: "relative flex min-h-0 flex-1 overflow-hidden", children: [_jsx("div", { className: "min-w-0 flex-1 overflow-y-auto", children: _jsx("div", { className: "mx-auto max-w-7xl space-y-10 px-4 py-6 sm:px-6", children: children }) }), isChatRoute &&
|
|
1293
|
+
chatFirstMode &&
|
|
1294
|
+
chatFirstHasActiveChat &&
|
|
1295
|
+
chatFirstSurfacePanel.open ? (_jsxs(ChatFirstSurfacePanel, { width: chatFirstSurfaceResize.width, onResizePointerDown: chatFirstSurfaceResize.onPointerDown, copy: chatFirstCopy, children: [chatFirstSurfaceTabsBar, chatFirstSurfaceContent] })) : null, isChatRoute && chatFirstMode && chatFirstHasActiveChat ? (_jsx(ChatFirstSurfacePanelToggle, { open: chatFirstSurfacePanel.open, onToggle: chatFirstSurfacePanel.toggle, className: CHAT_FIRST_SURFACE_PANEL_TOGGLE_CLASS_NAME })) : null] })] }) }) }) }) }));
|
|
1325
1296
|
}
|
|
1326
1297
|
if (isWorkspaceAppHostRoute) {
|
|
1327
1298
|
return (_jsx(DispatchExtensionsContext.Provider, { value: extensions, children: _jsx(HeaderActionsProvider, { children: _jsx("div", { "data-dispatch-workspace-app-chrome-less": true, className: "h-screen w-full overflow-hidden bg-background", children: children }) }) }));
|
|
1328
1299
|
}
|
|
1329
|
-
const showAgentControls = !isChatRoute &&
|
|
1300
|
+
const showAgentControls = !isChatRoute &&
|
|
1301
|
+
!isRedesignedSettingsRoute &&
|
|
1302
|
+
!pageOwnsToolbar(localPathname);
|
|
1330
1303
|
function openAskAgentFullscreen() {
|
|
1331
1304
|
focusAgentChat();
|
|
1332
1305
|
navigateWithAgentChatViewTransition(navigate, dispatchNavLinkTarget("/chat"));
|
|
@@ -1351,30 +1324,17 @@ export function Layout({ children, extensions, agentPageHref, brandName, brandIc
|
|
|
1351
1324
|
t("dispatch.sidebar.suggestionRouteSlack"),
|
|
1352
1325
|
t("dispatch.sidebar.suggestionGrantKey"),
|
|
1353
1326
|
];
|
|
1354
|
-
const appContent = (_jsxs("div", { className: "relative flex h-full min-h-0 min-w-0 flex-1 flex-col overflow-hidden", children: [_jsx(InvitationBanner, {}), isChatRoute && chatFirstMode &&
|
|
1327
|
+
const appContent = (_jsxs("div", { className: "relative flex h-full min-h-0 min-w-0 flex-1 flex-col overflow-hidden", children: [_jsx(InvitationBanner, {}), isChatRoute && chatFirstMode && chatFirstNotice ? (_jsxs("div", { className: "dispatch-chat-first-notice", role: "status", "aria-live": "polite", children: [_jsx("span", { children: chatFirstNotice }), _jsx("button", { type: "button", onClick: () => setChatFirstNotice(null), "aria-label": "Dismiss app notice", children: "Dismiss" })] })) : null, _jsx("main", { className: cn("min-h-0 flex-1", isChatRoute || isWorkspaceAppRoute
|
|
1355
1328
|
? "overflow-hidden"
|
|
1356
1329
|
: "overflow-y-auto"), children: showAgentControls ? (_jsxs(_Fragment, { children: [_jsxs("div", { className: "pointer-events-none sticky top-0 z-10 flex justify-end px-4 pt-2 lg:px-6", children: [_jsx(Button, { variant: "ghost", size: "icon-sm", className: "pointer-events-auto absolute start-4 top-2 lg:hidden", onClick: () => setMobileOpen(true), "aria-label": "Open navigation", children: _jsx(IconLayoutSidebar, { className: "h-4 w-4" }) }), _jsxs("div", { className: "pointer-events-auto flex items-center gap-1", children: [_jsx(RunsTray, { limit: 8, onOpenThread: openRunThread }), _jsx(AgentToggleButton, { className: "h-8 w-8 rounded-md bg-background/80 hover:bg-accent" })] })] }), _jsxs("div", { className: "mx-auto max-w-7xl space-y-10 px-4 py-6 sm:px-6", children: [localPathname !== "/overview" && (pageTitle || headerActions) ? (_jsxs("div", { className: "flex min-w-0 items-center justify-between gap-3", children: [_jsx("div", { className: "min-w-0 flex-1", children: pageTitle }), headerActions ? (_jsx("div", { className: "flex shrink-0 items-center gap-2", children: headerActions })) : null] })) : null, children] })] })) : (children) })] }));
|
|
1357
|
-
const
|
|
1358
|
-
|
|
1359
|
-
|
|
1360
|
-
|
|
1361
|
-
const targetIndex = chatFirstSurfaceTabs.tabs.findIndex((candidate) => candidate.id === tab.id);
|
|
1362
|
-
const activeIndex = chatFirstSurfaceTabs.tabs.findIndex((candidate) => candidate.id === chatFirstSurfaceTabs.activeTabId);
|
|
1363
|
-
if (activeIndex > targetIndex)
|
|
1364
|
-
activateChatFirstSurfaceTab(tab);
|
|
1365
|
-
chatFirstSurfaceTabsStore.closeToRight(tab.id);
|
|
1366
|
-
}, onCloseAll: closeAllChatFirstSurfaceTabs, onOpenSurface: openChatFirstSurface, apps: chatFirstAppItems, onOpenApp: (app) => openChatFirstPane({ appId: app.id }, "side"), renderAppIcon: (app) => (_jsx(AppIcon, { id: app.id, name: app.name, size: "sm", className: "size-7 rounded-lg" })), copy: chatFirstCopy }));
|
|
1367
|
-
const chatFirstSurfaceContent = chatFirstSurfaceTabs.tabs.length > 0 ? (_jsx(ChatFirstSurfaceContent, { tabs: chatFirstSurfaceTabs.tabs, activeTabId: chatFirstSurfaceTabs.activeTabId, renderTab: renderChatFirstSurfaceTab })) : null;
|
|
1368
|
-
const workspaceAppChatName = (workspaceAppId
|
|
1369
|
-
? chatFirstAppRegistrations.find((app) => app.id.toLowerCase() === workspaceAppId.toLowerCase())?.name
|
|
1370
|
-
: null) ??
|
|
1371
|
-
workspaceAppId ??
|
|
1372
|
-
"Workspace app";
|
|
1373
|
-
const workspaceAppContent = workspaceAppRouteActive && workspaceAppId ? (_jsx(WorkspaceAppChatRail, { appId: workspaceAppId, appName: workspaceAppChatName, agentPageHref: agentPageHref, onFullscreenRequest: openAskAgentFullscreen, children: _jsx(WorkspaceAppKeepAlive, { activeAppId: workspaceAppId }) })) : (_jsx(WorkspaceAppKeepAlive, { activeAppId: workspaceAppRouteActive ? workspaceAppId : null }));
|
|
1330
|
+
const workspaceAppChatRegistration = workspaceAppId
|
|
1331
|
+
? chatFirstAppRegistrations.find((app) => app.id.toLowerCase() === workspaceAppId.toLowerCase())
|
|
1332
|
+
: undefined;
|
|
1333
|
+
const workspaceAppContent = workspaceAppRouteActive && workspaceAppId ? (workspaceAppChatRegistration ? (_jsx(WorkspaceAppChatRail, { appId: workspaceAppId, appName: workspaceAppChatRegistration.name ?? workspaceAppId, agentPageHref: agentPageHref, onFullscreenRequest: openAskAgentFullscreen, children: _jsx(WorkspaceAppKeepAlive, { activeAppId: workspaceAppId }) })) : (_jsx(WorkspaceAppKeepAlive, { activeAppId: workspaceAppId }))) : (_jsx(WorkspaceAppKeepAlive, { activeAppId: workspaceAppRouteActive ? workspaceAppId : null }));
|
|
1374
1334
|
const content = isChatRoute ? (_jsx("div", { className: cn("agent-layout-main-surface flex h-full min-w-0 flex-1 overflow-hidden", chatFirstMode && "dispatch-chat-first-surface"), children: chatFirstAppTakesMain ? (_jsx("div", { className: "flex min-w-0 flex-1 flex-col overflow-hidden", "data-dispatch-chat-first-main-app": true, children: chatFirstSurfaceContent })) : (_jsxs(_Fragment, { children: [appContent, chatFirstMode &&
|
|
1375
1335
|
chatFirstHasActiveChat &&
|
|
1376
1336
|
chatFirstSurfacePanel.open ? (_jsxs(ChatFirstSurfacePanel, { width: chatFirstSurfaceResize.width, onResizePointerDown: chatFirstSurfaceResize.onPointerDown, copy: chatFirstCopy, children: [chatFirstSurfaceTabsBar, chatFirstSurfaceContent] })) : null] })) })) : workspaceAppRouteActive ? null : isWorkspaceAppRoute ? (appContent) : (_jsx(AgentSidebar, { position: "right", defaultOpen: false, agentPageHref: agentPageHref, chatViewTransition: true, storageKey: "dispatch", openOnChatRunning: chatHomeHandoffActive, onFullscreenRequest: openAskAgentFullscreen, emptyStateText: t("dispatch.sidebar.emptyAgentText"), suggestions: sidebarSuggestions, children: appContent }));
|
|
1377
|
-
return (_jsx(DispatchExtensionsContext.Provider, { value: extensions, children: _jsx(DispatchWorkspaceAppLauncherContext.Provider, { value: chatHomeAppLauncher, children: _jsx(HeaderActionsProvider, { children: _jsxs("div", { className: "agent-layout-shell flex h-screen w-full overflow-hidden bg-background", children: [
|
|
1337
|
+
return (_jsx(DispatchExtensionsContext.Provider, { value: extensions, children: _jsx(DispatchWorkspaceAppLauncherContext.Provider, { value: chatHomeAppLauncher, children: _jsx(HeaderActionsProvider, { children: _jsxs("div", { className: "agent-layout-shell flex h-screen w-full overflow-hidden bg-background", children: [isRedesignedSettingsRoute ? null : (_jsx("aside", { "data-collapsed": sidebarCollapsed ? "true" : "false", className: cn("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", sidebarCollapsed ? "w-14" : "w-[260px]"), children: _jsx(NavContent, { extensions: extensions, brandName: brandName, brandIcon: brandIcon, chatFirstMode: chatFirstMode, chatFirstEmbedded: chatFirstEmbedded, collapsed: sidebarCollapsed, chatFirstAppLayout: chatFirstAppLayout, onChatFirstAppLayoutChange: persistChatFirstAppLayout, chatFirstApps: chatFirstAppItems, chatFirstAppsLoading: chatFirstAppsQuery.isLoading, chatFirstAppsError: chatFirstAppsQuery.isError
|
|
1378
1338
|
? chatFirstCopy("appsLoadError")
|
|
1379
1339
|
: null, chatFirstActiveAppId: chatFirstActiveAppId, chatFirstActivePrimaryTab: chatFirstActivePrimaryTab, onChatFirstNewChat: () => {
|
|
1380
1340
|
closeChatFirstSessionWatch();
|