@burdenoff/fluidgrids-fe-sdk 2026.1108.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.
Files changed (56) hide show
  1. package/dist/{ExecutionDetailPage-STW6RPK6.js → ExecutionDetailPage-PY5OE2RJ.js} +15 -14
  2. package/dist/{ExecutionsListPage-753XDOTM.js → ExecutionsListPage-LKNYPXNZ.js} +11 -10
  3. package/dist/{TemplateDetailPanel-ZTYXKWRI.js → TemplateDetailPanel-5WY75DVB.js} +1 -1
  4. package/dist/{WorkflowBuilder-HY3PZZVD.js → WorkflowBuilder-YFPBMOWZ.js} +16 -16
  5. package/dist/{WorkflowsList-YFDT7ZPX.js → WorkflowsList-TETNEMYP.js} +10 -10
  6. package/dist/{agentTools-3UQNOO7V.js → agentTools-BW2XMHRV.js} +6 -6
  7. package/dist/{chunk-KE677WYY.js → chunk-2CXUTQUH.js} +1 -1
  8. package/dist/{chunk-H4ERTSMX.js → chunk-2VSYOGNI.js} +1948 -35
  9. package/dist/{chunk-NZMUKAXG.js → chunk-54NXUOHI.js} +1 -1
  10. package/dist/{chunk-YQOXXM5V.js → chunk-62RJORF7.js} +4 -4
  11. package/dist/{chunk-26GYGAC5.js → chunk-66AKFXP7.js} +15 -15
  12. package/dist/{chunk-47OW3OM5.js → chunk-7SSMRID2.js} +5 -5
  13. package/dist/{chunk-I23KAUR6.js → chunk-7XW6BC4B.js} +1 -1
  14. package/dist/{chunk-5375NUIO.js → chunk-AR22A74Y.js} +11 -0
  15. package/dist/{chunk-QHRRYTOL.js → chunk-D5Y3DHGJ.js} +1 -1
  16. package/dist/{chunk-JXJ2DESW.js → chunk-DG4UO5OY.js} +5 -5
  17. package/dist/{chunk-NMYENCP2.js → chunk-E7KIH3CF.js} +1 -1
  18. package/dist/{chunk-5OVWMFPL.js → chunk-GI6BQIQA.js} +124 -42
  19. package/dist/{chunk-Z3ABLERJ.js → chunk-GOZR72NK.js} +64 -1
  20. package/dist/{chunk-KHS2DZHH.js → chunk-HICQ4J4W.js} +1 -1
  21. package/dist/chunk-HPNZ3PYU.js +1448 -0
  22. package/dist/{chunk-F522K3P5.js → chunk-HQSSW7K3.js} +8 -8
  23. package/dist/{chunk-63X5ORDO.js → chunk-HSOSMPRC.js} +1 -1
  24. package/dist/{chunk-JRSCUUBT.js → chunk-IPJV2IOH.js} +1 -1
  25. package/dist/{chunk-HPYXHIRI.js → chunk-IWLNBDR2.js} +5 -5
  26. package/dist/{chunk-3QV3L3YY.js → chunk-IZOPKR64.js} +3 -3
  27. package/dist/{chunk-2CM26W2I.js → chunk-JRR4VKYD.js} +95 -6
  28. package/dist/{chunk-4OZISYDF.js → chunk-JSJSBB76.js} +2 -2
  29. package/dist/{chunk-PF7XQA2S.js → chunk-KJB3WZVD.js} +2 -2
  30. package/dist/{chunk-OHKSDHNC.js → chunk-L7PHZ7RY.js} +2 -2
  31. package/dist/{chunk-HRZMKJEC.js → chunk-LOMLLWHD.js} +705 -12
  32. package/dist/{chunk-XAXZ4T6H.js → chunk-MYPB2KTJ.js} +13 -6
  33. package/dist/{chunk-TKHW2G7O.js → chunk-N2QXEV5Y.js} +7 -7
  34. package/dist/{chunk-EXJW7EKR.js → chunk-OJHBCOBA.js} +164 -1
  35. package/dist/{chunk-ZKRDO4IG.js → chunk-POYMF7L6.js} +1 -1
  36. package/dist/{chunk-WX5BNZVX.js → chunk-RNYFPG7R.js} +4 -4
  37. package/dist/{chunk-PASKZCII.js → chunk-TN3NGTF7.js} +3 -3
  38. package/dist/{chunk-TYE252O5.js → chunk-VH3EET6H.js} +2 -2
  39. package/dist/{chunk-UZJKX5FN.js → chunk-X3F5IQBP.js} +5 -3
  40. package/dist/chunk-YASVILWQ.js +398 -0
  41. package/dist/{chunk-36TEHKVN.js → chunk-ZHXJYOOG.js} +2115 -25
  42. package/dist/executions.js +16 -15
  43. package/dist/history.js +8 -8
  44. package/dist/index.d.ts +15456 -235
  45. package/dist/index.js +1057 -55
  46. package/dist/{node-detail-view-GFC3UDYD.js → node-detail-view-BGWKE6KW.js} +489 -21
  47. package/dist/nodes.js +2 -2
  48. package/dist/observability.js +8 -8
  49. package/dist/{quick-config-panel-6XUUXIHX.js → quick-config-panel-67BU4I23.js} +8 -8
  50. package/dist/settings.js +10 -8
  51. package/dist/templates.js +15 -15
  52. package/dist/workflow-builder.js +17 -17
  53. package/dist/workflow-preview.js +2 -2
  54. package/dist/workflows-list.js +10 -10
  55. package/package.json +2 -2
  56. package/dist/chunk-ODWKSYMZ.js +0 -529
