@burdenoff/fluidgrids-fe-sdk 2026.1106.1 → 2026.1107.1

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 (53) hide show
  1. package/dist/{ExecutionDetailPage-OOHJQR2L.js → ExecutionDetailPage-TQST7JKC.js} +7 -7
  2. package/dist/{ExecutionsListPage-6HS5VQOV.js → ExecutionsListPage-QQKEGXSC.js} +6 -6
  3. package/dist/{WorkflowBuilder-PICIS7FI.js → WorkflowBuilder-R7VIOVRO.js} +11 -11
  4. package/dist/{WorkflowsList-SD5XQC4Q.js → WorkflowsList-2WX7N526.js} +7 -7
  5. package/dist/{agentTools-UH4LU6LA.js → agentTools-MEEGOAE2.js} +4 -4
  6. package/dist/assistant.d.ts +1 -61
  7. package/dist/{chunk-OTOQFZFO.js → chunk-4F54UT62.js} +10 -10
  8. package/dist/{chunk-XNARCHMT.js → chunk-5KK3ALQ4.js} +1 -1
  9. package/dist/{chunk-Y4UCHFGK.js → chunk-752BT4WM.js} +1 -1
  10. package/dist/{chunk-KJT5TAOE.js → chunk-BLLBUHVF.js} +1 -1
  11. package/dist/{chunk-GBQC5WDH.js → chunk-E3PNEIBJ.js} +4 -4
  12. package/dist/{chunk-UYTPURFW.js → chunk-GA3V3X7Q.js} +2 -2
  13. package/dist/{chunk-HSTP2RX3.js → chunk-HUCRE45R.js} +1 -1
  14. package/dist/{chunk-LLCVVRCE.js → chunk-HY3XCZLB.js} +6 -6
  15. package/dist/{chunk-UWCD7JUU.js → chunk-JOOGRWYY.js} +4 -4
  16. package/dist/{chunk-43GSC5Y6.js → chunk-JRSCUUBT.js} +1 -1
  17. package/dist/{chunk-6VIG44VF.js → chunk-KE677WYY.js} +1 -1
  18. package/dist/{chunk-5GG2FEKW.js → chunk-KXCJPWYE.js} +2 -2
  19. package/dist/{chunk-OLRIWGYM.js → chunk-MESGVHUU.js} +4 -4
  20. package/dist/{chunk-WBRW67HX.js → chunk-MYAFMXFI.js} +2 -2
  21. package/dist/{chunk-XWINH6CR.js → chunk-NMYENCP2.js} +1 -1
  22. package/dist/{chunk-GBJWPSLJ.js → chunk-NSDBXKIC.js} +2 -2
  23. package/dist/{chunk-5Z4F24QT.js → chunk-OHKSDHNC.js} +1 -1
  24. package/dist/{chunk-4XAXF5VP.js → chunk-PYSEOWLW.js} +4 -4
  25. package/dist/{chunk-M72SMQOS.js → chunk-RI4NFNDX.js} +6 -6
  26. package/dist/{chunk-JRLBPR5U.js → chunk-TDFC5U66.js} +1 -1
  27. package/dist/{chunk-TGWDFLEX.js → chunk-UZJKX5FN.js} +5 -4
  28. package/dist/{chunk-EIMTOK6E.js → chunk-V2K4HJY4.js} +1 -1
  29. package/dist/{chunk-UIS7KGHW.js → chunk-VKC3ICRA.js} +4 -4
  30. package/dist/{chunk-GPABUQTD.js → chunk-WBVBRXDI.js} +5 -5
  31. package/dist/{chunk-ASYYYJG2.js → chunk-ZTZNQ5GF.js} +1 -1
  32. package/dist/{chunk-WC526MLS.js → chunk-ZWDKN6PU.js} +1 -1
  33. package/dist/executions.js +8 -8
  34. package/dist/history.js +6 -6
  35. package/dist/index.d.ts +6 -25757
  36. package/dist/index.js +35 -35
  37. package/dist/{node-detail-view-P5NV5CMO.js → node-detail-view-AQCGO4XQ.js} +7 -7
  38. package/dist/observability.js +4 -4
  39. package/dist/pageControlsBridge-kfcowd-2.d.ts +37 -0
  40. package/dist/{quick-config-panel-ZNSBVF4G.js → quick-config-panel-G3T4JCF6.js} +5 -5
  41. package/dist/settings.d.ts +0 -8
  42. package/dist/settings.js +5 -5
  43. package/dist/templates.d.ts +0 -10
  44. package/dist/templates.js +10 -10
  45. package/dist/workflow-builder-C261exmL.d.ts +688 -0
  46. package/dist/workflow-builder.d.ts +1 -1
  47. package/dist/workflow-builder.js +12 -12
  48. package/dist/workflow-preview.d.ts +0 -95
  49. package/dist/workflow-preview.js +2 -2
  50. package/dist/workflows-list.js +7 -7
  51. package/package.json +1 -1
  52. package/dist/pageControlsBridge-D6y36qi5.d.ts +0 -87
  53. package/dist/workflow-builder-C-ekFbwR.d.ts +0 -1210
