@burdenoff/fluidgrids-fe-sdk 2026.1114.4 → 2026.1114.6

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.
@@ -19,6 +19,7 @@ import { t as EntityTagPicker } from "./EntityTagPicker-BppBSEJk.js";
19
19
  import { a as useRecipientLabel, n as ApprovalApprovers, t as channelLabel } from "./channel-DtF1n_ab.js";
20
20
  import { r as useRunHumanRequests } from "./useHumanRequests-DwG2tQ3f.js";
21
21
  import { a as encodedPayloadBytes, f as EffectBadge, h as useRunPolicyDecisions, i as decodePayloads, l as formatBudgetUsd, n as checkCodecServerUrl, o as isEncodedPayload, r as containsEncodedPayload, t as CodecServerError } from "./codec-client-CAYl6j46.js";
22
+ import { a as RUN_CONTROL_DIALOG_STYLE, c as parseJsonInput, i as NativeSelect, l as parseJsonObjectInput, n as JsonBlock, o as StatusPill, r as JsonField, s as newRunControlId, t as FieldError, u as useResource } from "./shared-C0LCTtyh.js";
22
23
  import { t as useWorkflowProposal } from "./useWorkflowProposal-B9vXLKef.js";
23
24
  import { t as WorkflowProposalCard } from "./WorkflowProposalCard-SmRv_Egf.js";
24
25
  import { t as AiCreditBalanceSlot } from "./aiCreditsBridge-BuE92tKo.js";
@@ -30,7 +31,6 @@ import { a as formatTokens, d as formatMicroUsd, o as modelLabel, r as aiCost }
30
31
  import { _ as useWorkflowTestsEnabled, l as useDurableFunctionNodesEnabled, m as usePhaseCFlags, u as useDurableParityEnabled } from "./feature-flags-B_b8PJ6Z.js";
31
32
  import { A as revokeSignalToken, B as updateActivityOptions, D as resetActivities, E as queryRun, N as sendRunUpdate, O as resetRun, R as unpauseActivities, S as fetchSignalTokens, V as upsertRunSearchAttributes, _ as fetchPauseRules, b as fetchRunUpdate, d as failActivityById, g as fetchCodecServerSettings, i as completeActivityById, k as resetRunToLastCleanTask, s as createSignalToken, v as fetchRunControlFields, w as pauseActivities, y as fetchRunHistoryArchive } from "./api-CEnNq15C.js";
32
33
  import { a as fetchTaskQueueStats } from "./api-DKfMt0IX.js";
33
- import { a as RUN_CONTROL_DIALOG_STYLE, c as parseJsonInput, i as NativeSelect, l as parseJsonObjectInput, n as JsonBlock, o as StatusPill, r as JsonField, s as newRunControlId, t as FieldError, u as useResource } from "./shared-C0LCTtyh.js";
34
34
  import { v as useWorkflowVersions } from "./useWorkflows-BrqrVT8h.js";
35
35
  import { useCallback, useEffect, useMemo, useRef, useState } from "react";
36
36
  import { Link, useNavigate, useParams, useSearchParams } from "react-router";
