@burdenoff/fluidgrids-fe-sdk 2026.1115.1 → 2026.1115.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.
Files changed (62) hide show
  1. package/dist/{AiStudioPage-CtHmZ3Lw.js → AiStudioPage-CRgw_P7Y.js} +4 -4
  2. package/dist/{DataSinkDashboardPage-DFtWv2nD.js → DataSinkDashboardPage-C2Lb5c7p.js} +2 -2
  3. package/dist/{ExecutionDetailPage-D5iWwMnk.js → ExecutionDetailPage-72GPEmJf.js} +120 -25
  4. package/dist/{ExecutionsListPage-BYW5WiX7.js → ExecutionsListPage-sdpULJ-y.js} +6 -6
  5. package/dist/{FailureTriagePanel-Ddua9uxn.js → FailureTriagePanel-Chvh8S_q.js} +1 -1
  6. package/dist/{FluidGridsProvider-CDjkq3Zj.js → FluidGridsProvider-64qAUX4Y.js} +1 -1
  7. package/dist/{HistoryPage-fMZlXsIY.js → HistoryPage-DDIwBAsG.js} +1 -1
  8. package/dist/{InsightsPage-DozSYGVD.js → InsightsPage-Dw2ElMGW.js} +1005 -14
  9. package/dist/{OpenTemplateAsCodeButton-Cjnagq9H.js → OpenTemplateAsCodeButton-DCEbeUb5.js} +2 -2
  10. package/dist/{PaidTemplateConfirm-Crs0CXXl.js → PaidTemplateConfirm-B3R-JvoA.js} +1 -1
  11. package/dist/{SettingsPage-qSvV7r0y.js → SettingsPage-Drgu5p5s.js} +5 -5
  12. package/dist/{TaskQueuesPage-BuWQwT5I.js → TaskQueuesPage-9MpmiHvJ.js} +1 -1
  13. package/dist/{TemplateCard-BsrXJ1Su.js → TemplateCard-CA4tMUzN.js} +4 -4
  14. package/dist/{TemplateConfigurationModal-B_ME8M-1.js → TemplateConfigurationModal-CObP8Po7.js} +1 -1
  15. package/dist/{TemplatePreview-BOIhJSBD.js → TemplatePreview-CXvkYDem.js} +5 -5
  16. package/dist/{TemplatesPage-dj7NseMt.js → TemplatesPage-xwQk9WrO.js} +9 -9
  17. package/dist/{WorkflowBuilder-ByG9twmu.js → WorkflowBuilder-BFJq_45O.js} +5 -5
  18. package/dist/{WorkflowBuilder-DjpAoBVO.js → WorkflowBuilder-uhe3YUI5.js} +3 -3
  19. package/dist/{WorkflowSearchRedirect-DRidTx1L.js → WorkflowSearchRedirect-DgSyY4Uj.js} +1 -1
  20. package/dist/{WorkflowShareDialog-B9yZMhEi.js → WorkflowShareDialog-DherIHZo.js} +1 -1
  21. package/dist/{WorkflowsList-BQ_5hkWi.js → WorkflowsList-Cjjti0SI.js} +9 -9
  22. package/dist/{agentTools-Cx5yPBe7.js → agentTools-pSaWntVD.js} +1 -1
  23. package/dist/{ai-usage-Dit3U_aG.js → ai-usage-BovljL6l.js} +1 -1
  24. package/dist/{assert-rules-DtQmtG1p.js → assert-rules-BA2caUAZ.js} +1 -1
  25. package/dist/{canvasNoteTools-BxknF5rX.js → canvasNoteTools-Hr1m_3mF.js} +1 -1
  26. package/dist/executions.js +2 -2
  27. package/dist/{flow-builder-D8f31DFR.js → flow-builder-D6iWW6tJ.js} +16 -16
  28. package/dist/{graphql-types-dS3Fk9Z5.js → graphql-types-BjCOnRUQ.js} +58 -1
  29. package/dist/history.js +1 -1
  30. package/dist/{index-BprVea6e.d.ts → index-D_U-nNAe.d.ts} +291 -1
  31. package/dist/index.d.ts +2 -2
  32. package/dist/index.js +34 -34
  33. package/dist/{node-detail-view-C__INEVF.js → node-detail-view-cr0pbiSX.js} +5 -5
  34. package/dist/{node-editor-tab-body-BintGoSp.js → node-editor-tab-body-_09aIAMK.js} +2 -2
  35. package/dist/observability.d.ts +1 -1
  36. package/dist/observability.js +2 -2
  37. package/dist/{popover-2-6xmS1q.js → popover-BdjGE-KB.js} +2 -2
  38. package/dist/{quick-config-panel-Bxi9TwCG.js → quick-config-panel-BQpUJ1Ed.js} +3 -3
  39. package/dist/{run-list-links-CH-V4Li5.js → run-list-links-DPWTtVr5.js} +1 -1
  40. package/dist/{run-mode-Bu_pgjeM.js → run-mode-DMlMGEdu.js} +1 -1
  41. package/dist/{schedule-panel-BbRtGDEt.js → schedule-panel-Dwq6JXhH.js} +6 -6
  42. package/dist/settings.js +1 -1
  43. package/dist/{sidebar-node-editor-DG-34YEW.js → sidebar-node-editor-Cx9-gwpu.js} +3 -3
  44. package/dist/{template-code-B7x-XMAm.js → template-code-xlEMDtL8.js} +1 -1
  45. package/dist/templates.js +2 -2
  46. package/dist/{use-workflow-tests-Dkij09vJ.js → use-workflow-tests-C0KaRy7p.js} +2 -2
  47. package/dist/{useAgentDefinitions-YUDx_OW2.js → useAgentDefinitions-dpKr9Mee.js} +1 -1
  48. package/dist/{useDurableParity-X_zfFzQv.js → useDurableParity-ClG3HMH8.js} +1 -1
  49. package/dist/{useExecutions-BWbMt16D.js → useExecutions-D9Sc9QbB.js} +2 -2
  50. package/dist/{useGlobalStoreClient-CwBAeiXV.js → useGlobalStoreClient-iCPQeryK.js} +1 -1
  51. package/dist/{useObservability-mXM7lCop.js → useObservability-CkNAUULL.js} +1 -1
  52. package/dist/{useRunHistory-DYDriBz1.js → useRunHistory-Dv1V1EO0.js} +2 -2
  53. package/dist/{useWorkflowCodeExport-uKBDVvnA.js → useWorkflowCodeExport-C1UH65gc.js} +2 -2
  54. package/dist/{useWorkflows-Dg7q_Tzf.js → useWorkflows-CEOWXYpV.js} +1 -1
  55. package/dist/{utils-C0dtnN4R.js → utils-CXEodE1a.js} +6 -1
  56. package/dist/workflow-builder.js +4 -4
  57. package/dist/{workflow-description-CeXdyWX8.js → workflow-description-QYwLwwFT.js} +1 -1
  58. package/dist/workflow-pages.d.ts +1 -1
  59. package/dist/workflow-pages.js +14 -14
  60. package/dist/{workflow-transfer-CktP7o1c.js → workflow-transfer-390a-CK8.js} +1 -1
  61. package/dist/workflows-list.js +1 -1
  62. 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-D8f31DFR.js";
