@workflow/web 5.0.0-beta.44 → 5.0.0-beta.47

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/{arrow-up-right-AtCpRI70.js → arrow-up-right-C52N96YH.js} +1 -1
  2. package/build/client/assets/{highlighted-body-B3W2YXNL-BPRwlr7r.js → highlighted-body-B3W2YXNL-BzCKp954.js} +1 -1
  3. package/build/client/assets/{home-BMHSjdeg.js → home-CXFjRmpa.js} +3 -3
  4. package/build/client/assets/{loader-circle-abAcDEYl.js → loader-circle-BQzzSKVU.js} +1 -1
  5. package/build/client/assets/{manifest-a9a8ec99.js → manifest-9ff1658d.js} +1 -1
  6. package/build/client/assets/{mermaid-3ZIDBTTL-CrfHaTou.js → mermaid-3ZIDBTTL-BrUzeGHN.js} +305 -158
  7. package/build/client/assets/{root-e8qlLJiK.js → root-DBp4o4Ap.js} +3 -3
  8. package/build/client/assets/{run-detail-CrWq-9Tk.js → run-detail-7tPGLWpY.js} +58 -37
  9. package/build/client/assets/{workflow-graph-viewer-CFAXloBw.js → workflow-graph-viewer-BI72rVK-.js} +1 -1
  10. package/build/client/assets/{zstd-browser-decoder-B9DmHkyE.js → zstd-browser-decoder-C5OUdy0l.js} +1 -1
  11. package/build/server/assets/{app-wed_Qw3X.js → app-z0qVD1ZU.js} +811 -505
  12. package/build/server/assets/{highlighted-body-B3W2YXNL-imLU-Cvz.js → highlighted-body-B3W2YXNL-BRzynHFv.js} +1 -1
  13. package/build/server/assets/index-DDMGTwh_.js +166 -0
  14. package/build/server/assets/{index-Dsr6TVhD.js → index-jQkBA81b.js} +1 -1
  15. package/build/server/assets/{mermaid-3ZIDBTTL-CgaDjNgb.js → mermaid-3ZIDBTTL-CNWRBcN0.js} +1 -1
  16. package/build/server/assets/{token-CA6-cBL4.js → token-BSEhy2T4.js} +1 -1
  17. package/build/server/assets/{token-util-BNjC27Tj.js → token-util-D_gzpVW2.js} +1 -1
  18. package/build/server/assets/{websocket-server-S8DMC969.js → websocket-server-CDTVQU5X.js} +1 -1
  19. package/build/server/assets/{wrapper-DeK0m2tW.js → wrapper-BxieYZVg.js} +3 -3
  20. package/build/server/assets/{ws-transport-DdxSF5J6.js → ws-transport-DbDOLT7f.js} +5 -5
  21. package/build/server/assets/{zstd-browser-decoder-Cd_DTxZV.js → zstd-browser-decoder-CtzWlfs5.js} +1 -1
  22. package/build/server/index.js +3 -3
  23. package/package.json +8 -8
  24. package/build/server/assets/index-DxLR22JW.js +0 -165
@@ -1,4 +1,4 @@
1
- const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/zstd-browser-decoder-B9DmHkyE.js","assets/index-PFjW8YjQ.js","assets/highlighted-body-B3W2YXNL-BPRwlr7r.js"])))=>i.map(i=>d[i]);
1
+ const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/zstd-browser-decoder-C5OUdy0l.js","assets/index-PFjW8YjQ.js","assets/highlighted-body-B3W2YXNL-BzCKp954.js"])))=>i.map(i=>d[i]);
2
2
  var __defProp = Object.defineProperty;
3
3
  var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
4
4
  var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
@@ -14826,11 +14826,116 @@ function date(params) {
14826
14826
  return /* @__PURE__ */ _coercedDate(ZodDate, params);
14827
14827
  }
14828
14828
  const RESERVED_ATTRIBUTE_KEY_PREFIX = "$";
