@agent-native/dispatch 0.31.24 → 0.31.25-nightly-20260826190205

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,9 +1,8 @@
1
1
  import { type ReactNode } from "react";
2
2
  /**
3
- * DispatchShell renders the per-page title (with an optional click-to-open
4
- * description popover) into the global header via the HeaderActions store.
5
- * The actual chrome (sidebar, AgentSidebar, header bar with AgentToggleButton)
6
- * is provided by `Layout` mounted in `root.tsx`.
3
+ * DispatchShell registers the per-page title (with an optional click-to-open
4
+ * description popover) with the HeaderActions store for layouts that expose
5
+ * that metadata.
7
6
  */
8
7
  export declare function DispatchShell({ title, description, children, }: {
9
8
  title: string;
@@ -1 +1 @@
1
- {"version":3,"file":"dispatch-shell.d.ts","sourceRoot":"","sources":["../../src/components/dispatch-shell.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAOvC;;;;;GAKG;AACH,wBAAgB,aAAa,CAAC,EAC5B,KAAK,EACL,WAAW,EACX,QAAQ,GACT,EAAE;IACD,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,SAAS,CAAC;CACrB,mDAmCA"}
1
+ {"version":3,"file":"dispatch-shell.d.ts","sourceRoot":"","sources":["../../src/components/dispatch-shell.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAOvC;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,EAC5B,KAAK,EACL,WAAW,EACX,QAAQ,GACT,EAAE;IACD,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,SAAS,CAAC;CACrB,mDAmCA"}
@@ -6,10 +6,9 @@ import { dispatchDocsHrefForPath, DocsLink } from "./docs-link.js";
6
6
  import { useSetPageTitle } from "./layout/HeaderActions.js";
7
7
  import { Popover, PopoverContent, PopoverTrigger } from "./ui/popover.js";
8
8
  /**
9
- * DispatchShell renders the per-page title (with an optional click-to-open
10
- * description popover) into the global header via the HeaderActions store.
11
- * The actual chrome (sidebar, AgentSidebar, header bar with AgentToggleButton)
12
- * is provided by `Layout` mounted in `root.tsx`.
9
+ * DispatchShell registers the per-page title (with an optional click-to-open
10
+ * description popover) with the HeaderActions store for layouts that expose
11
+ * that metadata.
13
12
  */
14
13
  export function DispatchShell({ title, description, children, }) {
15
14
  const t = useT();
@@ -1 +1 @@
1
- {"version":3,"file":"dispatch-shell.js","sourceRoot":"","sources":["../../src/components/dispatch-shell.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,gCAAgC,CAAC;AACtD,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAErD,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAE3C,OAAO,EAAE,uBAAuB,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAChE,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,EAAE,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAEvE;;;;;GAKG;AACH,MAAM,UAAU,aAAa,CAAC,EAC5B,KAAK,EACL,WAAW,EACX,QAAQ,GAKT;IACC,MAAM,CAAC,GAAG,IAAI,EAAE,CAAC;IACjB,MAAM,QAAQ,GAAG,WAAW,EAAE,CAAC;IAC/B,MAAM,QAAQ,GAAG,uBAAuB,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;IAC5D,eAAe,CACb,eAAK,SAAS,EAAC,iCAAiC,aAC9C,aAAI,SAAS,EAAC,+DAA+D,YAC1E,KAAK,GACH,EACJ,QAAQ,CAAC,CAAC,CAAC,CACV,KAAC,QAAQ,IAAC,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,KAAK,gBAAgB,GAAI,CACnE,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,CAChB,MAAC,OAAO,eACN,KAAC,cAAc,IAAC,OAAO,kBACrB,iBACE,IAAI,EAAC,QAAQ,EACb,SAAS,EAAC,0IAA0I,gBACxI,CAAC,CAAC,4BAA4B,EAAE,EAAE,KAAK,EAAE,CAAC,YAEtD,KAAC,cAAc,IAAC,SAAS,EAAC,aAAa,GAAG,GACnC,GACM,EACjB,KAAC,cAAc,IACb,IAAI,EAAC,QAAQ,EACb,KAAK,EAAC,OAAO,EACb,SAAS,EAAC,kCAAkC,YAE3C,WAAW,GACG,IACT,CACX,CAAC,CAAC,CAAC,IAAI,IACJ,CACP,CAAC;IAEF,OAAO,4BAAG,QAAQ,GAAI,CAAC;AACzB,CAAC","sourcesContent":["import { useT } from \"@agent-native/core/client/i18n\";\nimport { IconInfoCircle } from \"@tabler/icons-react\";\nimport { type ReactNode } from \"react\";\nimport { useLocation } from \"react-router\";\n\nimport { dispatchDocsHrefForPath, DocsLink } from \"./docs-link\";\nimport { useSetPageTitle } from \"./layout/HeaderActions\";\nimport { Popover, PopoverContent, PopoverTrigger } from \"./ui/popover\";\n\n/**\n * DispatchShell renders the per-page title (with an optional click-to-open\n * description popover) into the global header via the HeaderActions store.\n * The actual chrome (sidebar, AgentSidebar, header bar with AgentToggleButton)\n * is provided by `Layout` mounted in `root.tsx`.\n */\nexport function DispatchShell({\n title,\n description,\n children,\n}: {\n title: string;\n description?: string;\n children: ReactNode;\n}) {\n const t = useT();\n const location = useLocation();\n const docsHref = dispatchDocsHrefForPath(location.pathname);\n useSetPageTitle(\n <div className=\"flex items-center gap-2 min-w-0\">\n <h1 className=\"text-lg font-semibold tracking-tight truncate text-foreground\">\n {title}\n </h1>\n {docsHref ? (\n <DocsLink href={docsHref} label={`Open ${title} documentation`} />\n ) : description ? (\n <Popover>\n <PopoverTrigger asChild>\n <button\n type=\"button\"\n className=\"inline-flex h-6 w-6 items-center justify-center rounded-md text-muted-foreground/70 hover:bg-accent hover:text-foreground cursor-pointer\"\n aria-label={t(\"dispatch.sidebar.aboutPage\", { title })}\n >\n <IconInfoCircle className=\"h-3.5 w-3.5\" />\n </button>\n </PopoverTrigger>\n <PopoverContent\n side=\"bottom\"\n align=\"start\"\n className=\"max-w-72 text-xs leading-relaxed\"\n >\n {description}\n </PopoverContent>\n </Popover>\n ) : null}\n </div>,\n );\n\n return <>{children}</>;\n}\n"]}
1
+ {"version":3,"file":"dispatch-shell.js","sourceRoot":"","sources":["../../src/components/dispatch-shell.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,gCAAgC,CAAC;AACtD,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAErD,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAE3C,OAAO,EAAE,uBAAuB,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAChE,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,EAAE,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAEvE;;;;GAIG;AACH,MAAM,UAAU,aAAa,CAAC,EAC5B,KAAK,EACL,WAAW,EACX,QAAQ,GAKT;IACC,MAAM,CAAC,GAAG,IAAI,EAAE,CAAC;IACjB,MAAM,QAAQ,GAAG,WAAW,EAAE,CAAC;IAC/B,MAAM,QAAQ,GAAG,uBAAuB,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;IAC5D,eAAe,CACb,eAAK,SAAS,EAAC,iCAAiC,aAC9C,aAAI,SAAS,EAAC,+DAA+D,YAC1E,KAAK,GACH,EACJ,QAAQ,CAAC,CAAC,CAAC,CACV,KAAC,QAAQ,IAAC,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,KAAK,gBAAgB,GAAI,CACnE,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,CAChB,MAAC,OAAO,eACN,KAAC,cAAc,IAAC,OAAO,kBACrB,iBACE,IAAI,EAAC,QAAQ,EACb,SAAS,EAAC,0IAA0I,gBACxI,CAAC,CAAC,4BAA4B,EAAE,EAAE,KAAK,EAAE,CAAC,YAEtD,KAAC,cAAc,IAAC,SAAS,EAAC,aAAa,GAAG,GACnC,GACM,EACjB,KAAC,cAAc,IACb,IAAI,EAAC,QAAQ,EACb,KAAK,EAAC,OAAO,EACb,SAAS,EAAC,kCAAkC,YAE3C,WAAW,GACG,IACT,CACX,CAAC,CAAC,CAAC,IAAI,IACJ,CACP,CAAC;IAEF,OAAO,4BAAG,QAAQ,GAAI,CAAC;AACzB,CAAC","sourcesContent":["import { useT } from \"@agent-native/core/client/i18n\";\nimport { IconInfoCircle } from \"@tabler/icons-react\";\nimport { type ReactNode } from \"react\";\nimport { useLocation } from \"react-router\";\n\nimport { dispatchDocsHrefForPath, DocsLink } from \"./docs-link\";\nimport { useSetPageTitle } from \"./layout/HeaderActions\";\nimport { Popover, PopoverContent, PopoverTrigger } from \"./ui/popover\";\n\n/**\n * DispatchShell registers the per-page title (with an optional click-to-open\n * description popover) with the HeaderActions store for layouts that expose\n * that metadata.\n */\nexport function DispatchShell({\n title,\n description,\n children,\n}: {\n title: string;\n description?: string;\n children: ReactNode;\n}) {\n const t = useT();\n const location = useLocation();\n const docsHref = dispatchDocsHrefForPath(location.pathname);\n useSetPageTitle(\n <div className=\"flex items-center gap-2 min-w-0\">\n <h1 className=\"text-lg font-semibold tracking-tight truncate text-foreground\">\n {title}\n </h1>\n {docsHref ? (\n <DocsLink href={docsHref} label={`Open ${title} documentation`} />\n ) : description ? (\n <Popover>\n <PopoverTrigger asChild>\n <button\n type=\"button\"\n className=\"inline-flex h-6 w-6 items-center justify-center rounded-md text-muted-foreground/70 hover:bg-accent hover:text-foreground cursor-pointer\"\n aria-label={t(\"dispatch.sidebar.aboutPage\", { title })}\n >\n <IconInfoCircle className=\"h-3.5 w-3.5\" />\n </button>\n </PopoverTrigger>\n <PopoverContent\n side=\"bottom\"\n align=\"start\"\n className=\"max-w-72 text-xs leading-relaxed\"\n >\n {description}\n </PopoverContent>\n </Popover>\n ) : null}\n </div>,\n );\n\n return <>{children}</>;\n}\n"]}
@@ -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":"AAAA,OAAO,EAsBL,KAAK,wBAAwB,EAC7B,KAAK,4BAA4B,EAYlC,MAAM,sCAAsC,CAAC;AAM9C,OAAO,EAaL,KAAK,gBAAgB,EACrB,KAAK,aAAa,EAElB,KAAK,mBAAmB,EACzB,MAAM,sCAAsC,CAAC;AAgC9C,OAAO,EAQL,KAAK,aAAa,EAClB,KAAK,SAAS,EACf,MAAM,OAAO,CAAC;AAqCf,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,uEAAuE;IACvE,EAAE,EAAE,MAAM,CAAC;IACX,iFAAiF;IACjF,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,eAAe,CAAC;IACvB,6EAA6E;IAC7E,OAAO,CAAC,EAAE,kBAAkB,CAAC;IAC7B,gEAAgE;IAChE,KAAK,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,OAAO,CAAC;IACtC,iEAAiE;IACjE,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,uBAAuB;IACtC,mEAAmE;IACnE,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,8DAA8D;IAC9D,QAAQ,CAAC,EAAE,SAAS,eAAe,EAAE,CAAC;IACtC,kFAAkF;IAClF,SAAS,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;CAC/B;AA0DD,eAAO,MAAM,0CAA0C,gCACxB,CAAC;AAmChC,wBAAgB,qBAAqB,IAAI,uBAAuB,GAAG,SAAS,CAE3E;AA4CD,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAEhE;AAED,wBAAgB,iCAAiC,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAE3E;AAqND,wBAAgB,eAAe,CAAC,SAAS,EAAE,MAAM,EAAE,GAAG,SAAa,UAWlE;AAwaD,wBAAgB,UAAU,CAAC,EACzB,UAAU,EACV,UAAU,EACV,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;IACD,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,mDAmVA;AAED;;;;;GAKG;AACH,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,CAsCZ;AAED,wBAAgB,MAAM,CAAC,EACrB,QAAQ,EACR,UAAU,EACV,aAAa,GACd,EAAE;IACD,QAAQ,EAAE,SAAS,CAAC;IACpB,UAAU,CAAC,EAAE,uBAAuB,CAAC;IACrC,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB,mDA+qCA"}
@@ -1,5 +1,5 @@
1
1
  import { Fragment as _Fragment, jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
- import { CHAT_FIRST_MODE_CHANGED_EVENT, AgentChatSurface, 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, 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";
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
5
  import { ChatFirstAgentsPane, ChatFirstAppPane, ChatFirstAppsRail, ChatFirstBrowserPane, ChatFirstChatHistory, ChatFirstPrimaryNavigation, ChatFirstSessionWatchPane, ChatFirstSurfacePanel, ChatFirstSurfaceContent, ChatFirstSurfaceTabs, defaultChatFirstCopy, } from "@agent-native/core/client/chat-first";
@@ -8,10 +8,11 @@ import { useActionQuery } from "@agent-native/core/client/hooks";
8
8
  import { useT } from "@agent-native/core/client/i18n";
9
9
  import { openCommandMenu } from "@agent-native/core/client/navigation";
10
10
  import { InvitationBanner, OrgSwitcher } from "@agent-native/core/client/org";
11
+ import { RunsTray } from "@agent-native/core/client/progress";
11
12
  import { FeedbackButton } from "@agent-native/core/client/ui";
12
13
  import { SidebarFooterActions } from "@agent-native/toolkit/app-shell";
13
14
  import { ChatHistoryRail, } from "@agent-native/toolkit/chat-history";
14
- import { IconApps, IconBrandSlack, IconBrandTelegram, IconCopy, IconEye, IconHierarchy2, IconMessageQuestion, IconBroadcast, IconLayoutSidebarLeftCollapse, IconLayoutSidebarLeftExpand, IconSettings, IconShield, IconSearch, IconWorld, IconDeviceDesktop, IconPlus, } from "@tabler/icons-react";
15
+ import { IconApps, IconBrandSlack, IconBrandTelegram, IconCopy, IconEye, IconHierarchy2, IconMessageQuestion, IconBroadcast, IconLayoutSidebar, IconLayoutSidebarLeftCollapse, IconLayoutSidebarLeftExpand, IconSettings, IconShield, IconSearch, IconWorld, IconDeviceDesktop, IconPlus, } from "@tabler/icons-react";
15
16
  import { createContext, useEffect, useMemo, useRef, useState, useContext, useCallback, } from "react";
16
17
  import { Link, useLocation, useNavigate } from "react-router";
17
18
  import { toast } from "sonner";
@@ -21,12 +22,13 @@ import { isDispatchWorkspaceAppId, isPathMountedWorkspaceApp, isWorkspaceAppVisi
21
22
  import { CHAT_FIRST_PANE_STATE_KEY } from "../../shared/chat-first-pane.js";
22
23
  import { AppIcon } from "../app-icon.js";
23
24
  import { CreateAppPopover } from "../create-app-popover.js";
25
+ import { Button } from "../ui/button.js";
24
26
  import { Sheet, SheetContent, SheetDescription, SheetTitle } from "../ui/sheet.js";
25
27
  import { Skeleton } from "../ui/skeleton.js";
26
28
  import { Tooltip, TooltipContent, TooltipTrigger } from "../ui/tooltip.js";
27
29
  import { WorkspaceAppChatRail, WorkspaceAppFrame, WorkspaceAppKeepAlive, } from "../workspace-app-host.js";
28
30
  import { Header } from "./Header.js";
29
- import { HeaderActionsProvider } from "./HeaderActions.js";
31
+ import { HeaderActionsProvider, useHeaderActions, useHeaderTitle, } from "./HeaderActions.js";
30
32
  export { buildChatFirstEmbedSessionInput } from "../workspace-app-host.js";
31
33
  const PRIMARY_NAV_ITEMS = [
32
34
  {
@@ -86,9 +88,8 @@ const DispatchExtensionsContext = createContext(undefined);
86
88
  export function useDispatchExtensions() {
87
89
  return useContext(DispatchExtensionsContext);
88
90
  }
89
- // Routes whose page renders its own toolbar.
90
- // Layout still mounts the sidebar + AgentSidebar, but skips its own Header so
91
- // there's no double-header.
91
+ // Routes whose page renders its own toolbar. Layout skips its sticky chat
92
+ // control so there's no duplicate page chrome.
92
93
  function pageOwnsToolbar(pathname) {
93
94
  if (pathname === "/tools" || pathname.startsWith("/tools/"))
94
95
  return true;
@@ -642,6 +643,8 @@ export function Layout({ children, extensions, agentPageHref, }) {
642
643
  const t = useT();
643
644
  const location = useLocation();
644
645
  const navigate = useNavigate();
646
+ const pageTitle = useHeaderTitle();
647
+ const headerActions = useHeaderActions();
645
648
  const [mobileOpen, setMobileOpen] = useState(false);
646
649
  // Drives renderChatFirstSurfaceTab's app-tab chatSidebar decision below —
647
650
  // the chat-first surface panel is already a full-screen overlay at this
@@ -1272,19 +1275,34 @@ export function Layout({ children, extensions, agentPageHref, }) {
1272
1275
  if (isWorkspaceAppHostRoute) {
1273
1276
  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 }) }) }));
1274
1277
  }
1275
- const showHeader = !isChatRoute && !pageOwnsToolbar(localPathname);
1278
+ const showAgentControls = !isChatRoute && !pageOwnsToolbar(localPathname);
1276
1279
  function openAskAgentFullscreen() {
1277
1280
  focusAgentChat();
1278
1281
  navigateWithAgentChatViewTransition(navigate, dispatchNavLinkTarget("/chat"));
1279
1282
  }
1283
+ function openRunThread(threadId) {
1284
+ navigate("/chat", {
1285
+ state: {
1286
+ dispatchThread: {
1287
+ id: `${Date.now()}-${threadId}`,
1288
+ threadId,
1289
+ },
1290
+ },
1291
+ });
1292
+ window.requestAnimationFrame(() => {
1293
+ window.dispatchEvent(new CustomEvent("agent-chat:open-thread", {
1294
+ detail: { threadId },
1295
+ }));
1296
+ });
1297
+ }
1280
1298
  const sidebarSuggestions = [
1281
1299
  t("dispatch.sidebar.suggestionBuildApp"),
1282
1300
  t("dispatch.sidebar.suggestionRouteSlack"),
1283
1301
  t("dispatch.sidebar.suggestionGrantKey"),
1284
1302
  ];
1285
- const appContent = (_jsxs("div", { className: "relative flex h-full min-w-0 flex-1 flex-col overflow-hidden", children: [showHeader ? _jsx(Header, { onOpenMobile: () => setMobileOpen(true) }) : null, _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("flex-1", isChatRoute || isWorkspaceAppRoute
1286
- ? "min-h-0 overflow-hidden"
1287
- : "overflow-y-auto"), children: showHeader ? (_jsx("div", { className: "mx-auto max-w-7xl space-y-10 px-4 py-6 sm:px-6", children: children })) : (children) })] }));
1303
+ 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
1304
+ ? "overflow-hidden"
1305
+ : "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", className: "pointer-events-auto absolute start-4 top-2 h-8 w-8 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) })] }));
1288
1306
  const chatFirstSurfaceTabsBar = activeChatFirstSurfaceTab?.kind === "app" ? null : (_jsx(ChatFirstSurfaceTabs, { tabs: chatFirstSurfaceTabs.tabs, activeTabId: chatFirstSurfaceTabs.activeTabId, onActivate: activateChatFirstSurfaceTab, onClose: closeChatFirstSurfaceTab, onCloseOthers: (tab) => {
1289
1307
  activateChatFirstSurfaceTab(tab);
1290
1308
  chatFirstSurfaceTabsStore.closeOthers(tab.id);
@@ -1 +1 @@
1
- {"version":3,"file":"Layout.js","sourceRoot":"","sources":["../../../src/components/layout/Layout.tsx"],"names":[],"mappings":"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","sourcesContent":["import {\n CHAT_FIRST_MODE_CHANGED_EVENT,\n AgentChatSurface,\n chatFirstSurfaceTabId,\n AgentSidebar,\n ChatFirstSurfacePanelToggle,\n closeChatFirstSessionWatch,\n emitChatFirstSessionWatch,\n getChatFirstSurfaceTabsStore,\n focusAgentChat,\n navigateWithAgentChatViewTransition,\n readChatFirstAppLayout,\n readChatFirstMode,\n resolveChatFirstBrowserTarget,\n resolveChatFirstAppTarget,\n subscribeChatFirstOpenBrowser,\n subscribeChatFirstOpenApp,\n useChatFirstSessionWatch,\n useChatFirstSurfacePanel,\n useChatFirstSurfaceResize,\n useChatFirstSurfaceTabs,\n type ChatFirstAppRegistration,\n type ChatFirstAppLayoutPreference,\n type ChatFirstAppResolution,\n type ChatFirstAppSurfacePlacement,\n type ChatFirstOpenBrowserDetail,\n type ChatFirstOpenAppDetail,\n type ChatFirstSessionReference,\n type ChatFirstSurfaceTab,\n type ChatFirstSurfaceKind,\n useAgentChatHomeHandoff,\n useAgentChatHomeHandoffLinks,\n useChatThreads,\n type ChatThreadSummary,\n} from \"@agent-native/core/client/agent-chat\";\nimport { appBasePath, appPath } from \"@agent-native/core/client/api-path\";\nimport {\n readClientAppState,\n writeClientAppState,\n} from \"@agent-native/core/client/application-state\";\nimport {\n ChatFirstAgentsPane,\n ChatFirstAppPane,\n ChatFirstAppsRail,\n ChatFirstBrowserPane,\n ChatFirstChatHistory,\n ChatFirstPrimaryNavigation,\n ChatFirstSessionWatchPane,\n ChatFirstSurfacePanel,\n ChatFirstSurfaceContent,\n ChatFirstSurfaceTabs,\n defaultChatFirstCopy,\n type ChatFirstAgentActivity,\n type ChatFirstAppItem,\n type ChatFirstCopy,\n type ChatFirstEmbedTarget,\n type ChatFirstPrimaryTab,\n} from \"@agent-native/core/client/chat-first\";\nimport { writeClipboardText } from \"@agent-native/core/client/clipboard\";\nimport { useActionQuery } from \"@agent-native/core/client/hooks\";\nimport { useT } from \"@agent-native/core/client/i18n\";\nimport { openCommandMenu } from \"@agent-native/core/client/navigation\";\nimport { InvitationBanner, OrgSwitcher } from \"@agent-native/core/client/org\";\nimport { FeedbackButton } from \"@agent-native/core/client/ui\";\nimport { SidebarFooterActions } from \"@agent-native/toolkit/app-shell\";\nimport {\n ChatHistoryRail,\n type ChatHistoryItem,\n} from \"@agent-native/toolkit/chat-history\";\nimport {\n IconApps,\n IconBrandSlack,\n IconBrandTelegram,\n IconCopy,\n IconEye,\n IconHierarchy2,\n IconMessageQuestion,\n IconBroadcast,\n IconLayoutSidebarLeftCollapse,\n IconLayoutSidebarLeftExpand,\n IconSettings,\n IconShield,\n IconSearch,\n IconWorld,\n IconDeviceDesktop,\n IconPlus,\n} from \"@tabler/icons-react\";\nimport {\n createContext,\n useEffect,\n useMemo,\n useRef,\n useState,\n useContext,\n useCallback,\n type ComponentType,\n type ReactNode,\n} from \"react\";\nimport { Link, useLocation, useNavigate } from \"react-router\";\nimport { toast } from \"sonner\";\n\nimport { useIsMobile } from \"../../hooks/use-mobile\";\nimport { cn } from \"../../lib/utils\";\nimport {\n isDispatchWorkspaceAppId,\n isPathMountedWorkspaceApp,\n isWorkspaceAppVisibleInDefaultLaunchers,\n isWorkspaceSsoApp,\n mergeChatFirstWorkspaceApps,\n navigateToWorkspaceApp,\n workspaceAppIdFromRoute,\n workspaceAppDirectHref,\n workspaceAppRoute,\n type WorkspaceAppSummary,\n} from \"../../lib/workspace-apps\";\nimport { CHAT_FIRST_PANE_STATE_KEY } from \"../../shared/chat-first-pane\";\nimport { AppIcon } from \"../app-icon\";\nimport { CreateAppPopover } from \"../create-app-popover\";\nimport { Sheet, SheetContent, SheetDescription, SheetTitle } from \"../ui/sheet\";\nimport { Skeleton } from \"../ui/skeleton\";\nimport { Tooltip, TooltipContent, TooltipTrigger } from \"../ui/tooltip\";\nimport {\n WorkspaceAppChatRail,\n WorkspaceAppFrame,\n WorkspaceAppKeepAlive,\n} from \"../workspace-app-host\";\nimport { Header } from \"./Header\";\nimport { HeaderActionsProvider } from \"./HeaderActions\";\n\nexport { buildChatFirstEmbedSessionInput } from \"../workspace-app-host\";\n\nexport type DispatchNavSection = \"primary\" | \"operations\";\n\nexport type DispatchNavIcon = ComponentType<{\n size?: number | string;\n className?: string;\n}>;\n\nexport interface DispatchNavItem {\n /** Stable id used for keys and navigation.view. Avoid built-in ids. */\n id: string;\n /** React Router path for the tab, usually backed by an app/routes/*.tsx file. */\n to: string;\n label: string;\n icon?: DispatchNavIcon;\n /** Defaults to \"operations\", which renders under the Admin control plane. */\n section?: DispatchNavSection;\n /** Override active matching for nested or multi-route tools. */\n match?: (pathname: string) => boolean;\n /** Canonical path inside the Admin shell for management tabs. */\n adminTo?: string;\n}\n\nexport interface DispatchExtensionConfig {\n /** Opt into the Codex/T3-like chat-first shell for chat routes. */\n chatFirst?: boolean;\n /** Extra sidebar tabs supplied by the generated workspace. */\n navItems?: readonly DispatchNavItem[];\n /** Extra React Query keys to invalidate when Dispatch receives DB sync events. */\n queryKeys?: readonly string[];\n}\n\nconst PRIMARY_NAV_ITEMS = [\n {\n id: \"overview\",\n to: \"/overview\",\n label: \"Overview\",\n icon: IconBroadcast,\n section: \"primary\",\n },\n {\n id: \"chat\",\n to: \"/chat\",\n label: \"Chat\",\n icon: IconMessageQuestion,\n section: \"primary\",\n },\n {\n id: \"apps\",\n to: \"/apps\",\n label: \"Apps\",\n icon: IconApps,\n section: \"primary\",\n },\n {\n id: \"agents\",\n to: \"/agents\",\n label: \"Agents\",\n icon: IconHierarchy2,\n section: \"primary\",\n },\n] as const satisfies readonly DispatchNavItem[];\n\nconst BOTTOM_NAV_ITEMS = [\n {\n id: \"admin\",\n to: \"/admin\",\n label: \"Admin\",\n icon: IconShield,\n },\n {\n id: \"settings\",\n to: \"/settings\",\n label: \"Settings\",\n icon: IconSettings,\n },\n] as const satisfies readonly DispatchNavItem[];\n\nconst EMPTY_NAV_ITEMS: readonly DispatchNavItem[] = [];\nconst DISPATCH_SIDEBAR_LABEL = \"Dispatch\";\n\nconst CHROMELESS_PATHS = [\"/approval\", \"/browser-chat\", \"/browser-connect\"];\nconst SIDEBAR_COLLAPSE_KEY = \"dispatch.sidebar.collapsed\";\nconst CHAT_HISTORY_SOURCE_KEY = \"dispatch.chat-history.source\";\n// Below 768px, ChatFirstSurfacePanel becomes a max-[767px]:z-10 full-screen\n// overlay (surface-panel.tsx). This toggle is the only way to dismiss it, so\n// its z-index must stay above that overlay in every stacking context or the\n// panel becomes undismissable on mobile.\nexport const CHAT_FIRST_SURFACE_PANEL_TOGGLE_CLASS_NAME =\n \"absolute right-3 top-2 z-20\";\n\ninterface DispatchChatFirstPane {\n appId: string;\n placement?: ChatFirstAppSurfacePlacement;\n path?: string;\n view?: string;\n}\n\ninterface ChatFirstGrantedAppSummary {\n id: string;\n name: string;\n url?: string | null;\n}\n\ninterface ChatFirstGrantedAppsResult {\n apps: ChatFirstGrantedAppSummary[];\n}\n\ninterface DispatchAgentThreadSummary {\n id: string;\n title: string;\n preview?: string;\n snippet?: string;\n updatedAt?: number;\n}\n\ninterface SearchAgentThreadsResult {\n threads: DispatchAgentThreadSummary[];\n}\n\nconst DispatchExtensionsContext = createContext<\n DispatchExtensionConfig | undefined\n>(undefined);\n\nexport function useDispatchExtensions(): DispatchExtensionConfig | undefined {\n return useContext(DispatchExtensionsContext);\n}\n\n// Routes whose page renders its own toolbar.\n// Layout still mounts the sidebar + AgentSidebar, but skips its own Header so\n// there's no double-header.\nfunction pageOwnsToolbar(pathname: string): boolean {\n if (pathname === \"/tools\" || pathname.startsWith(\"/tools/\")) return true;\n if (pathname === \"/extensions\" || pathname.startsWith(\"/extensions/\"))\n return true;\n if (pathname.startsWith(\"/apps/\")) return true;\n return false;\n}\n\nfunction sectionFor(item: DispatchNavItem): DispatchNavSection {\n return item.section ?? \"operations\";\n}\n\nfunction navItemMatchesPath(item: DispatchNavItem, pathname: string): boolean {\n if (item.match) {\n try {\n if (item.match(pathname)) return true;\n } catch {\n return false;\n }\n }\n return pathname === item.to || pathname.startsWith(`${item.to}/`);\n}\n\nfunction navItemsForSection(\n items: readonly DispatchNavItem[],\n section: DispatchNavSection,\n): DispatchNavItem[] {\n return items.filter((item) => sectionFor(item) === section);\n}\n\nfunction localDispatchPath(pathname: string): string {\n const basePath = appBasePath();\n if (!basePath) return pathname;\n if (pathname === basePath) return \"/\";\n if (pathname.startsWith(`${basePath}/`)) {\n return pathname.slice(basePath.length) || \"/\";\n }\n return pathname;\n}\n\nexport function isElectronEmbeddedSearch(search: string): boolean {\n return new URLSearchParams(search).get(\"electron\") === \"1\";\n}\n\nexport function shouldAutoCollapseDispatchSidebar(pathname: string): boolean {\n return localDispatchPath(pathname).startsWith(\"/apps/\");\n}\n\nfunction chatFirstPrimaryTabForPath(\n pathname: string,\n): ChatFirstPrimaryTab | undefined {\n if (pathname === \"/chat\" || pathname.startsWith(\"/chat/\")) {\n return \"new-chat\";\n }\n if (\n pathname === \"/integrations\" ||\n pathname.startsWith(\"/integrations/\") ||\n pathname === \"/admin/integrations\" ||\n pathname.startsWith(\"/admin/integrations/\")\n ) {\n return \"integrations\";\n }\n if (\n pathname === \"/automations\" ||\n pathname.startsWith(\"/automations/\") ||\n pathname === \"/admin/automations\" ||\n pathname.startsWith(\"/admin/automations/\")\n ) {\n return \"scheduled\";\n }\n return undefined;\n}\n\nfunction dispatchNavLinkTarget(path: string): string {\n if (typeof window === \"undefined\") return path;\n const basePath = appBasePath();\n if (!basePath) return path;\n // Mirror the basename calculation entry.client.tsx uses to configure the\n // router (basePath iff the current URL is under that mount, \"\" otherwise).\n // Reading the live URL directly avoids races with the previous check on\n // `__reactRouterContext.basename`, which could read undefined before the\n // entry script set it — that race produced /dispatch/dispatch/<route>\n // history entries that 404'd on back-button navigation.\n const pathname = window.location.pathname;\n const routerHasBasename =\n pathname === basePath || pathname.startsWith(`${basePath}/`);\n return routerHasBasename ? path : appPath(path);\n}\n\nfunction chatFirstResolutionMessage(\n reason: Exclude<ChatFirstAppResolution, { status: \"ready\" }>[\"reason\"],\n): string {\n switch (reason) {\n case \"empty-detail\":\n return \"The agent did not provide an app target to open.\";\n case \"invalid-url\":\n return \"The requested app route was not registered for this workspace app.\";\n case \"unknown-app\":\n return \"That app is not available in this workspace.\";\n }\n return \"The requested app could not be opened.\";\n}\n\nfunction chatFirstBrowserResolutionMessage(\n reason: \"empty-detail\" | \"invalid-url\",\n): string {\n return reason === \"empty-detail\"\n ? \"The agent did not provide a browser URL to open.\"\n : \"The requested browser URL is not a safe HTTP(S) address.\";\n}\n\nconst DISPATCH_CHAT_FIRST_COPY_KEYS: Record<string, string> = {\n workspaceApps: \"chatFirstWorkspaceApps\",\n createWorkspaceApp: \"chatFirstCreateWorkspaceApp\",\n openApp: \"chatFirstOpenApp\",\n appsLoadError: \"chatFirstAppsLoadError\",\n noWorkspaceApps: \"chatFirstNoWorkspaceApps\",\n createApp: \"chatFirstCreateApp\",\n retry: \"chatFirstRetry\",\n dismiss: \"chatFirstDismiss\",\n unpinApp: \"chatFirstUnpinApp\",\n pinApp: \"chatFirstPinApp\",\n removePinned: \"chatFirstRemovePinned\",\n pinTop: \"chatFirstPinTop\",\n openSideSurfaces: \"chatFirstOpenSideSurfaces\",\n closeTab: \"chatFirstCloseTab\",\n close: \"chatFirstClose\",\n closeOthers: \"chatFirstCloseOthers\",\n closeToRight: \"chatFirstCloseToRight\",\n closeAll: \"chatFirstCloseAll\",\n unavailable: \"chatFirstUnavailable\",\n openActivity: \"chatFirstOpenActivity\",\n deferred: \"chatFirstDeferred\",\n browserBack: \"chatFirstBrowserBack\",\n browserForward: \"chatFirstBrowserForward\",\n browserReload: \"chatFirstBrowserReload\",\n browserAddress: \"chatFirstBrowserAddress\",\n browserOpenExternal: \"chatFirstBrowserOpenExternal\",\n browserClose: \"chatFirstBrowserClose\",\n browserPage: \"chatFirstBrowserPage\",\n browserInvalidUrl: \"chatFirstBrowserInvalidUrl\",\n browserPreviewStarting: \"chatFirstBrowserPreviewStarting\",\n browserPreviewError: \"chatFirstBrowserPreviewError\",\n appUnavailable: \"chatFirstAppUnavailable\",\n appLoading: \"chatFirstLoadingApp\",\n agentActivityEyebrow: \"chatFirstAgentActivityEyebrow\",\n agentActivityTitle: \"chatFirstAgentActivityTitle\",\n agentActivityDescription: \"chatFirstAgentActivityDescription\",\n refreshAgentActivity: \"chatFirstRefreshAgentActivity\",\n noAgentSessions: \"chatFirstNoAgentSessions\",\n startAgentSession: \"chatFirstStartAgentSession\",\n watchSession: \"chatFirstWatchSession\",\n copySessionId: \"chatFirstCopySessionId\",\n copySessionIdFor: \"chatFirstCopySessionIdFor\",\n sessionIdCopied: \"chatFirstSessionIdCopied\",\n sessionIdShort: \"chatFirstSessionIdShort\",\n copied: \"chatFirstCopied\",\n agentActivityStatusQueued: \"chatFirstAgentActivityStatusQueued\",\n agentActivityStatusRunning: \"chatFirstAgentActivityStatusRunning\",\n agentActivityStatusPaused: \"chatFirstAgentActivityStatusPaused\",\n agentActivityStatusNeedsApproval: \"chatFirstAgentActivityStatusNeedsApproval\",\n agentActivityStatusCompleted: \"chatFirstAgentActivityStatusCompleted\",\n agentActivityStatusErrored: \"chatFirstAgentActivityStatusErrored\",\n agentActivityStatusRecent: \"chatFirstAgentActivityStatusRecent\",\n agentActivityStatusUnknown: \"chatFirstAgentActivityStatusUnknown\",\n watchingSession: \"chatFirstWatchingSession\",\n session: \"chatFirstSession\",\n stopWatchingSession: \"chatFirstStopWatchingSession\",\n stopWatching: \"chatFirstStopWatching\",\n watchedSession: \"chatFirstWatchedSession\",\n agentsTitle: \"chatFirstAgentsTitle\",\n};\n\nconst DISPATCH_CHAT_FIRST_SURFACE_COPY_KEYS: Record<\n string,\n { label: string; reason: string }\n> = {\n browser: {\n label: \"chatFirstSurfaceBrowserLabel\",\n reason: \"chatFirstSurfaceBrowserReason\",\n },\n terminal: {\n label: \"chatFirstSurfaceTerminalLabel\",\n reason: \"chatFirstSurfaceTerminalReason\",\n },\n files: {\n label: \"chatFirstSurfaceFilesLabel\",\n reason: \"chatFirstSurfaceFilesReason\",\n },\n diff: {\n label: \"chatFirstSurfaceDiffLabel\",\n reason: \"chatFirstSurfaceDiffReason\",\n },\n \"side-chat\": {\n label: \"chatFirstSurfaceSideChatLabel\",\n reason: \"chatFirstSurfaceSideChatReason\",\n },\n agents: {\n label: \"chatFirstSurfaceAgentsLabel\",\n reason: \"chatFirstSurfaceAgentsReason\",\n },\n};\n\nfunction createDispatchChatFirstCopy(\n t: (key: string, options?: Record<string, unknown>) => string,\n): ChatFirstCopy {\n return (key, values) => {\n if (key.startsWith(\"surface.\")) {\n const [, kind, field] = key.split(\".\");\n const surface = DISPATCH_CHAT_FIRST_SURFACE_COPY_KEYS[kind];\n const translationKey =\n surface && (field === \"label\" || field === \"reason\")\n ? surface[field]\n : undefined;\n if (translationKey) {\n return t(`dispatch.pages.${translationKey}`, {\n ...(values ?? {}),\n defaultValue: defaultChatFirstCopy(key, values),\n });\n }\n }\n const translationKey = DISPATCH_CHAT_FIRST_COPY_KEYS[key];\n if (!translationKey) return defaultChatFirstCopy(key, values);\n return t(`dispatch.pages.${translationKey}`, {\n ...(values ?? {}),\n defaultValue: defaultChatFirstCopy(key, values),\n });\n };\n}\n\nfunction chatThreadPath(threadId: string | null): string {\n return threadId ? `/chat/${encodeURIComponent(threadId)}` : \"/chat\";\n}\n\nfunction persistedChatFirstPane(value: unknown): DispatchChatFirstPane | null {\n if (!value || typeof value !== \"object\") return null;\n const record = value as Record<string, unknown>;\n if (typeof record.appId !== \"string\" || !record.appId.trim()) return null;\n return {\n appId: record.appId,\n ...(record.placement === \"main\" || record.placement === \"side\"\n ? { placement: record.placement }\n : {}),\n ...(typeof record.path === \"string\" ? { path: record.path } : {}),\n ...(typeof record.view === \"string\" ? { view: record.view } : {}),\n };\n}\n\nfunction threadIdFromPath(pathname: string): string | null {\n const match = pathname.match(/^\\/chat\\/([^/]+)/);\n if (!match) return null;\n try {\n const value = decodeURIComponent(match[1]).trim();\n return value || null;\n } catch {\n return null;\n }\n}\n\nexport function formatThreadAge(updatedAt: number, now = Date.now()) {\n const diffMs = Math.max(0, now - updatedAt);\n const minutes = Math.floor(diffMs / 60_000);\n if (minutes < 1) return \"now\";\n if (minutes < 60) return `${minutes}m`;\n const hours = Math.floor(minutes / 60);\n if (hours < 24) return `${hours}h`;\n const days = Math.floor(hours / 24);\n if (days < 14) return `${days}d`;\n if (days < 365) return `${Math.floor(days / 7)}w`;\n return `${Math.floor(days / 365)}y`;\n}\n\nfunction threadTitle(thread: ChatThreadSummary, fallback: string) {\n return thread.title || thread.preview || fallback;\n}\n\nfunction threadSourceIcon(platform: string | undefined): ReactNode {\n const normalized = platform?.trim().toLowerCase();\n if (!normalized) return null;\n if (normalized === \"slack\") {\n return <IconBrandSlack size={13} aria-hidden=\"true\" />;\n }\n if (normalized === \"telegram\") {\n return <IconBrandTelegram size={13} aria-hidden=\"true\" />;\n }\n return <IconWorld size={13} aria-hidden=\"true\" />;\n}\n\nfunction readChatHistoryIncludesExternal(): boolean {\n if (typeof window === \"undefined\") return false;\n try {\n return localStorage.getItem(CHAT_HISTORY_SOURCE_KEY) === \"all\";\n } catch {\n // coercion-ok: localStorage is optional browser persistence.\n return false;\n }\n}\n\nfunction threadUpdatedAt(thread: ChatThreadSummary) {\n return Number.isFinite(thread.updatedAt)\n ? thread.updatedAt\n : Number.isFinite(thread.createdAt)\n ? thread.createdAt\n : 0;\n}\n\nfunction DispatchChatsSection({\n onNavigate,\n showNewChat = false,\n prelude,\n chatFirstMode = false,\n chatFirstEmbedded = false,\n collapsed = false,\n chatFirstNavigation,\n}: {\n onNavigate?: () => void;\n showNewChat?: boolean;\n prelude?: ReactNode;\n chatFirstMode?: boolean;\n chatFirstEmbedded?: boolean;\n collapsed?: boolean;\n chatFirstNavigation?: {\n activeTab?: ChatFirstPrimaryTab;\n onNewChat?: () => void;\n onOpenIntegrations: () => void;\n onOpenScheduled: () => void;\n };\n}) {\n const t = useT();\n const chatFirstCopy = useMemo(() => createDispatchChatFirstCopy(t), [t]);\n const navigate = useNavigate();\n const location = useLocation();\n const [includeExternal, setIncludeExternal] = useState(false);\n const [historyPreferenceReady, setHistoryPreferenceReady] = useState(false);\n const historyModeRef = useRef(includeExternal);\n const {\n threads,\n activeThreadId,\n isLoading: chatsLoading,\n threadsLoadError,\n createThread,\n switchThread,\n renameThread,\n refreshThreads,\n } = useChatThreads(undefined, \"dispatch\", undefined, {\n autoCreate: false,\n includeExternal,\n });\n\n const visibleThreads = useMemo(\n () =>\n threads\n .filter(\n (thread) => thread.messageCount > 0 || thread.id === activeThreadId,\n )\n .sort((a, b) => threadUpdatedAt(b) - threadUpdatedAt(a))\n .slice(0, 8),\n [activeThreadId, threads],\n );\n const localPathname = localDispatchPath(location.pathname);\n const displayedActiveThreadId =\n threadIdFromPath(localPathname) ??\n (localPathname === \"/chat\" ? null : activeThreadId);\n const chatItems: ChatHistoryItem[] = visibleThreads.map((thread) => {\n const title = threadTitle(thread, t(\"dispatch.sidebar.newChat\"));\n const sourceIcon = threadSourceIcon(thread.source?.platform);\n const sourceLabel = thread.source?.platform\n ? thread.source.platform[0].toUpperCase() +\n thread.source.platform.slice(1)\n : null;\n return {\n id: thread.id,\n title: (\n <span\n className=\"flex min-w-0 items-center gap-1\"\n title={sourceLabel ? `${sourceLabel}: ${title}` : title}\n >\n {sourceIcon ? (\n <span\n className=\"shrink-0 text-sidebar-foreground/55\"\n aria-label={sourceLabel ?? \"Connected source\"}\n >\n {sourceIcon}\n </span>\n ) : null}\n <span className=\"truncate\">{title}</span>\n </span>\n ),\n titleText: title,\n timestamp:\n thread.id === displayedActiveThreadId\n ? \"\"\n : formatThreadAge(threadUpdatedAt(thread)),\n };\n });\n const chatHistoryError = threadsLoadError ? (\n <button\n type=\"button\"\n onClick={() => void refreshThreads()}\n className=\"flex w-full items-center justify-between gap-2 rounded-md px-2 py-1.5 text-xs text-sidebar-foreground/65 transition-colors hover:bg-sidebar-accent hover:text-sidebar-accent-foreground\"\n >\n <span>Could not load chats</span>\n <span className=\"font-medium\">Retry</span>\n </button>\n ) : undefined;\n\n useEffect(() => {\n setIncludeExternal(readChatHistoryIncludesExternal());\n setHistoryPreferenceReady(true);\n }, []);\n\n useEffect(() => {\n if (!historyPreferenceReady) return;\n try {\n localStorage.setItem(\n CHAT_HISTORY_SOURCE_KEY,\n includeExternal ? \"all\" : \"local\",\n );\n } catch {} // coercion-ok: localStorage is optional browser persistence.\n if (historyModeRef.current !== includeExternal) {\n historyModeRef.current = includeExternal;\n refreshThreads();\n }\n }, [historyPreferenceReady, includeExternal, refreshThreads]);\n\n useEffect(() => {\n const refresh = () => refreshThreads();\n const handleRunning = (event: Event) => {\n const detail = (event as CustomEvent).detail as\n | { isRunning?: unknown }\n | undefined;\n if (detail?.isRunning === false) refreshThreads();\n };\n\n window.addEventListener(\"agent-chat:threads-updated\", refresh);\n window.addEventListener(\"agentNative.chatRunning\", handleRunning);\n window.addEventListener(\"focus\", refresh);\n return () => {\n window.removeEventListener(\"agent-chat:threads-updated\", refresh);\n window.removeEventListener(\"agentNative.chatRunning\", handleRunning);\n window.removeEventListener(\"focus\", refresh);\n };\n }, [refreshThreads]);\n\n function openThread(threadId: string, options?: { isNew?: boolean }) {\n switchThread(threadId);\n navigateWithAgentChatViewTransition(\n navigate,\n dispatchNavLinkTarget(\n options?.isNew ? \"/chat\" : chatThreadPath(threadId),\n ),\n );\n onNavigate?.();\n window.requestAnimationFrame(() => {\n window.dispatchEvent(\n new CustomEvent(\"agent-chat:open-thread\", {\n detail: { threadId, newThread: options?.isNew === true },\n }),\n );\n });\n }\n\n async function handleNewChat() {\n const threadId = await createThread();\n if (threadId) openThread(threadId, { isNew: true });\n }\n\n const collapsedChatFirst = collapsed && chatFirstMode;\n\n return (\n <div\n className={cn(\n \"min-w-0 space-y-0.5\",\n showNewChat && \"dispatch-chat-first-chats\",\n )}\n >\n {showNewChat && chatFirstNavigation ? (\n <nav className={cn(\"space-y-0.5 py-2\", collapsed ? \"px-1.5\" : \"px-2\")}>\n <ChatFirstPrimaryNavigation\n copy={chatFirstCopy}\n onNewChat={() => {\n chatFirstNavigation.onNewChat?.();\n void handleNewChat();\n }}\n onOpenIntegrations={chatFirstNavigation.onOpenIntegrations}\n onOpenScheduled={chatFirstNavigation.onOpenScheduled}\n onSearch={openCommandMenu}\n activeTab={chatFirstNavigation.activeTab}\n collapsed={collapsed}\n />\n </nav>\n ) : null}\n {prelude}\n {!collapsedChatFirst && !chatFirstMode ? (\n <div className=\"flex justify-end px-2 pt-0.5\">\n <Tooltip>\n <TooltipTrigger asChild>\n <button\n type=\"button\"\n data-dispatch-chat-source-toggle\n aria-pressed={includeExternal}\n aria-label={\n includeExternal\n ? t(\"dispatch.sidebar.showLocalChats\", {\n defaultValue: \"Show local chats\",\n })\n : t(\"dispatch.sidebar.showAllChats\", {\n defaultValue: \"Show all chats\",\n })\n }\n onClick={() => setIncludeExternal((current) => !current)}\n className=\"flex size-6 items-center justify-center rounded-md text-sidebar-foreground/55 transition-colors hover:bg-sidebar-accent hover:text-sidebar-accent-foreground\"\n >\n {includeExternal ? (\n <IconWorld size={14} aria-hidden=\"true\" />\n ) : (\n <IconDeviceDesktop size={14} aria-hidden=\"true\" />\n )}\n </button>\n </TooltipTrigger>\n <TooltipContent side=\"right\">\n {includeExternal\n ? t(\"dispatch.sidebar.showLocalChats\", {\n defaultValue: \"Show local chats\",\n })\n : t(\"dispatch.sidebar.showAllChats\", {\n defaultValue: \"Show all chats\",\n })}\n </TooltipContent>\n </Tooltip>\n </div>\n ) : null}\n {!collapsedChatFirst &&\n !chatFirstMode &&\n chatsLoading &&\n visibleThreads.length === 0 &&\n Array.from({ length: 3 }).map((_, index) => (\n <div\n key={`chat-skeleton-${index}`}\n className=\"flex items-center gap-2 px-3 py-1\"\n >\n <Skeleton className=\"size-3.5 shrink-0 rounded-sm\" />\n <Skeleton className=\"h-3 w-3/4 rounded\" />\n </div>\n ))}\n {!collapsedChatFirst &&\n chatFirstMode &&\n (chatsLoading || visibleThreads.length > 0) ? (\n <ChatFirstChatHistory\n items={chatItems}\n activeId={displayedActiveThreadId}\n loading={chatsLoading && visibleThreads.length === 0}\n loadingLabel={\n <div className=\"space-y-1 px-2 py-1\">\n {[0, 1, 2].map((index) => (\n <div key={index} className=\"flex items-center gap-2 px-1 py-1\">\n <Skeleton className=\"size-3.5 shrink-0 rounded-sm\" />\n <Skeleton className=\"h-3 w-3/4 rounded\" />\n </div>\n ))}\n </div>\n }\n label={t(\"dispatch.sidebar.chats\", { defaultValue: \"Chats\" })}\n error={chatHistoryError}\n onSelect={(threadId) => openThread(threadId)}\n renameMaxLength={160}\n onRename={(threadId, title) => void renameThread(threadId, title)}\n labels={{\n options: (item) =>\n t(\"dispatch.sidebar.chatOptions\", {\n title: item.titleText ?? \"\",\n }),\n renameInput: (item) =>\n t(\"dispatch.sidebar.renameThread\", {\n title: item.titleText ?? \"\",\n }),\n rename: t(\"dispatch.sidebar.renameChat\"),\n }}\n renderAdditionalRowActions={(item, closeMenu) => (\n <>\n <button\n type=\"button\"\n role=\"menuitem\"\n className=\"an-chat-history-row__menu-item\"\n onClick={() => {\n closeMenu();\n void writeClipboardText(item.id).then((copied) => {\n toast[copied ? \"success\" : \"error\"](\n copied\n ? \"Session ID copied\"\n : \"Could not copy the session ID\",\n );\n });\n }}\n >\n <IconCopy size={13} strokeWidth={1.8} />\n <span>Copy session ID</span>\n </button>\n {!chatFirstEmbedded ? (\n <button\n type=\"button\"\n role=\"menuitem\"\n className=\"an-chat-history-row__menu-item\"\n onClick={() => {\n closeMenu();\n emitChatFirstSessionWatch({\n sessionId: item.id,\n title: item.titleText,\n kind: \"agent-chat\",\n sourceSessionId: displayedActiveThreadId ?? undefined,\n });\n }}\n >\n <IconEye size={13} strokeWidth={1.8} />\n <span>Watch and message session</span>\n </button>\n ) : null}\n </>\n )}\n className=\"min-w-0 px-2\"\n />\n ) : !collapsedChatFirst ? (\n <ChatHistoryRail\n items={chatItems}\n activeId={displayedActiveThreadId}\n onSelect={(threadId) => openThread(threadId)}\n onNewChat={() => void handleNewChat()}\n railLabels={{\n newChat: t(\"dispatch.sidebar.newChat\"),\n showMore: t(\"dispatch.sidebar.chats\"),\n showLess: t(\"dispatch.sidebar.chats\"),\n }}\n error={chatHistoryError}\n renameMaxLength={160}\n onRename={(threadId, title) => void renameThread(threadId, title)}\n labels={{\n options: (item) =>\n t(\"dispatch.sidebar.chatOptions\", {\n title: item.titleText ?? \"\",\n }),\n renameInput: (item) =>\n t(\"dispatch.sidebar.renameThread\", {\n title: item.titleText ?? \"\",\n }),\n rename: t(\"dispatch.sidebar.renameChat\"),\n }}\n renderAdditionalRowActions={(item, closeMenu) => (\n <>\n <button\n type=\"button\"\n role=\"menuitem\"\n className=\"an-chat-history-row__menu-item\"\n onClick={() => {\n closeMenu();\n void writeClipboardText(item.id).then((copied) => {\n toast[copied ? \"success\" : \"error\"](\n copied\n ? \"Session ID copied\"\n : \"Could not copy the session ID\",\n );\n });\n }}\n >\n <IconCopy size={13} strokeWidth={1.8} />\n <span>Copy session ID</span>\n </button>\n {chatFirstMode && !chatFirstEmbedded ? (\n <button\n type=\"button\"\n role=\"menuitem\"\n className=\"an-chat-history-row__menu-item\"\n onClick={() => {\n closeMenu();\n emitChatFirstSessionWatch({\n sessionId: item.id,\n title: item.titleText,\n kind: \"agent-chat\",\n sourceSessionId: displayedActiveThreadId ?? undefined,\n });\n }}\n >\n <IconEye size={13} strokeWidth={1.8} />\n <span>Watch and message session</span>\n </button>\n ) : null}\n </>\n )}\n className=\"min-w-0 px-2\"\n />\n ) : null}\n </div>\n );\n}\n\nexport function NavContent({\n onNavigate,\n extensions,\n chatFirstMode = false,\n chatFirstEmbedded = false,\n collapsed = false,\n collapsible = false,\n onCollapsedChange,\n chatFirstAppLayout,\n onChatFirstAppLayoutChange,\n chatFirstApps = [],\n chatFirstAppsLoading = false,\n chatFirstAppsError,\n chatFirstActiveAppId,\n chatFirstActivePrimaryTab,\n onChatFirstNewChat,\n onChatFirstAppOpen,\n onChatFirstAppsRetry,\n}: {\n onNavigate?: () => void;\n extensions?: DispatchExtensionConfig;\n chatFirstMode?: boolean;\n chatFirstEmbedded?: boolean;\n collapsed?: boolean;\n collapsible?: boolean;\n onCollapsedChange?: (collapsed: boolean) => void;\n chatFirstAppLayout?: ChatFirstAppLayoutPreference;\n onChatFirstAppLayoutChange?: (layout: ChatFirstAppLayoutPreference) => void;\n chatFirstApps?: readonly ChatFirstAppItem[];\n chatFirstAppsLoading?: boolean;\n chatFirstAppsError?: string | null;\n chatFirstActiveAppId?: string;\n chatFirstActivePrimaryTab?: ChatFirstPrimaryTab;\n onChatFirstNewChat?: () => void;\n onChatFirstAppOpen?: (app: ChatFirstAppItem) => void;\n onChatFirstAppsRetry?: () => void;\n}) {\n const t = useT();\n const chatFirstCopy = useMemo(() => createDispatchChatFirstCopy(t), [t]);\n const location = useLocation();\n const navigate = useNavigate();\n const extensionNavItems = extensions?.navItems ?? EMPTY_NAV_ITEMS;\n const primaryNavItems = [\n ...PRIMARY_NAV_ITEMS,\n ...navItemsForSection(extensionNavItems, \"primary\"),\n ];\n const localPathname = localDispatchPath(location.pathname);\n const navLabel = (item: DispatchNavItem) => {\n const key =\n item.id === \"thread-debug\"\n ? \"threadDebug\"\n : item.id === \"workspace\"\n ? \"resources\"\n : item.id;\n return t(`dispatch.nav.${key}`, { defaultValue: item.label });\n };\n\n const collapseButton = collapsible ? (\n <Tooltip>\n <TooltipTrigger asChild>\n <button\n type=\"button\"\n onClick={() => onCollapsedChange?.(!collapsed)}\n aria-label={\n collapsed\n ? t(\"sidebar.expandSidebar\")\n : t(\"sidebar.collapseSidebar\")\n }\n className=\"flex h-8 w-8 shrink-0 items-center justify-center rounded-md text-sidebar-foreground/65 transition-colors hover:bg-sidebar-accent hover:text-sidebar-accent-foreground\"\n >\n {collapsed ? (\n <IconLayoutSidebarLeftExpand className=\"h-4 w-4 rtl:-scale-x-100\" />\n ) : (\n <IconLayoutSidebarLeftCollapse className=\"h-4 w-4 rtl:-scale-x-100\" />\n )}\n </button>\n </TooltipTrigger>\n <TooltipContent side=\"right\">\n {collapsed ? t(\"sidebar.expandSidebar\") : t(\"sidebar.collapseSidebar\")}\n </TooltipContent>\n </Tooltip>\n ) : null;\n const searchButton = (\n <Tooltip>\n <TooltipTrigger asChild>\n <button\n type=\"button\"\n onClick={openCommandMenu}\n aria-label={t(\"sidebar.search\")}\n className=\"flex h-8 w-8 items-center justify-center rounded-md text-sidebar-foreground/65 transition-colors hover:bg-sidebar-accent hover:text-sidebar-accent-foreground\"\n >\n <IconSearch className=\"h-4 w-4\" />\n </button>\n </TooltipTrigger>\n <TooltipContent side=\"right\">{t(\"sidebar.search\")}</TooltipContent>\n </Tooltip>\n );\n const feedbackButton = (\n <FeedbackButton\n variant={collapsed ? \"icon\" : \"sidebar\"}\n side=\"right\"\n className={collapsed ? \"size-8\" : \"min-w-0\"}\n />\n );\n const chatFirstCreateAppTrigger = (\n <CreateAppPopover\n align=\"start\"\n trigger={\n <button\n type=\"button\"\n className=\"flex size-6 items-center justify-center rounded text-sidebar-foreground/55 hover:bg-sidebar-accent hover:text-sidebar-foreground\"\n aria-label={chatFirstCopy(\"createWorkspaceApp\")}\n title={chatFirstCopy(\"createWorkspaceApp\")}\n >\n <IconPlus size={14} aria-hidden=\"true\" />\n </button>\n }\n />\n );\n\n const chatFirstAppsRail = (\n <ChatFirstAppsRail\n apps={chatFirstApps}\n activeAppId={chatFirstActiveAppId}\n collapsed={collapsed}\n loading={chatFirstAppsLoading}\n error={chatFirstAppsError}\n layout={chatFirstAppLayout}\n onLayoutChange={onChatFirstAppLayoutChange}\n onRetry={onChatFirstAppsRetry}\n onOpenApp={(app) => {\n onChatFirstAppOpen?.(app);\n onNavigate?.();\n }}\n onOpenAllApps={() => {\n navigate(dispatchNavLinkTarget(\"/apps\"));\n onNavigate?.();\n }}\n createAppTrigger={chatFirstCreateAppTrigger}\n renderIcon={(app, options) => (\n <AppIcon\n id={app.id}\n name={app.name}\n size=\"sm\"\n monochrome={options?.isInactive}\n className=\"size-7 rounded-lg\"\n />\n )}\n copy={chatFirstCopy}\n />\n );\n\n const renderNavItem = (item: DispatchNavItem) => {\n const Icon = item.icon;\n const itemMatchesLocalPath = navItemMatchesPath(item, localPathname);\n const label = navLabel(item);\n return (\n <li key={item.id}>\n {collapsed ? (\n <Tooltip>\n <TooltipTrigger asChild>\n <Link\n to={dispatchNavLinkTarget(item.to)}\n onClick={(event) => {\n if (\n item.id === \"chat\" &&\n localPathname !== \"/chat\" &&\n !event.metaKey &&\n !event.ctrlKey &&\n !event.shiftKey &&\n !event.altKey\n ) {\n event.preventDefault();\n navigateWithAgentChatViewTransition(\n navigate,\n dispatchNavLinkTarget(\"/chat\"),\n );\n onNavigate?.();\n return;\n }\n onNavigate?.();\n }}\n aria-label={label}\n aria-current={itemMatchesLocalPath ? \"page\" : undefined}\n className={cn(\n \"flex size-9 items-center justify-center rounded-md text-sm\",\n itemMatchesLocalPath\n ? \"bg-sidebar-accent font-medium text-sidebar-accent-foreground\"\n : \"text-sidebar-foreground/70 hover:bg-sidebar-accent hover:text-sidebar-accent-foreground\",\n )}\n >\n {Icon ? (\n <Icon size={16} className=\"shrink-0\" />\n ) : (\n <span className=\"h-4 w-4 shrink-0\" aria-hidden=\"true\" />\n )}\n </Link>\n </TooltipTrigger>\n <TooltipContent side=\"right\">{label}</TooltipContent>\n </Tooltip>\n ) : (\n <Link\n to={dispatchNavLinkTarget(item.to)}\n onClick={(event) => {\n if (\n item.id === \"chat\" &&\n localPathname !== \"/chat\" &&\n !event.metaKey &&\n !event.ctrlKey &&\n !event.shiftKey &&\n !event.altKey\n ) {\n event.preventDefault();\n navigateWithAgentChatViewTransition(\n navigate,\n dispatchNavLinkTarget(\"/chat\"),\n );\n onNavigate?.();\n return;\n }\n onNavigate?.();\n }}\n aria-current={itemMatchesLocalPath ? \"page\" : undefined}\n className={cn(\n \"flex h-8 w-full items-center gap-2 rounded-md px-2 text-sm\",\n itemMatchesLocalPath\n ? \"bg-sidebar-accent font-medium text-sidebar-accent-foreground\"\n : \"text-sidebar-foreground/70 hover:bg-sidebar-accent hover:text-sidebar-accent-foreground\",\n )}\n >\n {Icon ? (\n <Icon size={16} className=\"shrink-0\" />\n ) : (\n <span className=\"h-4 w-4 shrink-0\" aria-hidden=\"true\" />\n )}\n <span className=\"truncate\">{label}</span>\n </Link>\n )}\n {!collapsed && item.id === \"chat\" && itemMatchesLocalPath ? (\n <DispatchChatsSection\n onNavigate={onNavigate}\n chatFirstMode={chatFirstMode}\n chatFirstEmbedded={chatFirstEmbedded}\n />\n ) : null}\n </li>\n );\n };\n\n const bottomNavigation = (\n <nav className={cn(\"py-1\", collapsed ? \"px-1.5\" : \"px-2\")}>\n <ul\n className={cn(\n collapsed ? \"flex flex-col items-center gap-1\" : \"space-y-0.5\",\n )}\n >\n {BOTTOM_NAV_ITEMS.map(renderNavItem)}\n </ul>\n </nav>\n );\n const organizationPicker = (\n <div\n className={cn(\"py-2\", collapsed ? \"flex justify-center px-1\" : \"px-3\")}\n >\n <OrgSwitcher compact={collapsed} reserveSpace currentAppId=\"dispatch\" />\n </div>\n );\n const sidebarFooterActions = (\n <SidebarFooterActions\n collapsed={collapsed}\n feedback={feedbackButton}\n search={searchButton}\n collapse={collapseButton}\n />\n );\n\n return (\n <>\n <div\n className={cn(\n \"flex h-12 shrink-0 items-center border-b border-sidebar-border\",\n collapsed ? \"justify-center px-0\" : \"px-4\",\n )}\n >\n <Link\n to={dispatchNavLinkTarget(\"/overview\")}\n aria-label={`${DISPATCH_SIDEBAR_LABEL} overview`}\n data-dispatch-logo\n className={cn(\n \"flex items-center rounded-md focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-sidebar-ring\",\n collapsed ? \"justify-center\" : \"gap-2\",\n )}\n >\n <img\n src={appPath(\"/agent-native-icon-light.svg\")}\n alt=\"\"\n aria-hidden=\"true\"\n width={35}\n height={20}\n className={cn(\n \"block shrink-0 object-contain object-center dark:hidden\",\n collapsed ? \"h-4 w-7\" : \"h-5 w-[35px]\",\n )}\n />\n <img\n src={appPath(\"/agent-native-icon-dark.svg\")}\n alt=\"\"\n aria-hidden=\"true\"\n width={35}\n height={20}\n className={cn(\n \"hidden shrink-0 object-contain object-center dark:block\",\n collapsed ? \"h-4 w-7\" : \"h-5 w-[35px]\",\n )}\n />\n {!collapsed && (\n <div className=\"min-w-0 flex-1\">\n <div\n data-dispatch-sidebar-label\n className=\"truncate text-lg font-bold tracking-tight text-foreground\"\n >\n {DISPATCH_SIDEBAR_LABEL}\n </div>\n </div>\n )}\n </Link>\n </div>\n\n {chatFirstMode ? (\n <div className=\"flex min-h-0 flex-1 flex-col overflow-y-auto\">\n <DispatchChatsSection\n onNavigate={onNavigate}\n showNewChat\n chatFirstMode\n chatFirstEmbedded={chatFirstEmbedded}\n collapsed={collapsed}\n chatFirstNavigation={{\n activeTab: chatFirstActivePrimaryTab,\n onNewChat: onChatFirstNewChat,\n onOpenIntegrations: () => {\n navigate(dispatchNavLinkTarget(\"/admin/integrations\"));\n onNavigate?.();\n },\n onOpenScheduled: () => {\n navigate(dispatchNavLinkTarget(\"/admin/automations\"));\n onNavigate?.();\n },\n }}\n prelude={chatFirstAppsRail}\n />\n </div>\n ) : null}\n {!chatFirstMode ? (\n <div className=\"min-h-0 flex-1 overflow-y-auto\">\n <nav className={cn(\"py-2\", collapsed ? \"px-1.5\" : \"px-2\")}>\n <ul\n className={cn(\n collapsed ? \"flex flex-col items-center gap-1\" : \"space-y-0.5\",\n )}\n >\n {primaryNavItems.map(renderNavItem)}\n </ul>\n </nav>\n </div>\n ) : null}\n <div\n className=\"mt-auto shrink-0\"\n data-dispatch-sidebar-footer={chatFirstMode ? \"chat-first\" : \"standard\"}\n >\n {bottomNavigation}\n {organizationPicker}\n {sidebarFooterActions}\n </div>\n </>\n );\n}\n\n/**\n * Below 768px `ChatFirstSurfacePanel` is already a full-screen overlay\n * (surface-panel.tsx). Mounting the sub-app's own `AgentSidebar` chat rail\n * inside it too would stack a second full-screen shell on top of it, so the\n * rail only gets its own chat surface once there is room beside the panel.\n */\nexport function renderChatFirstAppSurfaceTab({\n registration,\n embedPath,\n loading,\n isMobileSurface,\n copy,\n}: {\n registration: ChatFirstAppRegistration | null;\n embedPath: string;\n loading: boolean;\n isMobileSurface: boolean;\n copy: ChatFirstCopy;\n}): ReactNode {\n if (!registration) {\n return (\n <ChatFirstAppPane\n app={null}\n status={loading ? \"loading\" : \"unresolved\"}\n renderEmbed={() => null}\n copy={copy}\n />\n );\n }\n if (!embedPath.startsWith(\"/\")) {\n return (\n <ChatFirstAppPane\n app={{\n id: registration.id,\n name: registration.name ?? registration.id,\n }}\n status=\"error\"\n errorMessage={copy(\"appUnavailable\")}\n renderEmbed={() => null}\n copy={copy}\n />\n );\n }\n return (\n <WorkspaceAppFrame\n app={{\n id: registration.id,\n name: registration.name ?? registration.id,\n path: registration.path,\n url: registration.url,\n }}\n embedPath={embedPath}\n chatSidebar={!isMobileSurface}\n copy={copy}\n />\n );\n}\n\nexport function Layout({\n children,\n extensions,\n agentPageHref,\n}: {\n children: ReactNode;\n extensions?: DispatchExtensionConfig;\n agentPageHref?: string;\n}) {\n const t = useT();\n const location = useLocation();\n const navigate = useNavigate();\n const [mobileOpen, setMobileOpen] = useState(false);\n // Drives renderChatFirstSurfaceTab's app-tab chatSidebar decision below —\n // the chat-first surface panel is already a full-screen overlay at this\n // width, so an app tab must not also mount its own full-screen chat rail.\n const isMobileSurface = useIsMobile();\n const [sidebarCollapsed, setSidebarCollapsed] = useState(() => {\n if (typeof window === \"undefined\") return false;\n try {\n return window.localStorage.getItem(SIDEBAR_COLLAPSE_KEY) === \"1\";\n } catch {\n return false;\n }\n });\n const localPathname = localDispatchPath(location.pathname);\n const [electronEmbedded] = useState(() =>\n typeof window !== \"undefined\"\n ? isElectronEmbeddedSearch(window.location.search)\n : false,\n );\n const isChatRoute =\n localPathname === \"/chat\" || localPathname.startsWith(\"/chat/\");\n const chatFirstSurfaceScope = threadIdFromPath(localPathname) ?? \"new\";\n const isWorkspaceAppRoute = shouldAutoCollapseDispatchSidebar(\n location.pathname,\n );\n const workspaceAppId = isWorkspaceAppRoute\n ? workspaceAppIdFromRoute(localPathname)\n : null;\n const workspaceAppRouteActive = Boolean(workspaceAppId);\n const isWorkspaceAppHostRoute =\n isWorkspaceAppRoute &&\n typeof window !== \"undefined\" &&\n new URLSearchParams(window.location.search).get(\"embedded\") === \"1\";\n const [chatFirstPreference, setChatFirstPreference] = useState(() =>\n readChatFirstMode(),\n );\n const chatFirstEmbedded =\n typeof window !== \"undefined\" &&\n new URLSearchParams(window.location.search).get(\"chatFirst\") === \"1\";\n const chatFirstMode =\n extensions?.chatFirst === true || chatFirstPreference || chatFirstEmbedded;\n const chatFirstHasActiveChat = chatFirstSurfaceScope !== \"new\";\n useEffect(() => {\n if (!electronEmbedded || typeof window === \"undefined\") return;\n const url = new URL(window.location.href);\n if (isElectronEmbeddedSearch(url.search)) return;\n url.searchParams.set(\"electron\", \"1\");\n window.history.replaceState(\n window.history.state,\n \"\",\n `${url.pathname}${url.search}${url.hash}`,\n );\n }, [electronEmbedded, location.pathname, location.search]);\n const [chatFirstAppLayout, setChatFirstAppLayout] =\n useState<ChatFirstAppLayoutPreference>(() => readChatFirstAppLayout());\n const chatFirstAppLayoutHydratedRef = useRef(false);\n const chatFirstAppsQuery = useActionQuery<WorkspaceAppSummary[]>(\n \"list-workspace-apps\",\n { includeAgentCards: false, includeArchived: true },\n { enabled: chatFirstMode },\n );\n const chatFirstGrantedAppsQuery = useActionQuery<ChatFirstGrantedAppsResult>(\n \"list_apps\",\n {},\n { enabled: chatFirstMode },\n );\n const chatFirstWorkspaceApps = useMemo(\n () => mergeChatFirstWorkspaceApps(chatFirstAppsQuery.data),\n [chatFirstAppsQuery.data],\n );\n const chatFirstAppRegistrations = useMemo<ChatFirstAppRegistration[]>(() => {\n const registrations = new Map<string, ChatFirstAppRegistration>();\n for (const app of chatFirstWorkspaceApps) {\n registrations.set(app.id.toLowerCase(), {\n id: app.id,\n name: app.name,\n path: app.path,\n url: app.url,\n enabled: app.status !== \"pending\" && app.archived !== true,\n });\n }\n for (const app of chatFirstGrantedAppsQuery.data?.apps ?? []) {\n const id = app.id.trim();\n if (!id || registrations.has(id.toLowerCase())) continue;\n registrations.set(id.toLowerCase(), {\n id,\n name: app.name,\n url: app.url,\n enabled: true,\n });\n }\n return [...registrations.values()];\n }, [chatFirstGrantedAppsQuery.data?.apps, chatFirstWorkspaceApps]);\n const chatFirstAppItems = useMemo<ChatFirstAppItem[]>(\n () =>\n chatFirstAppRegistrations\n .filter(\n (app) => app.enabled && isWorkspaceAppVisibleInDefaultLaunchers(app),\n )\n .map((app) => ({\n id: app.id,\n name: app.name ?? app.id,\n })),\n [chatFirstAppRegistrations],\n );\n const openChatFirstApp = useCallback(\n (app: ChatFirstAppItem) => {\n if (isDispatchWorkspaceAppId(app.id)) return;\n const registration = chatFirstAppRegistrations.find(\n (candidate) => candidate.id.toLowerCase() === app.id.toLowerCase(),\n );\n const directHref =\n registration &&\n !isWorkspaceSsoApp(registration) &&\n isPathMountedWorkspaceApp(registration)\n ? workspaceAppDirectHref(registration, \"/\")\n : null;\n if (directHref) {\n navigateToWorkspaceApp(directHref);\n return;\n }\n navigate(dispatchNavLinkTarget(workspaceAppRoute(app.id)));\n },\n [chatFirstAppRegistrations, navigate],\n );\n const chatFirstCopy = useMemo(() => createDispatchChatFirstCopy(t), [t]);\n const [chatFirstPane, setChatFirstPane] =\n useState<DispatchChatFirstPane | null>(null);\n const [chatFirstNotice, setChatFirstNotice] = useState<string | null>(null);\n const chatFirstSessionWatch = useChatFirstSessionWatch();\n const chatFirstSurfaceTabs = useChatFirstSurfaceTabs(chatFirstSurfaceScope);\n const chatFirstSurfaceTabsStore = getChatFirstSurfaceTabsStore(\n chatFirstSurfaceScope,\n );\n const chatFirstAgentsQuery = useActionQuery<SearchAgentThreadsResult>(\n \"search-agent-threads\",\n { sourceId: \"current\", limit: 12 },\n {\n enabled:\n chatFirstMode &&\n isChatRoute &&\n chatFirstSurfaceTabs.activeTabId?.startsWith(\"agents:\") === true,\n },\n );\n const chatFirstSurfacePanel = useChatFirstSurfacePanel(chatFirstSurfaceScope);\n const { setOpen: setChatFirstSurfacePanelOpen } = chatFirstSurfacePanel;\n const chatFirstSurfaceResize = useChatFirstSurfaceResize(\n chatFirstSurfaceScope,\n );\n const chatFirstPaneHydratedRef = useRef(false);\n const pendingChatFirstOpenAppRef = useRef<ChatFirstOpenAppDetail | null>(\n null,\n );\n const previousChatFirstSurfaceScopeRef = useRef(chatFirstSurfaceScope);\n const previousChatFirstSurfaceTabCountRef = useRef<number | null>(null);\n const activeChatFirstSurfaceTab = useMemo(\n () =>\n chatFirstSurfaceTabs.tabs.find(\n (tab) => tab.id === chatFirstSurfaceTabs.activeTabId,\n ) ?? null,\n [chatFirstSurfaceTabs],\n );\n const chatFirstAppTakesMain =\n chatFirstMode &&\n isChatRoute &&\n activeChatFirstSurfaceTab?.kind === \"app\" &&\n activeChatFirstSurfaceTab.placement === \"main\";\n const chatFirstAppSelected =\n chatFirstMode && activeChatFirstSurfaceTab?.kind === \"app\";\n const chatFirstActivePrimaryTab = chatFirstAppSelected\n ? activeChatFirstSurfaceTab?.kind === \"app\" &&\n activeChatFirstSurfaceTab.appId === \"dispatch\"\n ? chatFirstPrimaryTabForPath(activeChatFirstSurfaceTab.path ?? \"\")\n : undefined\n : chatFirstPrimaryTabForPath(localPathname);\n const chatFirstActiveAppId = isWorkspaceAppRoute\n ? (workspaceAppIdFromRoute(localPathname) ?? undefined)\n : chatFirstAppSelected && activeChatFirstSurfaceTab?.kind === \"app\"\n ? activeChatFirstSurfaceTab.appId\n : undefined;\n const chatFirstAgentActivities = useMemo<ChatFirstAgentActivity[]>(\n () =>\n (chatFirstAgentsQuery.data?.threads ?? []).map((thread) => ({\n sessionId: thread.id,\n title:\n thread.title || chatFirstCopy(\"agentsTitle\", { name: thread.id }),\n subtitle: thread.snippet || thread.preview || chatFirstCopy(\"session\"),\n status: \"recent\",\n ...(thread.updatedAt ? { updatedAt: thread.updatedAt } : {}),\n })),\n [chatFirstAgentsQuery.data, chatFirstCopy],\n );\n const persistChatFirstPane = useCallback(\n (pane: DispatchChatFirstPane | null) => {\n setChatFirstPane(pane);\n void writeClientAppState(CHAT_FIRST_PANE_STATE_KEY, pane).catch(() => {\n setChatFirstNotice(\n \"The app pane opened locally, but its focus could not be synced.\",\n );\n });\n },\n [],\n );\n useEffect(() => {\n if (!chatFirstMode || isChatRoute) return;\n persistChatFirstPane(null);\n closeChatFirstSessionWatch();\n chatFirstSurfaceTabsStore.closeAll();\n }, [\n chatFirstMode,\n chatFirstSurfaceTabsStore,\n isChatRoute,\n persistChatFirstPane,\n ]);\n const openChatFirstPane = useCallback(\n (\n pane: DispatchChatFirstPane,\n placement: ChatFirstAppSurfacePlacement = \"side\",\n ) => {\n if (placement === \"side\" && !chatFirstHasActiveChat) return;\n setSidebarCollapsed(true);\n setChatFirstNotice(null);\n closeChatFirstSessionWatch();\n if (!isChatRoute) {\n navigateWithAgentChatViewTransition(\n navigate,\n dispatchNavLinkTarget(\"/chat\"),\n );\n }\n const app = chatFirstAppRegistrations.find(\n (candidate) => candidate.id === pane.appId,\n );\n chatFirstSurfaceTabsStore.open({\n id: chatFirstSurfaceTabId(\n \"app\",\n `${pane.appId}:${pane.path ?? pane.view ?? \"/\"}`,\n ),\n kind: \"app\",\n title: app?.name ?? pane.appId,\n appId: pane.appId,\n placement,\n ...(pane.path ? { path: pane.path } : {}),\n ...(pane.view ? { view: pane.view } : {}),\n });\n setChatFirstSurfacePanelOpen(true);\n persistChatFirstPane({ ...pane, placement });\n },\n [\n chatFirstAppRegistrations,\n chatFirstSurfaceTabsStore,\n chatFirstHasActiveChat,\n persistChatFirstPane,\n isChatRoute,\n navigate,\n setChatFirstSurfacePanelOpen,\n ],\n );\n const openChatFirstSurface = useCallback(\n (kind: ChatFirstSurfaceKind) => {\n if (kind === \"browser\") {\n persistChatFirstPane(null);\n closeChatFirstSessionWatch();\n chatFirstSurfaceTabsStore.open({\n id: chatFirstSurfaceTabId(\"browser\", \"homepage\"),\n kind: \"browser\",\n title: \"Browser\",\n url: \"https://www.google.com/\",\n });\n return;\n }\n if (kind !== \"agents\") return;\n persistChatFirstPane(null);\n closeChatFirstSessionWatch();\n chatFirstSurfaceTabsStore.open({\n id: chatFirstSurfaceTabId(\"agents\", \"activity\"),\n kind: \"agents\",\n title: \"Agents\",\n });\n },\n [chatFirstSurfaceTabsStore, persistChatFirstPane],\n );\n const resolveChatFirstOpenBrowser = useCallback(\n (detail: ChatFirstOpenBrowserDetail) => {\n const resolution = resolveChatFirstBrowserTarget(detail);\n if (resolution.status === \"unresolved\") {\n setChatFirstNotice(\n chatFirstBrowserResolutionMessage(resolution.reason),\n );\n return;\n }\n if (resolution.target.openExternally && typeof window !== \"undefined\") {\n try {\n // Builder's Visual Editor rejects iframe ancestors with CSP/X-Frame-\n // Options. Prefer the real browser tab; the browser pane below is a\n // visible fallback when popup policy blocks this non-click event.\n if (\n window.open(resolution.target.url, \"_blank\", \"noopener,noreferrer\")\n ) {\n return;\n }\n } catch (error) {\n console.warn(\n \"[chat-first] external browser open failed; keeping link fallback\",\n error,\n );\n // Fall through to the non-iframe browser pane below.\n }\n }\n persistChatFirstPane(null);\n closeChatFirstSessionWatch();\n setChatFirstNotice(null);\n chatFirstSurfaceTabsStore.open({\n id: chatFirstSurfaceTabId(\"browser\", resolution.target.url),\n kind: \"browser\",\n title: resolution.target.title ?? \"Browser\",\n url: resolution.target.url,\n });\n },\n [chatFirstSurfaceTabsStore, persistChatFirstPane],\n );\n const resolveChatFirstOpenApp = useCallback(\n (detail: ChatFirstOpenAppDetail) => {\n if (chatFirstAppsQuery.isLoading || chatFirstGrantedAppsQuery.isLoading) {\n pendingChatFirstOpenAppRef.current = detail;\n return;\n }\n if (chatFirstAppsQuery.isError) {\n pendingChatFirstOpenAppRef.current = null;\n setChatFirstNotice(\n \"Workspace apps could not be loaded, so the requested app was not opened.\",\n );\n return;\n }\n\n const resolution = resolveChatFirstAppTarget(\n detail,\n chatFirstAppRegistrations,\n {\n currentOrigin:\n typeof window === \"undefined\" ? undefined : window.location.origin,\n },\n );\n pendingChatFirstOpenAppRef.current = null;\n if (resolution.status === \"unresolved\") {\n setChatFirstNotice(chatFirstResolutionMessage(resolution.reason));\n return;\n }\n if (isDispatchWorkspaceAppId(resolution.target.appId)) {\n closeChatFirstSessionWatch();\n chatFirstSurfaceTabsStore.closeAll();\n setChatFirstSurfacePanelOpen(false);\n persistChatFirstPane(null);\n if (resolution.target.path) {\n navigateWithAgentChatViewTransition(\n navigate,\n dispatchNavLinkTarget(resolution.target.path),\n );\n }\n return;\n }\n openChatFirstPane(resolution.target);\n },\n [\n chatFirstAppRegistrations,\n chatFirstAppsQuery.isError,\n chatFirstAppsQuery.isLoading,\n chatFirstGrantedAppsQuery.isLoading,\n chatFirstSurfaceTabsStore,\n closeChatFirstSessionWatch,\n openChatFirstPane,\n navigate,\n persistChatFirstPane,\n setChatFirstSurfacePanelOpen,\n ],\n );\n const chatHomeHandoffActive = useAgentChatHomeHandoff({\n storageKey: \"dispatch\",\n activePath: localPathname,\n enabled: !isChatRoute,\n });\n const chatHandoffLinkOptions = {\n storageKey: \"dispatch\",\n isChatPath: (pathname: string) =>\n pathname === \"/chat\" || pathname.startsWith(\"/chat/\"),\n requireActiveHandoff: true,\n };\n useAgentChatHomeHandoffLinks(chatHandoffLinkOptions);\n\n useEffect(() => {\n const handleModeChange = (event: Event) => {\n const enabled = (event as CustomEvent<{ enabled?: unknown }>).detail\n ?.enabled;\n setChatFirstPreference(enabled === true);\n };\n window.addEventListener(CHAT_FIRST_MODE_CHANGED_EVENT, handleModeChange);\n return () =>\n window.removeEventListener(\n CHAT_FIRST_MODE_CHANGED_EVENT,\n handleModeChange,\n );\n }, []);\n\n useEffect(() => {\n if (\n !chatFirstMode ||\n !isChatRoute ||\n chatFirstAppLayoutHydratedRef.current\n ) {\n return;\n }\n chatFirstAppLayoutHydratedRef.current = true;\n void readClientAppState<unknown>(\"chat-first-app-layout\")\n .then((value) => {\n if (!value || typeof value !== \"object\") return;\n const candidate = value as Partial<ChatFirstAppLayoutPreference>;\n const ids = (input: unknown) =>\n Array.isArray(input)\n ? input.filter(\n (id): id is string =>\n typeof id === \"string\" && id.trim().length > 0,\n )\n : [];\n setChatFirstAppLayout({\n pinnedIds: [...new Set(ids(candidate.pinnedIds))],\n orderedIds: [...new Set(ids(candidate.orderedIds))],\n });\n })\n .catch(() => {\n // Device-local layout remains the fallback when workspace state is unavailable.\n });\n }, [chatFirstMode, isChatRoute]);\n\n const persistChatFirstAppLayout = useCallback(\n (layout: ChatFirstAppLayoutPreference) => {\n setChatFirstAppLayout(layout);\n void writeClientAppState(\"chat-first-app-layout\", layout).catch(() => {\n setChatFirstNotice(\n \"App order changed locally, but workspace state could not be synced.\",\n );\n });\n },\n [],\n );\n\n useEffect(() => {\n if (!chatFirstMode) {\n setChatFirstPane(null);\n closeChatFirstSessionWatch();\n chatFirstSurfaceTabsStore.closeAll();\n setChatFirstNotice(null);\n pendingChatFirstOpenAppRef.current = null;\n chatFirstPaneHydratedRef.current = false;\n return;\n }\n const unsubscribeApp = subscribeChatFirstOpenApp(resolveChatFirstOpenApp);\n const unsubscribeBrowser = subscribeChatFirstOpenBrowser(\n resolveChatFirstOpenBrowser,\n );\n return () => {\n unsubscribeApp();\n unsubscribeBrowser();\n };\n }, [\n chatFirstMode,\n isChatRoute,\n chatFirstSurfaceTabsStore,\n resolveChatFirstOpenApp,\n resolveChatFirstOpenBrowser,\n ]);\n\n useEffect(() => {\n if (\n !chatFirstMode ||\n !isChatRoute ||\n chatFirstPaneHydratedRef.current ||\n chatFirstAppsQuery.isLoading ||\n chatFirstAppsQuery.isError\n ) {\n return;\n }\n chatFirstPaneHydratedRef.current = true;\n if (chatFirstPane) return;\n let active = true;\n void readClientAppState<unknown>(CHAT_FIRST_PANE_STATE_KEY)\n .then((value) => {\n if (!active) return;\n const persisted = persistedChatFirstPane(value);\n if (!persisted) return;\n const resolution = resolveChatFirstAppTarget(\n {\n app: persisted.appId,\n path: persisted.path,\n view: persisted.view,\n },\n chatFirstAppRegistrations,\n {\n currentOrigin:\n typeof window === \"undefined\"\n ? undefined\n : window.location.origin,\n },\n );\n if (resolution.status === \"ready\") {\n openChatFirstPane(resolution.target, persisted.placement);\n }\n })\n .catch(() => {\n if (active) {\n setChatFirstNotice(\n \"The last app pane could not be restored from workspace state.\",\n );\n }\n });\n return () => {\n active = false;\n };\n }, [\n chatFirstAppsQuery.isError,\n chatFirstAppsQuery.isLoading,\n chatFirstAppRegistrations,\n chatFirstMode,\n chatFirstPane,\n isChatRoute,\n openChatFirstPane,\n ]);\n\n useEffect(() => {\n if (previousChatFirstSurfaceScopeRef.current === chatFirstSurfaceScope) {\n return;\n }\n previousChatFirstSurfaceScopeRef.current = chatFirstSurfaceScope;\n persistChatFirstPane(null);\n setChatFirstNotice(null);\n pendingChatFirstOpenAppRef.current = null;\n chatFirstPaneHydratedRef.current = true;\n chatFirstSurfaceTabsStore.closeAll();\n setChatFirstSurfacePanelOpen(false);\n closeChatFirstSessionWatch();\n }, [\n chatFirstSurfaceScope,\n chatFirstSurfaceTabsStore,\n persistChatFirstPane,\n setChatFirstSurfacePanelOpen,\n ]);\n\n useEffect(() => {\n const tabCount = chatFirstSurfaceTabs.tabs.length;\n const previousTabCount = previousChatFirstSurfaceTabCountRef.current;\n if (!chatFirstMode || !chatFirstHasActiveChat) {\n setChatFirstSurfacePanelOpen(false);\n } else if (\n tabCount > 0 &&\n (previousTabCount === null || previousTabCount === 0)\n ) {\n setChatFirstSurfacePanelOpen(true);\n } else if (\n tabCount === 0 &&\n previousTabCount !== null &&\n previousTabCount > 0\n ) {\n setChatFirstSurfacePanelOpen(false);\n }\n previousChatFirstSurfaceTabCountRef.current = tabCount;\n }, [\n chatFirstMode,\n chatFirstHasActiveChat,\n setChatFirstSurfacePanelOpen,\n chatFirstSurfaceTabs.tabs.length,\n isChatRoute,\n ]);\n\n useEffect(() => {\n const activeTab = activeChatFirstSurfaceTab;\n if (\n activeTab?.kind === \"side-chat\" &&\n activeTab.session &&\n !chatFirstSessionWatch.target\n ) {\n emitChatFirstSessionWatch(activeTab.session);\n }\n }, [activeChatFirstSurfaceTab, chatFirstSessionWatch.target]);\n\n useEffect(() => {\n const pending = pendingChatFirstOpenAppRef.current;\n if (\n !pending ||\n chatFirstAppsQuery.isLoading ||\n chatFirstGrantedAppsQuery.isLoading\n )\n return;\n resolveChatFirstOpenApp(pending);\n }, [\n chatFirstAppsQuery.data,\n chatFirstAppsQuery.isError,\n chatFirstAppsQuery.isLoading,\n chatFirstGrantedAppsQuery.data,\n chatFirstGrantedAppsQuery.isLoading,\n resolveChatFirstOpenApp,\n ]);\n\n useEffect(() => {\n const target = chatFirstSessionWatch.target;\n if (!target || !chatFirstMode || !isChatRoute) return;\n setChatFirstPane(null);\n chatFirstSurfaceTabsStore.open({\n id: chatFirstSurfaceTabId(\"side-chat\", target.sessionId),\n kind: \"side-chat\",\n title: target.title ? `Watch · ${target.title}` : \"Watched session\",\n session: target,\n });\n }, [\n chatFirstMode,\n chatFirstSessionWatch.target,\n chatFirstSurfaceTabsStore,\n isChatRoute,\n ]);\n\n useEffect(() => {\n if (!isWorkspaceAppRoute) return;\n setSidebarCollapsed(true);\n }, [isWorkspaceAppRoute, localPathname]);\n\n useEffect(() => {\n if (!workspaceAppRouteActive && !chatFirstAppTakesMain) return;\n\n const handleWorkspaceAppMessage = (event: MessageEvent) => {\n if (event.data?.type !== \"agentNative.toggleSidebar\") return;\n const frame = [\n ...document.querySelectorAll<HTMLIFrameElement>(\n \"[data-dispatch-workspace-app-frame]\",\n ),\n ].find(\n (candidate) =>\n candidate\n .closest(\"[data-chat-first-surface-content]\")\n ?.getAttribute(\"aria-hidden\") !== \"true\",\n );\n if (!(frame instanceof HTMLIFrameElement)) return;\n if (event.source !== frame.contentWindow) return;\n\n const open = event.data.data?.open;\n if (open === true) {\n window.dispatchEvent(new Event(\"agent-panel:open\"));\n } else if (open === false) {\n window.dispatchEvent(new Event(\"agent-panel:close\"));\n } else {\n window.dispatchEvent(new Event(\"agent-panel:toggle\"));\n }\n };\n\n window.addEventListener(\"message\", handleWorkspaceAppMessage);\n return () =>\n window.removeEventListener(\"message\", handleWorkspaceAppMessage);\n }, [chatFirstAppTakesMain, workspaceAppRouteActive]);\n\n useEffect(() => {\n if (typeof window === \"undefined\" || isWorkspaceAppHostRoute) return;\n try {\n window.localStorage.setItem(\n SIDEBAR_COLLAPSE_KEY,\n sidebarCollapsed ? \"1\" : \"0\",\n );\n } catch {\n // Ignore storage failures; the in-memory preference still works.\n }\n }, [isWorkspaceAppHostRoute, sidebarCollapsed]);\n\n const activateChatFirstSurfaceTab = useCallback(\n (tab: (typeof chatFirstSurfaceTabs.tabs)[number]) => {\n chatFirstSurfaceTabsStore.activate(tab.id);\n if (tab.kind === \"app\" && tab.appId) {\n closeChatFirstSessionWatch();\n persistChatFirstPane({\n appId: tab.appId,\n placement: tab.placement,\n ...(tab.path ? { path: tab.path } : {}),\n ...(tab.view ? { view: tab.view } : {}),\n });\n return;\n }\n if (tab.kind === \"browser\" && tab.url) {\n persistChatFirstPane(null);\n closeChatFirstSessionWatch();\n return;\n }\n if (tab.kind === \"side-chat\" && tab.session) {\n persistChatFirstPane(null);\n emitChatFirstSessionWatch(tab.session);\n return;\n }\n if (tab.kind === \"agents\") {\n persistChatFirstPane(null);\n closeChatFirstSessionWatch();\n }\n },\n [\n chatFirstSurfaceTabs.tabs,\n chatFirstSurfaceTabsStore,\n persistChatFirstPane,\n ],\n );\n\n const closeChatFirstSurfaceTab = useCallback(\n (tab: (typeof chatFirstSurfaceTabs.tabs)[number]) => {\n const isActive = chatFirstSurfaceTabs.activeTabId === tab.id;\n if (tab.kind === \"app\" && isActive) persistChatFirstPane(null);\n if (tab.kind === \"side-chat\" && isActive) {\n closeChatFirstSessionWatch();\n }\n chatFirstSurfaceTabsStore.close(tab.id);\n },\n [chatFirstSurfaceTabs, chatFirstSurfaceTabsStore, persistChatFirstPane],\n );\n\n const closeAllChatFirstSurfaceTabs = useCallback(() => {\n persistChatFirstPane(null);\n closeChatFirstSessionWatch();\n chatFirstSurfaceTabsStore.closeAll();\n }, [chatFirstSurfaceTabsStore, persistChatFirstPane]);\n\n const renderChatFirstWatchChat = useCallback(\n (target: ChatFirstSessionReference) => (\n <AgentChatSurface\n mode=\"page\"\n className=\"h-full min-h-0 w-full\"\n defaultMode=\"chat\"\n storageKey={`dispatch-session-watch:${target.sessionId}`}\n restoreActiveThread={false}\n threadUrlSync={{\n routeThreadId: target.sessionId,\n getPath: chatThreadPath,\n navigate: () => undefined,\n }}\n showHeader={false}\n showTabBar={false}\n showPageNewChatButton={false}\n chatOnly\n dynamicSuggestions={false}\n suggestions={[]}\n suppressInlineOpenApp={chatFirstMode}\n emptyStateDisplay=\"hidden\"\n composerPlaceholder={t(\n \"dispatch.pages.chatFirstSessionMessagePlaceholder\",\n )}\n />\n ),\n [chatFirstMode, t],\n );\n\n const renderChatFirstSurfaceTab = useCallback(\n (tab: ChatFirstSurfaceTab) => {\n if (tab.kind === \"app\") {\n const registration = tab.appId\n ? (chatFirstAppRegistrations.find(\n (candidate) => candidate.id === tab.appId,\n ) ?? null)\n : null;\n return renderChatFirstAppSurfaceTab({\n registration,\n embedPath: tab.path ?? registration?.path ?? \"/\",\n loading: chatFirstAppsQuery.isLoading,\n isMobileSurface,\n copy: chatFirstCopy,\n });\n }\n if (tab.kind === \"browser\" && tab.url) {\n return (\n <ChatFirstBrowserPane\n url={tab.url}\n title={tab.title}\n onClose={() => closeChatFirstSurfaceTab(tab)}\n renderEmbed={({ url, title, key }: ChatFirstEmbedTarget) => (\n <iframe\n key={key}\n src={url}\n title={title ?? chatFirstCopy(\"browserPage\")}\n referrerPolicy=\"no-referrer\"\n allow=\"clipboard-read; clipboard-write\"\n className=\"h-full w-full border-0 bg-background\"\n />\n )}\n copy={chatFirstCopy}\n />\n );\n }\n if (tab.kind === \"side-chat\") {\n const target =\n tab.session ??\n (tab.id === chatFirstSurfaceTabs.activeTabId\n ? chatFirstSessionWatch.target\n : null);\n return target ? (\n <ChatFirstSessionWatchPane\n target={target}\n onClose={() => closeChatFirstSurfaceTab(tab)}\n renderChat={renderChatFirstWatchChat}\n copy={chatFirstCopy}\n />\n ) : null;\n }\n if (tab.kind === \"agents\") {\n return (\n <ChatFirstAgentsPane\n activities={chatFirstAgentActivities}\n loading={chatFirstAgentsQuery.isLoading}\n error={\n chatFirstAgentsQuery.isError\n ? chatFirstAgentsQuery.error.message\n : null\n }\n onRefresh={() => void chatFirstAgentsQuery.refetch()}\n onWatch={(activity) =>\n emitChatFirstSessionWatch({\n sessionId: activity.sessionId,\n title: activity.title,\n kind: \"agent-chat\",\n ...(activity.goalId ? { goalId: activity.goalId } : {}),\n })\n }\n copy={chatFirstCopy}\n />\n );\n }\n return null;\n },\n [\n chatFirstAgentActivities,\n chatFirstAgentsQuery.error,\n chatFirstAgentsQuery.isError,\n chatFirstAgentsQuery.isLoading,\n chatFirstAppsQuery.isLoading,\n chatFirstCopy,\n chatFirstSessionWatch.target,\n chatFirstSurfaceTabs.activeTabId,\n chatFirstAppRegistrations,\n closeChatFirstSurfaceTab,\n isMobileSurface,\n renderChatFirstWatchChat,\n ],\n );\n\n if (CHROMELESS_PATHS.some((path) => localPathname === path)) {\n return <>{children}</>;\n }\n\n if (electronEmbedded) {\n return (\n <DispatchExtensionsContext.Provider value={extensions}>\n <HeaderActionsProvider>\n <div\n data-dispatch-electron-control-plane\n className=\"flex h-screen w-full overflow-hidden bg-background\"\n >\n <div className=\"relative flex min-w-0 flex-1 flex-col overflow-hidden\">\n <Header showAgentToggle={false} />\n <InvitationBanner />\n <main className=\"flex-1 overflow-y-auto\">\n <div className=\"mx-auto max-w-7xl space-y-10 px-4 py-6 sm:px-6\">\n {children}\n </div>\n </main>\n </div>\n </div>\n </HeaderActionsProvider>\n </DispatchExtensionsContext.Provider>\n );\n }\n\n if (isWorkspaceAppHostRoute) {\n return (\n <DispatchExtensionsContext.Provider value={extensions}>\n <HeaderActionsProvider>\n <div\n data-dispatch-workspace-app-chrome-less\n className=\"h-screen w-full overflow-hidden bg-background\"\n >\n {children}\n </div>\n </HeaderActionsProvider>\n </DispatchExtensionsContext.Provider>\n );\n }\n\n const showHeader = !isChatRoute && !pageOwnsToolbar(localPathname);\n function openAskAgentFullscreen() {\n focusAgentChat();\n navigateWithAgentChatViewTransition(\n navigate,\n dispatchNavLinkTarget(\"/chat\"),\n );\n }\n const sidebarSuggestions = [\n t(\"dispatch.sidebar.suggestionBuildApp\"),\n t(\"dispatch.sidebar.suggestionRouteSlack\"),\n t(\"dispatch.sidebar.suggestionGrantKey\"),\n ];\n const appContent = (\n <div className=\"relative flex h-full min-w-0 flex-1 flex-col overflow-hidden\">\n {showHeader ? <Header onOpenMobile={() => setMobileOpen(true)} /> : null}\n <InvitationBanner />\n {isChatRoute && chatFirstMode && chatFirstHasActiveChat ? (\n <ChatFirstSurfacePanelToggle\n open={chatFirstSurfacePanel.open}\n onToggle={chatFirstSurfacePanel.toggle}\n className={CHAT_FIRST_SURFACE_PANEL_TOGGLE_CLASS_NAME}\n />\n ) : null}\n {isChatRoute && chatFirstMode && chatFirstNotice ? (\n <div\n className=\"dispatch-chat-first-notice\"\n role=\"status\"\n aria-live=\"polite\"\n >\n <span>{chatFirstNotice}</span>\n <button\n type=\"button\"\n onClick={() => setChatFirstNotice(null)}\n aria-label=\"Dismiss app notice\"\n >\n Dismiss\n </button>\n </div>\n ) : null}\n <main\n className={cn(\n \"flex-1\",\n isChatRoute || isWorkspaceAppRoute\n ? \"min-h-0 overflow-hidden\"\n : \"overflow-y-auto\",\n )}\n >\n {showHeader ? (\n <div className=\"mx-auto max-w-7xl space-y-10 px-4 py-6 sm:px-6\">\n {children}\n </div>\n ) : (\n children\n )}\n </main>\n </div>\n );\n const chatFirstSurfaceTabsBar =\n activeChatFirstSurfaceTab?.kind === \"app\" ? null : (\n <ChatFirstSurfaceTabs\n tabs={chatFirstSurfaceTabs.tabs}\n activeTabId={chatFirstSurfaceTabs.activeTabId}\n onActivate={activateChatFirstSurfaceTab}\n onClose={closeChatFirstSurfaceTab}\n onCloseOthers={(tab) => {\n activateChatFirstSurfaceTab(tab);\n chatFirstSurfaceTabsStore.closeOthers(tab.id);\n }}\n onCloseToRight={(tab) => {\n const targetIndex = chatFirstSurfaceTabs.tabs.findIndex(\n (candidate) => candidate.id === tab.id,\n );\n const activeIndex = chatFirstSurfaceTabs.tabs.findIndex(\n (candidate) => candidate.id === chatFirstSurfaceTabs.activeTabId,\n );\n if (activeIndex > targetIndex) activateChatFirstSurfaceTab(tab);\n chatFirstSurfaceTabsStore.closeToRight(tab.id);\n }}\n onCloseAll={closeAllChatFirstSurfaceTabs}\n onOpenSurface={openChatFirstSurface}\n apps={chatFirstAppItems}\n onOpenApp={(app) => openChatFirstPane({ appId: app.id }, \"side\")}\n renderAppIcon={(app) => (\n <AppIcon\n id={app.id}\n name={app.name}\n size=\"sm\"\n className=\"size-7 rounded-lg\"\n />\n )}\n copy={chatFirstCopy}\n />\n );\n const chatFirstSurfaceContent =\n chatFirstSurfaceTabs.tabs.length > 0 ? (\n <ChatFirstSurfaceContent\n tabs={chatFirstSurfaceTabs.tabs}\n activeTabId={chatFirstSurfaceTabs.activeTabId}\n renderTab={renderChatFirstSurfaceTab}\n />\n ) : null;\n const workspaceAppChatName =\n (workspaceAppId\n ? chatFirstAppRegistrations.find(\n (app) => app.id.toLowerCase() === workspaceAppId.toLowerCase(),\n )?.name\n : null) ??\n workspaceAppId ??\n \"Workspace app\";\n const workspaceAppContent =\n workspaceAppRouteActive && workspaceAppId ? (\n <WorkspaceAppChatRail\n appId={workspaceAppId}\n appName={workspaceAppChatName}\n agentPageHref={agentPageHref}\n onFullscreenRequest={openAskAgentFullscreen}\n >\n <WorkspaceAppKeepAlive activeAppId={workspaceAppId} />\n </WorkspaceAppChatRail>\n ) : (\n <WorkspaceAppKeepAlive\n activeAppId={workspaceAppRouteActive ? workspaceAppId : null}\n />\n );\n const content = isChatRoute ? (\n <div\n className={cn(\n \"agent-layout-main-surface flex h-full min-w-0 flex-1 overflow-hidden\",\n chatFirstMode && \"dispatch-chat-first-surface\",\n )}\n >\n {chatFirstAppTakesMain ? (\n <div\n className=\"flex min-w-0 flex-1 flex-col overflow-hidden\"\n data-dispatch-chat-first-main-app\n >\n {chatFirstSurfaceContent}\n </div>\n ) : (\n <>\n {appContent}\n {chatFirstMode &&\n chatFirstHasActiveChat &&\n chatFirstSurfacePanel.open ? (\n <ChatFirstSurfacePanel\n width={chatFirstSurfaceResize.width}\n onResizePointerDown={chatFirstSurfaceResize.onPointerDown}\n copy={chatFirstCopy}\n >\n {chatFirstSurfaceTabsBar}\n {chatFirstSurfaceContent}\n </ChatFirstSurfacePanel>\n ) : null}\n </>\n )}\n </div>\n ) : workspaceAppRouteActive ? null : isWorkspaceAppRoute ? (\n appContent\n ) : (\n <AgentSidebar\n position=\"right\"\n defaultOpen={false}\n agentPageHref={agentPageHref}\n chatViewTransition\n storageKey=\"dispatch\"\n openOnChatRunning={chatHomeHandoffActive}\n onFullscreenRequest={openAskAgentFullscreen}\n emptyStateText={t(\"dispatch.sidebar.emptyAgentText\")}\n suggestions={sidebarSuggestions}\n >\n {appContent}\n </AgentSidebar>\n );\n\n return (\n <DispatchExtensionsContext.Provider value={extensions}>\n <HeaderActionsProvider>\n <div className=\"agent-layout-shell flex h-screen w-full overflow-hidden bg-background\">\n <aside\n data-collapsed={sidebarCollapsed ? \"true\" : \"false\"}\n className={cn(\n \"agent-layout-left-drawer hidden shrink-0 flex-col border-e !border-e-sidebar-border bg-sidebar text-sidebar-foreground transition-[width] duration-200 ease-out lg:flex\",\n sidebarCollapsed ? \"w-14\" : \"w-56\",\n )}\n >\n <NavContent\n extensions={extensions}\n chatFirstMode={chatFirstMode}\n chatFirstEmbedded={chatFirstEmbedded}\n collapsed={sidebarCollapsed}\n chatFirstAppLayout={chatFirstAppLayout}\n onChatFirstAppLayoutChange={persistChatFirstAppLayout}\n chatFirstApps={chatFirstAppItems}\n chatFirstAppsLoading={chatFirstAppsQuery.isLoading}\n chatFirstAppsError={\n chatFirstAppsQuery.isError\n ? chatFirstCopy(\"appsLoadError\")\n : null\n }\n chatFirstActiveAppId={chatFirstActiveAppId}\n chatFirstActivePrimaryTab={chatFirstActivePrimaryTab}\n onChatFirstNewChat={() => {\n closeChatFirstSessionWatch();\n chatFirstSurfaceTabsStore.closeAll();\n setChatFirstSurfacePanelOpen(false);\n }}\n onChatFirstAppOpen={(app) => {\n if (isDispatchWorkspaceAppId(app.id)) return;\n setSidebarCollapsed(true);\n openChatFirstApp(app);\n }}\n onChatFirstAppsRetry={() => void chatFirstAppsQuery.refetch()}\n collapsible\n onCollapsedChange={setSidebarCollapsed}\n />\n </aside>\n\n <Sheet open={mobileOpen} onOpenChange={setMobileOpen}>\n <SheetContent\n side=\"left\"\n className=\"w-72 bg-sidebar p-0 text-sidebar-foreground [&>button]:hidden\"\n >\n <SheetTitle className=\"sr-only\">\n {t(\"dispatch.nav.navigation\")}\n </SheetTitle>\n <SheetDescription className=\"sr-only\">\n {t(\"dispatch.nav.navigationDescription\")}\n </SheetDescription>\n <div className=\"flex h-full w-full flex-col\">\n <NavContent\n extensions={extensions}\n chatFirstMode={chatFirstMode}\n chatFirstEmbedded={chatFirstEmbedded}\n collapsed={false}\n chatFirstAppLayout={chatFirstAppLayout}\n onChatFirstAppLayoutChange={persistChatFirstAppLayout}\n chatFirstApps={chatFirstAppItems}\n chatFirstAppsLoading={chatFirstAppsQuery.isLoading}\n chatFirstAppsError={\n chatFirstAppsQuery.isError\n ? chatFirstCopy(\"appsLoadError\")\n : null\n }\n chatFirstActiveAppId={chatFirstActiveAppId}\n chatFirstActivePrimaryTab={chatFirstActivePrimaryTab}\n onChatFirstNewChat={() => {\n closeChatFirstSessionWatch();\n chatFirstSurfaceTabsStore.closeAll();\n setChatFirstSurfacePanelOpen(false);\n }}\n onChatFirstAppOpen={openChatFirstApp}\n onChatFirstAppsRetry={() => void chatFirstAppsQuery.refetch()}\n onNavigate={() => setMobileOpen(false)}\n />\n </div>\n </SheetContent>\n </Sheet>\n\n <div className=\"relative min-w-0 flex-1 overflow-hidden\">\n {content}\n {workspaceAppContent}\n </div>\n </div>\n </HeaderActionsProvider>\n </DispatchExtensionsContext.Provider>\n );\n}\n"]}
1
+ {"version":3,"file":"Layout.js","sourceRoot":"","sources":["../../../src/components/layout/Layout.tsx"],"names":[],"mappings":";AAAA,OAAO,EACL,6BAA6B,EAC7B,gBAAgB,EAChB,iBAAiB,EACjB,qBAAqB,EACrB,YAAY,EACZ,2BAA2B,EAC3B,0BAA0B,EAC1B,yBAAyB,EACzB,4BAA4B,EAC5B,cAAc,EACd,mCAAmC,EACnC,sBAAsB,EACtB,iBAAiB,EACjB,6BAA6B,EAC7B,yBAAyB,EACzB,6BAA6B,EAC7B,yBAAyB,EACzB,wBAAwB,EACxB,wBAAwB,EACxB,yBAAyB,EACzB,uBAAuB,EAUvB,uBAAuB,EACvB,4BAA4B,EAC5B,cAAc,GAEf,MAAM,sCAAsC,CAAC;AAC9C,OAAO,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,oCAAoC,CAAC;AAC1E,OAAO,EACL,kBAAkB,EAClB,mBAAmB,GACpB,MAAM,6CAA6C,CAAC;AACrD,OAAO,EACL,mBAAmB,EACnB,gBAAgB,EAChB,iBAAiB,EACjB,oBAAoB,EACpB,oBAAoB,EACpB,0BAA0B,EAC1B,yBAAyB,EACzB,qBAAqB,EACrB,uBAAuB,EACvB,oBAAoB,EACpB,oBAAoB,GAMrB,MAAM,sCAAsC,CAAC;AAC9C,OAAO,EAAE,kBAAkB,EAAE,MAAM,qCAAqC,CAAC;AACzE,OAAO,EAAE,cAAc,EAAE,MAAM,iCAAiC,CAAC;AACjE,OAAO,EAAE,IAAI,EAAE,MAAM,gCAAgC,CAAC;AACtD,OAAO,EAAE,eAAe,EAAE,MAAM,sCAAsC,CAAC;AACvE,OAAO,EAAE,gBAAgB,EAAE,WAAW,EAAE,MAAM,+BAA+B,CAAC;AAC9E,OAAO,EAAE,QAAQ,EAAE,MAAM,oCAAoC,CAAC;AAC9D,OAAO,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AAC9D,OAAO,EAAE,oBAAoB,EAAE,MAAM,iCAAiC,CAAC;AACvE,OAAO,EACL,eAAe,GAEhB,MAAM,oCAAoC,CAAC;AAC5C,OAAO,EACL,QAAQ,EACR,cAAc,EACd,iBAAiB,EACjB,QAAQ,EACR,OAAO,EACP,cAAc,EACd,mBAAmB,EACnB,aAAa,EACb,iBAAiB,EACjB,6BAA6B,EAC7B,2BAA2B,EAC3B,YAAY,EACZ,UAAU,EACV,UAAU,EACV,SAAS,EACT,iBAAiB,EACjB,QAAQ,GACT,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EACL,aAAa,EACb,SAAS,EACT,OAAO,EACP,MAAM,EACN,QAAQ,EACR,UAAU,EACV,WAAW,GAGZ,MAAM,OAAO,CAAC;AACf,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAC9D,OAAO,EAAE,KAAK,EAAE,MAAM,QAAQ,CAAC;AAE/B,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AACrD,OAAO,EAAE,EAAE,EAAE,MAAM,iBAAiB,CAAC;AACrC,OAAO,EACL,wBAAwB,EACxB,yBAAyB,EACzB,uCAAuC,EACvC,iBAAiB,EACjB,2BAA2B,EAC3B,sBAAsB,EACtB,uBAAuB,EACvB,sBAAsB,EACtB,iBAAiB,GAElB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAE,yBAAyB,EAAE,MAAM,8BAA8B,CAAC;AACzE,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AACtC,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AACtC,OAAO,EAAE,KAAK,EAAE,YAAY,EAAE,gBAAgB,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAChF,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC1C,OAAO,EAAE,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AACxE,OAAO,EACL,oBAAoB,EACpB,iBAAiB,EACjB,qBAAqB,GACtB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAClC,OAAO,EACL,qBAAqB,EACrB,gBAAgB,EAChB,cAAc,GACf,MAAM,iBAAiB,CAAC;AAEzB,OAAO,EAAE,+BAA+B,EAAE,MAAM,uBAAuB,CAAC;AAiCxE,MAAM,iBAAiB,GAAG;IACxB;QACE,EAAE,EAAE,UAAU;QACd,EAAE,EAAE,WAAW;QACf,KAAK,EAAE,UAAU;QACjB,IAAI,EAAE,aAAa;QACnB,OAAO,EAAE,SAAS;KACnB;IACD;QACE,EAAE,EAAE,MAAM;QACV,EAAE,EAAE,OAAO;QACX,KAAK,EAAE,MAAM;QACb,IAAI,EAAE,mBAAmB;QACzB,OAAO,EAAE,SAAS;KACnB;IACD;QACE,EAAE,EAAE,MAAM;QACV,EAAE,EAAE,OAAO;QACX,KAAK,EAAE,MAAM;QACb,IAAI,EAAE,QAAQ;QACd,OAAO,EAAE,SAAS;KACnB;IACD;QACE,EAAE,EAAE,QAAQ;QACZ,EAAE,EAAE,SAAS;QACb,KAAK,EAAE,QAAQ;QACf,IAAI,EAAE,cAAc;QACpB,OAAO,EAAE,SAAS;KACnB;CAC4C,CAAC;AAEhD,MAAM,gBAAgB,GAAG;IACvB;QACE,EAAE,EAAE,OAAO;QACX,EAAE,EAAE,QAAQ;QACZ,KAAK,EAAE,OAAO;QACd,IAAI,EAAE,UAAU;KACjB;IACD;QACE,EAAE,EAAE,UAAU;QACd,EAAE,EAAE,WAAW;QACf,KAAK,EAAE,UAAU;QACjB,IAAI,EAAE,YAAY;KACnB;CAC4C,CAAC;AAEhD,MAAM,eAAe,GAA+B,EAAE,CAAC;AACvD,MAAM,sBAAsB,GAAG,UAAU,CAAC;AAE1C,MAAM,gBAAgB,GAAG,CAAC,WAAW,EAAE,eAAe,EAAE,kBAAkB,CAAC,CAAC;AAC5E,MAAM,oBAAoB,GAAG,4BAA4B,CAAC;AAC1D,MAAM,uBAAuB,GAAG,8BAA8B,CAAC;AAC/D,4EAA4E;AAC5E,6EAA6E;AAC7E,4EAA4E;AAC5E,yCAAyC;AACzC,MAAM,CAAC,MAAM,0CAA0C,GACrD,6BAA6B,CAAC;AA+BhC,MAAM,yBAAyB,GAAG,aAAa,CAE7C,SAAS,CAAC,CAAC;AAEb,MAAM,UAAU,qBAAqB;IACnC,OAAO,UAAU,CAAC,yBAAyB,CAAC,CAAC;AAC/C,CAAC;AAED,0EAA0E;AAC1E,+CAA+C;AAC/C,SAAS,eAAe,CAAC,QAAgB;IACvC,IAAI,QAAQ,KAAK,QAAQ,IAAI,QAAQ,CAAC,UAAU,CAAC,SAAS,CAAC;QAAE,OAAO,IAAI,CAAC;IACzE,IAAI,QAAQ,KAAK,aAAa,IAAI,QAAQ,CAAC,UAAU,CAAC,cAAc,CAAC;QACnE,OAAO,IAAI,CAAC;IACd,IAAI,QAAQ,CAAC,UAAU,CAAC,QAAQ,CAAC;QAAE,OAAO,IAAI,CAAC;IAC/C,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,UAAU,CAAC,IAAqB;IACvC,OAAO,IAAI,CAAC,OAAO,IAAI,YAAY,CAAC;AACtC,CAAC;AAED,SAAS,kBAAkB,CAAC,IAAqB,EAAE,QAAgB;IACjE,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;QACf,IAAI,CAAC;YACH,IAAI,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC;gBAAE,OAAO,IAAI,CAAC;QACxC,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,KAAK,CAAC;QACf,CAAC;IACH,CAAC;IACD,OAAO,QAAQ,KAAK,IAAI,CAAC,EAAE,IAAI,QAAQ,CAAC,UAAU,CAAC,GAAG,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC;AACpE,CAAC;AAED,SAAS,kBAAkB,CACzB,KAAiC,EACjC,OAA2B;IAE3B,OAAO,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,OAAO,CAAC,CAAC;AAC9D,CAAC;AAED,SAAS,iBAAiB,CAAC,QAAgB;IACzC,MAAM,QAAQ,GAAG,WAAW,EAAE,CAAC;IAC/B,IAAI,CAAC,QAAQ;QAAE,OAAO,QAAQ,CAAC;IAC/B,IAAI,QAAQ,KAAK,QAAQ;QAAE,OAAO,GAAG,CAAC;IACtC,IAAI,QAAQ,CAAC,UAAU,CAAC,GAAG,QAAQ,GAAG,CAAC,EAAE,CAAC;QACxC,OAAO,QAAQ,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,GAAG,CAAC;IAChD,CAAC;IACD,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,MAAM,UAAU,wBAAwB,CAAC,MAAc;IACrD,OAAO,IAAI,eAAe,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,UAAU,CAAC,KAAK,GAAG,CAAC;AAC7D,CAAC;AAED,MAAM,UAAU,iCAAiC,CAAC,QAAgB;IAChE,OAAO,iBAAiB,CAAC,QAAQ,CAAC,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;AAC1D,CAAC;AAED,SAAS,0BAA0B,CACjC,QAAgB;IAEhB,IAAI,QAAQ,KAAK,OAAO,IAAI,QAAQ,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC1D,OAAO,UAAU,CAAC;IACpB,CAAC;IACD,IACE,QAAQ,KAAK,eAAe;QAC5B,QAAQ,CAAC,UAAU,CAAC,gBAAgB,CAAC;QACrC,QAAQ,KAAK,qBAAqB;QAClC,QAAQ,CAAC,UAAU,CAAC,sBAAsB,CAAC,EAC3C,CAAC;QACD,OAAO,cAAc,CAAC;IACxB,CAAC;IACD,IACE,QAAQ,KAAK,cAAc;QAC3B,QAAQ,CAAC,UAAU,CAAC,eAAe,CAAC;QACpC,QAAQ,KAAK,oBAAoB;QACjC,QAAQ,CAAC,UAAU,CAAC,qBAAqB,CAAC,EAC1C,CAAC;QACD,OAAO,WAAW,CAAC;IACrB,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,SAAS,qBAAqB,CAAC,IAAY;IACzC,IAAI,OAAO,MAAM,KAAK,WAAW;QAAE,OAAO,IAAI,CAAC;IAC/C,MAAM,QAAQ,GAAG,WAAW,EAAE,CAAC;IAC/B,IAAI,CAAC,QAAQ;QAAE,OAAO,IAAI,CAAC;IAC3B,yEAAyE;IACzE,2EAA2E;IAC3E,wEAAwE;IACxE,yEAAyE;IACzE,sEAAsE;IACtE,wDAAwD;IACxD,MAAM,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC;IAC1C,MAAM,iBAAiB,GACrB,QAAQ,KAAK,QAAQ,IAAI,QAAQ,CAAC,UAAU,CAAC,GAAG,QAAQ,GAAG,CAAC,CAAC;IAC/D,OAAO,iBAAiB,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;AAClD,CAAC;AAED,SAAS,0BAA0B,CACjC,MAAsE;IAEtE,QAAQ,MAAM,EAAE,CAAC;QACf,KAAK,cAAc;YACjB,OAAO,kDAAkD,CAAC;QAC5D,KAAK,aAAa;YAChB,OAAO,oEAAoE,CAAC;QAC9E,KAAK,aAAa;YAChB,OAAO,8CAA8C,CAAC;IAC1D,CAAC;IACD,OAAO,wCAAwC,CAAC;AAClD,CAAC;AAED,SAAS,iCAAiC,CACxC,MAAsC;IAEtC,OAAO,MAAM,KAAK,cAAc;QAC9B,CAAC,CAAC,kDAAkD;QACpD,CAAC,CAAC,0DAA0D,CAAC;AACjE,CAAC;AAED,MAAM,6BAA6B,GAA2B;IAC5D,aAAa,EAAE,wBAAwB;IACvC,kBAAkB,EAAE,6BAA6B;IACjD,OAAO,EAAE,kBAAkB;IAC3B,aAAa,EAAE,wBAAwB;IACvC,eAAe,EAAE,0BAA0B;IAC3C,SAAS,EAAE,oBAAoB;IAC/B,KAAK,EAAE,gBAAgB;IACvB,OAAO,EAAE,kBAAkB;IAC3B,QAAQ,EAAE,mBAAmB;IAC7B,MAAM,EAAE,iBAAiB;IACzB,YAAY,EAAE,uBAAuB;IACrC,MAAM,EAAE,iBAAiB;IACzB,gBAAgB,EAAE,2BAA2B;IAC7C,QAAQ,EAAE,mBAAmB;IAC7B,KAAK,EAAE,gBAAgB;IACvB,WAAW,EAAE,sBAAsB;IACnC,YAAY,EAAE,uBAAuB;IACrC,QAAQ,EAAE,mBAAmB;IAC7B,WAAW,EAAE,sBAAsB;IACnC,YAAY,EAAE,uBAAuB;IACrC,QAAQ,EAAE,mBAAmB;IAC7B,WAAW,EAAE,sBAAsB;IACnC,cAAc,EAAE,yBAAyB;IACzC,aAAa,EAAE,wBAAwB;IACvC,cAAc,EAAE,yBAAyB;IACzC,mBAAmB,EAAE,8BAA8B;IACnD,YAAY,EAAE,uBAAuB;IACrC,WAAW,EAAE,sBAAsB;IACnC,iBAAiB,EAAE,4BAA4B;IAC/C,sBAAsB,EAAE,iCAAiC;IACzD,mBAAmB,EAAE,8BAA8B;IACnD,cAAc,EAAE,yBAAyB;IACzC,UAAU,EAAE,qBAAqB;IACjC,oBAAoB,EAAE,+BAA+B;IACrD,kBAAkB,EAAE,6BAA6B;IACjD,wBAAwB,EAAE,mCAAmC;IAC7D,oBAAoB,EAAE,+BAA+B;IACrD,eAAe,EAAE,0BAA0B;IAC3C,iBAAiB,EAAE,4BAA4B;IAC/C,YAAY,EAAE,uBAAuB;IACrC,aAAa,EAAE,wBAAwB;IACvC,gBAAgB,EAAE,2BAA2B;IAC7C,eAAe,EAAE,0BAA0B;IAC3C,cAAc,EAAE,yBAAyB;IACzC,MAAM,EAAE,iBAAiB;IACzB,yBAAyB,EAAE,oCAAoC;IAC/D,0BAA0B,EAAE,qCAAqC;IACjE,yBAAyB,EAAE,oCAAoC;IAC/D,gCAAgC,EAAE,2CAA2C;IAC7E,4BAA4B,EAAE,uCAAuC;IACrE,0BAA0B,EAAE,qCAAqC;IACjE,yBAAyB,EAAE,oCAAoC;IAC/D,0BAA0B,EAAE,qCAAqC;IACjE,eAAe,EAAE,0BAA0B;IAC3C,OAAO,EAAE,kBAAkB;IAC3B,mBAAmB,EAAE,8BAA8B;IACnD,YAAY,EAAE,uBAAuB;IACrC,cAAc,EAAE,yBAAyB;IACzC,WAAW,EAAE,sBAAsB;CACpC,CAAC;AAEF,MAAM,qCAAqC,GAGvC;IACF,OAAO,EAAE;QACP,KAAK,EAAE,8BAA8B;QACrC,MAAM,EAAE,+BAA+B;KACxC;IACD,QAAQ,EAAE;QACR,KAAK,EAAE,+BAA+B;QACtC,MAAM,EAAE,gCAAgC;KACzC;IACD,KAAK,EAAE;QACL,KAAK,EAAE,4BAA4B;QACnC,MAAM,EAAE,6BAA6B;KACtC;IACD,IAAI,EAAE;QACJ,KAAK,EAAE,2BAA2B;QAClC,MAAM,EAAE,4BAA4B;KACrC;IACD,WAAW,EAAE;QACX,KAAK,EAAE,+BAA+B;QACtC,MAAM,EAAE,gCAAgC;KACzC;IACD,MAAM,EAAE;QACN,KAAK,EAAE,6BAA6B;QACpC,MAAM,EAAE,8BAA8B;KACvC;CACF,CAAC;AAEF,SAAS,2BAA2B,CAClC,CAA6D;IAE7D,OAAO,CAAC,GAAG,EAAE,MAAM,EAAE,EAAE;QACrB,IAAI,GAAG,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;YAC/B,MAAM,CAAC,EAAE,IAAI,EAAE,KAAK,CAAC,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;YACvC,MAAM,OAAO,GAAG,qCAAqC,CAAC,IAAI,CAAC,CAAC;YAC5D,MAAM,cAAc,GAClB,OAAO,IAAI,CAAC,KAAK,KAAK,OAAO,IAAI,KAAK,KAAK,QAAQ,CAAC;gBAClD,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC;gBAChB,CAAC,CAAC,SAAS,CAAC;YAChB,IAAI,cAAc,EAAE,CAAC;gBACnB,OAAO,CAAC,CAAC,kBAAkB,cAAc,EAAE,EAAE;oBAC3C,GAAG,CAAC,MAAM,IAAI,EAAE,CAAC;oBACjB,YAAY,EAAE,oBAAoB,CAAC,GAAG,EAAE,MAAM,CAAC;iBAChD,CAAC,CAAC;YACL,CAAC;QACH,CAAC;QACD,MAAM,cAAc,GAAG,6BAA6B,CAAC,GAAG,CAAC,CAAC;QAC1D,IAAI,CAAC,cAAc;YAAE,OAAO,oBAAoB,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;QAC9D,OAAO,CAAC,CAAC,kBAAkB,cAAc,EAAE,EAAE;YAC3C,GAAG,CAAC,MAAM,IAAI,EAAE,CAAC;YACjB,YAAY,EAAE,oBAAoB,CAAC,GAAG,EAAE,MAAM,CAAC;SAChD,CAAC,CAAC;IACL,CAAC,CAAC;AACJ,CAAC;AAED,SAAS,cAAc,CAAC,QAAuB;IAC7C,OAAO,QAAQ,CAAC,CAAC,CAAC,SAAS,kBAAkB,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC;AACtE,CAAC;AAED,SAAS,sBAAsB,CAAC,KAAc;IAC5C,IAAI,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO,IAAI,CAAC;IACrD,MAAM,MAAM,GAAG,KAAgC,CAAC;IAChD,IAAI,OAAO,MAAM,CAAC,KAAK,KAAK,QAAQ,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,EAAE;QAAE,OAAO,IAAI,CAAC;IAC1E,OAAO;QACL,KAAK,EAAE,MAAM,CAAC,KAAK;QACnB,GAAG,CAAC,MAAM,CAAC,SAAS,KAAK,MAAM,IAAI,MAAM,CAAC,SAAS,KAAK,MAAM;YAC5D,CAAC,CAAC,EAAE,SAAS,EAAE,MAAM,CAAC,SAAS,EAAE;YACjC,CAAC,CAAC,EAAE,CAAC;QACP,GAAG,CAAC,OAAO,MAAM,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACjE,GAAG,CAAC,OAAO,MAAM,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KAClE,CAAC;AACJ,CAAC;AAED,SAAS,gBAAgB,CAAC,QAAgB;IACxC,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,kBAAkB,CAAC,CAAC;IACjD,IAAI,CAAC,KAAK;QAAE,OAAO,IAAI,CAAC;IACxB,IAAI,CAAC;QACH,MAAM,KAAK,GAAG,kBAAkB,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;QAClD,OAAO,KAAK,IAAI,IAAI,CAAC;IACvB,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,SAAiB,EAAE,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE;IACjE,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,GAAG,SAAS,CAAC,CAAC;IAC5C,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,MAAM,CAAC,CAAC;IAC5C,IAAI,OAAO,GAAG,CAAC;QAAE,OAAO,KAAK,CAAC;IAC9B,IAAI,OAAO,GAAG,EAAE;QAAE,OAAO,GAAG,OAAO,GAAG,CAAC;IACvC,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,GAAG,EAAE,CAAC,CAAC;IACvC,IAAI,KAAK,GAAG,EAAE;QAAE,OAAO,GAAG,KAAK,GAAG,CAAC;IACnC,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,EAAE,CAAC,CAAC;IACpC,IAAI,IAAI,GAAG,EAAE;QAAE,OAAO,GAAG,IAAI,GAAG,CAAC;IACjC,IAAI,IAAI,GAAG,GAAG;QAAE,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,GAAG,CAAC,CAAC,GAAG,CAAC;IAClD,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,GAAG,GAAG,CAAC,GAAG,CAAC;AACtC,CAAC;AAED,SAAS,WAAW,CAAC,MAAyB,EAAE,QAAgB;IAC9D,OAAO,MAAM,CAAC,KAAK,IAAI,MAAM,CAAC,OAAO,IAAI,QAAQ,CAAC;AACpD,CAAC;AAED,SAAS,gBAAgB,CAAC,QAA4B;IACpD,MAAM,UAAU,GAAG,QAAQ,EAAE,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IAClD,IAAI,CAAC,UAAU;QAAE,OAAO,IAAI,CAAC;IAC7B,IAAI,UAAU,KAAK,OAAO,EAAE,CAAC;QAC3B,OAAO,KAAC,cAAc,IAAC,IAAI,EAAE,EAAE,iBAAc,MAAM,GAAG,CAAC;IACzD,CAAC;IACD,IAAI,UAAU,KAAK,UAAU,EAAE,CAAC;QAC9B,OAAO,KAAC,iBAAiB,IAAC,IAAI,EAAE,EAAE,iBAAc,MAAM,GAAG,CAAC;IAC5D,CAAC;IACD,OAAO,KAAC,SAAS,IAAC,IAAI,EAAE,EAAE,iBAAc,MAAM,GAAG,CAAC;AACpD,CAAC;AAED,SAAS,+BAA+B;IACtC,IAAI,OAAO,MAAM,KAAK,WAAW;QAAE,OAAO,KAAK,CAAC;IAChD,IAAI,CAAC;QACH,OAAO,YAAY,CAAC,OAAO,CAAC,uBAAuB,CAAC,KAAK,KAAK,CAAC;IACjE,CAAC;IAAC,MAAM,CAAC;QACP,6DAA6D;QAC7D,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED,SAAS,eAAe,CAAC,MAAyB;IAChD,OAAO,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,SAAS,CAAC;QACtC,CAAC,CAAC,MAAM,CAAC,SAAS;QAClB,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,SAAS,CAAC;YACjC,CAAC,CAAC,MAAM,CAAC,SAAS;YAClB,CAAC,CAAC,CAAC,CAAC;AACV,CAAC;AAED,SAAS,oBAAoB,CAAC,EAC5B,UAAU,EACV,WAAW,GAAG,KAAK,EACnB,OAAO,EACP,aAAa,GAAG,KAAK,EACrB,iBAAiB,GAAG,KAAK,EACzB,SAAS,GAAG,KAAK,EACjB,mBAAmB,GAcpB;IACC,MAAM,CAAC,GAAG,IAAI,EAAE,CAAC;IACjB,MAAM,aAAa,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC,2BAA2B,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;IACzE,MAAM,QAAQ,GAAG,WAAW,EAAE,CAAC;IAC/B,MAAM,QAAQ,GAAG,WAAW,EAAE,CAAC;IAC/B,MAAM,CAAC,eAAe,EAAE,kBAAkB,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IAC9D,MAAM,CAAC,sBAAsB,EAAE,yBAAyB,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IAC5E,MAAM,cAAc,GAAG,MAAM,CAAC,eAAe,CAAC,CAAC;IAC/C,MAAM,EACJ,OAAO,EACP,cAAc,EACd,SAAS,EAAE,YAAY,EACvB,gBAAgB,EAChB,YAAY,EACZ,YAAY,EACZ,YAAY,EACZ,cAAc,GACf,GAAG,cAAc,CAAC,SAAS,EAAE,UAAU,EAAE,SAAS,EAAE;QACnD,UAAU,EAAE,KAAK;QACjB,eAAe;KAChB,CAAC,CAAC;IAEH,MAAM,cAAc,GAAG,OAAO,CAC5B,GAAG,EAAE,CACH,OAAO;SACJ,MAAM,CACL,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,YAAY,GAAG,CAAC,IAAI,MAAM,CAAC,EAAE,KAAK,cAAc,CACpE;SACA,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,eAAe,CAAC,CAAC,CAAC,GAAG,eAAe,CAAC,CAAC,CAAC,CAAC;SACvD,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAChB,CAAC,cAAc,EAAE,OAAO,CAAC,CAC1B,CAAC;IACF,MAAM,aAAa,GAAG,iBAAiB,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;IAC3D,MAAM,uBAAuB,GAC3B,gBAAgB,CAAC,aAAa,CAAC;QAC/B,CAAC,aAAa,KAAK,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC;IACtD,MAAM,SAAS,GAAsB,cAAc,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE;QACjE,MAAM,KAAK,GAAG,WAAW,CAAC,MAAM,EAAE,CAAC,CAAC,0BAA0B,CAAC,CAAC,CAAC;QACjE,MAAM,UAAU,GAAG,gBAAgB,CAAC,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;QAC7D,MAAM,WAAW,GAAG,MAAM,CAAC,MAAM,EAAE,QAAQ;YACzC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE;gBACvC,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC;YACjC,CAAC,CAAC,IAAI,CAAC;QACT,OAAO;YACL,EAAE,EAAE,MAAM,CAAC,EAAE;YACb,KAAK,EAAE,CACL,gBACE,SAAS,EAAC,iCAAiC,EAC3C,KAAK,EAAE,WAAW,CAAC,CAAC,CAAC,GAAG,WAAW,KAAK,KAAK,EAAE,CAAC,CAAC,CAAC,KAAK,aAEtD,UAAU,CAAC,CAAC,CAAC,CACZ,eACE,SAAS,EAAC,qCAAqC,gBACnC,WAAW,IAAI,kBAAkB,YAE5C,UAAU,GACN,CACR,CAAC,CAAC,CAAC,IAAI,EACR,eAAM,SAAS,EAAC,UAAU,YAAE,KAAK,GAAQ,IACpC,CACR;YACD,SAAS,EAAE,KAAK;YAChB,SAAS,EACP,MAAM,CAAC,EAAE,KAAK,uBAAuB;gBACnC,CAAC,CAAC,EAAE;gBACJ,CAAC,CAAC,eAAe,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC;SAC/C,CAAC;IACJ,CAAC,CAAC,CAAC;IACH,MAAM,gBAAgB,GAAG,gBAAgB,CAAC,CAAC,CAAC,CAC1C,kBACE,IAAI,EAAC,QAAQ,EACb,OAAO,EAAE,GAAG,EAAE,CAAC,KAAK,cAAc,EAAE,EACpC,SAAS,EAAC,yLAAyL,aAEnM,kDAAiC,EACjC,eAAM,SAAS,EAAC,aAAa,sBAAa,IACnC,CACV,CAAC,CAAC,CAAC,SAAS,CAAC;IAEd,SAAS,CAAC,GAAG,EAAE;QACb,kBAAkB,CAAC,+BAA+B,EAAE,CAAC,CAAC;QACtD,yBAAyB,CAAC,IAAI,CAAC,CAAC;IAClC,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,CAAC,sBAAsB;YAAE,OAAO;QACpC,IAAI,CAAC;YACH,YAAY,CAAC,OAAO,CAClB,uBAAuB,EACvB,eAAe,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,CAClC,CAAC;QACJ,CAAC;QAAC,MAAM,CAAC,CAAA,CAAC,CAAC,6DAA6D;QACxE,IAAI,cAAc,CAAC,OAAO,KAAK,eAAe,EAAE,CAAC;YAC/C,cAAc,CAAC,OAAO,GAAG,eAAe,CAAC;YACzC,cAAc,EAAE,CAAC;QACnB,CAAC;IACH,CAAC,EAAE,CAAC,sBAAsB,EAAE,eAAe,EAAE,cAAc,CAAC,CAAC,CAAC;IAE9D,SAAS,CAAC,GAAG,EAAE;QACb,MAAM,OAAO,GAAG,GAAG,EAAE,CAAC,cAAc,EAAE,CAAC;QACvC,MAAM,aAAa,GAAG,CAAC,KAAY,EAAE,EAAE;YACrC,MAAM,MAAM,GAAI,KAAqB,CAAC,MAEzB,CAAC;YACd,IAAI,MAAM,EAAE,SAAS,KAAK,KAAK;gBAAE,cAAc,EAAE,CAAC;QACpD,CAAC,CAAC;QAEF,MAAM,CAAC,gBAAgB,CAAC,4BAA4B,EAAE,OAAO,CAAC,CAAC;QAC/D,MAAM,CAAC,gBAAgB,CAAC,yBAAyB,EAAE,aAAa,CAAC,CAAC;QAClE,MAAM,CAAC,gBAAgB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QAC1C,OAAO,GAAG,EAAE;YACV,MAAM,CAAC,mBAAmB,CAAC,4BAA4B,EAAE,OAAO,CAAC,CAAC;YAClE,MAAM,CAAC,mBAAmB,CAAC,yBAAyB,EAAE,aAAa,CAAC,CAAC;YACrE,MAAM,CAAC,mBAAmB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QAC/C,CAAC,CAAC;IACJ,CAAC,EAAE,CAAC,cAAc,CAAC,CAAC,CAAC;IAErB,SAAS,UAAU,CAAC,QAAgB,EAAE,OAA6B;QACjE,YAAY,CAAC,QAAQ,CAAC,CAAC;QACvB,mCAAmC,CACjC,QAAQ,EACR,qBAAqB,CACnB,OAAO,EAAE,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,cAAc,CAAC,QAAQ,CAAC,CACpD,CACF,CAAC;QACF,UAAU,EAAE,EAAE,CAAC;QACf,MAAM,CAAC,qBAAqB,CAAC,GAAG,EAAE;YAChC,MAAM,CAAC,aAAa,CAClB,IAAI,WAAW,CAAC,wBAAwB,EAAE;gBACxC,MAAM,EAAE,EAAE,QAAQ,EAAE,SAAS,EAAE,OAAO,EAAE,KAAK,KAAK,IAAI,EAAE;aACzD,CAAC,CACH,CAAC;QACJ,CAAC,CAAC,CAAC;IACL,CAAC;IAED,KAAK,UAAU,aAAa;QAC1B,MAAM,QAAQ,GAAG,MAAM,YAAY,EAAE,CAAC;QACtC,IAAI,QAAQ;YAAE,UAAU,CAAC,QAAQ,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;IACtD,CAAC;IAED,MAAM,kBAAkB,GAAG,SAAS,IAAI,aAAa,CAAC;IAEtD,OAAO,CACL,eACE,SAAS,EAAE,EAAE,CACX,qBAAqB,EACrB,WAAW,IAAI,2BAA2B,CAC3C,aAEA,WAAW,IAAI,mBAAmB,CAAC,CAAC,CAAC,CACpC,cAAK,SAAS,EAAE,EAAE,CAAC,kBAAkB,EAAE,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,YACnE,KAAC,0BAA0B,IACzB,IAAI,EAAE,aAAa,EACnB,SAAS,EAAE,GAAG,EAAE;wBACd,mBAAmB,CAAC,SAAS,EAAE,EAAE,CAAC;wBAClC,KAAK,aAAa,EAAE,CAAC;oBACvB,CAAC,EACD,kBAAkB,EAAE,mBAAmB,CAAC,kBAAkB,EAC1D,eAAe,EAAE,mBAAmB,CAAC,eAAe,EACpD,QAAQ,EAAE,eAAe,EACzB,SAAS,EAAE,mBAAmB,CAAC,SAAS,EACxC,SAAS,EAAE,SAAS,GACpB,GACE,CACP,CAAC,CAAC,CAAC,IAAI,EACP,OAAO,EACP,CAAC,kBAAkB,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,CACvC,cAAK,SAAS,EAAC,8BAA8B,YAC3C,MAAC,OAAO,eACN,KAAC,cAAc,IAAC,OAAO,kBACrB,iBACE,IAAI,EAAC,QAAQ,4DAEC,eAAe,gBAE3B,eAAe;oCACb,CAAC,CAAC,CAAC,CAAC,iCAAiC,EAAE;wCACnC,YAAY,EAAE,kBAAkB;qCACjC,CAAC;oCACJ,CAAC,CAAC,CAAC,CAAC,+BAA+B,EAAE;wCACjC,YAAY,EAAE,gBAAgB;qCAC/B,CAAC,EAER,OAAO,EAAE,GAAG,EAAE,CAAC,kBAAkB,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,EACxD,SAAS,EAAC,8JAA8J,YAEvK,eAAe,CAAC,CAAC,CAAC,CACjB,KAAC,SAAS,IAAC,IAAI,EAAE,EAAE,iBAAc,MAAM,GAAG,CAC3C,CAAC,CAAC,CAAC,CACF,KAAC,iBAAiB,IAAC,IAAI,EAAE,EAAE,iBAAc,MAAM,GAAG,CACnD,GACM,GACM,EACjB,KAAC,cAAc,IAAC,IAAI,EAAC,OAAO,YACzB,eAAe;gCACd,CAAC,CAAC,CAAC,CAAC,iCAAiC,EAAE;oCACnC,YAAY,EAAE,kBAAkB;iCACjC,CAAC;gCACJ,CAAC,CAAC,CAAC,CAAC,+BAA+B,EAAE;oCACjC,YAAY,EAAE,gBAAgB;iCAC/B,CAAC,GACS,IACT,GACN,CACP,CAAC,CAAC,CAAC,IAAI,EACP,CAAC,kBAAkB;gBAClB,CAAC,aAAa;gBACd,YAAY;gBACZ,cAAc,CAAC,MAAM,KAAK,CAAC;gBAC3B,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,EAAE,CAAC,CAC1C,eAEE,SAAS,EAAC,mCAAmC,aAE7C,KAAC,QAAQ,IAAC,SAAS,EAAC,8BAA8B,GAAG,EACrD,KAAC,QAAQ,IAAC,SAAS,EAAC,mBAAmB,GAAG,KAJrC,iBAAiB,KAAK,EAAE,CAKzB,CACP,CAAC,EACH,CAAC,kBAAkB;gBACpB,aAAa;gBACb,CAAC,YAAY,IAAI,cAAc,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAC5C,KAAC,oBAAoB,IACnB,KAAK,EAAE,SAAS,EAChB,QAAQ,EAAE,uBAAuB,EACjC,OAAO,EAAE,YAAY,IAAI,cAAc,CAAC,MAAM,KAAK,CAAC,EACpD,YAAY,EACV,cAAK,SAAS,EAAC,qBAAqB,YACjC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CACxB,eAAiB,SAAS,EAAC,mCAAmC,aAC5D,KAAC,QAAQ,IAAC,SAAS,EAAC,8BAA8B,GAAG,EACrD,KAAC,QAAQ,IAAC,SAAS,EAAC,mBAAmB,GAAG,KAFlC,KAAK,CAGT,CACP,CAAC,GACE,EAER,KAAK,EAAE,CAAC,CAAC,wBAAwB,EAAE,EAAE,YAAY,EAAE,OAAO,EAAE,CAAC,EAC7D,KAAK,EAAE,gBAAgB,EACvB,QAAQ,EAAE,CAAC,QAAQ,EAAE,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,EAC5C,eAAe,EAAE,GAAG,EACpB,QAAQ,EAAE,CAAC,QAAQ,EAAE,KAAK,EAAE,EAAE,CAAC,KAAK,YAAY,CAAC,QAAQ,EAAE,KAAK,CAAC,EACjE,MAAM,EAAE;oBACN,OAAO,EAAE,CAAC,IAAI,EAAE,EAAE,CAChB,CAAC,CAAC,8BAA8B,EAAE;wBAChC,KAAK,EAAE,IAAI,CAAC,SAAS,IAAI,EAAE;qBAC5B,CAAC;oBACJ,WAAW,EAAE,CAAC,IAAI,EAAE,EAAE,CACpB,CAAC,CAAC,+BAA+B,EAAE;wBACjC,KAAK,EAAE,IAAI,CAAC,SAAS,IAAI,EAAE;qBAC5B,CAAC;oBACJ,MAAM,EAAE,CAAC,CAAC,6BAA6B,CAAC;iBACzC,EACD,0BAA0B,EAAE,CAAC,IAAI,EAAE,SAAS,EAAE,EAAE,CAAC,CAC/C,8BACE,kBACE,IAAI,EAAC,QAAQ,EACb,IAAI,EAAC,UAAU,EACf,SAAS,EAAC,gCAAgC,EAC1C,OAAO,EAAE,GAAG,EAAE;gCACZ,SAAS,EAAE,CAAC;gCACZ,KAAK,kBAAkB,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE;oCAC/C,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,CACjC,MAAM;wCACJ,CAAC,CAAC,mBAAmB;wCACrB,CAAC,CAAC,+BAA+B,CACpC,CAAC;gCACJ,CAAC,CAAC,CAAC;4BACL,CAAC,aAED,KAAC,QAAQ,IAAC,IAAI,EAAE,EAAE,EAAE,WAAW,EAAE,GAAG,GAAI,EACxC,6CAA4B,IACrB,EACR,CAAC,iBAAiB,CAAC,CAAC,CAAC,CACpB,kBACE,IAAI,EAAC,QAAQ,EACb,IAAI,EAAC,UAAU,EACf,SAAS,EAAC,gCAAgC,EAC1C,OAAO,EAAE,GAAG,EAAE;gCACZ,SAAS,EAAE,CAAC;gCACZ,yBAAyB,CAAC;oCACxB,SAAS,EAAE,IAAI,CAAC,EAAE;oCAClB,KAAK,EAAE,IAAI,CAAC,SAAS;oCACrB,IAAI,EAAE,YAAY;oCAClB,eAAe,EAAE,uBAAuB,IAAI,SAAS;iCACtD,CAAC,CAAC;4BACL,CAAC,aAED,KAAC,OAAO,IAAC,IAAI,EAAE,EAAE,EAAE,WAAW,EAAE,GAAG,GAAI,EACvC,uDAAsC,IAC/B,CACV,CAAC,CAAC,CAAC,IAAI,IACP,CACJ,EACD,SAAS,EAAC,cAAc,GACxB,CACH,CAAC,CAAC,CAAC,CAAC,kBAAkB,CAAC,CAAC,CAAC,CACxB,KAAC,eAAe,IACd,KAAK,EAAE,SAAS,EAChB,QAAQ,EAAE,uBAAuB,EACjC,QAAQ,EAAE,CAAC,QAAQ,EAAE,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,EAC5C,SAAS,EAAE,GAAG,EAAE,CAAC,KAAK,aAAa,EAAE,EACrC,UAAU,EAAE;oBACV,OAAO,EAAE,CAAC,CAAC,0BAA0B,CAAC;oBACtC,QAAQ,EAAE,CAAC,CAAC,wBAAwB,CAAC;oBACrC,QAAQ,EAAE,CAAC,CAAC,wBAAwB,CAAC;iBACtC,EACD,KAAK,EAAE,gBAAgB,EACvB,eAAe,EAAE,GAAG,EACpB,QAAQ,EAAE,CAAC,QAAQ,EAAE,KAAK,EAAE,EAAE,CAAC,KAAK,YAAY,CAAC,QAAQ,EAAE,KAAK,CAAC,EACjE,MAAM,EAAE;oBACN,OAAO,EAAE,CAAC,IAAI,EAAE,EAAE,CAChB,CAAC,CAAC,8BAA8B,EAAE;wBAChC,KAAK,EAAE,IAAI,CAAC,SAAS,IAAI,EAAE;qBAC5B,CAAC;oBACJ,WAAW,EAAE,CAAC,IAAI,EAAE,EAAE,CACpB,CAAC,CAAC,+BAA+B,EAAE;wBACjC,KAAK,EAAE,IAAI,CAAC,SAAS,IAAI,EAAE;qBAC5B,CAAC;oBACJ,MAAM,EAAE,CAAC,CAAC,6BAA6B,CAAC;iBACzC,EACD,0BAA0B,EAAE,CAAC,IAAI,EAAE,SAAS,EAAE,EAAE,CAAC,CAC/C,8BACE,kBACE,IAAI,EAAC,QAAQ,EACb,IAAI,EAAC,UAAU,EACf,SAAS,EAAC,gCAAgC,EAC1C,OAAO,EAAE,GAAG,EAAE;gCACZ,SAAS,EAAE,CAAC;gCACZ,KAAK,kBAAkB,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE;oCAC/C,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,CACjC,MAAM;wCACJ,CAAC,CAAC,mBAAmB;wCACrB,CAAC,CAAC,+BAA+B,CACpC,CAAC;gCACJ,CAAC,CAAC,CAAC;4BACL,CAAC,aAED,KAAC,QAAQ,IAAC,IAAI,EAAE,EAAE,EAAE,WAAW,EAAE,GAAG,GAAI,EACxC,6CAA4B,IACrB,EACR,aAAa,IAAI,CAAC,iBAAiB,CAAC,CAAC,CAAC,CACrC,kBACE,IAAI,EAAC,QAAQ,EACb,IAAI,EAAC,UAAU,EACf,SAAS,EAAC,gCAAgC,EAC1C,OAAO,EAAE,GAAG,EAAE;gCACZ,SAAS,EAAE,CAAC;gCACZ,yBAAyB,CAAC;oCACxB,SAAS,EAAE,IAAI,CAAC,EAAE;oCAClB,KAAK,EAAE,IAAI,CAAC,SAAS;oCACrB,IAAI,EAAE,YAAY;oCAClB,eAAe,EAAE,uBAAuB,IAAI,SAAS;iCACtD,CAAC,CAAC;4BACL,CAAC,aAED,KAAC,OAAO,IAAC,IAAI,EAAE,EAAE,EAAE,WAAW,EAAE,GAAG,GAAI,EACvC,uDAAsC,IAC/B,CACV,CAAC,CAAC,CAAC,IAAI,IACP,CACJ,EACD,SAAS,EAAC,cAAc,GACxB,CACH,CAAC,CAAC,CAAC,IAAI,IACJ,CACP,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,EACzB,UAAU,EACV,UAAU,EACV,aAAa,GAAG,KAAK,EACrB,iBAAiB,GAAG,KAAK,EACzB,SAAS,GAAG,KAAK,EACjB,WAAW,GAAG,KAAK,EACnB,iBAAiB,EACjB,kBAAkB,EAClB,0BAA0B,EAC1B,aAAa,GAAG,EAAE,EAClB,oBAAoB,GAAG,KAAK,EAC5B,kBAAkB,EAClB,oBAAoB,EACpB,yBAAyB,EACzB,kBAAkB,EAClB,kBAAkB,EAClB,oBAAoB,GAmBrB;IACC,MAAM,CAAC,GAAG,IAAI,EAAE,CAAC;IACjB,MAAM,aAAa,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC,2BAA2B,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;IACzE,MAAM,QAAQ,GAAG,WAAW,EAAE,CAAC;IAC/B,MAAM,QAAQ,GAAG,WAAW,EAAE,CAAC;IAC/B,MAAM,iBAAiB,GAAG,UAAU,EAAE,QAAQ,IAAI,eAAe,CAAC;IAClE,MAAM,eAAe,GAAG;QACtB,GAAG,iBAAiB;QACpB,GAAG,kBAAkB,CAAC,iBAAiB,EAAE,SAAS,CAAC;KACpD,CAAC;IACF,MAAM,aAAa,GAAG,iBAAiB,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;IAC3D,MAAM,QAAQ,GAAG,CAAC,IAAqB,EAAE,EAAE;QACzC,MAAM,GAAG,GACP,IAAI,CAAC,EAAE,KAAK,cAAc;YACxB,CAAC,CAAC,aAAa;YACf,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,WAAW;gBACvB,CAAC,CAAC,WAAW;gBACb,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC;QAChB,OAAO,CAAC,CAAC,gBAAgB,GAAG,EAAE,EAAE,EAAE,YAAY,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC;IAChE,CAAC,CAAC;IAEF,MAAM,cAAc,GAAG,WAAW,CAAC,CAAC,CAAC,CACnC,MAAC,OAAO,eACN,KAAC,cAAc,IAAC,OAAO,kBACrB,iBACE,IAAI,EAAC,QAAQ,EACb,OAAO,EAAE,GAAG,EAAE,CAAC,iBAAiB,EAAE,CAAC,CAAC,SAAS,CAAC,gBAE5C,SAAS;wBACP,CAAC,CAAC,CAAC,CAAC,uBAAuB,CAAC;wBAC5B,CAAC,CAAC,CAAC,CAAC,yBAAyB,CAAC,EAElC,SAAS,EAAC,wKAAwK,YAEjL,SAAS,CAAC,CAAC,CAAC,CACX,KAAC,2BAA2B,IAAC,SAAS,EAAC,0BAA0B,GAAG,CACrE,CAAC,CAAC,CAAC,CACF,KAAC,6BAA6B,IAAC,SAAS,EAAC,0BAA0B,GAAG,CACvE,GACM,GACM,EACjB,KAAC,cAAc,IAAC,IAAI,EAAC,OAAO,YACzB,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,uBAAuB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,yBAAyB,CAAC,GACvD,IACT,CACX,CAAC,CAAC,CAAC,IAAI,CAAC;IACT,MAAM,YAAY,GAAG,CACnB,MAAC,OAAO,eACN,KAAC,cAAc,IAAC,OAAO,kBACrB,iBACE,IAAI,EAAC,QAAQ,EACb,OAAO,EAAE,eAAe,gBACZ,CAAC,CAAC,gBAAgB,CAAC,EAC/B,SAAS,EAAC,+JAA+J,YAEzK,KAAC,UAAU,IAAC,SAAS,EAAC,SAAS,GAAG,GAC3B,GACM,EACjB,KAAC,cAAc,IAAC,IAAI,EAAC,OAAO,YAAE,CAAC,CAAC,gBAAgB,CAAC,GAAkB,IAC3D,CACX,CAAC;IACF,MAAM,cAAc,GAAG,CACrB,KAAC,cAAc,IACb,OAAO,EAAE,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,EACvC,IAAI,EAAC,OAAO,EACZ,SAAS,EAAE,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,GAC3C,CACH,CAAC;IACF,MAAM,yBAAyB,GAAG,CAChC,KAAC,gBAAgB,IACf,KAAK,EAAC,OAAO,EACb,OAAO,EACL,iBACE,IAAI,EAAC,QAAQ,EACb,SAAS,EAAC,kIAAkI,gBAChI,aAAa,CAAC,oBAAoB,CAAC,EAC/C,KAAK,EAAE,aAAa,CAAC,oBAAoB,CAAC,YAE1C,KAAC,QAAQ,IAAC,IAAI,EAAE,EAAE,iBAAc,MAAM,GAAG,GAClC,GAEX,CACH,CAAC;IAEF,MAAM,iBAAiB,GAAG,CACxB,KAAC,iBAAiB,IAChB,IAAI,EAAE,aAAa,EACnB,WAAW,EAAE,oBAAoB,EACjC,SAAS,EAAE,SAAS,EACpB,OAAO,EAAE,oBAAoB,EAC7B,KAAK,EAAE,kBAAkB,EACzB,MAAM,EAAE,kBAAkB,EAC1B,cAAc,EAAE,0BAA0B,EAC1C,OAAO,EAAE,oBAAoB,EAC7B,SAAS,EAAE,CAAC,GAAG,EAAE,EAAE;YACjB,kBAAkB,EAAE,CAAC,GAAG,CAAC,CAAC;YAC1B,UAAU,EAAE,EAAE,CAAC;QACjB,CAAC,EACD,aAAa,EAAE,GAAG,EAAE;YAClB,QAAQ,CAAC,qBAAqB,CAAC,OAAO,CAAC,CAAC,CAAC;YACzC,UAAU,EAAE,EAAE,CAAC;QACjB,CAAC,EACD,gBAAgB,EAAE,yBAAyB,EAC3C,UAAU,EAAE,CAAC,GAAG,EAAE,OAAO,EAAE,EAAE,CAAC,CAC5B,KAAC,OAAO,IACN,EAAE,EAAE,GAAG,CAAC,EAAE,EACV,IAAI,EAAE,GAAG,CAAC,IAAI,EACd,IAAI,EAAC,IAAI,EACT,UAAU,EAAE,OAAO,EAAE,UAAU,EAC/B,SAAS,EAAC,mBAAmB,GAC7B,CACH,EACD,IAAI,EAAE,aAAa,GACnB,CACH,CAAC;IAEF,MAAM,aAAa,GAAG,CAAC,IAAqB,EAAE,EAAE;QAC9C,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;QACvB,MAAM,oBAAoB,GAAG,kBAAkB,CAAC,IAAI,EAAE,aAAa,CAAC,CAAC;QACrE,MAAM,KAAK,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC;QAC7B,OAAO,CACL,yBACG,SAAS,CAAC,CAAC,CAAC,CACX,MAAC,OAAO,eACN,KAAC,cAAc,IAAC,OAAO,kBACrB,KAAC,IAAI,IACH,EAAE,EAAE,qBAAqB,CAAC,IAAI,CAAC,EAAE,CAAC,EAClC,OAAO,EAAE,CAAC,KAAK,EAAE,EAAE;oCACjB,IACE,IAAI,CAAC,EAAE,KAAK,MAAM;wCAClB,aAAa,KAAK,OAAO;wCACzB,CAAC,KAAK,CAAC,OAAO;wCACd,CAAC,KAAK,CAAC,OAAO;wCACd,CAAC,KAAK,CAAC,QAAQ;wCACf,CAAC,KAAK,CAAC,MAAM,EACb,CAAC;wCACD,KAAK,CAAC,cAAc,EAAE,CAAC;wCACvB,mCAAmC,CACjC,QAAQ,EACR,qBAAqB,CAAC,OAAO,CAAC,CAC/B,CAAC;wCACF,UAAU,EAAE,EAAE,CAAC;wCACf,OAAO;oCACT,CAAC;oCACD,UAAU,EAAE,EAAE,CAAC;gCACjB,CAAC,gBACW,KAAK,kBACH,oBAAoB,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,EACvD,SAAS,EAAE,EAAE,CACX,4DAA4D,EAC5D,oBAAoB;oCAClB,CAAC,CAAC,8DAA8D;oCAChE,CAAC,CAAC,yFAAyF,CAC9F,YAEA,IAAI,CAAC,CAAC,CAAC,CACN,KAAC,IAAI,IAAC,IAAI,EAAE,EAAE,EAAE,SAAS,EAAC,UAAU,GAAG,CACxC,CAAC,CAAC,CAAC,CACF,eAAM,SAAS,EAAC,kBAAkB,iBAAa,MAAM,GAAG,CACzD,GACI,GACQ,EACjB,KAAC,cAAc,IAAC,IAAI,EAAC,OAAO,YAAE,KAAK,GAAkB,IAC7C,CACX,CAAC,CAAC,CAAC,CACF,MAAC,IAAI,IACH,EAAE,EAAE,qBAAqB,CAAC,IAAI,CAAC,EAAE,CAAC,EAClC,OAAO,EAAE,CAAC,KAAK,EAAE,EAAE;wBACjB,IACE,IAAI,CAAC,EAAE,KAAK,MAAM;4BAClB,aAAa,KAAK,OAAO;4BACzB,CAAC,KAAK,CAAC,OAAO;4BACd,CAAC,KAAK,CAAC,OAAO;4BACd,CAAC,KAAK,CAAC,QAAQ;4BACf,CAAC,KAAK,CAAC,MAAM,EACb,CAAC;4BACD,KAAK,CAAC,cAAc,EAAE,CAAC;4BACvB,mCAAmC,CACjC,QAAQ,EACR,qBAAqB,CAAC,OAAO,CAAC,CAC/B,CAAC;4BACF,UAAU,EAAE,EAAE,CAAC;4BACf,OAAO;wBACT,CAAC;wBACD,UAAU,EAAE,EAAE,CAAC;oBACjB,CAAC,kBACa,oBAAoB,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,EACvD,SAAS,EAAE,EAAE,CACX,4DAA4D,EAC5D,oBAAoB;wBAClB,CAAC,CAAC,8DAA8D;wBAChE,CAAC,CAAC,yFAAyF,CAC9F,aAEA,IAAI,CAAC,CAAC,CAAC,CACN,KAAC,IAAI,IAAC,IAAI,EAAE,EAAE,EAAE,SAAS,EAAC,UAAU,GAAG,CACxC,CAAC,CAAC,CAAC,CACF,eAAM,SAAS,EAAC,kBAAkB,iBAAa,MAAM,GAAG,CACzD,EACD,eAAM,SAAS,EAAC,UAAU,YAAE,KAAK,GAAQ,IACpC,CACR,EACA,CAAC,SAAS,IAAI,IAAI,CAAC,EAAE,KAAK,MAAM,IAAI,oBAAoB,CAAC,CAAC,CAAC,CAC1D,KAAC,oBAAoB,IACnB,UAAU,EAAE,UAAU,EACtB,aAAa,EAAE,aAAa,EAC5B,iBAAiB,EAAE,iBAAiB,GACpC,CACH,CAAC,CAAC,CAAC,IAAI,KAvFD,IAAI,CAAC,EAAE,CAwFX,CACN,CAAC;IACJ,CAAC,CAAC;IAEF,MAAM,gBAAgB,GAAG,CACvB,cAAK,SAAS,EAAE,EAAE,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,YACvD,aACE,SAAS,EAAE,EAAE,CACX,SAAS,CAAC,CAAC,CAAC,kCAAkC,CAAC,CAAC,CAAC,aAAa,CAC/D,YAEA,gBAAgB,CAAC,GAAG,CAAC,aAAa,CAAC,GACjC,GACD,CACP,CAAC;IACF,MAAM,kBAAkB,GAAG,CACzB,cACE,SAAS,EAAE,EAAE,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC,CAAC,0BAA0B,CAAC,CAAC,CAAC,MAAM,CAAC,YAEtE,KAAC,WAAW,IAAC,OAAO,EAAE,SAAS,EAAE,YAAY,QAAC,YAAY,EAAC,UAAU,GAAG,GACpE,CACP,CAAC;IACF,MAAM,oBAAoB,GAAG,CAC3B,KAAC,oBAAoB,IACnB,SAAS,EAAE,SAAS,EACpB,QAAQ,EAAE,cAAc,EACxB,MAAM,EAAE,YAAY,EACpB,QAAQ,EAAE,cAAc,GACxB,CACH,CAAC;IAEF,OAAO,CACL,8BACE,cACE,SAAS,EAAE,EAAE,CACX,gEAAgE,EAChE,SAAS,CAAC,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,MAAM,CAC3C,YAED,MAAC,IAAI,IACH,EAAE,EAAE,qBAAqB,CAAC,WAAW,CAAC,gBAC1B,GAAG,sBAAsB,WAAW,8BAEhD,SAAS,EAAE,EAAE,CACX,8GAA8G,EAC9G,SAAS,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC,OAAO,CACvC,aAED,cACE,GAAG,EAAE,OAAO,CAAC,8BAA8B,CAAC,EAC5C,GAAG,EAAC,EAAE,iBACM,MAAM,EAClB,KAAK,EAAE,EAAE,EACT,MAAM,EAAE,EAAE,EACV,SAAS,EAAE,EAAE,CACX,yDAAyD,EACzD,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,cAAc,CACvC,GACD,EACF,cACE,GAAG,EAAE,OAAO,CAAC,6BAA6B,CAAC,EAC3C,GAAG,EAAC,EAAE,iBACM,MAAM,EAClB,KAAK,EAAE,EAAE,EACT,MAAM,EAAE,EAAE,EACV,SAAS,EAAE,EAAE,CACX,yDAAyD,EACzD,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,cAAc,CACvC,GACD,EACD,CAAC,SAAS,IAAI,CACb,cAAK,SAAS,EAAC,gBAAgB,YAC7B,mDAEE,SAAS,EAAC,2DAA2D,YAEpE,sBAAsB,GACnB,GACF,CACP,IACI,GACH,EAEL,aAAa,CAAC,CAAC,CAAC,CACf,cAAK,SAAS,EAAC,8CAA8C,YAC3D,KAAC,oBAAoB,IACnB,UAAU,EAAE,UAAU,EACtB,WAAW,QACX,aAAa,QACb,iBAAiB,EAAE,iBAAiB,EACpC,SAAS,EAAE,SAAS,EACpB,mBAAmB,EAAE;wBACnB,SAAS,EAAE,yBAAyB;wBACpC,SAAS,EAAE,kBAAkB;wBAC7B,kBAAkB,EAAE,GAAG,EAAE;4BACvB,QAAQ,CAAC,qBAAqB,CAAC,qBAAqB,CAAC,CAAC,CAAC;4BACvD,UAAU,EAAE,EAAE,CAAC;wBACjB,CAAC;wBACD,eAAe,EAAE,GAAG,EAAE;4BACpB,QAAQ,CAAC,qBAAqB,CAAC,oBAAoB,CAAC,CAAC,CAAC;4BACtD,UAAU,EAAE,EAAE,CAAC;wBACjB,CAAC;qBACF,EACD,OAAO,EAAE,iBAAiB,GAC1B,GACE,CACP,CAAC,CAAC,CAAC,IAAI,EACP,CAAC,aAAa,CAAC,CAAC,CAAC,CAChB,cAAK,SAAS,EAAC,gCAAgC,YAC7C,cAAK,SAAS,EAAE,EAAE,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,YACvD,aACE,SAAS,EAAE,EAAE,CACX,SAAS,CAAC,CAAC,CAAC,kCAAkC,CAAC,CAAC,CAAC,aAAa,CAC/D,YAEA,eAAe,CAAC,GAAG,CAAC,aAAa,CAAC,GAChC,GACD,GACF,CACP,CAAC,CAAC,CAAC,IAAI,EACR,eACE,SAAS,EAAC,kBAAkB,kCACE,aAAa,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,UAAU,aAEtE,gBAAgB,EAChB,kBAAkB,EAClB,oBAAoB,IACjB,IACL,CACJ,CAAC;AACJ,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,4BAA4B,CAAC,EAC3C,YAAY,EACZ,SAAS,EACT,OAAO,EACP,eAAe,EACf,IAAI,GAOL;IACC,IAAI,CAAC,YAAY,EAAE,CAAC;QAClB,OAAO,CACL,KAAC,gBAAgB,IACf,GAAG,EAAE,IAAI,EACT,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,YAAY,EAC1C,WAAW,EAAE,GAAG,EAAE,CAAC,IAAI,EACvB,IAAI,EAAE,IAAI,GACV,CACH,CAAC;IACJ,CAAC;IACD,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;QAC/B,OAAO,CACL,KAAC,gBAAgB,IACf,GAAG,EAAE;gBACH,EAAE,EAAE,YAAY,CAAC,EAAE;gBACnB,IAAI,EAAE,YAAY,CAAC,IAAI,IAAI,YAAY,CAAC,EAAE;aAC3C,EACD,MAAM,EAAC,OAAO,EACd,YAAY,EAAE,IAAI,CAAC,gBAAgB,CAAC,EACpC,WAAW,EAAE,GAAG,EAAE,CAAC,IAAI,EACvB,IAAI,EAAE,IAAI,GACV,CACH,CAAC;IACJ,CAAC;IACD,OAAO,CACL,KAAC,iBAAiB,IAChB,GAAG,EAAE;YACH,EAAE,EAAE,YAAY,CAAC,EAAE;YACnB,IAAI,EAAE,YAAY,CAAC,IAAI,IAAI,YAAY,CAAC,EAAE;YAC1C,IAAI,EAAE,YAAY,CAAC,IAAI;YACvB,GAAG,EAAE,YAAY,CAAC,GAAG;SACtB,EACD,SAAS,EAAE,SAAS,EACpB,WAAW,EAAE,CAAC,eAAe,EAC7B,IAAI,EAAE,IAAI,GACV,CACH,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,MAAM,CAAC,EACrB,QAAQ,EACR,UAAU,EACV,aAAa,GAKd;IACC,MAAM,CAAC,GAAG,IAAI,EAAE,CAAC;IACjB,MAAM,QAAQ,GAAG,WAAW,EAAE,CAAC;IAC/B,MAAM,QAAQ,GAAG,WAAW,EAAE,CAAC;IAC/B,MAAM,SAAS,GAAG,cAAc,EAAE,CAAC;IACnC,MAAM,aAAa,GAAG,gBAAgB,EAAE,CAAC;IACzC,MAAM,CAAC,UAAU,EAAE,aAAa,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IACpD,0EAA0E;IAC1E,wEAAwE;IACxE,0EAA0E;IAC1E,MAAM,eAAe,GAAG,WAAW,EAAE,CAAC;IACtC,MAAM,CAAC,gBAAgB,EAAE,mBAAmB,CAAC,GAAG,QAAQ,CAAC,GAAG,EAAE;QAC5D,IAAI,OAAO,MAAM,KAAK,WAAW;YAAE,OAAO,KAAK,CAAC;QAChD,IAAI,CAAC;YACH,OAAO,MAAM,CAAC,YAAY,CAAC,OAAO,CAAC,oBAAoB,CAAC,KAAK,GAAG,CAAC;QACnE,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,KAAK,CAAC;QACf,CAAC;IACH,CAAC,CAAC,CAAC;IACH,MAAM,aAAa,GAAG,iBAAiB,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;IAC3D,MAAM,CAAC,gBAAgB,CAAC,GAAG,QAAQ,CAAC,GAAG,EAAE,CACvC,OAAO,MAAM,KAAK,WAAW;QAC3B,CAAC,CAAC,wBAAwB,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC;QAClD,CAAC,CAAC,KAAK,CACV,CAAC;IACF,MAAM,WAAW,GACf,aAAa,KAAK,OAAO,IAAI,aAAa,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;IAClE,MAAM,qBAAqB,GAAG,gBAAgB,CAAC,aAAa,CAAC,IAAI,KAAK,CAAC;IACvE,MAAM,mBAAmB,GAAG,iCAAiC,CAC3D,QAAQ,CAAC,QAAQ,CAClB,CAAC;IACF,MAAM,cAAc,GAAG,mBAAmB;QACxC,CAAC,CAAC,uBAAuB,CAAC,aAAa,CAAC;QACxC,CAAC,CAAC,IAAI,CAAC;IACT,MAAM,uBAAuB,GAAG,OAAO,CAAC,cAAc,CAAC,CAAC;IACxD,MAAM,uBAAuB,GAC3B,mBAAmB;QACnB,OAAO,MAAM,KAAK,WAAW;QAC7B,IAAI,eAAe,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,UAAU,CAAC,KAAK,GAAG,CAAC;IACtE,MAAM,CAAC,mBAAmB,EAAE,sBAAsB,CAAC,GAAG,QAAQ,CAAC,GAAG,EAAE,CAClE,iBAAiB,EAAE,CACpB,CAAC;IACF,MAAM,iBAAiB,GACrB,OAAO,MAAM,KAAK,WAAW;QAC7B,IAAI,eAAe,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,WAAW,CAAC,KAAK,GAAG,CAAC;IACvE,MAAM,aAAa,GACjB,UAAU,EAAE,SAAS,KAAK,IAAI,IAAI,mBAAmB,IAAI,iBAAiB,CAAC;IAC7E,MAAM,sBAAsB,GAAG,qBAAqB,KAAK,KAAK,CAAC;IAC/D,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,CAAC,gBAAgB,IAAI,OAAO,MAAM,KAAK,WAAW;YAAE,OAAO;QAC/D,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QAC1C,IAAI,wBAAwB,CAAC,GAAG,CAAC,MAAM,CAAC;YAAE,OAAO;QACjD,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,UAAU,EAAE,GAAG,CAAC,CAAC;QACtC,MAAM,CAAC,OAAO,CAAC,YAAY,CACzB,MAAM,CAAC,OAAO,CAAC,KAAK,EACpB,EAAE,EACF,GAAG,GAAG,CAAC,QAAQ,GAAG,GAAG,CAAC,MAAM,GAAG,GAAG,CAAC,IAAI,EAAE,CAC1C,CAAC;IACJ,CAAC,EAAE,CAAC,gBAAgB,EAAE,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC;IAC3D,MAAM,CAAC,kBAAkB,EAAE,qBAAqB,CAAC,GAC/C,QAAQ,CAA+B,GAAG,EAAE,CAAC,sBAAsB,EAAE,CAAC,CAAC;IACzE,MAAM,6BAA6B,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;IACpD,MAAM,kBAAkB,GAAG,cAAc,CACvC,qBAAqB,EACrB,EAAE,iBAAiB,EAAE,KAAK,EAAE,eAAe,EAAE,IAAI,EAAE,EACnD,EAAE,OAAO,EAAE,aAAa,EAAE,CAC3B,CAAC;IACF,MAAM,yBAAyB,GAAG,cAAc,CAC9C,WAAW,EACX,EAAE,EACF,EAAE,OAAO,EAAE,aAAa,EAAE,CAC3B,CAAC;IACF,MAAM,sBAAsB,GAAG,OAAO,CACpC,GAAG,EAAE,CAAC,2BAA2B,CAAC,kBAAkB,CAAC,IAAI,CAAC,EAC1D,CAAC,kBAAkB,CAAC,IAAI,CAAC,CAC1B,CAAC;IACF,MAAM,yBAAyB,GAAG,OAAO,CAA6B,GAAG,EAAE;QACzE,MAAM,aAAa,GAAG,IAAI,GAAG,EAAoC,CAAC;QAClE,KAAK,MAAM,GAAG,IAAI,sBAAsB,EAAE,CAAC;YACzC,aAAa,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,WAAW,EAAE,EAAE;gBACtC,EAAE,EAAE,GAAG,CAAC,EAAE;gBACV,IAAI,EAAE,GAAG,CAAC,IAAI;gBACd,IAAI,EAAE,GAAG,CAAC,IAAI;gBACd,GAAG,EAAE,GAAG,CAAC,GAAG;gBACZ,OAAO,EAAE,GAAG,CAAC,MAAM,KAAK,SAAS,IAAI,GAAG,CAAC,QAAQ,KAAK,IAAI;aAC3D,CAAC,CAAC;QACL,CAAC;QACD,KAAK,MAAM,GAAG,IAAI,yBAAyB,CAAC,IAAI,EAAE,IAAI,IAAI,EAAE,EAAE,CAAC;YAC7D,MAAM,EAAE,GAAG,GAAG,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC;YACzB,IAAI,CAAC,EAAE,IAAI,aAAa,CAAC,GAAG,CAAC,EAAE,CAAC,WAAW,EAAE,CAAC;gBAAE,SAAS;YACzD,aAAa,CAAC,GAAG,CAAC,EAAE,CAAC,WAAW,EAAE,EAAE;gBAClC,EAAE;gBACF,IAAI,EAAE,GAAG,CAAC,IAAI;gBACd,GAAG,EAAE,GAAG,CAAC,GAAG;gBACZ,OAAO,EAAE,IAAI;aACd,CAAC,CAAC;QACL,CAAC;QACD,OAAO,CAAC,GAAG,aAAa,CAAC,MAAM,EAAE,CAAC,CAAC;IACrC,CAAC,EAAE,CAAC,yBAAyB,CAAC,IAAI,EAAE,IAAI,EAAE,sBAAsB,CAAC,CAAC,CAAC;IACnE,MAAM,iBAAiB,GAAG,OAAO,CAC/B,GAAG,EAAE,CACH,yBAAyB;SACtB,MAAM,CACL,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,OAAO,IAAI,uCAAuC,CAAC,GAAG,CAAC,CACrE;SACA,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;QACb,EAAE,EAAE,GAAG,CAAC,EAAE;QACV,IAAI,EAAE,GAAG,CAAC,IAAI,IAAI,GAAG,CAAC,EAAE;KACzB,CAAC,CAAC,EACP,CAAC,yBAAyB,CAAC,CAC5B,CAAC;IACF,MAAM,gBAAgB,GAAG,WAAW,CAClC,CAAC,GAAqB,EAAE,EAAE;QACxB,IAAI,wBAAwB,CAAC,GAAG,CAAC,EAAE,CAAC;YAAE,OAAO;QAC7C,MAAM,YAAY,GAAG,yBAAyB,CAAC,IAAI,CACjD,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,EAAE,CAAC,WAAW,EAAE,KAAK,GAAG,CAAC,EAAE,CAAC,WAAW,EAAE,CACnE,CAAC;QACF,MAAM,UAAU,GACd,YAAY;YACZ,CAAC,iBAAiB,CAAC,YAAY,CAAC;YAChC,yBAAyB,CAAC,YAAY,CAAC;YACrC,CAAC,CAAC,sBAAsB,CAAC,YAAY,EAAE,GAAG,CAAC;YAC3C,CAAC,CAAC,IAAI,CAAC;QACX,IAAI,UAAU,EAAE,CAAC;YACf,sBAAsB,CAAC,UAAU,CAAC,CAAC;YACnC,OAAO;QACT,CAAC;QACD,QAAQ,CAAC,qBAAqB,CAAC,iBAAiB,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IAC7D,CAAC,EACD,CAAC,yBAAyB,EAAE,QAAQ,CAAC,CACtC,CAAC;IACF,MAAM,aAAa,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC,2BAA2B,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;IACzE,MAAM,CAAC,aAAa,EAAE,gBAAgB,CAAC,GACrC,QAAQ,CAA+B,IAAI,CAAC,CAAC;IAC/C,MAAM,CAAC,eAAe,EAAE,kBAAkB,CAAC,GAAG,QAAQ,CAAgB,IAAI,CAAC,CAAC;IAC5E,MAAM,qBAAqB,GAAG,wBAAwB,EAAE,CAAC;IACzD,MAAM,oBAAoB,GAAG,uBAAuB,CAAC,qBAAqB,CAAC,CAAC;IAC5E,MAAM,yBAAyB,GAAG,4BAA4B,CAC5D,qBAAqB,CACtB,CAAC;IACF,MAAM,oBAAoB,GAAG,cAAc,CACzC,sBAAsB,EACtB,EAAE,QAAQ,EAAE,SAAS,EAAE,KAAK,EAAE,EAAE,EAAE,EAClC;QACE,OAAO,EACL,aAAa;YACb,WAAW;YACX,oBAAoB,CAAC,WAAW,EAAE,UAAU,CAAC,SAAS,CAAC,KAAK,IAAI;KACnE,CACF,CAAC;IACF,MAAM,qBAAqB,GAAG,wBAAwB,CAAC,qBAAqB,CAAC,CAAC;IAC9E,MAAM,EAAE,OAAO,EAAE,4BAA4B,EAAE,GAAG,qBAAqB,CAAC;IACxE,MAAM,sBAAsB,GAAG,yBAAyB,CACtD,qBAAqB,CACtB,CAAC;IACF,MAAM,wBAAwB,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;IAC/C,MAAM,0BAA0B,GAAG,MAAM,CACvC,IAAI,CACL,CAAC;IACF,MAAM,gCAAgC,GAAG,MAAM,CAAC,qBAAqB,CAAC,CAAC;IACvE,MAAM,mCAAmC,GAAG,MAAM,CAAgB,IAAI,CAAC,CAAC;IACxE,MAAM,yBAAyB,GAAG,OAAO,CACvC,GAAG,EAAE,CACH,oBAAoB,CAAC,IAAI,CAAC,IAAI,CAC5B,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,EAAE,KAAK,oBAAoB,CAAC,WAAW,CACrD,IAAI,IAAI,EACX,CAAC,oBAAoB,CAAC,CACvB,CAAC;IACF,MAAM,qBAAqB,GACzB,aAAa;QACb,WAAW;QACX,yBAAyB,EAAE,IAAI,KAAK,KAAK;QACzC,yBAAyB,CAAC,SAAS,KAAK,MAAM,CAAC;IACjD,MAAM,oBAAoB,GACxB,aAAa,IAAI,yBAAyB,EAAE,IAAI,KAAK,KAAK,CAAC;IAC7D,MAAM,yBAAyB,GAAG,oBAAoB;QACpD,CAAC,CAAC,yBAAyB,EAAE,IAAI,KAAK,KAAK;YACzC,yBAAyB,CAAC,KAAK,KAAK,UAAU;YAC9C,CAAC,CAAC,0BAA0B,CAAC,yBAAyB,CAAC,IAAI,IAAI,EAAE,CAAC;YAClE,CAAC,CAAC,SAAS;QACb,CAAC,CAAC,0BAA0B,CAAC,aAAa,CAAC,CAAC;IAC9C,MAAM,oBAAoB,GAAG,mBAAmB;QAC9C,CAAC,CAAC,CAAC,uBAAuB,CAAC,aAAa,CAAC,IAAI,SAAS,CAAC;QACvD,CAAC,CAAC,oBAAoB,IAAI,yBAAyB,EAAE,IAAI,KAAK,KAAK;YACjE,CAAC,CAAC,yBAAyB,CAAC,KAAK;YACjC,CAAC,CAAC,SAAS,CAAC;IAChB,MAAM,wBAAwB,GAAG,OAAO,CACtC,GAAG,EAAE,CACH,CAAC,oBAAoB,CAAC,IAAI,EAAE,OAAO,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;QAC1D,SAAS,EAAE,MAAM,CAAC,EAAE;QACpB,KAAK,EACH,MAAM,CAAC,KAAK,IAAI,aAAa,CAAC,aAAa,EAAE,EAAE,IAAI,EAAE,MAAM,CAAC,EAAE,EAAE,CAAC;QACnE,QAAQ,EAAE,MAAM,CAAC,OAAO,IAAI,MAAM,CAAC,OAAO,IAAI,aAAa,CAAC,SAAS,CAAC;QACtE,MAAM,EAAE,QAAQ;QAChB,GAAG,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,MAAM,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KAC7D,CAAC,CAAC,EACL,CAAC,oBAAoB,CAAC,IAAI,EAAE,aAAa,CAAC,CAC3C,CAAC;IACF,MAAM,oBAAoB,GAAG,WAAW,CACtC,CAAC,IAAkC,EAAE,EAAE;QACrC,gBAAgB,CAAC,IAAI,CAAC,CAAC;QACvB,KAAK,mBAAmB,CAAC,yBAAyB,EAAE,IAAI,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE;YACnE,kBAAkB,CAChB,iEAAiE,CAClE,CAAC;QACJ,CAAC,CAAC,CAAC;IACL,CAAC,EACD,EAAE,CACH,CAAC;IACF,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,CAAC,aAAa,IAAI,WAAW;YAAE,OAAO;QAC1C,oBAAoB,CAAC,IAAI,CAAC,CAAC;QAC3B,0BAA0B,EAAE,CAAC;QAC7B,yBAAyB,CAAC,QAAQ,EAAE,CAAC;IACvC,CAAC,EAAE;QACD,aAAa;QACb,yBAAyB;QACzB,WAAW;QACX,oBAAoB;KACrB,CAAC,CAAC;IACH,MAAM,iBAAiB,GAAG,WAAW,CACnC,CACE,IAA2B,EAC3B,SAAS,GAAiC,MAAM,EAChD,EAAE;QACF,IAAI,SAAS,KAAK,MAAM,IAAI,CAAC,sBAAsB;YAAE,OAAO;QAC5D,mBAAmB,CAAC,IAAI,CAAC,CAAC;QAC1B,kBAAkB,CAAC,IAAI,CAAC,CAAC;QACzB,0BAA0B,EAAE,CAAC;QAC7B,IAAI,CAAC,WAAW,EAAE,CAAC;YACjB,mCAAmC,CACjC,QAAQ,EACR,qBAAqB,CAAC,OAAO,CAAC,CAC/B,CAAC;QACJ,CAAC;QACD,MAAM,GAAG,GAAG,yBAAyB,CAAC,IAAI,CACxC,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,EAAE,KAAK,IAAI,CAAC,KAAK,CAC3C,CAAC;QACF,yBAAyB,CAAC,IAAI,CAAC;YAC7B,EAAE,EAAE,qBAAqB,CACvB,KAAK,EACL,GAAG,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,IAAI,GAAG,EAAE,CACjD;YACD,IAAI,EAAE,KAAK;YACX,KAAK,EAAE,GAAG,EAAE,IAAI,IAAI,IAAI,CAAC,KAAK;YAC9B,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,SAAS;YACT,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACzC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SAC1C,CAAC,CAAC;QACH,4BAA4B,CAAC,IAAI,CAAC,CAAC;QACnC,oBAAoB,CAAC,EAAE,GAAG,IAAI,EAAE,SAAS,EAAE,CAAC,CAAC;IAC/C,CAAC,EACD;QACE,yBAAyB;QACzB,yBAAyB;QACzB,sBAAsB;QACtB,oBAAoB;QACpB,WAAW;QACX,QAAQ;QACR,4BAA4B;KAC7B,CACF,CAAC;IACF,MAAM,oBAAoB,GAAG,WAAW,CACtC,CAAC,IAA0B,EAAE,EAAE;QAC7B,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;YACvB,oBAAoB,CAAC,IAAI,CAAC,CAAC;YAC3B,0BAA0B,EAAE,CAAC;YAC7B,yBAAyB,CAAC,IAAI,CAAC;gBAC7B,EAAE,EAAE,qBAAqB,CAAC,SAAS,EAAE,UAAU,CAAC;gBAChD,IAAI,EAAE,SAAS;gBACf,KAAK,EAAE,SAAS;gBAChB,GAAG,EAAE,yBAAyB;aAC/B,CAAC,CAAC;YACH,OAAO;QACT,CAAC;QACD,IAAI,IAAI,KAAK,QAAQ;YAAE,OAAO;QAC9B,oBAAoB,CAAC,IAAI,CAAC,CAAC;QAC3B,0BAA0B,EAAE,CAAC;QAC7B,yBAAyB,CAAC,IAAI,CAAC;YAC7B,EAAE,EAAE,qBAAqB,CAAC,QAAQ,EAAE,UAAU,CAAC;YAC/C,IAAI,EAAE,QAAQ;YACd,KAAK,EAAE,QAAQ;SAChB,CAAC,CAAC;IACL,CAAC,EACD,CAAC,yBAAyB,EAAE,oBAAoB,CAAC,CAClD,CAAC;IACF,MAAM,2BAA2B,GAAG,WAAW,CAC7C,CAAC,MAAkC,EAAE,EAAE;QACrC,MAAM,UAAU,GAAG,6BAA6B,CAAC,MAAM,CAAC,CAAC;QACzD,IAAI,UAAU,CAAC,MAAM,KAAK,YAAY,EAAE,CAAC;YACvC,kBAAkB,CAChB,iCAAiC,CAAC,UAAU,CAAC,MAAM,CAAC,CACrD,CAAC;YACF,OAAO;QACT,CAAC;QACD,IAAI,UAAU,CAAC,MAAM,CAAC,cAAc,IAAI,OAAO,MAAM,KAAK,WAAW,EAAE,CAAC;YACtE,IAAI,CAAC;gBACH,qEAAqE;gBACrE,oEAAoE;gBACpE,kEAAkE;gBAClE,IACE,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,GAAG,EAAE,QAAQ,EAAE,qBAAqB,CAAC,EACnE,CAAC;oBACD,OAAO;gBACT,CAAC;YACH,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,OAAO,CAAC,IAAI,CACV,kEAAkE,EAClE,KAAK,CACN,CAAC;gBACF,qDAAqD;YACvD,CAAC;QACH,CAAC;QACD,oBAAoB,CAAC,IAAI,CAAC,CAAC;QAC3B,0BAA0B,EAAE,CAAC;QAC7B,kBAAkB,CAAC,IAAI,CAAC,CAAC;QACzB,yBAAyB,CAAC,IAAI,CAAC;YAC7B,EAAE,EAAE,qBAAqB,CAAC,SAAS,EAAE,UAAU,CAAC,MAAM,CAAC,GAAG,CAAC;YAC3D,IAAI,EAAE,SAAS;YACf,KAAK,EAAE,UAAU,CAAC,MAAM,CAAC,KAAK,IAAI,SAAS;YAC3C,GAAG,EAAE,UAAU,CAAC,MAAM,CAAC,GAAG;SAC3B,CAAC,CAAC;IACL,CAAC,EACD,CAAC,yBAAyB,EAAE,oBAAoB,CAAC,CAClD,CAAC;IACF,MAAM,uBAAuB,GAAG,WAAW,CACzC,CAAC,MAA8B,EAAE,EAAE;QACjC,IAAI,kBAAkB,CAAC,SAAS,IAAI,yBAAyB,CAAC,SAAS,EAAE,CAAC;YACxE,0BAA0B,CAAC,OAAO,GAAG,MAAM,CAAC;YAC5C,OAAO;QACT,CAAC;QACD,IAAI,kBAAkB,CAAC,OAAO,EAAE,CAAC;YAC/B,0BAA0B,CAAC,OAAO,GAAG,IAAI,CAAC;YAC1C,kBAAkB,CAChB,0EAA0E,CAC3E,CAAC;YACF,OAAO;QACT,CAAC;QAED,MAAM,UAAU,GAAG,yBAAyB,CAC1C,MAAM,EACN,yBAAyB,EACzB;YACE,aAAa,EACX,OAAO,MAAM,KAAK,WAAW,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM;SACrE,CACF,CAAC;QACF,0BAA0B,CAAC,OAAO,GAAG,IAAI,CAAC;QAC1C,IAAI,UAAU,CAAC,MAAM,KAAK,YAAY,EAAE,CAAC;YACvC,kBAAkB,CAAC,0BAA0B,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC;YAClE,OAAO;QACT,CAAC;QACD,IAAI,wBAAwB,CAAC,UAAU,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC;YACtD,0BAA0B,EAAE,CAAC;YAC7B,yBAAyB,CAAC,QAAQ,EAAE,CAAC;YACrC,4BAA4B,CAAC,KAAK,CAAC,CAAC;YACpC,oBAAoB,CAAC,IAAI,CAAC,CAAC;YAC3B,IAAI,UAAU,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;gBAC3B,mCAAmC,CACjC,QAAQ,EACR,qBAAqB,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,CAC9C,CAAC;YACJ,CAAC;YACD,OAAO;QACT,CAAC;QACD,iBAAiB,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;IACvC,CAAC,EACD;QACE,yBAAyB;QACzB,kBAAkB,CAAC,OAAO;QAC1B,kBAAkB,CAAC,SAAS;QAC5B,yBAAyB,CAAC,SAAS;QACnC,yBAAyB;QACzB,0BAA0B;QAC1B,iBAAiB;QACjB,QAAQ;QACR,oBAAoB;QACpB,4BAA4B;KAC7B,CACF,CAAC;IACF,MAAM,qBAAqB,GAAG,uBAAuB,CAAC;QACpD,UAAU,EAAE,UAAU;QACtB,UAAU,EAAE,aAAa;QACzB,OAAO,EAAE,CAAC,WAAW;KACtB,CAAC,CAAC;IACH,MAAM,sBAAsB,GAAG;QAC7B,UAAU,EAAE,UAAU;QACtB,UAAU,EAAE,CAAC,QAAgB,EAAE,EAAE,CAC/B,QAAQ,KAAK,OAAO,IAAI,QAAQ,CAAC,UAAU,CAAC,QAAQ,CAAC;QACvD,oBAAoB,EAAE,IAAI;KAC3B,CAAC;IACF,4BAA4B,CAAC,sBAAsB,CAAC,CAAC;IAErD,SAAS,CAAC,GAAG,EAAE;QACb,MAAM,gBAAgB,GAAG,CAAC,KAAY,EAAE,EAAE;YACxC,MAAM,OAAO,GAAI,KAA4C,CAAC,MAAM;gBAClE,EAAE,OAAO,CAAC;YACZ,sBAAsB,CAAC,OAAO,KAAK,IAAI,CAAC,CAAC;QAC3C,CAAC,CAAC;QACF,MAAM,CAAC,gBAAgB,CAAC,6BAA6B,EAAE,gBAAgB,CAAC,CAAC;QACzE,OAAO,GAAG,EAAE,CACV,MAAM,CAAC,mBAAmB,CACxB,6BAA6B,EAC7B,gBAAgB,CACjB,CAAC;IACN,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,SAAS,CAAC,GAAG,EAAE;QACb,IACE,CAAC,aAAa;YACd,CAAC,WAAW;YACZ,6BAA6B,CAAC,OAAO,EACrC,CAAC;YACD,OAAO;QACT,CAAC;QACD,6BAA6B,CAAC,OAAO,GAAG,IAAI,CAAC;QAC7C,KAAK,kBAAkB,CAAU,uBAAuB,CAAC;aACtD,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE;YACd,IAAI,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ;gBAAE,OAAO;YAChD,MAAM,SAAS,GAAG,KAA8C,CAAC;YACjE,MAAM,GAAG,GAAG,CAAC,KAAc,EAAE,EAAE,CAC7B,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;gBAClB,CAAC,CAAC,KAAK,CAAC,MAAM,CACV,CAAC,EAAE,EAAgB,EAAE,CACnB,OAAO,EAAE,KAAK,QAAQ,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,CACjD;gBACH,CAAC,CAAC,EAAE,CAAC;YACT,qBAAqB,CAAC;gBACpB,SAAS,EAAE,CAAC,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC,CAAC;gBACjD,UAAU,EAAE,CAAC,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC,CAAC;aACpD,CAAC,CAAC;QACL,CAAC,CAAC;aACD,KAAK,CAAC,GAAG,EAAE;YACV,gFAAgF;QAClF,CAAC,CAAC,CAAC;IACP,CAAC,EAAE,CAAC,aAAa,EAAE,WAAW,CAAC,CAAC,CAAC;IAEjC,MAAM,yBAAyB,GAAG,WAAW,CAC3C,CAAC,MAAoC,EAAE,EAAE;QACvC,qBAAqB,CAAC,MAAM,CAAC,CAAC;QAC9B,KAAK,mBAAmB,CAAC,uBAAuB,EAAE,MAAM,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE;YACnE,kBAAkB,CAChB,qEAAqE,CACtE,CAAC;QACJ,CAAC,CAAC,CAAC;IACL,CAAC,EACD,EAAE,CACH,CAAC;IAEF,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,CAAC,aAAa,EAAE,CAAC;YACnB,gBAAgB,CAAC,IAAI,CAAC,CAAC;YACvB,0BAA0B,EAAE,CAAC;YAC7B,yBAAyB,CAAC,QAAQ,EAAE,CAAC;YACrC,kBAAkB,CAAC,IAAI,CAAC,CAAC;YACzB,0BAA0B,CAAC,OAAO,GAAG,IAAI,CAAC;YAC1C,wBAAwB,CAAC,OAAO,GAAG,KAAK,CAAC;YACzC,OAAO;QACT,CAAC;QACD,MAAM,cAAc,GAAG,yBAAyB,CAAC,uBAAuB,CAAC,CAAC;QAC1E,MAAM,kBAAkB,GAAG,6BAA6B,CACtD,2BAA2B,CAC5B,CAAC;QACF,OAAO,GAAG,EAAE;YACV,cAAc,EAAE,CAAC;YACjB,kBAAkB,EAAE,CAAC;QACvB,CAAC,CAAC;IACJ,CAAC,EAAE;QACD,aAAa;QACb,WAAW;QACX,yBAAyB;QACzB,uBAAuB;QACvB,2BAA2B;KAC5B,CAAC,CAAC;IAEH,SAAS,CAAC,GAAG,EAAE;QACb,IACE,CAAC,aAAa;YACd,CAAC,WAAW;YACZ,wBAAwB,CAAC,OAAO;YAChC,kBAAkB,CAAC,SAAS;YAC5B,kBAAkB,CAAC,OAAO,EAC1B,CAAC;YACD,OAAO;QACT,CAAC;QACD,wBAAwB,CAAC,OAAO,GAAG,IAAI,CAAC;QACxC,IAAI,aAAa;YAAE,OAAO;QAC1B,IAAI,MAAM,GAAG,IAAI,CAAC;QAClB,KAAK,kBAAkB,CAAU,yBAAyB,CAAC;aACxD,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE;YACd,IAAI,CAAC,MAAM;gBAAE,OAAO;YACpB,MAAM,SAAS,GAAG,sBAAsB,CAAC,KAAK,CAAC,CAAC;YAChD,IAAI,CAAC,SAAS;gBAAE,OAAO;YACvB,MAAM,UAAU,GAAG,yBAAyB,CAC1C;gBACE,GAAG,EAAE,SAAS,CAAC,KAAK;gBACpB,IAAI,EAAE,SAAS,CAAC,IAAI;gBACpB,IAAI,EAAE,SAAS,CAAC,IAAI;aACrB,EACD,yBAAyB,EACzB;gBACE,aAAa,EACX,OAAO,MAAM,KAAK,WAAW;oBAC3B,CAAC,CAAC,SAAS;oBACX,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM;aAC7B,CACF,CAAC;YACF,IAAI,UAAU,CAAC,MAAM,KAAK,OAAO,EAAE,CAAC;gBAClC,iBAAiB,CAAC,UAAU,CAAC,MAAM,EAAE,SAAS,CAAC,SAAS,CAAC,CAAC;YAC5D,CAAC;QACH,CAAC,CAAC;aACD,KAAK,CAAC,GAAG,EAAE;YACV,IAAI,MAAM,EAAE,CAAC;gBACX,kBAAkB,CAChB,+DAA+D,CAChE,CAAC;YACJ,CAAC;QACH,CAAC,CAAC,CAAC;QACL,OAAO,GAAG,EAAE;YACV,MAAM,GAAG,KAAK,CAAC;QACjB,CAAC,CAAC;IACJ,CAAC,EAAE;QACD,kBAAkB,CAAC,OAAO;QAC1B,kBAAkB,CAAC,SAAS;QAC5B,yBAAyB;QACzB,aAAa;QACb,aAAa;QACb,WAAW;QACX,iBAAiB;KAClB,CAAC,CAAC;IAEH,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,gCAAgC,CAAC,OAAO,KAAK,qBAAqB,EAAE,CAAC;YACvE,OAAO;QACT,CAAC;QACD,gCAAgC,CAAC,OAAO,GAAG,qBAAqB,CAAC;QACjE,oBAAoB,CAAC,IAAI,CAAC,CAAC;QAC3B,kBAAkB,CAAC,IAAI,CAAC,CAAC;QACzB,0BAA0B,CAAC,OAAO,GAAG,IAAI,CAAC;QAC1C,wBAAwB,CAAC,OAAO,GAAG,IAAI,CAAC;QACxC,yBAAyB,CAAC,QAAQ,EAAE,CAAC;QACrC,4BAA4B,CAAC,KAAK,CAAC,CAAC;QACpC,0BAA0B,EAAE,CAAC;IAC/B,CAAC,EAAE;QACD,qBAAqB;QACrB,yBAAyB;QACzB,oBAAoB;QACpB,4BAA4B;KAC7B,CAAC,CAAC;IAEH,SAAS,CAAC,GAAG,EAAE;QACb,MAAM,QAAQ,GAAG,oBAAoB,CAAC,IAAI,CAAC,MAAM,CAAC;QAClD,MAAM,gBAAgB,GAAG,mCAAmC,CAAC,OAAO,CAAC;QACrE,IAAI,CAAC,aAAa,IAAI,CAAC,sBAAsB,EAAE,CAAC;YAC9C,4BAA4B,CAAC,KAAK,CAAC,CAAC;QACtC,CAAC;aAAM,IACL,QAAQ,GAAG,CAAC;YACZ,CAAC,gBAAgB,KAAK,IAAI,IAAI,gBAAgB,KAAK,CAAC,CAAC,EACrD,CAAC;YACD,4BAA4B,CAAC,IAAI,CAAC,CAAC;QACrC,CAAC;aAAM,IACL,QAAQ,KAAK,CAAC;YACd,gBAAgB,KAAK,IAAI;YACzB,gBAAgB,GAAG,CAAC,EACpB,CAAC;YACD,4BAA4B,CAAC,KAAK,CAAC,CAAC;QACtC,CAAC;QACD,mCAAmC,CAAC,OAAO,GAAG,QAAQ,CAAC;IACzD,CAAC,EAAE;QACD,aAAa;QACb,sBAAsB;QACtB,4BAA4B;QAC5B,oBAAoB,CAAC,IAAI,CAAC,MAAM;QAChC,WAAW;KACZ,CAAC,CAAC;IAEH,SAAS,CAAC,GAAG,EAAE;QACb,MAAM,SAAS,GAAG,yBAAyB,CAAC;QAC5C,IACE,SAAS,EAAE,IAAI,KAAK,WAAW;YAC/B,SAAS,CAAC,OAAO;YACjB,CAAC,qBAAqB,CAAC,MAAM,EAC7B,CAAC;YACD,yBAAyB,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;QAC/C,CAAC;IACH,CAAC,EAAE,CAAC,yBAAyB,EAAE,qBAAqB,CAAC,MAAM,CAAC,CAAC,CAAC;IAE9D,SAAS,CAAC,GAAG,EAAE;QACb,MAAM,OAAO,GAAG,0BAA0B,CAAC,OAAO,CAAC;QACnD,IACE,CAAC,OAAO;YACR,kBAAkB,CAAC,SAAS;YAC5B,yBAAyB,CAAC,SAAS;YAEnC,OAAO;QACT,uBAAuB,CAAC,OAAO,CAAC,CAAC;IACnC,CAAC,EAAE;QACD,kBAAkB,CAAC,IAAI;QACvB,kBAAkB,CAAC,OAAO;QAC1B,kBAAkB,CAAC,SAAS;QAC5B,yBAAyB,CAAC,IAAI;QAC9B,yBAAyB,CAAC,SAAS;QACnC,uBAAuB;KACxB,CAAC,CAAC;IAEH,SAAS,CAAC,GAAG,EAAE;QACb,MAAM,MAAM,GAAG,qBAAqB,CAAC,MAAM,CAAC;QAC5C,IAAI,CAAC,MAAM,IAAI,CAAC,aAAa,IAAI,CAAC,WAAW;YAAE,OAAO;QACtD,gBAAgB,CAAC,IAAI,CAAC,CAAC;QACvB,yBAAyB,CAAC,IAAI,CAAC;YAC7B,EAAE,EAAE,qBAAqB,CAAC,WAAW,EAAE,MAAM,CAAC,SAAS,CAAC;YACxD,IAAI,EAAE,WAAW;YACjB,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,WAAW,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,iBAAiB;YACnE,OAAO,EAAE,MAAM;SAChB,CAAC,CAAC;IACL,CAAC,EAAE;QACD,aAAa;QACb,qBAAqB,CAAC,MAAM;QAC5B,yBAAyB;QACzB,WAAW;KACZ,CAAC,CAAC;IAEH,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,CAAC,mBAAmB;YAAE,OAAO;QACjC,mBAAmB,CAAC,IAAI,CAAC,CAAC;IAC5B,CAAC,EAAE,CAAC,mBAAmB,EAAE,aAAa,CAAC,CAAC,CAAC;IAEzC,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,CAAC,uBAAuB,IAAI,CAAC,qBAAqB;YAAE,OAAO;QAE/D,MAAM,yBAAyB,GAAG,CAAC,KAAmB,EAAE,EAAE;YACxD,IAAI,KAAK,CAAC,IAAI,EAAE,IAAI,KAAK,2BAA2B;gBAAE,OAAO;YAC7D,MAAM,KAAK,GAAG;gBACZ,GAAG,QAAQ,CAAC,gBAAgB,CAC1B,qCAAqC,CACtC;aACF,CAAC,IAAI,CACJ,CAAC,SAAS,EAAE,EAAE,CACZ,SAAS;iBACN,OAAO,CAAC,mCAAmC,CAAC;gBAC7C,EAAE,YAAY,CAAC,aAAa,CAAC,KAAK,MAAM,CAC7C,CAAC;YACF,IAAI,CAAC,CAAC,KAAK,YAAY,iBAAiB,CAAC;gBAAE,OAAO;YAClD,IAAI,KAAK,CAAC,MAAM,KAAK,KAAK,CAAC,aAAa;gBAAE,OAAO;YAEjD,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC;YACnC,IAAI,IAAI,KAAK,IAAI,EAAE,CAAC;gBAClB,MAAM,CAAC,aAAa,CAAC,IAAI,KAAK,CAAC,kBAAkB,CAAC,CAAC,CAAC;YACtD,CAAC;iBAAM,IAAI,IAAI,KAAK,KAAK,EAAE,CAAC;gBAC1B,MAAM,CAAC,aAAa,CAAC,IAAI,KAAK,CAAC,mBAAmB,CAAC,CAAC,CAAC;YACvD,CAAC;iBAAM,CAAC;gBACN,MAAM,CAAC,aAAa,CAAC,IAAI,KAAK,CAAC,oBAAoB,CAAC,CAAC,CAAC;YACxD,CAAC;QACH,CAAC,CAAC;QAEF,MAAM,CAAC,gBAAgB,CAAC,SAAS,EAAE,yBAAyB,CAAC,CAAC;QAC9D,OAAO,GAAG,EAAE,CACV,MAAM,CAAC,mBAAmB,CAAC,SAAS,EAAE,yBAAyB,CAAC,CAAC;IACrE,CAAC,EAAE,CAAC,qBAAqB,EAAE,uBAAuB,CAAC,CAAC,CAAC;IAErD,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,OAAO,MAAM,KAAK,WAAW,IAAI,uBAAuB;YAAE,OAAO;QACrE,IAAI,CAAC;YACH,MAAM,CAAC,YAAY,CAAC,OAAO,CACzB,oBAAoB,EACpB,gBAAgB,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAC7B,CAAC;QACJ,CAAC;QAAC,MAAM,CAAC;YACP,iEAAiE;QACnE,CAAC;IACH,CAAC,EAAE,CAAC,uBAAuB,EAAE,gBAAgB,CAAC,CAAC,CAAC;IAEhD,MAAM,2BAA2B,GAAG,WAAW,CAC7C,CAAC,GAA+C,EAAE,EAAE;QAClD,yBAAyB,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAC3C,IAAI,GAAG,CAAC,IAAI,KAAK,KAAK,IAAI,GAAG,CAAC,KAAK,EAAE,CAAC;YACpC,0BAA0B,EAAE,CAAC;YAC7B,oBAAoB,CAAC;gBACnB,KAAK,EAAE,GAAG,CAAC,KAAK;gBAChB,SAAS,EAAE,GAAG,CAAC,SAAS;gBACxB,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBACvC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;aACxC,CAAC,CAAC;YACH,OAAO;QACT,CAAC;QACD,IAAI,GAAG,CAAC,IAAI,KAAK,SAAS,IAAI,GAAG,CAAC,GAAG,EAAE,CAAC;YACtC,oBAAoB,CAAC,IAAI,CAAC,CAAC;YAC3B,0BAA0B,EAAE,CAAC;YAC7B,OAAO;QACT,CAAC;QACD,IAAI,GAAG,CAAC,IAAI,KAAK,WAAW,IAAI,GAAG,CAAC,OAAO,EAAE,CAAC;YAC5C,oBAAoB,CAAC,IAAI,CAAC,CAAC;YAC3B,yBAAyB,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;YACvC,OAAO;QACT,CAAC;QACD,IAAI,GAAG,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;YAC1B,oBAAoB,CAAC,IAAI,CAAC,CAAC;YAC3B,0BAA0B,EAAE,CAAC;QAC/B,CAAC;IACH,CAAC,EACD;QACE,oBAAoB,CAAC,IAAI;QACzB,yBAAyB;QACzB,oBAAoB;KACrB,CACF,CAAC;IAEF,MAAM,wBAAwB,GAAG,WAAW,CAC1C,CAAC,GAA+C,EAAE,EAAE;QAClD,MAAM,QAAQ,GAAG,oBAAoB,CAAC,WAAW,KAAK,GAAG,CAAC,EAAE,CAAC;QAC7D,IAAI,GAAG,CAAC,IAAI,KAAK,KAAK,IAAI,QAAQ;YAAE,oBAAoB,CAAC,IAAI,CAAC,CAAC;QAC/D,IAAI,GAAG,CAAC,IAAI,KAAK,WAAW,IAAI,QAAQ,EAAE,CAAC;YACzC,0BAA0B,EAAE,CAAC;QAC/B,CAAC;QACD,yBAAyB,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAC1C,CAAC,EACD,CAAC,oBAAoB,EAAE,yBAAyB,EAAE,oBAAoB,CAAC,CACxE,CAAC;IAEF,MAAM,4BAA4B,GAAG,WAAW,CAAC,GAAG,EAAE;QACpD,oBAAoB,CAAC,IAAI,CAAC,CAAC;QAC3B,0BAA0B,EAAE,CAAC;QAC7B,yBAAyB,CAAC,QAAQ,EAAE,CAAC;IACvC,CAAC,EAAE,CAAC,yBAAyB,EAAE,oBAAoB,CAAC,CAAC,CAAC;IAEtD,MAAM,wBAAwB,GAAG,WAAW,CAC1C,CAAC,MAAiC,EAAE,EAAE,CAAC,CACrC,KAAC,gBAAgB,IACf,IAAI,EAAC,MAAM,EACX,SAAS,EAAC,uBAAuB,EACjC,WAAW,EAAC,MAAM,EAClB,UAAU,EAAE,0BAA0B,MAAM,CAAC,SAAS,EAAE,EACxD,mBAAmB,EAAE,KAAK,EAC1B,aAAa,EAAE;YACb,aAAa,EAAE,MAAM,CAAC,SAAS;YAC/B,OAAO,EAAE,cAAc;YACvB,QAAQ,EAAE,GAAG,EAAE,CAAC,SAAS;SAC1B,EACD,UAAU,EAAE,KAAK,EACjB,UAAU,EAAE,KAAK,EACjB,qBAAqB,EAAE,KAAK,EAC5B,QAAQ,QACR,kBAAkB,EAAE,KAAK,EACzB,WAAW,EAAE,EAAE,EACf,qBAAqB,EAAE,aAAa,EACpC,iBAAiB,EAAC,QAAQ,EAC1B,mBAAmB,EAAE,CAAC,CACpB,mDAAmD,CACpD,GACD,CACH,EACD,CAAC,aAAa,EAAE,CAAC,CAAC,CACnB,CAAC;IAEF,MAAM,yBAAyB,GAAG,WAAW,CAC3C,CAAC,GAAwB,EAAE,EAAE;QAC3B,IAAI,GAAG,CAAC,IAAI,KAAK,KAAK,EAAE,CAAC;YACvB,MAAM,YAAY,GAAG,GAAG,CAAC,KAAK;gBAC5B,CAAC,CAAC,CAAC,yBAAyB,CAAC,IAAI,CAC7B,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,EAAE,KAAK,GAAG,CAAC,KAAK,CAC1C,IAAI,IAAI,CAAC;gBACZ,CAAC,CAAC,IAAI,CAAC;YACT,OAAO,4BAA4B,CAAC;gBAClC,YAAY;gBACZ,SAAS,EAAE,GAAG,CAAC,IAAI,IAAI,YAAY,EAAE,IAAI,IAAI,GAAG;gBAChD,OAAO,EAAE,kBAAkB,CAAC,SAAS;gBACrC,eAAe;gBACf,IAAI,EAAE,aAAa;aACpB,CAAC,CAAC;QACL,CAAC;QACD,IAAI,GAAG,CAAC,IAAI,KAAK,SAAS,IAAI,GAAG,CAAC,GAAG,EAAE,CAAC;YACtC,OAAO,CACL,KAAC,oBAAoB,IACnB,GAAG,EAAE,GAAG,CAAC,GAAG,EACZ,KAAK,EAAE,GAAG,CAAC,KAAK,EAChB,OAAO,EAAE,GAAG,EAAE,CAAC,wBAAwB,CAAC,GAAG,CAAC,EAC5C,WAAW,EAAE,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAwB,EAAE,EAAE,CAAC,CAC1D,iBAEE,GAAG,EAAE,GAAG,EACR,KAAK,EAAE,KAAK,IAAI,aAAa,CAAC,aAAa,CAAC,EAC5C,cAAc,EAAC,aAAa,EAC5B,KAAK,EAAC,iCAAiC,EACvC,SAAS,EAAC,sCAAsC,IAL3C,GAAG,CAMR,CACH,EACD,IAAI,EAAE,aAAa,GACnB,CACH,CAAC;QACJ,CAAC;QACD,IAAI,GAAG,CAAC,IAAI,KAAK,WAAW,EAAE,CAAC;YAC7B,MAAM,MAAM,GACV,GAAG,CAAC,OAAO;gBACX,CAAC,GAAG,CAAC,EAAE,KAAK,oBAAoB,CAAC,WAAW;oBAC1C,CAAC,CAAC,qBAAqB,CAAC,MAAM;oBAC9B,CAAC,CAAC,IAAI,CAAC,CAAC;YACZ,OAAO,MAAM,CAAC,CAAC,CAAC,CACd,KAAC,yBAAyB,IACxB,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,GAAG,EAAE,CAAC,wBAAwB,CAAC,GAAG,CAAC,EAC5C,UAAU,EAAE,wBAAwB,EACpC,IAAI,EAAE,aAAa,GACnB,CACH,CAAC,CAAC,CAAC,IAAI,CAAC;QACX,CAAC;QACD,IAAI,GAAG,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;YAC1B,OAAO,CACL,KAAC,mBAAmB,IAClB,UAAU,EAAE,wBAAwB,EACpC,OAAO,EAAE,oBAAoB,CAAC,SAAS,EACvC,KAAK,EACH,oBAAoB,CAAC,OAAO;oBAC1B,CAAC,CAAC,oBAAoB,CAAC,KAAK,CAAC,OAAO;oBACpC,CAAC,CAAC,IAAI,EAEV,SAAS,EAAE,GAAG,EAAE,CAAC,KAAK,oBAAoB,CAAC,OAAO,EAAE,EACpD,OAAO,EAAE,CAAC,QAAQ,EAAE,EAAE,CACpB,yBAAyB,CAAC;oBACxB,SAAS,EAAE,QAAQ,CAAC,SAAS;oBAC7B,KAAK,EAAE,QAAQ,CAAC,KAAK;oBACrB,IAAI,EAAE,YAAY;oBAClB,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;iBACxD,CAAC,EAEJ,IAAI,EAAE,aAAa,GACnB,CACH,CAAC;QACJ,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC,EACD;QACE,wBAAwB;QACxB,oBAAoB,CAAC,KAAK;QAC1B,oBAAoB,CAAC,OAAO;QAC5B,oBAAoB,CAAC,SAAS;QAC9B,kBAAkB,CAAC,SAAS;QAC5B,aAAa;QACb,qBAAqB,CAAC,MAAM;QAC5B,oBAAoB,CAAC,WAAW;QAChC,yBAAyB;QACzB,wBAAwB;QACxB,eAAe;QACf,wBAAwB;KACzB,CACF,CAAC;IAEF,IAAI,gBAAgB,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,aAAa,KAAK,IAAI,CAAC,EAAE,CAAC;QAC5D,OAAO,4BAAG,QAAQ,GAAI,CAAC;IACzB,CAAC;IAED,IAAI,gBAAgB,EAAE,CAAC;QACrB,OAAO,CACL,KAAC,yBAAyB,CAAC,QAAQ,IAAC,KAAK,EAAE,UAAU,YACnD,KAAC,qBAAqB,cACpB,4DAEE,SAAS,EAAC,oDAAoD,YAE9D,eAAK,SAAS,EAAC,uDAAuD,aACpE,KAAC,MAAM,IAAC,eAAe,EAAE,KAAK,GAAI,EAClC,KAAC,gBAAgB,KAAG,EACpB,eAAM,SAAS,EAAC,wBAAwB,YACtC,cAAK,SAAS,EAAC,gDAAgD,YAC5D,QAAQ,GACL,GACD,IACH,GACF,GACgB,GACW,CACtC,CAAC;IACJ,CAAC;IAED,IAAI,uBAAuB,EAAE,CAAC;QAC5B,OAAO,CACL,KAAC,yBAAyB,CAAC,QAAQ,IAAC,KAAK,EAAE,UAAU,YACnD,KAAC,qBAAqB,cACpB,+DAEE,SAAS,EAAC,+CAA+C,YAExD,QAAQ,GACL,GACgB,GACW,CACtC,CAAC;IACJ,CAAC;IAED,MAAM,iBAAiB,GAAG,CAAC,WAAW,IAAI,CAAC,eAAe,CAAC,aAAa,CAAC,CAAC;IAC1E,SAAS,sBAAsB;QAC7B,cAAc,EAAE,CAAC;QACjB,mCAAmC,CACjC,QAAQ,EACR,qBAAqB,CAAC,OAAO,CAAC,CAC/B,CAAC;IACJ,CAAC;IACD,SAAS,aAAa,CAAC,QAAgB;QACrC,QAAQ,CAAC,OAAO,EAAE;YAChB,KAAK,EAAE;gBACL,cAAc,EAAE;oBACd,EAAE,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,IAAI,QAAQ,EAAE;oBAC/B,QAAQ;iBACT;aACF;SACF,CAAC,CAAC;QACH,MAAM,CAAC,qBAAqB,CAAC,GAAG,EAAE;YAChC,MAAM,CAAC,aAAa,CAClB,IAAI,WAAW,CAAC,wBAAwB,EAAE;gBACxC,MAAM,EAAE,EAAE,QAAQ,EAAE;aACrB,CAAC,CACH,CAAC;QACJ,CAAC,CAAC,CAAC;IACL,CAAC;IACD,MAAM,kBAAkB,GAAG;QACzB,CAAC,CAAC,qCAAqC,CAAC;QACxC,CAAC,CAAC,uCAAuC,CAAC;QAC1C,CAAC,CAAC,qCAAqC,CAAC;KACzC,CAAC;IACF,MAAM,UAAU,GAAG,CACjB,eAAK,SAAS,EAAC,sEAAsE,aACnF,KAAC,gBAAgB,KAAG,EACnB,WAAW,IAAI,aAAa,IAAI,sBAAsB,CAAC,CAAC,CAAC,CACxD,KAAC,2BAA2B,IAC1B,IAAI,EAAE,qBAAqB,CAAC,IAAI,EAChC,QAAQ,EAAE,qBAAqB,CAAC,MAAM,EACtC,SAAS,EAAE,0CAA0C,GACrD,CACH,CAAC,CAAC,CAAC,IAAI,EACP,WAAW,IAAI,aAAa,IAAI,eAAe,CAAC,CAAC,CAAC,CACjD,eACE,SAAS,EAAC,4BAA4B,EACtC,IAAI,EAAC,QAAQ,eACH,QAAQ,aAElB,yBAAO,eAAe,GAAQ,EAC9B,iBACE,IAAI,EAAC,QAAQ,EACb,OAAO,EAAE,GAAG,EAAE,CAAC,kBAAkB,CAAC,IAAI,CAAC,gBAC5B,oBAAoB,wBAGxB,IACL,CACP,CAAC,CAAC,CAAC,IAAI,EACR,eACE,SAAS,EAAE,EAAE,CACX,gBAAgB,EAChB,WAAW,IAAI,mBAAmB;oBAChC,CAAC,CAAC,iBAAiB;oBACnB,CAAC,CAAC,iBAAiB,CACtB,YAEA,iBAAiB,CAAC,CAAC,CAAC,CACnB,8BACE,eAAK,SAAS,EAAC,0EAA0E,aACvF,KAAC,MAAM,IACL,OAAO,EAAC,OAAO,EACf,IAAI,EAAC,MAAM,EACX,SAAS,EAAC,8DAA8D,EACxE,OAAO,EAAE,GAAG,EAAE,CAAC,aAAa,CAAC,IAAI,CAAC,gBACvB,iBAAiB,YAE5B,KAAC,iBAAiB,IAAC,SAAS,EAAC,SAAS,GAAG,GAClC,EACT,eAAK,SAAS,EAAC,6CAA6C,aAC1D,KAAC,QAAQ,IAAC,KAAK,EAAE,CAAC,EAAE,YAAY,EAAE,aAAa,GAAI,EACnD,KAAC,iBAAiB,IAAC,SAAS,EAAC,qDAAqD,GAAG,IACjF,IACF,EACN,eAAK,SAAS,EAAC,gDAAgD,aAC5D,aAAa,KAAK,WAAW,IAAI,CAAC,SAAS,IAAI,aAAa,CAAC,CAAC,CAAC,CAAC,CAC/D,eAAK,SAAS,EAAC,iDAAiD,aAC9D,cAAK,SAAS,EAAC,gBAAgB,YAAE,SAAS,GAAO,EAChD,aAAa,CAAC,CAAC,CAAC,CACf,cAAK,SAAS,EAAC,kCAAkC,YAC9C,aAAa,GACV,CACP,CAAC,CAAC,CAAC,IAAI,IACJ,CACP,CAAC,CAAC,CAAC,IAAI,EACP,QAAQ,IACL,IACL,CACJ,CAAC,CAAC,CAAC,CACF,QAAQ,CACT,GACI,IACH,CACP,CAAC;IACF,MAAM,uBAAuB,GAC3B,yBAAyB,EAAE,IAAI,KAAK,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CACjD,KAAC,oBAAoB,IACnB,IAAI,EAAE,oBAAoB,CAAC,IAAI,EAC/B,WAAW,EAAE,oBAAoB,CAAC,WAAW,EAC7C,UAAU,EAAE,2BAA2B,EACvC,OAAO,EAAE,wBAAwB,EACjC,aAAa,EAAE,CAAC,GAAG,EAAE,EAAE;YACrB,2BAA2B,CAAC,GAAG,CAAC,CAAC;YACjC,yBAAyB,CAAC,WAAW,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAChD,CAAC,EACD,cAAc,EAAE,CAAC,GAAG,EAAE,EAAE;YACtB,MAAM,WAAW,GAAG,oBAAoB,CAAC,IAAI,CAAC,SAAS,CACrD,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,EAAE,KAAK,GAAG,CAAC,EAAE,CACvC,CAAC;YACF,MAAM,WAAW,GAAG,oBAAoB,CAAC,IAAI,CAAC,SAAS,CACrD,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,EAAE,KAAK,oBAAoB,CAAC,WAAW,CACjE,CAAC;YACF,IAAI,WAAW,GAAG,WAAW;gBAAE,2BAA2B,CAAC,GAAG,CAAC,CAAC;YAChE,yBAAyB,CAAC,YAAY,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QACjD,CAAC,EACD,UAAU,EAAE,4BAA4B,EACxC,aAAa,EAAE,oBAAoB,EACnC,IAAI,EAAE,iBAAiB,EACvB,SAAS,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,iBAAiB,CAAC,EAAE,KAAK,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,MAAM,CAAC,EAChE,aAAa,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,CACtB,KAAC,OAAO,IACN,EAAE,EAAE,GAAG,CAAC,EAAE,EACV,IAAI,EAAE,GAAG,CAAC,IAAI,EACd,IAAI,EAAC,IAAI,EACT,SAAS,EAAC,mBAAmB,GAC7B,CACH,EACD,IAAI,EAAE,aAAa,GACnB,CACH,CAAC;IACJ,MAAM,uBAAuB,GAC3B,oBAAoB,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CACrC,KAAC,uBAAuB,IACtB,IAAI,EAAE,oBAAoB,CAAC,IAAI,EAC/B,WAAW,EAAE,oBAAoB,CAAC,WAAW,EAC7C,SAAS,EAAE,yBAAyB,GACpC,CACH,CAAC,CAAC,CAAC,IAAI,CAAC;IACX,MAAM,oBAAoB,GACxB,CAAC,cAAc;QACb,CAAC,CAAC,yBAAyB,CAAC,IAAI,CAC5B,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,WAAW,EAAE,KAAK,cAAc,CAAC,WAAW,EAAE,CAC/D,EAAE,IAAI;QACT,CAAC,CAAC,IAAI,CAAC;QACT,cAAc;QACd,eAAe,CAAC;IAClB,MAAM,mBAAmB,GACvB,uBAAuB,IAAI,cAAc,CAAC,CAAC,CAAC,CAC1C,KAAC,oBAAoB,IACnB,KAAK,EAAE,cAAc,EACrB,OAAO,EAAE,oBAAoB,EAC7B,aAAa,EAAE,aAAa,EAC5B,mBAAmB,EAAE,sBAAsB,YAE3C,KAAC,qBAAqB,IAAC,WAAW,EAAE,cAAc,GAAI,GACjC,CACxB,CAAC,CAAC,CAAC,CACF,KAAC,qBAAqB,IACpB,WAAW,EAAE,uBAAuB,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,IAAI,GAC5D,CACH,CAAC;IACJ,MAAM,OAAO,GAAG,WAAW,CAAC,CAAC,CAAC,CAC5B,cACE,SAAS,EAAE,EAAE,CACX,sEAAsE,EACtE,aAAa,IAAI,6BAA6B,CAC/C,YAEA,qBAAqB,CAAC,CAAC,CAAC,CACvB,cACE,SAAS,EAAC,8CAA8C,uDAGvD,uBAAuB,GACpB,CACP,CAAC,CAAC,CAAC,CACF,8BACG,UAAU,EACV,aAAa;oBACd,sBAAsB;oBACtB,qBAAqB,CAAC,IAAI,CAAC,CAAC,CAAC,CAC3B,MAAC,qBAAqB,IACpB,KAAK,EAAE,sBAAsB,CAAC,KAAK,EACnC,mBAAmB,EAAE,sBAAsB,CAAC,aAAa,EACzD,IAAI,EAAE,aAAa,aAElB,uBAAuB,EACvB,uBAAuB,IACF,CACzB,CAAC,CAAC,CAAC,IAAI,IACP,CACJ,GACG,CACP,CAAC,CAAC,CAAC,uBAAuB,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,mBAAmB,CAAC,CAAC,CAAC,CACzD,UAAU,CACX,CAAC,CAAC,CAAC,CACF,KAAC,YAAY,IACX,QAAQ,EAAC,OAAO,EAChB,WAAW,EAAE,KAAK,EAClB,aAAa,EAAE,aAAa,EAC5B,kBAAkB,QAClB,UAAU,EAAC,UAAU,EACrB,iBAAiB,EAAE,qBAAqB,EACxC,mBAAmB,EAAE,sBAAsB,EAC3C,cAAc,EAAE,CAAC,CAAC,iCAAiC,CAAC,EACpD,WAAW,EAAE,kBAAkB,YAE9B,UAAU,GACE,CAChB,CAAC;IAEF,OAAO,CACL,KAAC,yBAAyB,CAAC,QAAQ,IAAC,KAAK,EAAE,UAAU,YACnD,KAAC,qBAAqB,cACpB,eAAK,SAAS,EAAC,uEAAuE,aACpF,kCACkB,gBAAgB,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,EACnD,SAAS,EAAE,EAAE,CACX,yKAAyK,EACzK,gBAAgB,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CACnC,YAED,KAAC,UAAU,IACT,UAAU,EAAE,UAAU,EACtB,aAAa,EAAE,aAAa,EAC5B,iBAAiB,EAAE,iBAAiB,EACpC,SAAS,EAAE,gBAAgB,EAC3B,kBAAkB,EAAE,kBAAkB,EACtC,0BAA0B,EAAE,yBAAyB,EACrD,aAAa,EAAE,iBAAiB,EAChC,oBAAoB,EAAE,kBAAkB,CAAC,SAAS,EAClD,kBAAkB,EAChB,kBAAkB,CAAC,OAAO;gCACxB,CAAC,CAAC,aAAa,CAAC,eAAe,CAAC;gCAChC,CAAC,CAAC,IAAI,EAEV,oBAAoB,EAAE,oBAAoB,EAC1C,yBAAyB,EAAE,yBAAyB,EACpD,kBAAkB,EAAE,GAAG,EAAE;gCACvB,0BAA0B,EAAE,CAAC;gCAC7B,yBAAyB,CAAC,QAAQ,EAAE,CAAC;gCACrC,4BAA4B,CAAC,KAAK,CAAC,CAAC;4BACtC,CAAC,EACD,kBAAkB,EAAE,CAAC,GAAG,EAAE,EAAE;gCAC1B,IAAI,wBAAwB,CAAC,GAAG,CAAC,EAAE,CAAC;oCAAE,OAAO;gCAC7C,mBAAmB,CAAC,IAAI,CAAC,CAAC;gCAC1B,gBAAgB,CAAC,GAAG,CAAC,CAAC;4BACxB,CAAC,EACD,oBAAoB,EAAE,GAAG,EAAE,CAAC,KAAK,kBAAkB,CAAC,OAAO,EAAE,EAC7D,WAAW,QACX,iBAAiB,EAAE,mBAAmB,GACtC,GACI,EAER,KAAC,KAAK,IAAC,IAAI,EAAE,UAAU,EAAE,YAAY,EAAE,aAAa,YAClD,MAAC,YAAY,IACX,IAAI,EAAC,MAAM,EACX,SAAS,EAAC,+DAA+D,aAEzE,KAAC,UAAU,IAAC,SAAS,EAAC,SAAS,YAC5B,CAAC,CAAC,yBAAyB,CAAC,GAClB,EACb,KAAC,gBAAgB,IAAC,SAAS,EAAC,SAAS,YAClC,CAAC,CAAC,oCAAoC,CAAC,GACvB,EACnB,cAAK,SAAS,EAAC,6BAA6B,YAC1C,KAAC,UAAU,IACT,UAAU,EAAE,UAAU,EACtB,aAAa,EAAE,aAAa,EAC5B,iBAAiB,EAAE,iBAAiB,EACpC,SAAS,EAAE,KAAK,EAChB,kBAAkB,EAAE,kBAAkB,EACtC,0BAA0B,EAAE,yBAAyB,EACrD,aAAa,EAAE,iBAAiB,EAChC,oBAAoB,EAAE,kBAAkB,CAAC,SAAS,EAClD,kBAAkB,EAChB,kBAAkB,CAAC,OAAO;4CACxB,CAAC,CAAC,aAAa,CAAC,eAAe,CAAC;4CAChC,CAAC,CAAC,IAAI,EAEV,oBAAoB,EAAE,oBAAoB,EAC1C,yBAAyB,EAAE,yBAAyB,EACpD,kBAAkB,EAAE,GAAG,EAAE;4CACvB,0BAA0B,EAAE,CAAC;4CAC7B,yBAAyB,CAAC,QAAQ,EAAE,CAAC;4CACrC,4BAA4B,CAAC,KAAK,CAAC,CAAC;wCACtC,CAAC,EACD,kBAAkB,EAAE,gBAAgB,EACpC,oBAAoB,EAAE,GAAG,EAAE,CAAC,KAAK,kBAAkB,CAAC,OAAO,EAAE,EAC7D,UAAU,EAAE,GAAG,EAAE,CAAC,aAAa,CAAC,KAAK,CAAC,GACtC,GACE,IACO,GACT,EAER,eAAK,SAAS,EAAC,yCAAyC,aACrD,OAAO,EACP,mBAAmB,IAChB,IACF,GACgB,GACW,CACtC,CAAC;AACJ,CAAC","sourcesContent":["import {\n CHAT_FIRST_MODE_CHANGED_EVENT,\n AgentChatSurface,\n AgentToggleButton,\n chatFirstSurfaceTabId,\n AgentSidebar,\n ChatFirstSurfacePanelToggle,\n closeChatFirstSessionWatch,\n emitChatFirstSessionWatch,\n getChatFirstSurfaceTabsStore,\n focusAgentChat,\n navigateWithAgentChatViewTransition,\n readChatFirstAppLayout,\n readChatFirstMode,\n resolveChatFirstBrowserTarget,\n resolveChatFirstAppTarget,\n subscribeChatFirstOpenBrowser,\n subscribeChatFirstOpenApp,\n useChatFirstSessionWatch,\n useChatFirstSurfacePanel,\n useChatFirstSurfaceResize,\n useChatFirstSurfaceTabs,\n type ChatFirstAppRegistration,\n type ChatFirstAppLayoutPreference,\n type ChatFirstAppResolution,\n type ChatFirstAppSurfacePlacement,\n type ChatFirstOpenBrowserDetail,\n type ChatFirstOpenAppDetail,\n type ChatFirstSessionReference,\n type ChatFirstSurfaceTab,\n type ChatFirstSurfaceKind,\n useAgentChatHomeHandoff,\n useAgentChatHomeHandoffLinks,\n useChatThreads,\n type ChatThreadSummary,\n} from \"@agent-native/core/client/agent-chat\";\nimport { appBasePath, appPath } from \"@agent-native/core/client/api-path\";\nimport {\n readClientAppState,\n writeClientAppState,\n} from \"@agent-native/core/client/application-state\";\nimport {\n ChatFirstAgentsPane,\n ChatFirstAppPane,\n ChatFirstAppsRail,\n ChatFirstBrowserPane,\n ChatFirstChatHistory,\n ChatFirstPrimaryNavigation,\n ChatFirstSessionWatchPane,\n ChatFirstSurfacePanel,\n ChatFirstSurfaceContent,\n ChatFirstSurfaceTabs,\n defaultChatFirstCopy,\n type ChatFirstAgentActivity,\n type ChatFirstAppItem,\n type ChatFirstCopy,\n type ChatFirstEmbedTarget,\n type ChatFirstPrimaryTab,\n} from \"@agent-native/core/client/chat-first\";\nimport { writeClipboardText } from \"@agent-native/core/client/clipboard\";\nimport { useActionQuery } from \"@agent-native/core/client/hooks\";\nimport { useT } from \"@agent-native/core/client/i18n\";\nimport { openCommandMenu } from \"@agent-native/core/client/navigation\";\nimport { InvitationBanner, OrgSwitcher } from \"@agent-native/core/client/org\";\nimport { RunsTray } from \"@agent-native/core/client/progress\";\nimport { FeedbackButton } from \"@agent-native/core/client/ui\";\nimport { SidebarFooterActions } from \"@agent-native/toolkit/app-shell\";\nimport {\n ChatHistoryRail,\n type ChatHistoryItem,\n} from \"@agent-native/toolkit/chat-history\";\nimport {\n IconApps,\n IconBrandSlack,\n IconBrandTelegram,\n IconCopy,\n IconEye,\n IconHierarchy2,\n IconMessageQuestion,\n IconBroadcast,\n IconLayoutSidebar,\n IconLayoutSidebarLeftCollapse,\n IconLayoutSidebarLeftExpand,\n IconSettings,\n IconShield,\n IconSearch,\n IconWorld,\n IconDeviceDesktop,\n IconPlus,\n} from \"@tabler/icons-react\";\nimport {\n createContext,\n useEffect,\n useMemo,\n useRef,\n useState,\n useContext,\n useCallback,\n type ComponentType,\n type ReactNode,\n} from \"react\";\nimport { Link, useLocation, useNavigate } from \"react-router\";\nimport { toast } from \"sonner\";\n\nimport { useIsMobile } from \"../../hooks/use-mobile\";\nimport { cn } from \"../../lib/utils\";\nimport {\n isDispatchWorkspaceAppId,\n isPathMountedWorkspaceApp,\n isWorkspaceAppVisibleInDefaultLaunchers,\n isWorkspaceSsoApp,\n mergeChatFirstWorkspaceApps,\n navigateToWorkspaceApp,\n workspaceAppIdFromRoute,\n workspaceAppDirectHref,\n workspaceAppRoute,\n type WorkspaceAppSummary,\n} from \"../../lib/workspace-apps\";\nimport { CHAT_FIRST_PANE_STATE_KEY } from \"../../shared/chat-first-pane\";\nimport { AppIcon } from \"../app-icon\";\nimport { CreateAppPopover } from \"../create-app-popover\";\nimport { Button } from \"../ui/button\";\nimport { Sheet, SheetContent, SheetDescription, SheetTitle } from \"../ui/sheet\";\nimport { Skeleton } from \"../ui/skeleton\";\nimport { Tooltip, TooltipContent, TooltipTrigger } from \"../ui/tooltip\";\nimport {\n WorkspaceAppChatRail,\n WorkspaceAppFrame,\n WorkspaceAppKeepAlive,\n} from \"../workspace-app-host\";\nimport { Header } from \"./Header\";\nimport {\n HeaderActionsProvider,\n useHeaderActions,\n useHeaderTitle,\n} from \"./HeaderActions\";\n\nexport { buildChatFirstEmbedSessionInput } from \"../workspace-app-host\";\n\nexport type DispatchNavSection = \"primary\" | \"operations\";\n\nexport type DispatchNavIcon = ComponentType<{\n size?: number | string;\n className?: string;\n}>;\n\nexport interface DispatchNavItem {\n /** Stable id used for keys and navigation.view. Avoid built-in ids. */\n id: string;\n /** React Router path for the tab, usually backed by an app/routes/*.tsx file. */\n to: string;\n label: string;\n icon?: DispatchNavIcon;\n /** Defaults to \"operations\", which renders under the Admin control plane. */\n section?: DispatchNavSection;\n /** Override active matching for nested or multi-route tools. */\n match?: (pathname: string) => boolean;\n /** Canonical path inside the Admin shell for management tabs. */\n adminTo?: string;\n}\n\nexport interface DispatchExtensionConfig {\n /** Opt into the Codex/T3-like chat-first shell for chat routes. */\n chatFirst?: boolean;\n /** Extra sidebar tabs supplied by the generated workspace. */\n navItems?: readonly DispatchNavItem[];\n /** Extra React Query keys to invalidate when Dispatch receives DB sync events. */\n queryKeys?: readonly string[];\n}\n\nconst PRIMARY_NAV_ITEMS = [\n {\n id: \"overview\",\n to: \"/overview\",\n label: \"Overview\",\n icon: IconBroadcast,\n section: \"primary\",\n },\n {\n id: \"chat\",\n to: \"/chat\",\n label: \"Chat\",\n icon: IconMessageQuestion,\n section: \"primary\",\n },\n {\n id: \"apps\",\n to: \"/apps\",\n label: \"Apps\",\n icon: IconApps,\n section: \"primary\",\n },\n {\n id: \"agents\",\n to: \"/agents\",\n label: \"Agents\",\n icon: IconHierarchy2,\n section: \"primary\",\n },\n] as const satisfies readonly DispatchNavItem[];\n\nconst BOTTOM_NAV_ITEMS = [\n {\n id: \"admin\",\n to: \"/admin\",\n label: \"Admin\",\n icon: IconShield,\n },\n {\n id: \"settings\",\n to: \"/settings\",\n label: \"Settings\",\n icon: IconSettings,\n },\n] as const satisfies readonly DispatchNavItem[];\n\nconst EMPTY_NAV_ITEMS: readonly DispatchNavItem[] = [];\nconst DISPATCH_SIDEBAR_LABEL = \"Dispatch\";\n\nconst CHROMELESS_PATHS = [\"/approval\", \"/browser-chat\", \"/browser-connect\"];\nconst SIDEBAR_COLLAPSE_KEY = \"dispatch.sidebar.collapsed\";\nconst CHAT_HISTORY_SOURCE_KEY = \"dispatch.chat-history.source\";\n// Below 768px, ChatFirstSurfacePanel becomes a max-[767px]:z-10 full-screen\n// overlay (surface-panel.tsx). This toggle is the only way to dismiss it, so\n// its z-index must stay above that overlay in every stacking context or the\n// panel becomes undismissable on mobile.\nexport const CHAT_FIRST_SURFACE_PANEL_TOGGLE_CLASS_NAME =\n \"absolute right-3 top-2 z-20\";\n\ninterface DispatchChatFirstPane {\n appId: string;\n placement?: ChatFirstAppSurfacePlacement;\n path?: string;\n view?: string;\n}\n\ninterface ChatFirstGrantedAppSummary {\n id: string;\n name: string;\n url?: string | null;\n}\n\ninterface ChatFirstGrantedAppsResult {\n apps: ChatFirstGrantedAppSummary[];\n}\n\ninterface DispatchAgentThreadSummary {\n id: string;\n title: string;\n preview?: string;\n snippet?: string;\n updatedAt?: number;\n}\n\ninterface SearchAgentThreadsResult {\n threads: DispatchAgentThreadSummary[];\n}\n\nconst DispatchExtensionsContext = createContext<\n DispatchExtensionConfig | undefined\n>(undefined);\n\nexport function useDispatchExtensions(): DispatchExtensionConfig | undefined {\n return useContext(DispatchExtensionsContext);\n}\n\n// Routes whose page renders its own toolbar. Layout skips its sticky chat\n// control so there's no duplicate page chrome.\nfunction pageOwnsToolbar(pathname: string): boolean {\n if (pathname === \"/tools\" || pathname.startsWith(\"/tools/\")) return true;\n if (pathname === \"/extensions\" || pathname.startsWith(\"/extensions/\"))\n return true;\n if (pathname.startsWith(\"/apps/\")) return true;\n return false;\n}\n\nfunction sectionFor(item: DispatchNavItem): DispatchNavSection {\n return item.section ?? \"operations\";\n}\n\nfunction navItemMatchesPath(item: DispatchNavItem, pathname: string): boolean {\n if (item.match) {\n try {\n if (item.match(pathname)) return true;\n } catch {\n return false;\n }\n }\n return pathname === item.to || pathname.startsWith(`${item.to}/`);\n}\n\nfunction navItemsForSection(\n items: readonly DispatchNavItem[],\n section: DispatchNavSection,\n): DispatchNavItem[] {\n return items.filter((item) => sectionFor(item) === section);\n}\n\nfunction localDispatchPath(pathname: string): string {\n const basePath = appBasePath();\n if (!basePath) return pathname;\n if (pathname === basePath) return \"/\";\n if (pathname.startsWith(`${basePath}/`)) {\n return pathname.slice(basePath.length) || \"/\";\n }\n return pathname;\n}\n\nexport function isElectronEmbeddedSearch(search: string): boolean {\n return new URLSearchParams(search).get(\"electron\") === \"1\";\n}\n\nexport function shouldAutoCollapseDispatchSidebar(pathname: string): boolean {\n return localDispatchPath(pathname).startsWith(\"/apps/\");\n}\n\nfunction chatFirstPrimaryTabForPath(\n pathname: string,\n): ChatFirstPrimaryTab | undefined {\n if (pathname === \"/chat\" || pathname.startsWith(\"/chat/\")) {\n return \"new-chat\";\n }\n if (\n pathname === \"/integrations\" ||\n pathname.startsWith(\"/integrations/\") ||\n pathname === \"/admin/integrations\" ||\n pathname.startsWith(\"/admin/integrations/\")\n ) {\n return \"integrations\";\n }\n if (\n pathname === \"/automations\" ||\n pathname.startsWith(\"/automations/\") ||\n pathname === \"/admin/automations\" ||\n pathname.startsWith(\"/admin/automations/\")\n ) {\n return \"scheduled\";\n }\n return undefined;\n}\n\nfunction dispatchNavLinkTarget(path: string): string {\n if (typeof window === \"undefined\") return path;\n const basePath = appBasePath();\n if (!basePath) return path;\n // Mirror the basename calculation entry.client.tsx uses to configure the\n // router (basePath iff the current URL is under that mount, \"\" otherwise).\n // Reading the live URL directly avoids races with the previous check on\n // `__reactRouterContext.basename`, which could read undefined before the\n // entry script set it — that race produced /dispatch/dispatch/<route>\n // history entries that 404'd on back-button navigation.\n const pathname = window.location.pathname;\n const routerHasBasename =\n pathname === basePath || pathname.startsWith(`${basePath}/`);\n return routerHasBasename ? path : appPath(path);\n}\n\nfunction chatFirstResolutionMessage(\n reason: Exclude<ChatFirstAppResolution, { status: \"ready\" }>[\"reason\"],\n): string {\n switch (reason) {\n case \"empty-detail\":\n return \"The agent did not provide an app target to open.\";\n case \"invalid-url\":\n return \"The requested app route was not registered for this workspace app.\";\n case \"unknown-app\":\n return \"That app is not available in this workspace.\";\n }\n return \"The requested app could not be opened.\";\n}\n\nfunction chatFirstBrowserResolutionMessage(\n reason: \"empty-detail\" | \"invalid-url\",\n): string {\n return reason === \"empty-detail\"\n ? \"The agent did not provide a browser URL to open.\"\n : \"The requested browser URL is not a safe HTTP(S) address.\";\n}\n\nconst DISPATCH_CHAT_FIRST_COPY_KEYS: Record<string, string> = {\n workspaceApps: \"chatFirstWorkspaceApps\",\n createWorkspaceApp: \"chatFirstCreateWorkspaceApp\",\n openApp: \"chatFirstOpenApp\",\n appsLoadError: \"chatFirstAppsLoadError\",\n noWorkspaceApps: \"chatFirstNoWorkspaceApps\",\n createApp: \"chatFirstCreateApp\",\n retry: \"chatFirstRetry\",\n dismiss: \"chatFirstDismiss\",\n unpinApp: \"chatFirstUnpinApp\",\n pinApp: \"chatFirstPinApp\",\n removePinned: \"chatFirstRemovePinned\",\n pinTop: \"chatFirstPinTop\",\n openSideSurfaces: \"chatFirstOpenSideSurfaces\",\n closeTab: \"chatFirstCloseTab\",\n close: \"chatFirstClose\",\n closeOthers: \"chatFirstCloseOthers\",\n closeToRight: \"chatFirstCloseToRight\",\n closeAll: \"chatFirstCloseAll\",\n unavailable: \"chatFirstUnavailable\",\n openActivity: \"chatFirstOpenActivity\",\n deferred: \"chatFirstDeferred\",\n browserBack: \"chatFirstBrowserBack\",\n browserForward: \"chatFirstBrowserForward\",\n browserReload: \"chatFirstBrowserReload\",\n browserAddress: \"chatFirstBrowserAddress\",\n browserOpenExternal: \"chatFirstBrowserOpenExternal\",\n browserClose: \"chatFirstBrowserClose\",\n browserPage: \"chatFirstBrowserPage\",\n browserInvalidUrl: \"chatFirstBrowserInvalidUrl\",\n browserPreviewStarting: \"chatFirstBrowserPreviewStarting\",\n browserPreviewError: \"chatFirstBrowserPreviewError\",\n appUnavailable: \"chatFirstAppUnavailable\",\n appLoading: \"chatFirstLoadingApp\",\n agentActivityEyebrow: \"chatFirstAgentActivityEyebrow\",\n agentActivityTitle: \"chatFirstAgentActivityTitle\",\n agentActivityDescription: \"chatFirstAgentActivityDescription\",\n refreshAgentActivity: \"chatFirstRefreshAgentActivity\",\n noAgentSessions: \"chatFirstNoAgentSessions\",\n startAgentSession: \"chatFirstStartAgentSession\",\n watchSession: \"chatFirstWatchSession\",\n copySessionId: \"chatFirstCopySessionId\",\n copySessionIdFor: \"chatFirstCopySessionIdFor\",\n sessionIdCopied: \"chatFirstSessionIdCopied\",\n sessionIdShort: \"chatFirstSessionIdShort\",\n copied: \"chatFirstCopied\",\n agentActivityStatusQueued: \"chatFirstAgentActivityStatusQueued\",\n agentActivityStatusRunning: \"chatFirstAgentActivityStatusRunning\",\n agentActivityStatusPaused: \"chatFirstAgentActivityStatusPaused\",\n agentActivityStatusNeedsApproval: \"chatFirstAgentActivityStatusNeedsApproval\",\n agentActivityStatusCompleted: \"chatFirstAgentActivityStatusCompleted\",\n agentActivityStatusErrored: \"chatFirstAgentActivityStatusErrored\",\n agentActivityStatusRecent: \"chatFirstAgentActivityStatusRecent\",\n agentActivityStatusUnknown: \"chatFirstAgentActivityStatusUnknown\",\n watchingSession: \"chatFirstWatchingSession\",\n session: \"chatFirstSession\",\n stopWatchingSession: \"chatFirstStopWatchingSession\",\n stopWatching: \"chatFirstStopWatching\",\n watchedSession: \"chatFirstWatchedSession\",\n agentsTitle: \"chatFirstAgentsTitle\",\n};\n\nconst DISPATCH_CHAT_FIRST_SURFACE_COPY_KEYS: Record<\n string,\n { label: string; reason: string }\n> = {\n browser: {\n label: \"chatFirstSurfaceBrowserLabel\",\n reason: \"chatFirstSurfaceBrowserReason\",\n },\n terminal: {\n label: \"chatFirstSurfaceTerminalLabel\",\n reason: \"chatFirstSurfaceTerminalReason\",\n },\n files: {\n label: \"chatFirstSurfaceFilesLabel\",\n reason: \"chatFirstSurfaceFilesReason\",\n },\n diff: {\n label: \"chatFirstSurfaceDiffLabel\",\n reason: \"chatFirstSurfaceDiffReason\",\n },\n \"side-chat\": {\n label: \"chatFirstSurfaceSideChatLabel\",\n reason: \"chatFirstSurfaceSideChatReason\",\n },\n agents: {\n label: \"chatFirstSurfaceAgentsLabel\",\n reason: \"chatFirstSurfaceAgentsReason\",\n },\n};\n\nfunction createDispatchChatFirstCopy(\n t: (key: string, options?: Record<string, unknown>) => string,\n): ChatFirstCopy {\n return (key, values) => {\n if (key.startsWith(\"surface.\")) {\n const [, kind, field] = key.split(\".\");\n const surface = DISPATCH_CHAT_FIRST_SURFACE_COPY_KEYS[kind];\n const translationKey =\n surface && (field === \"label\" || field === \"reason\")\n ? surface[field]\n : undefined;\n if (translationKey) {\n return t(`dispatch.pages.${translationKey}`, {\n ...(values ?? {}),\n defaultValue: defaultChatFirstCopy(key, values),\n });\n }\n }\n const translationKey = DISPATCH_CHAT_FIRST_COPY_KEYS[key];\n if (!translationKey) return defaultChatFirstCopy(key, values);\n return t(`dispatch.pages.${translationKey}`, {\n ...(values ?? {}),\n defaultValue: defaultChatFirstCopy(key, values),\n });\n };\n}\n\nfunction chatThreadPath(threadId: string | null): string {\n return threadId ? `/chat/${encodeURIComponent(threadId)}` : \"/chat\";\n}\n\nfunction persistedChatFirstPane(value: unknown): DispatchChatFirstPane | null {\n if (!value || typeof value !== \"object\") return null;\n const record = value as Record<string, unknown>;\n if (typeof record.appId !== \"string\" || !record.appId.trim()) return null;\n return {\n appId: record.appId,\n ...(record.placement === \"main\" || record.placement === \"side\"\n ? { placement: record.placement }\n : {}),\n ...(typeof record.path === \"string\" ? { path: record.path } : {}),\n ...(typeof record.view === \"string\" ? { view: record.view } : {}),\n };\n}\n\nfunction threadIdFromPath(pathname: string): string | null {\n const match = pathname.match(/^\\/chat\\/([^/]+)/);\n if (!match) return null;\n try {\n const value = decodeURIComponent(match[1]).trim();\n return value || null;\n } catch {\n return null;\n }\n}\n\nexport function formatThreadAge(updatedAt: number, now = Date.now()) {\n const diffMs = Math.max(0, now - updatedAt);\n const minutes = Math.floor(diffMs / 60_000);\n if (minutes < 1) return \"now\";\n if (minutes < 60) return `${minutes}m`;\n const hours = Math.floor(minutes / 60);\n if (hours < 24) return `${hours}h`;\n const days = Math.floor(hours / 24);\n if (days < 14) return `${days}d`;\n if (days < 365) return `${Math.floor(days / 7)}w`;\n return `${Math.floor(days / 365)}y`;\n}\n\nfunction threadTitle(thread: ChatThreadSummary, fallback: string) {\n return thread.title || thread.preview || fallback;\n}\n\nfunction threadSourceIcon(platform: string | undefined): ReactNode {\n const normalized = platform?.trim().toLowerCase();\n if (!normalized) return null;\n if (normalized === \"slack\") {\n return <IconBrandSlack size={13} aria-hidden=\"true\" />;\n }\n if (normalized === \"telegram\") {\n return <IconBrandTelegram size={13} aria-hidden=\"true\" />;\n }\n return <IconWorld size={13} aria-hidden=\"true\" />;\n}\n\nfunction readChatHistoryIncludesExternal(): boolean {\n if (typeof window === \"undefined\") return false;\n try {\n return localStorage.getItem(CHAT_HISTORY_SOURCE_KEY) === \"all\";\n } catch {\n // coercion-ok: localStorage is optional browser persistence.\n return false;\n }\n}\n\nfunction threadUpdatedAt(thread: ChatThreadSummary) {\n return Number.isFinite(thread.updatedAt)\n ? thread.updatedAt\n : Number.isFinite(thread.createdAt)\n ? thread.createdAt\n : 0;\n}\n\nfunction DispatchChatsSection({\n onNavigate,\n showNewChat = false,\n prelude,\n chatFirstMode = false,\n chatFirstEmbedded = false,\n collapsed = false,\n chatFirstNavigation,\n}: {\n onNavigate?: () => void;\n showNewChat?: boolean;\n prelude?: ReactNode;\n chatFirstMode?: boolean;\n chatFirstEmbedded?: boolean;\n collapsed?: boolean;\n chatFirstNavigation?: {\n activeTab?: ChatFirstPrimaryTab;\n onNewChat?: () => void;\n onOpenIntegrations: () => void;\n onOpenScheduled: () => void;\n };\n}) {\n const t = useT();\n const chatFirstCopy = useMemo(() => createDispatchChatFirstCopy(t), [t]);\n const navigate = useNavigate();\n const location = useLocation();\n const [includeExternal, setIncludeExternal] = useState(false);\n const [historyPreferenceReady, setHistoryPreferenceReady] = useState(false);\n const historyModeRef = useRef(includeExternal);\n const {\n threads,\n activeThreadId,\n isLoading: chatsLoading,\n threadsLoadError,\n createThread,\n switchThread,\n renameThread,\n refreshThreads,\n } = useChatThreads(undefined, \"dispatch\", undefined, {\n autoCreate: false,\n includeExternal,\n });\n\n const visibleThreads = useMemo(\n () =>\n threads\n .filter(\n (thread) => thread.messageCount > 0 || thread.id === activeThreadId,\n )\n .sort((a, b) => threadUpdatedAt(b) - threadUpdatedAt(a))\n .slice(0, 8),\n [activeThreadId, threads],\n );\n const localPathname = localDispatchPath(location.pathname);\n const displayedActiveThreadId =\n threadIdFromPath(localPathname) ??\n (localPathname === \"/chat\" ? null : activeThreadId);\n const chatItems: ChatHistoryItem[] = visibleThreads.map((thread) => {\n const title = threadTitle(thread, t(\"dispatch.sidebar.newChat\"));\n const sourceIcon = threadSourceIcon(thread.source?.platform);\n const sourceLabel = thread.source?.platform\n ? thread.source.platform[0].toUpperCase() +\n thread.source.platform.slice(1)\n : null;\n return {\n id: thread.id,\n title: (\n <span\n className=\"flex min-w-0 items-center gap-1\"\n title={sourceLabel ? `${sourceLabel}: ${title}` : title}\n >\n {sourceIcon ? (\n <span\n className=\"shrink-0 text-sidebar-foreground/55\"\n aria-label={sourceLabel ?? \"Connected source\"}\n >\n {sourceIcon}\n </span>\n ) : null}\n <span className=\"truncate\">{title}</span>\n </span>\n ),\n titleText: title,\n timestamp:\n thread.id === displayedActiveThreadId\n ? \"\"\n : formatThreadAge(threadUpdatedAt(thread)),\n };\n });\n const chatHistoryError = threadsLoadError ? (\n <button\n type=\"button\"\n onClick={() => void refreshThreads()}\n className=\"flex w-full items-center justify-between gap-2 rounded-md px-2 py-1.5 text-xs text-sidebar-foreground/65 transition-colors hover:bg-sidebar-accent hover:text-sidebar-accent-foreground\"\n >\n <span>Could not load chats</span>\n <span className=\"font-medium\">Retry</span>\n </button>\n ) : undefined;\n\n useEffect(() => {\n setIncludeExternal(readChatHistoryIncludesExternal());\n setHistoryPreferenceReady(true);\n }, []);\n\n useEffect(() => {\n if (!historyPreferenceReady) return;\n try {\n localStorage.setItem(\n CHAT_HISTORY_SOURCE_KEY,\n includeExternal ? \"all\" : \"local\",\n );\n } catch {} // coercion-ok: localStorage is optional browser persistence.\n if (historyModeRef.current !== includeExternal) {\n historyModeRef.current = includeExternal;\n refreshThreads();\n }\n }, [historyPreferenceReady, includeExternal, refreshThreads]);\n\n useEffect(() => {\n const refresh = () => refreshThreads();\n const handleRunning = (event: Event) => {\n const detail = (event as CustomEvent).detail as\n | { isRunning?: unknown }\n | undefined;\n if (detail?.isRunning === false) refreshThreads();\n };\n\n window.addEventListener(\"agent-chat:threads-updated\", refresh);\n window.addEventListener(\"agentNative.chatRunning\", handleRunning);\n window.addEventListener(\"focus\", refresh);\n return () => {\n window.removeEventListener(\"agent-chat:threads-updated\", refresh);\n window.removeEventListener(\"agentNative.chatRunning\", handleRunning);\n window.removeEventListener(\"focus\", refresh);\n };\n }, [refreshThreads]);\n\n function openThread(threadId: string, options?: { isNew?: boolean }) {\n switchThread(threadId);\n navigateWithAgentChatViewTransition(\n navigate,\n dispatchNavLinkTarget(\n options?.isNew ? \"/chat\" : chatThreadPath(threadId),\n ),\n );\n onNavigate?.();\n window.requestAnimationFrame(() => {\n window.dispatchEvent(\n new CustomEvent(\"agent-chat:open-thread\", {\n detail: { threadId, newThread: options?.isNew === true },\n }),\n );\n });\n }\n\n async function handleNewChat() {\n const threadId = await createThread();\n if (threadId) openThread(threadId, { isNew: true });\n }\n\n const collapsedChatFirst = collapsed && chatFirstMode;\n\n return (\n <div\n className={cn(\n \"min-w-0 space-y-0.5\",\n showNewChat && \"dispatch-chat-first-chats\",\n )}\n >\n {showNewChat && chatFirstNavigation ? (\n <nav className={cn(\"space-y-0.5 py-2\", collapsed ? \"px-1.5\" : \"px-2\")}>\n <ChatFirstPrimaryNavigation\n copy={chatFirstCopy}\n onNewChat={() => {\n chatFirstNavigation.onNewChat?.();\n void handleNewChat();\n }}\n onOpenIntegrations={chatFirstNavigation.onOpenIntegrations}\n onOpenScheduled={chatFirstNavigation.onOpenScheduled}\n onSearch={openCommandMenu}\n activeTab={chatFirstNavigation.activeTab}\n collapsed={collapsed}\n />\n </nav>\n ) : null}\n {prelude}\n {!collapsedChatFirst && !chatFirstMode ? (\n <div className=\"flex justify-end px-2 pt-0.5\">\n <Tooltip>\n <TooltipTrigger asChild>\n <button\n type=\"button\"\n data-dispatch-chat-source-toggle\n aria-pressed={includeExternal}\n aria-label={\n includeExternal\n ? t(\"dispatch.sidebar.showLocalChats\", {\n defaultValue: \"Show local chats\",\n })\n : t(\"dispatch.sidebar.showAllChats\", {\n defaultValue: \"Show all chats\",\n })\n }\n onClick={() => setIncludeExternal((current) => !current)}\n className=\"flex size-6 items-center justify-center rounded-md text-sidebar-foreground/55 transition-colors hover:bg-sidebar-accent hover:text-sidebar-accent-foreground\"\n >\n {includeExternal ? (\n <IconWorld size={14} aria-hidden=\"true\" />\n ) : (\n <IconDeviceDesktop size={14} aria-hidden=\"true\" />\n )}\n </button>\n </TooltipTrigger>\n <TooltipContent side=\"right\">\n {includeExternal\n ? t(\"dispatch.sidebar.showLocalChats\", {\n defaultValue: \"Show local chats\",\n })\n : t(\"dispatch.sidebar.showAllChats\", {\n defaultValue: \"Show all chats\",\n })}\n </TooltipContent>\n </Tooltip>\n </div>\n ) : null}\n {!collapsedChatFirst &&\n !chatFirstMode &&\n chatsLoading &&\n visibleThreads.length === 0 &&\n Array.from({ length: 3 }).map((_, index) => (\n <div\n key={`chat-skeleton-${index}`}\n className=\"flex items-center gap-2 px-3 py-1\"\n >\n <Skeleton className=\"size-3.5 shrink-0 rounded-sm\" />\n <Skeleton className=\"h-3 w-3/4 rounded\" />\n </div>\n ))}\n {!collapsedChatFirst &&\n chatFirstMode &&\n (chatsLoading || visibleThreads.length > 0) ? (\n <ChatFirstChatHistory\n items={chatItems}\n activeId={displayedActiveThreadId}\n loading={chatsLoading && visibleThreads.length === 0}\n loadingLabel={\n <div className=\"space-y-1 px-2 py-1\">\n {[0, 1, 2].map((index) => (\n <div key={index} className=\"flex items-center gap-2 px-1 py-1\">\n <Skeleton className=\"size-3.5 shrink-0 rounded-sm\" />\n <Skeleton className=\"h-3 w-3/4 rounded\" />\n </div>\n ))}\n </div>\n }\n label={t(\"dispatch.sidebar.chats\", { defaultValue: \"Chats\" })}\n error={chatHistoryError}\n onSelect={(threadId) => openThread(threadId)}\n renameMaxLength={160}\n onRename={(threadId, title) => void renameThread(threadId, title)}\n labels={{\n options: (item) =>\n t(\"dispatch.sidebar.chatOptions\", {\n title: item.titleText ?? \"\",\n }),\n renameInput: (item) =>\n t(\"dispatch.sidebar.renameThread\", {\n title: item.titleText ?? \"\",\n }),\n rename: t(\"dispatch.sidebar.renameChat\"),\n }}\n renderAdditionalRowActions={(item, closeMenu) => (\n <>\n <button\n type=\"button\"\n role=\"menuitem\"\n className=\"an-chat-history-row__menu-item\"\n onClick={() => {\n closeMenu();\n void writeClipboardText(item.id).then((copied) => {\n toast[copied ? \"success\" : \"error\"](\n copied\n ? \"Session ID copied\"\n : \"Could not copy the session ID\",\n );\n });\n }}\n >\n <IconCopy size={13} strokeWidth={1.8} />\n <span>Copy session ID</span>\n </button>\n {!chatFirstEmbedded ? (\n <button\n type=\"button\"\n role=\"menuitem\"\n className=\"an-chat-history-row__menu-item\"\n onClick={() => {\n closeMenu();\n emitChatFirstSessionWatch({\n sessionId: item.id,\n title: item.titleText,\n kind: \"agent-chat\",\n sourceSessionId: displayedActiveThreadId ?? undefined,\n });\n }}\n >\n <IconEye size={13} strokeWidth={1.8} />\n <span>Watch and message session</span>\n </button>\n ) : null}\n </>\n )}\n className=\"min-w-0 px-2\"\n />\n ) : !collapsedChatFirst ? (\n <ChatHistoryRail\n items={chatItems}\n activeId={displayedActiveThreadId}\n onSelect={(threadId) => openThread(threadId)}\n onNewChat={() => void handleNewChat()}\n railLabels={{\n newChat: t(\"dispatch.sidebar.newChat\"),\n showMore: t(\"dispatch.sidebar.chats\"),\n showLess: t(\"dispatch.sidebar.chats\"),\n }}\n error={chatHistoryError}\n renameMaxLength={160}\n onRename={(threadId, title) => void renameThread(threadId, title)}\n labels={{\n options: (item) =>\n t(\"dispatch.sidebar.chatOptions\", {\n title: item.titleText ?? \"\",\n }),\n renameInput: (item) =>\n t(\"dispatch.sidebar.renameThread\", {\n title: item.titleText ?? \"\",\n }),\n rename: t(\"dispatch.sidebar.renameChat\"),\n }}\n renderAdditionalRowActions={(item, closeMenu) => (\n <>\n <button\n type=\"button\"\n role=\"menuitem\"\n className=\"an-chat-history-row__menu-item\"\n onClick={() => {\n closeMenu();\n void writeClipboardText(item.id).then((copied) => {\n toast[copied ? \"success\" : \"error\"](\n copied\n ? \"Session ID copied\"\n : \"Could not copy the session ID\",\n );\n });\n }}\n >\n <IconCopy size={13} strokeWidth={1.8} />\n <span>Copy session ID</span>\n </button>\n {chatFirstMode && !chatFirstEmbedded ? (\n <button\n type=\"button\"\n role=\"menuitem\"\n className=\"an-chat-history-row__menu-item\"\n onClick={() => {\n closeMenu();\n emitChatFirstSessionWatch({\n sessionId: item.id,\n title: item.titleText,\n kind: \"agent-chat\",\n sourceSessionId: displayedActiveThreadId ?? undefined,\n });\n }}\n >\n <IconEye size={13} strokeWidth={1.8} />\n <span>Watch and message session</span>\n </button>\n ) : null}\n </>\n )}\n className=\"min-w-0 px-2\"\n />\n ) : null}\n </div>\n );\n}\n\nexport function NavContent({\n onNavigate,\n extensions,\n chatFirstMode = false,\n chatFirstEmbedded = false,\n collapsed = false,\n collapsible = false,\n onCollapsedChange,\n chatFirstAppLayout,\n onChatFirstAppLayoutChange,\n chatFirstApps = [],\n chatFirstAppsLoading = false,\n chatFirstAppsError,\n chatFirstActiveAppId,\n chatFirstActivePrimaryTab,\n onChatFirstNewChat,\n onChatFirstAppOpen,\n onChatFirstAppsRetry,\n}: {\n onNavigate?: () => void;\n extensions?: DispatchExtensionConfig;\n chatFirstMode?: boolean;\n chatFirstEmbedded?: boolean;\n collapsed?: boolean;\n collapsible?: boolean;\n onCollapsedChange?: (collapsed: boolean) => void;\n chatFirstAppLayout?: ChatFirstAppLayoutPreference;\n onChatFirstAppLayoutChange?: (layout: ChatFirstAppLayoutPreference) => void;\n chatFirstApps?: readonly ChatFirstAppItem[];\n chatFirstAppsLoading?: boolean;\n chatFirstAppsError?: string | null;\n chatFirstActiveAppId?: string;\n chatFirstActivePrimaryTab?: ChatFirstPrimaryTab;\n onChatFirstNewChat?: () => void;\n onChatFirstAppOpen?: (app: ChatFirstAppItem) => void;\n onChatFirstAppsRetry?: () => void;\n}) {\n const t = useT();\n const chatFirstCopy = useMemo(() => createDispatchChatFirstCopy(t), [t]);\n const location = useLocation();\n const navigate = useNavigate();\n const extensionNavItems = extensions?.navItems ?? EMPTY_NAV_ITEMS;\n const primaryNavItems = [\n ...PRIMARY_NAV_ITEMS,\n ...navItemsForSection(extensionNavItems, \"primary\"),\n ];\n const localPathname = localDispatchPath(location.pathname);\n const navLabel = (item: DispatchNavItem) => {\n const key =\n item.id === \"thread-debug\"\n ? \"threadDebug\"\n : item.id === \"workspace\"\n ? \"resources\"\n : item.id;\n return t(`dispatch.nav.${key}`, { defaultValue: item.label });\n };\n\n const collapseButton = collapsible ? (\n <Tooltip>\n <TooltipTrigger asChild>\n <button\n type=\"button\"\n onClick={() => onCollapsedChange?.(!collapsed)}\n aria-label={\n collapsed\n ? t(\"sidebar.expandSidebar\")\n : t(\"sidebar.collapseSidebar\")\n }\n className=\"flex h-8 w-8 shrink-0 items-center justify-center rounded-md text-sidebar-foreground/65 transition-colors hover:bg-sidebar-accent hover:text-sidebar-accent-foreground\"\n >\n {collapsed ? (\n <IconLayoutSidebarLeftExpand className=\"h-4 w-4 rtl:-scale-x-100\" />\n ) : (\n <IconLayoutSidebarLeftCollapse className=\"h-4 w-4 rtl:-scale-x-100\" />\n )}\n </button>\n </TooltipTrigger>\n <TooltipContent side=\"right\">\n {collapsed ? t(\"sidebar.expandSidebar\") : t(\"sidebar.collapseSidebar\")}\n </TooltipContent>\n </Tooltip>\n ) : null;\n const searchButton = (\n <Tooltip>\n <TooltipTrigger asChild>\n <button\n type=\"button\"\n onClick={openCommandMenu}\n aria-label={t(\"sidebar.search\")}\n className=\"flex h-8 w-8 items-center justify-center rounded-md text-sidebar-foreground/65 transition-colors hover:bg-sidebar-accent hover:text-sidebar-accent-foreground\"\n >\n <IconSearch className=\"h-4 w-4\" />\n </button>\n </TooltipTrigger>\n <TooltipContent side=\"right\">{t(\"sidebar.search\")}</TooltipContent>\n </Tooltip>\n );\n const feedbackButton = (\n <FeedbackButton\n variant={collapsed ? \"icon\" : \"sidebar\"}\n side=\"right\"\n className={collapsed ? \"size-8\" : \"min-w-0\"}\n />\n );\n const chatFirstCreateAppTrigger = (\n <CreateAppPopover\n align=\"start\"\n trigger={\n <button\n type=\"button\"\n className=\"flex size-6 items-center justify-center rounded text-sidebar-foreground/55 hover:bg-sidebar-accent hover:text-sidebar-foreground\"\n aria-label={chatFirstCopy(\"createWorkspaceApp\")}\n title={chatFirstCopy(\"createWorkspaceApp\")}\n >\n <IconPlus size={14} aria-hidden=\"true\" />\n </button>\n }\n />\n );\n\n const chatFirstAppsRail = (\n <ChatFirstAppsRail\n apps={chatFirstApps}\n activeAppId={chatFirstActiveAppId}\n collapsed={collapsed}\n loading={chatFirstAppsLoading}\n error={chatFirstAppsError}\n layout={chatFirstAppLayout}\n onLayoutChange={onChatFirstAppLayoutChange}\n onRetry={onChatFirstAppsRetry}\n onOpenApp={(app) => {\n onChatFirstAppOpen?.(app);\n onNavigate?.();\n }}\n onOpenAllApps={() => {\n navigate(dispatchNavLinkTarget(\"/apps\"));\n onNavigate?.();\n }}\n createAppTrigger={chatFirstCreateAppTrigger}\n renderIcon={(app, options) => (\n <AppIcon\n id={app.id}\n name={app.name}\n size=\"sm\"\n monochrome={options?.isInactive}\n className=\"size-7 rounded-lg\"\n />\n )}\n copy={chatFirstCopy}\n />\n );\n\n const renderNavItem = (item: DispatchNavItem) => {\n const Icon = item.icon;\n const itemMatchesLocalPath = navItemMatchesPath(item, localPathname);\n const label = navLabel(item);\n return (\n <li key={item.id}>\n {collapsed ? (\n <Tooltip>\n <TooltipTrigger asChild>\n <Link\n to={dispatchNavLinkTarget(item.to)}\n onClick={(event) => {\n if (\n item.id === \"chat\" &&\n localPathname !== \"/chat\" &&\n !event.metaKey &&\n !event.ctrlKey &&\n !event.shiftKey &&\n !event.altKey\n ) {\n event.preventDefault();\n navigateWithAgentChatViewTransition(\n navigate,\n dispatchNavLinkTarget(\"/chat\"),\n );\n onNavigate?.();\n return;\n }\n onNavigate?.();\n }}\n aria-label={label}\n aria-current={itemMatchesLocalPath ? \"page\" : undefined}\n className={cn(\n \"flex size-9 items-center justify-center rounded-md text-sm\",\n itemMatchesLocalPath\n ? \"bg-sidebar-accent font-medium text-sidebar-accent-foreground\"\n : \"text-sidebar-foreground/70 hover:bg-sidebar-accent hover:text-sidebar-accent-foreground\",\n )}\n >\n {Icon ? (\n <Icon size={16} className=\"shrink-0\" />\n ) : (\n <span className=\"h-4 w-4 shrink-0\" aria-hidden=\"true\" />\n )}\n </Link>\n </TooltipTrigger>\n <TooltipContent side=\"right\">{label}</TooltipContent>\n </Tooltip>\n ) : (\n <Link\n to={dispatchNavLinkTarget(item.to)}\n onClick={(event) => {\n if (\n item.id === \"chat\" &&\n localPathname !== \"/chat\" &&\n !event.metaKey &&\n !event.ctrlKey &&\n !event.shiftKey &&\n !event.altKey\n ) {\n event.preventDefault();\n navigateWithAgentChatViewTransition(\n navigate,\n dispatchNavLinkTarget(\"/chat\"),\n );\n onNavigate?.();\n return;\n }\n onNavigate?.();\n }}\n aria-current={itemMatchesLocalPath ? \"page\" : undefined}\n className={cn(\n \"flex h-8 w-full items-center gap-2 rounded-md px-2 text-sm\",\n itemMatchesLocalPath\n ? \"bg-sidebar-accent font-medium text-sidebar-accent-foreground\"\n : \"text-sidebar-foreground/70 hover:bg-sidebar-accent hover:text-sidebar-accent-foreground\",\n )}\n >\n {Icon ? (\n <Icon size={16} className=\"shrink-0\" />\n ) : (\n <span className=\"h-4 w-4 shrink-0\" aria-hidden=\"true\" />\n )}\n <span className=\"truncate\">{label}</span>\n </Link>\n )}\n {!collapsed && item.id === \"chat\" && itemMatchesLocalPath ? (\n <DispatchChatsSection\n onNavigate={onNavigate}\n chatFirstMode={chatFirstMode}\n chatFirstEmbedded={chatFirstEmbedded}\n />\n ) : null}\n </li>\n );\n };\n\n const bottomNavigation = (\n <nav className={cn(\"py-1\", collapsed ? \"px-1.5\" : \"px-2\")}>\n <ul\n className={cn(\n collapsed ? \"flex flex-col items-center gap-1\" : \"space-y-0.5\",\n )}\n >\n {BOTTOM_NAV_ITEMS.map(renderNavItem)}\n </ul>\n </nav>\n );\n const organizationPicker = (\n <div\n className={cn(\"py-2\", collapsed ? \"flex justify-center px-1\" : \"px-3\")}\n >\n <OrgSwitcher compact={collapsed} reserveSpace currentAppId=\"dispatch\" />\n </div>\n );\n const sidebarFooterActions = (\n <SidebarFooterActions\n collapsed={collapsed}\n feedback={feedbackButton}\n search={searchButton}\n collapse={collapseButton}\n />\n );\n\n return (\n <>\n <div\n className={cn(\n \"flex h-12 shrink-0 items-center border-b border-sidebar-border\",\n collapsed ? \"justify-center px-0\" : \"px-4\",\n )}\n >\n <Link\n to={dispatchNavLinkTarget(\"/overview\")}\n aria-label={`${DISPATCH_SIDEBAR_LABEL} overview`}\n data-dispatch-logo\n className={cn(\n \"flex items-center rounded-md focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-sidebar-ring\",\n collapsed ? \"justify-center\" : \"gap-2\",\n )}\n >\n <img\n src={appPath(\"/agent-native-icon-light.svg\")}\n alt=\"\"\n aria-hidden=\"true\"\n width={35}\n height={20}\n className={cn(\n \"block shrink-0 object-contain object-center dark:hidden\",\n collapsed ? \"h-4 w-7\" : \"h-5 w-[35px]\",\n )}\n />\n <img\n src={appPath(\"/agent-native-icon-dark.svg\")}\n alt=\"\"\n aria-hidden=\"true\"\n width={35}\n height={20}\n className={cn(\n \"hidden shrink-0 object-contain object-center dark:block\",\n collapsed ? \"h-4 w-7\" : \"h-5 w-[35px]\",\n )}\n />\n {!collapsed && (\n <div className=\"min-w-0 flex-1\">\n <div\n data-dispatch-sidebar-label\n className=\"truncate text-lg font-bold tracking-tight text-foreground\"\n >\n {DISPATCH_SIDEBAR_LABEL}\n </div>\n </div>\n )}\n </Link>\n </div>\n\n {chatFirstMode ? (\n <div className=\"flex min-h-0 flex-1 flex-col overflow-y-auto\">\n <DispatchChatsSection\n onNavigate={onNavigate}\n showNewChat\n chatFirstMode\n chatFirstEmbedded={chatFirstEmbedded}\n collapsed={collapsed}\n chatFirstNavigation={{\n activeTab: chatFirstActivePrimaryTab,\n onNewChat: onChatFirstNewChat,\n onOpenIntegrations: () => {\n navigate(dispatchNavLinkTarget(\"/admin/integrations\"));\n onNavigate?.();\n },\n onOpenScheduled: () => {\n navigate(dispatchNavLinkTarget(\"/admin/automations\"));\n onNavigate?.();\n },\n }}\n prelude={chatFirstAppsRail}\n />\n </div>\n ) : null}\n {!chatFirstMode ? (\n <div className=\"min-h-0 flex-1 overflow-y-auto\">\n <nav className={cn(\"py-2\", collapsed ? \"px-1.5\" : \"px-2\")}>\n <ul\n className={cn(\n collapsed ? \"flex flex-col items-center gap-1\" : \"space-y-0.5\",\n )}\n >\n {primaryNavItems.map(renderNavItem)}\n </ul>\n </nav>\n </div>\n ) : null}\n <div\n className=\"mt-auto shrink-0\"\n data-dispatch-sidebar-footer={chatFirstMode ? \"chat-first\" : \"standard\"}\n >\n {bottomNavigation}\n {organizationPicker}\n {sidebarFooterActions}\n </div>\n </>\n );\n}\n\n/**\n * Below 768px `ChatFirstSurfacePanel` is already a full-screen overlay\n * (surface-panel.tsx). Mounting the sub-app's own `AgentSidebar` chat rail\n * inside it too would stack a second full-screen shell on top of it, so the\n * rail only gets its own chat surface once there is room beside the panel.\n */\nexport function renderChatFirstAppSurfaceTab({\n registration,\n embedPath,\n loading,\n isMobileSurface,\n copy,\n}: {\n registration: ChatFirstAppRegistration | null;\n embedPath: string;\n loading: boolean;\n isMobileSurface: boolean;\n copy: ChatFirstCopy;\n}): ReactNode {\n if (!registration) {\n return (\n <ChatFirstAppPane\n app={null}\n status={loading ? \"loading\" : \"unresolved\"}\n renderEmbed={() => null}\n copy={copy}\n />\n );\n }\n if (!embedPath.startsWith(\"/\")) {\n return (\n <ChatFirstAppPane\n app={{\n id: registration.id,\n name: registration.name ?? registration.id,\n }}\n status=\"error\"\n errorMessage={copy(\"appUnavailable\")}\n renderEmbed={() => null}\n copy={copy}\n />\n );\n }\n return (\n <WorkspaceAppFrame\n app={{\n id: registration.id,\n name: registration.name ?? registration.id,\n path: registration.path,\n url: registration.url,\n }}\n embedPath={embedPath}\n chatSidebar={!isMobileSurface}\n copy={copy}\n />\n );\n}\n\nexport function Layout({\n children,\n extensions,\n agentPageHref,\n}: {\n children: ReactNode;\n extensions?: DispatchExtensionConfig;\n agentPageHref?: string;\n}) {\n const t = useT();\n const location = useLocation();\n const navigate = useNavigate();\n const pageTitle = useHeaderTitle();\n const headerActions = useHeaderActions();\n const [mobileOpen, setMobileOpen] = useState(false);\n // Drives renderChatFirstSurfaceTab's app-tab chatSidebar decision below —\n // the chat-first surface panel is already a full-screen overlay at this\n // width, so an app tab must not also mount its own full-screen chat rail.\n const isMobileSurface = useIsMobile();\n const [sidebarCollapsed, setSidebarCollapsed] = useState(() => {\n if (typeof window === \"undefined\") return false;\n try {\n return window.localStorage.getItem(SIDEBAR_COLLAPSE_KEY) === \"1\";\n } catch {\n return false;\n }\n });\n const localPathname = localDispatchPath(location.pathname);\n const [electronEmbedded] = useState(() =>\n typeof window !== \"undefined\"\n ? isElectronEmbeddedSearch(window.location.search)\n : false,\n );\n const isChatRoute =\n localPathname === \"/chat\" || localPathname.startsWith(\"/chat/\");\n const chatFirstSurfaceScope = threadIdFromPath(localPathname) ?? \"new\";\n const isWorkspaceAppRoute = shouldAutoCollapseDispatchSidebar(\n location.pathname,\n );\n const workspaceAppId = isWorkspaceAppRoute\n ? workspaceAppIdFromRoute(localPathname)\n : null;\n const workspaceAppRouteActive = Boolean(workspaceAppId);\n const isWorkspaceAppHostRoute =\n isWorkspaceAppRoute &&\n typeof window !== \"undefined\" &&\n new URLSearchParams(window.location.search).get(\"embedded\") === \"1\";\n const [chatFirstPreference, setChatFirstPreference] = useState(() =>\n readChatFirstMode(),\n );\n const chatFirstEmbedded =\n typeof window !== \"undefined\" &&\n new URLSearchParams(window.location.search).get(\"chatFirst\") === \"1\";\n const chatFirstMode =\n extensions?.chatFirst === true || chatFirstPreference || chatFirstEmbedded;\n const chatFirstHasActiveChat = chatFirstSurfaceScope !== \"new\";\n useEffect(() => {\n if (!electronEmbedded || typeof window === \"undefined\") return;\n const url = new URL(window.location.href);\n if (isElectronEmbeddedSearch(url.search)) return;\n url.searchParams.set(\"electron\", \"1\");\n window.history.replaceState(\n window.history.state,\n \"\",\n `${url.pathname}${url.search}${url.hash}`,\n );\n }, [electronEmbedded, location.pathname, location.search]);\n const [chatFirstAppLayout, setChatFirstAppLayout] =\n useState<ChatFirstAppLayoutPreference>(() => readChatFirstAppLayout());\n const chatFirstAppLayoutHydratedRef = useRef(false);\n const chatFirstAppsQuery = useActionQuery<WorkspaceAppSummary[]>(\n \"list-workspace-apps\",\n { includeAgentCards: false, includeArchived: true },\n { enabled: chatFirstMode },\n );\n const chatFirstGrantedAppsQuery = useActionQuery<ChatFirstGrantedAppsResult>(\n \"list_apps\",\n {},\n { enabled: chatFirstMode },\n );\n const chatFirstWorkspaceApps = useMemo(\n () => mergeChatFirstWorkspaceApps(chatFirstAppsQuery.data),\n [chatFirstAppsQuery.data],\n );\n const chatFirstAppRegistrations = useMemo<ChatFirstAppRegistration[]>(() => {\n const registrations = new Map<string, ChatFirstAppRegistration>();\n for (const app of chatFirstWorkspaceApps) {\n registrations.set(app.id.toLowerCase(), {\n id: app.id,\n name: app.name,\n path: app.path,\n url: app.url,\n enabled: app.status !== \"pending\" && app.archived !== true,\n });\n }\n for (const app of chatFirstGrantedAppsQuery.data?.apps ?? []) {\n const id = app.id.trim();\n if (!id || registrations.has(id.toLowerCase())) continue;\n registrations.set(id.toLowerCase(), {\n id,\n name: app.name,\n url: app.url,\n enabled: true,\n });\n }\n return [...registrations.values()];\n }, [chatFirstGrantedAppsQuery.data?.apps, chatFirstWorkspaceApps]);\n const chatFirstAppItems = useMemo<ChatFirstAppItem[]>(\n () =>\n chatFirstAppRegistrations\n .filter(\n (app) => app.enabled && isWorkspaceAppVisibleInDefaultLaunchers(app),\n )\n .map((app) => ({\n id: app.id,\n name: app.name ?? app.id,\n })),\n [chatFirstAppRegistrations],\n );\n const openChatFirstApp = useCallback(\n (app: ChatFirstAppItem) => {\n if (isDispatchWorkspaceAppId(app.id)) return;\n const registration = chatFirstAppRegistrations.find(\n (candidate) => candidate.id.toLowerCase() === app.id.toLowerCase(),\n );\n const directHref =\n registration &&\n !isWorkspaceSsoApp(registration) &&\n isPathMountedWorkspaceApp(registration)\n ? workspaceAppDirectHref(registration, \"/\")\n : null;\n if (directHref) {\n navigateToWorkspaceApp(directHref);\n return;\n }\n navigate(dispatchNavLinkTarget(workspaceAppRoute(app.id)));\n },\n [chatFirstAppRegistrations, navigate],\n );\n const chatFirstCopy = useMemo(() => createDispatchChatFirstCopy(t), [t]);\n const [chatFirstPane, setChatFirstPane] =\n useState<DispatchChatFirstPane | null>(null);\n const [chatFirstNotice, setChatFirstNotice] = useState<string | null>(null);\n const chatFirstSessionWatch = useChatFirstSessionWatch();\n const chatFirstSurfaceTabs = useChatFirstSurfaceTabs(chatFirstSurfaceScope);\n const chatFirstSurfaceTabsStore = getChatFirstSurfaceTabsStore(\n chatFirstSurfaceScope,\n );\n const chatFirstAgentsQuery = useActionQuery<SearchAgentThreadsResult>(\n \"search-agent-threads\",\n { sourceId: \"current\", limit: 12 },\n {\n enabled:\n chatFirstMode &&\n isChatRoute &&\n chatFirstSurfaceTabs.activeTabId?.startsWith(\"agents:\") === true,\n },\n );\n const chatFirstSurfacePanel = useChatFirstSurfacePanel(chatFirstSurfaceScope);\n const { setOpen: setChatFirstSurfacePanelOpen } = chatFirstSurfacePanel;\n const chatFirstSurfaceResize = useChatFirstSurfaceResize(\n chatFirstSurfaceScope,\n );\n const chatFirstPaneHydratedRef = useRef(false);\n const pendingChatFirstOpenAppRef = useRef<ChatFirstOpenAppDetail | null>(\n null,\n );\n const previousChatFirstSurfaceScopeRef = useRef(chatFirstSurfaceScope);\n const previousChatFirstSurfaceTabCountRef = useRef<number | null>(null);\n const activeChatFirstSurfaceTab = useMemo(\n () =>\n chatFirstSurfaceTabs.tabs.find(\n (tab) => tab.id === chatFirstSurfaceTabs.activeTabId,\n ) ?? null,\n [chatFirstSurfaceTabs],\n );\n const chatFirstAppTakesMain =\n chatFirstMode &&\n isChatRoute &&\n activeChatFirstSurfaceTab?.kind === \"app\" &&\n activeChatFirstSurfaceTab.placement === \"main\";\n const chatFirstAppSelected =\n chatFirstMode && activeChatFirstSurfaceTab?.kind === \"app\";\n const chatFirstActivePrimaryTab = chatFirstAppSelected\n ? activeChatFirstSurfaceTab?.kind === \"app\" &&\n activeChatFirstSurfaceTab.appId === \"dispatch\"\n ? chatFirstPrimaryTabForPath(activeChatFirstSurfaceTab.path ?? \"\")\n : undefined\n : chatFirstPrimaryTabForPath(localPathname);\n const chatFirstActiveAppId = isWorkspaceAppRoute\n ? (workspaceAppIdFromRoute(localPathname) ?? undefined)\n : chatFirstAppSelected && activeChatFirstSurfaceTab?.kind === \"app\"\n ? activeChatFirstSurfaceTab.appId\n : undefined;\n const chatFirstAgentActivities = useMemo<ChatFirstAgentActivity[]>(\n () =>\n (chatFirstAgentsQuery.data?.threads ?? []).map((thread) => ({\n sessionId: thread.id,\n title:\n thread.title || chatFirstCopy(\"agentsTitle\", { name: thread.id }),\n subtitle: thread.snippet || thread.preview || chatFirstCopy(\"session\"),\n status: \"recent\",\n ...(thread.updatedAt ? { updatedAt: thread.updatedAt } : {}),\n })),\n [chatFirstAgentsQuery.data, chatFirstCopy],\n );\n const persistChatFirstPane = useCallback(\n (pane: DispatchChatFirstPane | null) => {\n setChatFirstPane(pane);\n void writeClientAppState(CHAT_FIRST_PANE_STATE_KEY, pane).catch(() => {\n setChatFirstNotice(\n \"The app pane opened locally, but its focus could not be synced.\",\n );\n });\n },\n [],\n );\n useEffect(() => {\n if (!chatFirstMode || isChatRoute) return;\n persistChatFirstPane(null);\n closeChatFirstSessionWatch();\n chatFirstSurfaceTabsStore.closeAll();\n }, [\n chatFirstMode,\n chatFirstSurfaceTabsStore,\n isChatRoute,\n persistChatFirstPane,\n ]);\n const openChatFirstPane = useCallback(\n (\n pane: DispatchChatFirstPane,\n placement: ChatFirstAppSurfacePlacement = \"side\",\n ) => {\n if (placement === \"side\" && !chatFirstHasActiveChat) return;\n setSidebarCollapsed(true);\n setChatFirstNotice(null);\n closeChatFirstSessionWatch();\n if (!isChatRoute) {\n navigateWithAgentChatViewTransition(\n navigate,\n dispatchNavLinkTarget(\"/chat\"),\n );\n }\n const app = chatFirstAppRegistrations.find(\n (candidate) => candidate.id === pane.appId,\n );\n chatFirstSurfaceTabsStore.open({\n id: chatFirstSurfaceTabId(\n \"app\",\n `${pane.appId}:${pane.path ?? pane.view ?? \"/\"}`,\n ),\n kind: \"app\",\n title: app?.name ?? pane.appId,\n appId: pane.appId,\n placement,\n ...(pane.path ? { path: pane.path } : {}),\n ...(pane.view ? { view: pane.view } : {}),\n });\n setChatFirstSurfacePanelOpen(true);\n persistChatFirstPane({ ...pane, placement });\n },\n [\n chatFirstAppRegistrations,\n chatFirstSurfaceTabsStore,\n chatFirstHasActiveChat,\n persistChatFirstPane,\n isChatRoute,\n navigate,\n setChatFirstSurfacePanelOpen,\n ],\n );\n const openChatFirstSurface = useCallback(\n (kind: ChatFirstSurfaceKind) => {\n if (kind === \"browser\") {\n persistChatFirstPane(null);\n closeChatFirstSessionWatch();\n chatFirstSurfaceTabsStore.open({\n id: chatFirstSurfaceTabId(\"browser\", \"homepage\"),\n kind: \"browser\",\n title: \"Browser\",\n url: \"https://www.google.com/\",\n });\n return;\n }\n if (kind !== \"agents\") return;\n persistChatFirstPane(null);\n closeChatFirstSessionWatch();\n chatFirstSurfaceTabsStore.open({\n id: chatFirstSurfaceTabId(\"agents\", \"activity\"),\n kind: \"agents\",\n title: \"Agents\",\n });\n },\n [chatFirstSurfaceTabsStore, persistChatFirstPane],\n );\n const resolveChatFirstOpenBrowser = useCallback(\n (detail: ChatFirstOpenBrowserDetail) => {\n const resolution = resolveChatFirstBrowserTarget(detail);\n if (resolution.status === \"unresolved\") {\n setChatFirstNotice(\n chatFirstBrowserResolutionMessage(resolution.reason),\n );\n return;\n }\n if (resolution.target.openExternally && typeof window !== \"undefined\") {\n try {\n // Builder's Visual Editor rejects iframe ancestors with CSP/X-Frame-\n // Options. Prefer the real browser tab; the browser pane below is a\n // visible fallback when popup policy blocks this non-click event.\n if (\n window.open(resolution.target.url, \"_blank\", \"noopener,noreferrer\")\n ) {\n return;\n }\n } catch (error) {\n console.warn(\n \"[chat-first] external browser open failed; keeping link fallback\",\n error,\n );\n // Fall through to the non-iframe browser pane below.\n }\n }\n persistChatFirstPane(null);\n closeChatFirstSessionWatch();\n setChatFirstNotice(null);\n chatFirstSurfaceTabsStore.open({\n id: chatFirstSurfaceTabId(\"browser\", resolution.target.url),\n kind: \"browser\",\n title: resolution.target.title ?? \"Browser\",\n url: resolution.target.url,\n });\n },\n [chatFirstSurfaceTabsStore, persistChatFirstPane],\n );\n const resolveChatFirstOpenApp = useCallback(\n (detail: ChatFirstOpenAppDetail) => {\n if (chatFirstAppsQuery.isLoading || chatFirstGrantedAppsQuery.isLoading) {\n pendingChatFirstOpenAppRef.current = detail;\n return;\n }\n if (chatFirstAppsQuery.isError) {\n pendingChatFirstOpenAppRef.current = null;\n setChatFirstNotice(\n \"Workspace apps could not be loaded, so the requested app was not opened.\",\n );\n return;\n }\n\n const resolution = resolveChatFirstAppTarget(\n detail,\n chatFirstAppRegistrations,\n {\n currentOrigin:\n typeof window === \"undefined\" ? undefined : window.location.origin,\n },\n );\n pendingChatFirstOpenAppRef.current = null;\n if (resolution.status === \"unresolved\") {\n setChatFirstNotice(chatFirstResolutionMessage(resolution.reason));\n return;\n }\n if (isDispatchWorkspaceAppId(resolution.target.appId)) {\n closeChatFirstSessionWatch();\n chatFirstSurfaceTabsStore.closeAll();\n setChatFirstSurfacePanelOpen(false);\n persistChatFirstPane(null);\n if (resolution.target.path) {\n navigateWithAgentChatViewTransition(\n navigate,\n dispatchNavLinkTarget(resolution.target.path),\n );\n }\n return;\n }\n openChatFirstPane(resolution.target);\n },\n [\n chatFirstAppRegistrations,\n chatFirstAppsQuery.isError,\n chatFirstAppsQuery.isLoading,\n chatFirstGrantedAppsQuery.isLoading,\n chatFirstSurfaceTabsStore,\n closeChatFirstSessionWatch,\n openChatFirstPane,\n navigate,\n persistChatFirstPane,\n setChatFirstSurfacePanelOpen,\n ],\n );\n const chatHomeHandoffActive = useAgentChatHomeHandoff({\n storageKey: \"dispatch\",\n activePath: localPathname,\n enabled: !isChatRoute,\n });\n const chatHandoffLinkOptions = {\n storageKey: \"dispatch\",\n isChatPath: (pathname: string) =>\n pathname === \"/chat\" || pathname.startsWith(\"/chat/\"),\n requireActiveHandoff: true,\n };\n useAgentChatHomeHandoffLinks(chatHandoffLinkOptions);\n\n useEffect(() => {\n const handleModeChange = (event: Event) => {\n const enabled = (event as CustomEvent<{ enabled?: unknown }>).detail\n ?.enabled;\n setChatFirstPreference(enabled === true);\n };\n window.addEventListener(CHAT_FIRST_MODE_CHANGED_EVENT, handleModeChange);\n return () =>\n window.removeEventListener(\n CHAT_FIRST_MODE_CHANGED_EVENT,\n handleModeChange,\n );\n }, []);\n\n useEffect(() => {\n if (\n !chatFirstMode ||\n !isChatRoute ||\n chatFirstAppLayoutHydratedRef.current\n ) {\n return;\n }\n chatFirstAppLayoutHydratedRef.current = true;\n void readClientAppState<unknown>(\"chat-first-app-layout\")\n .then((value) => {\n if (!value || typeof value !== \"object\") return;\n const candidate = value as Partial<ChatFirstAppLayoutPreference>;\n const ids = (input: unknown) =>\n Array.isArray(input)\n ? input.filter(\n (id): id is string =>\n typeof id === \"string\" && id.trim().length > 0,\n )\n : [];\n setChatFirstAppLayout({\n pinnedIds: [...new Set(ids(candidate.pinnedIds))],\n orderedIds: [...new Set(ids(candidate.orderedIds))],\n });\n })\n .catch(() => {\n // Device-local layout remains the fallback when workspace state is unavailable.\n });\n }, [chatFirstMode, isChatRoute]);\n\n const persistChatFirstAppLayout = useCallback(\n (layout: ChatFirstAppLayoutPreference) => {\n setChatFirstAppLayout(layout);\n void writeClientAppState(\"chat-first-app-layout\", layout).catch(() => {\n setChatFirstNotice(\n \"App order changed locally, but workspace state could not be synced.\",\n );\n });\n },\n [],\n );\n\n useEffect(() => {\n if (!chatFirstMode) {\n setChatFirstPane(null);\n closeChatFirstSessionWatch();\n chatFirstSurfaceTabsStore.closeAll();\n setChatFirstNotice(null);\n pendingChatFirstOpenAppRef.current = null;\n chatFirstPaneHydratedRef.current = false;\n return;\n }\n const unsubscribeApp = subscribeChatFirstOpenApp(resolveChatFirstOpenApp);\n const unsubscribeBrowser = subscribeChatFirstOpenBrowser(\n resolveChatFirstOpenBrowser,\n );\n return () => {\n unsubscribeApp();\n unsubscribeBrowser();\n };\n }, [\n chatFirstMode,\n isChatRoute,\n chatFirstSurfaceTabsStore,\n resolveChatFirstOpenApp,\n resolveChatFirstOpenBrowser,\n ]);\n\n useEffect(() => {\n if (\n !chatFirstMode ||\n !isChatRoute ||\n chatFirstPaneHydratedRef.current ||\n chatFirstAppsQuery.isLoading ||\n chatFirstAppsQuery.isError\n ) {\n return;\n }\n chatFirstPaneHydratedRef.current = true;\n if (chatFirstPane) return;\n let active = true;\n void readClientAppState<unknown>(CHAT_FIRST_PANE_STATE_KEY)\n .then((value) => {\n if (!active) return;\n const persisted = persistedChatFirstPane(value);\n if (!persisted) return;\n const resolution = resolveChatFirstAppTarget(\n {\n app: persisted.appId,\n path: persisted.path,\n view: persisted.view,\n },\n chatFirstAppRegistrations,\n {\n currentOrigin:\n typeof window === \"undefined\"\n ? undefined\n : window.location.origin,\n },\n );\n if (resolution.status === \"ready\") {\n openChatFirstPane(resolution.target, persisted.placement);\n }\n })\n .catch(() => {\n if (active) {\n setChatFirstNotice(\n \"The last app pane could not be restored from workspace state.\",\n );\n }\n });\n return () => {\n active = false;\n };\n }, [\n chatFirstAppsQuery.isError,\n chatFirstAppsQuery.isLoading,\n chatFirstAppRegistrations,\n chatFirstMode,\n chatFirstPane,\n isChatRoute,\n openChatFirstPane,\n ]);\n\n useEffect(() => {\n if (previousChatFirstSurfaceScopeRef.current === chatFirstSurfaceScope) {\n return;\n }\n previousChatFirstSurfaceScopeRef.current = chatFirstSurfaceScope;\n persistChatFirstPane(null);\n setChatFirstNotice(null);\n pendingChatFirstOpenAppRef.current = null;\n chatFirstPaneHydratedRef.current = true;\n chatFirstSurfaceTabsStore.closeAll();\n setChatFirstSurfacePanelOpen(false);\n closeChatFirstSessionWatch();\n }, [\n chatFirstSurfaceScope,\n chatFirstSurfaceTabsStore,\n persistChatFirstPane,\n setChatFirstSurfacePanelOpen,\n ]);\n\n useEffect(() => {\n const tabCount = chatFirstSurfaceTabs.tabs.length;\n const previousTabCount = previousChatFirstSurfaceTabCountRef.current;\n if (!chatFirstMode || !chatFirstHasActiveChat) {\n setChatFirstSurfacePanelOpen(false);\n } else if (\n tabCount > 0 &&\n (previousTabCount === null || previousTabCount === 0)\n ) {\n setChatFirstSurfacePanelOpen(true);\n } else if (\n tabCount === 0 &&\n previousTabCount !== null &&\n previousTabCount > 0\n ) {\n setChatFirstSurfacePanelOpen(false);\n }\n previousChatFirstSurfaceTabCountRef.current = tabCount;\n }, [\n chatFirstMode,\n chatFirstHasActiveChat,\n setChatFirstSurfacePanelOpen,\n chatFirstSurfaceTabs.tabs.length,\n isChatRoute,\n ]);\n\n useEffect(() => {\n const activeTab = activeChatFirstSurfaceTab;\n if (\n activeTab?.kind === \"side-chat\" &&\n activeTab.session &&\n !chatFirstSessionWatch.target\n ) {\n emitChatFirstSessionWatch(activeTab.session);\n }\n }, [activeChatFirstSurfaceTab, chatFirstSessionWatch.target]);\n\n useEffect(() => {\n const pending = pendingChatFirstOpenAppRef.current;\n if (\n !pending ||\n chatFirstAppsQuery.isLoading ||\n chatFirstGrantedAppsQuery.isLoading\n )\n return;\n resolveChatFirstOpenApp(pending);\n }, [\n chatFirstAppsQuery.data,\n chatFirstAppsQuery.isError,\n chatFirstAppsQuery.isLoading,\n chatFirstGrantedAppsQuery.data,\n chatFirstGrantedAppsQuery.isLoading,\n resolveChatFirstOpenApp,\n ]);\n\n useEffect(() => {\n const target = chatFirstSessionWatch.target;\n if (!target || !chatFirstMode || !isChatRoute) return;\n setChatFirstPane(null);\n chatFirstSurfaceTabsStore.open({\n id: chatFirstSurfaceTabId(\"side-chat\", target.sessionId),\n kind: \"side-chat\",\n title: target.title ? `Watch · ${target.title}` : \"Watched session\",\n session: target,\n });\n }, [\n chatFirstMode,\n chatFirstSessionWatch.target,\n chatFirstSurfaceTabsStore,\n isChatRoute,\n ]);\n\n useEffect(() => {\n if (!isWorkspaceAppRoute) return;\n setSidebarCollapsed(true);\n }, [isWorkspaceAppRoute, localPathname]);\n\n useEffect(() => {\n if (!workspaceAppRouteActive && !chatFirstAppTakesMain) return;\n\n const handleWorkspaceAppMessage = (event: MessageEvent) => {\n if (event.data?.type !== \"agentNative.toggleSidebar\") return;\n const frame = [\n ...document.querySelectorAll<HTMLIFrameElement>(\n \"[data-dispatch-workspace-app-frame]\",\n ),\n ].find(\n (candidate) =>\n candidate\n .closest(\"[data-chat-first-surface-content]\")\n ?.getAttribute(\"aria-hidden\") !== \"true\",\n );\n if (!(frame instanceof HTMLIFrameElement)) return;\n if (event.source !== frame.contentWindow) return;\n\n const open = event.data.data?.open;\n if (open === true) {\n window.dispatchEvent(new Event(\"agent-panel:open\"));\n } else if (open === false) {\n window.dispatchEvent(new Event(\"agent-panel:close\"));\n } else {\n window.dispatchEvent(new Event(\"agent-panel:toggle\"));\n }\n };\n\n window.addEventListener(\"message\", handleWorkspaceAppMessage);\n return () =>\n window.removeEventListener(\"message\", handleWorkspaceAppMessage);\n }, [chatFirstAppTakesMain, workspaceAppRouteActive]);\n\n useEffect(() => {\n if (typeof window === \"undefined\" || isWorkspaceAppHostRoute) return;\n try {\n window.localStorage.setItem(\n SIDEBAR_COLLAPSE_KEY,\n sidebarCollapsed ? \"1\" : \"0\",\n );\n } catch {\n // Ignore storage failures; the in-memory preference still works.\n }\n }, [isWorkspaceAppHostRoute, sidebarCollapsed]);\n\n const activateChatFirstSurfaceTab = useCallback(\n (tab: (typeof chatFirstSurfaceTabs.tabs)[number]) => {\n chatFirstSurfaceTabsStore.activate(tab.id);\n if (tab.kind === \"app\" && tab.appId) {\n closeChatFirstSessionWatch();\n persistChatFirstPane({\n appId: tab.appId,\n placement: tab.placement,\n ...(tab.path ? { path: tab.path } : {}),\n ...(tab.view ? { view: tab.view } : {}),\n });\n return;\n }\n if (tab.kind === \"browser\" && tab.url) {\n persistChatFirstPane(null);\n closeChatFirstSessionWatch();\n return;\n }\n if (tab.kind === \"side-chat\" && tab.session) {\n persistChatFirstPane(null);\n emitChatFirstSessionWatch(tab.session);\n return;\n }\n if (tab.kind === \"agents\") {\n persistChatFirstPane(null);\n closeChatFirstSessionWatch();\n }\n },\n [\n chatFirstSurfaceTabs.tabs,\n chatFirstSurfaceTabsStore,\n persistChatFirstPane,\n ],\n );\n\n const closeChatFirstSurfaceTab = useCallback(\n (tab: (typeof chatFirstSurfaceTabs.tabs)[number]) => {\n const isActive = chatFirstSurfaceTabs.activeTabId === tab.id;\n if (tab.kind === \"app\" && isActive) persistChatFirstPane(null);\n if (tab.kind === \"side-chat\" && isActive) {\n closeChatFirstSessionWatch();\n }\n chatFirstSurfaceTabsStore.close(tab.id);\n },\n [chatFirstSurfaceTabs, chatFirstSurfaceTabsStore, persistChatFirstPane],\n );\n\n const closeAllChatFirstSurfaceTabs = useCallback(() => {\n persistChatFirstPane(null);\n closeChatFirstSessionWatch();\n chatFirstSurfaceTabsStore.closeAll();\n }, [chatFirstSurfaceTabsStore, persistChatFirstPane]);\n\n const renderChatFirstWatchChat = useCallback(\n (target: ChatFirstSessionReference) => (\n <AgentChatSurface\n mode=\"page\"\n className=\"h-full min-h-0 w-full\"\n defaultMode=\"chat\"\n storageKey={`dispatch-session-watch:${target.sessionId}`}\n restoreActiveThread={false}\n threadUrlSync={{\n routeThreadId: target.sessionId,\n getPath: chatThreadPath,\n navigate: () => undefined,\n }}\n showHeader={false}\n showTabBar={false}\n showPageNewChatButton={false}\n chatOnly\n dynamicSuggestions={false}\n suggestions={[]}\n suppressInlineOpenApp={chatFirstMode}\n emptyStateDisplay=\"hidden\"\n composerPlaceholder={t(\n \"dispatch.pages.chatFirstSessionMessagePlaceholder\",\n )}\n />\n ),\n [chatFirstMode, t],\n );\n\n const renderChatFirstSurfaceTab = useCallback(\n (tab: ChatFirstSurfaceTab) => {\n if (tab.kind === \"app\") {\n const registration = tab.appId\n ? (chatFirstAppRegistrations.find(\n (candidate) => candidate.id === tab.appId,\n ) ?? null)\n : null;\n return renderChatFirstAppSurfaceTab({\n registration,\n embedPath: tab.path ?? registration?.path ?? \"/\",\n loading: chatFirstAppsQuery.isLoading,\n isMobileSurface,\n copy: chatFirstCopy,\n });\n }\n if (tab.kind === \"browser\" && tab.url) {\n return (\n <ChatFirstBrowserPane\n url={tab.url}\n title={tab.title}\n onClose={() => closeChatFirstSurfaceTab(tab)}\n renderEmbed={({ url, title, key }: ChatFirstEmbedTarget) => (\n <iframe\n key={key}\n src={url}\n title={title ?? chatFirstCopy(\"browserPage\")}\n referrerPolicy=\"no-referrer\"\n allow=\"clipboard-read; clipboard-write\"\n className=\"h-full w-full border-0 bg-background\"\n />\n )}\n copy={chatFirstCopy}\n />\n );\n }\n if (tab.kind === \"side-chat\") {\n const target =\n tab.session ??\n (tab.id === chatFirstSurfaceTabs.activeTabId\n ? chatFirstSessionWatch.target\n : null);\n return target ? (\n <ChatFirstSessionWatchPane\n target={target}\n onClose={() => closeChatFirstSurfaceTab(tab)}\n renderChat={renderChatFirstWatchChat}\n copy={chatFirstCopy}\n />\n ) : null;\n }\n if (tab.kind === \"agents\") {\n return (\n <ChatFirstAgentsPane\n activities={chatFirstAgentActivities}\n loading={chatFirstAgentsQuery.isLoading}\n error={\n chatFirstAgentsQuery.isError\n ? chatFirstAgentsQuery.error.message\n : null\n }\n onRefresh={() => void chatFirstAgentsQuery.refetch()}\n onWatch={(activity) =>\n emitChatFirstSessionWatch({\n sessionId: activity.sessionId,\n title: activity.title,\n kind: \"agent-chat\",\n ...(activity.goalId ? { goalId: activity.goalId } : {}),\n })\n }\n copy={chatFirstCopy}\n />\n );\n }\n return null;\n },\n [\n chatFirstAgentActivities,\n chatFirstAgentsQuery.error,\n chatFirstAgentsQuery.isError,\n chatFirstAgentsQuery.isLoading,\n chatFirstAppsQuery.isLoading,\n chatFirstCopy,\n chatFirstSessionWatch.target,\n chatFirstSurfaceTabs.activeTabId,\n chatFirstAppRegistrations,\n closeChatFirstSurfaceTab,\n isMobileSurface,\n renderChatFirstWatchChat,\n ],\n );\n\n if (CHROMELESS_PATHS.some((path) => localPathname === path)) {\n return <>{children}</>;\n }\n\n if (electronEmbedded) {\n return (\n <DispatchExtensionsContext.Provider value={extensions}>\n <HeaderActionsProvider>\n <div\n data-dispatch-electron-control-plane\n className=\"flex h-screen w-full overflow-hidden bg-background\"\n >\n <div className=\"relative flex min-w-0 flex-1 flex-col overflow-hidden\">\n <Header showAgentToggle={false} />\n <InvitationBanner />\n <main className=\"flex-1 overflow-y-auto\">\n <div className=\"mx-auto max-w-7xl space-y-10 px-4 py-6 sm:px-6\">\n {children}\n </div>\n </main>\n </div>\n </div>\n </HeaderActionsProvider>\n </DispatchExtensionsContext.Provider>\n );\n }\n\n if (isWorkspaceAppHostRoute) {\n return (\n <DispatchExtensionsContext.Provider value={extensions}>\n <HeaderActionsProvider>\n <div\n data-dispatch-workspace-app-chrome-less\n className=\"h-screen w-full overflow-hidden bg-background\"\n >\n {children}\n </div>\n </HeaderActionsProvider>\n </DispatchExtensionsContext.Provider>\n );\n }\n\n const showAgentControls = !isChatRoute && !pageOwnsToolbar(localPathname);\n function openAskAgentFullscreen() {\n focusAgentChat();\n navigateWithAgentChatViewTransition(\n navigate,\n dispatchNavLinkTarget(\"/chat\"),\n );\n }\n function openRunThread(threadId: string) {\n 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 const sidebarSuggestions = [\n t(\"dispatch.sidebar.suggestionBuildApp\"),\n t(\"dispatch.sidebar.suggestionRouteSlack\"),\n t(\"dispatch.sidebar.suggestionGrantKey\"),\n ];\n const appContent = (\n <div className=\"relative flex h-full min-h-0 min-w-0 flex-1 flex-col overflow-hidden\">\n <InvitationBanner />\n {isChatRoute && chatFirstMode && chatFirstHasActiveChat ? (\n <ChatFirstSurfacePanelToggle\n open={chatFirstSurfacePanel.open}\n onToggle={chatFirstSurfacePanel.toggle}\n className={CHAT_FIRST_SURFACE_PANEL_TOGGLE_CLASS_NAME}\n />\n ) : null}\n {isChatRoute && chatFirstMode && chatFirstNotice ? (\n <div\n className=\"dispatch-chat-first-notice\"\n role=\"status\"\n aria-live=\"polite\"\n >\n <span>{chatFirstNotice}</span>\n <button\n type=\"button\"\n onClick={() => setChatFirstNotice(null)}\n aria-label=\"Dismiss app notice\"\n >\n Dismiss\n </button>\n </div>\n ) : null}\n <main\n className={cn(\n \"min-h-0 flex-1\",\n isChatRoute || isWorkspaceAppRoute\n ? \"overflow-hidden\"\n : \"overflow-y-auto\",\n )}\n >\n {showAgentControls ? (\n <>\n <div className=\"pointer-events-none sticky top-0 z-10 flex justify-end px-4 pt-2 lg:px-6\">\n <Button\n variant=\"ghost\"\n size=\"icon\"\n className=\"pointer-events-auto absolute start-4 top-2 h-8 w-8 lg:hidden\"\n onClick={() => setMobileOpen(true)}\n aria-label=\"Open navigation\"\n >\n <IconLayoutSidebar className=\"h-4 w-4\" />\n </Button>\n <div className=\"pointer-events-auto flex items-center gap-1\">\n <RunsTray limit={8} onOpenThread={openRunThread} />\n <AgentToggleButton className=\"h-8 w-8 rounded-md bg-background/80 hover:bg-accent\" />\n </div>\n </div>\n <div className=\"mx-auto max-w-7xl space-y-10 px-4 py-6 sm:px-6\">\n {localPathname !== \"/overview\" && (pageTitle || headerActions) ? (\n <div className=\"flex min-w-0 items-center justify-between gap-3\">\n <div className=\"min-w-0 flex-1\">{pageTitle}</div>\n {headerActions ? (\n <div className=\"flex shrink-0 items-center gap-2\">\n {headerActions}\n </div>\n ) : null}\n </div>\n ) : null}\n {children}\n </div>\n </>\n ) : (\n children\n )}\n </main>\n </div>\n );\n const chatFirstSurfaceTabsBar =\n activeChatFirstSurfaceTab?.kind === \"app\" ? null : (\n <ChatFirstSurfaceTabs\n tabs={chatFirstSurfaceTabs.tabs}\n activeTabId={chatFirstSurfaceTabs.activeTabId}\n onActivate={activateChatFirstSurfaceTab}\n onClose={closeChatFirstSurfaceTab}\n onCloseOthers={(tab) => {\n activateChatFirstSurfaceTab(tab);\n chatFirstSurfaceTabsStore.closeOthers(tab.id);\n }}\n onCloseToRight={(tab) => {\n const targetIndex = chatFirstSurfaceTabs.tabs.findIndex(\n (candidate) => candidate.id === tab.id,\n );\n const activeIndex = chatFirstSurfaceTabs.tabs.findIndex(\n (candidate) => candidate.id === chatFirstSurfaceTabs.activeTabId,\n );\n if (activeIndex > targetIndex) activateChatFirstSurfaceTab(tab);\n chatFirstSurfaceTabsStore.closeToRight(tab.id);\n }}\n onCloseAll={closeAllChatFirstSurfaceTabs}\n onOpenSurface={openChatFirstSurface}\n apps={chatFirstAppItems}\n onOpenApp={(app) => openChatFirstPane({ appId: app.id }, \"side\")}\n renderAppIcon={(app) => (\n <AppIcon\n id={app.id}\n name={app.name}\n size=\"sm\"\n className=\"size-7 rounded-lg\"\n />\n )}\n copy={chatFirstCopy}\n />\n );\n const chatFirstSurfaceContent =\n chatFirstSurfaceTabs.tabs.length > 0 ? (\n <ChatFirstSurfaceContent\n tabs={chatFirstSurfaceTabs.tabs}\n activeTabId={chatFirstSurfaceTabs.activeTabId}\n renderTab={renderChatFirstSurfaceTab}\n />\n ) : null;\n const workspaceAppChatName =\n (workspaceAppId\n ? chatFirstAppRegistrations.find(\n (app) => app.id.toLowerCase() === workspaceAppId.toLowerCase(),\n )?.name\n : null) ??\n workspaceAppId ??\n \"Workspace app\";\n const workspaceAppContent =\n workspaceAppRouteActive && workspaceAppId ? (\n <WorkspaceAppChatRail\n appId={workspaceAppId}\n appName={workspaceAppChatName}\n agentPageHref={agentPageHref}\n onFullscreenRequest={openAskAgentFullscreen}\n >\n <WorkspaceAppKeepAlive activeAppId={workspaceAppId} />\n </WorkspaceAppChatRail>\n ) : (\n <WorkspaceAppKeepAlive\n activeAppId={workspaceAppRouteActive ? workspaceAppId : null}\n />\n );\n const content = isChatRoute ? (\n <div\n className={cn(\n \"agent-layout-main-surface flex h-full min-w-0 flex-1 overflow-hidden\",\n chatFirstMode && \"dispatch-chat-first-surface\",\n )}\n >\n {chatFirstAppTakesMain ? (\n <div\n className=\"flex min-w-0 flex-1 flex-col overflow-hidden\"\n data-dispatch-chat-first-main-app\n >\n {chatFirstSurfaceContent}\n </div>\n ) : (\n <>\n {appContent}\n {chatFirstMode &&\n chatFirstHasActiveChat &&\n chatFirstSurfacePanel.open ? (\n <ChatFirstSurfacePanel\n width={chatFirstSurfaceResize.width}\n onResizePointerDown={chatFirstSurfaceResize.onPointerDown}\n copy={chatFirstCopy}\n >\n {chatFirstSurfaceTabsBar}\n {chatFirstSurfaceContent}\n </ChatFirstSurfacePanel>\n ) : null}\n </>\n )}\n </div>\n ) : workspaceAppRouteActive ? null : isWorkspaceAppRoute ? (\n appContent\n ) : (\n <AgentSidebar\n position=\"right\"\n defaultOpen={false}\n agentPageHref={agentPageHref}\n chatViewTransition\n storageKey=\"dispatch\"\n openOnChatRunning={chatHomeHandoffActive}\n onFullscreenRequest={openAskAgentFullscreen}\n emptyStateText={t(\"dispatch.sidebar.emptyAgentText\")}\n suggestions={sidebarSuggestions}\n >\n {appContent}\n </AgentSidebar>\n );\n\n return (\n <DispatchExtensionsContext.Provider value={extensions}>\n <HeaderActionsProvider>\n <div className=\"agent-layout-shell flex h-screen w-full overflow-hidden bg-background\">\n <aside\n data-collapsed={sidebarCollapsed ? \"true\" : \"false\"}\n className={cn(\n \"agent-layout-left-drawer hidden shrink-0 flex-col border-e !border-e-sidebar-border bg-sidebar text-sidebar-foreground transition-[width] duration-200 ease-out lg:flex\",\n sidebarCollapsed ? \"w-14\" : \"w-56\",\n )}\n >\n <NavContent\n extensions={extensions}\n chatFirstMode={chatFirstMode}\n chatFirstEmbedded={chatFirstEmbedded}\n collapsed={sidebarCollapsed}\n chatFirstAppLayout={chatFirstAppLayout}\n onChatFirstAppLayoutChange={persistChatFirstAppLayout}\n chatFirstApps={chatFirstAppItems}\n chatFirstAppsLoading={chatFirstAppsQuery.isLoading}\n chatFirstAppsError={\n chatFirstAppsQuery.isError\n ? chatFirstCopy(\"appsLoadError\")\n : null\n }\n chatFirstActiveAppId={chatFirstActiveAppId}\n chatFirstActivePrimaryTab={chatFirstActivePrimaryTab}\n onChatFirstNewChat={() => {\n closeChatFirstSessionWatch();\n chatFirstSurfaceTabsStore.closeAll();\n setChatFirstSurfacePanelOpen(false);\n }}\n onChatFirstAppOpen={(app) => {\n if (isDispatchWorkspaceAppId(app.id)) return;\n setSidebarCollapsed(true);\n openChatFirstApp(app);\n }}\n onChatFirstAppsRetry={() => void chatFirstAppsQuery.refetch()}\n collapsible\n onCollapsedChange={setSidebarCollapsed}\n />\n </aside>\n\n <Sheet open={mobileOpen} onOpenChange={setMobileOpen}>\n <SheetContent\n side=\"left\"\n className=\"w-72 bg-sidebar p-0 text-sidebar-foreground [&>button]:hidden\"\n >\n <SheetTitle className=\"sr-only\">\n {t(\"dispatch.nav.navigation\")}\n </SheetTitle>\n <SheetDescription className=\"sr-only\">\n {t(\"dispatch.nav.navigationDescription\")}\n </SheetDescription>\n <div className=\"flex h-full w-full flex-col\">\n <NavContent\n extensions={extensions}\n chatFirstMode={chatFirstMode}\n chatFirstEmbedded={chatFirstEmbedded}\n collapsed={false}\n chatFirstAppLayout={chatFirstAppLayout}\n onChatFirstAppLayoutChange={persistChatFirstAppLayout}\n chatFirstApps={chatFirstAppItems}\n chatFirstAppsLoading={chatFirstAppsQuery.isLoading}\n chatFirstAppsError={\n chatFirstAppsQuery.isError\n ? chatFirstCopy(\"appsLoadError\")\n : null\n }\n chatFirstActiveAppId={chatFirstActiveAppId}\n chatFirstActivePrimaryTab={chatFirstActivePrimaryTab}\n onChatFirstNewChat={() => {\n closeChatFirstSessionWatch();\n chatFirstSurfaceTabsStore.closeAll();\n setChatFirstSurfacePanelOpen(false);\n }}\n onChatFirstAppOpen={openChatFirstApp}\n onChatFirstAppsRetry={() => void chatFirstAppsQuery.refetch()}\n onNavigate={() => setMobileOpen(false)}\n />\n </div>\n </SheetContent>\n </Sheet>\n\n <div className=\"relative min-w-0 flex-1 overflow-hidden\">\n {content}\n {workspaceAppContent}\n </div>\n </div>\n </HeaderActionsProvider>\n </DispatchExtensionsContext.Provider>\n );\n}\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@agent-native/dispatch",
3
- "version": "0.31.24",
3
+ "version": "0.31.25-nightly-20260826190205",
4
4
  "description": "Dispatch — workspace control plane for agent-native apps. Vault, integrations, destinations, scheduled jobs, and cross-app delegation, shipped as a single drop-in package.",
5
5
  "homepage": "https://github.com/BuilderIO/agent-native#readme",
6
6
  "bugs": {
@@ -101,10 +101,10 @@
101
101
  "typescript-7": "npm:typescript@^7.0.2",
102
102
  "vite": "8.1.0",
103
103
  "vitest": "^4.1.5",
104
- "@agent-native/core": "0.175.3"
104
+ "@agent-native/core": "0.175.4-nightly-20260826190205"
105
105
  },
106
106
  "peerDependencies": {
107
- "@agent-native/core": ">=0.8.0",
107
+ "@agent-native/core": "0.175.4-nightly-20260826190205",
108
108
  "react": ">=19.2.7",
109
109
  "react-dom": ">=19.2.7",
110
110
  "react-router": ">=8"
@@ -8,10 +8,9 @@ import { useSetPageTitle } from "./layout/HeaderActions";
8
8
  import { Popover, PopoverContent, PopoverTrigger } from "./ui/popover";
9
9
 
10
10
  /**
11
- * DispatchShell renders the per-page title (with an optional click-to-open
12
- * description popover) into the global header via the HeaderActions store.
13
- * The actual chrome (sidebar, AgentSidebar, header bar with AgentToggleButton)
14
- * is provided by `Layout` mounted in `root.tsx`.
11
+ * DispatchShell registers the per-page title (with an optional click-to-open
12
+ * description popover) with the HeaderActions store for layouts that expose
13
+ * that metadata.
15
14
  */
16
15
  export function DispatchShell({
17
16
  title,
@@ -11,6 +11,22 @@ const railSource = readFileSync(
11
11
  "utf8",
12
12
  );
13
13
 
14
+ describe("Dispatch layout scrolling", () => {
15
+ it("keeps page scrolling inside the viewport with a sticky chat control", () => {
16
+ expect(layoutSource).toMatch(/<main\s+className=\{cn\(\s*"min-h-0 flex-1"/);
17
+ expect(layoutSource).toContain(
18
+ 'className="pointer-events-none sticky top-0',
19
+ );
20
+ expect(layoutSource).toContain(
21
+ "<RunsTray limit={8} onOpenThread={openRunThread} />",
22
+ );
23
+ expect(layoutSource).toContain("<AgentToggleButton");
24
+ expect(layoutSource).toContain("useHeaderTitle");
25
+ expect(layoutSource).toContain("useHeaderActions");
26
+ expect(layoutSource).not.toContain("showHeader ? <Header onOpenMobile");
27
+ });
28
+ });
29
+
14
30
  describe("Dispatch workspace app chat rail", () => {
15
31
  it("routes the open-app rail through the shared app-chat component", () => {
16
32
  // Both app surfaces must share one rail: a second inlined AgentSidebar is
@@ -1,6 +1,7 @@
1
1
  import {
2
2
  CHAT_FIRST_MODE_CHANGED_EVENT,
3
3
  AgentChatSurface,
4
+ AgentToggleButton,
4
5
  chatFirstSurfaceTabId,
5
6
  AgentSidebar,
6
7
  ChatFirstSurfacePanelToggle,
@@ -61,6 +62,7 @@ import { useActionQuery } from "@agent-native/core/client/hooks";
61
62
  import { useT } from "@agent-native/core/client/i18n";
62
63
  import { openCommandMenu } from "@agent-native/core/client/navigation";
63
64
  import { InvitationBanner, OrgSwitcher } from "@agent-native/core/client/org";
65
+ import { RunsTray } from "@agent-native/core/client/progress";
64
66
  import { FeedbackButton } from "@agent-native/core/client/ui";
65
67
  import { SidebarFooterActions } from "@agent-native/toolkit/app-shell";
66
68
  import {
@@ -76,6 +78,7 @@ import {
76
78
  IconHierarchy2,
77
79
  IconMessageQuestion,
78
80
  IconBroadcast,
81
+ IconLayoutSidebar,
79
82
  IconLayoutSidebarLeftCollapse,
80
83
  IconLayoutSidebarLeftExpand,
81
84
  IconSettings,
@@ -116,6 +119,7 @@ import {
116
119
  import { CHAT_FIRST_PANE_STATE_KEY } from "../../shared/chat-first-pane";
117
120
  import { AppIcon } from "../app-icon";
118
121
  import { CreateAppPopover } from "../create-app-popover";
122
+ import { Button } from "../ui/button";
119
123
  import { Sheet, SheetContent, SheetDescription, SheetTitle } from "../ui/sheet";
120
124
  import { Skeleton } from "../ui/skeleton";
121
125
  import { Tooltip, TooltipContent, TooltipTrigger } from "../ui/tooltip";
@@ -125,7 +129,11 @@ import {
125
129
  WorkspaceAppKeepAlive,
126
130
  } from "../workspace-app-host";
127
131
  import { Header } from "./Header";
128
- import { HeaderActionsProvider } from "./HeaderActions";
132
+ import {
133
+ HeaderActionsProvider,
134
+ useHeaderActions,
135
+ useHeaderTitle,
136
+ } from "./HeaderActions";
129
137
 
130
138
  export { buildChatFirstEmbedSessionInput } from "../workspace-app-host";
131
139
 
@@ -256,9 +264,8 @@ export function useDispatchExtensions(): DispatchExtensionConfig | undefined {
256
264
  return useContext(DispatchExtensionsContext);
257
265
  }
258
266
 
259
- // Routes whose page renders its own toolbar.
260
- // Layout still mounts the sidebar + AgentSidebar, but skips its own Header so
261
- // there's no double-header.
267
+ // Routes whose page renders its own toolbar. Layout skips its sticky chat
268
+ // control so there's no duplicate page chrome.
262
269
  function pageOwnsToolbar(pathname: string): boolean {
263
270
  if (pathname === "/tools" || pathname.startsWith("/tools/")) return true;
264
271
  if (pathname === "/extensions" || pathname.startsWith("/extensions/"))
@@ -1400,6 +1407,8 @@ export function Layout({
1400
1407
  const t = useT();
1401
1408
  const location = useLocation();
1402
1409
  const navigate = useNavigate();
1410
+ const pageTitle = useHeaderTitle();
1411
+ const headerActions = useHeaderActions();
1403
1412
  const [mobileOpen, setMobileOpen] = useState(false);
1404
1413
  // Drives renderChatFirstSurfaceTab's app-tab chatSidebar decision below —
1405
1414
  // the chat-first surface panel is already a full-screen overlay at this
@@ -2283,7 +2292,7 @@ export function Layout({
2283
2292
  );
2284
2293
  }
2285
2294
 
2286
- const showHeader = !isChatRoute && !pageOwnsToolbar(localPathname);
2295
+ const showAgentControls = !isChatRoute && !pageOwnsToolbar(localPathname);
2287
2296
  function openAskAgentFullscreen() {
2288
2297
  focusAgentChat();
2289
2298
  navigateWithAgentChatViewTransition(
@@ -2291,14 +2300,30 @@ export function Layout({
2291
2300
  dispatchNavLinkTarget("/chat"),
2292
2301
  );
2293
2302
  }
2303
+ function openRunThread(threadId: string) {
2304
+ navigate("/chat", {
2305
+ state: {
2306
+ dispatchThread: {
2307
+ id: `${Date.now()}-${threadId}`,
2308
+ threadId,
2309
+ },
2310
+ },
2311
+ });
2312
+ window.requestAnimationFrame(() => {
2313
+ window.dispatchEvent(
2314
+ new CustomEvent("agent-chat:open-thread", {
2315
+ detail: { threadId },
2316
+ }),
2317
+ );
2318
+ });
2319
+ }
2294
2320
  const sidebarSuggestions = [
2295
2321
  t("dispatch.sidebar.suggestionBuildApp"),
2296
2322
  t("dispatch.sidebar.suggestionRouteSlack"),
2297
2323
  t("dispatch.sidebar.suggestionGrantKey"),
2298
2324
  ];
2299
2325
  const appContent = (
2300
- <div className="relative flex h-full min-w-0 flex-1 flex-col overflow-hidden">
2301
- {showHeader ? <Header onOpenMobile={() => setMobileOpen(true)} /> : null}
2326
+ <div className="relative flex h-full min-h-0 min-w-0 flex-1 flex-col overflow-hidden">
2302
2327
  <InvitationBanner />
2303
2328
  {isChatRoute && chatFirstMode && chatFirstHasActiveChat ? (
2304
2329
  <ChatFirstSurfacePanelToggle
@@ -2325,16 +2350,43 @@ export function Layout({
2325
2350
  ) : null}
2326
2351
  <main
2327
2352
  className={cn(
2328
- "flex-1",
2353
+ "min-h-0 flex-1",
2329
2354
  isChatRoute || isWorkspaceAppRoute
2330
- ? "min-h-0 overflow-hidden"
2355
+ ? "overflow-hidden"
2331
2356
  : "overflow-y-auto",
2332
2357
  )}
2333
2358
  >
2334
- {showHeader ? (
2335
- <div className="mx-auto max-w-7xl space-y-10 px-4 py-6 sm:px-6">
2336
- {children}
2337
- </div>
2359
+ {showAgentControls ? (
2360
+ <>
2361
+ <div className="pointer-events-none sticky top-0 z-10 flex justify-end px-4 pt-2 lg:px-6">
2362
+ <Button
2363
+ variant="ghost"
2364
+ size="icon"
2365
+ className="pointer-events-auto absolute start-4 top-2 h-8 w-8 lg:hidden"
2366
+ onClick={() => setMobileOpen(true)}
2367
+ aria-label="Open navigation"
2368
+ >
2369
+ <IconLayoutSidebar className="h-4 w-4" />
2370
+ </Button>
2371
+ <div className="pointer-events-auto flex items-center gap-1">
2372
+ <RunsTray limit={8} onOpenThread={openRunThread} />
2373
+ <AgentToggleButton className="h-8 w-8 rounded-md bg-background/80 hover:bg-accent" />
2374
+ </div>
2375
+ </div>
2376
+ <div className="mx-auto max-w-7xl space-y-10 px-4 py-6 sm:px-6">
2377
+ {localPathname !== "/overview" && (pageTitle || headerActions) ? (
2378
+ <div className="flex min-w-0 items-center justify-between gap-3">
2379
+ <div className="min-w-0 flex-1">{pageTitle}</div>
2380
+ {headerActions ? (
2381
+ <div className="flex shrink-0 items-center gap-2">
2382
+ {headerActions}
2383
+ </div>
2384
+ ) : null}
2385
+ </div>
2386
+ ) : null}
2387
+ {children}
2388
+ </div>
2389
+ </>
2338
2390
  ) : (
2339
2391
  children
2340
2392
  )}