@burdenoff/fluidgrids-fe-sdk 2026.1111.14 → 2026.1111.16

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 (43) hide show
  1. package/README.md +41 -0
  2. package/dist/{ExecutionDetailPage-itor_whl.js → ExecutionDetailPage-D-0_POAf.js} +4 -4
  3. package/dist/{FluidGridsProvider-B30VcLdX.js → FluidGridsProvider-DmvFADFa.js} +20 -309
  4. package/dist/{HistoryPage-DueEld8g.js → HistoryPage-BbUgxx1I.js} +1 -1
  5. package/dist/{InsightsPage-DQ7KCR9h.js → InsightsPage-s6f5bU-8.js} +2 -2
  6. package/dist/{ManagedAiPolicyAuthority-C0YPTJMS.js → ManagedAiPolicyAuthority-DsSaz-vg.js} +2 -2
  7. package/dist/{MissingNodesInstallModal-Cj31oMDX.js → MissingNodesInstallModal-B-9gHy2K.js} +1 -1
  8. package/dist/{TemplateConfigurationModal-BAPCG8y-.js → TemplateConfigurationModal-D_Mvgxqa.js} +1 -1
  9. package/dist/{TemplateDetailPanel-CZ1uxEQL.js → TemplateDetailPanel-DfFfUcOe.js} +1 -1
  10. package/dist/{TemplatesPage-DWdgZnIH.js → TemplatesPage-Cku13bav.js} +5 -4
  11. package/dist/{WorkflowSearchRedirect-C8vhSZK9.js → WorkflowSearchRedirect-CaoOOpEl.js} +13 -9
  12. package/dist/{WorkflowShareDialog-DnBQA3V6.js → WorkflowShareDialog-6RRDe-_v.js} +2 -1
  13. package/dist/{WorkflowsList-74jjJFsJ.js → WorkflowsList-B2j1Pehb.js} +5 -4
  14. package/dist/agent-tools.d.ts +3 -0
  15. package/dist/agent-tools.js +5 -0
  16. package/dist/{agentTools-D5AW7zHn.js → agentTools-DJ5o2ekg.js} +2 -2
  17. package/dist/{canvasNoteTools-BqQTTCll.js → canvasNoteTools-D3zUdEeg.js} +3 -2
  18. package/dist/executions.js +1 -1
  19. package/dist/{flow-builder-BR8p5tXG.js → flow-builder-DEzT8TQu.js} +34 -157
  20. package/dist/fluidgridsEvents-CNdcrUNN.js +310 -0
  21. package/dist/history.js +1 -1
  22. package/dist/index-CHeY7_A1.d.ts +105 -0
  23. package/dist/{index-CLqh2u28.d.ts → index-DRf25-D3.d.ts} +7 -105
  24. package/dist/index.d.ts +3 -2
  25. package/dist/index.js +21 -946
  26. package/dist/marksStore-DGCXjTmZ.js +151 -0
  27. package/dist/{node-detail-view-Dnhqdn8C.js → node-detail-view-LNqeIqN-.js} +3 -3
  28. package/dist/observability.d.ts +1 -1
  29. package/dist/observability.js +1 -1
  30. package/dist/{quick-config-panel-C4tSpCrt.js → quick-config-panel-D3ogsaFL.js} +2 -2
  31. package/dist/settings.js +1 -1
  32. package/dist/templates.js +1 -1
  33. package/dist/uiMarkTools-nlmzsHQM.js +937 -0
  34. package/dist/{useExecutions-CNEN1ENQ.js → useExecutions-DAzeWHS6.js} +2 -1
  35. package/dist/{useObservability-CmFFXmKb.js → useObservability-COCZ0hUS.js} +2 -1
  36. package/dist/{useRunHistory-DhU_mrzF.js → useRunHistory-CsYUbouO.js} +1 -1
  37. package/dist/{useWorkflows-D01LC39Y.js → useWorkflows-w4Dx2fF2.js} +25 -5
  38. package/dist/workflow-builder.js +2 -2
  39. package/dist/workflow-route.d.ts +33 -0
  40. package/dist/workflow-route.js +4 -0
  41. package/dist/workflowRouteData-BkfVOc-O.js +169 -0
  42. package/dist/workflows-list.js +1 -1
  43. package/package.json +9 -1
@@ -1,12 +1,13 @@
1
1
  "use client";
2
- import { c as useImportWorkflow, h as useWorkflowDefinitions, l as useLazyWorkflowDefinition, n as useCreateWorkflow, o as useDeleteWorkflow, s as useDuplicateWorkflow, u as usePreviewN8nImport } from "./useWorkflows-D01LC39Y.js";
3
- import { An as isQuotaExhaustedFailure, Dt as createThenOpen, Tn as BILLING_PLANS_PATH, Un as FLUIDGRIDS_FLAGS, Zn as useFluidGridsFlag, t as FluidGridsContext } from "./FluidGridsProvider-B30VcLdX.js";
4
- import { C as readProjectArchive, D as workflowNameFromFile, E as typeScriptModuleFile, O as CreateWorkflowRefusalDialog, S as primaryImportModule, T as typeScriptImportSource, _ as importFileKind, a as downloadWorkflowExport, c as canShareWorkflow, d as MAX_IMPORT_ARCHIVE_BYTES, f as MAX_IMPORT_SOURCE_BYTES, g as importAcceptAttribute, k as QuotaExhaustedDialog, l as CODE_EXPORT_FORMATS, m as checkTypeScriptImport, o as parseWorkflowImport, p as assertImportByteSize, r as useExportWorkflowAs, s as canEditWorkflow, t as WorkflowShareDialog, u as ImportSourceError } from "./WorkflowShareDialog-DnBQA3V6.js";
2
+ import { c as useImportWorkflow, h as useWorkflowDefinitions, l as useLazyWorkflowDefinition, n as useCreateWorkflow, o as useDeleteWorkflow, s as useDuplicateWorkflow, u as usePreviewN8nImport } from "./useWorkflows-w4Dx2fF2.js";
3
+ import { Dn as FLUIDGRIDS_FLAGS, Dt as createThenOpen, Fn as useFluidGridsFlag, t as FluidGridsContext } from "./FluidGridsProvider-DmvFADFa.js";
4
+ import { C as readProjectArchive, D as workflowNameFromFile, E as typeScriptModuleFile, O as CreateWorkflowRefusalDialog, S as primaryImportModule, T as typeScriptImportSource, _ as importFileKind, a as downloadWorkflowExport, c as canShareWorkflow, d as MAX_IMPORT_ARCHIVE_BYTES, f as MAX_IMPORT_SOURCE_BYTES, g as importAcceptAttribute, k as QuotaExhaustedDialog, l as CODE_EXPORT_FORMATS, m as checkTypeScriptImport, o as parseWorkflowImport, p as assertImportByteSize, r as useExportWorkflowAs, s as canEditWorkflow, t as WorkflowShareDialog, u as ImportSourceError } from "./WorkflowShareDialog-6RRDe-_v.js";
5
+ import { f as BILLING_PLANS_PATH, y as isQuotaExhaustedFailure } from "./fluidgridsEvents-CNdcrUNN.js";
5
6
  import { H as useFlowStore } from "./node-operation-selection--oy-yEq_.js";
