@burdenoff/fluidgrids-fe-sdk 2026.1113.7 → 2026.1113.9

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 (66) hide show
  1. package/dist/{AiStudioPage-DZ0YBcTL.js → AiStudioPage-D9vovsZE.js} +4 -4
  2. package/dist/{ApprovalInboxPage-CbkmOXaq.js → ApprovalInboxPage-DVoqdqwA.js} +1 -1
  3. package/dist/{DataSinkDashboardPage-231cS9dt.js → DataSinkDashboardPage-CXb1uNau.js} +1 -1
  4. package/dist/{ExecutionDetailPage-CoRLOiiZ.js → ExecutionDetailPage-BuU66VvK.js} +29 -17
  5. package/dist/{ExecutionsListDocument-CzdLPpj5.js → ExecutionStatsDocument-6ixNZnBV.js} +1 -346
  6. package/dist/{ExecutionsListPage-Dr0Ychbr.js → ExecutionsListPage-DMAOPJCa.js} +8 -5
  7. package/dist/{FluidGridsProvider-DQP7gPxN.js → FluidGridsProvider-BOBuK7kj.js} +481 -32
  8. package/dist/{HistoryPage-C99YGv7V.js → HistoryPage-DUcPEycb.js} +1 -1
  9. package/dist/{InsightsPage-ySywDcp_.js → InsightsPage-C3FjaLKN.js} +1 -1
  10. package/dist/{PaidTemplateConfirm-CI6TDivO.js → PaidTemplateConfirm-Dop_rxCQ.js} +1 -1
  11. package/dist/{QuotaExhaustedDialog-nlnRlQ2i.js → QuotaExhaustedDialog-CijT1MyD.js} +1 -1
  12. package/dist/{SettingsPage-tKzJkG-L.js → SettingsPage-C4G9OlJV.js} +3 -3
  13. package/dist/{TemplateCard-UnjAFsS4.js → TemplateCard-7rE1VAIC.js} +2 -2
  14. package/dist/{TemplatePreview-WiRz3SCv.js → TemplatePreview-CSA9W-e1.js} +4 -4
  15. package/dist/{TemplatesPage-Z2LDGg3g.js → TemplatesPage-C_trA48U.js} +7 -7
  16. package/dist/TranslationBridge-Bd4aJKMs.d.ts +11 -0
  17. package/dist/{WorkflowBuilder-CQWz7dXc.js → WorkflowBuilder-CkoZDS1_.js} +3 -3
  18. package/dist/{WorkflowBuilder-BdnCh2hB.js → WorkflowBuilder-DZWmp9Vg.js} +5 -5
  19. package/dist/{WorkflowSearchRedirect-DoiDmeyL.js → WorkflowSearchRedirect-DQj9_HqI.js} +1 -1
  20. package/dist/{WorkflowsList-C86YEuZZ.js → WorkflowsList-BOTt7lX5.js} +5 -5
  21. package/dist/agent-tools.d.ts +1 -1
  22. package/dist/agent-tools.js +2 -2
  23. package/dist/{agentTools-BQbgd_wK.js → agentTools-CSoCNDRx.js} +1 -1
  24. package/dist/{askAboutBridge-BV8m95kk.js → askAboutBridge-kpcjcR9Y.js} +8 -1
  25. package/dist/assistant.js +1 -1
  26. package/dist/{canvasNoteTools-Cp3UPIM8.js → canvasNoteTools-DTc3EKvg.js} +2 -2
  27. package/dist/{constants-XdvUxeWK.d.ts → constants-svpG-QrV.d.ts} +1 -9
  28. package/dist/entities-I_0kio3q.js +38 -0
  29. package/dist/executions.js +2 -2
  30. package/dist/{flow-builder-CJ00qt1Z.js → flow-builder-CYlYHdhf.js} +125 -24
  31. package/dist/history.js +1 -1
  32. package/dist/{index-Df6NgmmH.d.ts → index-8Ai8teoo.d.ts} +1 -1
  33. package/dist/{index-CHeY7_A1.d.ts → index-BZCX9eJJ.d.ts} +13 -0
  34. package/dist/index.d.ts +4 -3
  35. package/dist/index.js +33 -32
  36. package/dist/{marksStore-DGCXjTmZ.js → marksStore-a9oIMMot.js} +25 -1
  37. package/dist/{node-detail-view-DtZe2ggI.js → node-detail-view-N6n3qegt.js} +4 -4
  38. package/dist/{node-editor-tab-body-CFprr94T.js → node-editor-tab-body-CivWI2hg.js} +2 -2
  39. package/dist/observability.d.ts +1 -1
  40. package/dist/observability.js +2 -2
  41. package/dist/{popover-DuaVzhfH.js → popover-a8WKNgPP.js} +2 -2
  42. package/dist/proactive.d.ts +66 -0
  43. package/dist/proactive.js +237 -0
  44. package/dist/{quick-config-panel-CmL27iO-.js → quick-config-panel-DABEVJR9.js} +3 -3
  45. package/dist/{run-display-BycKYSU0.js → run-display-UjLAoYqQ.js} +38 -3
  46. package/dist/{schedule-panel-DIUNqU9B.js → schedule-panel--u7WXnaC.js} +4 -4
  47. package/dist/settings.js +1 -1
  48. package/dist/{sidebar-node-editor-C_mhVSxd.js → sidebar-node-editor-BHqtoMC5.js} +3 -3
  49. package/dist/templates.js +2 -2
  50. package/dist/{uiMarkTools-DZ6akjQK.js → uiMarkTools-B2581Qg-.js} +1 -1
  51. package/dist/{useWorkflowProposal-UtJYycLv.js → use-workflow-tests-BUzndyWO.js} +4 -3265
  52. package/dist/{useAgentDefinitions-CKZ7oDZD.js → useAgentDefinitions-DykIYrep.js} +2 -2
  53. package/dist/{useDurableParity-BUSM-z_7.js → useDurableParity-sS0LIJ_l.js} +1 -1
  54. package/dist/{useExecutions-DSZisQHk.js → useExecutions-GgjDOgcd.js} +2 -2
  55. package/dist/{useGlobalStoreClient-CXPqlK1M.js → useGlobalStoreClient-BfmKmeIx.js} +1 -1
  56. package/dist/{useObservability-n7Qdc8Xg.js → useObservability-AMDVk_hX.js} +1 -1
  57. package/dist/{useRunHistory-Bxs6LrME.js → useRunHistory-gnqIoJnZ.js} +1 -1
  58. package/dist/{useWorkflowCodeExport-Bj4QY-xY.js → useWorkflowCodeExport-DrcfDTcD.js} +1 -1
  59. package/dist/useWorkflowProposal-B9vXLKef.js +3280 -0
  60. package/dist/{useWorkflows-BY5b8r9n.js → useWorkflows-DSZUrK_o.js} +1 -1
  61. package/dist/workflow-builder.js +4 -4
  62. package/dist/workflow-host.d.ts +2 -1
  63. package/dist/workflow-pages.d.ts +1 -1
  64. package/dist/workflow-pages.js +14 -14
  65. package/dist/workflows-list.js +1 -1
  66. package/package.json +7 -3
@@ -1,9 +1,9 @@
1
1
  "use client";
2
2
  import { t as __exportAll } from "./rolldown-runtime-hDbaFkMy.js";
3
3
  import { t as ThemeProvider } from "./theme-provider-B3mIuz2d.js";
4
- import { t as FlowBuilderPage } from "./flow-builder-CJ00qt1Z.js";
5
- import { _ as useInstalledNodes, a as buildNodeCheck, c as useImportWorkflowTemplate, i as useTemplateImportFlow, n as formatTemplatePrice, o as buildRequiredNodeTypes, r as isPaidTemplate } from "./TemplateCard-UnjAFsS4.js";
6
- import { t as QuotaExhaustedDialog } from "./QuotaExhaustedDialog-nlnRlQ2i.js";
4
+ import { t as FlowBuilderPage } from "./flow-builder-CYlYHdhf.js";
5
+ import { _ as useInstalledNodes, a as buildNodeCheck, c as useImportWorkflowTemplate, i as useTemplateImportFlow, n as formatTemplatePrice, o as buildRequiredNodeTypes, r as isPaidTemplate } from "./TemplateCard-7rE1VAIC.js";
6
+ import { t as QuotaExhaustedDialog } from "./QuotaExhaustedDialog-CijT1MyD.js";
7
7
  import { n as WithOpenTemplateAsCode } from "./OpenTemplateAsCodeButton-BdcTxemq.js";
