@datatechsolutions/ui 3.6.1 → 3.7.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 (135) hide show
  1. package/dist/astrlabe/graph-node.js +8 -5
  2. package/dist/astrlabe/graph-node.mjs +4 -1
  3. package/dist/astrlabe/index.js +115 -114
  4. package/dist/astrlabe/index.mjs +7 -6
  5. package/dist/astrlabe/workflow-canvas.js +7 -6
  6. package/dist/astrlabe/workflow-canvas.mjs +6 -5
  7. package/dist/{chunk-3Z66NXEB.mjs → chunk-2OPBUVTQ.mjs} +3 -3
  8. package/dist/{chunk-3Z66NXEB.mjs.map → chunk-2OPBUVTQ.mjs.map} +1 -1
  9. package/dist/{chunk-4JDJRGAB.mjs → chunk-34XRH2FX.mjs} +5 -4
  10. package/dist/chunk-34XRH2FX.mjs.map +1 -0
  11. package/dist/{chunk-KEWRLEYV.js → chunk-3JZGRXSG.js} +4 -4
  12. package/dist/{chunk-KEWRLEYV.js.map → chunk-3JZGRXSG.js.map} +1 -1
  13. package/dist/{chunk-JQYDJ75Q.mjs → chunk-3VYD7QL2.mjs} +3 -3
  14. package/dist/{chunk-JQYDJ75Q.mjs.map → chunk-3VYD7QL2.mjs.map} +1 -1
  15. package/dist/{chunk-MRRFDIUQ.mjs → chunk-4JRMXHPU.mjs} +5 -4
  16. package/dist/chunk-4JRMXHPU.mjs.map +1 -0
  17. package/dist/{chunk-4OFG6POC.mjs → chunk-5LCWQKGQ.mjs} +207 -1128
  18. package/dist/chunk-5LCWQKGQ.mjs.map +1 -0
  19. package/dist/{chunk-W5YCZOXO.js → chunk-7YK4WXHO.js} +79 -78
  20. package/dist/chunk-7YK4WXHO.js.map +1 -0
  21. package/dist/{chunk-YOJIPZ72.js → chunk-BBLBSDPN.js} +9 -9
  22. package/dist/{chunk-YOJIPZ72.js.map → chunk-BBLBSDPN.js.map} +1 -1
  23. package/dist/chunk-BHOT22QL.js +998 -0
  24. package/dist/chunk-BHOT22QL.js.map +1 -0
  25. package/dist/{chunk-MQNXKBFP.mjs → chunk-C4AJWDFB.mjs} +7 -6
  26. package/dist/chunk-C4AJWDFB.mjs.map +1 -0
  27. package/dist/{chunk-UOABOFKO.mjs → chunk-CBFK4W4C.mjs} +3 -3
  28. package/dist/{chunk-UOABOFKO.mjs.map → chunk-CBFK4W4C.mjs.map} +1 -1
  29. package/dist/{chunk-P5F257N3.js → chunk-CVZXZK2X.js} +35 -34
  30. package/dist/chunk-CVZXZK2X.js.map +1 -0
  31. package/dist/{chunk-IHHGT3LP.mjs → chunk-CYAAL3BY.mjs} +6 -5
  32. package/dist/chunk-CYAAL3BY.mjs.map +1 -0
  33. package/dist/{chunk-LVK7VXW7.js → chunk-DMPBNWJB.js} +37 -36
  34. package/dist/chunk-DMPBNWJB.js.map +1 -0
  35. package/dist/{chunk-ESLKQJQS.mjs → chunk-DXLATMGD.mjs} +6 -5
  36. package/dist/chunk-DXLATMGD.mjs.map +1 -0
  37. package/dist/{chunk-P4YYEM4B.js → chunk-EZQ2D47U.js} +7 -10
  38. package/dist/chunk-EZQ2D47U.js.map +1 -0
  39. package/dist/{chunk-6ZMTJSQF.js → chunk-FUHNEP3Y.js} +164 -163
  40. package/dist/chunk-FUHNEP3Y.js.map +1 -0
  41. package/dist/{chunk-YTE6WCBX.js → chunk-JHN2OUWG.js} +64 -63
  42. package/dist/chunk-JHN2OUWG.js.map +1 -0
  43. package/dist/{chunk-AMYQSPQC.js → chunk-JLECJI7S.js} +18 -17
  44. package/dist/chunk-JLECJI7S.js.map +1 -0
  45. package/dist/{chunk-DRORQGN2.js → chunk-KMNWPC64.js} +40 -39
  46. package/dist/chunk-KMNWPC64.js.map +1 -0
  47. package/dist/{chunk-VUAGVZJM.mjs → chunk-NJ6HH4QP.mjs} +6 -5
  48. package/dist/chunk-NJ6HH4QP.mjs.map +1 -0
  49. package/dist/{chunk-OZNTQROP.mjs → chunk-PLTLRL2V.mjs} +7 -10
  50. package/dist/chunk-PLTLRL2V.mjs.map +1 -0
  51. package/dist/{chunk-5ZAZ2C7A.mjs → chunk-PMMP76MV.mjs} +7 -6
  52. package/dist/chunk-PMMP76MV.mjs.map +1 -0
  53. package/dist/{chunk-NJZIE4EH.js → chunk-QF6WL7XU.js} +6 -5
  54. package/dist/chunk-QF6WL7XU.js.map +1 -0
  55. package/dist/{chunk-QRNFTG6A.js → chunk-QGLGQXJE.js} +4 -4
  56. package/dist/{chunk-QRNFTG6A.js.map → chunk-QGLGQXJE.js.map} +1 -1
  57. package/dist/{chunk-GCYYGSHU.js → chunk-R4EKPXX3.js} +564 -1525
  58. package/dist/chunk-R4EKPXX3.js.map +1 -0
  59. package/dist/{chunk-SQZGQOKU.js → chunk-RWYG7QHP.js} +119 -132
  60. package/dist/chunk-RWYG7QHP.js.map +1 -0
  61. package/dist/{chunk-WBEZATIB.js → chunk-RZ3NDH5S.js} +13 -13
  62. package/dist/{chunk-WBEZATIB.js.map → chunk-RZ3NDH5S.js.map} +1 -1
  63. package/dist/{chunk-HGWVJ3VB.mjs → chunk-SJVKID3E.mjs} +4 -3
  64. package/dist/chunk-SJVKID3E.mjs.map +1 -0
  65. package/dist/{chunk-7LILNZMR.mjs → chunk-TJEZL72T.mjs} +4 -3
  66. package/dist/chunk-TJEZL72T.mjs.map +1 -0
  67. package/dist/{chunk-MUOTTGCX.js → chunk-UDYEUTJC.js} +31 -30
  68. package/dist/chunk-UDYEUTJC.js.map +1 -0
  69. package/dist/{chunk-UGJZ3M4Q.js → chunk-VDLMWOQM.js} +55 -54
  70. package/dist/chunk-VDLMWOQM.js.map +1 -0
  71. package/dist/{chunk-KDFBN2L2.mjs → chunk-VZIUQE7B.mjs} +24 -37
  72. package/dist/chunk-VZIUQE7B.mjs.map +1 -0
  73. package/dist/chunk-WR55H7DH.mjs +934 -0
  74. package/dist/chunk-WR55H7DH.mjs.map +1 -0
  75. package/dist/{chunk-ZYVDDSAC.mjs → chunk-YRXDETBK.mjs} +6 -6
  76. package/dist/{chunk-ZYVDDSAC.mjs.map → chunk-YRXDETBK.mjs.map} +1 -1
  77. package/dist/{chunk-VDLAZR7S.mjs → chunk-ZYRL3WER.mjs} +5 -4
  78. package/dist/chunk-ZYRL3WER.mjs.map +1 -0
  79. package/dist/index.js +826 -825
  80. package/dist/index.mjs +4 -3
  81. package/dist/platform/admin/index.js +13 -12
  82. package/dist/platform/admin/index.mjs +7 -6
  83. package/dist/platform/agents-workspace.js +10 -9
  84. package/dist/platform/agents-workspace.mjs +9 -8
  85. package/dist/platform/app-shell.js +6 -5
  86. package/dist/platform/app-shell.mjs +5 -4
  87. package/dist/platform/auth/index.js +30 -29
  88. package/dist/platform/auth/index.mjs +7 -6
  89. package/dist/platform/billing/index.js +6 -5
  90. package/dist/platform/billing/index.mjs +5 -4
  91. package/dist/platform/impersonation/index.js +6 -5
  92. package/dist/platform/impersonation/index.mjs +5 -4
  93. package/dist/platform/index.d.mts +1 -1
  94. package/dist/platform/index.d.ts +1 -1
  95. package/dist/platform/index.js +87 -93
  96. package/dist/platform/index.js.map +1 -1
  97. package/dist/platform/index.mjs +23 -29
  98. package/dist/platform/index.mjs.map +1 -1
  99. package/dist/platform/pages/index.d.mts +86 -1
  100. package/dist/platform/pages/index.d.ts +86 -1
  101. package/dist/platform/pages/index.js +868 -209
  102. package/dist/platform/pages/index.js.map +1 -1
  103. package/dist/platform/pages/index.mjs +670 -12
  104. package/dist/platform/pages/index.mjs.map +1 -1
  105. package/dist/platform/settings/index.js +10 -9
  106. package/dist/platform/settings/index.mjs +9 -8
  107. package/dist/platform/workflow-canvas-shell.js +8 -7
  108. package/dist/platform/workflow-canvas-shell.mjs +7 -6
  109. package/package.json +1 -1
  110. package/dist/chunk-4JDJRGAB.mjs.map +0 -1
  111. package/dist/chunk-4OFG6POC.mjs.map +0 -1
  112. package/dist/chunk-5ZAZ2C7A.mjs.map +0 -1
  113. package/dist/chunk-6ZMTJSQF.js.map +0 -1
  114. package/dist/chunk-7LILNZMR.mjs.map +0 -1
  115. package/dist/chunk-AMYQSPQC.js.map +0 -1
  116. package/dist/chunk-DRORQGN2.js.map +0 -1
  117. package/dist/chunk-ESLKQJQS.mjs.map +0 -1
  118. package/dist/chunk-GCYYGSHU.js.map +0 -1
  119. package/dist/chunk-HGWVJ3VB.mjs.map +0 -1
  120. package/dist/chunk-IHHGT3LP.mjs.map +0 -1
  121. package/dist/chunk-KDFBN2L2.mjs.map +0 -1
  122. package/dist/chunk-LVK7VXW7.js.map +0 -1
  123. package/dist/chunk-MQNXKBFP.mjs.map +0 -1
  124. package/dist/chunk-MRRFDIUQ.mjs.map +0 -1
  125. package/dist/chunk-MUOTTGCX.js.map +0 -1
  126. package/dist/chunk-NJZIE4EH.js.map +0 -1
  127. package/dist/chunk-OZNTQROP.mjs.map +0 -1
  128. package/dist/chunk-P4YYEM4B.js.map +0 -1
  129. package/dist/chunk-P5F257N3.js.map +0 -1
  130. package/dist/chunk-SQZGQOKU.js.map +0 -1
  131. package/dist/chunk-UGJZ3M4Q.js.map +0 -1
  132. package/dist/chunk-VDLAZR7S.mjs.map +0 -1
  133. package/dist/chunk-VUAGVZJM.mjs.map +0 -1
  134. package/dist/chunk-W5YCZOXO.js.map +0 -1
  135. package/dist/chunk-YTE6WCBX.js.map +0 -1
