@burdenoff/fluidgrids-fe-sdk 2026.1109.9 → 2026.1110.2

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 (56) hide show
  1. package/dist/{ExecutionDetailPage-2ORSV3YN.js → ExecutionDetailPage-UXQFBLF3.js} +14 -14
  2. package/dist/{ExecutionsListPage-MY45NECW.js → ExecutionsListPage-A4GCUNFR.js} +11 -11
  3. package/dist/{WorkflowBuilder-MWC2BCTQ.js → WorkflowBuilder-ZLVMV2UA.js} +21 -15
  4. package/dist/{WorkflowsList-6AG7CFZM.js → WorkflowsList-XPNGNR4A.js} +8 -8
  5. package/dist/{agentTools-5O2KPQYJ.js → agentTools-V26FOMTS.js} +5 -7
  6. package/dist/{chunk-ACME5GOU.js → chunk-2DBAQR6F.js} +2 -2
  7. package/dist/{chunk-MYE6CMGK.js → chunk-2H4XAES7.js} +3 -3
  8. package/dist/{chunk-IZSWG5G3.js → chunk-3F4DIVKT.js} +1 -1
  9. package/dist/chunk-3JGAI5YC.js +1437 -0
  10. package/dist/{chunk-MSNCU6US.js → chunk-5TGPH3CX.js} +4 -4
  11. package/dist/{chunk-U52PO4QQ.js → chunk-5V7PMLQN.js} +1320 -58
  12. package/dist/{chunk-TKSVFP36.js → chunk-5ZAOXCIQ.js} +6 -6
  13. package/dist/{chunk-POCNG3PM.js → chunk-6CPQVLHT.js} +15 -16
  14. package/dist/{chunk-2LERIIZM.js → chunk-7UFE2CHD.js} +308 -1026
  15. package/dist/{chunk-VAWYR6P4.js → chunk-A6Q4FWB6.js} +9 -1
  16. package/dist/{chunk-G4NAU6FF.js → chunk-CBX2CXGH.js} +8 -8
  17. package/dist/{chunk-5UA262ZO.js → chunk-CKF2FBUP.js} +1 -1
  18. package/dist/{chunk-5YLS3WH5.js → chunk-D4L5BN64.js} +1 -1
  19. package/dist/{chunk-VYXTP6YF.js → chunk-DDINUPO3.js} +2185 -5390
  20. package/dist/{chunk-DFFQYK2X.js → chunk-DIIGFBYT.js} +1 -1
  21. package/dist/{chunk-3T3C3475.js → chunk-G7BT24PD.js} +550 -3
  22. package/dist/chunk-HORSE7WX.js +54 -0
  23. package/dist/{chunk-7ADEPA4W.js → chunk-I3DBTNWQ.js} +6 -6
  24. package/dist/{chunk-HZ7FQCFU.js → chunk-JNSHR2J2.js} +1 -1
  25. package/dist/{chunk-ZXLXZFWO.js → chunk-K22NDWSD.js} +2 -2
  26. package/dist/{chunk-JXCJRBWD.js → chunk-K2X63CR2.js} +1 -5
  27. package/dist/{chunk-Q526TUOC.js → chunk-L5MZ74DA.js} +1 -1
  28. package/dist/{chunk-WKF72AS2.js → chunk-OVZA4IM7.js} +4 -4
  29. package/dist/{chunk-GR3QNLFS.js → chunk-OZNFRJKC.js} +5 -5
  30. package/dist/{chunk-NEB4Y7AX.js → chunk-PI4AW4T2.js} +241 -34
  31. package/dist/{chunk-TNMXKPJX.js → chunk-PICOXEUO.js} +4 -4
  32. package/dist/{chunk-QWDF72GZ.js → chunk-QGRVYPQC.js} +2 -2
  33. package/dist/{chunk-THIMC2ZD.js → chunk-WGUHISC2.js} +29 -11
  34. package/dist/{chunk-B3USL2JQ.js → chunk-X7XVRJK2.js} +2 -2
  35. package/dist/{chunk-4EZFAL24.js → chunk-XLU63IUB.js} +6 -6
  36. package/dist/{chunk-CX3LABFK.js → chunk-Z6D6YL7C.js} +1 -1
  37. package/dist/{chunk-NCXK2AO6.js → chunk-ZQTANHKA.js} +2 -2
  38. package/dist/chunk-ZZBZPBO5.js +1644 -0
  39. package/dist/executions.js +15 -15
  40. package/dist/history.js +7 -9
  41. package/dist/index.d.ts +367 -159
  42. package/dist/index.js +592 -68
  43. package/dist/{node-detail-view-ZFGS3FWU.js → node-detail-view-2AFXRNX6.js} +19 -864
  44. package/dist/nodes.js +2 -2
  45. package/dist/observability.js +7 -7
  46. package/dist/{quick-config-panel-ZDGYZR7Y.js → quick-config-panel-U4AELSCT.js} +12 -54
  47. package/dist/settings.js +9 -9
  48. package/dist/templates.js +21 -14
  49. package/dist/workflow-builder.js +22 -16
  50. package/dist/workflow-preview.js +2 -2
  51. package/dist/workflows-list.js +8 -8
  52. package/package.json +1 -1
  53. package/dist/chunk-GTEBQQ7J.js +0 -24
  54. package/dist/chunk-O2OFNGAF.js +0 -338
  55. package/dist/chunk-QTOPG7SR.js +0 -501
  56. package/dist/chunk-U7UNWR3D.js +0 -260
