@burdenoff/fluidgrids-fe-sdk 2026.1112.4 → 2026.1112.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (75) hide show
  1. package/dist/{AiStudioPage-C-jio5Bz.js → AiStudioPage-BSLdKT0H.js} +10 -10
  2. package/dist/{ApprovalInboxPage-D8vhnloO.js → ApprovalInboxPage-QAJim81n.js} +3 -2
  3. package/dist/{DataSinkDashboardPage-CRBsNjoS.js → DataSinkDashboardPage-kyzcjpzL.js} +4 -4
  4. package/dist/{DataTablesPage-DoVBkb_T.js → DataTablesPage-Dm-dzVPD.js} +4 -4
  5. package/dist/{EntityTagPicker-Dk3CufFt.js → EntityTagPicker-dxfzv8aO.js} +1 -1
  6. package/dist/{ExecutionDetailPage-Cw4zyaIG.js → ExecutionDetailPage-B9eEep77.js} +977 -509
  7. package/dist/{ExecutionsListPage-BgeqwVr2.js → ExecutionsListPage-DuuPSVEj.js} +831 -146
  8. package/dist/{FailureTriagePanel-BzD4UJU5.js → FailureTriagePanel-D4lJ4zqQ.js} +1 -1
  9. package/dist/{FluidGridsProvider-BFfTxl9m.js → FluidGridsProvider-B1hgCbxG.js} +7 -7
  10. package/dist/{HistoryPage-DktteURI.js → HistoryPage-C7NwkVNC.js} +4 -4
  11. package/dist/{HumanRequestCard-mOhr-Ic9.js → HumanRequestCard-lbWDpWd7.js} +4 -216
  12. package/dist/{InsightsPage-2jnYlozA.js → InsightsPage-D9B_qW8e.js} +10 -10
  13. package/dist/{MissingNodesInstallModal-C0wPwR0Q.js → MissingNodesInstallModal-BkkgeFeN.js} +1 -1
  14. package/dist/{NodesPage-Dhg5Q2R5.js → NodesPage-BEeUbIts.js} +4 -4
  15. package/dist/{QuotaExhaustedDialog-BKZ9moP8.js → QuotaExhaustedDialog-Bj7AG_0y.js} +1 -1
  16. package/dist/{RunnersPage-CLCOCclc.js → RunnersPage-D9Bgod_d.js} +4 -4
  17. package/dist/{SettingsPage-BaM98QU_.js → SettingsPage-k21044-Z.js} +16 -16
  18. package/dist/{TagFilterSelect-VC6JMK3F.js → TagFilterSelect-CqhxcDjh.js} +1 -1
  19. package/dist/{TaskQueuesPage-C3R5ZoKs.js → TaskQueuesPage-B86p51gH.js} +2 -2
  20. package/dist/{TemplateCard-DYDVNYo6.js → TemplateCard-DanOe65C.js} +3 -3
  21. package/dist/{TemplateConfigurationModal-BzdkGWim.js → TemplateConfigurationModal-CeMpPEhT.js} +3 -3
  22. package/dist/{TemplateDetailPanel-s4EqQhra.js → TemplateDetailPanel-DnoA6mC3.js} +2 -2
  23. package/dist/{TemplatePreview-B_-zS_Mm.js → TemplatePreview-BFMsDQif.js} +4 -4
  24. package/dist/{TemplatesPage-OIMd6cIl.js → TemplatesPage-C7f2xq12.js} +14 -14
  25. package/dist/{VariablesPage-67WR_lVE.js → VariablesPage-BtoLjmUA.js} +1 -1
  26. package/dist/{VersionDiffDialog-Cp2doV3f.js → VersionDiffDialog-pLpG_I1r.js} +4 -4
  27. package/dist/{WorkflowBuilder-DD4UIAjC.js → WorkflowBuilder-B8PtcT0Q.js} +12 -12
  28. package/dist/{WorkflowBuilder-B2tIOPi0.js → WorkflowBuilder-D9W8hQTO.js} +7 -7
  29. package/dist/{WorkflowProposalCard-U31u1qcw.js → WorkflowProposalCard-BjYAZH3q.js} +1 -1
  30. package/dist/{WorkflowSearchRedirect-BhXzWDj7.js → WorkflowSearchRedirect-iPQBL6WO.js} +1 -1
  31. package/dist/{WorkflowShareDialog-Dv46nAyh.js → WorkflowShareDialog-DB-qJLB2.js} +1 -1
  32. package/dist/{WorkflowsList-BV-2J_gG.js → WorkflowsList-rOxlI49U.js} +13 -13
  33. package/dist/{agentTools-EVdEThES.js → agentTools-DlPHMfhA.js} +4 -4
  34. package/dist/{api-DwaHAJtA.js → api-Dvitj1aT.js} +1 -1
  35. package/dist/{api-C8WmUejq.js → api-JpNuowX4.js} +1 -1
  36. package/dist/{canvasNoteTools-C5Vf0pxu.js → canvasNoteTools-CkAsMSvt.js} +3 -3
  37. package/dist/{code-editor-field-o7qp9eTq.js → code-editor-field-yJZEDJBi.js} +2 -2
  38. package/dist/{constants-B2lhWNoN.js → constants-dcxg6zG6.js} +2 -2
  39. package/dist/{definition-canvas-F8DGty5m.js → definition-canvas-Bshn_dSP.js} +1 -1
  40. package/dist/executions.js +2 -2
  41. package/dist/{flow-builder-Dn4PCWuf.js → flow-builder-DUkCKl-S.js} +187 -69
  42. package/dist/{graphql-operation-types-BdU65FNm.js → graphql-operation-types-z2oXfQvM.js} +10 -1
  43. package/dist/history.js +1 -1
  44. package/dist/{index-DbTgk7dK.d.ts → index-u-kM0seP.d.ts} +3 -2
  45. package/dist/index.d.ts +1 -1
  46. package/dist/index.js +40 -39
  47. package/dist/{node-detail-view-kWiwJEKr.js → node-detail-view-ApMQwQRQ.js} +18 -18
  48. package/dist/{node-editor-tab-body-C71Y0fRJ.js → node-editor-tab-body-DIcmar84.js} +6 -6
  49. package/dist/{node-endpoint-configs-BrzQMy10.js → node-endpoint-configs-typvqw2c.js} +1 -1
  50. package/dist/{node-operation-selection-icAhaNza.js → node-operation-selection-DAbS6jSY.js} +4 -4
  51. package/dist/nodes.js +1 -1
  52. package/dist/observability.d.ts +1 -1
  53. package/dist/observability.js +2 -2
  54. package/dist/{popover-v7g8TWmm.js → popover-DOeSGQOG.js} +3 -3
  55. package/dist/{quick-config-panel-C84vsDYD.js → quick-config-panel-Pm5nkZVr.js} +6 -6
  56. package/dist/{schedule-panel-BrNKy9DY.js → schedule-panel-Dizqz9eA.js} +29 -29
  57. package/dist/settings.js +1 -1
  58. package/dist/{sidebar-node-editor-D-2lPHwq.js → sidebar-node-editor-BNub2vUq.js} +4 -4
  59. package/dist/templates.js +2 -2
  60. package/dist/{useAgentDefinitions-DSU8Eek4.js → useAgentDefinitions-Uy6nhpKN.js} +1 -1
  61. package/dist/{useDurableParity-fFmfa97r.js → useDurableParity-Cb9nOdE8.js} +191 -4
  62. package/dist/{useEntityTags-C8rPBi6W.js → useEntityTags-D5C0tdLs.js} +1 -1
  63. package/dist/{useExecutions-DNGW4yxG.js → useExecutions-DJXtbA15.js} +59 -48
  64. package/dist/useHumanRequests-ZiR0sSzS.js +218 -0
  65. package/dist/{useObservability-u-MZCWUV.js → useObservability-Dfgh4yjv.js} +1 -1
  66. package/dist/{useRunHistory-x9bVUB9T.js → useRunHistory-BZQ3t68Q.js} +2 -2
  67. package/dist/{useWorkflowCodeExport-CV3SZeKm.js → useWorkflowCodeExport-D0zapXXm.js} +2 -2
  68. package/dist/{useWorkflows-CVb5zXKt.js → useWorkflows-CP-d3ygY.js} +2 -2
  69. package/dist/workflow-builder.js +5 -5
  70. package/dist/workflow-host.js +1 -1
  71. package/dist/workflow-pages.d.ts +1 -1
  72. package/dist/workflow-pages.js +19 -19
  73. package/dist/workflow-preview.js +4 -4
  74. package/dist/workflows-list.js +1 -1
  75. package/package.json +1 -1
