@burdenoff/fluidgrids-fe-sdk 2026.922.11 → 2026.922.13

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.
package/dist/index.js CHANGED
@@ -42,7 +42,7 @@ import { Icon } from '@iconify/react';
42
42
  import { ErrorBoundary } from '@burdenoff/fe-libs/shared/components';
43
43
  import '@xyflow/react/dist/style.css';
44
44
  import { Button } from '@burdenoff/fe-libs/button';
45
- import { Tabs, TabsList, TabsTrigger, TabsContent, Card, Table, TableHeader, TableRow, TableHead, TableBody, TableCell, Badge, CardHeader, Label, Input, Switch, Dialog, DialogContent, DialogHeader, DialogTitle, Select, SelectTrigger, SelectValue, SelectContent, SelectItem, DialogFooter } from '@burdenoff/fe-libs/ui';
45
+ import { Tabs, TabsList, TabsTrigger, TabsContent, Card, CardContent, Table, TableHeader, TableRow, TableHead, TableBody, TableCell, Badge, CardHeader, Label, Input, Switch, Dialog, DialogContent, DialogHeader, DialogTitle, Select, SelectTrigger, SelectValue, SelectContent, SelectItem, DialogFooter, Textarea } from '@burdenoff/fe-libs/ui';
46
46
  import { toast } from 'sonner';
47
47
  import { gql } from '@apollo/client';
48
48
  import * as TabsPrimitive from '@radix-ui/react-tabs';
@@ -1010,17 +1010,24 @@ function ExternalProvidersTab() {
1010
1010
  const { saveConfig, loading: saving } = useSaveSecretsProviderConfig();
1011
1011
  const { testConnection, loading: testing } = useTestSecretsProviderConnection();
1012
1012
  const awsConfig = configs.find((c) => c.provider === "AWS_SECRETS_MANAGER");
1013
- const [prefix, setPrefix] = useState(
1014
- awsConfig?.awsSecretsManagerPrefix ?? ""
1015
- );
1016
- const [region, setRegion] = useState(awsConfig?.awsRegion ?? "ap-south-1");
1017
- const [enabled, setEnabled] = useState(awsConfig?.isEnabled ?? false);
1018
- const [lastTest, setLastTest] = useState(
1019
- awsConfig?.lastTestStatus ? {
1020
- success: awsConfig.lastTestStatus === "SUCCESS",
1021
- message: awsConfig.lastTestMessage ?? ""
1022
- } : null
1023
- );
1013
+ const [prefix, setPrefix] = useState("");
1014
+ const [region, setRegion] = useState("ap-south-1");
1015
+ const [enabled, setEnabled] = useState(false);
1016
+ const [lastTest, setLastTest] = useState(null);
1017
+ const [hydratedConfigId, setHydratedConfigId] = useState(null);
1018
+ useEffect(() => {
1019
+ if (!awsConfig || awsConfig.id === hydratedConfigId) return;
1020
+ setPrefix(awsConfig.awsSecretsManagerPrefix ?? "");
1021
+ setRegion(awsConfig.awsRegion ?? "ap-south-1");
1022
+ setEnabled(awsConfig.isEnabled);
1023
+ setLastTest(
1024
+ awsConfig.lastTestStatus ? {
1025
+ success: awsConfig.lastTestStatus === "SUCCESS",
1026
+ message: awsConfig.lastTestMessage ?? ""
1027
+ } : null
1028
+ );
1029
+ setHydratedConfigId(awsConfig.id);
1030
+ }, [awsConfig, hydratedConfigId]);
1024
1031
  const handleSave = useCallback(async () => {
1025
1032
  try {
1026
1033
  await saveConfig({
@@ -1173,6 +1180,404 @@ function VariablesPage() {
1173
1180
  ] })
1174
1181
  ] });
1175
1182
  }
