@datatechsolutions/ui 3.4.0 → 3.5.1

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 (105) hide show
  1. package/dist/astrlabe/index.js +107 -107
  2. package/dist/astrlabe/index.mjs +3 -3
  3. package/dist/astrlabe/workflow-canvas.js +3 -3
  4. package/dist/astrlabe/workflow-canvas.mjs +2 -2
  5. package/dist/{chunk-IDEM3DYF.mjs → chunk-2TBNOQ7M.mjs} +3 -3
  6. package/dist/{chunk-IDEM3DYF.mjs.map → chunk-2TBNOQ7M.mjs.map} +1 -1
  7. package/dist/{chunk-45QAUEYT.js → chunk-2UMDWOUY.js} +4 -4
  8. package/dist/{chunk-45QAUEYT.js.map → chunk-2UMDWOUY.js.map} +1 -1
  9. package/dist/{chunk-NAFWHJCM.mjs → chunk-37ZLBCJF.mjs} +6 -6
  10. package/dist/{chunk-NAFWHJCM.mjs.map → chunk-37ZLBCJF.mjs.map} +1 -1
  11. package/dist/{chunk-MO5FBVV3.js → chunk-5AVO5DJO.js} +62 -62
  12. package/dist/{chunk-MO5FBVV3.js.map → chunk-5AVO5DJO.js.map} +1 -1
  13. package/dist/{chunk-X3GW7UPN.mjs → chunk-7OZ4MVEF.mjs} +4 -4
  14. package/dist/{chunk-X3GW7UPN.mjs.map → chunk-7OZ4MVEF.mjs.map} +1 -1
  15. package/dist/{chunk-SQ4KGLBZ.mjs → chunk-CDYNTHUE.mjs} +41 -7
  16. package/dist/chunk-CDYNTHUE.mjs.map +1 -0
  17. package/dist/{chunk-ZKSDDFHG.mjs → chunk-CJGNEALB.mjs} +4 -4
  18. package/dist/{chunk-ZKSDDFHG.mjs.map → chunk-CJGNEALB.mjs.map} +1 -1
  19. package/dist/{chunk-4GDWGWHY.mjs → chunk-CP5QXRXA.mjs} +4 -4
  20. package/dist/{chunk-4GDWGWHY.mjs.map → chunk-CP5QXRXA.mjs.map} +1 -1
  21. package/dist/{chunk-SEYUYGER.mjs → chunk-EGXB3WXT.mjs} +12 -11
  22. package/dist/chunk-EGXB3WXT.mjs.map +1 -0
  23. package/dist/{chunk-UJVDI66K.js → chunk-EI6FIA45.js} +16 -16
  24. package/dist/{chunk-UJVDI66K.js.map → chunk-EI6FIA45.js.map} +1 -1
  25. package/dist/{chunk-AGGOHPMZ.mjs → chunk-EUXHJMGC.mjs} +138 -108
  26. package/dist/chunk-EUXHJMGC.mjs.map +1 -0
  27. package/dist/{chunk-M7KSEUZR.js → chunk-F5UDX6JA.js} +74 -74
  28. package/dist/{chunk-M7KSEUZR.js.map → chunk-F5UDX6JA.js.map} +1 -1
  29. package/dist/{chunk-6MBWKOPF.js → chunk-HVDDCBQ2.js} +33 -33
  30. package/dist/{chunk-6MBWKOPF.js.map → chunk-HVDDCBQ2.js.map} +1 -1
  31. package/dist/{chunk-FSBR4RCK.js → chunk-K4M4B6ME.js} +138 -108
  32. package/dist/chunk-K4M4B6ME.js.map +1 -0
  33. package/dist/{chunk-4ICEQJH4.js → chunk-KIBOX3UQ.js} +53 -53
  34. package/dist/{chunk-4ICEQJH4.js.map → chunk-KIBOX3UQ.js.map} +1 -1
  35. package/dist/{chunk-NCLZKVJK.js → chunk-KRPSTXN5.js} +9 -9
  36. package/dist/{chunk-NCLZKVJK.js.map → chunk-KRPSTXN5.js.map} +1 -1
  37. package/dist/{chunk-NVQWHJQH.mjs → chunk-L5O4NWQO.mjs} +3 -3
  38. package/dist/{chunk-NVQWHJQH.mjs.map → chunk-L5O4NWQO.mjs.map} +1 -1
  39. package/dist/{chunk-Y2AYFG4E.js → chunk-MT4FJRMD.js} +4 -4
  40. package/dist/{chunk-Y2AYFG4E.js.map → chunk-MT4FJRMD.js.map} +1 -1
  41. package/dist/{chunk-CF7GOUBQ.js → chunk-OWJIKCR2.js} +13 -13
  42. package/dist/{chunk-CF7GOUBQ.js.map → chunk-OWJIKCR2.js.map} +1 -1
  43. package/dist/{chunk-RFRXS4PC.mjs → chunk-PFHXKWFT.mjs} +3 -3
  44. package/dist/{chunk-RFRXS4PC.mjs.map → chunk-PFHXKWFT.mjs.map} +1 -1
  45. package/dist/{chunk-BW67WFHT.mjs → chunk-PI2C3S6A.mjs} +3 -3
  46. package/dist/{chunk-BW67WFHT.mjs.map → chunk-PI2C3S6A.mjs.map} +1 -1
  47. package/dist/{chunk-ERCDMBRT.js → chunk-PYQLY2RH.js} +168 -167
  48. package/dist/chunk-PYQLY2RH.js.map +1 -0
  49. package/dist/{chunk-UE2RDQIK.js → chunk-QIUVK4BI.js} +77 -77
  50. package/dist/{chunk-UE2RDQIK.js.map → chunk-QIUVK4BI.js.map} +1 -1
  51. package/dist/{chunk-RLVOG5OQ.mjs → chunk-R3Q5RXXO.mjs} +3 -3
  52. package/dist/{chunk-RLVOG5OQ.mjs.map → chunk-R3Q5RXXO.mjs.map} +1 -1
  53. package/dist/{chunk-QBFE7ABE.mjs → chunk-R6O57NTJ.mjs} +6 -6
  54. package/dist/{chunk-QBFE7ABE.mjs.map → chunk-R6O57NTJ.mjs.map} +1 -1
  55. package/dist/{chunk-TUQLZ4QD.js → chunk-RQBTLFYH.js} +5 -5
  56. package/dist/{chunk-TUQLZ4QD.js.map → chunk-RQBTLFYH.js.map} +1 -1
  57. package/dist/{chunk-YV7F7IXG.js → chunk-SFFSXC5E.js} +36 -36
  58. package/dist/{chunk-YV7F7IXG.js.map → chunk-SFFSXC5E.js.map} +1 -1
  59. package/dist/{chunk-RLLP7VQJ.js → chunk-U6XA2OYE.js} +63 -29
  60. package/dist/chunk-U6XA2OYE.js.map +1 -0
  61. package/dist/{chunk-CUWPLPVY.mjs → chunk-ULEPJXTN.mjs} +3 -3
  62. package/dist/{chunk-CUWPLPVY.mjs.map → chunk-ULEPJXTN.mjs.map} +1 -1
  63. package/dist/{chunk-PGVZKMOA.js → chunk-VMIAMBCP.js} +39 -39
  64. package/dist/{chunk-PGVZKMOA.js.map → chunk-VMIAMBCP.js.map} +1 -1
  65. package/dist/{chunk-VV6SYMPM.mjs → chunk-WKCR4KVQ.mjs} +3 -3
  66. package/dist/{chunk-VV6SYMPM.mjs.map → chunk-WKCR4KVQ.mjs.map} +1 -1
  67. package/dist/{chunk-AL73YAV4.mjs → chunk-YV2SE5LS.mjs} +3 -3
  68. package/dist/{chunk-AL73YAV4.mjs.map → chunk-YV2SE5LS.mjs.map} +1 -1
  69. package/dist/index.d.mts +63 -16
  70. package/dist/index.d.ts +63 -16
  71. package/dist/index.js +704 -704
  72. package/dist/index.mjs +1 -1
  73. package/dist/platform/admin/index.js +10 -10
  74. package/dist/platform/admin/index.mjs +4 -4
  75. package/dist/platform/agents-workspace.js +6 -6
  76. package/dist/platform/agents-workspace.mjs +5 -5
  77. package/dist/platform/app-shell.js +3 -3
  78. package/dist/platform/app-shell.mjs +2 -2
  79. package/dist/platform/auth/index.js +27 -27
  80. package/dist/platform/auth/index.mjs +4 -4
  81. package/dist/platform/billing/index.js +3 -3
  82. package/dist/platform/billing/index.mjs +2 -2
  83. package/dist/platform/impersonation/index.js +3 -3
  84. package/dist/platform/impersonation/index.mjs +2 -2
  85. package/dist/platform/index.d.mts +1 -1
  86. package/dist/platform/index.d.ts +1 -1
  87. package/dist/platform/index.js +82 -82
  88. package/dist/platform/index.mjs +18 -18
  89. package/dist/platform/pages/index.d.mts +8 -0
  90. package/dist/platform/pages/index.d.ts +8 -0
  91. package/dist/platform/pages/index.js +317 -201
  92. package/dist/platform/pages/index.js.map +1 -1
  93. package/dist/platform/pages/index.mjs +143 -27
  94. package/dist/platform/pages/index.mjs.map +1 -1
  95. package/dist/platform/settings/index.js +7 -7
  96. package/dist/platform/settings/index.mjs +6 -6
  97. package/dist/platform/workflow-canvas-shell.js +4 -4
  98. package/dist/platform/workflow-canvas-shell.mjs +3 -3
  99. package/package.json +1 -1
  100. package/dist/chunk-AGGOHPMZ.mjs.map +0 -1
  101. package/dist/chunk-ERCDMBRT.js.map +0 -1
  102. package/dist/chunk-FSBR4RCK.js.map +0 -1
  103. package/dist/chunk-RLLP7VQJ.js.map +0 -1
  104. package/dist/chunk-SEYUYGER.mjs.map +0 -1
  105. package/dist/chunk-SQ4KGLBZ.mjs.map +0 -1
@@ -2,13 +2,13 @@
2
2
  'use strict';
3
3
 
4
4
  var chunk3T2WGL47_js = require('../../chunk-3T2WGL47.js');
5
- var chunkRLLP7VQJ_js = require('../../chunk-RLLP7VQJ.js');
6
- var chunkYV7F7IXG_js = require('../../chunk-YV7F7IXG.js');
7
- var chunkERCDMBRT_js = require('../../chunk-ERCDMBRT.js');
5
+ var chunkU6XA2OYE_js = require('../../chunk-U6XA2OYE.js');
6
+ var chunkSFFSXC5E_js = require('../../chunk-SFFSXC5E.js');
7
+ var chunkPYQLY2RH_js = require('../../chunk-PYQLY2RH.js');
8
8
  require('../../chunk-55H6WZQP.js');
9
9
  require('../../chunk-DJDZIRM6.js');
10
- require('../../chunk-M7KSEUZR.js');
11
- var chunkFSBR4RCK_js = require('../../chunk-FSBR4RCK.js');
10
+ require('../../chunk-F5UDX6JA.js');
11
+ var chunkK4M4B6ME_js = require('../../chunk-K4M4B6ME.js');
12
12
  require('../../chunk-UZ3CMNUJ.js');
13
13
  require('../../chunk-YXN2K77G.js');
14
14
  var chunkS7KHTUHA_js = require('../../chunk-S7KHTUHA.js');
@@ -16,13 +16,17 @@ require('../../chunk-SY4MUT5V.js');
16
16
  require('../../chunk-2OZZH2IO.js');
17
17
  require('../../chunk-P4YYEM4B.js');
18
18
  require('../../chunk-72SWXOD5.js');
19
+ var react = require('react');
19
20
  var outline = require('@heroicons/react/24/outline');
20
21
  var jsxRuntime = require('react/jsx-runtime');
21
- var react = require('react');
22
22
 
