@burdenoff/fluidgrids-fe-sdk 2026.1102.3 → 2026.1103.2

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 (45) hide show
  1. package/dist/{ExecutionDetailPage-XHII23QR.js → ExecutionDetailPage-JRBUIU5J.js} +9 -9
  2. package/dist/{ExecutionsListPage-GTCSYSC6.js → ExecutionsListPage-RC342VCZ.js} +5 -5
  3. package/dist/{WorkflowBuilder-ZIXEU7DQ.js → WorkflowBuilder-TCS4JELN.js} +10 -10
  4. package/dist/{WorkflowsList-NYSQEZWU.js → WorkflowsList-6ES2EDGZ.js} +6 -6
  5. package/dist/{agentTools-PA62A53S.js → agentTools-4JT66UQB.js} +3 -3
  6. package/dist/{chunk-JCHE4V55.js → chunk-52OIBKPO.js} +1 -1
  7. package/dist/{chunk-QAXP5HON.js → chunk-6WPW42TX.js} +1 -1
  8. package/dist/chunk-742OIXMP.js +18 -0
  9. package/dist/{chunk-B2DNUVKW.js → chunk-BP6YPKNK.js} +4 -4
  10. package/dist/{chunk-DLKGWGRN.js → chunk-BVCMAGLJ.js} +1 -1
  11. package/dist/{chunk-OR7KZZ2D.js → chunk-EKB3EIIC.js} +1 -1
  12. package/dist/{chunk-UETHT3KG.js → chunk-G2FPOWN5.js} +1 -1
  13. package/dist/{chunk-A4XNCGWT.js → chunk-H2KIJEYM.js} +1 -1
  14. package/dist/{chunk-7SY2SL5Y.js → chunk-ILPQAQB5.js} +5 -5
  15. package/dist/{chunk-ZTJX5ONT.js → chunk-K6HD5GC7.js} +2 -2
  16. package/dist/{chunk-MY752OLT.js → chunk-LTINUSLK.js} +49 -208
  17. package/dist/{chunk-XNVYPEBO.js → chunk-LVTOWRAM.js} +2 -2
  18. package/dist/{chunk-7JLLH4YE.js → chunk-M23H4LSY.js} +3 -3
  19. package/dist/{chunk-OZCJHPMH.js → chunk-MY4HMUWU.js} +3 -3
  20. package/dist/{chunk-PBCBDSVA.js → chunk-N6XYVO7N.js} +1 -1
  21. package/dist/{chunk-3Y4266JL.js → chunk-OBWB73Y7.js} +1 -1
  22. package/dist/{chunk-EFOJEQDS.js → chunk-QXACKASD.js} +1 -1
  23. package/dist/{chunk-P6IRD5SA.js → chunk-RFOKJE3A.js} +8 -8
  24. package/dist/{chunk-YVOHCC7J.js → chunk-SHYDX2LO.js} +4 -4
  25. package/dist/{chunk-4FDMLKLL.js → chunk-SIVS3XSV.js} +1 -1
  26. package/dist/{chunk-W74MXVFX.js → chunk-SUIH376K.js} +1 -1
  27. package/dist/{chunk-CXNJKM4D.js → chunk-UH7JKPUF.js} +1 -1
  28. package/dist/{chunk-37BKVPO7.js → chunk-UMULDJCK.js} +5 -5
  29. package/dist/{chunk-BDBSRN2O.js → chunk-UW5GY6LQ.js} +9 -5
  30. package/dist/{chunk-A7QPQ6MO.js → chunk-VQZEGCRF.js} +1 -1
  31. package/dist/{chunk-6VODFT2Q.js → chunk-Y7BNGLRI.js} +4 -4
  32. package/dist/{chunk-TJ2PFY7I.js → chunk-Y7MQ3LYB.js} +1 -1
  33. package/dist/{chunk-23LYGZ27.js → chunk-YC76QFWZ.js} +353 -7
  34. package/dist/executions.js +10 -10
  35. package/dist/history.js +4 -4
  36. package/dist/index.js +38 -38
  37. package/dist/{node-detail-view-KET5DNEH.js → node-detail-view-CMQ7DUYM.js} +7 -7
  38. package/dist/observability.js +4 -4
  39. package/dist/{quick-config-panel-L6CTZQUG.js → quick-config-panel-NJ72QZPM.js} +4 -4
  40. package/dist/settings.js +5 -5
  41. package/dist/templates.js +9 -9
  42. package/dist/workflow-builder.js +11 -11
  43. package/dist/workflows-list.js +6 -6
  44. package/package.json +1 -1
  45. package/dist/chunk-OUYEMZT6.js +0 -185
@@ -3,17 +3,17 @@ import { templatePreview } from './chunk-B6CCE2RW.js';
3
3
  import { Input } from './chunk-IEVSFCFS.js';
4
4
  import { Dialog, DialogContent, DialogHeader, DialogTitle, DialogDescription, DialogFooter as DialogFooter$1 } from './chunk-YXMFRQYV.js';
5
5
  import { Badge as Badge$1, Button } from './chunk-BQXVT32O.js';
6
- import { LogsPanel } from './chunk-W74MXVFX.js';
7
- import { editStateFor, isFlowComplete, touchesSavedFields, watchLeavingLosesChanges, savedEverythingBeforeLeaving, leavingLosesChanges, useFlowValidator, departingSave, runPreparation, computeAttachPosition, firstInputHandleId, editingLeaseLocked, autosaveAllowedFor } from './chunk-OUYEMZT6.js';
8
- import { QuotaExhaustedDialog, useWorkflowCodeExport, orderedExportFiles, fileBaseName, downloadWorkflowCodeExport, isLosslessReport, sortFidelityItems, isLossyFidelityItem, lineOfNode } from './chunk-4FDMLKLL.js';
9
- import { emptyTestCaseDraft, EntityTagPicker, useWorkflowProposal, WorkflowProposalCard, useWorkflowTests, pinnedOutputsFromCanvas, enabledCaseIds, isTestRunOpen, MAX_TEST_CASES, draftFromTestCase, testRunSummaryText, testStatusLabel, TEST_STATUS_TONE_CLASS, testStatusTone, MAX_CASE_NAME, nextSortOrder, draftToInput } from './chunk-3Y4266JL.js';
6
+ import { LogsPanel } from './chunk-SUIH376K.js';
7
+ import { computeAttachPosition, firstInputHandleId } from './chunk-742OIXMP.js';
8
+ import { QuotaExhaustedDialog, useWorkflowCodeExport, orderedExportFiles, fileBaseName, downloadWorkflowCodeExport, isLosslessReport, sortFidelityItems, isLossyFidelityItem, lineOfNode } from './chunk-SIVS3XSV.js';
9
+ import { emptyTestCaseDraft, EntityTagPicker, useWorkflowProposal, WorkflowProposalCard, useWorkflowTests, pinnedOutputsFromCanvas, enabledCaseIds, isTestRunOpen, MAX_TEST_CASES, draftFromTestCase, testRunSummaryText, testStatusLabel, TEST_STATUS_TONE_CLASS, testStatusTone, MAX_CASE_NAME, nextSortOrder, draftToInput } from './chunk-OBWB73Y7.js';
10
10
  import { buildNodeDisplayMap } from './chunk-PC3CICOW.js';
