@datatechsolutions/ui 2.11.89 → 2.11.91

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.
Files changed (115) hide show
  1. package/dist/astrlabe/index.js +108 -106
  2. package/dist/astrlabe/index.mjs +5 -3
  3. package/dist/astrlabe/workflow-canvas.js +5 -3
  4. package/dist/astrlabe/workflow-canvas.mjs +4 -2
  5. package/dist/{chunk-G7DZU3NM.mjs → chunk-256TJHVO.mjs} +3 -3
  6. package/dist/{chunk-G7DZU3NM.mjs.map → chunk-256TJHVO.mjs.map} +1 -1
  7. package/dist/{chunk-D4TESEYK.mjs → chunk-36G7GAPU.mjs} +24 -7
  8. package/dist/chunk-36G7GAPU.mjs.map +1 -0
  9. package/dist/{chunk-NBCOVUQP.mjs → chunk-6OWD54HK.mjs} +3 -3
  10. package/dist/{chunk-NBCOVUQP.mjs.map → chunk-6OWD54HK.mjs.map} +1 -1
  11. package/dist/{chunk-5HXDJBVX.mjs → chunk-7JFAOHZ3.mjs} +4 -4
  12. package/dist/{chunk-5HXDJBVX.mjs.map → chunk-7JFAOHZ3.mjs.map} +1 -1
  13. package/dist/{chunk-SAYVWIMJ.js → chunk-AP7OWR6S.js} +4 -4
  14. package/dist/{chunk-SAYVWIMJ.js.map → chunk-AP7OWR6S.js.map} +1 -1
  15. package/dist/{chunk-URDQSUW6.js → chunk-B5NZVS4A.js} +67 -67
  16. package/dist/{chunk-URDQSUW6.js.map → chunk-B5NZVS4A.js.map} +1 -1
  17. package/dist/{chunk-UUHV5KHF.js → chunk-BVCS7RBR.js} +33 -33
  18. package/dist/{chunk-UUHV5KHF.js.map → chunk-BVCS7RBR.js.map} +1 -1
  19. package/dist/{chunk-X2KCCQPL.js → chunk-C7KAF363.js} +55 -55
  20. package/dist/{chunk-X2KCCQPL.js.map → chunk-C7KAF363.js.map} +1 -1
  21. package/dist/{chunk-HK6J6HQP.mjs → chunk-CBVRUJ7N.mjs} +11 -24
  22. package/dist/chunk-CBVRUJ7N.mjs.map +1 -0
  23. package/dist/{chunk-F4TOOARV.mjs → chunk-CG3P5Z5U.mjs} +3 -3
  24. package/dist/{chunk-F4TOOARV.mjs.map → chunk-CG3P5Z5U.mjs.map} +1 -1
  25. package/dist/{chunk-RV555OEO.mjs → chunk-E2ZGFN2H.mjs} +4 -4
  26. package/dist/{chunk-RV555OEO.mjs.map → chunk-E2ZGFN2H.mjs.map} +1 -1
  27. package/dist/{chunk-Q2MG7S2E.js → chunk-E32B2MVK.js} +15 -15
  28. package/dist/{chunk-Q2MG7S2E.js.map → chunk-E32B2MVK.js.map} +1 -1
  29. package/dist/{chunk-GEUGFYLO.mjs → chunk-FDSU7GPS.mjs} +3 -3
  30. package/dist/{chunk-GEUGFYLO.mjs.map → chunk-FDSU7GPS.mjs.map} +1 -1
  31. package/dist/{chunk-UVEPTYZC.js → chunk-GWRJ5L36.js} +12 -12
  32. package/dist/{chunk-UVEPTYZC.js.map → chunk-GWRJ5L36.js.map} +1 -1
  33. package/dist/{chunk-XOZMUCMF.mjs → chunk-HPIKJS5B.mjs} +3 -3
  34. package/dist/{chunk-XOZMUCMF.mjs.map → chunk-HPIKJS5B.mjs.map} +1 -1
  35. package/dist/{chunk-TOEMSC4P.mjs → chunk-IEWFVP42.mjs} +6 -6
  36. package/dist/{chunk-TOEMSC4P.mjs.map → chunk-IEWFVP42.mjs.map} +1 -1
  37. package/dist/{chunk-ZJQ5RLGK.mjs → chunk-J4QUCX27.mjs} +1177 -390
  38. package/dist/chunk-J4QUCX27.mjs.map +1 -0
  39. package/dist/{chunk-TLDVFFAK.mjs → chunk-KHAMY7MA.mjs} +3 -3
  40. package/dist/{chunk-TLDVFFAK.mjs.map → chunk-KHAMY7MA.mjs.map} +1 -1
  41. package/dist/{chunk-YXPHJ2BQ.js → chunk-L5VEY7G4.js} +13 -2
  42. package/dist/chunk-L5VEY7G4.js.map +1 -0
  43. package/dist/{chunk-2URBM4LA.js → chunk-MLAIUJYC.js} +6 -6
  44. package/dist/{chunk-2URBM4LA.js.map → chunk-MLAIUJYC.js.map} +1 -1
  45. package/dist/{chunk-64G2HBRQ.mjs → chunk-OE4Z4FKM.mjs} +13 -3
  46. package/dist/chunk-OE4Z4FKM.mjs.map +1 -0
  47. package/dist/{chunk-LBALE4JX.js → chunk-OQDWU6AE.js} +67 -67
  48. package/dist/{chunk-LBALE4JX.js.map → chunk-OQDWU6AE.js.map} +1 -1
  49. package/dist/{chunk-JUTOBBBI.mjs → chunk-Q7WGFPGK.mjs} +4 -4
  50. package/dist/{chunk-JUTOBBBI.mjs.map → chunk-Q7WGFPGK.mjs.map} +1 -1
  51. package/dist/{chunk-TZ62G5WM.js → chunk-R5KUEOPU.js} +84 -66
  52. package/dist/chunk-R5KUEOPU.js.map +1 -0
  53. package/dist/{chunk-3YVQXDKJ.js → chunk-SIBJRWUB.js} +4 -4
  54. package/dist/{chunk-3YVQXDKJ.js.map → chunk-SIBJRWUB.js.map} +1 -1
  55. package/dist/{chunk-ZARCUQA6.js → chunk-SOYGVHPZ.js} +53 -53
  56. package/dist/{chunk-ZARCUQA6.js.map → chunk-SOYGVHPZ.js.map} +1 -1
  57. package/dist/{chunk-4667D2ZT.mjs → chunk-U4BTEKZT.mjs} +3 -3
  58. package/dist/{chunk-4667D2ZT.mjs.map → chunk-U4BTEKZT.mjs.map} +1 -1
  59. package/dist/{chunk-NAQ32ZPG.mjs → chunk-URMZJ3WF.mjs} +7 -7
  60. package/dist/{chunk-NAQ32ZPG.mjs.map → chunk-URMZJ3WF.mjs.map} +1 -1
  61. package/dist/{chunk-SUHNSUMH.mjs → chunk-VPNZDLR6.mjs} +4 -4
  62. package/dist/{chunk-SUHNSUMH.mjs.map → chunk-VPNZDLR6.mjs.map} +1 -1
  63. package/dist/{chunk-SV4SMITM.js → chunk-WIKMIULO.js} +36 -36
  64. package/dist/{chunk-SV4SMITM.js.map → chunk-WIKMIULO.js.map} +1 -1
  65. package/dist/{chunk-K26RY4EQ.js → chunk-WY3YDQXK.js} +26 -26
  66. package/dist/{chunk-K26RY4EQ.js.map → chunk-WY3YDQXK.js.map} +1 -1
  67. package/dist/{chunk-ZHHRWC27.js → chunk-Y4DNREFH.js} +135 -148
  68. package/dist/chunk-Y4DNREFH.js.map +1 -0
  69. package/dist/{chunk-MXFEU7A6.js → chunk-YMGJ4FZZ.js} +4 -4
  70. package/dist/{chunk-MXFEU7A6.js.map → chunk-YMGJ4FZZ.js.map} +1 -1
  71. package/dist/{chunk-KNXAOJAK.js → chunk-YN4IEDE4.js} +1250 -461
  72. package/dist/chunk-YN4IEDE4.js.map +1 -0
  73. package/dist/index.d.mts +306 -2
  74. package/dist/index.d.ts +306 -2
  75. package/dist/index.js +754 -744
  76. package/dist/index.mjs +3 -1
  77. package/dist/platform/admin/index.js +12 -10
  78. package/dist/platform/admin/index.mjs +6 -4
  79. package/dist/platform/agents-workspace.js +8 -8
  80. package/dist/platform/agents-workspace.mjs +7 -7
  81. package/dist/platform/app-shell.js +5 -3
  82. package/dist/platform/app-shell.mjs +4 -2
  83. package/dist/platform/auth/index.js +29 -27
  84. package/dist/platform/auth/index.mjs +6 -4
  85. package/dist/platform/billing/index.js +5 -3
  86. package/dist/platform/billing/index.mjs +4 -2
  87. package/dist/platform/impersonation/index.js +5 -3
  88. package/dist/platform/impersonation/index.mjs +4 -2
  89. package/dist/platform/index.js +100 -100
  90. package/dist/platform/index.mjs +20 -20
  91. package/dist/platform/pages/index.d.mts +2 -2
  92. package/dist/platform/pages/index.d.ts +2 -2
  93. package/dist/platform/pages/index.js +197 -195
  94. package/dist/platform/pages/index.js.map +1 -1
  95. package/dist/platform/pages/index.mjs +9 -7
  96. package/dist/platform/pages/index.mjs.map +1 -1
  97. package/dist/platform/settings/index.js +9 -7
  98. package/dist/platform/settings/index.mjs +8 -6
  99. package/dist/platform/workflow-api-client.d.mts +1 -1
  100. package/dist/platform/workflow-api-client.d.ts +1 -1
  101. package/dist/platform/workflow-api-client.js +64 -60
  102. package/dist/platform/workflow-api-client.mjs +1 -1
  103. package/dist/platform/workflow-canvas-shell.js +6 -4
  104. package/dist/platform/workflow-canvas-shell.mjs +5 -3
  105. package/dist/{workflow-api-client-Dy1Ph8W-.d.ts → workflow-api-client-CXN5iaih.d.ts} +34 -2
  106. package/dist/{workflow-api-client-C8gPn_D1.d.mts → workflow-api-client-XU83zq0k.d.mts} +34 -2
  107. package/package.json +1 -1
  108. package/dist/chunk-64G2HBRQ.mjs.map +0 -1
  109. package/dist/chunk-D4TESEYK.mjs.map +0 -1
  110. package/dist/chunk-HK6J6HQP.mjs.map +0 -1
  111. package/dist/chunk-KNXAOJAK.js.map +0 -1
  112. package/dist/chunk-TZ62G5WM.js.map +0 -1
  113. package/dist/chunk-YXPHJ2BQ.js.map +0 -1
  114. package/dist/chunk-ZHHRWC27.js.map +0 -1
  115. package/dist/chunk-ZJQ5RLGK.mjs.map +0 -1