8
8
  import { r as useTr } from "./TranslationBridge-Da-TPgQm.js";
9
9
  import { i as SdkPermissionButton, s as useFluidGridsPermission, t as FLUIDGRIDS_PERMISSIONS } from "./constants-dcxg6zG6.js";
@@ -12,7 +12,7 @@ import { n as useNavigationV2 } from "./useNavigationV2-C2WeqN7d.js";
12
12
  import { t as describeOperationError } from "./errors-xPZ-IbQd.js";
13
13
  import { t as Disclosure } from "./Disclosure-CsxDspR7.js";
14
14
  import { c as useVariables, t as useCreateVariable } from "./useVariables-DFdZofLQ.js";
15
- import { t as PaidTemplateConfirm } from "./PaidTemplateConfirm-CI6TDivO.js";
15
+ import { t as PaidTemplateConfirm } from "./PaidTemplateConfirm-Dop_rxCQ.js";
16
16
  import { useEffect, useMemo, useState } from "react";
17
17
  import { useLocation, useNavigate, useParams } from "react-router";
18
18
  import { Icon } from "@iconify/react";
@@ -1,23 +1,23 @@
1
1
  "use client";
2
2
  import { t as __exportAll } from "./rolldown-runtime-hDbaFkMy.js";
3
- import { h as useWorkflowDefinitions, l as useLazyWorkflowDefinition, s as useDuplicateWorkflow } from "./useWorkflows-BY5b8r9n.js";
4
- import { i as useTemplateImportFlow, l as useWorkflowTemplates, r as isPaidTemplate, t as TemplateCard } from "./TemplateCard-UnjAFsS4.js";
3
+ import { h as useWorkflowDefinitions, l as useLazyWorkflowDefinition, s as useDuplicateWorkflow } from "./useWorkflows-DSZUrK_o.js";
4
+ import { i as useTemplateImportFlow, l as useWorkflowTemplates, r as isPaidTemplate, t as TemplateCard } from "./TemplateCard-7rE1VAIC.js";
5
5
  import { jI as WorkflowStatus } from "./graphql-types-C5Tr6508.js";
6
6
  import { i as SdkPermissionButton, t as FLUIDGRIDS_PERMISSIONS } from "./constants-dcxg6zG6.js";
7
- import { t as QuotaExhaustedDialog } from "./QuotaExhaustedDialog-nlnRlQ2i.js";
7
+ import { t as QuotaExhaustedDialog } from "./QuotaExhaustedDialog-CijT1MyD.js";
8
8
  import { r as useTr } from "./TranslationBridge-Da-TPgQm.js";
9
- import { in as useFluidGridsAnalytics, t as FluidGridsContext } from "./FluidGridsProvider-DQP7gPxN.js";
9
+ import { on as useFluidGridsAnalytics, t as FluidGridsContext } from "./FluidGridsProvider-BOBuK7kj.js";
10
10
  import { a as emitTemplateUsed } from "./fluidgridsEvents-Dm5CaHtr.js";
11
11
  import { n as useFluidGridsPageControls } from "./pageControlsBridge-0pX9s-3k.js";
12
12
  import { r as templatesControls } from "./pageControlSpecs-DZJ9K37m.js";
13
13
  import { c as isQuotaExhaustedFailure, t as BILLING_PLANS_PATH } from "./quota-Cdt8yz7N.js";
14
14
  import { t as FluidGridsDocsLink } from "./FluidGridsDocsLink-JxkBpOeb.js";
15
- import { t as useGlobalStoreClient } from "./useGlobalStoreClient-CXPqlK1M.js";
15
+ import { t as useGlobalStoreClient } from "./useGlobalStoreClient-BfmKmeIx.js";
16
16
  import { o as throwIfResultError, t as describeOperationError } from "./errors-xPZ-IbQd.js";
17
- import { n as formatRunVersion } from "./run-display-BycKYSU0.js";
17
+ import { n as formatRunVersion } from "./run-display-UjLAoYqQ.js";
18
18
  import { n as useNavigationV2 } from "./useNavigationV2-C2WeqN7d.js";
19
19
  import { t as TechnicalDetails } from "./TechnicalDetails-r5JXr1jZ.js";
20
- import { t as PaidTemplateConfirm } from "./PaidTemplateConfirm-CI6TDivO.js";
20
+ import { t as PaidTemplateConfirm } from "./PaidTemplateConfirm-Dop_rxCQ.js";
21
21
  import { r as getFluidGridsConfig } from "./config-X97zrIvn.js";
22
22
  import { t as cn } from "./cn-QqidFIgr.js";
23
23
  import { useCallback, useContext, useEffect, useMemo, useState } from "react";
@@ -0,0 +1,11 @@
1
+
2
+ import { ReactNode } from "react";
3
+ type Translator = (key: string, fallback: string, params?: Record<string, string | number>) => string;
4
+ declare const ENGLISH_FALLBACK_TRANSLATOR: Translator;
5
+ interface FluidGridsTranslationProviderProps {
6
+ t: Translator;
7
+ children: ReactNode;
8
+ }
9
+ declare function FluidGridsTranslationProvider({ t, children }: FluidGridsTranslationProviderProps): import("react").JSX.Element;
10
+ declare function useTr(): Translator;
11
+ export { useTr as a, Translator as i, FluidGridsTranslationProvider as n, FluidGridsTranslationProviderProps as r, ENGLISH_FALLBACK_TRANSLATOR as t };
@@ -1,12 +1,12 @@
1
1
  "use client";
2
- import { n as FluidGridsProvider, on as useCanvasEdges } from "./FluidGridsProvider-DQP7gPxN.js";
2
+ import { cn as useCanvasEdges, n as FluidGridsProvider } from "./FluidGridsProvider-BOBuK7kj.js";
3
3
  import { A as useFlowStore } from "./node-operation-selection-BGj5YwAS.js";
4
4
  import { t as Button } from "./button-DG7y_FVJ.js";
5
5
  import { t as Input } from "./input-ChT6Q-Pr.js";
6
- import { v as Card } from "./TemplateCard-UnjAFsS4.js";
6
+ import { v as Card } from "./TemplateCard-7rE1VAIC.js";
7
7
  import { t as cn } from "./cn-QqidFIgr.js";
8
8
  import { r as useTr } from "./TranslationBridge-Da-TPgQm.js";
9
- import { m as FluidGridsMark, p as useNodeSelectedEvent } from "./flow-builder-CJ00qt1Z.js";
9
+ import { m as FluidGridsMark, p as useNodeSelectedEvent } from "./flow-builder-CYlYHdhf.js";
10
10
  import { useCallback, useEffect, useRef, useState } from "react";
11
11
  import { Background, Controls, Handle, MarkerType, MiniMap, Position, ReactFlow, ReactFlowProvider, useReactFlow } from "@xyflow/react";
12
12
  import { Fragment as Fragment$1, jsx, jsxs } from "react/jsx-runtime";
@@ -1,21 +1,21 @@
1
1
  "use client";
2
2
  import { t as __exportAll } from "./rolldown-runtime-hDbaFkMy.js";
3
- import { d as releaseLeaseKeptForReload, f as useWorkflowReloadStore, t as FlowBuilderPage } from "./flow-builder-CJ00qt1Z.js";
3
+ import { d as releaseLeaseKeptForReload, f as useWorkflowReloadStore, t as FlowBuilderPage } from "./flow-builder-CYlYHdhf.js";
4
4
  import { n as registerLiveCanvasHandler } from "./liveCanvas-D5ytXDp8.js";
5
5
  import { r as getFluidGridsConfig } from "./config-X97zrIvn.js";
6
6
  import { n as getFluidGridsClient } from "./client-Ctl4jmY3.js";
