@datatechsolutions/ui 3.3.0 → 3.4.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 (166) hide show
  1. package/dist/astrlabe/index.d.mts +22 -30
  2. package/dist/astrlabe/index.d.ts +22 -30
  3. package/dist/astrlabe/index.js +112 -112
  4. package/dist/astrlabe/index.mjs +5 -5
  5. package/dist/astrlabe/workflow-canvas.d.mts +6 -69
  6. package/dist/astrlabe/workflow-canvas.d.ts +6 -69
  7. package/dist/astrlabe/workflow-canvas.js +5 -5
  8. package/dist/astrlabe/workflow-canvas.mjs +4 -4
  9. package/dist/brand/index.d.mts +1 -15
  10. package/dist/brand/index.d.ts +1 -15
  11. package/dist/brand/index.js +0 -14
  12. package/dist/brand/index.js.map +1 -1
  13. package/dist/brand/index.mjs +0 -14
  14. package/dist/brand/index.mjs.map +1 -1
  15. package/dist/{chunk-FAGDZEKM.js → chunk-2OZZH2IO.js} +2 -2
  16. package/dist/chunk-2OZZH2IO.js.map +1 -0
  17. package/dist/{chunk-SYNVNTLJ.mjs → chunk-3AY5HIQ6.mjs} +2 -2
  18. package/dist/chunk-3AY5HIQ6.mjs.map +1 -0
  19. package/dist/{chunk-JSNRCYSO.js → chunk-45QAUEYT.js} +4 -4
  20. package/dist/{chunk-JSNRCYSO.js.map → chunk-45QAUEYT.js.map} +1 -1
  21. package/dist/{chunk-B67DP7MI.mjs → chunk-4GDWGWHY.mjs} +4 -4
  22. package/dist/{chunk-B67DP7MI.mjs.map → chunk-4GDWGWHY.mjs.map} +1 -1
  23. package/dist/{chunk-KR2X2WHJ.js → chunk-4ICEQJH4.js} +53 -53
  24. package/dist/{chunk-KR2X2WHJ.js.map → chunk-4ICEQJH4.js.map} +1 -1
  25. package/dist/{chunk-RXZNACMI.js → chunk-6MBWKOPF.js} +33 -33
  26. package/dist/{chunk-RXZNACMI.js.map → chunk-6MBWKOPF.js.map} +1 -1
  27. package/dist/{chunk-JN6IL6OH.mjs → chunk-AGGOHPMZ.mjs} +1054 -5229
  28. package/dist/chunk-AGGOHPMZ.mjs.map +1 -0
  29. package/dist/{chunk-5GDKCFM5.mjs → chunk-AL73YAV4.mjs} +3 -3
  30. package/dist/{chunk-5GDKCFM5.mjs.map → chunk-AL73YAV4.mjs.map} +1 -1
  31. package/dist/{chunk-ZJPNP2YW.mjs → chunk-BUDZNAKL.mjs} +2 -2
  32. package/dist/chunk-BUDZNAKL.mjs.map +1 -0
  33. package/dist/{chunk-OL73LBX5.mjs → chunk-BW67WFHT.mjs} +3 -4
  34. package/dist/chunk-BW67WFHT.mjs.map +1 -0
  35. package/dist/{chunk-W5OEBO6E.js → chunk-CF7GOUBQ.js} +13 -14
  36. package/dist/chunk-CF7GOUBQ.js.map +1 -0
  37. package/dist/{chunk-IRPS5UCS.mjs → chunk-CUWPLPVY.mjs} +3 -3
  38. package/dist/{chunk-IRPS5UCS.mjs.map → chunk-CUWPLPVY.mjs.map} +1 -1
  39. package/dist/{chunk-IJAKZHXX.js → chunk-ERCDMBRT.js} +683 -645
  40. package/dist/chunk-ERCDMBRT.js.map +1 -0
  41. package/dist/{chunk-I2NZGVBG.js → chunk-FSBR4RCK.js} +1101 -5313
  42. package/dist/chunk-FSBR4RCK.js.map +1 -0
  43. package/dist/{chunk-5RM6NGZ6.mjs → chunk-IDEM3DYF.mjs} +3 -3
  44. package/dist/{chunk-5RM6NGZ6.mjs.map → chunk-IDEM3DYF.mjs.map} +1 -1
  45. package/dist/{chunk-NJFRJ6YD.js → chunk-M7KSEUZR.js} +225 -384
  46. package/dist/chunk-M7KSEUZR.js.map +1 -0
  47. package/dist/{chunk-AOUUZ52N.js → chunk-MO5FBVV3.js} +85 -86
  48. package/dist/chunk-MO5FBVV3.js.map +1 -0
  49. package/dist/{chunk-BR2GAZKG.mjs → chunk-NAFWHJCM.mjs} +7 -7
  50. package/dist/{chunk-BR2GAZKG.mjs.map → chunk-NAFWHJCM.mjs.map} +1 -1
  51. package/dist/{chunk-3JJWPOK6.js → chunk-NCLZKVJK.js} +9 -10
  52. package/dist/chunk-NCLZKVJK.js.map +1 -0
  53. package/dist/{chunk-R4TQWXNG.mjs → chunk-NVQWHJQH.mjs} +6 -5
  54. package/dist/chunk-NVQWHJQH.mjs.map +1 -0
  55. package/dist/{chunk-ZL6C2ZAF.js → chunk-PGVZKMOA.js} +67 -67
  56. package/dist/{chunk-ZL6C2ZAF.js.map → chunk-PGVZKMOA.js.map} +1 -1
  57. package/dist/{chunk-UDDZTTLO.mjs → chunk-QBFE7ABE.mjs} +6 -7
  58. package/dist/chunk-QBFE7ABE.mjs.map +1 -0
  59. package/dist/{chunk-3ZUMJTDT.mjs → chunk-RFRXS4PC.mjs} +3 -4
  60. package/dist/{chunk-3JJWPOK6.js.map → chunk-RFRXS4PC.mjs.map} +1 -1
  61. package/dist/{chunk-ZV5EZXXO.mjs → chunk-RHRJXK5R.mjs} +3 -3
  62. package/dist/{chunk-ZV5EZXXO.mjs.map → chunk-RHRJXK5R.mjs.map} +1 -1
  63. package/dist/{chunk-MWPTSBAI.js → chunk-RLLP7VQJ.js} +26 -26
  64. package/dist/{chunk-MWPTSBAI.js.map → chunk-RLLP7VQJ.js.map} +1 -1
  65. package/dist/{chunk-GIQXB3BG.mjs → chunk-RLVOG5OQ.mjs} +3 -3
  66. package/dist/{chunk-GIQXB3BG.mjs.map → chunk-RLVOG5OQ.mjs.map} +1 -1
  67. package/dist/{chunk-2WXRRQM3.mjs → chunk-SEYUYGER.mjs} +553 -516
  68. package/dist/chunk-SEYUYGER.mjs.map +1 -0
  69. package/dist/{chunk-O6M3KDGT.mjs → chunk-SQ4KGLBZ.mjs} +4 -4
  70. package/dist/{chunk-O6M3KDGT.mjs.map → chunk-SQ4KGLBZ.mjs.map} +1 -1
  71. package/dist/{chunk-F54Q2YJY.js → chunk-SY4MUT5V.js} +7 -7
  72. package/dist/{chunk-F54Q2YJY.js.map → chunk-SY4MUT5V.js.map} +1 -1
  73. package/dist/{chunk-ZM5MVWIT.js → chunk-TUQLZ4QD.js} +5 -6
  74. package/dist/chunk-TUQLZ4QD.js.map +1 -0
  75. package/dist/{chunk-TVMLV675.js → chunk-UE2RDQIK.js} +98 -95
  76. package/dist/chunk-UE2RDQIK.js.map +1 -0
  77. package/dist/{chunk-HDCUWUNH.js → chunk-UJVDI66K.js} +28 -27
  78. package/dist/chunk-UJVDI66K.js.map +1 -0
  79. package/dist/{chunk-PCYL4MII.mjs → chunk-VV6SYMPM.mjs} +156 -314
  80. package/dist/chunk-VV6SYMPM.mjs.map +1 -0
  81. package/dist/{chunk-HZ4LOVHM.js → chunk-VY52Y5GC.js} +2 -2
  82. package/dist/chunk-VY52Y5GC.js.map +1 -0
  83. package/dist/{chunk-LEKZUS6N.mjs → chunk-X3GW7UPN.mjs} +4 -5
  84. package/dist/chunk-X3GW7UPN.mjs.map +1 -0
  85. package/dist/{chunk-OCELRSLO.js → chunk-Y2AYFG4E.js} +4 -4
  86. package/dist/{chunk-OCELRSLO.js.map → chunk-Y2AYFG4E.js.map} +1 -1
  87. package/dist/{chunk-TIJJHW2Z.js → chunk-YV7F7IXG.js} +36 -36
  88. package/dist/{chunk-TIJJHW2Z.js.map → chunk-YV7F7IXG.js.map} +1 -1
  89. package/dist/{chunk-MVBIAXVN.mjs → chunk-ZKSDDFHG.mjs} +14 -11
  90. package/dist/chunk-ZKSDDFHG.mjs.map +1 -0
  91. package/dist/{index-VI9gyJXl.d.mts → index-BNRGVAS5.d.mts} +9 -2
  92. package/dist/index-BoebbJ44.d.mts +49 -0
  93. package/dist/index-BoebbJ44.d.ts +49 -0
  94. package/dist/{index-CoB18TbG.d.ts → index-CnCY-b5V.d.ts} +9 -2
  95. package/dist/index.d.mts +399 -548
  96. package/dist/index.d.ts +399 -548
  97. package/dist/index.js +727 -887
  98. package/dist/index.mjs +3 -3
  99. package/dist/platform/admin/index.js +12 -12
  100. package/dist/platform/admin/index.mjs +6 -6
  101. package/dist/platform/agents-workspace.js +8 -8
  102. package/dist/platform/agents-workspace.mjs +7 -7
  103. package/dist/platform/app-shell.js +5 -5
  104. package/dist/platform/app-shell.mjs +4 -4
  105. package/dist/platform/auth/index.js +29 -29
  106. package/dist/platform/auth/index.mjs +6 -6
  107. package/dist/platform/billing/index.js +5 -5
  108. package/dist/platform/billing/index.mjs +4 -4
  109. package/dist/platform/impersonation/index.js +5 -5
  110. package/dist/platform/impersonation/index.mjs +4 -4
  111. package/dist/platform/index.d.mts +3 -39
  112. package/dist/platform/index.d.ts +3 -39
  113. package/dist/platform/index.js +95 -4805
  114. package/dist/platform/index.js.map +1 -1
  115. package/dist/platform/index.mjs +23 -4728
  116. package/dist/platform/index.mjs.map +1 -1
  117. package/dist/platform/pages/index.d.mts +4 -4
  118. package/dist/platform/pages/index.d.ts +4 -4
  119. package/dist/platform/pages/index.js +197 -197
  120. package/dist/platform/pages/index.mjs +9 -9
  121. package/dist/platform/rbac.d.mts +2 -1
  122. package/dist/platform/rbac.d.ts +2 -1
  123. package/dist/platform/rbac.js +2 -2
  124. package/dist/platform/rbac.mjs +1 -1
  125. package/dist/platform/settings/index.js +9 -9
  126. package/dist/platform/settings/index.mjs +8 -8
  127. package/dist/platform/utils/index.js +3 -3
  128. package/dist/platform/utils/index.js.map +1 -1
  129. package/dist/platform/utils/index.mjs +1 -1
  130. package/dist/platform/utils/index.mjs.map +1 -1
  131. package/dist/platform/workflow-api-client.d.mts +2 -2
  132. package/dist/platform/workflow-api-client.d.ts +2 -2
  133. package/dist/platform/workflow-api-client.js +62 -62
  134. package/dist/platform/workflow-api-client.mjs +2 -2
  135. package/dist/platform/workflow-canvas-shell.js +6 -6
  136. package/dist/platform/workflow-canvas-shell.mjs +5 -5
  137. package/dist/{workflow-api-client-DoYj7nHz.d.mts → workflow-api-client-CpFl3WcG.d.mts} +1 -1
  138. package/dist/{workflow-api-client-BKD8OfP_.d.ts → workflow-api-client-uLICOanv.d.ts} +1 -1
  139. package/dist/workflow-canvas--qaYKuMm.d.ts +113 -0
  140. package/dist/workflow-canvas-B80fmD_n.d.mts +113 -0
  141. package/package.json +15 -5
  142. package/src/styles/liquid-glass.css +283 -2
  143. package/dist/chunk-2WXRRQM3.mjs.map +0 -1
  144. package/dist/chunk-3ZUMJTDT.mjs.map +0 -1
  145. package/dist/chunk-AOUUZ52N.js.map +0 -1
  146. package/dist/chunk-FAGDZEKM.js.map +0 -1
  147. package/dist/chunk-HDCUWUNH.js.map +0 -1
  148. package/dist/chunk-HZ4LOVHM.js.map +0 -1
  149. package/dist/chunk-I2NZGVBG.js.map +0 -1
  150. package/dist/chunk-IJAKZHXX.js.map +0 -1
  151. package/dist/chunk-JN6IL6OH.mjs.map +0 -1
  152. package/dist/chunk-LEKZUS6N.mjs.map +0 -1
  153. package/dist/chunk-MVBIAXVN.mjs.map +0 -1
  154. package/dist/chunk-NJFRJ6YD.js.map +0 -1
  155. package/dist/chunk-OL73LBX5.mjs.map +0 -1
  156. package/dist/chunk-PCYL4MII.mjs.map +0 -1
  157. package/dist/chunk-R4TQWXNG.mjs.map +0 -1
  158. package/dist/chunk-SYNVNTLJ.mjs.map +0 -1
  159. package/dist/chunk-TVMLV675.js.map +0 -1
  160. package/dist/chunk-UDDZTTLO.mjs.map +0 -1
  161. package/dist/chunk-W5OEBO6E.js.map +0 -1
  162. package/dist/chunk-ZJPNP2YW.mjs.map +0 -1
  163. package/dist/chunk-ZM5MVWIT.js.map +0 -1
  164. package/src/brand/logos/kori-icon.svg +0 -45
  165. package/src/brand/logos/kori-logo-dark.svg +0 -40
  166. package/src/brand/logos/kori-logo.svg +0 -43