6
7
  import { CF as WorkflowExportFormat, gF as WorkflowAccessFilter, hI as FLUIDGRIDS_PERMISSIONS, vI as SdkPermissionButton, xI as useFluidGridsPermission, yI as SdkPermissionGate } from "./graphql-types-XcDLtFwU.js";
7
8
  import { r as useTr } from "./TranslationBridge-Da-TPgQm.js";
8
9
  import { $t as RenameWorkflowFolderDocument, Bi as describeOperationError, Et as MoveWorkflowFolderDocument, K as DeleteWorkflowFolderDocument, M as CreateWorkflowFolderDocument, N as CreateWorkflowProjectDocument, Oi as getFluidGridsClient, Pr as WorkflowFoldersDocument, Ui as throwIfResultError, Ur as WorkflowProjectsDocument, _ as BulkMoveWorkflowsToFolderDocument, en as RenameWorkflowProjectDocument, g as BulkDeleteWorkflowsDocument, h as BulkAssignWorkflowsToProjectDocument, oa as __exportAll, q as DeleteWorkflowProjectDocument } from "./node-endpoint-configs-DHFGA5MQ.js";
9
- import { a as useExecutions } from "./useExecutions-CNEN1ENQ.js";
10
+ import { a as useExecutions } from "./useExecutions-DAzeWHS6.js";
10
11
  import { a as firstWorkflowProgress, i as builderPathFor, r as GUIDED_TOUR_STATE } from "./firstWorkflow-C_h0KMB2.js";
11
12
  import { n as useFluidGridsPageControls } from "./pageControlsBridge-0pX9s-3k.js";
12
13
  import { i as workflowsListControls } from "./pageControlSpecs-DZJ9K37m.js";
@@ -0,0 +1,3 @@
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";
3
+ export { AgentCalloutOverlay, type AgentCalloutOverlayProps, type CanvasNote, type FluidGridsAgentToolDeps, type UiMarkToolOptions, createFluidGridsAgentTools, createUiMarkTools, pickTriggerNode, resetAgentMarks, triggerNodesOf, useAgentMarksStore };
@@ -0,0 +1,5 @@
1
+ "use client";
2
+ import { a as triggerNodesOf, i as pickTriggerNode, n as AgentCalloutOverlay, r as createFluidGridsAgentTools, t as createUiMarkTools } from "./uiMarkTools-nlmzsHQM.js";
3
+ import { n as useAgentMarksStore, t as resetAgentMarks } from "./marksStore-DGCXjTmZ.js";
4
+
5
+ export { AgentCalloutOverlay, createFluidGridsAgentTools, createUiMarkTools, pickTriggerNode, resetAgentMarks, triggerNodesOf, useAgentMarksStore };
@@ -1,7 +1,7 @@
1
1
  "use client";
2
- import { At as useSaveStatusStore, J as paramsFromOperation, K as nodeTitle, L as createConfiguredNode, W as fixedParameterState, Y as selectedOperationOf, _ as registryNodeData, f as isNodeConfigsInitialized, o as NODE_CONFIGS, pt as autosaveAllowedFor, xt as isFlowComplete } from "./FluidGridsProvider-B30VcLdX.js";
2
+ import { At as useSaveStatusStore, J as paramsFromOperation, K as nodeTitle, L as createConfiguredNode, W as fixedParameterState, Y as selectedOperationOf, _ as registryNodeData, f as isNodeConfigsInitialized, o as NODE_CONFIGS, pt as autosaveAllowedFor, xt as isFlowComplete } from "./FluidGridsProvider-DmvFADFa.js";
3
3
  import { E as resolveOutputHandles, H as useFlowStore, T as resolveInputHandles } from "./node-operation-selection--oy-yEq_.js";
4
- import { I as computeAttachPosition, kt as isNodeTypeHiddenFromPalette } from "./flow-builder-BR8p5tXG.js";
4
+ import { Et as isNodeTypeHiddenFromPalette, N as computeAttachPosition } from "./flow-builder-DEzT8TQu.js";
5
5
  import { AgentToolError, defineAgentTool } from "@burdenoff/fe-libs/shared/agent-tools";
6
6
  import { z } from "zod";
7
7
 
@@ -1,7 +1,8 @@
1
1
  "use client";
