@burdenoff/fluidgrids-fe-sdk 2026.1111.1 → 2026.1111.3
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/{ExecutionDetailPage-DpAYZYx2.js → ExecutionDetailPage-Dpv1mVsb.js} +96 -34
- package/dist/{FailureTriagePanel-BJoO3lsL.js → FailureTriagePanel-D2RjCsYa.js} +97 -3
- package/dist/{FluidGridsProvider-CraUhM4E.js → FluidGridsProvider-Bg6wKnX4.js} +1 -1
- package/dist/{HistoryPage-CYqyngbp.js → HistoryPage-D75ICUi7.js} +3 -3
- package/dist/{InsightsPage-DBnOta71.js → InsightsPage-DFJ--w4r.js} +352 -72
- package/dist/{ManagedAiPolicyAuthority-D3AYZ5FP.js → ManagedAiPolicyAuthority-DsW8Jmm7.js} +297 -71
- package/dist/{MissingNodesInstallModal-LdB_-hSf.js → MissingNodesInstallModal-SlsOhIEf.js} +2 -2
- package/dist/{NodesPage-fEUyUKLC.js → NodesPage-CcHVwFdc.js} +2 -2
- package/dist/{PublishCustomNodeAction-C6qkAIjG.js → PublishCustomNodeAction-BzYU-juH.js} +1 -1
- package/dist/{TemplateConfigurationModal-CnqJFt2f.js → TemplateConfigurationModal-CdaNA1-J.js} +2 -2
- package/dist/{TemplateDetailPanel-BWnLqcA7.js → TemplateDetailPanel-B83bYkbT.js} +2 -2
- package/dist/{TemplatesPage-omZCh0-D.js → TemplatesPage-WTy20LXZ.js} +5 -5
- package/dist/{VersionDiffDialog-CLgIj_jc.js → VersionDiffDialog-BEIc5QBh.js} +1 -1
- package/dist/{WorkflowProposalCard-CV4kV4_Z.js → WorkflowProposalCard-KEvkgAE1.js} +1 -1
- package/dist/{WorkflowSearchRedirect-D34qC1Qm.js → WorkflowSearchRedirect-DB9R9UDy.js} +10 -10
- package/dist/{WorkflowShareDialog-DiD8Gqim.js → WorkflowShareDialog-C6icr074.js} +2 -2
- package/dist/{WorkflowsList-Bgsy1OPw.js → WorkflowsList-DZ_QxXEV.js} +5 -5
- package/dist/{agent-form-Ci_vxQF5.js → agent-form-hb7BR-JZ.js} +1 -1
- package/dist/{agentTools-D61qQFfw.js → agentTools-eOm3_v4A.js} +2 -2
- package/dist/{codec-client-Cm4GXmJ9.js → codec-client-B3ugmi-P.js} +1 -1
- package/dist/executions.js +1 -1
- package/dist/{flow-builder-sG8ZsMYV.js → flow-builder-B31fZz3L.js} +22 -22
- package/dist/history.js +1 -1
- package/dist/{index-FrgTpWov.d.ts → index-lX6U7gi1.d.ts} +67 -1
- package/dist/index.d.ts +2 -2
- package/dist/index.js +24 -24
- package/dist/{node-detail-view-pyTakx4l.js → node-detail-view-DIR_J4IW.js} +6 -6
- package/dist/{node-endpoint-configs-DXCKkK_9.js → node-endpoint-configs-DS59aLlH.js} +560 -4
- package/dist/nodes.js +1 -1
- package/dist/observability.d.ts +1 -1
- package/dist/observability.js +1 -1
- package/dist/{quick-config-panel-Zpsh2brj.js → quick-config-panel-iYkp65in.js} +2 -2
- package/dist/settings.js +1 -1
- package/dist/templates.js +1 -1
- package/dist/{useAgentDefinitions-Czl2aHJb.js → useAgentDefinitions-SRq-nq4y.js} +1 -1
- package/dist/{useExecutions-CZuOL3RI.js → useExecutions-D08C6QHV.js} +3 -2
- package/dist/{useObservability-D402nqXD.js → useObservability-111g9mWF.js} +2 -2
- package/dist/{useRunHistory-CsXQohcH.js → useRunHistory-DV-ad0I8.js} +2 -2
- package/dist/{useWorkflows-UyKrrkX-.js → useWorkflows-B0-aiUr8.js} +2 -2
- package/dist/workflow-builder.js +2 -2
- package/dist/workflows-list.js +1 -1
- package/package.json +1 -1
|
@@ -1,20 +1,20 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
import { t as __exportAll } from "./rolldown-runtime-hDbaFkMy.js";
|
|
3
|
-
import { $ as DurableParityRunFieldsDocument, $
|
|
4
|
-
import { $t as runDurationMs, Hn as useDurableFunctionNodesEnabled, Pn as runSignalTargets, Qt as nodeStateDurationMs, Un as useDurableParityEnabled, Yn as useWorkflowTestsEnabled, Zt as formatElapsedMs, jn as durableInterfaceOf, kn as canSignalRun, qn as usePhaseCFlags } from "./FluidGridsProvider-
|
|
3
|
+
import { $ as DurableParityRunFieldsDocument, $i as useExecutionsStore, B as DeleteTaskQueueDocument, Ci as getFluidGridsClientSafe, D as CreateWorkerTokenDocument, E as CreateTaskQueueDocument, En as SetWorkflowRunVersioningOverrideDocument, Kr as WorkflowRunMetadataDocument, Li as throwIfResultError, Pi as describeOperationError, Qi as DEFAULT_EXECUTIONS_FILTER, Rn as TaskQueueStatsDocument, Si as getFluidGridsClient, Ur as WorkflowRunHierarchyDocument, V as DeleteWorkerTokenDocument, Vi as getFluidGridsConfig, Xr as WorkflowRunsCountDocument, _i as WorkflowWorkersDocument, _n as RunLogsDocument, ct as ExplainRunDocument, er as UpdateTaskQueueDocument, gr as WorkflowBatchOperationUpdatedDocument, hn as RunLogAppendedDocument, lr as WorkerTokensDocument, on as RotateWorkerTokenDocument, qr as WorkflowRunPendingDocument, sn as RunAiUsageDocument, wn as SetWorkerTokenConnectionAllowlistDocument, zn as TaskQueuesDocument } from "./node-endpoint-configs-DS59aLlH.js";
|
|
4
|
+
import { $t as runDurationMs, Hn as useDurableFunctionNodesEnabled, Pn as runSignalTargets, Qt as nodeStateDurationMs, Un as useDurableParityEnabled, Yn as useWorkflowTestsEnabled, Zt as formatElapsedMs, jn as durableInterfaceOf, kn as canSignalRun, qn as usePhaseCFlags } from "./FluidGridsProvider-Bg6wKnX4.js";
|
|
5
5
|
import { r as useTr } from "./TranslationBridge-CX0OMnyn.js";
|
|
6
|
-
import { h as useWorkflowDefinitions, v as useWorkflowVersions } from "./useWorkflows-
|
|
6
|
+
import { h as useWorkflowDefinitions, v as useWorkflowVersions } from "./useWorkflows-B0-aiUr8.js";
|
|
7
7
|
import { KF as WorkflowUpdateWaitFor, OF as WorkflowQueryRejectCondition, Qu as ErrorType, dF as WorkflowBatchOperationType, fI as useFluidGridsPermission, kF as WorkflowResetType, lI as SdkPermissionButton, oI as FLUIDGRIDS_PERMISSIONS, pP as VersioningBehavior } from "./graphql-types-CulUbQWN.js";
|
|
8
|
-
import { _ as statusCountFilter, c as OPERATORS_BY_TYPE, d as STATUS_COUNT_GROUP_BY, f as callbackTone, g as shortRunId, h as runChainLinks, i as useExecutionStats, l as buildSearchAttributeFilter, m as parseMetadataDefinition, n as useExecution, o as useExecutionsWithStore, p as overrideRequestOf, r as useExecutionActions, s as EMPTY_SEARCH_FILTER, t as useAutoRefresh, u as searchFilterConflicts, v as statusCountsOf, y as validateDateRange } from "./useExecutions-
|
|
8
|
+
import { _ as statusCountFilter, c as OPERATORS_BY_TYPE, d as STATUS_COUNT_GROUP_BY, f as callbackTone, g as shortRunId, h as runChainLinks, i as useExecutionStats, l as buildSearchAttributeFilter, m as parseMetadataDefinition, n as useExecution, o as useExecutionsWithStore, p as overrideRequestOf, r as useExecutionActions, s as EMPTY_SEARCH_FILTER, t as useAutoRefresh, u as searchFilterConflicts, v as statusCountsOf, y as validateDateRange } from "./useExecutions-D08C6QHV.js";
|
|
9
9
|
import { n as useFluidGridsPageControls } from "./pageControlsBridge-0pX9s-3k.js";
|
|
10
10
|
import { t as executionsControls } from "./pageControlSpecs-DZJ9K37m.js";
|
|
11
11
|
import { t as FluidGridsDocsLink } from "./FluidGridsDocsLink-iRiufGc2.js";
|
|
12
|
-
import { $ as startBatchTerminate, A as fetchBatchOperation, B as jsonArg, F as fetchRunControlFields, G as resetRun, I as fetchRunHistoryArchive, K as resetRunToLastCleanTask, L as fetchRunUpdate, N as fetchCodecServerSettings, O as failActivityById, P as fetchPauseRules, Q as startBatchOperation, R as fetchSearchAttributes, U as queryRun, V as pauseActivities, W as resetActivities, X as sendRunUpdate, Z as startBatchExport, _ as useResource, at as readTyped, c as FieldError, d as NativeSelect, f as RUN_CONTROL_DIALOG_STYLE, g as parseJsonObjectInput, h as parseJsonInput, it as upsertRunSearchAttributes, j as fetchBatchOperations, l as JsonBlock, m as newRunControlId, ot as writeTyped, p as StatusPill, q as revokeSignalToken, rt as updateActivityOptions, s as isAgentNodeType, tt as unpauseActivities, u as JsonField, w as createSignalToken, x as completeActivityById, y as cancelBatchOperation, z as fetchSignalTokens } from "./agent-form-
|
|
13
|
-
import { C as useAvailableTags, _ as buildNodeDisplayMap, b as EntityTagPicker, n as useWorkflowProposal, o as canSaveRunAsTestCase, r as saveRunAsTestCase, t as WorkflowProposalCard, v as formatRunVersion, y as nodeDisplayTitle } from "./WorkflowProposalCard-
|
|
12
|
+
import { $ as startBatchTerminate, A as fetchBatchOperation, B as jsonArg, F as fetchRunControlFields, G as resetRun, I as fetchRunHistoryArchive, K as resetRunToLastCleanTask, L as fetchRunUpdate, N as fetchCodecServerSettings, O as failActivityById, P as fetchPauseRules, Q as startBatchOperation, R as fetchSearchAttributes, U as queryRun, V as pauseActivities, W as resetActivities, X as sendRunUpdate, Z as startBatchExport, _ as useResource, at as readTyped, c as FieldError, d as NativeSelect, f as RUN_CONTROL_DIALOG_STYLE, g as parseJsonObjectInput, h as parseJsonInput, it as upsertRunSearchAttributes, j as fetchBatchOperations, l as JsonBlock, m as newRunControlId, ot as writeTyped, p as StatusPill, q as revokeSignalToken, rt as updateActivityOptions, s as isAgentNodeType, tt as unpauseActivities, u as JsonField, w as createSignalToken, x as completeActivityById, y as cancelBatchOperation, z as fetchSignalTokens } from "./agent-form-hb7BR-JZ.js";
|
|
13
|
+
import { C as useAvailableTags, _ as buildNodeDisplayMap, b as EntityTagPicker, n as useWorkflowProposal, o as canSaveRunAsTestCase, r as saveRunAsTestCase, t as WorkflowProposalCard, v as formatRunVersion, y as nodeDisplayTitle } from "./WorkflowProposalCard-KEvkgAE1.js";
|
|
14
14
|
import { t as AiCreditBalanceSlot } from "./aiCreditsBridge-BuE92tKo.js";
|
|
15
|
-
import { a as
|
|
16
|
-
import { a as
|
|
17
|
-
import { a as useDurableRunFields, i as useDeterminismStatus, n as SignalRunDialog, o as useRunStackTrace, r as terminateDurableRun, s as RunHistoryView, t as useRunHistory } from "./useRunHistory-
|
|
15
|
+
import { a as fetchRunFailureClusters, i as dismissRunFailureCluster, o as runListFilterFromSearch, r as OPEN_STATUSES, s as runListLinkKey, t as BUCKET_LABELS } from "./FailureTriagePanel-D2RjCsYa.js";
|
|
16
|
+
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-B3ugmi-P.js";
|
|
17
|
+
import { a as useDurableRunFields, i as useDeterminismStatus, n as SignalRunDialog, o as useRunStackTrace, r as terminateDurableRun, s as RunHistoryView, t as useRunHistory } from "./useRunHistory-DV-ad0I8.js";
|
|
18
18
|
import { a as formatTokens, o as modelLabel, r as aiCost } from "./ai-usage-CK61EZWc.js";
|
|
19
19
|
import { useCallback, useEffect, useMemo, useRef, useState } from "react";
|
|
20
20
|
import { Link, useNavigate, useParams, useSearchParams } from "react-router";
|
|
@@ -239,6 +239,7 @@ function countActiveFilters(filter, parityEnabled) {
|
|
|
239
239
|
filter.durationMaxSeconds !== null,
|
|
240
240
|
filter.errorType !== "all",
|
|
241
241
|
filter.nodeId !== "",
|
|
242
|
+
filter.failedNodeType !== "",
|
|
242
243
|
filter.tagId !== "",
|
|
243
244
|
parityEnabled && filter.workflowId.trim() !== ""
|
|
244
245
|
].filter(Boolean).length;
|
|
@@ -280,6 +281,36 @@ function TagFilterSelect({ value, onChange, className }) {
|
|
|
280
281
|
}
|
|
281
282
|
|
|
282
283
|
// src/modules/executions/components/ExecutionFilters.tsx
|
|
284
|
+
/**
|
|
285
|
+
* An error type set by a link (Insights, BOFF-9974) that the dropdown offers
|
|
286
|
+
* no option for, so it still shows as selected.
|
|
287
|
+
*/
|
|
288
|
+
function LinkedErrorTypeOption({ errorType, offered }) {
|
|
289
|
+
if (errorType === "all" || offered.some(({ value }) => value === errorType)) return null;
|
|
290
|
+
return /* @__PURE__ */ jsx("option", {
|
|
291
|
+
value: errorType,
|
|
292
|
+
children: errorType
|
|
293
|
+
});
|
|
294
|
+
}
|
|
295
|
+
/** The failed-node-type filter (BOFF-9974), set only by links, with its clear button. */
|
|
296
|
+
function FailedNodeTypeChip({ nodeType, onClear }) {
|
|
297
|
+
const tr = useTr();
|
|
298
|
+
if (!nodeType) return null;
|
|
299
|
+
return /* @__PURE__ */ jsxs("span", {
|
|
300
|
+
className: "inline-flex items-center gap-1.5 rounded-lg border border-border-default bg-bg-surface px-3 py-2 text-sm text-text-primary",
|
|
301
|
+
"data-testid": "runs-failed-node-type-filter",
|
|
302
|
+
children: [tr("fluidgrids.executions.executionFilters.failedNodeType", "Failed node: {{nodeType}}", { nodeType }), /* @__PURE__ */ jsx("button", {
|
|
303
|
+
type: "button",
|
|
304
|
+
onClick: onClear,
|
|
305
|
+
"aria-label": tr("fluidgrids.executions.executionFilters.clearFailedNodeType", "Remove the failed node filter"),
|
|
306
|
+
className: "text-text-secondary hover:text-text-primary",
|
|
307
|
+
children: /* @__PURE__ */ jsx(Icon, {
|
|
308
|
+
icon: "mdi:close",
|
|
309
|
+
width: 14
|
|
310
|
+
})
|
|
311
|
+
})]
|
|
312
|
+
});
|
|
313
|
+
}
|
|
283
314
|
function ExecutionFilters({ workflows = [], onRefresh }) {
|
|
284
315
|
const tr = useTr();
|
|
285
316
|
const statusOptions = useMemo(() => [
|
|
@@ -376,8 +407,8 @@ function ExecutionFilters({ workflows = [], onRefresh }) {
|
|
|
376
407
|
label: tr("fluidgrids.executions.executionFilters.dateCustomRange", "Custom Range")
|
|
377
408
|
}
|
|
378
409
|
];
|
|
379
|
-
const { filter, setStatusFilter, setWorkflowFilter, setDateRange, setSearchQuery, setTriggerTypeFilter, setDurationFilter, setErrorTypeFilter, setNodeFilter, setTagFilter, resetFilters, autoRefresh, setAutoRefresh } = useExecutionsStore();
|
|
380
|
-
const [showCustomDate, setShowCustomDate] = useState(
|
|
410
|
+
const { filter, setStatusFilter, setWorkflowFilter, setDateRange, setSearchQuery, setTriggerTypeFilter, setDurationFilter, setErrorTypeFilter, setNodeFilter, setFailedNodeTypeFilter, setTagFilter, resetFilters, autoRefresh, setAutoRefresh } = useExecutionsStore();
|
|
411
|
+
const [showCustomDate, setShowCustomDate] = useState(() => filter.dateRange.preset === "custom");
|
|
381
412
|
const handleDatePresetChange = useCallback((preset) => {
|
|
382
413
|
const now = /* @__PURE__ */ new Date();
|
|
383
414
|
let start = null;
|
|
@@ -558,13 +589,24 @@ function ExecutionFilters({ workflows = [], onRefresh }) {
|
|
|
558
589
|
value: filter.errorType,
|
|
559
590
|
onChange: (e) => setErrorTypeFilter(e.target.value),
|
|
560
591
|
className: "px-3 py-2 bg-bg-surface border border-border-default rounded-lg text-text-primary focus:outline-none focus:ring-2 focus:ring-action-primary-bg scheme-normal dark:scheme-dark",
|
|
561
|
-
children: [
|
|
562
|
-
|
|
563
|
-
|
|
564
|
-
|
|
565
|
-
|
|
566
|
-
|
|
567
|
-
|
|
592
|
+
children: [
|
|
593
|
+
/* @__PURE__ */ jsx("option", {
|
|
594
|
+
value: "all",
|
|
595
|
+
children: tr("fluidgrids.executions.executionFilters.allErrors", "All error types")
|
|
596
|
+
}),
|
|
597
|
+
errorOptions.map(({ value, label }) => /* @__PURE__ */ jsx("option", {
|
|
598
|
+
value,
|
|
599
|
+
children: label
|
|
600
|
+
}, value)),
|
|
601
|
+
/* @__PURE__ */ jsx(LinkedErrorTypeOption, {
|
|
602
|
+
errorType: filter.errorType,
|
|
603
|
+
offered: errorOptions
|
|
604
|
+
})
|
|
605
|
+
]
|
|
606
|
+
}),
|
|
607
|
+
/* @__PURE__ */ jsx(FailedNodeTypeChip, {
|
|
608
|
+
nodeType: filter.failedNodeType,
|
|
609
|
+
onClear: () => setFailedNodeTypeFilter("")
|
|
568
610
|
}),
|
|
569
611
|
/* @__PURE__ */ jsx("input", {
|
|
570
612
|
type: "text",
|
|
@@ -3577,10 +3619,21 @@ var ExecutionsListPage_exports = /* @__PURE__ */ __exportAll({ ExecutionsListPag
|
|
|
3577
3619
|
function ExecutionsListPage() {
|
|
3578
3620
|
const tr = useTr();
|
|
3579
3621
|
const navigate = useNavigate();
|
|
3580
|
-
const { viewMode, setViewMode, setSelectedExecution, selection, clearSelection, setStatusFilter, setWorkflowFilter, setWorkflowIdFilter, filter, autoRefresh, autoRefreshInterval } = useExecutionsStore();
|
|
3622
|
+
const { viewMode, setViewMode, setSelectedExecution, selection, clearSelection, setStatusFilter, setWorkflowFilter, setWorkflowIdFilter, updateFilter, filter, autoRefresh, autoRefreshInterval } = useExecutionsStore();
|
|
3581
3623
|
const [searchParams] = useSearchParams();
|
|
3582
3624
|
const workflowKeyParam = searchParams.get("workflowKey") ?? "";
|
|
3583
3625
|
const lastWorkflowKeyParam = useRef(null);
|
|
3626
|
+
const linkKey = runListLinkKey(searchParams);
|
|
3627
|
+
const [appliedLinkKey, setAppliedLinkKey] = useState(null);
|
|
3628
|
+
if (appliedLinkKey !== linkKey) {
|
|
3629
|
+
setAppliedLinkKey(linkKey);
|
|
3630
|
+
const linked = runListFilterFromSearch(searchParams);
|
|
3631
|
+
if (linked) updateFilter({
|
|
3632
|
+
...DEFAULT_EXECUTIONS_FILTER,
|
|
3633
|
+
...linked,
|
|
3634
|
+
workflowKey: workflowKeyParam
|
|
3635
|
+
});
|
|
3636
|
+
}
|
|
3584
3637
|
if (lastWorkflowKeyParam.current !== workflowKeyParam) {
|
|
3585
3638
|
lastWorkflowKeyParam.current = workflowKeyParam;
|
|
3586
3639
|
if (useExecutionsStore.getState().filter.workflowKey !== workflowKeyParam) setWorkflowFilter(workflowKeyParam);
|
|
@@ -5023,58 +5076,67 @@ function RunDataPrunedNotice({ dataPrunedAt }) {
|
|
|
5023
5076
|
function isRecord$1(value) {
|
|
5024
5077
|
return typeof value === "object" && value !== null && !Array.isArray(value);
|
|
5025
5078
|
}
|
|
5079
|
+
function isRunQueueScope(value) {
|
|
5080
|
+
return value === "WORKFLOW" || value === "WORKSPACE";
|
|
5081
|
+
}
|
|
5026
5082
|
/** The queue marker on a run's context, or null when there is none or it is malformed. */
|
|
5027
5083
|
function readRunQueueMarker(context) {
|
|
5028
5084
|
if (!isRecord$1(context)) return null;
|
|
5029
5085
|
const marker = context.concurrency;
|
|
5030
5086
|
if (!isRecord$1(marker)) return null;
|
|
5031
|
-
const { queuedAt, checkedAt, limit, active, position } = marker;
|
|
5032
|
-
if (typeof queuedAt !== "string" || typeof checkedAt !== "string" || typeof limit !== "number" || typeof active !== "number" || typeof position !== "number") return null;
|
|
5087
|
+
const { queuedAt, checkedAt, limit, active, position, scope } = marker;
|
|
5088
|
+
if (typeof queuedAt !== "string" || typeof checkedAt !== "string" || typeof limit !== "number" || typeof active !== "number" || typeof position !== "number" || scope !== void 0 && !isRunQueueScope(scope)) return null;
|
|
5033
5089
|
return {
|
|
5034
5090
|
queuedAt,
|
|
5035
5091
|
checkedAt,
|
|
5036
5092
|
limit,
|
|
5037
5093
|
active,
|
|
5038
|
-
position
|
|
5094
|
+
position,
|
|
5095
|
+
scope: isRunQueueScope(scope) ? scope : "WORKFLOW"
|
|
5039
5096
|
};
|
|
5040
5097
|
}
|
|
5041
5098
|
|
|
5042
5099
|
// src/modules/executions/components/RunQueuedBanner.tsx
|
|
5043
5100
|
/**
|
|
5044
|
-
* Run detail: why a PENDING run has not started (BOFF-7647).
|
|
5101
|
+
* Run detail: why a PENDING run has not started (BOFF-7647, BOFF-9949).
|
|
5045
5102
|
*
|
|
5046
|
-
* A workflow's "Max parallel executions" setting
|
|
5047
|
-
*
|
|
5048
|
-
*
|
|
5049
|
-
*
|
|
5103
|
+
* A workflow's "Max parallel executions" setting, and the workspace's
|
|
5104
|
+
* concurrent-run cap from its plan, hold extra production runs in a queue
|
|
5105
|
+
* instead of failing them; they start in order as slots free up. The worker
|
|
5106
|
+
* records the wait on the run as `context.concurrency`, with the limit it
|
|
5107
|
+
* waits behind. Renders nothing for any other run.
|
|
5050
5108
|
*/
|
|
5051
5109
|
function RunQueuedBanner({ status, context }) {
|
|
5052
5110
|
const tr = useTr();
|
|
5053
5111
|
if (status !== "PENDING") return null;
|
|
5054
5112
|
const marker = readRunQueueMarker(context);
|
|
5055
5113
|
if (!marker) return null;
|
|
5114
|
+
const numbers = {
|
|
5115
|
+
limit: String(marker.limit),
|
|
5116
|
+
active: String(marker.active),
|
|
5117
|
+
position: String(marker.position)
|
|
5118
|
+
};
|
|
5119
|
+
const since = new Date(marker.queuedAt).toLocaleString();
|
|
5120
|
+
const workspace = marker.scope === "WORKSPACE";
|
|
5056
5121
|
return /* @__PURE__ */ jsxs("div", {
|
|
5057
5122
|
className: "mb-6 rounded-lg border border-border-secondary bg-background-secondary p-4",
|
|
5058
5123
|
"data-testid": "run-queued-banner",
|
|
5124
|
+
"data-queue-scope": marker.scope,
|
|
5059
5125
|
children: [
|
|
5060
5126
|
/* @__PURE__ */ jsxs("div", {
|
|
5061
5127
|
className: "flex items-center gap-2 text-sm font-medium text-text-primary",
|
|
5062
5128
|
children: [/* @__PURE__ */ jsx(Icon, {
|
|
5063
5129
|
icon: "mdi:tray-full",
|
|
5064
5130
|
width: 18
|
|
5065
|
-
}), tr("fluidgrids.executions.queued.heading", "Queued")]
|
|
5131
|
+
}), workspace ? tr("fluidgrids.executions.queued.workspaceHeading", "Waiting: workspace concurrency limit") : tr("fluidgrids.executions.queued.heading", "Queued")]
|
|
5066
5132
|
}),
|
|
5067
5133
|
/* @__PURE__ */ jsx("p", {
|
|
5068
5134
|
className: "mt-1 text-sm text-text-secondary",
|
|
5069
|
-
children: tr("fluidgrids.executions.queued.body", "This workflow allows {{limit}} runs at a time and {{active}} are in progress. This run is number {{position}} in line and starts automatically when a slot frees up.",
|
|
5070
|
-
limit: String(marker.limit),
|
|
5071
|
-
active: String(marker.active),
|
|
5072
|
-
position: String(marker.position)
|
|
5073
|
-
})
|
|
5135
|
+
children: workspace ? tr("fluidgrids.executions.queued.workspaceBody", "This workspace allows {{limit}} runs at a time across all its workflows and {{active}} are in progress. This run is number {{position}} in line and starts automatically when a slot frees up.", numbers) : tr("fluidgrids.executions.queued.body", "This workflow allows {{limit}} runs at a time and {{active}} are in progress. This run is number {{position}} in line and starts automatically when a slot frees up.", numbers)
|
|
5074
5136
|
}),
|
|
5075
5137
|
/* @__PURE__ */ jsx("p", {
|
|
5076
5138
|
className: "mt-1 text-xs text-text-tertiary",
|
|
5077
|
-
children: tr("fluidgrids.executions.queued.since", "Queued since {{time}} · change the limit in the workflow's Settings (Max parallel executions)", { time:
|
|
5139
|
+
children: workspace ? tr("fluidgrids.executions.queued.workspaceSince", "Queued since {{time}} · the limit comes from your workspace's plan", { time: since }) : tr("fluidgrids.executions.queued.since", "Queued since {{time}} · change the limit in the workflow's Settings (Max parallel executions)", { time: since })
|
|
5078
5140
|
})
|
|
5079
5141
|
]
|
|
5080
5142
|
});
|
|
@@ -1,12 +1,106 @@
|
|
|
1
1
|
"use client";
|
|
2
|
+
import { Cn as SetRunFailureTriageEnabledDocument, Li as throwIfResultError, Si as getFluidGridsClient, X as DismissRunFailureClusterDocument, dn as RunFailureClustersDocument, fn as RunFailureTriageSettingsDocument, ft as FgTriageFailedRunsDocument } from "./node-endpoint-configs-DS59aLlH.js";
|
|
2
3
|
import { r as useTr } from "./TranslationBridge-CX0OMnyn.js";
|
|
3
|
-
import {
|
|
4
|
-
import { cD as RunFailureClusterStatus } from "./graphql-types-CulUbQWN.js";
|
|
4
|
+
import { Qu as ErrorType, cD as RunFailureClusterStatus } from "./graphql-types-CulUbQWN.js";
|
|
5
5
|
import { useCallback, useEffect, useState } from "react";
|
|
6
6
|
import { Icon } from "@iconify/react";
|
|
7
7
|
import { jsx, jsxs } from "react/jsx-runtime";
|
|
8
8
|
import { Button } from "@burdenoff/fe-libs/ui";
|
|
9
9
|
|
|
10
|
+
// src/modules/executions/utils/run-list-links.ts
|
|
11
|
+
/**
|
|
12
|
+
* Links into the Runs list that carry its filters in the query string
|
|
13
|
+
* (BOFF-9974), and the reading of them on the list.
|
|
14
|
+
*
|
|
15
|
+
* Insights' error panel links each failing node, error type, workflow and day
|
|
16
|
+
* to "the failed runs behind it". The two halves live together so a link and
|
|
17
|
+
* the filter it opens cannot drift apart.
|
|
18
|
+
*
|
|
19
|
+
* ../runs?status=FAILED&failedNodeType=internal%3Ahttp&from=…&to=…
|
|
20
|
+
*
|
|
21
|
+
* `from` / `to` are ISO instants (the list's custom date range); `workflowKey`
|
|
22
|
+
* is read by the list on its own, as it always was.
|
|
23
|
+
*/
|
|
24
|
+
/** The filters a link may set; `workflowKey` stays with the list's own sync. */
|
|
25
|
+
const RUN_LIST_LINK_PARAMS = [
|
|
26
|
+
"status",
|
|
27
|
+
"errorType",
|
|
28
|
+
"failedNodeType",
|
|
29
|
+
"from",
|
|
30
|
+
"to"
|
|
31
|
+
];
|
|
32
|
+
const RUN_STATUSES = [
|
|
33
|
+
"PENDING",
|
|
34
|
+
"RUNNING",
|
|
35
|
+
"COMPLETED",
|
|
36
|
+
"FAILED",
|
|
37
|
+
"CANCELLED",
|
|
38
|
+
"WAITING",
|
|
39
|
+
"TERMINATED"
|
|
40
|
+
];
|
|
41
|
+
function isRunStatus(value) {
|
|
42
|
+
return RUN_STATUSES.some((status) => status === value);
|
|
43
|
+
}
|
|
44
|
+
/** A classification the service knows (its ErrorType enum). */
|
|
45
|
+
function isErrorType(value) {
|
|
46
|
+
return Object.values(ErrorType).some((type) => type === value);
|
|
47
|
+
}
|
|
48
|
+
function validDate(value) {
|
|
49
|
+
return value instanceof Date && Number.isFinite(value.getTime());
|
|
50
|
+
}
|
|
51
|
+
/** The Runs list with `link`'s filters, relative to an SDK page route. */
|
|
52
|
+
function runListPath(link) {
|
|
53
|
+
const params = new URLSearchParams();
|
|
54
|
+
if (link.workflowKey) params.set("workflowKey", link.workflowKey);
|
|
55
|
+
if (link.status) params.set("status", link.status);
|
|
56
|
+
if (link.errorType) params.set("errorType", link.errorType);
|
|
57
|
+
if (link.failedNodeType) params.set("failedNodeType", link.failedNodeType);
|
|
58
|
+
if (validDate(link.from)) params.set("from", link.from.toISOString());
|
|
59
|
+
if (validDate(link.to)) params.set("to", link.to.toISOString());
|
|
60
|
+
const query = params.toString();
|
|
61
|
+
return query ? `../runs?${query}` : "../runs";
|
|
62
|
+
}
|
|
63
|
+
function parseDate(value) {
|
|
64
|
+
if (!value) return null;
|
|
65
|
+
const date = new Date(value);
|
|
66
|
+
return Number.isFinite(date.getTime()) ? date : null;
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* The list filters a link's query string sets, or null when it carries none.
|
|
70
|
+
* Unknown values are ignored rather than trusted (the URL is user input); a
|
|
71
|
+
* reversed range is dropped, like the custom range inputs do.
|
|
72
|
+
*/
|
|
73
|
+
function runListFilterFromSearch(params) {
|
|
74
|
+
const filter = {};
|
|
75
|
+
const status = params.get("status")?.trim().toUpperCase() ?? "";
|
|
76
|
+
if (isRunStatus(status)) filter.status = status;
|
|
77
|
+
const errorType = params.get("errorType")?.trim().toUpperCase() ?? "";
|
|
78
|
+
if (isErrorType(errorType)) filter.errorType = errorType;
|
|
79
|
+
const failedNodeType = params.get("failedNodeType")?.trim() ?? "";
|
|
80
|
+
if (failedNodeType) filter.failedNodeType = failedNodeType;
|
|
81
|
+
const from = parseDate(params.get("from"));
|
|
82
|
+
const to = parseDate(params.get("to"));
|
|
83
|
+
if ((from || to) && !(from && to && from.getTime() > to.getTime())) filter.dateRange = {
|
|
84
|
+
start: from,
|
|
85
|
+
end: to,
|
|
86
|
+
preset: "custom"
|
|
87
|
+
};
|
|
88
|
+
return Object.keys(filter).length > 0 ? filter : null;
|
|
89
|
+
}
|
|
90
|
+
/** A stable key of the link parameters in `params`, to apply each link once. */
|
|
91
|
+
function runListLinkKey(params) {
|
|
92
|
+
return RUN_LIST_LINK_PARAMS.map((name) => params.get(name) ?? "").join("|");
|
|
93
|
+
}
|
|
94
|
+
/** The UTC day [00:00, 24:00) of an ISO calendar date such as "2026-11-10". */
|
|
95
|
+
function utcDay(date) {
|
|
96
|
+
const from = /* @__PURE__ */ new Date(`${date}T00:00:00.000Z`);
|
|
97
|
+
if (!Number.isFinite(from.getTime())) return null;
|
|
98
|
+
return {
|
|
99
|
+
from,
|
|
100
|
+
to: /* @__PURE__ */ new Date(from.getTime() + 864e5 - 1)
|
|
101
|
+
};
|
|
102
|
+
}
|
|
103
|
+
|
|
10
104
|
// src/modules/observability/hooks/useFailureTriage.ts
|
|
11
105
|
/**
|
|
12
106
|
* Failure triage (BOFF-3698): the opt-in, the caller's failure clusters and a
|
|
@@ -307,4 +401,4 @@ function FailureTriagePanel({ canManage, canRetry, onOpenRun, onRetry }) {
|
|
|
307
401
|
});
|
|
308
402
|
}
|
|
309
403
|
|
|
310
|
-
export { fetchRunFailureClusters as a, dismissRunFailureCluster as i, FailureTriagePanel as n, OPEN_STATUSES as r, BUCKET_LABELS as t };
|
|
404
|
+
export { fetchRunFailureClusters as a, runListPath as c, dismissRunFailureCluster as i, utcDay as l, FailureTriagePanel as n, runListFilterFromSearch as o, OPEN_STATUSES as r, runListLinkKey as s, BUCKET_LABELS as t };
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
import { t as __exportAll } from "./rolldown-runtime-hDbaFkMy.js";
|
|
3
|
-
import {
|
|
3
|
+
import { Ci as getFluidGridsClientSafe, Di as waitForFluidGridsClient, Ei as setFluidGridsClient, Et as NodeManifestDocument, F as CreateWorkflowVersionDocument, Gi as setFluidGridsConfig, Hn as TriggerWorkflowDocument, Ki as validateTrustedOrigin, Li as throwIfResultError, Mi as emitOperationErrorEvent, Ni as emitRunCompletedOnce, O as CreateWorkflowDefinitionDocument, Oi as createFluidGridsTokenRefreshLink, Pi as describeOperationError, Ri as createLiveTokenReader, Si as getFluidGridsClient, Ti as resetFluidGridsClient, Ui as resetFluidGridsConfig, Vi as getFluidGridsConfig, Vr as WorkflowRunDocument, Wi as resetFluidGridsExecutionState, it as ExecutionDetailDocument, ji as emitFluidGridsEvent, nt as EventRegistrationsDocument, pn as RunFromNodeDocument, rt as ExecuteStepDocument, t as fetchAllNodeEndpointConfigs, tr as UpdateWorkflowDefinitionDocument, xi as createFluidGridsClient, xr as WorkflowDefinitionDocument } from "./node-endpoint-configs-DS59aLlH.js";
|
|
4
4
|
import { A as nodeAccent, C as nodeAdaptersOf, D as NodeCard, E as resolveOutputHandles, H as useFlowStore, I as partitionStickyNotes, L as resolveStickyColor, N as DEFAULT_STICKY_COLOR, O as NodeCardBody, P as STICKY_COLORS, R as stickySurfaceStyle, T as resolveInputHandles, V as STICKY_NOTE_TYPE, W as isNodeTrigger, _ as LogicNodeCard, b as alignPlainOutputEdges, i as WAIT_FOR_SIGNAL_NODE_TYPE, j as NodeTypeIcon, k as NodeCardHeader, 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 InputHandles, w as outputHandlesSpacerHeight, x as hasNodeManifest, y as OutputHandles } from "./node-operation-selection-61d6U9qo.js";
|
|
5
5
|
import { n as FluidGridsTranslationProvider, r as useTr, t as ENGLISH_FALLBACK_TRANSLATOR } from "./TranslationBridge-CX0OMnyn.js";
|
|
6
6
|
import { createContext, memo, useCallback, useContext, useEffect, useMemo, useRef, useState, useSyncExternalStore } from "react";
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
"use client";
|
|
2
|
-
import { d as useRestoreWorkflowVersion, h as useWorkflowDefinitions } from "./useWorkflows-
|
|
3
|
-
import { i as versionsOfWorkflow, t as VersionDiffDialog } from "./VersionDiffDialog-
|
|
2
|
+
import { d as useRestoreWorkflowVersion, h as useWorkflowDefinitions } from "./useWorkflows-B0-aiUr8.js";
|
|
3
|
+
import { i as versionsOfWorkflow, t as VersionDiffDialog } from "./VersionDiffDialog-BEIc5QBh.js";
|
|
4
4
|
import { r as useTr } from "./TranslationBridge-CX0OMnyn.js";
|
|
5
|
-
import {
|
|
5
|
+
import { Vi as getFluidGridsConfig } from "./node-endpoint-configs-DS59aLlH.js";
|
|
6
6
|
import { n as useFluidGridsPageControls } from "./pageControlsBridge-0pX9s-3k.js";
|
|
7
7
|
import { n as historyControls } from "./pageControlSpecs-DZJ9K37m.js";
|
|
8
8
|
import { t as FluidGridsDocsLink } from "./FluidGridsDocsLink-iRiufGc2.js";
|