@shuffleio/shuffle-mcps 0.0.20 → 0.0.22

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,26 +19,45 @@ 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
- import { jsx } from "react/jsx-runtime";
28
+ import { jsx, jsxs } from "react/jsx-runtime";
29
29
  var readHtmlDarkClass = () => {
30
30
  if (typeof document === "undefined") return false;
31
31
  return document.documentElement.classList.contains("dark");
32
32
  };
33
- var useHtmlDarkClass = (enabled) => {
33
+ var readAncestorDark = (anchor) => {
34
+ if (!anchor || typeof document === "undefined") return null;
35
+ const start = anchor.parentElement;
36
+ if (!start) return null;
37
+ const scoped = start.closest('[data-shuffle-mode="dark"], [data-shuffle-mode="light"]');
38
+ if (scoped) return scoped.getAttribute("data-shuffle-mode") === "dark";
39
+ const darkAncestor = start.closest(".dark");
40
+ if (darkAncestor) return true;
41
+ return null;
42
+ };
43
+ var useAutoDarkClass = (enabled, anchorRef) => {
34
44
  const [isDark, setIsDark] = React.useState(() => enabled ? readHtmlDarkClass() : false);
35
- React.useEffect(() => {
45
+ React.useLayoutEffect(() => {
36
46
  if (!enabled || typeof document === "undefined") return;
37
- setIsDark(readHtmlDarkClass());
38
- const observer = new MutationObserver(() => setIsDark(readHtmlDarkClass()));
47
+ const recompute = () => {
48
+ const ancestor = readAncestorDark(anchorRef.current);
49
+ setIsDark(ancestor !== null ? ancestor : readHtmlDarkClass());
50
+ };
51
+ recompute();
52
+ const observer = new MutationObserver(recompute);
39
53
  observer.observe(document.documentElement, { attributes: true, attributeFilter: ["class"] });
54
+ let node = anchorRef.current?.parentElement ?? null;
55
+ while (node) {
56
+ observer.observe(node, { attributes: true, attributeFilter: ["class", "data-shuffle-mode"] });
57
+ node = node.parentElement;
58
+ }
40
59
  return () => observer.disconnect();
41
- }, [enabled]);
60
+ }, [enabled, anchorRef]);
42
61
  return isDark;
43
62
  };
44
63
  var ShuffleMcpThemeContext = React.createContext(null);
@@ -125,10 +144,12 @@ var ShuffleMcpThemeProvider = ({
125
144
  }) => {
126
145
  const parent = useMuiTheme();
127
146
  const parentCtx = useShuffleMcpTheme();
128
- const htmlIsDark = useHtmlDarkClass(mode === "auto");
129
- const effectiveDark = mode === "auto" ? htmlIsDark : mode === "dark";
147
+ const anchorRef = React.useRef(null);
148
+ const autoIsDark = useAutoDarkClass(mode === "auto", anchorRef);
149
+ const effectiveDark = mode === "auto" ? autoIsDark : mode === "dark";
130
150
  const sameAsParent = parentCtx !== null && parentCtx.isDark === effectiveDark;
131
151
  const scopeClassName = effectiveDark ? "shuffle-mcp-scope dark" : "shuffle-mcp-scope";
152
+ const resolvedModeAttr = effectiveDark ? "dark" : "light";
132
153
  const merged = React.useMemo(
133
154
  () => createTheme({
134
155
  ...parent,
@@ -148,18 +169,24 @@ var ShuffleMcpThemeProvider = ({
148
169
  [mode, effectiveDark, scopeClassName]
149
170
  );
150
171
  if (sameAsParent) {
151
- return /* @__PURE__ */ jsx(ShuffleMcpThemeContext.Provider, { value: ctxValue, children });
172
+ return /* @__PURE__ */ jsxs(ShuffleMcpThemeContext.Provider, { value: ctxValue, children: [
173
+ /* @__PURE__ */ jsx("span", { ref: anchorRef, style: { display: "none" }, "aria-hidden": true }),
174
+ children
175
+ ] });
152
176
  }
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 }) }) });
177
+ return /* @__PURE__ */ jsx(ShuffleMcpThemeContext.Provider, { value: ctxValue, children: /* @__PURE__ */ jsx(ThemeProvider, { theme: merged, children: /* @__PURE__ */ jsxs("div", { className: scopeClassName, "data-shuffle-mode": resolvedModeAttr, "data-shuffle-mcp-root": true, children: [
178
+ /* @__PURE__ */ jsx("span", { ref: anchorRef, style: { display: "none" }, "aria-hidden": true }),
179
+ children
180
+ ] }) }) });
154
181
  };
155
182
 
156
- // ShuffleMCP.tsx
183
+ // views/ShuffleMCP.tsx
157
184
  import React3, { useState as useState9, useEffect as useEffect8, useRef as useRef7, useCallback as useCallback7, useMemo as useMemo4, useImperativeHandle } from "react";
158
185
  import { algoliasearch } from "algoliasearch";
159
186
  import { Tooltip as Tooltip4 } from "@mui/material";
160
187
 
161
- // AppDetailDrawer.tsx
162
- import { useState as useState8, useEffect as useEffect6, useMemo as useMemo3, useRef as useRef5 } from "react";
188
+ // views/AppDetailDrawer.tsx
189
+ import { useState as useState8, useEffect as useEffect7, useMemo as useMemo3, useRef as useRef5 } from "react";
163
190
 
164
191
  // toast.ts