@@ -1611,14 +1611,14 @@ function RunHumanRequestRow({ request, plain }) {
1611
1611
  * instead of `steps`. Output is free-form JSON, so every read is defensive:
1612
1612
  * a field of an unexpected shape is skipped, never thrown on.
1613
1613
  */
1614
- function isRecord$3(value) {
1614
+ function isRecord$4(value) {
1615
1615
  return typeof value === "object" && value !== null && !Array.isArray(value);
1616
1616
  }
1617
1617
  function asRecord(value) {
1618
- if (isRecord$3(value)) return value;
1618
+ if (isRecord$4(value)) return value;
1619
1619
  if (typeof value === "string") {
1620
1620
  const parsed = tryParseJson(value);
1621
- return isRecord$3(parsed) ? parsed : null;
1621
+ return isRecord$4(parsed) ? parsed : null;
1622
1622
  }
1623
1623
  return null;
1624
1624
  }
@@ -1680,7 +1680,7 @@ function classifyObservation(observation) {
1680
1680
  };
1681
1681
  }
1682
1682
  function toStep(raw, index) {
1683
- if (!isRecord$3(raw)) return null;
1683
+ if (!isRecord$4(raw)) return null;
1684
1684
  const tool = stringOrNull(raw.tool) ?? stringOrNull(raw.toolName) ?? stringOrNull(raw.action) ?? stringOrNull(raw.name);
1685
1685
  if (!tool) return null;
1686
1686
  const observationRaw = raw.observation ?? raw.output ?? raw.result;
@@ -1709,7 +1709,7 @@ function toPendingApprovals(raw) {
1709
1709
  if (!Array.isArray(raw)) return [];
1710
1710
  const pending = [];
1711
1711
  for (const item of raw) {
1712
- if (!isRecord$3(item)) continue;
1712
+ if (!isRecord$4(item)) continue;
1713
1713
  const tool = stringOrNull(item.name) ?? stringOrNull(item.tool);
1714
1714
  if (!tool) continue;
1715
1715
  const callId = stringOrNull(item.id) ?? stringOrNull(item.callId);
@@ -1731,7 +1731,7 @@ const PAYLOAD_KEYS = [
1731
1731
  "intermediateSteps"
1732
1732
  ];
1733
1733
  function looksLikeAgentPayload(value) {
1734
- return isRecord$3(value) && PAYLOAD_KEYS.some((key) => key in value);
1734
+ return isRecord$4(value) && PAYLOAD_KEYS.some((key) => key in value);
1735
1735
  }
1736
1736
  /**
1737
1737
  * The agent payload inside a node output: the output itself when it carries
@@ -3181,7 +3181,7 @@ function RunDataPrunedNotice({ dataPrunedAt }) {
3181
3181
  }
3182
3182
 
3183
3183
  // src/modules/executions/utils/run-queue-marker.ts
3184
- function isRecord$2(value) {
3184
+ function isRecord$3(value) {
3185
3185
  return typeof value === "object" && value !== null && !Array.isArray(value);
3186
3186
  }
3187
3187
  function isRunQueueScope(value) {
@@ -3189,9 +3189,9 @@ function isRunQueueScope(value) {
3189
3189
  }
3190
3190
  /** The queue marker on a run's context, or null when there is none or it is malformed. */
3191
3191
  function readRunQueueMarker(context) {
3192
- if (!isRecord$2(context)) return null;
3192
+ if (!isRecord$3(context)) return null;
3193
3193
  const marker = context.concurrency;
3194
- if (!isRecord$2(marker)) return null;
3194
+ if (!isRecord$3(marker)) return null;
3195
3195
  const { queuedAt, checkedAt, limit, active, position, scope } = marker;
3196
3196
  if (typeof queuedAt !== "string" || typeof checkedAt !== "string" || typeof limit !== "number" || typeof active !== "number" || typeof position !== "number" || scope !== void 0 && !isRunQueueScope(scope)) return null;
3197
3197
  return {
@@ -3250,6 +3250,65 @@ function RunQueuedBanner({ status, context }) {
3250
3250
  });
3251
3251
  }
3252
3252
 
3253
+ // src/modules/executions/components/RulePausedBanner.tsx
3254
+ /**
3255
+ * *Paused by rule* on a graph run (BOFF-13553, spec code-first 11 §2.28,
3256
+ * HC5): the nodes an activity pause rule holds, each with the rule's reason.
3257
+ * The run continues by itself once the rule is deleted or expires, so the
3258
+ * banner says so instead of offering Resume (the service refuses a generic
3259
+ * resume for a held node).
3260
+ */
3261
+ function RulePausedBanner({ nodes }) {
3262
+ const tr = useTr();
3263
+ if (nodes.length === 0) return null;
3264
+ return /* @__PURE__ */ jsxs("section", {
3265
+ "data-testid": "rule-paused-banner",
3266
+ className: "mb-6 rounded-md border border-[var(--color-status-warning-border)] bg-[var(--color-status-warning-bg-subtle)] p-3",
3267
+ children: [
3268
+ /* @__PURE__ */ jsxs("div", {
3269
+ className: "mb-2 flex items-center gap-2",
3270
+ children: [/* @__PURE__ */ jsx(Icon, {
3271
+ icon: "mdi:pause-octagon-outline",
3272
+ width: 16,
3273
+ className: "text-[var(--color-status-warning-text)]"
3274
+ }), /* @__PURE__ */ jsx("h4", {
3275
+ className: "text-sm font-medium text-text-primary",
3276
+ children: tr("fluidgrids.executions.rulePaused.title", "Held by a pause rule")
3277
+ })]
3278
+ }),
3279
+ /* @__PURE__ */ jsx("p", {
3280
+ className: "mb-2 text-sm text-text-secondary",
3281
+ children: tr("fluidgrids.executions.rulePaused.body", "A workspace pause rule holds these steps. The run continues by itself when the rule is deleted or expires (Settings → Execution → Pause rules).")
3282
+ }),
3283
+ /* @__PURE__ */ jsx("ul", {
3284
+ className: "space-y-1",
3285
+ children: nodes.map((node) => /* @__PURE__ */ jsxs("li", {
3286
+ className: "flex flex-wrap items-center gap-2 text-sm",
3287
+ "data-testid": "rule-paused-node",
3288
+ children: [
3289
+ /* @__PURE__ */ jsx("code", {
3290
+ className: "font-mono text-xs text-text-primary",
3291
+ children: node.nodeId
3292
+ }),
3293
+ /* @__PURE__ */ jsx("span", {
3294
+ title: node.reason ?? void 0,
3295
+ children: /* @__PURE__ */ jsx(StatusPill, {
3296
+ tone: "warning",
3297
+ testId: "node-paused-by-rule",
3298
+ children: tr("fluidgrids.runControl.activities.pausedByRule", "Paused by rule")
3299
+ })
3300
+ }),
3301
+ node.reason && /* @__PURE__ */ jsx("span", {
3302
+ className: "text-xs text-text-secondary",
3303
+ children: node.reason
3304
+ })
3305
+ ]
3306
+ }, node.nodeId))
3307
+ })
3308
+ ]
3309
+ });
3310
+ }
3311
+
3253
3312
  // src/modules/executions/components/RunBudgetPanel.tsx
3254
3313
  /**
3255
3314
  * Run detail: the run's AI budget (BOFF-9943).
@@ -4028,6 +4087,37 @@ function WaitingAtPanel({ trace, loading, error, onRefresh, metadata }) {
4028
4087
  });
4029
4088
  }
4030
4089
 
4090
+ // src/modules/executions/utils/rule-paused-nodes.ts
4091
+ /** The waiting marker of a graph node a pause rule holds. */
4092
+ const RULE_PAUSED_WAIT = "activity_paused";
4093
+ function isRecord$2(value) {
4094
+ return typeof value === "object" && value !== null && !Array.isArray(value);
4095
+ }
4096
+ function str(value) {
4097
+ return typeof value === "string" && value.trim() ? value : null;
4098
+ }
4099
+ /** Whether a node state is a graph node held by a pause rule. */
4100
+ function isRulePausedNode(state) {
4101
+ return state.status === "WAITING" && isRecord$2(state.output) && state.output._waiting === "activity_paused";
4102
+ }
4103
+ /** The held nodes of a run, one entry per node id, in node-state order. */
4104
+ function rulePausedNodes(nodeStates) {
4105
+ const result = [];
4106
+ const seen = /* @__PURE__ */ new Set();
4107
+ for (const state of nodeStates ?? []) {
4108
+ if (!isRulePausedNode(state) || seen.has(state.nodeId)) continue;
4109
+ seen.add(state.nodeId);
4110
+ const output = state.output;
4111
+ result.push({
4112
+ nodeId: state.nodeId,
4113
+ ruleId: str(output._pauseRuleId),
4114
+ reason: str(output._pauseReason),
4115
+ pausedAt: str(output._pausedAt)
4116
+ });
4117
+ }
4118
+ return result;
4119
+ }
4120
+
4031
4121
  // src/modules/executions/utils/detail-tab.ts
4032
4122
  function resolveDetailTab(selection, runId, available, fallback) {
4033
4123
  if (selection.runId !== runId) return fallback;
@@ -6963,6 +7053,82 @@ function EncodedPayloadChip({ payload, codecServer, fetchImpl }) {
6963
7053
  });
6964
7054
  }
6965
7055
 
7056
+ // src/modules/run-control/components/ArchivedRunView.tsx
7057
+ function ArchivedRunView({ runId, enabled, fallback, backLink, onViewChildRun }) {
7058
+ const tr = useTr();
7059
+ const archive = useResource(`archived-run:${runId}`, enabled, () => fetchRunHistoryArchive(runId));
7060
+ const archived = archive.data?.archived === true;
7061
+ const history = useRunHistory(runId, {
7062
+ enabled: archived,
7063
+ live: false
7064
+ });
7065
+ if (!enabled) return /* @__PURE__ */ jsx(Fragment$1, { children: fallback });
7066
+ if (!archive.data && !archive.error) return /* @__PURE__ */ jsxs("div", {
7067
+ className: "animate-pulse p-4 sm:p-6",
7068
+ "data-testid": "archived-run-loading",
7069
+ "aria-busy": "true",
7070
+ children: [/* @__PURE__ */ jsx("div", { className: "mb-4 h-8 w-48 rounded bg-surface-sunken" }), /* @__PURE__ */ jsx("div", { className: "h-64 rounded-lg bg-surface-sunken" })]
7071
+ });
7072
+ if (!archived) return /* @__PURE__ */ jsx(Fragment$1, { children: fallback });
7073
+ const ref = archive.data?.archiveRef ?? tr("fluidgrids.runControl.archive.unknownRef", "the workspace's archive bucket");
7074
+ const archivedCount = archive.data?.historyLength ?? 0;
7075
+ const unreadable = !history.loading && !history.error && history.events.length === 0 && archivedCount > 0;
7076
+ return /* @__PURE__ */ jsxs("div", {
7077
+ className: "space-y-4 p-4 sm:p-6",
7078
+ "data-testid": "archived-run",
7079
+ children: [
7080
+ backLink,
7081
+ /* @__PURE__ */ jsxs("div", {
7082
+ className: "flex flex-wrap items-center gap-2",
7083
+ children: [/* @__PURE__ */ jsx("h1", {
7084
+ className: "font-mono text-lg font-semibold text-text-primary",
7085
+ children: runId
7086
+ }), /* @__PURE__ */ jsxs("span", {
7087
+ className: "inline-flex items-center gap-1 rounded-full border border-border-default bg-surface-elevated px-2 py-0.5 text-xs text-text-secondary",
7088
+ children: [/* @__PURE__ */ jsx(Icon, {
7089
+ icon: "mdi:archive-outline",
7090
+ width: 14
7091
+ }), tr("fluidgrids.runControl.archive.badge", "Archived")]
7092
+ })]
7093
+ }),
7094
+ /* @__PURE__ */ jsxs("div", {
7095
+ role: "status",
7096
+ className: "flex items-start gap-2 rounded-md border border-border-default bg-surface-elevated p-3 text-sm text-text-primary",
7097
+ "data-testid": "run-archived",
7098
+ children: [/* @__PURE__ */ jsx(Icon, {
7099
+ icon: "mdi:archive-outline",
7100
+ width: 18,
7101
+ className: "mt-0.5 shrink-0 text-text-secondary"
7102
+ }), /* @__PURE__ */ jsx("span", { children: tr("fluidgrids.runControl.archive.readBack", "Retention purged this run after archiving it to {{ref}}. Its history below is read back from the archive.", { ref }) })]
7103
+ }),
7104
+ unreadable ? /* @__PURE__ */ jsxs("div", {
7105
+ role: "alert",
7106
+ className: "flex items-start gap-2 rounded-md border border-status-warning-border bg-status-warning-bg-subtle p-3 text-sm text-status-warning-text",
7107
+ "data-testid": "archived-run-unreadable",
7108
+ children: [/* @__PURE__ */ jsx(Icon, {
7109
+ icon: "mdi:lock-outline",
7110
+ width: 18,
7111
+ className: "mt-0.5 shrink-0"
7112
+ }), /* @__PURE__ */ jsx("span", { children: tr("fluidgrids.runControl.archive.unreadable", "{{count}} events were archived, but they could not be read back. Allow s3:GetObject on the archive prefix to the archive role, or read the files in {{ref}} directly.", {
7113
+ count: archivedCount,
7114
+ ref
7115
+ }) })]
7116
+ }) : /* @__PURE__ */ jsx(RunHistoryView, {
7117
+ events: history.events,
7118
+ loading: history.loading,
7119
+ error: history.error,
7120
+ active: false,
7121
+ streaming: false,
7122
+ truncated: history.truncated,
7123
+ historyLength: history.historyLength,
7124
+ onRefresh: () => void history.refetch(),
7125
+ onViewChildRun,
7126
+ "data-testid": "archived-run-history"
7127
+ })
7128
+ ]
7129
+ });
7130
+ }
7131
+
6966
7132
  // src/modules/run-control/components/RunArchivedNotice.tsx
6967
7133
  /**
6968
7134
  * A run whose history was archived to the workspace's bucket and then purged
@@ -7895,6 +8061,12 @@ function ExecutionDetailPage() {
7895
8061
  }, [durableEnabled, execution]);
7896
8062
  const canSendSignal = canControlRuns && canSignalRun(signalTargets);
7897
8063
  const waitingOnSignal = !isDurableRun && signalTargets.targets.some((target) => !!target.nodeId);
8064
+ const heldByRule = useMemo(() => !isDurableRun && execution?.status === "WAITING" ? rulePausedNodes(execution.nodeStates) : [], [
8065
+ isDurableRun,
8066
+ execution?.status,
8067
+ execution?.nodeStates
8068
+ ]);
8069
+ const offerGenericResume = humanRequestsCurrent && !awaitingPerson && !isDurableRun && !waitingOnSignal && heldByRule.length === 0;
7898
8070
  const handleControl = async (action) => {
7899
8071
  if (!runId) return;
7900
8072
  const result = await controlExecution(action, runId);
@@ -8035,43 +8207,60 @@ function ExecutionDetailPage() {
8035
8207
  ]
8036
8208
  })]
8037
8209
  });
8038
- if (!execution) return /* @__PURE__ */ jsxs("div", {
8039
- className: "p-4 sm:p-6 bg-surface-canvas min-h-screen",
8040
- children: [/* @__PURE__ */ jsxs(Link, {
8041
- to: "../runs",
8042
- className: "text-text-link hover:text-text-linkHover hover:underline text-sm mb-4 inline-block",
8043
- children: [
8044
- "←",
8045
- " ",
8046
- tr("fluidgrids.executions.executionDetail.backToExecutions", "Back to Executions")
8047
- ]
8048
- }), /* @__PURE__ */ jsxs("div", {
8049
- className: "bg-surface border border-border-default rounded-lg p-6 text-center",
8050
- children: [
8051
- /* @__PURE__ */ jsx(Icon, {
8052
- icon: "mdi:file-find-outline",
8053
- className: "mx-auto text-text-secondary mb-4",
8054
- width: 48
8055
- }),
8056
- /* @__PURE__ */ jsx("h2", {
8057
- className: "text-lg font-medium text-text-primary mb-2",
8058
- children: tr("fluidgrids.executions.executionDetail.notFoundTitle", "Execution not found")
8059
- }),
8060
- /* @__PURE__ */ jsxs("p", {
8061
- className: "text-text-secondary",
8062
- children: [
8063
- tr("fluidgrids.executions.executionDetail.notFoundDescriptionPrefix", "The execution with ID"),
8064
- " ",
8065
- "\"",
8066
- runId,
8067
- "\"",
8068
- " ",
8069
- tr("fluidgrids.executions.executionDetail.notFoundDescriptionSuffix", "could not be found.")
8070
- ]
8071
- })
8072
- ]
8073
- })]
8074
- });
8210
+ if (!execution) {
8211
+ const notFound = /* @__PURE__ */ jsxs("div", {
8212
+ className: "p-4 sm:p-6 bg-surface-canvas min-h-screen",
8213
+ children: [/* @__PURE__ */ jsxs(Link, {
8214
+ to: "../runs",
8215
+ className: "text-text-link hover:text-text-linkHover hover:underline text-sm mb-4 inline-block",
8216
+ children: [
8217
+ "←",
8218
+ " ",
8219
+ tr("fluidgrids.executions.executionDetail.backToExecutions", "Back to Executions")
8220
+ ]
8221
+ }), /* @__PURE__ */ jsxs("div", {
8222
+ className: "bg-surface border border-border-default rounded-lg p-6 text-center",
8223
+ children: [
8224
+ /* @__PURE__ */ jsx(Icon, {
8225
+ icon: "mdi:file-find-outline",
8226
+ className: "mx-auto text-text-secondary mb-4",
8227
+ width: 48
8228
+ }),
8229
+ /* @__PURE__ */ jsx("h2", {
8230
+ className: "text-lg font-medium text-text-primary mb-2",
8231
+ children: tr("fluidgrids.executions.executionDetail.notFoundTitle", "Execution not found")
8232
+ }),
8233
+ /* @__PURE__ */ jsxs("p", {
8234
+ className: "text-text-secondary",
8235
+ children: [
8236
+ tr("fluidgrids.executions.executionDetail.notFoundDescriptionPrefix", "The execution with ID"),
8237
+ " ",
8238
+ "\"",
8239
+ runId,
8240
+ "\"",
8241
+ " ",
8242
+ tr("fluidgrids.executions.executionDetail.notFoundDescriptionSuffix", "could not be found.")
8243
+ ]
8244
+ })
8245
+ ]
8246
+ })]
8247
+ });
8248
+ return /* @__PURE__ */ jsx(ArchivedRunView, {
8249
+ runId: runId ?? "",
8250
+ enabled: phaseC.runArchival && !!runId,
8251
+ fallback: notFound,
8252
+ backLink: /* @__PURE__ */ jsxs(Link, {
8253
+ to: "../runs",
8254
+ className: "text-text-link hover:text-text-linkHover hover:underline text-sm inline-block",
8255
+ children: [
8256
+ "←",
8257
+ " ",
8258
+ tr("fluidgrids.executions.executionDetail.backToExecutions", "Back to Executions")
8259
+ ]
8260
+ }),
8261
+ onViewChildRun: handleViewChildRun
8262
+ });
8263
+ }
8075
8264
  const tabs = [
8076
8265
  {
8077
8266
  id: "timeline",
@@ -8584,7 +8773,7 @@ function ExecutionDetailPage() {
8584
8773
  }), tr("fluidgrids.executions.executionDetail.cancelButton", "Cancel")]
8585
8774
  })] }),
