@burdenoff/fluidgrids-fe-sdk 2026.1115.7 → 2026.1115.9

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 (73) hide show
  1. package/dist/{AiStudioPage-tzv59pH4.js → AiStudioPage-CZTaVeQE.js} +4 -4
  2. package/dist/{DataSinkDashboardPage-BtWSidiD.js → DataSinkDashboardPage-CPq6-jZM.js} +1 -1
  3. package/dist/{ExecutionDetailPage-CO3BWG_V.js → ExecutionDetailPage-d29WPJDN.js} +92 -27
  4. package/dist/ExecutionSettingsFields-DzKJDOjU.js +1003 -0
  5. package/dist/{ExecutionsListPage-CaO9A4Ph.js → ExecutionsListPage-xQthHGAJ.js} +8 -26
  6. package/dist/{FailureTriagePanel-CBGgU4Tl.js → FailureTriagePanel-Cka9Rc1_.js} +1 -1
  7. package/dist/{FluidGridsProvider-Bemnt09v.js → FluidGridsProvider-BRC0WlAa.js} +248 -3045
  8. package/dist/{HistoryPage-DPGYma-Z.js → HistoryPage-Drdk9j_Q.js} +1 -1
  9. package/dist/{InsightsPage-C6b9WuBc.js → InsightsPage-mYWZvyGR.js} +5 -5
  10. package/dist/{OpenTemplateAsCodeButton-BemhA1u4.js → OpenTemplateAsCodeButton-CQV-YHlJ.js} +2 -2
  11. package/dist/{PaidTemplateConfirm-bNEOQ_Se.js → PaidTemplateConfirm-Dog5moZa.js} +1 -1
  12. package/dist/{agent-form-D0uLvzx4.js → RunLogAppendedDocument-D1_BfMZa.js} +1 -82
  13. package/dist/{SettingsPage-CTd4LQPW.js → SettingsPage-DFnqjkpT.js} +239 -894
  14. package/dist/{TaskQueuesPage-ESjeGUg3.js → TaskQueuesPage-CZQUO33o.js} +1 -1
  15. package/dist/{TemplateCard-D7jG3RaU.js → TemplateCard-D2zt-kXW.js} +5 -5
  16. package/dist/{TemplateConfigurationModal-DMyuHZ3O.js → TemplateConfigurationModal-D8eQsJXJ.js} +1 -1
  17. package/dist/{TemplatePreview-CNbCxOsc.js → TemplatePreview-BgdkcCF-.js} +5 -5
  18. package/dist/{TemplatesPage-DLOVSXa9.js → TemplatesPage-t7rGU-BP.js} +10 -10
  19. package/dist/{WorkflowBuilder-YJlFY071.js → WorkflowBuilder-BS9kVcgU.js} +3 -3
  20. package/dist/{WorkflowBuilder-DhvPS34U.js → WorkflowBuilder-CtTM79lP.js} +6 -5
  21. package/dist/{WorkflowSearchRedirect-vyY1d6nn.js → WorkflowSearchRedirect-Bqdxr833.js} +1 -1
  22. package/dist/WorkflowSettingsDrawer-BiqTf_tV.js +191 -0
  23. package/dist/WorkflowSettingsDrawer-MVU1BKfY.d.ts +18 -0
  24. package/dist/{WorkflowShareDialog-qyGW0cSr.js → WorkflowShareDialog-D_G3TUGQ.js} +1 -1
  25. package/dist/{WorkflowsList-DQq_-Gaq.js → WorkflowsList-DjKePEwo.js} +2035 -517
  26. package/dist/agent-form-Bfvm32j1.js +83 -0
  27. package/dist/{agentTools-uC7Kw2uc.js → agentTools-DrVlHNeP.js} +1 -1
  28. package/dist/{ai-usage-yzPWZgAC.js → ai-usage-DhSKp0tV.js} +1 -1
  29. package/dist/{api-o5UUDbr8.js → api-D1cWC1yx.js} +190 -1
  30. package/dist/{assert-rules-FOiGC7-z.js → assert-rules-D9PNDTMK.js} +1 -1
  31. package/dist/{canvasNoteTools-DedWIXHZ.js → canvasNoteTools-Bo2QldkD.js} +1 -1
  32. package/dist/executions.js +2 -2
  33. package/dist/{flow-builder-BfkigZeg.js → flow-builder-CWfNAFd8.js} +73 -18
  34. package/dist/{graphql-types-C2heV7ot.js → graphql-types-CxkVzQqA.js} +25 -1
  35. package/dist/history.js +1 -1
  36. package/dist/{index-CIRkv8Dr.d.ts → index-C2ehY2Ld.d.ts} +180 -10
  37. package/dist/index.d.ts +3 -3
  38. package/dist/index.js +45 -42
  39. package/dist/{node-detail-view-B-nHEP6Z.js → node-detail-view-D_N3kLtA.js} +7 -7
  40. package/dist/{node-editor-tab-body-CZHYnHmY.js → node-editor-tab-body-BQ9JZa72.js} +2 -2
  41. package/dist/observability.d.ts +1 -1
  42. package/dist/observability.js +2 -2
  43. package/dist/{useAgentDefinitions-CVBnPMnJ.js → operations-qq_bbgXP.js} +3 -223
  44. package/dist/{popover-C2ohJ0Rd.js → popover-DZdTN21a.js} +3 -3
  45. package/dist/{quick-config-panel-ButILqM4.js → quick-config-panel-BCUY4tQy.js} +3 -3
  46. package/dist/relative-time-Dxt8ZIIu.js +55 -0
  47. package/dist/{run-list-links-sTAexiqj.js → run-list-links-BwsCiBPB.js} +1 -1
  48. package/dist/{run-mode-DjXIqsz3.js → run-mode-vpIlmfgY.js} +1 -1
  49. package/dist/{schedule-panel-BZuH1ltc.js → schedule-panel-B6FrpX9d.js} +9 -8
  50. package/dist/settings.d.ts +2 -2
  51. package/dist/settings.js +3 -2
  52. package/dist/{sidebar-node-editor-B0-72udR.js → sidebar-node-editor-CWrmlFlZ.js} +3 -3
  53. package/dist/{template-code-DrS_vlf_.js → template-code-9dL1SUji.js} +1 -1
  54. package/dist/templates.js +2 -2
  55. package/dist/{use-workflow-code-editor-DfWsRWC7.js → use-workflow-code-editor-DJMH7-Xx.js} +1 -1
  56. package/dist/{use-workflow-tests-CVVKinFU.js → use-workflow-tests-C4e6aJZS.js} +2 -2
  57. package/dist/useAgentDefinitions-DX5GvEIp.js +223 -0
  58. package/dist/{useDurableParity-gnKk3TyL.js → useDurableParity-BtWk4d-i.js} +1 -1
  59. package/dist/{useExecutions-Dwa7jo1o.js → useExecutions-C9pVKexC.js} +3 -2
  60. package/dist/{useGlobalStoreClient-4BH2Xbru.js → useGlobalStoreClient-C2P50Gj5.js} +1 -1
  61. package/dist/{useObservability-Bp4LtS1S.js → useObservability-DsHX86Xl.js} +1 -1
  62. package/dist/{useRunHistory-Zqh59sXN.js → useRunHistory-DUNLNOKA.js} +2 -2
  63. package/dist/{useWorkflowCodeExport-C93cPJQ5.js → useWorkflowCodeExport-DSbfcehl.js} +13 -3
  64. package/dist/{useWorkflows-BodVSonO.js → useWorkflows-B13Cp8tk.js} +90 -10
  65. package/dist/workflow-builder.js +4 -4
  66. package/dist/{workflow-description-DxiRgyxy.js → workflow-description-F3inwvof.js} +1 -1
  67. package/dist/workflow-pages.d.ts +2 -2
  68. package/dist/workflow-pages.js +14 -14
  69. package/dist/workflow-save-state-DUE9lNwQ.js +2813 -0
  70. package/dist/{workflow-transfer-BlDyxa9L.js → workflow-transfer-CsXh0mIi.js} +1 -1
  71. package/dist/workflows-list.js +1 -1
  72. package/package.json +3 -3
  73. package/dist/SettingsPage-DMHQFj5-.d.ts +0 -9