@@ -1534,10 +1534,6 @@ function mergeStickyNotes(def) {
1534
1534
  function resolveOperationName(selectedOperation, fallback) {
1535
1535
  return typeof selectedOperation === "string" && selectedOperation.trim() ? selectedOperation : fallback;
1536
1536
  }
1537
- function canRenderOperationPanel(selectedOperation, supportedOperations) {
1538
- const operationName = resolveOperationName(selectedOperation, "");
1539
- return operationName === "" || supportedOperations.includes(operationName);
1540
- }
1541
1537
  function isRecord4(value) {
1542
1538
  return typeof value === "object" && value !== null && !Array.isArray(value);
1543
1539
  }
@@ -1957,4 +1953,4 @@ function LogicNodeCard({
1957
1953
  );
1958
1954
  }
1959
1955
 
1960
- export { CODE_WORKFLOW_NODE_TYPE, DEFAULT_STICKY_COLOR, InputHandles, LogicNodeCard, NODE_OPERATION_DRAG_DATA_FORMAT, NODE_TYPE_DRAG_DATA_FORMAT, NodeCard, NodeCardBody, NodeCardHeader, NodeTypeIcon, OutputHandles, STICKY_COLORS, STICKY_NOTE_TYPE, WAIT_FOR_SIGNAL_NODE_TYPE, canRenderOperationPanel, changedSourceFiles, childRunIdOf, defaultSourcePath, diagnosticsByPath, interfaceFields, interfaceHandlers, isEditableSourcePath, isImageIcon, isNodeTrigger, isTriggerOperation, mergeStickyNotes, nodeAccent, outputHandlesSpacerHeight, partitionStickyNotes, projectLanguage, readCodeWorkflowState, readSignalName, resolveInputHandles, resolveOperationName, resolveOutputHandles, resolveStickyColor, sourceLanguageOf, stickySurfaceStyle, synchronizeOperationUpdate, useFlowStore, useIsValidConnection };
1956
+ export { CODE_WORKFLOW_NODE_TYPE, DEFAULT_STICKY_COLOR, InputHandles, LogicNodeCard, NODE_OPERATION_DRAG_DATA_FORMAT, NODE_TYPE_DRAG_DATA_FORMAT, NodeCard, NodeCardBody, NodeCardHeader, NodeTypeIcon, OutputHandles, STICKY_COLORS, STICKY_NOTE_TYPE, WAIT_FOR_SIGNAL_NODE_TYPE, changedSourceFiles, childRunIdOf, defaultSourcePath, diagnosticsByPath, interfaceFields, interfaceHandlers, isEditableSourcePath, isImageIcon, isNodeTrigger, isTriggerOperation, mergeStickyNotes, nodeAccent, outputHandlesSpacerHeight, partitionStickyNotes, projectLanguage, readCodeWorkflowState, readSignalName, resolveInputHandles, resolveOperationName, resolveOutputHandles, resolveStickyColor, sourceLanguageOf, stickySurfaceStyle, synchronizeOperationUpdate, useFlowStore, useIsValidConnection };
@@ -1,4 +1,4 @@
1
- import { RunFailureClustersDocument, DismissRunFailureClusterDocument, RunFailureTriageSettingsDocument, SetRunFailureTriageEnabledDocument, FgTriageFailedRunsDocument } from './chunk-VAWYR6P4.js';
1
+ import { RunFailureClustersDocument, DismissRunFailureClusterDocument, RunFailureTriageSettingsDocument, SetRunFailureTriageEnabledDocument, FgTriageFailedRunsDocument } from './chunk-A6Q4FWB6.js';
2
2
  import { useTr } from './chunk-UULVIT25.js';
3
3
  import { getFluidGridsClient } from './chunk-PDODDDHY.js';
4
4
  import { throwIfResultError } from './chunk-JKLZ6YZ3.js';
@@ -1,9 +1,9 @@
1
- import { useNodeSelectedEvent, Card, FluidGridsMark } from './chunk-2LERIIZM.js';
1
+ import { useNodeSelectedEvent, Card, FluidGridsMark } from './chunk-7UFE2CHD.js';
2
2
  import { Input } from './chunk-IEVSFCFS.js';
3
- import { useWorkflowDefinition } from './chunk-ZXLXZFWO.js';
3
+ import { useWorkflowDefinition } from './chunk-K22NDWSD.js';
4
4
  import { Button } from './chunk-QJAZXCFQ.js';
5
- import { FluidGridsProvider } from './chunk-VYXTP6YF.js';
6
- import { useFlowStore } from './chunk-JXCJRBWD.js';
5
+ import { FluidGridsProvider } from './chunk-DDINUPO3.js';
6
+ import { useFlowStore } from './chunk-K2X63CR2.js';
7
7
  import { cn } from './chunk-JL7CASN5.js';
8
8
  import { useTr } from './chunk-UULVIT25.js';
9
9
  import { useState, useRef, useEffect, useCallback } from 'react';
@@ -1,10 +1,10 @@
1
- import { validateDateRange, statusCountFilter, STATUS_COUNT_GROUP_BY, statusCountsOf } from './chunk-ACME5GOU.js';
2
- import { isAgentNodeType } from './chunk-WZ3EJVS6.js';
3
- import { useAvailableTags, formatRunVersion, nodeDisplayTitle } from './chunk-DFFQYK2X.js';
1
+ import { validateDateRange, statusCountFilter, STATUS_COUNT_GROUP_BY, statusCountsOf } from './chunk-2DBAQR6F.js';
2
+ import { useAvailableTags, formatRunVersion, nodeDisplayTitle } from './chunk-DIIGFBYT.js';
4
3
  import { executionsControls } from './chunk-FNZZ5JJL.js';
5
4
  import { useFluidGridsPageControls } from './chunk-PJAWNFJV.js';
6
- import { useDurableParityEnabled, formatElapsedMs, runDurationMs, nodeStateDurationMs } from './chunk-VYXTP6YF.js';
7
- import { SetWorkflowRunVersioningOverrideDocument, WorkflowRunsCountDocument, DurableParityRunFieldsDocument, WorkflowRunPendingDocument, WorkflowRunMetadataDocument } from './chunk-VAWYR6P4.js';
5
+ import { isAgentNodeType } from './chunk-WZ3EJVS6.js';
6
+ import { useDurableParityEnabled, formatElapsedMs, runDurationMs, nodeStateDurationMs } from './chunk-DDINUPO3.js';
7
+ import { SetWorkflowRunVersioningOverrideDocument, WorkflowRunsCountDocument, DurableParityRunFieldsDocument, WorkflowRunPendingDocument, WorkflowRunMetadataDocument } from './chunk-A6Q4FWB6.js';
8
8
  import { useTr } from './chunk-UULVIT25.js';
9
9
  import { getFluidGridsClient } from './chunk-PDODDDHY.js';
10
10
  import { throwIfResultError, describeOperationError } from './chunk-JKLZ6YZ3.js';
@@ -1,14 +1,31 @@
1
- import { structuredParameterType, parseParameterValue, liveInternalOperations, resolveNodeOperation, readDisplayOptions, getNodeDetail, useNodeRegistryRevision, fieldsFromIO, pathToExpression, NODE_CONFIGS, resolveUiSpec, fieldsFromValue, declaredOutputFields, subscribeWorkflowSaved } from './chunk-VYXTP6YF.js';
1
+ import { structuredParameterType, parseParameterValue, liveInternalOperations, resolveNodeOperation, readDisplayOptions, getNodeDetail, fieldsFromIO, pathToExpression, NODE_CONFIGS, onNodeTypesUpdate, getNodeRegistryRevision, fieldsFromValue, declaredOutputFields, subscribeWorkflowSaved } from './chunk-DDINUPO3.js';
2
2
  import { useBuilderReadOnly } from './chunk-SDZEAIIE.js';
3
- import { useFlowStore } from './chunk-JXCJRBWD.js';
4
- import { EventRegistrationsDocument } from './chunk-VAWYR6P4.js';
3
+ import { useFlowStore } from './chunk-K2X63CR2.js';
4
+ import { EventRegistrationsDocument } from './chunk-A6Q4FWB6.js';
5
5
  import { useTr } from './chunk-UULVIT25.js';
6
6
  import { getFluidGridsClientSafe } from './chunk-PDODDDHY.js';
7
- import { useMemo, useState, useEffect, useRef, useCallback } from 'react';
7
+ import { useMemo, useState, useEffect, useSyncExternalStore, useRef, useCallback } from 'react';
8
8
  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
+ }
12
29
  var FIELD_PATH_MIME = "application/x-fg-field-path";