2
- import { g as notesKeyOf, v as useAgentMarksStore, y as toPlainText } from "./flow-builder-BR8p5tXG.js";
3
- import { J as paramsFromOperation, K as nodeTitle, Y as selectedOperationOf } from "./FluidGridsProvider-B30VcLdX.js";
2
+ import { n as useAgentMarksStore, r as toPlainText } from "./marksStore-DGCXjTmZ.js";
3
+ import { J as paramsFromOperation, K as nodeTitle, Y as selectedOperationOf } from "./FluidGridsProvider-DmvFADFa.js";
4
4
  import { H as useFlowStore } from "./node-operation-selection--oy-yEq_.js";
5
+ import { g as notesKeyOf } from "./flow-builder-DEzT8TQu.js";
5
6
  import { AgentToolError, defineAgentTool } from "@burdenoff/fe-libs/shared/agent-tools";
6
7
  import { z } from "zod";
7
8
 
@@ -1,4 +1,4 @@
1
1
  "use client";
2
- import { t as ExecutionDetailPage, y as ExecutionsListPage } from "./ExecutionDetailPage-itor_whl.js";
2
+ import { t as ExecutionDetailPage, y as ExecutionsListPage } from "./ExecutionDetailPage-D-0_POAf.js";
3
3
 
4
4
  export { ExecutionDetailPage, ExecutionsListPage };
@@ -1,17 +1,19 @@
1
1
  "use client";
2
2
  import { A as nodeAccent, B as NODE_TYPE_DRAG_DATA_FORMAT, G as isTriggerOperation, H as useFlowStore, M as isImageIcon, T as resolveInputHandles, U as useIsValidConnection, V as STICKY_NOTE_TYPE, g as toCodeMirrorDiagnostics, j as NodeTypeIcon, r as CODE_WORKFLOW_NODE_TYPE, z as NODE_OPERATION_DRAG_DATA_FORMAT } from "./node-operation-selection--oy-yEq_.js";
