@burdenoff/fluidgrids-fe-sdk 2026.1113.1 → 2026.1113.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (127) hide show
  1. package/dist/{AiStudioPage-D3MAk-bs.js → AiStudioPage-5KYZ8r8-.js} +464 -7
  2. package/dist/{ApprovalInboxPage-Bb8H9ruw.js → ApprovalInboxPage-BsJX4osU.js} +4 -3
  3. package/dist/{ConnectionFormDialog-Bg9_OdHX.js → ConnectionFormDialog-Dr1-CTan.js} +2 -1
  4. package/dist/CreateFluidgridsTagDocument-Dtp9KPLJ.js +1055 -0
  5. package/dist/{DataSinkDashboardPage-Dc2QuJbL.js → DataSinkDashboardPage-8ZDn85e2.js} +1 -1
  6. package/dist/{DataTablesPage-Cv4veaKK.js → DataTablesPage-BBvABuxE.js} +5 -4
  7. package/dist/{EntityTagPicker-D8ws706D.js → EntityTagPicker-BppBSEJk.js} +2 -2
  8. package/dist/{ExecutionDetailPage-CTVGE-d-.js → ExecutionDetailPage-BXDF2eoT.js} +1444 -18
  9. package/dist/ExecutionsListDocument-CzdLPpj5.js +1259 -0
  10. package/dist/{ExecutionsListPage-J0sJPuoM.js → ExecutionsListPage--4BthM8L.js} +285 -11
  11. package/dist/FailureTriagePanel-B5WCSRFo.js +1252 -0
  12. package/dist/{FluidGridsProvider-C4FVNz0n.js → FluidGridsProvider-Dc_Jhtch.js} +8666 -8734
  13. package/dist/{HistoryPage-B9XcTPrO.js → HistoryPage-BvFk2m1m.js} +4 -3
  14. package/dist/{InsightsPage-DFOltjyj.js → InsightsPage-Dwmb02F6.js} +2682 -5
  15. package/dist/{MissingNodesInstallModal-D8H-YNCJ.js → MissingNodesInstallModal-Cze674hp.js} +2 -2
  16. package/dist/{NodesPage-YQ-hP60x.js → NodesPage-C5Dq-ru-.js} +3 -2
  17. package/dist/{OpenTemplateAsCodeButton-hH26HQCk.js → OpenTemplateAsCodeButton-8MZHih6I.js} +2 -2
  18. package/dist/{PaidTemplateConfirm-DoKWMBtR.js → PaidTemplateConfirm-0G-gv29n.js} +1 -1
  19. package/dist/{PublishCustomNodeAction-5XXnSA3H.js → PublishCustomNodeAction-OOY35dUv.js} +1 -1
  20. package/dist/QuotaExhaustedDialog-wvu_-WJ-.js +55 -0
  21. package/dist/{RunnerStatusPill-Ctg4TJcP.js → RunnerStatusPill-Bh7mEsPh.js} +2 -1
  22. package/dist/{RunnersPage-CAt4YDhB.js → RunnersPage-DHeuUDil.js} +2 -2
  23. package/dist/{SettingsPage-DEKPCVVP.js → SettingsPage-CfjXiGpb.js} +694 -14
  24. package/dist/{TagFilterSelect-CwM2-DU6.js → TagFilterSelect-CAShgvbS.js} +1 -1
  25. package/dist/{TaskQueuesPage-Dhi6SIT4.js → TaskQueuesPage--Mmn36b-.js} +3 -3
  26. package/dist/{TemplateCard-DVSd_4zJ.js → TemplateCard-BA_9em22.js} +644 -352
  27. package/dist/{TemplateConfigurationModal-BKi1z7z7.js → TemplateConfigurationModal-BT3PaR0O.js} +4 -3
  28. package/dist/{TemplateDetailPanel-DK1gF7P5.js → TemplateDetailPanel-BxFNnlXm.js} +2 -1
  29. package/dist/{TemplatePreview-DuSX2Q7H.js → TemplatePreview-Bagja6WN.js} +7 -7
  30. package/dist/{TemplatesPage-CAWHh61l.js → TemplatesPage-CAajpJ5w.js} +711 -6
  31. package/dist/{VariablesPage-D7CoatWf.js → VariablesPage-CgUBKhAe.js} +3 -3
  32. package/dist/{VersionDiffDialog-DGwysiyE.js → VersionDiffDialog-D9W5Fm56.js} +233 -129
  33. package/dist/VersionLifecycleBar-DuphLOT0.js +131 -0
  34. package/dist/{WorkflowBuilder-DAeoQi5E.js → WorkflowBuilder-DMpSPElu.js} +16 -13
  35. package/dist/{WorkflowBuilder-BJgqDboZ.js → WorkflowBuilder-v8h8skwG.js} +5 -5
  36. package/dist/WorkflowDefinitionDocument-DZLbTPUZ.js +321 -0
  37. package/dist/WorkflowEditLeaseStatusDocument-Dp62med3.js +627 -0
  38. package/dist/WorkflowProposalCard-zCdUpCk8.js +249 -0
  39. package/dist/WorkflowProposalDocument-BdUbsrd0.js +620 -0
  40. package/dist/{WorkflowSearchRedirect-CMEvd_AR.js → WorkflowSearchRedirect-G78lINAE.js} +1 -1
  41. package/dist/{WorkflowShareDialog-BgHRsDP0.js → WorkflowShareDialog-B7VOgr4-.js} +304 -3
  42. package/dist/WorkflowVersionsDocument-CfPMloRW.js +3195 -0
  43. package/dist/{WorkflowsList-CcQPxWKL.js → WorkflowsList-CPYzfE4K.js} +11 -9
  44. package/dist/agent-form-D0uLvzx4.js +718 -0
  45. package/dist/{agentTools-DKpNKztf.js → agentTools-DTXUqtfu.js} +4 -4
  46. package/dist/api-BZVyX5d2.js +2286 -0
  47. package/dist/api-BqA-f-AD.js +8064 -0
  48. package/dist/app-BJUvugPM.js +3813 -0
  49. package/dist/assert-rules-CPNrO44K.js +318 -0
  50. package/dist/attach-node-helpers-CNsYtLOR.js +32 -0
  51. package/dist/badge-CXfPhoMH.js +26 -0
  52. package/dist/{canvasNoteTools-C_AN79m0.js → canvasNoteTools-DmfZwtnL.js} +3 -3
  53. package/dist/{channel-CZ70oI81.js → channel-DtF1n_ab.js} +1 -1
  54. package/dist/client-Ctl4jmY3.js +127 -0
  55. package/dist/code-editor-diagnostics-Zr0cIcx1.js +46 -0
  56. package/dist/{code-editor-field-Dt6KNWwN.js → code-editor-field-Cv907s3W.js} +2 -2
  57. package/dist/{codec-client-CJ95Rmqo.js → codec-client-CAYl6j46.js} +2 -1
  58. package/dist/conditionBuilder-D8aLGL1w.js +1134 -0
  59. package/dist/config-X97zrIvn.js +600 -0
  60. package/dist/{definition-canvas-Bshn_dSP.js → definition-canvas-DL25_6NH.js} +1 -1
  61. package/dist/{dialog-Cjb4lB4D.js → dialog-BVd152GS.js} +3 -14
  62. package/dist/durable-nodes-DXCCQYWD.js +81 -0
  63. package/dist/errors-xPZ-IbQd.js +142 -0
  64. package/dist/executions.js +2 -2
  65. package/dist/{flow-builder-D3Hl2AFk.js → flow-builder-Dv5fWJ6F.js} +9301 -8189
  66. package/dist/{node-registry-refresh-Dy0uRg9f.js → global-client-DP_Wxe5t.js} +2 -27
  67. package/dist/global-operations-7pvXw_j9.js +145 -0
  68. package/dist/history.js +1 -1
  69. package/dist/{index-CWcP-tG1.d.ts → index-DtMUtXNq.d.ts} +247 -247
  70. package/dist/index.d.ts +1 -1
  71. package/dist/index.js +4403 -46
  72. package/dist/input-ChT6Q-Pr.js +17 -0
  73. package/dist/logs-panel-DtG93ocy.js +342 -0
  74. package/dist/mapping-colors-BIX_YeCQ.js +48 -0
  75. package/dist/{node-detail-view-bVLeYarT.js → node-detail-view-BKI_2kM6.js} +12 -11
  76. package/dist/{node-editor-tab-body-JHHVtQgR.js → node-editor-tab-body-Cc1MWEFR.js} +3 -3
  77. package/dist/{node-operation-selection-DAbS6jSY.js → node-operation-selection-Czeeb2D4.js} +2 -139
  78. package/dist/node-registry-refresh-s3okf83X.js +27 -0
  79. package/dist/nodes.js +1 -1
  80. package/dist/notesKey-5EaREBGA.js +12 -0
  81. package/dist/observability.d.ts +1 -1
  82. package/dist/observability.js +2 -2
  83. package/dist/{popover-Xx3gN7vg.js → popover-DDv7J1Kl.js} +717 -6
  84. package/dist/{quick-config-panel-BvVQXuIL.js → quick-config-panel-BPCRfqWI.js} +4 -4
  85. package/dist/read-only-context-Dt9N9SIG.js +18 -0
  86. package/dist/{schedule-panel-DCb40TPN.js → schedule-panel-C1KwfLCE.js} +14 -12
  87. package/dist/settings.js +1 -1
  88. package/dist/{shared-CMfn30xT.js → shared-Ctl9ZHo1.js} +2 -1
  89. package/dist/{sidebar-node-editor-DxCWFZG2.js → sidebar-node-editor-d9Rlq5pU.js} +4 -4
  90. package/dist/sticky-notes-23j-wL6Q.js +96 -0
  91. package/dist/template-code-dqRunGOv.js +184 -0
  92. package/dist/template-preview-C01KV277.js +29 -0
  93. package/dist/templates.js +2 -2
  94. package/dist/token-refresh-link-BjN7H4qA.js +291 -0
  95. package/dist/useAgentDefinitions-ZKX2N9aP.js +3101 -0
  96. package/dist/useConnections-BlB0gbOB.js +931 -0
  97. package/dist/useDurableParity-BgLH_SCF.js +2088 -0
  98. package/dist/{useEntityTags-Db4Pc8_M.js → useEntityTags-4iW6UTly.js} +227 -3
  99. package/dist/{useExecutions-DOpG1pUQ.js → useExecutions-Bm7q_UwN.js} +6 -3
  100. package/dist/useGlobalStoreClient-DMTrywdX.js +24 -0
  101. package/dist/{useHumanRequests-ZiR0sSzS.js → useHumanRequests-DwG2tQ3f.js} +2 -1
  102. package/dist/{useObservability-rQmwhoZZ.js → useObservability-DPATdbw7.js} +4 -2
  103. package/dist/{useRunHistory-COn6dl7l.js → useRunHistory-CGfjCsJ3.js} +1122 -4
  104. package/dist/{useVariables-2ddyJX4a.js → useVariables-DFdZofLQ.js} +2 -1
  105. package/dist/{useWorkflowCodeExport-ZoUJKRSK.js → useWorkflowCodeExport-D_mCuhKP.js} +289 -4
  106. package/dist/useWorkflowOrganization-r5FWNBs6.js +1690 -0
  107. package/dist/useWorkflowProposal-Bh2_qjmM.js +7478 -0
  108. package/dist/{useWorkflows-jOW60YmD.js → useWorkflows-aqVD7kGa.js} +694 -4
  109. package/dist/workflow-builder.js +5 -5
  110. package/dist/{workflow-code-transfer-l9wO34S0.js → workflow-code-transfer-5C0HUzae.js} +1 -53
  111. package/dist/workflow-host.js +4 -2
  112. package/dist/workflow-pages.d.ts +1 -1
  113. package/dist/workflow-pages.js +19 -19
  114. package/dist/workflow-preview.js +3 -2
  115. package/dist/workflows-list.js +1 -1
  116. package/package.json +1 -1
  117. package/dist/FailureTriagePanel-BbYFYeV_.js +0 -311
  118. package/dist/WorkflowProposalCard-DGMdZC4R.js +0 -1432
  119. package/dist/agent-form-Bfvm32j1.js +0 -83
  120. package/dist/api-DQtHXbIg.js +0 -224
  121. package/dist/api-MeAm6g7E.js +0 -55
  122. package/dist/client-C9XSzSXr.js +0 -1147
  123. package/dist/graphql-operation-types-C9qbvRa8.js +0 -53122
  124. package/dist/useAgentDefinitions-_hgNCK1A.js +0 -550
  125. package/dist/useConnections-Cs7LCWEM.js +0 -401
  126. package/dist/useDurableParity-CcLeCDfv.js +0 -504
  127. package/dist/useWorkflowOrganization-QxVePSkk.js +0 -282
