@burdenoff/microfe-botmanor 2026.1027.2 → 2026.1027.3
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.
- package/dist/botlit/BotlitRoutes.js +142 -132
- package/dist/botlit/BotlitRoutes.js.map +1 -1
- package/dist/botlit/components/AgentApprovalPanel.js +144 -126
- package/dist/botlit/components/AgentApprovalPanel.js.map +1 -1
- package/dist/botlit/components/ModelRegistrationPanel.js +4 -4
- package/dist/botlit/components/VersionHistoryPanel.js +92 -83
- package/dist/botlit/components/VersionHistoryPanel.js.map +1 -1
- package/dist/botlit/pages/A2AAgentDetailPage.js +212 -203
- package/dist/botlit/pages/A2AAgentDetailPage.js.map +1 -1
- package/dist/botlit/pages/A2ARegistryPage.js +129 -117
- package/dist/botlit/pages/A2ARegistryPage.js.map +1 -1
- package/dist/botlit/pages/AgentApprovalsPage.js +122 -110
- package/dist/botlit/pages/AgentApprovalsPage.js.map +1 -1
- package/dist/botlit/pages/AgentBuilderPage.js +18 -18
- package/dist/botlit/pages/AgentDetailPage.js +298 -273
- package/dist/botlit/pages/AgentDetailPage.js.map +1 -1
- package/dist/botlit/pages/AgentsListPage.js +145 -121
- package/dist/botlit/pages/AgentsListPage.js.map +1 -1
- package/dist/botlit/pages/BotChannelsTab.js +238 -226
- package/dist/botlit/pages/BotChannelsTab.js.map +1 -1
- package/dist/botlit/pages/BotDetailPage.js +307 -288
- package/dist/botlit/pages/BotDetailPage.js.map +1 -1
- package/dist/botlit/pages/BotWorkflowTab.js +125 -116
- package/dist/botlit/pages/BotWorkflowTab.js.map +1 -1
- package/dist/botlit/pages/BotsListPage.js +159 -144
- package/dist/botlit/pages/BotsListPage.js.map +1 -1
- package/dist/botlit/pages/BucketsPage.js +279 -258
- package/dist/botlit/pages/BucketsPage.js.map +1 -1
- package/dist/botlit/pages/ChannelDetailPage.js +346 -328
- package/dist/botlit/pages/ChannelDetailPage.js.map +1 -1
- package/dist/botlit/pages/ChannelRoutesPage.js +10 -10
- package/dist/botlit/pages/ChannelsPage.js +163 -148
- package/dist/botlit/pages/ChannelsPage.js.map +1 -1
- package/dist/botlit/pages/DashboardPage.js +129 -114
- package/dist/botlit/pages/DashboardPage.js.map +1 -1
- package/dist/botlit/pages/ExecutionDetailPage.js +145 -139
- package/dist/botlit/pages/ExecutionDetailPage.js.map +1 -1
- package/dist/botlit/pages/ExecutionsPage.js +14 -14
- package/dist/botlit/pages/InstalledPackagesPage.js +245 -227
- package/dist/botlit/pages/InstalledPackagesPage.js.map +1 -1
- package/dist/botlit/pages/KnowledgeBaseDetailPage.js +168 -156
- package/dist/botlit/pages/KnowledgeBaseDetailPage.js.map +1 -1
- package/dist/botlit/pages/KnowledgeBasesPage.js +91 -79
- package/dist/botlit/pages/KnowledgeBasesPage.js.map +1 -1
- package/dist/botlit/pages/MCPServerDetailPage.js +200 -188
- package/dist/botlit/pages/MCPServerDetailPage.js.map +1 -1
- package/dist/botlit/pages/MCPServersPage.js +170 -155
- package/dist/botlit/pages/MCPServersPage.js.map +1 -1
- package/dist/botlit/pages/PoliciesPage.js +113 -104
- package/dist/botlit/pages/PoliciesPage.js.map +1 -1
- package/dist/botlit/pages/PolicyDetailPage.js +145 -133
- package/dist/botlit/pages/PolicyDetailPage.js.map +1 -1
- package/dist/botlit/pages/PromptStudioPage.js +106 -97
- package/dist/botlit/pages/PromptStudioPage.js.map +1 -1
- package/dist/botlit/pages/PromptTemplateDetailPage.js +359 -347
- package/dist/botlit/pages/PromptTemplateDetailPage.js.map +1 -1
- package/dist/botlit/pages/PromptTemplatesPage.js +127 -112
- package/dist/botlit/pages/PromptTemplatesPage.js.map +1 -1
- package/dist/botlit/pages/RetrievalProfileDetailPage.js +219 -210
- package/dist/botlit/pages/RetrievalProfileDetailPage.js.map +1 -1
- package/dist/botlit/pages/RetrievalProfilesPage.js +112 -103
- package/dist/botlit/pages/RetrievalProfilesPage.js.map +1 -1
- package/dist/botlit/pages/SettingsPage.js +264 -252
- package/dist/botlit/pages/SettingsPage.js.map +1 -1
- package/dist/botlit/pages/SkillDetailPage.js +235 -226
- package/dist/botlit/pages/SkillDetailPage.js.map +1 -1
- package/dist/botlit/pages/SkillsPage.js +115 -106
- package/dist/botlit/pages/SkillsPage.js.map +1 -1
- package/dist/botlit/pages/StorePackageDetailPage.js +194 -188
- package/dist/botlit/pages/StorePackageDetailPage.js.map +1 -1
- package/dist/botlit/pages/StorePage.js +161 -155
- package/dist/botlit/pages/StorePage.js.map +1 -1
- package/dist/botlit/permissions/PermissionRequired.js +45 -0
- package/dist/botlit/permissions/PermissionRequired.js.map +1 -0
- package/dist/botlit/permissions/botmanorPermissions.js +72 -0
- package/dist/botlit/permissions/botmanorPermissions.js.map +1 -0
- package/dist/botlit/permissions/index.js +3 -0
- package/dist/botlit/permissions/useBotmanorPermissions.js +19 -0
- package/dist/botlit/permissions/useBotmanorPermissions.js.map +1 -0
- package/package.json +1 -1
|
@@ -1,15 +1,18 @@
|
|
|
1
1
|
import { useTr as e } from "../../shared/hooks/useTr.js";
|
|
2
2
|
import { useConfigureLLMProvider as t, useLLMModels as n, useLLMProviders as r } from "../hooks/useLLMProviders.js";
|
|
3
3
|
import { cn as i } from "../utils/cn.js";
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
6
|
-
import {
|
|
7
|
-
import {
|
|
8
|
-
import
|
|
9
|
-
import {
|
|
10
|
-
import {
|
|
4
|
+
import { BOTMANOR_PERMISSIONS as a } from "../permissions/botmanorPermissions.js";
|
|
5
|
+
import { BotmanorPermissionGate as o } from "../permissions/useBotmanorPermissions.js";
|
|
6
|
+
import { PageLayout as ee } from "../components/PageLayout.js";
|
|
7
|
+
import { Button as s } from "../components/Button.js";
|
|
8
|
+
import "../permissions/index.js";
|
|
9
|
+
import { Card as c, CardContent as l, CardDescription as u, CardHeader as d, CardTitle as f } from "../components/Card.js";
|
|
10
|
+
import { Badge as p } from "../components/Badge.js";
|
|
11
|
+
import { FormField as m, Input as h } from "../components/Input.js";
|
|
12
|
+
import { toUnion as g } from "../utils/unions.js";
|
|
13
|
+
import { ModelRegistrationPanel as te } from "../components/ModelRegistrationPanel.js";
|
|
11
14
|
import { useState as _ } from "react";
|
|
12
|
-
import { PagePurpose as
|
|
15
|
+
import { PagePurpose as ne } from "@burdenoff/fe-libs/ui";
|
|
13
16
|
import { jsx as v, jsxs as y } from "react/jsx-runtime";
|
|
14
17
|
import { Brain as b, ExternalLink as x, Key as S, Link2 as C, Save as w } from "lucide-react";
|
|
15
18
|
import { toast as T } from "sonner";
|
|
@@ -23,13 +26,13 @@ var E = [
|
|
|
23
26
|
"CUSTOM"
|
|
24
27
|
];
|
|
25
28
|
function D(e) {
|
|
26
|
-
return
|
|
29
|
+
return g(e.toUpperCase(), E, "CUSTOM");
|
|
27
30
|
}
|
|
28
31
|
var O = () => {
|
|
29
|
-
let
|
|
30
|
-
return /* @__PURE__ */ v(
|
|
31
|
-
title:
|
|
32
|
-
description:
|
|
32
|
+
let g = e(), { data: E, refetch: O, loading: k, error: A } = r(), { configureProvider: j, isConfiguring: re } = t(), { data: M, refetch: N, loading: P, error: F } = n(), I = k || P, L = A || F, [R, z] = _(""), [B, V] = _(!0), [H, U] = _("openai"), [W, G] = _(null), [K, q] = _("apikey"), [J, Y] = _(""), [X, Z] = _("ap-south-1"), Q = H === "aws_bedrock", $ = Q && K === "iam", ie = /^[a-z]{2}(?:-[a-z]+)+-\d+$/.test(X.trim());
|
|
33
|
+
return /* @__PURE__ */ v(ee, {
|
|
34
|
+
title: g("botlit.settings.title", "Settings"),
|
|
35
|
+
description: g("botlit.settings.description", "Configure your BotManor workspace settings"),
|
|
33
36
|
children: /* @__PURE__ */ y("div", {
|
|
34
37
|
className: "space-y-6",
|
|
35
38
|
children: [
|
|
@@ -39,22 +42,22 @@ var O = () => {
|
|
|
39
42
|
}),
|
|
40
43
|
L && /* @__PURE__ */ y("div", {
|
|
41
44
|
role: "alert",
|
|
42
|
-
children: [/* @__PURE__ */ v("p", { children: "Could not load providers and models. Try loading the catalog again." }), /* @__PURE__ */ v(
|
|
45
|
+
children: [/* @__PURE__ */ v("p", { children: "Could not load providers and models. Try loading the catalog again." }), /* @__PURE__ */ v(s, {
|
|
43
46
|
variant: "secondary",
|
|
44
47
|
onClick: () => {
|
|
45
|
-
O(),
|
|
48
|
+
O(), N();
|
|
46
49
|
},
|
|
47
50
|
children: "Retry model catalog"
|
|
48
51
|
})]
|
|
49
52
|
}),
|
|
50
|
-
/* @__PURE__ */ v(
|
|
53
|
+
/* @__PURE__ */ v(ne, {
|
|
51
54
|
icon: /* @__PURE__ */ v(S, { size: 18 }),
|
|
52
|
-
children:
|
|
55
|
+
children: g("botlit.settings.purpose", "Workspace-wide settings for LLM Providers — connect at least one model provider (OpenAI, Anthropic, Google and others) so your agents have a brain to think with.")
|
|
53
56
|
}),
|
|
54
|
-
/* @__PURE__ */ y(
|
|
57
|
+
/* @__PURE__ */ y(c, {
|
|
55
58
|
treatment: "glass",
|
|
56
59
|
glow: !0,
|
|
57
|
-
children: [/* @__PURE__ */ y(
|
|
60
|
+
children: [/* @__PURE__ */ y(d, { children: [/* @__PURE__ */ v(f, { children: g("botlit.settings.providers.title", "LLM Providers") }), /* @__PURE__ */ v(u, { children: g("botlit.settings.providers.description", "Configure API keys for AI model providers") })] }), /* @__PURE__ */ v(l, {
|
|
58
61
|
className: "space-y-4",
|
|
59
62
|
children: E?.map((e) => /* @__PURE__ */ y("div", {
|
|
60
63
|
className: "flex items-center justify-between p-4 border border-border-subtle rounded-lg",
|
|
@@ -70,44 +73,47 @@ var O = () => {
|
|
|
70
73
|
}),
|
|
71
74
|
/* @__PURE__ */ v("p", {
|
|
72
75
|
className: "text-sm text-text-secondary",
|
|
73
|
-
children:
|
|
76
|
+
children: g("botlit.settings.providers.type", "Type: {{type}}", { type: e.type })
|
|
74
77
|
}),
|
|
75
78
|
e.connectionId && /* @__PURE__ */ v("p", {
|
|
76
79
|
className: "text-xs text-text-secondary mt-0.5",
|
|
77
|
-
children:
|
|
80
|
+
children: g("botlit.settings.providers.connectedViaIntegrations", "Connected via Integrations")
|
|
78
81
|
}),
|
|
79
82
|
!e.connectionId && e.credentialsHash && /* @__PURE__ */ v("p", {
|
|
80
83
|
className: "text-xs text-text-secondary mt-0.5",
|
|
81
|
-
children:
|
|
84
|
+
children: g("botlit.settings.providers.apiKeyStored", "API key stored locally")
|
|
82
85
|
})
|
|
83
86
|
] })]
|
|
84
87
|
}), /* @__PURE__ */ y("div", {
|
|
85
88
|
className: "flex items-center gap-3",
|
|
86
89
|
children: [
|
|
87
|
-
e.connectionId && /* @__PURE__ */ v(
|
|
90
|
+
e.connectionId && /* @__PURE__ */ v(p, {
|
|
88
91
|
variant: "default",
|
|
89
|
-
children:
|
|
92
|
+
children: g("botlit.settings.providers.integrationBadge", "Integration")
|
|
90
93
|
}),
|
|
91
|
-
/* @__PURE__ */ v(
|
|
94
|
+
/* @__PURE__ */ v(p, {
|
|
92
95
|
variant: e.isActive ? "success" : "secondary",
|
|
93
|
-
children: e.isActive ?
|
|
96
|
+
children: e.isActive ? g("botlit.settings.providers.active", "Active") : g("botlit.settings.providers.inactive", "Inactive")
|
|
94
97
|
}),
|
|
95
|
-
/* @__PURE__ */ v(
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
98
|
+
/* @__PURE__ */ v(o, {
|
|
99
|
+
permission: a.LLM_UPDATE,
|
|
100
|
+
children: /* @__PURE__ */ v(s, {
|
|
101
|
+
variant: "outline",
|
|
102
|
+
size: "sm",
|
|
103
|
+
onClick: () => {
|
|
104
|
+
G(e.id), V(e.isActive), U(e.type.toLowerCase()), z(""), Y(e.connectionId || ""), q(e.type === "AWS_BEDROCK" && e.metadata?.awsAuthentication === "iam" ? "iam" : e.connectionId ? "integration" : "apikey"), Z(typeof e.metadata?.region == "string" ? e.metadata.region : "ap-south-1"), document.getElementById("provider-form")?.scrollIntoView({ behavior: "smooth" });
|
|
105
|
+
},
|
|
106
|
+
children: g("botlit.settings.actions.configure", "Configure")
|
|
107
|
+
})
|
|
102
108
|
})
|
|
103
109
|
]
|
|
104
110
|
})]
|
|
105
111
|
}, e.id))
|
|
106
112
|
})]
|
|
107
113
|
}),
|
|
108
|
-
/* @__PURE__ */ y(
|
|
114
|
+
/* @__PURE__ */ y(c, { children: [/* @__PURE__ */ y(d, { children: [/* @__PURE__ */ v(f, { children: g("botlit.settings.models.title", "LLM Models") }), /* @__PURE__ */ v(u, { children: g("botlit.settings.models.description", "Registered models across your providers") })] }), /* @__PURE__ */ v(l, {
|
|
109
115
|
className: "space-y-4",
|
|
110
|
-
children:
|
|
116
|
+
children: M && M.length > 0 ? M.map((e) => {
|
|
111
117
|
let t = E?.find((t) => t.id === e.providerId)?.name;
|
|
112
118
|
return /* @__PURE__ */ y("div", {
|
|
113
119
|
className: "flex items-center justify-between p-4 border border-border-subtle rounded-lg",
|
|
@@ -128,239 +134,245 @@ var O = () => {
|
|
|
128
134
|
/* @__PURE__ */ y("div", {
|
|
129
135
|
className: "flex gap-3 mt-1 text-xs text-text-secondary",
|
|
130
136
|
children: [
|
|
131
|
-
e.contextWindow != null && /* @__PURE__ */ v("span", { children:
|
|
132
|
-
e.maxOutputTokens != null && /* @__PURE__ */ v("span", { children:
|
|
133
|
-
e.inputPricePerMToken != null && /* @__PURE__ */ v("span", { children:
|
|
134
|
-
e.outputPricePerMToken != null && /* @__PURE__ */ v("span", { children:
|
|
137
|
+
e.contextWindow != null && /* @__PURE__ */ v("span", { children: g("botlit.settings.models.context", "Context: {{value}}K", { value: (e.contextWindow / 1e3).toFixed(0) }) }),
|
|
138
|
+
e.maxOutputTokens != null && /* @__PURE__ */ v("span", { children: g("botlit.settings.models.maxOut", "Max out: {{value}}K", { value: (e.maxOutputTokens / 1e3).toFixed(0) }) }),
|
|
139
|
+
e.inputPricePerMToken != null && /* @__PURE__ */ v("span", { children: g("botlit.settings.models.priceIn", "${{value}}/M in", { value: e.inputPricePerMToken }) }),
|
|
140
|
+
e.outputPricePerMToken != null && /* @__PURE__ */ v("span", { children: g("botlit.settings.models.priceOut", "${{value}}/M out", { value: e.outputPricePerMToken }) })
|
|
135
141
|
]
|
|
136
142
|
})
|
|
137
143
|
] })]
|
|
138
|
-
}), /* @__PURE__ */ v(
|
|
144
|
+
}), /* @__PURE__ */ v(p, {
|
|
139
145
|
variant: e.isActive ? "success" : "secondary",
|
|
140
|
-
children: e.isActive ?
|
|
146
|
+
children: e.isActive ? g("botlit.settings.providers.active", "Active") : g("botlit.settings.providers.inactive", "Inactive")
|
|
141
147
|
})]
|
|
142
148
|
}, e.id);
|
|
143
149
|
}) : !I && !L ? /* @__PURE__ */ v("p", {
|
|
144
150
|
className: "text-sm text-text-secondary text-center py-4",
|
|
145
|
-
children:
|
|
151
|
+
children: g("botlit.settings.models.empty", "No models registered yet.")
|
|
146
152
|
}) : null
|
|
147
153
|
})] }),
|
|
148
|
-
!I && !L && /* @__PURE__ */ v(
|
|
149
|
-
|
|
150
|
-
|
|
154
|
+
!I && !L && /* @__PURE__ */ v(o, {
|
|
155
|
+
permission: a.LLM_CREATE,
|
|
156
|
+
children: /* @__PURE__ */ v(te, {
|
|
157
|
+
providers: E ?? [],
|
|
158
|
+
onCreated: () => void N()
|
|
159
|
+
})
|
|
151
160
|
}),
|
|
152
|
-
/* @__PURE__ */
|
|
153
|
-
|
|
154
|
-
children:
|
|
155
|
-
|
|
156
|
-
children: [
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
children: [
|
|
218
|
-
Q && /* @__PURE__ */ y("label", {
|
|
219
|
-
className: i("flex items-center gap-2 px-4 py-3 border rounded-lg cursor-pointer flex-1", $ ? "border-primary bg-action-primary-bg/5" : "border-border-subtle hover:border-primary/50"),
|
|
220
|
-
children: [/* @__PURE__ */ v("input", {
|
|
221
|
-
type: "radio",
|
|
222
|
-
name: "credentialMethod",
|
|
223
|
-
value: "iam",
|
|
224
|
-
checked: $,
|
|
225
|
-
onChange: () => {
|
|
226
|
-
q("iam"), z(""), Y("");
|
|
227
|
-
}
|
|
228
|
-
}), "Managed AWS IAM"]
|
|
229
|
-
}),
|
|
230
|
-
/* @__PURE__ */ y("label", {
|
|
231
|
-
className: i("flex items-center gap-2 px-4 py-3 border rounded-lg cursor-pointer transition-colors flex-1", K === "integration" ? "border-primary bg-action-primary-bg/5" : "border-border-subtle hover:border-primary/50"),
|
|
232
|
-
children: [/* @__PURE__ */ v("input", {
|
|
233
|
-
type: "radio",
|
|
234
|
-
name: "credentialMethod",
|
|
235
|
-
value: "integration",
|
|
236
|
-
checked: K === "integration",
|
|
237
|
-
onChange: () => q("integration"),
|
|
238
|
-
className: "h-4 w-4"
|
|
239
|
-
}), /* @__PURE__ */ y("div", { children: [/* @__PURE__ */ v("p", {
|
|
240
|
-
className: "font-medium text-sm",
|
|
241
|
-
children: h("botlit.settings.form.integrationOption", "Connect via Integrations")
|
|
242
|
-
}), /* @__PURE__ */ v("p", {
|
|
243
|
-
className: "text-xs text-text-secondary",
|
|
244
|
-
children: h("botlit.settings.form.integrationHint", "Managed credentials (recommended)")
|
|
245
|
-
})] })]
|
|
246
|
-
}),
|
|
247
|
-
/* @__PURE__ */ y("label", {
|
|
248
|
-
className: i("flex items-center gap-2 px-4 py-3 border rounded-lg cursor-pointer transition-colors flex-1", K === "apikey" ? "border-primary bg-action-primary-bg/5" : "border-border-subtle hover:border-primary/50"),
|
|
249
|
-
children: [/* @__PURE__ */ v("input", {
|
|
250
|
-
type: "radio",
|
|
251
|
-
name: "credentialMethod",
|
|
252
|
-
value: "apikey",
|
|
253
|
-
checked: K === "apikey",
|
|
254
|
-
onChange: () => q("apikey"),
|
|
255
|
-
className: "h-4 w-4"
|
|
256
|
-
}), /* @__PURE__ */ y("div", { children: [/* @__PURE__ */ v("p", {
|
|
257
|
-
className: "font-medium text-sm",
|
|
258
|
-
children: h("botlit.settings.form.apiKeyOption", "Enter API Key")
|
|
259
|
-
}), /* @__PURE__ */ v("p", {
|
|
260
|
-
className: "text-xs text-text-secondary",
|
|
261
|
-
children: h("botlit.settings.form.apiKeyHint", "Paste key directly (legacy)")
|
|
262
|
-
})] })]
|
|
263
|
-
})
|
|
264
|
-
]
|
|
265
|
-
})
|
|
266
|
-
}),
|
|
267
|
-
K === "integration" && /* @__PURE__ */ y("div", {
|
|
268
|
-
className: "space-y-3",
|
|
269
|
-
children: [/* @__PURE__ */ v("div", {
|
|
270
|
-
className: "p-4 bg-bg-sunken/50 border border-border-subtle rounded-lg",
|
|
161
|
+
/* @__PURE__ */ v(o, {
|
|
162
|
+
permission: a.LLM_CREATE,
|
|
163
|
+
children: /* @__PURE__ */ y(c, {
|
|
164
|
+
id: "provider-form",
|
|
165
|
+
children: [/* @__PURE__ */ y(d, { children: [/* @__PURE__ */ v(f, { children: W ? g("botlit.settings.form.updateTitle", "Update Provider") : g("botlit.settings.form.addTitle", "Add Provider") }), /* @__PURE__ */ v(u, { children: W ? g("botlit.settings.form.updateDescription", "Update credentials for this provider") : g("botlit.settings.form.addDescription", "Configure a new LLM provider") })] }), /* @__PURE__ */ y(l, {
|
|
166
|
+
className: "space-y-4",
|
|
167
|
+
children: [
|
|
168
|
+
/* @__PURE__ */ v(m, {
|
|
169
|
+
label: g("botlit.settings.form.providerLabel", "Provider"),
|
|
170
|
+
children: /* @__PURE__ */ y("select", {
|
|
171
|
+
className: "flex h-10 w-full rounded-md border border-border-default bg-bg-surface px-3 py-2 text-sm",
|
|
172
|
+
value: H,
|
|
173
|
+
disabled: !!W,
|
|
174
|
+
onChange: (e) => {
|
|
175
|
+
U(e.target.value), q(e.target.value === "aws_bedrock" ? "iam" : "apikey"), z(""), Y("");
|
|
176
|
+
},
|
|
177
|
+
children: [
|
|
178
|
+
/* @__PURE__ */ v("option", {
|
|
179
|
+
value: "openai",
|
|
180
|
+
children: "OpenAI"
|
|
181
|
+
}),
|
|
182
|
+
/* @__PURE__ */ v("option", {
|
|
183
|
+
value: "anthropic",
|
|
184
|
+
children: "Anthropic"
|
|
185
|
+
}),
|
|
186
|
+
/* @__PURE__ */ v("option", {
|
|
187
|
+
value: "google",
|
|
188
|
+
children: "Google AI"
|
|
189
|
+
}),
|
|
190
|
+
/* @__PURE__ */ v("option", {
|
|
191
|
+
value: "azure_openai",
|
|
192
|
+
children: "Azure OpenAI"
|
|
193
|
+
}),
|
|
194
|
+
/* @__PURE__ */ v("option", {
|
|
195
|
+
value: "aws_bedrock",
|
|
196
|
+
children: "AWS Bedrock"
|
|
197
|
+
}),
|
|
198
|
+
/* @__PURE__ */ v("option", {
|
|
199
|
+
value: "custom",
|
|
200
|
+
children: "Custom"
|
|
201
|
+
})
|
|
202
|
+
]
|
|
203
|
+
})
|
|
204
|
+
}),
|
|
205
|
+
W && /* @__PURE__ */ y("label", {
|
|
206
|
+
className: "flex items-center gap-2 text-sm",
|
|
207
|
+
children: [/* @__PURE__ */ v("input", {
|
|
208
|
+
type: "checkbox",
|
|
209
|
+
checked: B,
|
|
210
|
+
onChange: (e) => V(e.target.checked)
|
|
211
|
+
}), "Provider enabled"]
|
|
212
|
+
}),
|
|
213
|
+
Q && /* @__PURE__ */ y(m, {
|
|
214
|
+
label: "AWS region",
|
|
215
|
+
children: [/* @__PURE__ */ v(h, {
|
|
216
|
+
"aria-label": "AWS region",
|
|
217
|
+
value: X,
|
|
218
|
+
onChange: (e) => Z(e.target.value)
|
|
219
|
+
}), /* @__PURE__ */ v("p", {
|
|
220
|
+
className: "text-sm text-text-secondary",
|
|
221
|
+
children: "Managed AWS IAM requires model access enabled for this workspace by your platform administrator."
|
|
222
|
+
})]
|
|
223
|
+
}),
|
|
224
|
+
/* @__PURE__ */ v(m, {
|
|
225
|
+
label: g("botlit.settings.form.credentialMethod", "Credential Method"),
|
|
271
226
|
children: /* @__PURE__ */ y("div", {
|
|
272
|
-
className: "flex
|
|
273
|
-
children: [
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
/* @__PURE__ */ v("
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
227
|
+
className: "flex flex-wrap gap-3",
|
|
228
|
+
children: [
|
|
229
|
+
Q && /* @__PURE__ */ y("label", {
|
|
230
|
+
className: i("flex items-center gap-2 px-4 py-3 border rounded-lg cursor-pointer flex-1", $ ? "border-primary bg-action-primary-bg/5" : "border-border-subtle hover:border-primary/50"),
|
|
231
|
+
children: [/* @__PURE__ */ v("input", {
|
|
232
|
+
type: "radio",
|
|
233
|
+
name: "credentialMethod",
|
|
234
|
+
value: "iam",
|
|
235
|
+
checked: $,
|
|
236
|
+
onChange: () => {
|
|
237
|
+
q("iam"), z(""), Y("");
|
|
238
|
+
}
|
|
239
|
+
}), "Managed AWS IAM"]
|
|
240
|
+
}),
|
|
241
|
+
/* @__PURE__ */ y("label", {
|
|
242
|
+
className: i("flex items-center gap-2 px-4 py-3 border rounded-lg cursor-pointer transition-colors flex-1", K === "integration" ? "border-primary bg-action-primary-bg/5" : "border-border-subtle hover:border-primary/50"),
|
|
243
|
+
children: [/* @__PURE__ */ v("input", {
|
|
244
|
+
type: "radio",
|
|
245
|
+
name: "credentialMethod",
|
|
246
|
+
value: "integration",
|
|
247
|
+
checked: K === "integration",
|
|
248
|
+
onChange: () => q("integration"),
|
|
249
|
+
className: "h-4 w-4"
|
|
250
|
+
}), /* @__PURE__ */ y("div", { children: [/* @__PURE__ */ v("p", {
|
|
251
|
+
className: "font-medium text-sm",
|
|
252
|
+
children: g("botlit.settings.form.integrationOption", "Connect via Integrations")
|
|
253
|
+
}), /* @__PURE__ */ v("p", {
|
|
281
254
|
className: "text-xs text-text-secondary",
|
|
282
|
-
children:
|
|
283
|
-
})
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
})
|
|
298
|
-
|
|
299
|
-
|
|
255
|
+
children: g("botlit.settings.form.integrationHint", "Managed credentials (recommended)")
|
|
256
|
+
})] })]
|
|
257
|
+
}),
|
|
258
|
+
/* @__PURE__ */ y("label", {
|
|
259
|
+
className: i("flex items-center gap-2 px-4 py-3 border rounded-lg cursor-pointer transition-colors flex-1", K === "apikey" ? "border-primary bg-action-primary-bg/5" : "border-border-subtle hover:border-primary/50"),
|
|
260
|
+
children: [/* @__PURE__ */ v("input", {
|
|
261
|
+
type: "radio",
|
|
262
|
+
name: "credentialMethod",
|
|
263
|
+
value: "apikey",
|
|
264
|
+
checked: K === "apikey",
|
|
265
|
+
onChange: () => q("apikey"),
|
|
266
|
+
className: "h-4 w-4"
|
|
267
|
+
}), /* @__PURE__ */ y("div", { children: [/* @__PURE__ */ v("p", {
|
|
268
|
+
className: "font-medium text-sm",
|
|
269
|
+
children: g("botlit.settings.form.apiKeyOption", "Enter API Key")
|
|
270
|
+
}), /* @__PURE__ */ v("p", {
|
|
271
|
+
className: "text-xs text-text-secondary",
|
|
272
|
+
children: g("botlit.settings.form.apiKeyHint", "Paste key directly (legacy)")
|
|
273
|
+
})] })]
|
|
274
|
+
})
|
|
275
|
+
]
|
|
300
276
|
})
|
|
301
|
-
}),
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
277
|
+
}),
|
|
278
|
+
K === "integration" && /* @__PURE__ */ y("div", {
|
|
279
|
+
className: "space-y-3",
|
|
280
|
+
children: [/* @__PURE__ */ v("div", {
|
|
281
|
+
className: "p-4 bg-bg-sunken/50 border border-border-subtle rounded-lg",
|
|
282
|
+
children: /* @__PURE__ */ y("div", {
|
|
283
|
+
className: "flex items-start gap-3",
|
|
284
|
+
children: [/* @__PURE__ */ v(C, { className: "h-5 w-5 text-primary mt-0.5 flex-shrink-0" }), /* @__PURE__ */ y("div", {
|
|
285
|
+
className: "space-y-2 flex-1",
|
|
286
|
+
children: [
|
|
287
|
+
/* @__PURE__ */ v("p", {
|
|
288
|
+
className: "text-sm font-medium",
|
|
289
|
+
children: g("botlit.settings.form.integrationTitle", "Integration Connection")
|
|
290
|
+
}),
|
|
291
|
+
/* @__PURE__ */ v("p", {
|
|
292
|
+
className: "text-xs text-text-secondary",
|
|
293
|
+
children: g("botlit.settings.form.integrationDescription", "Create a connection in the Integrations module, then paste the Connection ID here. This stores your API key securely in the Integrations vault.")
|
|
294
|
+
}),
|
|
295
|
+
/* @__PURE__ */ v("div", {
|
|
296
|
+
className: "flex gap-2 mt-2",
|
|
297
|
+
children: /* @__PURE__ */ y(s, {
|
|
298
|
+
variant: "outline",
|
|
299
|
+
size: "sm",
|
|
300
|
+
onClick: () => {
|
|
301
|
+
window.open("/integrations/connections", "_blank");
|
|
302
|
+
},
|
|
303
|
+
children: [/* @__PURE__ */ v(x, {
|
|
304
|
+
size: 14,
|
|
305
|
+
className: "mr-1.5"
|
|
306
|
+
}), g("botlit.settings.form.openIntegrations", "Open Integrations")]
|
|
307
|
+
})
|
|
308
|
+
})
|
|
309
|
+
]
|
|
310
|
+
})]
|
|
311
|
+
})
|
|
312
|
+
}), /* @__PURE__ */ v(m, {
|
|
313
|
+
label: g("botlit.settings.form.connectionIdPlaceholder", "Connection ID"),
|
|
314
|
+
children: /* @__PURE__ */ v(h, {
|
|
315
|
+
placeholder: g("botlit.settings.form.connectionIdPlaceholder", "Paste connection ID from Integrations..."),
|
|
316
|
+
value: J,
|
|
317
|
+
onChange: (e) => Y(e.target.value)
|
|
318
|
+
})
|
|
319
|
+
})]
|
|
320
|
+
}),
|
|
321
|
+
K === "apikey" && /* @__PURE__ */ v(m, {
|
|
322
|
+
label: g("botlit.settings.form.apiKeyLabel", "API Key"),
|
|
323
|
+
children: /* @__PURE__ */ v(h, {
|
|
324
|
+
type: "password",
|
|
325
|
+
placeholder: g("botlit.settings.form.apiKeyPlaceholder", "sk-..."),
|
|
326
|
+
value: R,
|
|
327
|
+
onChange: (e) => z(e.target.value)
|
|
307
328
|
})
|
|
308
|
-
})
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
329
|
+
}),
|
|
330
|
+
/* @__PURE__ */ y("div", {
|
|
331
|
+
className: "flex gap-2",
|
|
332
|
+
children: [/* @__PURE__ */ v(s, {
|
|
333
|
+
leftIcon: /* @__PURE__ */ v(w, { size: 16 }),
|
|
334
|
+
isLoading: re,
|
|
335
|
+
disabled: Q && !ie || ($ ? !1 : K === "apikey" ? !R.trim() : !J.trim()),
|
|
336
|
+
onClick: async () => {
|
|
337
|
+
try {
|
|
338
|
+
let e = H.charAt(0).toUpperCase() + H.slice(1), t = K === "apikey" && R ? { apiKey: R } : void 0, n = K === "integration" ? J : null, r = E?.find((e) => e.id === W)?.metadata ?? {}, i = Q ? {
|
|
339
|
+
...r,
|
|
340
|
+
region: X.trim(),
|
|
341
|
+
awsAuthentication: $ ? "iam" : "credentials"
|
|
342
|
+
} : r;
|
|
343
|
+
W ? await j({
|
|
344
|
+
name: e,
|
|
345
|
+
type: D(H),
|
|
346
|
+
connectionId: n,
|
|
347
|
+
credentials: t,
|
|
348
|
+
metadata: i,
|
|
349
|
+
isActive: B
|
|
350
|
+
}, W) : await j({
|
|
351
|
+
name: e,
|
|
352
|
+
type: D(H),
|
|
353
|
+
connectionId: n,
|
|
354
|
+
credentials: t,
|
|
355
|
+
metadata: i
|
|
356
|
+
}), z(""), Y(""), G(null), await O();
|
|
357
|
+
let a = H.charAt(0).toUpperCase() + H.slice(1);
|
|
358
|
+
T.success(W ? g("botlit.settings.form.updateSuccess", "{{provider}} provider updated successfully", { provider: a }) : g("botlit.settings.form.addSuccess", "{{provider}} provider added successfully", { provider: a }));
|
|
359
|
+
} catch (e) {
|
|
360
|
+
let t = e instanceof Error ? e.message : g("botlit.settings.form.saveError", "Failed to save provider");
|
|
361
|
+
T.error(t);
|
|
362
|
+
}
|
|
363
|
+
},
|
|
364
|
+
children: W ? g("botlit.settings.form.updateProvider", "Update Provider") : g("botlit.settings.form.saveProvider", "Save Provider")
|
|
365
|
+
}), W && /* @__PURE__ */ v(s, {
|
|
366
|
+
variant: "outline",
|
|
367
|
+
onClick: () => {
|
|
368
|
+
G(null), z(""), Y(""), q("apikey"), U("openai");
|
|
369
|
+
},
|
|
370
|
+
children: g("botlit.settings.form.cancel", "Cancel")
|
|
371
|
+
})]
|
|
317
372
|
})
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
children: [/* @__PURE__ */ v(d, {
|
|
322
|
-
leftIcon: /* @__PURE__ */ v(w, { size: 16 }),
|
|
323
|
-
isLoading: M,
|
|
324
|
-
disabled: Q && !ne || ($ ? !1 : K === "apikey" ? !R.trim() : !J.trim()),
|
|
325
|
-
onClick: async () => {
|
|
326
|
-
try {
|
|
327
|
-
let e = H.charAt(0).toUpperCase() + H.slice(1), t = K === "apikey" && R ? { apiKey: R } : void 0, n = K === "integration" ? J : null, r = E?.find((e) => e.id === W)?.metadata ?? {}, i = Q ? {
|
|
328
|
-
...r,
|
|
329
|
-
region: X.trim(),
|
|
330
|
-
awsAuthentication: $ ? "iam" : "credentials"
|
|
331
|
-
} : r;
|
|
332
|
-
W ? await j({
|
|
333
|
-
name: e,
|
|
334
|
-
type: D(H),
|
|
335
|
-
connectionId: n,
|
|
336
|
-
credentials: t,
|
|
337
|
-
metadata: i,
|
|
338
|
-
isActive: B
|
|
339
|
-
}, W) : await j({
|
|
340
|
-
name: e,
|
|
341
|
-
type: D(H),
|
|
342
|
-
connectionId: n,
|
|
343
|
-
credentials: t,
|
|
344
|
-
metadata: i
|
|
345
|
-
}), z(""), Y(""), G(null), await O();
|
|
346
|
-
let a = H.charAt(0).toUpperCase() + H.slice(1);
|
|
347
|
-
T.success(W ? h("botlit.settings.form.updateSuccess", "{{provider}} provider updated successfully", { provider: a }) : h("botlit.settings.form.addSuccess", "{{provider}} provider added successfully", { provider: a }));
|
|
348
|
-
} catch (e) {
|
|
349
|
-
let t = e instanceof Error ? e.message : h("botlit.settings.form.saveError", "Failed to save provider");
|
|
350
|
-
T.error(t);
|
|
351
|
-
}
|
|
352
|
-
},
|
|
353
|
-
children: W ? h("botlit.settings.form.updateProvider", "Update Provider") : h("botlit.settings.form.saveProvider", "Save Provider")
|
|
354
|
-
}), W && /* @__PURE__ */ v(d, {
|
|
355
|
-
variant: "outline",
|
|
356
|
-
onClick: () => {
|
|
357
|
-
G(null), z(""), Y(""), q("apikey"), U("openai");
|
|
358
|
-
},
|
|
359
|
-
children: h("botlit.settings.form.cancel", "Cancel")
|
|
360
|
-
})]
|
|
361
|
-
})
|
|
362
|
-
]
|
|
363
|
-
})]
|
|
373
|
+
]
|
|
374
|
+
})]
|
|
375
|
+
})
|
|
364
376
|
})
|
|
365
377
|
]
|
|
366
378
|
})
|