@@ -1,7 +1,7 @@
1
1
  "use client";
2
2
  import { r as useTr } from "./TranslationBridge-Da-TPgQm.js";
3
3
  import { _ as throwIfResultError, n as getFluidGridsClient } from "./client-C9XSzSXr.js";
4
- import { An as SetRunFailureTriageEnabledDocument, _n as RunFailureClustersDocument, et as DismissRunFailureClusterDocument, gt as FgTriageFailedRunsDocument, vn as RunFailureTriageSettingsDocument } from "./graphql-operation-types-BdU65FNm.js";
4
+ import { An as SetRunFailureTriageEnabledDocument, _n as RunFailureClustersDocument, et as DismissRunFailureClusterDocument, gt as FgTriageFailedRunsDocument, vn as RunFailureTriageSettingsDocument } from "./graphql-operation-types-z2oXfQvM.js";
5
5
  import { qD as RunFailureClusterStatus } from "./graphql-types-v6CTGwA0.js";
6
6
  import { useCallback, useEffect, useState } from "react";
7
7
  import { Icon } from "@iconify/react";
@@ -2,14 +2,14 @@
2
2
  import { t as __exportAll } from "./rolldown-runtime-hDbaFkMy.js";
3
3
  import { C as resetFluidGridsConfig, E as validateTrustedOrigin, T as setFluidGridsConfig, _ as throwIfResultError, a as resetFluidGridsClient, d as emitFluidGridsEvent, f as emitOperationErrorEvent, m as describeOperationError, n as getFluidGridsClient, o as setFluidGridsClient, p as emitRunCompletedOnce, r as getFluidGridsClientSafe, s as waitForFluidGridsClient, t as createFluidGridsClient, w as resetFluidGridsExecutionState, x as getFluidGridsConfig } from "./client-C9XSzSXr.js";
4
4
  import { i as getGlobalStoreClient, o as resetGlobalStoreClient, r as createGlobalStoreClient, s as setGlobalStoreClient, t as provideNodeRegistryRefresh } from "./node-registry-refresh-Dy0uRg9f.js";
5
- import { A as nodeAccent, C as nodeAdaptersOf, D as NodeCard, E as resolveOutputHandles, H as useFlowStore, I as partitionStickyNotes, L as resolveStickyColor, N as DEFAULT_STICKY_COLOR, O as NodeCardBody, P as STICKY_COLORS, R as stickySurfaceStyle, T as resolveInputHandles, V as STICKY_NOTE_TYPE, W as isNodeTrigger, _ as LogicNodeCard, b as alignPlainOutputEdges, i as WAIT_FOR_SIGNAL_NODE_TYPE, j as NodeTypeIcon, k as NodeCardHeader, l as interfaceFields, m as readSignalName, n as synchronizeOperationUpdate, p as readCodeWorkflowState, r as CODE_WORKFLOW_NODE_TYPE, t as resolveOperationName, u as interfaceHandlers, v as InputHandles, w as outputHandlesSpacerHeight, x as hasNodeManifest, y as OutputHandles } from "./node-operation-selection-icAhaNza.js";
5
+ import { A as nodeAccent, C as nodeAdaptersOf, D as NodeCard, E as resolveOutputHandles, H as useFlowStore, I as partitionStickyNotes, L as resolveStickyColor, N as DEFAULT_STICKY_COLOR, O as NodeCardBody, P as STICKY_COLORS, R as stickySurfaceStyle, T as resolveInputHandles, V as STICKY_NOTE_TYPE, W as isNodeTrigger, _ as LogicNodeCard, b as alignPlainOutputEdges, i as WAIT_FOR_SIGNAL_NODE_TYPE, j as NodeTypeIcon, k as NodeCardHeader, l as interfaceFields, m as readSignalName, n as synchronizeOperationUpdate, p as readCodeWorkflowState, r as CODE_WORKFLOW_NODE_TYPE, t as resolveOperationName, u as interfaceHandlers, v as InputHandles, w as outputHandlesSpacerHeight, x as hasNodeManifest, y as OutputHandles } from "./node-operation-selection-DAbS6jSY.js";
6
6
  import { n as FluidGridsTranslationProvider, r as useTr, t as ENGLISH_FALLBACK_TRANSLATOR } from "./TranslationBridge-Da-TPgQm.js";
7
7
  import { s as useDurableFunctionNodesEnabled } from "./feature-flags-DM5myWaD.js";
8
- import { Dn as SaveWorkflowDraftDocument, M as CreateWorkflowDefinitionDocument, Mt as NodePaletteEntriesDocument, Or as WorkflowDefinitionDocument, Yn as TriggerWorkflowDocument, ct as ExecutionDetailDocument, h as BuilderRunStatusDocument, jt as NodeManifestsDocument, m as BuilderRunNodeDetailsDocument, ot as EventRegistrationsDocument, st as ExecuteStepDocument, yn as RunFromNodeDocument, z as CreateWorkflowVersionDocument } from "./graphql-operation-types-BdU65FNm.js";
8
+ import { Dn as SaveWorkflowDraftDocument, M as CreateWorkflowDefinitionDocument, Mt as NodePaletteEntriesDocument, Or as WorkflowDefinitionDocument, Yn as TriggerWorkflowDocument, ct as ExecutionDetailDocument, h as BuilderRunStatusDocument, jt as NodeManifestsDocument, m as BuilderRunNodeDetailsDocument, ot as EventRegistrationsDocument, st as ExecuteStepDocument, yn as RunFromNodeDocument, z as CreateWorkflowVersionDocument } from "./graphql-operation-types-z2oXfQvM.js";
9
9
  import { a as collectExtensions, n as QUOTA_EXHAUSTED_CODE, o as errorCodesOf, r as RUNS_QUOTA_NAME, s as findQuotaRefusal } from "./quota-Cdt8yz7N.js";
10
10
  import { i as emitRunStarted, n as emitRunFailed, r as emitRunLimitHit, s as emitWorkflowCreated } from "./fluidgridsEvents-Dm5CaHtr.js";
11
11
  import { n as useFgAskable } from "./askAboutBridge-BV8m95kk.js";
12
- import { t as fetchAllNodeEndpointConfigs } from "./node-endpoint-configs-BrzQMy10.js";
12
+ import { t as fetchAllNodeEndpointConfigs } from "./node-endpoint-configs-typvqw2c.js";
13
13
  import { createContext, memo, useCallback, useContext, useEffect, useMemo, useRef, useState, useSyncExternalStore } from "react";
14
14
  import { useNavigate, useParams } from "react-router";
15
15
  import { ApolloProvider } from "@apollo/client/react";
