@burdenoff/fluidgrids-fe-sdk 2026.1111.13 → 2026.1111.15

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 (43) hide show
  1. package/README.md +41 -0
  2. package/dist/{ExecutionDetailPage-CDkJeeu2.js → ExecutionDetailPage-DO38vZ_F.js} +4 -4
  3. package/dist/{FluidGridsProvider-CDZjKmfD.js → FluidGridsProvider-B9RR_CI_.js} +237 -325
  4. package/dist/{HistoryPage-DnVGN_72.js → HistoryPage-CA42pU85.js} +1 -1
  5. package/dist/{InsightsPage-CGRpZtGu.js → InsightsPage-CBoN_Mj9.js} +2 -2
  6. package/dist/{ManagedAiPolicyAuthority-DbJBledZ.js → ManagedAiPolicyAuthority-CKihmbJE.js} +2 -2
  7. package/dist/{MissingNodesInstallModal-Ca4f--lw.js → MissingNodesInstallModal-Dm0nMBXM.js} +1 -1
  8. package/dist/{TemplateConfigurationModal-ChQsXf0-.js → TemplateConfigurationModal-Bs_V-E4u.js} +1 -1
  9. package/dist/{TemplateDetailPanel-C0YiVdub.js → TemplateDetailPanel-MlT39VLG.js} +1 -1
  10. package/dist/{TemplatesPage-QXtq6mI3.js → TemplatesPage-CHVpWBuw.js} +5 -4
  11. package/dist/{WorkflowSearchRedirect-B4nHALJg.js → WorkflowSearchRedirect-3gyHcYY2.js} +38 -51
  12. package/dist/{WorkflowShareDialog-ByTSWwwR.js → WorkflowShareDialog-0Ai1HED-.js} +2 -1
  13. package/dist/{WorkflowsList-B9F2e8M6.js → WorkflowsList-CJ3KmMHX.js} +5 -4
  14. package/dist/agent-tools.d.ts +3 -0
  15. package/dist/agent-tools.js +5 -0
  16. package/dist/{agentTools-C0g2OWvI.js → agentTools-B1IK1JEO.js} +2 -2
  17. package/dist/{canvasNoteTools-BUWY18XK.js → canvasNoteTools-eewVHVuy.js} +3 -2
  18. package/dist/executions.js +1 -1
  19. package/dist/{flow-builder-BvCQAGDR.js → flow-builder-C_3sY3pZ.js} +54 -209
  20. package/dist/fluidgridsEvents-CNdcrUNN.js +310 -0
  21. package/dist/history.js +1 -1
  22. package/dist/index-CHeY7_A1.d.ts +105 -0
  23. package/dist/{index-CLqh2u28.d.ts → index-DRf25-D3.d.ts} +7 -105
  24. package/dist/index.d.ts +3 -2
  25. package/dist/index.js +21 -946
  26. package/dist/marksStore-DGCXjTmZ.js +151 -0
  27. package/dist/{node-detail-view-CPD_NSZc.js → node-detail-view-CAws5qjg.js} +3 -3
  28. package/dist/observability.d.ts +1 -1
  29. package/dist/observability.js +1 -1
  30. package/dist/{quick-config-panel-DHkYGaCL.js → quick-config-panel-DOzNkSVV.js} +2 -2
  31. package/dist/settings.js +1 -1
  32. package/dist/templates.js +1 -1
  33. package/dist/uiMarkTools-nlmzsHQM.js +937 -0
  34. package/dist/{useExecutions-BqoD7XWi.js → useExecutions-DkS0FTfw.js} +2 -1
  35. package/dist/{useObservability-Cs-5_NHh.js → useObservability-BkxhHZsX.js} +2 -1
  36. package/dist/{useRunHistory-CEL-CIz-.js → useRunHistory-DHehG09Z.js} +1 -1
  37. package/dist/{useWorkflows-Bwpvfdgv.js → useWorkflows-DyhtoVwp.js} +25 -5
  38. package/dist/workflow-builder.js +2 -2
  39. package/dist/workflow-route.d.ts +33 -0
  40. package/dist/workflow-route.js +4 -0
  41. package/dist/workflowRouteData-BkfVOc-O.js +169 -0
  42. package/dist/workflows-list.js +1 -1
  43. package/package.json +9 -1