5
- import { Ct as classifyCreateRefusal, N as buildOperationSeed, St as builderPathOf, d as ensureNodeTypesLoaded } from "./FluidGridsProvider-CDjkq3Zj.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-D6iWW6tJ.js";
5
+ import { Ct as classifyCreateRefusal, N as buildOperationSeed, St as builderPathOf, d as ensureNodeTypesLoaded } from "./FluidGridsProvider-64qAUX4Y.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-Dg7q_Tzf.js";
9
+ import { n as useCreateWorkflow } from "./useWorkflows-CEOWXYpV.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-CeXdyWX8.js";
12
+ import { o as CreateWorkflowRefusalDialog } from "./workflow-description-QYwLwwFT.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,8 +2,8 @@
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-mXM7lCop.js";
6
- import { c as prettyJson, r as formatTimestamp, t as formatBytes } from "./utils-C0dtnN4R.js";
5
+ import { n as useDataSinks, t as useDataSinkData } from "./useObservability-CkNAUULL.js";
6
+ import { i as formatTimestamp, l as prettyJson, t as formatBytes } from "./utils-CXEodE1a.js";
7
7
  import { useEffect, useMemo, useState } from "react";
8
8
  import { Icon } from "@iconify/react";
9
9
  import { Fragment as Fragment$1, jsx, jsxs } from "react/jsx-runtime";