3
- import { $ as isStringOptionList, $n as usePaletteGates, $t as inAppLeaveTarget, A as StoreNodeProductsByTypeDocument, An as isQuotaExhaustedFailure, At as useSaveStatusStore, B as useRunGuard, Bt as shouldReleaseForIdle, C as GetMyNodeInstallationsDocument, Ct as useSaveWorkflow, D as InstallWorkflowNodeDocument, E as InstallPurchasedNodeDocument, En as RUNS_QUOTA_NAME, F as getNodeMetadata, Ft as leaseCallQueue, G as nodeSubtitle, Gt as sessionBeforeReload, H as asRecord, Ht as EDIT_SESSION_ID, I as buildOperationSeed, It as leaseCallSequence, J as paramsFromOperation, Jt as AUTOSAVE_DEBOUNCE_MS, K as nodeTitle, Kt as rememberOwnStatusChange, Lt as phaseAfterAcquire, M as UninstallOrganizationPrivateNodeDocument, Mn as useNodeRegistryRevision, Mt as useEditLeaseStore, N as UninstallWorkflowNodeDocument, Nt as bannerOf, On as collectExtensions, Ot as refusalOfQuota, Pn as loadDefinitionJson, Pt as isLocked, R as useInsertNode, Rt as phaseAfterTakeOver, S as CreateStoreOrderDocument, St as useFlowValidator, T as InstallOrganizationPrivateNodeDocument, Tn as BILLING_PLANS_PATH, U as coerceNumber, Un as FLUIDGRIDS_FLAGS, Ut as forgetSessionForReload, V as workflowParameterIssues, Vt as tickAction, Wt as rememberSessionForReload, X as useNodeConfig, Xn as useDurableParityEnabled, Xt as canAutosave, Yn as useDurableFunctionNodesEnabled, Yt as AUTOSAVE_RETRY_DELAYS_MS, Zn as useFluidGridsFlag, _t as leavingLosesChanges, a as NODES_METADATA, ar as matchesAdapterProvider, at as casesFromRules, b as BrowseWorkflowNodesDocument, bn as emitWorkflowCreated, bt as watchLeavingLosesChanges, c as ensureInstalledNodeTypesLoaded, cn as structuredParameterType, cr as getNodeDetail, d as ensureRegistryNodeTypesLoaded, dn as isParamVisible, dr as useBuilderReadOnly, dt as useGuardedNavigate, en as saveFailureActionOf, er as usePhaseCFlags, et as optionListText, f as isNodeConfigsInitialized, fn as useFluidGridsAnalytics, ft as useManualSave, g as registerWorkflowNodeTypes, gt as editingLeaseLocked, ht as editStateFor, i as AVAILABLE_NODES, ir as isOptionalAdapter, it as SwitchRulesEditor, jn as useCanvasEdges, jt as useEditLeaseLocked, k as OrganizationPrivateNodesDocument, kt as saveIndicatorOf, l as ensureNodeConfigsLoaded, lr as buildStickyNode, lt as boundFieldsOf, m as refetchStoreNodes, mn as emitNodeInstalled, mt as departingSave, nn as useNodeExecution, nr as useWorkflowTestsEnabled, nt as resolveLoadOptionsSpec, o as NODE_CONFIGS, on as formatParameterValue, or as newConnectionProviderKey, ot as FieldTree, p as onNodeTypesUpdate, pn as openRunQuotaUpgradePrompt, pr as getGlobalStoreClient, pt as autosaveAllowedFor, q as optionText, qt as rememberRevision, rr as connectionsForAdapter, rt as ConditionTreeBuilder, s as NODE_TYPES, sn as parseParameterValue, sr as replaceAdapterConnections, st as parseMappingValue, t as FluidGridsContext, tn as workflowFingerprint, tt as optionListValues, ur as BuilderReadOnlyProvider, ut as missingRequiredParameters, v as scheduleNodePaletteLoad, vn as emitTemplateUsed, vt as savedEverythingBeforeLeaving, w as GetNodeInstallableVersionsDocument, x as BrowseWorkflowTemplatesDocument, xt as isFlowComplete, yn as emitUpgradeClicked, yt as touchesSavedFields, z as MissingParametersDialog, zt as releasesOnClose } from "./FluidGridsProvider-B30VcLdX.js";
3
+ import { $ as isStringOptionList, $t as inAppLeaveTarget, A as StoreNodeProductsByTypeDocument, At as useSaveStatusStore, B as useRunGuard, Bn as useWorkflowTestsEnabled, Bt as shouldReleaseForIdle, C as GetMyNodeInstallationsDocument, Ct as useSaveWorkflow, D as InstallWorkflowNodeDocument, Dn as FLUIDGRIDS_FLAGS, E as InstallPurchasedNodeDocument, F as getNodeMetadata, Fn as useFluidGridsFlag, Ft as leaseCallQueue, G as nodeSubtitle, Gn as replaceAdapterConnections, Gt as sessionBeforeReload, H as asRecord, Hn as isOptionalAdapter, Ht as EDIT_SESSION_ID, I as buildOperationSeed, It as leaseCallSequence, J as paramsFromOperation, Jn as BuilderReadOnlyProvider, Jt as AUTOSAVE_DEBOUNCE_MS, K as nodeTitle, Kn as getNodeDetail, Kt as rememberOwnStatusChange, Ln as usePaletteGates, Lt as phaseAfterAcquire, M as UninstallOrganizationPrivateNodeDocument, Mt as useEditLeaseStore, N as UninstallWorkflowNodeDocument, Nn as useDurableFunctionNodesEnabled, Nt as bannerOf, Ot as refusalOfQuota, Pn as useDurableParityEnabled, Pt as isLocked, R as useInsertNode, Rn as usePhaseCFlags, Rt as phaseAfterTakeOver, S as CreateStoreOrderDocument, St as useFlowValidator, T as InstallOrganizationPrivateNodeDocument, U as coerceNumber, Un as matchesAdapterProvider, Ut as forgetSessionForReload, V as workflowParameterIssues, Vn as connectionsForAdapter, Vt as tickAction, Wn as newConnectionProviderKey, Wt as rememberSessionForReload, X as useNodeConfig, Xt as canAutosave, Yn as useBuilderReadOnly, Yt as AUTOSAVE_RETRY_DELAYS_MS, Zn as getGlobalStoreClient, _t as leavingLosesChanges, a as NODES_METADATA, at as casesFromRules, b as BrowseWorkflowNodesDocument, bt as watchLeavingLosesChanges, c as ensureInstalledNodeTypesLoaded, cn as parseParameterValue, d as ensureRegistryNodeTypesLoaded, dt as useGuardedNavigate, en as resettledBaseline, et as optionListText, f as isNodeConfigsInitialized, fn as isParamVisible, ft as useManualSave, g as registerWorkflowNodeTypes, gn as useNodeRegistryRevision, gt as editingLeaseLocked, hn as useCanvasEdges, ht as editStateFor, i as AVAILABLE_NODES, it as SwitchRulesEditor, jt as useEditLeaseLocked, k as OrganizationPrivateNodesDocument, kt as saveIndicatorOf, l as ensureNodeConfigsLoaded, ln as structuredParameterType, lt as boundFieldsOf, m as refetchStoreNodes, mn as openRunQuotaUpgradePrompt, mt as departingSave, nn as workflowFingerprint, nt as resolveLoadOptionsSpec, o as NODE_CONFIGS, ot as FieldTree, p as onNodeTypesUpdate, pn as useFluidGridsAnalytics, pt as autosaveAllowedFor, q as optionText, qn as buildStickyNode, qt as rememberRevision, rn as useNodeExecution, rt as ConditionTreeBuilder, s as NODE_TYPES, sn as formatParameterValue, st as parseMappingValue, t as FluidGridsContext, tn as saveFailureActionOf, tt as optionListValues, ut as missingRequiredParameters, v as scheduleNodePaletteLoad, vn as loadDefinitionJson, vt as savedEverythingBeforeLeaving, w as GetNodeInstallableVersionsDocument, x as BrowseWorkflowTemplatesDocument, xt as isFlowComplete, yt as touchesSavedFields, z as MissingParametersDialog, zt as releasesOnClose } from "./FluidGridsProvider-DmvFADFa.js";
4
4
  import { r as useTr } from "./TranslationBridge-Da-TPgQm.js";
5
5
  import { Bi as describeOperationError, Br as WorkflowGitRepositoryDocument, Ct as LinkWorkflowGitRepositoryDocument, Dr as WorkflowDefinitionDocument, Ei as WorkspaceRunsQuotaDocument, Ht as PreviewScheduleDocument, Ir as WorkflowGenerationTemplatesDocument, J as DeleteWorkflowRolloutDocument, Kt as PushWorkflowToGitDocument, Li as emitFluidGridsEvent, Lr as WorkflowGitCommitsDocument, Mt as NodeSchemaIntrospectionDocument, Ni as waitForFluidGridsClient, Nr as WorkflowEnvironmentsDocument, Oi as getFluidGridsClient, Pt as NodeUsageStatusDocument, Qt as RemoveNodeFromWorkflowsDocument, Rr as WorkflowGitDiffDocument, Si as WorkflowVersioningDocument, Ui as throwIfResultError, Vn as TakeOverWorkflowEditLeaseDocument, Wr as WorkflowPromotionRequestsDocument, Xn as UnlinkWorkflowGitRepositoryDocument, Yt as RejectWorkflowPromotionDocument, Z as DeployWorkflowVersionToDevDocument, Zt as ReleaseWorkflowEditLeaseDocument, cr as UpdateWorkflowEnvironmentPolicyDocument, i as ActivateWorkflowVersionCheckedDocument, jn as SetWorkflowRolloutDocument, jr as WorkflowEditLeaseDocument, ki as getFluidGridsClientSafe, mr as WebhookTestListenerDocument, n as AcquireWorkflowEditLeaseDocument, nn as RequestWorkflowPromotionDocument, oa as __exportAll, on as RestoreWorkflowFromGitDocument, qi as getFluidGridsConfig, u as ApproveWorkflowPromotionDocument, wr as WorkflowCallInputsDocument, wt as ListenForWebhookTestEventDocument, x as CancelWorkflowPromotionDocument, xi as WorkflowVersionDrainageDocument, yr as WorkflowAuthoringDocument, zn as StopWebhookTestListenerDocument, zr as WorkflowGitPushesDocument } from "./node-endpoint-configs-DHFGA5MQ.js";
