@agent-native/dispatch 0.40.0 → 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.
Files changed (121) hide show
  1. package/CHANGELOG.md +38 -12
  2. package/dist/actions/provider-api-register.d.ts +7 -7
  3. package/dist/components/app-open-actions.d.ts +1 -1
  4. package/dist/components/app-open-actions.d.ts.map +1 -1
  5. package/dist/components/app-open-actions.js +1 -1
  6. package/dist/components/app-open-actions.js.map +1 -1
  7. package/dist/components/app-row-settings.js +1 -1
  8. package/dist/components/app-row-settings.js.map +1 -1
  9. package/dist/components/automation-create-dialog.js +2 -2
  10. package/dist/components/automation-create-dialog.js.map +1 -1
  11. package/dist/components/automation-details-panel.js +1 -1
  12. package/dist/components/automation-details-panel.js.map +1 -1
  13. package/dist/components/chat-home-apps.js +1 -1
  14. package/dist/components/chat-home-apps.js.map +1 -1
  15. package/dist/components/create-app-popover.js +3 -3
  16. package/dist/components/create-app-popover.js.map +1 -1
  17. package/dist/components/dispatch-control-plane.d.ts.map +1 -1
  18. package/dist/components/dispatch-control-plane.js +9 -30
  19. package/dist/components/dispatch-control-plane.js.map +1 -1
  20. package/dist/components/layout/Header.js +2 -2
  21. package/dist/components/layout/Header.js.map +1 -1
  22. package/dist/components/layout/Layout.d.ts +6 -5
  23. package/dist/components/layout/Layout.d.ts.map +1 -1
  24. package/dist/components/layout/Layout.js +73 -113
  25. package/dist/components/layout/Layout.js.map +1 -1
  26. package/dist/components/layout/workspace-apps-rail.d.ts.map +1 -1
  27. package/dist/components/layout/workspace-apps-rail.js +7 -19
  28. package/dist/components/layout/workspace-apps-rail.js.map +1 -1
  29. package/dist/components/messaging-setup-panel.js +2 -1
  30. package/dist/components/messaging-setup-panel.js.map +1 -1
  31. package/dist/components/workspace-app-card.js +2 -2
  32. package/dist/components/workspace-app-card.js.map +1 -1
  33. package/dist/components/workspace-app-host.d.ts +1 -1
  34. package/dist/components/workspace-app-host.d.ts.map +1 -1
  35. package/dist/components/workspace-app-host.js +7 -74
  36. package/dist/components/workspace-app-host.js.map +1 -1
  37. package/dist/hooks/use-navigation-state.js +1 -1
  38. package/dist/hooks/use-navigation-state.js.map +1 -1
  39. package/dist/lib/workspace-apps.js +1 -1
  40. package/dist/lib/workspace-apps.js.map +1 -1
  41. package/dist/routes/pages/$appId.js +1 -1
  42. package/dist/routes/pages/$appId.js.map +1 -1
  43. package/dist/routes/pages/_index.js +1 -1
  44. package/dist/routes/pages/_index.js.map +1 -1
  45. package/dist/routes/pages/admin._index.js +1 -1
  46. package/dist/routes/pages/admin._index.js.map +1 -1
  47. package/dist/routes/pages/agent-integrations.js +1 -1
  48. package/dist/routes/pages/agent-integrations.js.map +1 -1
  49. package/dist/routes/pages/apps.d.ts.map +1 -1
  50. package/dist/routes/pages/apps.js +3 -43
  51. package/dist/routes/pages/apps.js.map +1 -1
  52. package/dist/routes/pages/browser-chat.js +1 -1
  53. package/dist/routes/pages/browser-chat.js.map +1 -1
  54. package/dist/routes/pages/chat.d.ts.map +1 -1
  55. package/dist/routes/pages/chat.js +24 -43
  56. package/dist/routes/pages/chat.js.map +1 -1
  57. package/dist/routes/pages/extensions.$id.js +1 -1
  58. package/dist/routes/pages/extensions.$id.js.map +1 -1
  59. package/dist/routes/pages/extensions._index.js +1 -1
  60. package/dist/routes/pages/extensions._index.js.map +1 -1
  61. package/dist/routes/pages/integrations.js +1 -1
  62. package/dist/routes/pages/integrations.js.map +1 -1
  63. package/dist/routes/pages/new-app.js +1 -1
  64. package/dist/routes/pages/new-app.js.map +1 -1
  65. package/dist/routes/pages/operations.js +2 -2
  66. package/dist/routes/pages/operations.js.map +1 -1
  67. package/dist/routes/pages/overview.d.ts +2 -2
  68. package/dist/routes/pages/settings.d.ts.map +1 -1
  69. package/dist/routes/pages/settings.js +26 -8
  70. package/dist/routes/pages/settings.js.map +1 -1
  71. package/dist/routes/pages/tools.$id.js +1 -1
  72. package/dist/routes/pages/tools.$id.js.map +1 -1
  73. package/dist/routes/pages/tools._index.js +1 -1
  74. package/dist/routes/pages/tools._index.js.map +1 -1
  75. package/dist/routes/pages/vault.d.ts +1 -1
  76. package/dist/routes/pages/vault.js +1 -1
  77. package/dist/routes/pages/vault.js.map +1 -1
  78. package/dist/shared/app-roles.js.map +1 -1
  79. package/package.json +3 -3
  80. package/src/components/app-open-actions.tsx +1 -1
  81. package/src/components/app-row-settings.tsx +1 -1
  82. package/src/components/automation-create-dialog.tsx +7 -7
  83. package/src/components/automation-details-panel.tsx +1 -1
  84. package/src/components/chat-home-apps.tsx +1 -1
  85. package/src/components/create-app-popover.spec.tsx +5 -7
  86. package/src/components/create-app-popover.tsx +3 -3
  87. package/src/components/dispatch-control-plane.spec.tsx +12 -19
  88. package/src/components/dispatch-control-plane.tsx +10 -84
  89. package/src/components/layout/Header.tsx +2 -2
  90. package/src/components/layout/Layout.app-chat.spec.ts +1 -0
  91. package/src/components/layout/Layout.spec.tsx +18 -20
  92. package/src/components/layout/Layout.tsx +153 -205
  93. package/src/components/layout/workspace-apps-rail.spec.tsx +79 -0
  94. package/src/components/layout/workspace-apps-rail.tsx +6 -30
  95. package/src/components/messaging-setup-panel.tsx +1 -1
  96. package/src/components/workspace-app-card.tsx +2 -2
  97. package/src/components/workspace-app-chat-rail.spec.tsx +1 -1
  98. package/src/components/workspace-app-host.spec.tsx +19 -19
  99. package/src/components/workspace-app-host.tsx +12 -129
  100. package/src/hooks/use-navigation-state.ts +1 -1
  101. package/src/lib/workspace-apps.ts +1 -1
  102. package/src/routes/pages/$appId.tsx +1 -1
  103. package/src/routes/pages/_index.tsx +1 -1
  104. package/src/routes/pages/admin._index.tsx +1 -1
  105. package/src/routes/pages/agent-integrations.tsx +1 -1
  106. package/src/routes/pages/apps.tsx +2 -86
  107. package/src/routes/pages/automations.spec.tsx +1 -1
  108. package/src/routes/pages/browser-chat.tsx +1 -1
  109. package/src/routes/pages/chat.spec.tsx +23 -46
  110. package/src/routes/pages/chat.tsx +20 -57
  111. package/src/routes/pages/extensions.$id.tsx +1 -1
  112. package/src/routes/pages/extensions._index.tsx +1 -1
  113. package/src/routes/pages/integrations.tsx +1 -1
  114. package/src/routes/pages/new-app.tsx +1 -1
  115. package/src/routes/pages/operations.tsx +2 -2
  116. package/src/routes/pages/settings.spec.tsx +30 -8
  117. package/src/routes/pages/settings.tsx +75 -7
  118. package/src/routes/pages/tools.$id.tsx +1 -1
  119. package/src/routes/pages/tools._index.tsx +1 -1
  120. package/src/routes/pages/vault.tsx +1 -1
  121. package/src/shared/app-roles.ts +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"Layout.d.ts","sourceRoot":"","sources":["../../../src/components/layout/Layout.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Layout.d.ts","sourceRoot":"","sources":["../../../src/components/layout/Layout.tsx"],"names":[],"mappings":"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"}