1183
+ var TOOL_APPROVAL_FIELDS = gql`
1184
+ fragment ToolApprovalRequestFields on ToolApprovalRequest {
1185
+ id
1186
+ runId
1187
+ nodeId
1188
+ workflowId
1189
+ workflowKey
1190
+ status
1191
+ toolCalls {
1192
+ callId
1193
+ name
1194
+ argsJson
1195
+ }
1196
+ decisions {
1197
+ callId
1198
+ decision
1199
+ reason
1200
+ }
1201
+ timeoutAt
1202
+ timeoutAction
1203
+ requestedAt
1204
+ decidedAt
1205
+ decidedBy
1206
+ }
1207
+ `;
1208
+ var GET_PENDING_TOOL_APPROVALS = gql`
1209
+ ${TOOL_APPROVAL_FIELDS}
1210
+ query GetPendingToolApprovals($limit: Int, $offset: Int) {
1211
+ pendingToolApprovals(limit: $limit, offset: $offset) {
1212
+ totalCount
1213
+ items {
1214
+ ...ToolApprovalRequestFields
1215
+ }
1216
+ }
1217
+ }
1218
+ `;
1219
+ var DECIDE_TOOL_APPROVAL = gql`
1220
+ ${TOOL_APPROVAL_FIELDS}
1221
+ mutation DecideToolApproval(
1222
+ $id: ID!
1223
+ $decisions: [ToolApprovalDecisionInput!]!
1224
+ ) {
1225
+ decideToolApproval(id: $id, decisions: $decisions) {
1226
+ success
1227
+ error
1228
+ resumedFromNodeId
1229
+ request {
1230
+ ...ToolApprovalRequestFields
1231
+ }
1232
+ }
1233
+ }
1234
+ `;
1235
+ function usePendingToolApprovals(options) {
1236
+ const limit = options?.limit ?? 50;
1237
+ const offset = options?.offset ?? 0;
1238
+ const pollIntervalMs = options?.pollIntervalMs ?? 15e3;
1239
+ const [items, setItems] = useState([]);
1240
+ const [totalCount, setTotalCount] = useState(0);
1241
+ const [loading, setLoading] = useState(true);
1242
+ const [error, setError] = useState(null);
1243
+ const fetchData = useCallback(async () => {
1244
+ setError(null);
1245
+ try {
1246
+ const client = getFluidGridsClient();
1247
+ const result = await client.query({
1248
+ query: GET_PENDING_TOOL_APPROVALS,
1249
+ variables: { limit, offset },
1250
+ fetchPolicy: "network-only"
1251
+ });
1252
+ setItems(result.data?.pendingToolApprovals?.items ?? []);
1253
+ setTotalCount(result.data?.pendingToolApprovals?.totalCount ?? 0);
1254
+ } catch (err) {
1255
+ setError(err);
1256
+ } finally {
1257
+ setLoading(false);
1258
+ }
1259
+ }, [limit, offset]);
1260
+ useEffect(() => {
1261
+ fetchData();
1262
+ if (pollIntervalMs <= 0) return;
1263
+ const interval = setInterval(fetchData, pollIntervalMs);
1264
+ return () => clearInterval(interval);
1265
+ }, [fetchData, pollIntervalMs]);
1266
+ return { items, totalCount, loading, error, refetch: fetchData };
1267
+ }
1268
+ function useDecideToolApproval() {
1269
+ const [loading, setLoading] = useState(false);
1270
+ const [error, setError] = useState(null);
1271
+ const decide = useCallback(
1272
+ async (id, decisions) => {
1273
+ setLoading(true);
1274
+ setError(null);
1275
+ try {
1276
+ const client = getFluidGridsClient();
1277
+ const result = throwIfResultError(
1278
+ await client.mutate({
1279
+ mutation: DECIDE_TOOL_APPROVAL,
1280
+ variables: { id, decisions }
1281
+ })
1282
+ );
1283
+ const response = result.data?.decideToolApproval;
1284
+ if (!response?.success) {
1285
+ throw new Error(response?.error ?? "Failed to record the decision");
1286
+ }
1287
+ return response;
1288
+ } catch (err) {
1289
+ setError(err);
1290
+ throw err;
1291
+ } finally {
1292
+ setLoading(false);
1293
+ }
1294
+ },
1295
+ []
1296
+ );
1297
+ const decideAll = useCallback(
1298
+ async (request, decision, reason) => {
1299
+ return decide(
1300
+ request.id,
1301
+ request.toolCalls.map((call) => ({
1302
+ callId: call.callId,
1303
+ decision,
1304
+ reason
1305
+ }))
1306
+ );
1307
+ },
1308
+ [decide]
1309
+ );
1310
+ return { decide, decideAll, loading, error };
1311
+ }
1312
+ function formatArgs(argsJson) {
1313
+ try {
1314
+ return JSON.stringify(JSON.parse(argsJson), null, 2);
1315
+ } catch {
1316
+ return argsJson;
1317
+ }
1318
+ }
1319
+ function timeAgo(iso, tr) {
1320
+ const then = new Date(iso).getTime();
1321
+ const diffMs = Date.now() - then;
1322
+ const minutes = Math.floor(diffMs / 6e4);
1323
+ if (minutes < 1) return tr("fluidgrids.toolApproval.justNow", "just now");
1324
+ if (minutes < 60)
1325
+ return tr("fluidgrids.toolApproval.minutesAgo", "{{minutes}}m ago", {
1326
+ minutes
1327
+ });
1328
+ const hours = Math.floor(minutes / 60);
1329
+ if (hours < 24)
1330
+ return tr("fluidgrids.toolApproval.hoursAgo", "{{hours}}h ago", { hours });
1331
+ const days = Math.floor(hours / 24);
1332
+ return tr("fluidgrids.toolApproval.daysAgo", "{{days}}d ago", { days });
1333
+ }
1334
+ function RejectDialog({
1335
+ open,
1336
+ onOpenChange,
1337
+ onConfirm,
1338
+ submitting
1339
+ }) {
1340
+ const tr = useTr();
1341
+ const [reason, setReason] = useState("");
1342
+ return /* @__PURE__ */ jsx(Dialog, { open, onOpenChange, children: /* @__PURE__ */ jsxs(DialogContent, { children: [
1343
+ /* @__PURE__ */ jsx(DialogHeader, { children: /* @__PURE__ */ jsx(DialogTitle, { children: tr(
1344
+ "fluidgrids.toolApproval.rejectDialogTitle",
1345
+ "Reject tool call"
1346
+ ) }) }),
1347
+ /* @__PURE__ */ jsxs("div", { className: "space-y-1.5", children: [
1348
+ /* @__PURE__ */ jsx(Label, { htmlFor: "reject-reason", children: tr(
1349
+ "fluidgrids.toolApproval.rejectReasonLabel",
1350
+ "Reason (optional)"
1351
+ ) }),
1352
+ /* @__PURE__ */ jsx(
1353
+ Textarea,
1354
+ {
1355
+ id: "reject-reason",
1356
+ value: reason,
1357
+ onChange: (e) => setReason(e.target.value),
1358
+ placeholder: tr(
1359
+ "fluidgrids.toolApproval.rejectReasonPlaceholder",
1360
+ "Why is this call being rejected? The agent sees this."
1361
+ )
1362
+ }
1363
+ )
1364
+ ] }),
1365
+ /* @__PURE__ */ jsxs(DialogFooter, { children: [
1366
+ /* @__PURE__ */ jsx(
1367
+ Button,
1368
+ {
1369
+ variant: "outline",
1370
+ onClick: () => onOpenChange(false),
1371
+ disabled: submitting,
1372
+ children: tr("fluidgrids.toolApproval.cancel", "Cancel")
1373
+ }
1374
+ ),
1375
+ /* @__PURE__ */ jsx(
1376
+ Button,
1377
+ {
1378
+ variant: "destructive",
1379
+ onClick: () => onConfirm(reason),
1380
+ disabled: submitting,
1381
+ children: submitting ? tr("fluidgrids.toolApproval.rejecting", "Rejecting\u2026") : tr("fluidgrids.toolApproval.rejectConfirm", "Reject")
1382
+ }
1383
+ )
1384
+ ] })
1385
+ ] }) });
1386
+ }
1387
+ function RequestCard({ request, onDecided }) {
1388
+ const tr = useTr();
1389
+ const { decideAll, loading } = useDecideToolApproval();
1390
+ const [showReject, setShowReject] = useState(false);
1391
+ const handleDecide = async (decision, reason) => {
1392
+ try {
1393
+ await decideAll(request, decision, reason);
1394
+ toast.success(
1395
+ decision === "APPROVED" ? tr(
1396
+ "fluidgrids.toolApproval.approvedToast",
1397
+ "Tool call approved \u2014 run resumed"
1398
+ ) : tr(
1399
+ "fluidgrids.toolApproval.rejectedToast",
1400
+ "Tool call rejected \u2014 run resumed"
1401
+ )
1402
+ );
1403
+ setShowReject(false);
1404
+ onDecided();
1405
+ } catch (err) {
1406
+ toast.error(
1407
+ err instanceof Error ? err.message : tr(
1408
+ "fluidgrids.toolApproval.decisionFailed",
1409
+ "Failed to record the decision"
1410
+ )
1411
+ );
1412
+ }
1413
+ };
1414
+ return /* @__PURE__ */ jsxs(
1415
+ Card,
1416
+ {
1417
+ className: "border border-border-secondary bg-background-secondary",
1418
+ "data-testid": "tool-approval-card",
1419
+ "data-request-id": request.id,
1420
+ children: [
1421
+ /* @__PURE__ */ jsxs(CardHeader, { className: "pb-3", children: [
1422
+ /* @__PURE__ */ jsxs("div", { className: "flex flex-wrap items-center justify-between gap-2", children: [
1423
+ /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-2", children: [
1424
+ /* @__PURE__ */ jsx(
1425
+ Icon,
1426
+ {
1427
+ icon: "mdi:robot-outline",
1428
+ width: 18,
1429
+ className: "text-text-secondary"
1430
+ }
1431
+ ),
1432
+ /* @__PURE__ */ jsxs("span", { className: "text-sm font-semibold text-text-primary", children: [
1433
+ tr("fluidgrids.toolApproval.nodeLabel", "Node"),
1434
+ ":",
1435
+ " ",
1436
+ request.nodeId
1437
+ ] })
1438
+ ] }),
1439
+ /* @__PURE__ */ jsx(Badge, { variant: "outline", className: "font-mono text-[10px]", children: request.workflowKey })
1440
+ ] }),
1441
+ /* @__PURE__ */ jsxs("p", { className: "text-xs text-text-secondary", children: [
1442
+ tr("fluidgrids.toolApproval.requestedAt", "Requested {{when}}", {
1443
+ when: timeAgo(request.requestedAt, tr)
1444
+ }),
1445
+ request.timeoutAt && ` \xB7 ${tr(
1446
+ "fluidgrids.toolApproval.autoResolvesAt",
1447
+ "auto-resolves at {{time}}",
1448
+ {
1449
+ time: new Date(request.timeoutAt).toLocaleString()
1450
+ }
1451
+ )}`
1452
+ ] })
1453
+ ] }),
1454
+ /* @__PURE__ */ jsxs(CardContent, { className: "space-y-3", children: [
1455
+ request.toolCalls.map((call) => /* @__PURE__ */ jsxs(
1456
+ "div",
1457
+ {
1458
+ className: "rounded-md border border-border-secondary bg-background-primary p-3",
1459
+ children: [
1460
+ /* @__PURE__ */ jsxs("div", { className: "mb-1 flex items-center gap-2", children: [
1461
+ /* @__PURE__ */ jsx(
1462
+ Icon,
1463
+ {
1464
+ icon: "mdi:function-variant",
1465
+ width: 14,
1466
+ className: "text-text-secondary"
1467
+ }
1468
+ ),
1469
+ /* @__PURE__ */ jsx("span", { className: "text-sm font-medium text-text-primary", children: call.name })
1470
+ ] }),
1471
+ /* @__PURE__ */ jsx("pre", { className: "overflow-x-auto whitespace-pre-wrap break-all text-xs text-text-secondary", children: formatArgs(call.argsJson) })
1472
+ ]
1473
+ },
1474
+ call.callId
1475
+ )),
1476
+ /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-2 pt-1", children: [
1477
+ /* @__PURE__ */ jsxs(
1478
+ Button,
1479
+ {
1480
+ size: "sm",
1481
+ disabled: loading,
1482
+ onClick: () => handleDecide("APPROVED"),
1483
+ "data-testid": "tool-approval-approve",
1484
+ children: [
1485
+ /* @__PURE__ */ jsx(Icon, { icon: "mdi:check", className: "mr-1.5", width: 16 }),
1486
+ tr("fluidgrids.toolApproval.approve", "Approve")
1487
+ ]
1488
+ }
1489
+ ),
1490
+ /* @__PURE__ */ jsxs(
1491
+ Button,
1492
+ {
1493
+ size: "sm",
1494
+ variant: "destructive",
1495
+ disabled: loading,
1496
+ onClick: () => setShowReject(true),
1497
+ "data-testid": "tool-approval-reject",
1498
+ children: [
1499
+ /* @__PURE__ */ jsx(Icon, { icon: "mdi:close", className: "mr-1.5", width: 16 }),
1500
+ tr("fluidgrids.toolApproval.reject", "Reject")
1501
+ ]
1502
+ }
1503
+ )
1504
+ ] })
1505
+ ] }),
1506
+ /* @__PURE__ */ jsx(
1507
+ RejectDialog,
1508
+ {
1509
+ open: showReject,
1510
+ onOpenChange: setShowReject,
1511
+ submitting: loading,
1512
+ onConfirm: (reason) => handleDecide("REJECTED", reason || void 0)
1513
+ }
1514
+ )
1515
+ ]
1516
+ }
1517
+ );
1518
+ }
1519
+ function ApprovalInboxPage() {
1520
+ const tr = useTr();
1521
+ const navigate = useNavigate();
1522
+ const { items, totalCount, loading, error, refetch } = usePendingToolApprovals();
1523
+ return /* @__PURE__ */ jsxs("div", { className: "p-4 sm:p-6 bg-background-primary min-h-screen", children: [
1524
+ /* @__PURE__ */ jsxs("div", { className: "flex flex-col sm:flex-row sm:items-center sm:justify-between gap-4 mb-6", children: [
1525
+ /* @__PURE__ */ jsxs("div", { children: [
1526
+ /* @__PURE__ */ jsx("h1", { className: "text-2xl sm:text-3xl font-bold text-text-primary", children: tr("fluidgrids.toolApproval.pageTitle", "Tool Approvals") }),
1527
+ /* @__PURE__ */ jsx("p", { className: "text-text-secondary mt-1", children: tr(
1528
+ "fluidgrids.toolApproval.pageSubtitle",
1529
+ "AI Agent tool calls waiting for a human decision before they run"
1530
+ ) })
1531
+ ] }),
1532
+ /* @__PURE__ */ jsxs(Button, { variant: "outline", onClick: () => navigate("../runs"), children: [
1533
+ /* @__PURE__ */ jsx(Icon, { icon: "mdi:arrow-left", className: "mr-2", width: 16 }),
1534
+ tr("fluidgrids.toolApproval.backToRuns", "Back to Runs")
1535
+ ] })
1536
+ ] }),
1537
+ loading && items.length === 0 && /* @__PURE__ */ jsx("p", { className: "text-text-secondary text-sm", children: tr("fluidgrids.toolApproval.loading", "Loading\u2026") }),
1538
+ error && /* @__PURE__ */ jsx("p", { className: "text-sm text-destructive", role: "alert", children: tr(
1539
+ "fluidgrids.toolApproval.loadFailed",
1540
+ "Failed to load pending approvals: {{message}}",
1541
+ {
1542
+ message: error.message
1543
+ }
1544
+ ) }),
1545
+ !loading && !error && items.length === 0 && /* @__PURE__ */ jsx(Card, { className: "border border-border-secondary bg-background-secondary", children: /* @__PURE__ */ jsxs(CardContent, { className: "flex flex-col items-center gap-2 py-10 text-center", children: [
1546
+ /* @__PURE__ */ jsx(
1547
+ Icon,
1548
+ {
1549
+ icon: "mdi:shield-check-outline",
1550
+ width: 32,
1551
+ className: "text-text-secondary"
1552
+ }
1553
+ ),
1554
+ /* @__PURE__ */ jsx("p", { className: "text-sm font-medium text-text-primary", children: tr(
1555
+ "fluidgrids.toolApproval.emptyTitle",
1556
+ "Nothing waiting for approval"
1557
+ ) }),
1558
+ /* @__PURE__ */ jsx("p", { className: "text-xs text-text-secondary", children: tr(
1559
+ "fluidgrids.toolApproval.emptySubtitle",
1560
+ "Runs will appear here when an AI Agent with tool approval enabled proposes a tool call."
1561
+ ) })
1562
+ ] }) }),
1563
+ items.length > 0 && /* @__PURE__ */ jsx(
1564
+ "div",
1565
+ {
1566
+ className: "mb-3 text-xs text-text-secondary",
1567
+ "data-testid": "tool-approval-count",
1568
+ children: tr(
1569
+ "fluidgrids.toolApproval.count",
1570
+ "{{count}} pending ({{total}} total)",
1571
+ {
1572
+ count: items.length,
1573
+ total: totalCount
1574
+ }
1575
+ )
1576
+ }
1577
+ ),
1578
+ /* @__PURE__ */ jsx("div", { className: "grid grid-cols-1 gap-4 lg:grid-cols-2", children: items.map((request) => /* @__PURE__ */ jsx(RequestCard, { request, onDecided: refetch }, request.id)) })
1579
+ ] });
1580
+ }
1176
1581
 