6
6
  import { D as describeSchedule, H as pauseSchedule, _ as useResource, c as FieldError, d as NativeSelect, et as triggerSchedule, nt as unpauseSchedule, p as StatusPill, r as describeRule, s as isAgentNodeType, v as backfillSchedule } from "./agent-form-BvMWhQ42.js";
7
7
  import { CF as WorkflowExportFormat, Eo as CodeReplaceStatus, PD as ScheduleType, QF as WorkflowTestExpectedStatus, SF as WorkflowEnvironment, VF as WorkflowScheduleOverlapPolicy, hI as FLUIDGRIDS_PERMISSIONS, vI as SdkPermissionButton, xI as useFluidGridsPermission, xu as DrainageStatus, yI as SdkPermissionGate, yP as VersioningBehavior } from "./graphql-types-XcDLtFwU.js";
8
8
  import { a as useConnections, r as useAgentsUsingConnection, t as useAgentDefinitionList, wt as useRunFromNodeEligibilityQuery } from "./useAgentDefinitions-NFtLytDR.js";
9
+ import { a as emitTemplateUsed, f as BILLING_PLANS_PATH, g as collectExtensions, m as RUNS_QUOTA_NAME, o as emitUpgradeClicked, s as emitWorkflowCreated, t as emitNodeInstalled, y as isQuotaExhaustedFailure } from "./fluidgridsEvents-CNdcrUNN.js";
9
10
  import { F as normaliseAssertRules, I as operatorSpec, L as readAssertRulesSetting, M as ASSERT_OPERATORS, N as describeAssertRuleProblem, P as emptyAssertRuleRow, R as rowsFromRules, _ as buildNodeDisplayMap, a as TEST_STATUS_TONE_CLASS, b as EntityTagPicker, c as draftToInput, d as isTestRunOpen, f as nextSortOrder, g as testStatusTone, h as testStatusLabel, i as useWorkflowTests, l as emptyTestCaseDraft, m as testRunSummaryText, n as useWorkflowProposal, p as pinnedOutputsFromCanvas, s as draftFromTestCase, t as WorkflowProposalCard, u as enabledCaseIds, z as ruleFromRow } from "./WorkflowProposalCard-8Vr56kQa.js";
10
11
  import { t as cn$1 } from "./cn-QqidFIgr.js";
11
12
  import { i as Button$2, t as PublishCustomNodeAction } from "./PublishCustomNodeAction-D2F7oN0S.js";
12
- import { O as CreateWorkflowRefusalDialog, b as lineOfNode, h as fileBaseName, i as useWorkflowCodeExport, n as downloadWorkflowCodeExport, t as WorkflowShareDialog, v as isLosslessReport, w as sortFidelityItems, x as orderedExportFiles, y as isLossyFidelityItem } from "./WorkflowShareDialog-DnBQA3V6.js";
13
+ import { n as useAgentMarksStore } from "./marksStore-DGCXjTmZ.js";
14
+ import { O as CreateWorkflowRefusalDialog, b as lineOfNode, h as fileBaseName, i as useWorkflowCodeExport, n as downloadWorkflowCodeExport, t as WorkflowShareDialog, v as isLosslessReport, w as sortFidelityItems, x as orderedExportFiles, y as isLossyFidelityItem } from "./WorkflowShareDialog-6RRDe-_v.js";
13
15
  import { t as FluidGridsDocsLink } from "./FluidGridsDocsLink-JxkBpOeb.js";
14
- import { a as useDeactivateWorkflow, d as useRestoreWorkflowVersion, o as useDeleteWorkflow, t as useActivateWorkflow, v as useWorkflowVersions } from "./useWorkflows-D01LC39Y.js";
16
+ import { a as useDeactivateWorkflow, d as useRestoreWorkflowVersion, o as useDeleteWorkflow, t as useActivateWorkflow, v as useWorkflowVersions } from "./useWorkflows-w4Dx2fF2.js";
15
17
  import { n as VersionLifecycleBar, r as countLifecycle, t as VersionDiffDialog } from "./VersionDiffDialog-Dq2xlPFI.js";
16
18
  import { n as useRequestedProposal } from "./useRequestedProposal-B7uPXfZB.js";
17
19
  import { t as AiCreditBalanceSlot } from "./aiCreditsBridge-BuE92tKo.js";
@@ -10572,7 +10574,7 @@ function buildNodeCheck(requiredNodeTypes, installedAppIds) {
10572
10574
  }
10573
10575
 
10574
10576
  // src/hooks/store/useTemplateImportFlow.tsx
