@datatechsolutions/ui 2.11.92 → 3.1.0

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 (159) hide show
  1. package/README.md +39 -58
  2. package/dist/astrlabe/contracts.d.mts +17 -6
  3. package/dist/astrlabe/contracts.d.ts +17 -6
  4. package/dist/astrlabe/index.d.mts +9 -3
  5. package/dist/astrlabe/index.d.ts +9 -3
  6. package/dist/astrlabe/index.js +120 -116
  7. package/dist/astrlabe/index.mjs +6 -6
  8. package/dist/astrlabe/utils.d.mts +1 -1
  9. package/dist/astrlabe/utils.d.ts +1 -1
  10. package/dist/astrlabe/utils.js +9 -9
  11. package/dist/astrlabe/utils.mjs +2 -2
  12. package/dist/astrlabe/workflow-canvas.d.mts +1 -1
  13. package/dist/astrlabe/workflow-canvas.d.ts +1 -1
  14. package/dist/astrlabe/workflow-canvas.js +5 -5
  15. package/dist/astrlabe/workflow-canvas.mjs +4 -4
  16. package/dist/brand/index.d.mts +1 -15
  17. package/dist/brand/index.d.ts +1 -15
  18. package/dist/brand/index.js +0 -14
  19. package/dist/brand/index.js.map +1 -1
  20. package/dist/brand/index.mjs +0 -14
  21. package/dist/brand/index.mjs.map +1 -1
  22. package/dist/{chunk-24QKSC74.js → chunk-3JJWPOK6.js} +6 -6
  23. package/dist/{chunk-24QKSC74.js.map → chunk-3JJWPOK6.js.map} +1 -1
  24. package/dist/{chunk-HGN5W56D.mjs → chunk-3ZUMJTDT.mjs} +3 -3
  25. package/dist/{chunk-HGN5W56D.mjs.map → chunk-3ZUMJTDT.mjs.map} +1 -1
  26. package/dist/{chunk-LKJZGFM4.mjs → chunk-5GDKCFM5.mjs} +3 -3
  27. package/dist/{chunk-LKJZGFM4.mjs.map → chunk-5GDKCFM5.mjs.map} +1 -1
  28. package/dist/{chunk-ZHUPYX4Q.mjs → chunk-5RM6NGZ6.mjs} +3 -3
  29. package/dist/{chunk-ZHUPYX4Q.mjs.map → chunk-5RM6NGZ6.mjs.map} +1 -1
  30. package/dist/{chunk-WNCPAWLC.mjs → chunk-5W7L7BT7.mjs} +13 -2
  31. package/dist/chunk-5W7L7BT7.mjs.map +1 -0
  32. package/dist/{chunk-DB64YDV2.js → chunk-AOUUZ52N.js} +55 -55
  33. package/dist/{chunk-DB64YDV2.js.map → chunk-AOUUZ52N.js.map} +1 -1
  34. package/dist/{chunk-VGSWSQQU.mjs → chunk-B67DP7MI.mjs} +4 -4
  35. package/dist/{chunk-VGSWSQQU.mjs.map → chunk-B67DP7MI.mjs.map} +1 -1
  36. package/dist/{chunk-C7BI5LQ6.js → chunk-C3H4FM4A.js} +13 -2
  37. package/dist/chunk-C3H4FM4A.js.map +1 -0
  38. package/dist/{chunk-XXYDLYIT.js → chunk-EFOXN3LC.js} +288 -171
  39. package/dist/chunk-EFOXN3LC.js.map +1 -0
  40. package/dist/{chunk-ARVLVWUC.js → chunk-F54Q2YJY.js} +97 -15
  41. package/dist/chunk-F54Q2YJY.js.map +1 -0
  42. package/dist/{chunk-WI663467.mjs → chunk-H2D2CRTD.mjs} +8 -8
  43. package/dist/{chunk-WI663467.mjs.map → chunk-H2D2CRTD.mjs.map} +1 -1
  44. package/dist/{chunk-PTGPQJZJ.js → chunk-HDCUWUNH.js} +15 -15
  45. package/dist/{chunk-PTGPQJZJ.js.map → chunk-HDCUWUNH.js.map} +1 -1
  46. package/dist/{chunk-ZKUYNCAG.js → chunk-I2NZGVBG.js} +1595 -2140
  47. package/dist/chunk-I2NZGVBG.js.map +1 -0
  48. package/dist/{chunk-MLAXYDEU.mjs → chunk-IRPS5UCS.mjs} +3 -3
  49. package/dist/{chunk-MLAXYDEU.mjs.map → chunk-IRPS5UCS.mjs.map} +1 -1
  50. package/dist/{chunk-3SUFSAP6.mjs → chunk-IRT4T3CU.mjs} +214 -105
  51. package/dist/chunk-IRT4T3CU.mjs.map +1 -0
  52. package/dist/{chunk-A3BFURJB.mjs → chunk-JN6IL6OH.mjs} +1595 -2138
  53. package/dist/chunk-JN6IL6OH.mjs.map +1 -0
  54. package/dist/{chunk-NA57KK4O.js → chunk-JSNRCYSO.js} +4 -4
  55. package/dist/{chunk-NA57KK4O.js.map → chunk-JSNRCYSO.js.map} +1 -1
  56. package/dist/{chunk-XSBZNPUO.js → chunk-KR2X2WHJ.js} +53 -53
  57. package/dist/{chunk-XSBZNPUO.js.map → chunk-KR2X2WHJ.js.map} +1 -1
  58. package/dist/{chunk-YEWXDCCI.mjs → chunk-LEKZUS6N.mjs} +4 -4
  59. package/dist/{chunk-YEWXDCCI.mjs.map → chunk-LEKZUS6N.mjs.map} +1 -1
  60. package/dist/{chunk-6NAZVG2O.mjs → chunk-MVBIAXVN.mjs} +4 -4
  61. package/dist/{chunk-6NAZVG2O.mjs.map → chunk-MVBIAXVN.mjs.map} +1 -1
  62. package/dist/{chunk-5UU3RQRB.js → chunk-NJS2YC3J.js} +15 -2
  63. package/dist/chunk-NJS2YC3J.js.map +1 -0
  64. package/dist/{chunk-4TY55HGO.mjs → chunk-OL73LBX5.mjs} +3 -3
  65. package/dist/{chunk-4TY55HGO.mjs.map → chunk-OL73LBX5.mjs.map} +1 -1
  66. package/dist/{chunk-3PKG4KFY.mjs → chunk-QYA53LUF.mjs} +67 -10
  67. package/dist/chunk-QYA53LUF.mjs.map +1 -0
  68. package/dist/{chunk-DWFLIXES.mjs → chunk-R4TQWXNG.mjs} +3 -3
  69. package/dist/{chunk-DWFLIXES.mjs.map → chunk-R4TQWXNG.mjs.map} +1 -1
  70. package/dist/{chunk-DADFESAQ.js → chunk-RGI74SQH.js} +4 -4
  71. package/dist/{chunk-DADFESAQ.js.map → chunk-RGI74SQH.js.map} +1 -1
  72. package/dist/{chunk-SFVSDGNF.js → chunk-RL35XATZ.js} +192 -134
  73. package/dist/chunk-RL35XATZ.js.map +1 -0
  74. package/dist/{chunk-BUI7BCUN.js → chunk-RXZNACMI.js} +33 -33
  75. package/dist/{chunk-BUI7BCUN.js.map → chunk-RXZNACMI.js.map} +1 -1
  76. package/dist/{chunk-TBPWMPZU.js → chunk-SU3YPWFW.js} +26 -26
  77. package/dist/{chunk-TBPWMPZU.js.map → chunk-SU3YPWFW.js.map} +1 -1
  78. package/dist/{chunk-DIMLLLZR.js → chunk-TIJJHW2Z.js} +36 -36
  79. package/dist/{chunk-DIMLLLZR.js.map → chunk-TIJJHW2Z.js.map} +1 -1
  80. package/dist/{chunk-2RDGJXYZ.js → chunk-TVMLV675.js} +67 -67
  81. package/dist/{chunk-2RDGJXYZ.js.map → chunk-TVMLV675.js.map} +1 -1
  82. package/dist/{chunk-53SRKVKQ.mjs → chunk-U7XM3N7F.mjs} +15 -2
  83. package/dist/chunk-U7XM3N7F.mjs.map +1 -0
  84. package/dist/{chunk-Y3WJAYOY.mjs → chunk-UDDZTTLO.mjs} +6 -6
  85. package/dist/chunk-UDDZTTLO.mjs.map +1 -0
  86. package/dist/{chunk-43GCSCQA.js → chunk-W5OEBO6E.js} +12 -12
  87. package/dist/chunk-W5OEBO6E.js.map +1 -0
  88. package/dist/{chunk-FUVJHNNI.js → chunk-Y6AEE56Q.js} +69 -69
  89. package/dist/{chunk-FUVJHNNI.js.map → chunk-Y6AEE56Q.js.map} +1 -1
  90. package/dist/{chunk-MZAS6TG4.mjs → chunk-YIB2YAM5.mjs} +3 -3
  91. package/dist/{chunk-MZAS6TG4.mjs.map → chunk-YIB2YAM5.mjs.map} +1 -1
  92. package/dist/{chunk-RELMVNNR.mjs → chunk-YV72JM4B.mjs} +4 -4
  93. package/dist/{chunk-RELMVNNR.mjs.map → chunk-YV72JM4B.mjs.map} +1 -1
  94. package/dist/{chunk-MEEFOZC4.js → chunk-ZM5MVWIT.js} +4 -4
  95. package/dist/{chunk-MEEFOZC4.js.map → chunk-ZM5MVWIT.js.map} +1 -1
  96. package/dist/{chunk-PU2KTO4O.mjs → chunk-ZV5EZXXO.mjs} +97 -15
  97. package/dist/chunk-ZV5EZXXO.mjs.map +1 -0
  98. package/dist/{index-AioB90qq.d.mts → index-CoB18TbG.d.ts} +9 -2
  99. package/dist/{index-D5ai0cGZ.d.ts → index-VI9gyJXl.d.mts} +9 -2
  100. package/dist/index.d.mts +8 -41
  101. package/dist/index.d.ts +8 -41
  102. package/dist/index.js +745 -753
  103. package/dist/index.mjs +2 -2
  104. package/dist/platform/admin/index.js +11 -11
  105. package/dist/platform/admin/index.mjs +5 -5
  106. package/dist/platform/agents-workspace.js +9 -9
  107. package/dist/platform/agents-workspace.mjs +8 -8
  108. package/dist/platform/app-shell.js +4 -4
  109. package/dist/platform/app-shell.mjs +3 -3
  110. package/dist/platform/auth/index.js +28 -28
  111. package/dist/platform/auth/index.mjs +5 -5
  112. package/dist/platform/billing/index.js +4 -4
  113. package/dist/platform/billing/index.mjs +3 -3
  114. package/dist/platform/impersonation/index.js +4 -4
  115. package/dist/platform/impersonation/index.mjs +3 -3
  116. package/dist/platform/index.js +101 -101
  117. package/dist/platform/index.js.map +1 -1
  118. package/dist/platform/index.mjs +21 -21
  119. package/dist/platform/index.mjs.map +1 -1
  120. package/dist/platform/pages/index.d.mts +5 -6
  121. package/dist/platform/pages/index.d.ts +5 -6
  122. package/dist/platform/pages/index.js +199 -199
  123. package/dist/platform/pages/index.js.map +1 -1
  124. package/dist/platform/pages/index.mjs +11 -11
  125. package/dist/platform/pages/index.mjs.map +1 -1
  126. package/dist/platform/settings/index.js +8 -8
  127. package/dist/platform/settings/index.mjs +7 -7
  128. package/dist/platform/telemetry/index.d.mts +42 -0
  129. package/dist/platform/telemetry/index.d.ts +42 -0
  130. package/dist/platform/telemetry/index.js +75 -0
  131. package/dist/platform/telemetry/index.js.map +1 -0
  132. package/dist/platform/telemetry/index.mjs +68 -0
  133. package/dist/platform/telemetry/index.mjs.map +1 -0
  134. package/dist/platform/workflow-api-client.d.mts +2 -2
  135. package/dist/platform/workflow-api-client.d.ts +2 -2
  136. package/dist/platform/workflow-api-client.js +61 -61
  137. package/dist/platform/workflow-api-client.mjs +1 -1
  138. package/dist/platform/workflow-canvas-shell.js +6 -6
  139. package/dist/platform/workflow-canvas-shell.mjs +5 -5
  140. package/dist/{workflow-api-client-zVtc8FIl.d.ts → workflow-api-client-BKD8OfP_.d.ts} +62 -31
  141. package/dist/{workflow-api-client-wLoap-tt.d.mts → workflow-api-client-DoYj7nHz.d.mts} +62 -31
  142. package/package.json +7 -1
  143. package/dist/chunk-3PKG4KFY.mjs.map +0 -1
  144. package/dist/chunk-3SUFSAP6.mjs.map +0 -1
  145. package/dist/chunk-43GCSCQA.js.map +0 -1
  146. package/dist/chunk-53SRKVKQ.mjs.map +0 -1
  147. package/dist/chunk-5UU3RQRB.js.map +0 -1
  148. package/dist/chunk-A3BFURJB.mjs.map +0 -1
  149. package/dist/chunk-ARVLVWUC.js.map +0 -1
  150. package/dist/chunk-C7BI5LQ6.js.map +0 -1
  151. package/dist/chunk-PU2KTO4O.mjs.map +0 -1
  152. package/dist/chunk-SFVSDGNF.js.map +0 -1
  153. package/dist/chunk-WNCPAWLC.mjs.map +0 -1
  154. package/dist/chunk-XXYDLYIT.js.map +0 -1
  155. package/dist/chunk-Y3WJAYOY.mjs.map +0 -1
  156. package/dist/chunk-ZKUYNCAG.js.map +0 -1
  157. package/src/brand/logos/fuel-icon.svg +0 -32
  158. package/src/brand/logos/fuel-logo-dark.svg +0 -43
  159. package/src/brand/logos/fuel-logo.svg +0 -43