11
11
  import { AiCreditBalanceSlot } from './chunk-Y53CVZVV.js';
12
- import { countLifecycle, VersionLifecycleBar, VersionDiffDialog } from './chunk-PBCBDSVA.js';
13
- import { useRestoreWorkflowVersion, useWorkflowVersions, useActivateWorkflow, useDeleteWorkflow, useDeactivateWorkflow } from './chunk-EFOJEQDS.js';
12
+ import { countLifecycle, VersionLifecycleBar, VersionDiffDialog } from './chunk-N6XYVO7N.js';
13
+ import { useRestoreWorkflowVersion, useWorkflowVersions, useActivateWorkflow, useDeleteWorkflow, useDeactivateWorkflow } from './chunk-QXACKASD.js';
14
14
  import { useRequestedProposal } from './chunk-GLYINMOR.js';
15
15
  import { FluidGridsDocsLink } from './chunk-4VJ3MDOV.js';
16
- import { leaseCallQueue, RUNS_QUOTA_NAME, useFlowStore, BILLING_PLANS_PATH, emitUpgradeClicked, FluidGridsContext, throwIfResultError, emitWorkflowCreated, emitTemplateUsed, describeOperationError, ensureNodeConfigsLoaded, NODE_CONFIGS, useEditLeaseStore, useEditLeaseLocked, registerWorkflowNodeTypes, emitNodeInstalled, useNodeExecution, usePaletteGates, onNodeTypesUpdate, NODE_TYPES, getNodeMetadata, useIsValidConnection, refetchStoreNodes, AVAILABLE_NODES, EDIT_SESSION_ID, useInsertNode, NODE_TYPE_DRAG_DATA_FORMAT, NODE_OPERATION_DRAG_DATA_FORMAT, useSaveStatusStore, useDurableFunctionNodesEnabled, CODE_WORKFLOW_NODE_TYPE, bannerOf, useSaveWorkflow, STICKY_NOTE_TYPE, filterPaletteNodes, useFluidGridsAnalytics, sessionBeforeReload, forgetSessionForReload, releasesOnClose, isLocked, workflowFingerprint, buildStickyNode, NODES_METADATA, NodeTypeIcon, shouldReleaseForIdle, tickAction, rememberSessionForReload, buildOperationSeed, useDurableParityEnabled, useConnections, ConnectionFormDialog, useWorkflowTestsEnabled, useFluidGridsFlag, FLUIDGRIDS_FLAGS, saveIndicatorOf, inAppLeaveTarget, isNodeConfigsInitialized, phaseAfterAcquire, rememberOwnStatusChange, getNodeDetail, isImageIcon, NODES, synchronizeOperationUpdate, NodePropertyPanel, loadDefinitionJson, canAutosave, isNodeTypeHiddenFromPalette, isTriggerOperation, canRenderOperationPanel, resolveOperationName, ConnectionSelector, savesInPlace, AUTOSAVE_RETRY_DELAYS_MS, AUTOSAVE_DEBOUNCE_MS, rememberRevision, phaseAfterTakeOver } from './chunk-23LYGZ27.js';
16
+ import { leaseCallQueue, RUNS_QUOTA_NAME, useFlowStore, BILLING_PLANS_PATH, emitUpgradeClicked, FluidGridsContext, throwIfResultError, emitWorkflowCreated, emitTemplateUsed, describeOperationError, ensureNodeConfigsLoaded, NODE_CONFIGS, useEditLeaseStore, useEditLeaseLocked, registerWorkflowNodeTypes, emitNodeInstalled, useNodeExecution, usePaletteGates, onNodeTypesUpdate, NODE_TYPES, getNodeMetadata, useIsValidConnection, refetchStoreNodes, AVAILABLE_NODES, EDIT_SESSION_ID, useInsertNode, NODE_TYPE_DRAG_DATA_FORMAT, NODE_OPERATION_DRAG_DATA_FORMAT, useSaveStatusStore, useManualSave, useDurableFunctionNodesEnabled, CODE_WORKFLOW_NODE_TYPE, bannerOf, editStateFor, useSaveWorkflow, STICKY_NOTE_TYPE, filterPaletteNodes, useFluidGridsAnalytics, useGuardedNavigate, sessionBeforeReload, forgetSessionForReload, releasesOnClose, touchesSavedFields, isLocked, watchLeavingLosesChanges, workflowFingerprint, savedEverythingBeforeLeaving, buildStickyNode, NODES_METADATA, NodeTypeIcon, shouldReleaseForIdle, tickAction, rememberSessionForReload, leavingLosesChanges, buildOperationSeed, useDurableParityEnabled, useConnections, ConnectionFormDialog, useWorkflowTestsEnabled, useFluidGridsFlag, FLUIDGRIDS_FLAGS, useFlowValidator, saveIndicatorOf, departingSave, inAppLeaveTarget, isNodeConfigsInitialized, phaseAfterAcquire, rememberOwnStatusChange, useRunGuard, getNodeDetail, isImageIcon, NODES, synchronizeOperationUpdate, NodePropertyPanel, loadDefinitionJson, canAutosave, isNodeTypeHiddenFromPalette, isTriggerOperation, canRenderOperationPanel, resolveOperationName, ConnectionSelector, AUTOSAVE_RETRY_DELAYS_MS, AUTOSAVE_DEBOUNCE_MS, editingLeaseLocked, autosaveAllowedFor, isFlowComplete, rememberRevision, phaseAfterTakeOver } from './chunk-YC76QFWZ.js';
17
17
  import { SdkPermissionButton, FLUIDGRIDS_PERMISSIONS, useFluidGridsPermission } from './chunk-ZUVFD5KV.js';
18
18
  import { cn } from './chunk-JL7CASN5.js';
19
19
  import { BuilderReadOnlyProvider, useBuilderReadOnly } from './chunk-OCJTTHTS.js';