13
30
  var TYPE_ICON = {
14
31
  string: "mdi:format-text",
@@ -100,23 +117,213 @@ function FieldTree({
100
117
  )) });
101
118
  }
102
119
 
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;
120
+ // src/modules/ui-blocks/parse.ts
121
+ function isRecord(value) {
122
+ return typeof value === "object" && value !== null && !Array.isArray(value);
106
123
  }
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;
124
+ function humanizeFieldName(name) {
125
+ return name.replace(/([a-z0-9])([A-Z])/g, "$1 $2").replace(/[_-]+/g, " ").replace(/\s+/g, " ").trim().replace(/\b\w/g, (c) => c.toUpperCase());
126
+ }
127
+ function synthesizeCardFromInputFields(inputFields) {
128
+ const names = Object.keys(inputFields);
129
+ if (names.length === 0) return null;
130
+ const body = [];
131
+ for (const name of names) {
132
+ const field = isRecord(inputFields[name]) ? inputFields[name] : {};
133
+ const description = typeof field.description === "string" ? field.description : void 0;
134
+ const required = field.required === true;
135
+ const secret = field.secret === true;
136
+ const multiline = name === "body" || name === "htmlBody";
137
+ const label = humanizeFieldName(name);
138
+ body.push({
139
+ type: "TextBlock",
140
+ text: required ? `${label} *` : label,
141
+ wrap: true
142
+ });
143
+ body.push({
144
+ type: "Input.Text",
145
+ id: `args.state.${name}`,
146
+ value: `\${${name}}`,
147
+ ...description ? { placeholder: description } : {},
148
+ // A secret field renders masked (and agent tools treat a password
149
+ // input as sensitive).
150
+ ...secret ? { style: "Password" } : {},
151
+ ...multiline && !secret ? { isMultiline: true } : {},
152
+ ...required ? { isRequired: true, errorMessage: `${label} is required` } : {}
153
+ });
154
+ }
155
+ body.push({
156
+ type: "ActionSet",
157
+ actions: [{ type: "Action.Submit", title: "Apply" }]
158
+ });
159
+ return { type: "AdaptiveCard", version: "1.5", body };
160
+ }
161
+ function secretFieldNames(inputFields) {
162
+ const names = /* @__PURE__ */ new Set();
163
+ if (!isRecord(inputFields)) return names;
164
+ for (const [name, field] of Object.entries(inputFields)) {
165
+ if (isRecord(field) && field.secret === true) names.add(name);
166
+ }
167
+ return names;
168
+ }
169
+ function fieldOfInputId(id) {
170
+ if (typeof id !== "string") return null;
171
+ const name = id.replace(/^(?:args\.)?state\./, "");
172
+ return name.length > 0 ? name : null;
173
+ }
174
+ function maskSecretInputs(card, secrets) {
175
+ if (secrets.size === 0) return card;
176
+ const visit = (value) => {
177
+ if (Array.isArray(value)) return value.map(visit);
178
+ if (!isRecord(value)) return value;
179
+ const copy = {};
180
+ for (const [key, nested] of Object.entries(value))
181
+ copy[key] = visit(nested);
182
+ const field = copy.type === "Input.Text" ? fieldOfInputId(copy.id) : null;
183
+ if (field && secrets.has(field)) {
184
+ copy.style = "Password";
185
+ delete copy.isMultiline;
186
+ }
187
+ return copy;
188
+ };
189
+ return visit(card);
190
+ }
191
+ function validateUiSpec(raw) {
192
+ if (!isRecord(raw)) return "ui is not an object";
193
+ if (raw.version !== 1)
194
+ return `unsupported ui.version: ${String(raw.version)}`;
195
+ if (!Array.isArray(raw.blocks) || raw.blocks.length === 0) {
196
+ return "ui.blocks must be a non-empty array";
197
+ }
198
+ const seenIds = /* @__PURE__ */ new Set();
199
+ const blocks = [];
200
+ for (const [index, rawBlock] of raw.blocks.entries()) {
201
+ if (!isRecord(rawBlock)) return `ui.blocks[${index}] is not an object`;
202
+ const id = rawBlock.id;
203
+ if (typeof id !== "string" || id.length === 0) {
204
+ return `ui.blocks[${index}] is missing a non-empty string id`;
205
+ }
206
+ if (seenIds.has(id)) return `ui.blocks has duplicate id "${id}"`;
207
+ seenIds.add(id);
208
+ if (rawBlock.type === "adaptive_card") {
209
+ if (!isRecord(rawBlock.card)) {
210
+ return `ui.blocks[${index}] ("${id}") has no card object`;
211
+ }
212
+ blocks.push({ id, type: "adaptive_card", card: rawBlock.card });
213
+ } else if (rawBlock.type === "custom") {
214
+ if (typeof rawBlock.component !== "string" || !rawBlock.component) {
215
+ return `ui.blocks[${index}] ("${id}") has no component name`;
216
+ }
217
+ blocks.push({
218
+ id,
219
+ type: "custom",
220
+ component: rawBlock.component,
221
+ props: isRecord(rawBlock.props) ? rawBlock.props : void 0
222
+ });
223
+ } else {
224
+ return `ui.blocks[${index}] ("${id}") has unknown type "${String(rawBlock.type)}"`;
225
+ }
226
+ }
115
227
  return {
116
- data,
117
- fields: data !== void 0 ? fieldsFromValue(data) : source ? declaredOutputFields(source.type, operation) : []
228
+ version: 1,
229
+ blocks,
230
+ ...typeof raw.applyLabel === "string" && raw.applyLabel.trim().length > 0 ? { applyLabel: raw.applyLabel } : {}
118
231
  };
119
232
  }