@@ -0,0 +1,151 @@
1
+ "use client";
2
+ import { create } from "zustand";
3
+
4
+ // src/agentMarks/plainText.ts
5
+ /**
6
+ * ★ BOFF-11584: the text of a callout or note is model output, and the model
7
+ * has read workflow content people wrote. It is shown as plain text only:
8
+ * React renders it as a text node (never `dangerouslySetInnerHTML`, never a
9
+ * markdown renderer), so markup, links and images in it stay inert characters.
10
+ *
11
+ * This keeps it short and printable as well: control characters (other than
12
+ * line breaks) and bidirectional controls, which can disguise what a line
13
+ * says, are removed; runs of blank lines collapse; the result is clamped.
14
+ */
15
+ const BIDI_CONTROLS = /* @__PURE__ */ new Set([
16
+ 1564,
17
+ 8206,
18
+ 8207,
19
+ 8234,
20
+ 8235,
21
+ 8236,
22
+ 8237,
23
+ 8238,
24
+ 8294,
25
+ 8295,
26
+ 8296,
27
+ 8297
28
+ ]);
29
+ function isDroppedCharacter(code) {
30
+ if (code === 10) return false;
31
+ if (code <= 31) return true;
32
+ if (code >= 127 && code <= 159) return true;
33
+ return BIDI_CONTROLS.has(code);
34
+ }
35
+ function toPlainText(text, max) {
36
+ let kept = "";
37
+ for (const character of text.replace(/\r\n?/g, "\n").replace(/\t/g, " ")) if (!isDroppedCharacter(character.codePointAt(0) ?? 0)) kept += character;
38
+ const cleaned = kept.replace(/ {2,}/g, " ").replace(/ *\n */g, "\n").replace(/\n{3,}/g, "\n\n").trim();
39
+ if (cleaned.length <= max) return cleaned;
40
+ return `${cleaned.slice(0, max - 1).trimEnd()}…`;
41
+ }
42
+
43
+ // src/agentMarks/marksStore.ts
44
+ /** The text of a mark is model output: kept as plain text, never markup. */
45
+ const CALLOUT_LABEL_MAX = 200;
46
+ const NOTE_MESSAGE_MAX = 280;
47
+ /** A workflow holds at most this many notes, resolved ones included. */
48
+ const MAX_NOTES_PER_WORKFLOW = 20;
49
+ let sequence = 0;
50
+ const nextId = (prefix) => {
51
+ sequence += 1;
52
+ return `${prefix}${sequence}`;
53
+ };
54
+ const useAgentMarksStore = create()((set, get) => ({
55
+ callouts: [],
56
+ notes: [],
57
+ nextNumber: {},
58
+ openNoteId: null,
59
+ flash: null,
60
+ actions: {
61
+ addCallout: ({ label, target, element, route }) => {
62
+ const callout = {
63
+ id: nextId("c"),
64
+ label: toPlainText(label, 200),
65
+ target,
66
+ route,
67
+ element: element ? new WeakRef(element) : null
68
+ };
69
+ set((state) => ({ callouts: [...state.callouts, callout].slice(-3) }));
70
+ return callout;
71
+ },
72
+ rebindCallout: (id, element) => set((state) => ({ callouts: state.callouts.map((callout) => callout.id === id ? {
73
+ ...callout,
74
+ element: new WeakRef(element)
75
+ } : callout) })),
76
+ removeCallout: (id) => set((state) => ({ callouts: state.callouts.filter((callout) => callout.id !== id) })),
77
+ clearCallouts: () => {
78
+ const count = get().callouts.length;
79
+ if (count > 0) set({ callouts: [] });
80
+ return count;
81
+ },
82
+ dropCalloutsOffRoute: (route) => {
83
+ const { callouts } = get();
84
+ const kept = callouts.filter((callout) => callout.route === route);
85
+ if (kept.length !== callouts.length) set({ callouts: kept });
86
+ return callouts.length - kept.length;
87
+ },
88
+ addNote: (input) => {
89
+ const { notes, nextNumber } = get();
90
+ if (notes.filter((note) => note.workflowKey === input.workflowKey).length >= 20) return null;
91
+ const number = nextNumber[input.workflowKey] ?? 1;
92
+ const note = {
93
+ id: nextId("n"),
94
+ number,
95
+ workflowKey: input.workflowKey,
96
+ nodeId: input.nodeId,
97
+ nodeLabel: toPlainText(input.nodeLabel, 80),
98
+ paramKey: input.paramKey ?? null,
99
+ kind: input.kind,
100
+ message: toPlainText(input.message, 280),
101
+ resolved: false
102
+ };
103
+ set({
104
+ notes: [...notes, note],
105
+ nextNumber: {
106
+ ...nextNumber,
107
+ [input.workflowKey]: number + 1
108
+ }
109
+ });
110
+ return note;
111
+ },
112
+ setResolved: (id, resolved) => set((state) => ({ notes: state.notes.map((note) => note.id === id ? {
113
+ ...note,
114
+ resolved
115
+ } : note) })),
116
+ removeNote: (id) => set((state) => ({
117
+ notes: state.notes.filter((note) => note.id !== id),
118
+ openNoteId: state.openNoteId === id ? null : state.openNoteId
119
+ })),
120
+ clearNotes: (workflowKey) => {
121
+ const { notes, openNoteId } = get();
122
+ const kept = workflowKey === void 0 ? [] : notes.filter((note) => note.workflowKey !== workflowKey);
123
+ const removed = notes.length - kept.length;
124
+ if (removed > 0) set({
125
+ notes: kept,
126
+ openNoteId: kept.some((note) => note.id === openNoteId) ? openNoteId : null
127
+ });
128
+ return removed;
129
+ },
130
+ openNote: (id) => set({ openNoteId: id }),
131
+ flashNode: (nodeId) => {
132
+ sequence += 1;
133
+ set({ flash: {
134
+ nodeId,
135
+ token: sequence
136
+ } });
137
+ }
138
+ }
139
+ }));
140
+ /** Reset everything (tests, and sign-out if a host wants it). */
141
+ function resetAgentMarks() {
142
+ useAgentMarksStore.setState({
143
+ callouts: [],
144
+ notes: [],
145
+ nextNumber: {},
146
+ openNoteId: null,
147
+ flash: null
148
+ });
149
+ }
150
+
151
+ export { useAgentMarksStore as n, toPlainText as r, resetAgentMarks as t };
@@ -1,13 +1,13 @@
1
1
  "use client";