7
7
  import { o as throwIfResultError } from "./errors-xPZ-IbQd.js";
8
8
  import { t as WorkflowDefinitionDocument } from "./WorkflowDefinitionDocument-DZLbTPUZ.js";
9
9
  import { r as useTr } from "./TranslationBridge-Da-TPgQm.js";
10
- import { E as createConfiguredNode, Ht as codeBuildIdOf, L as paramsFromOperation, Lt as rememberRevision, g as registerWorkflowNodeTypes, h as registerNodeManifests, ht as classifyCreateRefusal, m as refetchStoreNodes, nn as resolveNodeOperation, o as NODE_CONFIGS, pt as blankWorkflowCreateInput, qt as workflowFingerprint, u as ensureNodeTypesLoaded, yt as useSaveStatusStore } from "./FluidGridsProvider-DQP7gPxN.js";
10
+ import { O as createConfiguredNode, Wt as codeBuildIdOf, Yt as workflowFingerprint, _t as classifyCreateRefusal, g as registerWorkflowNodeTypes, h as registerNodeManifests, ht as blankWorkflowCreateInput, in as resolveNodeOperation, m as refetchStoreNodes, o as NODE_CONFIGS, u as ensureNodeTypesLoaded, xt as useSaveStatusStore, z as paramsFromOperation, zt as rememberRevision } from "./FluidGridsProvider-BOBuK7kj.js";
11
11
  import { A as useFlowStore } from "./node-operation-selection-BGj5YwAS.js";
12
12
  import { t as canvasFromDefinition } from "./definition-canvas-DL25_6NH.js";
13
- import { l as useLazyWorkflowDefinition, n as useCreateWorkflow } from "./useWorkflows-BY5b8r9n.js";
14
- import { _ as useInstalledNodes, a as buildNodeCheck, o as buildRequiredNodeTypes, s as getWorkflowNodeTypes } from "./TemplateCard-UnjAFsS4.js";
13
+ import { l as useLazyWorkflowDefinition, n as useCreateWorkflow } from "./useWorkflows-DSZUrK_o.js";
14
+ import { _ as useInstalledNodes, a as buildNodeCheck, o as buildRequiredNodeTypes, s as getWorkflowNodeTypes } from "./TemplateCard-7rE1VAIC.js";
15
15
  import { r as mergeStickyNotes } from "./sticky-notes-23j-wL6Q.js";
16
16
  import { c as withoutGuidedTourIntent, l as decideMissingWorkflow, o as isGuidedTourIntent, s as pickGuidedTour, u as isCreateIntent } from "./firstWorkflow-C_h0KMB2.js";
17
17
  import { t as BILLING_PLANS_PATH } from "./quota-Cdt8yz7N.js";
18
- import { c as CreateWorkflowRefusalDialog } from "./useWorkflowCodeExport-Bj4QY-xY.js";
18
+ import { c as CreateWorkflowRefusalDialog } from "./useWorkflowCodeExport-DrcfDTcD.js";
19
19
  import { Suspense, lazy, useCallback, useEffect, useMemo, useRef, useState } from "react";
20
20
  import { useLocation, useNavigate, useParams } from "react-router";
21
21
  import { Icon } from "@iconify/react";
@@ -1,6 +1,6 @@
1
1
  "use client";
2
2
  import { t as __exportAll } from "./rolldown-runtime-hDbaFkMy.js";
3
- import { m as useWorkflowDefinition } from "./useWorkflows-BY5b8r9n.js";
3
+ import { m as useWorkflowDefinition } from "./useWorkflows-DSZUrK_o.js";
4
4
  import { Navigate, useParams } from "react-router";
5
5
  import { Icon } from "@iconify/react";
6
6
  import { jsx, jsxs } from "react/jsx-runtime";
@@ -1,12 +1,12 @@
1
1
  "use client";
2
2
  import { t as __exportAll } from "./rolldown-runtime-hDbaFkMy.js";
3
- import { c as useImportWorkflow, h as useWorkflowDefinitions, l as useLazyWorkflowDefinition, n as useCreateWorkflow, o as useDeleteWorkflow, s as useDuplicateWorkflow, u as usePreviewN8nImport } from "./useWorkflows-BY5b8r9n.js";
4
- import { gt as createThenOpen, t as FluidGridsContext } from "./FluidGridsProvider-DQP7gPxN.js";
5
- import { a as saveWorkflowDescription, c as CreateWorkflowRefusalDialog, o as visibleWorkflowDescription, r as commitWorkflowDescription, s as workflowDescriptionCharactersLeft, t as useExportWorkflowAs } from "./useWorkflowCodeExport-Bj4QY-xY.js";
3
+ import { c as useImportWorkflow, h as useWorkflowDefinitions, l as useLazyWorkflowDefinition, n as useCreateWorkflow, o as useDeleteWorkflow, s as useDuplicateWorkflow, u as usePreviewN8nImport } from "./useWorkflows-DSZUrK_o.js";
4
+ import { t as FluidGridsContext, vt as createThenOpen } from "./FluidGridsProvider-BOBuK7kj.js";
5
+ import { a as saveWorkflowDescription, c as CreateWorkflowRefusalDialog, o as visibleWorkflowDescription, r as commitWorkflowDescription, s as workflowDescriptionCharactersLeft, t as useExportWorkflowAs } from "./useWorkflowCodeExport-DrcfDTcD.js";
6
6
  import { c as isQuotaExhaustedFailure, t as BILLING_PLANS_PATH } from "./quota-Cdt8yz7N.js";
7
7
  import { A as useFlowStore } from "./node-operation-selection-BGj5YwAS.js";
8
8
  import { a as SdkPermissionGate, i as SdkPermissionButton, s as useFluidGridsPermission, t as FLUIDGRIDS_PERMISSIONS } from "./constants-dcxg6zG6.js";
9
- import { t as QuotaExhaustedDialog } from "./QuotaExhaustedDialog-nlnRlQ2i.js";
9
+ import { t as QuotaExhaustedDialog } from "./QuotaExhaustedDialog-CijT1MyD.js";
10
10
  import { r as useTr } from "./TranslationBridge-Da-TPgQm.js";
11
11
  import { a as isExecutionMode, i as isAutonomyLevel, n as EXECUTION_MODES, o as useAutonomyLevelCopy, r as EXECUTION_MODE_ICONS, s as useExecutionModeCopy } from "./run-mode-BMxym0mD.js";
12
12
  import { YF as WorkflowAccessFilter, aI as WorkflowExportFormat } from "./graphql-types-C5Tr6508.js";
@@ -17,7 +17,7 @@ import { d as useFluidGridsFlag, t as FLUIDGRIDS_FLAGS } from "./feature-flags-B
17
17
  import { n as downloadWorkflowExport, r as parseWorkflowImport } from "./workflow-transfer-CQnQC-ke.js";
18
18
  import { a as useWorkflowProjects, i as useWorkflowProjectActions, n as useWorkflowFolderActions, r as useWorkflowFolders, t as useBulkWorkflowActions } from "./useWorkflowOrganization-r5FWNBs6.js";
19
19
  import { t as describeOperationError } from "./errors-xPZ-IbQd.js";
20
- import { a as useExecutions } from "./useExecutions-DSZisQHk.js";
20
+ import { a as useExecutions } from "./useExecutions-GgjDOgcd.js";
21
21
  import { a as firstWorkflowProgress, i as builderPathFor, r as GUIDED_TOUR_STATE } from "./firstWorkflow-C_h0KMB2.js";
22
22
  import { n as useFluidGridsPageControls } from "./pageControlsBridge-0pX9s-3k.js";
23
23
  import { i as workflowsListControls } from "./pageControlSpecs-DZJ9K37m.js";
@@ -1,3 +1,3 @@
1
1
 