233
+ function resolveUiSpec(operation) {
234
+ if (!operation) return null;
235
+ const secrets = secretFieldNames(operation.input_fields);
236
+ if (operation.ui !== void 0) {
237
+ const result = validateUiSpec(operation.ui);
238
+ if (typeof result !== "string") {
239
+ const blocks = result.blocks.map(
240
+ (block) => block.type === "adaptive_card" ? { ...block, card: maskSecretInputs(block.card, secrets) } : block
241
+ );
242
+ return { spec: { ...result, blocks }, synthesized: false };
243
+ }
244
+ console.warn(
245
+ `ui-blocks: invalid ui declaration on operation "${operation.name ?? "?"}" (${result}); falling back to adaptive_card`
246
+ );
247
+ }
248
+ if (isRecord(operation.adaptive_card)) {
249
+ return {
250
+ spec: {
251
+ version: 1,
252
+ blocks: [
253
+ {
254
+ id: "main",
255
+ type: "adaptive_card",
256
+ card: maskSecretInputs(operation.adaptive_card, secrets)
257
+ }
258
+ ]
259
+ },
260
+ synthesized: true
261
+ };
262
+ }
263
+ if (isRecord(operation.input_fields)) {
264
+ const card = synthesizeCardFromInputFields(operation.input_fields);
265
+ if (card) {
266
+ return {
267
+ spec: {
268
+ version: 1,
269
+ blocks: [{ id: "main", type: "adaptive_card", card }]
270
+ },
271
+ synthesized: true
272
+ };
273
+ }
274
+ }
275
+ return null;
276
+ }
277
+ function isSubmitAction(action) {
278
+ return isRecord(action) && action.type === "Action.Submit";
279
+ }
280
+ function stripFromActions(actions) {
281
+ return actions.filter((action) => !isSubmitAction(action)).map(
282
+ (action) => isRecord(action) && isRecord(action.card) ? { ...action, card: stripSubmitActions(action.card) } : action
283
+ );
284
+ }
285
+ function stripFromElements(elements) {
286
+ const result = [];
287
+ for (const element of elements) {
288
+ if (!isRecord(element)) {
289
+ result.push(element);
290
+ continue;
291
+ }
292
+ const el = { ...element };
293
+ if (el.type === "ActionSet" && Array.isArray(el.actions)) {
294
+ const remaining = stripFromActions(el.actions);
295
+ if (remaining.length === 0) continue;
296
+ el.actions = remaining;
297
+ }
298
+ if (Array.isArray(el.items)) {
299
+ el.items = stripFromElements(el.items);
300
+ }
301
+ if (Array.isArray(el.columns)) {
302
+ el.columns = el.columns.map(
303
+ (column) => isRecord(column) && Array.isArray(column.items) ? { ...column, items: stripFromElements(column.items) } : column
304
+ );
305
+ }
306
+ result.push(el);
307
+ }
308
+ return result;
309
+ }
310
+ function stripSubmitActions(card) {
311
+ const result = { ...card };
312
+ if (Array.isArray(result.actions)) {
313
+ result.actions = stripFromActions(result.actions);
314
+ }
315
+ if (Array.isArray(result.body)) {
316
+ result.body = stripFromElements(result.body);
317
+ }
318
+ return result;
319
+ }
320
+ function useNodeRegistryRevision() {
321
+ return useSyncExternalStore(
322
+ onNodeTypesUpdate,
323
+ getNodeRegistryRevision,
324
+ getNodeRegistryRevision
325
+ );
326
+ }
120
327
 
121
328
  // src/builder/components/ndv/field-label.ts
