@burdenoff/microfe-botmanor 2026.813.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 (160) hide show
  1. package/README.md +12 -0
  2. package/dist/botlit/BotlitRoutes.js +357 -0
  3. package/dist/botlit/BotlitRoutes.js.map +1 -0
  4. package/dist/botlit/BotmanorRoot.js +12 -0
  5. package/dist/botlit/BotmanorRoot.js.map +1 -0
  6. package/dist/botlit/BotmanorRootInner.js +101 -0
  7. package/dist/botlit/BotmanorRootInner.js.map +1 -0
  8. package/dist/botlit/components/Badge.js +39 -0
  9. package/dist/botlit/components/Badge.js.map +1 -0
  10. package/dist/botlit/components/Button.js +46 -0
  11. package/dist/botlit/components/Button.js.map +1 -0
  12. package/dist/botlit/components/Card.js +31 -0
  13. package/dist/botlit/components/Card.js.map +1 -0
  14. package/dist/botlit/components/ChannelSelectorSheet.js +130 -0
  15. package/dist/botlit/components/ChannelSelectorSheet.js.map +1 -0
  16. package/dist/botlit/components/EmptyState.js +35 -0
  17. package/dist/botlit/components/EmptyState.js.map +1 -0
  18. package/dist/botlit/components/ErrorState.js +33 -0
  19. package/dist/botlit/components/ErrorState.js.map +1 -0
  20. package/dist/botlit/components/Input.js +59 -0
  21. package/dist/botlit/components/Input.js.map +1 -0
  22. package/dist/botlit/components/PageLayout.js +34 -0
  23. package/dist/botlit/components/PageLayout.js.map +1 -0
  24. package/dist/botlit/components/QuotaExhaustedDialog.js +20 -0
  25. package/dist/botlit/components/QuotaExhaustedDialog.js.map +1 -0
  26. package/dist/botlit/components/RouteLoader.js +52 -0
  27. package/dist/botlit/components/RouteLoader.js.map +1 -0
  28. package/dist/botlit/components/VersionHistoryPanel.js +144 -0
  29. package/dist/botlit/components/VersionHistoryPanel.js.map +1 -0
  30. package/dist/botlit/components/WorkspaceRequired.js +70 -0
  31. package/dist/botlit/components/WorkspaceRequired.js.map +1 -0
  32. package/dist/botlit/hooks/index.js +16 -0
  33. package/dist/botlit/hooks/internal/mutationInput.js +16 -0
  34. package/dist/botlit/hooks/internal/mutationInput.js.map +1 -0
  35. package/dist/botlit/hooks/internal/workspaceGateway.js +99 -0
  36. package/dist/botlit/hooks/internal/workspaceGateway.js.map +1 -0
  37. package/dist/botlit/hooks/useA2A.js +184 -0
  38. package/dist/botlit/hooks/useA2A.js.map +1 -0
  39. package/dist/botlit/hooks/useAgents.js +469 -0
  40. package/dist/botlit/hooks/useAgents.js.map +1 -0
  41. package/dist/botlit/hooks/useBots.js +306 -0
  42. package/dist/botlit/hooks/useBots.js.map +1 -0
  43. package/dist/botlit/hooks/useBuckets.js +119 -0
  44. package/dist/botlit/hooks/useBuckets.js.map +1 -0
  45. package/dist/botlit/hooks/useChannels.js +213 -0
  46. package/dist/botlit/hooks/useChannels.js.map +1 -0
  47. package/dist/botlit/hooks/useConversations.js +64 -0
  48. package/dist/botlit/hooks/useConversations.js.map +1 -0
  49. package/dist/botlit/hooks/useExecutions.js +86 -0
  50. package/dist/botlit/hooks/useExecutions.js.map +1 -0
  51. package/dist/botlit/hooks/useKnowledgeBases.js +113 -0
  52. package/dist/botlit/hooks/useKnowledgeBases.js.map +1 -0
  53. package/dist/botlit/hooks/useLLMProviders.js +83 -0
  54. package/dist/botlit/hooks/useLLMProviders.js.map +1 -0
  55. package/dist/botlit/hooks/useMCPServers.js +134 -0
  56. package/dist/botlit/hooks/useMCPServers.js.map +1 -0
  57. package/dist/botlit/hooks/usePolicies.js +120 -0
  58. package/dist/botlit/hooks/usePolicies.js.map +1 -0
  59. package/dist/botlit/hooks/usePromptTemplates.js +161 -0
  60. package/dist/botlit/hooks/usePromptTemplates.js.map +1 -0
  61. package/dist/botlit/hooks/useRetrievalProfiles.js +146 -0
  62. package/dist/botlit/hooks/useRetrievalProfiles.js.map +1 -0
  63. package/dist/botlit/hooks/useSkills.js +132 -0
  64. package/dist/botlit/hooks/useSkills.js.map +1 -0
  65. package/dist/botlit/hooks/useStore.js +167 -0
  66. package/dist/botlit/hooks/useStore.js.map +1 -0
  67. package/dist/botlit/hooks/useUserPlatformConnection.js +172 -0
  68. package/dist/botlit/hooks/useUserPlatformConnection.js.map +1 -0
  69. package/dist/botlit/index.js +11 -0
  70. package/dist/botlit/pages/A2AAgentDetailPage.js +589 -0
  71. package/dist/botlit/pages/A2AAgentDetailPage.js.map +1 -0
  72. package/dist/botlit/pages/A2ARegistryPage.js +240 -0
  73. package/dist/botlit/pages/A2ARegistryPage.js.map +1 -0
  74. package/dist/botlit/pages/AgentBuilderPage.js +486 -0
  75. package/dist/botlit/pages/AgentBuilderPage.js.map +1 -0
  76. package/dist/botlit/pages/AgentDetailPage.js +517 -0
  77. package/dist/botlit/pages/AgentDetailPage.js.map +1 -0
  78. package/dist/botlit/pages/AgentsListPage.js +294 -0
  79. package/dist/botlit/pages/AgentsListPage.js.map +1 -0
  80. package/dist/botlit/pages/BotChannelsTab.js +530 -0
  81. package/dist/botlit/pages/BotChannelsTab.js.map +1 -0
  82. package/dist/botlit/pages/BotDetailPage.js +872 -0
  83. package/dist/botlit/pages/BotDetailPage.js.map +1 -0
  84. package/dist/botlit/pages/BotWorkflowTab.js +229 -0
  85. package/dist/botlit/pages/BotWorkflowTab.js.map +1 -0
  86. package/dist/botlit/pages/BotsListPage.js +313 -0
  87. package/dist/botlit/pages/BotsListPage.js.map +1 -0
  88. package/dist/botlit/pages/BucketsPage.js +604 -0
  89. package/dist/botlit/pages/BucketsPage.js.map +1 -0
  90. package/dist/botlit/pages/ChannelDetailPage.js +955 -0
  91. package/dist/botlit/pages/ChannelDetailPage.js.map +1 -0
  92. package/dist/botlit/pages/ChannelRoutesPage.js +218 -0
  93. package/dist/botlit/pages/ChannelRoutesPage.js.map +1 -0
  94. package/dist/botlit/pages/ChannelsPage.js +304 -0
  95. package/dist/botlit/pages/ChannelsPage.js.map +1 -0
  96. package/dist/botlit/pages/ChatPage.js +247 -0
  97. package/dist/botlit/pages/ChatPage.js.map +1 -0
  98. package/dist/botlit/pages/DashboardPage.js +318 -0
  99. package/dist/botlit/pages/DashboardPage.js.map +1 -0
  100. package/dist/botlit/pages/ExecutionDetailPage.js +313 -0
  101. package/dist/botlit/pages/ExecutionDetailPage.js.map +1 -0
  102. package/dist/botlit/pages/ExecutionsPage.js +294 -0
  103. package/dist/botlit/pages/ExecutionsPage.js.map +1 -0
  104. package/dist/botlit/pages/InstalledPackagesPage.js +619 -0
  105. package/dist/botlit/pages/InstalledPackagesPage.js.map +1 -0
  106. package/dist/botlit/pages/KnowledgeBaseDetailPage.js +473 -0
  107. package/dist/botlit/pages/KnowledgeBaseDetailPage.js.map +1 -0
  108. package/dist/botlit/pages/KnowledgeBasesPage.js +150 -0
  109. package/dist/botlit/pages/KnowledgeBasesPage.js.map +1 -0
  110. package/dist/botlit/pages/MCPServerDetailPage.js +550 -0
  111. package/dist/botlit/pages/MCPServerDetailPage.js.map +1 -0
  112. package/dist/botlit/pages/MCPServersPage.js +321 -0
  113. package/dist/botlit/pages/MCPServersPage.js.map +1 -0
  114. package/dist/botlit/pages/PoliciesPage.js +224 -0
  115. package/dist/botlit/pages/PoliciesPage.js.map +1 -0
  116. package/dist/botlit/pages/PolicyDetailPage.js +861 -0
  117. package/dist/botlit/pages/PolicyDetailPage.js.map +1 -0
  118. package/dist/botlit/pages/PromptStudioPage.js +236 -0
  119. package/dist/botlit/pages/PromptStudioPage.js.map +1 -0
  120. package/dist/botlit/pages/PromptTemplateDetailPage.js +812 -0
  121. package/dist/botlit/pages/PromptTemplateDetailPage.js.map +1 -0
  122. package/dist/botlit/pages/PromptTemplatesPage.js +269 -0
  123. package/dist/botlit/pages/PromptTemplatesPage.js.map +1 -0
  124. package/dist/botlit/pages/RetrievalProfileDetailPage.js +559 -0
  125. package/dist/botlit/pages/RetrievalProfileDetailPage.js.map +1 -0
  126. package/dist/botlit/pages/RetrievalProfilesPage.js +219 -0
  127. package/dist/botlit/pages/RetrievalProfilesPage.js.map +1 -0
  128. package/dist/botlit/pages/SettingsPage.js +655 -0
  129. package/dist/botlit/pages/SettingsPage.js.map +1 -0
  130. package/dist/botlit/pages/SkillDetailPage.js +778 -0
  131. package/dist/botlit/pages/SkillDetailPage.js.map +1 -0
  132. package/dist/botlit/pages/SkillsPage.js +206 -0
  133. package/dist/botlit/pages/SkillsPage.js.map +1 -0
  134. package/dist/botlit/pages/StorePackageDetailPage.js +462 -0
  135. package/dist/botlit/pages/StorePackageDetailPage.js.map +1 -0
  136. package/dist/botlit/pages/StorePage.js +315 -0
  137. package/dist/botlit/pages/StorePage.js.map +1 -0
  138. package/dist/botlit/providers/BotlitProvider.js +93 -0
  139. package/dist/botlit/providers/BotlitProvider.js.map +1 -0
  140. package/dist/botlit/store/botlitStore.js +101 -0
  141. package/dist/botlit/store/botlitStore.js.map +1 -0
  142. package/dist/botlit/utils/cn.js +10 -0
  143. package/dist/botlit/utils/cn.js.map +1 -0
  144. package/dist/botlit/utils/formatters.js +37 -0
  145. package/dist/botlit/utils/formatters.js.map +1 -0
  146. package/dist/botlit/utils/navigation.js +9 -0
  147. package/dist/botlit/utils/navigation.js.map +1 -0
  148. package/dist/botlit/utils/unions.js +14 -0
  149. package/dist/botlit/utils/unions.js.map +1 -0
  150. package/dist/generated/global-operations.js +66 -0
  151. package/dist/generated/global-operations.js.map +1 -0
  152. package/dist/generated/global-types.js +8 -0
  153. package/dist/generated/global-types.js.map +1 -0
  154. package/dist/generated/wspace-operations.js +1591 -0
  155. package/dist/generated/wspace-operations.js.map +1 -0
  156. package/dist/generated/wspace-types.js +12 -0
  157. package/dist/generated/wspace-types.js.map +1 -0
  158. package/dist/index.js +13 -0
  159. package/dist/utils/nativeBridge.js +2 -0
  160. package/package.json +133 -0