@@ -1,7 +1,6 @@
1
1
  "use client";
2
- import { ToggleSwitch, GlassModal, ContextMenu, FormInput, FormTextarea, FormSelect, Button, IconButton } from './chunk-JN6IL6OH.mjs';
2
+ import { ToggleSwitch, GlassModal, ContextMenu, FormInput, FormTextarea, FormSelect, Button, IconButton } from './chunk-AGGOHPMZ.mjs';
3
3
  import { useTranslations, I18nProvider, createI18nFromMessages } from './chunk-7VJ7CMMT.mjs';
4
- import { listModelProviderCatalog } from './chunk-ZV5EZXXO.mjs';
5
4
  import { GraphNodeHeader, GraphNodeMeta, GraphNodeBadge, GraphNodeIconBubble } from './chunk-OZNTQROP.mjs';
6
5
  import { getAgentTier, createDefaultLogicNodeConfig, applyDagreLayout } from './chunk-G7JQ4OCE.mjs';
7
6
  import { memo, useState, useRef, useCallback, useEffect, lazy, createContext, useMemo, useContext } from 'react';
@@ -9,7 +8,7 @@ import { Position, NodeResizer, MarkerType, useReactFlow, getBezierPath, BaseEdg
9
8
  import '@xyflow/react/dist/style.css';
10
9
  import { create } from 'zustand';
11
10
  import { PlusIcon, XMarkIcon } from '@heroicons/react/24/solid';
12
- import { Bars2Icon, CursorArrowRaysIcon, HandRaisedIcon, MagnifyingGlassPlusIcon, MagnifyingGlassMinusIcon, ArrowsPointingInIcon, ArrowUturnLeftIcon, ArrowUturnRightIcon, MapIcon, EllipsisHorizontalIcon, Squares2X2Icon, ArrowsRightLeftIcon, CommandLineIcon, ExclamationTriangleIcon, CpuChipIcon, TrashIcon, WrenchScrewdriverIcon, NewspaperIcon, ChartBarIcon, CloudIcon, ScaleIcon, AdjustmentsHorizontalIcon, CircleStackIcon, PlayIcon, StopIcon, ArrowsPointingOutIcon, CodeBracketIcon, GlobeAltIcon, DocumentTextIcon, ArrowPathIcon, BookOpenIcon, ChatBubbleLeftRightIcon, QuestionMarkCircleIcon, AdjustmentsVerticalIcon, Square3Stack3DIcon, DocumentMagnifyingGlassIcon, ListBulletIcon, PlayCircleIcon, PencilSquareIcon, ServerStackIcon, KeyIcon, RectangleGroupIcon, ChevronDownIcon, ChevronUpIcon, MicrophoneIcon, SpeakerWaveIcon, CloudArrowUpIcon, PresentationChartBarIcon, ChartPieIcon, ChartBarSquareIcon, CurrencyDollarIcon, ShieldCheckIcon, ClipboardDocumentCheckIcon, ShoppingBagIcon, UsersIcon, BuildingStorefrontIcon, BeakerIcon, PencilIcon, DocumentDuplicateIcon, ClipboardDocumentIcon, ClipboardIcon, PlusIcon as PlusIcon$1, XMarkIcon as XMarkIcon$1, TableCellsIcon, FunnelIcon, Cog6ToothIcon, VariableIcon, MagnifyingGlassIcon, CheckIcon } from '@heroicons/react/24/outline';
11
+ import { Bars2Icon, CursorArrowRaysIcon, HandRaisedIcon, MagnifyingGlassPlusIcon, MagnifyingGlassMinusIcon, ArrowsPointingInIcon, ArrowUturnLeftIcon, ArrowUturnRightIcon, MapIcon, EllipsisHorizontalIcon, Squares2X2Icon, ArrowsRightLeftIcon, CommandLineIcon, ExclamationTriangleIcon, CpuChipIcon, TrashIcon, WrenchScrewdriverIcon, NewspaperIcon, ChartBarIcon, CloudIcon, ScaleIcon, AdjustmentsHorizontalIcon, CircleStackIcon, PlayIcon, StopIcon, ArrowsPointingOutIcon, CodeBracketIcon, GlobeAltIcon, DocumentTextIcon, ArrowPathIcon, BookOpenIcon, ChatBubbleLeftRightIcon, QuestionMarkCircleIcon, AdjustmentsVerticalIcon, Square3Stack3DIcon, DocumentMagnifyingGlassIcon, ListBulletIcon, PlayCircleIcon, PencilSquareIcon, ServerStackIcon, RectangleGroupIcon, ChevronDownIcon, ChevronUpIcon, MicrophoneIcon, SpeakerWaveIcon, KeyIcon, CloudArrowUpIcon, PresentationChartBarIcon, ChartPieIcon, ChartBarSquareIcon, CurrencyDollarIcon, ShieldCheckIcon, ClipboardDocumentCheckIcon, ShoppingBagIcon, UsersIcon, BuildingStorefrontIcon, BeakerIcon, PencilIcon, DocumentDuplicateIcon, ClipboardDocumentIcon, ClipboardIcon, PlusIcon as PlusIcon$1, XMarkIcon as XMarkIcon$1, TableCellsIcon, FunnelIcon, Cog6ToothIcon, VariableIcon, MagnifyingGlassIcon, CheckIcon } from '@heroicons/react/24/outline';
13
12
  import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
14
13
 
15
14
  var DEFAULT_PASTE_OFFSET = 40;
@@ -2056,7 +2055,7 @@ function NodeRunningIndicatorComponent({ nodeId }) {
2056
2055
  borderColor: `rgba(${accentRgb}, 0.55)`,
2057
2056
  boxShadow: `0 0 0 1px rgba(${accentRgb}, 0.16), 0 6px 16px rgba(${accentRgb}, 0.18)`
2058
2057
  },
2059
- children: /* @__PURE__ */ jsxs("svg", { className: "h-3 w-3 animate-spin", style: { color: accentColor }, viewBox: "0 0 24 24", fill: "none", children: [
2058
+ children: /* @__PURE__ */ jsxs("svg", { className: "h-3 w-3 animate-spin motion-reduce:animate-none", style: { color: accentColor }, viewBox: "0 0 24 24", fill: "none", children: [
2060
2059
  /* @__PURE__ */ jsx("circle", { className: "opacity-25", cx: "12", cy: "12", r: "10", stroke: "currentColor", strokeWidth: "4" }),
2061
2060
  /* @__PURE__ */ jsx("path", { className: "opacity-75", fill: "currentColor", d: "M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z" })
2062
2061
  ] })
@@ -3541,92 +3540,6 @@ var DatasourceFlowNode = memo(function DatasourceFlowNode2({ id, data, selected
3541
3540
  /* @__PURE__ */ jsx(WorkflowHandle, { type: "source", position: Position.Right, id: "right-out", colorClass: "!bg-cyan-400" })
3542
3541
  ] });
3543
3542
  });
3544
- var SI = (slug, color) => `https://cdn.simpleicons.org/${slug}/${color}`;
3545
- var PROVIDER_LOGOS = {
3546
- aws_bedrock: "https://www.svgrepo.com/show/448266/aws.svg",
3547
- openai_api: "https://www.svgrepo.com/show/306500/openai.svg",
3548
- google_vertex: SI("googlegemini", "8E75B2"),
3549
- azure_openai: SI("microsoftazure", "0078D4"),
3550
- anthropic_api: SI("anthropic", "D4A27F"),
3551
- groq: SI("groq", "000000"),
3552
- mistral: SI("mistralai", "FF7000"),
3553
- huggingface: SI("huggingface", "FFD21E"),
3554
- ollama: SI("ollama", "FFFFFF")
3555
- };
3556
- var PROVIDER_TYPE_LABELS = {
3557
- aws_bedrock: "AWS Bedrock",
3558
- openai_api: "OpenAI API",
3559
- google_vertex: "Google Vertex AI",
3560
- azure_openai: "Azure OpenAI",
3561
- anthropic_api: "Anthropic API",
3562
- groq: "Groq Cloud",
3563
- mistral: "Mistral AI",
3564
- huggingface: "Hugging Face",
3565
- ollama: "Ollama (Local)",
3566
- custom: "Custom"
3567
- };
3568
- var ModelProviderFlowNode = memo(function ModelProviderFlowNode2({ id, data, selected }) {
3569
- const config = data.config;
3570
- const isCompact = data.displayMode === "compact";
3571
- if (!config) {
3572
- return /* @__PURE__ */ jsxs(Fragment, { children: [
3573
- /* @__PURE__ */ jsx(NodeRunningIndicator, { nodeId: id }),
3574
- /* @__PURE__ */ jsx(WorkflowHandle, { type: "target", position: Position.Left, id: "left-in", colorClass: "!bg-gray-400 dark:!bg-gray-500" }),
3575
- /* @__PURE__ */ jsx(WorkflowHandle, { type: "target", position: Position.Top, id: "top-in", colorClass: "!bg-gray-400 dark:!bg-gray-500" }),
3576
- /* @__PURE__ */ jsx(NodeCard, { variant: "error", nodeType: "model_provider", width: "w-[280px]", children: /* @__PURE__ */ jsx(
3577
- NodeCardHeader,
3578
- {
3579
- icon: /* @__PURE__ */ jsx(ExclamationTriangleIcon, { className: "h-6 w-6 text-white" }),
3580
- title: data.label || "Model Provider",
3581
- description: "Not configured",
3582
- iconClassName: "flex h-11 w-11 items-center justify-center rounded-xl bg-gradient-to-br from-amber-400 to-orange-500 shadow-lg"
3583
- }
3584
- ) }),
3585
- /* @__PURE__ */ jsx(WorkflowHandle, { type: "source", position: Position.Right, id: "right-out", colorClass: "!bg-slate-500" }),
3586
- /* @__PURE__ */ jsx(WorkflowHandle, { type: "source", position: Position.Bottom, id: "bottom-out", colorClass: "!bg-slate-500" })
3587
- ] });
3588
- }
3589
- const providerLabel = PROVIDER_TYPE_LABELS[config.providerType] ?? config.providerType;
3590
- const displayName = config.name || providerLabel;
3591
- const regionLabel = config.region ? config.region : void 0;
3592
- const isConfigured = !!(config.credentialRef || config.apiKeyRef);
3593
- const logo = PROVIDER_LOGOS[config.providerType];
3594
- return /* @__PURE__ */ jsxs(Fragment, { children: [
3595
- /* @__PURE__ */ jsx(NodeRunningIndicator, { nodeId: id }),
3596
- /* @__PURE__ */ jsx(WorkflowHandle, { type: "target", position: Position.Left, id: "left-in", colorClass: "!bg-gray-400 dark:!bg-gray-500" }),
3597
- /* @__PURE__ */ jsx(WorkflowHandle, { type: "target", position: Position.Top, id: "top-in", colorClass: "!bg-gray-400 dark:!bg-gray-500" }),
3598
- /* @__PURE__ */ jsx(
3599
- "button",
3600
- {
3601
- type: "button",
3602
- onClick: () => data.onEdit?.(id),
3603
- className: "w-full text-left",
3604
- children: /* @__PURE__ */ jsxs(NodeCard, { compact: isCompact, selected, nodeType: "model_provider", width: "w-[280px]", children: [
3605
- /* @__PURE__ */ jsx(
3606
- NodeCardHeader,
3607
- {
3608
- icon: logo ? /* @__PURE__ */ jsx("img", { src: logo, alt: providerLabel, className: "h-6 w-6 object-contain", loading: "lazy" }) : /* @__PURE__ */ jsx(KeyIcon, { className: "h-6 w-6 text-white" }),
3609
- title: displayName,
3610
- description: providerLabel,
3611
- iconClassName: `flex h-11 w-11 items-center justify-center rounded-xl shadow-lg ${logo ? "bg-white/10 dark:bg-white/5 p-2" : "bg-gradient-to-br from-slate-600 to-slate-700 p-1.5"}`
3612
- }
3613
- ),
3614
- /* @__PURE__ */ jsx(NodeCardMeta, { compact: isCompact, children: /* @__PURE__ */ jsxs("div", { className: "flex flex-wrap items-center gap-1.5", children: [
3615
- /* @__PURE__ */ jsx(NodeCardBadge, { className: "rounded-full bg-slate-100 px-2 py-0.5 text-[10px] font-semibold text-slate-700 dark:bg-slate-500/20 dark:text-slate-300", children: providerLabel }),
3616
- regionLabel && /* @__PURE__ */ jsx(NodeCardBadge, { className: "rounded-full bg-gray-100 px-2 py-0.5 text-[10px] font-medium text-gray-600 dark:bg-white/10 dark:text-gray-300", children: regionLabel }),
3617
- /* @__PURE__ */ jsx(NodeCardBadge, { className: `rounded-full px-2 py-0.5 text-[10px] font-medium ${isConfigured ? "bg-green-100 text-green-700 dark:bg-green-500/20 dark:text-green-300" : "bg-amber-100 text-amber-700 dark:bg-amber-500/20 dark:text-amber-300"}`, children: isConfigured ? "Configured" : "Setup needed" }),
3618
- config.modelFilter && config.modelFilter.length > 0 && /* @__PURE__ */ jsxs(NodeCardBadge, { className: "rounded-full bg-gray-100 px-2 py-0.5 text-[10px] font-medium text-gray-600 dark:bg-white/10 dark:text-gray-300", children: [
3619
- config.modelFilter.length,
3620
- " models"
3621
- ] })
3622
- ] }) })
3623
- ] })
3624
- }
3625
- ),
3626
- /* @__PURE__ */ jsx(WorkflowHandle, { type: "source", position: Position.Right, id: "right-out", colorClass: "!bg-slate-500" }),
3627
- /* @__PURE__ */ jsx(WorkflowHandle, { type: "source", position: Position.Bottom, id: "bottom-out", colorClass: "!bg-slate-500" })
3628
- ] });
3629
- });
3630
3543
  var GROUP_COLORS = {
3631
3544
  indigo: {
3632
3545
  border: "border-indigo-300/50 dark:border-indigo-600/50",
@@ -3889,6 +3802,46 @@ var SpeechTranscriberFlowNode = memo(function SpeechTranscriberFlowNode2({ id, d
3889
3802
  /* @__PURE__ */ jsx(WorkflowHandle, { type: "source", position: Position.Right, id: "right-out", colorClass: "!bg-violet-500" })
3890
3803
  ] });
3891
3804
  });
3805
+ var DashboardOutputFlowNode = memo(function DashboardOutputFlowNode2({ id, data, selected }) {
3806
+ const t = useTranslations("agents.workflow");
3807
+ const { config, label, onDelete, onEdit } = data;
3808
+ const isCompact = data.displayMode === "compact";
3809
+ const source = config?.dashboardFrom ? `\u2190 ${config.dashboardFrom}` : config?.dashboard ? "inline" : "unset";
3810
+ return /* @__PURE__ */ jsxs(Fragment, { children: [
3811
+ /* @__PURE__ */ jsx(NodeRunningIndicator, { nodeId: id }),
3812
+ /* @__PURE__ */ jsx(WorkflowHandle, { type: "target", position: Position.Left, id: "left-in", colorClass: "!bg-fuchsia-500" }),
3813
+ /* @__PURE__ */ jsxs(
3814
+ NodeInteractiveCard,
3815
+ {
3816
+ nodeId: id,
3817
+ onEdit,
3818
+ compact: isCompact,
3819
+ selected,
3820
+ nodeType: "dashboard_output",
3821
+ width: "w-[260px]",
3822
+ children: [
3823
+ /* @__PURE__ */ jsx(
3824
+ NodeCardHeader,
3825
+ {
3826
+ icon: /* @__PURE__ */ jsx(NodeIconBubble, { tone: "dashboard_output", children: /* @__PURE__ */ jsx(ChartBarIcon, { className: "h-5 w-5 text-white" }) }),
3827
+ title: label,
3828
+ description: t("dashboardOutputNodeDescription"),
3829
+ compact: isCompact,
3830
+ iconClassName: ""
3831
+ }
3832
+ ),
3833
+ /* @__PURE__ */ jsxs(NodeCardMeta, { compact: isCompact, children: [
3834
+ /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-2", children: [
3835
+ /* @__PURE__ */ jsx(NodeCardBadge, { tone: "dashboard_output", children: t("dashboardOutputNode") }),
3836
+ /* @__PURE__ */ jsx(NodeCardBadge, { tone: "dashboard_output", soft: true, children: source })
3837
+ ] }),
3838
+ /* @__PURE__ */ jsx(NodeCardDeleteAction, { nodeId: id, onDelete })
3839
+ ] })
3840
+ ]
3841
+ }
3842
+ )
3843
+ ] });
3844
+ });
3892
3845
  function ConfigFormActions({
3893
3846
  cancelLabel,
3894
3847
  saveLabel,
@@ -5917,215 +5870,6 @@ function GroupNodeConfigForm({ config, onSave, onCancel }) {
5917
5870
  )
5918
5871
  ] });
