@burdenoff/fluidgrids-fe-sdk 2026.1111.15 → 2026.1111.17

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 (112) hide show
  1. package/README.md +41 -0
  2. package/dist/AiStudioPage-kJHSsIcj.js +774 -0
  3. package/dist/ApprovalInboxPage-dbBDSJ-f.js +558 -0
  4. package/dist/DataSinkDashboardPage-1h2QsMzH.js +270 -0
  5. package/dist/DataTablesPage-BZy2z0LB.js +1690 -0
  6. package/dist/EntityTagPicker-BqRNsLCQ.js +135 -0
  7. package/dist/{ExecutionDetailPage-DO38vZ_F.js → ExecutionDetailPage-BdcZmLT4.js} +799 -4420
  8. package/dist/ExecutionDetailPage-DvQ667OE.d.ts +10 -0
  9. package/dist/ExecutionsListPage-BCUJoAIE.js +2742 -0
  10. package/dist/{FailureTriagePanel-BHiduL7A.js → FailureTriagePanel-B9hDQymi.js} +4 -97
  11. package/dist/{FluidGridsProvider-B9RR_CI_.js → FluidGridsProvider-dvZSNtSW.js} +28 -350
  12. package/dist/HistoryPage-BLoRpJ1R.d.ts +6 -0
  13. package/dist/{HistoryPage-CA42pU85.js → HistoryPage-U0tqupBN.js} +6 -4
  14. package/dist/HumanRequestCard-D-ooVPDn.js +439 -0
  15. package/dist/{InsightsPage-CBoN_Mj9.js → InsightsPage-CALo16eB.js} +17 -328
  16. package/dist/ManagedAiPolicyAuthority-BxwJ3ptd.js +40 -0
  17. package/dist/{ManagedAiPolicyAuthority-CGux_DaV.d.ts → ManagedAiPolicyAuthority-DM3t3wNr.d.ts} +1 -5
  18. package/dist/ManagedAiPolicyAuthorityContext-CNkxIOZ1.js +10 -0
  19. package/dist/{MissingNodesInstallModal-Dm0nMBXM.js → MissingNodesInstallModal-CMybsI8h.js} +3 -2
  20. package/dist/{NodesPage-ClvhUfbh.js → NodesPage-Bf5PhfBK.js} +7 -3
  21. package/dist/NodesPage-DEbnz9iU.d.ts +6 -0
  22. package/dist/{PublishCustomNodeAction-D2F7oN0S.js → PublishCustomNodeAction-5XXnSA3H.js} +3 -45
  23. package/dist/QuotaExhaustedDialog-7IFSaLyi.js +54 -0
  24. package/dist/RunnerStatusPill-Ctg4TJcP.js +187 -0
  25. package/dist/RunnersPage-CLCOCclc.js +467 -0
  26. package/dist/{ManagedAiPolicyAuthority-CKihmbJE.js → SettingsPage-CgkRlCM5.js} +19 -50
  27. package/dist/SettingsPage-DMHQFj5-.d.ts +9 -0
  28. package/dist/TagFilterSelect-DCBOH6Ou.js +41 -0
  29. package/dist/TaskQueuesPage-9VgSnLdL.js +951 -0
  30. package/dist/TemplateCard-DsC0KNH1.js +1416 -0
  31. package/dist/{TemplateConfigurationModal-Bs_V-E4u.js → TemplateConfigurationModal-BhGWIzpm.js} +3 -2
  32. package/dist/{TemplateDetailPanel-MlT39VLG.js → TemplateDetailPanel-D4cUVr-m.js} +3 -3
  33. package/dist/TemplatePreview-GthzCOSo.js +231 -0
  34. package/dist/TemplatesPage-BG3H-6v6.d.ts +10 -0
  35. package/dist/{TemplatesPage-CHVpWBuw.js → TemplatesPage-CsDNT54N.js} +11 -228
  36. package/dist/VariablesPage-67WR_lVE.js +949 -0
  37. package/dist/{VersionDiffDialog-Dq2xlPFI.js → VersionDiffDialog-DSN0mU0f.js} +2 -1
  38. package/dist/WorkflowBuilder-DEi_9YOb.js +555 -0
  39. package/dist/{WorkflowSearchRedirect-3gyHcYY2.js → WorkflowBuilder-iPqXgbYr.js} +19 -585
  40. package/dist/{WorkflowProposalCard-8Vr56kQa.js → WorkflowProposalCard-qrEeNyYG.js} +4 -405
  41. package/dist/WorkflowSearchRedirect-DwDNZ_q5.js +36 -0
  42. package/dist/{WorkflowShareDialog-0Ai1HED-.js → WorkflowShareDialog-B_gn968c.js} +6 -52
  43. package/dist/{WorkflowsList-CJ3KmMHX.js → WorkflowsList-CA20dVIl.js} +11 -6
  44. package/dist/WorkflowsList-CcNDQge5.d.ts +6 -0
  45. package/dist/agent-form-Bfvm32j1.js +83 -0
  46. package/dist/{agentTools-B1IK1JEO.js → agentTools-CkRJB7r5.js} +3 -2
  47. package/dist/{ai-usage-D5p7ZeRR.js → ai-usage-glCwHyQz.js} +1 -1
  48. package/dist/api-BrCHB5oA.js +224 -0
  49. package/dist/api-C8e0iV-Q.js +55 -0
  50. package/dist/button-DG7y_FVJ.js +48 -0
  51. package/dist/{canvasNoteTools-eewVHVuy.js → canvasNoteTools-CQIc7Oxg.js} +2 -2
  52. package/dist/client-C9XSzSXr.js +1147 -0
  53. package/dist/{codec-client-DstqyzTN.js → codec-client-CJ95Rmqo.js} +1 -1
  54. package/dist/constants-B2lhWNoN.js +202 -0
  55. package/dist/constants-XdvUxeWK.d.ts +162 -0
  56. package/dist/dialog-Cjb4lB4D.js +105 -0
  57. package/dist/executions.d.ts +1 -1
  58. package/dist/executions.js +2 -1
  59. package/dist/feature-flags-DM5myWaD.js +296 -0
  60. package/dist/flags.d.ts +3 -0
  61. package/dist/flags.js +4 -0
  62. package/dist/{flow-builder-C_3sY3pZ.js → flow-builder-y2Y1iG4Y.js} +182 -1821
  63. package/dist/{node-endpoint-configs-DHFGA5MQ.js → graphql-operation-types-kX-MMjgW.js} +1 -1194
  64. package/dist/{graphql-types-XcDLtFwU.js → graphql-types-CDKVWH2R.js} +2 -202
  65. package/dist/history.d.ts +1 -1
  66. package/dist/history.js +1 -1
  67. package/dist/index-72XFgvbn.d.ts +132 -0
  68. package/dist/index-BcdtKBM-.d.ts +56 -0
  69. package/dist/{index-B3BWqafN.d.ts → index-DjiFgEQl.d.ts} +5 -131
  70. package/dist/{index-DRf25-D3.d.ts → index-W2o__Nm6.d.ts} +32 -214
  71. package/dist/index.d.ts +13 -9
  72. package/dist/index.js +50 -5300
  73. package/dist/{node-detail-view-CAws5qjg.js → node-detail-view-B91kXzIy.js} +11 -8
  74. package/dist/node-endpoint-configs-B5bjNMDW.js +37 -0
  75. package/dist/node-registry-refresh-Dy0uRg9f.js +84 -0
  76. package/dist/nodes.d.ts +1 -1
  77. package/dist/nodes.js +1 -1
  78. package/dist/observability.d.ts +1 -1
  79. package/dist/observability.js +2 -1
  80. package/dist/{quick-config-panel-DOzNkSVV.js → quick-config-panel-DggPl1vY.js} +2 -2
  81. package/dist/rolldown-runtime-hDbaFkMy.js +18 -0
  82. package/dist/run-display-BycKYSU0.js +46 -0
  83. package/dist/run-list-links-ByYC0OlV.js +98 -0
  84. package/dist/settings.d.ts +2 -1
  85. package/dist/settings.js +2 -1
  86. package/dist/shared-CMfn30xT.js +196 -0
  87. package/dist/templates.d.ts +1 -1
  88. package/dist/templates.js +2 -1
  89. package/dist/theme-provider-B3mIuz2d.js +11 -0
  90. package/dist/{useAgentDefinitions-NFtLytDR.js → useAgentDefinitions-Dpz0HDTq.js} +2 -1
  91. package/dist/useDurableParity-CzUQMFJ3.js +415 -0
  92. package/dist/useEntityTags-DhnsZcTl.js +236 -0
  93. package/dist/{useExecutions-DkS0FTfw.js → useExecutions-9aLuOt1c.js} +4 -3
  94. package/dist/{useObservability-BkxhHZsX.js → useObservability-CfEw3ZFD.js} +2 -2
  95. package/dist/{useRunHistory-DHehG09Z.js → useRunHistory-B1xJDwl1.js} +4 -3
  96. package/dist/{useWorkflows-DyhtoVwp.js → useWorkflows-BlVVu8NM.js} +3 -2
  97. package/dist/utils-uaL5UVxb.js +65 -0
  98. package/dist/workflow-builder.d.ts +1 -1
  99. package/dist/workflow-builder.js +4 -2
  100. package/dist/workflow-host.d.ts +6 -0
  101. package/dist/workflow-host.js +9 -0
  102. package/dist/workflow-pages.d.ts +55 -0
  103. package/dist/workflow-pages.js +113 -0
  104. package/dist/workflows-list.d.ts +1 -1
  105. package/dist/workflows-list.js +1 -1
  106. package/package.json +13 -1
  107. package/dist/ExecutionDetailPage-MvsnOnE1.d.ts +0 -4
  108. package/dist/HistoryPage-BqUizaFv.d.ts +0 -3
  109. package/dist/NodesPage-C97-9K2Y.d.ts +0 -3
  110. package/dist/TemplatesPage-D0qnXzHh.d.ts +0 -4
  111. package/dist/WorkflowsList-0d5GSKdh.d.ts +0 -3
  112. package/dist/agent-form-BvMWhQ42.js +0 -496
