@workflow/web 5.0.0-beta.10 → 5.0.0-beta.11

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 (24) hide show
  1. package/build/client/assets/{encryption-B7z5c3Mu.js → encryption-g14N5vQl.js} +2 -2
  2. package/build/client/assets/{entry.client-DtOpLtMQ.js → entry.client-DOJDY_4b.js} +1 -1
  3. package/build/client/assets/{highlighted-body-B3W2YXNL-khW-t_B-.js → highlighted-body-B3W2YXNL-ByAVJfTI.js} +2 -2
  4. package/build/client/assets/{home-DKDz-tU-.js → home-D68s49Hb.js} +4 -14
  5. package/build/client/assets/{index-CIZByfnL.js → index-B6-SzLmT.js} +1 -1
  6. package/build/client/assets/{index-BsV8i_Jn.js → index-BXZSIDEp.js} +2 -2
  7. package/build/client/assets/{manifest-a33ce94a.js → manifest-f3e412ee.js} +1 -1
  8. package/build/client/assets/{mermaid-3ZIDBTTL-DPZjJwuX.js → mermaid-3ZIDBTTL-Cg06pRM9.js} +216 -114
  9. package/build/client/assets/{root-DJKbeamD.js → root-CtIBMIdD.js} +2 -2
  10. package/build/client/assets/root-D_G0HW97.css +1 -0
  11. package/build/client/assets/{run-detail-ekQSEj_z.js → run-detail-B1sCKjMc.js} +112 -50
  12. package/build/client/assets/server-build-DyZioyz3.css +1 -0
  13. package/build/client/assets/{workflow-graph-viewer-DjlqbXVx.js → workflow-graph-viewer-D4OsX_TE.js} +3 -3
  14. package/build/server/assets/{app-Cgrcb-fS.js → app-C26OkrrR.js} +1 -1
  15. package/build/server/assets/{highlighted-body-B3W2YXNL-BCA9A7WB.js → highlighted-body-B3W2YXNL-2D25w_37.js} +2 -2
  16. package/build/server/assets/{index-VP-TIWDS.js → index-C6jZ_bJo.js} +3 -3
  17. package/build/server/assets/{mermaid-3ZIDBTTL-CbLetKvR.js → mermaid-3ZIDBTTL-BDYN9XOo.js} +2 -2
  18. package/build/server/assets/{server-build-ClDPbfo3.js → server-build-D82EKMvZ.js} +346 -149
  19. package/build/server/assets/{token-BxPrGSQ5.js → token-Bjcyh98U.js} +2 -2
  20. package/build/server/assets/{token-util-Bmrakd6M.js → token-util-CdvUIKt6.js} +2 -2
  21. package/build/server/index.js +1 -1
  22. package/package.json +5 -5
  23. package/build/client/assets/root-BYtlAgHl.css +0 -1
  24. package/build/client/assets/server-build-ByHD2s6b.css +0 -1