14829
+ const ATTRIBUTE_KEY_MAX_LENGTH = 256;
14830
+ const ATTRIBUTE_VALUE_MAX_BYTES = 256;
14831
+ const ATTRIBUTE_MAX_PER_RUN = 64;
14832
+ new TextEncoder();
14833
+ class AttributeValidationError extends Error {
14834
+ constructor(message) {
14835
+ super(message);
14836
+ this.name = "AttributeValidationError";
14837
+ }
14838
+ }
14839
+ function attributeCountDelta(key, value, existingKeys) {
14840
+ if (value === null)
14841
+ return (existingKeys == null ? void 0 : existingKeys.has(key)) ? -1 : 0;
14842
+ return existingKeys === void 0 || !existingKeys.has(key) ? 1 : 0;
14843
+ }
14844
+ function validateAttributeBatchConstraints(changes, context = {}) {
14845
+ const seenKeys = /* @__PURE__ */ new Set();
14846
+ const existingKeys = context.existingKeys === void 0 ? void 0 : context.existingKeys instanceof Set ? context.existingKeys : new Set(context.existingKeys);
14847
+ let postMergeCount = (existingKeys == null ? void 0 : existingKeys.size) ?? 0;
14848
+ for (const { key, value } of changes) {
14849
+ if (seenKeys.has(key)) {
14850
+ throw new AttributeValidationError(`Attribute key ${JSON.stringify(key)} appears more than once in the same batch`);
14851
+ }
14852
+ seenKeys.add(key);
14853
+ postMergeCount += attributeCountDelta(key, value, existingKeys);
14854
+ }
14855
+ if (postMergeCount > ATTRIBUTE_MAX_PER_RUN) {
14856
+ throw new AttributeValidationError(`Run attribute count would exceed limit ${ATTRIBUTE_MAX_PER_RUN} (post-merge ${postMergeCount})`);
14857
+ }
14858
+ }
14859
+ const textEncoder$1 = new TextEncoder();
14860
+ const AttributeKeySchema = string$2().min(1, { error: "Attribute key must not be empty" }).max(ATTRIBUTE_KEY_MAX_LENGTH, {
14861
+ error: `Attribute key exceeds limit ${ATTRIBUTE_KEY_MAX_LENGTH}`
14862
+ });
14863
+ const AttributeValueSchema = string$2().refine((value) => textEncoder$1.encode(value).length <= ATTRIBUTE_VALUE_MAX_BYTES, {
14864
+ error: `Attribute value exceeds limit ${ATTRIBUTE_VALUE_MAX_BYTES} UTF-8 bytes`
14865
+ }).nullable();
14829
14866
  const AttributeChangeSchema = object({
14830
- key: string$2(),
14831
- value: union([string$2(), _null()])
14867
+ key: AttributeKeySchema,
14868
+ value: AttributeValueSchema
14832
14869
  });
14833
- const AttributeChangesSchema = array(AttributeChangeSchema);
14870
+ const AttributeChangesSchema = array(AttributeChangeSchema).superRefine((changes, context) => {
14871
+ try {
14872
+ validateAttributeBatchConstraints(changes);
14873
+ } catch (error) {
14874
+ if (!(error instanceof AttributeValidationError))
14875
+ throw error;
14876
+ context.addIssue({
14877
+ code: "custom",
14878
+ message: error.message,
14879
+ input: changes
14880
+ });
14881
+ }
14882
+ });
14883
+ function getOwnProperty$1(object2, key) {
14884
+ return Object.hasOwn(object2, key) ? object2[key] : void 0;
14885
+ }
14886
+ function isSealedNoopEvent(event) {
14887
+ return event.eventType === "noop";
14888
+ }
14889
+ const ENTITY_EVENT_CLASS_BY_TYPE = {
14890
+ attr_set: "attr_set",
14891
+ step_created: "step_created",
14892
+ step_started: "step_started",
14893
+ step_retrying: "step_retrying",
14894
+ step_completed: "step_terminal",
14895
+ step_failed: "step_terminal",
14896
+ wait_created: "wait_created",
14897
+ wait_completed: "wait_completed",
14898
+ hook_created: "hook_created",
14899
+ hook_disposed: "hook_disposed",
14900
+ run_started: "run_started"
14901
+ };
14902
+ function entityEventClass(eventType) {
14903
+ return getOwnProperty$1(ENTITY_EVENT_CLASS_BY_TYPE, eventType);
14904
+ }
14905
+ const RUN_ENTITY_KEY = "";
14906
+ const TERMINAL_EVENT_CLASSES = /* @__PURE__ */ new Set([
14907
+ "attr_set",
14908
+ "step_terminal",
14909
+ "wait_completed",
14910
+ "hook_disposed"
14911
+ ]);
14912
+ function classifyEntityEvent(event) {
14913
+ const eventClass = entityEventClass(event.eventType);
14914
+ if (eventClass === void 0) {
14915
+ return void 0;
14916
+ }
14917
+ if (eventClass === "run_started") {
14918
+ return { eventClass, entity: RUN_ENTITY_KEY };
14919
+ }
14920
+ return event.correlationId ? { eventClass, entity: event.correlationId } : void 0;
14921
+ }
14922
+ const EVENT_DATA_REF_FIELDS_BY_EVENT_TYPE = {
14923
+ run_created: ["input"],
14924
+ run_started: ["input"],
14925
+ run_completed: ["output"],
14926
+ run_failed: ["error"],
14927
+ step_created: ["input"],
14928
+ step_started: ["input"],
14929
+ step_completed: ["result"],
14930
+ step_failed: ["error"],
14931
+ step_retrying: ["error"],
14932
+ hook_created: ["metadata"],
14933
+ hook_received: ["payload"]
14934
+ };
14935
+ const NO_EVENT_DATA_REF_FIELDS = [];
14936
+ function getEventDataRefFields(eventType) {
14937
+ return getOwnProperty$1(EVENT_DATA_REF_FIELDS_BY_EVENT_TYPE, eventType) ?? NO_EVENT_DATA_REF_FIELDS;
14938
+ }
14834
14939
  const BinarySerializedDataSchema = _instanceof(Uint8Array);
