@datatechsolutions/ui 2.11.78 → 2.11.80

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.
@@ -3,7 +3,7 @@
3
3
 
4
4
  require('../chunk-55H6WZQP.js');
5
5
  var chunk5UU3RQRB_js = require('../chunk-5UU3RQRB.js');
6
- var chunkBCE3FQVS_js = require('../chunk-BCE3FQVS.js');
6
+ var chunkM7P2TQ6X_js = require('../chunk-M7P2TQ6X.js');
7
7
  var chunkTUEYBNWL_js = require('../chunk-TUEYBNWL.js');
8
8
  var chunkYXN2K77G_js = require('../chunk-YXN2K77G.js');
9
9
  require('../chunk-S7KHTUHA.js');
@@ -83,7 +83,7 @@ function OutputCard({ label, value }) {
83
83
  function AgentProfileHeader({ agent, models, t, selectedModelId, setSelectedModelId, selectedFramework, temperature, setTemperature, elo, setElo, onChanged }) {
84
84
  const modelName = models.find((model) => model.id === selectedModelId)?.name ?? selectedModelId ?? "\u2014";
85
85
  const avatarUrl = agent.avatar;
86
- const frameworkMeta = chunkBCE3FQVS_js.getFrameworkMeta(selectedFramework);
86
+ const frameworkMeta = chunkM7P2TQ6X_js.getFrameworkMeta(selectedFramework);
87
87
  const tierInfo = getEloTier(elo);
88
88
  const difficultyConfig = {
89
89
  beginner: { color: "bg-cyan-100 text-cyan-700 dark:bg-cyan-900/30 dark:text-cyan-400", labelKey: "agentDrawer.tierBeginner" },
@@ -359,13 +359,13 @@ function AgentCapabilityCard({ elo, setElo, models, selectedModelId, setSelected
359
359
  ] });
360
360
  }
361
361
  function ConfigTab({ models, t, selectedModelId, setSelectedModelId, selectedFramework, setSelectedFramework, markDirty, connectedProviderTypes }) {
362
- const frameworkKeys = Object.keys(chunkBCE3FQVS_js.FRAMEWORK_META);
362
+ const frameworkKeys = Object.keys(chunkM7P2TQ6X_js.FRAMEWORK_META);
363
363
  const hasProviderConstraints = connectedProviderTypes.length > 0;
364
- const compatibleModels = chunkBCE3FQVS_js.getCompatibleModels(models, selectedFramework);
364
+ const compatibleModels = chunkM7P2TQ6X_js.getCompatibleModels(models, selectedFramework);
365
365
  const handleFrameworkChange = react.useCallback((newFramework) => {
366
366
  setSelectedFramework(newFramework);
367
- if (!chunkBCE3FQVS_js.isModelCompatibleWithFramework(selectedModelId, newFramework)) {
368
- const compatible = chunkBCE3FQVS_js.getCompatibleModels(models, newFramework);
367
+ if (!chunkM7P2TQ6X_js.isModelCompatibleWithFramework(selectedModelId, newFramework)) {
368
+ const compatible = chunkM7P2TQ6X_js.getCompatibleModels(models, newFramework);
369
369
  if (compatible.length > 0) {
370
370
  setSelectedModelId(compatible[0].id);
371
371
  }
@@ -376,10 +376,10 @@ function ConfigTab({ models, t, selectedModelId, setSelectedModelId, selectedFra
376
376
  /* @__PURE__ */ jsxRuntime.jsxs("div", { children: [
377
377
  /* @__PURE__ */ jsxRuntime.jsx("label", { className: "mb-2 block text-xs font-medium text-gray-500 dark:text-gray-400", children: t("agentDrawer.framework") }),
378
378
  /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex flex-wrap gap-1.5", children: frameworkKeys.map((key) => {
379
- const meta = chunkBCE3FQVS_js.FRAMEWORK_META[key];
379
+ const meta = chunkM7P2TQ6X_js.FRAMEWORK_META[key];
380
380
  const isSelected = key === selectedFramework;
381
- const compatCount = chunkBCE3FQVS_js.getCompatibleModels(models, key).length;
382
- const isCompatibleWithProviders = !hasProviderConstraints || chunkBCE3FQVS_js.isFrameworkCompatibleWithProviders(key, connectedProviderTypes);
381
+ const compatCount = chunkM7P2TQ6X_js.getCompatibleModels(models, key).length;
382
+ const isCompatibleWithProviders = !hasProviderConstraints || chunkM7P2TQ6X_js.isFrameworkCompatibleWithProviders(key, connectedProviderTypes);
383
383
  return /* @__PURE__ */ jsxRuntime.jsxs(
384
384
  "button",
385
385
  {
@@ -411,7 +411,7 @@ function ConfigTab({ models, t, selectedModelId, setSelectedModelId, selectedFra
411
411
  ] }),
412
412
  /* @__PURE__ */ jsxRuntime.jsx("div", { className: "grid grid-cols-2 gap-2", children: models.map((model) => {
413
413
  const isSelected = model.id === selectedModelId;
414
- const isCompatible = chunkBCE3FQVS_js.isModelCompatibleWithFramework(model.id, selectedFramework);
414
+ const isCompatible = chunkM7P2TQ6X_js.isModelCompatibleWithFramework(model.id, selectedFramework);
415
415
  const { IconComponent, color, providerLabel } = getModelIcon(model.id);
416
416
  return /* @__PURE__ */ jsxRuntime.jsxs(
417
417
  "button",
@@ -509,7 +509,7 @@ function PromptTab({ agent, temperature, setTemperature, markDirty, t, promptTex
509
509
  ] });
510
510
  }
511
511
  function ResultsTab({ agentId, t }) {
512
- const nodeResults = chunkBCE3FQVS_js.useWorkflowStore((state) => state.nodeResults);
512
+ const nodeResults = chunkM7P2TQ6X_js.useWorkflowStore((state) => state.nodeResults);
513
513
  const agentResult = react.useMemo(() => {
514
514
  return nodeResults[agentId] ?? null;
515
515
  }, [nodeResults, agentId]);
@@ -599,10 +599,10 @@ function ModelsTab({ modelProviders, selectedProviderId, onSelectProvider, model
599
599
  const providerModels = modelsByProvider.find((p) => p.provider.id === selectedProviderId);
600
600
  if (!providerModels || providerModels.models.length === 0) return /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-xs text-gray-400 dark:text-gray-500", children: t("agentDrawer.noModelsForProvider") });
601
601
  const compatibleModels = providerModels.models.filter(
602
- (m) => chunkBCE3FQVS_js.isModelCompatibleWithFramework(m.id, agentFramework)
602
+ (m) => chunkM7P2TQ6X_js.isModelCompatibleWithFramework(m.id, agentFramework)
603
603
  );
604
604
  const incompatibleModels = providerModels.models.filter(
605
- (m) => !chunkBCE3FQVS_js.isModelCompatibleWithFramework(m.id, agentFramework)
605
+ (m) => !chunkM7P2TQ6X_js.isModelCompatibleWithFramework(m.id, agentFramework)
606
606
  );
607
607
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { children: [
608
608
  /* @__PURE__ */ jsxRuntime.jsx("label", { className: "mb-2 block text-xs font-medium text-gray-500 dark:text-gray-400", children: t("agentDrawer.selectModel") }),
@@ -675,7 +675,7 @@ function ToolsTab({ agentTools, enabledToolIds, onToggle, agentFramework, t }) {
675
675
  ] }),
676
676
  tool.description && /* @__PURE__ */ jsxRuntime.jsx("p", { className: "truncate text-[10px] text-gray-400 dark:text-gray-500", children: tool.description }),
677
677
  tool.compatibleFrameworks && tool.compatibleFrameworks.length > 0 && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "mt-1 flex flex-wrap gap-0.5", children: tool.compatibleFrameworks.map((framework) => {
678
- const meta = chunkBCE3FQVS_js.getFrameworkMeta(framework);
678
+ const meta = chunkM7P2TQ6X_js.getFrameworkMeta(framework);
679
679
  const isCurrentFw = framework === agentFramework;
680
680
  return /* @__PURE__ */ jsxRuntime.jsxs("span", { className: `inline-flex items-center gap-0.5 rounded px-1.5 py-0.5 text-[8px] font-medium ${isCurrentFw ? meta.badgeColor : "bg-gray-100 text-gray-500 dark:bg-white/5 dark:text-gray-400"}`, children: [
681
681
  /* @__PURE__ */ jsxRuntime.jsx(meta.IconComponent, { className: "h-2.5 w-2.5" }),
@@ -851,9 +851,9 @@ function AdvancedTab({
851
851
  }
852
852
  function AgentModal({ onSaved, onPersist }) {
853
853
  const t = chunkYXN2K77G_js.useTranslations("agents.workflow");
854
- const activeModal = chunkBCE3FQVS_js.useModalStore((s) => s.activeModal);
855
- const agentData = chunkBCE3FQVS_js.useModalStore((s) => s.agentData);
856
- const closeModal = chunkBCE3FQVS_js.useModalStore((s) => s.closeModal);
854
+ const activeModal = chunkM7P2TQ6X_js.useModalStore((s) => s.activeModal);
855
+ const agentData = chunkM7P2TQ6X_js.useModalStore((s) => s.agentData);
856
+ const closeModal = chunkM7P2TQ6X_js.useModalStore((s) => s.closeModal);
857
857
  const open = activeModal === "agent";
858
858
  const agent = agentData?.agent ?? null;
859
859
  const models = agentData?.models ?? [];
@@ -1191,7 +1191,7 @@ function SubworkflowModal({ onSaved, onMaximize }) {
1191
1191
  const markDirty = useSubworkflowStore((s) => s.markDirty);
1192
1192
  const markSaved = useSubworkflowStore((s) => s.markSaved);
1193
1193
  const closeModal = useSubworkflowStore((s) => s.closeModal);
1194
- const agentBehind = chunkBCE3FQVS_js.useModalStore((s) => s.activeModal === "agent" ? s.agentData?.agent?.name : null);
1194
+ const agentBehind = chunkM7P2TQ6X_js.useModalStore((s) => s.activeModal === "agent" ? s.agentData?.agent?.name : null);
1195
1195
  const isCreateMode = !tool?.toolId;
1196
1196
  const initialGraph = react.useMemo(() => {
1197
1197
  const config = tool?.config;
@@ -1220,9 +1220,9 @@ function SubworkflowModal({ onSaved, onMaximize }) {
1220
1220
  }, [tool, onSaved, name, category, description, timeoutMs, latestGraphRef, markSaved]);
1221
1221
  if (!tool) return null;
1222
1222
  const categoryKey = category ?? "external";
1223
- const gradient = tool.color ?? chunkBCE3FQVS_js.CATEGORY_COLORS[categoryKey] ?? chunkBCE3FQVS_js.CATEGORY_COLORS.external;
1224
- const categoryPill = chunkBCE3FQVS_js.CATEGORY_PILL_COLORS[categoryKey] ?? chunkBCE3FQVS_js.CATEGORY_PILL_COLORS.external;
1225
- const IconComponent = chunkBCE3FQVS_js.ICON_MAP[tool.icon ?? ""] ?? outline.ArrowPathRoundedSquareIcon;
1223
+ const gradient = tool.color ?? chunkM7P2TQ6X_js.CATEGORY_COLORS[categoryKey] ?? chunkM7P2TQ6X_js.CATEGORY_COLORS.external;
1224
+ const categoryPill = chunkM7P2TQ6X_js.CATEGORY_PILL_COLORS[categoryKey] ?? chunkM7P2TQ6X_js.CATEGORY_PILL_COLORS.external;
1225
+ const IconComponent = chunkM7P2TQ6X_js.ICON_MAP[tool.icon ?? ""] ?? outline.ArrowPathRoundedSquareIcon;
1226
1226
  const graph = latestGraphRef.current;
1227
1227
  const startNode = graph.nodes.find((n) => n.type === "start");
1228
1228
  const endNode = graph.nodes.find((n) => n.type === "end");
@@ -1287,7 +1287,7 @@ function SubworkflowModal({ onSaved, onMaximize }) {
1287
1287
  {
1288
1288
  type: "button",
1289
1289
  onClick: () => setCategory(cat),
1290
- className: `rounded-full px-2 py-1 text-[9px] font-semibold transition-all ${cat === category ? `${chunkBCE3FQVS_js.CATEGORY_PILL_COLORS[cat] ?? chunkBCE3FQVS_js.CATEGORY_PILL_COLORS.external} ring-1 ring-current/20` : "bg-white/30 text-gray-500 hover:bg-white/50 dark:bg-white/5 dark:text-gray-400"}`,
1290
+ className: `rounded-full px-2 py-1 text-[9px] font-semibold transition-all ${cat === category ? `${chunkM7P2TQ6X_js.CATEGORY_PILL_COLORS[cat] ?? chunkM7P2TQ6X_js.CATEGORY_PILL_COLORS.external} ring-1 ring-current/20` : "bg-white/30 text-gray-500 hover:bg-white/50 dark:bg-white/5 dark:text-gray-400"}`,
1291
1291
  children: cat
1292
1292
  },
1293
1293
  cat
@@ -1374,7 +1374,7 @@ function SubworkflowModal({ onSaved, onMaximize }) {
1374
1374
  /* @__PURE__ */ jsxRuntime.jsx("div", { className: "mt-auto" })
1375
1375
  ] }),
1376
1376
  /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex-1", children: /* @__PURE__ */ jsxRuntime.jsx(
1377
- chunkBCE3FQVS_js.WorkflowCanvas,
1377
+ chunkM7P2TQ6X_js.WorkflowCanvas,
1378
1378
  {
1379
1379
  initialGraph,
1380
1380
  agents: [],
@@ -1390,26 +1390,53 @@ function SubworkflowModal({ onSaved, onMaximize }) {
1390
1390
  }
1391
1391
  function PipelineSettingsModal({ onSave }) {
1392
1392
  const t = chunkYXN2K77G_js.useTranslations("agents.workflow");
1393
- const activeModal = chunkBCE3FQVS_js.useModalStore((s) => s.activeModal);
1394
- const data = chunkBCE3FQVS_js.useModalStore((s) => s.pipelineSettingsData);
1395
- const closeModal = chunkBCE3FQVS_js.useModalStore((s) => s.closeModal);
1393
+ const activeModal = chunkM7P2TQ6X_js.useModalStore((s) => s.activeModal);
1394
+ const data = chunkM7P2TQ6X_js.useModalStore((s) => s.pipelineSettingsData);
1395
+ const closeModal = chunkM7P2TQ6X_js.useModalStore((s) => s.closeModal);
1396
1396
  const open = activeModal === "pipeline-settings";
1397
1397
  const [nameValue, setNameValue] = react.useState("");
1398
1398
  const [descriptionValue, setDescriptionValue] = react.useState("");
1399
+ const [slugValue, setSlugValue] = react.useState("");
1400
+ const [isDraft, setIsDraft] = react.useState(true);
1401
+ const [isActive, setIsActive] = react.useState(true);
1399
1402
  const [isSaving, setIsSaving] = react.useState(false);
1403
+ const lifecycleAvailable = react.useMemo(() => {
1404
+ if (!data) return false;
1405
+ return data.isDraft !== void 0 || data.isActive !== void 0 || data.slug !== void 0;
1406
+ }, [data]);
1400
1407
  react.useEffect(() => {
1401
1408
  if (data) {
1402
1409
  setNameValue(data.name);
1403
1410
  setDescriptionValue(data.description);
1411
+ setSlugValue(data.slug ?? "");
1412
+ setIsDraft(data.isDraft ?? true);
1413
+ setIsActive(data.isActive ?? true);
1404
1414
  }
1405
1415
  }, [data]);
1406
1416
  const handleSubmit = async (event) => {
1407
1417
  event.preventDefault();
1408
1418
  const trimmedName = nameValue.trim();
1409
1419
  if (!trimmedName) return;
1420
+ const trimmedDescription = descriptionValue.trim();
1421
+ const trimmedSlug = slugValue.trim();
1422
+ const changes = {
1423
+ name: trimmedName,
1424
+ description: trimmedDescription
1425
+ };
1426
+ if (data) {
1427
+ if (trimmedSlug !== (data.slug ?? "")) {
1428
+ changes.slug = trimmedSlug.length > 0 ? trimmedSlug : null;
1429
+ }
1430
+ if (data.isDraft !== void 0 && isDraft !== data.isDraft) {
1431
+ changes.isDraft = isDraft;
1432
+ }
1433
+ if (data.isActive !== void 0 && isActive !== data.isActive) {
1434
+ changes.isActive = isActive;
1435
+ }
1436
+ }
1410
1437
  setIsSaving(true);
1411
1438
  try {
1412
- await onSave(trimmedName, descriptionValue.trim());
1439
+ await onSave(changes);
1413
1440
  closeModal();
1414
1441
  } catch {
1415
1442
  } finally {
@@ -1454,7 +1481,7 @@ function PipelineSettingsModal({ onSave }) {
1454
1481
  maxWidth: "md",
1455
1482
  footer,
1456
1483
  onSubmit: handleSubmit,
1457
- children: /* @__PURE__ */ jsxRuntime.jsxs("form", { id: "pipeline-settings-form", onSubmit: handleSubmit, className: "space-y-6", children: [
1484
+ children: /* @__PURE__ */ jsxRuntime.jsxs("form", { id: "pipeline-settings-form", onSubmit: handleSubmit, className: "space-y-5", children: [
1458
1485
  /* @__PURE__ */ jsxRuntime.jsx(
1459
1486
  chunkTUEYBNWL_js.FormInput,
1460
1487
  {
@@ -1474,11 +1501,286 @@ function PipelineSettingsModal({ onSave }) {
1474
1501
  placeholder: t("pipelineDescriptionPlaceholder"),
1475
1502
  rows: 4
1476
1503
  }
1477
- )
1504
+ ),
1505
+ lifecycleAvailable && /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
1506
+ /* @__PURE__ */ jsxRuntime.jsx(
1507
+ chunkTUEYBNWL_js.FormInput,
1508
+ {
1509
+ label: t("pipelineSlug", { _: "Slug" }),
1510
+ value: slugValue,
1511
+ onValueChange: setSlugValue,
1512
+ placeholder: "fuel-pricing",
1513
+ hint: t("pipelineSlugHint", {
1514
+ _: "URL-friendly identifier. Leave blank to use the auto-generated one."
1515
+ })
1516
+ }
1517
+ ),
1518
+ /* @__PURE__ */ jsxRuntime.jsxs("fieldset", { className: "space-y-2 rounded-xl border border-gray-200/60 bg-gray-50/60 p-3 dark:border-white/10 dark:bg-white/5", children: [
1519
+ /* @__PURE__ */ jsxRuntime.jsx("legend", { className: "px-1 text-xs font-medium text-gray-600 dark:text-gray-300", children: t("pipelineLifecycle", { _: "Lifecycle" }) }),
1520
+ /* @__PURE__ */ jsxRuntime.jsxs("label", { className: "flex items-center justify-between gap-3 text-sm text-gray-700 dark:text-gray-200", children: [
1521
+ /* @__PURE__ */ jsxRuntime.jsxs("span", { children: [
1522
+ t("pipelineIsDraft", { _: "Draft mode" }),
1523
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: "ml-2 text-[11px] text-gray-400", children: isDraft ? t("pipelineIsDraftOn", { _: "Editable \u2014 changes do not affect runs." }) : t("pipelineIsDraftOff", { _: "Published \u2014 edits require a new version." }) })
1524
+ ] }),
1525
+ /* @__PURE__ */ jsxRuntime.jsx(
1526
+ "input",
1527
+ {
1528
+ type: "checkbox",
1529
+ checked: isDraft,
1530
+ onChange: (event) => setIsDraft(event.target.checked),
1531
+ className: "h-4 w-4 rounded border-gray-300 text-indigo-600 focus:ring-indigo-500"
1532
+ }
1533
+ )
1534
+ ] }),
1535
+ /* @__PURE__ */ jsxRuntime.jsxs("label", { className: "flex items-center justify-between gap-3 text-sm text-gray-700 dark:text-gray-200", children: [
1536
+ /* @__PURE__ */ jsxRuntime.jsxs("span", { children: [
1537
+ t("pipelineIsActive", { _: "Active" }),
1538
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: "ml-2 text-[11px] text-gray-400", children: isActive ? t("pipelineIsActiveOn", { _: "Visible in listings and runnable." }) : t("pipelineIsActiveOff", { _: "Archived \u2014 hidden from the default listing." }) })
1539
+ ] }),
1540
+ /* @__PURE__ */ jsxRuntime.jsx(
1541
+ "input",
1542
+ {
1543
+ type: "checkbox",
1544
+ checked: isActive,
1545
+ onChange: (event) => setIsActive(event.target.checked),
1546
+ className: "h-4 w-4 rounded border-gray-300 text-indigo-600 focus:ring-indigo-500"
1547
+ }
1548
+ )
1549
+ ] })
1550
+ ] })
1551
+ ] })
1478
1552
  ] })
1479
1553
  }
1480
1554
  );
1481
1555
  }
1556
+ function RunReplayModal({
1557
+ open,
1558
+ onClose,
1559
+ runId,
1560
+ workflowId,
1561
+ originalInputs,
1562
+ onReplay
1563
+ }) {
1564
+ const t = chunkYXN2K77G_js.useTranslations("agents.workflow");
1565
+ const [rows, setRows] = react.useState([]);
1566
+ const [submitting, setSubmitting] = react.useState(false);
1567
+ const [error, setError] = react.useState(null);
1568
+ react.useEffect(() => {
1569
+ if (!open) return;
1570
+ setRows(Object.entries(originalInputs).map(([key, value]) => toRow(key, value)));
1571
+ setError(null);
1572
+ }, [open, originalInputs]);
1573
+ const overrides = react.useMemo(() => {
1574
+ const out = {};
1575
+ for (const row of rows) {
1576
+ if (!row.touched) continue;
1577
+ try {
1578
+ out[row.key] = parseRow(row);
1579
+ } catch (e) {
1580
+ out[`__error__${row.key}`] = e.message;
1581
+ }
1582
+ }
1583
+ return out;
1584
+ }, [rows]);
1585
+ const hasParseError = Object.keys(overrides).some((k) => k.startsWith("__error__"));
1586
+ const updateRow = (index, patch) => {
1587
+ setRows((current) => current.map((r, i) => i === index ? { ...r, ...patch, touched: true } : r));
1588
+ };
1589
+ const resetRow = (index) => {
1590
+ setRows((current) => current.map((r, i) => {
1591
+ if (i !== index) return r;
1592
+ return toRow(r.key, r.original);
1593
+ }));
1594
+ };
1595
+ const handleSubmit = async () => {
1596
+ setError(null);
1597
+ if (hasParseError) {
1598
+ setError(t("replayParseError", { _: "One or more values do not match their declared type." }));
1599
+ return;
1600
+ }
1601
+ setSubmitting(true);
1602
+ try {
1603
+ const cleaned = {};
1604
+ for (const row of rows) {
1605
+ if (!row.touched) continue;
1606
+ cleaned[row.key] = parseRow(row);
1607
+ }
1608
+ await onReplay(cleaned);
1609
+ onClose();
1610
+ } catch (e) {
1611
+ setError(e.message);
1612
+ } finally {
1613
+ setSubmitting(false);
1614
+ }
1615
+ };
1616
+ const footer = /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center justify-between gap-2", children: [
1617
+ /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "text-[11px] text-gray-400", children: [
1618
+ "run ",
1619
+ /* @__PURE__ */ jsxRuntime.jsx("code", { children: runId.slice(0, 8) }),
1620
+ " \xB7 wf ",
1621
+ /* @__PURE__ */ jsxRuntime.jsx("code", { children: workflowId.slice(0, 8) })
1622
+ ] }),
1623
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-2", children: [
1624
+ /* @__PURE__ */ jsxRuntime.jsx(
1625
+ "button",
1626
+ {
1627
+ type: "button",
1628
+ onClick: onClose,
1629
+ className: "rounded-lg border border-gray-200/50 px-4 py-2 text-xs font-medium text-gray-600 transition-colors hover:bg-gray-100/50 dark:border-white/10 dark:text-gray-300 dark:hover:bg-white/5",
1630
+ children: t("cancel")
1631
+ }
1632
+ ),
1633
+ /* @__PURE__ */ jsxRuntime.jsxs(
1634
+ chunkTUEYBNWL_js.Button,
1635
+ {
1636
+ type: "submit",
1637
+ form: "run-replay-form",
1638
+ color: "ios-glass-blue",
1639
+ loading: submitting,
1640
+ children: [
1641
+ /* @__PURE__ */ jsxRuntime.jsx(outline.ArrowPathIcon, { className: "h-4 w-4" }),
1642
+ t("replay", { _: "Replay" })
1643
+ ]
1644
+ }
1645
+ )
1646
+ ] })
1647
+ ] });
1648
+ return /* @__PURE__ */ jsxRuntime.jsx(
1649
+ chunkTUEYBNWL_js.GlassModal,
1650
+ {
1651
+ open,
1652
+ onClose,
1653
+ title: t("replayTitle", { _: "Replay run" }),
1654
+ subtitle: t("replaySubtitle", { _: "Tweak any input below and re-execute. Untouched keys keep their original value." }),
1655
+ icon: /* @__PURE__ */ jsxRuntime.jsx(outline.ArrowPathIcon, { className: "h-5 w-5 text-white" }),
1656
+ gradient: "from-sky-500 to-indigo-600",
1657
+ maxWidth: "lg",
1658
+ footer,
1659
+ onSubmit: (event) => {
1660
+ event.preventDefault();
1661
+ void handleSubmit();
1662
+ },
1663
+ children: /* @__PURE__ */ jsxRuntime.jsxs(
1664
+ "form",
1665
+ {
1666
+ id: "run-replay-form",
1667
+ onSubmit: (event) => {
1668
+ event.preventDefault();
1669
+ void handleSubmit();
1670
+ },
1671
+ className: "space-y-3",
1672
+ children: [
1673
+ rows.length === 0 ? /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-xs text-gray-500 dark:text-gray-400", children: t("replayNoInputs", { _: "This run had no input variables \u2014 replaying will execute the workflow as-is." }) }) : rows.map((row, index) => /* @__PURE__ */ jsxRuntime.jsx(
1674
+ RowEditor,
1675
+ {
1676
+ row,
1677
+ onChange: (patch) => updateRow(index, patch),
1678
+ onReset: () => resetRow(index)
1679
+ },
1680
+ row.key
1681
+ )),
1682
+ error && /* @__PURE__ */ jsxRuntime.jsx("p", { className: "rounded-lg border border-red-400/40 bg-red-500/10 p-2 text-xs text-red-600 dark:text-red-300", children: error })
1683
+ ]
1684
+ }
1685
+ )
1686
+ }
1687
+ );
1688
+ }
1689
+ function RowEditor({
1690
+ row,
1691
+ onChange,
1692
+ onReset
1693
+ }) {
1694
+ const isJson = row.kind === "json";
1695
+ return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "rounded-xl border border-gray-200/60 bg-gray-50/60 p-3 dark:border-white/10 dark:bg-white/5", children: [
1696
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "mb-2 flex items-center justify-between gap-2", children: [
1697
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: "font-mono text-xs text-gray-700 dark:text-gray-200", children: row.key }),
1698
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-2", children: [
1699
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: "rounded-full bg-gray-200/60 px-2 py-0.5 text-[10px] uppercase tracking-wider text-gray-600 dark:bg-white/10 dark:text-gray-300", children: row.kind }),
1700
+ row.touched && /* @__PURE__ */ jsxRuntime.jsx(
1701
+ "button",
1702
+ {
1703
+ type: "button",
1704
+ onClick: onReset,
1705
+ className: "text-[11px] text-indigo-600 hover:text-indigo-500 dark:text-indigo-400",
1706
+ children: "reset"
1707
+ }
1708
+ )
1709
+ ] })
1710
+ ] }),
1711
+ row.kind === "boolean" ? /* @__PURE__ */ jsxRuntime.jsxs(
1712
+ "select",
1713
+ {
1714
+ value: row.value,
1715
+ onChange: (event) => onChange({ value: event.target.value }),
1716
+ className: "w-full rounded-lg border border-gray-200/50 bg-white/70 px-3 py-2 text-sm text-gray-900 dark:border-white/10 dark:bg-gray-800/70 dark:text-gray-100",
1717
+ children: [
1718
+ /* @__PURE__ */ jsxRuntime.jsx("option", { value: "true", children: "true" }),
1719
+ /* @__PURE__ */ jsxRuntime.jsx("option", { value: "false", children: "false" })
1720
+ ]
1721
+ }
1722
+ ) : isJson ? /* @__PURE__ */ jsxRuntime.jsx(
1723
+ chunkTUEYBNWL_js.FormTextarea,
1724
+ {
1725
+ value: row.value,
1726
+ onValueChange: (v) => onChange({ value: v }),
1727
+ rows: 4,
1728
+ className: "font-mono"
1729
+ }
1730
+ ) : /* @__PURE__ */ jsxRuntime.jsx(
1731
+ chunkTUEYBNWL_js.FormInput,
1732
+ {
1733
+ type: row.kind === "number" ? "number" : "text",
1734
+ value: row.value,
1735
+ onValueChange: (v) => onChange({ value: v })
1736
+ }
1737
+ )
1738
+ ] });
1739
+ }
1740
+ function toRow(key, value) {
1741
+ if (value === null || value === void 0) {
1742
+ return { key, value: "", kind: "string", touched: false, original: value };
1743
+ }
1744
+ if (typeof value === "boolean") {
1745
+ return { key, value: value ? "true" : "false", kind: "boolean", touched: false, original: value };
1746
+ }
1747
+ if (typeof value === "number") {
1748
+ return { key, value: String(value), kind: "number", touched: false, original: value };
1749
+ }
1750
+ if (typeof value === "string") {
1751
+ return { key, value, kind: "string", touched: false, original: value };
1752
+ }
1753
+ return {
1754
+ key,
1755
+ value: JSON.stringify(value, null, 2),
1756
+ kind: "json",
1757
+ touched: false,
1758
+ original: value
1759
+ };
1760
+ }
1761
+ function parseRow(row) {
1762
+ switch (row.kind) {
1763
+ case "string":
1764
+ return row.value;
1765
+ case "number": {
1766
+ const n = Number(row.value);
1767
+ if (!Number.isFinite(n)) {
1768
+ throw new Error(`'${row.key}' must be a number, got '${row.value}'`);
1769
+ }
1770
+ return n;
1771
+ }
1772
+ case "boolean":
1773
+ return row.value === "true";
1774
+ case "json": {
1775
+ if (row.value.trim().length === 0) return null;
1776
+ try {
1777
+ return JSON.parse(row.value);
1778
+ } catch (e) {
1779
+ throw new Error(`'${row.key}' is not valid JSON: ${e.message}`);
1780
+ }
1781
+ }
1782
+ }
1783
+ }
1482
1784
 
1483
1785
  // src/astrlabe/components/rules/types.ts
1484
1786
  var RULE_STATUS_OPTIONS = ["draft", "active", "archived"];
@@ -2266,8 +2568,8 @@ function CollapsibleSection({ title, icon, colorClass, defaultOpen = true, count
2266
2568
  ] });
2267
2569
  }
2268
2570
  function LogicNodeItemCard({ item, translationFunction }) {
2269
- const IconComponent = chunkBCE3FQVS_js.LOGIC_ICON_MAP[item.nodeType];
2270
- const gradient = chunkBCE3FQVS_js.LOGIC_NODE_GRADIENTS[item.nodeType] ?? "from-gray-400 to-gray-500";
2571
+ const IconComponent = chunkM7P2TQ6X_js.LOGIC_ICON_MAP[item.nodeType];
2572
+ const gradient = chunkM7P2TQ6X_js.LOGIC_NODE_GRADIENTS[item.nodeType] ?? "from-gray-400 to-gray-500";
2271
2573
  const defaultConfig = chunkC7BI5LQ6_js.createDefaultLogicNodeConfig(item.nodeType);
2272
2574
  const configJson = defaultConfig ? JSON.stringify(defaultConfig) : void 0;
2273
2575
  return /* @__PURE__ */ jsxRuntime.jsxs(
@@ -2525,8 +2827,8 @@ function NodePalette({ agents, tools, agentTools = [], rules, entities = [], mod
2525
2827
  limit: entity.defaultLimit
2526
2828
  });
2527
2829
  const dsLogo = getDatasourceLogo(entity.id);
2528
- const EntityIcon = chunkBCE3FQVS_js.getEntityIcon(entity.id);
2529
- const entityGradient = chunkBCE3FQVS_js.getEntityGradient(entity.id);
2830
+ const EntityIcon = chunkM7P2TQ6X_js.getEntityIcon(entity.id);
2831
+ const entityGradient = chunkM7P2TQ6X_js.getEntityGradient(entity.id);
2530
2832
  return /* @__PURE__ */ jsxRuntime.jsxs(
2531
2833
  "div",
2532
2834
  {
@@ -2924,9 +3226,9 @@ function formatDuration2(durationMs) {
2924
3226
  }
2925
3227
  function RunPanel({ open, onClose, onRun, onStop }) {
2926
3228
  const translations = chunkYXN2K77G_js.useTranslations("agents.workflow.runPanel");
2927
- const nodes = chunkBCE3FQVS_js.useWorkflowStore((state) => state.nodes);
2928
- const isRunning = chunkBCE3FQVS_js.useWorkflowStore((state) => state.isRunning);
2929
- const nodeResults = chunkBCE3FQVS_js.useWorkflowStore((state) => state.nodeResults);
3229
+ const nodes = chunkM7P2TQ6X_js.useWorkflowStore((state) => state.nodes);
3230
+ const isRunning = chunkM7P2TQ6X_js.useWorkflowStore((state) => state.isRunning);
3231
+ const nodeResults = chunkM7P2TQ6X_js.useWorkflowStore((state) => state.nodeResults);
2930
3232
  const startNode = nodes.find((node) => node.type === "start");
2931
3233
  const hasEndNode = nodes.some((node) => node.type === "end");
2932
3234
  const hasValidStartConfig = Boolean(
@@ -3214,8 +3516,8 @@ function inferVariables(config, nodeType) {
3214
3516
  }
3215
3517
  function VariableInspector({ open, onClose }) {
3216
3518
  const translations = chunkYXN2K77G_js.useTranslations("agents.workflow.variableInspector");
3217
- const nodes = chunkBCE3FQVS_js.useWorkflowStore((state) => state.nodes);
3218
- const edges = chunkBCE3FQVS_js.useWorkflowStore((state) => state.edges);
3519
+ const nodes = chunkM7P2TQ6X_js.useWorkflowStore((state) => state.nodes);
3520
+ const edges = chunkM7P2TQ6X_js.useWorkflowStore((state) => state.edges);
3219
3521
  const [expandedNodes, setExpandedNodes] = react.useState(/* @__PURE__ */ new Set());
3220
3522
  const toggleNodeExpansion = react.useCallback((nodeId) => {
3221
3523
  setExpandedNodes((current) => {
@@ -3277,8 +3579,8 @@ function VariableInspector({ open, onClose }) {
3277
3579
  /* @__PURE__ */ jsxRuntime.jsx("p", { className: "mt-2 text-sm text-gray-500 dark:text-gray-400", children: translations("noNodes") })
3278
3580
  ] }) : /* @__PURE__ */ jsxRuntime.jsx("div", { className: "divide-y divide-gray-100 dark:divide-gray-800", children: nodeVariableEntries.map((entry) => {
3279
3581
  const isExpanded = expandedNodes.has(entry.nodeId);
3280
- const IconComponent = chunkBCE3FQVS_js.LOGIC_ICON_MAP[entry.nodeType];
3281
- const gradient = chunkBCE3FQVS_js.LOGIC_NODE_GRADIENTS[entry.nodeType] ?? "from-gray-400 to-gray-500";
3582
+ const IconComponent = chunkM7P2TQ6X_js.LOGIC_ICON_MAP[entry.nodeType];
3583
+ const gradient = chunkM7P2TQ6X_js.LOGIC_NODE_GRADIENTS[entry.nodeType] ?? "from-gray-400 to-gray-500";
3282
3584
  const inputVariables = entry.variables.filter((variable) => variable.direction === "input");
3283
3585
  const outputVariables = entry.variables.filter((variable) => variable.direction === "output");
3284
3586
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { "data-testid": `variable-node-${entry.nodeId}`, children: [
@@ -3344,7 +3646,7 @@ function RunInputDialog({
3344
3646
  onRun
3345
3647
  }) {
3346
3648
  const t = chunkYXN2K77G_js.useTranslations("agents.workflow.runInputDialog");
3347
- const nodes = chunkBCE3FQVS_js.useWorkflowStore((state) => state.nodes);
3649
+ const nodes = chunkM7P2TQ6X_js.useWorkflowStore((state) => state.nodes);
3348
3650
  const [values, setValues] = react.useState({});
3349
3651
  const inputVariableNames = react.useMemo(() => {
3350
3652
  const storeStartNode = nodes.find((node) => node.type === "start");
@@ -3425,8 +3727,8 @@ function PreviewPanel({ open, onClose, workflowId, loadRuns }) {
3425
3727
  const [isLoadingRuns, setIsLoadingRuns] = react.useState(false);
3426
3728
  const [selectedRun, setSelectedRun] = react.useState(null);
3427
3729
  const [selectedNode, setSelectedNode] = react.useState(null);
3428
- const isRunning = chunkBCE3FQVS_js.useWorkflowStore((state) => state.isRunning);
3429
- const nodeResults = chunkBCE3FQVS_js.useWorkflowStore((state) => state.nodeResults);
3730
+ const isRunning = chunkM7P2TQ6X_js.useWorkflowStore((state) => state.isRunning);
3731
+ const nodeResults = chunkM7P2TQ6X_js.useWorkflowStore((state) => state.nodeResults);
3430
3732
  const refreshRuns = react.useCallback(async () => {
3431
3733
  setIsLoadingRuns(true);
3432
3734
  try {
@@ -3582,7 +3884,7 @@ var AutoSaveWorkspace = react.memo(function AutoSaveWorkspace2({
3582
3884
  onAutoSaveGraph(graph);
3583
3885
  }, [onAutoSaveGraph, onGraphSnapshot]);
3584
3886
  return /* @__PURE__ */ jsxRuntime.jsx(
3585
- chunkBCE3FQVS_js.Workspace,
3887
+ chunkM7P2TQ6X_js.Workspace,
3586
3888
  {
3587
3889
  ...workspaceProps,
3588
3890
  onGraphChange: handleGraphChange
@@ -3953,14 +4255,14 @@ function DslImportModal({ open, onClose, onImport }) {
3953
4255
  }
3954
4256
 
3955
4257
  // src/astrlabe/store/selectors.ts
3956
- var useCanUndo = () => chunkBCE3FQVS_js.useWorkflowStore((state) => state.past.length > 0);
3957
- var useCanRedo = () => chunkBCE3FQVS_js.useWorkflowStore((state) => state.future.length > 0);
3958
- var useHasCopied = () => chunkBCE3FQVS_js.useWorkflowStore((state) => state.clipboard !== null);
3959
- var useContextMenu = () => chunkBCE3FQVS_js.useWorkflowStore((state) => state.contextMenu);
3960
- var useEditingNodeId = () => chunkBCE3FQVS_js.useWorkflowStore((state) => state.editingNodeId);
3961
- var useSelectedNodeCount = () => chunkBCE3FQVS_js.useWorkflowStore((state) => state.nodes.filter((node) => node.selected).length);
3962
- var useIsRunning = () => chunkBCE3FQVS_js.useWorkflowStore((state) => state.isRunning);
3963
- var useNodeResults = () => chunkBCE3FQVS_js.useWorkflowStore((state) => state.nodeResults);
4258
+ var useCanUndo = () => chunkM7P2TQ6X_js.useWorkflowStore((state) => state.past.length > 0);
4259
+ var useCanRedo = () => chunkM7P2TQ6X_js.useWorkflowStore((state) => state.future.length > 0);
4260
+ var useHasCopied = () => chunkM7P2TQ6X_js.useWorkflowStore((state) => state.clipboard !== null);
4261
+ var useContextMenu = () => chunkM7P2TQ6X_js.useWorkflowStore((state) => state.contextMenu);
4262
+ var useEditingNodeId = () => chunkM7P2TQ6X_js.useWorkflowStore((state) => state.editingNodeId);
4263
+ var useSelectedNodeCount = () => chunkM7P2TQ6X_js.useWorkflowStore((state) => state.nodes.filter((node) => node.selected).length);
4264
+ var useIsRunning = () => chunkM7P2TQ6X_js.useWorkflowStore((state) => state.isRunning);
4265
+ var useNodeResults = () => chunkM7P2TQ6X_js.useWorkflowStore((state) => state.nodeResults);
3964
4266
  var DEFAULT_MAX_HISTORY = 50;
3965
4267
  function useUndoRedo(nodes, edges, setNodes, setEdges, maxHistory = DEFAULT_MAX_HISTORY) {
3966
4268
  const pastRef = react.useRef([]);
@@ -4256,239 +4558,239 @@ Object.defineProperty(exports, "validateWorkflowGraph", {
4256
4558
  });
4257
4559
  Object.defineProperty(exports, "AgentFlowNode", {
4258
4560
  enumerable: true,
4259
- get: function () { return chunkBCE3FQVS_js.AgentFlowNode; }
4561
+ get: function () { return chunkM7P2TQ6X_js.AgentFlowNode; }
4260
4562
  });
4261
4563
  Object.defineProperty(exports, "AgentToolFlowNode", {
4262
4564
  enumerable: true,
4263
- get: function () { return chunkBCE3FQVS_js.AgentToolFlowNode; }
4565
+ get: function () { return chunkM7P2TQ6X_js.AgentToolFlowNode; }
4264
4566
  });
4265
4567
  Object.defineProperty(exports, "AnswerFlowNode", {
4266
4568
  enumerable: true,
4267
- get: function () { return chunkBCE3FQVS_js.AnswerFlowNode; }
4569
+ get: function () { return chunkM7P2TQ6X_js.AnswerFlowNode; }
4268
4570
  });
4269
4571
  Object.defineProperty(exports, "AnthropicIcon", {
4270
4572
  enumerable: true,
4271
- get: function () { return chunkBCE3FQVS_js.AnthropicIcon; }
4573
+ get: function () { return chunkM7P2TQ6X_js.AnthropicIcon; }
4272
4574
  });
4273
4575
  Object.defineProperty(exports, "CodeFlowNode", {
4274
4576
  enumerable: true,
4275
- get: function () { return chunkBCE3FQVS_js.CodeFlowNode; }
4577
+ get: function () { return chunkM7P2TQ6X_js.CodeFlowNode; }
4276
4578
  });
4277
4579
  Object.defineProperty(exports, "CrewAIIcon", {
4278
4580
  enumerable: true,
4279
- get: function () { return chunkBCE3FQVS_js.CrewAIIcon; }
4581
+ get: function () { return chunkM7P2TQ6X_js.CrewAIIcon; }
4280
4582
  });
4281
4583
  Object.defineProperty(exports, "DocumentExtractorFlowNode", {
4282
4584
  enumerable: true,
4283
- get: function () { return chunkBCE3FQVS_js.DocumentExtractorFlowNode; }
4585
+ get: function () { return chunkM7P2TQ6X_js.DocumentExtractorFlowNode; }
4284
4586
  });
4285
4587
  Object.defineProperty(exports, "EndFlowNode", {
4286
4588
  enumerable: true,
4287
- get: function () { return chunkBCE3FQVS_js.EndFlowNode; }
4589
+ get: function () { return chunkM7P2TQ6X_js.EndFlowNode; }
4288
4590
  });
4289
4591
  Object.defineProperty(exports, "EntityFlowNode", {
4290
4592
  enumerable: true,
4291
- get: function () { return chunkBCE3FQVS_js.EntityFlowNode; }
4593
+ get: function () { return chunkM7P2TQ6X_js.EntityFlowNode; }
4292
4594
  });
4293
4595
  Object.defineProperty(exports, "FRAMEWORK_META", {
4294
4596
  enumerable: true,
4295
- get: function () { return chunkBCE3FQVS_js.FRAMEWORK_META; }
4597
+ get: function () { return chunkM7P2TQ6X_js.FRAMEWORK_META; }
4296
4598
  });
4297
4599
  Object.defineProperty(exports, "GoogleADKIcon", {
4298
4600
  enumerable: true,
4299
- get: function () { return chunkBCE3FQVS_js.GoogleADKIcon; }
4601
+ get: function () { return chunkM7P2TQ6X_js.GoogleADKIcon; }
4300
4602
  });
4301
4603
  Object.defineProperty(exports, "GroupFlowNode", {
4302
4604
  enumerable: true,
4303
- get: function () { return chunkBCE3FQVS_js.GroupFlowNode; }
4605
+ get: function () { return chunkM7P2TQ6X_js.GroupFlowNode; }
4304
4606
  });
4305
4607
  Object.defineProperty(exports, "HttpRequestFlowNode", {
4306
4608
  enumerable: true,
4307
- get: function () { return chunkBCE3FQVS_js.HttpRequestFlowNode; }
4609
+ get: function () { return chunkM7P2TQ6X_js.HttpRequestFlowNode; }
4308
4610
  });
4309
4611
  Object.defineProperty(exports, "IfElseFlowNode", {
4310
4612
  enumerable: true,
4311
- get: function () { return chunkBCE3FQVS_js.IfElseFlowNode; }
4613
+ get: function () { return chunkM7P2TQ6X_js.IfElseFlowNode; }
4312
4614
  });
4313
4615
  Object.defineProperty(exports, "IterationFlowNode", {
4314
4616
  enumerable: true,
4315
- get: function () { return chunkBCE3FQVS_js.IterationFlowNode; }
4617
+ get: function () { return chunkM7P2TQ6X_js.IterationFlowNode; }
4316
4618
  });
4317
4619
  Object.defineProperty(exports, "IterationStartFlowNode", {
4318
4620
  enumerable: true,
4319
- get: function () { return chunkBCE3FQVS_js.IterationStartFlowNode; }
4621
+ get: function () { return chunkM7P2TQ6X_js.IterationStartFlowNode; }
4320
4622
  });
4321
4623
  Object.defineProperty(exports, "KnowledgeBaseFlowNode", {
4322
4624
  enumerable: true,
4323
- get: function () { return chunkBCE3FQVS_js.KnowledgeBaseFlowNode; }
4625
+ get: function () { return chunkM7P2TQ6X_js.KnowledgeBaseFlowNode; }
4324
4626
  });
4325
4627
  Object.defineProperty(exports, "LOGIC_ICON_MAP", {
4326
4628
  enumerable: true,
4327
- get: function () { return chunkBCE3FQVS_js.LOGIC_ICON_MAP; }
4629
+ get: function () { return chunkM7P2TQ6X_js.LOGIC_ICON_MAP; }
4328
4630
  });
4329
4631
  Object.defineProperty(exports, "LOGIC_NODE_BADGE_COLORS", {
4330
4632
  enumerable: true,
4331
- get: function () { return chunkBCE3FQVS_js.LOGIC_NODE_BADGE_COLORS; }
4633
+ get: function () { return chunkM7P2TQ6X_js.LOGIC_NODE_BADGE_COLORS; }
4332
4634
  });
4333
4635
  Object.defineProperty(exports, "LOGIC_NODE_GRADIENTS", {
4334
4636
  enumerable: true,
4335
- get: function () { return chunkBCE3FQVS_js.LOGIC_NODE_GRADIENTS; }
4637
+ get: function () { return chunkM7P2TQ6X_js.LOGIC_NODE_GRADIENTS; }
4336
4638
  });
4337
4639
  Object.defineProperty(exports, "LOGIC_NODE_HANDLE_COLORS", {
4338
4640
  enumerable: true,
4339
- get: function () { return chunkBCE3FQVS_js.LOGIC_NODE_HANDLE_COLORS; }
4641
+ get: function () { return chunkM7P2TQ6X_js.LOGIC_NODE_HANDLE_COLORS; }
4340
4642
  });
4341
4643
  Object.defineProperty(exports, "LangChainIcon", {
4342
4644
  enumerable: true,
4343
- get: function () { return chunkBCE3FQVS_js.LangChainIcon; }
4645
+ get: function () { return chunkM7P2TQ6X_js.LangChainIcon; }
4344
4646
  });
4345
4647
  Object.defineProperty(exports, "ListOperatorFlowNode", {
4346
4648
  enumerable: true,
4347
- get: function () { return chunkBCE3FQVS_js.ListOperatorFlowNode; }
4649
+ get: function () { return chunkM7P2TQ6X_js.ListOperatorFlowNode; }
4348
4650
  });
4349
4651
  Object.defineProperty(exports, "LogicNodeModal", {
4350
4652
  enumerable: true,
4351
- get: function () { return chunkBCE3FQVS_js.LogicNodeModal; }
4653
+ get: function () { return chunkM7P2TQ6X_js.LogicNodeModal; }
4352
4654
  });
4353
4655
  Object.defineProperty(exports, "MINIMAP_NODE_COLORS", {
4354
4656
  enumerable: true,
4355
- get: function () { return chunkBCE3FQVS_js.MINIMAP_NODE_COLORS; }
4657
+ get: function () { return chunkM7P2TQ6X_js.MINIMAP_NODE_COLORS; }
4356
4658
  });
4357
4659
  Object.defineProperty(exports, "ModelProviderFlowNode", {
4358
4660
  enumerable: true,
4359
- get: function () { return chunkBCE3FQVS_js.ModelProviderFlowNode; }
4661
+ get: function () { return chunkM7P2TQ6X_js.ModelProviderFlowNode; }
4360
4662
  });
4361
4663
  Object.defineProperty(exports, "NODE_EXECUTION_ACCENT_COLORS", {
4362
4664
  enumerable: true,
4363
- get: function () { return chunkBCE3FQVS_js.NODE_EXECUTION_ACCENT_COLORS; }
4665
+ get: function () { return chunkM7P2TQ6X_js.NODE_EXECUTION_ACCENT_COLORS; }
4364
4666
  });
4365
4667
  Object.defineProperty(exports, "NodeCard", {
4366
4668
  enumerable: true,
4367
- get: function () { return chunkBCE3FQVS_js.NodeCard; }
4669
+ get: function () { return chunkM7P2TQ6X_js.NodeCard; }
4368
4670
  });
4369
4671
  Object.defineProperty(exports, "NodeContextMenu", {
4370
4672
  enumerable: true,
4371
- get: function () { return chunkBCE3FQVS_js.NodeContextMenu; }
4673
+ get: function () { return chunkM7P2TQ6X_js.NodeContextMenu; }
4372
4674
  });
4373
4675
  Object.defineProperty(exports, "NoteFlowNode", {
4374
4676
  enumerable: true,
4375
- get: function () { return chunkBCE3FQVS_js.NoteFlowNode; }
4677
+ get: function () { return chunkM7P2TQ6X_js.NoteFlowNode; }
4376
4678
  });
4377
4679
  Object.defineProperty(exports, "OpenAIIcon", {
4378
4680
  enumerable: true,
4379
- get: function () { return chunkBCE3FQVS_js.OpenAIIcon; }
4681
+ get: function () { return chunkM7P2TQ6X_js.OpenAIIcon; }
4380
4682
  });
4381
4683
  Object.defineProperty(exports, "PanelContextMenu", {
4382
4684
  enumerable: true,
4383
- get: function () { return chunkBCE3FQVS_js.PanelContextMenu; }
4685
+ get: function () { return chunkM7P2TQ6X_js.PanelContextMenu; }
4384
4686
  });
4385
4687
  Object.defineProperty(exports, "ParameterExtractorFlowNode", {
4386
4688
  enumerable: true,
4387
- get: function () { return chunkBCE3FQVS_js.ParameterExtractorFlowNode; }
4689
+ get: function () { return chunkM7P2TQ6X_js.ParameterExtractorFlowNode; }
4388
4690
  });
4389
4691
  Object.defineProperty(exports, "QuestionClassifierFlowNode", {
4390
4692
  enumerable: true,
4391
- get: function () { return chunkBCE3FQVS_js.QuestionClassifierFlowNode; }
4693
+ get: function () { return chunkM7P2TQ6X_js.QuestionClassifierFlowNode; }
4392
4694
  });
4393
4695
  Object.defineProperty(exports, "RuleFlowNode", {
4394
4696
  enumerable: true,
4395
- get: function () { return chunkBCE3FQVS_js.RuleFlowNode; }
4697
+ get: function () { return chunkM7P2TQ6X_js.RuleFlowNode; }
4396
4698
  });
4397
4699
  Object.defineProperty(exports, "SelectionContextMenu", {
4398
4700
  enumerable: true,
4399
- get: function () { return chunkBCE3FQVS_js.SelectionContextMenu; }
4701
+ get: function () { return chunkM7P2TQ6X_js.SelectionContextMenu; }
4400
4702
  });
4401
4703
  Object.defineProperty(exports, "StartFlowNode", {
4402
4704
  enumerable: true,
4403
- get: function () { return chunkBCE3FQVS_js.StartFlowNode; }
4705
+ get: function () { return chunkM7P2TQ6X_js.StartFlowNode; }
4404
4706
  });
4405
4707
  Object.defineProperty(exports, "StrandsIcon", {
4406
4708
  enumerable: true,
4407
- get: function () { return chunkBCE3FQVS_js.StrandsIcon; }
4709
+ get: function () { return chunkM7P2TQ6X_js.StrandsIcon; }
4408
4710
  });
4409
4711
  Object.defineProperty(exports, "TemplateTransformFlowNode", {
4410
4712
  enumerable: true,
4411
- get: function () { return chunkBCE3FQVS_js.TemplateTransformFlowNode; }
4713
+ get: function () { return chunkM7P2TQ6X_js.TemplateTransformFlowNode; }
4412
4714
  });
4413
4715
  Object.defineProperty(exports, "ToolFlowNode", {
4414
4716
  enumerable: true,
4415
- get: function () { return chunkBCE3FQVS_js.ToolFlowNode; }
4717
+ get: function () { return chunkM7P2TQ6X_js.ToolFlowNode; }
4416
4718
  });
4417
4719
  Object.defineProperty(exports, "VariableAggregatorFlowNode", {
4418
4720
  enumerable: true,
4419
- get: function () { return chunkBCE3FQVS_js.VariableAggregatorFlowNode; }
4721
+ get: function () { return chunkM7P2TQ6X_js.VariableAggregatorFlowNode; }
4420
4722
  });
4421
4723
  Object.defineProperty(exports, "VariableAssignerFlowNode", {
4422
4724
  enumerable: true,
4423
- get: function () { return chunkBCE3FQVS_js.VariableAssignerFlowNode; }
4725
+ get: function () { return chunkM7P2TQ6X_js.VariableAssignerFlowNode; }
4424
4726
  });
4425
4727
  Object.defineProperty(exports, "WorkflowBuilderProvider", {
4426
4728
  enumerable: true,
4427
- get: function () { return chunkBCE3FQVS_js.WorkflowBuilderProvider; }
4729
+ get: function () { return chunkM7P2TQ6X_js.WorkflowBuilderProvider; }
4428
4730
  });
4429
4731
  Object.defineProperty(exports, "Workspace", {
4430
4732
  enumerable: true,
4431
- get: function () { return chunkBCE3FQVS_js.Workspace; }
4733
+ get: function () { return chunkM7P2TQ6X_js.Workspace; }
4432
4734
  });
4433
4735
  Object.defineProperty(exports, "getCompatibleModels", {
4434
4736
  enumerable: true,
4435
- get: function () { return chunkBCE3FQVS_js.getCompatibleModels; }
4737
+ get: function () { return chunkM7P2TQ6X_js.getCompatibleModels; }
4436
4738
  });
4437
4739
  Object.defineProperty(exports, "getDefaultFrameworkForModel", {
4438
4740
  enumerable: true,
4439
- get: function () { return chunkBCE3FQVS_js.getDefaultFrameworkForModel; }
4741
+ get: function () { return chunkM7P2TQ6X_js.getDefaultFrameworkForModel; }
4440
4742
  });
4441
4743
  Object.defineProperty(exports, "getEntityBadgeColor", {
4442
4744
  enumerable: true,
4443
- get: function () { return chunkBCE3FQVS_js.getEntityBadgeColor; }
4745
+ get: function () { return chunkM7P2TQ6X_js.getEntityBadgeColor; }
4444
4746
  });
4445
4747
  Object.defineProperty(exports, "getEntityGradient", {
4446
4748
  enumerable: true,
4447
- get: function () { return chunkBCE3FQVS_js.getEntityGradient; }
4749
+ get: function () { return chunkM7P2TQ6X_js.getEntityGradient; }
4448
4750
  });
4449
4751
  Object.defineProperty(exports, "getEntityHandleColor", {
4450
4752
  enumerable: true,
4451
- get: function () { return chunkBCE3FQVS_js.getEntityHandleColor; }
4753
+ get: function () { return chunkM7P2TQ6X_js.getEntityHandleColor; }
4452
4754
  });
4453
4755
  Object.defineProperty(exports, "getEntityIcon", {
4454
4756
  enumerable: true,
4455
- get: function () { return chunkBCE3FQVS_js.getEntityIcon; }
4757
+ get: function () { return chunkM7P2TQ6X_js.getEntityIcon; }
4456
4758
  });
4457
4759
  Object.defineProperty(exports, "getEntityMinimapColor", {
4458
4760
  enumerable: true,
4459
- get: function () { return chunkBCE3FQVS_js.getEntityMinimapColor; }
4761
+ get: function () { return chunkM7P2TQ6X_js.getEntityMinimapColor; }
4460
4762
  });
4461
4763
  Object.defineProperty(exports, "getFrameworkMeta", {
4462
4764
  enumerable: true,
4463
- get: function () { return chunkBCE3FQVS_js.getFrameworkMeta; }
4765
+ get: function () { return chunkM7P2TQ6X_js.getFrameworkMeta; }
4464
4766
  });
4465
4767
  Object.defineProperty(exports, "getNodeExecutionAccent", {
4466
4768
  enumerable: true,
4467
- get: function () { return chunkBCE3FQVS_js.getNodeExecutionAccent; }
4769
+ get: function () { return chunkM7P2TQ6X_js.getNodeExecutionAccent; }
4468
4770
  });
4469
4771
  Object.defineProperty(exports, "getNodeExecutionAccentRgb", {
4470
4772
  enumerable: true,
4471
- get: function () { return chunkBCE3FQVS_js.getNodeExecutionAccentRgb; }
4773
+ get: function () { return chunkM7P2TQ6X_js.getNodeExecutionAccentRgb; }
4472
4774
  });
4473
4775
  Object.defineProperty(exports, "isModelCompatibleWithFramework", {
4474
4776
  enumerable: true,
4475
- get: function () { return chunkBCE3FQVS_js.isModelCompatibleWithFramework; }
4777
+ get: function () { return chunkM7P2TQ6X_js.isModelCompatibleWithFramework; }
4476
4778
  });
4477
4779
  Object.defineProperty(exports, "useModalStore", {
4478
4780
  enumerable: true,
4479
- get: function () { return chunkBCE3FQVS_js.useModalStore; }
4781
+ get: function () { return chunkM7P2TQ6X_js.useModalStore; }
4480
4782
  });
4481
4783
  Object.defineProperty(exports, "useWorkflowBuilderClient", {
4482
4784
  enumerable: true,
4483
- get: function () { return chunkBCE3FQVS_js.useWorkflowBuilderClient; }
4785
+ get: function () { return chunkM7P2TQ6X_js.useWorkflowBuilderClient; }
4484
4786
  });
4485
4787
  Object.defineProperty(exports, "useWorkflowBuilderClientOptional", {
4486
4788
  enumerable: true,
4487
- get: function () { return chunkBCE3FQVS_js.useWorkflowBuilderClientOptional; }
4789
+ get: function () { return chunkM7P2TQ6X_js.useWorkflowBuilderClientOptional; }
4488
4790
  });
4489
4791
  Object.defineProperty(exports, "useWorkflowStore", {
4490
4792
  enumerable: true,
4491
- get: function () { return chunkBCE3FQVS_js.useWorkflowStore; }
4793
+ get: function () { return chunkM7P2TQ6X_js.useWorkflowStore; }
4492
4794
  });
4493
4795
  Object.defineProperty(exports, "GraphNodeBadge", {
4494
4796
  enumerable: true,
@@ -4535,6 +4837,7 @@ exports.RuleConditionBuilder = RuleConditionBuilder;
4535
4837
  exports.RuleForm = RuleForm;
4536
4838
  exports.RunInputDialog = RunInputDialog;
4537
4839
  exports.RunPanel = RunPanel;
4840
+ exports.RunReplayModal = RunReplayModal;
4538
4841
  exports.SaveStatusBadge = SaveStatusBadge;
4539
4842
  exports.SubworkflowModal = SubworkflowModal;
4540
4843
  exports.TIMEZONE_OPTIONS = TIMEZONE_OPTIONS;