122
329
  var UPPERCASE_WORDS = /* @__PURE__ */ new Set([
@@ -150,7 +357,7 @@ function titleWord(word) {
150
357
  if (UPPERCASE_WORDS.has(lower)) return lower.toUpperCase();
151
358
  return lower.charAt(0).toUpperCase() + lower.slice(1);
152
359
  }
153
- function humanizeFieldName(name) {
360
+ function humanizeFieldName2(name) {
154
361
  const words = name.split(".").pop().replace(/([a-z0-9])([A-Z])/g, "$1 $2").replace(/([A-Z]+)([A-Z][a-z])/g, "$1 $2").split(/[\s_-]+/).filter(Boolean);
155
362
  return words.length > 0 ? words.map(titleWord).join(" ") : name;
156
363
  }
@@ -159,7 +366,7 @@ function fieldLabel(name, spec) {
159
366
  const value = spec?.[key];
160
367
  if (typeof value === "string" && value.trim() !== "") return value.trim();
161
368
  }
162
- return humanizeFieldName(name);
369
+ return humanizeFieldName2(name);
163
370
  }
164
371
 
165
372
  // src/builder/lib/mapping-values.ts
@@ -743,7 +950,7 @@ function useWebhookRegistration(workflowKey, triggerNodeId, enabled = true) {
743
950
  }
744
951
 
745
952
  // src/builder/components/ndv/node-option-values.ts
746
- function isRecord(value) {
953
+ function isRecord2(value) {
747
954
  return typeof value === "object" && value !== null && !Array.isArray(value);
748
955
  }
749
956
  function isParameterName(value) {
@@ -751,19 +958,19 @@ function isParameterName(value) {
751
958
  }
752
959
  function isStringOptionList(schema) {
753
960
  if (structuredParameterType(schema) !== "array") return false;
754
- const type = typeof schema === "string" ? schema : isRecord(schema) ? schema.type : void 0;
961
+ const type = typeof schema === "string" ? schema : isRecord2(schema) ? schema.type : void 0;
755
962
  const inlineItem = typeof type === "string" ? type.trim().toLowerCase().match(/^array<(.+)>$/)?.[1] : void 0;
756
- const item = (isRecord(schema) ? schema.items : void 0) ?? inlineItem;
963
+ const item = (isRecord2(schema) ? schema.items : void 0) ?? inlineItem;
757
964
  if (item === void 0) return true;
758
- const itemType = typeof item === "string" ? item : isRecord(item) ? item.type : void 0;
965
+ const itemType = typeof item === "string" ? item : isRecord2(item) ? item.type : void 0;
759
966
  return typeof itemType === "string" && itemType.trim().toLowerCase() === "string";
760
967
  }
761
968
  function readLoadOptionsSpec(value) {
762
- if (!isRecord(value) || typeof value.operation !== "string" || typeof value.labelField !== "string" || typeof value.valueField !== "string")
969
+ if (!isRecord2(value) || typeof value.operation !== "string" || typeof value.labelField !== "string" || typeof value.valueField !== "string")
763
970
  return void 0;
764
971
  let parameterArgs;
765
972
  if (value.parameterArgs !== void 0) {
766
- if (!isRecord(value.parameterArgs)) return void 0;
973
+ if (!isRecord2(value.parameterArgs)) return void 0;
767
974
  parameterArgs = {};
768
975
  for (const [argument, parameter] of Object.entries(value.parameterArgs)) {
769
976
  if (!isParameterName(argument) || typeof parameter !== "string" || !isParameterName(parameter))
@@ -776,7 +983,7 @@ function readLoadOptionsSpec(value) {
776
983
  labelField: value.labelField,
777
984
  valueField: value.valueField,
778
985
  resultPath: typeof value.resultPath === "string" ? value.resultPath : void 0,
779
- staticArgs: isRecord(value.staticArgs) ? value.staticArgs : void 0,
986
+ staticArgs: isRecord2(value.staticArgs) ? value.staticArgs : void 0,
780
987
  parameterArgs
781
988
  };
782
989
  }
@@ -803,7 +1010,7 @@ function resolveLoadOptionsSpec(spec, values, defaults = {}, unavailableParamete
803
1010
  function containsExpression(value) {
804
1011
  if (typeof value === "string") return /\{\{|\$\{|^\$\./.test(value);
805
1012
  if (Array.isArray(value)) return value.some(containsExpression);
806
- return isRecord(value) && Object.values(value).some(containsExpression);
1013
+ return isRecord2(value) && Object.values(value).some(containsExpression);
807
1014
  }
808
1015
  function optionListValues(value) {
809
1016
  if (value === void 0 || value === null || value === "") return [];
@@ -834,17 +1041,17 @@ function optionListText(value) {
834
1041
  }
835
1042
 
836
1043
  // src/builder/lib/multiline-parameters.ts
837
- function isRecord2(value) {
1044
+ function isRecord3(value) {
838
1045
  return typeof value === "object" && value !== null && !Array.isArray(value);
839
1046
  }
840
1047
  function multilineParameters(operation) {
841
1048
  const names = /* @__PURE__ */ new Set();
842
- if (!isRecord2(operation)) return names;
1049
+ if (!isRecord3(operation)) return names;
843
1050
  const legacyCard = operation.adaptive_card ?? operation.adaptiveCard;
844
1051
  const resolved = resolveUiSpec({
845
1052
  name: typeof operation.name === "string" ? operation.name : void 0,
846
1053
  ui: operation.ui,
847
- adaptive_card: isRecord2(legacyCard) ? legacyCard : void 0
1054
+ adaptive_card: isRecord3(legacyCard) ? legacyCard : void 0
848
1055
  });
849
1056
  const pending = resolved?.spec.blocks.flatMap(
850
1057
  (block) => block.type === "adaptive_card" ? [block.card] : []
@@ -859,7 +1066,7 @@ function multilineParameters(operation) {
859
1066
  pending.push(...element);
860
1067
  continue;
861
1068
  }
862
- if (!isRecord2(element)) continue;
1069
+ if (!isRecord3(element)) continue;
863
1070
  if (element.type === "Input.Text" && element.isMultiline === true && typeof element.id === "string") {
864
1071
  const name = element.id.replace(/^(?:args\.)?state\./, "");
865
1072
  if (name) names.add(name);
@@ -872,9 +1079,9 @@ function multilineParameters(operation) {
872
1079
  element.card
873
1080
  );
874
1081
  }
875
- if (isRecord2(operation.input_fields)) {
1082
+ if (isRecord3(operation.input_fields)) {
876
1083
  for (const [name, field] of Object.entries(operation.input_fields)) {
877
- if (!isRecord2(field)) continue;
1084
+ if (!isRecord3(field)) continue;
878
1085
  if (field.isMultiline === true) names.add(name);
879
1086
  else if (field.isMultiline === false) names.delete(name);
880
1087
  }
@@ -1334,4 +1541,4 @@ function useNodeConfig(target, options) {
1334
1541
  return readOnly ? readOnlyNodeConfig(api) : api;
1335
1542
  }
1336
1543
 
1337
- export { ConditionTreeBuilder, FieldTree, SwitchRulesEditor, asRecord, casesFromRules, coerceNumber, fixedParameterState, isStringOptionList, latestNodeLog, nodeSubtitle, nodeTitle, optionListText, optionListValues, optionText, paramsFromOperation, parseMappingValue, resolveLoadOptionsSpec, selectedOperationOf, useNodeConfig };
1544
+ export { ConditionTreeBuilder, FieldTree, SwitchRulesEditor, asRecord, casesFromRules, coerceNumber, fixedParameterState, isStringOptionList, latestNodeLog, nodeSubtitle, nodeTitle, optionListText, optionListValues, optionText, paramsFromOperation, parseMappingValue, resolveLoadOptionsSpec, resolveUiSpec, selectedOperationOf, stripSubmitActions, useNodeConfig };
@@ -1,10 +1,10 @@
1
- import { FailureTriagePanel } from './chunk-Q526TUOC.js';
1
+ import { FailureTriagePanel } from './chunk-L5MZ74DA.js';
2
2
  import { aiSpendPeriod, AI_SPEND_RANGE_DAYS, evidenceFacts, monthlySavingLabel, evidenceWindowDays, shortRunId, DISMISS_REASONS, MAX_DISMISS_NOTE_LENGTH, aiCost, formatTokens, runsOfWorkflowPath } from './chunk-NZAYYUQ4.js';
3
- import { useDataSinks, useDataSinkData, useInsightsData, useRunReplayActions } from './chunk-CX3LABFK.js';
3
+ import { useDataSinks, useDataSinkData, useInsightsData, useRunReplayActions } from './chunk-Z6D6YL7C.js';
4
4
  import { proposalCanvasPath } from './chunk-GLYINMOR.js';
5
- import { useContinuousOptimisationEnabled } from './chunk-VYXTP6YF.js';
6
5
  import { useFluidGridsPermission, FLUIDGRIDS_PERMISSIONS, SdkPermissionButton } from './chunk-ERT444RG.js';
7
- import { SetContinuousOptimisationEnabledDocument, FgRunOptimisationScanDocument, ProposeOptimisationDocument, WorkflowProposalDocument, DismissOptimisationSuggestionDocument, SnoozeOptimisationSuggestionDocument, WorkspaceAiUsageDocument, OptimisationSuggestionsDocument, ContinuousOptimisationSettingsDocument } from './chunk-VAWYR6P4.js';
6
+ import { useContinuousOptimisationEnabled } from './chunk-DDINUPO3.js';
7
+ import { SetContinuousOptimisationEnabledDocument, FgRunOptimisationScanDocument, ProposeOptimisationDocument, WorkflowProposalDocument, DismissOptimisationSuggestionDocument, SnoozeOptimisationSuggestionDocument, WorkspaceAiUsageDocument, OptimisationSuggestionsDocument, ContinuousOptimisationSettingsDocument } from './chunk-A6Q4FWB6.js';
8
8
  import { useTr } from './chunk-UULVIT25.js';
9
9
  import { getFluidGridsClient } from './chunk-PDODDDHY.js';
10
10
  import { throwIfResultError } from './chunk-JKLZ6YZ3.js';
@@ -1,5 +1,5 @@
1
- import { useFluidGridsAnalytics, emitWorkflowLimitHit, emitUpgradeClicked, WORKFLOWS_QUOTA_NAME } from './chunk-VYXTP6YF.js';
2
- import { ExportWorkflowCodeDocument, ShareWorkflowDocument, WorkflowSharingDocument } from './chunk-VAWYR6P4.js';
1
+ import { useFluidGridsAnalytics, emitWorkflowLimitHit, emitUpgradeClicked, WORKFLOWS_QUOTA_NAME } from './chunk-DDINUPO3.js';
2
+ import { ExportWorkflowCodeDocument, ShareWorkflowDocument, WorkflowSharingDocument } from './chunk-A6Q4FWB6.js';
3
3
  import { useTr } from './chunk-UULVIT25.js';
4
4
  import { getFluidGridsClient } from './chunk-PDODDDHY.js';
5
5
  import { describeOperationError, throwIfResultError } from './chunk-JKLZ6YZ3.js';
@@ -1,17 +1,17 @@
1
- import { useDurableRunFields, useRunHistory, useDeterminismStatus, useRunStackTrace, RunHistoryView, SignalRunDialog, terminateDurableRun } from './chunk-3T3C3475.js';
2
- import { useDurableParityRunFields, hasAgentNodeState, agentNodeTraces, orderNodesByExecution, useRunPending, useRunMetadata, ExecutionStatusBadge, NodeTimeline, RunLogViewer, NodeStatusBadge, setRunVersioningOverride } from './chunk-GR3QNLFS.js';
3
- import { useExecution, useExecutionActions, useAutoRefresh, runChainLinks, shortRunId, callbackTone, parseMetadataDefinition, overrideRequestOf } from './chunk-ACME5GOU.js';
4
- import { fetchRunFailureClusters, OPEN_STATUSES, dismissRunFailureCluster, BUCKET_LABELS } from './chunk-Q526TUOC.js';
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';
3
+ import { useExecution, useExecutionActions, useAutoRefresh, runChainLinks, shortRunId, callbackTone, parseMetadataDefinition, overrideRequestOf } from './chunk-2DBAQR6F.js';
4
+ import { fetchRunFailureClusters, OPEN_STATUSES, dismissRunFailureCluster, BUCKET_LABELS } from './chunk-L5MZ74DA.js';
5
5
  import { aiCost, formatTokens, modelLabel } from './chunk-NZAYYUQ4.js';
6
6
  import { useRunPolicyDecisions, RunPolicyDecisions, checkCodecServerUrl, containsEncodedPayload, isEncodedPayload, encodedPayloadBytes, decodePayloads, CodecServerError } from './chunk-OJHBCOBA.js';
7
- 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-5YLS3WH5.js';
8
- import { EntityTagPicker, canSaveRunAsTestCase, useWorkflowProposal, WorkflowProposalCard, MAX_CASE_NAME, saveRunAsTestCase } from './chunk-MYE6CMGK.js';
9
- import { buildNodeDisplayMap, formatRunVersion, nodeDisplayTitle } from './chunk-DFFQYK2X.js';
7
+ import { EntityTagPicker, canSaveRunAsTestCase, useWorkflowProposal, WorkflowProposalCard, MAX_CASE_NAME, saveRunAsTestCase } from './chunk-2H4XAES7.js';
8
+ import { buildNodeDisplayMap, formatRunVersion, nodeDisplayTitle } from './chunk-DIIGFBYT.js';
10
9
  import { AiCreditBalanceSlot } from './chunk-Y53CVZVV.js';
11
- import { useWorkflowVersions } from './chunk-ZXLXZFWO.js';
12
- import { useDurableFunctionNodesEnabled, useDurableParityEnabled, usePhaseCFlags, runSignalTargets, canSignalRun, formatElapsedMs, runDurationMs, useWorkflowTestsEnabled, durableInterfaceOf } from './chunk-VYXTP6YF.js';
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';
13
12
  import { useFluidGridsPermission, FLUIDGRIDS_PERMISSIONS, SdkPermissionButton } from './chunk-ERT444RG.js';
14
- import { TaskQueuesDocument, TaskQueueStatsDocument, CreateTaskQueueDocument, UpdateTaskQueueDocument, DeleteTaskQueueDocument, RunLogsDocument, RunLogAppendedDocument, ExplainRunDocument, RunAiUsageDocument } from './chunk-VAWYR6P4.js';
13
+ import { useDurableFunctionNodesEnabled, useDurableParityEnabled, usePhaseCFlags, runSignalTargets, canSignalRun, formatElapsedMs, runDurationMs, useWorkflowTestsEnabled, durableInterfaceOf } from './chunk-DDINUPO3.js';
14
+ import { TaskQueuesDocument, TaskQueueStatsDocument, CreateTaskQueueDocument, UpdateTaskQueueDocument, DeleteTaskQueueDocument, WorkflowWorkersDocument, WorkerTokensDocument, CreateWorkerTokenDocument, RotateWorkerTokenDocument, DeleteWorkerTokenDocument, SetWorkerTokenConnectionAllowlistDocument, RunLogsDocument, RunLogAppendedDocument, ExplainRunDocument, RunAiUsageDocument } from './chunk-A6Q4FWB6.js';
15
15
  import { useTr } from './chunk-UULVIT25.js';
16
16
  import { getFluidGridsClient, getFluidGridsClientSafe } from './chunk-PDODDDHY.js';
17
17
  import { throwIfResultError, describeOperationError } from './chunk-JKLZ6YZ3.js';
@@ -2002,6 +2002,24 @@ async function updateTaskQueue(id, input) {
2002
2002
  async function deleteTaskQueue(id) {
2003
2003
  return (await writeTyped(DeleteTaskQueueDocument, { id })).deleteTaskQueue;
2004
2004
  }
2005
+ async function fetchWorkflowWorkers(filter) {
2006
+ return (await readTyped(WorkflowWorkersDocument, { filter: filter ?? null })).workflowWorkers;
2007
+ }
2008
+ async function fetchWorkerTokens() {
2009
+ return (await readTyped(WorkerTokensDocument, {})).workerTokens;
2010
+ }
2011
+ async function createWorkerToken(input) {
2012
+ return (await writeTyped(CreateWorkerTokenDocument, input)).createWorkerToken;
2013
+ }
2014
+ async function rotateWorkerToken(id) {
2015
+ return (await writeTyped(RotateWorkerTokenDocument, { id })).rotateWorkerToken;
2016
+ }
2017
+ async function deleteWorkerToken(id) {
2018
+ return (await writeTyped(DeleteWorkerTokenDocument, { id })).deleteWorkerToken;
2019
+ }
2020
+ async function setWorkerTokenConnectionAllowlist(id, names) {
2021
+ return (await writeTyped(SetWorkerTokenConnectionAllowlistDocument, { id, names })).setWorkerTokenConnectionAllowlist;
2022
+ }
2005
2023
 
2006
2024
  // src/modules/run-control/utils/activity-pause.ts
2007
2025
  function text(value) {
@@ -6081,4 +6099,4 @@ function ExecutionDetailPage() {
6081
6099
  );
6082
6100
  }
6083
6101
 
6084
- export { ExecutionDetailPage, HumanRequestCard, RunHumanRequests, createTaskQueue, deleteTaskQueue, fetchTaskQueueStats, fetchTaskQueues, updateTaskQueue, usePendingHumanRequests, useRespondToHumanRequest, useRunHumanRequests };
6102
+ export { ExecutionDetailPage, HumanRequestCard, RunHumanRequests, createTaskQueue, createWorkerToken, deleteTaskQueue, deleteWorkerToken, fetchTaskQueueStats, fetchTaskQueues, fetchWorkerTokens, fetchWorkflowWorkers, rotateWorkerToken, setWorkerTokenConnectionAllowlist, updateTaskQueue, usePendingHumanRequests, useRespondToHumanRequest, useRunHumanRequests };
@@ -1,5 +1,5 @@
1
- import { canvasFromDefinition } from './chunk-5UA262ZO.js';
2
- import { WorkflowDefinitionDocument, WorkflowVersionDiffDocument } from './chunk-VAWYR6P4.js';
1
+ import { canvasFromDefinition } from './chunk-CKF2FBUP.js';
2
+ import { WorkflowDefinitionDocument, WorkflowVersionDiffDocument } from './chunk-A6Q4FWB6.js';
3
3
  import { useTr } from './chunk-UULVIT25.js';
4
4
  import { getFluidGridsClient } from './chunk-PDODDDHY.js';
5
5
  import { describeOperationError, throwIfResultError } from './chunk-JKLZ6YZ3.js';
@@ -1,11 +1,11 @@
1
- import { useRunStatusCounts, ExecutionStats, ExecutionFilters, ExecutionTable, ExecutionCards, ExecutionTimeline, Pagination, runStatusLabels } from './chunk-GR3QNLFS.js';
2
- import { useExecutionsWithStore, useExecutionStats, useExecutionActions, useAutoRefresh, searchFilterConflicts, WORKFLOW_ID_MAX_LENGTH, EMPTY_SEARCH_FILTER, buildSearchAttributeFilter, MAX_SEARCH_CONDITIONS, OPERATORS_BY_TYPE } from './chunk-ACME5GOU.js';
3
- import { useResource, fetchSearchAttributes, NativeSelect, FieldError, RUN_CONTROL_DIALOG_STYLE, parseJsonInput, JsonField, fetchBatchOperations, StatusPill, fetchBatchOperation, cancelBatchOperation, startBatchTerminate, startBatchExport, startBatchOperation, jsonArg } from './chunk-5YLS3WH5.js';
4
- import { useWorkflowDefinitions } from './chunk-ZXLXZFWO.js';
1
+ import { useRunStatusCounts, ExecutionStats, ExecutionFilters, ExecutionTable, ExecutionCards, ExecutionTimeline, Pagination, runStatusLabels } from './chunk-OZNFRJKC.js';
2
+ import { useExecutionsWithStore, useExecutionStats, useExecutionActions, useAutoRefresh, searchFilterConflicts, WORKFLOW_ID_MAX_LENGTH, EMPTY_SEARCH_FILTER, buildSearchAttributeFilter, MAX_SEARCH_CONDITIONS, OPERATORS_BY_TYPE } from './chunk-2DBAQR6F.js';
3
+ import { useWorkflowDefinitions } from './chunk-K22NDWSD.js';
4
+ import { useResource, fetchSearchAttributes, NativeSelect, FieldError, RUN_CONTROL_DIALOG_STYLE, parseJsonInput, JsonField, fetchBatchOperations, StatusPill, fetchBatchOperation, cancelBatchOperation, startBatchTerminate, startBatchExport, startBatchOperation, jsonArg } from './chunk-D4L5BN64.js';
5
5
  import { FluidGridsDocsLink } from './chunk-4VJ3MDOV.js';
6
- import { useDurableParityEnabled, usePhaseCFlags } from './chunk-VYXTP6YF.js';
7
6
  import { useFluidGridsPermission, FLUIDGRIDS_PERMISSIONS } from './chunk-ERT444RG.js';
8
- import { WorkflowBatchOperationUpdatedDocument } from './chunk-VAWYR6P4.js';
7
+ import { useDurableParityEnabled, usePhaseCFlags } from './chunk-DDINUPO3.js';
8
+ import { WorkflowBatchOperationUpdatedDocument } from './chunk-A6Q4FWB6.js';
9
9
  import { useTr } from './chunk-UULVIT25.js';
10
10
  import { getFluidGridsClient } from './chunk-PDODDDHY.js';
11
11
  import { describeOperationError } from './chunk-JKLZ6YZ3.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 { useFluidGridsAnalytics, emitRunStarted, openRunQuotaUpgradePrompt, useFluidGridsFlag, FLUIDGRIDS_FLAGS } from './chunk-VYXTP6YF.js';
2
+ import { useFluidGridsAnalytics, emitRunStarted, openRunQuotaUpgradePrompt, useFluidGridsFlag, FLUIDGRIDS_FLAGS } from './chunk-DDINUPO3.js';
3
3
  import { useTr } from './chunk-UULVIT25.js';
4
4
  import { getFluidGridsClient } from './chunk-PDODDDHY.js';
5
5
  import { throwIfResultError, describeOperationError, emitFluidGridsEvent } from './chunk-JKLZ6YZ3.js';
@@ -1,6 +1,6 @@
1
- import { versionsOfWorkflow, VersionDiffDialog } from './chunk-B3USL2JQ.js';
1
+ import { versionsOfWorkflow, VersionDiffDialog } from './chunk-X7XVRJK2.js';
2
2
  import { historyControls } from './chunk-FNZZ5JJL.js';
3
- import { useWorkflowDefinitions, useRestoreWorkflowVersion } from './chunk-ZXLXZFWO.js';
3
+ import { useWorkflowDefinitions, useRestoreWorkflowVersion } from './chunk-K22NDWSD.js';
4
4
  import { useFluidGridsPageControls } from './chunk-PJAWNFJV.js';
5
5
  import { FluidGridsDocsLink } from './chunk-4VJ3MDOV.js';
6
6
  import { useTr } from './chunk-UULVIT25.js';