@@ -1,8 +1,8 @@
1
1
  "use client";
2
- import { n as WorkflowBuilderCore, t as WorkflowBuilder } from "./WorkflowBuilder-BJgqDboZ.js";
3
- import { t as WorkflowBuilder$1 } from "./WorkflowBuilder-DAeoQi5E.js";
4
- import { H as useFlowStore } from "./node-operation-selection-DAbS6jSY.js";
5
- import { m as refetchStoreNodes } from "./FluidGridsProvider-C4FVNz0n.js";
6
- import { t as WorkflowSearchRedirect } from "./WorkflowSearchRedirect-CMEvd_AR.js";
2
+ import { n as WorkflowBuilderCore, t as WorkflowBuilder } from "./WorkflowBuilder-v8h8skwG.js";
3
+ import { t as WorkflowBuilder$1 } from "./WorkflowBuilder-DMpSPElu.js";
4
+ import { M as useFlowStore } from "./node-operation-selection-Czeeb2D4.js";
5
+ import { m as refetchStoreNodes } from "./FluidGridsProvider-Dc_Jhtch.js";
6
+ import { t as WorkflowSearchRedirect } from "./WorkflowSearchRedirect-G78lINAE.js";
7
7
 
8
8
  export { WorkflowBuilder, WorkflowBuilderCore, WorkflowBuilder$1 as WorkflowBuilderPage, WorkflowSearchRedirect, refetchStoreNodes, useFlowStore };
