@burdenoff/fluidgrids-fe-sdk 2026.1027.8 → 2026.1027.10

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 (31) hide show
  1. package/dist/{ExecutionDetailPage-USR2FHJG.js → ExecutionDetailPage-CEHYFZT5.js} +4 -4
  2. package/dist/{ExecutionsListPage-DXB5JW5M.js → ExecutionsListPage-ZTVHW6AM.js} +5 -5
  3. package/dist/{WorkflowBuilder-DCBHTLQV.js → WorkflowBuilder-VMNP3DUG.js} +6 -6
  4. package/dist/{WorkflowsList-UMWRE2A4.js → WorkflowsList-KGIOK6JT.js} +6 -6
  5. package/dist/{chunk-QYIWDYAM.js → chunk-325LO7L6.js} +13 -5
  6. package/dist/{chunk-VEBGREBC.js → chunk-4UOQN3UM.js} +1 -1
  7. package/dist/{chunk-BJNYCF7W.js → chunk-7KEEHEWT.js} +20 -4
  8. package/dist/{chunk-5NKM536N.js → chunk-APYTEZWH.js} +17 -8
  9. package/dist/{chunk-LGYV42R5.js → chunk-H62NLSIW.js} +1 -1
  10. package/dist/{chunk-2MB4S2SF.js → chunk-IWQ4WES7.js} +5 -5
  11. package/dist/{chunk-544OG2D2.js → chunk-J7L5ZH4O.js} +12 -3
  12. package/dist/{chunk-6X63BRAK.js → chunk-JY42HPUN.js} +1 -1
  13. package/dist/{chunk-KHBG2QSU.js → chunk-K6OK4OM7.js} +125 -28
  14. package/dist/{chunk-M2RWCZMW.js → chunk-LK2BCDDY.js} +1 -1
  15. package/dist/{chunk-N6OJA6HB.js → chunk-PDXLDMNA.js} +3 -1
  16. package/dist/{chunk-C3QH24NZ.js → chunk-Q7X4I6JE.js} +4 -4
  17. package/dist/{chunk-ZXQMECLP.js → chunk-QKXAPYBM.js} +55 -20
  18. package/dist/{chunk-OCFDAYAP.js → chunk-UBA5E5HF.js} +1 -1
  19. package/dist/{chunk-7FJRQYOB.js → chunk-ZGAPALDV.js} +2 -1
  20. package/dist/{chunk-7V6FGPBY.js → chunk-ZGK2252O.js} +4 -4
  21. package/dist/{chunk-SNYCDFUI.js → chunk-ZNNHSUMP.js} +7 -3
  22. package/dist/executions.js +6 -6
  23. package/dist/history.js +3 -3
  24. package/dist/index.d.ts +3 -0
  25. package/dist/index.js +49 -27
  26. package/dist/observability.js +3 -3
  27. package/dist/settings.js +3 -3
  28. package/dist/templates.js +5 -5
  29. package/dist/workflow-builder.js +7 -7
  30. package/dist/workflows-list.js +6 -6
  31. package/package.json +3 -3
@@ -1,12 +1,12 @@
1
- export { ExecutionDetailPage } from './chunk-544OG2D2.js';
2
- import './chunk-N6OJA6HB.js';
3
- import './chunk-M2RWCZMW.js';
1
+ export { ExecutionDetailPage } from './chunk-J7L5ZH4O.js';
2
+ import './chunk-PDXLDMNA.js';
3
+ import './chunk-LK2BCDDY.js';
4
4
  import './chunk-5ERAJC2I.js';
5
5
  import './chunk-LON27G5P.js';
6
6
  import './chunk-MFCT3PVR.js';
7
7
  import './chunk-D3UWK7GY.js';
8
8
  import './chunk-PJAWNFJV.js';
9
- import './chunk-KHBG2QSU.js';
9
+ import './chunk-K6OK4OM7.js';
10
10
  import './chunk-JL7CASN5.js';
11
11
  import './chunk-PXIFUMLA.js';
12
12
  import './chunk-CY6KX4RG.js';
@@ -1,13 +1,13 @@
1
- export { ExecutionsListPage } from './chunk-SNYCDFUI.js';
2
- import './chunk-N6OJA6HB.js';
3
- import './chunk-M2RWCZMW.js';
1
+ export { ExecutionsListPage } from './chunk-ZNNHSUMP.js';
2
+ import './chunk-PDXLDMNA.js';
3
+ import './chunk-LK2BCDDY.js';
4
4
  import './chunk-5ERAJC2I.js';
5
5
  import './chunk-MFCT3PVR.js';
6
- import './chunk-LGYV42R5.js';
6
+ import './chunk-H62NLSIW.js';
7
7
  import './chunk-D3UWK7GY.js';
8
8
  import './chunk-PJAWNFJV.js';
9
9
  import './chunk-4VJ3MDOV.js';
10
- import './chunk-KHBG2QSU.js';
10
+ import './chunk-K6OK4OM7.js';
11
11
  import './chunk-JL7CASN5.js';
12
12
  import './chunk-PXIFUMLA.js';
13
13
  import './chunk-CY6KX4RG.js';
@@ -1,16 +1,16 @@
1
- export { WorkflowBuilder } from './chunk-7V6FGPBY.js';
2
- import './chunk-6X63BRAK.js';
3
- import './chunk-ZXQMECLP.js';
1
+ export { WorkflowBuilder } from './chunk-ZGK2252O.js';
2
+ import './chunk-JY42HPUN.js';
3
+ import './chunk-QKXAPYBM.js';
4
4
  import './chunk-GEMNVFPK.js';
5
5
  import './chunk-IEVSFCFS.js';
6
6
  import './chunk-YXMFRQYV.js';
7
7
  import './chunk-BQXVT32O.js';
8
- import './chunk-VEBGREBC.js';
8
+ import './chunk-4UOQN3UM.js';
9
9
  import './chunk-LON27G5P.js';