@@ -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-BfkigZeg.js";
5
- import { Ct as classifyCreateRefusal, N as buildOperationSeed, St as builderPathOf, d as ensureNodeTypesLoaded } from "./FluidGridsProvider-Bemnt09v.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-CWfNAFd8.js";
5
+ import { Ct as classifyCreateRefusal, N as buildOperationSeed, St as builderPathOf, d as ensureNodeTypesLoaded } from "./FluidGridsProvider-BRC0WlAa.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-BodVSonO.js";
9
+ import { r as useCreateWorkflow } from "./useWorkflows-B13Cp8tk.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-DxiRgyxy.js";
12
+ import { o as CreateWorkflowRefusalDialog } from "./workflow-description-F3inwvof.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-Bp4LtS1S.js";
5
+ import { n as useDataSinks, t as useDataSinkData } from "./useObservability-DsHX86Xl.js";
6
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";
@@ -1,17 +1,18 @@
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-gnKk3TyL.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-BtWk4d-i.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
- 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-Bemnt09v.js";
6
+ import { s as isAgentNodeType } from "./agent-form-Bfvm32j1.js";
7
+ import { A as describeRunError, D as runQuestions, E as isFailedStatus, Jt as formatElapsedMs, O as runStepQuestions, T as failureQuestions, Xt as runDurationMs, Yt as nodeStateDurationMs, fn as durableInterfaceOf, hn as runSignalTargets, j as describeRunStep, k as describeRun, un as canSignalRun } from "./FluidGridsProvider-BRC0WlAa.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-xQtjIWWx.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-Dwa7jo1o.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-C9pVKexC.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";
15
+ import { n as RunLogsDocument, t as RunLogAppendedDocument } from "./RunLogAppendedDocument-D1_BfMZa.js";
15
16
  import { r as getFluidGridsConfig } from "./config-X97zrIvn.js";