@@ -1,57 +1,5 @@
1
1
  "use client";
2
- import { yn as useFluidGridsAnalytics } from "./FluidGridsProvider-C4FVNz0n.js";
3
- import { r as useTr } from "./TranslationBridge-Da-TPgQm.js";
4
- import { i as WORKFLOWS_QUOTA_NAME } from "./quota-Cdt8yz7N.js";
5
- import { c as emitWorkflowLimitHit, o as emitUpgradeClicked } from "./fluidgridsEvents-Dm5CaHtr.js";
6
2
  import { pf as FidelityLevel, rI as WorkflowExportFormat } from "./graphql-types-v6CTGwA0.js";
7
- import { useEffect, useRef } from "react";
8
- import { jsx, jsxs } from "react/jsx-runtime";
9
- import { AlertDialog, AlertDialogAction, AlertDialogCancel, AlertDialogContent, AlertDialogDescription, AlertDialogFooter, AlertDialogHeader, AlertDialogTitle } from "@burdenoff/fe-libs/ui";
10
-
11
- // src/components/shared/QuotaExhaustedDialog.tsx
12
- /**
13
- * Alert shown when a workflow-creating action (save/duplicate/import) is
14
- * rejected with `QUOTA_EXHAUSTED` for `fluidgrids.workflows.count`. Mirrors
15
- * the "Folder Limit Reached" dialog in microfe-files' BrowserPage.tsx, built
16
- * on the same `AlertDialog` primitives already used elsewhere in this SDK
17
- * (see card-workflow.tsx's delete-confirmation dialog).
18
- */
19
- function QuotaExhaustedDialog({ open, onOpenChange, onUpgrade, title, description, surface, limitHit = true }) {
20
- const tr = useTr();
21
- const { bus, workspaceId } = useFluidGridsAnalytics();
22
- const wasOpen = useRef(false);
23
- useEffect(() => {
24
- if (open && !wasOpen.current && limitHit) emitWorkflowLimitHit(bus, {
25
- workspaceId,
26
- surface
27
- });
28
- wasOpen.current = open;
29
- }, [
30
- open,
31
- bus,
32
- workspaceId,
33
- surface,
34
- limitHit
35
- ]);
36
- const handleUpgrade = () => {
37
- emitUpgradeClicked(bus, {
38
- workspaceId,
39
- surface: "quota-dialog",
40
- quotaKey: WORKFLOWS_QUOTA_NAME
41
- });
42
- onUpgrade();
43
- };
44
- const resolvedTitle = title ?? tr("fluidgrids.components.quotaExhaustedDialog.title", "Workflow Limit Reached");
45
- const resolvedDescription = description ?? tr("fluidgrids.components.quotaExhaustedDialog.description", "You've reached the workflow limit for your plan. Upgrade your plan to create more workflows.");
46
- return /* @__PURE__ */ jsx(AlertDialog, {
47
- open,
48
- onOpenChange,
49
- children: /* @__PURE__ */ jsxs(AlertDialogContent, { children: [/* @__PURE__ */ jsxs(AlertDialogHeader, { children: [/* @__PURE__ */ jsx(AlertDialogTitle, { children: resolvedTitle }), /* @__PURE__ */ jsx(AlertDialogDescription, { children: resolvedDescription })] }), /* @__PURE__ */ jsxs(AlertDialogFooter, { children: [/* @__PURE__ */ jsx(AlertDialogCancel, { children: tr("fluidgrids.components.quotaExhaustedDialog.dismiss", "Dismiss") }), /* @__PURE__ */ jsx(AlertDialogAction, {
50
- onClick: handleUpgrade,
51
- children: tr("fluidgrids.components.quotaExhaustedDialog.viewPlans", "View plans")
52
- })] })] })
53
- });
54
- }
55
3
 
