@datatechsolutions/ui 2.11.14 → 2.11.16

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 chunkJT2JCLN5_js = require('../chunk-JT2JCLN5.js');
6
+ var chunk2JK7GQYA_js = require('../chunk-2JK7GQYA.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 = chunkJT2JCLN5_js.getFrameworkMeta(selectedFramework);
86
+ const frameworkMeta = chunk2JK7GQYA_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(chunkJT2JCLN5_js.FRAMEWORK_META);
379
- const compatibleModels = chunkJT2JCLN5_js.getCompatibleModels(models, selectedFramework);
378
+ const frameworkKeys = Object.keys(chunk2JK7GQYA_js.FRAMEWORK_META);
379
+ const compatibleModels = chunk2JK7GQYA_js.getCompatibleModels(models, selectedFramework);
380
380
  const handleFrameworkChange = react.useCallback((newFramework) => {
381
381
  setSelectedFramework(newFramework);
382
- if (!chunkJT2JCLN5_js.isModelCompatibleWithFramework(selectedModelId, newFramework)) {
383
- const compatible = chunkJT2JCLN5_js.getCompatibleModels(models, newFramework);
382
+ if (!chunk2JK7GQYA_js.isModelCompatibleWithFramework(selectedModelId, newFramework)) {
383
+ const compatible = chunk2JK7GQYA_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 = chunkJT2JCLN5_js.FRAMEWORK_META[key];
394
+ const meta = chunk2JK7GQYA_js.FRAMEWORK_META[key];
395
395
  const isSelected = key === selectedFramework;
396
- const compatCount = chunkJT2JCLN5_js.getCompatibleModels(models, key).length;
396
+ const compatCount = chunk2JK7GQYA_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 = chunkJT2JCLN5_js.isModelCompatibleWithFramework(model.id, selectedFramework);
426
+ const isCompatible = chunk2JK7GQYA_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 = chunkJT2JCLN5_js.useWorkflowStore((state) => state.nodeResults);
523
+ const nodeResults = chunk2JK7GQYA_js.useWorkflowStore((state) => state.nodeResults);
524
524
  const agentResult = react.useMemo(() => {
525
525
  return nodeResults[agentId] ?? null;
526
526
  }, [nodeResults, agentId]);
@@ -547,28 +547,100 @@ function ResultsTab({ agentId, t }) {
547
547
  ] })
548
548
  ] });
549
549
  }
550
- function ToolsTab({ agentTools, enabledToolIds, onToggle, t }) {
550
+ var SI = (slug, color) => `https://cdn.simpleicons.org/${slug}/${color}`;
551
+ var PROVIDER_LOGOS = {
552
+ anthropic: SI("anthropic", "D4A27F"),
553
+ amazon: "https://www.svgrepo.com/show/448266/aws.svg",
554
+ google: SI("googlegemini", "8E75B2"),
555
+ openai: "https://www.svgrepo.com/show/306500/openai.svg",
556
+ meta: SI("meta", "0668E1"),
557
+ aws_bedrock: "https://www.svgrepo.com/show/448266/aws.svg",
558
+ openai_api: "https://www.svgrepo.com/show/306500/openai.svg",
559
+ google_vertex: SI("googlegemini", "8E75B2"),
560
+ azure_openai: SI("microsoftazure", "0078D4"),
561
+ anthropic_api: SI("anthropic", "D4A27F")
562
+ };
563
+ function ModelsTab({ modelProviders, selectedProviderId, onSelectProvider, t }) {
564
+ if (modelProviders.length === 0) {
565
+ return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-col items-center justify-center px-4 py-12 text-center", children: [
566
+ /* @__PURE__ */ jsxRuntime.jsx(outline.KeyIcon, { className: "mb-2 h-8 w-8 text-gray-400 dark:text-gray-500" }),
567
+ /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-sm text-gray-500 dark:text-gray-400", children: t("agentDrawer.noProvidersAvailable") }),
568
+ /* @__PURE__ */ jsxRuntime.jsx("p", { className: "mt-1 text-xs text-gray-400 dark:text-gray-500", children: t("agentDrawer.dragProviderHint") })
569
+ ] });
570
+ }
571
+ return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "space-y-2 p-4", children: [
572
+ /* @__PURE__ */ jsxRuntime.jsx("p", { className: "mb-3 text-xs text-gray-500 dark:text-gray-400", children: t("agentDrawer.modelsDescription") }),
573
+ modelProviders.map((provider) => {
574
+ const isSelected = selectedProviderId === provider.id;
575
+ const logo = PROVIDER_LOGOS[provider.provider];
576
+ return /* @__PURE__ */ jsxRuntime.jsxs(
577
+ "button",
578
+ {
579
+ type: "button",
580
+ onClick: () => onSelectProvider(provider.id),
581
+ className: `flex w-full items-center gap-3 rounded-xl border px-4 py-3 text-left transition-all ${isSelected ? "border-rose-500/30 bg-rose-50/50 ring-1 ring-rose-500/20 dark:border-rose-400/20 dark:bg-rose-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"}`,
582
+ children: [
583
+ logo ? /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex h-10 w-10 shrink-0 items-center justify-center rounded-xl bg-white/10 p-1.5", children: /* @__PURE__ */ jsxRuntime.jsx("img", { src: logo, alt: "", className: "h-6 w-6 object-contain", loading: "lazy" }) }) : /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex h-10 w-10 shrink-0 items-center justify-center rounded-xl bg-gradient-to-br from-rose-500 to-pink-600", children: /* @__PURE__ */ jsxRuntime.jsx(outline.KeyIcon, { className: "h-5 w-5 text-white" }) }),
584
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "min-w-0 flex-1", children: [
585
+ /* @__PURE__ */ jsxRuntime.jsx("p", { className: `text-sm font-medium ${isSelected ? "text-gray-900 dark:text-white" : "text-gray-600 dark:text-gray-400"}`, children: provider.name }),
586
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "mt-0.5 flex items-center gap-2 text-[10px] text-gray-400 dark:text-gray-500", children: [
587
+ /* @__PURE__ */ jsxRuntime.jsxs("span", { children: [
588
+ provider.modelCount,
589
+ " models"
590
+ ] }),
591
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: `rounded-full px-1.5 py-0.5 text-[9px] font-medium ${provider.configured ? "bg-green-100 text-green-600 dark:bg-green-500/10 dark:text-green-400" : "bg-amber-100 text-amber-600 dark:bg-amber-500/10 dark:text-amber-400"}`, children: provider.configured ? t("agentDrawer.providerConfigured") : t("agentDrawer.providerSetup") })
592
+ ] })
593
+ ] }),
594
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: `flex h-5 w-5 shrink-0 items-center justify-center rounded-full transition-all ${isSelected ? "bg-rose-500 text-white" : "border border-gray-300 dark:border-gray-600"}`, children: isSelected && /* @__PURE__ */ jsxRuntime.jsx(outline.CheckIcon, { className: "h-3 w-3" }) })
595
+ ]
596
+ },
597
+ provider.id
598
+ );
599
+ })
600
+ ] });
601
+ }
602
+ function ToolsTab({ agentTools, enabledToolIds, onToggle, agentFramework, t }) {
551
603
  if (agentTools.length === 0) {
552
604
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-col items-center justify-center px-4 py-12 text-center", children: [
553
605
  /* @__PURE__ */ jsxRuntime.jsx(outline.CommandLineIcon, { className: "mb-2 h-8 w-8 text-gray-400 dark:text-gray-500" }),
554
606
  /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-sm text-gray-500 dark:text-gray-400", children: t("agentDrawer.noToolsAvailable") })
555
607
  ] });
