@workflow/web 5.0.0-beta.38 → 5.0.0-beta.39

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.
Files changed (27) hide show
  1. package/README.md +1 -0
  2. package/build/client/assets/app-BqwHo5GR.css +1 -0
  3. package/build/client/assets/{arrow-up-right-BRTGGI7c.js → arrow-up-right-Ccx_FPfU.js} +1 -1
  4. package/build/client/assets/{highlighted-body-B3W2YXNL-DwhUiBi7.js → highlighted-body-B3W2YXNL-DMawUm9n.js} +1 -1
  5. package/build/client/assets/{home-DBrnNvHF.js → home-B6O_uPSC.js} +3 -3
  6. package/build/client/assets/{loader-circle-WvWWlrvM.js → loader-circle-BrO0dxVn.js} +1 -1
  7. package/build/client/assets/{manifest-70ec0eba.js → manifest-7e8691f4.js} +1 -1
  8. package/build/client/assets/{mermaid-3ZIDBTTL-xYKZZytQ.js → mermaid-3ZIDBTTL-D20ZkB54.js} +473 -1549
  9. package/build/client/assets/mermaid-3ZIDBTTL-D8CjRQta.css +1 -0
  10. package/build/client/assets/root-CxZylOIf.css +1 -0
  11. package/build/client/assets/{root-Cimnh7R3.js → root-dudvdmvf.js} +3 -3
  12. package/build/client/assets/{run-detail-Dr7nmBuO.js → run-detail-DtCCxxv2.js} +224 -210
  13. package/build/client/assets/{workflow-graph-viewer-tTf4FHzV.js → workflow-graph-viewer-B01nH75E.js} +2 -2
  14. package/build/client/assets/{zstd-browser-decoder-B15ptsR4.js → zstd-browser-decoder-Dw3HhTgO.js} +1 -1
  15. package/build/server/assets/{app-BUMjG2-y.js → app-Bd12Opaf.js} +7017 -7304
  16. package/build/server/assets/{highlighted-body-B3W2YXNL-Bkx5Bh9I.js → highlighted-body-B3W2YXNL-CFlRme7u.js} +1 -1
  17. package/build/server/assets/{index-DVvcuTAp.js → index-B6SJpqpo.js} +62 -59
  18. package/build/server/assets/{mermaid-3ZIDBTTL-CSJYRI2g.js → mermaid-3ZIDBTTL-CQsU8DGa.js} +1 -1
  19. package/build/server/assets/{token-BXRDO8X7.js → token-XJr1pjmC.js} +1 -1
  20. package/build/server/assets/{token-util-2RA-Rh-5.js → token-util-BJaMxWWP.js} +1 -1
  21. package/build/server/assets/{zstd-browser-decoder-Cqnyq-Ly.js → zstd-browser-decoder-DL7Vc3pV.js} +1 -1
  22. package/build/server/index.js +3 -3
  23. package/package.json +7 -7
  24. package/build/client/assets/app-_i85JgUF.css +0 -1
  25. package/build/client/assets/mermaid-3ZIDBTTL-DDxQhcP4.css +0 -1
  26. package/build/client/assets/root-CINgYZFD.css +0 -1
  27. package/build/client/assets/worker-CqHKTA7D.js +0 -115
