@burdenoff/fluidgrids-fe-sdk 2026.1107.1 → 2026.1108.2
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/{ExecutionDetailPage-TQST7JKC.js → ExecutionDetailPage-PY5OE2RJ.js} +16 -15
- package/dist/{ExecutionsListPage-QQKEGXSC.js → ExecutionsListPage-LKNYPXNZ.js} +12 -11
- package/dist/{MissingNodesInstallModal-OSAJLIBE.js → MissingNodesInstallModal-Q6OPULJU.js} +2 -1
- package/dist/{TemplateConfigurationModal-SILENYXX.js → TemplateConfigurationModal-PWCDDPKT.js} +2 -1
- package/dist/{TemplateDetailPanel-7MPY5MYT.js → TemplateDetailPanel-5WY75DVB.js} +3 -2
- package/dist/WorkflowBuilder-YFPBMOWZ.js +37 -0
- package/dist/{WorkflowsList-2WX7N526.js → WorkflowsList-TETNEMYP.js} +11 -11
- package/dist/{agentTools-MEEGOAE2.js → agentTools-BW2XMHRV.js} +7 -7
- package/dist/{chunk-KE677WYY.js → chunk-2CXUTQUH.js} +1 -1
- package/dist/{chunk-H4ERTSMX.js → chunk-2VSYOGNI.js} +1948 -35
- package/dist/{chunk-NZMUKAXG.js → chunk-54NXUOHI.js} +1 -1
- package/dist/{chunk-E3PNEIBJ.js → chunk-62RJORF7.js} +5 -5
- package/dist/{chunk-4F54UT62.js → chunk-66AKFXP7.js} +21 -18
- package/dist/{chunk-MESGVHUU.js → chunk-7SSMRID2.js} +5 -5
- package/dist/{chunk-752BT4WM.js → chunk-7XW6BC4B.js} +1 -1
- package/dist/{chunk-5375NUIO.js → chunk-AR22A74Y.js} +11 -0
- package/dist/{chunk-5KK3ALQ4.js → chunk-D5Y3DHGJ.js} +1 -1
- package/dist/{chunk-NSDBXKIC.js → chunk-DG4UO5OY.js} +5 -5
- package/dist/{chunk-NMYENCP2.js → chunk-E7KIH3CF.js} +1 -1
- package/dist/{chunk-HUCRE45R.js → chunk-GI6BQIQA.js} +127 -42
- package/dist/{chunk-Z3ABLERJ.js → chunk-GOZR72NK.js} +64 -1
- package/dist/{chunk-KHS2DZHH.js → chunk-HICQ4J4W.js} +1 -1
- package/dist/chunk-HPNZ3PYU.js +1448 -0
- package/dist/{chunk-RI4NFNDX.js → chunk-HQSSW7K3.js} +8 -8
- package/dist/{chunk-CTKWMPQQ.js → chunk-HSOSMPRC.js} +3 -1
- package/dist/{chunk-JRSCUUBT.js → chunk-IPJV2IOH.js} +1 -1
- package/dist/{chunk-PYSEOWLW.js → chunk-IWLNBDR2.js} +5 -5
- package/dist/{chunk-MYAFMXFI.js → chunk-IZOPKR64.js} +3 -3
- package/dist/{chunk-ZWDKN6PU.js → chunk-JRR4VKYD.js} +95 -6
- package/dist/{chunk-TDFC5U66.js → chunk-JSJSBB76.js} +2 -2
- package/dist/{chunk-V2K4HJY4.js → chunk-KJB3WZVD.js} +2 -2
- package/dist/{chunk-OHKSDHNC.js → chunk-L7PHZ7RY.js} +2 -2
- package/dist/{chunk-JOOGRWYY.js → chunk-LOMLLWHD.js} +705 -12
- package/dist/{chunk-ZTZNQ5GF.js → chunk-MYPB2KTJ.js} +13 -6
- package/dist/{chunk-HY3XCZLB.js → chunk-N2QXEV5Y.js} +8 -8
- package/dist/{chunk-EXJW7EKR.js → chunk-OJHBCOBA.js} +164 -1
- package/dist/{chunk-BLLBUHVF.js → chunk-POYMF7L6.js} +1 -1
- package/dist/{chunk-BQXVT32O.js → chunk-QJAZXCFQ.js} +1 -23
- package/dist/{chunk-GA3V3X7Q.js → chunk-RNYFPG7R.js} +4 -4
- package/dist/chunk-TFCIZFDM.js +28 -0
- package/dist/{chunk-PASKZCII.js → chunk-TN3NGTF7.js} +3 -3
- package/dist/{chunk-KXCJPWYE.js → chunk-VH3EET6H.js} +2 -2
- package/dist/{chunk-UZJKX5FN.js → chunk-X3F5IQBP.js} +5 -3
- package/dist/chunk-XRGAH6IQ.js +110 -0
- package/dist/chunk-YASVILWQ.js +398 -0
- package/dist/{chunk-WBVBRXDI.js → chunk-ZHXJYOOG.js} +2115 -25
- package/dist/executions.js +17 -16
- package/dist/history.js +9 -9
- package/dist/index.d.ts +15474 -238
- package/dist/index.js +1064 -58
- package/dist/{node-detail-view-AQCGO4XQ.js → node-detail-view-BGWKE6KW.js} +490 -22
- package/dist/nodes.js +5 -2
- package/dist/observability.js +9 -9
- package/dist/{quick-config-panel-G3T4JCF6.js → quick-config-panel-67BU4I23.js} +9 -9
- package/dist/settings.js +11 -9
- package/dist/templates.js +19 -17
- package/dist/{workflow-builder-C261exmL.d.ts → workflow-builder-D7eMRluc.d.ts} +3 -1
- package/dist/workflow-builder.d.ts +1 -1
- package/dist/workflow-builder.js +21 -19
- package/dist/workflow-preview.js +2 -2
- package/dist/workflows-list.js +11 -11
- package/package.json +2 -2
- package/dist/WorkflowBuilder-R7VIOVRO.js +0 -35
- package/dist/chunk-VKC3ICRA.js +0 -529
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { signalPayloadCard, components_default, payloadFromCardValues, parseRawSignalPayload } from './chunk-
|
|
2
|
-
import { TerminateWorkflowRunDocument, WorkflowRunHistoryDocument, RunEventAppendedDocument, DurableRunFieldsDocument, WorkflowRunDeterminismStatusDocument, WorkflowRunStackTraceDocument, SignalWorkflowRunDocument } from './chunk-
|
|
1
|
+
import { signalPayloadCard, components_default, payloadFromCardValues, parseRawSignalPayload } from './chunk-GI6BQIQA.js';
|
|
2
|
+
import { TerminateWorkflowRunDocument, WorkflowRunHistoryDocument, RunEventAppendedDocument, DurableRunFieldsDocument, WorkflowRunDeterminismStatusDocument, WorkflowRunStackTraceDocument, SignalWorkflowRunDocument } from './chunk-GOZR72NK.js';
|
|
3
3
|
import { useTr } from './chunk-UULVIT25.js';
|
|
4
4
|
import { getFluidGridsClient, getFluidGridsClientSafe } from './chunk-PDODDDHY.js';
|
|
5
5
|
import { throwIfResultError, describeOperationError } from './chunk-JKLZ6YZ3.js';
|
|
@@ -380,6 +380,8 @@ function RunHistoryView({
|
|
|
380
380
|
defaultShowTasks = false,
|
|
381
381
|
compact = false,
|
|
382
382
|
showBenign = false,
|
|
383
|
+
renderPayload,
|
|
384
|
+
eventActions,
|
|
383
385
|
"data-testid": testId = "run-history"
|
|
384
386
|
}) {
|
|
385
387
|
const tr = useTr();
|
|
@@ -463,7 +465,9 @@ function RunHistoryView({
|
|
|
463
465
|
onViewChildRun,
|
|
464
466
|
compact,
|
|
465
467
|
benign: showBenign && group.failure?.benign === true,
|
|
466
|
-
statusLabel: tr(...STATUS_LABEL[group.status])
|
|
468
|
+
statusLabel: tr(...STATUS_LABEL[group.status]),
|
|
469
|
+
renderPayload,
|
|
470
|
+
eventActions
|
|
467
471
|
},
|
|
468
472
|
group.key
|
|
469
473
|
)) })
|
|
@@ -476,7 +480,9 @@ function HistoryRow({
|
|
|
476
480
|
onViewChildRun,
|
|
477
481
|
compact,
|
|
478
482
|
benign,
|
|
479
|
-
statusLabel
|
|
483
|
+
statusLabel,
|
|
484
|
+
renderPayload,
|
|
485
|
+
eventActions
|
|
480
486
|
}) {
|
|
481
487
|
const tr = useTr();
|
|
482
488
|
return /* @__PURE__ */ jsxs(
|
|
@@ -571,7 +577,8 @@ function HistoryRow({
|
|
|
571
577
|
event.seq
|
|
572
578
|
] }),
|
|
573
579
|
/* @__PURE__ */ jsx("span", { className: "text-text-primary", children: event.type }),
|
|
574
|
-
/* @__PURE__ */ jsx("span", { className: "ml-auto", children: formatTime(event.createdAt) })
|
|
580
|
+
/* @__PURE__ */ jsx("span", { className: "ml-auto", children: formatTime(event.createdAt) }),
|
|
581
|
+
eventActions?.(event)
|
|
575
582
|
] }),
|
|
576
583
|
isHttpsUrl(event.payloadUrl) ? /* @__PURE__ */ jsx(
|
|
577
584
|
"a",
|
|
@@ -585,7 +592,7 @@ function HistoryRow({
|
|
|
585
592
|
"Download payload"
|
|
586
593
|
)
|
|
587
594
|
}
|
|
588
|
-
) : event.payload && Object.keys(event.payload).length > 0 ? /* @__PURE__ */ jsx("pre", { className: "mt-1 max-h-48 overflow-auto whitespace-pre-wrap break-words rounded bg-background-secondary p-2 font-mono text-text-primary", children: JSON.stringify(event.payload, null, 2) }) : null
|
|
595
|
+
) : event.payload && Object.keys(event.payload).length > 0 && renderPayload ? renderPayload(event) : event.payload && Object.keys(event.payload).length > 0 ? /* @__PURE__ */ jsx("pre", { className: "mt-1 max-h-48 overflow-auto whitespace-pre-wrap break-words rounded bg-background-secondary p-2 font-mono text-text-primary", children: JSON.stringify(event.payload, null, 2) }) : null
|
|
589
596
|
] }, event.seq))
|
|
590
597
|
] })
|
|
591
598
|
]
|
|
@@ -1,11 +1,11 @@
|
|
|
1
|
-
import { isGuidedTourIntent, pickGuidedTour, withoutGuidedTourIntent, isCreateIntent, CreateWorkflowRefusalDialog, decideMissingWorkflow } from './chunk-
|
|
1
|
+
import { isGuidedTourIntent, pickGuidedTour, withoutGuidedTourIntent, isCreateIntent, CreateWorkflowRefusalDialog, decideMissingWorkflow } from './chunk-7XW6BC4B.js';
|
|
2
2
|
import { registerLiveCanvasHandler } from './chunk-PIKYQE7P.js';
|
|
3
|
-
import { useWorkflowReloadStore, releaseLeaseKeptForReload, useInstalledNodes, buildNodeCheck, FlowBuilderPage, buildRequiredNodeTypes } from './chunk-
|
|
4
|
-
import { canvasFromDefinition } from './chunk-
|
|
5
|
-
import { useLazyWorkflowDefinition, useCreateWorkflow } from './chunk-
|
|
6
|
-
import { refetchStoreNodes, BILLING_PLANS_PATH, codeBuildIdOf, rememberRevision, blankWorkflowCreateInput, classifyCreateRefusal, useSaveStatusStore, workflowFingerprint, registerWorkflowNodeTypes } from './chunk-
|
|
7
|
-
import { useFlowStore, mergeStickyNotes } from './chunk-
|
|
8
|
-
import { WorkflowDefinitionDocument } from './chunk-
|
|
3
|
+
import { useWorkflowReloadStore, releaseLeaseKeptForReload, useInstalledNodes, buildNodeCheck, FlowBuilderPage, buildRequiredNodeTypes } from './chunk-66AKFXP7.js';
|
|
4
|
+
import { canvasFromDefinition } from './chunk-2CXUTQUH.js';
|
|
5
|
+
import { useLazyWorkflowDefinition, useCreateWorkflow } from './chunk-KJB3WZVD.js';
|
|
6
|
+
import { refetchStoreNodes, BILLING_PLANS_PATH, codeBuildIdOf, rememberRevision, blankWorkflowCreateInput, classifyCreateRefusal, useSaveStatusStore, workflowFingerprint, registerWorkflowNodeTypes } from './chunk-GI6BQIQA.js';
|
|
7
|
+
import { useFlowStore, mergeStickyNotes } from './chunk-X3F5IQBP.js';
|
|
8
|
+
import { WorkflowDefinitionDocument } from './chunk-GOZR72NK.js';
|
|
9
9
|
import { useTr } from './chunk-UULVIT25.js';
|
|
10
10
|
import { getFluidGridsClient } from './chunk-PDODDDHY.js';
|
|
11
11
|
import { throwIfResultError } from './chunk-JKLZ6YZ3.js';
|
|
@@ -726,7 +726,7 @@ function GuidedTourStarter({ ready }) {
|
|
|
726
726
|
return /* @__PURE__ */ jsx(StartGuidedTour, {});
|
|
727
727
|
}
|
|
728
728
|
var LazyMissingNodesInstallModal = lazy(
|
|
729
|
-
() => import('./MissingNodesInstallModal-
|
|
729
|
+
() => import('./MissingNodesInstallModal-Q6OPULJU.js').then(
|
|
730
730
|
(m) => ({ default: m.MissingNodesInstallModal })
|
|
731
731
|
)
|
|
732
732
|
);
|
|
@@ -1198,4 +1198,167 @@ function ActionPoliciesTab() {
|
|
|
1198
1198
|
] });
|
|
1199
1199
|
}
|
|
1200
1200
|
|
|
1201
|
-
|
|
1201
|
+
// src/modules/run-control/utils/codec-client.ts
|
|
1202
|
+
var ENCODED_KEYS = /* @__PURE__ */ new Set([
|
|
1203
|
+
"$fgp",
|
|
1204
|
+
"encoding",
|
|
1205
|
+
"metadata",
|
|
1206
|
+
"data"
|
|
1207
|
+
]);
|
|
1208
|
+
var BASE64 = /^[A-Za-z0-9+/]*={0,2}$/;
|
|
1209
|
+
function isEncodedPayload(value) {
|
|
1210
|
+
if (typeof value !== "object" || value === null || Array.isArray(value))
|
|
1211
|
+
return false;
|
|
1212
|
+
const entries = Object.entries(value);
|
|
1213
|
+
if (!entries.every(([key]) => ENCODED_KEYS.has(key))) return false;
|
|
1214
|
+
const record = Object.fromEntries(entries);
|
|
1215
|
+
if (record["$fgp"] !== 1) return false;
|
|
1216
|
+
const encoding = record["encoding"];
|
|
1217
|
+
if (typeof encoding !== "string" || !encoding || encoding === "json/plain")
|
|
1218
|
+
return false;
|
|
1219
|
+
const data = record["data"];
|
|
1220
|
+
if (typeof data !== "string" || data.length % 4 !== 0 || !BASE64.test(data))
|
|
1221
|
+
return false;
|
|
1222
|
+
const metadata = record["metadata"];
|
|
1223
|
+
if (metadata === void 0) return true;
|
|
1224
|
+
if (typeof metadata !== "object" || metadata === null || Array.isArray(metadata))
|
|
1225
|
+
return false;
|
|
1226
|
+
return Object.values(metadata).every((entry) => typeof entry === "string");
|
|
1227
|
+
}
|
|
1228
|
+
function containsEncodedPayload(value, depth = 0) {
|
|
1229
|
+
if (depth > 32) return false;
|
|
1230
|
+
if (isEncodedPayload(value)) return true;
|
|
1231
|
+
if (Array.isArray(value))
|
|
1232
|
+
return value.some((item) => containsEncodedPayload(item, depth + 1));
|
|
1233
|
+
if (typeof value === "object" && value !== null)
|
|
1234
|
+
return Object.values(value).some(
|
|
1235
|
+
(item) => containsEncodedPayload(item, depth + 1)
|
|
1236
|
+
);
|
|
1237
|
+
return false;
|
|
1238
|
+
}
|
|
1239
|
+
function encodedPayloadBytes(payload) {
|
|
1240
|
+
const padding = payload.data.endsWith("==") ? 2 : payload.data.endsWith("=") ? 1 : 0;
|
|
1241
|
+
return Math.max(0, payload.data.length / 4 * 3 - padding);
|
|
1242
|
+
}
|
|
1243
|
+
function toBase64(text) {
|
|
1244
|
+
const bytes = new TextEncoder().encode(text);
|
|
1245
|
+
let binary = "";
|
|
1246
|
+
for (const byte of bytes) binary += String.fromCharCode(byte);
|
|
1247
|
+
return btoa(binary);
|
|
1248
|
+
}
|
|
1249
|
+
function fromBase64(value) {
|
|
1250
|
+
const binary = atob(value);
|
|
1251
|
+
const bytes = new Uint8Array(binary.length);
|
|
1252
|
+
for (let i = 0; i < binary.length; i++) bytes[i] = binary.charCodeAt(i);
|
|
1253
|
+
return new TextDecoder().decode(bytes);
|
|
1254
|
+
}
|
|
1255
|
+
function checkCodecServerUrl(value) {
|
|
1256
|
+
let url;
|
|
1257
|
+
try {
|
|
1258
|
+
url = new URL(value.trim());
|
|
1259
|
+
} catch {
|
|
1260
|
+
return { ok: false, reason: "invalid" };
|
|
1261
|
+
}
|
|
1262
|
+
if (url.username || url.password) return { ok: false, reason: "invalid" };
|
|
1263
|
+
if (url.protocol === "https:") return { ok: true, url };
|
|
1264
|
+
if (url.protocol === "http:" && ["localhost", "127.0.0.1", "[::1]"].includes(url.hostname))
|
|
1265
|
+
return { ok: true, url };
|
|
1266
|
+
return {
|
|
1267
|
+
ok: false,
|
|
1268
|
+
reason: url.protocol === "http:" ? "insecure" : "invalid"
|
|
1269
|
+
};
|
|
1270
|
+
}
|
|
1271
|
+
function codecServerErrorMessage(code, params) {
|
|
1272
|
+
switch (code) {
|
|
1273
|
+
case "invalidUrl":
|
|
1274
|
+
return "The codec server URL must be https (or http to localhost).";
|
|
1275
|
+
case "unreachable":
|
|
1276
|
+
return `The codec server could not be reached: ${params.detail ?? ""}`;
|
|
1277
|
+
case "http":
|
|
1278
|
+
return `The codec server answered HTTP ${params.status ?? 0}.`;
|
|
1279
|
+
case "notPayloadList":
|
|
1280
|
+
return "The codec server's answer is not a list of payloads.";
|
|
1281
|
+
case "notJson":
|
|
1282
|
+
return "The codec server returned a payload that is not JSON.";
|
|
1283
|
+
}
|
|
1284
|
+
}
|
|
1285
|
+
var CodecServerError = class extends Error {
|
|
1286
|
+
code;
|
|
1287
|
+
params;
|
|
1288
|
+
constructor(code, params = {}) {
|
|
1289
|
+
super(codecServerErrorMessage(code, params));
|
|
1290
|
+
this.name = "CodecServerError";
|
|
1291
|
+
this.code = code;
|
|
1292
|
+
this.params = params;
|
|
1293
|
+
}
|
|
1294
|
+
};
|
|
1295
|
+
function toTemporal(payload) {
|
|
1296
|
+
const metadata = {
|
|
1297
|
+
encoding: toBase64(payload.encoding)
|
|
1298
|
+
};
|
|
1299
|
+
for (const [key, value] of Object.entries(payload.metadata ?? {}))
|
|
1300
|
+
if (key !== "encoding") metadata[key] = toBase64(value);
|
|
1301
|
+
return { metadata, data: payload.data };
|
|
1302
|
+
}
|
|
1303
|
+
function fromTemporal(payload) {
|
|
1304
|
+
const metadata = payload.metadata ?? {};
|
|
1305
|
+
const encoding = metadata["encoding"] ? fromBase64(metadata["encoding"]) : "json/plain";
|
|
1306
|
+
const data = payload.data ?? "";
|
|
1307
|
+
if (encoding === "json/plain") {
|
|
1308
|
+
const text = data ? fromBase64(data) : "";
|
|
1309
|
+
return text ? JSON.parse(text) : null;
|
|
1310
|
+
}
|
|
1311
|
+
const rest = {};
|
|
1312
|
+
for (const [key, value] of Object.entries(metadata))
|
|
1313
|
+
if (key !== "encoding") rest[key] = fromBase64(value);
|
|
1314
|
+
const still = { $fgp: 1, encoding, data };
|
|
1315
|
+
if (Object.keys(rest).length > 0) still.metadata = rest;
|
|
1316
|
+
return still;
|
|
1317
|
+
}
|
|
1318
|
+
function isTemporalPayloadList(value) {
|
|
1319
|
+
if (typeof value !== "object" || value === null) return false;
|
|
1320
|
+
const payloads = Reflect.get(value, "payloads");
|
|
1321
|
+
return Array.isArray(payloads) && payloads.every(
|
|
1322
|
+
(item) => typeof item === "object" && item !== null && !Array.isArray(item)
|
|
1323
|
+
);
|
|
1324
|
+
}
|
|
1325
|
+
async function decodePayloads(server, payloads, fetchImpl = fetch) {
|
|
1326
|
+
const checked = checkCodecServerUrl(server.url);
|
|
1327
|
+
if (!checked.ok) throw new CodecServerError("invalidUrl");
|
|
1328
|
+
const endpoint = new URL(
|
|
1329
|
+
`${checked.url.pathname.replace(/\/+$/, "")}/decode`,
|
|
1330
|
+
checked.url
|
|
1331
|
+
);
|
|
1332
|
+
let response;
|
|
1333
|
+
try {
|
|
1334
|
+
response = await fetchImpl(endpoint.toString(), {
|
|
1335
|
+
method: "POST",
|
|
1336
|
+
mode: "cors",
|
|
1337
|
+
credentials: server.includeCredentials ? "include" : "omit",
|
|
1338
|
+
referrerPolicy: "no-referrer",
|
|
1339
|
+
headers: { "content-type": "application/json" },
|
|
1340
|
+
body: JSON.stringify({ payloads: payloads.map(toTemporal) })
|
|
1341
|
+
});
|
|
1342
|
+
} catch (error) {
|
|
1343
|
+
throw new CodecServerError("unreachable", {
|
|
1344
|
+
detail: error instanceof Error ? error.message : String(error)
|
|
1345
|
+
});
|
|
1346
|
+
}
|
|
1347
|
+
if (!response.ok)
|
|
1348
|
+
throw new CodecServerError("http", { status: response.status });
|
|
1349
|
+
let body;
|
|
1350
|
+
try {
|
|
1351
|
+
body = await response.json();
|
|
1352
|
+
} catch {
|
|
1353
|
+
throw new CodecServerError("notPayloadList");
|
|
1354
|
+
}
|
|
1355
|
+
if (!isTemporalPayloadList(body) || body.payloads.length !== payloads.length)
|
|
1356
|
+
throw new CodecServerError("notPayloadList");
|
|
1357
|
+
try {
|
|
1358
|
+
return body.payloads.map(fromTemporal);
|
|
1359
|
+
} catch {
|
|
1360
|
+
throw new CodecServerError("notJson");
|
|
1361
|
+
}
|
|
1362
|
+
}
|
|
1363
|
+
|
|
1364
|
+
export { ActionPoliciesTab, CodecServerError, RunPolicyDecisions, checkCodecServerUrl, containsEncodedPayload, decodePayloads, encodedPayloadBytes, isEncodedPayload, useRunPolicyDecisions };
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { LOG_STREAM_DESTINATIONS, CREATE_LOG_STREAM_DESTINATION, UPDATE_LOG_STREAM_DESTINATION, DELETE_LOG_STREAM_DESTINATION, TEST_LOG_STREAM_DESTINATION, REPLAY_WORKFLOW_RUN, RETRY_WORKFLOW_RUNS, OBSERVABILITY_DASHBOARD_SUMMARY, OBSERVABILITY_FAILED_RUNS, OBSERVABILITY_DATA_SINKS, OBSERVABILITY_DATA_SINK_DATA } from './chunk-5ERAJC2I.js';
|
|
2
|
-
import { useFluidGridsAnalytics, emitRunStarted, openRunQuotaUpgradePrompt, useFluidGridsFlag, FLUIDGRIDS_FLAGS } from './chunk-
|
|
2
|
+
import { useFluidGridsAnalytics, emitRunStarted, openRunQuotaUpgradePrompt, useFluidGridsFlag, FLUIDGRIDS_FLAGS } from './chunk-GI6BQIQA.js';
|
|
3
3
|
import { useTr } from './chunk-UULVIT25.js';
|
|
4
4
|
import { getFluidGridsClient } from './chunk-PDODDDHY.js';
|
|
5
5
|
import { throwIfResultError, describeOperationError, emitFluidGridsEvent } from './chunk-JKLZ6YZ3.js';
|
|
@@ -50,27 +50,5 @@ function Button({
|
|
|
50
50
|
}
|
|
51
51
|
);
|
|
52
52
|
}
|
|
53
|
-
var badgeVariants = cva(
|
|
54
|
-
"inline-flex items-center rounded-full border px-2.5 py-0.5 text-xs font-semibold transition-colors focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2",
|
|
55
|
-
{
|
|
56
|
-
variants: {
|
|
57
|
-
variant: {
|
|
58
|
-
default: "border-transparent bg-primary text-primary-foreground hover:bg-primary/80",
|
|
59
|
-
secondary: "border-transparent bg-secondary text-secondary-foreground hover:bg-secondary/80",
|
|
60
|
-
destructive: "border-transparent bg-destructive text-destructive-foreground hover:bg-destructive/80",
|
|
61
|
-
outline: "text-foreground",
|
|
62
|
-
success: "border-transparent bg-status-success-bg-subtle text-status-success-text",
|
|
63
|
-
warning: "border-transparent bg-status-warning-bg-subtle text-status-warning-text",
|
|
64
|
-
info: "border-transparent bg-status-info-bg-subtle text-status-info-text"
|
|
65
|
-
}
|
|
66
|
-
},
|
|
67
|
-
defaultVariants: {
|
|
68
|
-
variant: "default"
|
|
69
|
-
}
|
|
70
|
-
}
|
|
71
|
-
);
|
|
72
|
-
function Badge({ className, variant, ...props }) {
|
|
73
|
-
return /* @__PURE__ */ jsx("div", { className: cn(badgeVariants({ variant }), className), ...props });
|
|
74
|
-
}
|
|
75
53
|
|
|
76
|
-
export {
|
|
54
|
+
export { Button, buttonVariants };
|
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
import { validateDateRange, statusCountFilter, STATUS_COUNT_GROUP_BY, statusCountsOf } from './chunk-
|
|
1
|
+
import { validateDateRange, statusCountFilter, STATUS_COUNT_GROUP_BY, statusCountsOf } from './chunk-JRR4VKYD.js';
|
|
2
2
|
import { isAgentNodeType } from './chunk-WZ3EJVS6.js';
|
|
3
|
-
import { useAvailableTags, formatRunVersion, nodeDisplayTitle } from './chunk-
|
|
3
|
+
import { useAvailableTags, formatRunVersion, nodeDisplayTitle } from './chunk-HICQ4J4W.js';
|
|
4
4
|
import { executionsControls } from './chunk-FNZZ5JJL.js';
|
|
5
5
|
import { useFluidGridsPageControls } from './chunk-PJAWNFJV.js';
|
|
6
|
-
import { useDurableParityEnabled, formatElapsedMs, runDurationMs, nodeStateDurationMs } from './chunk-
|
|
7
|
-
import { SetWorkflowRunVersioningOverrideDocument, WorkflowRunsCountDocument, DurableParityRunFieldsDocument, WorkflowRunPendingDocument, WorkflowRunMetadataDocument } from './chunk-
|
|
6
|
+
import { useDurableParityEnabled, formatElapsedMs, runDurationMs, nodeStateDurationMs } from './chunk-GI6BQIQA.js';
|
|
7
|
+
import { SetWorkflowRunVersioningOverrideDocument, WorkflowRunsCountDocument, DurableParityRunFieldsDocument, WorkflowRunPendingDocument, WorkflowRunMetadataDocument } from './chunk-GOZR72NK.js';
|
|
8
8
|
import { useTr } from './chunk-UULVIT25.js';
|
|
9
9
|
import { getFluidGridsClient } from './chunk-PDODDDHY.js';
|
|
10
10
|
import { throwIfResultError, describeOperationError } from './chunk-JKLZ6YZ3.js';
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { cn } from './chunk-JL7CASN5.js';
|
|
2
|
+
import { cva } from 'class-variance-authority';
|
|
3
|
+
import { jsx } from 'react/jsx-runtime';
|
|
4
|
+
|
|
5
|
+
var badgeVariants = cva(
|
|
6
|
+
"inline-flex items-center rounded-full border px-2.5 py-0.5 text-xs font-semibold transition-colors focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2",
|
|
7
|
+
{
|
|
8
|
+
variants: {
|
|
9
|
+
variant: {
|
|
10
|
+
default: "border-transparent bg-primary text-primary-foreground hover:bg-primary/80",
|
|
11
|
+
secondary: "border-transparent bg-secondary text-secondary-foreground hover:bg-secondary/80",
|
|
12
|
+
destructive: "border-transparent bg-destructive text-destructive-foreground hover:bg-destructive/80",
|
|
13
|
+
outline: "text-foreground",
|
|
14
|
+
success: "border-transparent bg-status-success-bg-subtle text-status-success-text",
|
|
15
|
+
warning: "border-transparent bg-status-warning-bg-subtle text-status-warning-text",
|
|
16
|
+
info: "border-transparent bg-status-info-bg-subtle text-status-info-text"
|
|
17
|
+
}
|
|
18
|
+
},
|
|
19
|
+
defaultVariants: {
|
|
20
|
+
variant: "default"
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
);
|
|
24
|
+
function Badge({ className, variant, ...props }) {
|
|
25
|
+
return /* @__PURE__ */ jsx("div", { className: cn(badgeVariants({ variant }), className), ...props });
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
export { Badge, badgeVariants };
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { operatorSpec, normaliseAssertRules, describeAssertRuleProblem } from './chunk-JDLQ6QIB.js';
|
|
2
|
-
import { useEntityTags, useTagEntity, useUntagEntity } from './chunk-
|
|
2
|
+
import { useEntityTags, useTagEntity, useUntagEntity } from './chunk-HICQ4J4W.js';
|
|
3
3
|
import { notifyFluidGridsAiCreditsUpdated } from './chunk-Y53CVZVV.js';
|
|
4
|
-
import { ErrorType } from './chunk-
|
|
5
|
-
import { WorkflowProposalDocument, ProposeRunFixDocument, ProposeWorkflowChangeDocument, ApplyWorkflowProposalDocument, RejectWorkflowProposalDocument, CancelWorkflowProposalDocument, WorkflowTestCasesDocument, WorkflowTestRunsDocument, WorkflowTestRunDocument, CreateWorkflowTestCaseDocument, UpdateWorkflowTestCaseDocument, DeleteWorkflowTestCaseDocument, RunWorkflowTestsDocument, CreateWorkflowTestCaseFromRunDocument } from './chunk-
|
|
4
|
+
import { ErrorType } from './chunk-2VSYOGNI.js';
|
|
5
|
+
import { WorkflowProposalDocument, ProposeRunFixDocument, ProposeWorkflowChangeDocument, ApplyWorkflowProposalDocument, RejectWorkflowProposalDocument, CancelWorkflowProposalDocument, WorkflowTestCasesDocument, WorkflowTestRunsDocument, WorkflowTestRunDocument, CreateWorkflowTestCaseDocument, UpdateWorkflowTestCaseDocument, DeleteWorkflowTestCaseDocument, RunWorkflowTestsDocument, CreateWorkflowTestCaseFromRunDocument } from './chunk-GOZR72NK.js';
|
|
6
6
|
import { useTr } from './chunk-UULVIT25.js';
|
|
7
7
|
import { getFluidGridsClient } from './chunk-PDODDDHY.js';
|
|
8
8
|
import { throwIfResultError, isForbiddenError } from './chunk-JKLZ6YZ3.js';
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { versionsOfWorkflow, VersionDiffDialog } from './chunk-
|
|
1
|
+
import { versionsOfWorkflow, VersionDiffDialog } from './chunk-L7PHZ7RY.js';
|
|
2
2
|
import { historyControls } from './chunk-FNZZ5JJL.js';
|
|
3
|
-
import { useWorkflowDefinitions, useRestoreWorkflowVersion } from './chunk-
|
|
3
|
+
import { useWorkflowDefinitions, useRestoreWorkflowVersion } from './chunk-KJB3WZVD.js';
|
|
4
4
|
import { useFluidGridsPageControls } from './chunk-PJAWNFJV.js';
|
|
5
5
|
import { FluidGridsDocsLink } from './chunk-4VJ3MDOV.js';
|
|
6
6
|
import { useTr } from './chunk-UULVIT25.js';
|
|
@@ -1442,9 +1442,11 @@ function sourceLanguageOf(path) {
|
|
|
1442
1442
|
if (/\.json$/.test(path)) return "json";
|
|
1443
1443
|
return "text";
|
|
1444
1444
|
}
|
|
1445
|
-
function isEditableSourcePath(path) {
|
|
1445
|
+
function isEditableSourcePath(path, { python = false } = {}) {
|
|
1446
1446
|
if (path.startsWith(".fluidgrids/")) return false;
|
|
1447
1447
|
const language = sourceLanguageOf(path);
|
|
1448
|
+
if (language === "python")
|
|
1449
|
+
return python && !path.startsWith("_vendor/") && !path.includes("/_vendor/");
|
|
1448
1450
|
return language === "typescript" || language === "json";
|
|
1449
1451
|
}
|
|
1450
1452
|
function projectLanguage(files) {
|
|
@@ -1458,10 +1460,10 @@ function changedSourceFiles(loaded, current) {
|
|
|
1458
1460
|
return now !== void 0 && now !== file.content;
|
|
1459
1461
|
}).map((file) => ({ path: file.path, content: current[file.path] })).sort((a, b) => a.path < b.path ? -1 : a.path > b.path ? 1 : 0);
|
|
1460
1462
|
}
|
|
1461
|
-
function defaultSourcePath(files, entry) {
|
|
1463
|
+
function defaultSourcePath(files, entry, options = {}) {
|
|
1462
1464
|
if (entry && files.some((file) => file.path === entry)) return entry;
|
|
1463
1465
|
return files.find(
|
|
1464
|
-
(file) => file.path.startsWith("workflows/") && isEditableSourcePath(file.path)
|
|
1466
|
+
(file) => file.path.startsWith("workflows/") && isEditableSourcePath(file.path, options)
|
|
1465
1467
|
)?.path ?? files[0]?.path;
|
|
1466
1468
|
}
|
|
1467
1469
|
function diagnosticsByPath(diagnostics) {
|
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
import { buttonVariants } from './chunk-QJAZXCFQ.js';
|
|
2
|
+
import { cn } from './chunk-JL7CASN5.js';
|
|
3
|
+
import { useTr } from './chunk-UULVIT25.js';
|
|
4
|
+
import { getFluidGridsConfig } from './chunk-UEG2WC3G.js';
|
|
5
|
+
import { useInRouterContext, useNavigate } from 'react-router';
|
|
6
|
+
import { Icon } from '@iconify/react';
|
|
7
|
+
import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
|
|
8
|
+
|
|
9
|
+
// src/utils/devportal-link.ts
|
|
10
|
+
var DEVPORTAL_NODE_APPS_PATH = "/apps";
|
|
11
|
+
function hasUnsafeCharacter(value) {
|
|
12
|
+
for (let i = 0; i < value.length; i++) {
|
|
13
|
+
const code = value.charCodeAt(i);
|
|
14
|
+
if (code < 32 || code === 127 || value[i] === "\\") return true;
|
|
15
|
+
}
|
|
16
|
+
return false;
|
|
17
|
+
}
|
|
18
|
+
function resolveDevportalLink(basePath, subpath = DEVPORTAL_NODE_APPS_PATH) {
|
|
19
|
+
const base = basePath?.trim();
|
|
20
|
+
if (!base) return null;
|
|
21
|
+
if (hasUnsafeCharacter(base)) return null;
|
|
22
|
+
const suffix = `/${subpath.replace(/^\/+/, "")}`.replace(/\/+$/, "");
|
|
23
|
+
if (base.startsWith("/")) {
|
|
24
|
+
if (base.startsWith("//")) return null;
|
|
25
|
+
const root2 = base.replace(/\/+$/, "");
|
|
26
|
+
return { href: `${root2}${suffix}` || "/", external: false };
|
|
27
|
+
}
|
|
28
|
+
let url;
|
|
29
|
+
try {
|
|
30
|
+
url = new URL(base);
|
|
31
|
+
} catch {
|
|
32
|
+
return null;
|
|
33
|
+
}
|
|
34
|
+
if (url.protocol !== "https:" && url.protocol !== "http:") return null;
|
|
35
|
+
if (url.username || url.password) return null;
|
|
36
|
+
const root = `${url.origin}${url.pathname.replace(/\/+$/, "")}`;
|
|
37
|
+
return { href: `${root}${suffix}`, external: true };
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
// src/utils/plain-click.ts
|
|
41
|
+
function isPlainLeftClick(event) {
|
|
42
|
+
return event.button === 0 && !event.defaultPrevented && !event.metaKey && !event.ctrlKey && !event.shiftKey && !event.altKey;
|
|
43
|
+
}
|
|
44
|
+
var KEY = "fluidgrids.nodes.publishCustomNode";
|
|
45
|
+
function RouterLink({
|
|
46
|
+
link,
|
|
47
|
+
className,
|
|
48
|
+
children
|
|
49
|
+
}) {
|
|
50
|
+
const navigate = useNavigate();
|
|
51
|
+
const onClick = (event) => {
|
|
52
|
+
if (!isPlainLeftClick(event)) return;
|
|
53
|
+
event.preventDefault();
|
|
54
|
+
void navigate(link.href);
|
|
55
|
+
};
|
|
56
|
+
return /* @__PURE__ */ jsx(
|
|
57
|
+
"a",
|
|
58
|
+
{
|
|
59
|
+
href: link.href,
|
|
60
|
+
onClick,
|
|
61
|
+
className,
|
|
62
|
+
"data-testid": "publish-custom-node",
|
|
63
|
+
children
|
|
64
|
+
}
|
|
65
|
+
);
|
|
66
|
+
}
|
|
67
|
+
function PublishCustomNodeAction({
|
|
68
|
+
appearance = "button",
|
|
69
|
+
className,
|
|
70
|
+
devportalBasePath
|
|
71
|
+
}) {
|
|
72
|
+
const tr = useTr();
|
|
73
|
+
const inRouter = useInRouterContext();
|
|
74
|
+
const link = resolveDevportalLink(
|
|
75
|
+
devportalBasePath ?? getFluidGridsConfig().devportalBasePath
|
|
76
|
+
);
|
|
77
|
+
if (!link) return null;
|
|
78
|
+
const label = tr(`${KEY}.label`, "Publish a custom node");
|
|
79
|
+
const classes = appearance === "button" ? cn(buttonVariants({ variant: "default" }), className) : cn(
|
|
80
|
+
"flex w-full items-center gap-2 rounded-md px-2 py-2 text-xs font-medium text-primary transition-colors hover:bg-muted/60 hover:text-primary/80",
|
|
81
|
+
className
|
|
82
|
+
);
|
|
83
|
+
const content = /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
84
|
+
/* @__PURE__ */ jsx(
|
|
85
|
+
Icon,
|
|
86
|
+
{
|
|
87
|
+
icon: "mdi:upload",
|
|
88
|
+
width: 16,
|
|
89
|
+
className: appearance === "button" ? "mr-2" : "size-4 shrink-0",
|
|
90
|
+
"aria-hidden": "true"
|
|
91
|
+
}
|
|
92
|
+
),
|
|
93
|
+
/* @__PURE__ */ jsx("span", { className: appearance === "compact" ? "truncate" : void 0, children: label })
|
|
94
|
+
] });
|
|
95
|
+
if (!link.external && inRouter) {
|
|
96
|
+
return /* @__PURE__ */ jsx(RouterLink, { link, className: classes, children: content });
|
|
97
|
+
}
|
|
98
|
+
return /* @__PURE__ */ jsx(
|
|
99
|
+
"a",
|
|
100
|
+
{
|
|
101
|
+
href: link.href,
|
|
102
|
+
className: classes,
|
|
103
|
+
"data-testid": "publish-custom-node",
|
|
104
|
+
...link.external ? { target: "_blank", rel: "noopener noreferrer" } : {},
|
|
105
|
+
children: content
|
|
106
|
+
}
|
|
107
|
+
);
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
export { DEVPORTAL_NODE_APPS_PATH, PublishCustomNodeAction, resolveDevportalLink };
|