556
608
  }
609
+ const sortedTools = [...agentTools].sort((a, b) => {
610
+ const aCompat = !a.compatibleFrameworks || a.compatibleFrameworks.length === 0 || a.compatibleFrameworks.includes(agentFramework);
611
+ const bCompat = !b.compatibleFrameworks || b.compatibleFrameworks.length === 0 || b.compatibleFrameworks.includes(agentFramework);
612
+ if (aCompat && !bCompat) return -1;
613
+ if (!aCompat && bCompat) return 1;
614
+ return 0;
615
+ });
557
616
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "space-y-2 p-4", children: [
558
617
  /* @__PURE__ */ jsxRuntime.jsx("p", { className: "mb-3 text-xs text-gray-500 dark:text-gray-400", children: t("agentDrawer.toolsDescription") }),
559
- agentTools.map((tool) => {
618
+ sortedTools.map((tool) => {
560
619
  const isEnabled = enabledToolIds.has(tool.agentToolId);
620
+ const isCompatible = !tool.compatibleFrameworks || tool.compatibleFrameworks.length === 0 || tool.compatibleFrameworks.includes(agentFramework);
561
621
  return /* @__PURE__ */ jsxRuntime.jsxs(
562
622
  "button",
563
623
  {
564
624
  type: "button",
565
625
  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"}`,
626
+ className: `flex w-full items-center gap-3 rounded-xl border px-4 py-3 text-left transition-all ${!isCompatible ? "border-gray-200/30 opacity-40 dark:border-white/5" : 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"}`,
627
+ disabled: !isCompatible,
567
628
  children: [
568
629
  /* @__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
630
  /* @__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 })
631
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-1.5", children: [
632
+ /* @__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 }),
633
+ !isCompatible && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "rounded-full bg-gray-100 px-1.5 py-0.5 text-[8px] font-medium text-gray-500 dark:bg-white/10 dark:text-gray-400", children: "incompatible" })
634
+ ] }),
635
+ tool.description && /* @__PURE__ */ jsxRuntime.jsx("p", { className: "truncate text-[10px] text-gray-400 dark:text-gray-500", children: tool.description }),
636
+ tool.compatibleFrameworks && tool.compatibleFrameworks.length > 0 && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "mt-1 flex flex-wrap gap-0.5", children: tool.compatibleFrameworks.map((framework) => {
637
+ const meta = chunk2JK7GQYA_js.getFrameworkMeta(framework);
638
+ const isCurrentFw = framework === agentFramework;
639
+ 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: [
640
+ /* @__PURE__ */ jsxRuntime.jsx(meta.IconComponent, { className: "h-2.5 w-2.5" }),
641
+ meta.label
642
+ ] }, framework);
643
+ }) })
572
644
  ] }),
573
645
  /* @__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
646
  ]
@@ -580,9 +652,9 @@ function ToolsTab({ agentTools, enabledToolIds, onToggle, t }) {
580
652
  }
581
653
  function AgentModal({ onSaved }) {
582
654
  const t = chunkYXN2K77G_js.useTranslations("agents.workflow");
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);
655
+ const activeModal = chunk2JK7GQYA_js.useModalStore((s) => s.activeModal);
656
+ const agentData = chunk2JK7GQYA_js.useModalStore((s) => s.agentData);
657
+ const closeModal = chunk2JK7GQYA_js.useModalStore((s) => s.closeModal);
586
658
  const open = activeModal === "agent";
587
659
  const agent = agentData?.agent ?? null;
588
660
  const models = agentData?.models ?? [];
@@ -595,6 +667,8 @@ function AgentModal({ onSaved }) {
595
667
  const [elo, setElo] = react.useState(1e3);
596
668
  const [saved, setSaved] = react.useState(true);
597
669
  const [enabledToolIds, setEnabledToolIds] = react.useState(/* @__PURE__ */ new Set());
670
+ const [selectedProviderId, setSelectedProviderId] = react.useState("");
671
+ const availableModelProviders = agentData?.modelProviders ?? [];
598
672
  const agentId = agent?.agentId ?? agent?.id ?? "";
599
673
  react.useEffect(() => {
600
674
  if (!agent) return;
@@ -606,6 +680,7 @@ function AgentModal({ onSaved }) {
606
680
  setActiveTab("config");
607
681
  const agentToolIds = agent.agentToolIds;
608
682
  setEnabledToolIds(new Set(agentToolIds ?? availableAgentTools.filter((t2) => t2.enabled).map((t2) => t2.agentToolId)));
683
+ setSelectedProviderId(agent.modelProviderId ?? "");
609
684
  }, [agentId]);
610
685
  const dirty = !saved;
611
686
  const markDirty = react.useCallback(() => setSaved(false), []);
@@ -613,6 +688,10 @@ function AgentModal({ onSaved }) {
613
688
  const handleClose = react.useCallback(() => {
614
689
  closeModal();
615
690
  }, [closeModal]);
691
+ const handleSelectProvider = react.useCallback((providerId) => {
692
+ setSelectedProviderId(providerId);
693
+ markDirty();
694
+ }, [markDirty]);
616
695
  const handleToggleTool = react.useCallback((toolId) => {
617
696
  setEnabledToolIds((previous) => {
618
697
  const next = new Set(previous);
@@ -627,7 +706,7 @@ function AgentModal({ onSaved }) {
627
706
  onSaved?.();
628
707
  }, [markSaved, onSaved]);
629
708
  if (!agent) return null;
630
- const tabList = ["config", "tools", "results"];
709
+ const tabList = ["config", "tools", "models", "results"];
631
710
  const tabs = /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex border-b border-white/20 dark:border-white/10", children: tabList.map((tab) => /* @__PURE__ */ jsxRuntime.jsxs(
632
711
  "button",
633
712
  {
@@ -635,8 +714,9 @@ function AgentModal({ onSaved }) {
635
714
  onClick: () => setActiveTab(tab),
636
715
  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"}`,
637
716
  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 })
717
+ t(tab === "config" ? "agentDrawer.configTab" : tab === "tools" ? "agentDrawer.toolsTab" : tab === "models" ? "agentDrawer.modelsTab" : "agentDrawer.resultsTab"),
718
+ 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 }),
719
+ tab === "models" && selectedProviderId && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "ml-1 inline-flex h-4 min-w-4 items-center justify-center rounded-full bg-rose-500/20 px-1 text-[9px] font-bold text-rose-600 dark:text-rose-400", children: "1" })
640
720
  ]
641
721
  },
642
722
  tab
@@ -682,7 +762,8 @@ function AgentModal({ onSaved }) {
682
762
  children: [
683
763
  /* @__PURE__ */ jsxRuntime.jsx(AgentProfileHeader, { agent, models, t, selectedModelId, setSelectedModelId, selectedFramework, temperature, setTemperature, elo, setElo, onChanged: markDirty }),
684
764
  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 }),
