@workflow/web 5.0.0-beta.43 → 5.0.0-beta.46
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/{arrow-up-right-D39pnGsD.js → arrow-up-right-UOc2WcaC.js} +1 -1
- package/build/client/assets/{highlighted-body-B3W2YXNL-Dc1dLaUr.js → highlighted-body-B3W2YXNL-D78gcP7S.js} +1 -1
- package/build/client/assets/{home-C6CuMqQu.js → home-DYB1uz9w.js} +3 -3
- package/build/client/assets/{loader-circle-BOxaTUjK.js → loader-circle-oscnpy3L.js} +1 -1
- package/build/client/assets/{manifest-157e28f1.js → manifest-a701502a.js} +1 -1
- package/build/client/assets/{mermaid-3ZIDBTTL-gEw-Ch1C.js → mermaid-3ZIDBTTL-BKGEyEYb.js} +463 -334
- package/build/client/assets/{root-BfhMCbkz.js → root-Zvnb602n.js} +3 -3
- package/build/client/assets/{run-detail-BG_1K2Hq.js → run-detail-CedyZW9h.js} +54 -31
- package/build/client/assets/{workflow-graph-viewer-CxrWityD.js → workflow-graph-viewer-Du0ztkb8.js} +1 -1
- package/build/client/assets/{zstd-browser-decoder-CAEVa0bm.js → zstd-browser-decoder-DafWVuEG.js} +1 -1
- package/build/server/assets/{app-_xgEuKqE.js → app-BpmEMaiu.js} +1162 -852
- package/build/server/assets/{highlighted-body-B3W2YXNL-B1Smd86a.js → highlighted-body-B3W2YXNL-C6ES2Pzm.js} +1 -1
- package/build/server/assets/{index-CSsrecUx.js → index-BtQfiVUN.js} +75 -73
- package/build/server/assets/{index-Ck5CB_wQ.js → index-QOlZC9D-.js} +1 -1
- package/build/server/assets/{mermaid-3ZIDBTTL-CwYR558N.js → mermaid-3ZIDBTTL-X6IEJ8gj.js} +1 -1
- package/build/server/assets/{token-COK7oHMh.js → token-CrxXUTBD.js} +1 -1
- package/build/server/assets/{token-util-BhmVdeCX.js → token-util-DuToe55u.js} +1 -1
- package/build/server/assets/{websocket-server-ByjlHAhQ.js → websocket-server-CTnzV_B7.js} +1 -1
- package/build/server/assets/{wrapper-DWeVTope.js → wrapper-Bjff6YRz.js} +3 -3
- package/build/server/assets/{ws-transport-BCfcEhAO.js → ws-transport-ByYax88V.js} +40 -22
- package/build/server/assets/{zstd-browser-decoder-D8JD_nwS.js → zstd-browser-decoder-Bfk1d5vU.js} +1 -1
- package/build/server/index.js +3 -3
- package/package.json +8 -8
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { r as reactExports, j as jsxRuntimeExports, w as withComponentProps, a as withErrorBoundaryProps, M as Meta, L as Links, S as ScrollRestoration, b as Scripts, O as Outlet, u as useRouteError, i as isRouteErrorResponse, c as Link, d as useNavigate, e as useSearchParams } from "./index-PFjW8YjQ.js";
|
|
2
|
-
import { c as createLucideIcon, u as useServerConfig, T as Tooltip, a as TooltipTrigger, b as TooltipContent, d as runHealthCheck, t as toast, B as Button, e as cn, f as Toaster$1, S as ServerConfigProvider, g as TooltipProvider } from "./mermaid-3ZIDBTTL-
|
|
3
|
-
import { L as LoaderCircle } from "./loader-circle-
|
|
4
|
-
import { A as ArrowUpRight } from "./arrow-up-right-
|
|
2
|
+
import { c as createLucideIcon, u as useServerConfig, T as Tooltip, a as TooltipTrigger, b as TooltipContent, d as runHealthCheck, t as toast, B as Button, e as cn, f as Toaster$1, S as ServerConfigProvider, g as TooltipProvider } from "./mermaid-3ZIDBTTL-BKGEyEYb.js";
|
|
3
|
+
import { L as LoaderCircle } from "./loader-circle-oscnpy3L.js";
|
|
4
|
+
import { A as ArrowUpRight } from "./arrow-up-right-UOc2WcaC.js";
|
|
5
5
|
var M = (e, i, s, u, m, a, l, h) => {
|
|
6
6
|
let d = document.documentElement, w = ["light", "dark"];
|
|
7
7
|
function p(n) {
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { r as reactExports, j as jsxRuntimeExports, o as reactDomExports, D as ReactDOM, d as useNavigate, e as useSearchParams, c as Link, w as withComponentProps, G as useParams } from "./index-PFjW8YjQ.js";
|
|
2
|
-
import { C as CircleAlert, O as parseStepName, B as parseWorkflowName, Q as ErrorCard, U as format, Z as Zap, S as Send, R as ResolveHookModal, q as ChevronUp, X, N as ErrorBoundary, V as Circle, u as unwrapOrThrow, W as WorkflowWebAPIError, I as unwrapServerActionResult, 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, n as hideOthers, o as ReactRemoveScroll, a2 as useFocusGuards, a3 as LAYOUT, a4 as wakeUpRun, l as resumeHook, A as Alert, c as AlertTitle, g as getErrorTitle, d as AlertDescription, e as getErrorMessage, a as Skeleton$1, a5 as RunActionsButtons, F as StatusBadge, h as CopyableText, b as RelativeTime, T as Tabs, K as TabsList, L as TabsTrigger, M as TabsContent, a6 as cancelRun, a7 as recreateRun } from "./workflow-graph-viewer-
|
|
3
|
-
import { c as createLucideIcon, Y as entityEventClass, Z as
|
|
4
|
-
import { A as ArrowUpRight } from "./arrow-up-right-
|
|
2
|
+
import { C as CircleAlert, O as parseStepName, B as parseWorkflowName, Q as ErrorCard, U as format, Z as Zap, S as Send, R as ResolveHookModal, q as ChevronUp, X, N as ErrorBoundary, V as Circle, u as unwrapOrThrow, W as WorkflowWebAPIError, I as unwrapServerActionResult, 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, n as hideOthers, o as ReactRemoveScroll, a2 as useFocusGuards, a3 as LAYOUT, a4 as wakeUpRun, l as resumeHook, A as Alert, c as AlertTitle, g as getErrorTitle, d as AlertDescription, e as getErrorMessage, a as Skeleton$1, a5 as RunActionsButtons, F as StatusBadge, h as CopyableText, b as RelativeTime, T as Tabs, K as TabsList, L as TabsTrigger, M as TabsContent, a6 as cancelRun, a7 as recreateRun } from "./workflow-graph-viewer-Du0ztkb8.js";
|
|
3
|
+
import { c as createLucideIcon, Y as entityEventClass, Z as isSealedNoopEvent$1, $ as cn, a0 as CopyableDataBlock, a1 as CollapsibleRoot, a2 as CollapsibleTrigger, a3 as CollapsibleContent, a4 as CopyButton, O as cva, a5 as RESERVED_ATTRIBUTE_KEY_PREFIX, a6 as Spinner, a7 as TooltipProvider, a8 as Tooltip, a9 as TooltipTrigger, aa as TooltipContent, ab as ContextCardProvider, h as useToast, ac as Skeleton, ad as DecryptClickContext, ae as Yr, af as isEncryptedMarker, m as ChevronRight, ag as TimestampTooltip, ah as formatDuration, C as Check, l as Copy, ai as DataInspector, aj as _r, ak as isHookLifecycleEventType, al as isTerminalStepEventType, am as isWaitEventType, an as isStepEventType, ao as RunClickContext, ap as StreamClickContext, aq as Collapsible, ar as isExpiredMarker, as as isDoStreamStep, at as extractConversation, au as EncryptedDataBlock, av as getEventDataRefFields, aw as hasEncryptedFields, ax as useSidebarDataOptional, ay as isTerminalWorkflowRunStatus, az as clsx, aA as useActiveSpan, aB as useSidebarData, aC as IconButton, J as ChevronDown, aD as useRowWindow, aE as isSpanDimmedBySearch, aF as ROW_HEIGHT_PX, aG as getSpanDurationMs, aH as isSpanErrored, aI as formatDurationPrecise, aJ as ActiveSpanProvider, aK as useReducedMotion, aL as searchSpans, aM as computeRootBounds, aN as computeTimeMarkers, aO as clampViewportToRoot, aP as getHighResInMs, aQ as scrollRowIntoView, aR as TIMELINE_PADDING_PX, aS as Minimap, aT as Timeline, aU as TimelineHeader, aV as wheelZoomScaleFactor, aW as wheelDeltaToPixels, aX as SidebarDataProvider, aY as fetchHook, n as fetchEvents, aZ as hydrateResourceIOAsync, N as fetchRun, a_ as fetchStep, a$ as hydrateResourceIO, b0 as fetchStreams, b1 as apiBase, b2 as Slot, L as useComposedRefs, b3 as Slottable, e as cn$1, b4 as buttonVariants, b5 as fetchEvent, b6 as fetchEventsByCorrelationId, b7 as isEncryptedData, b8 as hydrateData, b9 as decrypt, ba as deriveRunPayloadKeys, bb as getWebRevivers, T as Tooltip$1, a as TooltipTrigger$1, b as TooltipContent$1, bc as LIVE_UPDATE_INTERVAL_MS$1, u as useServerConfig, bd as getEncryptionKeyForRun, t as toast, be as StreamViewerSkeleton, bf as Lock, bg as StreamViewer } from "./mermaid-3ZIDBTTL-BKGEyEYb.js";
|
|
4
|
+
import { A as ArrowUpRight } from "./arrow-up-right-UOc2WcaC.js";
|
|
5
5
|
/**
|
|
6
6
|
* @license lucide-react v0.575.0 - ISC
|
|
7
7
|
*
|
|
@@ -194,6 +194,10 @@ function looksLikeWorkflowIdSearchInput(query) {
|
|
|
194
194
|
}
|
|
195
195
|
return /\d/.test(trimmed);
|
|
196
196
|
}
|
|
197
|
+
const SEALED_EVENT_MESSAGE = "No-op events are written by the backend to seal an abandoned log position";
|
|
198
|
+
function isSealedNoopEvent(event) {
|
|
199
|
+
return isSealedNoopEvent$1(event);
|
|
200
|
+
}
|
|
197
201
|
const ELLIPSIS = "…";
|
|
198
202
|
const MIN_START = 3;
|
|
199
203
|
const MIN_END = 3;
|
|
@@ -671,14 +675,14 @@ function AttrSetEventBlock({ data }) {
|
|
|
671
675
|
const writerLabel = describeWriter(data.writer);
|
|
672
676
|
return jsxRuntimeExports.jsxs("div", { className: "flex flex-col px-3 py-1", children: [jsxRuntimeExports.jsx("div", { className: "flex flex-col", children: data.changes.map((change, index) => jsxRuntimeExports.jsx(AttributeRow, { attributeKey: change.key, removed: change.value === null, value: change.value ?? void 0 }, `${change.key}:${index}`)) }), writerLabel && jsxRuntimeExports.jsx("div", { className: "border-gray-alpha-400 border-t py-1.5 text-gray-700 text-label-12", children: writerLabel })] });
|
|
673
677
|
}
|
|
674
|
-
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}`;
|
|
675
|
-
function DecryptButton({ decrypted = false, loading = false, onClick }) {
|
|
676
|
-
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"] })] });
|
|
678
|
+
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-btn:disabled{cursor:not-allowed;opacity:.5}.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}`;
|
|
679
|
+
function DecryptButton({ decrypted = false, loading = false, disabled = false, disabledReason, onClick }) {
|
|
680
|
+
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 || disabled, title: disabled ? disabledReason : void 0, 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"] })] });
|
|
677
681
|
}
|
|
678
|
-
function
|
|
679
|
-
if (!
|
|
682
|
+
function EventNoticeTooltip({ notice, children }) {
|
|
683
|
+
if (!notice)
|
|
680
684
|
return children;
|
|
681
|
-
return jsxRuntimeExports.jsx(TooltipProvider, { delayDuration: 300, children: jsxRuntimeExports.jsxs(Tooltip, { children: [jsxRuntimeExports.jsx(TooltipTrigger, { asChild: true, children }), jsxRuntimeExports.jsx(TooltipContent, { className: "max-w-[264px] leading-snug", collisionPadding: 8, side: "top", children:
|
|
685
|
+
return jsxRuntimeExports.jsx(TooltipProvider, { delayDuration: 300, children: jsxRuntimeExports.jsxs(Tooltip, { children: [jsxRuntimeExports.jsx(TooltipTrigger, { asChild: true, children }), jsxRuntimeExports.jsx(TooltipContent, { className: "max-w-[264px] leading-snug", collisionPadding: 8, side: "top", children: notice })] }) });
|
|
682
686
|
}
|
|
683
687
|
function isStructuredError(value) {
|
|
684
688
|
return value != null && typeof value === "object" && (typeof value.message === "string" || typeof value.stack === "string");
|
|
@@ -703,7 +707,7 @@ ${stack}` : body;
|
|
|
703
707
|
borderBottom: "1px solid var(--ds-red-400)"
|
|
704
708
|
}, children: [jsxRuntimeExports.jsx(CircleAlert, { className: "h-4 w-4 shrink-0" }), jsxRuntimeExports.jsx("p", {
|
|
705
709
|
className: "text-label-12 font-semibold m-0 truncate",
|
|
706
|
-
// The full message or stack is in the body below; the header
|
|
710
|
+
// The full message or stack is in the body below; the header
|
|
707
711
|
// shows the first line, single-line, with overflow
|
|
708
712
|
// ellipsised so a long title doesn't push the copy button or
|
|
709
713
|
// wrap into the framed hint/docs lines.
|
|
@@ -795,6 +799,9 @@ function getStatusDotColor(eventType) {
|
|
|
795
799
|
if (eventType === "step_started" || eventType === "run_started" || eventType === "workflow_started" || eventType === "hook_received") {
|
|
796
800
|
return "var(--ds-blue-700)";
|
|
797
801
|
}
|
|
802
|
+
if (eventType === "noop") {
|
|
803
|
+
return "var(--ds-gray-500)";
|
|
804
|
+
}
|
|
798
805
|
return "var(--ds-gray-600)";
|
|
799
806
|
}
|
|
800
807
|
function buildNameMaps(events, run) {
|
|
@@ -804,7 +811,7 @@ function buildNameMaps(events, run) {
|
|
|
804
811
|
for (const event of events) {
|
|
805
812
|
if (event.eventType === "step_created" && event.correlationId) {
|
|
806
813
|
const stepName = ((_a = event.eventData) == null ? void 0 : _a.stepName) ?? "";
|
|
807
|
-
const parsed = parseStepName(String(stepName));
|
|
814
|
+
const parsed = parseStepName(String(stepName)) ?? parseWorkflowName(String(stepName));
|
|
808
815
|
correlationNameMap.set(event.correlationId, (parsed == null ? void 0 : parsed.shortName) ?? stepName);
|
|
809
816
|
}
|
|
810
817
|
}
|
|
@@ -863,9 +870,9 @@ function hasEncryptedValues(data) {
|
|
|
863
870
|
return false;
|
|
864
871
|
}
|
|
865
872
|
function isRunLevel(eventType) {
|
|
866
|
-
return eventType === "run_created" || eventType === "run_started" || eventType === "run_completed" || eventType === "run_failed" || eventType === "run_cancelled" || eventType === "workflow_started" || eventType === "workflow_completed" || eventType === "workflow_failed" || // attr_set
|
|
867
|
-
// so
|
|
868
|
-
eventType === "attr_set";
|
|
873
|
+
return eventType === "run_created" || eventType === "run_started" || eventType === "run_completed" || eventType === "run_failed" || eventType === "run_cancelled" || eventType === "workflow_started" || eventType === "workflow_completed" || eventType === "workflow_failed" || // attr_set and noop carry a dedup/positional correlationId rather than a
|
|
874
|
+
// child entity ID, so they group and label with the run itself.
|
|
875
|
+
eventType === "attr_set" || eventType === "noop";
|
|
869
876
|
}
|
|
870
877
|
const GUTTER_WIDTH = 36;
|
|
871
878
|
const LANE_X = 20;
|
|
@@ -1073,6 +1080,8 @@ function EventRow$1({ event, index, isFirst, isLast, isExpanded, onToggleExpand,
|
|
|
1073
1080
|
}
|
|
1074
1081
|
}, []);
|
|
1075
1082
|
const rowGroupKey = isRunLevel(event.eventType) ? "__run__" : event.correlationId ?? void 0;
|
|
1083
|
+
const isSealed = isSealedNoopEvent(event);
|
|
1084
|
+
const rowNotice = isDuplicate ? DUPLICATE_EVENT_MESSAGE : isSealed ? SEALED_EVENT_MESSAGE : void 0;
|
|
1076
1085
|
const statusDotColor = getStatusDotColor(event.eventType);
|
|
1077
1086
|
const createdAt = new Date(event.createdAt);
|
|
1078
1087
|
const occurredAt = parseEventDate(event.occurredAt);
|
|
@@ -1180,8 +1189,8 @@ function EventRow$1({ event, index, isFirst, isLast, isExpanded, onToggleExpand,
|
|
|
1180
1189
|
}, children: jsxRuntimeExports.jsx(ChevronRight, { className: "h-3 w-3 transition-transform", style: {
|
|
1181
1190
|
color: "var(--ds-gray-900)",
|
|
1182
1191
|
transform: isExpanded ? "rotate(90deg)" : "rotate(0deg)"
|
|
1183
|
-
} }) }), showSeparateEventOccurrenceTimestamps && jsxRuntimeExports.jsx("div", { className: "tabular-nums min-w-0 px-4", style: { color: "var(--ds-gray-900)", flex: "2 1 0%" }, children: occurredAt ? jsxRuntimeExports.jsx(TimestampTooltip, { date: occurredAt, children: jsxRuntimeExports.jsx("span", { children: formatEventTime(occurredAt) }) }) : "-" }), jsxRuntimeExports.jsx("div", { className: "tabular-nums min-w-0 px-4", style: { color: "var(--ds-gray-900)", flex: "2 1 0%" }, children: jsxRuntimeExports.jsx(TimestampTooltip, { date: displayedCreatedAt, children: jsxRuntimeExports.jsx("span", { children: formatEventTime(displayedCreatedAt) }) }) }), jsxRuntimeExports.jsx("div", { className: "font-medium min-w-0 px-4", style: { flex: "2 1 0%" }, children: jsxRuntimeExports.jsx(
|
|
1184
|
-
color:
|
|
1192
|
+
} }) }), showSeparateEventOccurrenceTimestamps && jsxRuntimeExports.jsx("div", { className: "tabular-nums min-w-0 px-4", style: { color: "var(--ds-gray-900)", flex: "2 1 0%" }, children: occurredAt ? jsxRuntimeExports.jsx(TimestampTooltip, { date: occurredAt, children: jsxRuntimeExports.jsx("span", { children: formatEventTime(occurredAt) }) }) : "-" }), jsxRuntimeExports.jsx("div", { className: "tabular-nums min-w-0 px-4", style: { color: "var(--ds-gray-900)", flex: "2 1 0%" }, children: jsxRuntimeExports.jsx(TimestampTooltip, { date: displayedCreatedAt, children: jsxRuntimeExports.jsx("span", { children: formatEventTime(displayedCreatedAt) }) }) }), jsxRuntimeExports.jsx("div", { className: "font-medium min-w-0 px-4", style: { flex: "2 1 0%" }, children: jsxRuntimeExports.jsx(EventNoticeTooltip, { notice: rowNotice, children: jsxRuntimeExports.jsxs("span", { className: "inline-flex items-center gap-1.5", style: {
|
|
1193
|
+
color: rowNotice ? "var(--ds-gray-700)" : "var(--ds-gray-900)"
|
|
1185
1194
|
}, children: [jsxRuntimeExports.jsxs("span", { style: {
|
|
1186
1195
|
position: "relative",
|
|
1187
1196
|
display: "inline-flex",
|
|
@@ -1211,7 +1220,7 @@ function EventRow$1({ event, index, isFirst, isLast, isExpanded, onToggleExpand,
|
|
|
1211
1220
|
color: "var(--ds-red-900)"
|
|
1212
1221
|
}, 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-label-12", style: { color: "var(--ds-gray-900)" }, children: "No data" })] })] })] });
|
|
1213
1222
|
}
|
|
1214
|
-
function EventListViewInner({ events, run, onLoadEventData, hasMoreEvents = false, isLoadingMoreEvents = false, onLoadMoreEvents, encryptionKey, isLoading = false, sortOrder: sortOrderProp, onSortOrderChange, onDecrypt, isDecrypting = false, hasEncryptedData: hasEncryptedDataProp = false, onExactIdSearch, showSeparateEventOccurrenceTimestamps = false }) {
|
|
1223
|
+
function EventListViewInner({ events, run, onLoadEventData, hasMoreEvents = false, isLoadingMoreEvents = false, onLoadMoreEvents, encryptionKey, isLoading = false, sortOrder: sortOrderProp, onSortOrderChange, onDecrypt, isDecrypting = false, isDecryptDisabled = false, decryptDisabledReason, hasEncryptedData: hasEncryptedDataProp = false, onExactIdSearch, showSeparateEventOccurrenceTimestamps = false }) {
|
|
1215
1224
|
const toast2 = useToast();
|
|
1216
1225
|
const [internalSortOrder, setInternalSortOrder] = reactExports.useState("asc");
|
|
1217
1226
|
const effectiveSortOrder = sortOrderProp ?? internalSortOrder;
|
|
@@ -1429,7 +1438,12 @@ function EventListViewInner({ events, run, onLoadEventData, hasMoreEvents = fals
|
|
|
1429
1438
|
if (isInitialLoad) {
|
|
1430
1439
|
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, {})] });
|
|
1431
1440
|
}
|
|
1432
|
-
return jsxRuntimeExports.jsx(DecryptClickContext.Provider, { value: onDecrypt ? {
|
|
1441
|
+
return jsxRuntimeExports.jsx(DecryptClickContext.Provider, { value: onDecrypt ? {
|
|
1442
|
+
onDecrypt,
|
|
1443
|
+
isDecrypting,
|
|
1444
|
+
isDecryptDisabled,
|
|
1445
|
+
decryptDisabledReason
|
|
1446
|
+
} : 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: {
|
|
1433
1447
|
padding: 6,
|
|
1434
1448
|
backgroundColor: "var(--ds-background-100)",
|
|
1435
1449
|
display: "flex",
|
|
@@ -1464,7 +1478,7 @@ function EventListViewInner({ events, run, onLoadEventData, hasMoreEvents = fals
|
|
|
1464
1478
|
width: "100%",
|
|
1465
1479
|
opacity: onExactIdSearch ? 1 : 0.5,
|
|
1466
1480
|
cursor: onExactIdSearch ? "text" : "not-allowed"
|
|
1467
|
-
} })] }), 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-label-13 font-medium h-10 border-b flex-shrink-0", style: {
|
|
1481
|
+
} })] }), jsxRuntimeExports.jsx(MenuDropdown, { options: SORT_OPTIONS, value: effectiveSortOrder, onChange: handleSortOrderChange }), (hasEncryptedData || encryptionKey) && onDecrypt && jsxRuntimeExports.jsx(DecryptButton, { decrypted: !!encryptionKey, loading: isDecrypting, disabled: isDecryptDisabled, disabledReason: decryptDisabledReason, onClick: onDecrypt })] }), jsxRuntimeExports.jsxs("div", { className: "flex items-center gap-0 text-label-13 font-medium h-10 border-b flex-shrink-0", style: {
|
|
1468
1482
|
borderColor: "var(--ds-gray-alpha-200)",
|
|
1469
1483
|
color: "var(--ds-gray-900)",
|
|
1470
1484
|
backgroundColor: "var(--ds-background-100)"
|
|
@@ -1756,7 +1770,7 @@ function stepToSpan(stepEvents, maxEndTime) {
|
|
|
1756
1770
|
if (!step) {
|
|
1757
1771
|
return null;
|
|
1758
1772
|
}
|
|
1759
|
-
const parsedName = parseStepName(String(step.stepName));
|
|
1773
|
+
const parsedName = parseStepName(String(step.stepName)) ?? parseWorkflowName(String(step.stepName));
|
|
1760
1774
|
const attributes = {
|
|
1761
1775
|
resource: "step",
|
|
1762
1776
|
data: step
|
|
@@ -1969,7 +1983,7 @@ function buildTrace(run, events, now, { isCompleteHistory = false } = {}) {
|
|
|
1969
1983
|
const duplicateEventIds = findDuplicateEventIds(events, {
|
|
1970
1984
|
isCompleteHistory
|
|
1971
1985
|
});
|
|
1972
|
-
const actedOnEvents =
|
|
1986
|
+
const actedOnEvents = events.filter((event) => !duplicateEventIds.has(event.eventId) && !isSealedNoopEvent(event));
|
|
1973
1987
|
const groupedEvents = groupEventsByCorrelation(actedOnEvents);
|
|
1974
1988
|
const latestKnownTime = computeLatestKnownTime(actedOnEvents, run);
|
|
1975
1989
|
const { runSpan, spans } = buildSpans(run, groupedEvents, now, latestKnownTime);
|
|
@@ -2319,7 +2333,7 @@ const attributeToDisplayFn = {
|
|
|
2319
2333
|
receivedCount: (value) => String(value),
|
|
2320
2334
|
lastReceivedAt: localMillisecondTimeOrNull,
|
|
2321
2335
|
disposedAt: localMillisecondTimeOrNull,
|
|
2322
|
-
// Internal resume plumbing
|
|
2336
|
+
// Internal resume plumbing, not surfaced in the UI
|
|
2323
2337
|
resumeContext: (_value) => null,
|
|
2324
2338
|
resumeId: (_value) => null,
|
|
2325
2339
|
resumeCapabilities: (_value) => null,
|
|
@@ -2337,7 +2351,7 @@ const attributeToDisplayFn = {
|
|
|
2337
2351
|
projectId: (_value) => null,
|
|
2338
2352
|
environment: (_value) => null,
|
|
2339
2353
|
executionContext: (_value) => null,
|
|
2340
|
-
// Attributes
|
|
2354
|
+
// Attributes: string-string metadata attached to the run.
|
|
2341
2355
|
// Rendered as key-value rows in its own collapsible section;
|
|
2342
2356
|
// if empty/missing, hidden by the hasDisplayContent gate.
|
|
2343
2357
|
attributes: (value) => {
|
|
@@ -2345,7 +2359,7 @@ const attributeToDisplayFn = {
|
|
|
2345
2359
|
return null;
|
|
2346
2360
|
return jsxRuntimeExports.jsx(RunAttributesCard, { attributes: value });
|
|
2347
2361
|
},
|
|
2348
|
-
// Dates
|
|
2362
|
+
// Dates: wrapped with TimestampTooltip showing UTC/local + relative time
|
|
2349
2363
|
occurredAt: timestampWithTooltipOrNull,
|
|
2350
2364
|
createdAt: timestampWithTooltipOrNull,
|
|
2351
2365
|
startedAt: timestampWithTooltipOrNull,
|
|
@@ -2433,7 +2447,7 @@ const attributeToDisplayFn = {
|
|
|
2433
2447
|
},
|
|
2434
2448
|
// Internal encryption plumbing: the run's X25519 public key, used by
|
|
2435
2449
|
// cross-run writers to seal payloads to this run. Not actionable for users
|
|
2436
|
-
// and not secret
|
|
2450
|
+
// and not secret, so hidden rather than rendered as 44 opaque base64 chars.
|
|
2437
2451
|
encryptionPublicKey: (_value) => null
|
|
2438
2452
|
};
|
|
2439
2453
|
const resolvableAttributes = [
|
|
@@ -2505,7 +2519,7 @@ const AttributeBlock = ({ attribute, value, isLoading, inline = false, context }
|
|
|
2505
2519
|
}
|
|
2506
2520
|
return jsxRuntimeExports.jsxs("div", { className: "relative", children: [typeof isLoading === "boolean" && isLoading && jsxRuntimeExports.jsx("div", { className: "absolute top-9 right-4", children: jsxRuntimeExports.jsx("div", { className: "animate-spin rounded-full h-4 w-4 border-b-2", style: { borderColor: "var(--ds-gray-900)" } }) }), jsxRuntimeExports.jsxs("div", { className: "my-2 flex flex-col gap-0", children: [jsxRuntimeExports.jsx("span", { className: "text-label-14 text-gray-1000 font-medium first-letter:uppercase", children: attribute }), jsxRuntimeExports.jsx("span", { className: "text-label-12", style: { color: "var(--ds-gray-1000)" }, children: displayValue })] }, attribute)] });
|
|
2507
2521
|
};
|
|
2508
|
-
const AttributePanel = ({ data, moduleSpecifier, moduleSourceUrl, isLoading, error, expiredAt, onStreamClick, onRunClick, onDecrypt, isDecrypting = false, resource }) => {
|
|
2522
|
+
const AttributePanel = ({ data, moduleSpecifier, moduleSourceUrl, isLoading, error, expiredAt, onStreamClick, onRunClick, onDecrypt, isDecrypting = false, isDecryptDisabled = false, decryptDisabledReason, resource }) => {
|
|
2509
2523
|
const displayData = reactExports.useMemo(() => {
|
|
2510
2524
|
const result = { ...data };
|
|
2511
2525
|
const execCtx = data.executionContext;
|
|
@@ -2571,6 +2585,8 @@ const AttributePanel = ({ data, moduleSpecifier, moduleSourceUrl, isLoading, err
|
|
|
2571
2585
|
const decryptValue = onDecrypt ? {
|
|
2572
2586
|
onDecrypt,
|
|
2573
2587
|
isDecrypting,
|
|
2588
|
+
isDecryptDisabled,
|
|
2589
|
+
decryptDisabledReason,
|
|
2574
2590
|
hasEncryptedData: outerDecryptCtx == null ? void 0 : outerDecryptCtx.hasEncryptedData
|
|
2575
2591
|
} : outerDecryptCtx;
|
|
2576
2592
|
return jsxRuntimeExports.jsx(ContextCardProvider, { children: jsxRuntimeExports.jsx(RunClickContext.Provider, { value: onRunClick, children: jsxRuntimeExports.jsx(StreamClickContext.Provider, { value: onStreamClick, children: jsxRuntimeExports.jsxs(DecryptClickContext.Provider, { value: decryptValue, children: [visibleBasicAttributes.length > 0 && jsxRuntimeExports.jsxs(CollapsibleRoot, { defaultOpen: true, children: [jsxRuntimeExports.jsx(CollapsibleTrigger, { children: "Metadata" }), jsxRuntimeExports.jsx(CollapsibleContent, { className: "mt-0 mb-2", children: jsxRuntimeExports.jsxs("div", { className: "flex flex-col", children: [orderedBasicAttributes.map((attribute) => {
|
|
@@ -2637,6 +2653,7 @@ function EventItem({ event, onLoadEventData, encryptionKey, showSeparateEventOcc
|
|
|
2637
2653
|
setLoadedData(null);
|
|
2638
2654
|
void loadEventData(true);
|
|
2639
2655
|
}, [encryptionKey, loadEventData]);
|
|
2656
|
+
const rowNotice = isDuplicate ? DUPLICATE_EVENT_MESSAGE : isSealedNoopEvent(event) ? SEALED_EVENT_MESSAGE : void 0;
|
|
2640
2657
|
const createdAt = new Date(event.createdAt);
|
|
2641
2658
|
const occurredAt = parseDateValue(event.occurredAt);
|
|
2642
2659
|
const displayedCreatedAt = showSeparateEventOccurrenceTimestamps ? createdAt : getEffectiveEventDate(event);
|
|
@@ -2649,7 +2666,7 @@ function EventItem({ event, onLoadEventData, encryptionKey, showSeparateEventOcc
|
|
|
2649
2666
|
return jsxRuntimeExports.jsxs(CollapsibleRoot, { variant: "card", onOpenChange: canHaveData ? (open) => {
|
|
2650
2667
|
if (open)
|
|
2651
2668
|
handleExpand();
|
|
2652
|
-
} : void 0, children: [jsxRuntimeExports.jsx(CollapsibleTrigger, { className: "px-3 py-2", children: jsxRuntimeExports.jsxs("div", { className: "flex w-full items-center justify-between gap-3", children: [jsxRuntimeExports.jsx(
|
|
2669
|
+
} : void 0, children: [jsxRuntimeExports.jsx(CollapsibleTrigger, { className: "px-3 py-2", children: jsxRuntimeExports.jsxs("div", { className: "flex w-full items-center justify-between gap-3", children: [jsxRuntimeExports.jsx(EventNoticeTooltip, { notice: rowNotice, children: jsxRuntimeExports.jsx("span", { className: `text-label-12 font-mono ${rowNotice ? "text-gray-700" : "text-gray-1000"}`, children: event.eventType }) }), jsxRuntimeExports.jsx("span", { className: "shrink-0 text-label-13 text-gray-900", children: displayedCreatedAtTime })] }) }), jsxRuntimeExports.jsxs(CollapsibleContent, { children: [jsxRuntimeExports.jsxs("div", { className: "flex flex-col bg-background-200 [&:has(+_*)]:border-b [&:has(+_*)]:border-gray-alpha-400", children: [showSeparateEventOccurrenceTimestamps && occurredAt && jsxRuntimeExports.jsxs("div", { className: "flex items-center justify-between gap-2 py-2 px-3", children: [jsxRuntimeExports.jsx("span", { className: "text-label-12 text-gray-900", children: "Occurred" }), jsxRuntimeExports.jsx(TimestampTooltip, { date: occurredAt, children: jsxRuntimeExports.jsx("span", { className: "max-w-[70%] truncate text-right text-label-12 font-mono", children: formatEventTimestamp(occurredAt) }) })] }), jsxRuntimeExports.jsxs("div", { className: "flex items-center justify-between gap-2 py-2 px-3", children: [jsxRuntimeExports.jsx("span", { className: "text-label-12 text-gray-900", children: "Event ID" }), jsxRuntimeExports.jsx("span", { className: "max-w-[70%] truncate text-right text-label-12 font-mono", children: event.eventId })] }), event.correlationId && jsxRuntimeExports.jsxs("div", { className: "flex items-center justify-between gap-2 py-2 px-3", children: [jsxRuntimeExports.jsx("span", { className: "text-label-12 text-gray-900", children: "Correlation ID" }), jsxRuntimeExports.jsx("span", { className: "max-w-[70%] truncate text-right text-label-12 font-mono", children: event.correlationId })] })] }), isLoading && jsxRuntimeExports.jsxs("div", { className: "p-3", children: [jsxRuntimeExports.jsx(Skeleton, { className: "h-4 w-[35%]" }), jsxRuntimeExports.jsx(Skeleton, { className: "mt-2 h-4 w-[90%]" }), jsxRuntimeExports.jsx(Skeleton, { className: "mt-2 h-4 w-[75%]" })] }), loadError && jsxRuntimeExports.jsx(ErrorCard, { title: "Failed to load event data", details: loadError, className: "mt-2" }), displayPayload != null && jsxRuntimeExports.jsx("div", { className: "[&>div]:border-none [&>div]:rounded-none", children: jsxRuntimeExports.jsx(EventDataBlock, { eventType: event.eventType, data: displayPayload }) })] })] });
|
|
2653
2670
|
}
|
|
2654
2671
|
function hasOnlyExpiredFields(data, eventType) {
|
|
2655
2672
|
if (data === null || typeof data !== "object" || Array.isArray(data)) {
|
|
@@ -2844,7 +2861,7 @@ function useSelectedSpanDetail(selectedSpan, fetchSpanDetail) {
|
|
|
2844
2861
|
function isHook(data) {
|
|
2845
2862
|
return data !== null && typeof data === "object" && "hookId" in data;
|
|
2846
2863
|
}
|
|
2847
|
-
function EntityDetailPanel({ run, onStreamClick, onRunClick, fetchSpanDetail, onWakeUpSleep, onLoadEventData, onResolveHook, encryptionKey, onDecrypt, isDecrypting = false, selectedSpan, showSeparateEventOccurrenceTimestamps = false, getModuleSourceUrl }) {
|
|
2864
|
+
function EntityDetailPanel({ run, onStreamClick, onRunClick, fetchSpanDetail, onWakeUpSleep, onLoadEventData, onResolveHook, encryptionKey, onDecrypt, isDecrypting = false, isDecryptDisabled = false, decryptDisabledReason, selectedSpan, showSeparateEventOccurrenceTimestamps = false, getModuleSourceUrl }) {
|
|
2848
2865
|
const toast2 = useToast();
|
|
2849
2866
|
const [stoppingSleep, setStoppingSleep] = reactExports.useState(false);
|
|
2850
2867
|
const [showResolveHookModal, setShowResolveHookModal] = reactExports.useState(false);
|
|
@@ -3002,7 +3019,13 @@ function EntityDetailPanel({ run, onStreamClick, onRunClick, fetchSpanDetail, on
|
|
|
3002
3019
|
return null;
|
|
3003
3020
|
}
|
|
3004
3021
|
const hasPendingActions = resource === "sleep" && canWakeUp || resource === "hook" && canResolveHook;
|
|
3005
|
-
return jsxRuntimeExports.jsxs("div", { className: "flex h-full flex-col", children: [jsxRuntimeExports.jsx(DecryptClickContext.Provider, { value: onDecrypt ? {
|
|
3022
|
+
return jsxRuntimeExports.jsxs("div", { className: "flex h-full flex-col", children: [jsxRuntimeExports.jsx(DecryptClickContext.Provider, { value: onDecrypt ? {
|
|
3023
|
+
onDecrypt,
|
|
3024
|
+
isDecrypting,
|
|
3025
|
+
isDecryptDisabled,
|
|
3026
|
+
decryptDisabledReason,
|
|
3027
|
+
hasEncryptedData
|
|
3028
|
+
} : void 0, children: jsxRuntimeExports.jsxs("div", { className: "flex-1 overflow-y-auto px-4 pb-8", children: [hasPendingActions && jsxRuntimeExports.jsxs("div", { className: "mb-4 rounded-lg border p-2", style: {
|
|
3006
3029
|
borderColor: "var(--ds-gray-300)",
|
|
3007
3030
|
backgroundColor: "var(--ds-gray-100)"
|
|
3008
3031
|
}, children: [jsxRuntimeExports.jsx("p", { className: "mb-2 px-1 text-label-13 font-medium uppercase tracking-wide", style: { color: "var(--ds-gray-700)" }, children: "Actions" }), jsxRuntimeExports.jsxs("div", { className: "flex flex-col gap-2", children: [resource === "sleep" && canWakeUp && jsxRuntimeExports.jsxs("button", { type: "button", onClick: handleWakeUp, disabled: stoppingSleep, className: clsx("flex items-center justify-center gap-2 rounded-md px-3 py-2 text-button-14", "disabled:opacity-50 disabled:cursor-not-allowed transition-colors", stoppingSleep ? "opacity-50 cursor-not-allowed" : "cursor-pointer"), style: {
|
|
@@ -3011,7 +3034,7 @@ function EntityDetailPanel({ run, onStreamClick, onRunClick, fetchSpanDetail, on
|
|
|
3011
3034
|
}, children: [jsxRuntimeExports.jsx(Zap, { className: "h-4 w-4" }), stoppingSleep ? "Waking up..." : "Wake Up Sleep"] }), resource === "hook" && canResolveHook && jsxRuntimeExports.jsxs("button", { type: "button", onClick: () => setShowResolveHookModal(true), disabled: resolvingHook, className: clsx("flex items-center justify-center gap-2 rounded-md px-3 py-2 text-button-14", "disabled:opacity-50 disabled:cursor-not-allowed transition-colors", resolvingHook ? "opacity-50 cursor-not-allowed" : "cursor-pointer"), style: {
|
|
3012
3035
|
background: "var(--ds-gray-1000)",
|
|
3013
3036
|
color: "var(--ds-background-100)"
|
|
3014
|
-
}, children: [jsxRuntimeExports.jsx(Send, { className: "h-4 w-4" }), "Resolve Hook"] })] })] }), jsxRuntimeExports.jsx(AttributePanel, { data: displayData, moduleSpecifier, moduleSourceUrl, expiredAt: run.expiredAt, isLoading: loading, error: error ?? void 0, onStreamClick, onRunClick, onDecrypt, isDecrypting, resource }), rawEvents && jsxRuntimeExports.jsx(EventsList, { events: rawEvents, onLoadEventData, onStreamClick, onRunClick, encryptionKey, showSeparateEventOccurrenceTimestamps, duplicateEventIds: selectedSpan == null ? void 0 : selectedSpan.duplicateEventIds })] }) }), jsxRuntimeExports.jsx(ResolveHookModal, { isOpen: showResolveHookModal, onClose: () => setShowResolveHookModal(false), onSubmit: handleResolveHook, isSubmitting: resolvingHook })] });
|
|
3037
|
+
}, children: [jsxRuntimeExports.jsx(Send, { className: "h-4 w-4" }), "Resolve Hook"] })] })] }), jsxRuntimeExports.jsx(AttributePanel, { data: displayData, moduleSpecifier, moduleSourceUrl, expiredAt: run.expiredAt, isLoading: loading, error: error ?? void 0, onStreamClick, onRunClick, onDecrypt, isDecrypting, isDecryptDisabled, decryptDisabledReason, resource }), rawEvents && jsxRuntimeExports.jsx(EventsList, { events: rawEvents, onLoadEventData, onStreamClick, onRunClick, encryptionKey, showSeparateEventOccurrenceTimestamps, duplicateEventIds: selectedSpan == null ? void 0 : selectedSpan.duplicateEventIds })] }) }), jsxRuntimeExports.jsx(ResolveHookModal, { isOpen: showResolveHookModal, onClose: () => setShowResolveHookModal(false), onSubmit: handleResolveHook, isSubmitting: resolvingHook })] });
|
|
3015
3038
|
}
|
|
3016
3039
|
const PANEL_MIN_WIDTH = 280;
|
|
3017
3040
|
const PANEL_HARD_MAX_WIDTH = 1300;
|
|
@@ -3263,7 +3286,7 @@ function TraceDetailPanel({ containerRef, onNavigateToSpan, onClose }) {
|
|
|
3263
3286
|
}, [selectedSpan == null ? void 0 : selectedSpan.data, selectedSpan == null ? void 0 : selectedSpan.resource]);
|
|
3264
3287
|
if (!activeSpan)
|
|
3265
3288
|
return null;
|
|
3266
|
-
return jsxRuntimeExports.jsxs("aside", { ref: asideRef, id: DETAIL_PANEL_ID, className: "relative flex flex-col h-full max-h-full shrink-0 bg-background-100 border-l border-gray-alpha-400", style: { width: panelWidth }, children: [jsxRuntimeExports.jsx(DraggableBorder, { element: asideRef, position: "left", onWidthChange: handleResize, onReset: () => handleResize(PANEL_DEFAULT_WIDTH), "aria-label": "Resize span details panel", "aria-controls": DETAIL_PANEL_ID, "aria-valuemin": PANEL_MIN_WIDTH, "aria-valuemax": panelMaxWidth, "aria-valuenow": Math.min(Math.max(Math.round(panelWidth), PANEL_MIN_WIDTH), panelMaxWidth) }), jsxRuntimeExports.jsxs("div", { className: "flex items-center justify-between gap-2 shrink-0 px-4 py-[7.5px]", children: [jsxRuntimeExports.jsx("span", { className: "text-label-14 font-medium text-gray-1000 truncate block", children: selectedSpanName }), jsxRuntimeExports.jsxs("div", { className: "flex items-center gap-0.5 shrink-0", children: [jsxRuntimeExports.jsxs(Tooltip, { children: [jsxRuntimeExports.jsx(TooltipTrigger, { asChild: true, children: jsxRuntimeExports.jsx(IconButton, { "aria-label": "Navigate up", "aria-keyshortcuts": "K", onClick: handleSelectPrev, disabled: !prevSpanId, children: jsxRuntimeExports.jsx(ChevronUp, { className: "w-4 h-4" }) }) }), prevSpanId ? jsxRuntimeExports.jsxs(TooltipContent, { children: ["Navigate up", jsxRuntimeExports.jsx(Kbd, { children: "K" })] }) : null] }), jsxRuntimeExports.jsxs(Tooltip, { children: [jsxRuntimeExports.jsx(TooltipTrigger, { asChild: true, children: jsxRuntimeExports.jsx(IconButton, { "aria-label": "Navigate down", "aria-keyshortcuts": "J", onClick: handleSelectNext, disabled: !nextSpanId, children: jsxRuntimeExports.jsx(ChevronDown, { className: "w-4 h-4" }) }) }), nextSpanId ? jsxRuntimeExports.jsxs(TooltipContent, { children: ["Navigate down", jsxRuntimeExports.jsx(Kbd, { children: "J" })] }) : null] }), jsxRuntimeExports.jsx("div", { "aria-hidden": true, className: "w-px h-4 bg-gray-alpha-400 mx-1" }), jsxRuntimeExports.jsx(IconButton, { "aria-label": "Close span details", "aria-keyshortcuts": "Escape", onClick: onClose, children: jsxRuntimeExports.jsx(X, { className: "w-4 h-4" }) })] })] }), jsxRuntimeExports.jsx("div", { className: "flex-1 overflow-y-auto", children: jsxRuntimeExports.jsx(ErrorBoundary, { children: jsxRuntimeExports.jsx(EntityDetailPanel, { run: sidebar.run, onStreamClick: sidebar.onStreamClick, onRunClick: sidebar.onRunClick, fetchSpanDetail: sidebar.fetchSpanDetail, onWakeUpSleep: sidebar.onWakeUpSleep, onLoadEventData: sidebar.onLoadEventData, onResolveHook: sidebar.onResolveHook, encryptionKey: sidebar.encryptionKey, onDecrypt: sidebar.onDecrypt, isDecrypting: sidebar.isDecrypting, selectedSpan, showSeparateEventOccurrenceTimestamps: sidebar.showSeparateEventOccurrenceTimestamps, getModuleSourceUrl: sidebar.getModuleSourceUrl }) }) })] });
|
|
3289
|
+
return jsxRuntimeExports.jsxs("aside", { ref: asideRef, id: DETAIL_PANEL_ID, className: "relative flex flex-col h-full max-h-full shrink-0 bg-background-100 border-l border-gray-alpha-400", style: { width: panelWidth }, children: [jsxRuntimeExports.jsx(DraggableBorder, { element: asideRef, position: "left", onWidthChange: handleResize, onReset: () => handleResize(PANEL_DEFAULT_WIDTH), "aria-label": "Resize span details panel", "aria-controls": DETAIL_PANEL_ID, "aria-valuemin": PANEL_MIN_WIDTH, "aria-valuemax": panelMaxWidth, "aria-valuenow": Math.min(Math.max(Math.round(panelWidth), PANEL_MIN_WIDTH), panelMaxWidth) }), jsxRuntimeExports.jsxs("div", { className: "flex items-center justify-between gap-2 shrink-0 px-4 py-[7.5px]", children: [jsxRuntimeExports.jsx("span", { className: "text-label-14 font-medium text-gray-1000 truncate block", children: selectedSpanName }), jsxRuntimeExports.jsxs("div", { className: "flex items-center gap-0.5 shrink-0", children: [jsxRuntimeExports.jsxs(Tooltip, { children: [jsxRuntimeExports.jsx(TooltipTrigger, { asChild: true, children: jsxRuntimeExports.jsx(IconButton, { "aria-label": "Navigate up", "aria-keyshortcuts": "K", onClick: handleSelectPrev, disabled: !prevSpanId, children: jsxRuntimeExports.jsx(ChevronUp, { className: "w-4 h-4" }) }) }), prevSpanId ? jsxRuntimeExports.jsxs(TooltipContent, { children: ["Navigate up", jsxRuntimeExports.jsx(Kbd, { children: "K" })] }) : null] }), jsxRuntimeExports.jsxs(Tooltip, { children: [jsxRuntimeExports.jsx(TooltipTrigger, { asChild: true, children: jsxRuntimeExports.jsx(IconButton, { "aria-label": "Navigate down", "aria-keyshortcuts": "J", onClick: handleSelectNext, disabled: !nextSpanId, children: jsxRuntimeExports.jsx(ChevronDown, { className: "w-4 h-4" }) }) }), nextSpanId ? jsxRuntimeExports.jsxs(TooltipContent, { children: ["Navigate down", jsxRuntimeExports.jsx(Kbd, { children: "J" })] }) : null] }), jsxRuntimeExports.jsx("div", { "aria-hidden": true, className: "w-px h-4 bg-gray-alpha-400 mx-1" }), jsxRuntimeExports.jsx(IconButton, { "aria-label": "Close span details", "aria-keyshortcuts": "Escape", onClick: onClose, children: jsxRuntimeExports.jsx(X, { className: "w-4 h-4" }) })] })] }), jsxRuntimeExports.jsx("div", { className: "flex-1 overflow-y-auto", children: jsxRuntimeExports.jsx(ErrorBoundary, { children: jsxRuntimeExports.jsx(EntityDetailPanel, { run: sidebar.run, onStreamClick: sidebar.onStreamClick, onRunClick: sidebar.onRunClick, fetchSpanDetail: sidebar.fetchSpanDetail, onWakeUpSleep: sidebar.onWakeUpSleep, onLoadEventData: sidebar.onLoadEventData, onResolveHook: sidebar.onResolveHook, encryptionKey: sidebar.encryptionKey, onDecrypt: sidebar.onDecrypt, isDecrypting: sidebar.isDecrypting, isDecryptDisabled: sidebar.isDecryptDisabled, decryptDisabledReason: sidebar.decryptDisabledReason, selectedSpan, showSeparateEventOccurrenceTimestamps: sidebar.showSeparateEventOccurrenceTimestamps, getModuleSourceUrl: sidebar.getModuleSourceUrl }) }) })] });
|
|
3267
3290
|
}
|
|
3268
3291
|
const WorkflowIcon = () => {
|
|
3269
3292
|
return jsxRuntimeExports.jsx("svg", { "aria-hidden": "true", "data-testid": "geist-icon", height: "16", strokeLinejoin: "round", viewBox: "0 0 16 16", width: "16", children: jsxRuntimeExports.jsx("path", { d: "M5.75 7L6.4209 7.33594L4.85254 10.4717C5.38789 10.771 5.75 11.3431 5.75 12V14C5.75 14.9665 4.96648 15.75 4 15.75H2C1.03352 15.75 0.25 14.9665 0.25 14V12C0.25 11.0335 1.03352 10.25 2 10.25H3.28711L5.0791 6.66504L5.75 7ZM14 10.25C14.9665 10.25 15.75 11.0335 15.75 12V14C15.75 14.9665 14.9665 15.75 14 15.75H12C11.1185 15.75 10.3909 15.098 10.2695 14.25H7V12.75H10.25V12C10.25 11.0335 11.0335 10.25 12 10.25H14ZM2 11.75C1.86192 11.75 1.75 11.8619 1.75 12V14C1.75 14.1381 1.86192 14.25 2 14.25H4C4.13808 14.25 4.25 14.1381 4.25 14V12C4.25 11.8619 4.13808 11.75 4 11.75H2ZM12 11.75C11.8619 11.75 11.75 11.8619 11.75 12V14C11.75 14.1381 11.8619 14.25 12 14.25H14C14.1381 14.25 14.25 14.1381 14.25 14V12C14.25 11.8619 14.1381 11.75 14 11.75H12ZM9 0.25C9.96649 0.25 10.75 1.03351 10.75 2V4C10.75 4.44642 10.5808 4.85197 10.3057 5.16113L12.2041 8.6416L10.8877 9.36035L8.91895 5.75H7C6.03351 5.75 5.25 4.96649 5.25 4V2C5.25 1.03351 6.03351 0.25 7 0.25H9ZM7 1.75C6.86193 1.75 6.75 1.86193 6.75 2V4C6.75 4.13807 6.86193 4.25 7 4.25H9C9.13807 4.25 9.25 4.13807 9.25 4V2C9.25 1.86193 9.13807 1.75 9 1.75H7Z", fill: "currentColor" }) });
|
package/build/client/assets/{workflow-graph-viewer-CxrWityD.js → workflow-graph-viewer-Du0ztkb8.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, J as ChevronDown,
|
|
4
|
+
import { c as createLucideIcon, J as ChevronDown, $ as cn, e as cn$1, O as cva, bh as composeRefs, L as useComposedRefs, bi as useFloating, bj as offset, bk as shift, bl as limitShift, bm as flip, bn as size, bo as arrow, bp as hide, bq as autoUpdate, m as ChevronRight, C as Check, br as VERCEL_403_ERROR_MESSAGE, bs as bulkCancelRuns$1, bt as reenqueueRun$1, bu as wakeUpRun$1, bv as resumeHook$1, bw as fetchHookToken$1, bx as cancelRun$1, by as recreateRun$1, T as Tooltip, a as TooltipTrigger, l as Copy, b as TooltipContent, z as createContextScope$1, p as useComposedRefs$1, E as createSlot, ah as formatDuration, B as Button, t as toast, w as useId$1, P as Primitive$1, q as composeEventHandlers$1, G as useControllableState$1, o as useCallbackRef$2, U as Presence$1 } from "./mermaid-3ZIDBTTL-BKGEyEYb.js";
|
|
5
5
|
import { r as reactExports, j as jsxRuntimeExports, o as reactDomExports, R as ReactExports, H as React, D as ReactDOM, f as requireReact, I as getDefaultExportFromCjs } from "./index-PFjW8YjQ.js";
|
|
6
6
|
function parseName(tag, name) {
|
|
7
7
|
if (typeof name !== "string") {
|