@burdenoff/fluidgrids-fe-sdk 2026.1114.4 → 2026.1114.6
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.
|
@@ -19,6 +19,7 @@ import { t as EntityTagPicker } from "./EntityTagPicker-BppBSEJk.js";
|
|
|
19
19
|
import { a as useRecipientLabel, n as ApprovalApprovers, t as channelLabel } from "./channel-DtF1n_ab.js";
|
|
20
20
|
import { r as useRunHumanRequests } from "./useHumanRequests-DwG2tQ3f.js";
|
|
21
21
|
import { a as encodedPayloadBytes, f as EffectBadge, h as useRunPolicyDecisions, i as decodePayloads, l as formatBudgetUsd, n as checkCodecServerUrl, o as isEncodedPayload, r as containsEncodedPayload, t as CodecServerError } from "./codec-client-CAYl6j46.js";
|
|
22
|
+
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";
|
|
22
23
|
import { t as useWorkflowProposal } from "./useWorkflowProposal-B9vXLKef.js";
|
|
23
24
|
import { t as WorkflowProposalCard } from "./WorkflowProposalCard-SmRv_Egf.js";
|
|
24
25
|
import { t as AiCreditBalanceSlot } from "./aiCreditsBridge-BuE92tKo.js";
|
|
@@ -30,7 +31,6 @@ import { a as formatTokens, d as formatMicroUsd, o as modelLabel, r as aiCost }
|
|
|
30
31
|
import { _ as useWorkflowTestsEnabled, l as useDurableFunctionNodesEnabled, m as usePhaseCFlags, u as useDurableParityEnabled } from "./feature-flags-B_b8PJ6Z.js";
|
|
31
32
|
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
33
|
import { a as fetchTaskQueueStats } from "./api-DKfMt0IX.js";
|
|
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
34
|
import { v as useWorkflowVersions } from "./useWorkflows-BrqrVT8h.js";
|
|
35
35
|
import { useCallback, useEffect, useMemo, useRef, useState } from "react";
|
|
36
36
|
import { Link, useNavigate, useParams, useSearchParams } from "react-router";
|
|
@@ -1611,14 +1611,14 @@ function RunHumanRequestRow({ request, plain }) {
|
|
|
1611
1611
|
* instead of `steps`. Output is free-form JSON, so every read is defensive:
|
|
1612
1612
|
* a field of an unexpected shape is skipped, never thrown on.
|
|
1613
1613
|
*/
|
|
1614
|
-
function isRecord$
|
|
1614
|
+
function isRecord$4(value) {
|
|
1615
1615
|
return typeof value === "object" && value !== null && !Array.isArray(value);
|
|
1616
1616
|
}
|
|
1617
1617
|
function asRecord(value) {
|
|
1618
|
-
if (isRecord$
|
|
1618
|
+
if (isRecord$4(value)) return value;
|
|
1619
1619
|
if (typeof value === "string") {
|
|
1620
1620
|
const parsed = tryParseJson(value);
|
|
1621
|
-
return isRecord$
|
|
1621
|
+
return isRecord$4(parsed) ? parsed : null;
|
|
1622
1622
|
}
|
|
1623
1623
|
return null;
|
|
1624
1624
|
}
|
|
@@ -1680,7 +1680,7 @@ function classifyObservation(observation) {
|
|
|
1680
1680
|
};
|
|
1681
1681
|
}
|
|
1682
1682
|
function toStep(raw, index) {
|
|
1683
|
-
if (!isRecord$
|
|
1683
|
+
if (!isRecord$4(raw)) return null;
|
|
1684
1684
|
const tool = stringOrNull(raw.tool) ?? stringOrNull(raw.toolName) ?? stringOrNull(raw.action) ?? stringOrNull(raw.name);
|
|
1685
1685
|
if (!tool) return null;
|
|
1686
1686
|
const observationRaw = raw.observation ?? raw.output ?? raw.result;
|
|
@@ -1709,7 +1709,7 @@ function toPendingApprovals(raw) {
|
|
|
1709
1709
|
if (!Array.isArray(raw)) return [];
|
|
1710
1710
|
const pending = [];
|
|
1711
1711
|
for (const item of raw) {
|
|
1712
|
-
if (!isRecord$
|
|
1712
|
+
if (!isRecord$4(item)) continue;
|
|
1713
1713
|
const tool = stringOrNull(item.name) ?? stringOrNull(item.tool);
|
|
1714
1714
|
if (!tool) continue;
|
|
1715
1715
|
const callId = stringOrNull(item.id) ?? stringOrNull(item.callId);
|
|
@@ -1731,7 +1731,7 @@ const PAYLOAD_KEYS = [
|
|
|
1731
1731
|
"intermediateSteps"
|
|
1732
1732
|
];
|
|
1733
1733
|
function looksLikeAgentPayload(value) {
|
|
1734
|
-
return isRecord$
|
|
1734
|
+
return isRecord$4(value) && PAYLOAD_KEYS.some((key) => key in value);
|
|
1735
1735
|
}
|
|
1736
1736
|
/**
|
|
1737
1737
|
* The agent payload inside a node output: the output itself when it carries
|
|
@@ -3181,7 +3181,7 @@ function RunDataPrunedNotice({ dataPrunedAt }) {
|
|
|
3181
3181
|
}
|
|
3182
3182
|
|
|
3183
3183
|
// src/modules/executions/utils/run-queue-marker.ts
|
|
3184
|
-
function isRecord$
|
|
3184
|
+
function isRecord$3(value) {
|
|
3185
3185
|
return typeof value === "object" && value !== null && !Array.isArray(value);
|
|
3186
3186
|
}
|
|
3187
3187
|
function isRunQueueScope(value) {
|
|
@@ -3189,9 +3189,9 @@ function isRunQueueScope(value) {
|
|
|
3189
3189
|
}
|
|
3190
3190
|
/** The queue marker on a run's context, or null when there is none or it is malformed. */
|
|
3191
3191
|
function readRunQueueMarker(context) {
|
|
3192
|
-
if (!isRecord$
|
|
3192
|
+
if (!isRecord$3(context)) return null;
|
|
3193
3193
|
const marker = context.concurrency;
|
|
3194
|
-
if (!isRecord$
|
|
3194
|
+
if (!isRecord$3(marker)) return null;
|
|
3195
3195
|
const { queuedAt, checkedAt, limit, active, position, scope } = marker;
|
|
3196
3196
|
if (typeof queuedAt !== "string" || typeof checkedAt !== "string" || typeof limit !== "number" || typeof active !== "number" || typeof position !== "number" || scope !== void 0 && !isRunQueueScope(scope)) return null;
|
|
3197
3197
|
return {
|
|
@@ -3250,6 +3250,65 @@ function RunQueuedBanner({ status, context }) {
|
|
|
3250
3250
|
});
|
|
3251
3251
|
}
|
|
3252
3252
|
|
|
3253
|
+
// src/modules/executions/components/RulePausedBanner.tsx
|
|
3254
|
+
/**
|
|
3255
|
+
* *Paused by rule* on a graph run (BOFF-13553, spec code-first 11 §2.28,
|
|
3256
|
+
* HC5): the nodes an activity pause rule holds, each with the rule's reason.
|
|
3257
|
+
* The run continues by itself once the rule is deleted or expires, so the
|
|
3258
|
+
* banner says so instead of offering Resume (the service refuses a generic
|
|
3259
|
+
* resume for a held node).
|
|
3260
|
+
*/
|
|
3261
|
+
function RulePausedBanner({ nodes }) {
|
|
3262
|
+
const tr = useTr();
|
|
3263
|
+
if (nodes.length === 0) return null;
|
|
3264
|
+
return /* @__PURE__ */ jsxs("section", {
|
|
3265
|
+
"data-testid": "rule-paused-banner",
|
|
3266
|
+
className: "mb-6 rounded-md border border-[var(--color-status-warning-border)] bg-[var(--color-status-warning-bg-subtle)] p-3",
|
|
3267
|
+
children: [
|
|
3268
|
+
/* @__PURE__ */ jsxs("div", {
|
|
3269
|
+
className: "mb-2 flex items-center gap-2",
|
|
3270
|
+
children: [/* @__PURE__ */ jsx(Icon, {
|
|
3271
|
+
icon: "mdi:pause-octagon-outline",
|
|
3272
|
+
width: 16,
|
|
3273
|
+
className: "text-[var(--color-status-warning-text)]"
|
|
3274
|
+
}), /* @__PURE__ */ jsx("h4", {
|
|
3275
|
+
className: "text-sm font-medium text-text-primary",
|
|
3276
|
+
children: tr("fluidgrids.executions.rulePaused.title", "Held by a pause rule")
|
|
3277
|
+
})]
|
|
3278
|
+
}),
|
|
3279
|
+
/* @__PURE__ */ jsx("p", {
|
|
3280
|
+
className: "mb-2 text-sm text-text-secondary",
|
|
3281
|
+
children: tr("fluidgrids.executions.rulePaused.body", "A workspace pause rule holds these steps. The run continues by itself when the rule is deleted or expires (Settings → Execution → Pause rules).")
|
|
3282
|
+
}),
|
|
3283
|
+
/* @__PURE__ */ jsx("ul", {
|
|
3284
|
+
className: "space-y-1",
|
|
3285
|
+
children: nodes.map((node) => /* @__PURE__ */ jsxs("li", {
|
|
3286
|
+
className: "flex flex-wrap items-center gap-2 text-sm",
|
|
3287
|
+
"data-testid": "rule-paused-node",
|
|
3288
|
+
children: [
|
|
3289
|
+
/* @__PURE__ */ jsx("code", {
|
|
3290
|
+
className: "font-mono text-xs text-text-primary",
|
|
3291
|
+
children: node.nodeId
|
|
3292
|
+
}),
|
|
3293
|
+
/* @__PURE__ */ jsx("span", {
|
|
3294
|
+
title: node.reason ?? void 0,
|
|
3295
|
+
children: /* @__PURE__ */ jsx(StatusPill, {
|
|
3296
|
+
tone: "warning",
|
|
3297
|
+
testId: "node-paused-by-rule",
|
|
3298
|
+
children: tr("fluidgrids.runControl.activities.pausedByRule", "Paused by rule")
|
|
3299
|
+
})
|
|
3300
|
+
}),
|
|
3301
|
+
node.reason && /* @__PURE__ */ jsx("span", {
|
|
3302
|
+
className: "text-xs text-text-secondary",
|
|
3303
|
+
children: node.reason
|
|
3304
|
+
})
|
|
3305
|
+
]
|
|
3306
|
+
}, node.nodeId))
|
|
3307
|
+
})
|
|
3308
|
+
]
|
|
3309
|
+
});
|
|
3310
|
+
}
|
|
3311
|
+
|
|
3253
3312
|
// src/modules/executions/components/RunBudgetPanel.tsx
|
|
3254
3313
|
/**
|
|
3255
3314
|
* Run detail: the run's AI budget (BOFF-9943).
|
|
@@ -4028,6 +4087,37 @@ function WaitingAtPanel({ trace, loading, error, onRefresh, metadata }) {
|
|
|
4028
4087
|
});
|
|
4029
4088
|
}
|
|
4030
4089
|
|
|
4090
|
+
// src/modules/executions/utils/rule-paused-nodes.ts
|
|
4091
|
+
/** The waiting marker of a graph node a pause rule holds. */
|
|
4092
|
+
const RULE_PAUSED_WAIT = "activity_paused";
|
|
4093
|
+
function isRecord$2(value) {
|
|
4094
|
+
return typeof value === "object" && value !== null && !Array.isArray(value);
|
|
4095
|
+
}
|
|
4096
|
+
function str(value) {
|
|
4097
|
+
return typeof value === "string" && value.trim() ? value : null;
|
|
4098
|
+
}
|
|
4099
|
+
/** Whether a node state is a graph node held by a pause rule. */
|
|
4100
|
+
function isRulePausedNode(state) {
|
|
4101
|
+
return state.status === "WAITING" && isRecord$2(state.output) && state.output._waiting === "activity_paused";
|
|
4102
|
+
}
|
|
4103
|
+
/** The held nodes of a run, one entry per node id, in node-state order. */
|
|
4104
|
+
function rulePausedNodes(nodeStates) {
|
|
4105
|
+
const result = [];
|
|
4106
|
+
const seen = /* @__PURE__ */ new Set();
|
|
4107
|
+
for (const state of nodeStates ?? []) {
|
|
4108
|
+
if (!isRulePausedNode(state) || seen.has(state.nodeId)) continue;
|
|
4109
|
+
seen.add(state.nodeId);
|
|
4110
|
+
const output = state.output;
|
|
4111
|
+
result.push({
|
|
4112
|
+
nodeId: state.nodeId,
|
|
4113
|
+
ruleId: str(output._pauseRuleId),
|
|
4114
|
+
reason: str(output._pauseReason),
|
|
4115
|
+
pausedAt: str(output._pausedAt)
|
|
4116
|
+
});
|
|
4117
|
+
}
|
|
4118
|
+
return result;
|
|
4119
|
+
}
|
|
4120
|
+
|
|
4031
4121
|
// src/modules/executions/utils/detail-tab.ts
|
|
4032
4122
|
function resolveDetailTab(selection, runId, available, fallback) {
|
|
4033
4123
|
if (selection.runId !== runId) return fallback;
|
|
@@ -6963,6 +7053,82 @@ function EncodedPayloadChip({ payload, codecServer, fetchImpl }) {
|
|
|
6963
7053
|
});
|
|
6964
7054
|
}
|
|
6965
7055
|
|
|
7056
|
+
// src/modules/run-control/components/ArchivedRunView.tsx
|
|
7057
|
+
function ArchivedRunView({ runId, enabled, fallback, backLink, onViewChildRun }) {
|
|
7058
|
+
const tr = useTr();
|
|
7059
|
+
const archive = useResource(`archived-run:${runId}`, enabled, () => fetchRunHistoryArchive(runId));
|
|
7060
|
+
const archived = archive.data?.archived === true;
|
|
7061
|
+
const history = useRunHistory(runId, {
|
|
7062
|
+
enabled: archived,
|
|
7063
|
+
live: false
|
|
7064
|
+
});
|
|
7065
|
+
if (!enabled) return /* @__PURE__ */ jsx(Fragment$1, { children: fallback });
|
|
7066
|
+
if (!archive.data && !archive.error) return /* @__PURE__ */ jsxs("div", {
|
|
7067
|
+
className: "animate-pulse p-4 sm:p-6",
|
|
7068
|
+
"data-testid": "archived-run-loading",
|
|
7069
|
+
"aria-busy": "true",
|
|
7070
|
+
children: [/* @__PURE__ */ jsx("div", { className: "mb-4 h-8 w-48 rounded bg-surface-sunken" }), /* @__PURE__ */ jsx("div", { className: "h-64 rounded-lg bg-surface-sunken" })]
|
|
7071
|
+
});
|
|
7072
|
+
if (!archived) return /* @__PURE__ */ jsx(Fragment$1, { children: fallback });
|
|
7073
|
+
const ref = archive.data?.archiveRef ?? tr("fluidgrids.runControl.archive.unknownRef", "the workspace's archive bucket");
|
|
7074
|
+
const archivedCount = archive.data?.historyLength ?? 0;
|
|
7075
|
+
const unreadable = !history.loading && !history.error && history.events.length === 0 && archivedCount > 0;
|
|
7076
|
+
return /* @__PURE__ */ jsxs("div", {
|
|
7077
|
+
className: "space-y-4 p-4 sm:p-6",
|
|
7078
|
+
"data-testid": "archived-run",
|
|
7079
|
+
children: [
|
|
7080
|
+
backLink,
|
|
7081
|
+
/* @__PURE__ */ jsxs("div", {
|
|
7082
|
+
className: "flex flex-wrap items-center gap-2",
|
|
7083
|
+
children: [/* @__PURE__ */ jsx("h1", {
|
|
7084
|
+
className: "font-mono text-lg font-semibold text-text-primary",
|
|
7085
|
+
children: runId
|
|
7086
|
+
}), /* @__PURE__ */ jsxs("span", {
|
|
7087
|
+
className: "inline-flex items-center gap-1 rounded-full border border-border-default bg-surface-elevated px-2 py-0.5 text-xs text-text-secondary",
|
|
7088
|
+
children: [/* @__PURE__ */ jsx(Icon, {
|
|
7089
|
+
icon: "mdi:archive-outline",
|
|
7090
|
+
width: 14
|
|
7091
|
+
}), tr("fluidgrids.runControl.archive.badge", "Archived")]
|
|
7092
|
+
})]
|
|
7093
|
+
}),
|
|
7094
|
+
/* @__PURE__ */ jsxs("div", {
|
|
7095
|
+
role: "status",
|
|
7096
|
+
className: "flex items-start gap-2 rounded-md border border-border-default bg-surface-elevated p-3 text-sm text-text-primary",
|
|
7097
|
+
"data-testid": "run-archived",
|
|
7098
|
+
children: [/* @__PURE__ */ jsx(Icon, {
|
|
7099
|
+
icon: "mdi:archive-outline",
|
|
7100
|
+
width: 18,
|
|
7101
|
+
className: "mt-0.5 shrink-0 text-text-secondary"
|
|
7102
|
+
}), /* @__PURE__ */ jsx("span", { children: tr("fluidgrids.runControl.archive.readBack", "Retention purged this run after archiving it to {{ref}}. Its history below is read back from the archive.", { ref }) })]
|
|
7103
|
+
}),
|
|
7104
|
+
unreadable ? /* @__PURE__ */ jsxs("div", {
|
|
7105
|
+
role: "alert",
|
|
7106
|
+
className: "flex items-start gap-2 rounded-md border border-status-warning-border bg-status-warning-bg-subtle p-3 text-sm text-status-warning-text",
|
|
7107
|
+
"data-testid": "archived-run-unreadable",
|
|
7108
|
+
children: [/* @__PURE__ */ jsx(Icon, {
|
|
7109
|
+
icon: "mdi:lock-outline",
|
|
7110
|
+
width: 18,
|
|
7111
|
+
className: "mt-0.5 shrink-0"
|
|
7112
|
+
}), /* @__PURE__ */ jsx("span", { children: tr("fluidgrids.runControl.archive.unreadable", "{{count}} events were archived, but they could not be read back. Allow s3:GetObject on the archive prefix to the archive role, or read the files in {{ref}} directly.", {
|
|
7113
|
+
count: archivedCount,
|
|
7114
|
+
ref
|
|
7115
|
+
}) })]
|
|
7116
|
+
}) : /* @__PURE__ */ jsx(RunHistoryView, {
|
|
7117
|
+
events: history.events,
|
|
7118
|
+
loading: history.loading,
|
|
7119
|
+
error: history.error,
|
|
7120
|
+
active: false,
|
|
7121
|
+
streaming: false,
|
|
7122
|
+
truncated: history.truncated,
|
|
7123
|
+
historyLength: history.historyLength,
|
|
7124
|
+
onRefresh: () => void history.refetch(),
|
|
7125
|
+
onViewChildRun,
|
|
7126
|
+
"data-testid": "archived-run-history"
|
|
7127
|
+
})
|
|
7128
|
+
]
|
|
7129
|
+
});
|
|
7130
|
+
}
|
|
7131
|
+
|
|
6966
7132
|
// src/modules/run-control/components/RunArchivedNotice.tsx
|
|
6967
7133
|
/**
|
|
6968
7134
|
* A run whose history was archived to the workspace's bucket and then purged
|
|
@@ -7895,6 +8061,12 @@ function ExecutionDetailPage() {
|
|
|
7895
8061
|
}, [durableEnabled, execution]);
|
|
7896
8062
|
const canSendSignal = canControlRuns && canSignalRun(signalTargets);
|
|
7897
8063
|
const waitingOnSignal = !isDurableRun && signalTargets.targets.some((target) => !!target.nodeId);
|
|
8064
|
+
const heldByRule = useMemo(() => !isDurableRun && execution?.status === "WAITING" ? rulePausedNodes(execution.nodeStates) : [], [
|
|
8065
|
+
isDurableRun,
|
|
8066
|
+
execution?.status,
|
|
8067
|
+
execution?.nodeStates
|
|
8068
|
+
]);
|
|
8069
|
+
const offerGenericResume = humanRequestsCurrent && !awaitingPerson && !isDurableRun && !waitingOnSignal && heldByRule.length === 0;
|
|
7898
8070
|
const handleControl = async (action) => {
|
|
7899
8071
|
if (!runId) return;
|
|
7900
8072
|
const result = await controlExecution(action, runId);
|
|
@@ -8035,43 +8207,60 @@ function ExecutionDetailPage() {
|
|
|
8035
8207
|
]
|
|
8036
8208
|
})]
|
|
8037
8209
|
});
|
|
8038
|
-
if (!execution)
|
|
8039
|
-
|
|
8040
|
-
|
|
8041
|
-
|
|
8042
|
-
|
|
8043
|
-
|
|
8044
|
-
|
|
8045
|
-
|
|
8046
|
-
|
|
8047
|
-
|
|
8048
|
-
|
|
8049
|
-
|
|
8050
|
-
|
|
8051
|
-
|
|
8052
|
-
|
|
8053
|
-
|
|
8054
|
-
|
|
8055
|
-
|
|
8056
|
-
|
|
8057
|
-
|
|
8058
|
-
|
|
8059
|
-
|
|
8060
|
-
|
|
8061
|
-
|
|
8062
|
-
|
|
8063
|
-
|
|
8064
|
-
|
|
8065
|
-
|
|
8066
|
-
|
|
8067
|
-
|
|
8068
|
-
|
|
8069
|
-
|
|
8070
|
-
|
|
8071
|
-
|
|
8072
|
-
|
|
8073
|
-
|
|
8074
|
-
|
|
8210
|
+
if (!execution) {
|
|
8211
|
+
const notFound = /* @__PURE__ */ jsxs("div", {
|
|
8212
|
+
className: "p-4 sm:p-6 bg-surface-canvas min-h-screen",
|
|
8213
|
+
children: [/* @__PURE__ */ jsxs(Link, {
|
|
8214
|
+
to: "../runs",
|
|
8215
|
+
className: "text-text-link hover:text-text-linkHover hover:underline text-sm mb-4 inline-block",
|
|
8216
|
+
children: [
|
|
8217
|
+
"←",
|
|
8218
|
+
" ",
|
|
8219
|
+
tr("fluidgrids.executions.executionDetail.backToExecutions", "Back to Executions")
|
|
8220
|
+
]
|
|
8221
|
+
}), /* @__PURE__ */ jsxs("div", {
|
|
8222
|
+
className: "bg-surface border border-border-default rounded-lg p-6 text-center",
|
|
8223
|
+
children: [
|
|
8224
|
+
/* @__PURE__ */ jsx(Icon, {
|
|
8225
|
+
icon: "mdi:file-find-outline",
|
|
8226
|
+
className: "mx-auto text-text-secondary mb-4",
|
|
8227
|
+
width: 48
|
|
8228
|
+
}),
|
|
8229
|
+
/* @__PURE__ */ jsx("h2", {
|
|
8230
|
+
className: "text-lg font-medium text-text-primary mb-2",
|
|
8231
|
+
children: tr("fluidgrids.executions.executionDetail.notFoundTitle", "Execution not found")
|
|
8232
|
+
}),
|
|
8233
|
+
/* @__PURE__ */ jsxs("p", {
|
|
8234
|
+
className: "text-text-secondary",
|
|
8235
|
+
children: [
|
|
8236
|
+
tr("fluidgrids.executions.executionDetail.notFoundDescriptionPrefix", "The execution with ID"),
|
|
8237
|
+
" ",
|
|
8238
|
+
"\"",
|
|
8239
|
+
runId,
|
|
8240
|
+
"\"",
|
|
8241
|
+
" ",
|
|
8242
|
+
tr("fluidgrids.executions.executionDetail.notFoundDescriptionSuffix", "could not be found.")
|
|
8243
|
+
]
|
|
8244
|
+
})
|
|
8245
|
+
]
|
|
8246
|
+
})]
|
|
8247
|
+
});
|
|
8248
|
+
return /* @__PURE__ */ jsx(ArchivedRunView, {
|
|
8249
|
+
runId: runId ?? "",
|
|
8250
|
+
enabled: phaseC.runArchival && !!runId,
|
|
8251
|
+
fallback: notFound,
|
|
8252
|
+
backLink: /* @__PURE__ */ jsxs(Link, {
|
|
8253
|
+
to: "../runs",
|
|
8254
|
+
className: "text-text-link hover:text-text-linkHover hover:underline text-sm inline-block",
|
|
8255
|
+
children: [
|
|
8256
|
+
"←",
|
|
8257
|
+
" ",
|
|
8258
|
+
tr("fluidgrids.executions.executionDetail.backToExecutions", "Back to Executions")
|
|
8259
|
+
]
|
|
8260
|
+
}),
|
|
8261
|
+
onViewChildRun: handleViewChildRun
|
|
8262
|
+
});
|
|
8263
|
+
}
|
|
8075
8264
|
const tabs = [
|
|
8076
8265
|
{
|
|
8077
8266
|
id: "timeline",
|
|
@@ -8584,7 +8773,7 @@ function ExecutionDetailPage() {
|
|
|
8584
8773
|
}), tr("fluidgrids.executions.executionDetail.cancelButton", "Cancel")]
|
|
8585
8774
|
})] }),
|
|
8586
8775
|
canControlRuns && execution.status === "WAITING" && /* @__PURE__ */ jsxs(Fragment$1, { children: [
|
|
8587
|
-
|
|
8776
|
+
offerGenericResume && /* @__PURE__ */ jsxs(Button$1, {
|
|
8588
8777
|
"data-agent": "confirm",
|
|
8589
8778
|
variant: "outline",
|
|
8590
8779
|
size: "sm",
|
|
@@ -8858,6 +9047,7 @@ function ExecutionDetailPage() {
|
|
|
8858
9047
|
status: execution.status,
|
|
8859
9048
|
context: execution.context
|
|
8860
9049
|
}),
|
|
9050
|
+
/* @__PURE__ */ jsx(RulePausedBanner, { nodes: heldByRule }),
|
|
8861
9051
|
/* @__PURE__ */ jsx(RunDataPrunedNotice, { dataPrunedAt: execution.dataPrunedAt }),
|
|
8862
9052
|
/* @__PURE__ */ jsx(RunBudgetPanel, { budget: execution.budget }),
|
|
8863
9053
|
/* @__PURE__ */ jsx(ChildRunsPanel, {
|
package/dist/executions.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
import { t as ExecutionsListPage } from "./ExecutionsListPage-Ky3TAL9U.js";
|
|
3
|
-
import { t as ExecutionDetailPage } from "./ExecutionDetailPage-
|
|
3
|
+
import { t as ExecutionDetailPage } from "./ExecutionDetailPage-B-8s_Sqw.js";
|
|
4
4
|
|
|
5
5
|
export { ExecutionDetailPage, ExecutionsListPage };
|
package/dist/index.js
CHANGED
|
@@ -15,7 +15,7 @@ import { _ as WorkflowRunsCountDocument, b as DurableParityRunFieldsDocument, v
|
|
|
15
15
|
import { c as RunEventAppendedDocument, d as WorkflowRunDeterminismStatusDocument, f as DurableRunFieldsDocument, l as WorkflowRunStackTraceDocument, m as SignalWorkflowRunDocument, p as TerminateWorkflowRunDocument, u as WorkflowRunHistoryDocument } from "./useRunHistory-Be-GggNA.js";
|
|
16
16
|
import { a as getGraphQLEndpoint, c as setFluidGridsConfig, d as applyFluidGridsTheme, f as sanitizeThemeValue, m as themeToCssVariables, o as resetFluidGridsConfig, p as themeKey, r as getFluidGridsConfig, s as resetFluidGridsExecutionState, t as config, u as FLUIDGRIDS_THEME_TOKEN_MAP } from "./config-X97zrIvn.js";
|
|
17
17
|
import { r as WorkflowBatchOperationUpdatedDocument, t as ExecutionsListPage } from "./ExecutionsListPage-Ky3TAL9U.js";
|
|
18
|
-
import { a as AgentStepUpdatedDocument, c as AgentTraceDocument, i as ExplainRunDocument, o as WorkflowRunHierarchyDocument, r as RunHumanRequests, s as RunAiUsageDocument, t as ExecutionDetailPage } from "./ExecutionDetailPage-
|
|
18
|
+
import { a as AgentStepUpdatedDocument, c as AgentTraceDocument, i as ExplainRunDocument, o as WorkflowRunHierarchyDocument, r as RunHumanRequests, s as RunAiUsageDocument, t as ExecutionDetailPage } from "./ExecutionDetailPage-B-8s_Sqw.js";
|
|
19
19
|
import { i as FileDownloadUrlDocument, n as WorkflowCodeSourceDocument, r as BuildWorkflowCodeDocument, t as WorkflowEditLeaseStatusDocument } from "./WorkflowEditLeaseStatusDocument-Dp62med3.js";
|
|
20
20
|
import { c as RunLogAppendedDocument, l as RunLogsDocument } from "./agent-form-D0uLvzx4.js";
|
|
21
21
|
import { C as CreateWorkflowTestCaseFromRunDocument, D as AgentTokenDeltaDocument, E as CreateWorkflowTestCaseDocument, S as RunWorkflowTestsDocument, T as UpdateWorkflowTestCaseDocument, b as WorkflowTestRunDocument, w as DeleteWorkflowTestCaseDocument, x as WorkflowTestCasesDocument, y as WorkflowTestRunsDocument } from "./use-workflow-tests-Dkij09vJ.js";
|
|
@@ -5254,7 +5254,7 @@ const FluidgridsAvailableTagFieldsFragmentDoc = {
|
|
|
5254
5254
|
const WorkflowsList$1 = lazy(() => import("./WorkflowsList-4VADoiz_.js").then((n) => n.n).then((m) => ({ default: m.WorkflowsList })));
|
|
5255
5255
|
const WorkflowBuilder$2 = lazy(() => import("./WorkflowBuilder-DkzzbrNn.js").then((n) => n.n).then((m) => ({ default: m.WorkflowBuilder })));
|
|
5256
5256
|
const ExecutionsListPage$1 = lazy(() => import("./ExecutionsListPage-Ky3TAL9U.js").then((n) => n.n).then((m) => ({ default: m.ExecutionsListPage })));
|
|
5257
|
-
const ExecutionDetailPage$1 = lazy(() => import("./ExecutionDetailPage-
|
|
5257
|
+
const ExecutionDetailPage$1 = lazy(() => import("./ExecutionDetailPage-B-8s_Sqw.js").then((n) => n.n).then((m) => ({ default: m.ExecutionDetailPage })));
|
|
5258
5258
|
const PageLoader = () => /* @__PURE__ */ jsx("div", {
|
|
5259
5259
|
className: "flex items-center justify-center h-64",
|
|
5260
5260
|
children: /* @__PURE__ */ jsx("div", { className: "animate-spin rounded-full h-8 w-8 border-b-2 border-primary" })
|
package/dist/workflow-pages.d.ts
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
|
|
2
2
|
import { n as WorkflowsList_d_exports } from "./WorkflowsList-CcNDQge5.js";
|
|
3
|
-
import { Da as VariablesPage_d_exports, Pi as ApprovalInboxPage_d_exports, QRa as InsightsPage_d_exports, Wi as TaskQueuesPage_d_exports, ZRa as InsightsPageProps, bza as AiStudioPage_d_exports, di as DataTablesPage_d_exports, eza as DataSinkDashboardPage_d_exports, ra as RunnersPage_d_exports } from "./index-BY0V255h.js";
|
|
4
3
|
import { a as WorkflowSearchRedirect_d_exports, o as WorkflowBuilder } from "./index-RWAuYE2j.js";
|
|
5
4
|
import { i as TemplatePreview_d_exports, n as TemplatesPage_d_exports } from "./TemplatesPage-BG3H-6v6.js";
|
|
5
|
+
import { Da as VariablesPage_d_exports, Pi as ApprovalInboxPage_d_exports, QRa as InsightsPage_d_exports, Wi as TaskQueuesPage_d_exports, ZRa as InsightsPageProps, bza as AiStudioPage_d_exports, di as DataTablesPage_d_exports, eza as DataSinkDashboardPage_d_exports, ra as RunnersPage_d_exports } from "./index-BY0V255h.js";
|
|
6
6
|
import { i as ExecutionsListPage_d_exports, n as ExecutionDetailPage_d_exports } from "./ExecutionDetailPage-DvQ667OE.js";
|
|
7
7
|
import { n as HistoryPage_d_exports } from "./HistoryPage-BLoRpJ1R.js";
|
|
8
8
|
import { n as NodesPage_d_exports } from "./NodesPage-DEbnz9iU.js";
|
package/dist/workflow-pages.js
CHANGED
|
@@ -60,7 +60,7 @@ const pages = createWorkflowPages({
|
|
|
60
60
|
TemplatePreview: () => import("./TemplatePreview-DwdGa8bH.js").then((n) => n.n),
|
|
61
61
|
AiStudioPage: () => import("./AiStudioPage-C2SBRqab.js").then((n) => n.n),
|
|
62
62
|
ExecutionsListPage: () => import("./ExecutionsListPage-Ky3TAL9U.js").then((n) => n.n),
|
|
63
|
-
ExecutionDetailPage: () => import("./ExecutionDetailPage-
|
|
63
|
+
ExecutionDetailPage: () => import("./ExecutionDetailPage-B-8s_Sqw.js").then((n) => n.n),
|
|
64
64
|
HistoryPage: () => import("./HistoryPage-D4rkw4zu.js").then((n) => n.n),
|
|
65
65
|
TemplatesPage: () => import("./TemplatesPage-DF5PK7CB.js").then((n) => n.n),
|
|
66
66
|
NodesPage: () => import("./NodesPage-C3sh0aL9.js").then((n) => n.n),
|