@@ -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-X_zfFzQv.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-ClG3HMH8.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 { 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";
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-64qAUX4Y.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-BWbMt16D.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-D9Sc9QbB.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";
@@ -23,15 +23,15 @@ import { a as RUN_CONTROL_DIALOG_STYLE, c as parseJsonInput, i as NativeSelect,
23
23
  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
- 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-DYDriBz1.js";
28
- import { HI as WorkflowQueryRejectCondition, L as AgentStepKind, SF as VersioningBehavior, Wd as ErrorType, cL as WorkflowUpdateWaitFor } from "./graphql-types-dS3Fk9Z5.js";
29
- import { _ as agentTokenStreamsFor, g as agentLiveReplyState, h as useAgentTokenStream, i as canSaveRunAsTestCase, t as saveRunAsTestCase } from "./use-workflow-tests-Dkij09vJ.js";
30
- import { a as formatTokens, d as formatMicroUsd, o as modelLabel, r as aiCost } from "./ai-usage-Dit3U_aG.js";
26
+ import { a as fetchRunFailureClusters, i as dismissRunFailureCluster, r as OPEN_STATUSES, t as BUCKET_LABELS } from "./FailureTriagePanel-Chvh8S_q.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-Dv1V1EO0.js";
28
+ import { JI as WorkflowQueryRejectCondition, L as AgentStepKind, OF as VersioningBehavior, Wd as ErrorType, mL as WorkflowUpdateWaitFor } from "./graphql-types-BjCOnRUQ.js";
29
+ import { _ as agentTokenStreamsFor, g as agentLiveReplyState, h as useAgentTokenStream, i as canSaveRunAsTestCase, t as saveRunAsTestCase } from "./use-workflow-tests-C0KaRy7p.js";
30
+ import { a as formatTokens, d as formatMicroUsd, o as modelLabel, r as aiCost } from "./ai-usage-BovljL6l.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-Dg7q_Tzf.js";
34
+ import { v as useWorkflowVersions } from "./useWorkflows-CEOWXYpV.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$4(value) {
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$4(value)) return value;
1618
+ if (isRecord$5(value)) return value;
1619
1619
  if (typeof value === "string") {
1620
1620
  const parsed = tryParseJson(value);
1621
- return isRecord$4(parsed) ? parsed : null;
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$4(raw)) return null;
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$4(item)) continue;
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$4(value) && PAYLOAD_KEYS.some((key) => key in value);
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$3(value) {
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$3(context)) return null;
3192
+ if (!isRecord$4(context)) return null;
3193
3193
  const marker = context.concurrency;