@@ -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, y as cancelRun, a6 as recreateRun } from "./workflow-graph-viewer-tTf4FHzV.js";
3
- import { c as createLucideIcon, X as cn, Y as CopyableDataBlock, Z as CollapsibleRoot, $ as CollapsibleTrigger, a0 as CollapsibleContent, a1 as CopyButton, N as cva, a2 as RESERVED_ATTRIBUTE_KEY_PREFIX, a3 as Spinner, a4 as ContextCardProvider, h as useToast, a5 as Skeleton, a6 as DecryptClickContext, a7 as Yr, a8 as isEncryptedMarker, m as ChevronRight, a9 as TimestampTooltip, aa as formatDuration, C as Check, l as Copy, ab as DataInspector, ac as isHookLifecycleEventType, ad as isTerminalStepEventType, ae as isWaitEventType, af as isStepEventType, ag as _r, ah as RunClickContext, ai as StreamClickContext, aj as Collapsible, ak as isExpiredMarker, al as isDoStreamStep, am as extractConversation, an as EncryptedDataBlock, ao as getEventDataRefFields, ap as hasEncryptedFields, aq as useSidebarDataOptional, ar as isTerminalWorkflowRunStatus, as as clsx, at as useActiveSpan, au as useSidebarData, av as Tooltip, aw as TooltipTrigger, ax as IconButton, ay as TooltipContent, J as ChevronDown, az as useRowWindow, aA as isSpanDimmedBySearch, aB as ROW_HEIGHT_PX, aC as getSpanDurationMs, aD as isSpanErrored, aE as formatDurationPrecise, aF as TooltipProvider, aG as ActiveSpanProvider, aH as useReducedMotion, aI as searchSpans, aJ as computeRootBounds, aK as computeTimeMarkers, aL as clampViewportToRoot, aM as getHighResInMs, aN as scrollRowIntoView, aO as TIMELINE_PADDING_PX, aP as Minimap, aQ as Timeline, aR as TimelineHeader, aS as wheelZoomScaleFactor, aT as wheelDeltaToPixels, aU as SidebarDataProvider, aV as fetchHook, n as fetchEvents, aW as hydrateResourceIOAsync, M as fetchRun, aX as fetchStep, aY as hydrateResourceIO, aZ as fetchStreams, a_ as apiBase, a$ as Slot, L as useComposedRefs, b0 as Slottable, e as cn$1, b1 as buttonVariants, b2 as fetchEvent, b3 as fetchEventsByCorrelationId, b4 as isEncryptedData, b5 as hydrateData, b6 as decrypt, b7 as deriveRunPayloadKeys, b8 as getWebRevivers, T as Tooltip$1, a as TooltipTrigger$1, b as TooltipContent$1, b9 as LIVE_UPDATE_INTERVAL_MS$1, u as useServerConfig, ba as getEncryptionKeyForRun, t as toast, bb as StreamViewerSkeleton, bc as Lock, bd as StreamViewer } from "./mermaid-3ZIDBTTL-xYKZZytQ.js";
4
- import { A as ArrowUpRight } from "./arrow-up-right-BRTGGI7c.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, y as cancelRun, a6 as recreateRun } from "./workflow-graph-viewer-B01nH75E.js";
3
+ import { c as createLucideIcon, X as cn, Y as CopyableDataBlock, Z as CollapsibleRoot, $ as CollapsibleTrigger, a0 as CollapsibleContent, a1 as CopyButton, N as cva, a2 as RESERVED_ATTRIBUTE_KEY_PREFIX, a3 as Spinner, a4 as ContextCardProvider, h as useToast, a5 as Skeleton, a6 as DecryptClickContext, a7 as Yr, a8 as isEncryptedMarker, m as ChevronRight, a9 as TimestampTooltip, aa as formatDuration, C as Check, l as Copy, ab as DataInspector, ac as _r, ad as isHookLifecycleEventType, ae as isTerminalStepEventType, af as isWaitEventType, ag as isStepEventType, ah as RunClickContext, ai as StreamClickContext, aj as Collapsible, ak as isExpiredMarker, al as isDoStreamStep, am as extractConversation, an as EncryptedDataBlock, ao as getEventDataRefFields, ap as hasEncryptedFields, aq as useSidebarDataOptional, ar as isTerminalWorkflowRunStatus, as as clsx, at as useActiveSpan, au as useSidebarData, av as Tooltip, aw as TooltipTrigger, ax as IconButton, ay as TooltipContent, J as ChevronDown, az as useRowWindow, aA as isSpanDimmedBySearch, aB as ROW_HEIGHT_PX, aC as getSpanDurationMs, aD as isSpanErrored, aE as formatDurationPrecise, aF as TooltipProvider, aG as ActiveSpanProvider, aH as useReducedMotion, aI as searchSpans, aJ as computeRootBounds, aK as computeTimeMarkers, aL as clampViewportToRoot, aM as getHighResInMs, aN as scrollRowIntoView, aO as TIMELINE_PADDING_PX, aP as Minimap, aQ as Timeline, aR as TimelineHeader, aS as wheelZoomScaleFactor, aT as wheelDeltaToPixels, aU as SidebarDataProvider, aV as fetchHook, n as fetchEvents, aW as hydrateResourceIOAsync, M as fetchRun, aX as fetchStep, aY as hydrateResourceIO, aZ as fetchStreams, a_ as apiBase, a$ as Slot, L as useComposedRefs, b0 as Slottable, e as cn$1, b1 as buttonVariants, b2 as fetchEvent, b3 as fetchEventsByCorrelationId, b4 as isEncryptedData, b5 as hydrateData, b6 as decrypt, b7 as deriveRunPayloadKeys, b8 as getWebRevivers, T as Tooltip$1, a as TooltipTrigger$1, b as TooltipContent$1, b9 as LIVE_UPDATE_INTERVAL_MS$1, u as useServerConfig, ba as getEncryptionKeyForRun, t as toast, bb as StreamViewerSkeleton, bc as Lock, bd as StreamViewer } from "./mermaid-3ZIDBTTL-D20ZkB54.js";
4
+ import { A as ArrowUpRight } from "./arrow-up-right-Ccx_FPfU.js";
5
5
  /**
6
6
  * @license lucide-react v0.575.0 - ISC
7
7
  *
@@ -516,14 +516,14 @@ ${stack}` : body;
516
516
  color: "var(--ds-red-900)",
517
517
  borderBottom: "1px solid var(--ds-red-400)"
518
518
  }, children: [jsxRuntimeExports.jsx(CircleAlert, { className: "h-4 w-4 shrink-0" }), jsxRuntimeExports.jsx("p", {
519
- className: "text-xs font-semibold m-0 truncate",
519
+ className: "text-label-12 font-semibold m-0 truncate",
520
520
  // The full message or stack is in the body below; the header just
521
521
  // shows the first line, single-line, with overflow
522
522
  // ellipsised so a long title doesn't push the copy button or
523
523
  // wrap into the framed hint/docs lines.
524
524
  title: message,
525
525
  children: title
526
- })] }), body && jsxRuntimeExports.jsx("pre", { className: "px-3 py-2.5 text-xs font-mono whitespace-pre-wrap break-words overflow-auto m-0", style: {
526
+ })] }), body && jsxRuntimeExports.jsx("pre", { className: "px-3 py-2.5 text-label-12-mono whitespace-pre-wrap break-words overflow-auto m-0", style: {
527
527
  color: "var(--ds-red-900)",
528
528
  background: "var(--ds-red-200)"
529
529
  }, children: body })] });
@@ -870,10 +870,10 @@ function PayloadBlock({ data, eventType }) {
870
870
  if (eventType === "run_cancelled") {
871
871
  const cancelReason = cleaned != null && typeof cleaned === "object" && typeof cleaned.cancelReason === "string" ? cleaned.cancelReason : null;
872
872
  if (cancelReason) {
873
- return jsxRuntimeExports.jsxs("div", { className: "p-2 text-xs", style: { color: "var(--ds-gray-1000)" }, children: [jsxRuntimeExports.jsx("span", { style: { color: "var(--ds-gray-900)" }, children: "Reason: " }), jsxRuntimeExports.jsx("span", { className: "whitespace-pre-wrap break-words", children: cancelReason })] });
873
+ return jsxRuntimeExports.jsxs("div", { className: "p-2 text-label-12", style: { color: "var(--ds-gray-1000)" }, children: [jsxRuntimeExports.jsx("span", { style: { color: "var(--ds-gray-900)" }, children: "Reason: " }), jsxRuntimeExports.jsx("span", { className: "whitespace-pre-wrap break-words", children: cancelReason })] });
874
874
  }
875
875
  }
876
- return jsxRuntimeExports.jsxs("div", { className: "relative group/payload", children: [jsxRuntimeExports.jsx("div", { className: "overflow-x-auto p-2 text-[11px]", style: { color: "var(--ds-gray-1000)" }, children: jsxRuntimeExports.jsx(DataInspector, { data: cleaned, expandLevel: 2 }) }), jsxRuntimeExports.jsx("button", { type: "button", onClick: handleCopy, className: "absolute bottom-2 right-2 opacity-0 group-hover/payload:opacity-100 transition-opacity flex items-center gap-1 px-2 py-1 rounded-md text-xs hover:bg-[var(--ds-gray-alpha-200)]", style: { ...BUTTON_RESET_STYLE, color: "var(--ds-gray-700)" }, "aria-label": "Copy payload", children: copied ? jsxRuntimeExports.jsxs(jsxRuntimeExports.Fragment, { children: [jsxRuntimeExports.jsx(Check, { className: "h-3 w-3", style: { color: "var(--ds-green-700)" } }), jsxRuntimeExports.jsx("span", { style: { color: "var(--ds-green-700)" }, children: "Copied" })] }) : jsxRuntimeExports.jsxs(jsxRuntimeExports.Fragment, { children: [jsxRuntimeExports.jsx(Copy, { className: "h-3 w-3" }), jsxRuntimeExports.jsx("span", { children: "Copy" })] }) })] });
876
+ return jsxRuntimeExports.jsxs("div", { className: "relative group/payload", children: [jsxRuntimeExports.jsx("div", { className: "overflow-x-auto p-2 text-[11px]", style: { color: "var(--ds-gray-1000)" }, children: jsxRuntimeExports.jsx(DataInspector, { data: cleaned, expandLevel: 2 }) }), jsxRuntimeExports.jsx("button", { type: "button", onClick: handleCopy, className: "absolute bottom-2 right-2 opacity-0 group-hover/payload:opacity-100 transition-opacity flex items-center gap-1 px-2 py-1 rounded-md text-button-12 hover:bg-[var(--ds-gray-alpha-200)]", style: { ...BUTTON_RESET_STYLE, color: "var(--ds-gray-700)" }, "aria-label": "Copy payload", children: copied ? jsxRuntimeExports.jsxs(jsxRuntimeExports.Fragment, { children: [jsxRuntimeExports.jsx(Check, { className: "h-3 w-3", style: { color: "var(--ds-green-700)" } }), jsxRuntimeExports.jsx("span", { style: { color: "var(--ds-green-700)" }, children: "Copied" })] }) : jsxRuntimeExports.jsxs(jsxRuntimeExports.Fragment, { children: [jsxRuntimeExports.jsx(Copy, { className: "h-3 w-3" }), jsxRuntimeExports.jsx("span", { children: "Copy" })] }) })] });
877
877
  }
878
878
  const SORT_OPTIONS = [
879
879
  { value: "desc", label: "Newest" },
@@ -1006,7 +1006,7 @@ function EventRow$1({ event, index, isFirst, isLast, isExpanded, onToggleExpand,
1006
1006
  return jsxRuntimeExports.jsxs("div", { "data-event-id": event.eventId, onMouseEnter: () => onHoverGroup(rowGroupKey), onMouseLeave: () => onHoverGroup(void 0), children: [jsxRuntimeExports.jsxs("div", { role: "button", tabIndex: 0, onClick: handleRowClick, onKeyDown: (e) => {
1007
1007
  if (e.key === "Enter" || e.key === " ")
1008
1008
  handleRowClick();
1009
- }, className: "w-full text-left flex items-center gap-0 text-[13px] hover:bg-[var(--ds-gray-alpha-100)] transition-colors cursor-pointer", style: { minHeight: 40 }, children: [jsxRuntimeExports.jsx(TreeGutter, { isFirst, isLast: isLast && !isExpanded, isRunLevel: isRun, statusDotColor, pulse: isPulsing, hasSelection: hasActive, showBranch, showLaneLine, isLaneStart, isLaneEnd }), jsxRuntimeExports.jsxs("div", { className: "flex items-center flex-1 min-w-0", style: { opacity: contentOpacity, transition: "opacity 150ms" }, children: [jsxRuntimeExports.jsx("div", { className: "flex items-center justify-center w-5 h-5 flex-shrink-0 rounded", style: {
1009
+ }, className: "w-full text-left flex items-center gap-0 text-label-13 hover:bg-[var(--ds-gray-alpha-100)] transition-colors cursor-pointer", style: { minHeight: 40 }, children: [jsxRuntimeExports.jsx(TreeGutter, { isFirst, isLast: isLast && !isExpanded, isRunLevel: isRun, statusDotColor, pulse: isPulsing, hasSelection: hasActive, showBranch, showLaneLine, isLaneStart, isLaneEnd }), jsxRuntimeExports.jsxs("div", { className: "flex items-center flex-1 min-w-0", style: { opacity: contentOpacity, transition: "opacity 150ms" }, children: [jsxRuntimeExports.jsx("div", { className: "flex items-center justify-center w-5 h-5 flex-shrink-0 rounded", style: {
1010
1010
  border: "1px solid var(--ds-gray-400)"
1011
1011
  }, children: jsxRuntimeExports.jsx(ChevronRight, { className: "h-3 w-3 transition-transform", style: {
1012
1012
  color: "var(--ds-gray-900)",
@@ -1034,11 +1034,11 @@ function EventRow$1({ event, index, isFirst, isLast, isExpanded, onToggleExpand,
1034
1034
  borderColor: "var(--ds-gray-alpha-200)",
1035
1035
  opacity: contentOpacity,
1036
1036
  transition: "opacity 150ms"
1037
- }, children: [((durationInfo == null ? void 0 : durationInfo.queued) !== void 0 || (durationInfo == null ? void 0 : durationInfo.ran) !== void 0) && jsxRuntimeExports.jsxs("div", { className: "px-2 pb-1.5 text-xs flex gap-3", style: { color: "var(--ds-gray-900)" }, children: [durationInfo.queued !== void 0 && durationInfo.queued > 0 && jsxRuntimeExports.jsxs("span", { children: ["Queued for", " ", jsxRuntimeExports.jsx("span", { className: "font-mono tabular-nums", children: formatDuration(durationInfo.queued) })] }), durationInfo.ran !== void 0 && jsxRuntimeExports.jsxs("span", { children: ["Ran for", " ", jsxRuntimeExports.jsx("span", { className: "font-mono tabular-nums", children: formatDuration(durationInfo.ran) })] })] }), displayPayload != null ? jsxRuntimeExports.jsx(PayloadBlock, { data: displayPayload, eventType: event.eventType }) : loadError ? jsxRuntimeExports.jsx("div", { className: "rounded-md border p-3 text-xs", style: {
1037
+ }, children: [((durationInfo == null ? void 0 : durationInfo.queued) !== void 0 || (durationInfo == null ? void 0 : durationInfo.ran) !== void 0) && jsxRuntimeExports.jsxs("div", { className: "px-2 pb-1.5 text-label-12 flex gap-3", style: { color: "var(--ds-gray-900)" }, children: [durationInfo.queued !== void 0 && durationInfo.queued > 0 && jsxRuntimeExports.jsxs("span", { children: ["Queued for", " ", jsxRuntimeExports.jsx("span", { className: "font-mono tabular-nums", children: formatDuration(durationInfo.queued) })] }), durationInfo.ran !== void 0 && jsxRuntimeExports.jsxs("span", { children: ["Ran for", " ", jsxRuntimeExports.jsx("span", { className: "font-mono tabular-nums", children: formatDuration(durationInfo.ran) })] })] }), displayPayload != null ? jsxRuntimeExports.jsx(PayloadBlock, { data: displayPayload, eventType: event.eventType }) : loadError ? jsxRuntimeExports.jsx("div", { className: "rounded-md border p-3 text-label-12", style: {
1038
1038
  borderColor: "var(--ds-red-400)",
1039
1039
  backgroundColor: "var(--ds-red-100)",
1040
1040
  color: "var(--ds-red-900)"
1041
- }, 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" })] })] })] });
1041
+ }, 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" })] })] })] });
1042
1042
  }
1043
1043
  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 }) {
1044
1044
  const toast2 = useToast();
@@ -1290,11 +1290,11 @@ function EventListViewInner({ events, run, onLoadEventData, hasMoreEvents = fals
1290
1290
  width: "100%",
1291
1291
  opacity: onExactIdSearch ? 1 : 0.5,
1292
1292
  cursor: onExactIdSearch ? "text" : "not-allowed"
1293
- } })] }), 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: {
1293
+ } })] }), 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: {
1294
1294
  borderColor: "var(--ds-gray-alpha-200)",
1295
1295
  color: "var(--ds-gray-900)",
1296
1296
  backgroundColor: "var(--ds-background-100)"
1297
- }, children: [jsxRuntimeExports.jsx("div", { className: "flex-shrink-0", style: { width: GUTTER_WIDTH } }), jsxRuntimeExports.jsx("div", { className: "w-5 flex-shrink-0" }), showSeparateEventOccurrenceTimestamps && jsxRuntimeExports.jsx("div", { className: "min-w-0 px-4", style: { flex: "2 1 0%" }, children: "Occurred" }), jsxRuntimeExports.jsx("div", { className: "min-w-0 px-4", style: { flex: "2 1 0%" }, children: "Created" }), 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, { showSeparateEventOccurrenceTimestamps }) : 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: () => {
1297
+ }, children: [jsxRuntimeExports.jsx("div", { className: "flex-shrink-0", style: { width: GUTTER_WIDTH } }), jsxRuntimeExports.jsx("div", { className: "w-5 flex-shrink-0" }), showSeparateEventOccurrenceTimestamps && jsxRuntimeExports.jsx("div", { className: "min-w-0 px-4", style: { flex: "2 1 0%" }, children: "Occurred" }), jsxRuntimeExports.jsx("div", { className: "min-w-0 px-4", style: { flex: "2 1 0%" }, children: "Created" }), 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, { showSeparateEventOccurrenceTimestamps }) : sortedEvents.length === 0 ? jsxRuntimeExports.jsx("div", { className: "flex flex-1 items-center justify-center px-6 text-center text-copy-14", 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: () => {
1298
1298
  if (isExactSearchActive || !hasMoreEvents || isLoadingMoreEvents) {
1299
1299
  return;
1300
1300
  }
@@ -1302,7 +1302,7 @@ function EventListViewInner({ events, run, onLoadEventData, hasMoreEvents = fals
1302
1302
  }, itemContent: (index) => {
1303
1303
  const ev = sortedEvents[index];
1304
1304
  return jsxRuntimeExports.jsx(EventRow$1, { 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, showSeparateEventOccurrenceTimestamps });
1305
- }, 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: {
1305
+ }, style: { flex: 1, minHeight: 0 } }), jsxRuntimeExports.jsxs("div", { className: "relative flex-shrink-0 flex items-center h-10 border-t px-4 text-label-12", style: {
1306
1306
  borderColor: "var(--ds-gray-alpha-200)",
1307
1307
  color: "var(--ds-gray-900)",
1308
1308
  backgroundColor: "var(--ds-background-100)"
@@ -1311,31 +1311,111 @@ function EventListViewInner({ events, run, onLoadEventData, hasMoreEvents = fals
1311
1311
  function EventListView(props) {
1312
1312
  return jsxRuntimeExports.jsx(ContextCardProvider, { children: jsxRuntimeExports.jsx(EventListViewInner, { ...props }) });
1313
1313
  }
1314
- const GUTTER_PX = 1;
1315
- const MIN_PX = 50;
1316
- const DEFAULT_START_PX = 340;
1317
- function paneColTemplate(startPx) {
1318
- return `${startPx}px ${GUTTER_PX}px minmax(${MIN_PX}px, 1fr)`;
1314
+ function ConversationView({ messages }) {
1315
+ if (messages.length === 0) {
1316
+ return jsxRuntimeExports.jsx("div", { className: "text-center py-8 text-[11px]", style: { color: "var(--ds-gray-600)" }, children: "No messages" });
1317
+ }
1318
+ return jsxRuntimeExports.jsx("div", { className: "flex flex-col gap-3 p-3", children: messages.map((message, index) => jsxRuntimeExports.jsx(MessageBubble, { message }, index)) });
1319
1319
  }
1320
- const COL_TEMPLATE = paneColTemplate(DEFAULT_START_PX);
1321
- const ROWS = [
1322
- { id: "r0", name: 62, off: 0, bar: 72 },
1323
- { id: "r1", name: 78, off: 6, bar: 48 },
1324
- { id: "r2", name: 50, off: 10, bar: 55 },
1325
- { id: "r3", name: 84, off: 18, bar: 30 },
1326
- { id: "r4", name: 45, off: 18, bar: 42 },
1327
- { id: "r5", name: 66, off: 34, bar: 38 },
1328
- { id: "r6", name: 55, off: 41, bar: 25 },
1329
- { id: "r7", name: 40, off: 50, bar: 30 }
1330
- ];
1331
- const HEADER_MARKERS = ["m0", "m1", "m2", "m3"];
1332
- const HeaderDivider = () => jsxRuntimeExports.jsx("div", { className: "flex justify-center", children: jsxRuntimeExports.jsx("span", { "aria-hidden": true, className: "h-full w-px bg-gray-alpha-400" }) });
1333
- function TraceViewerSkeleton() {
1334
- return jsxRuntimeExports.jsxs("output", { "aria-busy": "true", "aria-label": "Loading trace", className: "flex flex-col w-full h-full min-h-0 bg-background-100", children: [jsxRuntimeExports.jsx("span", { className: "sr-only", children: "Loading trace…" }), jsxRuntimeExports.jsx("div", { className: "relative h-10 min-h-10 shrink-0 border-b border-gray-alpha-400", children: jsxRuntimeExports.jsx("div", { className: "absolute inset-x-4 top-[6px]", children: ROWS.map((row, index) => jsxRuntimeExports.jsx(Skeleton, { className: "absolute h-[3px] rounded-full", style: {
1335
- left: `${row.off}%`,
1336
- width: `${row.bar}%`,
1337
- top: index * 3.5
1338
- } }, row.id)) }) }), jsxRuntimeExports.jsxs("div", { className: "shrink-0 grid", style: { gridTemplateColumns: COL_TEMPLATE }, children: [jsxRuntimeExports.jsxs("div", { className: "h-10 min-h-10 flex items-center border-b border-gray-alpha-400 pl-4 pr-2 gap-1.5", children: [jsxRuntimeExports.jsx(Skeleton, { className: "w-3.5 h-3.5 shrink-0 rounded-sm" }), jsxRuntimeExports.jsx(Skeleton, { className: "h-3.5 w-40" })] }), jsxRuntimeExports.jsx(HeaderDivider, {}), jsxRuntimeExports.jsx("div", { className: "h-10 min-h-10 flex items-end border-b border-gray-alpha-400 px-4 pb-1 gap-2", children: jsxRuntimeExports.jsx("div", { className: "relative flex-1 flex items-end justify-between", children: HEADER_MARKERS.map((id) => jsxRuntimeExports.jsx(Skeleton, { className: "h-3.5 w-9" }, id)) }) })] }), jsxRuntimeExports.jsxs("div", { className: "grid flex-1 min-h-0 overflow-hidden", style: { gridTemplateColumns: COL_TEMPLATE }, children: [jsxRuntimeExports.jsx("div", { className: "block overflow-visible", children: jsxRuntimeExports.jsx("ul", { className: "block divide-y divide-gray-alpha-400 border-b border-gray-alpha-400", children: ROWS.map((row) => jsxRuntimeExports.jsxs("li", { className: "h-10 flex items-center pl-4 pr-2", children: [jsxRuntimeExports.jsxs("div", { className: "flex min-w-0 flex-1 items-center gap-2", children: [jsxRuntimeExports.jsx(Skeleton, { className: "w-4 h-4 shrink-0 rounded-sm" }), jsxRuntimeExports.jsx(Skeleton, { className: "h-3.5", style: { width: `${row.name}%` } })] }), jsxRuntimeExports.jsx(Skeleton, { className: "ml-2 h-3.5 w-10 shrink-0" })] }, row.id)) }) }), jsxRuntimeExports.jsx("span", { "aria-hidden": true, className: "h-full w-px bg-gray-alpha-400" }), jsxRuntimeExports.jsx("div", { className: "relative min-h-0", children: ROWS.map((row) => jsxRuntimeExports.jsx("div", { className: "relative h-10", children: jsxRuntimeExports.jsx("div", { className: "absolute inset-x-4 inset-y-0", children: jsxRuntimeExports.jsx(Skeleton, { className: "absolute top-1/2 -translate-y-1/2 h-6 rounded-[0.25rem]", style: { left: `${row.off}%`, width: `${row.bar}%` } }) }) }, row.id)) })] })] });
1320
+ function MessageBubble({ message }) {
1321
+ const role = message.role;
1322
+ const parts = parseContent(message.content);
1323
+ const style = getRoleStyle(role);
1324
+ return jsxRuntimeExports.jsxs("div", { className: "rounded-md border text-[11px]", style: {
1325
+ backgroundColor: style.bg,
1326
+ borderColor: style.border
1327
+ }, children: [jsxRuntimeExports.jsx("div", { className: "px-2.5 py-1 border-b text-[10px] font-medium uppercase tracking-wide", style: {
1328
+ borderColor: style.border,
1329
+ color: style.label
1330
+ }, children: role }), jsxRuntimeExports.jsx("div", { className: "px-2.5 py-2 space-y-2", children: parts.map((part, i) => jsxRuntimeExports.jsx(ContentPart, { part, role }, i)) })] });
1331
+ }
1332
+ function ContentPart({ part, role }) {
1333
+ if (part.type === "text") {
1334
+ if (!part.text)
1335
+ return null;
1336
+ if (role === "assistant") {
1337
+ return jsxRuntimeExports.jsx("div", { className: "prose prose-sm max-w-none text-[11px] [&>*:first-child]:mt-0 [&>*:last-child]:mb-0", style: { color: "var(--ds-gray-1000)" }, children: jsxRuntimeExports.jsx(_r, { children: part.text }) });
1338
+ }
1339
+ return jsxRuntimeExports.jsx("div", { className: "whitespace-pre-wrap break-words", style: { color: "var(--ds-gray-1000)" }, children: part.text });
1340
+ }
1341
+ if (part.type === "tool-call") {
1342
+ return jsxRuntimeExports.jsxs("div", { className: "rounded border px-2 py-1.5", style: {
1343
+ backgroundColor: "var(--ds-purple-100)",
1344
+ borderColor: "var(--ds-purple-300)"
1345
+ }, children: [jsxRuntimeExports.jsxs("div", { className: "flex items-center gap-1.5 text-[10px] font-medium", children: [jsxRuntimeExports.jsx("span", { children: "🔧" }), jsxRuntimeExports.jsx("span", { style: { color: "var(--ds-purple-900)" }, children: part.toolName })] }), part.input != null && jsxRuntimeExports.jsx("div", { className: "mt-1.5 overflow-x-auto p-1.5 rounded", style: { backgroundColor: "var(--ds-gray-100)" }, children: typeof part.input === "string" ? jsxRuntimeExports.jsx("pre", { className: "text-[10px]", style: { color: "var(--ds-gray-800)" }, children: part.input }) : jsxRuntimeExports.jsx(DataInspector, { data: part.input }) })] });
1346
+ }
1347
+ if (part.type === "tool-result") {
1348
+ return jsxRuntimeExports.jsxs("div", { className: "rounded border px-2 py-1.5", style: {
1349
+ backgroundColor: "var(--ds-green-100)",
1350
+ borderColor: "var(--ds-green-300)"
1351
+ }, children: [jsxRuntimeExports.jsxs("div", { className: "flex items-center gap-1.5 text-[10px] font-medium", children: [jsxRuntimeExports.jsx("span", { children: "✓" }), jsxRuntimeExports.jsxs("span", { style: { color: "var(--ds-green-900)" }, children: [part.toolName, " result"] })] }), part.output != null && jsxRuntimeExports.jsx("div", { className: "mt-1.5 overflow-x-auto max-h-[200px] overflow-y-auto p-1.5 rounded", style: { backgroundColor: "var(--ds-gray-100)" }, children: typeof part.output === "string" ? jsxRuntimeExports.jsx("pre", { className: "text-[10px]", style: { color: "var(--ds-gray-800)" }, children: part.output }) : jsxRuntimeExports.jsx(DataInspector, { data: part.output, expandLevel: 1 }) })] });
1352
+ }
1353
+ return null;
1354
+ }
1355
+ function getRoleStyle(role) {
1356
+ switch (role) {
1357
+ case "user":
1358
+ return {
1359
+ bg: "var(--ds-blue-100)",
1360
+ border: "var(--ds-blue-300)",
1361
+ label: "var(--ds-blue-700)"
1362
+ };
1363
+ case "assistant":
1364
+ return {
1365
+ bg: "var(--ds-gray-100)",
1366
+ border: "var(--ds-gray-300)",
1367
+ label: "var(--ds-gray-700)"
1368
+ };
1369
+ case "system":
1370
+ return {
1371
+ bg: "var(--ds-amber-100)",
1372
+ border: "var(--ds-amber-300)",
1373
+ label: "var(--ds-amber-700)"
1374
+ };
1375
+ case "tool":
1376
+ return {
1377
+ bg: "var(--ds-green-50)",
1378
+ border: "var(--ds-green-300)",
1379
+ label: "var(--ds-green-700)"
1380
+ };
1381
+ default:
1382
+ return {
1383
+ bg: "var(--ds-gray-100)",
1384
+ border: "var(--ds-gray-300)",
1385
+ label: "var(--ds-gray-700)"
1386
+ };
1387
+ }
1388
+ }
1389
+ function parseContent(content) {
1390
+ if (typeof content === "string") {
1391
+ return [{ type: "text", text: content }];
1392
+ }
1393
+ if (Array.isArray(content)) {
1394
+ return content.map((part) => {
1395
+ if (typeof part === "string") {
1396
+ return { type: "text", text: part };
1397
+ }
1398
+ if ((part == null ? void 0 : part.type) === "text") {
1399
+ return { type: "text", text: String(part.text ?? "") };
1400
+ }
1401
+ if ((part == null ? void 0 : part.type) === "tool-call") {
1402
+ return {
1403
+ type: "tool-call",
1404
+ toolName: part.toolName,
1405
+ input: part.input
1406
+ };
1407
+ }
1408
+ if ((part == null ? void 0 : part.type) === "tool-result") {
1409
+ return {
1410
+ type: "tool-result",
1411
+ toolName: part.toolName,
1412
+ output: part.output
1413
+ };
1414
+ }
1415
+ return { type: "text", text: "" };
1416
+ });
1417
+ }
1418
+ return [];
1339
1419
  }
1340
1420
  function shouldShowVerticalLine(eventType) {
1341
1421
  if (isHookLifecycleEventType(eventType)) {
@@ -1750,111 +1830,86 @@ function buildTrace(run, events, now) {
1750
1830
  knownDurationMs: Math.max(0, knownDurationMs)
1751
1831
  };
1752
1832
  }
1753
- function ConversationView({ messages }) {
1754
- if (messages.length === 0) {
1755
- return jsxRuntimeExports.jsx("div", { className: "text-center py-8 text-[11px]", style: { color: "var(--ds-gray-600)" }, children: "No messages" });
1756
- }
1757
- return jsxRuntimeExports.jsx("div", { className: "flex flex-col gap-3 p-3", children: messages.map((message, index) => jsxRuntimeExports.jsx(MessageBubble, { message }, index)) });
1833
+ const GUTTER_PX = 1;
1834
+ const MIN_PX = 50;
1835
+ const DEFAULT_START_PX = 340;
1836
+ function paneColTemplate(startPx) {
1837
+ return `${startPx}px ${GUTTER_PX}px minmax(${MIN_PX}px, 1fr)`;
1758
1838
  }
1759
- function MessageBubble({ message }) {
1760
- const role = message.role;
1761
- const parts = parseContent(message.content);
1762
- const style = getRoleStyle(role);
1763
- return jsxRuntimeExports.jsxs("div", { className: "rounded-md border text-[11px]", style: {
1764
- backgroundColor: style.bg,
1765
- borderColor: style.border
1766
- }, children: [jsxRuntimeExports.jsx("div", { className: "px-2.5 py-1 border-b text-[10px] font-medium uppercase tracking-wide", style: {
1767
- borderColor: style.border,
1768
- color: style.label
1769
- }, children: role }), jsxRuntimeExports.jsx("div", { className: "px-2.5 py-2 space-y-2", children: parts.map((part, i) => jsxRuntimeExports.jsx(ContentPart, { part, role }, i)) })] });
1839
+ const COL_TEMPLATE = paneColTemplate(DEFAULT_START_PX);
1840
+ const ROWS = [
1841
+ { id: "r0", name: 62, off: 0, bar: 72 },
1842
+ { id: "r1", name: 78, off: 6, bar: 48 },
1843
+ { id: "r2", name: 50, off: 10, bar: 55 },
1844
+ { id: "r3", name: 84, off: 18, bar: 30 },
1845
+ { id: "r4", name: 45, off: 18, bar: 42 },
1846
+ { id: "r5", name: 66, off: 34, bar: 38 },
1847
+ { id: "r6", name: 55, off: 41, bar: 25 },
1848
+ { id: "r7", name: 40, off: 50, bar: 30 }
1849
+ ];
1850
+ const HEADER_MARKERS = ["m0", "m1", "m2", "m3"];
1851
+ const HeaderDivider = () => jsxRuntimeExports.jsx("div", { className: "flex justify-center", children: jsxRuntimeExports.jsx("span", { "aria-hidden": true, className: "h-full w-px bg-gray-alpha-400" }) });
1852
+ function TraceViewerSkeleton() {
1853
+ return jsxRuntimeExports.jsxs("output", { "aria-busy": "true", "aria-label": "Loading trace", className: "flex flex-col w-full h-full min-h-0 bg-background-100", children: [jsxRuntimeExports.jsx("span", { className: "sr-only", children: "Loading trace…" }), jsxRuntimeExports.jsx("div", { className: "relative h-10 min-h-10 shrink-0 border-b border-gray-alpha-400", children: jsxRuntimeExports.jsx("div", { className: "absolute inset-x-4 top-[6px]", children: ROWS.map((row, index) => jsxRuntimeExports.jsx(Skeleton, { className: "absolute h-[3px] rounded-full", style: {
1854
+ left: `${row.off}%`,
1855
+ width: `${row.bar}%`,
1856
+ top: index * 3.5
1857
+ } }, row.id)) }) }), jsxRuntimeExports.jsxs("div", { className: "shrink-0 grid", style: { gridTemplateColumns: COL_TEMPLATE }, children: [jsxRuntimeExports.jsxs("div", { className: "h-10 min-h-10 flex items-center border-b border-gray-alpha-400 pl-4 pr-2 gap-1.5", children: [jsxRuntimeExports.jsx(Skeleton, { className: "w-3.5 h-3.5 shrink-0 rounded-sm" }), jsxRuntimeExports.jsx(Skeleton, { className: "h-3.5 w-40" })] }), jsxRuntimeExports.jsx(HeaderDivider, {}), jsxRuntimeExports.jsx("div", { className: "h-10 min-h-10 flex items-end border-b border-gray-alpha-400 px-4 pb-1 gap-2", children: jsxRuntimeExports.jsx("div", { className: "relative flex-1 flex items-end justify-between", children: HEADER_MARKERS.map((id) => jsxRuntimeExports.jsx(Skeleton, { className: "h-3.5 w-9" }, id)) }) })] }), jsxRuntimeExports.jsxs("div", { className: "grid flex-1 min-h-0 overflow-hidden", style: { gridTemplateColumns: COL_TEMPLATE }, children: [jsxRuntimeExports.jsx("div", { className: "block overflow-visible", children: jsxRuntimeExports.jsx("ul", { className: "block divide-y divide-gray-alpha-400 border-b border-gray-alpha-400", children: ROWS.map((row) => jsxRuntimeExports.jsxs("li", { className: "h-10 flex items-center pl-4 pr-2", children: [jsxRuntimeExports.jsxs("div", { className: "flex min-w-0 flex-1 items-center gap-2", children: [jsxRuntimeExports.jsx(Skeleton, { className: "w-4 h-4 shrink-0 rounded-sm" }), jsxRuntimeExports.jsx(Skeleton, { className: "h-3.5", style: { width: `${row.name}%` } })] }), jsxRuntimeExports.jsx(Skeleton, { className: "ml-2 h-3.5 w-10 shrink-0" })] }, row.id)) }) }), jsxRuntimeExports.jsx("span", { "aria-hidden": true, className: "h-full w-px bg-gray-alpha-400" }), jsxRuntimeExports.jsx("div", { className: "relative min-h-0", children: ROWS.map((row) => jsxRuntimeExports.jsx("div", { className: "relative h-10", children: jsxRuntimeExports.jsx("div", { className: "absolute inset-x-4 inset-y-0", children: jsxRuntimeExports.jsx(Skeleton, { className: "absolute top-1/2 -translate-y-1/2 h-6 rounded-[0.25rem]", style: { left: `${row.off}%`, width: `${row.bar}%` } }) }) }, row.id)) })] })] });
1770
1858
  }
1771
- function ContentPart({ part, role }) {
1772
- if (part.type === "text") {
1773
- if (!part.text)
1774
- return null;
1775
- if (role === "assistant") {
1776
- return jsxRuntimeExports.jsx("div", { className: "prose prose-sm max-w-none text-[11px] [&>*:first-child]:mt-0 [&>*:last-child]:mb-0", style: { color: "var(--ds-gray-1000)" }, children: jsxRuntimeExports.jsx(_r, { children: part.text }) });
1777
- }
1778
- return jsxRuntimeExports.jsx("div", { className: "whitespace-pre-wrap break-words", style: { color: "var(--ds-gray-1000)" }, children: part.text });
1779
- }
1780
- if (part.type === "tool-call") {
1781
- return jsxRuntimeExports.jsxs("div", { className: "rounded border px-2 py-1.5", style: {
1782
- backgroundColor: "var(--ds-purple-100)",
1783
- borderColor: "var(--ds-purple-300)"
1784
- }, children: [jsxRuntimeExports.jsxs("div", { className: "flex items-center gap-1.5 text-[10px] font-medium", children: [jsxRuntimeExports.jsx("span", { children: "🔧" }), jsxRuntimeExports.jsx("span", { style: { color: "var(--ds-purple-900)" }, children: part.toolName })] }), part.input != null && jsxRuntimeExports.jsx("div", { className: "mt-1.5 overflow-x-auto p-1.5 rounded", style: { backgroundColor: "var(--ds-gray-100)" }, children: typeof part.input === "string" ? jsxRuntimeExports.jsx("pre", { className: "text-[10px]", style: { color: "var(--ds-gray-800)" }, children: part.input }) : jsxRuntimeExports.jsx(DataInspector, { data: part.input }) })] });
1785
- }
1786
- if (part.type === "tool-result") {
1787
- return jsxRuntimeExports.jsxs("div", { className: "rounded border px-2 py-1.5", style: {
1788
- backgroundColor: "var(--ds-green-100)",
1789
- borderColor: "var(--ds-green-300)"
1790
- }, children: [jsxRuntimeExports.jsxs("div", { className: "flex items-center gap-1.5 text-[10px] font-medium", children: [jsxRuntimeExports.jsx("span", { children: "✓" }), jsxRuntimeExports.jsxs("span", { style: { color: "var(--ds-green-900)" }, children: [part.toolName, " result"] })] }), part.output != null && jsxRuntimeExports.jsx("div", { className: "mt-1.5 overflow-x-auto max-h-[200px] overflow-y-auto p-1.5 rounded", style: { backgroundColor: "var(--ds-gray-100)" }, children: typeof part.output === "string" ? jsxRuntimeExports.jsx("pre", { className: "text-[10px]", style: { color: "var(--ds-gray-800)" }, children: part.output }) : jsxRuntimeExports.jsx(DataInspector, { data: part.output, expandLevel: 1 }) })] });
1791
- }
1792
- return null;
1859
+ function useIntersectionObserver(elementRef, { threshold = 0, rootRef, rootMargin = "0%", freezeOnceVisible = false } = {}) {
1860
+ const [entry, setEntry] = reactExports.useState();
1861
+ const frozen = (entry == null ? void 0 : entry.isIntersecting) && freezeOnceVisible;
1862
+ reactExports.useEffect(() => {
1863
+ const node = elementRef == null ? void 0 : elementRef.current;
1864
+ const hasIOSupport = !!window.IntersectionObserver;
1865
+ if (!hasIOSupport || frozen || !node)
1866
+ return;
1867
+ const updateEntry = ([entry2]) => {
1868
+ setEntry(entry2);
1869
+ };
1870
+ const observer = new IntersectionObserver(updateEntry, {
1871
+ threshold,
1872
+ root: (rootRef == null ? void 0 : rootRef.current) ?? null,
1873
+ rootMargin
1874
+ });
1875
+ observer.observe(node);
1876
+ return () => observer.disconnect();
1877
+ }, [elementRef, threshold, rootRef, rootMargin, frozen]);
1878
+ return entry;
1793
1879
  }
1794
- function getRoleStyle(role) {
1795
- switch (role) {
1796
- case "user":
1797
- return {
1798
- bg: "var(--ds-blue-100)",
1799
- border: "var(--ds-blue-300)",
1800
- label: "var(--ds-blue-700)"
1801
- };
1802
- case "assistant":
1803
- return {
1804
- bg: "var(--ds-gray-100)",
1805
- border: "var(--ds-gray-300)",
1806
- label: "var(--ds-gray-700)"
1807
- };
1808
- case "system":
1809
- return {
1810
- bg: "var(--ds-amber-100)",
1811
- border: "var(--ds-amber-300)",
1812
- label: "var(--ds-amber-700)"
1813
- };
1814
- case "tool":
1815
- return {
1816
- bg: "var(--ds-green-50)",
1817
- border: "var(--ds-green-300)",
1818
- label: "var(--ds-green-700)"
1819
- };
1820
- default:
1821
- return {
1822
- bg: "var(--ds-gray-100)",
1823
- border: "var(--ds-gray-300)",
1824
- label: "var(--ds-gray-700)"
1825
- };
1826
- }
1880
+ function useLoadMoreOnScroll(loadMore, { hasMore, isLoadingMore, rootRef, rootMargin = "400px" }) {
1881
+ const sentinelRef = reactExports.useRef(null);
1882
+ const entry = useIntersectionObserver(sentinelRef, { rootRef, rootMargin });
1883
+ const loadMoreRef = reactExports.useRef(loadMore);
1884
+ reactExports.useEffect(() => {
1885
+ loadMoreRef.current = loadMore;
1886
+ }, [loadMore]);
1887
+ reactExports.useEffect(() => {
1888
+ if ((entry == null ? void 0 : entry.isIntersecting) && hasMore && !isLoadingMore) {
1889
+ loadMoreRef.current();
1890
+ }
1891
+ }, [entry == null ? void 0 : entry.isIntersecting, hasMore, isLoadingMore]);
1892
+ return sentinelRef;
1827
1893
  }
1828
- function parseContent(content) {
1829
- if (typeof content === "string") {
1830
- return [{ type: "text", text: content }];
1831
- }
1832
- if (Array.isArray(content)) {
1833
- return content.map((part) => {
1834
- if (typeof part === "string") {
1835
- return { type: "text", text: part };
1836
- }
1837
- if ((part == null ? void 0 : part.type) === "text") {
1838
- return { type: "text", text: String(part.text ?? "") };
1839
- }
1840
- if ((part == null ? void 0 : part.type) === "tool-call") {
1841
- return {
1842
- type: "tool-call",
1843
- toolName: part.toolName,
1844
- input: part.input
1845
- };
1846
- }
1847
- if ((part == null ? void 0 : part.type) === "tool-result") {
1848
- return {
1849
- type: "tool-result",
1850
- toolName: part.toolName,
1851
- output: part.output
1852
- };
1853
- }
1854
- return { type: "text", text: "" };
1855
- });
1894
+ const kbdVariants = cva("inline-flex items-center justify-center rounded px-1 text-center font-sans", {
1895
+ variants: {
1896
+ variant: {
1897
+ subtle: "bg-background-100/20",
1898
+ outline: "border border-gray-alpha-400 bg-background-100 font-medium text-gray-900"
1899
+ },
1900
+ size: {
1901
+ default: "h-5 min-w-5 text-label-12 leading-none",
1902
+ compact: "h-4 min-h-4 min-w-4 text-[11px] leading-none",
1903
+ search: "h-5 min-h-5 min-w-5 text-label-13 leading-[1.7em]"
1904
+ }
1905
+ },
1906
+ defaultVariants: {
1907
+ variant: "subtle",
1908
+ size: "default"
1856
1909
  }
1857
- return [];
1910
+ });
1911
+ function Kbd({ children, className, variant, size, ...props }) {
1912
+ return jsxRuntimeExports.jsx("kbd", { className: cn(kbdVariants({ variant, size, className })), ...props, children });
1858
1913
  }
1859
1914
  function TabButton({ active, onClick, children }) {
1860
1915
  return jsxRuntimeExports.jsx("button", { type: "button", role: "tab", "aria-selected": active, tabIndex: active ? 0 : -1, onClick, className: "px-3 py-1.5 text-[11px] font-medium transition-colors -mb-px", style: {
@@ -1901,7 +1956,7 @@ function EncryptedFieldBlock() {
1901
1956
  return jsxRuntimeExports.jsx(EncryptedDataBlock, {});
1902
1957
  }
1903
1958
  function ExpiredFieldBlock() {
1904
- return jsxRuntimeExports.jsx("div", { className: "flex items-center gap-1.5 rounded-md border px-3 py-2 text-xs", style: {
1959
+ return jsxRuntimeExports.jsx("div", { className: "flex items-center gap-1.5 rounded-md border px-3 py-2 text-label-12", style: {
1905
1960
  borderColor: "var(--ds-gray-300)",
1906
1961
  backgroundColor: "var(--ds-gray-100)",
1907
1962
  color: "var(--ds-gray-700)"
@@ -1932,12 +1987,16 @@ const attributeOrder = [
1932
1987
  "runId",
1933
1988
  "attempt",
1934
1989
  "token",
1990
+ "isWebhook",
1991
+ "isSystem",
1935
1992
  "receivedCount",
1936
1993
  "lastReceivedAt",
1937
1994
  "disposedAt",
1938
1995
  "correlationId",
1939
1996
  "eventType",
1940
1997
  "deploymentId",
1998
+ "vercelId",
1999
+ "computeInstanceId",
1941
2000
  "specVersion",
1942
2001
  "workflowCoreVersion",
1943
2002
  "ownerId",
@@ -1951,6 +2010,7 @@ const attributeOrder = [
1951
2010
  "completedAt",
1952
2011
  "expiredAt",
1953
2012
  "retryAfter",
2013
+ "errorCode",
1954
2014
  "error",
1955
2015
  "metadata",
1956
2016
  "eventData",
@@ -1959,11 +2019,11 @@ const attributeOrder = [
1959
2019
  "attributes",
1960
2020
  "resumeAt"
1961
2021
  ];
1962
- const sortByAttributeOrder = (a, b) => {
1963
- const aIndex = attributeOrder.indexOf(a) || 0;
1964
- const bIndex = attributeOrder.indexOf(b) || 0;
1965
- return aIndex - bIndex;
2022
+ const attributeOrderIndex = (attribute) => {
2023
+ const index = attributeOrder.indexOf(attribute);
2024
+ return index === -1 ? attributeOrder.length : index;
1966
2025
  };
2026
+ const sortByAttributeOrder = (a, b) => attributeOrderIndex(a) - attributeOrderIndex(b);
1967
2027
  const attributeDisplayNames = {
1968
2028
  moduleSpecifier: "Module",
1969
2029
  workflowName: "Workflow Name",
@@ -1978,6 +2038,8 @@ const attributeDisplayNames = {
1978
2038
  errorCode: "Error Code",
1979
2039
  correlationId: "Correlation ID",
1980
2040
  deploymentId: "Deployment ID",
2041
+ vercelId: "Request ID",
2042
+ computeInstanceId: "Compute Instance ID",
1981
2043
  specVersion: "Spec Version",
1982
2044
  workflowCoreVersion: "@workflow/core version",
1983
2045
  occurredAt: "Occurred",
@@ -2034,6 +2096,7 @@ const timestampWithTooltipOrNull = (value) => {
2034
2096
  return null;
2035
2097
  return jsxRuntimeExports.jsx(TimestampTooltip, { date, children: jsxRuntimeExports.jsx("span", { children: formatLocalMillisecondTime(date) }) });
2036
2098
  };
2099
+ const opaqueIdOrNull = (value) => hasDisplayContent(value) ? String(value) : null;
2037
2100
  const attributeToDisplayFn = {
2038
2101
  // Names that need pretty-printing
2039
2102
  workflowName: (_value) => null,
@@ -2056,11 +2119,15 @@ const attributeToDisplayFn = {
2056
2119
  disposedAt: localMillisecondTimeOrNull,
2057
2120
  // Internal resume plumbing — not surfaced in the UI
2058
2121
  resumeContext: (_value) => null,
2122
+ resumeId: (_value) => null,
2123
+ resumeCapabilities: (_value) => null,
2059
2124
  // Event details
2060
2125
  eventType: (value) => String(value),
2061
2126
  correlationId: (value) => String(value),
2062
2127
  // Project details
2063
2128
  deploymentId: (value) => String(value),
2129
+ vercelId: opaqueIdOrNull,
2130
+ computeInstanceId: opaqueIdOrNull,
2064
2131
  specVersion: (value) => String(value),
2065
2132
  workflowCoreVersion: (value) => String(value),
2066
2133
  // Tenancy (we don't show these)
@@ -2183,7 +2250,7 @@ const selfHeaderedAttributes = /* @__PURE__ */ new Set([
2183
2250
  "attributes",
2184
2251
  "eventData"
2185
2252
  ]);