14835
14940
  const LegacySerializedDataSchemaV1 = any();
14836
14941
  const SerializedDataSchema = union([
@@ -14899,21 +15004,6 @@ const TERMINAL_STEP_EVENT_TYPES = TerminalStepEventTypeSchema.options;
14899
15004
  function isTerminalStepEventType(eventType) {
14900
15005
  return TERMINAL_STEP_EVENT_TYPES.includes(eventType);
14901
15006
  }
14902
- const ENTITY_EVENT_CLASS_BY_TYPE = {
14903
- step_created: "step_created",
14904
- step_started: "step_started",
14905
- step_retrying: "step_retrying",
14906
- step_completed: "step_terminal",
14907
- step_failed: "step_terminal",
14908
- wait_created: "wait_created",
14909
- wait_completed: "wait_completed",
14910
- hook_created: "hook_created",
14911
- hook_disposed: "hook_disposed",
14912
- run_started: "run_started"
14913
- };
14914
- function entityEventClass(eventType) {
14915
- return ENTITY_EVENT_CLASS_BY_TYPE[eventType];
14916
- }
14917
15007
  const HookLifecycleEventTypeSchema = EventTypeSchema.extract([
14918
15008
  "hook_created",
14919
15009
  "hook_received",
@@ -14936,32 +15026,12 @@ const WAIT_EVENT_TYPES = WaitEventTypeSchema.options;
14936
15026
  function isWaitEventType(eventType) {
14937
15027
  return WAIT_EVENT_TYPES.includes(eventType);
14938
15028
  }
14939
- function isSealedNoopEvent(event) {
14940
- return event.eventType === "noop";
14941
- }
14942
15029
  const ChildEntityCreationEventTypeSchema = EventTypeSchema.extract([
14943
15030
  "step_created",
14944
15031
  "hook_created",
14945
15032
  "wait_created"
14946
15033
  ]);
14947
15034
  ChildEntityCreationEventTypeSchema.options;
14948
- const EVENT_DATA_PAYLOAD_FIELD_BY_EVENT_TYPE = {
14949
- run_created: "input",
14950
- run_started: "input",
14951
- run_completed: "output",
14952
- run_failed: "error",
14953
- step_created: "input",
14954
- step_started: "input",
14955
- step_completed: "result",
14956
- step_failed: "error",
14957
- step_retrying: "error",
14958
- hook_created: "metadata",
14959
- hook_received: "payload"
14960
- };
14961
- const EVENT_DATA_REF_FIELDS = Object.fromEntries(Object.entries(EVENT_DATA_PAYLOAD_FIELD_BY_EVENT_TYPE).map(([eventType, field]) => [eventType, [field]]));
14962
- function getEventDataRefFields(eventType) {
14963
- return EVENT_DATA_REF_FIELDS[eventType] ?? [];
14964
- }
14965
15035
  const BaseEventSchema = object({
14966
15036
  eventType: EventTypeSchema,
14967
15037
  correlationId: string$2().optional(),
@@ -15705,7 +15775,11 @@ const HookResumeTimingSchema = object({
15705
15775
  resumeRequestedAtMs: number$3(),
15706
15776
  /** Epoch ms immediately before the queue publish was requested. */
15707
15777
  queuePublishRequestedAtMs: number$3(),
15708
- /** Which `resumeHook()` dispatch path ran: `parallel` or `sequential`. */
15778
+ /**
15779
+ * Which `resumeHook()` dispatch path ran. Current producers always report
15780
+ * `sequential` (durable write, then wake); older producers may report
15781
+ * `lazy` or `parallel`.
15782
+ */
15709
15783
  strategy: string$2().optional(),
15710
15784
  /** Epoch ms the final consumer's queue handler was entered. */
15711
15785
  consumerStartedAtMs: number$3().optional(),
@@ -15776,9 +15850,9 @@ const WorkflowInvokePayloadSchema = object({
15776
15850
  /** Run creation data, only present on the first queue delivery from start() */
15777
15851
  runInput: RunInputSchema.optional(),
15778
15852
  /**
15779
- * Lazy hook resume data, only present when `resumeHook()` takes the parallel
15780
- * fast path. A consumer that understands this field idempotently ensures the
15781
- * `hook_received` event exists (keyed by `resumeId`) before replaying.
15853
+ * Legacy lazy hook resume data. A consumer that understands this field
15854
+ * idempotently ensures the `hook_received` event exists (keyed by `resumeId`)
15855
+ * before replaying.
15782
15856
  */
15783
15857
  hookInput: HookResumeInputSchema.optional(),
15784
15858
  /**
@@ -15790,7 +15864,7 @@ const WorkflowInvokePayloadSchema = object({
15790
15864
  stepInput: StepDispatchInputSchema.optional(),
15791
15865
  /**
15792
15866
  * Hook-resume TTR timing. Present on both `resumeHook()` dispatch paths
15793
- * (unlike `hookInput`, which only rides the parallel fast path), and
15867
+ * (unlike legacy `hookInput`), and
15794
15868
  * forwarded onto a dispatched step message when the resuming invocation
15795
15869
  * hands the next durable step to another invocation. Purely observational.
15796
15870
  * See {@link HookResumeTimingSchema}.
@@ -15837,12 +15911,14 @@ const HookResumeContextSchema = object({
15837
15911
  encryptionPublicKey: string$2().optional(),
15838
15912
  // Feature marker: the version of the lazy-hook-resume consumer protocol the
15839
15913
  // run's creating deployment supports. Present (>= 1) means that deployment's
15840
- // `@workflow/core` re-ensures the `hook_received` event from the queue
15841
- // message's `hookInput` on replay, so `resumeHook()`'s parallel fast path is
15842
- // safe to use. Because a run is pinned to its creating deployment, this
15843
- // marker is a reliable per-run attestation, unlike inferring support from a
15844
- // version compare against a predicted release cutoff. Absent on runs created
15845
- // before the marker existed (fall back to the sequential path).
15914
+ // `@workflow/core` re-ensures the `hook_received` event from a queue
15915
+ // message's `hookInput` on replay. Current producers no longer send
15916
+ // `hookInput` (the durable write happens before the wake is published), so
15917
+ // they never read this marker; it remains stamped so OLDER producers, which
15918
+ // still gate their lazy path on it, keep working against new runs. Because a
15919
+ // run is pinned to its creating deployment, this marker is a reliable
15920
+ // per-run attestation, unlike inferring support from a version compare
15921
+ // against a predicted release cutoff.
15846
15922
  hookResumeInputVersion: number$3().optional()
15847
15923
  });
15848
15924
  const HookResumeCapabilitiesSchema = object({
@@ -15876,7 +15952,7 @@ object({
15876
15952
  // lookup: RESPONSE-ONLY and TRANSIENT. Never persisted on the hook entity
15877
15953
  // and never part of `resumeContext`, so a server rollback or kill switch
15878
15954
  // takes effect on the next lookup (the field stops appearing).
15879
- // `resumeHook()` gates its parallel fast path on this being present and
15955
+ // `resumeHook()` gates its lazy path on this being present and
15880
15956
  // current. Absent against an older/rolled-back server or when the kill switch
15881
15957
  // is active.
15882
15958
  resumeCapabilities: HookResumeCapabilitiesSchema.optional()
@@ -17584,7 +17660,7 @@ async function hydrateResourceIOAsync(resource, key) {
17584
17660
  return { hydrateDataWithKey: hydrateDataWithKey3, deriveRunPayloadKeys: deriveRunPayloadKeys3 };
17585
17661
  }, true ? void 0 : void 0);
17586
17662
  const { ensureZstdDecoderRegistered } = await __vitePreload(async () => {
17587
- const { ensureZstdDecoderRegistered: ensureZstdDecoderRegistered2 } = await import("./zstd-browser-decoder-B9DmHkyE.js");
17663
+ const { ensureZstdDecoderRegistered: ensureZstdDecoderRegistered2 } = await import("./zstd-browser-decoder-C5OUdy0l.js");
17588
17664
  return { ensureZstdDecoderRegistered: ensureZstdDecoderRegistered2 };
17589
17665
  }, true ? __vite__mapDeps([0,1]) : void 0);
17590
17666
  ensureZstdDecoderRegistered();
@@ -19210,8 +19286,28 @@ function BytesDisplayValue({ display }) {
19210
19286
  function formatField(field) {
19211
19287
  return field === "" ? '""' : field;
19212
19288
  }
19289
+ function isGenericIterable(value) {
19290
+ if (value === null || typeof value !== "object" && typeof value !== "function" || Array.isArray(value) || value instanceof Map || value instanceof Set) {
19291
+ return false;
19292
+ }
19293
+ return typeof value[Symbol.iterator] === "function";
19294
+ }
19295
+ function isEntryIterable(value) {
19296
+ return typeof value.entries === "function";
19297
+ }
19298
+ function collectEntries(iterable, asPairs) {
19299
+ return Array.from(iterable, (item, index2) => {
19300
+ if (asPairs && Array.isArray(item) && item.length >= 2) {
19301
+ return [String(item[0]), collapseRefs(item[1]), index2];
19302
+ }
19303
+ return [void 0, collapseRefs(item), index2];
19304
+ });
19305
+ }
19306
+ function isSelfIterableIterator(value) {
19307
+ return Object.is(value[Symbol.iterator](), value);
19308
+ }
19213
19309
  function describeContainer(value) {
19214
- var _a3;
19310
+ var _a3, _b2;
19215
19311
  if (Array.isArray(value)) {
19216
19312
  return {
19217
19313
  entries: value.map((item) => [void 0, item]),
@@ -19238,8 +19334,26 @@ function describeContainer(value) {
19238
19334
  prefix: "Set"
19239
19335
  };
19240
19336
  }
19241
- if (value !== null && typeof value === "object") {
19337
+ if (isGenericIterable(value)) {
19242
19338
  const name2 = (_a3 = value.constructor) == null ? void 0 : _a3.name;
19339
+ const prefix = name2 && name2 !== "Object" ? name2 : void 0;
19340
+ if (isEntryIterable(value)) {
19341
+ return {
19342
+ entries: collectEntries(value.entries(), true),
19343
+ open: "{",
19344
+ close: "}",
19345
+ prefix
19346
+ };
19347
+ }
19348
+ return {
19349
+ entries: collectEntries(value, false),
19350
+ open: "[",
19351
+ close: "]",
19352
+ prefix
19353
+ };
19354
+ }
19355
+ if (value !== null && typeof value === "object") {
19356
+ const name2 = (_b2 = value.constructor) == null ? void 0 : _b2.name;
19243
19357
  return {
19244
19358
  entries: Object.entries(value),
19245
19359
  open: "{",
@@ -19350,7 +19464,7 @@ function ExpandableContainer({ field, entries, open: open2, close, prefix, ctx,
19350
19464
  }
19351
19465
  };
19352
19466
  const lastIndex = entries.length - 1;
19353
- return jsxRuntimeExports.jsxs("div", { className: CLS.child, role: "treeitem", "aria-expanded": expanded, "aria-controls": expanded ? contentsId : void 0, "data-json-expander": true, ref: rowRef, tabIndex: level === 0 ? 0 : -1, onClick, onKeyDown, children: [jsxRuntimeExports.jsx("span", { className: expanded ? CLS.collapseIcon : CLS.expandIcon, "aria-hidden": "true" }), field !== void 0 && jsxRuntimeExports.jsx("span", { className: CLS.clickableLabel, children: `${formatField(field)}:` }), prefix ? jsxRuntimeExports.jsx("span", { className: CLS.className, children: prefix }) : null, jsxRuntimeExports.jsx("span", { className: CLS.punctuation, children: open2 }), expanded ? jsxRuntimeExports.jsx("ul", { id: contentsId, className: CLS.childFields, role: "group", children: entries.map(([childField, childValue], index2) => jsxRuntimeExports.jsx(DataRender, { field: childField, value: childValue, isLast: index2 === lastIndex, ctx: { ...ctx, level: level + 1 } }, childField ?? index2)) }) : jsxRuntimeExports.jsx("span", { className: CLS.collapsedContent, "aria-hidden": "true" }), jsxRuntimeExports.jsx("span", { className: CLS.punctuation, children: close }), jsxRuntimeExports.jsx(Comma, { isLast })] });
19467
+ return jsxRuntimeExports.jsxs("div", { className: CLS.child, role: "treeitem", "aria-expanded": expanded, "aria-controls": expanded ? contentsId : void 0, "data-json-expander": true, ref: rowRef, tabIndex: level === 0 ? 0 : -1, onClick, onKeyDown, children: [jsxRuntimeExports.jsx("span", { className: expanded ? CLS.collapseIcon : CLS.expandIcon, "aria-hidden": "true" }), field !== void 0 && jsxRuntimeExports.jsx("span", { className: CLS.clickableLabel, children: `${formatField(field)}:` }), prefix ? jsxRuntimeExports.jsx("span", { className: CLS.className, children: prefix }) : null, jsxRuntimeExports.jsx("span", { className: CLS.punctuation, children: open2 }), expanded ? jsxRuntimeExports.jsx("ul", { id: contentsId, className: CLS.childFields, role: "group", children: entries.map(([childField, childValue, entryKey], index2) => jsxRuntimeExports.jsx(DataRender, { field: childField, value: childValue, isLast: index2 === lastIndex, ctx: { ...ctx, level: level + 1 } }, entryKey ?? childField ?? index2)) }) : jsxRuntimeExports.jsx("span", { className: CLS.collapsedContent, "aria-hidden": "true" }), jsxRuntimeExports.jsx("span", { className: CLS.punctuation, children: close }), jsxRuntimeExports.jsx(Comma, { isLast })] });
19354
19468
  }
19355
19469
  function DataRender({ field, value, isLast, ctx }) {
19356
19470
  if (isBytesDisplay(value)) {
@@ -19478,6 +19592,19 @@ function isSameBytesDisplay(a2, b2) {
19478
19592
  var _a3, _b2, _c, _d, _e2, _f;
19479
19593
  return a2.text === b2.text && ((_a3 = a2.decodedFrom) == null ? void 0 : _a3.type) === ((_b2 = b2.decodedFrom) == null ? void 0 : _b2.type) && ((_c = a2.decodedFrom) == null ? void 0 : _c.encoding) === ((_d = b2.decodedFrom) == null ? void 0 : _d.encoding) && ((_e2 = a2.decodedFrom) == null ? void 0 : _e2.rawSummary) === ((_f = b2.decodedFrom) == null ? void 0 : _f.rawSummary);
19480
19594
  }
19595
+ function haveSameIterableValues(a2, b2, seen2) {
19596
+ const aIterator = a2[Symbol.iterator]();
19597
+ const bIterator = b2[Symbol.iterator]();
19598
+ while (true) {
19599
+ const aResult = aIterator.next();
19600
+ const bResult = bIterator.next();
19601
+ if (aResult.done || bResult.done) {
19602
+ return aResult.done === bResult.done;
19603
+ }
19604
+ if (!isDeepEqual(aResult.value, bResult.value, seen2))
19605
+ return false;
19606
+ }
19607
+ }
19481
19608
  function isDeepEqual(a2, b2, seen2 = /* @__PURE__ */ new WeakMap()) {
19482
19609
  if (Object.is(a2, b2))
19483
19610
  return true;
@@ -19490,6 +19617,25 @@ function isDeepEqual(a2, b2, seen2 = /* @__PURE__ */ new WeakMap()) {
19490
19617
  if (a2 instanceof RegExp && b2 instanceof RegExp) {
19491
19618
  return a2.source === b2.source && a2.flags === b2.flags;
19492
19619
  }
19620
+ if (isGenericIterable(a2) || isGenericIterable(b2)) {
19621
+ if (!isGenericIterable(a2) || !isGenericIterable(b2))
19622
+ return false;
19623
+ if (Object.getPrototypeOf(a2) !== Object.getPrototypeOf(b2))
19624
+ return false;
19625
+ if (isSelfIterableIterator(a2) || isSelfIterableIterator(b2))
19626
+ return false;
19627
+ if (seen2.get(a2) === b2)
19628
+ return true;
19629
+ seen2.set(a2, b2);
19630
+ const aHasEntries = isEntryIterable(a2);
19631
+ const bHasEntries = isEntryIterable(b2);
19632
+ if (aHasEntries !== bHasEntries)
19633
+ return false;
19634
+ if (aHasEntries && bHasEntries) {
19635
+ return haveSameIterableValues(a2.entries(), b2.entries(), seen2);
19636
+ }
19637
+ return haveSameIterableValues(a2, b2, seen2);
19638
+ }
19493
19639
  if (a2 instanceof Map && b2 instanceof Map) {
19494
19640
  if (a2.size !== b2.size)
19495
19641
  return false;
@@ -45180,7 +45326,7 @@ var tn = f("block", "before:content-[counter(line)]", "before:inline-block", "be
45180
45326
  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 });
45181
45327
  var Se = reactExports.createContext({ code: "" }), de = () => reactExports.useContext(Se);
45182
45328
  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 }) });
45183
- var cn$1 = /\n+$/, dn = reactExports.lazy(() => __vitePreload(() => import("./highlighted-body-B3W2YXNL-BPRwlr7r.js"), true ? __vite__mapDeps([2,1]) : void 0).then((e) => ({ default: e.HighlightedCodeBlockBody }))), rt = ({ code: e, language: t, className: o, children: n, isIncomplete: s2 = false, ...r2 }) => {
45329
+ var cn$1 = /\n+$/, dn = reactExports.lazy(() => __vitePreload(() => import("./highlighted-body-B3W2YXNL-BzCKp954.js"), true ? __vite__mapDeps([2,1]) : void 0).then((e) => ({ default: e.HighlightedCodeBlockBody }))), rt = ({ code: e, language: t, className: o, children: n, isIncomplete: s2 = false, ...r2 }) => {
45184
45330
  let i = reactExports.useMemo(() => e.replace(cn$1, ""), [e]), c = reactExports.useMemo(() => ({ bg: "transparent", fg: "inherit", tokens: i.split(`
45185
45331
  `).map((a2) => [{ content: a2, color: "inherit", bgColor: "transparent", htmlStyle: {}, offset: 0 }]) }), [i]);
45186
45332
  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 }) })] }) });