10575
- const LazyTemplateConfigurationModal = lazy(() => import("./TemplateConfigurationModal-BAPCG8y-.js").then((m) => ({ default: m.TemplateConfigurationModal })));
10577
+ const LazyTemplateConfigurationModal = lazy(() => import("./TemplateConfigurationModal-D_Mvgxqa.js").then((m) => ({ default: m.TemplateConfigurationModal })));
10576
10578
  /**
10577
10579
  * "Use this template", the same everywhere it is offered: the builder's
10578
10580
  * template panel, the Templates page and the template preview page
@@ -12749,7 +12751,7 @@ function TemplatesGrid({ templates, loading, hasMore, onLoadMore, onTemplateClic
12749
12751
  }
12750
12752
 
12751
12753
  // src/builder/components/flow-builder/components/templates/TemplatesModal.tsx
12752
- const LazyTemplateDetailPanel = lazy(() => import("./TemplateDetailPanel-CZ1uxEQL.js").then((m) => ({ default: m.TemplateDetailPanel })));
12754
+ const LazyTemplateDetailPanel = lazy(() => import("./TemplateDetailPanel-DfFfUcOe.js").then((m) => ({ default: m.TemplateDetailPanel })));
12753
12755
  /**
12754
12756
  * Modal for browsing and selecting workflow templates
12755
12757
  * Features:
@@ -20692,153 +20694,6 @@ function WebhookRunFollower() {
20692
20694
  return null;
20693
20695
  }
20694
20696
 
20695
- // src/agentMarks/plainText.ts
20696
- /**
20697
- * ★ BOFF-11584: the text of a callout or note is model output, and the model
20698
- * has read workflow content people wrote. It is shown as plain text only:
20699
- * React renders it as a text node (never `dangerouslySetInnerHTML`, never a
20700
- * markdown renderer), so markup, links and images in it stay inert characters.
20701
- *
20702
- * This keeps it short and printable as well: control characters (other than
20703
- * line breaks) and bidirectional controls, which can disguise what a line
20704
- * says, are removed; runs of blank lines collapse; the result is clamped.
20705
- */
20706
- const BIDI_CONTROLS = /* @__PURE__ */ new Set([
20707
- 1564,
20708
- 8206,
20709
- 8207,
20710
- 8234,
20711
- 8235,
20712
- 8236,
20713
- 8237,
20714
- 8238,
20715
- 8294,
20716
- 8295,
20717
- 8296,
20718
- 8297
20719
- ]);
20720
- function isDroppedCharacter(code) {
20721
- if (code === 10) return false;
20722
- if (code <= 31) return true;
20723
- if (code >= 127 && code <= 159) return true;
20724
- return BIDI_CONTROLS.has(code);
20725
- }
20726
- function toPlainText(text, max) {
20727
- let kept = "";
20728
- for (const character of text.replace(/\r\n?/g, "\n").replace(/\t/g, " ")) if (!isDroppedCharacter(character.codePointAt(0) ?? 0)) kept += character;
20729
- const cleaned = kept.replace(/ {2,}/g, " ").replace(/ *\n */g, "\n").replace(/\n{3,}/g, "\n\n").trim();
20730
- if (cleaned.length <= max) return cleaned;
20731
- return `${cleaned.slice(0, max - 1).trimEnd()}…`;
20732
- }
20733
-
20734
- // src/agentMarks/marksStore.ts
20735
- /** The text of a mark is model output: kept as plain text, never markup. */
20736
- const CALLOUT_LABEL_MAX = 200;
20737
- const NOTE_MESSAGE_MAX = 280;
20738
- /** A workflow holds at most this many notes, resolved ones included. */
20739
- const MAX_NOTES_PER_WORKFLOW = 20;
20740
- let sequence = 0;
20741
- const nextId = (prefix) => {
20742
- sequence += 1;
20743
- return `${prefix}${sequence}`;
20744
- };
20745
- const useAgentMarksStore = create()((set, get) => ({
20746
- callouts: [],
20747
- notes: [],
20748
- nextNumber: {},
20749
- openNoteId: null,
20750
- flash: null,
20751
- actions: {
20752
- addCallout: ({ label, target, element, route }) => {
20753
- const callout = {
20754
- id: nextId("c"),
20755
- label: toPlainText(label, 200),
20756
- target,
20757
- route,
20758
- element: element ? new WeakRef(element) : null
20759
- };
20760
- set((state) => ({ callouts: [...state.callouts, callout].slice(-3) }));
20761
- return callout;
20762
- },
20763
- rebindCallout: (id, element) => set((state) => ({ callouts: state.callouts.map((callout) => callout.id === id ? {
20764
- ...callout,
20765
- element: new WeakRef(element)
20766
- } : callout) })),
20767
- removeCallout: (id) => set((state) => ({ callouts: state.callouts.filter((callout) => callout.id !== id) })),
20768
- clearCallouts: () => {
20769
- const count = get().callouts.length;
20770
- if (count > 0) set({ callouts: [] });
20771
- return count;
20772
- },
20773
- dropCalloutsOffRoute: (route) => {
20774
- const { callouts } = get();
20775
- const kept = callouts.filter((callout) => callout.route === route);
20776
- if (kept.length !== callouts.length) set({ callouts: kept });
20777
- return callouts.length - kept.length;
20778
- },
20779
- addNote: (input) => {
20780
- const { notes, nextNumber } = get();
20781
- if (notes.filter((note) => note.workflowKey === input.workflowKey).length >= 20) return null;
20782
- const number = nextNumber[input.workflowKey] ?? 1;
20783
- const note = {
20784
- id: nextId("n"),
20785
- number,
20786
- workflowKey: input.workflowKey,
20787
- nodeId: input.nodeId,
20788
- nodeLabel: toPlainText(input.nodeLabel, 80),
20789
- paramKey: input.paramKey ?? null,
20790
- kind: input.kind,
20791
- message: toPlainText(input.message, 280),
20792
- resolved: false
20793
- };
20794
- set({
20795
- notes: [...notes, note],
20796
- nextNumber: {
20797
- ...nextNumber,
20798
- [input.workflowKey]: number + 1
20799
- }
20800
- });
20801
- return note;
20802
- },
20803
- setResolved: (id, resolved) => set((state) => ({ notes: state.notes.map((note) => note.id === id ? {
20804
- ...note,
20805
- resolved
20806
- } : note) })),
20807
- removeNote: (id) => set((state) => ({
20808
- notes: state.notes.filter((note) => note.id !== id),
20809
- openNoteId: state.openNoteId === id ? null : state.openNoteId
20810
- })),
20811
- clearNotes: (workflowKey) => {
20812
- const { notes, openNoteId } = get();
20813
- const kept = workflowKey === void 0 ? [] : notes.filter((note) => note.workflowKey !== workflowKey);
20814
- const removed = notes.length - kept.length;
20815
- if (removed > 0) set({
20816
- notes: kept,
20817
- openNoteId: kept.some((note) => note.id === openNoteId) ? openNoteId : null
20818
- });
20819
- return removed;
20820
- },
20821
- openNote: (id) => set({ openNoteId: id }),
20822
- flashNode: (nodeId) => {
20823
- sequence += 1;
20824
- set({ flash: {
20825
- nodeId,
20826
- token: sequence
20827
- } });
20828
- }
20829
- }
20830
- }));
20831
- /** Reset everything (tests, and sign-out if a host wants it). */
20832
- function resetAgentMarks() {
20833
- useAgentMarksStore.setState({
20834
- callouts: [],
20835
- notes: [],
20836
- nextNumber: {},
20837
- openNoteId: null,
20838
- flash: null
20839
- });
20840
- }
20841
-
20842
20697
  // src/builder/agentNotes/notesKey.ts