8586
8775
  canControlRuns && execution.status === "WAITING" && /* @__PURE__ */ jsxs(Fragment$1, { children: [
8587
- humanRequestsCurrent && !awaitingPerson && !isDurableRun && !waitingOnSignal && /* @__PURE__ */ jsxs(Button$1, {
8776
+ offerGenericResume && /* @__PURE__ */ jsxs(Button$1, {
8588
8777
  "data-agent": "confirm",
8589
8778
  variant: "outline",
8590
8779
  size: "sm",
@@ -8858,6 +9047,7 @@ function ExecutionDetailPage() {
8858
9047
  status: execution.status,
8859
9048
  context: execution.context
8860
9049
  }),
9050
+ /* @__PURE__ */ jsx(RulePausedBanner, { nodes: heldByRule }),
8861
9051
  /* @__PURE__ */ jsx(RunDataPrunedNotice, { dataPrunedAt: execution.dataPrunedAt }),
8862
9052
  /* @__PURE__ */ jsx(RunBudgetPanel, { budget: execution.budget }),
8863
9053
  /* @__PURE__ */ jsx(ChildRunsPanel, {
@@ -1,5 +1,5 @@
1
1
  "use client";
2
2
  import { t as ExecutionsListPage } from "./ExecutionsListPage-Ky3TAL9U.js";
3
- import { t as ExecutionDetailPage } from "./ExecutionDetailPage-BbvY2bcb.js";
3
+ import { t as ExecutionDetailPage } from "./ExecutionDetailPage-B-8s_Sqw.js";
4
4
 
5
5
  export { ExecutionDetailPage, ExecutionsListPage };
package/dist/index.js CHANGED
@@ -15,7 +15,7 @@ import { _ as WorkflowRunsCountDocument, b as DurableParityRunFieldsDocument, v
15
15
  import { c as RunEventAppendedDocument, d as WorkflowRunDeterminismStatusDocument, f as DurableRunFieldsDocument, l as WorkflowRunStackTraceDocument, m as SignalWorkflowRunDocument, p as TerminateWorkflowRunDocument, u as WorkflowRunHistoryDocument } from "./useRunHistory-Be-GggNA.js";
16
16
  import { a as getGraphQLEndpoint, c as setFluidGridsConfig, d as applyFluidGridsTheme, f as sanitizeThemeValue, m as themeToCssVariables, o as resetFluidGridsConfig, p as themeKey, r as getFluidGridsConfig, s as resetFluidGridsExecutionState, t as config, u as FLUIDGRIDS_THEME_TOKEN_MAP } from "./config-X97zrIvn.js";
17
17
  import { r as WorkflowBatchOperationUpdatedDocument, t as ExecutionsListPage } from "./ExecutionsListPage-Ky3TAL9U.js";
18
- import { a as AgentStepUpdatedDocument, c as AgentTraceDocument, i as ExplainRunDocument, o as WorkflowRunHierarchyDocument, r as RunHumanRequests, s as RunAiUsageDocument, t as ExecutionDetailPage } from "./ExecutionDetailPage-BbvY2bcb.js";
18
+ import { a as AgentStepUpdatedDocument, c as AgentTraceDocument, i as ExplainRunDocument, o as WorkflowRunHierarchyDocument, r as RunHumanRequests, s as RunAiUsageDocument, t as ExecutionDetailPage } from "./ExecutionDetailPage-B-8s_Sqw.js";
19
19
  import { i as FileDownloadUrlDocument, n as WorkflowCodeSourceDocument, r as BuildWorkflowCodeDocument, t as WorkflowEditLeaseStatusDocument } from "./WorkflowEditLeaseStatusDocument-Dp62med3.js";
20
20
  import { c as RunLogAppendedDocument, l as RunLogsDocument } from "./agent-form-D0uLvzx4.js";
21
21
  import { C as CreateWorkflowTestCaseFromRunDocument, D as AgentTokenDeltaDocument, E as CreateWorkflowTestCaseDocument, S as RunWorkflowTestsDocument, T as UpdateWorkflowTestCaseDocument, b as WorkflowTestRunDocument, w as DeleteWorkflowTestCaseDocument, x as WorkflowTestCasesDocument, y as WorkflowTestRunsDocument } from "./use-workflow-tests-Dkij09vJ.js";
@@ -5254,7 +5254,7 @@ const FluidgridsAvailableTagFieldsFragmentDoc = {
5254
5254
  const WorkflowsList$1 = lazy(() => import("./WorkflowsList-4VADoiz_.js").then((n) => n.n).then((m) => ({ default: m.WorkflowsList })));
5255
5255
  const WorkflowBuilder$2 = lazy(() => import("./WorkflowBuilder-DkzzbrNn.js").then((n) => n.n).then((m) => ({ default: m.WorkflowBuilder })));
5256
5256
  const ExecutionsListPage$1 = lazy(() => import("./ExecutionsListPage-Ky3TAL9U.js").then((n) => n.n).then((m) => ({ default: m.ExecutionsListPage })));
5257
- const ExecutionDetailPage$1 = lazy(() => import("./ExecutionDetailPage-BbvY2bcb.js").then((n) => n.n).then((m) => ({ default: m.ExecutionDetailPage })));
5257
+ const ExecutionDetailPage$1 = lazy(() => import("./ExecutionDetailPage-B-8s_Sqw.js").then((n) => n.n).then((m) => ({ default: m.ExecutionDetailPage })));
5258
5258
  const PageLoader = () => /* @__PURE__ */ jsx("div", {
5259
5259
  className: "flex items-center justify-center h-64",
5260
5260
  children: /* @__PURE__ */ jsx("div", { className: "animate-spin rounded-full h-8 w-8 border-b-2 border-primary" })
@@ -1,8 +1,8 @@
1
1
 
2
2
  import { n as WorkflowsList_d_exports } from "./WorkflowsList-CcNDQge5.js";
3
- import { Da as VariablesPage_d_exports, Pi as ApprovalInboxPage_d_exports, QRa as InsightsPage_d_exports, Wi as TaskQueuesPage_d_exports, ZRa as InsightsPageProps, bza as AiStudioPage_d_exports, di as DataTablesPage_d_exports, eza as DataSinkDashboardPage_d_exports, ra as RunnersPage_d_exports } from "./index-BY0V255h.js";
4
3
  import { a as WorkflowSearchRedirect_d_exports, o as WorkflowBuilder } from "./index-RWAuYE2j.js";
5
4
  import { i as TemplatePreview_d_exports, n as TemplatesPage_d_exports } from "./TemplatesPage-BG3H-6v6.js";
5
+ import { Da as VariablesPage_d_exports, Pi as ApprovalInboxPage_d_exports, QRa as InsightsPage_d_exports, Wi as TaskQueuesPage_d_exports, ZRa as InsightsPageProps, bza as AiStudioPage_d_exports, di as DataTablesPage_d_exports, eza as DataSinkDashboardPage_d_exports, ra as RunnersPage_d_exports } from "./index-BY0V255h.js";
6
6
  import { i as ExecutionsListPage_d_exports, n as ExecutionDetailPage_d_exports } from "./ExecutionDetailPage-DvQ667OE.js";
7
7
  import { n as HistoryPage_d_exports } from "./HistoryPage-BLoRpJ1R.js";
8
8
  import { n as NodesPage_d_exports } from "./NodesPage-DEbnz9iU.js";
@@ -60,7 +60,7 @@ const pages = createWorkflowPages({
60
60
  TemplatePreview: () => import("./TemplatePreview-DwdGa8bH.js").then((n) => n.n),
61
61
  AiStudioPage: () => import("./AiStudioPage-C2SBRqab.js").then((n) => n.n),
62
62
  ExecutionsListPage: () => import("./ExecutionsListPage-Ky3TAL9U.js").then((n) => n.n),
63
- ExecutionDetailPage: () => import("./ExecutionDetailPage-BbvY2bcb.js").then((n) => n.n),
63
+ ExecutionDetailPage: () => import("./ExecutionDetailPage-B-8s_Sqw.js").then((n) => n.n),
64
64
  HistoryPage: () => import("./HistoryPage-D4rkw4zu.js").then((n) => n.n),
65
65
  TemplatesPage: () => import("./TemplatesPage-DF5PK7CB.js").then((n) => n.n),
66
66
  NodesPage: () => import("./NodesPage-C3sh0aL9.js").then((n) => n.n),
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@burdenoff/fluidgrids-fe-sdk",
3
- "version": "2026.1114.4",
3
+ "version": "2026.1114.6",
4
4
  "description": "FluidGrids Workflow Builder SDK - Embeddable visual workflow automation",
5
5
  "type": "module",
6
6
  "imports": {