@burdenoff/fluidgrids-fe-sdk 2026.1113.6 → 2026.1113.8
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.
- package/dist/{AiStudioPage-DzvEkuoS.js → AiStudioPage-Di3eW5Lb.js} +4 -4
- package/dist/{DataSinkDashboardPage-DYuBqD2Y.js → DataSinkDashboardPage-231cS9dt.js} +1 -1
- package/dist/{ExecutionDetailPage-D40dK9iB.js → ExecutionDetailPage-B2jVApvM.js} +9 -6
- package/dist/{ExecutionsListPage-C-dujSS3.js → ExecutionsListPage-ZCmFNid9.js} +7 -4
- package/dist/{FluidGridsProvider-gB2POEu6.js → FluidGridsProvider-DQP7gPxN.js} +2 -1
- package/dist/{HistoryPage-8lQ6xf5Q.js → HistoryPage-C99YGv7V.js} +1 -1
- package/dist/{InsightsPage-YC1Bpqiz.js → InsightsPage-ySywDcp_.js} +1 -1
- package/dist/{NodesPage-DeBc3zix.js → NodesPage-B8fqXtey.js} +5 -4
- package/dist/{PaidTemplateConfirm-BadoJJPx.js → PaidTemplateConfirm-CI6TDivO.js} +1 -1
- package/dist/{QuotaExhaustedDialog-BBK3aX_0.js → QuotaExhaustedDialog-nlnRlQ2i.js} +1 -1
- package/dist/{SettingsPage-BfBa-qSk.js → SettingsPage-tKzJkG-L.js} +8 -8
- package/dist/{TemplateCard-lKGodHU8.js → TemplateCard-UnjAFsS4.js} +2 -2
- package/dist/{TemplatePreview-CwJfGqoH.js → TemplatePreview-DYxxlBad.js} +4 -4
- package/dist/{TemplatesPage-mRzYPtOC.js → TemplatesPage-Z2LDGg3g.js} +6 -6
- package/dist/TranslationBridge-Bd4aJKMs.d.ts +11 -0
- package/dist/{VariablesPage-8yuyDzCH.js → VariablesPage-_RKdfiw5.js} +1 -1
- package/dist/{WorkflowBuilder-DKqz8W6n.js → WorkflowBuilder-Dp9chOr5.js} +4 -4
- package/dist/{WorkflowBuilder-DtSOvYST.js → WorkflowBuilder-LkCC0Arp.js} +6 -6
- package/dist/{WorkflowSearchRedirect-mX-YNhkj.js → WorkflowSearchRedirect-DoiDmeyL.js} +1 -1
- package/dist/{WorkflowsList-DBKQLEUU.js → WorkflowsList-C86YEuZZ.js} +6 -6
- package/dist/agent-tools.d.ts +1 -1
- package/dist/agent-tools.js +2 -2
- package/dist/{agentTools-Dle04WMj.js → agentTools-BQbgd_wK.js} +3 -3
- package/dist/{attach-node-helpers-CNsYtLOR.js → attach-node-helpers-CtV1mej0.js} +1 -1
- package/dist/{canvasNoteTools-Bror30X8.js → canvasNoteTools-D9RwHOz4.js} +3 -3
- package/dist/{constants-XdvUxeWK.d.ts → constants-svpG-QrV.d.ts} +1 -9
- package/dist/entities-I_0kio3q.js +38 -0
- package/dist/executions.js +2 -2
- package/dist/{flow-builder-CErj7Fgi.js → flow-builder-7gVV3Y8R.js} +125 -26
- package/dist/history.js +1 -1
- package/dist/{index-Df6NgmmH.d.ts → index-8Ai8teoo.d.ts} +1 -1
- package/dist/{index-CHeY7_A1.d.ts → index-BZCX9eJJ.d.ts} +13 -0
- package/dist/index.d.ts +4 -3
- package/dist/index.js +34 -33
- package/dist/{logs-panel-2L4TLGcG.js → logs-panel-Cn4gGng9.js} +1 -1
- package/dist/{marksStore-DGCXjTmZ.js → marksStore-a9oIMMot.js} +25 -1
- package/dist/{node-detail-view-BqGpYHEE.js → node-detail-view-DtZe2ggI.js} +6 -6
- package/dist/{node-editor-tab-body-f2EIl5lh.js → node-editor-tab-body-CFprr94T.js} +3 -3
- package/dist/{node-operation-selection-Czeeb2D4.js → node-operation-selection-BGj5YwAS.js} +2 -30
- package/dist/node-type-icon-D28t8I64.js +35 -0
- package/dist/nodes.js +1 -1
- package/dist/observability.d.ts +1 -1
- package/dist/observability.js +2 -2
- package/dist/{popover-3Vs4f1Uy.js → popover-DuaVzhfH.js} +2 -2
- package/dist/proactive.d.ts +66 -0
- package/dist/proactive.js +237 -0
- package/dist/{quick-config-panel-Aja-lh3W.js → quick-config-panel-CmL27iO-.js} +5 -4
- package/dist/{schedule-panel-DCzLeJvi.js → schedule-panel-DIUNqU9B.js} +5 -5
- package/dist/settings.js +1 -1
- package/dist/{sidebar-node-editor-CWdejdLi.js → sidebar-node-editor-C_mhVSxd.js} +5 -4
- package/dist/templates.js +2 -2
- package/dist/{uiMarkTools-DZ6akjQK.js → uiMarkTools-B2581Qg-.js} +1 -1
- package/dist/{useWorkflowProposal-UtJYycLv.js → use-workflow-tests-BUzndyWO.js} +4 -3265
- package/dist/{useAgentDefinitions-DoMEv0kS.js → useAgentDefinitions-CKZ7oDZD.js} +1 -1
- package/dist/{useDurableParity-9mQYNpiP.js → useDurableParity-BUSM-z_7.js} +1 -1
- package/dist/{useExecutions-BvldyVgF.js → useExecutions-DSZisQHk.js} +1 -1
- package/dist/{useGlobalStoreClient-CpTRykJx.js → useGlobalStoreClient-CXPqlK1M.js} +1 -1
- package/dist/{useObservability-Cps9Y9a3.js → useObservability-n7Qdc8Xg.js} +1 -1
- package/dist/{useRunHistory-DoxQsQIm.js → useRunHistory-Bxs6LrME.js} +1 -1
- package/dist/{useWorkflowCodeExport-BLl0hv2J.js → useWorkflowCodeExport-Bj4QY-xY.js} +1 -1
- package/dist/useWorkflowProposal-B9vXLKef.js +3280 -0
- package/dist/{useWorkflows-Z4M64JlD.js → useWorkflows-BY5b8r9n.js} +1 -1
- package/dist/workflow-builder.js +5 -5
- package/dist/workflow-host.d.ts +2 -1
- package/dist/workflow-pages.d.ts +1 -1
- package/dist/workflow-pages.js +15 -15
- package/dist/workflow-preview.js +1 -1
- package/dist/workflows-list.js +1 -1
- package/package.json +7 -3
|
@@ -1,13 +1,14 @@
|
|
|
1
1
|
"use client";
|
|
2
|
-
import { A as
|
|
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-
|
|
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";
|
|
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-
|
|
7
|
+
import { t as useGlobalStoreClient } from "./useGlobalStoreClient-CXPqlK1M.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-
|
|
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";
|
|
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
|
+
import { n as isImageIcon, t as NodeTypeIcon } from "./node-type-icon-D28t8I64.js";
|
|
11
12
|
import { i as filterPaletteNodes } from "./durable-nodes-DXCCQYWD.js";
|
|
12
13
|
import { c as NODE_TYPE_DRAG_DATA_FORMAT, l as STICKY_NOTE_TYPE, s as NODE_OPERATION_DRAG_DATA_FORMAT } from "./sticky-notes-23j-wL6Q.js";
|
|
13
14
|
import { t as Button$2 } from "./button-DG7y_FVJ.js";
|
|
@@ -17,28 +18,29 @@ import { o as emitUpgradeClicked, t as emitNodeInstalled } from "./fluidgridsEve
|
|
|
17
18
|
import { n as getFluidGridsClient, s as waitForFluidGridsClient } from "./client-Ctl4jmY3.js";
|
|
18
19
|
import { c as NodeSchemaIntrospectionDocument, l as RemoveNodeFromWorkflowsDocument, n as useConnections, s as NodeUsageStatusDocument } from "./useConnections-BlB0gbOB.js";
|
|
19
20
|
import { o as throwIfResultError, t as describeOperationError } from "./errors-xPZ-IbQd.js";
|
|
20
|
-
import { n as firstInputHandleId, t as computeAttachPosition } from "./attach-node-helpers-
|
|
21
|
+
import { n as firstInputHandleId, t as computeAttachPosition } from "./attach-node-helpers-CtV1mej0.js";
|
|
21
22
|
import { a as DialogFooter$1, i as DialogDescription$1, l as DialogTitle$1, o as DialogHeader$1, r as DialogContent$1, t as Dialog$1 } from "./dialog-BVd152GS.js";
|
|
22
23
|
import { t as NavigationV2Provider } from "./NavigationV2Provider-DCDt35eG.js";
|
|
23
24
|
import { i as emitFluidGridsEvent } from "./token-refresh-link-BjN7H4qA.js";
|
|
24
25
|
import { n as useBuilderReadOnly, t as BuilderReadOnlyProvider } from "./read-only-context-Dt9N9SIG.js";
|
|
25
26
|
import { r as MAPPING_TYPE_COLORS, t as MAPPING_COMPATIBILITY_COLORS } from "./mapping-colors-BIX_YeCQ.js";
|
|
26
|
-
import { n as LogsPanel } from "./logs-panel-
|
|
27
|
-
import {
|
|
28
|
-
import { r as useExecutionActions } from "./useExecutions-
|
|
29
|
-
import { n as useAgentMarksStore } from "./marksStore-
|
|
27
|
+
import { n as LogsPanel } from "./logs-panel-Cn4gGng9.js";
|
|
28
|
+
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";
|
|
29
|
+
import { r as useExecutionActions } from "./useExecutions-DSZisQHk.js";
|
|
30
|
+
import { n as useAgentMarksStore } from "./marksStore-a9oIMMot.js";
|
|
30
31
|
import { t as notesKeyOf } from "./notesKey-5EaREBGA.js";
|
|
31
|
-
import { a as saveWorkflowDescription, c as CreateWorkflowRefusalDialog, i as normalizeWorkflowDescription, n as useWorkflowCodeExport, o as visibleWorkflowDescription, r as commitWorkflowDescription, s as workflowDescriptionCharactersLeft } from "./useWorkflowCodeExport-
|
|
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";
|
|
32
33
|
import { r as RUNS_QUOTA_NAME, t as BILLING_PLANS_PATH } from "./quota-Cdt8yz7N.js";
|
|
33
34
|
import { t as EntityTagPicker } from "./EntityTagPicker-BppBSEJk.js";
|
|
34
35
|
import { t as FluidGridsDocsLink } from "./FluidGridsDocsLink-JxkBpOeb.js";
|
|
35
36
|
import { n as runsQuotaLevel, t as readRunsQuota } from "./runsQuota-DvXR6mRN.js";
|
|
36
37
|
import { a as SdkPermissionGate, i as SdkPermissionButton, s as useFluidGridsPermission, t as FLUIDGRIDS_PERMISSIONS } from "./constants-dcxg6zG6.js";
|
|
37
|
-
import { a as useDeactivateWorkflow, d as useRestoreWorkflowVersion, o as useDeleteWorkflow, t as useActivateWorkflow, v as useWorkflowVersions } from "./useWorkflows-
|
|
38
|
+
import { a as useDeactivateWorkflow, d as useRestoreWorkflowVersion, o as useDeleteWorkflow, t as useActivateWorkflow, v as useWorkflowVersions } from "./useWorkflows-BY5b8r9n.js";
|
|
38
39
|
import { t as WorkflowDefinitionDocument } from "./WorkflowDefinitionDocument-DZLbTPUZ.js";
|
|
39
40
|
import { o as countLifecycle, t as VersionLifecycleBar } from "./VersionLifecycleBar-DuphLOT0.js";
|
|
40
41
|
import { $P as VersioningBehavior, Eu as DrainageStatus, PI as WorkflowTestExpectedStatus, aI as WorkflowExportFormat, jo as CodeReplaceStatus, rI as WorkflowEnvironment } from "./graphql-types-C5Tr6508.js";
|
|
41
42
|
import { t as buildNodeDisplayMap } from "./run-display-BycKYSU0.js";
|
|
43
|
+
import { t as useWorkflowProposal } from "./useWorkflowProposal-B9vXLKef.js";
|
|
42
44
|
import { n as useRequestedProposal } from "./useRequestedProposal-B7uPXfZB.js";
|
|
43
45
|
import { t as AiCreditBalanceSlot } from "./aiCreditsBridge-BuE92tKo.js";
|
|
44
46
|
import { t as downloadBlob } from "./workflow-transfer-CQnQC-ke.js";
|
|
@@ -63,6 +65,7 @@ import { AlertCircle, AlertTriangle, ArrowRight, BadgeCheck, Check, CircleHelp,
|
|
|
63
65
|
import { isEmpty } from "radash";
|
|
64
66
|
import { animate, easeOut } from "popmotion";
|
|
65
67
|
import { createPortal } from "react-dom";
|
|
68
|
+
import { SuggestionBadge } from "@burdenoff/fe-libs/shared/proactive";
|
|
66
69
|
import { useUnsavedChanges } from "@burdenoff/fe-libs/shared/hooks";
|
|
67
70
|
import { buildActorFallback, useActorProfiles } from "@burdenoff/fe-libs/shared";
|
|
68
71
|
|
|
@@ -6683,9 +6686,9 @@ function IntroductionPropertyPanel() {
|
|
|
6683
6686
|
* waiting for its chunk and React's Suspense throttle (about 0.5 s on first
|
|
6684
6687
|
* open even with the chunk cached).
|
|
6685
6688
|
*/
|
|
6686
|
-
const NodeDetailViewOverlay = preloadableLazy(() => import("./node-detail-view-
|
|
6687
|
-
const QuickConfigPanelOverlay = preloadableLazy(() => import("./quick-config-panel-
|
|
6688
|
-
const SidebarNodeEditorOverlay = preloadableLazy(() => import("./sidebar-node-editor-
|
|
6689
|
+
const NodeDetailViewOverlay = preloadableLazy(() => import("./node-detail-view-DtZe2ggI.js").then((m) => m.NodeDetailView), "NodeDetailView");
|
|
6690
|
+
const QuickConfigPanelOverlay = preloadableLazy(() => import("./quick-config-panel-CmL27iO-.js").then((m) => m.QuickConfigPanel), "QuickConfigPanel");
|
|
6691
|
+
const SidebarNodeEditorOverlay = preloadableLazy(() => import("./sidebar-node-editor-C_mhVSxd.js").then((m) => m.SidebarNodeEditor), "SidebarNodeEditor");
|
|
6689
6692
|
const WorkflowShareDialogOverlay = preloadableLazy(() => import("./WorkflowShareDialog-BcfzZDOj.js").then((n) => n.n).then((m) => m.WorkflowShareDialog), "WorkflowShareDialog");
|
|
6690
6693
|
const ConnectionFormDialogOverlay = preloadableLazy(() => import("./ConnectionFormDialog-Dr1-CTan.js").then((n) => n.n).then((m) => m.ConnectionFormDialog), "ConnectionFormDialog");
|
|
6691
6694
|
const EdgeMapperOverlay = preloadableLazy(() => import("./app-BIsCEL65.js").then((m) => m.default), "EdgeMapper");
|
|
@@ -12207,6 +12210,17 @@ function WebhookRunFollower() {
|
|
|
12207
12210
|
*
|
|
12208
12211
|
* Everything here is `data-agent="deny"`: an agent cannot read or press its
|
|
12209
12212
|
* own notes. Messages render as React text, never as markup.
|
|
12213
|
+
*
|
|
12214
|
+
* ★ BOFF-13166: proactive AI suggestions about the open workflow (entity type
|
|
12215
|
+
* `workflow`, entityId = its workflowKey) are drawn here too. The shell's
|
|
12216
|
+
* `ProactiveProvider` hands them to the canvas adapter
|
|
12217
|
+
* (`proactive/workflowAnchorAdapter.ts`), which keeps them in the marks store.
|
|
12218
|
+
* One about a node (`part` = the node id) is a badge beside that node's note
|
|
12219
|
+
* pins; one about the workflow as a whole, or a node no longer on the canvas,
|
|
12220
|
+
* sits in a small panel at the top of the canvas. Each badge opens the shared
|
|
12221
|
+
* suggestion card. The layer reports the saved workflow it shows (key and node
|
|
12222
|
+
* ids) so the adapter knows which suggestions it can pin; an unsaved workflow
|
|
12223
|
+
* has no key and gets none.
|
|
12210
12224
|
*/
|
|
12211
12225
|
const FLASH_MS = 1800;
|
|
12212
12226
|
const RING_PAD = 8;
|
|
@@ -12314,8 +12328,15 @@ const CanvasNoteCard = ({ note, nodeOnCanvas }) => {
|
|
|
12314
12328
|
]
|
|
12315
12329
|
});
|
|
12316
12330
|
};
|
|
12331
|
+
/** One badge per suggestion; each opens the shared suggestion card. */
|
|
12332
|
+
const SuggestionBadges = ({ suggestions, controls }) => /* @__PURE__ */ jsx(Fragment$1, { children: suggestions.map((suggestion) => /* @__PURE__ */ jsx(SuggestionBadge, {
|
|
12333
|
+
suggestion,
|
|
12334
|
+
controls,
|
|
12335
|
+
side: "top",
|
|
12336
|
+
align: "end"
|
|
12337
|
+
}, suggestion.notificationId)) });
|
|
12317
12338
|
/** The pins above one node, and the open card. */
|
|
12318
|
-
const NodePins = ({ nodeId, notes }) => {
|
|
12339
|
+
const NodePins = ({ nodeId, notes, suggestions }) => {
|
|
12319
12340
|
const tr = useTr();
|
|
12320
12341
|
const openNoteId = useAgentMarksStore((state) => state.openNoteId);
|
|
12321
12342
|
const openNote = useAgentMarksStore((state) => state.actions.openNote);
|
|
@@ -12334,9 +12355,12 @@ const NodePins = ({ nodeId, notes }) => {
|
|
|
12334
12355
|
children: [open && /* @__PURE__ */ jsx(CanvasNoteCard, {
|
|
12335
12356
|
note: open,
|
|
12336
12357
|
nodeOnCanvas: true
|
|
12337
|
-
}), /* @__PURE__ */
|
|
12358
|
+
}), /* @__PURE__ */ jsxs("div", {
|
|
12338
12359
|
className: "flex gap-1",
|
|
12339
|
-
children:
|
|
12360
|
+
children: [suggestions && /* @__PURE__ */ jsx(SuggestionBadges, {
|
|
12361
|
+
suggestions: suggestions.items,
|
|
12362
|
+
controls: suggestions.controls
|
|
12363
|
+
}), notes.map((note) => /* @__PURE__ */ jsx("button", {
|
|
12340
12364
|
type: "button",
|
|
12341
12365
|
"data-testid": "fg-canvas-note-pin",
|
|
12342
12366
|
"aria-expanded": note.id === openNoteId,
|
|
@@ -12347,7 +12371,7 @@ const NodePins = ({ nodeId, notes }) => {
|
|
|
12347
12371
|
"aria-hidden": "true",
|
|
12348
12372
|
className: "size-3.5"
|
|
12349
12373
|
}) : note.number
|
|
12350
|
-
}, note.id))
|
|
12374
|
+
}, note.id))]
|
|
12351
12375
|
})]
|
|
12352
12376
|
})
|
|
12353
12377
|
});
|
|
@@ -12439,10 +12463,48 @@ const NotesList = ({ notes, live }) => {
|
|
|
12439
12463
|
})
|
|
12440
12464
|
});
|
|
12441
12465
|
};
|
|
12466
|
+
/** Suggestions about the workflow as a whole, at the top of the canvas. */
|
|
12467
|
+
const WorkflowSuggestionsPanel = ({ items, controls }) => {
|
|
12468
|
+
const tr = useTr();
|
|
12469
|
+
return /* @__PURE__ */ jsx(Panel, {
|
|
12470
|
+
position: "top-center",
|
|
12471
|
+
"data-agent": "deny",
|
|
12472
|
+
"data-testid": "fg-canvas-suggestions",
|
|
12473
|
+
className: "nodrag nopan nowheel",
|
|
12474
|
+
children: /* @__PURE__ */ jsxs("div", {
|
|
12475
|
+
className: "flex items-center gap-2 rounded-lg border border-border bg-popover px-3 py-1.5 text-xs text-foreground shadow-md",
|
|
12476
|
+
children: [/* @__PURE__ */ jsx("span", {
|
|
12477
|
+
className: "font-medium",
|
|
12478
|
+
children: tr("fluidgrids.proactive.canvas.heading", "AI suggestions")
|
|
12479
|
+
}), /* @__PURE__ */ jsx(SuggestionBadges, {
|
|
12480
|
+
suggestions: items,
|
|
12481
|
+
controls
|
|
12482
|
+
})]
|
|
12483
|
+
})
|
|
12484
|
+
});
|
|
12485
|
+
};
|
|
12486
|
+
/** The saved workflow on this canvas, reported for the proactive adapter. */
|
|
12487
|
+
function useReportProactiveCanvas(workflowKey, nodeIds) {
|
|
12488
|
+
const setCanvas = useAgentMarksStore((state) => state.actions.setCanvas);
|
|
12489
|
+
useEffect(() => {
|
|
12490
|
+
setCanvas(workflowKey ? {
|
|
12491
|
+
workflowKey,
|
|
12492
|
+
nodeIds
|
|
12493
|
+
} : null);
|
|
12494
|
+
}, [
|
|
12495
|
+
setCanvas,
|
|
12496
|
+
workflowKey,
|
|
12497
|
+
nodeIds
|
|
12498
|
+
]);
|
|
12499
|
+
useEffect(() => () => setCanvas(null), [setCanvas]);
|
|
12500
|
+
}
|
|
12442
12501
|
const CanvasNotesLayer = () => {
|
|
12443
12502
|
const workflowKey = useFlowStore((state) => notesKeyOf(state.workflow));
|
|
12503
|
+
const savedKey = useFlowStore((state) => state.workflow.workflowKey);
|
|
12444
12504
|
const nodeIds = useFlowStore(useShallow((state) => state.workflow.nodes.map((node) => node.id)));
|
|
12445
12505
|
const allNotes = useAgentMarksStore((state) => state.notes);
|
|
12506
|
+
const canvasSuggestions = useAgentMarksStore((state) => state.canvasSuggestions);
|
|
12507
|
+
useReportProactiveCanvas(savedKey || void 0, nodeIds);
|
|
12446
12508
|
const notes = useMemo(() => allNotes.filter((note) => note.workflowKey === workflowKey), [allNotes, workflowKey]);
|
|
12447
12509
|
const live = useMemo(() => new Set(nodeIds), [nodeIds]);
|
|
12448
12510
|
const byNode = useMemo(() => {
|
|
@@ -12451,10 +12513,36 @@ const CanvasNotesLayer = () => {
|
|
|
12451
12513
|
if (!live.has(note.nodeId)) continue;
|
|
12452
12514
|
groups.set(note.nodeId, [...groups.get(note.nodeId) ?? [], note]);
|
|
12453
12515
|
}
|
|
12454
|
-
return
|
|
12516
|
+
return groups;
|
|
12455
12517
|
}, [notes, live]);
|
|
12518
|
+
const suggestions = useMemo(() => {
|
|
12519
|
+
const onNode = /* @__PURE__ */ new Map();
|
|
12520
|
+
const onWorkflow = [];
|
|
12521
|
+
const { controls, items } = canvasSuggestions;
|
|
12522
|
+
if (!controls || !savedKey) return {
|
|
12523
|
+
onNode,
|
|
12524
|
+
onWorkflow,
|
|
12525
|
+
controls: null
|
|
12526
|
+
};
|
|
12527
|
+
for (const suggestion of items) {
|
|
12528
|
+
if (suggestion.anchor.entityId !== savedKey) continue;
|
|
12529
|
+
const part = suggestion.anchor.part;
|
|
12530
|
+
if (part && live.has(part)) onNode.set(part, [...onNode.get(part) ?? [], suggestion]);
|
|
12531
|
+
else onWorkflow.push(suggestion);
|
|
12532
|
+
}
|
|
12533
|
+
return {
|
|
12534
|
+
onNode,
|
|
12535
|
+
onWorkflow,
|
|
12536
|
+
controls
|
|
12537
|
+
};
|
|
12538
|
+
}, [
|
|
12539
|
+
canvasSuggestions,
|
|
12540
|
+
savedKey,
|
|
12541
|
+
live
|
|
12542
|
+
]);
|
|
12543
|
+
const pinnedNodeIds = useMemo(() => [.../* @__PURE__ */ new Set([...byNode.keys(), ...suggestions.onNode.keys()])], [byNode, suggestions]);
|
|
12456
12544
|
return /* @__PURE__ */ jsxs(Fragment$1, { children: [
|
|
12457
|
-
/* @__PURE__ */ jsxs(ViewportPortal, { children: [byNode.map(([nodeId, nodeNotes]) => {
|
|
12545
|
+
/* @__PURE__ */ jsxs(ViewportPortal, { children: [[...byNode.entries()].map(([nodeId, nodeNotes]) => {
|
|
12458
12546
|
const openNotes = nodeNotes.filter((note) => !note.resolved);
|
|
12459
12547
|
if (openNotes.length === 0) return null;
|
|
12460
12548
|
const tone = openNotes.some((note) => note.kind === "fix") ? "fix" : "info";
|
|
@@ -12463,10 +12551,21 @@ const CanvasNotesLayer = () => {
|
|
|
12463
12551
|
tone
|
|
12464
12552
|
}, nodeId);
|
|
12465
12553
|
}), /* @__PURE__ */ jsx(FlashRing, {})] }),
|
|
12466
|
-
|
|
12467
|
-
nodeId
|
|
12468
|
-
|
|
12469
|
-
|
|
12554
|
+
pinnedNodeIds.map((nodeId) => {
|
|
12555
|
+
const nodeSuggestions = suggestions.onNode.get(nodeId);
|
|
12556
|
+
return /* @__PURE__ */ jsx(NodePins, {
|
|
12557
|
+
nodeId,
|
|
12558
|
+
notes: byNode.get(nodeId) ?? [],
|
|
12559
|
+
...nodeSuggestions && suggestions.controls ? { suggestions: {
|
|
12560
|
+
items: nodeSuggestions,
|
|
12561
|
+
controls: suggestions.controls
|
|
12562
|
+
} } : {}
|
|
12563
|
+
}, nodeId);
|
|
12564
|
+
}),
|
|
12565
|
+
suggestions.controls && suggestions.onWorkflow.length > 0 && /* @__PURE__ */ jsx(WorkflowSuggestionsPanel, {
|
|
12566
|
+
items: suggestions.onWorkflow,
|
|
12567
|
+
controls: suggestions.controls
|
|
12568
|
+
}),
|
|
12470
12569
|
notes.length > 0 && /* @__PURE__ */ jsx(NotesList, {
|
|
12471
12570
|
notes,
|
|
12472
12571
|
live
|
|
@@ -19342,7 +19441,7 @@ const FlowBuilder = ({ readOnly = false, fitToScreen = false }) => {
|
|
|
19342
19441
|
paletteGatesRef.current = paletteGates;
|
|
19343
19442
|
}, [paletteGates]);
|
|
19344
19443
|
useWarmBuilderOverlays();
|
|
19345
|
-
useLazyAgentTools(() => import("./agentTools-
|
|
19444
|
+
useLazyAgentTools(() => import("./agentTools-BQbgd_wK.js").then(({ createBuilderAgentTools }) => createBuilderAgentTools({ durableFunctionsEnabled: () => paletteGatesRef.current })), !editingBlocked, "Agent tools");
|
|
19346
19445
|
const [nodes, edges, onNodesChange, onEdgesChange, onConnect] = useFlowStore(useShallow((s) => {
|
|
19347
19446
|
return [
|
|
19348
19447
|
s.workflow.nodes,
|
|
@@ -19384,7 +19483,7 @@ const FlowBuilder = ({ readOnly = false, fitToScreen = false }) => {
|
|
|
19384
19483
|
useEffect(() => {
|
|
19385
19484
|
fitViewRef.current = fitView;
|
|
19386
19485
|
}, [fitView]);
|
|
19387
|
-
useLazyAgentTools(() => import("./canvasNoteTools-
|
|
19486
|
+
useLazyAgentTools(() => import("./canvasNoteTools-D9RwHOz4.js").then(({ createCanvasNoteTools }) => createCanvasNoteTools({ focusNode: (nodeId) => fitViewRef.current({
|
|
19388
19487
|
nodes: [{ id: nodeId }],
|
|
19389
19488
|
duration: 400,
|
|
19390
19489
|
padding: .6,
|
package/dist/history.js
CHANGED
|
@@ -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 {
|
|
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";
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
|
|
2
2
|
import { FC } from "react";
|
|
3
|
+
import { ProactiveSuggestion, SuggestionControls } from "@burdenoff/fe-libs/shared/proactive";
|
|
3
4
|
import { AnyDefinedAgentTool } from "@burdenoff/fe-libs/shared/agent-tools";
|
|
4
5
|
declare const AGENT_OPERATIONS: {
|
|
5
6
|
readonly AgentFindWorkflows: "\n query AgentFindWorkflows($input: ListWorkflowDefinitionsInput!) {\n workflowDefinitions(input: $input) {\n total\n hasMore\n items { id name workflowKey version status updatedAt workspaceId deletedAt description }\n }\n }\n";
|
|
@@ -72,6 +73,14 @@ interface NewCanvasNote {
|
|
|
72
73
|
kind: CanvasNoteKind;
|
|
73
74
|
message: string;
|
|
74
75
|
}
|
|
76
|
+
interface ProactiveCanvas {
|
|
77
|
+
workflowKey: string;
|
|
78
|
+
nodeIds: readonly string[];
|
|
79
|
+
}
|
|
80
|
+
interface CanvasSuggestions {
|
|
81
|
+
items: readonly ProactiveSuggestion[];
|
|
82
|
+
controls: SuggestionControls | null;
|
|
83
|
+
}
|
|
75
84
|
interface AgentMarksState {
|
|
76
85
|
callouts: AgentCallout[];
|
|
77
86
|
notes: CanvasNote[];
|
|
@@ -81,6 +90,8 @@ interface AgentMarksState {
|
|
|
81
90
|
nodeId: string;
|
|
82
91
|
token: number;
|
|
83
92
|
} | null;
|
|
93
|
+
canvas: ProactiveCanvas | null;
|
|
94
|
+
canvasSuggestions: CanvasSuggestions;
|
|
84
95
|
actions: {
|
|
85
96
|
addCallout: (callout: {
|
|
86
97
|
label: string;
|
|
@@ -98,6 +109,8 @@ interface AgentMarksState {
|
|
|
98
109
|
clearNotes: (workflowKey?: string) => number;
|
|
99
110
|
openNote: (id: string | null) => void;
|
|
100
111
|
flashNode: (nodeId: string) => void;
|
|
112
|
+
setCanvas: (canvas: ProactiveCanvas | null) => void;
|
|
113
|
+
setCanvasSuggestions: (items: readonly ProactiveSuggestion[], controls: SuggestionControls | null) => void;
|
|
101
114
|
};
|
|
102
115
|
}
|
|
103
116
|
declare const useAgentMarksStore: import("zustand").UseBoundStore<import("zustand").StoreApi<AgentMarksState>>;
|