@datatechsolutions/ui 2.11.61 → 2.11.63

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.
@@ -1,14 +1,14 @@
1
1
  "use client";
2
2
  'use strict';
3
3
 
4
- require('../chunk-55H6WZQP.js');
5
- var chunk5UU3RQRB_js = require('../chunk-5UU3RQRB.js');
6
- var chunkGUKB6TLR_js = require('../chunk-GUKB6TLR.js');
7
- var chunk3BR5TG34_js = require('../chunk-3BR5TG34.js');
4
+ var chunkJMWGZRYA_js = require('../chunk-JMWGZRYA.js');
5
+ var chunkKTGWGJZ6_js = require('../chunk-KTGWGJZ6.js');
6
+ require('../chunk-UZ3CMNUJ.js');
8
7
  var chunkYXN2K77G_js = require('../chunk-YXN2K77G.js');
9
8
  require('../chunk-S7KHTUHA.js');
10
- require('../chunk-UZ3CMNUJ.js');
9
+ require('../chunk-55H6WZQP.js');
11
10
  var chunkP4YYEM4B_js = require('../chunk-P4YYEM4B.js');
11
+ var chunk5UU3RQRB_js = require('../chunk-5UU3RQRB.js');
12
12
  var chunkC7BI5LQ6_js = require('../chunk-C7BI5LQ6.js');
13
13
  var react = require('react');
14
14
  var outline = require('@heroicons/react/24/outline');
@@ -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 = chunkGUKB6TLR_js.getFrameworkMeta(selectedFramework);
86
+ const frameworkMeta = chunkJMWGZRYA_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(chunkGUKB6TLR_js.FRAMEWORK_META);
362
+ const frameworkKeys = Object.keys(chunkJMWGZRYA_js.FRAMEWORK_META);
363
363
  const hasProviderConstraints = connectedProviderTypes.length > 0;