5919
5872
  }
5920
- var catalogCache = null;
5921
- var catalogPromise = null;
5922
- async function loadCatalog() {
5923
- if (catalogCache) return catalogCache;
5924
- if (!catalogPromise) {
5925
- catalogPromise = listModelProviderCatalog().then((rows) => {
5926
- catalogCache = rows;
5927
- return rows;
5928
- });
5929
- }
5930
- return catalogPromise;
5931
- }
5932
- var ENDPOINT_SLUGS = /* @__PURE__ */ new Set(["custom", "azure_openai", "ollama"]);
5933
- function ModelProviderNodeConfigForm({ config, onSave, onCancel }) {
5934
- const t = useTranslations("agents.workflow.modelProviderNodeConfig");
5935
- const [catalog, setCatalog] = useState(catalogCache);
5936
- const [catalogError, setCatalogError] = useState(null);
5937
- const [providerType, setProviderType] = useState(config.providerType);
5938
- const [name, setName] = useState(config.name ?? "");
5939
- const [region, setRegion] = useState(config.region ?? "");
5940
- const [endpoint, setEndpoint] = useState(config.endpoint ?? "");
5941
- const [credentialRef, setCredentialRef] = useState(config.credentialRef ?? "");
5942
- const [apiKeyRef, setApiKeyRef] = useState(config.apiKeyRef ?? "");
5943
- const [selectedFamilies, setSelectedFamilies] = useState(/* @__PURE__ */ new Set());
5944
- useEffect(() => {
5945
- let cancelled = false;
5946
- if (catalog) return;
5947
- void loadCatalog().then((rows) => {
5948
- if (cancelled) return;
5949
- setCatalog(rows);
5950
- }).catch((error) => {
5951
- if (cancelled) return;
5952
- const message = error instanceof Error ? error.message : "Failed to load provider catalog";
5953
- setCatalogError(message);
5954
- });
5955
- return () => {
5956
- cancelled = true;
5957
- };
5958
- }, [catalog]);
5959
- const currentProvider = useMemo(() => {
5960
- if (!catalog) return void 0;
5961
- return catalog.find((entry) => entry.slug === providerType);
5962
- }, [catalog, providerType]);
5963
- const families = currentProvider?.families ?? [];
5964
- const regions = Array.isArray(currentProvider?.regions) ? currentProvider.regions : [];
5965
- const showRegion = regions.length > 0;
5966
- const showEndpoint = ENDPOINT_SLUGS.has(providerType);
5967
- const authType = currentProvider?.authType ?? null;
5968
- const showApiKey = authType === "api_key";
5969
- const showCredentialRef = authType === "iam_role";
5970
- useEffect(() => {
5971
- if (!currentProvider) return;
5972
- setSelectedFamilies((previous) => {
5973
- if (previous.size > 0) return previous;
5974
- const filter = new Set(config.modelFilter ?? []);
5975
- const next = /* @__PURE__ */ new Set();
5976
- for (const family of currentProvider.families) {
5977
- if (filter.size === 0 || family.modelIds.some((id) => filter.has(id))) {
5978
- next.add(family.id);
5979
- }
5980
- }
5981
- return next;
5982
- });
5983
- }, [currentProvider, config.modelFilter]);
5984
- const handleToggleFamily = (familyId) => {
5985
- setSelectedFamilies((previous) => {
5986
- const next = new Set(previous);
5987
- if (next.has(familyId)) next.delete(familyId);
5988
- else next.add(familyId);
5989
- return next;
5990
- });
5991
- };
5992
- const handleProviderChange = (value) => {
5993
- const newType = value;
5994
- setProviderType(newType);
5995
- setRegion("");
5996
- const next = catalog?.find((entry) => entry.slug === newType);
5997
- setSelectedFamilies(new Set((next?.families ?? []).map((family) => family.id)));
5998
- };
5999
- const handleSave = () => {
6000
- const modelFilter = families.filter((family) => selectedFamilies.has(family.id)).flatMap((family) => family.modelIds);
6001
- onSave({
6002
- ...config,
6003
- providerType,
6004
- name: name.trim() || void 0,
6005
- region: region || void 0,
6006
- endpoint: endpoint.trim() || void 0,
6007
- credentialRef: credentialRef.trim() || void 0,
6008
- apiKeyRef: apiKeyRef.trim() || void 0,
6009
- modelFilter
6010
- });
6011
- };
6012
- if (catalogError) {
6013
- return /* @__PURE__ */ jsxs("div", { className: "space-y-4", children: [
6014
- /* @__PURE__ */ 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 }),
6015
- /* @__PURE__ */ jsx(
6016
- ConfigFormActions,
6017
- {
6018
- cancelLabel: t("cancel"),
6019
- saveLabel: t("save"),
6020
- onCancel,
6021
- onSave: handleSave,
6022
- saveDisabled: true
6023
- }
6024
- )
6025
- ] });
6026
- }
6027
- if (!catalog) {
6028
- return /* @__PURE__ */ jsx("div", { className: "space-y-4 h-32" });
6029
- }
6030
- return /* @__PURE__ */ jsxs("div", { className: "space-y-4", children: [
6031
- /* @__PURE__ */ jsx(
6032
- FormInput,
6033
- {
6034
- type: "text",
6035
- label: t("nameLabel"),
6036
- value: name,
6037
- onValueChange: setName,
6038
- placeholder: t("namePlaceholder")
6039
- }
6040
- ),
6041
- /* @__PURE__ */ jsx(
6042
- FormSelect,
6043
- {
6044
- label: t("providerTypeLabel"),
6045
- value: providerType,
6046
- onValueChange: handleProviderChange,
6047
- options: catalog.filter((entry) => entry.enabled).map((entry) => ({ value: entry.slug, label: entry.name }))
6048
- }
6049
- ),
6050
- showRegion && /* @__PURE__ */ jsx(
6051
- FormSelect,
6052
- {
6053
- label: t("regionLabel"),
6054
- value: region,
6055
- onValueChange: setRegion,
6056
- options: [
6057
- { value: "", label: t("selectRegion") },
6058
- ...regions.map((value) => ({ value, label: value }))
6059
- ]
6060
- }
6061
- ),
6062
- showEndpoint && /* @__PURE__ */ jsx(
6063
- FormInput,
6064
- {
6065
- type: "text",
6066
- label: t("endpointLabel"),
6067
- value: endpoint,
6068
- onValueChange: setEndpoint,
6069
- placeholder: providerType === "ollama" ? "http://localhost:11434" : t("endpointPlaceholder")
6070
- }
6071
- ),
6072
- showApiKey && /* @__PURE__ */ jsx(
6073
- FormInput,
6074
- {
6075
- type: "password",
6076
- label: t("apiKeyLabel"),
6077
- value: apiKeyRef,
6078
- onValueChange: setApiKeyRef,
6079
- placeholder: t("apiKeyPlaceholder")
6080
- }
6081
- ),
6082
- showCredentialRef && /* @__PURE__ */ jsx(
6083
- FormInput,
6084
- {
6085
- type: "text",
6086
- label: t("credentialRefLabel"),
6087
- value: credentialRef,
6088
- onValueChange: setCredentialRef,
6089
- placeholder: providerType === "aws_bedrock" ? "arn:aws:iam::role/bedrock-role" : t("credentialRefPlaceholder")
6090
- }
6091
- ),
6092
- families.length > 0 && /* @__PURE__ */ jsxs("div", { children: [
6093
- /* @__PURE__ */ jsx("label", { className: "mb-2 block text-sm font-medium text-gray-700 dark:text-gray-300", children: t("modelFamiliesLabel") }),
6094
- /* @__PURE__ */ jsx("div", { className: "space-y-1.5", children: families.map((family) => {
6095
- const isSelected = selectedFamilies.has(family.id);
6096
- return /* @__PURE__ */ jsxs(
6097
- "button",
6098
- {
6099
- type: "button",
6100
- onClick: () => handleToggleFamily(family.id),
6101
- className: `flex w-full items-center gap-3 rounded-lg border px-3 py-2 text-left transition-all ${isSelected ? "border-indigo-500/30 bg-indigo-50/50 dark:border-indigo-400/20 dark:bg-indigo-500/5" : "border-gray-200/50 hover:border-gray-300 dark:border-white/10 dark:hover:border-white/20"}`,
6102
- children: [
6103
- /* @__PURE__ */ 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__ */ jsx("svg", { className: "h-3 w-3", viewBox: "0 0 20 20", fill: "currentColor", children: /* @__PURE__ */ 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" }) }) }),
6104
- /* @__PURE__ */ jsxs("div", { className: "min-w-0 flex-1", children: [
6105
- /* @__PURE__ */ jsx("span", { className: "text-xs font-medium text-gray-900 dark:text-white", children: family.name }),
6106
- /* @__PURE__ */ jsxs("span", { className: "ml-2 text-[10px] text-gray-400 dark:text-gray-500", children: [
6107
- family.modelIds.length,
6108
- " models"
6109
- ] })
6110
- ] })
6111
- ]
6112
- },
6113
- family.id
6114
- );
6115
- }) })
6116
- ] }),
6117
- /* @__PURE__ */ jsx(
6118
- ConfigFormActions,
6119
- {
6120
- cancelLabel: t("cancel"),
6121
- saveLabel: t("save"),
6122
- onCancel,
6123
- onSave: handleSave,
6124
- saveDisabled: !providerType
6125
- }
6126
- )
6127
- ] });
6128
- }
6129
5873
  function RuleNodeConfigForm({ config, onSave, onCancel, availableRules }) {
6130
5874
  const t = useTranslations("agents.workflow.ruleNodeConfig");
6131
5875
  const [ruleId, setRuleId] = useState(config.ruleId ?? "");
@@ -6494,6 +6238,93 @@ function SpeechTranscriberNodeConfigForm({ config, onSave, onCancel }) {
6494
6238
  )
6495
6239
  ] });