@@ -14,7 +14,7 @@ var __privateSet = (obj, member, value, setter) => (__accessCheck(obj, member, "
14
14
  var __privateMethod = (obj, member, method) => (__accessCheck(obj, member, "access private method"), method);
15
15
  var __superGet = (cls, obj, key) => __reflectGet(__getProtoOf(cls), key, obj);
16
16
  var _a2, _b, _c, _listeners, _onabort, _reader, _root, _hasMagic, _uflag, _parts, _parent, _parentIndex, _negs, _filledNegs, _options, _toString, _emptyExt, _AST_instances, fillNegs_fn, _AST_static, parseAST_fn, canAdoptWithSpace_fn, canAdopt_fn, canAdoptType_fn, adoptWithSpace_fn, adopt_fn, canUsurpType_fn, canUsurp_fn, usurp_fn, flatten_fn, partsToRegExp_fn, parseGlob_fn, _Minimatch_instances, matchGlobstar_fn, matchGlobStarBodySections_fn, matchOne_fn, _worldPromise, _Run_instances, lazyWorldPromise_get, _encryptionKeyPromise, _resilientStart, getEncryptionKey_fn, pollReturnValue_fn;
17
- import { a as requireReact, S as ServerRouter, c as createReadableStreamFromReadable, r as reactExports, g as getDefaultExportFromCjs, R as React, b as ReactExports, w as withComponentProps, d as withErrorBoundaryProps, M as Meta, L as Links, e as ScrollRestoration, f as Scripts, O as Outlet, u as useNavigate, h as useSearchParams, i as Link$1, j as useRouteError, k as isRouteErrorResponse, l as useLocation, m as useParams } from "./app-Cgrcb-fS.js";
17
+ import { a as requireReact, S as ServerRouter, c as createReadableStreamFromReadable, r as reactExports, g as getDefaultExportFromCjs, R as React, b as ReactExports, w as withComponentProps, d as withErrorBoundaryProps, M as Meta, L as Links, e as ScrollRestoration, f as Scripts, O as Outlet, u as useNavigate, h as useSearchParams, i as Link$1, j as useRouteError, k as isRouteErrorResponse, l as useLocation, m as useParams } from "./app-C26OkrrR.js";
18
18
  import require$$0$3, { PassThrough } from "node:stream";
19
19
  import require$$0 from "util";
20
20
  import require$$1 from "crypto";
@@ -26078,7 +26078,7 @@ var Anchor$1 = PopperAnchor$1;
26078
26078
  var Content$4 = PopperContent$1;
26079
26079
  var Arrow$3 = PopperArrow$1;
26080
26080
  var PORTAL_NAME$9 = "Portal";
26081
- var Portal$6 = reactExports.forwardRef((props, forwardedRef) => {
26081
+ var Portal$7 = reactExports.forwardRef((props, forwardedRef) => {
26082
26082
  var _a3;
26083
26083
  const { container: containerProp, ...portalProps } = props;
26084
26084
  const [mounted, setMounted] = reactExports.useState(false);
@@ -26086,7 +26086,7 @@ var Portal$6 = reactExports.forwardRef((props, forwardedRef) => {
26086
26086
  const container = containerProp || mounted && ((_a3 = globalThis == null ? void 0 : globalThis.document) == null ? void 0 : _a3.body);
26087
26087
  return container ? ReactDOM.createPortal(/* @__PURE__ */ jsxRuntimeExports.jsx(Primitive$2.div, { ...portalProps, ref: forwardedRef }), container) : null;
26088
26088
  });
26089
- Portal$6.displayName = PORTAL_NAME$9;
26089
+ Portal$7.displayName = PORTAL_NAME$9;
26090
26090
  function useStateMachine$1(initialState2, machine) {
26091
26091
  return reactExports.useReducer((state, event) => {
26092
26092
  const nextState = machine[state][event];
@@ -26312,7 +26312,7 @@ var PROVIDER_NAME = "TooltipProvider";
26312
26312
  var DEFAULT_DELAY_DURATION = 700;
26313
26313
  var TOOLTIP_OPEN = "tooltip.open";
26314
26314
  var [TooltipProviderContextProvider, useTooltipProviderContext] = createTooltipContext(PROVIDER_NAME);
26315
- var TooltipProvider = (props) => {
26315
+ var TooltipProvider$1 = (props) => {
26316
26316
  const {
26317
26317
  __scopeTooltip,
26318
26318
  delayDuration = DEFAULT_DELAY_DURATION,
@@ -26353,10 +26353,10 @@ var TooltipProvider = (props) => {
26353
26353
  }
26354
26354
  );
26355
26355
  };
26356
- TooltipProvider.displayName = PROVIDER_NAME;
26356
+ TooltipProvider$1.displayName = PROVIDER_NAME;
26357
26357
  var TOOLTIP_NAME = "Tooltip";
26358
26358
  var [TooltipContextProvider, useTooltipContext] = createTooltipContext(TOOLTIP_NAME);
26359
- var Tooltip$1 = (props) => {
26359
+ var Tooltip$2 = (props) => {
26360
26360
  const {
26361
26361
  __scopeTooltip,
26362
26362
  children: children2,
@@ -26446,9 +26446,9 @@ var Tooltip$1 = (props) => {
26446
26446
  }
26447
26447
  ) });
26448
26448
  };
26449
- Tooltip$1.displayName = TOOLTIP_NAME;
26449
+ Tooltip$2.displayName = TOOLTIP_NAME;
26450
26450
  var TRIGGER_NAME$6 = "TooltipTrigger";
26451
- var TooltipTrigger$1 = reactExports.forwardRef(
26451
+ var TooltipTrigger$2 = reactExports.forwardRef(
26452
26452
  (props, forwardedRef) => {
26453
26453
  const { __scopeTooltip, ...triggerProps } = props;
26454
26454
  const context = useTooltipContext(TRIGGER_NAME$6, __scopeTooltip);
@@ -26496,13 +26496,19 @@ var TooltipTrigger$1 = reactExports.forwardRef(
26496
26496
  ) });
26497
26497
  }
26498
26498
  );
26499
- TooltipTrigger$1.displayName = TRIGGER_NAME$6;
26499
+ TooltipTrigger$2.displayName = TRIGGER_NAME$6;
26500
26500
  var PORTAL_NAME$8 = "TooltipPortal";
26501
26501
  var [PortalProvider$3, usePortalContext$3] = createTooltipContext(PORTAL_NAME$8, {
26502
26502
  forceMount: void 0
26503
26503
  });
26504
+ var TooltipPortal$1 = (props) => {
26505
+ const { __scopeTooltip, forceMount, children: children2, container } = props;
26506
+ const context = useTooltipContext(PORTAL_NAME$8, __scopeTooltip);
26507
+ return /* @__PURE__ */ jsxRuntimeExports.jsx(PortalProvider$3, { scope: __scopeTooltip, forceMount, children: /* @__PURE__ */ jsxRuntimeExports.jsx(Presence$1, { present: forceMount || context.open, children: /* @__PURE__ */ jsxRuntimeExports.jsx(Portal$7, { asChild: true, container, children: children2 }) }) });
26508
+ };
26509
+ TooltipPortal$1.displayName = PORTAL_NAME$8;
26504
26510
  var CONTENT_NAME$8 = "TooltipContent";
26505
- var TooltipContent$1 = reactExports.forwardRef(
26511
+ var TooltipContent$2 = reactExports.forwardRef(
26506
26512
  (props, forwardedRef) => {
26507
26513
  const portalContext = usePortalContext$3(CONTENT_NAME$8, props.__scopeTooltip);
26508
26514
  const { forceMount = portalContext.forceMount, side = "top", ...contentProps } = props;
@@ -26637,7 +26643,7 @@ var TooltipContentImpl = reactExports.forwardRef(
26637
26643
  );
26638
26644
  }
26639
26645
  );
26640
- TooltipContent$1.displayName = CONTENT_NAME$8;
26646
+ TooltipContent$2.displayName = CONTENT_NAME$8;
26641
26647
  var ARROW_NAME$4 = "TooltipArrow";
26642
26648
  var TooltipArrow = reactExports.forwardRef(
26643
26649
  (props, forwardedRef) => {
@@ -26766,9 +26772,12 @@ function getHullPresorted(points) {
26766
26772
  return upperHull.concat(lowerHull);
26767
26773
  }
26768
26774
  }
26769
- var Root3$1 = Tooltip$1;
26770
- var Trigger$4 = TooltipTrigger$1;
26771
- var Content2$4 = TooltipContent$1;
26775
+ var Provider$2 = TooltipProvider$1;
26776
+ var Root3$1 = Tooltip$2;
26777
+ var Trigger$4 = TooltipTrigger$2;
26778
+ var Portal$6 = TooltipPortal$1;
26779
+ var Content2$4 = TooltipContent$2;
26780
+ var Arrow2$1 = TooltipArrow;
26772
26781
  var M$2 = (e, i, s2, u4, m2, a2, l, h2) => {
26773
26782
  let d2 = document.documentElement, w2 = ["light", "dark"];
26774
26783
  function p2(n) {
@@ -80618,7 +80627,7 @@ var tn = f("block", "before:content-[counter(line)]", "before:inline-block", "be
80618
80627
  var et = ({ className: e, language: t, style: o, isIncomplete: n, ...s2 }) => jsxRuntimeExports.jsx("div", { className: f("my-4 flex w-full flex-col gap-2 rounded-xl border border-border bg-sidebar p-2", e), "data-incomplete": n || void 0, "data-language": t, "data-streamdown": "code-block", style: { contentVisibility: "auto", containIntrinsicSize: "auto 200px", ...o }, ...s2 });
80619
80628
  var Se = reactExports.createContext({ code: "" }), de = () => reactExports.useContext(Se);
80620
80629
  var ot = ({ language: e }) => jsxRuntimeExports.jsx("div", { className: "flex h-8 items-center text-muted-foreground text-xs", "data-language": e, "data-streamdown": "code-block-header", children: jsxRuntimeExports.jsx("span", { className: "ml-1 font-mono lowercase", children: e }) });
80621
- var cn$1 = /\n+$/, dn = reactExports.lazy(() => import("./highlighted-body-B3W2YXNL-BCA9A7WB.js").then((e) => ({ default: e.HighlightedCodeBlockBody }))), rt = ({ code: e, language: t, className: o, children: n, isIncomplete: s2 = false, ...r2 }) => {
80630
+ var cn$1 = /\n+$/, dn = reactExports.lazy(() => import("./highlighted-body-B3W2YXNL-2D25w_37.js").then((e) => ({ default: e.HighlightedCodeBlockBody }))), rt = ({ code: e, language: t, className: o, children: n, isIncomplete: s2 = false, ...r2 }) => {
80622
80631
  let i = reactExports.useMemo(() => e.replace(cn$1, ""), [e]), c = reactExports.useMemo(() => ({ bg: "transparent", fg: "inherit", tokens: i.split(`
80623
80632
  `).map((a2) => [{ content: a2, color: "inherit", bgColor: "transparent", htmlStyle: {}, offset: 0 }]) }), [i]);
80624
80633
  return jsxRuntimeExports.jsx(Se.Provider, { value: { code: e }, children: jsxRuntimeExports.jsxs(et, { isIncomplete: s2, language: t, children: [jsxRuntimeExports.jsx(ot, { language: t }), n ? jsxRuntimeExports.jsx("div", { className: "pointer-events-none sticky top-2 z-10 -mt-10 flex h-8 items-center justify-end", children: jsxRuntimeExports.jsx("div", { className: "pointer-events-auto flex shrink-0 items-center gap-2 rounded-md border border-sidebar bg-sidebar/80 px-1.5 py-1 supports-[backdrop-filter]:bg-sidebar/70 supports-[backdrop-filter]:backdrop-blur", "data-streamdown": "code-block-actions", children: n }) }) : null, jsxRuntimeExports.jsx(reactExports.Suspense, { fallback: jsxRuntimeExports.jsx(Qe, { className: o, language: t, result: c, ...r2 }), children: jsxRuntimeExports.jsx(dn, { className: o, code: i, language: t, raw: c, ...r2 }) })] }) });
@@ -80940,7 +80949,7 @@ var Dt = ({ children: e, className: t, onDownload: o, onError: n }) => {
80940
80949
  }, []), jsxRuntimeExports.jsxs("div", { className: "relative", ref: i, children: [jsxRuntimeExports.jsx("button", { className: f("cursor-pointer p-1 text-muted-foreground transition-all hover:text-foreground disabled:cursor-not-allowed disabled:opacity-50", t), disabled: c, onClick: () => r2(!s2), title: "Download table", type: "button", children: e != null ? e : jsxRuntimeExports.jsx(Z, { size: 14 }) }), s2 ? jsxRuntimeExports.jsxs("div", { className: "absolute top-full right-0 z-10 mt-1 min-w-[120px] overflow-hidden rounded-md border border-border bg-background shadow-lg", children: [jsxRuntimeExports.jsx("button", { className: "w-full px-3 py-2 text-left text-sm transition-colors hover:bg-muted/40", onClick: () => a2("csv"), title: "Download table as CSV", type: "button", children: "CSV" }), jsxRuntimeExports.jsx("button", { className: "w-full px-3 py-2 text-left text-sm transition-colors hover:bg-muted/40", onClick: () => a2("markdown"), title: "Download table as Markdown", type: "button", children: "Markdown" })] }) : null] });
80941
80950
  };
80942
80951
  var Vt = ({ children: e, className: t, showControls: o, ...n }) => jsxRuntimeExports.jsxs("div", { className: "my-4 flex flex-col gap-2 rounded-lg border border-border bg-sidebar p-2", "data-streamdown": "table-wrapper", children: [o ? jsxRuntimeExports.jsxs("div", { className: "flex items-center justify-end gap-1", children: [jsxRuntimeExports.jsx(Ht, {}), jsxRuntimeExports.jsx(Dt, {})] }) : null, jsxRuntimeExports.jsx("div", { className: "border-collapse overflow-x-auto overscroll-y-auto rounded-md border border-border bg-background", children: jsxRuntimeExports.jsx("table", { className: f("w-full divide-y divide-border", t), "data-streamdown": "table", ...n, children: e }) })] });
80943
- var Jn = reactExports.lazy(() => import("./mermaid-3ZIDBTTL-CbLetKvR.js").then((e) => ({ default: e.Mermaid }))), Kn = /language-([^\s]+)/;
80952
+ var Jn = reactExports.lazy(() => import("./mermaid-3ZIDBTTL-BDYN9XOo.js").then((e) => ({ default: e.Mermaid }))), Kn = /language-([^\s]+)/;
80944
80953
  function ke(e, t) {
80945
80954
  if (!(e != null && e.position || t != null && t.position)) return true;
80946
80955
  if (!(e != null && e.position && (t != null && t.position))) return false;
@@ -83585,8 +83594,58 @@ const iconButtonVariants = cva([
83585
83594
  size: "tiny"
83586
83595
  }
83587
83596
  });
83588
- function IconButton({ className, variant, size: size2, type = "button", ...props }) {
83589
- return jsxRuntimeExports.jsx("button", { type, className: cn$4(iconButtonVariants({ variant, size: size2, className })), ...props });
83597
+ const IconButton = reactExports.forwardRef(({ className, variant, size: size2, type = "button", ...props }, ref) => jsxRuntimeExports.jsx("button", { ref, type, className: cn$4(iconButtonVariants({ variant, size: size2, className })), ...props }));
83598
+ IconButton.displayName = "IconButton";
83599
+ const COL_TEMPLATE = "340px 1px minmax(50px, 1fr)";
83600
+ const ROWS = [
83601
+ { id: "r0", name: 62, off: 0, bar: 72 },
83602
+ { id: "r1", name: 78, off: 6, bar: 48 },
83603
+ { id: "r2", name: 50, off: 10, bar: 55 },
83604
+ { id: "r3", name: 84, off: 18, bar: 30 },
83605
+ { id: "r4", name: 45, off: 18, bar: 42 },
83606
+ { id: "r5", name: 66, off: 34, bar: 38 },
83607
+ { id: "r6", name: 55, off: 41, bar: 25 },
83608
+ { id: "r7", name: 40, off: 50, bar: 30 }
83609
+ ];
83610
+ const HEADER_MARKERS = ["m0", "m1", "m2", "m3"];
83611
+ 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" }) });
83612
+ function TraceViewerSkeleton() {
83613
+ 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.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$2, { className: "w-3.5 h-3.5 shrink-0 rounded-sm" }), jsxRuntimeExports.jsx(Skeleton$2, { 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((id2) => jsxRuntimeExports.jsx(Skeleton$2, { className: "h-3.5 w-9" }, id2)) }) })] }), 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$2, { className: "w-4 h-4 shrink-0 rounded-sm" }), jsxRuntimeExports.jsx(Skeleton$2, { className: "h-3.5", style: { width: `${row.name}%` } })] }), jsxRuntimeExports.jsx(Skeleton$2, { 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$2, { className: "absolute top-1/2 -translate-y-1/2 h-6 rounded-[0.25rem]", style: { left: `${row.off}%`, width: `${row.bar}%` } }) }) }, row.id)) })] })] });
83614
+ }
83615
+ function useIntersectionObserver(elementRef, { threshold = 0, rootRef, rootMargin = "0%", freezeOnceVisible = false } = {}) {
83616
+ const [entry2, setEntry] = reactExports.useState();
83617
+ const frozen = (entry2 == null ? void 0 : entry2.isIntersecting) && freezeOnceVisible;
83618
+ reactExports.useEffect(() => {
83619
+ const node2 = elementRef == null ? void 0 : elementRef.current;
83620
+ const hasIOSupport = !!window.IntersectionObserver;
83621
+ if (!hasIOSupport || frozen || !node2)
83622
+ return;
83623
+ const updateEntry = ([entry3]) => {
83624
+ setEntry(entry3);
83625
+ };
83626
+ const observer = new IntersectionObserver(updateEntry, {
83627
+ threshold,
83628
+ root: (rootRef == null ? void 0 : rootRef.current) ?? null,
83629
+ rootMargin
83630
+ });
83631
+ observer.observe(node2);
83632
+ return () => observer.disconnect();
83633
+ }, [elementRef, threshold, rootRef, rootMargin, frozen]);
83634
+ return entry2;
83635
+ }
83636
+ function useLoadMoreOnScroll(loadMore, { hasMore, isLoadingMore, rootRef, rootMargin = "400px" }) {
83637
+ const sentinelRef = reactExports.useRef(null);
83638
+ const entry2 = useIntersectionObserver(sentinelRef, { rootRef, rootMargin });
83639
+ const loadMoreRef = reactExports.useRef(loadMore);
83640
+ reactExports.useEffect(() => {
83641
+ loadMoreRef.current = loadMore;
83642
+ }, [loadMore]);
83643
+ reactExports.useEffect(() => {
83644
+ if ((entry2 == null ? void 0 : entry2.isIntersecting) && hasMore && !isLoadingMore) {
83645
+ loadMoreRef.current();
83646
+ }
83647
+ }, [entry2 == null ? void 0 : entry2.isIntersecting, hasMore, isLoadingMore]);
83648
+ return sentinelRef;
83590
83649
  }
83591
83650
  const QUERY = "(prefers-reduced-motion: reduce)";
83592
83651
  const useReducedMotion = () => {
@@ -83606,6 +83665,9 @@ const useReducedMotion = () => {
83606
83665
  }, []);
83607
83666
  return reduced;
83608
83667
  };
