@burdenoff/fluidgrids-fe-sdk 2026.1028.6 → 2026.1028.7

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 (40) hide show
  1. package/dist/{ExecutionDetailPage-DHIQNBAZ.js → ExecutionDetailPage-A4JQGL34.js} +8 -8
  2. package/dist/{ExecutionsListPage-IMN7OTNZ.js → ExecutionsListPage-BT3ADBXP.js} +6 -6
  3. package/dist/{WorkflowBuilder-VJAAKETX.js → WorkflowBuilder-SQQI4VSF.js} +9 -8
  4. package/dist/{WorkflowsList-3EWDWWIH.js → WorkflowsList-FZ4W64YZ.js} +7 -7
  5. package/dist/{chunk-A2JSAGNQ.js → chunk-27XYEFCK.js} +1 -1
  6. package/dist/{chunk-NAFJQGLV.js → chunk-2YDUYSB3.js} +5 -5
  7. package/dist/chunk-3ENHRYM5.js +749 -0
  8. package/dist/{chunk-F6NH55LU.js → chunk-5YP3U7BU.js} +3 -3
  9. package/dist/{chunk-C4AY6JI2.js → chunk-6NUHJPGJ.js} +1 -1
  10. package/dist/{chunk-Q22GC7RJ.js → chunk-BBORXXGZ.js} +1 -1
  11. package/dist/{chunk-FDEZGRRL.js → chunk-DUXOFCPO.js} +1 -1
  12. package/dist/{chunk-HHN2TIK2.js → chunk-HDUCP6EO.js} +1 -1
  13. package/dist/{chunk-RLA4YUDY.js → chunk-IRKB2GGJ.js} +3 -3
  14. package/dist/{chunk-IQE7ZY6Q.js → chunk-JNJDVC7V.js} +1 -1
  15. package/dist/{chunk-WBH2XEWO.js → chunk-JUUYPCFY.js} +4 -1
  16. package/dist/{chunk-3KNW5QLR.js → chunk-MUOJVRW7.js} +1 -1
  17. package/dist/{chunk-VQHBQAJY.js → chunk-NW6H7EN3.js} +1 -1
  18. package/dist/{chunk-XZPXIOGE.js → chunk-PBX42F4Q.js} +1400 -6
  19. package/dist/{chunk-RZQPHWFV.js → chunk-PYCKEQ4W.js} +1 -1
  20. package/dist/{chunk-VP2RXXRF.js → chunk-QMBXEECD.js} +6 -6
  21. package/dist/{chunk-FO22JCOW.js → chunk-RJ3YK6O7.js} +5 -5
  22. package/dist/{chunk-3VJ3AIFS.js → chunk-RKMTSOYH.js} +1 -1
  23. package/dist/{chunk-I2ZNBBRK.js → chunk-T7TRJBCG.js} +1 -1
  24. package/dist/{chunk-ACUNTZTQ.js → chunk-U7WLROQT.js} +3 -3
  25. package/dist/{chunk-STPQQDIJ.js → chunk-XYZKIFXY.js} +424 -117
  26. package/dist/{chunk-UWNYWWWG.js → chunk-ZB4BNTWR.js} +4 -4
  27. package/dist/executions.js +10 -10
  28. package/dist/global-operations-D2USVOPM.js +2 -0
  29. package/dist/history.js +4 -4
  30. package/dist/index.d.ts +2 -2
  31. package/dist/index.js +31 -30
  32. package/dist/observability.js +5 -5
  33. package/dist/settings.js +6 -5
  34. package/dist/templates.js +8 -7
  35. package/dist/{workflow-builder-C7qKY7LD.d.ts → workflow-builder-BxyapBo5.d.ts} +18 -0
  36. package/dist/workflow-builder.d.ts +1 -1
  37. package/dist/workflow-builder.js +10 -9
  38. package/dist/workflows-list.js +7 -7
  39. package/package.json +1 -1
  40. package/dist/global-operations-ZWQZ7DNT.js +0 -2
@@ -2,15 +2,16 @@ import { deepClone, applyTemplateInputs } from './chunk-GEMNVFPK.js';
2
2
  import { Input } from './chunk-IEVSFCFS.js';
3
3
  import { Dialog as Dialog$1, DialogContent as DialogContent$1, DialogHeader as DialogHeader$1, DialogTitle as DialogTitle$1, DialogDescription as DialogDescription$1, DialogFooter } from './chunk-YXMFRQYV.js';
4
4
  import { Badge as Badge$1, Button } from './chunk-BQXVT32O.js';
5
- import { QuotaExhaustedDialog } from './chunk-HHN2TIK2.js';
6
- import { EntityTagPicker, useWorkflowProposal, WorkflowProposalCard } from './chunk-VQHBQAJY.js';
7
- import { useRestoreWorkflowVersion, useWorkflowVersions, useActivateWorkflow, useDeleteWorkflow, useLazyWorkflowDefinition, useDeactivateWorkflow } from './chunk-RZQPHWFV.js';
5
+ import { QuotaExhaustedDialog } from './chunk-HDUCP6EO.js';
6
+ import { EntityTagPicker, useWorkflowProposal, WorkflowProposalCard } from './chunk-NW6H7EN3.js';
7
+ import { useRestoreWorkflowVersion, useWorkflowVersions, useActivateWorkflow, useDeleteWorkflow, useLazyWorkflowDefinition, useDeactivateWorkflow } from './chunk-PYCKEQ4W.js';
8
+ import { isAgentNodeType, AgentDefinitionSelectField } from './chunk-3ENHRYM5.js';
8
9
  import { FluidGridsDocsLink } from './chunk-4VJ3MDOV.js';