3194
- if (!isRecord$3(marker)) return null;
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$2(value) {
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$2(state.output) && state.output._waiting === "activity_paused";
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 offerGenericResume = humanRequestsCurrent && !awaitingPerson && !isDurableRun && !waitingOnSignal && heldByRule.length === 0;
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,30 +1,30 @@
1
1
  "use client";
2
2
  import { t as __exportAll } from "./rolldown-runtime-hDbaFkMy.js";
3
3
  import { g as useExecutionsStore, h as DEFAULT_EXECUTIONS_FILTER } from "./config-X97zrIvn.js";
4
- import { b as validateDateRange, c as EMPTY_SEARCH_FILTER, d as searchFilterConflicts, i as useExecutionStats, l as OPERATORS_BY_TYPE, m as overrideRequestOf, o as useExecutionsWithStore, r as useExecutionActions, t as useAutoRefresh, u as buildSearchAttributeFilter } from "./useExecutions-BWbMt16D.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-D9Sc9QbB.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-X_zfFzQv.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-ClG3HMH8.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 { an as runDurationMs, rn as formatElapsedMs } from "./FluidGridsProvider-CDjkq3Zj.js";
15
+ import { an as runDurationMs, rn as formatElapsedMs } from "./FluidGridsProvider-64qAUX4Y.js";
16
16
  import { r as useRunHumanRequests } from "./useHumanRequests-DwG2tQ3f.js";
17
- import { n as runListLinkKey, t as runListFilterFromSearch } from "./run-list-links-CH-V4Li5.js";
17
+ import { n as runListLinkKey, t as runListFilterFromSearch } from "./run-list-links-DPWTtVr5.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-Dg7q_Tzf.js";
20
+ import { h as useWorkflowDefinitions, v as useWorkflowVersions } from "./useWorkflows-CEOWXYpV.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";
24
24
  import { a as RUN_CONTROL_DIALOG_STYLE, c as parseJsonInput, i as NativeSelect, o as StatusPill, r as JsonField, t as FieldError, u as useResource } from "./shared-mbyvDPde.js";
25
25
  import { t as describeOperationError } from "./errors-xPZ-IbQd.js";
26
26
  import { n as getFluidGridsClient } from "./client-Ctl4jmY3.js";
27
- import { CI as WorkflowBatchOperationType, UI as WorkflowResetType } from "./graphql-types-dS3Fk9Z5.js";
27
+ import { YI as WorkflowResetType, kI as WorkflowBatchOperationType } from "./graphql-types-BjCOnRUQ.js";
28
28
  import { Fragment, useCallback, useEffect, useMemo, useRef, useState } from "react";
29
29
  import { useNavigate, useSearchParams } from "react-router";
30
30
  import { Icon } from "@iconify/react";
@@ -2,7 +2,7 @@
2
2
  import { r as useTr } from "./TranslationBridge-Da-TPgQm.js";
3
3
  import { n as getFluidGridsClient } from "./client-Ctl4jmY3.js";
4
4
  import { o as throwIfResultError } from "./errors-xPZ-IbQd.js";
5
- import { hO as RunFailureClusterStatus } from "./graphql-types-dS3Fk9Z5.js";
5
+ import { bO as RunFailureClusterStatus } from "./graphql-types-BjCOnRUQ.js";
6
6
  import { useCallback, useEffect, useState } from "react";
7
7
  import { Icon } from "@iconify/react";
8
8
  import { jsx, jsxs } from "react/jsx-runtime";
@@ -15,7 +15,7 @@ import { a as collectExtensions, n as QUOTA_EXHAUSTED_CODE, o as errorCodesOf, r
15
15
  import { c as setFluidGridsConfig, l as validateTrustedOrigin, o as resetFluidGridsConfig, r as getFluidGridsConfig, s as resetFluidGridsExecutionState } from "./config-X97zrIvn.js";
16
16
  import { a as useFgAskableAction } from "./askAboutBridge-ByYsQams.js";
17
17
  import { i as readableNodeType } from "./run-display-UjLAoYqQ.js";
18
- import { Fw as NodeManifestDetail } from "./graphql-types-dS3Fk9Z5.js";
18
+ import { Iw as NodeManifestDetail } from "./graphql-types-BjCOnRUQ.js";
19
19
  import { t as provideNodeRegistryRefresh } from "./node-registry-refresh-s3okf83X.js";
20
20
  import { createContext, memo, useCallback, useContext, useEffect, useMemo, useRef, useState, useSyncExternalStore } from "react";
21
21
  import { useNavigate, useParams } from "react-router";
@@ -1,6 +1,6 @@
1
1
  "use client";
2
2
  import { t as __exportAll } from "./rolldown-runtime-hDbaFkMy.js";
3
- import { d as useRestoreWorkflowVersion, h as useWorkflowDefinitions } from "./useWorkflows-Dg7q_Tzf.js";
3
+ import { d as useRestoreWorkflowVersion, h as useWorkflowDefinitions } from "./useWorkflows-CEOWXYpV.js";
4
4
  import { t as VersionDiffDialog } from "./VersionDiffDialog-D9W5Fm56.js";
5
5
  import { c as versionsOfWorkflow } from "./VersionLifecycleBar-DuphLOT0.js";
6
6
  import { r as useTr } from "./TranslationBridge-Da-TPgQm.js";