20843
20698
  /**
20844
20699
  * ★ BOFF-11584: which workflow a canvas note belongs to. A saved workflow is
@@ -21223,6 +21078,26 @@ function takeBaseline() {
21223
21078
  editRevision: flow.editRevision
21224
21079
  });
21225
21080
  }
21081
+ /**
21082
+ * Let the canvas settle again whenever the node registry redraws it
21083
+ * (BOFF-11754). The canvas is drawn before every node type on it is
21084
+ * registered, so a card can turn into the real one well after the load (an
21085
+ * installed store node read later, a node installed from the missing-nodes
21086
+ * dialog) and measure and normalise itself then. Until the person edits, that
21087
+ * moves the baseline instead of counting as unsaved work. `subscribe` is the
21088
+ * registry's update feed. Returns the unsubscribe function.
21089
+ */
21090
+ function settleOnNodeRegistryUpdates(subscribe = onNodeTypesUpdate) {
21091
+ return subscribe(() => {
21092
+ const status = useSaveStatusStore.getState();
21093
+ const flow = useFlowStore.getState();
21094
+ const next = resettledBaseline(status.baseline, {
21095
+ generation: flow.loadGeneration,
21096
+ editRevision: flow.editRevision
21097
+ }, Date.now(), SETTLE_MS);
21098
+ if (next) status.actions.setBaseline(next);
21099
+ });
21100
+ }
21226
21101
  /** Unsaved-change tracking, autosave with retries, and saves on the way out. */