9
- import { NODE_CONFIGS, createConfiguredNode, resolveOutputHandles, resolveInputHandles, isNodeConfigsInitialized, useFlowStore, getNodeDetail, useSaveStatusStore, liveInternalOperations, resolveNodeOperation, readDisplayOptions, parseParameterValue, canAutosave, STICKY_NOTE_TYPE, isNodeTrigger, resolveUiSpec, RUNS_QUOTA_NAME, throwIfResultError, BILLING_PLANS_PATH, emitUpgradeClicked, FluidGridsContext, emitWorkflowCreated, emitTemplateUsed, ensureNodeConfigsLoaded, registerWorkflowNodeTypes, emitNodeInstalled, useNodeExecution, onNodeTypesUpdate, NODE_TYPES, getNodeMetadata, useIsValidConnection, refetchStoreNodes, AVAILABLE_NODES, useInsertNode, NODE_TYPE_DRAG_DATA_FORMAT, NODE_OPERATION_DRAG_DATA_FORMAT, fieldsFromValue, useFluidGridsAnalytics, useSaveWorkflow, workflowFingerprint, buildStickyNode, useNodeRegistryRevision, fieldsFromIO, isParamVisible, ConnectionSelector, structuredParameterType, nodeAccent, NodeTypeIcon, NODES_METADATA, useConnections, ConnectionFormDialog, SdkPermissionButton, FLUIDGRIDS_PERMISSIONS, saveIndicatorOf, inAppLeaveTarget, declaredOutputFields, subscribeWorkflowSaved, pathToExpression, ExpressionEditor, formatParameterValue, leaveNeedsConfirmation, buildOperationSeed, snapshotForSave, editStateOf, isImageIcon, NODES, synchronizeOperationUpdate, NodePropertyPanel, openRunQuotaUpgradePrompt, describeOperationError, isTriggerOperation, canRenderOperationPanel, resolveOperationName, AUTOSAVE_RETRY_DELAYS_MS, AUTOSAVE_DEBOUNCE_MS } from './chunk-C4AY6JI2.js';
10
+ import { NODE_CONFIGS, createConfiguredNode, resolveOutputHandles, resolveInputHandles, isNodeConfigsInitialized, useFlowStore, getNodeDetail, useSaveStatusStore, liveInternalOperations, resolveNodeOperation, readDisplayOptions, parseParameterValue, canAutosave, STICKY_NOTE_TYPE, isNodeTrigger, resolveUiSpec, RUNS_QUOTA_NAME, throwIfResultError, BILLING_PLANS_PATH, emitUpgradeClicked, FluidGridsContext, emitWorkflowCreated, emitTemplateUsed, ensureNodeConfigsLoaded, registerWorkflowNodeTypes, emitNodeInstalled, useNodeExecution, onNodeTypesUpdate, NODE_TYPES, getNodeMetadata, useIsValidConnection, refetchStoreNodes, AVAILABLE_NODES, useInsertNode, NODE_TYPE_DRAG_DATA_FORMAT, NODE_OPERATION_DRAG_DATA_FORMAT, fieldsFromValue, useFluidGridsAnalytics, useSaveWorkflow, workflowFingerprint, buildStickyNode, useNodeRegistryRevision, fieldsFromIO, isParamVisible, ConnectionSelector, structuredParameterType, nodeAccent, NodeTypeIcon, NODES_METADATA, useConnections, ConnectionFormDialog, SdkPermissionButton, FLUIDGRIDS_PERMISSIONS, saveIndicatorOf, inAppLeaveTarget, declaredOutputFields, subscribeWorkflowSaved, pathToExpression, ExpressionEditor, formatParameterValue, leaveNeedsConfirmation, buildOperationSeed, snapshotForSave, editStateOf, isImageIcon, NODES, synchronizeOperationUpdate, NodePropertyPanel, openRunQuotaUpgradePrompt, describeOperationError, isTriggerOperation, canRenderOperationPanel, resolveOperationName, AUTOSAVE_RETRY_DELAYS_MS, AUTOSAVE_DEBOUNCE_MS } from './chunk-6NUHJPGJ.js';
10
11
  import { cn } from './chunk-JL7CASN5.js';
11
12
  import { getGlobalStoreClient } from './chunk-PXIFUMLA.js';
12
13
  import { getFluidGridsConfig } from './chunk-CY6KX4RG.js';
13
- import { GetMyNodeInstallationsDocument, BrowseWorkflowTemplatesDocument, InstallWorkflowNodeDocument, InstallPurchasedNodeDocument, BrowseWorkflowNodesDocument, UninstallWorkflowNodeDocument, CreateStoreOrderDocument, GetNodeInstallableVersionsDocument } from './chunk-WBH2XEWO.js';
14
+ import { GetMyNodeInstallationsDocument, BrowseWorkflowTemplatesDocument, InstallWorkflowNodeDocument, InstallPurchasedNodeDocument, BrowseWorkflowNodesDocument, UninstallWorkflowNodeDocument, CreateStoreOrderDocument, GetNodeInstallableVersionsDocument, OrganizationPrivateNodesDocument, InstallOrganizationPrivateNodeDocument, UninstallOrganizationPrivateNodeDocument } from './chunk-JUUYPCFY.js';
14
15
  import { WorkspaceRunsQuotaDocument, NodeSchemaIntrospectionDocument, useWorkflowPinnedDataQuery, usePinNodeDataMutation, useUnpinNodeDataMutation, useRunFromNodeEligibilityQuery, EventRegistrationsDocument, WorkflowGenerationTemplatesDocument, WorkflowEnvironmentsDocument, WorkflowPromotionRequestsDocument, DeployWorkflowVersionToDevDocument, RequestWorkflowPromotionDocument, ApproveWorkflowPromotionDocument, RejectWorkflowPromotionDocument, CancelWorkflowPromotionDocument, UpdateWorkflowEnvironmentPolicyDocument, WorkflowGitRepositoryDocument, WorkflowGitPushesDocument, WorkflowGitCommitsDocument, LinkWorkflowGitRepositoryDocument, UnlinkWorkflowGitRepositoryDocument, PushWorkflowToGitDocument, WorkflowGitDiffDocument, RestoreWorkflowFromGitDocument, WorkflowAuthoringDocument, PreviewScheduleDocument, WebhookTestListenerDocument, StopWebhookTestListenerDocument, ListenForWebhookTestEventDocument, NodeUsageStatusDocument, RemoveNodeFromWorkflowsDocument } from './chunk-6J4RR46J.js';
