@burdenoff/fluidgrids-fe-sdk 2026.1110.2 → 2026.1110.3

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 (30) hide show
  1. package/dist/{ExecutionDetailPage-UXQFBLF3.js → ExecutionDetailPage-7JT2YODS.js} +3 -4
  2. package/dist/{ExecutionsListPage-A4GCUNFR.js → ExecutionsListPage-JWQWJL2K.js} +3 -4
  3. package/dist/{WorkflowBuilder-ZLVMV2UA.js → WorkflowBuilder-D6LOQS4H.js} +8 -9
  4. package/dist/{agentTools-V26FOMTS.js → agentTools-73W5DJDQ.js} +1 -1
  5. package/dist/{chunk-PI4AW4T2.js → chunk-24VHW3ZF.js} +18 -17
  6. package/dist/{chunk-OVZA4IM7.js → chunk-2ZS2HN4T.js} +1 -1
  7. package/dist/{chunk-D4L5BN64.js → chunk-42PMXPHK.js} +93 -1
  8. package/dist/{chunk-WGUHISC2.js → chunk-6SEPRHQZ.js} +2 -2
  9. package/dist/{chunk-ZZBZPBO5.js → chunk-7XJKLVRJ.js} +1 -1
  10. package/dist/chunk-DZRVA4DL.js +172 -0
  11. package/dist/{chunk-OZNFRJKC.js → chunk-F4PAT5DP.js} +1 -1
  12. package/dist/{chunk-7UFE2CHD.js → chunk-H2B2J2PY.js} +23 -97
  13. package/dist/{chunk-CBX2CXGH.js → chunk-L2WJTIFQ.js} +2 -2
  14. package/dist/{chunk-5ZAOXCIQ.js → chunk-LCHXXVSV.js} +2 -2
  15. package/dist/{chunk-5TGPH3CX.js → chunk-M7USD2VH.js} +1 -1
  16. package/dist/chunk-QUYK5PAZ.js +338 -0
  17. package/dist/{chunk-XLU63IUB.js → chunk-WYNLB54U.js} +2 -2
  18. package/dist/{chunk-5V7PMLQN.js → chunk-XIB26SW6.js} +1116 -22
  19. package/dist/executions.js +4 -5
  20. package/dist/index.js +22 -23
  21. package/dist/{node-detail-view-2AFXRNX6.js → node-detail-view-5NBIDBIK.js} +5 -6
  22. package/dist/quick-config-panel-ETLKCV7H.js +411 -0
  23. package/dist/settings.js +3 -4
  24. package/dist/templates.js +8 -9
  25. package/dist/workflow-builder.js +9 -10
  26. package/package.json +1 -1
  27. package/dist/chunk-3JGAI5YC.js +0 -1437
  28. package/dist/chunk-HORSE7WX.js +0 -54
  29. package/dist/chunk-WZ3EJVS6.js +0 -93
  30. package/dist/quick-config-panel-U4AELSCT.js +0 -363
@@ -1,6 +1,6 @@
1
- export { ExecutionDetailPage } from './chunk-WGUHISC2.js';
1
+ export { ExecutionDetailPage } from './chunk-6SEPRHQZ.js';
2
2
  import './chunk-G7BT24PD.js';
3
- import './chunk-OZNFRJKC.js';
3
+ import './chunk-F4PAT5DP.js';
4
4
  import './chunk-2DBAQR6F.js';
5
5
  import './chunk-L5MZ74DA.js';
6
6
  import './chunk-NZAYYUQ4.js';
@@ -13,8 +13,7 @@ import './chunk-Y53CVZVV.js';
13
13
  import './chunk-FNZZ5JJL.js';
14
14
  import './chunk-K22NDWSD.js';
15
15
  import './chunk-PJAWNFJV.js';
16
- import './chunk-D4L5BN64.js';
17
- import './chunk-WZ3EJVS6.js';
16
+ import './chunk-42PMXPHK.js';
18
17
  import './chunk-6CPQVLHT.js';
19
18
  import './chunk-ERT444RG.js';
20
19
  import './chunk-DDINUPO3.js';
@@ -1,13 +1,12 @@
1
- export { ExecutionsListPage } from './chunk-XLU63IUB.js';
2
- import './chunk-OZNFRJKC.js';
1
+ export { ExecutionsListPage } from './chunk-WYNLB54U.js';
2
+ import './chunk-F4PAT5DP.js';
3
3
  import './chunk-2DBAQR6F.js';
4
4
  import './chunk-5ERAJC2I.js';
5
5
  import './chunk-DIIGFBYT.js';
6
6
  import './chunk-FNZZ5JJL.js';
7
7
  import './chunk-K22NDWSD.js';
8
8
  import './chunk-PJAWNFJV.js';
9
- import './chunk-D4L5BN64.js';
10
- import './chunk-WZ3EJVS6.js';
9
+ import './chunk-42PMXPHK.js';
11
10
  import './chunk-4VJ3MDOV.js';
12
11
  import './chunk-6CPQVLHT.js';
13
12
  import './chunk-ERT444RG.js';
@@ -1,17 +1,17 @@
1
- export { WorkflowBuilder } from './chunk-CBX2CXGH.js';
1
+ export { WorkflowBuilder } from './chunk-L2WJTIFQ.js';
2
2
  import './chunk-NRI7AUBH.js';
3
3
  import './chunk-PIKYQE7P.js';
4
- import './chunk-7UFE2CHD.js';
4
+ import './chunk-H2B2J2PY.js';
5
5
  import './chunk-JNSHR2J2.js';
6
6
  import './chunk-GEMNVFPK.js';
7
7
  import './chunk-B6CCE2RW.js';
8
8
  import './chunk-IEVSFCFS.js';
9
9
  import './chunk-YXMFRQYV.js';
10
10
  import './chunk-TFCIZFDM.js';
11
- import './chunk-3JGAI5YC.js';
12
- import './chunk-HORSE7WX.js';
13
- import './chunk-5V7PMLQN.js';
14
- import './chunk-PI4AW4T2.js';
11
+ import './chunk-QUYK5PAZ.js';
12
+ import './chunk-DZRVA4DL.js';
13
+ import './chunk-XIB26SW6.js';
14
+ import './chunk-24VHW3ZF.js';
15
15
  import './chunk-KZCNJAMK.js';
