@burdenoff/fluidgrids-fe-sdk 2026.1113.7 → 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-DZ0YBcTL.js → AiStudioPage-Di3eW5Lb.js} +1 -1
- package/dist/{ExecutionDetailPage-CoRLOiiZ.js → ExecutionDetailPage-B2jVApvM.js} +4 -1
- package/dist/{ExecutionsListPage-Dr0Ychbr.js → ExecutionsListPage-ZCmFNid9.js} +3 -0
- package/dist/{TemplatePreview-WiRz3SCv.js → TemplatePreview-DYxxlBad.js} +1 -1
- package/dist/TranslationBridge-Bd4aJKMs.d.ts +11 -0
- package/dist/{WorkflowBuilder-CQWz7dXc.js → WorkflowBuilder-Dp9chOr5.js} +1 -1
- package/dist/{WorkflowBuilder-BdnCh2hB.js → WorkflowBuilder-LkCC0Arp.js} +1 -1
- package/dist/agent-tools.d.ts +1 -1
- package/dist/agent-tools.js +2 -2
- package/dist/{canvasNoteTools-Cp3UPIM8.js → canvasNoteTools-D9RwHOz4.js} +1 -1
- 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-CJ00qt1Z.js → flow-builder-7gVV3Y8R.js} +111 -13
- 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 +14 -13
- package/dist/{marksStore-DGCXjTmZ.js → marksStore-a9oIMMot.js} +25 -1
- package/dist/observability.d.ts +1 -1
- package/dist/proactive.d.ts +66 -0
- package/dist/proactive.js +237 -0
- package/dist/templates.js +1 -1
- package/dist/{uiMarkTools-DZ6akjQK.js → uiMarkTools-B2581Qg-.js} +1 -1
- package/dist/{useWorkflowProposal-UtJYycLv.js → use-workflow-tests-BUzndyWO.js} +4 -3265
- package/dist/useWorkflowProposal-B9vXLKef.js +3280 -0
- package/dist/workflow-builder.js +2 -2
- package/dist/workflow-host.d.ts +2 -1
- package/dist/workflow-pages.d.ts +1 -1
- package/dist/workflow-pages.js +5 -5
- package/package.json +7 -3
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
import { t as __exportAll } from "./rolldown-runtime-hDbaFkMy.js";
|
|
3
3
|
import { t as ThemeProvider } from "./theme-provider-B3mIuz2d.js";
|
|
4
|
-
import { a as useAiWorkflowTemplates, i as enrichDraftNodes, n as AI_DRAFT_MAX_PROMPT_LENGTH, r as draftToCanvas, t as FlowBuilderPage } from "./flow-builder-
|
|
4
|
+
import { a as useAiWorkflowTemplates, i as enrichDraftNodes, n as AI_DRAFT_MAX_PROMPT_LENGTH, r as draftToCanvas, t as FlowBuilderPage } from "./flow-builder-7gVV3Y8R.js";
|
|
5
5
|
import { T as buildOperationSeed, ht as classifyCreateRefusal, mt as builderPathOf, u as ensureNodeTypesLoaded } from "./FluidGridsProvider-DQP7gPxN.js";
|
|
6
6
|
import { n as getFluidGridsClient } from "./client-Ctl4jmY3.js";
|
|
7
7
|
import { o as throwIfResultError } from "./errors-xPZ-IbQd.js";
|
|
@@ -14,16 +14,18 @@ import { n as getFluidGridsClient, r as getFluidGridsClientSafe } from "./client
|
|
|
14
14
|
import { o as throwIfResultError, t as describeOperationError } from "./errors-xPZ-IbQd.js";
|
|
15
15
|
import { r as getFluidGridsConfig } from "./config-X97zrIvn.js";
|
|
16
16
|
import { i as SdkPermissionButton, s as useFluidGridsPermission, t as FLUIDGRIDS_PERMISSIONS } from "./constants-dcxg6zG6.js";
|
|
17
|
+
import { r as runSuggestAnchorProps } from "./entities-I_0kio3q.js";
|
|
17
18
|
import { t as EntityTagPicker } from "./EntityTagPicker-BppBSEJk.js";
|
|
18
19
|
import { a as useRecipientLabel, n as ApprovalApprovers, t as channelLabel } from "./channel-DtF1n_ab.js";
|
|
19
20
|
import { r as useRunHumanRequests } from "./useHumanRequests-DwG2tQ3f.js";
|
|
20
21
|
import { a as encodedPayloadBytes, f as EffectBadge, h as useRunPolicyDecisions, i as decodePayloads, l as formatBudgetUsd, n as checkCodecServerUrl, o as isEncodedPayload, r as containsEncodedPayload, t as CodecServerError } from "./codec-client-CAYl6j46.js";
|
|
21
|
-
import {
|
|
22
|
+
import { t as useWorkflowProposal } from "./useWorkflowProposal-B9vXLKef.js";
|
|
22
23
|
import { t as WorkflowProposalCard } from "./WorkflowProposalCard-SmRv_Egf.js";
|
|
23
24
|
import { t as AiCreditBalanceSlot } from "./aiCreditsBridge-BuE92tKo.js";
|
|
24
25
|
import { a as fetchRunFailureClusters, i as dismissRunFailureCluster, r as OPEN_STATUSES, t as BUCKET_LABELS } from "./FailureTriagePanel-DA91XKVj.js";
|
|
25
26
|
import { a as useDurableRunFields, i as useDeterminismStatus, n as SignalRunDialog, o as useRunStackTrace, r as terminateDurableRun, s as RunHistoryView, t as useRunHistory } from "./useRunHistory-Bxs6LrME.js";
|
|
26
27
|
import { $P as VersioningBehavior, L as AgentStepKind, LI as WorkflowUpdateWaitFor, jd as ErrorType, yI as WorkflowQueryRejectCondition } from "./graphql-types-C5Tr6508.js";
|
|
28
|
+
import { _ as agentTokenStreamsFor, g as agentLiveReplyState, h as useAgentTokenStream, i as canSaveRunAsTestCase, t as saveRunAsTestCase } from "./use-workflow-tests-BUzndyWO.js";
|
|
27
29
|
import { a as formatTokens, d as formatMicroUsd, o as modelLabel, r as aiCost } from "./ai-usage-D7SjIkUZ.js";
|
|
28
30
|
import { _ as useWorkflowTestsEnabled, l as useDurableFunctionNodesEnabled, m as usePhaseCFlags, u as useDurableParityEnabled } from "./feature-flags-B_b8PJ6Z.js";
|
|
29
31
|
import { A as revokeSignalToken, B as updateActivityOptions, D as resetActivities, E as queryRun, N as sendRunUpdate, O as resetRun, R as unpauseActivities, S as fetchSignalTokens, V as upsertRunSearchAttributes, _ as fetchPauseRules, b as fetchRunUpdate, d as failActivityById, g as fetchCodecServerSettings, i as completeActivityById, k as resetRunToLastCleanTask, s as createSignalToken, v as fetchRunControlFields, w as pauseActivities, y as fetchRunHistoryArchive } from "./api-CEnNq15C.js";
|
|
@@ -8382,6 +8384,7 @@ function ExecutionDetailPage() {
|
|
|
8382
8384
|
children: [/* @__PURE__ */ jsxs("div", { children: [
|
|
8383
8385
|
/* @__PURE__ */ jsxs("div", {
|
|
8384
8386
|
className: "flex items-center gap-3 mb-2",
|
|
8387
|
+
...runSuggestAnchorProps(execution.id),
|
|
8385
8388
|
children: [
|
|
8386
8389
|
/* @__PURE__ */ jsx("h1", {
|
|
8387
8390
|
className: "text-2xl sm:text-3xl font-bold text-text-primary",
|
|
@@ -11,6 +11,7 @@ import { n as useNavigationV2 } from "./useNavigationV2-C2WeqN7d.js";
|
|
|
11
11
|
import { a as useRunStatusCounts, c as errorAdvice, f as runStatusLabels, o as ConfirmStopRunDialog, p as RUN_STATUS_CONFIG, s as ADVICE_ERROR_TYPES, u as ExecutionStatusBadge } from "./useDurableParity-BUSM-z_7.js";
|
|
12
12
|
import { t as Disclosure } from "./Disclosure-CsxDspR7.js";
|
|
13
13
|
import { n as formatRunVersion } from "./run-display-BycKYSU0.js";
|
|
14
|
+
import { r as runSuggestAnchorProps } from "./entities-I_0kio3q.js";
|
|
14
15
|
import { Yt as formatElapsedMs, Zt as runDurationMs } from "./FluidGridsProvider-DQP7gPxN.js";
|
|
15
16
|
import { r as useRunHumanRequests } from "./useHumanRequests-DwG2tQ3f.js";
|
|
16
17
|
import { n as runListLinkKey, t as runListFilterFromSearch } from "./run-list-links-DZ8Q5l35.js";
|
|
@@ -1318,6 +1319,7 @@ function ExecutionTable({ executions, workflowNames, loading, canExecute = true,
|
|
|
1318
1319
|
const isSelected = selection.runIds.includes(execution.id);
|
|
1319
1320
|
const isExpanded = expandedRows.has(execution.id);
|
|
1320
1321
|
return /* @__PURE__ */ jsxs(Fragment, { children: [/* @__PURE__ */ jsxs("tr", {
|
|
1322
|
+
...runSuggestAnchorProps(execution.id),
|
|
1321
1323
|
className: `
|
|
1322
1324
|
hover:bg-surface-sunken/50 cursor-pointer transition-colors
|
|
1323
1325
|
${isSelected ? "bg-action-primary-bg/10" : ""}
|
|
@@ -2238,6 +2240,7 @@ function RunsPlainTable({ executions, workflowNames, loading, canExecute = true,
|
|
|
2238
2240
|
priority: "primary",
|
|
2239
2241
|
cell: (run) => /* @__PURE__ */ jsxs("div", {
|
|
2240
2242
|
className: "flex flex-col",
|
|
2243
|
+
...runSuggestAnchorProps(run.id),
|
|
2241
2244
|
children: [/* @__PURE__ */ jsx("span", {
|
|
2242
2245
|
className: "text-sm font-medium text-text-primary",
|
|
2243
2246
|
children: run.workflow?.name || workflowNames?.[run.workflowKey] || run.workflowKey
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
import { t as __exportAll } from "./rolldown-runtime-hDbaFkMy.js";
|
|
3
3
|
import { t as ThemeProvider } from "./theme-provider-B3mIuz2d.js";
|
|
4
|
-
import { t as FlowBuilderPage } from "./flow-builder-
|
|
4
|
+
import { t as FlowBuilderPage } from "./flow-builder-7gVV3Y8R.js";
|
|
5
5
|
import { _ as useInstalledNodes, a as buildNodeCheck, c as useImportWorkflowTemplate, i as useTemplateImportFlow, n as formatTemplatePrice, o as buildRequiredNodeTypes, r as isPaidTemplate } from "./TemplateCard-UnjAFsS4.js";
|
|
6
6
|
import { t as QuotaExhaustedDialog } from "./QuotaExhaustedDialog-nlnRlQ2i.js";
|
|
7
7
|
import { n as WithOpenTemplateAsCode } from "./OpenTemplateAsCodeButton-BdcTxemq.js";
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
|
|
2
|
+
import { ReactNode } from "react";
|
|
3
|
+
type Translator = (key: string, fallback: string, params?: Record<string, string | number>) => string;
|
|
4
|
+
declare const ENGLISH_FALLBACK_TRANSLATOR: Translator;
|
|
5
|
+
interface FluidGridsTranslationProviderProps {
|
|
6
|
+
t: Translator;
|
|
7
|
+
children: ReactNode;
|
|
8
|
+
}
|
|
9
|
+
declare function FluidGridsTranslationProvider({ t, children }: FluidGridsTranslationProviderProps): import("react").JSX.Element;
|
|
10
|
+
declare function useTr(): Translator;
|
|
11
|
+
export { useTr as a, Translator as i, FluidGridsTranslationProvider as n, FluidGridsTranslationProviderProps as r, ENGLISH_FALLBACK_TRANSLATOR as t };
|
|
@@ -6,7 +6,7 @@ import { t as Input } from "./input-ChT6Q-Pr.js";
|
|
|
6
6
|
import { v as Card } from "./TemplateCard-UnjAFsS4.js";
|
|
7
7
|
import { t as cn } from "./cn-QqidFIgr.js";
|
|
8
8
|
import { r as useTr } from "./TranslationBridge-Da-TPgQm.js";
|
|
9
|
-
import { m as FluidGridsMark, p as useNodeSelectedEvent } from "./flow-builder-
|
|
9
|
+
import { m as FluidGridsMark, p as useNodeSelectedEvent } from "./flow-builder-7gVV3Y8R.js";
|
|
10
10
|
import { useCallback, useEffect, useRef, useState } from "react";
|
|
11
11
|
import { Background, Controls, Handle, MarkerType, MiniMap, Position, ReactFlow, ReactFlowProvider, useReactFlow } from "@xyflow/react";
|
|
12
12
|
import { Fragment as Fragment$1, jsx, jsxs } from "react/jsx-runtime";
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
import { t as __exportAll } from "./rolldown-runtime-hDbaFkMy.js";
|
|
3
|
-
import { d as releaseLeaseKeptForReload, f as useWorkflowReloadStore, t as FlowBuilderPage } from "./flow-builder-
|
|
3
|
+
import { d as releaseLeaseKeptForReload, f as useWorkflowReloadStore, t as FlowBuilderPage } from "./flow-builder-7gVV3Y8R.js";
|
|
4
4
|
import { n as registerLiveCanvasHandler } from "./liveCanvas-D5ytXDp8.js";
|
|
5
5
|
import { r as getFluidGridsConfig } from "./config-X97zrIvn.js";
|
|
6
6
|
import { n as getFluidGridsClient } from "./client-Ctl4jmY3.js";
|
package/dist/agent-tools.d.ts
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
|
|
2
|
-
import { a as createUiMarkTools, c as FluidGridsAgentToolDeps, d as triggerNodesOf, i as UiMarkToolOptions, l as createFluidGridsAgentTools, n as resetAgentMarks, o as AgentCalloutOverlay, r as useAgentMarksStore, s as AgentCalloutOverlayProps, t as CanvasNote, u as pickTriggerNode } from "./index-
|
|
2
|
+
import { a as createUiMarkTools, c as FluidGridsAgentToolDeps, d as triggerNodesOf, i as UiMarkToolOptions, l as createFluidGridsAgentTools, n as resetAgentMarks, o as AgentCalloutOverlay, r as useAgentMarksStore, s as AgentCalloutOverlayProps, t as CanvasNote, u as pickTriggerNode } from "./index-BZCX9eJJ.js";
|
|
3
3
|
export { AgentCalloutOverlay, type AgentCalloutOverlayProps, type CanvasNote, type FluidGridsAgentToolDeps, type UiMarkToolOptions, createFluidGridsAgentTools, createUiMarkTools, pickTriggerNode, resetAgentMarks, triggerNodesOf, useAgentMarksStore };
|
package/dist/agent-tools.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
"use client";
|
|
2
|
-
import { a as triggerNodesOf, i as pickTriggerNode, n as AgentCalloutOverlay, r as createFluidGridsAgentTools, t as createUiMarkTools } from "./uiMarkTools-
|
|
3
|
-
import { n as useAgentMarksStore, t as resetAgentMarks } from "./marksStore-
|
|
2
|
+
import { a as triggerNodesOf, i as pickTriggerNode, n as AgentCalloutOverlay, r as createFluidGridsAgentTools, t as createUiMarkTools } from "./uiMarkTools-B2581Qg-.js";
|
|
3
|
+
import { n as useAgentMarksStore, t as resetAgentMarks } from "./marksStore-a9oIMMot.js";
|
|
4
4
|
|
|
5
5
|
export { AgentCalloutOverlay, createFluidGridsAgentTools, createUiMarkTools, pickTriggerNode, resetAgentMarks, triggerNodesOf, useAgentMarksStore };
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
"use client";
|
|
2
|
-
import { n as useAgentMarksStore, r as toPlainText } from "./marksStore-
|
|
2
|
+
import { n as useAgentMarksStore, r as toPlainText } from "./marksStore-a9oIMMot.js";
|
|
3
3
|
import { F as nodeTitle, L as paramsFromOperation, R as selectedOperationOf } from "./FluidGridsProvider-DQP7gPxN.js";
|
|
4
4
|
import { A as useFlowStore } from "./node-operation-selection-BGj5YwAS.js";
|
|
5
5
|
import { t as notesKeyOf } from "./notesKey-5EaREBGA.js";
|
|
@@ -1,14 +1,6 @@
|
|
|
1
1
|
|
|
2
2
|
import { ReactElement, ReactNode } from "react";
|
|
3
3
|
import { ApolloClient } from "@apollo/client/core";
|
|
4
|
-
type Translator = (key: string, fallback: string, params?: Record<string, string | number>) => string;
|
|
5
|
-
declare const ENGLISH_FALLBACK_TRANSLATOR: Translator;
|
|
6
|
-
interface FluidGridsTranslationProviderProps {
|
|
7
|
-
t: Translator;
|
|
8
|
-
children: ReactNode;
|
|
9
|
-
}
|
|
10
|
-
declare function FluidGridsTranslationProvider({ t, children }: FluidGridsTranslationProviderProps): import("react").JSX.Element;
|
|
11
|
-
declare function useTr(): Translator;
|
|
12
4
|
declare function refreshNodeRegistry(): Promise<void>;
|
|
13
5
|
interface FluidGridsClientConfig {
|
|
14
6
|
apiGatewayUrl: string;
|
|
@@ -159,4 +151,4 @@ declare const FLUIDGRIDS_PERMISSIONS: {
|
|
|
159
151
|
readonly TOOL_APPROVAL_REQUEST_EXECUTE: "tool-approval-request:execute";
|
|
160
152
|
};
|
|
161
153
|
type FluidGridsPermission = (typeof FLUIDGRIDS_PERMISSIONS)[keyof typeof FLUIDGRIDS_PERMISSIONS];
|
|
162
|
-
export {
|
|
154
|
+
export { isFluidGridsClientReady as C, refreshNodeRegistry as D, waitForFluidGridsClient as E, getFluidGridsClientSafe as S, setFluidGridsClient as T, resetGlobalStoreClient as _, FluidGridsPermissionsProviderProps as a, createFluidGridsClient as b, SdkPermissionButton as c, SdkPermissionGateProps as d, evaluatePermissionCheck as f, getGlobalStoreClient as g, createGlobalStoreClient as h, FluidGridsPermissionsProvider as i, SdkPermissionButtonProps as l, GlobalClientConfig as m, FluidGridsPermission as n, FluidGridsPermissionsValue as o, useFluidGridsPermission as p, ALLOW_ALL_PERMISSIONS as r, PermissionCheck as s, FLUIDGRIDS_PERMISSIONS as t, SdkPermissionGate as u, setGlobalStoreClient as v, resetFluidGridsClient as w, getFluidGridsClient as x, FluidGridsClientConfig as y };
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { suggestAnchorProps } from "@burdenoff/fe-libs/shared/proactive";
|
|
3
|
+
|
|
4
|
+
// src/proactive/entities.ts
|
|
5
|
+
/**
|
|
6
|
+
* ★ BOFF-13166: the FluidGrids reference pack of the proactive agent (epic
|
|
7
|
+
* BOFF-13159). These names are a contract with the backend pack in
|
|
8
|
+
* wspace-sandbox-svc (`proactive/packs/fluidgrids.ts`): a suggestion's anchor
|
|
9
|
+
* and actions carry exactly these strings, so they never change here alone.
|
|
10
|
+
*
|
|
11
|
+
* Anchors (contract C7):
|
|
12
|
+
* - `workflow_run`: entityId = the run id (the id in `/workflows/runs/<id>`);
|
|
13
|
+
* - `workflow`: entityId = the workflowKey (the key in
|
|
14
|
+
* `/workflows/workflow/<key>/<version>`, the same id the assistant's page
|
|
15
|
+
* context reports), part = a canvas node id;
|
|
16
|
+
* - `connection`: entityId = the integration connection id
|
|
17
|
+
* (`/integrations/connections/<id>`).
|
|
18
|
+
*/
|
|
19
|
+
const FLUIDGRIDS_PROACTIVE_ENTITY = {
|
|
20
|
+
run: "workflow_run",
|
|
21
|
+
workflow: "workflow",
|
|
22
|
+
connection: "connection"
|
|
23
|
+
};
|
|
24
|
+
/** The product-registered action types of the pack (the built-ins are fe-libs'). */
|
|
25
|
+
const FLUIDGRIDS_PROACTIVE_ACTION = {
|
|
26
|
+
reviewProposal: "review-proposal",
|
|
27
|
+
proposeFix: "propose-fix",
|
|
28
|
+
openConnection: "open-connection"
|
|
29
|
+
};
|
|
30
|
+
/** The attribute that lets a suggestion about this run pin to an element. */
|
|
31
|
+
function runSuggestAnchorProps(runId) {
|
|
32
|
+
return suggestAnchorProps({
|
|
33
|
+
entityType: FLUIDGRIDS_PROACTIVE_ENTITY.run,
|
|
34
|
+
entityId: runId
|
|
35
|
+
});
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
export { FLUIDGRIDS_PROACTIVE_ENTITY as n, runSuggestAnchorProps as r, FLUIDGRIDS_PROACTIVE_ACTION as t };
|
package/dist/executions.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
"use client";
|
|
2
|
-
import { t as ExecutionsListPage } from "./ExecutionsListPage-
|
|
3
|
-
import { t as ExecutionDetailPage } from "./ExecutionDetailPage-
|
|
2
|
+
import { t as ExecutionsListPage } from "./ExecutionsListPage-ZCmFNid9.js";
|
|
3
|
+
import { t as ExecutionDetailPage } from "./ExecutionDetailPage-B2jVApvM.js";
|
|
4
4
|
|
|
5
5
|
export { ExecutionDetailPage, ExecutionsListPage };
|
|
@@ -25,9 +25,9 @@ import { i as emitFluidGridsEvent } from "./token-refresh-link-BjN7H4qA.js";
|
|
|
25
25
|
import { n as useBuilderReadOnly, t as BuilderReadOnlyProvider } from "./read-only-context-Dt9N9SIG.js";
|
|
26
26
|
import { r as MAPPING_TYPE_COLORS, t as MAPPING_COMPATIBILITY_COLORS } from "./mapping-colors-BIX_YeCQ.js";
|
|
27
27
|
import { n as LogsPanel } from "./logs-panel-Cn4gGng9.js";
|
|
28
|
-
import {
|
|
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
29
|
import { r as useExecutionActions } from "./useExecutions-DSZisQHk.js";
|
|
30
|
-
import { n as useAgentMarksStore } from "./marksStore-
|
|
30
|
+
import { n as useAgentMarksStore } from "./marksStore-a9oIMMot.js";
|
|
31
31
|
import { t as notesKeyOf } from "./notesKey-5EaREBGA.js";
|
|
32
32
|
import { a as saveWorkflowDescription, c as CreateWorkflowRefusalDialog, i as normalizeWorkflowDescription, n as useWorkflowCodeExport, o as visibleWorkflowDescription, r as commitWorkflowDescription, s as workflowDescriptionCharactersLeft } from "./useWorkflowCodeExport-Bj4QY-xY.js";
|
|
33
33
|
import { r as RUNS_QUOTA_NAME, t as BILLING_PLANS_PATH } from "./quota-Cdt8yz7N.js";
|
|
@@ -40,6 +40,7 @@ import { t as WorkflowDefinitionDocument } from "./WorkflowDefinitionDocument-DZ
|
|
|
40
40
|
import { o as countLifecycle, t as VersionLifecycleBar } from "./VersionLifecycleBar-DuphLOT0.js";
|
|
41
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";
|
|
42
42
|
import { t as buildNodeDisplayMap } from "./run-display-BycKYSU0.js";
|
|
43
|
+
import { t as useWorkflowProposal } from "./useWorkflowProposal-B9vXLKef.js";
|
|
43
44
|
import { n as useRequestedProposal } from "./useRequestedProposal-B7uPXfZB.js";
|
|
44
45
|
import { t as AiCreditBalanceSlot } from "./aiCreditsBridge-BuE92tKo.js";
|
|
45
46
|
import { t as downloadBlob } from "./workflow-transfer-CQnQC-ke.js";
|
|
@@ -64,6 +65,7 @@ import { AlertCircle, AlertTriangle, ArrowRight, BadgeCheck, Check, CircleHelp,
|
|
|
64
65
|
import { isEmpty } from "radash";
|
|
65
66
|
import { animate, easeOut } from "popmotion";
|
|
66
67
|
import { createPortal } from "react-dom";
|
|
68
|
+
import { SuggestionBadge } from "@burdenoff/fe-libs/shared/proactive";
|
|
67
69
|
import { useUnsavedChanges } from "@burdenoff/fe-libs/shared/hooks";
|
|
68
70
|
import { buildActorFallback, useActorProfiles } from "@burdenoff/fe-libs/shared";
|
|
69
71
|
|
|
@@ -12208,6 +12210,17 @@ function WebhookRunFollower() {
|
|
|
12208
12210
|
*
|
|
12209
12211
|
* Everything here is `data-agent="deny"`: an agent cannot read or press its
|
|
12210
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.
|
|
12211
12224
|
*/
|
|
12212
12225
|
const FLASH_MS = 1800;
|
|
12213
12226
|
const RING_PAD = 8;
|
|
@@ -12315,8 +12328,15 @@ const CanvasNoteCard = ({ note, nodeOnCanvas }) => {
|
|
|
12315
12328
|
]
|
|
12316
12329
|
});
|
|
12317
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)) });
|
|
12318
12338
|
/** The pins above one node, and the open card. */
|
|
12319
|
-
const NodePins = ({ nodeId, notes }) => {
|
|
12339
|
+
const NodePins = ({ nodeId, notes, suggestions }) => {
|
|
12320
12340
|
const tr = useTr();
|
|
12321
12341
|
const openNoteId = useAgentMarksStore((state) => state.openNoteId);
|
|
12322
12342
|
const openNote = useAgentMarksStore((state) => state.actions.openNote);
|
|
@@ -12335,9 +12355,12 @@ const NodePins = ({ nodeId, notes }) => {
|
|
|
12335
12355
|
children: [open && /* @__PURE__ */ jsx(CanvasNoteCard, {
|
|
12336
12356
|
note: open,
|
|
12337
12357
|
nodeOnCanvas: true
|
|
12338
|
-
}), /* @__PURE__ */
|
|
12358
|
+
}), /* @__PURE__ */ jsxs("div", {
|
|
12339
12359
|
className: "flex gap-1",
|
|
12340
|
-
children:
|
|
12360
|
+
children: [suggestions && /* @__PURE__ */ jsx(SuggestionBadges, {
|
|
12361
|
+
suggestions: suggestions.items,
|
|
12362
|
+
controls: suggestions.controls
|
|
12363
|
+
}), notes.map((note) => /* @__PURE__ */ jsx("button", {
|
|
12341
12364
|
type: "button",
|
|
12342
12365
|
"data-testid": "fg-canvas-note-pin",
|
|
12343
12366
|
"aria-expanded": note.id === openNoteId,
|
|
@@ -12348,7 +12371,7 @@ const NodePins = ({ nodeId, notes }) => {
|
|
|
12348
12371
|
"aria-hidden": "true",
|
|
12349
12372
|
className: "size-3.5"
|
|
12350
12373
|
}) : note.number
|
|
12351
|
-
}, note.id))
|
|
12374
|
+
}, note.id))]
|
|
12352
12375
|
})]
|
|
12353
12376
|
})
|
|
12354
12377
|
});
|
|
@@ -12440,10 +12463,48 @@ const NotesList = ({ notes, live }) => {
|
|
|
12440
12463
|
})
|
|
12441
12464
|
});
|
|
12442
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
|
+
}
|
|
12443
12501
|
const CanvasNotesLayer = () => {
|
|
12444
12502
|
const workflowKey = useFlowStore((state) => notesKeyOf(state.workflow));
|
|
12503
|
+
const savedKey = useFlowStore((state) => state.workflow.workflowKey);
|
|
12445
12504
|
const nodeIds = useFlowStore(useShallow((state) => state.workflow.nodes.map((node) => node.id)));
|
|
12446
12505
|
const allNotes = useAgentMarksStore((state) => state.notes);
|
|
12506
|
+
const canvasSuggestions = useAgentMarksStore((state) => state.canvasSuggestions);
|
|
12507
|
+
useReportProactiveCanvas(savedKey || void 0, nodeIds);
|
|
12447
12508
|
const notes = useMemo(() => allNotes.filter((note) => note.workflowKey === workflowKey), [allNotes, workflowKey]);
|
|
12448
12509
|
const live = useMemo(() => new Set(nodeIds), [nodeIds]);
|
|
12449
12510
|
const byNode = useMemo(() => {
|
|
@@ -12452,10 +12513,36 @@ const CanvasNotesLayer = () => {
|
|
|
12452
12513
|
if (!live.has(note.nodeId)) continue;
|
|
12453
12514
|
groups.set(note.nodeId, [...groups.get(note.nodeId) ?? [], note]);
|
|
12454
12515
|
}
|
|
12455
|
-
return
|
|
12516
|
+
return groups;
|
|
12456
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]);
|
|
12457
12544
|
return /* @__PURE__ */ jsxs(Fragment$1, { children: [
|
|
12458
|
-
/* @__PURE__ */ jsxs(ViewportPortal, { children: [byNode.map(([nodeId, nodeNotes]) => {
|
|
12545
|
+
/* @__PURE__ */ jsxs(ViewportPortal, { children: [[...byNode.entries()].map(([nodeId, nodeNotes]) => {
|
|
12459
12546
|
const openNotes = nodeNotes.filter((note) => !note.resolved);
|
|
12460
12547
|
if (openNotes.length === 0) return null;
|
|
12461
12548
|
const tone = openNotes.some((note) => note.kind === "fix") ? "fix" : "info";
|
|
@@ -12464,10 +12551,21 @@ const CanvasNotesLayer = () => {
|
|
|
12464
12551
|
tone
|
|
12465
12552
|
}, nodeId);
|
|
12466
12553
|
}), /* @__PURE__ */ jsx(FlashRing, {})] }),
|
|
12467
|
-
|
|
12468
|
-
nodeId
|
|
12469
|
-
|
|
12470
|
-
|
|
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
|
+
}),
|
|
12471
12569
|
notes.length > 0 && /* @__PURE__ */ jsx(NotesList, {
|
|
12472
12570
|
notes,
|
|
12473
12571
|
live
|
|
@@ -19385,7 +19483,7 @@ const FlowBuilder = ({ readOnly = false, fitToScreen = false }) => {
|
|
|
19385
19483
|
useEffect(() => {
|
|
19386
19484
|
fitViewRef.current = fitView;
|
|
19387
19485
|
}, [fitView]);
|
|
19388
|
-
useLazyAgentTools(() => import("./canvasNoteTools-
|
|
19486
|
+
useLazyAgentTools(() => import("./canvasNoteTools-D9RwHOz4.js").then(({ createCanvasNoteTools }) => createCanvasNoteTools({ focusNode: (nodeId) => fitViewRef.current({
|
|
19389
19487
|
nodes: [{ id: nodeId }],
|
|
19390
19488
|
duration: 400,
|
|
19391
19489
|
padding: .6,
|
|
@@ -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>>;
|