@@ -1,10 +1,11 @@
1
1
  "use client";
2
2
  'use strict';
3
3
 
4
- var chunkZKUYNCAG_js = require('./chunk-ZKUYNCAG.js');
4
+ var chunkI2NZGVBG_js = require('./chunk-I2NZGVBG.js');
5
5
  var chunkYXN2K77G_js = require('./chunk-YXN2K77G.js');
6
+ var chunkF54Q2YJY_js = require('./chunk-F54Q2YJY.js');
6
7
  var chunkP4YYEM4B_js = require('./chunk-P4YYEM4B.js');
7
- var chunkC7BI5LQ6_js = require('./chunk-C7BI5LQ6.js');
8
+ var chunkC3H4FM4A_js = require('./chunk-C3H4FM4A.js');
8
9
  var react = require('react');
9
10
  var react$1 = require('@xyflow/react');
10
11
  require('@xyflow/react/dist/style.css');
@@ -355,6 +356,7 @@ var LOGIC_NODE_GRADIENTS = {
355
356
  if_else: "from-amber-400 to-orange-500",
356
357
  code: "from-cyan-400 to-sky-500",
357
358
  http_request: "from-orange-400 to-amber-500",
359
+ s3_write: "from-cyan-400 to-cyan-500",
358
360
  template_transform: "from-pink-400 to-rose-500",
359
361
  iteration: "from-indigo-400 to-violet-500",
360
362
  knowledge_base: "from-emerald-400 to-teal-500",
@@ -379,6 +381,7 @@ var LOGIC_NODE_BADGE_COLORS = {
379
381
  if_else: "bg-amber-100 text-amber-700 dark:bg-amber-500/20 dark:text-amber-300",
380
382
  code: "bg-cyan-100 text-cyan-700 dark:bg-cyan-500/20 dark:text-cyan-300",
381
383
  http_request: "bg-orange-100 text-orange-700 dark:bg-orange-500/20 dark:text-orange-300",
384
+ s3_write: "bg-cyan-100 text-cyan-700 dark:bg-cyan-500/20 dark:text-cyan-300",
382
385
  template_transform: "bg-pink-100 text-pink-700 dark:bg-pink-500/20 dark:text-pink-300",
383
386
  iteration: "bg-indigo-100 text-indigo-700 dark:bg-indigo-500/20 dark:text-indigo-300",
384
387
  knowledge_base: "bg-emerald-100 text-emerald-700 dark:bg-emerald-500/20 dark:text-emerald-300",
@@ -403,6 +406,7 @@ var LOGIC_NODE_BADGE_SOFT_COLORS = {
403
406
  if_else: "bg-amber-50 text-amber-600 dark:bg-amber-500/20 dark:text-amber-400",
404
407
  code: "bg-cyan-50 text-cyan-600 dark:bg-cyan-500/20 dark:text-cyan-400",
405
408
  http_request: "bg-orange-50 text-orange-600 dark:bg-orange-500/20 dark:text-orange-400",
409
+ s3_write: "bg-cyan-50 text-cyan-600 dark:bg-cyan-500/20 dark:text-cyan-400",
406
410
  template_transform: "bg-pink-50 text-pink-600 dark:bg-pink-500/20 dark:text-pink-400",
407
411
  iteration: "bg-indigo-50 text-indigo-600 dark:bg-indigo-500/20 dark:text-indigo-400",
408
412
  knowledge_base: "bg-emerald-50 text-emerald-600 dark:bg-emerald-500/20 dark:text-emerald-400",
@@ -427,6 +431,7 @@ var LOGIC_ICON_MAP = {
427
431
  if_else: outline.ArrowsPointingOutIcon,
428
432
  code: outline.CodeBracketIcon,
429
433
  http_request: outline.GlobeAltIcon,
434
+ s3_write: outline.CloudArrowUpIcon,
430
435
  template_transform: outline.DocumentTextIcon,
431
436
  iteration: outline.ArrowPathIcon,
432
437
  knowledge_base: outline.BookOpenIcon,
@@ -465,6 +470,7 @@ var NODE_BORDER_COLORS = {
465
470
  if_else: "border-amber-300/50 dark:border-amber-600/50",
466
471
  code: "border-cyan-300/50 dark:border-cyan-600/50",
467
472
  http_request: "border-orange-300/50 dark:border-orange-600/50",
473
+ s3_write: "border-cyan-300/50 dark:border-cyan-600/50",
468
474
  template_transform: "border-pink-300/50 dark:border-pink-600/50",
469
475
  iteration: "border-indigo-300/50 dark:border-indigo-600/50",
470
476
  iteration_start: "border-indigo-300/50 dark:border-indigo-600/50",
@@ -495,6 +501,7 @@ var MINIMAP_NODE_COLORS = {
495
501
  if_else: "#f59e0b",
496
502
  code: "#06b6d4",
497
503
  http_request: "#f97316",
504
+ s3_write: "#06b6d4",
498
505
  template_transform: "#ec4899",
499
506
  iteration: "#818cf8",
500
507
  knowledge_base: "#10b981",
@@ -536,6 +543,7 @@ var LOGIC_NODE_HANDLE_COLORS = {
536
543
  if_else: "!bg-amber-500",
537
544
  code: "!bg-cyan-500",
538
545
  http_request: "!bg-orange-500",
546
+ s3_write: "!bg-cyan-500",
539
547
  template_transform: "!bg-pink-500",
540
548
  iteration: "!bg-indigo-500",
541
549
  knowledge_base: "!bg-emerald-500",
@@ -1147,12 +1155,11 @@ var ENTITY_ICON_MAP = {
1147
1155
  stations: outline.BuildingStorefrontIcon,
1148
1156
  users: outline.UsersIcon,
1149
1157
  competitors: outline.ShoppingBagIcon,
1150
- fuels: outline.FireIcon,
1151
1158
  approvals: outline.ClipboardDocumentCheckIcon,
1152
1159
  rules: outline.ShieldCheckIcon,
1153
1160
  current_prices: outline.CurrencyDollarIcon,
1154
1161
  competitor_prices: outline.ChartBarSquareIcon,
1155
- fuel_metrics: outline.ChartPieIcon,
1162
+ product_metrics: outline.ChartPieIcon,
1156
1163
  station_metrics: outline.PresentationChartBarIcon,
1157
1164
  entities: outline.CircleStackIcon
1158
1165
  };
@@ -1685,7 +1692,7 @@ function DatasourceNodeConfigForm({
1685
1692
  }
1686
1693
  const logo = getDatasourceLogo(selectedDatasourceId, selectedDatasource?.dialect);
1687
1694
  return /* @__PURE__ */ jsxRuntime.jsx(
1688
- chunkZKUYNCAG_js.GlassModal,
1695
+ chunkI2NZGVBG_js.GlassModal,
1689
1696
  {
1690
1697
  open,
1691
1698
  onClose: onCancel,
@@ -1700,8 +1707,8 @@ function DatasourceNodeConfigForm({
1700
1707
  onSectionChange: setActiveSectionId
1701
1708
  },
1702
1709
  footer: readOnly ? void 0 : /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex justify-end gap-2 px-6 py-3", children: [
1703
- /* @__PURE__ */ jsxRuntime.jsx(chunkZKUYNCAG_js.Button, { outline: true, onClick: onCancel, children: t("cancel") }),
1704
- /* @__PURE__ */ jsxRuntime.jsx(chunkZKUYNCAG_js.Button, { color: "cyan", onClick: handleSave, disabled: !canSave, children: t("save") })
1710
+ /* @__PURE__ */ jsxRuntime.jsx(chunkI2NZGVBG_js.Button, { outline: true, onClick: onCancel, children: t("cancel") }),
1711
+ /* @__PURE__ */ jsxRuntime.jsx(chunkI2NZGVBG_js.Button, { color: "cyan", onClick: handleSave, disabled: !canSave, children: t("save") })
1705
1712
  ] }),
1706
1713
  children: renderSection()
1707
1714
  }
@@ -2099,7 +2106,7 @@ var AgentFlowNode = react.memo(function AgentFlowNode2({ id, data, selected }) {
2099
2106
  /* @__PURE__ */ jsxRuntime.jsx(NodeCardMeta, { compact: isCompact, children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-wrap items-center gap-1.5", children: [
2100
2107
  /* @__PURE__ */ jsxRuntime.jsx(NodeCardBadge, { className: "rounded-full bg-indigo-100 px-2 py-0.5 text-[10px] font-semibold text-indigo-700 dark:bg-indigo-500/20 dark:text-indigo-300", children: "Agent" }),
2101
2108
  (() => {
2102
- const tier = chunkC7BI5LQ6_js.getAgentTier(Number(data.agent.elo ?? 0));
2109
+ const tier = chunkC3H4FM4A_js.getAgentTier(Number(data.agent.elo ?? 0));
2103
2110
  return /* @__PURE__ */ jsxRuntime.jsx(NodeCardBadge, { className: `rounded-full px-2 py-0.5 text-[10px] font-bold ${tier.pillColor}`, children: tier.key });
2104
2111
  })(),
2105
2112
  /* @__PURE__ */ jsxRuntime.jsxs(NodeCardBadge, { className: `inline-flex items-center gap-1 rounded-full px-2 py-0.5 text-[10px] font-medium ${frameworkMeta.badgeColor}`, children: [
@@ -2208,7 +2215,7 @@ var AgentToolFlowNode = react.memo(function AgentToolFlowNode2({ id, data, selec
2208
2215
  event.stopPropagation();
2209
2216
  },
2210
2217
  children: /* @__PURE__ */ jsxRuntime.jsx(
2211
- chunkZKUYNCAG_js.ToggleSwitch,
2218
+ chunkI2NZGVBG_js.ToggleSwitch,
2212
2219
  {
2213
2220
  checked: Boolean(agentTool.enabled),
2214
2221
  onChange: () => data.onToggle?.(agentTool),
@@ -2316,7 +2323,7 @@ var ToolFlowNode = react.memo(function ToolFlowNode2({ id, data, selected }) {
2316
2323
  event.preventDefault();
2317
2324
  },
2318
2325
  children: /* @__PURE__ */ jsxRuntime.jsx(
2319
- chunkZKUYNCAG_js.ToggleSwitch,
2326
+ chunkI2NZGVBG_js.ToggleSwitch,
2320
2327
  {
2321
2328
  checked: Boolean(tool.enabled),
2322
2329
  onChange: () => onToggle(tool),
@@ -2468,7 +2475,7 @@ var RuleFlowNode = react.memo(function RuleFlowNode2({ id, data, selected }) {
2468
2475
  event.preventDefault();
2469
2476
  },
2470
2477
  children: /* @__PURE__ */ jsxRuntime.jsx(
2471
- chunkZKUYNCAG_js.ToggleSwitch,
2478
+ chunkI2NZGVBG_js.ToggleSwitch,
2472
2479
  {
2473
2480
  checked: Boolean(rule.enabled),
2474
2481
  onChange: () => onToggle(rule),
@@ -2488,9 +2495,9 @@ var RuleFlowNode = react.memo(function RuleFlowNode2({ id, data, selected }) {
2488
2495
  "P",
2489
2496
  String(rule.priority ?? "")
2490
2497
  ] }),
2491
- Array.isArray(rule.condition?.fuelTypes) && rule.condition.fuelTypes.length > 0 && /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "text-[10px] text-gray-400 dark:text-gray-500", children: [
2492
- rule.condition.fuelTypes.length,
2493
- " fuels"
2498
+ Array.isArray(rule.condition?.categories) && rule.condition.categories.length > 0 && /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "text-[10px] text-gray-400 dark:text-gray-500", children: [
2499
+ rule.condition.categories.length,
2500
+ " categories"
2494
2501
  ] })
2495
2502
  ] }),
2496
2503
  onRemoveFromCanvas && /* @__PURE__ */ jsxRuntime.jsx(
@@ -3468,7 +3475,7 @@ var DatasourceFlowNode = react.memo(function DatasourceFlowNode2({ id, data, sel
3468
3475
  event.preventDefault();
3469
3476
  },
3470
3477
  children: /* @__PURE__ */ jsxRuntime.jsx(
3471
- chunkZKUYNCAG_js.ToggleSwitch,
3478
+ chunkI2NZGVBG_js.ToggleSwitch,
3472
3479
  {
3473
3480
  checked: true,
3474
3481
  onChange: () => {
@@ -3796,8 +3803,8 @@ function ConfigFormActions({
3796
3803
  saveDisabled = false
3797
3804
  }) {
3798
3805
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex justify-end gap-2 border-t border-gray-200 pt-4 dark:border-gray-700", children: [
3799
- /* @__PURE__ */ jsxRuntime.jsx(chunkZKUYNCAG_js.Button, { type: "button", outline: true, onClick: onCancel, children: cancelLabel }),
3800
- /* @__PURE__ */ jsxRuntime.jsx(chunkZKUYNCAG_js.Button, { type: "button", onClick: onSave, disabled: saveDisabled, children: saveLabel })
3806
+ /* @__PURE__ */ jsxRuntime.jsx(chunkI2NZGVBG_js.Button, { type: "button", outline: true, onClick: onCancel, children: cancelLabel }),
3807
+ /* @__PURE__ */ jsxRuntime.jsx(chunkI2NZGVBG_js.Button, { type: "button", onClick: onSave, disabled: saveDisabled, children: saveLabel })
3801
3808
  ] });
3802
3809
  }
3803
3810
  var COLOR_CLASSES = {
@@ -4044,7 +4051,7 @@ function IfElseNodeConfigForm({ config, onSave, onCancel }) {
4044
4051
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "mb-3 flex items-center justify-between", children: [
4045
4052
  /* @__PURE__ */ jsxRuntime.jsx("label", { className: "text-sm font-medium text-gray-700 dark:text-gray-300", children: t("conditionsLabel") }),
4046
4053
  /* @__PURE__ */ jsxRuntime.jsx(
4047
- chunkZKUYNCAG_js.Button,
4054
+ chunkI2NZGVBG_js.Button,
4048
4055
  {
4049
4056
  type: "button",
4050
4057
  onClick: handleAddCondition,
@@ -4055,7 +4062,7 @@ function IfElseNodeConfigForm({ config, onSave, onCancel }) {
4055
4062
  /* @__PURE__ */ jsxRuntime.jsx("div", { className: "space-y-3", children: conditions.map((condition, index) => /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-start gap-2 rounded-lg border border-gray-200 bg-gray-50 p-3 dark:border-gray-700 dark:bg-gray-800/50", children: [
4056
4063
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "grid flex-1 grid-cols-3 gap-2", children: [
4057
4064
  /* @__PURE__ */ jsxRuntime.jsx("div", { children: /* @__PURE__ */ jsxRuntime.jsx(
4058
- chunkZKUYNCAG_js.FormInput,
4065
+ chunkI2NZGVBG_js.FormInput,
4059
4066
  {
4060
4067
  type: "text",
4061
4068
  label: t("variableLabel"),
@@ -4066,7 +4073,7 @@ function IfElseNodeConfigForm({ config, onSave, onCancel }) {
4066
4073
  }
4067
4074
  ) }),
4068
4075
  /* @__PURE__ */ jsxRuntime.jsx("div", { children: /* @__PURE__ */ jsxRuntime.jsx(
4069
- chunkZKUYNCAG_js.FormSelect,
4076
+ chunkI2NZGVBG_js.FormSelect,
4070
4077
  {
4071
4078
  label: t("operatorLabel"),
4072
4079
  value: condition.operator,
@@ -4076,7 +4083,7 @@ function IfElseNodeConfigForm({ config, onSave, onCancel }) {
4076
4083
  }
4077
4084
  ) }),
4078
4085
  /* @__PURE__ */ jsxRuntime.jsx("div", { children: /* @__PURE__ */ jsxRuntime.jsx(
4079
- chunkZKUYNCAG_js.FormInput,
4086
+ chunkI2NZGVBG_js.FormInput,
4080
4087
  {
4081
4088
  type: "text",
4082
4089
  label: t("valueLabel"),
@@ -4088,7 +4095,7 @@ function IfElseNodeConfigForm({ config, onSave, onCancel }) {
4088
4095
  ) })
4089
4096
  ] }),
4090
4097
  conditions.length > 1 && /* @__PURE__ */ jsxRuntime.jsx(
4091
- chunkZKUYNCAG_js.IconButton,
4098
+ chunkI2NZGVBG_js.IconButton,
4092
4099
  {
4093
4100
  onClick: () => handleRemoveCondition(index),
4094
4101
  icon: /* @__PURE__ */ jsxRuntime.jsx(outline.TrashIcon, { className: "h-4 w-4" }),
@@ -4460,7 +4467,7 @@ function HttpRequestNodeConfigForm({ config, onSave, onCancel }) {
4460
4467
  };
4461
4468
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "space-y-4", children: [
4462
4469
  /* @__PURE__ */ jsxRuntime.jsx(
4463
- chunkZKUYNCAG_js.FormSelect,
4470
+ chunkI2NZGVBG_js.FormSelect,
4464
4471
  {
4465
4472
  label: t("methodLabel"),
4466
4473
  value: method,
@@ -4469,7 +4476,7 @@ function HttpRequestNodeConfigForm({ config, onSave, onCancel }) {
4469
4476
  }
4470
4477
  ),
4471
4478
  /* @__PURE__ */ jsxRuntime.jsx(
4472
- chunkZKUYNCAG_js.FormInput,
4479
+ chunkI2NZGVBG_js.FormInput,
4473
4480
  {
4474
4481
  type: "text",
4475
4482
  label: t("urlLabel"),
@@ -4482,7 +4489,7 @@ function HttpRequestNodeConfigForm({ config, onSave, onCancel }) {
4482
4489
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "mb-2 flex items-center justify-between", children: [
4483
4490
  /* @__PURE__ */ jsxRuntime.jsx("label", { className: "text-sm font-medium text-gray-700 dark:text-gray-300", children: t("headersLabel") }),
4484
4491
  /* @__PURE__ */ jsxRuntime.jsx(
4485
- chunkZKUYNCAG_js.Button,
4492
+ chunkI2NZGVBG_js.Button,
4486
4493
  {
4487
4494
  type: "button",
4488
4495
  onClick: handleAddHeader,
@@ -4492,7 +4499,7 @@ function HttpRequestNodeConfigForm({ config, onSave, onCancel }) {
4492
4499
  ] }),
4493
4500
  /* @__PURE__ */ jsxRuntime.jsx("div", { className: "space-y-2", children: headerEntries.map((entry, index) => /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-2", children: [
4494
4501
  /* @__PURE__ */ jsxRuntime.jsx(
4495
- chunkZKUYNCAG_js.FormInput,
4502
+ chunkI2NZGVBG_js.FormInput,
4496
4503
  {
4497
4504
  type: "text",
4498
4505
  value: entry.key,
@@ -4502,7 +4509,7 @@ function HttpRequestNodeConfigForm({ config, onSave, onCancel }) {
4502
4509
  }
4503
4510
  ),
4504
4511
  /* @__PURE__ */ jsxRuntime.jsx(
4505
- chunkZKUYNCAG_js.FormInput,
4512
+ chunkI2NZGVBG_js.FormInput,
4506
4513
  {
4507
4514
  type: "text",
4508
4515
  value: entry.value,
@@ -4512,7 +4519,7 @@ function HttpRequestNodeConfigForm({ config, onSave, onCancel }) {
4512
4519
  }
4513
4520
  ),
4514
4521
  /* @__PURE__ */ jsxRuntime.jsx(
4515
- chunkZKUYNCAG_js.IconButton,
4522
+ chunkI2NZGVBG_js.IconButton,
4516
4523
  {
4517
4524
  onClick: () => handleRemoveHeader(index),
4518
4525
  icon: /* @__PURE__ */ jsxRuntime.jsx(outline.TrashIcon, { className: "h-4 w-4" }),
@@ -4524,7 +4531,7 @@ function HttpRequestNodeConfigForm({ config, onSave, onCancel }) {
4524
4531
  ] }, index)) })
4525
4532
  ] }),
4526
4533
  method !== "GET" && /* @__PURE__ */ jsxRuntime.jsx(
4527
- chunkZKUYNCAG_js.FormTextarea,
4534
+ chunkI2NZGVBG_js.FormTextarea,
4528
4535
  {
4529
4536
  label: t("bodyLabel"),
4530
4537
  value: body,
@@ -4535,7 +4542,7 @@ function HttpRequestNodeConfigForm({ config, onSave, onCancel }) {
4535
4542
  }
4536
4543
  ),
4537
4544
  /* @__PURE__ */ jsxRuntime.jsx(
4538
- chunkZKUYNCAG_js.FormInput,
4545
+ chunkI2NZGVBG_js.FormInput,
4539
4546
  {
4540
4547
  type: "number",
4541
4548
  label: t("timeoutLabel"),
@@ -4547,7 +4554,7 @@ function HttpRequestNodeConfigForm({ config, onSave, onCancel }) {
4547
4554
  }
4548
4555
  ),
4549
4556
  /* @__PURE__ */ jsxRuntime.jsx(
4550
- chunkZKUYNCAG_js.FormSelect,
4557
+ chunkI2NZGVBG_js.FormSelect,
4551
4558
  {
4552
4559
  label: t("parseResponseLabel"),
4553
4560
  value: parseResponse,
@@ -4569,6 +4576,112 @@ function HttpRequestNodeConfigForm({ config, onSave, onCancel }) {
4569
4576
  )
4570
4577
  ] });
4571
4578
  }
4579
+ function S3WriteNodeConfigForm({ config, onSave, onCancel }) {
4580
+ const t = chunkYXN2K77G_js.useTranslations("agents.workflow.s3WriteNodeConfig");
4581
+ const [bucket, setBucket] = react.useState(config.bucket ?? "");
4582
+ const [key, setKey] = react.useState(config.key ?? "");
4583
+ const [sourceUrl, setSourceUrl] = react.useState(config.sourceUrl ?? "");
4584
+ const [body, setBody] = react.useState(config.body ?? "");
4585
+ const [contentType, setContentType] = react.useState(config.contentType ?? "");
4586
+ const [timeoutMs, setTimeoutMs] = react.useState(config.timeoutMs ?? 3e5);
4587
+ const [connectionId, setConnectionId] = react.useState(config.connectionId ?? "");
4588
+ const handleSave = () => {
4589
+ onSave({
4590
+ ...config,
4591
+ bucket,
4592
+ key,
4593
+ sourceUrl,
4594
+ body,
4595
+ contentType,
4596
+ timeoutMs,
4597
+ connectionId
4598
+ });
4599
+ };
4600
+ return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "space-y-4", children: [
4601
+ /* @__PURE__ */ jsxRuntime.jsx(
4602
+ chunkI2NZGVBG_js.FormInput,
4603
+ {
4604
+ type: "text",
4605
+ label: t("bucketLabel"),
4606
+ value: bucket,
4607
+ onValueChange: setBucket,
4608
+ placeholder: t("bucketPlaceholder")
4609
+ }
4610
+ ),
4611
+ /* @__PURE__ */ jsxRuntime.jsx(
4612
+ chunkI2NZGVBG_js.FormInput,
4613
+ {
4614
+ type: "text",
4615
+ label: t("keyLabel"),
4616
+ value: key,
4617
+ onValueChange: setKey,
4618
+ placeholder: t("keyPlaceholder")
4619
+ }
4620
+ ),
4621
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "rounded-lg border border-cyan-200/40 bg-cyan-50/40 px-3 py-2 text-[11px] text-cyan-900 dark:border-cyan-500/30 dark:bg-cyan-500/10 dark:text-cyan-100", children: t("sourceOrBodyHint") }),
4622
+ /* @__PURE__ */ jsxRuntime.jsx(
4623
+ chunkI2NZGVBG_js.FormInput,
4624
+ {
4625
+ type: "text",
4626
+ label: t("sourceUrlLabel"),
4627
+ value: sourceUrl,
4628
+ onValueChange: setSourceUrl,
4629
+ placeholder: t("sourceUrlPlaceholder")
4630
+ }
4631
+ ),
4632
+ /* @__PURE__ */ jsxRuntime.jsx(
4633
+ chunkI2NZGVBG_js.FormTextarea,
4634
+ {
4635
+ label: t("bodyLabel"),
4636
+ value: body,
4637
+ onValueChange: setBody,
4638
+ placeholder: t("bodyPlaceholder"),
4639
+ rows: 5,
4640
+ className: "font-mono text-xs"
4641
+ }
4642
+ ),
4643
+ /* @__PURE__ */ jsxRuntime.jsx(
4644
+ chunkI2NZGVBG_js.FormInput,
4645
+ {
4646
+ type: "text",
4647
+ label: t("contentTypeLabel"),
4648
+ value: contentType,
4649
+ onValueChange: setContentType,
4650
+ placeholder: "application/json"
4651
+ }
4652
+ ),
4653
+ /* @__PURE__ */ jsxRuntime.jsx(
4654
+ chunkI2NZGVBG_js.FormInput,
4655
+ {
4656
+ type: "number",
4657
+ label: t("timeoutLabel"),
4658
+ value: String(timeoutMs),
4659
+ onValueChange: (value) => setTimeoutMs(Number(value)),
4660
+ min: 1e3,
4661
+ step: 1e3
4662
+ }
4663
+ ),
4664
+ /* @__PURE__ */ jsxRuntime.jsx(
4665
+ chunkI2NZGVBG_js.FormInput,
4666
+ {
4667
+ type: "text",
4668
+ label: t("connectionIdLabel"),
4669
+ value: connectionId,
4670
+ onValueChange: setConnectionId,
4671
+ placeholder: t("connectionIdHelp")
4672
+ }
4673
+ ),
4674
+ /* @__PURE__ */ jsxRuntime.jsx(
4675
+ ConfigFormActions,
4676
+ {
4677
+ cancelLabel: t("cancel"),
4678
+ saveLabel: t("save"),
4679
+ onCancel,
4680
+ onSave: handleSave
4681
+ }
4682
+ )
4683
+ ] });
4684
+ }
4572
4685
  function TemplateTransformNodeConfigForm({ config, onSave, onCancel }) {
4573
4686
  const t = chunkYXN2K77G_js.useTranslations("agents.workflow.templateTransformNodeConfig");
4574
4687
  const [template, setTemplate] = react.useState(config.template);
@@ -4578,7 +4691,7 @@ function TemplateTransformNodeConfigForm({ config, onSave, onCancel }) {
4578
4691
  };
4579
4692
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "space-y-4", children: [
4580
4693
  /* @__PURE__ */ jsxRuntime.jsx(
4581
- chunkZKUYNCAG_js.FormTextarea,
4694
+ chunkI2NZGVBG_js.FormTextarea,
4582
4695
  {
4583
4696
  label: t("templateLabel"),
4584
4697
  value: template,
@@ -4589,7 +4702,7 @@ function TemplateTransformNodeConfigForm({ config, onSave, onCancel }) {
4589
4702
  }
4590
4703
  ),
4591
4704
  /* @__PURE__ */ jsxRuntime.jsx(
4592
- chunkZKUYNCAG_js.FormInput,
4705
+ chunkI2NZGVBG_js.FormInput,
4593
4706
  {
4594
4707
  type: "text",
4595
4708
  label: t("outputVariableLabel"),
@@ -4618,7 +4731,7 @@ function IterationNodeConfigForm({ config, onSave, onCancel }) {
4618
4731
  };
4619
4732
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "space-y-4", children: [
4620
4733
  /* @__PURE__ */ jsxRuntime.jsx(
4621
- chunkZKUYNCAG_js.FormInput,
4734
+ chunkI2NZGVBG_js.FormInput,
4622
4735
  {
4623
4736
  type: "text",
4624
4737
  label: t("iteratorVariableLabel"),
@@ -4628,7 +4741,7 @@ function IterationNodeConfigForm({ config, onSave, onCancel }) {
4628
4741
  }
4629
4742
  ),
4630
4743
  /* @__PURE__ */ jsxRuntime.jsx(
4631
- chunkZKUYNCAG_js.FormInput,
4744
+ chunkI2NZGVBG_js.FormInput,
4632
4745
  {
4633
4746
  type: "number",
4634
4747
  label: t("maxIterationsLabel"),
@@ -4659,7 +4772,7 @@ function KnowledgeBaseNodeConfigForm({ config, onSave, onCancel }) {
4659
4772
  };
4660
4773
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "space-y-4", children: [
4661
4774
  /* @__PURE__ */ jsxRuntime.jsx(
4662
- chunkZKUYNCAG_js.FormInput,
4775
+ chunkI2NZGVBG_js.FormInput,
4663
4776
  {
4664
4777
  type: "text",
4665
4778
  label: t("sourceIdLabel"),
@@ -4669,7 +4782,7 @@ function KnowledgeBaseNodeConfigForm({ config, onSave, onCancel }) {
4669
4782
  }
4670
4783
  ),
4671
4784
  /* @__PURE__ */ jsxRuntime.jsx(
4672
- chunkZKUYNCAG_js.FormInput,
4785
+ chunkI2NZGVBG_js.FormInput,
4673
4786
  {
4674
4787
  type: "number",
4675
4788
  label: t("topKLabel"),
@@ -4680,7 +4793,7 @@ function KnowledgeBaseNodeConfigForm({ config, onSave, onCancel }) {
4680
4793
  }
4681
4794
  ),
4682
4795
  /* @__PURE__ */ jsxRuntime.jsx(
4683
- chunkZKUYNCAG_js.FormInput,
4796
+ chunkI2NZGVBG_js.FormInput,
4684
4797
  {
4685
4798
  type: "number",
4686
4799
  label: t("similarityThresholdLabel"),
@@ -4711,7 +4824,7 @@ function AnswerNodeConfigForm({ config, onSave, onCancel }) {
4711
4824
  };
4712
4825
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "space-y-4", children: [
4713
4826
  /* @__PURE__ */ jsxRuntime.jsx(
4714
- chunkZKUYNCAG_js.FormTextarea,
4827
+ chunkI2NZGVBG_js.FormTextarea,
4715
4828
  {
4716
4829
  label: t("outputTemplateLabel"),
4717
4830
  hint: t("outputTemplateHelp"),
@@ -5145,7 +5258,7 @@ function VariableAggregatorNodeConfigForm({ config, onSave, onCancel }) {
5145
5258
  }
5146
5259
  ),
5147
5260
  /* @__PURE__ */ jsxRuntime.jsx(
5148
- chunkZKUYNCAG_js.FormInput,
5261
+ chunkI2NZGVBG_js.FormInput,
5149
5262
  {
5150
5263
  type: "text",
5151
5264
  label: t("outputVariableLabel"),
@@ -5155,7 +5268,7 @@ function VariableAggregatorNodeConfigForm({ config, onSave, onCancel }) {
5155
5268
  }
5156
5269
  ),
5157
5270
  /* @__PURE__ */ jsxRuntime.jsx(
5158
- chunkZKUYNCAG_js.FormSelect,
5271
+ chunkI2NZGVBG_js.FormSelect,
5159
5272
  {
5160
5273
  label: t("aggregationModeLabel"),
5161
5274
  value: aggregationMode,
@@ -5188,7 +5301,7 @@ function DocumentExtractorNodeConfigForm({ config, onSave, onCancel }) {
5188
5301
  };
5189
5302
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "space-y-4", children: [
5190
5303
  /* @__PURE__ */ jsxRuntime.jsx(
5191
- chunkZKUYNCAG_js.FormSelect,
5304
+ chunkI2NZGVBG_js.FormSelect,
5192
5305
  {
5193
5306
  label: t("extractionModeLabel"),
5194
5307
  value: extractionMode,
@@ -5197,7 +5310,7 @@ function DocumentExtractorNodeConfigForm({ config, onSave, onCancel }) {
5197
5310
  }
5198
5311
  ),
5199
5312
  /* @__PURE__ */ jsxRuntime.jsx(
5200
- chunkZKUYNCAG_js.FormInput,
5313
+ chunkI2NZGVBG_js.FormInput,
5201
5314
  {
5202
5315
  type: "text",
5203
5316
  label: t("outputVariableLabel"),
@@ -5374,7 +5487,7 @@ function IterationStartNodeConfigForm({ config, onSave, onCancel }) {
5374
5487
  };
5375
5488
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "space-y-4", children: [
5376
5489
  /* @__PURE__ */ jsxRuntime.jsx(
5377
- chunkZKUYNCAG_js.FormInput,
5490
+ chunkI2NZGVBG_js.FormInput,
5378
5491
  {
5379
5492
  type: "text",
5380
5493
  label: t("iteratorVariableLabel"),
@@ -5384,7 +5497,7 @@ function IterationStartNodeConfigForm({ config, onSave, onCancel }) {
5384
5497
  }
5385
5498
  ),
5386
5499
  /* @__PURE__ */ jsxRuntime.jsx(
5387
- chunkZKUYNCAG_js.FormInput,
5500
+ chunkI2NZGVBG_js.FormInput,
5388
5501
  {
5389
5502
  type: "text",
5390
5503
  label: t("itemVariableLabel"),
@@ -5394,7 +5507,7 @@ function IterationStartNodeConfigForm({ config, onSave, onCancel }) {
5394
5507
  }
5395
5508
  ),
5396
5509
  /* @__PURE__ */ jsxRuntime.jsx(
5397
- chunkZKUYNCAG_js.FormInput,
5510
+ chunkI2NZGVBG_js.FormInput,
5398
5511
  {
5399
5512
  type: "text",
5400
5513
  label: t("indexVariableLabel"),
@@ -5666,7 +5779,7 @@ function GroupNodeConfigForm({ config, onSave, onCancel }) {
5666
5779
  };
5667
5780
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "space-y-4", children: [
5668
5781
  /* @__PURE__ */ jsxRuntime.jsx(
5669
- chunkZKUYNCAG_js.FormInput,
5782
+ chunkI2NZGVBG_js.FormInput,
5670
5783
  {
5671
5784
  type: "text",
5672
5785
  label: translations("labelField"),
@@ -5676,7 +5789,7 @@ function GroupNodeConfigForm({ config, onSave, onCancel }) {
5676
5789
  }
5677
5790
  ),
5678
5791
  /* @__PURE__ */ jsxRuntime.jsx(
5679
- chunkZKUYNCAG_js.FormTextarea,
5792
+ chunkI2NZGVBG_js.FormTextarea,
5680
5793
  {
5681
5794
  label: translations("descriptionField"),
5682
5795
  value: description,
@@ -5710,100 +5823,70 @@ function GroupNodeConfigForm({ config, onSave, onCancel }) {
5710
5823
  )
5711
5824
  ] });
5712
5825
  }
5713
- var PROVIDER_TYPES = [
5714
- { value: "aws_bedrock", label: "AWS Bedrock" },
5715
- { value: "openai_api", label: "OpenAI API" },
5716
- { value: "google_vertex", label: "Google Vertex AI" },
5717
- { value: "azure_openai", label: "Azure OpenAI" },
5718
- { value: "anthropic_api", label: "Anthropic API" },
5719
- { value: "groq", label: "Groq Cloud" },
5720
- { value: "mistral", label: "Mistral AI" },
5721
- { value: "huggingface", label: "Hugging Face Inference" },
5722
- { value: "ollama", label: "Ollama (Local)" },
5723
- { value: "custom", label: "Custom OpenAI-compatible" }
5724
- ];
5725
- var REGION_OPTIONS = {
5726
- aws_bedrock: [
5727
- { value: "us-east-1", label: "US East (N. Virginia)" },
5728
- { value: "us-west-2", label: "US West (Oregon)" },
5729
- { value: "eu-west-1", label: "Europe (Ireland)" },
5730
- { value: "eu-central-1", label: "Europe (Frankfurt)" },
5731
- { value: "ap-northeast-1", label: "Asia Pacific (Tokyo)" },
5732
- { value: "ap-southeast-1", label: "Asia Pacific (Singapore)" },
5733
- { value: "ap-south-1", label: "Asia Pacific (Mumbai)" },
5734
- { value: "sa-east-1", label: "South America (S\xE3o Paulo)" },
5735
- { value: "ca-central-1", label: "Canada (Central)" }
5736
- ],
5737
- google_vertex: [
5738
- { value: "us-central1", label: "US Central (Iowa)" },
5739
- { value: "us-east4", label: "US East (Virginia)" },
5740
- { value: "europe-west4", label: "Europe West (Netherlands)" },
5741
- { value: "europe-west1", label: "Europe West (Belgium)" },
5742
- { value: "asia-northeast1", label: "Asia NE (Tokyo)" },
5743
- { value: "asia-southeast1", label: "Asia SE (Singapore)" },
5744
- { value: "southamerica-east1", label: "South America (S\xE3o Paulo)" }
5745
- ],
5746
- azure_openai: [
5747
- { value: "eastus", label: "East US" },
5748
- { value: "eastus2", label: "East US 2" },
5749
- { value: "westeurope", label: "West Europe" },
5750
- { value: "swedencentral", label: "Sweden Central" },
5751
- { value: "japaneast", label: "Japan East" },
5752
- { value: "australiaeast", label: "Australia East" },
5753
- { value: "canadaeast", label: "Canada East" },
5754
- { value: "uksouth", label: "UK South" }
5755
- ]
5756
- };
5757
- var MODEL_FAMILIES = {
5758
- aws_bedrock: [
5759
- { id: "claude", label: "Anthropic Claude", models: ["anthropic.claude-haiku-4-5-v1:0", "anthropic.claude-sonnet-4-6-v1:0", "anthropic.claude-opus-4-6-v1:0"] },
5760
- { id: "nova", label: "Amazon Nova", models: ["amazon.nova-lite-v1:0", "amazon.nova-pro-v1:0"] },
5761
- { id: "llama", label: "Meta Llama", models: ["meta.llama3-3-70b-instruct-v1:0"] },
5762
- { id: "mistral-bedrock", label: "Mistral AI", models: ["mistral.mistral-large-2411-v1:0"] }
5763
- ],
5764
- openai_api: [
5765
- { id: "gpt5", label: "GPT-5 Family", models: ["openai.gpt-5-v1:0", "openai.gpt-5-mini-v1:0"] }
5766
- ],
5767
- google_vertex: [
5768
- { id: "gemini", label: "Gemini Family", models: ["google.gemini-3-flash-v1:0", "google.gemini-3-1-pro-v1:0"] }
5769
- ],
5770
- anthropic_api: [
5771
- { id: "claude-direct", label: "Claude Family", models: ["anthropic.claude-haiku-4-5-v1:0", "anthropic.claude-sonnet-4-6-v1:0", "anthropic.claude-opus-4-6-v1:0"] }
5772
- ],
5773
- groq: [
5774
- { id: "groq-llama", label: "Llama (Groq)", models: ["meta.llama3-3-70b-instruct-v1:0"] },
5775
- { id: "groq-mixtral", label: "Mixtral (Groq)", models: ["mistral.mixtral-8x7b-v1:0"] }
5776
- ],
5777
- mistral: [
5778
- { id: "mistral-large", label: "Mistral Large", models: ["mistral.mistral-large-2411-v1:0"] },
5779
- { id: "mistral-small", label: "Mistral Small", models: ["mistral.mistral-small-v1:0"] }
5780
- ]
5781
- };
5826
+ var catalogCache = null;
5827
+ var catalogPromise = null;
5828
+ async function loadCatalog() {
5829
+ if (catalogCache) return catalogCache;
5830
+ if (!catalogPromise) {
5831
+ catalogPromise = chunkF54Q2YJY_js.listModelProviderCatalog().then((rows) => {
5832
+ catalogCache = rows;
5833
+ return rows;
5834
+ });
5835
+ }
5836
+ return catalogPromise;
5837
+ }
5838
+ var ENDPOINT_SLUGS = /* @__PURE__ */ new Set(["custom", "azure_openai", "ollama"]);
5782
5839
  function ModelProviderNodeConfigForm({ config, onSave, onCancel }) {
5783
5840
  const t = chunkYXN2K77G_js.useTranslations("agents.workflow.modelProviderNodeConfig");
5841
+ const [catalog, setCatalog] = react.useState(catalogCache);
5842
+ const [catalogError, setCatalogError] = react.useState(null);
5784
5843
  const [providerType, setProviderType] = react.useState(config.providerType);
5785
5844
  const [name, setName] = react.useState(config.name ?? "");
5786
5845
  const [region, setRegion] = react.useState(config.region ?? "");
5787
5846
  const [endpoint, setEndpoint] = react.useState(config.endpoint ?? "");
5788
5847
  const [credentialRef, setCredentialRef] = react.useState(config.credentialRef ?? "");
5789
5848
  const [apiKeyRef, setApiKeyRef] = react.useState(config.apiKeyRef ?? "");
5790
- const [selectedFamilies, setSelectedFamilies] = react.useState(() => {
5791
- const families2 = MODEL_FAMILIES[config.providerType] ?? [];
5792
- const filter = new Set(config.modelFilter ?? []);
5793
- const selected = /* @__PURE__ */ new Set();
5794
- for (const family of families2) {
5795
- if (family.models.some((m) => filter.has(m)) || filter.size === 0) {
5796
- selected.add(family.id);
5797
- }
5798
- }
5799
- return selected;
5800
- });
5801
- const regions = REGION_OPTIONS[providerType] ?? [];
5802
- const families = MODEL_FAMILIES[providerType] ?? [];
5849
+ const [selectedFamilies, setSelectedFamilies] = react.useState(/* @__PURE__ */ new Set());
5850
+ react.useEffect(() => {
5851
+ let cancelled = false;
5852
+ if (catalog) return;
5853
+ void loadCatalog().then((rows) => {
5854
+ if (cancelled) return;
5855
+ setCatalog(rows);
5856
+ }).catch((error) => {
5857
+ if (cancelled) return;
5858
+ const message = error instanceof Error ? error.message : "Failed to load provider catalog";
5859
+ setCatalogError(message);
5860
+ });
5861
+ return () => {
5862
+ cancelled = true;
5863
+ };
5864
+ }, [catalog]);
5865
+ const currentProvider = react.useMemo(() => {
5866
+ if (!catalog) return void 0;
5867
+ return catalog.find((entry) => entry.slug === providerType);
5868
+ }, [catalog, providerType]);
5869
+ const families = currentProvider?.families ?? [];
5870
+ const regions = Array.isArray(currentProvider?.regions) ? currentProvider.regions : [];
5803
5871
  const showRegion = regions.length > 0;
5804
- const showEndpoint = providerType === "custom" || providerType === "azure_openai" || providerType === "ollama";
5805
- const showApiKey = ["openai_api", "anthropic_api", "groq", "mistral", "huggingface", "custom"].includes(providerType);
5806
- const showCredentialRef = providerType === "aws_bedrock" || providerType === "google_vertex";
5872
+ const showEndpoint = ENDPOINT_SLUGS.has(providerType);
5873
+ const authType = currentProvider?.authType ?? null;
5874
+ const showApiKey = authType === "api_key";
5875
+ const showCredentialRef = authType === "iam_role";
5876
+ react.useEffect(() => {
5877
+ if (!currentProvider) return;
5878
+ setSelectedFamilies((previous) => {
5879
+ if (previous.size > 0) return previous;
5880
+ const filter = new Set(config.modelFilter ?? []);
5881
+ const next = /* @__PURE__ */ new Set();
5882
+ for (const family of currentProvider.families) {
5883
+ if (filter.size === 0 || family.modelIds.some((id) => filter.has(id))) {
5884
+ next.add(family.id);
5885
+ }
5886
+ }
5887
+ return next;
5888
+ });
5889
+ }, [currentProvider, config.modelFilter]);
5807
5890
  const handleToggleFamily = (familyId) => {
5808
5891
  setSelectedFamilies((previous) => {
5809
5892
  const next = new Set(previous);
@@ -5816,11 +5899,11 @@ function ModelProviderNodeConfigForm({ config, onSave, onCancel }) {
5816
5899
  const newType = value;
5817
5900
  setProviderType(newType);
5818
5901
  setRegion("");
5819
- const newFamilies = MODEL_FAMILIES[newType] ?? [];
5820
- setSelectedFamilies(new Set(newFamilies.map((f) => f.id)));
5902
+ const next = catalog?.find((entry) => entry.slug === newType);
5903
+ setSelectedFamilies(new Set((next?.families ?? []).map((family) => family.id)));
5821
5904
  };
5822
5905
  const handleSave = () => {
5823
- const modelFilter = families.filter((f) => selectedFamilies.has(f.id)).flatMap((f) => f.models);
5906
+ const modelFilter = families.filter((family) => selectedFamilies.has(family.id)).flatMap((family) => family.modelIds);
5824
5907
  onSave({
5825
5908
  ...config,
5826
5909
  providerType,
@@ -5832,9 +5915,27 @@ function ModelProviderNodeConfigForm({ config, onSave, onCancel }) {
5832
5915
  modelFilter
5833
5916
  });
5834
5917
  };
5918
+ if (catalogError) {
5919
+ return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "space-y-4", children: [
5920
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "rounded-lg border border-red-200 bg-red-50 p-3 text-sm text-red-900 dark:border-red-500/30 dark:bg-red-500/10 dark:text-red-200", children: catalogError }),
5921
+ /* @__PURE__ */ jsxRuntime.jsx(
5922
+ ConfigFormActions,
5923
+ {
5924
+ cancelLabel: t("cancel"),
5925
+ saveLabel: t("save"),
5926
+ onCancel,
5927
+ onSave: handleSave,
5928
+ saveDisabled: true
5929
+ }
5930
+ )
5931
+ ] });
5932
+ }
5933
+ if (!catalog) {
5934
+ return /* @__PURE__ */ jsxRuntime.jsx("div", { className: "space-y-4 h-32" });
5935
+ }
5835
5936
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "space-y-4", children: [
5836
5937
  /* @__PURE__ */ jsxRuntime.jsx(
5837
- chunkZKUYNCAG_js.FormInput,
5938
+ chunkI2NZGVBG_js.FormInput,
5838
5939
  {
5839
5940
  type: "text",
5840
5941
  label: t("nameLabel"),
@@ -5844,25 +5945,28 @@ function ModelProviderNodeConfigForm({ config, onSave, onCancel }) {
5844
5945
  }
5845
5946
  ),
5846
5947
  /* @__PURE__ */ jsxRuntime.jsx(
5847
- chunkZKUYNCAG_js.FormSelect,
5948
+ chunkI2NZGVBG_js.FormSelect,
5848
5949
  {
5849
5950
  label: t("providerTypeLabel"),
5850
5951
  value: providerType,
5851
5952
  onValueChange: handleProviderChange,
5852
- options: PROVIDER_TYPES.map((pt) => ({ value: pt.value, label: pt.label }))
5953
+ options: catalog.filter((entry) => entry.enabled).map((entry) => ({ value: entry.slug, label: entry.name }))
5853
5954
  }
5854
5955
  ),
5855
5956
  showRegion && /* @__PURE__ */ jsxRuntime.jsx(
5856
- chunkZKUYNCAG_js.FormSelect,
5957
+ chunkI2NZGVBG_js.FormSelect,
5857
5958
  {
5858
5959
  label: t("regionLabel"),
5859
5960
  value: region,
5860
5961
  onValueChange: setRegion,
5861
- options: [{ value: "", label: t("selectRegion") }, ...regions]
5962
+ options: [
5963
+ { value: "", label: t("selectRegion") },
5964
+ ...regions.map((value) => ({ value, label: value }))
5965
+ ]
5862
5966
  }
5863
5967
  ),
5864
5968
  showEndpoint && /* @__PURE__ */ jsxRuntime.jsx(
5865
- chunkZKUYNCAG_js.FormInput,
5969
+ chunkI2NZGVBG_js.FormInput,
5866
5970
  {
5867
5971
  type: "text",
5868
5972
  label: t("endpointLabel"),
@@ -5872,7 +5976,7 @@ function ModelProviderNodeConfigForm({ config, onSave, onCancel }) {
5872
5976
  }
5873
5977
  ),
5874
5978
  showApiKey && /* @__PURE__ */ jsxRuntime.jsx(
5875
- chunkZKUYNCAG_js.FormInput,
5979
+ chunkI2NZGVBG_js.FormInput,
5876
5980
  {
5877
5981
  type: "password",
5878
5982
  label: t("apiKeyLabel"),
@@ -5882,7 +5986,7 @@ function ModelProviderNodeConfigForm({ config, onSave, onCancel }) {
5882
5986
  }
5883
5987
  ),
5884
5988
  showCredentialRef && /* @__PURE__ */ jsxRuntime.jsx(
5885
- chunkZKUYNCAG_js.FormInput,
5989
+ chunkI2NZGVBG_js.FormInput,
5886
5990
  {
5887
5991
  type: "text",
5888
5992
  label: t("credentialRefLabel"),
@@ -5904,9 +6008,9 @@ function ModelProviderNodeConfigForm({ config, onSave, onCancel }) {
5904
6008
  children: [
5905
6009
  /* @__PURE__ */ jsxRuntime.jsx("div", { className: `flex h-4 w-4 shrink-0 items-center justify-center rounded ${isSelected ? "bg-indigo-500 text-white" : "border border-gray-300 dark:border-gray-600"}`, children: isSelected && /* @__PURE__ */ jsxRuntime.jsx("svg", { className: "h-3 w-3", viewBox: "0 0 20 20", fill: "currentColor", children: /* @__PURE__ */ jsxRuntime.jsx("path", { fillRule: "evenodd", d: "M16.707 5.293a1 1 0 010 1.414l-8 8a1 1 0 01-1.414 0l-4-4a1 1 0 011.414-1.414L8 12.586l7.293-7.293a1 1 0 011.414 0z", clipRule: "evenodd" }) }) }),
5906
6010
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "min-w-0 flex-1", children: [
5907
- /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-xs font-medium text-gray-900 dark:text-white", children: family.label }),
6011
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-xs font-medium text-gray-900 dark:text-white", children: family.name }),
5908
6012
  /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "ml-2 text-[10px] text-gray-400 dark:text-gray-500", children: [
5909
- family.models.length,
6013
+ family.modelIds.length,
5910
6014
  " models"
5911
6015
  ] })
5912
6016
  ] })
@@ -5952,7 +6056,7 @@ function RuleNodeConfigForm({ config, onSave, onCancel, availableRules }) {
5952
6056
  ]
5953
6057
  }
5954
6058
  ) : /* @__PURE__ */ jsxRuntime.jsx(
5955
- chunkZKUYNCAG_js.FormInput,
6059
+ chunkI2NZGVBG_js.FormInput,
5956
6060
  {
5957
6061
  type: "text",
5958
6062
  value: ruleId,
@@ -5968,7 +6072,7 @@ function RuleNodeConfigForm({ config, onSave, onCancel, availableRules }) {
5968
6072
  ] }),
5969
6073
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "grid grid-cols-2 gap-3", children: [
5970
6074
  /* @__PURE__ */ jsxRuntime.jsx(
5971
- chunkZKUYNCAG_js.FormInput,
6075
+ chunkI2NZGVBG_js.FormInput,
5972
6076
  {
5973
6077
  type: "number",
5974
6078
  label: t("priorityLabel", { _: "Priority" }),
@@ -6040,7 +6144,7 @@ function AgentNodeConfigForm({
6040
6144
  }));
6041
6145
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "space-y-4", children: [
6042
6146
  agentOptions.length > 0 ? /* @__PURE__ */ jsxRuntime.jsx(
6043
- chunkZKUYNCAG_js.FormSelect,
6147
+ chunkI2NZGVBG_js.FormSelect,
6044
6148
  {
6045
6149
  label: t("agentLabel", { _: "Agent" }),
6046
6150
  value: agentId,
@@ -6048,7 +6152,7 @@ function AgentNodeConfigForm({
6048
6152
  options: [{ value: "", label: t("agentPickPrompt", { _: "Choose an agent\u2026" }) }, ...agentOptions]
6049
6153
  }
6050
6154
  ) : /* @__PURE__ */ jsxRuntime.jsx(
6051
- chunkZKUYNCAG_js.FormInput,
6155
+ chunkI2NZGVBG_js.FormInput,
6052
6156
  {
6053
6157
  type: "text",
6054
6158
  label: t("agentIdLabel", { _: "Agent ID" }),
@@ -6058,7 +6162,7 @@ function AgentNodeConfigForm({
6058
6162
  }
6059
6163
  ),
6060
6164
  connOptions.length > 0 ? /* @__PURE__ */ jsxRuntime.jsx(
6061
- chunkZKUYNCAG_js.FormSelect,
6165
+ chunkI2NZGVBG_js.FormSelect,
6062
6166
  {
6063
6167
  label: t("connectionLabel", { _: "Model provider connection" }),
6064
6168
  value: connectionId,
@@ -6066,7 +6170,7 @@ function AgentNodeConfigForm({
6066
6170
  options: [{ value: "", label: t("connectionPickPrompt", { _: "Inline model (no connection)" }) }, ...connOptions]
6067
6171
  }
6068
6172
  ) : /* @__PURE__ */ jsxRuntime.jsx(
6069
- chunkZKUYNCAG_js.FormInput,
6173
+ chunkI2NZGVBG_js.FormInput,
6070
6174
  {
6071
6175
  type: "text",
6072
6176
  label: t("connectionIdLabel", { _: "Connection ID" }),
@@ -6076,7 +6180,7 @@ function AgentNodeConfigForm({
6076
6180
  }
6077
6181
  ),
6078
6182
  /* @__PURE__ */ jsxRuntime.jsx(
6079
- chunkZKUYNCAG_js.FormInput,
6183
+ chunkI2NZGVBG_js.FormInput,
6080
6184
  {
6081
6185
  type: "text",
6082
6186
  label: t("modelIdLabel", { _: "Model override (optional)" }),
@@ -6086,7 +6190,7 @@ function AgentNodeConfigForm({
6086
6190
  }
6087
6191
  ),
6088
6192
  /* @__PURE__ */ jsxRuntime.jsx(
6089
- chunkZKUYNCAG_js.FormTextarea,
6193
+ chunkI2NZGVBG_js.FormTextarea,
6090
6194
  {
6091
6195
  label: t("systemPromptLabel", { _: "System prompt" }),
6092
6196
  value: systemPrompt,
@@ -6096,7 +6200,7 @@ function AgentNodeConfigForm({
6096
6200
  }
6097
6201
  ),
6098
6202
  /* @__PURE__ */ jsxRuntime.jsx(
6099
- chunkZKUYNCAG_js.FormTextarea,
6203
+ chunkI2NZGVBG_js.FormTextarea,
6100
6204
  {
6101
6205
  label: t("userPromptLabel", { _: "User prompt" }),
6102
6206
  value: userPrompt,
@@ -6107,7 +6211,7 @@ function AgentNodeConfigForm({
6107
6211
  ),
6108
6212
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "grid grid-cols-2 gap-3", children: [
6109
6213
  /* @__PURE__ */ jsxRuntime.jsx(
6110
- chunkZKUYNCAG_js.FormInput,
6214
+ chunkI2NZGVBG_js.FormInput,
6111
6215
  {
6112
6216
  type: "number",
6113
6217
  label: t("maxTokensLabel", { _: "Max output tokens" }),
@@ -6119,7 +6223,7 @@ function AgentNodeConfigForm({
6119
6223
  }
6120
6224
  ),
6121
6225
  /* @__PURE__ */ jsxRuntime.jsx(
6122
- chunkZKUYNCAG_js.FormInput,
6226
+ chunkI2NZGVBG_js.FormInput,
6123
6227
  {
6124
6228
  type: "number",
6125
6229
  label: t("temperatureLabel", { _: "Temperature" }),
@@ -6148,6 +6252,7 @@ var NODE_TITLE_KEYS = {
6148
6252
  if_else: "ifElseNodeConfig",
6149
6253
  code: "codeNodeConfig",
6150
6254
  http_request: "httpRequestNodeConfig",
6255
+ s3_write: "s3WriteNodeConfig",
6151
6256
  template_transform: "templateTransformNodeConfig",
6152
6257
  iteration: "iterationNodeConfig",
6153
6258
  knowledge_base: "knowledgeBaseNodeConfig",
@@ -6196,6 +6301,8 @@ function LogicNodeModal({ onSave, entities = [], datasources = [], onLoadTables,
6196
6301
  return /* @__PURE__ */ jsxRuntime.jsx(CodeNodeConfigForm, { config, onSave: handleSave, onCancel: closeModal });
6197
6302
  case "http_request":
6198
6303
  return /* @__PURE__ */ jsxRuntime.jsx(HttpRequestNodeConfigForm, { config, onSave: handleSave, onCancel: closeModal });
6304
+ case "s3_write":
6305
+ return /* @__PURE__ */ jsxRuntime.jsx(S3WriteNodeConfigForm, { config, onSave: handleSave, onCancel: closeModal });
6199
6306
  case "template_transform":
6200
6307
  return /* @__PURE__ */ jsxRuntime.jsx(TemplateTransformNodeConfigForm, { config, onSave: handleSave, onCancel: closeModal });
6201
6308
  case "iteration":
@@ -6235,7 +6342,7 @@ function LogicNodeModal({ onSave, entities = [], datasources = [], onLoadTables,
6235
6342
  };
6236
6343
  const isExperimental = isExperimentalNodeType(config.type);
6237
6344
  return /* @__PURE__ */ jsxRuntime.jsxs(
6238
- chunkZKUYNCAG_js.GlassModal,
6345
+ chunkI2NZGVBG_js.GlassModal,
6239
6346
  {
6240
6347
  open,
6241
6348
  onClose: closeModal,
@@ -6249,8 +6356,10 @@ function LogicNodeModal({ onSave, entities = [], datasources = [], onLoadTables,
6249
6356
  isExperimental && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "mb-4 flex items-start gap-2 rounded-lg border border-amber-300/40 bg-amber-50/70 px-3 py-2 text-xs text-amber-900 dark:border-amber-500/30 dark:bg-amber-500/10 dark:text-amber-100", children: [
6250
6357
  /* @__PURE__ */ jsxRuntime.jsx(outline.BeakerIcon, { className: "mt-0.5 h-4 w-4 shrink-0 text-amber-600 dark:text-amber-300", "aria-hidden": "true" }),
6251
6358
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "space-y-1", children: [
6252
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: "font-semibold", children: t("experimentalNode") }),
6253
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: "text-amber-800/90 dark:text-amber-100/80", children: t("experimentalNodeWarning") })
6359
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "font-semibold", children: t("experimentalNode", { _: "Experimental node" }) }),
6360
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "text-amber-800/90 dark:text-amber-100/80", children: t("experimentalNodeWarning", {
6361
+ _: "This node's executor is a stub today. The configuration is saved, but the node may pass through inputs unchanged at run-time until the executor lands."
6362
+ }) })
6254
6363
  ] })
6255
6364
  ] }),
6256
6365
  renderForm()
@@ -6304,7 +6413,7 @@ function NodeContextMenu({ position, targetId, onClose, onEdit, onDuplicate, onC
6304
6413
  }
6305
6414
  ];
6306
6415
  return /* @__PURE__ */ jsxRuntime.jsx(
6307
- chunkZKUYNCAG_js.ContextMenu,
6416
+ chunkI2NZGVBG_js.ContextMenu,
6308
6417
  {
6309
6418
  position,
6310
6419
  onClose,
@@ -6361,7 +6470,7 @@ function PanelContextMenu({ position, onClose, onPaste, onSelectAll, onFitView,
6361
6470
  }
6362
6471
  ];
6363
6472
  return /* @__PURE__ */ jsxRuntime.jsx(
6364
- chunkZKUYNCAG_js.ContextMenu,
6473
+ chunkI2NZGVBG_js.ContextMenu,
6365
6474
  {
6366
6475
  position,
6367
6476
  onClose,
@@ -6508,7 +6617,7 @@ function SelectionContextMenu({
6508
6617
  }
6509
6618
  ];
6510
6619
  return /* @__PURE__ */ jsxRuntime.jsx(
6511
- chunkZKUYNCAG_js.ContextMenu,
6620
+ chunkI2NZGVBG_js.ContextMenu,
6512
6621
  {
6513
6622
  position,
6514
6623
  onClose,
@@ -6974,7 +7083,7 @@ function WorkflowCanvasInner({
6974
7083
  };
6975
7084
  }
6976
7085
  if (isLogicNodeType(savedNode.type)) {
6977
- const config = savedNode.data.config ?? chunkC7BI5LQ6_js.createDefaultLogicNodeConfig(savedNode.type);
7086
+ const config = savedNode.data.config ?? chunkC3H4FM4A_js.createDefaultLogicNodeConfig(savedNode.type);
6978
7087
  if (config) {
6979
7088
  const baseNode = {
6980
7089
  id: savedNode.id,
@@ -7153,7 +7262,7 @@ function WorkflowCanvasInner({
7153
7262
  }
7154
7263
  storeTakeSnapshot();
7155
7264
  const isTB = direction === "TB";
7156
- const repositionedNodes = chunkC7BI5LQ6_js.applyDagreLayout(nodes, edges, direction).map((node) => ({
7265
+ const repositionedNodes = chunkC3H4FM4A_js.applyDagreLayout(nodes, edges, direction).map((node) => ({
7157
7266
  ...node,
7158
7267
  sourcePosition: isTB ? react$1.Position.Bottom : react$1.Position.Right,
7159
7268
  targetPosition: isTB ? react$1.Position.Top : react$1.Position.Left
@@ -7282,7 +7391,7 @@ function WorkflowCanvasInner({
7282
7391
  }, [storePaste]);
7283
7392
  const contextMenuAddNote = react.useCallback((flowPosition) => {
7284
7393
  storeTakeSnapshot();
7285
- const noteConfig = chunkC7BI5LQ6_js.createDefaultLogicNodeConfig("note");
7394
+ const noteConfig = chunkC3H4FM4A_js.createDefaultLogicNodeConfig("note");
7286
7395
  const noteNode = {
7287
7396
  id: crypto.randomUUID(),
7288
7397
  type: "note",
@@ -7793,7 +7902,7 @@ function WorkflowCanvasInner({
7793
7902
  };
7794
7903
  setNodes((currentNodes) => [...currentNodes, newNode]);
7795
7904
  } else if (nodeType === "group") {
7796
- const groupConfig = configRaw ? JSON.parse(configRaw) : chunkC7BI5LQ6_js.createDefaultLogicNodeConfig("group");
7905
+ const groupConfig = configRaw ? JSON.parse(configRaw) : chunkC3H4FM4A_js.createDefaultLogicNodeConfig("group");
7797
7906
  if (!groupConfig) return;
7798
7907
  const newNode = {
7799
7908
  id: newNodeId,
@@ -7810,7 +7919,7 @@ function WorkflowCanvasInner({
7810
7919
  };
7811
7920
  setNodes((currentNodes) => [...currentNodes, newNode]);
7812
7921
  } else if (isLogicNodeType(nodeType)) {
7813
- const config = configRaw ? JSON.parse(configRaw) : chunkC7BI5LQ6_js.createDefaultLogicNodeConfig(nodeType);
7922
+ const config = configRaw ? JSON.parse(configRaw) : chunkC3H4FM4A_js.createDefaultLogicNodeConfig(nodeType);
7814
7923
  if (!config) return;
7815
7924
  const newNode = {
7816
7925
  id: newNodeId,
@@ -7948,7 +8057,7 @@ function WorkflowCanvasInner({
7948
8057
  (edgeId, nodeType, position) => {
7949
8058
  if (!isLogicNodeType(nodeType)) return;
7950
8059
  storeTakeSnapshot();
7951
- const config = chunkC7BI5LQ6_js.createDefaultLogicNodeConfig(nodeType);
8060
+ const config = chunkC3H4FM4A_js.createDefaultLogicNodeConfig(nodeType);
7952
8061
  if (!config) return;
7953
8062
  const newNodeId = crypto.randomUUID();
7954
8063
  const newNode = {
@@ -8415,7 +8524,14 @@ exports.MINIMAP_NODE_COLORS = MINIMAP_NODE_COLORS;
8415
8524
  exports.ModelProviderFlowNode = ModelProviderFlowNode;
8416
8525
  exports.NODE_EXECUTION_ACCENT_COLORS = NODE_EXECUTION_ACCENT_COLORS;
8417
8526
  exports.NodeCard = NodeCard;
8527
+ exports.NodeCardBadge = NodeCardBadge;
8528
+ exports.NodeCardDeleteAction = NodeCardDeleteAction;
8529
+ exports.NodeCardHeader = NodeCardHeader;
8530
+ exports.NodeCardMeta = NodeCardMeta;
8418
8531
  exports.NodeContextMenu = NodeContextMenu;
8532
+ exports.NodeIconBubble = NodeIconBubble;
8533
+ exports.NodeInteractiveCard = NodeInteractiveCard;
8534
+ exports.NodeRunningIndicator = NodeRunningIndicator;
8419
8535
  exports.NoteFlowNode = NoteFlowNode;
8420
8536
  exports.OpenAIIcon = OpenAIIcon;
8421
8537
  exports.PanelContextMenu = PanelContextMenu;
@@ -8431,6 +8547,7 @@ exports.VariableAggregatorFlowNode = VariableAggregatorFlowNode;
8431
8547
  exports.VariableAssignerFlowNode = VariableAssignerFlowNode;
8432
8548
  exports.WorkflowBuilderProvider = WorkflowBuilderProvider;
8433
8549
  exports.WorkflowCanvas = WorkflowCanvas;
8550
+ exports.WorkflowHandle = WorkflowHandle;
8434
8551
  exports.Workspace = Workspace;
8435
8552
  exports.getCompatibleModels = getCompatibleModels;
8436
8553
  exports.getDefaultFrameworkForModel = getDefaultFrameworkForModel;
@@ -8448,5 +8565,5 @@ exports.useModalStore = useModalStore;
8448
8565
  exports.useWorkflowBuilderClient = useWorkflowBuilderClient;
8449
8566
  exports.useWorkflowBuilderClientOptional = useWorkflowBuilderClientOptional;
8450
8567
  exports.useWorkflowStore = useWorkflowStore;
8451
- //# sourceMappingURL=chunk-XXYDLYIT.js.map
8452
- //# sourceMappingURL=chunk-XXYDLYIT.js.map
8568
+ //# sourceMappingURL=chunk-EFOXN3LC.js.map
8569
+ //# sourceMappingURL=chunk-EFOXN3LC.js.map