@shuffleio/shuffle-mcps 0.0.18 → 0.0.21

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.mjs CHANGED
@@ -19,14 +19,31 @@ import {
19
19
  } from "./chunk-R3YLER6P.mjs";
20
20
 
21
21
  // index.ts
22
- import "./shuffle-mcp-CN72CJJQ.css";
22
+ import "./shuffle-mcp-ER33P3W2.css";
23
23
  import React5 from "react";
24
24
 
25
25
  // ShuffleMcpThemeProvider.tsx
26
26
  import React from "react";
27
27
  import { ThemeProvider, createTheme, useTheme as useMuiTheme } from "@mui/material";
28
28
  import { jsx } from "react/jsx-runtime";
29
- var componentOverrides = {
29
+ var readHtmlDarkClass = () => {
30
+ if (typeof document === "undefined") return false;
31
+ return document.documentElement.classList.contains("dark");
32
+ };
33
+ var useHtmlDarkClass = (enabled) => {
34
+ const [isDark, setIsDark] = React.useState(() => enabled ? readHtmlDarkClass() : false);
35
+ React.useEffect(() => {
36
+ if (!enabled || typeof document === "undefined") return;
37
+ setIsDark(readHtmlDarkClass());
38
+ const observer = new MutationObserver(() => setIsDark(readHtmlDarkClass()));
39
+ observer.observe(document.documentElement, { attributes: true, attributeFilter: ["class"] });
40
+ return () => observer.disconnect();
41
+ }, [enabled]);
42
+ return isDark;
43
+ };
44
+ var ShuffleMcpThemeContext = React.createContext(null);
45
+ var useShuffleMcpTheme = () => React.useContext(ShuffleMcpThemeContext);
46
+ var buildComponentOverrides = (scopeClassName) => ({
30
47
  MuiTextField: { defaultProps: { size: "small" } },
31
48
  MuiButton: { defaultProps: { size: "small" } },
32
49
  MuiFormControl: { defaultProps: { size: "small" } },
@@ -68,7 +85,15 @@ var componentOverrides = {
68
85
  }
69
86
  }
70
87
  },
88
+ // ---- Portaled surfaces: stamp scopeClassName so HSL tokens resolve ----
89
+ MuiDrawer: {
90
+ defaultProps: { slotProps: { paper: { className: scopeClassName } } }
91
+ },
92
+ MuiDialog: {
93
+ defaultProps: { slotProps: { paper: { className: scopeClassName } } }
94
+ },
71
95
  MuiMenu: {
96
+ defaultProps: { slotProps: { paper: { className: scopeClassName } } },
72
97
  styleOverrides: {
73
98
  paper: {
74
99
  backgroundColor: "hsl(var(--popover))",
@@ -78,6 +103,7 @@ var componentOverrides = {
78
103
  }
79
104
  },
80
105
  MuiPopover: {
106
+ defaultProps: { slotProps: { paper: { className: scopeClassName } } },
81
107
  styleOverrides: {
82
108
  paper: {
83
109
  backgroundColor: "hsl(var(--popover))",
@@ -86,32 +112,23 @@ var componentOverrides = {
86
112
  }
87
113
  }
88
114
  },
115
+ MuiTooltip: {
116
+ defaultProps: { slotProps: { tooltip: { className: scopeClassName } } }
117
+ },
89
118
  MuiDivider: {
90
119
  styleOverrides: { root: { borderColor: "hsl(var(--border))" } }
91
120
  }
92
- };
93
- var readHtmlDarkClass = () => {
94
- if (typeof document === "undefined") return false;
95
- return document.documentElement.classList.contains("dark");
96
- };
97
- var useHtmlDarkClass = (enabled) => {
98
- const [isDark, setIsDark] = React.useState(() => enabled ? readHtmlDarkClass() : false);
99
- React.useEffect(() => {
100
- if (!enabled || typeof document === "undefined") return;
101
- setIsDark(readHtmlDarkClass());
102
- const observer = new MutationObserver(() => setIsDark(readHtmlDarkClass()));
103
- observer.observe(document.documentElement, { attributes: true, attributeFilter: ["class"] });
104
- return () => observer.disconnect();
105
- }, [enabled]);
106
- return isDark;
107
- };
121
+ });
108
122
  var ShuffleMcpThemeProvider = ({
109
123
  children,
110
- mode = "dark"
124
+ mode = "auto"
111
125
  }) => {
112
126
  const parent = useMuiTheme();
127
+ const parentCtx = useShuffleMcpTheme();
113
128
  const htmlIsDark = useHtmlDarkClass(mode === "auto");
114
129
  const effectiveDark = mode === "auto" ? htmlIsDark : mode === "dark";
130
+ const sameAsParent = parentCtx !== null && parentCtx.isDark === effectiveDark;
131
+ const scopeClassName = effectiveDark ? "shuffle-mcp-scope dark" : "shuffle-mcp-scope";
115
132
  const merged = React.useMemo(
116
133
  () => createTheme({
117
134
  ...parent,
@@ -121,25 +138,27 @@ var ShuffleMcpThemeProvider = ({
121
138
  },
122
139
  components: {
123
140
  ...parent.components,
124
- ...componentOverrides
141
+ ...buildComponentOverrides(scopeClassName)
125
142
  }
126
143
  }),
127
- [parent, effectiveDark]
144
+ [parent, effectiveDark, scopeClassName]
145
+ );
146
+ const ctxValue = React.useMemo(
147
+ () => ({ mode, isDark: effectiveDark, scopeClassName }),
148
+ [mode, effectiveDark, scopeClassName]
128
149
  );
129
- const tree = /* @__PURE__ */ jsx(ThemeProvider, { theme: merged, children });
130
- const scopeClassName = mode === "light" ? "shuffle-mcp-scope" : "shuffle-mcp-scope dark";
131
- if (mode === "light" || mode === "dark") {
132
- return /* @__PURE__ */ jsx("div", { className: scopeClassName, "data-shuffle-mode": mode, "data-shuffle-mcp-root": true, children: tree });
150
+ if (sameAsParent) {
151
+ return /* @__PURE__ */ jsx(ShuffleMcpThemeContext.Provider, { value: ctxValue, children });
133
152
  }
134
- return /* @__PURE__ */ jsx("div", { className: "shuffle-mcp-scope", "data-shuffle-mode": "auto", "data-shuffle-mcp-root": true, children: tree });
153
+ return /* @__PURE__ */ jsx(ShuffleMcpThemeContext.Provider, { value: ctxValue, children: /* @__PURE__ */ jsx(ThemeProvider, { theme: merged, children: /* @__PURE__ */ jsx("div", { className: scopeClassName, "data-shuffle-mode": mode, "data-shuffle-mcp-root": true, children }) }) });
135
154
  };
136
155
 
137
- // ShuffleMCP.tsx
156
+ // views/ShuffleMCP.tsx
138
157
  import React3, { useState as useState9, useEffect as useEffect8, useRef as useRef7, useCallback as useCallback7, useMemo as useMemo4, useImperativeHandle } from "react";
139
158
  import { algoliasearch } from "algoliasearch";
140
159
  import { Tooltip as Tooltip4 } from "@mui/material";
141
160
 
142
- // AppDetailDrawer.tsx
161
+ // views/AppDetailDrawer.tsx
143
162
  import { useState as useState8, useEffect as useEffect6, useMemo as useMemo3, useRef as useRef5 } from "react";
144
163
 
145
164
  // toast.ts
@@ -164,7 +183,7 @@ base.info = (msg, opts) => _impl({ title: msg, description: opts?.description, v
164
183
  base.warning = (msg, opts) => _impl({ title: msg, description: opts?.description, variant: "warning" }, opts);
165
184
  var toast = base;
166
185
 
167
- // AppDetailDrawer.tsx
186
+ // views/AppDetailDrawer.tsx
168
187
  import {
169
188
  Download,
170
189
  Forward,
@@ -604,7 +623,7 @@ var DATASTORE_CATEGORIES = {
604
623
  LEGACY_CASES: "shuffle-security_cases"
605
624
  };
606
625
 
607
- // AppDetailDrawer.tsx
626
+ // views/AppDetailDrawer.tsx
608
627
  import {
609
628
  Box as Box8,
610
629
  Typography as Typography8,
@@ -619,7 +638,7 @@ import { motion as motion6 } from "framer-motion";
619
638
  // useAppAuth.ts
620
639
  import { useState as useState3, useCallback as useCallback3, useEffect as useEffect2 } from "react";
621
640
 
622
- // IntegrationStatus.tsx
641
+ // components/IntegrationStatus.tsx
623
642
  import { useState as useState2, useEffect, useCallback as useCallback2 } from "react";
624
643
  import {
625
644
  Plus as AddIcon
@@ -903,7 +922,7 @@ function extractValidatedIngestionApps(authApiResponse, workflowAppNames) {
903
922
  return apps;
904
923
  }
905
924
 
906
- // IntegrationStatus.tsx
925
+ // components/IntegrationStatus.tsx
907
926
  import { Fragment, jsx as jsx3, jsxs } from "react/jsx-runtime";
908
927
  var ONBOARDING_CONFIG_CATEGORY = "shuffle-security_onboarding";
909
928
  var SELECTED_TOOLS_KEY = "selected_tools";
@@ -1553,7 +1572,7 @@ function useAppAuth() {
1553
1572
  };
1554
1573
  }
1555
1574
 
1556
- // AppTitleHeader.tsx
1575
+ // components/AppTitleHeader.tsx
1557
1576
  import { Box as Box2, Typography as Typography2, Avatar as Avatar2, Chip, Button } from "@mui/material";
1558
1577
  import {
1559
1578
  CheckCircle2 as CheckCircleIcon,
@@ -1684,11 +1703,11 @@ function AppTitleHeader({
1684
1703
  ) });
1685
1704
  }
1686
1705
 
1687
- // AppAuthSection.tsx
1706
+ // components/AppAuthSection.tsx
1688
1707
  import { Box as Box4, Typography as Typography4 } from "@mui/material";
1689
1708
  import { motion as motion3 } from "framer-motion";
1690
1709
 
1691
- // AppAuthConfig.tsx
1710
+ // components/AppAuthConfig.tsx
1692
1711
  import { useState as useState5, useEffect as useEffect4, useRef as useRef2 } from "react";
1693
1712
  import {
1694
1713
  CheckCircle2 as CheckCircleIcon2,
@@ -1726,7 +1745,7 @@ import {
1726
1745
  } from "@mui/material";
1727
1746
  import { motion as motion2 } from "framer-motion";
1728
1747
 
1729
- // AppFallbackIcon.tsx
1748
+ // components/AppFallbackIcon.tsx
1730
1749
  import { useEffect as useEffect3, useRef, useState as useState4 } from "react";
1731
1750
  import { jsx as jsx5 } from "react/jsx-runtime";
1732
1751
  var norm = (s) => s.toLowerCase().replace(/[\s_\-]+/g, "_");
@@ -1872,7 +1891,7 @@ var AppFallbackIcon = ({
1872
1891
  );
1873
1892
  };
1874
1893
 
1875
- // AppAuthConfig.tsx
1894
+ // components/AppAuthConfig.tsx
1876
1895
  import ReactMarkdown from "react-markdown";
1877
1896
  import remarkGfm from "remark-gfm";
1878
1897
  import { Fragment as Fragment2, jsx as jsx6, jsxs as jsxs3 } from "react/jsx-runtime";
@@ -3728,7 +3747,7 @@ var AppAuthConfig = ({
3728
3747
  ] });
3729
3748
  };
3730
3749
 
3731
- // AppAuthSection.tsx
3750
+ // components/AppAuthSection.tsx
3732
3751
  import { jsx as jsx7, jsxs as jsxs4 } from "react/jsx-runtime";
3733
3752
  function AppAuthSection({
3734
3753
  displayName,
@@ -3765,11 +3784,11 @@ function AppAuthSection({
3765
3784
  ] }) });
3766
3785
  }
3767
3786
 
3768
- // TryMcpSection.tsx
3787
+ // views/TryMcpSection.tsx
3769
3788
  import { Box as Box6, Typography as Typography6 } from "@mui/material";
3770
3789
  import { motion as motion5 } from "framer-motion";
3771
3790
 
3772
- // AppMcpChat.tsx
3791
+ // views/AppMcpChat.tsx
3773
3792
  import { useState as useState6, useRef as useRef3, useMemo } from "react";
3774
3793
  import {
3775
3794
  CheckCircle as CheckCircleOutlineIcon,
@@ -3789,7 +3808,7 @@ import {
3789
3808
  // ../assets/singul-agent-icon.png
3790
3809
  var singul_agent_icon_default = "data:image/png;base64,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";
3791
3810
 
3792
- // AgentIcon.tsx
3811
+ // components/AgentIcon.tsx
3793
3812
  import { jsx as jsx8 } from "react/jsx-runtime";
3794
3813
  var AgentIcon = ({ size = 16, className, style }) => /* @__PURE__ */ jsx8(
3795
3814
  "img",
@@ -3804,7 +3823,7 @@ var AgentIcon = ({ size = 16, className, style }) => /* @__PURE__ */ jsx8(
3804
3823
  );
3805
3824
  var AgentIcon_default = AgentIcon;
3806
3825
 
3807
- // AppMcpChat.tsx
3826
+ // views/AppMcpChat.tsx
3808
3827
  import { motion as motion4, AnimatePresence } from "framer-motion";
3809
3828
  import ReactMarkdown2 from "react-markdown";
3810
3829
  import remarkGfm2 from "remark-gfm";
@@ -4378,7 +4397,7 @@ ${JSON.stringify(data, null, 2)}
4378
4397
  };
4379
4398
  var AppMcpChat_default = AppMcpChat;
4380
4399
 
4381
- // TryMcpSection.tsx
4400
+ // views/TryMcpSection.tsx
4382
4401
  import { jsx as jsx10, jsxs as jsxs6 } from "react/jsx-runtime";
4383
4402
  function TryMcpSection({ appName, appIcon, appId, categories }) {
4384
4403
  return /* @__PURE__ */ jsx10(motion5.div, { initial: { opacity: 0, y: 12 }, animate: { opacity: 1, y: 0 }, transition: { duration: 0.3, delay: 0.15 }, children: /* @__PURE__ */ jsxs6(Box6, { sx: { mt: 5, mb: 3 }, children: [
@@ -4395,7 +4414,7 @@ function TryMcpSection({ appName, appIcon, appId, categories }) {
4395
4414
  ] }) });
4396
4415
  }
4397
4416
 
4398
- // SingulActionsPreview.tsx
4417
+ // components/SingulActionsPreview.tsx
4399
4418
  import { useState as useState7, useEffect as useEffect5, useMemo as useMemo2, useCallback as useCallback5, useRef as useRef4 } from "react";
4400
4419
  import {
4401
4420
  Box as Box7,
@@ -5211,7 +5230,7 @@ var SingulActionsPreview = ({
5211
5230
  };
5212
5231
  var SingulActionsPreview_default = SingulActionsPreview;
5213
5232
 
5214
- // AppDetailDrawer.tsx
5233
+ // views/AppDetailDrawer.tsx
5215
5234
  import { Fragment as Fragment4, jsx as jsx12, jsxs as jsxs8 } from "react/jsx-runtime";
5216
5235
  function AppDetailDrawer({
5217
5236
  open,
@@ -5583,10 +5602,10 @@ function AppDetailDrawer({
5583
5602
  );
5584
5603
  }
5585
5604
 
5586
- // ShuffleMCP.tsx
5587
- import "./shuffle-mcp-CN72CJJQ.css";
5605
+ // views/ShuffleMCP.tsx
5606
+ import "./shuffle-mcp-ER33P3W2.css";
5588
5607
 
5589
- // SegmentedControl.tsx
5608
+ // components/SegmentedControl.tsx
5590
5609
  import * as React2 from "react";
5591
5610
  import { motion as motion7, LayoutGroup } from "framer-motion";
5592
5611
  import { jsx as jsx13, jsxs as jsxs9 } from "react/jsx-runtime";
@@ -5792,7 +5811,7 @@ var useSyncHostBaseUrl = (globalUrl) => {
5792
5811
  }, [globalUrl]);
5793
5812
  };
5794
5813
 
5795
- // ShuffleMCP.tsx
5814
+ // views/ShuffleMCP.tsx
5796
5815
  import { Fragment as Fragment5, jsx as jsx14, jsxs as jsxs10 } from "react/jsx-runtime";
5797
5816
  var DEFAULT_ALGOLIA_APP_ID = "JNSS5CFDZZ";
5798
5817
  var DEFAULT_ALGOLIA_API_KEY = "33e4e3564f4f060e96e0531957bed552";
@@ -6331,7 +6350,7 @@ var ShuffleMCP = React3.forwardRef(({
6331
6350
  });
6332
6351
  ShuffleMCP.displayName = "ShuffleMCP";
6333
6352
 
6334
- // AppSearchDrawer.tsx
6353
+ // views/AppSearchDrawer.tsx
6335
6354
  import { useState as useState10, useEffect as useEffect9 } from "react";
6336
6355
  import {
6337
6356
  X as CloseIcon3
@@ -6742,7 +6761,7 @@ function AppSearchDrawer({
6742
6761
  ] });
6743
6762
  }
6744
6763
 
6745
- // AiAgentPromptsEditor.tsx
6764
+ // components/AiAgentPromptsEditor.tsx
6746
6765
  import { Box as Box10, Typography as Typography10, IconButton as IconButton6, Tooltip as Tooltip6, Button as Button5, TextField as TextField4 } from "@mui/material";
6747
6766
  import { X as CloseIcon4, Plus as AddIcon2 } from "lucide-react";
6748
6767
  import { jsx as jsx16, jsxs as jsxs12 } from "react/jsx-runtime";
@@ -6935,13 +6954,13 @@ var AiAgentPromptsEditor = ({
6935
6954
  };
6936
6955
  var AiAgentPromptsEditor_default = AiAgentPromptsEditor;
6937
6956
 
6938
- // ShufflePipelinesBanner.tsx
6957
+ // components/ShufflePipelinesBanner.tsx
6939
6958
  import { Box as Box11, Typography as Typography11, Chip as Chip6 } from "@mui/material";
6940
6959
 
6941
6960
  // ../assets/shuffle-icon.png
6942
6961
  var shuffle_icon_default = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAJAAAACQCAYAAADnRuK4AAAAAXNSR0IArs4c6QAAAERlWElmTU0AKgAAAAgAAYdpAAQAAAABAAAAGgAAAAAAA6ABAAMAAAABAAEAAKACAAQAAAABAAAAkKADAAQAAAABAAAAkAAAAAA/PwqIAAAk1klEQVR4Ae1da6xcV3XeM/fhZ+xrO7YDIck1cUIwEJuKpCqExEhQSFTaQFpVVUuAP61SKkEQ/IPG7o9WKggVtajtD9oUSquSEviBqKhayIPQKmmIA42DaIgf5OHYTmzH9rVzHzP9vrX23mefM+c9Z2bude62zz17r71ee63vrrPnzNwzLdNA63a7U1Bzq+mYnaZtptHfhYM0Htmti6lW9vQwZ2q5UkaoDE/KQmuKpWjypIPo8diH43Ec97VaLY77arXTZ0HzcVjfbQ/rSJ2ll5cpz2nduRBPzQWBYPoijtpgqgygADifgOH8ClMxealxSSUWKa4lVKS09rz3xndqqxqk4N1QvrdqVaoEIIDnLhhpHDiDjMqFoHvIuNsDEO0tG7dSAAJwpqHwmzh2lVVcmW/IUUr6V998fcmkD8Mal/D4IHx5V5lq1C5yGuD5MHgewzE48NCJUlAm42BaffP1JQezkmKtJTyehpbHkPtbi7TlAshesu6GkilD2C63chG4MGI1hcV+02Igc92ZYLSCezIllyeqRyDl2pFCqq538BKZ+6JUANnSxT3PCNoSCWnFyIx6VQ3Y/wj2RP+QXHYPgACeaTBxz8MSFrUsD7LokeRyr+kI1Ip5LaHQ85MYvDW5sU4D0AGYmqZky9v0HZKXW1EE+gxXn+L53vWnfB8A9NbQQGwTbfc900SVIMvDy3dC2eV+VgT6DFef4lleKb0/5buAkT2hAa/OXroOhJPL/XIRCH+pw75I9xCSOgsZkgLDHfe418WlrLUNlYiXNLz1GbW7ou5yr0oE/G8hhMK+6OghJDUXMiQFhjvuca/FvfEnnBMyXar6hEhEvwvJHt1O6/J59BEI89WnNymqWH2kCrkKtLvQRoiWxQYerjDRUkgJjoaHQzdY4L/NVxNuham3Vn0VcgD6eIE71afLeF6Gp4zllBWmkMpoSucp42ejBtPdqENtxq3UANxEf1qlLl91PF+WqRwBpim6dVJGXCTKMA6KZwMr0G6nPRVnbnKA51HZHdiSai5IqkWlklGJueRyKzl/KwG0y2kehDtOd955VHbzfHr1zlXKxi4CaKcLViXsOaEL6dxUACrloOkANrWIUn5NE0DTjnXo6x7qWt0qc85DD0COL5WmwkA2vIhQda9PO7mJzmeRDwI17FSvIxcWhRFtLGSNKms6zidLAKhpmw3payquTelpaFlL7feVl7DmGpNRqpVmzNbW1G94U3qyPU2fyQpBLX+ylKWbbpKaD6CqfoWLD2XRD4fl63tcqsmFD0ZXBX/DWPU4U0GPyOYq69EeJxTYKpheupeweBR6Rlx3P2HtUbhMSI1AfgVKFYmIBeCMGBvslbW5DJ4Gg56jqi8AlU5S2aznOOqmStt0AsvneAQazAUV9wWguGc5o6FkveHI5CxnSU81nIvhAGgoEW84Mt7nZWAmXwL50KBzAQEoXFZWvwAMKdPd5a04gpn9y9kngFIinpW7RUGPB6LH+/i0eOxIPbyLYj2jdyIAUJ0QufCOfiF1PKjifRXeUr7UCXcpxcNlCgDUeIhqrWQwcR2M1loLdEKLI9zOmxLn9BgGAIp0pLPmbaUi2X57TcdV19K01n5XWV4+KxflNShn/3rSY7hk7kQzAOlLSITy/FnTeeJhc+7pl82ZX7TNmQNnzCtHz5m5zkrTaY3jMY5jcl7otqOxAb01ZhY45w+lcbz2itVm1eaV5pLr1pnpG9cmDNYcHsZjCh//d2N4PvWCKlm5xpgt24259leNufrtxqx0tkqvPuZMPamYisLBEgFQQSgImke/b7pPAjj/+6w5+eLrzcz5zYYg6QI0HhgEUBdAAVi6BEw3AgmBInwOZARSUha0VZtXmB23TZltNyLZdRoB88BXFTh58uu3GvPO2xVMeXxl5grCV0ZFFk95AOU4kTOVZVfptQWtWgLnh982nYdwnJ01Lz27w8yc2+iryAIqC4Hiq4sFDIEiwAKYOKfgIdgmYmCLVynyRZXqzQDRW25zFSJ/mX724XuN+Y+/9sNSnes/aMy77yjFOgqm8dJGc64fOlUFDZY3R2eRX50ffc90v/N3pntuxizMrTQv/mKnmZ9bHYlBdwufAaAl+chcSwgyT7MdEp19zLV4SQtp9nN2joV6wvbje89Ad8tce1vJSlQHPDRIuXNnjHn/pzGwcQsdGXE/dRNdzqdkSF2oy0hb3qSKMqKsOl/7M9O59y8VPLMrzInD15j52ckovAQLmsWA1Ro3pixK44cy+Q9/7215bapkrDRATABHCavdPH7vjDmyf87LZHZOHjHmB1/JnC6c+An2So/wcU2Rf4Uyg2CIh1As9AGgBhZTVcXJo2bhS3eaDvY6uN7IcfrINCrQCkk+AWMh4Tp2zLWS31YkjPQOM2j638pHERIwUZ9DIfjYeBIuy7rv3nNCz/3xg380BsDvqz0IAJ5HJeq3RUusrsnGIBQsCaBeq72UUK3rp3CFpLDvRLLOBM+XP2O6J44hg7g44Th/apOZn7lIJaDLF5BAL9fsKwsYfAwcMALeSAGEOA/mSKcy8qfq0J8vPDlvjuDIbKw+P/5u5nTpCYKHlajf5gPQryKVLwmgXqu9lDSHUrhCUtgPE5lUZcFjThwX8BBA/Hfu+BatENAjFyEHCsqDRuDI5Qn00FRSvYwpG5O3sjHmQI9X2OoFkKzFLujwj2Ma+hocytaVF76+bBYIlwRQgZac6dIL8wlJKEPpX/jyZ6XyRDlumVdObTCduUktETDiqoyqwU+5xEXW5VJkAZJmipxOh3qgeyLhdWWIlQ+TotWBDecXDy7EnVYh5XzhqfhcP6McXWlr6sdUOdlu2Xfjo0SUUxxx9buwzne+DPAcFUBIzphEHHOn10VGbE8qjvRtmpl4l3x081bhqlWkNKhANCy6MMsuTgK2jrhlZmeyNIPzleTeh9I1W4+umnoaE2vFASRhSI1FH4vuw9kuXqp3fvR9zRJAo+7CF/i4MBO8ZHc2kGjvqQOOn9PECwhJ47wfsMuFh3skBYk87ID8jlfNKxgx6e2Rp0TTbXwJxiXCgktYhBgJho1IRK25kn4VcN/zvX+Bca04TJXkEEDqLOBGIG4Cxi45mKRJMcs1cGyTLnx2XR5Xds6tzk5H0QBBWPxFXjn40+tAh+PJ1TrndMXOK+L3iXI4Y2KpA96dXmQN4UlfUjq1gvd9KuCNQsNXXLhMeGTYy1cXAGILMco+gSJm7YQDmAMSMy99hwCeRdDq8j4rn7A5I37OGia69L+54m0TdCfRrODV70jQqw4Dw1uvrCpcj9+tOSmdQve/X0neoY/FOeshNs7dR+9DgphgusgzA2kPAggJ5Mg1D5aIAB434Jk6IOPAQxJBQCU8yZk6lUA+iqsKlaUIm9LQISvaJW9Mu6FvJ5l0/6ao8lf76a01875YGePW9R7WFPriAZA4px529j+s93uQIYGJqzyuGrURVCaYAEALf/rsCjgCkJHJgqIHSESCKsHJdnCO4gWaHYhaQRsNd832d64wazdrGJ0kffKN4LnuA37Y24ms9M4FlMvxEBUeyZZqNMk0uPEIAZS98i7fWce0AIRsYfVBvz0+b1ptoMkmkikQfpxdbjXjQXLsbthRxLpjxlxsLPEGJ5Q6focrEaExtLWbx8zO21ZJnz/IqzOepJ3r8IbolqzLT5qEt6ryBKG8F5bQy2GCNeRI0xzOa78cl/CmsCYAlMLRa7EhSsbK8ZK98/QTsIF5fhyD1Uf6HOvRBXbak69IggU55MYU/vck0K0oeH0lusnrG5jk0uaY3QSUWqyIgXD/NLmmbd7zmSlffZxI6pkA+K29xqy/JHW6l5hwhO/Gl9lAJ8Ria+w1YinluIS5h7XnPlAPR6bZQU10nz8YAQWAkcQzMBIcCybcfRhfZe+vWOQkYqdoghhXxCOcZ72Jj8kASmz5lkNo+MFqRFs4r0HlefdnNkkFgmSshSpCGwKA3/t8BRBBLYH3m3tT9z4x3c6D0Lij2XMqf4JHh/mc8dkWPuAyokZH0tYr1YeVhskCh1QAViHSKMEzhMfXvGzaJzfjIxiSU10FWVyDoPxTdlDJiBPGvJqJejsWERC8OPq0K25w0k5MrG6b7TevN1ffvM6wX9ScPm+GVeRjX8V7Y3hP60GcT+F9srRG4PBTiTfcDhDFbwM4dqfbjb0NR0ick/yJ6WCYz5mcHQCAipaiviYdcSvoPncIXQsYAQ0BQm4cTCrVY9zCRnriohNm/uUtAgaCImnZ1i+AbdKsve4K3BHAJRFHp6Vn6VtaV2i4vwQ75ONh5FOKbXwKcdJcvGOtWT+9ohRwIBhrPWslOHjw04mHcJx8QflXAThbX2/MVTdkAiemOBj02AjmBtkdAID6W0r3Jdz7sWARwLAv46gaSWkAbcXaE3inYINZ4I1FGyV3FhCCOrV7u9n6kevNGECU15Lgy+NtbC7rlRUM5PqTO9mYd6UU9dbhKAOlFDTN1D1x3FcZVp4Wq4/4xLM9AB6pRPB+7eZnTBuvyAgz97JefeqayS0XmUs+Wgwe8lN+MbXIn5SERJMjd7kXQKN2LgAJgSOvwkIQOfCQ1sFL+vacWbfxMC5pwTviXAP2MSu3bTTt1bbypORhKNHv2+6oE5IfpV4A5fD3HYsc3X4qBA33ITQKsMg+yAGJZ6kZSm9PvGKmNh0wY2P246XiKLbQUqas5lHlYVR2fUAH26kEoGZjkQFHvgIRoOhlKtpAp48FSOBvt+fNxk3/Z9aufsGMjyuQZvYfMXNH+eH3JlozWprwpC8dVZdRwG9/xftyqaZwBhzdy1Y6boEkZ1Qc+TiHB5d9jeXH6saa1UfNxoueMhvWHDITr7xkDv/JtwVENZ0MxDL8DTiWRLfqMgr4y/9d2JCiM/f3XzALP3lUwcPLFADCKxHB417C6+WMDkXzHmyg6ZXL/W7gJXln3IxtWo9KpPzuskh5pUEVbCT1yrz8Blo5rzsxpo+ii7cH0Mf+a2zzBvRxw3PbVvSnzOSbLzOT01uGFEVdD1wZQGNAIsXjMozTmjdaQX9rA4NMB22SIBsHD6aoz87rJc6OrZwCjnxMLDkXTOf4SxgzwUoXwGHGgVJ4A73JeQUXfaICyln/2Mch9414A5JAx6GXToyfeMbTxrZMmRVvusys3b3DrHzzpVQ0oAYn4UtTjUsWbdJhz1PwKjm202zKZEk9kR9eoPPUk2b2S38qyaefChBNlk82lyOViYvBwXfpcY54MfTz2pexldM5lWHfzfGWgbMh5xg/baEF/E5OQIOEdQSgURXq8i9g6RdvUnIuANjY5nVmw29fb9btfoPqdT9TYuKmss4qUk2wGneW5VE/oczmJHSvfekVpsV9EFYYAUKTLMmzSdUKAEnyMUk4dI9EmgUTo2T7nBegOZBwHIIBIHTgoU4BppMlX8gfyBEcvAvlKo+AxN3VJmCkr6DqQI68PGaPnTVH/uo+8/Qf/nN8j0ZTFZuKVBOsxp3tUKVXYdlqGpxZhc86v/byGHiYWAGATaICizYdUBAO8oCRc543nJcq5fZF5KcsZaCGh+VVW+QLdHNaeCPdtCGgEXsEiIIkOlMeNDkUNIYPdbCXODkDXLNHZ8xTH/u6Ofb1x2hlybXFByCEcOJ9+PwMEuSTKH2QkCyh2zmO+U8a5/xBXvwP+cGn4HB6yRPJCC9BJjSV9bqZdMeLm5cePNAp76/ZKoS7mRFAhKbVSfdHYaWyOuSSp0B74Z6fmEOfuw9/LDAry1kqPxYlgNpXXWNaGy6WhEsgLRAkcS6ROEu1sWPfJ6DsnAAg4I9ASa1cOngtPwFHAMTGXjfIltfvY7jnCasJ+gsyJjgAFoBDZKgTvDrnqpQFkLvEWbunHn7W/Pyu/0RVSv4pEO1Xb1JYq4tVkuAqF2WbuOVW+BVUiFh1AEZkDiyMEhMdjKVaYOyrhkTSAUv5dcMcgJDybBZ8BJhe3gIfPGgUJFpx2Lf+0CbAQADRH9eXCiTgIph03oGPQNN9kYJr5uAp8/TnHkIlsnfV6VOFFoLGrqiCdHXWRQugsV++wbQvvTwCB5NiweIriwWJBwpB4MGkfblsOVDg7G5GUkbfqGWYLS8vT4oGsUUep5uAdVVFNs428Q4k4d5GNtUCFN376Bx0UQcOBRiBA9CwCtG+BRb1zRx62Tz15/9VPZu6klpydYUaB1D4G1DXKSc3cdvvSHA12aDahGpSMcQ4BAwT4WnCqzIeIEKjh+SjvLUkferimCGxephY9uVQuiTd7V1sVXHg4RxfaTmgKEC0sgjQAA7/Uh991c0zHl5FOYLIyp/e/6J59p6fYm5xN3pfu7n4hwoY8qba2NVvMJO3vF8SKwFGcKX5hGuCBUSgSUVh0sUxO8fkC7/1ismnHtGF5TNhOKSqETxOt+hRMGiVifY88oE0Jpu6eRAYlLXVxAFKztTvgGFtKr/TF1WlSJfSnrnnZ+bl/cebCmd5PRK/cuz5AMpSZOlM0aDbxK/9umlfhZttEnxY49kdLsk26Q4Y8lts90xCY3I9r5OnLvy3utylS/mVRyuJVhUFCECTAhJ3afMVR8BlAWbBE87pZQw2PB/1kj86dA/WNr+4p8GHMzBZWTnlnGtwrWzLB1CWoix6WatFfIlFrrzjDtN+3WUCHAGHgAlOSPKpjH2cMNbLEh208zwHYNJKozIKHvbRRDaSc+DRqqKJdfsXqRTQKwlH4snjQOFBQEDwgF4BD8DhNsyOx+sT8Kg+R2OVw0cMzKn9J8zR+55VH5v4ySU22HoBlEheg7bKq0ossrUaj9n91CcVRASEBYdemjDG5ldooLtNsoILdFkPz9rnnwS5ueiyReBZHQSSAIKhQfJlv0MAWcD4MwBhE++rk6sgASAIItlXkearl9NlQUZwiV76QFs43CYd50P3/Bz0xdl6AcQ11GiDxl1r9Sqz6tN3mvFd1wooYpWGwWfi4YQDlesTLB4cSAxB4caiQ2QILj2k8ghoAB4m3yWeZ5dcnKWqQCZ2+XLztCl9exZZ9h09Ao6rZg44CkbLa/04f3zWnHziRI2sDF4kAaD6MKiJu9IrpGcCoj/6A7PiN25BKuC6JF1BQ2B4sJCZcw4sTKjQyEs+npXHgUl4bYK1T/287LjEu7OCR+xZgLlLlIKB6nnZok0LNBnHAeiA43kdKKHTVz1WLIIPx8F/PQiHyzUubeDNGkkAaNAwqL+s0LNJAGjN5+4y42/YroBAggQwAhraILejWZsyR5qdJzA8TcEhQGACbSUREDCBdsyzVAgBhILE7VkiQCg/K0p0iVP9oR7Xj2xRzvGx+rFvbcPPM4dm8DzInGcx2mXa1QUj7TYOKoYYbbQf51Afyv9kFKzjTmj2wYfN3AOPmPknn9aqIsBh9dBKwDPBRbAwQfIn8gSOHbuzJouggCxBxATaS4hPJBMKOquS8LgEM/EeaJwnnwJCgMR5kVVaj63QjpUjj4LLykLHL92100ztWO+WPsJzlIilBaCckC0cfs688p0HBEgLR08KQISdQMHBf1JxCCwCAGMHnqiqWPBQxiWSZ0kwQREl01UOBwatHuSJEs/LrH9/TPQ4vRGQYiCRd+vhVgp4SLvqw1eay295TU4U+piKMFFJyYAAVNObSq6TOd3OwsHnTOfYCTO3/4DpHH3JdM/iQQzk9sChpAUREsM+L0UElSaP3C7JmnSZI7DII0Aif8BjZck3j/exzh08Cb7gDrPXrTakgvnKozQHPle13FlB2jav2b3FvOmO7XRupC2M+gD+MpVrY3CH0dLtjE2/1vCYuO5Nw3Ai1cbcsTPm4J7v4sNip808vqNj3uBJ+raqCTAAHnmF50ApYASNZ/Dhh/LLvAL15UPnU20NmxhGnR4HjdhanC3Xs6zJLPoQljixea2Zvuu9gMO8Wdk9a9Z2T+B8GpajS9yCAw+BZQ9WQj4wQjfnrIycUzDNneVNrMXVEgAKsbW4HM31LGsyi46l1cNWkVR8fmLLWrPyik0SSO6G1nROmos7h/HW6bwARi6LUpUUVLI5l0udfnJR7jHZeQJsdib469s+0xP3tL6yBIDqK1pqkjnYyllKQqonC4l5aGqvneQ7Hdpwxt9rKIi6c/ZlPi9PeonSV3/BB/HtXkv2aKhWc2d7DOb4mj/lXMrnimazLL9qARSFpo9eQRb4pz0zTzyPzXtkg68Gx7uz5pLOz80EQKSbdihylcbtfaQSKbDcJnolvjVxVC1aarAYOJMPoDjvqHxvxu4w1wJbswDPwT3/Jr63bQkSFyyaxs2s2dI5oPsbpEH3PnbjnASPBdf4mgG95qkU4QhKFMv3KM5byUwVZga20BS/rYZP9noZD2PiF7CxTeGJX3yMbt/PYlZ1/Dk30zHPP3LanMIrHt755d6lhXdgbYp9X2sD5jT1cm6Dj+P5Y6fNuf3PmXaXd4GwIQZo5Dc1WCjXu6p7ymxYeN682H6d3mtyVQha5HaBWIUlecWGp43gQVeLreUDaBDe+iD6DsKV0/h1Sd/+fP53jPLRcde+F98x+qFsRblGjDl7bN7s/8ZJc+iBU/a5ZEg+AdAFiFra57eqyq1BT5tXXvJZHvIrX+QKC5DcAcfZXc7c6jd3DppjbfwZEzQraBSS7rLlX+rj0rYOX/7bd3OG+1Vk9QwfQD6RvpO9FH7d4w++UvxlbfzWY34hG7+X63cBtqmyT0OFaQTimUfPm//+mxdNhxUHY+Qqeplm3ezxlgFkpSA/u/JDSNqnAF+Po0VT3AFFjSMCbk33pDnTxl+hUJ/UKntGRdKX8wquddMN7IFCB8QVetdDjJzM6lkRqaxZPKS7xafxRHNRL42vMo3qCAh+QW2Vb/ojkP7pU3jmYMbDK1McefrB8+b+L+CutfvGHZaL5HIw9iRXQiyFT26VLU6QA+HlDyk9ajSikR44gv6GzvP2QmirkL2UCXhkUw1AgcbnNDbfQmeqay8EUJ76aC7qVXchRYJPL+VTTAuaT2rIxwdWfmNPSMnsnznWMY989bTkkyvgU10DqOjYAYEzHjxUadfsSpBDSKpTlluuY2pCQCc6jbnI4O0WUWlvHLrLGd/qsGDa9MY1tR7wSbVlW4brMfEkTz6AQu6sfkx9Q4OvoYoELTQdkF0KQ5L2X8An+EoA8KG/PWNmcW9F9AMPLr9UQpof20uRKHeZFybIQs77J0IWWMKc9kPnFYy4aGE42ZmBDr5vBsDgkMpD4GDS7YUuu2kqTVkGzXuUMZ9OLvKcUkmefACF3Fn9dF/qU3/2EJ6fjCoStNB0QM7vPoL9U047st9+16lTzpjjM8guREJ2YMGAXR3a5JCBNNmzWDHSIjjF+i6lAhzhAzgcEZzcnMuGuR2BxoGHjxm+4qYqH+MQA3Rm4C0fQP2YD4JTpCbG+rMfZrPHGLPZZIYv+/kM5ox2+FH+5Se3rXZjy5iHGcXY1iYBCnGh5m1yOBCCfX9KJ4kpCzR0ZKQnp95Kg8jqE43mzApUIIKKAHKH7omuue1iKqvWrD/VhMpwxxUPDkBRbAq9irEeweWnnxau72i2rhcPMfG0DAEkUrFDYauAZAcATwV/DGQqFwJBNOCHnvnTC1tt1AEabcqkwTtjE+iDLpctgkYPXsq0+qyznBVOXNpAWlzx4ABU1/mcpEf5jC8iZiqc4l4oo505jkuGTyHBwoafLqsyJimk6aRnAZgUPEoRwKFLEerzwLIquF/yGyuvpGXOtqdksxy+ZBdAAUhvvE3fjHXuDOXsfSu2tvgAVOwzOCqsMFcfM8qm+qL9iVL1J+Ysm5yIDtekj3mK2xPRwyJFkq9WGIgU6TJBcEXzMy19nqKrPO585c0bsPepUX1ou7DRmQymYIkZHJ48UABl+eetp3XKfK1RmlwaLUcXv66JLfQxxEZcnUZUeB0CRBi7JKfAIoQn6pFhoJBsrEhSlTBJsOo0vja8fSn84CUtunytx03DnbfX2PvEHc8ZOSdzWEpMDRRAEsQSTsRYtm6PDasMXC69TKou5dp4GZbO7HNoBfWkgVUyfkpHLyhOr1+XAAJURxD2AFQioPocizcmgDHmTGvKnGpvseDRtzG47/mVT+pnn2m+75alJKSH/QoGBwqgCn5ErJdfG/VTe1Eq/LRdfM9MqMsHSLmuujF6Y9JN6R4mBAt4rVLlsQN7on1fgTgg3SqTk5t0BgJ+stLeofGdCh7ZQI+Z1QDPTZ+9FGd9lykwBYmaLUtJSA/7Fcw0CKAgShUc6GHl1yDxafWZLcVO2uKTehI8l+wYN2u3jEnSgysNkql7GDHvAGAZREVMD7iTRDvPE28EekQl1sNVPN++0pxqbbU222b95Sti4EmIxIYpUYjND2vQIIBs5BKeV14owXPDhxJaKg751ZLvvL1Q6B2/j6fBslkned8nBJOgSy5zyqB3j8HOodCtrAOasEkdo1YpSE63EEizYTrXWm+rj162rrx5ytz4x1HlcfxZ53i07QKymAdIbxBA6V5GdzvS51Op1+Mhm29BJarb3nNHqe8YvWTHBL40V0HEFGjqNRlMkCTbZVzGQrV0x4Cza8Jrbz+CNXxVR612xsyYdean4+/AWL/M7sbPXiYb5jLfguhMxc9xOMXnBjsa+Mc5eEmotTx+SzGfF/3IN8tHgNWLX1B79dtLy1z7wTW4NdMxT3zjlMj4YsJOiuMERQQxgMLxCJGrjZq84lJmoXPuWPsK88zYDnyL4pi55n0bzfZbNhS8SUoFodZI/0h71q0B/WFhg0tL+X7R1JDy2/8IupyX7qly1tUDD8zgA2UnzMzR82acHw7jh8fkE4X6qUTXHxOam8eHx8DbsjT+tUUkt2A/bKa0c62LzMmLtpmxbZeaK2/eaF7ztrx9XoPxG7CqTADlBbsxn0IjYT/NAIHEN1r5cQ3erWa1WYdPIk4DOKw4BFAD7dD9p83z/4OPpB47b84fP286Z2cFSPyUIR/WO8ZPIxJc7AsNYwDIf1oRNF6KJlBh5ruTZnLbxaazZavZdN1mfOfqqoJq08ACaqgoCn3efCaAavjBi3yD1bZRZbWWsyxUHIFmN9E1L9WESm8rUJYu1KtmmTLQCDQLoJquFkAlXWstoXRVy9R6EeDv8KIAUD33l7jUkqqg6c7yd9gDKJ1lkSWptpM1BGuIVIrWkqqg2c56AGWz2LAMOqCVol+VuXB1vQpriPQqWaKUCrn2ACpc6mII6GLwoTBQw2OQPFdIdppnqeIV4lweQGnWh0pLXWpDHgxSd0MupqiRPCeSHV+JHcWJMU0J8dhcmcHiB5BffL9LZTi8skRsmtCdUDmiYXwldhQnNurZiACUksgUkqy00cU3qiwbj42mqAFlWbFtQPWIAJSSyBRSA+sbkAqbkVH5XBUQA/RzRABqPq9VY9qfB1kZyfMib66KN9CTZb6KmoZ4lziAoqQ0HtNIdYVQ53mRN1fChPcnR4/nKaGvIRYCCE/lHkYrXl0xR9LP9GBW15PUi3G66hTGiNSI3UhdvFfGnzI8ca19jxRAqStPEGWYoFUyX7y6Yo4SBuFiP3oGu0L634+FEusfLstBAmhfesTT0pBGG67HhdZCFweYq/qqQwcLVxMx1DcY6Wi+JwA6VEpvzXWX0j0optDnkgkIReJuuY+yKjWbLy5ValTGt34MltFfytEepse1AvXQlyYhN079JEDCka1A7OYaL4hntuoCwZLTNfT75fhOqq19/EQi/rLfnEi/jKUKLRNfTREggLIBuA2PMG6dBMN9Sz8m+b8qbn3luBz3EjsnFpcYVlqMl80Gzz5gR/ZAVHx/Je2Lkjl7paG7cS4fppBl6fbji8spHMVLTKhKE/giicInlzFjDmBc5UF8aUqHR2Pui1aZ4EkMh+brqOxWX2AlT7f5CiSXMWMEUdWNjkiiCDx0K8GTGOY4jkAylj1NialTPbwRobzdSCbDgZAh3cUYBwdVvC3t6d0ED7V7iaaqEN31Smkhs5XnzFRxwU4s+thI9WH4+TJeWn9VKEJ5OfDQZHlO9fDV9NPGJgrriBcfc2Svqz50qieLqESPgb5rkB773y/fGaS1C1C3jdsIwncQ4NkWRtRXoID4AfQH+garR63vBNaXu8URsHEbcviIiXclnesBkC1PdyYZBzvm79Jw2/AtDmF9/SyqWPaj4aXLraYHQJwA49047WV/OA2/S8ULaNSVQf/2Dnk5Gpt+wpgfkL3AxLfSEpAKIDJCYA9Oe9nvaYOITv4C4EJTRpvS0xOVGEGXMxxboWHabdgqwbMntBH2i9PW7d4Kgb/HMRUKjrLPABU6XtvBJrU3qKtBVSVDwz3PnQDP3Xn8pfKAV2bTUPJ9YBvnUiJ5NkvODT9iJR0bMdtQ4rIPi/wAwHOwaLGZl7BQkIpwbAN49ob0gfUZo6EBdWCr6F+xxCGpJusXGMyp/En53DGrzl7k+q3MeS6nnczyJlPWVqM9YPhwJtOgJhgg+RKvym5rcGuI9b0U8dlqCft9K25UAYHDt7L+AsBhv3SrHVILpN2w9HEcu0pbrMHYVNyb0lNjCYtV5D44dj+OysBxC6oNIKeA5wBMBBIfVjhtD5wuvLYEgYiqgm/2Na19yMYhHDx/q2q1Scvk/wN41g4g84VXcwAAAABJRU5ErkJggg==";
6943
6962
 
6944
- // ShufflePipelinesBanner.tsx
6963
+ // components/ShufflePipelinesBanner.tsx
6945
6964
  import { jsx as jsx17, jsxs as jsxs13 } from "react/jsx-runtime";
6946
6965
  function ShufflePipelinesBanner() {
6947
6966
  return /* @__PURE__ */ jsxs13(
@@ -7002,7 +7021,7 @@ function ShufflePipelinesBanner() {
7002
7021
  }
7003
7022
  var ShufflePipelinesBanner_default = ShufflePipelinesBanner;
7004
7023
 
7005
- // AgentUI.tsx
7024
+ // components/AgentUI.tsx
7006
7025
  import { useCallback as useCallback8, useEffect as useEffect11, useMemo as useMemo6, useRef as useRef8, useState as useState12 } from "react";
7007
7026
  import {
7008
7027
  Plus as AddIcon3,
@@ -7600,11 +7619,11 @@ var parseScheduleHint = (input) => {
7600
7619
  return null;
7601
7620
  };
7602
7621
 
7603
- // AgentRunDiagnosisBanner.tsx
7622
+ // components/AgentRunDiagnosisBanner.tsx
7604
7623
  import { Box as Box13, IconButton as IconButton7, Tooltip as Tooltip8, Typography as Typography12 } from "@mui/material";
7605
7624
  import { AlertTriangle, ArrowUpRight, HelpCircle, X } from "lucide-react";
7606
7625
 
7607
- // AgentDiagnosisCtas.tsx
7626
+ // components/AgentDiagnosisCtas.tsx
7608
7627
  import { Box as Box12, Button as Button6, Tooltip as Tooltip7 } from "@mui/material";
7609
7628
  import { ExternalLink, Settings2 } from "lucide-react";
7610
7629
  import { jsx as jsx18, jsxs as jsxs14 } from "react/jsx-runtime";
@@ -7678,7 +7697,7 @@ var AgentDiagnosisCtas = ({ diagnosis, compact = false, tone = "medium" }) => {
7678
7697
  };
7679
7698
  var AgentDiagnosisCtas_default = AgentDiagnosisCtas;
7680
7699
 
7681
- // AgentRunDiagnosisBanner.tsx
7700
+ // components/AgentRunDiagnosisBanner.tsx
7682
7701
  import { useEffect as useEffect10, useMemo as useMemo5, useState as useState11 } from "react";
7683
7702
 
7684
7703
  // agentDiagnosis.ts
@@ -8037,7 +8056,7 @@ var diagnoseOutputWarning = (run) => {
8037
8056
  return null;
8038
8057
  };
8039
8058
 
8040
- // AgentRunDiagnosisBanner.tsx
8059
+ // components/AgentRunDiagnosisBanner.tsx
8041
8060
  import { jsx as jsx19, jsxs as jsxs15 } from "react/jsx-runtime";
8042
8061
  var DISMISS_PREFIX = "agent-diagnosis-dismissed::";
8043
8062
  var readDismissed = (key) => {
@@ -8193,7 +8212,7 @@ var AgentRunDiagnosisBanner = ({ run, sx, onJumpToEvidence, executionId }) => {
8193
8212
  };
8194
8213
  var AgentRunDiagnosisBanner_default = AgentRunDiagnosisBanner;
8195
8214
 
8196
- // AgentUI.tsx
8215
+ // components/AgentUI.tsx
8197
8216
  import { Fragment as Fragment7, jsx as jsx20, jsxs as jsxs16 } from "react/jsx-runtime";
8198
8217
  var normalizeMarkdown = (raw) => {
8199
8218
  if (raw == null) return "";
@@ -11356,7 +11375,7 @@ var AgentUI = ({
11356
11375
  };
11357
11376
  var AgentUI_default = AgentUI;
11358
11377
 
11359
- // AgentRunDrawer.tsx
11378
+ // components/AgentRunDrawer.tsx
11360
11379
  import { useEffect as useEffect12, useRef as useRef9, useState as useState13 } from "react";
11361
11380
  import {
11362
11381
  Box as Box15,
@@ -11561,7 +11580,7 @@ var AgentRunDrawer = ({
11561
11580
  };
11562
11581
  var AgentRunDrawer_default = AgentRunDrawer;
11563
11582
 
11564
- // AgentActivityList.tsx
11583
+ // components/AgentActivityList.tsx
11565
11584
  import { useCallback as useCallback9, useEffect as useEffect13, useRef as useRef10, useState as useState14 } from "react";
11566
11585
  import {
11567
11586
  Box as Box16,
@@ -11742,7 +11761,7 @@ var stopAgentSchedule = async (workflowId, params = {}) => {
11742
11761
  if (!res.ok) throw new Error(`Failed to stop schedule: ${res.statusText}`);
11743
11762
  };
11744
11763
 
11745
- // AgentActivityList.tsx
11764
+ // components/AgentActivityList.tsx
11746
11765
  import { Pencil, StopCircle, AlertTriangle as AlertTriangle2 } from "lucide-react";
11747
11766
  import { Fragment as Fragment8, jsx as jsx22, jsxs as jsxs18 } from "react/jsx-runtime";
11748
11767
  var STATUS_CONFIG = {
@@ -12358,7 +12377,7 @@ var AgentActivityList = ({
12358
12377
  };
12359
12378
  var AgentActivityList_default = AgentActivityList;
12360
12379
 
12361
- // AgentExecutionDrawer.tsx
12380
+ // components/AgentExecutionDrawer.tsx
12362
12381
  import { Box as Box17, Drawer as Drawer4, IconButton as IconButton10, Tooltip as Tooltip12, Typography as Typography16 } from "@mui/material";
12363
12382
  import {
12364
12383
  X as CloseIcon7,
@@ -12538,11 +12557,23 @@ var AgentExecutionDrawer = ({
12538
12557
  };
12539
12558
  var AgentExecutionDrawer_default = AgentExecutionDrawer;
12540
12559
 
12541
- // AgentsView.tsx
12542
- import { useCallback as useCallback10, useState as useState15 } from "react";
12560
+ // views/AgentsView.tsx
12561
+ import { useCallback as useCallback10, useMemo as useMemo7, useState as useState15 } from "react";
12543
12562
  import { Box as Box18, Stack, Typography as Typography17 } from "@mui/material";
12544
12563
  import { jsx as jsx24, jsxs as jsxs20 } from "react/jsx-runtime";
12545
- var AgentsView = ({ onSchedule, maxWidth = 820, onChooseLLM, hideChooseLLM, globalUrl, isLoaded, isLoggedIn, userdata, serverside }) => {
12564
+ var AgentsView = ({
12565
+ onSchedule,
12566
+ maxWidth = 820,
12567
+ onChooseLLM,
12568
+ hideChooseLLM,
12569
+ localLLMSlot,
12570
+ permissionsSlot,
12571
+ globalUrl,
12572
+ isLoaded,
12573
+ isLoggedIn,
12574
+ userdata,
12575
+ serverside
12576
+ }) => {
12546
12577
  useSyncHostBaseUrl(globalUrl);
12547
12578
  const [selectedRun, setSelectedRun] = useState15(null);
12548
12579
  const [agentView, setAgentView] = useState15("start");
@@ -12552,6 +12583,33 @@ var AgentsView = ({ onSchedule, maxWidth = 820, onChooseLLM, hideChooseLLM, glob
12552
12583
  key: 0
12553
12584
  });
12554
12585
  const [editing, setEditing] = useState15(null);
12586
+ const [builtInDrawer, setBuiltInDrawer] = useState15({
12587
+ open: false,
12588
+ tab: "localLLM"
12589
+ });
12590
+ const effectiveLocalLLMSlot = useMemo7(
12591
+ () => localLLMSlot ?? /* @__PURE__ */ jsxs20(Box18, { sx: { p: 3, color: "hsl(var(--muted-foreground))", fontSize: "0.85rem", lineHeight: 1.6 }, children: [
12592
+ /* @__PURE__ */ jsx24(Typography17, { sx: { fontSize: "0.95rem", fontWeight: 600, color: "hsl(var(--foreground))", mb: 1 }, children: "Local LLM not configured" }),
12593
+ "This host hasn't wired a Local LLM picker yet. Pass an",
12594
+ " ",
12595
+ /* @__PURE__ */ jsx24("code", { style: { fontFamily: "monospace" }, children: "onChooseLLM" }),
12596
+ " handler or a",
12597
+ " ",
12598
+ /* @__PURE__ */ jsx24("code", { style: { fontFamily: "monospace" }, children: "localLLMSlot" }),
12599
+ " to",
12600
+ " ",
12601
+ /* @__PURE__ */ jsx24("code", { style: { fontFamily: "monospace" }, children: "<AgentsView />" }),
12602
+ " to render your own configuration UI here."
12603
+ ] }),
12604
+ [localLLMSlot]
12605
+ );
12606
+ const handleChooseLLM = useCallback10(() => {
12607
+ if (onChooseLLM) {
12608
+ onChooseLLM();
12609
+ return;
12610
+ }
12611
+ setBuiltInDrawer({ open: true, tab: "localLLM" });
12612
+ }, [onChooseLLM]);
12555
12613
  const handleEditWorkflow = useCallback10(
12556
12614
  ({ workflowId, name, prompt, apps }) => {
12557
12615
  setEditing({ workflowId, name });
@@ -12632,7 +12690,7 @@ var AgentsView = ({ onSchedule, maxWidth = 820, onChooseLLM, hideChooseLLM, glob
12632
12690
  apiBaseUrl: globalUrl,
12633
12691
  onViewChange: setAgentView,
12634
12692
  onSchedule,
12635
- onChooseLLM,
12693
+ onChooseLLM: handleChooseLLM,
12636
12694
  hideChooseLLM,
12637
12695
  defaultInput: prefill.input,
12638
12696
  defaultApps: prefill.apps.length > 0 ? prefill.apps : void 0,
@@ -12662,13 +12720,25 @@ var AgentsView = ({ onSchedule, maxWidth = 820, onChooseLLM, hideChooseLLM, glob
12662
12720
  apiBaseUrl: globalUrl,
12663
12721
  onSchedule
12664
12722
  }
12723
+ ),
12724
+ /* @__PURE__ */ jsx24(
12725
+ AgentRunDrawer_default,
12726
+ {
12727
+ open: builtInDrawer.open,
12728
+ onClose: () => setBuiltInDrawer((s) => ({ ...s, open: false })),
12729
+ initialTab: builtInDrawer.tab,
12730
+ globalUrl,
12731
+ localLLMSlot: effectiveLocalLLMSlot,
12732
+ permissionsSlot,
12733
+ agentUIProps: { onSchedule, apiBaseUrl: globalUrl }
12734
+ }
12665
12735
  )
12666
12736
  ] });
12667
12737
  };
12668
12738
  var AgentsView_default = AgentsView;
12669
12739
 
12670
12740
  // useAppLookup.ts
12671
- import { useEffect as useEffect14, useMemo as useMemo7, useState as useState16 } from "react";
12741
+ import { useEffect as useEffect14, useMemo as useMemo8, useState as useState16 } from "react";
12672
12742
  var norm3 = (s) => s.toLowerCase().replace(/[\s_\-]+/g, "_");
12673
12743
  function useAppLookup(appName) {
12674
12744
  const [loading, setLoading] = useState16(false);
@@ -12761,13 +12831,13 @@ function useAppLookup(appName) {
12761
12831
  setLoading(false);
12762
12832
  })();
12763
12833
  }, [appName]);
12764
- const matchingEntries = useMemo7(() => {
12834
+ const matchingEntries = useMemo8(() => {
12765
12835
  if (!appName) return [];
12766
12836
  return authenticatedApps.filter(
12767
12837
  (auth) => auth.app?.name && norm3(auth.app.name) === norm3(appName)
12768
12838
  );
12769
12839
  }, [appName, authenticatedApps]);
12770
- const image = useMemo7(() => {
12840
+ const image = useMemo8(() => {
12771
12841
  if (info?.image) return info.image;
12772
12842
  for (const entry of matchingEntries) {
12773
12843
  const img = entry.app?.large_image || entry.large_image;
@@ -12775,7 +12845,7 @@ function useAppLookup(appName) {
12775
12845
  }
12776
12846
  return "";
12777
12847
  }, [info, matchingEntries]);
12778
- const algoliaApp = useMemo7(() => {
12848
+ const algoliaApp = useMemo8(() => {
12779
12849
  if (!appName) return null;
12780
12850
  return {
12781
12851
  objectID: algoliaId || appName,
@@ -12806,7 +12876,7 @@ function useAppLookup(appName) {
12806
12876
  };
12807
12877
  }
12808
12878
 
12809
- // UsageBar.tsx
12879
+ // components/UsageBar.tsx
12810
12880
  import { Box as Box19, Typography as Typography18, Tooltip as Tooltip13 } from "@mui/material";
12811
12881
  import { jsx as jsx25, jsxs as jsxs21 } from "react/jsx-runtime";
12812
12882
  var fmt = (n) => n.toLocaleString();
@@ -12887,10 +12957,15 @@ var UsageBar = ({
12887
12957
  };
12888
12958
 
12889
12959
  // index.ts
12960
+ var resolveMode = (theme, colorMode) => {
12961
+ if (theme === "light" || theme === "dark") return theme;
12962
+ if (theme === "system") return "auto";
12963
+ return colorMode ?? "auto";
12964
+ };
12890
12965
  var withMcpTheme = (Inner, displayName) => {
12891
- const Wrapped = ({ colorMode, ...rest }) => React5.createElement(
12966
+ const Wrapped = ({ theme, colorMode, ...rest }) => React5.createElement(
12892
12967
  ShuffleMcpThemeProvider,
12893
- { mode: colorMode },
12968
+ { mode: resolveMode(theme, colorMode) },
12894
12969
  React5.createElement(Inner, { ...rest })
12895
12970
  );
12896
12971
  Wrapped.displayName = `ShuffleMCPs(${displayName})`;
@@ -12898,9 +12973,9 @@ var withMcpTheme = (Inner, displayName) => {
12898
12973
  };
12899
12974
  var withMcpThemeRef = (Inner, displayName) => {
12900
12975
  const Wrapped = React5.forwardRef(
12901
- ({ colorMode, ...rest }, ref) => React5.createElement(
12976
+ ({ theme, colorMode, ...rest }, ref) => React5.createElement(
12902
12977
  ShuffleMcpThemeProvider,
12903
- { mode: colorMode },
12978
+ { mode: resolveMode(theme, colorMode) },
12904
12979
  React5.createElement(Inner, { ...rest, ref })
12905
12980
  )
12906
12981
  );