16
16
  import './chunk-QGRVYPQC.js';
17
17
  import './chunk-2H4XAES7.js';
@@ -24,9 +24,8 @@ import './chunk-K22NDWSD.js';
24
24
  import './chunk-XRGAH6IQ.js';
25
25
  import './chunk-QJAZXCFQ.js';
26
26
  import './chunk-GLYINMOR.js';
27
- import './chunk-ZZBZPBO5.js';
28
- import './chunk-D4L5BN64.js';
29
- import './chunk-WZ3EJVS6.js';
27
+ import './chunk-7XJKLVRJ.js';
28
+ import './chunk-42PMXPHK.js';
30
29
  import './chunk-4VJ3MDOV.js';
31
30
  import './chunk-6CPQVLHT.js';
32
31
  import './chunk-ERT444RG.js';
@@ -1,5 +1,5 @@
1
1
  import { computeAttachPosition } from './chunk-JNSHR2J2.js';
2
- import { nodeTitle, selectedOperationOf, paramsFromOperation, fixedParameterState } from './chunk-PI4AW4T2.js';
2
+ import { nodeTitle, selectedOperationOf, paramsFromOperation, fixedParameterState } from './chunk-24VHW3ZF.js';
3
3
  import { NODE_CONFIGS, createConfiguredNode, isNodeConfigsInitialized, useSaveStatusStore, autosaveAllowedFor, isFlowComplete, isNodeTypeHiddenFromPalette } from './chunk-DDINUPO3.js';
4
4
  import './chunk-SDZEAIIE.js';
5
5
  import { resolveOutputHandles, resolveInputHandles, useFlowStore } from './chunk-K2X63CR2.js';
@@ -9,23 +9,6 @@ import { Icon } from '@iconify/react';
9
9
  import { jsx, jsxs } from 'react/jsx-runtime';
10
10
  import { cn } from '@burdenoff/fe-libs/utils';
11
11
 
12
- // src/builder/lib/mapping-input.ts
13
- function latestNodeLog(logs, nodeId, runId) {
14
- return nodeId && runId ? logs.filter((log) => log.nodeId === nodeId && log.runId === runId).at(-1) : void 0;
15
- }
16
- function resolveMappingInput({
17
- source,
18
- operation,
19
- runId,
20
- logs
21
- }) {
22
- const sourceLog = latestNodeLog(logs, source?.id, runId);
23
- const data = sourceLog?.output ?? void 0;
24
- return {
25
- data,
26
- fields: data !== void 0 ? fieldsFromValue(data) : source ? declaredOutputFields(source.type, operation) : []
27
- };
28
- }
29
12
  var FIELD_PATH_MIME = "application/x-fg-field-path";
30
13
  var TYPE_ICON = {
31
14
  string: "mdi:format-text",
@@ -117,6 +100,24 @@ function FieldTree({
117
100
  )) });
118
101
  }
119
102
 
103
+ // src/builder/lib/mapping-input.ts
104
+ function latestNodeLog(logs, nodeId, runId) {
105
+ return nodeId && runId ? logs.filter((log) => log.nodeId === nodeId && log.runId === runId).at(-1) : void 0;
106
+ }
107
+ function resolveMappingInput({
108
+ source,
109
+ operation,
110
+ runId,
111
+ logs
112
+ }) {
113
+ const sourceLog = latestNodeLog(logs, source?.id, runId);
114
+ const data = sourceLog?.output ?? void 0;
115
+ return {
116
+ data,
117
+ fields: data !== void 0 ? fieldsFromValue(data) : source ? declaredOutputFields(source.type, operation) : []
118
+ };
119
+ }
120
+
120
121
  // src/modules/ui-blocks/parse.ts