@@ -1,23 +1,24 @@
1
1
  "use client";
2
2
  import { adaptWorkflowGraphToUi, formatDurationMs } from '../../chunk-UQXVCVAN.mjs';
3
- import { WorkflowWorkspace } from '../../chunk-4JDJRGAB.mjs';
4
- export { RolesPageView, UsersPageView } from '../../chunk-4JDJRGAB.mjs';
5
- import { DatasourceModal, findCategory, DIALECT_CATEGORIES } from '../../chunk-HGWVJ3VB.mjs';
6
- export { DIALECT_CATEGORIES, DatasourceFormModal, DatasourceModal, findCategory, findDialect } from '../../chunk-HGWVJ3VB.mjs';
7
- import { defaultRuleForm, RuleForm, ExecutionTimelinePanel } from '../../chunk-MQNXKBFP.mjs';
3
+ import { WorkflowWorkspace } from '../../chunk-34XRH2FX.mjs';
4
+ export { RolesPageView, UsersPageView } from '../../chunk-34XRH2FX.mjs';
5
+ import { DatasourceModal, findCategory, DIALECT_CATEGORIES } from '../../chunk-SJVKID3E.mjs';
6
+ export { DIALECT_CATEGORIES, DatasourceFormModal, DatasourceModal, findCategory, findDialect } from '../../chunk-SJVKID3E.mjs';
7
+ import { defaultRuleForm, RuleForm, ExecutionTimelinePanel } from '../../chunk-C4AJWDFB.mjs';
8
8
  import '../../chunk-JB6RNAD2.mjs';