16
17
  import { i as SdkPermissionButton, s as useFluidGridsPermission, t as FLUIDGRIDS_PERMISSIONS } from "./constants-65QV61nQ.js";
17
18
  import { r as runSuggestAnchorProps } from "./entities-I_0kio3q.js";
@@ -23,15 +24,15 @@ import { a as RUN_CONTROL_DIALOG_STYLE, c as parseJsonInput, i as NativeSelect,
23
24
  import { t as useWorkflowProposal } from "./useWorkflowProposal-B9vXLKef.js";
24
25
  import { t as WorkflowProposalCard } from "./WorkflowProposalCard-SmRv_Egf.js";
25
26
  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-CBGgU4Tl.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-Zqh59sXN.js";
28
- import { BF as VersioningBehavior, DL as WorkflowUpdateWaitFor, L as AgentStepKind, Xd as ErrorType, sL as WorkflowQueryRejectCondition } from "./graphql-types-C2heV7ot.js";
29
- import { _ as agentTokenStreamsFor, g as agentLiveReplyState, h as useAgentTokenStream, i as canSaveRunAsTestCase, t as saveRunAsTestCase } from "./use-workflow-tests-CVVKinFU.js";
30
- import { a as formatTokens, d as formatMicroUsd, o as modelLabel, r as aiCost } from "./ai-usage-yzPWZgAC.js";
27
+ import { a as fetchRunFailureClusters, i as dismissRunFailureCluster, r as OPEN_STATUSES, t as BUCKET_LABELS } from "./FailureTriagePanel-Cka9Rc1_.js";
28
+ import { a as useDurableRunFields, i as useDeterminismStatus, n as SignalRunDialog, o as useRunStackTrace, r as terminateDurableRun, s as RunHistoryView, t as useRunHistory } from "./useRunHistory-DUNLNOKA.js";
29
+ import { HF as VersioningBehavior, L as AgentStepKind, Qd as ErrorType, kL as WorkflowUpdateWaitFor, lL as WorkflowQueryRejectCondition } from "./graphql-types-CxkVzQqA.js";
30
+ import { _ as agentTokenStreamsFor, g as agentLiveReplyState, h as useAgentTokenStream, i as canSaveRunAsTestCase, t as saveRunAsTestCase } from "./use-workflow-tests-C4e6aJZS.js";
31
+ import { a as formatTokens, d as formatMicroUsd, o as modelLabel, r as aiCost } from "./ai-usage-DhSKp0tV.js";
31
32
  import { _ as useWorkflowTestsEnabled, l as useDurableFunctionNodesEnabled, m as usePhaseCFlags, u as useDurableParityEnabled } from "./feature-flags-B_b8PJ6Z.js";
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
+ import { A as resetRunToLastCleanTask, C as fetchSignalTokens, D as queryRun, H as upsertRunSearchAttributes, O as resetActivities, P as sendRunUpdate, T as pauseActivities, V as updateActivityOptions, _ as fetchPauseRules, b as fetchRunHistoryArchive, d as failActivityById, g as fetchCodecServerSettings, i as completeActivityById, j as revokeSignalToken, k as resetRun, s as createSignalToken, v as fetchRunArchive, x as fetchRunUpdate, y as fetchRunControlFields, z as unpauseActivities } from "./api-D1cWC1yx.js";
33
34
  import { a as fetchTaskQueueStats } from "./api-CEzqoN5H.js";
34
- import { v as useWorkflowVersions } from "./useWorkflows-BodVSonO.js";
35
+ import { y as useWorkflowVersions } from "./useWorkflows-B13Cp8tk.js";
35
36
  import { useCallback, useEffect, useMemo, useRef, useState } from "react";
36
37
  import { Link, useNavigate, useParams, useSearchParams } from "react-router";
37
38
  import { Icon } from "@iconify/react";
@@ -7143,25 +7144,33 @@ function EncodedPayloadChip({ payload, codecServer, fetchImpl }) {
7143
7144
  }
7144
7145
 
7145
7146
  // src/modules/run-control/components/ArchivedRunView.tsx
7147
+ /** An ISO timestamp as the viewer's local date and time; the input when it does not parse. */
7148
+ function localTime(iso) {
7149
+ if (!iso) return "";
7150
+ const date = new Date(iso);
7151
+ return Number.isNaN(date.getTime()) ? iso : date.toLocaleString();
7152
+ }
7146
7153
  function ArchivedRunView({ runId, enabled, fallback, backLink, onViewChildRun }) {
7147
7154
  const tr = useTr();
7148
- const archive = useResource(`archived-run:${runId}`, enabled, () => fetchRunHistoryArchive(runId));
7149
- const archived = archive.data?.archived === true;
7155
+ const lookup = useResource(`archived-run:${runId}`, enabled, async () => ({ archive: await fetchRunArchive(runId) }));
7156
+ const archive = lookup.data?.archive ?? null;
7157
+ const hasEvents = (archive?.eventCount ?? 0) > 0;
7158
+ const readStatus = useResource(`archived-run-read:${runId}`, enabled && hasEvents, () => fetchRunHistoryArchive(runId));
7150
7159
  const history = useRunHistory(runId, {
7151
- enabled: archived,
7160
+ enabled: enabled && hasEvents,
7152
7161
  live: false
7153
7162
  });
7154
7163
  if (!enabled) return /* @__PURE__ */ jsx(Fragment$1, { children: fallback });
7155
- if (!archive.data && !archive.error) return /* @__PURE__ */ jsxs("div", {
7164
+ if (lookup.error) return /* @__PURE__ */ jsx(Fragment$1, { children: fallback });
7165
+ if (!lookup.data) return /* @__PURE__ */ jsxs("div", {
7156
7166
  className: "animate-pulse p-4 sm:p-6",
7157
7167
  "data-testid": "archived-run-loading",
7158
7168
  "aria-busy": "true",
7159
7169
  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" })]
7160
7170
  });
7161
- if (!archived) return /* @__PURE__ */ jsx(Fragment$1, { children: fallback });
7162
- const ref = archive.data?.archiveRef ?? tr("fluidgrids.runControl.archive.unknownRef", "the workspace's archive bucket");
7163
- const archivedCount = archive.data?.historyLength ?? 0;
7164
- const unreadable = !history.loading && !history.error && history.events.length === 0 && archivedCount > 0;
7171
+ if (!archive) return /* @__PURE__ */ jsx(Fragment$1, { children: fallback });
7172
+ const ref = archive.archiveRef;
7173
+ const readError = readStatus.data?.archiveReadError ?? null;
7165
7174
  return /* @__PURE__ */ jsxs("div", {
7166
7175
  className: "space-y-4 p-4 sm:p-6",
7167
7176
  "data-testid": "archived-run",
@@ -7180,6 +7189,56 @@ function ArchivedRunView({ runId, enabled, fallback, backLink, onViewChildRun })
7180
7189
  }), tr("fluidgrids.runControl.archive.badge", "Archived")]
7181
7190
  })]
