@burdenoff/fluidgrids-fe-sdk 2026.1111.13 → 2026.1111.15

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 (43) hide show
  1. package/README.md +41 -0
  2. package/dist/{ExecutionDetailPage-CDkJeeu2.js → ExecutionDetailPage-DO38vZ_F.js} +4 -4
  3. package/dist/{FluidGridsProvider-CDZjKmfD.js → FluidGridsProvider-B9RR_CI_.js} +237 -325
  4. package/dist/{HistoryPage-DnVGN_72.js → HistoryPage-CA42pU85.js} +1 -1
  5. package/dist/{InsightsPage-CGRpZtGu.js → InsightsPage-CBoN_Mj9.js} +2 -2
  6. package/dist/{ManagedAiPolicyAuthority-DbJBledZ.js → ManagedAiPolicyAuthority-CKihmbJE.js} +2 -2
  7. package/dist/{MissingNodesInstallModal-Ca4f--lw.js → MissingNodesInstallModal-Dm0nMBXM.js} +1 -1
  8. package/dist/{TemplateConfigurationModal-ChQsXf0-.js → TemplateConfigurationModal-Bs_V-E4u.js} +1 -1
  9. package/dist/{TemplateDetailPanel-C0YiVdub.js → TemplateDetailPanel-MlT39VLG.js} +1 -1
  10. package/dist/{TemplatesPage-QXtq6mI3.js → TemplatesPage-CHVpWBuw.js} +5 -4
  11. package/dist/{WorkflowSearchRedirect-B4nHALJg.js → WorkflowSearchRedirect-3gyHcYY2.js} +38 -51
  12. package/dist/{WorkflowShareDialog-ByTSWwwR.js → WorkflowShareDialog-0Ai1HED-.js} +2 -1
  13. package/dist/{WorkflowsList-B9F2e8M6.js → WorkflowsList-CJ3KmMHX.js} +5 -4
  14. package/dist/agent-tools.d.ts +3 -0
  15. package/dist/agent-tools.js +5 -0
  16. package/dist/{agentTools-C0g2OWvI.js → agentTools-B1IK1JEO.js} +2 -2
  17. package/dist/{canvasNoteTools-BUWY18XK.js → canvasNoteTools-eewVHVuy.js} +3 -2
  18. package/dist/executions.js +1 -1
  19. package/dist/{flow-builder-BvCQAGDR.js → flow-builder-C_3sY3pZ.js} +54 -209
  20. package/dist/fluidgridsEvents-CNdcrUNN.js +310 -0
  21. package/dist/history.js +1 -1
  22. package/dist/index-CHeY7_A1.d.ts +105 -0
  23. package/dist/{index-CLqh2u28.d.ts → index-DRf25-D3.d.ts} +7 -105
  24. package/dist/index.d.ts +3 -2
  25. package/dist/index.js +21 -946
  26. package/dist/marksStore-DGCXjTmZ.js +151 -0
  27. package/dist/{node-detail-view-CPD_NSZc.js → node-detail-view-CAws5qjg.js} +3 -3
  28. package/dist/observability.d.ts +1 -1
  29. package/dist/observability.js +1 -1
  30. package/dist/{quick-config-panel-DHkYGaCL.js → quick-config-panel-DOzNkSVV.js} +2 -2
  31. package/dist/settings.js +1 -1
  32. package/dist/templates.js +1 -1
  33. package/dist/uiMarkTools-nlmzsHQM.js +937 -0
  34. package/dist/{useExecutions-BqoD7XWi.js → useExecutions-DkS0FTfw.js} +2 -1
  35. package/dist/{useObservability-Cs-5_NHh.js → useObservability-BkxhHZsX.js} +2 -1
  36. package/dist/{useRunHistory-CEL-CIz-.js → useRunHistory-DHehG09Z.js} +1 -1
  37. package/dist/{useWorkflows-Bwpvfdgv.js → useWorkflows-DyhtoVwp.js} +25 -5
  38. package/dist/workflow-builder.js +2 -2
  39. package/dist/workflow-route.d.ts +33 -0
  40. package/dist/workflow-route.js +4 -0
  41. package/dist/workflowRouteData-BkfVOc-O.js +169 -0
  42. package/dist/workflows-list.js +1 -1
  43. package/package.json +9 -1
@@ -1,12 +1,12 @@
1
1
  "use client";
2
2
  import { Fn as SnoozeOptimisationSuggestionDocument, Gr as WorkflowProposalDocument, It as OptimisationSuggestionsDocument, Oi as getFluidGridsClient, On as SetContinuousOptimisationEnabledDocument, Q as DismissOptimisationSuggestionDocument, T as ContinuousOptimisationSettingsDocument, Ti as WorkspaceAiUsageDocument, Ui as throwIfResultError, Ut as ProposeOptimisationDocument, it as ErrorAnalyticsDocument, mt as FgRunOptimisationScanDocument } from "./node-endpoint-configs-DHFGA5MQ.js";
