@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.js CHANGED
@@ -448,7 +448,7 @@ __export(index_exports, {
448
448
  useSyncHostBaseUrl: () => useSyncHostBaseUrl
449
449
  });
450
450
  module.exports = __toCommonJS(index_exports);
451
- var import_shuffle_mcp2 = require("./shuffle-mcp-CN72CJJQ.css");
451
+ var import_shuffle_mcp2 = require("./shuffle-mcp-ER33P3W2.css");
452
452
  var import_react20 = __toESM(require("react"));
453
453
 
454
454
  // ShuffleMcpThemeProvider.tsx
@@ -459,15 +459,34 @@ var readHtmlDarkClass = () => {
459
459
  if (typeof document === "undefined") return false;
460
460
  return document.documentElement.classList.contains("dark");
461
461
  };
462
- var useHtmlDarkClass = (enabled) => {
462
+ var readAncestorDark = (anchor) => {
463
+ if (!anchor || typeof document === "undefined") return null;
464
+ const start = anchor.parentElement;
465
+ if (!start) return null;
466
+ const scoped = start.closest('[data-shuffle-mode="dark"], [data-shuffle-mode="light"]');
467
+ if (scoped) return scoped.getAttribute("data-shuffle-mode") === "dark";
468
+ const darkAncestor = start.closest(".dark");
469
+ if (darkAncestor) return true;
470
+ return null;
471
+ };
472
+ var useAutoDarkClass = (enabled, anchorRef) => {
463
473
  const [isDark, setIsDark] = import_react.default.useState(() => enabled ? readHtmlDarkClass() : false);
464
- import_react.default.useEffect(() => {
474
+ import_react.default.useLayoutEffect(() => {
465
475
  if (!enabled || typeof document === "undefined") return;
466
- setIsDark(readHtmlDarkClass());
467
- const observer = new MutationObserver(() => setIsDark(readHtmlDarkClass()));
476
+ const recompute = () => {
477
+ const ancestor = readAncestorDark(anchorRef.current);
478
+ setIsDark(ancestor !== null ? ancestor : readHtmlDarkClass());
479
+ };
480
+ recompute();
481
+ const observer = new MutationObserver(recompute);
468
482
  observer.observe(document.documentElement, { attributes: true, attributeFilter: ["class"] });
483
+ let node = anchorRef.current?.parentElement ?? null;
484
+ while (node) {
485
+ observer.observe(node, { attributes: true, attributeFilter: ["class", "data-shuffle-mode"] });
486
+ node = node.parentElement;
487
+ }
469
488
  return () => observer.disconnect();
470
- }, [enabled]);
489
+ }, [enabled, anchorRef]);
471
490
  return isDark;
472
491
  };
473
492
  var ShuffleMcpThemeContext = import_react.default.createContext(null);
@@ -554,10 +573,12 @@ var ShuffleMcpThemeProvider = ({
554
573
  }) => {
555
574
  const parent = (0, import_material.useTheme)();
556
575
  const parentCtx = useShuffleMcpTheme();
557
- const htmlIsDark = useHtmlDarkClass(mode === "auto");
558
- const effectiveDark = mode === "auto" ? htmlIsDark : mode === "dark";
576
+ const anchorRef = import_react.default.useRef(null);
577
+ const autoIsDark = useAutoDarkClass(mode === "auto", anchorRef);
578
+ const effectiveDark = mode === "auto" ? autoIsDark : mode === "dark";
559
579
  const sameAsParent = parentCtx !== null && parentCtx.isDark === effectiveDark;
560
580
  const scopeClassName = effectiveDark ? "shuffle-mcp-scope dark" : "shuffle-mcp-scope";
581
+ const resolvedModeAttr = effectiveDark ? "dark" : "light";
561
582
  const merged = import_react.default.useMemo(
562
583
  () => (0, import_material.createTheme)({
563
584
  ...parent,
@@ -577,18 +598,24 @@ var ShuffleMcpThemeProvider = ({
577
598
  [mode, effectiveDark, scopeClassName]
578
599
  );
579
600
  if (sameAsParent) {
580
- return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(ShuffleMcpThemeContext.Provider, { value: ctxValue, children });
601
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(ShuffleMcpThemeContext.Provider, { value: ctxValue, children: [
602
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", { ref: anchorRef, style: { display: "none" }, "aria-hidden": true }),
603
+ children
604
+ ] });
581
605
  }
582
- return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(ShuffleMcpThemeContext.Provider, { value: ctxValue, children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_material.ThemeProvider, { theme: merged, children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: scopeClassName, "data-shuffle-mode": mode, "data-shuffle-mcp-root": true, children }) }) });
606
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(ShuffleMcpThemeContext.Provider, { value: ctxValue, children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_material.ThemeProvider, { theme: merged, children: /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { className: scopeClassName, "data-shuffle-mode": resolvedModeAttr, "data-shuffle-mcp-root": true, children: [
607
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", { ref: anchorRef, style: { display: "none" }, "aria-hidden": true }),
608
+ children
609
+ ] }) }) });
583
610
  };
584
611
 
585
- // ShuffleMCP.tsx
612
+ // views/ShuffleMCP.tsx
586
613
  var import_react12 = __toESM(require("react"));
587
614
  var import_algoliasearch = require("algoliasearch");
588
615
  var import_material10 = require("@mui/material");
589
616
 
590
- // AppDetailDrawer.tsx
591
- var import_react10 = require("react");
617
+ // views/AppDetailDrawer.tsx
618
+ var import_react11 = require("react");
592
619
 
593
620
  // toast.ts