2
- import { a as createUiMarkTools, c as FluidGridsAgentToolDeps, d as triggerNodesOf, i as UiMarkToolOptions, l as createFluidGridsAgentTools, n as resetAgentMarks, o as AgentCalloutOverlay, r as useAgentMarksStore, s as AgentCalloutOverlayProps, t as CanvasNote, u as pickTriggerNode } from "./index-CHeY7_A1.js";
2
+ import { a as createUiMarkTools, c as FluidGridsAgentToolDeps, d as triggerNodesOf, i as UiMarkToolOptions, l as createFluidGridsAgentTools, n as resetAgentMarks, o as AgentCalloutOverlay, r as useAgentMarksStore, s as AgentCalloutOverlayProps, t as CanvasNote, u as pickTriggerNode } from "./index-BZCX9eJJ.js";
3
3
  export { AgentCalloutOverlay, type AgentCalloutOverlayProps, type CanvasNote, type FluidGridsAgentToolDeps, type UiMarkToolOptions, createFluidGridsAgentTools, createUiMarkTools, pickTriggerNode, resetAgentMarks, triggerNodesOf, useAgentMarksStore };
@@ -1,5 +1,5 @@
1
1
  "use client";
2
- import { a as triggerNodesOf, i as pickTriggerNode, n as AgentCalloutOverlay, r as createFluidGridsAgentTools, t as createUiMarkTools } from "./uiMarkTools-DZ6akjQK.js";
3
- import { n as useAgentMarksStore, t as resetAgentMarks } from "./marksStore-DGCXjTmZ.js";
2
+ import { a as triggerNodesOf, i as pickTriggerNode, n as AgentCalloutOverlay, r as createFluidGridsAgentTools, t as createUiMarkTools } from "./uiMarkTools-B2581Qg-.js";
3
+ import { n as useAgentMarksStore, t as resetAgentMarks } from "./marksStore-a9oIMMot.js";
4
4
 
5
5
  export { AgentCalloutOverlay, createFluidGridsAgentTools, createUiMarkTools, pickTriggerNode, resetAgentMarks, triggerNodesOf, useAgentMarksStore };
@@ -1,5 +1,5 @@
1
1
  "use client";
2
- import { E as createConfiguredNode, F as nodeTitle, L as paramsFromOperation, N as fixedParameterState, R as selectedOperationOf, _ as registryNodeData, f as isNodeConfigsInitialized, nt as autosaveAllowedFor, o as NODE_CONFIGS, ut as isFlowComplete, w as SENSITIVE_PARAM, yt as useSaveStatusStore } from "./FluidGridsProvider-DQP7gPxN.js";
2
+ import { B as selectedOperationOf, E as SENSITIVE_PARAM, F as fixedParameterState, L as nodeTitle, O as createConfiguredNode, _ as registryNodeData, f as isNodeConfigsInitialized, ft as isFlowComplete, it as autosaveAllowedFor, o as NODE_CONFIGS, xt as useSaveStatusStore, z as paramsFromOperation } from "./FluidGridsProvider-BOBuK7kj.js";
3
3
  import { A as useFlowStore, T as resolveOutputHandles, w as resolveInputHandles } from "./node-operation-selection-BGj5YwAS.js";
4
4
  import { o as isNodeTypeHiddenFromPalette } from "./durable-nodes-DXCCQYWD.js";
5
5
  import { t as computeAttachPosition } from "./attach-node-helpers-CtV1mej0.js";