7182
7191
  }),
7192
+ /* @__PURE__ */ jsxs("dl", {
7193
+ className: "grid grid-cols-1 gap-x-6 gap-y-1 text-sm sm:grid-cols-2",
7194
+ "data-testid": "archived-run-facts",
7195
+ children: [
7196
+ /* @__PURE__ */ jsxs("div", {
7197
+ className: "flex gap-2",
7198
+ children: [/* @__PURE__ */ jsx("dt", {
7199
+ className: "text-text-secondary",
7200
+ children: tr("fluidgrids.runControl.archive.workflow", "Workflow")
7201
+ }), /* @__PURE__ */ jsxs("dd", {
7202
+ className: "font-mono text-text-primary",
7203
+ children: [
7204
+ archive.workflowKey,
7205
+ " ",
7206
+ archive.version
7207
+ ]
7208
+ })]
7209
+ }),
7210
+ /* @__PURE__ */ jsxs("div", {
7211
+ className: "flex gap-2",
7212
+ children: [/* @__PURE__ */ jsx("dt", {
7213
+ className: "text-text-secondary",
7214
+ children: tr("fluidgrids.runControl.archive.status", "Status")
7215
+ }), /* @__PURE__ */ jsx("dd", {
7216
+ className: "text-text-primary",
7217
+ children: archive.status
7218
+ })]
7219
+ }),
7220
+ /* @__PURE__ */ jsxs("div", {
7221
+ className: "flex gap-2",
7222
+ children: [/* @__PURE__ */ jsx("dt", {
7223
+ className: "text-text-secondary",
7224
+ children: tr("fluidgrids.runControl.archive.archivedAt", "Archived at")
7225
+ }), /* @__PURE__ */ jsx("dd", {
7226
+ className: "text-text-primary",
7227
+ children: localTime(archive.archivedAt)
7228
+ })]
7229
+ }),
7230
+ /* @__PURE__ */ jsxs("div", {
7231
+ className: "flex gap-2",
7232
+ children: [/* @__PURE__ */ jsx("dt", {
7233
+ className: "text-text-secondary",
7234
+ children: tr("fluidgrids.runControl.archive.events", "Events archived")
7235
+ }), /* @__PURE__ */ jsx("dd", {
7236
+ className: "text-text-primary",
7237
+ children: archive.eventCount
7238
+ })]
7239
+ })
7240
+ ]
7241
+ }),
7183
7242
  /* @__PURE__ */ jsxs("div", {
7184
7243
  role: "status",
7185
7244
  className: "flex items-start gap-2 rounded-md border border-border-default bg-surface-elevated p-3 text-sm text-text-primary",
@@ -7190,7 +7249,11 @@ function ArchivedRunView({ runId, enabled, fallback, backLink, onViewChildRun })
7190
7249
  className: "mt-0.5 shrink-0 text-text-secondary"
7191
7250
  }), /* @__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 }) })]
7192
7251
  }),
7193
- unreadable ? /* @__PURE__ */ jsxs("div", {
7252
+ !hasEvents ? /* @__PURE__ */ jsx("p", {
7253
+ className: "text-sm text-text-secondary",
7254
+ "data-testid": "archived-run-no-events",
7255
+ children: tr("fluidgrids.runControl.archive.noEvents", "This run archived no history events. A canvas run keeps its node executions in nodes.jsonl.gz next to the archive.")
7256
+ }) : readError ? /* @__PURE__ */ jsxs("div", {
7194
7257
  role: "alert",
7195
7258
  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",
7196
7259
  "data-testid": "archived-run-unreadable",
@@ -7198,13 +7261,14 @@ function ArchivedRunView({ runId, enabled, fallback, backLink, onViewChildRun })
7198
7261
  icon: "mdi:lock-outline",
7199
7262
  width: 18,
7200
7263
  className: "mt-0.5 shrink-0"
7201
- }), /* @__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.", {
7202
- count: archivedCount,
7264
+ }), /* @__PURE__ */ jsx("span", { children: tr("fluidgrids.runControl.archive.unreadableReason", "{{count}} events were archived, but they could not be read back: {{reason}}. You can also read the files in {{ref}} directly.", {
7265
+ count: archive.eventCount,
7266
+ reason: readError,
7203
7267
  ref
7204
7268
  }) })]
7205
7269
  }) : /* @__PURE__ */ jsx(RunHistoryView, {
7206
7270
  events: history.events,
7207
- loading: history.loading,
7271
+ loading: history.loading || readStatus.loading,
7208
7272
  error: history.error,
7209
7273
  active: false,
7210
7274
  streaming: false,
@@ -8050,6 +8114,7 @@ function ExecutionDetailPage() {
8050
8114
  ...durableFields.fields
8051
8115
  } : baseExecution, [baseExecution, durableFields.fields]);
8052
8116
  const refetchDurableFields = durableFields.refetch;
8117
+ const loadedRunId = runId && baseExecution?.id === runId ? runId : void 0;
8053
8118
  const parityFields = useDurableParityRunFields(runId, parityEnabled);
8054
8119
  const refetchParityFields = parityFields.refetch;
8055
8120
  const refetch = useCallback(async () => {
@@ -8064,8 +8129,8 @@ function ExecutionDetailPage() {
8064
8129
  refetchParityFields
8065
8130
  ]);
8066
8131
  const runCanChange = execution?.status === "RUNNING" || execution?.status === "PENDING" || execution?.status === "WAITING";
8067
- const { items: humanRequests, loadedAt: humanRequestsLoadedAt, error: humanRequestsError, refetch: refetchHumanRequests } = useRunHumanRequests(runId, { pollIntervalMs: runCanChange ? 1e4 : 0 });
8068
- const { decisions: policyDecisions, decide: decidePolicyApproval } = useRunPolicyDecisions(runId, { pollIntervalMs: runCanChange ? 1e4 : 0 });
8132
+ const { items: humanRequests, loadedAt: humanRequestsLoadedAt, error: humanRequestsError, refetch: refetchHumanRequests } = useRunHumanRequests(loadedRunId, { pollIntervalMs: runCanChange ? 1e4 : 0 });
8133
+ const { decisions: policyDecisions, decide: decidePolicyApproval } = useRunPolicyDecisions(loadedRunId, { pollIntervalMs: runCanChange ? 1e4 : 0 });
8069
8134
  const awaitingPerson = humanRequests.some((request) => request.status === "PENDING");
8070
8135
  const [waitingSeenAt, setWaitingSeenAt] = useState(null);
8071
8136
  const isWaiting = execution?.status === "WAITING";
@@ -8099,8 +8164,8 @@ function ExecutionDetailPage() {
8099
8164
  useAutoRefresh(useCallback(() => {
8100
8165
  refetch();
8101
8166
  }, [refetch]), autoRefreshEnabled && isActive, 2e3);
8102
- const hierarchy = useRunHierarchy(runId, { live: isActive });
8103
- const runLogs = useRunLogs(runId, {
8167
+ const hierarchy = useRunHierarchy(loadedRunId, { live: isActive });
8168
+ const runLogs = useRunLogs(loadedRunId, {
8104
8169
  live: isActive,
8105
8170
  minLevel: minLogLevel
8106
8171
  });