@burdenoff/fluidgrids-fe-sdk 2026.1101.1 → 2026.1101.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 (51) hide show
  1. package/dist/{ExecutionDetailPage-4LPCNWM3.js → ExecutionDetailPage-Q77U6YJO.js} +11 -8
  2. package/dist/{ExecutionsListPage-HNPUKYD7.js → ExecutionsListPage-X4H4FVLN.js} +6 -5
  3. package/dist/{WorkflowBuilder-QFSCYCUC.js → WorkflowBuilder-RJPRUMQR.js} +11 -8
  4. package/dist/{WorkflowsList-RV4BRJO7.js → WorkflowsList-R2JJK7BL.js} +7 -6
  5. package/dist/agentTools-MISTH7JI.js +349 -0
  6. package/dist/{chunk-77HIU3CX.js → chunk-26HGYPBC.js} +1 -1
  7. package/dist/{chunk-76UUEMTN.js → chunk-37VUN74D.js} +4 -4
  8. package/dist/{chunk-QPZCJKII.js → chunk-3ERT6FQK.js} +3 -3
  9. package/dist/chunk-472HJ3S3.js +3929 -0
  10. package/dist/{chunk-WNZV4SLU.js → chunk-4QHCXTHW.js} +4 -4
  11. package/dist/chunk-AASHQI77.js +126 -0
  12. package/dist/chunk-CGXQVZGY.js +260 -0
  13. package/dist/chunk-CRDG2SQQ.js +185 -0
  14. package/dist/chunk-DQ2ZCXYX.js +21875 -0
  15. package/dist/chunk-F7DD7BOB.js +1164 -0
  16. package/dist/chunk-GTEBQQ7J.js +24 -0
  17. package/dist/{chunk-ALFMJSD6.js → chunk-H7XPXONT.js} +1 -1
  18. package/dist/{chunk-UO5DUKYN.js → chunk-HKKSXOFO.js} +8 -7
  19. package/dist/chunk-IA2ZCHNQ.js +1336 -0
  20. package/dist/{chunk-3M36XWAH.js → chunk-IGRIN7NL.js} +8 -7
  21. package/dist/chunk-JDLQ6QIB.js +283 -0
  22. package/dist/{chunk-AD7BICOT.js → chunk-JKBCLBHY.js} +1 -1
  23. package/dist/{chunk-6JX5UPDW.js → chunk-JNZCXFLD.js} +1 -1
  24. package/dist/{chunk-SEFOT2LD.js → chunk-LWLHPVIA.js} +1 -1
  25. package/dist/{chunk-JWROEOG5.js → chunk-LYTR6IQO.js} +1 -38
  26. package/dist/chunk-MR2B67NW.js +338 -0
  27. package/dist/{chunk-RIHYPPMQ.js → chunk-NLYQ3XDE.js} +1 -1
  28. package/dist/{chunk-6ILIBJFH.js → chunk-NZJWKVER.js} +7904 -7943
  29. package/dist/chunk-OCJTTHTS.js +46 -0
  30. package/dist/chunk-OSQ3OCR3.js +1193 -0
  31. package/dist/{chunk-VJL3DFJT.js → chunk-REO4S5MY.js} +2 -2
  32. package/dist/{chunk-XKQMCPSB.js → chunk-T2UUYYVJ.js} +4 -4
  33. package/dist/{chunk-BXR6BWXM.js → chunk-W7MTSATB.js} +5 -5
  34. package/dist/{chunk-A47PSD7A.js → chunk-WF6GMBR4.js} +7 -4
  35. package/dist/chunk-WYCB6OQL.js +19709 -0
  36. package/dist/{chunk-YOLPHVOE.js → chunk-YKFR7BZJ.js} +1 -1
  37. package/dist/{chunk-26NENGXA.js → chunk-YSXNJGCY.js} +4 -4
  38. package/dist/code-editor-field-JKCUR6BI.js +3 -0
  39. package/dist/executions.js +12 -9
  40. package/dist/history.js +4 -3
  41. package/dist/index.js +41 -32
  42. package/dist/node-detail-view-PCYFQX62.js +2034 -0
  43. package/dist/observability.js +5 -4
  44. package/dist/quick-config-panel-BRZZHOSI.js +402 -0
  45. package/dist/settings.js +6 -5
  46. package/dist/templates.js +10 -7
  47. package/dist/workflow-builder.js +12 -9
  48. package/dist/workflows-list.js +7 -6
  49. package/package.json +4 -1
  50. package/dist/chunk-NMEI7TQW.js +0 -2628
  51. package/dist/chunk-S7XV65DB.js +0 -50350
