@burdenoff/fluidgrids-fe-sdk 2026.1114.7 → 2026.1115.2
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-DLl4ld32.js → AiStudioPage-CtHmZ3Lw.js} +4 -4
- package/dist/{DataSinkDashboardPage-Dnp1yRYQ.js → DataSinkDashboardPage-DFtWv2nD.js} +1 -1
- package/dist/{ExecutionDetailPage-DxeySgR3.js → ExecutionDetailPage-C-aY7qWI.js} +116 -21
- package/dist/{ExecutionsListPage-CMrOaFKQ.js → ExecutionsListPage-BYW5WiX7.js} +4 -4
- package/dist/{FluidGridsProvider-C-WGQwuT.js → FluidGridsProvider-CDjkq3Zj.js} +281 -59
- package/dist/{HistoryPage-D4rkw4zu.js → HistoryPage-fMZlXsIY.js} +1 -1
- package/dist/{InsightsPage-CVzNu4F7.js → InsightsPage-DozSYGVD.js} +1 -1
- package/dist/{PaidTemplateConfirm-IWOHVR6s.js → PaidTemplateConfirm-Crs0CXXl.js} +1 -1
- package/dist/{SettingsPage-DwA2ZjyH.js → SettingsPage-qSvV7r0y.js} +3 -3
- package/dist/{TemplateCard-9Beuqm5_.js → TemplateCard-BsrXJ1Su.js} +2 -2
- package/dist/{TemplatePreview-Bi6LSeH8.js → TemplatePreview-BOIhJSBD.js} +4 -4
- package/dist/{TemplatesPage-D9fOKAn4.js → TemplatesPage-dj7NseMt.js} +6 -6
- package/dist/{WorkflowBuilder-CdcGE0Mf.js → WorkflowBuilder-ByG9twmu.js} +5 -5
- package/dist/{WorkflowBuilder-Bzx-e5lX.js → WorkflowBuilder-DjpAoBVO.js} +3 -3
- package/dist/{WorkflowSearchRedirect-0MLrCjDn.js → WorkflowSearchRedirect-DRidTx1L.js} +1 -1
- package/dist/{WorkflowsList-CBqxxI44.js → WorkflowsList-BQ_5hkWi.js} +5 -5
- package/dist/{agentTools-DuCukaUX.js → agentTools-Cx5yPBe7.js} +3 -2
- package/dist/{canvasNoteTools-DnsO-gHe.js → canvasNoteTools-BxknF5rX.js} +1 -1
- package/dist/executions.js +2 -2
- package/dist/{flow-builder-CbF9P7cI.js → flow-builder-D8f31DFR.js} +22 -18
- package/dist/history.js +1 -1
- package/dist/{index-D10JzNP1.d.ts → index-BprVea6e.d.ts} +1 -0
- package/dist/index.d.ts +1 -1
- package/dist/index.js +91 -91
- package/dist/{node-detail-view-CP6sq02c.js → node-detail-view-C__INEVF.js} +4 -4
- package/dist/{node-editor-tab-body-B6kxLf6Q.js → node-editor-tab-body-BintGoSp.js} +2 -2
- package/dist/observability.d.ts +1 -1
- package/dist/observability.js +2 -2
- package/dist/{popover-9gY3-2dY.js → popover-2-6xmS1q.js} +2 -2
- package/dist/{quick-config-panel-TGCW64qe.js → quick-config-panel-Bxi9TwCG.js} +3 -3
- package/dist/{schedule-panel-zrFYGtkx.js → schedule-panel-BbRtGDEt.js} +4 -4
- package/dist/settings.js +1 -1
- package/dist/{sidebar-node-editor-BPg2NKzJ.js → sidebar-node-editor-DG-34YEW.js} +3 -3
- package/dist/templates.js +2 -2
- package/dist/{useAgentDefinitions-9pmnEpb8.js → useAgentDefinitions-YUDx_OW2.js} +1 -1
- package/dist/{useDurableParity-gigqyXDq.js → useDurableParity-X_zfFzQv.js} +1 -1
- package/dist/{useExecutions-wka2Z5w3.js → useExecutions-BWbMt16D.js} +1 -1
- package/dist/{useGlobalStoreClient-BcwWGtm7.js → useGlobalStoreClient-CwBAeiXV.js} +1 -1
- package/dist/{useObservability-CjZTYldC.js → useObservability-mXM7lCop.js} +1 -1
- package/dist/{useRunHistory-Be-GggNA.js → useRunHistory-DYDriBz1.js} +1 -1
- package/dist/{useWorkflowCodeExport-ChAzmhi6.js → useWorkflowCodeExport-uKBDVvnA.js} +1 -1
- package/dist/{useWorkflows-BrqrVT8h.js → useWorkflows-Dg7q_Tzf.js} +1 -1
- package/dist/workflow-builder.js +4 -4
- package/dist/{workflow-description-ReGwCZXS.js → workflow-description-CeXdyWX8.js} +1 -1
- package/dist/workflow-pages.d.ts +1 -1
- package/dist/workflow-pages.js +13 -13
- 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-D8f31DFR.js";
|
|
5
|
+
import { Ct as classifyCreateRefusal, N as buildOperationSeed, St as builderPathOf, d as ensureNodeTypesLoaded } from "./FluidGridsProvider-CDjkq3Zj.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-Dg7q_Tzf.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 { o as CreateWorkflowRefusalDialog } from "./workflow-description-
|
|
12
|
+
import { o as CreateWorkflowRefusalDialog } from "./workflow-description-CeXdyWX8.js";
|
|
13
13
|
import { s as useFluidGridsPermission, t as FLUIDGRIDS_PERMISSIONS } from "./constants-65QV61nQ.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-mXM7lCop.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 activityOptionsFrom, d as errorAdvice, f as needsReconnect, i as useRunPending, l as ConfirmStopRunDialog, m as NodeStatusBadge, n as useDurableParityRunFields, o as ActivityOptionsFields, p as ExecutionStatusBadge, r as useRunMetadata, s as EMPTY_ACTIVITY_OPTIONS_FORM, t as setRunVersioningOverride } from "./useDurableParity-
|
|
3
|
+
import { c as activityOptionsFrom, d as errorAdvice, f as needsReconnect, i as useRunPending, l as ConfirmStopRunDialog, m as NodeStatusBadge, n as useDurableParityRunFields, o as ActivityOptionsFields, p as ExecutionStatusBadge, r as useRunMetadata, s as EMPTY_ACTIVITY_OPTIONS_FORM, t as setRunVersioningOverride } from "./useDurableParity-X_zfFzQv.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 {
|
|
7
|
+
import { A as describeRunError, D as runQuestions, E as isFailedStatus, O as runStepQuestions, T as failureQuestions, an as runDurationMs, in as nodeStateDurationMs, j as describeRunStep, k as describeRun, rn as formatElapsedMs, wn as runSignalTargets, xn as durableInterfaceOf, yn as canSignalRun } from "./FluidGridsProvider-CDjkq3Zj.js";
|
|
8
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-BWbMt16D.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";
|
|
@@ -24,14 +24,14 @@ import { t as useWorkflowProposal } from "./useWorkflowProposal-B9vXLKef.js";
|
|
|
24
24
|
import { t as WorkflowProposalCard } from "./WorkflowProposalCard-SmRv_Egf.js";
|
|
25
25
|
import { t as AiCreditBalanceSlot } from "./aiCreditsBridge-BuE92tKo.js";
|
|
26
26
|
import { a as fetchRunFailureClusters, i as dismissRunFailureCluster, r as OPEN_STATUSES, t as BUCKET_LABELS } from "./FailureTriagePanel-Ddua9uxn.js";
|
|
27
|
-
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 { a as useDurableRunFields, i as useDeterminismStatus, n as SignalRunDialog, o as useRunStackTrace, r as terminateDurableRun, s as RunHistoryView, t as useRunHistory } from "./useRunHistory-DYDriBz1.js";
|
|
28
28
|
import { HI as WorkflowQueryRejectCondition, L as AgentStepKind, SF as VersioningBehavior, Wd as ErrorType, cL as WorkflowUpdateWaitFor } from "./graphql-types-dS3Fk9Z5.js";
|
|
29
29
|
import { _ as agentTokenStreamsFor, g as agentLiveReplyState, h as useAgentTokenStream, i as canSaveRunAsTestCase, t as saveRunAsTestCase } from "./use-workflow-tests-Dkij09vJ.js";
|
|
30
30
|
import { a as formatTokens, d as formatMicroUsd, o as modelLabel, r as aiCost } from "./ai-usage-Dit3U_aG.js";
|
|
31
31
|
import { _ as useWorkflowTestsEnabled, l as useDurableFunctionNodesEnabled, m as usePhaseCFlags, u as useDurableParityEnabled } from "./feature-flags-B_b8PJ6Z.js";
|
|
32
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-o5UUDbr8.js";
|
|
33
33
|
import { a as fetchTaskQueueStats } from "./api-CEzqoN5H.js";
|
|
34
|
-
import { v as useWorkflowVersions } from "./useWorkflows-
|
|
34
|
+
import { v as useWorkflowVersions } from "./useWorkflows-Dg7q_Tzf.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";
|
|
@@ -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$5(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$5(value)) return value;
|
|
1619
1619
|
if (typeof value === "string") {
|
|
1620
1620
|
const parsed = tryParseJson(value);
|
|
1621
|
-
return isRecord$
|
|
1621
|
+
return isRecord$5(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$5(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$5(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$5(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$4(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$4(context)) return null;
|
|
3193
3193
|
const marker = context.concurrency;
|
|
3194
|
-
if (!isRecord$
|
|
3194
|
+
if (!isRecord$4(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 {
|
|
@@ -3309,6 +3309,65 @@ function RulePausedBanner({ nodes }) {
|
|
|
3309
3309
|
});
|
|
3310
3310
|
}
|
|
3311
3311
|
|
|
3312
|
+
// src/modules/executions/components/DelayQueueWaitBanner.tsx
|
|
3313
|
+
/**
|
|
3314
|
+
* "Waiting in queue" on a graph run (BOFF-13002): the Throttle / Rate-limit
|
|
3315
|
+
* Queue nodes parked for their release slot, each with its queue and the time
|
|
3316
|
+
* the slot comes up. The run continues by itself then, so the banner says so
|
|
3317
|
+
* instead of offering Resume (the service refuses a generic resume for a
|
|
3318
|
+
* queued run; clearing the queue's backlog is `resetDelayQueue`).
|
|
3319
|
+
*/
|
|
3320
|
+
function formatSlot(resumeAt) {
|
|
3321
|
+
if (!resumeAt) return null;
|
|
3322
|
+
const date = new Date(resumeAt);
|
|
3323
|
+
return Number.isNaN(date.getTime()) ? null : date.toLocaleString();
|
|
3324
|
+
}
|
|
3325
|
+
function DelayQueueWaitBanner({ waits }) {
|
|
3326
|
+
const tr = useTr();
|
|
3327
|
+
if (waits.length === 0) return null;
|
|
3328
|
+
return /* @__PURE__ */ jsxs("section", {
|
|
3329
|
+
"data-testid": "delay-queue-wait-banner",
|
|
3330
|
+
className: "mb-6 rounded-md border border-[var(--color-status-info-border)] bg-[var(--color-status-info-bg-subtle)] p-3",
|
|
3331
|
+
children: [
|
|
3332
|
+
/* @__PURE__ */ jsxs("div", {
|
|
3333
|
+
className: "mb-2 flex items-center gap-2",
|
|
3334
|
+
children: [/* @__PURE__ */ jsx(Icon, {
|
|
3335
|
+
icon: "mdi:timer-cog-outline",
|
|
3336
|
+
width: 16,
|
|
3337
|
+
className: "text-[var(--color-status-info-text)]"
|
|
3338
|
+
}), /* @__PURE__ */ jsx("h4", {
|
|
3339
|
+
className: "text-sm font-medium text-text-primary",
|
|
3340
|
+
children: tr("fluidgrids.executions.delayQueue.title", "Waiting in a throttle queue")
|
|
3341
|
+
})]
|
|
3342
|
+
}),
|
|
3343
|
+
/* @__PURE__ */ jsx("p", {
|
|
3344
|
+
className: "mb-2 text-sm text-text-secondary",
|
|
3345
|
+
children: tr("fluidgrids.executions.delayQueue.body", "The run continues by itself when its slot comes up, usually within 15 seconds of the time shown. Resetting the queue clears its backlog.")
|
|
3346
|
+
}),
|
|
3347
|
+
/* @__PURE__ */ jsx("ul", {
|
|
3348
|
+
className: "space-y-1",
|
|
3349
|
+
children: waits.map((wait) => {
|
|
3350
|
+
const slot = formatSlot(wait.resumeAt);
|
|
3351
|
+
return /* @__PURE__ */ jsxs("li", {
|
|
3352
|
+
className: "flex flex-wrap items-center gap-2 text-sm",
|
|
3353
|
+
"data-testid": "delay-queue-wait",
|
|
3354
|
+
children: [/* @__PURE__ */ jsx("code", {
|
|
3355
|
+
className: "font-mono text-xs text-text-primary",
|
|
3356
|
+
children: wait.nodeId
|
|
3357
|
+
}), /* @__PURE__ */ jsx("span", {
|
|
3358
|
+
className: "text-text-secondary",
|
|
3359
|
+
children: slot ? tr("fluidgrids.executions.delayQueue.waitingUntil", "Waiting in queue {{queue}} until {{time}}", {
|
|
3360
|
+
queue: wait.queueName,
|
|
3361
|
+
time: slot
|
|
3362
|
+
}) : tr("fluidgrids.executions.delayQueue.waiting", "Waiting in queue {{queue}}", { queue: wait.queueName })
|
|
3363
|
+
})]
|
|
3364
|
+
}, wait.nodeId);
|
|
3365
|
+
})
|
|
3366
|
+
})
|
|
3367
|
+
]
|
|
3368
|
+
});
|
|
3369
|
+
}
|
|
3370
|
+
|
|
3312
3371
|
// src/modules/executions/components/RunBudgetPanel.tsx
|
|
3313
3372
|
/**
|
|
3314
3373
|
* Run detail: the run's AI budget (BOFF-9943).
|
|
@@ -4090,15 +4149,15 @@ function WaitingAtPanel({ trace, loading, error, onRefresh, metadata }) {
|
|
|
4090
4149
|
// src/modules/executions/utils/rule-paused-nodes.ts
|
|
4091
4150
|
/** The waiting marker of a graph node a pause rule holds. */
|
|
4092
4151
|
const RULE_PAUSED_WAIT = "activity_paused";
|
|
4093
|
-
function isRecord$
|
|
4152
|
+
function isRecord$3(value) {
|
|
4094
4153
|
return typeof value === "object" && value !== null && !Array.isArray(value);
|
|
4095
4154
|
}
|
|
4096
|
-
function str(value) {
|
|
4155
|
+
function str$1(value) {
|
|
4097
4156
|
return typeof value === "string" && value.trim() ? value : null;
|
|
4098
4157
|
}
|
|
4099
4158
|
/** Whether a node state is a graph node held by a pause rule. */
|
|
4100
4159
|
function isRulePausedNode(state) {
|
|
4101
|
-
return state.status === "WAITING" && isRecord$
|
|
4160
|
+
return state.status === "WAITING" && isRecord$3(state.output) && state.output._waiting === "activity_paused";
|
|
4102
4161
|
}
|
|
4103
4162
|
/** The held nodes of a run, one entry per node id, in node-state order. */
|
|
4104
4163
|
function rulePausedNodes(nodeStates) {
|
|
@@ -4110,9 +4169,39 @@ function rulePausedNodes(nodeStates) {
|
|
|
4110
4169
|
const output = state.output;
|
|
4111
4170
|
result.push({
|
|
4112
4171
|
nodeId: state.nodeId,
|
|
4113
|
-
ruleId: str(output._pauseRuleId),
|
|
4114
|
-
reason: str(output._pauseReason),
|
|
4115
|
-
pausedAt: str(output._pausedAt)
|
|
4172
|
+
ruleId: str$1(output._pauseRuleId),
|
|
4173
|
+
reason: str$1(output._pauseReason),
|
|
4174
|
+
pausedAt: str$1(output._pausedAt)
|
|
4175
|
+
});
|
|
4176
|
+
}
|
|
4177
|
+
return result;
|
|
4178
|
+
}
|
|
4179
|
+
|
|
4180
|
+
// src/modules/executions/utils/delay-queue-waits.ts
|
|
4181
|
+
/** The waiting marker of a node parked for its queue slot. */
|
|
4182
|
+
const DELAY_QUEUE_WAIT = "delay_queue";
|
|
4183
|
+
function isRecord$2(value) {
|
|
4184
|
+
return typeof value === "object" && value !== null && !Array.isArray(value);
|
|
4185
|
+
}
|
|
4186
|
+
function str(value) {
|
|
4187
|
+
return typeof value === "string" && value.trim() ? value : null;
|
|
4188
|
+
}
|
|
4189
|
+
/** Whether a node state is parked waiting for its queue slot. */
|
|
4190
|
+
function isDelayQueueWait(state) {
|
|
4191
|
+
return state.status === "WAITING" && isRecord$2(state.output) && state.output._waiting === "delay_queue";
|
|
4192
|
+
}
|
|
4193
|
+
/** The queued nodes of a run, one entry per node id, in node-state order. */
|
|
4194
|
+
function delayQueueWaits(nodeStates) {
|
|
4195
|
+
const result = [];
|
|
4196
|
+
const seen = /* @__PURE__ */ new Set();
|
|
4197
|
+
for (const state of nodeStates ?? []) {
|
|
4198
|
+
if (!isDelayQueueWait(state) || seen.has(state.nodeId)) continue;
|
|
4199
|
+
seen.add(state.nodeId);
|
|
4200
|
+
const output = state.output;
|
|
4201
|
+
result.push({
|
|
4202
|
+
nodeId: state.nodeId,
|
|
4203
|
+
queueName: str(output._queueName) ?? "default",
|
|
4204
|
+
resumeAt: str(output._resumeAt)
|
|
4116
4205
|
});
|
|
4117
4206
|
}
|
|
4118
4207
|
return result;
|
|
@@ -8066,7 +8155,12 @@ function ExecutionDetailPage() {
|
|
|
8066
8155
|
execution?.status,
|
|
8067
8156
|
execution?.nodeStates
|
|
8068
8157
|
]);
|
|
8069
|
-
const
|
|
8158
|
+
const queuedForSlot = useMemo(() => !isDurableRun && execution?.status === "WAITING" ? delayQueueWaits(execution.nodeStates) : [], [
|
|
8159
|
+
isDurableRun,
|
|
8160
|
+
execution?.status,
|
|
8161
|
+
execution?.nodeStates
|
|
8162
|
+
]);
|
|
8163
|
+
const offerGenericResume = humanRequestsCurrent && !awaitingPerson && !isDurableRun && !waitingOnSignal && heldByRule.length === 0 && queuedForSlot.length === 0;
|
|
8070
8164
|
const handleControl = async (action) => {
|
|
8071
8165
|
if (!runId) return;
|
|
8072
8166
|
const result = await controlExecution(action, runId);
|
|
@@ -9048,6 +9142,7 @@ function ExecutionDetailPage() {
|
|
|
9048
9142
|
context: execution.context
|
|
9049
9143
|
}),
|
|
9050
9144
|
/* @__PURE__ */ jsx(RulePausedBanner, { nodes: heldByRule }),
|
|
9145
|
+
/* @__PURE__ */ jsx(DelayQueueWaitBanner, { waits: queuedForSlot }),
|
|
9051
9146
|
/* @__PURE__ */ jsx(RunDataPrunedNotice, { dataPrunedAt: execution.dataPrunedAt }),
|
|
9052
9147
|
/* @__PURE__ */ jsx(RunBudgetPanel, { budget: execution.budget }),
|
|
9053
9148
|
/* @__PURE__ */ jsx(ChildRunsPanel, {
|
|
@@ -1,23 +1,23 @@
|
|
|
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, m as overrideRequestOf, 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, m as overrideRequestOf, o as useExecutionsWithStore, r as useExecutionActions, t as useAutoRefresh, u as buildSearchAttributeFilter } from "./useExecutions-BWbMt16D.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 activityOptionsFrom, d as errorAdvice, g as RUN_STATUS_CONFIG, h as runStatusLabels, l as ConfirmStopRunDialog, o as ActivityOptionsFields, p as ExecutionStatusBadge, s as EMPTY_ACTIVITY_OPTIONS_FORM, u as ADVICE_ERROR_TYPES } from "./useDurableParity-
|
|
11
|
+
import { a as useRunStatusCounts, c as activityOptionsFrom, d as errorAdvice, g as RUN_STATUS_CONFIG, h as runStatusLabels, l as ConfirmStopRunDialog, o as ActivityOptionsFields, p as ExecutionStatusBadge, s as EMPTY_ACTIVITY_OPTIONS_FORM, u as ADVICE_ERROR_TYPES } from "./useDurableParity-X_zfFzQv.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 { an as runDurationMs, rn as formatElapsedMs } from "./FluidGridsProvider-CDjkq3Zj.js";
|
|
16
16
|
import { r as useRunHumanRequests } from "./useHumanRequests-DwG2tQ3f.js";
|
|
17
17
|
import { n as runListLinkKey, t as runListFilterFromSearch } from "./run-list-links-CH-V4Li5.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, v as useWorkflowVersions } from "./useWorkflows-
|
|
20
|
+
import { h as useWorkflowDefinitions, v as useWorkflowVersions } from "./useWorkflows-Dg7q_Tzf.js";
|
|
21
21
|
import { t as FluidGridsDocsLink } from "./FluidGridsDocsLink-JxkBpOeb.js";
|
|
22
22
|
import { s as useFluidGridsPermission, t as FLUIDGRIDS_PERMISSIONS } from "./constants-65QV61nQ.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-o5UUDbr8.js";
|