@burdenoff/fluidgrids-fe-sdk 2026.1114.2 → 2026.1114.4

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 (70) hide show
  1. package/dist/{AiStudioPage-C040XZyS.js → AiStudioPage-C2SBRqab.js} +5 -5
  2. package/dist/{ApprovalInboxPage-DVoqdqwA.js → ApprovalInboxPage-CM2nA4eE.js} +1 -1
  3. package/dist/{DataSinkDashboardPage-BoyLrZnt.js → DataSinkDashboardPage-Dnp1yRYQ.js} +1 -1
  4. package/dist/{DataTablesPage-DR6BesNp.js → DataTablesPage-C7I_PCvD.js} +1 -1
  5. package/dist/{ExecutionDetailPage-C0lNp122.js → ExecutionDetailPage-BbvY2bcb.js} +15 -80
  6. package/dist/{ExecutionsListPage-BpHBy1JU.js → ExecutionsListPage-Ky3TAL9U.js} +244 -23
  7. package/dist/{FailureTriagePanel-CbDIdU8s.js → FailureTriagePanel-Ddua9uxn.js} +1 -1
  8. package/dist/{FluidGridsProvider-CPLfIarV.js → FluidGridsProvider-C-WGQwuT.js} +1 -0
  9. package/dist/{HistoryPage-CCZS-hPw.js → HistoryPage-D4rkw4zu.js} +1 -1
  10. package/dist/{InsightsPage-C-Nm9YNI.js → InsightsPage-CVzNu4F7.js} +6 -6
  11. package/dist/{OpenTemplateAsCodeButton-C-6JVZoS.js → OpenTemplateAsCodeButton-pepQUqje.js} +1 -1
  12. package/dist/{PaidTemplateConfirm-D20JFNCb.js → PaidTemplateConfirm-BJCcJh5t.js} +1 -1
  13. package/dist/{QuotaExhaustedDialog-DTpI0jfj.js → QuotaExhaustedDialog-YjKgRTmu.js} +1 -1
  14. package/dist/{RunnersPage-BXODCbq0.js → RunnersPage-D2teM_sE.js} +1 -1
  15. package/dist/{SettingsPage-CmIa107C.js → SettingsPage-BSucNHrq.js} +6 -6
  16. package/dist/{TaskQueuesPage-BNoe05qF.js → TaskQueuesPage-WMJz9imi.js} +2 -2
  17. package/dist/{TemplateCard-C_YMW80k.js → TemplateCard-Cx_eZr9q.js} +5 -5
  18. package/dist/{TemplateConfigurationModal-DmM7s1zk.js → TemplateConfigurationModal-D2i7ZXOM.js} +1 -1
  19. package/dist/{TemplateDetailPanel-k0esV8pr.js → TemplateDetailPanel-DXJ9VYsh.js} +1 -1
  20. package/dist/{TemplatePreview-aKYt0Kad.js → TemplatePreview-DwdGa8bH.js} +6 -6
  21. package/dist/{TemplatesPage-DIVghCB6.js → TemplatesPage-DF5PK7CB.js} +8 -8
  22. package/dist/{VariablesPage-_RKdfiw5.js → VariablesPage-Bx3LNar7.js} +1 -1
  23. package/dist/{WorkflowBuilder-knGFBAAk.js → WorkflowBuilder-CjsO7i-D.js} +3 -3
  24. package/dist/{WorkflowBuilder-BsDvbIpS.js → WorkflowBuilder-DkzzbrNn.js} +5 -5
  25. package/dist/{WorkflowSearchRedirect-DFsQzQw9.js → WorkflowSearchRedirect-0MLrCjDn.js} +1 -1
  26. package/dist/{WorkflowShareDialog-D8psodlb.js → WorkflowShareDialog-B9yZMhEi.js} +1 -1
  27. package/dist/{WorkflowsList-DEN-0uQe.js → WorkflowsList-4VADoiz_.js} +10 -10
  28. package/dist/{agentTools-BTld9unj.js → agentTools-DuCukaUX.js} +1 -1
  29. package/dist/{ai-usage-DVtvLZ2P.js → ai-usage-Dit3U_aG.js} +1 -1
  30. package/dist/{assert-rules-BbSyxL5d.js → assert-rules-DtQmtG1p.js} +1 -1
  31. package/dist/{canvasNoteTools-C9vJMuXY.js → canvasNoteTools-DnsO-gHe.js} +1 -1
  32. package/dist/{constants-dcxg6zG6.js → constants-65QV61nQ.js} +3 -0
  33. package/dist/{constants-svpG-QrV.d.ts → constants-CLd2omuS.d.ts} +2 -0
  34. package/dist/executions.js +2 -2
  35. package/dist/{flow-builder-ConlP_db.js → flow-builder-CIV6u8y-.js} +17 -17
  36. package/dist/{graphql-types-D82O-0XY.js → graphql-types-dS3Fk9Z5.js} +18 -3
  37. package/dist/history.js +1 -1
  38. package/dist/{index-BVCOwqsN.d.ts → index-BY0V255h.d.ts} +161 -13
  39. package/dist/index.d.ts +3 -3
  40. package/dist/index.js +1901 -368
  41. package/dist/{node-detail-view-C4jNBsfW.js → node-detail-view-DkajTGfb.js} +6 -6
  42. package/dist/{node-editor-tab-body-CYeFTQr6.js → node-editor-tab-body-ChLrBfKp.js} +3 -3
  43. package/dist/observability.d.ts +1 -1
  44. package/dist/observability.js +2 -2
  45. package/dist/{popover-DhwmsszC.js → popover-CCJlf41J.js} +101 -4
  46. package/dist/{quick-config-panel-c8JQlXuc.js → quick-config-panel-Bq_uF9XF.js} +3 -3
  47. package/dist/{run-list-links-CPJimzkr.js → run-list-links-CH-V4Li5.js} +1 -1
  48. package/dist/{run-mode-Du-fvjtE.js → run-mode-Bu_pgjeM.js} +1 -1
  49. package/dist/{schedule-panel-CBab8kSL.js → schedule-panel-7TtPt1t_.js} +40 -17
  50. package/dist/settings.js +1 -1
  51. package/dist/{sidebar-node-editor-Bo_XRHJs.js → sidebar-node-editor-n-7ux5IN.js} +3 -3
  52. package/dist/{template-code-CEjudJEY.js → template-code-B3cMigJS.js} +1 -1
  53. package/dist/templates.js +2 -2
  54. package/dist/{use-workflow-tests-Lz8fPQZg.js → use-workflow-tests-Dkij09vJ.js} +2 -2
  55. package/dist/{useAgentDefinitions-Bs_ci53W.js → useAgentDefinitions-Daa3fGVg.js} +1 -1
  56. package/dist/{useDurableParity-DrahdkaR.js → useDurableParity-gigqyXDq.js} +88 -3
  57. package/dist/{useExecutions-6P7ohzlh.js → useExecutions-wka2Z5w3.js} +2 -2
  58. package/dist/{useGlobalStoreClient-B42oOe9Q.js → useGlobalStoreClient-BcwWGtm7.js} +1 -1
  59. package/dist/{useObservability-BSLLLev9.js → useObservability-CjZTYldC.js} +1 -1
  60. package/dist/{useRunHistory-DuKiGSuF.js → useRunHistory-Be-GggNA.js} +2 -2
  61. package/dist/{useWorkflowCodeExport-D80HIo-F.js → useWorkflowCodeExport-lRmbjY49.js} +2 -2
  62. package/dist/{useWorkflows-B5kFIfrZ.js → useWorkflows-BrqrVT8h.js} +1 -1
  63. package/dist/workflow-builder.js +4 -4
  64. package/dist/{workflow-code-transfer-50pRK3nx.js → workflow-code-transfer-BsLPUrKP.js} +1 -1
  65. package/dist/workflow-host.d.ts +1 -1
  66. package/dist/workflow-host.js +1 -1
  67. package/dist/workflow-pages.d.ts +1 -1
  68. package/dist/workflow-pages.js +18 -18
  69. package/dist/workflows-list.js +1 -1
  70. package/package.json +1 -1