@@ -1,7 +1,7 @@
1
- import { FailureTriagePanel } from './chunk-ALFMJSD6.js';
2
- import { useDataSinks, useDataSinkData, useInsightsData, useRunReplayActions } from './chunk-RIHYPPMQ.js';
1
+ import { FailureTriagePanel } from './chunk-H7XPXONT.js';
2
+ import { useDataSinks, useDataSinkData, useInsightsData, useRunReplayActions } from './chunk-NLYQ3XDE.js';
3
3
  import { proposalCanvasPath } from './chunk-GLYINMOR.js';
4
- import { useContinuousOptimisationEnabled, throwIfResultError } from './chunk-6ILIBJFH.js';
4
+ import { useContinuousOptimisationEnabled, throwIfResultError } from './chunk-NZJWKVER.js';
5
5
  import { useFluidGridsPermission, FLUIDGRIDS_PERMISSIONS, SdkPermissionButton } from './chunk-ZUVFD5KV.js';
6
6
  import { SetContinuousOptimisationEnabledDocument, FgRunOptimisationScanDocument, ProposeOptimisationDocument, WorkflowProposalDocument, DismissOptimisationSuggestionDocument, SnoozeOptimisationSuggestionDocument, OptimisationSuggestionsDocument, ContinuousOptimisationSettingsDocument } from './chunk-IHEV5HTD.js';
7
7
  import { useTr } from './chunk-UULVIT25.js';
@@ -420,12 +420,13 @@ function useContinuousOptimisation(active) {
420
420
  if (refetchToken === refetchRef.current) setLoading(false);
421
421
  }
422
422
  }, [loadSuggestions]);