@@ -1,1210 +0,0 @@
1
- import * as react_jsx_runtime from 'react/jsx-runtime';
2
- import { ApolloClient } from '@apollo/client/core';
3
- import { ReactNode } from 'react';
4
- import { Edge, Node, NodeChange, EdgeChange, Connection } from '@xyflow/react';
5
- import * as zustand from 'zustand';
6
-
7
- /** Version of the host event contract. See the module note for the rules. */
8
- declare const FLUIDGRIDS_EVENTS_VERSION = "1.0.0";
9
- /** Where an `error` event came from. */
10
- type FluidGridsErrorSource = "workflow:save" | "workflow:activate" | "run:start";
11
- /**
12
- * Every host event and its payload.
13
- *
14
- * - `workflow:saved` — a save reached `wspace-workflow-svc` (create, update or
15
- * new version). `id` is the saved definition's database id.
16
- * - `workflow:activated` — a version was activated (published).
17
- * - `run:started` — the backend accepted a run: builder test runs, run from a
18
- * node, a followed webhook test event, triggers, replays and retries.
19
- * `mode` is the run mode when the SDK knows it (`TEST`, `PRODUCTION`, …).
20
- * - `run:completed` — a run the builder is following reached a terminal
21
- * status (`COMPLETED`, `FAILED`, `CANCELLED`, `TERMINATED`). Emitted once
22
- * per run id.
23
- * - `node:selected` — the selection on the builder canvas changed to exactly
24
- * one node. `nodeId: null` means the selection was cleared. Selecting
25
- * several nodes at once emits nothing. Emitted by the full builder and by
26
- * the standalone `WorkflowBuilder` / `WorkflowBuilderCore` canvas.
27
- * - `error` — a save, an activation or a run start failed. `message` is the
28
- * user-presentable message; `code` is the gateway error code when present.
29
- * - `auth:failed` — the SDK could not get a fresh token after an expired-token
30
- * response (the `auth.onTokenExpired` callback rejected or returned no
31
- * token). Emitted once per failed refresh attempt: requests that were
32
- * already in flight when it failed surface their original error without a
33
- * second callback call or event. The failed request surfaces its original
34
- * error.
35
- *
36
- * Standalone builder: `WorkflowBuilder` / `WorkflowBuilderCore` (the
37
- * lightweight local canvas) only hand the workflow to `onSave` and a
38
- * client-generated id to `onExecute`; they never call the backend. A save
39
- * there is not persisted by the SDK and no run exists yet, so they emit only
40
- * `node:selected` — never `workflow:saved`, `run:started` or `error`. The full
41
- * builder (`FluidGridsRoot`, `WorkflowBuilderPage`) emits every event above.
42
- */
43
- interface FluidGridsEventMap {
44
- "workflow:saved": {
45
- workflowKey: string;
46
- version?: string;
47
- id?: string;
48
- };
49
- "workflow:activated": {
50
- workflowKey: string;
51
- version?: string;
52
- };
53
- "run:started": {
54
- runId: string;
55
- workflowKey?: string;
56
- mode?: string;
57
- };
58
- "run:completed": {
59
- runId: string;
60
- status: string;
61
- workflowKey?: string;
62
- };
63
- "node:selected": {
64
- nodeId: string | null;
65
- nodeType?: string;
66
- };
67
- error: {
68
- source: FluidGridsErrorSource;
69
- message: string;
70
- code?: string;
71
- };
72
- "auth:failed": {
73
- message: string;
74
- };
75
- }
76
- /** Name of a host event. */
77
- type FluidGridsEventName = keyof FluidGridsEventMap;
78
- /** Payload of the host event `K`. */
79
- type FluidGridsEventPayload<K extends FluidGridsEventName> = FluidGridsEventMap[K];
80
- /** Every host event name, in documentation order. */
81
- declare const FLUIDGRIDS_EVENT_NAMES: readonly FluidGridsEventName[];
82
- /** `[name, payload]` pairs, one per event: lets `name` narrow `payload`. */
83
- type FluidGridsEventArgs = {
84
- [K in FluidGridsEventName]: [name: K, payload: FluidGridsEventMap[K]];
85
- }[FluidGridsEventName];
86
- /**
87
- * Host event callback. Checking `name` narrows `payload`:
88
- *
89
- * ```ts
90
- * const onEvent: FluidGridsEventHandler = (name, payload) => {
91
- * if (name === "run:completed") console.log(payload.runId, payload.status);
92
- * };
93
- * ```
94
- */
95
- type FluidGridsEventHandler = (...args: FluidGridsEventArgs) => void;
96
-
97
- /**
98
- * Embed theming (BOFF-9961).
99
- *
100
- * A host themes the embedded SDK with a {@link FluidGridsTheme}: either the
101
- * `"light"` / `"dark"` shortcut, or an object that picks a mode and overrides
102
- * individual design tokens (colours, radii, fonts). Each token key maps to one
103
- * or more fe-libs semantic CSS variables ({@link FLUIDGRIDS_THEME_TOKEN_MAP}),
104
- * so the whole builder, its dialogs and its popovers pick the values up.
105
- *
106
- * The theme is DOCUMENT-WIDE. The SDK renders into the host's document and
107
- * Radix portals render under `body`, and the fe-libs alias tokens
108
- * (`--color-primary`, `--color-background`, …) are declared on `:root` as
109
- * references to the semantic tokens, so an override on a wrapper element would
110
- * not reach them. The variables are therefore written as inline custom
111
- * properties on `document.documentElement`, and the previous inline values
112
- * are restored when the theme is removed. A host that wants its own chrome to
113
- * keep a different look should scope its own styles, not the SDK's.
114
- *
115
- * @module theme/fluidgridsTheme
116
- */
117
- /** Colour mode of the SDK UI. */
118
- type FluidGridsThemeMode = "light" | "dark";
119
- /** Colour overrides. Each value is a CSS colour such as `#2563eb` or `oklch(62% 0.2 250)`. */
120
- interface FluidGridsThemeColors {
121
- /** Page / canvas background. */
122
- bgCanvas?: string;
123
- /** Cards, panels and the canvas frame. */
124
- bgSurface?: string;
125
- /** Dialogs, popovers and menus. */
126
- bgElevated?: string;
127
- /** Inset areas: inputs, code blocks, wells. */
128
- bgSunken?: string;
129
- /** Main text. */
130
- textPrimary?: string;
131
- /** Secondary text. */
132
- textSecondary?: string;
133
- /** Hints, captions and placeholders. */
134
- textMuted?: string;
135
- /** Default borders. */
136
- borderDefault?: string;
137
- /** Hairlines and dividers. */
138
- borderSubtle?: string;
139
- /** Emphasised borders. */
140
- borderStrong?: string;
141
- /** Brand / primary action colour (buttons, focus, selection). */
142
- primary?: string;
143
- /** Primary action hover. Derived from `primary` when omitted. */
144
- primaryHover?: string;
145
- /** Primary action pressed. Derived from `primary` when omitted. */
146
- primaryActive?: string;
147
- /** Text on the primary colour. Picked for contrast when omitted. */
148
- primaryText?: string;
149
- /** Success status colour. */
150
- success?: string;
151
- /** Warning status colour. */
152
- warning?: string;
153
- /** Error status colour. */
154
- error?: string;
155
- /** Info status colour. */
156
- info?: string;
157
- }
158
- /** Corner-radius overrides. Each value is a CSS length (`8px`, `0.5rem`). */
159
- interface FluidGridsThemeRadius {
160
- /** Base radius most components scale from. */
161
- base?: string;
162
- /** Cards and panels. */
163
- card?: string;
164
- /** Buttons. */
165
- button?: string;
166
- /** Inputs and selects. */
167
- input?: string;
168
- }
169
- /** Font overrides. Each value is a CSS `font-family` list. */
170
- interface FluidGridsThemeFont {
171
- /** Body text. */
172
- body?: string;
173
- /** Headings. */
174
- heading?: string;
175
- /** Code, ids and JSON. */
176
- mono?: string;
177
- }
178
- /** Full theme object. Every field is optional. */
179
- interface FluidGridsThemeTokens {
180
- /** Force light or dark. Omit to keep the host's / visitor's mode. */
181
- mode?: FluidGridsThemeMode;
182
- colors?: FluidGridsThemeColors;
183
- radius?: FluidGridsThemeRadius;
184
- font?: FluidGridsThemeFont;
185
- }
186
- /**
187
- * Theme for the embedded SDK: `"light"` / `"dark"` (shortcut for
188
- * `{ mode }`), or a token object.
189
- */
190
- type FluidGridsTheme = FluidGridsThemeMode | FluidGridsThemeTokens;
191
- /** Kind of value a token accepts; decides how the value is validated. */
192
- type FluidGridsThemeValueKind = "color" | "length" | "font";
193
- /** One row of {@link FLUIDGRIDS_THEME_TOKEN_MAP}. */
194
- interface FluidGridsThemeTokenMapping {
195
- kind: FluidGridsThemeValueKind;
196
- /** CSS custom properties the token sets, in order. */
197
- cssVariables: readonly string[];
198
- }
199
- /** Dotted key of every theme token: `colors.primary`, `radius.card`, … */
200
- type FluidGridsThemeTokenKey = `colors.${keyof FluidGridsThemeColors & string}` | `radius.${keyof FluidGridsThemeRadius & string}` | `font.${keyof FluidGridsThemeFont & string}`;
201
- /**
202
- * Theme token → the fe-libs semantic CSS variables it sets. This table is the
203
- * public contract: a token keeps its variables across minor releases.
204
- */
205
- declare const FLUIDGRIDS_THEME_TOKEN_MAP: Readonly<Record<FluidGridsThemeTokenKey, FluidGridsThemeTokenMapping>>;
206
- /**
207
- * Turn a theme into the CSS custom properties it sets. Pure: no DOM access.
208
- *
209
- * Values that are not plain CSS values of the token's kind (anything with
210
- * `;`, `{`, `}`, `url(`, `expression(`, quotes other than single-quoted font
211
- * names, …) are dropped with a console warning. Unknown keys are dropped the
212
- * same way. When `colors.primary` is set, the hover / pressed shades and the
213
- * text colour are derived from it unless they are set explicitly; the text
214
- * colour is picked for contrast when `primary` is a hex colour.
215
- */
216
- declare function themeToCssVariables(theme: FluidGridsTheme | null | undefined): Record<string, string>;
217
- /**
218
- * Apply a theme to the document and return a function that removes it again.
219
- *
220
- * Sets each variable from {@link themeToCssVariables} as an inline custom
221
- * property on `document.documentElement`, and for a mode sets `data-theme`
222
- * and the `.dark` class. While applied, the values are re-forced if something
223
- * else (a host ThemeProvider) rewrites them. Disposing restores the inline
224
- * values and mode the document had (including any change the host made in
225
- * between). When several themes are applied, the most recent one wins.
226
- * Calling the returned function more than once is safe. Without a DOM
227
- * (server rendering) it does nothing.
228
- */
229
- declare function applyFluidGridsTheme(theme: FluidGridsTheme | null | undefined): () => void;
230
-
231
- /**
232
- * Configuration module for FluidGrids SDK
233
- */
234
- /** Result passed to the onWorkflowSaved callback after a successful save */
235
- interface WorkflowSavedResult {
236
- /** Database row ID of the saved workflow definition */
237
- dbId: string;
238
- /** Human-readable workflow key (e.g., "github_user_profile") */
239
- workflowKey: string;
240
- /** Semantic version string (e.g., "v1", "v2") */
241
- version: string;
242
- /** Display name of the workflow */
243
- name: string;
244
- /** Optional description */
245
- description?: string;
246
- /** What kind of save operation occurred */
247
- operation: "created" | "updated" | "versioned";
248
- }
249
- /**
250
- * Tokens returned by {@link FluidGridsAuthConfig.onTokenExpired}. Return only
251
- * the ones that changed; a missing field keeps its current value.
252
- */
253
- interface FluidGridsRefreshedTokens {
254
- /** New user / app token, sent as `authorization: Bearer …`. */
255
- authToken?: string;
256
- /** New workspace token, sent as `x-workspace-authorization: Bearer …`. */
257
- workspaceToken?: string;
258
- }
259
- /** Authentication hooks for embedders. */
260
- interface FluidGridsAuthConfig {
261
- /**
262
- * Called when a request fails because the session expired (HTTP 401, a
263
- * GraphQL `UNAUTHENTICATED` error, or an expired / revoked credential
264
- * reported by the gateway). Resolve with a fresh token — a string is the
265
- * new `authToken`, an object can also replace the `workspaceToken`. The SDK
266
- * stores it in the config, retries the failed request once, and shares one
267
- * call between requests that fail at the same time.
268
- *
269
- * Reject, or resolve with an empty token, when no fresh token is available:
270
- * the SDK then emits `auth:failed` on `onEvent` and the request fails with
271
- * its original error. The SDK never retries a request twice.
272
- */
273
- onTokenExpired?: () => Promise<string | FluidGridsRefreshedTokens>;
274
- }
275
- interface FluidGridsConfig {
276
- /** GraphQL endpoint URL (workspace gateway) */
277
- apiGatewayUrl: string;
278
- /** GraphQL endpoint URL (global gateway) */
279
- globalApiUrl?: string;
280
- /** Auth token for API calls */
281
- authToken?: string;
282
- /** Current workspace ID */
283
- workspaceId: string;
284
- /**
285
- * Workspace access token of the current workspace. Store queries send it as
286
- * `x-workspace-authorization` so the global gateway can derive a verified
287
- * workspace for them: the public gateway never trusts a client-sent
288
- * `x-workspace-id`, and the store lists the durable-function nodes only to a
289
- * workspace with durable functions on (BOFF-9905).
290
- */
291
- workspaceToken?: string;
292
- /** Current tenant ID */
293
- tenantId?: string;
294
- /** Organization ID */
295
- organizationId?: string;
296
- /**
297
- * @deprecated Never read. Share/Embed links used to be built from this
298
- * value, which no host ever set, so they shipped as `undefined/...`
299
- * (BOFF-7753). Kept only so existing host configs still type-check.
300
- */
301
- fluidgridFrontendUrl?: string;
302
- /** Product ID for workflow isolation (e.g., 'bigconsole', 'botmanor', 'fluidgrids') */
303
- productId?: string;
304
- /** Product name for display purposes */
305
- productName?: string;
306
- /** Optional allowlist for host origins embedding the SDK */
307
- trustedOrigins?: string[];
308
- /**
309
- * Callback invoked after a workflow is successfully saved to wspace-workflow-svc.
310
- * Host apps (BigConsole, BotManor) can use this to sync metadata to their own backends.
311
- * Errors thrown by this callback are caught and logged — they never block the save.
312
- */
313
- onWorkflowSaved?: (result: WorkflowSavedResult) => void | Promise<void>;
314
- /**
315
- * Theme for the embedded UI: `"light"`, `"dark"`, or a token object.
316
- * Setting it (here, or with the `theme` prop of `FluidGridsProvider`)
317
- * applies it document-wide right away — see `applyFluidGridsTheme`;
318
- * setting `undefined` or resetting the config removes it.
319
- */
320
- theme?: FluidGridsTheme;
321
- /** Authentication hooks: token refresh on expiry. */
322
- auth?: FluidGridsAuthConfig;
323
- /**
324
- * Host event callback: workflow saved / activated, run started / completed,
325
- * node selected, errors and auth failures. See `FluidGridsEventMap`.
326
- * Exceptions thrown by the handler are caught and logged.
327
- */
328
- onEvent?: FluidGridsEventHandler;
329
- }
330
- /**
331
- * Get current configuration via proxy for live access
332
- */
333
- declare const config: FluidGridsConfig;
334
- /**
335
- * Get the full configuration object
336
- */
337
- declare function getFluidGridsConfig(): FluidGridsConfig;
338
- /**
339
- * Set runtime configuration
340
- */
341
- declare function setFluidGridsConfig(newConfig: Partial<FluidGridsConfig>): void;
342
- /**
343
- * Reset configuration to defaults
344
- */
345
- declare function resetFluidGridsConfig(): void;
346
- /**
347
- * Get the GraphQL endpoint URL
348
- */
349
- declare function getGraphQLEndpoint(baseUrl?: string): string;
350
- /** Clear user execution state only when a host session ends or changes identity. */
351
- declare function resetFluidGridsExecutionState(): void;
352
-
353
- interface FluidGridsProviderProps {
354
- /** API Gateway URL (workspace gateway) */
355
- apiGatewayUrl?: string;
356
- /** Global API Gateway URL (for store operations) */
357
- globalApiUrl?: string;
358
- /** Auth token */
359
- authToken?: string;
360
- /** Workspace token for x-workspace-authorization header */
361
- workspaceToken?: string;
362
- /** Workspace ID */
363
- workspaceId: string;
364
- /** Owning product namespace. */
365
- productId?: string;
366
- /** Authenticated actor identity; supply this when accounts can switch in-place. */
367
- userId?: string;
368
- /** Optional host allowlist for embedded deployments */
369
- trustedOrigins?: string[];
370
- /** Tenant ID */
371
- tenantId?: string;
372
- /** Organization ID */
373
- organizationId?: string;
374
- /** Optional: provide your own workspace Apollo client */
375
- workspaceClient?: ApolloClient;
376
- /** Optional: provide your own global Apollo client */
377
- globalClient?: ApolloClient;
378
- /** @deprecated Use workspaceClient instead */
379
- apolloClient?: ApolloClient;
380
- /**
381
- * Optional host translator: `(key, englishFallback) => string`.
382
- *
383
- * When omitted (standalone embedders), every string renders its English
384
- * fallback — the SDK never requires an i18n provider to be mounted.
385
- */
386
- t?: (key: string, fallback: string) => string;
387
- /**
388
- * Theme: `"light"`, `"dark"`, or a token object (colours, radii, fonts).
389
- * Applied document-wide while the provider is mounted and restored on
390
- * unmount. See `FluidGridsTheme` and `FLUIDGRIDS_THEME_TOKEN_MAP`.
391
- */
392
- theme?: FluidGridsTheme;
393
- /**
394
- * Authentication hooks. `auth.onTokenExpired` is called when a request
395
- * fails with an expired session; resolve with a fresh token and the SDK
396
- * retries the request once.
397
- */
398
- auth?: FluidGridsAuthConfig;
399
- /** Host event callback. See `FluidGridsEventMap`. */
400
- onEvent?: FluidGridsEventHandler;
401
- /** Children */
402
- children: ReactNode;
403
- }
404
- interface FluidGridsContextValue {
405
- apiGatewayUrl?: string;
406
- globalApiUrl?: string;
407
- authToken?: string;
408
- workspaceId: string;
409
- productId?: string;
410
- userId?: string;
411
- trustedOrigins?: string[];
412
- tenantId?: string;
413
- organizationId?: string;
414
- workspaceClient?: ApolloClient;
415
- globalClient?: ApolloClient;
416
- /** Host translator, consumed by `useTr()`. */
417
- t?: (key: string, fallback: string) => string;
418
- }
419
- declare function FluidGridsProvider({ apiGatewayUrl, globalApiUrl, authToken, workspaceToken, workspaceId, productId, userId, trustedOrigins, tenantId, organizationId, t, theme, auth, onEvent, workspaceClient: externalWorkspaceClient, globalClient: externalGlobalClient, apolloClient: legacyClient, children, }: FluidGridsProviderProps): react_jsx_runtime.JSX.Element;
420
- declare function useFluidGridsContext(): FluidGridsContextValue;
421
-
422
- type ExtendedNodeType = "trigger:api" | "end" | "internal:if" | "internal:switch" | "internal:loop" | "internal:merge" | "internal:set" | "internal:filter" | "internal:aggregate" | "internal:wait" | "internal:noop" | "internal:subworkflow" | string;
423
- interface FlowNodeData {
424
- label: string;
425
- deletable?: boolean;
426
- nodeType?: string;
427
- config?: Record<string, unknown>;
428
- /** When true, the node is dimmed on the canvas and the worker executor
429
- * skips it entirely at runtime — its input passes through unchanged as
430
- * its output, and its edges stay intact (BOFF-7510). */
431
- disabled?: boolean;
432
- /**
433
- * Node-level retry/timeout/error-branch settings (BOFF-7512). Read by the
434
- * deployed worker executor as the second precedence slot
435
- * (`node.errorConfig ?? node.data.errorConfig ?? node.data.args.state.errorConfig`)
436
- * — the frontend deliberately writes here rather than fighting `Node<T>`
437
- * typing for the node's own top-level field; `use-save-workflow.ts`
438
- * flattens `data.*` onto the saved node's root too, so this still reaches
439
- * the primary slot once persisted.
440
- */
441
- errorConfig?: INodeErrorConfig;
442
- /** Free-text note a builder leaves on a node (BOFF-7512). */
443
- notes?: string;
444
- /**
445
- * `alwaysOutputData` / `executeOnce` (BOFF-7512) — NOT part of
446
- * `INodeErrorConfig`; the deployed executor does not enforce these yet,
447
- * only `errorConfig` is engine-enforced right now. Wired for persistence
448
- * ahead of that.
449
- */
450
- executionSettings?: INodeExecutionSettings;
451
- [key: string]: unknown;
452
- }
453
- interface FlowNode extends Node {
454
- type: ExtendedNodeType;
455
- data: FlowNodeData;
456
- deletable?: boolean;
457
- }
458
- interface FlowEdge extends Edge {
459
- type?: "deletable" | "smoothstep" | "default" | string;
460
- condition?: EdgeCondition;
461
- mapping?: EdgeMapping;
462
- }
463
- interface EdgeCondition {
464
- rules: ConditionRule[];
465
- logic: "and" | "or";
466
- }
467
- interface ConditionRule {
468
- field: string;
469
- operator: string;
470
- value: string;
471
- }
472
- type MappingValue = string | number | boolean | null | MappingValue[] | {
473
- [key: string]: MappingValue;
474
- };
475
- interface EdgeMapping {
476
- definition: Record<string, MappingValue>;
477
- comment?: string;
478
- }
479
- interface NodeAdapterManifest {
480
- name: string;
481
- required?: boolean;
482
- type?: string;
483
- maxConnections?: number | null;
484
- filter?: {
485
- kind?: string[];
486
- excludeNodes?: string[];
487
- };
488
- }
489
- interface NodeManifest {
490
- nodeType: string;
491
- name: string;
492
- description?: string;
493
- kind?: string[];
494
- version: string;
495
- operations?: {
496
- operations?: unknown[];
497
- };
498
- icon?: string;
499
- category?: string;
500
- /** Adapter ports for this node (e.g., Chat Model, Memory, Tool slots on AI Agent) */
501
- nodeAdapters?: NodeAdapterManifest[];
502
- /** When true, this node can connect to adapter ports on other nodes */
503
- supportsAdapterMode?: boolean;
504
- /** The adapter type this node satisfies when used as a sub-node */
505
- adapterOutputType?: string;
506
- /**
507
- * Optional external documentation URL for this node (BOFF-7512). Not all
508
- * nodes declare one — render nothing when absent, never require it.
509
- */
510
- docsUrl?: string;
511
- }
512
- interface NodeEndpointConfig {
513
- id: string;
514
- nodeType: string;
515
- name: string;
516
- description?: string;
517
- icon?: string;
518
- category?: string;
519
- manifest?: NodeManifest;
520
- }
521
-
522
- /**
523
- * Node-level error/retry/timeout handling configuration.
524
- *
525
- * Mirrors `INodeErrorConfig` in `fluidgrids-workers/src/types/workflow.types.ts`
526
- * and `wspace-workflow-svc/src/modules/main/types/workflow.types.ts` — the
527
- * DEPLOYED worker executor reads this shape directly off a node's top-level
528
- * `errorConfig` field (BOFF-7512).
529
- */
530
- interface INodeRetryConfig {
531
- /** Maximum number of retry attempts (default: 0 = no retry). */
532
- maxRetries: number;
533
- /** Initial delay between retries in ms (default: 1000). */
534
- retryDelay: number;
535
- /** Backoff multiplier for exponential backoff (default: 2). */
536
- backoffMultiplier?: number;
537
- /** Maximum delay between retries in ms (default: 30000). */
538
- maxDelay?: number;
539
- /** Error types that should trigger a retry (empty/unset = all errors, incl. TIMEOUT). */
540
- retryOnErrorTypes?: string[];
541
- }
542
- interface INodeTimeoutConfig {
543
- /** Execution timeout in ms. */
544
- duration: number;
545
- /** What to do when the node times out (default: falls through to onError/retryConfig). */
546
- onTimeout?: "stop" | "continue" | "branch";
547
- /** Target node ID when onTimeout is 'branch'. */
548
- timeoutBranchId?: string;
549
- }
550
- interface INodeErrorConfig {
551
- /** 'stop' (default) | 'continue' | 'branch'. */
552
- onError?: "stop" | "continue" | "branch";
553
- /** Target node ID when onError is 'branch'. */
554
- errorBranchId?: string;
555
- retryConfig?: INodeRetryConfig;
556
- timeout?: INodeTimeoutConfig;
557
- }
558
- /**
559
- * `alwaysOutputData` / `executeOnce` node settings (BOFF-7512). A NEW
560
- * sibling object next to `errorConfig` on `FlowNodeData` — NOT part of
561
- * `INodeErrorConfig`. The deployed worker executor does not enforce either
562
- * flag yet; only `errorConfig` is engine-enforced right now.
563
- */
564
- interface INodeExecutionSettings {
565
- alwaysOutputData?: boolean;
566
- executeOnce?: boolean;
567
- /**
568
- * Where the node runs. Absent = FluidGrids Cloud. A runner = the customer's
569
- * self-hosted runner (fluidgrids-workers reads exactly this shape).
570
- */
571
- runOn?: {
572
- kind: "runner";
573
- runnerId: string;
574
- };
575
- }
576
- /** Which finished runs of a workflow keep their data (BOFF-7514). */
577
- interface WorkflowDataSaving {
578
- saveSuccessExecutions?: boolean;
579
- saveFailedExecutions?: boolean;
580
- saveManualExecutions?: boolean;
581
- }
582
- /**
583
- * What a workflow's runs may store (BOFF-9752). Enforced by wspace-workflow-svc
584
- * (`run-data-privacy.ts`); there is no workspace-level default.
585
- */
586
- interface WorkflowDataPrivacy {
587
- /**
588
- * Keep only the run summary (status, timings, node statuses, error types): trigger data and
589
- * node inputs/outputs are dropped when the run finishes, log lines keep their message only.
590
- */
591
- doNotStoreRunData?: boolean;
592
- /**
593
- * Field names (matched at any depth) or dotted paths (matched from the top, `*` for any key,
594
- * a number for an array item) replaced with [REDACTED] in run logs and stored run data.
595
- */
596
- redactFields?: string[];
597
- }
598
- /** How long a workflow's finished runs are kept (BOFF-7514). */
599
- interface WorkflowRetention {
600
- /** Delete finished runs older than this many days. */
601
- maxAgeDays?: number;
602
- /** Keep at most this many finished runs. */
603
- maxRuns?: number;
604
- }
605
- /**
606
- * Workflow-level execution configuration (BOFF-7512): a workflow's `definitionJson.config`.
607
- *
608
- * Mirrors `IWorkflowConfig` in `wspace-workflow-svc/src/modules/main/types/workflow.types.ts`
609
- * (`timeout` in SECONDS). The per-workflow Settings page edits this same type.
610
- */
611
- interface IWorkflowConfig {
612
- /** Max parallel executions. */
613
- maxParallelism?: number;
614
- /** Execution timeout in SECONDS (matches the backend interface's unit). */
615
- timeout?: number;
616
- retry?: {
617
- maxAttempts: number;
618
- backoffMultiplier?: number;
619
- initialDelay?: number;
620
- };
621
- onError?: "stop" | "continue" | "retry";
622
- /** workflowKey to start (at its Error Trigger) when a production run of this workflow fails. */
623
- errorWorkflowKey?: string;
624
- /** Overrides the workspace's run-data settings; an unset field follows the workspace (BOFF-7514). */
625
- dataSaving?: WorkflowDataSaving;
626
- /** Overrides the workspace's retention; an unset field follows the workspace (BOFF-7514). */
627
- retention?: WorkflowRetention;
628
- /** "Do not store run data" and redacted fields (BOFF-9752). */
629
- dataPrivacy?: WorkflowDataPrivacy;
630
- }
631
- interface WorkflowDefinition {
632
- id: string;
633
- workflowKey: string;
634
- version: string;
635
- name: string;
636
- description?: string;
637
- alias?: string;
638
- status?: "draft" | "active" | "archived";
639
- definitionJson?: WorkflowDefinitionJson;
640
- createdAt?: string;
641
- updatedAt?: string;
642
- createdBy?: string;
643
- /**
644
- * Optimistic-concurrency counter (BOFF-9725): saves send it back so a change
645
- * made elsewhere since the version was loaded is refused, not overwritten.
646
- */
647
- revision?: number;
648
- /** Who last changed this version, when known. */
649
- updatedById?: string | null;
650
- }
651
- interface WorkflowDefinitionJson {
652
- key: string;
653
- name: string;
654
- description?: string;
655
- workflow_type?: string;
656
- data: WorkflowData;
657
- meta?: Record<string, unknown>;
658
- tags?: string[];
659
- /** Workflow-level execution config (BOFF-7512) — sibling of `data`, matching the backend's `IWorkflowDefinitionJson.config`. */
660
- config?: IWorkflowConfig;
661
- }
662
- interface WorkflowData {
663
- id: string;
664
- workflowKey: string;
665
- name: string;
666
- version: string;
667
- alias?: string;
668
- nodes: FlowNode[];
669
- edges: FlowEdge[];
670
- sidebar: SidebarState;
671
- }
672
- interface SidebarState {
673
- active: "node-properties" | "store-browse" | "none";
674
- panels: {
675
- nodeProperties: {
676
- selectedNode: {
677
- id: string;
678
- type: string;
679
- } | null;
680
- };
681
- };
682
- }
683
- interface Tag {
684
- value: string;
685
- label: string;
686
- color: string;
687
- }
688
-
689
- type RunStatus = "pending" | "running" | "completed" | "failed" | "cancelled" | "timeout";
690
- type NodeStatus = "idle" | "pending" | "running" | "success" | "error" | "skipped";
691
- type ErrorType = "validation" | "execution" | "timeout" | "cancelled" | "unknown";
692
- interface WorkflowRun {
693
- id: string;
694
- workflowKey: string;
695
- workflowVersion: string;
696
- workflowName?: string;
697
- status: RunStatus;
698
- startedAt: string;
699
- completedAt?: string;
700
- duration?: number;
701
- triggeredBy?: string;
702
- triggerType?: string;
703
- error?: WorkflowError;
704
- nodeStates?: NodeState[];
705
- inputData?: Record<string, unknown>;
706
- outputData?: Record<string, unknown>;
707
- parentRunId?: string;
708
- isSubWorkflowRun?: boolean;
709
- subworkflowDepth?: number;
710
- rootRunId?: string;
711
- childRuns?: WorkflowRun[];
712
- }
713
- interface NodeState {
714
- id: string;
715
- nodeId: string;
716
- nodeType: string;
717
- nodeName?: string;
718
- status: NodeStatus;
719
- startedAt?: string;
720
- completedAt?: string;
721
- duration?: number;
722
- inputData?: Record<string, unknown>;
723
- outputData?: Record<string, unknown>;
724
- error?: string;
725
- itemCount?: number;
726
- childRunId?: string;
727
- }
728
- interface WorkflowError {
729
- type: ErrorType;
730
- message: string;
731
- nodeId?: string;
732
- stack?: string;
733
- }
734
- /**
735
- * The backend's immutable plan for one `executeStep` TEST run. Keeping it with
736
- * the execution slice lets the node detail view explain which data was reused
737
- * rather than inferring it after polling starts.
738
- */
739
- interface StepExecutionPlan {
740
- runId: string;
741
- targetNodeId: string;
742
- sourceRunId: string | null;
743
- reusedNodeIds: string[];
744
- pinnedNodeIds: string[];
745
- executeNodeIds: string[];
746
- initialNodeIds: string[];
747
- blockers: string[];
748
- }
749
- /**
750
- * Workflow identity captured with the run currently loaded in the builder.
751
- * Continuation must never reuse logs from a different workflow version.
752
- */
753
- interface ExecutionRunMetadata {
754
- runId: string;
755
- workflowKey: string;
756
- version: string;
757
- /** Source runs used for continuation must be TEST runs. */
758
- sourceMode?: "TEST" | "PRODUCTION";
759
- }
760
- interface ExecutionLog {
761
- id: string;
762
- runId: string;
763
- nodeId: string;
764
- nodeType: string;
765
- nodeName: string;
766
- status: "pending" | "running" | "completed" | "failed";
767
- inputArgs: Record<string, unknown> | null;
768
- output: Record<string, unknown> | null;
769
- error: string | null;
770
- duration: number | null;
771
- startTime: string;
772
- endTime: string | null;
773
- /**
774
- * True when this node's output came from pinned data instead of a real
775
- * call (BOFF-7511). Always false/undefined outside a TEST run.
776
- */
777
- usedPinnedData?: boolean;
778
- /**
779
- * Set when this node's state was reused from an earlier run by
780
- * `runFromNode` instead of being executed in this run (BOFF-7511).
781
- */
782
- reusedFromRunId?: string | null;
783
- }
784
- interface ExecutionsFilter {
785
- status?: RunStatus[];
786
- workflowKey?: string;
787
- dateRange?: {
788
- start: string;
789
- end: string;
790
- };
791
- triggeredBy?: string;
792
- }
793
- interface ExecutionsPagination {
794
- page: number;
795
- pageSize: number;
796
- total: number;
797
- }
798
- declare const RUN_STATUS_CONFIG: Record<RunStatus, {
799
- label: string;
800
- color: string;
801
- bgColor: string;
802
- }>;
803
- declare const NODE_STATUS_CONFIG: Record<NodeStatus, {
804
- label: string;
805
- color: string;
806
- bgColor: string;
807
- }>;
808
-
809
- interface WorkflowBuilderCoreProps {
810
- /** Initial workflow data to render */
811
- workflow?: WorkflowData;
812
- /** Readonly mode - disables editing */
813
- readonly?: boolean;
814
- /** Hide the header toolbar */
815
- hideHeader?: boolean;
816
- /** Hide the sidebar */
817
- hideSidebar?: boolean;
818
- /** Hide the logs panel */
819
- hideLogsPanel?: boolean;
820
- /**
821
- * Called with the edited workflow when the user clicks Save. This component
822
- * does not persist anything itself: storing the workflow is the host's
823
- * job, so no `workflow:saved` host event is emitted for it.
824
- */
825
- onSave?: (workflow: WorkflowData) => void;
826
- /**
827
- * Called when the user clicks Run, with a client-generated id
828
- * (`run-<timestamp>`) the host may use to label the run it starts. No
829
- * backend run exists yet, so no `run:started` host event is emitted.
830
- */
831
- onExecute?: (runId: string) => void;
832
- /** Callback when a node is clicked */
833
- onNodeClick?: (node: FlowNode) => void;
834
- /** Callback when back button is clicked */
835
- onBack?: () => void;
836
- /** Custom className */
837
- className?: string;
838
- }
839
- /**
840
- * Lightweight, local-only workflow canvas.
841
- *
842
- * Host events (`FluidGridsEventMap`): reports `node:selected` exactly like the
843
- * full builder canvas. Save and Run only hand data to `onSave` / `onExecute`
844
- * and call no backend, so it emits no `workflow:saved`, `run:started` or
845
- * `error` events: the host performs those actions and already knows their
846
- * outcome. Works without a host `ThemeProvider`.
847
- */
848
- declare function WorkflowBuilderCore(props: WorkflowBuilderCoreProps): react_jsx_runtime.JSX.Element;
849
-
850
- interface WorkflowBuilderProps extends Omit<WorkflowBuilderCoreProps, "workflow"> {
851
- /** Workflow ID to load */
852
- workflowId?: string;
853
- /** Workflow version to load */
854
- workflowVersion?: string;
855
- /** Initial workflow data (bypasses API fetch) */
856
- initialWorkflow?: WorkflowData;
857
- /** Workspace API Gateway URL */
858
- apiGatewayUrl?: string;
859
- /** Global API Gateway URL (for store operations) */
860
- globalApiUrl?: string;
861
- /** Authentication token */
862
- authToken?: string;
863
- /** Current workspace ID */
864
- workspaceId: string;
865
- /** Product namespace, actor identity and workspace authentication. */
866
- productId?: string;
867
- userId?: string;
868
- workspaceToken?: string;
869
- /** Current tenant ID */
870
- tenantId?: string;
871
- /** Organization ID */
872
- organizationId?: string;
873
- /** Optional: Provide your own workspace Apollo client */
874
- workspaceClient?: ApolloClient;
875
- /** Optional: Provide your own global Apollo client */
876
- globalClient?: ApolloClient;
877
- /** Theme: `"light"`, `"dark"` or a token object. See `FluidGridsTheme`. */
878
- theme?: FluidGridsProviderProps["theme"];
879
- /** Authentication hooks (`onTokenExpired`). */
880
- auth?: FluidGridsProviderProps["auth"];
881
- /** Host event callback. See `FluidGridsEventMap`. */
882
- onEvent?: FluidGridsProviderProps["onEvent"];
883
- }
884
- /**
885
- * WorkflowBuilder - Standalone workflow builder component with Apollo client support
886
- *
887
- * Use this component when you want to embed the workflow builder in any React app.
888
- * You can either:
889
- * 1. Provide pre-configured Apollo clients (workspaceClient + globalClient) - Recommended
890
- * 2. Provide URLs and let the component create clients internally
891
- *
892
- * It needs no host `ThemeProvider` (one is mounted only when the page has
893
- * none). Host events: `onEvent` receives `node:selected`; Save and Run are
894
- * local (they call `onSave` / `onExecute` and no backend), so they emit no
895
- * `workflow:saved` / `run:started`. See `WorkflowBuilderCore`.
896
- *
897
- * @example Dual Client Injection (Recommended)
898
- * ```tsx
899
- * import { createFluidGridsClients } from '@fluidgrids/fe-sdk';
900
- *
901
- * const { workspaceClient, globalClient } = createFluidGridsClients({
902
- * workspaceApiUrl: 'http://localhost:4000/workspaces/graphql',
903
- * globalApiUrl: 'http://localhost:4000/global/graphql',
904
- * authToken: token,
905
- * workspaceId: 'ws-123',
906
- * });
907
- *
908
- * <WorkflowBuilder
909
- * workspaceClient={workspaceClient}
910
- * globalClient={globalClient}
911
- * workspaceId="ws-123"
912
- * onSave={(workflow) => console.log(workflow)}
913
- * />
914
- * ```
915
- *
916
- * @example URL-based (Simpler, less flexible)
917
- * ```tsx
918
- * <WorkflowBuilder
919
- * apiGatewayUrl="http://localhost:4000/workspaces/graphql"
920
- * globalApiUrl="http://localhost:4000/global/graphql"
921
- * authToken={token}
922
- * workspaceId="ws-123"
923
- * onSave={(workflow) => console.log(workflow)}
924
- * />
925
- * ```
926
- */
927
- declare function WorkflowBuilder$1({ workflowId, workflowVersion, initialWorkflow, apiGatewayUrl, globalApiUrl, authToken, workspaceId, tenantId, productId, userId, workspaceToken, organizationId, workspaceClient, globalClient, theme, auth, onEvent, ...coreProps }: WorkflowBuilderProps): react_jsx_runtime.JSX.Element;
928
-
929
- /**
930
- * WorkflowBuilder page with ErrorBoundary for graceful crash recovery.
931
- * If the builder throws (React Flow error, node rendering crash, etc.),
932
- * the user sees a recovery UI instead of a blank screen.
933
- */
934
- declare function WorkflowBuilder(): react_jsx_runtime.JSX.Element;
935
-
936
- /**
937
- * Global search indexes WorkflowDefinition by its database id, but the
938
- * builder route (`workflow/:workflowKey/:version`) is keyed by workflowKey +
939
- * version. This page bridges the two: it resolves the id to its current
940
- * workflowKey/version and redirects there.
941
- */
942
- declare function WorkflowSearchRedirect(): react_jsx_runtime.JSX.Element;
943
-
944
- interface ExecutionState {
945
- isExecuting: boolean;
946
- executingNodeId: string | null;
947
- currentRunId: string | null;
948
- /** Identity of the run whose logs are currently loaded/reusable. */
949
- sourceRun: ExecutionRunMetadata | null;
950
- stepPlan: StepExecutionPlan | null;
951
- logs: ExecutionLog[];
952
- selectedLogId: string | null;
953
- panelExpanded: boolean;
954
- nodeStatuses: Record<string, "idle" | "running" | "success" | "error">;
955
- nodeItemCounts: Record<string, number>;
956
- /**
957
- * A run the editor did not start itself (a webhook test event, BOFF-7513)
958
- * waiting to be followed on the canvas. Consumed by `WebhookRunFollower`,
959
- * which outlives the panel that requested it.
960
- */
961
- followRequest: {
962
- runId: string;
963
- triggerNodeId: string;
964
- } | null;
965
- }
966
- interface CustomEdgeProps extends Edge {
967
- condition?: EdgeCondition;
968
- mapping?: EdgeMapping;
969
- }
970
- /** A point-in-time snapshot of canvas structure for undo/redo. */
971
- interface HistorySnapshot {
972
- nodes: Node[];
973
- edges: CustomEdgeProps[];
974
- }
975
- /** Undo/redo stacks for the currently open workflow. */
976
- interface HistoryState {
977
- past: HistorySnapshot[];
978
- future: HistorySnapshot[];
979
- }
980
- interface State {
981
- nodes: Node[];
982
- edges: CustomEdgeProps[];
983
- /** Node currently open in the n8n-style 3-pane Node Detail View modal. */
984
- ndv?: {
985
- nodeId: string;
986
- type: ExtendedNodeType;
987
- /** The tab to show first; the code-workflow node's Source tab, say. */
988
- tab?: "source";
989
- } | null;
990
- /** Node currently in inline-rename edit mode (F2 or double-click on its
991
- * title). Only one node can be renamed at a time. */
992
- renamingNodeId?: string | null;
993
- /**
994
- * Node currently open in the single-click floating quick-config panel
995
- * (Make-style, attached beside the node). The panel derives its own screen
996
- * position from the node's live rect, so no anchor is stored here.
997
- */
998
- quickConfig?: {
999
- nodeId: string;
1000
- type: ExtendedNodeType;
1001
- } | null;
1002
- /**
1003
- * Source handle awaiting attachment via the Node Store (the n8n-style "+"
1004
- * button on an output handle). While set, clicking an operation in the
1005
- * store panel creates the node and wires it to this handle.
1006
- */
1007
- pendingConnection?: {
1008
- nodeId: string;
1009
- handleId: string;
1010
- } | null;
1011
- sidebar: {
1012
- active: "node-properties" | "store-browse" | "none";
1013
- panels: {
1014
- nodeProperties: {
1015
- selectedNode: {
1016
- id: string;
1017
- type: ExtendedNodeType;
1018
- } | null | undefined;
1019
- };
1020
- };
1021
- };
1022
- }
1023
- interface Actions {
1024
- actions: {
1025
- saveWorkflow: () => {
1026
- id: string;
1027
- name: string;
1028
- version: string;
1029
- alias?: string;
1030
- dbId?: string;
1031
- status?: string;
1032
- nodes: Node[];
1033
- edges: Edge[];
1034
- };
1035
- setWorkflow: (workflow: Partial<IFlowState["workflow"]>) => void;
1036
- resetWorkflow: () => void;
1037
- history: {
1038
- undo: () => void;
1039
- redo: () => void;
1040
- /** Wipe both stacks — called when a (different) workflow is loaded so
1041
- * undo can never reach back into a previously open workflow. */
1042
- clear: () => void;
1043
- };
1044
- nodes: {
1045
- onNodesChange: (changes: NodeChange[]) => void;
1046
- /** `historyKind` groups rapid same-kind writes (e.g. keystrokes in one
1047
- * field) into a single undo step; `skipHistory` opts a caller out of
1048
- * history entirely (e.g. transient UI-only patches). */
1049
- setNodes: (nodes: Node[], opts?: {
1050
- historyKind?: string;
1051
- skipHistory?: boolean;
1052
- }) => void;
1053
- deleteNode: (node: Node) => void;
1054
- /** Bulk delete (multi-select) — one undo step for the whole selection. */
1055
- deleteNodes: (nodes: Node[]) => void;
1056
- /** Clone the given nodes (+ edges strictly between them) with fresh ids,
1057
- * offset on the canvas, and select only the clones. */
1058
- duplicateNodes: (nodeIds: string[]) => void;
1059
- /** Insert a clipboard payload (possibly from another workflow/tab):
1060
- * fresh ids, offset, selects the pasted nodes. */
1061
- pasteNodes: (payload: {
1062
- nodes: Node[];
1063
- edges: Edge[];
1064
- }) => void;
1065
- toggleDisabled: (nodeId: string) => boolean;
1066
- renameNode: (nodeId: string, label: string) => void;
1067
- startRename: (nodeId: string) => void;
1068
- endRename: () => void;
1069
- };
1070
- edges: {
1071
- onEdgesChange: (changes: EdgeChange[]) => void;
1072
- onConnect: (connection: Connection) => void;
1073
- setEdges: (edges: Edge[], opts?: {
1074
- historyKind?: string;
1075
- skipHistory?: boolean;
1076
- }) => void;
1077
- deleteEdge: (edge: Edge) => void;
1078
- };
1079
- ndv: {
1080
- open: (node: {
1081
- nodeId: string;
1082
- type: ExtendedNodeType;
1083
- tab?: "source";
1084
- }) => void;
1085
- close: () => void;
1086
- };
1087
- quickConfig: {
1088
- open: (node: {
1089
- nodeId: string;
1090
- type: ExtendedNodeType;
1091
- }) => void;
1092
- close: () => void;
1093
- };
1094
- pendingConnection: {
1095
- /** Arm attach mode for a source handle and open the Node Store panel. */
1096
- start: (connection: {
1097
- nodeId: string;
1098
- handleId: string;
1099
- }) => void;
1100
- clear: () => void;
1101
- };
1102
- sidebar: {
1103
- setActivePanel: (panel: "node-properties" | "store-browse" | "none") => void;
1104
- showNodePropertiesOf: (node: {
1105
- id: string;
1106
- type: ExtendedNodeType;
1107
- block?: string;
1108
- }) => void;
1109
- panels: {
1110
- nodeProperties: {
1111
- setSelectedNode: (node: {
1112
- id: string;
1113
- type: ExtendedNodeType;
1114
- } | undefined | null) => void;
1115
- };
1116
- tags: {
1117
- setTags: (tags: Tag[]) => void;
1118
- createTag: (tag: Tag) => void;
1119
- deleteTag: (tag: Tag) => void;
1120
- updateTag: (tag: Tag, newTag: Tag) => void;
1121
- };
1122
- };
1123
- };
1124
- };
1125
- }
1126
- interface IFlowState {
1127
- tags: Tag[];
1128
- /** Undo/redo stacks — canvas structure (nodes/edges) AND parameter edits,
1129
- * since both flow through the same `setNodes`/`setEdges` writes. */
1130
- history: HistoryState;
1131
- /**
1132
- * Bumped by every user edit (each undo checkpoint, undo, redo, rename or
1133
- * alias change). Autosave (BOFF-9724) reads it to tell an edit from the
1134
- * canvas settling right after a load.
1135
- */
1136
- editRevision: number;
1137
- /**
1138
- * Bumped by `resetWorkflow`, i.e. whenever another workflow (or version) is
1139
- * about to load. A save or baseline taken under an older generation belongs
1140
- * to a workflow that is no longer open.
1141
- */
1142
- loadGeneration: number;
1143
- workflow: {
1144
- id: string;
1145
- workflowKey: string;
1146
- name: string;
1147
- version: string;
1148
- alias?: string;
1149
- /** Database row ID (used for updateWorkflowDefinition) */
1150
- dbId?: string;
1151
- /** Current workflow status: DRAFT | ACTIVE | ARCHIVED | DEPRECATED */
1152
- status?: string;
1153
- /**
1154
- * The build this version runs (`definitionJson.code.buildId`), when it
1155
- * runs code. Such a version is immutable: saving keeps the edits as a new
1156
- * version (spec code-first 06 §1).
1157
- */
1158
- codeBuildId?: string;
1159
- /**
1160
- * Pinned/mock output data, keyed by nodeId (BOFF-7511). Mirrors
1161
- * `WorkflowDefinition.pinnedNodeData` — hydrated on load, kept in sync by
1162
- * the NDV's pin/unpin actions so the canvas never shows a stale pin
1163
- * badge after a mutation round-trips.
1164
- */
1165
- pinnedNodeData?: Record<string, {
1166
- data: Record<string, unknown>;
1167
- pinnedAt?: string;
1168
- pinnedBy?: string;
1169
- }>;
1170
- } & State;
1171
- execution: ExecutionState;
1172
- actions: Actions["actions"] & {
1173
- execution: {
1174
- startExecution: (nodeId: string, runId: string, metadata?: Omit<ExecutionRunMetadata, "runId">) => void;
1175
- setRunMetadata: (metadata: ExecutionRunMetadata) => void;
1176
- setStepPlan: (plan: StepExecutionPlan) => void;
1177
- addLog: (log: ExecutionLog) => void;
1178
- updateLog: (logId: string, updates: Partial<ExecutionLog>) => void;
1179
- setNodeStatus: (nodeId: string, status: "idle" | "running" | "success" | "error") => void;
1180
- setNodeItemCount: (nodeId: string, count: number) => void;
1181
- selectLog: (logId: string | null) => void;
1182
- togglePanel: () => void;
1183
- clearLogs: () => void;
1184
- completeExecution: () => void;
1185
- /**
1186
- * Debug-in-editor (BOFF-7511): load a PAST run's node states onto the
1187
- * canvas as if they'd just executed, without marking anything as
1188
- * "running". Each node shows what it actually produced in `runId`, and
1189
- * `currentRunId` becomes that run's id so "Run from this node" knows
1190
- * which run to reuse upstream outputs from.
1191
- */
1192
- loadDebugRun: (runId: string, logs: ExecutionLog[], metadata?: Omit<ExecutionRunMetadata, "runId">) => void;
1193
- /** Ask the canvas to follow a run started outside the editor. */
1194
- requestFollowRun: (runId: string, triggerNodeId: string) => void;
1195
- clearFollowRequest: () => void;
1196
- };
1197
- };
1198
- }
1199
- declare const useFlowStore: zustand.UseBoundStore<zustand.StoreApi<IFlowState>>;
1200
-
1201
- /**
1202
- * Refetch all nodes by re-running initializeNodeConfigs.
1203
- * Called after installing/uninstalling a store node.
1204
- *
1205
- * Resets the initialization guard and all derived arrays so
1206
- * initializeNodeConfigs() runs a fresh fetch instead of returning early.
1207
- */
1208
- declare function refetchStoreNodes(): Promise<void>;
1209
-
1210
- export { type WorkflowError as $, type FluidGridsThemeRadius as A, type FluidGridsThemeTokenKey as B, type ConditionRule as C, type FluidGridsThemeTokenMapping as D, type EdgeCondition as E, FLUIDGRIDS_EVENTS_VERSION as F, type FluidGridsThemeTokens as G, type FluidGridsThemeValueKind as H, type IFlowState as I, type NodeEndpointConfig as J, type NodeManifest as K, type NodeState as L, type MappingValue as M, NODE_STATUS_CONFIG as N, type NodeStatus as O, type RunStatus as P, WorkflowBuilder as Q, RUN_STATUS_CONFIG as R, type SidebarState as S, type Tag as T, WorkflowBuilderCore as U, type WorkflowBuilderCoreProps as V, WorkflowBuilder$1 as W, type WorkflowBuilderProps as X, type WorkflowData as Y, type WorkflowDefinition as Z, type WorkflowDefinitionJson as _, type EdgeMapping as a, type WorkflowRun as a0, type WorkflowSavedResult as a1, WorkflowSearchRedirect as a2, applyFluidGridsTheme as a3, config as a4, getFluidGridsConfig as a5, getGraphQLEndpoint as a6, refetchStoreNodes as a7, resetFluidGridsConfig as a8, resetFluidGridsExecutionState as a9, setFluidGridsConfig as aa, themeToCssVariables as ab, useFlowStore as ac, useFluidGridsContext as ad, type ErrorType as b, type ExecutionLog as c, type ExecutionsFilter as d, type ExecutionsPagination as e, type ExtendedNodeType as f, FLUIDGRIDS_EVENT_NAMES as g, FLUIDGRIDS_THEME_TOKEN_MAP as h, type FlowEdge as i, type FlowNode as j, type FlowNodeData as k, type FluidGridsAuthConfig as l, type FluidGridsConfig as m, type FluidGridsErrorSource as n, type FluidGridsEventArgs as o, type FluidGridsEventHandler as p, type FluidGridsEventMap as q, type FluidGridsEventName as r, type FluidGridsEventPayload as s, FluidGridsProvider as t, type FluidGridsProviderProps as u, type FluidGridsRefreshedTokens as v, type FluidGridsTheme as w, type FluidGridsThemeColors as x, type FluidGridsThemeFont as y, type FluidGridsThemeMode as z };