@@ -0,0 +1,517 @@
1
+ import { useBotlit as e } from "../providers/BotlitProvider.js";
2
+ import { useAgent as t, useDeleteAgent as n, useUpdateAgent as r } from "../hooks/useAgents.js";
3
+ import { cn as ee } from "../utils/cn.js";
4
+ import { formatRelativeTime as i } from "../utils/formatters.js";
5
+ import { PageLayout as a } from "../components/PageLayout.js";
6
+ import { Card as o, CardContent as s, CardDescription as c, CardHeader as l, CardTitle as u } from "../components/Card.js";
7
+ import { Button as d } from "../components/Button.js";
8
+ import { Badge as f, StatusBadge as p } from "../components/Badge.js";
9
+ import { EmptyState as m } from "../components/EmptyState.js";
10
+ import { VersionHistoryPanel as h } from "../components/VersionHistoryPanel.js";
11
+ import { useState as te } from "react";
12
+ import { GlassCard as ne, NextSteps as re, PagePurpose as ie } from "@burdenoff/fe-libs/ui";
13
+ import { jsx as g, jsxs as _ } from "react/jsx-runtime";
14
+ import { useParams as v } from "react-router";
15
+ import { ArrowLeft as y, BarChart3 as b, BookOpen as x, Brain as S, Edit as ae, FileText as C, History as w, MessageSquare as T, Play as E, Settings as oe, Share2 as D, Shield as O, Trash2 as k, Wrench as A } from "lucide-react";
16
+ import { useI18n as se } from "@burdenoff/fe-libs/shared/providers/shell/I18nProvider";
17
+ import { toast as j } from "sonner";
18
+ //#region src/botlit/pages/AgentDetailPage.tsx
19
+ var M = () => {
20
+ let { t: M } = se(), N = (e, t) => {
21
+ let n = M(e);
22
+ return n === e ? t : n;
23
+ }, { agentId: P } = v(), { navigateTo: F } = e(), { data: I, loading: L, refetch: R } = t(P), [z, B] = r(), [V, H] = n(), [U, W] = te("overview");
24
+ if (L) return /* @__PURE__ */ g(a, {
25
+ title: N("botlit.common.loading", "Loading..."),
26
+ children: /* @__PURE__ */ g("div", { className: "h-96 bg-bg-sunken motion-safe:animate-vc-shimmer rounded-lg" })
27
+ });
28
+ if (!I) return /* @__PURE__ */ g(a, {
29
+ title: N("botlit.agentDetail.notFound.title", "Agent Not Found"),
30
+ children: /* @__PURE__ */ g(m, {
31
+ illustration: "empty-agents",
32
+ title: N("botlit.agentDetail.notFound.title", "Agent Not Found"),
33
+ description: N("botlit.agentDetail.notFound.description", "The agent you're looking for doesn't exist."),
34
+ action: /* @__PURE__ */ g(d, {
35
+ onClick: () => F("agents"),
36
+ children: N("botlit.agentDetail.notFound.backAction", "Back to Agents")
37
+ })
38
+ })
39
+ });
40
+ let G = I.systemPrompt || "", K = I.llmModelId || "", ce = I.temperature, le = I.maxTokens, q = I.mcpConnectionIds ?? [], J = I.knowledgeBaseIds ?? [], Y = I.workflowIds ?? [], X = I.capabilities ?? [], Z = I.tagIds ?? [], Q = I.maxConcurrentExecutions || 10, $ = I.metadata ?? null, ue = [
41
+ {
42
+ id: "overview",
43
+ label: N("botlit.agentDetail.tabs.overview", "Overview"),
44
+ icon: /* @__PURE__ */ g(b, { size: 16 })
45
+ },
46
+ {
47
+ id: "prompt",
48
+ label: N("botlit.agentDetail.tabs.prompt", "Prompt"),
49
+ icon: /* @__PURE__ */ g(C, { size: 16 })
50
+ },
51
+ {
52
+ id: "llm",
53
+ label: N("botlit.agentDetail.tabs.llmConfig", "LLM Config"),
54
+ icon: /* @__PURE__ */ g(S, { size: 16 })
55
+ },
56
+ {
57
+ id: "tools",
58
+ label: N("botlit.agentDetail.tabs.tools", "Tools"),
59
+ icon: /* @__PURE__ */ g(A, { size: 16 })
60
+ },
61
+ {
62
+ id: "knowledge",
63
+ label: N("botlit.agentDetail.tabs.knowledge", "Knowledge"),
64
+ icon: /* @__PURE__ */ g(x, { size: 16 })
65
+ },
66
+ {
67
+ id: "guardrails",
68
+ label: N("botlit.agentDetail.tabs.guardrails", "Guardrails"),
69
+ icon: /* @__PURE__ */ g(O, { size: 16 })
70
+ },
71
+ {
72
+ id: "a2a",
73
+ label: N("botlit.agentDetail.tabs.a2a", "A2A"),
74
+ icon: /* @__PURE__ */ g(D, { size: 16 })
75
+ },
76
+ {
77
+ id: "versions",
78
+ label: N("botlit.agentDetail.tabs.versions", "Versions"),
79
+ icon: /* @__PURE__ */ g(w, { size: 16 })
80
+ }
81
+ ];
82
+ return /* @__PURE__ */ g(a, {
83
+ title: /* @__PURE__ */ _("div", {
84
+ className: "flex items-center gap-3",
85
+ children: [
86
+ /* @__PURE__ */ g(d, {
87
+ variant: "ghost",
88
+ size: "icon",
89
+ onClick: () => F("agents"),
90
+ children: /* @__PURE__ */ g(y, { size: 20 })
91
+ }),
92
+ /* @__PURE__ */ g("span", {
93
+ className: "text-3xl",
94
+ children: "🤖"
95
+ }),
96
+ /* @__PURE__ */ _("div", { children: [/* @__PURE__ */ _("div", {
97
+ className: "flex items-center gap-2",
98
+ children: [
99
+ /* @__PURE__ */ g("span", { children: I.name }),
100
+ /* @__PURE__ */ g(p, { status: I.status }),
101
+ /* @__PURE__ */ g(f, {
102
+ variant: "outline",
103
+ children: I.slug
104
+ })
105
+ ]
106
+ }), /* @__PURE__ */ g("p", {
107
+ className: "text-sm font-normal text-text-secondary",
108
+ children: I.description
109
+ })] })
110
+ ]
111
+ }),
112
+ actions: /* @__PURE__ */ _("div", {
113
+ className: "flex gap-2",
114
+ children: [
115
+ I.status === "DRAFT" || I.status === "ARCHIVED" ? /* @__PURE__ */ g(d, {
116
+ variant: "default",
117
+ isLoading: B.loading,
118
+ onClick: async () => {
119
+ try {
120
+ if (!P) return;
121
+ await z({
122
+ agentId: P,
123
+ input: { status: "ACTIVE" }
124
+ }), await R(), j.success(`${N("botlit.agentDetail.activate.successPrefix", "Agent")} "${I.name}" ${N("botlit.agentDetail.activate.successSuffix", "activated")}`);
125
+ } catch (e) {
126
+ j.error(e instanceof Error ? e.message : N("botlit.agentDetail.activate.error", "Failed to activate agent"));
127
+ }
128
+ },
129
+ children: N("botlit.agentDetail.actions.activate", "Activate")
130
+ }) : /* @__PURE__ */ g(d, {
131
+ variant: "outline",
132
+ isLoading: B.loading,
133
+ onClick: async () => {
134
+ try {
135
+ if (!P) return;
136
+ await z({
137
+ agentId: P,
138
+ input: { status: "DRAFT" }
139
+ }), await R(), j.success(`${N("botlit.agentDetail.deactivate.successPrefix", "Agent")} "${I.name}" ${N("botlit.agentDetail.deactivate.successSuffix", "deactivated")}`);
140
+ } catch (e) {
141
+ j.error(e instanceof Error ? e.message : N("botlit.agentDetail.deactivate.error", "Failed to deactivate agent"));
142
+ }
143
+ },
144
+ children: N("botlit.agentDetail.actions.deactivate", "Deactivate")
145
+ }),
146
+ /* @__PURE__ */ g(d, {
147
+ variant: "outline",
148
+ leftIcon: /* @__PURE__ */ g(ae, { size: 16 }),
149
+ onClick: () => F(`agents/${P}/edit`),
150
+ children: N("botlit.agentDetail.actions.editAgent", "Edit Agent")
151
+ }),
152
+ /* @__PURE__ */ g(d, {
153
+ leftIcon: /* @__PURE__ */ g(E, { size: 16 }),
154
+ onClick: () => F(`chat/${P}`),
155
+ children: N("botlit.agentDetail.actions.testAgent", "Test Agent")
156
+ }),
157
+ /* @__PURE__ */ g(d, {
158
+ variant: "destructive",
159
+ leftIcon: /* @__PURE__ */ g(k, { size: 16 }),
160
+ isLoading: H.loading,
161
+ onClick: async () => {
162
+ if (P && confirm(`${N("botlit.agentDetail.delete.confirmPrefix", "Are you sure you want to delete")} "${I.name}"? ${N("botlit.agentDetail.delete.confirmSuffix", "This action cannot be undone.")}`)) try {
163
+ await V(P), j.success(`${N("botlit.agentDetail.delete.successPrefix", "Agent")} "${I.name}" ${N("botlit.agentDetail.delete.successSuffix", "deleted successfully")}`), F("agents");
164
+ } catch (e) {
165
+ j.error(e instanceof Error ? e.message : N("botlit.agentDetail.delete.error", "Failed to delete agent"));
166
+ }
167
+ },
168
+ children: N("botlit.common.delete", "Delete")
169
+ })
170
+ ]
171
+ }),
172
+ children: /* @__PURE__ */ _("div", {
173
+ className: "space-y-6",
174
+ children: [
175
+ /* @__PURE__ */ g(ie, {
176
+ icon: /* @__PURE__ */ g(S, { size: 18 }),
177
+ children: N("botlit.agentDetail.purpose", "This is the full configuration for a single agent — its prompt, model settings, the tools and knowledge it can use, its guardrails and how it talks to other agents. Use the tabs to inspect or change any part, and test the agent in chat to confirm it behaves the way you expect before going live.")
178
+ }),
179
+ /* @__PURE__ */ g("div", {
180
+ className: "flex gap-1 border-b border-border-subtle overflow-x-auto",
181
+ children: ue.map((e) => /* @__PURE__ */ _("button", {
182
+ onClick: () => W(e.id),
183
+ className: ee("flex items-center gap-2 px-4 py-2 text-sm font-medium border-b-2 transition-colors whitespace-nowrap", U === e.id ? "border-primary text-primary" : "border-transparent text-text-secondary hover:text-text-primary"),
184
+ children: [e.icon, e.label]
185
+ }, e.id))
186
+ }),
187
+ U === "overview" && /* @__PURE__ */ _("div", {
188
+ className: "space-y-6",
189
+ children: [/* @__PURE__ */ g(re, {
190
+ storageKey: `botlit-agent-${P}`,
191
+ steps: [
192
+ {
193
+ id: "test",
194
+ label: N("botlit.agentDetail.nextSteps.test", "Test the agent in chat"),
195
+ description: N("botlit.agentDetail.nextSteps.testDesc", "Send it a few real prompts to see how it responds."),
196
+ icon: /* @__PURE__ */ g(E, { size: 16 }),
197
+ onClick: () => F(`chat/${P}`)
198
+ },
199
+ {
200
+ id: "prompt",
201
+ label: N("botlit.agentDetail.nextSteps.prompt", "Refine the system prompt"),
202
+ description: N("botlit.agentDetail.nextSteps.promptDesc", "Tune its instructions and behaviour."),
203
+ icon: /* @__PURE__ */ g(C, { size: 16 }),
204
+ onClick: () => W("prompt")
205
+ },
206
+ {
207
+ id: "tools",
208
+ label: N("botlit.agentDetail.nextSteps.tools", "Connect tools & knowledge"),
209
+ description: N("botlit.agentDetail.nextSteps.toolsDesc", "Give it MCP tools and knowledge bases to work with."),
210
+ icon: /* @__PURE__ */ g(A, { size: 16 }),
211
+ onClick: () => W("tools")
212
+ },
213
+ {
214
+ id: "activate",
215
+ label: N("botlit.agentDetail.nextSteps.activate", "Activate and attach to a bot"),
216
+ description: N("botlit.agentDetail.nextSteps.activateDesc", "Put it live so a bot can route conversations to it."),
217
+ icon: /* @__PURE__ */ g(D, { size: 16 }),
218
+ onClick: () => F(`agents/${P}/edit`),
219
+ done: I.status === "ACTIVE"
220
+ }
221
+ ]
222
+ }), /* @__PURE__ */ _("div", {
223
+ className: "grid grid-cols-1 lg:grid-cols-3 gap-6",
224
+ children: [
225
+ /* @__PURE__ */ _(o, {
226
+ className: "lg:col-span-1",
227
+ children: [/* @__PURE__ */ g(l, { children: /* @__PURE__ */ g(u, { children: "Details" }) }), /* @__PURE__ */ _(s, {
228
+ className: "space-y-4",
229
+ children: [
230
+ /* @__PURE__ */ _("div", { children: [/* @__PURE__ */ g("p", {
231
+ className: "text-sm text-text-secondary",
232
+ children: "Status"
233
+ }), /* @__PURE__ */ g(p, { status: I.status })] }),
234
+ /* @__PURE__ */ _("div", { children: [/* @__PURE__ */ g("p", {
235
+ className: "text-sm text-text-secondary",
236
+ children: "Type"
237
+ }), /* @__PURE__ */ g(f, {
238
+ variant: "outline",
239
+ children: I.type
240
+ })] }),
241
+ /* @__PURE__ */ _("div", { children: [/* @__PURE__ */ g("p", {
242
+ className: "text-sm text-text-secondary",
243
+ children: "Visibility"
244
+ }), /* @__PURE__ */ g(f, {
245
+ variant: "outline",
246
+ children: I.visibility
247
+ })] }),
248
+ /* @__PURE__ */ _("div", { children: [/* @__PURE__ */ g("p", {
249
+ className: "text-sm text-text-secondary",
250
+ children: "LLM Model"
251
+ }), /* @__PURE__ */ g("p", {
252
+ className: "font-medium font-mono text-sm",
253
+ children: K || "Not configured"
254
+ })] }),
255
+ /* @__PURE__ */ _("div", { children: [/* @__PURE__ */ g("p", {
256
+ className: "text-sm text-text-secondary",
257
+ children: "MCP Connections"
258
+ }), /* @__PURE__ */ _("p", {
259
+ className: "font-medium",
260
+ children: [q.length, " servers"]
261
+ })] }),
262
+ /* @__PURE__ */ _("div", { children: [/* @__PURE__ */ g("p", {
263
+ className: "text-sm text-text-secondary",
264
+ children: "Knowledge Bases"
265
+ }), /* @__PURE__ */ _("p", {
266
+ className: "font-medium",
267
+ children: [J.length, " KBs"]
268
+ })] }),
269
+ /* @__PURE__ */ _("div", { children: [/* @__PURE__ */ g("p", {
270
+ className: "text-sm text-text-secondary",
271
+ children: "Max Concurrent"
272
+ }), /* @__PURE__ */ g("p", {
273
+ className: "font-medium",
274
+ children: Q
275
+ })] }),
276
+ /* @__PURE__ */ _("div", { children: [/* @__PURE__ */ g("p", {
277
+ className: "text-sm text-text-secondary",
278
+ children: "Executions"
279
+ }), /* @__PURE__ */ g("p", {
280
+ className: "font-medium",
281
+ children: I.executionCount ?? 0
282
+ })] }),
283
+ /* @__PURE__ */ _("div", { children: [/* @__PURE__ */ g("p", {
284
+ className: "text-sm text-text-secondary",
285
+ children: "Created"
286
+ }), /* @__PURE__ */ g("p", {
287
+ className: "font-medium",
288
+ children: i(I.createdAt)
289
+ })] }),
290
+ /* @__PURE__ */ _("div", { children: [/* @__PURE__ */ g("p", {
291
+ className: "text-sm text-text-secondary",
292
+ children: "Updated"
293
+ }), /* @__PURE__ */ g("p", {
294
+ className: "font-medium",
295
+ children: i(I.updatedAt)
296
+ })] })
297
+ ]
298
+ })]
299
+ }),
300
+ /* @__PURE__ */ _(ne, {
301
+ treatment: "glass",
302
+ glow: !0,
303
+ className: "lg:col-span-2 p-6",
304
+ children: [/* @__PURE__ */ g("h3", {
305
+ className: "mb-4 text-lg font-semibold tracking-tight text-text-primary",
306
+ children: N("botlit.agentDetail.capabilities.title", "Capabilities")
307
+ }), /* @__PURE__ */ g("div", { children: X.length > 0 ? /* @__PURE__ */ g("div", {
308
+ className: "grid grid-cols-2 md:grid-cols-3 gap-4",
309
+ children: X.map((e) => /* @__PURE__ */ _("div", {
310
+ className: "p-3 rounded-lg border border-green-500 bg-green-500/10",
311
+ children: [/* @__PURE__ */ g("p", {
312
+ className: "font-medium",
313
+ children: e
314
+ }), /* @__PURE__ */ g(f, {
315
+ variant: "success",
316
+ children: N("botlit.agentDetail.capabilities.enabled", "Enabled")
317
+ })]
318
+ }, e))
319
+ }) : /* @__PURE__ */ g("p", {
320
+ className: "text-text-secondary",
321
+ children: N("botlit.agentDetail.capabilities.empty", "No capabilities configured")
322
+ }) })]
323
+ }),
324
+ Z.length > 0 && /* @__PURE__ */ _(o, {
325
+ className: "lg:col-span-3",
326
+ children: [/* @__PURE__ */ g(l, { children: /* @__PURE__ */ g(u, { children: N("botlit.agentDetail.tags.title", "Tags") }) }), /* @__PURE__ */ g(s, { children: /* @__PURE__ */ g("div", {
327
+ className: "flex flex-wrap gap-2",
328
+ children: Z.map((e) => /* @__PURE__ */ g(f, {
329
+ variant: "outline",
330
+ children: e
331
+ }, e))
332
+ }) })]
333
+ })
334
+ ]
335
+ })]
336
+ }),
337
+ U === "prompt" && /* @__PURE__ */ g("div", {
338
+ className: "space-y-6",
339
+ children: /* @__PURE__ */ _(o, { children: [/* @__PURE__ */ _(l, { children: [/* @__PURE__ */ _(u, {
340
+ className: "flex items-center gap-2",
341
+ children: [/* @__PURE__ */ g(C, { size: 18 }), N("botlit.agentDetail.prompt.title", "System Prompt")]
342
+ }), /* @__PURE__ */ g(c, { children: N("botlit.agentDetail.prompt.description", "The system prompt that defines this agent's behavior") })] }), /* @__PURE__ */ g(s, {
343
+ className: "space-y-4",
344
+ children: G ? /* @__PURE__ */ g("pre", {
345
+ className: "p-4 bg-bg-sunken rounded-lg text-sm whitespace-pre-wrap font-mono",
346
+ children: G
347
+ }) : /* @__PURE__ */ g("p", {
348
+ className: "text-text-secondary",
349
+ children: N("botlit.agentDetail.prompt.empty", "No system prompt configured")
350
+ })
351
+ })] })
352
+ }),
353
+ U === "llm" && /* @__PURE__ */ _("div", {
354
+ className: "grid grid-cols-1 lg:grid-cols-2 gap-6",
355
+ children: [/* @__PURE__ */ _(o, { children: [/* @__PURE__ */ g(l, { children: /* @__PURE__ */ _(u, {
356
+ className: "flex items-center gap-2",
357
+ children: [/* @__PURE__ */ g(S, { size: 18 }), N("botlit.agentDetail.llm.title", "Model Configuration")]
358
+ }) }), /* @__PURE__ */ _(s, {
359
+ className: "space-y-4",
360
+ children: [
361
+ /* @__PURE__ */ _("div", { children: [/* @__PURE__ */ g("p", {
362
+ className: "text-sm text-text-secondary",
363
+ children: "LLM Model ID"
364
+ }), /* @__PURE__ */ g("p", {
365
+ className: "font-medium font-mono",
366
+ children: K || "Not configured"
367
+ })] }),
368
+ /* @__PURE__ */ _("div", { children: [/* @__PURE__ */ g("p", {
369
+ className: "text-sm text-text-secondary",
370
+ children: "Temperature"
371
+ }), /* @__PURE__ */ g("p", {
372
+ className: "font-medium",
373
+ children: ce ?? "Default"
374
+ })] }),
375
+ /* @__PURE__ */ _("div", { children: [/* @__PURE__ */ g("p", {
376
+ className: "text-sm text-text-secondary",
377
+ children: "Max Tokens"
378
+ }), /* @__PURE__ */ g("p", {
379
+ className: "font-medium",
380
+ children: le ?? "Default"
381
+ })] })
382
+ ]
383
+ })] }), /* @__PURE__ */ _(o, { children: [/* @__PURE__ */ g(l, { children: /* @__PURE__ */ _(u, {
384
+ className: "flex items-center gap-2",
385
+ children: [/* @__PURE__ */ g(T, { size: 18 }), N("botlit.agentDetail.executionLimits.title", "Execution Limits")]
386
+ }) }), /* @__PURE__ */ _(s, {
387
+ className: "space-y-4",
388
+ children: [
389
+ /* @__PURE__ */ _("div", { children: [/* @__PURE__ */ g("p", {
390
+ className: "text-sm text-text-secondary",
391
+ children: "Max Concurrent Executions"
392
+ }), /* @__PURE__ */ g("p", {
393
+ className: "font-medium",
394
+ children: Q
395
+ })] }),
396
+ /* @__PURE__ */ _("div", { children: [/* @__PURE__ */ g("p", {
397
+ className: "text-sm text-text-secondary",
398
+ children: "Total Executions"
399
+ }), /* @__PURE__ */ g("p", {
400
+ className: "font-medium",
401
+ children: I.executionCount ?? 0
402
+ })] }),
403
+ I.lastExecutedAt && /* @__PURE__ */ _("div", { children: [/* @__PURE__ */ g("p", {
404
+ className: "text-sm text-text-secondary",
405
+ children: "Last Executed"
406
+ }), /* @__PURE__ */ g("p", {
407
+ className: "font-medium",
408
+ children: i(I.lastExecutedAt)
409
+ })] })
410
+ ]
411
+ })] })]
412
+ }),
413
+ U === "tools" && /* @__PURE__ */ _("div", {
414
+ className: "space-y-6",
415
+ children: [/* @__PURE__ */ _(o, { children: [/* @__PURE__ */ _(l, { children: [/* @__PURE__ */ _(u, {
416
+ className: "flex items-center gap-2",
417
+ children: [/* @__PURE__ */ g(A, { size: 18 }), "MCP Server Connections"]
418
+ }), /* @__PURE__ */ g(c, { children: "Connected MCP servers providing tools" })] }), /* @__PURE__ */ g(s, { children: q.length > 0 ? /* @__PURE__ */ g("div", {
419
+ className: "grid grid-cols-1 md:grid-cols-2 gap-4",
420
+ children: q.map((e) => /* @__PURE__ */ _("div", {
421
+ className: "flex items-center gap-3 p-4 border border-border-subtle rounded-lg",
422
+ children: [/* @__PURE__ */ g("div", {
423
+ className: "p-2 bg-action-primary-bg/10 rounded-lg",
424
+ children: /* @__PURE__ */ g(A, {
425
+ size: 18,
426
+ className: "text-primary"
427
+ })
428
+ }), /* @__PURE__ */ _("div", { children: [/* @__PURE__ */ g("p", {
429
+ className: "font-medium",
430
+ children: "MCP Server"
431
+ }), /* @__PURE__ */ g("p", {
432
+ className: "text-sm text-text-secondary font-mono",
433
+ children: e
434
+ })] })]
435
+ }, e))
436
+ }) : /* @__PURE__ */ g("p", {
437
+ className: "text-text-secondary",
438
+ children: "No MCP servers connected"
439
+ }) })] }), Y.length > 0 && /* @__PURE__ */ _(o, { children: [/* @__PURE__ */ g(l, { children: /* @__PURE__ */ _(u, {
440
+ className: "flex items-center gap-2",
441
+ children: [/* @__PURE__ */ g(oe, { size: 18 }), "Workflows"]
442
+ }) }), /* @__PURE__ */ g(s, { children: /* @__PURE__ */ g("div", {
443
+ className: "grid grid-cols-1 md:grid-cols-2 gap-4",
444
+ children: Y.map((e) => /* @__PURE__ */ g("div", {
445
+ className: "p-4 border border-border-subtle rounded-lg",
446
+ children: /* @__PURE__ */ g("p", {
447
+ className: "font-mono text-sm",
448
+ children: e
449
+ })
450
+ }, e))
451
+ }) })] })]
452
+ }),
453
+ U === "knowledge" && /* @__PURE__ */ _(o, { children: [/* @__PURE__ */ _(l, { children: [/* @__PURE__ */ _(u, {
454
+ className: "flex items-center gap-2",
455
+ children: [/* @__PURE__ */ g(x, { size: 18 }), "Knowledge Bases"]
456
+ }), /* @__PURE__ */ g(c, { children: "Connected knowledge bases for RAG" })] }), /* @__PURE__ */ g(s, { children: J.length > 0 ? /* @__PURE__ */ g("div", {
457
+ className: "space-y-4",
458
+ children: J.map((e, t) => /* @__PURE__ */ _("div", {
459
+ className: "p-4 border border-border-subtle rounded-lg space-y-2",
460
+ children: [/* @__PURE__ */ _("div", {
461
+ className: "flex items-center justify-between",
462
+ children: [/* @__PURE__ */ g("p", {
463
+ className: "font-medium",
464
+ children: "Knowledge Base"
465
+ }), /* @__PURE__ */ _(f, {
466
+ variant: "outline",
467
+ children: ["#", t + 1]
468
+ })]
469
+ }), /* @__PURE__ */ g("p", {
470
+ className: "font-mono text-sm",
471
+ children: e
472
+ })]
473
+ }, t))
474
+ }) : /* @__PURE__ */ g("p", {
475
+ className: "text-text-secondary",
476
+ children: "No knowledge bases connected"
477
+ }) })] }),
478
+ U === "guardrails" && /* @__PURE__ */ _(o, { children: [/* @__PURE__ */ _(l, { children: [/* @__PURE__ */ _(u, {
479
+ className: "flex items-center gap-2",
480
+ children: [/* @__PURE__ */ g(O, { size: 18 }), "Guardrails & Policies"]
481
+ }), /* @__PURE__ */ g(c, { children: "Security and policy configurations" })] }), /* @__PURE__ */ g(s, { children: $ ? /* @__PURE__ */ g("div", {
482
+ className: "grid grid-cols-1 md:grid-cols-2 gap-4",
483
+ children: Object.entries($).filter(([e, t]) => t).map(([e, t]) => /* @__PURE__ */ _("div", {
484
+ className: "p-4 border border-border-subtle rounded-lg",
485
+ children: [/* @__PURE__ */ g("p", {
486
+ className: "text-sm text-text-secondary capitalize",
487
+ children: e.replace("Id", "").replace(/([A-Z])/g, " $1").trim()
488
+ }), /* @__PURE__ */ g("p", {
489
+ className: "font-mono text-sm",
490
+ children: String(t)
491
+ })]
492
+ }, e))
493
+ }) : /* @__PURE__ */ g("p", {
494
+ className: "text-text-secondary",
495
+ children: "No policy bindings configured"
496
+ }) })] }),
497
+ U === "a2a" && /* @__PURE__ */ _(o, { children: [/* @__PURE__ */ _(l, { children: [/* @__PURE__ */ _(u, {
498
+ className: "flex items-center gap-2",
499
+ children: [/* @__PURE__ */ g(D, { size: 18 }), "A2A Configuration"]
500
+ }), /* @__PURE__ */ g(c, { children: "Agent-to-Agent communication settings" })] }), /* @__PURE__ */ g(s, { children: /* @__PURE__ */ g("p", {
501
+ className: "text-text-secondary",
502
+ children: "A2A is not enabled for this agent"
503
+ }) })] }),
504
+ U === "versions" && P && /* @__PURE__ */ g(h, {
505
+ agentId: P,
506
+ draftVersionId: I.draftVersionId,
507
+ currentVersionId: I.currentVersionId,
508
+ onChanged: () => void R()
509
+ })
510
+ ]
511
+ })
512
+ });
513
+ };
514
+ //#endregion
515
+ export { M as AgentDetailPage };
516
+
517
+ //# sourceMappingURL=AgentDetailPage.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AgentDetailPage.js","names":[],"sources":["../../../src/botlit/pages/AgentDetailPage.tsx"],"sourcesContent":["/**\n * Agent Detail Page\n * @module botlit/pages\n *\n * Displays agent details using flat API fields from the real GraphQL backend.\n * Maps flat fields (systemPrompt, llmModelId, mcpConnectionIds, knowledgeBaseIds, capabilities[])\n * to a rich detail view with tabs.\n */\n\nimport type { FC, ReactNode } from 'react';\nimport { useState } from 'react';\nimport { useParams } from 'react-router';\nimport {\n ArrowLeft,\n Play,\n Settings,\n BarChart3,\n BookOpen,\n Wrench,\n Shield,\n Brain,\n MessageSquare,\n Edit,\n Share2,\n FileText,\n Trash2,\n History,\n} from 'lucide-react';\nimport { useI18n } from '@burdenoff/fe-libs/shared/providers/shell/I18nProvider';\nimport { toast } from 'sonner';\nimport { PagePurpose, NextSteps, GlassCard } from '@burdenoff/fe-libs/ui';\nimport { PageLayout } from '../components/PageLayout';\nimport { Card, CardHeader, CardTitle, CardContent, CardDescription } from '../components/Card';\nimport { Button } from '../components/Button';\nimport { Badge, StatusBadge } from '../components/Badge';\nimport { EmptyState } from '../components/EmptyState';\nimport { VersionHistoryPanel } from '../components/VersionHistoryPanel';\nimport { useAgent, useUpdateAgent, useDeleteAgent } from '../hooks/useAgents';\nimport { useBotlit } from '../providers/BotlitProvider';\nimport { formatRelativeTime } from '../utils/formatters';\nimport { cn } from '../utils/cn';\n\ntype TabType =\n | 'overview'\n | 'prompt'\n | 'llm'\n | 'tools'\n | 'knowledge'\n | 'guardrails'\n | 'a2a'\n | 'versions';\n\nexport const AgentDetailPage: FC = () => {\n const { t: translate } = useI18n();\n const t = (key: string, fallback: string) => {\n const value = translate(key);\n return value === key ? fallback : value;\n };\n const { agentId } = useParams();\n const { navigateTo } = useBotlit();\n const { data: agent, loading, refetch: refetchAgent } = useAgent(agentId);\n const [updateAgent, updateAgentResult] = useUpdateAgent();\n const [deleteAgent, deleteAgentResult] = useDeleteAgent();\n const [activeTab, setActiveTab] = useState<TabType>('overview');\n\n if (loading) {\n return (\n <PageLayout title={t('botlit.common.loading', 'Loading...')}>\n <div className=\"h-96 bg-bg-sunken motion-safe:animate-vc-shimmer rounded-lg\" />\n </PageLayout>\n );\n }\n\n if (!agent) {\n return (\n <PageLayout title={t('botlit.agentDetail.notFound.title', 'Agent Not Found')}>\n <EmptyState\n illustration=\"empty-agents\"\n title={t('botlit.agentDetail.notFound.title', 'Agent Not Found')}\n description={t(\n 'botlit.agentDetail.notFound.description',\n \"The agent you're looking for doesn't exist.\"\n )}\n action={\n <Button onClick={() => navigateTo('agents')}>\n {t('botlit.agentDetail.notFound.backAction', 'Back to Agents')}\n </Button>\n }\n />\n </PageLayout>\n );\n }\n\n // `AgentRecord` declares every field the agent query selects — read directly.\n const systemPrompt = agent.systemPrompt || '';\n const llmModelId = agent.llmModelId || '';\n const temperature = agent.temperature;\n const maxTokens = agent.maxTokens;\n const mcpConnectionIds = agent.mcpConnectionIds ?? [];\n const knowledgeBaseIds = agent.knowledgeBaseIds ?? [];\n const workflowIds = agent.workflowIds ?? [];\n const capabilities = agent.capabilities ?? [];\n const tagIds = agent.tagIds ?? [];\n const maxConcurrentExecutions = agent.maxConcurrentExecutions || 10;\n const metadata = agent.metadata ?? null;\n\n const tabs: { id: TabType; label: string; icon: ReactNode }[] = [\n {\n id: 'overview',\n label: t('botlit.agentDetail.tabs.overview', 'Overview'),\n icon: <BarChart3 size={16} />,\n },\n {\n id: 'prompt',\n label: t('botlit.agentDetail.tabs.prompt', 'Prompt'),\n icon: <FileText size={16} />,\n },\n {\n id: 'llm',\n label: t('botlit.agentDetail.tabs.llmConfig', 'LLM Config'),\n icon: <Brain size={16} />,\n },\n { id: 'tools', label: t('botlit.agentDetail.tabs.tools', 'Tools'), icon: <Wrench size={16} /> },\n {\n id: 'knowledge',\n label: t('botlit.agentDetail.tabs.knowledge', 'Knowledge'),\n icon: <BookOpen size={16} />,\n },\n {\n id: 'guardrails',\n label: t('botlit.agentDetail.tabs.guardrails', 'Guardrails'),\n icon: <Shield size={16} />,\n },\n { id: 'a2a', label: t('botlit.agentDetail.tabs.a2a', 'A2A'), icon: <Share2 size={16} /> },\n {\n id: 'versions',\n label: t('botlit.agentDetail.tabs.versions', 'Versions'),\n icon: <History size={16} />,\n },\n ];\n\n return (\n <PageLayout\n title={\n <div className=\"flex items-center gap-3\">\n <Button variant=\"ghost\" size=\"icon\" onClick={() => navigateTo('agents')}>\n <ArrowLeft size={20} />\n </Button>\n <span className=\"text-3xl\">{'🤖'}</span>\n <div>\n <div className=\"flex items-center gap-2\">\n <span>{agent.name}</span>\n <StatusBadge status={agent.status} />\n <Badge variant=\"outline\">{agent.slug}</Badge>\n </div>\n <p className=\"text-sm font-normal text-text-secondary\">{agent.description}</p>\n </div>\n </div>\n }\n actions={\n <div className=\"flex gap-2\">\n {agent.status === 'DRAFT' || agent.status === 'ARCHIVED' ? (\n <Button\n variant=\"default\"\n isLoading={updateAgentResult.loading}\n onClick={async () => {\n try {\n if (!agentId) return;\n await updateAgent({ agentId, input: { status: 'ACTIVE' } });\n await refetchAgent();\n toast.success(\n `${t('botlit.agentDetail.activate.successPrefix', 'Agent')} \"${agent.name}\" ${t('botlit.agentDetail.activate.successSuffix', 'activated')}`\n );\n } catch (err: unknown) {\n toast.error(\n err instanceof Error\n ? err.message\n : t('botlit.agentDetail.activate.error', 'Failed to activate agent')\n );\n }\n }}\n >\n {t('botlit.agentDetail.actions.activate', 'Activate')}\n </Button>\n ) : (\n <Button\n variant=\"outline\"\n isLoading={updateAgentResult.loading}\n onClick={async () => {\n try {\n if (!agentId) return;\n await updateAgent({ agentId, input: { status: 'DRAFT' } });\n await refetchAgent();\n toast.success(\n `${t('botlit.agentDetail.deactivate.successPrefix', 'Agent')} \"${agent.name}\" ${t('botlit.agentDetail.deactivate.successSuffix', 'deactivated')}`\n );\n } catch (err: unknown) {\n toast.error(\n err instanceof Error\n ? err.message\n : t('botlit.agentDetail.deactivate.error', 'Failed to deactivate agent')\n );\n }\n }}\n >\n {t('botlit.agentDetail.actions.deactivate', 'Deactivate')}\n </Button>\n )}\n <Button\n variant=\"outline\"\n leftIcon={<Edit size={16} />}\n onClick={() => navigateTo(`agents/${agentId}/edit`)}\n >\n {t('botlit.agentDetail.actions.editAgent', 'Edit Agent')}\n </Button>\n <Button leftIcon={<Play size={16} />} onClick={() => navigateTo(`chat/${agentId}`)}>\n {t('botlit.agentDetail.actions.testAgent', 'Test Agent')}\n </Button>\n <Button\n variant=\"destructive\"\n leftIcon={<Trash2 size={16} />}\n isLoading={deleteAgentResult.loading}\n onClick={async () => {\n if (!agentId) return;\n if (\n !confirm(\n `${t('botlit.agentDetail.delete.confirmPrefix', 'Are you sure you want to delete')} \"${agent.name}\"? ${t('botlit.agentDetail.delete.confirmSuffix', 'This action cannot be undone.')}`\n )\n )\n return;\n try {\n await deleteAgent(agentId);\n toast.success(\n `${t('botlit.agentDetail.delete.successPrefix', 'Agent')} \"${agent.name}\" ${t('botlit.agentDetail.delete.successSuffix', 'deleted successfully')}`\n );\n navigateTo('agents');\n } catch (err: unknown) {\n toast.error(\n err instanceof Error\n ? err.message\n : t('botlit.agentDetail.delete.error', 'Failed to delete agent')\n );\n }\n }}\n >\n {t('botlit.common.delete', 'Delete')}\n </Button>\n </div>\n }\n >\n <div className=\"space-y-6\">\n <PagePurpose icon={<Brain size={18} />}>\n {t(\n 'botlit.agentDetail.purpose',\n 'This is the full configuration for a single agent — its prompt, model settings, the tools and knowledge it can use, its guardrails and how it talks to other agents. Use the tabs to inspect or change any part, and test the agent in chat to confirm it behaves the way you expect before going live.'\n )}\n </PagePurpose>\n\n {/* Tabs */}\n <div className=\"flex gap-1 border-b border-border-subtle overflow-x-auto\">\n {tabs.map((tab) => (\n <button\n key={tab.id}\n onClick={() => setActiveTab(tab.id)}\n className={cn(\n 'flex items-center gap-2 px-4 py-2 text-sm font-medium border-b-2 transition-colors whitespace-nowrap',\n activeTab === tab.id\n ? 'border-primary text-primary'\n : 'border-transparent text-text-secondary hover:text-text-primary'\n )}\n >\n {tab.icon}\n {tab.label}\n </button>\n ))}\n </div>\n\n {/* Overview Tab */}\n {activeTab === 'overview' && (\n <div className=\"space-y-6\">\n <NextSteps\n storageKey={`botlit-agent-${agentId}`}\n steps={[\n {\n id: 'test',\n label: t('botlit.agentDetail.nextSteps.test', 'Test the agent in chat'),\n description: t(\n 'botlit.agentDetail.nextSteps.testDesc',\n 'Send it a few real prompts to see how it responds.'\n ),\n icon: <Play size={16} />,\n onClick: () => navigateTo(`chat/${agentId}`),\n },\n {\n id: 'prompt',\n label: t('botlit.agentDetail.nextSteps.prompt', 'Refine the system prompt'),\n description: t(\n 'botlit.agentDetail.nextSteps.promptDesc',\n 'Tune its instructions and behaviour.'\n ),\n icon: <FileText size={16} />,\n onClick: () => setActiveTab('prompt'),\n },\n {\n id: 'tools',\n label: t('botlit.agentDetail.nextSteps.tools', 'Connect tools & knowledge'),\n description: t(\n 'botlit.agentDetail.nextSteps.toolsDesc',\n 'Give it MCP tools and knowledge bases to work with.'\n ),\n icon: <Wrench size={16} />,\n onClick: () => setActiveTab('tools'),\n },\n {\n id: 'activate',\n label: t('botlit.agentDetail.nextSteps.activate', 'Activate and attach to a bot'),\n description: t(\n 'botlit.agentDetail.nextSteps.activateDesc',\n 'Put it live so a bot can route conversations to it.'\n ),\n icon: <Share2 size={16} />,\n onClick: () => navigateTo(`agents/${agentId}/edit`),\n done: agent.status === 'ACTIVE',\n },\n ]}\n />\n <div className=\"grid grid-cols-1 lg:grid-cols-3 gap-6\">\n {/* Quick Info */}\n <Card className=\"lg:col-span-1\">\n <CardHeader>\n <CardTitle>Details</CardTitle>\n </CardHeader>\n <CardContent className=\"space-y-4\">\n <div>\n <p className=\"text-sm text-text-secondary\">Status</p>\n <StatusBadge status={agent.status} />\n </div>\n <div>\n <p className=\"text-sm text-text-secondary\">Type</p>\n <Badge variant=\"outline\">{agent.type}</Badge>\n </div>\n <div>\n <p className=\"text-sm text-text-secondary\">Visibility</p>\n <Badge variant=\"outline\">{agent.visibility}</Badge>\n </div>\n <div>\n <p className=\"text-sm text-text-secondary\">LLM Model</p>\n <p className=\"font-medium font-mono text-sm\">\n {llmModelId || 'Not configured'}\n </p>\n </div>\n <div>\n <p className=\"text-sm text-text-secondary\">MCP Connections</p>\n <p className=\"font-medium\">{mcpConnectionIds.length} servers</p>\n </div>\n <div>\n <p className=\"text-sm text-text-secondary\">Knowledge Bases</p>\n <p className=\"font-medium\">{knowledgeBaseIds.length} KBs</p>\n </div>\n <div>\n <p className=\"text-sm text-text-secondary\">Max Concurrent</p>\n <p className=\"font-medium\">{maxConcurrentExecutions}</p>\n </div>\n <div>\n <p className=\"text-sm text-text-secondary\">Executions</p>\n <p className=\"font-medium\">{agent.executionCount ?? 0}</p>\n </div>\n <div>\n <p className=\"text-sm text-text-secondary\">Created</p>\n <p className=\"font-medium\">{formatRelativeTime(agent.createdAt)}</p>\n </div>\n <div>\n <p className=\"text-sm text-text-secondary\">Updated</p>\n <p className=\"font-medium\">{formatRelativeTime(agent.updatedAt)}</p>\n </div>\n </CardContent>\n </Card>\n\n {/* Capabilities */}\n <GlassCard treatment=\"glass\" glow className=\"lg:col-span-2 p-6\">\n <h3 className=\"mb-4 text-lg font-semibold tracking-tight text-text-primary\">\n {t('botlit.agentDetail.capabilities.title', 'Capabilities')}\n </h3>\n <div>\n {capabilities.length > 0 ? (\n <div className=\"grid grid-cols-2 md:grid-cols-3 gap-4\">\n {capabilities.map((cap: string) => (\n <div\n key={cap}\n className=\"p-3 rounded-lg border border-green-500 bg-green-500/10\"\n >\n <p className=\"font-medium\">{cap}</p>\n <Badge variant=\"success\">\n {t('botlit.agentDetail.capabilities.enabled', 'Enabled')}\n </Badge>\n </div>\n ))}\n </div>\n ) : (\n <p className=\"text-text-secondary\">\n {t('botlit.agentDetail.capabilities.empty', 'No capabilities configured')}\n </p>\n )}\n </div>\n </GlassCard>\n\n {/* Tags */}\n {tagIds.length > 0 && (\n <Card className=\"lg:col-span-3\">\n <CardHeader>\n <CardTitle>{t('botlit.agentDetail.tags.title', 'Tags')}</CardTitle>\n </CardHeader>\n <CardContent>\n <div className=\"flex flex-wrap gap-2\">\n {tagIds.map((tag: string) => (\n <Badge key={tag} variant=\"outline\">\n {tag}\n </Badge>\n ))}\n </div>\n </CardContent>\n </Card>\n )}\n </div>\n </div>\n )}\n\n {/* Prompt Tab */}\n {activeTab === 'prompt' && (\n <div className=\"space-y-6\">\n <Card>\n <CardHeader>\n <CardTitle className=\"flex items-center gap-2\">\n <FileText size={18} />\n {t('botlit.agentDetail.prompt.title', 'System Prompt')}\n </CardTitle>\n <CardDescription>\n {t(\n 'botlit.agentDetail.prompt.description',\n \"The system prompt that defines this agent's behavior\"\n )}\n </CardDescription>\n </CardHeader>\n <CardContent className=\"space-y-4\">\n {systemPrompt ? (\n <pre className=\"p-4 bg-bg-sunken rounded-lg text-sm whitespace-pre-wrap font-mono\">\n {systemPrompt}\n </pre>\n ) : (\n <p className=\"text-text-secondary\">\n {t('botlit.agentDetail.prompt.empty', 'No system prompt configured')}\n </p>\n )}\n </CardContent>\n </Card>\n </div>\n )}\n\n {/* LLM Config Tab */}\n {activeTab === 'llm' && (\n <div className=\"grid grid-cols-1 lg:grid-cols-2 gap-6\">\n <Card>\n <CardHeader>\n <CardTitle className=\"flex items-center gap-2\">\n <Brain size={18} />\n {t('botlit.agentDetail.llm.title', 'Model Configuration')}\n </CardTitle>\n </CardHeader>\n <CardContent className=\"space-y-4\">\n <div>\n <p className=\"text-sm text-text-secondary\">LLM Model ID</p>\n <p className=\"font-medium font-mono\">{llmModelId || 'Not configured'}</p>\n </div>\n <div>\n <p className=\"text-sm text-text-secondary\">Temperature</p>\n <p className=\"font-medium\">{temperature != null ? temperature : 'Default'}</p>\n </div>\n <div>\n <p className=\"text-sm text-text-secondary\">Max Tokens</p>\n <p className=\"font-medium\">{maxTokens != null ? maxTokens : 'Default'}</p>\n </div>\n </CardContent>\n </Card>\n\n <Card>\n <CardHeader>\n <CardTitle className=\"flex items-center gap-2\">\n <MessageSquare size={18} />\n {t('botlit.agentDetail.executionLimits.title', 'Execution Limits')}\n </CardTitle>\n </CardHeader>\n <CardContent className=\"space-y-4\">\n <div>\n <p className=\"text-sm text-text-secondary\">Max Concurrent Executions</p>\n <p className=\"font-medium\">{maxConcurrentExecutions}</p>\n </div>\n <div>\n <p className=\"text-sm text-text-secondary\">Total Executions</p>\n <p className=\"font-medium\">{agent.executionCount ?? 0}</p>\n </div>\n {agent.lastExecutedAt && (\n <div>\n <p className=\"text-sm text-text-secondary\">Last Executed</p>\n <p className=\"font-medium\">{formatRelativeTime(agent.lastExecutedAt)}</p>\n </div>\n )}\n </CardContent>\n </Card>\n </div>\n )}\n\n {/* Tools Tab */}\n {activeTab === 'tools' && (\n <div className=\"space-y-6\">\n <Card>\n <CardHeader>\n <CardTitle className=\"flex items-center gap-2\">\n <Wrench size={18} />\n MCP Server Connections\n </CardTitle>\n <CardDescription>Connected MCP servers providing tools</CardDescription>\n </CardHeader>\n <CardContent>\n {mcpConnectionIds.length > 0 ? (\n <div className=\"grid grid-cols-1 md:grid-cols-2 gap-4\">\n {mcpConnectionIds.map((mcpId: string) => (\n <div\n key={mcpId}\n className=\"flex items-center gap-3 p-4 border border-border-subtle rounded-lg\"\n >\n <div className=\"p-2 bg-action-primary-bg/10 rounded-lg\">\n <Wrench size={18} className=\"text-primary\" />\n </div>\n <div>\n <p className=\"font-medium\">MCP Server</p>\n <p className=\"text-sm text-text-secondary font-mono\">{mcpId}</p>\n </div>\n </div>\n ))}\n </div>\n ) : (\n <p className=\"text-text-secondary\">No MCP servers connected</p>\n )}\n </CardContent>\n </Card>\n\n {workflowIds.length > 0 && (\n <Card>\n <CardHeader>\n <CardTitle className=\"flex items-center gap-2\">\n <Settings size={18} />\n Workflows\n </CardTitle>\n </CardHeader>\n <CardContent>\n <div className=\"grid grid-cols-1 md:grid-cols-2 gap-4\">\n {workflowIds.map((wfId: string) => (\n <div key={wfId} className=\"p-4 border border-border-subtle rounded-lg\">\n <p className=\"font-mono text-sm\">{wfId}</p>\n </div>\n ))}\n </div>\n </CardContent>\n </Card>\n )}\n </div>\n )}\n\n {/* Knowledge Tab */}\n {activeTab === 'knowledge' && (\n <Card>\n <CardHeader>\n <CardTitle className=\"flex items-center gap-2\">\n <BookOpen size={18} />\n Knowledge Bases\n </CardTitle>\n <CardDescription>Connected knowledge bases for RAG</CardDescription>\n </CardHeader>\n <CardContent>\n {knowledgeBaseIds.length > 0 ? (\n <div className=\"space-y-4\">\n {knowledgeBaseIds.map((kbId: string, index: number) => (\n <div\n key={index}\n className=\"p-4 border border-border-subtle rounded-lg space-y-2\"\n >\n <div className=\"flex items-center justify-between\">\n <p className=\"font-medium\">Knowledge Base</p>\n <Badge variant=\"outline\">#{index + 1}</Badge>\n </div>\n <p className=\"font-mono text-sm\">{kbId}</p>\n </div>\n ))}\n </div>\n ) : (\n <p className=\"text-text-secondary\">No knowledge bases connected</p>\n )}\n </CardContent>\n </Card>\n )}\n\n {/* Guardrails Tab */}\n {activeTab === 'guardrails' && (\n <Card>\n <CardHeader>\n <CardTitle className=\"flex items-center gap-2\">\n <Shield size={18} />\n Guardrails & Policies\n </CardTitle>\n <CardDescription>Security and policy configurations</CardDescription>\n </CardHeader>\n <CardContent>\n {metadata ? (\n <div className=\"grid grid-cols-1 md:grid-cols-2 gap-4\">\n {Object.entries(metadata)\n .filter(([_, value]) => value)\n .map(([key, value]) => (\n <div key={key} className=\"p-4 border border-border-subtle rounded-lg\">\n <p className=\"text-sm text-text-secondary capitalize\">\n {key\n .replace('Id', '')\n .replace(/([A-Z])/g, ' $1')\n .trim()}\n </p>\n <p className=\"font-mono text-sm\">{String(value)}</p>\n </div>\n ))}\n </div>\n ) : (\n <p className=\"text-text-secondary\">No policy bindings configured</p>\n )}\n </CardContent>\n </Card>\n )}\n\n {/* A2A Tab */}\n {activeTab === 'a2a' && (\n <Card>\n <CardHeader>\n <CardTitle className=\"flex items-center gap-2\">\n <Share2 size={18} />\n A2A Configuration\n </CardTitle>\n <CardDescription>Agent-to-Agent communication settings</CardDescription>\n </CardHeader>\n <CardContent>\n <p className=\"text-text-secondary\">A2A is not enabled for this agent</p>\n </CardContent>\n </Card>\n )}\n\n {/* Versions Tab (BOFF-4381) */}\n {activeTab === 'versions' && agentId && (\n <VersionHistoryPanel\n agentId={agentId}\n draftVersionId={agent.draftVersionId}\n currentVersionId={agent.currentVersionId}\n onChanged={() => void refetchAgent()}\n />\n )}\n </div>\n </PageLayout>\n );\n};\n"],"mappings":"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"}