@datatechsolutions/ui 2.11.12 → 2.11.14

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 chunk3GE3MBUZ_js = require('../chunk-3GE3MBUZ.js');
6
- var chunkLFWRE3A3_js = require('../chunk-LFWRE3A3.js');
6
+ var chunkJT2JCLN5_js = require('../chunk-JT2JCLN5.js');
7
7
  var chunk4XID6LOC_js = require('../chunk-4XID6LOC.js');
8
8
  require('../chunk-S7KHTUHA.js');
9
9
  require('../chunk-UZ3CMNUJ.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 = chunkLFWRE3A3_js.getFrameworkMeta(selectedFramework);
86
+ const frameworkMeta = chunkJT2JCLN5_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" },
@@ -375,12 +375,12 @@ function ConfigTab({ agent, models, t, selectedModelId, setSelectedModelId, sele
375
375
  const isPrecise = temperature <= 0.3;
376
376
  const isBalanced = temperature > 0.3 && temperature <= 0.7;
377
377
  const isCreative = temperature > 0.7;
378
- const frameworkKeys = Object.keys(chunkLFWRE3A3_js.FRAMEWORK_META);
379
- const compatibleModels = chunkLFWRE3A3_js.getCompatibleModels(models, selectedFramework);
378
+ const frameworkKeys = Object.keys(chunkJT2JCLN5_js.FRAMEWORK_META);
379
+ const compatibleModels = chunkJT2JCLN5_js.getCompatibleModels(models, selectedFramework);
380
380
  const handleFrameworkChange = react.useCallback((newFramework) => {
381
381
  setSelectedFramework(newFramework);
382
- if (!chunkLFWRE3A3_js.isModelCompatibleWithFramework(selectedModelId, newFramework)) {
383
- const compatible = chunkLFWRE3A3_js.getCompatibleModels(models, newFramework);
382
+ if (!chunkJT2JCLN5_js.isModelCompatibleWithFramework(selectedModelId, newFramework)) {
383
+ const compatible = chunkJT2JCLN5_js.getCompatibleModels(models, newFramework);
384
384
  if (compatible.length > 0) {
385
385
  setSelectedModelId(compatible[0].id);
386
386
  }
@@ -391,9 +391,9 @@ function ConfigTab({ agent, models, t, selectedModelId, setSelectedModelId, sele
391
391
  /* @__PURE__ */ jsxRuntime.jsxs("div", { children: [
392
392
  /* @__PURE__ */ jsxRuntime.jsx("label", { className: "mb-2 block text-xs font-medium text-gray-500 dark:text-gray-400", children: t("agentDrawer.framework") }),
393
393
  /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex flex-wrap gap-1.5", children: frameworkKeys.map((key) => {
394
- const meta = chunkLFWRE3A3_js.FRAMEWORK_META[key];
394
+ const meta = chunkJT2JCLN5_js.FRAMEWORK_META[key];
395
395
  const isSelected = key === selectedFramework;
396
- const compatCount = chunkLFWRE3A3_js.getCompatibleModels(models, key).length;
396
+ const compatCount = chunkJT2JCLN5_js.getCompatibleModels(models, key).length;
397
397
  return /* @__PURE__ */ jsxRuntime.jsxs(
398
398
  "button",
399
399
  {
@@ -423,7 +423,7 @@ function ConfigTab({ agent, models, t, selectedModelId, setSelectedModelId, sele
423
423
  ] }),
424
424
  /* @__PURE__ */ jsxRuntime.jsx("div", { className: "grid grid-cols-2 gap-2", children: models.map((model) => {
425
425
  const isSelected = model.id === selectedModelId;
426
- const isCompatible = chunkLFWRE3A3_js.isModelCompatibleWithFramework(model.id, selectedFramework);
426
+ const isCompatible = chunkJT2JCLN5_js.isModelCompatibleWithFramework(model.id, selectedFramework);
427
427
  const { IconComponent, color, providerLabel } = getModelIcon(model.id);
428
428
  return /* @__PURE__ */ jsxRuntime.jsxs(
429
429
  "button",
@@ -520,7 +520,7 @@ function ConfigTab({ agent, models, t, selectedModelId, setSelectedModelId, sele
520
520
  ] });
521
521
  }
522
522
  function ResultsTab({ agentId, t }) {
523
- const nodeResults = chunkLFWRE3A3_js.useWorkflowStore((state) => state.nodeResults);
523
+ const nodeResults = chunkJT2JCLN5_js.useWorkflowStore((state) => state.nodeResults);
524
524
  const agentResult = react.useMemo(() => {
525
525
  return nodeResults[agentId] ?? null;
526
526
  }, [nodeResults, agentId]);
@@ -547,14 +547,46 @@ function ResultsTab({ agentId, t }) {
547
547
  ] })
548
548
  ] });
549
549
  }
550
+ function ToolsTab({ agentTools, enabledToolIds, onToggle, t }) {
551
+ if (agentTools.length === 0) {
552
+ return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-col items-center justify-center px-4 py-12 text-center", children: [
553
+ /* @__PURE__ */ jsxRuntime.jsx(outline.CommandLineIcon, { className: "mb-2 h-8 w-8 text-gray-400 dark:text-gray-500" }),
554
+ /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-sm text-gray-500 dark:text-gray-400", children: t("agentDrawer.noToolsAvailable") })
555
+ ] });
556
+ }
557
+ return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "space-y-2 p-4", children: [
558
+ /* @__PURE__ */ jsxRuntime.jsx("p", { className: "mb-3 text-xs text-gray-500 dark:text-gray-400", children: t("agentDrawer.toolsDescription") }),
559
+ agentTools.map((tool) => {
560
+ const isEnabled = enabledToolIds.has(tool.agentToolId);
561
+ return /* @__PURE__ */ jsxRuntime.jsxs(
562
+ "button",
563
+ {
564
+ type: "button",
565
+ onClick: () => onToggle(tool.agentToolId),
566
+ className: `flex w-full items-center gap-3 rounded-xl border px-4 py-3 text-left transition-all ${isEnabled ? "border-amber-500/30 bg-amber-50/50 dark:border-amber-400/20 dark:bg-amber-500/5" : "border-gray-200/50 bg-gray-50/30 hover:border-gray-300 dark:border-white/10 dark:bg-white/[0.02] dark:hover:border-white/20"}`,
567
+ children: [
568
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: `flex h-8 w-8 shrink-0 items-center justify-center rounded-lg ${isEnabled ? "bg-gradient-to-br from-amber-400 to-orange-500" : "bg-gray-200 dark:bg-gray-700"}`, children: /* @__PURE__ */ jsxRuntime.jsx(outline.CommandLineIcon, { className: `h-4 w-4 ${isEnabled ? "text-white" : "text-gray-500 dark:text-gray-400"}` }) }),
569
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "min-w-0 flex-1", children: [
570
+ /* @__PURE__ */ jsxRuntime.jsx("p", { className: `text-sm font-medium ${isEnabled ? "text-gray-900 dark:text-white" : "text-gray-600 dark:text-gray-400"}`, children: tool.name }),
571
+ tool.description && /* @__PURE__ */ jsxRuntime.jsx("p", { className: "truncate text-[10px] text-gray-400 dark:text-gray-500", children: tool.description })
572
+ ] }),
573
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: `flex h-5 w-5 shrink-0 items-center justify-center rounded-full transition-all ${isEnabled ? "bg-amber-500 text-white" : "border border-gray-300 dark:border-gray-600"}`, children: isEnabled && /* @__PURE__ */ jsxRuntime.jsx(outline.CheckIcon, { className: "h-3 w-3" }) })
574
+ ]
575
+ },
576
+ tool.agentToolId
577
+ );
578
+ })
579
+ ] });
580
+ }
550
581
  function AgentModal({ onSaved }) {
551
582
  const t = chunkYXN2K77G_js.useTranslations("agents.workflow");
552
- const activeModal = chunkLFWRE3A3_js.useModalStore((s) => s.activeModal);
553
- const agentData = chunkLFWRE3A3_js.useModalStore((s) => s.agentData);
554
- const closeModal = chunkLFWRE3A3_js.useModalStore((s) => s.closeModal);
583
+ const activeModal = chunkJT2JCLN5_js.useModalStore((s) => s.activeModal);
584
+ const agentData = chunkJT2JCLN5_js.useModalStore((s) => s.agentData);
585
+ const closeModal = chunkJT2JCLN5_js.useModalStore((s) => s.closeModal);
555
586
  const open = activeModal === "agent";
556
587
  const agent = agentData?.agent ?? null;
557
588
  const models = agentData?.models ?? [];
589
+ const availableAgentTools = agentData?.agentTools ?? [];
558
590
  const isCreateMode = agentData?.isCreateMode ?? false;
559
591
  const [activeTab, setActiveTab] = react.useState("config");
560
592
  const [selectedModelId, setSelectedModelId] = react.useState("");
@@ -562,6 +594,7 @@ function AgentModal({ onSaved }) {
562
594
  const [temperature, setTemperature] = react.useState(0.7);
563
595
  const [elo, setElo] = react.useState(1e3);
564
596
  const [saved, setSaved] = react.useState(true);
597
+ const [enabledToolIds, setEnabledToolIds] = react.useState(/* @__PURE__ */ new Set());
565
598
  const agentId = agent?.agentId ?? agent?.id ?? "";
566
599
  react.useEffect(() => {
567
600
  if (!agent) return;
@@ -571,6 +604,8 @@ function AgentModal({ onSaved }) {
571
604
  setElo(Number(agent.elo ?? 1e3));
572
605
  setSaved(!isCreateMode);
573
606
  setActiveTab("config");
607
+ const agentToolIds = agent.agentToolIds;
608
+ setEnabledToolIds(new Set(agentToolIds ?? availableAgentTools.filter((t2) => t2.enabled).map((t2) => t2.agentToolId)));
574
609
  }, [agentId]);
575
610
  const dirty = !saved;
576
611
  const markDirty = react.useCallback(() => setSaved(false), []);
@@ -578,18 +613,31 @@ function AgentModal({ onSaved }) {
578
613
  const handleClose = react.useCallback(() => {
579
614
  closeModal();
580
615
  }, [closeModal]);
616
+ const handleToggleTool = react.useCallback((toolId) => {
617
+ setEnabledToolIds((previous) => {
618
+ const next = new Set(previous);
619
+ if (next.has(toolId)) next.delete(toolId);
620
+ else next.add(toolId);
621
+ return next;
622
+ });
623
+ markDirty();
624
+ }, [markDirty]);
581
625
  const handleMarkSaved = react.useCallback(() => {
582
626
  markSaved();
583
627
  onSaved?.();
584
628
  }, [markSaved, onSaved]);
585
629
  if (!agent) return null;
586
- const tabs = /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex border-b border-white/20 dark:border-white/10", children: ["config", "results"].map((tab) => /* @__PURE__ */ jsxRuntime.jsx(
630
+ const tabList = ["config", "tools", "results"];
631
+ const tabs = /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex border-b border-white/20 dark:border-white/10", children: tabList.map((tab) => /* @__PURE__ */ jsxRuntime.jsxs(
587
632
  "button",
588
633
  {
589
634
  type: "button",
590
635
  onClick: () => setActiveTab(tab),
591
636
  className: `flex-1 px-4 py-2 text-xs font-medium transition-colors ${activeTab === tab ? "border-b-2 border-blue-500 text-blue-600 dark:text-blue-400" : "text-gray-500 hover:text-gray-700 dark:text-gray-400 dark:hover:text-gray-200"}`,
592
- children: t(tab === "config" ? "agentDrawer.configTab" : "agentDrawer.resultsTab")
637
+ children: [
638
+ t(tab === "config" ? "agentDrawer.configTab" : tab === "tools" ? "agentDrawer.toolsTab" : "agentDrawer.resultsTab"),
639
+ tab === "tools" && enabledToolIds.size > 0 && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "ml-1 inline-flex h-4 min-w-4 items-center justify-center rounded-full bg-amber-500/20 px-1 text-[9px] font-bold text-amber-600 dark:text-amber-400", children: enabledToolIds.size })
640
+ ]
593
641
  },
594
642
  tab
595
643
  )) });