3
- import { Gn as useContinuousOptimisationEnabled } from "./FluidGridsProvider-CDZjKmfD.js";
3
+ import { jn as useContinuousOptimisationEnabled } from "./FluidGridsProvider-B9RR_CI_.js";
4
4
  import { r as useTr } from "./TranslationBridge-Da-TPgQm.js";
5
5
  import { HC as OptimisationDismissReason, UC as OptimisationKind, WC as OptimisationSuggestionStatus, hI as FLUIDGRIDS_PERMISSIONS, vI as SdkPermissionButton, xI as useFluidGridsPermission } from "./graphql-types-XcDLtFwU.js";
6
6
  import { t as proposalCanvasPath } from "./useRequestedProposal-B7uPXfZB.js";
7
7
  import { c as runListPath, l as utcDay, n as FailureTriagePanel } from "./FailureTriagePanel-BHiduL7A.js";
8
8
  import { a as formatTokens, c as DISMISS_REASONS, f as monthlySavingLabel, i as aiSpendPeriod, l as evidenceFacts, p as shortRunId, r as aiCost, s as runsOfWorkflowPath, t as AI_SPEND_RANGE_DAYS, u as evidenceWindowDays } from "./ai-usage-D5p7ZeRR.js";
9
- import { n as useDataSinks, o as useRunReplayActions, r as useInsightsData, t as useDataSinkData } from "./useObservability-Cs-5_NHh.js";
9
+ import { n as useDataSinks, o as useRunReplayActions, r as useInsightsData, t as useDataSinkData } from "./useObservability-BkxhHZsX.js";
10
10
  import { useCallback, useEffect, useMemo, useRef, useState } from "react";
11
11
  import { Link, useNavigate } from "react-router";
12
12
  import { Icon } from "@iconify/react";
@@ -1,6 +1,6 @@
1
1
  "use client";
2
2
  import { Bi as describeOperationError, Oi as getFluidGridsClient, Tt as ManagedAiWorkspacePolicyDocument, Ui as throwIfResultError, Vr as WorkflowNotificationSettingsDocument, ar as UpdateManagedAiWorkspacePolicyDocument, ir as UpdateDurableHistoryCapsDocument, lr as UpdateWorkflowNotificationSettingsDocument, qi as getFluidGridsConfig, tt as DurableHistoryCapsDocument } from "./node-endpoint-configs-DHFGA5MQ.js";
3
- import { Bn as FLUIDGRIDS_FLAGS, Dt as useSaveStatusStore, Jn as useFluidGridsFlag, Yt as findSaveConflict, Zn as usePhaseCFlags, qn as useDurableParityEnabled, ur as getGlobalStoreClient } from "./FluidGridsProvider-CDZjKmfD.js";
3
+ import { At as useSaveStatusStore, En as FLUIDGRIDS_FLAGS, Ln as usePhaseCFlags, Nn as useDurableParityEnabled, Pn as useFluidGridsFlag, Qt as findSaveConflict, Xn as getGlobalStoreClient } from "./FluidGridsProvider-B9RR_CI_.js";
4
4
  import { H as useFlowStore } from "./node-operation-selection--oy-yEq_.js";
5
5
  import { r as useTr } from "./TranslationBridge-Da-TPgQm.js";
6
6
  import { Wt as useWorkflowDefinitionQuery, a as useConnections, n as useAgentDefinitions, qt as useWorkflowDefinitionsQuery, zt as useUpdateWorkflowDefinitionMutation } from "./useAgentDefinitions-NFtLytDR.js";