2186
- const ExpiredDataMessage = () => jsxRuntimeExports.jsx("div", { className: "text-copy-12 rounded-md border p-4 my-2", style: {
2253
+ const ExpiredDataMessage = () => jsxRuntimeExports.jsx("div", { className: "text-label-12 rounded-md border p-4 my-2", style: {
2187
2254
  borderColor: "var(--ds-gray-300)",
2188
2255
  backgroundColor: "var(--ds-gray-100)",
2189
2256
  color: "var(--ds-gray-700)"
@@ -2193,6 +2260,8 @@ const copyableBasicAttributes = /* @__PURE__ */ new Set([
2193
2260
  "hookId",
2194
2261
  "eventId",
2195
2262
  "deploymentId",
2263
+ "vercelId",
2264
+ "computeInstanceId",
2196
2265
  "moduleSpecifier",
2197
2266
  "token"
2198
2267
  ]);
@@ -2232,7 +2301,7 @@ const AttributeBlock = ({ attribute, value, isLoading, inline = false, context }
2232
2301
  if (selfHeaderedAttributes.has(attribute)) {
2233
2302
  return jsxRuntimeExports.jsx(jsxRuntimeExports.Fragment, { children: displayValue });
2234
2303
  }
2235
- 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-xs", style: { color: "var(--ds-gray-1000)" }, children: displayValue })] }, attribute)] });
2304
+ 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)] });
2236
2305
  };
2237
2306
  const AttributePanel = ({ data, moduleSpecifier, moduleSourceUrl, isLoading, error, expiredAt, onStreamClick, onRunClick, onDecrypt, isDecrypting = false, resource }) => {
2238
2307
  const displayData = reactExports.useMemo(() => {
@@ -2391,7 +2460,7 @@ function hasOnlyExpiredFields(data, eventType) {
2391
2460
  }
2392
2461
  function EventDataBlock({ eventType, data }) {
2393
2462
  if (isExpiredMarker(data) || hasOnlyExpiredFields(data, eventType)) {
2394
- return jsxRuntimeExports.jsx("div", { className: "flex items-center gap-1.5 rounded-md border px-3 py-2 text-xs", style: {
2463
+ return jsxRuntimeExports.jsx("div", { className: "flex items-center gap-1.5 rounded-md border px-3 py-2 text-label-12", style: {
2395
2464
  borderColor: "var(--ds-gray-300)",
2396
2465
  backgroundColor: "var(--ds-gray-100)",
2397
2466
  color: "var(--ds-gray-700)"
@@ -2734,69 +2803,14 @@ function EntityDetailPanel({ run, onStreamClick, onRunClick, fetchSpanDetail, on
2734
2803
  return jsxRuntimeExports.jsxs("div", { className: "flex h-full flex-col", children: [jsxRuntimeExports.jsx(DecryptClickContext.Provider, { value: onDecrypt ? { onDecrypt, isDecrypting, hasEncryptedData } : 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: {
2735
2804
  borderColor: "var(--ds-gray-300)",
2736
2805
  backgroundColor: "var(--ds-gray-100)"
2737
- }, children: [jsxRuntimeExports.jsx("p", { className: "mb-2 px-1 text-[13px] 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-sm font-medium", "disabled:opacity-50 disabled:cursor-not-allowed transition-colors", stoppingSleep ? "opacity-50 cursor-not-allowed" : "cursor-pointer"), style: {
2806
+ }, 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: {
2738
2807
  background: "var(--ds-amber-200)",
2739
2808
  color: "var(--ds-amber-900)"
2740
- }, 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-sm font-medium", "disabled:opacity-50 disabled:cursor-not-allowed transition-colors", resolvingHook ? "opacity-50 cursor-not-allowed" : "cursor-pointer"), style: {
2809
+ }, 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: {
2741
2810
  background: "var(--ds-gray-1000)",
2742
2811
  color: "var(--ds-background-100)"
2743
2812
  }, 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 })] }) }), jsxRuntimeExports.jsx(ResolveHookModal, { isOpen: showResolveHookModal, onClose: () => setShowResolveHookModal(false), onSubmit: handleResolveHook, isSubmitting: resolvingHook })] });
2744
2813
  }
2745
- function useIntersectionObserver(elementRef, { threshold = 0, rootRef, rootMargin = "0%", freezeOnceVisible = false } = {}) {
2746
- const [entry, setEntry] = reactExports.useState();
2747
- const frozen = (entry == null ? void 0 : entry.isIntersecting) && freezeOnceVisible;
2748
- reactExports.useEffect(() => {
2749
- const node = elementRef == null ? void 0 : elementRef.current;
2750
- const hasIOSupport = !!window.IntersectionObserver;
2751
- if (!hasIOSupport || frozen || !node)
2752
- return;
2753
- const updateEntry = ([entry2]) => {
2754
- setEntry(entry2);
2755
- };
2756
- const observer = new IntersectionObserver(updateEntry, {
2757
- threshold,
2758
- root: (rootRef == null ? void 0 : rootRef.current) ?? null,
2759
- rootMargin
2760
- });
2761
- observer.observe(node);
2762
- return () => observer.disconnect();
2763
- }, [elementRef, threshold, rootRef, rootMargin, frozen]);
2764
- return entry;
2765
- }
2766
- function useLoadMoreOnScroll(loadMore, { hasMore, isLoadingMore, rootRef, rootMargin = "400px" }) {
2767
- const sentinelRef = reactExports.useRef(null);
2768
- const entry = useIntersectionObserver(sentinelRef, { rootRef, rootMargin });
2769
- const loadMoreRef = reactExports.useRef(loadMore);
2770
- reactExports.useEffect(() => {
2771
- loadMoreRef.current = loadMore;
2772
- }, [loadMore]);
2773
- reactExports.useEffect(() => {
2774
- if ((entry == null ? void 0 : entry.isIntersecting) && hasMore && !isLoadingMore) {
2775
- loadMoreRef.current();
2776
- }
2777
- }, [entry == null ? void 0 : entry.isIntersecting, hasMore, isLoadingMore]);
2778
- return sentinelRef;
2779
- }
2780
- const kbdVariants = cva("inline-flex items-center justify-center rounded px-1 text-center font-sans", {
2781
- variants: {
2782
- variant: {
2783
- subtle: "bg-background-100/20",
2784
- outline: "border border-gray-alpha-400 bg-background-100 font-medium text-gray-900"
2785
- },
2786
- size: {
2787
- default: "h-5 min-w-5 text-xs leading-none",
2788
- compact: "h-4 min-h-4 min-w-4 text-[11px] leading-none",
2789
- search: "h-5 min-h-5 min-w-5 text-[13px] leading-[1.7em]"
2790
- }
2791
- },
2792
- defaultVariants: {
2793
- variant: "subtle",
2794
- size: "default"
2795
- }
2796
- });
2797
- function Kbd({ children, className, variant, size, ...props }) {
2798
- return jsxRuntimeExports.jsx("kbd", { className: cn(kbdVariants({ variant, size, className })), ...props, children });
2799
- }
2800
2814
  const PANEL_MIN_WIDTH = 280;
2801
2815
  const PANEL_HARD_MAX_WIDTH = 1300;
2802
2816
  const PANEL_DEFAULT_WIDTH = 360;
@@ -3174,7 +3188,7 @@ function TraceShortcutHelper({ hasMultipleSpans, reducedMotion }) {
3174
3188
  }
3175
3189
  setVisible(false);
3176
3190
  };
3177
- return jsxRuntimeExports.jsxs("div", { className: "group pointer-events-auto hidden h-8 w-fit items-center gap-1 text-xs leading-none text-gray-900 @min-[480px]:flex", children: [jsxRuntimeExports.jsx("span", { "aria-live": "polite", "aria-atomic": "true", className: "inline-flex items-center whitespace-nowrap", children: reducedMotion ? jsxRuntimeExports.jsx(AltHint, {}) : jsxRuntimeExports.jsx("span", { className: `inline-flex items-center ${styles.hint}`, children: index === 0 ? jsxRuntimeExports.jsx(AltHint, {}) : jsxRuntimeExports.jsx(NavHint, {}) }, index) }), jsxRuntimeExports.jsx("button", { type: "button", className: "inline-flex h-5 w-5 items-center justify-center rounded text-muted-foreground opacity-0 transition-opacity hover:bg-accent hover:text-foreground group-hover:opacity-100 focus-visible:opacity-100 motion-reduce:transition-none", onClick: dismiss, "aria-label": "Dismiss trace shortcuts helper", children: jsxRuntimeExports.jsx(X, { className: "h-3 w-3" }) })] });
3191
+ return jsxRuntimeExports.jsxs("div", { className: "group pointer-events-auto hidden h-8 w-fit items-center gap-1 text-label-12 leading-none text-gray-900 @min-[480px]:flex", children: [jsxRuntimeExports.jsx("span", { "aria-live": "polite", "aria-atomic": "true", className: "inline-flex items-center whitespace-nowrap", children: reducedMotion ? jsxRuntimeExports.jsx(AltHint, {}) : jsxRuntimeExports.jsx("span", { className: `inline-flex items-center ${styles.hint}`, children: index === 0 ? jsxRuntimeExports.jsx(AltHint, {}) : jsxRuntimeExports.jsx(NavHint, {}) }, index) }), jsxRuntimeExports.jsx("button", { type: "button", className: "inline-flex h-5 w-5 items-center justify-center rounded text-muted-foreground opacity-0 transition-opacity hover:bg-accent hover:text-foreground group-hover:opacity-100 focus-visible:opacity-100 motion-reduce:transition-none", onClick: dismiss, "aria-label": "Dismiss trace shortcuts helper", children: jsxRuntimeExports.jsx(X, { className: "h-3 w-3" }) })] });
3178
3192
  }
3179
3193
  const MIN_VIEWPORT_MS = 1e-3;
3180
3194
  const ZOOM_DEBOUNCE_MS = 150;
@@ -3230,10 +3244,10 @@ function useAnimatedViewport(initial) {
3230
3244
  reactExports.useEffect(() => cancel, [cancel]);
3231
3245
  return { viewport, setViewport, animateTo };
3232
3246
  }
3233
- function NewTraceViewer$1({ trace, onLoadMore, hasMore, isLoadingMore }) {
3234
- return jsxRuntimeExports.jsx(TooltipProvider, { delayDuration: 300, children: jsxRuntimeExports.jsx(ActiveSpanProvider, { spans: trace.spans, children: jsxRuntimeExports.jsx(NewTraceViewerContent, { trace, onLoadMore, hasMore, isLoadingMore }) }) });
3247
+ function TraceViewer$1({ trace, onLoadMore, hasMore, isLoadingMore }) {
3248
+ return jsxRuntimeExports.jsx(TooltipProvider, { delayDuration: 300, children: jsxRuntimeExports.jsx(ActiveSpanProvider, { spans: trace.spans, children: jsxRuntimeExports.jsx(TraceViewerContent, { trace, onLoadMore, hasMore, isLoadingMore }) }) });
3235
3249
  }
3236
- function NewTraceViewerContent({ trace, onLoadMore, hasMore, isLoadingMore }) {
3250
+ function TraceViewerContent({ trace, onLoadMore, hasMore, isLoadingMore }) {
3237
3251
  const { activeSpanId, setActiveSpan, clearActiveSpan } = useActiveSpan();
3238
3252
  const reducedMotion = useReducedMotion();
3239
3253
  const [searchQuery, setSearchQuery] = reactExports.useState("");
@@ -3470,9 +3484,9 @@ function NewTraceViewerContent({ trace, onLoadMore, hasMore, isLoadingMore }) {
3470
3484
  e.stopPropagation();
3471
3485
  setSearchQuery("");
3472
3486
  }
3473
- }, placeholder: "Search spans...", "aria-label": "Search spans", className: "flex-1 min-w-0 bg-transparent text-sm text-gray-1000 placeholder:text-gray-800 outline-none" }), searchQuery && jsxRuntimeExports.jsx("button", { type: "button", "aria-label": "Clear search", onClick: () => setSearchQuery(""), className: "-mr-2 hidden h-full max-w-full shrink-0 cursor-pointer items-center rounded-r-md border-0 bg-transparent px-2.5 font-inherit text-base text-gray-900 no-underline transition-colors duration-150 ease-in hover:text-gray-1000 focus-visible:-outline-offset-1 focus-visible:outline focus-visible:outline-2 focus-visible:outline-[var(--ds-focus-color)] min-[961px]:flex", children: jsxRuntimeExports.jsx(Kbd, { variant: "outline", size: "search", children: "Esc" }) })] }), endHeader: jsxRuntimeExports.jsx(TimelineHeader, { markers: timeMarkers, hoverInfo }), children: [jsxRuntimeExports.jsxs("div", { className: "block overflow-visible", children: [jsxRuntimeExports.jsx(EventList, { spans: trace.spans, activeSpanId, searchResult, onSelectSpan: handleSelectSpan }), jsxRuntimeExports.jsx("div", { ref: loadMoreSentinelRef, className: "flex justify-center", children: isLoadingMore ? jsxRuntimeExports.jsxs("div", { className: "flex items-center justify-center gap-2 py-3 text-sm text-gray-800", children: [jsxRuntimeExports.jsx(Spinner, { size: 14 }), jsxRuntimeExports.jsx("span", { children: "Loading spans…" })] }) : null })] }), jsxRuntimeExports.jsx("div", { ref: timelineRef, id: "trace-timeline", className: "@container block min-h-0 overflow-visible relative", onDoubleClick: resetZoom, onMouseMove: handleTimelineMouseMove, onMouseLeave: handleTimelineMouseLeave, children: jsxRuntimeExports.jsx(Timeline, { spans: trace.spans, viewStart: viewport.start, viewEnd: viewport.end, markers: timeMarkers, selectedId: activeSpanId, searchResult, onSelect: handleSelectSpan, onRevealTime: handleRevealTime, hover, altHeld }) }), jsxRuntimeExports.jsxs(jsxRuntimeExports.Fragment, { children: [jsxRuntimeExports.jsx(TraceShortcutHelper, { hasMultipleSpans: trace.spans.length > 1, reducedMotion }), jsxRuntimeExports.jsxs("div", { className: "pointer-events-auto flex items-center border border-gray-alpha-400 rounded-md bg-background-100 shadow-sm overflow-hidden divide-x divide-gray-alpha-400", children: [jsxRuntimeExports.jsx(IconButton, { variant: "muted", size: "small", onClick: zoomOut, disabled: isAtMinZoom, "aria-label": "Zoom out", children: jsxRuntimeExports.jsx(ZoomOut, { className: "w-4 h-4" }) }), jsxRuntimeExports.jsx(IconButton, { variant: "muted", size: "small", onClick: resetZoom, "aria-label": "Reset zoom", children: jsxRuntimeExports.jsx(RotateCcw, { className: "w-3.5 h-3.5" }) }), jsxRuntimeExports.jsx(IconButton, { variant: "muted", size: "small", onClick: zoomIn, disabled: isAtMaxZoom, "aria-label": "Zoom in", children: jsxRuntimeExports.jsx(ZoomIn, { className: "w-4 h-4" }) })] })] })] })] }), jsxRuntimeExports.jsx(TraceDetailPanel, { containerRef: paneRootRef, onNavigateToSpan: navigateToSpan, onClose: handleClearActiveSpan })] });
3487
+ }, placeholder: "Search spans...", "aria-label": "Search spans", className: "flex-1 min-w-0 bg-transparent text-label-14 text-gray-1000 placeholder:text-gray-800 outline-none" }), searchQuery && jsxRuntimeExports.jsx("button", { type: "button", "aria-label": "Clear search", onClick: () => setSearchQuery(""), className: "-mr-2 hidden h-full max-w-full shrink-0 cursor-pointer items-center rounded-r-md border-0 bg-transparent px-2.5 font-inherit text-label-16 text-gray-900 no-underline transition-colors duration-150 ease-in hover:text-gray-1000 focus-visible:-outline-offset-1 focus-visible:outline focus-visible:outline-2 focus-visible:outline-[var(--ds-focus-color)] min-[961px]:flex", children: jsxRuntimeExports.jsx(Kbd, { variant: "outline", size: "search", children: "Esc" }) })] }), endHeader: jsxRuntimeExports.jsx(TimelineHeader, { markers: timeMarkers, hoverInfo }), children: [jsxRuntimeExports.jsxs("div", { className: "block overflow-visible", children: [jsxRuntimeExports.jsx(EventList, { spans: trace.spans, activeSpanId, searchResult, onSelectSpan: handleSelectSpan }), jsxRuntimeExports.jsx("div", { ref: loadMoreSentinelRef, className: "flex justify-center", children: isLoadingMore ? jsxRuntimeExports.jsxs("div", { className: "flex items-center justify-center gap-2 py-3 text-label-14 text-gray-800", children: [jsxRuntimeExports.jsx(Spinner, { size: 14 }), jsxRuntimeExports.jsx("span", { children: "Loading spans…" })] }) : null })] }), jsxRuntimeExports.jsx("div", { ref: timelineRef, id: "trace-timeline", className: "@container block min-h-0 overflow-visible relative", onDoubleClick: resetZoom, onMouseMove: handleTimelineMouseMove, onMouseLeave: handleTimelineMouseLeave, children: jsxRuntimeExports.jsx(Timeline, { spans: trace.spans, viewStart: viewport.start, viewEnd: viewport.end, markers: timeMarkers, selectedId: activeSpanId, searchResult, onSelect: handleSelectSpan, onRevealTime: handleRevealTime, hover, altHeld }) }), jsxRuntimeExports.jsxs(jsxRuntimeExports.Fragment, { children: [jsxRuntimeExports.jsx(TraceShortcutHelper, { hasMultipleSpans: trace.spans.length > 1, reducedMotion }), jsxRuntimeExports.jsxs("div", { className: "pointer-events-auto flex items-center border border-gray-alpha-400 rounded-md bg-background-100 shadow-sm overflow-hidden divide-x divide-gray-alpha-400", children: [jsxRuntimeExports.jsx(IconButton, { variant: "muted", size: "small", onClick: zoomOut, disabled: isAtMinZoom, "aria-label": "Zoom out", children: jsxRuntimeExports.jsx(ZoomOut, { className: "w-4 h-4" }) }), jsxRuntimeExports.jsx(IconButton, { variant: "muted", size: "small", onClick: resetZoom, "aria-label": "Reset zoom", children: jsxRuntimeExports.jsx(RotateCcw, { className: "w-3.5 h-3.5" }) }), jsxRuntimeExports.jsx(IconButton, { variant: "muted", size: "small", onClick: zoomIn, disabled: isAtMaxZoom, "aria-label": "Zoom in", children: jsxRuntimeExports.jsx(ZoomIn, { className: "w-4 h-4" }) })] })] })] })] }), jsxRuntimeExports.jsx(TraceDetailPanel, { containerRef: paneRootRef, onNavigateToSpan: navigateToSpan, onClose: handleClearActiveSpan })] });
3474
3488
  }