@@ -2196,42 +2196,6 @@ function enrichDraftNodes(nodes, seed) {
2196
2196
  function canvasHasWork(nodes) {
2197
2197
  return nodes.length > 1;
2198
2198
  }
2199
- function useManualSave() {
2200
- const tr = useTr();
2201
- const { saveToBackend } = useSaveWorkflow();
2202
- return useCallback(async () => {
2203
- const { nodes, edges } = useFlowStore.getState().workflow;
2204
- if (!isFlowComplete(nodes, edges)) {
2205
- toast.error(
2206
- tr(
2207
- "fluidgrids.builder.saveFlowButton.invalidToastTitle",
2208
- "Flow is invalid"
2209
- ),
2210
- {
2211
- description: tr(
2212
- "fluidgrids.builder.saveFlowButton.invalidToastDescription",
2213
- "Please check if the flow is complete and has no lone nodes"
2214
- )
2215
- }
2216
- );
2217
- return false;
2218
- }
2219
- return saveToBackend();
2220
- }, [saveToBackend, tr]);
2221
- }
2222
- function useGuardedNavigate() {
2223
- const navigate = useNavigate();
2224
- return useCallback(
2225
- (to, options) => {
2226
- if (leavingLosesChanges()) {
2227
- useSaveStatusStore.getState().actions.requestLeave({ to, options });
2228
- return;
2229
- }
2230
- navigate(to, options);
2231
- },
2232
- [navigate]
2233
- );
2234
- }
2235
2199
  function useNodeList(nodes) {
2236
2200
  return useMemo(() => {
2237
2201
  return nodes.slice().sort((a, b) => {
@@ -3450,6 +3414,14 @@ function getStoreNodeAvailability(node, isInstalled, options = {}) {
3450
3414
  const isDraggable = available && userSelectableOperationCount(nodeType) <= 1;
3451
3415
  return { nodeType, isPrebuilt, isDraggable, isHidden: false };
3452
3416
  }
3417
+ function getStoreNodeIcon(listingIcon, nodeType) {
3418
+ if (listingIcon) return listingIcon;
3419
+ if (!nodeType) return null;
3420
+ const registered = AVAILABLE_NODES.find(
3421
+ (availableNode) => availableNode.type === nodeType
3422
+ );
3423
+ return registered?.icon || null;
3424
+ }
3453
3425
  function isStoreNodeHiddenFromPalette(node, durableFunctionsEnabled = false) {
3454
3426
  return isNodeTypeHiddenFromPalette(
3455
3427
  getStoreNodeType(node, false),
@@ -3474,6 +3446,7 @@ function StoreNodeListItem({
3474
3446
  onClick
3475
3447
  }) {
3476
3448
  const tr = useTr();
3449
+ const displayIcon = getStoreNodeIcon(icon, nodeType);
3477
3450
  const handleDragStart = useCallback(
3478
3451
  (e) => {
3479
3452
  if (!isDraggable || !nodeType) return;
@@ -3492,7 +3465,14 @@ function StoreNodeListItem({
3492
3465
  className: "w-full flex items-center gap-3 px-2 py-2.5 rounded-md hover:bg-muted/60 transition-colors text-left group",
3493
3466
  style: isDraggable ? { cursor: "grab" } : void 0,
3494
3467
  children: [
3495
- /* @__PURE__ */ jsx("div", { className: "relative size-9 shrink-0 rounded-lg bg-muted flex items-center justify-center overflow-hidden", children: icon ? isImageIcon(icon) ? /* @__PURE__ */ jsx("img", { src: icon, alt: name, className: "w-full h-full object-cover" }) : /* @__PURE__ */ jsx(Icon, { icon, className: "size-5 text-muted-foreground" }) : /* @__PURE__ */ jsx("span", { className: "text-sm font-bold text-muted-foreground", children: name.charAt(0).toUpperCase() }) }),
3468
+ /* @__PURE__ */ jsx("div", { className: "relative size-9 shrink-0 rounded-lg bg-muted flex items-center justify-center overflow-hidden", children: displayIcon ? isImageIcon(displayIcon) ? /* @__PURE__ */ jsx(
3469
+ "img",
3470
+ {
3471
+ src: displayIcon,
3472
+ alt: name,
3473
+ className: "w-full h-full object-cover"
3474
+ }
3475
+ ) : /* @__PURE__ */ jsx(Icon, { icon: displayIcon, className: "size-5 text-muted-foreground" }) : /* @__PURE__ */ jsx("span", { className: "text-sm font-bold text-muted-foreground", children: name.charAt(0).toUpperCase() }) }),
3496
3476
  /* @__PURE__ */ jsxs("div", { className: "flex-1 min-w-0", children: [
3497
3477
  /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-1.5 flex-wrap", children: [
3498
3478
  /* @__PURE__ */ jsx("span", { className: "text-sm font-medium text-foreground group-hover:text-primary transition-colors truncate", children: name }),
@@ -4599,6 +4579,7 @@ function StoreNodeDetail({ node, onBack }) {
4599
4579
  const { nodeType, isPrebuilt } = getStoreNodeAvailability(node, isInstalled, {
4600
4580
  durableFunctionsEnabled: paletteGates
4601
4581
  });
4582
+ const displayIcon = getStoreNodeIcon(node.icon, nodeType);
4602
4583
  const installation = installationsMap.get(node.id);
4603
4584
  const installedVersion = installation?.installedVersion;
4604
4585
  const installationId = installation?.installationId;
@@ -4823,17 +4804,17 @@ function StoreNodeDetail({ node, onBack }) {
4823
4804
  ) }),
4824
4805
  /* @__PURE__ */ jsxs("div", { className: "flex-1 overflow-y-auto px-3 pb-2", children: [
4825
4806
  /* @__PURE__ */ jsxs("div", { className: "flex flex-col items-center text-center py-4", children: [
4826
- /* @__PURE__ */ jsx("div", { className: "size-16 rounded-xl bg-muted flex items-center justify-center overflow-hidden mb-3", children: node.icon ? isImageIcon(node.icon) ? /* @__PURE__ */ jsx(
4807
+ /* @__PURE__ */ jsx("div", { className: "size-16 rounded-xl bg-muted flex items-center justify-center overflow-hidden mb-3", children: displayIcon ? isImageIcon(displayIcon) ? /* @__PURE__ */ jsx(
4827
4808
  "img",
4828
4809
  {
4829
- src: node.icon,
4810
+ src: displayIcon,
4830
4811
  alt: node.name,
4831
4812
  className: "w-full h-full object-cover"
4832
4813
  }
4833
4814
  ) : /* @__PURE__ */ jsx(
4834
4815
  Icon,
4835
4816
  {
4836
- icon: node.icon,
4817
+ icon: displayIcon,
4837
4818
  className: "size-8 text-muted-foreground"
4838
4819
  }
4839
4820
  ) : /* @__PURE__ */ jsx("span", { className: "text-2xl font-bold text-muted-foreground", children: node.name.charAt(0).toUpperCase() }) }),
@@ -7093,8 +7074,8 @@ var reducer = (state, action) => {
7093
7074
  if (toastId) {
7094
7075
  addToRemoveQueue(toastId);
7095
7076
  } else {
7096
- state.toasts.forEach((toast19) => {
7097
- addToRemoveQueue(toast19.id);
7077
+ state.toasts.forEach((toast18) => {
7078
+ addToRemoveQueue(toast18.id);
7098
7079
  });
7099
7080
  }
7100
7081
  return {
@@ -7128,7 +7109,7 @@ function dispatch(action) {
7128
7109
  listener(memoryState);
7129
7110
  });
7130
7111
  }
7131
- function toast5({ ...props }) {
7112
+ function toast4({ ...props }) {
7132
7113
  const id = genId();
7133
7114
  const update = (props2) => dispatch({
7134
7115
  type: actionTypes.UPDATE_TOAST,
@@ -7165,7 +7146,7 @@ function useToast() {
7165
7146
  }, [state]);
7166
7147
  return {
7167
7148
  ...state,
7168
- toast: toast5,
7149
+ toast: toast4,
7169
7150
  dismiss: (toastId) => dispatch({ type: actionTypes.DISMISS_TOAST, toastId })
7170
7151
  };
7171
7152
  }
@@ -8470,7 +8451,7 @@ function VisualMapperContent({
8470
8451
  mapping,
8471
8452
  onMappingChange
8472
8453
  }) {
8473
- const { toast: toast19 } = useToast();
8454
+ const { toast: toast18 } = useToast();
8474
8455
  const tr = useTr();
8475
8456
  const reactFlowWrapper = useRef(null);
8476
8457
  const [selectedSourceNode, setSelectedSourceNode] = useState(null);
@@ -8490,7 +8471,7 @@ function VisualMapperContent({
8490
8471
  targetOperation
8491
8472
  );
8492
8473
  if (generatedNodes.length === 0) {
8493
- toast19({
8474
+ toast18({
8494
8475
  title: tr(
8495
8476
  "fluidgrids.builder.visualMapper.noFieldsFoundTitle",
8496
8477
  "No fields found"
@@ -8516,7 +8497,7 @@ function VisualMapperContent({
8516
8497
  targetNode,
8517
8498
  targetOperation,
8518
8499
  setNodes,
8519
- toast19,
8500
+ toast18,
8520
8501
  tr
8521
8502
  ]);
8522
8503
  useEffect(() => {
@@ -8623,7 +8604,7 @@ function VisualMapperContent({
8623
8604
  }
8624
8605
  onMappingChange(updatedMapping);
8625
8606
  if (isCompatible) {
8626
- toast19({
8607
+ toast18({
8627
8608
  title: tr(
8628
8609
  "fluidgrids.builder.visualMapper.mappingCreatedTitle",
8629
8610
  "Mapping created"
@@ -8631,7 +8612,7 @@ function VisualMapperContent({
8631
8612
  description: `Mapped ${sourcePath} (${sourceType}) to ${targetPath} (${targetType})`
8632
8613
  });
8633
8614
  } else {
8634
- toast19({
8615
+ toast18({
8635
8616
  title: tr(
8636
8617
  "fluidgrids.builder.visualMapper.typeMismatchTitle",
8637
8618
  "Type mismatch warning"
@@ -8641,7 +8622,7 @@ function VisualMapperContent({
8641
8622
  });
8642
8623
  }
8643
8624
  } else {
8644
- toast19({
8625
+ toast18({
8645
8626
  title: tr(
8646
8627
  "fluidgrids.builder.visualMapper.invalidMappingTitle",
8647
8628
  "Invalid mapping"
@@ -8654,7 +8635,7 @@ function VisualMapperContent({
8654
8635
  });
8655
8636
  }
8656
8637
  },
8657
- [nodes, mapping, onMappingChange, toast19, tr, setEdges]
8638
+ [nodes, mapping, onMappingChange, toast18, tr, setEdges]
8658
8639
  );
8659
8640
  const onEdgeDelete = useCallback(
8660
8641
  (edge) => {
@@ -8711,7 +8692,7 @@ function VisualMapperContent({
8711
8692
  const handleSaveMappingDialog = (expression, targetFieldName) => {
8712
8693
  const targetPath = targetFieldName || selectedTargetNode?.data?.path;
8713
8694
  if (!targetPath) {
8714
- toast19({
8695
+ toast18({
8715
8696
  title: tr(
8716
8697
  "fluidgrids.builder.visualMapper.noTargetFieldTitle",
8717
8698
  "No target field specified"
@@ -8743,7 +8724,7 @@ function VisualMapperContent({
8743
8724
  }
8744
8725
  onMappingChange(updatedMapping);
8745
8726
  const mappingType = detectMappingType(expression);
8746
- toast19({
8727
+ toast18({
8747
8728
  title: `${mappingType.charAt(0).toUpperCase() + mappingType.slice(1)} mapping created`,
8748
8729
  description: `${tr("fluidgrids.builder.visualMapper.appliedMappingTo", "Applied mapping to")} ${targetPath}`
8749
8730
  });
@@ -9042,7 +9023,7 @@ function MappingEditor({
9042
9023
  setEdges,
9043
9024
  edgeId
9044
9025
  }) {
9045
- const { toast: toast19 } = useToast();
9026
+ const { toast: toast18 } = useToast();
9046
9027
  const tr = useTr();
9047
9028
  const [mappingJson, setMappingJson] = useState({});
9048
9029
  const [jsonDataString, setJsonDataString] = useState(
@@ -9166,7 +9147,7 @@ function MappingEditor({
9166
9147
  const handleSaveMapping = () => {
9167
9148
  try {
9168
9149
  checkJsonValidity();
9169
- toast19({
9150
+ toast18({
9170
9151
  title: tr(
9171
9152
  "fluidgrids.builder.mappingEditor.mappingSavedTitle",
9172
9153
  "Mapping saved"
@@ -9177,7 +9158,7 @@ function MappingEditor({
9177
9158
  )
9178
9159
  });
9179
9160
  } catch (error) {
9180
- toast19({
9161
+ toast18({
9181
9162
  title: tr(
9182
9163
  "fluidgrids.builder.mappingEditor.errorSavingTitle",
9183
9164
  "Error saving mapping"
@@ -9196,7 +9177,7 @@ function MappingEditor({
9196
9177
  const parsedData = checkJsonValidity();
9197
9178
  const result = await applyMapping(parsedData, sampleInput);
9198
9179
  setPreviewOutput(result);
9199
- toast19({
9180
+ toast18({
9200
9181
  title: tr(
9201
9182
  "fluidgrids.builder.mappingEditor.mappingTestedTitle",
9202
9183
  "Mapping tested"
@@ -9208,7 +9189,7 @@ function MappingEditor({
9208
9189
  });
9209
9190
  } catch (error) {
9210
9191
  console.error("Test mapping error:", error);
9211
- toast19({
9192
+ toast18({
9212
9193
  title: tr(
9213
9194
  "fluidgrids.builder.mappingEditor.mappingTestFailedTitle",
9214
9195
  "Mapping test failed"
@@ -15242,146 +15223,6 @@ function TriggerDataDialog({
15242
15223
  ] })
15243
15224
  ] }) });
15244
15225
  }
15245
- function useRunGuard(startRun) {
15246
- const { saveToBackend } = useSaveWorkflow();
15247
- const [confirmOpen, setConfirmOpen] = useState(false);
15248
- const [preparing, setPreparing] = useState(false);
15249
- const requestRun = useCallback(async () => {
15250
- const preparation = runPreparation();
15251
- if (preparation === "run") {
15252
- startRun();
15253
- return;
15254
- }
15255
- if (preparation === "save-first") {
15256
- setPreparing(true);
15257
- let saved = false;
15258
- try {
15259
- saved = await saveToBackend({ silent: true }) && savedEverythingBeforeLeaving();
15260
- } finally {
15261
- setPreparing(false);
15262
- }
15263
- if (saved) {
15264
- startRun();
15265
- return;
15266
- }
15267
- }
15268
- setConfirmOpen(true);
15269
- }, [saveToBackend, startRun]);
15270
- const dialog = /* @__PURE__ */ jsx(
15271
- UnsavedRunDialog,
15272
- {
15273
- open: confirmOpen,
15274
- onOpenChange: setConfirmOpen,
15275
- onRunSaved: () => {
15276
- setConfirmOpen(false);
15277
- startRun();
15278
- },
15279
- onSavedAndRunnable: () => {
15280
- setConfirmOpen(false);
15281
- startRun();
15282
- }
15283
- }
15284
- );
15285
- return { requestRun, preparing, dialog };
15286
- }
15287
- function UnsavedRunDialog({
15288
- open,
15289
- onOpenChange,
15290
- onRunSaved,
15291
- onSavedAndRunnable
15292
- }) {
15293
- const tr = useTr();
15294
- const manualSave = useManualSave();
15295
- const [version, dbId, status, codeBuildId] = useFlowStore(
15296
- useShallow((s) => [
15297
- s.workflow.version,
15298
- s.workflow.dbId,
15299
- s.workflow.status,
15300
- s.workflow.codeBuildId
15301
- ])
15302
- );
15303
- const [saving, setSaving] = useState(false);
15304
- const hasSavedVersion = !!dbId;
15305
- const runsAfterSave = !hasSavedVersion || savesInPlace({ dbId, status, codeBuildId });
15306
- const save = useCallback(async () => {
15307
- setSaving(true);
15308
- try {
15309
- const saved = await manualSave();
15310
- if (!saved) return;
15311
- if (!runsAfterSave) {
15312
- onOpenChange(false);
15313
- return;
15314
- }
15315
- if (savedEverythingBeforeLeaving()) onSavedAndRunnable();
15316
- } finally {
15317
- setSaving(false);
15318
- }
15319
- }, [runsAfterSave, manualSave, onOpenChange, onSavedAndRunnable]);
15320
- return /* @__PURE__ */ jsx(
15321
- AlertDialog,
15322
- {
15323
- open,
15324
- onOpenChange: (next) => {
15325
- if (!next && saving) return;
15326
- onOpenChange(next);
15327
- },
15328
- children: /* @__PURE__ */ jsxs(AlertDialogContent, { "data-testid": "fluidgrids-unsaved-run-dialog", children: [
15329
- /* @__PURE__ */ jsxs(AlertDialogHeader, { children: [
15330
- /* @__PURE__ */ jsx(AlertDialogTitle, { children: tr(
15331
- "fluidgrids.builder.runGuard.title",
15332
- "Run without your unsaved changes?"
15333
- ) }),
15334
- /* @__PURE__ */ jsxs(AlertDialogDescription, { children: [
15335
- hasSavedVersion ? tr(
15336
- "fluidgrids.builder.runGuard.description",
15337
- "This workflow has changes that are not saved. A run uses the saved version {{version}}, without them.",
15338
- { version }
15339
- ) : tr(
15340
- "fluidgrids.builder.runGuard.descriptionNotSaved",
15341
- "This workflow has not been saved yet. Save it before you run it."
15342
- ),
15343
- " ",
15344
- runsAfterSave ? null : tr(
15345
- "fluidgrids.builder.runGuard.newVersionHint",
15346
- "Saving keeps your changes as a new version and opens it; run that version."
15347
- )
15348
- ] })
15349
- ] }),
15350
- /* @__PURE__ */ jsxs(AlertDialogFooter, { children: [
15351
- /* @__PURE__ */ jsx(AlertDialogCancel, { disabled: saving, children: tr("fluidgrids.builder.runGuard.cancelButton", "Cancel") }),
15352
- hasSavedVersion && /* @__PURE__ */ jsx(
15353
- Button$2,
15354
- {
15355
- "data-agent": "confirm",
15356
- variant: "outline",
15357
- onClick: onRunSaved,
15358
- disabled: saving,
15359
- children: tr(
15360
- "fluidgrids.builder.runGuard.runSavedButton",
15361
- "Run saved version"
15362
- )
15363
- }
15364
- ),
15365
- /* @__PURE__ */ jsx(
15366
- Button$2,
15367
- {
15368
- "data-agent": "confirm",
15369
- onClick: () => void save(),
15370
- disabled: saving,
15371
- children: saving ? tr("fluidgrids.builder.runGuard.savingButton", "Saving\u2026") : runsAfterSave ? tr(
15372
- "fluidgrids.builder.runGuard.saveAndRunButton",
15373
- "Save and run"
15374
- ) : tr(
15375
- "fluidgrids.builder.runGuard.saveAsNewVersionButton",
15376
- "Save as new version"
15377
- )
15378
- }
15379
- )
15380
- ] })
15381
- ] })
15382
- }
15383
- );
15384
- }
15385
15226
  var ExecuteWorkflowButton = ({
15386
15227
  className
15387
15228
  }) => {
@@ -21338,12 +21179,12 @@ function EditLeaseBanner() {
21338
21179
  );
21339
21180
  }
21340
21181
  var LazyNodeDetailView = lazy(
21341
- () => import('./node-detail-view-KET5DNEH.js').then((m) => ({
21182
+ () => import('./node-detail-view-CMQ7DUYM.js').then((m) => ({
21342
21183
  default: m.NodeDetailView
21343
21184
  }))
21344
21185
  );
21345
21186
  var LazyQuickConfigPanel = lazy(
21346
- () => import('./quick-config-panel-L6CTZQUG.js').then((m) => ({
21187
+ () => import('./quick-config-panel-NJ72QZPM.js').then((m) => ({
21347
21188
  default: m.QuickConfigPanel
21348
21189
  }))
21349
21190
  );
@@ -21405,7 +21246,7 @@ var FlowBuilder = ({ readOnly = false }) => {
21405
21246
  );
21406
21247
  useEffect(() => {
21407
21248
  let cancelled = false;
21408
- void import('./agentTools-PA62A53S.js').then(({ createBuilderAgentTools }) => {
21249
+ void import('./agentTools-4JT66UQB.js').then(({ createBuilderAgentTools }) => {
21409
21250
  if (cancelled) return;
21410
21251
  setAgentTools(
21411
21252
  createBuilderAgentTools({
@@ -1,6 +1,6 @@
1
- import { versionsOfWorkflow, VersionDiffDialog } from './chunk-PBCBDSVA.js';
1
+ import { versionsOfWorkflow, VersionDiffDialog } from './chunk-N6XYVO7N.js';
2
2
  import { historyControls } from './chunk-FNZZ5JJL.js';
3
- import { useWorkflowDefinitions, useRestoreWorkflowVersion } from './chunk-EFOJEQDS.js';
3
+ import { useWorkflowDefinitions, useRestoreWorkflowVersion } from './chunk-QXACKASD.js';
4
4
  import { useFluidGridsPageControls } from './chunk-PJAWNFJV.js';
5
5
  import { FluidGridsDocsLink } from './chunk-4VJ3MDOV.js';
6
6
  import { getFluidGridsConfig } from './chunk-6AMNEX2Y.js';
@@ -1,7 +1,7 @@
1
- import { FailureTriagePanel } from './chunk-A4XNCGWT.js';
2
- import { useDataSinks, useDataSinkData, useInsightsData, useRunReplayActions } from './chunk-CXNJKM4D.js';
1
+ import { FailureTriagePanel } from './chunk-H2KIJEYM.js';
2
+ import { useDataSinks, useDataSinkData, useInsightsData, useRunReplayActions } from './chunk-UH7JKPUF.js';
3
3
  import { proposalCanvasPath } from './chunk-GLYINMOR.js';
4
- import { useContinuousOptimisationEnabled, throwIfResultError } from './chunk-23LYGZ27.js';
4
+ import { useContinuousOptimisationEnabled, throwIfResultError } from './chunk-YC76QFWZ.js';
5
5
  import { useFluidGridsPermission, FLUIDGRIDS_PERMISSIONS, SdkPermissionButton } from './chunk-ZUVFD5KV.js';
6
6
  import { SetContinuousOptimisationEnabledDocument, FgRunOptimisationScanDocument, ProposeOptimisationDocument, WorkflowProposalDocument, DismissOptimisationSuggestionDocument, SnoozeOptimisationSuggestionDocument, OptimisationSuggestionsDocument, ContinuousOptimisationSettingsDocument } from './chunk-JTQFBZTV.js';
7
7
  import { useTr } from './chunk-UULVIT25.js';
@@ -1,8 +1,8 @@
1
- import { Card, FluidGridsMark } from './chunk-MY752OLT.js';
1
+ import { Card, FluidGridsMark } from './chunk-LTINUSLK.js';
2
2
  import { Input } from './chunk-IEVSFCFS.js';
3
3
  import { Button } from './chunk-BQXVT32O.js';
4
- import { useWorkflowDefinition } from './chunk-EFOJEQDS.js';
5
- import { FluidGridsProvider, useFlowStore } from './chunk-23LYGZ27.js';
4
+ import { useWorkflowDefinition } from './chunk-QXACKASD.js';
5
+ import { FluidGridsProvider, useFlowStore } from './chunk-YC76QFWZ.js';
6
6
  import { cn } from './chunk-JL7CASN5.js';
7
7
  import { useTr } from './chunk-UULVIT25.js';
8
8
  import { useState, useRef, useEffect, useCallback } from 'react';
@@ -1,4 +1,4 @@
1
- import { mergeStickyNotes, describeOperationError, throwIfResultError } from './chunk-23LYGZ27.js';
1
+ import { mergeStickyNotes, describeOperationError, throwIfResultError } from './chunk-YC76QFWZ.js';
2
2
  import { WorkflowDefinitionDocument, WorkflowVersionDiffDocument } from './chunk-JTQFBZTV.js';
3
3
  import { useTr } from './chunk-UULVIT25.js';
4
4
  import { getFluidGridsClient } from './chunk-NTWG3CJX.js';
@@ -2,7 +2,7 @@ import { operatorSpec, normaliseAssertRules, describeAssertRuleProblem } from '.
2
2
  import { useEntityTags, useTagEntity, useUntagEntity } from './chunk-PC3CICOW.js';
3
3
  import { notifyFluidGridsAiCreditsUpdated } from './chunk-Y53CVZVV.js';
4
4
  import { ErrorType } from './chunk-AOLY5INN.js';
5
- import { throwIfResultError, isForbiddenError } from './chunk-23LYGZ27.js';
5
+ import { throwIfResultError, isForbiddenError } from './chunk-YC76QFWZ.js';
6
6
  import { getFluidGridsConfig } from './chunk-6AMNEX2Y.js';
7
7
  import { WorkflowProposalDocument, ProposeRunFixDocument, ProposeWorkflowChangeDocument, ApplyWorkflowProposalDocument, RejectWorkflowProposalDocument, CancelWorkflowProposalDocument, WorkflowTestCasesDocument, WorkflowTestRunsDocument, WorkflowTestRunDocument, CreateWorkflowTestCaseDocument, UpdateWorkflowTestCaseDocument, DeleteWorkflowTestCaseDocument, RunWorkflowTestsDocument, CreateWorkflowTestCaseFromRunDocument } from './chunk-JTQFBZTV.js';
8
8
  import { useTr } from './chunk-UULVIT25.js';
@@ -1,4 +1,4 @@
1
- import { useFluidGridsAnalytics, throwIfResultError, emitWorkflowCreated, emitRunStarted, runTriggerFromMode, openRunQuotaUpgradePrompt, emitWorkflowPublished } from './chunk-23LYGZ27.js';
1
+ import { useFluidGridsAnalytics, throwIfResultError, emitWorkflowCreated, emitRunStarted, runTriggerFromMode, openRunQuotaUpgradePrompt, emitWorkflowPublished } from './chunk-YC76QFWZ.js';
2
2
  import { getFluidGridsConfig } from './chunk-6AMNEX2Y.js';
3
3
  import { WorkflowDefinitionsDocument, WorkflowDefinitionDocument, WorkflowVersionsDocument, CreateWorkflowDefinitionDocument, ImportWorkflowDocument, UpdateWorkflowDefinitionDocument, CreateWorkflowVersionDocument, DeleteWorkflowDefinitionDocument, DuplicateWorkflowDocument, RestoreWorkflowVersionDocument, TriggerWorkflowDocument, WorkflowRunsDocument, WorkflowRunDocument, DashboardSummaryDocument, ActivateWorkflowDefinitionDocument, DeactivateWorkflowDefinitionDocument } from './chunk-JTQFBZTV.js';
4
4
  import { useTr } from './chunk-UULVIT25.js';
@@ -1,13 +1,13 @@
1
- import { useDurableRunFields, useRunHistory, useDeterminismStatus, useRunStackTrace, RunHistoryView, SignalRunDialog, terminateDurableRun } from './chunk-UETHT3KG.js';
2
- import { useDurableParityRunFields, useRunMetadata, useRunPending, ExecutionStatusBadge, NodeTimeline, RunLogViewer, setRunVersioningOverride } from './chunk-ZTJX5ONT.js';
3
- import { useExecution, useExecutionActions, useAutoRefresh, runChainLinks, shortRunId, callbackTone, parseMetadataDefinition, overrideRequestOf } from './chunk-QAXP5HON.js';
4
- import { fetchRunFailureClusters, OPEN_STATUSES, dismissRunFailureCluster, BUCKET_LABELS } from './chunk-A4XNCGWT.js';
5
- import { useRunPolicyDecisions, RunPolicyDecisions } from './chunk-DLKGWGRN.js';
6
- import { EntityTagPicker, canSaveRunAsTestCase, useWorkflowProposal, WorkflowProposalCard, MAX_CASE_NAME, saveRunAsTestCase } from './chunk-3Y4266JL.js';
1
+ import { useDurableRunFields, useRunHistory, useDeterminismStatus, useRunStackTrace, RunHistoryView, SignalRunDialog, terminateDurableRun } from './chunk-G2FPOWN5.js';
2
+ import { useDurableParityRunFields, useRunMetadata, useRunPending, ExecutionStatusBadge, NodeTimeline, RunLogViewer, setRunVersioningOverride } from './chunk-K6HD5GC7.js';
3
+ import { useExecution, useExecutionActions, useAutoRefresh, runChainLinks, shortRunId, callbackTone, parseMetadataDefinition, overrideRequestOf } from './chunk-6WPW42TX.js';
4
+ import { fetchRunFailureClusters, OPEN_STATUSES, dismissRunFailureCluster, BUCKET_LABELS } from './chunk-H2KIJEYM.js';
5
+ import { useRunPolicyDecisions, RunPolicyDecisions } from './chunk-BVCMAGLJ.js';
6
+ import { EntityTagPicker, canSaveRunAsTestCase, useWorkflowProposal, WorkflowProposalCard, MAX_CASE_NAME, saveRunAsTestCase } from './chunk-OBWB73Y7.js';
7
7
  import { buildNodeDisplayMap, formatRunVersion } from './chunk-PC3CICOW.js';
8
8
  import { AiCreditBalanceSlot } from './chunk-Y53CVZVV.js';
9
- import { useWorkflowVersions } from './chunk-EFOJEQDS.js';
10
- import { throwIfResultError, useDurableFunctionNodesEnabled, useDurableParityEnabled, runSignalTargets, canSignalRun, useWorkflowTestsEnabled, describeOperationError } from './chunk-23LYGZ27.js';
9
+ import { useWorkflowVersions } from './chunk-QXACKASD.js';
10
+ import { throwIfResultError, useDurableFunctionNodesEnabled, useDurableParityEnabled, runSignalTargets, canSignalRun, useWorkflowTestsEnabled, describeOperationError } from './chunk-YC76QFWZ.js';
11
11
  import { useFluidGridsPermission, FLUIDGRIDS_PERMISSIONS, SdkPermissionButton } from './chunk-ZUVFD5KV.js';
12
12
  import { getFluidGridsConfig } from './chunk-6AMNEX2Y.js';
13
13
  import { RunLogsDocument, RunLogAppendedDocument, ExplainRunDocument } from './chunk-JTQFBZTV.js';
@@ -1,10 +1,10 @@
1
- import { useImportWorkflowTemplate, FlowBuilderPage, useWorkflowTemplates, TEMPLATE_STORE_CATEGORIES, TemplateCard, useTemplateSubmissions, usePublishToStore } from './chunk-MY752OLT.js';
2
- import { QuotaExhaustedDialog } from './chunk-4FDMLKLL.js';
1
+ import { useImportWorkflowTemplate, FlowBuilderPage, useWorkflowTemplates, TEMPLATE_STORE_CATEGORIES, TemplateCard, useTemplateSubmissions, usePublishToStore } from './chunk-LTINUSLK.js';
2
+ import { QuotaExhaustedDialog } from './chunk-SIVS3XSV.js';
3
3
  import { templatesControls } from './chunk-FNZZ5JJL.js';
4
- import { useWorkflowDefinitions, useDuplicateWorkflow, useLazyWorkflowDefinition } from './chunk-EFOJEQDS.js';
4
+ import { useWorkflowDefinitions, useDuplicateWorkflow, useLazyWorkflowDefinition } from './chunk-QXACKASD.js';
5
5
  import { useFluidGridsPageControls } from './chunk-PJAWNFJV.js';
6
6
  import { FluidGridsDocsLink } from './chunk-4VJ3MDOV.js';
7
- import { BILLING_PLANS_PATH, useFluidGridsAnalytics, emitTemplateUsed, isQuotaExhaustedFailure } from './chunk-23LYGZ27.js';
7
+ import { BILLING_PLANS_PATH, useFluidGridsAnalytics, emitTemplateUsed, isQuotaExhaustedFailure } from './chunk-YC76QFWZ.js';
8
8
  import { SdkPermissionButton, FLUIDGRIDS_PERMISSIONS } from './chunk-ZUVFD5KV.js';
9
9
  import { useTr } from './chunk-UULVIT25.js';
10
10
  import { useState, useEffect, useCallback, useMemo } from 'react';
@@ -1,4 +1,4 @@
1
- import { describeOperationError, useFluidGridsAnalytics, emitWorkflowLimitHit, emitUpgradeClicked, WORKFLOWS_QUOTA_NAME, throwIfResultError } from './chunk-23LYGZ27.js';
1
+ import { describeOperationError, useFluidGridsAnalytics, emitWorkflowLimitHit, emitUpgradeClicked, WORKFLOWS_QUOTA_NAME, throwIfResultError } from './chunk-YC76QFWZ.js';
2
2
  import { ExportWorkflowCodeDocument } from './chunk-JTQFBZTV.js';
3
3
  import { useTr } from './chunk-UULVIT25.js';
4
4
  import { getFluidGridsClient } from './chunk-NTWG3CJX.js';
@@ -1,4 +1,4 @@
1
- import { useFlowStore } from './chunk-23LYGZ27.js';
1
+ import { useFlowStore } from './chunk-YC76QFWZ.js';
2
2
  import { useTr } from './chunk-UULVIT25.js';
3
3
  import { useState, useRef, useCallback, useEffect } from 'react';
4
4
  import { cn } from '@burdenoff/fe-libs/utils';
@@ -1,5 +1,5 @@
1
1
  import { LOG_STREAM_DESTINATIONS, CREATE_LOG_STREAM_DESTINATION, UPDATE_LOG_STREAM_DESTINATION, DELETE_LOG_STREAM_DESTINATION, TEST_LOG_STREAM_DESTINATION, REPLAY_WORKFLOW_RUN, RETRY_WORKFLOW_RUNS, OBSERVABILITY_DASHBOARD_SUMMARY, OBSERVABILITY_FAILED_RUNS, OBSERVABILITY_DATA_SINKS, OBSERVABILITY_DATA_SINK_DATA } from './chunk-5ERAJC2I.js';
2
- import { throwIfResultError, describeOperationError, useFluidGridsAnalytics, emitRunStarted, openRunQuotaUpgradePrompt, useFluidGridsFlag, FLUIDGRIDS_FLAGS } from './chunk-23LYGZ27.js';
2
+ import { throwIfResultError, describeOperationError, useFluidGridsAnalytics, emitRunStarted, openRunQuotaUpgradePrompt, useFluidGridsFlag, FLUIDGRIDS_FLAGS } from './chunk-YC76QFWZ.js';
3
3
  import { useTr } from './chunk-UULVIT25.js';
4
4
  import { getFluidGridsClient } from './chunk-NTWG3CJX.js';
5
5
  import { useCallback, useState, useMemo, useEffect } from 'react';
@@ -1,9 +1,9 @@
1
- import { isGuidedTourIntent, pickGuidedTour, withoutGuidedTourIntent, isCreateIntent, CreateWorkflowRefusalDialog, decideMissingWorkflow } from './chunk-JCHE4V55.js';
1
+ import { isGuidedTourIntent, pickGuidedTour, withoutGuidedTourIntent, isCreateIntent, CreateWorkflowRefusalDialog, decideMissingWorkflow } from './chunk-52OIBKPO.js';
2
2
  import { registerLiveCanvasHandler } from './chunk-PIKYQE7P.js';
3
- import { useWorkflowReloadStore, releaseLeaseKeptForReload, useInstalledNodes, buildNodeCheck, FlowBuilderPage, buildRequiredNodeTypes } from './chunk-MY752OLT.js';
4
- import { canvasFromDefinition } from './chunk-PBCBDSVA.js';
5
- import { useLazyWorkflowDefinition, useCreateWorkflow } from './chunk-EFOJEQDS.js';
6
- import { useFlowStore, refetchStoreNodes, BILLING_PLANS_PATH, codeBuildIdOf, mergeStickyNotes, rememberRevision, blankWorkflowCreateInput, classifyCreateRefusal, useSaveStatusStore, workflowFingerprint, registerWorkflowNodeTypes, throwIfResultError } from './chunk-23LYGZ27.js';
3
+ import { useWorkflowReloadStore, releaseLeaseKeptForReload, useInstalledNodes, buildNodeCheck, FlowBuilderPage, buildRequiredNodeTypes } from './chunk-LTINUSLK.js';
4
+ import { canvasFromDefinition } from './chunk-N6XYVO7N.js';
5
+ import { useLazyWorkflowDefinition, useCreateWorkflow } from './chunk-QXACKASD.js';
6
+ import { useFlowStore, refetchStoreNodes, BILLING_PLANS_PATH, codeBuildIdOf, mergeStickyNotes, rememberRevision, blankWorkflowCreateInput, classifyCreateRefusal, useSaveStatusStore, workflowFingerprint, registerWorkflowNodeTypes, throwIfResultError } from './chunk-YC76QFWZ.js';
7
7
  import { getFluidGridsConfig } from './chunk-6AMNEX2Y.js';
8
8
  import { WorkflowDefinitionDocument } from './chunk-JTQFBZTV.js';
9
9
  import { useTr } from './chunk-UULVIT25.js';
@@ -1,9 +1,9 @@
1
1
  import { CodeEditorField, normalizeCodeLanguage } from './chunk-AASHQI77.js';
2
- import { asRecord, ConditionTreeBuilder, SwitchRulesEditor, casesFromRules, isStringOptionList, optionText, coerceNumber, paramsFromOperation, resolveLoadOptionsSpec, optionListValues, parseMappingValue, optionListText } from './chunk-TJ2PFY7I.js';
2
+ import { asRecord, ConditionTreeBuilder, SwitchRulesEditor, casesFromRules, isStringOptionList, optionText, coerceNumber, paramsFromOperation, resolveLoadOptionsSpec, optionListValues, parseMappingValue, optionListText } from './chunk-Y7MQ3LYB.js';
3
3
  import { Popover, PopoverTrigger, PopoverContent } from './chunk-GTEBQQ7J.js';
4
- import { isAgentNodeType, AgentDefinitionSelectField } from './chunk-A7QPQ6MO.js';
4
+ import { isAgentNodeType, AgentDefinitionSelectField } from './chunk-VQZEGCRF.js';
5
5
  import { readAssertRulesSetting, rowsFromRules, normaliseAssertRules, ruleFromRow, describeAssertRuleProblem, operatorSpec, ASSERT_OPERATORS, emptyAssertRuleRow } from './chunk-JDLQ6QIB.js';
6
- import { useFlowStore, isParamVisible, ConnectionSelector, structuredParameterType, FluidGridsContext, ExpressionEditor, formatParameterValue, parseParameterValue, useFluidGridsAnalytics, throwIfResultError, openRunQuotaUpgradePrompt, describeOperationError } from './chunk-23LYGZ27.js';
6
+ import { useFlowStore, isParamVisible, ConnectionSelector, structuredParameterType, useRunGuard, FluidGridsContext, ExpressionEditor, formatParameterValue, parseParameterValue, useFluidGridsAnalytics, throwIfResultError, openRunQuotaUpgradePrompt, describeOperationError } from './chunk-YC76QFWZ.js';
7
7
  import { useBuilderReadOnly } from './chunk-OCJTTHTS.js';
8
8
  import { useRunFromNodeEligibilityQuery, PreviewScheduleDocument, WebhookTestListenerDocument, StopWebhookTestListenerDocument, ListenForWebhookTestEventDocument } from './chunk-JTQFBZTV.js';
9
9
  import { useTr } from './chunk-UULVIT25.js';
@@ -3822,7 +3822,10 @@ function NodeExecutionActions({
3822
3822
  setPendingAction(null);
3823
3823
  }
3824
3824
  };
3825
- const executePending = pendingAction === "execute" || isExecuting;
3825
+ const stepGuard = useRunGuard(() => {
3826
+ void runAction("execute", () => onExecuteStep(targetNodeId));
3827
+ });
3828
+ const executePending = pendingAction === "execute" || isExecuting || stepGuard.preparing;
3826
3829
  const continuePending = pendingAction === "continue";
3827
3830
  const continuationLabel = eligibility.action === "retry" ? tr(
3828
3831
  "fluidgrids.builder.nodeExecutionActions.retryFromHere",
@@ -3860,7 +3863,7 @@ function NodeExecutionActions({
3860
3863
  "data-agent": "confirm",
3861
3864
  type: "button",
3862
3865
  onClick: () => {
3863
- void runAction("execute", () => onExecuteStep(targetNodeId));
3866
+ void stepGuard.requestRun();
3864
3867
  },
3865
3868
  disabled: executePending || continuePending,
3866
3869
  title: tr(
@@ -3913,6 +3916,7 @@ function NodeExecutionActions({
3913
3916
  }
3914
3917
  )
3915
3918
  ] }),
3919
+ stepGuard.dialog,
3916
3920
  !eligibility.eligible && /* @__PURE__ */ jsx(
3917
3921
  "p",
3918
3922
  {