10
10
  import './chunk-MFCT3PVR.js';
11
- import './chunk-LGYV42R5.js';
11
+ import './chunk-H62NLSIW.js';
12
12
  import './chunk-4VJ3MDOV.js';
13
- import './chunk-KHBG2QSU.js';
13
+ import './chunk-K6OK4OM7.js';
14
14
  import './chunk-JL7CASN5.js';
15
15
  import './chunk-PXIFUMLA.js';
16
16
  import './chunk-CY6KX4RG.js';
@@ -1,13 +1,13 @@
1
- export { WorkflowsList } from './chunk-2MB4S2SF.js';
2
- import './chunk-6X63BRAK.js';
3
- import './chunk-M2RWCZMW.js';
1
+ export { WorkflowsList } from './chunk-IWQ4WES7.js';
2
+ import './chunk-JY42HPUN.js';
3
+ import './chunk-LK2BCDDY.js';
4
4
  import './chunk-5ERAJC2I.js';
5
- import './chunk-VEBGREBC.js';
6
- import './chunk-LGYV42R5.js';
5
+ import './chunk-4UOQN3UM.js';
6
+ import './chunk-H62NLSIW.js';
7
7
  import './chunk-D3UWK7GY.js';
8
8
  import './chunk-PJAWNFJV.js';
9
9
  import './chunk-4VJ3MDOV.js';
10
- import './chunk-KHBG2QSU.js';
10
+ import './chunk-K6OK4OM7.js';
11
11
  import './chunk-JL7CASN5.js';
12
12
  import './chunk-PXIFUMLA.js';
13
13
  import './chunk-CY6KX4RG.js';
@@ -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 } from './chunk-KHBG2QSU.js';
2
+ import { throwIfResultError, describeOperationError, useFluidGridsAnalytics, emitRunStarted, openRunQuotaUpgradePrompt } from './chunk-K6OK4OM7.js';
3
3
  import { useTr } from './chunk-UULVIT25.js';
4
4
  import { getFluidGridsClient } from './chunk-NTWG3CJX.js';
5
5
  import { useOptionalFeatureFlag } from '@burdenoff/fe-libs/shared/feature-flags';
@@ -680,10 +680,18 @@ function LogStreamingSettings() {
680
680
  ] }),
681
681
  /* @__PURE__ */ jsxs("div", { className: "flex justify-end gap-2", children: [
682
682
  /* @__PURE__ */ jsx(Button, { variant: "outline", onClick: resetForm, children: tr("fluidgrids.settings.logStreaming.cancel", "Cancel") }),
683
- /* @__PURE__ */ jsx(Button, { onClick: () => void save(), disabled: actions.loading, children: actions.loading ? tr("fluidgrids.settings.logStreaming.saving", "Saving\u2026") : tr(
684
- "fluidgrids.settings.logStreaming.save",
685
- "Save destination"
686
- ) })
683
+ /* @__PURE__ */ jsx(
684
+ Button,
685
+ {
686
+ "data-agent": "confirm",
687
+ onClick: () => void save(),
688
+ disabled: actions.loading,
689
+ children: actions.loading ? tr("fluidgrids.settings.logStreaming.saving", "Saving\u2026") : tr(
690
+ "fluidgrids.settings.logStreaming.save",
691
+ "Save destination"
692
+ )
693
+ }
694
+ )
687
695
  ] })
688
696
  ] })
689
697
  ] }),
@@ -1,4 +1,4 @@
1
- import { useFluidGridsAnalytics, emitWorkflowLimitHit, emitUpgradeClicked, WORKFLOWS_QUOTA_NAME } from './chunk-KHBG2QSU.js';
1
+ import { useFluidGridsAnalytics, emitWorkflowLimitHit, emitUpgradeClicked, WORKFLOWS_QUOTA_NAME } from './chunk-K6OK4OM7.js';
2
2
  import { useTr } from './chunk-UULVIT25.js';
3
3
  import { AlertDialog, AlertDialogContent, AlertDialogHeader, AlertDialogTitle, AlertDialogDescription, AlertDialogFooter, AlertDialogCancel, AlertDialogAction } from '@burdenoff/fe-libs/ui';
4
4
  import { useRef, useEffect } from 'react';
@@ -1,6 +1,6 @@
1
- import { useFluidGridsFlag, FLUIDGRIDS_FLAGS, LogStreamingTab } from './chunk-QYIWDYAM.js';
1
+ import { useFluidGridsFlag, FLUIDGRIDS_FLAGS, LogStreamingTab } from './chunk-325LO7L6.js';
2
2
  import { FluidGridsDocsLink } from './chunk-4VJ3MDOV.js';
3
- import { useFlowStore, useSaveStatusStore, useFluidGridsPermission, FLUIDGRIDS_PERMISSIONS, throwIfResultError } from './chunk-KHBG2QSU.js';
3
+ import { useFlowStore, useSaveStatusStore, useFluidGridsPermission, FLUIDGRIDS_PERMISSIONS, throwIfResultError } from './chunk-K6OK4OM7.js';
4
4
  import { useWorkflowDefinitionQuery, useUpdateWorkflowDefinitionMutation, useWorkflowDefinitionsQuery } from './chunk-2NUE2X74.js';
5
5
  import { useTr } from './chunk-UULVIT25.js';
6
6
  import { getFluidGridsClient } from './chunk-NTWG3CJX.js';
@@ -338,7 +338,15 @@ function RunDataTab() {
338
338
  }
339
339
  )
340
340
  ] }),
341
- /* @__PURE__ */ jsx("div", { className: "mt-4 flex justify-end", children: /* @__PURE__ */ jsx(Button, { onClick: () => void handleSave(), disabled: locked, children: saving ? tr("fluidgrids.settings.runData.saving", "Saving\u2026") : tr("fluidgrids.settings.runData.save", "Save") }) })
341
+ /* @__PURE__ */ jsx("div", { className: "mt-4 flex justify-end", children: /* @__PURE__ */ jsx(
342
+ Button,
343
+ {
344
+ "data-agent": "confirm",
345
+ onClick: () => void handleSave(),
346
+ disabled: locked,
347
+ children: saving ? tr("fluidgrids.settings.runData.saving", "Saving\u2026") : tr("fluidgrids.settings.runData.save", "Save")
348
+ }
349
+ ) })
342
350
  ] });