@@ -1,8 +1,8 @@
1
1
  "use client";
2
2
  'use strict';
3
3
 
4
- var chunkTZ62G5WM_js = require('./chunk-TZ62G5WM.js');
5
- var chunkKNXAOJAK_js = require('./chunk-KNXAOJAK.js');
4
+ var chunkR5KUEOPU_js = require('./chunk-R5KUEOPU.js');
5
+ var chunkYN4IEDE4_js = require('./chunk-YN4IEDE4.js');
6
6
  var chunkYXN2K77G_js = require('./chunk-YXN2K77G.js');
7
7
  var chunkC7BI5LQ6_js = require('./chunk-C7BI5LQ6.js');
8
8
  var react = require('react');
@@ -71,7 +71,7 @@ function OutputSchemaBuilder({ value, onChange, depth = 0 }) {
71
71
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "rounded-xl border border-dashed border-slate-300 bg-slate-50/40 p-4 text-center dark:border-slate-700 dark:bg-slate-900/30", children: [
72
72
  /* @__PURE__ */ jsxRuntime.jsx("p", { className: "mb-3 text-xs text-slate-500 dark:text-slate-400", children: "No schema yet \u2014 agent text is exposed as a raw string. Add a schema to enforce structured output." }),
73
73
  /* @__PURE__ */ jsxRuntime.jsx(
74
- chunkKNXAOJAK_js.Button,
74
+ chunkYN4IEDE4_js.Button,
75
75
  {
76
76
  type: "button",
77
77
  outline: true,
@@ -135,7 +135,7 @@ function OutputSchemaBuilder({ value, onChange, depth = 0 }) {
135
135
  },
136
136
  index
137
137
  )),
138
- /* @__PURE__ */ jsxRuntime.jsx(chunkKNXAOJAK_js.Button, { type: "button", outline: true, onClick: addField, children: "+ Add field" })
138
+ /* @__PURE__ */ jsxRuntime.jsx(chunkYN4IEDE4_js.Button, { type: "button", outline: true, onClick: addField, children: "+ Add field" })
139
139
  ] })
140
140
  ] });
141
141
  }