121
122
  function isRecord(value) {
122
123
  return typeof value === "object" && value !== null && !Array.isArray(value);
@@ -1,4 +1,4 @@
1
- import { useNodeSelectedEvent, Card, FluidGridsMark } from './chunk-7UFE2CHD.js';
1
+ import { useNodeSelectedEvent, Card, FluidGridsMark } from './chunk-H2B2J2PY.js';
2
2
  import { Input } from './chunk-IEVSFCFS.js';
3
3
  import { useWorkflowDefinition } from './chunk-K22NDWSD.js';
4
4
  import { Button } from './chunk-QJAZXCFQ.js';
@@ -5,6 +5,98 @@ import { useState, useRef, useCallback, useEffect } from 'react';
5
5
  import { Label, Textarea } from '@burdenoff/fe-libs/ui';
6
6
  import { jsx, jsxs } from 'react/jsx-runtime';
7
7
 
8
+ // src/modules/agent-definitions/utils/agent-form.ts
9
+ var DEFAULT_GRANT_DAYS = 30;
10
+ var MAX_GRANT_DAYS = 365;
11
+ var MAX_TOOL_RULES = 100;
12
+ var MAX_CONNECTIONS = 100;
13
+ var AgentFormError = class extends Error {
14
+ constructor(message) {
15
+ super(message);
16
+ this.name = "AgentFormError";
17
+ }
18
+ };
19
+ function emptyAgentForm() {
20
+ return {
21
+ name: "",
22
+ description: "",
23
+ tools: [{ nodeType: "", operations: "" }],
24
+ connectionScope: [],
25
+ requireToolApproval: false,
26
+ status: "ACTIVE"
27
+ };
28
+ }
29
+ function agentToForm(agent) {
30
+ return {
31
+ name: agent.name,
32
+ description: agent.description ?? "",
33
+ tools: agent.toolAllowlist.length > 0 ? agent.toolAllowlist.map((rule) => ({
34
+ nodeType: rule.nodeType,
35
+ operations: rule.operations.join(", ")
36
+ })) : [{ nodeType: "", operations: "" }],
37
+ connectionScope: [...agent.connectionScope],
38
+ requireToolApproval: agent.requireToolApproval,
39
+ status: agent.status
40
+ };
41
+ }
42
+ function splitOperations(value) {
43
+ return [
44
+ ...new Set(
45
+ value.split(",").map((operation) => operation.trim()).filter(Boolean)
46
+ )
47
+ ];
48
+ }
49
+ function formToInput(form) {
50
+ const name = form.name.trim();
51
+ if (name.length === 0 || name.length > 200) {
52
+ throw new AgentFormError("Give the agent a name of 1 to 200 characters.");
53
+ }
54
+ const description = form.description.trim();
55
+ if (description.length > 2e3) {
56
+ throw new AgentFormError(
57
+ "The description must be at most 2000 characters."
58
+ );
59
+ }
60
+ const rules = form.tools.map((row) => ({
61
+ nodeType: row.nodeType.trim(),
62
+ operations: splitOperations(row.operations)
63
+ })).filter((rule) => rule.nodeType.length > 0 || rule.operations.length > 0);
64
+ if (rules.some((rule) => rule.nodeType.length === 0)) {
65
+ throw new AgentFormError("Every tool rule needs a node type.");
66
+ }
67
+ if (rules.length > MAX_TOOL_RULES) {
68
+ throw new AgentFormError(`At most ${MAX_TOOL_RULES} tool rules.`);
69
+ }
70
+ const connectionScope = [...new Set(form.connectionScope.filter(Boolean))];
71
+ if (connectionScope.length > MAX_CONNECTIONS) {
72
+ throw new AgentFormError(`At most ${MAX_CONNECTIONS} connections.`);
73
+ }
74
+ return {
75
+ name,
76
+ description: description || null,
77
+ toolAllowlist: rules,
78
+ connectionScope,
79
+ requireToolApproval: form.requireToolApproval,
80
+ status: form.status
81
+ };
82
+ }
83
+ function grantDays(value) {
84
+ const days = Number(value);
85
+ if (!Number.isInteger(days) || days < 1 || days > MAX_GRANT_DAYS) {
86
+ throw new AgentFormError(
87
+ `A grant lasts between 1 and ${MAX_GRANT_DAYS} days.`
88
+ );
89
+ }
90
+ return days;
91
+ }
92
+ function describeRule(rule) {
93
+ return rule.operations.length > 0 ? `${rule.nodeType}: ${rule.operations.join(", ")}` : `${rule.nodeType}: any operation`;
94
+ }
95
+ function isAgentNodeType(nodeType) {
96
+ if (!nodeType) return false;
97
+ return nodeType === "store/ai-agent" || nodeType.includes("store/ai-agent");
98
+ }
99
+
8
100
  // src/graphql/typed-calls.ts
9
101
  async function readTyped(query, variables) {
10
102
  const result = await getFluidGridsClient().query({
@@ -395,4 +487,4 @@ function StatusPill({
395
487
  );
396
488
  }
397
489
 
398
- export { FieldError, JsonBlock, JsonField, NativeSelect, RUN_CONTROL_DIALOG_STYLE, StatusPill, backfillSchedule, cancelBatchOperation, clearArchiveSettings, completeActivityById, createPauseRule, createSearchAttribute, createSignalToken, deletePauseRule, deleteSearchAttribute, describeSchedule, failActivityById, fetchArchiveSettings, fetchBatchOperation, fetchBatchOperations, fetchCodeBundleSdk, fetchCodecServerSettings, fetchPauseRules, fetchRunControlFields, fetchRunHistoryArchive, fetchRunUpdate, fetchSearchAttributes, fetchSignalTokens, jsonArg, newRunControlId, parseJsonInput, parseJsonObjectInput, pauseActivities, pauseSchedule, queryRun, readTyped, resetActivities, resetRun, resetRunToLastCleanTask, revokeSignalToken, saveArchiveSettings, saveCodecServerSettings, sendRunUpdate, startBatchExport, startBatchOperation, startBatchTerminate, triggerSchedule, unpauseActivities, unpauseSchedule, updateActivityOptions, upsertRunSearchAttributes, useResource, writeTyped };
490
+ export { AgentFormError, DEFAULT_GRANT_DAYS, FieldError, JsonBlock, JsonField, MAX_GRANT_DAYS, NativeSelect, RUN_CONTROL_DIALOG_STYLE, StatusPill, agentToForm, backfillSchedule, cancelBatchOperation, clearArchiveSettings, completeActivityById, createPauseRule, createSearchAttribute, createSignalToken, deletePauseRule, deleteSearchAttribute, describeRule, describeSchedule, emptyAgentForm, failActivityById, fetchArchiveSettings, fetchBatchOperation, fetchBatchOperations, fetchCodeBundleSdk, fetchCodecServerSettings, fetchPauseRules, fetchRunControlFields, fetchRunHistoryArchive, fetchRunUpdate, fetchSearchAttributes, fetchSignalTokens, formToInput, grantDays, isAgentNodeType, jsonArg, newRunControlId, parseJsonInput, parseJsonObjectInput, pauseActivities, pauseSchedule, queryRun, readTyped, resetActivities, resetRun, resetRunToLastCleanTask, revokeSignalToken, saveArchiveSettings, saveCodecServerSettings, sendRunUpdate, startBatchExport, startBatchOperation, startBatchTerminate, triggerSchedule, unpauseActivities, unpauseSchedule, updateActivityOptions, upsertRunSearchAttributes, useResource, writeTyped };
@@ -1,5 +1,5 @@
1
1
  import { useDurableRunFields, useRunHistory, useDeterminismStatus, useRunStackTrace, RunHistoryView, SignalRunDialog, terminateDurableRun } from './chunk-G7BT24PD.js';
2
- import { useDurableParityRunFields, hasAgentNodeState, agentNodeTraces, orderNodesByExecution, useRunPending, useRunMetadata, ExecutionStatusBadge, NodeTimeline, RunLogViewer, NodeStatusBadge, setRunVersioningOverride } from './chunk-OZNFRJKC.js';
2
+ import { useDurableParityRunFields, hasAgentNodeState, agentNodeTraces, orderNodesByExecution, useRunPending, useRunMetadata, ExecutionStatusBadge, NodeTimeline, RunLogViewer, NodeStatusBadge, setRunVersioningOverride } from './chunk-F4PAT5DP.js';
3
3
  import { useExecution, useExecutionActions, useAutoRefresh, runChainLinks, shortRunId, callbackTone, parseMetadataDefinition, overrideRequestOf } from './chunk-2DBAQR6F.js';
4
4
  import { fetchRunFailureClusters, OPEN_STATUSES, dismissRunFailureCluster, BUCKET_LABELS } from './chunk-L5MZ74DA.js';
5
5
  import { aiCost, formatTokens, modelLabel } from './chunk-NZAYYUQ4.js';
@@ -8,7 +8,7 @@ import { EntityTagPicker, canSaveRunAsTestCase, useWorkflowProposal, WorkflowPro
8
8
  import { buildNodeDisplayMap, formatRunVersion, nodeDisplayTitle } from './chunk-DIIGFBYT.js';
9
9
  import { AiCreditBalanceSlot } from './chunk-Y53CVZVV.js';
10
10
  import { useWorkflowVersions } from './chunk-K22NDWSD.js';
11
- import { readTyped, writeTyped, useResource, fetchCodecServerSettings, fetchRunControlFields, fetchPauseRules, RUN_CONTROL_DIALOG_STYLE, fetchRunHistoryArchive, parseJsonInput, NativeSelect, JsonField, FieldError, StatusPill, JsonBlock, fetchSignalTokens, parseJsonObjectInput, queryRun, revokeSignalToken, upsertRunSearchAttributes, newRunControlId, fetchRunUpdate, createSignalToken, pauseActivities, unpauseActivities, resetActivities, updateActivityOptions, completeActivityById, failActivityById, sendRunUpdate, resetRunToLastCleanTask, resetRun } from './chunk-D4L5BN64.js';
11
+ import { readTyped, writeTyped, useResource, fetchCodecServerSettings, fetchRunControlFields, fetchPauseRules, RUN_CONTROL_DIALOG_STYLE, fetchRunHistoryArchive, parseJsonInput, NativeSelect, JsonField, FieldError, StatusPill, JsonBlock, fetchSignalTokens, parseJsonObjectInput, queryRun, revokeSignalToken, upsertRunSearchAttributes, newRunControlId, fetchRunUpdate, createSignalToken, pauseActivities, unpauseActivities, resetActivities, updateActivityOptions, completeActivityById, failActivityById, sendRunUpdate, resetRunToLastCleanTask, resetRun } from './chunk-42PMXPHK.js';
12
12
  import { useFluidGridsPermission, FLUIDGRIDS_PERMISSIONS, SdkPermissionButton } from './chunk-ERT444RG.js';
13
13
  import { useDurableFunctionNodesEnabled, useDurableParityEnabled, usePhaseCFlags, runSignalTargets, canSignalRun, formatElapsedMs, runDurationMs, useWorkflowTestsEnabled, durableInterfaceOf } from './chunk-DDINUPO3.js';
14
14
  import { TaskQueuesDocument, TaskQueueStatsDocument, CreateTaskQueueDocument, UpdateTaskQueueDocument, DeleteTaskQueueDocument, WorkflowWorkersDocument, WorkerTokensDocument, CreateWorkerTokenDocument, RotateWorkerTokenDocument, DeleteWorkerTokenDocument, SetWorkerTokenConnectionAllowlistDocument, RunLogsDocument, RunLogAppendedDocument, ExplainRunDocument, RunAiUsageDocument } from './chunk-A6Q4FWB6.js';
@@ -1,4 +1,4 @@
1
- import { emptyAgentForm, agentToForm, describeRule, formToInput, AgentFormError, DEFAULT_GRANT_DAYS, MAX_GRANT_DAYS, grantDays } from './chunk-WZ3EJVS6.js';
1
+ import { emptyAgentForm, agentToForm, describeRule, formToInput, AgentFormError, DEFAULT_GRANT_DAYS, MAX_GRANT_DAYS, grantDays } from './chunk-42PMXPHK.js';
2
2
  import { SdkPermissionGate, FLUIDGRIDS_PERMISSIONS } from './chunk-ERT444RG.js';
3
3
  import { replaceAdapterConnections, connectionsForAdapter, matchesAdapterProvider, newConnectionProviderKey, isOptionalAdapter } from './chunk-DDINUPO3.js';
4
4
  import { useTr } from './chunk-UULVIT25.js';
@@ -0,0 +1,172 @@
1
+ import { TabButton, ReadOnlyFieldset, NodeSettingsPanel, NodeParamsForm, SchedulePanel, SCHEDULE_NODE_TYPE } from './chunk-XIB26SW6.js';
2
+ import { nodeTitle, FieldTree } from './chunk-24VHW3ZF.js';
3
+ import { useFluidGridsPermission, FLUIDGRIDS_PERMISSIONS } from './chunk-ERT444RG.js';
4
+ import { usePhaseCFlags } from './chunk-DDINUPO3.js';
5
+ import { useFlowStore } from './chunk-K2X63CR2.js';
6
+ import { useTr } from './chunk-UULVIT25.js';
7
+ import { Icon } from '@iconify/react';
8
+ import { jsxs, Fragment, jsx } from 'react/jsx-runtime';
9
+ import { cn } from '@burdenoff/fe-libs/utils';
10
+ import { useState } from 'react';
11
+
12
+ function NodeInputFields({
13
+ config,
14
+ testIdPrefix
15
+ }) {
16
+ const tr = useTr();
17
+ const { nodes, sourceIds, selectedSource, setSelectedSource, inputFields } = config;
18
+ return /* @__PURE__ */ jsxs(Fragment, { children: [
19
+ /* @__PURE__ */ jsxs("div", { className: "flex shrink-0 items-center gap-2 border-b border-border px-3 py-2", children: [
20
+ /* @__PURE__ */ jsx(
21
+ Icon,
22
+ {
23
+ icon: "mdi:tray-arrow-down",
24
+ className: "size-3.5 text-muted-foreground"
25
+ }
26
+ ),
27
+ /* @__PURE__ */ jsx("span", { className: "text-[11px] font-semibold uppercase tracking-[0.12em] text-muted-foreground", children: tr("fluidgrids.builder.quickConfigPanel.inputHeading", "Input") }),
28
+ sourceIds.length > 0 && /* @__PURE__ */ jsx(
29
+ "select",
30
+ {
31
+ className: "ml-auto max-w-[55%] truncate rounded-md border border-border-default bg-bg-surface px-1.5 py-0.5 text-[11px] text-text-primary scheme-normal dark:scheme-dark outline-none focus:border-action-primary-border [&_option]:bg-bg-surface [&_option]:text-text-primary",
32
+ value: selectedSource ?? "",
33
+ onChange: (e) => setSelectedSource(e.target.value),
34
+ "aria-label": tr(
35
+ "fluidgrids.builder.quickConfigPanel.inputHeading",
36
+ "Input"
37
+ ),
38
+ "data-testid": `${testIdPrefix}-source-selector`,
39
+ children: sourceIds.map((sid) => {
40
+ const sn = nodes.find((n) => n.id === sid);
41
+ return /* @__PURE__ */ jsx("option", { value: sid, children: nodeTitle(sn) }, sid);
42
+ })
43
+ }
44
+ )
45
+ ] }),
46
+ /* @__PURE__ */ jsx("div", { className: "min-h-0 flex-1 overflow-auto px-2 py-2", children: inputFields.length > 0 ? /* @__PURE__ */ jsx(FieldTree, { fields: inputFields, draggable: true }) : /* @__PURE__ */ jsx("p", { className: "px-2 py-4 text-center text-xs text-muted-foreground", children: sourceIds.length === 0 ? tr(
47
+ "fluidgrids.builder.quickConfigPanel.noUpstreamNode",
48
+ "Connect an upstream node to map its fields."
49
+ ) : tr(
50
+ "fluidgrids.builder.quickConfigPanel.noOutputFields",
51
+ "The selected source has no declared output fields."
52
+ ) }) }),
53
+ /* @__PURE__ */ jsx("p", { className: "shrink-0 border-t border-border px-3 py-1.5 text-[10px] leading-snug text-muted-foreground", children: tr(
54
+ "fluidgrids.builder.quickConfigPanel.dragFieldHint",
55
+ "Drag a field onto a parameter to map it."
56
+ ) })
57
+ ] });
58
+ }
59
+ function NodeEditorTabs({
60
+ active,
61
+ onChange,
62
+ hasSchedule,
63
+ testIdPrefix,
64
+ className
65
+ }) {
66
+ const tr = useTr();
67
+ return /* @__PURE__ */ jsxs(
68
+ "div",
69
+ {
70
+ className: cn(
71
+ "flex shrink-0 items-center gap-4 border-b border-border px-3",
72
+ className
73
+ ),
74
+ children: [
75
+ /* @__PURE__ */ jsx(
76
+ TabButton,
77
+ {
78
+ active: active === "parameters",
79
+ onClick: () => onChange("parameters"),
80
+ testId: `${testIdPrefix}-tab-parameters`,
81
+ children: tr("fluidgrids.builder.nodeDetailView.tabParameters", "Parameters")
82
+ }
83
+ ),
84
+ hasSchedule && /* @__PURE__ */ jsx(
85
+ TabButton,
86
+ {
87
+ active: active === "schedule",
88
+ onClick: () => onChange("schedule"),
89
+ testId: `${testIdPrefix}-tab-schedule`,
90
+ children: tr("fluidgrids.builder.nodeDetailView.tabSchedule", "Schedule")
91
+ }
92
+ ),
93
+ /* @__PURE__ */ jsx(
94
+ TabButton,
95
+ {
96
+ active: active === "settings",
97
+ onClick: () => onChange("settings"),
98
+ testId: `${testIdPrefix}-tab-settings`,
99
+ children: tr("fluidgrids.builder.nodeDetailView.tabSettings", "Settings")
100
+ }
101
+ )
102
+ ]
103
+ }
104
+ );
105
+ }
106
+ function activeNodeEditorTab(tab, hasSchedule) {
107
+ return tab === "schedule" && !hasSchedule ? "parameters" : tab;
108
+ }
109
+ function nodeHasScheduleTab(nodeType, schedulePolicies) {
110
+ return schedulePolicies && nodeType === SCHEDULE_NODE_TYPE;
111
+ }
112
+ function useNodeEditorTab(nodeType) {
113
+ const { schedulePolicies } = usePhaseCFlags();
114
+ const hasSchedule = nodeHasScheduleTab(nodeType, schedulePolicies);
115
+ const [tab, setTab] = useState("parameters");
116
+ return { tab: activeNodeEditorTab(tab, hasSchedule), setTab, hasSchedule };
117
+ }
118
+ function NodeEditorTabBody({
119
+ tab,
120
+ config,
121
+ nodeId,
122
+ testIdPrefix
123
+ }) {
124
+ if (tab === "schedule") {
125
+ return /* @__PURE__ */ jsx(
126
+ NodeEditorSchedule,
127
+ {
128
+ config,
129
+ nodeId,
130
+ testIdPrefix
131
+ }
132
+ );
133
+ }
134
+ if (tab === "settings") {
135
+ return /* @__PURE__ */ jsx("div", { className: "p-3", "data-testid": `${testIdPrefix}-settings`, children: /* @__PURE__ */ jsx(ReadOnlyFieldset, { children: /* @__PURE__ */ jsx(NodeSettingsPanel, { config }) }) });
136
+ }
137
+ return /* @__PURE__ */ jsx("div", { className: "space-y-4 p-3", "data-testid": `${testIdPrefix}-params`, children: /* @__PURE__ */ jsx(ReadOnlyFieldset, { className: "space-y-4", children: /* @__PURE__ */ jsx(
138
+ NodeParamsForm,
139
+ {
140
+ config,
141
+ nodeType: config.node?.type,
142
+ testIdPrefix
143
+ }
144
+ ) }) });
145
+ }
146
+ function NodeEditorSchedule({
147
+ config,
148
+ nodeId,
149
+ testIdPrefix
150
+ }) {
151
+ const workflowKey = useFlowStore((s) => s.workflow.workflowKey);
152
+ const workflowDbId = useFlowStore((s) => s.workflow.dbId);
153
+ const { allowed: canExecute } = useFluidGridsPermission(
154
+ FLUIDGRIDS_PERMISSIONS.WORKFLOW_RUN_EXECUTE
155
+ );
156
+ const { allowed: canUpdate } = useFluidGridsPermission(
157
+ FLUIDGRIDS_PERMISSIONS.WORKFLOW_UPDATE
158
+ );
159
+ return /* @__PURE__ */ jsx("div", { "data-testid": `${testIdPrefix}-schedule`, children: /* @__PURE__ */ jsx(
160
+ SchedulePanel,
161
+ {
162
+ state: config.argsState,
163
+ writeField: config.writeFixed,
164
+ workflowKey: workflowDbId && workflowKey ? workflowKey : null,
165
+ triggerNodeId: nodeId,
166
+ canExecute,
167
+ canUpdate
168
+ }
169
+ ) });
170
+ }
171
+
172
+ export { NodeEditorTabBody, NodeEditorTabs, NodeInputFields, useNodeEditorTab };
@@ -2,7 +2,7 @@ import { validateDateRange, statusCountFilter, STATUS_COUNT_GROUP_BY, statusCoun
2
2
  import { useAvailableTags, formatRunVersion, nodeDisplayTitle } from './chunk-DIIGFBYT.js';
3
3
  import { executionsControls } from './chunk-FNZZ5JJL.js';
4
4
  import { useFluidGridsPageControls } from './chunk-PJAWNFJV.js';
5
- import { isAgentNodeType } from './chunk-WZ3EJVS6.js';
5
+ import { isAgentNodeType } from './chunk-42PMXPHK.js';
6
6
  import { useDurableParityEnabled, formatElapsedMs, runDurationMs, nodeStateDurationMs } from './chunk-DDINUPO3.js';
7
7
  import { SetWorkflowRunVersioningOverrideDocument, WorkflowRunsCountDocument, DurableParityRunFieldsDocument, WorkflowRunPendingDocument, WorkflowRunMetadataDocument } from './chunk-A6Q4FWB6.js';
8
8
  import { useTr } from './chunk-UULVIT25.js';
@@ -4,10 +4,10 @@ import { templatePreview } from './chunk-B6CCE2RW.js';
4
4
  import { Input } from './chunk-IEVSFCFS.js';
5
5
  import { Dialog, DialogContent, DialogHeader, DialogTitle, DialogDescription, DialogFooter as DialogFooter$1 } from './chunk-YXMFRQYV.js';
6
6
  import { Badge as Badge$1 } from './chunk-TFCIZFDM.js';
7
- import { LogsPanel, SCHEDULE_NODE_TYPE, TabButton, NodeSettingsPanel, SchedulePanel } from './chunk-3JGAI5YC.js';
8
- import { NodeInputFields } from './chunk-HORSE7WX.js';
9
- import { useGlobalStoreClient, ReadOnlyFieldset, NodeParamsForm, NodeExecutionActions } from './chunk-5V7PMLQN.js';
10
- import { useNodeConfig, nodeSubtitle, nodeTitle } from './chunk-PI4AW4T2.js';
7
+ import { LogsPanel } from './chunk-QUYK5PAZ.js';
8
+ import { useNodeEditorTab, NodeEditorTabs, NodeInputFields, NodeEditorTabBody } from './chunk-DZRVA4DL.js';
9
+ import { useGlobalStoreClient, NodeExecutionActions } from './chunk-XIB26SW6.js';
10
+ import { useNodeConfig, nodeSubtitle, nodeTitle } from './chunk-24VHW3ZF.js';
11
11
  import { CreateWorkflowRefusalDialog, WorkflowShareDialog, useWorkflowCodeExport, orderedExportFiles, fileBaseName, downloadWorkflowCodeExport, isLosslessReport, sortFidelityItems, isLossyFidelityItem, lineOfNode } from './chunk-QGRVYPQC.js';
12
12
  import { emptyTestCaseDraft, EntityTagPicker, useWorkflowProposal, WorkflowProposalCard, useWorkflowTests, pinnedOutputsFromCanvas, enabledCaseIds, isTestRunOpen, MAX_TEST_CASES, draftFromTestCase, testRunSummaryText, testStatusLabel, TEST_STATUS_TONE_CLASS, testStatusTone, MAX_CASE_NAME, nextSortOrder, draftToInput } from './chunk-2H4XAES7.js';
13
13
  import { buildNodeDisplayMap } from './chunk-DIIGFBYT.js';
@@ -17,10 +17,10 @@ import { useRestoreWorkflowVersion, useWorkflowVersions, useActivateWorkflow, us
17
17
  import { PublishCustomNodeAction } from './chunk-XRGAH6IQ.js';
18
18
  import { Button } from './chunk-QJAZXCFQ.js';
19
19
  import { useRequestedProposal } from './chunk-GLYINMOR.js';
20
- import { useConnections, ConnectionFormDialog } from './chunk-ZZBZPBO5.js';
20
+ import { useConnections, ConnectionFormDialog } from './chunk-7XJKLVRJ.js';
21
21
  import { FluidGridsDocsLink } from './chunk-4VJ3MDOV.js';
22
22
  import { SdkPermissionButton, FLUIDGRIDS_PERMISSIONS, useFluidGridsPermission, SdkPermissionGate } from './chunk-ERT444RG.js';
23
- import { leaseCallQueue, RUNS_QUOTA_NAME, BILLING_PLANS_PATH, emitUpgradeClicked, FluidGridsContext, emitWorkflowCreated, emitTemplateUsed, ensureNodeConfigsLoaded, NODE_CONFIGS, useEditLeaseStore, useEditLeaseLocked, registerWorkflowNodeTypes, emitNodeInstalled, useNodeExecution, usePaletteGates, onNodeTypesUpdate, NODE_TYPES, getNodeMetadata, refetchStoreNodes, AVAILABLE_NODES, EDIT_SESSION_ID, useInsertNode, useSaveStatusStore, useManualSave, useDurableFunctionNodesEnabled, bannerOf, editStateFor, useSaveWorkflow, filterPaletteNodes, useFluidGridsAnalytics, useGuardedNavigate, sessionBeforeReload, forgetSessionForReload, releasesOnClose, touchesSavedFields, isLocked, watchLeavingLosesChanges, workflowFingerprint, savedEverythingBeforeLeaving, refusalOfQuota, buildStickyNode, NODES_METADATA, shouldReleaseForIdle, tickAction, rememberSessionForReload, leavingLosesChanges, buildOperationSeed, useDurableParityEnabled, useWorkflowTestsEnabled, useFluidGridsFlag, FLUIDGRIDS_FLAGS, useFlowValidator, saveIndicatorOf, departingSave, inAppLeaveTarget, isNodeConfigsInitialized, phaseAfterAcquire, rememberOwnStatusChange, useRunGuard, saveFailureActionOf, getNodeDetail, loadDefinitionJson, canAutosave, isNodeTypeHiddenFromPalette, usePhaseCFlags, AUTOSAVE_RETRY_DELAYS_MS, AUTOSAVE_DEBOUNCE_MS, editingLeaseLocked, autosaveAllowedFor, isFlowComplete, rememberRevision, phaseAfterTakeOver } from './chunk-DDINUPO3.js';
23
+ import { leaseCallQueue, RUNS_QUOTA_NAME, BILLING_PLANS_PATH, emitUpgradeClicked, FluidGridsContext, emitWorkflowCreated, emitTemplateUsed, ensureNodeConfigsLoaded, NODE_CONFIGS, useEditLeaseStore, useEditLeaseLocked, registerWorkflowNodeTypes, emitNodeInstalled, useNodeExecution, usePaletteGates, onNodeTypesUpdate, NODE_TYPES, getNodeMetadata, refetchStoreNodes, AVAILABLE_NODES, EDIT_SESSION_ID, useInsertNode, useSaveStatusStore, useManualSave, useDurableFunctionNodesEnabled, bannerOf, editStateFor, useSaveWorkflow, filterPaletteNodes, useFluidGridsAnalytics, useGuardedNavigate, sessionBeforeReload, forgetSessionForReload, releasesOnClose, touchesSavedFields, isLocked, watchLeavingLosesChanges, workflowFingerprint, savedEverythingBeforeLeaving, refusalOfQuota, buildStickyNode, NODES_METADATA, shouldReleaseForIdle, tickAction, rememberSessionForReload, leavingLosesChanges, buildOperationSeed, useDurableParityEnabled, useWorkflowTestsEnabled, useFluidGridsFlag, FLUIDGRIDS_FLAGS, useFlowValidator, saveIndicatorOf, departingSave, inAppLeaveTarget, isNodeConfigsInitialized, phaseAfterAcquire, rememberOwnStatusChange, useRunGuard, saveFailureActionOf, getNodeDetail, loadDefinitionJson, canAutosave, isNodeTypeHiddenFromPalette, AUTOSAVE_RETRY_DELAYS_MS, AUTOSAVE_DEBOUNCE_MS, editingLeaseLocked, autosaveAllowedFor, isFlowComplete, rememberRevision, phaseAfterTakeOver } from './chunk-DDINUPO3.js';
24
24
  import { BuilderReadOnlyProvider, useBuilderReadOnly } from './chunk-SDZEAIIE.js';
25
25
  import { useFlowStore, useIsValidConnection, NODE_TYPE_DRAG_DATA_FORMAT, NODE_OPERATION_DRAG_DATA_FORMAT, CODE_WORKFLOW_NODE_TYPE, STICKY_NOTE_TYPE, NodeTypeIcon, isImageIcon, isTriggerOperation, nodeAccent } from './chunk-K2X63CR2.js';
26
26
  import { getGlobalStoreClient } from './chunk-TYI2XOSI.js';
@@ -2312,15 +2312,12 @@ function SidebarNodeEditorInner({
2312
2312
  const setSelectedNode = useFlowStore(
2313
2313
  (s) => s.actions.sidebar.panels.nodeProperties.setSelectedNode
2314
2314
  );
2315
- const { schedulePolicies } = usePhaseCFlags();
2316
- const isSchedule = schedulePolicies && node?.type === SCHEDULE_NODE_TYPE;
2317
- const [tab, setTab] = useState("parameters");
2315
+ const { tab, setTab, hasSchedule } = useNodeEditorTab(node?.type);
2318
2316
  const [showInput, setShowInput] = useState(false);
2319
2317
  useEffect(() => {
2320
2318
  if (!nodes.some((n) => n.id === nodeId)) setSelectedNode(null);
2321
2319
  }, [nodes, nodeId, setSelectedNode]);
2322
2320
  if (!node) return null;
2323
- const activeTab = tab === "schedule" && !isSchedule ? "parameters" : tab;
2324
2321
  return /* @__PURE__ */ jsxs(
2325
2322
  "div",
2326
2323
  {
@@ -2338,11 +2335,12 @@ function SidebarNodeEditorInner({
2338
2335
  }
2339
2336
  ),
2340
2337
  /* @__PURE__ */ jsx(
2341
- EditorTabs,
2338
+ NodeEditorTabs,
2342
2339
  {
2343
- active: activeTab,
2340
+ active: tab,
2344
2341
  onChange: setTab,
2345
- isSchedule
2342
+ hasSchedule,
2343
+ testIdPrefix: "sp"
2346
2344
  }
2347
2345
  ),
2348
2346
  /* @__PURE__ */ jsxs("div", { className: "min-h-0 flex-1 overflow-auto", children: [
@@ -2354,7 +2352,15 @@ function SidebarNodeEditorInner({
2354
2352
  children: /* @__PURE__ */ jsx(NodeInputFields, { config, testIdPrefix: "sp" })
2355
2353
  }
2356
2354
  ),
2357
- /* @__PURE__ */ jsx(EditorBody, { tab: activeTab, config, nodeId })
2355
+ /* @__PURE__ */ jsx(
2356
+ NodeEditorTabBody,
2357
+ {
2358
+ tab,
2359
+ config,
2360
+ nodeId,
2361
+ testIdPrefix: "sp"
2362
+ }
2363
+ )
2358
2364
  ] }),
2359
2365
  /* @__PURE__ */ jsx(EditorRunActions, { nodeId })
2360
2366
  ]
@@ -2442,86 +2448,6 @@ function EditorHeader({
2442
2448
  }
2443
2449
  );
2444
2450
  }
2445
- function EditorTabs({
2446
- active,
2447
- onChange,
2448
- isSchedule
2449
- }) {
2450
- const tr = useTr();
2451
- return /* @__PURE__ */ jsxs("div", { className: "flex shrink-0 items-center gap-4 border-b border-border px-3", children: [
2452
- /* @__PURE__ */ jsx(
2453
- TabButton,
2454
- {
2455
- active: active === "parameters",
2456
- onClick: () => onChange("parameters"),
2457
- testId: "sp-tab-parameters",
2458
- children: tr("fluidgrids.builder.nodeDetailView.tabParameters", "Parameters")
2459
- }
2460
- ),
2461
- isSchedule && /* @__PURE__ */ jsx(
2462
- TabButton,
2463
- {
2464
- active: active === "schedule",
2465
- onClick: () => onChange("schedule"),
2466
- testId: "sp-tab-schedule",
2467
- children: tr("fluidgrids.builder.nodeDetailView.tabSchedule", "Schedule")
2468
- }
2469
- ),
2470
- /* @__PURE__ */ jsx(
2471
- TabButton,
2472
- {
2473
- active: active === "settings",
2474
- onClick: () => onChange("settings"),
2475
- testId: "sp-tab-settings",
2476
- children: tr("fluidgrids.builder.nodeDetailView.tabSettings", "Settings")
2477
- }
2478
- )
2479
- ] });
2480
- }
2481
- function EditorBody({
2482
- tab,
2483
- config,
2484
- nodeId
2485
- }) {
2486
- if (tab === "schedule") {
2487
- return /* @__PURE__ */ jsx(EditorSchedule, { config, nodeId });
2488
- }
2489
- if (tab === "settings") {
2490
- return /* @__PURE__ */ jsx("div", { className: "p-3", "data-testid": "sp-settings", children: /* @__PURE__ */ jsx(ReadOnlyFieldset, { children: /* @__PURE__ */ jsx(NodeSettingsPanel, { config }) }) });
2491
- }
2492
- return /* @__PURE__ */ jsx("div", { className: "space-y-4 p-3", "data-testid": "sp-params", children: /* @__PURE__ */ jsx(ReadOnlyFieldset, { className: "space-y-4", children: /* @__PURE__ */ jsx(
2493
- NodeParamsForm,
2494
- {
2495
- config,
2496
- nodeType: config.node?.type,
2497
- testIdPrefix: "sp"
2498
- }
2499
- ) }) });
2500
- }
2501
- function EditorSchedule({
2502
- config,
2503
- nodeId
2504
- }) {
2505
- const workflowKey = useFlowStore((s) => s.workflow.workflowKey);
2506
- const workflowDbId = useFlowStore((s) => s.workflow.dbId);
2507
- const { allowed: canExecute } = useFluidGridsPermission(
2508
- FLUIDGRIDS_PERMISSIONS.WORKFLOW_RUN_EXECUTE
2509
- );
2510
- const { allowed: canUpdate } = useFluidGridsPermission(
2511
- FLUIDGRIDS_PERMISSIONS.WORKFLOW_UPDATE
2512
- );
2513
- return /* @__PURE__ */ jsx("div", { "data-testid": "sp-schedule", children: /* @__PURE__ */ jsx(
2514
- SchedulePanel,
2515
- {
2516
- state: config.argsState,
2517
- writeField: config.writeFixed,
2518
- workflowKey: workflowDbId && workflowKey ? workflowKey : null,
2519
- triggerNodeId: nodeId,
2520
- canExecute,
2521
- canUpdate
2522
- }
2523
- ) });
2524
- }
2525
2451
  function EditorRunActions({ nodeId }) {
2526
2452
  const nodes = useFlowStore((s) => s.workflow.nodes);
2527
2453
  const edges = useFlowStore((s) => s.workflow.edges);
@@ -20526,12 +20452,12 @@ function EditLeaseBanner() {
20526
20452
  );
20527
20453
  }
20528
20454
  var LazyNodeDetailView = lazy(
20529
- () => import('./node-detail-view-2AFXRNX6.js').then((m) => ({
20455
+ () => import('./node-detail-view-5NBIDBIK.js').then((m) => ({
20530
20456
  default: m.NodeDetailView
20531
20457
  }))
20532
20458
  );
20533
20459
  var LazyQuickConfigPanel = lazy(
20534
- () => import('./quick-config-panel-U4AELSCT.js').then((m) => ({
20460
+ () => import('./quick-config-panel-ETLKCV7H.js').then((m) => ({
20535
20461
  default: m.QuickConfigPanel
20536
20462
  }))
20537
20463
  );
@@ -20593,7 +20519,7 @@ var FlowBuilder = ({ readOnly = false }) => {
20593
20519
  );
20594
20520
  useEffect(() => {
20595
20521
  let cancelled = false;
20596
- void import('./agentTools-V26FOMTS.js').then(({ createBuilderAgentTools }) => {
20522
+ void import('./agentTools-73W5DJDQ.js').then(({ createBuilderAgentTools }) => {
20597
20523
  if (cancelled) return;
20598
20524
  setAgentTools(
20599
20525
  createBuilderAgentTools({
@@ -1,7 +1,7 @@
1
1
  import { isGuidedTourIntent, pickGuidedTour, withoutGuidedTourIntent, isCreateIntent, decideMissingWorkflow } from './chunk-NRI7AUBH.js';
2
2
  import { registerLiveCanvasHandler } from './chunk-PIKYQE7P.js';
3
- import { useWorkflowReloadStore, releaseLeaseKeptForReload, useInstalledNodes, buildNodeCheck, FlowBuilderPage, buildRequiredNodeTypes } from './chunk-7UFE2CHD.js';
4
- import { paramsFromOperation } from './chunk-PI4AW4T2.js';
3
+ import { useWorkflowReloadStore, releaseLeaseKeptForReload, useInstalledNodes, buildNodeCheck, FlowBuilderPage, buildRequiredNodeTypes } from './chunk-H2B2J2PY.js';
4
+ import { paramsFromOperation } from './chunk-24VHW3ZF.js';
5
5
  import { CreateWorkflowRefusalDialog } from './chunk-QGRVYPQC.js';
6
6
  import { canvasFromDefinition } from './chunk-CKF2FBUP.js';
7
7
  import { useLazyWorkflowDefinition, useCreateWorkflow } from './chunk-K22NDWSD.js';