343
351
  }
344
352
 
@@ -967,7 +975,15 @@ function ExecutionTab({ workflowKey }) {
967
975
  "fluidgrids.settings.execution.readOnly",
968
976
  "You can see these settings but not change them: changing them needs permission to edit workflows."
969
977
  ) }),
970
- /* @__PURE__ */ jsx("div", { className: "mt-4 flex justify-end", children: /* @__PURE__ */ jsx(Button, { onClick: () => void handleSave(), disabled: locked, children: saving ? tr("fluidgrids.settings.execution.saving", "Saving\u2026") : tr("fluidgrids.settings.execution.save", "Save") }) })
978
+ /* @__PURE__ */ jsx("div", { className: "mt-4 flex justify-end", children: /* @__PURE__ */ jsx(
979
+ Button,
980
+ {
981
+ "data-agent": "confirm",
982
+ onClick: () => void handleSave(),
983
+ disabled: locked,
984
+ children: saving ? tr("fluidgrids.settings.execution.saving", "Saving\u2026") : tr("fluidgrids.settings.execution.save", "Save")
985
+ }
986
+ ) })
971
987
  ] });
972
988
  }
973
989
  function NotificationsTab() {
@@ -1,8 +1,8 @@
1
- import { Card, FluidGridsMark } from './chunk-ZXQMECLP.js';
1
+ import { Card, FluidGridsMark } from './chunk-QKXAPYBM.js';
2
2
  import { Input } from './chunk-IEVSFCFS.js';
3
3
  import { Button } from './chunk-BQXVT32O.js';
4
- import { useWorkflowDefinition } from './chunk-LGYV42R5.js';
5
- import { FluidGridsProvider, useFlowStore } from './chunk-KHBG2QSU.js';
4
+ import { useWorkflowDefinition } from './chunk-H62NLSIW.js';
5
+ import { FluidGridsProvider, useFlowStore } from './chunk-K6OK4OM7.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';
@@ -293,11 +293,20 @@ function FlowBuilderInner({
293
293
  )
294
294
  ] }),
295
295
  !readonly && /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-2", children: [
