@workflow/web 4.1.6 → 4.1.8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,5 +1,5 @@
1
1
  import { r as reactExports, j as jsxRuntimeExports, w as withComponentProps, v as withErrorBoundaryProps, M as Meta, L as Links, S as ScrollRestoration, x as Scripts, O as Outlet, y as useRouteError, i as isRouteErrorResponse, z as Link, A as useNavigate, B as useSearchParams } from "./index-DQa-BExo.js";
2
- import { c as createLucideIcon, u as useServerConfig, T as Tooltip, a as TooltipTrigger, b as TooltipContent, r as runHealthCheck, t as toast, B as Button, L as LoaderCircle, d as cn, e as Toaster$1, S as ServerConfigProvider, f as TooltipProvider } from "./mermaid-3ZIDBTTL-BE1h5qUK.js";
2
+ import { c as createLucideIcon, u as useServerConfig, T as Tooltip, a as TooltipTrigger, b as TooltipContent, r as runHealthCheck, t as toast, B as Button, L as LoaderCircle, d as cn, e as Toaster$1, S as ServerConfigProvider, f as TooltipProvider } from "./mermaid-3ZIDBTTL-CjHrXABH.js";
3
3
  var M = (e, i, s, u, m, a, l, h) => {
4
4
  let d = document.documentElement, w = ["light", "dark"];
5
5
  function p(n) {
@@ -1,7 +1,7 @@
1
1
  import { j as jsxRuntimeExports, r as reactExports, f as reactDomExports, C as ReactDOM, A as useNavigate, B as useSearchParams, z as Link, w as withComponentProps, G as useParams } from "./index-DQa-BExo.js";
2
- import { O as Copy, C as CircleAlert, Q as parseStepName, B as parseWorkflowName, j as ChevronRight, q as Check, U as ErrorCard, Z as Zap, S as Send, R as ResolveHookModal, p as ChevronUp, o as ChevronDown, X, N as ErrorBoundary, V as Clock, G as CircleX, I as unwrapServerActionResult, u as unwrapOrThrow, W as WorkflowWebAPIError, Y as useEscapeKeydown, t as composeEventHandlers, _ as useCallbackRef, $ as useLayoutEffect2, s as useControllableState, a0 as useId, a1 as createContext2, v as Presence, x as createContextScope, l as hideOthers, m as ReactRemoveScroll, a2 as useFocusGuards, a3 as LAYOUT, a4 as wakeUpRun, r as resumeHook, A as Alert, c as AlertTitle, d as AlertDescription, a as Skeleton$1, a5 as RunActionsButtons, F as StatusBadge, e as CopyableText, b as RelativeTime, T as Tabs, K as TabsList, L as TabsTrigger, M as TabsContent, y as cancelRun, a6 as recreateRun } from "./workflow-graph-viewer-fudq4EvS.js";
3
- import { c as createLucideIcon, M as Spinner, h as useToast, N as Skeleton, O as DecryptClickContext, Y as Yr, U as isEncryptedMarker, W as formatDuration, X as DataInspector, _ as _r, Z as StreamClickContext, $ as isExpiredMarker, a0 as isDoStreamStep, a1 as extractConversation, a2 as Lock, a3 as EVENT_DATA_REF_FIELDS, a4 as clsx, a5 as useTraceViewer, a6 as styles, a7 as formatDurationForTimeline, a8 as formatWallClockTime, a9 as useImmediateStyle, aa as TIMELINE_PADDING, ab as formatTimeSelection, ac as MARKER_HEIGHT, ad as ROW_HEIGHT, ae as ROW_PADDING, af as SEARCH_HEIGHT, ag as getHighResInMs, ah as getMsInHighRes, ai as MARKER_NOTCH_HEIGHT, aj as MAP_HEIGHT, ak as SEARCH_GAP, al as MiniMap, am as SpanNodes, an as SpanDetailPanel, ao as TraceViewerContextProvider, ap as hydrateResourceIOWithKey, aq as hydrateResourceIO, ar as fetchHook, l as fetchEvents, F as fetchRun, as as fetchStep, at as hasEncryptedFields, au as fetchStreams, av as Slot, E as useComposedRefs, aw as Slottable, d as cn, ax as buttonVariants, ay as isEncryptedData, az as hydrateData, aA as getWebRevivers, T as Tooltip, a as TooltipTrigger, b as TooltipContent, aB as LIVE_UPDATE_INTERVAL_MS$1, u as useServerConfig, aC as fetchEvent, aD as getEncryptionKeyForRun, t as toast, L as LoaderCircle, aE as StreamViewer } from "./mermaid-3ZIDBTTL-BE1h5qUK.js";
4
- import { decrypt, importKey } from "./encryption-80GMP4r0.js";
2
+ import { O as Copy, C as CircleAlert, Q as parseStepName, B as parseWorkflowName, j as ChevronRight, q as Check, U as ErrorCard, Z as Zap, S as Send, R as ResolveHookModal, p as ChevronUp, o as ChevronDown, X, N as ErrorBoundary, V as Clock, G as CircleX, I as unwrapServerActionResult, u as unwrapOrThrow, W as WorkflowWebAPIError, Y as useEscapeKeydown, t as composeEventHandlers, _ as useCallbackRef, $ as useLayoutEffect2, s as useControllableState, a0 as useId, a1 as createContext2, v as Presence, x as createContextScope, l as hideOthers, m as ReactRemoveScroll, a2 as useFocusGuards, a3 as LAYOUT, a4 as wakeUpRun, r as resumeHook, A as Alert, c as AlertTitle, d as AlertDescription, a as Skeleton$1, a5 as RunActionsButtons, F as StatusBadge, e as CopyableText, b as RelativeTime, T as Tabs, K as TabsList, L as TabsTrigger, M as TabsContent, y as cancelRun, a6 as recreateRun } from "./workflow-graph-viewer-BNsGQIfR.js";
3
+ import { c as createLucideIcon, M as Spinner, h as useToast, N as Skeleton, O as DecryptClickContext, Y as Yr, U as isEncryptedMarker, W as formatDuration, X as DataInspector, _ as _r, Z as StreamClickContext, $ as isExpiredMarker, a0 as isDoStreamStep, a1 as extractConversation, a2 as Lock, a3 as EVENT_DATA_REF_FIELDS, a4 as clsx, a5 as useTraceViewer, a6 as styles, a7 as formatDurationForTimeline, a8 as formatWallClockTime, a9 as useImmediateStyle, aa as TIMELINE_PADDING, ab as formatTimeSelection, ac as MARKER_HEIGHT, ad as ROW_HEIGHT, ae as ROW_PADDING, af as SEARCH_HEIGHT, ag as getHighResInMs, ah as getMsInHighRes, ai as MARKER_NOTCH_HEIGHT, aj as MAP_HEIGHT, ak as SEARCH_GAP, al as MiniMap, am as SpanNodes, an as SpanDetailPanel, ao as TraceViewerContextProvider, ap as hydrateResourceIOWithKey, aq as hydrateResourceIO, ar as fetchHook, l as fetchEvents, F as fetchRun, as as fetchStep, at as hasEncryptedFields, au as fetchStreams, av as Slot, E as useComposedRefs, aw as Slottable, d as cn, ax as buttonVariants, ay as isEncryptedData, az as hydrateData, aA as getWebRevivers, aB as fetchEvent, aC as fetchEventsByCorrelationId, T as Tooltip, a as TooltipTrigger, b as TooltipContent, aD as LIVE_UPDATE_INTERVAL_MS$1, u as useServerConfig, aE as getEncryptionKeyForRun, t as toast, L as LoaderCircle, aF as StreamViewer } from "./mermaid-3ZIDBTTL-CjHrXABH.js";
4
+ import { decrypt, importKey } from "./encryption-5eom23r0.js";
5
5
  /**
6
6
  * @license lucide-react v0.575.0 - ISC
7
7
  *
@@ -53,6 +53,33 @@ const __iconNode = [
53
53
  ["path", { d: "M9 20h6", key: "s66wpe" }]
54
54
  ];
55
55
  const Type = createLucideIcon("type", __iconNode);
56
+ const WORKFLOW_ULID_BODY = "[0123456789ABCDEFGHJKMNPQRSTVWXYZ]{26}";
57
+ const STEP_ID_PATTERN = new RegExp(`^step_(${WORKFLOW_ULID_BODY})$`, "i");
58
+ const WAIT_ID_PATTERN = new RegExp(`^wait_(${WORKFLOW_ULID_BODY})$`, "i");
59
+ const HOOK_ID_PATTERN = new RegExp(`^hook_(${WORKFLOW_ULID_BODY})$`, "i");
60
+ const EVENT_ID_PATTERN = new RegExp(`^evnt_(${WORKFLOW_ULID_BODY})$`, "i");
61
+ const WORKFLOW_ID_PREFIX_PATTERN = /^(step_|wait_|hook_|evnt_|wrun_)/i;
62
+ function matchPrefixedId(pattern, prefix, kind, query) {
63
+ const match = query.match(pattern);
64
+ if (!match) {
65
+ return null;
66
+ }
67
+ return { kind, id: `${prefix}_${match[1].toUpperCase()}` };
68
+ }
69
+ function parseExactWorkflowSearchId(query) {
70
+ const trimmed = query.trim();
71
+ if (!trimmed) {
72
+ return null;
73
+ }
74
+ return matchPrefixedId(STEP_ID_PATTERN, "step", "step", trimmed) ?? matchPrefixedId(WAIT_ID_PATTERN, "wait", "wait", trimmed) ?? matchPrefixedId(HOOK_ID_PATTERN, "hook", "hook", trimmed) ?? matchPrefixedId(EVENT_ID_PATTERN, "evnt", "event", trimmed);
75
+ }
76
+ function looksLikeWorkflowIdSearchInput(query) {
77
+ const trimmed = query.trim();
78
+ if (!WORKFLOW_ID_PREFIX_PATTERN.test(trimmed)) {
79
+ return false;
80
+ }
81
+ return /\d/.test(trimmed);
82
+ }
56
83
  const STYLES$2 = `.wf-decrypt-btn{appearance:none;-webkit-appearance:none;border:none;display:inline-flex;align-items:center;justify-content:center;height:40px;padding:0 12px;border-radius:6px;font-size:14px;font-weight:500;line-height:20px;cursor:pointer;white-space:nowrap;gap:6px;transition:background 150ms}.wf-decrypt-idle{color:var(--ds-gray-1000);background:var(--ds-background-100);box-shadow:0 0 0 1px var(--ds-gray-400)}.wf-decrypt-idle:hover{background:var(--ds-gray-alpha-200)}.wf-decrypt-done{color:var(--ds-green-900);background:var(--ds-green-100);box-shadow:0 0 0 1px var(--ds-green-400);cursor:default}`;
57
84
  function DecryptButton({ decrypted = false, loading = false, onClick }) {
58
85
  return jsxRuntimeExports.jsxs(jsxRuntimeExports.Fragment, { children: [jsxRuntimeExports.jsx("style", { dangerouslySetInnerHTML: { __html: STYLES$2 } }), jsxRuntimeExports.jsxs("button", { type: "button", onClick: decrypted ? void 0 : onClick, disabled: decrypted || loading, className: `wf-decrypt-btn ${decrypted ? "wf-decrypt-done" : "wf-decrypt-idle"}`, children: [loading ? jsxRuntimeExports.jsx(Spinner, { size: 14 }) : decrypted ? jsxRuntimeExports.jsxs("svg", { width: 14, height: 14, viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: 2, strokeLinecap: "round", strokeLinejoin: "round", children: [jsxRuntimeExports.jsx("rect", { x: "3", y: "11", width: "18", height: "11", rx: "2", ry: "2" }), jsxRuntimeExports.jsx("path", { d: "M7 11V7a5 5 0 0 1 9.9-1" })] }) : jsxRuntimeExports.jsxs("svg", { width: 14, height: 14, viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: 2, strokeLinecap: "round", strokeLinejoin: "round", children: [jsxRuntimeExports.jsx("rect", { x: "3", y: "11", width: "18", height: "11", rx: "2", ry: "2" }), jsxRuntimeExports.jsx("path", { d: "M7 11V7a5 5 0 0 1 10 0v4" })] }), loading ? "Decrypting…" : decrypted ? "Decrypted" : "Decrypt"] })] });
@@ -610,7 +637,7 @@ function RowsSkeleton() {
610
637
  marginLeft: i % 4 === 0 ? 5 : 6
611
638
  } })] }), jsxRuntimeExports.jsx("div", { className: "w-5 flex-shrink-0 flex items-center justify-center", children: jsxRuntimeExports.jsx(Skeleton, { className: "w-5 h-5", style: { borderRadius: 4 } }) }), jsxRuntimeExports.jsx("div", { className: "min-w-0 px-4", style: { flex: "2 1 0%" }, children: jsxRuntimeExports.jsx(Skeleton, { className: "h-3", style: { width: "70%" } }) }), jsxRuntimeExports.jsxs("div", { className: "min-w-0 px-4 flex items-center gap-1.5", style: { flex: "2 1 0%" }, children: [jsxRuntimeExports.jsx(Skeleton, { className: "flex-shrink-0", style: { width: 6, height: 6, borderRadius: "50%" } }), jsxRuntimeExports.jsx(Skeleton, { className: "h-3", style: { width: "60%" } })] }), jsxRuntimeExports.jsx("div", { className: "min-w-0 px-4", style: { flex: "2 1 0%" }, children: jsxRuntimeExports.jsx(Skeleton, { className: "h-3", style: { width: "50%" } }) }), jsxRuntimeExports.jsx("div", { className: "min-w-0 px-4", style: { flex: "3 1 0%" }, children: jsxRuntimeExports.jsx(Skeleton, { className: "h-3", style: { width: "75%" } }) }), jsxRuntimeExports.jsx("div", { className: "min-w-0 px-4", style: { flex: "3 1 0%" }, children: jsxRuntimeExports.jsx(Skeleton, { className: "h-3", style: { width: "75%" } }) })] }, i)) });
612
639
  }
613
- function EventRow({ event, index, isFirst, isLast, isExpanded, onToggleExpand, activeGroupKey, selectedGroupKey, selectedGroupRange, correlationNameMap, workflowName, durationMap, onSelectGroup, onHoverGroup, onLoadEventData, cachedEventData, onCacheEventData, encryptionKey, onEncryptedDataDetected }) {
640
+ function EventRow({ event, index, isFirst, isLast, isExpanded, onToggleExpand, activeGroupKey, selectedGroupKey, selectedGroupRange, correlationNameMap, workflowName, durationMap, onSelectGroup, onHoverGroup, onLoadEventData, cachedEventData, onCacheEventData, encryptionKey, onEncryptedDataDetected, suppressGroupDimming = false }) {
614
641
  const [isLoading, setIsLoading] = reactExports.useState(false);
615
642
  const [loadedEventData, setLoadedEventData] = reactExports.useState(cachedEventData);
616
643
  const [loadError, setLoadError] = reactExports.useState(null);
@@ -630,7 +657,7 @@ function EventRow({ event, index, isFirst, isLast, isExpanded, onToggleExpand, a
630
657
  const durationInfo = durationKey ? durationMap.get(durationKey) : void 0;
631
658
  const hasActive = activeGroupKey !== void 0;
632
659
  const isRelated = rowGroupKey !== void 0 && rowGroupKey === activeGroupKey;
633
- const isDimmed = hasActive && !isRelated;
660
+ const isDimmed = hasActive && !isRelated && !suppressGroupDimming;
634
661
  const isPulsing = hasActive && isRelated;
635
662
  const showBranch = hasActive && isRelated && !isRun;
636
663
  const showLaneLine = selectedGroupRange !== null && index >= selectedGroupRange.first && index <= selectedGroupRange.last;
@@ -755,7 +782,8 @@ function EventRow({ event, index, isFirst, isLast, isExpanded, onToggleExpand, a
755
782
  color: "var(--ds-red-900)"
756
783
  }, children: loadError }) : isLoading || loadedEventData === null && !hasAttemptedLoad && event.correlationId ? jsxRuntimeExports.jsxs("div", { className: "flex flex-col gap-2 p-3", children: [jsxRuntimeExports.jsx(Skeleton, { className: "h-3", style: { width: "75%" } }), jsxRuntimeExports.jsx(Skeleton, { className: "h-3", style: { width: "50%" } }), jsxRuntimeExports.jsx(Skeleton, { className: "h-3", style: { width: "60%" } })] }) : jsxRuntimeExports.jsx("div", { className: "p-2 text-xs", style: { color: "var(--ds-gray-900)" }, children: "No data" })] })] })] });
757
784
  }
758
- function EventListView({ events, run, onLoadEventData, hasMoreEvents = false, isLoadingMoreEvents = false, onLoadMoreEvents, encryptionKey, isLoading = false, sortOrder: sortOrderProp, onSortOrderChange, onDecrypt, isDecrypting = false, hasEncryptedData: hasEncryptedDataProp = false }) {
785
+ function EventListView({ events, run, onLoadEventData, hasMoreEvents = false, isLoadingMoreEvents = false, onLoadMoreEvents, encryptionKey, isLoading = false, sortOrder: sortOrderProp, onSortOrderChange, onDecrypt, isDecrypting = false, hasEncryptedData: hasEncryptedDataProp = false, onExactIdSearch }) {
786
+ const toast2 = useToast();
759
787
  const [internalSortOrder, setInternalSortOrder] = reactExports.useState("asc");
760
788
  const effectiveSortOrder = sortOrderProp ?? internalSortOrder;
761
789
  const handleSortOrderChange = reactExports.useCallback((order) => {
@@ -765,28 +793,40 @@ function EventListView({ events, run, onLoadEventData, hasMoreEvents = false, is
765
793
  setInternalSortOrder(order);
766
794
  }
767
795
  }, [onSortOrderChange]);
796
+ const [searchQuery, setSearchQuery] = reactExports.useState("");
797
+ const [searchResults, setSearchResults] = reactExports.useState(null);
798
+ const [searchResultsTruncated, setSearchResultsTruncated] = reactExports.useState(false);
799
+ const [searchError, setSearchError] = reactExports.useState(null);
800
+ const [searchLoading, setSearchLoading] = reactExports.useState(false);
801
+ const [searchNotFound, setSearchNotFound] = reactExports.useState(false);
802
+ const searchRequestRef = reactExports.useRef(0);
803
+ const virtuosoRef = reactExports.useRef(null);
804
+ const parsedSearchId = reactExports.useMemo(() => parseExactWorkflowSearchId(searchQuery), [searchQuery]);
805
+ const isExactSearchActive = searchResults !== null;
768
806
  const sortedEvents = reactExports.useMemo(() => {
769
- if (!events || events.length === 0)
807
+ const sourceEvents = isExactSearchActive ? searchResults : events ?? [];
808
+ if (sourceEvents.length === 0)
770
809
  return [];
771
810
  const dir = effectiveSortOrder === "desc" ? -1 : 1;
772
- return [...events].sort((a, b) => dir * (new Date(a.createdAt).getTime() - new Date(b.createdAt).getTime()));
773
- }, [events, effectiveSortOrder]);
811
+ return [...sourceEvents].sort((a, b) => dir * (new Date(a.createdAt).getTime() - new Date(b.createdAt).getTime()));
812
+ }, [events, effectiveSortOrder, isExactSearchActive, searchResults]);
774
813
  const hasEncryptedInlineData = reactExports.useMemo(() => {
775
- if (!events)
814
+ const sourceEvents = isExactSearchActive ? searchResults : events;
815
+ if (!sourceEvents)
776
816
  return false;
777
- for (const event of events) {
817
+ for (const event of sourceEvents) {
778
818
  const ed = event.eventData;
779
819
  if (hasEncryptedValues(ed))
780
820
  return true;
781
821
  }
782
822
  return false;
783
- }, [events]);
823
+ }, [events, isExactSearchActive, searchResults]);
784
824
  const [foundEncryptedInLazyData, setFoundEncryptedInLazyData] = reactExports.useState(false);
785
825
  const handleEncryptedDataDetected = reactExports.useCallback(() => {
786
826
  setFoundEncryptedInLazyData(true);
787
827
  }, []);
788
828
  const hasEncryptedData = hasEncryptedDataProp || hasEncryptedInlineData || foundEncryptedInLazyData;
789
- const { correlationNameMap, workflowName } = reactExports.useMemo(() => buildNameMaps(events ?? null, run ?? null), [events, run]);
829
+ const { correlationNameMap, workflowName } = reactExports.useMemo(() => buildNameMaps(isExactSearchActive ? searchResults : events ?? null, run ?? null), [events, isExactSearchActive, run, searchResults]);
790
830
  const durationMap = reactExports.useMemo(() => buildDurationMap(sortedEvents), [sortedEvents]);
791
831
  const [selectedGroupKey, setSelectedGroupKey] = reactExports.useState(void 0);
792
832
  const [hoveredGroupKey, setHoveredGroupKey] = reactExports.useState(void 0);
@@ -854,58 +894,100 @@ function EventListView({ events, run, onLoadEventData, hasMoreEvents = false, is
854
894
  }
855
895
  return first >= 0 ? { first, last } : null;
856
896
  }, [activeGroupKey, sortedEvents]);
857
- const [searchQuery, setSearchQuery] = reactExports.useState("");
858
- const virtuosoRef = reactExports.useRef(null);
859
- const searchIndex = reactExports.useMemo(() => {
860
- const entries = [];
861
- for (let i = 0; i < sortedEvents.length; i++) {
862
- const ev = sortedEvents[i];
863
- const isRun = isRunLevel(ev.eventType);
864
- const name = isRun ? workflowName ?? "" : ev.correlationId ? correlationNameMap.get(ev.correlationId) ?? "" : "";
865
- entries.push({
866
- fields: [
867
- ev.eventId,
868
- ev.correlationId ?? "",
869
- ev.eventType,
870
- formatEventType(ev.eventType),
871
- name
872
- ].map((f) => f.toLowerCase()),
873
- groupKey: ev.correlationId ?? (isRun ? "__run__" : void 0),
874
- eventId: ev.eventId,
875
- index: i
876
- });
877
- }
878
- return entries;
879
- }, [sortedEvents, correlationNameMap, workflowName]);
880
897
  reactExports.useEffect(() => {
881
- var _a;
882
- const q = searchQuery.trim().toLowerCase();
883
- if (!q) {
898
+ const trimmed = searchQuery.trim();
899
+ if (!trimmed) {
900
+ searchRequestRef.current += 1;
901
+ setSearchResults(null);
902
+ setSearchResultsTruncated(false);
903
+ setSearchError(null);
904
+ setSearchLoading(false);
905
+ setSearchNotFound(false);
884
906
  setSelectedGroupKey(void 0);
885
907
  return;
886
908
  }
887
- let bestMatch = null;
888
- let bestScore = 0;
889
- for (const entry of searchIndex) {
890
- for (const field of entry.fields) {
891
- if (field && field.includes(q)) {
892
- const score = q.length / field.length;
893
- if (score > bestScore) {
894
- bestScore = score;
895
- bestMatch = entry;
909
+ const parsed = parseExactWorkflowSearchId(trimmed);
910
+ if (!parsed || !onExactIdSearch) {
911
+ setSearchResults(null);
912
+ setSearchLoading(false);
913
+ setSearchNotFound(false);
914
+ return;
915
+ }
916
+ const requestId = ++searchRequestRef.current;
917
+ setSearchLoading(true);
918
+ setSearchNotFound(false);
919
+ setSearchError(null);
920
+ const abortController = new AbortController();
921
+ const timer = setTimeout(() => {
922
+ void (async () => {
923
+ var _a;
924
+ try {
925
+ const results = await onExactIdSearch(parsed.id, parsed.kind, abortController.signal);
926
+ if (abortController.signal.aborted || searchRequestRef.current !== requestId) {
927
+ return;
928
+ }
929
+ if (results.status === "error") {
930
+ setSearchResults([]);
931
+ setSearchResultsTruncated(false);
932
+ setSearchNotFound(false);
933
+ setSearchError(results.message);
934
+ setSelectedGroupKey(void 0);
935
+ return;
936
+ }
937
+ if (results.status === "not_found" || results.status === "ok" && results.events.length === 0) {
938
+ setSearchResults([]);
939
+ setSearchResultsTruncated(false);
940
+ setSearchNotFound(true);
941
+ setSearchError(null);
942
+ setSelectedGroupKey(void 0);
943
+ return;
944
+ }
945
+ setSearchResults(results.events);
946
+ setSearchResultsTruncated(Boolean(results.truncated));
947
+ setSearchNotFound(false);
948
+ setSearchError(null);
949
+ setSelectedGroupKey(parsed.kind === "event" ? (() => {
950
+ const first = results.events[0];
951
+ if (!first)
952
+ return void 0;
953
+ return isRunLevel(first.eventType) ? "__run__" : first.correlationId ?? void 0;
954
+ })() : parsed.id);
955
+ (_a = virtuosoRef.current) == null ? void 0 : _a.scrollToIndex({
956
+ index: 0,
957
+ align: "start",
958
+ behavior: "smooth"
959
+ });
960
+ } catch {
961
+ if (abortController.signal.aborted || searchRequestRef.current !== requestId) {
962
+ return;
963
+ }
964
+ setSearchResults([]);
965
+ setSearchResultsTruncated(false);
966
+ setSearchNotFound(false);
967
+ setSearchError("Failed to search events. Try again.");
968
+ setSelectedGroupKey(void 0);
969
+ } finally {
970
+ if (searchRequestRef.current === requestId && !abortController.signal.aborted) {
971
+ setSearchLoading(false);
896
972
  }
897
973
  }
898
- }
974
+ })();
975
+ }, 300);
976
+ return () => {
977
+ clearTimeout(timer);
978
+ abortController.abort();
979
+ };
980
+ }, [searchQuery, onExactIdSearch]);
981
+ const handleSearchKeyDown = reactExports.useCallback((event) => {
982
+ if (event.key !== "Enter") {
983
+ return;
899
984
  }
900
- if (bestMatch) {
901
- setSelectedGroupKey(bestMatch.groupKey);
902
- (_a = virtuosoRef.current) == null ? void 0 : _a.scrollToIndex({
903
- index: bestMatch.index,
904
- align: "center",
905
- behavior: "smooth"
906
- });
985
+ const trimmed = searchQuery.trim();
986
+ if (!trimmed || parseExactWorkflowSearchId(trimmed) || !onExactIdSearch || !looksLikeWorkflowIdSearchInput(trimmed)) {
987
+ return;
907
988
  }
908
- }, [searchQuery, searchIndex]);
989
+ toast2.info("Enter a full step ID, wait ID, hook ID, or event ID");
990
+ }, [searchQuery, onExactIdSearch, toast2]);
909
991
  const hasHadEventsRef = reactExports.useRef(false);
910
992
  if (sortedEvents.length > 0) {
911
993
  hasHadEventsRef.current = true;
@@ -915,9 +997,6 @@ function EventListView({ events, run, onLoadEventData, hasMoreEvents = false, is
915
997
  if (isInitialLoad) {
916
998
  return jsxRuntimeExports.jsxs("div", { className: "h-full flex flex-col overflow-hidden", children: [jsxRuntimeExports.jsx("div", { style: { padding: 6 }, children: jsxRuntimeExports.jsx(Skeleton, { style: { height: 40, borderRadius: 6 } }) }), jsxRuntimeExports.jsxs("div", { className: "flex items-center gap-0 h-10 border-b flex-shrink-0", style: { borderColor: "var(--ds-gray-alpha-200)" }, children: [jsxRuntimeExports.jsx("div", { className: "flex-shrink-0", style: { width: GUTTER_WIDTH } }), jsxRuntimeExports.jsx("div", { className: "w-5 flex-shrink-0" }), jsxRuntimeExports.jsx("div", { className: "min-w-0 px-4", style: { flex: "2 1 0%" }, children: jsxRuntimeExports.jsx(Skeleton, { className: "h-3", style: { width: 40 } }) }), jsxRuntimeExports.jsx("div", { className: "min-w-0 px-4", style: { flex: "2 1 0%" }, children: jsxRuntimeExports.jsx(Skeleton, { className: "h-3", style: { width: 72 } }) }), jsxRuntimeExports.jsx("div", { className: "min-w-0 px-4", style: { flex: "2 1 0%" }, children: jsxRuntimeExports.jsx(Skeleton, { className: "h-3", style: { width: 44 } }) }), jsxRuntimeExports.jsx("div", { className: "min-w-0 px-4", style: { flex: "3 1 0%" }, children: jsxRuntimeExports.jsx(Skeleton, { className: "h-3", style: { width: 92 } }) }), jsxRuntimeExports.jsx("div", { className: "min-w-0 px-4", style: { flex: "3 1 0%" }, children: jsxRuntimeExports.jsx(Skeleton, { className: "h-3", style: { width: 60 } }) })] }), jsxRuntimeExports.jsx(RowsSkeleton, {})] });
917
999
  }
918
- if (!isLoading && (!events || events.length === 0)) {
919
- return jsxRuntimeExports.jsx("div", { className: "flex items-center justify-center h-full text-sm", style: { color: "var(--ds-gray-700)" }, children: "No events found" });
920
- }
921
1000
  return jsxRuntimeExports.jsx(DecryptClickContext.Provider, { value: onDecrypt ? { onDecrypt, isDecrypting } : void 0, children: jsxRuntimeExports.jsxs("div", { className: "h-full flex flex-col overflow-hidden", children: [jsxRuntimeExports.jsx("style", { children: `@keyframes workflow-dot-pulse{0%{transform:scale(1);opacity:.7}70%,100%{transform:scale(2.2);opacity:0}}` }), jsxRuntimeExports.jsxs("div", { style: {
922
1001
  padding: 6,
923
1002
  backgroundColor: "var(--ds-background-100)",
@@ -941,7 +1020,7 @@ function EventListView({ events, run, onLoadEventData, hasMoreEvents = false, is
941
1020
  justifyContent: "center",
942
1021
  color: "var(--ds-gray-800)",
943
1022
  flexShrink: 0
944
- }, children: jsxRuntimeExports.jsxs("svg", { width: 16, height: 16, viewBox: "0 0 16 16", fill: "none", "aria-hidden": "true", focusable: "false", children: [jsxRuntimeExports.jsx("circle", { cx: "7", cy: "7", r: "4.5", stroke: "currentColor", strokeWidth: "1.5" }), jsxRuntimeExports.jsx("path", { d: "M11.5 11.5L14 14", stroke: "currentColor", strokeWidth: "1.5", strokeLinecap: "round" })] }) }), jsxRuntimeExports.jsx("input", { type: "search", placeholder: "Search by name, event type, or ID…", value: searchQuery, onChange: (e) => setSearchQuery(e.target.value), style: {
1023
+ }, children: jsxRuntimeExports.jsxs("svg", { width: 16, height: 16, viewBox: "0 0 16 16", fill: "none", "aria-hidden": "true", focusable: "false", children: [jsxRuntimeExports.jsx("circle", { cx: "7", cy: "7", r: "4.5", stroke: "currentColor", strokeWidth: "1.5" }), jsxRuntimeExports.jsx("path", { d: "M11.5 11.5L14 14", stroke: "currentColor", strokeWidth: "1.5", strokeLinecap: "round" })] }) }), jsxRuntimeExports.jsx("input", { type: "search", placeholder: "Search by step ID, wait ID, hook ID, or event ID…", value: searchQuery, onChange: (e) => setSearchQuery(e.target.value), onKeyDown: handleSearchKeyDown, disabled: !onExactIdSearch, title: onExactIdSearch ? void 0 : "Exact ID search is unavailable in this view.", style: {
945
1024
  marginLeft: -16,
946
1025
  paddingInline: 12,
947
1026
  fontFamily: "inherit",
@@ -950,24 +1029,26 @@ function EventListView({ events, run, onLoadEventData, hasMoreEvents = false, is
950
1029
  border: "none",
951
1030
  outline: "none",
952
1031
  height: 40,
953
- width: "100%"
1032
+ width: "100%",
1033
+ opacity: onExactIdSearch ? 1 : 0.5,
1034
+ cursor: onExactIdSearch ? "text" : "not-allowed"
954
1035
  } })] }), jsxRuntimeExports.jsx(MenuDropdown, { options: SORT_OPTIONS, value: effectiveSortOrder, onChange: handleSortOrderChange }), (hasEncryptedData || encryptionKey) && onDecrypt && jsxRuntimeExports.jsx(DecryptButton, { decrypted: !!encryptionKey, loading: isDecrypting, onClick: onDecrypt })] }), jsxRuntimeExports.jsxs("div", { className: "flex items-center gap-0 text-[13px] font-medium h-10 border-b flex-shrink-0", style: {
955
1036
  borderColor: "var(--ds-gray-alpha-200)",
956
1037
  color: "var(--ds-gray-900)",
957
1038
  backgroundColor: "var(--ds-background-100)"
958
- }, children: [jsxRuntimeExports.jsx("div", { className: "flex-shrink-0", style: { width: GUTTER_WIDTH } }), jsxRuntimeExports.jsx("div", { className: "w-5 flex-shrink-0" }), jsxRuntimeExports.jsx("div", { className: "min-w-0 px-4", style: { flex: "2 1 0%" }, children: "Time" }), jsxRuntimeExports.jsx("div", { className: "min-w-0 px-4", style: { flex: "2 1 0%" }, children: "Event Type" }), jsxRuntimeExports.jsx("div", { className: "min-w-0 px-4", style: { flex: "2 1 0%" }, children: "Name" }), jsxRuntimeExports.jsx("div", { className: "min-w-0 px-4", style: { flex: "3 1 0%" }, children: "Correlation ID" }), jsxRuntimeExports.jsx("div", { className: "min-w-0 px-4", style: { flex: "3 1 0%" }, children: "Event ID" })] }), isRefetching ? jsxRuntimeExports.jsx(RowsSkeleton, {}) : jsxRuntimeExports.jsx(Yr, { ref: virtuosoRef, totalCount: sortedEvents.length, overscan: 20, defaultItemHeight: 40, endReached: () => {
959
- if (!hasMoreEvents || isLoadingMoreEvents) {
1039
+ }, children: [jsxRuntimeExports.jsx("div", { className: "flex-shrink-0", style: { width: GUTTER_WIDTH } }), jsxRuntimeExports.jsx("div", { className: "w-5 flex-shrink-0" }), jsxRuntimeExports.jsx("div", { className: "min-w-0 px-4", style: { flex: "2 1 0%" }, children: "Time" }), jsxRuntimeExports.jsx("div", { className: "min-w-0 px-4", style: { flex: "2 1 0%" }, children: "Event Type" }), jsxRuntimeExports.jsx("div", { className: "min-w-0 px-4", style: { flex: "2 1 0%" }, children: "Name" }), jsxRuntimeExports.jsx("div", { className: "min-w-0 px-4", style: { flex: "3 1 0%" }, children: "Correlation ID" }), jsxRuntimeExports.jsx("div", { className: "min-w-0 px-4", style: { flex: "3 1 0%" }, children: "Event ID" })] }), isRefetching || searchLoading ? jsxRuntimeExports.jsx(RowsSkeleton, {}) : sortedEvents.length === 0 ? jsxRuntimeExports.jsx("div", { className: "flex flex-1 items-center justify-center px-6 text-center text-sm", style: { color: "var(--ds-gray-700)" }, children: searchNotFound && searchQuery.trim() ? `No events found for ${searchQuery.trim()}` : searchError ? searchError : parsedSearchId && searchQuery.trim() && !onExactIdSearch ? "Exact ID search is unavailable in this view." : "No events found" }) : jsxRuntimeExports.jsx(Yr, { ref: virtuosoRef, totalCount: sortedEvents.length, overscan: 20, defaultItemHeight: 40, endReached: () => {
1040
+ if (isExactSearchActive || !hasMoreEvents || isLoadingMoreEvents) {
960
1041
  return;
961
1042
  }
962
1043
  void (onLoadMoreEvents == null ? void 0 : onLoadMoreEvents());
963
1044
  }, itemContent: (index) => {
964
1045
  const ev = sortedEvents[index];
965
- return jsxRuntimeExports.jsx(EventRow, { event: ev, index, isFirst: index === 0, isLast: index === sortedEvents.length - 1, isExpanded: expandedEventIds.has(ev.eventId), onToggleExpand: toggleEventExpanded, activeGroupKey, selectedGroupKey, selectedGroupRange, correlationNameMap, workflowName, durationMap, onSelectGroup, onHoverGroup, onLoadEventData, cachedEventData: eventDataCacheRef.current.get(ev.eventId) ?? null, onCacheEventData: cacheEventData, encryptionKey, onEncryptedDataDetected: handleEncryptedDataDetected });
1046
+ return jsxRuntimeExports.jsx(EventRow, { event: ev, index, isFirst: index === 0, isLast: index === sortedEvents.length - 1, isExpanded: expandedEventIds.has(ev.eventId), onToggleExpand: toggleEventExpanded, activeGroupKey, selectedGroupKey, selectedGroupRange, correlationNameMap, workflowName, durationMap, onSelectGroup, onHoverGroup, onLoadEventData, cachedEventData: eventDataCacheRef.current.get(ev.eventId) ?? null, onCacheEventData: cacheEventData, encryptionKey, onEncryptedDataDetected: handleEncryptedDataDetected, suppressGroupDimming: isExactSearchActive });
966
1047
  }, style: { flex: 1, minHeight: 0 } }), jsxRuntimeExports.jsxs("div", { className: "relative flex-shrink-0 flex items-center h-10 border-t px-4 text-xs", style: {
967
1048
  borderColor: "var(--ds-gray-alpha-200)",
968
1049
  color: "var(--ds-gray-900)",
969
1050
  backgroundColor: "var(--ds-background-100)"
970
- }, children: [jsxRuntimeExports.jsxs("span", { children: [sortedEvents.length, " event", sortedEvents.length !== 1 ? "s" : "", " loaded"] }), hasMoreEvents && jsxRuntimeExports.jsx("div", { className: "absolute inset-0 flex items-center justify-center pointer-events-none", children: jsxRuntimeExports.jsx("div", { className: "pointer-events-auto", children: jsxRuntimeExports.jsx(LoadMoreButton, { loading: isLoadingMoreEvents, onClick: () => void (onLoadMoreEvents == null ? void 0 : onLoadMoreEvents()) }) }) })] })] }) });
1051
+ }, children: [jsxRuntimeExports.jsx("span", { children: isExactSearchActive ? searchError ? searchError : searchNotFound ? `No events found for ${searchQuery.trim()}` : `${sortedEvents.length} event${sortedEvents.length !== 1 ? "s" : ""} for ${searchQuery.trim()}${searchResultsTruncated ? " (results may be truncated)" : ""}` : `${sortedEvents.length} event${sortedEvents.length !== 1 ? "s" : ""} loaded` }), !isExactSearchActive && hasMoreEvents && jsxRuntimeExports.jsx("div", { className: "absolute inset-0 flex items-center justify-center pointer-events-none", children: jsxRuntimeExports.jsx("div", { className: "pointer-events-auto", children: jsxRuntimeExports.jsx(LoadMoreButton, { loading: isLoadingMoreEvents, onClick: () => void (onLoadMoreEvents == null ? void 0 : onLoadMoreEvents()) }) }) })] })] }) });
971
1052
  }
972
1053
  function ConversationView({ messages }) {
973
1054
  if (messages.length === 0) {
@@ -6029,6 +6110,7 @@ function useStreamReader(env, streamId, runId, encryptionKey, runStatus) {
6029
6110
  }
6030
6111
  const INITIAL_PAGE_SIZE = 100;
6031
6112
  const LOAD_MORE_PAGE_SIZE = 100;
6113
+ const MAX_CORRELATION_SEARCH_PAGES = 30;
6032
6114
  function useEventsListData(env, runId, options = {}) {
6033
6115
  const { sortOrder = "asc", encryptionKey, enabled = true } = options;
6034
6116
  const [events, setEvents] = reactExports.useState([]);
@@ -6040,6 +6122,16 @@ function useEventsListData(env, runId, options = {}) {
6040
6122
  const isFetchingRef = reactExports.useRef(false);
6041
6123
  const encryptionKeyRef = reactExports.useRef(encryptionKey);
6042
6124
  encryptionKeyRef.current = encryptionKey;
6125
+ const hydrateEvents = reactExports.useCallback(async (rawEvents) => {
6126
+ const hydrated = rawEvents.map(hydrateResourceIO);
6127
+ const key = encryptionKeyRef.current;
6128
+ if (key) {
6129
+ return Promise.all(
6130
+ hydrated.map((ev) => hydrateResourceIOWithKey(ev, key))
6131
+ );
6132
+ }
6133
+ return hydrated;
6134
+ }, []);
6043
6135
  const fetchInitial = reactExports.useCallback(async () => {
6044
6136
  if (isFetchingRef.current) return;
6045
6137
  isFetchingRef.current = true;
@@ -6059,16 +6151,7 @@ function useEventsListData(env, runId, options = {}) {
6059
6151
  if (fetchError) {
6060
6152
  setError(fetchError);
6061
6153
  } else {
6062
- const hydrated = result.data.map(hydrateResourceIO);
6063
- const key = encryptionKeyRef.current;
6064
- if (key) {
6065
- const decrypted = await Promise.all(
6066
- hydrated.map((ev) => hydrateResourceIOWithKey(ev, key))
6067
- );
6068
- setEvents(decrypted);
6069
- } else {
6070
- setEvents(hydrated);
6071
- }
6154
+ setEvents(await hydrateEvents(result.data));
6072
6155
  setCursor(result.hasMore ? result.cursor : void 0);
6073
6156
  setHasMore(Boolean(result.hasMore));
6074
6157
  }
@@ -6078,7 +6161,7 @@ function useEventsListData(env, runId, options = {}) {
6078
6161
  setLoading(false);
6079
6162
  isFetchingRef.current = false;
6080
6163
  }
6081
- }, [env, runId, sortOrder]);
6164
+ }, [env, runId, sortOrder, hydrateEvents]);
6082
6165
  reactExports.useEffect(() => {
6083
6166
  if (enabled) fetchInitial();
6084
6167
  }, [fetchInitial, enabled]);
@@ -6109,16 +6192,8 @@ function useEventsListData(env, runId, options = {}) {
6109
6192
  setError(fetchError);
6110
6193
  } else {
6111
6194
  if (result.data.length > 0) {
6112
- const hydrated = result.data.map(hydrateResourceIO);
6113
- const key = encryptionKeyRef.current;
6114
- if (key) {
6115
- const decrypted = await Promise.all(
6116
- hydrated.map((ev) => hydrateResourceIOWithKey(ev, key))
6117
- );
6118
- setEvents((prev) => [...prev, ...decrypted]);
6119
- } else {
6120
- setEvents((prev) => [...prev, ...hydrated]);
6121
- }
6195
+ const hydrated = await hydrateEvents(result.data);
6196
+ setEvents((prev) => [...prev, ...hydrated]);
6122
6197
  }
6123
6198
  setCursor(result.hasMore ? result.cursor : void 0);
6124
6199
  setHasMore(Boolean(result.hasMore));
@@ -6128,14 +6203,65 @@ function useEventsListData(env, runId, options = {}) {
6128
6203
  } finally {
6129
6204
  setLoadingMore(false);
6130
6205
  }
6131
- }, [env, runId, sortOrder, cursor, loadingMore]);
6206
+ }, [env, runId, sortOrder, cursor, loadingMore, hydrateEvents]);
6207
+ const searchByExactId = reactExports.useCallback(
6208
+ async (id, kind, signal) => {
6209
+ if (signal == null ? void 0 : signal.aborted) {
6210
+ throw new DOMException("Aborted", "AbortError");
6211
+ }
6212
+ if (kind === "event") {
6213
+ const { error: fetchError, result } = await unwrapServerActionResult(
6214
+ fetchEvent(env, runId, id, "none")
6215
+ );
6216
+ if (fetchError || (signal == null ? void 0 : signal.aborted)) {
6217
+ return fetchError ? { status: "error", message: fetchError.message } : (() => {
6218
+ throw new DOMException("Aborted", "AbortError");
6219
+ })();
6220
+ }
6221
+ const [event] = await hydrateEvents([result]);
6222
+ return (event == null ? void 0 : event.runId) === runId ? { status: "ok", events: [event] } : { status: "not_found" };
6223
+ }
6224
+ const matched = [];
6225
+ let nextCursor;
6226
+ let pagesFetched = 0;
6227
+ let truncated = false;
6228
+ do {
6229
+ if (signal == null ? void 0 : signal.aborted) {
6230
+ throw new DOMException("Aborted", "AbortError");
6231
+ }
6232
+ const { error: fetchError, result } = await unwrapServerActionResult(
6233
+ fetchEventsByCorrelationId(env, id, {
6234
+ cursor: nextCursor,
6235
+ sortOrder,
6236
+ limit: 100,
6237
+ withData: false
6238
+ })
6239
+ );
6240
+ if (fetchError) {
6241
+ return { status: "error", message: fetchError.message };
6242
+ }
6243
+ if (signal == null ? void 0 : signal.aborted) {
6244
+ throw new DOMException("Aborted", "AbortError");
6245
+ }
6246
+ pagesFetched += 1;
6247
+ const hydrated = await hydrateEvents(result.data);
6248
+ matched.push(...hydrated.filter((event) => event.runId === runId));
6249
+ const hitPageCap = pagesFetched >= MAX_CORRELATION_SEARCH_PAGES;
6250
+ truncated = truncated || hitPageCap && Boolean(result.hasMore && result.cursor);
6251
+ nextCursor = !hitPageCap && result.hasMore && result.cursor ? result.cursor : void 0;
6252
+ } while (nextCursor);
6253
+ return matched.length > 0 ? { status: "ok", events: matched, truncated: truncated || void 0 } : { status: "not_found" };
6254
+ },
6255
+ [env, runId, sortOrder, hydrateEvents]
6256
+ );
6132
6257
  return {
6133
6258
  events,
6134
6259
  loading,
6135
6260
  error,
6136
6261
  hasMore,
6137
6262
  loadingMore,
6138
- loadMore
6263
+ loadMore,
6264
+ searchByExactId
6139
6265
  };
6140
6266
  }
6141
6267
  function LiveStatus({ hasError, errorMessage }) {
@@ -6283,7 +6409,8 @@ function RunDetailView({
6283
6409
  loading: eventsListLoading,
6284
6410
  hasMore: hasMoreEventsTab,
6285
6411
  loadingMore: loadingMoreEventsTab,
6286
- loadMore: loadMoreEventsTab
6412
+ loadMore: loadMoreEventsTab,
6413
+ searchByExactId
6287
6414
  } = useEventsListData(env, runId, {
6288
6415
  sortOrder: eventsSortOrder,
6289
6416
  encryptionKey: encryptionKey ?? void 0,
@@ -6564,7 +6691,8 @@ function RunDetailView({
6564
6691
  onSortOrderChange: setEventsSortOrder,
6565
6692
  onDecrypt: handleDecrypt,
6566
6693
  isDecrypting,
6567
- hasEncryptedData
6694
+ hasEncryptedData,
6695
+ onExactIdSearch: searchByExactId
6568
6696
  }
6569
6697
  ) }) }) }),
6570
6698
  /* @__PURE__ */ jsxRuntimeExports.jsx(TabsContent, { value: "streams", className: "mt-0 flex-1 min-h-0", children: /* @__PURE__ */ jsxRuntimeExports.jsx(ErrorBoundary, { title: "Failed to load stream data", children: /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "h-full flex gap-4", children: [
@@ -1,7 +1,7 @@
1
1
  var __defProp = Object.defineProperty;
2
2
  var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
3
3
  var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
4
- import { c as createLucideIcon, aF as cn, d as cn$1, G as cva, aG as composeRefs, E as useComposedRefs, aH as useFloating, aI as offset, aJ as shift, aK as limitShift, aL as flip, aM as size, aN as arrow, aO as hide, aP as autoUpdate, T as Tooltip, a as TooltipTrigger, b as TooltipContent, aQ as cancelRun$1, aR as reenqueueRun$1, aS as wakeUpRun$1, aT as resumeHook$1, aU as recreateRun$1, v as createContextScope$1, n as useComposedRefs$1, w as createSlot, W as formatDuration, B as Button, t as toast, p as useId$1, P as Primitive$1, o as composeEventHandlers$1, x as useControllableState$1, m as useCallbackRef$2, H as Presence$1 } from "./mermaid-3ZIDBTTL-BE1h5qUK.js";
4
+ import { c as createLucideIcon, aG as cn, d as cn$1, G as cva, aH as composeRefs, E as useComposedRefs, aI as useFloating, aJ as offset, aK as shift, aL as limitShift, aM as flip, aN as size, aO as arrow, aP as hide, aQ as autoUpdate, T as Tooltip, a as TooltipTrigger, b as TooltipContent, aR as cancelRun$1, aS as reenqueueRun$1, aT as wakeUpRun$1, aU as resumeHook$1, aV as recreateRun$1, v as createContextScope$1, n as useComposedRefs$1, w as createSlot, W as formatDuration, B as Button, t as toast, p as useId$1, P as Primitive$1, o as composeEventHandlers$1, x as useControllableState$1, m as useCallbackRef$2, H as Presence$1 } from "./mermaid-3ZIDBTTL-CjHrXABH.js";
5
5
  import { r as reactExports, j as jsxRuntimeExports, f as reactDomExports, R as ReactExports, H as React, C as ReactDOM, a as requireReact, I as getDefaultExportFromCjs } from "./index-DQa-BExo.js";
6
6
  function parseName(tag, name) {
7
7
  if (typeof name !== "string") {
@@ -9176,7 +9176,7 @@ const app = express();
9176
9176
  app.all(
9177
9177
  "*",
9178
9178
  createRequestHandler({
9179
- build: () => import("./server-build-DiegzHGY.js").then((n) => n.G)
9179
+ build: () => import("./server-build-BBm5-YMr.js").then((n) => n.G)
9180
9180
  })
9181
9181
  );
9182
9182
  app.use(
@@ -1,5 +1,5 @@
1
- import { y as R, K as Ks, z as jsxRuntimeExports, A as Qe } from "./server-build-DiegzHGY.js";
2
- import { r as reactExports } from "./app-DZ5lj7U4.js";
1
+ import { y as R, K as Ks, z as jsxRuntimeExports, A as Qe } from "./server-build-BBm5-YMr.js";
2
+ import { r as reactExports } from "./app-Bw7CxKyr.js";
3
3
  import "node:stream";
4
4
  import "util";
5
5
  import "crypto";
@@ -1,6 +1,6 @@
1
- import { H as HookSchema } from "./server-build-DiegzHGY.js";
2
- import { B, D, a, E, b, c, d, L, M, P, Q, e, R, S, f, g, h, i, j, k, l, m, V, W, n, o, p, q, r, s, t, u, v, w, x } from "./server-build-DiegzHGY.js";
3
- import "./app-DZ5lj7U4.js";
1
+ import { H as HookSchema } from "./server-build-BBm5-YMr.js";
2
+ import { B, D, a, E, b, c, d, L, M, P, Q, e, R, S, f, g, h, i, j, k, l, m, V, W, n, o, p, q, r, s, t, u, v, w, x } from "./server-build-BBm5-YMr.js";
3
+ import "./app-Bw7CxKyr.js";
4
4
  import "stream";
5
5
  import "express";
6
6
  import "node:stream";
@@ -1,5 +1,5 @@
1
- import { N as Nt } from "./server-build-DiegzHGY.js";
2
- import "./app-DZ5lj7U4.js";
1
+ import { N as Nt } from "./server-build-BBm5-YMr.js";
2
+ import "./app-Bw7CxKyr.js";
3
3
  import "stream";
4
4
  import "express";
5
5
  import "node:stream";