@@ -1,20 +1,20 @@
1
1
  "use client";
2
2
  import { r as useTr } from "./TranslationBridge-Da-TPgQm.js";
3
3
  import { A as useFlowStore, a as changedSourceFiles, c as diagnosticsByPath, d as isEditableSourcePath, f as projectLanguage, h as sourceLanguageOf, l as interfaceFields, o as childRunIdOf, p as readCodeWorkflowState, r as CODE_WORKFLOW_NODE_TYPE, s as defaultSourcePath, u as interfaceHandlers } from "./node-operation-selection-DHbtGNrG.js";
4
- import { B as nodeSubtitle, G as useNodeConfig, Un as getNodeDetail, V as nodeTitle, en as useNodeExecution, gn as useCodeWorkflowInterface, mn as clearCodeWorkflowDefinitionCache, ot as useGuardedNavigate, rt as latestNodeLog, sn as fieldsFromValue, tt as FieldTree, vn as declaredSignals } from "./FluidGridsProvider-CPLfIarV.js";
5
- import { a as TabButton, c as NDV_Z_INDEX, i as ReadOnlyFieldset, n as SchedulePanel, o as NodeSettingsPanel, r as NodeExecutionActions, s as NodeParamsForm, t as SCHEDULE_NODE_TYPE } from "./schedule-panel-CBab8kSL.js";
4
+ import { B as nodeSubtitle, G as useNodeConfig, Un as getNodeDetail, V as nodeTitle, en as useNodeExecution, gn as useCodeWorkflowInterface, mn as clearCodeWorkflowDefinitionCache, ot as useGuardedNavigate, rt as latestNodeLog, sn as fieldsFromValue, tt as FieldTree, vn as declaredSignals } from "./FluidGridsProvider-C-WGQwuT.js";
5
+ import { a as TabButton, c as NDV_Z_INDEX, i as ReadOnlyFieldset, n as SchedulePanel, o as NodeSettingsPanel, r as NodeExecutionActions, s as NodeParamsForm, t as SCHEDULE_NODE_TYPE } from "./schedule-panel-7TtPt1t_.js";
6
6
  import { n as getFluidGridsClient, r as getFluidGridsClientSafe } from "./client-Ctl4jmY3.js";
7
7
  import { o as throwIfResultError, t as describeOperationError } from "./errors-xPZ-IbQd.js";
8
8
  import { i as FileDownloadUrlDocument, n as WorkflowCodeSourceDocument, r as BuildWorkflowCodeDocument, t as WorkflowEditLeaseStatusDocument } from "./WorkflowEditLeaseStatusDocument-Dp62med3.js";
9
9
  import { r as TableView, t as JsonView } from "./logs-panel-BgGt_dFm.js";
10
- import { hn as NodeStatesDocument, jt as useUnpinNodeDataMutation, qt as useWorkflowPinnedDataQuery, st as usePinNodeDataMutation } from "./useAgentDefinitions-Bs_ci53W.js";
10
+ import { hn as NodeStatesDocument, jt as useUnpinNodeDataMutation, qt as useWorkflowPinnedDataQuery, st as usePinNodeDataMutation } from "./useAgentDefinitions-Daa3fGVg.js";
11
11
  import { l as useDurableFunctionNodesEnabled, m as usePhaseCFlags } from "./feature-flags-B_b8PJ6Z.js";
12
- import { s as useFluidGridsPermission, t as FLUIDGRIDS_PERMISSIONS } from "./constants-dcxg6zG6.js";
12
+ import { s as useFluidGridsPermission, t as FLUIDGRIDS_PERMISSIONS } from "./constants-65QV61nQ.js";
13
13
  import { t as CodeEditorField } from "./code-editor-field-Cv907s3W.js";
14
14
  import { h as fetchCodeBundleSdk } from "./api-CEnNq15C.js";
15
- import { n as SignalRunDialog, s as RunHistoryView, t as useRunHistory } from "./useRunHistory-DuKiGSuF.js";
15
+ import { n as SignalRunDialog, s as RunHistoryView, t as useRunHistory } from "./useRunHistory-Be-GggNA.js";
16
16
  import { s as isAgentNodeType } from "./agent-form-D0uLvzx4.js";
17
- import { n as agentTracePath } from "./ai-usage-DVtvLZ2P.js";
17
+ import { n as agentTracePath } from "./ai-usage-Dit3U_aG.js";
18
18
  import * as React from "react";
19
19
  import { useCallback, useEffect, useMemo, useRef, useState } from "react";
20
20
  import { useNavigate } from "react-router";
@@ -1,10 +1,10 @@
1
1
  "use client";
2
2
  import { A as useFlowStore } from "./node-operation-selection-DHbtGNrG.js";
3
- import { V as nodeTitle, tt as FieldTree } from "./FluidGridsProvider-CPLfIarV.js";
3
+ import { V as nodeTitle, tt as FieldTree } from "./FluidGridsProvider-C-WGQwuT.js";
4
4
  import { r as useTr } from "./TranslationBridge-Da-TPgQm.js";
5
5
  import { m as usePhaseCFlags } from "./feature-flags-B_b8PJ6Z.js";
6
- import { s as useFluidGridsPermission, t as FLUIDGRIDS_PERMISSIONS } from "./constants-dcxg6zG6.js";
7
- import { a as TabButton, i as ReadOnlyFieldset, n as SchedulePanel, o as NodeSettingsPanel, s as NodeParamsForm, t as SCHEDULE_NODE_TYPE } from "./schedule-panel-CBab8kSL.js";
6
+ import { s as useFluidGridsPermission, t as FLUIDGRIDS_PERMISSIONS } from "./constants-65QV61nQ.js";
7
+ import { a as TabButton, i as ReadOnlyFieldset, n as SchedulePanel, o as NodeSettingsPanel, s as NodeParamsForm, t as SCHEDULE_NODE_TYPE } from "./schedule-panel-7TtPt1t_.js";
8
8
  import { useState } from "react";
9
9
  import { Icon } from "@iconify/react";
10
10
  import { cn } from "@burdenoff/fe-libs/utils";
@@ -1,3 +1,3 @@
1
1
 
2
- import { ARa as InsightsPage, Aa as LogStreamDestination, Da as DataSinkData, Ea as DashboardSummary, Ma as LogStreamEventType, NRa as DataSinkDashboardPage, Na as LogStreamProvider, Oa as DataSinkSummary, Pa as NodeUsageStat, ja as LogStreamDestinationInput, kRa as ErrorAnalyticsPage, ka as FailedRun } from "./index-BVCOwqsN.js";
2
+ import { $Ra as DataSinkDashboardPage, Ba as LogStreamEventType, Fa as DataSinkData, Ha as NodeUsageStat, Ia as DataSinkSummary, La as FailedRun, Pa as DashboardSummary, Ra as LogStreamDestination, Va as LogStreamProvider, XRa as InsightsPage, YRa as ErrorAnalyticsPage, za as LogStreamDestinationInput } from "./index-BY0V255h.js";
3
3
  export { type DashboardSummary, DataSinkDashboardPage, type DataSinkData, type DataSinkSummary, ErrorAnalyticsPage, type FailedRun, InsightsPage, type LogStreamDestination, type LogStreamDestinationInput, type LogStreamEventType, type LogStreamProvider, type NodeUsageStat };
@@ -1,5 +1,5 @@
1
1
  "use client";
2
- import { t as DataSinkDashboardPage } from "./DataSinkDashboardPage-BoyLrZnt.js";
3
- import { n as InsightsPage, t as ErrorAnalyticsPage } from "./InsightsPage-C-Nm9YNI.js";
2
+ import { t as DataSinkDashboardPage } from "./DataSinkDashboardPage-Dnp1yRYQ.js";
3
+ import { n as InsightsPage, t as ErrorAnalyticsPage } from "./InsightsPage-CVzNu4F7.js";
4
4
 
5
5
  export { DataSinkDashboardPage, ErrorAnalyticsPage, InsightsPage };
@@ -1,10 +1,10 @@
1
1
  "use client";