@@ -61,5 +61,12 @@ function useFgAskable(describe, options = {}) {
61
61
  function useFgAskableSelection(describe) {
62
62
  return useAttached(useContext(AskAboutContext)?.attachSelection ?? null, describe, false);
63
63
  }
64
+ /**
65
+ * Whether the person can ask the assistant about things here: a host mounted
66
+ * the bridge. Lets a page skip work (a query for facts) that only an ask uses.
67
+ */
68
+ function useFgAskAboutAvailable() {
69
+ return useContext(AskAboutContext) !== null;
70
+ }
64
71
 
65
- export { useFgAskable as n, useFgAskableSelection as r, FluidGridsAskAboutBridge as t };
72
+ export { useFgAskableSelection as i, useFgAskAboutAvailable as n, useFgAskable as r, FluidGridsAskAboutBridge as t };
package/dist/assistant.js CHANGED
@@ -1,7 +1,7 @@
1
1
  "use client";
2
2
  import { n as useFluidGridsPageControls, t as FluidGridsAssistantBridge } from "./pageControlsBridge-0pX9s-3k.js";
3
3
  import { a as notifyFluidGridsAiCreditsUpdated, i as FluidGridsAiCreditsBridge, n as FLUIDGRIDS_AI_CREDITS_UPDATED_EVENT, r as FLUIDGRIDS_AI_PRODUCT_KEY, t as AiCreditBalanceSlot } from "./aiCreditsBridge-BuE92tKo.js";
4
- import { n as useFgAskable, r as useFgAskableSelection, t as FluidGridsAskAboutBridge } from "./askAboutBridge-BV8m95kk.js";
4
+ import { i as useFgAskableSelection, r as useFgAskable, t as FluidGridsAskAboutBridge } from "./askAboutBridge-kpcjcR9Y.js";
5
5
  import { r as useFluidGridsAssistantLiveCanvas, t as createFluidGridsAssistantLiveCanvas } from "./liveCanvas-D5ytXDp8.js";
6
6
 
7
7
  export { AiCreditBalanceSlot, FLUIDGRIDS_AI_CREDITS_UPDATED_EVENT, FLUIDGRIDS_AI_PRODUCT_KEY, FluidGridsAiCreditsBridge, FluidGridsAskAboutBridge, FluidGridsAssistantBridge, createFluidGridsAssistantLiveCanvas, notifyFluidGridsAiCreditsUpdated, useFgAskable, useFgAskableSelection, useFluidGridsAssistantLiveCanvas, useFluidGridsPageControls };
@@ -1,6 +1,6 @@
1
1
  "use client";
2
- import { n as useAgentMarksStore, r as toPlainText } from "./marksStore-DGCXjTmZ.js";
3
- import { F as nodeTitle, L as paramsFromOperation, R as selectedOperationOf } from "./FluidGridsProvider-DQP7gPxN.js";
2
+ import { n as useAgentMarksStore, r as toPlainText } from "./marksStore-a9oIMMot.js";
3
+ import { B as selectedOperationOf, L as nodeTitle, z as paramsFromOperation } from "./FluidGridsProvider-BOBuK7kj.js";
4
4
  import { A as useFlowStore } from "./node-operation-selection-BGj5YwAS.js";
5
5
  import { t as notesKeyOf } from "./notesKey-5EaREBGA.js";
6
6
  import { AgentToolError, defineAgentTool } from "@burdenoff/fe-libs/shared/agent-tools";
@@ -1,14 +1,6 @@
1
1
 
2
2
  import { ReactElement, ReactNode } from "react";
3
3
  import { ApolloClient } from "@apollo/client/core";
4
- type Translator = (key: string, fallback: string, params?: Record<string, string | number>) => string;
5
- declare const ENGLISH_FALLBACK_TRANSLATOR: Translator;
6
- interface FluidGridsTranslationProviderProps {
7
- t: Translator;
8
- children: ReactNode;
9
- }
10
- declare function FluidGridsTranslationProvider({ t, children }: FluidGridsTranslationProviderProps): import("react").JSX.Element;
11
- declare function useTr(): Translator;
12
4
  declare function refreshNodeRegistry(): Promise<void>;
13
5
  interface FluidGridsClientConfig {
14
6
  apiGatewayUrl: string;
@@ -159,4 +151,4 @@ declare const FLUIDGRIDS_PERMISSIONS: {
159
151
  readonly TOOL_APPROVAL_REQUEST_EXECUTE: "tool-approval-request:execute";
160
152
  };
161
153
  type FluidGridsPermission = (typeof FLUIDGRIDS_PERMISSIONS)[keyof typeof FLUIDGRIDS_PERMISSIONS];
162
- export { FluidGridsTranslationProviderProps as A, isFluidGridsClientReady as C, refreshNodeRegistry as D, waitForFluidGridsClient as E, useTr as M, ENGLISH_FALLBACK_TRANSLATOR as O, getFluidGridsClientSafe as S, setFluidGridsClient as T, resetGlobalStoreClient as _, FluidGridsPermissionsProviderProps as a, createFluidGridsClient as b, SdkPermissionButton as c, SdkPermissionGateProps as d, evaluatePermissionCheck as f, getGlobalStoreClient as g, createGlobalStoreClient as h, FluidGridsPermissionsProvider as i, Translator as j, FluidGridsTranslationProvider as k, SdkPermissionButtonProps as l, GlobalClientConfig as m, FluidGridsPermission as n, FluidGridsPermissionsValue as o, useFluidGridsPermission as p, ALLOW_ALL_PERMISSIONS as r, PermissionCheck as s, FLUIDGRIDS_PERMISSIONS as t, SdkPermissionGate as u, setGlobalStoreClient as v, resetFluidGridsClient as w, getFluidGridsClient as x, FluidGridsClientConfig as y };
154
+ export { isFluidGridsClientReady as C, refreshNodeRegistry as D, waitForFluidGridsClient as E, getFluidGridsClientSafe as S, setFluidGridsClient as T, resetGlobalStoreClient as _, FluidGridsPermissionsProviderProps as a, createFluidGridsClient as b, SdkPermissionButton as c, SdkPermissionGateProps as d, evaluatePermissionCheck as f, getGlobalStoreClient as g, createGlobalStoreClient as h, FluidGridsPermissionsProvider as i, SdkPermissionButtonProps as l, GlobalClientConfig as m, FluidGridsPermission as n, FluidGridsPermissionsValue as o, useFluidGridsPermission as p, ALLOW_ALL_PERMISSIONS as r, PermissionCheck as s, FLUIDGRIDS_PERMISSIONS as t, SdkPermissionGate as u, setGlobalStoreClient as v, resetFluidGridsClient as w, getFluidGridsClient as x, FluidGridsClientConfig as y };
@@ -0,0 +1,38 @@
1
+ "use client";
2
+ import { suggestAnchorProps } from "@burdenoff/fe-libs/shared/proactive";
3
+
4
+ // src/proactive/entities.ts
5
+ /**
6
+ * ★ BOFF-13166: the FluidGrids reference pack of the proactive agent (epic
7
+ * BOFF-13159). These names are a contract with the backend pack in
8
+ * wspace-sandbox-svc (`proactive/packs/fluidgrids.ts`): a suggestion's anchor
9
+ * and actions carry exactly these strings, so they never change here alone.
10
+ *
11
+ * Anchors (contract C7):
12
+ * - `workflow_run`: entityId = the run id (the id in `/workflows/runs/<id>`);
13
+ * - `workflow`: entityId = the workflowKey (the key in
14
+ * `/workflows/workflow/<key>/<version>`, the same id the assistant's page
15
+ * context reports), part = a canvas node id;
16
+ * - `connection`: entityId = the integration connection id
17
+ * (`/integrations/connections/<id>`).
18
+ */
19
+ const FLUIDGRIDS_PROACTIVE_ENTITY = {
20
+ run: "workflow_run",
21
+ workflow: "workflow",
22
+ connection: "connection"
23
+ };
24
+ /** The product-registered action types of the pack (the built-ins are fe-libs'). */
25
+ const FLUIDGRIDS_PROACTIVE_ACTION = {
26
+ reviewProposal: "review-proposal",
27
+ proposeFix: "propose-fix",
28
+ openConnection: "open-connection"
29
+ };
30
+ /** The attribute that lets a suggestion about this run pin to an element. */
31
+ function runSuggestAnchorProps(runId) {
32
+ return suggestAnchorProps({
33
+ entityType: FLUIDGRIDS_PROACTIVE_ENTITY.run,
34
+ entityId: runId
35
+ });
36
+ }
37
+
38
+ export { FLUIDGRIDS_PROACTIVE_ENTITY as n, runSuggestAnchorProps as r, FLUIDGRIDS_PROACTIVE_ACTION as t };
@@ -1,5 +1,5 @@
1
1
  "use client";
2
- import { t as ExecutionsListPage } from "./ExecutionsListPage-Dr0Ychbr.js";
3
- import { t as ExecutionDetailPage } from "./ExecutionDetailPage-CoRLOiiZ.js";
2
+ import { t as ExecutionsListPage } from "./ExecutionsListPage-DMAOPJCa.js";
3
+ import { t as ExecutionDetailPage } from "./ExecutionDetailPage-BuU66VvK.js";
4
4
 
5
5
  export { ExecutionDetailPage, ExecutionsListPage };
@@ -1,12 +1,12 @@
1
1
  "use client";
2
2
  import { A as useFlowStore, N as isTriggerOperation, j as useIsValidConnection, r as CODE_WORKFLOW_NODE_TYPE } from "./node-operation-selection-BGj5YwAS.js";
3
- import { A as workflowParameterIssues, At as shouldReleaseForIdle, Bt as AUTOSAVE_RETRY_DELAYS_MS, Ct as bannerOf, D as useInsertNode, Dt as phaseAfterAcquire, Et as leaseCallSequence, Ft as sessionBeforeReload, Gt as resettledBaseline, In as getNodeDetail, It as rememberOwnStatusChange, Jt as useNodeExecution, Kt as saveFailureActionOf, Ln as buildStickyNode, Lt as rememberRevision, Mt as EDIT_SESSION_ID, Nt as forgetSessionForReload, O as MissingParametersDialog, Ot as phaseAfterTakeOver, Pt as rememberSessionForReload, Rn as loadMarkdown, Rt as revisionOf, St as useEditLeaseStore, T as buildOperationSeed, Tt as leaseCallQueue, Vt as canAutosave, Wt as inAppLeaveTarget, _t as refusalOfQuota, a as NODES_METADATA, at as editingLeaseLocked, bt as workflowSaveQueue, ct as touchesSavedFields, dt as useFlowValidator, et as useGuardedNavigate, f as isNodeConfigsInitialized, ft as useSaveWorkflow, g as registerWorkflowNodeTypes, i as AVAILABLE_NODES, it as editStateFor, jt as tickAction, k as useRunGuard, kt as releasesOnClose, l as ensureNodeConfigsLoaded, ln as loadDefinitionJson, lt as watchLeavingLosesChanges, m as refetchStoreNodes, nt as autosaveAllowedFor, o as NODE_CONFIGS, on as useCanvasEdges, ot as leavingLosesChanges, p as onNodeTypesUpdate, qt as workflowFingerprint, rt as departingSave, s as NODE_TYPES, sn as useNodeRegistryRevision, st as savedEverythingBeforeLeaving, t as FluidGridsContext, tt as useManualSave, ut as isFlowComplete, v as scheduleNodePaletteLoad, vt as saveIndicatorOf, wt as isLocked, x as getNodeMetadata, xt as useEditLeaseLocked, yt as useSaveStatusStore, zn as useMarkdownRenderer, zt as AUTOSAVE_DEBOUNCE_MS } from "./FluidGridsProvider-DQP7gPxN.js";
3
+ import { A as MissingParametersDialog, At as phaseAfterTakeOver, Bn as buildStickyNode, Bt as revisionOf, Ct as useEditLeaseLocked, D as buildOperationSeed, Dt as leaseCallQueue, Et as isLocked, Ft as forgetSessionForReload, Hn as useMarkdownRenderer, Ht as AUTOSAVE_RETRY_DELAYS_MS, It as rememberSessionForReload, Jt as saveFailureActionOf, Kt as inAppLeaveTarget, Lt as sessionBeforeReload, M as workflowParameterIssues, Mt as shouldReleaseForIdle, Nt as tickAction, Ot as leaseCallSequence, Pt as EDIT_SESSION_ID, Rt as rememberOwnStatusChange, S as useLatestFailedRun, St as workflowSaveQueue, Tt as bannerOf, Ut as canAutosave, Vn as loadMarkdown, Vt as AUTOSAVE_DEBOUNCE_MS, Xt as useNodeExecution, Yt as workflowFingerprint, a as NODES_METADATA, at as departingSave, bt as saveIndicatorOf, cn as useCanvasEdges, ct as leavingLosesChanges, dn as loadDefinitionJson, dt as watchLeavingLosesChanges, f as isNodeConfigsInitialized, ft as isFlowComplete, g as registerWorkflowNodeTypes, i as AVAILABLE_NODES, it as autosaveAllowedFor, j as useRunGuard, jt as releasesOnClose, k as useInsertNode, kt as phaseAfterAcquire, l as ensureNodeConfigsLoaded, ln as useNodeRegistryRevision, lt as savedEverythingBeforeLeaving, m as refetchStoreNodes, mt as useSaveWorkflow, nt as useGuardedNavigate, o as NODE_CONFIGS, ot as editStateFor, p as onNodeTypesUpdate, pt as useFlowValidator, qt as resettledBaseline, rt as useManualSave, s as NODE_TYPES, st as editingLeaseLocked, t as FluidGridsContext, ut as touchesSavedFields, v as scheduleNodePaletteLoad, wt as useEditLeaseStore, x as getNodeMetadata, xt as useSaveStatusStore, yt as refusalOfQuota, zn as getNodeDetail, zt as rememberRevision } from "./FluidGridsProvider-BOBuK7kj.js";
4
4
  import { r as useTr } from "./TranslationBridge-Da-TPgQm.js";
5
5
  import { n as preloadableLazy } from "./preloadable-lazy-Pp47mqQ9.js";
6
6
  import { t as Input$1 } from "./input-ChT6Q-Pr.js";
7
- import { t as useGlobalStoreClient } from "./useGlobalStoreClient-CXPqlK1M.js";
7
+ import { t as useGlobalStoreClient } from "./useGlobalStoreClient-BfmKmeIx.js";
8
8
  import { r as getFluidGridsConfig } from "./config-X97zrIvn.js";
9
- import { _ as useInstalledNodes, d as getStoreNodeAvailability, f as getStoreNodeIcon, g as storeNodeInstallVersion, h as storeNodeDisplayVersion, i as useTemplateImportFlow, l as useWorkflowTemplates, m as isStoreNodeUpdateAvailable, p as getStoreNodeType, t as TemplateCard, u as filterStoreNodesForPalette } from "./TemplateCard-UnjAFsS4.js";
9
+ import { _ as useInstalledNodes, d as getStoreNodeAvailability, f as getStoreNodeIcon, g as storeNodeInstallVersion, h as storeNodeDisplayVersion, i as useTemplateImportFlow, l as useWorkflowTemplates, m as isStoreNodeUpdateAvailable, p as getStoreNodeType, t as TemplateCard, u as filterStoreNodesForPalette } from "./TemplateCard-7rE1VAIC.js";
10
10
  import { _ as useWorkflowTestsEnabled, d as useFluidGridsFlag, h as usePhaseDFlags, l as useDurableFunctionNodesEnabled, p as usePaletteGates, t as FLUIDGRIDS_FLAGS, u as useDurableParityEnabled } from "./feature-flags-B_b8PJ6Z.js";
11
11
  import { n as isImageIcon, t as NodeTypeIcon } from "./node-type-icon-D28t8I64.js";
12
12
  import { i as filterPaletteNodes } from "./durable-nodes-DXCCQYWD.js";
@@ -24,22 +24,24 @@ import { t as NavigationV2Provider } from "./NavigationV2Provider-DCDt35eG.js";
24
24
  import { i as emitFluidGridsEvent } from "./token-refresh-link-BjN7H4qA.js";
25
25
  import { n as useBuilderReadOnly, t as BuilderReadOnlyProvider } from "./read-only-context-Dt9N9SIG.js";
26
26
  import { r as MAPPING_TYPE_COLORS, t as MAPPING_COMPATIBILITY_COLORS } from "./mapping-colors-BIX_YeCQ.js";
27
+ import { n as useFgAskAboutAvailable } from "./askAboutBridge-kpcjcR9Y.js";
27
28
  import { n as LogsPanel } from "./logs-panel-Cn4gGng9.js";
28
- import { c as emptyTestCaseDraft, d as nextSortOrder, f as pinnedOutputsFromCanvas, g as useAgentTokenStream, h as testStatusTone, i as TEST_STATUS_TONE_CLASS, l as enabledCaseIds, m as testStatusLabel, o as draftFromTestCase, p as testRunSummaryText, r as useWorkflowTests, s as draftToInput, t as useWorkflowProposal, u as isTestRunOpen, y as latestAgentTokenStream } from "./useWorkflowProposal-UtJYycLv.js";
29
- import { r as useExecutionActions } from "./useExecutions-DSZisQHk.js";
30
- import { n as useAgentMarksStore } from "./marksStore-DGCXjTmZ.js";
29
+ import { a as draftFromTestCase, c as enabledCaseIds, d as pinnedOutputsFromCanvas, f as testRunSummaryText, h as useAgentTokenStream, l as isTestRunOpen, m as testStatusTone, n as useWorkflowTests, o as draftToInput, p as testStatusLabel, r as TEST_STATUS_TONE_CLASS, s as emptyTestCaseDraft, u as nextSortOrder, v as latestAgentTokenStream } from "./use-workflow-tests-BUzndyWO.js";
30
+ import { r as useExecutionActions } from "./useExecutions-GgjDOgcd.js";
31
+ import { n as useAgentMarksStore } from "./marksStore-a9oIMMot.js";
31
32
  import { t as notesKeyOf } from "./notesKey-5EaREBGA.js";
32
- import { a as saveWorkflowDescription, c as CreateWorkflowRefusalDialog, i as normalizeWorkflowDescription, n as useWorkflowCodeExport, o as visibleWorkflowDescription, r as commitWorkflowDescription, s as workflowDescriptionCharactersLeft } from "./useWorkflowCodeExport-Bj4QY-xY.js";
33
+ import { a as saveWorkflowDescription, c as CreateWorkflowRefusalDialog, i as normalizeWorkflowDescription, n as useWorkflowCodeExport, o as visibleWorkflowDescription, r as commitWorkflowDescription, s as workflowDescriptionCharactersLeft } from "./useWorkflowCodeExport-DrcfDTcD.js";
33
34
  import { r as RUNS_QUOTA_NAME, t as BILLING_PLANS_PATH } from "./quota-Cdt8yz7N.js";
34
35
  import { t as EntityTagPicker } from "./EntityTagPicker-BppBSEJk.js";
35
36
  import { t as FluidGridsDocsLink } from "./FluidGridsDocsLink-JxkBpOeb.js";
36
37
  import { n as runsQuotaLevel, t as readRunsQuota } from "./runsQuota-DvXR6mRN.js";
37
38
  import { a as SdkPermissionGate, i as SdkPermissionButton, s as useFluidGridsPermission, t as FLUIDGRIDS_PERMISSIONS } from "./constants-dcxg6zG6.js";
38
- import { a as useDeactivateWorkflow, d as useRestoreWorkflowVersion, o as useDeleteWorkflow, t as useActivateWorkflow, v as useWorkflowVersions } from "./useWorkflows-BY5b8r9n.js";
39
+ import { a as useDeactivateWorkflow, d as useRestoreWorkflowVersion, o as useDeleteWorkflow, t as useActivateWorkflow, v as useWorkflowVersions } from "./useWorkflows-DSZUrK_o.js";
39
40
  import { t as WorkflowDefinitionDocument } from "./WorkflowDefinitionDocument-DZLbTPUZ.js";
40
41
  import { o as countLifecycle, t as VersionLifecycleBar } from "./VersionLifecycleBar-DuphLOT0.js";
41
42
  import { $P as VersioningBehavior, Eu as DrainageStatus, PI as WorkflowTestExpectedStatus, aI as WorkflowExportFormat, jo as CodeReplaceStatus, rI as WorkflowEnvironment } from "./graphql-types-C5Tr6508.js";
42
- import { t as buildNodeDisplayMap } from "./run-display-BycKYSU0.js";
43
+ import { t as buildNodeDisplayMap } from "./run-display-UjLAoYqQ.js";
44
+ import { t as useWorkflowProposal } from "./useWorkflowProposal-B9vXLKef.js";
43
45
  import { n as useRequestedProposal } from "./useRequestedProposal-B7uPXfZB.js";
44
46
  import { t as AiCreditBalanceSlot } from "./aiCreditsBridge-BuE92tKo.js";
45
47
  import { t as downloadBlob } from "./workflow-transfer-CQnQC-ke.js";
@@ -64,6 +66,7 @@ import { AlertCircle, AlertTriangle, ArrowRight, BadgeCheck, Check, CircleHelp,
64
66
  import { isEmpty } from "radash";
65
67
  import { animate, easeOut } from "popmotion";
66
68
  import { createPortal } from "react-dom";
69
+ import { SuggestionBadge } from "@burdenoff/fe-libs/shared/proactive";
67
70
  import { useUnsavedChanges } from "@burdenoff/fe-libs/shared/hooks";
68
71
  import { buildActorFallback, useActorProfiles } from "@burdenoff/fe-libs/shared";
69
72
 
@@ -6684,9 +6687,9 @@ function IntroductionPropertyPanel() {
6684
6687
  * waiting for its chunk and React's Suspense throttle (about 0.5 s on first
6685
6688
  * open even with the chunk cached).
6686
6689
  */
6687
- const NodeDetailViewOverlay = preloadableLazy(() => import("./node-detail-view-DtZe2ggI.js").then((m) => m.NodeDetailView), "NodeDetailView");
6688
- const QuickConfigPanelOverlay = preloadableLazy(() => import("./quick-config-panel-CmL27iO-.js").then((m) => m.QuickConfigPanel), "QuickConfigPanel");
6689
- const SidebarNodeEditorOverlay = preloadableLazy(() => import("./sidebar-node-editor-C_mhVSxd.js").then((m) => m.SidebarNodeEditor), "SidebarNodeEditor");
6690
+ const NodeDetailViewOverlay = preloadableLazy(() => import("./node-detail-view-N6n3qegt.js").then((m) => m.NodeDetailView), "NodeDetailView");
6691
+ const QuickConfigPanelOverlay = preloadableLazy(() => import("./quick-config-panel-DABEVJR9.js").then((m) => m.QuickConfigPanel), "QuickConfigPanel");
6692
+ const SidebarNodeEditorOverlay = preloadableLazy(() => import("./sidebar-node-editor-BHqtoMC5.js").then((m) => m.SidebarNodeEditor), "SidebarNodeEditor");
6690
6693
  const WorkflowShareDialogOverlay = preloadableLazy(() => import("./WorkflowShareDialog-BcfzZDOj.js").then((n) => n.n).then((m) => m.WorkflowShareDialog), "WorkflowShareDialog");
6691
6694
  const ConnectionFormDialogOverlay = preloadableLazy(() => import("./ConnectionFormDialog-Dr1-CTan.js").then((n) => n.n).then((m) => m.ConnectionFormDialog), "ConnectionFormDialog");
6692
6695
  const EdgeMapperOverlay = preloadableLazy(() => import("./app-BIsCEL65.js").then((m) => m.default), "EdgeMapper");
@@ -12208,6 +12211,17 @@ function WebhookRunFollower() {
12208
12211
  *
12209
12212
  * Everything here is `data-agent="deny"`: an agent cannot read or press its
12210
12213
  * own notes. Messages render as React text, never as markup.
12214
+ *
12215
+ * ★ BOFF-13166: proactive AI suggestions about the open workflow (entity type
12216
+ * `workflow`, entityId = its workflowKey) are drawn here too. The shell's
12217
+ * `ProactiveProvider` hands them to the canvas adapter
12218
+ * (`proactive/workflowAnchorAdapter.ts`), which keeps them in the marks store.
12219
+ * One about a node (`part` = the node id) is a badge beside that node's note
12220
+ * pins; one about the workflow as a whole, or a node no longer on the canvas,
12221
+ * sits in a small panel at the top of the canvas. Each badge opens the shared
12222
+ * suggestion card. The layer reports the saved workflow it shows (key and node
12223
+ * ids) so the adapter knows which suggestions it can pin; an unsaved workflow
12224
+ * has no key and gets none.
12211
12225
  */
12212
12226
  const FLASH_MS = 1800;
12213
12227
  const RING_PAD = 8;
@@ -12315,8 +12329,15 @@ const CanvasNoteCard = ({ note, nodeOnCanvas }) => {
12315
12329
  ]
12316
12330
  });
12317
12331
  };
12332
+ /** One badge per suggestion; each opens the shared suggestion card. */
12333
+ const SuggestionBadges = ({ suggestions, controls }) => /* @__PURE__ */ jsx(Fragment$1, { children: suggestions.map((suggestion) => /* @__PURE__ */ jsx(SuggestionBadge, {
12334
+ suggestion,
12335
+ controls,
12336
+ side: "top",
12337
+ align: "end"
12338
+ }, suggestion.notificationId)) });
12318
12339
  /** The pins above one node, and the open card. */
12319
- const NodePins = ({ nodeId, notes }) => {
12340
+ const NodePins = ({ nodeId, notes, suggestions }) => {
12320
12341
  const tr = useTr();
12321
12342
  const openNoteId = useAgentMarksStore((state) => state.openNoteId);
12322
12343
  const openNote = useAgentMarksStore((state) => state.actions.openNote);
@@ -12335,9 +12356,12 @@ const NodePins = ({ nodeId, notes }) => {
12335
12356
  children: [open && /* @__PURE__ */ jsx(CanvasNoteCard, {
12336
12357
  note: open,
12337
12358
  nodeOnCanvas: true
12338
- }), /* @__PURE__ */ jsx("div", {
12359
+ }), /* @__PURE__ */ jsxs("div", {
12339
12360
  className: "flex gap-1",
12340
- children: notes.map((note) => /* @__PURE__ */ jsx("button", {
12361
+ children: [suggestions && /* @__PURE__ */ jsx(SuggestionBadges, {
12362
+ suggestions: suggestions.items,
12363
+ controls: suggestions.controls
12364
+ }), notes.map((note) => /* @__PURE__ */ jsx("button", {
12341
12365
  type: "button",
12342
12366
  "data-testid": "fg-canvas-note-pin",
12343
12367
  "aria-expanded": note.id === openNoteId,
@@ -12348,7 +12372,7 @@ const NodePins = ({ nodeId, notes }) => {
12348
12372
  "aria-hidden": "true",
12349
12373
  className: "size-3.5"
12350
12374
  }) : note.number
12351
- }, note.id))
12375
+ }, note.id))]
12352
12376
  })]
12353
12377
  })
12354
12378
  });
