@burdenoff/fluidgrids-fe-sdk 2026.1113.9 → 2026.1113.11
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-D9vovsZE.js → AiStudioPage-BP2cLXEK.js} +4 -4
- package/dist/{DataSinkDashboardPage-CXb1uNau.js → DataSinkDashboardPage-CiFi9YXQ.js} +1 -1
- package/dist/{ExecutionDetailPage-BuU66VvK.js → ExecutionDetailPage-BfFrWnBj.js} +104 -44
- package/dist/{ExecutionsListPage-DMAOPJCa.js → ExecutionsListPage-BRvj71Nd.js} +6 -6
- package/dist/{FailureTriagePanel-DA91XKVj.js → FailureTriagePanel-CbDIdU8s.js} +1 -1
- package/dist/{FluidGridsProvider-BOBuK7kj.js → FluidGridsProvider-Dxehlm-2.js} +111 -11
- package/dist/{HistoryPage-DUcPEycb.js → HistoryPage-CjtgUOZr.js} +1 -1
- package/dist/{InsightsPage-C3FjaLKN.js → InsightsPage-BsGqBpUO.js} +5 -5
- package/dist/{OpenTemplateAsCodeButton-BdcTxemq.js → OpenTemplateAsCodeButton-C-6JVZoS.js} +1 -1
- package/dist/{PaidTemplateConfirm-Dop_rxCQ.js → PaidTemplateConfirm-BUBCnbP0.js} +1 -1
- package/dist/{QuotaExhaustedDialog-CijT1MyD.js → QuotaExhaustedDialog-BEsj0A-I.js} +1 -1
- package/dist/{SettingsPage-C4G9OlJV.js → SettingsPage-DpBhx95x.js} +6 -6
- package/dist/{TaskQueuesPage-DsGNGmGN.js → TaskQueuesPage-DLzuumGp.js} +1 -1
- package/dist/{TemplateCard-7rE1VAIC.js → TemplateCard-DD3vJ3a5.js} +4 -4
- package/dist/{TemplateConfigurationModal-CxUEsjbr.js → TemplateConfigurationModal-BtzI-4fr.js} +1 -1
- package/dist/{TemplatePreview-CSA9W-e1.js → TemplatePreview-Ca7df91b.js} +5 -5
- package/dist/{TemplatesPage-C_trA48U.js → TemplatesPage-BSMLtMnf.js} +7 -7
- package/dist/{WorkflowBuilder-DZWmp9Vg.js → WorkflowBuilder-Bok_WtPQ.js} +6 -6
- package/dist/{WorkflowBuilder-CkoZDS1_.js → WorkflowBuilder-Dh8MYfZJ.js} +4 -4
- package/dist/{WorkflowSearchRedirect-DQj9_HqI.js → WorkflowSearchRedirect-bcWo68LY.js} +1 -1
- package/dist/{WorkflowShareDialog-BcfzZDOj.js → WorkflowShareDialog-D8psodlb.js} +1 -1
- package/dist/{WorkflowsList-BOTt7lX5.js → WorkflowsList-DURQu2ZD.js} +10 -10
- package/dist/{agentTools-CSoCNDRx.js → agentTools-B4BDCe57.js} +3 -3
- package/dist/{ai-usage-D7SjIkUZ.js → ai-usage-DVtvLZ2P.js} +1 -1
- package/dist/{askAboutBridge-kpcjcR9Y.js → askAboutBridge-ByYsQams.js} +36 -2
- package/dist/{assert-rules-C5739QR0.js → assert-rules-BbSyxL5d.js} +1 -1
- package/dist/assistant.d.ts +2 -0
- package/dist/assistant.js +1 -1
- package/dist/{attach-node-helpers-CtV1mej0.js → attach-node-helpers-CCWFS75V.js} +1 -1
- package/dist/{canvasNoteTools-DTc3EKvg.js → canvasNoteTools-CLMZ6u5m.js} +2 -2
- package/dist/executions.js +2 -2
- package/dist/{flow-builder-CYlYHdhf.js → flow-builder-CIvz3sOr.js} +19 -19
- package/dist/{graphql-types-C5Tr6508.js → graphql-types-D82O-0XY.js} +513 -47
- package/dist/history.js +1 -1
- package/dist/{index-8Ai8teoo.d.ts → index-BDN8AK1D.d.ts} +1251 -27
- package/dist/index.d.ts +2 -2
- package/dist/index.js +34 -34
- package/dist/{logs-panel-Cn4gGng9.js → logs-panel-_Dl5Nrdn.js} +1 -1
- package/dist/{node-detail-view-N6n3qegt.js → node-detail-view-Dz1ZCIzV.js} +7 -7
- package/dist/{node-editor-tab-body-CivWI2hg.js → node-editor-tab-body-D5ybpm-b.js} +3 -3
- package/dist/{node-operation-selection-BGj5YwAS.js → node-operation-selection-bFx9s45-.js} +16 -4
- package/dist/observability.d.ts +1 -1
- package/dist/observability.js +2 -2
- package/dist/{popover-a8WKNgPP.js → popover-ClSWhtja.js} +104 -3
- package/dist/{quick-config-panel-DABEVJR9.js → quick-config-panel-iDMk4TT5.js} +4 -4
- package/dist/{run-list-links-DZ8Q5l35.js → run-list-links-CPJimzkr.js} +1 -1
- package/dist/{run-mode-BMxym0mD.js → run-mode-Du-fvjtE.js} +1 -1
- package/dist/{schedule-panel--u7WXnaC.js → schedule-panel-DzkTZm2q.js} +309 -66
- package/dist/settings.js +1 -1
- package/dist/{sidebar-node-editor-BHqtoMC5.js → sidebar-node-editor-C16VnTzr.js} +4 -4
- package/dist/{template-code-CobAYaeH.js → template-code-CEjudJEY.js} +1 -1
- package/dist/templates.js +2 -2
- package/dist/{use-workflow-tests-BUzndyWO.js → use-workflow-tests-Lz8fPQZg.js} +2 -2
- package/dist/{useAgentDefinitions-DykIYrep.js → useAgentDefinitions-akQ6WwzD.js} +1 -1
- package/dist/{useDurableParity-sS0LIJ_l.js → useDurableParity-fZcATZHI.js} +1 -1
- package/dist/{useExecutions-GgjDOgcd.js → useExecutions-lRqeXDYS.js} +2 -2
- package/dist/{useGlobalStoreClient-BfmKmeIx.js → useGlobalStoreClient-BOI2kYRv.js} +1 -1
- package/dist/{useObservability-AMDVk_hX.js → useObservability-CBFLQBQO.js} +1 -1
- package/dist/{useRunHistory-gnqIoJnZ.js → useRunHistory-DSDD_ha3.js} +2 -2
- package/dist/{useWorkflowCodeExport-DrcfDTcD.js → useWorkflowCodeExport-qGat2KNz.js} +2 -2
- package/dist/{useWorkflows-DSZUrK_o.js → useWorkflows-CXwXQg74.js} +1 -1
- package/dist/workflow-builder.js +5 -5
- package/dist/{workflow-code-transfer-Dbnvw5fc.js → workflow-code-transfer-50pRK3nx.js} +1 -1
- package/dist/workflow-pages.d.ts +1 -1
- package/dist/workflow-pages.js +14 -14
- package/dist/workflow-preview.js +1 -1
- package/dist/workflows-list.js +1 -1
- package/package.json +1 -1
|
@@ -1,15 +1,15 @@
|
|
|
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-
|
|
5
|
-
import {
|
|
4
|
+
import { a as useAiWorkflowTemplates, i as enrichDraftNodes, n as AI_DRAFT_MAX_PROMPT_LENGTH, r as draftToCanvas, t as FlowBuilderPage } from "./flow-builder-CIvz3sOr.js";
|
|
5
|
+
import { bt as builderPathOf, j as buildOperationSeed, u as ensureNodeTypesLoaded, xt as classifyCreateRefusal } from "./FluidGridsProvider-Dxehlm-2.js";
|
|
6
6
|
import { n as getFluidGridsClient } from "./client-Ctl4jmY3.js";
|
|
7
7
|
import { o as throwIfResultError } from "./errors-xPZ-IbQd.js";
|
|
8
8
|
import { a as notifyFluidGridsAiCreditsUpdated, t as AiCreditBalanceSlot } from "./aiCreditsBridge-BuE92tKo.js";
|
|
9
|
-
import { n as useCreateWorkflow } from "./useWorkflows-
|
|
9
|
+
import { n as useCreateWorkflow } from "./useWorkflows-CXwXQg74.js";
|
|
10
10
|
import { r as useTr } from "./TranslationBridge-Da-TPgQm.js";
|
|
11
11
|
import { t as BILLING_PLANS_PATH } from "./quota-Cdt8yz7N.js";
|
|
12
|
-
import { c as CreateWorkflowRefusalDialog } from "./useWorkflowCodeExport-
|
|
12
|
+
import { c as CreateWorkflowRefusalDialog } from "./useWorkflowCodeExport-qGat2KNz.js";
|
|
13
13
|
import { s as useFluidGridsPermission, t as FLUIDGRIDS_PERMISSIONS } from "./constants-dcxg6zG6.js";
|
|
14
14
|
import { useCallback, useEffect, useMemo, useRef, useState } from "react";
|
|
15
15
|
import { useNavigate } from "react-router";
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
import { t as __exportAll } from "./rolldown-runtime-hDbaFkMy.js";
|
|
3
3
|
import { r as useTr } from "./TranslationBridge-Da-TPgQm.js";
|
|
4
4
|
import { n as useNavigationV2 } from "./useNavigationV2-C2WeqN7d.js";
|
|
5
|
-
import { n as useDataSinks, t as useDataSinkData } from "./useObservability-
|
|
5
|
+
import { n as useDataSinks, t as useDataSinkData } from "./useObservability-CBFLQBQO.js";
|
|
6
6
|
import { c as prettyJson, r as formatTimestamp, t as formatBytes } from "./utils-C0dtnN4R.js";
|
|
7
7
|
import { useEffect, useMemo, useState } from "react";
|
|
8
8
|
import { Icon } from "@iconify/react";
|
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
import { t as __exportAll } from "./rolldown-runtime-hDbaFkMy.js";
|
|
3
|
-
import { c as errorAdvice, d as NodeStatusBadge, i as useRunPending, l as needsReconnect, n as useDurableParityRunFields, o as ConfirmStopRunDialog, r as useRunMetadata, t as setRunVersioningOverride, u as ExecutionStatusBadge } from "./useDurableParity-
|
|
3
|
+
import { c as errorAdvice, d as NodeStatusBadge, i as useRunPending, l as needsReconnect, n as useDurableParityRunFields, o as ConfirmStopRunDialog, r as useRunMetadata, t as setRunVersioningOverride, u as ExecutionStatusBadge } from "./useDurableParity-fZcATZHI.js";
|
|
4
4
|
import { n as formatRunVersion, r as nodeDisplayTitle, t as buildNodeDisplayMap } from "./run-display-UjLAoYqQ.js";
|
|
5
5
|
import { r as useTr } from "./TranslationBridge-Da-TPgQm.js";
|
|
6
6
|
import { c as RunLogAppendedDocument, l as RunLogsDocument, s as isAgentNodeType } from "./agent-form-D0uLvzx4.js";
|
|
7
|
-
import {
|
|
8
|
-
import { i as useFgAskableSelection, r as
|
|
7
|
+
import { C as failureQuestions, D as describeRun, E as runStepQuestions, O as describeRunError, Sn as runSignalTargets, T as runQuestions, _n as canSignalRun, k as describeRunStep, nn as nodeStateDurationMs, rn as runDurationMs, tn as formatElapsedMs, w as isFailedStatus, yn as durableInterfaceOf } from "./FluidGridsProvider-Dxehlm-2.js";
|
|
8
|
+
import { i as useFgAskable, o as useFgAskableSelection, r as useFgAskAssistant } from "./askAboutBridge-ByYsQams.js";
|
|
9
9
|
import { n as useNavigationV2 } from "./useNavigationV2-C2WeqN7d.js";
|
|
10
10
|
import { t as TechnicalDetails } from "./TechnicalDetails-r5JXr1jZ.js";
|
|
11
|
-
import { _ as shortRunId, g as runChainLinks, h as parseMetadataDefinition, m as overrideRequestOf, n as useExecution, p as callbackTone, r as useExecutionActions, s as buildRetryTriggerInput, t as useAutoRefresh } from "./useExecutions-
|
|
11
|
+
import { _ as shortRunId, g as runChainLinks, h as parseMetadataDefinition, m as overrideRequestOf, n as useExecution, p as callbackTone, r as useExecutionActions, s as buildRetryTriggerInput, t as useAutoRefresh } from "./useExecutions-lRqeXDYS.js";
|
|
12
12
|
import { t as RunActionsMenu } from "./RunActionsMenu-BZY4NreS.js";
|
|
13
13
|
import { n as getFluidGridsClient, r as getFluidGridsClientSafe } from "./client-Ctl4jmY3.js";
|
|
14
14
|
import { o as throwIfResultError, t as describeOperationError } from "./errors-xPZ-IbQd.js";
|
|
@@ -22,16 +22,16 @@ import { a as encodedPayloadBytes, f as EffectBadge, h as useRunPolicyDecisions,
|
|
|
22
22
|
import { t as useWorkflowProposal } from "./useWorkflowProposal-B9vXLKef.js";
|
|
23
23
|
import { t as WorkflowProposalCard } from "./WorkflowProposalCard-SmRv_Egf.js";
|
|
24
24
|
import { t as AiCreditBalanceSlot } from "./aiCreditsBridge-BuE92tKo.js";
|
|
25
|
-
import { a as fetchRunFailureClusters, i as dismissRunFailureCluster, r as OPEN_STATUSES, t as BUCKET_LABELS } from "./FailureTriagePanel-
|
|
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-
|
|
27
|
-
import {
|
|
28
|
-
import { _ as agentTokenStreamsFor, g as agentLiveReplyState, h as useAgentTokenStream, i as canSaveRunAsTestCase, t as saveRunAsTestCase } from "./use-workflow-tests-
|
|
29
|
-
import { a as formatTokens, d as formatMicroUsd, o as modelLabel, r as aiCost } from "./ai-usage-
|
|
25
|
+
import { a as fetchRunFailureClusters, i as dismissRunFailureCluster, r as OPEN_STATUSES, t as BUCKET_LABELS } from "./FailureTriagePanel-CbDIdU8s.js";
|
|
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-DSDD_ha3.js";
|
|
27
|
+
import { L as AgentStepKind, VI as WorkflowQueryRejectCondition, Wd as ErrorType, sL as WorkflowUpdateWaitFor, xF as VersioningBehavior } from "./graphql-types-D82O-0XY.js";
|
|
28
|
+
import { _ as agentTokenStreamsFor, g as agentLiveReplyState, h as useAgentTokenStream, i as canSaveRunAsTestCase, t as saveRunAsTestCase } from "./use-workflow-tests-Lz8fPQZg.js";
|
|
29
|
+
import { a as formatTokens, d as formatMicroUsd, o as modelLabel, r as aiCost } from "./ai-usage-DVtvLZ2P.js";
|
|
30
30
|
import { _ as useWorkflowTestsEnabled, l as useDurableFunctionNodesEnabled, m as usePhaseCFlags, u as useDurableParityEnabled } from "./feature-flags-B_b8PJ6Z.js";
|
|
31
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";
|
|
32
32
|
import { a as fetchTaskQueueStats } from "./api-DKfMt0IX.js";
|
|
33
33
|
import { a as RUN_CONTROL_DIALOG_STYLE, c as parseJsonInput, i as NativeSelect, l as parseJsonObjectInput, n as JsonBlock, o as StatusPill, r as JsonField, s as newRunControlId, t as FieldError, u as useResource } from "./shared-C0LCTtyh.js";
|
|
34
|
-
import { v as useWorkflowVersions } from "./useWorkflows-
|
|
34
|
+
import { v as useWorkflowVersions } from "./useWorkflows-CXwXQg74.js";
|
|
35
35
|
import { useCallback, useEffect, useMemo, useRef, useState } from "react";
|
|
36
36
|
import { Link, useNavigate, useParams, useSearchParams } from "react-router";
|
|
37
37
|
import { Icon } from "@iconify/react";
|
|
@@ -1960,16 +1960,19 @@ function NodeTimeline({ nodeStates, nodeDisplay, loading, triggerNodeId, onRetry
|
|
|
1960
1960
|
const isWaitingSubworkflow = node.status === "WAITING_SUBWORKFLOW";
|
|
1961
1961
|
const hasChildRun = Boolean(node.childRunId);
|
|
1962
1962
|
const stepName = nodeDisplayTitle(nodeDisplay?.[node.nodeId], node.nodeId);
|
|
1963
|
-
const describeStep = () => askRun ?
|
|
1964
|
-
|
|
1965
|
-
|
|
1966
|
-
|
|
1967
|
-
|
|
1968
|
-
|
|
1969
|
-
|
|
1970
|
-
|
|
1971
|
-
|
|
1972
|
-
|
|
1963
|
+
const describeStep = () => askRun ? {
|
|
1964
|
+
...describeRunStep({
|
|
1965
|
+
run: askRun,
|
|
1966
|
+
stepId: node.nodeId,
|
|
1967
|
+
stepName,
|
|
1968
|
+
stepType: node.nodeType,
|
|
1969
|
+
stepVersion: node.nodeVersion,
|
|
1970
|
+
status: node.status,
|
|
1971
|
+
errorType: node.errorType,
|
|
1972
|
+
error: nodeError
|
|
1973
|
+
}),
|
|
1974
|
+
suggestions: isFailedStatus(node.status) || nodeError?.trim() ? failureQuestions(tr) : runStepQuestions(tr)
|
|
1975
|
+
} : null;
|
|
1973
1976
|
return /* @__PURE__ */ jsxs("div", {
|
|
1974
1977
|
className: "relative flex gap-4",
|
|
1975
1978
|
children: [/* @__PURE__ */ jsxs("div", {
|
|
@@ -3392,7 +3395,7 @@ function RunBudgetPanel({ budget }) {
|
|
|
3392
3395
|
*
|
|
3393
3396
|
* Renders nothing for a run that has not failed.
|
|
3394
3397
|
*/
|
|
3395
|
-
function RunAiAssistPanel({ runId, status, canPropose, canApply, onOpenWorkflow }) {
|
|
3398
|
+
function RunAiAssistPanel({ runId, status, canPropose, canApply, onOpenWorkflow, askAbout }) {
|
|
3396
3399
|
const tr = useTr();
|
|
3397
3400
|
const [explanation, setExplanation] = useState(null);
|
|
3398
3401
|
const [explaining, setExplaining] = useState(false);
|
|
@@ -3470,23 +3473,9 @@ function RunAiAssistPanel({ runId, status, canPropose, canApply, onOpenWorkflow
|
|
|
3470
3473
|
className: "mt-3 text-sm text-[var(--color-status-error-text)]",
|
|
3471
3474
|
children: explainError
|
|
3472
3475
|
}),
|
|
3473
|
-
explanation && /* @__PURE__ */
|
|
3474
|
-
|
|
3475
|
-
|
|
3476
|
-
children: [
|
|
3477
|
-
/* @__PURE__ */ jsx("p", {
|
|
3478
|
-
className: "text-sm text-text-primary",
|
|
3479
|
-
children: explanation.cause
|
|
3480
|
-
}),
|
|
3481
|
-
explanation.evidence.length > 0 && /* @__PURE__ */ jsx("pre", {
|
|
3482
|
-
className: "max-h-40 overflow-auto whitespace-pre-wrap rounded bg-surface p-2 text-xs text-text-secondary",
|
|
3483
|
-
children: explanation.evidence.join("\n")
|
|
3484
|
-
}),
|
|
3485
|
-
explanation.suggestions.length > 0 && /* @__PURE__ */ jsx("ul", {
|
|
3486
|
-
className: "list-disc space-y-0.5 pl-5 text-sm text-text-primary",
|
|
3487
|
-
children: explanation.suggestions.map((suggestion) => /* @__PURE__ */ jsx("li", { children: suggestion }, suggestion))
|
|
3488
|
-
})
|
|
3489
|
-
]
|
|
3476
|
+
explanation && /* @__PURE__ */ jsx(RunExplanationView, {
|
|
3477
|
+
explanation,
|
|
3478
|
+
askAbout
|
|
3490
3479
|
}),
|
|
3491
3480
|
proposal.error && /* @__PURE__ */ jsx("p", {
|
|
3492
3481
|
className: "mt-3 text-sm text-[var(--color-status-error-text)]",
|
|
@@ -3510,6 +3499,65 @@ function RunAiAssistPanel({ runId, status, canPropose, canApply, onOpenWorkflow
|
|
|
3510
3499
|
]
|
|
3511
3500
|
});
|
|
3512
3501
|
}
|
|
3502
|
+
/**
|
|
3503
|
+
* The diagnosis "Explain failure" returned, and (BOFF-13381) "Ask AI about
|
|
3504
|
+
* this" to follow it up in the assistant: the run's error picked, with the
|
|
3505
|
+
* diagnosis and its suggested fixes first in what the assistant is told, so it
|
|
3506
|
+
* starts from them rather than diagnosing again.
|
|
3507
|
+
*/
|
|
3508
|
+
function RunExplanationView({ explanation, askAbout }) {
|
|
3509
|
+
const tr = useTr();
|
|
3510
|
+
const askAssistant = useFgAskAssistant();
|
|
3511
|
+
const ref = useRef(null);
|
|
3512
|
+
const followUp = askAssistant && askAbout ? () => {
|
|
3513
|
+
const base = askAbout();
|
|
3514
|
+
askAssistant({
|
|
3515
|
+
...base,
|
|
3516
|
+
facts: [
|
|
3517
|
+
{
|
|
3518
|
+
label: "Diagnosis",
|
|
3519
|
+
value: explanation.cause
|
|
3520
|
+
},
|
|
3521
|
+
...explanation.suggestions.slice(0, 3).map((suggestion, index) => ({
|
|
3522
|
+
label: `Suggested fix ${index + 1}`,
|
|
3523
|
+
value: suggestion
|
|
3524
|
+
})),
|
|
3525
|
+
...base.facts ?? []
|
|
3526
|
+
]
|
|
3527
|
+
}, ref.current);
|
|
3528
|
+
} : null;
|
|
3529
|
+
return /* @__PURE__ */ jsxs("div", {
|
|
3530
|
+
ref,
|
|
3531
|
+
className: "mt-3 space-y-2",
|
|
3532
|
+
"data-testid": "run-ai-explanation",
|
|
3533
|
+
children: [
|
|
3534
|
+
/* @__PURE__ */ jsx("p", {
|
|
3535
|
+
className: "text-sm text-text-primary",
|
|
3536
|
+
children: explanation.cause
|
|
3537
|
+
}),
|
|
3538
|
+
explanation.evidence.length > 0 && /* @__PURE__ */ jsx("pre", {
|
|
3539
|
+
className: "max-h-40 overflow-auto whitespace-pre-wrap rounded bg-surface p-2 text-xs text-text-secondary",
|
|
3540
|
+
children: explanation.evidence.join("\n")
|
|
3541
|
+
}),
|
|
3542
|
+
explanation.suggestions.length > 0 && /* @__PURE__ */ jsx("ul", {
|
|
3543
|
+
className: "list-disc space-y-0.5 pl-5 text-sm text-text-primary",
|
|
3544
|
+
children: explanation.suggestions.map((suggestion) => /* @__PURE__ */ jsx("li", { children: suggestion }, suggestion))
|
|
3545
|
+
}),
|
|
3546
|
+
followUp && /* @__PURE__ */ jsxs(Button, {
|
|
3547
|
+
size: "sm",
|
|
3548
|
+
variant: "outline",
|
|
3549
|
+
onClick: followUp,
|
|
3550
|
+
"data-agent": "deny",
|
|
3551
|
+
"data-testid": "run-ai-explanation-ask",
|
|
3552
|
+
children: [/* @__PURE__ */ jsx(Icon, {
|
|
3553
|
+
icon: "lucide:sparkles",
|
|
3554
|
+
width: 14,
|
|
3555
|
+
className: "mr-1"
|
|
3556
|
+
}), tr("fluidgrids.ai.runAssist.askFollowUp", "Ask AI about this")]
|
|
3557
|
+
})
|
|
3558
|
+
]
|
|
3559
|
+
});
|
|
3560
|
+
}
|
|
3513
3561
|
|
|
3514
3562
|
// src/modules/executions/components/RunFailureClusterCard.tsx
|
|
3515
3563
|
/**
|
|
@@ -8354,6 +8402,17 @@ function ExecutionDetailPage() {
|
|
|
8354
8402
|
workflowName: execution.workflow?.name ?? null,
|
|
8355
8403
|
stoppedAt: stoppedAtNode ? nodeDisplayTitle(nodeDisplay[stoppedAtNode.nodeId], stoppedAtNode.nodeId) : null
|
|
8356
8404
|
};
|
|
8405
|
+
const askAboutRunError = () => ({
|
|
8406
|
+
...describeRunError(askRun),
|
|
8407
|
+
suggestions: failureQuestions(tr)
|
|
8408
|
+
});
|
|
8409
|
+
const askAboutRun = () => {
|
|
8410
|
+
const focus = describeRun(askRun);
|
|
8411
|
+
return {
|
|
8412
|
+
...focus,
|
|
8413
|
+
suggestions: focus.kind === "run error" ? failureQuestions(tr) : runQuestions(tr)
|
|
8414
|
+
};
|
|
8415
|
+
};
|
|
8357
8416
|
return /* @__PURE__ */ jsxs("div", {
|
|
8358
8417
|
className: "p-4 pb-24 sm:p-6 sm:pb-24 bg-surface-canvas min-h-screen",
|
|
8359
8418
|
children: [
|
|
@@ -8386,7 +8445,7 @@ function ExecutionDetailPage() {
|
|
|
8386
8445
|
className: "flex flex-col lg:flex-row lg:items-start lg:justify-between gap-4 mb-6",
|
|
8387
8446
|
children: [/* @__PURE__ */ jsxs("div", { children: [
|
|
8388
8447
|
/* @__PURE__ */ jsxs(AskableDiv, {
|
|
8389
|
-
describe:
|
|
8448
|
+
describe: askAboutRun,
|
|
8390
8449
|
"data-testid": "run-title-askable",
|
|
8391
8450
|
className: "flex items-center gap-3 mb-2",
|
|
8392
8451
|
...runSuggestAnchorProps(execution.id),
|
|
@@ -8711,7 +8770,7 @@ function ExecutionDetailPage() {
|
|
|
8711
8770
|
})]
|
|
8712
8771
|
}),
|
|
8713
8772
|
summary && /* @__PURE__ */ jsx(AskableDiv, {
|
|
8714
|
-
describe:
|
|
8773
|
+
describe: askAboutRun,
|
|
8715
8774
|
"data-testid": "run-summary-askable",
|
|
8716
8775
|
children: /* @__PURE__ */ jsx(RunSummaryCard, {
|
|
8717
8776
|
status: execution.status,
|
|
@@ -8800,11 +8859,11 @@ function ExecutionDetailPage() {
|
|
|
8800
8859
|
]
|
|
8801
8860
|
}),
|
|
8802
8861
|
v2 && execution.errorMessage && /* @__PURE__ */ jsx(AskableDiv, {
|
|
8803
|
-
describe:
|
|
8862
|
+
describe: askAboutRunError,
|
|
8804
8863
|
"data-testid": "run-error-banner",
|
|
8805
8864
|
className: "mb-6",
|
|
8806
8865
|
children: /* @__PURE__ */ jsx(TechnicalDetails, { children: /* @__PURE__ */ jsx(AskableSelectionDiv, {
|
|
8807
|
-
describe:
|
|
8866
|
+
describe: askAboutRunError,
|
|
8808
8867
|
children: /* @__PURE__ */ jsxs("p", {
|
|
8809
8868
|
className: "text-sm text-[var(--color-status-error-text)] break-words",
|
|
8810
8869
|
children: [
|
|
@@ -8817,7 +8876,7 @@ function ExecutionDetailPage() {
|
|
|
8817
8876
|
}) })
|
|
8818
8877
|
}),
|
|
8819
8878
|
!v2 && execution.errorMessage && /* @__PURE__ */ jsxs(AskableDiv, {
|
|
8820
|
-
describe:
|
|
8879
|
+
describe: askAboutRunError,
|
|
8821
8880
|
"data-testid": "run-error-banner",
|
|
8822
8881
|
className: "mb-6 p-4 bg-[var(--color-status-error-bg-subtle)] border border-[var(--color-status-error-border)] rounded-lg",
|
|
8823
8882
|
children: [/* @__PURE__ */ jsxs("div", {
|
|
@@ -8830,7 +8889,7 @@ function ExecutionDetailPage() {
|
|
|
8830
8889
|
children: [tr("fluidgrids.executions.executionDetail.errorLabel", "Error"), execution.errorType ? ` (${execution.errorType})` : ""]
|
|
8831
8890
|
})]
|
|
8832
8891
|
}), /* @__PURE__ */ jsx(AskableSelectionDiv, {
|
|
8833
|
-
describe:
|
|
8892
|
+
describe: askAboutRunError,
|
|
8834
8893
|
children: /* @__PURE__ */ jsx("p", {
|
|
8835
8894
|
className: "text-[var(--color-status-error-text)]",
|
|
8836
8895
|
children: execution.errorMessage
|
|
@@ -8851,6 +8910,7 @@ function ExecutionDetailPage() {
|
|
|
8851
8910
|
status: execution.status,
|
|
8852
8911
|
canPropose: canProposeFix,
|
|
8853
8912
|
canApply: canApplyFix,
|
|
8913
|
+
askAbout: askAboutRunError,
|
|
8854
8914
|
onOpenWorkflow: (workflowKey, version) => navigate(`../workflow/${encodeURIComponent(workflowKey)}/${encodeURIComponent(version)}`)
|
|
8855
8915
|
}),
|
|
8856
8916
|
/* @__PURE__ */ jsx(RunFailureClusterCard, {
|
|
@@ -1,30 +1,30 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
import { t as __exportAll } from "./rolldown-runtime-hDbaFkMy.js";
|
|
3
3
|
import { g as useExecutionsStore, h as DEFAULT_EXECUTIONS_FILTER } from "./config-X97zrIvn.js";
|
|
4
|
-
import { b as validateDateRange, c as EMPTY_SEARCH_FILTER, d as searchFilterConflicts, i as useExecutionStats, l as OPERATORS_BY_TYPE, o as useExecutionsWithStore, r as useExecutionActions, t as useAutoRefresh, u as buildSearchAttributeFilter } from "./useExecutions-
|
|
4
|
+
import { b as validateDateRange, c as EMPTY_SEARCH_FILTER, d as searchFilterConflicts, i as useExecutionStats, l as OPERATORS_BY_TYPE, o as useExecutionsWithStore, r as useExecutionActions, t as useAutoRefresh, u as buildSearchAttributeFilter } from "./useExecutions-lRqeXDYS.js";
|
|
5
5
|
import { m as usePhaseCFlags, u as useDurableParityEnabled } from "./feature-flags-B_b8PJ6Z.js";
|
|
6
6
|
import { r as useTr } from "./TranslationBridge-Da-TPgQm.js";
|
|
7
7
|
import { n as useFluidGridsPageControls } from "./pageControlsBridge-0pX9s-3k.js";
|
|
8
8
|
import { t as executionsControls } from "./pageControlSpecs-DZJ9K37m.js";
|
|
9
9
|
import { t as TagFilterSelect } from "./TagFilterSelect-CAShgvbS.js";
|
|
10
10
|
import { n as useNavigationV2 } from "./useNavigationV2-C2WeqN7d.js";
|
|
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-
|
|
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-fZcATZHI.js";
|
|
12
12
|
import { t as Disclosure } from "./Disclosure-CsxDspR7.js";
|
|
13
13
|
import { n as formatRunVersion } from "./run-display-UjLAoYqQ.js";
|
|
14
14
|
import { r as runSuggestAnchorProps } from "./entities-I_0kio3q.js";
|
|
15
|
-
import {
|
|
15
|
+
import { rn as runDurationMs, tn as formatElapsedMs } from "./FluidGridsProvider-Dxehlm-2.js";
|
|
16
16
|
import { r as useRunHumanRequests } from "./useHumanRequests-DwG2tQ3f.js";
|
|
17
|
-
import { n as runListLinkKey, t as runListFilterFromSearch } from "./run-list-links-
|
|
17
|
+
import { n as runListLinkKey, t as runListFilterFromSearch } from "./run-list-links-CPJimzkr.js";
|
|
18
18
|
import { t as TechnicalDetails } from "./TechnicalDetails-r5JXr1jZ.js";
|
|
19
19
|
import { t as RunActionsMenu } from "./RunActionsMenu-BZY4NreS.js";
|
|
20
|
-
import { h as useWorkflowDefinitions } from "./useWorkflows-
|
|
20
|
+
import { h as useWorkflowDefinitions } from "./useWorkflows-CXwXQg74.js";
|
|
21
21
|
import { t as FluidGridsDocsLink } from "./FluidGridsDocsLink-JxkBpOeb.js";
|
|
22
22
|
import { s as useFluidGridsPermission, t as FLUIDGRIDS_PERMISSIONS } from "./constants-dcxg6zG6.js";
|
|
23
23
|
import { C as jsonArg, F as startBatchOperation, I as startBatchTerminate, P as startBatchExport, m as fetchBatchOperations, n as cancelBatchOperation, p as fetchBatchOperation, x as fetchSearchAttributes } from "./api-CEnNq15C.js";
|
|
24
24
|
import { a as RUN_CONTROL_DIALOG_STYLE, c as parseJsonInput, i as NativeSelect, o as StatusPill, r as JsonField, t as FieldError, u as useResource } from "./shared-C0LCTtyh.js";
|
|
25
25
|
import { t as describeOperationError } from "./errors-xPZ-IbQd.js";
|
|
26
26
|
import { n as getFluidGridsClient } from "./client-Ctl4jmY3.js";
|
|
27
|
-
import {
|
|
27
|
+
import { HI as WorkflowResetType, SI as WorkflowBatchOperationType } from "./graphql-types-D82O-0XY.js";
|
|
28
28
|
import { Fragment, useCallback, useEffect, useMemo, useRef, useState } from "react";
|
|
29
29
|
import { useNavigate, useSearchParams } from "react-router";
|
|
30
30
|
import { Icon } from "@iconify/react";
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
import { r as useTr } from "./TranslationBridge-Da-TPgQm.js";
|
|
3
3
|
import { n as getFluidGridsClient } from "./client-Ctl4jmY3.js";
|
|
4
4
|
import { o as throwIfResultError } from "./errors-xPZ-IbQd.js";
|
|
5
|
-
import {
|
|
5
|
+
import { mO as RunFailureClusterStatus } from "./graphql-types-D82O-0XY.js";
|
|
6
6
|
import { useCallback, useEffect, useState } from "react";
|
|
7
7
|
import { Icon } from "@iconify/react";
|
|
8
8
|
import { jsx, jsxs } from "react/jsx-runtime";
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
import { a as resetFluidGridsClient, n as getFluidGridsClient, o as setFluidGridsClient, r as getFluidGridsClientSafe, s as waitForFluidGridsClient, t as createFluidGridsClient } from "./client-Ctl4jmY3.js";
|
|
3
3
|
import { a as setGlobalStoreClient, i as resetGlobalStoreClient, n as getGlobalStoreClient, t as createGlobalStoreClient } from "./global-client-DP_Wxe5t.js";
|
|
4
|
-
import { A as useFlowStore, C as outputHandlesSpacerHeight, D as NodeCardBody, E as NodeCard, M as isNodeTrigger, O as NodeCardHeader, S as nodeAdaptersOf, T as resolveOutputHandles, _ as InputHandles, b as hasNodeManifest, g as LogicNodeCard, i as WAIT_FOR_SIGNAL_NODE_TYPE, k as nodeAccent, l as interfaceFields, m as readSignalName, n as synchronizeOperationUpdate, p as readCodeWorkflowState, r as CODE_WORKFLOW_NODE_TYPE, t as resolveOperationName, u as interfaceHandlers, v as OutputHandles, w as resolveInputHandles, y as alignPlainOutputEdges } from "./node-operation-selection-
|
|
4
|
+
import { A as useFlowStore, C as outputHandlesSpacerHeight, D as NodeCardBody, E as NodeCard, M as isNodeTrigger, O as NodeCardHeader, S as nodeAdaptersOf, T as resolveOutputHandles, _ as InputHandles, b as hasNodeManifest, g as LogicNodeCard, i as WAIT_FOR_SIGNAL_NODE_TYPE, k as nodeAccent, l as interfaceFields, m as readSignalName, n as synchronizeOperationUpdate, p as readCodeWorkflowState, r as CODE_WORKFLOW_NODE_TYPE, t as resolveOperationName, u as interfaceHandlers, v as OutputHandles, w as resolveInputHandles, y as alignPlainOutputEdges } from "./node-operation-selection-bFx9s45-.js";
|
|
5
5
|
import { n as useBuilderReadOnly } from "./read-only-context-Dt9N9SIG.js";
|
|
6
6
|
import { a as resolveStickyColor, i as partitionStickyNotes, l as STICKY_NOTE_TYPE, n as STICKY_COLORS, o as stickySurfaceStyle, t as DEFAULT_STICKY_COLOR } from "./sticky-notes-23j-wL6Q.js";
|
|
7
7
|
import { n as FluidGridsTranslationProvider, r as useTr, t as ENGLISH_FALLBACK_TRANSLATOR } from "./TranslationBridge-Da-TPgQm.js";
|
|
@@ -13,7 +13,7 @@ import { a as emitOperationErrorEvent, i as emitFluidGridsEvent, o as emitRunCom
|
|
|
13
13
|
import { i as emitRunStarted, n as emitRunFailed, r as emitRunLimitHit, s as emitWorkflowCreated } from "./fluidgridsEvents-Dm5CaHtr.js";
|
|
14
14
|
import { a as collectExtensions, n as QUOTA_EXHAUSTED_CODE, o as errorCodesOf, r as RUNS_QUOTA_NAME, s as findQuotaRefusal } from "./quota-Cdt8yz7N.js";
|
|
15
15
|
import { c as setFluidGridsConfig, l as validateTrustedOrigin, o as resetFluidGridsConfig, r as getFluidGridsConfig, s as resetFluidGridsExecutionState } from "./config-X97zrIvn.js";
|
|
16
|
-
import {
|
|
16
|
+
import { a as useFgAskableAction } from "./askAboutBridge-ByYsQams.js";
|
|
17
17
|
import { i as readableNodeType } from "./run-display-UjLAoYqQ.js";
|
|
18
18
|
import { t as provideNodeRegistryRefresh } from "./node-registry-refresh-s3okf83X.js";
|
|
19
19
|
import { createContext, memo, useCallback, useContext, useEffect, useMemo, useRef, useState, useSyncExternalStore } from "react";
|
|
@@ -3117,6 +3117,24 @@ const EventRegistrationsDocument = {
|
|
|
3117
3117
|
},
|
|
3118
3118
|
"arguments": [],
|
|
3119
3119
|
"directives": []
|
|
3120
|
+
},
|
|
3121
|
+
{
|
|
3122
|
+
"kind": "Field",
|
|
3123
|
+
"name": {
|
|
3124
|
+
"kind": "Name",
|
|
3125
|
+
"value": "totalTriggers"
|
|
3126
|
+
},
|
|
3127
|
+
"arguments": [],
|
|
3128
|
+
"directives": []
|
|
3129
|
+
},
|
|
3130
|
+
{
|
|
3131
|
+
"kind": "Field",
|
|
3132
|
+
"name": {
|
|
3133
|
+
"kind": "Name",
|
|
3134
|
+
"value": "lastTriggeredAt"
|
|
3135
|
+
},
|
|
3136
|
+
"arguments": [],
|
|
3137
|
+
"directives": []
|
|
3120
3138
|
}
|
|
3121
3139
|
]
|
|
3122
3140
|
}
|
|
@@ -7264,23 +7282,23 @@ function missingRequiredParameters(params, state, boundFields = /* @__PURE__ */
|
|
|
7264
7282
|
}
|
|
7265
7283
|
return missing;
|
|
7266
7284
|
}
|
|
7267
|
-
function asRecord$
|
|
7285
|
+
function asRecord$2(value) {
|
|
7268
7286
|
return typeof value === "object" && value !== null && !Array.isArray(value) ? value : void 0;
|
|
7269
7287
|
}
|
|
7270
7288
|
/** The node's fixed values: `data.args.state`, else an empty object. */
|
|
7271
7289
|
function nodeStateOf(node) {
|
|
7272
|
-
return asRecord$
|
|
7290
|
+
return asRecord$2(asRecord$2(asRecord$2(node.data)?.args)?.state) ?? {};
|
|
7273
7291
|
}
|
|
7274
7292
|
/** Whether the node is disabled (it is skipped at run time, so nothing is required). */
|
|
7275
7293
|
function isDisabledNode(node) {
|
|
7276
|
-
return asRecord$
|
|
7294
|
+
return asRecord$2(node.data)?.disabled === true;
|
|
7277
7295
|
}
|
|
7278
7296
|
/** Parameters some incoming edge of the node maps a value into. */
|
|
7279
7297
|
function boundFieldsOf(nodeId, edges) {
|
|
7280
7298
|
const bound = /* @__PURE__ */ new Set();
|
|
7281
7299
|
for (const edge of edges) {
|
|
7282
7300
|
if (edge.target !== nodeId) continue;
|
|
7283
|
-
const definition = asRecord$
|
|
7301
|
+
const definition = asRecord$2(edge.mapping?.definition) ?? asRecord$2(asRecord$2(asRecord$2(edge.data)?.mapping)?.definition);
|
|
7284
7302
|
for (const field of Object.keys(definition ?? {})) bound.add(field);
|
|
7285
7303
|
}
|
|
7286
7304
|
return bound;
|
|
@@ -8221,6 +8239,35 @@ function useWebhookRegistration(workflowKey, triggerNodeId, enabled = true) {
|
|
|
8221
8239
|
};
|
|
8222
8240
|
}
|
|
8223
8241
|
|
|
8242
|
+
// src/builder/components/ndv/manual-push-setup.ts
|
|
8243
|
+
function asRecord$1(value) {
|
|
8244
|
+
return typeof value === "object" && value !== null && !Array.isArray(value) ? value : null;
|
|
8245
|
+
}
|
|
8246
|
+
function httpsUrl(value) {
|
|
8247
|
+
if (typeof value !== "string" || !value.trim()) return null;
|
|
8248
|
+
try {
|
|
8249
|
+
const url = new URL(value.trim());
|
|
8250
|
+
return url.protocol === "https:" ? url.toString() : null;
|
|
8251
|
+
} catch {
|
|
8252
|
+
return null;
|
|
8253
|
+
}
|
|
8254
|
+
}
|
|
8255
|
+
const HEADER_NAME = /^[!#$%&'*+.^_`|~0-9A-Za-z-]{1,64}$/;
|
|
8256
|
+
/** The manual setup of the selected trigger operation, or null when it is not a manual push trigger. */
|
|
8257
|
+
function readManualPushSetup(operation) {
|
|
8258
|
+
const op = asRecord$1(operation);
|
|
8259
|
+
if (!op || op.role !== "trigger") return null;
|
|
8260
|
+
if (typeof op.pushSetup !== "string" || op.pushSetup.trim().toLowerCase() !== "manual") return null;
|
|
8261
|
+
const setup = asRecord$1(op.manualSetup) ?? {};
|
|
8262
|
+
const instructions = typeof setup.instructions === "string" && setup.instructions.trim() ? setup.instructions.trim() : null;
|
|
8263
|
+
const header = typeof setup.secretHeader === "string" ? setup.secretHeader.trim() : "";
|
|
8264
|
+
return {
|
|
8265
|
+
instructions,
|
|
8266
|
+
docsUrl: httpsUrl(setup.docsUrl),
|
|
8267
|
+
secretHeader: HEADER_NAME.test(header) ? header : null
|
|
8268
|
+
};
|
|
8269
|
+
}
|
|
8270
|
+
|
|
8224
8271
|
// src/builder/components/ndv/node-option-values.ts
|
|
8225
8272
|
function isRecord$2(value) {
|
|
8226
8273
|
return typeof value === "object" && value !== null && !Array.isArray(value);
|
|
@@ -8788,7 +8835,8 @@ function useNodeConfig(target, options) {
|
|
|
8788
8835
|
const params = useMemo(() => paramsFromOperation(currentOp), [currentOp]);
|
|
8789
8836
|
const isWebhookTrigger = useMemo(() => !!asRecord(currentOp?.output_fields)?.webhookUrl, [currentOp]);
|
|
8790
8837
|
const isFormTrigger = useMemo(() => !!asRecord(currentOp?.output_fields)?.formUrl, [currentOp]);
|
|
8791
|
-
const
|
|
8838
|
+
const manualPushSetup = useMemo(() => readManualPushSetup(currentOp), [currentOp]);
|
|
8839
|
+
const { registration: webhookRegistration, webhookUrl, formUrl, error: triggerUrlError, loading: webhookUrlLoading, refetch: refetchWebhookRegistration } = useWebhookRegistration(workflowKey || void 0, node?.id, (isWebhookTrigger || isFormTrigger || !!manualPushSetup) && (options?.webhookEnabled ?? true));
|
|
8792
8840
|
const pickerFields = useMemo(() => flattenFields(inputFields), [inputFields]);
|
|
8793
8841
|
const mapping = currentEdge?.mapping?.definition ?? {};
|
|
8794
8842
|
const argsState = useMemo(() => {
|
|
@@ -9012,6 +9060,9 @@ function useNodeConfig(target, options) {
|
|
|
9012
9060
|
isWebhookWait,
|
|
9013
9061
|
webhookUrl,
|
|
9014
9062
|
webhookUrlLoading,
|
|
9063
|
+
manualPushSetup,
|
|
9064
|
+
webhookRegistration,
|
|
9065
|
+
refetchWebhookRegistration,
|
|
9015
9066
|
modeByField,
|
|
9016
9067
|
dragField,
|
|
9017
9068
|
setDragField,
|
|
@@ -9593,6 +9644,52 @@ function describeRun(run) {
|
|
|
9593
9644
|
};
|
|
9594
9645
|
}
|
|
9595
9646
|
|
|
9647
|
+
// src/askAbout/askQuestions.ts
|
|
9648
|
+
/**
|
|
9649
|
+
* ★ BOFF-13381: the questions offered under the chip when a person picks
|
|
9650
|
+
* something to ask the assistant about. They start a question in the person's
|
|
9651
|
+
* own words: choosing one only fills the message box. A few, short, and about
|
|
9652
|
+
* what the thing is showing (a failed step is asked why it failed).
|
|
9653
|
+
*/
|
|
9654
|
+
/** A step on the canvas: what it does, why it is not ready, why it failed. */
|
|
9655
|
+
function canvasStepQuestions(tr, step) {
|
|
9656
|
+
const failed = step.runStatus === "error" || Boolean(step.latestFailedRun?.errorMessage?.trim());
|
|
9657
|
+
const notReady = (step.missingSettings?.length ?? 0) > 0 || step.missingConnection === true;
|
|
9658
|
+
return [
|
|
9659
|
+
...failed ? [tr("fluidgrids.askAbout.questions.stepFailed", "Why did this step fail?")] : [],
|
|
9660
|
+
...notReady ? [tr("fluidgrids.askAbout.questions.stepNotReady", "What is this step still missing?")] : [],
|
|
9661
|
+
tr("fluidgrids.askAbout.questions.stepWhat", "What does this step do?"),
|
|
9662
|
+
tr("fluidgrids.askAbout.questions.stepImprove", "How can I make this step better?")
|
|
9663
|
+
].slice(0, 3);
|
|
9664
|
+
}
|
|
9665
|
+
/** A run's error, or a step of a run that failed: why, and how to fix it. */
|
|
9666
|
+
function failureQuestions(tr) {
|
|
9667
|
+
return [
|
|
9668
|
+
tr("fluidgrids.askAbout.questions.whyFailed", "Why did this fail?"),
|
|
9669
|
+
tr("fluidgrids.askAbout.questions.howFix", "How do I fix this?"),
|
|
9670
|
+
tr("fluidgrids.askAbout.questions.preventAgain", "How do I stop this from happening again?")
|
|
9671
|
+
];
|
|
9672
|
+
}
|
|
9673
|
+
/** A step of a run that did not fail. */
|
|
9674
|
+
function runStepQuestions(tr) {
|
|
9675
|
+
return [tr("fluidgrids.askAbout.questions.runStepWhat", "What did this step do in this run?"), tr("fluidgrids.askAbout.questions.runStepOutput", "What did this step pass on to the next one?")];
|
|
9676
|
+
}
|
|
9677
|
+
/** A whole run that did not fail. */
|
|
9678
|
+
function runQuestions(tr) {
|
|
9679
|
+
return [tr("fluidgrids.askAbout.questions.runWhat", "What happened in this run?"), tr("fluidgrids.askAbout.questions.runFaster", "How can I make this workflow faster?")];
|
|
9680
|
+
}
|
|
9681
|
+
/** The status words a run or run step fails with. */
|
|
9682
|
+
function isFailedStatus(status) {
|
|
9683
|
+
return /^(FAILED|ERROR|TIMED_OUT|TERMINATED)$/i.test(status?.trim() ?? "");
|
|
9684
|
+
}
|
|
9685
|
+
/** A canvas step as the assistant is told about it, with its questions. */
|
|
9686
|
+
function askAboutCanvasStep(tr, step) {
|
|
9687
|
+
return {
|
|
9688
|
+
...describeCanvasStep(step),
|
|
9689
|
+
suggestions: canvasStepQuestions(tr, step)
|
|
9690
|
+
};
|
|
9691
|
+
}
|
|
9692
|
+
|
|
9596
9693
|
// src/askAbout/latestFailedRun.ts
|
|
9597
9694
|
/**
|
|
9598
9695
|
* ★ BOFF-13267: the saved workflow's latest failed run, for "Ask AI about this"
|
|
@@ -10127,7 +10224,7 @@ const getNodeMetadata = (value) => {
|
|
|
10127
10224
|
]);
|
|
10128
10225
|
const describeStep = useCallback(() => {
|
|
10129
10226
|
const { execution, workflow } = useFlowStore.getState();
|
|
10130
|
-
return
|
|
10227
|
+
return askAboutCanvasStep(tr, canvasStepFactsOf({
|
|
10131
10228
|
id,
|
|
10132
10229
|
type: value?.type,
|
|
10133
10230
|
data,
|
|
@@ -10155,10 +10252,11 @@ const getNodeMetadata = (value) => {
|
|
|
10155
10252
|
id,
|
|
10156
10253
|
missingCredentials,
|
|
10157
10254
|
missingParameters,
|
|
10255
|
+
tr,
|
|
10158
10256
|
value?.type
|
|
10159
10257
|
]);
|
|
10160
|
-
const askable =
|
|
10161
|
-
const askableRef = useCallback((element) => askable(element?.closest(".react-flow__node") ?? element), [askable]);
|
|
10258
|
+
const askable = useFgAskableAction(describeStep);
|
|
10259
|
+
const askableRef = useCallback((element) => askable.ref(element?.closest(".react-flow__node") ?? element), [askable.ref]);
|
|
10162
10260
|
if (isAdapterSubNode) return /* @__PURE__ */ jsx(SubNodeComponent, {
|
|
10163
10261
|
...props,
|
|
10164
10262
|
nodeType: value?.type
|
|
@@ -10229,6 +10327,7 @@ const getNodeMetadata = (value) => {
|
|
|
10229
10327
|
infoButton: /* @__PURE__ */ jsx(NodeInfoButtonWithModal, { metadata: nodeInfoMetadata }),
|
|
10230
10328
|
disabled: isDisabled,
|
|
10231
10329
|
onToggleDisabled: readOnly ? void 0 : handleToggleDisabled,
|
|
10330
|
+
onAskAi: askable.ask,
|
|
10232
10331
|
isRenaming: isRenamingThisNode && !readOnly,
|
|
10233
10332
|
onStartRename: readOnly ? void 0 : handleStartRename,
|
|
10234
10333
|
onCommitRename: handleCommitRename,
|
|
@@ -10261,6 +10360,7 @@ const getNodeMetadata = (value) => {
|
|
|
10261
10360
|
infoButton: /* @__PURE__ */ jsx(NodeInfoButtonWithModal, { metadata: nodeInfoMetadata }),
|
|
10262
10361
|
disabled: isDisabled,
|
|
10263
10362
|
onToggleDisabled: readOnly ? void 0 : handleToggleDisabled,
|
|
10363
|
+
onAskAi: askable.ask,
|
|
10264
10364
|
children: [
|
|
10265
10365
|
/* @__PURE__ */ jsx(NodeCardHeader, {
|
|
10266
10366
|
icon: cardIcon,
|
|
@@ -11381,4 +11481,4 @@ function useFluidGridsContext() {
|
|
|
11381
11481
|
return context;
|
|
11382
11482
|
}
|
|
11383
11483
|
|
|
11384
|
-
export {
|
|
11484
|
+
export { SwitchRulesEditor as $, workflowFingerprint as $t, SENSITIVE_PARAM as A, TriggerWorkflowDocument as An, isLocked as At, nodeSubtitle as B, matchesAdapterProvider as Bn, rememberSessionForReload as Bt, failureQuestions as C, signalPayloadCard as Cn, refusalOfQuota as Ct, describeRun as D, EventRegistrationsDocument as Dn, useEditLeaseLocked as Dt, runStepQuestions as E, NodeEndpointConfigsDocument as En, workflowSaveQueue as Et, useRunGuard as F, ExecutionDetailDocument as Fn, releasesOnClose as Ft, useNodeConfig as G, loadMarkdown as Gn, AUTOSAVE_DEBOUNCE_MS as Gt, optionText as H, replaceAdapterConnections as Hn, rememberOwnStatusChange as Ht, workflowParameterIssues as I, RunFromNodeDocument as In, shouldReleaseForIdle as It, isStringOptionList as J, codeBuildIdOf as Jt, resolveUiSpec as K, useMarkdownRenderer as Kn, AUTOSAVE_RETRY_DELAYS_MS as Kt, asRecord as L, ExecuteStepDocument as Ln, tickAction as Lt, createConfiguredNode as M, CreateWorkflowVersionDocument as Mn, leaseCallSequence as Mt, useInsertNode as N, CreateWorkflowDefinitionDocument as Nn, phaseAfterAcquire as Nt, describeRunError as O, BuilderRunStatusDocument as On, useEditLeaseStore as Ot, MissingParametersDialog as P, ExecutionsListDocument as Pn, phaseAfterTakeOver as Pt, ConditionTreeBuilder as Q, saveFailureActionOf as Qt, coerceNumber as R, connectionsForAdapter as Rn, EDIT_SESSION_ID as Rt, useLatestFailedRun as S, runSignalTargets as Sn, createThenOpen as St, runQuestions as T, NodeManifestsDocument as Tn, useSaveStatusStore as Tt, paramsFromOperation as U, getNodeDetail as Un, rememberRevision as Ut, nodeTitle as V, newConnectionProviderKey as Vn, sessionBeforeReload as Vt, selectedOperationOf as W, buildStickyNode as Wn, revisionOf as Wt, optionListValues as X, inAppLeaveTarget as Xt, optionListText as Y, findSaveConflict as Yt, resolveLoadOptionsSpec as Z, resettledBaseline as Zt, registryNodeData as _, canSignalRun as _n, useFlowValidator as _t, NODES_METADATA as a, parseParameterValue as an, missingRequiredParameters as at, fetchAllNodeEndpointConfigs as b, parseRawSignalPayload as bn, builderPathOf as bt, ensureInstalledNodeTypesLoaded as c, resolveNodeOperation as cn, autosaveAllowedFor as ct, ensureRegistryNodeTypesLoaded as d, openRunQuotaUpgradePrompt as dn, editingLeaseLocked as dt, useNodeExecution as en, casesFromRules as et, isNodeConfigsInitialized as f, useCanvasEdges as fn, leavingLosesChanges as ft, registerWorkflowNodeTypes as g, useCodeWorkflowInterface as gn, isFlowComplete as gt, registerNodeManifests as h, loadDefinitionJson as hn, watchLeavingLosesChanges as ht, AVAILABLE_NODES as i, formatParameterValue as in, boundFieldsOf as it, buildOperationSeed as j, SaveWorkflowDraftDocument as jn, leaseCallQueue as jt, describeRunStep as k, BuilderRunNodeDetailsDocument as kn, bannerOf as kt, ensureNodeConfigsLoaded as l, isParamVisible as ln, departingSave as lt, refetchStoreNodes as m, clearCodeWorkflowDefinitionCache as mn, touchesSavedFields as mt, FluidGridsProvider as n, nodeStateDurationMs as nn, parseMappingValue as nt, NODE_CONFIGS as o, structuredParameterType as on, useGuardedNavigate as ot, onNodeTypesUpdate as p, useNodeRegistryRevision as pn, savedEverythingBeforeLeaving as pt, stripSubmitActions as q, canAutosave as qt, useFluidGridsContext as r, runDurationMs as rn, latestNodeLog as rt, NODE_TYPES as s, fieldsFromValue as sn, useManualSave as st, FluidGridsContext as t, formatElapsedMs as tn, FieldTree as tt, ensureNodeTypesLoaded as u, useFluidGridsAnalytics as un, editStateFor as ut, scheduleNodePaletteLoad as v, declaredSignals as vn, useSaveWorkflow as vt, isFailedStatus as w, NodePaletteEntriesDocument as wn, saveIndicatorOf as wt, getNodeMetadata as x, payloadFromCardValues as xn, classifyCreateRefusal as xt, GetMyNodeInstallationsDocument as y, durableInterfaceOf as yn, blankWorkflowCreateInput as yt, fixedParameterState as z, isOptionalAdapter as zn, forgetSessionForReload as zt };
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
import { t as __exportAll } from "./rolldown-runtime-hDbaFkMy.js";
|
|
3
|
-
import { d as useRestoreWorkflowVersion, h as useWorkflowDefinitions } from "./useWorkflows-
|
|
3
|
+
import { d as useRestoreWorkflowVersion, h as useWorkflowDefinitions } from "./useWorkflows-CXwXQg74.js";
|
|
4
4
|
import { t as VersionDiffDialog } from "./VersionDiffDialog-D9W5Fm56.js";
|
|
5
5
|
import { c as versionsOfWorkflow } from "./VersionLifecycleBar-DuphLOT0.js";
|
|
6
6
|
import { r as useTr } from "./TranslationBridge-Da-TPgQm.js";
|
|
@@ -3,17 +3,17 @@ import { t as __exportAll } from "./rolldown-runtime-hDbaFkMy.js";
|
|
|
3
3
|
import { r as useTr } from "./TranslationBridge-Da-TPgQm.js";
|
|
4
4
|
import { n as useNavigationV2 } from "./useNavigationV2-C2WeqN7d.js";
|
|
5
5
|
import { t as TechnicalDetails } from "./TechnicalDetails-r5JXr1jZ.js";
|
|
6
|
-
import { o as useRunReplayActions, r as useInsightsData } from "./useObservability-
|
|
6
|
+
import { o as useRunReplayActions, r as useInsightsData } from "./useObservability-CBFLQBQO.js";
|
|
7
7
|
import { a as getTopFailingNodes, i as getFailureBreakdown, l as rankedFailingWorkflows, n as formatDuration, o as getTopFailingWorkflows, s as percentage, u as summarySuccessRate } from "./utils-C0dtnN4R.js";
|
|
8
|
-
import { n as FailureTriagePanel } from "./FailureTriagePanel-
|
|
8
|
+
import { n as FailureTriagePanel } from "./FailureTriagePanel-CbDIdU8s.js";
|
|
9
9
|
import { c as useContinuousOptimisationEnabled } from "./feature-flags-B_b8PJ6Z.js";
|
|
10
10
|
import { i as SdkPermissionButton, s as useFluidGridsPermission, t as FLUIDGRIDS_PERMISSIONS } from "./constants-dcxg6zG6.js";
|
|
11
|
-
import {
|
|
11
|
+
import { Bw as OptimisationDismissReason, Hw as OptimisationSuggestionStatus, Vw as OptimisationKind } from "./graphql-types-D82O-0XY.js";
|
|
12
12
|
import { n as getFluidGridsClient } from "./client-Ctl4jmY3.js";
|
|
13
13
|
import { o as throwIfResultError } from "./errors-xPZ-IbQd.js";
|
|
14
14
|
import { t as WorkflowProposalDocument } from "./WorkflowProposalDocument-BdUbsrd0.js";
|
|
15
|
-
import { a as formatTokens, c as DISMISS_REASONS, f as monthlySavingLabel, i as aiSpendPeriod, l as evidenceFacts, p as shortRunId, r as aiCost, s as runsOfWorkflowPath, t as AI_SPEND_RANGE_DAYS, u as evidenceWindowDays } from "./ai-usage-
|
|
16
|
-
import { i as utcDay, r as runListPath } from "./run-list-links-
|
|
15
|
+
import { a as formatTokens, c as DISMISS_REASONS, f as monthlySavingLabel, i as aiSpendPeriod, l as evidenceFacts, p as shortRunId, r as aiCost, s as runsOfWorkflowPath, t as AI_SPEND_RANGE_DAYS, u as evidenceWindowDays } from "./ai-usage-DVtvLZ2P.js";
|
|
16
|
+
import { i as utcDay, r as runListPath } from "./run-list-links-CPJimzkr.js";
|
|
17
17
|
import { t as proposalCanvasPath } from "./useRequestedProposal-B7uPXfZB.js";
|
|
18
18
|
import { useCallback, useEffect, useMemo, useRef, useState } from "react";
|
|
19
19
|
import { Link, useNavigate } from "react-router";
|
|
@@ -3,7 +3,7 @@ import { h as usePhaseDFlags } from "./feature-flags-B_b8PJ6Z.js";
|
|
|
3
3
|
import { r as useTr } from "./TranslationBridge-Da-TPgQm.js";
|
|
4
4
|
import { t as describeOperationError } from "./errors-xPZ-IbQd.js";
|
|
5
5
|
import { t as downloadBlob } from "./workflow-transfer-CQnQC-ke.js";
|
|
6
|
-
import { n as readTemplateCode, t as buildTemplateCodeDownload } from "./template-code-
|
|
6
|
+
import { n as readTemplateCode, t as buildTemplateCodeDownload } from "./template-code-CEjudJEY.js";
|
|
7
7
|
import { useState } from "react";
|
|
8
8
|
import { Icon } from "@iconify/react";
|
|
9
9
|
import { cn } from "@burdenoff/fe-libs/utils";
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
import { r as useTr } from "./TranslationBridge-Da-TPgQm.js";
|
|
3
|
-
import { n as formatTemplatePrice } from "./TemplateCard-
|
|
3
|
+
import { n as formatTemplatePrice } from "./TemplateCard-DD3vJ3a5.js";
|
|
4
4
|
import { t as ConfirmActionDialog } from "./ConfirmActionDialog-D9Pir3bc.js";
|
|
5
5
|
import { jsx } from "react/jsx-runtime";
|
|
6
6
|
|