2
- import { Bn as matchesAdapterProvider, Hn as replaceAdapterConnections, Rn as connectionsForAdapter, Vn as newConnectionProviderKey, zn as isOptionalAdapter } from "./FluidGridsProvider-CPLfIarV.js";
2
+ import { Bn as matchesAdapterProvider, Hn as replaceAdapterConnections, Rn as connectionsForAdapter, Vn as newConnectionProviderKey, zn as isOptionalAdapter } from "./FluidGridsProvider-C-WGQwuT.js";
3
3
  import { r as useTr } from "./TranslationBridge-Da-TPgQm.js";
4
- import { r as useAgentsUsingConnection } from "./useAgentDefinitions-Bs_ci53W.js";
4
+ import { r as useAgentsUsingConnection } from "./useAgentDefinitions-Daa3fGVg.js";
5
5
  import { n as useConnections } from "./useConnections-BlB0gbOB.js";
6
6
  import { t as cn } from "./cn-QqidFIgr.js";
7
- import { a as SdkPermissionGate, t as FLUIDGRIDS_PERMISSIONS } from "./constants-dcxg6zG6.js";
7
+ import { a as SdkPermissionGate, t as FLUIDGRIDS_PERMISSIONS } from "./constants-65QV61nQ.js";
8
8
  import { n as useNavigationV2 } from "./useNavigationV2-C2WeqN7d.js";
9
9
  import { t as ConnectionFormDialog } from "./ConnectionFormDialog-Dr1-CTan.js";
10
10
  import { a as useRunners, t as RunnerStatusPill } from "./RunnerStatusPill-Bh7mEsPh.js";
@@ -1271,6 +1271,103 @@ function RunOnSection({ value, onChange, sectionLabelClassName }) {
1271
1271
  });
1272
1272
  }
1273
1273
 
1274
+ // src/modules/webhook-deliveries/lib/webhook-deliveries.ts
1275
+ const VALIDATION_FILTERS = [
1276
+ "all",
1277
+ "passed",
1278
+ "failed"
1279
+ ];
1280
+ function parseValidationFilter(value) {
1281
+ return value === "passed" || value === "failed" ? value : "all";
1282
+ }
1283
+ /** The `validationPassed` argument for a filter (undefined = both). */
1284
+ function validationPassedArg(filter) {
1285
+ if (filter === "passed") return true;
1286
+ if (filter === "failed") return false;
1287
+ }
1288
+ const FILTER_BLOCKED_PREFIX = "Blocked by filter:";
1289
+ function deliveryOutcome(delivery) {
1290
+ if (delivery.executionStarted || delivery.workflowRunId) return "STARTED";
1291
+ if (!delivery.validationPassed) return delivery.validationError || delivery.processedAt ? "VALIDATION_FAILED" : "PENDING";
1292
+ if (delivery.executionError?.startsWith(FILTER_BLOCKED_PREFIX)) return "FILTERED";
1293
+ if (delivery.executionError) return "FAILED";
1294
+ return "PENDING";
1295
+ }
1296
+ /** The status token classes for an outcome badge (semantic tokens only). */
1297
+ function outcomeTone(outcome) {
1298
+ switch (outcome) {
1299
+ case "STARTED": return "border-status-success-border bg-status-success-bg-subtle text-status-success-text";
1300
+ case "VALIDATION_FAILED":
1301
+ case "FAILED": return "border-status-error-border bg-status-error-bg-subtle text-status-error-text";
1302
+ case "FILTERED": return "border-status-warning-border bg-status-warning-bg-subtle text-status-warning-text";
1303
+ default: return "border-border bg-muted text-text-secondary";
1304
+ }
1305
+ }
1306
+ /** The status token class for the HTTP status the sender received. */
1307
+ function httpStatusTone(status) {
1308
+ if (status === null || status === void 0) return "text-text-secondary";
1309
+ if (status >= 200 && status < 300) return "text-status-success-text";
1310
+ if (status >= 400 && status < 500) return "text-status-warning-text";
1311
+ return "text-status-error-text";
1312
+ }
1313
+ /** The stored body as text: the handler stores the raw body string. */
1314
+ function payloadText(value) {
1315
+ if (value === null || value === void 0) return "";
1316
+ return typeof value === "string" ? value : JSON.stringify(value);
1317
+ }
1318
+ /** Size of the request body in bytes (UTF-8), or null with no body. */
1319
+ function payloadBytes(value) {
1320
+ const text = payloadText(value);
1321
+ return text ? new TextEncoder().encode(text).length : null;
1322
+ }
1323
+ function formatBytes(bytes) {
1324
+ if (bytes === null || bytes === void 0) return "—";
1325
+ if (bytes < 1024) return `${bytes} B`;
1326
+ if (bytes < 1048576) return `${(bytes / 1024).toFixed(1)} KB`;
1327
+ return `${(bytes / 1048576).toFixed(1)} MB`;
1328
+ }
1329
+ function formatDuration(ms) {
1330
+ if (ms === null || ms === void 0) return "—";
1331
+ if (ms < 1e3) return `${Math.round(ms)} ms`;
1332
+ return `${(ms / 1e3).toFixed(2)} s`;
1333
+ }
1334
+ /**
1335
+ * A payload for display: JSON is pretty-printed (including a body stored as
1336
+ * JSON text); anything else (form data, XML, plain text) is shown as sent.
1337
+ */
1338
+ function prettyPayload(value) {
1339
+ if (value === null || value === void 0) return "";
1340
+ if (typeof value === "string") try {
1341
+ return JSON.stringify(JSON.parse(value), null, 2);
1342
+ } catch {
1343
+ return value;
1344
+ }
1345
+ return JSON.stringify(value, null, 2);
1346
+ }
1347
+ /** Request headers as sorted [name, value] pairs (credentials arrive redacted). */
1348
+ function headerEntries(headers) {
1349
+ if (!headers || typeof headers !== "object" || Array.isArray(headers)) return [];
1350
+ return Object.entries(headers).map(([name, value]) => [name, typeof value === "string" ? value : JSON.stringify(value)]).sort(([a], [b]) => a.localeCompare(b));
1351
+ }
1352
+ /** A trigger's display name: its name, else "source / type". */
1353
+ function registrationLabel(registration) {
1354
+ if (!registration) return "—";
1355
+ return registration.name?.trim() || `${registration.eventSource} / ${registration.eventType}`;
1356
+ }
1357
+ /** A delivery timestamp in the viewer's locale. */
1358
+ function formatReceivedAt(iso) {
1359
+ if (!iso) return "—";
1360
+ const date = new Date(iso);
1361
+ return Number.isNaN(date.getTime()) ? "—" : date.toLocaleString();
1362
+ }
1363
+ /**
1364
+ * The deliveries page filtered to one trigger, relative to a page mounted
1365
+ * directly under the workflows routes (the builder, the runs list).
1366
+ */
1367
+ function webhookDeliveriesPath(registrationId) {
1368
+ return registrationId ? `../webhooks?registration=${encodeURIComponent(registrationId)}` : "../webhooks";
1369
+ }
1370
+
1274
1371
  // src/ui/popover.tsx
1275
1372
  const Popover$1 = PopoverPrimitive.Root;
1276
1373
  const PopoverTrigger$1 = PopoverPrimitive.Trigger;
@@ -1284,4 +1381,4 @@ const PopoverContent$1 = React.forwardRef(({ className, align = "center", sideOf
1284
1381
  }) }));
1285
1382
  PopoverContent$1.displayName = PopoverPrimitive.Content.displayName;
1286
1383
 