296
- /* @__PURE__ */ jsxs(Button, { variant: "outline", size: "sm", onClick: handleSave, children: [
297
- /* @__PURE__ */ jsx(Save, { className: "size-4 mr-1" }),
298
- tr("fluidgrids.components.workflowBuilderCore.save", "Save")
299
- ] }),
300
- /* @__PURE__ */ jsxs(Button, { size: "sm", onClick: handleExecute, children: [
296
+ /* @__PURE__ */ jsxs(
297
+ Button,
298
+ {
299
+ "data-agent": "confirm",
300
+ variant: "outline",
301
+ size: "sm",
302
+ onClick: handleSave,
303
+ children: [
304
+ /* @__PURE__ */ jsx(Save, { className: "size-4 mr-1" }),
305
+ tr("fluidgrids.components.workflowBuilderCore.save", "Save")
306
+ ]
307
+ }
308
+ ),
309
+ /* @__PURE__ */ jsxs(Button, { "data-agent": "confirm", size: "sm", onClick: handleExecute, children: [
301
310
  /* @__PURE__ */ jsx(Play, { className: "size-4 mr-1" }),
302
311
  tr("fluidgrids.components.workflowBuilderCore.run", "Run")
303
312
  ] })
@@ -1,4 +1,4 @@
1
- import { useFluidGridsAnalytics, throwIfResultError, emitWorkflowCreated, emitRunStarted, runTriggerFromMode, openRunQuotaUpgradePrompt, emitWorkflowPublished } from './chunk-KHBG2QSU.js';
1
+ import { useFluidGridsAnalytics, throwIfResultError, emitWorkflowCreated, emitRunStarted, runTriggerFromMode, openRunQuotaUpgradePrompt, emitWorkflowPublished } from './chunk-K6OK4OM7.js';
2
2
  import { getFluidGridsConfig } from './chunk-CY6KX4RG.js';
3
3
  import { WorkflowDefinitionsDocument, WorkflowDefinitionDocument, WorkflowVersionsDocument, CreateWorkflowDefinitionDocument, ImportWorkflowDocument, UpdateWorkflowDefinitionDocument, CreateWorkflowVersionDocument, DeleteWorkflowDefinitionDocument, DuplicateWorkflowDocument, RestoreWorkflowVersionDocument, TriggerWorkflowDocument, WorkflowRunsDocument, WorkflowRunDocument, DashboardSummaryDocument, ActivateWorkflowDefinitionDocument, DeactivateWorkflowDefinitionDocument } from './chunk-2NUE2X74.js';
4
4
  import { useTr } from './chunk-UULVIT25.js';
@@ -1,11 +1,11 @@
1
- import { CreateWorkflowRefusalDialog, firstWorkflowProgress, GUIDED_TOUR_STATE, builderPathFor } from './chunk-6X63BRAK.js';
2
- import { useExecutions } from './chunk-M2RWCZMW.js';
3
- import { QuotaExhaustedDialog } from './chunk-VEBGREBC.js';
4
- import { useCreateWorkflow, useWorkflowDefinitions, useLazyWorkflowDefinition, useImportWorkflow, useDuplicateWorkflow, useDeleteWorkflow } from './chunk-LGYV42R5.js';
1
+ import { CreateWorkflowRefusalDialog, firstWorkflowProgress, GUIDED_TOUR_STATE, builderPathFor } from './chunk-JY42HPUN.js';
2
+ import { useExecutions } from './chunk-LK2BCDDY.js';
3
+ import { QuotaExhaustedDialog } from './chunk-4UOQN3UM.js';
4
+ import { useCreateWorkflow, useWorkflowDefinitions, useLazyWorkflowDefinition, useImportWorkflow, useDuplicateWorkflow, useDeleteWorkflow } from './chunk-H62NLSIW.js';
5
5
  import { workflowsListControls } from './chunk-D3UWK7GY.js';
6
6
  import { useFluidGridsPageControls } from './chunk-PJAWNFJV.js';
7
7
  import { FluidGridsDocsLink } from './chunk-4VJ3MDOV.js';
8
- import { createThenOpen, useFluidGridsPermission, FLUIDGRIDS_PERMISSIONS, SdkPermissionButton, BILLING_PLANS_PATH, useFlowStore, SdkPermissionGate, isQuotaExhaustedFailure } from './chunk-KHBG2QSU.js';
8
+ import { createThenOpen, useFluidGridsPermission, FLUIDGRIDS_PERMISSIONS, SdkPermissionButton, BILLING_PLANS_PATH, useFlowStore, SdkPermissionGate, isQuotaExhaustedFailure } from './chunk-K6OK4OM7.js';
9
9
  import { useTr } from './chunk-UULVIT25.js';
10
10
  import { useState, useRef, useCallback, useMemo } from 'react';
11
11
  import { useNavigate } from 'react-router';
@@ -1,7 +1,7 @@
1
- import { buildNodeDisplayMap, ExecutionStatusBadge, formatRunVersion, NodeTimeline, RunLogViewer } from './chunk-N6OJA6HB.js';
2
- import { useExecution, useExecutionActions, useAutoRefresh } from './chunk-M2RWCZMW.js';
1
+ import { buildNodeDisplayMap, ExecutionStatusBadge, formatRunVersion, NodeTimeline, RunLogViewer } from './chunk-PDXLDMNA.js';
2
+ import { useExecution, useExecutionActions, useAutoRefresh } from './chunk-LK2BCDDY.js';
3
3
  import { EntityTagPicker } from './chunk-LON27G5P.js';
4
- import { throwIfResultError, useFluidGridsPermission, FLUIDGRIDS_PERMISSIONS } from './chunk-KHBG2QSU.js';
4
+ import { throwIfResultError, useFluidGridsPermission, FLUIDGRIDS_PERMISSIONS } from './chunk-K6OK4OM7.js';
5
5
  import { getFluidGridsConfig } from './chunk-CY6KX4RG.js';
6
6
  import { RunLogsDocument, RunLogAppendedDocument } from './chunk-2NUE2X74.js';
7
7
  import { useTr } from './chunk-UULVIT25.js';
@@ -553,6 +553,7 @@ function HumanRequestCard({
553
553
  /* @__PURE__ */ jsxs(
554
554
  Button,
555
555
  {
556
+ "data-agent": "confirm",
556
557
  size: "sm",
557
558
  disabled: loading,
558
559
  onClick: () => submit({ action: "approve" }),
@@ -566,6 +567,7 @@ function HumanRequestCard({
566
567
  request.approvalType === "double" && /* @__PURE__ */ jsxs(
567
568
  Button,
568
569
  {
570
+ "data-agent": "confirm",
569
571
  size: "sm",
570
572
  variant: "destructive",
571
573
  disabled: loading,
@@ -580,6 +582,7 @@ function HumanRequestCard({
580
582
  ] }) : /* @__PURE__ */ jsxs(
581
583
  Button,
582
584
  {
585
+ "data-agent": "confirm",
583
586
  size: "sm",
584
587
  disabled: loading || missingRequired || emptyText,
585
588
  onClick: () => submit(
@@ -1169,6 +1172,7 @@ function ExecutionDetailPage() {
1169
1172
  /* @__PURE__ */ jsxs(
1170
1173
  Button,
1171
1174
  {
1175
+ "data-agent": "confirm",
1172
1176
  variant: "outline",
1173
1177
  size: "sm",
1174
1178
  onClick: handlePause,
@@ -1185,6 +1189,7 @@ function ExecutionDetailPage() {
1185
1189
  /* @__PURE__ */ jsxs(
1186
1190
  Button,
1187
1191
  {
1192
+ "data-agent": "confirm",
1188
1193
  variant: "outline",
1189
1194
  size: "sm",
1190
1195
  onClick: handleCancel,
@@ -1204,6 +1209,7 @@ function ExecutionDetailPage() {
1204
1209
  humanRequestsCurrent && !awaitingPerson && /* @__PURE__ */ jsxs(
1205
1210
  Button,
1206
1211
  {
1212
+ "data-agent": "confirm",
1207
1213
  variant: "outline",
1208
1214
  size: "sm",
1209
1215
  onClick: handleResume,
@@ -1245,6 +1251,7 @@ function ExecutionDetailPage() {
1245
1251
  /* @__PURE__ */ jsxs(
1246
1252
  Button,
1247
1253
  {
1254
+ "data-agent": "confirm",
1248
1255
  variant: "outline",
1249
1256
  size: "sm",
1250
1257
  onClick: handleCancel,
@@ -1263,6 +1270,7 @@ function ExecutionDetailPage() {
1263
1270
  canControlRuns && execution.status === "PENDING" && /* @__PURE__ */ jsxs(
1264
1271
  Button,
1265
1272
  {
1273
+ "data-agent": "confirm",
1266
1274
  variant: "outline",
1267
1275
  size: "sm",
1268
1276
  onClick: handleCancel,
@@ -1303,6 +1311,7 @@ function ExecutionDetailPage() {
1303
1311
  canControlRuns && execution.status !== "RUNNING" && execution.status !== "PENDING" && execution.status !== "WAITING" && /* @__PURE__ */ jsxs(
1304
1312
  Button,
1305
1313
  {
1314
+ "data-agent": "confirm",
1306
1315
  variant: "outline",
1307
1316
  size: "sm",
1308
1317
  onClick: () => void handleReplay(),
@@ -1,4 +1,4 @@
1
- import { QuotaExhaustedDialog } from './chunk-VEBGREBC.js';
1
+ import { QuotaExhaustedDialog } from './chunk-4UOQN3UM.js';
2
2
  import { useTr } from './chunk-UULVIT25.js';
3
3
  import { jsx } from 'react/jsx-runtime';
4
4
 
@@ -12,7 +12,7 @@ import { addEdge, applyEdgeChanges, applyNodeChanges, useReactFlow, NodeResizer,
12
12
  import { create } from 'zustand';
13
13
  import { produce } from 'immer';
14
14
  import * as React2 from 'react';
15
- import { forwardRef, useState, useImperativeHandle, useRef, useEffect, useMemo, createContext, memo, useCallback, useContext, cloneElement, useSyncExternalStore } from 'react';
15
+ import { forwardRef, useState, useImperativeHandle, useRef, useEffect, useMemo, createContext, memo, useCallback, useSyncExternalStore, useContext, cloneElement } from 'react';
16
16
  import { Textarea, Input, Button, Card, Dialog, DialogTrigger, DialogContent, DialogHeader, DialogTitle, DialogDescription, DropdownMenu, DropdownMenuTrigger, DropdownMenuContent, DropdownMenuLabel, DropdownMenuItem, DropdownMenuSeparator } from '@burdenoff/fe-libs/ui';
17
17
  import { cn } from '@burdenoff/fe-libs/utils';
18
18
  import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
@@ -1247,6 +1247,7 @@ function synthesizeCardFromInputFields(inputFields) {
1247
1247
  const field = isRecord3(inputFields[name]) ? inputFields[name] : {};
1248
1248
  const description = typeof field.description === "string" ? field.description : void 0;
1249
1249
  const required = field.required === true;
1250
+ const secret = field.secret === true;
1250
1251
  const multiline = name === "body" || name === "htmlBody";
1251
1252
  const label = humanizeFieldName(name);
1252
1253
  body.push({
@@ -1259,7 +1260,10 @@ function synthesizeCardFromInputFields(inputFields) {
1259
1260
  id: `args.state.${name}`,
1260
1261
  value: `\${${name}}`,
1261
1262
  ...description ? { placeholder: description } : {},
1262
- ...multiline ? { isMultiline: true } : {},
1263
+ // A secret field renders masked (and agent tools treat a password
1264
+ // input as sensitive).
1265
+ ...secret ? { style: "Password" } : {},
1266
+ ...multiline && !secret ? { isMultiline: true } : {},
1263
1267
  ...required ? { isRequired: true, errorMessage: `${label} is required` } : {}
1264
1268
  });
1265
1269
  }
@@ -1269,6 +1273,36 @@ function synthesizeCardFromInputFields(inputFields) {
1269
1273
  });
1270
1274
  return { type: "AdaptiveCard", version: "1.5", body };
1271
1275
  }
1276
+ function secretFieldNames(inputFields) {
1277
+ const names = /* @__PURE__ */ new Set();
1278
+ if (!isRecord3(inputFields)) return names;
1279
+ for (const [name, field] of Object.entries(inputFields)) {
1280
+ if (isRecord3(field) && field.secret === true) names.add(name);
1281
+ }
1282
+ return names;
1283
+ }
1284
+ function fieldOfInputId(id) {
1285
+ if (typeof id !== "string") return null;
1286
+ const name = id.replace(/^(?:args\.)?state\./, "");
1287
+ return name.length > 0 ? name : null;
1288
+ }
1289
+ function maskSecretInputs(card, secrets) {
1290
+ if (secrets.size === 0) return card;
1291
+ const visit = (value) => {
1292
+ if (Array.isArray(value)) return value.map(visit);
1293
+ if (!isRecord3(value)) return value;
1294
+ const copy = {};
1295
+ for (const [key, nested] of Object.entries(value))
1296
+ copy[key] = visit(nested);
1297
+ const field = copy.type === "Input.Text" ? fieldOfInputId(copy.id) : null;
1298
+ if (field && secrets.has(field)) {
1299
+ copy.style = "Password";
1300
+ delete copy.isMultiline;
1301
+ }
1302
+ return copy;
1303
+ };
1304
+ return visit(card);
1305
+ }
1272
1306
  function validateUiSpec(raw) {
1273
1307
  if (!isRecord3(raw)) return "ui is not an object";
1274
1308
  if (raw.version !== 1)
@@ -1313,10 +1347,14 @@ function validateUiSpec(raw) {
1313
1347
  }
1314
1348
  function resolveUiSpec(operation) {
1315
1349
  if (!operation) return null;
1350
+ const secrets = secretFieldNames(operation.input_fields);
1316
1351
  if (operation.ui !== void 0) {
1317
1352
  const result = validateUiSpec(operation.ui);
1318
1353
  if (typeof result !== "string") {
1319
- return { spec: result, synthesized: false };
1354
+ const blocks = result.blocks.map(
1355
+ (block) => block.type === "adaptive_card" ? { ...block, card: maskSecretInputs(block.card, secrets) } : block
1356
+ );
1357
+ return { spec: { ...result, blocks }, synthesized: false };
1320
1358
  }
1321
1359
  console.warn(
1322
1360
  `ui-blocks: invalid ui declaration on operation "${operation.name ?? "?"}" (${result}); falling back to adaptive_card`
@@ -1327,7 +1365,11 @@ function resolveUiSpec(operation) {
1327
1365
  spec: {
1328
1366
  version: 1,
1329
1367
  blocks: [
1330
- { id: "main", type: "adaptive_card", card: operation.adaptive_card }
1368
+ {
1369
+ id: "main",
1370
+ type: "adaptive_card",
1371
+ card: maskSecretInputs(operation.adaptive_card, secrets)
1372
+ }
1331
1373
  ]
1332
1374
  },
1333
1375
  synthesized: true
@@ -2901,6 +2943,25 @@ var CREATE_CONNECTION = gql`
2901
2943
  }
2902
2944
  }
2903
2945
  `;
2946
+ var CONNECTIONS_PAGE_SIZE = 100;
2947
+ async function fetchAllConnectionPages(fetchPage) {
2948
+ const items = [];
2949
+ const seen = /* @__PURE__ */ new Set();
2950
+ let total = 0;
2951
+ let hasMore = false;
2952
+ for (let offset = 0; ; offset += CONNECTIONS_PAGE_SIZE) {
2953
+ const result = await fetchPage(offset);
2954
+ const fresh = (result?.items ?? []).filter((item) => !seen.has(item.id));
2955
+ for (const item of fresh) {
2956
+ seen.add(item.id);
2957
+ items.push(item);
2958
+ }
2959
+ total = result?.total ?? items.length;
2960
+ hasMore = result?.hasMore ?? false;
2961
+ if (!hasMore || fresh.length === 0 || items.length >= total) break;
2962
+ }
2963
+ return { items, total, hasMore: hasMore && items.length < total };
2964
+ }
2904
2965
  function useConnections(filter) {
2905
2966
  const [connections, setConnections] = useState([]);
2906
2967
  const [total, setTotal] = useState(0);
@@ -2914,17 +2975,20 @@ function useConnections(filter) {
2914
2975
  try {
2915
2976
  const client = getFluidGridsClient();
2916
2977
  const parsedFilter = filterKey ? JSON.parse(filterKey) : void 0;
2917
- const result = await client.query({
2918
- query: GET_CONNECTIONS,
2919
- variables: {
2920
- filter: parsedFilter,
2921
- pagination: { limit: 100 }
2922
- },
2923
- fetchPolicy: "network-only"
2978
+ const list = await fetchAllConnectionPages(async (offset) => {
2979
+ const result = await client.query({
2980
+ query: GET_CONNECTIONS,
2981
+ variables: {
2982
+ filter: parsedFilter,
2983
+ pagination: { limit: CONNECTIONS_PAGE_SIZE, offset }
2984
+ },
2985
+ fetchPolicy: "network-only"
2986
+ });
2987
+ return result.data?.getConnections;
2924
2988
  });
2925
- setConnections(result.data?.getConnections?.items ?? []);
2926
- setTotal(result.data?.getConnections?.total ?? 0);
2927
- setHasMore(result.data?.getConnections?.hasMore ?? false);
2989
+ setConnections(list.items);
2990
+ setTotal(list.total);
2991
+ setHasMore(list.hasMore);
2928
2992
  } catch (err) {
2929
2993
  setError(err);
2930
2994
  } finally {
@@ -3373,9 +3437,20 @@ var FLUIDGRIDS_PERMISSIONS = {
3373
3437
  };
3374
3438
 
3375
3439
  // src/modules/connections/utils/adapter-selection.ts
3440
+ var ANY_PROVIDER = "*";
3441
+ function isOptionalAdapter(adapter) {
3442
+ return adapter.required === false;
3443
+ }
3444
+ function newConnectionProviderKey(adapters) {
3445
+ if (adapters.length !== 1) return void 0;
3446
+ const provider = adapters[0]?.provider;
3447
+ return provider && provider !== ANY_PROVIDER ? provider : void 0;
3448
+ }
3376
3449
  function matchesAdapterProvider(adapter, providerKey) {
3377
3450
  const normalizedKey = providerKey.trim().toLowerCase();
3378
- return normalizedKey.length > 0 && (adapter.provider.trim().toLowerCase() === normalizedKey || adapter.name.trim().toLowerCase() === normalizedKey);
3451
+ if (normalizedKey.length === 0) return false;
3452
+ if (adapter.provider.trim() === ANY_PROVIDER) return true;
3453
+ return adapter.provider.trim().toLowerCase() === normalizedKey || adapter.name.trim().toLowerCase() === normalizedKey;
3379
3454
  }
3380
3455
  function connectionsForAdapter(connections, adapterName) {
3381
3456
  return connections.filter(
@@ -3395,6 +3470,11 @@ function replaceAdapterConnections(connections, adapterName, connectionIds = [])
3395
3470
  }))
3396
3471
  ];
3397
3472
  }
3473
+ function missingRequiredAdapters(adapters, selected) {
3474
+ return adapters.filter(
3475
+ (adapter) => !isOptionalAdapter(adapter) && !selected.some((connection) => connection.adapter === adapter.name)
3476
+ );
3477
+ }
3398
3478
  function formatAge(dateString) {
3399
3479
  try {
3400
3480
  return formatDistanceToNow(new Date(dateString), { addSuffix: true });
@@ -3780,8 +3860,7 @@ function AdapterConnectionSelector({
3780
3860
  DropdownMenuItem,
3781
3861
  {
3782
3862
  onClick: () => {
3783
- const singleProvider = adapters.length === 1 ? adapters[0].provider : void 0;
3784
- handleNewConnection(singleProvider);
3863
+ handleNewConnection(newConnectionProviderKey(adapters));
3785
3864
  },
3786
3865
  className: "text-primary cursor-pointer",
3787
3866
  children: [
@@ -3808,10 +3887,7 @@ function AdapterConnectionSelector({
3808
3887
  {
3809
3888
  variant: "ghost",
3810
3889
  size: "sm",
3811
- onClick: () => {
3812
- const singleProvider = adapters.length === 1 ? adapters[0].provider : void 0;
3813
- handleNewConnection(singleProvider);
3814
- },
3890
+ onClick: () => handleNewConnection(newConnectionProviderKey(adapters)),
3815
3891
  className: "text-primary hover:text-primary/80",
3816
3892
  children: [
3817
3893
  /* @__PURE__ */ jsx(Icon, { icon: "mdi:plus", className: "w-4 h-4 mr-1" }),
@@ -3822,7 +3898,7 @@ function AdapterConnectionSelector({
3822
3898
  }
3823
3899
  )
3824
3900
  ] }),
3825
- showStatus && showRequired && selectedConnections.length === 0 && adapters.length > 0 && /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-1.5 text-xs text-[var(--color-status-warning-text)]", children: [
3901
+ showStatus && showRequired && selectedConnections.length === 0 && adapters.some((adapter) => !isOptionalAdapter(adapter)) && /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-1.5 text-xs text-[var(--color-status-warning-text)]", children: [
3826
3902
  /* @__PURE__ */ jsx(Icon, { icon: "mdi:alert-circle", className: "w-3.5 h-3.5" }),
3827
3903
  /* @__PURE__ */ jsx("span", { children: tr(
3828
3904
  "fluidgrids.connections.connectionSelector.connectionRequired",
@@ -4468,6 +4544,7 @@ var NodeCard = React2.forwardRef(
4468
4544
  onExecute && /* @__PURE__ */ jsx(
4469
4545
  ToolbarButton2,
4470
4546
  {
4547
+ "data-agent": "confirm",
4471
4548
  title: tr(
4472
4549
  "fluidgrids.builder.nodeCard.executeTooltip",
4473
4550
  "Execute step"
@@ -4600,12 +4677,14 @@ function ToolbarButton2({
4600
4677
  title,
4601
4678
  onClick,
4602
4679
  disabled,
4603
- children
4680
+ children,
4681
+ "data-agent": agent
4604
4682
  }) {
4605
4683
  return /* @__PURE__ */ jsx(
4606
4684
  "button",
4607
4685
  {
4608
4686
  type: "button",
4687
+ "data-agent": agent,
4609
4688
  title,
4610
4689
  disabled,
4611
4690
  onClick: (e) => {
@@ -6036,6 +6115,13 @@ function useSaveWorkflow() {
6036
6115
  dismissQuotaExhausted: () => statusActions.setQuotaExhausted(false)
6037
6116
  };
6038
6117
  }
6118
+ function useNodeRegistryRevision() {
6119
+ return useSyncExternalStore(
6120
+ onNodeTypesUpdate,
6121
+ getNodeRegistryRevision,
6122
+ getNodeRegistryRevision
6123
+ );
6124
+ }
6039
6125
  function NodePropertyPanel({
6040
6126
  id,
6041
6127
  type,
@@ -6064,7 +6150,10 @@ function NodePropertyPanel({
6064
6150
  const dataSinkSaveNodeIdRef = useRef(null);
6065
6151
  useFlowStore((s) => s.workflow.id);
6066
6152
  const { saveToBackend, isSaving } = useSaveWorkflow();
6153
+ const registryRevision = useNodeRegistryRevision();
6067
6154
  const operationsArray = useMemo(() => {
6155
+ const live = liveInternalOperations(type);
6156
+ if (live) return live;
6068
6157
  const nodeDataOps = data?.nodeData?.operations;
6069
6158
  if (nodeDataOps) {
6070
6159
  const ops = Array.isArray(nodeDataOps) ? nodeDataOps : nodeDataOps.operations;
@@ -6077,7 +6166,7 @@ function NodePropertyPanel({
6077
6166
  return nodeConfig.operations;
6078
6167
  }
6079
6168
  return [];
6080
- }, [data?.nodeData?.operations, type]);
6169
+ }, [data?.nodeData?.operations, type, registryRevision]);
6081
6170
  const currentOperation = useMemo(
6082
6171
  () => operationsArray.find(
6083
6172
  (op) => op.name === data?.operation_name
@@ -7244,9 +7333,7 @@ var getNodeMetadata = (value) => {
7244
7333
  );
7245
7334
  if (visibleAdapters.length === 0) return false;
7246
7335
  const selected2 = data?.args?.connections ?? data?.args?.credentials ?? [];
7247
- return visibleAdapters.some(
7248
- (adapter) => !selected2.some((sel) => sel.adapter === adapter.name)
7249
- );
7336
+ return missingRequiredAdapters(visibleAdapters, selected2).length > 0;
7250
7337
  }, [data]);
7251
7338
  if (isAdapterSubNode) {
7252
7339
  return /* @__PURE__ */ jsx(SubNodeComponent, { ...props, nodeType: value?.type });
@@ -7632,9 +7719,19 @@ function onNodeTypesUpdate(listener) {
7632
7719
  nodeTypesListeners.add(listener);
7633
7720
  return () => nodeTypesListeners.delete(listener);
7634
7721
  }
7722
+ var nodeRegistryRevision = 0;
7723
+ function getNodeRegistryRevision() {
7724
+ return nodeRegistryRevision;
7725
+ }
7635
7726
  function notifyNodeTypesListeners() {
7727
+ nodeRegistryRevision += 1;
7636
7728
  nodeTypesListeners.forEach((listener) => listener());
7637
7729
  }
7730
+ function liveInternalOperations(type) {
7731
+ if (!type?.startsWith("internal:")) return void 0;
7732
+ const operations = NODE_CONFIGS.find((c) => c.type === type)?.operations;
7733
+ return Array.isArray(operations) && operations.length > 0 ? operations : void 0;
7734
+ }
7638
7735
  function ensureNodeConfigsLoaded() {
7639
7736
  if (isInitialized) {
7640
7737
  return Promise.resolve();
@@ -8561,4 +8658,4 @@ function useNodeExecution() {
8561
8658
  };
8562
8659
  }
8563
8660
 
8564
- export { ALLOW_ALL_PERMISSIONS, AUTOSAVE_DEBOUNCE_MS, AUTOSAVE_RETRY_DELAYS_MS, AVAILABLE_NODES, BILLING_PLANS_PATH, ConnectionFormDialog, ConnectionSelector, ExpressionEditor, FLUIDGRIDS_PERMISSIONS, FluidGridsContext, FluidGridsPermissionsProvider, FluidGridsProvider, NODES, NODES_METADATA, NODE_CONFIGS, NODE_OPERATION_DRAG_DATA_FORMAT, NODE_TYPES, NODE_TYPE_DRAG_DATA_FORMAT, NodePropertyPanel, NodeTypeIcon, RUNS_QUOTA_NAME, STICKY_NOTE_TYPE, SdkPermissionButton, SdkPermissionGate, Tooltip, TooltipContent, TooltipProvider, TooltipTrigger, WORKFLOWS_QUOTA_NAME, blankWorkflowCreateInput, buildOperationSeed, buildStickyNode, canAutosave, canRenderOperationPanel, classifyCreateRefusal, createConfiguredNode, createThenOpen, declaredOutputFields, describeOperationError, editStateOf, emitNodeInstalled, emitRunFailed, emitRunLimitHit, emitRunStarted, emitTemplateUsed, emitUpgradeClicked, emitWorkflowCreated, emitWorkflowLimitHit, emitWorkflowPublished, ensureNodeConfigsLoaded, evaluatePermissionCheck, fieldsFromIO, fieldsFromValue, findQuotaRefusal, formatParameterValue, getNodeDetail, getNodeMetadata, inAppLeaveTarget, isImageIcon, isNodeConfigsInitialized, isNodeTrigger, isQuotaExhaustedFailure, isTriggerOperation, leaveNeedsConfirmation, listCustomBlocks, mergeStickyNotes, nodeAccent, nodesOf, onNodeTypesUpdate, openRunQuotaUpgradePrompt, parseParameterValue, pathToExpression, refetchStoreNodes, registerCustomBlock, registerWorkflowNodeTypes, resolveInputHandles, resolveNodeOperation, resolveOperationName, resolveOutputHandles, resolveUiSpec, runTriggerFromMode, saveIndicatorOf, snapshotForSave, stripSubmitActions, structuredParameterType, subscribeWorkflowSaved, synchronizeOperationUpdate, throwIfResultError, useConnection, useConnections, useConnectionsByProvider, useCreateConnection, useFlowStore, useFluidGridsAnalytics, useFluidGridsContext, useFluidGridsPermission, useInitiateOAuth, useInsertNode, useIsValidConnection, useNodeExecution, useProviders, useSaveStatusStore, useSaveWorkflow, workflowFingerprint };
8661
+ export { ALLOW_ALL_PERMISSIONS, AUTOSAVE_DEBOUNCE_MS, AUTOSAVE_RETRY_DELAYS_MS, AVAILABLE_NODES, BILLING_PLANS_PATH, ConnectionFormDialog, ConnectionSelector, ExpressionEditor, FLUIDGRIDS_PERMISSIONS, FluidGridsContext, FluidGridsPermissionsProvider, FluidGridsProvider, NODES, NODES_METADATA, NODE_CONFIGS, NODE_OPERATION_DRAG_DATA_FORMAT, NODE_TYPES, NODE_TYPE_DRAG_DATA_FORMAT, NodePropertyPanel, NodeTypeIcon, RUNS_QUOTA_NAME, STICKY_NOTE_TYPE, SdkPermissionButton, SdkPermissionGate, Tooltip, TooltipContent, TooltipProvider, TooltipTrigger, WORKFLOWS_QUOTA_NAME, blankWorkflowCreateInput, buildOperationSeed, buildStickyNode, canAutosave, canRenderOperationPanel, classifyCreateRefusal, createConfiguredNode, createThenOpen, declaredOutputFields, describeOperationError, editStateOf, emitNodeInstalled, emitRunFailed, emitRunLimitHit, emitRunStarted, emitTemplateUsed, emitUpgradeClicked, emitWorkflowCreated, emitWorkflowLimitHit, emitWorkflowPublished, ensureNodeConfigsLoaded, evaluatePermissionCheck, fieldsFromIO, fieldsFromValue, findQuotaRefusal, formatParameterValue, getNodeDetail, getNodeMetadata, inAppLeaveTarget, isImageIcon, isNodeConfigsInitialized, isNodeTrigger, isQuotaExhaustedFailure, isTriggerOperation, leaveNeedsConfirmation, listCustomBlocks, liveInternalOperations, mergeStickyNotes, nodeAccent, nodesOf, onNodeTypesUpdate, openRunQuotaUpgradePrompt, parseParameterValue, pathToExpression, refetchStoreNodes, registerCustomBlock, registerWorkflowNodeTypes, resolveInputHandles, resolveNodeOperation, resolveOperationName, resolveOutputHandles, resolveUiSpec, runTriggerFromMode, saveIndicatorOf, snapshotForSave, stripSubmitActions, structuredParameterType, subscribeWorkflowSaved, synchronizeOperationUpdate, throwIfResultError, useConnection, useConnections, useConnectionsByProvider, useCreateConnection, useFlowStore, useFluidGridsAnalytics, useFluidGridsContext, useFluidGridsPermission, useInitiateOAuth, useInsertNode, useIsValidConnection, useNodeExecution, useNodeRegistryRevision, useProviders, useSaveStatusStore, useSaveWorkflow, workflowFingerprint };
@@ -1,5 +1,5 @@
1
1
  import { REPLAY_WORKFLOW_RUN, RETRY_WORKFLOW_RUNS } from './chunk-5ERAJC2I.js';
2
- import { useFluidGridsAnalytics, throwIfResultError, emitRunStarted, openRunQuotaUpgradePrompt } from './chunk-KHBG2QSU.js';
2
+ import { useFluidGridsAnalytics, throwIfResultError, emitRunStarted, openRunQuotaUpgradePrompt } from './chunk-K6OK4OM7.js';
3
3
  import { useExecutionsStore } from './chunk-CY6KX4RG.js';
4
4
  import { ExecutionsListDocument, ExecutionDetailDocument, ExecutionStatsDocument, PauseExecutionDocument, ResumeExecutionDocument, CancelExecutionDocument, RetryNodeDocument, TriggerWorkflowDocument, TerminateExecutionDocument } from './chunk-2NUE2X74.js';
5
5
  import { useTr } from './chunk-UULVIT25.js';