765
+ activeTab === "tools" && /* @__PURE__ */ jsxRuntime.jsx(ToolsTab, { agentTools: availableAgentTools, enabledToolIds, onToggle: handleToggleTool, agentFramework: selectedFramework, t }),
766
+ activeTab === "models" && /* @__PURE__ */ jsxRuntime.jsx(ModelsTab, { modelProviders: availableModelProviders, selectedProviderId, onSelectProvider: handleSelectProvider, t }),
686
767
  activeTab === "results" && /* @__PURE__ */ jsxRuntime.jsx(ResultsTab, { agentId: agent.agentId, t })
687
768
  ]
688
769
  }
@@ -793,7 +874,7 @@ function SubworkflowModal({ onSaved, onMaximize }) {
793
874
  const markDirty = useSubworkflowStore((s) => s.markDirty);
794
875
  const markSaved = useSubworkflowStore((s) => s.markSaved);
795
876
  const closeModal = useSubworkflowStore((s) => s.closeModal);
796
- const agentBehind = chunkJT2JCLN5_js.useModalStore((s) => s.activeModal === "agent" ? s.agentData?.agent?.name : null);
877
+ const agentBehind = chunk2JK7GQYA_js.useModalStore((s) => s.activeModal === "agent" ? s.agentData?.agent?.name : null);
797
878
  const isCreateMode = !tool?.toolId;
798
879
  const initialGraph = react.useMemo(() => {
799
880
  const config = tool?.config;
@@ -822,9 +903,9 @@ function SubworkflowModal({ onSaved, onMaximize }) {
822
903
  }, [tool, onSaved, name, category, description, timeoutMs, latestGraphRef, markSaved]);
823
904
  if (!tool) return null;
824
905
  const categoryKey = category ?? "external";
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;
906
+ const gradient = tool.color ?? chunk2JK7GQYA_js.CATEGORY_COLORS[categoryKey] ?? chunk2JK7GQYA_js.CATEGORY_COLORS.external;
907
+ const categoryPill = chunk2JK7GQYA_js.CATEGORY_PILL_COLORS[categoryKey] ?? chunk2JK7GQYA_js.CATEGORY_PILL_COLORS.external;
908
+ const IconComponent = chunk2JK7GQYA_js.ICON_MAP[tool.icon ?? ""] ?? outline.ArrowPathRoundedSquareIcon;
828
909
  const graph = latestGraphRef.current;
829
910
  const startNode = graph.nodes.find((n) => n.type === "start");
830
911
  const endNode = graph.nodes.find((n) => n.type === "end");
@@ -889,7 +970,7 @@ function SubworkflowModal({ onSaved, onMaximize }) {
889
970
  {
890
971
  type: "button",
891
972
  onClick: () => setCategory(cat),
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"}`,
973
+ className: `rounded-full px-2 py-1 text-[9px] font-semibold transition-all ${cat === category ? `${chunk2JK7GQYA_js.CATEGORY_PILL_COLORS[cat] ?? chunk2JK7GQYA_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"}`,
893
974
  children: cat
894
975
  },
895
976
  cat
@@ -976,7 +1057,7 @@ function SubworkflowModal({ onSaved, onMaximize }) {
976
1057
  /* @__PURE__ */ jsxRuntime.jsx("div", { className: "mt-auto" })
977
1058
  ] }),
978
1059
  /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex-1", children: /* @__PURE__ */ jsxRuntime.jsx(
979
- chunkJT2JCLN5_js.WorkflowCanvas,
1060
+ chunk2JK7GQYA_js.WorkflowCanvas,
980
1061
  {
981
1062
  initialGraph,
982
1063
  agents: [],
@@ -1034,9 +1115,9 @@ function WorkspaceModal({
1034
1115
  }
1035
1116
  function PipelineSettingsModal({ onSave }) {
1036
1117
  const t = chunkYXN2K77G_js.useTranslations("agents.workflow");
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);
1118
+ const activeModal = chunk2JK7GQYA_js.useModalStore((s) => s.activeModal);
1119
+ const data = chunk2JK7GQYA_js.useModalStore((s) => s.pipelineSettingsData);
1120
+ const closeModal = chunk2JK7GQYA_js.useModalStore((s) => s.closeModal);
1040
1121
  const open = activeModal === "pipeline-settings";
1041
1122
  const [nameValue, setNameValue] = react.useState("");
1042
1123
  const [descriptionValue, setDescriptionValue] = react.useState("");
@@ -1123,7 +1204,7 @@ function PipelineSettingsModal({ onSave }) {
1123
1204
  }
1124
1205
  );
1125
1206
  }
1126
- var SI = (slug, color) => `https://cdn.simpleicons.org/${slug}/${color}`;
1207
+ var SI2 = (slug, color) => `https://cdn.simpleicons.org/${slug}/${color}`;
1127
1208
  var DATASOURCE_LOGOS = {
1128
1209
  bigquery: "https://www.svgrepo.com/show/375546/bigquery.svg",
1129
1210
  postgres: "https://www.svgrepo.com/show/354200/postgresql.svg",
@@ -1131,9 +1212,9 @@ var DATASOURCE_LOGOS = {
1131
1212
  mongodb: "https://www.svgrepo.com/show/373845/mongo.svg",
1132
1213
  redis: "https://www.svgrepo.com/show/354272/redis.svg",
1133
1214
  mysql: "https://www.svgrepo.com/show/373848/mysql.svg",
1134
- clickhouse: SI("clickhouse", "FFCC01"),
1215
+ clickhouse: SI2("clickhouse", "FFCC01"),
1135
1216
  elasticsearch: "https://www.svgrepo.com/show/353735/elasticsearch.svg",
1136
- duckdb: SI("duckdb", "FFF000")
1217
+ duckdb: SI2("duckdb", "FFF000")
1137
1218
  };
1138
1219
  function getDatasourceLogo(entityId) {
1139
1220
  const lower = entityId.toLowerCase();
@@ -1142,12 +1223,12 @@ function getDatasourceLogo(entityId) {
1142
1223
  }
1143
1224
  return null;
1144
1225
  }
1145
- var PROVIDER_LOGOS = {
1146
- anthropic: SI("anthropic", "D4A27F"),
1226
+ var PROVIDER_LOGOS2 = {
1227
+ anthropic: SI2("anthropic", "D4A27F"),
1147
1228
  amazon: "https://www.svgrepo.com/show/448266/aws.svg",
1148
- google: SI("googlegemini", "8E75B2"),
1229
+ google: SI2("googlegemini", "8E75B2"),
1149
1230
  openai: "https://www.svgrepo.com/show/306500/openai.svg",
1150
- meta: SI("meta", "0668E1")
1231
+ meta: SI2("meta", "0668E1")
1151
1232
  };
1152
1233
  function onDragStart(event, nodeType, entityId, label, config) {
1153
1234
  event.dataTransfer.setData("nodeType", nodeType);
@@ -1245,8 +1326,8 @@ function CollapsibleSection({ title, icon, colorClass, defaultOpen = true, count
1245
1326
  ] });
1246
1327
  }
1247
1328
  function LogicNodeItemCard({ item, translationFunction }) {
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";
1329
+ const IconComponent = chunk2JK7GQYA_js.LOGIC_ICON_MAP[item.nodeType];
1330
+ const gradient = chunk2JK7GQYA_js.LOGIC_NODE_GRADIENTS[item.nodeType] ?? "from-gray-400 to-gray-500";
1250
1331
  const defaultConfig = chunkPWBWP5FJ_js.createDefaultLogicNodeConfig(item.nodeType);
1251
1332
  const configJson = defaultConfig ? JSON.stringify(defaultConfig) : void 0;
1252
1333
  return /* @__PURE__ */ jsxRuntime.jsxs(
@@ -1363,55 +1444,32 @@ function NodePalette({ agents, tools, agentTools = [], rules, entities = [], mod
1363
1444
  colorClass: "text-indigo-600 dark:text-indigo-400",
1364
1445
  onAdd: onCreateAgent,
1365
1446
  addLabel: t("newAgent"),
1366
- count: filteredAgents.length + filteredAgentTools.length,
1367
- children: filteredAgents.length === 0 && filteredAgentTools.length === 0 ? /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-[10px] text-gray-400 dark:text-gray-500", children: t("noAgents") }) : /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
1368
- filteredAgents.map((agent) => /* @__PURE__ */ jsxRuntime.jsxs(
1369
- "div",
1370
- {
1371
- draggable: true,
1372
- onDragStart: (event) => onDragStart(event, "agent", agent.agentId, agent.name),
1373
- className: "liquid-surface group flex items-center gap-2 rounded-lg px-3 py-2 transition-all cursor-grab hover:shadow-md active:cursor-grabbing",
1374
- children: [
1375
- /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "relative flex-shrink-0", children: [
1376
- agent.avatar ? /* @__PURE__ */ jsxRuntime.jsx("img", { src: agent.avatar, alt: agent.name, className: "h-7 w-7 rounded-full bg-white shadow-sm ring-1 ring-gray-200/50 dark:bg-gray-800 dark:ring-white/10" }) : /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex h-7 w-7 items-center justify-center rounded-full bg-gradient-to-br from-indigo-400 to-purple-500 shadow-sm", children: /* @__PURE__ */ jsxRuntime.jsx(outline.CpuChipIcon, { className: "h-3.5 w-3.5 text-white" }) }),
1377
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: "absolute -bottom-0.5 -right-0.5 flex h-3.5 w-3.5 items-center justify-center rounded-full bg-indigo-500 ring-1.5 ring-white dark:ring-gray-900", children: /* @__PURE__ */ jsxRuntime.jsx(outline.CpuChipIcon, { className: "h-2 w-2 text-white" }) })
1447
+ count: filteredAgents.length,
1448
+ children: filteredAgents.length === 0 && filteredAgentTools.length === 0 ? /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-[10px] text-gray-400 dark:text-gray-500", children: t("noAgents") }) : /* @__PURE__ */ jsxRuntime.jsx(jsxRuntime.Fragment, { children: filteredAgents.map((agent) => /* @__PURE__ */ jsxRuntime.jsxs(
1449
+ "div",
1450
+ {
1451
+ draggable: true,
1452
+ onDragStart: (event) => onDragStart(event, "agent", agent.agentId, agent.name),
1453
+ className: "liquid-surface group flex items-center gap-2 rounded-lg px-3 py-2 transition-all cursor-grab hover:shadow-md active:cursor-grabbing",
1454
+ children: [
1455
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "relative flex-shrink-0", children: [
1456
+ agent.avatar ? /* @__PURE__ */ jsxRuntime.jsx("img", { src: agent.avatar, alt: agent.name, className: "h-7 w-7 rounded-full bg-white shadow-sm ring-1 ring-gray-200/50 dark:bg-gray-800 dark:ring-white/10" }) : /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex h-7 w-7 items-center justify-center rounded-full bg-gradient-to-br from-indigo-400 to-purple-500 shadow-sm", children: /* @__PURE__ */ jsxRuntime.jsx(outline.CpuChipIcon, { className: "h-3.5 w-3.5 text-white" }) }),
1457
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "absolute -bottom-0.5 -right-0.5 flex h-3.5 w-3.5 items-center justify-center rounded-full bg-indigo-500 ring-1.5 ring-white dark:ring-gray-900", children: /* @__PURE__ */ jsxRuntime.jsx(outline.CpuChipIcon, { className: "h-2 w-2 text-white" }) })
1458
+ ] }),
1459
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "min-w-0 flex-1", children: [
1460
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-1.5", children: [
1461
+ /* @__PURE__ */ jsxRuntime.jsx("p", { className: "truncate text-xs font-medium text-gray-900 dark:text-white", children: agent.name }),
1462
+ (() => {
1463
+ const tier = chunkPWBWP5FJ_js.getAgentTier(Number(agent.elo ?? 0));
1464
+ return /* @__PURE__ */ jsxRuntime.jsx("span", { className: `shrink-0 rounded-full px-1.5 py-px text-[8px] font-bold ${tier.pillColor}`, children: t(`agentDrawer.tier${tier.key.charAt(0).toUpperCase()}${tier.key.slice(1)}`) });
1465
+ })()
1378
1466
  ] }),
1379
- /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "min-w-0 flex-1", children: [
1380
- /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-1.5", children: [
1381
- /* @__PURE__ */ jsxRuntime.jsx("p", { className: "truncate text-xs font-medium text-gray-900 dark:text-white", children: agent.name }),
1382
- (() => {
1383
- const tier = chunkPWBWP5FJ_js.getAgentTier(Number(agent.elo ?? 0));
1384
- return /* @__PURE__ */ jsxRuntime.jsx("span", { className: `shrink-0 rounded-full px-1.5 py-px text-[8px] font-bold ${tier.pillColor}`, children: t(`agentDrawer.tier${tier.key.charAt(0).toUpperCase()}${tier.key.slice(1)}`) });
1385
- })()
1386
- ] }),
1387
- /* @__PURE__ */ jsxRuntime.jsx("p", { className: "truncate text-[10px] text-gray-400 dark:text-gray-500", children: agent.role ?? agent.agentId })
1388
- ] })
1389
- ]
1390
- },
1391
- agent.agentId
1392
- )),
1393
- filteredAgentTools.length > 0 && /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
1394
- /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "mt-2 mb-1 flex items-center gap-1.5 px-1", children: [
1395
- /* @__PURE__ */ jsxRuntime.jsx(outline.CommandLineIcon, { className: "h-2.5 w-2.5 text-amber-500 dark:text-amber-400" }),
1396
- /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-[9px] font-semibold uppercase tracking-wider text-amber-600 dark:text-amber-400", children: t("agentToolsSection") }),
1397
- onCreateAgentTool && /* @__PURE__ */ jsxRuntime.jsx("button", { type: "button", onClick: onCreateAgentTool, className: "ml-auto text-[9px] font-medium text-amber-500 hover:text-amber-600 dark:text-amber-400", children: /* @__PURE__ */ jsxRuntime.jsx(outline.PlusIcon, { className: "h-3 w-3" }) })
1398
- ] }),
1399
- filteredAgentTools.map((agentTool) => /* @__PURE__ */ jsxRuntime.jsxs(
1400
- "div",
1401
- {
1402
- draggable: true,
1403
- onDragStart: (event) => onDragStart(event, "agent_tool", agentTool.agentToolId, agentTool.name),
1404
- className: "liquid-surface group flex items-center gap-2 rounded-lg px-3 py-1.5 transition-all cursor-grab hover:shadow-md active:cursor-grabbing",
1405
- children: [
1406
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex h-5 w-5 items-center justify-center rounded-md bg-gradient-to-br from-amber-400 to-orange-500 shadow-sm", children: /* @__PURE__ */ jsxRuntime.jsx(outline.CommandLineIcon, { className: "h-3 w-3 text-white" }) }),
1407
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: "min-w-0 flex-1", children: /* @__PURE__ */ jsxRuntime.jsx("p", { className: "truncate text-[11px] font-medium text-gray-900 dark:text-white", children: agentTool.name }) }),
1408
- !agentTool.enabled && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "rounded-full bg-gray-100 px-1.5 py-0.5 text-[8px] font-medium text-gray-500 dark:bg-white/10 dark:text-gray-400", children: "off" })
1409
- ]
1410
- },
1411
- agentTool.agentToolId
1412
- ))
1413
- ] })
1414
- ] })
1467
+ /* @__PURE__ */ jsxRuntime.jsx("p", { className: "truncate text-[10px] text-gray-400 dark:text-gray-500", children: agent.role ?? agent.agentId })
1468
+ ] })
1469
+ ]
1470
+ },
1471
+ agent.agentId
1472
+ )) })
1415
1473
  }