21227
21102
  function useAutosave(readOnly) {
21228
21103
  const tr = useTr();
@@ -21304,6 +21179,7 @@ function useAutosave(readOnly) {
21304
21179
  const unsubscribeStatus = useSaveStatusStore.subscribe((state, previous) => {
21305
21180
  if (state.baseline !== previous.baseline || state.autosaveEnabled !== previous.autosaveEnabled) scheduleCheck();
21306
21181
  });
21182
+ const unsubscribeRegistry = settleOnNodeRegistryUpdates();
21307
21183
  const unsubscribeLease = useEditLeaseStore.subscribe((state, previous) => {
21308
21184
  if (!isLocked(previous.phase) || isLocked(state.phase)) return;
21309
21185
  if (status().failure?.conflict?.reason === "EDIT_LEASE_HELD") {
@@ -21315,6 +21191,7 @@ function useAutosave(readOnly) {
21315
21191
  return () => {
21316
21192
  unsubscribeFlow();
21317
21193
  unsubscribeStatus();
21194
+ unsubscribeRegistry();
21318
21195
  unsubscribeLease();
21319
21196
  if (checkTimer) clearTimeout(checkTimer);
21320
21197
  autosave.cancel();
@@ -27575,8 +27452,8 @@ function EditLeaseBanner() {
27575
27452
  }
27576
27453
 
27577
27454
  // src/builder/components/flow-builder/flow-builder.tsx
27578
- const LazyNodeDetailView = lazy(() => import("./node-detail-view-Dnhqdn8C.js").then((m) => ({ default: m.NodeDetailView })));
27579
- const LazyQuickConfigPanel = lazy(() => import("./quick-config-panel-C4tSpCrt.js").then((m) => ({ default: m.QuickConfigPanel })));
27455
+ const LazyNodeDetailView = lazy(() => import("./node-detail-view-LNqeIqN-.js").then((m) => ({ default: m.NodeDetailView })));
27456
+ const LazyQuickConfigPanel = lazy(() => import("./quick-config-panel-D3ogsaFL.js").then((m) => ({ default: m.QuickConfigPanel })));
27580
27457
  const edgeTypes = { deletable: CustomDeletableEdge };
27581
27458
  const edgeOptions = {
27582
27459
  type: "deletable",
@@ -27636,7 +27513,7 @@ const FlowBuilder = ({ readOnly = false }) => {
27636
27513
  const [agentTools, setAgentTools] = useState([]);
27637
27514
  useEffect(() => {
27638
27515
  let cancelled = false;
27639
- import("./agentTools-D5AW7zHn.js").then(({ createBuilderAgentTools }) => {
27516
+ import("./agentTools-DJ5o2ekg.js").then(({ createBuilderAgentTools }) => {
27640
27517
  if (cancelled) return;
27641
27518
  setAgentTools(createBuilderAgentTools({ durableFunctionsEnabled: () => paletteGatesRef.current }));
27642
27519
  }).catch((error) => {
@@ -27691,7 +27568,7 @@ const FlowBuilder = ({ readOnly = false }) => {
27691
27568
  const [noteTools, setNoteTools] = useState([]);
27692
27569
  useEffect(() => {
27693
27570
  let cancelled = false;
27694
- import("./canvasNoteTools-BqQTTCll.js").then(({ createCanvasNoteTools }) => {
27571
+ import("./canvasNoteTools-D3zUdEeg.js").then(({ createCanvasNoteTools }) => {
27695
27572
  if (cancelled) return;
27696
27573
  setNoteTools(createCanvasNoteTools({ focusNode: (nodeId) => fitViewRef.current({
27697
27574
  nodes: [{ id: nodeId }],
@@ -27999,4 +27876,4 @@ const FlowBuilderPage = ({ workflow, readOnly = false }) => {
27999
27876
  ] });
28000
27877
  };
28001
27878
 
28002
- export { NodeParamsForm as $, DialogFooter$1 as A, isRunControlNodeType as At, getWorkflowNodeTypes as B, templatePreview as C, Input$1 as Ct, DialogClose as D, filterPaletteNodes as Dt, Dialog$1 as E, WORKFLOW_TEST_NODE_TYPES as Et, DialogTrigger$1 as F, NodeEditorTabBody as G, useWorkflowTemplates as H, computeAttachPosition as I, RunnerStatusPill as J, NodeSettingsPanel as K, useTemplateImportFlow as L, DialogOverlay as M, DialogPortal as N, DialogContent$1 as O, isDurableFunctionNodeType as Ot, DialogTitle$1 as P, useRunners as Q, buildNodeCheck as R, TemplateCard as S, CardTitle$1 as St, badgeVariants as T, RUN_CONTROL_NODE_TYPES as Tt, useInstalledNodes as U, useImportWorkflowTemplate as V, NodeExecutionActions as W, runnerInstallCommand as X, RUNNER_INSTALL_SCRIPT_URL as Y, useRunnerActions as Z, resetAgentMarks as _, Card$1 as _t, useAiWorkflowTemplates as a, CodeEditorField as at, JsonView as b, CardFooter as bt, RunsUsageMeter as c, ReadOnlyFieldset as ct, readRunsQuota as d, SchedulePanel as dt, useGlobalStoreClient as et, runsQuotaLevel as f, NodeEditorTabs as ft, notesKeyOf as g, FluidGridsMark as gt, useWorkflowReloadStore as h, useNodeSelectedEvent as ht, enrichDraftNodes as i, PopoverTrigger$1 as it, DialogHeader$1 as j, DialogDescription$1 as k, isNodeTypeHiddenFromPalette as kt, RunsUsageMeterView as l, useNodeEditorTab as lt, releaseLeaseKeptForReload as m, NodeInputFields as mt, AI_DRAFT_MAX_PROMPT_LENGTH as n, Popover$1 as nt, BUILDER_FULLSCREEN_ATTRIBUTE as o, ConnectionSelector as ot, summarizeRunsQuota as p, TabButton as pt, RunOnSection as q, draftToCanvas as r, PopoverContent$1 as rt, BUILDER_FULLSCREEN_EVENT as s, ConnectionFormDialog as st, FlowBuilderPage as t, NDV_Z_INDEX as tt, useRunsQuota as u, SCHEDULE_NODE_TYPE as ut, useAgentMarksStore as v, CardContent$1 as vt, Badge$1 as w, DURABLE_FUNCTION_NODE_TYPES as wt, TableView as x, CardHeader$1 as xt, toPlainText as y, CardDescription$1 as yt, buildRequiredNodeTypes as z };
27879
+ export { Popover$1 as $, DialogPortal as A, useInstalledNodes as B, Dialog$1 as C, WORKFLOW_TEST_NODE_TYPES as Ct, DialogFooter$1 as D, isRunControlNodeType as Dt, DialogDescription$1 as E, isNodeTypeHiddenFromPalette as Et, buildNodeCheck as F, RunnerStatusPill as G, NodeEditorTabBody as H, buildRequiredNodeTypes as I, useRunnerActions as J, RUNNER_INSTALL_SCRIPT_URL as K, getWorkflowNodeTypes as L, DialogTrigger$1 as M, computeAttachPosition as N, DialogHeader$1 as O, useTemplateImportFlow as P, NDV_Z_INDEX as Q, useImportWorkflowTemplate as R, badgeVariants as S, RUN_CONTROL_NODE_TYPES as St, DialogContent$1 as T, isDurableFunctionNodeType as Tt, NodeSettingsPanel as U, NodeExecutionActions as V, RunOnSection as W, NodeParamsForm as X, useRunners as Y, useGlobalStoreClient as Z, JsonView as _, CardFooter as _t, useAiWorkflowTemplates as a, ReadOnlyFieldset as at, templatePreview as b, Input$1 as bt, RunsUsageMeter as c, SchedulePanel as ct, readRunsQuota as d, NodeInputFields as dt, PopoverContent$1 as et, runsQuotaLevel as f, useNodeSelectedEvent as ft, notesKeyOf as g, CardDescription$1 as gt, useWorkflowReloadStore as h, CardContent$1 as ht, enrichDraftNodes as i, ConnectionFormDialog as it, DialogTitle$1 as j, DialogOverlay as k, RunsUsageMeterView as l, NodeEditorTabs as lt, releaseLeaseKeptForReload as m, Card$1 as mt, AI_DRAFT_MAX_PROMPT_LENGTH as n, CodeEditorField as nt, BUILDER_FULLSCREEN_ATTRIBUTE as o, useNodeEditorTab as ot, summarizeRunsQuota as p, FluidGridsMark as pt, runnerInstallCommand as q, draftToCanvas as r, ConnectionSelector as rt, BUILDER_FULLSCREEN_EVENT as s, SCHEDULE_NODE_TYPE as st, FlowBuilderPage as t, PopoverTrigger$1 as tt, useRunsQuota as u, TabButton as ut, TableView as v, CardHeader$1 as vt, DialogClose as w, filterPaletteNodes as wt, Badge$1 as x, DURABLE_FUNCTION_NODE_TYPES as xt, TemplateCard as y, CardTitle$1 as yt, useWorkflowTemplates as z };