@burdenoff/microfe-botmanor 2026.1101.3 → 2026.1108.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.
- package/dist/botlit/BotlitRoutes.js +34 -30
- package/dist/botlit/BotlitRoutes.js.map +1 -1
- package/dist/botlit/components/AiOperationsPanel.js +254 -0
- package/dist/botlit/components/AiOperationsPanel.js.map +1 -0
- package/dist/botlit/components/Input.js +1 -1
- package/dist/botlit/hooks/index.js +1 -0
- package/dist/botlit/hooks/internal/mutationInput.js.map +1 -1
- package/dist/botlit/hooks/useAgents.js +3 -3
- package/dist/botlit/hooks/useAgents.js.map +1 -1
- package/dist/botlit/hooks/useAiOperations.js +153 -0
- package/dist/botlit/hooks/useAiOperations.js.map +1 -0
- package/dist/botlit/hooks/useLLMProviders.js +4 -4
- package/dist/botlit/hooks/useLLMProviders.js.map +1 -1
- package/dist/botlit/pages/AgentBuilderPage.js.map +1 -1
- package/dist/botlit/pages/AgentDetailPage.js +198 -185
- package/dist/botlit/pages/AgentDetailPage.js.map +1 -1
- package/dist/botlit/pages/AiOperationsPage.js +166 -0
- package/dist/botlit/pages/AiOperationsPage.js.map +1 -0
- package/dist/botlit/pages/BotDetailPage.js +282 -268
- package/dist/botlit/pages/BotDetailPage.js.map +1 -1
- package/dist/botlit/permissions/botmanorPermissions.js.map +1 -1
- package/dist/generated/global-types.js.map +1 -1
- package/dist/generated/wspace-operations.js +169 -76
- package/dist/generated/wspace-operations.js.map +1 -1
- package/dist/generated/wspace-types.js +5 -3
- package/dist/generated/wspace-types.js.map +1 -1
- package/package.json +2 -1
|
@@ -9,15 +9,15 @@ import { Suspense as o, lazy as s } from "react";
|
|
|
9
9
|
import { jsx as c, jsxs as l } from "react/jsx-runtime";
|
|
10
10
|
import { Navigate as u, Route as d, Routes as f, useLocation as p } from "react-router";
|
|
11
11
|
//#region src/botlit/BotlitRoutes.tsx
|
|
12
|
-
var m = s(() => import("./pages/BotsListPage.js").then((e) => ({ default: e.BotsListPage }))), h = s(() => import("./pages/BotDetailPage.js").then((e) => ({ default: e.BotDetailPage }))), g = s(() => import("./pages/AgentsListPage.js").then((e) => ({ default: e.AgentsListPage }))), _ = s(() => import("./pages/AgentApprovalsPage.js").then((e) => ({ default: e.AgentApprovalsPage }))), v = s(() => import("./pages/AgentDetailPage.js").then((e) => ({ default: e.AgentDetailPage }))), y = s(() => import("./pages/AgentBuilderPage.js").then((e) => ({ default: e.AgentBuilderPage }))), b = s(() => import("./pages/KnowledgeBasesPage.js").then((e) => ({ default: e.KnowledgeBasesPage }))), x = s(() => import("./pages/KnowledgeBaseDetailPage.js").then((e) => ({ default: e.KnowledgeBaseDetailPage }))), S = s(() => import("./pages/RetrievalProfilesPage.js").then((e) => ({ default: e.RetrievalProfilesPage }))), C = s(() => import("./pages/RetrievalProfileDetailPage.js").then((e) => ({ default: e.RetrievalProfileDetailPage }))), w = s(() => import("./pages/MCPServersPage.js").then((e) => ({ default: e.MCPServersPage }))), T = s(() => import("./pages/MCPServerDetailPage.js").then((e) => ({ default: e.MCPServerDetailPage }))), E = s(() => import("./pages/A2ARegistryPage.js").then((e) => ({ default: e.A2ARegistryPage }))), D = s(() => import("./pages/A2AAgentDetailPage.js").then((e) => ({ default: e.A2AAgentDetailPage }))), O = s(() => import("./pages/ChannelsPage.js").then((e) => ({ default: e.ChannelsPage }))), k = s(() => import("./pages/ChannelDetailPage.js").then((e) => ({ default: e.ChannelDetailPage }))), A = s(() => import("./pages/ChannelRoutesPage.js").then((e) => ({ default: e.ChannelRoutesPage }))), j = s(() => import("./pages/PoliciesPage.js").then((e) => ({ default: e.PoliciesPage }))), M = s(() => import("./pages/PolicyDetailPage.js").then((e) => ({ default: e.PolicyDetailPage }))), N = s(() => import("./pages/SkillsPage.js").then((e) => ({ default: e.SkillsPage }))), P = s(() => import("./pages/SkillDetailPage.js").then((e) => ({ default: e.SkillDetailPage }))), F = s(() => import("./pages/PromptTemplatesPage.js").then((e) => ({ default: e.PromptTemplatesPage }))), I = s(() => import("./pages/PromptTemplateDetailPage.js").then((e) => ({ default: e.PromptTemplateDetailPage }))), L = s(() => import("./pages/PromptStudioPage.js").then((e) => ({ default: e.PromptStudioPage }))), R = s(() => import("./pages/ExecutionsPage.js").then((e) => ({ default: e.ExecutionsPage }))), z = s(() => import("./pages/ExecutionDetailPage.js").then((e) => ({ default: e.ExecutionDetailPage }))), B = s(() => import("./pages/BucketsPage.js").then((e) => ({ default: e.BucketsPage }))),
|
|
13
|
-
let { basePath: s, isStandalone:
|
|
12
|
+
var m = s(() => import("./pages/BotsListPage.js").then((e) => ({ default: e.BotsListPage }))), h = s(() => import("./pages/BotDetailPage.js").then((e) => ({ default: e.BotDetailPage }))), g = s(() => import("./pages/AgentsListPage.js").then((e) => ({ default: e.AgentsListPage }))), _ = s(() => import("./pages/AgentApprovalsPage.js").then((e) => ({ default: e.AgentApprovalsPage }))), v = s(() => import("./pages/AgentDetailPage.js").then((e) => ({ default: e.AgentDetailPage }))), y = s(() => import("./pages/AgentBuilderPage.js").then((e) => ({ default: e.AgentBuilderPage }))), b = s(() => import("./pages/KnowledgeBasesPage.js").then((e) => ({ default: e.KnowledgeBasesPage }))), x = s(() => import("./pages/KnowledgeBaseDetailPage.js").then((e) => ({ default: e.KnowledgeBaseDetailPage }))), S = s(() => import("./pages/RetrievalProfilesPage.js").then((e) => ({ default: e.RetrievalProfilesPage }))), C = s(() => import("./pages/RetrievalProfileDetailPage.js").then((e) => ({ default: e.RetrievalProfileDetailPage }))), w = s(() => import("./pages/MCPServersPage.js").then((e) => ({ default: e.MCPServersPage }))), T = s(() => import("./pages/MCPServerDetailPage.js").then((e) => ({ default: e.MCPServerDetailPage }))), E = s(() => import("./pages/A2ARegistryPage.js").then((e) => ({ default: e.A2ARegistryPage }))), D = s(() => import("./pages/A2AAgentDetailPage.js").then((e) => ({ default: e.A2AAgentDetailPage }))), O = s(() => import("./pages/ChannelsPage.js").then((e) => ({ default: e.ChannelsPage }))), k = s(() => import("./pages/ChannelDetailPage.js").then((e) => ({ default: e.ChannelDetailPage }))), A = s(() => import("./pages/ChannelRoutesPage.js").then((e) => ({ default: e.ChannelRoutesPage }))), j = s(() => import("./pages/PoliciesPage.js").then((e) => ({ default: e.PoliciesPage }))), M = s(() => import("./pages/PolicyDetailPage.js").then((e) => ({ default: e.PolicyDetailPage }))), N = s(() => import("./pages/SkillsPage.js").then((e) => ({ default: e.SkillsPage }))), P = s(() => import("./pages/SkillDetailPage.js").then((e) => ({ default: e.SkillDetailPage }))), F = s(() => import("./pages/PromptTemplatesPage.js").then((e) => ({ default: e.PromptTemplatesPage }))), I = s(() => import("./pages/PromptTemplateDetailPage.js").then((e) => ({ default: e.PromptTemplateDetailPage }))), L = s(() => import("./pages/PromptStudioPage.js").then((e) => ({ default: e.PromptStudioPage }))), R = s(() => import("./pages/ExecutionsPage.js").then((e) => ({ default: e.ExecutionsPage }))), z = s(() => import("./pages/ExecutionDetailPage.js").then((e) => ({ default: e.ExecutionDetailPage }))), B = s(() => import("./pages/AiOperationsPage.js").then((e) => ({ default: e.AiOperationsPage }))), V = s(() => import("./pages/BucketsPage.js").then((e) => ({ default: e.BucketsPage }))), H = s(() => import("./pages/StorePage.js").then((e) => ({ default: e.StorePage }))), U = s(() => import("./pages/StorePackageDetailPage.js").then((e) => ({ default: e.StorePackageDetailPage }))), W = s(() => import("./pages/InstalledPackagesPage.js").then((e) => ({ default: e.InstalledPackagesPage }))), G = s(() => import("./pages/SettingsPage.js").then((e) => ({ default: e.SettingsPage }))), K = s(() => import("./pages/ChatPage.js").then((e) => ({ default: e.ChatPage }))), q = () => {
|
|
13
|
+
let { basePath: s, isStandalone: q } = n(), J = p(), Y = e(), X = (e, t, n, r, a) => /* @__PURE__ */ c(i, {
|
|
14
14
|
permission: e,
|
|
15
15
|
title: t,
|
|
16
16
|
backTo: n,
|
|
17
17
|
backLabel: r,
|
|
18
18
|
children: a
|
|
19
|
-
}),
|
|
20
|
-
return
|
|
19
|
+
}), Z = Y("permissions.required.back", "Go back"), Q = s === "/" ? "" : s.replace(/\/$/, "");
|
|
20
|
+
return Q && !q && !(J.pathname === Q || J.pathname.startsWith(Q + "/")) ? null : /* @__PURE__ */ c("div", {
|
|
21
21
|
className: "flex flex-col min-h-full bg-bg-surface",
|
|
22
22
|
children: /* @__PURE__ */ c(o, {
|
|
23
23
|
fallback: /* @__PURE__ */ c(t, {}),
|
|
@@ -39,7 +39,7 @@ var m = s(() => import("./pages/BotsListPage.js").then((e) => ({ default: e.Bots
|
|
|
39
39
|
}),
|
|
40
40
|
/* @__PURE__ */ c(d, {
|
|
41
41
|
path: "bots/new",
|
|
42
|
-
element:
|
|
42
|
+
element: X(r.APP_CREATE, Y("botlit.botsList.actions.createBot", "Create Bot"), "bots", Z, /* @__PURE__ */ c(h, { isNew: !0 }))
|
|
43
43
|
}),
|
|
44
44
|
/* @__PURE__ */ c(d, {
|
|
45
45
|
path: "bots/:botId",
|
|
@@ -47,7 +47,7 @@ var m = s(() => import("./pages/BotsListPage.js").then((e) => ({ default: e.Bots
|
|
|
47
47
|
}),
|
|
48
48
|
/* @__PURE__ */ c(d, {
|
|
49
49
|
path: "bots/:botId/edit",
|
|
50
|
-
element:
|
|
50
|
+
element: X(r.APP_UPDATE, Y("botlit.botsList.menu.editBot", "Edit Bot"), "bots", Z, /* @__PURE__ */ c(h, { isEditing: !0 }))
|
|
51
51
|
}),
|
|
52
52
|
/* @__PURE__ */ c(d, {
|
|
53
53
|
path: "bots/:botId/agents",
|
|
@@ -55,7 +55,7 @@ var m = s(() => import("./pages/BotsListPage.js").then((e) => ({ default: e.Bots
|
|
|
55
55
|
}),
|
|
56
56
|
/* @__PURE__ */ c(d, {
|
|
57
57
|
path: "bots/:botId/agents/new",
|
|
58
|
-
element:
|
|
58
|
+
element: X(r.AGENT_CREATE, Y("botlit.agentsList.actions.createAgent", "Create Agent"), "agents", Z, /* @__PURE__ */ c(y, {}))
|
|
59
59
|
}),
|
|
60
60
|
/* @__PURE__ */ c(d, {
|
|
61
61
|
path: "bots/:botId/agents/:agentId",
|
|
@@ -63,7 +63,7 @@ var m = s(() => import("./pages/BotsListPage.js").then((e) => ({ default: e.Bots
|
|
|
63
63
|
}),
|
|
64
64
|
/* @__PURE__ */ c(d, {
|
|
65
65
|
path: "bots/:botId/agents/:agentId/edit",
|
|
66
|
-
element:
|
|
66
|
+
element: X(r.AGENT_UPDATE, Y("botlit.agentsList.menu.editAgent", "Edit Agent"), "agents", Z, /* @__PURE__ */ c(y, {}))
|
|
67
67
|
}),
|
|
68
68
|
/* @__PURE__ */ c(d, {
|
|
69
69
|
path: "bots/:botId/knowledge",
|
|
@@ -79,7 +79,7 @@ var m = s(() => import("./pages/BotsListPage.js").then((e) => ({ default: e.Bots
|
|
|
79
79
|
}),
|
|
80
80
|
/* @__PURE__ */ c(d, {
|
|
81
81
|
path: "agents/new",
|
|
82
|
-
element:
|
|
82
|
+
element: X(r.AGENT_CREATE, Y("botlit.agentsList.actions.createAgent", "Create Agent"), "agents", Z, /* @__PURE__ */ c(y, {}))
|
|
83
83
|
}),
|
|
84
84
|
/* @__PURE__ */ c(d, {
|
|
85
85
|
path: "agents/approvals",
|
|
@@ -91,11 +91,11 @@ var m = s(() => import("./pages/BotsListPage.js").then((e) => ({ default: e.Bots
|
|
|
91
91
|
}),
|
|
92
92
|
/* @__PURE__ */ c(d, {
|
|
93
93
|
path: "agents/:agentId/edit",
|
|
94
|
-
element:
|
|
94
|
+
element: X(r.AGENT_UPDATE, Y("botlit.agentsList.menu.editAgent", "Edit Agent"), "agents", Z, /* @__PURE__ */ c(y, {}))
|
|
95
95
|
}),
|
|
96
96
|
/* @__PURE__ */ c(d, {
|
|
97
97
|
path: "agents/:agentId/chat",
|
|
98
|
-
element:
|
|
98
|
+
element: X(r.AGENT_EXECUTE, Y("botlit.chat.title", "AI Chat"), "agents", Z, /* @__PURE__ */ c(K, {}))
|
|
99
99
|
}),
|
|
100
100
|
/* @__PURE__ */ c(d, {
|
|
101
101
|
path: "conversations",
|
|
@@ -117,7 +117,7 @@ var m = s(() => import("./pages/BotsListPage.js").then((e) => ({ default: e.Bots
|
|
|
117
117
|
}),
|
|
118
118
|
/* @__PURE__ */ c(d, {
|
|
119
119
|
path: "knowledge/new",
|
|
120
|
-
element:
|
|
120
|
+
element: X(r.KNOWLEDGE_CREATE, Y("botlit.knowledge.actions.create", "Create Knowledge Base"), "knowledge", Z, /* @__PURE__ */ c(x, { isNew: !0 }))
|
|
121
121
|
}),
|
|
122
122
|
/* @__PURE__ */ c(d, {
|
|
123
123
|
path: "knowledge/:kbId",
|
|
@@ -129,7 +129,7 @@ var m = s(() => import("./pages/BotsListPage.js").then((e) => ({ default: e.Bots
|
|
|
129
129
|
}),
|
|
130
130
|
/* @__PURE__ */ c(d, {
|
|
131
131
|
path: "retrieval-profiles/new",
|
|
132
|
-
element:
|
|
132
|
+
element: X(r.RETRIEVAL_PROFILE_CREATE, Y("botlit.retrievalProfiles.actions.create", "Create Retrieval Profile"), "retrieval-profiles", Z, /* @__PURE__ */ c(C, { isNew: !0 }))
|
|
133
133
|
}),
|
|
134
134
|
/* @__PURE__ */ c(d, {
|
|
135
135
|
path: "retrieval-profiles/:profileId",
|
|
@@ -141,7 +141,7 @@ var m = s(() => import("./pages/BotsListPage.js").then((e) => ({ default: e.Bots
|
|
|
141
141
|
}),
|
|
142
142
|
/* @__PURE__ */ c(d, {
|
|
143
143
|
path: "mcp/new",
|
|
144
|
-
element:
|
|
144
|
+
element: X(r.MCP_CREATE, Y("botlit.mcpServers.actions.add", "Add MCP Server"), "mcp", Z, /* @__PURE__ */ c(T, { isNew: !0 }))
|
|
145
145
|
}),
|
|
146
146
|
/* @__PURE__ */ c(d, {
|
|
147
147
|
path: "mcp/:serverId",
|
|
@@ -153,7 +153,7 @@ var m = s(() => import("./pages/BotsListPage.js").then((e) => ({ default: e.Bots
|
|
|
153
153
|
}),
|
|
154
154
|
/* @__PURE__ */ c(d, {
|
|
155
155
|
path: "a2a/register",
|
|
156
|
-
element:
|
|
156
|
+
element: X(r.A2A_REGISTRY_CREATE, Y("botlit.a2aRegistry.actions.registerAgent", "Register Agent"), "a2a", Z, /* @__PURE__ */ c(D, { isNew: !0 }))
|
|
157
157
|
}),
|
|
158
158
|
/* @__PURE__ */ c(d, {
|
|
159
159
|
path: "a2a/:agentId",
|
|
@@ -165,7 +165,7 @@ var m = s(() => import("./pages/BotsListPage.js").then((e) => ({ default: e.Bots
|
|
|
165
165
|
}),
|
|
166
166
|
/* @__PURE__ */ c(d, {
|
|
167
167
|
path: "channels/new",
|
|
168
|
-
element:
|
|
168
|
+
element: X(r.CHANNEL_CREATE, Y("botlit.channels.actions.addChannel", "Add Channel"), "channels", Z, /* @__PURE__ */ c(k, { isNew: !0 }))
|
|
169
169
|
}),
|
|
170
170
|
/* @__PURE__ */ c(d, {
|
|
171
171
|
path: "channels/routes",
|
|
@@ -181,7 +181,7 @@ var m = s(() => import("./pages/BotsListPage.js").then((e) => ({ default: e.Bots
|
|
|
181
181
|
}),
|
|
182
182
|
/* @__PURE__ */ c(d, {
|
|
183
183
|
path: "policies/new",
|
|
184
|
-
element:
|
|
184
|
+
element: X(r.POLICY_CREATE, Y("botlit.policies.actions.createPolicy", "Create Policy"), "policies", Z, /* @__PURE__ */ c(M, { isNew: !0 }))
|
|
185
185
|
}),
|
|
186
186
|
/* @__PURE__ */ c(d, {
|
|
187
187
|
path: "policies/:policyId",
|
|
@@ -193,7 +193,7 @@ var m = s(() => import("./pages/BotsListPage.js").then((e) => ({ default: e.Bots
|
|
|
193
193
|
}),
|
|
194
194
|
/* @__PURE__ */ c(d, {
|
|
195
195
|
path: "skills/new",
|
|
196
|
-
element:
|
|
196
|
+
element: X(r.SKILL_CREATE, Y("botlit.skills.actions.create", "Create Skill"), "skills", Z, /* @__PURE__ */ c(P, { isNew: !0 }))
|
|
197
197
|
}),
|
|
198
198
|
/* @__PURE__ */ c(d, {
|
|
199
199
|
path: "skills/:skillId",
|
|
@@ -205,7 +205,7 @@ var m = s(() => import("./pages/BotsListPage.js").then((e) => ({ default: e.Bots
|
|
|
205
205
|
}),
|
|
206
206
|
/* @__PURE__ */ c(d, {
|
|
207
207
|
path: "prompt-templates/new",
|
|
208
|
-
element:
|
|
208
|
+
element: X(r.PROMPT_TEMPLATE_CREATE, Y("botlit.promptTemplates.actions.create", "Create Template"), "prompt-templates", Z, /* @__PURE__ */ c(I, { isNew: !0 }))
|
|
209
209
|
}),
|
|
210
210
|
/* @__PURE__ */ c(d, {
|
|
211
211
|
path: "prompt-templates/:templateId",
|
|
@@ -219,50 +219,54 @@ var m = s(() => import("./pages/BotsListPage.js").then((e) => ({ default: e.Bots
|
|
|
219
219
|
path: "executions",
|
|
220
220
|
element: /* @__PURE__ */ c(R, {})
|
|
221
221
|
}),
|
|
222
|
+
/* @__PURE__ */ c(d, {
|
|
223
|
+
path: "ai",
|
|
224
|
+
element: /* @__PURE__ */ c(B, {})
|
|
225
|
+
}),
|
|
222
226
|
/* @__PURE__ */ c(d, {
|
|
223
227
|
path: "executions/:executionId",
|
|
224
228
|
element: /* @__PURE__ */ c(z, {})
|
|
225
229
|
}),
|
|
226
230
|
/* @__PURE__ */ c(d, {
|
|
227
231
|
path: "buckets",
|
|
228
|
-
element: /* @__PURE__ */ c(
|
|
232
|
+
element: /* @__PURE__ */ c(V, {})
|
|
229
233
|
}),
|
|
230
234
|
/* @__PURE__ */ c(d, {
|
|
231
235
|
path: "buckets/new",
|
|
232
|
-
element: /* @__PURE__ */ c(
|
|
236
|
+
element: /* @__PURE__ */ c(V, {})
|
|
233
237
|
}),
|
|
234
238
|
/* @__PURE__ */ c(d, {
|
|
235
239
|
path: "buckets/:bucketId",
|
|
236
|
-
element: /* @__PURE__ */ c(
|
|
240
|
+
element: /* @__PURE__ */ c(V, {})
|
|
237
241
|
}),
|
|
238
242
|
/* @__PURE__ */ c(d, {
|
|
239
243
|
path: "store",
|
|
240
|
-
element: /* @__PURE__ */ c(
|
|
244
|
+
element: /* @__PURE__ */ c(H, {})
|
|
241
245
|
}),
|
|
242
246
|
/* @__PURE__ */ c(d, {
|
|
243
247
|
path: "store/installed",
|
|
244
|
-
element: /* @__PURE__ */ c(
|
|
248
|
+
element: /* @__PURE__ */ c(W, {})
|
|
245
249
|
}),
|
|
246
250
|
/* @__PURE__ */ c(d, {
|
|
247
251
|
path: "store/package/:slug",
|
|
248
|
-
element: /* @__PURE__ */ c(
|
|
252
|
+
element: /* @__PURE__ */ c(U, {})
|
|
249
253
|
}),
|
|
250
254
|
/* @__PURE__ */ c(d, {
|
|
251
255
|
path: "chat",
|
|
252
|
-
element:
|
|
256
|
+
element: X(r.AGENT_EXECUTE, Y("botlit.chat.title", "AI Chat"), "agents", Z, /* @__PURE__ */ c(K, {}))
|
|
253
257
|
}),
|
|
254
258
|
/* @__PURE__ */ c(d, {
|
|
255
259
|
path: "chat/:agentId",
|
|
256
|
-
element:
|
|
260
|
+
element: X(r.AGENT_EXECUTE, Y("botlit.chat.title", "AI Chat"), "agents", Z, /* @__PURE__ */ c(K, {}))
|
|
257
261
|
}),
|
|
258
262
|
/* @__PURE__ */ c(d, {
|
|
259
263
|
path: "settings",
|
|
260
|
-
element: /* @__PURE__ */ c(
|
|
264
|
+
element: /* @__PURE__ */ c(G, {})
|
|
261
265
|
}),
|
|
262
266
|
/* @__PURE__ */ c(d, {
|
|
263
267
|
path: "list",
|
|
264
268
|
element: /* @__PURE__ */ c(u, {
|
|
265
|
-
to: `${
|
|
269
|
+
to: `${Q}/workflows/list`,
|
|
266
270
|
replace: !0
|
|
267
271
|
})
|
|
268
272
|
}),
|
|
@@ -278,6 +282,6 @@ var m = s(() => import("./pages/BotsListPage.js").then((e) => ({ default: e.Bots
|
|
|
278
282
|
});
|
|
279
283
|
};
|
|
280
284
|
//#endregion
|
|
281
|
-
export {
|
|
285
|
+
export { q as BotlitRoutes };
|
|
282
286
|
|
|
283
287
|
//# sourceMappingURL=BotlitRoutes.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BotlitRoutes.js","names":[],"sources":["../../src/botlit/BotlitRoutes.tsx"],"sourcesContent":["/**\n * BotManor Routes\n * @module botlit\n */\n\nimport { type FC, type ReactElement, lazy, Suspense } from 'react';\nimport { Routes, Route, Navigate, useLocation } from 'react-router';\nimport { useBotlit } from './providers/BotlitProvider';\nimport { RouteLoader } from './components/RouteLoader';\nimport { BOTMANOR_PERMISSIONS, RequirePermission, type BotmanorPermission } from './permissions';\nimport { useTr } from '../shared/hooks/useTr';\n\n// Eager load - Dashboard (primary landing page)\nimport { DashboardPage } from './pages/DashboardPage';\n\n// Lazy loaded pages - Bots\nconst BotsListPage = lazy(() =>\n import('./pages/BotsListPage').then((m) => ({ default: m.BotsListPage }))\n);\nconst BotDetailPage = lazy(() =>\n import('./pages/BotDetailPage').then((m) => ({ default: m.BotDetailPage }))\n);\n\n// Lazy loaded pages - Agents\nconst AgentsListPage = lazy(() =>\n import('./pages/AgentsListPage').then((m) => ({ default: m.AgentsListPage }))\n);\nconst AgentApprovalsPage = lazy(() =>\n import('./pages/AgentApprovalsPage').then((m) => ({ default: m.AgentApprovalsPage }))\n);\nconst AgentDetailPage = lazy(() =>\n import('./pages/AgentDetailPage').then((m) => ({ default: m.AgentDetailPage }))\n);\nconst AgentBuilderPage = lazy(() =>\n import('./pages/AgentBuilderPage').then((m) => ({ default: m.AgentBuilderPage }))\n);\n\n// Lazy loaded pages - Knowledge Bases\nconst KnowledgeBasesPage = lazy(() =>\n import('./pages/KnowledgeBasesPage').then((m) => ({ default: m.KnowledgeBasesPage }))\n);\nconst KnowledgeBaseDetailPage = lazy(() =>\n import('./pages/KnowledgeBaseDetailPage').then((m) => ({ default: m.KnowledgeBaseDetailPage }))\n);\n\n// Lazy loaded pages - Retrieval Profiles\nconst RetrievalProfilesPage = lazy(() =>\n import('./pages/RetrievalProfilesPage').then((m) => ({ default: m.RetrievalProfilesPage }))\n);\nconst RetrievalProfileDetailPage = lazy(() =>\n import('./pages/RetrievalProfileDetailPage').then((m) => ({\n default: m.RetrievalProfileDetailPage,\n }))\n);\n\n// Lazy loaded pages - MCP Servers\nconst MCPServersPage = lazy(() =>\n import('./pages/MCPServersPage').then((m) => ({ default: m.MCPServersPage }))\n);\nconst MCPServerDetailPage = lazy(() =>\n import('./pages/MCPServerDetailPage').then((m) => ({ default: m.MCPServerDetailPage }))\n);\n\n// Lazy loaded pages - A2A Registry\nconst A2ARegistryPage = lazy(() =>\n import('./pages/A2ARegistryPage').then((m) => ({ default: m.A2ARegistryPage }))\n);\nconst A2AAgentDetailPage = lazy(() =>\n import('./pages/A2AAgentDetailPage').then((m) => ({ default: m.A2AAgentDetailPage }))\n);\n\n// Lazy loaded pages - Channels\nconst ChannelsPage = lazy(() =>\n import('./pages/ChannelsPage').then((m) => ({ default: m.ChannelsPage }))\n);\nconst ChannelDetailPage = lazy(() =>\n import('./pages/ChannelDetailPage').then((m) => ({ default: m.ChannelDetailPage }))\n);\nconst ChannelRoutesPage = lazy(() =>\n import('./pages/ChannelRoutesPage').then((m) => ({ default: m.ChannelRoutesPage }))\n);\n\n// Lazy loaded pages - Policies\nconst PoliciesPage = lazy(() =>\n import('./pages/PoliciesPage').then((m) => ({ default: m.PoliciesPage }))\n);\nconst PolicyDetailPage = lazy(() =>\n import('./pages/PolicyDetailPage').then((m) => ({ default: m.PolicyDetailPage }))\n);\n\n// Lazy loaded pages - Skills\nconst SkillsPage = lazy(() =>\n import('./pages/SkillsPage').then((m) => ({ default: m.SkillsPage }))\n);\nconst SkillDetailPage = lazy(() =>\n import('./pages/SkillDetailPage').then((m) => ({ default: m.SkillDetailPage }))\n);\n\n// Lazy loaded pages - Prompt Templates\nconst PromptTemplatesPage = lazy(() =>\n import('./pages/PromptTemplatesPage').then((m) => ({ default: m.PromptTemplatesPage }))\n);\nconst PromptTemplateDetailPage = lazy(() =>\n import('./pages/PromptTemplateDetailPage').then((m) => ({ default: m.PromptTemplateDetailPage }))\n);\nconst PromptStudioPage = lazy(() =>\n import('./pages/PromptStudioPage').then((m) => ({ default: m.PromptStudioPage }))\n);\n\n// Lazy loaded pages - Executions\nconst ExecutionsPage = lazy(() =>\n import('./pages/ExecutionsPage').then((m) => ({ default: m.ExecutionsPage }))\n);\nconst ExecutionDetailPage = lazy(() =>\n import('./pages/ExecutionDetailPage').then((m) => ({ default: m.ExecutionDetailPage }))\n);\n\n// Lazy loaded pages - Buckets\nconst BucketsPage = lazy(() =>\n import('./pages/BucketsPage').then((m) => ({ default: m.BucketsPage }))\n);\n\n// Lazy loaded pages - Store\nconst StorePage = lazy(() => import('./pages/StorePage').then((m) => ({ default: m.StorePage })));\nconst StorePackageDetailPage = lazy(() =>\n import('./pages/StorePackageDetailPage').then((m) => ({ default: m.StorePackageDetailPage }))\n);\nconst InstalledPackagesPage = lazy(() =>\n import('./pages/InstalledPackagesPage').then((m) => ({ default: m.InstalledPackagesPage }))\n);\n\n// Lazy loaded pages - Settings & Chat\nconst SettingsPage = lazy(() =>\n import('./pages/SettingsPage').then((m) => ({ default: m.SettingsPage }))\n);\nconst ChatPage = lazy(() => import('./pages/ChatPage').then((m) => ({ default: m.ChatPage })));\n\n// Loading fallback — the same skeleton `BotmanorRoot` paints while its\n// implementation chunk resolves, so the content region never switches loading\n// idioms (and never goes empty) between first paint and the page rendering.\n\nexport const BotlitRoutes: FC = () => {\n const { basePath, isStandalone } = useBotlit();\n const location = useLocation();\n const t = useTr();\n\n /**\n * Create, edit and chat routes are reachable by URL, so they are gated here\n * as well as at the buttons that link to them: a member without the\n * permission gets a clear \"no access\" state instead of a form the gateway\n * would refuse to save.\n */\n const gated = (\n permission: BotmanorPermission,\n title: string,\n backTo: string,\n backLabel: string,\n element: ReactElement\n ): ReactElement => (\n <RequirePermission permission={permission} title={title} backTo={backTo} backLabel={backLabel}>\n {element}\n </RequirePermission>\n );\n const back = t('permissions.required.back', 'Go back');\n\n // Normalize base path\n const normalizedBasePath = basePath === '/' ? '' : basePath.replace(/\\/$/, '');\n\n // Guard: Only render if path matches basePath (when integrated)\n if (normalizedBasePath && !isStandalone) {\n const pathMatches =\n location.pathname === normalizedBasePath ||\n location.pathname.startsWith(normalizedBasePath + '/');\n\n if (!pathMatches) {\n return null;\n }\n }\n\n return (\n <div className=\"flex flex-col min-h-full bg-bg-surface\">\n <Suspense fallback={<RouteLoader />}>\n <Routes>\n {/* Dashboard - Eager loaded */}\n <Route index element={<DashboardPage />} />\n <Route path=\"home\" element={<Navigate to=\"/\" replace />} />\n\n {/* Bots */}\n <Route path=\"bots\" element={<BotsListPage />} />\n <Route\n path=\"bots/new\"\n element={gated(\n BOTMANOR_PERMISSIONS.APP_CREATE,\n t('botlit.botsList.actions.createBot', 'Create Bot'),\n 'bots',\n back,\n <BotDetailPage isNew />\n )}\n />\n <Route path=\"bots/:botId\" element={<BotDetailPage />} />\n <Route\n path=\"bots/:botId/edit\"\n element={gated(\n BOTMANOR_PERMISSIONS.APP_UPDATE,\n t('botlit.botsList.menu.editBot', 'Edit Bot'),\n 'bots',\n back,\n <BotDetailPage isEditing />\n )}\n />\n <Route path=\"bots/:botId/agents\" element={<AgentsListPage />} />\n <Route\n path=\"bots/:botId/agents/new\"\n element={gated(\n BOTMANOR_PERMISSIONS.AGENT_CREATE,\n t('botlit.agentsList.actions.createAgent', 'Create Agent'),\n 'agents',\n back,\n <AgentBuilderPage />\n )}\n />\n <Route path=\"bots/:botId/agents/:agentId\" element={<AgentDetailPage />} />\n <Route\n path=\"bots/:botId/agents/:agentId/edit\"\n element={gated(\n BOTMANOR_PERMISSIONS.AGENT_UPDATE,\n t('botlit.agentsList.menu.editAgent', 'Edit Agent'),\n 'agents',\n back,\n <AgentBuilderPage />\n )}\n />\n <Route path=\"bots/:botId/knowledge\" element={<KnowledgeBasesPage />} />\n <Route path=\"bots/:botId/knowledge/:kbId\" element={<KnowledgeBaseDetailPage />} />\n\n {/* Agents (global view) */}\n <Route path=\"agents\" element={<AgentsListPage />} />\n <Route\n path=\"agents/new\"\n element={gated(\n BOTMANOR_PERMISSIONS.AGENT_CREATE,\n t('botlit.agentsList.actions.createAgent', 'Create Agent'),\n 'agents',\n back,\n <AgentBuilderPage />\n )}\n />\n <Route path=\"agents/approvals\" element={<AgentApprovalsPage />} />\n <Route path=\"agents/:agentId\" element={<AgentDetailPage />} />\n <Route\n path=\"agents/:agentId/edit\"\n element={gated(\n BOTMANOR_PERMISSIONS.AGENT_UPDATE,\n t('botlit.agentsList.menu.editAgent', 'Edit Agent'),\n 'agents',\n back,\n <AgentBuilderPage />\n )}\n />\n <Route\n path=\"agents/:agentId/chat\"\n element={gated(\n BOTMANOR_PERMISSIONS.AGENT_EXECUTE,\n t('botlit.chat.title', 'AI Chat'),\n 'agents',\n back,\n <ChatPage />\n )}\n />\n\n {/* Conversations - Redirect to conversations microfe */}\n <Route path=\"conversations\" element={<Navigate to=\"/conversations\" replace />} />\n <Route\n path=\"conversations/:conversationId\"\n element={<Navigate to=\"/conversations\" replace />}\n />\n\n {/* Knowledge Bases */}\n <Route path=\"knowledge\" element={<KnowledgeBasesPage />} />\n <Route\n path=\"knowledge/new\"\n element={gated(\n BOTMANOR_PERMISSIONS.KNOWLEDGE_CREATE,\n t('botlit.knowledge.actions.create', 'Create Knowledge Base'),\n 'knowledge',\n back,\n <KnowledgeBaseDetailPage isNew />\n )}\n />\n <Route path=\"knowledge/:kbId\" element={<KnowledgeBaseDetailPage />} />\n\n {/* Retrieval Profiles */}\n <Route path=\"retrieval-profiles\" element={<RetrievalProfilesPage />} />\n <Route\n path=\"retrieval-profiles/new\"\n element={gated(\n BOTMANOR_PERMISSIONS.RETRIEVAL_PROFILE_CREATE,\n t('botlit.retrievalProfiles.actions.create', 'Create Retrieval Profile'),\n 'retrieval-profiles',\n back,\n <RetrievalProfileDetailPage isNew />\n )}\n />\n <Route path=\"retrieval-profiles/:profileId\" element={<RetrievalProfileDetailPage />} />\n\n {/* MCP Servers */}\n <Route path=\"mcp\" element={<MCPServersPage />} />\n <Route\n path=\"mcp/new\"\n element={gated(\n BOTMANOR_PERMISSIONS.MCP_CREATE,\n t('botlit.mcpServers.actions.add', 'Add MCP Server'),\n 'mcp',\n back,\n <MCPServerDetailPage isNew />\n )}\n />\n <Route path=\"mcp/:serverId\" element={<MCPServerDetailPage />} />\n\n {/* A2A Registry */}\n <Route path=\"a2a\" element={<A2ARegistryPage />} />\n <Route\n path=\"a2a/register\"\n element={gated(\n BOTMANOR_PERMISSIONS.A2A_REGISTRY_CREATE,\n t('botlit.a2aRegistry.actions.registerAgent', 'Register Agent'),\n 'a2a',\n back,\n <A2AAgentDetailPage isNew />\n )}\n />\n <Route path=\"a2a/:agentId\" element={<A2AAgentDetailPage />} />\n\n {/* Channels */}\n <Route path=\"channels\" element={<ChannelsPage />} />\n <Route\n path=\"channels/new\"\n element={gated(\n BOTMANOR_PERMISSIONS.CHANNEL_CREATE,\n t('botlit.channels.actions.addChannel', 'Add Channel'),\n 'channels',\n back,\n <ChannelDetailPage isNew />\n )}\n />\n <Route path=\"channels/routes\" element={<ChannelRoutesPage />} />\n <Route path=\"channels/:connectorId\" element={<ChannelDetailPage />} />\n\n {/* Policies & Guardrails */}\n <Route path=\"policies\" element={<PoliciesPage />} />\n <Route\n path=\"policies/new\"\n element={gated(\n BOTMANOR_PERMISSIONS.POLICY_CREATE,\n t('botlit.policies.actions.createPolicy', 'Create Policy'),\n 'policies',\n back,\n <PolicyDetailPage isNew />\n )}\n />\n <Route path=\"policies/:policyId\" element={<PolicyDetailPage />} />\n\n {/* Skills */}\n <Route path=\"skills\" element={<SkillsPage />} />\n <Route\n path=\"skills/new\"\n element={gated(\n BOTMANOR_PERMISSIONS.SKILL_CREATE,\n t('botlit.skills.actions.create', 'Create Skill'),\n 'skills',\n back,\n <SkillDetailPage isNew />\n )}\n />\n <Route path=\"skills/:skillId\" element={<SkillDetailPage />} />\n\n {/* Prompt Templates */}\n <Route path=\"prompt-templates\" element={<PromptTemplatesPage />} />\n <Route\n path=\"prompt-templates/new\"\n element={gated(\n BOTMANOR_PERMISSIONS.PROMPT_TEMPLATE_CREATE,\n t('botlit.promptTemplates.actions.create', 'Create Template'),\n 'prompt-templates',\n back,\n <PromptTemplateDetailPage isNew />\n )}\n />\n <Route path=\"prompt-templates/:templateId\" element={<PromptTemplateDetailPage />} />\n\n {/* Prompt Studio (legacy) */}\n <Route path=\"prompts\" element={<PromptStudioPage />} />\n\n {/* Executions */}\n <Route path=\"executions\" element={<ExecutionsPage />} />\n <Route path=\"executions/:executionId\" element={<ExecutionDetailPage />} />\n\n {/* Buckets */}\n <Route path=\"buckets\" element={<BucketsPage />} />\n <Route path=\"buckets/new\" element={<BucketsPage />} />\n <Route path=\"buckets/:bucketId\" element={<BucketsPage />} />\n\n {/* Store */}\n <Route path=\"store\" element={<StorePage />} />\n <Route path=\"store/installed\" element={<InstalledPackagesPage />} />\n <Route path=\"store/package/:slug\" element={<StorePackageDetailPage />} />\n\n {/* Chat */}\n <Route\n path=\"chat\"\n element={gated(\n BOTMANOR_PERMISSIONS.AGENT_EXECUTE,\n t('botlit.chat.title', 'AI Chat'),\n 'agents',\n back,\n <ChatPage />\n )}\n />\n <Route\n path=\"chat/:agentId\"\n element={gated(\n BOTMANOR_PERMISSIONS.AGENT_EXECUTE,\n t('botlit.chat.title', 'AI Chat'),\n 'agents',\n back,\n <ChatPage />\n )}\n />\n\n {/* Settings */}\n <Route path=\"settings\" element={<SettingsPage />} />\n\n {/* Workflow routes are owned by the shared app-shell WorkflowsRoot. */}\n <Route\n path=\"list\"\n element={<Navigate to={`${normalizedBasePath}/workflows/list`} replace />}\n />\n\n {/* Fallback */}\n <Route path=\"*\" element={<Navigate to=\"/\" replace />} />\n </Routes>\n </Suspense>\n </div>\n );\n};\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"BotlitRoutes.js","names":[],"sources":["../../src/botlit/BotlitRoutes.tsx"],"sourcesContent":["/**\n * BotManor Routes\n * @module botlit\n */\n\nimport { type FC, type ReactElement, lazy, Suspense } from 'react';\nimport { Routes, Route, Navigate, useLocation } from 'react-router';\nimport { useBotlit } from './providers/BotlitProvider';\nimport { RouteLoader } from './components/RouteLoader';\nimport { BOTMANOR_PERMISSIONS, RequirePermission, type BotmanorPermission } from './permissions';\nimport { useTr } from '../shared/hooks/useTr';\n\n// Eager load - Dashboard (primary landing page)\nimport { DashboardPage } from './pages/DashboardPage';\n\n// Lazy loaded pages - Bots\nconst BotsListPage = lazy(() =>\n import('./pages/BotsListPage').then((m) => ({ default: m.BotsListPage }))\n);\nconst BotDetailPage = lazy(() =>\n import('./pages/BotDetailPage').then((m) => ({ default: m.BotDetailPage }))\n);\n\n// Lazy loaded pages - Agents\nconst AgentsListPage = lazy(() =>\n import('./pages/AgentsListPage').then((m) => ({ default: m.AgentsListPage }))\n);\nconst AgentApprovalsPage = lazy(() =>\n import('./pages/AgentApprovalsPage').then((m) => ({ default: m.AgentApprovalsPage }))\n);\nconst AgentDetailPage = lazy(() =>\n import('./pages/AgentDetailPage').then((m) => ({ default: m.AgentDetailPage }))\n);\nconst AgentBuilderPage = lazy(() =>\n import('./pages/AgentBuilderPage').then((m) => ({ default: m.AgentBuilderPage }))\n);\n\n// Lazy loaded pages - Knowledge Bases\nconst KnowledgeBasesPage = lazy(() =>\n import('./pages/KnowledgeBasesPage').then((m) => ({ default: m.KnowledgeBasesPage }))\n);\nconst KnowledgeBaseDetailPage = lazy(() =>\n import('./pages/KnowledgeBaseDetailPage').then((m) => ({ default: m.KnowledgeBaseDetailPage }))\n);\n\n// Lazy loaded pages - Retrieval Profiles\nconst RetrievalProfilesPage = lazy(() =>\n import('./pages/RetrievalProfilesPage').then((m) => ({ default: m.RetrievalProfilesPage }))\n);\nconst RetrievalProfileDetailPage = lazy(() =>\n import('./pages/RetrievalProfileDetailPage').then((m) => ({\n default: m.RetrievalProfileDetailPage,\n }))\n);\n\n// Lazy loaded pages - MCP Servers\nconst MCPServersPage = lazy(() =>\n import('./pages/MCPServersPage').then((m) => ({ default: m.MCPServersPage }))\n);\nconst MCPServerDetailPage = lazy(() =>\n import('./pages/MCPServerDetailPage').then((m) => ({ default: m.MCPServerDetailPage }))\n);\n\n// Lazy loaded pages - A2A Registry\nconst A2ARegistryPage = lazy(() =>\n import('./pages/A2ARegistryPage').then((m) => ({ default: m.A2ARegistryPage }))\n);\nconst A2AAgentDetailPage = lazy(() =>\n import('./pages/A2AAgentDetailPage').then((m) => ({ default: m.A2AAgentDetailPage }))\n);\n\n// Lazy loaded pages - Channels\nconst ChannelsPage = lazy(() =>\n import('./pages/ChannelsPage').then((m) => ({ default: m.ChannelsPage }))\n);\nconst ChannelDetailPage = lazy(() =>\n import('./pages/ChannelDetailPage').then((m) => ({ default: m.ChannelDetailPage }))\n);\nconst ChannelRoutesPage = lazy(() =>\n import('./pages/ChannelRoutesPage').then((m) => ({ default: m.ChannelRoutesPage }))\n);\n\n// Lazy loaded pages - Policies\nconst PoliciesPage = lazy(() =>\n import('./pages/PoliciesPage').then((m) => ({ default: m.PoliciesPage }))\n);\nconst PolicyDetailPage = lazy(() =>\n import('./pages/PolicyDetailPage').then((m) => ({ default: m.PolicyDetailPage }))\n);\n\n// Lazy loaded pages - Skills\nconst SkillsPage = lazy(() =>\n import('./pages/SkillsPage').then((m) => ({ default: m.SkillsPage }))\n);\nconst SkillDetailPage = lazy(() =>\n import('./pages/SkillDetailPage').then((m) => ({ default: m.SkillDetailPage }))\n);\n\n// Lazy loaded pages - Prompt Templates\nconst PromptTemplatesPage = lazy(() =>\n import('./pages/PromptTemplatesPage').then((m) => ({ default: m.PromptTemplatesPage }))\n);\nconst PromptTemplateDetailPage = lazy(() =>\n import('./pages/PromptTemplateDetailPage').then((m) => ({ default: m.PromptTemplateDetailPage }))\n);\nconst PromptStudioPage = lazy(() =>\n import('./pages/PromptStudioPage').then((m) => ({ default: m.PromptStudioPage }))\n);\n\n// Lazy loaded pages - Executions\nconst ExecutionsPage = lazy(() =>\n import('./pages/ExecutionsPage').then((m) => ({ default: m.ExecutionsPage }))\n);\nconst ExecutionDetailPage = lazy(() =>\n import('./pages/ExecutionDetailPage').then((m) => ({ default: m.ExecutionDetailPage }))\n);\n\n// Lazy loaded pages - AI Operations (supervisor decision feed, BOFF-3839)\nconst AiOperationsPage = lazy(() =>\n import('./pages/AiOperationsPage').then((m) => ({ default: m.AiOperationsPage }))\n);\n\n// Lazy loaded pages - Buckets\nconst BucketsPage = lazy(() =>\n import('./pages/BucketsPage').then((m) => ({ default: m.BucketsPage }))\n);\n\n// Lazy loaded pages - Store\nconst StorePage = lazy(() => import('./pages/StorePage').then((m) => ({ default: m.StorePage })));\nconst StorePackageDetailPage = lazy(() =>\n import('./pages/StorePackageDetailPage').then((m) => ({ default: m.StorePackageDetailPage }))\n);\nconst InstalledPackagesPage = lazy(() =>\n import('./pages/InstalledPackagesPage').then((m) => ({ default: m.InstalledPackagesPage }))\n);\n\n// Lazy loaded pages - Settings & Chat\nconst SettingsPage = lazy(() =>\n import('./pages/SettingsPage').then((m) => ({ default: m.SettingsPage }))\n);\nconst ChatPage = lazy(() => import('./pages/ChatPage').then((m) => ({ default: m.ChatPage })));\n\n// Loading fallback — the same skeleton `BotmanorRoot` paints while its\n// implementation chunk resolves, so the content region never switches loading\n// idioms (and never goes empty) between first paint and the page rendering.\n\nexport const BotlitRoutes: FC = () => {\n const { basePath, isStandalone } = useBotlit();\n const location = useLocation();\n const t = useTr();\n\n /**\n * Create, edit and chat routes are reachable by URL, so they are gated here\n * as well as at the buttons that link to them: a member without the\n * permission gets a clear \"no access\" state instead of a form the gateway\n * would refuse to save.\n */\n const gated = (\n permission: BotmanorPermission,\n title: string,\n backTo: string,\n backLabel: string,\n element: ReactElement\n ): ReactElement => (\n <RequirePermission permission={permission} title={title} backTo={backTo} backLabel={backLabel}>\n {element}\n </RequirePermission>\n );\n const back = t('permissions.required.back', 'Go back');\n\n // Normalize base path\n const normalizedBasePath = basePath === '/' ? '' : basePath.replace(/\\/$/, '');\n\n // Guard: Only render if path matches basePath (when integrated)\n if (normalizedBasePath && !isStandalone) {\n const pathMatches =\n location.pathname === normalizedBasePath ||\n location.pathname.startsWith(normalizedBasePath + '/');\n\n if (!pathMatches) {\n return null;\n }\n }\n\n return (\n <div className=\"flex flex-col min-h-full bg-bg-surface\">\n <Suspense fallback={<RouteLoader />}>\n <Routes>\n {/* Dashboard - Eager loaded */}\n <Route index element={<DashboardPage />} />\n <Route path=\"home\" element={<Navigate to=\"/\" replace />} />\n\n {/* Bots */}\n <Route path=\"bots\" element={<BotsListPage />} />\n <Route\n path=\"bots/new\"\n element={gated(\n BOTMANOR_PERMISSIONS.APP_CREATE,\n t('botlit.botsList.actions.createBot', 'Create Bot'),\n 'bots',\n back,\n <BotDetailPage isNew />\n )}\n />\n <Route path=\"bots/:botId\" element={<BotDetailPage />} />\n <Route\n path=\"bots/:botId/edit\"\n element={gated(\n BOTMANOR_PERMISSIONS.APP_UPDATE,\n t('botlit.botsList.menu.editBot', 'Edit Bot'),\n 'bots',\n back,\n <BotDetailPage isEditing />\n )}\n />\n <Route path=\"bots/:botId/agents\" element={<AgentsListPage />} />\n <Route\n path=\"bots/:botId/agents/new\"\n element={gated(\n BOTMANOR_PERMISSIONS.AGENT_CREATE,\n t('botlit.agentsList.actions.createAgent', 'Create Agent'),\n 'agents',\n back,\n <AgentBuilderPage />\n )}\n />\n <Route path=\"bots/:botId/agents/:agentId\" element={<AgentDetailPage />} />\n <Route\n path=\"bots/:botId/agents/:agentId/edit\"\n element={gated(\n BOTMANOR_PERMISSIONS.AGENT_UPDATE,\n t('botlit.agentsList.menu.editAgent', 'Edit Agent'),\n 'agents',\n back,\n <AgentBuilderPage />\n )}\n />\n <Route path=\"bots/:botId/knowledge\" element={<KnowledgeBasesPage />} />\n <Route path=\"bots/:botId/knowledge/:kbId\" element={<KnowledgeBaseDetailPage />} />\n\n {/* Agents (global view) */}\n <Route path=\"agents\" element={<AgentsListPage />} />\n <Route\n path=\"agents/new\"\n element={gated(\n BOTMANOR_PERMISSIONS.AGENT_CREATE,\n t('botlit.agentsList.actions.createAgent', 'Create Agent'),\n 'agents',\n back,\n <AgentBuilderPage />\n )}\n />\n <Route path=\"agents/approvals\" element={<AgentApprovalsPage />} />\n <Route path=\"agents/:agentId\" element={<AgentDetailPage />} />\n <Route\n path=\"agents/:agentId/edit\"\n element={gated(\n BOTMANOR_PERMISSIONS.AGENT_UPDATE,\n t('botlit.agentsList.menu.editAgent', 'Edit Agent'),\n 'agents',\n back,\n <AgentBuilderPage />\n )}\n />\n <Route\n path=\"agents/:agentId/chat\"\n element={gated(\n BOTMANOR_PERMISSIONS.AGENT_EXECUTE,\n t('botlit.chat.title', 'AI Chat'),\n 'agents',\n back,\n <ChatPage />\n )}\n />\n\n {/* Conversations - Redirect to conversations microfe */}\n <Route path=\"conversations\" element={<Navigate to=\"/conversations\" replace />} />\n <Route\n path=\"conversations/:conversationId\"\n element={<Navigate to=\"/conversations\" replace />}\n />\n\n {/* Knowledge Bases */}\n <Route path=\"knowledge\" element={<KnowledgeBasesPage />} />\n <Route\n path=\"knowledge/new\"\n element={gated(\n BOTMANOR_PERMISSIONS.KNOWLEDGE_CREATE,\n t('botlit.knowledge.actions.create', 'Create Knowledge Base'),\n 'knowledge',\n back,\n <KnowledgeBaseDetailPage isNew />\n )}\n />\n <Route path=\"knowledge/:kbId\" element={<KnowledgeBaseDetailPage />} />\n\n {/* Retrieval Profiles */}\n <Route path=\"retrieval-profiles\" element={<RetrievalProfilesPage />} />\n <Route\n path=\"retrieval-profiles/new\"\n element={gated(\n BOTMANOR_PERMISSIONS.RETRIEVAL_PROFILE_CREATE,\n t('botlit.retrievalProfiles.actions.create', 'Create Retrieval Profile'),\n 'retrieval-profiles',\n back,\n <RetrievalProfileDetailPage isNew />\n )}\n />\n <Route path=\"retrieval-profiles/:profileId\" element={<RetrievalProfileDetailPage />} />\n\n {/* MCP Servers */}\n <Route path=\"mcp\" element={<MCPServersPage />} />\n <Route\n path=\"mcp/new\"\n element={gated(\n BOTMANOR_PERMISSIONS.MCP_CREATE,\n t('botlit.mcpServers.actions.add', 'Add MCP Server'),\n 'mcp',\n back,\n <MCPServerDetailPage isNew />\n )}\n />\n <Route path=\"mcp/:serverId\" element={<MCPServerDetailPage />} />\n\n {/* A2A Registry */}\n <Route path=\"a2a\" element={<A2ARegistryPage />} />\n <Route\n path=\"a2a/register\"\n element={gated(\n BOTMANOR_PERMISSIONS.A2A_REGISTRY_CREATE,\n t('botlit.a2aRegistry.actions.registerAgent', 'Register Agent'),\n 'a2a',\n back,\n <A2AAgentDetailPage isNew />\n )}\n />\n <Route path=\"a2a/:agentId\" element={<A2AAgentDetailPage />} />\n\n {/* Channels */}\n <Route path=\"channels\" element={<ChannelsPage />} />\n <Route\n path=\"channels/new\"\n element={gated(\n BOTMANOR_PERMISSIONS.CHANNEL_CREATE,\n t('botlit.channels.actions.addChannel', 'Add Channel'),\n 'channels',\n back,\n <ChannelDetailPage isNew />\n )}\n />\n <Route path=\"channels/routes\" element={<ChannelRoutesPage />} />\n <Route path=\"channels/:connectorId\" element={<ChannelDetailPage />} />\n\n {/* Policies & Guardrails */}\n <Route path=\"policies\" element={<PoliciesPage />} />\n <Route\n path=\"policies/new\"\n element={gated(\n BOTMANOR_PERMISSIONS.POLICY_CREATE,\n t('botlit.policies.actions.createPolicy', 'Create Policy'),\n 'policies',\n back,\n <PolicyDetailPage isNew />\n )}\n />\n <Route path=\"policies/:policyId\" element={<PolicyDetailPage />} />\n\n {/* Skills */}\n <Route path=\"skills\" element={<SkillsPage />} />\n <Route\n path=\"skills/new\"\n element={gated(\n BOTMANOR_PERMISSIONS.SKILL_CREATE,\n t('botlit.skills.actions.create', 'Create Skill'),\n 'skills',\n back,\n <SkillDetailPage isNew />\n )}\n />\n <Route path=\"skills/:skillId\" element={<SkillDetailPage />} />\n\n {/* Prompt Templates */}\n <Route path=\"prompt-templates\" element={<PromptTemplatesPage />} />\n <Route\n path=\"prompt-templates/new\"\n element={gated(\n BOTMANOR_PERMISSIONS.PROMPT_TEMPLATE_CREATE,\n t('botlit.promptTemplates.actions.create', 'Create Template'),\n 'prompt-templates',\n back,\n <PromptTemplateDetailPage isNew />\n )}\n />\n <Route path=\"prompt-templates/:templateId\" element={<PromptTemplateDetailPage />} />\n\n {/* Prompt Studio (legacy) */}\n <Route path=\"prompts\" element={<PromptStudioPage />} />\n\n {/* Executions */}\n <Route path=\"executions\" element={<ExecutionsPage />} />\n <Route path=\"ai\" element={<AiOperationsPage />} />\n <Route path=\"executions/:executionId\" element={<ExecutionDetailPage />} />\n\n {/* Buckets */}\n <Route path=\"buckets\" element={<BucketsPage />} />\n <Route path=\"buckets/new\" element={<BucketsPage />} />\n <Route path=\"buckets/:bucketId\" element={<BucketsPage />} />\n\n {/* Store */}\n <Route path=\"store\" element={<StorePage />} />\n <Route path=\"store/installed\" element={<InstalledPackagesPage />} />\n <Route path=\"store/package/:slug\" element={<StorePackageDetailPage />} />\n\n {/* Chat */}\n <Route\n path=\"chat\"\n element={gated(\n BOTMANOR_PERMISSIONS.AGENT_EXECUTE,\n t('botlit.chat.title', 'AI Chat'),\n 'agents',\n back,\n <ChatPage />\n )}\n />\n <Route\n path=\"chat/:agentId\"\n element={gated(\n BOTMANOR_PERMISSIONS.AGENT_EXECUTE,\n t('botlit.chat.title', 'AI Chat'),\n 'agents',\n back,\n <ChatPage />\n )}\n />\n\n {/* Settings */}\n <Route path=\"settings\" element={<SettingsPage />} />\n\n {/* Workflow routes are owned by the shared app-shell WorkflowsRoot. */}\n <Route\n path=\"list\"\n element={<Navigate to={`${normalizedBasePath}/workflows/list`} replace />}\n />\n\n {/* Fallback */}\n <Route path=\"*\" element={<Navigate to=\"/\" replace />} />\n </Routes>\n </Suspense>\n </div>\n );\n};\n"],"mappings":"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"}
|
|
@@ -0,0 +1,254 @@
|
|
|
1
|
+
import { useTr as e } from "../../shared/hooks/useTr.js";
|
|
2
|
+
import { PauseBotmanorAgentForSupervisorDocument as t, RebuildKnowledgeBaseIndexForSupervisorDocument as n } from "../../generated/wspace-operations.js";
|
|
3
|
+
import { useWorkspaceClient as r } from "../hooks/internal/workspaceGateway.js";
|
|
4
|
+
import { cn as i } from "../utils/cn.js";
|
|
5
|
+
import { formatRelativeTime as a } from "../utils/formatters.js";
|
|
6
|
+
import { Button as o } from "./Button.js";
|
|
7
|
+
import { Card as s } from "./Card.js";
|
|
8
|
+
import { Badge as c } from "./Badge.js";
|
|
9
|
+
import { EmptyState as l } from "./EmptyState.js";
|
|
10
|
+
import { ErrorState as u } from "./ErrorState.js";
|
|
11
|
+
import { predictionSeverity as d, predictionSubjectName as f, useAiPredictions as p, useSetAiPredictionStatus as m } from "../hooks/useAiOperations.js";
|
|
12
|
+
import { AiPredictionStatus as h } from "../../generated/wspace-types.js";
|
|
13
|
+
import { useCallback as g, useMemo as _, useState as v } from "react";
|
|
14
|
+
import { AlertDialog as y, AlertDialogAction as b, AlertDialogCancel as x, AlertDialogContent as S, AlertDialogDescription as C, AlertDialogFooter as w, AlertDialogHeader as T, AlertDialogTitle as E } from "@burdenoff/fe-libs/ui";
|
|
15
|
+
import { jsx as D, jsxs as O } from "react/jsx-runtime";
|
|
16
|
+
import { useNavigate as k } from "react-router";
|
|
17
|
+
import { Check as A, ShieldAlert as j, X as M } from "lucide-react";
|
|
18
|
+
//#region src/botlit/components/AiOperationsPanel.tsx
|
|
19
|
+
var N = {
|
|
20
|
+
CRITICAL: "destructive",
|
|
21
|
+
WARNING: "warning",
|
|
22
|
+
INFO: "secondary"
|
|
23
|
+
}, P = {
|
|
24
|
+
CRITICAL: "botlit.aiOperations.severity.critical",
|
|
25
|
+
WARNING: "botlit.aiOperations.severity.warning",
|
|
26
|
+
INFO: "botlit.aiOperations.severity.info"
|
|
27
|
+
}, F = {
|
|
28
|
+
failure_rate_regression: "botlit.aiOperations.type.failureRateRegression",
|
|
29
|
+
grounding_decay: "botlit.aiOperations.type.groundingDecay",
|
|
30
|
+
cost_anomaly: "botlit.aiOperations.type.costAnomaly",
|
|
31
|
+
latency_drift: "botlit.aiOperations.type.latencyDrift",
|
|
32
|
+
stalled_index: "botlit.aiOperations.type.stalledIndex",
|
|
33
|
+
idle_agent: "botlit.aiOperations.type.idleAgent",
|
|
34
|
+
stale_knowledge: "botlit.aiOperations.type.staleKnowledge"
|
|
35
|
+
};
|
|
36
|
+
function I(e, t) {
|
|
37
|
+
switch (e.predictionType) {
|
|
38
|
+
case "stalled_index": return e.subjectType !== "KNOWLEDGE_BASE" || !e.subjectId ? null : {
|
|
39
|
+
kind: "rebuild-index",
|
|
40
|
+
confirmTitle: t("botlit.aiOperations.confirm.rebuildTitle", "Rebuild the knowledge base index?"),
|
|
41
|
+
confirmBody: t("botlit.aiOperations.confirm.rebuildBody", "This rebuilds the index for this knowledge base so agents can retrieve from it again. The finding is marked accepted afterwards.")
|
|
42
|
+
};
|
|
43
|
+
case "failure_rate_regression":
|
|
44
|
+
case "idle_agent": return e.subjectType !== "AGENT" || !e.subjectId ? null : {
|
|
45
|
+
kind: "pause-agent",
|
|
46
|
+
confirmTitle: t("botlit.aiOperations.confirm.pauseTitle", "Pause this agent?"),
|
|
47
|
+
confirmBody: t("botlit.aiOperations.confirm.pauseBody", "The agent stops answering until a workspace member reactivates it. The finding is marked accepted afterwards.")
|
|
48
|
+
};
|
|
49
|
+
default: return null;
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
function L(e) {
|
|
53
|
+
if (!e.subjectId) return null;
|
|
54
|
+
switch (e.subjectType) {
|
|
55
|
+
case "AGENT": return `/agents/${e.subjectId}`;
|
|
56
|
+
case "APP": return `/bots/${e.subjectId}`;
|
|
57
|
+
case "KNOWLEDGE_BASE": return `/knowledge/${e.subjectId}`;
|
|
58
|
+
default: return null;
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
function R(e) {
|
|
62
|
+
let t = e.features ?? {}, n = [], r = (e, t) => {
|
|
63
|
+
typeof t == "number" ? n.push([e, Number.isInteger(t) ? String(t) : t.toFixed(4)]) : typeof t == "string" && t.length > 0 && t.length < 80 && n.push([e, t]);
|
|
64
|
+
};
|
|
65
|
+
for (let [e, n] of Object.entries(t).slice(0, 6)) e.endsWith("At") || e === "knowledgeBaseIds" || e === "agentIds" || r(e, n);
|
|
66
|
+
return n.slice(0, 4);
|
|
67
|
+
}
|
|
68
|
+
var z = ({ record: t, busy: n, onAccept: r, onDismiss: l }) => {
|
|
69
|
+
let u = e(), p = k(), m = d(t), h = f(t), g = t.status === "GENERATED" ? I(t, u) : null, _ = L(t), v = R(t), y = t.status === "GENERATED";
|
|
70
|
+
return /* @__PURE__ */ O(s, {
|
|
71
|
+
className: i("p-5", m === "CRITICAL" && "glow"),
|
|
72
|
+
"data-testid": "ai-operations-card",
|
|
73
|
+
children: [
|
|
74
|
+
/* @__PURE__ */ O("div", {
|
|
75
|
+
className: "flex items-start justify-between gap-3",
|
|
76
|
+
children: [/* @__PURE__ */ O("div", {
|
|
77
|
+
className: "flex items-center gap-2 flex-wrap",
|
|
78
|
+
children: [
|
|
79
|
+
/* @__PURE__ */ D(c, {
|
|
80
|
+
variant: N[m] ?? "secondary",
|
|
81
|
+
children: u(P[m] ?? P.INFO, m.toLowerCase())
|
|
82
|
+
}),
|
|
83
|
+
/* @__PURE__ */ D(c, {
|
|
84
|
+
variant: "outline",
|
|
85
|
+
children: u(F[t.predictionType] ?? "botlit.aiOperations.type.unknown", t.predictionType.replace(/_/g, " "))
|
|
86
|
+
}),
|
|
87
|
+
/* @__PURE__ */ D("span", {
|
|
88
|
+
className: "text-sm text-text-secondary",
|
|
89
|
+
children: u("botlit.aiOperations.onSubject", "on {{name}}", { name: h })
|
|
90
|
+
})
|
|
91
|
+
]
|
|
92
|
+
}), /* @__PURE__ */ D("span", {
|
|
93
|
+
className: "text-xs text-text-tertiary whitespace-nowrap",
|
|
94
|
+
children: a(t.generatedAt)
|
|
95
|
+
})]
|
|
96
|
+
}),
|
|
97
|
+
/* @__PURE__ */ D("p", {
|
|
98
|
+
className: "mt-3 text-sm text-text-primary",
|
|
99
|
+
children: t.recommendation
|
|
100
|
+
}),
|
|
101
|
+
v.length > 0 && /* @__PURE__ */ D("dl", {
|
|
102
|
+
className: "mt-3 grid grid-cols-2 gap-x-4 gap-y-1 sm:grid-cols-4",
|
|
103
|
+
children: v.map(([e, t]) => /* @__PURE__ */ O("div", { children: [/* @__PURE__ */ D("dt", {
|
|
104
|
+
className: "text-xs text-text-tertiary",
|
|
105
|
+
children: e
|
|
106
|
+
}), /* @__PURE__ */ D("dd", {
|
|
107
|
+
className: "text-sm text-text-secondary",
|
|
108
|
+
children: t
|
|
109
|
+
})] }, e))
|
|
110
|
+
}),
|
|
111
|
+
y && /* @__PURE__ */ O("div", {
|
|
112
|
+
className: "mt-4 flex items-center gap-2",
|
|
113
|
+
children: [g ? /* @__PURE__ */ O(o, {
|
|
114
|
+
size: "sm",
|
|
115
|
+
onClick: () => r(t),
|
|
116
|
+
disabled: n,
|
|
117
|
+
children: [/* @__PURE__ */ D(A, { className: "h-4 w-4" }), u("botlit.aiOperations.actions.accept", "Accept")]
|
|
118
|
+
}) : _ && /* @__PURE__ */ O(o, {
|
|
119
|
+
size: "sm",
|
|
120
|
+
variant: "outline",
|
|
121
|
+
onClick: () => p(_),
|
|
122
|
+
disabled: n,
|
|
123
|
+
children: [/* @__PURE__ */ D(A, { className: "h-4 w-4" }), u("botlit.aiOperations.actions.reviewSubject", "Review subject")]
|
|
124
|
+
}), /* @__PURE__ */ O(o, {
|
|
125
|
+
size: "sm",
|
|
126
|
+
variant: "outline",
|
|
127
|
+
onClick: () => l(t),
|
|
128
|
+
disabled: n,
|
|
129
|
+
children: [/* @__PURE__ */ D(M, { className: "h-4 w-4" }), u("botlit.aiOperations.actions.dismiss", "Dismiss")]
|
|
130
|
+
})]
|
|
131
|
+
}),
|
|
132
|
+
!y && /* @__PURE__ */ D("div", {
|
|
133
|
+
className: "mt-4",
|
|
134
|
+
children: /* @__PURE__ */ D(c, {
|
|
135
|
+
variant: t.status === "ACCEPTED" ? "success" : "outline",
|
|
136
|
+
children: t.status
|
|
137
|
+
})
|
|
138
|
+
})
|
|
139
|
+
]
|
|
140
|
+
});
|
|
141
|
+
}, B = ({ filter: i, title: a, description: o, className: c }) => {
|
|
142
|
+
let d = e(), f = r(), { data: k, loading: A, error: M, refetch: N } = p(i), [P, F] = m(), [L, R] = v(null), [B, V] = v(null), H = F.loading, U = g(async (e) => {
|
|
143
|
+
V(null);
|
|
144
|
+
try {
|
|
145
|
+
await P({
|
|
146
|
+
id: e.id,
|
|
147
|
+
status: h.Dismissed
|
|
148
|
+
}), await N();
|
|
149
|
+
} catch (e) {
|
|
150
|
+
V(e instanceof Error ? e.message : String(e));
|
|
151
|
+
}
|
|
152
|
+
}, [P, N]), W = g(async () => {
|
|
153
|
+
let e = L;
|
|
154
|
+
if (!e) return;
|
|
155
|
+
R(null), V(null);
|
|
156
|
+
let r = I(e, d);
|
|
157
|
+
try {
|
|
158
|
+
r?.kind === "rebuild-index" && e.subjectId ? await f.mutate({
|
|
159
|
+
mutation: n,
|
|
160
|
+
variables: { knowledgeBaseId: e.subjectId }
|
|
161
|
+
}) : r?.kind === "pause-agent" && e.subjectId && await f.mutate({
|
|
162
|
+
mutation: t,
|
|
163
|
+
variables: {
|
|
164
|
+
id: e.subjectId,
|
|
165
|
+
input: { status: "PAUSED" }
|
|
166
|
+
}
|
|
167
|
+
}), await P({
|
|
168
|
+
id: e.id,
|
|
169
|
+
status: h.Accepted
|
|
170
|
+
}), await N();
|
|
171
|
+
} catch (e) {
|
|
172
|
+
V(e instanceof Error ? e.message : String(e));
|
|
173
|
+
}
|
|
174
|
+
}, [
|
|
175
|
+
L,
|
|
176
|
+
f,
|
|
177
|
+
P,
|
|
178
|
+
N,
|
|
179
|
+
d
|
|
180
|
+
]), G = L ? I(L, d) : null, K = _(() => M ? /* @__PURE__ */ D(u, {
|
|
181
|
+
resource: d("botlit.aiOperations.errorTitle", "AI operations findings"),
|
|
182
|
+
error: M,
|
|
183
|
+
onRetry: () => void N()
|
|
184
|
+
}) : A && k.length === 0 ? /* @__PURE__ */ D("div", {
|
|
185
|
+
className: "space-y-3",
|
|
186
|
+
"aria-busy": "true",
|
|
187
|
+
children: [
|
|
188
|
+
0,
|
|
189
|
+
1,
|
|
190
|
+
2
|
|
191
|
+
].map((e) => /* @__PURE__ */ D(s, {
|
|
192
|
+
className: "p-5 h-28 animate-pulse bg-bg-subtle",
|
|
193
|
+
children: /* @__PURE__ */ D("span", {
|
|
194
|
+
className: "sr-only",
|
|
195
|
+
children: d("botlit.aiOperations.loading", "Loading findings")
|
|
196
|
+
})
|
|
197
|
+
}, e))
|
|
198
|
+
}) : k.length === 0 ? /* @__PURE__ */ D(l, {
|
|
199
|
+
icon: /* @__PURE__ */ D(j, { className: "h-8 w-8" }),
|
|
200
|
+
title: d("botlit.aiOperations.emptyTitle", "No findings"),
|
|
201
|
+
description: d("botlit.aiOperations.emptyDescription", "The supervisor has not flagged anything. Enable the scheduled review to keep it that way.")
|
|
202
|
+
}) : /* @__PURE__ */ D("div", {
|
|
203
|
+
className: "space-y-3",
|
|
204
|
+
"data-testid": "ai-operations-feed",
|
|
205
|
+
children: k.map((e) => /* @__PURE__ */ D(z, {
|
|
206
|
+
record: e,
|
|
207
|
+
busy: H,
|
|
208
|
+
onAccept: (e) => R(e),
|
|
209
|
+
onDismiss: (e) => void U(e)
|
|
210
|
+
}, e.id))
|
|
211
|
+
}), [
|
|
212
|
+
M,
|
|
213
|
+
A,
|
|
214
|
+
k,
|
|
215
|
+
H,
|
|
216
|
+
U,
|
|
217
|
+
N,
|
|
218
|
+
d
|
|
219
|
+
]);
|
|
220
|
+
return /* @__PURE__ */ O("section", {
|
|
221
|
+
className: c,
|
|
222
|
+
"data-testid": "ai-operations-panel",
|
|
223
|
+
children: [
|
|
224
|
+
(a || o) && /* @__PURE__ */ O("header", {
|
|
225
|
+
className: "mb-4",
|
|
226
|
+
children: [a && /* @__PURE__ */ D("h2", {
|
|
227
|
+
className: "text-lg font-semibold text-text-primary",
|
|
228
|
+
children: a
|
|
229
|
+
}), o && /* @__PURE__ */ D("p", {
|
|
230
|
+
className: "text-sm text-text-secondary",
|
|
231
|
+
children: o
|
|
232
|
+
})]
|
|
233
|
+
}),
|
|
234
|
+
B && /* @__PURE__ */ D("p", {
|
|
235
|
+
className: "mb-3 text-sm text-status-error-text",
|
|
236
|
+
role: "alert",
|
|
237
|
+
children: B
|
|
238
|
+
}),
|
|
239
|
+
K,
|
|
240
|
+
/* @__PURE__ */ D(y, {
|
|
241
|
+
open: L != null,
|
|
242
|
+
onOpenChange: (e) => !e && R(null),
|
|
243
|
+
children: /* @__PURE__ */ O(S, { children: [/* @__PURE__ */ O(T, { children: [/* @__PURE__ */ D(E, { children: G?.confirmTitle }), /* @__PURE__ */ D(C, { children: G?.confirmBody })] }), /* @__PURE__ */ O(w, { children: [/* @__PURE__ */ D(x, { children: d("botlit.aiOperations.actions.cancel", "Cancel") }), /* @__PURE__ */ D(b, {
|
|
244
|
+
onClick: () => void W(),
|
|
245
|
+
children: d("botlit.aiOperations.actions.confirmAccept", "Confirm")
|
|
246
|
+
})] })] })
|
|
247
|
+
})
|
|
248
|
+
]
|
|
249
|
+
});
|
|
250
|
+
};
|
|
251
|
+
//#endregion
|
|
252
|
+
export { B as AiOperationsPanel };
|
|
253
|
+
|
|
254
|
+
//# sourceMappingURL=AiOperationsPanel.js.map
|