23
23
  function AgentsModelsPageView({ labels, models, loading }) {
24
+ const [searchTerm, setSearchTerm] = react.useState("");
25
+ const allModels = models;
26
+ const filteredModels = searchTerm.trim() ? allModels.filter((model) => model.name.toLowerCase().includes(searchTerm.trim().toLowerCase())) : allModels;
27
+ const isEmpty = allModels.length === 0;
24
28
  const hero = /* @__PURE__ */ jsxRuntime.jsx(
25
- chunkFSBR4RCK_js.HeroSection,
29
+ chunkK4M4B6ME_js.HeroSection,
26
30
  {
27
31
  icon: /* @__PURE__ */ jsxRuntime.jsx(outline.CubeTransparentIcon, { className: "h-5 w-5" }),
28
32
  label: labels.title,
@@ -31,25 +35,33 @@ function AgentsModelsPageView({ labels, models, loading }) {
31
35
  gradient: "from-emerald-500 to-teal-700"
32
36
  }
33
37
  );
34
- const content = loading ? /* @__PURE__ */ jsxRuntime.jsx(chunkFSBR4RCK_js.PageLoadingState, {}) : models.length === 0 ? /* @__PURE__ */ jsxRuntime.jsx(chunkFSBR4RCK_js.PageEmptyState, { title: labels.empty, message: labels.subtitle, iconName: "folder-open" }) : /* @__PURE__ */ jsxRuntime.jsx("div", { className: "grid grid-cols-1 gap-4 sm:grid-cols-2 lg:grid-cols-3", children: models.map((model) => /* @__PURE__ */ jsxRuntime.jsx(
35
- chunkFSBR4RCK_js.EntityCard,
38
+ const summary = !isEmpty ? /* @__PURE__ */ jsxRuntime.jsx(
39
+ chunkK4M4B6ME_js.SearchBar,
40
+ {
41
+ searchTerm,
42
+ onSearchChange: setSearchTerm,
43
+ placeholder: labels.searchPlaceholder ?? labels.title
44
+ }
45
+ ) : void 0;
46
+ const content = loading ? /* @__PURE__ */ jsxRuntime.jsx(chunkK4M4B6ME_js.PageLoadingState, {}) : isEmpty ? /* @__PURE__ */ jsxRuntime.jsx(chunkK4M4B6ME_js.PageEmptyState, { title: labels.empty, message: labels.subtitle, iconName: "folder-open" }) : /* @__PURE__ */ jsxRuntime.jsx("div", { className: "grid grid-cols-1 gap-4 sm:grid-cols-2 lg:grid-cols-3", children: filteredModels.map((model) => /* @__PURE__ */ jsxRuntime.jsx(
47
+ chunkK4M4B6ME_js.EntityCard,
36
48
  {
37
49
  accentGradient: "from-emerald-500 to-teal-700",
38
50
  icon: /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex h-11 w-11 items-center justify-center rounded-lg bg-emerald-500/10 text-emerald-600 dark:bg-emerald-500/20 dark:text-emerald-400", children: /* @__PURE__ */ jsxRuntime.jsx(outline.CubeTransparentIcon, { className: "h-6 w-6" }) }),
39
51
  title: model.name,
40
52
  subtitle: `${labels.provider}: ${model.provider}`,
41
- status: /* @__PURE__ */ jsxRuntime.jsx(chunkFSBR4RCK_js.Badge, { color: model.enabled ? "emerald" : "zinc", children: model.enabled ? labels.enabled : labels.disabled })
53
+ status: /* @__PURE__ */ jsxRuntime.jsx(chunkK4M4B6ME_js.Badge, { color: model.enabled ? "emerald" : "zinc", children: model.enabled ? labels.enabled : labels.disabled })
42
54
  },
43
55
  model.id
44
56
  )) });
45
- return /* @__PURE__ */ jsxRuntime.jsx(chunkFSBR4RCK_js.ManagementPageLayout, { hero, content });
57
+ return /* @__PURE__ */ jsxRuntime.jsx(chunkK4M4B6ME_js.ManagementPageLayout, { hero, summary, content });
46
58
  }
47
59
  function AgentsConfigPageView({ labels, agents, models, loading, onCreate, onUpdate, onDelete }) {
48
60
  const [editing, setEditing] = react.useState(null);
49
61
  const [createOpen, setCreateOpen] = react.useState(false);
50
62
  const modelOptions = models.map((model) => ({ value: model.id, label: `${model.name} (${model.provider})` }));
51
63
  const hero = /* @__PURE__ */ jsxRuntime.jsx(
52
- chunkFSBR4RCK_js.HeroSection,
64
+ chunkK4M4B6ME_js.HeroSection,
53
65
  {
54
66
  icon: /* @__PURE__ */ jsxRuntime.jsx(outline.CpuChipIcon, { className: "h-5 w-5" }),
55
67
  label: labels.title,
@@ -57,7 +69,7 @@ function AgentsConfigPageView({ labels, agents, models, loading, onCreate, onUpd
57
69
  subtitle: labels.subtitle,
58
70
  gradient: "from-violet-500 to-indigo-700",
59
71
  toolbar: /* @__PURE__ */ jsxRuntime.jsx(
60
- chunkFSBR4RCK_js.CreateActionButton,
72
+ chunkK4M4B6ME_js.CreateActionButton,
61
73
  {
62
74
  mode: "desktop",
63
75
  label: labels.addAgent,
@@ -68,7 +80,7 @@ function AgentsConfigPageView({ labels, agents, models, loading, onCreate, onUpd
68
80
  }
69
81
  );
70
82
  const mobileAction = /* @__PURE__ */ jsxRuntime.jsx(
71
- chunkFSBR4RCK_js.CreateActionButton,
83
+ chunkK4M4B6ME_js.CreateActionButton,
72
84
  {
73
85
  mode: "mobile",
74
86
  label: labels.addAgent,
@@ -76,23 +88,23 @@ function AgentsConfigPageView({ labels, agents, models, loading, onCreate, onUpd
76
88
  accent: "violet"
77
89
  }
78
90
  );
79
- const content = loading ? /* @__PURE__ */ jsxRuntime.jsx(chunkFSBR4RCK_js.PageLoadingState, {}) : agents.length === 0 ? /* @__PURE__ */ jsxRuntime.jsx(chunkFSBR4RCK_js.PageEmptyState, { title: labels.empty, message: labels.subtitle, iconName: "folder-open" }) : /* @__PURE__ */ jsxRuntime.jsx("div", { className: "grid grid-cols-1 gap-4 sm:grid-cols-2 lg:grid-cols-3", children: agents.map((agent) => {
91
+ const content = loading ? /* @__PURE__ */ jsxRuntime.jsx(chunkK4M4B6ME_js.PageLoadingState, {}) : agents.length === 0 ? /* @__PURE__ */ jsxRuntime.jsx(chunkK4M4B6ME_js.PageEmptyState, { title: labels.empty, message: labels.subtitle, iconName: "folder-open" }) : /* @__PURE__ */ jsxRuntime.jsx("div", { className: "grid grid-cols-1 gap-4 sm:grid-cols-2 lg:grid-cols-3", children: agents.map((agent) => {
80
92
  const modelRecord = models.find((model) => model.id === String(agent.modelId ?? ""));
81
93
  return /* @__PURE__ */ jsxRuntime.jsx(
82
- chunkFSBR4RCK_js.EntityCard,
94
+ chunkK4M4B6ME_js.EntityCard,
83
95
  {
84
96
  accentGradient: "from-violet-500 to-indigo-700",
85
97
  icon: /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex h-11 w-11 items-center justify-center rounded-lg bg-violet-500/10 text-violet-600 dark:bg-violet-500/20 dark:text-violet-400", children: /* @__PURE__ */ jsxRuntime.jsx(outline.CpuChipIcon, { className: "h-6 w-6" }) }),
86
98
  title: String(agent.name ?? ""),
87
99
  subtitle: String(modelRecord?.name ?? agent.modelId ?? ""),
88
- status: agent.activePromptVersion > 0 ? /* @__PURE__ */ jsxRuntime.jsxs(chunkFSBR4RCK_js.Badge, { color: "emerald", children: [
100
+ status: agent.activePromptVersion > 0 ? /* @__PURE__ */ jsxRuntime.jsxs(chunkK4M4B6ME_js.Badge, { color: "emerald", children: [
89
101
  "v",
90
102
  agent.activePromptVersion
91
103
  ] }) : null,
92
104
  footer: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex gap-2", children: [
93
- /* @__PURE__ */ jsxRuntime.jsx(chunkFSBR4RCK_js.Button, { type: "button", size: "sm", outline: true, onClick: () => setEditing(agent), children: labels.edit }),
105
+ /* @__PURE__ */ jsxRuntime.jsx(chunkK4M4B6ME_js.Button, { type: "button", size: "sm", outline: true, onClick: () => setEditing(agent), children: labels.edit }),
94
106
  /* @__PURE__ */ jsxRuntime.jsx(
95
- chunkFSBR4RCK_js.Button,
107
+ chunkK4M4B6ME_js.Button,
96
108
  {
97
109
  type: "button",
98
110
  size: "sm",
@@ -116,7 +128,7 @@ function AgentsConfigPageView({ labels, agents, models, loading, onCreate, onUpd
116
128
  );
117
129
  }) });
118
130
  const renderForm = (initial, onSubmit) => /* @__PURE__ */ jsxRuntime.jsx(
119
- chunkFSBR4RCK_js.GlassModal,
131
+ chunkK4M4B6ME_js.GlassModal,
120
132
  {
121
133
  open: true,
122
134
  onClose: () => {
@@ -139,18 +151,18 @@ function AgentsConfigPageView({ labels, agents, models, loading, onCreate, onUpd
139
151
  outputSchema: String(form.get("outputSchema") ?? "").trim() || void 0
140
152
  });
141
153
  },
142
- children: /* @__PURE__ */ jsxRuntime.jsxs(chunkFSBR4RCK_js.FormGrid, { children: [
143
- /* @__PURE__ */ jsxRuntime.jsx(chunkFSBR4RCK_js.FormInput, { name: "name", label: labels.name, defaultValue: initial.name ?? "", required: true }),
144
- /* @__PURE__ */ jsxRuntime.jsx(chunkFSBR4RCK_js.FormSelect, { name: "modelId", label: labels.model, options: modelOptions, defaultValue: initial.modelId ?? modelOptions[0]?.value ?? "", required: true }),
145
- /* @__PURE__ */ jsxRuntime.jsx(chunkFSBR4RCK_js.FormInput, { name: "maxTokens", label: String(labels.maxTokens), type: "number", defaultValue: String(initial.maxTokens ?? 2048) }),
146
- /* @__PURE__ */ jsxRuntime.jsx(chunkFSBR4RCK_js.FormInput, { name: "temperature", label: labels.temperature, type: "number", step: 0.1, min: 0, max: 2, defaultValue: String(initial.temperature ?? 0.2) }),
147
- /* @__PURE__ */ jsxRuntime.jsx(chunkFSBR4RCK_js.FormTextarea, { name: "systemPrompt", label: labels.systemPrompt, defaultValue: initial.systemPrompt ?? "", rows: 4 }),
148
- /* @__PURE__ */ jsxRuntime.jsx(chunkFSBR4RCK_js.FormTextarea, { name: "outputSchema", label: labels.outputSchema, placeholder: labels.outputSchemaPlaceholder, defaultValue: initial.outputSchema ?? "", rows: 4 })
154
+ children: /* @__PURE__ */ jsxRuntime.jsxs(chunkK4M4B6ME_js.FormGrid, { children: [
155
+ /* @__PURE__ */ jsxRuntime.jsx(chunkK4M4B6ME_js.FormInput, { name: "name", label: labels.name, defaultValue: initial.name ?? "", required: true }),
156
+ /* @__PURE__ */ jsxRuntime.jsx(chunkK4M4B6ME_js.FormSelect, { name: "modelId", label: labels.model, options: modelOptions, defaultValue: initial.modelId ?? modelOptions[0]?.value ?? "", required: true }),
157
+ /* @__PURE__ */ jsxRuntime.jsx(chunkK4M4B6ME_js.FormInput, { name: "maxTokens", label: String(labels.maxTokens), type: "number", defaultValue: String(initial.maxTokens ?? 2048) }),
158
+ /* @__PURE__ */ jsxRuntime.jsx(chunkK4M4B6ME_js.FormInput, { name: "temperature", label: labels.temperature, type: "number", step: 0.1, min: 0, max: 2, defaultValue: String(initial.temperature ?? 0.2) }),
159
+ /* @__PURE__ */ jsxRuntime.jsx(chunkK4M4B6ME_js.FormTextarea, { name: "systemPrompt", label: labels.systemPrompt, defaultValue: initial.systemPrompt ?? "", rows: 4 }),
160
+ /* @__PURE__ */ jsxRuntime.jsx(chunkK4M4B6ME_js.FormTextarea, { name: "outputSchema", label: labels.outputSchema, placeholder: labels.outputSchemaPlaceholder, defaultValue: initial.outputSchema ?? "", rows: 4 })
149
161
  ] })
150
162
  }
151
163
  );
152
164
  return /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
153
- /* @__PURE__ */ jsxRuntime.jsx(chunkFSBR4RCK_js.ManagementPageLayout, { hero, content, mobileAction }),
165
+ /* @__PURE__ */ jsxRuntime.jsx(chunkK4M4B6ME_js.ManagementPageLayout, { hero, content, mobileAction }),
154
166
  createOpen && renderForm({ title: labels.createTitle }, (input) => {
155
167
  onCreate(input);
156
168
  setCreateOpen(false);
@@ -183,6 +195,7 @@ var LOCALE_OPTIONS = [
183
195
  ];
184
196
  function AgentsPromptsPageView({ labels, agents, prompts, loading, onCreate, onActivate, onDelete }) {
185
197
  const [createOpen, setCreateOpen] = react.useState(false);
198
+ const [searchTerm, setSearchTerm] = react.useState("");
186
199
  const agentOptions = react.useMemo(
187
200
  () => agents.map((agent) => ({
188
201
  value: String(agent.agentId ?? agent.id ?? ""),
@@ -199,7 +212,7 @@ function AgentsPromptsPageView({ labels, agents, prompts, loading, onCreate, onA
199
212
  return map;
200
213
  }, [agents]);
201
214
  const hero = /* @__PURE__ */ jsxRuntime.jsx(
202
- chunkFSBR4RCK_js.HeroSection,
215
+ chunkK4M4B6ME_js.HeroSection,
203
216
  {
204
217
  icon: /* @__PURE__ */ jsxRuntime.jsx(outline.ChatBubbleLeftEllipsisIcon, { className: "h-5 w-5" }),
205
218
  label: labels.title,
@@ -207,7 +220,7 @@ function AgentsPromptsPageView({ labels, agents, prompts, loading, onCreate, onA
207
220
  subtitle: labels.subtitle,
208
221
  gradient: "from-sky-500 to-blue-700",
209
222
  toolbar: /* @__PURE__ */ jsxRuntime.jsx(
210
- chunkFSBR4RCK_js.CreateActionButton,
223
+ chunkK4M4B6ME_js.CreateActionButton,
211
224
  {
212
225
  mode: "desktop",
213
226
  label: labels.addPrompt,
@@ -218,7 +231,7 @@ function AgentsPromptsPageView({ labels, agents, prompts, loading, onCreate, onA
218
231
  }
219
232
  );
220
233
  const mobileAction = /* @__PURE__ */ jsxRuntime.jsx(
221
- chunkFSBR4RCK_js.CreateActionButton,
234
+ chunkK4M4B6ME_js.CreateActionButton,
222
235
  {
223
236
  mode: "mobile",
224
237
  label: labels.addPrompt,
@@ -226,21 +239,37 @@ function AgentsPromptsPageView({ labels, agents, prompts, loading, onCreate, onA
226
239
  accent: "sky"
227
240
  }
228
241
  );
229
- const content = loading ? /* @__PURE__ */ jsxRuntime.jsx(chunkFSBR4RCK_js.PageLoadingState, {}) : prompts.length === 0 ? /* @__PURE__ */ jsxRuntime.jsx(chunkFSBR4RCK_js.PageEmptyState, { title: labels.empty, message: labels.subtitle, iconName: "folder-open" }) : /* @__PURE__ */ jsxRuntime.jsx("div", { className: "grid grid-cols-1 gap-4 sm:grid-cols-2 lg:grid-cols-3", children: prompts.map((prompt) => {
242
+ const allPrompts = prompts;
243
+ const filteredPrompts = searchTerm.trim() ? allPrompts.filter((prompt) => {
244
+ const term = searchTerm.trim().toLowerCase();
245
+ const agentName = agentNameById.get(prompt.agentId) ?? prompt.agentId;
246
+ const promptText = prompt.prompt ?? "";
247
+ return agentName.toLowerCase().includes(term) || promptText.toLowerCase().includes(term);
248
+ }) : allPrompts;
249
+ const isEmpty = allPrompts.length === 0;
250
+ const summary = !isEmpty ? /* @__PURE__ */ jsxRuntime.jsx(
251
+ chunkK4M4B6ME_js.SearchBar,
252
+ {
253
+ searchTerm,
254
+ onSearchChange: setSearchTerm,
255
+ placeholder: labels.searchPlaceholder ?? labels.title
256
+ }
257
+ ) : void 0;
258
+ const content = loading ? /* @__PURE__ */ jsxRuntime.jsx(chunkK4M4B6ME_js.PageLoadingState, {}) : isEmpty ? /* @__PURE__ */ jsxRuntime.jsx(chunkK4M4B6ME_js.PageEmptyState, { title: labels.empty, message: labels.subtitle, iconName: "folder-open" }) : /* @__PURE__ */ jsxRuntime.jsx("div", { className: "grid grid-cols-1 gap-4 sm:grid-cols-2 lg:grid-cols-3", children: filteredPrompts.map((prompt) => {
230
259
  const agentName = agentNameById.get(prompt.agentId) ?? prompt.agentId;
231
260
  const key = `${prompt.agentId}:${prompt.locale}:${prompt.version}`;
232
261
  return /* @__PURE__ */ jsxRuntime.jsx(
233
- chunkFSBR4RCK_js.EntityCard,
262
+ chunkK4M4B6ME_js.EntityCard,
234
263
  {
235
264
  accentGradient: "from-sky-500 to-blue-700",
236
265
  icon: /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex h-11 w-11 items-center justify-center rounded-lg bg-sky-500/10 text-sky-600 dark:bg-sky-500/20 dark:text-sky-400", children: /* @__PURE__ */ jsxRuntime.jsx(outline.ChatBubbleLeftEllipsisIcon, { className: "h-6 w-6" }) }),
237
266
  title: agentName,
238
267
  subtitle: `${prompt.locale} \xB7 v${prompt.version}`,
239
- status: prompt.isActive ? /* @__PURE__ */ jsxRuntime.jsx(chunkFSBR4RCK_js.Badge, { color: "emerald", children: labels.isActive }) : null,
268
+ status: prompt.isActive ? /* @__PURE__ */ jsxRuntime.jsx(chunkK4M4B6ME_js.Badge, { color: "emerald", children: labels.isActive }) : null,
240
269
  footer: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex gap-2", children: [
241
- !prompt.isActive && /* @__PURE__ */ jsxRuntime.jsx(chunkFSBR4RCK_js.Button, { type: "button", size: "sm", outline: true, onClick: () => onActivate(prompt), children: labels.activate }),
270
+ !prompt.isActive && /* @__PURE__ */ jsxRuntime.jsx(chunkK4M4B6ME_js.Button, { type: "button", size: "sm", outline: true, onClick: () => onActivate(prompt), children: labels.activate }),
242
271
  /* @__PURE__ */ jsxRuntime.jsx(
243
- chunkFSBR4RCK_js.Button,
272
+ chunkK4M4B6ME_js.Button,
244
273
  {
245
274
  type: "button",
246
275
  size: "sm",
@@ -258,9 +287,9 @@ function AgentsPromptsPageView({ labels, agents, prompts, loading, onCreate, onA
258
287
  );
259
288
  }) });
260
289
  return /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
261
- /* @__PURE__ */ jsxRuntime.jsx(chunkFSBR4RCK_js.ManagementPageLayout, { hero, content, mobileAction }),
290
+ /* @__PURE__ */ jsxRuntime.jsx(chunkK4M4B6ME_js.ManagementPageLayout, { hero, summary, content, mobileAction }),
262
291
  /* @__PURE__ */ jsxRuntime.jsx(
263
- chunkFSBR4RCK_js.GlassModal,
292
+ chunkK4M4B6ME_js.GlassModal,
264
293
  {
265
294
  open: createOpen,
266
295
  onClose: () => setCreateOpen(false),
@@ -284,11 +313,11 @@ function AgentsPromptsPageView({ labels, agents, prompts, loading, onCreate, onA
284
313
  });
285
314
  setCreateOpen(false);
286
315
  },
287
- children: /* @__PURE__ */ jsxRuntime.jsxs(chunkFSBR4RCK_js.FormGrid, { children: [
288
- /* @__PURE__ */ jsxRuntime.jsx(chunkFSBR4RCK_js.FormSelect, { name: "agentId", label: labels.agent, options: agentOptions, required: true }),
289
- /* @__PURE__ */ jsxRuntime.jsx(chunkFSBR4RCK_js.FormSelect, { name: "locale", label: labels.locale, options: LOCALE_OPTIONS, defaultValue: "en" }),
316
+ children: /* @__PURE__ */ jsxRuntime.jsxs(chunkK4M4B6ME_js.FormGrid, { children: [
317
+ /* @__PURE__ */ jsxRuntime.jsx(chunkK4M4B6ME_js.FormSelect, { name: "agentId", label: labels.agent, options: agentOptions, required: true }),
318
+ /* @__PURE__ */ jsxRuntime.jsx(chunkK4M4B6ME_js.FormSelect, { name: "locale", label: labels.locale, options: LOCALE_OPTIONS, defaultValue: "en" }),
290
319
  /* @__PURE__ */ jsxRuntime.jsx(
291
- chunkFSBR4RCK_js.FormSelect,
320
+ chunkK4M4B6ME_js.FormSelect,
292
321
  {
293
322
  name: "isActive",
294
323
  label: labels.isActive,
@@ -296,10 +325,10 @@ function AgentsPromptsPageView({ labels, agents, prompts, loading, onCreate, onA
296
325
  defaultValue: "true"
297
326
  }
298
327
  ),
299
- /* @__PURE__ */ jsxRuntime.jsx(chunkFSBR4RCK_js.FormInput, { name: "reason", label: labels.reason }),
300
- /* @__PURE__ */ jsxRuntime.jsx(chunkFSBR4RCK_js.FormTextarea, { name: "systemPrompt", label: labels.systemPrompt, rows: 3 }),
301
- /* @__PURE__ */ jsxRuntime.jsx(chunkFSBR4RCK_js.FormTextarea, { name: "userTemplate", label: labels.userTemplate, rows: 3 }),
302
- /* @__PURE__ */ jsxRuntime.jsx(chunkFSBR4RCK_js.FormTextarea, { name: "prompt", label: labels.prompt, rows: 6, required: true })
328
+ /* @__PURE__ */ jsxRuntime.jsx(chunkK4M4B6ME_js.FormInput, { name: "reason", label: labels.reason }),
329
+ /* @__PURE__ */ jsxRuntime.jsx(chunkK4M4B6ME_js.FormTextarea, { name: "systemPrompt", label: labels.systemPrompt, rows: 3 }),
330
+ /* @__PURE__ */ jsxRuntime.jsx(chunkK4M4B6ME_js.FormTextarea, { name: "userTemplate", label: labels.userTemplate, rows: 3 }),
331
+ /* @__PURE__ */ jsxRuntime.jsx(chunkK4M4B6ME_js.FormTextarea, { name: "prompt", label: labels.prompt, rows: 6, required: true })
303
332
  ] })
304
333
  }
305
334
  )
@@ -329,8 +358,20 @@ var PARAMETER_TYPE_OPTIONS = [
329
358
  function AgentsToolDefinitionsPageView({ labels, tools, loading, onCreate, onUpdate, onDelete }) {
330
359
  const [editing, setEditing] = react.useState(null);
331
360
  const [createOpen, setCreateOpen] = react.useState(false);
361
+ const [searchTerm, setSearchTerm] = react.useState("");
362
+ const allTools = tools;
363
+ const filteredTools = searchTerm.trim() ? allTools.filter((tool) => tool.name.toLowerCase().includes(searchTerm.trim().toLowerCase())) : allTools;
364
+ const isEmpty = allTools.length === 0;
365
+ const summary = !isEmpty ? /* @__PURE__ */ jsxRuntime.jsx(
366
+ chunkK4M4B6ME_js.SearchBar,
367
+ {
368
+ searchTerm,
369
+ onSearchChange: setSearchTerm,
370
+ placeholder: labels.searchPlaceholder ?? labels.title
371
+ }
372
+ ) : void 0;
332
373
  const hero = /* @__PURE__ */ jsxRuntime.jsx(
333
- chunkFSBR4RCK_js.HeroSection,
374
+ chunkK4M4B6ME_js.HeroSection,
334
375
  {
335
376
  icon: /* @__PURE__ */ jsxRuntime.jsx(outline.WrenchScrewdriverIcon, { className: "h-5 w-5" }),
336
377
  label: labels.title,
@@ -338,7 +379,7 @@ function AgentsToolDefinitionsPageView({ labels, tools, loading, onCreate, onUpd
338
379
  subtitle: labels.subtitle,
339
380
  gradient: "from-amber-500 to-orange-700",
340
381
  toolbar: /* @__PURE__ */ jsxRuntime.jsx(
341
- chunkFSBR4RCK_js.CreateActionButton,
382
+ chunkK4M4B6ME_js.CreateActionButton,
342
383
  {
343
384
  mode: "desktop",
344
385
  label: labels.addTool,
@@ -349,7 +390,7 @@ function AgentsToolDefinitionsPageView({ labels, tools, loading, onCreate, onUpd
349
390
  }
350
391
  );
351
392
  const mobileAction = /* @__PURE__ */ jsxRuntime.jsx(
352
- chunkFSBR4RCK_js.CreateActionButton,
393
+ chunkK4M4B6ME_js.CreateActionButton,
353
394
  {
354
395
  mode: "mobile",
355
396
  label: labels.addTool,
@@ -357,18 +398,18 @@ function AgentsToolDefinitionsPageView({ labels, tools, loading, onCreate, onUpd
357
398
  accent: "amber"
358
399
  }
359
400
  );
360
- const content = loading ? /* @__PURE__ */ jsxRuntime.jsx(chunkFSBR4RCK_js.PageLoadingState, {}) : tools.length === 0 ? /* @__PURE__ */ jsxRuntime.jsx(chunkFSBR4RCK_js.PageEmptyState, { title: labels.empty, message: labels.subtitle, iconName: "folder-open" }) : /* @__PURE__ */ jsxRuntime.jsx("div", { className: "grid grid-cols-1 gap-4 sm:grid-cols-2 lg:grid-cols-3", children: tools.map((tool) => /* @__PURE__ */ jsxRuntime.jsx(
361
- chunkFSBR4RCK_js.EntityCard,
401
+ const content = loading ? /* @__PURE__ */ jsxRuntime.jsx(chunkK4M4B6ME_js.PageLoadingState, {}) : isEmpty ? /* @__PURE__ */ jsxRuntime.jsx(chunkK4M4B6ME_js.PageEmptyState, { title: labels.empty, message: labels.subtitle, iconName: "folder-open" }) : /* @__PURE__ */ jsxRuntime.jsx("div", { className: "grid grid-cols-1 gap-4 sm:grid-cols-2 lg:grid-cols-3", children: filteredTools.map((tool) => /* @__PURE__ */ jsxRuntime.jsx(
402
+ chunkK4M4B6ME_js.EntityCard,
362
403
  {
363
404
  accentGradient: "from-amber-500 to-orange-700",
364
405
  icon: /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex h-11 w-11 items-center justify-center rounded-lg bg-amber-500/10 text-amber-600 dark:bg-amber-500/20 dark:text-amber-400", children: /* @__PURE__ */ jsxRuntime.jsx(outline.WrenchScrewdriverIcon, { className: "h-6 w-6" }) }),
365
406
  title: tool.name,
366
407
  subtitle: toolTypeLabel(tool),
367
- status: /* @__PURE__ */ jsxRuntime.jsx(chunkFSBR4RCK_js.Badge, { color: tool.enabled ? "emerald" : "zinc", children: tool.enabled ? labels.enabled : labels.disabled }),
408
+ status: /* @__PURE__ */ jsxRuntime.jsx(chunkK4M4B6ME_js.Badge, { color: tool.enabled ? "emerald" : "zinc", children: tool.enabled ? labels.enabled : labels.disabled }),
368
409
  footer: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex gap-2", children: [
369
- /* @__PURE__ */ jsxRuntime.jsx(chunkFSBR4RCK_js.Button, { type: "button", size: "sm", outline: true, onClick: () => setEditing(tool), children: labels.edit }),
410
+ /* @__PURE__ */ jsxRuntime.jsx(chunkK4M4B6ME_js.Button, { type: "button", size: "sm", outline: true, onClick: () => setEditing(tool), children: labels.edit }),
370
411
  /* @__PURE__ */ jsxRuntime.jsx(
371
- chunkFSBR4RCK_js.Button,
412
+ chunkK4M4B6ME_js.Button,
372
413
  {
373
414
  type: "button",
374
415
  size: "sm",
@@ -385,7 +426,7 @@ function AgentsToolDefinitionsPageView({ labels, tools, loading, onCreate, onUpd
385
426
  tool.agentToolId
386
427
  )) });
387
428
  return /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
388
- /* @__PURE__ */ jsxRuntime.jsx(chunkFSBR4RCK_js.ManagementPageLayout, { hero, content, mobileAction }),
429
+ /* @__PURE__ */ jsxRuntime.jsx(chunkK4M4B6ME_js.ManagementPageLayout, { hero, summary, content, mobileAction }),
389
430
  createOpen && /* @__PURE__ */ jsxRuntime.jsx(
390
431
  ToolEditor,
391
432
  {
@@ -443,7 +484,7 @@ function ToolEditor({
443
484
  setValue((v) => ({ ...v, [key]: next }));
444
485
  };
445
486
  return /* @__PURE__ */ jsxRuntime.jsx(
446
- chunkFSBR4RCK_js.GlassModal,
487
+ chunkK4M4B6ME_js.GlassModal,
447
488
  {
448
489
  open: true,
449
490
  onClose,
@@ -456,9 +497,9 @@ function ToolEditor({
456
497
  handleSubmit();
457
498
  },
458
499
  children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "space-y-5", children: [
459
- /* @__PURE__ */ jsxRuntime.jsxs(chunkFSBR4RCK_js.FormGrid, { children: [
500
+ /* @__PURE__ */ jsxRuntime.jsxs(chunkK4M4B6ME_js.FormGrid, { children: [
460
501
  /* @__PURE__ */ jsxRuntime.jsx(
461
- chunkFSBR4RCK_js.FormInput,
502
+ chunkK4M4B6ME_js.FormInput,
462
503
  {
463
504
  label: "Name",
464
505
  required: true,
@@ -468,7 +509,7 @@ function ToolEditor({
468
509
  }
469
510
  ),
470
511
  /* @__PURE__ */ jsxRuntime.jsx(
471
- chunkFSBR4RCK_js.FormSelect,
512
+ chunkK4M4B6ME_js.FormSelect,
472
513
  {
473
514
  label: "Tool type",
474
515
  value: value.toolType,
@@ -478,7 +519,7 @@ function ToolEditor({
478
519
  }
479
520
  ),
480
521
  /* @__PURE__ */ jsxRuntime.jsx(
481
- chunkFSBR4RCK_js.FormSelect,
522
+ chunkK4M4B6ME_js.FormSelect,
482
523
  {
483
524
  label: "Enabled",
484
525
  value: value.enabled ? "true" : "false",
@@ -487,7 +528,7 @@ function ToolEditor({
487
528
  }
488
529
  ),
489
530
  /* @__PURE__ */ jsxRuntime.jsx(
490
- chunkFSBR4RCK_js.FormInput,
531
+ chunkK4M4B6ME_js.FormInput,
491
532
  {
492
533
  label: "Icon (optional)",
493
534
  value: value.icon ?? "",
@@ -497,7 +538,7 @@ function ToolEditor({
497
538
  )
498
539
  ] }),
499
540
  /* @__PURE__ */ jsxRuntime.jsx(
500
- chunkFSBR4RCK_js.FormTextarea,
541
+ chunkK4M4B6ME_js.FormTextarea,
501
542
  {
502
543
  label: "Description",
503
544
  rows: 2,
@@ -545,7 +586,7 @@ function ParametersEditor({
545
586
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "space-y-2", children: [
546
587
  parameters.map((param, index) => /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "grid grid-cols-[1fr_160px_1fr_110px_auto] items-end gap-2", children: [
547
588
  /* @__PURE__ */ jsxRuntime.jsx(
548
- chunkFSBR4RCK_js.FormInput,
589
+ chunkK4M4B6ME_js.FormInput,
549
590
  {
550
591
  label: "Name",
551
592
  value: param.name,
@@ -554,7 +595,7 @@ function ParametersEditor({
554
595
  }
555
596
  ),
556
597
  /* @__PURE__ */ jsxRuntime.jsx(
557
- chunkFSBR4RCK_js.FormSelect,
598
+ chunkK4M4B6ME_js.FormSelect,
558
599
  {
559
600
  label: "Type",
560
601
  value: param.type,
@@ -563,7 +604,7 @@ function ParametersEditor({
563
604
  }
564
605
  ),
565
606
  /* @__PURE__ */ jsxRuntime.jsx(
566
- chunkFSBR4RCK_js.FormInput,
607
+ chunkK4M4B6ME_js.FormInput,
567
608
  {
568
609
  label: "Description",
569
610
  value: param.description,
@@ -582,9 +623,9 @@ function ParametersEditor({
582
623
  ),
583
624
  "Required"
584
625
  ] }),
585
- /* @__PURE__ */ jsxRuntime.jsx(chunkFSBR4RCK_js.Button, { type: "button", plain: true, onClick: () => remove(index), children: "Remove" })
626
+ /* @__PURE__ */ jsxRuntime.jsx(chunkK4M4B6ME_js.Button, { type: "button", plain: true, onClick: () => remove(index), children: "Remove" })
586
627
  ] }, index)),
587
- /* @__PURE__ */ jsxRuntime.jsx(chunkFSBR4RCK_js.Button, { type: "button", outline: true, onClick: add, children: "+ Add parameter" })
628
+ /* @__PURE__ */ jsxRuntime.jsx(chunkK4M4B6ME_js.Button, { type: "button", outline: true, onClick: add, children: "+ Add parameter" })
588
629
  ] })
589
630
  ] });
590
631
  }
@@ -597,9 +638,9 @@ function HandlerConfigEditor({
597
638
  if (toolType === "http") {
598
639
  return /* @__PURE__ */ jsxRuntime.jsxs("section", { className: "rounded-xl border border-slate-200 bg-slate-50/60 p-3 dark:border-slate-700 dark:bg-slate-900/40", children: [
599
640
  /* @__PURE__ */ jsxRuntime.jsx("h3", { className: "mb-2 text-sm font-semibold text-slate-700 dark:text-slate-200", children: "HTTP handler" }),
600
- /* @__PURE__ */ jsxRuntime.jsxs(chunkFSBR4RCK_js.FormGrid, { children: [
641
+ /* @__PURE__ */ jsxRuntime.jsxs(chunkK4M4B6ME_js.FormGrid, { children: [
601
642
  /* @__PURE__ */ jsxRuntime.jsx(
602
- chunkFSBR4RCK_js.FormSelect,
643
+ chunkK4M4B6ME_js.FormSelect,
603
644
  {
604
645
  label: "Method",
605
646
  value: stringProp(config, "method", "GET"),
@@ -608,7 +649,7 @@ function HandlerConfigEditor({
608
649
  }
609
650
  ),
610
651
  /* @__PURE__ */ jsxRuntime.jsx(
611
- chunkFSBR4RCK_js.FormInput,
652
+ chunkK4M4B6ME_js.FormInput,
612
653
  {
613
654
  label: "URL template",
614
655
  value: stringProp(config, "url"),
@@ -618,7 +659,7 @@ function HandlerConfigEditor({
618
659
  )
619
660
  ] }),
620
661
  /* @__PURE__ */ jsxRuntime.jsx(
621
- chunkFSBR4RCK_js.FormTextarea,
662
+ chunkK4M4B6ME_js.FormTextarea,
622
663
  {
623
664
  label: "Headers (JSON)",
624
665
  rows: 3,
@@ -628,7 +669,7 @@ function HandlerConfigEditor({
628
669
  }
629
670
  ),
630
671
  /* @__PURE__ */ jsxRuntime.jsx(
631
- chunkFSBR4RCK_js.FormTextarea,
672
+ chunkK4M4B6ME_js.FormTextarea,
632
673
  {
633
674
  label: "Body template",
634
675
  rows: 3,
@@ -643,7 +684,7 @@ function HandlerConfigEditor({
643
684
  return /* @__PURE__ */ jsxRuntime.jsxs("section", { className: "rounded-xl border border-slate-200 bg-slate-50/60 p-3 dark:border-slate-700 dark:bg-slate-900/40", children: [
644
685
  /* @__PURE__ */ jsxRuntime.jsx("h3", { className: "mb-2 text-sm font-semibold text-slate-700 dark:text-slate-200", children: "Function handler" }),
645
686
  /* @__PURE__ */ jsxRuntime.jsx(
646
- chunkFSBR4RCK_js.FormInput,
687
+ chunkK4M4B6ME_js.FormInput,
647
688
  {
648
689
  label: "Implementation key",
649
690
  value: stringProp(config, "implementationKey"),
@@ -657,9 +698,9 @@ function HandlerConfigEditor({
657
698
  if (toolType === "database_query") {
658
699
  return /* @__PURE__ */ jsxRuntime.jsxs("section", { className: "rounded-xl border border-slate-200 bg-slate-50/60 p-3 dark:border-slate-700 dark:bg-slate-900/40", children: [
659
700
  /* @__PURE__ */ jsxRuntime.jsx("h3", { className: "mb-2 text-sm font-semibold text-slate-700 dark:text-slate-200", children: "Database query handler" }),
660
- /* @__PURE__ */ jsxRuntime.jsxs(chunkFSBR4RCK_js.FormGrid, { children: [
701
+ /* @__PURE__ */ jsxRuntime.jsxs(chunkK4M4B6ME_js.FormGrid, { children: [
661
702
  /* @__PURE__ */ jsxRuntime.jsx(
662
- chunkFSBR4RCK_js.FormInput,
703
+ chunkK4M4B6ME_js.FormInput,
663
704
  {
664
705
  label: "Datasource ID",
665
706
  value: stringProp(config, "datasourceId"),
@@ -668,7 +709,7 @@ function HandlerConfigEditor({
668
709
  }
669
710
  ),
670
711
  /* @__PURE__ */ jsxRuntime.jsx(
671
- chunkFSBR4RCK_js.FormInput,
712
+ chunkK4M4B6ME_js.FormInput,
672
713
  {
673
714
  label: "Max rows",
674
715
  type: "number",
@@ -678,7 +719,7 @@ function HandlerConfigEditor({
678
719
  )
679
720
  ] }),
680
721
  /* @__PURE__ */ jsxRuntime.jsx(
681
- chunkFSBR4RCK_js.FormTextarea,
722
+ chunkK4M4B6ME_js.FormTextarea,
682
723
  {
683
724
  label: "Query template",
684
725
  rows: 4,
@@ -694,7 +735,7 @@ function HandlerConfigEditor({
694
735
  /* @__PURE__ */ jsxRuntime.jsx("h3", { className: "mb-2 text-sm font-semibold text-slate-700 dark:text-slate-200", children: "Code execution handler" }),
695
736
  /* @__PURE__ */ jsxRuntime.jsx("p", { className: "mb-2 text-xs text-amber-600 dark:text-amber-400", children: "Experimental \u2014 sandbox is not yet enforced. Only enable for trusted tools." }),
696
737
  /* @__PURE__ */ jsxRuntime.jsx(
697
- chunkFSBR4RCK_js.FormSelect,
738
+ chunkK4M4B6ME_js.FormSelect,
698
739
  {
699
740
  label: "Language",
700
741
  value: stringProp(config, "language", "javascript"),
@@ -706,7 +747,7 @@ function HandlerConfigEditor({
706
747
  }
707
748
  ),
708
749
  /* @__PURE__ */ jsxRuntime.jsx(
709
- chunkFSBR4RCK_js.FormTextarea,
750
+ chunkK4M4B6ME_js.FormTextarea,
710
751
  {
711
752
  label: "Code",
712
753
  rows: 6,
@@ -719,9 +760,9 @@ function HandlerConfigEditor({
719
760
  }
720
761
  return /* @__PURE__ */ jsxRuntime.jsxs("section", { className: "rounded-xl border border-slate-200 bg-slate-50/60 p-3 dark:border-slate-700 dark:bg-slate-900/40", children: [
721
762
  /* @__PURE__ */ jsxRuntime.jsx("h3", { className: "mb-2 text-sm font-semibold text-slate-700 dark:text-slate-200", children: "API call handler" }),
722
- /* @__PURE__ */ jsxRuntime.jsxs(chunkFSBR4RCK_js.FormGrid, { children: [
763
+ /* @__PURE__ */ jsxRuntime.jsxs(chunkK4M4B6ME_js.FormGrid, { children: [
723
764
  /* @__PURE__ */ jsxRuntime.jsx(
724
- chunkFSBR4RCK_js.FormInput,
765
+ chunkK4M4B6ME_js.FormInput,
725
766
  {
726
767
  label: "URL",
727
768
  value: stringProp(config, "url"),
@@ -729,7 +770,7 @@ function HandlerConfigEditor({
729
770
  }
730
771
  ),
731
772
  /* @__PURE__ */ jsxRuntime.jsx(
732
- chunkFSBR4RCK_js.FormSelect,
773
+ chunkK4M4B6ME_js.FormSelect,
733
774
  {
734
775
  label: "Auth",
735
776
  value: stringProp(config, "authType", "bearer"),
@@ -743,7 +784,7 @@ function HandlerConfigEditor({
743
784
  }
744
785
  ),
745
786
  /* @__PURE__ */ jsxRuntime.jsx(
746
- chunkFSBR4RCK_js.FormInput,
787
+ chunkK4M4B6ME_js.FormInput,
747
788
  {
748
789
  label: "Credential secret id",
749
790
  value: stringProp(config, "credentialRef"),
@@ -871,8 +912,20 @@ function setFromJson(set, key, raw) {
871
912
  function RulesPageView({ labels, rules, loading, onCreate, onUpdate, onDelete }) {
872
913
  const [createOpen, setCreateOpen] = react.useState(false);
873
914
  const [editing, setEditing] = react.useState(null);
915
+ const [searchTerm, setSearchTerm] = react.useState("");
916
+ const allRules = rules;
917
+ const filteredRules = searchTerm.trim() ? allRules.filter((rule) => (rule.name ?? "").toLowerCase().includes(searchTerm.trim().toLowerCase())) : allRules;
918
+ const isEmpty = allRules.length === 0;
919
+ const summary = !isEmpty ? /* @__PURE__ */ jsxRuntime.jsx(
920
+ chunkK4M4B6ME_js.SearchBar,
921
+ {
922
+ searchTerm,
923
+ onSearchChange: setSearchTerm,
924
+ placeholder: labels.searchPlaceholder ?? labels.title
925
+ }
926
+ ) : void 0;
874
927
  const hero = /* @__PURE__ */ jsxRuntime.jsx(
875
- chunkFSBR4RCK_js.HeroSection,
928
+ chunkK4M4B6ME_js.HeroSection,
876
929
  {
877
930
  icon: /* @__PURE__ */ jsxRuntime.jsx(outline.AdjustmentsHorizontalIcon, { className: "h-5 w-5" }),
878
931
  label: labels.title,
@@ -880,7 +933,7 @@ function RulesPageView({ labels, rules, loading, onCreate, onUpdate, onDelete })
880
933
  subtitle: labels.subtitle,
881
934
  gradient: "from-fuchsia-500 to-purple-700",
882
935
  toolbar: /* @__PURE__ */ jsxRuntime.jsx(
883
- chunkFSBR4RCK_js.CreateActionButton,
936
+ chunkK4M4B6ME_js.CreateActionButton,
884
937
  {
885
938
  mode: "desktop",
886
939
  label: labels.addRule,
@@ -891,7 +944,7 @@ function RulesPageView({ labels, rules, loading, onCreate, onUpdate, onDelete })
891
944
  }
892
945
  );
893
946
  const mobileAction = /* @__PURE__ */ jsxRuntime.jsx(
894
- chunkFSBR4RCK_js.CreateActionButton,
947
+ chunkK4M4B6ME_js.CreateActionButton,
895
948
  {
896
949
  mode: "mobile",
897
950
  label: labels.addRule,
@@ -899,18 +952,18 @@ function RulesPageView({ labels, rules, loading, onCreate, onUpdate, onDelete })
899
952
  accent: "fuchsia"
900
953
  }
901
954
  );
902
- const content = loading ? /* @__PURE__ */ jsxRuntime.jsx(chunkFSBR4RCK_js.PageLoadingState, {}) : rules.length === 0 ? /* @__PURE__ */ jsxRuntime.jsx(chunkFSBR4RCK_js.PageEmptyState, { title: labels.empty, message: labels.subtitle, iconName: "folder-open" }) : /* @__PURE__ */ jsxRuntime.jsx("div", { className: "grid grid-cols-1 gap-4 sm:grid-cols-2 lg:grid-cols-3", children: rules.map((rule) => /* @__PURE__ */ jsxRuntime.jsx(
903
- chunkFSBR4RCK_js.EntityCard,
955
+ const content = loading ? /* @__PURE__ */ jsxRuntime.jsx(chunkK4M4B6ME_js.PageLoadingState, {}) : isEmpty ? /* @__PURE__ */ jsxRuntime.jsx(chunkK4M4B6ME_js.PageEmptyState, { title: labels.empty, message: labels.subtitle, iconName: "folder-open" }) : /* @__PURE__ */ jsxRuntime.jsx("div", { className: "grid grid-cols-1 gap-4 sm:grid-cols-2 lg:grid-cols-3", children: filteredRules.map((rule) => /* @__PURE__ */ jsxRuntime.jsx(
956
+ chunkK4M4B6ME_js.EntityCard,
904
957
  {
905
958
  accentGradient: "from-fuchsia-500 to-purple-700",
906
959
  icon: /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex h-11 w-11 items-center justify-center rounded-lg bg-fuchsia-500/10 text-fuchsia-600 dark:bg-fuchsia-500/20 dark:text-fuchsia-400", children: /* @__PURE__ */ jsxRuntime.jsx(outline.AdjustmentsHorizontalIcon, { className: "h-6 w-6" }) }),
907
960
  title: rule.name,
908
961
  subtitle: `${labels.order}: ${rule.order ?? 0}`,
909
- status: /* @__PURE__ */ jsxRuntime.jsx(chunkFSBR4RCK_js.Badge, { color: rule.enabled ? "emerald" : "zinc", children: rule.enabled ? labels.enabled : labels.disabled }),
962
+ status: /* @__PURE__ */ jsxRuntime.jsx(chunkK4M4B6ME_js.Badge, { color: rule.enabled ? "emerald" : "zinc", children: rule.enabled ? labels.enabled : labels.disabled }),
910
963
  footer: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex gap-2", children: [
911
- /* @__PURE__ */ jsxRuntime.jsx(chunkFSBR4RCK_js.Button, { type: "button", size: "sm", outline: true, onClick: () => setEditing(rule), children: labels.edit }),
964
+ /* @__PURE__ */ jsxRuntime.jsx(chunkK4M4B6ME_js.Button, { type: "button", size: "sm", outline: true, onClick: () => setEditing(rule), children: labels.edit }),
912
965
  /* @__PURE__ */ jsxRuntime.jsx(
913
- chunkFSBR4RCK_js.Button,
966
+ chunkK4M4B6ME_js.Button,
914
967
  {
915
968
  type: "button",
916
969
  size: "sm",
@@ -927,13 +980,13 @@ function RulesPageView({ labels, rules, loading, onCreate, onUpdate, onDelete })
927
980
  rule.ruleId
928
981
  )) });
929
982
  return /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
930
- /* @__PURE__ */ jsxRuntime.jsx(chunkFSBR4RCK_js.ManagementPageLayout, { hero, content, mobileAction }),
983
+ /* @__PURE__ */ jsxRuntime.jsx(chunkK4M4B6ME_js.ManagementPageLayout, { hero, summary, content, mobileAction }),
931
984
  createOpen && /* @__PURE__ */ jsxRuntime.jsx(
932
985
  RuleEditor,
933
986
  {
934
987
  title: labels.createTitle,
935
988
  saveLabel: labels.save,
936
- initial: chunkERCDMBRT_js.defaultRuleForm(),
989
+ initial: chunkPYQLY2RH_js.defaultRuleForm(),
937
990
  onClose: () => setCreateOpen(false),
938
991
  onSubmit: (value) => {
939
992
  onCreate(value);
@@ -965,7 +1018,7 @@ function RuleEditor({
965
1018
  }) {
966
1019
  const [value, setValue] = react.useState(initial);
967
1020
  return /* @__PURE__ */ jsxRuntime.jsx(
968
- chunkFSBR4RCK_js.GlassModal,
1021
+ chunkK4M4B6ME_js.GlassModal,
969
1022
  {
970
1023
  open: true,
971
1024
  onClose,
@@ -977,12 +1030,12 @@ function RuleEditor({
977
1030
  event.preventDefault();
978
1031
  onSubmit(value);
979
1032
  },
980
- children: /* @__PURE__ */ jsxRuntime.jsx(chunkERCDMBRT_js.RuleForm, { value, onChange: setValue })
1033
+ children: /* @__PURE__ */ jsxRuntime.jsx(chunkPYQLY2RH_js.RuleForm, { value, onChange: setValue })
981
1034
  }
982
1035
  );
983
1036
  }
984
1037
  function ruleToFormValue(rule) {
985
- const base = chunkERCDMBRT_js.defaultRuleForm();
1038
+ const base = chunkPYQLY2RH_js.defaultRuleForm();
986
1039
  const rawCondition = rule.condition ?? rule.conditions;
987
1040
  const rawAction = pickAction(rule);
988
1041
  return {
@@ -1113,7 +1166,7 @@ var SAMPLE_DATASOURCES = [
1113
1166
  ];
1114
1167
  function getDialectLabel(dialect) {
1115
1168
  if (!dialect) return "Unknown";
1116
- for (const category of chunkYV7F7IXG_js.DIALECT_CATEGORIES) {
1169
+ for (const category of chunkSFFSXC5E_js.DIALECT_CATEGORIES) {
1117
1170
  const found = category.dialects.find((d) => d.value === dialect);
1118
1171
  if (found) return found.label;
1119
1172
  }
@@ -1121,12 +1174,12 @@ function getDialectLabel(dialect) {
1121
1174
  }
1122
1175
  function getDialectGradient(dialect) {
1123
1176
  if (!dialect) return "from-gray-400 to-gray-500";
1124
- const category = chunkYV7F7IXG_js.findCategory(dialect);
1177
+ const category = chunkSFFSXC5E_js.findCategory(dialect);
1125
1178
  return category?.gradient ?? "from-gray-400 to-gray-500";
1126
1179
  }
1127
1180
  function getDialectIcon(dialect) {
1128
1181
  if (!dialect) return outline.CircleStackIcon;
1129
- const category = chunkYV7F7IXG_js.findCategory(dialect);
1182
+ const category = chunkSFFSXC5E_js.findCategory(dialect);
1130
1183
  return category?.icon ?? outline.CircleStackIcon;
1131
1184
  }
1132
1185
  var DIALECT_LOGO = {
@@ -1164,11 +1217,13 @@ function DatasourcesPageView({
1164
1217
  onCreate
1165
1218
  }) {
1166
1219
  const [modalOpen, setModalOpen] = react.useState(false);
1220
+ const [searchTerm, setSearchTerm] = react.useState("");
1167
1221
  const [localDatasources, setLocalDatasources] = react.useState(
1168
1222
  useSampleData ? SAMPLE_DATASOURCES : []
1169
1223
  );
1170
- const datasources = externalDatasources ?? localDatasources;
1171
- const isEmpty = datasources.length === 0;
1224
+ const allDatasources = externalDatasources ?? localDatasources;
1225
+ const datasources = searchTerm.trim() ? allDatasources.filter((ds) => (ds.name ?? "").toLowerCase().includes(searchTerm.trim().toLowerCase())) : allDatasources;
1226
+ const isEmpty = allDatasources.length === 0;
1172
1227
  function handleCreate(data) {
1173
1228
  if (onCreate) {
1174
1229
  onCreate(data);
@@ -1194,7 +1249,7 @@ function DatasourcesPageView({
1194
1249
  }
1195
1250
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "space-y-4", children: [
1196
1251
  /* @__PURE__ */ jsxRuntime.jsx(
1197
- chunkFSBR4RCK_js.HeroSection,
1252
+ chunkK4M4B6ME_js.HeroSection,
1198
1253
  {
1199
1254
  icon: /* @__PURE__ */ jsxRuntime.jsx(outline.CircleStackIcon, { className: "h-5 w-5" }),
1200
1255
  label: labels.title,
@@ -1202,7 +1257,7 @@ function DatasourcesPageView({
1202
1257
  subtitle: labels.subtitle,
1203
1258
  gradient: "from-amber-500 to-orange-600",
1204
1259
  toolbar: /* @__PURE__ */ jsxRuntime.jsx(
1205
- chunkFSBR4RCK_js.CreateActionButton,
1260
+ chunkK4M4B6ME_js.CreateActionButton,
1206
1261
  {
1207
1262
  mode: "desktop",
1208
1263
  label: labels.addDatasource,
@@ -1213,7 +1268,7 @@ function DatasourcesPageView({
1213
1268
  }
1214
1269
  ),
1215
1270
  /* @__PURE__ */ jsxRuntime.jsx(
1216
- chunkFSBR4RCK_js.CreateActionButton,
1271
+ chunkK4M4B6ME_js.CreateActionButton,
1217
1272
  {
1218
1273
  mode: "mobile",
1219
1274
  label: labels.addDatasource,
@@ -1221,8 +1276,16 @@ function DatasourcesPageView({
1221
1276
  accent: "amber"
1222
1277
  }
1223
1278
  ),
1279
+ !isEmpty && /* @__PURE__ */ jsxRuntime.jsx(
1280
+ chunkK4M4B6ME_js.SearchBar,
1281
+ {
1282
+ searchTerm,
1283
+ onSearchChange: setSearchTerm,
1284
+ placeholder: labels.searchPlaceholder ?? labels.title
1285
+ }
1286
+ ),
1224
1287
  isEmpty ? /* @__PURE__ */ jsxRuntime.jsx(
1225
- chunkFSBR4RCK_js.PageEmptyState,
1288
+ chunkK4M4B6ME_js.PageEmptyState,
1226
1289
  {
1227
1290
  title: labels.emptyTitle,
1228
1291
  message: labels.emptyDescription,
@@ -1236,13 +1299,13 @@ function DatasourcesPageView({
1236
1299
  const logoSrc = getDialectLogoSrc(ds.dialect);
1237
1300
  const iconElement = logoSrc ? /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex h-11 w-11 items-center justify-center rounded-lg bg-white shadow-sm ring-1 ring-black/5 dark:bg-white/10 dark:ring-white/10", children: /* @__PURE__ */ jsxRuntime.jsx("img", { src: logoSrc, alt: dialectLabel, className: "h-7 w-7 object-contain" }) }) : /* @__PURE__ */ jsxRuntime.jsx("div", { className: `flex h-11 w-11 items-center justify-center rounded-lg bg-gradient-to-br ${gradient} shadow-lg`, children: /* @__PURE__ */ jsxRuntime.jsx(Icon, { className: "h-6 w-6 text-white" }) });
1238
1301
  return /* @__PURE__ */ jsxRuntime.jsx(
1239
- chunkFSBR4RCK_js.EntityCard,
1302
+ chunkK4M4B6ME_js.EntityCard,
1240
1303
  {
1241
1304
  accentGradient: gradient,
1242
1305
  icon: iconElement,
1243
1306
  title: ds.name ?? ds.id,
1244
1307
  subtitle: dialectLabel,
1245
- status: /* @__PURE__ */ jsxRuntime.jsx(chunkFSBR4RCK_js.Badge, { color: ds.enabled ? "emerald" : "zinc", children: ds.enabled ? labels.enabled : labels.disabled }),
1308
+ status: /* @__PURE__ */ jsxRuntime.jsx(chunkK4M4B6ME_js.Badge, { color: ds.enabled ? "emerald" : "zinc", children: ds.enabled ? labels.enabled : labels.disabled }),
1246
1309
  footer: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-2 text-xs text-gray-400 dark:text-gray-500", children: [
1247
1310
  ds.readOnly && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "rounded-full bg-blue-100 px-2 py-0.5 text-[10px] font-semibold text-blue-700 dark:bg-blue-900/30 dark:text-blue-300", children: "Read-only" }),
1248
1311
  ds.timeoutMs && /* @__PURE__ */ jsxRuntime.jsxs("span", { children: [
@@ -1266,7 +1329,7 @@ function DatasourcesPageView({
1266
1329
  );
1267
1330
  }) }),
1268
1331
  /* @__PURE__ */ jsxRuntime.jsx(
1269
- chunkYV7F7IXG_js.DatasourceModal,
1332
+ chunkSFFSXC5E_js.DatasourceModal,
1270
1333
  {
1271
1334
  open: modalOpen,
1272
1335
  onClose: () => setModalOpen(false),
@@ -1281,18 +1344,21 @@ function DashboardPageView({ labels, appLogo }) {
1281
1344
  /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex justify-center mb-6", children: appLogo }),
1282
1345
  /* @__PURE__ */ jsxRuntime.jsx("p", { className: "mt-3 text-base text-gray-500 dark:text-gray-400", children: labels.subtitle })
1283
1346
  ] });
1284
- return /* @__PURE__ */ jsxRuntime.jsx(chunkFSBR4RCK_js.ManagementPageLayout, { hero, content: null });
1347
+ return /* @__PURE__ */ jsxRuntime.jsx(chunkK4M4B6ME_js.ManagementPageLayout, { hero, content: null });
1285
1348
  }
1286
1349
  function AgentsIndexPageView({ labels }) {
1287
1350
  const Link = chunkS7KHTUHA_js.useLink();
1288
- const tiles = [
1351
+ const [searchTerm, setSearchTerm] = react.useState("");
1352
+ const allTiles = [
1289
1353
  { id: "config", title: labels.configTitle, subtitle: labels.configSubtitle, href: "/agents/config", gradient: "from-violet-500 to-indigo-700", icon: outline.CpuChipIcon },
1290
1354
  { id: "tools", title: labels.toolDefinitionsTitle, subtitle: labels.toolDefinitionsSubtitle, href: "/agents/tool-definitions", gradient: "from-amber-500 to-orange-700", icon: outline.WrenchScrewdriverIcon },
1291
1355
  { id: "models", title: labels.modelsTitle, subtitle: labels.modelsSubtitle, href: "/agents/models", gradient: "from-emerald-500 to-teal-700", icon: outline.CubeTransparentIcon },
1292
1356
  { id: "prompts", title: labels.promptsTitle, subtitle: labels.promptsSubtitle, href: "/agents/prompts", gradient: "from-sky-500 to-blue-700", icon: outline.ChatBubbleLeftEllipsisIcon }
1293
1357
  ];
1358
+ const filteredTiles = searchTerm.trim() ? allTiles.filter((tile) => tile.title.toLowerCase().includes(searchTerm.trim().toLowerCase())) : allTiles;
1359
+ const isEmpty = allTiles.length === 0;
1294
1360
  const hero = /* @__PURE__ */ jsxRuntime.jsx(
1295
- chunkFSBR4RCK_js.HeroSection,
1361
+ chunkK4M4B6ME_js.HeroSection,
1296
1362
  {
1297
1363
  icon: /* @__PURE__ */ jsxRuntime.jsx(outline.CpuChipIcon, { className: "h-5 w-5" }),
1298
1364
  label: labels.title,
@@ -1301,10 +1367,18 @@ function AgentsIndexPageView({ labels }) {
1301
1367
  gradient: "from-violet-500 to-indigo-700"
1302
1368
  }
1303
1369
  );
1304
- const content = /* @__PURE__ */ jsxRuntime.jsx("div", { className: "grid grid-cols-1 gap-4 sm:grid-cols-2 lg:grid-cols-4", children: tiles.map((tile) => {
1370
+ const summary = !isEmpty ? /* @__PURE__ */ jsxRuntime.jsx(
1371
+ chunkK4M4B6ME_js.SearchBar,
1372
+ {
1373
+ searchTerm,
1374
+ onSearchChange: setSearchTerm,
1375
+ placeholder: labels.searchPlaceholder ?? labels.title
1376
+ }
1377
+ ) : void 0;
1378
+ const content = /* @__PURE__ */ jsxRuntime.jsx("div", { className: "grid grid-cols-1 gap-4 sm:grid-cols-2 lg:grid-cols-4", children: filteredTiles.map((tile) => {
1305
1379
  const Icon = tile.icon;
1306
1380
  return /* @__PURE__ */ jsxRuntime.jsx(Link, { href: tile.href, className: "block focus:outline-none", children: /* @__PURE__ */ jsxRuntime.jsx(
1307
- chunkFSBR4RCK_js.EntityCard,
1381
+ chunkK4M4B6ME_js.EntityCard,
1308
1382
  {
1309
1383
  accentGradient: tile.gradient,
1310
1384
  icon: /* @__PURE__ */ jsxRuntime.jsx("div", { className: `flex h-11 w-11 items-center justify-center rounded-lg bg-gradient-to-br ${tile.gradient} shadow-lg`, children: /* @__PURE__ */ jsxRuntime.jsx(Icon, { className: "h-6 w-6 text-white" }) }),
@@ -1313,13 +1387,13 @@ function AgentsIndexPageView({ labels }) {
1313
1387
  }
1314
1388
  ) }, tile.id);
1315
1389
  }) });
1316
- return /* @__PURE__ */ jsxRuntime.jsx(chunkFSBR4RCK_js.ManagementPageLayout, { hero, content });
1390
+ return /* @__PURE__ */ jsxRuntime.jsx(chunkK4M4B6ME_js.ManagementPageLayout, { hero, summary, content });
1317
1391
  }
1318
1392
  function WorkflowsPageView({ labels, workflows, onCreate, onUpdateMeta, onPublish }) {
1319
1393
  const selectedWorkflow = workflows[0] ?? null;
1320
1394
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "space-y-6", children: [
1321
1395
  /* @__PURE__ */ jsxRuntime.jsx(
1322
- chunkFSBR4RCK_js.SectionHeader,
1396
+ chunkK4M4B6ME_js.SectionHeader,
1323
1397
  {
1324
1398
  icon: /* @__PURE__ */ jsxRuntime.jsx(outline.RectangleStackIcon, { className: "h-5 w-5 text-white" }),
1325
1399
  title: labels.title,
@@ -1328,9 +1402,9 @@ function WorkflowsPageView({ labels, workflows, onCreate, onUpdateMeta, onPublis
1328
1402
  }
1329
1403
  ),
1330
1404
  /* @__PURE__ */ jsxRuntime.jsxs("section", { className: "liquid-surface rounded-2xl p-4 space-y-3", children: [
1331
- /* @__PURE__ */ jsxRuntime.jsx(chunkFSBR4RCK_js.Text, { className: "font-semibold text-slate-900 dark:text-slate-100", children: labels.add }),
1405
+ /* @__PURE__ */ jsxRuntime.jsx(chunkK4M4B6ME_js.Text, { className: "font-semibold text-slate-900 dark:text-slate-100", children: labels.add }),
1332
1406
  /* @__PURE__ */ jsxRuntime.jsx(
1333
- chunkFSBR4RCK_js.Form,
1407
+ chunkK4M4B6ME_js.Form,
1334
1408
  {
1335
1409
  onSubmit: (event) => {
1336
1410
  event.preventDefault();
@@ -1341,32 +1415,32 @@ function WorkflowsPageView({ labels, workflows, onCreate, onUpdateMeta, onPublis
1341
1415
  onCreate({ name, description });
1342
1416
  event.currentTarget.reset();
1343
1417
  },
1344
- children: /* @__PURE__ */ jsxRuntime.jsxs(chunkFSBR4RCK_js.FormGrid, { children: [
1345
- /* @__PURE__ */ jsxRuntime.jsx(chunkFSBR4RCK_js.FormInput, { name: "name", label: labels.workflowName, placeholder: labels.workflowNamePlaceholder, required: true }),
1346
- /* @__PURE__ */ jsxRuntime.jsx(chunkFSBR4RCK_js.FormTextarea, { name: "description", label: labels.description, placeholder: labels.workflowDescriptionPlaceholder, rows: 3 }),
1347
- /* @__PURE__ */ jsxRuntime.jsx(chunkFSBR4RCK_js.FormActionsRow, { children: /* @__PURE__ */ jsxRuntime.jsx(chunkFSBR4RCK_js.Button, { type: "submit", children: labels.create }) })
1418
+ children: /* @__PURE__ */ jsxRuntime.jsxs(chunkK4M4B6ME_js.FormGrid, { children: [
1419
+ /* @__PURE__ */ jsxRuntime.jsx(chunkK4M4B6ME_js.FormInput, { name: "name", label: labels.workflowName, placeholder: labels.workflowNamePlaceholder, required: true }),
1420
+ /* @__PURE__ */ jsxRuntime.jsx(chunkK4M4B6ME_js.FormTextarea, { name: "description", label: labels.description, placeholder: labels.workflowDescriptionPlaceholder, rows: 3 }),
1421
+ /* @__PURE__ */ jsxRuntime.jsx(chunkK4M4B6ME_js.FormActionsRow, { children: /* @__PURE__ */ jsxRuntime.jsx(chunkK4M4B6ME_js.Button, { type: "submit", children: labels.create }) })
1348
1422
  ] })
1349
1423
  }
1350
1424
  )
1351
1425
  ] }),
1352
1426
  /* @__PURE__ */ jsxRuntime.jsxs("section", { className: "liquid-surface rounded-2xl p-4 space-y-3", children: [
1353
- /* @__PURE__ */ jsxRuntime.jsx(chunkFSBR4RCK_js.Text, { className: "font-semibold text-slate-900 dark:text-slate-100", children: labels.registry }),
1354
- /* @__PURE__ */ jsxRuntime.jsxs(chunkFSBR4RCK_js.Table, { children: [
1355
- /* @__PURE__ */ jsxRuntime.jsx(chunkFSBR4RCK_js.TableHead, { children: /* @__PURE__ */ jsxRuntime.jsxs(chunkFSBR4RCK_js.TableRow, { children: [
1356
- /* @__PURE__ */ jsxRuntime.jsx(chunkFSBR4RCK_js.TableHeader, { children: labels.name }),
1357
- /* @__PURE__ */ jsxRuntime.jsx(chunkFSBR4RCK_js.TableHeader, { children: labels.description }),
1358
- /* @__PURE__ */ jsxRuntime.jsx(chunkFSBR4RCK_js.TableHeader, { children: labels.version }),
1359
- /* @__PURE__ */ jsxRuntime.jsx(chunkFSBR4RCK_js.TableHeader, { children: labels.status }),
1360
- /* @__PURE__ */ jsxRuntime.jsx(chunkFSBR4RCK_js.TableHeader, { children: labels.actions })
1427
+ /* @__PURE__ */ jsxRuntime.jsx(chunkK4M4B6ME_js.Text, { className: "font-semibold text-slate-900 dark:text-slate-100", children: labels.registry }),
1428
+ /* @__PURE__ */ jsxRuntime.jsxs(chunkK4M4B6ME_js.Table, { children: [
1429
+ /* @__PURE__ */ jsxRuntime.jsx(chunkK4M4B6ME_js.TableHead, { children: /* @__PURE__ */ jsxRuntime.jsxs(chunkK4M4B6ME_js.TableRow, { children: [
1430
+ /* @__PURE__ */ jsxRuntime.jsx(chunkK4M4B6ME_js.TableHeader, { children: labels.name }),
1431
+ /* @__PURE__ */ jsxRuntime.jsx(chunkK4M4B6ME_js.TableHeader, { children: labels.description }),
1432
+ /* @__PURE__ */ jsxRuntime.jsx(chunkK4M4B6ME_js.TableHeader, { children: labels.version }),
1433
+ /* @__PURE__ */ jsxRuntime.jsx(chunkK4M4B6ME_js.TableHeader, { children: labels.status }),
1434
+ /* @__PURE__ */ jsxRuntime.jsx(chunkK4M4B6ME_js.TableHeader, { children: labels.actions })
1361
1435
  ] }) }),
1362
- /* @__PURE__ */ jsxRuntime.jsx(chunkFSBR4RCK_js.TableBody, { children: workflows.map((workflow) => /* @__PURE__ */ jsxRuntime.jsxs(chunkFSBR4RCK_js.TableRow, { children: [
1363
- /* @__PURE__ */ jsxRuntime.jsx(chunkFSBR4RCK_js.TableCell, { children: workflow.name }),
1364
- /* @__PURE__ */ jsxRuntime.jsx(chunkFSBR4RCK_js.TableCell, { children: workflow.description }),
1365
- /* @__PURE__ */ jsxRuntime.jsx(chunkFSBR4RCK_js.TableCell, { children: String(workflow.version) }),
1366
- /* @__PURE__ */ jsxRuntime.jsx(chunkFSBR4RCK_js.TableCell, { children: /* @__PURE__ */ jsxRuntime.jsx(chunkFSBR4RCK_js.Badge, { children: workflow.isDraft ? labels.statusDraft : labels.statusPublished }) }),
1367
- /* @__PURE__ */ jsxRuntime.jsx(chunkFSBR4RCK_js.TableCell, { children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-col gap-2", children: [
1436
+ /* @__PURE__ */ jsxRuntime.jsx(chunkK4M4B6ME_js.TableBody, { children: workflows.map((workflow) => /* @__PURE__ */ jsxRuntime.jsxs(chunkK4M4B6ME_js.TableRow, { children: [
1437
+ /* @__PURE__ */ jsxRuntime.jsx(chunkK4M4B6ME_js.TableCell, { children: workflow.name }),
1438
+ /* @__PURE__ */ jsxRuntime.jsx(chunkK4M4B6ME_js.TableCell, { children: workflow.description }),
1439
+ /* @__PURE__ */ jsxRuntime.jsx(chunkK4M4B6ME_js.TableCell, { children: String(workflow.version) }),
1440
+ /* @__PURE__ */ jsxRuntime.jsx(chunkK4M4B6ME_js.TableCell, { children: /* @__PURE__ */ jsxRuntime.jsx(chunkK4M4B6ME_js.Badge, { children: workflow.isDraft ? labels.statusDraft : labels.statusPublished }) }),
1441
+ /* @__PURE__ */ jsxRuntime.jsx(chunkK4M4B6ME_js.TableCell, { children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-col gap-2", children: [
1368
1442
  /* @__PURE__ */ jsxRuntime.jsx(
1369
- chunkFSBR4RCK_js.Form,
1443
+ chunkK4M4B6ME_js.Form,
1370
1444
  {
1371
1445
  onSubmit: (event) => {
1372
1446
  event.preventDefault();
@@ -1376,17 +1450,17 @@ function WorkflowsPageView({ labels, workflows, onCreate, onUpdateMeta, onPublis
1376
1450
  description: workflow.description ?? ""
1377
1451
  });
1378
1452
  },
1379
- children: /* @__PURE__ */ jsxRuntime.jsx(chunkFSBR4RCK_js.InlineForm, { children: /* @__PURE__ */ jsxRuntime.jsx(chunkFSBR4RCK_js.Button, { type: "submit", outline: true, children: labels.saveMeta }) })
1453
+ children: /* @__PURE__ */ jsxRuntime.jsx(chunkK4M4B6ME_js.InlineForm, { children: /* @__PURE__ */ jsxRuntime.jsx(chunkK4M4B6ME_js.Button, { type: "submit", outline: true, children: labels.saveMeta }) })
1380
1454
  }
1381
1455
  ),
1382
- /* @__PURE__ */ jsxRuntime.jsx(chunkFSBR4RCK_js.Button, { type: "button", color: "sky", onClick: () => onPublish(workflow.id), children: labels.publish })
1456
+ /* @__PURE__ */ jsxRuntime.jsx(chunkK4M4B6ME_js.Button, { type: "button", color: "sky", onClick: () => onPublish(workflow.id), children: labels.publish })
1383
1457
  ] }) })
1384
1458
  ] }, workflow.id)) })
1385
1459
  ] })
1386
1460
  ] }),
1387
1461
  /* @__PURE__ */ jsxRuntime.jsxs("section", { className: "liquid-surface rounded-2xl p-4 space-y-3", children: [
1388
- /* @__PURE__ */ jsxRuntime.jsx(chunkFSBR4RCK_js.Text, { className: "font-semibold text-slate-900 dark:text-slate-100", children: labels.workspace }),
1389
- selectedWorkflow ? /* @__PURE__ */ jsxRuntime.jsx("div", { className: "min-h-[680px] rounded-2xl border border-white/65 dark:border-white/12 overflow-hidden", children: /* @__PURE__ */ jsxRuntime.jsx(chunkRLLP7VQJ_js.WorkflowWorkspace, { graph: chunk3T2WGL47_js.adaptWorkflowGraphToUi(selectedWorkflow.graph) }) }) : /* @__PURE__ */ jsxRuntime.jsx(chunkFSBR4RCK_js.Text, { children: labels.empty })
1462
+ /* @__PURE__ */ jsxRuntime.jsx(chunkK4M4B6ME_js.Text, { className: "font-semibold text-slate-900 dark:text-slate-100", children: labels.workspace }),
1463
+ selectedWorkflow ? /* @__PURE__ */ jsxRuntime.jsx("div", { className: "min-h-[680px] rounded-2xl border border-white/65 dark:border-white/12 overflow-hidden", children: /* @__PURE__ */ jsxRuntime.jsx(chunkU6XA2OYE_js.WorkflowWorkspace, { graph: chunk3T2WGL47_js.adaptWorkflowGraphToUi(selectedWorkflow.graph) }) }) : /* @__PURE__ */ jsxRuntime.jsx(chunkK4M4B6ME_js.Text, { children: labels.empty })
1390
1464
  ] })
1391
1465
  ] });
1392
1466
  }
@@ -1399,6 +1473,7 @@ var BADGE_COLOR = {
1399
1473
  };
1400
1474
  function WorkflowRunsPageView({ labels, runs, loading, onCancel, onReplay, onView, onViewTimeline }) {
1401
1475
  const [statusFilter, setStatusFilter] = react.useState("all");
1476
+ const [searchTerm, setSearchTerm] = react.useState("");
1402
1477
  const statusOptions = react.useMemo(() => [
1403
1478
  { value: "all", label: labels.filterAll },
1404
1479
  { value: "pending", label: labels.statusPending },
@@ -1423,9 +1498,18 @@ function WorkflowRunsPageView({ labels, runs, loading, onCancel, onReplay, onVie
1423
1498
  return status;
1424
1499
  }
1425
1500
  };
1426
- const filteredRuns = statusFilter === "all" ? runs : runs.filter((run) => run.status === statusFilter);
1501
+ const allRuns = runs;
1502
+ const term = searchTerm.trim().toLowerCase();
1503
+ const filteredRuns = allRuns.filter((run) => {
1504
+ if (statusFilter !== "all" && run.status !== statusFilter) return false;
1505
+ if (term && !run.id.toLowerCase().includes(term) && !run.workflowId.toLowerCase().includes(term)) {
1506
+ return false;
1507
+ }
1508
+ return true;
1509
+ });
1510
+ const isEmpty = allRuns.length === 0;
1427
1511
  const hero = /* @__PURE__ */ jsxRuntime.jsx(
1428
- chunkFSBR4RCK_js.HeroSection,
1512
+ chunkK4M4B6ME_js.HeroSection,
1429
1513
  {
1430
1514
  icon: /* @__PURE__ */ jsxRuntime.jsx(outline.ClockIcon, { className: "h-5 w-5" }),
1431
1515
  label: labels.title,
@@ -1433,7 +1517,7 @@ function WorkflowRunsPageView({ labels, runs, loading, onCancel, onReplay, onVie
1433
1517
  subtitle: labels.subtitle,
1434
1518
  gradient: "from-indigo-500 to-sky-700",
1435
1519
  toolbar: /* @__PURE__ */ jsxRuntime.jsx("div", { className: "w-48", children: /* @__PURE__ */ jsxRuntime.jsx(
1436
- chunkFSBR4RCK_js.FormSelect,
1520
+ chunkK4M4B6ME_js.FormSelect,
1437
1521
  {
1438
1522
  name: "statusFilter",
1439
1523
  label: labels.filterStatus,
@@ -1444,19 +1528,27 @@ function WorkflowRunsPageView({ labels, runs, loading, onCancel, onReplay, onVie
1444
1528
  ) })
1445
1529
  }
1446
1530
  );
1447
- const content = loading ? /* @__PURE__ */ jsxRuntime.jsx(chunkFSBR4RCK_js.PageLoadingState, {}) : filteredRuns.length === 0 ? /* @__PURE__ */ jsxRuntime.jsx(chunkFSBR4RCK_js.PageEmptyState, { title: labels.empty, message: labels.subtitle, iconName: "folder-open" }) : /* @__PURE__ */ jsxRuntime.jsx("div", { className: "grid grid-cols-1 gap-4 sm:grid-cols-2 lg:grid-cols-3", children: filteredRuns.map((run) => /* @__PURE__ */ jsxRuntime.jsxs(
1448
- chunkFSBR4RCK_js.EntityCard,
1531
+ const summary = !isEmpty ? /* @__PURE__ */ jsxRuntime.jsx(
1532
+ chunkK4M4B6ME_js.SearchBar,
1533
+ {
1534
+ searchTerm,
1535
+ onSearchChange: setSearchTerm,
1536
+ placeholder: labels.searchPlaceholder ?? labels.title
1537
+ }
1538
+ ) : void 0;
1539
+ const content = loading ? /* @__PURE__ */ jsxRuntime.jsx(chunkK4M4B6ME_js.PageLoadingState, {}) : filteredRuns.length === 0 ? /* @__PURE__ */ jsxRuntime.jsx(chunkK4M4B6ME_js.PageEmptyState, { title: labels.empty, message: labels.subtitle, iconName: "folder-open" }) : /* @__PURE__ */ jsxRuntime.jsx("div", { className: "grid grid-cols-1 gap-4 sm:grid-cols-2 lg:grid-cols-3", children: filteredRuns.map((run) => /* @__PURE__ */ jsxRuntime.jsxs(
1540
+ chunkK4M4B6ME_js.EntityCard,
1449
1541
  {
1450
1542
  accentGradient: "from-indigo-500 to-sky-700",
1451
1543
  icon: /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex h-11 w-11 items-center justify-center rounded-lg bg-indigo-500/10 text-indigo-600 dark:bg-indigo-500/20 dark:text-indigo-400", children: /* @__PURE__ */ jsxRuntime.jsx(outline.ClockIcon, { className: "h-6 w-6" }) }),
1452
1544
  title: run.id.slice(0, 8),
1453
1545
  subtitle: `${labels.startedAt}: ${new Date(run.createdAt).toLocaleString()}`,
1454
- status: /* @__PURE__ */ jsxRuntime.jsx(chunkFSBR4RCK_js.Badge, { color: BADGE_COLOR[run.status] ?? "zinc", children: statusLabelFor(run.status) }),
1546
+ status: /* @__PURE__ */ jsxRuntime.jsx(chunkK4M4B6ME_js.Badge, { color: BADGE_COLOR[run.status] ?? "zinc", children: statusLabelFor(run.status) }),
1455
1547
  footer: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex gap-2", children: [
1456
- onView && /* @__PURE__ */ jsxRuntime.jsx(chunkFSBR4RCK_js.Button, { type: "button", size: "sm", outline: true, onClick: () => onView(run), children: labels.view }),
1457
- onViewTimeline && labels.timeline && /* @__PURE__ */ jsxRuntime.jsx(chunkFSBR4RCK_js.Button, { type: "button", size: "sm", outline: true, onClick: () => onViewTimeline(run), children: labels.timeline }),
1458
- /* @__PURE__ */ jsxRuntime.jsx(chunkFSBR4RCK_js.Button, { type: "button", size: "sm", outline: true, onClick: () => onReplay(run), children: labels.replay }),
1459
- run.status === "running" && /* @__PURE__ */ jsxRuntime.jsx(chunkFSBR4RCK_js.Button, { type: "button", size: "sm", color: "rose", onClick: () => onCancel(run), children: labels.cancel })
1548
+ onView && /* @__PURE__ */ jsxRuntime.jsx(chunkK4M4B6ME_js.Button, { type: "button", size: "sm", outline: true, onClick: () => onView(run), children: labels.view }),
1549
+ onViewTimeline && labels.timeline && /* @__PURE__ */ jsxRuntime.jsx(chunkK4M4B6ME_js.Button, { type: "button", size: "sm", outline: true, onClick: () => onViewTimeline(run), children: labels.timeline }),
1550
+ /* @__PURE__ */ jsxRuntime.jsx(chunkK4M4B6ME_js.Button, { type: "button", size: "sm", outline: true, onClick: () => onReplay(run), children: labels.replay }),
1551
+ run.status === "running" && /* @__PURE__ */ jsxRuntime.jsx(chunkK4M4B6ME_js.Button, { type: "button", size: "sm", color: "rose", onClick: () => onCancel(run), children: labels.cancel })
1460
1552
  ] }),
1461
1553
  children: [
1462
1554
  /* @__PURE__ */ jsxRuntime.jsxs("dl", { className: "mt-1 grid grid-cols-2 gap-1 text-xs text-slate-500 dark:text-slate-400", children: [
@@ -1470,11 +1562,11 @@ function WorkflowRunsPageView({ labels, runs, loading, onCancel, onReplay, onVie
1470
1562
  },
1471
1563
  run.id
1472
1564
  )) });
1473
- return /* @__PURE__ */ jsxRuntime.jsx(chunkFSBR4RCK_js.ManagementPageLayout, { hero, content });
1565
+ return /* @__PURE__ */ jsxRuntime.jsx(chunkK4M4B6ME_js.ManagementPageLayout, { hero, summary, content });
1474
1566
  }
1475
1567
  function RunTimelinePageView({ labels, entries, loading, runId }) {
1476
1568
  const hero = /* @__PURE__ */ jsxRuntime.jsx(
1477
- chunkFSBR4RCK_js.HeroSection,
1569
+ chunkK4M4B6ME_js.HeroSection,
1478
1570
  {
1479
1571
  icon: /* @__PURE__ */ jsxRuntime.jsx(outline.ClockIcon, { className: "h-5 w-5" }),
1480
1572
  label: labels.title,
@@ -1484,23 +1576,23 @@ function RunTimelinePageView({ labels, entries, loading, runId }) {
1484
1576
  }
1485
1577
  );
1486
1578
  if (loading) {
1487
- return /* @__PURE__ */ jsxRuntime.jsx(chunkFSBR4RCK_js.ManagementPageLayout, { hero, content: /* @__PURE__ */ jsxRuntime.jsx(chunkFSBR4RCK_js.PageLoadingState, {}) });
1579
+ return /* @__PURE__ */ jsxRuntime.jsx(chunkK4M4B6ME_js.ManagementPageLayout, { hero, content: /* @__PURE__ */ jsxRuntime.jsx(chunkK4M4B6ME_js.PageLoadingState, {}) });
1488
1580
  }
1489
1581
  if (entries.length === 0) {
1490
1582
  return /* @__PURE__ */ jsxRuntime.jsx(
1491
- chunkFSBR4RCK_js.ManagementPageLayout,
1583
+ chunkK4M4B6ME_js.ManagementPageLayout,
1492
1584
  {
1493
1585
  hero,
1494
- content: /* @__PURE__ */ jsxRuntime.jsx(chunkFSBR4RCK_js.PageEmptyState, { title: labels.empty ?? "", message: "", iconName: "folder-open" })
1586
+ content: /* @__PURE__ */ jsxRuntime.jsx(chunkK4M4B6ME_js.PageEmptyState, { title: labels.empty ?? "", message: "", iconName: "folder-open" })
1495
1587
  }
1496
1588
  );
1497
1589
  }
1498
1590
  return /* @__PURE__ */ jsxRuntime.jsx(
1499
- chunkFSBR4RCK_js.ManagementPageLayout,
1591
+ chunkK4M4B6ME_js.ManagementPageLayout,
1500
1592
  {
1501
1593
  hero,
1502
1594
  content: /* @__PURE__ */ jsxRuntime.jsx(
1503
- chunkERCDMBRT_js.ExecutionTimelinePanel,
1595
+ chunkPYQLY2RH_js.ExecutionTimelinePanel,
1504
1596
  {
1505
1597
  entries,
1506
1598
  labels
@@ -1581,8 +1673,20 @@ function ConnectionsPageView({
1581
1673
  }) {
1582
1674
  const [createOpen, setCreateOpen] = react.useState(false);
1583
1675
  const [editing, setEditing] = react.useState(null);
1676
+ const [searchTerm, setSearchTerm] = react.useState("");
1677
+ const allConnections = connections;
1678
+ const filteredConnections = searchTerm.trim() ? allConnections.filter((conn) => conn.name.toLowerCase().includes(searchTerm.trim().toLowerCase())) : allConnections;
1679
+ const isEmpty = allConnections.length === 0;
1680
+ const summary = !isEmpty ? /* @__PURE__ */ jsxRuntime.jsx(
1681
+ chunkK4M4B6ME_js.SearchBar,
1682
+ {
1683
+ searchTerm,
1684
+ onSearchChange: setSearchTerm,
1685
+ placeholder: labels.searchPlaceholder ?? labels.title
1686
+ }
1687
+ ) : void 0;
1584
1688
  const hero = /* @__PURE__ */ jsxRuntime.jsx(
1585
- chunkFSBR4RCK_js.HeroSection,
1689
+ chunkK4M4B6ME_js.HeroSection,
1586
1690
  {
1587
1691
  icon: /* @__PURE__ */ jsxRuntime.jsx(outline.LinkIcon, { className: "h-5 w-5" }),
1588
1692
  label: labels.title,
@@ -1590,7 +1694,7 @@ function ConnectionsPageView({
1590
1694
  subtitle: labels.subtitle,
1591
1695
  gradient: "from-sky-500 to-indigo-600",
1592
1696
  toolbar: /* @__PURE__ */ jsxRuntime.jsx(
1593
- chunkFSBR4RCK_js.CreateActionButton,
1697
+ chunkK4M4B6ME_js.CreateActionButton,
1594
1698
  {
1595
1699
  mode: "desktop",
1596
1700
  label: labels.add,
@@ -1601,7 +1705,7 @@ function ConnectionsPageView({
1601
1705
  }
1602
1706
  );
1603
1707
  const mobileAction = /* @__PURE__ */ jsxRuntime.jsx(
1604
- chunkFSBR4RCK_js.CreateActionButton,
1708
+ chunkK4M4B6ME_js.CreateActionButton,
1605
1709
  {
1606
1710
  mode: "mobile",
1607
1711
  label: labels.add,
@@ -1609,21 +1713,21 @@ function ConnectionsPageView({
1609
1713
  accent: "sky"
1610
1714
  }
1611
1715
  );
1612
- const content = loading ? /* @__PURE__ */ jsxRuntime.jsx(chunkFSBR4RCK_js.PageLoadingState, {}) : connections.length === 0 ? /* @__PURE__ */ jsxRuntime.jsx(chunkFSBR4RCK_js.PageEmptyState, { title: labels.empty, message: labels.subtitle, iconName: "folder-open" }) : /* @__PURE__ */ jsxRuntime.jsx("div", { className: "grid grid-cols-1 gap-4 sm:grid-cols-2 lg:grid-cols-3", children: connections.map((conn) => /* @__PURE__ */ jsxRuntime.jsx(
1613
- chunkFSBR4RCK_js.EntityCard,
1716
+ const content = loading ? /* @__PURE__ */ jsxRuntime.jsx(chunkK4M4B6ME_js.PageLoadingState, {}) : isEmpty ? /* @__PURE__ */ jsxRuntime.jsx(chunkK4M4B6ME_js.PageEmptyState, { title: labels.empty, message: labels.subtitle, iconName: "folder-open" }) : /* @__PURE__ */ jsxRuntime.jsx("div", { className: "grid grid-cols-1 gap-4 sm:grid-cols-2 lg:grid-cols-3", children: filteredConnections.map((conn) => /* @__PURE__ */ jsxRuntime.jsx(
1717
+ chunkK4M4B6ME_js.EntityCard,
1614
1718
  {
1615
1719
  accentGradient: "from-sky-500 to-indigo-600",
1616
1720
  icon: /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex h-11 w-11 items-center justify-center rounded-lg bg-sky-500/10 text-sky-600 dark:bg-sky-500/20 dark:text-sky-400", children: /* @__PURE__ */ jsxRuntime.jsx(outline.LinkIcon, { className: "h-6 w-6" }) }),
1617
1721
  title: conn.name,
1618
1722
  subtitle: providerLabel(conn.providerSlug),
1619
1723
  status: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex gap-1", children: [
1620
- /* @__PURE__ */ jsxRuntime.jsx(chunkFSBR4RCK_js.Badge, { color: conn.enabled ? "emerald" : "zinc", children: conn.enabled ? labels.enable : labels.disable }),
1621
- conn.credentialRef ? /* @__PURE__ */ jsxRuntime.jsx(chunkFSBR4RCK_js.Badge, { color: "indigo", children: "Secret set" }) : /* @__PURE__ */ jsxRuntime.jsx(chunkFSBR4RCK_js.Badge, { color: "amber", children: "No secret" })
1724
+ /* @__PURE__ */ jsxRuntime.jsx(chunkK4M4B6ME_js.Badge, { color: conn.enabled ? "emerald" : "zinc", children: conn.enabled ? labels.enable : labels.disable }),
1725
+ conn.credentialRef ? /* @__PURE__ */ jsxRuntime.jsx(chunkK4M4B6ME_js.Badge, { color: "indigo", children: "Secret set" }) : /* @__PURE__ */ jsxRuntime.jsx(chunkK4M4B6ME_js.Badge, { color: "amber", children: "No secret" })
1622
1726
  ] }),
1623
1727
  footer: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex gap-2", children: [
1624
- /* @__PURE__ */ jsxRuntime.jsx(chunkFSBR4RCK_js.Button, { type: "button", size: "sm", outline: true, onClick: () => setEditing(conn), children: labels.edit }),
1728
+ /* @__PURE__ */ jsxRuntime.jsx(chunkK4M4B6ME_js.Button, { type: "button", size: "sm", outline: true, onClick: () => setEditing(conn), children: labels.edit }),
1625
1729
  /* @__PURE__ */ jsxRuntime.jsx(
1626
- chunkFSBR4RCK_js.Button,
1730
+ chunkK4M4B6ME_js.Button,
1627
1731
  {
1628
1732
  type: "button",
1629
1733
  size: "sm",
@@ -1644,7 +1748,7 @@ function ConnectionsPageView({
1644
1748
  conn.id
1645
1749
  )) });
1646
1750
  return /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
1647
- /* @__PURE__ */ jsxRuntime.jsx(chunkFSBR4RCK_js.ManagementPageLayout, { hero, content, mobileAction }),
1751
+ /* @__PURE__ */ jsxRuntime.jsx(chunkK4M4B6ME_js.ManagementPageLayout, { hero, summary, content, mobileAction }),
1648
1752
  createOpen && /* @__PURE__ */ jsxRuntime.jsx(
1649
1753
  ConnectionEditor,
1650
1754
  {
@@ -1758,7 +1862,7 @@ function ConnectionEditor({
1758
1862
  return preset.exampleModels?.join(", ") ?? "";
1759
1863
  }, [preset]);
1760
1864
  return /* @__PURE__ */ jsxRuntime.jsx(
1761
- chunkFSBR4RCK_js.GlassModal,
1865
+ chunkK4M4B6ME_js.GlassModal,
1762
1866
  {
1763
1867
  open: true,
1764
1868
  onClose,
@@ -1771,9 +1875,9 @@ function ConnectionEditor({
1771
1875
  void handleSubmit();
1772
1876
  },
1773
1877
  children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "space-y-4", children: [
1774
- /* @__PURE__ */ jsxRuntime.jsxs(chunkFSBR4RCK_js.FormGrid, { children: [
1878
+ /* @__PURE__ */ jsxRuntime.jsxs(chunkK4M4B6ME_js.FormGrid, { children: [
1775
1879
  /* @__PURE__ */ jsxRuntime.jsx(
1776
- chunkFSBR4RCK_js.FormSelect,
1880
+ chunkK4M4B6ME_js.FormSelect,
1777
1881
  {
1778
1882
  label: "Provider",
1779
1883
  value: value.providerSlug,
@@ -1784,7 +1888,7 @@ function ConnectionEditor({
1784
1888
  }
1785
1889
  ),
1786
1890
  /* @__PURE__ */ jsxRuntime.jsx(
1787
- chunkFSBR4RCK_js.FormInput,
1891
+ chunkK4M4B6ME_js.FormInput,
1788
1892
  {
1789
1893
  label: "Display name",
1790
1894
  required: true,
@@ -1794,7 +1898,7 @@ function ConnectionEditor({
1794
1898
  }
1795
1899
  ),
1796
1900
  preset.needsRegion && /* @__PURE__ */ jsxRuntime.jsx(
1797
- chunkFSBR4RCK_js.FormInput,
1901
+ chunkK4M4B6ME_js.FormInput,
1798
1902
  {
1799
1903
  label: "Region",
1800
1904
  value: value.region,
@@ -1803,7 +1907,7 @@ function ConnectionEditor({
1803
1907
  }
1804
1908
  ),
1805
1909
  preset.needsEndpoint && /* @__PURE__ */ jsxRuntime.jsx(
1806
- chunkFSBR4RCK_js.FormInput,
1910
+ chunkK4M4B6ME_js.FormInput,
1807
1911
  {
1808
1912
  label: "Endpoint URL",
1809
1913
  value: value.endpoint,
@@ -1813,7 +1917,7 @@ function ConnectionEditor({
1813
1917
  )
1814
1918
  ] }),
1815
1919
  /* @__PURE__ */ jsxRuntime.jsx(
1816
- chunkFSBR4RCK_js.FormInput,
1920
+ chunkK4M4B6ME_js.FormInput,
1817
1921
  {
1818
1922
  label: value.credentialRef ? "Rotate API key (leave blank to keep current)" : "API key",
1819
1923
  type: "password",
@@ -1824,7 +1928,7 @@ function ConnectionEditor({
1824
1928
  }
1825
1929
  ),
1826
1930
  /* @__PURE__ */ jsxRuntime.jsx(
1827
- chunkFSBR4RCK_js.FormInput,
1931
+ chunkK4M4B6ME_js.FormInput,
1828
1932
  {
1829
1933
  label: "Model filter (comma-separated, optional)",
1830
1934
  value: value.modelFilter,
@@ -1836,7 +1940,7 @@ function ConnectionEditor({
1836
1940
  /* @__PURE__ */ jsxRuntime.jsxs("details", { className: "rounded-xl border border-slate-200 bg-slate-50/60 p-3 text-sm dark:border-slate-700 dark:bg-slate-900/40", children: [
1837
1941
  /* @__PURE__ */ jsxRuntime.jsx("summary", { className: "cursor-pointer font-medium text-slate-700 dark:text-slate-200", children: "Advanced config (JSON)" }),
1838
1942
  /* @__PURE__ */ jsxRuntime.jsx("div", { className: "mt-3", children: /* @__PURE__ */ jsxRuntime.jsx(
1839
- chunkFSBR4RCK_js.FormTextarea,
1943
+ chunkK4M4B6ME_js.FormTextarea,
1840
1944
  {
1841
1945
  rows: 4,
1842
1946
  value: value.configJson,
@@ -1895,6 +1999,18 @@ function modelToFormValue(conn) {
1895
1999
  function CredentialsPageView({ labels, credentials, loading, onCreate, onRotate, onDisable }) {
1896
2000
  const [createOpen, setCreateOpen] = react.useState(false);
1897
2001
  const [rotateFor, setRotateFor] = react.useState(null);
2002
+ const [searchTerm, setSearchTerm] = react.useState("");
2003
+ const allCredentials = credentials;
2004
+ const filteredCredentials = searchTerm.trim() ? allCredentials.filter((secret) => secret.name.toLowerCase().includes(searchTerm.trim().toLowerCase())) : allCredentials;
2005
+ const isEmpty = allCredentials.length === 0;
2006
+ const summary = !isEmpty ? /* @__PURE__ */ jsxRuntime.jsx(
2007
+ chunkK4M4B6ME_js.SearchBar,
2008
+ {
2009
+ searchTerm,
2010
+ onSearchChange: setSearchTerm,
2011
+ placeholder: labels.searchPlaceholder ?? labels.title
2012
+ }
2013
+ ) : void 0;
1898
2014
  const typeOptions = [
1899
2015
  { value: "generic", label: labels.typeGeneric },
1900
2016
  { value: "api_key", label: labels.typeApiKey },
@@ -1902,7 +2018,7 @@ function CredentialsPageView({ labels, credentials, loading, onCreate, onRotate,
1902
2018
  { value: "password", label: labels.typePassword }
1903
2019
  ];
1904
2020
  const hero = /* @__PURE__ */ jsxRuntime.jsx(
1905
- chunkFSBR4RCK_js.HeroSection,
2021
+ chunkK4M4B6ME_js.HeroSection,
1906
2022
  {
1907
2023
  icon: /* @__PURE__ */ jsxRuntime.jsx(outline.KeyIcon, { className: "h-5 w-5" }),
1908
2024
  label: labels.title,
@@ -1910,7 +2026,7 @@ function CredentialsPageView({ labels, credentials, loading, onCreate, onRotate,
1910
2026
  subtitle: labels.subtitle,
1911
2027
  gradient: "from-rose-500 to-orange-600",
1912
2028
  toolbar: /* @__PURE__ */ jsxRuntime.jsx(
1913
- chunkFSBR4RCK_js.CreateActionButton,
2029
+ chunkK4M4B6ME_js.CreateActionButton,
1914
2030
  {
1915
2031
  mode: "desktop",
1916
2032
  label: labels.addCredential,
@@ -1921,7 +2037,7 @@ function CredentialsPageView({ labels, credentials, loading, onCreate, onRotate,
1921
2037
  }
1922
2038
  );
1923
2039
  const mobileAction = /* @__PURE__ */ jsxRuntime.jsx(
1924
- chunkFSBR4RCK_js.CreateActionButton,
2040
+ chunkK4M4B6ME_js.CreateActionButton,
1925
2041
  {
1926
2042
  mode: "mobile",
1927
2043
  label: labels.addCredential,
@@ -1929,23 +2045,23 @@ function CredentialsPageView({ labels, credentials, loading, onCreate, onRotate,
1929
2045
  accent: "rose"
1930
2046
  }
1931
2047
  );
1932
- const content = loading ? /* @__PURE__ */ jsxRuntime.jsx(chunkFSBR4RCK_js.PageLoadingState, {}) : credentials.length === 0 ? /* @__PURE__ */ jsxRuntime.jsx(chunkFSBR4RCK_js.PageEmptyState, { title: labels.empty, message: labels.subtitle, iconName: "folder-open" }) : /* @__PURE__ */ jsxRuntime.jsx("div", { className: "grid grid-cols-1 gap-4 sm:grid-cols-2 lg:grid-cols-3", children: credentials.map((secret) => /* @__PURE__ */ jsxRuntime.jsxs(
1933
- chunkFSBR4RCK_js.EntityCard,
2048
+ const content = loading ? /* @__PURE__ */ jsxRuntime.jsx(chunkK4M4B6ME_js.PageLoadingState, {}) : isEmpty ? /* @__PURE__ */ jsxRuntime.jsx(chunkK4M4B6ME_js.PageEmptyState, { title: labels.empty, message: labels.subtitle, iconName: "folder-open" }) : /* @__PURE__ */ jsxRuntime.jsx("div", { className: "grid grid-cols-1 gap-4 sm:grid-cols-2 lg:grid-cols-3", children: filteredCredentials.map((secret) => /* @__PURE__ */ jsxRuntime.jsxs(
2049
+ chunkK4M4B6ME_js.EntityCard,
1934
2050
  {
1935
2051
  accentGradient: "from-rose-500 to-orange-700",
1936
2052
  icon: /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex h-11 w-11 items-center justify-center rounded-lg bg-rose-500/10 text-rose-600 dark:bg-rose-500/20 dark:text-rose-400", children: /* @__PURE__ */ jsxRuntime.jsx(outline.KeyIcon, { className: "h-6 w-6" }) }),
1937
2053
  title: secret.name,
1938
2054
  subtitle: secret.secretType,
1939
- status: /* @__PURE__ */ jsxRuntime.jsx(chunkFSBR4RCK_js.Badge, { color: secret.disabled ? "zinc" : "emerald", children: secret.disabled ? labels.disable : "Active" }),
2055
+ status: /* @__PURE__ */ jsxRuntime.jsx(chunkK4M4B6ME_js.Badge, { color: secret.disabled ? "zinc" : "emerald", children: secret.disabled ? labels.disable : "Active" }),
1940
2056
  footer: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center justify-between gap-2", children: [
1941
- /* @__PURE__ */ jsxRuntime.jsx(chunkFSBR4RCK_js.CopyableId, { id: secret.secretId }),
2057
+ /* @__PURE__ */ jsxRuntime.jsx(chunkK4M4B6ME_js.CopyableId, { id: secret.secretId }),
1942
2058
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex gap-2", children: [
1943
- /* @__PURE__ */ jsxRuntime.jsxs(chunkFSBR4RCK_js.Button, { type: "button", size: "sm", outline: true, onClick: () => setRotateFor(secret), children: [
2059
+ /* @__PURE__ */ jsxRuntime.jsxs(chunkK4M4B6ME_js.Button, { type: "button", size: "sm", outline: true, onClick: () => setRotateFor(secret), children: [
1944
2060
  /* @__PURE__ */ jsxRuntime.jsx(outline.ArrowPathIcon, { className: "mr-1 h-3.5 w-3.5" }),
1945
2061
  labels.rotate
1946
2062
  ] }),
1947
2063
  !secret.disabled && /* @__PURE__ */ jsxRuntime.jsxs(
1948
- chunkFSBR4RCK_js.Button,
2064
+ chunkK4M4B6ME_js.Button,
1949
2065
  {
1950
2066
  type: "button",
1951
2067
  size: "sm",
@@ -1974,9 +2090,9 @@ function CredentialsPageView({ labels, credentials, loading, onCreate, onRotate,
1974
2090
  secret.secretId
1975
2091
  )) });
1976
2092
  return /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
1977
- /* @__PURE__ */ jsxRuntime.jsx(chunkFSBR4RCK_js.ManagementPageLayout, { hero, content, mobileAction }),
2093
+ /* @__PURE__ */ jsxRuntime.jsx(chunkK4M4B6ME_js.ManagementPageLayout, { hero, summary, content, mobileAction }),
1978
2094
  /* @__PURE__ */ jsxRuntime.jsx(
1979
- chunkFSBR4RCK_js.GlassModal,
2095
+ chunkK4M4B6ME_js.GlassModal,
1980
2096
  {
1981
2097
  open: createOpen,
1982
2098
  onClose: () => setCreateOpen(false),
@@ -1994,16 +2110,16 @@ function CredentialsPageView({ labels, credentials, loading, onCreate, onRotate,
1994
2110
  onCreate({ name, value, secretType, description });
1995
2111
  setCreateOpen(false);
1996
2112
  },
1997
- children: /* @__PURE__ */ jsxRuntime.jsxs(chunkFSBR4RCK_js.FormGrid, { children: [
1998
- /* @__PURE__ */ jsxRuntime.jsx(chunkFSBR4RCK_js.FormInput, { name: "name", label: labels.name, placeholder: labels.namePlaceholder, required: true }),
1999
- /* @__PURE__ */ jsxRuntime.jsx(chunkFSBR4RCK_js.FormSelect, { name: "secretType", label: labels.type, options: typeOptions, defaultValue: "generic" }),
2000
- /* @__PURE__ */ jsxRuntime.jsx(chunkFSBR4RCK_js.FormInput, { name: "value", label: labels.value, placeholder: labels.valuePlaceholder, required: true, type: "password" }),
2001
- /* @__PURE__ */ jsxRuntime.jsx(chunkFSBR4RCK_js.FormTextarea, { name: "description", label: labels.description, placeholder: labels.descriptionPlaceholder, rows: 2 })
2113
+ children: /* @__PURE__ */ jsxRuntime.jsxs(chunkK4M4B6ME_js.FormGrid, { children: [
2114
+ /* @__PURE__ */ jsxRuntime.jsx(chunkK4M4B6ME_js.FormInput, { name: "name", label: labels.name, placeholder: labels.namePlaceholder, required: true }),
2115
+ /* @__PURE__ */ jsxRuntime.jsx(chunkK4M4B6ME_js.FormSelect, { name: "secretType", label: labels.type, options: typeOptions, defaultValue: "generic" }),
2116
+ /* @__PURE__ */ jsxRuntime.jsx(chunkK4M4B6ME_js.FormInput, { name: "value", label: labels.value, placeholder: labels.valuePlaceholder, required: true, type: "password" }),
2117
+ /* @__PURE__ */ jsxRuntime.jsx(chunkK4M4B6ME_js.FormTextarea, { name: "description", label: labels.description, placeholder: labels.descriptionPlaceholder, rows: 2 })
2002
2118
  ] })
2003
2119
  }
2004
2120
  ),
2005
2121
  /* @__PURE__ */ jsxRuntime.jsx(
2006
- chunkFSBR4RCK_js.GlassModal,
2122
+ chunkK4M4B6ME_js.GlassModal,
2007
2123
  {
2008
2124
  open: rotateFor !== null,
2009
2125
  onClose: () => setRotateFor(null),
@@ -2018,7 +2134,7 @@ function CredentialsPageView({ labels, credentials, loading, onCreate, onRotate,
2018
2134
  onRotate(rotateFor, value);
2019
2135
  setRotateFor(null);
2020
2136
  },
2021
- children: /* @__PURE__ */ jsxRuntime.jsx(chunkFSBR4RCK_js.FormGrid, { children: /* @__PURE__ */ jsxRuntime.jsx(chunkFSBR4RCK_js.FormInput, { name: "value", label: labels.value, placeholder: labels.valuePlaceholder, required: true, type: "password" }) })
2137
+ children: /* @__PURE__ */ jsxRuntime.jsx(chunkK4M4B6ME_js.FormGrid, { children: /* @__PURE__ */ jsxRuntime.jsx(chunkK4M4B6ME_js.FormInput, { name: "value", label: labels.value, placeholder: labels.valuePlaceholder, required: true, type: "password" }) })
2022
2138
  }
2023
2139
  )
2024
2140
  ] });
@@ -2026,31 +2142,31 @@ function CredentialsPageView({ labels, credentials, loading, onCreate, onRotate,
2026
2142
 
2027
2143
  Object.defineProperty(exports, "RolesPageView", {
2028
2144
  enumerable: true,
2029
- get: function () { return chunkRLLP7VQJ_js.RolesPageView; }
2145
+ get: function () { return chunkU6XA2OYE_js.RolesPageView; }
2030
2146
  });
2031
2147
  Object.defineProperty(exports, "UsersPageView", {
2032
2148
  enumerable: true,
2033
- get: function () { return chunkRLLP7VQJ_js.UsersPageView; }
2149
+ get: function () { return chunkU6XA2OYE_js.UsersPageView; }
2034
2150
  });
2035
2151
  Object.defineProperty(exports, "DIALECT_CATEGORIES", {
2036
2152
  enumerable: true,
2037
- get: function () { return chunkYV7F7IXG_js.DIALECT_CATEGORIES; }
2153
+ get: function () { return chunkSFFSXC5E_js.DIALECT_CATEGORIES; }
2038
2154
  });
2039
2155
  Object.defineProperty(exports, "DatasourceFormModal", {
2040
2156
  enumerable: true,
2041
- get: function () { return chunkYV7F7IXG_js.DatasourceFormModal; }
2157
+ get: function () { return chunkSFFSXC5E_js.DatasourceFormModal; }
2042
2158
  });
2043
2159
  Object.defineProperty(exports, "DatasourceModal", {
2044
2160
  enumerable: true,
2045
- get: function () { return chunkYV7F7IXG_js.DatasourceModal; }
2161
+ get: function () { return chunkSFFSXC5E_js.DatasourceModal; }
2046
2162
  });
2047
2163
  Object.defineProperty(exports, "findCategory", {
2048
2164
  enumerable: true,
2049
- get: function () { return chunkYV7F7IXG_js.findCategory; }
2165
+ get: function () { return chunkSFFSXC5E_js.findCategory; }
2050
2166
  });
2051
2167
  Object.defineProperty(exports, "findDialect", {
2052
2168
  enumerable: true,
2053
- get: function () { return chunkYV7F7IXG_js.findDialect; }
2169
+ get: function () { return chunkSFFSXC5E_js.findDialect; }
2054
2170
  });
2055
2171
  exports.AgentsConfigPageView = AgentsConfigPageView;
2056
2172
  exports.AgentsIndexPageView = AgentsIndexPageView;