@burdenoff/fluidgrids-fe-sdk 2026.1111.13 → 2026.1111.15
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/README.md +41 -0
- package/dist/{ExecutionDetailPage-CDkJeeu2.js → ExecutionDetailPage-DO38vZ_F.js} +4 -4
- package/dist/{FluidGridsProvider-CDZjKmfD.js → FluidGridsProvider-B9RR_CI_.js} +237 -325
- package/dist/{HistoryPage-DnVGN_72.js → HistoryPage-CA42pU85.js} +1 -1
- package/dist/{InsightsPage-CGRpZtGu.js → InsightsPage-CBoN_Mj9.js} +2 -2
- package/dist/{ManagedAiPolicyAuthority-DbJBledZ.js → ManagedAiPolicyAuthority-CKihmbJE.js} +2 -2
- package/dist/{MissingNodesInstallModal-Ca4f--lw.js → MissingNodesInstallModal-Dm0nMBXM.js} +1 -1
- package/dist/{TemplateConfigurationModal-ChQsXf0-.js → TemplateConfigurationModal-Bs_V-E4u.js} +1 -1
- package/dist/{TemplateDetailPanel-C0YiVdub.js → TemplateDetailPanel-MlT39VLG.js} +1 -1
- package/dist/{TemplatesPage-QXtq6mI3.js → TemplatesPage-CHVpWBuw.js} +5 -4
- package/dist/{WorkflowSearchRedirect-B4nHALJg.js → WorkflowSearchRedirect-3gyHcYY2.js} +38 -51
- package/dist/{WorkflowShareDialog-ByTSWwwR.js → WorkflowShareDialog-0Ai1HED-.js} +2 -1
- package/dist/{WorkflowsList-B9F2e8M6.js → WorkflowsList-CJ3KmMHX.js} +5 -4
- package/dist/agent-tools.d.ts +3 -0
- package/dist/agent-tools.js +5 -0
- package/dist/{agentTools-C0g2OWvI.js → agentTools-B1IK1JEO.js} +2 -2
- package/dist/{canvasNoteTools-BUWY18XK.js → canvasNoteTools-eewVHVuy.js} +3 -2
- package/dist/executions.js +1 -1
- package/dist/{flow-builder-BvCQAGDR.js → flow-builder-C_3sY3pZ.js} +54 -209
- package/dist/fluidgridsEvents-CNdcrUNN.js +310 -0
- package/dist/history.js +1 -1
- package/dist/index-CHeY7_A1.d.ts +105 -0
- package/dist/{index-CLqh2u28.d.ts → index-DRf25-D3.d.ts} +7 -105
- package/dist/index.d.ts +3 -2
- package/dist/index.js +21 -946
- package/dist/marksStore-DGCXjTmZ.js +151 -0
- package/dist/{node-detail-view-CPD_NSZc.js → node-detail-view-CAws5qjg.js} +3 -3
- package/dist/observability.d.ts +1 -1
- package/dist/observability.js +1 -1
- package/dist/{quick-config-panel-DHkYGaCL.js → quick-config-panel-DOzNkSVV.js} +2 -2
- package/dist/settings.js +1 -1
- package/dist/templates.js +1 -1
- package/dist/uiMarkTools-nlmzsHQM.js +937 -0
- package/dist/{useExecutions-BqoD7XWi.js → useExecutions-DkS0FTfw.js} +2 -1
- package/dist/{useObservability-Cs-5_NHh.js → useObservability-BkxhHZsX.js} +2 -1
- package/dist/{useRunHistory-CEL-CIz-.js → useRunHistory-DHehG09Z.js} +1 -1
- package/dist/{useWorkflows-Bwpvfdgv.js → useWorkflows-DyhtoVwp.js} +25 -5
- package/dist/workflow-builder.js +2 -2
- package/dist/workflow-route.d.ts +33 -0
- package/dist/workflow-route.js +4 -0
- package/dist/workflowRouteData-BkfVOc-O.js +169 -0
- package/dist/workflows-list.js +1 -1
- package/package.json +9 -1
|
@@ -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
|
|
3
|
+
import { $ as isStringOptionList, $t as inAppLeaveTarget, A as StoreNodeProductsByTypeDocument, At as useSaveStatusStore, B as useRunGuard, Bn as connectionsForAdapter, Bt as shouldReleaseForIdle, C as GetMyNodeInstallationsDocument, Ct as useSaveWorkflow, D as InstallWorkflowNodeDocument, E as InstallPurchasedNodeDocument, En as FLUIDGRIDS_FLAGS, F as getNodeMetadata, Ft as leaseCallQueue, G as nodeSubtitle, Gn as getNodeDetail, Gt as sessionBeforeReload, H as asRecord, Hn as matchesAdapterProvider, Ht as EDIT_SESSION_ID, I as buildOperationSeed, In as usePaletteGates, It as leaseCallSequence, J as paramsFromOperation, Jn as useBuilderReadOnly, Jt as AUTOSAVE_DEBOUNCE_MS, K as nodeTitle, Kn as buildStickyNode, Kt as rememberOwnStatusChange, Ln as usePhaseCFlags, Lt as phaseAfterAcquire, M as UninstallOrganizationPrivateNodeDocument, Mn as useDurableFunctionNodesEnabled, Mt as useEditLeaseStore, N as UninstallWorkflowNodeDocument, Nn as useDurableParityEnabled, Nt as bannerOf, Ot as refusalOfQuota, Pn as useFluidGridsFlag, Pt as isLocked, R as useInsertNode, Rt as phaseAfterTakeOver, S as CreateStoreOrderDocument, St as useFlowValidator, T as InstallOrganizationPrivateNodeDocument, U as coerceNumber, Un as newConnectionProviderKey, Ut as forgetSessionForReload, V as workflowParameterIssues, Vn as isOptionalAdapter, Vt as tickAction, Wn as replaceAdapterConnections, Wt as rememberSessionForReload, X as useNodeConfig, Xn as getGlobalStoreClient, Xt as canAutosave, Yt as AUTOSAVE_RETRY_DELAYS_MS, _n as loadDefinitionJson, _t as leavingLosesChanges, a as NODES_METADATA, at as casesFromRules, b as BrowseWorkflowNodesDocument, bt as watchLeavingLosesChanges, c as ensureInstalledNodeTypesLoaded, cn as structuredParameterType, d as ensureRegistryNodeTypesLoaded, dn as isParamVisible, dt as useGuardedNavigate, en as saveFailureActionOf, et as optionListText, f as isNodeConfigsInitialized, fn as useFluidGridsAnalytics, ft as useManualSave, g as registerWorkflowNodeTypes, gt as editingLeaseLocked, hn as useNodeRegistryRevision, ht as editStateFor, i as AVAILABLE_NODES, it as SwitchRulesEditor, jt as useEditLeaseLocked, k as OrganizationPrivateNodesDocument, kt as saveIndicatorOf, l as ensureNodeConfigsLoaded, lt as boundFieldsOf, m as refetchStoreNodes, mn as useCanvasEdges, mt as departingSave, nn as useNodeExecution, nt as resolveLoadOptionsSpec, o as NODE_CONFIGS, on as formatParameterValue, ot as FieldTree, p as onNodeTypesUpdate, pn as openRunQuotaUpgradePrompt, pt as autosaveAllowedFor, q as optionText, qn as BuilderReadOnlyProvider, qt as rememberRevision, rt as ConditionTreeBuilder, s as NODE_TYPES, sn as parseParameterValue, st as parseMappingValue, t as FluidGridsContext, tn as workflowFingerprint, tt as optionListValues, ut as missingRequiredParameters, v as scheduleNodePaletteLoad, vt as savedEverythingBeforeLeaving, w as GetNodeInstallableVersionsDocument, x as BrowseWorkflowTemplatesDocument, xt as isFlowComplete, yt as touchesSavedFields, z as MissingParametersDialog, zn as useWorkflowTestsEnabled, zt as releasesOnClose } from "./FluidGridsProvider-B9RR_CI_.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 {
|
|
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-0Ai1HED-.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-
|
|
16
|
+
import { a as useDeactivateWorkflow, d as useRestoreWorkflowVersion, o as useDeleteWorkflow, t as useActivateWorkflow, v as useWorkflowVersions } from "./useWorkflows-DyhtoVwp.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";
|
|
@@ -10395,6 +10397,19 @@ function useImportWorkflowTemplate() {
|
|
|
10395
10397
|
|
|
10396
10398
|
// src/utils/workflow-node-check.ts
|
|
10397
10399
|
/**
|
|
10400
|
+
* Workflow node dependency checking.
|
|
10401
|
+
*
|
|
10402
|
+
* Shared logic for detecting node types used by a workflow that are not
|
|
10403
|
+
* installed in the current workspace, resolving them to store products, and
|
|
10404
|
+
* classifying them as installed / missing (free installable) / missingPaid /
|
|
10405
|
+
* unavailable (not offered by the store, so nothing can install them).
|
|
10406
|
+
*
|
|
10407
|
+
* Used by:
|
|
10408
|
+
* - Template import flow (desktop-sidebar-fragment)
|
|
10409
|
+
* - Shared-workflow copy flow (WorkflowItem)
|
|
10410
|
+
* - AI-assistant-created workflow open flow (WorkflowItem)
|
|
10411
|
+
*/
|
|
10412
|
+
/**
|
|
10398
10413
|
* Canvas-only node types: they live on the React Flow canvas but are never
|
|
10399
10414
|
* executed, never registered in NODE_CONFIGS and never published to the store.
|
|
10400
10415
|
*
|
|
@@ -10418,50 +10433,22 @@ function getWorkflowNodeTypes(nodes) {
|
|
|
10418
10433
|
return [...new Set(nodes.map((n) => n.type).filter((t) => Boolean(t)).filter((t) => !CANVAS_ONLY_NODE_TYPES.has(t)))];
|
|
10419
10434
|
}
|
|
10420
10435
|
/**
|
|
10421
|
-
*
|
|
10422
|
-
*
|
|
10423
|
-
* returns 100 anyway. The old single request for 200 rows silently dropped
|
|
10424
|
-
* every node past the first 100 (BOFF-11402).
|
|
10436
|
+
* Node types per store lookup: global-store-svc answers for at most 100 at a
|
|
10437
|
+
* time. A workflow misses far fewer; more are asked in parallel requests.
|
|
10425
10438
|
*/
|
|
10426
|
-
const
|
|
10439
|
+
const STORE_NODE_LOOKUP_BATCH_SIZE = 100;
|
|
10440
|
+
/** The store context of FluidGrids node products, as the Node Store browses them. */
|
|
10441
|
+
const STORE_NODE_PRODUCT_CONTEXT = "fluidgrids";
|
|
10427
10442
|
/**
|
|
10428
|
-
*
|
|
10429
|
-
*
|
|
10443
|
+
* The store products that offer any of `nodeTypes`, at most
|
|
10444
|
+
* `STORE_NODE_LOOKUP_BATCH_SIZE` types per request, the requests in parallel.
|
|
10445
|
+
* Blank and repeated types are asked once.
|
|
10430
10446
|
*/
|
|
10431
|
-
|
|
10432
|
-
|
|
10433
|
-
|
|
10434
|
-
|
|
10435
|
-
|
|
10436
|
-
type: "NODE",
|
|
10437
|
-
compatibleWith: "fluidgrids"
|
|
10438
|
-
},
|
|
10439
|
-
sortBy: "DOWNLOADS",
|
|
10440
|
-
pagination: {
|
|
10441
|
-
limit: 100,
|
|
10442
|
-
offset
|
|
10443
|
-
}
|
|
10444
|
-
} };
|
|
10445
|
-
}
|
|
10446
|
-
/**
|
|
10447
|
-
* Fetch every FluidGrids-compatible node product from the store.
|
|
10448
|
-
*
|
|
10449
|
-
* `browseStore` pages by `offset`; its `cursor` input is ignored by the
|
|
10450
|
-
* server. The offset advances by the number of rows actually returned so a
|
|
10451
|
-
* lower server cap still walks the whole catalog. Rows are de-duplicated by
|
|
10452
|
-
* product id in case a page boundary moves while the catalog changes.
|
|
10453
|
-
*/
|
|
10454
|
-
async function fetchAllStoreNodes(fetchPage) {
|
|
10455
|
-
const byId = /* @__PURE__ */ new Map();
|
|
10456
|
-
let offset = 0;
|
|
10457
|
-
for (let page = 0; page < 50; page++) {
|
|
10458
|
-
const browse = await fetchPage(storeNodePageVariables(offset));
|
|
10459
|
-
const products = browse?.products ?? [];
|
|
10460
|
-
for (const product of products) if (!byId.has(product.id)) byId.set(product.id, product);
|
|
10461
|
-
if (!browse?.hasMore || products.length === 0) break;
|
|
10462
|
-
offset += products.length;
|
|
10463
|
-
}
|
|
10464
|
-
return [...byId.values()];
|
|
10447
|
+
async function fetchStoreNodeProducts(nodeTypes, fetchProducts) {
|
|
10448
|
+
const wanted = [...new Set(nodeTypes.filter(Boolean))];
|
|
10449
|
+
const batches = [];
|
|
10450
|
+
for (let i = 0; i < wanted.length; i += 100) batches.push(wanted.slice(i, i + 100));
|
|
10451
|
+
return (await Promise.all(batches.map(fetchProducts))).flatMap((products) => [...products ?? []]);
|
|
10465
10452
|
}
|
|
10466
10453
|
function publishedAtMs(product) {
|
|
10467
10454
|
const ms = product.publishedAt ? Date.parse(product.publishedAt) : NaN;
|
|
@@ -10503,18 +10490,22 @@ function buildStoreNodeTypeMap(products) {
|
|
|
10503
10490
|
return nodeTypeToProduct;
|
|
10504
10491
|
}
|
|
10505
10492
|
/**
|
|
10506
|
-
*
|
|
10507
|
-
*
|
|
10493
|
+
* Ask the global store which products offer `nodeTypes` and map each type to the
|
|
10494
|
+
* best one (see compareStoreNodeCandidates). Only the asked types travel: the
|
|
10495
|
+
* check used to page through the whole node catalog for them (BOFF-11754).
|
|
10508
10496
|
*/
|
|
10509
|
-
async function fetchStoreNodeTypeMap() {
|
|
10497
|
+
async function fetchStoreNodeTypeMap(nodeTypes) {
|
|
10510
10498
|
const storeClient = getGlobalStoreClient();
|
|
10511
|
-
if (!storeClient) return /* @__PURE__ */ new Map();
|
|
10512
|
-
return buildStoreNodeTypeMap(await
|
|
10499
|
+
if (!storeClient || nodeTypes.length === 0) return /* @__PURE__ */ new Map();
|
|
10500
|
+
return buildStoreNodeTypeMap(await fetchStoreNodeProducts(nodeTypes, async (batch) => {
|
|
10513
10501
|
return (await storeClient.query({
|
|
10514
|
-
query:
|
|
10515
|
-
variables
|
|
10502
|
+
query: StoreNodeProductsByTypeDocument,
|
|
10503
|
+
variables: {
|
|
10504
|
+
nodeTypes: batch,
|
|
10505
|
+
compatibleWith: STORE_NODE_PRODUCT_CONTEXT
|
|
10506
|
+
},
|
|
10516
10507
|
fetchPolicy: "cache-first"
|
|
10517
|
-
})).data?.
|
|
10508
|
+
})).data?.storeNodeProductsByType;
|
|
10518
10509
|
}));
|
|
10519
10510
|
}
|
|
10520
10511
|
/**
|
|
@@ -10551,10 +10542,11 @@ function requiredNodeEntry(type, registered, product) {
|
|
|
10551
10542
|
async function buildRequiredNodeTypes(nodes) {
|
|
10552
10543
|
const workflowNodeTypes = getWorkflowNodeTypes(nodes);
|
|
10553
10544
|
if (workflowNodeTypes.length === 0) return [];
|
|
10554
|
-
|
|
10555
|
-
|
|
10545
|
+
const isRegistered = (type) => NODE_CONFIGS.some((c) => c.type === type);
|
|
10546
|
+
await ensureRegistryNodeTypesLoaded(workflowNodeTypes);
|
|
10547
|
+
const missingTypes = workflowNodeTypes.filter((type) => !isRegistered(type));
|
|
10556
10548
|
let nodeTypeToProduct = /* @__PURE__ */ new Map();
|
|
10557
|
-
if (missingTypes.length > 0) nodeTypeToProduct = await fetchStoreNodeTypeMap();
|
|
10549
|
+
if (missingTypes.length > 0) [, nodeTypeToProduct] = await Promise.all([ensureInstalledNodeTypesLoaded(missingTypes), fetchStoreNodeTypeMap(missingTypes)]);
|
|
10558
10550
|
return workflowNodeTypes.map((type) => {
|
|
10559
10551
|
const registered = NODE_CONFIGS.find((c) => c.type === type);
|
|
10560
10552
|
return requiredNodeEntry(type, registered ? { version: registered.defaultData.version } : void 0, nodeTypeToProduct.get(type));
|
|
@@ -10582,7 +10574,7 @@ function buildNodeCheck(requiredNodeTypes, installedAppIds) {
|
|
|
10582
10574
|
}
|
|
10583
10575
|
|
|
10584
10576
|
// src/hooks/store/useTemplateImportFlow.tsx
|
|
10585
|
-
const LazyTemplateConfigurationModal = lazy(() => import("./TemplateConfigurationModal-
|
|
10577
|
+
const LazyTemplateConfigurationModal = lazy(() => import("./TemplateConfigurationModal-Bs_V-E4u.js").then((m) => ({ default: m.TemplateConfigurationModal })));
|
|
10586
10578
|
/**
|
|
10587
10579
|
* "Use this template", the same everywhere it is offered: the builder's
|
|
10588
10580
|
* template panel, the Templates page and the template preview page
|
|
@@ -12759,7 +12751,7 @@ function TemplatesGrid({ templates, loading, hasMore, onLoadMore, onTemplateClic
|
|
|
12759
12751
|
}
|
|
12760
12752
|
|
|
12761
12753
|
// src/builder/components/flow-builder/components/templates/TemplatesModal.tsx
|
|
12762
|
-
const LazyTemplateDetailPanel = lazy(() => import("./TemplateDetailPanel-
|
|
12754
|
+
const LazyTemplateDetailPanel = lazy(() => import("./TemplateDetailPanel-MlT39VLG.js").then((m) => ({ default: m.TemplateDetailPanel })));
|
|
12763
12755
|
/**
|
|
12764
12756
|
* Modal for browsing and selecting workflow templates
|
|
12765
12757
|
* Features:
|
|
@@ -20702,153 +20694,6 @@ function WebhookRunFollower() {
|
|
|
20702
20694
|
return null;
|
|
20703
20695
|
}
|
|
20704
20696
|
|
|
20705
|
-
// src/agentMarks/plainText.ts
|
|
20706
|
-
/**
|
|
20707
|
-
* ★ BOFF-11584: the text of a callout or note is model output, and the model
|
|
20708
|
-
* has read workflow content people wrote. It is shown as plain text only:
|
|
20709
|
-
* React renders it as a text node (never `dangerouslySetInnerHTML`, never a
|
|
20710
|
-
* markdown renderer), so markup, links and images in it stay inert characters.
|
|
20711
|
-
*
|
|
20712
|
-
* This keeps it short and printable as well: control characters (other than
|
|
20713
|
-
* line breaks) and bidirectional controls, which can disguise what a line
|
|
20714
|
-
* says, are removed; runs of blank lines collapse; the result is clamped.
|
|
20715
|
-
*/
|
|
20716
|
-
const BIDI_CONTROLS = /* @__PURE__ */ new Set([
|
|
20717
|
-
1564,
|
|
20718
|
-
8206,
|
|
20719
|
-
8207,
|
|
20720
|
-
8234,
|
|
20721
|
-
8235,
|
|
20722
|
-
8236,
|
|
20723
|
-
8237,
|
|
20724
|
-
8238,
|
|
20725
|
-
8294,
|
|
20726
|
-
8295,
|
|
20727
|
-
8296,
|
|
20728
|
-
8297
|
|
20729
|
-
]);
|
|
20730
|
-
function isDroppedCharacter(code) {
|
|
20731
|
-
if (code === 10) return false;
|
|
20732
|
-
if (code <= 31) return true;
|
|
20733
|
-
if (code >= 127 && code <= 159) return true;
|
|
20734
|
-
return BIDI_CONTROLS.has(code);
|
|
20735
|
-
}
|
|
20736
|
-
function toPlainText(text, max) {
|
|
20737
|
-
let kept = "";
|
|
20738
|
-
for (const character of text.replace(/\r\n?/g, "\n").replace(/\t/g, " ")) if (!isDroppedCharacter(character.codePointAt(0) ?? 0)) kept += character;
|
|
20739
|
-
const cleaned = kept.replace(/ {2,}/g, " ").replace(/ *\n */g, "\n").replace(/\n{3,}/g, "\n\n").trim();
|
|
20740
|
-
if (cleaned.length <= max) return cleaned;
|
|
20741
|
-
return `${cleaned.slice(0, max - 1).trimEnd()}…`;
|
|
20742
|
-
}
|
|
20743
|
-
|
|
20744
|
-
// src/agentMarks/marksStore.ts
|
|
20745
|
-
/** The text of a mark is model output: kept as plain text, never markup. */
|
|
20746
|
-
const CALLOUT_LABEL_MAX = 200;
|
|
20747
|
-
const NOTE_MESSAGE_MAX = 280;
|
|
20748
|
-
/** A workflow holds at most this many notes, resolved ones included. */
|
|
20749
|
-
const MAX_NOTES_PER_WORKFLOW = 20;
|
|
20750
|
-
let sequence = 0;
|
|
20751
|
-
const nextId = (prefix) => {
|
|
20752
|
-
sequence += 1;
|
|
20753
|
-
return `${prefix}${sequence}`;
|
|
20754
|
-
};
|
|
20755
|
-
const useAgentMarksStore = create()((set, get) => ({
|
|
20756
|
-
callouts: [],
|
|
20757
|
-
notes: [],
|
|
20758
|
-
nextNumber: {},
|
|
20759
|
-
openNoteId: null,
|
|
20760
|
-
flash: null,
|
|
20761
|
-
actions: {
|
|
20762
|
-
addCallout: ({ label, target, element, route }) => {
|
|
20763
|
-
const callout = {
|
|
20764
|
-
id: nextId("c"),
|
|
20765
|
-
label: toPlainText(label, 200),
|
|
20766
|
-
target,
|
|
20767
|
-
route,
|
|
20768
|
-
element: element ? new WeakRef(element) : null
|
|
20769
|
-
};
|
|
20770
|
-
set((state) => ({ callouts: [...state.callouts, callout].slice(-3) }));
|
|
20771
|
-
return callout;
|
|
20772
|
-
},
|
|
20773
|
-
rebindCallout: (id, element) => set((state) => ({ callouts: state.callouts.map((callout) => callout.id === id ? {
|
|
20774
|
-
...callout,
|
|
20775
|
-
element: new WeakRef(element)
|
|
20776
|
-
} : callout) })),
|
|
20777
|
-
removeCallout: (id) => set((state) => ({ callouts: state.callouts.filter((callout) => callout.id !== id) })),
|
|
20778
|
-
clearCallouts: () => {
|
|
20779
|
-
const count = get().callouts.length;
|
|
20780
|
-
if (count > 0) set({ callouts: [] });
|
|
20781
|
-
return count;
|
|
20782
|
-
},
|
|
20783
|
-
dropCalloutsOffRoute: (route) => {
|
|
20784
|
-
const { callouts } = get();
|
|
20785
|
-
const kept = callouts.filter((callout) => callout.route === route);
|
|
20786
|
-
if (kept.length !== callouts.length) set({ callouts: kept });
|
|
20787
|
-
return callouts.length - kept.length;
|
|
20788
|
-
},
|
|
20789
|
-
addNote: (input) => {
|
|
20790
|
-
const { notes, nextNumber } = get();
|
|
20791
|
-
if (notes.filter((note) => note.workflowKey === input.workflowKey).length >= 20) return null;
|
|
20792
|
-
const number = nextNumber[input.workflowKey] ?? 1;
|
|
20793
|
-
const note = {
|
|
20794
|
-
id: nextId("n"),
|
|
20795
|
-
number,
|
|
20796
|
-
workflowKey: input.workflowKey,
|
|
20797
|
-
nodeId: input.nodeId,
|
|
20798
|
-
nodeLabel: toPlainText(input.nodeLabel, 80),
|
|
20799
|
-
paramKey: input.paramKey ?? null,
|
|
20800
|
-
kind: input.kind,
|
|
20801
|
-
message: toPlainText(input.message, 280),
|
|
20802
|
-
resolved: false
|
|
20803
|
-
};
|
|
20804
|
-
set({
|
|
20805
|
-
notes: [...notes, note],
|
|
20806
|
-
nextNumber: {
|
|
20807
|
-
...nextNumber,
|
|
20808
|
-
[input.workflowKey]: number + 1
|
|
20809
|
-
}
|
|
20810
|
-
});
|
|
20811
|
-
return note;
|
|
20812
|
-
},
|
|
20813
|
-
setResolved: (id, resolved) => set((state) => ({ notes: state.notes.map((note) => note.id === id ? {
|
|
20814
|
-
...note,
|
|
20815
|
-
resolved
|
|
20816
|
-
} : note) })),
|
|
20817
|
-
removeNote: (id) => set((state) => ({
|
|
20818
|
-
notes: state.notes.filter((note) => note.id !== id),
|
|
20819
|
-
openNoteId: state.openNoteId === id ? null : state.openNoteId
|
|
20820
|
-
})),
|
|
20821
|
-
clearNotes: (workflowKey) => {
|
|
20822
|
-
const { notes, openNoteId } = get();
|
|
20823
|
-
const kept = workflowKey === void 0 ? [] : notes.filter((note) => note.workflowKey !== workflowKey);
|
|
20824
|
-
const removed = notes.length - kept.length;
|
|
20825
|
-
if (removed > 0) set({
|
|
20826
|
-
notes: kept,
|
|
20827
|
-
openNoteId: kept.some((note) => note.id === openNoteId) ? openNoteId : null
|
|
20828
|
-
});
|
|
20829
|
-
return removed;
|
|
20830
|
-
},
|
|
20831
|
-
openNote: (id) => set({ openNoteId: id }),
|
|
20832
|
-
flashNode: (nodeId) => {
|
|
20833
|
-
sequence += 1;
|
|
20834
|
-
set({ flash: {
|
|
20835
|
-
nodeId,
|
|
20836
|
-
token: sequence
|
|
20837
|
-
} });
|
|
20838
|
-
}
|
|
20839
|
-
}
|
|
20840
|
-
}));
|
|
20841
|
-
/** Reset everything (tests, and sign-out if a host wants it). */
|
|
20842
|
-
function resetAgentMarks() {
|
|
20843
|
-
useAgentMarksStore.setState({
|
|
20844
|
-
callouts: [],
|
|
20845
|
-
notes: [],
|
|
20846
|
-
nextNumber: {},
|
|
20847
|
-
openNoteId: null,
|
|
20848
|
-
flash: null
|
|
20849
|
-
});
|
|
20850
|
-
}
|
|
20851
|
-
|
|
20852
20697
|
// src/builder/agentNotes/notesKey.ts
|
|
20853
20698
|
/**
|
|
20854
20699
|
* ★ BOFF-11584: which workflow a canvas note belongs to. A saved workflow is
|
|
@@ -27585,8 +27430,8 @@ function EditLeaseBanner() {
|
|
|
27585
27430
|
}
|
|
27586
27431
|
|
|
27587
27432
|
// src/builder/components/flow-builder/flow-builder.tsx
|
|
27588
|
-
const LazyNodeDetailView = lazy(() => import("./node-detail-view-
|
|
27589
|
-
const LazyQuickConfigPanel = lazy(() => import("./quick-config-panel-
|
|
27433
|
+
const LazyNodeDetailView = lazy(() => import("./node-detail-view-CAws5qjg.js").then((m) => ({ default: m.NodeDetailView })));
|
|
27434
|
+
const LazyQuickConfigPanel = lazy(() => import("./quick-config-panel-DOzNkSVV.js").then((m) => ({ default: m.QuickConfigPanel })));
|
|
27590
27435
|
const edgeTypes = { deletable: CustomDeletableEdge };
|
|
27591
27436
|
const edgeOptions = {
|
|
27592
27437
|
type: "deletable",
|
|
@@ -27646,7 +27491,7 @@ const FlowBuilder = ({ readOnly = false }) => {
|
|
|
27646
27491
|
const [agentTools, setAgentTools] = useState([]);
|
|
27647
27492
|
useEffect(() => {
|
|
27648
27493
|
let cancelled = false;
|
|
27649
|
-
import("./agentTools-
|
|
27494
|
+
import("./agentTools-B1IK1JEO.js").then(({ createBuilderAgentTools }) => {
|
|
27650
27495
|
if (cancelled) return;
|
|
27651
27496
|
setAgentTools(createBuilderAgentTools({ durableFunctionsEnabled: () => paletteGatesRef.current }));
|
|
27652
27497
|
}).catch((error) => {
|
|
@@ -27701,7 +27546,7 @@ const FlowBuilder = ({ readOnly = false }) => {
|
|
|
27701
27546
|
const [noteTools, setNoteTools] = useState([]);
|
|
27702
27547
|
useEffect(() => {
|
|
27703
27548
|
let cancelled = false;
|
|
27704
|
-
import("./canvasNoteTools-
|
|
27549
|
+
import("./canvasNoteTools-eewVHVuy.js").then(({ createCanvasNoteTools }) => {
|
|
27705
27550
|
if (cancelled) return;
|
|
27706
27551
|
setNoteTools(createCanvasNoteTools({ focusNode: (nodeId) => fitViewRef.current({
|
|
27707
27552
|
nodes: [{ id: nodeId }],
|
|
@@ -28009,4 +27854,4 @@ const FlowBuilderPage = ({ workflow, readOnly = false }) => {
|
|
|
28009
27854
|
] });
|
|
28010
27855
|
};
|
|
28011
27856
|
|
|
28012
|
-
export {
|
|
27857
|
+
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 };
|