15
16
  import { useTr } from './chunk-UULVIT25.js';
16
17
  import { getFluidGridsClient, waitForFluidGridsClient, getFluidGridsClientSafe } from './chunk-NTWG3CJX.js';
@@ -901,11 +902,11 @@ function useInstallNode() {
901
902
  installation: installationResult
902
903
  };
903
904
  } catch (error62) {
904
- const errorMessage = error62 instanceof Error ? error62.message : "Installation failed";
905
+ const errorMessage2 = error62 instanceof Error ? error62.message : "Installation failed";
905
906
  console.error("[useInstallNode] Installation failed:", error62);
906
907
  return {
907
908
  success: false,
908
- error: errorMessage
909
+ error: errorMessage2
909
910
  };
910
911
  } finally {
911
912
  setInstalling(null);
@@ -1557,11 +1558,11 @@ function useCreateOrder() {
1557
1558
  };
1558
1559
  } catch (error62) {
1559
1560
  console.error("[useCreateOrder] Failed to create order:", error62);
1560
- const errorMessage = error62 instanceof Error ? error62.message : "Failed to create order";
1561
+ const errorMessage2 = error62 instanceof Error ? error62.message : "Failed to create order";
1561
1562
  setCreating(false);
1562
1563
  return {
1563
1564
  success: false,
1564
- error: errorMessage
1565
+ error: errorMessage2
1565
1566
  };
1566
1567
  }
1567
1568
  },
@@ -1584,6 +1585,92 @@ gql$1`
1584
1585
  }
1585
1586
  }
1586
1587
  `;