165
192
  var defaultImpl = (arg, opts) => {
@@ -183,7 +210,7 @@ base.info = (msg, opts) => _impl({ title: msg, description: opts?.description, v
183
210
  base.warning = (msg, opts) => _impl({ title: msg, description: opts?.description, variant: "warning" }, opts);
184
211
  var toast = base;
185
212
 
186
- // AppDetailDrawer.tsx
213
+ // views/AppDetailDrawer.tsx
187
214
  import {
188
215
  Download,
189
216
  Forward,
@@ -623,7 +650,7 @@ var DATASTORE_CATEGORIES = {
623
650
  LEGACY_CASES: "shuffle-security_cases"
624
651
  };
625
652
 
626
- // AppDetailDrawer.tsx
653
+ // views/AppDetailDrawer.tsx
627
654
  import {
628
655
  Box as Box8,
629
656
  Typography as Typography8,
@@ -638,7 +665,7 @@ import { motion as motion6 } from "framer-motion";
638
665
  // useAppAuth.ts
639
666
  import { useState as useState3, useCallback as useCallback3, useEffect as useEffect2 } from "react";
640
667
 
641
- // IntegrationStatus.tsx
668
+ // components/IntegrationStatus.tsx
642
669
  import { useState as useState2, useEffect, useCallback as useCallback2 } from "react";
643
670
  import {
644
671
  Plus as AddIcon
@@ -922,8 +949,8 @@ function extractValidatedIngestionApps(authApiResponse, workflowAppNames) {
922
949
  return apps;
923
950
  }
924
951
 
925
- // IntegrationStatus.tsx
926
- import { Fragment, jsx as jsx3, jsxs } from "react/jsx-runtime";
952
+ // components/IntegrationStatus.tsx
953
+ import { Fragment, jsx as jsx3, jsxs as jsxs2 } from "react/jsx-runtime";
927
954
  var ONBOARDING_CONFIG_CATEGORY = "shuffle-security_onboarding";
928
955
  var SELECTED_TOOLS_KEY = "selected_tools";
929
956
  var PRIORITY_CATEGORY_PATTERNS = {
@@ -1084,7 +1111,7 @@ var IntegrationStatus = ({ collapsed, filterApps, onAddClick, iconSize = 26, onD
1084
1111
  return integration.hasValidAuth ? "hsl(var(--severity-low))" : "hsl(var(--severity-medium))";
1085
1112
  };
1086
1113
  const sz = iconSize;
1087
- return /* @__PURE__ */ jsxs(Box, { sx: { px: collapsed ? 0 : 1, py: 1 }, children: [
1114
+ return /* @__PURE__ */ jsxs2(Box, { sx: { px: collapsed ? 0 : 1, py: 1 }, children: [
1088
1115
  !collapsed && !hideHeader && /* @__PURE__ */ jsx3(
1089
1116
  Typography,
1090
1117
  {
@@ -1108,20 +1135,20 @@ var IntegrationStatus = ({ collapsed, filterApps, onAddClick, iconSize = 26, onD
1108
1135
  px: collapsed ? 0 : 1,
1109
1136
  maxHeight: expanded ? "none" : 80,
1110
1137
  overflow: "hidden"
1111
- }, children: loading ? /* @__PURE__ */ jsx3(CircularProgress, { size: 20, sx: { color: "hsl(var(--muted-foreground))" } }) : /* @__PURE__ */ jsxs(Fragment, { children: [
1138
+ }, children: loading ? /* @__PURE__ */ jsx3(CircularProgress, { size: 20, sx: { color: "hsl(var(--muted-foreground))" } }) : /* @__PURE__ */ jsxs2(Fragment, { children: [
1112
1139
  integrations.slice(0, displayLimit).map((integration) => {
1113
1140
  const isDisabled = disabledApps?.has(integration.name) ?? false;
1114
1141
  const isHovered = hoveredId === integration.id;
1115
1142
  return /* @__PURE__ */ jsx3(
1116
1143
  Tooltip,
1117
1144
  {
1118
- title: onDisable && isHovered ? "" : /* @__PURE__ */ jsxs(Box, { sx: { textAlign: "left", minWidth: 160, maxWidth: 320, p: 0.5 }, children: [
1119
- /* @__PURE__ */ jsxs(Typography, { sx: { fontWeight: 600, fontSize: "0.85rem", color: "hsl(var(--foreground))", textTransform: "capitalize" }, children: [
1145
+ title: onDisable && isHovered ? "" : /* @__PURE__ */ jsxs2(Box, { sx: { textAlign: "left", minWidth: 160, maxWidth: 320, p: 0.5 }, children: [
1146
+ /* @__PURE__ */ jsxs2(Typography, { sx: { fontWeight: 600, fontSize: "0.85rem", color: "hsl(var(--foreground))", textTransform: "capitalize" }, children: [
1120
1147
  integration.name.replace(/_/g, " "),
1121
1148
  isDisabled && /* @__PURE__ */ jsx3(Typography, { component: "span", sx: { ml: 1, fontSize: "0.7rem", color: "hsl(var(--muted-foreground))" }, children: "(disabled)" })
1122
1149
  ] }),
1123
1150
  /* @__PURE__ */ jsx3(Typography, { sx: { fontSize: "0.7rem", color: "hsl(var(--muted-foreground))", mb: 1, textTransform: "capitalize" }, children: integration.category }),
1124
- /* @__PURE__ */ jsx3(Box, { sx: { display: "flex", flexDirection: "column", gap: 0.5 }, children: integration.authInstances.map((instance, idx) => /* @__PURE__ */ jsxs(Box, { sx: { display: "flex", alignItems: "center", gap: 0.75, minWidth: 0 }, children: [
1151
+ /* @__PURE__ */ jsx3(Box, { sx: { display: "flex", flexDirection: "column", gap: 0.5 }, children: integration.authInstances.map((instance, idx) => /* @__PURE__ */ jsxs2(Box, { sx: { display: "flex", alignItems: "center", gap: 0.75, minWidth: 0 }, children: [
1125
1152
  /* @__PURE__ */ jsx3(
1126
1153
  Box,
1127
1154
  {
@@ -1140,7 +1167,7 @@ var IntegrationStatus = ({ collapsed, filterApps, onAddClick, iconSize = 26, onD
1140
1167
  ] }),
1141
1168
  placement: "bottom",
1142
1169
  arrow: true,
1143
- children: /* @__PURE__ */ jsxs(
1170
+ children: /* @__PURE__ */ jsxs2(
1144
1171
  Box,
1145
1172
  {
1146
1173
  onMouseEnter: () => onDisable && setHoveredId(integration.id),
@@ -1248,7 +1275,7 @@ var IntegrationStatus = ({ collapsed, filterApps, onAddClick, iconSize = 26, onD
1248
1275
  integration.id
1249
1276
  );
1250
1277
  }),
1251
- hasMore && !expanded && /* @__PURE__ */ jsx3(Tooltip, { title: `Show all ${integrations.length} integrations`, placement: "bottom", children: /* @__PURE__ */ jsxs(
1278
+ hasMore && !expanded && /* @__PURE__ */ jsx3(Tooltip, { title: `Show all ${integrations.length} integrations`, placement: "bottom", children: /* @__PURE__ */ jsxs2(
1252
1279
  Avatar,
1253
1280
  {
1254
1281
  onClick: () => setExpanded(true),
@@ -1572,14 +1599,14 @@ function useAppAuth() {
1572
1599
  };
1573
1600
  }
1574
1601
 
1575
- // AppTitleHeader.tsx
1602
+ // components/AppTitleHeader.tsx
1576
1603
  import { Box as Box2, Typography as Typography2, Avatar as Avatar2, Chip, Button } from "@mui/material";
1577
1604
  import {
1578
1605
  CheckCircle2 as CheckCircleIcon,
1579
1606
  AlertCircle as ErrorOutlineIcon
1580
1607
  } from "lucide-react";
1581
1608
  import { motion } from "framer-motion";
1582
- import { jsx as jsx4, jsxs as jsxs2 } from "react/jsx-runtime";
1609
+ import { jsx as jsx4, jsxs as jsxs3 } from "react/jsx-runtime";
1583
1610
  function AppTitleHeader({
1584
1611
  name,
1585
1612
  image,
@@ -1592,7 +1619,7 @@ function AppTitleHeader({
1592
1619
  onActivateToggle,
1593
1620
  onAdd
1594
1621
  }) {
1595
- return /* @__PURE__ */ jsx4(motion.div, { initial: { opacity: 0, y: 12 }, animate: { opacity: 1, y: 0 }, transition: { duration: 0.3 }, children: /* @__PURE__ */ jsxs2(
1622
+ return /* @__PURE__ */ jsx4(motion.div, { initial: { opacity: 0, y: 12 }, animate: { opacity: 1, y: 0 }, transition: { duration: 0.3 }, children: /* @__PURE__ */ jsxs3(
1596
1623
  Box2,
1597
1624
  {
1598
1625
  sx: {
@@ -1624,8 +1651,8 @@ function AppTitleHeader({
1624
1651
  children: /* @__PURE__ */ jsx4(Typography2, { sx: { fontSize: "1.2rem", fontWeight: 700 }, children: name.charAt(0).toUpperCase() })
1625
1652
  }
1626
1653
  ),
1627
- /* @__PURE__ */ jsxs2(Box2, { sx: { flex: 1, minWidth: 0 }, children: [
1628
- /* @__PURE__ */ jsxs2(Box2, { sx: { display: "flex", alignItems: "center", gap: 1, mb: 0.5 }, children: [
1654
+ /* @__PURE__ */ jsxs3(Box2, { sx: { flex: 1, minWidth: 0 }, children: [
1655
+ /* @__PURE__ */ jsxs3(Box2, { sx: { display: "flex", alignItems: "center", gap: 1, mb: 0.5 }, children: [
1629
1656
  /* @__PURE__ */ jsx4(Typography2, { sx: { color: "hsl(var(--foreground))", fontWeight: 700, fontSize: "1rem", textTransform: "capitalize" }, children: name }),
1630
1657
  isAuthenticated && hasValidAuth && /* @__PURE__ */ jsx4(
1631
1658
  Chip,
@@ -1703,12 +1730,12 @@ function AppTitleHeader({
1703
1730
  ) });
1704
1731
  }
1705
1732
 
1706
- // AppAuthSection.tsx
1733
+ // components/AppAuthSection.tsx
1707
1734
  import { Box as Box4, Typography as Typography4 } from "@mui/material";
1708
1735
  import { motion as motion3 } from "framer-motion";
1709
1736
 
1710
- // AppAuthConfig.tsx
1711
- import { useState as useState5, useEffect as useEffect4, useRef as useRef2 } from "react";
1737
+ // components/AppAuthConfig.tsx
1738
+ import { useState as useState5, useEffect as useEffect5, useRef as useRef2 } from "react";
1712
1739
  import {
1713
1740
  CheckCircle2 as CheckCircleIcon2,
1714
1741
  X as CloseIcon,
@@ -1745,7 +1772,7 @@ import {
1745
1772
  } from "@mui/material";
1746
1773
  import { motion as motion2 } from "framer-motion";
1747
1774
 
1748
- // AppFallbackIcon.tsx
1775
+ // components/AppFallbackIcon.tsx
1749
1776
  import { useEffect as useEffect3, useRef, useState as useState4 } from "react";
1750
1777
  import { jsx as jsx5 } from "react/jsx-runtime";
1751
1778
  var norm = (s) => s.toLowerCase().replace(/[\s_\-]+/g, "_");
@@ -1891,10 +1918,19 @@ var AppFallbackIcon = ({
1891
1918
  );
1892
1919
  };
1893
1920
 
1894
- // AppAuthConfig.tsx
1921
+ // useSyncHostBaseUrl.ts
1922
+ import { useEffect as useEffect4 } from "react";
1923
+ var useSyncHostBaseUrl = (globalUrl) => {
1924
+ useEffect4(() => {
1925
+ if (!globalUrl) return;
1926
+ setHostBaseUrl(globalUrl);
1927
+ }, [globalUrl]);
1928
+ };
1929
+
1930
+ // components/AppAuthConfig.tsx
1895
1931
  import ReactMarkdown from "react-markdown";
1896
1932
  import remarkGfm from "remark-gfm";
1897
- import { Fragment as Fragment2, jsx as jsx6, jsxs as jsxs3 } from "react/jsx-runtime";
1933
+ import { Fragment as Fragment2, jsx as jsx6, jsxs as jsxs4 } from "react/jsx-runtime";
1898
1934
  var isOAuth2Type = (type) => {
1899
1935
  if (!type) return false;
1900
1936
  const lowerType = type.toLowerCase();
@@ -1947,8 +1983,14 @@ var AppAuthCard = ({
1947
1983
  hideStatusChips,
1948
1984
  hideDocsLink,
1949
1985
  hideUrlFields,
1950
- borderless
1986
+ borderless,
1987
+ globalUrl,
1988
+ userdata,
1989
+ isLoaded,
1990
+ isLoggedIn,
1991
+ serverside
1951
1992
  }) => {
1993
+ useSyncHostBaseUrl(globalUrl);
1952
1994
  const getBestDefaultAuth = (entries) => {
1953
1995
  if (entries.length === 0) return ADD_NEW_AUTH;
1954
1996
  const validatedEntry = entries.find((e) => e.validation?.valid === true);
@@ -1993,7 +2035,7 @@ var AppAuthCard = ({
1993
2035
  const [wasPreValidatedPerAuth, setWasPreValidatedPerAuth] = useState5({});
1994
2036
  const prevEntryCountRef = useRef2(apiAuthEntries.length);
1995
2037
  const autoTestFiredRef = useRef2(null);
1996
- useEffect4(() => {
2038
+ useEffect5(() => {
1997
2039
  if (apiAuthEntries.length > 0) {
1998
2040
  if (apiAuthEntries.length > prevEntryCountRef.current) {
1999
2041
  const sorted = [...apiAuthEntries].sort((a, b) => {
@@ -2022,7 +2064,7 @@ var AppAuthCard = ({
2022
2064
  }
2023
2065
  prevEntryCountRef.current = apiAuthEntries.length;
2024
2066
  }, [apiAuthEntries, userHasSelected]);
2025
- useEffect4(() => {
2067
+ useEffect5(() => {
2026
2068
  if (wasPreValidatedPerAuth[selectedAuthId] === void 0) {
2027
2069
  const currentAuth = apiAuthEntries.find(
2028
2070
  (auth2) => (auth2.id || auth2.label || "") === selectedAuthId
@@ -2044,7 +2086,7 @@ var AppAuthCard = ({
2044
2086
  };
2045
2087
  const localTestMessages = testMessagesPerAuth[selectedAuthId] || {};
2046
2088
  const wasPreValidated = wasPreValidatedPerAuth[selectedAuthId] || false;
2047
- useEffect4(() => {
2089
+ useEffect5(() => {
2048
2090
  if (!testingAuthId) return;
2049
2091
  if (authState.status === "testing") {
2050
2092
  setTestStatusForAuth(testingAuthId, "testing");
@@ -2105,12 +2147,12 @@ var AppAuthCard = ({
2105
2147
  const [saveSuccess, setSaveSuccess] = useState5(null);
2106
2148
  const [error, setError] = useState5(null);
2107
2149
  const [appConfig, setAppConfig] = useState5(null);
2108
- useEffect4(() => {
2150
+ useEffect5(() => {
2109
2151
  if (isExpanded && onRefreshAuth) {
2110
2152
  onRefreshAuth();
2111
2153
  }
2112
2154
  }, [isExpanded]);
2113
- useEffect4(() => {
2155
+ useEffect5(() => {
2114
2156
  const fetchAppConfig = async () => {
2115
2157
  if (!isExpanded || appConfig) return;
2116
2158
  setLoading(true);
@@ -2144,12 +2186,12 @@ var AppAuthCard = ({
2144
2186
  const auth = appConfig?.authentication;
2145
2187
  const isOAuth2 = isOAuth2Type(auth?.type);
2146
2188
  const [selectedScopes, setSelectedScopes] = useState5([]);
2147
- useEffect4(() => {
2189
+ useEffect5(() => {
2148
2190
  if (auth?.scope) {
2149
2191
  setSelectedScopes(auth.scope);
2150
2192
  }
2151
2193
  }, [auth?.scope]);
2152
- useEffect4(() => {
2194
+ useEffect5(() => {
2153
2195
  if (disableUrlPrefill) return;
2154
2196
  if (!auth?.parameters || auth.parameters.length === 0) return;
2155
2197
  const urlDefaults = {};
@@ -2166,7 +2208,7 @@ var AppAuthCard = ({
2166
2208
  setLocalCredentials((prev) => ({ ...urlDefaults, ...prev }));
2167
2209
  }
2168
2210
  }, [auth?.parameters, disableUrlPrefill]);
2169
- useEffect4(() => {
2211
+ useEffect5(() => {
2170
2212
  const incoming = authState.credentials || {};
2171
2213
  setLocalCredentials((prev) => {
2172
2214
  let changed = false;
@@ -2256,10 +2298,10 @@ var AppAuthCard = ({
2256
2298
  if (!auth || !isOAuth2) return null;
2257
2299
  const availableScopes = auth.scope || [];
2258
2300
  const hasManualCredentials = !!localCredentials["client_id"]?.trim() && !!localCredentials["client_secret"]?.trim();
2259
- return /* @__PURE__ */ jsxs3(Box3, { sx: { display: "flex", flexDirection: "column", gap: 3 }, children: [
2260
- /* @__PURE__ */ jsxs3(Fragment2, { children: [
2261
- /* @__PURE__ */ jsx6(Collapse, { in: !hasManualCredentials, children: /* @__PURE__ */ jsxs3(Box3, { sx: { display: "flex", flexDirection: "column", gap: 3 }, children: [
2262
- /* @__PURE__ */ jsxs3(
2301
+ return /* @__PURE__ */ jsxs4(Box3, { sx: { display: "flex", flexDirection: "column", gap: 3 }, children: [
2302
+ /* @__PURE__ */ jsxs4(Fragment2, { children: [
2303
+ /* @__PURE__ */ jsx6(Collapse, { in: !hasManualCredentials, children: /* @__PURE__ */ jsxs4(Box3, { sx: { display: "flex", flexDirection: "column", gap: 3 }, children: [
2304
+ /* @__PURE__ */ jsxs4(
2263
2305
  Button2,
2264
2306
  {
2265
2307
  variant: "outlined",
@@ -2325,7 +2367,7 @@ var AppAuthCard = ({
2325
2367
  ]
2326
2368
  }
2327
2369
  ),
2328
- /* @__PURE__ */ jsxs3(Box3, { sx: { display: "flex", alignItems: "center", gap: 2 }, children: [
2370
+ /* @__PURE__ */ jsxs4(Box3, { sx: { display: "flex", alignItems: "center", gap: 2 }, children: [
2329
2371
  /* @__PURE__ */ jsx6(Divider, { sx: { flex: 1, borderColor: "hsl(var(--border))" } }),
2330
2372
  /* @__PURE__ */ jsx6(Typography3, { sx: { color: "hsl(var(--muted-foreground))", fontSize: "0.875rem" }, children: "OR configure manually" }),
2331
2373
  /* @__PURE__ */ jsx6(Divider, { sx: { flex: 1, borderColor: "hsl(var(--border))" } })
@@ -2353,8 +2395,8 @@ var AppAuthCard = ({
2353
2395
  }
2354
2396
  )
2355
2397
  ] }),
2356
- /* @__PURE__ */ jsxs3(Box3, { sx: { display: "flex", flexDirection: "column", gap: 2 }, children: [
2357
- /* @__PURE__ */ jsxs3(Typography3, { variant: "body2", sx: { color: "hsl(var(--muted-foreground))" }, children: [
2398
+ /* @__PURE__ */ jsxs4(Box3, { sx: { display: "flex", flexDirection: "column", gap: 2 }, children: [
2399
+ /* @__PURE__ */ jsxs4(Typography3, { variant: "body2", sx: { color: "hsl(var(--muted-foreground))" }, children: [
2358
2400
  "Redirect URL: ",
2359
2401
  /* @__PURE__ */ jsx6(Typography3, { component: "span", sx: { color: "hsl(var(--primary))", fontWeight: 600 }, children: auth.redirect_uri || "https://shuffler.io/set_authentication" })
2360
2402
  ] }),
@@ -2437,7 +2479,7 @@ var AppAuthCard = ({
2437
2479
  }
2438
2480
  }
2439
2481
  },
2440
- children: availableScopes.map((scope) => /* @__PURE__ */ jsxs3(MenuItem, { value: scope, sx: { color: "hsl(var(--foreground))" }, children: [
2482
+ children: availableScopes.map((scope) => /* @__PURE__ */ jsxs4(MenuItem, { value: scope, sx: { color: "hsl(var(--foreground))" }, children: [
2441
2483
  /* @__PURE__ */ jsx6(
2442
2484
  Checkbox,
2443
2485
  {
@@ -2466,7 +2508,7 @@ var AppAuthCard = ({
2466
2508
  return /* @__PURE__ */ jsx6(
2467
2509
  TextField,
2468
2510
  {
2469
- label: /* @__PURE__ */ jsxs3(Box3, { sx: { display: "flex", alignItems: "center", gap: 1 }, children: [
2511
+ label: /* @__PURE__ */ jsxs4(Box3, { sx: { display: "flex", alignItems: "center", gap: 1 }, children: [
2470
2512
  param.name,
2471
2513
  param.required && /* @__PURE__ */ jsx6(Typography3, { component: "span", sx: { color: "hsl(var(--destructive))", fontSize: "0.8rem" }, children: "*" })
2472
2514
  ] }),
@@ -2577,14 +2619,14 @@ var AppAuthCard = ({
2577
2619
  [key]: error2 || ""
2578
2620
  }));
2579
2621
  };
2580
- return /* @__PURE__ */ jsxs3(motion2.div, { variants: itemVariants, style: { width: "100%", maxWidth: "100%" }, children: [
2581
- /* @__PURE__ */ jsxs3(
2622
+ return /* @__PURE__ */ jsxs4(motion2.div, { variants: itemVariants, style: { width: "100%", maxWidth: "100%" }, children: [
2623
+ /* @__PURE__ */ jsxs4(
2582
2624
  Card,
2583
2625
  {
2584
2626
  sx: {
2585
2627
  background: "transparent",
2586
- border: borderless ? "none" : "1px solid",
2587
- borderColor: borderless ? "transparent" : isTested ? "hsl(var(--severity-low) / 0.5)" : authState.status === "error" ? "hsl(var(--destructive) / 0.3)" : "hsl(var(--border))",
2628
+ border: borderless ? "none" : "2px solid",
2629
+ borderColor: borderless ? "transparent" : isTested ? "hsl(var(--severity-low) / 0.9)" : authState.status === "error" ? "hsl(var(--destructive) / 0.7)" : "hsl(var(--border))",
2588
2630
  borderRadius: borderless ? 0 : 3,
2589
2631
  boxShadow: "none",
2590
2632
  overflow: "hidden",
@@ -2593,7 +2635,7 @@ var AppAuthCard = ({
2593
2635
  maxWidth: "100%"
2594
2636
  },
2595
2637
  children: [
2596
- !hideHeader && /* @__PURE__ */ jsxs3(
2638
+ !hideHeader && /* @__PURE__ */ jsxs4(
2597
2639
  CardContent,
2598
2640
  {
2599
2641
  onClick: onToggle,
@@ -2608,7 +2650,7 @@ var AppAuthCard = ({
2608
2650
  "&:hover": { backgroundColor: "hsl(var(--muted) / 0.35)" }
2609
2651
  },
2610
2652
  children: [
2611
- /* @__PURE__ */ jsxs3(Box3, { sx: { display: "flex", alignItems: "center", gap: 2, flex: 1, minWidth: 0 }, children: [
2653
+ /* @__PURE__ */ jsxs4(Box3, { sx: { display: "flex", alignItems: "center", gap: 2, flex: 1, minWidth: 0 }, children: [
2612
2654
  /* @__PURE__ */ jsx6(
2613
2655
  Box3,
2614
2656
  {
@@ -2634,7 +2676,7 @@ var AppAuthCard = ({
2634
2676
  )
2635
2677
  }
2636
2678
  ),
2637
- /* @__PURE__ */ jsxs3(Box3, { sx: { minWidth: 0, flex: 1 }, children: [
2679
+ /* @__PURE__ */ jsxs4(Box3, { sx: { minWidth: 0, flex: 1 }, children: [
2638
2680
  /* @__PURE__ */ jsx6(
2639
2681
  Typography3,
2640
2682
  {
@@ -2666,7 +2708,7 @@ var AppAuthCard = ({
2666
2708
  )
2667
2709
  ] })
2668
2710
  ] }),
2669
- /* @__PURE__ */ jsxs3(Box3, { sx: {
2711
+ /* @__PURE__ */ jsxs4(Box3, { sx: {
2670
2712
  display: "flex",
2671
2713
  alignItems: "center",
2672
2714
  gap: { xs: 1, sm: 1.5 },
@@ -2687,7 +2729,7 @@ var AppAuthCard = ({
2687
2729
  height: { xs: 22, sm: 24 }
2688
2730
  }
2689
2731
  }
2690
- ) : /* @__PURE__ */ jsxs3(Fragment2, { children: [
2732
+ ) : /* @__PURE__ */ jsxs4(Fragment2, { children: [
2691
2733
  /* @__PURE__ */ jsx6(
2692
2734
  Chip2,
2693
2735
  {
@@ -2760,7 +2802,7 @@ var AppAuthCard = ({
2760
2802
  ]
2761
2803
  }
2762
2804
  ),
2763
- /* @__PURE__ */ jsx6(Collapse, { in: isExpanded, children: /* @__PURE__ */ jsxs3(
2805
+ /* @__PURE__ */ jsx6(Collapse, { in: isExpanded, children: /* @__PURE__ */ jsxs4(
2764
2806
  Box3,
2765
2807
  {
2766
2808
  sx: {
@@ -2770,9 +2812,9 @@ var AppAuthCard = ({
2770
2812
  borderTop: borderless ? "none" : "1px solid hsl(var(--border))"
2771
2813
  },
2772
2814
  children: [
2773
- apiAuthEntries.length > 0 && /* @__PURE__ */ jsxs3(Box3, { sx: { mb: 3 }, children: [
2815
+ apiAuthEntries.length > 0 && /* @__PURE__ */ jsxs4(Box3, { sx: { mb: 3 }, children: [
2774
2816
  /* @__PURE__ */ jsx6(Typography3, { variant: "body2", sx: { color: "hsl(var(--muted-foreground))", mb: 1 }, children: "Select authentication" }),
2775
- /* @__PURE__ */ jsx6(FormControl, { fullWidth: true, size: "small", children: /* @__PURE__ */ jsxs3(
2817
+ /* @__PURE__ */ jsx6(FormControl, { fullWidth: true, size: "small", children: /* @__PURE__ */ jsxs4(
2776
2818
  Select,
2777
2819
  {
2778
2820
  value: selectedAuthId,
@@ -2824,8 +2866,8 @@ var AppAuthCard = ({
2824
2866
  };
2825
2867
  const configuredDate = authEntry.created || authEntry.edited;
2826
2868
  const lastValidDate = authEntry.validation?.last_valid;
2827
- return /* @__PURE__ */ jsx6(MenuItem, { value: entryId, sx: { color: "hsl(var(--foreground))", py: 1 }, children: /* @__PURE__ */ jsxs3(Box3, { sx: { display: "flex", alignItems: "center", gap: 1, width: "100%", minWidth: 0 }, children: [
2828
- /* @__PURE__ */ jsxs3(Box3, { sx: { display: "flex", gap: 0.5, flexShrink: 0 }, children: [
2869
+ return /* @__PURE__ */ jsx6(MenuItem, { value: entryId, sx: { color: "hsl(var(--foreground))", py: 1 }, children: /* @__PURE__ */ jsxs4(Box3, { sx: { display: "flex", alignItems: "center", gap: 1, width: "100%", minWidth: 0 }, children: [
2870
+ /* @__PURE__ */ jsxs4(Box3, { sx: { display: "flex", gap: 0.5, flexShrink: 0 }, children: [
2829
2871
  /* @__PURE__ */ jsx6(
2830
2872
  Tooltip2,
2831
2873
  {
@@ -2919,7 +2961,7 @@ var AppAuthCard = ({
2919
2961
  ]
2920
2962
  }
2921
2963
  ) }),
2922
- /* @__PURE__ */ jsxs3(
2964
+ /* @__PURE__ */ jsxs4(
2923
2965
  Dialog,
2924
2966
  {
2925
2967
  open: !!deleteConfirmAuthId,
@@ -2937,9 +2979,9 @@ var AppAuthCard = ({
2937
2979
  },
2938
2980
  children: [
2939
2981
  /* @__PURE__ */ jsx6(DialogTitle, { sx: { color: "hsl(var(--foreground))", fontWeight: 600, pb: 1 }, children: "Delete Authentication" }),
2940
- /* @__PURE__ */ jsxs3(DialogContent, { children: [
2982
+ /* @__PURE__ */ jsxs4(DialogContent, { children: [
2941
2983
  /* @__PURE__ */ jsx6(Typography3, { sx: { color: "hsl(var(--muted-foreground))", mb: 3 }, children: "Are you sure you want to delete this authentication? This action cannot be undone." }),
2942
- /* @__PURE__ */ jsxs3(Box3, { sx: { display: "flex", justifyContent: "flex-end", gap: 1.5 }, children: [
2984
+ /* @__PURE__ */ jsxs4(Box3, { sx: { display: "flex", justifyContent: "flex-end", gap: 1.5 }, children: [
2943
2985
  /* @__PURE__ */ jsx6(
2944
2986
  Button2,
2945
2987
  {
@@ -2987,7 +3029,7 @@ var AppAuthCard = ({
2987
3029
  ]
2988
3030
  }
2989
3031
  ),
2990
- !showAddNewForm && selectedAuth && /* @__PURE__ */ jsxs3(Box3, { sx: {
3032
+ !showAddNewForm && selectedAuth && /* @__PURE__ */ jsxs4(Box3, { sx: {
2991
3033
  mt: 2,
2992
3034
  p: 0,
2993
3035
  backgroundColor: "hsl(var(--muted))",
@@ -2995,7 +3037,7 @@ var AppAuthCard = ({
2995
3037
  border: "1px solid hsl(var(--border))",
2996
3038
  overflow: "hidden"
2997
3039
  }, children: [
2998
- /* @__PURE__ */ jsxs3(Box3, { sx: {
3040
+ /* @__PURE__ */ jsxs4(Box3, { sx: {
2999
3041
  display: "flex",
3000
3042
  alignItems: "center",
3001
3043
  gap: 1.5,
@@ -3019,14 +3061,14 @@ var AppAuthCard = ({
3019
3061
  letterSpacing: "0.05em"
3020
3062
  }, children: localTestStatus === "success" ? "Verified Authentication" : localTestStatus === "pending_validation" ? "Awaiting Backend Validation" : localTestStatus === "error" ? "Test Failed" : "Pending Verification" })
3021
3063
  ] }),
3022
- /* @__PURE__ */ jsxs3(Box3, { sx: {
3064
+ /* @__PURE__ */ jsxs4(Box3, { sx: {
3023
3065
  display: "flex",
3024
3066
  flexDirection: "column",
3025
3067
  alignItems: "stretch",
3026
3068
  gap: 2,
3027
3069
  p: { xs: 2, sm: 2.5 }
3028
3070
  }, children: [
3029
- /* @__PURE__ */ jsxs3(Box3, { sx: {
3071
+ /* @__PURE__ */ jsxs4(Box3, { sx: {
3030
3072
  display: "flex",
3031
3073
  alignItems: "center",
3032
3074
  gap: 1.5,
@@ -3044,8 +3086,8 @@ var AppAuthCard = ({
3044
3086
  border: `1px solid ${localTestStatus === "success" ? "hsl(var(--severity-low) / 0.2)" : localTestStatus === "pending_validation" ? "hsl(var(--severity-medium) / 0.2)" : localTestStatus === "error" ? "hsl(var(--destructive) / 0.2)" : isTested ? "hsl(var(--severity-low) / 0.2)" : isConfigured ? "hsl(var(--severity-medium) / 0.2)" : "hsl(var(--muted-foreground) / 0.2)"}`,
3045
3087
  flexShrink: 0
3046
3088
  }, children: /* @__PURE__ */ jsx6(CheckCircleIcon2, { size: 20 }) }),
3047
- /* @__PURE__ */ jsxs3(Box3, { sx: { minWidth: 0, flex: 1 }, children: [
3048
- /* @__PURE__ */ jsx6(Box3, { sx: { display: "flex", alignItems: "center", gap: 0.5 }, children: editingLabel ? /* @__PURE__ */ jsxs3(Box3, { sx: { display: "flex", alignItems: "center", gap: 0.5 }, onClick: (e) => e.stopPropagation(), children: [
3089
+ /* @__PURE__ */ jsxs4(Box3, { sx: { minWidth: 0, flex: 1 }, children: [
3090
+ /* @__PURE__ */ jsx6(Box3, { sx: { display: "flex", alignItems: "center", gap: 0.5 }, children: editingLabel ? /* @__PURE__ */ jsxs4(Box3, { sx: { display: "flex", alignItems: "center", gap: 0.5 }, onClick: (e) => e.stopPropagation(), children: [
3049
3091
  /* @__PURE__ */ jsx6(
3050
3092
  TextField,
3051
3093
  {
@@ -3106,7 +3148,7 @@ var AppAuthCard = ({
3106
3148
  children: "Cancel"
3107
3149
  }
3108
3150
  )
3109
- ] }) : /* @__PURE__ */ jsxs3(Fragment2, { children: [
3151
+ ] }) : /* @__PURE__ */ jsxs4(Fragment2, { children: [
3110
3152
  /* @__PURE__ */ jsx6(Typography3, { sx: {
3111
3153
  color: "hsl(var(--foreground))",
3112
3154
  fontWeight: 600,
@@ -3200,7 +3242,7 @@ var AppAuthCard = ({
3200
3242
  borderRadius: 2,
3201
3243
  "& .MuiAlert-icon": { color: "hsl(var(--destructive))" }
3202
3244
  },
3203
- children: /* @__PURE__ */ jsxs3(Box3, { sx: { display: "flex", alignItems: "center", justifyContent: "space-between", gap: 2, width: "100%" }, children: [
3245
+ children: /* @__PURE__ */ jsxs4(Box3, { sx: { display: "flex", alignItems: "center", justifyContent: "space-between", gap: 2, width: "100%" }, children: [
3204
3246
  /* @__PURE__ */ jsx6(Typography3, { sx: { fontSize: "0.875rem", flex: 1 }, children: localTestMessages.errorMessage }),
3205
3247
  localTestMessages.workflowId && localTestMessages.executionId && /* @__PURE__ */ jsx6(
3206
3248
  Button2,
@@ -3245,7 +3287,7 @@ var AppAuthCard = ({
3245
3287
  color: localTestMessages.warningMessage ? "hsl(var(--severity-medium))" : "hsl(var(--severity-low))"
3246
3288
  }
3247
3289
  },
3248
- children: localTestMessages.warningMessage ? /* @__PURE__ */ jsxs3(Box3, { children: [
3290
+ children: localTestMessages.warningMessage ? /* @__PURE__ */ jsxs4(Box3, { children: [
3249
3291
  /* @__PURE__ */ jsx6(Typography3, { sx: { fontWeight: 600, mb: 0.5 }, children: localTestMessages.successMessage || "Connection probably working" }),
3250
3292
  /* @__PURE__ */ jsx6(Typography3, { sx: { fontSize: "0.85rem", opacity: 0.9 }, children: localTestMessages.warningMessage })
3251
3293
  ] }) : localTestMessages.successMessage || "Connection verified successfully"
@@ -3265,7 +3307,7 @@ var AppAuthCard = ({
3265
3307
  borderRadius: 2,
3266
3308
  "& .MuiAlert-icon": { color: "hsl(var(--severity-medium))" }
3267
3309
  },
3268
- children: /* @__PURE__ */ jsxs3(Box3, { children: [
3310
+ children: /* @__PURE__ */ jsxs4(Box3, { children: [
3269
3311
  /* @__PURE__ */ jsx6(Typography3, { sx: { fontWeight: 600, mb: 0.5 }, children: "Test passed (Status 200), but not marked as validated" }),
3270
3312
  /* @__PURE__ */ jsx6(Typography3, { sx: { fontSize: "0.85rem", opacity: 0.9, mb: 1 }, children: "The API returned success, but Shuffle hasn't confirmed the validation yet. This could mean credentials are correct but the app needs additional setup." }),
3271
3313
  /* @__PURE__ */ jsx6(
@@ -3288,7 +3330,7 @@ var AppAuthCard = ({
3288
3330
  ) })
3289
3331
  ] })
3290
3332
  ] }),
3291
- (apiAuthEntries.length === 0 || showAddNewForm) && /* @__PURE__ */ jsxs3(Box3, { sx: {
3333
+ (apiAuthEntries.length === 0 || showAddNewForm) && /* @__PURE__ */ jsxs4(Box3, { sx: {
3292
3334
  p: 3,
3293
3335
  backgroundColor: "hsl(var(--background) / 0.4)",
3294
3336
  borderRadius: 2,
@@ -3310,10 +3352,10 @@ var AppAuthCard = ({
3310
3352
  }
3311
3353
  ),
3312
3354
  /* @__PURE__ */ jsx6(Typography3, { variant: "subtitle2", sx: { color: "hsl(var(--foreground))", fontWeight: 600, mb: 2 }, children: apiAuthEntries.length === 0 ? "Configure Authentication" : "Add New Authentication" }),
3313
- loading ? /* @__PURE__ */ jsxs3(Box3, { sx: { display: "flex", alignItems: "center", justifyContent: "center", py: 4 }, children: [
3355
+ loading ? /* @__PURE__ */ jsxs4(Box3, { sx: { display: "flex", alignItems: "center", justifyContent: "center", py: 4 }, children: [
3314
3356
  /* @__PURE__ */ jsx6(CircularProgress2, { size: 32, sx: { color: "hsl(var(--primary))" } }),
3315
3357
  /* @__PURE__ */ jsx6(Typography3, { sx: { ml: 2, color: "hsl(var(--muted-foreground))" }, children: "Loading configuration..." })
3316
- ] }) : saving || authState.status === "testing" ? /* @__PURE__ */ jsxs3(Box3, { sx: { display: "flex", alignItems: "center", justifyContent: "center", py: 4 }, children: [
3358
+ ] }) : saving || authState.status === "testing" ? /* @__PURE__ */ jsxs4(Box3, { sx: { display: "flex", alignItems: "center", justifyContent: "center", py: 4 }, children: [
3317
3359
  /* @__PURE__ */ jsx6(CircularProgress2, { size: 32, sx: { color: "hsl(var(--primary))" } }),
3318
3360
  /* @__PURE__ */ jsx6(Typography3, { sx: { ml: 2, color: "hsl(var(--muted-foreground))" }, children: saving ? "Saving authentication..." : "Testing connection..." })
3319
3361
  ] }) : error ? /* @__PURE__ */ jsx6(
@@ -3339,12 +3381,12 @@ var AppAuthCard = ({
3339
3381
  borderRadius: 2,
3340
3382
  "& .MuiAlert-icon": { color: "hsl(var(--severity-info))" }
3341
3383
  },
3342
- children: /* @__PURE__ */ jsxs3(Box3, { children: [
3384
+ children: /* @__PURE__ */ jsxs4(Box3, { children: [
3343
3385
  /* @__PURE__ */ jsx6(Typography3, { sx: { fontWeight: 600, mb: 0.5 }, children: "No authentication required" }),
3344
3386
  /* @__PURE__ */ jsx6(Typography3, { sx: { fontSize: "0.85rem", opacity: 0.9 }, children: "This app works without credentials. You can use it directly." })
3345
3387
  ] })
3346
3388
  }
3347
- ) : /* @__PURE__ */ jsxs3(Box3, { sx: { display: "flex", flexDirection: "column", gap: 3 }, children: [
3389
+ ) : /* @__PURE__ */ jsxs4(Box3, { sx: { display: "flex", flexDirection: "column", gap: 3 }, children: [
3348
3390
  renderOAuth2Fields(),
3349
3391
  renderParameterFields(),
3350
3392
  authState.status === "error" && authState.errorMessage && /* @__PURE__ */ jsx6(
@@ -3357,7 +3399,7 @@ var AppAuthCard = ({
3357
3399
  border: "1px solid hsl(var(--destructive) / 0.3)",
3358
3400
  borderRadius: 2
3359
3401
  },
3360
- children: /* @__PURE__ */ jsxs3(Box3, { sx: { display: "flex", alignItems: "center", justifyContent: "space-between", gap: 2, width: "100%" }, children: [
3402
+ children: /* @__PURE__ */ jsxs4(Box3, { sx: { display: "flex", alignItems: "center", justifyContent: "space-between", gap: 2, width: "100%" }, children: [
3361
3403
  /* @__PURE__ */ jsx6(Typography3, { sx: { fontSize: "0.875rem", flex: 1 }, children: authState.errorMessage }),
3362
3404
  authState.workflowId && authState.executionId && /* @__PURE__ */ jsx6(
3363
3405
  Button2,
@@ -3534,7 +3576,7 @@ var AppAuthCard = ({
3534
3576
  ]
3535
3577
  }
3536
3578
  ),
3537
- /* @__PURE__ */ jsxs3(
3579
+ /* @__PURE__ */ jsxs4(
3538
3580
  Dialog,
3539
3581
  {
3540
3582
  open: docsOpen,
@@ -3553,7 +3595,7 @@ var AppAuthCard = ({
3553
3595
  }
3554
3596
  },
3555
3597
  children: [
3556
- /* @__PURE__ */ jsxs3(
3598
+ /* @__PURE__ */ jsxs4(
3557
3599
  DialogTitle,
3558
3600
  {
3559
3601
  sx: {
@@ -3564,7 +3606,7 @@ var AppAuthCard = ({
3564
3606
  color: "hsl(var(--foreground))"
3565
3607
  },
3566
3608
  children: [
3567
- /* @__PURE__ */ jsxs3(Box3, { sx: { display: "flex", alignItems: "center", gap: 2 }, children: [
3609
+ /* @__PURE__ */ jsxs4(Box3, { sx: { display: "flex", alignItems: "center", gap: 2 }, children: [
3568
3610
  app.image_url && /* @__PURE__ */ jsx6(
3569
3611
  Box3,
3570
3612
  {
@@ -3574,7 +3616,7 @@ var AppAuthCard = ({
3574
3616
  sx: { width: 32, height: 32, borderRadius: 1, objectFit: "contain" }
3575
3617
  }
3576
3618
  ),
3577
- /* @__PURE__ */ jsxs3(Typography3, { variant: "h6", sx: { fontWeight: 600 }, children: [
3619
+ /* @__PURE__ */ jsxs4(Typography3, { variant: "h6", sx: { fontWeight: 600 }, children: [
3578
3620
  app.name.replace(/_/g, " "),
3579
3621
  " Documentation"
3580
3622
  ] })
@@ -3583,7 +3625,7 @@ var AppAuthCard = ({
3583
3625
  ]
3584
3626
  }
3585
3627
  ),
3586
- /* @__PURE__ */ jsx6(DialogContent, { sx: { pt: 3 }, children: docsLoading ? /* @__PURE__ */ jsxs3(Box3, { sx: { display: "flex", alignItems: "center", justifyContent: "center", py: 6 }, children: [
3628
+ /* @__PURE__ */ jsx6(DialogContent, { sx: { pt: 3 }, children: docsLoading ? /* @__PURE__ */ jsxs4(Box3, { sx: { display: "flex", alignItems: "center", justifyContent: "center", py: 6 }, children: [
3587
3629
  /* @__PURE__ */ jsx6(CircularProgress2, { size: 32, sx: { color: "hsl(var(--primary))" } }),
3588
3630
  /* @__PURE__ */ jsx6(Typography3, { sx: { ml: 2, color: "hsl(var(--muted-foreground))" }, children: "Loading documentation..." })
3589
3631
  ] }) : /* @__PURE__ */ jsx6(
@@ -3626,8 +3668,14 @@ var AppAuthConfig = ({
3626
3668
  onTestConnection,
3627
3669
  onSaveAuth,
3628
3670
  onSelectAuth,
3629
- onRefreshAuth
3671
+ onRefreshAuth,
3672
+ globalUrl,
3673
+ userdata,
3674
+ isLoaded,
3675
+ isLoggedIn,
3676
+ serverside
3630
3677
  }) => {
3678
+ useSyncHostBaseUrl(globalUrl);
3631
3679
  const getApiAuthEntries = (app) => {
3632
3680
  const normalize = (n) => n.toLowerCase().replace(/[\s_\-]+/g, "_");
3633
3681
  return authenticatedApps.filter((auth) => normalize(auth.app?.name || "") === normalize(app.name)).map((auth) => ({
@@ -3688,7 +3736,7 @@ var AppAuthConfig = ({
3688
3736
  }
3689
3737
  const validatedCount = sortedApps.filter((app) => isAppValidated(app)).length;
3690
3738
  const totalCount = sortedApps.length;
3691
- return /* @__PURE__ */ jsxs3(Box3, { sx: { width: "100%", maxWidth: "100%", overflow: "hidden" }, children: [
3739
+ return /* @__PURE__ */ jsxs4(Box3, { sx: { width: "100%", maxWidth: "100%", overflow: "hidden" }, children: [
3692
3740
  /* @__PURE__ */ jsx6(
3693
3741
  Typography3,
3694
3742
  {
@@ -3730,6 +3778,11 @@ var AppAuthConfig = ({
3730
3778
  return /* @__PURE__ */ jsx6(
3731
3779
  AppAuthCard,
3732
3780
  {
3781
+ globalUrl,
3782
+ userdata,
3783
+ isLoaded,
3784
+ isLoggedIn,
3785
+ serverside,
3733
3786
  app,
3734
3787
  authState,
3735
3788
  isExpanded,
@@ -3747,8 +3800,8 @@ var AppAuthConfig = ({
3747
3800
  ] });
3748
3801
  };
3749
3802
 
3750
- // AppAuthSection.tsx
3751
- import { jsx as jsx7, jsxs as jsxs4 } from "react/jsx-runtime";
3803
+ // components/AppAuthSection.tsx
3804
+ import { jsx as jsx7, jsxs as jsxs5 } from "react/jsx-runtime";
3752
3805
  function AppAuthSection({
3753
3806
  displayName,
3754
3807
  algoliaApp,
@@ -3764,7 +3817,7 @@ function AppAuthSection({
3764
3817
  onSaveAuth,
3765
3818
  onRefreshAuth
3766
3819
  }) {
3767
- return /* @__PURE__ */ jsx7(motion3.div, { initial: { opacity: 0, y: 12 }, animate: { opacity: 1, y: 0 }, transition: { duration: 0.3, delay: 0.1 }, children: /* @__PURE__ */ jsxs4(Box4, { sx: { mb: 3 }, children: [
3820
+ return /* @__PURE__ */ jsx7(motion3.div, { initial: { opacity: 0, y: 12 }, animate: { opacity: 1, y: 0 }, transition: { duration: 0.3, delay: 0.1 }, children: /* @__PURE__ */ jsxs5(Box4, { sx: { mb: 3 }, children: [
3768
3821
  /* @__PURE__ */ jsx7(Typography4, { sx: { color: "hsl(var(--foreground))", fontWeight: 600, fontSize: "0.95rem", mb: 0.5 }, children: "Authentication" }),
3769
3822
  /* @__PURE__ */ jsx7(Typography4, { variant: "body2", sx: { color: "hsl(var(--muted-foreground))", mb: 1.5 }, children: isAuthenticated ? authCount > 0 ? `${authCount} configuration${authCount > 1 ? "s" : ""} found` : "No authentication configured yet" : `Connect your ${displayName} account` }),
3770
3823
  isAuthenticated && algoliaApp && resolvedAlgoliaId && /* @__PURE__ */ jsx7(
@@ -3784,11 +3837,11 @@ function AppAuthSection({
3784
3837
  ] }) });
3785
3838
  }
3786
3839
 
3787
- // TryMcpSection.tsx
3840
+ // views/TryMcpSection.tsx
3788
3841
  import { Box as Box6, Typography as Typography6 } from "@mui/material";
3789
3842
  import { motion as motion5 } from "framer-motion";
3790
3843
 
3791
- // AppMcpChat.tsx
3844
+ // views/AppMcpChat.tsx
3792
3845
  import { useState as useState6, useRef as useRef3, useMemo } from "react";
3793
3846
  import {
3794
3847
  CheckCircle as CheckCircleOutlineIcon,
@@ -3808,7 +3861,7 @@ import {
3808
3861
  // ../assets/singul-agent-icon.png
3809
3862
  var singul_agent_icon_default = "data:image/png;base64,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";
3810
3863
 
3811
- // AgentIcon.tsx
3864
+ // components/AgentIcon.tsx
3812
3865
  import { jsx as jsx8 } from "react/jsx-runtime";
3813
3866
  var AgentIcon = ({ size = 16, className, style }) => /* @__PURE__ */ jsx8(
3814
3867
  "img",
@@ -3823,11 +3876,11 @@ var AgentIcon = ({ size = 16, className, style }) => /* @__PURE__ */ jsx8(
3823
3876
  );
3824
3877
  var AgentIcon_default = AgentIcon;
3825
3878
 
3826
- // AppMcpChat.tsx
3879
+ // views/AppMcpChat.tsx
3827
3880
  import { motion as motion4, AnimatePresence } from "framer-motion";
3828
3881
  import ReactMarkdown2 from "react-markdown";
3829
3882
  import remarkGfm2 from "remark-gfm";
3830
- import { jsx as jsx9, jsxs as jsxs5 } from "react/jsx-runtime";
3883
+ import { jsx as jsx9, jsxs as jsxs6 } from "react/jsx-runtime";
3831
3884
  var CATEGORY_SUGGESTIONS = {
3832
3885
  "threat": [
3833
3886
  "Is 1.2.3.4 a known bad actor?",
@@ -4078,7 +4131,7 @@ ${JSON.stringify(data, null, 2)}
4078
4131
  backgroundColor: "hsl(var(--background))",
4079
4132
  overflow: "hidden"
4080
4133
  },
4081
- children: /* @__PURE__ */ jsxs5(AnimatePresence, { mode: "wait", children: [
4134
+ children: /* @__PURE__ */ jsxs6(AnimatePresence, { mode: "wait", children: [
4082
4135
  runState === "idle" && /* @__PURE__ */ jsx9(
4083
4136
  motion4.div,
4084
4137
  {
@@ -4086,8 +4139,8 @@ ${JSON.stringify(data, null, 2)}
4086
4139
  animate: { opacity: 1 },
4087
4140
  exit: { opacity: 0 },
4088
4141
  transition: { duration: 0.15 },
4089
- children: /* @__PURE__ */ jsxs5(Box5, { sx: { p: 3, display: "flex", flexDirection: "column", gap: 2.5 }, children: [
4090
- /* @__PURE__ */ jsxs5(Box5, { sx: { display: "flex", alignItems: "center", gap: 1 }, children: [
4142
+ children: /* @__PURE__ */ jsxs6(Box5, { sx: { p: 3, display: "flex", flexDirection: "column", gap: 2.5 }, children: [
4143
+ /* @__PURE__ */ jsxs6(Box5, { sx: { display: "flex", alignItems: "center", gap: 1 }, children: [
4091
4144
  /* @__PURE__ */ jsx9(
4092
4145
  Box5,
4093
4146
  {
@@ -4144,7 +4197,7 @@ ${JSON.stringify(data, null, 2)}
4144
4197
  }
4145
4198
  )
4146
4199
  ] }),
4147
- /* @__PURE__ */ jsxs5(
4200
+ /* @__PURE__ */ jsxs6(
4148
4201
  Box5,
4149
4202
  {
4150
4203
  sx: {
@@ -4252,11 +4305,11 @@ ${JSON.stringify(data, null, 2)}
4252
4305
  animate: { opacity: 1 },
4253
4306
  exit: { opacity: 0 },
4254
4307
  transition: { duration: 0.15 },
4255
- children: /* @__PURE__ */ jsxs5(Box5, { sx: { p: 3, display: "flex", alignItems: "center", gap: 2 }, children: [
4308
+ children: /* @__PURE__ */ jsxs6(Box5, { sx: { p: 3, display: "flex", alignItems: "center", gap: 2 }, children: [
4256
4309
  /* @__PURE__ */ jsx9(CircularProgress3, { size: 20, thickness: 5, sx: { color: "hsl(var(--primary))" } }),
4257
- /* @__PURE__ */ jsxs5(Box5, { sx: { flex: 1, minWidth: 0 }, children: [
4310
+ /* @__PURE__ */ jsxs6(Box5, { sx: { flex: 1, minWidth: 0 }, children: [
4258
4311
  /* @__PURE__ */ jsx9(Typography5, { sx: { fontSize: "0.78rem", fontWeight: 600, color: "hsl(var(--foreground))" }, children: "Executing\u2026" }),
4259
- /* @__PURE__ */ jsxs5(
4312
+ /* @__PURE__ */ jsxs6(
4260
4313
  Typography5,
4261
4314
  {
4262
4315
  sx: {
@@ -4285,9 +4338,9 @@ ${JSON.stringify(data, null, 2)}
4285
4338
  animate: { opacity: 1, y: 0 },
4286
4339
  exit: { opacity: 0 },
4287
4340
  transition: { duration: 0.2 },
4288
- children: /* @__PURE__ */ jsxs5(Box5, { sx: { p: 3, display: "flex", flexDirection: "column", gap: 2 }, children: [
4289
- /* @__PURE__ */ jsxs5(Box5, { sx: { display: "flex", alignItems: "center", justifyContent: "space-between" }, children: [
4290
- /* @__PURE__ */ jsxs5(Box5, { sx: { display: "flex", alignItems: "center", gap: 1 }, children: [
4341
+ children: /* @__PURE__ */ jsxs6(Box5, { sx: { p: 3, display: "flex", flexDirection: "column", gap: 2 }, children: [
4342
+ /* @__PURE__ */ jsxs6(Box5, { sx: { display: "flex", alignItems: "center", justifyContent: "space-between" }, children: [
4343
+ /* @__PURE__ */ jsxs6(Box5, { sx: { display: "flex", alignItems: "center", gap: 1 }, children: [
4291
4344
  isError ? /* @__PURE__ */ jsx9(ErrorOutlineIcon2, { size: 18, color: "hsl(0 70% 55%)" }) : /* @__PURE__ */ jsx9(CheckCircleOutlineIcon, { size: 18, color: "hsl(145 60% 45%)" }),
4292
4345
  /* @__PURE__ */ jsx9(Typography5, { sx: { fontSize: "0.78rem", fontWeight: 600, color: "hsl(var(--foreground))" }, children: isError ? "Failed" : "Completed" })
4293
4346
  ] }),
@@ -4315,7 +4368,7 @@ ${JSON.stringify(data, null, 2)}
4315
4368
  }
4316
4369
  )
4317
4370
  ] }),
4318
- /* @__PURE__ */ jsxs5(
4371
+ /* @__PURE__ */ jsxs6(
4319
4372
  Typography5,
4320
4373
  {
4321
4374
  sx: {
@@ -4397,10 +4450,10 @@ ${JSON.stringify(data, null, 2)}
4397
4450
  };
4398
4451
  var AppMcpChat_default = AppMcpChat;
4399
4452
 
4400
- // TryMcpSection.tsx
4401
- import { jsx as jsx10, jsxs as jsxs6 } from "react/jsx-runtime";
4453
+ // views/TryMcpSection.tsx
4454
+ import { jsx as jsx10, jsxs as jsxs7 } from "react/jsx-runtime";
4402
4455
  function TryMcpSection({ appName, appIcon, appId, categories }) {
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: [
4456
+ return /* @__PURE__ */ jsx10(motion5.div, { initial: { opacity: 0, y: 12 }, animate: { opacity: 1, y: 0 }, transition: { duration: 0.3, delay: 0.15 }, children: /* @__PURE__ */ jsxs7(Box6, { sx: { mt: 5, mb: 3 }, children: [
4404
4457
  /* @__PURE__ */ jsx10(Typography6, { sx: { color: "hsl(var(--foreground))", fontWeight: 600, fontSize: "0.95rem", mb: 1.5 }, children: "Try MCP" }),
4405
4458
  /* @__PURE__ */ jsx10(
4406
4459
  AppMcpChat_default,
@@ -4414,8 +4467,8 @@ function TryMcpSection({ appName, appIcon, appId, categories }) {
4414
4467
  ] }) });
4415
4468
  }
4416
4469
 
4417
- // SingulActionsPreview.tsx
4418
- import { useState as useState7, useEffect as useEffect5, useMemo as useMemo2, useCallback as useCallback5, useRef as useRef4 } from "react";
4470
+ // components/SingulActionsPreview.tsx
4471
+ import { useState as useState7, useEffect as useEffect6, useMemo as useMemo2, useCallback as useCallback5, useRef as useRef4 } from "react";
4419
4472
  import {
4420
4473
  Box as Box7,
4421
4474
  Typography as Typography7,
@@ -4438,7 +4491,7 @@ import {
4438
4491
  import JsonView from "react18-json-view";
4439
4492
  import "react18-json-view/src/style.css";
4440
4493
  import "react18-json-view/src/dark.css";
4441
- import { Fragment as Fragment3, jsx as jsx11, jsxs as jsxs7 } from "react/jsx-runtime";
4494
+ import { Fragment as Fragment3, jsx as jsx11, jsxs as jsxs8 } from "react/jsx-runtime";
4442
4495
  import { createElement } from "react";
4443
4496
  var deepParseJsonStrings = (obj, depth = 0) => {
4444
4497
  if (depth > 5) return obj;
@@ -4718,7 +4771,7 @@ var SingulActionsPreview = ({
4718
4771
  (action, l) => l === "python" ? buildSingulPython(appName, action, curlOpts) : buildSingulCurl(appName, action, curlOpts),
4719
4772
  [appName, curlOpts]
4720
4773
  );
4721
- useEffect5(() => {
4774
+ useEffect6(() => {
4722
4775
  const initial = sortedActions[0] || null;
4723
4776
  setSelected(initial);
4724
4777
  setSnippet(buildSnippet(initial, lang));
@@ -4808,8 +4861,8 @@ var SingulActionsPreview = ({
4808
4861
  }
4809
4862
  };
4810
4863
  const lineCount = useMemo2(() => Math.max(snippet.split("\n").length, 1), [snippet]);
4811
- return /* @__PURE__ */ jsxs7(Box7, { sx: { mt: 5, mb: 3, opacity: isDisabled ? 0.55 : 1 }, children: [
4812
- /* @__PURE__ */ jsxs7(Box7, { sx: { display: "flex", alignItems: "center", gap: 1, mb: 1.5 }, children: [
4864
+ return /* @__PURE__ */ jsxs8(Box7, { sx: { mt: 5, mb: 3, opacity: isDisabled ? 0.55 : 1 }, children: [
4865
+ /* @__PURE__ */ jsxs8(Box7, { sx: { display: "flex", alignItems: "center", gap: 1, mb: 1.5 }, children: [
4813
4866
  /* @__PURE__ */ jsx11(Typography7, { sx: { color: "hsl(var(--foreground))", fontWeight: 600, fontSize: "0.95rem" }, children: "Try individual actions" }),
4814
4867
  /* @__PURE__ */ jsx11(
4815
4868
  Chip4,
@@ -4820,7 +4873,7 @@ var SingulActionsPreview = ({
4820
4873
  }
4821
4874
  )
4822
4875
  ] }),
4823
- /* @__PURE__ */ jsxs7(
4876
+ /* @__PURE__ */ jsxs8(
4824
4877
  Box7,
4825
4878
  {
4826
4879
  sx: {
@@ -4845,7 +4898,7 @@ var SingulActionsPreview = ({
4845
4898
  }
4846
4899
  },
4847
4900
  children: [
4848
- isDisabled ? /* @__PURE__ */ jsx11(Typography7, { sx: { fontSize: "0.75rem", color: "hsl(var(--muted-foreground))", fontStyle: "italic", textAlign: "center", py: 1 }, children: "No category detected for this app" }) : /* @__PURE__ */ jsxs7(Fragment3, { children: [
4901
+ isDisabled ? /* @__PURE__ */ jsx11(Typography7, { sx: { fontSize: "0.75rem", color: "hsl(var(--muted-foreground))", fontStyle: "italic", textAlign: "center", py: 1 }, children: "No category detected for this app" }) : /* @__PURE__ */ jsxs8(Fragment3, { children: [
4849
4902
  /* @__PURE__ */ jsx11(Box7, { sx: { display: "flex", gap: 1, mb: 1.5, alignItems: "center" }, children: /* @__PURE__ */ jsx11(
4850
4903
  Autocomplete,
4851
4904
  {
@@ -4857,7 +4910,7 @@ var SingulActionsPreview = ({
4857
4910
  groupBy: (o) => o.category,
4858
4911
  getOptionLabel: (o) => o?.label ?? "",
4859
4912
  isOptionEqualToValue: (a, b) => a?.name === b?.name && a?.category === b?.category,
4860
- renderOption: (props, option) => /* @__PURE__ */ createElement("li", { ...props, key: `${option.category}-${option.name}` }, /* @__PURE__ */ jsxs7(Box7, { sx: { display: "flex", flexDirection: "column" }, children: [
4913
+ renderOption: (props, option) => /* @__PURE__ */ createElement("li", { ...props, key: `${option.category}-${option.name}` }, /* @__PURE__ */ jsxs8(Box7, { sx: { display: "flex", flexDirection: "column" }, children: [
4861
4914
  /* @__PURE__ */ jsx11(Typography7, { sx: { fontSize: "0.78rem", color: "hsl(var(--foreground))" }, children: option.label }),
4862
4915
  /* @__PURE__ */ jsx11(Typography7, { sx: { fontFamily: "'JetBrains Mono', monospace", fontSize: "0.65rem", color: "hsl(var(--muted-foreground))" }, children: option.name })
4863
4916
  ] })),
@@ -4894,7 +4947,7 @@ var SingulActionsPreview = ({
4894
4947
  renderInput: (params) => /* @__PURE__ */ jsx11(TextField2, { ...params, placeholder: "Select action" })
4895
4948
  }
4896
4949
  ) }),
4897
- /* @__PURE__ */ jsxs7(
4950
+ /* @__PURE__ */ jsxs8(
4898
4951
  Box7,
4899
4952
  {
4900
4953
  sx: {
@@ -4906,7 +4959,7 @@ var SingulActionsPreview = ({
4906
4959
  boxShadow: "0 8px 24px -12px hsl(var(--primary) / 0.25)"
4907
4960
  },
4908
4961
  children: [
4909
- /* @__PURE__ */ jsxs7(
4962
+ /* @__PURE__ */ jsxs8(
4910
4963
  Box7,
4911
4964
  {
4912
4965
  sx: {
@@ -5004,7 +5057,7 @@ var SingulActionsPreview = ({
5004
5057
  ]
5005
5058
  }
5006
5059
  ),
5007
- /* @__PURE__ */ jsxs7(Box7, { sx: { display: "flex", minHeight: 270 }, children: [
5060
+ /* @__PURE__ */ jsxs8(Box7, { sx: { display: "flex", minHeight: 270 }, children: [
5008
5061
  /* @__PURE__ */ jsx11(
5009
5062
  Box7,
5010
5063
  {
@@ -5026,7 +5079,7 @@ var SingulActionsPreview = ({
5026
5079
  children: Array.from({ length: lineCount }, (_, i) => /* @__PURE__ */ jsx11("div", { children: i + 1 }, i))
5027
5080
  }
5028
5081
  ),
5029
- /* @__PURE__ */ jsxs7(Box7, { sx: { flex: 1, position: "relative", minHeight: 270 }, children: [
5082
+ /* @__PURE__ */ jsxs8(Box7, { sx: { flex: 1, position: "relative", minHeight: 270 }, children: [
5030
5083
  /* @__PURE__ */ jsx11(
5031
5084
  Box7,
5032
5085
  {
@@ -5107,8 +5160,8 @@ var SingulActionsPreview = ({
5107
5160
  target.scrollIntoView({ behavior: "smooth", block: "start" });
5108
5161
  }
5109
5162
  };
5110
- return /* @__PURE__ */ jsxs7(Box7, { ref: responseRef, sx: { mt: 1.5 }, children: [
5111
- needsAuth && /* @__PURE__ */ jsxs7(
5163
+ return /* @__PURE__ */ jsxs8(Box7, { ref: responseRef, sx: { mt: 1.5 }, children: [
5164
+ needsAuth && /* @__PURE__ */ jsxs8(
5112
5165
  Box7,
5113
5166
  {
5114
5167
  sx: {
@@ -5123,14 +5176,14 @@ var SingulActionsPreview = ({
5123
5176
  },
5124
5177
  children: [
5125
5178
  /* @__PURE__ */ jsx11(LockIcon2, { size: 22, color: "hsl(var(--severity-medium))" }),
5126
- /* @__PURE__ */ jsxs7(Box7, { sx: { flex: 1, minWidth: 0 }, children: [
5127
- /* @__PURE__ */ jsxs7(Typography7, { sx: { fontSize: "0.85rem", fontWeight: 600, color: "hsl(var(--foreground))" }, children: [
5179
+ /* @__PURE__ */ jsxs8(Box7, { sx: { flex: 1, minWidth: 0 }, children: [
5180
+ /* @__PURE__ */ jsxs8(Typography7, { sx: { fontSize: "0.85rem", fontWeight: 600, color: "hsl(var(--foreground))" }, children: [
5128
5181
  pretty,
5129
5182
  " requires authentication"
5130
5183
  ] }),
5131
5184
  /* @__PURE__ */ jsx11(Typography7, { sx: { fontSize: "0.75rem", color: "hsl(var(--muted-foreground))" }, children: typeof parsedResult?.reason === "string" && parsedResult.reason ? parsedResult.reason : `Connect your ${pretty} account so this action can run, then try again.` })
5132
5185
  ] }),
5133
- /* @__PURE__ */ jsxs7(
5186
+ /* @__PURE__ */ jsxs8(
5134
5187
  Button3,
5135
5188
  {
5136
5189
  variant: "outlined",
@@ -5165,7 +5218,7 @@ var SingulActionsPreview = ({
5165
5218
  ]
5166
5219
  }
5167
5220
  ),
5168
- /* @__PURE__ */ jsxs7(Box7, { sx: { display: "flex", alignItems: "center", gap: 0.75, mb: 0.5 }, children: [
5221
+ /* @__PURE__ */ jsxs8(Box7, { sx: { display: "flex", alignItems: "center", gap: 0.75, mb: 0.5 }, children: [
5169
5222
  /* @__PURE__ */ jsx11(Box7, { sx: { width: 6, height: 6, borderRadius: "50%", backgroundColor: needsAuth ? "hsl(var(--severity-medium))" : "hsl(140 60% 55%)" } }),
5170
5223
  /* @__PURE__ */ jsx11(Typography7, { sx: { fontFamily: "'JetBrains Mono', monospace", fontSize: "0.65rem", color: "hsl(var(--muted-foreground))", letterSpacing: 0.4 }, children: "response" })
5171
5224
  ] }),
@@ -5230,8 +5283,8 @@ var SingulActionsPreview = ({
5230
5283
  };
5231
5284
  var SingulActionsPreview_default = SingulActionsPreview;
5232
5285
 
5233
- // AppDetailDrawer.tsx
5234
- import { Fragment as Fragment4, jsx as jsx12, jsxs as jsxs8 } from "react/jsx-runtime";
5286
+ // views/AppDetailDrawer.tsx
5287
+ import { Fragment as Fragment4, jsx as jsx12, jsxs as jsxs9 } from "react/jsx-runtime";
5235
5288
  function AppDetailDrawer({
5236
5289
  open,
5237
5290
  onClose,
@@ -5262,7 +5315,7 @@ function AppDetailDrawer({
5262
5315
  handleSaveAuth,
5263
5316
  refreshAuth
5264
5317
  } = useAppAuth();
5265
- useEffect6(() => {
5318
+ useEffect7(() => {
5266
5319
  if (!open || !appName) return;
5267
5320
  setAppLoading(true);
5268
5321
  setAppInfo(null);
@@ -5354,7 +5407,7 @@ function AppDetailDrawer({
5354
5407
  setAppLoading(false);
5355
5408
  })();
5356
5409
  }, [open, appName, appId]);
5357
- useEffect6(() => {
5410
+ useEffect7(() => {
5358
5411
  if (!open || !appName || !isAuthenticated) {
5359
5412
  setIncidentStats(null);
5360
5413
  return;
@@ -5423,12 +5476,12 @@ function AppDetailDrawer({
5423
5476
  const effectiveActivated = isActivated === null ? hasAnyAuth ? true : null : isActivated || hasAnyAuth;
5424
5477
  const authCount = matchingEntries.length;
5425
5478
  const displayName = (appInfo?.name || appName || "").replace(/_/g, " ");
5426
- useEffect6(() => {
5479
+ useEffect7(() => {
5427
5480
  if (lastValidAuthRef.current === hasValidAuth) return;
5428
5481
  lastValidAuthRef.current = hasValidAuth;
5429
5482
  setAuthExpanded(!hasValidAuth);
5430
5483
  }, [hasValidAuth]);
5431
- useEffect6(() => {
5484
+ useEffect7(() => {
5432
5485
  lastValidAuthRef.current = null;
5433
5486
  }, [appName]);
5434
5487
  const handleActivateToggle = async () => {
@@ -5469,7 +5522,7 @@ function AppDetailDrawer({
5469
5522
  }
5470
5523
  };
5471
5524
  const isLoadingAll = appLoading || isAuthenticated && appAuthLoading;
5472
- return /* @__PURE__ */ jsxs8(
5525
+ return /* @__PURE__ */ jsxs9(
5473
5526
  Drawer,
5474
5527
  {
5475
5528
  anchor,
@@ -5485,7 +5538,7 @@ function AppDetailDrawer({
5485
5538
  }
5486
5539
  },
5487
5540
  children: [
5488
- /* @__PURE__ */ jsxs8(
5541
+ /* @__PURE__ */ jsxs9(
5489
5542
  Box8,
5490
5543
  {
5491
5544
  sx: {
@@ -5498,7 +5551,7 @@ function AppDetailDrawer({
5498
5551
  flexShrink: 0
5499
5552
  },
5500
5553
  children: [
5501
- /* @__PURE__ */ jsxs8(Box8, { sx: { flex: 1 }, children: [
5554
+ /* @__PURE__ */ jsxs9(Box8, { sx: { flex: 1 }, children: [
5502
5555
  /* @__PURE__ */ jsx12(Typography8, { sx: { color: "hsl(var(--foreground))", fontWeight: 700, fontSize: "1rem", lineHeight: 1.2, textTransform: "capitalize" }, children: isLoadingAll ? /* @__PURE__ */ jsx12(Skeleton, { width: 140 }) : displayName }),
5503
5556
  /* @__PURE__ */ jsx12(Typography8, { sx: { color: "hsl(var(--muted-foreground))", fontSize: "0.75rem" }, children: "App configuration" })
5504
5557
  ] }),
@@ -5514,16 +5567,16 @@ function AppDetailDrawer({
5514
5567
  ]
5515
5568
  }
5516
5569
  ),
5517
- /* @__PURE__ */ jsx12(Box8, { sx: { flex: 1, overflowY: "auto", p: 3 }, children: isLoadingAll ? /* @__PURE__ */ jsxs8(Box8, { children: [
5518
- /* @__PURE__ */ jsxs8(Box8, { sx: { display: "flex", gap: 2, mb: 3 }, children: [
5570
+ /* @__PURE__ */ jsx12(Box8, { sx: { flex: 1, overflowY: "auto", p: 3 }, children: isLoadingAll ? /* @__PURE__ */ jsxs9(Box8, { children: [
5571
+ /* @__PURE__ */ jsxs9(Box8, { sx: { display: "flex", gap: 2, mb: 3 }, children: [
5519
5572
  /* @__PURE__ */ jsx12(Skeleton, { variant: "circular", width: 56, height: 56 }),
5520
- /* @__PURE__ */ jsxs8(Box8, { sx: { flex: 1 }, children: [
5573
+ /* @__PURE__ */ jsxs9(Box8, { sx: { flex: 1 }, children: [
5521
5574
  /* @__PURE__ */ jsx12(Skeleton, { width: 180, height: 28 }),
5522
5575
  /* @__PURE__ */ jsx12(Skeleton, { width: 260, height: 18, sx: { mt: 0.5 } })
5523
5576
  ] })
5524
5577
  ] }),
5525
5578
  /* @__PURE__ */ jsx12(Skeleton, { variant: "rectangular", height: 160, sx: { borderRadius: 2 } })
5526
- ] }) : /* @__PURE__ */ jsxs8(Fragment4, { children: [
5579
+ ] }) : /* @__PURE__ */ jsxs9(Fragment4, { children: [
5527
5580
  /* @__PURE__ */ jsx12(
5528
5581
  AppTitleHeader,
5529
5582
  {
@@ -5542,7 +5595,7 @@ function AppDetailDrawer({
5542
5595
  } : void 0
5543
5596
  }
5544
5597
  ),
5545
- isAuthenticated && incidentStats && incidentStats.ingested > 0 && /* @__PURE__ */ jsx12(motion6.div, { initial: { opacity: 0, y: 12 }, animate: { opacity: 1, y: 0 }, transition: { duration: 0.3, delay: 0.08 }, children: /* @__PURE__ */ jsxs8(Box8, { sx: {
5598
+ isAuthenticated && incidentStats && incidentStats.ingested > 0 && /* @__PURE__ */ jsx12(motion6.div, { initial: { opacity: 0, y: 12 }, animate: { opacity: 1, y: 0 }, transition: { duration: 0.3, delay: 0.08 }, children: /* @__PURE__ */ jsxs9(Box8, { sx: {
5546
5599
  display: "flex",
5547
5600
  gap: 2,
5548
5601
  mb: 3,
@@ -5551,16 +5604,16 @@ function AppDetailDrawer({
5551
5604
  border: "1px solid hsl(var(--border))",
5552
5605
  bgcolor: "hsl(var(--muted) / 0.3)"
5553
5606
  }, children: [
5554
- /* @__PURE__ */ jsxs8(Box8, { sx: { display: "flex", alignItems: "center", gap: 1 }, children: [
5607
+ /* @__PURE__ */ jsxs9(Box8, { sx: { display: "flex", alignItems: "center", gap: 1 }, children: [
5555
5608
  /* @__PURE__ */ jsx12(Download, { size: 14, style: { color: "hsl(var(--primary))" } }),
5556
- /* @__PURE__ */ jsxs8(Box8, { children: [
5609
+ /* @__PURE__ */ jsxs9(Box8, { children: [
5557
5610
  /* @__PURE__ */ jsx12(Typography8, { sx: { fontSize: "1.1rem", fontWeight: 700, color: "hsl(var(--foreground))", lineHeight: 1 }, children: incidentStats.ingested }),
5558
5611
  /* @__PURE__ */ jsx12(Typography8, { sx: { fontSize: "0.65rem", color: "hsl(var(--muted-foreground))", fontWeight: 500 }, children: "Incidents ingested" })
5559
5612
  ] })
5560
5613
  ] }),
5561
- incidentStats.forwarded > 0 && /* @__PURE__ */ jsxs8(Box8, { sx: { display: "flex", alignItems: "center", gap: 1, ml: 2, pl: 2, borderLeft: "1px solid hsl(var(--border))" }, children: [
5614
+ incidentStats.forwarded > 0 && /* @__PURE__ */ jsxs9(Box8, { sx: { display: "flex", alignItems: "center", gap: 1, ml: 2, pl: 2, borderLeft: "1px solid hsl(var(--border))" }, children: [
5562
5615
  /* @__PURE__ */ jsx12(Forward, { size: 14, style: { color: "hsl(var(--severity-low))" } }),
5563
- /* @__PURE__ */ jsxs8(Box8, { children: [
5616
+ /* @__PURE__ */ jsxs9(Box8, { children: [
5564
5617
  /* @__PURE__ */ jsx12(Typography8, { sx: { fontSize: "1.1rem", fontWeight: 700, color: "hsl(var(--foreground))", lineHeight: 1 }, children: incidentStats.forwarded }),
5565
5618
  /* @__PURE__ */ jsx12(Typography8, { sx: { fontSize: "0.65rem", color: "hsl(var(--muted-foreground))", fontWeight: 500 }, children: "Forwarded" })
5566
5619
  ] })
@@ -5584,7 +5637,7 @@ function AppDetailDrawer({
5584
5637
  onRefreshAuth: refreshAuth
5585
5638
  }
5586
5639
  ) }),
5587
- isAuthenticated && /* @__PURE__ */ jsxs8(Fragment4, { children: [
5640
+ isAuthenticated && /* @__PURE__ */ jsxs9(Fragment4, { children: [
5588
5641
  /* @__PURE__ */ jsx12(
5589
5642
  TryMcpSection,
5590
5643
  {
@@ -5602,13 +5655,13 @@ function AppDetailDrawer({
5602
5655
  );
5603
5656
  }
5604
5657
 
5605
- // ShuffleMCP.tsx
5606
- import "./shuffle-mcp-CN72CJJQ.css";
5658
+ // views/ShuffleMCP.tsx
5659
+ import "./shuffle-mcp-ER33P3W2.css";
5607
5660
 
5608
- // SegmentedControl.tsx
5661
+ // components/SegmentedControl.tsx
5609
5662
  import * as React2 from "react";
5610
5663
  import { motion as motion7, LayoutGroup } from "framer-motion";
5611
- import { jsx as jsx13, jsxs as jsxs9 } from "react/jsx-runtime";
5664
+ import { jsx as jsx13, jsxs as jsxs10 } from "react/jsx-runtime";
5612
5665
  var SIZE = {
5613
5666
  sm: {
5614
5667
  containerPadding: "2px",
@@ -5695,7 +5748,7 @@ function SegmentedControl({
5695
5748
  const isAction = opt.type === "action";
5696
5749
  const active = !isAction && opt.value === value;
5697
5750
  const key = isAction ? opt.key : opt.value;
5698
- return /* @__PURE__ */ jsxs9(
5751
+ return /* @__PURE__ */ jsxs10(
5699
5752
  "button",
5700
5753
  {
5701
5754
  type: "button",
@@ -5802,17 +5855,8 @@ function SegmentedControl({
5802
5855
  ) });
5803
5856
  }
5804
5857
 
5805
- // useSyncHostBaseUrl.ts
5806
- import { useEffect as useEffect7 } from "react";
5807
- var useSyncHostBaseUrl = (globalUrl) => {
5808
- useEffect7(() => {
5809
- if (!globalUrl) return;
5810
- setHostBaseUrl(globalUrl);
5811
- }, [globalUrl]);
5812
- };
5813
-
5814
- // ShuffleMCP.tsx
5815
- import { Fragment as Fragment5, jsx as jsx14, jsxs as jsxs10 } from "react/jsx-runtime";
5858
+ // views/ShuffleMCP.tsx
5859
+ import { Fragment as Fragment5, jsx as jsx14, jsxs as jsxs11 } from "react/jsx-runtime";
5816
5860
  var DEFAULT_ALGOLIA_APP_ID = "JNSS5CFDZZ";
5817
5861
  var DEFAULT_ALGOLIA_API_KEY = "33e4e3564f4f060e96e0531957bed552";
5818
5862
  var DEFAULT_ALGOLIA_INDEX = "appsearch";
@@ -6173,8 +6217,8 @@ var ShuffleMCP = React3.forwardRef(({
6173
6217
  ...selected ? customStyles.selectedItem : {}
6174
6218
  },
6175
6219
  onClick: () => selectApp(app),
6176
- children: /* @__PURE__ */ jsxs10("div", { className: "singul-app-info", style: customStyles.appInfo, children: [
6177
- /* @__PURE__ */ jsxs10("div", { style: { position: "relative", flexShrink: 0 }, children: [
6220
+ children: /* @__PURE__ */ jsxs11("div", { className: "singul-app-info", style: customStyles.appInfo, children: [
6221
+ /* @__PURE__ */ jsxs11("div", { style: { position: "relative", flexShrink: 0 }, children: [
6178
6222
  /* @__PURE__ */ jsx14(
6179
6223
  AppFallbackIcon,
6180
6224
  {
@@ -6192,8 +6236,8 @@ var ShuffleMCP = React3.forwardRef(({
6192
6236
  }
6193
6237
  )
6194
6238
  ] }),
6195
- /* @__PURE__ */ jsxs10("div", { className: "singul-app-details", style: customStyles.appDetails, children: [
6196
- /* @__PURE__ */ jsxs10(
6239
+ /* @__PURE__ */ jsxs11("div", { className: "singul-app-details", style: customStyles.appDetails, children: [
6240
+ /* @__PURE__ */ jsxs11(
6197
6241
  "span",
6198
6242
  {
6199
6243
  className: "singul-app-name",
@@ -6234,15 +6278,15 @@ var ShuffleMCP = React3.forwardRef(({
6234
6278
  app.objectID
6235
6279
  );
6236
6280
  };
6237
- return /* @__PURE__ */ jsxs10(
6281
+ return /* @__PURE__ */ jsxs11(
6238
6282
  "div",
6239
6283
  {
6240
6284
  ref: containerRef,
6241
6285
  className: `singul-container ${inline ? "singul-inline" : ""} ${className}`,
6242
6286
  style: customStyles.container,
6243
6287
  children: [
6244
- /* @__PURE__ */ jsxs10("div", { className: "singul-search-bar-container", children: [
6245
- /* @__PURE__ */ jsxs10("div", { className: "singul-search-input-wrapper", style: customStyles.inputWrapper, children: [
6288
+ /* @__PURE__ */ jsxs11("div", { className: "singul-search-bar-container", children: [
6289
+ /* @__PURE__ */ jsxs11("div", { className: "singul-search-input-wrapper", style: customStyles.inputWrapper, children: [
6246
6290
  /* @__PURE__ */ jsx14(
6247
6291
  "input",
6248
6292
  {
@@ -6262,7 +6306,7 @@ var ShuffleMCP = React3.forwardRef(({
6262
6306
  autoComplete: "off"
6263
6307
  }
6264
6308
  ),
6265
- /* @__PURE__ */ jsx14("div", { className: "singul-search-icon", style: customStyles.searchIcon, children: /* @__PURE__ */ jsxs10("svg", { width: "16", height: "16", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", children: [
6309
+ /* @__PURE__ */ jsx14("div", { className: "singul-search-icon", style: customStyles.searchIcon, children: /* @__PURE__ */ jsxs11("svg", { width: "16", height: "16", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", children: [
6266
6310
  /* @__PURE__ */ jsx14("circle", { cx: "11", cy: "11", r: "8" }),
6267
6311
  /* @__PURE__ */ jsx14("path", { d: "m21 21-4.35-4.35" })
6268
6312
  ] }) }),
@@ -6291,7 +6335,7 @@ var ShuffleMCP = React3.forwardRef(({
6291
6335
  ...getGridColumnsStyle,
6292
6336
  ...layout === "grid" ? { display: "grid" } : {}
6293
6337
  },
6294
- children: displayResults.length > 0 ? /* @__PURE__ */ jsxs10(Fragment5, { children: [
6338
+ children: displayResults.length > 0 ? /* @__PURE__ */ jsxs11(Fragment5, { children: [
6295
6339
  displayResults.map((app, index) => renderAppItem(app, index)),
6296
6340
  /* @__PURE__ */ jsx14("div", { className: "singul-end-of-results", style: {
6297
6341
  padding: "10px 16px",
@@ -6300,14 +6344,14 @@ var ShuffleMCP = React3.forwardRef(({
6300
6344
  fontSize: "11px",
6301
6345
  gridColumn: "1 / -1"
6302
6346
  }, children: "Can't find what you're looking for? Try a different search term." })
6303
- ] }) : query.trim() ? /* @__PURE__ */ jsx14("div", { className: "singul-empty-state", style: customStyles.emptyState, children: searchError ? /* @__PURE__ */ jsxs10("div", { style: { display: "flex", flexDirection: "column", gap: 4, alignItems: "center", color: searchError.rateLimited ? "hsl(var(--severity-medium))" : "hsl(var(--destructive))" }, children: [
6347
+ ] }) : query.trim() ? /* @__PURE__ */ jsx14("div", { className: "singul-empty-state", style: customStyles.emptyState, children: searchError ? /* @__PURE__ */ jsxs11("div", { style: { display: "flex", flexDirection: "column", gap: 4, alignItems: "center", color: searchError.rateLimited ? "hsl(var(--severity-medium))" : "hsl(var(--destructive))" }, children: [
6304
6348
  /* @__PURE__ */ jsx14("strong", { style: { fontSize: 13 }, children: searchError.rateLimited ? "Algolia rate limit reached (429)" : "Search unavailable" }),
6305
6349
  /* @__PURE__ */ jsx14("span", { style: { fontSize: 12, color: "hsl(var(--muted-foreground))" }, children: searchError.message })
6306
- ] }) : renderEmptyState ? renderEmptyState() : /* @__PURE__ */ jsxs10(Fragment5, { children: [
6350
+ ] }) : renderEmptyState ? renderEmptyState() : /* @__PURE__ */ jsxs11(Fragment5, { children: [
6307
6351
  'No integrations match "',
6308
6352
  query,
6309
6353
  '". Try searching for a different app or category.'
6310
- ] }) }) : /* @__PURE__ */ jsx14("div", { className: "singul-empty-state", style: customStyles.emptyState, children: searchError ? /* @__PURE__ */ jsxs10("div", { style: { display: "flex", flexDirection: "column", gap: 4, alignItems: "center", color: searchError.rateLimited ? "hsl(var(--severity-medium))" : "hsl(var(--destructive))" }, children: [
6354
+ ] }) }) : /* @__PURE__ */ jsx14("div", { className: "singul-empty-state", style: customStyles.emptyState, children: searchError ? /* @__PURE__ */ jsxs11("div", { style: { display: "flex", flexDirection: "column", gap: 4, alignItems: "center", color: searchError.rateLimited ? "hsl(var(--severity-medium))" : "hsl(var(--destructive))" }, children: [
6311
6355
  /* @__PURE__ */ jsx14("strong", { style: { fontSize: 13 }, children: searchError.rateLimited ? "Algolia rate limit reached (429)" : "Search unavailable" }),
6312
6356
  /* @__PURE__ */ jsx14("span", { style: { fontSize: 12, color: "hsl(var(--muted-foreground))" }, children: searchError.message })
6313
6357
  ] }) : /* @__PURE__ */ jsx14(Fragment5, { children: "Start typing to search integrations..." }) })
@@ -6322,10 +6366,10 @@ var ShuffleMCP = React3.forwardRef(({
6322
6366
  ...getGridColumnsStyle,
6323
6367
  ...layout === "grid" ? { display: "grid" } : {}
6324
6368
  },
6325
- children: displayResults.length > 0 ? displayResults.map((app, index) => renderAppItem(app, index)) : /* @__PURE__ */ jsx14("div", { className: "singul-empty-state", style: customStyles.emptyState, children: searchError ? /* @__PURE__ */ jsxs10("div", { style: { display: "flex", flexDirection: "column", gap: 4, alignItems: "center", color: searchError.rateLimited ? "hsl(var(--severity-medium))" : "hsl(var(--destructive))" }, children: [
6369
+ children: displayResults.length > 0 ? displayResults.map((app, index) => renderAppItem(app, index)) : /* @__PURE__ */ jsx14("div", { className: "singul-empty-state", style: customStyles.emptyState, children: searchError ? /* @__PURE__ */ jsxs11("div", { style: { display: "flex", flexDirection: "column", gap: 4, alignItems: "center", color: searchError.rateLimited ? "hsl(var(--severity-medium))" : "hsl(var(--destructive))" }, children: [
6326
6370
  /* @__PURE__ */ jsx14("strong", { style: { fontSize: 13 }, children: searchError.rateLimited ? "Algolia rate limit reached (429)" : "Search unavailable" }),
6327
6371
  /* @__PURE__ */ jsx14("span", { style: { fontSize: 12, color: "hsl(var(--muted-foreground))" }, children: searchError.message })
6328
- ] }) : renderEmptyState ? renderEmptyState() : /* @__PURE__ */ jsxs10(Fragment5, { children: [
6372
+ ] }) : renderEmptyState ? renderEmptyState() : /* @__PURE__ */ jsxs11(Fragment5, { children: [
6329
6373
  'No apps found for "',
6330
6374
  query,
6331
6375
  '"'
@@ -6350,14 +6394,14 @@ var ShuffleMCP = React3.forwardRef(({
6350
6394
  });
6351
6395
  ShuffleMCP.displayName = "ShuffleMCP";
6352
6396
 
6353
- // AppSearchDrawer.tsx
6397
+ // views/AppSearchDrawer.tsx
6354
6398
  import { useState as useState10, useEffect as useEffect9 } from "react";
6355
6399
  import {
6356
6400
  X as CloseIcon3
6357
6401
  } from "lucide-react";
6358
6402
  import { Box as Box9, Typography as Typography9, IconButton as IconButton5, Drawer as Drawer2, Avatar as Avatar6, Tooltip as Tooltip5 } from "@mui/material";
6359
6403
  import { motion as motion8, AnimatePresence as AnimatePresence2 } from "framer-motion";
6360
- import { Fragment as Fragment6, jsx as jsx15, jsxs as jsxs11 } from "react/jsx-runtime";
6404
+ import { Fragment as Fragment6, jsx as jsx15, jsxs as jsxs12 } from "react/jsx-runtime";
6361
6405
  var singulStyles = {
6362
6406
  container: { width: "100%" },
6363
6407
  inputWrapper: {
@@ -6535,8 +6579,8 @@ function AppSearchDrawer({
6535
6579
  setDetailAppName(detail.app.name);
6536
6580
  setDetailAppId(algoliaId);
6537
6581
  };
6538
- return /* @__PURE__ */ jsxs11(Fragment6, { children: [
6539
- /* @__PURE__ */ jsxs11(
6582
+ return /* @__PURE__ */ jsxs12(Fragment6, { children: [
6583
+ /* @__PURE__ */ jsxs12(
6540
6584
  Drawer2,
6541
6585
  {
6542
6586
  anchor,
@@ -6557,7 +6601,7 @@ function AppSearchDrawer({
6557
6601
  }
6558
6602
  },
6559
6603
  children: [
6560
- /* @__PURE__ */ jsxs11(
6604
+ /* @__PURE__ */ jsxs12(
6561
6605
  Box9,
6562
6606
  {
6563
6607
  sx: {
@@ -6570,7 +6614,7 @@ function AppSearchDrawer({
6570
6614
  flexShrink: 0
6571
6615
  },
6572
6616
  children: [
6573
- /* @__PURE__ */ jsxs11(Box9, { sx: { flex: 1 }, children: [
6617
+ /* @__PURE__ */ jsxs12(Box9, { sx: { flex: 1 }, children: [
6574
6618
  /* @__PURE__ */ jsx15(Typography9, { sx: { color: "hsl(var(--foreground))", fontWeight: 700, fontSize: "1rem", lineHeight: 1.2 }, children: title }),
6575
6619
  /* @__PURE__ */ jsx15(Typography9, { sx: { color: "hsl(var(--muted-foreground))", fontSize: "0.75rem" }, children: subtitle })
6576
6620
  ] }),
@@ -6586,10 +6630,10 @@ function AppSearchDrawer({
6586
6630
  ]
6587
6631
  }
6588
6632
  ),
6589
- /* @__PURE__ */ jsxs11(Box9, { sx: { flex: 1, boxSizing: "border-box", overflow: "hidden", p: 3, minHeight: 0, display: "flex", flexDirection: "column" }, children: [
6590
- connectionPathApps && connectionPathApps.length > 0 && /* @__PURE__ */ jsxs11(Box9, { sx: { mb: 2.5 }, children: [
6633
+ /* @__PURE__ */ jsxs12(Box9, { sx: { flex: 1, boxSizing: "border-box", overflow: "hidden", p: 3, minHeight: 0, display: "flex", flexDirection: "column" }, children: [
6634
+ connectionPathApps && connectionPathApps.length > 0 && /* @__PURE__ */ jsxs12(Box9, { sx: { mb: 2.5 }, children: [
6591
6635
  /* @__PURE__ */ jsx15(Typography9, { sx: { color: "hsl(var(--muted-foreground))", fontSize: "0.7rem", fontWeight: 600, textTransform: "uppercase", letterSpacing: "0.05em", mb: 1 }, children: "In this usecase" }),
6592
- /* @__PURE__ */ jsx15(Box9, { sx: { display: "flex", gap: 1.5, flexWrap: "wrap" }, children: connectionPathApps.map((app) => /* @__PURE__ */ jsx15(Tooltip5, { title: app.name.replace(/_/g, " "), arrow: true, placement: "bottom", children: /* @__PURE__ */ jsxs11(
6636
+ /* @__PURE__ */ jsx15(Box9, { sx: { display: "flex", gap: 1.5, flexWrap: "wrap" }, children: connectionPathApps.map((app) => /* @__PURE__ */ jsx15(Tooltip5, { title: app.name.replace(/_/g, " "), arrow: true, placement: "bottom", children: /* @__PURE__ */ jsxs12(
6593
6637
  Box9,
6594
6638
  {
6595
6639
  onClick: () => handleAppSelected({ app: { name: app.name, image_url: app.icon, categories: [] } }),
@@ -6761,10 +6805,10 @@ function AppSearchDrawer({
6761
6805
  ] });
6762
6806
  }
6763
6807
 
6764
- // AiAgentPromptsEditor.tsx
6808
+ // components/AiAgentPromptsEditor.tsx
6765
6809
  import { Box as Box10, Typography as Typography10, IconButton as IconButton6, Tooltip as Tooltip6, Button as Button5, TextField as TextField4 } from "@mui/material";
6766
6810
  import { X as CloseIcon4, Plus as AddIcon2 } from "lucide-react";
6767
- import { jsx as jsx16, jsxs as jsxs12 } from "react/jsx-runtime";
6811
+ import { jsx as jsx16, jsxs as jsxs13 } from "react/jsx-runtime";
6768
6812
  var AiAgentPromptsEditor = ({
6769
6813
  prompts,
6770
6814
  apps,
@@ -6777,10 +6821,10 @@ var AiAgentPromptsEditor = ({
6777
6821
  resolveAppMeta,
6778
6822
  renderPromptInput
6779
6823
  }) => {
6780
- return /* @__PURE__ */ jsxs12(Box10, { sx: { display: "flex", flexDirection: "column", gap: 1.25 }, children: [
6824
+ return /* @__PURE__ */ jsxs13(Box10, { sx: { display: "flex", flexDirection: "column", gap: 1.25 }, children: [
6781
6825
  prompts.map((prompt, idx) => {
6782
6826
  const promptApps = apps[idx] || [];
6783
- return /* @__PURE__ */ jsxs12(
6827
+ return /* @__PURE__ */ jsxs13(
6784
6828
  Box10,
6785
6829
  {
6786
6830
  sx: {
@@ -6793,9 +6837,9 @@ var AiAgentPromptsEditor = ({
6793
6837
  bgcolor: "hsl(var(--muted) / 0.2)"
6794
6838
  },
6795
6839
  children: [
6796
- /* @__PURE__ */ jsxs12(Box10, { sx: { display: "flex", gap: 1, alignItems: "flex-start" }, children: [
6797
- /* @__PURE__ */ jsxs12(Box10, { sx: { flex: 1, minWidth: 0 }, children: [
6798
- /* @__PURE__ */ jsxs12(
6840
+ /* @__PURE__ */ jsxs13(Box10, { sx: { display: "flex", gap: 1, alignItems: "flex-start" }, children: [
6841
+ /* @__PURE__ */ jsxs13(Box10, { sx: { flex: 1, minWidth: 0 }, children: [
6842
+ /* @__PURE__ */ jsxs13(
6799
6843
  Typography10,
6800
6844
  {
6801
6845
  sx: {
@@ -6854,7 +6898,7 @@ var AiAgentPromptsEditor = ({
6854
6898
  }
6855
6899
  )
6856
6900
  ] }),
6857
- /* @__PURE__ */ jsxs12(Box10, { sx: { display: "flex", alignItems: "center", gap: 1, flexWrap: "wrap" }, children: [
6901
+ /* @__PURE__ */ jsxs13(Box10, { sx: { display: "flex", alignItems: "center", gap: 1, flexWrap: "wrap" }, children: [
6858
6902
  /* @__PURE__ */ jsx16(
6859
6903
  Typography10,
6860
6904
  {
@@ -6868,7 +6912,7 @@ var AiAgentPromptsEditor = ({
6868
6912
  children: "Allowed apps"
6869
6913
  }
6870
6914
  ),
6871
- /* @__PURE__ */ jsxs12(Box10, { sx: { display: "flex", alignItems: "center", gap: 0.5, flexWrap: "wrap", flex: 1 }, children: [
6915
+ /* @__PURE__ */ jsxs13(Box10, { sx: { display: "flex", alignItems: "center", gap: 0.5, flexWrap: "wrap", flex: 1 }, children: [
6872
6916
  promptApps.length === 0 && /* @__PURE__ */ jsx16(Typography10, { sx: { fontSize: "0.7rem", color: "hsl(var(--muted-foreground))", opacity: 0.7 }, children: "All authenticated apps" }),
6873
6917
  promptApps.map((appKey) => {
6874
6918
  const meta = resolveAppMeta(appKey);
@@ -6954,16 +6998,16 @@ var AiAgentPromptsEditor = ({
6954
6998
  };
6955
6999
  var AiAgentPromptsEditor_default = AiAgentPromptsEditor;
6956
7000
 
6957
- // ShufflePipelinesBanner.tsx
7001
+ // components/ShufflePipelinesBanner.tsx
6958
7002
  import { Box as Box11, Typography as Typography11, Chip as Chip6 } from "@mui/material";
6959
7003
 
6960
7004
  // ../assets/shuffle-icon.png
6961
7005
  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==";
6962
7006
 
6963
- // ShufflePipelinesBanner.tsx
6964
- import { jsx as jsx17, jsxs as jsxs13 } from "react/jsx-runtime";
7007
+ // components/ShufflePipelinesBanner.tsx
7008
+ import { jsx as jsx17, jsxs as jsxs14 } from "react/jsx-runtime";
6965
7009
  function ShufflePipelinesBanner() {
6966
- return /* @__PURE__ */ jsxs13(
7010
+ return /* @__PURE__ */ jsxs14(
6967
7011
  Box11,
6968
7012
  {
6969
7013
  component: "a",
@@ -6995,7 +7039,7 @@ function ShufflePipelinesBanner() {
6995
7039
  sx: { width: 36, height: 36, borderRadius: "10px", flexShrink: 0 }
6996
7040
  }
6997
7041
  ),
6998
- /* @__PURE__ */ jsxs13(Box11, { sx: { flex: 1, minWidth: 0 }, children: [
7042
+ /* @__PURE__ */ jsxs14(Box11, { sx: { flex: 1, minWidth: 0 }, children: [
6999
7043
  /* @__PURE__ */ jsx17(Typography11, { sx: { fontWeight: 700, fontSize: "0.85rem", color: "hsl(var(--foreground))", lineHeight: 1.3 }, children: "Shuffle Pipelines" }),
7000
7044
  /* @__PURE__ */ jsx17(Typography11, { sx: { fontSize: "0.72rem", color: "hsl(var(--muted-foreground))", lineHeight: 1.4 }, children: "Do not have a SIEM? Shuffle can ingest, parse, and correlate your logs and events directly \u2014 no external SIEM required." })
7001
7045
  ] }),
@@ -7021,7 +7065,7 @@ function ShufflePipelinesBanner() {
7021
7065
  }
7022
7066
  var ShufflePipelinesBanner_default = ShufflePipelinesBanner;
7023
7067
 
7024
- // AgentUI.tsx
7068
+ // components/AgentUI.tsx
7025
7069
  import { useCallback as useCallback8, useEffect as useEffect11, useMemo as useMemo6, useRef as useRef8, useState as useState12 } from "react";
7026
7070
  import {
7027
7071
  Plus as AddIcon3,
@@ -7619,14 +7663,14 @@ var parseScheduleHint = (input) => {
7619
7663
  return null;
7620
7664
  };
7621
7665
 
7622
- // AgentRunDiagnosisBanner.tsx
7666
+ // components/AgentRunDiagnosisBanner.tsx
7623
7667
  import { Box as Box13, IconButton as IconButton7, Tooltip as Tooltip8, Typography as Typography12 } from "@mui/material";
7624
7668
  import { AlertTriangle, ArrowUpRight, HelpCircle, X } from "lucide-react";
7625
7669
 
7626
- // AgentDiagnosisCtas.tsx
7670
+ // components/AgentDiagnosisCtas.tsx
7627
7671
  import { Box as Box12, Button as Button6, Tooltip as Tooltip7 } from "@mui/material";
7628
7672
  import { ExternalLink, Settings2 } from "lucide-react";
7629
- import { jsx as jsx18, jsxs as jsxs14 } from "react/jsx-runtime";
7673
+ import { jsx as jsx18, jsxs as jsxs15 } from "react/jsx-runtime";
7630
7674
  var openLocalLlmTab = (e) => {
7631
7675
  e.stopPropagation();
7632
7676
  window.dispatchEvent(
@@ -7648,7 +7692,7 @@ var AgentDiagnosisCtas = ({ diagnosis, compact = false, tone = "medium" }) => {
7648
7692
  const fontSize = compact ? "0.7rem" : "0.78rem";
7649
7693
  const iconSize = compact ? 12 : 14;
7650
7694
  const px = compact ? 1 : 1.5;
7651
- return /* @__PURE__ */ jsxs14(Box12, { sx: { display: "flex", flexWrap: "wrap", gap: compact ? 0.5 : 1 }, children: [
7695
+ return /* @__PURE__ */ jsxs15(Box12, { sx: { display: "flex", flexWrap: "wrap", gap: compact ? 0.5 : 1 }, children: [
7652
7696
  /* @__PURE__ */ jsx18(Tooltip7, { title: "Configure your own LLM vendor (OpenAI-compatible endpoint)", placement: "top", arrow: true, children: /* @__PURE__ */ jsx18(
7653
7697
  Button6,
7654
7698
  {
@@ -7697,7 +7741,7 @@ var AgentDiagnosisCtas = ({ diagnosis, compact = false, tone = "medium" }) => {
7697
7741
  };
7698
7742
  var AgentDiagnosisCtas_default = AgentDiagnosisCtas;
7699
7743
 
7700
- // AgentRunDiagnosisBanner.tsx
7744
+ // components/AgentRunDiagnosisBanner.tsx
7701
7745
  import { useEffect as useEffect10, useMemo as useMemo5, useState as useState11 } from "react";
7702
7746
 
7703
7747
  // agentDiagnosis.ts
@@ -8056,8 +8100,8 @@ var diagnoseOutputWarning = (run) => {
8056
8100
  return null;
8057
8101
  };
8058
8102
 
8059
- // AgentRunDiagnosisBanner.tsx
8060
- import { jsx as jsx19, jsxs as jsxs15 } from "react/jsx-runtime";
8103
+ // components/AgentRunDiagnosisBanner.tsx
8104
+ import { jsx as jsx19, jsxs as jsxs16 } from "react/jsx-runtime";
8061
8105
  var DISMISS_PREFIX = "agent-diagnosis-dismissed::";
8062
8106
  var readDismissed = (key) => {
8063
8107
  if (!key || typeof window === "undefined") return false;
@@ -8107,7 +8151,7 @@ var AgentRunDiagnosisBanner = ({ run, sx, onJumpToEvidence, executionId }) => {
8107
8151
  if (canJump) onJumpToEvidence(jumpDecisionIndex);
8108
8152
  };
8109
8153
  const showTokenCtas = diagnosis?.kind === "token_limit";
8110
- return /* @__PURE__ */ jsx19(Box13, { sx: { px: 2.5, pb: 0.5, ...sx || {} }, children: /* @__PURE__ */ jsxs15(
8154
+ return /* @__PURE__ */ jsx19(Box13, { sx: { px: 2.5, pb: 0.5, ...sx || {} }, children: /* @__PURE__ */ jsxs16(
8111
8155
  Box13,
8112
8156
  {
8113
8157
  sx: {
@@ -8121,7 +8165,7 @@ var AgentRunDiagnosisBanner = ({ run, sx, onJumpToEvidence, executionId }) => {
8121
8165
  border: `1px solid hsla(var(--severity-${tone}) / 0.18)`
8122
8166
  },
8123
8167
  children: [
8124
- /* @__PURE__ */ jsxs15(
8168
+ /* @__PURE__ */ jsxs16(
8125
8169
  Box13,
8126
8170
  {
8127
8171
  ...canJump ? {
@@ -8212,8 +8256,8 @@ var AgentRunDiagnosisBanner = ({ run, sx, onJumpToEvidence, executionId }) => {
8212
8256
  };
8213
8257
  var AgentRunDiagnosisBanner_default = AgentRunDiagnosisBanner;
8214
8258
 
8215
- // AgentUI.tsx
8216
- import { Fragment as Fragment7, jsx as jsx20, jsxs as jsxs16 } from "react/jsx-runtime";
8259
+ // components/AgentUI.tsx
8260
+ import { Fragment as Fragment7, jsx as jsx20, jsxs as jsxs17 } from "react/jsx-runtime";
8217
8261
  var normalizeMarkdown = (raw) => {
8218
8262
  if (raw == null) return "";
8219
8263
  let s = typeof raw === "string" ? raw : (() => {
@@ -8422,7 +8466,7 @@ var TimelineRow = ({
8422
8466
  );
8423
8467
  const effectiveStatus = runFinished && (item.status === "RUNNING" || item.status === "WAITING") ? "IGNORED" : item.status;
8424
8468
  const barColor = isProcessing ? "hsl(var(--muted-foreground) / 0.45)" : effectiveStatus === "IGNORED" ? STATUS_COLORS.warning : effectiveStatus === "FINISHED" ? STATUS_COLORS.finished : effectiveStatus === "FAILURE" || effectiveStatus === "ABORTED" ? STATUS_COLORS.error : STATUS_COLORS.running;
8425
- return /* @__PURE__ */ jsxs16(
8469
+ return /* @__PURE__ */ jsxs17(
8426
8470
  Box14,
8427
8471
  {
8428
8472
  "data-timeline-index": index,
@@ -8435,7 +8479,7 @@ var TimelineRow = ({
8435
8479
  boxShadow: highlight ? "inset 0 0 0 2px hsla(var(--severity-medium) / 0.55)" : "none"
8436
8480
  },
8437
8481
  children: [
8438
- /* @__PURE__ */ jsxs16(
8482
+ /* @__PURE__ */ jsxs17(
8439
8483
  Box14,
8440
8484
  {
8441
8485
  onClick: isProcessing ? void 0 : onToggle,
@@ -8492,7 +8536,7 @@ var TimelineRow = ({
8492
8536
  transition: "all 0.2s ease"
8493
8537
  } }) }) }),
8494
8538
  /* @__PURE__ */ jsx20(Box14, { sx: { width: 60, fontSize: "0.7rem", color: "hsl(var(--muted-foreground))", textAlign: "right" }, children: dur > 0 ? `${dur.toFixed(2)}s` : "" }),
8495
- /* @__PURE__ */ jsxs16(
8539
+ /* @__PURE__ */ jsxs17(
8496
8540
  Box14,
8497
8541
  {
8498
8542
  sx: { display: "flex", alignItems: "center", gap: 0.25, ml: 1, minWidth: 96, justifyContent: "flex-end" },
@@ -8500,7 +8544,7 @@ var TimelineRow = ({
8500
8544
  if (e.target.closest("button, a")) e.stopPropagation();
8501
8545
  },
8502
8546
  children: [
8503
- item.type === "decision" && details?.run_details?.status === "WAITING" && (item.category === "ask" || details?.action === "ask") && questions.length === 0 && /* @__PURE__ */ jsxs16(Fragment7, { children: [
8547
+ item.type === "decision" && details?.run_details?.status === "WAITING" && (item.category === "ask" || details?.action === "ask") && questions.length === 0 && /* @__PURE__ */ jsxs17(Fragment7, { children: [
8504
8548
  /* @__PURE__ */ jsx20(Tooltip9, { title: "Approve this step", children: /* @__PURE__ */ jsx20("span", { children: /* @__PURE__ */ jsx20(
8505
8549
  IconButton8,
8506
8550
  {
@@ -8569,11 +8613,11 @@ var TimelineRow = ({
8569
8613
  onSubmitQuestions(details.run_details.id, questionAnswers);
8570
8614
  }
8571
8615
  };
8572
- return /* @__PURE__ */ jsxs16(Fragment7, { children: [
8616
+ return /* @__PURE__ */ jsxs17(Fragment7, { children: [
8573
8617
  questions.map((q, qi) => {
8574
8618
  const value = questionAnswers[q.question]?.value || "";
8575
8619
  const isMissing = submitAttempted && !value;
8576
- return /* @__PURE__ */ jsxs16(Box14, { sx: { mt: 2 }, children: [
8620
+ return /* @__PURE__ */ jsxs17(Box14, { sx: { mt: 2 }, children: [
8577
8621
  /* @__PURE__ */ jsx20(Box14, { sx: { fontSize: "0.85rem", color: "hsl(var(--foreground))", mb: 1 }, children: /* @__PURE__ */ jsx20(Markdown, { remarkPlugins: [remarkGfm4, remarkBreaks], children: normalizeMarkdown(q.question) }) }),
8578
8622
  /* @__PURE__ */ jsx20(
8579
8623
  TextField5,
@@ -8606,7 +8650,7 @@ var TimelineRow = ({
8606
8650
  )
8607
8651
  ] }, qi);
8608
8652
  }),
8609
- /* @__PURE__ */ jsxs16(Box14, { sx: { display: "flex", alignItems: "center", gap: 1, mt: 2 }, children: [
8653
+ /* @__PURE__ */ jsxs17(Box14, { sx: { display: "flex", alignItems: "center", gap: 1, mt: 2 }, children: [
8610
8654
  /* @__PURE__ */ jsx20(Tooltip9, { title: !questionsAnswered ? "Please answer all questions first" : "", placement: "top", arrow: true, children: /* @__PURE__ */ jsx20("span", { children: /* @__PURE__ */ jsx20(
8611
8655
  Button8,
8612
8656
  {
@@ -8633,7 +8677,7 @@ var TimelineRow = ({
8633
8677
  ] })
8634
8678
  ] });
8635
8679
  })() }),
8636
- open && runFinished && unansweredQuestions.length > 0 && /* @__PURE__ */ jsxs16(Box14, { sx: { px: 4, pb: 2 }, children: [
8680
+ open && runFinished && unansweredQuestions.length > 0 && /* @__PURE__ */ jsxs17(Box14, { sx: { px: 4, pb: 2 }, children: [
8637
8681
  /* @__PURE__ */ jsx20(Typography13, { sx: { fontSize: "0.7rem", textTransform: "uppercase", letterSpacing: 0.5, color: "hsl(var(--muted-foreground))", mb: 1 }, children: unansweredQuestions.length === 1 ? "Question (unanswered)" : "Questions (unanswered)" }),
8638
8682
  /* @__PURE__ */ jsx20(Box14, { sx: {
8639
8683
  p: 2,
@@ -8653,7 +8697,7 @@ var TimelineRow = ({
8653
8697
  const slug = req.appName.toLowerCase().replace(/[\s-]+/g, "_");
8654
8698
  const appId = req.appId || appsById[req.appName]?.id || appsById[slug]?.id || null;
8655
8699
  const icon = appsById[req.appName]?.icon || appsById[slug]?.icon || (appId ? appsById[appId]?.icon : "") || "";
8656
- return /* @__PURE__ */ jsx20(Box14, { sx: { px: 4, pb: 2 }, children: /* @__PURE__ */ jsxs16(Box14, { sx: {
8700
+ return /* @__PURE__ */ jsx20(Box14, { sx: { px: 4, pb: 2 }, children: /* @__PURE__ */ jsxs17(Box14, { sx: {
8657
8701
  display: "flex",
8658
8702
  alignItems: "center",
8659
8703
  gap: 1.5,
@@ -8663,18 +8707,18 @@ var TimelineRow = ({
8663
8707
  bgcolor: "hsla(var(--severity-medium) / 0.08)"
8664
8708
  }, children: [
8665
8709
  /* @__PURE__ */ jsx20(LockIcon3, { size: 22, color: "hsl(var(--severity-medium))" }),
8666
- /* @__PURE__ */ jsxs16(Box14, { sx: { flex: 1, minWidth: 0 }, children: [
8667
- /* @__PURE__ */ jsxs16(Typography13, { sx: { fontSize: "0.85rem", fontWeight: 600, color: "hsl(var(--foreground))" }, children: [
8710
+ /* @__PURE__ */ jsxs17(Box14, { sx: { flex: 1, minWidth: 0 }, children: [
8711
+ /* @__PURE__ */ jsxs17(Typography13, { sx: { fontSize: "0.85rem", fontWeight: 600, color: "hsl(var(--foreground))" }, children: [
8668
8712
  pretty,
8669
8713
  " requires authentication"
8670
8714
  ] }),
8671
- /* @__PURE__ */ jsxs16(Typography13, { sx: { fontSize: "0.75rem", color: "hsl(var(--muted-foreground))" }, children: [
8715
+ /* @__PURE__ */ jsxs17(Typography13, { sx: { fontSize: "0.75rem", color: "hsl(var(--muted-foreground))" }, children: [
8672
8716
  "Connect your ",
8673
8717
  pretty,
8674
8718
  " account so the agent can complete this step, then rerun the decision."
8675
8719
  ] })
8676
8720
  ] }),
8677
- /* @__PURE__ */ jsxs16(
8721
+ /* @__PURE__ */ jsxs17(
8678
8722
  Button8,
8679
8723
  {
8680
8724
  variant: "outlined",
@@ -9906,14 +9950,14 @@ var AgentUI = ({
9906
9950
  if (cron) setScheduleCron(cron);
9907
9951
  }, [schedFreq, schedInterval, schedHour, schedMinute, schedWeekdays, schedDayOfMonth]);
9908
9952
  const scheduleDisabledReason = scheduleDisabledReasons[0] || "";
9909
- const scheduleDisabledTooltip = scheduleDisabledReasons.length > 1 ? /* @__PURE__ */ jsxs16(Box14, { children: [
9910
- /* @__PURE__ */ jsxs16(Box14, { sx: { fontWeight: 600, mb: 0.5 }, children: [
9953
+ const scheduleDisabledTooltip = scheduleDisabledReasons.length > 1 ? /* @__PURE__ */ jsxs17(Box14, { children: [
9954
+ /* @__PURE__ */ jsxs17(Box14, { sx: { fontWeight: 600, mb: 0.5 }, children: [
9911
9955
  "Cannot schedule for ",
9912
9956
  scheduleDisabledReasons.length,
9913
9957
  " reasons:"
9914
9958
  ] }),
9915
- /* @__PURE__ */ jsx20(Box14, { sx: { m: 0 }, children: scheduleDisabledReasons.map((r, i) => /* @__PURE__ */ jsxs16(Box14, { sx: { mb: 0.5, display: "flex", gap: 0.75 }, children: [
9916
- /* @__PURE__ */ jsxs16(Box14, { component: "span", sx: { fontWeight: 700, flexShrink: 0 }, children: [
9959
+ /* @__PURE__ */ jsx20(Box14, { sx: { m: 0 }, children: scheduleDisabledReasons.map((r, i) => /* @__PURE__ */ jsxs17(Box14, { sx: { mb: 0.5, display: "flex", gap: 0.75 }, children: [
9960
+ /* @__PURE__ */ jsxs17(Box14, { component: "span", sx: { fontWeight: 700, flexShrink: 0 }, children: [
9917
9961
  i + 1,
9918
9962
  "."
9919
9963
  ] }),
@@ -9975,7 +10019,7 @@ var AgentUI = ({
9975
10019
  )
9976
10020
  }
9977
10021
  );
9978
- const schedulePopover = /* @__PURE__ */ jsxs16(
10022
+ const schedulePopover = /* @__PURE__ */ jsxs17(
9979
10023
  Popover,
9980
10024
  {
9981
10025
  open: Boolean(scheduleAnchor),
@@ -10000,7 +10044,7 @@ var AgentUI = ({
10000
10044
  children: [
10001
10045
  /* @__PURE__ */ jsx20(Typography13, { sx: { fontSize: "0.85rem", fontWeight: 600, mb: 0.5 }, children: "Schedule recurring run" }),
10002
10046
  /* @__PURE__ */ jsx20(Typography13, { sx: { fontSize: "0.75rem", color: "hsl(var(--muted-foreground))", mb: 1.5 }, children: "Choose how often this prompt should run. The schedule keeps running until you remove it." }),
10003
- scheduleHint && /* @__PURE__ */ jsxs16(
10047
+ scheduleHint && /* @__PURE__ */ jsxs17(
10004
10048
  Box14,
10005
10049
  {
10006
10050
  sx: {
@@ -10015,7 +10059,7 @@ var AgentUI = ({
10015
10059
  },
10016
10060
  children: [
10017
10061
  /* @__PURE__ */ jsx20(ScheduleIcon, { size: 16, color: "hsl(var(--primary))" }),
10018
- /* @__PURE__ */ jsxs16(Box14, { sx: { flex: 1, minWidth: 0 }, children: [
10062
+ /* @__PURE__ */ jsxs17(Box14, { sx: { flex: 1, minWidth: 0 }, children: [
10019
10063
  /* @__PURE__ */ jsx20(Box14, { sx: { fontSize: "0.7rem", color: "hsl(var(--muted-foreground))", mb: 0.25 }, children: "Detected from your prompt" }),
10020
10064
  /* @__PURE__ */ jsx20(Box14, { sx: { fontSize: "0.78rem", fontWeight: 600, color: "hsl(var(--foreground))" }, children: scheduleHint.label }),
10021
10065
  /* @__PURE__ */ jsx20(Box14, { sx: { fontSize: "0.68rem", fontFamily: "monospace", color: "hsl(var(--muted-foreground))" }, children: scheduleHint.cron })
@@ -10041,7 +10085,7 @@ var AgentUI = ({
10041
10085
  ]
10042
10086
  }
10043
10087
  ),
10044
- /* @__PURE__ */ jsxs16(Box14, { sx: { display: "flex", alignItems: "center", gap: 1, mb: 1.25 }, children: [
10088
+ /* @__PURE__ */ jsxs17(Box14, { sx: { display: "flex", alignItems: "center", gap: 1, mb: 1.25 }, children: [
10045
10089
  /* @__PURE__ */ jsx20(Typography13, { sx: { fontSize: "0.78rem", color: "hsl(var(--muted-foreground))", flexShrink: 0 }, children: "Repeat every" }),
10046
10090
  /* @__PURE__ */ jsx20(
10047
10091
  TextField5,
@@ -10065,7 +10109,7 @@ var AgentUI = ({
10065
10109
  }
10066
10110
  }
10067
10111
  ),
10068
- /* @__PURE__ */ jsxs16(
10112
+ /* @__PURE__ */ jsxs17(
10069
10113
  Select2,
10070
10114
  {
10071
10115
  size: "small",
@@ -10096,7 +10140,7 @@ var AgentUI = ({
10096
10140
  }
10097
10141
  )
10098
10142
  ] }),
10099
- (schedFreq === "days" || schedFreq === "weeks" || schedFreq === "months") && /* @__PURE__ */ jsxs16(Box14, { sx: { display: "flex", alignItems: "center", gap: 1, mb: 1.25 }, children: [
10143
+ (schedFreq === "days" || schedFreq === "weeks" || schedFreq === "months") && /* @__PURE__ */ jsxs17(Box14, { sx: { display: "flex", alignItems: "center", gap: 1, mb: 1.25 }, children: [
10100
10144
  /* @__PURE__ */ jsx20(Typography13, { sx: { fontSize: "0.78rem", color: "hsl(var(--muted-foreground))", flexShrink: 0 }, children: "At" }),
10101
10145
  /* @__PURE__ */ jsx20(
10102
10146
  TextField5,
@@ -10123,7 +10167,7 @@ var AgentUI = ({
10123
10167
  }
10124
10168
  )
10125
10169
  ] }),
10126
- schedFreq === "weeks" && /* @__PURE__ */ jsxs16(Box14, { sx: { mb: 1.25 }, children: [
10170
+ schedFreq === "weeks" && /* @__PURE__ */ jsxs17(Box14, { sx: { mb: 1.25 }, children: [
10127
10171
  /* @__PURE__ */ jsx20(Typography13, { sx: { fontSize: "0.78rem", color: "hsl(var(--muted-foreground))", mb: 0.75 }, children: "Repeat on" }),
10128
10172
  /* @__PURE__ */ jsx20(Box14, { sx: { display: "flex", gap: 0.5 }, children: ["S", "M", "T", "W", "T", "F", "S"].map((label, i) => {
10129
10173
  const active = schedWeekdays.has(i);
@@ -10164,13 +10208,13 @@ var AgentUI = ({
10164
10208
  i
10165
10209
  );
10166
10210
  }) }),
10167
- schedInterval > 1 && /* @__PURE__ */ jsxs16(Typography13, { sx: { fontSize: "0.68rem", color: "hsl(var(--muted-foreground))", mt: 0.75 }, children: [
10211
+ schedInterval > 1 && /* @__PURE__ */ jsxs17(Typography13, { sx: { fontSize: "0.68rem", color: "hsl(var(--muted-foreground))", mt: 0.75 }, children: [
10168
10212
  "Cron does not support every ",
10169
10213
  schedInterval,
10170
10214
  " weeks natively \u2014 this will run weekly on the selected days."
10171
10215
  ] })
10172
10216
  ] }),
10173
- schedFreq === "months" && /* @__PURE__ */ jsxs16(Box14, { sx: { display: "flex", alignItems: "center", gap: 1, mb: 1.25 }, children: [
10217
+ schedFreq === "months" && /* @__PURE__ */ jsxs17(Box14, { sx: { display: "flex", alignItems: "center", gap: 1, mb: 1.25 }, children: [
10174
10218
  /* @__PURE__ */ jsx20(Typography13, { sx: { fontSize: "0.78rem", color: "hsl(var(--muted-foreground))", flexShrink: 0 }, children: "On day" }),
10175
10219
  /* @__PURE__ */ jsx20(
10176
10220
  TextField5,
@@ -10223,8 +10267,8 @@ var AgentUI = ({
10223
10267
  },
10224
10268
  expr
10225
10269
  )) }),
10226
- /* @__PURE__ */ jsxs16(Box14, { sx: { mt: 1.25 }, children: [
10227
- /* @__PURE__ */ jsxs16(
10270
+ /* @__PURE__ */ jsxs17(Box14, { sx: { mt: 1.25 }, children: [
10271
+ /* @__PURE__ */ jsxs17(
10228
10272
  Box14,
10229
10273
  {
10230
10274
  role: "button",
@@ -10267,7 +10311,7 @@ var AgentUI = ({
10267
10311
  }
10268
10312
  }
10269
10313
  ),
10270
- /* @__PURE__ */ jsxs16(Typography13, { sx: { fontSize: "0.68rem", fontFamily: "monospace", color: "hsl(var(--muted-foreground))", mt: 0.75 }, children: [
10314
+ /* @__PURE__ */ jsxs17(Typography13, { sx: { fontSize: "0.68rem", fontFamily: "monospace", color: "hsl(var(--muted-foreground))", mt: 0.75 }, children: [
10271
10315
  "cron: ",
10272
10316
  scheduleCron || "\u2014"
10273
10317
  ] })
@@ -10275,23 +10319,23 @@ var AgentUI = ({
10275
10319
  scheduleSaving && /* @__PURE__ */ jsx20(Box14, { sx: { mt: 2, display: "flex", flexDirection: "column", gap: 0.75, p: 1.25, borderRadius: 1, bgcolor: "hsl(var(--muted))", border: "1px solid hsl(var(--border))" }, children: scheduleSteps.map((s) => {
10276
10320
  const label = s.id === "name" ? "Generating name & description" : s.id === "workflow" ? "Creating workflow" : "Enabling schedule";
10277
10321
  const color = s.state === "done" ? "hsl(var(--primary))" : s.state === "error" ? "hsl(var(--destructive))" : s.state === "active" ? "hsl(var(--foreground))" : "hsl(var(--muted-foreground))";
10278
- return /* @__PURE__ */ jsxs16(Box14, { sx: { display: "flex", alignItems: "center", gap: 1, fontSize: "0.78rem", color }, children: [
10279
- /* @__PURE__ */ jsxs16(Box14, { sx: { width: 16, display: "flex", alignItems: "center", justifyContent: "center" }, children: [
10322
+ return /* @__PURE__ */ jsxs17(Box14, { sx: { display: "flex", alignItems: "center", gap: 1, fontSize: "0.78rem", color }, children: [
10323
+ /* @__PURE__ */ jsxs17(Box14, { sx: { width: 16, display: "flex", alignItems: "center", justifyContent: "center" }, children: [
10280
10324
  s.state === "active" && /* @__PURE__ */ jsx20(CircularProgress4, { size: 12, sx: { color: "hsl(var(--primary))" } }),
10281
10325
  s.state === "done" && /* @__PURE__ */ jsx20(Box14, { sx: { fontSize: "0.85rem", lineHeight: 1, color: "hsl(var(--primary))" }, children: "\u2713" }),
10282
10326
  s.state === "error" && /* @__PURE__ */ jsx20(Box14, { sx: { fontSize: "0.85rem", lineHeight: 1, color: "hsl(var(--destructive))" }, children: "!" }),
10283
10327
  s.state === "pending" && /* @__PURE__ */ jsx20(Box14, { sx: { width: 6, height: 6, borderRadius: "50%", bgcolor: "hsl(var(--muted-foreground))", opacity: 0.4 } })
10284
10328
  ] }),
10285
- /* @__PURE__ */ jsxs16(Box14, { component: "span", sx: { fontFamily: "inherit" }, children: [
10329
+ /* @__PURE__ */ jsxs17(Box14, { component: "span", sx: { fontFamily: "inherit" }, children: [
10286
10330
  label,
10287
- s.detail && s.state !== "pending" && /* @__PURE__ */ jsxs16(Box14, { component: "span", sx: { ml: 0.75, color: "hsl(var(--muted-foreground))", fontFamily: "monospace", fontSize: "0.72rem" }, children: [
10331
+ s.detail && s.state !== "pending" && /* @__PURE__ */ jsxs17(Box14, { component: "span", sx: { ml: 0.75, color: "hsl(var(--muted-foreground))", fontFamily: "monospace", fontSize: "0.72rem" }, children: [
10288
10332
  "\u2014 ",
10289
10333
  s.detail
10290
10334
  ] })
10291
10335
  ] })
10292
10336
  ] }, s.id);
10293
10337
  }) }),
10294
- /* @__PURE__ */ jsxs16(Box14, { sx: { display: "flex", justifyContent: "flex-end", gap: 1, mt: 2 }, children: [
10338
+ /* @__PURE__ */ jsxs17(Box14, { sx: { display: "flex", justifyContent: "flex-end", gap: 1, mt: 2 }, children: [
10295
10339
  /* @__PURE__ */ jsx20(
10296
10340
  Button8,
10297
10341
  {
@@ -10363,7 +10407,7 @@ var AgentUI = ({
10363
10407
  { width: "100%", display: "flex", justifyContent: "center", pb: 4 },
10364
10408
  ...Array.isArray(sx) ? sx : sx ? [sx] : []
10365
10409
  ],
10366
- children: /* @__PURE__ */ jsxs16(
10410
+ children: /* @__PURE__ */ jsxs17(
10367
10411
  Box14,
10368
10412
  {
10369
10413
  sx: [
@@ -10373,7 +10417,7 @@ var AgentUI = ({
10373
10417
  children: [
10374
10418
  showRunSwitcher && tabBar,
10375
10419
  schedulePopover,
10376
- showStarter ? /* @__PURE__ */ jsxs16(
10420
+ showStarter ? /* @__PURE__ */ jsxs17(
10377
10421
  Box14,
10378
10422
  {
10379
10423
  component: "form",
@@ -10408,7 +10452,7 @@ var AgentUI = ({
10408
10452
  mt: -1,
10409
10453
  maxWidth: 600
10410
10454
  }, children: subtitle }),
10411
- /* @__PURE__ */ jsxs16(Box14, { sx: {
10455
+ /* @__PURE__ */ jsxs17(Box14, { sx: {
10412
10456
  width: "100%",
10413
10457
  display: "flex",
10414
10458
  flexDirection: "column",
@@ -10424,7 +10468,7 @@ var AgentUI = ({
10424
10468
  boxShadow: "0 0 0 3px hsla(var(--primary) / 0.12)"
10425
10469
  }
10426
10470
  }, children: [
10427
- attachedImages.length > 0 && /* @__PURE__ */ jsx20(Box14, { sx: { display: "flex", flexWrap: "wrap", gap: 0.75 }, children: attachedImages.map((img, idx) => /* @__PURE__ */ jsxs16(Box14, { sx: {
10471
+ attachedImages.length > 0 && /* @__PURE__ */ jsx20(Box14, { sx: { display: "flex", flexWrap: "wrap", gap: 0.75 }, children: attachedImages.map((img, idx) => /* @__PURE__ */ jsxs17(Box14, { sx: {
10428
10472
  display: "inline-flex",
10429
10473
  alignItems: "center",
10430
10474
  gap: 1,
@@ -10439,7 +10483,7 @@ var AgentUI = ({
10439
10483
  /* @__PURE__ */ jsx20(Typography13, { sx: { fontSize: "0.72rem", color: "hsl(var(--foreground))", maxWidth: 190, overflow: "hidden", textOverflow: "ellipsis", whiteSpace: "nowrap" }, children: img.name }),
10440
10484
  /* @__PURE__ */ jsx20(IconButton8, { size: "small", onClick: () => setAttachedImages((prev) => prev.filter((_, i) => i !== idx)), sx: { p: 0.25, color: "hsl(var(--muted-foreground))", "&:hover": { color: "hsl(var(--destructive))" } }, "aria-label": "Remove attached image", children: /* @__PURE__ */ jsx20(CloseIcon5, { size: 12 }) })
10441
10485
  ] }, `${img.name}-${idx}`)) }),
10442
- /* @__PURE__ */ jsxs16(Box14, { sx: { display: "flex", alignItems: "flex-end", gap: 1, width: "100%" }, children: [
10486
+ /* @__PURE__ */ jsxs17(Box14, { sx: { display: "flex", alignItems: "flex-end", gap: 1, width: "100%" }, children: [
10443
10487
  /* @__PURE__ */ jsx20(
10444
10488
  InputBase2,
10445
10489
  {
@@ -10496,7 +10540,7 @@ var AgentUI = ({
10496
10540
  const canSchedule = (hasExecution || allowWithoutExecution) && !scheduleDisabledReason && !promptTooShort && !disableSchedule;
10497
10541
  const hintActive = Boolean(scheduleHint) && canSchedule;
10498
10542
  const tip = disableSchedule ? disableScheduleTooltip || "Scheduling is disabled while editing" : scheduleDisabledReason ? scheduleDisabledTooltip : promptTooShort ? "Type a prompt before scheduling." : hintActive ? `Detected schedule: ${scheduleHint.label}. Click to review and save.` : "Schedule this prompt to run repeatedly on a cron schedule";
10499
- return /* @__PURE__ */ jsx20(Tooltip9, { title: tip, placement: "top", arrow: true, children: /* @__PURE__ */ jsx20(Box14, { sx: { display: "inline-flex", alignItems: "center", gap: 0.5 }, children: /* @__PURE__ */ jsxs16(
10543
+ return /* @__PURE__ */ jsx20(Tooltip9, { title: tip, placement: "top", arrow: true, children: /* @__PURE__ */ jsx20(Box14, { sx: { display: "inline-flex", alignItems: "center", gap: 0.5 }, children: /* @__PURE__ */ jsxs17(
10500
10544
  IconButton8,
10501
10545
  {
10502
10546
  type: "button",
@@ -10557,7 +10601,7 @@ var AgentUI = ({
10557
10601
  children: /* @__PURE__ */ jsx20(AttachFileIcon, { size: 18 })
10558
10602
  }
10559
10603
  ),
10560
- /* @__PURE__ */ jsx20(Tooltip9, { title: submitTooltip, placement: "top", arrow: true, children: /* @__PURE__ */ jsx20("span", { children: submitLabel ? /* @__PURE__ */ jsxs16(Box14, { sx: { display: "inline-flex", alignItems: "center", gap: 1 }, children: [
10604
+ /* @__PURE__ */ jsx20(Tooltip9, { title: submitTooltip, placement: "top", arrow: true, children: /* @__PURE__ */ jsx20("span", { children: submitLabel ? /* @__PURE__ */ jsxs17(Box14, { sx: { display: "inline-flex", alignItems: "center", gap: 1 }, children: [
10561
10605
  /* @__PURE__ */ jsx20(Tooltip9, { title: "Try this prompt without saving", placement: "top", arrow: true, children: /* @__PURE__ */ jsx20(
10562
10606
  IconButton8,
10563
10607
  {
@@ -10616,7 +10660,7 @@ var AgentUI = ({
10616
10660
  ) }) })
10617
10661
  ] })
10618
10662
  ] }),
10619
- !hideAppPicker && /* @__PURE__ */ jsx20(Box14, { sx: { display: "flex", justifyContent: "center" }, children: /* @__PURE__ */ jsxs16(Box14, { sx: {
10663
+ !hideAppPicker && /* @__PURE__ */ jsx20(Box14, { sx: { display: "flex", justifyContent: "center" }, children: /* @__PURE__ */ jsxs17(Box14, { sx: {
10620
10664
  display: "inline-flex",
10621
10665
  flexWrap: "wrap",
10622
10666
  alignItems: "center",
@@ -10627,7 +10671,7 @@ var AgentUI = ({
10627
10671
  bgcolor: "hsl(var(--card))",
10628
10672
  maxWidth: "100%"
10629
10673
  }, children: [
10630
- !hideChooseLLM && /* @__PURE__ */ jsx20(Tooltip9, { title: "Configure the local LLM used for this agent", children: /* @__PURE__ */ jsxs16(
10674
+ !hideChooseLLM && /* @__PURE__ */ jsx20(Tooltip9, { title: "Configure the local LLM used for this agent", children: /* @__PURE__ */ jsxs17(
10631
10675
  Box14,
10632
10676
  {
10633
10677
  component: "button",
@@ -10671,7 +10715,7 @@ var AgentUI = ({
10671
10715
  ]
10672
10716
  }
10673
10717
  ) }),
10674
- /* @__PURE__ */ jsx20(Tooltip9, { title: agentRequestLoading ? "Locked while the agent is running" : "", children: /* @__PURE__ */ jsxs16(
10718
+ /* @__PURE__ */ jsx20(Tooltip9, { title: agentRequestLoading ? "Locked while the agent is running" : "", children: /* @__PURE__ */ jsxs17(
10675
10719
  Box14,
10676
10720
  {
10677
10721
  component: "button",
@@ -10712,7 +10756,7 @@ var AgentUI = ({
10712
10756
  {
10713
10757
  title: needsAuth ? `${(app.name || "").replace(/_/g, " ")} is not authenticated yet \u2014 click to set it up` : "",
10714
10758
  arrow: true,
10715
- children: /* @__PURE__ */ jsxs16(
10759
+ children: /* @__PURE__ */ jsxs17(
10716
10760
  Box14,
10717
10761
  {
10718
10762
  onClick: needsAuth && !agentRequestLoading ? () => setAuthDrawerApp({ name: app.name, id: app.id || null }) : void 0,
@@ -10772,7 +10816,7 @@ var AgentUI = ({
10772
10816
  return !NO_AUTH.has(slug) && !isAppAuthenticated(a.name || "");
10773
10817
  });
10774
10818
  if (unauthed.length === 0) return null;
10775
- return /* @__PURE__ */ jsx20(Box14, { sx: { display: "flex", justifyContent: "center", mt: -0.5 }, children: /* @__PURE__ */ jsxs16(Box14, { sx: {
10819
+ return /* @__PURE__ */ jsx20(Box14, { sx: { display: "flex", justifyContent: "center", mt: -0.5 }, children: /* @__PURE__ */ jsxs17(Box14, { sx: {
10776
10820
  display: "inline-flex",
10777
10821
  alignItems: "center",
10778
10822
  gap: 1,
@@ -10787,7 +10831,7 @@ var AgentUI = ({
10787
10831
  }, children: [
10788
10832
  /* @__PURE__ */ jsx20(WarningIcon, { size: 14, color: "hsl(var(--severity-medium))" }),
10789
10833
  /* @__PURE__ */ jsx20(Typography13, { sx: { fontSize: "0.75rem", color: "hsl(var(--muted-foreground))" }, children: unauthed.length === 1 ? `${unauthed[0].name.replace(/_/g, " ")} is not authenticated.` : `${unauthed.length} apps are not authenticated.` }),
10790
- /* @__PURE__ */ jsxs16(
10834
+ /* @__PURE__ */ jsxs17(
10791
10835
  Box14,
10792
10836
  {
10793
10837
  component: "button",
@@ -10822,8 +10866,8 @@ var AgentUI = ({
10822
10866
  }, children: error })
10823
10867
  ]
10824
10868
  }
10825
- ) : /* @__PURE__ */ jsxs16(Box14, { children: [
10826
- /* @__PURE__ */ jsxs16(Box14, { sx: {
10869
+ ) : /* @__PURE__ */ jsxs17(Box14, { children: [
10870
+ /* @__PURE__ */ jsxs17(Box14, { sx: {
10827
10871
  display: "flex",
10828
10872
  alignItems: "center",
10829
10873
  gap: 2,
@@ -10848,9 +10892,9 @@ var AgentUI = ({
10848
10892
  }
10849
10893
  }
10850
10894
  ) }, i)) }),
10851
- /* @__PURE__ */ jsxs16(Box14, { sx: { flex: 1, minWidth: 0 }, children: [
10895
+ /* @__PURE__ */ jsxs17(Box14, { sx: { flex: 1, minWidth: 0 }, children: [
10852
10896
  /* @__PURE__ */ jsx20(Typography13, { sx: { fontSize: "0.85rem", color: "hsl(var(--foreground))", fontWeight: 600, overflow: "hidden", textOverflow: "ellipsis", whiteSpace: "nowrap" }, children: agentData?.original_input || actionInput || "Agent run" }),
10853
- /* @__PURE__ */ jsxs16(Typography13, { sx: { fontSize: "0.7rem", color: "hsl(var(--muted-foreground))" }, children: [
10897
+ /* @__PURE__ */ jsxs17(Typography13, { sx: { fontSize: "0.7rem", color: "hsl(var(--muted-foreground))" }, children: [
10854
10898
  "Status: ",
10855
10899
  execution?.status || agentData?.status || "\u2014",
10856
10900
  " \xB7 ",
@@ -10970,11 +11014,11 @@ var AgentUI = ({
10970
11014
  }
10971
11015
  }
10972
11016
  const pendingAnswered = pendingQuestions.every((q) => questionAnswers[q.question]?.value);
10973
- return /* @__PURE__ */ jsxs16(Fragment7, { children: [
10974
- /* @__PURE__ */ jsxs16(Box14, { sx: { display: "flex", alignItems: "center", gap: 1, flexWrap: "wrap" }, children: [
11017
+ return /* @__PURE__ */ jsxs17(Fragment7, { children: [
11018
+ /* @__PURE__ */ jsxs17(Box14, { sx: { display: "flex", alignItems: "center", gap: 1, flexWrap: "wrap" }, children: [
10975
11019
  isRunning ? /* @__PURE__ */ jsx20(CircularProgress4, { size: 16, sx: { color: "hsl(var(--primary))" } }) : status === "FINISHED" ? /* @__PURE__ */ jsx20(CheckCircleIcon4, { size: 18, color: "hsl(142 70% 45%)" }) : /* @__PURE__ */ jsx20(ErrorIcon, { size: 18, color: "hsl(var(--destructive))" }),
10976
11020
  /* @__PURE__ */ jsx20(Typography13, { sx: { fontSize: "0.9rem", fontWeight: 600, color: "hsl(var(--foreground))" }, children: isRunning ? "Agent is working\u2026" : status === "FINISHED" ? "Run finished" : `Run ${status.toLowerCase()}` }),
10977
- /* @__PURE__ */ jsxs16(Typography13, { sx: { fontSize: "0.75rem", color: "hsl(var(--muted-foreground))" }, children: [
11021
+ /* @__PURE__ */ jsxs17(Typography13, { sx: { fontSize: "0.75rem", color: "hsl(var(--muted-foreground))" }, children: [
10978
11022
  decisionCount,
10979
11023
  " step",
10980
11024
  decisionCount === 1 ? "" : "s",
@@ -10984,7 +11028,7 @@ var AgentUI = ({
10984
11028
  ] }),
10985
11029
  pendingAuthApps.map(({ appName, appId, icon }) => {
10986
11030
  const pretty = appName.replace(/_/g, " ").replace(/\b\w/g, (c) => c.toUpperCase());
10987
- return /* @__PURE__ */ jsxs16(
11031
+ return /* @__PURE__ */ jsxs17(
10988
11032
  Box14,
10989
11033
  {
10990
11034
  sx: {
@@ -10998,18 +11042,18 @@ var AgentUI = ({
10998
11042
  },
10999
11043
  children: [
11000
11044
  /* @__PURE__ */ jsx20(LockIcon3, { size: 22, color: "hsl(var(--severity-medium))" }),
11001
- /* @__PURE__ */ jsxs16(Box14, { sx: { flex: 1, minWidth: 0 }, children: [
11002
- /* @__PURE__ */ jsxs16(Typography13, { sx: { fontSize: "0.85rem", fontWeight: 600, color: "hsl(var(--foreground))" }, children: [
11045
+ /* @__PURE__ */ jsxs17(Box14, { sx: { flex: 1, minWidth: 0 }, children: [
11046
+ /* @__PURE__ */ jsxs17(Typography13, { sx: { fontSize: "0.85rem", fontWeight: 600, color: "hsl(var(--foreground))" }, children: [
11003
11047
  pretty,
11004
11048
  " requires authentication"
11005
11049
  ] }),
11006
- /* @__PURE__ */ jsxs16(Typography13, { sx: { fontSize: "0.75rem", color: "hsl(var(--muted-foreground))" }, children: [
11050
+ /* @__PURE__ */ jsxs17(Typography13, { sx: { fontSize: "0.75rem", color: "hsl(var(--muted-foreground))" }, children: [
11007
11051
  "Connect your ",
11008
11052
  pretty,
11009
11053
  " account so the agent can complete this step, then rerun."
11010
11054
  ] })
11011
11055
  ] }),
11012
- /* @__PURE__ */ jsxs16(
11056
+ /* @__PURE__ */ jsxs17(
11013
11057
  Button8,
11014
11058
  {
11015
11059
  variant: "outlined",
@@ -11108,11 +11152,11 @@ var AgentUI = ({
11108
11152
  submitQuestions(pendingAsk.run_details.id, questionAnswers);
11109
11153
  }
11110
11154
  };
11111
- return /* @__PURE__ */ jsxs16(Box14, { sx: { display: "flex", flexDirection: "column", gap: 1.5 }, children: [
11155
+ return /* @__PURE__ */ jsxs17(Box14, { sx: { display: "flex", flexDirection: "column", gap: 1.5 }, children: [
11112
11156
  pendingQuestions.map((q, qi) => {
11113
11157
  const value = questionAnswers[q.question]?.value || "";
11114
11158
  const isMissing = simpleSubmitAttempted && !value;
11115
- return /* @__PURE__ */ jsxs16(Box14, { children: [
11159
+ return /* @__PURE__ */ jsxs17(Box14, { children: [
11116
11160
  /* @__PURE__ */ jsx20(Box14, { sx: { fontSize: "0.9rem", color: "hsl(var(--foreground))", mb: 1, "& p": { my: 0.5 } }, children: /* @__PURE__ */ jsx20(Markdown, { remarkPlugins: [remarkGfm4, remarkBreaks], children: normalizeMarkdown(q.question) }) }),
11117
11161
  /* @__PURE__ */ jsx20(
11118
11162
  TextField5,
@@ -11143,7 +11187,7 @@ var AgentUI = ({
11143
11187
  )
11144
11188
  ] }, qi);
11145
11189
  }),
11146
- /* @__PURE__ */ jsxs16(Box14, { sx: { display: "flex", alignItems: "center", gap: 1 }, children: [
11190
+ /* @__PURE__ */ jsxs17(Box14, { sx: { display: "flex", alignItems: "center", gap: 1 }, children: [
11147
11191
  /* @__PURE__ */ jsx20(Tooltip9, { title: !pendingAnswered ? "Please answer all questions first" : "", placement: "top", arrow: true, children: /* @__PURE__ */ jsx20("span", { children: /* @__PURE__ */ jsx20(
11148
11192
  Button8,
11149
11193
  {
@@ -11191,10 +11235,10 @@ var AgentUI = ({
11191
11235
  border: "1px solid hsl(var(--border))",
11192
11236
  bgcolor: "hsl(var(--card))",
11193
11237
  overflow: "hidden"
11194
- }, children: timeline.length === 0 || timeline.length === 1 && agentRequestLoading ? /* @__PURE__ */ jsxs16(Box14, { sx: { p: 4, textAlign: "center", color: "hsl(var(--muted-foreground))", fontSize: "0.85rem" }, children: [
11238
+ }, children: timeline.length === 0 || timeline.length === 1 && agentRequestLoading ? /* @__PURE__ */ jsxs17(Box14, { sx: { p: 4, textAlign: "center", color: "hsl(var(--muted-foreground))", fontSize: "0.85rem" }, children: [
11195
11239
  /* @__PURE__ */ jsx20(CircularProgress4, { size: 20, sx: { mb: 1 } }),
11196
11240
  /* @__PURE__ */ jsx20(Typography13, { sx: { fontSize: "0.85rem" }, children: "Waiting for agent response\u2026" })
11197
- ] }) : /* @__PURE__ */ jsxs16(Fragment7, { children: [
11241
+ ] }) : /* @__PURE__ */ jsxs17(Fragment7, { children: [
11198
11242
  timeline.map((item, i) => /* @__PURE__ */ jsx20(
11199
11243
  TimelineRow,
11200
11244
  {
@@ -11220,7 +11264,7 @@ var AgentUI = ({
11220
11264
  },
11221
11265
  i
11222
11266
  )),
11223
- detailedRunFinished && /* @__PURE__ */ jsxs16(Box14, { sx: {
11267
+ detailedRunFinished && /* @__PURE__ */ jsxs17(Box14, { sx: {
11224
11268
  borderTop: "1px solid hsl(var(--border))",
11225
11269
  p: 2.5,
11226
11270
  display: "flex",
@@ -11228,7 +11272,7 @@ var AgentUI = ({
11228
11272
  gap: 1.5,
11229
11273
  bgcolor: "hsl(var(--muted) / 0.2)"
11230
11274
  }, children: [
11231
- /* @__PURE__ */ jsxs16(Box14, { sx: { display: "flex", alignItems: "center", gap: 1, flexWrap: "wrap" }, children: [
11275
+ /* @__PURE__ */ jsxs17(Box14, { sx: { display: "flex", alignItems: "center", gap: 1, flexWrap: "wrap" }, children: [
11232
11276
  detailedStatus === "FINISHED" ? /* @__PURE__ */ jsx20(CheckCircleIcon4, { size: 18, color: "hsl(142 70% 45%)" }) : /* @__PURE__ */ jsx20(ErrorIcon, { size: 18, color: "hsl(var(--destructive))" }),
11233
11277
  /* @__PURE__ */ jsx20(Typography13, { sx: { fontSize: "0.9rem", fontWeight: 600, color: "hsl(var(--foreground))" }, children: detailedStatus === "FINISHED" ? "Run finished" : `Run ${detailedStatus.toLowerCase()}` })
11234
11278
  ] }),
@@ -11264,9 +11308,9 @@ var AgentUI = ({
11264
11308
  ] })
11265
11309
  ] }) });
11266
11310
  })(),
11267
- finishDecisionId && /* @__PURE__ */ jsx20(Box14, { sx: { mt: 3, display: "flex", justifyContent: "center" }, children: /* @__PURE__ */ jsxs16(Box14, { sx: { width: "100%", maxWidth: 640 }, children: [
11311
+ finishDecisionId && /* @__PURE__ */ jsx20(Box14, { sx: { mt: 3, display: "flex", justifyContent: "center" }, children: /* @__PURE__ */ jsxs17(Box14, { sx: { width: "100%", maxWidth: 640 }, children: [
11268
11312
  /* @__PURE__ */ jsx20(Typography13, { sx: { fontSize: "0.75rem", color: "hsl(var(--muted-foreground))", mb: 0.75, textAlign: "center" }, children: "Continue this agent run with more details" }),
11269
- /* @__PURE__ */ jsxs16(
11313
+ /* @__PURE__ */ jsxs17(
11270
11314
  Box14,
11271
11315
  {
11272
11316
  component: "form",
@@ -11375,7 +11419,7 @@ var AgentUI = ({
11375
11419
  };
11376
11420
  var AgentUI_default = AgentUI;
11377
11421
 
11378
- // AgentRunDrawer.tsx
11422
+ // components/AgentRunDrawer.tsx
11379
11423
  import { useEffect as useEffect12, useRef as useRef9, useState as useState13 } from "react";
11380
11424
  import {
11381
11425
  Box as Box15,
@@ -11392,7 +11436,7 @@ import {
11392
11436
  ShieldCheck,
11393
11437
  X as CloseIcon6
11394
11438
  } from "lucide-react";
11395
- import { jsx as jsx21, jsxs as jsxs17 } from "react/jsx-runtime";
11439
+ import { jsx as jsx21, jsxs as jsxs18 } from "react/jsx-runtime";
11396
11440
  var TAB_ORDER = ["run", "permissions", "localLLM"];
11397
11441
  var AgentRunDrawer = ({
11398
11442
  open,
@@ -11436,7 +11480,7 @@ var AgentRunDrawer = ({
11436
11480
  });
11437
11481
  const showTabs = visibleTabs.length > 1;
11438
11482
  const safeActiveTab = visibleTabs.includes(activeTab) ? activeTab : "run";
11439
- return /* @__PURE__ */ jsxs17(
11483
+ return /* @__PURE__ */ jsxs18(
11440
11484
  Drawer3,
11441
11485
  {
11442
11486
  anchor: "right",
@@ -11459,7 +11503,7 @@ var AgentRunDrawer = ({
11459
11503
  }
11460
11504
  },
11461
11505
  children: [
11462
- /* @__PURE__ */ jsxs17(
11506
+ /* @__PURE__ */ jsxs18(
11463
11507
  Box15,
11464
11508
  {
11465
11509
  sx: [
@@ -11492,7 +11536,7 @@ var AgentRunDrawer = ({
11492
11536
  children: /* @__PURE__ */ jsx21(AgentIcon_default, { size: 22 })
11493
11537
  }
11494
11538
  ),
11495
- /* @__PURE__ */ jsxs17(Box15, { sx: { flex: 1, minWidth: 0 }, children: [
11539
+ /* @__PURE__ */ jsxs18(Box15, { sx: { flex: 1, minWidth: 0 }, children: [
11496
11540
  /* @__PURE__ */ jsx21(Typography14, { sx: { fontWeight: 600, fontSize: "1.1rem", color: "hsl(var(--foreground))" }, children: title }),
11497
11541
  /* @__PURE__ */ jsx21(Typography14, { sx: { fontSize: "0.8rem", color: "hsl(var(--muted-foreground))" }, children: subtitle })
11498
11542
  ] }),
@@ -11500,7 +11544,7 @@ var AgentRunDrawer = ({
11500
11544
  ]
11501
11545
  }
11502
11546
  ),
11503
- showTabs && /* @__PURE__ */ jsx21(Box15, { sx: { borderBottom: "1px solid hsl(var(--border))", flexShrink: 0 }, children: /* @__PURE__ */ jsxs17(
11547
+ showTabs && /* @__PURE__ */ jsx21(Box15, { sx: { borderBottom: "1px solid hsl(var(--border))", flexShrink: 0 }, children: /* @__PURE__ */ jsxs18(
11504
11548
  Tabs,
11505
11549
  {
11506
11550
  value: safeActiveTab,
@@ -11547,7 +11591,7 @@ var AgentRunDrawer = ({
11547
11591
  Tab,
11548
11592
  {
11549
11593
  value: "localLLM",
11550
- label: /* @__PURE__ */ jsxs17(Box15, { sx: { display: "flex", alignItems: "center", gap: 0.5 }, children: [
11594
+ label: /* @__PURE__ */ jsxs18(Box15, { sx: { display: "flex", alignItems: "center", gap: 0.5 }, children: [
11551
11595
  "Local LLM",
11552
11596
  localLLMTabBadge
11553
11597
  ] }),
@@ -11559,7 +11603,7 @@ var AgentRunDrawer = ({
11559
11603
  ]
11560
11604
  }
11561
11605
  ) }),
11562
- /* @__PURE__ */ jsxs17(Box15, { sx: [{ flex: 1, overflowY: "auto" }, ...Array.isArray(bodySx) ? bodySx : bodySx ? [bodySx] : []], children: [
11606
+ /* @__PURE__ */ jsxs18(Box15, { sx: [{ flex: 1, overflowY: "auto" }, ...Array.isArray(bodySx) ? bodySx : bodySx ? [bodySx] : []], children: [
11563
11607
  safeActiveTab === "run" && /* @__PURE__ */ jsx21(Box15, { sx: { px: 2, py: 2 }, children: /* @__PURE__ */ jsx21(
11564
11608
  AgentUI_default,
11565
11609
  {
@@ -11580,7 +11624,7 @@ var AgentRunDrawer = ({
11580
11624
  };
11581
11625
  var AgentRunDrawer_default = AgentRunDrawer;
11582
11626
 
11583
- // AgentActivityList.tsx
11627
+ // components/AgentActivityList.tsx
11584
11628
  import { useCallback as useCallback9, useEffect as useEffect13, useRef as useRef10, useState as useState14 } from "react";
11585
11629
  import {
11586
11630
  Box as Box16,
@@ -11761,9 +11805,9 @@ var stopAgentSchedule = async (workflowId, params = {}) => {
11761
11805
  if (!res.ok) throw new Error(`Failed to stop schedule: ${res.statusText}`);
11762
11806
  };
11763
11807
 
11764
- // AgentActivityList.tsx
11808
+ // components/AgentActivityList.tsx
11765
11809
  import { Pencil, StopCircle, AlertTriangle as AlertTriangle2 } from "lucide-react";
11766
- import { Fragment as Fragment8, jsx as jsx22, jsxs as jsxs18 } from "react/jsx-runtime";
11810
+ import { Fragment as Fragment8, jsx as jsx22, jsxs as jsxs19 } from "react/jsx-runtime";
11767
11811
  var STATUS_CONFIG = {
11768
11812
  FINISHED: { icon: /* @__PURE__ */ jsx22(CheckCircle, { size: 16 }), color: "hsl(var(--severity-low, 142 71% 45%))", label: "Completed" },
11769
11813
  SUCCESS: { icon: /* @__PURE__ */ jsx22(CheckCircle, { size: 16 }), color: "hsl(var(--severity-low, 142 71% 45%))", label: "Completed" },
@@ -11887,7 +11931,7 @@ var AgentRunRow = ({ run, onClick, sx }) => {
11887
11931
  const iconColor = getRunIconColor(run);
11888
11932
  const duration = formatDuration(run);
11889
11933
  const tools = getRunTools(run);
11890
- return /* @__PURE__ */ jsxs18(
11934
+ return /* @__PURE__ */ jsxs19(
11891
11935
  Box16,
11892
11936
  {
11893
11937
  onClick,
@@ -11928,8 +11972,8 @@ var AgentRunRow = ({ run, onClick, sx }) => {
11928
11972
  children: getRunIcon(run)
11929
11973
  }
11930
11974
  ),
11931
- /* @__PURE__ */ jsxs18(Box16, { sx: { flex: 1, minWidth: 0 }, children: [
11932
- /* @__PURE__ */ jsxs18(Box16, { sx: { display: "flex", alignItems: "center", gap: 1, mb: 0.25 }, children: [
11975
+ /* @__PURE__ */ jsxs19(Box16, { sx: { flex: 1, minWidth: 0 }, children: [
11976
+ /* @__PURE__ */ jsxs19(Box16, { sx: { display: "flex", alignItems: "center", gap: 1, mb: 0.25 }, children: [
11933
11977
  /* @__PURE__ */ jsx22(
11934
11978
  Typography15,
11935
11979
  {
@@ -11959,9 +12003,9 @@ var AgentRunRow = ({ run, onClick, sx }) => {
11959
12003
  children: getRunSubtitle(run)
11960
12004
  }
11961
12005
  ),
11962
- /* @__PURE__ */ jsxs18(Box16, { sx: { display: "flex", alignItems: "center", gap: 1, mt: 0.5 }, children: [
12006
+ /* @__PURE__ */ jsxs19(Box16, { sx: { display: "flex", alignItems: "center", gap: 1, mt: 0.5 }, children: [
11963
12007
  /* @__PURE__ */ jsx22(Typography15, { sx: { fontSize: "0.72rem", color: "hsl(var(--muted-foreground))", opacity: 0.7 }, children: run.started_at ? getTimeAgo(run.started_at) : "\u2014" }),
11964
- duration && /* @__PURE__ */ jsxs18(Fragment8, { children: [
12008
+ duration && /* @__PURE__ */ jsxs19(Fragment8, { children: [
11965
12009
  /* @__PURE__ */ jsx22(Typography15, { sx: { fontSize: "0.72rem", color: "hsl(var(--muted-foreground))", opacity: 0.4 }, children: "\xB7" }),
11966
12010
  /* @__PURE__ */ jsx22(Typography15, { sx: { fontSize: "0.72rem", color: "hsl(var(--muted-foreground))", opacity: 0.7 }, children: duration })
11967
12011
  ] })
@@ -12134,14 +12178,14 @@ var AgentActivityList = ({
12134
12178
  ].filter(Boolean).join(" ").toLowerCase();
12135
12179
  return hay.includes(debouncedQuery.toLowerCase());
12136
12180
  }) : runs;
12137
- return /* @__PURE__ */ jsxs18(
12181
+ return /* @__PURE__ */ jsxs19(
12138
12182
  Box16,
12139
12183
  {
12140
12184
  className,
12141
12185
  sx: [{ display: "flex", flexDirection: "column", gap: 2 }, ...Array.isArray(sx) ? sx : sx ? [sx] : []],
12142
12186
  children: [
12143
- (showSearchBar || showStatusChips) && /* @__PURE__ */ jsxs18(Box16, { sx: [{ display: "flex", alignItems: "center", justifyContent: "center", gap: 1.5, flexWrap: "wrap" }, ...Array.isArray(toolbarSx) ? toolbarSx : toolbarSx ? [toolbarSx] : []], children: [
12144
- /* @__PURE__ */ jsxs18(
12187
+ (showSearchBar || showStatusChips) && /* @__PURE__ */ jsxs19(Box16, { sx: [{ display: "flex", alignItems: "center", justifyContent: "center", gap: 1.5, flexWrap: "wrap" }, ...Array.isArray(toolbarSx) ? toolbarSx : toolbarSx ? [toolbarSx] : []], children: [
12188
+ /* @__PURE__ */ jsxs19(
12145
12189
  Select3,
12146
12190
  {
12147
12191
  size: "small",
@@ -12224,7 +12268,7 @@ var AgentActivityList = ({
12224
12268
  ),
12225
12269
  isLoading && runs.length > 0 && /* @__PURE__ */ jsx22(CircularProgress5, { size: 16, sx: { color: "hsl(var(--primary))", ml: 0.5 } })
12226
12270
  ] }),
12227
- selectedAgentWorkflow && /* @__PURE__ */ jsxs18(
12271
+ selectedAgentWorkflow && /* @__PURE__ */ jsxs19(
12228
12272
  Box16,
12229
12273
  {
12230
12274
  sx: {
@@ -12237,7 +12281,7 @@ var AgentActivityList = ({
12237
12281
  bgcolor: "hsl(var(--card))"
12238
12282
  },
12239
12283
  children: [
12240
- /* @__PURE__ */ jsxs18(Box16, { sx: { flex: 1, minWidth: 0 }, children: [
12284
+ /* @__PURE__ */ jsxs19(Box16, { sx: { flex: 1, minWidth: 0 }, children: [
12241
12285
  /* @__PURE__ */ jsx22(Typography15, { sx: { fontSize: "0.85rem", fontWeight: 600, color: "hsl(var(--foreground))", overflow: "hidden", textOverflow: "ellipsis", whiteSpace: "nowrap" }, children: selectedAgentWorkflow.name }),
12242
12286
  selectedAgentWorkflow.description && /* @__PURE__ */ jsx22(Typography15, { sx: { fontSize: "0.75rem", color: "hsl(var(--muted-foreground))", overflow: "hidden", textOverflow: "ellipsis", whiteSpace: "nowrap" }, children: selectedAgentWorkflow.description })
12243
12287
  ] }),
@@ -12282,7 +12326,7 @@ var AgentActivityList = ({
12282
12326
  ]
12283
12327
  }
12284
12328
  ),
12285
- isLoading && runs.length === 0 ? /* @__PURE__ */ jsx22(Box16, { sx: { display: "flex", justifyContent: "center", py: 8 }, children: /* @__PURE__ */ jsx22(CircularProgress5, { size: 28, sx: { color: "hsl(var(--primary))" } }) }) : error ? /* @__PURE__ */ jsxs18(Box16, { sx: { display: "flex", flexDirection: "column", alignItems: "center", textAlign: "center", py: 6 }, children: [
12329
+ isLoading && runs.length === 0 ? /* @__PURE__ */ jsx22(Box16, { sx: { display: "flex", justifyContent: "center", py: 8 }, children: /* @__PURE__ */ jsx22(CircularProgress5, { size: 28, sx: { color: "hsl(var(--primary))" } }) }) : error ? /* @__PURE__ */ jsxs19(Box16, { sx: { display: "flex", flexDirection: "column", alignItems: "center", textAlign: "center", py: 6 }, children: [
12286
12330
  /* @__PURE__ */ jsx22(AlertCircle, { size: 28, style: { color: "hsl(var(--severity-critical, 0 72% 55%))", marginBottom: 8 } }),
12287
12331
  /* @__PURE__ */ jsx22(
12288
12332
  Typography15,
@@ -12300,7 +12344,7 @@ var AgentActivityList = ({
12300
12344
  children: "Try again"
12301
12345
  }
12302
12346
  )
12303
- ] }) : filteredRuns.length === 0 ? /* @__PURE__ */ jsxs18(Box16, { sx: { display: "flex", flexDirection: "column", alignItems: "center", textAlign: "center", py: 8 }, children: [
12347
+ ] }) : filteredRuns.length === 0 ? /* @__PURE__ */ jsxs19(Box16, { sx: { display: "flex", flexDirection: "column", alignItems: "center", textAlign: "center", py: 8 }, children: [
12304
12348
  /* @__PURE__ */ jsx22(
12305
12349
  Activity,
12306
12350
  {
@@ -12316,7 +12360,7 @@ var AgentActivityList = ({
12316
12360
  children: emptySubtitle
12317
12361
  }
12318
12362
  )
12319
- ] }) : /* @__PURE__ */ jsxs18(Box16, { sx: { display: "flex", flexDirection: "column", gap: 1.5 }, children: [
12363
+ ] }) : /* @__PURE__ */ jsxs19(Box16, { sx: { display: "flex", flexDirection: "column", gap: 1.5 }, children: [
12320
12364
  filteredRuns.map((run, idx) => /* @__PURE__ */ jsx22(
12321
12365
  AgentRunRow,
12322
12366
  {
@@ -12326,7 +12370,7 @@ var AgentActivityList = ({
12326
12370
  },
12327
12371
  run.execution_id || idx
12328
12372
  )),
12329
- hasMore && /* @__PURE__ */ jsx22(Box16, { sx: { display: "flex", justifyContent: "center", mt: 1 }, children: /* @__PURE__ */ jsxs18(
12373
+ hasMore && /* @__PURE__ */ jsx22(Box16, { sx: { display: "flex", justifyContent: "center", mt: 1 }, children: /* @__PURE__ */ jsxs19(
12330
12374
  Button9,
12331
12375
  {
12332
12376
  size: "small",
@@ -12340,7 +12384,7 @@ var AgentActivityList = ({
12340
12384
  }
12341
12385
  ) })
12342
12386
  ] }),
12343
- /* @__PURE__ */ jsxs18(
12387
+ /* @__PURE__ */ jsxs19(
12344
12388
  Dialog2,
12345
12389
  {
12346
12390
  open: stopOpen,
@@ -12348,14 +12392,14 @@ var AgentActivityList = ({
12348
12392
  slotProps: { paper: { sx: { bgcolor: "hsl(var(--card))", color: "hsl(var(--foreground))", border: "1px solid hsl(var(--border))" } } },
12349
12393
  children: [
12350
12394
  /* @__PURE__ */ jsx22(DialogTitle2, { sx: { fontSize: "1rem", fontWeight: 600 }, children: "Stop schedule?" }),
12351
- /* @__PURE__ */ jsx22(DialogContent2, { children: /* @__PURE__ */ jsxs18(Typography15, { sx: { fontSize: "0.85rem", color: "hsl(var(--muted-foreground))" }, children: [
12395
+ /* @__PURE__ */ jsx22(DialogContent2, { children: /* @__PURE__ */ jsxs19(Typography15, { sx: { fontSize: "0.85rem", color: "hsl(var(--muted-foreground))" }, children: [
12352
12396
  'This will stop "',
12353
12397
  selectedAgentWorkflow?.name,
12354
12398
  '" and delete the scheduled workflow. Past executions remain visible. This cannot be undone.'
12355
12399
  ] }) }),
12356
- /* @__PURE__ */ jsxs18(DialogActions, { sx: { px: 3, pb: 2 }, children: [
12400
+ /* @__PURE__ */ jsxs19(DialogActions, { sx: { px: 3, pb: 2 }, children: [
12357
12401
  /* @__PURE__ */ jsx22(Button9, { onClick: () => setStopOpen(false), disabled: stopLoading, sx: { textTransform: "none", color: "hsl(var(--muted-foreground))" }, children: "Cancel" }),
12358
- /* @__PURE__ */ jsxs18(
12402
+ /* @__PURE__ */ jsxs19(
12359
12403
  Button9,
12360
12404
  {
12361
12405
  onClick: confirmStop,
@@ -12377,13 +12421,13 @@ var AgentActivityList = ({
12377
12421
  };
12378
12422
  var AgentActivityList_default = AgentActivityList;
12379
12423
 
12380
- // AgentExecutionDrawer.tsx
12424
+ // components/AgentExecutionDrawer.tsx
12381
12425
  import { Box as Box17, Drawer as Drawer4, IconButton as IconButton10, Tooltip as Tooltip12, Typography as Typography16 } from "@mui/material";
12382
12426
  import {
12383
12427
  X as CloseIcon7,
12384
12428
  ExternalLink as OpenInNewIcon3
12385
12429
  } from "lucide-react";
12386
- import { Fragment as Fragment9, jsx as jsx23, jsxs as jsxs19 } from "react/jsx-runtime";
12430
+ import { Fragment as Fragment9, jsx as jsx23, jsxs as jsxs20 } from "react/jsx-runtime";
12387
12431
  var AgentExecutionDrawer = ({
12388
12432
  open,
12389
12433
  onClose,
@@ -12402,7 +12446,7 @@ var AgentExecutionDrawer = ({
12402
12446
  const statusKey = (run?.status || "").toUpperCase();
12403
12447
  const cfg = STATUS_CONFIG[statusKey] || STATUS_CONFIG.WAITING;
12404
12448
  const duration = run ? formatDuration(run) : "";
12405
- return /* @__PURE__ */ jsxs19(
12449
+ return /* @__PURE__ */ jsxs20(
12406
12450
  Drawer4,
12407
12451
  {
12408
12452
  anchor: "right",
@@ -12425,7 +12469,7 @@ var AgentExecutionDrawer = ({
12425
12469
  }
12426
12470
  },
12427
12471
  children: [
12428
- /* @__PURE__ */ jsxs19(
12472
+ /* @__PURE__ */ jsxs20(
12429
12473
  Box17,
12430
12474
  {
12431
12475
  sx: [
@@ -12461,8 +12505,8 @@ var AgentExecutionDrawer = ({
12461
12505
  children: /* @__PURE__ */ jsx23(AgentIcon_default, { size: 20 })
12462
12506
  }
12463
12507
  ),
12464
- /* @__PURE__ */ jsxs19(Box17, { sx: { flex: 1, minWidth: 0 }, children: [
12465
- /* @__PURE__ */ jsxs19(Box17, { sx: { display: "flex", alignItems: "center", gap: 1, minWidth: 0 }, children: [
12508
+ /* @__PURE__ */ jsxs20(Box17, { sx: { flex: 1, minWidth: 0 }, children: [
12509
+ /* @__PURE__ */ jsxs20(Box17, { sx: { display: "flex", alignItems: "center", gap: 1, minWidth: 0 }, children: [
12466
12510
  /* @__PURE__ */ jsx23(
12467
12511
  Typography16,
12468
12512
  {
@@ -12479,13 +12523,13 @@ var AgentExecutionDrawer = ({
12479
12523
  ),
12480
12524
  run && /* @__PURE__ */ jsx23(Box17, { sx: { display: "flex", alignItems: "center", color: cfg.color, flexShrink: 0 }, children: cfg.icon })
12481
12525
  ] }),
12482
- run && /* @__PURE__ */ jsxs19(Box17, { sx: { display: "flex", alignItems: "center", gap: 1, mt: 0.25 }, children: [
12526
+ run && /* @__PURE__ */ jsxs20(Box17, { sx: { display: "flex", alignItems: "center", gap: 1, mt: 0.25 }, children: [
12483
12527
  /* @__PURE__ */ jsx23(Typography16, { sx: { fontSize: "0.72rem", color: "hsl(var(--muted-foreground))" }, children: cfg.label }),
12484
- run.started_at && /* @__PURE__ */ jsxs19(Fragment9, { children: [
12528
+ run.started_at && /* @__PURE__ */ jsxs20(Fragment9, { children: [
12485
12529
  /* @__PURE__ */ jsx23(Typography16, { sx: { fontSize: "0.72rem", color: "hsl(var(--muted-foreground))", opacity: 0.4 }, children: "\xB7" }),
12486
12530
  /* @__PURE__ */ jsx23(Typography16, { sx: { fontSize: "0.72rem", color: "hsl(var(--muted-foreground))" }, children: getTimeAgo(run.started_at) })
12487
12531
  ] }),
12488
- duration && /* @__PURE__ */ jsxs19(Fragment9, { children: [
12532
+ duration && /* @__PURE__ */ jsxs20(Fragment9, { children: [
12489
12533
  /* @__PURE__ */ jsx23(Typography16, { sx: { fontSize: "0.72rem", color: "hsl(var(--muted-foreground))", opacity: 0.4 }, children: "\xB7" }),
12490
12534
  /* @__PURE__ */ jsx23(Typography16, { sx: { fontSize: "0.72rem", color: "hsl(var(--muted-foreground))" }, children: duration })
12491
12535
  ] })
@@ -12521,7 +12565,7 @@ var AgentExecutionDrawer = ({
12521
12565
  ]
12522
12566
  }
12523
12567
  ),
12524
- /* @__PURE__ */ jsxs19(Box17, { sx: [{ flex: 1, overflowY: "auto", pt: 3 }, ...Array.isArray(bodySx) ? bodySx : bodySx ? [bodySx] : []], children: [
12568
+ /* @__PURE__ */ jsxs20(Box17, { sx: [{ flex: 1, overflowY: "auto", pt: 3 }, ...Array.isArray(bodySx) ? bodySx : bodySx ? [bodySx] : []], children: [
12525
12569
  topBanner,
12526
12570
  run ? /* @__PURE__ */ jsx23(
12527
12571
  AgentUI_default,
@@ -12557,10 +12601,10 @@ var AgentExecutionDrawer = ({
12557
12601
  };
12558
12602
  var AgentExecutionDrawer_default = AgentExecutionDrawer;
12559
12603
 
12560
- // AgentsView.tsx
12604
+ // views/AgentsView.tsx
12561
12605
  import { useCallback as useCallback10, useMemo as useMemo7, useState as useState15 } from "react";
12562
12606
  import { Box as Box18, Stack, Typography as Typography17 } from "@mui/material";
12563
- import { jsx as jsx24, jsxs as jsxs20 } from "react/jsx-runtime";
12607
+ import { jsx as jsx24, jsxs as jsxs21 } from "react/jsx-runtime";
12564
12608
  var AgentsView = ({
12565
12609
  onSchedule,
12566
12610
  maxWidth = 820,
@@ -12588,7 +12632,7 @@ var AgentsView = ({
12588
12632
  tab: "localLLM"
12589
12633
  });
12590
12634
  const effectiveLocalLLMSlot = useMemo7(
12591
- () => localLLMSlot ?? /* @__PURE__ */ jsxs20(Box18, { sx: { p: 3, color: "hsl(var(--muted-foreground))", fontSize: "0.85rem", lineHeight: 1.6 }, children: [
12635
+ () => localLLMSlot ?? /* @__PURE__ */ jsxs21(Box18, { sx: { p: 3, color: "hsl(var(--muted-foreground))", fontSize: "0.85rem", lineHeight: 1.6 }, children: [
12592
12636
  /* @__PURE__ */ jsx24(Typography17, { sx: { fontSize: "0.95rem", fontWeight: 600, color: "hsl(var(--foreground))", mb: 1 }, children: "Local LLM not configured" }),
12593
12637
  "This host hasn't wired a Local LLM picker yet. Pass an",
12594
12638
  " ",
@@ -12642,9 +12686,9 @@ var AgentsView = ({
12642
12686
  },
12643
12687
  [editing]
12644
12688
  );
12645
- return /* @__PURE__ */ jsxs20(Box18, { sx: { minHeight: "100%", width: "100%", px: { xs: 2, md: 4 }, pt: { xs: 3, md: "5vh" }, pb: 6, boxSizing: "border-box" }, children: [
12646
- /* @__PURE__ */ jsxs20(Stack, { spacing: 6, sx: { maxWidth, mx: "auto", width: "100%" }, children: [
12647
- editing && /* @__PURE__ */ jsxs20(
12689
+ return /* @__PURE__ */ jsxs21(Box18, { sx: { minHeight: "100%", width: "100%", px: { xs: 2, md: 4 }, pt: { xs: 3, md: "5vh" }, pb: 6, boxSizing: "border-box" }, children: [
12690
+ /* @__PURE__ */ jsxs21(Stack, { spacing: 6, sx: { maxWidth, mx: "auto", width: "100%" }, children: [
12691
+ editing && /* @__PURE__ */ jsxs21(
12648
12692
  Box18,
12649
12693
  {
12650
12694
  sx: {
@@ -12658,7 +12702,7 @@ var AgentsView = ({
12658
12702
  bgcolor: "hsl(var(--primary) / 0.08)"
12659
12703
  },
12660
12704
  children: [
12661
- /* @__PURE__ */ jsxs20(Typography17, { sx: { fontSize: "0.85rem", color: "hsl(var(--foreground))" }, children: [
12705
+ /* @__PURE__ */ jsxs21(Typography17, { sx: { fontSize: "0.85rem", color: "hsl(var(--foreground))" }, children: [
12662
12706
  "Editing schedule: ",
12663
12707
  /* @__PURE__ */ jsx24("strong", { children: editing.name })
12664
12708
  ] }),
@@ -12876,9 +12920,9 @@ function useAppLookup(appName) {
12876
12920
  };
12877
12921
  }
12878
12922
 
12879
- // UsageBar.tsx
12923
+ // components/UsageBar.tsx
12880
12924
  import { Box as Box19, Typography as Typography18, Tooltip as Tooltip13 } from "@mui/material";
12881
- import { jsx as jsx25, jsxs as jsxs21 } from "react/jsx-runtime";
12925
+ import { jsx as jsx25, jsxs as jsxs22 } from "react/jsx-runtime";
12882
12926
  var fmt = (n) => n.toLocaleString();
12883
12927
  var UsageBar = ({
12884
12928
  label,
@@ -12895,8 +12939,8 @@ var UsageBar = ({
12895
12939
  const isWarn = pct >= 65 && !isOver;
12896
12940
  const accent = isOver ? "hsl(var(--destructive))" : isWarn ? "hsl(var(--severity-medium))" : "hsl(var(--muted-foreground))";
12897
12941
  const tooltipText = safeLimit > 0 ? `${pct.toFixed(0)}% used \xB7 ${fmt(usage)} / ${fmt(safeLimit)}${unit ? " " + unit : ""}${hint ? " \xB7 " + hint : ""}` : `${fmt(usage)}${unit ? " " + unit : ""}${hint ? " \xB7 " + hint : ""}`;
12898
- return /* @__PURE__ */ jsx25(Tooltip13, { title: tooltipText, placement: "top", arrow: true, children: /* @__PURE__ */ jsxs21(Box19, { sx: { display: "flex", flexDirection: "column", gap: 0.5, py: 0.25 }, children: [
12899
- /* @__PURE__ */ jsxs21(Box19, { sx: { display: "flex", alignItems: "center", justifyContent: "space-between", gap: 1 }, children: [
12942
+ return /* @__PURE__ */ jsx25(Tooltip13, { title: tooltipText, placement: "top", arrow: true, children: /* @__PURE__ */ jsxs22(Box19, { sx: { display: "flex", flexDirection: "column", gap: 0.5, py: 0.25 }, children: [
12943
+ /* @__PURE__ */ jsxs22(Box19, { sx: { display: "flex", alignItems: "center", justifyContent: "space-between", gap: 1 }, children: [
12900
12944
  /* @__PURE__ */ jsx25(
12901
12945
  Typography18,
12902
12946
  {
@@ -12909,7 +12953,7 @@ var UsageBar = ({
12909
12953
  children: label
12910
12954
  }
12911
12955
  ),
12912
- /* @__PURE__ */ jsxs21(Box19, { sx: { display: "flex", alignItems: "center", gap: 1 }, children: [
12956
+ /* @__PURE__ */ jsxs22(Box19, { sx: { display: "flex", alignItems: "center", gap: 1 }, children: [
12913
12957
  actionLabel && actionHref && (isWarn || isOver) && /* @__PURE__ */ jsx25(
12914
12958
  Box19,
12915
12959
  {