9
9
  import '../../chunk-LEXBTVGM.mjs';
10
- import '../../chunk-KDFBN2L2.mjs';
11
- import { HeroSection, PageLoadingState, PageEmptyState, SearchBar, EntityCard, Badge, ManagementPageLayout, CreateActionButton, Button, GlassModal, FormGrid, FormSelect, FormInput, FormTextarea, SectionHeader, Text, Form, FormActionsRow, Table, TableHead, TableRow, TableHeader, TableBody, TableCell, InlineForm, CopyableId } from '../../chunk-4OFG6POC.mjs';
12
- import '../../chunk-D2JF6C3E.mjs';
10
+ import '../../chunk-VZIUQE7B.mjs';
11
+ import { HeroSection, PageLoadingState, PageEmptyState, SearchBar, EntityCard, ManagementPageLayout, CreateActionButton, GlassModal, FormGrid, FormSelect, FormInput, FormTextarea, SectionHeader, Text, Form, FormActionsRow, Table, TableHead, TableRow, TableHeader, TableBody, TableCell, InlineForm, CopyableId, ListCard, ListCardItem, Avatar, SectionCard, Tabs, TabsList, TabsTrigger, TabsContent } from '../../chunk-5LCWQKGQ.mjs';
13
12
  import '../../chunk-7VJ7CMMT.mjs';
14
- import { useLink } from '../../chunk-QWG2FMUN.mjs';
15
13
  import '../../chunk-RHRJXK5R.mjs';
16
14
  import '../../chunk-3AY5HIQ6.mjs';
17
- import '../../chunk-OZNTQROP.mjs';
15
+ import '../../chunk-PLTLRL2V.mjs';
16
+ import { Badge, Button } from '../../chunk-WR55H7DH.mjs';
17
+ import '../../chunk-D2JF6C3E.mjs';
18
+ import { useLink } from '../../chunk-QWG2FMUN.mjs';
18
19
  import '../../chunk-G7JQ4OCE.mjs';
19
20
  import { useState, useMemo, useEffect } from 'react';
20
- import { CubeTransparentIcon, CpuChipIcon, ChatBubbleLeftEllipsisIcon, WrenchScrewdriverIcon, AdjustmentsHorizontalIcon, CircleStackIcon, RectangleStackIcon, ClockIcon, LinkIcon, KeyIcon, ArrowPathIcon, TrashIcon } from '@heroicons/react/24/outline';
21
+ import { CubeTransparentIcon, CpuChipIcon, ChatBubbleLeftEllipsisIcon, WrenchScrewdriverIcon, AdjustmentsHorizontalIcon, CircleStackIcon, RectangleStackIcon, ClockIcon, LinkIcon, KeyIcon, ArrowPathIcon, TrashIcon, PlusIcon } from '@heroicons/react/24/outline';
21
22
  import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
22
23
 
23
24
  function AgentsModelsPageView({ labels, models, loading }) {
@@ -2168,7 +2169,664 @@ function CredentialsPageView({ labels, credentials, loading, onCreate, onRotate,
2168
2169
  )
2169
2170
  ] });
2170
2171
  }
