@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.
- package/build/client/assets/{encryption-80GMP4r0.js → encryption-5eom23r0.js} +11 -5
- package/build/client/assets/{highlighted-body-B3W2YXNL-BcILn2ch.js → highlighted-body-B3W2YXNL-9Gx_xbQ8.js} +1 -1
- package/build/client/assets/{home-CI2sZzZZ.js → home-D6JmZfUp.js} +2 -2
- package/build/client/assets/{manifest-c3c3f64e.js → manifest-3243993f.js} +1 -1
- package/build/client/assets/{mermaid-3ZIDBTTL-BE1h5qUK.js → mermaid-3ZIDBTTL-CjHrXABH.js} +2005 -1992
- package/build/client/assets/{root-Cr0bUIN7.js → root--_OYilvb.js} +1 -1
- package/build/client/assets/{run-detail-gIcQ-2KJ.js → run-detail-BeA7fQfA.js} +219 -91
- package/build/client/assets/{workflow-graph-viewer-fudq4EvS.js → workflow-graph-viewer-BNsGQIfR.js} +1 -1
- package/build/server/assets/{app-DZ5lj7U4.js → app-Bw7CxKyr.js} +1 -1
- package/build/server/assets/{highlighted-body-B3W2YXNL-ByO-v0q1.js → highlighted-body-B3W2YXNL-KnZkHlP2.js} +2 -2
- package/build/server/assets/{index-6XpyP-Zw.js → index-D1onv-Hr.js} +3 -3
- package/build/server/assets/{mermaid-3ZIDBTTL-CJpvg6rz.js → mermaid-3ZIDBTTL-CvDmHqoa.js} +2 -2
- package/build/server/assets/{server-build-DiegzHGY.js → server-build-BBm5-YMr.js} +1916 -1632
- package/build/server/assets/{token-DLJYtB0F.js → token-DUzouuf-.js} +2 -2
- package/build/server/assets/{token-util-Cv4v93wd.js → token-util-DoCTpdh_.js} +2 -2
- package/build/server/index.js +1 -1
- package/package.json +6 -6
|
@@ -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-
|
|
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-
|
|
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,
|
|
4
|
-
import { decrypt, importKey } from "./encryption-
|
|
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
|
-
|
|
807
|
+
const sourceEvents = isExactSearchActive ? searchResults : events ?? [];
|
|
808
|
+
if (sourceEvents.length === 0)
|
|
770
809
|
return [];
|
|
771
810
|
const dir = effectiveSortOrder === "desc" ? -1 : 1;
|
|
772
|
-
return [...
|
|
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
|
-
|
|
814
|
+
const sourceEvents = isExactSearchActive ? searchResults : events;
|
|
815
|
+
if (!sourceEvents)
|
|
776
816
|
return false;
|
|
777
|
-
for (const event of
|
|
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
|
-
|
|
882
|
-
|
|
883
|
-
|
|
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
|
-
|
|
888
|
-
|
|
889
|
-
|
|
890
|
-
|
|
891
|
-
|
|
892
|
-
|
|
893
|
-
|
|
894
|
-
|
|
895
|
-
|
|
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
|
-
|
|
901
|
-
|
|
902
|
-
|
|
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
|
-
|
|
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
|
|
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.
|
|
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
|
-
|
|
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
|
|
6113
|
-
|
|
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: [
|
package/build/client/assets/{workflow-graph-viewer-fudq4EvS.js → workflow-graph-viewer-BNsGQIfR.js}
RENAMED
|
@@ -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,
|
|
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-
|
|
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-
|
|
2
|
-
import { r as reactExports } from "./app-
|
|
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-
|
|
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-
|
|
3
|
-
import "./app-
|
|
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";
|