@burdenoff/fluidgrids-fe-sdk 2026.1111.19 → 2026.1111.21
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-htYcXz43.js → AiStudioPage-CJdzRL26.js} +4 -4
- package/dist/ConnectionFormDialog-Bg9_OdHX.js +119 -0
- package/dist/{DataSinkDashboardPage-1h2QsMzH.js → DataSinkDashboardPage-hrwQSvks.js} +1 -1
- package/dist/{ExecutionDetailPage-BdcZmLT4.js → ExecutionDetailPage-DKp421Fj.js} +61 -14
- package/dist/{ExecutionsListPage-BCUJoAIE.js → ExecutionsListPage-DwJQfDPt.js} +4 -4
- package/dist/{FluidGridsProvider-dvZSNtSW.js → FluidGridsProvider-CbY91ZQq.js} +416 -99
- package/dist/{HistoryPage-U0tqupBN.js → HistoryPage-BLXZJDoJ.js} +1 -1
- package/dist/{InsightsPage-CALo16eB.js → InsightsPage-ChnoW5U4.js} +1 -1
- package/dist/{MissingNodesInstallModal-Dly7T2_7.js → MissingNodesInstallModal-mYFfy9Gg.js} +1 -1
- package/dist/{QuotaExhaustedDialog-7IFSaLyi.js → QuotaExhaustedDialog-DWm_YWL7.js} +1 -1
- package/dist/{SettingsPage-CJLZvv4J.js → SettingsPage-CXoKX0px.js} +2 -2
- package/dist/{TemplateCard-BdB087SP.js → TemplateCard-HIMsb47R.js} +2 -2
- package/dist/{TemplateConfigurationModal-CPVcTDSi.js → TemplateConfigurationModal-BNtbJ2fv.js} +1 -1
- package/dist/{TemplateDetailPanel-DruadMkg.js → TemplateDetailPanel-C6Zh2WRF.js} +1 -1
- package/dist/{TemplatePreview-CNrYJXw2.js → TemplatePreview-_wUMSwh_.js} +3 -3
- package/dist/{TemplatesPage-BU4tSqOo.js → TemplatesPage-DBfL-ao9.js} +4 -4
- package/dist/{WorkflowBuilder-DMonxuoY.js → WorkflowBuilder-CMZi6wQE.js} +7 -7
- package/dist/{WorkflowBuilder-BSPGcOfA.js → WorkflowBuilder-CYmpQtIQ.js} +3 -3
- package/dist/{WorkflowSearchRedirect-DwDNZ_q5.js → WorkflowSearchRedirect-iWzvY9Qo.js} +1 -1
- package/dist/{WorkflowsList-DiiGyZkT.js → WorkflowsList-C8aoqtRE.js} +5 -5
- package/dist/{agentTools-C7pdNJqE.js → agentTools-CrEWQ5st.js} +3 -4
- package/dist/askAboutBridge-BV8m95kk.js +65 -0
- package/dist/assistant.d.ts +30 -1
- package/dist/assistant.js +2 -1
- package/dist/{canvasNoteTools-CqiPTBa1.js → canvasNoteTools-6BQYNCee.js} +2 -2
- package/dist/{code-editor-field-9-GdVE_8.js → code-editor-field-CoRq10k7.js} +1 -1
- package/dist/executions.js +2 -2
- package/dist/{flow-builder-CV5Zu_Hq.js → flow-builder-Dwev-C_g.js} +191 -173
- package/dist/history.js +1 -1
- package/dist/index.js +25 -24
- package/dist/{node-detail-view-ttMp6H6K.js → node-detail-view-BFBSKj5w.js} +5 -5
- package/dist/{node-editor-tab-body-Bqb--pZy.js → node-editor-tab-body-Cz9kOlxu.js} +2 -2
- package/dist/observability.js +2 -2
- package/dist/{popover-BbVOHsfO.js → popover-xPh0iIzy.js} +2 -2
- package/dist/preloadable-lazy-Pp47mqQ9.js +65 -0
- package/dist/{quick-config-panel-Da4uOVSs.js → quick-config-panel-Ym05lyGn.js} +3 -3
- package/dist/{schedule-panel-DnFN933b.js → schedule-panel-54D5W5Qk.js} +4 -4
- package/dist/settings.js +1 -1
- package/dist/{sidebar-node-editor-lcnIZxdR.js → sidebar-node-editor-LL3ofDN7.js} +3 -3
- package/dist/templates.js +2 -2
- package/dist/{useDurableParity-CzUQMFJ3.js → useDurableParity-BScby67i.js} +1 -1
- package/dist/{useExecutions-9aLuOt1c.js → useExecutions-B0VzQcY2.js} +1 -1
- package/dist/{useObservability-CfEw3ZFD.js → useObservability-FfQGgW6W.js} +1 -1
- package/dist/{useRunHistory-B1xJDwl1.js → useRunHistory-BZJg72kd.js} +1 -1
- package/dist/{useWorkflowCodeExport-Bu2QYJzA.js → useWorkflowCodeExport-CUWMlJbi.js} +1 -1
- package/dist/{useWorkflows-BlVVu8NM.js → useWorkflows-Czz5DlL0.js} +1 -1
- package/dist/workflow-builder.js +4 -4
- package/dist/workflow-pages.d.ts +19 -19
- package/dist/workflow-pages.js +16 -24
- 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-Dwev-C_g.js";
|
|
5
|
+
import { Ot as builderPathOf, kt as classifyCreateRefusal, u as ensureNodeTypesLoaded, z as buildOperationSeed } from "./FluidGridsProvider-CbY91ZQq.js";
|
|
6
6
|
import { _ as throwIfResultError, n as getFluidGridsClient } from "./client-C9XSzSXr.js";
|
|
7
7
|
import { a as notifyFluidGridsAiCreditsUpdated, t as AiCreditBalanceSlot } from "./aiCreditsBridge-BuE92tKo.js";
|
|
8
8
|
import { Pr as WorkflowGenerationDocument, y as CancelWorkflowGenerationDocument, yt as GenerateWorkflowFromPromptDocument } from "./graphql-operation-types-kX-MMjgW.js";
|
|
9
|
-
import { n as useCreateWorkflow } from "./useWorkflows-
|
|
9
|
+
import { n as useCreateWorkflow } from "./useWorkflows-Czz5DlL0.js";
|
|
10
10
|
import { r as useTr } from "./TranslationBridge-Da-TPgQm.js";
|
|
11
11
|
import { f as BILLING_PLANS_PATH } from "./fluidgridsEvents-CNdcrUNN.js";
|
|
12
|
-
import { T as CreateWorkflowRefusalDialog } from "./useWorkflowCodeExport-
|
|
12
|
+
import { T as CreateWorkflowRefusalDialog } from "./useWorkflowCodeExport-CUWMlJbi.js";
|
|
13
13
|
import { s as useFluidGridsPermission, t as FLUIDGRIDS_PERMISSIONS } from "./constants-B2lhWNoN.js";
|
|
14
14
|
import { useCallback, useEffect, useMemo, useRef, useState } from "react";
|
|
15
15
|
import { useNavigate } from "react-router";
|
|
@@ -0,0 +1,119 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { t as __exportAll } from "./rolldown-runtime-hDbaFkMy.js";
|
|
3
|
+
import { n as getFluidGridsClient, x as getFluidGridsConfig } from "./client-C9XSzSXr.js";
|
|
4
|
+
import { r as useTr } from "./TranslationBridge-Da-TPgQm.js";
|
|
5
|
+
import { useCallback } from "react";
|
|
6
|
+
import { jsx } from "react/jsx-runtime";
|
|
7
|
+
import { ConnectionDialog } from "@burdenoff/fe-libs/connections";
|
|
8
|
+
|
|
9
|
+
// src/modules/connections/utils/provider-helpers.ts
|
|
10
|
+
/**
|
|
11
|
+
* The OAuth callback URL the builder's connections use.
|
|
12
|
+
*
|
|
13
|
+
* Provider identity (icons, name tiles) and labels moved to
|
|
14
|
+
* `@burdenoff/fe-libs/connections` with the shared connection dialog
|
|
15
|
+
* (BOFF-8174); only what depends on the SDK's own configuration stays here.
|
|
16
|
+
*/
|
|
17
|
+
/**
|
|
18
|
+
* Get the OAuth callback URL for the integrations service.
|
|
19
|
+
*
|
|
20
|
+
* Returns an ABSOLUTE URL, since OAuth providers require an absolute
|
|
21
|
+
* redirect_uri. The host is derived from the configured wspace gateway base
|
|
22
|
+
* (`apiGatewayUrl`) — which serves the `/integrations/oauth/callback` path —
|
|
23
|
+
* not the app origin. Falls back to the current window origin only when no
|
|
24
|
+
* gateway base is configured.
|
|
25
|
+
*/
|
|
26
|
+
function getOAuthCallbackUrl() {
|
|
27
|
+
const path = "/integrations/oauth/callback";
|
|
28
|
+
const gatewayBase = getFluidGridsConfig().apiGatewayUrl;
|
|
29
|
+
if (gatewayBase) try {
|
|
30
|
+
return new URL(path, gatewayBase).toString();
|
|
31
|
+
} catch {}
|
|
32
|
+
if (typeof window !== "undefined" && window.location.hostname === "localhost") return `http://localhost:3713${path}`;
|
|
33
|
+
if (typeof window !== "undefined") return `${window.location.origin}${path}`;
|
|
34
|
+
return path;
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
// src/modules/connections/components/ConnectionFormDialog.tsx
|
|
38
|
+
/**
|
|
39
|
+
* ConnectionFormDialog — a workflow node's "New connection" popup.
|
|
40
|
+
*
|
|
41
|
+
* The dialog itself is `@burdenoff/fe-libs/connections`' ConnectionDialog, the
|
|
42
|
+
* same one the integrations screens use; this component only supplies what the
|
|
43
|
+
* builder has that the shared dialog cannot know: the SDK's GraphQL client, the
|
|
44
|
+
* gateway callback URL and the host's translator. It used to be a separate
|
|
45
|
+
* implementation, and the two drifted (BOFF-8135, BOFF-8170) — see BOFF-8174.
|
|
46
|
+
*
|
|
47
|
+
* Builder-specific choices:
|
|
48
|
+
* - opens on the node's provider by key, or on the whole catalog;
|
|
49
|
+
* - a vault is optional: a node connection should not need a trip to the
|
|
50
|
+
* security module, so the integrations service holds the secret unless the
|
|
51
|
+
* user picks a vault;
|
|
52
|
+
* - shows the Sharing tab.
|
|
53
|
+
*/
|
|
54
|
+
var ConnectionFormDialog_exports = /* @__PURE__ */ __exportAll({ ConnectionFormDialog: () => ConnectionFormDialog });
|
|
55
|
+
/** The shared dialog's categories, back in the service's enum. */
|
|
56
|
+
const SDK_CATEGORIES = {
|
|
57
|
+
cloud_storage: "CLOUD_STORAGE",
|
|
58
|
+
communication: "COMMUNICATION",
|
|
59
|
+
productivity: "PRODUCTIVITY",
|
|
60
|
+
crm: "CRM",
|
|
61
|
+
email: "EMAIL",
|
|
62
|
+
calendar: "CALENDAR",
|
|
63
|
+
developer_tools: "DEVELOPMENT",
|
|
64
|
+
social: "SOCIAL",
|
|
65
|
+
finance: "PAYMENT",
|
|
66
|
+
analytics: "ANALYTICS"
|
|
67
|
+
};
|
|
68
|
+
/** Auth types the SDK's enum can express; anything else is CUSTOM. */
|
|
69
|
+
const SDK_AUTH_TYPES = {
|
|
70
|
+
oauth2: "OAUTH2",
|
|
71
|
+
api_key: "API_KEY",
|
|
72
|
+
basic_auth: "BASIC_AUTH",
|
|
73
|
+
bearer_token: "BEARER_TOKEN"
|
|
74
|
+
};
|
|
75
|
+
/** The shared dialog's provider, in the SDK's GraphQL-enum shape. */
|
|
76
|
+
function toSdkProvider(provider) {
|
|
77
|
+
return {
|
|
78
|
+
id: provider.id,
|
|
79
|
+
key: provider.key,
|
|
80
|
+
name: provider.name,
|
|
81
|
+
description: provider.description,
|
|
82
|
+
category: SDK_CATEGORIES[provider.category] ?? "CUSTOM",
|
|
83
|
+
authType: SDK_AUTH_TYPES[provider.authType] ?? "CUSTOM",
|
|
84
|
+
icon: provider.icon,
|
|
85
|
+
website: provider.website,
|
|
86
|
+
docsUrl: provider.docsUrl,
|
|
87
|
+
isBuiltIn: true,
|
|
88
|
+
isEnabled: provider.isEnabled
|
|
89
|
+
};
|
|
90
|
+
}
|
|
91
|
+
function ConnectionFormDialog({ open, onClose, providerKey, providerId, defaultName, onConnectionCreated, onError }) {
|
|
92
|
+
const tr = useTr();
|
|
93
|
+
const handleCreated = useCallback((connection) => {
|
|
94
|
+
onConnectionCreated?.({
|
|
95
|
+
id: connection.id,
|
|
96
|
+
name: connection.name,
|
|
97
|
+
status: connection.status,
|
|
98
|
+
provider: toSdkProvider(connection.provider)
|
|
99
|
+
});
|
|
100
|
+
}, [onConnectionCreated]);
|
|
101
|
+
return /* @__PURE__ */ jsx(ConnectionDialog, {
|
|
102
|
+
open,
|
|
103
|
+
onClose,
|
|
104
|
+
client: getFluidGridsClient(),
|
|
105
|
+
callbackUrl: getOAuthCallbackUrl(),
|
|
106
|
+
translate: tr,
|
|
107
|
+
providerKey: providerKey ?? null,
|
|
108
|
+
providerId: providerId ?? null,
|
|
109
|
+
providerSource: "catalog",
|
|
110
|
+
requireVault: false,
|
|
111
|
+
defaultName,
|
|
112
|
+
showSharingTab: true,
|
|
113
|
+
defaultVisibility: "RESTRICTED",
|
|
114
|
+
onConnectionCreated: handleCreated,
|
|
115
|
+
onError
|
|
116
|
+
});
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
export { ConnectionFormDialog_exports as n, ConnectionFormDialog as t };
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
import { t as __exportAll } from "./rolldown-runtime-hDbaFkMy.js";
|
|
3
3
|
import { r as useTr } from "./TranslationBridge-Da-TPgQm.js";
|
|
4
|
-
import { n as useDataSinks, t as useDataSinkData } from "./useObservability-
|
|
4
|
+
import { n as useDataSinks, t as useDataSinkData } from "./useObservability-FfQGgW6W.js";
|
|
5
5
|
import { s as prettyJson, t as formatBytes } from "./utils-uaL5UVxb.js";
|
|
6
6
|
import { useEffect, useMemo, useState } from "react";
|
|
7
7
|
import { Icon } from "@iconify/react";
|
|
@@ -1,11 +1,12 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
import { t as __exportAll } from "./rolldown-runtime-hDbaFkMy.js";
|
|
3
|
-
import { i as useRunPending, n as useDurableParityRunFields, o as ExecutionStatusBadge, r as useRunMetadata, s as NodeStatusBadge, t as setRunVersioningOverride } from "./useDurableParity-
|
|
3
|
+
import { i as useRunPending, n as useDurableParityRunFields, o as ExecutionStatusBadge, r as useRunMetadata, s as NodeStatusBadge, t as setRunVersioningOverride } from "./useDurableParity-BScby67i.js";
|
|
4
4
|
import { n as formatRunVersion, r as nodeDisplayTitle, t as buildNodeDisplayMap } from "./run-display-BycKYSU0.js";
|
|
5
5
|
import { r as useTr } from "./TranslationBridge-Da-TPgQm.js";
|
|
6
6
|
import { s as isAgentNodeType } from "./agent-form-Bfvm32j1.js";
|
|
7
|
-
import {
|
|
8
|
-
import {
|
|
7
|
+
import { Cn as canSignalRun, I as describeRunError, L as describeRunStep, On as runSignalTargets, Tn as durableInterfaceOf, cn as nodeStateDurationMs, ln as runDurationMs, sn as formatElapsedMs } from "./FluidGridsProvider-CbY91ZQq.js";
|
|
8
|
+
import { n as useFgAskable, r as useFgAskableSelection } from "./askAboutBridge-BV8m95kk.js";
|
|
9
|
+
import { f as callbackTone, g as shortRunId, h as runChainLinks, m as parseMetadataDefinition, n as useExecution, p as overrideRequestOf, r as useExecutionActions, t as useAutoRefresh } from "./useExecutions-B0VzQcY2.js";
|
|
9
10
|
import { _ as throwIfResultError, m as describeOperationError, n as getFluidGridsClient, r as getFluidGridsClientSafe, x as getFluidGridsConfig } from "./client-C9XSzSXr.js";
|
|
10
11
|
import { Yr as WorkflowRunHierarchyDocument, dn as RunAiUsageDocument, o as AgentStepUpdatedDocument, s as AgentTraceDocument, ut as ExplainRunDocument, xn as RunLogsDocument, yn as RunLogAppendedDocument } from "./graphql-operation-types-kX-MMjgW.js";
|
|
11
12
|
import { i as SdkPermissionButton, s as useFluidGridsPermission, t as FLUIDGRIDS_PERMISSIONS } from "./constants-B2lhWNoN.js";
|
|
@@ -15,18 +16,17 @@ import { a as encodedPayloadBytes, f as EffectBadge, h as useRunPolicyDecisions,
|
|
|
15
16
|
import { n as useWorkflowProposal, o as canSaveRunAsTestCase, r as saveRunAsTestCase, t as WorkflowProposalCard } from "./WorkflowProposalCard-qrEeNyYG.js";
|
|
16
17
|
import { t as AiCreditBalanceSlot } from "./aiCreditsBridge-BuE92tKo.js";
|
|
17
18
|
import { a as fetchRunFailureClusters, i as dismissRunFailureCluster, r as OPEN_STATUSES, t as BUCKET_LABELS } from "./FailureTriagePanel-B9hDQymi.js";
|
|
18
|
-
import { a as useDurableRunFields, i as useDeterminismStatus, n as SignalRunDialog, o as useRunStackTrace, r as terminateDurableRun, s as RunHistoryView, t as useRunHistory } from "./useRunHistory-
|
|
19
|
+
import { a as useDurableRunFields, i as useDeterminismStatus, n as SignalRunDialog, o as useRunStackTrace, r as terminateDurableRun, s as RunHistoryView, t as useRunHistory } from "./useRunHistory-BZJg72kd.js";
|
|
19
20
|
import { $u as ErrorType, L as AgentStepKind, LF as WorkflowQueryRejectCondition, tI as WorkflowUpdateWaitFor, yP as VersioningBehavior } from "./graphql-types-CDKVWH2R.js";
|
|
20
21
|
import { a as formatTokens, d as formatMicroUsd, o as modelLabel, r as aiCost } from "./ai-usage-glCwHyQz.js";
|
|
21
22
|
import { c as useDurableParityEnabled, f as usePhaseCFlags, m as useWorkflowTestsEnabled, s as useDurableFunctionNodesEnabled } from "./feature-flags-DM5myWaD.js";
|
|
22
23
|
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-BrCHB5oA.js";
|
|
23
24
|
import { a as fetchTaskQueueStats } from "./api-C8e0iV-Q.js";
|
|
24
25
|
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-CMfn30xT.js";
|
|
25
|
-
import { v as useWorkflowVersions } from "./useWorkflows-
|
|
26
|
+
import { v as useWorkflowVersions } from "./useWorkflows-Czz5DlL0.js";
|
|
26
27
|
import { useCallback, useEffect, useMemo, useRef, useState } from "react";
|
|
27
28
|
import { Link, useNavigate, useParams, useSearchParams } from "react-router";
|
|
28
29
|
import { Icon } from "@iconify/react";
|
|
29
|
-
import ReactMarkdown from "react-markdown";
|
|
30
30
|
import { cn } from "@burdenoff/fe-libs/utils";
|
|
31
31
|
import { Fragment, jsx, jsxs } from "react/jsx-runtime";
|
|
32
32
|
import { toast } from "sonner";
|
|
@@ -34,6 +34,7 @@ import { AlertDialog, AlertDialogAction, AlertDialogCancel, AlertDialogContent,
|
|
|
34
34
|
import { Button as Button$1 } from "@burdenoff/fe-libs/button";
|
|
35
35
|
import { FlaskConical } from "lucide-react";
|
|
36
36
|
import { buildActorFallback, useActorProfiles } from "@burdenoff/fe-libs/shared";
|
|
37
|
+
import ReactMarkdown from "react-markdown";
|
|
37
38
|
|
|
38
39
|
// src/modules/executions/utils/agent-trace.ts
|
|
39
40
|
/**
|
|
@@ -243,6 +244,22 @@ function agentNodeTraces(nodeStates) {
|
|
|
243
244
|
return (nodeStates ?? []).filter((node) => isAgentNodeType(node.nodeType)).map(parseAgentNodeState);
|
|
244
245
|
}
|
|
245
246
|
|
|
247
|
+
// src/askAbout/Askable.tsx
|
|
248
|
+
const AskableDiv = ({ describe, askDisabled, ...rest }) => {
|
|
249
|
+
const ref = useFgAskable(describe, { disabled: askDisabled });
|
|
250
|
+
return /* @__PURE__ */ jsx("div", {
|
|
251
|
+
ref,
|
|
252
|
+
...rest
|
|
253
|
+
});
|
|
254
|
+
};
|
|
255
|
+
const AskableSelectionDiv = ({ describe, ...rest }) => {
|
|
256
|
+
const ref = useFgAskableSelection(describe);
|
|
257
|
+
return /* @__PURE__ */ jsx("div", {
|
|
258
|
+
ref,
|
|
259
|
+
...rest
|
|
260
|
+
});
|
|
261
|
+
};
|
|
262
|
+
|
|
246
263
|
// src/modules/executions/components/NodeTimeline.tsx
|
|
247
264
|
/**
|
|
248
265
|
* Order nodes the way they actually executed.
|
|
@@ -271,7 +288,7 @@ function orderNodesByExecution(nodeStates, triggerNodeId) {
|
|
|
271
288
|
return rankA === rankB ? 0 : rankA - rankB;
|
|
272
289
|
});
|
|
273
290
|
}
|
|
274
|
-
function NodeTimeline({ nodeStates, nodeDisplay, loading, triggerNodeId, onRetryNode, onViewChildRun, onViewAgentTrace }) {
|
|
291
|
+
function NodeTimeline({ nodeStates, nodeDisplay, loading, triggerNodeId, onRetryNode, onViewChildRun, onViewAgentTrace, askRun }) {
|
|
275
292
|
const tr = useTr();
|
|
276
293
|
const [expandedNodes, setExpandedNodes] = useState(/* @__PURE__ */ new Set());
|
|
277
294
|
const [selectedTab, setSelectedTab] = useState("output");
|
|
@@ -331,6 +348,17 @@ function NodeTimeline({ nodeStates, nodeDisplay, loading, triggerNodeId, onRetry
|
|
|
331
348
|
const isRunning = node.status === "RUNNING";
|
|
332
349
|
const isWaitingSubworkflow = node.status === "WAITING_SUBWORKFLOW";
|
|
333
350
|
const hasChildRun = Boolean(node.childRunId);
|
|
351
|
+
const stepName = nodeDisplayTitle(nodeDisplay?.[node.nodeId], node.nodeId);
|
|
352
|
+
const describeStep = () => askRun ? describeRunStep({
|
|
353
|
+
run: askRun,
|
|
354
|
+
stepId: node.nodeId,
|
|
355
|
+
stepName,
|
|
356
|
+
stepType: node.nodeType,
|
|
357
|
+
stepVersion: node.nodeVersion,
|
|
358
|
+
status: node.status,
|
|
359
|
+
errorType: node.errorType,
|
|
360
|
+
error: nodeError
|
|
361
|
+
}) : null;
|
|
334
362
|
return /* @__PURE__ */ jsxs("div", {
|
|
335
363
|
className: "relative flex gap-4",
|
|
336
364
|
children: [/* @__PURE__ */ jsxs("div", {
|
|
@@ -342,7 +370,10 @@ function NodeTimeline({ nodeStates, nodeDisplay, loading, triggerNodeId, onRetry
|
|
|
342
370
|
className: "text-xs font-bold",
|
|
343
371
|
children: index + 1
|
|
344
372
|
}), isRunning && /* @__PURE__ */ jsx("span", { className: "absolute inset-0 rounded-full border-2 border-[var(--color-status-info-text)] animate-ping" })]
|
|
345
|
-
}), /* @__PURE__ */ jsxs(
|
|
373
|
+
}), /* @__PURE__ */ jsxs(AskableDiv, {
|
|
374
|
+
describe: describeStep,
|
|
375
|
+
askDisabled: !askRun,
|
|
376
|
+
"data-testid": "run-step-card",
|
|
346
377
|
className: `
|
|
347
378
|
flex-1 rounded-lg border transition-all
|
|
348
379
|
${hasError ? "bg-[var(--color-status-error-bg-subtle)] border-[var(--color-status-error-border)]" : isRunning ? "bg-[var(--color-status-info-bg-subtle)] border-[var(--color-status-info-border)]" : "bg-background-secondary border-border-secondary"}
|
|
@@ -429,7 +460,8 @@ function NodeTimeline({ nodeStates, nodeDisplay, loading, triggerNodeId, onRetry
|
|
|
429
460
|
children: selectedTab === "output" ? formatJsonData(node.output) : formatJsonData(node.inputArgs)
|
|
430
461
|
})
|
|
431
462
|
}),
|
|
432
|
-
node.error && /* @__PURE__ */ jsxs(
|
|
463
|
+
node.error && /* @__PURE__ */ jsxs(AskableSelectionDiv, {
|
|
464
|
+
describe: describeStep,
|
|
433
465
|
className: "mt-3 p-3 bg-[var(--color-status-error-bg-subtle)] border border-[var(--color-status-error-border)] rounded",
|
|
434
466
|
children: [/* @__PURE__ */ jsxs("div", {
|
|
435
467
|
className: "flex items-center gap-2 text-[var(--color-status-error-text)] mb-1",
|
|
@@ -6270,6 +6302,15 @@ function ExecutionDetailPage() {
|
|
|
6270
6302
|
icon: "mdi:information-outline"
|
|
6271
6303
|
}
|
|
6272
6304
|
];
|
|
6305
|
+
const askRun = {
|
|
6306
|
+
runId: execution.id,
|
|
6307
|
+
status: execution.status,
|
|
6308
|
+
workflowKey: execution.workflowKey,
|
|
6309
|
+
version: execution.version,
|
|
6310
|
+
errorType: execution.errorType ?? null,
|
|
6311
|
+
errorMessage: execution.errorMessage ?? null,
|
|
6312
|
+
failedSteps: execution.failedNodes
|
|
6313
|
+
};
|
|
6273
6314
|
return /* @__PURE__ */ jsxs("div", {
|
|
6274
6315
|
className: "p-4 pb-24 sm:p-6 sm:pb-24 bg-background-primary min-h-screen",
|
|
6275
6316
|
children: [
|
|
@@ -6591,7 +6632,9 @@ function ExecutionDetailPage() {
|
|
|
6591
6632
|
})
|
|
6592
6633
|
]
|
|
6593
6634
|
}),
|
|
6594
|
-
execution.errorMessage && /* @__PURE__ */ jsxs(
|
|
6635
|
+
execution.errorMessage && /* @__PURE__ */ jsxs(AskableDiv, {
|
|
6636
|
+
describe: () => describeRunError(askRun),
|
|
6637
|
+
"data-testid": "run-error-banner",
|
|
6595
6638
|
className: "mb-6 p-4 bg-[var(--color-status-error-bg-subtle)] border border-[var(--color-status-error-border)] rounded-lg",
|
|
6596
6639
|
children: [/* @__PURE__ */ jsxs("div", {
|
|
6597
6640
|
className: "flex items-center gap-2 text-[var(--color-status-error-text)] mb-2",
|
|
@@ -6602,9 +6645,12 @@ function ExecutionDetailPage() {
|
|
|
6602
6645
|
className: "font-medium",
|
|
6603
6646
|
children: [tr("fluidgrids.executions.executionDetail.errorLabel", "Error"), execution.errorType ? ` (${execution.errorType})` : ""]
|
|
6604
6647
|
})]
|
|
6605
|
-
}), /* @__PURE__ */ jsx(
|
|
6606
|
-
|
|
6607
|
-
children:
|
|
6648
|
+
}), /* @__PURE__ */ jsx(AskableSelectionDiv, {
|
|
6649
|
+
describe: () => describeRunError(askRun),
|
|
6650
|
+
children: /* @__PURE__ */ jsx("p", {
|
|
6651
|
+
className: "text-[var(--color-status-error-text)]",
|
|
6652
|
+
children: execution.errorMessage
|
|
6653
|
+
})
|
|
6608
6654
|
})]
|
|
6609
6655
|
}),
|
|
6610
6656
|
isDurableRun && /* @__PURE__ */ jsx(DurableDeterminismBanner, {
|
|
@@ -6717,7 +6763,8 @@ function ExecutionDetailPage() {
|
|
|
6717
6763
|
triggerNodeId: execution.triggerNodeId ?? void 0,
|
|
6718
6764
|
onRetryNode: canControlRuns ? handleRetryNode : void 0,
|
|
6719
6765
|
onViewChildRun: handleViewChildRun,
|
|
6720
|
-
onViewAgentTrace: (nodeId) => setActiveTab("agent", nodeId)
|
|
6766
|
+
onViewAgentTrace: (nodeId) => setActiveTab("agent", nodeId),
|
|
6767
|
+
askRun
|
|
6721
6768
|
})
|
|
6722
6769
|
}),
|
|
6723
6770
|
activeTab === "agent" && hasAgent && /* @__PURE__ */ jsxs("div", {
|
|
@@ -1,17 +1,17 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
import { t as __exportAll } from "./rolldown-runtime-hDbaFkMy.js";
|
|
3
3
|
import { M as DEFAULT_EXECUTIONS_FILTER, N as useExecutionsStore, m as describeOperationError, n as getFluidGridsClient } from "./client-C9XSzSXr.js";
|
|
4
|
-
import { c as OPERATORS_BY_TYPE, i as useExecutionStats, l as buildSearchAttributeFilter, o as useExecutionsWithStore, r as useExecutionActions, s as EMPTY_SEARCH_FILTER, t as useAutoRefresh, u as searchFilterConflicts, y as validateDateRange } from "./useExecutions-
|
|
4
|
+
import { c as OPERATORS_BY_TYPE, i as useExecutionStats, l as buildSearchAttributeFilter, o as useExecutionsWithStore, r as useExecutionActions, s as EMPTY_SEARCH_FILTER, t as useAutoRefresh, u as searchFilterConflicts, y as validateDateRange } from "./useExecutions-B0VzQcY2.js";
|
|
5
5
|
import { c as useDurableParityEnabled, f as usePhaseCFlags } from "./feature-flags-DM5myWaD.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-DCBOH6Ou.js";
|
|
10
|
-
import { a as useRunStatusCounts, c as runStatusLabels, l as RUN_STATUS_CONFIG, o as ExecutionStatusBadge } from "./useDurableParity-
|
|
10
|
+
import { a as useRunStatusCounts, c as runStatusLabels, l as RUN_STATUS_CONFIG, o as ExecutionStatusBadge } from "./useDurableParity-BScby67i.js";
|
|
11
11
|
import { n as formatRunVersion } from "./run-display-BycKYSU0.js";
|
|
12
|
-
import {
|
|
12
|
+
import { ln as runDurationMs, sn as formatElapsedMs } from "./FluidGridsProvider-CbY91ZQq.js";
|
|
13
13
|
import { n as runListLinkKey, t as runListFilterFromSearch } from "./run-list-links-ByYC0OlV.js";
|
|
14
|
-
import { h as useWorkflowDefinitions } from "./useWorkflows-
|
|
14
|
+
import { h as useWorkflowDefinitions } from "./useWorkflows-Czz5DlL0.js";
|
|
15
15
|
import { t as FluidGridsDocsLink } from "./FluidGridsDocsLink-JxkBpOeb.js";
|
|
16
16
|
import { s as useFluidGridsPermission, t as FLUIDGRIDS_PERMISSIONS } from "./constants-B2lhWNoN.js";
|
|
17
17
|
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-BrCHB5oA.js";
|