2172
+ var LOCALE_OPTIONS2 = [
2173
+ { value: "en", label: "English" },
2174
+ { value: "pt-BR", label: "Portugu\xEAs (Brasil)" },
2175
+ { value: "es", label: "Espa\xF1ol" },
2176
+ { value: "fr", label: "Fran\xE7ais" },
2177
+ { value: "de", label: "Deutsch" },
2178
+ { value: "it", label: "Italiano" }
2179
+ ];
2180
+ function AgentsWorkspacePageView({
2181
+ labels,
2182
+ agents,
2183
+ models,
2184
+ tools,
2185
+ connections,
2186
+ loading,
2187
+ promptsByAgent = {},
2188
+ onSelectAgent,
2189
+ onCreateAgent,
2190
+ onUpdateAgent,
2191
+ onDeleteAgent,
2192
+ onCreatePrompt,
2193
+ onActivatePrompt,
2194
+ onAttachTool,
2195
+ onDetachTool,
2196
+ onUpdateModel
2197
+ }) {
2198
+ const [searchTerm, setSearchTerm] = useState("");
2199
+ const [createOpen, setCreateOpen] = useState(false);
2200
+ const [selectedId, setSelectedId] = useState(null);
2201
+ useEffect(() => {
2202
+ if (!selectedId && agents.length > 0) {
2203
+ const first = String(agents[0].agentId ?? agents[0].id ?? "");
2204
+ if (first) {
2205
+ setSelectedId(first);
2206
+ onSelectAgent?.(first);
2207
+ }
2208
+ }
2209
+ }, [agents, selectedId, onSelectAgent]);
2210
+ const filteredAgents = useMemo(() => {
2211
+ const term = searchTerm.trim().toLowerCase();
2212
+ if (!term) return agents;
2213
+ return agents.filter((a) => String(a.name ?? "").toLowerCase().includes(term));
2214
+ }, [agents, searchTerm]);
2215
+ const selectedAgent = useMemo(() => {
2216
+ if (!selectedId) return null;
2217
+ return agents.find((a) => String(a.agentId ?? a.id ?? "") === selectedId) ?? null;
2218
+ }, [agents, selectedId]);
2219
+ const isEmpty = agents.length === 0;
2220
+ const hero = /* @__PURE__ */ jsx(
2221
+ HeroSection,
2222
+ {
2223
+ icon: /* @__PURE__ */ jsx(CpuChipIcon, { className: "h-5 w-5" }),
2224
+ label: labels.title,
2225
+ title: labels.title,
2226
+ subtitle: labels.subtitle,
2227
+ gradient: "from-violet-500 to-indigo-700",
2228
+ actions: /* @__PURE__ */ jsx(
2229
+ CreateActionButton,
2230
+ {
2231
+ mode: "desktop",
2232
+ label: labels.addAgent,
2233
+ onClick: () => setCreateOpen(true),
2234
+ accent: "violet"
2235
+ }
2236
+ )
2237
+ }
2238
+ );
2239
+ const mobileAction = /* @__PURE__ */ jsx(
2240
+ CreateActionButton,
2241
+ {
2242
+ mode: "mobile",
2243
+ label: labels.addAgent,
2244
+ onClick: () => setCreateOpen(true),
2245
+ accent: "violet"
2246
+ }
2247
+ );
2248
+ const content = loading ? /* @__PURE__ */ jsx(PageLoadingState, {}) : isEmpty ? /* @__PURE__ */ jsx(
2249
+ PageEmptyState,
2250
+ {
2251
+ title: labels.empty,
2252
+ message: labels.emptyMessage,
2253
+ iconName: "folder-open"
2254
+ }
2255
+ ) : /* @__PURE__ */ jsxs("div", { className: "space-y-4", children: [
2256
+ /* @__PURE__ */ jsx(
2257
+ SearchBar,
2258
+ {
2259
+ searchTerm,
2260
+ onSearchChange: setSearchTerm,
2261
+ placeholder: labels.searchPlaceholder
2262
+ }
2263
+ ),
2264
+ /* @__PURE__ */ jsxs("div", { className: "grid grid-cols-1 gap-4 lg:grid-cols-[20rem_minmax(0,1fr)]", children: [
2265
+ /* @__PURE__ */ jsx("div", { className: "lg:sticky lg:top-4", children: /* @__PURE__ */ jsx(ListCard, { variant: "glass", children: filteredAgents.map((agent) => {
2266
+ const id = String(agent.agentId ?? agent.id ?? "");
2267
+ const active = id === selectedId;
2268
+ const initials = deriveInitials(String(agent.name ?? id));
2269
+ const modelName = models.find((m) => m.id === String(agent.modelId ?? ""))?.name ?? String(agent.modelId ?? "");
2270
+ return /* @__PURE__ */ jsx(
2271
+ ListCardItem,
2272
+ {
2273
+ leading: /* @__PURE__ */ jsx(Avatar, { tone: active ? "violet" : "slate", initials }),
2274
+ trailing: agent.activePromptVersion > 0 ? /* @__PURE__ */ jsxs(Badge, { color: "emerald", children: [
2275
+ "v",
2276
+ agent.activePromptVersion
2277
+ ] }) : /* @__PURE__ */ jsx(Badge, { color: "zinc", children: "draft" }),
2278
+ pressable: true,
2279
+ onPress: () => {
2280
+ setSelectedId(id);
2281
+ onSelectAgent?.(id);
2282
+ },
2283
+ className: active ? "bg-violet-500/5 dark:bg-violet-400/10" : "",
2284
+ children: /* @__PURE__ */ jsxs("div", { className: "min-w-0", children: [
2285
+ /* @__PURE__ */ jsx("p", { className: "truncate text-sm font-semibold text-slate-900 dark:text-slate-100", children: String(agent.name ?? id) }),
2286
+ modelName && /* @__PURE__ */ jsx("p", { className: "truncate text-xs text-slate-500 dark:text-slate-400", children: modelName })
2287
+ ] })
2288
+ },
2289
+ id
2290
+ );
2291
+ }) }) }),
2292
+ /* @__PURE__ */ jsx("div", { children: selectedAgent ? /* @__PURE__ */ jsx(
2293
+ AgentDetail,
2294
+ {
2295
+ agent: selectedAgent,
2296
+ labels,
2297
+ models,
2298
+ tools,
2299
+ connections,
2300
+ prompts: promptsByAgent[String(selectedAgent.agentId ?? selectedAgent.id ?? "")] ?? [],
2301
+ onUpdateAgent,
2302
+ onDeleteAgent,
2303
+ onCreatePrompt,
2304
+ onActivatePrompt,
2305
+ onAttachTool,
2306
+ onDetachTool,
2307
+ onUpdateModel,
2308
+ onCleared: () => {
2309
+ setSelectedId(null);
2310
+ onSelectAgent?.(null);
2311
+ }
2312
+ },
2313
+ String(selectedAgent.agentId ?? selectedAgent.id ?? "")
2314
+ ) : /* @__PURE__ */ jsx(
2315
+ SectionCard,
2316
+ {
2317
+ header: {
2318
+ icon: /* @__PURE__ */ jsx(CpuChipIcon, { className: "h-4 w-4" }),
2319
+ title: labels.noSelection,
2320
+ subtitle: labels.noSelectionMessage
2321
+ },
2322
+ children: /* @__PURE__ */ jsx(
2323
+ PageEmptyState,
2324
+ {
2325
+ title: labels.noSelection,
2326
+ message: labels.noSelectionMessage,
2327
+ iconName: "folder-open"
2328
+ }
2329
+ )
2330
+ }
2331
+ ) })
2332
+ ] })
2333
+ ] });
2334
+ return /* @__PURE__ */ jsxs(Fragment, { children: [
2335
+ /* @__PURE__ */ jsx(ManagementPageLayout, { hero, content, mobileAction }),
2336
+ createOpen && /* @__PURE__ */ jsx(
2337
+ CreateAgentDialog,
2338
+ {
2339
+ labels,
2340
+ models,
2341
+ onClose: () => setCreateOpen(false),
2342
+ onSubmit: async (input) => {
2343
+ await onCreateAgent(input);
2344
+ setCreateOpen(false);
2345
+ }
2346
+ }
2347
+ )
2348
+ ] });
2349
+ }
2350
+ function AgentDetail({
2351
+ agent,
2352
+ labels,
2353
+ models,
2354
+ tools,
2355
+ connections,
2356
+ prompts,
2357
+ onUpdateAgent,
2358
+ onDeleteAgent,
2359
+ onCreatePrompt,
2360
+ onActivatePrompt,
2361
+ onAttachTool,
2362
+ onDetachTool,
2363
+ onUpdateModel,
2364
+ onCleared
2365
+ }) {
2366
+ const agentId = String(agent.agentId ?? agent.id ?? "");
2367
+ return /* @__PURE__ */ jsx(
2368
+ SectionCard,
2369
+ {
2370
+ header: {
2371
+ icon: /* @__PURE__ */ jsx(CpuChipIcon, { className: "h-4 w-4" }),
2372
+ title: String(agent.name ?? agentId),
2373
+ subtitle: String(agent.description ?? "")
2374
+ },
2375
+ actions: /* @__PURE__ */ jsxs(
2376
+ Button,
2377
+ {
2378
+ type: "button",
2379
+ size: "sm",
2380
+ color: "rose",
2381
+ onClick: async () => {
2382
+ if (window.confirm(labels.deleteConfirm)) {
2383
+ await onDeleteAgent(agentId);
2384
+ onCleared();
2385
+ }
2386
+ },
2387
+ children: [
2388
+ /* @__PURE__ */ jsx(TrashIcon, { className: "h-4 w-4" }),
2389
+ /* @__PURE__ */ jsx("span", { className: "ml-1.5", children: labels.deleteAgent })
2390
+ ]
2391
+ }
2392
+ ),
2393
+ children: /* @__PURE__ */ jsxs(Tabs, { defaultValue: "general", className: "w-full", children: [
2394
+ /* @__PURE__ */ jsxs(TabsList, { className: "bg-white/40 dark:bg-white/[0.06]", children: [
2395
+ /* @__PURE__ */ jsx(TabsTrigger, { value: "general", children: labels.generalTab }),
2396
+ /* @__PURE__ */ jsx(TabsTrigger, { value: "prompt", children: labels.promptTab }),
2397
+ /* @__PURE__ */ jsx(TabsTrigger, { value: "tools", children: labels.toolsTab }),
2398
+ /* @__PURE__ */ jsx(TabsTrigger, { value: "model", children: labels.modelTab })
2399
+ ] }),
2400
+ /* @__PURE__ */ jsx(TabsContent, { value: "general", className: "space-y-4 pt-4", children: /* @__PURE__ */ jsx(GeneralTab, { agent, labels, onSubmit: (input) => onUpdateAgent(agentId, input) }) }),
2401
+ /* @__PURE__ */ jsx(TabsContent, { value: "prompt", className: "space-y-4 pt-4", children: /* @__PURE__ */ jsx(
2402
+ PromptTab,
2403
+ {
2404
+ agent,
2405
+ labels,
2406
+ prompts,
2407
+ onCreate: (input) => onCreatePrompt(agentId, input),
2408
+ onActivate: (promptId) => onActivatePrompt(agentId, promptId)
2409
+ }
2410
+ ) }),
2411
+ /* @__PURE__ */ jsx(TabsContent, { value: "tools", className: "space-y-4 pt-4", children: /* @__PURE__ */ jsx(
2412
+ ToolsTab,
2413
+ {
2414
+ agent,
2415
+ labels,
2416
+ tools,
2417
+ onAttach: (toolId) => onAttachTool(agentId, toolId),
2418
+ onDetach: (toolId) => onDetachTool(agentId, toolId)
2419
+ }
2420
+ ) }),
2421
+ /* @__PURE__ */ jsx(TabsContent, { value: "model", className: "space-y-4 pt-4", children: /* @__PURE__ */ jsx(
2422
+ ModelTab,
2423
+ {
2424
+ agent,
2425
+ labels,
2426
+ models,
2427
+ connections,
2428
+ onSubmit: (modelId, connectionId) => onUpdateModel(agentId, modelId, connectionId)
2429
+ }
2430
+ ) })
2431
+ ] })
2432
+ }
2433
+ );
2434
+ }
2435
+ function GeneralTab({
2436
+ agent,
2437
+ labels,
2438
+ onSubmit
2439
+ }) {
2440
+ const [submitting, setSubmitting] = useState(false);
2441
+ const initial = {
2442
+ agentId: String(agent.agentId ?? agent.id ?? ""),
2443
+ name: String(agent.name ?? ""),
2444
+ modelId: String(agent.modelId ?? ""),
2445
+ systemPrompt: String(agent.systemPrompt ?? ""),
2446
+ maxTokens: Number(agent.maxTokens ?? 2048),
2447
+ temperature: Number(agent.temperature ?? 0.2)
2448
+ };
2449
+ const initialDescription = String(agent.description ?? "");
2450
+ const initialRole = String(agent.role ?? "");
2451
+ const initialStatus = String(agent.status ?? "draft");
2452
+ return /* @__PURE__ */ jsx(
2453
+ SectionCard,
2454
+ {
2455
+ variant: "glass",
2456
+ header: {
2457
+ icon: /* @__PURE__ */ jsx(CpuChipIcon, { className: "h-4 w-4" }),
2458
+ title: labels.generalSection
2459
+ },
2460
+ children: /* @__PURE__ */ jsxs(
2461
+ "form",
2462
+ {
2463
+ onSubmit: async (event) => {
2464
+ event.preventDefault();
2465
+ setSubmitting(true);
2466
+ try {
2467
+ const form = new FormData(event.currentTarget);
2468
+ await onSubmit({
2469
+ agentId: initial.agentId,
2470
+ name: String(form.get("name") ?? "").trim() || initial.name,
2471
+ modelId: String(form.get("modelId") ?? initial.modelId),
2472
+ systemPrompt: initial.systemPrompt,
2473
+ maxTokens: Number(form.get("maxTokens") ?? initial.maxTokens),
2474
+ temperature: Number(form.get("temperature") ?? initial.temperature)
2475
+ });
2476
+ } finally {
2477
+ setSubmitting(false);
2478
+ }
2479
+ },
2480
+ className: "space-y-4",
2481
+ children: [
2482
+ /* @__PURE__ */ jsxs(FormGrid, { children: [
2483
+ /* @__PURE__ */ jsx(FormInput, { name: "name", label: labels.name, defaultValue: initial.name, required: true }),
2484
+ /* @__PURE__ */ jsx(
2485
+ FormSelect,
2486
+ {
2487
+ name: "status",
2488
+ label: labels.status,
2489
+ defaultValue: initialStatus,
2490
+ options: [
2491
+ { value: "draft", label: labels.statusDraft },
2492
+ { value: "active", label: labels.statusActive },
2493
+ { value: "archived", label: labels.statusArchived }
2494
+ ]
2495
+ }
2496
+ ),
2497
+ /* @__PURE__ */ jsx(FormInput, { name: "role", label: labels.role, placeholder: labels.rolePlaceholder, defaultValue: initialRole }),
2498
+ /* @__PURE__ */ jsx(
2499
+ FormInput,
2500
+ {
2501
+ name: "maxTokens",
2502
+ label: labels.maxTokens,
2503
+ type: "number",
2504
+ defaultValue: String(initial.maxTokens)
2505
+ }
2506
+ ),
2507
+ /* @__PURE__ */ jsx(
2508
+ FormInput,
2509
+ {
2510
+ name: "temperature",
2511
+ label: labels.temperature,
2512
+ type: "number",
2513
+ step: 0.1,
2514
+ min: 0,
2515
+ max: 2,
2516
+ defaultValue: String(initial.temperature)
2517
+ }
2518
+ )
2519
+ ] }),
2520
+ /* @__PURE__ */ jsx(FormTextarea, { name: "description", label: labels.description, defaultValue: initialDescription, rows: 3 }),
2521
+ /* @__PURE__ */ jsx("div", { className: "flex justify-end", children: /* @__PURE__ */ jsx(Button, { type: "submit", color: "indigo", disabled: submitting, children: submitting ? labels.saving : labels.save }) })
2522
+ ]
2523
+ }
2524
+ )
2525
+ }
2526
+ );
2527
+ }
2528
+ function PromptTab({
2529
+ agent,
2530
+ labels,
2531
+ prompts,
2532
+ onCreate,
2533
+ onActivate
2534
+ }) {
2535
+ const [addOpen, setAddOpen] = useState(false);
2536
+ const agentId = String(agent.agentId ?? agent.id ?? "");
2537
+ const currentSystem = String(agent.systemPrompt ?? "");
2538
+ return /* @__PURE__ */ jsxs("div", { className: "space-y-4", children: [
2539
+ /* @__PURE__ */ jsx(
2540
+ SectionCard,
2541
+ {
2542
+ variant: "glass",
2543
+ header: {
2544
+ icon: /* @__PURE__ */ jsx(ChatBubbleLeftEllipsisIcon, { className: "h-4 w-4" }),
2545
+ title: labels.promptSection,
2546
+ subtitle: labels.promptCurrent
2547
+ },
2548
+ children: /* @__PURE__ */ jsx("pre", { className: "whitespace-pre-wrap rounded-lg border border-slate-200/70 bg-slate-50/60 p-3 text-xs text-slate-700 dark:border-slate-700 dark:bg-slate-900/40 dark:text-slate-200", children: currentSystem || "\u2014" })
2549
+ }
2550
+ ),
2551
+ /* @__PURE__ */ jsx(
2552
+ SectionCard,
2553
+ {
2554
+ variant: "glass",
2555
+ header: {
2556
+ icon: /* @__PURE__ */ jsx(ChatBubbleLeftEllipsisIcon, { className: "h-4 w-4" }),
2557
+ title: labels.promptVersions
2558
+ },
2559
+ actions: /* @__PURE__ */ jsxs(Button, { type: "button", size: "sm", outline: true, onClick: () => setAddOpen(true), children: [
2560
+ /* @__PURE__ */ jsx(PlusIcon, { className: "h-4 w-4" }),
2561
+ /* @__PURE__ */ jsx("span", { className: "ml-1.5", children: labels.addPrompt })
2562
+ ] }),
2563
+ children: prompts.length === 0 ? /* @__PURE__ */ jsx("p", { className: "text-sm text-slate-500 dark:text-slate-400", children: labels.promptVersionsEmpty }) : /* @__PURE__ */ jsx(ListCard, { children: prompts.map((prompt) => {
2564
+ const id = `${prompt.agentId}:${prompt.locale}:${prompt.version}`;
2565
+ return /* @__PURE__ */ jsxs(
2566
+ ListCardItem,
2567
+ {
2568
+ leading: /* @__PURE__ */ jsxs(Badge, { color: prompt.isActive ? "emerald" : "zinc", children: [
2569
+ "v",
2570
+ prompt.version
2571
+ ] }),
2572
+ trailing: prompt.isActive ? /* @__PURE__ */ jsx(Badge, { color: "emerald", children: labels.activated }) : /* @__PURE__ */ jsx(Button, { type: "button", size: "sm", outline: true, onClick: () => onActivate(id), children: labels.activate }),
2573
+ children: [
2574
+ /* @__PURE__ */ jsx("p", { className: "text-sm font-medium text-slate-700 dark:text-slate-200", children: prompt.locale }),
2575
+ prompt.prompt && /* @__PURE__ */ jsx("p", { className: "mt-1 line-clamp-2 text-xs text-slate-500 dark:text-slate-400", children: prompt.prompt })
2576
+ ]
2577
+ },
2578
+ id
2579
+ );
2580
+ }) })
2581
+ }
2582
+ ),
2583
+ addOpen && /* @__PURE__ */ jsx(
2584
+ GlassModal,
2585
+ {
2586
+ open: true,
2587
+ onClose: () => setAddOpen(false),
2588
+ title: labels.addPrompt,
2589
+ maxWidth: "2xl",
2590
+ showFormFooter: true,
2591
+ submitLabel: labels.save,
2592
+ onSubmit: async (event) => {
2593
+ const form = new FormData(event.currentTarget);
2594
+ await onCreate({
2595
+ agentId,
2596
+ locale: String(form.get("locale") ?? "en"),
2597
+ prompt: String(form.get("prompt") ?? "").trim(),
2598
+ systemPrompt: String(form.get("systemPrompt") ?? "").trim() || void 0,
2599
+ userTemplate: String(form.get("userTemplate") ?? "").trim() || void 0,
2600
+ reason: String(form.get("reason") ?? "").trim() || void 0,
2601
+ isActive: String(form.get("isActive") ?? "true") === "true"
2602
+ });
2603
+ setAddOpen(false);
2604
+ },
2605
+ children: /* @__PURE__ */ jsxs(FormGrid, { children: [
2606
+ /* @__PURE__ */ jsx(FormSelect, { name: "locale", label: labels.promptLocale, options: LOCALE_OPTIONS2, defaultValue: "en" }),
2607
+ /* @__PURE__ */ jsx(
2608
+ FormSelect,
2609
+ {
2610
+ name: "isActive",
2611
+ label: labels.promptIsActive,
2612
+ options: [
2613
+ { value: "true", label: labels.promptIsActive },
2614
+ { value: "false", label: "\u2014" }
2615
+ ],
2616
+ defaultValue: "true"
2617
+ }
2618
+ ),
2619
+ /* @__PURE__ */ jsx(FormInput, { name: "reason", label: labels.promptReason }),
2620
+ /* @__PURE__ */ jsx(FormTextarea, { name: "systemPrompt", label: labels.promptSystemPrompt, rows: 3 }),
2621
+ /* @__PURE__ */ jsx(FormTextarea, { name: "userTemplate", label: labels.promptUserTemplate, rows: 3 }),
2622
+ /* @__PURE__ */ jsx(FormTextarea, { name: "prompt", label: labels.promptText, rows: 6, required: true })
2623
+ ] })
2624
+ }
2625
+ )
2626
+ ] });
2627
+ }
2628
+ function ToolsTab({
2629
+ agent,
2630
+ labels,
2631
+ tools,
2632
+ onAttach,
2633
+ onDetach
2634
+ }) {
2635
+ const raw = agent;
2636
+ const attached = useMemo(() => {
2637
+ const ids = raw.enabledToolIds ?? raw.toolIds;
2638
+ return Array.isArray(ids) ? ids.filter((id) => typeof id === "string") : [];
2639
+ }, [raw]);
2640
+ const attachedSet = useMemo(() => new Set(attached), [attached]);
2641
+ const attachedTools = tools.filter((tool) => attachedSet.has(tool.agentToolId));
2642
+ const availableTools = tools.filter((tool) => !attachedSet.has(tool.agentToolId));
2643
+ return /* @__PURE__ */ jsxs("div", { className: "space-y-4", children: [
2644
+ /* @__PURE__ */ jsx(
2645
+ SectionCard,
2646
+ {
2647
+ variant: "glass",
2648
+ header: {
2649
+ icon: /* @__PURE__ */ jsx(WrenchScrewdriverIcon, { className: "h-4 w-4" }),
2650
+ title: labels.toolsAttached
2651
+ },
2652
+ children: attachedTools.length === 0 ? /* @__PURE__ */ jsx("p", { className: "text-sm text-slate-500 dark:text-slate-400", children: labels.toolsEmpty }) : /* @__PURE__ */ jsx(ListCard, { children: attachedTools.map((tool) => /* @__PURE__ */ jsxs(
2653
+ ListCardItem,
2654
+ {
2655
+ leading: /* @__PURE__ */ jsx("div", { className: "flex h-9 w-9 items-center justify-center rounded-lg bg-amber-500/10 text-amber-600 dark:bg-amber-500/20 dark:text-amber-400", children: /* @__PURE__ */ jsx(WrenchScrewdriverIcon, { className: "h-5 w-5" }) }),
2656
+ trailing: /* @__PURE__ */ jsx(Button, { type: "button", size: "sm", outline: true, onClick: () => onDetach(tool.agentToolId), children: labels.detachTool }),
2657
+ children: [
2658
+ /* @__PURE__ */ jsx("p", { className: "text-sm font-medium text-slate-700 dark:text-slate-200", children: tool.name }),
2659
+ tool.description && /* @__PURE__ */ jsx("p", { className: "mt-0.5 line-clamp-1 text-xs text-slate-500 dark:text-slate-400", children: tool.description })
2660
+ ]
2661
+ },
2662
+ tool.agentToolId
2663
+ )) })
2664
+ }
2665
+ ),
2666
+ /* @__PURE__ */ jsx(
2667
+ SectionCard,
2668
+ {
2669
+ variant: "glass",
2670
+ header: {
2671
+ icon: /* @__PURE__ */ jsx(WrenchScrewdriverIcon, { className: "h-4 w-4" }),
2672
+ title: labels.toolsAvailable
2673
+ },
2674
+ children: availableTools.length === 0 ? /* @__PURE__ */ jsx("p", { className: "text-sm text-slate-500 dark:text-slate-400", children: labels.toolsEmpty }) : /* @__PURE__ */ jsx(ListCard, { children: availableTools.map((tool) => /* @__PURE__ */ jsxs(
2675
+ ListCardItem,
2676
+ {
2677
+ leading: /* @__PURE__ */ jsx("div", { className: "flex h-9 w-9 items-center justify-center rounded-lg bg-slate-500/10 text-slate-600 dark:bg-slate-500/20 dark:text-slate-300", children: /* @__PURE__ */ jsx(WrenchScrewdriverIcon, { className: "h-5 w-5" }) }),
2678
+ trailing: /* @__PURE__ */ jsxs(Button, { type: "button", size: "sm", color: "indigo", onClick: () => onAttach(tool.agentToolId), children: [
2679
+ /* @__PURE__ */ jsx(PlusIcon, { className: "h-4 w-4" }),
2680
+ /* @__PURE__ */ jsx("span", { className: "ml-1.5", children: labels.attachTool })
2681
+ ] }),
2682
+ children: [
2683
+ /* @__PURE__ */ jsx("p", { className: "text-sm font-medium text-slate-700 dark:text-slate-200", children: tool.name }),
2684
+ tool.description && /* @__PURE__ */ jsx("p", { className: "mt-0.5 line-clamp-1 text-xs text-slate-500 dark:text-slate-400", children: tool.description })
2685
+ ]
2686
+ },
2687
+ tool.agentToolId
2688
+ )) })
2689
+ }
2690
+ )
2691
+ ] });
2692
+ }
2693
+ function ModelTab({
2694
+ agent,
2695
+ labels,
2696
+ models,
2697
+ connections,
2698
+ onSubmit
2699
+ }) {
2700
+ const initialModelId = String(agent.modelId ?? "");
2701
+ const initialConnectionId = String(agent.connectionId ?? "");
2702
+ const [modelId, setModelId] = useState(initialModelId);
2703
+ const [connectionId, setConnectionId] = useState(initialConnectionId);
2704
+ const [submitting, setSubmitting] = useState(false);
2705
+ const selectedModel = models.find((m) => m.id === modelId) ?? null;
2706
+ const matchingConnections = useMemo(() => {
2707
+ if (!selectedModel) return connections;
2708
+ const slug = selectedModel.provider;
2709
+ if (!slug) return connections;
2710
+ const matches = connections.filter(
2711
+ (c) => (c.providerSlug ?? "") === slug || (c.providerSlug ?? "").startsWith(String(slug))
2712
+ );
2713
+ return matches.length > 0 ? matches : connections;
2714
+ }, [selectedModel, connections]);
2715
+ return /* @__PURE__ */ jsx(
2716
+ SectionCard,
2717
+ {
2718
+ variant: "glass",
2719
+ header: {
2720
+ icon: /* @__PURE__ */ jsx(CubeTransparentIcon, { className: "h-4 w-4" }),
2721
+ title: labels.modelSection
2722
+ },
2723
+ children: /* @__PURE__ */ jsxs(
2724
+ "form",
2725
+ {
2726
+ onSubmit: async (event) => {
2727
+ event.preventDefault();
2728
+ setSubmitting(true);
2729
+ try {
2730
+ await onSubmit(modelId, connectionId);
2731
+ } finally {
2732
+ setSubmitting(false);
2733
+ }
2734
+ },
2735
+ className: "space-y-4",
2736
+ children: [
2737
+ /* @__PURE__ */ jsxs(FormGrid, { children: [
2738
+ /* @__PURE__ */ jsx(
2739
+ FormSelect,
2740
+ {
2741
+ label: labels.model,
2742
+ value: modelId,
2743
+ onValueChange: setModelId,
2744
+ options: models.length > 0 ? models.map((m) => ({ value: m.id, label: `${m.name} (${m.provider})` })) : [{ value: "", label: labels.modelEmpty }]
2745
+ }
2746
+ ),
2747
+ /* @__PURE__ */ jsx(
2748
+ FormSelect,
2749
+ {
2750
+ label: labels.connection,
2751
+ value: connectionId,
2752
+ onValueChange: setConnectionId,
2753
+ options: matchingConnections.length > 0 ? matchingConnections.map((c) => ({
2754
+ value: c.id,
2755
+ label: `${c.name}${c.providerSlug ? " \xB7 " + c.providerSlug : ""}`
2756
+ })) : [{ value: "", label: labels.connectionEmpty }],
2757
+ icon: /* @__PURE__ */ jsx(LinkIcon, { className: "h-4 w-4" })
2758
+ }
2759
+ )
2760
+ ] }),
2761
+ /* @__PURE__ */ jsx("div", { className: "flex justify-end", children: /* @__PURE__ */ jsx(Button, { type: "submit", color: "indigo", disabled: submitting || !modelId, children: submitting ? labels.saving : labels.save }) })
2762
+ ]
2763
+ }
2764
+ )
2765
+ }
2766
+ );
2767
+ }
2768
+ function CreateAgentDialog({
2769
+ labels,
2770
+ models,
2771
+ onClose,
2772
+ onSubmit
2773
+ }) {
2774
+ const modelOptions = models.map((m) => ({ value: m.id, label: `${m.name} (${m.provider})` }));
2775
+ return /* @__PURE__ */ jsx(
2776
+ GlassModal,
2777
+ {
2778
+ open: true,
2779
+ onClose,
2780
+ title: labels.createAgentTitle,
2781
+ maxWidth: "lg",
2782
+ showFormFooter: true,
2783
+ submitLabel: labels.save,
2784
+ onSubmit: async (event) => {
2785
+ const form = new FormData(event.currentTarget);
2786
+ await onSubmit({
2787
+ name: String(form.get("name") ?? "").trim(),
2788
+ modelId: String(form.get("modelId") ?? modelOptions[0]?.value ?? ""),
2789
+ systemPrompt: "",
2790
+ maxTokens: Number(form.get("maxTokens") ?? 2048),
2791
+ temperature: Number(form.get("temperature") ?? 0.2)
2792
+ });
2793
+ },
2794
+ children: /* @__PURE__ */ jsxs(FormGrid, { children: [
2795
+ /* @__PURE__ */ jsx(FormInput, { name: "name", label: labels.name, required: true }),
2796
+ /* @__PURE__ */ jsx(
2797
+ FormSelect,
2798
+ {
2799
+ name: "modelId",
2800
+ label: labels.model,
2801
+ options: modelOptions.length > 0 ? modelOptions : [{ value: "", label: labels.modelEmpty }],
2802
+ defaultValue: modelOptions[0]?.value ?? ""
2803
+ }
2804
+ ),
2805
+ /* @__PURE__ */ jsx(FormInput, { name: "maxTokens", label: labels.maxTokens, type: "number", defaultValue: "2048" }),
2806
+ /* @__PURE__ */ jsx(
2807
+ FormInput,
2808
+ {
2809
+ name: "temperature",
2810
+ label: labels.temperature,
2811
+ type: "number",
2812
+ step: 0.1,
2813
+ min: 0,
2814
+ max: 2,
2815
+ defaultValue: "0.2"
2816
+ }
2817
+ )
2818
+ ] })
2819
+ }
2820
+ );
2821
+ }
2822
+ function deriveInitials(name) {
2823
+ const trimmed = name.trim();
2824
+ if (!trimmed) return "?";
2825
+ const parts = trimmed.split(/\s+/);
2826
+ if (parts.length === 1) return parts[0].slice(0, 2).toUpperCase();
2827
+ return (parts[0][0] + parts[parts.length - 1][0]).toUpperCase();
2828
+ }
2171
2829
 
2172
- export { AgentsConfigPageView, AgentsIndexPageView, AgentsModelsPageView, AgentsPromptsPageView, AgentsToolDefinitionsPageView, ConnectionsPageView, CredentialsPageView, DashboardPageView, DatasourcesPageView, RulesPageView, RunTimelinePageView, TOOL_TYPES, WorkflowRunsPageView, WorkflowsPageView, jsonSchemaToParameters, parametersToJsonSchema };
2830
+ export { AgentsConfigPageView, AgentsIndexPageView, AgentsModelsPageView, AgentsPromptsPageView, AgentsToolDefinitionsPageView, AgentsWorkspacePageView, ConnectionsPageView, CredentialsPageView, DashboardPageView, DatasourcesPageView, RulesPageView, RunTimelinePageView, TOOL_TYPES, WorkflowRunsPageView, WorkflowsPageView, jsonSchemaToParameters, parametersToJsonSchema };
2173
2831
  //# sourceMappingURL=index.mjs.map
2174
2832
  //# sourceMappingURL=index.mjs.map