@datatechsolutions/ui 2.11.6 → 2.11.8

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.
@@ -500,15 +500,12 @@ type SubworkflowStoreActions = {
500
500
  type SubworkflowStore = SubworkflowStoreState & SubworkflowStoreActions;
501
501
  declare const useSubworkflowStore: zustand.UseBoundStore<zustand.StoreApi<SubworkflowStore>>;
502
502
 
503
- type ModalType = 'agent' | 'subworkflow' | 'logic-node' | 'pipeline-settings' | null;
503
+ type ModalType = 'agent' | 'logic-node' | 'pipeline-settings' | null;
504
504
  type AgentModalData = {
505
505
  agent: AgentWithPrompts;
506
506
  models: AgentModel[];
507
507
  isCreateMode: boolean;
508
508
  };
509
- type SubworkflowModalData = {
510
- tool: Subworkflow;
511
- };
512
509
  type LogicNodeModalData = {
513
510
  nodeId: string;
514
511
  nodeLabel: string;
@@ -518,19 +515,29 @@ type PipelineSettingsModalData = {
518
515
  name: string;
519
516
  description: string;
520
517
  };
518
+ type ModalEntry = {
519
+ type: ModalType;
520
+ agentData: AgentModalData | null;
521
+ logicNodeData: LogicNodeModalData | null;
522
+ pipelineSettingsData: PipelineSettingsModalData | null;
523
+ };
521
524
  type ModalStoreState = {
525
+ /** Current active modal (top of stack) */
522
526
  activeModal: ModalType;
523
527
  agentData: AgentModalData | null;
524
- subworkflowData: SubworkflowModalData | null;
525
528
  logicNodeData: LogicNodeModalData | null;
526
529
  pipelineSettingsData: PipelineSettingsModalData | null;
530
+ /** Stack of previous modals (for back-navigation) */
531
+ stack: ModalEntry[];
527
532
  };
528
533
  type ModalStoreActions = {
529
534
  openAgentModal: (agent: AgentWithPrompts, models: AgentModel[], isCreateMode?: boolean) => void;
530
- openSubworkflowModal: (tool: Subworkflow) => void;
531
535
  openLogicNodeModal: (nodeId: string, nodeLabel: string, config: LogicNodeConfig) => void;
532
536
  openPipelineSettingsModal: (name: string, description: string) => void;
537
+ /** Close current modal. If stack has entries, restores the previous modal. */
533
538
  closeModal: () => void;
539
+ /** Close all modals and clear the stack. */
540
+ closeAllModals: () => void;
534
541
  };
535
542
  type ModalStore = ModalStoreState & ModalStoreActions;
536
543
  declare const useModalStore: zustand.UseBoundStore<zustand.StoreApi<ModalStore>>;
@@ -500,15 +500,12 @@ type SubworkflowStoreActions = {
500
500
  type SubworkflowStore = SubworkflowStoreState & SubworkflowStoreActions;
501
501
  declare const useSubworkflowStore: zustand.UseBoundStore<zustand.StoreApi<SubworkflowStore>>;
502
502
 
503
- type ModalType = 'agent' | 'subworkflow' | 'logic-node' | 'pipeline-settings' | null;
503
+ type ModalType = 'agent' | 'logic-node' | 'pipeline-settings' | null;
504
504
  type AgentModalData = {
505
505
  agent: AgentWithPrompts;
506
506
  models: AgentModel[];
507
507
  isCreateMode: boolean;
508
508
  };
509
- type SubworkflowModalData = {
510
- tool: Subworkflow;
511
- };
512
509
  type LogicNodeModalData = {
513
510
  nodeId: string;
514
511
  nodeLabel: string;
@@ -518,19 +515,29 @@ type PipelineSettingsModalData = {
518
515
  name: string;
519
516
  description: string;
520
517
  };
518
+ type ModalEntry = {
519
+ type: ModalType;
520
+ agentData: AgentModalData | null;
521
+ logicNodeData: LogicNodeModalData | null;
522
+ pipelineSettingsData: PipelineSettingsModalData | null;
523
+ };
521
524
  type ModalStoreState = {
525
+ /** Current active modal (top of stack) */
522
526
  activeModal: ModalType;
523
527
  agentData: AgentModalData | null;
524
- subworkflowData: SubworkflowModalData | null;
525
528
  logicNodeData: LogicNodeModalData | null;
526
529
  pipelineSettingsData: PipelineSettingsModalData | null;
530
+ /** Stack of previous modals (for back-navigation) */
531
+ stack: ModalEntry[];
527
532
  };
528
533
  type ModalStoreActions = {
529
534
  openAgentModal: (agent: AgentWithPrompts, models: AgentModel[], isCreateMode?: boolean) => void;
530
- openSubworkflowModal: (tool: Subworkflow) => void;
531
535
  openLogicNodeModal: (nodeId: string, nodeLabel: string, config: LogicNodeConfig) => void;
532
536
  openPipelineSettingsModal: (name: string, description: string) => void;
537
+ /** Close current modal. If stack has entries, restores the previous modal. */
533
538
  closeModal: () => void;
539
+ /** Close all modals and clear the stack. */
540
+ closeAllModals: () => void;
534
541
  };
535
542
  type ModalStore = ModalStoreState & ModalStoreActions;
536
543
  declare const useModalStore: zustand.UseBoundStore<zustand.StoreApi<ModalStore>>;
@@ -3,7 +3,7 @@
3
3
 
4
4
  require('../chunk-55H6WZQP.js');
5
5
  var chunk3GE3MBUZ_js = require('../chunk-3GE3MBUZ.js');
6
- var chunkE7GVGD4Z_js = require('../chunk-E7GVGD4Z.js');
6
+ var chunkLFWRE3A3_js = require('../chunk-LFWRE3A3.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 = chunkE7GVGD4Z_js.getFrameworkMeta(selectedFramework);
86
+ const frameworkMeta = chunkLFWRE3A3_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(chunkE7GVGD4Z_js.FRAMEWORK_META);
379
- const compatibleModels = chunkE7GVGD4Z_js.getCompatibleModels(models, selectedFramework);
378
+ const frameworkKeys = Object.keys(chunkLFWRE3A3_js.FRAMEWORK_META);
379
+ const compatibleModels = chunkLFWRE3A3_js.getCompatibleModels(models, selectedFramework);
380
380
  const handleFrameworkChange = react.useCallback((newFramework) => {
381
381
  setSelectedFramework(newFramework);
382
- if (!chunkE7GVGD4Z_js.isModelCompatibleWithFramework(selectedModelId, newFramework)) {
383
- const compatible = chunkE7GVGD4Z_js.getCompatibleModels(models, newFramework);
382
+ if (!chunkLFWRE3A3_js.isModelCompatibleWithFramework(selectedModelId, newFramework)) {
383
+ const compatible = chunkLFWRE3A3_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 = chunkE7GVGD4Z_js.FRAMEWORK_META[key];
394
+ const meta = chunkLFWRE3A3_js.FRAMEWORK_META[key];
395
395
  const isSelected = key === selectedFramework;
396
- const compatCount = chunkE7GVGD4Z_js.getCompatibleModels(models, key).length;
396
+ const compatCount = chunkLFWRE3A3_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 = chunkE7GVGD4Z_js.isModelCompatibleWithFramework(model.id, selectedFramework);
426
+ const isCompatible = chunkLFWRE3A3_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 = chunkE7GVGD4Z_js.useWorkflowStore((state) => state.nodeResults);
523
+ const nodeResults = chunkLFWRE3A3_js.useWorkflowStore((state) => state.nodeResults);
524
524
  const agentResult = react.useMemo(() => {
525
525
  return nodeResults[agentId] ?? null;
526
526
  }, [nodeResults, agentId]);
@@ -549,9 +549,9 @@ function ResultsTab({ agentId, t }) {
549
549
  }
550
550
  function AgentModal({ onSaved }) {
551
551
  const t = chunkYXN2K77G_js.useTranslations("agents.workflow");
552
- const activeModal = chunkE7GVGD4Z_js.useModalStore((s) => s.activeModal);
553
- const agentData = chunkE7GVGD4Z_js.useModalStore((s) => s.agentData);
554
- const closeModal = chunkE7GVGD4Z_js.useModalStore((s) => s.closeModal);
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);
555
555
  const open = activeModal === "agent";
556
556
  const agent = agentData?.agent ?? null;
557
557
  const models = agentData?.models ?? [];
@@ -743,6 +743,7 @@ function SubworkflowModal({ onSaved, onMaximize }) {
743
743
  const markDirty = useSubworkflowStore((s) => s.markDirty);
744
744
  const markSaved = useSubworkflowStore((s) => s.markSaved);
745
745
  const closeModal = useSubworkflowStore((s) => s.closeModal);
746
+ const agentBehind = chunkLFWRE3A3_js.useModalStore((s) => s.activeModal === "agent" ? s.agentData?.agent?.name : null);
746
747
  const isCreateMode = !tool?.toolId;
747
748
  const initialGraph = react.useMemo(() => {
748
749
  const config = tool?.config;
@@ -771,9 +772,9 @@ function SubworkflowModal({ onSaved, onMaximize }) {
771
772
  }, [tool, onSaved, name, category, description, timeoutMs, latestGraphRef, markSaved]);
772
773
  if (!tool) return null;
773
774
  const categoryKey = category ?? "external";
774
- const gradient = tool.color ?? chunkE7GVGD4Z_js.CATEGORY_COLORS[categoryKey] ?? chunkE7GVGD4Z_js.CATEGORY_COLORS.external;
775
- const categoryPill = chunkE7GVGD4Z_js.CATEGORY_PILL_COLORS[categoryKey] ?? chunkE7GVGD4Z_js.CATEGORY_PILL_COLORS.external;
776
- const IconComponent = chunkE7GVGD4Z_js.ICON_MAP[tool.icon ?? ""] ?? outline.ArrowPathRoundedSquareIcon;
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;
777
778
  const graph = latestGraphRef.current;
778
779
  const startNode = graph.nodes.find((n) => n.type === "start");
779
780
  const endNode = graph.nodes.find((n) => n.type === "end");
@@ -811,12 +812,13 @@ function SubworkflowModal({ onSaved, onMaximize }) {
811
812
  open,
812
813
  onClose: closeModal,
813
814
  title: isCreateMode ? t("subworkflowDrawer.createTitle") : name,
814
- subtitle: t("subworkflowDrawer.subworkflow"),
815
+ subtitle: agentBehind ? `${agentBehind} \u2192 ${t("subworkflowDrawer.subworkflow")}` : t("subworkflowDrawer.subworkflow"),
815
816
  label: isCreateMode ? t("subworkflowDrawer.new") : t("subworkflowDrawer.edit"),
816
817
  gradient: "from-teal-500 to-cyan-600",
817
818
  icon: /* @__PURE__ */ jsxRuntime.jsx(outline.ArrowPathRoundedSquareIcon, { className: "h-6 w-6 text-white" }),
818
819
  maxWidth: "6xl",
819
820
  footer,
821
+ zIndex: agentBehind ? "z-[60]" : "z-50",
820
822
  children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex h-[80vh] min-h-[600px]", children: [
821
823
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex w-72 flex-shrink-0 flex-col overflow-y-auto border-r border-white/10", children: [
822
824
  isCreateMode ? /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "border-b border-white/10 bg-gradient-to-br from-teal-500/15 via-cyan-500/8 to-transparent px-4 py-4 dark:from-teal-500/8 dark:via-cyan-500/4", children: [
@@ -837,7 +839,7 @@ function SubworkflowModal({ onSaved, onMaximize }) {
837
839
  {
838
840
  type: "button",
839
841
  onClick: () => setCategory(cat),
840
- className: `rounded-full px-2 py-1 text-[9px] font-semibold transition-all ${cat === category ? `${chunkE7GVGD4Z_js.CATEGORY_PILL_COLORS[cat] ?? chunkE7GVGD4Z_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"}`,
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"}`,
841
843
  children: cat
842
844
  },
843
845
  cat
@@ -924,7 +926,7 @@ function SubworkflowModal({ onSaved, onMaximize }) {
924
926
  /* @__PURE__ */ jsxRuntime.jsx("div", { className: "mt-auto" })
925
927
  ] }),
926
928
  /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex-1", children: /* @__PURE__ */ jsxRuntime.jsx(
927
- chunkE7GVGD4Z_js.WorkflowCanvas,
929
+ chunkLFWRE3A3_js.WorkflowCanvas,
928
930
  {
929
931
  initialGraph,
930
932
  agents: [],
@@ -976,9 +978,9 @@ function WorkspaceModal({
976
978
  }
977
979
  function PipelineSettingsModal({ onSave }) {
978
980
  const t = chunkYXN2K77G_js.useTranslations("agents.workflow");
979
- const activeModal = chunkE7GVGD4Z_js.useModalStore((s) => s.activeModal);
980
- const data = chunkE7GVGD4Z_js.useModalStore((s) => s.pipelineSettingsData);
981
- const closeModal = chunkE7GVGD4Z_js.useModalStore((s) => s.closeModal);
981
+ const activeModal = chunkLFWRE3A3_js.useModalStore((s) => s.activeModal);
982
+ const data = chunkLFWRE3A3_js.useModalStore((s) => s.pipelineSettingsData);
983
+ const closeModal = chunkLFWRE3A3_js.useModalStore((s) => s.closeModal);
982
984
  const open = activeModal === "pipeline-settings";
983
985
  const [nameValue, setNameValue] = react.useState("");
984
986
  const [descriptionValue, setDescriptionValue] = react.useState("");
@@ -1161,8 +1163,8 @@ function CollapsibleSection({ title, icon, colorClass, defaultOpen = true, count
1161
1163
  ] });
1162
1164
  }
1163
1165
  function LogicNodeItemCard({ item, translationFunction }) {
1164
- const IconComponent = chunkE7GVGD4Z_js.LOGIC_ICON_MAP[item.nodeType];
1165
- const gradient = chunkE7GVGD4Z_js.LOGIC_NODE_GRADIENTS[item.nodeType] ?? "from-gray-400 to-gray-500";
1166
+ const IconComponent = chunkLFWRE3A3_js.LOGIC_ICON_MAP[item.nodeType];
1167
+ const gradient = chunkLFWRE3A3_js.LOGIC_NODE_GRADIENTS[item.nodeType] ?? "from-gray-400 to-gray-500";
1166
1168
  const defaultConfig = chunkPWBWP5FJ_js.createDefaultLogicNodeConfig(item.nodeType);
1167
1169
  const configJson = defaultConfig ? JSON.stringify(defaultConfig) : void 0;
1168
1170
  return /* @__PURE__ */ jsxRuntime.jsxs(
@@ -1402,8 +1404,8 @@ function NodePalette({ agents, tools, agentTools = [], rules, entities = [], onC
1402
1404
  outputVariable: `${entity.label.replace(/\s+/g, "")}Data`,
1403
1405
  limit: entity.defaultLimit
1404
1406
  });
1405
- const EntityIcon = chunkE7GVGD4Z_js.getEntityIcon(entity.id);
1406
- const entityGradient = chunkE7GVGD4Z_js.getEntityGradient(entity.id);
1407
+ const EntityIcon = chunkLFWRE3A3_js.getEntityIcon(entity.id);
1408
+ const entityGradient = chunkLFWRE3A3_js.getEntityGradient(entity.id);
1407
1409
  return /* @__PURE__ */ jsxRuntime.jsxs(
1408
1410
  "div",
1409
1411
  {
@@ -1742,9 +1744,9 @@ function formatDuration2(durationMs) {
1742
1744
  }
1743
1745
  function RunPanel({ open, onClose, onRun, onStop }) {
1744
1746
  const translations = chunkYXN2K77G_js.useTranslations("agents.workflow.runPanel");
1745
- const nodes = chunkE7GVGD4Z_js.useWorkflowStore((state) => state.nodes);
1746
- const isRunning = chunkE7GVGD4Z_js.useWorkflowStore((state) => state.isRunning);
1747
- const nodeResults = chunkE7GVGD4Z_js.useWorkflowStore((state) => state.nodeResults);
1747
+ const nodes = chunkLFWRE3A3_js.useWorkflowStore((state) => state.nodes);
1748
+ const isRunning = chunkLFWRE3A3_js.useWorkflowStore((state) => state.isRunning);
1749
+ const nodeResults = chunkLFWRE3A3_js.useWorkflowStore((state) => state.nodeResults);
1748
1750
  const startNode = nodes.find((node) => node.type === "start");
1749
1751
  const hasEndNode = nodes.some((node) => node.type === "end");
1750
1752
  const hasValidStartConfig = Boolean(
@@ -2029,8 +2031,8 @@ function inferVariables(config, nodeType) {
2029
2031
  }
2030
2032
  function VariableInspector({ open, onClose }) {
2031
2033
  const translations = chunkYXN2K77G_js.useTranslations("agents.workflow.variableInspector");
2032
- const nodes = chunkE7GVGD4Z_js.useWorkflowStore((state) => state.nodes);
2033
- const edges = chunkE7GVGD4Z_js.useWorkflowStore((state) => state.edges);
2034
+ const nodes = chunkLFWRE3A3_js.useWorkflowStore((state) => state.nodes);
2035
+ const edges = chunkLFWRE3A3_js.useWorkflowStore((state) => state.edges);
2034
2036
  const [expandedNodes, setExpandedNodes] = react.useState(/* @__PURE__ */ new Set());
2035
2037
  const toggleNodeExpansion = react.useCallback((nodeId) => {
2036
2038
  setExpandedNodes((current) => {
@@ -2092,8 +2094,8 @@ function VariableInspector({ open, onClose }) {
2092
2094
  /* @__PURE__ */ jsxRuntime.jsx("p", { className: "mt-2 text-sm text-gray-500 dark:text-gray-400", children: translations("noNodes") })
2093
2095
  ] }) : /* @__PURE__ */ jsxRuntime.jsx("div", { className: "divide-y divide-gray-100 dark:divide-gray-800", children: nodeVariableEntries.map((entry) => {
2094
2096
  const isExpanded = expandedNodes.has(entry.nodeId);
2095
- const IconComponent = chunkE7GVGD4Z_js.LOGIC_ICON_MAP[entry.nodeType];
2096
- const gradient = chunkE7GVGD4Z_js.LOGIC_NODE_GRADIENTS[entry.nodeType] ?? "from-gray-400 to-gray-500";
2097
+ const IconComponent = chunkLFWRE3A3_js.LOGIC_ICON_MAP[entry.nodeType];
2098
+ const gradient = chunkLFWRE3A3_js.LOGIC_NODE_GRADIENTS[entry.nodeType] ?? "from-gray-400 to-gray-500";
2097
2099
  const inputVariables = entry.variables.filter((variable) => variable.direction === "input");
2098
2100
  const outputVariables = entry.variables.filter((variable) => variable.direction === "output");
2099
2101
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { "data-testid": `variable-node-${entry.nodeId}`, children: [
@@ -2159,7 +2161,7 @@ function RunInputDialog({
2159
2161
  onRun
2160
2162
  }) {
2161
2163
  const t = chunkYXN2K77G_js.useTranslations("agents.workflow.runInputDialog");
2162
- const nodes = chunkE7GVGD4Z_js.useWorkflowStore((state) => state.nodes);
2164
+ const nodes = chunkLFWRE3A3_js.useWorkflowStore((state) => state.nodes);
2163
2165
  const [values, setValues] = react.useState({});
2164
2166
  const inputVariableNames = react.useMemo(() => {
2165
2167
  const storeStartNode = nodes.find((node) => node.type === "start");
@@ -2241,8 +2243,8 @@ function PreviewPanel({ open, onClose, workflowId, loadRuns }) {
2241
2243
  const [isLoadingRuns, setIsLoadingRuns] = react.useState(false);
2242
2244
  const [selectedRun, setSelectedRun] = react.useState(null);
2243
2245
  const [selectedNode, setSelectedNode] = react.useState(null);
2244
- const isRunning = chunkE7GVGD4Z_js.useWorkflowStore((state) => state.isRunning);
2245
- const nodeResults = chunkE7GVGD4Z_js.useWorkflowStore((state) => state.nodeResults);
2246
+ const isRunning = chunkLFWRE3A3_js.useWorkflowStore((state) => state.isRunning);
2247
+ const nodeResults = chunkLFWRE3A3_js.useWorkflowStore((state) => state.nodeResults);
2246
2248
  const refreshRuns = react.useCallback(async () => {
2247
2249
  setIsLoadingRuns(true);
2248
2250
  try {
@@ -2398,7 +2400,7 @@ var AutoSaveWorkspace = react.memo(function AutoSaveWorkspace2({
2398
2400
  onAutoSaveGraph(graph);
2399
2401
  }, [onAutoSaveGraph, onGraphSnapshot]);
2400
2402
  return /* @__PURE__ */ jsxRuntime.jsx(
2401
- chunkE7GVGD4Z_js.Workspace,
2403
+ chunkLFWRE3A3_js.Workspace,
2402
2404
  {
2403
2405
  ...workspaceProps,
2404
2406
  onGraphChange: handleGraphChange
@@ -2768,14 +2770,14 @@ function DslImportModal({ open, onClose, onImport }) {
2768
2770
  }
2769
2771
 
2770
2772
  // src/astrlabe/store/selectors.ts
2771
- var useCanUndo = () => chunkE7GVGD4Z_js.useWorkflowStore((state) => state.past.length > 0);
2772
- var useCanRedo = () => chunkE7GVGD4Z_js.useWorkflowStore((state) => state.future.length > 0);
2773
- var useHasCopied = () => chunkE7GVGD4Z_js.useWorkflowStore((state) => state.clipboard !== null);
2774
- var useContextMenu = () => chunkE7GVGD4Z_js.useWorkflowStore((state) => state.contextMenu);
2775
- var useEditingNodeId = () => chunkE7GVGD4Z_js.useWorkflowStore((state) => state.editingNodeId);
2776
- var useSelectedNodeCount = () => chunkE7GVGD4Z_js.useWorkflowStore((state) => state.nodes.filter((node) => node.selected).length);
2777
- var useIsRunning = () => chunkE7GVGD4Z_js.useWorkflowStore((state) => state.isRunning);
2778
- var useNodeResults = () => chunkE7GVGD4Z_js.useWorkflowStore((state) => state.nodeResults);
2773
+ var useCanUndo = () => chunkLFWRE3A3_js.useWorkflowStore((state) => state.past.length > 0);
2774
+ var useCanRedo = () => chunkLFWRE3A3_js.useWorkflowStore((state) => state.future.length > 0);
2775
+ var useHasCopied = () => chunkLFWRE3A3_js.useWorkflowStore((state) => state.clipboard !== null);
2776
+ var useContextMenu = () => chunkLFWRE3A3_js.useWorkflowStore((state) => state.contextMenu);
2777
+ var useEditingNodeId = () => chunkLFWRE3A3_js.useWorkflowStore((state) => state.editingNodeId);
2778
+ var useSelectedNodeCount = () => chunkLFWRE3A3_js.useWorkflowStore((state) => state.nodes.filter((node) => node.selected).length);
2779
+ var useIsRunning = () => chunkLFWRE3A3_js.useWorkflowStore((state) => state.isRunning);
2780
+ var useNodeResults = () => chunkLFWRE3A3_js.useWorkflowStore((state) => state.nodeResults);
2779
2781
  var DEFAULT_MAX_HISTORY = 50;
2780
2782
  function useUndoRedo(nodes, edges, setNodes, setEdges, maxHistory = DEFAULT_MAX_HISTORY) {
2781
2783
  const pastRef = react.useRef([]);
@@ -3063,223 +3065,223 @@ Object.defineProperty(exports, "validateWorkflowGraph", {
3063
3065
  });
3064
3066
  Object.defineProperty(exports, "AgentFlowNode", {
3065
3067
  enumerable: true,
3066
- get: function () { return chunkE7GVGD4Z_js.AgentFlowNode; }
3068
+ get: function () { return chunkLFWRE3A3_js.AgentFlowNode; }
3067
3069
  });
3068
3070
  Object.defineProperty(exports, "AgentToolFlowNode", {
3069
3071
  enumerable: true,
3070
- get: function () { return chunkE7GVGD4Z_js.AgentToolFlowNode; }
3072
+ get: function () { return chunkLFWRE3A3_js.AgentToolFlowNode; }
3071
3073
  });
3072
3074
  Object.defineProperty(exports, "AnswerFlowNode", {
3073
3075
  enumerable: true,
3074
- get: function () { return chunkE7GVGD4Z_js.AnswerFlowNode; }
3076
+ get: function () { return chunkLFWRE3A3_js.AnswerFlowNode; }
3075
3077
  });
3076
3078
  Object.defineProperty(exports, "AnthropicIcon", {
3077
3079
  enumerable: true,
3078
- get: function () { return chunkE7GVGD4Z_js.AnthropicIcon; }
3080
+ get: function () { return chunkLFWRE3A3_js.AnthropicIcon; }
3079
3081
  });
3080
3082
  Object.defineProperty(exports, "CodeFlowNode", {
3081
3083
  enumerable: true,
3082
- get: function () { return chunkE7GVGD4Z_js.CodeFlowNode; }
3084
+ get: function () { return chunkLFWRE3A3_js.CodeFlowNode; }
3083
3085
  });
3084
3086
  Object.defineProperty(exports, "CrewAIIcon", {
3085
3087
  enumerable: true,
3086
- get: function () { return chunkE7GVGD4Z_js.CrewAIIcon; }
3088
+ get: function () { return chunkLFWRE3A3_js.CrewAIIcon; }
3087
3089
  });
3088
3090
  Object.defineProperty(exports, "DocumentExtractorFlowNode", {
3089
3091
  enumerable: true,
3090
- get: function () { return chunkE7GVGD4Z_js.DocumentExtractorFlowNode; }
3092
+ get: function () { return chunkLFWRE3A3_js.DocumentExtractorFlowNode; }
3091
3093
  });
3092
3094
  Object.defineProperty(exports, "EndFlowNode", {
3093
3095
  enumerable: true,
3094
- get: function () { return chunkE7GVGD4Z_js.EndFlowNode; }
3096
+ get: function () { return chunkLFWRE3A3_js.EndFlowNode; }
3095
3097
  });
3096
3098
  Object.defineProperty(exports, "EntityFlowNode", {
3097
3099
  enumerable: true,
3098
- get: function () { return chunkE7GVGD4Z_js.EntityFlowNode; }
3100
+ get: function () { return chunkLFWRE3A3_js.EntityFlowNode; }
3099
3101
  });
3100
3102
  Object.defineProperty(exports, "FRAMEWORK_META", {
3101
3103
  enumerable: true,
3102
- get: function () { return chunkE7GVGD4Z_js.FRAMEWORK_META; }
3104
+ get: function () { return chunkLFWRE3A3_js.FRAMEWORK_META; }
3103
3105
  });
3104
3106
  Object.defineProperty(exports, "GoogleADKIcon", {
3105
3107
  enumerable: true,
3106
- get: function () { return chunkE7GVGD4Z_js.GoogleADKIcon; }
3108
+ get: function () { return chunkLFWRE3A3_js.GoogleADKIcon; }
3107
3109
  });
3108
3110
  Object.defineProperty(exports, "GroupFlowNode", {
3109
3111
  enumerable: true,
3110
- get: function () { return chunkE7GVGD4Z_js.GroupFlowNode; }
3112
+ get: function () { return chunkLFWRE3A3_js.GroupFlowNode; }
3111
3113
  });
3112
3114
  Object.defineProperty(exports, "HttpRequestFlowNode", {
3113
3115
  enumerable: true,
3114
- get: function () { return chunkE7GVGD4Z_js.HttpRequestFlowNode; }
3116
+ get: function () { return chunkLFWRE3A3_js.HttpRequestFlowNode; }
3115
3117
  });
3116
3118
  Object.defineProperty(exports, "IfElseFlowNode", {
3117
3119
  enumerable: true,
3118
- get: function () { return chunkE7GVGD4Z_js.IfElseFlowNode; }
3120
+ get: function () { return chunkLFWRE3A3_js.IfElseFlowNode; }
3119
3121
  });
3120
3122
  Object.defineProperty(exports, "IterationFlowNode", {
3121
3123
  enumerable: true,
3122
- get: function () { return chunkE7GVGD4Z_js.IterationFlowNode; }
3124
+ get: function () { return chunkLFWRE3A3_js.IterationFlowNode; }
3123
3125
  });
3124
3126
  Object.defineProperty(exports, "IterationStartFlowNode", {
3125
3127
  enumerable: true,
3126
- get: function () { return chunkE7GVGD4Z_js.IterationStartFlowNode; }
3128
+ get: function () { return chunkLFWRE3A3_js.IterationStartFlowNode; }
3127
3129
  });
3128
3130
  Object.defineProperty(exports, "KnowledgeBaseFlowNode", {
3129
3131
  enumerable: true,
3130
- get: function () { return chunkE7GVGD4Z_js.KnowledgeBaseFlowNode; }
3132
+ get: function () { return chunkLFWRE3A3_js.KnowledgeBaseFlowNode; }
3131
3133
  });
3132
3134
  Object.defineProperty(exports, "LOGIC_ICON_MAP", {
3133
3135
  enumerable: true,
3134
- get: function () { return chunkE7GVGD4Z_js.LOGIC_ICON_MAP; }
3136
+ get: function () { return chunkLFWRE3A3_js.LOGIC_ICON_MAP; }
3135
3137
  });
3136
3138
  Object.defineProperty(exports, "LOGIC_NODE_BADGE_COLORS", {
3137
3139
  enumerable: true,
3138
- get: function () { return chunkE7GVGD4Z_js.LOGIC_NODE_BADGE_COLORS; }
3140
+ get: function () { return chunkLFWRE3A3_js.LOGIC_NODE_BADGE_COLORS; }
3139
3141
  });
3140
3142
  Object.defineProperty(exports, "LOGIC_NODE_GRADIENTS", {
3141
3143
  enumerable: true,
3142
- get: function () { return chunkE7GVGD4Z_js.LOGIC_NODE_GRADIENTS; }
3144
+ get: function () { return chunkLFWRE3A3_js.LOGIC_NODE_GRADIENTS; }
3143
3145
  });
3144
3146
  Object.defineProperty(exports, "LOGIC_NODE_HANDLE_COLORS", {
3145
3147
  enumerable: true,
3146
- get: function () { return chunkE7GVGD4Z_js.LOGIC_NODE_HANDLE_COLORS; }
3148
+ get: function () { return chunkLFWRE3A3_js.LOGIC_NODE_HANDLE_COLORS; }
3147
3149
  });
3148
3150
  Object.defineProperty(exports, "LangChainIcon", {
3149
3151
  enumerable: true,
3150
- get: function () { return chunkE7GVGD4Z_js.LangChainIcon; }
3152
+ get: function () { return chunkLFWRE3A3_js.LangChainIcon; }
3151
3153
  });
3152
3154
  Object.defineProperty(exports, "ListOperatorFlowNode", {
3153
3155
  enumerable: true,
3154
- get: function () { return chunkE7GVGD4Z_js.ListOperatorFlowNode; }
3156
+ get: function () { return chunkLFWRE3A3_js.ListOperatorFlowNode; }
3155
3157
  });
3156
3158
  Object.defineProperty(exports, "LogicNodeModal", {
3157
3159
  enumerable: true,
3158
- get: function () { return chunkE7GVGD4Z_js.LogicNodeModal; }
3160
+ get: function () { return chunkLFWRE3A3_js.LogicNodeModal; }
3159
3161
  });
3160
3162
  Object.defineProperty(exports, "MINIMAP_NODE_COLORS", {
3161
3163
  enumerable: true,
3162
- get: function () { return chunkE7GVGD4Z_js.MINIMAP_NODE_COLORS; }
3164
+ get: function () { return chunkLFWRE3A3_js.MINIMAP_NODE_COLORS; }
3163
3165
  });
3164
3166
  Object.defineProperty(exports, "NodeCard", {
3165
3167
  enumerable: true,
3166
- get: function () { return chunkE7GVGD4Z_js.NodeCard; }
3168
+ get: function () { return chunkLFWRE3A3_js.NodeCard; }
3167
3169
  });
3168
3170
  Object.defineProperty(exports, "NodeContextMenu", {
3169
3171
  enumerable: true,
3170
- get: function () { return chunkE7GVGD4Z_js.NodeContextMenu; }
3172
+ get: function () { return chunkLFWRE3A3_js.NodeContextMenu; }
3171
3173
  });
3172
3174
  Object.defineProperty(exports, "NoteFlowNode", {
3173
3175
  enumerable: true,
3174
- get: function () { return chunkE7GVGD4Z_js.NoteFlowNode; }
3176
+ get: function () { return chunkLFWRE3A3_js.NoteFlowNode; }
3175
3177
  });
3176
3178
  Object.defineProperty(exports, "OpenAIIcon", {
3177
3179
  enumerable: true,
3178
- get: function () { return chunkE7GVGD4Z_js.OpenAIIcon; }
3180
+ get: function () { return chunkLFWRE3A3_js.OpenAIIcon; }
3179
3181
  });
3180
3182
  Object.defineProperty(exports, "PanelContextMenu", {
3181
3183
  enumerable: true,
3182
- get: function () { return chunkE7GVGD4Z_js.PanelContextMenu; }
3184
+ get: function () { return chunkLFWRE3A3_js.PanelContextMenu; }
3183
3185
  });
3184
3186
  Object.defineProperty(exports, "ParameterExtractorFlowNode", {
3185
3187
  enumerable: true,
3186
- get: function () { return chunkE7GVGD4Z_js.ParameterExtractorFlowNode; }
3188
+ get: function () { return chunkLFWRE3A3_js.ParameterExtractorFlowNode; }
3187
3189
  });
3188
3190
  Object.defineProperty(exports, "QuestionClassifierFlowNode", {
3189
3191
  enumerable: true,
3190
- get: function () { return chunkE7GVGD4Z_js.QuestionClassifierFlowNode; }
3192
+ get: function () { return chunkLFWRE3A3_js.QuestionClassifierFlowNode; }
3191
3193
  });
3192
3194
  Object.defineProperty(exports, "RuleFlowNode", {
3193
3195
  enumerable: true,
3194
- get: function () { return chunkE7GVGD4Z_js.RuleFlowNode; }
3196
+ get: function () { return chunkLFWRE3A3_js.RuleFlowNode; }
3195
3197
  });
3196
3198
  Object.defineProperty(exports, "SelectionContextMenu", {
3197
3199
  enumerable: true,
3198
- get: function () { return chunkE7GVGD4Z_js.SelectionContextMenu; }
3200
+ get: function () { return chunkLFWRE3A3_js.SelectionContextMenu; }
3199
3201
  });
3200
3202
  Object.defineProperty(exports, "StartFlowNode", {
3201
3203
  enumerable: true,
3202
- get: function () { return chunkE7GVGD4Z_js.StartFlowNode; }
3204
+ get: function () { return chunkLFWRE3A3_js.StartFlowNode; }
3203
3205
  });
3204
3206
  Object.defineProperty(exports, "StrandsIcon", {
3205
3207
  enumerable: true,
3206
- get: function () { return chunkE7GVGD4Z_js.StrandsIcon; }
3208
+ get: function () { return chunkLFWRE3A3_js.StrandsIcon; }
3207
3209
  });
3208
3210
  Object.defineProperty(exports, "TemplateTransformFlowNode", {
3209
3211
  enumerable: true,
3210
- get: function () { return chunkE7GVGD4Z_js.TemplateTransformFlowNode; }
3212
+ get: function () { return chunkLFWRE3A3_js.TemplateTransformFlowNode; }
3211
3213
  });
3212
3214
  Object.defineProperty(exports, "ToolFlowNode", {
3213
3215
  enumerable: true,
3214
- get: function () { return chunkE7GVGD4Z_js.ToolFlowNode; }
3216
+ get: function () { return chunkLFWRE3A3_js.ToolFlowNode; }
3215
3217
  });
3216
3218
  Object.defineProperty(exports, "VariableAggregatorFlowNode", {
3217
3219
  enumerable: true,
3218
- get: function () { return chunkE7GVGD4Z_js.VariableAggregatorFlowNode; }
3220
+ get: function () { return chunkLFWRE3A3_js.VariableAggregatorFlowNode; }
3219
3221
  });
3220
3222
  Object.defineProperty(exports, "VariableAssignerFlowNode", {
3221
3223
  enumerable: true,
3222
- get: function () { return chunkE7GVGD4Z_js.VariableAssignerFlowNode; }
3224
+ get: function () { return chunkLFWRE3A3_js.VariableAssignerFlowNode; }
3223
3225
  });
3224
3226
  Object.defineProperty(exports, "WorkflowBuilderProvider", {
3225
3227
  enumerable: true,
3226
- get: function () { return chunkE7GVGD4Z_js.WorkflowBuilderProvider; }
3228
+ get: function () { return chunkLFWRE3A3_js.WorkflowBuilderProvider; }
3227
3229
  });
3228
3230
  Object.defineProperty(exports, "Workspace", {
3229
3231
  enumerable: true,
3230
- get: function () { return chunkE7GVGD4Z_js.Workspace; }
3232
+ get: function () { return chunkLFWRE3A3_js.Workspace; }
3231
3233
  });
3232
3234
  Object.defineProperty(exports, "getCompatibleModels", {
3233
3235
  enumerable: true,
3234
- get: function () { return chunkE7GVGD4Z_js.getCompatibleModels; }
3236
+ get: function () { return chunkLFWRE3A3_js.getCompatibleModels; }
3235
3237
  });
3236
3238
  Object.defineProperty(exports, "getDefaultFrameworkForModel", {
3237
3239
  enumerable: true,
3238
- get: function () { return chunkE7GVGD4Z_js.getDefaultFrameworkForModel; }
3240
+ get: function () { return chunkLFWRE3A3_js.getDefaultFrameworkForModel; }
3239
3241
  });
3240
3242
  Object.defineProperty(exports, "getEntityBadgeColor", {
3241
3243
  enumerable: true,
3242
- get: function () { return chunkE7GVGD4Z_js.getEntityBadgeColor; }
3244
+ get: function () { return chunkLFWRE3A3_js.getEntityBadgeColor; }
3243
3245
  });
3244
3246
  Object.defineProperty(exports, "getEntityGradient", {
3245
3247
  enumerable: true,
3246
- get: function () { return chunkE7GVGD4Z_js.getEntityGradient; }
3248
+ get: function () { return chunkLFWRE3A3_js.getEntityGradient; }
3247
3249
  });
3248
3250
  Object.defineProperty(exports, "getEntityHandleColor", {
3249
3251
  enumerable: true,
3250
- get: function () { return chunkE7GVGD4Z_js.getEntityHandleColor; }
3252
+ get: function () { return chunkLFWRE3A3_js.getEntityHandleColor; }
3251
3253
  });
3252
3254
  Object.defineProperty(exports, "getEntityIcon", {
3253
3255
  enumerable: true,
3254
- get: function () { return chunkE7GVGD4Z_js.getEntityIcon; }
3256
+ get: function () { return chunkLFWRE3A3_js.getEntityIcon; }
3255
3257
  });
3256
3258
  Object.defineProperty(exports, "getEntityMinimapColor", {
3257
3259
  enumerable: true,
3258
- get: function () { return chunkE7GVGD4Z_js.getEntityMinimapColor; }
3260
+ get: function () { return chunkLFWRE3A3_js.getEntityMinimapColor; }
3259
3261
  });
3260
3262
  Object.defineProperty(exports, "getFrameworkMeta", {
3261
3263
  enumerable: true,
3262
- get: function () { return chunkE7GVGD4Z_js.getFrameworkMeta; }
3264
+ get: function () { return chunkLFWRE3A3_js.getFrameworkMeta; }
3263
3265
  });
3264
3266
  Object.defineProperty(exports, "isModelCompatibleWithFramework", {
3265
3267
  enumerable: true,
3266
- get: function () { return chunkE7GVGD4Z_js.isModelCompatibleWithFramework; }
3268
+ get: function () { return chunkLFWRE3A3_js.isModelCompatibleWithFramework; }
3267
3269
  });
3268
3270
  Object.defineProperty(exports, "useModalStore", {
3269
3271
  enumerable: true,
3270
- get: function () { return chunkE7GVGD4Z_js.useModalStore; }
3272
+ get: function () { return chunkLFWRE3A3_js.useModalStore; }
3271
3273
  });
3272
3274
  Object.defineProperty(exports, "useWorkflowBuilderClient", {
3273
3275
  enumerable: true,
3274
- get: function () { return chunkE7GVGD4Z_js.useWorkflowBuilderClient; }
3276
+ get: function () { return chunkLFWRE3A3_js.useWorkflowBuilderClient; }
3275
3277
  });
3276
3278
  Object.defineProperty(exports, "useWorkflowBuilderClientOptional", {
3277
3279
  enumerable: true,
3278
- get: function () { return chunkE7GVGD4Z_js.useWorkflowBuilderClientOptional; }
3280
+ get: function () { return chunkLFWRE3A3_js.useWorkflowBuilderClientOptional; }
3279
3281
  });
3280
3282
  Object.defineProperty(exports, "useWorkflowStore", {
3281
3283
  enumerable: true,
3282
- get: function () { return chunkE7GVGD4Z_js.useWorkflowStore; }
3284
+ get: function () { return chunkLFWRE3A3_js.useWorkflowStore; }
3283
3285
  });
3284
3286
  Object.defineProperty(exports, "GraphNodeBadge", {
3285
3287
  enumerable: true,