@@ -633,7 +681,9 @@ function AgentModal({ onSaved }) {
633
681
  closeLabel: t("agentDrawer.close"),
634
682
  children: [
635
683
  /* @__PURE__ */ jsxRuntime.jsx(AgentProfileHeader, { agent, models, t, selectedModelId, setSelectedModelId, selectedFramework, temperature, setTemperature, elo, setElo, onChanged: markDirty }),
636
- activeTab === "config" ? /* @__PURE__ */ jsxRuntime.jsx(ConfigTab, { agent, models, t, selectedModelId, setSelectedModelId, selectedFramework, setSelectedFramework: (fw) => setSelectedFramework(fw), temperature, setTemperature, dirty, markDirty, markSaved: handleMarkSaved }) : /* @__PURE__ */ jsxRuntime.jsx(ResultsTab, { agentId: agent.agentId, t })
684
+ activeTab === "config" && /* @__PURE__ */ jsxRuntime.jsx(ConfigTab, { agent, models, t, selectedModelId, setSelectedModelId, selectedFramework, setSelectedFramework: (fw) => setSelectedFramework(fw), temperature, setTemperature, dirty, markDirty, markSaved: handleMarkSaved }),
685
+ activeTab === "tools" && /* @__PURE__ */ jsxRuntime.jsx(ToolsTab, { agentTools: availableAgentTools, enabledToolIds, onToggle: handleToggleTool, t }),
686
+ activeTab === "results" && /* @__PURE__ */ jsxRuntime.jsx(ResultsTab, { agentId: agent.agentId, t })
637
687
  ]
638
688
  }