6496
6240
  }
6241
+ function DashboardOutputNodeConfigForm({ config, onSave, onCancel }) {
6242
+ const t = useTranslations("agents.workflow.dashboardOutputNodeConfig");
6243
+ const initialMode = config.dashboard ? "inline" : "reference";
6244
+ const [mode, setMode] = useState(initialMode);
6245
+ const [dashboardFrom, setDashboardFrom] = useState(config.dashboardFrom ?? "");
6246
+ const [inlineJson, setInlineJson] = useState(
6247
+ config.dashboard ? JSON.stringify(config.dashboard, null, 2) : ""
6248
+ );
6249
+ const [parseError, setParseError] = useState(null);
6250
+ const handleSave = () => {
6251
+ if (mode === "reference") {
6252
+ const trimmed = dashboardFrom.trim();
6253
+ onSave({ type: "dashboard_output", dashboardFrom: trimmed });
6254
+ return;
6255
+ }
6256
+ try {
6257
+ const parsed = inlineJson.trim() ? JSON.parse(inlineJson) : {};
6258
+ setParseError(null);
6259
+ onSave({ type: "dashboard_output", dashboard: parsed });
6260
+ } catch (error) {
6261
+ setParseError(error instanceof Error ? error.message : String(error));
6262
+ }
6263
+ };
6264
+ return /* @__PURE__ */ jsxs("div", { className: "space-y-4", children: [
6265
+ /* @__PURE__ */ jsx("p", { className: "text-xs text-gray-500 dark:text-gray-400", children: t("description") }),
6266
+ /* @__PURE__ */ jsxs("div", { className: "flex gap-2", children: [
6267
+ /* @__PURE__ */ jsx(
6268
+ "button",
6269
+ {
6270
+ type: "button",
6271
+ onClick: () => setMode("reference"),
6272
+ className: `flex-1 rounded-lg border px-3 py-2 text-xs font-medium transition-colors ${mode === "reference" ? "border-fuchsia-500 bg-fuchsia-500/10 text-fuchsia-700 dark:text-fuchsia-300" : "border-gray-200 bg-white text-gray-600 hover:border-fuchsia-300 dark:border-white/10 dark:bg-white/5 dark:text-gray-300"}`,
6273
+ children: t("modeReference")
6274
+ }
6275
+ ),
6276
+ /* @__PURE__ */ jsx(
6277
+ "button",
6278
+ {
6279
+ type: "button",
6280
+ onClick: () => setMode("inline"),
6281
+ className: `flex-1 rounded-lg border px-3 py-2 text-xs font-medium transition-colors ${mode === "inline" ? "border-fuchsia-500 bg-fuchsia-500/10 text-fuchsia-700 dark:text-fuchsia-300" : "border-gray-200 bg-white text-gray-600 hover:border-fuchsia-300 dark:border-white/10 dark:bg-white/5 dark:text-gray-300"}`,
6282
+ children: t("modeInline")
6283
+ }
6284
+ )
6285
+ ] }),
6286
+ mode === "reference" ? /* @__PURE__ */ jsxs("div", { children: [
6287
+ /* @__PURE__ */ jsx("label", { className: "mb-1 block text-xs font-medium text-gray-700 dark:text-gray-300", children: t("referenceLabel") }),
6288
+ /* @__PURE__ */ jsx(
6289
+ "input",
6290
+ {
6291
+ type: "text",
6292
+ value: dashboardFrom,
6293
+ onChange: (event) => setDashboardFrom(event.target.value),
6294
+ placeholder: t("referencePlaceholder"),
6295
+ className: "w-full rounded-lg border border-gray-300 bg-white px-3 py-2 text-sm font-mono text-gray-900 placeholder:text-gray-400 focus:border-fuchsia-500 focus:outline-none focus:ring-1 focus:ring-fuchsia-500 dark:border-white/10 dark:bg-white/5 dark:text-white"
6296
+ }
6297
+ ),
6298
+ /* @__PURE__ */ jsx("p", { className: "mt-1 text-[10px] text-gray-500 dark:text-gray-400", children: t("referenceHelp") })
6299
+ ] }) : /* @__PURE__ */ jsxs("div", { children: [
6300
+ /* @__PURE__ */ jsx("label", { className: "mb-1 block text-xs font-medium text-gray-700 dark:text-gray-300", children: t("inlineLabel") }),
6301
+ /* @__PURE__ */ jsx(
6302
+ "textarea",
6303
+ {
6304
+ value: inlineJson,
6305
+ onChange: (event) => setInlineJson(event.target.value),
6306
+ placeholder: '{\\n "kpis": [],\\n "charts": [],\\n "tables": []\\n}',
6307
+ rows: 12,
6308
+ className: "w-full rounded-lg border border-gray-300 bg-white px-3 py-2 text-xs font-mono text-gray-900 placeholder:text-gray-400 focus:border-fuchsia-500 focus:outline-none focus:ring-1 focus:ring-fuchsia-500 dark:border-white/10 dark:bg-white/5 dark:text-white"
6309
+ }
6310
+ ),
6311
+ parseError ? /* @__PURE__ */ jsxs("p", { className: "mt-1 text-[10px] font-medium text-red-600 dark:text-red-400", children: [
6312
+ t("parseError"),
6313
+ ": ",
6314
+ parseError
6315
+ ] }) : /* @__PURE__ */ jsx("p", { className: "mt-1 text-[10px] text-gray-500 dark:text-gray-400", children: t("inlineHelp") })
6316
+ ] }),
6317
+ /* @__PURE__ */ jsx(
6318
+ ConfigFormActions,
6319
+ {
6320
+ cancelLabel: t("cancel"),
6321
+ saveLabel: t("save"),
6322
+ onCancel,
6323
+ onSave: handleSave
6324
+ }
6325
+ )
6326
+ ] });
6327
+ }
6497
6328
  var NODE_TITLE_KEYS = {
6498
6329
  start: "startNodeConfig",
6499
6330
  end: "endNodeConfig",
@@ -6515,11 +6346,11 @@ var NODE_TITLE_KEYS = {
6515
6346
  entity: "entityNodeConfig",
6516
6347
  datasource: "datasourceNodeConfig",
6517
6348
  group: "groupNodeConfig",
6518
- model_provider: "modelProviderNodeConfig",
6519
6349
  rule: "ruleNodeConfig",
6520
6350
  agent: "agentNodeConfig",
6521
6351
  audio_input: "audioInputNodeConfig",
6522
- speech_transcriber: "speechTranscriberNodeConfig"
6352
+ speech_transcriber: "speechTranscriberNodeConfig",
6353
+ dashboard_output: "dashboardOutputNodeConfig"
6523
6354
  };
6524
6355
  function LogicNodeModal({ onSave, entities = [], datasources = [], onLoadTables, onLoadSchema }) {
6525
6356
  const t = useTranslations("agents.workflow");
@@ -6580,8 +6411,10 @@ function LogicNodeModal({ onSave, entities = [], datasources = [], onLoadTables,
6580
6411
  return /* @__PURE__ */ jsx(EntityNodeConfigForm, { config, entities, onSave: handleSave, onCancel: closeModal });
6581
6412
  case "group":
6582
6413
  return /* @__PURE__ */ jsx(GroupNodeConfigForm, { config, onSave: handleSave, onCancel: closeModal });
6583
- case "model_provider":
6584
- return /* @__PURE__ */ jsx(ModelProviderNodeConfigForm, { config, onSave: handleSave, onCancel: closeModal });
6414
+ // model_provider was removed from the canvas — providers are
6415
+ // now account-level credentials configured in Settings, not
6416
+ // draggable nodes. Any legacy graph that still has a
6417
+ // model_provider node falls through to default → no edit form.
6585
6418
  case "rule":
6586
6419
  return /* @__PURE__ */ jsx(RuleNodeConfigForm, { config, onSave: handleSave, onCancel: closeModal });
6587
6420
  case "agent":
@@ -6590,6 +6423,8 @@ function LogicNodeModal({ onSave, entities = [], datasources = [], onLoadTables,
6590
6423
  return /* @__PURE__ */ jsx(AudioInputNodeConfigForm, { config, onSave: handleSave, onCancel: closeModal });
6591
6424
  case "speech_transcriber":
6592
6425
  return /* @__PURE__ */ jsx(SpeechTranscriberNodeConfigForm, { config, onSave: handleSave, onCancel: closeModal });
6426
+ case "dashboard_output":
6427
+ return /* @__PURE__ */ jsx(DashboardOutputNodeConfigForm, { config, onSave: handleSave, onCancel: closeModal });
6593
6428
  default:
6594
6429
  return null;
6595
6430
  }
@@ -6972,10 +6807,14 @@ var BUILT_IN_NODE_TYPES = {
6972
6807
  iteration_start: IterationStartFlowNode,
6973
6808
  note: NoteFlowNode,
6974
6809
  datasource: DatasourceFlowNode,
6975
- model_provider: ModelProviderFlowNode,
6810
+ // model_provider removed from canvas — providers are now
6811
+ // account-level credentials (configured in Settings), not draggable
6812
+ // nodes. Agents reference the provider via the `Models` tab in the
6813
+ // agent modal. See agent-modal.tsx + n8n/Dify patterns.
6976
6814
  group: GroupFlowNode,
6977
6815
  audio_input: AudioInputFlowNode,
6978
- speech_transcriber: SpeechTranscriberFlowNode
6816
+ speech_transcriber: SpeechTranscriberFlowNode,
6817
+ dashboard_output: DashboardOutputFlowNode
6979
6818
  };
6980
6819
  var ALL_LOGIC_NODE_TYPES = [
6981
6820
  "start",
@@ -7000,10 +6839,10 @@ var ALL_LOGIC_NODE_TYPES = [
7000
6839
  "rule",
7001
6840
  "entity",
7002
6841
  "datasource",
7003
- "model_provider",
7004
6842
  "group",
7005
6843
  "audio_input",
7006
- "speech_transcriber"
6844
+ "speech_transcriber",
6845
+ "dashboard_output"
7007
6846
  ];
7008
6847
  function isLogicNodeType(nodeType) {
7009
6848
  return ALL_LOGIC_NODE_TYPES.includes(nodeType);
@@ -7027,6 +6866,7 @@ var AUTO_SAVE_DEBOUNCE_MS = 2e3;
7027
6866
  function WorkflowCanvasInner({
7028
6867
  agents,
7029
6868
  models,
6869
+ modelProviders = [],
7030
6870
  tools,
7031
6871
  agentTools = [],
7032
6872
  rules,
@@ -7061,7 +6901,9 @@ function WorkflowCanvasInner({
7061
6901
  openAgentModalAction(
7062
6902
  { agentId: "", name: "", order: 0, enabled: true, temperature: 0.7, maxTokens: 4096 },
7063
6903
  models,
7064
- true
6904
+ true,
6905
+ agentTools,
6906
+ modelProviders
7065
6907
  );
7066
6908
  }
7067
6909
  }, [isCreatingAgent]);
@@ -7208,7 +7050,7 @@ function WorkflowCanvasInner({
7208
7050
  providerName: models.find((m) => m.id === agent.modelId)?.provider,
7209
7051
  onSelect: () => {
7210
7052
  setSelectedAgentId(agent.agentId);
7211
- openAgentModalAction(agent, models, false, agentTools);
7053
+ openAgentModalAction(agent, models, false, agentTools, modelProviders);
7212
7054
  },
7213
7055
  onRemoveFromCanvas: handleRemoveNodeFromCanvas
7214
7056
  }
@@ -7591,7 +7433,7 @@ function WorkflowCanvasInner({
7591
7433
  const agent = targetNode.data?.agent;
7592
7434
  if (agent) {
7593
7435
  setSelectedAgentId(agent.agentId ?? agent.id ?? null);
7594
- openAgentModalAction(agent, models, false, agentTools);
7436
+ openAgentModalAction(agent, models, false, agentTools, modelProviders);
7595
7437
  }
7596
7438
  } else if (targetNode.type === "tool") {
7597
7439
  const tool = targetNode.data?.tool;
@@ -8090,7 +7932,7 @@ function WorkflowCanvasInner({
8090
7932
  selected: false,
8091
7933
  onSelect: () => {
8092
7934
  setSelectedAgentId(agent.agentId);
8093
- openAgentModalAction(agent, models, false, agentTools);
7935
+ openAgentModalAction(agent, models, false, agentTools, modelProviders);
8094
7936
  },
8095
7937
  onRemoveFromCanvas: handleRemoveNodeFromCanvas
8096
7938
  }
@@ -8750,6 +8592,6 @@ function Workspace({
8750
8592
  ) }) });
8751
8593
  }
8752
8594
 
8753
- export { AgentFlowNode, AgentToolFlowNode, AnswerFlowNode, AnthropicIcon, CATEGORY_COLORS, CATEGORY_PILL_COLORS, CodeFlowNode, CrewAIIcon, DocumentExtractorFlowNode, EXPERIMENTAL_NODE_TYPES, EndFlowNode, EntityFlowNode, FRAMEWORK_META, GoogleADKIcon, GroupFlowNode, HttpRequestFlowNode, ICON_MAP, IfElseFlowNode, IterationFlowNode, IterationStartFlowNode, KnowledgeBaseFlowNode, LOGIC_ICON_MAP, LOGIC_NODE_BADGE_COLORS, LOGIC_NODE_GRADIENTS, LOGIC_NODE_HANDLE_COLORS, LangChainIcon, ListOperatorFlowNode, LogicNodeModal, MINIMAP_NODE_COLORS, ModelProviderFlowNode, NODE_EXECUTION_ACCENT_COLORS, NodeCard, NodeCardBadge, NodeCardDeleteAction, NodeCardHeader, NodeCardMeta, NodeContextMenu, NodeIconBubble, NodeInteractiveCard, NodeRunningIndicator, NoteFlowNode, OpenAIIcon, PanelContextMenu, ParameterExtractorFlowNode, QuestionClassifierFlowNode, RuleFlowNode, SelectionContextMenu, StartFlowNode, StrandsIcon, TemplateTransformFlowNode, ToolFlowNode, VariableAggregatorFlowNode, VariableAssignerFlowNode, WorkflowBuilderProvider, WorkflowCanvas, WorkflowHandle, Workspace, getCompatibleModels, getDefaultFrameworkForModel, getEntityBadgeColor, getEntityGradient, getEntityHandleColor, getEntityIcon, getEntityMinimapColor, getFrameworkMeta, getNodeExecutionAccent, getNodeExecutionAccentRgb, isFrameworkCompatibleWithProviders, isModelCompatibleWithFramework, useModalStore, useWorkflowBuilderClient, useWorkflowBuilderClientOptional, useWorkflowStore };
8754
- //# sourceMappingURL=chunk-PCYL4MII.mjs.map
8755
- //# sourceMappingURL=chunk-PCYL4MII.mjs.map
8595
+ export { AgentFlowNode, AgentToolFlowNode, AnswerFlowNode, AnthropicIcon, CATEGORY_COLORS, CATEGORY_PILL_COLORS, CodeFlowNode, CrewAIIcon, DocumentExtractorFlowNode, EXPERIMENTAL_NODE_TYPES, EndFlowNode, EntityFlowNode, FRAMEWORK_META, GoogleADKIcon, GroupFlowNode, HttpRequestFlowNode, ICON_MAP, IfElseFlowNode, IterationFlowNode, IterationStartFlowNode, KnowledgeBaseFlowNode, LOGIC_ICON_MAP, LOGIC_NODE_BADGE_COLORS, LOGIC_NODE_GRADIENTS, LOGIC_NODE_HANDLE_COLORS, LangChainIcon, ListOperatorFlowNode, LogicNodeModal, MINIMAP_NODE_COLORS, NODE_EXECUTION_ACCENT_COLORS, NodeCard, NodeCardBadge, NodeCardDeleteAction, NodeCardHeader, NodeCardMeta, NodeContextMenu, NodeIconBubble, NodeInteractiveCard, NodeRunningIndicator, NoteFlowNode, OpenAIIcon, PanelContextMenu, ParameterExtractorFlowNode, QuestionClassifierFlowNode, RuleFlowNode, SelectionContextMenu, StartFlowNode, StrandsIcon, TemplateTransformFlowNode, ToolFlowNode, VariableAggregatorFlowNode, VariableAssignerFlowNode, WorkflowBuilderProvider, WorkflowCanvas, WorkflowHandle, Workspace, getCompatibleModels, getDefaultFrameworkForModel, getEntityBadgeColor, getEntityGradient, getEntityHandleColor, getEntityIcon, getEntityMinimapColor, getFrameworkMeta, getNodeExecutionAccent, getNodeExecutionAccentRgb, isFrameworkCompatibleWithProviders, isModelCompatibleWithFramework, useModalStore, useWorkflowBuilderClient, useWorkflowBuilderClientOptional, useWorkflowStore };
8596
+ //# sourceMappingURL=chunk-VV6SYMPM.mjs.map
8597
+ //# sourceMappingURL=chunk-VV6SYMPM.mjs.map