1588
+ function errorMessage(error62, fallback) {
1589
+ return error62 instanceof Error && error62.message ? error62.message : fallback;
1590
+ }
1591
+ function useOrganizationPrivateNodes() {
1592
+ const client = useGlobalStoreClient();
1593
+ const context = useContext(FluidGridsContext);
1594
+ const workspaceId = context?.workspaceId ?? getFluidGridsConfig().workspaceId;
1595
+ const { refreshAvailableNodes } = useRefreshAvailableNodes();
1596
+ const [busyApplicationId, setBusyApplicationId] = useState(
1597
+ null
1598
+ );
1599
+ const { data, loading, error: error62, refetch } = useQuery(OrganizationPrivateNodesDocument, {
1600
+ client,
1601
+ variables: { workspaceId: workspaceId || "" },
1602
+ skip: !workspaceId,
1603
+ fetchPolicy: "cache-and-network"
1604
+ });
1605
+ const [installMutation] = useMutation(InstallOrganizationPrivateNodeDocument, { client });
1606
+ const [uninstallMutation] = useMutation(UninstallOrganizationPrivateNodeDocument, { client });
1607
+ const afterChange = useCallback(async () => {
1608
+ await refreshAvailableNodes();
1609
+ await refetch();
1610
+ }, [refreshAvailableNodes, refetch]);
1611
+ const install = useCallback(
1612
+ async (node2) => {
1613
+ if (!workspaceId) return { success: false, error: "No workspace" };
1614
+ setBusyApplicationId(node2.applicationId);
1615
+ try {
1616
+ const result = await installMutation({
1617
+ variables: {
1618
+ applicationId: node2.applicationId,
1619
+ workspaceId,
1620
+ version: node2.version
1621
+ }
1622
+ });
1623
+ if (result.error || !result.data?.installApp) {
1624
+ throw result.error ?? new Error("Installation failed");
1625
+ }
1626
+ await afterChange();
1627
+ return { success: true };
1628
+ } catch (err) {
1629
+ return {
1630
+ success: false,
1631
+ error: errorMessage(err, "Installation failed")
1632
+ };
1633
+ } finally {
1634
+ setBusyApplicationId(null);
1635
+ }
1636
+ },
1637
+ [afterChange, installMutation, workspaceId]
1638
+ );
1639
+ const uninstall = useCallback(
1640
+ async (node2) => {
1641
+ if (!node2.installationId) {
1642
+ return { success: false, error: "The node is not installed" };
1643
+ }
1644
+ setBusyApplicationId(node2.applicationId);
1645
+ try {
1646
+ const result = await uninstallMutation({
1647
+ variables: { installationId: node2.installationId }
1648
+ });
1649
+ if (result.error || result.data?.uninstallApp !== true) {
1650
+ throw result.error ?? new Error("Uninstall failed");
1651
+ }
1652
+ await afterChange();
1653
+ return { success: true };
1654
+ } catch (err) {
1655
+ return { success: false, error: errorMessage(err, "Uninstall failed") };
1656
+ } finally {
1657
+ setBusyApplicationId(null);
1658
+ }
1659
+ },
1660
+ [afterChange, uninstallMutation]
1661
+ );
1662
+ const listing = data?.organizationPrivateNodes;
1663
+ return {
1664
+ nodes: listing?.nodes ?? [],
1665
+ canManage: listing?.canManage ?? false,
1666
+ loading,
1667
+ error: error62,
1668
+ busyApplicationId,
1669
+ install,
1670
+ uninstall,
1671
+ refetch
1672
+ };
1673
+ }
1587
1674
  function formatNumber(count2) {
1588
1675
  if (count2 >= 1e6) {
1589
1676
  return `${(count2 / 1e6).toFixed(1)}M`;
@@ -23106,6 +23193,214 @@ function StoreNodeListItem({
23106
23193
  }
23107
23194
  );
23108
23195
  }
23196
+ var KEY = "fluidgrids.builder.organizationPrivateNodes";
23197
+ function NodeIcon({
23198
+ name,
23199
+ icon
23200
+ }) {
23201
+ return /* @__PURE__ */ jsx("div", { className: "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() }) });
23202
+ }
23203
+ function OrganizationPrivateNodeRow({
23204
+ node: node2,
23205
+ canManage,
23206
+ busy,
23207
+ disabled,
23208
+ onInstall,
23209
+ onUninstall
23210
+ }) {
23211
+ const tr = useTr();
23212
+ const [confirmingUninstall, setConfirmingUninstall] = useState(false);
23213
+ return /* @__PURE__ */ jsxs(
23214
+ "div",
23215
+ {
23216
+ className: "flex items-center gap-3 px-2 py-2.5 rounded-md",
23217
+ "data-testid": "org-private-node",
23218
+ "data-application-id": node2.applicationId,
23219
+ children: [
23220
+ /* @__PURE__ */ jsx(NodeIcon, { name: node2.name, icon: node2.iconUrl }),
23221
+ /* @__PURE__ */ jsxs("div", { className: "flex-1 min-w-0", children: [
23222
+ /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-1.5 flex-wrap", children: [
23223
+ /* @__PURE__ */ jsx("span", { className: "text-sm font-medium text-foreground truncate", children: node2.name }),
23224
+ node2.installed && /* @__PURE__ */ jsx(
23225
+ "span",
23226
+ {
23227
+ className: "shrink-0 inline-flex items-center px-1.5 py-0.5 rounded text-[10px] font-semibold",
23228
+ style: node2.updateAvailable ? {
23229
+ background: "var(--color-status-warning-bgSubtle)",
23230
+ color: "var(--color-status-warning-text)"
23231
+ } : {
23232
+ background: "var(--color-status-success-bgSubtle)",
23233
+ color: "var(--color-status-success-text)"
23234
+ },
23235
+ "data-testid": "org-private-node-status",
23236
+ children: node2.updateAvailable ? tr(`${KEY}.updateBadge`, "Update") : tr(`${KEY}.installedBadge`, "Installed")
23237
+ }
23238
+ )
23239
+ ] }),
23240
+ /* @__PURE__ */ jsxs("p", { className: "text-xs text-muted-foreground truncate mt-0.5 leading-snug", children: [
23241
+ "v",
23242
+ node2.installed && node2.installedVersion ? node2.installedVersion : node2.version,
23243
+ node2.updateAvailable ? ` \u2192 v${node2.version}` : "",
23244
+ node2.shortDescription ? ` \xB7 ${node2.shortDescription}` : ""
23245
+ ] })
23246
+ ] }),
23247
+ canManage && /* @__PURE__ */ jsx("div", { className: "shrink-0 flex items-center gap-1", children: busy ? /* @__PURE__ */ jsx(Loader2, { className: "size-4 animate-spin text-muted-foreground" }) : !node2.installed ? /* @__PURE__ */ jsx(
23248
+ Button,
23249
+ {
23250
+ size: "xs",
23251
+ disabled,
23252
+ onClick: () => onInstall(node2),
23253
+ "data-testid": "org-private-node-install",
23254
+ children: tr(`${KEY}.installButton`, "Install")
23255
+ }
23256
+ ) : confirmingUninstall ? /* @__PURE__ */ jsxs(Fragment, { children: [
23257
+ /* @__PURE__ */ jsx(
23258
+ Button,
23259
+ {
23260
+ size: "xs",
23261
+ variant: "destructive",
23262
+ disabled,
23263
+ onClick: () => {
23264
+ setConfirmingUninstall(false);
23265
+ onUninstall(node2);
23266
+ },
23267
+ "data-testid": "org-private-node-uninstall-confirm",
23268
+ children: tr(`${KEY}.confirmUninstallButton`, "Remove")
23269
+ }
23270
+ ),
23271
+ /* @__PURE__ */ jsx(
23272
+ Button,
23273
+ {
23274
+ size: "xs",
23275
+ variant: "ghost",
23276
+ onClick: () => setConfirmingUninstall(false),
23277
+ children: tr(`${KEY}.cancelButton`, "Cancel")
23278
+ }
23279
+ )
23280
+ ] }) : /* @__PURE__ */ jsxs(Fragment, { children: [
23281
+ node2.updateAvailable && /* @__PURE__ */ jsx(
23282
+ Button,
23283
+ {
23284
+ size: "xs",
23285
+ disabled,
23286
+ onClick: () => onInstall(node2),
23287
+ "data-testid": "org-private-node-update",
23288
+ children: tr(`${KEY}.updateButton`, "Update")
23289
+ }
23290
+ ),
23291
+ /* @__PURE__ */ jsx(
23292
+ Button,
23293
+ {
23294
+ size: "xs",
23295
+ variant: "outline",
23296
+ disabled,
23297
+ onClick: () => setConfirmingUninstall(true),
23298
+ "data-testid": "org-private-node-uninstall",
23299
+ children: tr(`${KEY}.uninstallButton`, "Uninstall")
23300
+ }
23301
+ )
23302
+ ] }) })
23303
+ ]
23304
+ }
23305
+ );
23306
+ }
23307
+ function OrganizationPrivateNodesSection() {
23308
+ const tr = useTr();
23309
+ const {
23310
+ nodes,
23311
+ canManage,
23312
+ loading,
23313
+ error: error62,
23314
+ busyApplicationId,
23315
+ install,
23316
+ uninstall
23317
+ } = useOrganizationPrivateNodes();
23318
+ if (nodes.length === 0) {
23319
+ if (error62 && !loading) {
23320
+ return /* @__PURE__ */ jsx(
23321
+ "p",
23322
+ {
23323
+ className: "px-2 py-2 text-xs text-muted-foreground",
23324
+ "data-testid": "org-private-nodes-error",
23325
+ children: tr(
23326
+ `${KEY}.loadError`,
23327
+ "Your organization's private nodes could not be loaded."
23328
+ )
23329
+ }
23330
+ );
23331
+ }
23332
+ return null;
23333
+ }
23334
+ const handleInstall = async (node2) => {
23335
+ const updating = node2.installed;
23336
+ const result = await install(node2);
23337
+ if (result.success) {
23338
+ toast.success(
23339
+ updating ? tr(`${KEY}.updateSuccessToast`, "Node updated") : tr(`${KEY}.installSuccessToast`, "Node installed"),
23340
+ {
23341
+ description: `${node2.name} v${node2.version} is in your workflow builder.`
23342
+ }
23343
+ );
23344
+ } else {
23345
+ toast.error(
23346
+ updating ? tr(`${KEY}.updateErrorToast`, "Update failed") : tr(`${KEY}.installErrorToast`, "Installation failed"),
23347
+ { description: result.error }
23348
+ );
23349
+ }
23350
+ };
23351
+ const handleUninstall = async (node2) => {
23352
+ const result = await uninstall(node2);
23353
+ if (result.success) {
23354
+ toast.success(tr(`${KEY}.uninstallSuccessToast`, "Node uninstalled"), {
23355
+ description: `${node2.name} was removed from this workspace.`
23356
+ });
23357
+ } else {
23358
+ toast.error(tr(`${KEY}.uninstallErrorToast`, "Uninstall failed"), {
23359
+ description: result.error
23360
+ });
23361
+ }
23362
+ };
23363
+ return /* @__PURE__ */ jsxs(
23364
+ "section",
23365
+ {
23366
+ className: "mb-2 rounded-lg border border-default px-1 py-1",
23367
+ "data-testid": "org-private-nodes",
23368
+ children: [
23369
+ /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-2 px-2 pt-2 pb-1", children: [
23370
+ /* @__PURE__ */ jsx(
23371
+ Icon,
23372
+ {
23373
+ icon: "mynaui:building",
23374
+ className: "size-4 shrink-0 text-muted-foreground"
23375
+ }
23376
+ ),
23377
+ /* @__PURE__ */ jsxs("div", { className: "min-w-0", children: [
23378
+ /* @__PURE__ */ jsx("p", { className: "text-xs font-semibold text-foreground leading-tight", children: tr(`${KEY}.title`, "Your organization") }),
23379
+ /* @__PURE__ */ jsx("p", { className: "text-[11px] text-muted-foreground leading-snug", children: canManage ? tr(
23380
+ `${KEY}.subtitleAdmin`,
23381
+ "Private nodes your organization published for its workspaces."
23382
+ ) : tr(
23383
+ `${KEY}.subtitleMember`,
23384
+ "Private nodes your organization published. Ask a workspace admin to install one."
23385
+ ) })
23386
+ ] })
23387
+ ] }),
23388
+ /* @__PURE__ */ jsx("div", { className: "flex flex-col gap-0.5", children: nodes.map((node2) => /* @__PURE__ */ jsx(
23389
+ OrganizationPrivateNodeRow,
23390
+ {
23391
+ node: node2,
23392
+ canManage,
23393
+ busy: busyApplicationId === node2.applicationId,
23394
+ disabled: busyApplicationId !== null,
23395
+ onInstall: (n) => void handleInstall(n),
23396
+ onUninstall: (n) => void handleUninstall(n)
23397
+ },
23398
+ node2.applicationId
23399
+ )) })
23400
+ ]
23401
+ }
23402
+ );
23403
+ }
23109
23404
  function deprecatedItemToProduct(item) {
23110
23405
  return {
23111
23406
  id: item.productId,
@@ -23300,102 +23595,105 @@ function StoreCategoryList({
23300
23595
  ] })
23301
23596
  ) : (
23302
23597
  /* Main category list */
23303
- /* @__PURE__ */ jsx("div", { className: "flex-1 overflow-y-auto px-2 pb-2", children: /* @__PURE__ */ jsxs("div", { className: "flex flex-col gap-0.5 pt-1", children: [
23304
- STORE_CATEGORIES.map((cat) => /* @__PURE__ */ jsxs(
23305
- "button",
23306
- {
23307
- onClick: () => onSelectCategory(cat),
23308
- className: "w-full flex items-center gap-3 px-2 py-3 rounded-lg border border-transparent hover:border-default hover:bg-muted/60 transition-colors text-left group",
23309
- children: [
23310
- /* @__PURE__ */ jsx(
23311
- "div",
23312
- {
23313
- className: "size-9 shrink-0 rounded-lg flex items-center justify-center",
23314
- style: {
23315
- backgroundColor: `color-mix(in oklab, var(${cat.color}) 16%, transparent)`
23316
- },
23317
- children: /* @__PURE__ */ jsx(
23318
- Icon,
23319
- {
23320
- icon: cat.icon,
23321
- className: "size-5",
23322
- style: { color: `var(${cat.color})` }
23323
- }
23324
- )
23325
- }
23326
- ),
23327
- /* @__PURE__ */ jsxs("div", { className: "flex-1 min-w-0", children: [
23328
- /* @__PURE__ */ jsx("p", { className: "text-sm font-medium text-foreground group-hover:text-primary transition-colors", children: cat.label }),
23329
- /* @__PURE__ */ jsx("p", { className: "text-xs text-muted-foreground truncate mt-0.5", children: cat.description })
23330
- ] }),
23331
- /* @__PURE__ */ jsx(
23332
- Icon,
23333
- {
23334
- icon: "mynaui:chevron-right",
23335
- className: "size-4 shrink-0 text-foreground/40 group-hover:translate-x-0.5 transition-transform"
23336
- }
23337
- )
23338
- ]
23339
- },
23340
- cat.key
23341
- )),
23342
- deprecatedInstallations.length > 0 && /* @__PURE__ */ jsxs(
23343
- "button",
23344
- {
23345
- onClick: () => setShowDeprecated(true),
23346
- className: "w-full flex items-center gap-3 px-2 py-3 rounded-lg border border-transparent hover:border-default hover:bg-muted/60 transition-colors text-left group",
23347
- children: [
23348
- /* @__PURE__ */ jsx(
23349
- "div",
23350
- {
23351
- className: "size-9 shrink-0 rounded-lg flex items-center justify-center",
23352
- style: {
23353
- backgroundColor: "var(--color-status-warning-bgSubtle)"
23354
- },
23355
- children: /* @__PURE__ */ jsx(
23356
- Icon,
23357
- {
23358
- icon: "mynaui:circle-warning",
23359
- className: "size-5",
23360
- style: {
23361
- color: "var(--color-status-warning-text)"
23598
+ /* @__PURE__ */ jsxs("div", { className: "flex-1 overflow-y-auto px-2 pb-2", children: [
23599
+ /* @__PURE__ */ jsx(OrganizationPrivateNodesSection, {}),
23600
+ /* @__PURE__ */ jsxs("div", { className: "flex flex-col gap-0.5 pt-1", children: [
23601
+ STORE_CATEGORIES.map((cat) => /* @__PURE__ */ jsxs(
23602
+ "button",
23603
+ {
23604
+ onClick: () => onSelectCategory(cat),
23605
+ className: "w-full flex items-center gap-3 px-2 py-3 rounded-lg border border-transparent hover:border-default hover:bg-muted/60 transition-colors text-left group",
23606
+ children: [
23607
+ /* @__PURE__ */ jsx(
23608
+ "div",
23609
+ {
23610
+ className: "size-9 shrink-0 rounded-lg flex items-center justify-center",
23611
+ style: {
23612
+ backgroundColor: `color-mix(in oklab, var(${cat.color}) 16%, transparent)`
23613
+ },
23614
+ children: /* @__PURE__ */ jsx(
23615
+ Icon,
23616
+ {
23617
+ icon: cat.icon,
23618
+ className: "size-5",
23619
+ style: { color: `var(${cat.color})` }
23362
23620
  }
23363
- }
23364
- )
23365
- }
23366
- ),
23367
- /* @__PURE__ */ jsxs("div", { className: "flex-1 min-w-0", children: [
23621
+ )
23622
+ }
23623
+ ),
23624
+ /* @__PURE__ */ jsxs("div", { className: "flex-1 min-w-0", children: [
23625
+ /* @__PURE__ */ jsx("p", { className: "text-sm font-medium text-foreground group-hover:text-primary transition-colors", children: cat.label }),
23626
+ /* @__PURE__ */ jsx("p", { className: "text-xs text-muted-foreground truncate mt-0.5", children: cat.description })
23627
+ ] }),
23368
23628
  /* @__PURE__ */ jsx(
23369
- "p",
23629
+ Icon,
23370
23630
  {
23371
- className: "text-sm font-medium group-hover:text-primary transition-colors",
23631
+ icon: "mynaui:chevron-right",
23632
+ className: "size-4 shrink-0 text-foreground/40 group-hover:translate-x-0.5 transition-transform"
23633
+ }
23634
+ )
23635
+ ]
23636
+ },
23637
+ cat.key
23638
+ )),
23639
+ deprecatedInstallations.length > 0 && /* @__PURE__ */ jsxs(
23640
+ "button",
23641
+ {
23642
+ onClick: () => setShowDeprecated(true),
23643
+ className: "w-full flex items-center gap-3 px-2 py-3 rounded-lg border border-transparent hover:border-default hover:bg-muted/60 transition-colors text-left group",
23644
+ children: [
23645
+ /* @__PURE__ */ jsx(
23646
+ "div",
23647
+ {
23648
+ className: "size-9 shrink-0 rounded-lg flex items-center justify-center",
23372
23649
  style: {
23373
- color: "var(--color-status-warning-text)"
23650
+ backgroundColor: "var(--color-status-warning-bgSubtle)"
23374
23651
  },
23375
- children: tr(
23376
- "fluidgrids.builder.storeCategoryList.deprecatedCategoryLabel",
23377
- "Deprecated"
23652
+ children: /* @__PURE__ */ jsx(
23653
+ Icon,
23654
+ {
23655
+ icon: "mynaui:circle-warning",
23656
+ className: "size-5",
23657
+ style: {
23658
+ color: "var(--color-status-warning-text)"
23659
+ }
23660
+ }
23378
23661
  )
23379
23662
  }
23380
23663
  ),
23381
- /* @__PURE__ */ jsxs("p", { className: "text-xs text-muted-foreground truncate mt-0.5", children: [
23382
- deprecatedInstallations.length,
23383
- " node",
23384
- deprecatedInstallations.length !== 1 ? "s" : "",
23385
- " no longer supported"
23386
- ] })
23387
- ] }),
23388
- /* @__PURE__ */ jsx(
23389
- Icon,
23390
- {
23391
- icon: "mynaui:chevron-right",
23392
- className: "size-4 shrink-0 text-foreground/40 group-hover:translate-x-0.5 transition-transform"
23393
- }
23394
- )
23395
- ]
23396
- }
23397
- )
23398
- ] }) })
23664
+ /* @__PURE__ */ jsxs("div", { className: "flex-1 min-w-0", children: [
23665
+ /* @__PURE__ */ jsx(
23666
+ "p",
23667
+ {
23668
+ className: "text-sm font-medium group-hover:text-primary transition-colors",
23669
+ style: {
23670
+ color: "var(--color-status-warning-text)"
23671
+ },
23672
+ children: tr(
23673
+ "fluidgrids.builder.storeCategoryList.deprecatedCategoryLabel",
23674
+ "Deprecated"
23675
+ )
23676
+ }
23677
+ ),
23678
+ /* @__PURE__ */ jsxs("p", { className: "text-xs text-muted-foreground truncate mt-0.5", children: [
23679
+ deprecatedInstallations.length,
23680
+ " node",
23681
+ deprecatedInstallations.length !== 1 ? "s" : "",
23682
+ " no longer supported"
23683
+ ] })
23684
+ ] }),
23685
+ /* @__PURE__ */ jsx(
23686
+ Icon,
23687
+ {
23688
+ icon: "mynaui:chevron-right",
23689
+ className: "size-4 shrink-0 text-foreground/40 group-hover:translate-x-0.5 transition-transform"
23690
+ }
23691
+ )
23692
+ ]
23693
+ }
23694
+ )
23695
+ ] })
23696
+ ] })
23399
23697
  )
23400
23698
  ] });