@@ -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, AgentChatSurface, AgentToggleButton, chatFirstSurfaceTabId, AgentSidebar, ChatFirstSurfacePanelToggle, closeChatFirstSessionWatch, emitChatFirstSessionWatch, getChatFirstSurfaceTabsStore, focusAgentChat, navigateWithAgentChatViewTransition, readChatFirstAppLayout, readChatFirstMode, resolveChatFirstBrowserTarget, resolveChatFirstAppTarget, subscribeChatFirstOpenBrowser, subscribeChatFirstOpenApp, useChatFirstSessionWatch, useChatFirstSurfacePanel, useChatFirstSurfaceResize, useChatFirstSurfaceTabs, useAgentChatHomeHandoff, useAgentChatHomeHandoffLinks, useChatThreads, } from "@agent-native/core/client/agent-chat";
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 { ChatFirstAgentsPane, ChatFirstAppPane, ChatFirstAppsRail, ChatFirstBrowserPane, ChatFirstChatHistory, ChatFirstPrimaryNavigation, ChatFirstSessionWatchPane, ChatFirstSurfacePanel, ChatFirstSurfaceContent, ChatFirstSurfaceTabs, defaultChatFirstCopy, } from "@agent-native/core/client/chat-first";
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 { openCommandMenu } from "@agent-native/core/client/navigation";
10
- import { InvitationBanner, OrgSwitcher } from "@agent-native/core/client/org";
11
- import { RunsTray } from "@agent-native/core/client/progress";
12
- import { isSettingsPathname } from "@agent-native/core/client/settings";
13
- import { AppSidebarFooter, AppSidebarHeader, FeedbackButton, } from "@agent-native/core/client/ui";
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, mergeChatFirstWorkspaceApps, workspaceAppSourceFromConnected, navigateToWorkspaceApp, shouldOpenWorkspaceAppInTopWindow, workspaceAppIdFromRoute, workspaceAppDirectHref, workspaceAppDirectLaunchHref, workspaceAppRoute, workspaceAppTargetPath, } from "../../lib/workspace-apps.js";
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 toggle, so it renders
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 isSettingsShellPath(pathname) {
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 isSettingsShellRoute = isSettingsShellPath(location.pathname);
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 }, { enabled: shouldQueryChatFirstApps(isChatRoute, chatFirstMode) });
687
- // Not list_apps: MCP app access restricts routing, not what the workspace
688
- // shows. list-connected-agents already applies the built-in app config.
689
- const chatFirstConnectedAppsQuery = useActionQuery("list-connected-agents", {}, { enabled: shouldQueryChatFirstApps(isChatRoute, chatFirstMode) });
690
- const chatFirstEnabledBuiltinAppIds = useMemo(() => chatFirstConnectedAppsQuery.data
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
- const registrations = new Map();
709
- for (const app of chatFirstWorkspaceApps) {
710
- registrations.set(app.id.toLowerCase(), {
711
- id: app.id,
712
- name: app.name,
713
- source: app.source,
714
- path: app.path,
715
- url: app.url,
716
- homePath: app.homePath,
717
- enabled: app.status !== "pending" && app.archived !== true,
718
- });
719
- }
720
- for (const app of chatFirstConnectedAppsQuery.data ?? []) {
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 ?? app.id,
739
- source: app.source,
740
- })), [chatFirstAppRegistrations]);
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
- apps: chatFirstAppItems,
767
- workspaceApps: chatHomeWorkspaceApps,
768
- isLoading: chatFirstAppsQuery.isLoading || chatFirstConnectedAppsQuery.isLoading,
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
- chatFirstConnectedAppsQuery.error,
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, {}), _jsx("main", { className: "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 }) })] }) }) }) }) }));
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 && !isSettingsShellRoute && !pageOwnsToolbar(localPathname);
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 && chatFirstHasActiveChat ? (_jsx(ChatFirstSurfacePanelToggle, { open: chatFirstSurfacePanel.open, onToggle: chatFirstSurfacePanel.toggle, className: CHAT_FIRST_SURFACE_PANEL_TOGGLE_CLASS_NAME })) : null, 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
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 chatFirstSurfaceTabsBar = activeChatFirstSurfaceTab?.kind === "app" ? null : (_jsx(ChatFirstSurfaceTabs, { tabs: chatFirstSurfaceTabs.tabs, activeTabId: chatFirstSurfaceTabs.activeTabId, onActivate: activateChatFirstSurfaceTab, onClose: closeChatFirstSurfaceTab, onCloseOthers: (tab) => {
1358
- activateChatFirstSurfaceTab(tab);
1359
- chatFirstSurfaceTabsStore.closeOthers(tab.id);
1360
- }, onCloseToRight: (tab) => {
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: [isSettingsShellRoute ? 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
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();