@@ -158,7 +158,7 @@ function FieldEditor({
158
158
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "rounded-xl border border-slate-200 bg-slate-50/60 p-3 dark:border-slate-700 dark:bg-slate-900/40", children: [
159
159
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "grid grid-cols-[1fr_140px_auto_auto] items-end gap-2", children: [
160
160
  /* @__PURE__ */ jsxRuntime.jsx(
161
- chunkKNXAOJAK_js.FormInput,
161
+ chunkYN4IEDE4_js.FormInput,
162
162
  {
163
163
  label: "Name",
164
164
  value: field.name,
@@ -167,7 +167,7 @@ function FieldEditor({
167
167
  }
168
168
  ),
169
169
  /* @__PURE__ */ jsxRuntime.jsx(
170
- chunkKNXAOJAK_js.FormSelect,
170
+ chunkYN4IEDE4_js.FormSelect,
171
171
  {
172
172
  label: "Type",
173
173
  value: field.type,
@@ -187,10 +187,10 @@ function FieldEditor({
187
187
  ),
188
188
  "Required"
189
189
  ] }),
190
- /* @__PURE__ */ jsxRuntime.jsx(chunkKNXAOJAK_js.Button, { type: "button", plain: true, onClick: onRemove, children: "Remove" })
190
+ /* @__PURE__ */ jsxRuntime.jsx(chunkYN4IEDE4_js.Button, { type: "button", plain: true, onClick: onRemove, children: "Remove" })
191
191
  ] }),
192
192
  /* @__PURE__ */ jsxRuntime.jsx(
193
- chunkKNXAOJAK_js.FormInput,
193
+ chunkYN4IEDE4_js.FormInput,
194
194
  {
195
195
  label: "Description (optional)",
196
196
  value: field.description,
@@ -283,7 +283,7 @@ function OutputCard({ label, value }) {
283
283
  function AgentProfileHeader({ agent, models, t, selectedModelId, setSelectedModelId, selectedFramework, temperature, setTemperature, elo, setElo, onChanged }) {
284
284
  const modelName = models.find((model) => model.id === selectedModelId)?.name ?? selectedModelId ?? "\u2014";
285
285
  const avatarUrl = agent.avatar;
286
- const frameworkMeta = chunkTZ62G5WM_js.getFrameworkMeta(selectedFramework);
286
+ const frameworkMeta = chunkR5KUEOPU_js.getFrameworkMeta(selectedFramework);
287
287
  const tierInfo = getEloTier(elo);
288
288
  const difficultyConfig = {
289
289
  beginner: { color: "bg-cyan-100 text-cyan-700 dark:bg-cyan-900/30 dark:text-cyan-400", labelKey: "agentDrawer.tierBeginner" },
@@ -559,13 +559,13 @@ function AgentCapabilityCard({ elo, setElo, models, selectedModelId, setSelected
559
559
  ] });
560
560
  }
561
561
  function ConfigTab({ models, t, selectedModelId, setSelectedModelId, selectedFramework, setSelectedFramework, markDirty, connectedProviderTypes }) {
562
- const frameworkKeys = Object.keys(chunkTZ62G5WM_js.FRAMEWORK_META);
562
+ const frameworkKeys = Object.keys(chunkR5KUEOPU_js.FRAMEWORK_META);
563
563
  const hasProviderConstraints = connectedProviderTypes.length > 0;
564
- const compatibleModels = chunkTZ62G5WM_js.getCompatibleModels(models, selectedFramework);
564
+ const compatibleModels = chunkR5KUEOPU_js.getCompatibleModels(models, selectedFramework);
565
565
  const handleFrameworkChange = react.useCallback((newFramework) => {
566
566
  setSelectedFramework(newFramework);
567
- if (!chunkTZ62G5WM_js.isModelCompatibleWithFramework(selectedModelId, newFramework)) {
568
- const compatible = chunkTZ62G5WM_js.getCompatibleModels(models, newFramework);
567
+ if (!chunkR5KUEOPU_js.isModelCompatibleWithFramework(selectedModelId, newFramework)) {
568
+ const compatible = chunkR5KUEOPU_js.getCompatibleModels(models, newFramework);
569
569
  if (compatible.length > 0) {
570
570
  setSelectedModelId(compatible[0].id);
571
571
  }
@@ -576,10 +576,10 @@ function ConfigTab({ models, t, selectedModelId, setSelectedModelId, selectedFra
576
576
  /* @__PURE__ */ jsxRuntime.jsxs("div", { children: [
577
577
  /* @__PURE__ */ jsxRuntime.jsx("label", { className: "mb-2 block text-xs font-medium text-gray-500 dark:text-gray-400", children: t("agentDrawer.framework") }),
578
578
  /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex flex-wrap gap-1.5", children: frameworkKeys.map((key) => {
579
- const meta = chunkTZ62G5WM_js.FRAMEWORK_META[key];
579
+ const meta = chunkR5KUEOPU_js.FRAMEWORK_META[key];
580
580
  const isSelected = key === selectedFramework;
581
- const compatCount = chunkTZ62G5WM_js.getCompatibleModels(models, key).length;
582
- const isCompatibleWithProviders = !hasProviderConstraints || chunkTZ62G5WM_js.isFrameworkCompatibleWithProviders(key, connectedProviderTypes);
581
+ const compatCount = chunkR5KUEOPU_js.getCompatibleModels(models, key).length;
582
+ const isCompatibleWithProviders = !hasProviderConstraints || chunkR5KUEOPU_js.isFrameworkCompatibleWithProviders(key, connectedProviderTypes);
583
583
  return /* @__PURE__ */ jsxRuntime.jsxs(
584
584
  "button",
585
585
  {
@@ -611,7 +611,7 @@ function ConfigTab({ models, t, selectedModelId, setSelectedModelId, selectedFra
611
611
  ] }),
612
612
  /* @__PURE__ */ jsxRuntime.jsx("div", { className: "grid grid-cols-2 gap-2", children: models.map((model) => {
613
613
  const isSelected = model.id === selectedModelId;
614
- const isCompatible = chunkTZ62G5WM_js.isModelCompatibleWithFramework(model.id, selectedFramework);
614
+ const isCompatible = chunkR5KUEOPU_js.isModelCompatibleWithFramework(model.id, selectedFramework);
615
615
  const { IconComponent, color, providerLabel } = getModelIcon(model.id);
616
616
  return /* @__PURE__ */ jsxRuntime.jsxs(
617
617
  "button",
@@ -735,7 +735,7 @@ function PromptTab({
735
735
  ] });
736
736
  }
737
737
  function ResultsTab({ agentId, t }) {
738
- const nodeResults = chunkTZ62G5WM_js.useWorkflowStore((state) => state.nodeResults);
738
+ const nodeResults = chunkR5KUEOPU_js.useWorkflowStore((state) => state.nodeResults);
739
739
  const agentResult = react.useMemo(() => {
740
740
  return nodeResults[agentId] ?? null;
741
741
  }, [nodeResults, agentId]);
@@ -825,10 +825,10 @@ function ModelsTab({ modelProviders, selectedProviderId, onSelectProvider, model
825
825
  const providerModels = modelsByProvider.find((p) => p.provider.id === selectedProviderId);
826
826
  if (!providerModels || providerModels.models.length === 0) return /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-xs text-gray-400 dark:text-gray-500", children: t("agentDrawer.noModelsForProvider") });
827
827
  const compatibleModels = providerModels.models.filter(
828
- (m) => chunkTZ62G5WM_js.isModelCompatibleWithFramework(m.id, agentFramework)
828
+ (m) => chunkR5KUEOPU_js.isModelCompatibleWithFramework(m.id, agentFramework)
829
829
  );
830
830
  const incompatibleModels = providerModels.models.filter(
831
- (m) => !chunkTZ62G5WM_js.isModelCompatibleWithFramework(m.id, agentFramework)
831
+ (m) => !chunkR5KUEOPU_js.isModelCompatibleWithFramework(m.id, agentFramework)
832
832
  );
833
833
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { children: [
834
834
  /* @__PURE__ */ jsxRuntime.jsx("label", { className: "mb-2 block text-xs font-medium text-gray-500 dark:text-gray-400", children: t("agentDrawer.selectModel") }),
@@ -901,7 +901,7 @@ function ToolsTab({ agentTools, enabledToolIds, onToggle, agentFramework, t }) {
901
901
  ] }),
902
902
  tool.description && /* @__PURE__ */ jsxRuntime.jsx("p", { className: "truncate text-[10px] text-gray-400 dark:text-gray-500", children: tool.description }),
903
903
  tool.compatibleFrameworks && tool.compatibleFrameworks.length > 0 && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "mt-1 flex flex-wrap gap-0.5", children: tool.compatibleFrameworks.map((framework) => {
904
- const meta = chunkTZ62G5WM_js.getFrameworkMeta(framework);
904
+ const meta = chunkR5KUEOPU_js.getFrameworkMeta(framework);
905
905
  const isCurrentFw = framework === agentFramework;
906
906
  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: [
907
907
  /* @__PURE__ */ jsxRuntime.jsx(meta.IconComponent, { className: "h-2.5 w-2.5" }),
@@ -918,7 +918,7 @@ function ToolsTab({ agentTools, enabledToolIds, onToggle, agentFramework, t }) {
918
918
  event.stopPropagation();
919
919
  },
920
920
  children: /* @__PURE__ */ jsxRuntime.jsx(
921
- chunkKNXAOJAK_js.ToggleSwitch,
921
+ chunkYN4IEDE4_js.ToggleSwitch,
922
922
  {
923
923
  checked: isEnabled,
924
924
  onChange: () => onToggle(tool.agentToolId),
@@ -1077,9 +1077,9 @@ function AdvancedTab({
1077
1077
  }
1078
1078
  function AgentModal({ onSaved, onPersist }) {
1079
1079
  const t = chunkYXN2K77G_js.useTranslations("agents.workflow");
1080
- const activeModal = chunkTZ62G5WM_js.useModalStore((s) => s.activeModal);
1081
- const agentData = chunkTZ62G5WM_js.useModalStore((s) => s.agentData);
1082
- const closeModal = chunkTZ62G5WM_js.useModalStore((s) => s.closeModal);
1080
+ const activeModal = chunkR5KUEOPU_js.useModalStore((s) => s.activeModal);
1081
+ const agentData = chunkR5KUEOPU_js.useModalStore((s) => s.agentData);
1082
+ const closeModal = chunkR5KUEOPU_js.useModalStore((s) => s.closeModal);
1083
1083
  const open = activeModal === "agent";
1084
1084
  const agent = agentData?.agent ?? null;
1085
1085
  const models = agentData?.models ?? [];
@@ -1241,7 +1241,7 @@ function AgentModal({ onSaved, onPersist }) {
1241
1241
  )
1242
1242
  ] });
1243
1243
  return /* @__PURE__ */ jsxRuntime.jsxs(
1244
- chunkKNXAOJAK_js.GlassModal,
1244
+ chunkYN4IEDE4_js.GlassModal,
1245
1245
  {
1246
1246
  open,
1247
1247
  onClose: handleClose,
@@ -1429,7 +1429,7 @@ function SubworkflowModal({ onSaved, onMaximize }) {
1429
1429
  const markDirty = useSubworkflowStore((s) => s.markDirty);
1430
1430
  const markSaved = useSubworkflowStore((s) => s.markSaved);
1431
1431
  const closeModal = useSubworkflowStore((s) => s.closeModal);
1432
- const agentBehind = chunkTZ62G5WM_js.useModalStore((s) => s.activeModal === "agent" ? s.agentData?.agent?.name : null);
1432
+ const agentBehind = chunkR5KUEOPU_js.useModalStore((s) => s.activeModal === "agent" ? s.agentData?.agent?.name : null);
1433
1433
  const isCreateMode = !tool?.toolId;
1434
1434
  const initialGraph = react.useMemo(() => {
1435
1435
  const config = tool?.config;
@@ -1458,9 +1458,9 @@ function SubworkflowModal({ onSaved, onMaximize }) {
1458
1458
  }, [tool, onSaved, name, category, description, timeoutMs, latestGraphRef, markSaved]);
1459
1459
  if (!tool) return null;
1460
1460
  const categoryKey = category ?? "external";
1461
- const gradient = tool.color ?? chunkTZ62G5WM_js.CATEGORY_COLORS[categoryKey] ?? chunkTZ62G5WM_js.CATEGORY_COLORS.external;
1462
- const categoryPill = chunkTZ62G5WM_js.CATEGORY_PILL_COLORS[categoryKey] ?? chunkTZ62G5WM_js.CATEGORY_PILL_COLORS.external;
1463
- const IconComponent = chunkTZ62G5WM_js.ICON_MAP[tool.icon ?? ""] ?? outline.ArrowPathRoundedSquareIcon;
1461
+ const gradient = tool.color ?? chunkR5KUEOPU_js.CATEGORY_COLORS[categoryKey] ?? chunkR5KUEOPU_js.CATEGORY_COLORS.external;
1462
+ const categoryPill = chunkR5KUEOPU_js.CATEGORY_PILL_COLORS[categoryKey] ?? chunkR5KUEOPU_js.CATEGORY_PILL_COLORS.external;
1463
+ const IconComponent = chunkR5KUEOPU_js.ICON_MAP[tool.icon ?? ""] ?? outline.ArrowPathRoundedSquareIcon;
1464
1464
  const graph = latestGraphRef.current;
1465
1465
  const startNode = graph.nodes.find((n) => n.type === "start");
1466
1466
  const endNode = graph.nodes.find((n) => n.type === "end");
@@ -1493,7 +1493,7 @@ function SubworkflowModal({ onSaved, onMaximize }) {
1493
1493
  ] })
1494
1494
  ] });
1495
1495
  return /* @__PURE__ */ jsxRuntime.jsx(
1496
- chunkKNXAOJAK_js.GlassModal,
1496
+ chunkYN4IEDE4_js.GlassModal,
1497
1497
  {
1498
1498
  open,
1499
1499
  onClose: closeModal,
@@ -1525,7 +1525,7 @@ function SubworkflowModal({ onSaved, onMaximize }) {
1525
1525
  {
1526
1526
  type: "button",
1527
1527
  onClick: () => setCategory(cat),
1528
- className: `rounded-full px-2 py-1 text-[9px] font-semibold transition-all ${cat === category ? `${chunkTZ62G5WM_js.CATEGORY_PILL_COLORS[cat] ?? chunkTZ62G5WM_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"}`,
1528
+ className: `rounded-full px-2 py-1 text-[9px] font-semibold transition-all ${cat === category ? `${chunkR5KUEOPU_js.CATEGORY_PILL_COLORS[cat] ?? chunkR5KUEOPU_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"}`,
1529
1529
  children: cat
1530
1530
  },
1531
1531
  cat
@@ -1612,7 +1612,7 @@ function SubworkflowModal({ onSaved, onMaximize }) {
1612
1612
  /* @__PURE__ */ jsxRuntime.jsx("div", { className: "mt-auto" })
1613
1613
  ] }),
1614
1614
  /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex-1", children: /* @__PURE__ */ jsxRuntime.jsx(
1615
- chunkTZ62G5WM_js.WorkflowCanvas,
1615
+ chunkR5KUEOPU_js.WorkflowCanvas,
1616
1616
  {
1617
1617
  initialGraph,
1618
1618
  agents: [],
@@ -1628,9 +1628,9 @@ function SubworkflowModal({ onSaved, onMaximize }) {
1628
1628
  }
1629
1629
  function PipelineSettingsModal({ onSave }) {
1630
1630
  const t = chunkYXN2K77G_js.useTranslations("agents.workflow");
1631
- const activeModal = chunkTZ62G5WM_js.useModalStore((s) => s.activeModal);
1632
- const data = chunkTZ62G5WM_js.useModalStore((s) => s.pipelineSettingsData);
1633
- const closeModal = chunkTZ62G5WM_js.useModalStore((s) => s.closeModal);
1631
+ const activeModal = chunkR5KUEOPU_js.useModalStore((s) => s.activeModal);
1632
+ const data = chunkR5KUEOPU_js.useModalStore((s) => s.pipelineSettingsData);
1633
+ const closeModal = chunkR5KUEOPU_js.useModalStore((s) => s.closeModal);
1634
1634
  const open = activeModal === "pipeline-settings";
1635
1635
  const [nameValue, setNameValue] = react.useState("");
1636
1636
  const [descriptionValue, setDescriptionValue] = react.useState("");
@@ -1692,7 +1692,7 @@ function PipelineSettingsModal({ onSave }) {
1692
1692
  }
1693
1693
  ),
1694
1694
  /* @__PURE__ */ jsxRuntime.jsxs(
1695
- chunkKNXAOJAK_js.Button,
1695
+ chunkYN4IEDE4_js.Button,
1696
1696
  {
1697
1697
  type: "submit",
1698
1698
  form: "pipeline-settings-form",
@@ -1707,7 +1707,7 @@ function PipelineSettingsModal({ onSave }) {
1707
1707
  )
1708
1708
  ] });
1709
1709
  return /* @__PURE__ */ jsxRuntime.jsx(
1710
- chunkKNXAOJAK_js.GlassModal,
1710
+ chunkYN4IEDE4_js.GlassModal,
1711
1711
  {
1712
1712
  open,
1713
1713
  onClose: closeModal,
@@ -1721,7 +1721,7 @@ function PipelineSettingsModal({ onSave }) {
1721
1721
  onSubmit: handleSubmit,
1722
1722
  children: /* @__PURE__ */ jsxRuntime.jsxs("form", { id: "pipeline-settings-form", onSubmit: handleSubmit, className: "space-y-5", children: [
1723
1723
  /* @__PURE__ */ jsxRuntime.jsx(
1724
- chunkKNXAOJAK_js.FormInput,
1724
+ chunkYN4IEDE4_js.FormInput,
1725
1725
  {
1726
1726
  label: t("pipelineName"),
1727
1727
  value: nameValue,
@@ -1731,7 +1731,7 @@ function PipelineSettingsModal({ onSave }) {
1731
1731
  }
1732
1732
  ),
1733
1733
  /* @__PURE__ */ jsxRuntime.jsx(
1734
- chunkKNXAOJAK_js.FormTextarea,
1734
+ chunkYN4IEDE4_js.FormTextarea,
1735
1735
  {
1736
1736
  label: t("pipelineDescription"),
1737
1737
  value: descriptionValue,
@@ -1742,7 +1742,7 @@ function PipelineSettingsModal({ onSave }) {
1742
1742
  ),
1743
1743
  lifecycleAvailable && /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
1744
1744
  /* @__PURE__ */ jsxRuntime.jsx(
1745
- chunkKNXAOJAK_js.FormInput,
1745
+ chunkYN4IEDE4_js.FormInput,
1746
1746
  {
1747
1747
  label: t("pipelineSlug", { _: "Slug" }),
1748
1748
  value: slugValue,
@@ -1869,7 +1869,7 @@ function RunReplayModal({
1869
1869
  }
1870
1870
  ),
1871
1871
  /* @__PURE__ */ jsxRuntime.jsxs(
1872
- chunkKNXAOJAK_js.Button,
1872
+ chunkYN4IEDE4_js.Button,
1873
1873
  {
1874
1874
  type: "submit",
1875
1875
  form: "run-replay-form",
@@ -1884,7 +1884,7 @@ function RunReplayModal({
1884
1884
  ] })
1885
1885
  ] });
1886
1886
  return /* @__PURE__ */ jsxRuntime.jsx(
1887
- chunkKNXAOJAK_js.GlassModal,
1887
+ chunkYN4IEDE4_js.GlassModal,
1888
1888
  {
1889
1889
  open,
1890
1890
  onClose,
@@ -1958,7 +1958,7 @@ function RowEditor({
1958
1958
  ]
1959
1959
  }
1960
1960
  ) : isJson ? /* @__PURE__ */ jsxRuntime.jsx(
1961
- chunkKNXAOJAK_js.FormTextarea,
1961
+ chunkYN4IEDE4_js.FormTextarea,
1962
1962
  {
1963
1963
  value: row.value,
1964
1964
  onValueChange: (v) => onChange({ value: v }),
@@ -1966,7 +1966,7 @@ function RowEditor({
1966
1966
  className: "font-mono"
1967
1967
  }
1968
1968
  ) : /* @__PURE__ */ jsxRuntime.jsx(
1969
- chunkKNXAOJAK_js.FormInput,
1969
+ chunkYN4IEDE4_js.FormInput,
1970
1970
  {
1971
1971
  type: row.kind === "number" ? "number" : "text",
1972
1972
  value: row.value,
@@ -2070,7 +2070,7 @@ function ExecutionTimelinePanel({
2070
2070
  /* @__PURE__ */ jsxRuntime.jsx("div", { className: "truncate font-medium text-slate-900 dark:text-white", children: entry.nodeId }),
2071
2071
  /* @__PURE__ */ jsxRuntime.jsx("div", { className: "text-xs text-slate-500 dark:text-slate-400", children: entry.nodeType })
2072
2072
  ] }),
2073
- /* @__PURE__ */ jsxRuntime.jsxs(chunkKNXAOJAK_js.Badge, { color: meta.color, children: [
2073
+ /* @__PURE__ */ jsxRuntime.jsxs(chunkYN4IEDE4_js.Badge, { color: meta.color, children: [
2074
2074
  /* @__PURE__ */ jsxRuntime.jsx(Icon, { className: "mr-1 h-3 w-3" }),
2075
2075
  labels[entry.status]
2076
2076
  ] })
@@ -2100,7 +2100,7 @@ function NodeInspector({
2100
2100
  /* @__PURE__ */ jsxRuntime.jsx("h3", { className: "truncate text-base font-semibold text-slate-900 dark:text-white", children: entry.nodeId }),
2101
2101
  /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-xs text-slate-500 dark:text-slate-400", children: entry.nodeType })
2102
2102
  ] }),
2103
- /* @__PURE__ */ jsxRuntime.jsx(chunkKNXAOJAK_js.Badge, { color: meta.color, children: labels[entry.status] })
2103
+ /* @__PURE__ */ jsxRuntime.jsx(chunkYN4IEDE4_js.Badge, { color: meta.color, children: labels[entry.status] })
2104
2104
  ] }),
2105
2105
  /* @__PURE__ */ jsxRuntime.jsxs("dl", { className: "grid grid-cols-2 gap-3 text-xs text-slate-500 dark:text-slate-400", children: [
2106
2106
  /* @__PURE__ */ jsxRuntime.jsxs("div", { children: [
@@ -2270,7 +2270,7 @@ function RuleConditionBuilder({ value, onChange, depth = 0 }) {
2270
2270
  };
2271
2271
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "space-y-3 rounded-xl border border-slate-200 bg-slate-50/60 p-3 dark:border-slate-700 dark:bg-slate-900/40", children: [
2272
2272
  /* @__PURE__ */ jsxRuntime.jsx(
2273
- chunkKNXAOJAK_js.FormSelect,
2273
+ chunkYN4IEDE4_js.FormSelect,
2274
2274
  {
2275
2275
  label: "Operator",
2276
2276
  value: value.operator,
@@ -2293,7 +2293,7 @@ function SimpleEditor({
2293
2293
  const isTruthy = value.operator === "truthy";
2294
2294
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "grid grid-cols-1 gap-3 sm:grid-cols-2", children: [
2295
2295
  /* @__PURE__ */ jsxRuntime.jsx(
2296
- chunkKNXAOJAK_js.FormInput,
2296
+ chunkYN4IEDE4_js.FormInput,
2297
2297
  {
2298
2298
  label: "Field",
2299
2299
  hint: "Dotted reference into the variable pool \u2014 e.g. `parse-pricing.margin`, `inputs.fuelType`",
@@ -2303,7 +2303,7 @@ function SimpleEditor({
2303
2303
  }
2304
2304
  ),
2305
2305
  !isTruthy && /* @__PURE__ */ jsxRuntime.jsx(
2306
- chunkKNXAOJAK_js.FormInput,
2306
+ chunkYN4IEDE4_js.FormInput,
2307
2307
  {
2308
2308
  label: "Value",
2309
2309
  hint: "Literal. Numeric operators coerce via `as f64`.",
@@ -2319,7 +2319,7 @@ function ThresholdEditor({
2319
2319
  }) {
2320
2320
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "grid grid-cols-1 gap-3 sm:grid-cols-3", children: [
2321
2321
  /* @__PURE__ */ jsxRuntime.jsx(
2322
- chunkKNXAOJAK_js.FormInput,
2322
+ chunkYN4IEDE4_js.FormInput,
2323
2323
  {
2324
2324
  label: "Field",
2325
2325
  value: value.field ?? "",
@@ -2328,7 +2328,7 @@ function ThresholdEditor({
2328
2328
  }
2329
2329
  ),
2330
2330
  /* @__PURE__ */ jsxRuntime.jsx(
2331
- chunkKNXAOJAK_js.FormSelect,
2331
+ chunkYN4IEDE4_js.FormSelect,
2332
2332
  {
2333
2333
  label: "Direction",
2334
2334
  value: value.comparison ?? "gte",
@@ -2342,7 +2342,7 @@ function ThresholdEditor({
2342
2342
  }
2343
2343
  ),
2344
2344
  /* @__PURE__ */ jsxRuntime.jsx(
2345
- chunkKNXAOJAK_js.FormInput,
2345
+ chunkYN4IEDE4_js.FormInput,
2346
2346
  {
2347
2347
  label: "Threshold",
2348
2348
  type: "number",
@@ -2359,7 +2359,7 @@ function RegexEditor({
2359
2359
  }) {
2360
2360
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "grid grid-cols-1 gap-3 sm:grid-cols-2", children: [
2361
2361
  /* @__PURE__ */ jsxRuntime.jsx(
2362
- chunkKNXAOJAK_js.FormInput,
2362
+ chunkYN4IEDE4_js.FormInput,
2363
2363
  {
2364
2364
  label: "Field",
2365
2365
  value: value.field ?? "",
@@ -2368,7 +2368,7 @@ function RegexEditor({
2368
2368
  }
2369
2369
  ),
2370
2370
  /* @__PURE__ */ jsxRuntime.jsx(
2371
- chunkKNXAOJAK_js.FormInput,
2371
+ chunkYN4IEDE4_js.FormInput,
2372
2372
  {
2373
2373
  label: "Pattern",
2374
2374
  hint: "Rust regex syntax \u2014 `(?i)` etc. supported.",
@@ -2396,7 +2396,7 @@ function TimeWindowEditor({
2396
2396
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "space-y-3", children: [
2397
2397
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "grid grid-cols-1 gap-3 sm:grid-cols-2", children: [
2398
2398
  /* @__PURE__ */ jsxRuntime.jsx(
2399
- chunkKNXAOJAK_js.FormSelect,
2399
+ chunkYN4IEDE4_js.FormSelect,
2400
2400
  {
2401
2401
  label: "Timezone",
2402
2402
  value: value.timezone ?? "UTC",
@@ -2405,7 +2405,7 @@ function TimeWindowEditor({
2405
2405
  }
2406
2406
  ),
2407
2407
  /* @__PURE__ */ jsxRuntime.jsx(
2408
- chunkKNXAOJAK_js.FormInput,
2408
+ chunkYN4IEDE4_js.FormInput,
2409
2409
  {
2410
2410
  label: "Timestamp field (optional)",
2411
2411
  hint: "Pulls a timestamp from the pool. Leave blank to use the run's wall-clock.",
@@ -2418,7 +2418,7 @@ function TimeWindowEditor({
2418
2418
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "space-y-2", children: [
2419
2419
  windows.map((win, index) => /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "grid grid-cols-[1fr_1fr_auto] items-end gap-2 rounded-lg border border-slate-200 p-2 dark:border-slate-700", children: [
2420
2420
  /* @__PURE__ */ jsxRuntime.jsx(
2421
- chunkKNXAOJAK_js.FormInput,
2421
+ chunkYN4IEDE4_js.FormInput,
2422
2422
  {
2423
2423
  label: `Start (hour)`,
2424
2424
  type: "number",
@@ -2429,7 +2429,7 @@ function TimeWindowEditor({
2429
2429
  }
2430
2430
  ),
2431
2431
  /* @__PURE__ */ jsxRuntime.jsx(
2432
- chunkKNXAOJAK_js.FormInput,
2432
+ chunkYN4IEDE4_js.FormInput,
2433
2433
  {
2434
2434
  label: `End (hour)`,
2435
2435
  type: "number",
@@ -2439,9 +2439,9 @@ function TimeWindowEditor({
2439
2439
  onValueChange: (raw) => update(index, { endHour: clampHour(raw, 24) })
2440
2440
  }
2441
2441
  ),
2442
- /* @__PURE__ */ jsxRuntime.jsx(chunkKNXAOJAK_js.Button, { type: "button", plain: true, onClick: () => remove(index), children: "Remove" })
2442
+ /* @__PURE__ */ jsxRuntime.jsx(chunkYN4IEDE4_js.Button, { type: "button", plain: true, onClick: () => remove(index), children: "Remove" })
2443
2443
  ] }, index)),
2444
- /* @__PURE__ */ jsxRuntime.jsx(chunkKNXAOJAK_js.Button, { type: "button", outline: true, onClick: add, children: "+ Add window" })
2444
+ /* @__PURE__ */ jsxRuntime.jsx(chunkYN4IEDE4_js.Button, { type: "button", outline: true, onClick: add, children: "+ Add window" })
2445
2445
  ] })
2446
2446
  ] });
2447
2447
  }
@@ -2464,7 +2464,7 @@ function BooleanGroupEditor({
2464
2464
  });
2465
2465
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "space-y-3", children: [
2466
2466
  /* @__PURE__ */ jsxRuntime.jsx(
2467
- chunkKNXAOJAK_js.FormSelect,
2467
+ chunkYN4IEDE4_js.FormSelect,
2468
2468
  {
2469
2469
  label: "Combinator",
2470
2470
  value: value.combinator ?? "and",
@@ -2482,9 +2482,9 @@ function BooleanGroupEditor({
2482
2482
  depth
2483
2483
  }
2484
2484
  ),
2485
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: "mt-2 text-right", children: /* @__PURE__ */ jsxRuntime.jsx(chunkKNXAOJAK_js.Button, { type: "button", plain: true, onClick: () => remove(index), children: "Remove operand" }) })
2485
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "mt-2 text-right", children: /* @__PURE__ */ jsxRuntime.jsx(chunkYN4IEDE4_js.Button, { type: "button", plain: true, onClick: () => remove(index), children: "Remove operand" }) })
2486
2486
  ] }, index)),
2487
- /* @__PURE__ */ jsxRuntime.jsx(chunkKNXAOJAK_js.Button, { type: "button", outline: true, onClick: add, children: "+ Add operand" })
2487
+ /* @__PURE__ */ jsxRuntime.jsx(chunkYN4IEDE4_js.Button, { type: "button", outline: true, onClick: add, children: "+ Add operand" })
2488
2488
  ] })
2489
2489
  ] });
2490
2490
  }
@@ -2520,7 +2520,7 @@ function RuleActionBuilder({ value, onChange }) {
2520
2520
  };
2521
2521
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "space-y-3 rounded-xl border border-slate-200 bg-slate-50/60 p-3 dark:border-slate-700 dark:bg-slate-900/40", children: [
2522
2522
  /* @__PURE__ */ jsxRuntime.jsx(
2523
- chunkKNXAOJAK_js.FormSelect,
2523
+ chunkYN4IEDE4_js.FormSelect,
2524
2524
  {
2525
2525
  label: "Action type",
2526
2526
  value: type,
@@ -2530,7 +2530,7 @@ function RuleActionBuilder({ value, onChange }) {
2530
2530
  ),
2531
2531
  type === "adjust_price" && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "grid grid-cols-1 gap-3 sm:grid-cols-2", children: [
2532
2532
  /* @__PURE__ */ jsxRuntime.jsx(
2533
- chunkKNXAOJAK_js.FormInput,
2533
+ chunkYN4IEDE4_js.FormInput,
2534
2534
  {
2535
2535
  label: "Multiplier",
2536
2536
  type: "number",
@@ -2540,7 +2540,7 @@ function RuleActionBuilder({ value, onChange }) {
2540
2540
  }
2541
2541
  ),
2542
2542
  /* @__PURE__ */ jsxRuntime.jsx(
2543
- chunkKNXAOJAK_js.FormInput,
2543
+ chunkYN4IEDE4_js.FormInput,
2544
2544
  {
2545
2545
  label: "Reason code",
2546
2546
  value: stringParam(params.reason),
@@ -2550,7 +2550,7 @@ function RuleActionBuilder({ value, onChange }) {
2550
2550
  )
2551
2551
  ] }),
2552
2552
  type === "enforce_min_margin" && /* @__PURE__ */ jsxRuntime.jsx(
2553
- chunkKNXAOJAK_js.FormInput,
2553
+ chunkYN4IEDE4_js.FormInput,
2554
2554
  {
2555
2555
  label: "Floor (fraction, e.g. 0.08)",
2556
2556
  type: "number",
@@ -2560,7 +2560,7 @@ function RuleActionBuilder({ value, onChange }) {
2560
2560
  }
2561
2561
  ),
2562
2562
  type === "realign_to_competitor" && /* @__PURE__ */ jsxRuntime.jsx(
2563
- chunkKNXAOJAK_js.FormInput,
2563
+ chunkYN4IEDE4_js.FormInput,
2564
2564
  {
2565
2565
  label: "Tolerance (fraction)",
2566
2566
  type: "number",
@@ -2570,7 +2570,7 @@ function RuleActionBuilder({ value, onChange }) {
2570
2570
  }
2571
2571
  ),
2572
2572
  type === "request_manager_approval" && /* @__PURE__ */ jsxRuntime.jsx(
2573
- chunkKNXAOJAK_js.FormInput,
2573
+ chunkYN4IEDE4_js.FormInput,
2574
2574
  {
2575
2575
  label: "Approval limit (fraction)",
2576
2576
  type: "number",
@@ -2580,7 +2580,7 @@ function RuleActionBuilder({ value, onChange }) {
2580
2580
  }
2581
2581
  ),
2582
2582
  type === "round_to" && /* @__PURE__ */ jsxRuntime.jsx(
2583
- chunkKNXAOJAK_js.FormInput,
2583
+ chunkYN4IEDE4_js.FormInput,
2584
2584
  {
2585
2585
  label: "Step (e.g. 0.009)",
2586
2586
  type: "number",
@@ -2591,7 +2591,7 @@ function RuleActionBuilder({ value, onChange }) {
2591
2591
  ),
2592
2592
  type === "alert" && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "grid grid-cols-1 gap-3 sm:grid-cols-2", children: [
2593
2593
  /* @__PURE__ */ jsxRuntime.jsx(
2594
- chunkKNXAOJAK_js.FormInput,
2594
+ chunkYN4IEDE4_js.FormInput,
2595
2595
  {
2596
2596
  label: "Channel",
2597
2597
  value: stringParam(params.channel),
@@ -2600,7 +2600,7 @@ function RuleActionBuilder({ value, onChange }) {
2600
2600
  }
2601
2601
  ),
2602
2602
  /* @__PURE__ */ jsxRuntime.jsx(
2603
- chunkKNXAOJAK_js.FormInput,
2603
+ chunkYN4IEDE4_js.FormInput,
2604
2604
  {
2605
2605
  label: "Severity",
2606
2606
  value: stringParam(params.severity),
@@ -2638,7 +2638,7 @@ function CustomParamsEditor({
2638
2638
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "space-y-2", children: [
2639
2639
  entries.map(([key, value], index) => /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "grid grid-cols-[1fr_1fr_auto] items-end gap-2", children: [
2640
2640
  /* @__PURE__ */ jsxRuntime.jsx(
2641
- chunkKNXAOJAK_js.FormInput,
2641
+ chunkYN4IEDE4_js.FormInput,
2642
2642
  {
2643
2643
  label: "Key",
2644
2644
  value: key,
@@ -2646,16 +2646,16 @@ function CustomParamsEditor({
2646
2646
  }
2647
2647
  ),
2648
2648
  /* @__PURE__ */ jsxRuntime.jsx(
2649
- chunkKNXAOJAK_js.FormInput,
2649
+ chunkYN4IEDE4_js.FormInput,
2650
2650
  {
2651
2651
  label: "Value",
2652
2652
  value: String(value ?? ""),
2653
2653
  onValueChange: (raw) => update(index, key, raw)
2654
2654
  }
2655
2655
  ),
2656
- /* @__PURE__ */ jsxRuntime.jsx(chunkKNXAOJAK_js.Button, { type: "button", plain: true, onClick: () => remove(index), children: "Remove" })
2656
+ /* @__PURE__ */ jsxRuntime.jsx(chunkYN4IEDE4_js.Button, { type: "button", plain: true, onClick: () => remove(index), children: "Remove" })
2657
2657
  ] }, index)),
2658
- /* @__PURE__ */ jsxRuntime.jsx(chunkKNXAOJAK_js.Button, { type: "button", outline: true, onClick: add, children: "+ Add param" })
2658
+ /* @__PURE__ */ jsxRuntime.jsx(chunkYN4IEDE4_js.Button, { type: "button", outline: true, onClick: add, children: "+ Add param" })
2659
2659
  ] });
2660
2660
  }
2661
2661
  function numberParam(value, fallback) {
@@ -2685,9 +2685,9 @@ function RuleForm({ value, onChange }) {
2685
2685
  );
2686
2686
  const update = (key, v) => onChange({ ...value, [key]: v });
2687
2687
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "space-y-5", children: [
2688
- /* @__PURE__ */ jsxRuntime.jsxs(chunkKNXAOJAK_js.FormGrid, { children: [
2688
+ /* @__PURE__ */ jsxRuntime.jsxs(chunkYN4IEDE4_js.FormGrid, { children: [
2689
2689
  /* @__PURE__ */ jsxRuntime.jsx(
2690
- chunkKNXAOJAK_js.FormInput,
2690
+ chunkYN4IEDE4_js.FormInput,
2691
2691
  {
2692
2692
  label: "Name",
2693
2693
  required: true,
@@ -2696,7 +2696,7 @@ function RuleForm({ value, onChange }) {
2696
2696
  }
2697
2697
  ),
2698
2698
  /* @__PURE__ */ jsxRuntime.jsx(
2699
- chunkKNXAOJAK_js.FormInput,
2699
+ chunkYN4IEDE4_js.FormInput,
2700
2700
  {
2701
2701
  label: "Priority",
2702
2702
  type: "number",
@@ -2706,7 +2706,7 @@ function RuleForm({ value, onChange }) {
2706
2706
  }
2707
2707
  ),
2708
2708
  /* @__PURE__ */ jsxRuntime.jsx(
2709
- chunkKNXAOJAK_js.FormSelect,
2709
+ chunkYN4IEDE4_js.FormSelect,
2710
2710
  {
2711
2711
  label: "Enabled",
2712
2712
  value: value.enabled ? "true" : "false",
@@ -2718,7 +2718,7 @@ function RuleForm({ value, onChange }) {
2718
2718
  }
2719
2719
  ),
2720
2720
  /* @__PURE__ */ jsxRuntime.jsx(
2721
- chunkKNXAOJAK_js.FormTextarea,
2721
+ chunkYN4IEDE4_js.FormTextarea,
2722
2722
  {
2723
2723
  label: "Description",
2724
2724
  rows: 2,
@@ -2730,7 +2730,7 @@ function RuleForm({ value, onChange }) {
2730
2730
  /* @__PURE__ */ jsxRuntime.jsxs("section", { children: [
2731
2731
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "mb-2 flex items-center justify-between", children: [
2732
2732
  /* @__PURE__ */ jsxRuntime.jsx("h3", { className: "text-sm font-semibold text-slate-700 dark:text-slate-200", children: "Condition" }),
2733
- /* @__PURE__ */ jsxRuntime.jsx(chunkKNXAOJAK_js.Badge, { color: "indigo", children: value.condition.operator })
2733
+ /* @__PURE__ */ jsxRuntime.jsx(chunkYN4IEDE4_js.Badge, { color: "indigo", children: value.condition.operator })
2734
2734
  ] }),
2735
2735
  /* @__PURE__ */ jsxRuntime.jsx(
2736
2736
  RuleConditionBuilder,
@@ -2743,7 +2743,7 @@ function RuleForm({ value, onChange }) {
2743
2743
  /* @__PURE__ */ jsxRuntime.jsxs("section", { children: [
2744
2744
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "mb-2 flex items-center justify-between", children: [
2745
2745
  /* @__PURE__ */ jsxRuntime.jsx("h3", { className: "text-sm font-semibold text-slate-700 dark:text-slate-200", children: "Action on match" }),
2746
- /* @__PURE__ */ jsxRuntime.jsx(chunkKNXAOJAK_js.Badge, { color: "fuchsia", children: value.action.type })
2746
+ /* @__PURE__ */ jsxRuntime.jsx(chunkYN4IEDE4_js.Badge, { color: "fuchsia", children: value.action.type })
2747
2747
  ] }),
2748
2748
  /* @__PURE__ */ jsxRuntime.jsx(
2749
2749
  RuleActionBuilder,
@@ -2765,7 +2765,7 @@ function RuleForm({ value, onChange }) {
2765
2765
  ),
2766
2766
  showAdvanced && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "mt-3 grid grid-cols-1 gap-3 sm:grid-cols-2", children: [
2767
2767
  /* @__PURE__ */ jsxRuntime.jsx(
2768
- chunkKNXAOJAK_js.FormInput,
2768
+ chunkYN4IEDE4_js.FormInput,
2769
2769
  {
2770
2770
  label: "Valid from (ISO 8601)",
2771
2771
  type: "datetime-local",
@@ -2774,7 +2774,7 @@ function RuleForm({ value, onChange }) {
2774
2774
  }
2775
2775
  ),
2776
2776
  /* @__PURE__ */ jsxRuntime.jsx(
2777
- chunkKNXAOJAK_js.FormInput,
2777
+ chunkYN4IEDE4_js.FormInput,
2778
2778
  {
2779
2779
  label: "Valid until (ISO 8601)",
2780
2780
  type: "datetime-local",
@@ -2783,7 +2783,7 @@ function RuleForm({ value, onChange }) {
2783
2783
  }
2784
2784
  ),
2785
2785
  /* @__PURE__ */ jsxRuntime.jsx(
2786
- chunkKNXAOJAK_js.FormSelect,
2786
+ chunkYN4IEDE4_js.FormSelect,
2787
2787
  {
2788
2788
  label: "Status",
2789
2789
  value: value.status ?? "active",
@@ -2792,7 +2792,7 @@ function RuleForm({ value, onChange }) {
2792
2792
  }
2793
2793
  ),
2794
2794
  /* @__PURE__ */ jsxRuntime.jsx(
2795
- chunkKNXAOJAK_js.FormInput,
2795
+ chunkYN4IEDE4_js.FormInput,
2796
2796
  {
2797
2797
  label: "Tags (comma-separated)",
2798
2798
  value: (value.tags ?? []).join(", "),
@@ -2899,12 +2899,12 @@ var LOGIC_NODE_ITEMS = [
2899
2899
  { nodeType: "variable_aggregator", nameKey: "variableAggregatorNode", descriptionKey: "variableAggregatorNodeDescription", subcategory: "data_processing" },
2900
2900
  { nodeType: "list_operator", nameKey: "listOperatorNode", descriptionKey: "listOperatorNodeDescription", subcategory: "data_processing" },
2901
2901
  // DocumentExtractor echoes its config today — pending a real
2902
- // extractor implementation, tag as experimental.
2903
- { nodeType: "document_extractor", nameKey: "documentExtractorNode", descriptionKey: "documentExtractorNodeDescription", subcategory: "data_processing", experimental: true },
2902
+ // extractor implementation. Tagged via EXPERIMENTAL_NODE_TYPES.
2903
+ { nodeType: "document_extractor", nameKey: "documentExtractorNode", descriptionKey: "documentExtractorNodeDescription", subcategory: "data_processing" },
2904
2904
  { nodeType: "datasource", nameKey: "datasourceNode", descriptionKey: "datasourceNodeDescription", subcategory: "data_processing" },
2905
2905
  // AI/ML
2906
- // KnowledgeBase is a stub (no vector store wired yet) hide by default.
2907
- { nodeType: "knowledge_base", nameKey: "knowledgeBaseNode", descriptionKey: "knowledgeBaseNodeDescription", subcategory: "ai_ml", experimental: true },
2906
+ // KnowledgeBase is a stub (no vector store wired yet). Tagged via EXPERIMENTAL_NODE_TYPES.
2907
+ { nodeType: "knowledge_base", nameKey: "knowledgeBaseNode", descriptionKey: "knowledgeBaseNodeDescription", subcategory: "ai_ml" },
2908
2908
  { nodeType: "answer", nameKey: "answerNode", descriptionKey: "answerNodeDescription", subcategory: "ai_ml" },
2909
2909
  { nodeType: "question_classifier", nameKey: "questionClassifierNode", descriptionKey: "questionClassifierNodeDescription", subcategory: "ai_ml" },
2910
2910
  { nodeType: "parameter_extractor", nameKey: "parameterExtractorNode", descriptionKey: "parameterExtractorNodeDescription", subcategory: "ai_ml" },
@@ -2976,8 +2976,8 @@ function CollapsibleSection({ title, icon, colorClass, defaultOpen = true, count
2976
2976
  ] });
2977
2977
  }
2978
2978
  function LogicNodeItemCard({ item, translationFunction }) {
2979
- const IconComponent = chunkTZ62G5WM_js.LOGIC_ICON_MAP[item.nodeType];
2980
- const gradient = chunkTZ62G5WM_js.LOGIC_NODE_GRADIENTS[item.nodeType] ?? "from-gray-400 to-gray-500";
2979
+ const IconComponent = chunkR5KUEOPU_js.LOGIC_ICON_MAP[item.nodeType];
2980
+ const gradient = chunkR5KUEOPU_js.LOGIC_NODE_GRADIENTS[item.nodeType] ?? "from-gray-400 to-gray-500";
2981
2981
  const defaultConfig = chunkC7BI5LQ6_js.createDefaultLogicNodeConfig(item.nodeType);
2982
2982
  const configJson = defaultConfig ? JSON.stringify(defaultConfig) : void 0;
2983
2983
  return /* @__PURE__ */ jsxRuntime.jsxs(
@@ -2999,7 +2999,6 @@ function LogicNodeItemCard({ item, translationFunction }) {
2999
2999
  function NodePalette({ agents, tools, agentTools = [], rules, entities = [], modelProviders = [], onCreateAgent, onCreateTool, onCreateAgentTool, onCreateRule, onCreateDatasource, onConfigureProvider }) {
3000
3000
  const t = chunkYXN2K77G_js.useTranslations("agents.workflow");
3001
3001
  const [searchQuery, setSearchQuery] = react.useState("");
3002
- const [showExperimental, setShowExperimental] = react.useState(false);
3003
3002
  const normalizedQuery = searchQuery.toLowerCase().trim();
3004
3003
  const filteredAgents = react.useMemo(
3005
3004
  () => normalizedQuery ? agents.filter(
@@ -3049,12 +3048,12 @@ function NodePalette({ agents, tools, agentTools = [], rules, entities = [], mod
3049
3048
  [entityTypes, normalizedQuery]
3050
3049
  );
3051
3050
  const filteredLogicItems = react.useMemo(() => {
3052
- const visibleByDefault = showExperimental ? LOGIC_NODE_ITEMS : LOGIC_NODE_ITEMS.filter((item) => !item.experimental);
3051
+ const visibleByDefault = LOGIC_NODE_ITEMS.filter((item) => !chunkR5KUEOPU_js.EXPERIMENTAL_NODE_TYPES.has(item.nodeType));
3053
3052
  if (!normalizedQuery) return visibleByDefault;
3054
3053
  return visibleByDefault.filter(
3055
3054
  (item) => t(item.nameKey).toLowerCase().includes(normalizedQuery) || t(item.descriptionKey).toLowerCase().includes(normalizedQuery)
3056
3055
  );
3057
- }, [normalizedQuery, showExperimental, t]);
3056
+ }, [normalizedQuery, t]);
3058
3057
  const groupedLogicItems = react.useMemo(() => {
3059
3058
  const groups = {
3060
3059
  control_flow: [],
@@ -3087,19 +3086,7 @@ function NodePalette({ agents, tools, agentTools = [], rules, entities = [], mod
3087
3086
  placeholder: t("searchPalette"),
3088
3087
  className: "liquid-surface w-full rounded-lg px-2.5 py-1.5 text-[11px] text-gray-900 placeholder-gray-400 outline-none transition-colors focus:ring-1 focus:ring-indigo-300/40 dark:text-white dark:placeholder-gray-500 dark:focus:ring-indigo-500/20"
3089
3088
  }
3090
- ) }),
3091
- /* @__PURE__ */ jsxRuntime.jsxs("label", { className: "mt-2 flex items-center gap-2 text-[10px] text-gray-500 dark:text-gray-400 select-none cursor-pointer", children: [
3092
- /* @__PURE__ */ jsxRuntime.jsx(
3093
- "input",
3094
- {
3095
- type: "checkbox",
3096
- checked: showExperimental,
3097
- onChange: (event) => setShowExperimental(event.target.checked),
3098
- className: "h-3 w-3 rounded border-gray-300 text-indigo-600 focus:ring-1 focus:ring-indigo-400/40 dark:border-gray-600"
3099
- }
3100
- ),
3101
- t("showExperimentalNodes", { _: "Show experimental" })
3102
- ] })
3089
+ ) })
3103
3090
  ] }),
3104
3091
  /* @__PURE__ */ jsxRuntime.jsx(
3105
3092
  CollapsibleSection,
@@ -3158,7 +3145,7 @@ function NodePalette({ agents, tools, agentTools = [], rules, entities = [], mod
3158
3145
  /* @__PURE__ */ jsxRuntime.jsx("p", { className: "truncate text-[10px] text-gray-400 dark:text-gray-500", children: tool.category })
3159
3146
  ] }),
3160
3147
  /* @__PURE__ */ jsxRuntime.jsx(
3161
- chunkKNXAOJAK_js.ToggleSwitch,
3148
+ chunkYN4IEDE4_js.ToggleSwitch,
3162
3149
  {
3163
3150
  checked: Boolean(tool.enabled),
3164
3151
  onChange: () => {
@@ -3199,7 +3186,7 @@ function NodePalette({ agents, tools, agentTools = [], rules, entities = [], mod
3199
3186
  ] })
3200
3187
  ] }),
3201
3188
  /* @__PURE__ */ jsxRuntime.jsx(
3202
- chunkKNXAOJAK_js.ToggleSwitch,
3189
+ chunkYN4IEDE4_js.ToggleSwitch,
3203
3190
  {
3204
3191
  checked: Boolean(rule.enabled),
3205
3192
  onChange: () => {
@@ -3235,8 +3222,8 @@ function NodePalette({ agents, tools, agentTools = [], rules, entities = [], mod
3235
3222
  limit: entity.defaultLimit
3236
3223
  });
3237
3224
  const dsLogo = getDatasourceLogo(entity.id);
3238
- const EntityIcon = chunkTZ62G5WM_js.getEntityIcon(entity.id);
3239
- const entityGradient = chunkTZ62G5WM_js.getEntityGradient(entity.id);
3225
+ const EntityIcon = chunkR5KUEOPU_js.getEntityIcon(entity.id);
3226
+ const entityGradient = chunkR5KUEOPU_js.getEntityGradient(entity.id);
3240
3227
  return /* @__PURE__ */ jsxRuntime.jsxs(
3241
3228
  "div",
3242
3229
  {
@@ -3256,7 +3243,7 @@ function NodePalette({ agents, tools, agentTools = [], rules, entities = [], mod
3256
3243
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-2", children: [
3257
3244
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: "rounded-full bg-slate-100 px-1.5 py-0.5 text-[9px] font-medium text-slate-600 dark:bg-white/10 dark:text-slate-300", children: "Read only" }),
3258
3245
  /* @__PURE__ */ jsxRuntime.jsx(
3259
- chunkKNXAOJAK_js.ToggleSwitch,
3246
+ chunkYN4IEDE4_js.ToggleSwitch,
3260
3247
  {
3261
3248
  checked: true,
3262
3249
  onChange: () => {
@@ -3634,9 +3621,9 @@ function formatDuration3(durationMs) {
3634
3621
  }
3635
3622
  function RunPanel({ open, onClose, onRun, onStop }) {
3636
3623
  const translations = chunkYXN2K77G_js.useTranslations("agents.workflow.runPanel");
3637
- const nodes = chunkTZ62G5WM_js.useWorkflowStore((state) => state.nodes);
3638
- const isRunning = chunkTZ62G5WM_js.useWorkflowStore((state) => state.isRunning);
3639
- const nodeResults = chunkTZ62G5WM_js.useWorkflowStore((state) => state.nodeResults);
3624
+ const nodes = chunkR5KUEOPU_js.useWorkflowStore((state) => state.nodes);
3625
+ const isRunning = chunkR5KUEOPU_js.useWorkflowStore((state) => state.isRunning);
3626
+ const nodeResults = chunkR5KUEOPU_js.useWorkflowStore((state) => state.nodeResults);
3640
3627
  const startNode = nodes.find((node) => node.type === "start");
3641
3628
  const hasEndNode = nodes.some((node) => node.type === "end");
3642
3629
  const hasValidStartConfig = Boolean(
@@ -3924,8 +3911,8 @@ function inferVariables(config, nodeType) {
3924
3911
  }
3925
3912
  function VariableInspector({ open, onClose }) {
3926
3913
  const translations = chunkYXN2K77G_js.useTranslations("agents.workflow.variableInspector");
3927
- const nodes = chunkTZ62G5WM_js.useWorkflowStore((state) => state.nodes);
3928
- const edges = chunkTZ62G5WM_js.useWorkflowStore((state) => state.edges);
3914
+ const nodes = chunkR5KUEOPU_js.useWorkflowStore((state) => state.nodes);
3915
+ const edges = chunkR5KUEOPU_js.useWorkflowStore((state) => state.edges);
3929
3916
  const [expandedNodes, setExpandedNodes] = react.useState(/* @__PURE__ */ new Set());
3930
3917
  const toggleNodeExpansion = react.useCallback((nodeId) => {
3931
3918
  setExpandedNodes((current) => {
@@ -3987,8 +3974,8 @@ function VariableInspector({ open, onClose }) {
3987
3974
  /* @__PURE__ */ jsxRuntime.jsx("p", { className: "mt-2 text-sm text-gray-500 dark:text-gray-400", children: translations("noNodes") })
3988
3975
  ] }) : /* @__PURE__ */ jsxRuntime.jsx("div", { className: "divide-y divide-gray-100 dark:divide-gray-800", children: nodeVariableEntries.map((entry) => {
3989
3976
  const isExpanded = expandedNodes.has(entry.nodeId);
3990
- const IconComponent = chunkTZ62G5WM_js.LOGIC_ICON_MAP[entry.nodeType];
3991
- const gradient = chunkTZ62G5WM_js.LOGIC_NODE_GRADIENTS[entry.nodeType] ?? "from-gray-400 to-gray-500";
3977
+ const IconComponent = chunkR5KUEOPU_js.LOGIC_ICON_MAP[entry.nodeType];
3978
+ const gradient = chunkR5KUEOPU_js.LOGIC_NODE_GRADIENTS[entry.nodeType] ?? "from-gray-400 to-gray-500";
3992
3979
  const inputVariables = entry.variables.filter((variable) => variable.direction === "input");
3993
3980
  const outputVariables = entry.variables.filter((variable) => variable.direction === "output");
3994
3981
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { "data-testid": `variable-node-${entry.nodeId}`, children: [
@@ -4054,7 +4041,7 @@ function RunInputDialog({
4054
4041
  onRun
4055
4042
  }) {
4056
4043
  const t = chunkYXN2K77G_js.useTranslations("agents.workflow.runInputDialog");
4057
- const nodes = chunkTZ62G5WM_js.useWorkflowStore((state) => state.nodes);
4044
+ const nodes = chunkR5KUEOPU_js.useWorkflowStore((state) => state.nodes);
4058
4045
  const [values, setValues] = react.useState({});
4059
4046
  const inputVariableNames = react.useMemo(() => {
4060
4047
  const storeStartNode = nodes.find((node) => node.type === "start");
@@ -4081,7 +4068,7 @@ function RunInputDialog({
4081
4068
  }, [onClose]);
4082
4069
  if (!open) return null;
4083
4070
  return /* @__PURE__ */ jsxRuntime.jsxs(
4084
- chunkKNXAOJAK_js.GlassModal,
4071
+ chunkYN4IEDE4_js.GlassModal,
4085
4072
  {
4086
4073
  open,
4087
4074
  onClose: handleClose,
@@ -4092,7 +4079,7 @@ function RunInputDialog({
4092
4079
  /* @__PURE__ */ jsxRuntime.jsx("div", { className: "space-y-3", children: inputVariableNames.length === 0 ? /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-center text-sm text-gray-500 dark:text-gray-400", children: t("noInputs") }) : inputVariableNames.map((variableName) => /* @__PURE__ */ jsxRuntime.jsxs("div", { children: [
4093
4080
  /* @__PURE__ */ jsxRuntime.jsx("label", { className: "mb-1 block text-xs font-medium text-gray-700 dark:text-gray-300", children: variableName }),
4094
4081
  /* @__PURE__ */ jsxRuntime.jsx(
4095
- chunkKNXAOJAK_js.Input,
4082
+ chunkYN4IEDE4_js.Input,
4096
4083
  {
4097
4084
  value: values[variableName] ?? "",
4098
4085
  onChange: (event) => handleValueChange(variableName, event.target.value),
@@ -4101,8 +4088,8 @@ function RunInputDialog({
4101
4088
  )
4102
4089
  ] }, variableName)) }),
4103
4090
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "mt-4 flex items-center justify-end gap-2", children: [
4104
- /* @__PURE__ */ jsxRuntime.jsx(chunkKNXAOJAK_js.Button, { size: "sm", plain: true, onClick: handleClose, children: t("cancel") }),
4105
- /* @__PURE__ */ jsxRuntime.jsxs(chunkKNXAOJAK_js.Button, { size: "sm", gradient: true, onClick: handleSubmit, children: [
4091
+ /* @__PURE__ */ jsxRuntime.jsx(chunkYN4IEDE4_js.Button, { size: "sm", plain: true, onClick: handleClose, children: t("cancel") }),
4092
+ /* @__PURE__ */ jsxRuntime.jsxs(chunkYN4IEDE4_js.Button, { size: "sm", gradient: true, onClick: handleSubmit, children: [
4106
4093
  /* @__PURE__ */ jsxRuntime.jsx(outline.PlayIcon, { className: "h-3.5 w-3.5", "data-slot": "icon" }),
4107
4094
  t("run")
4108
4095
  ] })
@@ -4135,8 +4122,8 @@ function PreviewPanel({ open, onClose, workflowId, loadRuns }) {
4135
4122
  const [isLoadingRuns, setIsLoadingRuns] = react.useState(false);
4136
4123
  const [selectedRun, setSelectedRun] = react.useState(null);
4137
4124
  const [selectedNode, setSelectedNode] = react.useState(null);
4138
- const isRunning = chunkTZ62G5WM_js.useWorkflowStore((state) => state.isRunning);
4139
- const nodeResults = chunkTZ62G5WM_js.useWorkflowStore((state) => state.nodeResults);
4125
+ const isRunning = chunkR5KUEOPU_js.useWorkflowStore((state) => state.isRunning);
4126
+ const nodeResults = chunkR5KUEOPU_js.useWorkflowStore((state) => state.nodeResults);
4140
4127
  const refreshRuns = react.useCallback(async () => {
4141
4128
  setIsLoadingRuns(true);
4142
4129
  try {
@@ -4292,7 +4279,7 @@ var AutoSaveWorkspace = react.memo(function AutoSaveWorkspace2({
4292
4279
  onAutoSaveGraph(graph);
4293
4280
  }, [onAutoSaveGraph, onGraphSnapshot]);
4294
4281
  return /* @__PURE__ */ jsxRuntime.jsx(
4295
- chunkTZ62G5WM_js.Workspace,
4282
+ chunkR5KUEOPU_js.Workspace,
4296
4283
  {
4297
4284
  ...workspaceProps,
4298
4285
  onGraphChange: handleGraphChange
@@ -4300,7 +4287,7 @@ var AutoSaveWorkspace = react.memo(function AutoSaveWorkspace2({
4300
4287
  );
4301
4288
  });
4302
4289
  function DynamicIslandConfirm2(props) {
4303
- return /* @__PURE__ */ jsxRuntime.jsx(chunkKNXAOJAK_js.DynamicIslandConfirm, { ...props });
4290
+ return /* @__PURE__ */ jsxRuntime.jsx(chunkYN4IEDE4_js.DynamicIslandConfirm, { ...props });
4304
4291
  }
4305
4292
  var JSON_PREVIEW_LINE_LIMIT = 50;
4306
4293
  function DslExportModal({ open, onClose, workflow, graph }) {
@@ -4354,7 +4341,7 @@ function DslExportModal({ open, onClose, workflow, graph }) {
4354
4341
  }, [jsonString, workflow.name, workflow.version]);
4355
4342
  if (!open) return null;
4356
4343
  return /* @__PURE__ */ jsxRuntime.jsx(
4357
- chunkKNXAOJAK_js.GlassModal,
4344
+ chunkYN4IEDE4_js.GlassModal,
4358
4345
  {
4359
4346
  open,
4360
4347
  onClose,
@@ -4396,7 +4383,7 @@ function DslExportModal({ open, onClose, workflow, graph }) {
4396
4383
  ] }),
4397
4384
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center justify-end gap-3 border-t border-gray-200 px-1 py-4 dark:border-gray-700", children: [
4398
4385
  /* @__PURE__ */ jsxRuntime.jsx(
4399
- chunkKNXAOJAK_js.Button,
4386
+ chunkYN4IEDE4_js.Button,
4400
4387
  {
4401
4388
  type: "button",
4402
4389
  onClick: handleCopyToClipboard,
@@ -4413,7 +4400,7 @@ function DslExportModal({ open, onClose, workflow, graph }) {
4413
4400
  }
4414
4401
  ),
4415
4402
  /* @__PURE__ */ jsxRuntime.jsxs(
4416
- chunkKNXAOJAK_js.Button,
4403
+ chunkYN4IEDE4_js.Button,
4417
4404
  {
4418
4405
  type: "button",
4419
4406
  onClick: handleDownloadJson,
@@ -4572,7 +4559,7 @@ function DslImportModal({ open, onClose, onImport }) {
4572
4559
  }, []);
4573
4560
  if (!open) return null;
4574
4561
  return /* @__PURE__ */ jsxRuntime.jsx(
4575
- chunkKNXAOJAK_js.GlassModal,
4562
+ chunkYN4IEDE4_js.GlassModal,
4576
4563
  {
4577
4564
  open,
4578
4565
  onClose,
@@ -4612,7 +4599,7 @@ function DslImportModal({ open, onClose, onImport }) {
4612
4599
  ) : /* @__PURE__ */ jsxRuntime.jsxs("div", { "data-testid": "import-validation-result", children: [
4613
4600
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "mb-4 flex items-center justify-between", children: [
4614
4601
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-sm font-medium text-gray-700 dark:text-gray-300", children: fileName }),
4615
- /* @__PURE__ */ jsxRuntime.jsx(chunkKNXAOJAK_js.Button, { type: "button", plain: true, size: "sm", onClick: handleReset, children: translations("chooseAnother") })
4602
+ /* @__PURE__ */ jsxRuntime.jsx(chunkYN4IEDE4_js.Button, { type: "button", plain: true, size: "sm", onClick: handleReset, children: translations("chooseAnother") })
4616
4603
  ] }),
4617
4604
  validationResult.isValid ? /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "rounded-lg border border-green-200 bg-green-50 p-4 dark:border-green-800 dark:bg-green-900/20", children: [
4618
4605
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-2", children: [
@@ -4640,9 +4627,9 @@ function DslImportModal({ open, onClose, onImport }) {
4640
4627
  ] })
4641
4628
  ] }) }),
4642
4629
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center justify-end gap-3 border-t border-gray-200 px-1 py-4 dark:border-gray-700", children: [
4643
- /* @__PURE__ */ jsxRuntime.jsx(chunkKNXAOJAK_js.Button, { type: "button", onClick: onClose, outline: true, size: "sm", "data-testid": "import-cancel-button", children: translations("cancel") }),
4630
+ /* @__PURE__ */ jsxRuntime.jsx(chunkYN4IEDE4_js.Button, { type: "button", onClick: onClose, outline: true, size: "sm", "data-testid": "import-cancel-button", children: translations("cancel") }),
4644
4631
  /* @__PURE__ */ jsxRuntime.jsxs(
4645
- chunkKNXAOJAK_js.Button,
4632
+ chunkYN4IEDE4_js.Button,
4646
4633
  {
4647
4634
  type: "button",
4648
4635
  onClick: handleImport,
@@ -4663,14 +4650,14 @@ function DslImportModal({ open, onClose, onImport }) {
4663
4650
  }
4664
4651
 
4665
4652
  // src/astrlabe/store/selectors.ts
4666
- var useCanUndo = () => chunkTZ62G5WM_js.useWorkflowStore((state) => state.past.length > 0);
4667
- var useCanRedo = () => chunkTZ62G5WM_js.useWorkflowStore((state) => state.future.length > 0);
4668
- var useHasCopied = () => chunkTZ62G5WM_js.useWorkflowStore((state) => state.clipboard !== null);
4669
- var useContextMenu = () => chunkTZ62G5WM_js.useWorkflowStore((state) => state.contextMenu);
4670
- var useEditingNodeId = () => chunkTZ62G5WM_js.useWorkflowStore((state) => state.editingNodeId);
4671
- var useSelectedNodeCount = () => chunkTZ62G5WM_js.useWorkflowStore((state) => state.nodes.filter((node) => node.selected).length);
4672
- var useIsRunning = () => chunkTZ62G5WM_js.useWorkflowStore((state) => state.isRunning);
4673
- var useNodeResults = () => chunkTZ62G5WM_js.useWorkflowStore((state) => state.nodeResults);
4653
+ var useCanUndo = () => chunkR5KUEOPU_js.useWorkflowStore((state) => state.past.length > 0);
4654
+ var useCanRedo = () => chunkR5KUEOPU_js.useWorkflowStore((state) => state.future.length > 0);
4655
+ var useHasCopied = () => chunkR5KUEOPU_js.useWorkflowStore((state) => state.clipboard !== null);
4656
+ var useContextMenu = () => chunkR5KUEOPU_js.useWorkflowStore((state) => state.contextMenu);
4657
+ var useEditingNodeId = () => chunkR5KUEOPU_js.useWorkflowStore((state) => state.editingNodeId);
4658
+ var useSelectedNodeCount = () => chunkR5KUEOPU_js.useWorkflowStore((state) => state.nodes.filter((node) => node.selected).length);
4659
+ var useIsRunning = () => chunkR5KUEOPU_js.useWorkflowStore((state) => state.isRunning);
4660
+ var useNodeResults = () => chunkR5KUEOPU_js.useWorkflowStore((state) => state.nodeResults);
4674
4661
  var DEFAULT_MAX_HISTORY = 50;
4675
4662
  function useUndoRedo(nodes, edges, setNodes, setEdges, maxHistory = DEFAULT_MAX_HISTORY) {
4676
4663
  const pastRef = react.useRef([]);
@@ -4992,5 +4979,5 @@ exports.useNodeResults = useNodeResults;
4992
4979
  exports.useSelectedNodeCount = useSelectedNodeCount;
4993
4980
  exports.useSubworkflowStore = useSubworkflowStore;
4994
4981
  exports.useUndoRedo = useUndoRedo;
4995
- //# sourceMappingURL=chunk-ZHHRWC27.js.map
4996
- //# sourceMappingURL=chunk-ZHHRWC27.js.map
4982
+ //# sourceMappingURL=chunk-Y4DNREFH.js.map
4983
+ //# sourceMappingURL=chunk-Y4DNREFH.js.map