364
- const compatibleModels = chunkGUKB6TLR_js.getCompatibleModels(models, selectedFramework);
364
+ const compatibleModels = chunkJMWGZRYA_js.getCompatibleModels(models, selectedFramework);
365
365
  const handleFrameworkChange = react.useCallback((newFramework) => {
366
366
  setSelectedFramework(newFramework);
367
- if (!chunkGUKB6TLR_js.isModelCompatibleWithFramework(selectedModelId, newFramework)) {
368
- const compatible = chunkGUKB6TLR_js.getCompatibleModels(models, newFramework);
367
+ if (!chunkJMWGZRYA_js.isModelCompatibleWithFramework(selectedModelId, newFramework)) {
368
+ const compatible = chunkJMWGZRYA_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 = chunkGUKB6TLR_js.FRAMEWORK_META[key];
379
+ const meta = chunkJMWGZRYA_js.FRAMEWORK_META[key];
380
380
  const isSelected = key === selectedFramework;
381
- const compatCount = chunkGUKB6TLR_js.getCompatibleModels(models, key).length;
382
- const isCompatibleWithProviders = !hasProviderConstraints || chunkGUKB6TLR_js.isFrameworkCompatibleWithProviders(key, connectedProviderTypes);
381
+ const compatCount = chunkJMWGZRYA_js.getCompatibleModels(models, key).length;
382
+ const isCompatibleWithProviders = !hasProviderConstraints || chunkJMWGZRYA_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 = chunkGUKB6TLR_js.isModelCompatibleWithFramework(model.id, selectedFramework);
414
+ const isCompatible = chunkJMWGZRYA_js.isModelCompatibleWithFramework(model.id, selectedFramework);
415
415
  const { IconComponent, color, providerLabel } = getModelIcon(model.id);
416
416
  return /* @__PURE__ */ jsxRuntime.jsxs(
417
417
  "button",
@@ -510,7 +510,7 @@ function PromptTab({ agent, temperature, setTemperature, markDirty, t }) {
510
510
  ] });
511
511
  }
512
512
  function ResultsTab({ agentId, t }) {
513
- const nodeResults = chunkGUKB6TLR_js.useWorkflowStore((state) => state.nodeResults);
513
+ const nodeResults = chunkJMWGZRYA_js.useWorkflowStore((state) => state.nodeResults);
514
514
  const agentResult = react.useMemo(() => {
515
515
  return nodeResults[agentId] ?? null;
516
516
  }, [nodeResults, agentId]);
@@ -600,10 +600,10 @@ function ModelsTab({ modelProviders, selectedProviderId, onSelectProvider, model
600
600
  const providerModels = modelsByProvider.find((p) => p.provider.id === selectedProviderId);
601
601
  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") });
602
602
  const compatibleModels = providerModels.models.filter(
603
- (m) => chunkGUKB6TLR_js.isModelCompatibleWithFramework(m.id, agentFramework)
603
+ (m) => chunkJMWGZRYA_js.isModelCompatibleWithFramework(m.id, agentFramework)
604
604
  );
605
605
  const incompatibleModels = providerModels.models.filter(
606
- (m) => !chunkGUKB6TLR_js.isModelCompatibleWithFramework(m.id, agentFramework)
606
+ (m) => !chunkJMWGZRYA_js.isModelCompatibleWithFramework(m.id, agentFramework)
607
607
  );
608
608
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { children: [
609
609
  /* @__PURE__ */ jsxRuntime.jsx("label", { className: "mb-2 block text-xs font-medium text-gray-500 dark:text-gray-400", children: t("agentDrawer.selectModel") }),
@@ -676,7 +676,7 @@ function ToolsTab({ agentTools, enabledToolIds, onToggle, agentFramework, t }) {
676
676
  ] }),
677
677
  tool.description && /* @__PURE__ */ jsxRuntime.jsx("p", { className: "truncate text-[10px] text-gray-400 dark:text-gray-500", children: tool.description }),
678
678
  tool.compatibleFrameworks && tool.compatibleFrameworks.length > 0 && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "mt-1 flex flex-wrap gap-0.5", children: tool.compatibleFrameworks.map((framework) => {
679
- const meta = chunkGUKB6TLR_js.getFrameworkMeta(framework);
679
+ const meta = chunkJMWGZRYA_js.getFrameworkMeta(framework);
680
680
  const isCurrentFw = framework === agentFramework;
681
681
  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: [
682
682
  /* @__PURE__ */ jsxRuntime.jsx(meta.IconComponent, { className: "h-2.5 w-2.5" }),
@@ -693,7 +693,7 @@ function ToolsTab({ agentTools, enabledToolIds, onToggle, agentFramework, t }) {
693
693
  event.stopPropagation();
694
694
  },
695
695
  children: /* @__PURE__ */ jsxRuntime.jsx(
696
- chunk3BR5TG34_js.ToggleSwitch,
696
+ chunkKTGWGJZ6_js.ToggleSwitch,
697
697
  {
698
698
  checked: isEnabled,
699
699
  onChange: () => onToggle(tool.agentToolId),
@@ -714,9 +714,9 @@ function ToolsTab({ agentTools, enabledToolIds, onToggle, agentFramework, t }) {
714
714
  }
715
715
  function AgentModal({ onSaved }) {
716
716
  const t = chunkYXN2K77G_js.useTranslations("agents.workflow");
717
- const activeModal = chunkGUKB6TLR_js.useModalStore((s) => s.activeModal);
718
- const agentData = chunkGUKB6TLR_js.useModalStore((s) => s.agentData);
719
- const closeModal = chunkGUKB6TLR_js.useModalStore((s) => s.closeModal);
717
+ const activeModal = chunkJMWGZRYA_js.useModalStore((s) => s.activeModal);
718
+ const agentData = chunkJMWGZRYA_js.useModalStore((s) => s.agentData);
719
+ const closeModal = chunkJMWGZRYA_js.useModalStore((s) => s.closeModal);
720
720
  const open = activeModal === "agent";
721
721
  const agent = agentData?.agent ?? null;
722
722
  const models = agentData?.models ?? [];
@@ -791,7 +791,7 @@ function AgentModal({ onSaved }) {
791
791
  )
792
792
  ] });
793
793
  return /* @__PURE__ */ jsxRuntime.jsxs(
794
- chunk3BR5TG34_js.GlassModal,
794
+ chunkKTGWGJZ6_js.GlassModal,
795
795
  {
796
796
  open,
797
797
  onClose: handleClose,
@@ -943,7 +943,7 @@ function SubworkflowModal({ onSaved, onMaximize }) {
943
943
  const markDirty = useSubworkflowStore((s) => s.markDirty);
944
944
  const markSaved = useSubworkflowStore((s) => s.markSaved);
945
945
  const closeModal = useSubworkflowStore((s) => s.closeModal);
946
- const agentBehind = chunkGUKB6TLR_js.useModalStore((s) => s.activeModal === "agent" ? s.agentData?.agent?.name : null);
946
+ const agentBehind = chunkJMWGZRYA_js.useModalStore((s) => s.activeModal === "agent" ? s.agentData?.agent?.name : null);
947
947
  const isCreateMode = !tool?.toolId;
948
948
  const initialGraph = react.useMemo(() => {
949
949
  const config = tool?.config;
@@ -972,9 +972,9 @@ function SubworkflowModal({ onSaved, onMaximize }) {
972
972
  }, [tool, onSaved, name, category, description, timeoutMs, latestGraphRef, markSaved]);
973
973
  if (!tool) return null;
974
974
  const categoryKey = category ?? "external";
975
- const gradient = tool.color ?? chunkGUKB6TLR_js.CATEGORY_COLORS[categoryKey] ?? chunkGUKB6TLR_js.CATEGORY_COLORS.external;
976
- const categoryPill = chunkGUKB6TLR_js.CATEGORY_PILL_COLORS[categoryKey] ?? chunkGUKB6TLR_js.CATEGORY_PILL_COLORS.external;
977
- const IconComponent = chunkGUKB6TLR_js.ICON_MAP[tool.icon ?? ""] ?? outline.ArrowPathRoundedSquareIcon;
975
+ const gradient = tool.color ?? chunkJMWGZRYA_js.CATEGORY_COLORS[categoryKey] ?? chunkJMWGZRYA_js.CATEGORY_COLORS.external;
976
+ const categoryPill = chunkJMWGZRYA_js.CATEGORY_PILL_COLORS[categoryKey] ?? chunkJMWGZRYA_js.CATEGORY_PILL_COLORS.external;
977
+ const IconComponent = chunkJMWGZRYA_js.ICON_MAP[tool.icon ?? ""] ?? outline.ArrowPathRoundedSquareIcon;
978
978
  const graph = latestGraphRef.current;
979
979
  const startNode = graph.nodes.find((n) => n.type === "start");
980
980
  const endNode = graph.nodes.find((n) => n.type === "end");
@@ -1007,7 +1007,7 @@ function SubworkflowModal({ onSaved, onMaximize }) {
1007
1007
  ] })
1008
1008
  ] });
1009
1009
  return /* @__PURE__ */ jsxRuntime.jsx(
1010
- chunk3BR5TG34_js.GlassModal,
1010
+ chunkKTGWGJZ6_js.GlassModal,
1011
1011
  {
1012
1012
  open,
1013
1013
  onClose: closeModal,
@@ -1039,7 +1039,7 @@ function SubworkflowModal({ onSaved, onMaximize }) {
1039
1039
  {
1040
1040
  type: "button",
1041
1041
  onClick: () => setCategory(cat),
1042
- className: `rounded-full px-2 py-1 text-[9px] font-semibold transition-all ${cat === category ? `${chunkGUKB6TLR_js.CATEGORY_PILL_COLORS[cat] ?? chunkGUKB6TLR_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"}`,
1042
+ className: `rounded-full px-2 py-1 text-[9px] font-semibold transition-all ${cat === category ? `${chunkJMWGZRYA_js.CATEGORY_PILL_COLORS[cat] ?? chunkJMWGZRYA_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"}`,
1043
1043
  children: cat
1044
1044
  },
1045
1045
  cat
@@ -1126,7 +1126,7 @@ function SubworkflowModal({ onSaved, onMaximize }) {
1126
1126
  /* @__PURE__ */ jsxRuntime.jsx("div", { className: "mt-auto" })
1127
1127
  ] }),
1128
1128
  /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex-1", children: /* @__PURE__ */ jsxRuntime.jsx(
1129
- chunkGUKB6TLR_js.WorkflowCanvas,
1129
+ chunkJMWGZRYA_js.WorkflowCanvas,
1130
1130
  {
1131
1131
  initialGraph,
1132
1132
  agents: [],
@@ -1142,9 +1142,9 @@ function SubworkflowModal({ onSaved, onMaximize }) {
1142
1142
  }
1143
1143
  function PipelineSettingsModal({ onSave }) {
1144
1144
  const t = chunkYXN2K77G_js.useTranslations("agents.workflow");
1145
- const activeModal = chunkGUKB6TLR_js.useModalStore((s) => s.activeModal);
1146
- const data = chunkGUKB6TLR_js.useModalStore((s) => s.pipelineSettingsData);
1147
- const closeModal = chunkGUKB6TLR_js.useModalStore((s) => s.closeModal);
1145
+ const activeModal = chunkJMWGZRYA_js.useModalStore((s) => s.activeModal);
1146
+ const data = chunkJMWGZRYA_js.useModalStore((s) => s.pipelineSettingsData);
1147
+ const closeModal = chunkJMWGZRYA_js.useModalStore((s) => s.closeModal);
1148
1148
  const open = activeModal === "pipeline-settings";
1149
1149
  const [nameValue, setNameValue] = react.useState("");
1150
1150
  const [descriptionValue, setDescriptionValue] = react.useState("");
@@ -1179,7 +1179,7 @@ function PipelineSettingsModal({ onSave }) {
1179
1179
  }
1180
1180
  ),
1181
1181
  /* @__PURE__ */ jsxRuntime.jsxs(
1182
- chunk3BR5TG34_js.Button,
1182
+ chunkKTGWGJZ6_js.Button,
1183
1183
  {
1184
1184
  type: "submit",
1185
1185
  form: "pipeline-settings-form",
@@ -1194,7 +1194,7 @@ function PipelineSettingsModal({ onSave }) {
1194
1194
  )
1195
1195
  ] });
1196
1196
  return /* @__PURE__ */ jsxRuntime.jsx(
1197
- chunk3BR5TG34_js.GlassModal,
1197
+ chunkKTGWGJZ6_js.GlassModal,
1198
1198
  {
1199
1199
  open,
1200
1200
  onClose: closeModal,
@@ -1208,7 +1208,7 @@ function PipelineSettingsModal({ onSave }) {
1208
1208
  onSubmit: handleSubmit,
1209
1209
  children: /* @__PURE__ */ jsxRuntime.jsxs("form", { id: "pipeline-settings-form", onSubmit: handleSubmit, className: "space-y-6", children: [
1210
1210
  /* @__PURE__ */ jsxRuntime.jsx(
1211
- chunk3BR5TG34_js.FormInput,
1211
+ chunkKTGWGJZ6_js.FormInput,
1212
1212
  {
1213
1213
  label: t("pipelineName"),
1214
1214
  value: nameValue,
@@ -1218,7 +1218,7 @@ function PipelineSettingsModal({ onSave }) {
1218
1218
  }
1219
1219
  ),
1220
1220
  /* @__PURE__ */ jsxRuntime.jsx(
1221
- chunk3BR5TG34_js.FormTextarea,
1221
+ chunkKTGWGJZ6_js.FormTextarea,
1222
1222
  {
1223
1223
  label: t("pipelineDescription"),
1224
1224
  value: descriptionValue,
@@ -1291,10 +1291,13 @@ var LOGIC_NODE_ITEMS = [
1291
1291
  { nodeType: "variable_assigner", nameKey: "variableAssignerNode", descriptionKey: "variableAssignerNodeDescription", subcategory: "data_processing" },
1292
1292
  { nodeType: "variable_aggregator", nameKey: "variableAggregatorNode", descriptionKey: "variableAggregatorNodeDescription", subcategory: "data_processing" },
1293
1293
  { nodeType: "list_operator", nameKey: "listOperatorNode", descriptionKey: "listOperatorNodeDescription", subcategory: "data_processing" },
1294
- { nodeType: "document_extractor", nameKey: "documentExtractorNode", descriptionKey: "documentExtractorNodeDescription", subcategory: "data_processing" },
1294
+ // DocumentExtractor echoes its config today pending a real
1295
+ // extractor implementation, tag as experimental.
1296
+ { nodeType: "document_extractor", nameKey: "documentExtractorNode", descriptionKey: "documentExtractorNodeDescription", subcategory: "data_processing", experimental: true },
1295
1297
  { nodeType: "datasource", nameKey: "datasourceNode", descriptionKey: "datasourceNodeDescription", subcategory: "data_processing" },
1296
1298
  // AI/ML
1297
- { nodeType: "knowledge_base", nameKey: "knowledgeBaseNode", descriptionKey: "knowledgeBaseNodeDescription", subcategory: "ai_ml" },
1299
+ // KnowledgeBase is a stub (no vector store wired yet) — hide by default.
1300
+ { nodeType: "knowledge_base", nameKey: "knowledgeBaseNode", descriptionKey: "knowledgeBaseNodeDescription", subcategory: "ai_ml", experimental: true },
1298
1301
  { nodeType: "answer", nameKey: "answerNode", descriptionKey: "answerNodeDescription", subcategory: "ai_ml" },
1299
1302
  { nodeType: "question_classifier", nameKey: "questionClassifierNode", descriptionKey: "questionClassifierNodeDescription", subcategory: "ai_ml" },
1300
1303
  { nodeType: "parameter_extractor", nameKey: "parameterExtractorNode", descriptionKey: "parameterExtractorNodeDescription", subcategory: "ai_ml" },
@@ -1366,8 +1369,8 @@ function CollapsibleSection({ title, icon, colorClass, defaultOpen = true, count
1366
1369
  ] });
1367
1370
  }
1368
1371
  function LogicNodeItemCard({ item, translationFunction }) {
1369
- const IconComponent = chunkGUKB6TLR_js.LOGIC_ICON_MAP[item.nodeType];
1370
- const gradient = chunkGUKB6TLR_js.LOGIC_NODE_GRADIENTS[item.nodeType] ?? "from-gray-400 to-gray-500";
1372
+ const IconComponent = chunkJMWGZRYA_js.LOGIC_ICON_MAP[item.nodeType];
1373
+ const gradient = chunkJMWGZRYA_js.LOGIC_NODE_GRADIENTS[item.nodeType] ?? "from-gray-400 to-gray-500";
1371
1374
  const defaultConfig = chunkC7BI5LQ6_js.createDefaultLogicNodeConfig(item.nodeType);
1372
1375
  const configJson = defaultConfig ? JSON.stringify(defaultConfig) : void 0;
1373
1376
  return /* @__PURE__ */ jsxRuntime.jsxs(
@@ -1389,6 +1392,7 @@ function LogicNodeItemCard({ item, translationFunction }) {
1389
1392
  function NodePalette({ agents, tools, agentTools = [], rules, entities = [], modelProviders = [], onCreateAgent, onCreateTool, onCreateAgentTool, onCreateRule, onCreateDatasource, onConfigureProvider }) {
1390
1393
  const t = chunkYXN2K77G_js.useTranslations("agents.workflow");
1391
1394
  const [searchQuery, setSearchQuery] = react.useState("");
1395
+ const [showExperimental, setShowExperimental] = react.useState(false);
1392
1396
  const normalizedQuery = searchQuery.toLowerCase().trim();
1393
1397
  const filteredAgents = react.useMemo(
1394
1398
  () => normalizedQuery ? agents.filter(
@@ -1437,12 +1441,13 @@ function NodePalette({ agents, tools, agentTools = [], rules, entities = [], mod
1437
1441
  ) : entityTypes,
1438
1442
  [entityTypes, normalizedQuery]
1439
1443
  );
1440
- const filteredLogicItems = react.useMemo(
1441
- () => normalizedQuery ? LOGIC_NODE_ITEMS.filter(
1444
+ const filteredLogicItems = react.useMemo(() => {
1445
+ const visibleByDefault = showExperimental ? LOGIC_NODE_ITEMS : LOGIC_NODE_ITEMS.filter((item) => !item.experimental);
1446
+ if (!normalizedQuery) return visibleByDefault;
1447
+ return visibleByDefault.filter(
1442
1448
  (item) => t(item.nameKey).toLowerCase().includes(normalizedQuery) || t(item.descriptionKey).toLowerCase().includes(normalizedQuery)
1443
- ) : LOGIC_NODE_ITEMS,
1444
- [normalizedQuery, t]
1445
- );
1449
+ );
1450
+ }, [normalizedQuery, showExperimental, t]);
1446
1451
  const groupedLogicItems = react.useMemo(() => {
1447
1452
  const groups = {
1448
1453
  control_flow: [],
@@ -1475,7 +1480,19 @@ function NodePalette({ agents, tools, agentTools = [], rules, entities = [], mod
1475
1480
  placeholder: t("searchPalette"),
1476
1481
  className: "liquid-surface w-full rounded-lg px-2.5 py-1.5 text-[11px] text-gray-900 placeholder-gray-400 outline-none transition-colors focus:ring-1 focus:ring-indigo-300/40 dark:text-white dark:placeholder-gray-500 dark:focus:ring-indigo-500/20"
1477
1482
  }
1478
- ) })
1483
+ ) }),
1484
+ /* @__PURE__ */ jsxRuntime.jsxs("label", { className: "mt-2 flex items-center gap-2 text-[10px] text-gray-500 dark:text-gray-400 select-none cursor-pointer", children: [
1485
+ /* @__PURE__ */ jsxRuntime.jsx(
1486
+ "input",
1487
+ {
1488
+ type: "checkbox",
1489
+ checked: showExperimental,
1490
+ onChange: (event) => setShowExperimental(event.target.checked),
1491
+ className: "h-3 w-3 rounded border-gray-300 text-indigo-600 focus:ring-1 focus:ring-indigo-400/40 dark:border-gray-600"
1492
+ }
1493
+ ),
1494
+ t("showExperimentalNodes", { _: "Show experimental" })
1495
+ ] })
1479
1496
  ] }),
1480
1497
  /* @__PURE__ */ jsxRuntime.jsx(
1481
1498
  CollapsibleSection,
@@ -1534,7 +1551,7 @@ function NodePalette({ agents, tools, agentTools = [], rules, entities = [], mod
1534
1551
  /* @__PURE__ */ jsxRuntime.jsx("p", { className: "truncate text-[10px] text-gray-400 dark:text-gray-500", children: tool.category })
1535
1552
  ] }),
1536
1553
  /* @__PURE__ */ jsxRuntime.jsx(
1537
- chunk3BR5TG34_js.ToggleSwitch,
1554
+ chunkKTGWGJZ6_js.ToggleSwitch,
1538
1555
  {
1539
1556
  checked: Boolean(tool.enabled),
1540
1557
  onChange: () => {
@@ -1575,7 +1592,7 @@ function NodePalette({ agents, tools, agentTools = [], rules, entities = [], mod
1575
1592
  ] })
1576
1593
  ] }),
1577
1594
  /* @__PURE__ */ jsxRuntime.jsx(
1578
- chunk3BR5TG34_js.ToggleSwitch,
1595
+ chunkKTGWGJZ6_js.ToggleSwitch,
1579
1596
  {
1580
1597
  checked: Boolean(rule.enabled),
1581
1598
  onChange: () => {
@@ -1611,8 +1628,8 @@ function NodePalette({ agents, tools, agentTools = [], rules, entities = [], mod
1611
1628
  limit: entity.defaultLimit
1612
1629
  });
1613
1630
  const dsLogo = getDatasourceLogo(entity.id);
1614
- const EntityIcon = chunkGUKB6TLR_js.getEntityIcon(entity.id);
1615
- const entityGradient = chunkGUKB6TLR_js.getEntityGradient(entity.id);
1631
+ const EntityIcon = chunkJMWGZRYA_js.getEntityIcon(entity.id);
1632
+ const entityGradient = chunkJMWGZRYA_js.getEntityGradient(entity.id);
1616
1633
  return /* @__PURE__ */ jsxRuntime.jsxs(
1617
1634
  "div",
1618
1635
  {
@@ -1632,7 +1649,7 @@ function NodePalette({ agents, tools, agentTools = [], rules, entities = [], mod
1632
1649
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-2", children: [
1633
1650
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: "rounded-full bg-slate-100 px-1.5 py-0.5 text-[9px] font-medium text-slate-600 dark:bg-white/10 dark:text-slate-300", children: "Read only" }),
1634
1651
  /* @__PURE__ */ jsxRuntime.jsx(
1635
- chunk3BR5TG34_js.ToggleSwitch,
1652
+ chunkKTGWGJZ6_js.ToggleSwitch,
1636
1653
  {
1637
1654
  checked: true,
1638
1655
  onChange: () => {
@@ -2010,9 +2027,9 @@ function formatDuration2(durationMs) {
2010
2027
  }
2011
2028
  function RunPanel({ open, onClose, onRun, onStop }) {
2012
2029
  const translations = chunkYXN2K77G_js.useTranslations("agents.workflow.runPanel");
2013
- const nodes = chunkGUKB6TLR_js.useWorkflowStore((state) => state.nodes);
2014
- const isRunning = chunkGUKB6TLR_js.useWorkflowStore((state) => state.isRunning);
2015
- const nodeResults = chunkGUKB6TLR_js.useWorkflowStore((state) => state.nodeResults);
2030
+ const nodes = chunkJMWGZRYA_js.useWorkflowStore((state) => state.nodes);
2031
+ const isRunning = chunkJMWGZRYA_js.useWorkflowStore((state) => state.isRunning);
2032
+ const nodeResults = chunkJMWGZRYA_js.useWorkflowStore((state) => state.nodeResults);
2016
2033
  const startNode = nodes.find((node) => node.type === "start");
2017
2034
  const hasEndNode = nodes.some((node) => node.type === "end");
2018
2035
  const hasValidStartConfig = Boolean(
@@ -2182,8 +2199,11 @@ function inferVariables(config, nodeType) {
2182
2199
  }
2183
2200
  break;
2184
2201
  case "code":
2185
- variables.push({ name: "code_input", direction: "input", variableType: config.language });
2186
- variables.push({ name: "code_output", direction: "output", variableType: "any" });
2202
+ {
2203
+ const kind = "language" in config ? config.language : config.operation;
2204
+ variables.push({ name: "code_input", direction: "input", variableType: kind });
2205
+ variables.push({ name: "code_output", direction: "output", variableType: "any" });
2206
+ }
2187
2207
  break;
2188
2208
  case "http_request":
2189
2209
  variables.push({ name: "url", direction: "input", variableType: "string" });
@@ -2297,8 +2317,8 @@ function inferVariables(config, nodeType) {
2297
2317
  }
2298
2318
  function VariableInspector({ open, onClose }) {
2299
2319
  const translations = chunkYXN2K77G_js.useTranslations("agents.workflow.variableInspector");
2300
- const nodes = chunkGUKB6TLR_js.useWorkflowStore((state) => state.nodes);
2301
- const edges = chunkGUKB6TLR_js.useWorkflowStore((state) => state.edges);
2320
+ const nodes = chunkJMWGZRYA_js.useWorkflowStore((state) => state.nodes);
2321
+ const edges = chunkJMWGZRYA_js.useWorkflowStore((state) => state.edges);
2302
2322
  const [expandedNodes, setExpandedNodes] = react.useState(/* @__PURE__ */ new Set());
2303
2323
  const toggleNodeExpansion = react.useCallback((nodeId) => {
2304
2324
  setExpandedNodes((current) => {
@@ -2360,8 +2380,8 @@ function VariableInspector({ open, onClose }) {
2360
2380
  /* @__PURE__ */ jsxRuntime.jsx("p", { className: "mt-2 text-sm text-gray-500 dark:text-gray-400", children: translations("noNodes") })
2361
2381
  ] }) : /* @__PURE__ */ jsxRuntime.jsx("div", { className: "divide-y divide-gray-100 dark:divide-gray-800", children: nodeVariableEntries.map((entry) => {
2362
2382
  const isExpanded = expandedNodes.has(entry.nodeId);
2363
- const IconComponent = chunkGUKB6TLR_js.LOGIC_ICON_MAP[entry.nodeType];
2364
- const gradient = chunkGUKB6TLR_js.LOGIC_NODE_GRADIENTS[entry.nodeType] ?? "from-gray-400 to-gray-500";
2383
+ const IconComponent = chunkJMWGZRYA_js.LOGIC_ICON_MAP[entry.nodeType];
2384
+ const gradient = chunkJMWGZRYA_js.LOGIC_NODE_GRADIENTS[entry.nodeType] ?? "from-gray-400 to-gray-500";
2365
2385
  const inputVariables = entry.variables.filter((variable) => variable.direction === "input");
2366
2386
  const outputVariables = entry.variables.filter((variable) => variable.direction === "output");
2367
2387
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { "data-testid": `variable-node-${entry.nodeId}`, children: [
@@ -2427,7 +2447,7 @@ function RunInputDialog({
2427
2447
  onRun
2428
2448
  }) {
2429
2449
  const t = chunkYXN2K77G_js.useTranslations("agents.workflow.runInputDialog");
2430
- const nodes = chunkGUKB6TLR_js.useWorkflowStore((state) => state.nodes);
2450
+ const nodes = chunkJMWGZRYA_js.useWorkflowStore((state) => state.nodes);
2431
2451
  const [values, setValues] = react.useState({});
2432
2452
  const inputVariableNames = react.useMemo(() => {
2433
2453
  const storeStartNode = nodes.find((node) => node.type === "start");
@@ -2454,7 +2474,7 @@ function RunInputDialog({
2454
2474
  }, [onClose]);
2455
2475
  if (!open) return null;
2456
2476
  return /* @__PURE__ */ jsxRuntime.jsxs(
2457
- chunk3BR5TG34_js.GlassModal,
2477
+ chunkKTGWGJZ6_js.GlassModal,
2458
2478
  {
2459
2479
  open,
2460
2480
  onClose: handleClose,
@@ -2465,7 +2485,7 @@ function RunInputDialog({
2465
2485
  /* @__PURE__ */ jsxRuntime.jsx("div", { className: "space-y-3", children: inputVariableNames.length === 0 ? /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-center text-sm text-gray-500 dark:text-gray-400", children: t("noInputs") }) : inputVariableNames.map((variableName) => /* @__PURE__ */ jsxRuntime.jsxs("div", { children: [
2466
2486
  /* @__PURE__ */ jsxRuntime.jsx("label", { className: "mb-1 block text-xs font-medium text-gray-700 dark:text-gray-300", children: variableName }),
2467
2487
  /* @__PURE__ */ jsxRuntime.jsx(
2468
- chunk3BR5TG34_js.Input,
2488
+ chunkKTGWGJZ6_js.Input,
2469
2489
  {
2470
2490
  value: values[variableName] ?? "",
2471
2491
  onChange: (event) => handleValueChange(variableName, event.target.value),
@@ -2474,8 +2494,8 @@ function RunInputDialog({
2474
2494
  )
2475
2495
  ] }, variableName)) }),
2476
2496
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "mt-4 flex items-center justify-end gap-2", children: [
2477
- /* @__PURE__ */ jsxRuntime.jsx(chunk3BR5TG34_js.Button, { size: "sm", plain: true, onClick: handleClose, children: t("cancel") }),
2478
- /* @__PURE__ */ jsxRuntime.jsxs(chunk3BR5TG34_js.Button, { size: "sm", gradient: true, onClick: handleSubmit, children: [
2497
+ /* @__PURE__ */ jsxRuntime.jsx(chunkKTGWGJZ6_js.Button, { size: "sm", plain: true, onClick: handleClose, children: t("cancel") }),
2498
+ /* @__PURE__ */ jsxRuntime.jsxs(chunkKTGWGJZ6_js.Button, { size: "sm", gradient: true, onClick: handleSubmit, children: [
2479
2499
  /* @__PURE__ */ jsxRuntime.jsx(outline.PlayIcon, { className: "h-3.5 w-3.5", "data-slot": "icon" }),
2480
2500
  t("run")
2481
2501
  ] })
@@ -2508,8 +2528,8 @@ function PreviewPanel({ open, onClose, workflowId, loadRuns }) {
2508
2528
  const [isLoadingRuns, setIsLoadingRuns] = react.useState(false);
2509
2529
  const [selectedRun, setSelectedRun] = react.useState(null);
2510
2530
  const [selectedNode, setSelectedNode] = react.useState(null);
2511
- const isRunning = chunkGUKB6TLR_js.useWorkflowStore((state) => state.isRunning);
2512
- const nodeResults = chunkGUKB6TLR_js.useWorkflowStore((state) => state.nodeResults);
2531
+ const isRunning = chunkJMWGZRYA_js.useWorkflowStore((state) => state.isRunning);
2532
+ const nodeResults = chunkJMWGZRYA_js.useWorkflowStore((state) => state.nodeResults);
2513
2533
  const refreshRuns = react.useCallback(async () => {
2514
2534
  setIsLoadingRuns(true);
2515
2535
  try {
@@ -2665,7 +2685,7 @@ var AutoSaveWorkspace = react.memo(function AutoSaveWorkspace2({
2665
2685
  onAutoSaveGraph(graph);
2666
2686
  }, [onAutoSaveGraph, onGraphSnapshot]);
2667
2687
  return /* @__PURE__ */ jsxRuntime.jsx(
2668
- chunkGUKB6TLR_js.Workspace,
2688
+ chunkJMWGZRYA_js.Workspace,
2669
2689
  {
2670
2690
  ...workspaceProps,
2671
2691
  onGraphChange: handleGraphChange
@@ -2673,7 +2693,7 @@ var AutoSaveWorkspace = react.memo(function AutoSaveWorkspace2({
2673
2693
  );
2674
2694
  });
2675
2695
  function DynamicIslandConfirm2(props) {
2676
- return /* @__PURE__ */ jsxRuntime.jsx(chunk3BR5TG34_js.DynamicIslandConfirm, { ...props });
2696
+ return /* @__PURE__ */ jsxRuntime.jsx(chunkKTGWGJZ6_js.DynamicIslandConfirm, { ...props });
2677
2697
  }
2678
2698
  var JSON_PREVIEW_LINE_LIMIT = 50;
2679
2699
  function DslExportModal({ open, onClose, workflow, graph }) {
@@ -2727,7 +2747,7 @@ function DslExportModal({ open, onClose, workflow, graph }) {
2727
2747
  }, [jsonString, workflow.name, workflow.version]);
2728
2748
  if (!open) return null;
2729
2749
  return /* @__PURE__ */ jsxRuntime.jsx(
2730
- chunk3BR5TG34_js.GlassModal,
2750
+ chunkKTGWGJZ6_js.GlassModal,
2731
2751
  {
2732
2752
  open,
2733
2753
  onClose,
@@ -2769,7 +2789,7 @@ function DslExportModal({ open, onClose, workflow, graph }) {
2769
2789
  ] }),
2770
2790
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center justify-end gap-3 border-t border-gray-200 px-1 py-4 dark:border-gray-700", children: [
2771
2791
  /* @__PURE__ */ jsxRuntime.jsx(
2772
- chunk3BR5TG34_js.Button,
2792
+ chunkKTGWGJZ6_js.Button,
2773
2793
  {
2774
2794
  type: "button",
2775
2795
  onClick: handleCopyToClipboard,
@@ -2786,7 +2806,7 @@ function DslExportModal({ open, onClose, workflow, graph }) {
2786
2806
  }
2787
2807
  ),
2788
2808
  /* @__PURE__ */ jsxRuntime.jsxs(
2789
- chunk3BR5TG34_js.Button,
2809
+ chunkKTGWGJZ6_js.Button,
2790
2810
  {
2791
2811
  type: "button",
2792
2812
  onClick: handleDownloadJson,
@@ -2945,7 +2965,7 @@ function DslImportModal({ open, onClose, onImport }) {
2945
2965
  }, []);
2946
2966
  if (!open) return null;
2947
2967
  return /* @__PURE__ */ jsxRuntime.jsx(
2948
- chunk3BR5TG34_js.GlassModal,
2968
+ chunkKTGWGJZ6_js.GlassModal,
2949
2969
  {
2950
2970
  open,
2951
2971
  onClose,
@@ -2985,7 +3005,7 @@ function DslImportModal({ open, onClose, onImport }) {
2985
3005
  ) : /* @__PURE__ */ jsxRuntime.jsxs("div", { "data-testid": "import-validation-result", children: [
2986
3006
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "mb-4 flex items-center justify-between", children: [
2987
3007
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-sm font-medium text-gray-700 dark:text-gray-300", children: fileName }),
2988
- /* @__PURE__ */ jsxRuntime.jsx(chunk3BR5TG34_js.Button, { type: "button", plain: true, size: "sm", onClick: handleReset, children: translations("chooseAnother") })
3008
+ /* @__PURE__ */ jsxRuntime.jsx(chunkKTGWGJZ6_js.Button, { type: "button", plain: true, size: "sm", onClick: handleReset, children: translations("chooseAnother") })
2989
3009
  ] }),
2990
3010
  validationResult.isValid ? /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "rounded-lg border border-green-200 bg-green-50 p-4 dark:border-green-800 dark:bg-green-900/20", children: [
2991
3011
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-2", children: [
@@ -3013,9 +3033,9 @@ function DslImportModal({ open, onClose, onImport }) {
3013
3033
  ] })
3014
3034
  ] }) }),
3015
3035
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center justify-end gap-3 border-t border-gray-200 px-1 py-4 dark:border-gray-700", children: [
3016
- /* @__PURE__ */ jsxRuntime.jsx(chunk3BR5TG34_js.Button, { type: "button", onClick: onClose, outline: true, size: "sm", "data-testid": "import-cancel-button", children: translations("cancel") }),
3036
+ /* @__PURE__ */ jsxRuntime.jsx(chunkKTGWGJZ6_js.Button, { type: "button", onClick: onClose, outline: true, size: "sm", "data-testid": "import-cancel-button", children: translations("cancel") }),
3017
3037
  /* @__PURE__ */ jsxRuntime.jsxs(
3018
- chunk3BR5TG34_js.Button,
3038
+ chunkKTGWGJZ6_js.Button,
3019
3039
  {
3020
3040
  type: "button",
3021
3041
  onClick: handleImport,
@@ -3036,14 +3056,14 @@ function DslImportModal({ open, onClose, onImport }) {
3036
3056
  }
3037
3057
 
3038
3058
  // src/astrlabe/store/selectors.ts
3039
- var useCanUndo = () => chunkGUKB6TLR_js.useWorkflowStore((state) => state.past.length > 0);
3040
- var useCanRedo = () => chunkGUKB6TLR_js.useWorkflowStore((state) => state.future.length > 0);
3041
- var useHasCopied = () => chunkGUKB6TLR_js.useWorkflowStore((state) => state.clipboard !== null);
3042
- var useContextMenu = () => chunkGUKB6TLR_js.useWorkflowStore((state) => state.contextMenu);
3043
- var useEditingNodeId = () => chunkGUKB6TLR_js.useWorkflowStore((state) => state.editingNodeId);
3044
- var useSelectedNodeCount = () => chunkGUKB6TLR_js.useWorkflowStore((state) => state.nodes.filter((node) => node.selected).length);
3045
- var useIsRunning = () => chunkGUKB6TLR_js.useWorkflowStore((state) => state.isRunning);
3046
- var useNodeResults = () => chunkGUKB6TLR_js.useWorkflowStore((state) => state.nodeResults);
3059
+ var useCanUndo = () => chunkJMWGZRYA_js.useWorkflowStore((state) => state.past.length > 0);
3060
+ var useCanRedo = () => chunkJMWGZRYA_js.useWorkflowStore((state) => state.future.length > 0);
3061
+ var useHasCopied = () => chunkJMWGZRYA_js.useWorkflowStore((state) => state.clipboard !== null);
3062
+ var useContextMenu = () => chunkJMWGZRYA_js.useWorkflowStore((state) => state.contextMenu);
3063
+ var useEditingNodeId = () => chunkJMWGZRYA_js.useWorkflowStore((state) => state.editingNodeId);
3064
+ var useSelectedNodeCount = () => chunkJMWGZRYA_js.useWorkflowStore((state) => state.nodes.filter((node) => node.selected).length);
3065
+ var useIsRunning = () => chunkJMWGZRYA_js.useWorkflowStore((state) => state.isRunning);
3066
+ var useNodeResults = () => chunkJMWGZRYA_js.useWorkflowStore((state) => state.nodeResults);
3047
3067
  var DEFAULT_MAX_HISTORY = 50;
3048
3068
  function useUndoRedo(nodes, edges, setNodes, setEdges, maxHistory = DEFAULT_MAX_HISTORY) {
3049
3069
  const pastRef = react.useRef([]);
@@ -3321,257 +3341,241 @@ function useHelpLines() {
3321
3341
  };
3322
3342
  }
3323
3343
 
3324
- Object.defineProperty(exports, "topologicalSortAgents", {
3325
- enumerable: true,
3326
- get: function () { return chunk5UU3RQRB_js.topologicalSortAgents; }
3327
- });
3328
- Object.defineProperty(exports, "validateGraphNodeConfigs", {
3329
- enumerable: true,
3330
- get: function () { return chunk5UU3RQRB_js.validateGraphNodeConfigs; }
3331
- });
3332
- Object.defineProperty(exports, "validateNodeConfig", {
3333
- enumerable: true,
3334
- get: function () { return chunk5UU3RQRB_js.validateNodeConfig; }
3335
- });
3336
- Object.defineProperty(exports, "validateWorkflowGraph", {
3337
- enumerable: true,
3338
- get: function () { return chunk5UU3RQRB_js.validateWorkflowGraph; }
3339
- });
3340
3344
  Object.defineProperty(exports, "AgentFlowNode", {
3341
3345
  enumerable: true,
3342
- get: function () { return chunkGUKB6TLR_js.AgentFlowNode; }
3346
+ get: function () { return chunkJMWGZRYA_js.AgentFlowNode; }
3343
3347
  });
3344
3348
  Object.defineProperty(exports, "AgentToolFlowNode", {
3345
3349
  enumerable: true,
3346
- get: function () { return chunkGUKB6TLR_js.AgentToolFlowNode; }
3350
+ get: function () { return chunkJMWGZRYA_js.AgentToolFlowNode; }
3347
3351
  });
3348
3352
  Object.defineProperty(exports, "AnswerFlowNode", {
3349
3353
  enumerable: true,
3350
- get: function () { return chunkGUKB6TLR_js.AnswerFlowNode; }
3354
+ get: function () { return chunkJMWGZRYA_js.AnswerFlowNode; }
3351
3355
  });
3352
3356
  Object.defineProperty(exports, "AnthropicIcon", {
3353
3357
  enumerable: true,
3354
- get: function () { return chunkGUKB6TLR_js.AnthropicIcon; }
3358
+ get: function () { return chunkJMWGZRYA_js.AnthropicIcon; }
3355
3359
  });
3356
3360
  Object.defineProperty(exports, "CodeFlowNode", {
3357
3361
  enumerable: true,
3358
- get: function () { return chunkGUKB6TLR_js.CodeFlowNode; }
3362
+ get: function () { return chunkJMWGZRYA_js.CodeFlowNode; }
3359
3363
  });
3360
3364
  Object.defineProperty(exports, "CrewAIIcon", {
3361
3365
  enumerable: true,
3362
- get: function () { return chunkGUKB6TLR_js.CrewAIIcon; }
3366
+ get: function () { return chunkJMWGZRYA_js.CrewAIIcon; }
3363
3367
  });
3364
3368
  Object.defineProperty(exports, "DocumentExtractorFlowNode", {
3365
3369
  enumerable: true,
3366
- get: function () { return chunkGUKB6TLR_js.DocumentExtractorFlowNode; }
3370
+ get: function () { return chunkJMWGZRYA_js.DocumentExtractorFlowNode; }
3367
3371
  });
3368
3372
  Object.defineProperty(exports, "EndFlowNode", {
3369
3373
  enumerable: true,
3370
- get: function () { return chunkGUKB6TLR_js.EndFlowNode; }
3374
+ get: function () { return chunkJMWGZRYA_js.EndFlowNode; }
3371
3375
  });
3372
3376
  Object.defineProperty(exports, "EntityFlowNode", {
3373
3377
  enumerable: true,
3374
- get: function () { return chunkGUKB6TLR_js.EntityFlowNode; }
3378
+ get: function () { return chunkJMWGZRYA_js.EntityFlowNode; }
3375
3379
  });
3376
3380
  Object.defineProperty(exports, "FRAMEWORK_META", {
3377
3381
  enumerable: true,
3378
- get: function () { return chunkGUKB6TLR_js.FRAMEWORK_META; }
3382
+ get: function () { return chunkJMWGZRYA_js.FRAMEWORK_META; }
3379
3383
  });
3380
3384
  Object.defineProperty(exports, "GoogleADKIcon", {
3381
3385
  enumerable: true,
3382
- get: function () { return chunkGUKB6TLR_js.GoogleADKIcon; }
3386
+ get: function () { return chunkJMWGZRYA_js.GoogleADKIcon; }
3383
3387
  });
3384
3388
  Object.defineProperty(exports, "GroupFlowNode", {
3385
3389
  enumerable: true,
3386
- get: function () { return chunkGUKB6TLR_js.GroupFlowNode; }
3390
+ get: function () { return chunkJMWGZRYA_js.GroupFlowNode; }
3387
3391
  });
3388
3392
  Object.defineProperty(exports, "HttpRequestFlowNode", {
3389
3393
  enumerable: true,
3390
- get: function () { return chunkGUKB6TLR_js.HttpRequestFlowNode; }
3394
+ get: function () { return chunkJMWGZRYA_js.HttpRequestFlowNode; }
3391
3395
  });
3392
3396
  Object.defineProperty(exports, "IfElseFlowNode", {
3393
3397
  enumerable: true,
3394
- get: function () { return chunkGUKB6TLR_js.IfElseFlowNode; }
3398
+ get: function () { return chunkJMWGZRYA_js.IfElseFlowNode; }
3395
3399
  });
3396
3400
  Object.defineProperty(exports, "IterationFlowNode", {
3397
3401
  enumerable: true,
3398
- get: function () { return chunkGUKB6TLR_js.IterationFlowNode; }
3402
+ get: function () { return chunkJMWGZRYA_js.IterationFlowNode; }
3399
3403
  });
3400
3404
  Object.defineProperty(exports, "IterationStartFlowNode", {
3401
3405
  enumerable: true,
3402
- get: function () { return chunkGUKB6TLR_js.IterationStartFlowNode; }
3406
+ get: function () { return chunkJMWGZRYA_js.IterationStartFlowNode; }
3403
3407
  });
3404
3408
  Object.defineProperty(exports, "KnowledgeBaseFlowNode", {
3405
3409
  enumerable: true,
3406
- get: function () { return chunkGUKB6TLR_js.KnowledgeBaseFlowNode; }
3410
+ get: function () { return chunkJMWGZRYA_js.KnowledgeBaseFlowNode; }
3407
3411
  });
3408
3412
  Object.defineProperty(exports, "LOGIC_ICON_MAP", {
3409
3413
  enumerable: true,
3410
- get: function () { return chunkGUKB6TLR_js.LOGIC_ICON_MAP; }
3414
+ get: function () { return chunkJMWGZRYA_js.LOGIC_ICON_MAP; }
3411
3415
  });
3412
3416
  Object.defineProperty(exports, "LOGIC_NODE_BADGE_COLORS", {
3413
3417
  enumerable: true,
3414
- get: function () { return chunkGUKB6TLR_js.LOGIC_NODE_BADGE_COLORS; }
3418
+ get: function () { return chunkJMWGZRYA_js.LOGIC_NODE_BADGE_COLORS; }
3415
3419
  });
3416
3420
  Object.defineProperty(exports, "LOGIC_NODE_GRADIENTS", {
3417
3421
  enumerable: true,
3418
- get: function () { return chunkGUKB6TLR_js.LOGIC_NODE_GRADIENTS; }
3422
+ get: function () { return chunkJMWGZRYA_js.LOGIC_NODE_GRADIENTS; }
3419
3423
  });
3420
3424
  Object.defineProperty(exports, "LOGIC_NODE_HANDLE_COLORS", {
3421
3425
  enumerable: true,
3422
- get: function () { return chunkGUKB6TLR_js.LOGIC_NODE_HANDLE_COLORS; }
3426
+ get: function () { return chunkJMWGZRYA_js.LOGIC_NODE_HANDLE_COLORS; }
3423
3427
  });
3424
3428
  Object.defineProperty(exports, "LangChainIcon", {
3425
3429
  enumerable: true,
3426
- get: function () { return chunkGUKB6TLR_js.LangChainIcon; }
3430
+ get: function () { return chunkJMWGZRYA_js.LangChainIcon; }
3427
3431
  });
3428
3432
  Object.defineProperty(exports, "ListOperatorFlowNode", {
3429
3433
  enumerable: true,
3430
- get: function () { return chunkGUKB6TLR_js.ListOperatorFlowNode; }
3434
+ get: function () { return chunkJMWGZRYA_js.ListOperatorFlowNode; }
3431
3435
  });
3432
3436
  Object.defineProperty(exports, "LogicNodeModal", {
3433
3437
  enumerable: true,
3434
- get: function () { return chunkGUKB6TLR_js.LogicNodeModal; }
3438
+ get: function () { return chunkJMWGZRYA_js.LogicNodeModal; }
3435
3439
  });
3436
3440
  Object.defineProperty(exports, "MINIMAP_NODE_COLORS", {
3437
3441
  enumerable: true,
3438
- get: function () { return chunkGUKB6TLR_js.MINIMAP_NODE_COLORS; }
3442
+ get: function () { return chunkJMWGZRYA_js.MINIMAP_NODE_COLORS; }
3439
3443
  });
3440
3444
  Object.defineProperty(exports, "ModelProviderFlowNode", {
3441
3445
  enumerable: true,
3442
- get: function () { return chunkGUKB6TLR_js.ModelProviderFlowNode; }
3446
+ get: function () { return chunkJMWGZRYA_js.ModelProviderFlowNode; }
3443
3447
  });
3444
3448
  Object.defineProperty(exports, "NODE_EXECUTION_ACCENT_COLORS", {
3445
3449
  enumerable: true,
3446
- get: function () { return chunkGUKB6TLR_js.NODE_EXECUTION_ACCENT_COLORS; }
3450
+ get: function () { return chunkJMWGZRYA_js.NODE_EXECUTION_ACCENT_COLORS; }
3447
3451
  });
3448
3452
  Object.defineProperty(exports, "NodeCard", {
3449
3453
  enumerable: true,
3450
- get: function () { return chunkGUKB6TLR_js.NodeCard; }
3454
+ get: function () { return chunkJMWGZRYA_js.NodeCard; }
3451
3455
  });
3452
3456
  Object.defineProperty(exports, "NodeContextMenu", {
3453
3457
  enumerable: true,
3454
- get: function () { return chunkGUKB6TLR_js.NodeContextMenu; }
3458
+ get: function () { return chunkJMWGZRYA_js.NodeContextMenu; }
3455
3459
  });
3456
3460
  Object.defineProperty(exports, "NoteFlowNode", {
3457
3461
  enumerable: true,
3458
- get: function () { return chunkGUKB6TLR_js.NoteFlowNode; }
3462
+ get: function () { return chunkJMWGZRYA_js.NoteFlowNode; }
3459
3463
  });
3460
3464
  Object.defineProperty(exports, "OpenAIIcon", {
3461
3465
  enumerable: true,
3462
- get: function () { return chunkGUKB6TLR_js.OpenAIIcon; }
3466
+ get: function () { return chunkJMWGZRYA_js.OpenAIIcon; }
3463
3467
  });
3464
3468
  Object.defineProperty(exports, "PanelContextMenu", {
3465
3469
  enumerable: true,
3466
- get: function () { return chunkGUKB6TLR_js.PanelContextMenu; }
3470
+ get: function () { return chunkJMWGZRYA_js.PanelContextMenu; }
3467
3471
  });
3468
3472
  Object.defineProperty(exports, "ParameterExtractorFlowNode", {
3469
3473
  enumerable: true,
3470
- get: function () { return chunkGUKB6TLR_js.ParameterExtractorFlowNode; }
3474
+ get: function () { return chunkJMWGZRYA_js.ParameterExtractorFlowNode; }
3471
3475
  });
3472
3476
  Object.defineProperty(exports, "QuestionClassifierFlowNode", {
3473
3477
  enumerable: true,
3474
- get: function () { return chunkGUKB6TLR_js.QuestionClassifierFlowNode; }
3478
+ get: function () { return chunkJMWGZRYA_js.QuestionClassifierFlowNode; }
3475
3479
  });
3476
3480
  Object.defineProperty(exports, "RuleFlowNode", {
3477
3481
  enumerable: true,
3478
- get: function () { return chunkGUKB6TLR_js.RuleFlowNode; }
3482
+ get: function () { return chunkJMWGZRYA_js.RuleFlowNode; }
3479
3483
  });
3480
3484
  Object.defineProperty(exports, "SelectionContextMenu", {
3481
3485
  enumerable: true,
3482
- get: function () { return chunkGUKB6TLR_js.SelectionContextMenu; }
3486
+ get: function () { return chunkJMWGZRYA_js.SelectionContextMenu; }
3483
3487
  });
3484
3488
  Object.defineProperty(exports, "StartFlowNode", {
3485
3489
  enumerable: true,
3486
- get: function () { return chunkGUKB6TLR_js.StartFlowNode; }
3490
+ get: function () { return chunkJMWGZRYA_js.StartFlowNode; }
3487
3491
  });
3488
3492
  Object.defineProperty(exports, "StrandsIcon", {
3489
3493
  enumerable: true,
3490
- get: function () { return chunkGUKB6TLR_js.StrandsIcon; }
3494
+ get: function () { return chunkJMWGZRYA_js.StrandsIcon; }
3491
3495
  });
3492
3496
  Object.defineProperty(exports, "TemplateTransformFlowNode", {
3493
3497
  enumerable: true,
3494
- get: function () { return chunkGUKB6TLR_js.TemplateTransformFlowNode; }
3498
+ get: function () { return chunkJMWGZRYA_js.TemplateTransformFlowNode; }
3495
3499
  });
3496
3500
  Object.defineProperty(exports, "ToolFlowNode", {
3497
3501
  enumerable: true,
3498
- get: function () { return chunkGUKB6TLR_js.ToolFlowNode; }
3502
+ get: function () { return chunkJMWGZRYA_js.ToolFlowNode; }
3499
3503
  });
3500
3504
  Object.defineProperty(exports, "VariableAggregatorFlowNode", {
3501
3505
  enumerable: true,
3502
- get: function () { return chunkGUKB6TLR_js.VariableAggregatorFlowNode; }
3506
+ get: function () { return chunkJMWGZRYA_js.VariableAggregatorFlowNode; }
3503
3507
  });
3504
3508
  Object.defineProperty(exports, "VariableAssignerFlowNode", {
3505
3509
  enumerable: true,
3506
- get: function () { return chunkGUKB6TLR_js.VariableAssignerFlowNode; }
3510
+ get: function () { return chunkJMWGZRYA_js.VariableAssignerFlowNode; }
3507
3511
  });
3508
3512
  Object.defineProperty(exports, "WorkflowBuilderProvider", {
3509
3513
  enumerable: true,
3510
- get: function () { return chunkGUKB6TLR_js.WorkflowBuilderProvider; }
3514
+ get: function () { return chunkJMWGZRYA_js.WorkflowBuilderProvider; }
3511
3515
  });
3512
3516
  Object.defineProperty(exports, "Workspace", {
3513
3517
  enumerable: true,
3514
- get: function () { return chunkGUKB6TLR_js.Workspace; }
3518
+ get: function () { return chunkJMWGZRYA_js.Workspace; }
3515
3519
  });
3516
3520
  Object.defineProperty(exports, "getCompatibleModels", {
3517
3521
  enumerable: true,
3518
- get: function () { return chunkGUKB6TLR_js.getCompatibleModels; }
3522
+ get: function () { return chunkJMWGZRYA_js.getCompatibleModels; }
3519
3523
  });
3520
3524
  Object.defineProperty(exports, "getDefaultFrameworkForModel", {
3521
3525
  enumerable: true,
3522
- get: function () { return chunkGUKB6TLR_js.getDefaultFrameworkForModel; }
3526
+ get: function () { return chunkJMWGZRYA_js.getDefaultFrameworkForModel; }
3523
3527
  });
3524
3528
  Object.defineProperty(exports, "getEntityBadgeColor", {
3525
3529
  enumerable: true,
3526
- get: function () { return chunkGUKB6TLR_js.getEntityBadgeColor; }
3530
+ get: function () { return chunkJMWGZRYA_js.getEntityBadgeColor; }
3527
3531
  });
3528
3532
  Object.defineProperty(exports, "getEntityGradient", {
3529
3533
  enumerable: true,
3530
- get: function () { return chunkGUKB6TLR_js.getEntityGradient; }
3534
+ get: function () { return chunkJMWGZRYA_js.getEntityGradient; }
3531
3535
  });
3532
3536
  Object.defineProperty(exports, "getEntityHandleColor", {
3533
3537
  enumerable: true,
3534
- get: function () { return chunkGUKB6TLR_js.getEntityHandleColor; }
3538
+ get: function () { return chunkJMWGZRYA_js.getEntityHandleColor; }
3535
3539
  });
3536
3540
  Object.defineProperty(exports, "getEntityIcon", {
3537
3541
  enumerable: true,
3538
- get: function () { return chunkGUKB6TLR_js.getEntityIcon; }
3542
+ get: function () { return chunkJMWGZRYA_js.getEntityIcon; }
3539
3543
  });
3540
3544
  Object.defineProperty(exports, "getEntityMinimapColor", {
3541
3545
  enumerable: true,
3542
- get: function () { return chunkGUKB6TLR_js.getEntityMinimapColor; }
3546
+ get: function () { return chunkJMWGZRYA_js.getEntityMinimapColor; }
3543
3547
  });
3544
3548
  Object.defineProperty(exports, "getFrameworkMeta", {
3545
3549
  enumerable: true,
3546
- get: function () { return chunkGUKB6TLR_js.getFrameworkMeta; }
3550
+ get: function () { return chunkJMWGZRYA_js.getFrameworkMeta; }
3547
3551
  });
3548
3552
  Object.defineProperty(exports, "getNodeExecutionAccent", {
3549
3553
  enumerable: true,
3550
- get: function () { return chunkGUKB6TLR_js.getNodeExecutionAccent; }
3554
+ get: function () { return chunkJMWGZRYA_js.getNodeExecutionAccent; }
3551
3555
  });
3552
3556
  Object.defineProperty(exports, "getNodeExecutionAccentRgb", {
3553
3557
  enumerable: true,
3554
- get: function () { return chunkGUKB6TLR_js.getNodeExecutionAccentRgb; }
3558
+ get: function () { return chunkJMWGZRYA_js.getNodeExecutionAccentRgb; }
3555
3559
  });
3556
3560
  Object.defineProperty(exports, "isModelCompatibleWithFramework", {
3557
3561
  enumerable: true,
3558
- get: function () { return chunkGUKB6TLR_js.isModelCompatibleWithFramework; }
3562
+ get: function () { return chunkJMWGZRYA_js.isModelCompatibleWithFramework; }
3559
3563
  });
3560
3564
  Object.defineProperty(exports, "useModalStore", {
3561
3565
  enumerable: true,
3562
- get: function () { return chunkGUKB6TLR_js.useModalStore; }
3566
+ get: function () { return chunkJMWGZRYA_js.useModalStore; }
3563
3567
  });
3564
3568
  Object.defineProperty(exports, "useWorkflowBuilderClient", {
3565
3569
  enumerable: true,
3566
- get: function () { return chunkGUKB6TLR_js.useWorkflowBuilderClient; }
3570
+ get: function () { return chunkJMWGZRYA_js.useWorkflowBuilderClient; }
3567
3571
  });
3568
3572
  Object.defineProperty(exports, "useWorkflowBuilderClientOptional", {
3569
3573
  enumerable: true,
3570
- get: function () { return chunkGUKB6TLR_js.useWorkflowBuilderClientOptional; }
3574
+ get: function () { return chunkJMWGZRYA_js.useWorkflowBuilderClientOptional; }
3571
3575
  });
3572
3576
  Object.defineProperty(exports, "useWorkflowStore", {
3573
3577
  enumerable: true,
3574
- get: function () { return chunkGUKB6TLR_js.useWorkflowStore; }
3578
+ get: function () { return chunkJMWGZRYA_js.useWorkflowStore; }
3575
3579
  });
3576
3580
  Object.defineProperty(exports, "GraphNodeBadge", {
3577
3581
  enumerable: true,
@@ -3589,6 +3593,22 @@ Object.defineProperty(exports, "GraphNodeMeta", {
3589
3593
  enumerable: true,
3590
3594
  get: function () { return chunkP4YYEM4B_js.GraphNodeMeta; }
3591
3595
  });
3596
+ Object.defineProperty(exports, "topologicalSortAgents", {
3597
+ enumerable: true,
3598
+ get: function () { return chunk5UU3RQRB_js.topologicalSortAgents; }
3599
+ });
3600
+ Object.defineProperty(exports, "validateGraphNodeConfigs", {
3601
+ enumerable: true,
3602
+ get: function () { return chunk5UU3RQRB_js.validateGraphNodeConfigs; }
3603
+ });
3604
+ Object.defineProperty(exports, "validateNodeConfig", {
3605
+ enumerable: true,
3606
+ get: function () { return chunk5UU3RQRB_js.validateNodeConfig; }
3607
+ });
3608
+ Object.defineProperty(exports, "validateWorkflowGraph", {
3609
+ enumerable: true,
3610
+ get: function () { return chunk5UU3RQRB_js.validateWorkflowGraph; }
3611
+ });
3592
3612
  Object.defineProperty(exports, "applyDagreLayout", {
3593
3613
  enumerable: true,
3594
3614
  get: function () { return chunkC7BI5LQ6_js.applyDagreLayout; }