@@ -1,5 +1,5 @@
1
- import { signalPayloadCard, components_default, payloadFromCardValues, parseRawSignalPayload } from './chunk-5OVWMFPL.js';
2
- import { TerminateWorkflowRunDocument, WorkflowRunHistoryDocument, RunEventAppendedDocument, DurableRunFieldsDocument, WorkflowRunDeterminismStatusDocument, WorkflowRunStackTraceDocument, SignalWorkflowRunDocument } from './chunk-Z3ABLERJ.js';
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-I23KAUR6.js';
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-26GYGAC5.js';
4
- import { canvasFromDefinition } from './chunk-KE677WYY.js';
5
- import { useLazyWorkflowDefinition, useCreateWorkflow } from './chunk-PF7XQA2S.js';
6
- import { refetchStoreNodes, BILLING_PLANS_PATH, codeBuildIdOf, rememberRevision, blankWorkflowCreateInput, classifyCreateRefusal, useSaveStatusStore, workflowFingerprint, registerWorkflowNodeTypes } from './chunk-5OVWMFPL.js';
7
- import { useFlowStore, mergeStickyNotes } from './chunk-UZJKX5FN.js';
8
- import { WorkflowDefinitionDocument } from './chunk-Z3ABLERJ.js';
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';
@@ -1198,4 +1198,167 @@ function ActionPoliciesTab() {
1198
1198
  ] });
1199
1199
  }
1200
1200
 
1201
- export { ActionPoliciesTab, RunPolicyDecisions, useRunPolicyDecisions };
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-5OVWMFPL.js';
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';
@@ -1,10 +1,10 @@
1
- import { validateDateRange, statusCountFilter, STATUS_COUNT_GROUP_BY, statusCountsOf } from './chunk-2CM26W2I.js';
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-KHS2DZHH.js';
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-5OVWMFPL.js';
7
- import { SetWorkflowRunVersioningOverrideDocument, WorkflowRunsCountDocument, DurableParityRunFieldsDocument, WorkflowRunPendingDocument, WorkflowRunMetadataDocument } from './chunk-Z3ABLERJ.js';
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';
@@ -1,8 +1,8 @@
1
1
  import { operatorSpec, normaliseAssertRules, describeAssertRuleProblem } from './chunk-JDLQ6QIB.js';
2
- import { useEntityTags, useTagEntity, useUntagEntity } from './chunk-KHS2DZHH.js';
2
+ import { useEntityTags, useTagEntity, useUntagEntity } from './chunk-HICQ4J4W.js';
3
3
  import { notifyFluidGridsAiCreditsUpdated } from './chunk-Y53CVZVV.js';
4
- import { ErrorType } from './chunk-H4ERTSMX.js';
5
- import { WorkflowProposalDocument, ProposeRunFixDocument, ProposeWorkflowChangeDocument, ApplyWorkflowProposalDocument, RejectWorkflowProposalDocument, CancelWorkflowProposalDocument, WorkflowTestCasesDocument, WorkflowTestRunsDocument, WorkflowTestRunDocument, CreateWorkflowTestCaseDocument, UpdateWorkflowTestCaseDocument, DeleteWorkflowTestCaseDocument, RunWorkflowTestsDocument, CreateWorkflowTestCaseFromRunDocument } from './chunk-Z3ABLERJ.js';
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-OHKSDHNC.js';
1
+ import { versionsOfWorkflow, VersionDiffDialog } from './chunk-L7PHZ7RY.js';
2
2
  import { historyControls } from './chunk-FNZZ5JJL.js';
3
- import { useWorkflowDefinitions, useRestoreWorkflowVersion } from './chunk-PF7XQA2S.js';
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) {