@@ -19,7 +19,7 @@ import { Icon } from "@iconify/react";
19
19
  import { nanoid } from "nanoid";
20
20
  import { cn } from "@burdenoff/fe-libs/utils";
21
21
  import { nanoid as nanoid$1 } from "nanoid/non-secure";
22
- import { Fragment, jsx, jsxs } from "react/jsx-runtime";
22
+ import { Fragment as Fragment$1, jsx, jsxs } from "react/jsx-runtime";
23
23
  import { toast } from "sonner";
24
24
  import { nodeCategoryColor } from "@burdenoff/fe-libs/shared/utils";
25
25
  import { gql } from "@apollo/client";
@@ -261,7 +261,7 @@ function StickyNoteNodeComponent({ id, selected, data }) {
261
261
  className: cn("nodrag size-4 rounded-full border transition-transform hover:scale-125", name === colorKey ? "border-foreground" : "border-transparent"),
262
262
  style: { backgroundColor: color }
263
263
  }, name))
264
- }) : /* @__PURE__ */ jsxs(Fragment, { children: [
264
+ }) : /* @__PURE__ */ jsxs(Fragment$1, { children: [
265
265
  /* @__PURE__ */ jsx(ToolbarButton, {
266
266
  title: tr("fluidgrids.builder.stickyNote.editNoteTooltip", "Edit note"),
267
267
  onClick: startEditing,
@@ -5806,7 +5806,7 @@ function useRunGuard(startRun, options = {}) {
5806
5806
  stepNodeId
5807
5807
  ]),
5808
5808
  preparing,
5809
- dialog: /* @__PURE__ */ jsxs(Fragment, { children: [/* @__PURE__ */ jsx(UnsavedRunDialog, {
5809
+ dialog: /* @__PURE__ */ jsxs(Fragment$1, { children: [/* @__PURE__ */ jsx(UnsavedRunDialog, {
5810
5810
  open: confirmOpen,
5811
5811
  onOpenChange: setConfirmOpen,
5812
5812
  onRunSaved: () => {
@@ -6409,7 +6409,7 @@ function AdapterPort({ nodeId, adapter, index, total }) {
6409
6409
  })
6410
6410
  ]
6411
6411
  }),
6412
- pickerOpen && /* @__PURE__ */ jsxs(Fragment, { children: [/* @__PURE__ */ jsx("div", {
6412
+ pickerOpen && /* @__PURE__ */ jsxs(Fragment$1, { children: [/* @__PURE__ */ jsx("div", {
6413
6413
  className: "fixed inset-0 z-40",
6414
6414
  onClick: () => setPickerOpen(false)
6415
6415
  }), /* @__PURE__ */ jsxs("div", {
@@ -1,7 +1,7 @@
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-CVb5zXKt.js";
4
- import { i as versionsOfWorkflow, t as VersionDiffDialog } from "./VersionDiffDialog-Cp2doV3f.js";
3
+ import { d as useRestoreWorkflowVersion, h as useWorkflowDefinitions } from "./useWorkflows-CP-d3ygY.js";
4
+ import { i as versionsOfWorkflow, t as VersionDiffDialog } from "./VersionDiffDialog-pLpG_I1r.js";
5
5
  import { r as useTr } from "./TranslationBridge-Da-TPgQm.js";
6
6
  import { x as getFluidGridsConfig } from "./client-C9XSzSXr.js";
7
7
  import { n as useFluidGridsPageControls } from "./pageControlsBridge-0pX9s-3k.js";
@@ -114,7 +114,7 @@ function HistoryTableSkeleton() {
114
114
  children: Array.from({ length: 6 }).map((_, i) => /* @__PURE__ */ jsx(Skeleton, { className: "h-14 w-full rounded-lg bg-card-foreground/10" }, i))
115
115
  });
116
116
  }
117
- function EmptyState() {
117
+ function EmptyState$1() {
118
118
  const tr = useTr();
119
119
  return /* @__PURE__ */ jsxs("div", {
120
120
  className: "flex flex-col items-center justify-center py-20 text-center",
@@ -510,7 +510,7 @@ function HistoryPage() {
510
510
  v2
511
511
  })
512
512
  }),
513
- loading && !(v2 && allRows.length > 0) ? /* @__PURE__ */ jsx(HistoryTableSkeleton, {}) : filteredRows.length === 0 ? /* @__PURE__ */ jsx(EmptyState, {}) : /* @__PURE__ */ jsx("div", {
513
+ loading && !(v2 && allRows.length > 0) ? /* @__PURE__ */ jsx(HistoryTableSkeleton, {}) : filteredRows.length === 0 ? /* @__PURE__ */ jsx(EmptyState$1, {}) : /* @__PURE__ */ jsx("div", {
514
514
  className: "overflow-x-auto rounded-lg border border-border-secondary",
515
515
  children: /* @__PURE__ */ jsxs("table", {
516
516
  className: "w-full text-sm",
@@ -1,11 +1,11 @@
1
1
  "use client";
2
2
  import { r as useTr } from "./TranslationBridge-Da-TPgQm.js";
3
- import { _ as throwIfResultError, n as getFluidGridsClient, x as getFluidGridsConfig } from "./client-C9XSzSXr.js";
4
- import { useCallback, useEffect, useMemo, useRef, useState } from "react";
3
+ import { x as getFluidGridsConfig } from "./client-C9XSzSXr.js";
4
+ import { n as useRespondToHumanRequest } from "./useHumanRequests-ZiR0sSzS.js";
5
+ import { useMemo, useState } from "react";
5
6
  import { Icon } from "@iconify/react";
6
7
  import { jsx, jsxs } from "react/jsx-runtime";
7
8
  import { toast } from "sonner";
8
- import { gql } from "@apollo/client";
9
9
  import { Badge, Card, CardContent, CardHeader, Input, Label, Textarea } from "@burdenoff/fe-libs/ui";
10
10
  import { Button as Button$1 } from "@burdenoff/fe-libs/button";
11
11
  import { buildActorFallback, useActorProfiles } from "@burdenoff/fe-libs/shared";
@@ -52,218 +52,6 @@ function useRecipientLabel(request, fallback) {
52
52
  }).displayName : part).join(", ");
53
53
  }
54
54
 
55
- // src/modules/human-response/hooks/useHumanRequests.ts
56
- /**
57
- * Hooks for "Send and Wait for Response" (BOFF-7651): asks a workflow made of a person, the
58
- * in-app inbox of asks still waiting, and answering an in-app ask. Mirrors the tool-approval
59
- * hooks (`modules/tool-approval/hooks/useToolApprovals.ts`).
60
- */
61
- const HUMAN_REQUEST_FIELDS = gql`
62
- fragment WorkflowHumanRequestFields on WorkflowHumanRequest {
63
- id
64
- runId
65
- nodeId
66
- workflowKey
67
- channel
68
- recipient
69
- responseType
70
- title
71
- message
72
- approvalType
73
- approveLabel
74
- declineLabel
75
- submitLabel
76
- fields {
77
- name
78
- label
79
- type
80
- required
81
- placeholder
82
- options
83
- }
84
- status
85
- decision
86
- response
87
- respondedBy
88
- respondedVia
89
- expiresAt
90
- respondedAt
91
- createdAt
92
- canRespond
93
- quorum
94
- requiredApprovals
95
- myDecision
96
- approvals {
97
- id
98
- requestId
99
- approverId
100
- assignedVia
101
- assignedFrom
102
- decision
103
- comment
104
- answeredAt
105
- }
106
- }
107
- `;
108
- const GET_PENDING_HUMAN_REQUESTS = gql`
109
- ${HUMAN_REQUEST_FIELDS}
110
- query GetPendingWorkflowHumanRequests($limit: Int, $offset: Int) {
111
- pendingWorkflowHumanRequests(limit: $limit, offset: $offset) {
112
- totalCount
113
- items {
114
- ...WorkflowHumanRequestFields
115
- }
116
- }
117
- }
118
- `;
119
- const GET_RUN_HUMAN_REQUESTS = gql`
120
- ${HUMAN_REQUEST_FIELDS}
121
- query GetWorkflowHumanRequests($runId: ID!) {
122
- workflowHumanRequests(runId: $runId) {
123
- ...WorkflowHumanRequestFields
124
- }
125
- }
126
- `;
127
- const RESPOND_TO_HUMAN_REQUEST = gql`
128
- ${HUMAN_REQUEST_FIELDS}
129
- mutation RespondToWorkflowHumanRequest(
130
- $input: RespondToWorkflowHumanRequestInput!
131
- ) {
132
- respondToWorkflowHumanRequest(input: $input) {
133
- success
134
- decision
135
- error
136
- request {
137
- ...WorkflowHumanRequestFields
138
- }
139
- }
140
- }
141
- `;
142
- /** Asks still waiting for a person in the workspace (polled, like the tool-approval inbox). */
143
- function usePendingHumanRequests(options) {
144
- const limit = options?.limit ?? 50;
145
- const offset = options?.offset ?? 0;
146
- const pollIntervalMs = options?.pollIntervalMs ?? 15e3;
147
- const [items, setItems] = useState([]);
148
- const [totalCount, setTotalCount] = useState(0);
149
- const [loading, setLoading] = useState(true);
150
- const [error, setError] = useState(null);
151
- const generation = useRef(0);
152
- const fetchData = useCallback(async () => {
153
- const ticket = ++generation.current;
154
- setError(null);
155
- try {
156
- const result = throwIfResultError(await getFluidGridsClient().query({
157
- query: GET_PENDING_HUMAN_REQUESTS,
158
- variables: {
159
- limit,
160
- offset
161
- },
162
- fetchPolicy: "network-only"
163
- }));
164
- if (ticket !== generation.current) return;
165
- setItems(result.data?.pendingWorkflowHumanRequests?.items ?? []);
166
- setTotalCount(result.data?.pendingWorkflowHumanRequests?.totalCount ?? 0);
167
- } catch (err) {
168
- if (ticket !== generation.current) return;
169
- setError(err);
170
- } finally {
171
- if (ticket === generation.current) setLoading(false);
172
- }
173
- }, [limit, offset]);
174
- useEffect(() => {
175
- fetchData();
176
- if (pollIntervalMs <= 0) return;
177
- const interval = setInterval(fetchData, pollIntervalMs);
178
- return () => clearInterval(interval);
179
- }, [fetchData, pollIntervalMs]);
180
- return {
181
- items,
182
- totalCount,
183
- loading,
184
- error,
185
- refetch: fetchData
186
- };
187
- }
188
- /** Every ask a run made — who was asked, how, until when, and the answer. */
189
- function useRunHumanRequests(runId, options) {
190
- const pollIntervalMs = options?.pollIntervalMs ?? 0;
191
- const [items, setItems] = useState([]);
192
- const [error, setError] = useState(null);
193
- const [loaded, setLoaded] = useState(false);
194
- const [loadedAt, setLoadedAt] = useState(null);
195
- const currentRunId = useRef(runId);
196
- useEffect(() => {
197
- currentRunId.current = runId;
198
- setItems([]);
199
- setError(null);
200
- setLoaded(false);
201
- setLoadedAt(null);
202
- }, [runId]);
203
- const generation = useRef(0);
204
- const fetchData = useCallback(async () => {
205
- if (!runId) return;
206
- const ticket = ++generation.current;
207
- const startedAt = Date.now();
208
- setError(null);
209
- try {
210
- const result = throwIfResultError(await getFluidGridsClient().query({
211
- query: GET_RUN_HUMAN_REQUESTS,
212
- variables: { runId },
213
- fetchPolicy: "network-only",
214
- context: { queryDeduplication: false }
215
- }));
216
- if (ticket !== generation.current || currentRunId.current !== runId) return;
217
- setItems(result.data?.workflowHumanRequests ?? []);
218
- setLoaded(true);
219
- setLoadedAt(startedAt);
220
- } catch (err) {
221
- if (ticket !== generation.current || currentRunId.current !== runId) return;
222
- setError(err);
223
- }
224
- }, [runId]);
225
- useEffect(() => {
226
- fetchData();
227
- if (pollIntervalMs <= 0) return;
228
- const interval = setInterval(fetchData, pollIntervalMs);
229
- return () => clearInterval(interval);
230
- }, [fetchData, pollIntervalMs]);
231
- return {
232
- items,
233
- error,
234
- loaded,
235
- loadedAt,
236
- refetch: fetchData
237
- };
238
- }
239
- /**
240
- * Answer an in-app ask. Resolves to the decision the run continued with, or null when the answer
241
- * was recorded and an approval quorum still needs more answers (BOFF-9956). Throws with the
242
- * service's reason.
243
- */
244
- function useRespondToHumanRequest() {
245
- const [loading, setLoading] = useState(false);
246
- return {
247
- respond: useCallback(async (id, answer) => {
248
- setLoading(true);
249
- try {
250
- const payload = throwIfResultError(await getFluidGridsClient().mutate({
251
- mutation: RESPOND_TO_HUMAN_REQUEST,
252
- variables: { input: {
253
- id,
254
- ...answer
255
- } }
256
- })).data?.respondToWorkflowHumanRequest;
257
- if (!payload?.success) throw new Error(payload?.error || "The response was not recorded");
258
- return payload.decision;
259
- } finally {
260
- setLoading(false);
261
- }
262
- }, []),
263
- loading
264
- };
265
- }
266
-
267
55
  // src/modules/human-response/utils/approval-progress.ts
268
56
  function approvalCounts(approvals) {
269
57
  let approved = 0;
@@ -644,4 +432,4 @@ function HumanRequestCard({ request, onAnswered }) {
644
432
  });
645
433
  }
646
434
 
647
- export { useRespondToHumanRequest as a, usePendingHumanRequests as i, channelLabel as n, useRunHumanRequests as o, ApprovalApprovers as r, useRecipientLabel as s, HumanRequestCard as t };
435
+ export { useRecipientLabel as i, channelLabel as n, ApprovalApprovers as r, HumanRequestCard as t };
@@ -1,21 +1,21 @@
1
1
  "use client";
2
2
  import { t as __exportAll } from "./rolldown-runtime-hDbaFkMy.js";
3
3
  import { r as useTr } from "./TranslationBridge-Da-TPgQm.js";
4
- import { o as useRunReplayActions, r as useInsightsData } from "./useObservability-u-MZCWUV.js";
4
+ import { o as useRunReplayActions, r as useInsightsData } from "./useObservability-Dfgh4yjv.js";
5
5
  import { a as getTopFailingWorkflows, i as getTopFailingNodes, n as formatDuration, o as percentage, r as getFailureBreakdown } from "./utils-uaL5UVxb.js";
6
- import { n as FailureTriagePanel } from "./FailureTriagePanel-BzD4UJU5.js";
6
+ import { n as FailureTriagePanel } from "./FailureTriagePanel-D4lJ4zqQ.js";
7
7
  import { o as useContinuousOptimisationEnabled } from "./feature-flags-DM5myWaD.js";
8
- import { i as SdkPermissionButton, s as useFluidGridsPermission, t as FLUIDGRIDS_PERMISSIONS } from "./constants-B2lhWNoN.js";
8
+ import { i as SdkPermissionButton, s as useFluidGridsPermission, t as FLUIDGRIDS_PERMISSIONS } from "./constants-dcxg6zG6.js";
9
9
  import { Cw as OptimisationSuggestionStatus, Sw as OptimisationKind, xw as OptimisationDismissReason } from "./graphql-types-v6CTGwA0.js";
10
10
  import { _ as throwIfResultError, n as getFluidGridsClient } from "./client-C9XSzSXr.js";
11
- import { $ as DismissOptimisationSuggestionDocument, E as ContinuousOptimisationSettingsDocument, Ei as WorkspaceAiUsageDocument, In as SnoozeOptimisationSuggestionDocument, Kr as WorkflowProposalDocument, Lt as OptimisationSuggestionsDocument, Wt as ProposeOptimisationDocument, at as ErrorAnalyticsDocument, ht as FgRunOptimisationScanDocument, kn as SetContinuousOptimisationEnabledDocument } from "./graphql-operation-types-BdU65FNm.js";
11
+ import { $ as DismissOptimisationSuggestionDocument, E as ContinuousOptimisationSettingsDocument, Ei as WorkspaceAiUsageDocument, In as SnoozeOptimisationSuggestionDocument, Kr as WorkflowProposalDocument, Lt as OptimisationSuggestionsDocument, Wt as ProposeOptimisationDocument, at as ErrorAnalyticsDocument, ht as FgRunOptimisationScanDocument, kn as SetContinuousOptimisationEnabledDocument } from "./graphql-operation-types-z2oXfQvM.js";
12
12
  import { a as formatTokens, c as DISMISS_REASONS, f as monthlySavingLabel, i as aiSpendPeriod, l as evidenceFacts, p as shortRunId, r as aiCost, s as runsOfWorkflowPath, t as AI_SPEND_RANGE_DAYS, u as evidenceWindowDays } from "./ai-usage-bmUn-gJP.js";
13
13
  import { i as utcDay, r as runListPath } from "./run-list-links-eUhZB1ju.js";
14
14
  import { t as proposalCanvasPath } from "./useRequestedProposal-B7uPXfZB.js";
15
15
  import { useCallback, useEffect, useMemo, useRef, useState } from "react";
16
16
  import { Link, useNavigate } from "react-router";
17
17
  import { Icon } from "@iconify/react";
18
- import { Fragment, jsx, jsxs } from "react/jsx-runtime";
18
+ import { Fragment as Fragment$1, jsx, jsxs } from "react/jsx-runtime";
19
19
  import { toast } from "sonner";
20
20
  import { Button, Dialog, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogTitle, Label, Textarea } from "@burdenoff/fe-libs/ui";
21
21
  import { Button as Button$1 } from "@burdenoff/fe-libs/button";
@@ -364,7 +364,7 @@ function OptimisationSuggestionsSection({ onOpenRun, onOpenProposal }) {
364
364
  scan: optimisation.lastScan,
365
365
  tr
366
366
  }),
367
- optimisation.suggestions.length > 0 ? /* @__PURE__ */ jsxs(Fragment, { children: [/* @__PURE__ */ jsx("ul", {
367
+ optimisation.suggestions.length > 0 ? /* @__PURE__ */ jsxs(Fragment$1, { children: [/* @__PURE__ */ jsx("ul", {
368
368
  className: "mt-4 space-y-2",
369
369
  "data-testid": "optimisation-list",
370
370
  children: optimisation.suggestions.map((suggestion) => /* @__PURE__ */ jsx(OptimisationSuggestionRow, {
@@ -383,7 +383,7 @@ function OptimisationSuggestionsSection({ onOpenRun, onOpenProposal }) {
383
383
  shown: optimisation.suggestions.length,
384
384
  total: optimisation.total
385
385
  })
386
- })] }) : !optimisation.loading && /* @__PURE__ */ jsx(EmptyState, {
386
+ })] }) : !optimisation.loading && /* @__PURE__ */ jsx(EmptyState$1, {
387
387
  enabled,
388
388
  paused,
389
389
  tr
@@ -448,7 +448,7 @@ function ScanSummary({ scan, tr }) {
448
448
  })
449
449
  });
450
450
  }
451
- function EmptyState({ enabled, paused, tr }) {
451
+ function EmptyState$1({ enabled, paused, tr }) {
452
452
  let message = tr("fluidgrids.optimisation.emptyOff", "Turn continuous optimisation on to get nightly suggestions for your workflows here.");
453
453
  if (paused) message = tr("fluidgrids.optimisation.emptyPaused", "Continuous optimisation is paused for this workspace.");
454
454
  else if (enabled) message = tr("fluidgrids.optimisation.empty", "No suggestions right now. New ones appear here the morning after a check finds something.");
@@ -746,12 +746,12 @@ function rangeLabel(days, tr) {
746
746
  }
747
747
  function Cost({ usage, tr }) {
748
748
  const cost = aiCost(usage);
749
- if (cost.kind === "priced") return /* @__PURE__ */ jsx(Fragment, { children: cost.text });
749
+ if (cost.kind === "priced") return /* @__PURE__ */ jsx(Fragment$1, { children: cost.text });
750
750
  if (cost.kind === "unpriced") return /* @__PURE__ */ jsx("span", {
751
751
  className: "text-text-secondary",
752
752
  children: tr("fluidgrids.insights.aiSpend.notPricedYet", "Not priced yet")
753
753
  });
754
- return /* @__PURE__ */ jsx(Fragment, { children: "—" });
754
+ return /* @__PURE__ */ jsx(Fragment$1, { children: "—" });
755
755
  }
756
756
  function AiSpendPanel() {
757
757
  const tr = useTr();
@@ -1,7 +1,7 @@
1
1
  "use client";
2
2
  import { a as DialogFooter, i as DialogDescription, l as DialogTitle, o as DialogHeader, r as DialogContent, t as Dialog } from "./dialog-Cjb4lB4D.js";
3
3
  import { t as Button } from "./button-DG7y_FVJ.js";
4
- import { r as Badge } from "./TemplateCard-DYDVNYo6.js";
4
+ import { r as Badge } from "./TemplateCard-DanOe65C.js";
5
5
  import { Fragment, jsx, jsxs } from "react/jsx-runtime";
6
6
  import { AlertTriangle, CheckCircle2, Download, ExternalLink, Loader2, Puzzle, ShoppingCart } from "lucide-react";
7
7
 
@@ -1,8 +1,8 @@
1
1
  "use client";
2
2
  import { t as __exportAll } from "./rolldown-runtime-hDbaFkMy.js";
3
3
  import { n as getFluidGridsClient } from "./client-C9XSzSXr.js";
4
- import { t as fetchAllNodeEndpointConfigs } from "./node-endpoint-configs-BrzQMy10.js";
5
- import { At as NodeManifestDocument, Ot as NodeEndpointConfigDocument, kt as NodeEndpointConfigsDocument } from "./graphql-operation-types-BdU65FNm.js";
4
+ import { t as fetchAllNodeEndpointConfigs } from "./node-endpoint-configs-typvqw2c.js";
5
+ import { At as NodeManifestDocument, Ot as NodeEndpointConfigDocument, kt as NodeEndpointConfigsDocument } from "./graphql-operation-types-z2oXfQvM.js";
6
6
  import { r as useTr } from "./TranslationBridge-Da-TPgQm.js";
7
7
  import { t as PublishCustomNodeAction } from "./PublishCustomNodeAction-5XXnSA3H.js";
8
8
  import { useCallback, useEffect, useMemo, useState } from "react";
@@ -307,7 +307,7 @@ function NodesSkeleton() {
307
307
  children: Array.from({ length: 8 }).map((_, i) => /* @__PURE__ */ jsx(Skeleton, { className: "h-44 rounded-lg bg-card-foreground/10" }, i))
308
308
  });
309
309
  }
310
- function EmptyState({ hasFilters }) {
310
+ function EmptyState$1({ hasFilters }) {
311
311
  const tr = useTr();
312
312
  return /* @__PURE__ */ jsxs("div", {
313
313
  className: "flex flex-col items-center justify-center py-20 text-center",
@@ -619,7 +619,7 @@ function NodesPage() {
619
619
  onRetry: refetch
620
620
  })
621
621
  }),
622
- loading ? /* @__PURE__ */ jsx(NodesSkeleton, {}) : filtered.length === 0 ? /* @__PURE__ */ jsx(EmptyState, { hasFilters: search.trim().length > 0 || activeCategory !== "all" }) : /* @__PURE__ */ jsx("div", {
622
+ loading ? /* @__PURE__ */ jsx(NodesSkeleton, {}) : filtered.length === 0 ? /* @__PURE__ */ jsx(EmptyState$1, { hasFilters: search.trim().length > 0 || activeCategory !== "all" }) : /* @__PURE__ */ jsx("div", {
623
623
  className: "grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-3 xl:grid-cols-4 gap-4",
624
624
  children: filtered.map(({ node, category }) => /* @__PURE__ */ jsx(NodeCard, {
625
625
  node,
@@ -1,6 +1,6 @@
1
1
  "use client";
2
2
  import { r as useTr } from "./TranslationBridge-Da-TPgQm.js";
3
- import { vn as useFluidGridsAnalytics } from "./FluidGridsProvider-BFfTxl9m.js";
3
+ import { vn as useFluidGridsAnalytics } from "./FluidGridsProvider-B1hgCbxG.js";
4
4
  import { c as emitWorkflowLimitHit, o as emitUpgradeClicked } from "./fluidgridsEvents-Dm5CaHtr.js";
5
5
  import { i as WORKFLOWS_QUOTA_NAME } from "./quota-Cdt8yz7N.js";
6
6
  import { useEffect, useRef } from "react";
@@ -1,12 +1,12 @@
1
1
  "use client";
2
2
  import { t as __exportAll } from "./rolldown-runtime-hDbaFkMy.js";
3
3
  import { r as useTr } from "./TranslationBridge-Da-TPgQm.js";
4
- import { i as SdkPermissionButton, t as FLUIDGRIDS_PERMISSIONS } from "./constants-B2lhWNoN.js";
4
+ import { i as SdkPermissionButton, t as FLUIDGRIDS_PERMISSIONS } from "./constants-dcxg6zG6.js";
5
5
  import { a as useRunners, i as useRunnerActions, r as runnerInstallCommand, t as RunnerStatusPill } from "./RunnerStatusPill-Ctg4TJcP.js";
6
6
  import { t as FluidGridsDocsLink } from "./FluidGridsDocsLink-JxkBpOeb.js";
7
7
  import { useCallback, useEffect, useState } from "react";
8
8
  import { Icon } from "@iconify/react";
9
- import { Fragment, jsx, jsxs } from "react/jsx-runtime";
9
+ import { Fragment as Fragment$1, jsx, jsxs } from "react/jsx-runtime";
10
10
  import { toast } from "sonner";
11
11
  import { Badge, Card, CardHeader, Dialog, DialogContent, DialogFooter, DialogHeader, DialogTitle, Input, Label, Table, TableBody, TableCell, TableHead, TableHeader, TableRow } from "@burdenoff/fe-libs/ui";
12
12
  import { Button as Button$1 } from "@burdenoff/fe-libs/button";
@@ -212,10 +212,10 @@ function AddRunnerDialog({ open, onOpenChange, runners, onCreated }) {
212
212
  children: [/* @__PURE__ */ jsx(InstallCommand, { issued }), /* @__PURE__ */ jsx("div", {
213
213
  className: "flex items-center gap-2 text-sm",
214
214
  "data-testid": "runner-connect-status",
215
- children: live?.status === "ONLINE" ? /* @__PURE__ */ jsxs(Fragment, { children: [/* @__PURE__ */ jsx(Icon, {
215
+ children: live?.status === "ONLINE" ? /* @__PURE__ */ jsxs(Fragment$1, { children: [/* @__PURE__ */ jsx(Icon, {
216
216
  icon: "lucide:check-circle-2",
217
217
  className: "h-4 w-4 text-status-success-text"
218
- }), tr("fluidgrids.runners.connected", "Connected. You can now pick this runner in a node's Settings → Run on.")] }) : /* @__PURE__ */ jsxs(Fragment, { children: [/* @__PURE__ */ jsx(Icon, {
218
+ }), tr("fluidgrids.runners.connected", "Connected. You can now pick this runner in a node's Settings → Run on.")] }) : /* @__PURE__ */ jsxs(Fragment$1, { children: [/* @__PURE__ */ jsx(Icon, {
219
219
  icon: "lucide:loader-2",
220
220
  className: "h-4 w-4 animate-spin text-text-secondary"
221
221
  }), tr("fluidgrids.runners.waiting", "Waiting for the runner to connect…")] })
@@ -1,20 +1,20 @@
1
1
  "use client";
2
2
  import { t as __exportAll } from "./rolldown-runtime-hDbaFkMy.js";
3
3
  import { r as useTr } from "./TranslationBridge-Da-TPgQm.js";
4
- import { s as useFluidGridsPermission, t as FLUIDGRIDS_PERMISSIONS } from "./constants-B2lhWNoN.js";
4
+ import { s as useFluidGridsPermission, t as FLUIDGRIDS_PERMISSIONS } from "./constants-dcxg6zG6.js";
5
5
  import { n as useManagedAiPolicyAuthority } from "./ManagedAiPolicyAuthorityContext-CNkxIOZ1.js";
6
- import { Et as ManagedAiWorkspacePolicyDocument, Hr as WorkflowNotificationSettingsDocument, ar as UpdateDurableHistoryCapsDocument, nt as DurableHistoryCapsDocument, or as UpdateManagedAiWorkspacePolicyDocument, ur as UpdateWorkflowNotificationSettingsDocument } from "./graphql-operation-types-BdU65FNm.js";
6
+ import { Et as ManagedAiWorkspacePolicyDocument, Hr as WorkflowNotificationSettingsDocument, ar as UpdateDurableHistoryCapsDocument, nt as DurableHistoryCapsDocument, or as UpdateManagedAiWorkspacePolicyDocument, ur as UpdateWorkflowNotificationSettingsDocument } from "./graphql-operation-types-z2oXfQvM.js";
7
7
  import { c as budgetInputValue, d as withBudgetMode, f as EffectBadge, m as useActionPolicies, n as checkCodecServerUrl, p as effectLabel, s as BUDGET_DIMENSIONS, u as withBudgetLimit } from "./codec-client-CJ95Rmqo.js";
8
8
  import { _ as throwIfResultError, m as describeOperationError, n as getFluidGridsClient, x as getFluidGridsConfig } from "./client-C9XSzSXr.js";
9
9
  import { c as useDurableParityEnabled, f as usePhaseCFlags, l as useFluidGridsFlag, t as FLUIDGRIDS_FLAGS } from "./feature-flags-DM5myWaD.js";
10
- import { M as saveCodecServerSettings, _ as fetchPauseRules, a as createPauseRule, c as deletePauseRule, f as fetchArchiveSettings, g as fetchCodecServerSettings, j as saveArchiveSettings, l as deleteSearchAttribute, o as createSearchAttribute, r as clearArchiveSettings, x as fetchSearchAttributes } from "./api-DwaHAJtA.js";
10
+ import { M as saveCodecServerSettings, _ as fetchPauseRules, a as createPauseRule, c as deletePauseRule, f as fetchArchiveSettings, g as fetchCodecServerSettings, j as saveArchiveSettings, l as deleteSearchAttribute, o as createSearchAttribute, r as clearArchiveSettings, x as fetchSearchAttributes } from "./api-Dvitj1aT.js";
11
11
  import { i as NativeSelect, o as StatusPill, t as FieldError, u as useResource } from "./shared-CMfn30xT.js";
12
12
  import { EI as WorkflowSearchAttributeType } from "./graphql-types-v6CTGwA0.js";
13
- import { H as useFlowStore } from "./node-operation-selection-icAhaNza.js";
14
- import { Nt as useSaveStatusStore, rn as findSaveConflict } from "./FluidGridsProvider-BFfTxl9m.js";
15
- import { a as useLogStreamDestinations, i as useLogStreamDestinationActions } from "./useObservability-u-MZCWUV.js";
13
+ import { H as useFlowStore } from "./node-operation-selection-DAbS6jSY.js";
14
+ import { Nt as useSaveStatusStore, rn as findSaveConflict } from "./FluidGridsProvider-B1hgCbxG.js";
15
+ import { a as useLogStreamDestinations, i as useLogStreamDestinationActions } from "./useObservability-Dfgh4yjv.js";
16
16
  import { n as useConnections } from "./useConnections-Cs7LCWEM.js";
17
- import { Nt as useUpdateWorkflowDefinitionMutation, Rt as useWorkflowDefinitionQuery, Vt as useWorkflowDefinitionsQuery, n as useAgentDefinitions } from "./useAgentDefinitions-DSU8Eek4.js";
17
+ import { Nt as useUpdateWorkflowDefinitionMutation, Rt as useWorkflowDefinitionQuery, Vt as useWorkflowDefinitionsQuery, n as useAgentDefinitions } from "./useAgentDefinitions-Uy6nhpKN.js";
18
18
  import { a as formToInput$2, i as emptyAgentForm, n as agentToForm, o as grantDays, r as describeRule, t as AgentFormError } from "./agent-form-Bfvm32j1.js";
19
19
  import { i as getGlobalStoreClient } from "./node-registry-refresh-Dy0uRg9f.js";
20
20
  import { t as FluidGridsDocsLink } from "./FluidGridsDocsLink-JxkBpOeb.js";
@@ -22,7 +22,7 @@ import { useCallback, useEffect, useLayoutEffect, useMemo, useRef, useState } fr
22
22
  import { useNavigate, useParams } from "react-router";
23
23
  import { Icon } from "@iconify/react";
24
24
  import { cn } from "@burdenoff/fe-libs/utils";
25
- import { Fragment, jsx, jsxs } from "react/jsx-runtime";
25
+ import { Fragment as Fragment$1, jsx, jsxs } from "react/jsx-runtime";
26
26
  import { toast } from "sonner";
27
27
  import { gql } from "@apollo/client";
28
28
  import { Badge, Card, CardContent, CardHeader, Checkbox, Input, Label, Select, SelectContent, SelectItem, SelectTrigger, SelectValue, Switch, Tabs, TabsContent, TabsList, TabsTrigger, Textarea, Tooltip, TooltipContent, TooltipProvider, TooltipTrigger } from "@burdenoff/fe-libs/ui";
@@ -1258,7 +1258,7 @@ function ManagedAiPolicyForm({ policy, loading, error, workspaceWideRequired, ca
1258
1258
  loading,
1259
1259
  error,
1260
1260
  workspaceWideRequired,
1261
- children: policy && /* @__PURE__ */ jsx(Fragment, { children: /* @__PURE__ */ jsx(ManagedAiPolicyControls, {
1261
+ children: policy && /* @__PURE__ */ jsx(Fragment$1, { children: /* @__PURE__ */ jsx(ManagedAiPolicyControls, {
1262
1262
  policy,
1263
1263
  canManage,
1264
1264
  activelyEnabled,
@@ -1285,7 +1285,7 @@ function ManagedAiPolicyForm({ policy, loading, error, workspaceWideRequired, ca
1285
1285
  /** Owner controls remain separate from request state and bounded status rendering. */
1286
1286
  function ManagedAiPolicyControls({ policy, canManage, activelyEnabled, acknowledged, setAcknowledged, saving, saveFailed, change }) {
1287
1287
  const tr = useTr();
1288
- return canManage ? /* @__PURE__ */ jsxs(Fragment, { children: [
1288
+ return canManage ? /* @__PURE__ */ jsxs(Fragment$1, { children: [
1289
1289
  !activelyEnabled && /* @__PURE__ */ jsxs("label", {
1290
1290
  className: "flex items-start gap-3 text-sm text-text-secondary",
1291
1291
  children: [/* @__PURE__ */ jsx("input", {
@@ -1326,12 +1326,12 @@ function ManagedAiPolicyStatus({ policy, loading, error, workspaceWideRequired,
1326
1326
  role: "status",
1327
1327
  children: tr("fluidgrids.settings.managedAi.pending", "Workspace AI controls are not active yet. Existing managed AI behavior is unchanged, and no approval change can be saved.")
1328
1328
  });
1329
- if (!policy.enforcementActive) return /* @__PURE__ */ jsxs(Fragment, { children: [/* @__PURE__ */ jsx("p", {
1329
+ if (!policy.enforcementActive) return /* @__PURE__ */ jsxs(Fragment$1, { children: [/* @__PURE__ */ jsx("p", {
1330
1330
  role: "status",
1331
1331
  className: "text-sm text-text-secondary",
1332
1332
  children: tr("fluidgrids.settings.managedAi.enrollmentAvailable", "Workspace AI controls are available. Existing managed AI behavior continues until an administrator saves a choice. You can turn off new managed requests without approving provider use.")
1333
1333
  }), children] });
1334
- return /* @__PURE__ */ jsxs(Fragment, { children: [/* @__PURE__ */ jsx("p", {
1334
+ return /* @__PURE__ */ jsxs(Fragment$1, { children: [/* @__PURE__ */ jsx("p", {
1335
1335
  className: "font-medium text-text-primary",
1336
1336
  role: "status",
1337
1337
  children: policy.enabled ? tr("fluidgrids.settings.managedAi.enabled", "Managed AI is on for this workspace.") : tr("fluidgrids.settings.managedAi.disabled", "Managed AI is off for this workspace.")
@@ -1423,7 +1423,7 @@ function rowCopy(tr, dimension) {
1423
1423
  */
1424
1424
  function RunBudgetSettings({ budget, disabled, onChange }) {
1425
1425
  const tr = useTr();
1426
- return /* @__PURE__ */ jsx(Fragment, { children: BUDGET_DIMENSIONS.map((dimension) => {
1426
+ return /* @__PURE__ */ jsx(Fragment$1, { children: BUDGET_DIMENSIONS.map((dimension) => {
1427
1427
  const row = rowCopy(tr, dimension);
1428
1428
  const limit = budget?.[dimension];
1429
1429
  const mode = limit?.mode ?? "HARD";
@@ -1812,7 +1812,7 @@ function DurableHistoryCapsCard({ canEdit }) {
1812
1812
  " ",
1813
1813
  error
1814
1814
  ]
1815
- }) : /* @__PURE__ */ jsxs(Fragment, { children: [/* @__PURE__ */ jsxs("div", {
1815
+ }) : /* @__PURE__ */ jsxs(Fragment$1, { children: [/* @__PURE__ */ jsxs("div", {
1816
1816
  className: "divide-y divide-border-secondary",
1817
1817
  children: [/* @__PURE__ */ jsx(SettingRow, {
1818
1818
  label: tr("fluidgrids.settings.historyCaps.eventsLabel", "Events per run"),
@@ -3743,7 +3743,7 @@ function AgentGrants({ agent, loadGrants, onGrant, onRevoke }) {
3743
3743
  "data-testid": `agent-grants-${agent.id}`,
3744
3744
  children: [/* @__PURE__ */ jsx("div", {
3745
3745
  className: "flex flex-wrap items-center gap-2",
3746
- children: mine ? /* @__PURE__ */ jsxs(Fragment, { children: [/* @__PURE__ */ jsx("span", {
3746
+ children: mine ? /* @__PURE__ */ jsxs(Fragment$1, { children: [/* @__PURE__ */ jsx("span", {
3747
3747
  className: "text-sm text-text-primary",
3748
3748
  children: mine.expiresAt ? tr("fluidgrids.agents.myGrantUntil", "This agent may act for you until {{date}}.", { date: new Date(mine.expiresAt).toLocaleDateString() }) : tr("fluidgrids.agents.myGrant", "This agent may act for you.")
3749
3749
  }), /* @__PURE__ */ jsx(Button$1, {
@@ -3753,7 +3753,7 @@ function AgentGrants({ agent, loadGrants, onGrant, onRevoke }) {
3753
3753
  onClick: () => void run(() => onRevoke(agent.id, null), tr("fluidgrids.agents.withdrawn", "Grant withdrawn")),
3754
3754
  "data-testid": "agent-grant-withdraw",
3755
3755
  children: tr("fluidgrids.agents.withdraw", "Withdraw my grant")
3756
- })] }) : /* @__PURE__ */ jsxs(Fragment, { children: [
3756
+ })] }) : /* @__PURE__ */ jsxs(Fragment$1, { children: [
3757
3757
  /* @__PURE__ */ jsx(Label, {
3758
3758
  htmlFor: `grant-days-${agent.id}`,
3759
3759
  className: "text-sm",
@@ -1,5 +1,5 @@
1
1
  "use client";
2
- import { r as useAvailableTags } from "./useEntityTags-C8rPBi6W.js";
2
+ import { r as useAvailableTags } from "./useEntityTags-D5C0tdLs.js";
3
3
  import { r as useTr } from "./TranslationBridge-Da-TPgQm.js";
4
4
  import { jsx, jsxs } from "react/jsx-runtime";
5
5
 
@@ -3,9 +3,9 @@ import { t as __exportAll } from "./rolldown-runtime-hDbaFkMy.js";
3
3
  import { r as useTr } from "./TranslationBridge-Da-TPgQm.js";
4
4
  import { m as describeOperationError } from "./client-C9XSzSXr.js";
5
5
  import { p as useSelfHostedWorkersEnabled } from "./feature-flags-DM5myWaD.js";
6
- import { s as useFluidGridsPermission, t as FLUIDGRIDS_PERMISSIONS } from "./constants-B2lhWNoN.js";
6
+ import { s as useFluidGridsPermission, t as FLUIDGRIDS_PERMISSIONS } from "./constants-dcxg6zG6.js";
7
7
  import { a as RUN_CONTROL_DIALOG_STYLE, i as NativeSelect, o as StatusPill, t as FieldError, u as useResource } from "./shared-CMfn30xT.js";
8
- import { a as fetchTaskQueueStats, c as fetchWorkflowWorkers, d as updateTaskQueue, i as deleteWorkerToken, l as rotateWorkerToken, n as createWorkerToken, o as fetchTaskQueues, r as deleteTaskQueue, s as fetchWorkerTokens, t as createTaskQueue, u as setWorkerTokenConnectionAllowlist } from "./api-C8WmUejq.js";
8
+ import { a as fetchTaskQueueStats, c as fetchWorkflowWorkers, d as updateTaskQueue, i as deleteWorkerToken, l as rotateWorkerToken, n as createWorkerToken, o as fetchTaskQueues, r as deleteTaskQueue, s as fetchWorkerTokens, t as createTaskQueue, u as setWorkerTokenConnectionAllowlist } from "./api-JpNuowX4.js";
9
9
  import { nI as WorkflowEnvironment } from "./graphql-types-v6CTGwA0.js";
10
10
  import { useState } from "react";
11
11
  import { Icon } from "@iconify/react";
@@ -1,13 +1,13 @@
1
1
  "use client";
2
2
  import { _ as throwIfResultError, n as getFluidGridsClient, x as getFluidGridsConfig } from "./client-C9XSzSXr.js";
3
3
  import { i as getGlobalStoreClient } from "./node-registry-refresh-Dy0uRg9f.js";
4
- import { A as StoreNodeProductsByTypeDocument, C as GetMyNodeInstallationsDocument, D as InstallWorkflowNodeDocument, c as ensureInstalledNodeTypesLoaded, d as ensureRegistryNodeTypesLoaded, i as AVAILABLE_NODES, o as NODE_CONFIGS, t as FluidGridsContext, vn as useFluidGridsAnalytics, x as BrowseWorkflowTemplatesDocument } from "./FluidGridsProvider-BFfTxl9m.js";
4
+ import { A as StoreNodeProductsByTypeDocument, C as GetMyNodeInstallationsDocument, D as InstallWorkflowNodeDocument, c as ensureInstalledNodeTypesLoaded, d as ensureRegistryNodeTypesLoaded, i as AVAILABLE_NODES, o as NODE_CONFIGS, t as FluidGridsContext, vn as useFluidGridsAnalytics, x as BrowseWorkflowTemplatesDocument } from "./FluidGridsProvider-B1hgCbxG.js";
5
5
  import { r as useTr } from "./TranslationBridge-Da-TPgQm.js";
6
6
  import { c as isQuotaExhaustedFailure } from "./quota-Cdt8yz7N.js";
7
7
  import { a as emitTemplateUsed, s as emitWorkflowCreated, t as emitNodeInstalled } from "./fluidgridsEvents-Dm5CaHtr.js";
8
8
  import { t as cn } from "./cn-QqidFIgr.js";
9
9
  import { t as Button } from "./button-DG7y_FVJ.js";
10
- import { i as SdkPermissionButton, t as FLUIDGRIDS_PERMISSIONS } from "./constants-B2lhWNoN.js";
10
+ import { i as SdkPermissionButton, t as FLUIDGRIDS_PERMISSIONS } from "./constants-dcxg6zG6.js";
11
11
  import React, { Suspense, forwardRef, lazy, useCallback, useContext, useMemo, useState } from "react";
12
12
  import { useQuery } from "@apollo/client/react";
13
13
  import { gql } from "@apollo/client/core";
@@ -1080,7 +1080,7 @@ async function dismissToastWhenShown(id) {
1080
1080
  }
1081
1081
 
1082
1082
  // src/hooks/store/useTemplateImportFlow.tsx
1083
- const LazyTemplateConfigurationModal = lazy(() => import("./TemplateConfigurationModal-BzdkGWim.js").then((m) => ({ default: m.TemplateConfigurationModal })));
1083
+ const LazyTemplateConfigurationModal = lazy(() => import("./TemplateConfigurationModal-CeMpPEhT.js").then((m) => ({ default: m.TemplateConfigurationModal })));
1084
1084
  /**
1085
1085
  * "Use this template", the same everywhere it is offered: the builder's
1086
1086
  * template panel, the Templates page and the template preview page