594
621
  var defaultImpl = (arg, opts) => {
@@ -612,7 +639,7 @@ base.info = (msg, opts) => _impl({ title: msg, description: opts?.description, v
612
639
  base.warning = (msg, opts) => _impl({ title: msg, description: opts?.description, variant: "warning" }, opts);
613
640
  var toast = base;
614
641
 
615
- // AppDetailDrawer.tsx
642
+ // views/AppDetailDrawer.tsx
616
643
  var import_lucide_react6 = require("lucide-react");
617
644
 
618
645
  // datastore.ts
@@ -1049,7 +1076,7 @@ var DATASTORE_CATEGORIES = {
1049
1076
  LEGACY_CASES: "shuffle-security_cases"
1050
1077
  };
1051
1078
 
1052
- // AppDetailDrawer.tsx
1079
+ // views/AppDetailDrawer.tsx
1053
1080
  var import_material9 = require("@mui/material");
1054
1081
  var import_react_markdown3 = __toESM(require("react-markdown"));
1055
1082
  var import_remark_gfm3 = __toESM(require("remark-gfm"));
@@ -1059,7 +1086,7 @@ var import_framer_motion6 = require("framer-motion");
1059
1086
  var import_react4 = require("react");
1060
1087
  init_api();
1061
1088
 
1062
- // IntegrationStatus.tsx
1089
+ // components/IntegrationStatus.tsx
1063
1090
  var import_react3 = require("react");
1064
1091
  var import_lucide_react = require("lucide-react");
1065
1092
  var import_material2 = require("@mui/material");
@@ -1115,7 +1142,7 @@ var fetchAuthenticatedApps = (crossOrgId) => {
1115
1142
  return promise;
1116
1143
  };
1117
1144
 
1118
- // IntegrationStatus.tsx
1145
+ // components/IntegrationStatus.tsx
1119
1146
  init_appsCache();
1120
1147
 
1121
1148
  // auth-utils.ts
@@ -1338,7 +1365,7 @@ function extractValidatedIngestionApps(authApiResponse, workflowAppNames) {
1338
1365
  return apps;
1339
1366
  }
1340
1367
 
1341
- // IntegrationStatus.tsx
1368
+ // components/IntegrationStatus.tsx
1342
1369
  var import_jsx_runtime3 = require("react/jsx-runtime");
1343
1370
  var ONBOARDING_CONFIG_CATEGORY = "shuffle-security_onboarding";
1344
1371
  var SELECTED_TOOLS_KEY = "selected_tools";
@@ -1988,11 +2015,11 @@ function useAppAuth() {
1988
2015
  };
1989
2016
  }
1990
2017
 
1991
- // AppDetailDrawer.tsx
2018
+ // views/AppDetailDrawer.tsx
1992
2019
  init_api();
1993
2020
  init_appsCache();
1994
2021
 
1995
- // AppTitleHeader.tsx
2022
+ // components/AppTitleHeader.tsx
1996
2023
  var import_material3 = require("@mui/material");
1997
2024
  var import_lucide_react2 = require("lucide-react");
1998
2025
  var import_framer_motion = require("framer-motion");
@@ -2120,17 +2147,17 @@ function AppTitleHeader({
2120
2147
  ) });
2121
2148
  }
2122
2149
 
2123
- // AppAuthSection.tsx
2150
+ // components/AppAuthSection.tsx
2124
2151
  var import_material5 = require("@mui/material");
2125
2152
  var import_framer_motion3 = require("framer-motion");
2126
2153
 
2127
- // AppAuthConfig.tsx
2128
- var import_react6 = require("react");
2154
+ // components/AppAuthConfig.tsx
2155
+ var import_react7 = require("react");
2129
2156
  var import_lucide_react3 = require("lucide-react");
2130
2157
  var import_material4 = require("@mui/material");
2131
2158
  var import_framer_motion2 = require("framer-motion");
2132
2159
 
2133
- // AppFallbackIcon.tsx
2160
+ // components/AppFallbackIcon.tsx
2134
2161
  var import_react5 = require("react");
2135
2162
  var import_jsx_runtime5 = require("react/jsx-runtime");
2136
2163
  var norm = (s) => s.toLowerCase().replace(/[\s_\-]+/g, "_");
@@ -2276,8 +2303,20 @@ var AppFallbackIcon = ({
2276
2303
  );
2277
2304
  };
2278
2305
 
2279
- // AppAuthConfig.tsx
2306
+ // components/AppAuthConfig.tsx
2307
+ init_api();
2308
+
2309
+ // useSyncHostBaseUrl.ts
2310
+ var import_react6 = require("react");
2280
2311
  init_api();
2312
+ var useSyncHostBaseUrl = (globalUrl) => {
2313
+ (0, import_react6.useEffect)(() => {
2314
+ if (!globalUrl) return;
2315
+ setHostBaseUrl(globalUrl);
2316
+ }, [globalUrl]);
2317
+ };
2318
+
2319
+ // components/AppAuthConfig.tsx
2281
2320
  var import_react_markdown = __toESM(require("react-markdown"));
2282
2321
  var import_remark_gfm = __toESM(require("remark-gfm"));
2283
2322
  var import_jsx_runtime6 = require("react/jsx-runtime");