@@ -8,7 +8,7 @@ import { KF as WorkflowSearchAttributeType, hI as FLUIDGRIDS_PERMISSIONS, xI as
8
8
  import { t as FluidGridsDocsLink } from "./FluidGridsDocsLink-JxkBpOeb.js";
9
9
  import { C as createSearchAttribute, E as deleteSearchAttribute, J as saveArchiveSettings, N as fetchCodecServerSettings, P as fetchPauseRules, R as fetchSearchAttributes, S as createPauseRule, T as deletePauseRule, Y as saveCodecServerSettings, _ as useResource, a as formToInput$2, b as clearArchiveSettings, c as FieldError, d as NativeSelect, i as emptyAgentForm, k as fetchArchiveSettings, n as agentToForm, o as grantDays, p as StatusPill, r as describeRule, t as AgentFormError } from "./agent-form-BvMWhQ42.js";
10
10
  import { c as budgetInputValue, d as withBudgetMode, f as EffectBadge, m as useActionPolicies, n as checkCodecServerUrl, p as effectLabel, s as BUDGET_DIMENSIONS, u as withBudgetLimit } from "./codec-client-DstqyzTN.js";
11
- import { a as useLogStreamDestinations, i as useLogStreamDestinationActions } from "./useObservability-Cs-5_NHh.js";
11
+ import { a as useLogStreamDestinations, i as useLogStreamDestinationActions } from "./useObservability-BkxhHZsX.js";
12
12
  import { createContext, useCallback, useContext, useEffect, useLayoutEffect, useMemo, useRef, useState } from "react";
13
13
  import { useNavigate, useParams } from "react-router";
14
14
  import { Icon } from "@iconify/react";
@@ -1,5 +1,5 @@
1
1
  "use client";
2
- import { A as DialogFooter, E as Dialog, O as DialogContent, P as DialogTitle, j as DialogHeader, k as DialogDescription, w as Badge } from "./flow-builder-BvCQAGDR.js";
2
+ import { C as Dialog, D as DialogFooter, E as DialogDescription, O as DialogHeader, T as DialogContent, j as DialogTitle, x as Badge } from "./flow-builder-C_3sY3pZ.js";
3
3
  import { i as Button } from "./PublishCustomNodeAction-D2F7oN0S.js";
4
4
  import { Fragment, jsx, jsxs } from "react/jsx-runtime";
5
5
  import { AlertTriangle, CheckCircle2, Download, ExternalLink, Loader2, Puzzle, ShoppingCart } from "lucide-react";
@@ -1,5 +1,5 @@
1
1
  "use client";
2
- import { A as DialogFooter, E as Dialog, O as DialogContent, P as DialogTitle, St as Input, j as DialogHeader, k as DialogDescription, w as Badge } from "./flow-builder-BvCQAGDR.js";
2
+ import { C as Dialog, D as DialogFooter, E as DialogDescription, O as DialogHeader, T as DialogContent, bt as Input, j as DialogTitle, x as Badge } from "./flow-builder-C_3sY3pZ.js";
3
3
  import { i as Button } from "./PublishCustomNodeAction-D2F7oN0S.js";
4
4
  import { t as Label } from "./label-CDy86rIZ.js";
5
5
  import { r as useTr } from "./TranslationBridge-Da-TPgQm.js";
@@ -1,6 +1,6 @@
1
1
  "use client";
2
2
  import { i as Button } from "./PublishCustomNodeAction-D2F7oN0S.js";
3
- import { C as templatePreview, w as Badge } from "./flow-builder-BvCQAGDR.js";
3
+ import { b as templatePreview, x as Badge } from "./flow-builder-C_3sY3pZ.js";
4
4
  import { r as useTr } from "./TranslationBridge-Da-TPgQm.js";
5
5
  import { hI as FLUIDGRIDS_PERMISSIONS, vI as SdkPermissionButton } from "./graphql-types-XcDLtFwU.js";
6
6
  import { Icon } from "@iconify/react";
@@ -1,10 +1,11 @@
1
1
  "use client";
2
2
  import { Bi as describeOperationError, Ui as throwIfResultError } from "./node-endpoint-configs-DHFGA5MQ.js";
3
- import { Dn as isQuotaExhaustedFailure, E as MyWorkflowTemplateSubmissionsDocument, O as SubmitWorkflowTemplateDocument, Sn as BILLING_PLANS_PATH, hn as emitTemplateUsed, j as WithdrawWorkflowTemplateSubmissionDocument, ln as useFluidGridsAnalytics } from "./FluidGridsProvider-CDZjKmfD.js";
3
+ import { O as MyWorkflowTemplateSubmissionsDocument, P as WithdrawWorkflowTemplateSubmissionDocument, fn as useFluidGridsAnalytics, j as SubmitWorkflowTemplateDocument } from "./FluidGridsProvider-B9RR_CI_.js";
4
4
  import { r as useTr } from "./TranslationBridge-Da-TPgQm.js";
5
- import { $ as useGlobalStoreClient, B as useImportWorkflowTemplate, L as useTemplateImportFlow, S as TemplateCard, V as useWorkflowTemplates, t as FlowBuilderPage } from "./flow-builder-BvCQAGDR.js";
6
- import { h as useWorkflowDefinitions, l as useLazyWorkflowDefinition, s as useDuplicateWorkflow } from "./useWorkflows-Bwpvfdgv.js";
7
- import { k as QuotaExhaustedDialog } from "./WorkflowShareDialog-ByTSWwwR.js";
5
+ import { P as useTemplateImportFlow, R as useImportWorkflowTemplate, Z as useGlobalStoreClient, t as FlowBuilderPage, y as TemplateCard, z as useWorkflowTemplates } from "./flow-builder-C_3sY3pZ.js";
6
+ import { a as emitTemplateUsed, f as BILLING_PLANS_PATH, y as isQuotaExhaustedFailure } from "./fluidgridsEvents-CNdcrUNN.js";
7
+ import { h as useWorkflowDefinitions, l as useLazyWorkflowDefinition, s as useDuplicateWorkflow } from "./useWorkflows-DyhtoVwp.js";
8
+ import { k as QuotaExhaustedDialog } from "./WorkflowShareDialog-0Ai1HED-.js";
8
9
  import { YF as WorkflowStatus, hI as FLUIDGRIDS_PERMISSIONS, vI as SdkPermissionButton } from "./graphql-types-XcDLtFwU.js";
9
10
  import { n as useFluidGridsPageControls } from "./pageControlsBridge-0pX9s-3k.js";
10
11
  import { r as templatesControls } from "./pageControlSpecs-DZJ9K37m.js";
@@ -1,13 +1,14 @@
1
1
  "use client";
2
2
  import { Dr as WorkflowDefinitionDocument, Oi as getFluidGridsClient, Ui as throwIfResultError, oa as __exportAll, qi as getFluidGridsConfig } from "./node-endpoint-configs-DHFGA5MQ.js";
3
- import { Ct as classifyCreateRefusal, Dt as useSaveStatusStore, G as paramsFromOperation, Jt as codeBuildIdOf, On as useCanvasEdges, P as createConfiguredNode, Qt as workflowFingerprint, Sn as BILLING_PLANS_PATH, Wt as rememberRevision, f as refetchStoreNodes, l as ensureNodeTypesLoaded, m as registerWorkflowNodeTypes, n as FluidGridsProvider, o as NODE_CONFIGS, p as registerNodeManifests, sn as resolveNodeOperation, xt as blankWorkflowCreateInput } from "./FluidGridsProvider-CDZjKmfD.js";
3
+ import { At as useSaveStatusStore, Et as classifyCreateRefusal, J as paramsFromOperation, L as createConfiguredNode, Zt as codeBuildIdOf, g as registerWorkflowNodeTypes, h as registerNodeManifests, m as refetchStoreNodes, mn as useCanvasEdges, n as FluidGridsProvider, o as NODE_CONFIGS, qt as rememberRevision, tn as workflowFingerprint, u as ensureNodeTypesLoaded, un as resolveNodeOperation, wt as blankWorkflowCreateInput } from "./FluidGridsProvider-B9RR_CI_.js";
4
4
  import { F as mergeStickyNotes, H as useFlowStore } from "./node-operation-selection--oy-yEq_.js";
5
5
  import { r as useTr } from "./TranslationBridge-Da-TPgQm.js";
6
- import { H as useInstalledNodes, R as buildNodeCheck, St as Input, gt as Card, h as useWorkflowReloadStore, ht as FluidGridsMark, m as releaseLeaseKeptForReload, mt as useNodeSelectedEvent, t as FlowBuilderPage, z as buildRequiredNodeTypes } from "./flow-builder-BvCQAGDR.js";
6
+ import { B as useInstalledNodes, F as buildNodeCheck, I as buildRequiredNodeTypes, L as getWorkflowNodeTypes, bt as Input, ft as useNodeSelectedEvent, h as useWorkflowReloadStore, m as releaseLeaseKeptForReload, mt as Card, pt as FluidGridsMark, t as FlowBuilderPage } from "./flow-builder-C_3sY3pZ.js";
7
+ import { f as BILLING_PLANS_PATH } from "./fluidgridsEvents-CNdcrUNN.js";
7
8
  import { t as cn } from "./cn-QqidFIgr.js";
8
9
  import { i as Button } from "./PublishCustomNodeAction-D2F7oN0S.js";
9
- import { l as useLazyWorkflowDefinition, m as useWorkflowDefinition, n as useCreateWorkflow } from "./useWorkflows-Bwpvfdgv.js";
10
- import { O as CreateWorkflowRefusalDialog } from "./WorkflowShareDialog-ByTSWwwR.js";
10
+ import { l as useLazyWorkflowDefinition, m as useWorkflowDefinition, n as useCreateWorkflow } from "./useWorkflows-DyhtoVwp.js";
11
+ import { O as CreateWorkflowRefusalDialog } from "./WorkflowShareDialog-0Ai1HED-.js";
11
12
  import { c as withoutGuidedTourIntent, l as decideMissingWorkflow, o as isGuidedTourIntent, s as pickGuidedTour, u as isCreateIntent } from "./firstWorkflow-C_h0KMB2.js";
12
13
  import { t as canvasFromDefinition } from "./definition-canvas--3MPHoP-.js";
13
14
  import { n as registerLiveCanvasHandler } from "./liveCanvas-D5ytXDp8.js";
@@ -1626,7 +1627,7 @@ function GuidedTourStarter({ ready }) {
1626
1627
  }
1627
1628
 
1628
1629
  // src/builder/app/workflow/work/page.tsx
1629
- const LazyMissingNodesInstallModal = lazy(() => import("./MissingNodesInstallModal-Ca4f--lw.js").then((m) => ({ default: m.MissingNodesInstallModal })));
1630
+ const LazyMissingNodesInstallModal = lazy(() => import("./MissingNodesInstallModal-Dm0nMBXM.js").then((m) => ({ default: m.MissingNodesInstallModal })));
1630
1631
  function WorkflowItem({ readonly = false }) {
1631
1632
  if (readonly) {
1632
1633
  const queryParams = new URLSearchParams(window.location.search);
@@ -1666,14 +1667,16 @@ function WorkflowItem({ readonly = false }) {
1666
1667
  const seenReloadNonceRef = useRef(reloadNonce);
1667
1668
  const pendingReloadRef = useRef(null);
1668
1669
  const [reloadFailed, setReloadFailed] = useState(false);
1669
- const { getWorkflow } = useLazyWorkflowDefinition({ withNodeManifests: true });
1670
+ const { getWorkflow } = useLazyWorkflowDefinition({
1671
+ withNodeManifests: true,
1672
+ routeCritical: true
1673
+ });
1670
1674
  const { createWorkflow } = useCreateWorkflow();
1671
1675
  const creatingRef = useRef(false);
1672
1676
  const fromSharedLoadedRef = useRef(false);
1673
1677
  const fetchedWorkflowRef = useRef(null);
1674
1678
  const loadSeqRef = useRef(0);
1675
1679
  const { installedAppIds } = useInstalledNodes();
1676
- const [pendingWorkflow, setPendingWorkflow] = useState(null);
1677
1680
  const [nodeCheck, setNodeCheck] = useState(null);
1678
1681
  const [configModalOpen, setConfigModalOpen] = useState(false);
1679
1682
  const [installing, setInstalling] = useState(false);
@@ -1689,15 +1692,14 @@ function WorkflowItem({ readonly = false }) {
1689
1692
  trRef.current = tr;
1690
1693
  });
1691
1694
  const handleInstallConfirm = useCallback(async () => {
1692
- if (!pendingWorkflow) return;
1693
1695
  const nodesToInstall = (nodeCheck?.missing ?? []).filter((n) => !!n.storeProductId);
1694
1696
  const failed = [];
1695
1697
  if (nodesToInstall.length > 0) {
1696
1698
  setInstalling(true);
1697
1699
  setInstallErrors([]);
1698
1700
  try {
1699
- const { getGlobalStoreClient } = await import("./FluidGridsProvider-CDZjKmfD.js").then((n) => n.dr);
1700
- const { InstallWorkflowNodeDocument } = await import("./FluidGridsProvider-CDZjKmfD.js").then((n) => n._);
1701
+ const { getGlobalStoreClient } = await import("./FluidGridsProvider-B9RR_CI_.js").then((n) => n.Zn);
1702
+ const { InstallWorkflowNodeDocument } = await import("./FluidGridsProvider-B9RR_CI_.js").then((n) => n.y);
1701
1703
  const { getFluidGridsConfig } = await import("./node-endpoint-configs-DHFGA5MQ.js").then((n) => n.Ki);
1702
1704
  const storeClient = getGlobalStoreClient();
1703
1705
  const cfg = getFluidGridsConfig();
@@ -1724,6 +1726,7 @@ function WorkflowItem({ readonly = false }) {
1724
1726
  }
1725
1727
  }
1726
1728
  await refetchStoreNodes();
1729
+ await ensureNodeTypesLoaded(nodesToInstall.map((n) => n.nodeType));
1727
1730
  } finally {
1728
1731
  setInstalling(false);
1729
1732
  setInstallProgress(null);
@@ -1735,17 +1738,12 @@ function WorkflowItem({ readonly = false }) {
1735
1738
  }
1736
1739
  setInstallErrors([]);
1737
1740
  setConfigModalOpen(false);
1738
- setWorkflow(pendingWorkflow);
1739
- setPendingWorkflow(null);
1740
1741
  setNodeCheck(null);
1741
- }, [pendingWorkflow, nodeCheck]);
1742
+ }, [nodeCheck]);
1742
1743
  const handleSkipInstall = useCallback(() => {
1743
- if (!pendingWorkflow) return;
1744
1744
  setConfigModalOpen(false);
1745
- setWorkflow(pendingWorkflow);
1746
- setPendingWorkflow(null);
1747
1745
  setNodeCheck(null);
1748
- }, [pendingWorkflow]);
1746
+ }, []);
1749
1747
  const newWorkflow = useMemo(() => ({
1750
1748
  id: id ?? "",
1751
1749
  workflowKey: id ?? "",
@@ -1778,10 +1776,24 @@ function WorkflowItem({ readonly = false }) {
1778
1776
  if (pendingReloadRef.current === target) pendingReloadRef.current = null;
1779
1777
  return true;
1780
1778
  };
1779
+ const offerMissingNodes = (nodes) => {
1780
+ buildRequiredNodeTypes(nodes).then((requiredNodeTypes) => {
1781
+ if (!mounted || requiredNodeTypes.length === 0) return;
1782
+ const check = doNodeCheckRef.current(requiredNodeTypes);
1783
+ if (check.missing.length > 0 || check.missingPaid.length > 0) {
1784
+ setNodeCheck(check);
1785
+ setConfigModalOpen(true);
1786
+ }
1787
+ }).catch((error) => {
1788
+ console.warn("[WorkflowItem] Missing-nodes check failed:", error);
1789
+ });
1790
+ };
1781
1791
  const loadWorkflow = async () => {
1782
1792
  try {
1783
1793
  resetWorkflow();
1784
1794
  if (mounted) setNotFound(false);
1795
+ if (mounted) setConfigModalOpen(false);
1796
+ if (mounted) setNodeCheck(null);
1785
1797
  if (mounted) setLoadError(null);
1786
1798
  if (mounted) setReloadFailed(false);
1787
1799
  if (version && mounted) setIsLoading(true);
@@ -1796,26 +1808,12 @@ function WorkflowItem({ readonly = false }) {
1796
1808
  nodes: manifest.nodes ?? [],
1797
1809
  edges: manifest.edges ?? []
1798
1810
  };
1799
- let requiredNodeTypes = [];
1800
- try {
1801
- requiredNodeTypes = await buildRequiredNodeTypes(sharedWorkflow.nodes);
1802
- } catch {}
1803
1811
  if (mounted) {
1804
1812
  localStorage.removeItem("pendingSharedWorkflow");
1805
- if (requiredNodeTypes.length > 0) {
1806
- const check = doNodeCheckRef.current(requiredNodeTypes);
1807
- if (check.missing.length > 0 || check.missingPaid.length > 0) {
1808
- setPendingWorkflow(sharedWorkflow);
1809
- setNodeCheck(check);
1810
- setConfigModalOpen(true);
1811
- setIsLoading(false);
1812
- fromSharedLoadedRef.current = true;
1813
- return;
1814
- }
1815
- }
1816
1813
  setWorkflow(sharedWorkflow);
1817
1814
  setIsLoading(false);
1818
1815
  fromSharedLoadedRef.current = true;
1816
+ offerMissingNodes(sharedWorkflow.nodes);
1819
1817
  }
1820
1818
  return;
1821
1819
  } catch (e) {
@@ -1856,8 +1854,7 @@ function WorkflowItem({ readonly = false }) {
1856
1854
  return;
1857
1855
  }
1858
1856
  const freshCreate = createIntentRef.current && !creatingRef.current && !fetchedCopy() && !loadRunId;
1859
- const result = freshCreate ? null : await getWorkflow(id, void 0, version);
1860
- if (result?.nodeManifests) registerNodeManifests(result.nodeManifests);
1857
+ const result = freshCreate ? null : await getWorkflow(id, void 0, version, { reusePrefetched: !reloadPending() });
1861
1858
  const definitionJson = result?.definitionJson;
1862
1859
  const defData = definitionJson?.data ?? (definitionJson?.nodes ? definitionJson : void 0);
1863
1860
  if (defData) {
@@ -1874,21 +1871,11 @@ function WorkflowItem({ readonly = false }) {
1874
1871
  codeBuildId: codeBuildIdOf(result?.definitionJson)
1875
1872
  };
1876
1873
  if (recordFetched(workflowState)) rememberRevision(result?.id, result?.revision);
1877
- let requiredNodeTypes = [];
1878
- try {
1879
- requiredNodeTypes = await buildRequiredNodeTypes(workflowState.nodes);
1880
- } catch {}
1881
- if (mounted && requiredNodeTypes.length > 0) {
1882
- const check = doNodeCheckRef.current(requiredNodeTypes);
1883
- if (check.missing.length > 0 || check.missingPaid.length > 0) {
1884
- setPendingWorkflow(workflowState);
1885
- setNodeCheck(check);
1886
- setConfigModalOpen(true);
1887
- setIsLoading(false);
1888
- return;
1889
- }
1874
+ if (Array.isArray(result?.nodeManifests)) registerNodeManifests(result.nodeManifests, getWorkflowNodeTypes(workflowState.nodes));
1875
+ if (mounted) {
1876
+ setWorkflow(workflowState);
1877
+ offerMissingNodes(workflowState.nodes);
1890
1878
  }
1891
- if (mounted) setWorkflow(workflowState);
1892
1879
  return;
1893
1880
  }
1894
1881
  if (mounted) {
@@ -2054,14 +2041,14 @@ function WorkflowItem({ readonly = false }) {
2054
2041
  onBack: () => navigate("../list")
2055
2042
  });
2056
2043
  return /* @__PURE__ */ jsxs(Fragment, { children: [
2057
- configModalOpen && pendingWorkflow && /* @__PURE__ */ jsx(Suspense, {
2044
+ configModalOpen && workflow && /* @__PURE__ */ jsx(Suspense, {
2058
2045
  fallback: null,
2059
2046
  children: /* @__PURE__ */ jsx(LazyMissingNodesInstallModal, {
2060
2047
  open: configModalOpen,
2061
2048
  onOpenChange: (open) => {
2062
2049
  if (!open) handleSkipInstall();
2063
2050
  },
2064
- workflowName: pendingWorkflow.name,
2051
+ workflowName: workflow.name,
2065
2052
  nodeCheckResult: nodeCheck,
2066
2053
  onConfirm: handleInstallConfirm,
2067
2054
  onSkip: handleSkipInstall,
@@ -2085,7 +2072,7 @@ function WorkflowItem({ readonly = false }) {
2085
2072
  }),
2086
2073
  workflow && !isLoading && /* @__PURE__ */ jsx(FlowBuilderPage, { workflow }),
2087
2074
  workflow && !isLoading && /* @__PURE__ */ jsx(AssistantLiveCanvasHost, {}),
2088
- /* @__PURE__ */ jsx(GuidedTourStarter, { ready: Boolean(workflow && !isLoading) })
2075
+ /* @__PURE__ */ jsx(GuidedTourStarter, { ready: Boolean(workflow && !isLoading && !configModalOpen) })
2089
2076
  ] });
2090
2077
  }
2091
2078
 
@@ -1,7 +1,8 @@
1
1
  "use client";
2
2
  import { Bi as describeOperationError, Nn as ShareWorkflowDocument, Oi as getFluidGridsClient, Ui as throwIfResultError, ft as ExportWorkflowCodeDocument, ui as WorkflowSharingDocument } from "./node-endpoint-configs-DHFGA5MQ.js";
3
- import { gn as emitUpgradeClicked, ln as useFluidGridsAnalytics, vn as emitWorkflowLimitHit, wn as WORKFLOWS_QUOTA_NAME } from "./FluidGridsProvider-CDZjKmfD.js";
3
+ import { fn as useFluidGridsAnalytics } from "./FluidGridsProvider-B9RR_CI_.js";
4
4
  import { r as useTr } from "./TranslationBridge-Da-TPgQm.js";
5
+ import { c as emitWorkflowLimitHit, h as WORKFLOWS_QUOTA_NAME, o as emitUpgradeClicked } from "./fluidgridsEvents-CNdcrUNN.js";
5
6
  import { CF as WorkflowExportFormat, Fd as FidelityLevel, JF as WorkflowShareRole, hF as WorkflowAccess, nI as WorkflowVisibility, qF as WorkflowSharePrincipalType } from "./graphql-types-XcDLtFwU.js";
6
7
  import { useCallback, useEffect, useMemo, useRef, useState } from "react";
7
8
  import { jsx, jsxs } from "react/jsx-runtime";
@@ -1,12 +1,13 @@
1
1
  "use client";
2
- import { c as useImportWorkflow, h as useWorkflowDefinitions, l as useLazyWorkflowDefinition, n as useCreateWorkflow, o as useDeleteWorkflow, s as useDuplicateWorkflow, u as usePreviewN8nImport } from "./useWorkflows-Bwpvfdgv.js";
3
- import { Bn as FLUIDGRIDS_FLAGS, Dn as isQuotaExhaustedFailure, Jn as useFluidGridsFlag, Sn as BILLING_PLANS_PATH, t as FluidGridsContext, wt as createThenOpen } from "./FluidGridsProvider-CDZjKmfD.js";
4
- import { C as readProjectArchive, D as workflowNameFromFile, E as typeScriptModuleFile, O as CreateWorkflowRefusalDialog, S as primaryImportModule, T as typeScriptImportSource, _ as importFileKind, a as downloadWorkflowExport, c as canShareWorkflow, d as MAX_IMPORT_ARCHIVE_BYTES, f as MAX_IMPORT_SOURCE_BYTES, g as importAcceptAttribute, k as QuotaExhaustedDialog, l as CODE_EXPORT_FORMATS, m as checkTypeScriptImport, o as parseWorkflowImport, p as assertImportByteSize, r as useExportWorkflowAs, s as canEditWorkflow, t as WorkflowShareDialog, u as ImportSourceError } from "./WorkflowShareDialog-ByTSWwwR.js";
2
+ import { c as useImportWorkflow, h as useWorkflowDefinitions, l as useLazyWorkflowDefinition, n as useCreateWorkflow, o as useDeleteWorkflow, s as useDuplicateWorkflow, u as usePreviewN8nImport } from "./useWorkflows-DyhtoVwp.js";
3
+ import { Dt as createThenOpen, En as FLUIDGRIDS_FLAGS, Pn as useFluidGridsFlag, t as FluidGridsContext } from "./FluidGridsProvider-B9RR_CI_.js";
4
+ import { C as readProjectArchive, D as workflowNameFromFile, E as typeScriptModuleFile, O as CreateWorkflowRefusalDialog, S as primaryImportModule, T as typeScriptImportSource, _ as importFileKind, a as downloadWorkflowExport, c as canShareWorkflow, d as MAX_IMPORT_ARCHIVE_BYTES, f as MAX_IMPORT_SOURCE_BYTES, g as importAcceptAttribute, k as QuotaExhaustedDialog, l as CODE_EXPORT_FORMATS, m as checkTypeScriptImport, o as parseWorkflowImport, p as assertImportByteSize, r as useExportWorkflowAs, s as canEditWorkflow, t as WorkflowShareDialog, u as ImportSourceError } from "./WorkflowShareDialog-0Ai1HED-.js";
5
+ import { f as BILLING_PLANS_PATH, y as isQuotaExhaustedFailure } from "./fluidgridsEvents-CNdcrUNN.js";
5
6
  import { H as useFlowStore } from "./node-operation-selection--oy-yEq_.js";
6
7
  import { CF as WorkflowExportFormat, gF as WorkflowAccessFilter, hI as FLUIDGRIDS_PERMISSIONS, vI as SdkPermissionButton, xI as useFluidGridsPermission, yI as SdkPermissionGate } from "./graphql-types-XcDLtFwU.js";
7
8
  import { r as useTr } from "./TranslationBridge-Da-TPgQm.js";
8
9
  import { $t as RenameWorkflowFolderDocument, Bi as describeOperationError, Et as MoveWorkflowFolderDocument, K as DeleteWorkflowFolderDocument, M as CreateWorkflowFolderDocument, N as CreateWorkflowProjectDocument, Oi as getFluidGridsClient, Pr as WorkflowFoldersDocument, Ui as throwIfResultError, Ur as WorkflowProjectsDocument, _ as BulkMoveWorkflowsToFolderDocument, en as RenameWorkflowProjectDocument, g as BulkDeleteWorkflowsDocument, h as BulkAssignWorkflowsToProjectDocument, oa as __exportAll, q as DeleteWorkflowProjectDocument } from "./node-endpoint-configs-DHFGA5MQ.js";
9
- import { a as useExecutions } from "./useExecutions-BqoD7XWi.js";
10
+ import { a as useExecutions } from "./useExecutions-DkS0FTfw.js";
10
11
  import { a as firstWorkflowProgress, i as builderPathFor, r as GUIDED_TOUR_STATE } from "./firstWorkflow-C_h0KMB2.js";
11
12
  import { n as useFluidGridsPageControls } from "./pageControlsBridge-0pX9s-3k.js";
12
13
  import { i as workflowsListControls } from "./pageControlSpecs-DZJ9K37m.js";
@@ -0,0 +1,3 @@
1
+
2
+ import { a as createUiMarkTools, c as FluidGridsAgentToolDeps, d as triggerNodesOf, i as UiMarkToolOptions, l as createFluidGridsAgentTools, n as resetAgentMarks, o as AgentCalloutOverlay, r as useAgentMarksStore, s as AgentCalloutOverlayProps, t as CanvasNote, u as pickTriggerNode } from "./index-CHeY7_A1.js";
3
+ export { AgentCalloutOverlay, type AgentCalloutOverlayProps, type CanvasNote, type FluidGridsAgentToolDeps, type UiMarkToolOptions, createFluidGridsAgentTools, createUiMarkTools, pickTriggerNode, resetAgentMarks, triggerNodesOf, useAgentMarksStore };
@@ -0,0 +1,5 @@
1
+ "use client";
2
+ import { a as triggerNodesOf, i as pickTriggerNode, n as AgentCalloutOverlay, r as createFluidGridsAgentTools, t as createUiMarkTools } from "./uiMarkTools-nlmzsHQM.js";
3
+ import { n as useAgentMarksStore, t as resetAgentMarks } from "./marksStore-DGCXjTmZ.js";
4
+
5
+ export { AgentCalloutOverlay, createFluidGridsAgentTools, createUiMarkTools, pickTriggerNode, resetAgentMarks, triggerNodesOf, useAgentMarksStore };
@@ -1,7 +1,7 @@
1
1
  "use client";
2
- import { Dt as useSaveStatusStore, G as paramsFromOperation, K as selectedOperationOf, P as createConfiguredNode, U as nodeTitle, V as fixedParameterState, h as registryNodeData, o as NODE_CONFIGS, u as isNodeConfigsInitialized, ut as autosaveAllowedFor, vt as isFlowComplete } from "./FluidGridsProvider-CDZjKmfD.js";
2
+ import { At as useSaveStatusStore, J as paramsFromOperation, K as nodeTitle, L as createConfiguredNode, W as fixedParameterState, Y as selectedOperationOf, _ as registryNodeData, f as isNodeConfigsInitialized, o as NODE_CONFIGS, pt as autosaveAllowedFor, xt as isFlowComplete } from "./FluidGridsProvider-B9RR_CI_.js";
3
3
  import { E as resolveOutputHandles, H as useFlowStore, T as resolveInputHandles } from "./node-operation-selection--oy-yEq_.js";
4
- import { I as computeAttachPosition, Ot as isNodeTypeHiddenFromPalette } from "./flow-builder-BvCQAGDR.js";
4
+ import { Et as isNodeTypeHiddenFromPalette, N as computeAttachPosition } from "./flow-builder-C_3sY3pZ.js";
5
5
  import { AgentToolError, defineAgentTool } from "@burdenoff/fe-libs/shared/agent-tools";
6
6
  import { z } from "zod";
7
7
 
@@ -1,7 +1,8 @@
1
1
  "use client";
2
- import { g as notesKeyOf, v as useAgentMarksStore, y as toPlainText } from "./flow-builder-BvCQAGDR.js";
3
- import { G as paramsFromOperation, K as selectedOperationOf, U as nodeTitle } from "./FluidGridsProvider-CDZjKmfD.js";
2
+ import { n as useAgentMarksStore, r as toPlainText } from "./marksStore-DGCXjTmZ.js";
3
+ import { J as paramsFromOperation, K as nodeTitle, Y as selectedOperationOf } from "./FluidGridsProvider-B9RR_CI_.js";
4
4
  import { H as useFlowStore } from "./node-operation-selection--oy-yEq_.js";
5
+ import { g as notesKeyOf } from "./flow-builder-C_3sY3pZ.js";
5
6
  import { AgentToolError, defineAgentTool } from "@burdenoff/fe-libs/shared/agent-tools";
6
7
  import { z } from "zod";
7
8
 
@@ -1,4 +1,4 @@
1
1
  "use client";
2
- import { t as ExecutionDetailPage, y as ExecutionsListPage } from "./ExecutionDetailPage-CDkJeeu2.js";
2
+ import { t as ExecutionDetailPage, y as ExecutionsListPage } from "./ExecutionDetailPage-DO38vZ_F.js";
3
3
 
4
4
  export { ExecutionDetailPage, ExecutionsListPage };