83668
+ function Kbd({ children: children2, className }) {
83669
+ return jsxRuntimeExports.jsx("kbd", { className: cn$4("inline-flex h-5 min-w-5 items-center justify-center rounded bg-background-100/20 px-1 text-center font-sans text-xs leading-none", className), children: children2 });
83670
+ }
83609
83671
  const WorkflowIcon = () => {
83610
83672
  return jsxRuntimeExports.jsx("svg", { "data-testid": "geist-icon", height: "16", "stroke-linejoin": "round", style: { color: "currentColor" }, 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" }) });
83611
83673
  };
@@ -84063,6 +84125,54 @@ function computeSpanSegments(span) {
84063
84125
  return [];
84064
84126
  }
84065
84127
  }
84128
+ const INITIAL_VISIBLE_ROWS = 60;
84129
+ function getScrollParent(el) {
84130
+ let node2 = (el == null ? void 0 : el.parentElement) ?? null;
84131
+ while (node2) {
84132
+ const overflowY = getComputedStyle(node2).overflowY;
84133
+ if (overflowY === "auto" || overflowY === "scroll")
84134
+ return node2;
84135
+ node2 = node2.parentElement;
84136
+ }
84137
+ return null;
84138
+ }
84139
+ function useRowWindow(ref, rowCount, rowHeight, overscan = 12) {
84140
+ const [range2, setRange] = reactExports.useState(() => ({
84141
+ start: 0,
84142
+ end: Math.min(rowCount, INITIAL_VISIBLE_ROWS)
84143
+ }));
84144
+ reactExports.useEffect(() => {
84145
+ const self2 = ref.current;
84146
+ const el = getScrollParent(self2);
84147
+ if (!self2 || !el)
84148
+ return;
84149
+ let raf = 0;
84150
+ const measure = () => {
84151
+ raf = 0;
84152
+ const offset2 = self2.getBoundingClientRect().top - el.getBoundingClientRect().top + el.scrollTop;
84153
+ const top = el.scrollTop - offset2;
84154
+ const start2 = Math.max(0, Math.floor(top / rowHeight) - overscan);
84155
+ const end = Math.min(rowCount, Math.ceil((top + el.clientHeight) / rowHeight) + overscan);
84156
+ setRange((prev) => prev.start === start2 && prev.end === end ? prev : { start: start2, end });
84157
+ };
84158
+ const onScroll = () => {
84159
+ if (!raf)
84160
+ raf = requestAnimationFrame(measure);
84161
+ };
84162
+ measure();
84163
+ el.addEventListener("scroll", onScroll, { passive: true });
84164
+ const ro2 = new ResizeObserver(measure);
84165
+ ro2.observe(el);
84166
+ return () => {
84167
+ el.removeEventListener("scroll", onScroll);
84168
+ ro2.disconnect();
84169
+ if (raf)
84170
+ cancelAnimationFrame(raf);
84171
+ };
84172
+ }, [ref, rowCount, rowHeight, overscan]);
84173
+ return range2;
84174
+ }
84175
+ const ROW_HEIGHT_PX = 40;
84066
84176
  const eventStyles = {
84067
84177
  run: { icon: WorkflowIcon, className: "text-blue-900" },
84068
84178
  step: { icon: StepForwardIcon, className: "text-green-900" },
@@ -84088,14 +84198,17 @@ const EventRow = ({ span, isSelected, isDimmed, onSelectSpan }) => {
84088
84198
  return jsxRuntimeExports.jsx("li", { className: cn$4("relative overflow-clip group transition-opacity", ROW_HEIGHT_CLASS, isDimmed && "opacity-35"), role: "treeitem", "aria-selected": isSelected, "aria-expanded": isSelected, "aria-level": 1, onClick: () => onSelectSpan(span.spanId), children: jsxRuntimeExports.jsx("div", { className: "h-full hover:bg-gray-100 group-aria-selected:bg-gray-100 group-aria-selected:hover:bg-gray-200", children: jsxRuntimeExports.jsxs("div", { className: "flex h-full min-w-0 items-center pl-4 pr-2", children: [jsxRuntimeExports.jsxs("div", { className: "flex min-w-0 flex-1 items-center gap-2", children: [jsxRuntimeExports.jsx("span", { className: cn$4("shrink-0", tagClassName), children: jsxRuntimeExports.jsx(Icon2, { className: "w-4 h-4" }) }), jsxRuntimeExports.jsx("span", { className: "min-w-0 text-label-14", children: jsxRuntimeExports.jsx(MiddleTruncate, { value: span.name }) })] }), jsxRuntimeExports.jsx("div", { className: "ml-2 shrink-0", children: jsxRuntimeExports.jsx("span", { className: "text-label-14 text-gray-900 tabular-nums", children: formatDuration(durationMs) }) })] }) }) });
84089
84199
  };
84090
84200
  const EventList = ({ spans, activeSpanId, searchResult, onSelectSpan }) => {
84091
- return jsxRuntimeExports.jsx("ul", { id: "event-list", role: "tree", className: "block min-h-0 overflow-visible divide-y divide-gray-alpha-400 border-b border-gray-alpha-400", children: spans.map((span) => {
84092
- return jsxRuntimeExports.jsx(EventRow, { span, isSelected: span.spanId === activeSpanId, isDimmed: isSpanDimmedBySearch(span.spanId, searchResult), onSelectSpan }, span.spanId);
84093
- }) });
84201
+ const listRef = reactExports.useRef(null);
84202
+ const { start: start2, end } = useRowWindow(listRef, spans.length, ROW_HEIGHT_PX);
84203
+ return jsxRuntimeExports.jsx("ul", { ref: listRef, id: "event-list", role: "tree", className: "block min-h-0 overflow-visible divide-y divide-gray-alpha-400 border-b border-gray-alpha-400", style: {
84204
+ paddingTop: start2 * ROW_HEIGHT_PX,
84205
+ paddingBottom: (spans.length - end) * ROW_HEIGHT_PX
84206
+ }, children: spans.slice(start2, end).map((span) => jsxRuntimeExports.jsx(EventRow, { span, isSelected: span.spanId === activeSpanId, isDimmed: isSpanDimmedBySearch(span.spanId, searchResult), onSelectSpan }, span.spanId)) });
84094
84207
  };
84095
84208
  const GUTTER_PX = 1;
84096
84209
  const MIN_PX = 50;
84097
84210
  const DEFAULT_START_PX = 340;
84098
- function SplitPane({ children: children2, className, defaultStartWidth = DEFAULT_START_PX, startHeader, endHeader }) {
84211
+ function SplitPane({ children: children2, className, defaultStartWidth = DEFAULT_START_PX, startHeader, endHeader, scrollContainerRef }) {
84099
84212
  const parts = reactExports.Children.toArray(children2);
84100
84213
  if (parts.length !== 2) {
84101
84214
  throw new Error("SplitPane expects exactly two children");
@@ -84114,6 +84227,12 @@ function SplitPane({ children: children2, className, defaultStartWidth = DEFAULT
84114
84227
  cancelAnimationFrame(rafRef.current);
84115
84228
  };
84116
84229
  }, []);
84230
+ const setContainerRef = reactExports.useCallback((node2) => {
84231
+ containerRef.current = node2;
84232
+ if (scrollContainerRef) {
84233
+ scrollContainerRef.current = node2;
84234
+ }
84235
+ }, [scrollContainerRef]);
84117
84236
  const clampPx = reactExports.useCallback((px) => {
84118
84237
  const el = containerRef.current;
84119
84238
  if (!el)
@@ -84179,9 +84298,9 @@ function SplitPane({ children: children2, className, defaultStartWidth = DEFAULT
84179
84298
  const hasHeaders = startHeader != null || endHeader != null;
84180
84299
  const gutter = jsxRuntimeExports.jsx("div", { ref: gutterRef, className: "relative z-20 isolate flex shrink-0 cursor-col-resize justify-center", onPointerDown: handlePointerDown, onLostPointerCapture: handleLostPointerCapture, children: jsxRuntimeExports.jsx("span", { className: "pointer-events-none relative z-10 h-full w-px shrink-0 bg-gray-alpha-400", "aria-hidden": true }) });
84181
84300
  if (hasHeaders) {
84182
- return jsxRuntimeExports.jsxs("div", { className: cn$4("flex flex-col h-full min-h-0", className), children: [jsxRuntimeExports.jsxs("div", { className: "shrink-0 grid", style: { gridTemplateColumns: colTemplate }, children: [jsxRuntimeExports.jsx("div", { children: startHeader }), jsxRuntimeExports.jsx("div", { className: "flex justify-center", children: jsxRuntimeExports.jsx("span", { className: "h-full w-px bg-gray-alpha-400", "aria-hidden": true }) }), jsxRuntimeExports.jsx("div", { children: endHeader })] }), jsxRuntimeExports.jsxs("div", { ref: containerRef, className: cn$4("grid flex-1 min-h-0 overflow-x-hidden overflow-y-auto", isDragging && "select-none"), style: { gridTemplateColumns: colTemplate }, children: [start2, gutter, end] })] });
84301
+ return jsxRuntimeExports.jsxs("div", { className: cn$4("flex flex-col h-full min-h-0", className), children: [jsxRuntimeExports.jsxs("div", { className: "shrink-0 grid", style: { gridTemplateColumns: colTemplate }, children: [jsxRuntimeExports.jsx("div", { children: startHeader }), jsxRuntimeExports.jsx("div", { className: "flex justify-center", children: jsxRuntimeExports.jsx("span", { className: "h-full w-px bg-gray-alpha-400", "aria-hidden": true }) }), jsxRuntimeExports.jsx("div", { children: endHeader })] }), jsxRuntimeExports.jsxs("div", { ref: setContainerRef, className: cn$4("grid flex-1 min-h-0 overflow-x-hidden overflow-y-auto", isDragging && "select-none"), style: { gridTemplateColumns: colTemplate }, children: [start2, gutter, end] })] });
84183
84302
  }
84184
- return jsxRuntimeExports.jsxs("div", { ref: containerRef, className: cn$4("grid h-full min-h-0 content-start overflow-x-hidden overflow-y-auto", isDragging && "select-none", className), style: { gridTemplateColumns: colTemplate, height: "100%" }, children: [start2, gutter, end] });
84303
+ return jsxRuntimeExports.jsxs("div", { ref: setContainerRef, className: cn$4("grid h-full min-h-0 content-start overflow-x-hidden overflow-y-auto", isDragging && "select-none", className), style: { gridTemplateColumns: colTemplate, height: "100%" }, children: [start2, gutter, end] });
84185
84304
  }
84186
84305
  const TINY_BAR_BOX_SIZE_PX = 24;
84187
84306
  const TINY_BAR_WIDTH_PX = 4;
@@ -84309,11 +84428,10 @@ const TimelineBar = reactExports.memo(function TimelineBar2({ span, viewStart, v
84309
84428
  }, [onSelect, span.spanId]);
84310
84429
  return jsxRuntimeExports.jsx("div", { role: "treeitem", "aria-selected": isSelected, "aria-expanded": isSelected, "aria-level": 1, className: cn$4("group/timeline-row h-10 relative flex items-center hover:bg-gray-100 aria-selected:bg-gray-100 aria-selected:hover:bg-gray-200 transition-opacity", isDimmed && "opacity-35"), onClick: handleClick, children: jsxRuntimeExports.jsx("div", { className: "absolute inset-y-0", style: TIMELINE_INSET_STYLE, children: jsxRuntimeExports.jsx("div", { className: "absolute top-1/2 h-6 -translate-y-1/2 rounded-[0.25rem]", style: getBarPositionStyle(geometry), children: geometry.mode.kind === "arrow" ? jsxRuntimeExports.jsx(BoundaryArrow, { direction: geometry.mode.direction }) : geometry.mode.kind === "tiny" ? jsxRuntimeExports.jsx("div", { className: "h-6 rounded-[0.25rem] border", style: { background: fallbackBg, borderColor: fallbackBorder } }) : segments.length > 0 ? jsxRuntimeExports.jsx(SegmentBar, { segments }) : jsxRuntimeExports.jsx(PlainBar, { bg: fallbackBg, border: fallbackBorder, label: showTotalLabel ? totalLabel : null }) }) }) });
84311
84430
  });
84312
- const DELTA_ROW_HEIGHT_PX = 40;
84313
84431
  const DELTA_CAP_HEIGHT_PX = 8;
84314
84432
  const DELTA_ROW_OFFSET_PX = 8;
84315
84433
  const DeltaIndicator = reactExports.memo(function DeltaIndicator2({ leftFrac, rightFrac, label, rowIndex }) {
84316
- const centerY = DELTA_ROW_OFFSET_PX + (rowIndex + 1) * DELTA_ROW_HEIGHT_PX;
84434
+ const centerY = DELTA_ROW_OFFSET_PX + (rowIndex + 1) * ROW_HEIGHT_PX;
84317
84435
  return jsxRuntimeExports.jsxs("div", { className: "absolute pointer-events-none", style: {
84318
84436
  left: `${leftFrac * 100}%`,
84319
84437
  width: `${(rightFrac - leftFrac) * 100}%`,
@@ -84329,6 +84447,7 @@ function Timeline({ spans, viewStart, viewEnd, markers: markers2, selectedId, se
84329
84447
  const [containerWidth, setContainerWidth] = reactExports.useState(0);
84330
84448
  const viewDuration = viewEnd - viewStart;
84331
84449
  const timelineWidth = Math.max(0, containerWidth - TIMELINE_PADDING_PX * 2);
84450
+ const { start: start2, end } = useRowWindow(containerRef, spans.length, ROW_HEIGHT_PX);
84332
84451
  reactExports.useEffect(() => {
84333
84452
  const el = containerRef.current;
84334
84453
  if (!el)
@@ -84340,16 +84459,20 @@ function Timeline({ spans, viewStart, viewEnd, markers: markers2, selectedId, se
84340
84459
  return () => ro2.disconnect();
84341
84460
  }, []);
84342
84461
  const gaps = reactExports.useMemo(() => computeSpanGaps(spans, viewStart, viewEnd), [spans, viewStart, viewEnd]);
84343
- return jsxRuntimeExports.jsxs("div", { ref: containerRef, className: "relative h-full overflow-hidden", children: [jsxRuntimeExports.jsx("div", { "aria-hidden": true, className: "absolute inset-y-0 pointer-events-none", style: TIMELINE_INSET_STYLE, children: markers2.map((marker2) => (
84462
+ return jsxRuntimeExports.jsxs("div", { ref: containerRef, className: "relative h-full overflow-hidden", style: { minHeight: spans.length * ROW_HEIGHT_PX }, children: [jsxRuntimeExports.jsx("div", { "aria-hidden": true, className: "absolute inset-y-0 pointer-events-none", style: TIMELINE_INSET_STYLE, children: markers2.map((marker2) => (
84344
84463
  // Skip the "0s" origin marker since the left edge already implies it.
84345
84464
  Math.abs(marker2.value) > 1e-6 ? jsxRuntimeExports.jsx("div", { className: "absolute top-0 bottom-0 w-px bg-gray-alpha-300", style: { left: `${marker2.position * 100}%` } }, `${marker2.position}-${marker2.label}`) : null
84346
- )) }), hoverFraction != null && jsxRuntimeExports.jsx("div", { className: "absolute inset-y-0 pointer-events-none z-10", style: TIMELINE_INSET_STYLE, children: jsxRuntimeExports.jsx("div", { className: "absolute top-0 bottom-0 w-px bg-gray-alpha-500", style: { left: `${hoverFraction * 100}%` } }) }), spans.map((span) => jsxRuntimeExports.jsx(TimelineBar, { span, viewStart, viewDuration, containerWidth: timelineWidth, isSelected: selectedId === span.spanId, isDimmed: isSpanDimmedBySearch(span.spanId, searchResult), onSelect }, span.spanId)), altHeld && jsxRuntimeExports.jsx("div", { "aria-hidden": true, className: "absolute inset-y-0 pointer-events-none", style: TIMELINE_INSET_STYLE, children: gaps.map((gap) => jsxRuntimeExports.jsx(DeltaIndicator, { leftFrac: gap.leftFrac, rightFrac: gap.rightFrac, label: formatDuration(gap.gapMs, true), rowIndex: gap.rowIndex }, gap.rowIndex)) })] });
84465
+ )) }), hoverFraction != null && jsxRuntimeExports.jsx("div", { className: "absolute inset-y-0 pointer-events-none z-10", style: TIMELINE_INSET_STYLE, children: jsxRuntimeExports.jsx("div", { className: "absolute top-0 bottom-0 w-px bg-gray-alpha-500", style: { left: `${hoverFraction * 100}%` } }) }), jsxRuntimeExports.jsx("div", { style: { transform: `translateY(${start2 * ROW_HEIGHT_PX}px)` }, children: spans.slice(start2, end).map((span) => jsxRuntimeExports.jsx(TimelineBar, { span, viewStart, viewDuration, containerWidth: timelineWidth, isSelected: selectedId === span.spanId, isDimmed: isSpanDimmedBySearch(span.spanId, searchResult), onSelect }, span.spanId)) }), altHeld && jsxRuntimeExports.jsx("div", { "aria-hidden": true, className: "absolute inset-y-0 pointer-events-none", style: TIMELINE_INSET_STYLE, children: gaps.map((gap) => jsxRuntimeExports.jsx(DeltaIndicator, { leftFrac: gap.leftFrac, rightFrac: gap.rightFrac, label: formatDuration(gap.gapMs, true), rowIndex: gap.rowIndex }, gap.rowIndex)) })] });
84347
84466
  }
84467
+ const TooltipProvider = Provider$2;
84468
+ const Tooltip$1 = Root3$1;
84469
+ const TooltipTrigger$1 = Trigger$4;
84470
+ const TooltipContent$1 = reactExports.forwardRef(({ className, sideOffset = 8, showArrow = true, children: children2, ...props }, ref) => jsxRuntimeExports.jsx(Portal$6, { children: jsxRuntimeExports.jsxs(Content2$4, { ref, sideOffset, className: cn$4("z-[99999] flex items-center gap-1 rounded-[10px] bg-gray-1000 px-2 py-1.5 !text-label-13 text-background-100 shadow-md select-none", className), ...props, children: [children2, showArrow ? jsxRuntimeExports.jsx(Arrow2$1, { width: 11, height: 5, className: "fill-gray-1000" }) : null] }) }));
84471
+ TooltipContent$1.displayName = Content2$4.displayName;
84348
84472
  const ActiveSpanContext = reactExports.createContext(null);
84349
84473
  ActiveSpanContext.displayName = "ActiveSpanContext";
84350
84474
  function ActiveSpanProvider({ spans, children: children2 }) {
84351
- var _a3;
84352
- const [activeSpanId, setActiveSpanId] = reactExports.useState(((_a3 = spans[0]) == null ? void 0 : _a3.spanId) ?? null);
84475
+ const [activeSpanId, setActiveSpanId] = reactExports.useState(null);
84353
84476
  reactExports.useEffect(() => {
84354
84477
  setActiveSpanId((currentSpanId) => {
84355
84478
  if (!currentSpanId) {
@@ -84465,10 +84588,10 @@ function useSelectedSpanInfo() {
84465
84588
  };
84466
84589
  }, [activeSpan, sidebar]);
84467
84590
  }
84468
- function NewTraceViewer$1({ trace: trace2 }) {
84469
- return jsxRuntimeExports.jsx(ActiveSpanProvider, { spans: trace2.spans, children: jsxRuntimeExports.jsx(NewTraceViewerContent, { trace: trace2 }) });
84591
+ function NewTraceViewer$1({ trace: trace2, onLoadMore, hasMore, isLoadingMore }) {
84592
+ return jsxRuntimeExports.jsx(TooltipProvider, { delayDuration: 300, children: jsxRuntimeExports.jsx(ActiveSpanProvider, { spans: trace2.spans, children: jsxRuntimeExports.jsx(NewTraceViewerContent, { trace: trace2, onLoadMore, hasMore, isLoadingMore }) }) });
84470
84593
  }
84471
- function NewTraceViewerContent({ trace: trace2 }) {
84594
+ function NewTraceViewerContent({ trace: trace2, onLoadMore, hasMore, isLoadingMore }) {
84472
84595
  const { activeSpan, activeSpanId, setActiveSpan, clearActiveSpan } = useActiveSpan();
84473
84596
  const sidebar = useSidebarDataOptional();
84474
84597
  const selectedSpan = useSelectedSpanInfo();
@@ -84476,6 +84599,15 @@ function NewTraceViewerContent({ trace: trace2 }) {
84476
84599
  const deferredSearchQuery = reactExports.useDeferredValue(searchQuery);
84477
84600
  const searchResult = reactExports.useMemo(() => searchSpans(trace2.spans, deferredSearchQuery), [trace2.spans, deferredSearchQuery]);
84478
84601
  const root2 = reactExports.useMemo(() => computeRootBounds(trace2.spans), [trace2.spans]);
84602
+ const scrollContainerRef = reactExports.useRef(null);
84603
+ const loadMore = reactExports.useCallback(() => {
84604
+ void (onLoadMore == null ? void 0 : onLoadMore());
84605
+ }, [onLoadMore]);
84606
+ const loadMoreSentinelRef = useLoadMoreOnScroll(loadMore, {
84607
+ hasMore: Boolean(onLoadMore && hasMore),
84608
+ isLoadingMore: Boolean(isLoadingMore),
84609
+ rootRef: scrollContainerRef
84610
+ });
84479
84611
  const { viewport, setViewport, animateTo } = useAnimatedViewport({
84480
84612
  start: root2.startTime,
84481
84613
  end: root2.startTime + root2.duration
@@ -84737,15 +84869,15 @@ function NewTraceViewerContent({ trace: trace2 }) {
84737
84869
  prevSpanIdRef.current = prevSpanId;
84738
84870
  nextSpanIdRef.current = nextSpanId;
84739
84871
  handleSelectSpanRef.current = handleSelectSpan;
84740
- return jsxRuntimeExports.jsxs("div", { "data-pane": "pane-root", "data-has-detail": activeSpan ? "" : void 0, className: "grid w-full h-full max-h-full grid-cols-[minmax(100px,1fr)] data-[has-detail]:grid-cols-[minmax(100px,1fr)_clamp(280px,420px,100%)]", children: [jsxRuntimeExports.jsxs("div", { id: "trace-parent", className: "grid grid-rows-[1fr] h-full min-h-0 overflow-hidden relative bg-background-100", children: [jsxRuntimeExports.jsxs(SplitPane, { startHeader: jsxRuntimeExports.jsxs("div", { className: "bg-background-100 border-b border-gray-alpha-400 h-10 min-h-10 flex items-center pl-4 pr-2 gap-1.5", children: [jsxRuntimeExports.jsx(Search, { className: "w-3.5 h-3.5 shrink-0 text-gray-800" }), jsxRuntimeExports.jsx("input", { id: "trace-viewer-search", name: "trace-viewer-search", type: "text", value: searchQuery, onChange: (e) => setSearchQuery(e.target.value), onKeyDown: (e) => {
84872
+ return jsxRuntimeExports.jsxs("div", { "data-pane": "pane-root", "data-has-detail": activeSpan ? "" : void 0, className: "grid w-full h-full max-h-full grid-cols-[minmax(100px,1fr)] data-[has-detail]:grid-cols-[minmax(100px,1fr)_clamp(280px,420px,100%)]", children: [jsxRuntimeExports.jsxs("div", { id: "trace-parent", className: "grid grid-rows-[1fr] h-full min-h-0 overflow-hidden relative bg-background-100", children: [jsxRuntimeExports.jsxs(SplitPane, { scrollContainerRef, startHeader: jsxRuntimeExports.jsxs("div", { className: "bg-background-100 border-b border-gray-alpha-400 h-10 min-h-10 flex items-center pl-4 pr-2 gap-1.5", children: [jsxRuntimeExports.jsx(Search, { className: "w-3.5 h-3.5 shrink-0 text-gray-800" }), jsxRuntimeExports.jsx("input", { id: "trace-viewer-search", name: "trace-viewer-search", type: "text", value: searchQuery, onChange: (e) => setSearchQuery(e.target.value), onKeyDown: (e) => {
84741
84873
  if (e.key === "Escape" && searchQuery) {
84742
84874
  e.preventDefault();
84743
84875
  e.stopPropagation();
84744
84876
  setSearchQuery("");
84745
84877
  }
84746
- }, 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", { className: "inline-flex h-5 min-h-5 min-w-5 items-center justify-center rounded border border-gray-alpha-400 bg-background-100 px-1 font-sans text-[13px] font-medium leading-[1.7em] text-gray-900", children: "Esc" }) })] }), endHeader: jsxRuntimeExports.jsx(TimelineHeader, { markers: timeMarkers, hoverInfo: hoverInfo2 }), children: [jsxRuntimeExports.jsx("div", { className: "block overflow-visible", children: jsxRuntimeExports.jsx(EventList, { spans: trace2.spans, activeSpanId, searchResult, onSelectSpan: handleSelectSpan }) }), jsxRuntimeExports.jsx("div", { ref: timelineRef, className: "block min-h-0 overflow-visible relative", onDoubleClick: resetZoom, onMouseMove: handleTimelineMouseMove, onMouseLeave: handleTimelineMouseLeave, children: jsxRuntimeExports.jsx(Timeline, { spans: trace2.spans, viewStart: viewport.start, viewEnd: viewport.end, markers: timeMarkers, selectedId: activeSpanId, searchResult, onSelect: handleSelectSpan, hoverFraction, altHeld }) })] }), jsxRuntimeExports.jsxs("div", { className: "absolute right-3 bottom-3 z-[5] 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, "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, "aria-label": "Zoom in", children: jsxRuntimeExports.jsx(ZoomIn, { className: "w-4 h-4" }) })] })] }), activeSpan && sidebar ? jsxRuntimeExports.jsxs("aside", { className: "flex flex-col h-full max-h-full bg-background-100 border-l border-gray-alpha-400 overflow-auto", children: [jsxRuntimeExports.jsxs("div", { className: "flex items-center justify-between gap-2 shrink-0 px-4 pt-3 pb-3", 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.jsx(IconButton, { "aria-label": "Navigate to previous span", "aria-keyshortcuts": "K", onClick: handleSelectPrevSpan, disabled: !prevSpanId, children: jsxRuntimeExports.jsx(ChevronUp, { className: "w-4 h-4" }) }), jsxRuntimeExports.jsx(IconButton, { "aria-label": "Navigate to next span", "aria-keyshortcuts": "J", onClick: handleSelectNextSpan, disabled: !nextSpanId, children: jsxRuntimeExports.jsx(ChevronDown, { className: "w-4 h-4" }) }), 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: clearActiveSpan, children: jsxRuntimeExports.jsx(X$3, { className: "w-4 h-4" }) })] })] }), jsxRuntimeExports.jsx("div", { className: "flex-1 overflow-y-auto", children: jsxRuntimeExports.jsx(ErrorBoundary$1, { children: jsxRuntimeExports.jsx(EntityDetailPanel, { run: sidebar.run, onStreamClick: sidebar.onStreamClick, onRunClick: sidebar.onRunClick, spanDetailData: sidebar.spanDetailData, spanDetailError: sidebar.spanDetailError, spanDetailLoading: sidebar.spanDetailLoading, onSpanSelect: sidebar.onSpanSelect, onWakeUpSleep: sidebar.onWakeUpSleep, onLoadEventData: sidebar.onLoadEventData, onResolveHook: sidebar.onResolveHook, encryptionKey: sidebar.encryptionKey, onDecrypt: sidebar.onDecrypt, isDecrypting: sidebar.isDecrypting, selectedSpan }) }) })] }) : activeSpan ? jsxRuntimeExports.jsx(DetailPanel, { span: activeSpan, rootStart: root2.startTime, onClose: clearActiveSpan }) : null] });
84878
+ }, 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", { className: "inline-flex h-5 min-h-5 min-w-5 items-center justify-center rounded border border-gray-alpha-400 bg-background-100 px-1 font-sans text-[13px] font-medium leading-[1.7em] text-gray-900", children: "Esc" }) })] }), endHeader: jsxRuntimeExports.jsx(TimelineHeader, { markers: timeMarkers, hoverInfo: hoverInfo2 }), children: [jsxRuntimeExports.jsxs("div", { className: "block overflow-visible", children: [jsxRuntimeExports.jsx(EventList, { spans: trace2.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, className: "block min-h-0 overflow-visible relative", onDoubleClick: resetZoom, onMouseMove: handleTimelineMouseMove, onMouseLeave: handleTimelineMouseLeave, children: jsxRuntimeExports.jsx(Timeline, { spans: trace2.spans, viewStart: viewport.start, viewEnd: viewport.end, markers: timeMarkers, selectedId: activeSpanId, searchResult, onSelect: handleSelectSpan, hoverFraction, altHeld }) })] }), jsxRuntimeExports.jsxs("div", { className: "absolute right-3 bottom-3 z-[5] 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, "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, "aria-label": "Zoom in", children: jsxRuntimeExports.jsx(ZoomIn, { className: "w-4 h-4" }) })] })] }), activeSpan && sidebar ? jsxRuntimeExports.jsxs("aside", { className: "flex flex-col h-full max-h-full bg-background-100 border-l border-gray-alpha-400 overflow-auto", children: [jsxRuntimeExports.jsxs("div", { className: "flex items-center justify-between gap-2 shrink-0 px-4 pt-3 pb-3", 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$1, { children: [jsxRuntimeExports.jsx(TooltipTrigger$1, { asChild: true, children: jsxRuntimeExports.jsx(IconButton, { "aria-label": "Navigate up", "aria-keyshortcuts": "K", onClick: handleSelectPrevSpan, disabled: !prevSpanId, children: jsxRuntimeExports.jsx(ChevronUp, { className: "w-4 h-4" }) }) }), prevSpanId ? jsxRuntimeExports.jsxs(TooltipContent$1, { children: ["Navigate up", jsxRuntimeExports.jsx(Kbd, { children: "K" })] }) : null] }), jsxRuntimeExports.jsxs(Tooltip$1, { children: [jsxRuntimeExports.jsx(TooltipTrigger$1, { asChild: true, children: jsxRuntimeExports.jsx(IconButton, { "aria-label": "Navigate down", "aria-keyshortcuts": "J", onClick: handleSelectNextSpan, disabled: !nextSpanId, children: jsxRuntimeExports.jsx(ChevronDown, { className: "w-4 h-4" }) }) }), nextSpanId ? jsxRuntimeExports.jsxs(TooltipContent$1, { 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: clearActiveSpan, children: jsxRuntimeExports.jsx(X$3, { className: "w-4 h-4" }) })] })] }), jsxRuntimeExports.jsx("div", { className: "flex-1 overflow-y-auto", children: jsxRuntimeExports.jsx(ErrorBoundary$1, { children: jsxRuntimeExports.jsx(EntityDetailPanel, { run: sidebar.run, onStreamClick: sidebar.onStreamClick, onRunClick: sidebar.onRunClick, spanDetailData: sidebar.spanDetailData, spanDetailError: sidebar.spanDetailError, spanDetailLoading: sidebar.spanDetailLoading, onSpanSelect: sidebar.onSpanSelect, onWakeUpSleep: sidebar.onWakeUpSleep, onLoadEventData: sidebar.onLoadEventData, onResolveHook: sidebar.onResolveHook, encryptionKey: sidebar.encryptionKey, onDecrypt: sidebar.onDecrypt, isDecrypting: sidebar.isDecrypting, selectedSpan }) }) })] }) : activeSpan ? jsxRuntimeExports.jsx(DetailPanel, { span: activeSpan, rootStart: root2.startTime, onClose: clearActiveSpan }) : null] });
84747
84879
  }
84748
- const NewTraceViewer = ({ run, events: events2, sidebarData }) => {
84880
+ const NewTraceViewer = ({ run, events: events2, sidebarData, onLoadMore, hasMore, isLoadingMore, loading = false }) => {
84749
84881
  const traceWithMeta = reactExports.useMemo(() => {
84750
84882
  if (!(run == null ? void 0 : run.runId)) {
84751
84883
  return void 0;
@@ -84753,10 +84885,10 @@ const NewTraceViewer = ({ run, events: events2, sidebarData }) => {
84753
84885
  return buildTrace(run, events2, /* @__PURE__ */ new Date());
84754
84886
  }, [run, events2]);
84755
84887
  const trace2 = traceWithMeta;
84756
- if (!trace2) {
84757
- return jsxRuntimeExports.jsx("div", { className: "relative w-full h-full flex items-center justify-center", children: jsxRuntimeExports.jsx("div", { className: "text-gray-500 text-sm", children: "Loading trace…" }) });
84888
+ if (!trace2 || loading && events2.length === 0) {
84889
+ return jsxRuntimeExports.jsx(TraceViewerSkeleton, {});
84758
84890
  }
84759
- return jsxRuntimeExports.jsx(SidebarDataProvider, { value: sidebarData, children: jsxRuntimeExports.jsx("div", { className: "relative w-full h-full flex", children: jsxRuntimeExports.jsx(NewTraceViewer$1, { trace: trace2 }) }) });
84891
+ return jsxRuntimeExports.jsx(SidebarDataProvider, { value: sidebarData, children: jsxRuntimeExports.jsx("div", { className: "relative w-full h-full flex", children: jsxRuntimeExports.jsx(NewTraceViewer$1, { trace: trace2, onLoadMore, hasMore, isLoadingMore }) }) });
84760
84892
  };
84761
84893
  function analyzeEvents(events2) {
84762
84894
  if (!events2 || events2.length === 0) {
@@ -88729,7 +88861,7 @@ const encryption = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.definePr
88729
88861
  encrypt: encrypt$1,
88730
88862
  importKey
88731
88863
  }, Symbol.toStringTag, { value: "Module" }));
88732
- const version$1 = "5.0.0-beta.10";
88864
+ const version$1 = "5.0.0-beta.11";
88733
88865
  const WorldCacheKey = Symbol.for("@workflow/world//cache");
88734
88866
  const WorldCachePromiseKey = Symbol.for("@workflow/world//cachePromise");
88735
88867
  const GetWorldFnKey$1 = Symbol.for("@workflow/world//getWorldFn");
@@ -89064,6 +89196,7 @@ const STABLE_ULID = Symbol.for("WORKFLOW_STABLE_ULID");
89064
89196
  const STREAM_NAME_SYMBOL = Symbol.for("WORKFLOW_STREAM_NAME");
89065
89197
  const STREAM_TYPE_SYMBOL = Symbol.for("WORKFLOW_STREAM_TYPE");
89066
89198
  const STREAM_SERVER_RUN_ID_SYMBOL = Symbol.for("WORKFLOW_STREAM_SERVER_RUN_ID");
89199
+ const STREAM_SERVER_DEPLOYMENT_ID_SYMBOL = Symbol.for("WORKFLOW_STREAM_SERVER_DEPLOYMENT_ID");
89067
89200
  const BODY_INIT_SYMBOL = Symbol.for("BODY_INIT");
89068
89201
  const WEBHOOK_RESPONSE_WRITABLE = Symbol.for("WEBHOOK_RESPONSE_WRITABLE");
89069
89202
  const WORKFLOW_CLASS_REGISTRY = Symbol.for("workflow-class-registry");
@@ -91322,7 +91455,15 @@ function getExternalReducers(global2 = globalThis, ops, runId, cryptoKey) {
91322
91455
  const existingName = value[STREAM_NAME_SYMBOL];
91323
91456
  const existingRunId = value[STREAM_SERVER_RUN_ID_SYMBOL];
91324
91457
  if (typeof existingName === "string" && typeof existingRunId === "string") {
91325
- return { name: existingName, runId: existingRunId };
91458
+ const descriptor = {
91459
+ name: existingName,
91460
+ runId: existingRunId
91461
+ };
91462
+ const existingDeploymentId = value[STREAM_SERVER_DEPLOYMENT_ID_SYMBOL];
91463
+ if (typeof existingDeploymentId === "string") {
91464
+ descriptor.deploymentId = existingDeploymentId;
91465
+ }
91466
+ return descriptor;
91326
91467
  }
91327
91468
  const streamId = (global2[STABLE_ULID] || defaultUlid)();
91328
91469
  const name2 = `strm_${streamId}`;
@@ -91375,6 +91516,10 @@ function getWorkflowReducers(global2 = globalThis) {
91375
91516
  const foreignRunId = value[STREAM_SERVER_RUN_ID_SYMBOL];
91376
91517
  if (typeof foreignRunId === "string")
91377
91518
  s2.runId = foreignRunId;
91519
+ const foreignDeploymentId = value[STREAM_SERVER_DEPLOYMENT_ID_SYMBOL];
91520
+ if (typeof foreignDeploymentId === "string") {
91521
+ s2.deploymentId = foreignDeploymentId;
91522
+ }
91378
91523
  return s2;
91379
91524
  },
91380
91525
  // AbortController/AbortSignal in workflow context — just read symbols (handles).
@@ -91444,6 +91589,10 @@ function getStepReducers(global2 = globalThis, ops, runId, cryptoKey) {
91444
91589
  const s2 = { name: name2 };
91445
91590
  if (typeof foreignRunId === "string")
91446
91591
  s2.runId = foreignRunId;
91592
+ const foreignDeploymentId = value[STREAM_SERVER_DEPLOYMENT_ID_SYMBOL];
91593
+ if (typeof foreignDeploymentId === "string") {
91594
+ s2.deploymentId = foreignDeploymentId;
91595
+ }
91447
91596
  return s2;
91448
91597
  },
91449
91598
  AbortController: (value) => {
@@ -91577,6 +91726,13 @@ function getCommonRevivers(global2 = globalThis) {
91577
91726
  ...getCommonRevivers$1(global2)
91578
91727
  };
91579
91728
  }
91729
+ async function getForwardedWritableEncryptionKey(runId, deploymentId) {
91730
+ const world = await getWorldLazy();
91731
+ if (!world.getEncryptionKeyForRun)
91732
+ return void 0;
91733
+ const rawKey = deploymentId ? await world.getEncryptionKeyForRun(runId, { deploymentId }) : await world.getEncryptionKeyForRun(await world.runs.get(runId));
91734
+ return rawKey ? await importKey(rawKey, ["encrypt"]) : void 0;
91735
+ }
91580
91736
  function getExternalRevivers(global2 = globalThis, ops, runId, cryptoKey) {
91581
91737
  return {
91582
91738
  ...getCommonRevivers(global2),
@@ -91639,12 +91795,7 @@ function getExternalRevivers(global2 = globalThis, ops, runId, cryptoKey) {
91639
91795
  },
91640
91796
  WritableStream: (value) => {
91641
91797
  const targetRunId = typeof value.runId === "string" ? value.runId : runId;
91642
- const targetKey = targetRunId === runId ? cryptoKey : (async () => {
91643
- var _a3;
91644
- const world = await getWorldLazy();
91645
- const rawKey = await ((_a3 = world.getEncryptionKeyForRun) == null ? void 0 : _a3.call(world, targetRunId));
91646
- return rawKey ? await importKey(rawKey, ["encrypt"]) : void 0;
91647
- })();
91798
+ const targetKey = targetRunId === runId ? cryptoKey : getForwardedWritableEncryptionKey(targetRunId, value.deploymentId);
91648
91799
  const serialize2 = getSerializeStream(getExternalReducers(global2, ops, targetRunId, targetKey), targetKey);
91649
91800
  const serverWritable = new WorkflowServerWritableStream(targetRunId, value.name);
91650
91801
  const state = createFlushableState();
@@ -91660,6 +91811,12 @@ function getExternalRevivers(global2 = globalThis, ops, runId, cryptoKey) {
91660
91811
  value: targetRunId,
91661
91812
  writable: false
91662
91813
  });
91814
+ if (typeof value.deploymentId === "string") {
91815
+ Object.defineProperty(serialize2.writable, STREAM_SERVER_DEPLOYMENT_ID_SYMBOL, {
91816
+ value: value.deploymentId,
91817
+ writable: false
91818
+ });
91819
+ }
91663
91820
  return serialize2.writable;
91664
91821
  },
91665
91822
  AbortController: (value) => reviveAbortController(value, ops, runId),
@@ -91730,6 +91887,12 @@ function getWorkflowRevivers(global2 = globalThis) {
91730
91887
  writable: false
91731
91888
  };
91732
91889
  }
91890
+ if (typeof value.deploymentId === "string") {
91891
+ descriptor[STREAM_SERVER_DEPLOYMENT_ID_SYMBOL] = {
91892
+ value: value.deploymentId,
91893
+ writable: false
91894
+ };
91895
+ }
91733
91896
  return Object.create(global2.WritableStream.prototype, descriptor);
91734
91897
  },
91735
91898
  // AbortController/AbortSignal revived inside the workflow VM. Use the
@@ -91759,7 +91922,7 @@ function getWorkflowRevivers(global2 = globalThis) {
91759
91922
  }
91760
91923
  };
91761
91924
  }
91762
- function getStepRevivers(global2 = globalThis, ops, runId, cryptoKey) {
91925
+ function getStepRevivers(global2 = globalThis, ops, runId, cryptoKey, deploymentId) {
91763
91926
  return {
91764
91927
  ...getCommonRevivers(global2),
91765
91928
  // StepFunction reviver for step context - returns raw step function
@@ -91875,7 +92038,7 @@ function getStepRevivers(global2 = globalThis, ops, runId, cryptoKey) {
91875
92038
  pollReadableLock(userReadable, state);
91876
92039
  return userReadable;
91877
92040
  } else {
91878
- const transform2 = getDeserializeStream(getStepRevivers(global2, ops, runId, cryptoKey), cryptoKey);
92041
+ const transform2 = getDeserializeStream(getStepRevivers(global2, ops, runId, cryptoKey, deploymentId), cryptoKey);
91879
92042
  const state = createFlushableState();
91880
92043
  ops.push(state.promise);
91881
92044
  flushablePipe(readable2, transform2.writable, state).catch(() => {
@@ -91886,12 +92049,8 @@ function getStepRevivers(global2 = globalThis, ops, runId, cryptoKey) {
91886
92049
  },
91887
92050
  WritableStream: (value) => {
91888
92051
  const targetRunId = typeof value.runId === "string" ? value.runId : runId;
91889
- const targetKey = targetRunId === runId ? cryptoKey : (async () => {
91890
- var _a3;
91891
- const world = await getWorldLazy();
91892
- const rawKey = await ((_a3 = world.getEncryptionKeyForRun) == null ? void 0 : _a3.call(world, targetRunId));
91893
- return rawKey ? await importKey(rawKey, ["encrypt"]) : void 0;
91894
- })();
92052
+ const targetDeploymentId = typeof value.deploymentId === "string" ? value.deploymentId : targetRunId === runId ? deploymentId : void 0;
92053
+ const targetKey = targetRunId === runId ? cryptoKey : getForwardedWritableEncryptionKey(targetRunId, targetDeploymentId);
91895
92054
  const serialize2 = getSerializeStream(getStepReducers(global2, ops, targetRunId, targetKey), targetKey);
91896
92055
  const serverWritable = new WorkflowServerWritableStream(targetRunId, value.name);
91897
92056
  const state = createFlushableState();
@@ -91907,6 +92066,12 @@ function getStepRevivers(global2 = globalThis, ops, runId, cryptoKey) {
91907
92066
  value: targetRunId,
91908
92067
  writable: false
91909
92068
  });
92069
+ if (targetDeploymentId) {
92070
+ Object.defineProperty(serialize2.writable, STREAM_SERVER_DEPLOYMENT_ID_SYMBOL, {
92071
+ value: targetDeploymentId,
92072
+ writable: false
92073
+ });
92074
+ }
91910
92075
  return serialize2.writable;
91911
92076
  },
91912
92077
  AbortController: (value) => reviveAbortController(value, ops, runId),
@@ -91966,11 +92131,11 @@ async function dehydrateStepArguments(value, _runId, key, global2 = globalThis,
91966
92131
  throw new SerializationError(message2, { hint: hint2, cause });
91967
92132
  }
91968
92133
  }
91969
- async function hydrateStepArguments(value, runId, key, ops = [], global2 = globalThis, extraRevivers = {}) {
92134
+ async function hydrateStepArguments(value, runId, key, ops = [], global2 = globalThis, extraRevivers = {}, deploymentId) {
91970
92135
  return deserialize$1(value, key, {
91971
92136
  global: global2,
91972
92137
  extraRevivers: {
91973
- ...getStreamAndRequestRevivers(getStepRevivers(global2, ops, runId, key)),
92138
+ ...getStreamAndRequestRevivers(getStepRevivers(global2, ops, runId, key, deploymentId)),
91974
92139
  ...extraRevivers
91975
92140
  }
91976
92141
  });
@@ -118649,7 +118814,7 @@ function createLocalWorld(args) {
118649
118814
  const basedir = mergedConfig.dataDir;
118650
118815
  const hooksDir = path$3.join(basedir, "hooks");
118651
118816
  const taggedHookFiles = await listTaggedFiles(hooksDir, tag);
118652
- const { HookSchema: HookSchema2 } = await import("./index-VP-TIWDS.js");
118817
+ const { HookSchema: HookSchema2 } = await import("./index-C6jZ_bJo.js");
118653
118818
  await Promise.all(taggedHookFiles.map(async (hookFile) => {
118654
118819
  const hook = await readJSON(path$3.join(hooksDir, hookFile), HookSchema2);
118655
118820
  if (hook == null ? void 0 : hook.token) {
@@ -118801,8 +118966,8 @@ function requireGetVercelOidcToken() {
118801
118966
  }
118802
118967
  try {
118803
118968
  const [{ getTokenPayload, isExpired }, { refreshToken }] = await Promise.all([
118804
- await import("./token-util-Bmrakd6M.js").then((n) => n.t),
118805
- await import("./token-BxPrGSQ5.js").then((n) => n.t)
118969
+ await import("./token-util-CdvUIKt6.js").then((n) => n.t),
118970
+ await import("./token-Bjcyh98U.js").then((n) => n.t)
118806
118971
  ]);
118807
118972
  if (!token || isExpired(getTokenPayload(token), options == null ? void 0 : options.expirationBufferMs)) {
118808
118973
  await refreshToken(options);
@@ -123973,7 +124138,7 @@ var QueueClient = class {
123973
124138
  setApi(this, new ApiClient({ ...options, region }));
123974
124139
  }
123975
124140
  };
123976
- const version = "5.0.0-beta.9";
124141
+ const version = "5.0.0-beta.10";
123977
124142
  const HTTP_DEBUG_ENABLED = typeof process !== "undefined" && typeof process.env.DEBUG === "string" && (process.env.DEBUG.includes("workflow:") || process.env.DEBUG === "*");
123978
124143
  function httpLog(method, endpoint, status, ms2) {
123979
124144
  if (HTTP_DEBUG_ENABLED) {
@@ -123981,6 +124146,9 @@ function httpLog(method, endpoint, status, ms2) {
123981
124146
  }
123982
124147
  }
123983
124148
  const REQUEST_TIMEOUT_MS = 6e4;
124149
+ const IDEMPOTENT_METHODS = /* @__PURE__ */ new Set(["GET", "HEAD"]);
124150
+ const MAX_BODY_PARSE_RETRIES = 2;
124151
+ const BODY_PARSE_RETRY_BASE_MS = 100;
123984
124152
  const getWorkflowServerUrlOverride = () => process.env.VERCEL_WORKFLOW_SERVER_URL || "";
123985
124153
  const DEFAULT_RESOLVE_DATA_OPTION = "all";
123986
124154
  function deserializeError(obj) {
@@ -124070,101 +124238,116 @@ async function makeRequest({ endpoint, options = {}, config: config2 = {}, schem
124070
124238
  ...RpcService("workflow-server")
124071
124239
  });
124072
124240
  headers2.set("Accept", "application/cbor");
124073
- headers2.set("X-Request-Time", Date.now().toString());
124074
124241
  let body2;
124075
124242
  if (data !== void 0) {
124076
124243
  headers2.set("Content-Type", "application/cbor");
124077
124244
  body2 = encode(data);
124078
124245
  }
124079
- const timeoutSignal = AbortSignal.timeout(REQUEST_TIMEOUT_MS);
124080
- const signal = options.signal ? AbortSignal.any([options.signal, timeoutSignal]) : timeoutSignal;
124081
- const request2 = new Request(url2, {
124082
- ...options,
124083
- body: body2,
124084
- headers: headers2,
124085
- signal
124086
- });
124087
- const fetchStart = Date.now();
124088
- let response2;
124089
- try {
124090
- response2 = await fetch(request2, {
124091
- dispatcher: getDispatcher()
124246
+ const canRetryBody = IDEMPOTENT_METHODS.has(method.toUpperCase());
124247
+ let parseResult;
124248
+ for (let attempt = 0; ; attempt++) {
124249
+ headers2.set("X-Request-Time", Date.now().toString());
124250
+ const timeoutSignal = AbortSignal.timeout(REQUEST_TIMEOUT_MS);
124251
+ const signal = options.signal ? AbortSignal.any([options.signal, timeoutSignal]) : timeoutSignal;
124252
+ const request2 = new Request(url2, {
124253
+ ...options,
124254
+ body: body2,
124255
+ headers: headers2,
124256
+ signal
124092
124257
  });
124093
- } catch (error2) {
124094
- const elapsed = Date.now() - fetchStart;
124095
- if (error2 instanceof Error && (error2.name === "TimeoutError" || error2.name === "AbortError")) {
124096
- const timeoutError = new WorkflowWorldError(`${method} ${endpoint} timed out after ${elapsed}ms`, { url: url2, cause: error2 });
124097
- span == null ? void 0 : span.setAttributes({ ...ErrorType("TIMEOUT") });
124098
- (_a3 = span == null ? void 0 : span.recordException) == null ? void 0 : _a3.call(span, timeoutError);
124099
- throw timeoutError;
124100
- }
124101
- throw error2;
124102
- }
124103
- const fetchMs = Date.now() - fetchStart;
124104
- httpLog(method, endpoint, response2.status, fetchMs);
124105
- span == null ? void 0 : span.setAttributes({
124106
- ...HttpResponseStatusCode(response2.status)
124107
- });
124108
- if (!response2.ok) {
124109
- const errorData = await parseResponseBody(response2).then((r2) => r2.data).catch(() => ({}));
124110
- if (process.env.DEBUG) {
124111
- const stringifiedHeaders = Array.from(headers2.entries()).filter(([key]) => key.toLowerCase() !== "authorization").map(([key, value]) => `-H "${key}: ${value}"`).join(" ");
124112
- console.error(`Failed to fetch, reproduce with:
124113
- curl -X ${request2.method} ${stringifiedHeaders} "${url2}"`);
124114
- }
124115
- let retryAfter;
124116
- const retryAfterHeader = response2.headers.get("Retry-After");
124117
- if (retryAfterHeader) {
124118
- const parsed = parseInt(retryAfterHeader, 10);
124119
- if (!Number.isNaN(parsed)) {
124120
- retryAfter = parsed;
124121
- }
124122
- }
124123
- const defaultMessage = errorData.message || `${request2.method} ${endpoint} -> HTTP ${response2.status}: ${response2.statusText}`;
124124
- const throwWithTrace = (error2) => {
124125
- var _a4;
124126
- span == null ? void 0 : span.setAttributes({
124127
- ...ErrorType(errorData.code || `HTTP ${response2.status}`)
124258
+ const fetchStart = Date.now();
124259
+ let response2;
124260
+ try {
124261
+ response2 = await fetch(request2, {
124262
+ dispatcher: getDispatcher()
124128
124263
  });
124129
- (_a4 = span == null ? void 0 : span.recordException) == null ? void 0 : _a4.call(span, error2);
124264
+ } catch (error2) {
124265
+ const elapsed = Date.now() - fetchStart;
124266
+ if (error2 instanceof Error && (error2.name === "TimeoutError" || error2.name === "AbortError")) {
124267
+ const timeoutError = new WorkflowWorldError(`${method} ${endpoint} timed out after ${elapsed}ms`, { url: url2, cause: error2 });
124268
+ span == null ? void 0 : span.setAttributes({ ...ErrorType("TIMEOUT") });
124269
+ (_a3 = span == null ? void 0 : span.recordException) == null ? void 0 : _a3.call(span, timeoutError);
124270
+ throw timeoutError;
124271
+ }
124130
124272
  throw error2;
124131
- };
124132
- if (response2.status === 409) {
124133
- throwWithTrace(new EntityConflictError(defaultMessage));
124134
- }
124135
- if (response2.status === 410) {
124136
- throwWithTrace(new RunExpiredError(defaultMessage));
124137
124273
  }
124138
- if (response2.status === 425) {
124139
- throwWithTrace(new TooEarlyError(defaultMessage, { retryAfter }));
124140
- }
124141
- if (response2.status === 429) {
124142
- throwWithTrace(new ThrottleError(defaultMessage, { retryAfter }));
124274
+ const fetchMs = Date.now() - fetchStart;
124275
+ httpLog(method, endpoint, response2.status, fetchMs);
124276
+ span == null ? void 0 : span.setAttributes({
124277
+ ...HttpResponseStatusCode(response2.status)
124278
+ });
124279
+ if (!response2.ok) {
124280
+ const errorData = await parseResponseBody(response2).then((r2) => r2.data).catch(() => ({}));
124281
+ if (process.env.DEBUG) {
124282
+ const stringifiedHeaders = Array.from(headers2.entries()).filter(([key]) => key.toLowerCase() !== "authorization").map(([key, value]) => `-H "${key}: ${value}"`).join(" ");
124283
+ console.error(`Failed to fetch, reproduce with:
124284
+ curl -X ${request2.method} ${stringifiedHeaders} "${url2}"`);
124285
+ }
124286
+ let retryAfter;
124287
+ const retryAfterHeader = response2.headers.get("Retry-After");
124288
+ if (retryAfterHeader) {
124289
+ const parsed = parseInt(retryAfterHeader, 10);
124290
+ if (!Number.isNaN(parsed)) {
124291
+ retryAfter = parsed;
124292
+ }
124293
+ }
124294
+ const defaultMessage = errorData.message || `${request2.method} ${endpoint} -> HTTP ${response2.status}: ${response2.statusText}`;
124295
+ const throwWithTrace = (error2) => {
124296
+ var _a4;
124297
+ span == null ? void 0 : span.setAttributes({
124298
+ ...ErrorType(errorData.code || `HTTP ${response2.status}`)
124299
+ });
124300
+ (_a4 = span == null ? void 0 : span.recordException) == null ? void 0 : _a4.call(span, error2);
124301
+ throw error2;
124302
+ };
124303
+ if (response2.status === 409) {
124304
+ throwWithTrace(new EntityConflictError(defaultMessage));
124305
+ }
124306
+ if (response2.status === 410) {
124307
+ throwWithTrace(new RunExpiredError(defaultMessage));
124308
+ }
124309
+ if (response2.status === 425) {
124310
+ throwWithTrace(new TooEarlyError(defaultMessage, { retryAfter }));
124311
+ }
124312
+ if (response2.status === 429) {
124313
+ throwWithTrace(new ThrottleError(defaultMessage, { retryAfter }));
124314
+ }
124315
+ throwWithTrace(new WorkflowWorldError(defaultMessage, {
124316
+ url: url2,
124317
+ status: response2.status,
124318
+ code: errorData.code,
124319
+ retryAfter
124320
+ }));
124143
124321
  }
124144
- throwWithTrace(new WorkflowWorldError(defaultMessage, {
124145
- url: url2,
124146
- status: response2.status,
124147
- code: errorData.code,
124148
- retryAfter
124149
- }));
124150
- }
124151
- onResponse == null ? void 0 : onResponse(response2);
124152
- let parseResult;
124153
- try {
124154
- parseResult = await trace("world.parse", async (parseSpan) => {
124155
- const result2 = await parseResponseBody(response2);
124156
- const contentType = response2.headers.get("Content-Type") || "";
124157
- const isCbor = contentType.includes("application/cbor");
124158
- parseSpan == null ? void 0 : parseSpan.setAttributes({
124159
- ...WorldParseFormat(isCbor ? "cbor" : "json")
124322
+ onResponse == null ? void 0 : onResponse(response2);
124323
+ try {
124324
+ parseResult = await trace("world.parse", async (parseSpan) => {
124325
+ const result2 = await parseResponseBody(response2);
124326
+ const contentType = response2.headers.get("Content-Type") || "";
124327
+ const isCbor = contentType.includes("application/cbor");
124328
+ parseSpan == null ? void 0 : parseSpan.setAttributes({
124329
+ ...WorldParseFormat(isCbor ? "cbor" : "json")
124330
+ });
124331
+ return result2;
124160
124332
  });
124161
- return result2;
124162
- });
124163
- } catch (error2) {
124164
- const contentType = response2.headers.get("Content-Type") || "unknown";
124165
- throw new WorkflowWorldError(`Failed to parse response body for ${request2.method} ${endpoint} (Content-Type: ${contentType}):
124333
+ break;
124334
+ } catch (error2) {
124335
+ if (canRetryBody && attempt < MAX_BODY_PARSE_RETRIES) {
124336
+ const backoffMs = BODY_PARSE_RETRY_BASE_MS * 2 ** attempt;
124337
+ span == null ? void 0 : span.setAttributes({
124338
+ ...ErrorType("PARSE_ERROR_RETRYING")
124339
+ });
124340
+ if (HTTP_DEBUG_ENABLED) {
124341
+ console.debug(`[workflow:world-vercel:http] ${method} ${endpoint} body parse failed (attempt ${attempt + 1}/${MAX_BODY_PARSE_RETRIES + 1}); retrying in ${backoffMs}ms: ${error2}`);
124342
+ }
124343
+ await new Promise((resolve2) => setTimeout(resolve2, backoffMs));
124344
+ continue;
124345
+ }
124346
+ const contentType = response2.headers.get("Content-Type") || "unknown";
124347
+ throw new WorkflowWorldError(`Failed to parse response body for ${method} ${endpoint} (Content-Type: ${contentType}):
124166
124348
 
124167
124349
  ${error2}`, { url: url2, code: "PARSE_ERROR", cause: error2 });
124350
+ }
124168
124351
  }
124169
124352
  const result = await trace("world.validate", async () => {
124170
124353
  const validationResult = schema.safeParse(parseResult.data);
@@ -129538,7 +129721,7 @@ function LayoutContent({
129538
129721
  }, [resource, id2, runId, stepId, hookId, navigate]);
129539
129722
  return /* @__PURE__ */ jsxRuntimeExports.jsxs("div", {
129540
129723
  className: "min-h-screen flex flex-col",
129541
- children: [/* @__PURE__ */ jsxRuntimeExports.jsxs(TooltipProvider, {
129724
+ children: [/* @__PURE__ */ jsxRuntimeExports.jsxs(TooltipProvider$1, {
129542
129725
  delayDuration: 0,
129543
129726
  children: [/* @__PURE__ */ jsxRuntimeExports.jsx("div", {
129544
129727
  className: "sticky top-0 z-50 bg-background border-b px-6 py-4",
@@ -135351,6 +135534,7 @@ const LIVE_POLL_LIMIT = 100;
135351
135534
  const INITIAL_PAGE_SIZE$1 = 500;
135352
135535
  const LOAD_MORE_PAGE_SIZE$1 = 100;
135353
135536
  const LIVE_UPDATE_INTERVAL_MS = 5e3;
135537
+ const AUTO_LOAD_MAX_EVENTS = 500;
135354
135538
  function useWorkflowTraceViewerData(env2, runId, options = {}) {
135355
135539
  const { live = false } = options;
135356
135540
  const [run, setRun] = reactExports.useState(null);
@@ -135459,6 +135643,12 @@ function useWorkflowTraceViewerData(env2, runId, options = {}) {
135459
135643
  eventsHasMore,
135460
135644
  eventsCursor
135461
135645
  ]);
135646
+ reactExports.useEffect(() => {
135647
+ if (events2.length >= AUTO_LOAD_MAX_EVENTS) {
135648
+ return;
135649
+ }
135650
+ loadMoreTraceData();
135651
+ }, [events2.length, loadMoreTraceData]);
135462
135652
  const pollRun = reactExports.useCallback(async () => {
135463
135653
  if (run == null ? void 0 : run.completedAt) {
135464
135654
  return false;
@@ -136416,7 +136606,7 @@ var SelectIcon = reactExports.forwardRef(
136416
136606
  SelectIcon.displayName = ICON_NAME;
136417
136607
  var PORTAL_NAME$4 = "SelectPortal";
136418
136608
  var SelectPortal = (props) => {
136419
- return /* @__PURE__ */ jsxRuntimeExports.jsx(Portal$6, { asChild: true, ...props });
136609
+ return /* @__PURE__ */ jsxRuntimeExports.jsx(Portal$7, { asChild: true, ...props });
136420
136610
  };
136421
136611
  SelectPortal.displayName = PORTAL_NAME$4;
136422
136612
  var CONTENT_NAME$4 = "SelectContent";
@@ -148959,7 +149149,7 @@ var [PortalProvider$1, usePortalContext$1] = createDialogContext$1(PORTAL_NAME$3
148959
149149
  var DialogPortal$1 = (props) => {
148960
149150
  const { __scopeDialog, forceMount, children: children2, container } = props;
148961
149151
  const context = useDialogContext$1(PORTAL_NAME$3, __scopeDialog);
148962
- return /* @__PURE__ */ jsxRuntimeExports.jsx(PortalProvider$1, { scope: __scopeDialog, forceMount, children: reactExports.Children.map(children2, (child) => /* @__PURE__ */ jsxRuntimeExports.jsx(Presence$1, { present: forceMount || context.open, children: /* @__PURE__ */ jsxRuntimeExports.jsx(Portal$6, { asChild: true, container, children: child }) })) });
149152
+ return /* @__PURE__ */ jsxRuntimeExports.jsx(PortalProvider$1, { scope: __scopeDialog, forceMount, children: reactExports.Children.map(children2, (child) => /* @__PURE__ */ jsxRuntimeExports.jsx(Presence$1, { present: forceMount || context.open, children: /* @__PURE__ */ jsxRuntimeExports.jsx(Portal$7, { asChild: true, container, children: child }) })) });
148963
149153
  };
148964
149154
  DialogPortal$1.displayName = PORTAL_NAME$3;
148965
149155
  var OVERLAY_NAME$2 = "DialogOverlay";
@@ -151326,7 +151516,10 @@ function RunDetailView({
151326
151516
  loading,
151327
151517
  error: error2,
151328
151518
  update,
151329
- hasEncryptedData
151519
+ hasEncryptedData,
151520
+ loadMoreTraceData,
151521
+ hasMoreTraceData,
151522
+ isLoadingMoreTraceData
151330
151523
  } = useWorkflowTraceViewerData(env2, runId, { live: true });
151331
151524
  const run = runData ?? {};
151332
151525
  const [encryptionKey, setEncryptionKey] = reactExports.useState(null);
@@ -151621,7 +151814,11 @@ function RunDetailView({
151621
151814
  {
151622
151815
  run,
151623
151816
  events: allEvents ?? [],
151624
- sidebarData
151817
+ loading,
151818
+ sidebarData,
151819
+ onLoadMore: loadMoreTraceData,
151820
+ hasMore: hasMoreTraceData,
151821
+ isLoadingMore: isLoadingMoreTraceData
151625
151822
  }
151626
151823
  ) }) }) }),
151627
151824
  /* @__PURE__ */ jsxRuntimeExports.jsx(TabsContent, { value: "events", className: "mt-0 flex-1 min-h-0", children: /* @__PURE__ */ jsxRuntimeExports.jsx(ErrorBoundary$1, { title: "Failed to load events list", children: /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "h-full", children: /* @__PURE__ */ jsxRuntimeExports.jsx(
@@ -151935,7 +152132,7 @@ const route4 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProper
151935
152132
  __proto__: null,
151936
152133
  loader
151937
152134
  }, Symbol.toStringTag, { value: "Module" }));
151938
- const serverManifest = { "entry": { "module": "/assets/entry.client-DtOpLtMQ.js", "imports": ["/assets/index-BsV8i_Jn.js"], "css": [] }, "routes": { "root": { "id": "root", "parentId": void 0, "path": "", "index": void 0, "caseSensitive": void 0, "hasAction": true, "hasLoader": true, "hasClientAction": false, "hasClientLoader": false, "hasClientMiddleware": false, "hasDefaultExport": true, "hasErrorBoundary": true, "module": "/assets/root-DJKbeamD.js", "imports": ["/assets/index-BsV8i_Jn.js", "/assets/mermaid-3ZIDBTTL-DPZjJwuX.js"], "css": ["/assets/root-BYtlAgHl.css", "/assets/mermaid-3ZIDBTTL-DKxHcEOp.css"], "clientActionModule": void 0, "clientLoaderModule": void 0, "clientMiddlewareModule": void 0, "hydrateFallbackModule": void 0 }, "routes/home": { "id": "routes/home", "parentId": "root", "path": void 0, "index": true, "caseSensitive": void 0, "hasAction": false, "hasLoader": false, "hasClientAction": false, "hasClientLoader": false, "hasClientMiddleware": false, "hasDefaultExport": true, "hasErrorBoundary": false, "module": "/assets/home-DKDz-tU-.js", "imports": ["/assets/index-BsV8i_Jn.js", "/assets/workflow-graph-viewer-DjlqbXVx.js", "/assets/mermaid-3ZIDBTTL-DPZjJwuX.js", "/assets/index-CIZByfnL.js"], "css": ["/assets/workflow-graph-viewer-DnlNuQQH.css", "/assets/mermaid-3ZIDBTTL-DKxHcEOp.css"], "clientActionModule": void 0, "clientLoaderModule": void 0, "clientMiddlewareModule": void 0, "hydrateFallbackModule": void 0 }, "routes/run-detail": { "id": "routes/run-detail", "parentId": "root", "path": "run/:runId", "index": void 0, "caseSensitive": void 0, "hasAction": false, "hasLoader": false, "hasClientAction": false, "hasClientLoader": false, "hasClientMiddleware": false, "hasDefaultExport": true, "hasErrorBoundary": false, "module": "/assets/run-detail-ekQSEj_z.js", "imports": ["/assets/index-BsV8i_Jn.js", "/assets/workflow-graph-viewer-DjlqbXVx.js", "/assets/mermaid-3ZIDBTTL-DPZjJwuX.js", "/assets/encryption-B7z5c3Mu.js", "/assets/index-CIZByfnL.js"], "css": ["/assets/workflow-graph-viewer-DnlNuQQH.css", "/assets/mermaid-3ZIDBTTL-DKxHcEOp.css"], "clientActionModule": void 0, "clientLoaderModule": void 0, "clientMiddlewareModule": void 0, "hydrateFallbackModule": void 0 }, "routes/api.rpc": { "id": "routes/api.rpc", "parentId": "root", "path": "api/rpc", "index": void 0, "caseSensitive": void 0, "hasAction": true, "hasLoader": true, "hasClientAction": false, "hasClientLoader": false, "hasClientMiddleware": false, "hasDefaultExport": false, "hasErrorBoundary": false, "module": "/assets/api.rpc-l0sNRNKZ.js", "imports": [], "css": [], "clientActionModule": void 0, "clientLoaderModule": void 0, "clientMiddlewareModule": void 0, "hydrateFallbackModule": void 0 }, "routes/api.stream.$streamId": { "id": "routes/api.stream.$streamId", "parentId": "root", "path": "api/stream/:streamId", "index": void 0, "caseSensitive": void 0, "hasAction": false, "hasLoader": true, "hasClientAction": false, "hasClientLoader": false, "hasClientMiddleware": false, "hasDefaultExport": false, "hasErrorBoundary": false, "module": "/assets/api.stream._streamId-l0sNRNKZ.js", "imports": [], "css": [], "clientActionModule": void 0, "clientLoaderModule": void 0, "clientMiddlewareModule": void 0, "hydrateFallbackModule": void 0 } }, "url": "/assets/manifest-a33ce94a.js", "version": "a33ce94a", "sri": void 0 };
152135
+ const serverManifest = { "entry": { "module": "/assets/entry.client-DOJDY_4b.js", "imports": ["/assets/index-BXZSIDEp.js"], "css": [] }, "routes": { "root": { "id": "root", "parentId": void 0, "path": "", "index": void 0, "caseSensitive": void 0, "hasAction": true, "hasLoader": true, "hasClientAction": false, "hasClientLoader": false, "hasClientMiddleware": false, "hasDefaultExport": true, "hasErrorBoundary": true, "module": "/assets/root-CtIBMIdD.js", "imports": ["/assets/index-BXZSIDEp.js", "/assets/mermaid-3ZIDBTTL-Cg06pRM9.js"], "css": ["/assets/root-D_G0HW97.css", "/assets/mermaid-3ZIDBTTL-DKxHcEOp.css"], "clientActionModule": void 0, "clientLoaderModule": void 0, "clientMiddlewareModule": void 0, "hydrateFallbackModule": void 0 }, "routes/home": { "id": "routes/home", "parentId": "root", "path": void 0, "index": true, "caseSensitive": void 0, "hasAction": false, "hasLoader": false, "hasClientAction": false, "hasClientLoader": false, "hasClientMiddleware": false, "hasDefaultExport": true, "hasErrorBoundary": false, "module": "/assets/home-D68s49Hb.js", "imports": ["/assets/index-BXZSIDEp.js", "/assets/workflow-graph-viewer-D4OsX_TE.js", "/assets/mermaid-3ZIDBTTL-Cg06pRM9.js", "/assets/index-B6-SzLmT.js"], "css": ["/assets/workflow-graph-viewer-DnlNuQQH.css", "/assets/mermaid-3ZIDBTTL-DKxHcEOp.css"], "clientActionModule": void 0, "clientLoaderModule": void 0, "clientMiddlewareModule": void 0, "hydrateFallbackModule": void 0 }, "routes/run-detail": { "id": "routes/run-detail", "parentId": "root", "path": "run/:runId", "index": void 0, "caseSensitive": void 0, "hasAction": false, "hasLoader": false, "hasClientAction": false, "hasClientLoader": false, "hasClientMiddleware": false, "hasDefaultExport": true, "hasErrorBoundary": false, "module": "/assets/run-detail-B1sCKjMc.js", "imports": ["/assets/index-BXZSIDEp.js", "/assets/workflow-graph-viewer-D4OsX_TE.js", "/assets/mermaid-3ZIDBTTL-Cg06pRM9.js", "/assets/encryption-g14N5vQl.js", "/assets/index-B6-SzLmT.js"], "css": ["/assets/workflow-graph-viewer-DnlNuQQH.css", "/assets/mermaid-3ZIDBTTL-DKxHcEOp.css"], "clientActionModule": void 0, "clientLoaderModule": void 0, "clientMiddlewareModule": void 0, "hydrateFallbackModule": void 0 }, "routes/api.rpc": { "id": "routes/api.rpc", "parentId": "root", "path": "api/rpc", "index": void 0, "caseSensitive": void 0, "hasAction": true, "hasLoader": true, "hasClientAction": false, "hasClientLoader": false, "hasClientMiddleware": false, "hasDefaultExport": false, "hasErrorBoundary": false, "module": "/assets/api.rpc-l0sNRNKZ.js", "imports": [], "css": [], "clientActionModule": void 0, "clientLoaderModule": void 0, "clientMiddlewareModule": void 0, "hydrateFallbackModule": void 0 }, "routes/api.stream.$streamId": { "id": "routes/api.stream.$streamId", "parentId": "root", "path": "api/stream/:streamId", "index": void 0, "caseSensitive": void 0, "hasAction": false, "hasLoader": true, "hasClientAction": false, "hasClientLoader": false, "hasClientMiddleware": false, "hasDefaultExport": false, "hasErrorBoundary": false, "module": "/assets/api.stream._streamId-l0sNRNKZ.js", "imports": [], "css": [], "clientActionModule": void 0, "clientLoaderModule": void 0, "clientMiddlewareModule": void 0, "hydrateFallbackModule": void 0 } }, "url": "/assets/manifest-f3e412ee.js", "version": "f3e412ee", "sri": void 0 };
151939
152136
  const assetsBuildDirectory = "build/client";
151940
152137
  const basename = "/";
151941
152138
  const future = { "unstable_optimizeDeps": false, "unstable_subResourceIntegrity": false, "unstable_trailingSlashAwareDataRequests": false, "unstable_previewServerPrerendering": false, "v8_middleware": false, "v8_splitRouteModules": false, "v8_viteEnvironmentApi": false };