3475
- const NewTraceViewer = ({ run, events, sidebarData, onLoadMore, hasMore, isLoadingMore, loading = false }) => {
3489
+ const TraceViewer = ({ run, events, sidebarData, onLoadMore, hasMore, isLoadingMore, loading = false }) => {
3476
3490
  const trace = reactExports.useMemo(() => {
3477
3491
  if (!(run == null ? void 0 : run.runId)) {
3478
3492
  return void 0;
@@ -3482,7 +3496,7 @@ const NewTraceViewer = ({ run, events, sidebarData, onLoadMore, hasMore, isLoadi
3482
3496
  if (!trace || loading && events.length === 0) {
3483
3497
  return jsxRuntimeExports.jsx(TraceViewerSkeleton, {});
3484
3498
  }
3485
- return jsxRuntimeExports.jsx(SidebarDataProvider, { value: sidebarData, children: jsxRuntimeExports.jsx("div", { className: "relative w-full h-full flex", children: jsxRuntimeExports.jsx(NewTraceViewer$1, { trace, onLoadMore, hasMore, isLoadingMore }) }) });
3499
+ return jsxRuntimeExports.jsx(SidebarDataProvider, { value: sidebarData, children: jsxRuntimeExports.jsx("div", { className: "relative w-full h-full flex", children: jsxRuntimeExports.jsx(TraceViewer$1, { trace, onLoadMore, hasMore, isLoadingMore }) }) });
3486
3500
  };
3487
3501
  async function fetchResourceWithCorrelationId(env, resource, resourceId, options = {}) {
3488
3502
  const resolveData = options.resolveData ?? "all";
@@ -5792,7 +5806,7 @@ function RunDetailView({
5792
5806
  ] })
5793
5807
  ] }),
5794
5808
  /* @__PURE__ */ jsxRuntimeExports.jsx(TabsContent, { value: "trace", className: "mt-0 flex-1 min-h-0", children: /* @__PURE__ */ jsxRuntimeExports.jsx(ErrorBoundary, { title: "Failed to load trace viewer", children: /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "relative h-full -mx-6 bg-background-100 border-t border-gray-alpha-400 overflow-hidden", children: /* @__PURE__ */ jsxRuntimeExports.jsx(
5795
- NewTraceViewer,
5809
+ TraceViewer,
5796
5810
  {
5797
5811
  run,
5798
5812
  events: allEvents ?? [],