1416
1474
  ),
1417
1475
  /* @__PURE__ */ jsxRuntime.jsx(
@@ -1490,8 +1548,8 @@ function NodePalette({ agents, tools, agentTools = [], rules, entities = [], mod
1490
1548
  limit: entity.defaultLimit
1491
1549
  });
1492
1550
  const dsLogo = getDatasourceLogo(entity.id);
1493
- const EntityIcon = chunkJT2JCLN5_js.getEntityIcon(entity.id);
1494
- const entityGradient = chunkJT2JCLN5_js.getEntityGradient(entity.id);
1551
+ const EntityIcon = chunk2JK7GQYA_js.getEntityIcon(entity.id);
1552
+ const entityGradient = chunk2JK7GQYA_js.getEntityGradient(entity.id);
1495
1553
  return /* @__PURE__ */ jsxRuntime.jsxs(
1496
1554
  "div",
1497
1555
  {
@@ -1523,12 +1581,22 @@ function NodePalette({ agents, tools, agentTools = [], rules, entities = [], mod
1523
1581
  colorClass: "text-rose-600 dark:text-rose-400",
1524
1582
  count: filteredProviders.length,
1525
1583
  children: filteredProviders.map((provider) => {
1526
- const providerLogo = PROVIDER_LOGOS[provider.provider];
1584
+ const providerLogo = PROVIDER_LOGOS2[provider.provider];
1527
1585
  return /* @__PURE__ */ jsxRuntime.jsxs(
1528
1586
  "div",
1529
1587
  {
1530
- className: "liquid-surface group flex items-center gap-2 rounded-lg px-3 py-2 transition-all cursor-pointer hover:shadow-md",
1588
+ draggable: true,
1589
+ onDragStart: (event) => {
1590
+ const defaultConfig = JSON.stringify({
1591
+ type: "model_provider",
1592
+ providerType: provider.provider === "amazon" ? "aws_bedrock" : provider.provider === "google" ? "google_vertex" : provider.provider === "meta" ? "custom" : `${provider.provider}_api`,
1593
+ name: provider.name,
1594
+ modelFilter: []
1595
+ });
1596
+ onDragStart(event, "model_provider", provider.id, provider.name, defaultConfig);
1597
+ },
1531
1598
  onClick: () => onConfigureProvider?.(provider.id),
1599
+ className: "liquid-surface group flex items-center gap-2 rounded-lg px-3 py-2 transition-all cursor-grab hover:shadow-md active:cursor-grabbing",
1532
1600
  role: "button",
1533
1601
  tabIndex: 0,
1534
1602
  children: [
@@ -1863,9 +1931,9 @@ function formatDuration2(durationMs) {
1863
1931
  }
1864
1932
  function RunPanel({ open, onClose, onRun, onStop }) {
1865
1933
  const translations = chunkYXN2K77G_js.useTranslations("agents.workflow.runPanel");
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);
1934
+ const nodes = chunk2JK7GQYA_js.useWorkflowStore((state) => state.nodes);
1935
+ const isRunning = chunk2JK7GQYA_js.useWorkflowStore((state) => state.isRunning);
1936
+ const nodeResults = chunk2JK7GQYA_js.useWorkflowStore((state) => state.nodeResults);
1869
1937
  const startNode = nodes.find((node) => node.type === "start");
1870
1938
  const hasEndNode = nodes.some((node) => node.type === "end");
1871
1939
  const hasValidStartConfig = Boolean(
@@ -2150,8 +2218,8 @@ function inferVariables(config, nodeType) {
2150
2218
  }
2151
2219
  function VariableInspector({ open, onClose }) {
2152
2220
  const translations = chunkYXN2K77G_js.useTranslations("agents.workflow.variableInspector");
2153
- const nodes = chunkJT2JCLN5_js.useWorkflowStore((state) => state.nodes);
2154
- const edges = chunkJT2JCLN5_js.useWorkflowStore((state) => state.edges);
2221
+ const nodes = chunk2JK7GQYA_js.useWorkflowStore((state) => state.nodes);
2222
+ const edges = chunk2JK7GQYA_js.useWorkflowStore((state) => state.edges);
2155
2223
  const [expandedNodes, setExpandedNodes] = react.useState(/* @__PURE__ */ new Set());
2156
2224
  const toggleNodeExpansion = react.useCallback((nodeId) => {
2157
2225
  setExpandedNodes((current) => {
@@ -2213,8 +2281,8 @@ function VariableInspector({ open, onClose }) {
2213
2281
  /* @__PURE__ */ jsxRuntime.jsx("p", { className: "mt-2 text-sm text-gray-500 dark:text-gray-400", children: translations("noNodes") })
2214
2282
  ] }) : /* @__PURE__ */ jsxRuntime.jsx("div", { className: "divide-y divide-gray-100 dark:divide-gray-800", children: nodeVariableEntries.map((entry) => {
2215
2283
  const isExpanded = expandedNodes.has(entry.nodeId);
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";
2284
+ const IconComponent = chunk2JK7GQYA_js.LOGIC_ICON_MAP[entry.nodeType];
2285
+ const gradient = chunk2JK7GQYA_js.LOGIC_NODE_GRADIENTS[entry.nodeType] ?? "from-gray-400 to-gray-500";
2218
2286
  const inputVariables = entry.variables.filter((variable) => variable.direction === "input");
2219
2287
  const outputVariables = entry.variables.filter((variable) => variable.direction === "output");
2220
2288
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { "data-testid": `variable-node-${entry.nodeId}`, children: [
@@ -2280,7 +2348,7 @@ function RunInputDialog({
2280
2348
  onRun
2281
2349
  }) {
2282
2350
  const t = chunkYXN2K77G_js.useTranslations("agents.workflow.runInputDialog");
2283
- const nodes = chunkJT2JCLN5_js.useWorkflowStore((state) => state.nodes);
2351
+ const nodes = chunk2JK7GQYA_js.useWorkflowStore((state) => state.nodes);
2284
2352
  const [values, setValues] = react.useState({});
2285
2353
  const inputVariableNames = react.useMemo(() => {
2286
2354
  const storeStartNode = nodes.find((node) => node.type === "start");
@@ -2362,8 +2430,8 @@ function PreviewPanel({ open, onClose, workflowId, loadRuns }) {
2362
2430
  const [isLoadingRuns, setIsLoadingRuns] = react.useState(false);
2363
2431
  const [selectedRun, setSelectedRun] = react.useState(null);
2364
2432
  const [selectedNode, setSelectedNode] = react.useState(null);
2365
- const isRunning = chunkJT2JCLN5_js.useWorkflowStore((state) => state.isRunning);
2366
- const nodeResults = chunkJT2JCLN5_js.useWorkflowStore((state) => state.nodeResults);
2433
+ const isRunning = chunk2JK7GQYA_js.useWorkflowStore((state) => state.isRunning);
2434
+ const nodeResults = chunk2JK7GQYA_js.useWorkflowStore((state) => state.nodeResults);
2367
2435
  const refreshRuns = react.useCallback(async () => {
2368
2436
  setIsLoadingRuns(true);
2369
2437
  try {
@@ -2519,7 +2587,7 @@ var AutoSaveWorkspace = react.memo(function AutoSaveWorkspace2({
2519
2587
  onAutoSaveGraph(graph);
2520
2588
  }, [onAutoSaveGraph, onGraphSnapshot]);
2521
2589
  return /* @__PURE__ */ jsxRuntime.jsx(
2522
- chunkJT2JCLN5_js.Workspace,
2590
+ chunk2JK7GQYA_js.Workspace,
2523
2591
  {
2524
2592
  ...workspaceProps,
2525
2593
  onGraphChange: handleGraphChange
@@ -2892,14 +2960,14 @@ function DslImportModal({ open, onClose, onImport }) {
2892
2960
  }
2893
2961
 
2894
2962
  // src/astrlabe/store/selectors.ts
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);
2963
+ var useCanUndo = () => chunk2JK7GQYA_js.useWorkflowStore((state) => state.past.length > 0);
2964
+ var useCanRedo = () => chunk2JK7GQYA_js.useWorkflowStore((state) => state.future.length > 0);
2965
+ var useHasCopied = () => chunk2JK7GQYA_js.useWorkflowStore((state) => state.clipboard !== null);
2966
+ var useContextMenu = () => chunk2JK7GQYA_js.useWorkflowStore((state) => state.contextMenu);
2967
+ var useEditingNodeId = () => chunk2JK7GQYA_js.useWorkflowStore((state) => state.editingNodeId);
2968
+ var useSelectedNodeCount = () => chunk2JK7GQYA_js.useWorkflowStore((state) => state.nodes.filter((node) => node.selected).length);
2969
+ var useIsRunning = () => chunk2JK7GQYA_js.useWorkflowStore((state) => state.isRunning);
2970
+ var useNodeResults = () => chunk2JK7GQYA_js.useWorkflowStore((state) => state.nodeResults);
2903
2971
  var DEFAULT_MAX_HISTORY = 50;
2904
2972
  function useUndoRedo(nodes, edges, setNodes, setEdges, maxHistory = DEFAULT_MAX_HISTORY) {
2905
2973
  const pastRef = react.useRef([]);
@@ -3187,223 +3255,227 @@ Object.defineProperty(exports, "validateWorkflowGraph", {
3187
3255
  });
3188
3256
  Object.defineProperty(exports, "AgentFlowNode", {
3189
3257
  enumerable: true,
3190
- get: function () { return chunkJT2JCLN5_js.AgentFlowNode; }
3258
+ get: function () { return chunk2JK7GQYA_js.AgentFlowNode; }
3191
3259
  });
3192
3260
  Object.defineProperty(exports, "AgentToolFlowNode", {
3193
3261
  enumerable: true,
3194
- get: function () { return chunkJT2JCLN5_js.AgentToolFlowNode; }
3262
+ get: function () { return chunk2JK7GQYA_js.AgentToolFlowNode; }
3195
3263
  });
3196
3264
  Object.defineProperty(exports, "AnswerFlowNode", {
3197
3265
  enumerable: true,
3198
- get: function () { return chunkJT2JCLN5_js.AnswerFlowNode; }
3266
+ get: function () { return chunk2JK7GQYA_js.AnswerFlowNode; }
3199
3267
  });
3200
3268
  Object.defineProperty(exports, "AnthropicIcon", {
3201
3269
  enumerable: true,
3202
- get: function () { return chunkJT2JCLN5_js.AnthropicIcon; }
3270
+ get: function () { return chunk2JK7GQYA_js.AnthropicIcon; }
3203
3271
  });
3204
3272
  Object.defineProperty(exports, "CodeFlowNode", {
3205
3273
  enumerable: true,
3206
- get: function () { return chunkJT2JCLN5_js.CodeFlowNode; }
3274
+ get: function () { return chunk2JK7GQYA_js.CodeFlowNode; }
3207
3275
  });
3208
3276
  Object.defineProperty(exports, "CrewAIIcon", {
3209
3277
  enumerable: true,
3210
- get: function () { return chunkJT2JCLN5_js.CrewAIIcon; }
3278
+ get: function () { return chunk2JK7GQYA_js.CrewAIIcon; }
3211
3279
  });
3212
3280
  Object.defineProperty(exports, "DocumentExtractorFlowNode", {
3213
3281
  enumerable: true,
3214
- get: function () { return chunkJT2JCLN5_js.DocumentExtractorFlowNode; }
3282
+ get: function () { return chunk2JK7GQYA_js.DocumentExtractorFlowNode; }
3215
3283
  });
3216
3284
  Object.defineProperty(exports, "EndFlowNode", {
3217
3285
  enumerable: true,
3218
- get: function () { return chunkJT2JCLN5_js.EndFlowNode; }
3286
+ get: function () { return chunk2JK7GQYA_js.EndFlowNode; }
3219
3287
  });
3220
3288
  Object.defineProperty(exports, "EntityFlowNode", {
3221
3289
  enumerable: true,
3222
- get: function () { return chunkJT2JCLN5_js.EntityFlowNode; }
3290
+ get: function () { return chunk2JK7GQYA_js.EntityFlowNode; }
3223
3291
  });
3224
3292
  Object.defineProperty(exports, "FRAMEWORK_META", {
3225
3293
  enumerable: true,
3226
- get: function () { return chunkJT2JCLN5_js.FRAMEWORK_META; }
3294
+ get: function () { return chunk2JK7GQYA_js.FRAMEWORK_META; }
3227
3295
  });
3228
3296
  Object.defineProperty(exports, "GoogleADKIcon", {
3229
3297
  enumerable: true,
3230
- get: function () { return chunkJT2JCLN5_js.GoogleADKIcon; }
3298
+ get: function () { return chunk2JK7GQYA_js.GoogleADKIcon; }
3231
3299
  });
3232
3300
  Object.defineProperty(exports, "GroupFlowNode", {
3233
3301
  enumerable: true,
3234
- get: function () { return chunkJT2JCLN5_js.GroupFlowNode; }
3302
+ get: function () { return chunk2JK7GQYA_js.GroupFlowNode; }
3235
3303
  });
3236
3304
  Object.defineProperty(exports, "HttpRequestFlowNode", {
3237
3305
  enumerable: true,
3238
- get: function () { return chunkJT2JCLN5_js.HttpRequestFlowNode; }
3306
+ get: function () { return chunk2JK7GQYA_js.HttpRequestFlowNode; }
3239
3307
  });
3240
3308
  Object.defineProperty(exports, "IfElseFlowNode", {
3241
3309
  enumerable: true,
3242
- get: function () { return chunkJT2JCLN5_js.IfElseFlowNode; }
3310
+ get: function () { return chunk2JK7GQYA_js.IfElseFlowNode; }
3243
3311
  });
3244
3312
  Object.defineProperty(exports, "IterationFlowNode", {
3245
3313
  enumerable: true,
3246
- get: function () { return chunkJT2JCLN5_js.IterationFlowNode; }
3314
+ get: function () { return chunk2JK7GQYA_js.IterationFlowNode; }
3247
3315
  });
3248
3316
  Object.defineProperty(exports, "IterationStartFlowNode", {
3249
3317
  enumerable: true,
3250
- get: function () { return chunkJT2JCLN5_js.IterationStartFlowNode; }
3318
+ get: function () { return chunk2JK7GQYA_js.IterationStartFlowNode; }
3251
3319
  });
3252
3320
  Object.defineProperty(exports, "KnowledgeBaseFlowNode", {
3253
3321
  enumerable: true,
3254
- get: function () { return chunkJT2JCLN5_js.KnowledgeBaseFlowNode; }
3322
+ get: function () { return chunk2JK7GQYA_js.KnowledgeBaseFlowNode; }
3255
3323
  });
3256
3324
  Object.defineProperty(exports, "LOGIC_ICON_MAP", {
3257
3325
  enumerable: true,
3258
- get: function () { return chunkJT2JCLN5_js.LOGIC_ICON_MAP; }
3326
+ get: function () { return chunk2JK7GQYA_js.LOGIC_ICON_MAP; }
3259
3327
  });
3260
3328
  Object.defineProperty(exports, "LOGIC_NODE_BADGE_COLORS", {
3261
3329
  enumerable: true,
3262
- get: function () { return chunkJT2JCLN5_js.LOGIC_NODE_BADGE_COLORS; }
3330
+ get: function () { return chunk2JK7GQYA_js.LOGIC_NODE_BADGE_COLORS; }
3263
3331
  });
3264
3332
  Object.defineProperty(exports, "LOGIC_NODE_GRADIENTS", {
3265
3333
  enumerable: true,
3266
- get: function () { return chunkJT2JCLN5_js.LOGIC_NODE_GRADIENTS; }
3334
+ get: function () { return chunk2JK7GQYA_js.LOGIC_NODE_GRADIENTS; }
3267
3335
  });
3268
3336
  Object.defineProperty(exports, "LOGIC_NODE_HANDLE_COLORS", {
3269
3337
  enumerable: true,
3270
- get: function () { return chunkJT2JCLN5_js.LOGIC_NODE_HANDLE_COLORS; }
3338
+ get: function () { return chunk2JK7GQYA_js.LOGIC_NODE_HANDLE_COLORS; }
3271
3339
  });
3272
3340
  Object.defineProperty(exports, "LangChainIcon", {
3273
3341
  enumerable: true,
3274
- get: function () { return chunkJT2JCLN5_js.LangChainIcon; }
3342
+ get: function () { return chunk2JK7GQYA_js.LangChainIcon; }
3275
3343
  });
3276
3344
  Object.defineProperty(exports, "ListOperatorFlowNode", {
3277
3345
  enumerable: true,
3278
- get: function () { return chunkJT2JCLN5_js.ListOperatorFlowNode; }
3346
+ get: function () { return chunk2JK7GQYA_js.ListOperatorFlowNode; }
3279
3347
  });
3280
3348
  Object.defineProperty(exports, "LogicNodeModal", {
3281
3349
  enumerable: true,
3282
- get: function () { return chunkJT2JCLN5_js.LogicNodeModal; }
3350
+ get: function () { return chunk2JK7GQYA_js.LogicNodeModal; }
3283
3351
  });
3284
3352
  Object.defineProperty(exports, "MINIMAP_NODE_COLORS", {
3285
3353
  enumerable: true,
3286
- get: function () { return chunkJT2JCLN5_js.MINIMAP_NODE_COLORS; }
3354
+ get: function () { return chunk2JK7GQYA_js.MINIMAP_NODE_COLORS; }
3355
+ });
3356
+ Object.defineProperty(exports, "ModelProviderFlowNode", {
3357
+ enumerable: true,
3358
+ get: function () { return chunk2JK7GQYA_js.ModelProviderFlowNode; }
3287
3359
  });
3288
3360
  Object.defineProperty(exports, "NodeCard", {
3289
3361
  enumerable: true,
3290
- get: function () { return chunkJT2JCLN5_js.NodeCard; }
3362
+ get: function () { return chunk2JK7GQYA_js.NodeCard; }
3291
3363
  });
3292
3364
  Object.defineProperty(exports, "NodeContextMenu", {
3293
3365
  enumerable: true,
3294
- get: function () { return chunkJT2JCLN5_js.NodeContextMenu; }
3366
+ get: function () { return chunk2JK7GQYA_js.NodeContextMenu; }
3295
3367
  });
3296
3368
  Object.defineProperty(exports, "NoteFlowNode", {
3297
3369
  enumerable: true,
3298
- get: function () { return chunkJT2JCLN5_js.NoteFlowNode; }
3370
+ get: function () { return chunk2JK7GQYA_js.NoteFlowNode; }
3299
3371
  });
3300
3372
  Object.defineProperty(exports, "OpenAIIcon", {
3301
3373
  enumerable: true,
3302
- get: function () { return chunkJT2JCLN5_js.OpenAIIcon; }
3374
+ get: function () { return chunk2JK7GQYA_js.OpenAIIcon; }
3303
3375
  });
3304
3376
  Object.defineProperty(exports, "PanelContextMenu", {
3305
3377
  enumerable: true,
3306
- get: function () { return chunkJT2JCLN5_js.PanelContextMenu; }
3378
+ get: function () { return chunk2JK7GQYA_js.PanelContextMenu; }
3307
3379
  });
3308
3380
  Object.defineProperty(exports, "ParameterExtractorFlowNode", {
3309
3381
  enumerable: true,
3310
- get: function () { return chunkJT2JCLN5_js.ParameterExtractorFlowNode; }
3382
+ get: function () { return chunk2JK7GQYA_js.ParameterExtractorFlowNode; }
3311
3383
  });
3312
3384
  Object.defineProperty(exports, "QuestionClassifierFlowNode", {
3313
3385
  enumerable: true,
3314
- get: function () { return chunkJT2JCLN5_js.QuestionClassifierFlowNode; }
3386
+ get: function () { return chunk2JK7GQYA_js.QuestionClassifierFlowNode; }
3315
3387
  });
3316
3388
  Object.defineProperty(exports, "RuleFlowNode", {
3317
3389
  enumerable: true,
3318
- get: function () { return chunkJT2JCLN5_js.RuleFlowNode; }
3390
+ get: function () { return chunk2JK7GQYA_js.RuleFlowNode; }
3319
3391
  });
3320
3392
  Object.defineProperty(exports, "SelectionContextMenu", {
3321
3393
  enumerable: true,
3322
- get: function () { return chunkJT2JCLN5_js.SelectionContextMenu; }
3394
+ get: function () { return chunk2JK7GQYA_js.SelectionContextMenu; }
3323
3395
  });
3324
3396
  Object.defineProperty(exports, "StartFlowNode", {
3325
3397
  enumerable: true,
3326
- get: function () { return chunkJT2JCLN5_js.StartFlowNode; }
3398
+ get: function () { return chunk2JK7GQYA_js.StartFlowNode; }
3327
3399
  });
3328
3400
  Object.defineProperty(exports, "StrandsIcon", {
3329
3401
  enumerable: true,
3330
- get: function () { return chunkJT2JCLN5_js.StrandsIcon; }
3402
+ get: function () { return chunk2JK7GQYA_js.StrandsIcon; }
3331
3403
  });
3332
3404
  Object.defineProperty(exports, "TemplateTransformFlowNode", {
3333
3405
  enumerable: true,
3334
- get: function () { return chunkJT2JCLN5_js.TemplateTransformFlowNode; }
3406
+ get: function () { return chunk2JK7GQYA_js.TemplateTransformFlowNode; }
3335
3407
  });
3336
3408
  Object.defineProperty(exports, "ToolFlowNode", {
3337
3409
  enumerable: true,
3338
- get: function () { return chunkJT2JCLN5_js.ToolFlowNode; }
3410
+ get: function () { return chunk2JK7GQYA_js.ToolFlowNode; }
3339
3411
  });
3340
3412
  Object.defineProperty(exports, "VariableAggregatorFlowNode", {
3341
3413
  enumerable: true,
3342
- get: function () { return chunkJT2JCLN5_js.VariableAggregatorFlowNode; }
3414
+ get: function () { return chunk2JK7GQYA_js.VariableAggregatorFlowNode; }
3343
3415
  });
3344
3416
  Object.defineProperty(exports, "VariableAssignerFlowNode", {
3345
3417
  enumerable: true,
3346
- get: function () { return chunkJT2JCLN5_js.VariableAssignerFlowNode; }
3418
+ get: function () { return chunk2JK7GQYA_js.VariableAssignerFlowNode; }
3347
3419
  });
3348
3420
  Object.defineProperty(exports, "WorkflowBuilderProvider", {
3349
3421
  enumerable: true,
3350
- get: function () { return chunkJT2JCLN5_js.WorkflowBuilderProvider; }
3422
+ get: function () { return chunk2JK7GQYA_js.WorkflowBuilderProvider; }
3351
3423
  });
3352
3424
  Object.defineProperty(exports, "Workspace", {
3353
3425
  enumerable: true,
3354
- get: function () { return chunkJT2JCLN5_js.Workspace; }
3426
+ get: function () { return chunk2JK7GQYA_js.Workspace; }
3355
3427
  });
3356
3428
  Object.defineProperty(exports, "getCompatibleModels", {
3357
3429
  enumerable: true,
3358
- get: function () { return chunkJT2JCLN5_js.getCompatibleModels; }
3430
+ get: function () { return chunk2JK7GQYA_js.getCompatibleModels; }
3359
3431
  });
3360
3432
  Object.defineProperty(exports, "getDefaultFrameworkForModel", {
3361
3433
  enumerable: true,
3362
- get: function () { return chunkJT2JCLN5_js.getDefaultFrameworkForModel; }
3434
+ get: function () { return chunk2JK7GQYA_js.getDefaultFrameworkForModel; }
3363
3435
  });
3364
3436
  Object.defineProperty(exports, "getEntityBadgeColor", {
3365
3437
  enumerable: true,
3366
- get: function () { return chunkJT2JCLN5_js.getEntityBadgeColor; }
3438
+ get: function () { return chunk2JK7GQYA_js.getEntityBadgeColor; }
3367
3439
  });
3368
3440
  Object.defineProperty(exports, "getEntityGradient", {
3369
3441
  enumerable: true,
3370
- get: function () { return chunkJT2JCLN5_js.getEntityGradient; }
3442
+ get: function () { return chunk2JK7GQYA_js.getEntityGradient; }
3371
3443
  });
3372
3444
  Object.defineProperty(exports, "getEntityHandleColor", {
3373
3445
  enumerable: true,
3374
- get: function () { return chunkJT2JCLN5_js.getEntityHandleColor; }
3446
+ get: function () { return chunk2JK7GQYA_js.getEntityHandleColor; }
3375
3447
  });
3376
3448
  Object.defineProperty(exports, "getEntityIcon", {
3377
3449
  enumerable: true,
3378
- get: function () { return chunkJT2JCLN5_js.getEntityIcon; }
3450
+ get: function () { return chunk2JK7GQYA_js.getEntityIcon; }
3379
3451
  });
3380
3452
  Object.defineProperty(exports, "getEntityMinimapColor", {
3381
3453
  enumerable: true,
3382
- get: function () { return chunkJT2JCLN5_js.getEntityMinimapColor; }
3454
+ get: function () { return chunk2JK7GQYA_js.getEntityMinimapColor; }
3383
3455
  });
3384
3456
  Object.defineProperty(exports, "getFrameworkMeta", {
3385
3457
  enumerable: true,
3386
- get: function () { return chunkJT2JCLN5_js.getFrameworkMeta; }
3458
+ get: function () { return chunk2JK7GQYA_js.getFrameworkMeta; }
3387
3459
  });
3388
3460
  Object.defineProperty(exports, "isModelCompatibleWithFramework", {
3389
3461
  enumerable: true,
3390
- get: function () { return chunkJT2JCLN5_js.isModelCompatibleWithFramework; }
3462
+ get: function () { return chunk2JK7GQYA_js.isModelCompatibleWithFramework; }
3391
3463
  });
3392
3464
  Object.defineProperty(exports, "useModalStore", {
3393
3465
  enumerable: true,
3394
- get: function () { return chunkJT2JCLN5_js.useModalStore; }
3466
+ get: function () { return chunk2JK7GQYA_js.useModalStore; }
3395
3467
  });
3396
3468
  Object.defineProperty(exports, "useWorkflowBuilderClient", {
3397
3469
  enumerable: true,
3398
- get: function () { return chunkJT2JCLN5_js.useWorkflowBuilderClient; }
3470
+ get: function () { return chunk2JK7GQYA_js.useWorkflowBuilderClient; }
3399
3471
  });
3400
3472
  Object.defineProperty(exports, "useWorkflowBuilderClientOptional", {
3401
3473
  enumerable: true,
3402
- get: function () { return chunkJT2JCLN5_js.useWorkflowBuilderClientOptional; }
3474
+ get: function () { return chunk2JK7GQYA_js.useWorkflowBuilderClientOptional; }
3403
3475
  });
3404
3476
  Object.defineProperty(exports, "useWorkflowStore", {
3405
3477
  enumerable: true,
3406
- get: function () { return chunkJT2JCLN5_js.useWorkflowStore; }
3478
+ get: function () { return chunk2JK7GQYA_js.useWorkflowStore; }
3407
3479
  });
3408
3480
  Object.defineProperty(exports, "GraphNodeBadge", {
3409
3481
  enumerable: true,