@@ -49597,7 +49743,7 @@ const mermaid3ZIDBTTL = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.def
49597
49743
  Mermaid: Nt
49598
49744
  }, Symbol.toStringTag, { value: "Module" }));
49599
49745
  export {
49600
- cn$4 as $,
49746
+ isSealedNoopEvent as $,
49601
49747
  Anchor as A,
49602
49748
  Button as B,
49603
49749
  Check as C,
@@ -49622,110 +49768,111 @@ export {
49622
49768
  VISUALLY_HIDDEN_STYLES as V,
49623
49769
  createContext2 as W,
49624
49770
  fetchWorkflowsManifest as X,
49625
- entityEventClass as Y,
49626
- isSealedNoopEvent as Z,
49771
+ classifyEntityEvent as Y,
49772
+ TERMINAL_EVENT_CLASSES as Z,
49627
49773
  __vitePreload as _,
49628
49774
  TooltipTrigger as a,
49629
- hydrateResourceIO as a$,
49630
- CopyableDataBlock as a0,
49631
- CollapsibleRoot as a1,
49632
- CollapsibleTrigger as a2,
49633
- CollapsibleContent as a3,
49634
- CopyButton as a4,
49635
- RESERVED_ATTRIBUTE_KEY_PREFIX as a5,
49636
- Spinner as a6,
49637
- TooltipProvider as a7,
49638
- Tooltip$1 as a8,
49639
- TooltipTrigger$1 as a9,
49640
- useActiveSpan as aA,
49641
- useSidebarData as aB,
49642
- IconButton as aC,
49643
- useRowWindow as aD,
49644
- isSpanDimmedBySearch as aE,
49645
- ROW_HEIGHT_PX as aF,
49646
- getSpanDurationMs as aG,
49647
- isSpanErrored as aH,
49648
- formatDurationPrecise as aI,
49649
- ActiveSpanProvider as aJ,
49650
- useReducedMotion as aK,
49651
- searchSpans as aL,
49652
- computeRootBounds as aM,
49653
- computeTimeMarkers as aN,
49654
- clampViewportToRoot as aO,
49655
- getHighResInMs as aP,
49656
- scrollRowIntoView as aQ,
49657
- TIMELINE_PADDING_PX as aR,
49658
- Minimap as aS,
49659
- Timeline as aT,
49660
- TimelineHeader as aU,
49661
- wheelZoomScaleFactor as aV,
49662
- wheelDeltaToPixels as aW,
49663
- SidebarDataProvider as aX,
49664
- fetchHook as aY,
49665
- hydrateResourceIOAsync as aZ,
49666
- fetchStep as a_,
49667
- TooltipContent$1 as aa,
49668
- ContextCardProvider as ab,
49669
- Skeleton as ac,
49670
- DecryptClickContext as ad,
49671
- Yr as ae,
49672
- isEncryptedMarker$1 as af,
49673
- TimestampTooltip as ag,
49674
- formatDuration as ah,
49675
- DataInspector as ai,
49676
- _r as aj,
49677
- isHookLifecycleEventType as ak,
49678
- isTerminalStepEventType as al,
49679
- isWaitEventType as am,
49680
- isStepEventType as an,
49681
- RunClickContext as ao,
49682
- StreamClickContext as ap,
49683
- Collapsible as aq,
49684
- isExpiredMarker as ar,
49685
- isDoStreamStep as as,
49686
- extractConversation as at,
49687
- EncryptedDataBlock as au,
49688
- getEventDataRefFields as av,
49689
- hasEncryptedFields as aw,
49690
- useSidebarDataOptional as ax,
49691
- isTerminalWorkflowRunStatus as ay,
49692
- clsx as az,
49775
+ fetchStep as a$,
49776
+ cn$4 as a0,
49777
+ CopyableDataBlock as a1,
49778
+ CollapsibleRoot as a2,
49779
+ CollapsibleTrigger as a3,
49780
+ CollapsibleContent as a4,
49781
+ CopyButton as a5,
49782
+ RESERVED_ATTRIBUTE_KEY_PREFIX as a6,
49783
+ Spinner as a7,
49784
+ TooltipProvider as a8,
49785
+ Tooltip$1 as a9,
49786
+ clsx as aA,
49787
+ useActiveSpan as aB,
49788
+ useSidebarData as aC,
49789
+ IconButton as aD,
49790
+ useRowWindow as aE,
49791
+ isSpanDimmedBySearch as aF,
49792
+ ROW_HEIGHT_PX as aG,
49793
+ getSpanDurationMs as aH,
49794
+ isSpanErrored as aI,
49795
+ formatDurationPrecise as aJ,
49796
+ ActiveSpanProvider as aK,
49797
+ useReducedMotion as aL,
49798
+ searchSpans as aM,
49799
+ computeRootBounds as aN,
49800
+ computeTimeMarkers as aO,
49801
+ clampViewportToRoot as aP,
49802
+ getHighResInMs as aQ,
49803
+ scrollRowIntoView as aR,
49804
+ TIMELINE_PADDING_PX as aS,
49805
+ Minimap as aT,
49806
+ Timeline as aU,
49807
+ TimelineHeader as aV,
49808
+ wheelZoomScaleFactor as aW,
49809
+ wheelDeltaToPixels as aX,
49810
+ SidebarDataProvider as aY,
49811
+ fetchHook as aZ,
49812
+ hydrateResourceIOAsync as a_,
49813
+ TooltipTrigger$1 as aa,
49814
+ TooltipContent$1 as ab,
49815
+ ContextCardProvider as ac,
49816
+ Skeleton as ad,
49817
+ DecryptClickContext as ae,
49818
+ Yr as af,
49819
+ isEncryptedMarker$1 as ag,
49820
+ TimestampTooltip as ah,
49821
+ formatDuration as ai,
49822
+ DataInspector as aj,
49823
+ _r as ak,
49824
+ isHookLifecycleEventType as al,
49825
+ isTerminalStepEventType as am,
49826
+ isWaitEventType as an,
49827
+ isStepEventType as ao,
49828
+ RunClickContext as ap,
49829
+ StreamClickContext as aq,
49830
+ Collapsible as ar,
49831
+ isExpiredMarker as as,
49832
+ isDoStreamStep as at,
49833
+ extractConversation as au,
49834
+ EncryptedDataBlock as av,
49835
+ getEventDataRefFields as aw,
49836
+ hasEncryptedFields as ax,
49837
+ useSidebarDataOptional as ay,
49838
+ isTerminalWorkflowRunStatus as az,
49693
49839
  TooltipContent as b,
49694
- fetchStreams as b0,
49695
- apiBase as b1,
49696
- Slot as b2,
49697
- Slottable as b3,
49698
- buttonVariants as b4,
49699
- fetchEvent as b5,
49700
- fetchEventsByCorrelationId as b6,
49701
- isEncryptedData as b7,
49702
- hydrateData as b8,
49703
- decrypt as b9,
49704
- deriveRunPayloadKeys as ba,
49705
- getWebRevivers as bb,
49706
- LIVE_UPDATE_INTERVAL_MS as bc,
49707
- getEncryptionKeyForRun as bd,
49708
- StreamViewerSkeleton as be,
49709
- Lock as bf,
49710
- StreamViewer as bg,
49711
- composeRefs as bh,
49712
- useFloating as bi,
49713
- offset as bj,
49714
- shift as bk,
49715
- limitShift as bl,
49716
- flip as bm,
49717
- size as bn,
49718
- arrow as bo,
49719
- hide as bp,
49720
- autoUpdate as bq,
49721
- VERCEL_403_ERROR_MESSAGE as br,
49722
- bulkCancelRuns as bs,
49723
- reenqueueRun as bt,
49724
- wakeUpRun as bu,
49725
- resumeHook as bv,
49726
- fetchHookToken as bw,
49727
- cancelRun as bx,
49728
- recreateRun as by,
49840
+ hydrateResourceIO as b0,
49841
+ fetchStreams as b1,
49842
+ apiBase as b2,
49843
+ Slot as b3,
49844
+ Slottable as b4,
49845
+ buttonVariants as b5,
49846
+ fetchEvent as b6,
49847
+ fetchEventsByCorrelationId as b7,
49848
+ isEncryptedData as b8,
49849
+ hydrateData as b9,
49850
+ decrypt as ba,
49851
+ deriveRunPayloadKeys as bb,
49852
+ getWebRevivers as bc,
49853
+ LIVE_UPDATE_INTERVAL_MS as bd,
49854
+ getEncryptionKeyForRun as be,
49855
+ StreamViewerSkeleton as bf,
49856
+ Lock as bg,
49857
+ StreamViewer as bh,
49858
+ composeRefs as bi,
49859
+ useFloating as bj,
49860
+ offset as bk,
49861
+ shift as bl,
49862
+ limitShift as bm,
49863
+ flip as bn,
49864
+ size as bo,
49865
+ arrow as bp,
49866
+ hide as bq,
49867
+ autoUpdate as br,
49868
+ VERCEL_403_ERROR_MESSAGE as bs,
49869
+ bulkCancelRuns as bt,
49870
+ reenqueueRun as bu,
49871
+ wakeUpRun as bv,
49872
+ resumeHook as bw,
49873
+ fetchHookToken as bx,
49874
+ cancelRun as by,
49875
+ recreateRun as bz,
49729
49876
  createLucideIcon as c,
49730
49877
  runHealthCheck as d,
49731
49878
  cn as e,
@@ -1,7 +1,7 @@
1
1
  import { r as reactExports, j as jsxRuntimeExports, w as withComponentProps, a as withErrorBoundaryProps, M as Meta, L as Links, S as ScrollRestoration, b as Scripts, O as Outlet, u as useRouteError, i as isRouteErrorResponse, c as Link, d as useNavigate, e as useSearchParams } from "./index-PFjW8YjQ.js";
2
- import { c as createLucideIcon, u as useServerConfig, T as Tooltip, a as TooltipTrigger, b as TooltipContent, d as runHealthCheck, t as toast, B as Button, e as cn, f as Toaster$1, S as ServerConfigProvider, g as TooltipProvider } from "./mermaid-3ZIDBTTL-CrfHaTou.js";
3
- import { L as LoaderCircle } from "./loader-circle-abAcDEYl.js";
4
- import { A as ArrowUpRight } from "./arrow-up-right-AtCpRI70.js";
2
+ import { c as createLucideIcon, u as useServerConfig, T as Tooltip, a as TooltipTrigger, b as TooltipContent, d as runHealthCheck, t as toast, B as Button, e as cn, f as Toaster$1, S as ServerConfigProvider, g as TooltipProvider } from "./mermaid-3ZIDBTTL-BrUzeGHN.js";
3
+ import { L as LoaderCircle } from "./loader-circle-BQzzSKVU.js";
4
+ import { A as ArrowUpRight } from "./arrow-up-right-C52N96YH.js";
5
5
  var M = (e, i, s, u, m, a, l, h) => {
6
6
  let d = document.documentElement, w = ["light", "dark"];
7
7
  function p(n) {