1287
- export { ConnectionSelector as a, StopWebhookTestListenerDocument as c, ListenForFormTestSubmissionDocument as d, RunOnSection as i, RegenerateEventRegistrationTokenDocument as l, PopoverContent$1 as n, WorkflowCallInputsDocument as o, PopoverTrigger$1 as r, WebhookTestListenerDocument as s, Popover$1 as t, ListenForWebhookTestEventDocument as u };
1384
+ export { RegenerateEventRegistrationTokenDocument as C, StopWebhookTestListenerDocument as S, ListenForFormTestSubmissionDocument as T, webhookDeliveriesPath as _, deliveryOutcome as a, WorkflowCallInputsDocument as b, formatReceivedAt as c, outcomeTone as d, parseValidationFilter as f, validationPassedArg as g, registrationLabel as h, VALIDATION_FILTERS as i, headerEntries as l, prettyPayload as m, PopoverContent$1 as n, formatBytes as o, payloadBytes as p, PopoverTrigger$1 as r, formatDuration as s, Popover$1 as t, httpStatusTone as u, RunOnSection as v, ListenForWebhookTestEventDocument as w, WebhookTestListenerDocument as x, ConnectionSelector as y };
@@ -1,10 +1,10 @@
1
1
  "use client";
2
2
  import { t as NodeTypeIcon } from "./node-type-icon-DEAztACh.js";
3
3
  import { A as useFlowStore, k as nodeAccent } from "./node-operation-selection-DHbtGNrG.js";
4
- import { B as nodeSubtitle, G as useNodeConfig, Un as getNodeDetail, V as nodeTitle, en as useNodeExecution } from "./FluidGridsProvider-CPLfIarV.js";
5
- import { i as NodeInputFields, n as useNodeEditorTab, r as NodeEditorTabs, t as NodeEditorTabBody } from "./node-editor-tab-body-CYeFTQr6.js";
4
+ import { B as nodeSubtitle, G as useNodeConfig, Un as getNodeDetail, V as nodeTitle, en as useNodeExecution } from "./FluidGridsProvider-C-WGQwuT.js";
5
+ import { i as NodeInputFields, n as useNodeEditorTab, r as NodeEditorTabs, t as NodeEditorTabBody } from "./node-editor-tab-body-ChLrBfKp.js";
6
6
  import { r as useTr } from "./TranslationBridge-Da-TPgQm.js";
7
- import { r as NodeExecutionActions } from "./schedule-panel-CBab8kSL.js";
7
+ import { r as NodeExecutionActions } from "./schedule-panel-7TtPt1t_.js";
8
8
  import { useEffect, useLayoutEffect, useMemo, useRef, useState } from "react";
9
9
  import { useReactFlow, useStore } from "@xyflow/react";
10
10
  import { Icon } from "@iconify/react";
@@ -1,5 +1,5 @@
1
1
  "use client";
2
- import { Wd as ErrorType } from "./graphql-types-D82O-0XY.js";
2
+ import { Wd as ErrorType } from "./graphql-types-dS3Fk9Z5.js";
3
3
 
4
4
  // src/modules/executions/utils/run-list-links.ts
5
5
  /**
@@ -1,5 +1,5 @@
1
1
  "use client";
2
- import { EI as WorkflowExecutionMode, bI as WorkflowAutonomyLevel } from "./graphql-types-D82O-0XY.js";
2
+ import { DI as WorkflowExecutionMode, xI as WorkflowAutonomyLevel } from "./graphql-types-dS3Fk9Z5.js";
3
3
  import { r as useTr } from "./TranslationBridge-Da-TPgQm.js";
4
4
  import { useMemo } from "react";
5
5
 
@@ -3,20 +3,21 @@ import { r as getFluidGridsConfig } from "./config-X97zrIvn.js";
3
3
  import { o as throwIfResultError, t as describeOperationError } from "./errors-xPZ-IbQd.js";
4
4
  import { n as getFluidGridsClient, r as getFluidGridsClientSafe } from "./client-Ctl4jmY3.js";
5
5
  import { A as useFlowStore } from "./node-operation-selection-DHbtGNrG.js";
6
- import { $ as SwitchRulesEditor, F as useRunGuard, H as optionText, J as isStringOptionList, L as asRecord, Q as ConditionTreeBuilder, R as coerceNumber, Tt as useSaveStatusStore, U as paramsFromOperation, V as nodeTitle, X as optionListValues, Y as optionListText, Z as resolveLoadOptionsSpec, an as parseParameterValue, at as missingRequiredParameters, dn as openRunQuotaUpgradePrompt, et as casesFromRules, in as formatParameterValue, it as boundFieldsOf, ln as isParamVisible, nt as parseMappingValue, on as structuredParameterType, t as FluidGridsContext, un as useFluidGridsAnalytics } from "./FluidGridsProvider-CPLfIarV.js";
6
+ import { $ as SwitchRulesEditor, F as useRunGuard, H as optionText, J as isStringOptionList, L as asRecord, Q as ConditionTreeBuilder, R as coerceNumber, Tt as useSaveStatusStore, U as paramsFromOperation, V as nodeTitle, X as optionListValues, Y as optionListText, Z as resolveLoadOptionsSpec, an as parseParameterValue, at as missingRequiredParameters, dn as openRunQuotaUpgradePrompt, et as casesFromRules, in as formatParameterValue, it as boundFieldsOf, ln as isParamVisible, nt as parseMappingValue, on as structuredParameterType, t as FluidGridsContext, un as useFluidGridsAnalytics } from "./FluidGridsProvider-C-WGQwuT.js";
7
7
  import { n as useBuilderReadOnly } from "./read-only-context-Dt9N9SIG.js";
8
8
  import { r as useTr } from "./TranslationBridge-Da-TPgQm.js";
9
9
  import { L as triggerSchedule, T as pauseSchedule, t as backfillSchedule, u as describeSchedule, z as unpauseSchedule } from "./api-CEnNq15C.js";
10
- import { on as PreviewScheduleDocument, t as useAgentDefinitionList, vt as useRunFromNodeEligibilityQuery } from "./useAgentDefinitions-Bs_ci53W.js";
10
+ import { on as PreviewScheduleDocument, t as useAgentDefinitionList, vt as useRunFromNodeEligibilityQuery } from "./useAgentDefinitions-Daa3fGVg.js";
11
11
  import { r as describeRule, s as isAgentNodeType } from "./agent-form-D0uLvzx4.js";
12
- import { a as ConnectionSelector, c as StopWebhookTestListenerDocument, d as ListenForFormTestSubmissionDocument, i as RunOnSection, l as RegenerateEventRegistrationTokenDocument, n as PopoverContent$1, o as WorkflowCallInputsDocument, r as PopoverTrigger$1, s as WebhookTestListenerDocument, t as Popover$1, u as ListenForWebhookTestEventDocument } from "./popover-DhwmsszC.js";
12
+ import { C as RegenerateEventRegistrationTokenDocument, S as StopWebhookTestListenerDocument, T as ListenForFormTestSubmissionDocument, _ as webhookDeliveriesPath, b as WorkflowCallInputsDocument, n as PopoverContent$1, r as PopoverTrigger$1, t as Popover$1, v as RunOnSection, w as ListenForWebhookTestEventDocument, x as WebhookTestListenerDocument, y as ConnectionSelector } from "./popover-CCJlf41J.js";
13
13
  import { a as collectExtensions } from "./quota-Cdt8yz7N.js";
14
- import { GI as WorkflowScheduleOverlapPolicy, PO as ScheduleType } from "./graphql-types-D82O-0XY.js";
15
- import { t as useGlobalStoreClient } from "./useGlobalStoreClient-B42oOe9Q.js";
16
- import { a as operatorSpec, c as ruleFromRow, i as normaliseAssertRules, n as describeAssertRuleProblem, o as readAssertRulesSetting, r as emptyAssertRuleRow, s as rowsFromRules, t as ASSERT_OPERATORS } from "./assert-rules-BbSyxL5d.js";
14
+ import { FO as ScheduleType, KI as WorkflowScheduleOverlapPolicy } from "./graphql-types-dS3Fk9Z5.js";
15
+ import { t as useGlobalStoreClient } from "./useGlobalStoreClient-BcwWGtm7.js";
16
+ import { a as operatorSpec, c as ruleFromRow, i as normaliseAssertRules, n as describeAssertRuleProblem, o as readAssertRulesSetting, r as emptyAssertRuleRow, s as rowsFromRules, t as ASSERT_OPERATORS } from "./assert-rules-DtQmtG1p.js";
17
17
  import { i as NativeSelect, o as StatusPill, t as FieldError, u as useResource } from "./shared-C0LCTtyh.js";
18
18
  import { r as normalizeCodeLanguage, t as CodeEditorField } from "./code-editor-field-Cv907s3W.js";
19
19
  import { useCallback, useContext, useEffect, useId, useMemo, useRef, useState } from "react";
20
+ import { Link } from "react-router";
20
21
  import { Icon } from "@iconify/react";
21
22
  import { cn } from "@burdenoff/fe-libs/utils";
22
23
  import { Fragment as Fragment$1, jsx, jsxs } from "react/jsx-runtime";
@@ -945,11 +946,28 @@ function CopyableUrl({ url, copyAriaLabel, testId, openLabel }) {
945
946
  });
946
947
  }
947
948
  /**
949
+ * Opens this trigger's webhook delivery logs. Hidden in read-only builders
950
+ * (embeds, template previews), which are not mounted under the workflows routes.
951
+ */
952
+ function WebhookDeliveriesLink({ registrationId }) {
953
+ const tr = useTr();
954
+ if (useBuilderReadOnly()) return null;
955
+ return /* @__PURE__ */ jsxs(Link, {
956
+ to: webhookDeliveriesPath(registrationId),
957
+ className: "inline-flex items-center gap-1 text-[11px] font-medium text-primary hover:underline",
958
+ "data-testid": "ndv-webhook-deliveries-link",
959
+ children: [/* @__PURE__ */ jsx(Icon, {
960
+ icon: "mdi:history",
961
+ className: "h-3.5 w-3.5"
962
+ }), tr("fluidgrids.builder.webhookUrlField.viewDeliveries", "View deliveries")]
963
+ });
964
+ }
965
+ /**
948
966
  * The webhook trigger's production URL. It is minted when the workflow is
949
967
  * saved and stays the same across versions, but it only ever runs the
950
968
  * workflow's ACTIVE version (BOFF-7513) — drafts are tried with the test URL.
951
969
  */