56
4
  // src/utils/workflow-code-transfer.ts
57
5
  const CODE_EXPORT_FORMATS = [
@@ -372,4 +320,4 @@ function lineOfNode(source, nodeId) {
372
320
  return null;
373
321
  }
374
322
 
375
- export { QuotaExhaustedDialog as S, sortFidelityItems as _, assertImportByteSize as a, utf8Length as b, fileBaseName as c, isLosslessReport as d, isLossyFidelityItem as f, readProjectArchive as g, primaryImportModule as h, MAX_IMPORT_SOURCE_BYTES as i, importAcceptAttribute as l, orderedExportFiles as m, ImportSourceError as n, buildExportDownload as o, lineOfNode as p, MAX_IMPORT_ARCHIVE_BYTES as r, checkTypeScriptImport as s, CODE_EXPORT_FORMATS as t, importFileKind as u, typeScriptImportSource as v, workflowNameFromFile as x, typeScriptModuleFile as y };
323
+ export { sortFidelityItems as _, assertImportByteSize as a, utf8Length as b, fileBaseName as c, isLosslessReport as d, isLossyFidelityItem as f, readProjectArchive as g, primaryImportModule as h, MAX_IMPORT_SOURCE_BYTES as i, importAcceptAttribute as l, orderedExportFiles as m, ImportSourceError as n, buildExportDownload as o, lineOfNode as p, MAX_IMPORT_ARCHIVE_BYTES as r, checkTypeScriptImport as s, CODE_EXPORT_FORMATS as t, importFileKind as u, typeScriptImportSource as v, workflowNameFromFile as x, typeScriptModuleFile as y };
@@ -1,6 +1,8 @@
1
1
  "use client";
2
- import { C as resetFluidGridsConfig, T as setFluidGridsConfig, a as resetFluidGridsClient, o as setFluidGridsClient, w as resetFluidGridsExecutionState } from "./client-C9XSzSXr.js";
3
- import { n as refreshNodeRegistry, o as resetGlobalStoreClient, s as setGlobalStoreClient } from "./node-registry-refresh-Dy0uRg9f.js";
2
+ import { c as setFluidGridsConfig, o as resetFluidGridsConfig, s as resetFluidGridsExecutionState } from "./config-X97zrIvn.js";
3
+ import { a as resetFluidGridsClient, o as setFluidGridsClient } from "./client-Ctl4jmY3.js";
4
+ import { a as setGlobalStoreClient, i as resetGlobalStoreClient } from "./global-client-DP_Wxe5t.js";
5
+ import { n as refreshNodeRegistry } from "./node-registry-refresh-s3okf83X.js";
4
6
  import { n as FluidGridsTranslationProvider } from "./TranslationBridge-Da-TPgQm.js";
5
7
  import { r as FluidGridsPermissionsProvider, t as FLUIDGRIDS_PERMISSIONS } from "./constants-dcxg6zG6.js";
6
8
  import { t as ManagedAiPolicyAuthorityProvider } from "./ManagedAiPolicyAuthority-BxwJ3ptd.js";
@@ -2,7 +2,7 @@
2
2
  import { n as WorkflowsList_d_exports } from "./WorkflowsList-CcNDQge5.js";
3
3
  import { a as WorkflowSearchRedirect_d_exports, o as WorkflowBuilder } from "./index-f_Nl7Ons.js";
4
4
  import { i as TemplatePreview_d_exports, n as TemplatesPage_d_exports } from "./TemplatesPage-BG3H-6v6.js";
5
- import { DFa as InsightsPage_d_exports, EFa as InsightsPageProps, Pi as ApprovalInboxPage_d_exports, Wi as TaskQueuesPage_d_exports, YFa as AiStudioPage_d_exports, Yi as RunnersPage_d_exports, di as DataTablesPage_d_exports, kFa as DataSinkDashboardPage_d_exports, ya as VariablesPage_d_exports } from "./index-CWcP-tG1.js";
5
+ import { DFa as InsightsPage_d_exports, EFa as InsightsPageProps, Pi as ApprovalInboxPage_d_exports, Wi as TaskQueuesPage_d_exports, YFa as AiStudioPage_d_exports, Yi as RunnersPage_d_exports, di as DataTablesPage_d_exports, kFa as DataSinkDashboardPage_d_exports, ya as VariablesPage_d_exports } from "./index-DtMUtXNq.js";
6
6
  import { i as ExecutionsListPage_d_exports, n as ExecutionDetailPage_d_exports } from "./ExecutionDetailPage-DvQ667OE.js";
7
7
  import { n as HistoryPage_d_exports } from "./HistoryPage-BLoRpJ1R.js";
8
8
  import { n as NodesPage_d_exports } from "./NodesPage-DEbnz9iU.js";
@@ -54,25 +54,25 @@ function createWorkflowPages(importers) {
54
54
  * loader, so it costs a host's first load about a kilobyte.
55
55
  */
56
56
  const pages = createWorkflowPages({
57
- WorkflowsList: () => import("./WorkflowsList-CcQPxWKL.js").then((n) => n.n),
58
- WorkflowBuilderPage: () => import("./WorkflowBuilder-DAeoQi5E.js").then((n) => n.n).then((m) => ({ WorkflowBuilderPage: m.WorkflowBuilder })),
59
- WorkflowSearchRedirect: () => import("./WorkflowSearchRedirect-CMEvd_AR.js").then((n) => n.n),
60
- TemplatePreview: () => import("./TemplatePreview-DuSX2Q7H.js").then((n) => n.n),
61
- AiStudioPage: () => import("./AiStudioPage-D3MAk-bs.js").then((n) => n.n),
62
- ExecutionsListPage: () => import("./ExecutionsListPage-J0sJPuoM.js").then((n) => n.n),
63
- ExecutionDetailPage: () => import("./ExecutionDetailPage-CTVGE-d-.js").then((n) => n.n),
64
- HistoryPage: () => import("./HistoryPage-B9XcTPrO.js").then((n) => n.n),
65
- TemplatesPage: () => import("./TemplatesPage-CAWHh61l.js").then((n) => n.n),
66
- NodesPage: () => import("./NodesPage-YQ-hP60x.js").then((n) => n.n),
67
- SettingsPage: () => import("./SettingsPage-DEKPCVVP.js").then((n) => n.n),
68
- InsightsPage: () => import("./InsightsPage-DFOltjyj.js").then((n) => n.r),
69
- ErrorAnalyticsPage: () => import("./InsightsPage-DFOltjyj.js").then((n) => n.r),
70
- DataSinkDashboardPage: () => import("./DataSinkDashboardPage-Dc2QuJbL.js").then((n) => n.n),
71
- VariablesPage: () => import("./VariablesPage-D7CoatWf.js").then((n) => n.n),
72
- RunnersPage: () => import("./RunnersPage-CAt4YDhB.js").then((n) => n.n),
73
- TaskQueuesPage: () => import("./TaskQueuesPage-Dhi6SIT4.js").then((n) => n.r),
74
- ApprovalInboxPage: () => import("./ApprovalInboxPage-Bb8H9ruw.js").then((n) => n.n),
75
- DataTablesPage: () => import("./DataTablesPage-Cv4veaKK.js").then((n) => n.n)
57
+ WorkflowsList: () => import("./WorkflowsList-CPYzfE4K.js").then((n) => n.n),
58
+ WorkflowBuilderPage: () => import("./WorkflowBuilder-DMpSPElu.js").then((n) => n.n).then((m) => ({ WorkflowBuilderPage: m.WorkflowBuilder })),
59
+ WorkflowSearchRedirect: () => import("./WorkflowSearchRedirect-G78lINAE.js").then((n) => n.n),
60
+ TemplatePreview: () => import("./TemplatePreview-Bagja6WN.js").then((n) => n.n),
61
+ AiStudioPage: () => import("./AiStudioPage-5KYZ8r8-.js").then((n) => n.n),
62
+ ExecutionsListPage: () => import("./ExecutionsListPage--4BthM8L.js").then((n) => n.n),
63
+ ExecutionDetailPage: () => import("./ExecutionDetailPage-BXDF2eoT.js").then((n) => n.n),
64
+ HistoryPage: () => import("./HistoryPage-BvFk2m1m.js").then((n) => n.n),
65
+ TemplatesPage: () => import("./TemplatesPage-CAajpJ5w.js").then((n) => n.n),
66
+ NodesPage: () => import("./NodesPage-C5Dq-ru-.js").then((n) => n.n),
67
+ SettingsPage: () => import("./SettingsPage-CfjXiGpb.js").then((n) => n.n),
68
+ InsightsPage: () => import("./InsightsPage-Dwmb02F6.js").then((n) => n.r),
69
+ ErrorAnalyticsPage: () => import("./InsightsPage-Dwmb02F6.js").then((n) => n.r),
70
+ DataSinkDashboardPage: () => import("./DataSinkDashboardPage-8ZDn85e2.js").then((n) => n.n),
71
+ VariablesPage: () => import("./VariablesPage-CgUBKhAe.js").then((n) => n.n),
72
+ RunnersPage: () => import("./RunnersPage-DHeuUDil.js").then((n) => n.n),
73
+ TaskQueuesPage: () => import("./TaskQueuesPage--Mmn36b-.js").then((n) => n.r),
74
+ ApprovalInboxPage: () => import("./ApprovalInboxPage-BsJX4osU.js").then((n) => n.n),
75
+ DataTablesPage: () => import("./DataTablesPage-BBvABuxE.js").then((n) => n.n)
76
76
  });
77
77
  /** Every workflow page this entry exports. */
78
78
  const WORKFLOW_PAGE_NAMES = pages.names;
@@ -1,6 +1,7 @@
1
1
  "use client";
2
- import { t as canvasFromDefinition } from "./definition-canvas-Bshn_dSP.js";
3
- import { D as NodeCard, E as resolveOutputHandles, O as NodeCardBody, S as landingSourceHandle, T as resolveInputHandles, V as STICKY_NOTE_TYPE, W as isNodeTrigger, _ as LogicNodeCard, i as WAIT_FOR_SIGNAL_NODE_TYPE, k as NodeCardHeader, m as readSignalName, r as CODE_WORKFLOW_NODE_TYPE, t as resolveOperationName, v as InputHandles, w as outputHandlesSpacerHeight, y as OutputHandles } from "./node-operation-selection-DAbS6jSY.js";
2
+ import { t as canvasFromDefinition } from "./definition-canvas-DL25_6NH.js";
3
+ import { C as outputHandlesSpacerHeight, D as NodeCardBody, E as NodeCard, O as NodeCardHeader, P as isNodeTrigger, T as resolveOutputHandles, _ as InputHandles, g as LogicNodeCard, i as WAIT_FOR_SIGNAL_NODE_TYPE, m as readSignalName, r as CODE_WORKFLOW_NODE_TYPE, t as resolveOperationName, v as OutputHandles, w as resolveInputHandles, x as landingSourceHandle } from "./node-operation-selection-Czeeb2D4.js";
4
+ import { l as STICKY_NOTE_TYPE } from "./sticky-notes-23j-wL6Q.js";
4
5
  import { r as useTr } from "./TranslationBridge-Da-TPgQm.js";
5
6
  import { memo, useCallback, useEffect, useMemo, useRef, useState, useSyncExternalStore } from "react";
6
7
  import { Background, MarkerType, ReactFlow, ReactFlowProvider, getBezierPath, useReactFlow, useStore } from "@xyflow/react";
@@ -1,5 +1,5 @@
1
1
  "use client";
2
- import { t as WorkflowsList } from "./WorkflowsList-CcQPxWKL.js";
2
+ import { t as WorkflowsList } from "./WorkflowsList-CPYzfE4K.js";
3
3
  import { n as ACTION_PARAM_VALUES, t as ACTION_PARAM } from "./useActionParam-B0ebTZmg.js";
4
4
 
5
5
  export { ACTION_PARAM, ACTION_PARAM_VALUES, WorkflowsList };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@burdenoff/fluidgrids-fe-sdk",
3
- "version": "2026.1113.1",
3
+ "version": "2026.1113.2",
4
4
  "description": "FluidGrids Workflow Builder SDK - Embeddable visual workflow automation",
5
5
  "type": "module",
6
6
  "imports": {
@@ -1,311 +0,0 @@
1
- "use client";
2
- import { r as useTr } from "./TranslationBridge-Da-TPgQm.js";
3
- import { _ as throwIfResultError, n as getFluidGridsClient } from "./client-C9XSzSXr.js";
4
- import { Mn as SetRunFailureTriageEnabledDocument, _t as FgTriageFailedRunsDocument, bn as RunFailureTriageSettingsDocument, tt as DismissRunFailureClusterDocument, yn as RunFailureClustersDocument } from "./graphql-operation-types-C9qbvRa8.js";
5
- import { qD as RunFailureClusterStatus } from "./graphql-types-v6CTGwA0.js";
6
- import { useCallback, useEffect, useState } from "react";
7
- import { Icon } from "@iconify/react";
8
- import { jsx, jsxs } from "react/jsx-runtime";
9
- import { Button } from "@burdenoff/fe-libs/ui";
10
-
11
- // src/modules/observability/hooks/useFailureTriage.ts
12
- /**
13
- * Failure triage (BOFF-3698): the opt-in, the caller's failure clusters and a
14
- * manual triage pass. Clusters are built from the caller's own runs only.
15
- */
16
- /** Clusters that still need a decision. */
17
- const OPEN_STATUSES = ["OPEN", "PROPOSED"];
18
- function messageOf(error) {
19
- return error instanceof Error ? error.message : String(error);
20
- }
21
- /** The caller's clusters, optionally only those that include one run. */
22
- async function fetchRunFailureClusters(variables) {
23
- return throwIfResultError(await getFluidGridsClient().query({
24
- query: RunFailureClustersDocument,
25
- variables,
26
- fetchPolicy: "network-only"
27
- })).data?.runFailureClusters.items ?? [];
28
- }
29
- async function dismissRunFailureCluster(id) {
30
- throwIfResultError(await getFluidGridsClient().mutate({
31
- mutation: DismissRunFailureClusterDocument,
32
- variables: { id }
33
- }));
34
- }
35
- function useFailureTriage() {
36
- const [settings, setSettings] = useState(null);
37
- const [clusters, setClusters] = useState([]);
38
- const [loading, setLoading] = useState(true);
39
- const [busy, setBusy] = useState(false);
40
- const [error, setError] = useState(null);
41
- const [lastRun, setLastRun] = useState(null);
42
- const refetch = useCallback(async () => {
43
- setLoading(true);
44
- setError(null);
45
- try {
46
- const [settingsResult, items] = await Promise.all([getFluidGridsClient().query({
47
- query: RunFailureTriageSettingsDocument,
48
- fetchPolicy: "network-only"
49
- }), fetchRunFailureClusters({
50
- filter: { status: OPEN_STATUSES },
51
- limit: 20
52
- })]);
53
- setSettings(throwIfResultError(settingsResult).data?.runFailureTriageSettings ?? null);
54
- setClusters(items);
55
- } catch (loadError) {
56
- setError(messageOf(loadError));
57
- } finally {
58
- setLoading(false);
59
- }
60
- }, []);
61
- useEffect(() => {
62
- refetch();
63
- }, [refetch]);
64
- return {
65
- settings,
66
- clusters,
67
- loading,
68
- busy,
69
- error,
70
- lastRun,
71
- refetch,
72
- setEnabled: useCallback(async (enabled) => {
73
- setBusy(true);
74
- setError(null);
75
- try {
76
- const result = throwIfResultError(await getFluidGridsClient().mutate({
77
- mutation: SetRunFailureTriageEnabledDocument,
78
- variables: { enabled }
79
- }));
80
- setSettings(result.data?.setRunFailureTriageEnabled ?? null);
81
- } catch (toggleError) {
82
- setError(messageOf(toggleError));
83
- } finally {
84
- setBusy(false);
85
- }
86
- }, []),
87
- runNow: useCallback(async () => {
88
- setBusy(true);
89
- setError(null);
90
- try {
91
- const result = throwIfResultError(await getFluidGridsClient().mutate({
92
- mutation: FgTriageFailedRunsDocument,
93
- variables: {}
94
- }));
95
- setLastRun(result.data?.fgTriageFailedRuns ?? null);
96
- setClusters(await fetchRunFailureClusters({
97
- filter: { status: OPEN_STATUSES },
98
- limit: 20
99
- }));
100
- } catch (runError) {
101
- setError(messageOf(runError));
102
- } finally {
103
- setBusy(false);
104
- }
105
- }, []),
106
- dismiss: useCallback(async (id) => {
107
- setError(null);
108
- try {
109
- await dismissRunFailureCluster(id);
110
- setClusters((current) => current.filter((cluster) => cluster.id !== id));
111
- } catch (dismissError) {
112
- setError(messageOf(dismissError));
113
- }
114
- }, [])
115
- };
116
- }
117
-
118
- // src/modules/observability/components/FailureTriagePanel.tsx
119
- /**
120
- * Insights: Failure triage (BOFF-3698).
121
- *
122
- * Failure triage is an opt-in, hourly FluidGrids workflow that groups this
123
- * workspace's failed production runs into clusters, leaves transient failures
124
- * to the retry, prepares an AI fix proposal for each new cluster and tells the
125
- * person the runs ran as. It only proposes: nothing changes until someone
126
- * applies a proposal on the run page. This panel turns it on and off and lists
127
- * the caller's open clusters.
128
- */
129
- const BUCKET_LABELS = {
130
- EXPIRED_CONNECTION: {
131
- label: "Expired connection",
132
- icon: "mdi:key-alert-outline"
133
- },
134
- CONNECTOR_CONTRACT_CHANGE: {
135
- label: "Connector change",
136
- icon: "mdi:swap-horizontal"
137
- },
138
- BAD_NODE_CONFIG: {
139
- label: "Node configuration",
140
- icon: "mdi:cog-outline"
141
- },
142
- UPSTREAM_TRANSIENT: {
143
- label: "Transient",
144
- icon: "mdi:weather-cloudy-alert"
145
- },
146
- UNKNOWN: {
147
- label: "Unclassified",
148
- icon: "mdi:help-circle-outline"
149
- }
150
- };
151
- function ClusterRow({ cluster, canRetry, onOpenRun, onRetry, onDismiss }) {
152
- const tr = useTr();
153
- const bucket = BUCKET_LABELS[String(cluster.bucket)] ?? {
154
- label: String(cluster.bucket),
155
- icon: "mdi:alert-outline"
156
- };
157
- return /* @__PURE__ */ jsx("li", {
158
- className: "rounded-lg border border-border-secondary bg-background-primary p-3",
159
- "data-testid": "failure-cluster",
160
- "data-bucket": String(cluster.bucket),
161
- children: /* @__PURE__ */ jsxs("div", {
162
- className: "flex flex-col gap-2 sm:flex-row sm:items-start sm:justify-between",
163
- children: [/* @__PURE__ */ jsxs("div", {
164
- className: "min-w-0",
165
- children: [
166
- /* @__PURE__ */ jsxs("div", {
167
- className: "flex flex-wrap items-center gap-2 text-sm",
168
- children: [
169
- /* @__PURE__ */ jsxs("span", {
170
- className: "inline-flex items-center gap-1 rounded-full bg-background-secondary px-2 py-0.5 text-xs text-text-secondary",
171
- children: [/* @__PURE__ */ jsx(Icon, {
172
- icon: bucket.icon,
173
- width: 14
174
- }), tr(`fluidgrids.triage.bucket.${String(cluster.bucket)}`, bucket.label)]
175
- }),
176
- /* @__PURE__ */ jsx("span", {
177
- className: "font-medium text-text-primary",
178
- children: cluster.workflowName || cluster.workflowKey
179
- }),
180
- /* @__PURE__ */ jsx("span", {
181
- className: "text-text-secondary",
182
- children: tr("fluidgrids.triage.atNode", "at {{node}}", { node: cluster.nodeId })
183
- })
184
- ]
185
- }),
186
- /* @__PURE__ */ jsx("p", {
187
- className: "mt-1 break-words text-sm text-text-secondary",
188
- children: cluster.signature
189
- }),
190
- /* @__PURE__ */ jsxs("p", {
191
- className: "mt-1 text-xs text-text-secondary",
192
- children: [tr("fluidgrids.triage.runCount", "{{count}} failed run(s), last {{when}}", {
193
- count: cluster.runCount,
194
- when: new Date(String(cluster.lastSeenAt)).toLocaleString()
195
- }), cluster.proposalId ? ` · ${tr("fluidgrids.triage.proposalReady", "Fix proposal ready to review")}` : ""]
196
- }),
197
- /* @__PURE__ */ jsx("p", {
198
- className: "mt-1 text-xs text-text-primary",
199
- children: cluster.advice
200
- })
201
- ]
202
- }), /* @__PURE__ */ jsxs("div", {
203
- className: "flex shrink-0 flex-wrap gap-2",
204
- children: [
205
- /* @__PURE__ */ jsx(Button, {
206
- size: "sm",
207
- variant: "outline",
208
- onClick: () => onOpenRun(cluster.lastRunId),
209
- "data-testid": "failure-cluster-open",
210
- children: cluster.proposalId ? tr("fluidgrids.triage.reviewFix", "Review fix") : tr("fluidgrids.triage.openRun", "Open run")
211
- }),
212
- canRetry && /* @__PURE__ */ jsx(Button, {
213
- size: "sm",
214
- variant: "outline",
215
- onClick: () => onRetry([cluster.lastRunId]),
216
- children: tr("fluidgrids.triage.retry", "Retry")
217
- }),
218
- /* @__PURE__ */ jsx(Button, {
219
- size: "sm",
220
- variant: "ghost",
221
- onClick: () => onDismiss(cluster.id),
222
- "data-testid": "failure-cluster-dismiss",
223
- children: tr("fluidgrids.triage.dismiss", "Dismiss")
224
- })
225
- ]
226
- })]
227
- })
228
- });
229
- }
230
- function FailureTriagePanel({ canManage, canRetry, onOpenRun, onRetry }) {
231
- const tr = useTr();
232
- const triage = useFailureTriage();
233
- const enabled = triage.settings?.enabled ?? false;
234
- return /* @__PURE__ */ jsxs("section", {
235
- className: "mb-6 rounded-xl border border-border-secondary bg-background-secondary p-4",
236
- "data-testid": "failure-triage-panel",
237
- children: [
238
- /* @__PURE__ */ jsxs("div", {
239
- className: "flex flex-col gap-3 sm:flex-row sm:items-start sm:justify-between",
240
- children: [/* @__PURE__ */ jsxs("div", { children: [
241
- /* @__PURE__ */ jsxs("h2", {
242
- className: "flex items-center gap-2 text-base font-semibold text-text-primary",
243
- children: [/* @__PURE__ */ jsx(Icon, {
244
- icon: "mdi:stethoscope",
245
- width: 18
246
- }), tr("fluidgrids.triage.title", "Failure triage")]
247
- }),
248
- /* @__PURE__ */ jsx("p", {
249
- className: "mt-1 max-w-2xl text-sm text-text-secondary",
250
- children: tr("fluidgrids.triage.description", "Every hour, groups failed production runs, leaves temporary failures to the retry and prepares a fix proposal for you to review. It never changes a workflow on its own.")
251
- }),
252
- /* @__PURE__ */ jsxs("p", {
253
- className: "mt-1 text-xs text-text-secondary",
254
- "data-testid": "failure-triage-status",
255
- children: [
256
- enabled ? tr("fluidgrids.triage.on", "On") : tr("fluidgrids.triage.off", "Off"),
257
- triage.settings?.lastTickAt ? ` · ${tr("fluidgrids.triage.lastRun", "last run {{when}}", { when: new Date(String(triage.settings.lastTickAt)).toLocaleString() })}` : "",
258
- triage.settings && !triage.settings.killSwitchOn ? ` · ${tr("fluidgrids.triage.paused", "paused for this workspace")}` : ""
259
- ]
260
- })
261
- ] }), canManage && /* @__PURE__ */ jsxs("div", {
262
- className: "flex shrink-0 flex-wrap gap-2",
263
- children: [enabled && /* @__PURE__ */ jsx(Button, {
264
- size: "sm",
265
- variant: "outline",
266
- onClick: () => void triage.runNow(),
267
- disabled: triage.busy,
268
- "data-testid": "failure-triage-run-now",
269
- children: tr("fluidgrids.triage.runNow", "Run now")
270
- }), /* @__PURE__ */ jsx(Button, {
271
- size: "sm",
272
- variant: enabled ? "outline" : "default",
273
- onClick: () => void triage.setEnabled(!enabled),
274
- disabled: triage.busy || triage.loading,
275
- "data-testid": "failure-triage-toggle",
276
- children: enabled ? tr("fluidgrids.triage.turnOff", "Turn off") : tr("fluidgrids.triage.turnOn", "Turn on")
277
- })]
278
- })]
279
- }),
280
- triage.error && /* @__PURE__ */ jsx("p", {
281
- className: "mt-3 text-sm text-status-error-text",
282
- children: triage.error
283
- }),
284
- triage.lastRun && !triage.lastRun.skipped && /* @__PURE__ */ jsx("p", {
285
- className: "mt-3 text-xs text-text-secondary",
286
- children: tr("fluidgrids.triage.lastRunSummary", "Checked {{scanned}} failed run(s): {{created}} new cluster(s), {{suppressed}} left to the retry.", {
287
- scanned: triage.lastRun.scannedRuns,
288
- created: triage.lastRun.newClusterCount,
289
- suppressed: triage.lastRun.suppressedTransient
290
- })
291
- }),
292
- triage.clusters.length > 0 ? /* @__PURE__ */ jsx("ul", {
293
- className: "mt-4 space-y-2",
294
- "data-testid": "failure-cluster-list",
295
- children: triage.clusters.map((cluster) => /* @__PURE__ */ jsx(ClusterRow, {
296
- cluster,
297
- canRetry,
298
- onOpenRun,
299
- onRetry,
300
- onDismiss: (id) => void triage.dismiss(id)
301
- }, cluster.id))
302
- }) : !triage.loading && /* @__PURE__ */ jsx("p", {
303
- className: "mt-4 text-sm text-text-secondary",
304
- "data-testid": "failure-triage-empty",
305
- children: enabled ? tr("fluidgrids.triage.empty", "No repeated failures need attention.") : tr("fluidgrids.triage.emptyOff", "Turn failure triage on to have repeated failures grouped and explained here.")
306
- })
307
- ]
308
- });
309
- }
310
-
311
- export { fetchRunFailureClusters as a, dismissRunFailureCluster as i, FailureTriagePanel as n, OPEN_STATUSES as r, BUCKET_LABELS as t };