23401
23699
  }
@@ -24843,7 +25141,7 @@ function DesktopSidebarFragment({
24843
25141
  );
24844
25142
  if (nodesToInstall.length > 0) {
24845
25143
  const { getGlobalStoreClient: getStore } = await import('./global-client-KLOVTVPP.js');
24846
- const { InstallWorkflowNodeDocument: InstallWorkflowNodeDocument2 } = await import('./global-operations-ZWQZ7DNT.js');
25144
+ const { InstallWorkflowNodeDocument: InstallWorkflowNodeDocument2 } = await import('./global-operations-D2USVOPM.js');
24847
25145
  const { getFluidGridsConfig: getFluidGridsConfig3 } = await import('./config-T7BQ7AO2.js');
24848
25146
  const storeClient = getStore();
24849
25147
  const cfg = getFluidGridsConfig3();
@@ -24963,7 +25261,7 @@ function DesktopSidebarFragment({
24963
25261
  });
24964
25262
  try {
24965
25263
  const { getGlobalStoreClient: getStoreClient } = await import('./global-client-KLOVTVPP.js');
24966
- const { InstallWorkflowNodeDocument: InstallWorkflowNodeDocument2 } = await import('./global-operations-ZWQZ7DNT.js');
25264
+ const { InstallWorkflowNodeDocument: InstallWorkflowNodeDocument2 } = await import('./global-operations-D2USVOPM.js');
24967
25265
  const storeClient = getStoreClient();
24968
25266
  if (storeClient) {
24969
25267
  throwIfResultError(
@@ -26387,8 +26685,8 @@ var reducer = (state, action) => {
26387
26685
  if (toastId) {
26388
26686
  addToRemoveQueue(toastId);
26389
26687
  } else {
26390
- state.toasts.forEach((toast15) => {
26391
- addToRemoveQueue(toast15.id);
26688
+ state.toasts.forEach((toast16) => {
26689
+ addToRemoveQueue(toast16.id);
26392
26690
  });
26393
26691
  }
26394
26692
  return {
@@ -26422,7 +26720,7 @@ function dispatch(action) {
26422
26720
  listener(memoryState);
26423
26721
  });
26424
26722
  }
26425
- function toast4({ ...props }) {
26723
+ function toast5({ ...props }) {
26426
26724
  const id = genId();
26427
26725
  const update = (props2) => dispatch({
26428
26726
  type: actionTypes.UPDATE_TOAST,
@@ -26459,7 +26757,7 @@ function useToast() {
26459
26757
  }, [state]);
26460
26758
  return {
26461
26759
  ...state,
26462
- toast: toast4,
26760
+ toast: toast5,
26463
26761
  dismiss: (toastId) => dispatch({ type: actionTypes.DISMISS_TOAST, toastId })
26464
26762
  };
26465
26763
  }
@@ -27764,7 +28062,7 @@ function VisualMapperContent({
27764
28062
  mapping,
27765
28063
  onMappingChange
27766
28064
  }) {
27767
- const { toast: toast15 } = useToast();
28065
+ const { toast: toast16 } = useToast();
27768
28066
  const tr = useTr();
27769
28067
  const reactFlowWrapper = useRef(null);
27770
28068
  const [selectedSourceNode, setSelectedSourceNode] = useState(null);
@@ -27784,7 +28082,7 @@ function VisualMapperContent({
27784
28082
  targetOperation
27785
28083
  );
27786
28084
  if (generatedNodes.length === 0) {
27787
- toast15({
28085
+ toast16({
27788
28086
  title: tr(
27789
28087
  "fluidgrids.builder.visualMapper.noFieldsFoundTitle",
27790
28088
  "No fields found"
@@ -27810,7 +28108,7 @@ function VisualMapperContent({
27810
28108
  targetNode,
27811
28109
  targetOperation,
27812
28110
  setNodes,
27813
- toast15,
28111
+ toast16,
27814
28112
  tr
27815
28113
  ]);
27816
28114
  useEffect(() => {
@@ -27917,7 +28215,7 @@ function VisualMapperContent({
27917
28215
  }
27918
28216
  onMappingChange(updatedMapping);
27919
28217
  if (isCompatible) {
27920
- toast15({
28218
+ toast16({
27921
28219
  title: tr(
27922
28220
  "fluidgrids.builder.visualMapper.mappingCreatedTitle",
27923
28221
  "Mapping created"
@@ -27925,7 +28223,7 @@ function VisualMapperContent({
27925
28223
  description: `Mapped ${sourcePath} (${sourceType}) to ${targetPath} (${targetType})`
27926
28224
  });
27927
28225
  } else {
27928
- toast15({
28226
+ toast16({
27929
28227
  title: tr(
27930
28228
  "fluidgrids.builder.visualMapper.typeMismatchTitle",
27931
28229
  "Type mismatch warning"
@@ -27935,7 +28233,7 @@ function VisualMapperContent({
27935
28233
  });
27936
28234
  }
27937
28235
  } else {
27938
- toast15({
28236
+ toast16({
27939
28237
  title: tr(
27940
28238
  "fluidgrids.builder.visualMapper.invalidMappingTitle",
27941
28239
  "Invalid mapping"
@@ -27948,7 +28246,7 @@ function VisualMapperContent({
27948
28246
  });
27949
28247
  }
27950
28248
  },
27951
- [nodes, mapping, onMappingChange, toast15, tr, setEdges]
28249
+ [nodes, mapping, onMappingChange, toast16, tr, setEdges]
27952
28250
  );
27953
28251
  const onEdgeDelete = useCallback(
27954
28252
  (edge) => {
@@ -28005,7 +28303,7 @@ function VisualMapperContent({
28005
28303
  const handleSaveMappingDialog = (expression, targetFieldName) => {
28006
28304
  const targetPath = targetFieldName || selectedTargetNode?.data?.path;
28007
28305
  if (!targetPath) {
28008
- toast15({
28306
+ toast16({
28009
28307
  title: tr(
28010
28308
  "fluidgrids.builder.visualMapper.noTargetFieldTitle",
28011
28309
  "No target field specified"
@@ -28037,7 +28335,7 @@ function VisualMapperContent({
28037
28335
  }
28038
28336
  onMappingChange(updatedMapping);
28039
28337
  const mappingType = detectMappingType(expression);
28040
- toast15({
28338
+ toast16({
28041
28339
  title: `${mappingType.charAt(0).toUpperCase() + mappingType.slice(1)} mapping created`,
28042
28340
  description: `${tr("fluidgrids.builder.visualMapper.appliedMappingTo", "Applied mapping to")} ${targetPath}`
28043
28341
  });
@@ -28336,7 +28634,7 @@ function MappingEditor({
28336
28634
  setEdges,
28337
28635
  edgeId
28338
28636
  }) {
28339
- const { toast: toast15 } = useToast();
28637
+ const { toast: toast16 } = useToast();
28340
28638
  const tr = useTr();
28341
28639
  const [mappingJson, setMappingJson] = useState({});
28342
28640
  const [jsonDataString, setJsonDataString] = useState(
@@ -28460,7 +28758,7 @@ function MappingEditor({
28460
28758
  const handleSaveMapping = () => {
28461
28759
  try {
28462
28760
  checkJsonValidity();
28463
- toast15({
28761
+ toast16({
28464
28762
  title: tr(
28465
28763
  "fluidgrids.builder.mappingEditor.mappingSavedTitle",
28466
28764
  "Mapping saved"
@@ -28471,7 +28769,7 @@ function MappingEditor({
28471
28769
  )
28472
28770
  });
28473
28771
  } catch (error62) {
28474
- toast15({
28772
+ toast16({
28475
28773
  title: tr(
28476
28774
  "fluidgrids.builder.mappingEditor.errorSavingTitle",
28477
28775
  "Error saving mapping"
@@ -28490,7 +28788,7 @@ function MappingEditor({
28490
28788
  const parsedData = checkJsonValidity();
28491
28789
  const result = await applyMapping(parsedData, sampleInput);
28492
28790
  setPreviewOutput(result);
28493
- toast15({
28791
+ toast16({
28494
28792
  title: tr(
28495
28793
  "fluidgrids.builder.mappingEditor.mappingTestedTitle",
28496
28794
  "Mapping tested"
@@ -28502,7 +28800,7 @@ function MappingEditor({
28502
28800
  });
28503
28801
  } catch (error62) {
28504
28802
  console.error("Test mapping error:", error62);
28505
- toast15({
28803
+ toast16({
28506
28804
  title: tr(
28507
28805
  "fluidgrids.builder.mappingEditor.mappingTestFailedTitle",
28508
28806
  "Mapping test failed"
@@ -38409,6 +38707,15 @@ function NodeParamsForm({
38409
38707
  }
38410
38708
  ),
38411
38709
  isWebhookWait && /* @__PURE__ */ jsx(WaitResumeUrlField, {}),
38710
+ isAgentNodeType(nodeType) && /* @__PURE__ */ jsx(
38711
+ AgentDefinitionSelectField,
38712
+ {
38713
+ value: typeof argsState.agentDefinitionId === "string" ? argsState.agentDefinitionId : null,
38714
+ onChange: (next) => writeFixed("agentDefinitionId", next),
38715
+ sectionLabelClassName: SECTION_LABEL3,
38716
+ testIdPrefix
38717
+ }
38718
+ ),
38412
38719
  connectionAdapters.length > 0 && /* @__PURE__ */ jsxs("div", { className: "space-y-2", "data-testid": `${testIdPrefix}-connections`, children: [
38413
38720
  /* @__PURE__ */ jsx("div", { className: SECTION_LABEL3, children: tr(
38414
38721
  "fluidgrids.builder.nodeParamsForm.connectionsSection",