@@ -2333,8 +2372,14 @@ var AppAuthCard = ({
2333
2372
  hideStatusChips,
2334
2373
  hideDocsLink,
2335
2374
  hideUrlFields,
2336
- borderless
2375
+ borderless,
2376
+ globalUrl,
2377
+ userdata,
2378
+ isLoaded,
2379
+ isLoggedIn,
2380
+ serverside
2337
2381
  }) => {
2382
+ useSyncHostBaseUrl(globalUrl);
2338
2383
  const getBestDefaultAuth = (entries) => {
2339
2384
  if (entries.length === 0) return ADD_NEW_AUTH;
2340
2385
  const validatedEntry = entries.find((e) => e.validation?.valid === true);
@@ -2344,15 +2389,15 @@ var AppAuthCard = ({
2344
2389
  const lastEntry = entries[entries.length - 1];
2345
2390
  return lastEntry.id || lastEntry.label || "0";
2346
2391
  };
2347
- const [selectedAuthId, setSelectedAuthId] = (0, import_react6.useState)(() => {
2392
+ const [selectedAuthId, setSelectedAuthId] = (0, import_react7.useState)(() => {
2348
2393
  return getBestDefaultAuth(apiAuthEntries);
2349
2394
  });
2350
- const [userHasSelected, setUserHasSelected] = (0, import_react6.useState)(false);
2351
- const [testStatusPerAuth, setTestStatusPerAuth] = (0, import_react6.useState)({});
2352
- const [testMessagesPerAuth, setTestMessagesPerAuth] = (0, import_react6.useState)({});
2353
- const [testingAuthId, setTestingAuthId] = (0, import_react6.useState)(null);
2354
- const [deleteConfirmAuthId, setDeleteConfirmAuthId] = (0, import_react6.useState)(null);
2355
- const [deleting, setDeleting] = (0, import_react6.useState)(false);
2395
+ const [userHasSelected, setUserHasSelected] = (0, import_react7.useState)(false);
2396
+ const [testStatusPerAuth, setTestStatusPerAuth] = (0, import_react7.useState)({});
2397
+ const [testMessagesPerAuth, setTestMessagesPerAuth] = (0, import_react7.useState)({});
2398
+ const [testingAuthId, setTestingAuthId] = (0, import_react7.useState)(null);
2399
+ const [deleteConfirmAuthId, setDeleteConfirmAuthId] = (0, import_react7.useState)(null);
2400
+ const [deleting, setDeleting] = (0, import_react7.useState)(false);
2356
2401
  const handleDeleteAuth = async (authId) => {
2357
2402
  setDeleting(true);
2358
2403
  try {
@@ -2376,10 +2421,10 @@ var AppAuthCard = ({
2376
2421
  }
2377
2422
  };
2378
2423
  const localTestStatus = testStatusPerAuth[selectedAuthId] || "untested";
2379
- const [wasPreValidatedPerAuth, setWasPreValidatedPerAuth] = (0, import_react6.useState)({});
2380
- const prevEntryCountRef = (0, import_react6.useRef)(apiAuthEntries.length);
2381
- const autoTestFiredRef = (0, import_react6.useRef)(null);
2382
- (0, import_react6.useEffect)(() => {
2424
+ const [wasPreValidatedPerAuth, setWasPreValidatedPerAuth] = (0, import_react7.useState)({});
2425
+ const prevEntryCountRef = (0, import_react7.useRef)(apiAuthEntries.length);
2426
+ const autoTestFiredRef = (0, import_react7.useRef)(null);
2427
+ (0, import_react7.useEffect)(() => {
2383
2428
  if (apiAuthEntries.length > 0) {
2384
2429
  if (apiAuthEntries.length > prevEntryCountRef.current) {
2385
2430
  const sorted = [...apiAuthEntries].sort((a, b) => {
@@ -2408,7 +2453,7 @@ var AppAuthCard = ({
2408
2453
  }
2409
2454
  prevEntryCountRef.current = apiAuthEntries.length;
2410
2455
  }, [apiAuthEntries, userHasSelected]);
2411
- (0, import_react6.useEffect)(() => {
2456
+ (0, import_react7.useEffect)(() => {
2412
2457
  if (wasPreValidatedPerAuth[selectedAuthId] === void 0) {
2413
2458
  const currentAuth = apiAuthEntries.find(
2414
2459
  (auth2) => (auth2.id || auth2.label || "") === selectedAuthId
@@ -2430,7 +2475,7 @@ var AppAuthCard = ({
2430
2475
  };
2431
2476
  const localTestMessages = testMessagesPerAuth[selectedAuthId] || {};
2432
2477
  const wasPreValidated = wasPreValidatedPerAuth[selectedAuthId] || false;
2433
- (0, import_react6.useEffect)(() => {
2478
+ (0, import_react7.useEffect)(() => {
2434
2479
  if (!testingAuthId) return;
2435
2480
  if (authState.status === "testing") {
2436
2481
  setTestStatusForAuth(testingAuthId, "testing");
@@ -2484,19 +2529,19 @@ var AppAuthCard = ({
2484
2529
  minute: "2-digit"
2485
2530
  });
2486
2531
  };
2487
- const [localCredentials, setLocalCredentials] = (0, import_react6.useState)(authState.credentials || {});
2488
- const [fieldErrors, setFieldErrors] = (0, import_react6.useState)({});
2489
- const [loading, setLoading] = (0, import_react6.useState)(false);
2490
- const [saving, setSaving] = (0, import_react6.useState)(false);
2491
- const [saveSuccess, setSaveSuccess] = (0, import_react6.useState)(null);
2492
- const [error, setError] = (0, import_react6.useState)(null);
2493
- const [appConfig, setAppConfig] = (0, import_react6.useState)(null);
2494
- (0, import_react6.useEffect)(() => {
2532
+ const [localCredentials, setLocalCredentials] = (0, import_react7.useState)(authState.credentials || {});
2533
+ const [fieldErrors, setFieldErrors] = (0, import_react7.useState)({});
2534
+ const [loading, setLoading] = (0, import_react7.useState)(false);
2535
+ const [saving, setSaving] = (0, import_react7.useState)(false);
2536
+ const [saveSuccess, setSaveSuccess] = (0, import_react7.useState)(null);
2537
+ const [error, setError] = (0, import_react7.useState)(null);
2538
+ const [appConfig, setAppConfig] = (0, import_react7.useState)(null);
2539
+ (0, import_react7.useEffect)(() => {
2495
2540
  if (isExpanded && onRefreshAuth) {
2496
2541
  onRefreshAuth();
2497
2542
  }
2498
2543
  }, [isExpanded]);
2499
- (0, import_react6.useEffect)(() => {
2544
+ (0, import_react7.useEffect)(() => {
2500
2545
  const fetchAppConfig = async () => {
2501
2546
  if (!isExpanded || appConfig) return;
2502
2547
  setLoading(true);
@@ -2529,13 +2574,13 @@ var AppAuthCard = ({
2529
2574
  }, [isExpanded, app.objectID, appConfig]);
2530
2575
  const auth = appConfig?.authentication;
2531
2576
  const isOAuth2 = isOAuth2Type(auth?.type);
2532
- const [selectedScopes, setSelectedScopes] = (0, import_react6.useState)([]);
2533
- (0, import_react6.useEffect)(() => {
2577
+ const [selectedScopes, setSelectedScopes] = (0, import_react7.useState)([]);
2578
+ (0, import_react7.useEffect)(() => {
2534
2579
  if (auth?.scope) {
2535
2580
  setSelectedScopes(auth.scope);
2536
2581
  }
2537
2582
  }, [auth?.scope]);
2538
- (0, import_react6.useEffect)(() => {
2583
+ (0, import_react7.useEffect)(() => {
2539
2584
  if (disableUrlPrefill) return;
2540
2585
  if (!auth?.parameters || auth.parameters.length === 0) return;
2541
2586
  const urlDefaults = {};
@@ -2552,7 +2597,7 @@ var AppAuthCard = ({
2552
2597
  setLocalCredentials((prev) => ({ ...urlDefaults, ...prev }));
2553
2598
  }
2554
2599
  }, [auth?.parameters, disableUrlPrefill]);
2555
- (0, import_react6.useEffect)(() => {
2600
+ (0, import_react7.useEffect)(() => {
2556
2601
  const incoming = authState.credentials || {};
2557
2602
  setLocalCredentials((prev) => {
2558
2603
  let changed = false;
@@ -2568,12 +2613,12 @@ var AppAuthCard = ({
2568
2613
  return changed ? next : prev;
2569
2614
  });
2570
2615
  }, [authState.credentials]);
2571
- const [docsOpen, setDocsOpen] = (0, import_react6.useState)(false);
2572
- const [docsContent, setDocsContent] = (0, import_react6.useState)("");
2573
- const [docsLoading, setDocsLoading] = (0, import_react6.useState)(false);
2574
- const [editingLabel, setEditingLabel] = (0, import_react6.useState)(false);
2575
- const [editLabelValue, setEditLabelValue] = (0, import_react6.useState)("");
2576
- const [savingLabel, setSavingLabel] = (0, import_react6.useState)(false);
2616
+ const [docsOpen, setDocsOpen] = (0, import_react7.useState)(false);
2617
+ const [docsContent, setDocsContent] = (0, import_react7.useState)("");
2618
+ const [docsLoading, setDocsLoading] = (0, import_react7.useState)(false);
2619
+ const [editingLabel, setEditingLabel] = (0, import_react7.useState)(false);
2620
+ const [editLabelValue, setEditLabelValue] = (0, import_react7.useState)("");
2621
+ const [savingLabel, setSavingLabel] = (0, import_react7.useState)(false);
2577
2622
  const handleRenameAuth = async () => {
2578
2623
  if (!selectedAuth || !editLabelValue.trim()) return;
2579
2624
  setSavingLabel(true);
@@ -2969,8 +3014,8 @@ var AppAuthCard = ({
2969
3014
  {
2970
3015
  sx: {
2971
3016
  background: "transparent",
2972
- border: borderless ? "none" : "1px solid",
2973
- borderColor: borderless ? "transparent" : isTested ? "hsl(var(--severity-low) / 0.5)" : authState.status === "error" ? "hsl(var(--destructive) / 0.3)" : "hsl(var(--border))",
3017
+ border: borderless ? "none" : "2px solid",
3018
+ borderColor: borderless ? "transparent" : isTested ? "hsl(var(--severity-low) / 0.9)" : authState.status === "error" ? "hsl(var(--destructive) / 0.7)" : "hsl(var(--border))",
2974
3019
  borderRadius: borderless ? 0 : 3,
2975
3020
  boxShadow: "none",
2976
3021
  overflow: "hidden",
@@ -4012,8 +4057,14 @@ var AppAuthConfig = ({
4012
4057
  onTestConnection,
4013
4058
  onSaveAuth,
4014
4059
  onSelectAuth,
4015
- onRefreshAuth
4060
+ onRefreshAuth,
4061
+ globalUrl,
4062
+ userdata,
4063
+ isLoaded,
4064
+ isLoggedIn,
4065
+ serverside
4016
4066
  }) => {
4067
+ useSyncHostBaseUrl(globalUrl);
4017
4068
  const getApiAuthEntries = (app) => {
4018
4069
  const normalize = (n) => n.toLowerCase().replace(/[\s_\-]+/g, "_");
4019
4070
  return authenticatedApps.filter((auth) => normalize(auth.app?.name || "") === normalize(app.name)).map((auth) => ({
@@ -4032,8 +4083,8 @@ var AppAuthConfig = ({
4032
4083
  const entries = getApiAuthEntries(app);
4033
4084
  return entries.some((e) => e.validation?.valid === true);
4034
4085
  };
4035
- const initialSortRef = (0, import_react6.useRef)(null);
4036
- const authAppsLoadedRef = (0, import_react6.useRef)(false);
4086
+ const initialSortRef = (0, import_react7.useRef)(null);
4087
+ const authAppsLoadedRef = (0, import_react7.useRef)(false);
4037
4088
  if (!authAppsLoadedRef.current && authenticatedApps.length > 0) {
4038
4089
  authAppsLoadedRef.current = true;
4039
4090
  initialSortRef.current = null;
@@ -4056,7 +4107,7 @@ var AppAuthConfig = ({
4056
4107
  const firstNotConfigured = sortedApps.find((app) => !isAppConfigured(app));
4057
4108
  const firstNotValidated = sortedApps.find((app) => !isAppValidated(app));
4058
4109
  const defaultExpanded = firstNotConfigured?.objectID || firstNotValidated?.objectID || false;
4059
- const [expanded, setExpanded] = (0, import_react6.useState)(defaultExpanded);
4110
+ const [expanded, setExpanded] = (0, import_react7.useState)(defaultExpanded);
4060
4111
  if (apps.length === 0) {
4061
4112
  return /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(
4062
4113
  import_material4.Alert,
@@ -4116,6 +4167,11 @@ var AppAuthConfig = ({
4116
4167
  return /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(
4117
4168
  AppAuthCard,
4118
4169
  {
4170
+ globalUrl,
4171
+ userdata,
4172
+ isLoaded,
4173
+ isLoggedIn,
4174
+ serverside,
4119
4175
  app,
4120
4176
  authState,
4121
4177
  isExpanded,
@@ -4133,7 +4189,7 @@ var AppAuthConfig = ({
4133
4189
  ] });
4134
4190
  };
4135
4191
 
4136
- // AppAuthSection.tsx
4192
+ // components/AppAuthSection.tsx
4137
4193
  var import_jsx_runtime7 = require("react/jsx-runtime");
4138
4194
  function AppAuthSection({
4139
4195
  displayName,
@@ -4170,19 +4226,19 @@ function AppAuthSection({
4170
4226
  ] }) });
4171
4227
  }
4172
4228
 
4173
- // TryMcpSection.tsx
4229
+ // views/TryMcpSection.tsx
4174
4230
  var import_material7 = require("@mui/material");
4175
4231
  var import_framer_motion5 = require("framer-motion");
4176
4232
 
4177
- // AppMcpChat.tsx
4178
- var import_react7 = require("react");
4233
+ // views/AppMcpChat.tsx
4234
+ var import_react8 = require("react");
4179
4235
  var import_lucide_react4 = require("lucide-react");
4180
4236
  var import_material6 = require("@mui/material");
4181
4237
 
4182
4238
  // ../assets/singul-agent-icon.png
4183
4239
  var singul_agent_icon_default = "data:image/png;base64,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";
4184
4240
 
4185
- // AgentIcon.tsx
4241
+ // components/AgentIcon.tsx
4186
4242
  var import_jsx_runtime8 = require("react/jsx-runtime");
4187
4243
  var AgentIcon = ({ size = 16, className, style }) => /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(
4188
4244
  "img",
@@ -4197,7 +4253,7 @@ var AgentIcon = ({ size = 16, className, style }) => /* @__PURE__ */ (0, import_
4197
4253
  );
4198
4254
  var AgentIcon_default = AgentIcon;
4199
4255
 
4200
- // AppMcpChat.tsx
4256
+ // views/AppMcpChat.tsx
4201
4257
  var import_framer_motion4 = require("framer-motion");
4202
4258
  var import_react_markdown2 = __toESM(require("react-markdown"));
4203
4259
  var import_remark_gfm2 = __toESM(require("remark-gfm"));
@@ -4331,14 +4387,14 @@ function getPrimaryCategory(appName, categories) {
4331
4387
  return null;
4332
4388
  }
4333
4389
  var AppMcpChat = ({ appName, appIcon, appId, categories }) => {
4334
- const [input, setInput] = (0, import_react7.useState)("");
4335
- const [runState, setRunState] = (0, import_react7.useState)("idle");
4336
- const [query, setQuery] = (0, import_react7.useState)("");
4337
- const [result, setResult] = (0, import_react7.useState)("");
4338
- const [isError, setIsError] = (0, import_react7.useState)(false);
4339
- const inputRef = (0, import_react7.useRef)(null);
4340
- const suggestions = (0, import_react7.useMemo)(() => getSuggestions(appName, categories), [appName, categories]);
4341
- const primaryCategory = (0, import_react7.useMemo)(() => getPrimaryCategory(appName, categories), [appName, categories]);
4390
+ const [input, setInput] = (0, import_react8.useState)("");
4391
+ const [runState, setRunState] = (0, import_react8.useState)("idle");
4392
+ const [query, setQuery] = (0, import_react8.useState)("");
4393
+ const [result, setResult] = (0, import_react8.useState)("");
4394
+ const [isError, setIsError] = (0, import_react8.useState)(false);
4395
+ const inputRef = (0, import_react8.useRef)(null);
4396
+ const suggestions = (0, import_react8.useMemo)(() => getSuggestions(appName, categories), [appName, categories]);
4397
+ const primaryCategory = (0, import_react8.useMemo)(() => getPrimaryCategory(appName, categories), [appName, categories]);
4342
4398
  const MIN_INPUT_LENGTH = 6;
4343
4399
  const runAction = async () => {
4344
4400
  const trimmed = input.trim();
@@ -4772,7 +4828,7 @@ ${JSON.stringify(data, null, 2)}
4772
4828
  };
4773
4829
  var AppMcpChat_default = AppMcpChat;
4774
4830
 
4775
- // TryMcpSection.tsx
4831
+ // views/TryMcpSection.tsx
4776
4832
  var import_jsx_runtime10 = require("react/jsx-runtime");
4777
4833
  function TryMcpSection({ appName, appIcon, appId, categories }) {
4778
4834
  return /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(import_framer_motion5.motion.div, { initial: { opacity: 0, y: 12 }, animate: { opacity: 1, y: 0 }, transition: { duration: 0.3, delay: 0.15 }, children: /* @__PURE__ */ (0, import_jsx_runtime10.jsxs)(import_material7.Box, { sx: { mt: 5, mb: 3 }, children: [
@@ -4789,8 +4845,8 @@ function TryMcpSection({ appName, appIcon, appId, categories }) {
4789
4845
  ] }) });
4790
4846
  }
4791
4847
 
4792
- // SingulActionsPreview.tsx
4793
- var import_react8 = require("react");
4848
+ // components/SingulActionsPreview.tsx
4849
+ var import_react9 = require("react");
4794
4850
  var import_material8 = require("@mui/material");
4795
4851
  var import_lucide_react5 = require("lucide-react");
4796
4852
  init_api();
@@ -4798,7 +4854,7 @@ var import_react18_json_view = __toESM(require("react18-json-view"));
4798
4854
  var import_style = require("react18-json-view/src/style.css");
4799
4855
  var import_dark = require("react18-json-view/src/dark.css");
4800
4856
  var import_jsx_runtime11 = require("react/jsx-runtime");
4801
- var import_react9 = require("react");
4857
+ var import_react10 = require("react");
4802
4858
  var deepParseJsonStrings = (obj, depth = 0) => {
4803
4859
  if (depth > 5) return obj;
4804
4860
  if (typeof obj === "string") {
@@ -5055,29 +5111,29 @@ var SingulActionsPreview = ({
5055
5111
  activeOrgId,
5056
5112
  onAuthenticate
5057
5113
  }) => {
5058
- const defaultCategory = (0, import_react8.useMemo)(() => pickDefaultCategory(categories), [categories]);
5114
+ const defaultCategory = (0, import_react9.useMemo)(() => pickDefaultCategory(categories), [categories]);
5059
5115
  const actions = ALL_ACTIONS;
5060
- const sortedActions = (0, import_react8.useMemo)(() => {
5116
+ const sortedActions = (0, import_react9.useMemo)(() => {
5061
5117
  const inCat = actions.filter((a) => a.category === defaultCategory);
5062
5118
  const rest = actions.filter((a) => a.category !== defaultCategory);
5063
5119
  return [...inCat, ...rest];
5064
5120
  }, [actions, defaultCategory]);
5065
5121
  const isDisabled = false;
5066
- const [selected, setSelected] = (0, import_react8.useState)(null);
5067
- const [lang, setLang] = (0, import_react8.useState)("curl");
5068
- const [snippet, setSnippet] = (0, import_react8.useState)("");
5069
- const curlOpts = (0, import_react8.useMemo)(() => {
5122
+ const [selected, setSelected] = (0, import_react9.useState)(null);
5123
+ const [lang, setLang] = (0, import_react9.useState)("curl");
5124
+ const [snippet, setSnippet] = (0, import_react9.useState)("");
5125
+ const curlOpts = (0, import_react9.useMemo)(() => {
5070
5126
  const apiKey = API_CONFIG.apiKey;
5071
5127
  const trackedOrg = getTrackedOrgId();
5072
5128
  const orgId = trackedOrg && activeOrgId && trackedOrg !== activeOrgId ? trackedOrg : null;
5073
5129
  const baseUrl = API_CONFIG.baseUrl;
5074
5130
  return { apiKey, orgId, baseUrl };
5075
5131
  }, [activeOrgId]);
5076
- const buildSnippet = (0, import_react8.useCallback)(
5132
+ const buildSnippet = (0, import_react9.useCallback)(
5077
5133
  (action, l) => l === "python" ? buildSingulPython(appName, action, curlOpts) : buildSingulCurl(appName, action, curlOpts),
5078
5134
  [appName, curlOpts]
5079
5135
  );
5080
- (0, import_react8.useEffect)(() => {
5136
+ (0, import_react9.useEffect)(() => {
5081
5137
  const initial = sortedActions[0] || null;
5082
5138
  setSelected(initial);
5083
5139
  setSnippet(buildSnippet(initial, lang));
@@ -5095,10 +5151,10 @@ var SingulActionsPreview = ({
5095
5151
  toast.error("Copy failed");
5096
5152
  }
5097
5153
  };
5098
- const [playLoading, setPlayLoading] = (0, import_react8.useState)(false);
5099
- const [playResult, setPlayResult] = (0, import_react8.useState)(null);
5100
- const responseRef = (0, import_react8.useRef)(null);
5101
- const [copied, setCopied] = (0, import_react8.useState)(false);
5154
+ const [playLoading, setPlayLoading] = (0, import_react9.useState)(false);
5155
+ const [playResult, setPlayResult] = (0, import_react9.useState)(null);
5156
+ const responseRef = (0, import_react9.useRef)(null);
5157
+ const [copied, setCopied] = (0, import_react9.useState)(false);
5102
5158
  const scrollToResponse = () => {
5103
5159
  requestAnimationFrame(() => {
5104
5160
  responseRef.current?.scrollIntoView({ behavior: "smooth", block: "nearest" });
@@ -5166,7 +5222,7 @@ var SingulActionsPreview = ({
5166
5222
  scrollToResponse();
5167
5223
  }
5168
5224
  };
5169
- const lineCount = (0, import_react8.useMemo)(() => Math.max(snippet.split("\n").length, 1), [snippet]);
5225
+ const lineCount = (0, import_react9.useMemo)(() => Math.max(snippet.split("\n").length, 1), [snippet]);
5170
5226
  return /* @__PURE__ */ (0, import_jsx_runtime11.jsxs)(import_material8.Box, { sx: { mt: 5, mb: 3, opacity: isDisabled ? 0.55 : 1 }, children: [
5171
5227
  /* @__PURE__ */ (0, import_jsx_runtime11.jsxs)(import_material8.Box, { sx: { display: "flex", alignItems: "center", gap: 1, mb: 1.5 }, children: [
5172
5228
  /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(import_material8.Typography, { sx: { color: "hsl(var(--foreground))", fontWeight: 600, fontSize: "0.95rem" }, children: "Try individual actions" }),
@@ -5216,7 +5272,7 @@ var SingulActionsPreview = ({
5216
5272
  groupBy: (o) => o.category,
5217
5273
  getOptionLabel: (o) => o?.label ?? "",
5218
5274
  isOptionEqualToValue: (a, b) => a?.name === b?.name && a?.category === b?.category,
5219
- renderOption: (props, option) => /* @__PURE__ */ (0, import_react9.createElement)("li", { ...props, key: `${option.category}-${option.name}` }, /* @__PURE__ */ (0, import_jsx_runtime11.jsxs)(import_material8.Box, { sx: { display: "flex", flexDirection: "column" }, children: [
5275
+ renderOption: (props, option) => /* @__PURE__ */ (0, import_react10.createElement)("li", { ...props, key: `${option.category}-${option.name}` }, /* @__PURE__ */ (0, import_jsx_runtime11.jsxs)(import_material8.Box, { sx: { display: "flex", flexDirection: "column" }, children: [
5220
5276
  /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(import_material8.Typography, { sx: { fontSize: "0.78rem", color: "hsl(var(--foreground))" }, children: option.label }),
5221
5277
  /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(import_material8.Typography, { sx: { fontFamily: "'JetBrains Mono', monospace", fontSize: "0.65rem", color: "hsl(var(--muted-foreground))" }, children: option.name })
5222
5278
  ] })),
@@ -5589,7 +5645,7 @@ var SingulActionsPreview = ({
5589
5645
  };
5590
5646
  var SingulActionsPreview_default = SingulActionsPreview;
5591
5647
 
5592
- // AppDetailDrawer.tsx
5648
+ // views/AppDetailDrawer.tsx
5593
5649
  var import_jsx_runtime12 = require("react/jsx-runtime");
5594
5650
  function AppDetailDrawer({
5595
5651
  open,
@@ -5603,15 +5659,15 @@ function AppDetailDrawer({
5603
5659
  isAuthenticated = true,
5604
5660
  activeOrgId
5605
5661
  }) {
5606
- const [appInfo, setAppInfo] = (0, import_react10.useState)(null);
5607
- const [appLoading, setAppLoading] = (0, import_react10.useState)(true);
5608
- const [isActivated, setIsActivated] = (0, import_react10.useState)(null);
5609
- const [activatedAppId, setActivatedAppId] = (0, import_react10.useState)(null);
5610
- const [activateLoading, setActivateLoading] = (0, import_react10.useState)(false);
5611
- const [resolvedAlgoliaId, setResolvedAlgoliaId] = (0, import_react10.useState)(null);
5612
- const [authExpanded, setAuthExpanded] = (0, import_react10.useState)(true);
5613
- const lastValidAuthRef = (0, import_react10.useRef)(null);
5614
- const [incidentStats, setIncidentStats] = (0, import_react10.useState)(null);
5662
+ const [appInfo, setAppInfo] = (0, import_react11.useState)(null);
5663
+ const [appLoading, setAppLoading] = (0, import_react11.useState)(true);
5664
+ const [isActivated, setIsActivated] = (0, import_react11.useState)(null);
5665
+ const [activatedAppId, setActivatedAppId] = (0, import_react11.useState)(null);
5666
+ const [activateLoading, setActivateLoading] = (0, import_react11.useState)(false);
5667
+ const [resolvedAlgoliaId, setResolvedAlgoliaId] = (0, import_react11.useState)(null);
5668
+ const [authExpanded, setAuthExpanded] = (0, import_react11.useState)(true);
5669
+ const lastValidAuthRef = (0, import_react11.useRef)(null);
5670
+ const [incidentStats, setIncidentStats] = (0, import_react11.useState)(null);
5615
5671
  const {
5616
5672
  authStates,
5617
5673
  authenticatedApps,
@@ -5621,7 +5677,7 @@ function AppDetailDrawer({
5621
5677
  handleSaveAuth,
5622
5678
  refreshAuth
5623
5679
  } = useAppAuth();
5624
- (0, import_react10.useEffect)(() => {
5680
+ (0, import_react11.useEffect)(() => {
5625
5681
  if (!open || !appName) return;
5626
5682
  setAppLoading(true);
5627
5683
  setAppInfo(null);
@@ -5713,7 +5769,7 @@ function AppDetailDrawer({
5713
5769
  setAppLoading(false);
5714
5770
  })();
5715
5771
  }, [open, appName, appId]);
5716
- (0, import_react10.useEffect)(() => {
5772
+ (0, import_react11.useEffect)(() => {
5717
5773
  if (!open || !appName || !isAuthenticated) {
5718
5774
  setIncidentStats(null);
5719
5775
  return;
@@ -5752,13 +5808,13 @@ function AppDetailDrawer({
5752
5808
  onRefresh?.();
5753
5809
  onClose();
5754
5810
  };
5755
- const matchingEntries = (0, import_react10.useMemo)(() => {
5811
+ const matchingEntries = (0, import_react11.useMemo)(() => {
5756
5812
  if (!appName || !isAuthenticated) return [];
5757
5813
  return authenticatedApps.filter(
5758
5814
  (auth) => auth.app?.name?.toLowerCase().replace(/[\s_\-]+/g, "_") === appName.toLowerCase().replace(/[\s_\-]+/g, "_")
5759
5815
  );
5760
5816
  }, [appName, authenticatedApps, isAuthenticated]);
5761
- const resolvedImage = (0, import_react10.useMemo)(() => {
5817
+ const resolvedImage = (0, import_react11.useMemo)(() => {
5762
5818
  if (appInfo?.large_image) return appInfo.large_image;
5763
5819
  for (const entry of matchingEntries) {
5764
5820
  const img = entry.app?.large_image || entry.large_image;
@@ -5766,7 +5822,7 @@ function AppDetailDrawer({
5766
5822
  }
5767
5823
  return "";
5768
5824
  }, [appInfo, matchingEntries]);
5769
- const algoliaApp = (0, import_react10.useMemo)(() => {
5825
+ const algoliaApp = (0, import_react11.useMemo)(() => {
5770
5826
  if (!appName) return null;
5771
5827
  return {
5772
5828
  objectID: resolvedAlgoliaId || appName,
@@ -5782,12 +5838,12 @@ function AppDetailDrawer({
5782
5838
  const effectiveActivated = isActivated === null ? hasAnyAuth ? true : null : isActivated || hasAnyAuth;
5783
5839
  const authCount = matchingEntries.length;
5784
5840
  const displayName = (appInfo?.name || appName || "").replace(/_/g, " ");
5785
- (0, import_react10.useEffect)(() => {
5841
+ (0, import_react11.useEffect)(() => {
5786
5842
  if (lastValidAuthRef.current === hasValidAuth) return;
5787
5843
  lastValidAuthRef.current = hasValidAuth;
5788
5844
  setAuthExpanded(!hasValidAuth);
5789
5845
  }, [hasValidAuth]);
5790
- (0, import_react10.useEffect)(() => {
5846
+ (0, import_react11.useEffect)(() => {
5791
5847
  lastValidAuthRef.current = null;
5792
5848
  }, [appName]);
5793
5849
  const handleActivateToggle = async () => {
@@ -5961,11 +6017,11 @@ function AppDetailDrawer({
5961
6017
  );
5962
6018
  }
5963
6019
 
5964
- // ShuffleMCP.tsx
5965
- var import_shuffle_mcp = require("./shuffle-mcp-CN72CJJQ.css");
6020
+ // views/ShuffleMCP.tsx
6021
+ var import_shuffle_mcp = require("./shuffle-mcp-ER33P3W2.css");
5966
6022
  init_appsCache();
5967
6023
 
5968
- // SegmentedControl.tsx
6024
+ // components/SegmentedControl.tsx
5969
6025
  var React2 = __toESM(require("react"));
5970
6026
  var import_framer_motion7 = require("framer-motion");
5971
6027
  var import_jsx_runtime13 = require("react/jsx-runtime");
@@ -6162,17 +6218,7 @@ function SegmentedControl({
6162
6218
  ) });
6163
6219
  }
6164
6220
 
6165
- // useSyncHostBaseUrl.ts
6166
- var import_react11 = require("react");
6167
- init_api();
6168
- var useSyncHostBaseUrl = (globalUrl) => {
6169
- (0, import_react11.useEffect)(() => {
6170
- if (!globalUrl) return;
6171
- setHostBaseUrl(globalUrl);
6172
- }, [globalUrl]);
6173
- };
6174
-
6175
- // ShuffleMCP.tsx
6221
+ // views/ShuffleMCP.tsx
6176
6222
  var import_jsx_runtime14 = require("react/jsx-runtime");
6177
6223
  var DEFAULT_ALGOLIA_APP_ID = "JNSS5CFDZZ";
6178
6224
  var DEFAULT_ALGOLIA_API_KEY = "33e4e3564f4f060e96e0531957bed552";
@@ -6711,7 +6757,7 @@ var ShuffleMCP = import_react12.default.forwardRef(({
6711
6757
  });
6712
6758
  ShuffleMCP.displayName = "ShuffleMCP";
6713
6759
 
6714
- // AppSearchDrawer.tsx
6760
+ // views/AppSearchDrawer.tsx
6715
6761
  var import_react13 = require("react");
6716
6762
  var import_lucide_react7 = require("lucide-react");
6717
6763
  var import_material11 = require("@mui/material");
@@ -7121,7 +7167,7 @@ function AppSearchDrawer({
7121
7167
  ] });
7122
7168
  }
7123
7169
 
7124
- // AiAgentPromptsEditor.tsx
7170
+ // components/AiAgentPromptsEditor.tsx
7125
7171
  var import_material12 = require("@mui/material");
7126
7172
  var import_lucide_react8 = require("lucide-react");
7127
7173
  var import_jsx_runtime16 = require("react/jsx-runtime");
@@ -7314,13 +7360,13 @@ var AiAgentPromptsEditor = ({
7314
7360
  };
7315
7361
  var AiAgentPromptsEditor_default = AiAgentPromptsEditor;
7316
7362
 
7317
- // ShufflePipelinesBanner.tsx
7363
+ // components/ShufflePipelinesBanner.tsx
7318
7364
  var import_material13 = require("@mui/material");
7319
7365
 
7320
7366
  // ../assets/shuffle-icon.png
7321
7367
  var shuffle_icon_default = "data:image/png;base64,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";
7322
7368
 
7323
- // ShufflePipelinesBanner.tsx
7369
+ // components/ShufflePipelinesBanner.tsx
7324
7370
  var import_jsx_runtime17 = require("react/jsx-runtime");
7325
7371
  function ShufflePipelinesBanner() {
7326
7372
  return /* @__PURE__ */ (0, import_jsx_runtime17.jsxs)(
@@ -7381,7 +7427,7 @@ function ShufflePipelinesBanner() {
7381
7427
  }
7382
7428
  var ShufflePipelinesBanner_default = ShufflePipelinesBanner;
7383
7429
 
7384
- // AgentUI.tsx
7430
+ // components/AgentUI.tsx
7385
7431
  var import_react15 = require("react");
7386
7432
  var import_lucide_react11 = require("lucide-react");
7387
7433
  var import_react_router_dom2 = require("react-router-dom");
@@ -7947,11 +7993,11 @@ var parseScheduleHint = (input) => {
7947
7993
  return null;
7948
7994
  };
7949
7995
 
7950
- // AgentRunDiagnosisBanner.tsx
7996
+ // components/AgentRunDiagnosisBanner.tsx
7951
7997
  var import_material15 = require("@mui/material");
7952
7998
  var import_lucide_react10 = require("lucide-react");
7953
7999
 
7954
- // AgentDiagnosisCtas.tsx
8000
+ // components/AgentDiagnosisCtas.tsx
7955
8001
  var import_material14 = require("@mui/material");
7956
8002
  var import_lucide_react9 = require("lucide-react");
7957
8003
  var import_jsx_runtime18 = require("react/jsx-runtime");
@@ -8025,7 +8071,7 @@ var AgentDiagnosisCtas = ({ diagnosis, compact = false, tone = "medium" }) => {
8025
8071
  };
8026
8072
  var AgentDiagnosisCtas_default = AgentDiagnosisCtas;
8027
8073
 
8028
- // AgentRunDiagnosisBanner.tsx
8074
+ // components/AgentRunDiagnosisBanner.tsx
8029
8075
  var import_react14 = require("react");
8030
8076
 
8031
8077
  // agentDiagnosis.ts
@@ -8384,7 +8430,7 @@ var diagnoseOutputWarning = (run) => {
8384
8430
  return null;
8385
8431
  };
8386
8432
 
8387
- // AgentRunDiagnosisBanner.tsx
8433
+ // components/AgentRunDiagnosisBanner.tsx
8388
8434
  var import_jsx_runtime19 = require("react/jsx-runtime");
8389
8435
  var DISMISS_PREFIX = "agent-diagnosis-dismissed::";
8390
8436
  var readDismissed = (key) => {
@@ -8540,7 +8586,7 @@ var AgentRunDiagnosisBanner = ({ run, sx, onJumpToEvidence, executionId }) => {
8540
8586
  };
8541
8587
  var AgentRunDiagnosisBanner_default = AgentRunDiagnosisBanner;
8542
8588
 
8543
- // AgentUI.tsx
8589
+ // components/AgentUI.tsx
8544
8590
  var import_jsx_runtime20 = require("react/jsx-runtime");
8545
8591
  var normalizeMarkdown = (raw) => {
8546
8592
  if (raw == null) return "";
@@ -11703,7 +11749,7 @@ var AgentUI = ({
11703
11749
  };
11704
11750
  var AgentUI_default = AgentUI;
11705
11751
 
11706
- // AgentRunDrawer.tsx
11752
+ // components/AgentRunDrawer.tsx
11707
11753
  var import_react16 = require("react");
11708
11754
  var import_material17 = require("@mui/material");
11709
11755
  var import_lucide_react12 = require("lucide-react");
@@ -11895,7 +11941,7 @@ var AgentRunDrawer = ({
11895
11941
  };
11896
11942
  var AgentRunDrawer_default = AgentRunDrawer;
11897
11943
 
11898
- // AgentActivityList.tsx
11944
+ // components/AgentActivityList.tsx
11899
11945
  var import_react17 = require("react");
11900
11946
  var import_material18 = require("@mui/material");
11901
11947
  var import_lucide_react13 = require("lucide-react");
@@ -12050,7 +12096,7 @@ var stopAgentSchedule = async (workflowId, params = {}) => {
12050
12096
  if (!res.ok) throw new Error(`Failed to stop schedule: ${res.statusText}`);
12051
12097
  };
12052
12098
 
12053
- // AgentActivityList.tsx
12099
+ // components/AgentActivityList.tsx
12054
12100
  var import_lucide_react14 = require("lucide-react");
12055
12101
  var import_jsx_runtime22 = require("react/jsx-runtime");
12056
12102
  var STATUS_CONFIG = {
@@ -12666,7 +12712,7 @@ var AgentActivityList = ({
12666
12712
  };
12667
12713
  var AgentActivityList_default = AgentActivityList;
12668
12714
 
12669
- // AgentExecutionDrawer.tsx
12715
+ // components/AgentExecutionDrawer.tsx
12670
12716
  var import_material19 = require("@mui/material");
12671
12717
  var import_lucide_react15 = require("lucide-react");
12672
12718
  var import_jsx_runtime23 = require("react/jsx-runtime");
@@ -12843,7 +12889,7 @@ var AgentExecutionDrawer = ({
12843
12889
  };
12844
12890
  var AgentExecutionDrawer_default = AgentExecutionDrawer;
12845
12891
 
12846
- // AgentsView.tsx
12892
+ // views/AgentsView.tsx
12847
12893
  var import_react18 = require("react");
12848
12894
  var import_material20 = require("@mui/material");
12849
12895
  var import_jsx_runtime24 = require("react/jsx-runtime");
@@ -13169,7 +13215,7 @@ init_api();
13169
13215
  init_fetchBreaker();
13170
13216
  init_appsCache();
13171
13217
 
13172
- // UsageBar.tsx
13218
+ // components/UsageBar.tsx
13173
13219
  var import_material21 = require("@mui/material");
13174
13220
  var import_jsx_runtime25 = require("react/jsx-runtime");
13175
13221
  var fmt = (n) => n.toLocaleString();