@@ -12440,10 +12464,48 @@ const NotesList = ({ notes, live }) => {
12440
12464
  })
12441
12465
  });
12442
12466
  };
12467
+ /** Suggestions about the workflow as a whole, at the top of the canvas. */
12468
+ const WorkflowSuggestionsPanel = ({ items, controls }) => {
12469
+ const tr = useTr();
12470
+ return /* @__PURE__ */ jsx(Panel, {
12471
+ position: "top-center",
12472
+ "data-agent": "deny",
12473
+ "data-testid": "fg-canvas-suggestions",
12474
+ className: "nodrag nopan nowheel",
12475
+ children: /* @__PURE__ */ jsxs("div", {
12476
+ className: "flex items-center gap-2 rounded-lg border border-border bg-popover px-3 py-1.5 text-xs text-foreground shadow-md",
12477
+ children: [/* @__PURE__ */ jsx("span", {
12478
+ className: "font-medium",
12479
+ children: tr("fluidgrids.proactive.canvas.heading", "AI suggestions")
12480
+ }), /* @__PURE__ */ jsx(SuggestionBadges, {
12481
+ suggestions: items,
12482
+ controls
12483
+ })]
12484
+ })
12485
+ });
12486
+ };
12487
+ /** The saved workflow on this canvas, reported for the proactive adapter. */
12488
+ function useReportProactiveCanvas(workflowKey, nodeIds) {
12489
+ const setCanvas = useAgentMarksStore((state) => state.actions.setCanvas);
12490
+ useEffect(() => {
12491
+ setCanvas(workflowKey ? {
12492
+ workflowKey,
12493
+ nodeIds
12494
+ } : null);
12495
+ }, [
12496
+ setCanvas,
12497
+ workflowKey,
12498
+ nodeIds
12499
+ ]);
12500
+ useEffect(() => () => setCanvas(null), [setCanvas]);
12501
+ }
12443
12502
  const CanvasNotesLayer = () => {
12444
12503
  const workflowKey = useFlowStore((state) => notesKeyOf(state.workflow));
12504
+ const savedKey = useFlowStore((state) => state.workflow.workflowKey);
12445
12505
  const nodeIds = useFlowStore(useShallow((state) => state.workflow.nodes.map((node) => node.id)));
12446
12506
  const allNotes = useAgentMarksStore((state) => state.notes);
12507
+ const canvasSuggestions = useAgentMarksStore((state) => state.canvasSuggestions);
12508
+ useReportProactiveCanvas(savedKey || void 0, nodeIds);
12447
12509
  const notes = useMemo(() => allNotes.filter((note) => note.workflowKey === workflowKey), [allNotes, workflowKey]);
12448
12510
  const live = useMemo(() => new Set(nodeIds), [nodeIds]);
12449
12511
  const byNode = useMemo(() => {
@@ -12452,10 +12514,36 @@ const CanvasNotesLayer = () => {
12452
12514
  if (!live.has(note.nodeId)) continue;
12453
12515
  groups.set(note.nodeId, [...groups.get(note.nodeId) ?? [], note]);
12454
12516
  }
12455
- return [...groups.entries()];
12517
+ return groups;
12456
12518
  }, [notes, live]);
12519
+ const suggestions = useMemo(() => {
12520
+ const onNode = /* @__PURE__ */ new Map();
12521
+ const onWorkflow = [];
12522
+ const { controls, items } = canvasSuggestions;
12523
+ if (!controls || !savedKey) return {
12524
+ onNode,
12525
+ onWorkflow,
12526
+ controls: null
12527
+ };
12528
+ for (const suggestion of items) {
12529
+ if (suggestion.anchor.entityId !== savedKey) continue;
12530
+ const part = suggestion.anchor.part;
12531
+ if (part && live.has(part)) onNode.set(part, [...onNode.get(part) ?? [], suggestion]);
12532
+ else onWorkflow.push(suggestion);
12533
+ }
12534
+ return {
12535
+ onNode,
12536
+ onWorkflow,
12537
+ controls
12538
+ };
12539
+ }, [
12540
+ canvasSuggestions,
12541
+ savedKey,
12542
+ live
12543
+ ]);
12544
+ const pinnedNodeIds = useMemo(() => [.../* @__PURE__ */ new Set([...byNode.keys(), ...suggestions.onNode.keys()])], [byNode, suggestions]);
12457
12545
  return /* @__PURE__ */ jsxs(Fragment$1, { children: [
12458
- /* @__PURE__ */ jsxs(ViewportPortal, { children: [byNode.map(([nodeId, nodeNotes]) => {
12546
+ /* @__PURE__ */ jsxs(ViewportPortal, { children: [[...byNode.entries()].map(([nodeId, nodeNotes]) => {
12459
12547
  const openNotes = nodeNotes.filter((note) => !note.resolved);
12460
12548
  if (openNotes.length === 0) return null;
12461
12549
  const tone = openNotes.some((note) => note.kind === "fix") ? "fix" : "info";
@@ -12464,10 +12552,21 @@ const CanvasNotesLayer = () => {
12464
12552
  tone
12465
12553
  }, nodeId);
12466
12554
  }), /* @__PURE__ */ jsx(FlashRing, {})] }),
12467
- byNode.map(([nodeId, nodeNotes]) => /* @__PURE__ */ jsx(NodePins, {
12468
- nodeId,
12469
- notes: nodeNotes
12470
- }, nodeId)),
12555
+ pinnedNodeIds.map((nodeId) => {
12556
+ const nodeSuggestions = suggestions.onNode.get(nodeId);
12557
+ return /* @__PURE__ */ jsx(NodePins, {
12558
+ nodeId,
12559
+ notes: byNode.get(nodeId) ?? [],
12560
+ ...nodeSuggestions && suggestions.controls ? { suggestions: {
12561
+ items: nodeSuggestions,
12562
+ controls: suggestions.controls
12563
+ } } : {}
12564
+ }, nodeId);
12565
+ }),
12566
+ suggestions.controls && suggestions.onWorkflow.length > 0 && /* @__PURE__ */ jsx(WorkflowSuggestionsPanel, {
12567
+ items: suggestions.onWorkflow,
12568
+ controls: suggestions.controls
12569
+ }),
12471
12570
  notes.length > 0 && /* @__PURE__ */ jsx(NotesList, {
12472
12571
  notes,
12473
12572
  live
@@ -19343,7 +19442,7 @@ const FlowBuilder = ({ readOnly = false, fitToScreen = false }) => {
19343
19442
  paletteGatesRef.current = paletteGates;
19344
19443
  }, [paletteGates]);
19345
19444
  useWarmBuilderOverlays();
19346
- useLazyAgentTools(() => import("./agentTools-BQbgd_wK.js").then(({ createBuilderAgentTools }) => createBuilderAgentTools({ durableFunctionsEnabled: () => paletteGatesRef.current })), !editingBlocked, "Agent tools");
19445
+ useLazyAgentTools(() => import("./agentTools-CSoCNDRx.js").then(({ createBuilderAgentTools }) => createBuilderAgentTools({ durableFunctionsEnabled: () => paletteGatesRef.current })), !editingBlocked, "Agent tools");
19347
19446
  const [nodes, edges, onNodesChange, onEdgesChange, onConnect] = useFlowStore(useShallow((s) => {
19348
19447
  return [
19349
19448
  s.workflow.nodes,
@@ -19353,6 +19452,8 @@ const FlowBuilder = ({ readOnly = false, fitToScreen = false }) => {
19353
19452
  s.actions.edges.onConnect
19354
19453
  ];
19355
19454
  }));
19455
+ const savedWorkflowKey = useFlowStore((s) => s.workflow.workflowKey);
19456
+ useLatestFailedRun(savedWorkflowKey || void 0, useFgAskAboutAvailable());
19356
19457
  const canvasEdges = useCanvasEdges(nodes, edges);
19357
19458
  const closeQuickConfig = useFlowStore((s) => s.actions.quickConfig.close);
19358
19459
  const ndvOpen = useFlowStore((s) => !!s.workflow.ndv);
@@ -19385,7 +19486,7 @@ const FlowBuilder = ({ readOnly = false, fitToScreen = false }) => {
19385
19486
  useEffect(() => {
19386
19487
  fitViewRef.current = fitView;
19387
19488
  }, [fitView]);
19388
- useLazyAgentTools(() => import("./canvasNoteTools-Cp3UPIM8.js").then(({ createCanvasNoteTools }) => createCanvasNoteTools({ focusNode: (nodeId) => fitViewRef.current({
19489
+ useLazyAgentTools(() => import("./canvasNoteTools-DTc3EKvg.js").then(({ createCanvasNoteTools }) => createCanvasNoteTools({ focusNode: (nodeId) => fitViewRef.current({
19389
19490
  nodes: [{ id: nodeId }],
19390
19491
  duration: 400,
19391
19492
  padding: .6,
package/dist/history.js CHANGED
@@ -1,4 +1,4 @@
1
1
  "use client";
2
- import { t as HistoryPage } from "./HistoryPage-C99YGv7V.js";
2
+ import { t as HistoryPage } from "./HistoryPage-DUcPEycb.js";
3
3
 
4
4
  export { HistoryPage };
@@ -1,7 +1,7 @@
1
1
 
2
2
  import { f as FluidGridsTheme, r as FluidGridsRefreshedTokens } from "./index-72XFgvbn.js";
3
3
  import { R as FluidGridsProviderProps, w as WorkflowData } from "./index-RWAuYE2j.js";
4
- import { j as Translator } from "./constants-XdvUxeWK.js";
4
+ import { i as Translator } from "./TranslationBridge-Bd4aJKMs.js";
5
5
  import { t as RunsQuota } from "./runsQuota-DsniKiSg.js";
6
6
  import * as React$2 from "react";
7
7
  import { HTMLAttributes, InputHTMLAttributes } from "react";