639
689
  );
@@ -743,7 +793,7 @@ function SubworkflowModal({ onSaved, onMaximize }) {
743
793
  const markDirty = useSubworkflowStore((s) => s.markDirty);
744
794
  const markSaved = useSubworkflowStore((s) => s.markSaved);
745
795
  const closeModal = useSubworkflowStore((s) => s.closeModal);
746
- const agentBehind = chunkLFWRE3A3_js.useModalStore((s) => s.activeModal === "agent" ? s.agentData?.agent?.name : null);
796
+ const agentBehind = chunkJT2JCLN5_js.useModalStore((s) => s.activeModal === "agent" ? s.agentData?.agent?.name : null);
747
797
  const isCreateMode = !tool?.toolId;
748
798
  const initialGraph = react.useMemo(() => {
749
799
  const config = tool?.config;
@@ -772,9 +822,9 @@ function SubworkflowModal({ onSaved, onMaximize }) {
772
822
  }, [tool, onSaved, name, category, description, timeoutMs, latestGraphRef, markSaved]);
773
823
  if (!tool) return null;
774
824
  const categoryKey = category ?? "external";
775
- const gradient = tool.color ?? chunkLFWRE3A3_js.CATEGORY_COLORS[categoryKey] ?? chunkLFWRE3A3_js.CATEGORY_COLORS.external;
776
- const categoryPill = chunkLFWRE3A3_js.CATEGORY_PILL_COLORS[categoryKey] ?? chunkLFWRE3A3_js.CATEGORY_PILL_COLORS.external;
777
- const IconComponent = chunkLFWRE3A3_js.ICON_MAP[tool.icon ?? ""] ?? outline.ArrowPathRoundedSquareIcon;
825
+ const gradient = tool.color ?? chunkJT2JCLN5_js.CATEGORY_COLORS[categoryKey] ?? chunkJT2JCLN5_js.CATEGORY_COLORS.external;
826
+ const categoryPill = chunkJT2JCLN5_js.CATEGORY_PILL_COLORS[categoryKey] ?? chunkJT2JCLN5_js.CATEGORY_PILL_COLORS.external;
827
+ const IconComponent = chunkJT2JCLN5_js.ICON_MAP[tool.icon ?? ""] ?? outline.ArrowPathRoundedSquareIcon;
778
828
  const graph = latestGraphRef.current;
779
829
  const startNode = graph.nodes.find((n) => n.type === "start");
780
830
  const endNode = graph.nodes.find((n) => n.type === "end");
@@ -839,7 +889,7 @@ function SubworkflowModal({ onSaved, onMaximize }) {
839
889
  {
840
890
  type: "button",
841
891
  onClick: () => setCategory(cat),
842
- className: `rounded-full px-2 py-1 text-[9px] font-semibold transition-all ${cat === category ? `${chunkLFWRE3A3_js.CATEGORY_PILL_COLORS[cat] ?? chunkLFWRE3A3_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"}`,
892
+ className: `rounded-full px-2 py-1 text-[9px] font-semibold transition-all ${cat === category ? `${chunkJT2JCLN5_js.CATEGORY_PILL_COLORS[cat] ?? chunkJT2JCLN5_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"}`,
843
893
  children: cat
844
894
  },
845
895
  cat
@@ -926,7 +976,7 @@ function SubworkflowModal({ onSaved, onMaximize }) {
926
976
  /* @__PURE__ */ jsxRuntime.jsx("div", { className: "mt-auto" })
927
977
  ] }),
928
978
  /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex-1", children: /* @__PURE__ */ jsxRuntime.jsx(
929
- chunkLFWRE3A3_js.WorkflowCanvas,
979
+ chunkJT2JCLN5_js.WorkflowCanvas,
930
980
  {
931
981
  initialGraph,
932
982
  agents: [],
@@ -984,9 +1034,9 @@ function WorkspaceModal({
984
1034
  }
985
1035
  function PipelineSettingsModal({ onSave }) {
986
1036
  const t = chunkYXN2K77G_js.useTranslations("agents.workflow");
987
- const activeModal = chunkLFWRE3A3_js.useModalStore((s) => s.activeModal);
988
- const data = chunkLFWRE3A3_js.useModalStore((s) => s.pipelineSettingsData);
989
- const closeModal = chunkLFWRE3A3_js.useModalStore((s) => s.closeModal);
1037
+ const activeModal = chunkJT2JCLN5_js.useModalStore((s) => s.activeModal);
1038
+ const data = chunkJT2JCLN5_js.useModalStore((s) => s.pipelineSettingsData);
1039
+ const closeModal = chunkJT2JCLN5_js.useModalStore((s) => s.closeModal);
990
1040
  const open = activeModal === "pipeline-settings";
991
1041
  const [nameValue, setNameValue] = react.useState("");
992
1042
  const [descriptionValue, setDescriptionValue] = react.useState("");
@@ -1195,8 +1245,8 @@ function CollapsibleSection({ title, icon, colorClass, defaultOpen = true, count
1195
1245
  ] });
1196
1246
  }
1197
1247
  function LogicNodeItemCard({ item, translationFunction }) {
1198
- const IconComponent = chunkLFWRE3A3_js.LOGIC_ICON_MAP[item.nodeType];
1199
- const gradient = chunkLFWRE3A3_js.LOGIC_NODE_GRADIENTS[item.nodeType] ?? "from-gray-400 to-gray-500";
1248
+ const IconComponent = chunkJT2JCLN5_js.LOGIC_ICON_MAP[item.nodeType];
1249
+ const gradient = chunkJT2JCLN5_js.LOGIC_NODE_GRADIENTS[item.nodeType] ?? "from-gray-400 to-gray-500";
1200
1250
  const defaultConfig = chunkPWBWP5FJ_js.createDefaultLogicNodeConfig(item.nodeType);
1201
1251
  const configJson = defaultConfig ? JSON.stringify(defaultConfig) : void 0;
1202
1252
  return /* @__PURE__ */ jsxRuntime.jsxs(
@@ -1440,8 +1490,8 @@ function NodePalette({ agents, tools, agentTools = [], rules, entities = [], mod
1440
1490
  limit: entity.defaultLimit
1441
1491
  });
1442
1492
  const dsLogo = getDatasourceLogo(entity.id);
1443
- const EntityIcon = chunkLFWRE3A3_js.getEntityIcon(entity.id);
1444
- const entityGradient = chunkLFWRE3A3_js.getEntityGradient(entity.id);
1493
+ const EntityIcon = chunkJT2JCLN5_js.getEntityIcon(entity.id);
1494
+ const entityGradient = chunkJT2JCLN5_js.getEntityGradient(entity.id);
1445
1495
  return /* @__PURE__ */ jsxRuntime.jsxs(
1446
1496
  "div",
1447
1497
  {
@@ -1813,9 +1863,9 @@ function formatDuration2(durationMs) {
1813
1863
  }
1814
1864
  function RunPanel({ open, onClose, onRun, onStop }) {
1815
1865
  const translations = chunkYXN2K77G_js.useTranslations("agents.workflow.runPanel");
1816
- const nodes = chunkLFWRE3A3_js.useWorkflowStore((state) => state.nodes);
1817
- const isRunning = chunkLFWRE3A3_js.useWorkflowStore((state) => state.isRunning);
1818
- const nodeResults = chunkLFWRE3A3_js.useWorkflowStore((state) => state.nodeResults);
1866
+ const nodes = chunkJT2JCLN5_js.useWorkflowStore((state) => state.nodes);
1867
+ const isRunning = chunkJT2JCLN5_js.useWorkflowStore((state) => state.isRunning);
1868
+ const nodeResults = chunkJT2JCLN5_js.useWorkflowStore((state) => state.nodeResults);
1819
1869
  const startNode = nodes.find((node) => node.type === "start");
1820
1870
  const hasEndNode = nodes.some((node) => node.type === "end");
1821
1871
  const hasValidStartConfig = Boolean(
@@ -2100,8 +2150,8 @@ function inferVariables(config, nodeType) {
2100
2150
  }
2101
2151
  function VariableInspector({ open, onClose }) {
2102
2152
  const translations = chunkYXN2K77G_js.useTranslations("agents.workflow.variableInspector");
2103
- const nodes = chunkLFWRE3A3_js.useWorkflowStore((state) => state.nodes);
2104
- const edges = chunkLFWRE3A3_js.useWorkflowStore((state) => state.edges);
2153
+ const nodes = chunkJT2JCLN5_js.useWorkflowStore((state) => state.nodes);
2154
+ const edges = chunkJT2JCLN5_js.useWorkflowStore((state) => state.edges);
2105
2155
  const [expandedNodes, setExpandedNodes] = react.useState(/* @__PURE__ */ new Set());
2106
2156
  const toggleNodeExpansion = react.useCallback((nodeId) => {
2107
2157
  setExpandedNodes((current) => {
@@ -2163,8 +2213,8 @@ function VariableInspector({ open, onClose }) {
2163
2213
  /* @__PURE__ */ jsxRuntime.jsx("p", { className: "mt-2 text-sm text-gray-500 dark:text-gray-400", children: translations("noNodes") })
2164
2214
  ] }) : /* @__PURE__ */ jsxRuntime.jsx("div", { className: "divide-y divide-gray-100 dark:divide-gray-800", children: nodeVariableEntries.map((entry) => {
2165
2215
  const isExpanded = expandedNodes.has(entry.nodeId);
2166
- const IconComponent = chunkLFWRE3A3_js.LOGIC_ICON_MAP[entry.nodeType];
2167
- const gradient = chunkLFWRE3A3_js.LOGIC_NODE_GRADIENTS[entry.nodeType] ?? "from-gray-400 to-gray-500";
2216
+ const IconComponent = chunkJT2JCLN5_js.LOGIC_ICON_MAP[entry.nodeType];
2217
+ const gradient = chunkJT2JCLN5_js.LOGIC_NODE_GRADIENTS[entry.nodeType] ?? "from-gray-400 to-gray-500";
2168
2218
  const inputVariables = entry.variables.filter((variable) => variable.direction === "input");
2169
2219
  const outputVariables = entry.variables.filter((variable) => variable.direction === "output");
2170
2220
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { "data-testid": `variable-node-${entry.nodeId}`, children: [
@@ -2230,7 +2280,7 @@ function RunInputDialog({
2230
2280
  onRun
2231
2281
  }) {
2232
2282
  const t = chunkYXN2K77G_js.useTranslations("agents.workflow.runInputDialog");
2233
- const nodes = chunkLFWRE3A3_js.useWorkflowStore((state) => state.nodes);
2283
+ const nodes = chunkJT2JCLN5_js.useWorkflowStore((state) => state.nodes);
2234
2284
  const [values, setValues] = react.useState({});
2235
2285
  const inputVariableNames = react.useMemo(() => {
2236
2286
  const storeStartNode = nodes.find((node) => node.type === "start");
@@ -2312,8 +2362,8 @@ function PreviewPanel({ open, onClose, workflowId, loadRuns }) {
2312
2362
  const [isLoadingRuns, setIsLoadingRuns] = react.useState(false);
2313
2363
  const [selectedRun, setSelectedRun] = react.useState(null);
2314
2364
  const [selectedNode, setSelectedNode] = react.useState(null);
2315
- const isRunning = chunkLFWRE3A3_js.useWorkflowStore((state) => state.isRunning);
2316
- const nodeResults = chunkLFWRE3A3_js.useWorkflowStore((state) => state.nodeResults);
2365
+ const isRunning = chunkJT2JCLN5_js.useWorkflowStore((state) => state.isRunning);
2366
+ const nodeResults = chunkJT2JCLN5_js.useWorkflowStore((state) => state.nodeResults);
2317
2367
  const refreshRuns = react.useCallback(async () => {
2318
2368
  setIsLoadingRuns(true);
2319
2369
  try {
@@ -2469,7 +2519,7 @@ var AutoSaveWorkspace = react.memo(function AutoSaveWorkspace2({
2469
2519
  onAutoSaveGraph(graph);
2470
2520
  }, [onAutoSaveGraph, onGraphSnapshot]);
2471
2521
  return /* @__PURE__ */ jsxRuntime.jsx(
2472
- chunkLFWRE3A3_js.Workspace,
2522
+ chunkJT2JCLN5_js.Workspace,
2473
2523
  {
2474
2524
  ...workspaceProps,
2475
2525
  onGraphChange: handleGraphChange
@@ -2842,14 +2892,14 @@ function DslImportModal({ open, onClose, onImport }) {
2842
2892
  }
2843
2893
 
2844
2894
  // src/astrlabe/store/selectors.ts
2845
- var useCanUndo = () => chunkLFWRE3A3_js.useWorkflowStore((state) => state.past.length > 0);
2846
- var useCanRedo = () => chunkLFWRE3A3_js.useWorkflowStore((state) => state.future.length > 0);
2847
- var useHasCopied = () => chunkLFWRE3A3_js.useWorkflowStore((state) => state.clipboard !== null);
2848
- var useContextMenu = () => chunkLFWRE3A3_js.useWorkflowStore((state) => state.contextMenu);
2849
- var useEditingNodeId = () => chunkLFWRE3A3_js.useWorkflowStore((state) => state.editingNodeId);
2850
- var useSelectedNodeCount = () => chunkLFWRE3A3_js.useWorkflowStore((state) => state.nodes.filter((node) => node.selected).length);
2851
- var useIsRunning = () => chunkLFWRE3A3_js.useWorkflowStore((state) => state.isRunning);
2852
- var useNodeResults = () => chunkLFWRE3A3_js.useWorkflowStore((state) => state.nodeResults);
2895
+ var useCanUndo = () => chunkJT2JCLN5_js.useWorkflowStore((state) => state.past.length > 0);
2896
+ var useCanRedo = () => chunkJT2JCLN5_js.useWorkflowStore((state) => state.future.length > 0);
2897
+ var useHasCopied = () => chunkJT2JCLN5_js.useWorkflowStore((state) => state.clipboard !== null);
2898
+ var useContextMenu = () => chunkJT2JCLN5_js.useWorkflowStore((state) => state.contextMenu);
2899
+ var useEditingNodeId = () => chunkJT2JCLN5_js.useWorkflowStore((state) => state.editingNodeId);
2900
+ var useSelectedNodeCount = () => chunkJT2JCLN5_js.useWorkflowStore((state) => state.nodes.filter((node) => node.selected).length);
2901
+ var useIsRunning = () => chunkJT2JCLN5_js.useWorkflowStore((state) => state.isRunning);
2902
+ var useNodeResults = () => chunkJT2JCLN5_js.useWorkflowStore((state) => state.nodeResults);
2853
2903
  var DEFAULT_MAX_HISTORY = 50;
2854
2904
  function useUndoRedo(nodes, edges, setNodes, setEdges, maxHistory = DEFAULT_MAX_HISTORY) {
2855
2905
  const pastRef = react.useRef([]);
@@ -3137,223 +3187,223 @@ Object.defineProperty(exports, "validateWorkflowGraph", {
3137
3187
  });
3138
3188
  Object.defineProperty(exports, "AgentFlowNode", {
3139
3189
  enumerable: true,
3140
- get: function () { return chunkLFWRE3A3_js.AgentFlowNode; }
3190
+ get: function () { return chunkJT2JCLN5_js.AgentFlowNode; }
3141
3191
  });
3142
3192
  Object.defineProperty(exports, "AgentToolFlowNode", {
3143
3193
  enumerable: true,
3144
- get: function () { return chunkLFWRE3A3_js.AgentToolFlowNode; }
3194
+ get: function () { return chunkJT2JCLN5_js.AgentToolFlowNode; }
3145
3195
  });
3146
3196
  Object.defineProperty(exports, "AnswerFlowNode", {
3147
3197
  enumerable: true,
3148
- get: function () { return chunkLFWRE3A3_js.AnswerFlowNode; }
3198
+ get: function () { return chunkJT2JCLN5_js.AnswerFlowNode; }
3149
3199
  });
3150
3200
  Object.defineProperty(exports, "AnthropicIcon", {
3151
3201
  enumerable: true,
3152
- get: function () { return chunkLFWRE3A3_js.AnthropicIcon; }
3202
+ get: function () { return chunkJT2JCLN5_js.AnthropicIcon; }
3153
3203
  });
3154
3204
  Object.defineProperty(exports, "CodeFlowNode", {
3155
3205
  enumerable: true,
3156
- get: function () { return chunkLFWRE3A3_js.CodeFlowNode; }
3206
+ get: function () { return chunkJT2JCLN5_js.CodeFlowNode; }
3157
3207
  });
3158
3208
  Object.defineProperty(exports, "CrewAIIcon", {
3159
3209
  enumerable: true,
3160
- get: function () { return chunkLFWRE3A3_js.CrewAIIcon; }
3210
+ get: function () { return chunkJT2JCLN5_js.CrewAIIcon; }
3161
3211
  });
3162
3212
  Object.defineProperty(exports, "DocumentExtractorFlowNode", {
3163
3213
  enumerable: true,
3164
- get: function () { return chunkLFWRE3A3_js.DocumentExtractorFlowNode; }
3214
+ get: function () { return chunkJT2JCLN5_js.DocumentExtractorFlowNode; }
3165
3215
  });
3166
3216
  Object.defineProperty(exports, "EndFlowNode", {
3167
3217
  enumerable: true,
3168
- get: function () { return chunkLFWRE3A3_js.EndFlowNode; }
3218
+ get: function () { return chunkJT2JCLN5_js.EndFlowNode; }
3169
3219
  });
3170
3220
  Object.defineProperty(exports, "EntityFlowNode", {
3171
3221
  enumerable: true,
3172
- get: function () { return chunkLFWRE3A3_js.EntityFlowNode; }
3222
+ get: function () { return chunkJT2JCLN5_js.EntityFlowNode; }
3173
3223
  });
3174
3224
  Object.defineProperty(exports, "FRAMEWORK_META", {
3175
3225
  enumerable: true,
3176
- get: function () { return chunkLFWRE3A3_js.FRAMEWORK_META; }
3226
+ get: function () { return chunkJT2JCLN5_js.FRAMEWORK_META; }
3177
3227
  });
3178
3228
  Object.defineProperty(exports, "GoogleADKIcon", {
3179
3229
  enumerable: true,
3180
- get: function () { return chunkLFWRE3A3_js.GoogleADKIcon; }
3230
+ get: function () { return chunkJT2JCLN5_js.GoogleADKIcon; }
3181
3231
  });
3182
3232
  Object.defineProperty(exports, "GroupFlowNode", {
3183
3233
  enumerable: true,
3184
- get: function () { return chunkLFWRE3A3_js.GroupFlowNode; }
3234
+ get: function () { return chunkJT2JCLN5_js.GroupFlowNode; }
3185
3235
  });
3186
3236
  Object.defineProperty(exports, "HttpRequestFlowNode", {
3187
3237
  enumerable: true,
3188
- get: function () { return chunkLFWRE3A3_js.HttpRequestFlowNode; }
3238
+ get: function () { return chunkJT2JCLN5_js.HttpRequestFlowNode; }
3189
3239
  });
3190
3240
  Object.defineProperty(exports, "IfElseFlowNode", {
3191
3241
  enumerable: true,
3192
- get: function () { return chunkLFWRE3A3_js.IfElseFlowNode; }
3242
+ get: function () { return chunkJT2JCLN5_js.IfElseFlowNode; }
3193
3243
  });
3194
3244
  Object.defineProperty(exports, "IterationFlowNode", {
3195
3245
  enumerable: true,
3196
- get: function () { return chunkLFWRE3A3_js.IterationFlowNode; }
3246
+ get: function () { return chunkJT2JCLN5_js.IterationFlowNode; }
3197
3247
  });
3198
3248
  Object.defineProperty(exports, "IterationStartFlowNode", {
3199
3249
  enumerable: true,
3200
- get: function () { return chunkLFWRE3A3_js.IterationStartFlowNode; }
3250
+ get: function () { return chunkJT2JCLN5_js.IterationStartFlowNode; }
3201
3251
  });
3202
3252
  Object.defineProperty(exports, "KnowledgeBaseFlowNode", {
3203
3253
  enumerable: true,
3204
- get: function () { return chunkLFWRE3A3_js.KnowledgeBaseFlowNode; }
3254
+ get: function () { return chunkJT2JCLN5_js.KnowledgeBaseFlowNode; }
3205
3255
  });
3206
3256
  Object.defineProperty(exports, "LOGIC_ICON_MAP", {
3207
3257
  enumerable: true,
3208
- get: function () { return chunkLFWRE3A3_js.LOGIC_ICON_MAP; }
3258
+ get: function () { return chunkJT2JCLN5_js.LOGIC_ICON_MAP; }
3209
3259
  });
3210
3260
  Object.defineProperty(exports, "LOGIC_NODE_BADGE_COLORS", {
3211
3261
  enumerable: true,
3212
- get: function () { return chunkLFWRE3A3_js.LOGIC_NODE_BADGE_COLORS; }
3262
+ get: function () { return chunkJT2JCLN5_js.LOGIC_NODE_BADGE_COLORS; }
3213
3263
  });
3214
3264
  Object.defineProperty(exports, "LOGIC_NODE_GRADIENTS", {
3215
3265
  enumerable: true,
3216
- get: function () { return chunkLFWRE3A3_js.LOGIC_NODE_GRADIENTS; }
3266
+ get: function () { return chunkJT2JCLN5_js.LOGIC_NODE_GRADIENTS; }
3217
3267
  });
3218
3268
  Object.defineProperty(exports, "LOGIC_NODE_HANDLE_COLORS", {
3219
3269
  enumerable: true,
3220
- get: function () { return chunkLFWRE3A3_js.LOGIC_NODE_HANDLE_COLORS; }
3270
+ get: function () { return chunkJT2JCLN5_js.LOGIC_NODE_HANDLE_COLORS; }
3221
3271
  });
3222
3272
  Object.defineProperty(exports, "LangChainIcon", {
3223
3273
  enumerable: true,
3224
- get: function () { return chunkLFWRE3A3_js.LangChainIcon; }
3274
+ get: function () { return chunkJT2JCLN5_js.LangChainIcon; }
3225
3275
  });
3226
3276
  Object.defineProperty(exports, "ListOperatorFlowNode", {
3227
3277
  enumerable: true,
3228
- get: function () { return chunkLFWRE3A3_js.ListOperatorFlowNode; }
3278
+ get: function () { return chunkJT2JCLN5_js.ListOperatorFlowNode; }
3229
3279
  });
3230
3280
  Object.defineProperty(exports, "LogicNodeModal", {
3231
3281
  enumerable: true,
3232
- get: function () { return chunkLFWRE3A3_js.LogicNodeModal; }
3282
+ get: function () { return chunkJT2JCLN5_js.LogicNodeModal; }
3233
3283
  });
3234
3284
  Object.defineProperty(exports, "MINIMAP_NODE_COLORS", {
3235
3285
  enumerable: true,
3236
- get: function () { return chunkLFWRE3A3_js.MINIMAP_NODE_COLORS; }
3286
+ get: function () { return chunkJT2JCLN5_js.MINIMAP_NODE_COLORS; }
3237
3287
  });
3238
3288
  Object.defineProperty(exports, "NodeCard", {
3239
3289
  enumerable: true,
3240
- get: function () { return chunkLFWRE3A3_js.NodeCard; }
3290
+ get: function () { return chunkJT2JCLN5_js.NodeCard; }
3241
3291
  });
3242
3292
  Object.defineProperty(exports, "NodeContextMenu", {
3243
3293
  enumerable: true,
3244
- get: function () { return chunkLFWRE3A3_js.NodeContextMenu; }
3294
+ get: function () { return chunkJT2JCLN5_js.NodeContextMenu; }
3245
3295
  });
3246
3296
  Object.defineProperty(exports, "NoteFlowNode", {
3247
3297
  enumerable: true,
3248
- get: function () { return chunkLFWRE3A3_js.NoteFlowNode; }
3298
+ get: function () { return chunkJT2JCLN5_js.NoteFlowNode; }
3249
3299
  });
3250
3300
  Object.defineProperty(exports, "OpenAIIcon", {
3251
3301
  enumerable: true,
3252
- get: function () { return chunkLFWRE3A3_js.OpenAIIcon; }
3302
+ get: function () { return chunkJT2JCLN5_js.OpenAIIcon; }
3253
3303
  });
3254
3304
  Object.defineProperty(exports, "PanelContextMenu", {
3255
3305
  enumerable: true,
3256
- get: function () { return chunkLFWRE3A3_js.PanelContextMenu; }
3306
+ get: function () { return chunkJT2JCLN5_js.PanelContextMenu; }
3257
3307
  });
3258
3308
  Object.defineProperty(exports, "ParameterExtractorFlowNode", {
3259
3309
  enumerable: true,
3260
- get: function () { return chunkLFWRE3A3_js.ParameterExtractorFlowNode; }
3310
+ get: function () { return chunkJT2JCLN5_js.ParameterExtractorFlowNode; }
3261
3311
  });
3262
3312
  Object.defineProperty(exports, "QuestionClassifierFlowNode", {
3263
3313
  enumerable: true,
3264
- get: function () { return chunkLFWRE3A3_js.QuestionClassifierFlowNode; }
3314
+ get: function () { return chunkJT2JCLN5_js.QuestionClassifierFlowNode; }
3265
3315
  });
3266
3316
  Object.defineProperty(exports, "RuleFlowNode", {
3267
3317
  enumerable: true,
3268
- get: function () { return chunkLFWRE3A3_js.RuleFlowNode; }
3318
+ get: function () { return chunkJT2JCLN5_js.RuleFlowNode; }
3269
3319
  });
3270
3320
  Object.defineProperty(exports, "SelectionContextMenu", {
3271
3321
  enumerable: true,
3272
- get: function () { return chunkLFWRE3A3_js.SelectionContextMenu; }
3322
+ get: function () { return chunkJT2JCLN5_js.SelectionContextMenu; }
3273
3323
  });
3274
3324
  Object.defineProperty(exports, "StartFlowNode", {
3275
3325
  enumerable: true,
3276
- get: function () { return chunkLFWRE3A3_js.StartFlowNode; }
3326
+ get: function () { return chunkJT2JCLN5_js.StartFlowNode; }
3277
3327
  });
3278
3328
  Object.defineProperty(exports, "StrandsIcon", {
3279
3329
  enumerable: true,
3280
- get: function () { return chunkLFWRE3A3_js.StrandsIcon; }
3330
+ get: function () { return chunkJT2JCLN5_js.StrandsIcon; }
3281
3331
  });
3282
3332
  Object.defineProperty(exports, "TemplateTransformFlowNode", {
3283
3333
  enumerable: true,
3284
- get: function () { return chunkLFWRE3A3_js.TemplateTransformFlowNode; }
3334
+ get: function () { return chunkJT2JCLN5_js.TemplateTransformFlowNode; }
3285
3335
  });
3286
3336
  Object.defineProperty(exports, "ToolFlowNode", {
3287
3337
  enumerable: true,
3288
- get: function () { return chunkLFWRE3A3_js.ToolFlowNode; }
3338
+ get: function () { return chunkJT2JCLN5_js.ToolFlowNode; }
3289
3339
  });
3290
3340
  Object.defineProperty(exports, "VariableAggregatorFlowNode", {
3291
3341
  enumerable: true,
3292
- get: function () { return chunkLFWRE3A3_js.VariableAggregatorFlowNode; }
3342
+ get: function () { return chunkJT2JCLN5_js.VariableAggregatorFlowNode; }
3293
3343
  });
3294
3344
  Object.defineProperty(exports, "VariableAssignerFlowNode", {
3295
3345
  enumerable: true,
3296
- get: function () { return chunkLFWRE3A3_js.VariableAssignerFlowNode; }
3346
+ get: function () { return chunkJT2JCLN5_js.VariableAssignerFlowNode; }
3297
3347
  });
3298
3348
  Object.defineProperty(exports, "WorkflowBuilderProvider", {
3299
3349
  enumerable: true,
3300
- get: function () { return chunkLFWRE3A3_js.WorkflowBuilderProvider; }
3350
+ get: function () { return chunkJT2JCLN5_js.WorkflowBuilderProvider; }
3301
3351
  });
3302
3352
  Object.defineProperty(exports, "Workspace", {
3303
3353
  enumerable: true,
3304
- get: function () { return chunkLFWRE3A3_js.Workspace; }
3354
+ get: function () { return chunkJT2JCLN5_js.Workspace; }
3305
3355
  });
3306
3356
  Object.defineProperty(exports, "getCompatibleModels", {
3307
3357
  enumerable: true,
3308
- get: function () { return chunkLFWRE3A3_js.getCompatibleModels; }
3358
+ get: function () { return chunkJT2JCLN5_js.getCompatibleModels; }
3309
3359
  });
3310
3360
  Object.defineProperty(exports, "getDefaultFrameworkForModel", {
3311
3361
  enumerable: true,
3312
- get: function () { return chunkLFWRE3A3_js.getDefaultFrameworkForModel; }
3362
+ get: function () { return chunkJT2JCLN5_js.getDefaultFrameworkForModel; }
3313
3363
  });
3314
3364
  Object.defineProperty(exports, "getEntityBadgeColor", {
3315
3365
  enumerable: true,
3316
- get: function () { return chunkLFWRE3A3_js.getEntityBadgeColor; }
3366
+ get: function () { return chunkJT2JCLN5_js.getEntityBadgeColor; }
3317
3367
  });
3318
3368
  Object.defineProperty(exports, "getEntityGradient", {
3319
3369
  enumerable: true,
3320
- get: function () { return chunkLFWRE3A3_js.getEntityGradient; }
3370
+ get: function () { return chunkJT2JCLN5_js.getEntityGradient; }
3321
3371
  });
3322
3372
  Object.defineProperty(exports, "getEntityHandleColor", {
3323
3373
  enumerable: true,
3324
- get: function () { return chunkLFWRE3A3_js.getEntityHandleColor; }
3374
+ get: function () { return chunkJT2JCLN5_js.getEntityHandleColor; }
3325
3375
  });
3326
3376
  Object.defineProperty(exports, "getEntityIcon", {
3327
3377
  enumerable: true,
3328
- get: function () { return chunkLFWRE3A3_js.getEntityIcon; }
3378
+ get: function () { return chunkJT2JCLN5_js.getEntityIcon; }
3329
3379
  });
3330
3380
  Object.defineProperty(exports, "getEntityMinimapColor", {
3331
3381
  enumerable: true,
3332
- get: function () { return chunkLFWRE3A3_js.getEntityMinimapColor; }
3382
+ get: function () { return chunkJT2JCLN5_js.getEntityMinimapColor; }
3333
3383
  });
3334
3384
  Object.defineProperty(exports, "getFrameworkMeta", {
3335
3385
  enumerable: true,
3336
- get: function () { return chunkLFWRE3A3_js.getFrameworkMeta; }
3386
+ get: function () { return chunkJT2JCLN5_js.getFrameworkMeta; }
3337
3387
  });
3338
3388
  Object.defineProperty(exports, "isModelCompatibleWithFramework", {
3339
3389
  enumerable: true,
3340
- get: function () { return chunkLFWRE3A3_js.isModelCompatibleWithFramework; }
3390
+ get: function () { return chunkJT2JCLN5_js.isModelCompatibleWithFramework; }
3341
3391
  });
3342
3392
  Object.defineProperty(exports, "useModalStore", {
3343
3393
  enumerable: true,
3344
- get: function () { return chunkLFWRE3A3_js.useModalStore; }
3394
+ get: function () { return chunkJT2JCLN5_js.useModalStore; }
3345
3395
  });
3346
3396
  Object.defineProperty(exports, "useWorkflowBuilderClient", {
3347
3397
  enumerable: true,
3348
- get: function () { return chunkLFWRE3A3_js.useWorkflowBuilderClient; }
3398
+ get: function () { return chunkJT2JCLN5_js.useWorkflowBuilderClient; }
3349
3399
  });
3350
3400
  Object.defineProperty(exports, "useWorkflowBuilderClientOptional", {
3351
3401
  enumerable: true,
3352
- get: function () { return chunkLFWRE3A3_js.useWorkflowBuilderClientOptional; }
3402
+ get: function () { return chunkJT2JCLN5_js.useWorkflowBuilderClientOptional; }
3353
3403
  });
3354
3404
  Object.defineProperty(exports, "useWorkflowStore", {
3355
3405
  enumerable: true,
3356
- get: function () { return chunkLFWRE3A3_js.useWorkflowStore; }
3406
+ get: function () { return chunkJT2JCLN5_js.useWorkflowStore; }
3357
3407
  });
3358
3408
  Object.defineProperty(exports, "GraphNodeBadge", {
3359
3409
  enumerable: true,