@@ -1,14 +1,17 @@
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 { 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
- 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
- import { $t as useWorkflowPinnedDataQuery, Lt as useUnpinNodeDataMutation, pt as usePinNodeDataMutation } from "./useAgentDefinitions-NFtLytDR.js";
8
- import { hI as FLUIDGRIDS_PERMISSIONS, xI as useFluidGridsPermission } from "./graphql-types-XcDLtFwU.js";
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-DHehG09Z.js";
11
- import { n as agentTracePath } from "./ai-usage-D5p7ZeRR.js";
4
+ import { G as nodeSubtitle, K as nodeTitle, Mn as getNodeDetail, X as useNodeConfig, _n as clearCodeWorkflowDefinitionCache, ct as latestNodeLog, dt as useGuardedNavigate, ot as FieldTree, rn as useNodeExecution, un as fieldsFromValue, xn as declaredSignals, yn as useCodeWorkflowInterface } from "./FluidGridsProvider-dvZSNtSW.js";
5
+ import { F as SchedulePanel, L as TabButton, M as ReadOnlyFieldset, P as SCHEDULE_NODE_TYPE, S as NodeSettingsPanel, T as NDV_Z_INDEX, _ as JsonView, b as NodeExecutionActions, k as CodeEditorField, v as TableView, w as NodeParamsForm } from "./flow-builder-y2Y1iG4Y.js";
6
+ import { _ as throwIfResultError, m as describeOperationError, n as getFluidGridsClient, r as getFluidGridsClientSafe } from "./client-C9XSzSXr.js";
7
+ import { Mt as NodeStatesDocument, Tr as WorkflowCodeSourceDocument, ht as FileDownloadUrlDocument, jr as WorkflowEditLeaseStatusDocument, p as BuildWorkflowCodeDocument } from "./graphql-operation-types-kX-MMjgW.js";
8
+ import { $t as useWorkflowPinnedDataQuery, Lt as useUnpinNodeDataMutation, pt as usePinNodeDataMutation } from "./useAgentDefinitions-Dpz0HDTq.js";
9
+ import { f as usePhaseCFlags, s as useDurableFunctionNodesEnabled } from "./feature-flags-DM5myWaD.js";
10
+ import { s as useFluidGridsPermission, t as FLUIDGRIDS_PERMISSIONS } from "./constants-B2lhWNoN.js";
11
+ import { h as fetchCodeBundleSdk } from "./api-BrCHB5oA.js";
12
+ import { n as SignalRunDialog, s as RunHistoryView, t as useRunHistory } from "./useRunHistory-B1xJDwl1.js";
13
+ import { s as isAgentNodeType } from "./agent-form-Bfvm32j1.js";
14
+ import { n as agentTracePath } from "./ai-usage-glCwHyQz.js";
12
15
  import * as React$1 from "react";
13
16
  import { useCallback, useEffect, useMemo, useRef, useState } from "react";
14
17
  import { useNavigate } from "react-router";
@@ -0,0 +1,37 @@
1
+ "use client";
2
+ import { Dt as NodeEndpointConfigsDocument } from "./graphql-operation-types-kX-MMjgW.js";
3
+
4
+ // src/utils/node-endpoint-configs.ts
5
+ const NODE_CONFIG_PAGE_SIZE = 500;
6
+ /** Stops a server that keeps answering `hasMore: true` from looping forever. */
7
+ const NODE_CONFIG_MAX_PAGES = 20;
8
+ /**
9
+ * `query` is any `nodeEndpointConfigs` document with the same variables: the builder
10
+ * palette uses a listing without the operations JSON (BOFF-10387).
11
+ */
12
+ async function fetchAllNodeEndpointConfigs(client, filters = {}, fetchPolicy = "network-only", query = NodeEndpointConfigsDocument) {
13
+ const byId = /* @__PURE__ */ new Map();
14
+ let offset = 0;
15
+ for (let page = 0; page < 20; page++) {
16
+ const { data } = await client.query({
17
+ query,
18
+ variables: {
19
+ ...filters,
20
+ pagination: {
21
+ limit: 500,
22
+ offset
23
+ }
24
+ },
25
+ fetchPolicy
26
+ });
27
+ const result = data?.nodeEndpointConfigs;
28
+ const configs = result?.configs ?? [];
29
+ for (const config of configs) if (config?.id && !byId.has(config.id)) byId.set(config.id, config);
30
+ if (!result?.pagination?.hasMore || configs.length === 0) return [...byId.values()];
31
+ offset += configs.length;
32
+ }
33
+ console.warn(`[Workflows] Stopped loading node configs after ${20} pages; the catalog may be incomplete.`);
34
+ return [...byId.values()];
35
+ }
36
+
37
+ export { fetchAllNodeEndpointConfigs as t };
@@ -0,0 +1,84 @@
1
+ "use client";
2
+ import { t as __exportAll } from "./rolldown-runtime-hDbaFkMy.js";
3
+ import { c as createFluidGridsTokenRefreshLink, v as createLiveTokenReader } from "./client-C9XSzSXr.js";
4
+ import { ApolloClient, InMemoryCache, createHttpLink } from "@apollo/client/core";
5
+ import { setContext } from "@apollo/client/link/context";
6
+
7
+ // src/graphql/global-client.ts
8
+ var global_client_exports = /* @__PURE__ */ __exportAll({ getGlobalStoreClient: () => getGlobalStoreClient });
9
+ let globalClientInstance = null;
10
+ /**
11
+ * Set the global Apollo client singleton
12
+ */
13
+ function setGlobalStoreClient(client) {
14
+ globalClientInstance = client;
15
+ }
16
+ /**
17
+ * Get the current global Apollo client
18
+ */
19
+ function getGlobalStoreClient() {
20
+ return globalClientInstance;
21
+ }
22
+ /**
23
+ * Reset/clear the global Apollo client
24
+ */
25
+ function resetGlobalStoreClient() {
26
+ globalClientInstance = null;
27
+ }
28
+ /**
29
+ * Create a new Apollo client for Global Gateway (Store operations)
30
+ *
31
+ * The auth token is read per request and follows a token refreshed through
32
+ * `auth.onTokenExpired`; expired-token responses are refreshed and retried
33
+ * once (see `createFluidGridsTokenRefreshLink`).
34
+ * @param config - Configuration including globalApiUrl, auth, and context IDs
35
+ */
36
+ function createGlobalStoreClient(config) {
37
+ const httpLink = createHttpLink({ uri: config.globalApiUrl });
38
+ const readTokens = createLiveTokenReader({ authToken: config.authToken });
39
+ const authLink = setContext((_, { headers }) => {
40
+ const { authToken } = readTokens();
41
+ return { headers: {
42
+ ...headers,
43
+ ...authToken && { authorization: `Bearer ${authToken}` },
44
+ "x-workspace-id": config.workspaceId,
45
+ ...config.tenantId && { "x-tenant-id": config.tenantId },
46
+ ...config.organizationId && { "x-organization-id": config.organizationId }
47
+ } };
48
+ });
49
+ return new ApolloClient({
50
+ link: createFluidGridsTokenRefreshLink().concat(authLink).concat(httpLink),
51
+ cache: new InMemoryCache(),
52
+ defaultOptions: {
53
+ watchQuery: { fetchPolicy: "cache-and-network" },
54
+ query: { fetchPolicy: "network-only" }
55
+ }
56
+ });
57
+ }
58
+
59
+ // src/builder/node-registry-refresh.ts
60
+ /**
61
+ * Refreshing the builder's node registry without loading it (BOFF-11826).
62
+ *
63
+ * A host calls `refreshNodeRegistry()` when it sets the workspace's clients, so
64
+ * a registry that is already loaded reloads for the new workspace. The registry
65
+ * itself (`blocks/index.ts`) is part of the builder's code. Importing it for
66
+ * this call put the builder's registry, its node components and every GraphQL
67
+ * document into each workflow page's first load. While the registry module has
68
+ * not loaded there is nothing loaded to refresh, so this module only holds the
69
+ * refresh the registry hands it when it loads.
70
+ */
71
+ let refresh = null;
72
+ /** Called once by the registry module when it loads. */
73
+ function provideNodeRegistryRefresh(fn) {
74
+ refresh = fn;
75
+ }
76
+ /**
77
+ * Reloads the node registry if it has loaded; otherwise there is nothing to
78
+ * refresh and it resolves at once. The builder loads the registry on demand.
79
+ */
80
+ function refreshNodeRegistry() {
81
+ return refresh ? refresh() : Promise.resolve();
82
+ }
83
+
84
+ export { global_client_exports as a, getGlobalStoreClient as i, refreshNodeRegistry as n, resetGlobalStoreClient as o, createGlobalStoreClient as r, setGlobalStoreClient as s, provideNodeRegistryRefresh as t };
package/dist/nodes.d.ts CHANGED
@@ -1,3 +1,3 @@
1
1
 
2
- import { t as NodesPage } from "./NodesPage-C97-9K2Y.js";
2
+ import { t as NodesPage } from "./NodesPage-DEbnz9iU.js";
3
3
  export { NodesPage };
package/dist/nodes.js CHANGED
@@ -1,4 +1,4 @@
1
1
  "use client";
2
- import { t as NodesPage } from "./NodesPage-ClvhUfbh.js";
2
+ import { t as NodesPage } from "./NodesPage-Bf5PhfBK.js";
3
3
 
4
4
  export { NodesPage };
@@ -1,3 +1,3 @@
1
1
 
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";
2
+ import { Aa as DataSinkData, Fa as LogStreamEventType, Ia as LogStreamProvider, La as NodeUsageStat, Ma as FailedRun, Na as LogStreamDestination, Pa as LogStreamDestinationInput, ja as DataSinkSummary, ka as DashboardSummary, oAa as ErrorAnalyticsPage, sAa as InsightsPage, uAa as DataSinkDashboardPage } from "./index-W2o__Nm6.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,5 @@
1
1
  "use client";
2
- import { n as InsightsPage, r as DataSinkDashboardPage, t as ErrorAnalyticsPage } from "./InsightsPage-CBoN_Mj9.js";
2
+ import { t as DataSinkDashboardPage } from "./DataSinkDashboardPage-1h2QsMzH.js";
3
+ import { n as InsightsPage, t as ErrorAnalyticsPage } from "./InsightsPage-CALo16eB.js";
3
4
 
4
5
  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 { 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";
3
+ import { G as nodeSubtitle, K as nodeTitle, Mn as getNodeDetail, X as useNodeConfig, rn as useNodeExecution } from "./FluidGridsProvider-dvZSNtSW.js";
4
+ import { I as NodeEditorTabs, N as useNodeEditorTab, R as NodeInputFields, b as NodeExecutionActions, x as NodeEditorTabBody } from "./flow-builder-y2Y1iG4Y.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";
@@ -0,0 +1,18 @@
1
+ "use client";
2
+ // \0rolldown/runtime.js
3
+ var __defProp = Object.defineProperty;
4
+ var __exportAll = (all, flags) => {
5
+ let target = Object.setPrototypeOf({}, null);
6
+ for (var name in all) {
7
+ __defProp(target, name, {
8
+ get: all[name],
9
+ enumerable: true
10
+ });
11
+ }
12
+ if (!(flags & 1)) {
13
+ __defProp(target, Symbol.toStringTag, { value: "Module" });
14
+ }
15
+ return flags & 2 ? target : Object.preventExtensions(target);
16
+ };
17
+
18
+ export { __exportAll as t };
@@ -0,0 +1,46 @@
1
+ "use client";
2
+ // src/modules/executions/utils/run-display.ts
3
+ /**
4
+ * Versions are stored as "v1"/"v2" (legacy: "1.0.0"). Render without
5
+ * double-prefixing: "v1" stays "v1", "1.0.0" becomes "v1.0.0".
6
+ */
7
+ function formatRunVersion(version) {
8
+ if (!version) return "";
9
+ return version.startsWith("v") ? version : `v${version}`;
10
+ }
11
+ function asString(value) {
12
+ return typeof value === "string" && value.trim() ? value : void 0;
13
+ }
14
+ /**
15
+ * Build a nodeId → display mapping from a workflow definitionJson.
16
+ * Label priority: user-set node label → manifest name → node type.
17
+ * Returns an empty map for missing/malformed definitions (e.g. runs of
18
+ * deleted workflows) — callers fall back to the raw nodeId.
19
+ */
20
+ function buildNodeDisplayMap(definitionJson) {
21
+ const map = {};
22
+ const nodes = definitionJson?.data?.nodes;
23
+ if (!Array.isArray(nodes)) return map;
24
+ for (const node of nodes) {
25
+ const id = asString(node?.id);
26
+ if (!id) continue;
27
+ const label = asString(node?.data?.label) ?? asString(node?.data?.nodeData?.name) ?? asString(node?.type);
28
+ if (!label) continue;
29
+ const operation = asString(node?.data?.operation_name);
30
+ map[id] = {
31
+ label,
32
+ operation: operation === "execute" ? void 0 : operation
33
+ };
34
+ }
35
+ return map;
36
+ }
37
+ /**
38
+ * "GitHub · searchIssues" title for a node, falling back to the raw nodeId
39
+ * when the definition doesn't know this node.
40
+ */
41
+ function nodeDisplayTitle(display, fallback) {
42
+ if (!display) return fallback;
43
+ return display.operation ? `${display.label} · ${display.operation}` : display.label;
44
+ }
45
+
46
+ export { formatRunVersion as n, nodeDisplayTitle as r, buildNodeDisplayMap as t };
@@ -0,0 +1,98 @@
1
+ "use client";
2
+ import { $u as ErrorType } from "./graphql-types-CDKVWH2R.js";
3
+
4
+ // src/modules/executions/utils/run-list-links.ts
5
+ /**
6
+ * Links into the Runs list that carry its filters in the query string
7
+ * (BOFF-9974), and the reading of them on the list.
8
+ *
9
+ * Insights' error panel links each failing node, error type, workflow and day
10
+ * to "the failed runs behind it". The two halves live together so a link and
11
+ * the filter it opens cannot drift apart.
12
+ *
13
+ * ../runs?status=FAILED&failedNodeType=internal%3Ahttp&from=…&to=…
14
+ *
15
+ * `from` / `to` are ISO instants (the list's custom date range); `workflowKey`
16
+ * is read by the list on its own, as it always was.
17
+ */
18
+ /** The filters a link may set; `workflowKey` stays with the list's own sync. */
19
+ const RUN_LIST_LINK_PARAMS = [
20
+ "status",
21
+ "errorType",
22
+ "failedNodeType",
23
+ "from",
24
+ "to"
25
+ ];
26
+ const RUN_STATUSES = [
27
+ "PENDING",
28
+ "RUNNING",
29
+ "COMPLETED",
30
+ "FAILED",
31
+ "CANCELLED",
32
+ "WAITING",
33
+ "TERMINATED"
34
+ ];
35
+ function isRunStatus(value) {
36
+ return RUN_STATUSES.some((status) => status === value);
37
+ }
38
+ /** A classification the service knows (its ErrorType enum). */
39
+ function isErrorType(value) {
40
+ return Object.values(ErrorType).some((type) => type === value);
41
+ }
42
+ function validDate(value) {
43
+ return value instanceof Date && Number.isFinite(value.getTime());
44
+ }
45
+ /** The Runs list with `link`'s filters, relative to an SDK page route. */
46
+ function runListPath(link) {
47
+ const params = new URLSearchParams();
48
+ if (link.workflowKey) params.set("workflowKey", link.workflowKey);
49
+ if (link.status) params.set("status", link.status);
50
+ if (link.errorType) params.set("errorType", link.errorType);
51
+ if (link.failedNodeType) params.set("failedNodeType", link.failedNodeType);
52
+ if (validDate(link.from)) params.set("from", link.from.toISOString());
53
+ if (validDate(link.to)) params.set("to", link.to.toISOString());
54
+ const query = params.toString();
55
+ return query ? `../runs?${query}` : "../runs";
56
+ }
57
+ function parseDate(value) {
58
+ if (!value) return null;
59
+ const date = new Date(value);
60
+ return Number.isFinite(date.getTime()) ? date : null;
61
+ }
62
+ /**
63
+ * The list filters a link's query string sets, or null when it carries none.
64
+ * Unknown values are ignored rather than trusted (the URL is user input); a
65
+ * reversed range is dropped, like the custom range inputs do.
66
+ */
67
+ function runListFilterFromSearch(params) {
68
+ const filter = {};
69
+ const status = params.get("status")?.trim().toUpperCase() ?? "";
70
+ if (isRunStatus(status)) filter.status = status;
71
+ const errorType = params.get("errorType")?.trim().toUpperCase() ?? "";
72
+ if (isErrorType(errorType)) filter.errorType = errorType;
73
+ const failedNodeType = params.get("failedNodeType")?.trim() ?? "";
74
+ if (failedNodeType) filter.failedNodeType = failedNodeType;
75
+ const from = parseDate(params.get("from"));
76
+ const to = parseDate(params.get("to"));
77
+ if ((from || to) && !(from && to && from.getTime() > to.getTime())) filter.dateRange = {
78
+ start: from,
79
+ end: to,
80
+ preset: "custom"
81
+ };
82
+ return Object.keys(filter).length > 0 ? filter : null;
83
+ }
84
+ /** A stable key of the link parameters in `params`, to apply each link once. */
85
+ function runListLinkKey(params) {
86
+ return RUN_LIST_LINK_PARAMS.map((name) => params.get(name) ?? "").join("|");
87
+ }
88
+ /** The UTC day [00:00, 24:00) of an ISO calendar date such as "2026-11-10". */
89
+ function utcDay(date) {
90
+ const from = /* @__PURE__ */ new Date(`${date}T00:00:00.000Z`);
91
+ if (!Number.isFinite(from.getTime())) return null;
92
+ return {
93
+ from,
94
+ to: /* @__PURE__ */ new Date(from.getTime() + 864e5 - 1)
95
+ };
96
+ }
97
+
98
+ export { utcDay as i, runListLinkKey as n, runListPath as r, runListFilterFromSearch as t };
@@ -1,3 +1,4 @@
1
1
 
2
- import { n as ManagedAiRequestScope, r as SettingsPage, t as ManagedAiPolicyAuthorityProvider } from "./ManagedAiPolicyAuthority-CGux_DaV.js";
2
+ import { t as SettingsPage } from "./SettingsPage-DMHQFj5-.js";
3
+ import { n as ManagedAiRequestScope, t as ManagedAiPolicyAuthorityProvider } from "./ManagedAiPolicyAuthority-DM3t3wNr.js";
3
4
  export { ManagedAiPolicyAuthorityProvider, type ManagedAiRequestScope, SettingsPage };
package/dist/settings.js CHANGED
@@ -1,4 +1,5 @@
1
1
  "use client";
2
- import { n as SettingsPage, t as ManagedAiPolicyAuthorityProvider } from "./ManagedAiPolicyAuthority-CKihmbJE.js";
2
+ import { t as SettingsPage } from "./SettingsPage-CgkRlCM5.js";
3
+ import { t as ManagedAiPolicyAuthorityProvider } from "./ManagedAiPolicyAuthority-BxwJ3ptd.js";
3
4
 
4
5
  export { ManagedAiPolicyAuthorityProvider, SettingsPage };
@@ -0,0 +1,196 @@
1
+ "use client";
2
+ import { _ as throwIfResultError, m as describeOperationError, n as getFluidGridsClient } from "./client-C9XSzSXr.js";
3
+ import { useCallback, useEffect, useRef, useState } from "react";
4
+ import { jsx, jsxs } from "react/jsx-runtime";
5
+ import { Label, Textarea } from "@burdenoff/fe-libs/ui";
6
+
7
+ // src/graphql/typed-calls.ts
8
+ async function readTyped(query, variables) {
9
+ const result = await getFluidGridsClient().query({
10
+ query,
11
+ variables,
12
+ fetchPolicy: "network-only"
13
+ });
14
+ throwIfResultError(result);
15
+ if (!result.data) throw new Error("The request returned no data");
16
+ return result.data;
17
+ }
18
+ async function writeTyped(mutation, variables) {
19
+ const result = await getFluidGridsClient().mutate({
20
+ mutation,
21
+ variables
22
+ });
23
+ throwIfResultError(result);
24
+ if (!result.data) throw new Error("The request returned no data");
25
+ return result.data;
26
+ }
27
+
28
+ // src/modules/run-control/hooks/useResource.ts
29
+ /**
30
+ * A read keyed by its arguments that sends nothing while `enabled` is false,
31
+ * keeps the last good answer, ignores answers to superseded requests, and
32
+ * re-reads every `intervalMs` while `live`. The Phase C views use it so that
33
+ * a gateway or service without the Phase C release only leaves a view empty.
34
+ */
35
+ function useResource(key, enabled, load, { live = false, intervalMs = 0 } = {}) {
36
+ const [data, setData] = useState(null);
37
+ const [loading, setLoading] = useState(false);
38
+ const [error, setError] = useState(null);
39
+ const request = useRef(0);
40
+ const loadRef = useRef(load);
41
+ loadRef.current = load;
42
+ const active = enabled && key !== null;
43
+ const refetch = useCallback(async () => {
44
+ if (!enabled || key === null) return;
45
+ const id = ++request.current;
46
+ setLoading(true);
47
+ try {
48
+ const next = await loadRef.current();
49
+ if (id !== request.current) return;
50
+ setData(next);
51
+ setError(null);
52
+ } catch (err) {
53
+ if (id !== request.current) return;
54
+ setError(describeOperationError(err));
55
+ } finally {
56
+ if (id === request.current) setLoading(false);
57
+ }
58
+ }, [enabled, key]);
59
+ useEffect(() => {
60
+ request.current += 1;
61
+ setData(null);
62
+ setError(null);
63
+ setLoading(false);
64
+ refetch();
65
+ }, [refetch]);
66
+ useEffect(() => {
67
+ if (!live || !active || intervalMs <= 0) return;
68
+ const timer = setInterval(() => void refetch(), intervalMs);
69
+ return () => clearInterval(timer);
70
+ }, [
71
+ live,
72
+ active,
73
+ intervalMs,
74
+ refetch
75
+ ]);
76
+ const set = useCallback((value) => {
77
+ request.current += 1;
78
+ setData(value);
79
+ setError(null);
80
+ setLoading(false);
81
+ }, []);
82
+ return {
83
+ data: active ? data : null,
84
+ loading,
85
+ error,
86
+ refetch,
87
+ set
88
+ };
89
+ }
90
+
91
+ // src/modules/run-control/utils/json-input.ts
92
+ function parseJsonInput(text) {
93
+ const trimmed = text.trim();
94
+ if (!trimmed) return {
95
+ ok: true,
96
+ value: void 0
97
+ };
98
+ try {
99
+ return {
100
+ ok: true,
101
+ value: JSON.parse(trimmed)
102
+ };
103
+ } catch (error) {
104
+ return {
105
+ ok: false,
106
+ error: error instanceof Error ? error.message : String(error)
107
+ };
108
+ }
109
+ }
110
+ /** Like {@link parseJsonInput}, but the value must be a JSON object. */
111
+ function parseJsonObjectInput(text) {
112
+ const parsed = parseJsonInput(text);
113
+ if (!parsed.ok) return parsed;
114
+ const value = parsed.value;
115
+ if (typeof value !== "object" || value === null || Array.isArray(value)) return {
116
+ ok: false,
117
+ error: "Enter a JSON object, for example {\"key\": 1}"
118
+ };
119
+ return {
120
+ ok: true,
121
+ value: Object.fromEntries(Object.entries(value))
122
+ };
123
+ }
124
+ /** Pretty JSON for display; `undefined` and `null` show as an em dash. */
125
+ function formatJson(value) {
126
+ if (value === void 0 || value === null) return "—";
127
+ if (typeof value === "string") return JSON.stringify(value);
128
+ return JSON.stringify(value, null, 2);
129
+ }
130
+ /** A fresh idempotency id for an update (kept while its dialog stays open). */
131
+ function newRunControlId(prefix) {
132
+ return `${prefix}-${typeof crypto !== "undefined" && typeof crypto.randomUUID === "function" ? crypto.randomUUID() : `${Date.now().toString(36)}-${Math.random().toString(36).slice(2, 10)}`}`;
133
+ }
134
+
135
+ // src/modules/run-control/components/shared.tsx
136
+ /** Dialog layers sit above the builder's canvas and the NDV (1100). */
137
+ const RUN_CONTROL_DIALOG_STYLE = { zIndex: 1100 };
138
+ function FieldError({ message, testId }) {
139
+ if (!message) return null;
140
+ return /* @__PURE__ */ jsx("p", {
141
+ role: "alert",
142
+ className: "text-sm text-[var(--color-status-error-text)]",
143
+ "data-testid": testId,
144
+ children: message
145
+ });
146
+ }
147
+ function JsonField({ id, label, value, onChange, placeholder, error, rows = 4, testId }) {
148
+ return /* @__PURE__ */ jsxs("div", {
149
+ className: "space-y-1.5",
150
+ children: [
151
+ /* @__PURE__ */ jsx(Label, {
152
+ htmlFor: id,
153
+ children: label
154
+ }),
155
+ /* @__PURE__ */ jsx(Textarea, {
156
+ id,
157
+ value,
158
+ onChange: (event) => onChange(event.target.value),
159
+ placeholder,
160
+ rows,
161
+ className: "font-mono text-xs",
162
+ "data-testid": testId
163
+ }),
164
+ /* @__PURE__ */ jsx(FieldError, { message: error })
165
+ ]
166
+ });
167
+ }
168
+ function JsonBlock({ value, testId }) {
169
+ return /* @__PURE__ */ jsx("pre", {
170
+ className: "max-h-64 overflow-auto whitespace-pre-wrap break-words rounded-md bg-background-primary p-3 font-mono text-xs text-text-primary",
171
+ "data-testid": testId,
172
+ children: formatJson(value)
173
+ });
174
+ }
175
+ function NativeSelect({ id, value, onChange, children, testId, disabled, ariaLabel }) {
176
+ return /* @__PURE__ */ jsx("select", {
177
+ id,
178
+ value,
179
+ disabled,
180
+ "aria-label": ariaLabel,
181
+ onChange: (event) => onChange(event.target.value),
182
+ className: "h-9 w-full rounded-md border border-border-primary bg-background-primary px-2 text-sm text-text-primary",
183
+ "data-testid": testId,
184
+ children
185
+ });
186
+ }
187
+ function StatusPill({ tone, children, testId }) {
188
+ const classes = tone === "neutral" ? "border-border-secondary bg-background-tertiary text-text-secondary" : `border-[var(--color-status-${tone}-border)] bg-[var(--color-status-${tone}-bg-subtle)] text-[var(--color-status-${tone}-text)]`;
189
+ return /* @__PURE__ */ jsx("span", {
190
+ className: `inline-flex items-center rounded-full border px-2 py-0.5 text-xs font-medium ${classes}`,
191
+ "data-testid": testId,
192
+ children
193
+ });
194
+ }
195
+
196
+ export { RUN_CONTROL_DIALOG_STYLE as a, parseJsonInput as c, readTyped as d, writeTyped as f, NativeSelect as i, parseJsonObjectInput as l, JsonBlock as n, StatusPill as o, JsonField as r, newRunControlId as s, FieldError as t, useResource as u };
@@ -1,3 +1,3 @@
1
1
 
2
- import { n as TemplatePreview, t as TemplatesPage } from "./TemplatesPage-D0qnXzHh.js";
2
+ import { r as TemplatePreview, t as TemplatesPage } from "./TemplatesPage-BG3H-6v6.js";
3
3
  export { TemplatePreview, TemplatesPage };
package/dist/templates.js CHANGED
@@ -1,4 +1,5 @@
1
1
  "use client";
2
- import { n as TemplatePreview, t as TemplatesPage } from "./TemplatesPage-CHVpWBuw.js";
2
+ import { t as TemplatesPage } from "./TemplatesPage-CsDNT54N.js";
3
+ import { t as TemplatePreview } from "./TemplatePreview-GthzCOSo.js";
3
4
 
4
5
  export { TemplatePreview, TemplatesPage };
@@ -0,0 +1,11 @@
1
+ "use client";
2
+ import "react";
3
+ import { jsx } from "react/jsx-runtime";
4
+ import { ThemeProvider } from "@burdenoff/fe-libs/shared/providers/shell";
5
+
6
+ // src/builder/components/theme-provider.tsx
7
+ function ThemeProvider$1({ children }) {
8
+ return /* @__PURE__ */ jsx(ThemeProvider, { children });
9
+ }
10
+
11
+ export { ThemeProvider$1 as t };
@@ -1,5 +1,6 @@
1
1
  "use client";
2
- import { $n as UnpinNodeDataDocument, Ar as WorkflowDefinitionsTagsDocument, Bn as TagFluidgridsEntityDocument, Bt as PinNodeDataDocument, Ci as WorkflowVersionsDocument, Dn as SearchFluidgridsTagsDocument, Dr as WorkflowDefinitionDocument, Dt as NodeEndpointConfigDocument, G as DeleteWorkflowDefinitionDocument, Hr as WorkflowPinnedDataDocument, Ht as PreviewScheduleDocument, Jn as TriggerWorkflowDocument, Jr as WorkflowRunDocument, Jt as RegisterNodeDocument, Kn as TerminateExecutionDocument, Mt as NodeSchemaIntrospectionDocument, Nt as NodeStatesDocument, O as CreateFluidgridsTagDocument, Oi as getFluidGridsClient, Ot as NodeEndpointConfigsDocument, Pt as NodeUsageStatusDocument, Qt as RemoveNodeFromWorkflowsDocument, R as CreateWorkflowVersionDocument, Rt as PauseExecutionDocument, Sn as RunLogsDocument, St as ImportWorkflowTemplateDocument, Ui as throwIfResultError, V as DeactivateWorkflowDefinitionDocument, a as ActiveExecutionsDocument, at as EventRegistrationsDocument, bn as RunLogAppendedDocument, cn as ResumeExecutionDocument, ct as ExecutionLogsDocument, er as UntagFluidgridsEntityDocument, et as DuplicateWorkflowDocument, f as AvailableFluidgridsTagsDocument, ii as WorkflowRunsDocument, j as CreateWorkflowDefinitionDocument, kr as WorkflowDefinitionsDocument, kt as NodeManifestDocument, ln as RetryNodeDocument, lt as ExecutionStatsDocument, ot as ExecuteStepDocument, pr as UsageTimeSeriesDocument, r as ActivateWorkflowDefinitionDocument, sn as RestoreWorkflowVersionDocument, sr as UpdateWorkflowDefinitionDocument, st as ExecutionDetailDocument, tn as ReplaceFluidgridsEntityTagsDocument, ut as ExecutionsListDocument, vn as RunFromNodeDocument, vt as FluidgridsEntityTagsDocument, xt as ImportWorkflowDocument, y as CancelExecutionDocument, yn as RunFromNodeEligibilityDocument, z as DashboardSummaryDocument } from "./node-endpoint-configs-DHFGA5MQ.js";
2
+ import { _ as throwIfResultError, n as getFluidGridsClient } from "./client-C9XSzSXr.js";
3
+ import { $ as DuplicateWorkflowDocument, $n as UntagFluidgridsEntityDocument, A as CreateWorkflowDefinitionDocument, B as DeactivateWorkflowDefinitionDocument, D as CreateFluidgridsTagDocument, Dt as NodeEndpointConfigsDocument, En as SearchFluidgridsTagsDocument, Er as WorkflowDefinitionDocument, Et as NodeEndpointConfigDocument, Gn as TerminateExecutionDocument, L as CreateWorkflowVersionDocument, Lt as PauseExecutionDocument, Mt as NodeStatesDocument, Nt as NodeUsageStatusDocument, Or as WorkflowDefinitionsDocument, Ot as NodeManifestDocument, Qn as UnpinNodeDataDocument, R as DashboardSummaryDocument, Si as WorkflowVersionsDocument, Vr as WorkflowPinnedDataDocument, Vt as PreviewScheduleDocument, W as DeleteWorkflowDefinitionDocument, Zt as RemoveNodeFromWorkflowsDocument, _n as RunFromNodeDocument, _t as FluidgridsEntityTagsDocument, at as ExecuteStepDocument, bt as ImportWorkflowDocument, cn as RetryNodeDocument, ct as ExecutionStatsDocument, d as AvailableFluidgridsTagsDocument, en as ReplaceFluidgridsEntityTagsDocument, fr as UsageTimeSeriesDocument, i as ActiveExecutionsDocument, it as EventRegistrationsDocument, jt as NodeSchemaIntrospectionDocument, kr as WorkflowDefinitionsTagsDocument, lt as ExecutionsListDocument, n as ActivateWorkflowDefinitionDocument, on as RestoreWorkflowVersionDocument, or as UpdateWorkflowDefinitionDocument, ot as ExecutionDetailDocument, qn as TriggerWorkflowDocument, qr as WorkflowRunDocument, qt as RegisterNodeDocument, ri as WorkflowRunsDocument, sn as ResumeExecutionDocument, st as ExecutionLogsDocument, v as CancelExecutionDocument, vn as RunFromNodeEligibilityDocument, xn as RunLogsDocument, xt as ImportWorkflowTemplateDocument, yn as RunLogAppendedDocument, zn as TagFluidgridsEntityDocument, zt as PinNodeDataDocument } from "./graphql-operation-types-kX-MMjgW.js";
3
4
  import { useCallback, useEffect, useState } from "react";
4
5
  import { useLazyQuery, useMutation, useQuery, useSubscription, useSuspenseQuery } from "@apollo/client/react";
5
6
  import { gql } from "@apollo/client";