423
+ const invalidateLoads = useCallback(() => {
424
+ loadRef.current += 1;
425
+ }, []);
423
426
  useEffect(() => {
424
427
  void refetch();
425
- return () => {
426
- loadRef.current++;
427
- };
428
- }, [active, refetch]);
428
+ return invalidateLoads;
429
+ }, [active, refetch, invalidateLoads]);
429
430
  const setEnabled = useCallback(
430
431
  async (enabled) => {
431
432
  const load = ++loadRef.current;
@@ -0,0 +1,283 @@
1
+ // src/builder/lib/assert-rules.ts
2
+ var ASSERT_OPERATORS = [
3
+ {
4
+ wire: "equals",
5
+ value: "EQUALS" /* Equals */,
6
+ operand: "expected",
7
+ label: "equals"
8
+ },
9
+ {
10
+ wire: "notEquals",
11
+ value: "NOT_EQUALS" /* NotEquals */,
12
+ operand: "expected",
13
+ label: "does not equal"
14
+ },
15
+ {
16
+ wire: "contains",
17
+ value: "CONTAINS" /* Contains */,
18
+ operand: "expected",
19
+ label: "contains"
20
+ },
21
+ {
22
+ wire: "notContains",
23
+ value: "NOT_CONTAINS" /* NotContains */,
24
+ operand: "expected",
25
+ label: "does not contain"
26
+ },
27
+ {
28
+ wire: "matches",
29
+ value: "MATCHES" /* Matches */,
30
+ operand: "expected",
31
+ label: "matches regex"
32
+ },
33
+ {
34
+ wire: "jsonSchema",
35
+ value: "JSON_SCHEMA" /* JsonSchema */,
36
+ operand: "expected",
37
+ label: "matches JSON Schema"
38
+ },
39
+ {
40
+ wire: "between",
41
+ value: "BETWEEN" /* Between */,
42
+ operand: "range",
43
+ label: "is between"
44
+ },
45
+ {
46
+ wire: "itemCount",
47
+ value: "ITEM_COUNT" /* ItemCount */,
48
+ operand: "range",
49
+ label: "has item count"
50
+ },
51
+ {
52
+ wire: "exists",
53
+ value: "EXISTS" /* Exists */,
54
+ operand: "none",
55
+ label: "exists"
56
+ },
57
+ {
58
+ wire: "notExists",
59
+ value: "NOT_EXISTS" /* NotExists */,
60
+ operand: "none",
61
+ label: "does not exist"
62
+ }
63
+ ];
64
+ var MAX_REGEX_LENGTH = 500;
65
+ var MAX_RULES = 50;
66
+ function operatorSpec(value) {
67
+ if (typeof value !== "string") return null;
68
+ return ASSERT_OPERATORS.find(
69
+ (spec) => spec.wire === value || spec.value === value
70
+ ) ?? null;
71
+ }
72
+ function isRecord(value) {
73
+ return typeof value === "object" && value !== null && !Array.isArray(value);
74
+ }
75
+ function optionalNumber(value) {
76
+ if (value === void 0 || value === null) return void 0;
77
+ return typeof value === "number" && Number.isFinite(value) ? value : false;
78
+ }
79
+ function normaliseAssertRule(raw, index) {
80
+ if (!isRecord(raw)) return { problem: { code: "notObject", index } };
81
+ const spec = operatorSpec(raw.operator);
82
+ if (!spec)
83
+ return {
84
+ problem: {
85
+ code: "unknownOperator",
86
+ index,
87
+ operator: String(raw.operator ?? "")
88
+ }
89
+ };
90
+ const rule = { operator: spec.wire };
91
+ if (raw.path !== void 0 && raw.path !== null && raw.path !== "") {
92
+ if (typeof raw.path !== "string")
93
+ return { problem: { code: "pathInvalid", index } };
94
+ rule.path = raw.path;
95
+ }
96
+ if (raw.message !== void 0 && raw.message !== null && raw.message !== "") {
97
+ if (typeof raw.message !== "string")
98
+ return { problem: { code: "messageInvalid", index } };
99
+ rule.message = raw.message;
100
+ }
101
+ if (spec.operand === "expected") {
102
+ if (!("expected" in raw))
103
+ return { problem: { code: "expectedRequired", index } };
104
+ if (spec.wire === "matches") {
105
+ if (typeof raw.expected !== "string")
106
+ return { problem: { code: "regexInvalid", index } };
107
+ if (raw.expected.length > MAX_REGEX_LENGTH)
108
+ return { problem: { code: "regexTooLong", index } };
109
+ try {
110
+ new RegExp(raw.expected);
111
+ } catch {
112
+ return { problem: { code: "regexInvalid", index } };
113
+ }
114
+ }
115
+ if (spec.wire === "jsonSchema" && !isRecord(raw.expected))
116
+ return { problem: { code: "schemaInvalid", index } };
117
+ rule.expected = raw.expected;
118
+ }
119
+ if (spec.operand === "range") {
120
+ const min = optionalNumber(raw.min);
121
+ const max = optionalNumber(raw.max);
122
+ if (min === false || max === false)
123
+ return { problem: { code: "rangeInvalid", index } };
124
+ if (min === void 0 && max === void 0)
125
+ return { problem: { code: "rangeRequired", index } };
126
+ if (min !== void 0 && max !== void 0 && min > max)
127
+ return { problem: { code: "rangeInvalid", index } };
128
+ if (min !== void 0) rule.min = min;
129
+ if (max !== void 0) rule.max = max;
130
+ }
131
+ return { rule };
132
+ }
133
+ function normaliseAssertRules(raw) {
134
+ if (raw.length === 0) return { problem: { code: "empty" } };
135
+ if (raw.length > MAX_RULES)
136
+ return { problem: { code: "tooMany", count: raw.length } };
137
+ const rules = [];
138
+ for (const [index, item] of raw.entries()) {
139
+ const result = normaliseAssertRule(item, index);
140
+ if ("problem" in result) return result;
141
+ rules.push(result.rule);
142
+ }
143
+ return { rules };
144
+ }
145
+ function describeAssertRuleProblem(problem) {
146
+ const at = "index" in problem ? `Rule ${problem.index + 1}: ` : "";
147
+ switch (problem.code) {
148
+ case "notObject":
149
+ return {
150
+ key: "fluidgrids.builder.assertRules.notObject",
151
+ fallback: `${at}a rule must be an object.`
152
+ };
153
+ case "unknownOperator":
154
+ return {
155
+ key: "fluidgrids.builder.assertRules.unknownOperator",
156
+ fallback: `${at}unknown operator "${problem.operator}". Use ${ASSERT_OPERATORS.map((spec) => spec.wire).join(", ")}.`
157
+ };
158
+ case "expectedRequired":
159
+ return {
160
+ key: "fluidgrids.builder.assertRules.expectedRequired",
161
+ fallback: `${at}this operator needs an expected value.`
162
+ };
163
+ case "rangeRequired":
164
+ return {
165
+ key: "fluidgrids.builder.assertRules.rangeRequired",
166
+ fallback: `${at}set a minimum, a maximum or both.`
167
+ };
168
+ case "rangeInvalid":
169
+ return {
170
+ key: "fluidgrids.builder.assertRules.rangeInvalid",
171
+ fallback: `${at}minimum and maximum must be numbers, with the minimum not above the maximum.`
172
+ };
173
+ case "regexInvalid":
174
+ return {
175
+ key: "fluidgrids.builder.assertRules.regexInvalid",
176
+ fallback: `${at}the expected value is not a valid regular expression.`
177
+ };
178
+ case "regexTooLong":
179
+ return {
180
+ key: "fluidgrids.builder.assertRules.regexTooLong",
181
+ fallback: `${at}a regular expression may have at most ${MAX_REGEX_LENGTH} characters.`
182
+ };
183
+ case "schemaInvalid":
184
+ return {
185
+ key: "fluidgrids.builder.assertRules.schemaInvalid",
186
+ fallback: `${at}the expected value must be a JSON Schema object.`
187
+ };
188
+ case "pathInvalid":
189
+ return {
190
+ key: "fluidgrids.builder.assertRules.pathInvalid",
191
+ fallback: `${at}the path must be text.`
192
+ };
193
+ case "messageInvalid":
194
+ return {
195
+ key: "fluidgrids.builder.assertRules.messageInvalid",
196
+ fallback: `${at}the message must be text.`
197
+ };
198
+ case "tooMany":
199
+ return {
200
+ key: "fluidgrids.builder.assertRules.tooMany",
201
+ fallback: `At most ${MAX_RULES} rules (found ${problem.count}).`
202
+ };
203
+ case "empty":
204
+ return {
205
+ key: "fluidgrids.builder.assertRules.empty",
206
+ fallback: "Add at least one rule."
207
+ };
208
+ }
209
+ }
210
+ function readAssertRulesSetting(value) {
211
+ if (value === void 0 || value === null || value === "") return [];
212
+ if (Array.isArray(value)) return value;
213
+ if (typeof value !== "string") return null;
214
+ try {
215
+ const parsed = JSON.parse(value);
216
+ return Array.isArray(parsed) ? parsed : null;
217
+ } catch {
218
+ return null;
219
+ }
220
+ }
221
+ function emptyAssertRuleRow() {
222
+ return {
223
+ path: "",
224
+ operator: "equals",
225
+ expected: "",
226
+ min: "",
227
+ max: "",
228
+ message: ""
229
+ };
230
+ }
231
+ function rowNumber(value) {
232
+ return typeof value === "number" && Number.isFinite(value) ? String(value) : "";
233
+ }
234
+ function rowExpected(operator, value) {
235
+ if (value === void 0) return "";
236
+ if (operator === "matches" && typeof value === "string") return value;
237
+ return JSON.stringify(value);
238
+ }
239
+ function rowsFromRules(rules) {
240
+ return rules.map((raw) => {
241
+ const rule = isRecord(raw) ? raw : {};
242
+ const operator = operatorSpec(rule.operator)?.wire ?? (typeof rule.operator === "string" ? rule.operator : "equals");
243
+ return {
244
+ path: typeof rule.path === "string" ? rule.path : "",
245
+ operator,
246
+ expected: rowExpected(operator, rule.expected),
247
+ min: rowNumber(rule.min),
248
+ max: rowNumber(rule.max),
249
+ message: typeof rule.message === "string" ? rule.message : ""
250
+ };
251
+ });
252
+ }
253
+ function parseExpected(operator, text) {
254
+ if (operator === "matches") return text;
255
+ try {
256
+ return JSON.parse(text);
257
+ } catch {
258
+ return text;
259
+ }
260
+ }
261
+ function parseRowNumber(text) {
262
+ const trimmed = text.trim();
263
+ if (trimmed === "") return void 0;
264
+ const value = Number(trimmed);
265
+ return Number.isFinite(value) ? value : trimmed;
266
+ }
267
+ function ruleFromRow(row) {
268
+ const spec = operatorSpec(row.operator);
269
+ const rule = { operator: row.operator };
270
+ if (row.path.trim()) rule.path = row.path.trim();
271
+ if (spec?.operand === "expected" && (row.expected !== "" || spec.wire === "matches"))
272
+ rule.expected = parseExpected(spec.wire, row.expected);
273
+ if (spec?.operand === "range") {
274
+ const min = parseRowNumber(row.min);
275
+ const max = parseRowNumber(row.max);
276
+ if (min !== void 0) rule.min = min;
277
+ if (max !== void 0) rule.max = max;
278
+ }
279
+ if (row.message.trim()) rule.message = row.message.trim();
280
+ return rule;
281
+ }
282
+
283
+ export { ASSERT_OPERATORS, describeAssertRuleProblem, emptyAssertRuleRow, normaliseAssertRules, operatorSpec, readAssertRulesSetting, rowsFromRules, ruleFromRow };
@@ -1,4 +1,4 @@
1
- import { throwIfResultError, describeOperationError } from './chunk-6ILIBJFH.js';
1
+ import { throwIfResultError, describeOperationError } from './chunk-NZJWKVER.js';
2
2
  import { useTr } from './chunk-UULVIT25.js';
3
3
  import { getFluidGridsClient } from './chunk-NTWG3CJX.js';
4
4
  import { useState, useCallback, useEffect, useMemo } from 'react';
@@ -1,5 +1,5 @@
1
1
  import { historyControls } from './chunk-FNZZ5JJL.js';
2
- import { useWorkflowDefinitions } from './chunk-SEFOT2LD.js';
2
+ import { useWorkflowDefinitions } from './chunk-LWLHPVIA.js';
3
3
  import { useFluidGridsPageControls } from './chunk-PJAWNFJV.js';
4
4
  import { FluidGridsDocsLink } from './chunk-4VJ3MDOV.js';
5
5
  import { getFluidGridsConfig } from './chunk-6AMNEX2Y.js';
@@ -1,4 +1,4 @@
1
- import { useFluidGridsAnalytics, throwIfResultError, emitWorkflowCreated, emitRunStarted, runTriggerFromMode, openRunQuotaUpgradePrompt, emitWorkflowPublished } from './chunk-6ILIBJFH.js';
1
+ import { useFluidGridsAnalytics, throwIfResultError, emitWorkflowCreated, emitRunStarted, runTriggerFromMode, openRunQuotaUpgradePrompt, emitWorkflowPublished } from './chunk-NZJWKVER.js';
2
2
  import { getFluidGridsConfig } from './chunk-6AMNEX2Y.js';
3
3
  import { WorkflowDefinitionsDocument, WorkflowDefinitionDocument, WorkflowVersionsDocument, CreateWorkflowDefinitionDocument, ImportWorkflowDocument, UpdateWorkflowDefinitionDocument, CreateWorkflowVersionDocument, DeleteWorkflowDefinitionDocument, DuplicateWorkflowDocument, RestoreWorkflowVersionDocument, TriggerWorkflowDocument, WorkflowRunsDocument, WorkflowRunDocument, DashboardSummaryDocument, ActivateWorkflowDefinitionDocument, DeactivateWorkflowDefinitionDocument } from './chunk-IHEV5HTD.js';
4
4
  import { useTr } from './chunk-UULVIT25.js';
@@ -1,47 +1,10 @@
1
1
  import { REPLAY_WORKFLOW_RUN, RETRY_WORKFLOW_RUNS } from './chunk-5ERAJC2I.js';
2
- import { useFluidGridsAnalytics, throwIfResultError, emitRunStarted, openRunQuotaUpgradePrompt } from './chunk-6ILIBJFH.js';
2
+ import { useFluidGridsAnalytics, throwIfResultError, emitRunStarted, openRunQuotaUpgradePrompt } from './chunk-NZJWKVER.js';
3
3
  import { useExecutionsStore } from './chunk-6AMNEX2Y.js';
4
4
  import { ExecutionsListDocument, ExecutionDetailDocument, ExecutionStatsDocument, PauseExecutionDocument, ResumeExecutionDocument, CancelExecutionDocument, RetryNodeDocument, TriggerWorkflowDocument, TerminateExecutionDocument } from './chunk-IHEV5HTD.js';
5
5
  import { useTr } from './chunk-UULVIT25.js';
6
6
  import { getFluidGridsClient } from './chunk-NTWG3CJX.js';
7
7
  import { useState, useRef, useCallback, useEffect, useMemo } from 'react';
8
- import { gql } from '@apollo/client';
9
-
10
- gql`
11
- subscription NodeStateUpdated($runId: String!) {
12
- _empty
13
- }
14
- `;
15
- gql`
16
- subscription WorkflowCompleted($runId: String!) {
17
- _empty
18
- }
19
- `;
20
- gql`
21
- subscription WorkflowError($runId: String!) {
22
- _empty
23
- }
24
- `;
25
- gql`
26
- subscription ExecutionUpdated($runId: String!) {
27
- _empty
28
- }
29
- `;
30
- gql`
31
- subscription ExecutionNodeStateUpdated($runId: String!) {
32
- _empty
33
- }
34
- `;
35
- gql`
36
- subscription ExecutionCompleted($runId: String!) {
37
- _empty
38
- }
39
- `;
40
- gql`
41
- subscription ExecutionError($runId: String!) {
42
- _empty
43
- }
44
- `;
45
8
 
46
9
  // src/modules/executions/utils/date-range.ts
47
10
  function toDate(value) {