2
2
  import { r as useTr } from "./TranslationBridge-Da-TPgQm.js";
3
3
  import { H as useFlowStore, a as changedSourceFiles, c as diagnosticsByPath, d as isEditableSourcePath, f as projectLanguage, h as sourceLanguageOf, l as interfaceFields, o as childRunIdOf, p as readCodeWorkflowState, r as CODE_WORKFLOW_NODE_TYPE, s as defaultSourcePath, u as interfaceHandlers } from "./node-operation-selection--oy-yEq_.js";
4
- import { $t as useNodeExecution, An as clearCodeWorkflowDefinitionCache, H as nodeSubtitle, Kn as useDurableFunctionNodesEnabled, Mn as useCodeWorkflowInterface, Pn as declaredSignals, U as nodeTitle, Zn as usePhaseCFlags, ar as getNodeDetail, at as latestNodeLog, ct as useGuardedNavigate, on as fieldsFromValue, q as useNodeConfig, rt as FieldTree } from "./FluidGridsProvider-CDZjKmfD.js";
5
- import { G as NodeSettingsPanel, Q as NodeParamsForm, U as NodeExecutionActions, b as JsonView, et as NDV_Z_INDEX, ft as TabButton, it as CodeEditorField, lt as SCHEDULE_NODE_TYPE, st as ReadOnlyFieldset, ut as SchedulePanel, x as TableView } from "./flow-builder-BvCQAGDR.js";
4
+ import { G as nodeSubtitle, Gn as getNodeDetail, K as nodeTitle, Ln as usePhaseCFlags, Mn as useDurableFunctionNodesEnabled, X as useNodeConfig, bn as declaredSignals, ct as latestNodeLog, dt as useGuardedNavigate, gn as clearCodeWorkflowDefinitionCache, ln as fieldsFromValue, nn as useNodeExecution, ot as FieldTree, vn as useCodeWorkflowInterface } from "./FluidGridsProvider-B9RR_CI_.js";
5
+ import { Q as NDV_Z_INDEX, U as NodeSettingsPanel, V as NodeExecutionActions, X as NodeParamsForm, _ as JsonView, at as ReadOnlyFieldset, ct as SchedulePanel, nt as CodeEditorField, st as SCHEDULE_NODE_TYPE, ut as TabButton, v as TableView } from "./flow-builder-C_3sY3pZ.js";
6
6
  import { Bi as describeOperationError, Er as WorkflowCodeSourceDocument, Mr as WorkflowEditLeaseStatusDocument, Nt as NodeStatesDocument, Oi as getFluidGridsClient, Ui as throwIfResultError, gt as FileDownloadUrlDocument, ki as getFluidGridsClientSafe, m as BuildWorkflowCodeDocument } from "./node-endpoint-configs-DHFGA5MQ.js";
7
7
  import { $t as useWorkflowPinnedDataQuery, Lt as useUnpinNodeDataMutation, pt as usePinNodeDataMutation } from "./useAgentDefinitions-NFtLytDR.js";
8
8
  import { hI as FLUIDGRIDS_PERMISSIONS, xI as useFluidGridsPermission } from "./graphql-types-XcDLtFwU.js";