1177
1582
  // src/graphql/client-helpers.ts
1178
1583
  function createFluidGridsClients(config2) {
@@ -1236,7 +1641,7 @@ var NODE_STATUS_CONFIG = {
1236
1641
  error: { label: "Error", color: "text-red-600", bgColor: "bg-red-100" },
1237
1642
  skipped: { label: "Skipped", color: "text-gray-400", bgColor: "bg-gray-50" }
1238
1643
  };
1239
- var Textarea = React4.forwardRef(
1644
+ var Textarea2 = React4.forwardRef(
1240
1645
  ({ className, ...props }, ref) => {
1241
1646
  return /* @__PURE__ */ jsx(
1242
1647
  "textarea",
@@ -1251,7 +1656,7 @@ var Textarea = React4.forwardRef(
1251
1656
  );
1252
1657
  }
1253
1658
  );
1254
- Textarea.displayName = "Textarea";
1659
+ Textarea2.displayName = "Textarea";
1255
1660
  function Tabs2({
1256
1661
  className,
1257
1662
  ...props
@@ -1672,6 +2077,6 @@ var PopoverContent = React4.forwardRef(({ className, align = "center", sideOffse
1672
2077
  ) }));
1673
2078
  PopoverContent.displayName = PopoverPrimitive.Content.displayName;
1674
2079
 
1675
- export { Checkbox, DropdownMenu, DropdownMenuCheckboxItem, DropdownMenuContent, DropdownMenuGroup, DropdownMenuItem, DropdownMenuLabel, DropdownMenuPortal, DropdownMenuRadioGroup, DropdownMenuRadioItem, DropdownMenuSeparator, DropdownMenuShortcut, DropdownMenuSub, DropdownMenuSubContent, DropdownMenuSubTrigger, DropdownMenuTrigger, FluidGridsRoot, NODE_STATUS_CONFIG, Popover, PopoverContent, PopoverTrigger, RUN_STATUS_CONFIG, ScrollArea, ScrollBar, Select2 as Select, SelectContent2 as SelectContent, SelectGroup, SelectItem2 as SelectItem, SelectLabel, SelectScrollDownButton, SelectScrollUpButton, SelectSeparator, SelectTrigger2 as SelectTrigger, SelectValue2 as SelectValue, Separator, Switch2 as Switch, Tabs2 as Tabs, TabsContent2 as TabsContent, TabsList2 as TabsList, TabsTrigger2 as TabsTrigger, Textarea, VariablesPage, WorkflowEmbedPage, createFluidGridsClients, useCreateVariable, useDeleteVariable, useRevealVariableValue, useSaveSecretsProviderConfig, useSecretsProviderConfigs, useTestSecretsProviderConnection, useUpdateVariable, useVariables };
2080
+ export { ApprovalInboxPage, Checkbox, DropdownMenu, DropdownMenuCheckboxItem, DropdownMenuContent, DropdownMenuGroup, DropdownMenuItem, DropdownMenuLabel, DropdownMenuPortal, DropdownMenuRadioGroup, DropdownMenuRadioItem, DropdownMenuSeparator, DropdownMenuShortcut, DropdownMenuSub, DropdownMenuSubContent, DropdownMenuSubTrigger, DropdownMenuTrigger, FluidGridsRoot, NODE_STATUS_CONFIG, Popover, PopoverContent, PopoverTrigger, RUN_STATUS_CONFIG, ScrollArea, ScrollBar, Select2 as Select, SelectContent2 as SelectContent, SelectGroup, SelectItem2 as SelectItem, SelectLabel, SelectScrollDownButton, SelectScrollUpButton, SelectSeparator, SelectTrigger2 as SelectTrigger, SelectValue2 as SelectValue, Separator, Switch2 as Switch, Tabs2 as Tabs, TabsContent2 as TabsContent, TabsList2 as TabsList, TabsTrigger2 as TabsTrigger, Textarea2 as Textarea, VariablesPage, WorkflowEmbedPage, createFluidGridsClients, useCreateVariable, useDecideToolApproval, useDeleteVariable, usePendingToolApprovals, useRevealVariableValue, useSaveSecretsProviderConfig, useSecretsProviderConfigs, useTestSecretsProviderConnection, useUpdateVariable, useVariables };
1676
2081
  //# sourceMappingURL=index.js.map
1677
2082
  //# sourceMappingURL=index.js.map