952
- function WebhookUrlField({ webhookUrl, loading }) {
970
+ function WebhookUrlField({ webhookUrl, loading, registrationId }) {
953
971
  const tr = useTr();
954
972
  const isActiveVersion = useFlowStore((s) => s.workflow.status === "ACTIVE");
955
973
  return /* @__PURE__ */ jsxs("div", {
@@ -964,14 +982,18 @@ function WebhookUrlField({ webhookUrl, loading }) {
964
982
  className: "rounded-full bg-primary/10 px-2 py-0.5 text-[10px] font-medium text-primary",
965
983
  children: tr("fluidgrids.builder.webhookUrlField.live", "Live")
966
984
  })]
967
- }), webhookUrl ? /* @__PURE__ */ jsxs(Fragment$1, { children: [/* @__PURE__ */ jsx(CopyableUrl, {
968
- url: webhookUrl,
969
- testId: "ndv-webhook-production-url",
970
- copyAriaLabel: tr("fluidgrids.builder.webhookUrlField.copyAriaLabel", "Copy webhook URL")
971
- }), /* @__PURE__ */ jsx("p", {
972
- className: "text-[11px] text-muted-foreground",
973
- children: isActiveVersion ? tr("fluidgrids.builder.webhookUrlField.activeHint", "Requests to this URL run this version of the workflow.") : tr("fluidgrids.builder.webhookUrlField.inactiveHint", "Requests to this URL run the workflow's active version only. Activate this version to make it live, or use a test URL to try it.")
974
- })] }) : /* @__PURE__ */ jsx("div", {
985
+ }), webhookUrl ? /* @__PURE__ */ jsxs(Fragment$1, { children: [
986
+ /* @__PURE__ */ jsx(CopyableUrl, {
987
+ url: webhookUrl,
988
+ testId: "ndv-webhook-production-url",
989
+ copyAriaLabel: tr("fluidgrids.builder.webhookUrlField.copyAriaLabel", "Copy webhook URL")
990
+ }),
991
+ /* @__PURE__ */ jsx("p", {
992
+ className: "text-[11px] text-muted-foreground",
993
+ children: isActiveVersion ? tr("fluidgrids.builder.webhookUrlField.activeHint", "Requests to this URL run this version of the workflow.") : tr("fluidgrids.builder.webhookUrlField.inactiveHint", "Requests to this URL run the workflow's active version only. Activate this version to make it live, or use a test URL to try it.")
994
+ }),
995
+ registrationId && /* @__PURE__ */ jsx(WebhookDeliveriesLink, { registrationId })
996
+ ] }) : /* @__PURE__ */ jsx("div", {
975
997
  className: "rounded-md border border-dashed border-border bg-muted/40 px-3 py-2 text-xs text-muted-foreground",
976
998
  children: loading ? tr("fluidgrids.builder.webhookUrlField.loading", "Loading webhook URL…") : tr("fluidgrids.builder.webhookUrlField.unsaved", "Save the workflow to generate its webhook URL.")
977
999
  })]
