@burdenoff/fluidgrids-fe-sdk 2026.1111.22 → 2026.1111.24
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/{AiStudioPage-DIfF4LhQ.js → AiStudioPage-NfhraV2M.js} +5 -5
- package/dist/{ApprovalInboxPage-dbBDSJ-f.js → ApprovalInboxPage-D8vhnloO.js} +1 -1
- package/dist/{DataSinkDashboardPage-DDvNPS8Z.js → DataSinkDashboardPage-BfdKumMH.js} +1 -1
- package/dist/{DataTablesPage-BpnF13UT.js → DataTablesPage-DoVBkb_T.js} +3 -3
- package/dist/{EntityTagPicker-BqRNsLCQ.js → EntityTagPicker-Dk3CufFt.js} +1 -1
- package/dist/{ExecutionDetailPage-DYLWtHRG.js → ExecutionDetailPage-Dtpn7Xnl.js} +20 -15
- package/dist/{ExecutionsListPage-D63aCXJH.js → ExecutionsListPage-DeqJnEO7.js} +9 -9
- package/dist/{FailureTriagePanel-B9hDQymi.js → FailureTriagePanel-BzD4UJU5.js} +2 -2
- package/dist/{FluidGridsProvider-CWyQ8ziM.js → FluidGridsProvider-BuZERrTA.js} +245 -38
- package/dist/{HistoryPage-CNXgUMb0.js → HistoryPage-BC7ld-oQ.js} +2 -2
- package/dist/{HumanRequestCard-D-ooVPDn.js → HumanRequestCard-mOhr-Ic9.js} +239 -31
- package/dist/{InsightsPage-Duo83yAM.js → InsightsPage-C8X1g_Ya.js} +6 -6
- package/dist/{MissingNodesInstallModal-Q3RYBvS8.js → MissingNodesInstallModal-DUmwDs4e.js} +1 -1
- package/dist/{NodesPage-Bf5PhfBK.js → NodesPage-Dhg5Q2R5.js} +2 -2
- package/dist/{QuotaExhaustedDialog-ChBoJnRo.js → QuotaExhaustedDialog-RctNPfz_.js} +1 -1
- package/dist/{SettingsPage-DI_vIG7t.js → SettingsPage-BbE4S63W.js} +6 -6
- package/dist/{TagFilterSelect-DCBOH6Ou.js → TagFilterSelect-VC6JMK3F.js} +1 -1
- package/dist/{TaskQueuesPage-9VgSnLdL.js → TaskQueuesPage-C3R5ZoKs.js} +2 -2
- package/dist/{TemplateCard-6W2q2wiK.js → TemplateCard-D800haiE.js} +2 -2
- package/dist/{TemplateConfigurationModal-qNQGP7cm.js → TemplateConfigurationModal-DYs1YxYy.js} +1 -1
- package/dist/{TemplateDetailPanel-CQvYqhVO.js → TemplateDetailPanel-CKhCQlyo.js} +1 -1
- package/dist/{TemplatePreview-t3251W_n.js → TemplatePreview-DbF97Jwi.js} +3 -3
- package/dist/{TemplatesPage-Bvg6R2P9.js → TemplatesPage-BR6iOnC0.js} +5 -5
- package/dist/{VersionDiffDialog-DSN0mU0f.js → VersionDiffDialog-B00qeGiE.js} +1 -1
- package/dist/{WorkflowBuilder-C-hgvww2.js → WorkflowBuilder-BWqiMpdk.js} +3 -3
- package/dist/{WorkflowBuilder-DdvSGsxr.js → WorkflowBuilder-CWsUITzN.js} +8 -8
- package/dist/{WorkflowProposalCard-qrEeNyYG.js → WorkflowProposalCard-U31u1qcw.js} +2 -2
- package/dist/{WorkflowSearchRedirect-33Vs4FKc.js → WorkflowSearchRedirect-7Kc7NniX.js} +1 -1
- package/dist/{WorkflowShareDialog-mbIwRQUY.js → WorkflowShareDialog-Dv46nAyh.js} +2 -2
- package/dist/{WorkflowsList-C3bHLpSv.js → WorkflowsList-Bnov6LCT.js} +8 -8
- package/dist/{agentTools-BjhxAdlt.js → agentTools-yi8CDKzs.js} +3 -3
- package/dist/{ai-usage-glCwHyQz.js → ai-usage-bmUn-gJP.js} +1 -1
- package/dist/{api-C8e0iV-Q.js → api-C8WmUejq.js} +1 -1
- package/dist/{api-BrCHB5oA.js → api-DwaHAJtA.js} +1 -1
- package/dist/{canvasNoteTools-CZEFFhRp.js → canvasNoteTools-kRtdgYMQ.js} +2 -2
- package/dist/{code-editor-field-CfP0QYUD.js → code-editor-field-Dg2U8mk1.js} +1 -1
- package/dist/executions.js +2 -2
- package/dist/{flow-builder-CE8cNXNi.js → flow-builder-CEYMv_sG.js} +17 -17
- package/dist/{graphql-operation-types-kX-MMjgW.js → graphql-operation-types-BdU65FNm.js} +413 -1
- package/dist/{graphql-types-CDKVWH2R.js → graphql-types-v6CTGwA0.js} +470 -39
- package/dist/history.js +1 -1
- package/dist/{index-7eJQwsNS.d.ts → index-T8fJI6Ys.d.ts} +2073 -99
- package/dist/index.d.ts +2 -2
- package/dist/index.js +35 -35
- package/dist/{node-detail-view-BoR0vYZ3.js → node-detail-view-Ft8huQ5T.js} +9 -9
- package/dist/{node-editor-tab-body-DxMbKspp.js → node-editor-tab-body-CjwxJdlF.js} +2 -2
- package/dist/{node-endpoint-configs-B5bjNMDW.js → node-endpoint-configs-BrzQMy10.js} +1 -1
- package/dist/nodes.js +1 -1
- package/dist/observability.d.ts +1 -1
- package/dist/observability.js +2 -2
- package/dist/{popover-B1aKz7DC.js → popover-B6Rjrhar.js} +2 -2
- package/dist/{quick-config-panel-DXvLJdeW.js → quick-config-panel-D95dc_2F.js} +3 -3
- package/dist/{run-list-links-ByYC0OlV.js → run-list-links-eUhZB1ju.js} +1 -1
- package/dist/{schedule-panel-CY6S4JMd.js → schedule-panel-C-N92gxl.js} +157 -11
- package/dist/settings.js +1 -1
- package/dist/{sidebar-node-editor-FU3fvOjh.js → sidebar-node-editor-BHBicLCn.js} +3 -3
- package/dist/templates.js +2 -2
- package/dist/{useAgentDefinitions-B0dam3_o.js → useAgentDefinitions-DSU8Eek4.js} +1 -1
- package/dist/{useDurableParity-BApRraSO.js → useDurableParity-DEceXnEa.js} +2 -2
- package/dist/{useEntityTags-DhnsZcTl.js → useEntityTags-C8rPBi6W.js} +1 -1
- package/dist/{useExecutions-C2a4EcvC.js → useExecutions-D3S4aqIQ.js} +3 -3
- package/dist/{useObservability-BmbeK5bG.js → useObservability-B9cOl5mw.js} +1 -1
- package/dist/{useRunHistory-CqfDFRzr.js → useRunHistory-uTJepemz.js} +3 -3
- package/dist/{useWorkflowCodeExport-DebpM48M.js → useWorkflowCodeExport-L-5NIRiH.js} +3 -3
- package/dist/{useWorkflows-D1-rYzGK.js → useWorkflows-D9BlhpWH.js} +2 -2
- package/dist/workflow-builder.js +4 -4
- package/dist/workflow-pages.d.ts +1 -1
- package/dist/workflow-pages.js +17 -17
- package/dist/workflows-list.js +1 -1
- package/package.json +1 -1
|
@@ -3,7 +3,7 @@ import { r as useTr } from "./TranslationBridge-Da-TPgQm.js";
|
|
|
3
3
|
import { _ as throwIfResultError, n as getFluidGridsClient, x as getFluidGridsConfig } from "./client-C9XSzSXr.js";
|
|
4
4
|
import { useCallback, useEffect, useMemo, useRef, useState } from "react";
|
|
5
5
|
import { Icon } from "@iconify/react";
|
|
6
|
-
import {
|
|
6
|
+
import { jsx, jsxs } from "react/jsx-runtime";
|
|
7
7
|
import { toast } from "sonner";
|
|
8
8
|
import { gql } from "@apollo/client";
|
|
9
9
|
import { Badge, Card, CardContent, CardHeader, Input, Label, Textarea } from "@burdenoff/fe-libs/ui";
|
|
@@ -90,6 +90,19 @@ const HUMAN_REQUEST_FIELDS = gql`
|
|
|
90
90
|
respondedAt
|
|
91
91
|
createdAt
|
|
92
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
|
+
}
|
|
93
106
|
}
|
|
94
107
|
`;
|
|
95
108
|
const GET_PENDING_HUMAN_REQUESTS = gql`
|
|
@@ -223,7 +236,11 @@ function useRunHumanRequests(runId, options) {
|
|
|
223
236
|
refetch: fetchData
|
|
224
237
|
};
|
|
225
238
|
}
|
|
226
|
-
/**
|
|
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
|
+
*/
|
|
227
244
|
function useRespondToHumanRequest() {
|
|
228
245
|
const [loading, setLoading] = useState(false);
|
|
229
246
|
return {
|
|
@@ -247,11 +264,163 @@ function useRespondToHumanRequest() {
|
|
|
247
264
|
};
|
|
248
265
|
}
|
|
249
266
|
|
|
267
|
+
// src/modules/human-response/utils/approval-progress.ts
|
|
268
|
+
function approvalCounts(approvals) {
|
|
269
|
+
let approved = 0;
|
|
270
|
+
let rejected = 0;
|
|
271
|
+
for (const approval of approvals) if (approval.decision === "APPROVED") approved++;
|
|
272
|
+
else if (approval.decision === "REJECTED") rejected++;
|
|
273
|
+
return {
|
|
274
|
+
approved,
|
|
275
|
+
rejected,
|
|
276
|
+
total: approvals.length
|
|
277
|
+
};
|
|
278
|
+
}
|
|
279
|
+
/** True for an approval that counts several answers (all, or N of them). */
|
|
280
|
+
function hasQuorum(request) {
|
|
281
|
+
return request.responseType === "APPROVAL" && (request.quorum === "all" || request.quorum === "count");
|
|
282
|
+
}
|
|
283
|
+
/** "1 of 2 approvals · 1 declined", or null for an ask without a quorum. */
|
|
284
|
+
function approvalProgressText(request, tr) {
|
|
285
|
+
if (!hasQuorum(request)) return null;
|
|
286
|
+
const counts = approvalCounts(request.approvals ?? []);
|
|
287
|
+
const required = request.requiredApprovals ?? counts.total;
|
|
288
|
+
const progress = request.quorum === "all" ? tr("fluidgrids.humanResponse.approvalProgressAll", "{{approved}} of {{required}} approvals (everyone must approve)", {
|
|
289
|
+
approved: counts.approved,
|
|
290
|
+
required
|
|
291
|
+
}) : tr("fluidgrids.humanResponse.approvalProgressCount", "{{approved}} of {{required}} approvals needed, from {{total}} approvers", {
|
|
292
|
+
approved: counts.approved,
|
|
293
|
+
required,
|
|
294
|
+
total: counts.total
|
|
295
|
+
});
|
|
296
|
+
if (counts.rejected === 0) return progress;
|
|
297
|
+
return `${progress} · ${tr("fluidgrids.humanResponse.approvalDeclinedCount", "{{count}} declined", { count: counts.rejected })}`;
|
|
298
|
+
}
|
|
299
|
+
/** An approver's answer in words. A missing answer reads differently once the ask closed. */
|
|
300
|
+
function approverDecisionLabel(decision, askOpen, tr) {
|
|
301
|
+
if (decision === "APPROVED") return tr("fluidgrids.humanResponse.approverApproved", "Approved");
|
|
302
|
+
if (decision === "REJECTED") return tr("fluidgrids.humanResponse.approverDeclined", "Declined");
|
|
303
|
+
return askOpen ? tr("fluidgrids.humanResponse.approverWaiting", "Not answered yet") : tr("fluidgrids.humanResponse.approverNoAnswer", "Did not answer");
|
|
304
|
+
}
|
|
305
|
+
/** The toast after an in-app answer: the run continued, or the answer waits for the others. */
|
|
306
|
+
function answeredToastText(decision, tr) {
|
|
307
|
+
if (decision === null) return tr("fluidgrids.humanResponse.approvalRecordedToast", "Your answer is recorded. The workflow continues once enough approvers have answered.");
|
|
308
|
+
return decision === "declined" ? tr("fluidgrids.humanResponse.declinedToast", "Declined — the workflow is continuing") : tr("fluidgrids.humanResponse.answeredToast", "Response sent — the workflow is continuing");
|
|
309
|
+
}
|
|
310
|
+
/**
|
|
311
|
+
* Why the caller cannot answer this ask here: they already answered it, it went to someone else,
|
|
312
|
+
* or it is answered through the link in its message.
|
|
313
|
+
*/
|
|
314
|
+
function notAnswerableText(request, channelName, tr) {
|
|
315
|
+
if (request.myDecision === "APPROVED") return tr("fluidgrids.humanResponse.youApproved", "You approved this. It is waiting for the other approvers.");
|
|
316
|
+
if (request.myDecision === "REJECTED") return tr("fluidgrids.humanResponse.youDeclined", "You declined this. It is waiting for the other approvers.");
|
|
317
|
+
return request.channel === "IN_APP" ? tr("fluidgrids.humanResponse.notForYou", "This request was sent to someone else.") : tr("fluidgrids.humanResponse.answerByLink", "Answered through the link in the {{channel}} message.", { channel: channelName });
|
|
318
|
+
}
|
|
319
|
+
|
|
320
|
+
// src/modules/human-response/hooks/useApproverNames.ts
|
|
321
|
+
/**
|
|
322
|
+
* Names for the approvers of an approval (BOFF-9956). Approvers are stored as user ids; they are
|
|
323
|
+
* resolved through the shared actor-profile cache, the same lookup the run page uses for
|
|
324
|
+
* "triggered by" and `useRecipientLabel` uses for who an ask went to.
|
|
325
|
+
*/
|
|
326
|
+
/** Display name per user id; ids the profile service does not know get the shared fallback. */
|
|
327
|
+
function useApproverNames(userIds) {
|
|
328
|
+
const idsKey = [...new Set(userIds)].join(",");
|
|
329
|
+
const inputs = useMemo(() => idsKey ? idsKey.split(",").map((actorId) => ({
|
|
330
|
+
actorId,
|
|
331
|
+
actorType: "user"
|
|
332
|
+
})) : [], [idsKey]);
|
|
333
|
+
const config = getFluidGridsConfig();
|
|
334
|
+
const profiles = useActorProfiles(inputs, {
|
|
335
|
+
workspaceId: config.workspaceId || void 0,
|
|
336
|
+
orgId: config.organizationId,
|
|
337
|
+
authToken: config.authToken
|
|
338
|
+
});
|
|
339
|
+
return useMemo(() => {
|
|
340
|
+
const names = {};
|
|
341
|
+
for (const input of inputs) names[input.actorId] = profiles[input.actorId]?.displayName ?? buildActorFallback({
|
|
342
|
+
actorId: input.actorId,
|
|
343
|
+
actorType: "user"
|
|
344
|
+
}).displayName;
|
|
345
|
+
return names;
|
|
346
|
+
}, [inputs, profiles]);
|
|
347
|
+
}
|
|
348
|
+
|
|
349
|
+
// src/modules/human-response/components/ApprovalApprovers.tsx
|
|
350
|
+
/**
|
|
351
|
+
* The approvers of an in-app approval (BOFF-9956): where the quorum stands, and who was asked, how
|
|
352
|
+
* (by name or through a role), what each answered, when, and their comment. Shown on the run page
|
|
353
|
+
* and in the Approvals inbox. Renders nothing for an ask that named no approvers and has no answer.
|
|
354
|
+
*/
|
|
355
|
+
const DECISION_ICON = {
|
|
356
|
+
APPROVED: "mdi:check-circle-outline",
|
|
357
|
+
REJECTED: "mdi:close-circle-outline",
|
|
358
|
+
PENDING: "mdi:clock-outline"
|
|
359
|
+
};
|
|
360
|
+
const DECISION_TONE = {
|
|
361
|
+
APPROVED: "text-status-success-text",
|
|
362
|
+
REJECTED: "text-status-error-text",
|
|
363
|
+
PENDING: "text-text-secondary"
|
|
364
|
+
};
|
|
365
|
+
/** "1 of 2 approvals needed, from 3 approvers"; nothing for an ask without a quorum. */
|
|
366
|
+
function ApprovalProgress({ request }) {
|
|
367
|
+
const tr = useTr();
|
|
368
|
+
const text = approvalProgressText(request, tr);
|
|
369
|
+
if (!text) return null;
|
|
370
|
+
return /* @__PURE__ */ jsx("p", {
|
|
371
|
+
className: "text-xs font-medium text-text-primary",
|
|
372
|
+
"data-testid": "approval-progress",
|
|
373
|
+
children: text
|
|
374
|
+
});
|
|
375
|
+
}
|
|
376
|
+
function ApprovalApprovers({ request }) {
|
|
377
|
+
const tr = useTr();
|
|
378
|
+
const approvals = request.approvals ?? [];
|
|
379
|
+
const names = useApproverNames(approvals.map((approval) => approval.approverId));
|
|
380
|
+
if (approvals.length === 0) return null;
|
|
381
|
+
const askOpen = request.status === "PENDING";
|
|
382
|
+
return /* @__PURE__ */ jsxs("div", {
|
|
383
|
+
className: "w-full space-y-1.5",
|
|
384
|
+
"data-testid": "approval-approvers",
|
|
385
|
+
children: [/* @__PURE__ */ jsx(ApprovalProgress, { request }), /* @__PURE__ */ jsx("ul", {
|
|
386
|
+
className: "space-y-1",
|
|
387
|
+
children: approvals.map((approval) => /* @__PURE__ */ jsxs("li", {
|
|
388
|
+
className: "flex flex-col gap-0.5 text-xs sm:flex-row sm:flex-wrap sm:items-baseline sm:gap-x-2",
|
|
389
|
+
"data-testid": "approval-approver",
|
|
390
|
+
"data-decision": approval.decision,
|
|
391
|
+
children: [
|
|
392
|
+
/* @__PURE__ */ jsxs("span", {
|
|
393
|
+
className: "flex items-center gap-1 font-medium text-text-primary",
|
|
394
|
+
children: [/* @__PURE__ */ jsx(Icon, {
|
|
395
|
+
icon: DECISION_ICON[approval.decision],
|
|
396
|
+
width: 14,
|
|
397
|
+
className: DECISION_TONE[approval.decision]
|
|
398
|
+
}), names[approval.approverId] ?? approval.approverId]
|
|
399
|
+
}),
|
|
400
|
+
/* @__PURE__ */ jsxs("span", {
|
|
401
|
+
className: "text-text-secondary",
|
|
402
|
+
children: [
|
|
403
|
+
approverDecisionLabel(approval.decision, askOpen, tr),
|
|
404
|
+
approval.answeredAt && ` · ${new Date(approval.answeredAt).toLocaleString()}`,
|
|
405
|
+
approval.assignedFrom && ` · ${tr("fluidgrids.humanResponse.approverViaRole", "asked as {{role}}", { role: approval.assignedFrom })}`
|
|
406
|
+
]
|
|
407
|
+
}),
|
|
408
|
+
approval.comment && /* @__PURE__ */ jsx("q", {
|
|
409
|
+
className: "w-full whitespace-pre-wrap break-words text-text-primary",
|
|
410
|
+
children: approval.comment
|
|
411
|
+
})
|
|
412
|
+
]
|
|
413
|
+
}, approval.id))
|
|
414
|
+
})]
|
|
415
|
+
});
|
|
416
|
+
}
|
|
417
|
+
|
|
250
418
|
// src/modules/human-response/components/HumanRequestCard.tsx
|
|
251
419
|
/**
|
|
252
420
|
* One "Send and Wait for Response" ask in the in-app inbox (BOFF-7651): what was asked, of whom,
|
|
253
421
|
* through which channel and until when — and, when the caller may answer it in-app, the controls
|
|
254
|
-
* to do so (Approve / Decline, a text box, or the custom form).
|
|
422
|
+
* to do so (Approve / Decline, a text box, or the custom form). An approval with several approvers
|
|
423
|
+
* (BOFF-9956) also shows where its quorum stands and takes an optional comment with the answer.
|
|
255
424
|
*/
|
|
256
425
|
const CHANNEL_ICON = {
|
|
257
426
|
EMAIL: "mdi:email-outline",
|
|
@@ -315,6 +484,62 @@ function FormControls({ requestId, fields, values, onChange }) {
|
|
|
315
484
|
})
|
|
316
485
|
});
|
|
317
486
|
}
|
|
487
|
+
/** Approve / Decline, with an optional comment that is recorded with the answer (BOFF-9956). */
|
|
488
|
+
function ApprovalControls({ request, loading, onAnswer }) {
|
|
489
|
+
const tr = useTr();
|
|
490
|
+
const [comment, setComment] = useState("");
|
|
491
|
+
const note = comment.trim() ? { comment: comment.trim() } : {};
|
|
492
|
+
const commentId = `human-comment-${request.id}`;
|
|
493
|
+
return /* @__PURE__ */ jsxs("div", {
|
|
494
|
+
className: "space-y-2 pt-1",
|
|
495
|
+
children: [/* @__PURE__ */ jsxs("div", {
|
|
496
|
+
className: "space-y-1.5",
|
|
497
|
+
children: [/* @__PURE__ */ jsx(Label, {
|
|
498
|
+
htmlFor: commentId,
|
|
499
|
+
children: tr("fluidgrids.humanResponse.commentLabel", "Comment (optional)")
|
|
500
|
+
}), /* @__PURE__ */ jsx(Textarea, {
|
|
501
|
+
id: commentId,
|
|
502
|
+
value: comment,
|
|
503
|
+
maxLength: 2e3,
|
|
504
|
+
placeholder: tr("fluidgrids.humanResponse.commentPlaceholder", "Why you approve or decline. It is saved with your answer on the run."),
|
|
505
|
+
onChange: (event) => setComment(event.target.value),
|
|
506
|
+
"data-testid": "human-request-comment"
|
|
507
|
+
})]
|
|
508
|
+
}), /* @__PURE__ */ jsxs("div", {
|
|
509
|
+
className: "flex flex-wrap items-center gap-2",
|
|
510
|
+
children: [/* @__PURE__ */ jsxs(Button$1, {
|
|
511
|
+
"data-agent": "confirm",
|
|
512
|
+
size: "sm",
|
|
513
|
+
disabled: loading,
|
|
514
|
+
onClick: () => onAnswer({
|
|
515
|
+
action: "approve",
|
|
516
|
+
...note
|
|
517
|
+
}),
|
|
518
|
+
"data-testid": "human-request-approve",
|
|
519
|
+
children: [/* @__PURE__ */ jsx(Icon, {
|
|
520
|
+
icon: "mdi:check",
|
|
521
|
+
className: "mr-1.5",
|
|
522
|
+
width: 16
|
|
523
|
+
}), request.approveLabel]
|
|
524
|
+
}), request.approvalType === "double" && /* @__PURE__ */ jsxs(Button$1, {
|
|
525
|
+
"data-agent": "confirm",
|
|
526
|
+
size: "sm",
|
|
527
|
+
variant: "destructive",
|
|
528
|
+
disabled: loading,
|
|
529
|
+
onClick: () => onAnswer({
|
|
530
|
+
action: "decline",
|
|
531
|
+
...note
|
|
532
|
+
}),
|
|
533
|
+
"data-testid": "human-request-decline",
|
|
534
|
+
children: [/* @__PURE__ */ jsx(Icon, {
|
|
535
|
+
icon: "mdi:close",
|
|
536
|
+
className: "mr-1.5",
|
|
537
|
+
width: 16
|
|
538
|
+
}), request.declineLabel]
|
|
539
|
+
})]
|
|
540
|
+
})]
|
|
541
|
+
});
|
|
542
|
+
}
|
|
318
543
|
function HumanRequestCard({ request, onAnswered }) {
|
|
319
544
|
const tr = useTr();
|
|
320
545
|
const { respond, loading } = useRespondToHumanRequest();
|
|
@@ -323,7 +548,7 @@ function HumanRequestCard({ request, onAnswered }) {
|
|
|
323
548
|
const submit = async (answer) => {
|
|
324
549
|
try {
|
|
325
550
|
const decision = await respond(request.id, answer);
|
|
326
|
-
toast.success(decision
|
|
551
|
+
toast.success(answeredToastText(decision, tr));
|
|
327
552
|
onAnswered();
|
|
328
553
|
} catch (err) {
|
|
329
554
|
toast.error(err instanceof Error ? err.message : tr("fluidgrids.humanResponse.failed", "Your response could not be recorded"));
|
|
@@ -369,9 +594,10 @@ function HumanRequestCard({ request, onAnswered }) {
|
|
|
369
594
|
className: "whitespace-pre-wrap break-words text-sm text-text-primary",
|
|
370
595
|
children: request.message
|
|
371
596
|
}),
|
|
597
|
+
/* @__PURE__ */ jsx(ApprovalApprovers, { request }),
|
|
372
598
|
!request.canRespond && /* @__PURE__ */ jsx("p", {
|
|
373
599
|
className: "text-xs text-text-secondary",
|
|
374
|
-
children:
|
|
600
|
+
children: notAnswerableText(request, channelLabel(request.channel, tr), tr)
|
|
375
601
|
}),
|
|
376
602
|
request.canRespond && request.responseType === "FREE_TEXT" && /* @__PURE__ */ jsxs("div", {
|
|
377
603
|
className: "space-y-1.5",
|
|
@@ -393,32 +619,14 @@ function HumanRequestCard({ request, onAnswered }) {
|
|
|
393
619
|
[name]: value
|
|
394
620
|
}))
|
|
395
621
|
}),
|
|
396
|
-
request.canRespond && /* @__PURE__ */ jsx(
|
|
622
|
+
request.canRespond && request.responseType === "APPROVAL" && /* @__PURE__ */ jsx(ApprovalControls, {
|
|
623
|
+
request,
|
|
624
|
+
loading,
|
|
625
|
+
onAnswer: submit
|
|
626
|
+
}),
|
|
627
|
+
request.canRespond && request.responseType !== "APPROVAL" && /* @__PURE__ */ jsx("div", {
|
|
397
628
|
className: "flex flex-wrap items-center gap-2 pt-1",
|
|
398
|
-
children:
|
|
399
|
-
"data-agent": "confirm",
|
|
400
|
-
size: "sm",
|
|
401
|
-
disabled: loading,
|
|
402
|
-
onClick: () => submit({ action: "approve" }),
|
|
403
|
-
"data-testid": "human-request-approve",
|
|
404
|
-
children: [/* @__PURE__ */ jsx(Icon, {
|
|
405
|
-
icon: "mdi:check",
|
|
406
|
-
className: "mr-1.5",
|
|
407
|
-
width: 16
|
|
408
|
-
}), request.approveLabel]
|
|
409
|
-
}), request.approvalType === "double" && /* @__PURE__ */ jsxs(Button$1, {
|
|
410
|
-
"data-agent": "confirm",
|
|
411
|
-
size: "sm",
|
|
412
|
-
variant: "destructive",
|
|
413
|
-
disabled: loading,
|
|
414
|
-
onClick: () => submit({ action: "decline" }),
|
|
415
|
-
"data-testid": "human-request-decline",
|
|
416
|
-
children: [/* @__PURE__ */ jsx(Icon, {
|
|
417
|
-
icon: "mdi:close",
|
|
418
|
-
className: "mr-1.5",
|
|
419
|
-
width: 16
|
|
420
|
-
}), request.declineLabel]
|
|
421
|
-
})] }) : /* @__PURE__ */ jsxs(Button$1, {
|
|
629
|
+
children: /* @__PURE__ */ jsxs(Button$1, {
|
|
422
630
|
"data-agent": "confirm",
|
|
423
631
|
size: "sm",
|
|
424
632
|
disabled: loading || missingRequired || emptyText,
|
|
@@ -436,4 +644,4 @@ function HumanRequestCard({ request, onAnswered }) {
|
|
|
436
644
|
});
|
|
437
645
|
}
|
|
438
646
|
|
|
439
|
-
export {
|
|
647
|
+
export { useRespondToHumanRequest as a, usePendingHumanRequests as i, channelLabel as n, useRunHumanRequests as o, ApprovalApprovers as r, useRecipientLabel as s, HumanRequestCard as t };
|
|
@@ -1,16 +1,16 @@
|
|
|
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-
|
|
4
|
+
import { o as useRunReplayActions, r as useInsightsData } from "./useObservability-B9cOl5mw.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-
|
|
6
|
+
import { n as FailureTriagePanel } from "./FailureTriagePanel-BzD4UJU5.js";
|
|
7
7
|
import { o as useContinuousOptimisationEnabled } from "./feature-flags-DM5myWaD.js";
|
|
8
8
|
import { i as SdkPermissionButton, s as useFluidGridsPermission, t as FLUIDGRIDS_PERMISSIONS } from "./constants-B2lhWNoN.js";
|
|
9
|
-
import {
|
|
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 {
|
|
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-
|
|
13
|
-
import { i as utcDay, r as runListPath } from "./run-list-links-
|
|
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";
|
|
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
|
+
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";
|
|
@@ -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-
|
|
4
|
+
import { r as Badge } from "./TemplateCard-D800haiE.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-
|
|
5
|
-
import {
|
|
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";
|
|
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";
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
import { r as useTr } from "./TranslationBridge-Da-TPgQm.js";
|
|
3
|
-
import { gn as useFluidGridsAnalytics } from "./FluidGridsProvider-
|
|
3
|
+
import { gn as useFluidGridsAnalytics } from "./FluidGridsProvider-BuZERrTA.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";
|
|
@@ -3,18 +3,18 @@ import { t as __exportAll } from "./rolldown-runtime-hDbaFkMy.js";
|
|
|
3
3
|
import { r as useTr } from "./TranslationBridge-Da-TPgQm.js";
|
|
4
4
|
import { s as useFluidGridsPermission, t as FLUIDGRIDS_PERMISSIONS } from "./constants-B2lhWNoN.js";
|
|
5
5
|
import { n as useManagedAiPolicyAuthority } from "./ManagedAiPolicyAuthorityContext-CNkxIOZ1.js";
|
|
6
|
-
import {
|
|
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";
|
|
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-
|
|
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";
|
|
11
11
|
import { i as NativeSelect, o as StatusPill, t as FieldError, u as useResource } from "./shared-CMfn30xT.js";
|
|
12
|
-
import {
|
|
12
|
+
import { EI as WorkflowSearchAttributeType } from "./graphql-types-v6CTGwA0.js";
|
|
13
13
|
import { H as useFlowStore } from "./node-operation-selection--oy-yEq_.js";
|
|
14
|
-
import { Nt as useSaveStatusStore, tn as findSaveConflict } from "./FluidGridsProvider-
|
|
15
|
-
import { a as useLogStreamDestinations, i as useLogStreamDestinationActions } from "./useObservability-
|
|
14
|
+
import { Nt as useSaveStatusStore, tn as findSaveConflict } from "./FluidGridsProvider-BuZERrTA.js";
|
|
15
|
+
import { a as useLogStreamDestinations, i as useLogStreamDestinationActions } from "./useObservability-B9cOl5mw.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-
|
|
17
|
+
import { Nt as useUpdateWorkflowDefinitionMutation, Rt as useWorkflowDefinitionQuery, Vt as useWorkflowDefinitionsQuery, n as useAgentDefinitions } from "./useAgentDefinitions-DSU8Eek4.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";
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
"use client";
|
|
2
|
-
import { r as useAvailableTags } from "./useEntityTags-
|
|
2
|
+
import { r as useAvailableTags } from "./useEntityTags-C8rPBi6W.js";
|
|
3
3
|
import { r as useTr } from "./TranslationBridge-Da-TPgQm.js";
|
|
4
4
|
import { jsx, jsxs } from "react/jsx-runtime";
|
|
5
5
|
|
|
@@ -5,8 +5,8 @@ import { m as describeOperationError } from "./client-C9XSzSXr.js";
|
|
|
5
5
|
import { p as useSelfHostedWorkersEnabled } from "./feature-flags-DM5myWaD.js";
|
|
6
6
|
import { s as useFluidGridsPermission, t as FLUIDGRIDS_PERMISSIONS } from "./constants-B2lhWNoN.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-
|
|
9
|
-
import {
|
|
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";
|
|
9
|
+
import { nI as WorkflowEnvironment } from "./graphql-types-v6CTGwA0.js";
|
|
10
10
|
import { useState } from "react";
|
|
11
11
|
import { Icon } from "@iconify/react";
|
|
12
12
|
import { jsx, jsxs } from "react/jsx-runtime";
|
|
@@ -1,7 +1,7 @@
|
|
|
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, gn as useFluidGridsAnalytics, i as AVAILABLE_NODES, o as NODE_CONFIGS, t as FluidGridsContext, x as BrowseWorkflowTemplatesDocument } from "./FluidGridsProvider-
|
|
4
|
+
import { A as StoreNodeProductsByTypeDocument, C as GetMyNodeInstallationsDocument, D as InstallWorkflowNodeDocument, c as ensureInstalledNodeTypesLoaded, d as ensureRegistryNodeTypesLoaded, gn as useFluidGridsAnalytics, i as AVAILABLE_NODES, o as NODE_CONFIGS, t as FluidGridsContext, x as BrowseWorkflowTemplatesDocument } from "./FluidGridsProvider-BuZERrTA.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";
|
|
@@ -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-
|
|
1083
|
+
const LazyTemplateConfigurationModal = lazy(() => import("./TemplateConfigurationModal-DYs1YxYy.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
|
package/dist/{TemplateConfigurationModal-qNQGP7cm.js → TemplateConfigurationModal-DYs1YxYy.js}
RENAMED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
import { a as DialogFooter, d as Input, 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-
|
|
4
|
+
import { r as Badge } from "./TemplateCard-D800haiE.js";
|
|
5
5
|
import { t as Label } from "./label-CDy86rIZ.js";
|
|
6
6
|
import { r as useTr } from "./TranslationBridge-Da-TPgQm.js";
|
|
7
7
|
import { useEffect, useMemo, useState } from "react";
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
import { t as Button } from "./button-DG7y_FVJ.js";
|
|
3
|
-
import { n as templatePreview, r as Badge } from "./TemplateCard-
|
|
3
|
+
import { n as templatePreview, r as Badge } from "./TemplateCard-D800haiE.js";
|
|
4
4
|
import { r as useTr } from "./TranslationBridge-Da-TPgQm.js";
|
|
5
5
|
import { i as SdkPermissionButton, t as FLUIDGRIDS_PERMISSIONS } from "./constants-B2lhWNoN.js";
|
|
6
6
|
import { Icon } from "@iconify/react";
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
import { t as __exportAll } from "./rolldown-runtime-hDbaFkMy.js";
|
|
3
3
|
import { t as ThemeProvider } from "./theme-provider-B3mIuz2d.js";
|
|
4
|
-
import { t as FlowBuilderPage } from "./flow-builder-
|
|
5
|
-
import { a as useTemplateImportFlow, l as useImportWorkflowTemplate } from "./TemplateCard-
|
|
6
|
-
import { t as QuotaExhaustedDialog } from "./QuotaExhaustedDialog-
|
|
4
|
+
import { t as FlowBuilderPage } from "./flow-builder-CEYMv_sG.js";
|
|
5
|
+
import { a as useTemplateImportFlow, l as useImportWorkflowTemplate } from "./TemplateCard-D800haiE.js";
|
|
6
|
+
import { t as QuotaExhaustedDialog } from "./QuotaExhaustedDialog-RctNPfz_.js";
|
|
7
7
|
import { r as useTr } from "./TranslationBridge-Da-TPgQm.js";
|
|
8
8
|
import { i as SdkPermissionButton, t as FLUIDGRIDS_PERMISSIONS } from "./constants-B2lhWNoN.js";
|
|
9
9
|
import { t as BILLING_PLANS_PATH } from "./quota-Cdt8yz7N.js";
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
import { t as __exportAll } from "./rolldown-runtime-hDbaFkMy.js";
|
|
3
|
-
import { h as useWorkflowDefinitions, l as useLazyWorkflowDefinition, s as useDuplicateWorkflow } from "./useWorkflows-
|
|
4
|
-
import { a as useTemplateImportFlow, t as TemplateCard, u as useWorkflowTemplates, y as useGlobalStoreClient } from "./TemplateCard-
|
|
5
|
-
import {
|
|
3
|
+
import { h as useWorkflowDefinitions, l as useLazyWorkflowDefinition, s as useDuplicateWorkflow } from "./useWorkflows-D9BlhpWH.js";
|
|
4
|
+
import { a as useTemplateImportFlow, t as TemplateCard, u as useWorkflowTemplates, y as useGlobalStoreClient } from "./TemplateCard-D800haiE.js";
|
|
5
|
+
import { kI as WorkflowStatus } from "./graphql-types-v6CTGwA0.js";
|
|
6
6
|
import { i as SdkPermissionButton, t as FLUIDGRIDS_PERMISSIONS } from "./constants-B2lhWNoN.js";
|
|
7
|
-
import { t as QuotaExhaustedDialog } from "./QuotaExhaustedDialog-
|
|
7
|
+
import { t as QuotaExhaustedDialog } from "./QuotaExhaustedDialog-RctNPfz_.js";
|
|
8
8
|
import { r as useTr } from "./TranslationBridge-Da-TPgQm.js";
|
|
9
|
-
import { O as MyWorkflowTemplateSubmissionsDocument, P as WithdrawWorkflowTemplateSubmissionDocument, gn as useFluidGridsAnalytics, j as SubmitWorkflowTemplateDocument } from "./FluidGridsProvider-
|
|
9
|
+
import { O as MyWorkflowTemplateSubmissionsDocument, P as WithdrawWorkflowTemplateSubmissionDocument, gn as useFluidGridsAnalytics, j as SubmitWorkflowTemplateDocument } from "./FluidGridsProvider-BuZERrTA.js";
|
|
10
10
|
import { a as emitTemplateUsed } from "./fluidgridsEvents-Dm5CaHtr.js";
|
|
11
11
|
import { n as useFluidGridsPageControls } from "./pageControlsBridge-0pX9s-3k.js";
|
|
12
12
|
import { r as templatesControls } from "./pageControlSpecs-DZJ9K37m.js";
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
import { r as useTr } from "./TranslationBridge-Da-TPgQm.js";
|
|
3
3
|
import { _ as throwIfResultError, m as describeOperationError, n as getFluidGridsClient } from "./client-C9XSzSXr.js";
|
|
4
|
-
import {
|
|
4
|
+
import { Or as WorkflowDefinitionDocument, xi as WorkflowVersionDiffDocument } from "./graphql-operation-types-BdU65FNm.js";
|
|
5
5
|
import { t as canvasFromDefinition } from "./definition-canvas--3MPHoP-.js";
|
|
6
6
|
import { memo, useCallback, useEffect, useMemo, useRef, useState } from "react";
|
|
7
7
|
import { Background, Controls, Handle, MiniMap, Position, ReactFlow, ReactFlowProvider } from "@xyflow/react";
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
"use client";
|
|
2
|
-
import { n as FluidGridsProvider, vn as useCanvasEdges } from "./FluidGridsProvider-
|
|
2
|
+
import { n as FluidGridsProvider, vn as useCanvasEdges } from "./FluidGridsProvider-BuZERrTA.js";
|
|
3
3
|
import { H as useFlowStore } from "./node-operation-selection--oy-yEq_.js";
|
|
4
4
|
import { t as Button } from "./button-DG7y_FVJ.js";
|
|
5
5
|
import { d as Input } from "./dialog-Cjb4lB4D.js";
|
|
6
|
-
import { b as Card } from "./TemplateCard-
|
|
6
|
+
import { b as Card } from "./TemplateCard-D800haiE.js";
|
|
7
7
|
import { t as cn } from "./cn-QqidFIgr.js";
|
|
8
8
|
import { r as useTr } from "./TranslationBridge-Da-TPgQm.js";
|
|
9
|
-
import { _ as useNodeSelectedEvent, v as FluidGridsMark } from "./flow-builder-
|
|
9
|
+
import { _ as useNodeSelectedEvent, v as FluidGridsMark } from "./flow-builder-CEYMv_sG.js";
|
|
10
10
|
import { useCallback, useEffect, useRef, useState } from "react";
|
|
11
11
|
import { Background, Controls, Handle, MarkerType, MiniMap, Position, ReactFlow, ReactFlowProvider, useReactFlow } from "@xyflow/react";
|
|
12
12
|
import { Fragment, jsx, jsxs } from "react/jsx-runtime";
|
|
@@ -1,18 +1,18 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
import { t as __exportAll } from "./rolldown-runtime-hDbaFkMy.js";
|
|
3
|
-
import { d as releaseLeaseKeptForReload, f as useWorkflowReloadStore, t as FlowBuilderPage } from "./flow-builder-
|
|
3
|
+
import { d as releaseLeaseKeptForReload, f as useWorkflowReloadStore, t as FlowBuilderPage } from "./flow-builder-CEYMv_sG.js";
|
|
4
4
|
import { n as registerLiveCanvasHandler } from "./liveCanvas-D5ytXDp8.js";
|
|
5
5
|
import { _ as throwIfResultError, n as getFluidGridsClient, x as getFluidGridsConfig } from "./client-C9XSzSXr.js";
|
|
6
|
-
import {
|
|
6
|
+
import { Or as WorkflowDefinitionDocument } from "./graphql-operation-types-BdU65FNm.js";
|
|
7
7
|
import { r as useTr } from "./TranslationBridge-Da-TPgQm.js";
|
|
8
|
-
import { B as createConfiguredNode, Dt as blankWorkflowCreateInput, Nt as useSaveStatusStore, Xt as rememberRevision, Z as paramsFromOperation, an as workflowFingerprint, en as codeBuildIdOf, g as registerWorkflowNodeTypes, h as registerNodeManifests, kt as classifyCreateRefusal, m as refetchStoreNodes, mn as resolveNodeOperation, o as NODE_CONFIGS, u as ensureNodeTypesLoaded } from "./FluidGridsProvider-
|
|
8
|
+
import { B as createConfiguredNode, Dt as blankWorkflowCreateInput, Nt as useSaveStatusStore, Xt as rememberRevision, Z as paramsFromOperation, an as workflowFingerprint, en as codeBuildIdOf, g as registerWorkflowNodeTypes, h as registerNodeManifests, kt as classifyCreateRefusal, m as refetchStoreNodes, mn as resolveNodeOperation, o as NODE_CONFIGS, u as ensureNodeTypesLoaded } from "./FluidGridsProvider-BuZERrTA.js";
|
|
9
9
|
import { F as mergeStickyNotes, H as useFlowStore } from "./node-operation-selection--oy-yEq_.js";
|
|
10
10
|
import { t as canvasFromDefinition } from "./definition-canvas--3MPHoP-.js";
|
|
11
|
-
import { l as useLazyWorkflowDefinition, n as useCreateWorkflow } from "./useWorkflows-
|
|
12
|
-
import { c as getWorkflowNodeTypes, o as buildNodeCheck, s as buildRequiredNodeTypes, v as useInstalledNodes } from "./TemplateCard-
|
|
11
|
+
import { l as useLazyWorkflowDefinition, n as useCreateWorkflow } from "./useWorkflows-D9BlhpWH.js";
|
|
12
|
+
import { c as getWorkflowNodeTypes, o as buildNodeCheck, s as buildRequiredNodeTypes, v as useInstalledNodes } from "./TemplateCard-D800haiE.js";
|
|
13
13
|
import { c as withoutGuidedTourIntent, l as decideMissingWorkflow, o as isGuidedTourIntent, s as pickGuidedTour, u as isCreateIntent } from "./firstWorkflow-C_h0KMB2.js";
|
|
14
14
|
import { t as BILLING_PLANS_PATH } from "./quota-Cdt8yz7N.js";
|
|
15
|
-
import { T as CreateWorkflowRefusalDialog } from "./useWorkflowCodeExport-
|
|
15
|
+
import { T as CreateWorkflowRefusalDialog } from "./useWorkflowCodeExport-L-5NIRiH.js";
|
|
16
16
|
import { Suspense, lazy, useCallback, useEffect, useMemo, useRef, useState } from "react";
|
|
17
17
|
import { useLocation, useNavigate, useParams } from "react-router";
|
|
18
18
|
import { Icon } from "@iconify/react";
|
|
@@ -1088,7 +1088,7 @@ function GuidedTourStarter({ ready }) {
|
|
|
1088
1088
|
}
|
|
1089
1089
|
|
|
1090
1090
|
// src/builder/app/workflow/work/page.tsx
|
|
1091
|
-
const LazyMissingNodesInstallModal = lazy(() => import("./MissingNodesInstallModal-
|
|
1091
|
+
const LazyMissingNodesInstallModal = lazy(() => import("./MissingNodesInstallModal-DUmwDs4e.js").then((m) => ({ default: m.MissingNodesInstallModal })));
|
|
1092
1092
|
function WorkflowItem({ readonly = false }) {
|
|
1093
1093
|
if (readonly) {
|
|
1094
1094
|
const queryParams = new URLSearchParams(window.location.search);
|
|
@@ -1160,7 +1160,7 @@ function WorkflowItem({ readonly = false }) {
|
|
|
1160
1160
|
setInstallErrors([]);
|
|
1161
1161
|
try {
|
|
1162
1162
|
const { getGlobalStoreClient } = await import("./node-registry-refresh-Dy0uRg9f.js").then((n) => n.a);
|
|
1163
|
-
const { InstallWorkflowNodeDocument } = await import("./FluidGridsProvider-
|
|
1163
|
+
const { InstallWorkflowNodeDocument } = await import("./FluidGridsProvider-BuZERrTA.js").then((n) => n.y);
|
|
1164
1164
|
const { getFluidGridsConfig } = await import("./client-C9XSzSXr.js").then((n) => n.b);
|
|
1165
1165
|
const storeClient = getGlobalStoreClient();
|
|
1166
1166
|
const cfg = getFluidGridsConfig();
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
import { _ as throwIfResultError, h as isForbiddenError, n as getFluidGridsClient } from "./client-C9XSzSXr.js";
|
|
3
3
|
import { r as useTr } from "./TranslationBridge-Da-TPgQm.js";
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
4
|
+
import { C as CancelWorkflowProposalDocument, Gt as ProposeRunFixDocument, Kr as WorkflowProposalDocument, Kt as ProposeWorkflowChangeDocument, L as CreateWorkflowTestCaseDocument, R as CreateWorkflowTestCaseFromRunDocument, Z as DeleteWorkflowTestCaseDocument, Zt as RejectWorkflowProposalDocument, _i as WorkflowTestRunDocument, c as ApplyWorkflowProposalDocument, fr as UpdateWorkflowTestCaseDocument, gi as WorkflowTestCasesDocument, wn as RunWorkflowTestsDocument, yi as WorkflowTestRunsDocument } from "./graphql-operation-types-BdU65FNm.js";
|
|
5
|
+
import { MI as WorkflowTestExpectedStatus, NI as WorkflowTestRunSource, PI as WorkflowTestRunStatus, jI as WorkflowTestAssertionOperator, jd as ErrorType } from "./graphql-types-v6CTGwA0.js";
|
|
6
6
|
import { a as notifyFluidGridsAiCreditsUpdated } from "./aiCreditsBridge-BuE92tKo.js";
|
|
7
7
|
import { useCallback, useEffect, useRef, useState } from "react";
|
|
8
8
|
import { Icon } from "@iconify/react";
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
import { t as __exportAll } from "./rolldown-runtime-hDbaFkMy.js";
|
|
3
|
-
import { m as useWorkflowDefinition } from "./useWorkflows-
|
|
3
|
+
import { m as useWorkflowDefinition } from "./useWorkflows-D9BlhpWH.js";
|
|
4
4
|
import { Navigate, useParams } from "react-router";
|
|
5
5
|
import { Icon } from "@iconify/react";
|
|
6
6
|
import { jsx, jsxs } from "react/jsx-runtime";
|
|
@@ -2,8 +2,8 @@
|
|
|
2
2
|
import { t as __exportAll } from "./rolldown-runtime-hDbaFkMy.js";
|
|
3
3
|
import { n as getFluidGridsClient } from "./client-C9XSzSXr.js";
|
|
4
4
|
import { r as useTr } from "./TranslationBridge-Da-TPgQm.js";
|
|
5
|
-
import {
|
|
6
|
-
import {
|
|
5
|
+
import { DI as WorkflowSharePrincipalType, II as WorkflowVisibility, JF as WorkflowAccess, OI as WorkflowShareRole } from "./graphql-types-v6CTGwA0.js";
|
|
6
|
+
import { Pn as ShareWorkflowDocument, di as WorkflowSharingDocument } from "./graphql-operation-types-BdU65FNm.js";
|
|
7
7
|
import { useMemo } from "react";
|
|
8
8
|
import { jsx } from "react/jsx-runtime";
|
|
9
9
|
import { ResourceShareDialog, createSharePrincipalLister } from "@burdenoff/fe-libs/connections";
|