9
9
  import { M as fetchCodeBundleSdk, s as isAgentNodeType } from "./agent-form-BvMWhQ42.js";
10
- import { n as SignalRunDialog, s as RunHistoryView, t as useRunHistory } from "./useRunHistory-CEL-CIz-.js";
10
+ import { n as SignalRunDialog, s as RunHistoryView, t as useRunHistory } from "./useRunHistory-DHehG09Z.js";
11
11
  import { n as agentTracePath } from "./ai-usage-D5p7ZeRR.js";
12
12
  import * as React$1 from "react";
13
13
  import { useCallback, useEffect, useMemo, useRef, useState } from "react";
@@ -1,3 +1,3 @@
1
1
 
2
- import { Ao as DashboardSummary, Fo as LogStreamDestinationInput, Io as LogStreamEventType, Lo as LogStreamProvider, Mo as DataSinkSummary, No as FailedRun, Po as LogStreamDestination, Ro as NodeUsageStat, fja as ErrorAnalyticsPage, jo as DataSinkData, mja as DataSinkDashboardPage, pja as InsightsPage } from "./index-CLqh2u28.js";
2
+ import { Co as FailedRun, Do as LogStreamProvider, Eo as LogStreamEventType, Oo as NodeUsageStat, So as DataSinkSummary, To as LogStreamDestinationInput, bo as DashboardSummary, ija as DataSinkDashboardPage, nja as ErrorAnalyticsPage, rja as InsightsPage, wo as LogStreamDestination, xo as DataSinkData } from "./index-DRf25-D3.js";
3
3
  export { type DashboardSummary, DataSinkDashboardPage, type DataSinkData, type DataSinkSummary, ErrorAnalyticsPage, type FailedRun, InsightsPage, type LogStreamDestination, type LogStreamDestinationInput, type LogStreamEventType, type LogStreamProvider, type NodeUsageStat };
@@ -1,4 +1,4 @@
1
1
  "use client";
2
- import { n as InsightsPage, r as DataSinkDashboardPage, t as ErrorAnalyticsPage } from "./InsightsPage-CGRpZtGu.js";
2
+ import { n as InsightsPage, r as DataSinkDashboardPage, t as ErrorAnalyticsPage } from "./InsightsPage-CBoN_Mj9.js";
3
3
 
4
4
  export { DataSinkDashboardPage, ErrorAnalyticsPage, InsightsPage };
@@ -1,7 +1,7 @@
1
1
  "use client";
2
2
  import { A as nodeAccent, H as useFlowStore, j as NodeTypeIcon } from "./node-operation-selection--oy-yEq_.js";
3
- import { $t as useNodeExecution, H as nodeSubtitle, U as nodeTitle, ar as getNodeDetail, q as useNodeConfig } from "./FluidGridsProvider-CDZjKmfD.js";
4
- import { U as NodeExecutionActions, W as NodeEditorTabBody, ct as useNodeEditorTab, dt as NodeEditorTabs, pt as NodeInputFields } from "./flow-builder-BvCQAGDR.js";
3
+ import { G as nodeSubtitle, Gn as getNodeDetail, K as nodeTitle, X as useNodeConfig, nn as useNodeExecution } from "./FluidGridsProvider-B9RR_CI_.js";
4
+ import { H as NodeEditorTabBody, V as NodeExecutionActions, dt as NodeInputFields, lt as NodeEditorTabs, ot as useNodeEditorTab } from "./flow-builder-C_3sY3pZ.js";
5
5
  import { r as useTr } from "./TranslationBridge-Da-TPgQm.js";
6
6
  import { useEffect, useLayoutEffect, useMemo, useRef, useState } from "react";
7
7
  import { useReactFlow, useStore } from "@xyflow/react";
package/dist/settings.js CHANGED
@@ -1,4 +1,4 @@
1
1
  "use client";
2
- import { n as SettingsPage, t as ManagedAiPolicyAuthorityProvider } from "./ManagedAiPolicyAuthority-DbJBledZ.js";
2
+ import { n as SettingsPage, t as ManagedAiPolicyAuthorityProvider } from "./ManagedAiPolicyAuthority-CKihmbJE.js";
3
3
 
4
4
  export { ManagedAiPolicyAuthorityProvider, SettingsPage };
package/dist/templates.js CHANGED
@@ -1,4 +1,4 @@
1
1
  "use client";
2
- import { n as TemplatePreview, t as TemplatesPage } from "./TemplatesPage-QXtq6mI3.js";
2
+ import { n as TemplatePreview, t as TemplatesPage } from "./TemplatesPage-CHVpWBuw.js";
3
3
 
4
4
  export { TemplatePreview, TemplatesPage };