@@ -7219,7 +7241,7 @@ function NodeParamsForm({ config, nodeType, testIdPrefix = "ndv" }) {
7219
7241
  const tr = useTr();
7220
7242
  const edges = useFlowStore((state) => state.workflow.edges);
7221
7243
  const loopStatus = (nodeType === "internal:loop" || nodeType === "loop") && config.node ? loopReturnStatus(config.node.id, edges, typeof config.argsState.loopHandle === "string" ? config.argsState.loopHandle : "loop") : void 0;
7222
- const { params, argsState, mapping, pickerFields, connectionAdapters, selectedConnections, isWebhookTrigger, isFormTrigger, formUrl, triggerUrlError, isWebhookWait, webhookUrl, webhookUrlLoading, manualPushSetup, webhookRegistration, refetchWebhookRegistration, currentEdge, modeByField, dragField, setDragField, writeFixed, writeMapping, handleConnectionsChange, toggleMode, handleDropOnParam } = config;
7244
+ const { params, argsState, mapping, pickerFields, connectionAdapters, selectedConnections, isWebhookTrigger, isFormTrigger, formUrl, triggerUrlError, isWebhookWait, webhookUrl, webhookUrlLoading, manualPushSetup, webhookRegistration, refetchWebhookRegistration, webhookRegistrationId, currentEdge, modeByField, dragField, setDragField, writeFixed, writeMapping, handleConnectionsChange, toggleMode, handleDropOnParam } = config;
7223
7245
  const loadOptionsConnectionId = (() => {
7224
7246
  const adapterNames = new Set(connectionAdapters.map((a) => a.name));
7225
7247
  return selectedConnections.find((c) => adapterNames.has(c.adapter))?.connectionId ?? selectedConnections[0]?.connectionId;
@@ -7256,7 +7278,8 @@ function NodeParamsForm({ config, nodeType, testIdPrefix = "ndv" }) {
7256
7278
  }),
7257
7279
  isWebhookTrigger && /* @__PURE__ */ jsxs(Fragment$1, { children: [/* @__PURE__ */ jsx(WebhookUrlField, {
7258
7280
  webhookUrl,
7259
- loading: webhookUrlLoading
7281
+ loading: webhookUrlLoading,
7282
+ registrationId: webhookRegistrationId
7260
7283
  }), /* @__PURE__ */ jsx(WebhookTestListenerField, { nodeId: config.node?.id })] }),
7261
7284
  manualPushSetup && /* @__PURE__ */ jsx(ManualPushSetupField, {
7262
7285
  setup: manualPushSetup,
package/dist/settings.js CHANGED
@@ -1,5 +1,5 @@
1
1
  "use client";
2
- import { t as SettingsPage } from "./SettingsPage-CmIa107C.js";
2
+ import { t as SettingsPage } from "./SettingsPage-BSucNHrq.js";
3
3
  import { t as ManagedAiPolicyAuthorityProvider } from "./ManagedAiPolicyAuthority-BxwJ3ptd.js";
4
4
 
5
5
  export { ManagedAiPolicyAuthorityProvider, SettingsPage };
@@ -1,9 +1,9 @@
1
1
  "use client";
2
2
  import { A as useFlowStore, k as nodeAccent } from "./node-operation-selection-DHbtGNrG.js";
3
- import { B as nodeSubtitle, G as useNodeConfig, Un as getNodeDetail, V as nodeTitle, en as useNodeExecution } from "./FluidGridsProvider-CPLfIarV.js";
3
+ import { B as nodeSubtitle, G as useNodeConfig, Un as getNodeDetail, V as nodeTitle, en as useNodeExecution } from "./FluidGridsProvider-C-WGQwuT.js";
4
4
  import { t as NodeTypeIcon } from "./node-type-icon-DEAztACh.js";
5
- import { i as NodeInputFields, n as useNodeEditorTab, r as NodeEditorTabs, t as NodeEditorTabBody } from "./node-editor-tab-body-CYeFTQr6.js";
6
- import { r as NodeExecutionActions } from "./schedule-panel-CBab8kSL.js";
5
+ import { i as NodeInputFields, n as useNodeEditorTab, r as NodeEditorTabs, t as NodeEditorTabBody } from "./node-editor-tab-body-ChLrBfKp.js";
6
+ import { r as NodeExecutionActions } from "./schedule-panel-7TtPt1t_.js";
7
7
  import { r as useTr } from "./TranslationBridge-Da-TPgQm.js";
8
8
  import { useEffect, useState } from "react";
9
9
  import { Icon } from "@iconify/react";
@@ -1,5 +1,5 @@
1
1
  "use client";
2
- import { b as utf8Length } from "./workflow-code-transfer-50pRK3nx.js";
2
+ import { b as utf8Length } from "./workflow-code-transfer-BsLPUrKP.js";
3
3
 
4
4
  // src/utils/template-code.ts
5
5
  /** DD3: the largest `content.sources` the store accepts, as UTF-8 JSON. */
package/dist/templates.js CHANGED
@@ -1,5 +1,5 @@
1
1
  "use client";
2
- import { t as TemplatesPage } from "./TemplatesPage-DIVghCB6.js";
3
- import { t as TemplatePreview } from "./TemplatePreview-aKYt0Kad.js";
2
+ import { t as TemplatesPage } from "./TemplatesPage-DF5PK7CB.js";
3
+ import { t as TemplatePreview } from "./TemplatePreview-DwdGa8bH.js";
4
4
 
5
5
  export { TemplatePreview, TemplatesPage };
@@ -1,8 +1,8 @@
1
1
  "use client";
2
2
  import { o as throwIfResultError, r as isForbiddenError } from "./errors-xPZ-IbQd.js";
3
3
  import { n as getFluidGridsClient, r as getFluidGridsClientSafe } from "./client-Ctl4jmY3.js";
4
- import { Wd as ErrorType, aL as WorkflowTestRunSource, iL as WorkflowTestExpectedStatus, oL as WorkflowTestRunStatus } from "./graphql-types-D82O-0XY.js";
5
- import { a as operatorSpec, i as normaliseAssertRules, n as describeAssertRuleProblem } from "./assert-rules-BbSyxL5d.js";
4
+ import { Wd as ErrorType, aL as WorkflowTestExpectedStatus, oL as WorkflowTestRunSource, sL as WorkflowTestRunStatus } from "./graphql-types-dS3Fk9Z5.js";
5
+ import { a as operatorSpec, i as normaliseAssertRules, n as describeAssertRuleProblem } from "./assert-rules-DtQmtG1p.js";
6
6
  import { useCallback, useEffect, useMemo, useRef, useState } from "react";
7
7
 
8
8
  // src/generated/documents/wspace/AgentTokenDeltaDocument.ts
@@ -1,7 +1,7 @@
1
1
  "use client";
2
2
  import { o as throwIfResultError } from "./errors-xPZ-IbQd.js";
3
3
  import { n as getFluidGridsClient } from "./client-Ctl4jmY3.js";
4
- import { An as TriggerWorkflowDocument, Dn as EventRegistrationsDocument, En as NodeEndpointConfigsDocument, Fn as ExecutionDetailDocument, In as RunFromNodeDocument, Ln as ExecuteStepDocument, Mn as CreateWorkflowVersionDocument, Nn as CreateWorkflowDefinitionDocument, Pn as ExecutionsListDocument } from "./FluidGridsProvider-CPLfIarV.js";
4
+ import { An as TriggerWorkflowDocument, Dn as EventRegistrationsDocument, En as NodeEndpointConfigsDocument, Fn as ExecutionDetailDocument, In as RunFromNodeDocument, Ln as ExecuteStepDocument, Mn as CreateWorkflowVersionDocument, Nn as CreateWorkflowDefinitionDocument, Pn as ExecutionsListDocument } from "./FluidGridsProvider-C-WGQwuT.js";
5
5
  import { a as PauseExecutionDocument, i as ResumeExecutionDocument, n as TerminateExecutionDocument, o as CancelExecutionDocument, r as RetryNodeDocument, t as ExecutionStatsDocument } from "./ExecutionStatsDocument-6ixNZnBV.js";
6
6
  import { c as RunLogAppendedDocument, l as RunLogsDocument } from "./agent-form-D0uLvzx4.js";
7
7
  import { a as DashboardSummaryDocument, c as ImportWorkflowDocument, d as DeactivateWorkflowDefinitionDocument, f as ActivateWorkflowDefinitionDocument, i as WorkflowDefinitionsDocument, l as DuplicateWorkflowDocument, n as WorkflowRunsDocument, o as UpdateWorkflowDefinitionDocument, r as WorkflowRunDocument, s as RestoreWorkflowVersionDocument, t as WorkflowVersionsDocument, u as DeleteWorkflowDefinitionDocument } from "./WorkflowVersionsDocument-DRVOp8Uj.js";
@@ -2,12 +2,12 @@
2
2
  import { o as throwIfResultError, t as describeOperationError } from "./errors-xPZ-IbQd.js";
3
3
  import { n as getFluidGridsClient } from "./client-Ctl4jmY3.js";
4
4
  import { r as useTr } from "./TranslationBridge-Da-TPgQm.js";
5
- import { f as STATUS_COUNT_GROUP_BY, v as statusCountFilter, y as statusCountsOf } from "./useExecutions-6P7ohzlh.js";
5
+ import { f as STATUS_COUNT_GROUP_BY, v as statusCountFilter, y as statusCountsOf } from "./useExecutions-wka2Z5w3.js";
6
6
  import { n as useNavigationV2 } from "./useNavigationV2-C2WeqN7d.js";
7
7
  import { useCallback, useEffect, useRef, useState } from "react";
8
8
  import { Icon } from "@iconify/react";
9
9
  import { jsx, jsxs } from "react/jsx-runtime";
10
- import { AlertDialog, AlertDialogAction, AlertDialogCancel, AlertDialogContent, AlertDialogDescription, AlertDialogFooter, AlertDialogHeader, AlertDialogTitle } from "@burdenoff/fe-libs/ui";
10
+ import { AlertDialog, AlertDialogAction, AlertDialogCancel, AlertDialogContent, AlertDialogDescription, AlertDialogFooter, AlertDialogHeader, AlertDialogTitle, Input, Label } from "@burdenoff/fe-libs/ui";
11
11
 
12
12
  // src/generated/documents/wspace/SetWorkflowRunVersioningOverrideDocument.ts
13
13
  const SetWorkflowRunVersioningOverrideDocument = {
@@ -1878,6 +1878,91 @@ function ConfirmStopRunDialog({ open, workflowName, count = 1, busy, onConfirm,
1878
1878
  });
1879
1879
  }
1880
1880
 
1881
+ // src/modules/run-control/utils/activity-options.ts
1882
+ const EMPTY_ACTIVITY_OPTIONS_FORM = Object.freeze({
1883
+ maxRetries: "",
1884
+ retryDelaySeconds: "",
1885
+ startToCloseSeconds: "",
1886
+ scheduleToCloseSeconds: "",
1887
+ heartbeatSeconds: ""
1888
+ });
1889
+ /** Milliseconds from a seconds field ("" leaves the option unchanged). */
1890
+ function optionalMs(text) {
1891
+ const value = text.trim();
1892
+ if (!value) return void 0;
1893
+ const seconds = Number(value);
1894
+ return Number.isFinite(seconds) && seconds > 0 ? Math.round(seconds * 1e3) : null;
1895
+ }
1896
+ function optionalInt(text) {
1897
+ const value = text.trim();
1898
+ if (!value) return void 0;
1899
+ return /^\d+$/.test(value) ? Number(value) : null;
1900
+ }
1901
+ /** The options input from the form; null when a field does not parse or all are empty. */
1902
+ function activityOptionsFrom(form) {
1903
+ const maxRetries = optionalInt(form.maxRetries);
1904
+ const retryDelay = optionalMs(form.retryDelaySeconds);
1905
+ const startToClose = optionalMs(form.startToCloseSeconds);
1906
+ const scheduleToClose = optionalMs(form.scheduleToCloseSeconds);
1907
+ const heartbeat = optionalMs(form.heartbeatSeconds);
1908
+ if ([
1909
+ maxRetries,
1910
+ retryDelay,
1911
+ startToClose,
1912
+ scheduleToClose,
1913
+ heartbeat
1914
+ ].includes(null)) return null;
1915
+ const options = {};
1916
+ const retry = {};
1917
+ if (maxRetries !== void 0) retry.maxRetries = maxRetries;
1918
+ if (retryDelay !== void 0) retry.retryDelay = retryDelay;
1919
+ if (Object.keys(retry).length > 0) options.retry = retry;
1920
+ if (startToClose !== void 0) options.startToCloseTimeoutMs = startToClose;
1921
+ if (scheduleToClose !== void 0) options.scheduleToCloseTimeoutMs = scheduleToClose;
1922
+ if (heartbeat !== void 0) options.heartbeatTimeoutMs = heartbeat;
1923
+ return Object.keys(options).length > 0 ? options : null;
1924
+ }
1925
+
1926
+ // src/modules/run-control/components/ActivityOptionsFields.tsx
1927
+ /**
1928
+ * The activity options fields (spec code-first 11 §2.28): retry count, first
1929
+ * retry delay and the three timeouts, in seconds. Shared by the run page's
1930
+ * "Change options" dialog and the Runs list's UPDATE_ACTIVITY_OPTIONS batch
1931
+ * job (§2.19). Each input's id and test id is `${idPrefix}-${field}`.
1932
+ */
1933
+ function ActivityOptionsFields({ idPrefix, value, onChange }) {
1934
+ const tr = useTr();
1935
+ const fields = [
1936
+ ["maxRetries", tr("fluidgrids.runControl.activities.maxRetries", "Max retries")],
1937
+ ["retryDelaySeconds", tr("fluidgrids.runControl.activities.retryDelay", "First retry delay (s)")],
1938
+ ["startToCloseSeconds", tr("fluidgrids.runControl.activities.startToClose", "Start-to-close timeout (s)")],
1939
+ ["scheduleToCloseSeconds", tr("fluidgrids.runControl.activities.scheduleToClose", "Schedule-to-close timeout (s)")],
1940
+ ["heartbeatSeconds", tr("fluidgrids.runControl.activities.heartbeat", "Heartbeat timeout (s)")]
1941
+ ];
1942
+ return /* @__PURE__ */ jsxs("div", {
1943
+ className: "grid gap-3 sm:grid-cols-2",
1944
+ children: [fields.map(([field, label]) => /* @__PURE__ */ jsxs("div", {
1945
+ className: "space-y-1.5",
1946
+ children: [/* @__PURE__ */ jsx(Label, {
1947
+ htmlFor: `${idPrefix}-${field}`,
1948
+ children: label
1949
+ }), /* @__PURE__ */ jsx(Input, {
1950
+ id: `${idPrefix}-${field}`,
1951
+ inputMode: "decimal",
1952
+ value: value[field],
1953
+ onChange: (event) => onChange({
1954
+ ...value,
1955
+ [field]: event.target.value
1956
+ }),
1957
+ "data-testid": `${idPrefix}-${field}`
1958
+ })]
1959
+ }, field)), /* @__PURE__ */ jsx("p", {
1960
+ className: "text-xs text-text-secondary sm:col-span-2",
1961
+ children: tr("fluidgrids.runControl.activities.optionsHint", "Empty fields stay as they are. The change applies from the next attempt.")
1962
+ })]
1963
+ });
1964
+ }
1965
+
1881
1966
  // src/modules/executions/hooks/useDurableParity.ts
1882
1967
  /**
1883
1968
  * Durable-function parity reads and writes of the run page and the Runs list
@@ -2085,4 +2170,4 @@ function useRunStatusCounts(input, enabled) {
2085
2170
  };
2086
2171
  }
2087
2172
 
2088
- export { DurableParityRunFieldsDocument as _, useRunStatusCounts as a, errorAdvice as c, NodeStatusBadge as d, runStatusLabels as f, WorkflowRunMetadataDocument as g, WorkflowRunPendingDocument as h, useRunPending as i, needsReconnect as l, WorkflowRunsCountDocument as m, useDurableParityRunFields as n, ConfirmStopRunDialog as o, RUN_STATUS_CONFIG as p, useRunMetadata as r, ADVICE_ERROR_TYPES as s, setRunVersioningOverride as t, ExecutionStatusBadge as u, SetWorkflowRunVersioningOverrideDocument as v };
2173
+ export { WorkflowRunsCountDocument as _, useRunStatusCounts as a, DurableParityRunFieldsDocument as b, activityOptionsFrom as c, errorAdvice as d, needsReconnect as f, RUN_STATUS_CONFIG as g, runStatusLabels as h, useRunPending as i, ConfirmStopRunDialog as l, NodeStatusBadge as m, useDurableParityRunFields as n, ActivityOptionsFields as o, ExecutionStatusBadge as p, useRunMetadata as r, EMPTY_ACTIVITY_OPTIONS_FORM as s, setRunVersioningOverride as t, ADVICE_ERROR_TYPES as u, WorkflowRunPendingDocument as v, SetWorkflowRunVersioningOverrideDocument as x, WorkflowRunMetadataDocument as y };
@@ -1,8 +1,8 @@
1
1
  "use client";
2
2
  import { n as getFluidGridsClient } from "./client-Ctl4jmY3.js";
3
- import { An as TriggerWorkflowDocument, Fn as ExecutionDetailDocument, Pn as ExecutionsListDocument, dn as openRunQuotaUpgradePrompt, un as useFluidGridsAnalytics } from "./FluidGridsProvider-CPLfIarV.js";
3
+ import { An as TriggerWorkflowDocument, Fn as ExecutionDetailDocument, Pn as ExecutionsListDocument, dn as openRunQuotaUpgradePrompt, un as useFluidGridsAnalytics } from "./FluidGridsProvider-C-WGQwuT.js";
4
4
  import { a as PauseExecutionDocument, i as ResumeExecutionDocument, n as TerminateExecutionDocument, o as CancelExecutionDocument, r as RetryNodeDocument, t as ExecutionStatsDocument } from "./ExecutionStatsDocument-6ixNZnBV.js";
5
- import { hO as RunGroupBy, xF as VersioningBehavior } from "./graphql-types-D82O-0XY.js";
5
+ import { SF as VersioningBehavior, gO as RunGroupBy } from "./graphql-types-dS3Fk9Z5.js";
6
6
  import { g as useExecutionsStore } from "./config-X97zrIvn.js";
7
7
  import { l as REPLAY_WORKFLOW_RUN, u as RETRY_WORKFLOW_RUNS } from "./operations-D7o-gUzy.js";
8
8
  import { o as throwIfResultError } from "./errors-xPZ-IbQd.js";
@@ -1,5 +1,5 @@
1
1
  "use client";
2
- import { t as FluidGridsContext } from "./FluidGridsProvider-CPLfIarV.js";
2
+ import { t as FluidGridsContext } from "./FluidGridsProvider-C-WGQwuT.js";
3
3
  import { n as getGlobalStoreClient } from "./global-client-DP_Wxe5t.js";
4
4
  import { useContext } from "react";
5
5
 
@@ -1,6 +1,6 @@
1
1
  "use client";
2
2
  import { n as getFluidGridsClient } from "./client-Ctl4jmY3.js";
3
- import { dn as openRunQuotaUpgradePrompt, un as useFluidGridsAnalytics } from "./FluidGridsProvider-CPLfIarV.js";
3
+ import { dn as openRunQuotaUpgradePrompt, un as useFluidGridsAnalytics } from "./FluidGridsProvider-C-WGQwuT.js";
4
4
  import { r as useTr } from "./TranslationBridge-Da-TPgQm.js";
5
5
  import { i as emitRunStarted } from "./fluidgridsEvents-Dm5CaHtr.js";
6
6
  import { o as throwIfResultError, t as describeOperationError } from "./errors-xPZ-IbQd.js";
@@ -1,9 +1,9 @@
1
1
  "use client";
2
2
  import { o as throwIfResultError, t as describeOperationError } from "./errors-xPZ-IbQd.js";
3
3
  import { n as getFluidGridsClient, r as getFluidGridsClientSafe } from "./client-Ctl4jmY3.js";
4
- import { Cn as signalPayloadCard, bn as parseRawSignalPayload, xn as payloadFromCardValues } from "./FluidGridsProvider-CPLfIarV.js";
4
+ import { Cn as signalPayloadCard, bn as parseRawSignalPayload, xn as payloadFromCardValues } from "./FluidGridsProvider-C-WGQwuT.js";
5
5
  import { r as useTr } from "./TranslationBridge-Da-TPgQm.js";
6
- import { uf as ExecutionKind } from "./graphql-types-D82O-0XY.js";
6
+ import { uf as ExecutionKind } from "./graphql-types-dS3Fk9Z5.js";
7
7
  import { forwardRef, useCallback, useEffect, useImperativeHandle, useMemo, useRef, useState } from "react";
8
8
  import { Icon } from "@iconify/react";
9
9
  import { cn } from "@burdenoff/fe-libs/utils";
@@ -3,8 +3,8 @@ import { o as throwIfResultError, t as describeOperationError } from "./errors-x
3
3
  import { n as getFluidGridsClient } from "./client-Ctl4jmY3.js";
4
4
  import { r as useTr } from "./TranslationBridge-Da-TPgQm.js";
5
5
  import { o as UpdateWorkflowDefinitionDocument } from "./WorkflowVersionsDocument-DRVOp8Uj.js";
6
- import { t as QuotaExhaustedDialog } from "./QuotaExhaustedDialog-DTpI0jfj.js";
7
- import { o as buildExportDownload } from "./workflow-code-transfer-50pRK3nx.js";
6
+ import { t as QuotaExhaustedDialog } from "./QuotaExhaustedDialog-YjKgRTmu.js";
7
+ import { o as buildExportDownload } from "./workflow-code-transfer-BsLPUrKP.js";
8
8
  import { t as downloadBlob } from "./workflow-transfer-CQnQC-ke.js";
9
9
  import { useCallback, useEffect, useRef, useState } from "react";
10
10
  import { jsx } from "react/jsx-runtime";
@@ -3,7 +3,7 @@ import { n as getFluidGridsClient } from "./client-Ctl4jmY3.js";
3
3
  import { r as getFluidGridsConfig } from "./config-X97zrIvn.js";
4
4
  import { a as DashboardSummaryDocument, c as ImportWorkflowDocument, d as DeactivateWorkflowDefinitionDocument, f as ActivateWorkflowDefinitionDocument, i as WorkflowDefinitionsDocument, l as DuplicateWorkflowDocument, n as WorkflowRunsDocument, o as UpdateWorkflowDefinitionDocument, r as WorkflowRunDocument, s as RestoreWorkflowVersionDocument, t as WorkflowVersionsDocument, u as DeleteWorkflowDefinitionDocument } from "./WorkflowVersionsDocument-DRVOp8Uj.js";
5
5
  import { t as WorkflowDefinitionDocument } from "./WorkflowDefinitionDocument-DZLbTPUZ.js";
6
- import { An as TriggerWorkflowDocument, Mn as CreateWorkflowVersionDocument, Nn as CreateWorkflowDefinitionDocument, dn as openRunQuotaUpgradePrompt, un as useFluidGridsAnalytics } from "./FluidGridsProvider-CPLfIarV.js";
6
+ import { An as TriggerWorkflowDocument, Mn as CreateWorkflowVersionDocument, Nn as CreateWorkflowDefinitionDocument, dn as openRunQuotaUpgradePrompt, un as useFluidGridsAnalytics } from "./FluidGridsProvider-C-WGQwuT.js";
7
7
  import { o as throwIfResultError } from "./errors-xPZ-IbQd.js";
8
8
  import { a as emitOperationErrorEvent, i as emitFluidGridsEvent } from "./token-refresh-link-BjN7H4qA.js";
9
9
  import { r as useTr } from "./TranslationBridge-Da-TPgQm.js";
@@ -1,8 +1,8 @@
1
1
  "use client";
2
- import { n as WorkflowBuilderCore, t as WorkflowBuilder } from "./WorkflowBuilder-knGFBAAk.js";
3
- import { t as WorkflowBuilder$1 } from "./WorkflowBuilder-BsDvbIpS.js";
2
+ import { n as WorkflowBuilderCore, t as WorkflowBuilder } from "./WorkflowBuilder-CjsO7i-D.js";
3
+ import { t as WorkflowBuilder$1 } from "./WorkflowBuilder-DkzzbrNn.js";
4
4
  import { A as useFlowStore } from "./node-operation-selection-DHbtGNrG.js";
5
- import { m as refetchStoreNodes } from "./FluidGridsProvider-CPLfIarV.js";
6
- import { t as WorkflowSearchRedirect } from "./WorkflowSearchRedirect-DFsQzQw9.js";
5
+ import { m as refetchStoreNodes } from "./FluidGridsProvider-C-WGQwuT.js";
6
+ import { t as WorkflowSearchRedirect } from "./WorkflowSearchRedirect-0MLrCjDn.js";
7
7
 
8
8
  export { WorkflowBuilder, WorkflowBuilderCore, WorkflowBuilder$1 as WorkflowBuilderPage, WorkflowSearchRedirect, refetchStoreNodes, useFlowStore };
@@ -1,5 +1,5 @@
1
1
  "use client";
2
- import { DI as WorkflowExportFormat, Ef as FidelityLevel } from "./graphql-types-D82O-0XY.js";
2
+ import { Ef as FidelityLevel, OI as WorkflowExportFormat } from "./graphql-types-dS3Fk9Z5.js";
3
3
 
4
4
  // src/utils/workflow-code-transfer.ts
5
5
  const CODE_EXPORT_FORMATS = [
@@ -1,6 +1,6 @@
1
1
 
2
2
  import { c as resetFluidGridsConfig, i as WorkflowSavedResult, l as resetFluidGridsExecutionState, n as FluidGridsConfig, u as setFluidGridsConfig } from "./index-72XFgvbn.js";
3
- import { D as refreshNodeRegistry, T as setFluidGridsClient, _ as resetGlobalStoreClient, a as FluidGridsPermissionsProviderProps, i as FluidGridsPermissionsProvider, n as FluidGridsPermission, t as FLUIDGRIDS_PERMISSIONS, v as setGlobalStoreClient, w as resetFluidGridsClient } from "./constants-svpG-QrV.js";
3
+ import { D as refreshNodeRegistry, T as setFluidGridsClient, _ as resetGlobalStoreClient, a as FluidGridsPermissionsProviderProps, i as FluidGridsPermissionsProvider, n as FluidGridsPermission, t as FLUIDGRIDS_PERMISSIONS, v as setGlobalStoreClient, w as resetFluidGridsClient } from "./constants-CLd2omuS.js";
4
4
  import { i as Translator, n as FluidGridsTranslationProvider, r as FluidGridsTranslationProviderProps } from "./TranslationBridge-Bd4aJKMs.js";
5
5
  import { n as ManagedAiRequestScope, t as ManagedAiPolicyAuthorityProvider } from "./ManagedAiPolicyAuthority-DM3t3wNr.js";
6
6
  import { h as useFluidGridsFlagsSettled, y as useSelfHostedWorkersEnabled } from "./index-B4g88tCa.js";