@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.
- package/README.md +12 -0
- package/dist/botlit/BotlitRoutes.js +357 -0
- package/dist/botlit/BotlitRoutes.js.map +1 -0
- package/dist/botlit/BotmanorRoot.js +12 -0
- package/dist/botlit/BotmanorRoot.js.map +1 -0
- package/dist/botlit/BotmanorRootInner.js +101 -0
- package/dist/botlit/BotmanorRootInner.js.map +1 -0
- package/dist/botlit/components/Badge.js +39 -0
- package/dist/botlit/components/Badge.js.map +1 -0
- package/dist/botlit/components/Button.js +46 -0
- package/dist/botlit/components/Button.js.map +1 -0
- package/dist/botlit/components/Card.js +31 -0
- package/dist/botlit/components/Card.js.map +1 -0
- package/dist/botlit/components/ChannelSelectorSheet.js +130 -0
- package/dist/botlit/components/ChannelSelectorSheet.js.map +1 -0
- package/dist/botlit/components/EmptyState.js +35 -0
- package/dist/botlit/components/EmptyState.js.map +1 -0
- package/dist/botlit/components/ErrorState.js +33 -0
- package/dist/botlit/components/ErrorState.js.map +1 -0
- package/dist/botlit/components/Input.js +59 -0
- package/dist/botlit/components/Input.js.map +1 -0
- package/dist/botlit/components/PageLayout.js +34 -0
- package/dist/botlit/components/PageLayout.js.map +1 -0
- package/dist/botlit/components/QuotaExhaustedDialog.js +20 -0
- package/dist/botlit/components/QuotaExhaustedDialog.js.map +1 -0
- package/dist/botlit/components/RouteLoader.js +52 -0
- package/dist/botlit/components/RouteLoader.js.map +1 -0
- package/dist/botlit/components/VersionHistoryPanel.js +144 -0
- package/dist/botlit/components/VersionHistoryPanel.js.map +1 -0
- package/dist/botlit/components/WorkspaceRequired.js +70 -0
- package/dist/botlit/components/WorkspaceRequired.js.map +1 -0
- package/dist/botlit/hooks/index.js +16 -0
- package/dist/botlit/hooks/internal/mutationInput.js +16 -0
- package/dist/botlit/hooks/internal/mutationInput.js.map +1 -0
- package/dist/botlit/hooks/internal/workspaceGateway.js +99 -0
- package/dist/botlit/hooks/internal/workspaceGateway.js.map +1 -0
- package/dist/botlit/hooks/useA2A.js +184 -0
- package/dist/botlit/hooks/useA2A.js.map +1 -0
- package/dist/botlit/hooks/useAgents.js +469 -0
- package/dist/botlit/hooks/useAgents.js.map +1 -0
- package/dist/botlit/hooks/useBots.js +306 -0
- package/dist/botlit/hooks/useBots.js.map +1 -0
- package/dist/botlit/hooks/useBuckets.js +119 -0
- package/dist/botlit/hooks/useBuckets.js.map +1 -0
- package/dist/botlit/hooks/useChannels.js +213 -0
- package/dist/botlit/hooks/useChannels.js.map +1 -0
- package/dist/botlit/hooks/useConversations.js +64 -0
- package/dist/botlit/hooks/useConversations.js.map +1 -0
- package/dist/botlit/hooks/useExecutions.js +86 -0
- package/dist/botlit/hooks/useExecutions.js.map +1 -0
- package/dist/botlit/hooks/useKnowledgeBases.js +113 -0
- package/dist/botlit/hooks/useKnowledgeBases.js.map +1 -0
- package/dist/botlit/hooks/useLLMProviders.js +83 -0
- package/dist/botlit/hooks/useLLMProviders.js.map +1 -0
- package/dist/botlit/hooks/useMCPServers.js +134 -0
- package/dist/botlit/hooks/useMCPServers.js.map +1 -0
- package/dist/botlit/hooks/usePolicies.js +120 -0
- package/dist/botlit/hooks/usePolicies.js.map +1 -0
- package/dist/botlit/hooks/usePromptTemplates.js +161 -0
- package/dist/botlit/hooks/usePromptTemplates.js.map +1 -0
- package/dist/botlit/hooks/useRetrievalProfiles.js +146 -0
- package/dist/botlit/hooks/useRetrievalProfiles.js.map +1 -0
- package/dist/botlit/hooks/useSkills.js +132 -0
- package/dist/botlit/hooks/useSkills.js.map +1 -0
- package/dist/botlit/hooks/useStore.js +167 -0
- package/dist/botlit/hooks/useStore.js.map +1 -0
- package/dist/botlit/hooks/useUserPlatformConnection.js +172 -0
- package/dist/botlit/hooks/useUserPlatformConnection.js.map +1 -0
- package/dist/botlit/index.js +11 -0
- package/dist/botlit/pages/A2AAgentDetailPage.js +589 -0
- package/dist/botlit/pages/A2AAgentDetailPage.js.map +1 -0
- package/dist/botlit/pages/A2ARegistryPage.js +240 -0
- package/dist/botlit/pages/A2ARegistryPage.js.map +1 -0
- package/dist/botlit/pages/AgentBuilderPage.js +486 -0
- package/dist/botlit/pages/AgentBuilderPage.js.map +1 -0
- package/dist/botlit/pages/AgentDetailPage.js +517 -0
- package/dist/botlit/pages/AgentDetailPage.js.map +1 -0
- package/dist/botlit/pages/AgentsListPage.js +294 -0
- package/dist/botlit/pages/AgentsListPage.js.map +1 -0
- package/dist/botlit/pages/BotChannelsTab.js +530 -0
- package/dist/botlit/pages/BotChannelsTab.js.map +1 -0
- package/dist/botlit/pages/BotDetailPage.js +872 -0
- package/dist/botlit/pages/BotDetailPage.js.map +1 -0
- package/dist/botlit/pages/BotWorkflowTab.js +229 -0
- package/dist/botlit/pages/BotWorkflowTab.js.map +1 -0
- package/dist/botlit/pages/BotsListPage.js +313 -0
- package/dist/botlit/pages/BotsListPage.js.map +1 -0
- package/dist/botlit/pages/BucketsPage.js +604 -0
- package/dist/botlit/pages/BucketsPage.js.map +1 -0
- package/dist/botlit/pages/ChannelDetailPage.js +955 -0
- package/dist/botlit/pages/ChannelDetailPage.js.map +1 -0
- package/dist/botlit/pages/ChannelRoutesPage.js +218 -0
- package/dist/botlit/pages/ChannelRoutesPage.js.map +1 -0
- package/dist/botlit/pages/ChannelsPage.js +304 -0
- package/dist/botlit/pages/ChannelsPage.js.map +1 -0
- package/dist/botlit/pages/ChatPage.js +247 -0
- package/dist/botlit/pages/ChatPage.js.map +1 -0
- package/dist/botlit/pages/DashboardPage.js +318 -0
- package/dist/botlit/pages/DashboardPage.js.map +1 -0
- package/dist/botlit/pages/ExecutionDetailPage.js +313 -0
- package/dist/botlit/pages/ExecutionDetailPage.js.map +1 -0
- package/dist/botlit/pages/ExecutionsPage.js +294 -0
- package/dist/botlit/pages/ExecutionsPage.js.map +1 -0
- package/dist/botlit/pages/InstalledPackagesPage.js +619 -0
- package/dist/botlit/pages/InstalledPackagesPage.js.map +1 -0
- package/dist/botlit/pages/KnowledgeBaseDetailPage.js +473 -0
- package/dist/botlit/pages/KnowledgeBaseDetailPage.js.map +1 -0
- package/dist/botlit/pages/KnowledgeBasesPage.js +150 -0
- package/dist/botlit/pages/KnowledgeBasesPage.js.map +1 -0
- package/dist/botlit/pages/MCPServerDetailPage.js +550 -0
- package/dist/botlit/pages/MCPServerDetailPage.js.map +1 -0
- package/dist/botlit/pages/MCPServersPage.js +321 -0
- package/dist/botlit/pages/MCPServersPage.js.map +1 -0
- package/dist/botlit/pages/PoliciesPage.js +224 -0
- package/dist/botlit/pages/PoliciesPage.js.map +1 -0
- package/dist/botlit/pages/PolicyDetailPage.js +861 -0
- package/dist/botlit/pages/PolicyDetailPage.js.map +1 -0
- package/dist/botlit/pages/PromptStudioPage.js +236 -0
- package/dist/botlit/pages/PromptStudioPage.js.map +1 -0
- package/dist/botlit/pages/PromptTemplateDetailPage.js +812 -0
- package/dist/botlit/pages/PromptTemplateDetailPage.js.map +1 -0
- package/dist/botlit/pages/PromptTemplatesPage.js +269 -0
- package/dist/botlit/pages/PromptTemplatesPage.js.map +1 -0
- package/dist/botlit/pages/RetrievalProfileDetailPage.js +559 -0
- package/dist/botlit/pages/RetrievalProfileDetailPage.js.map +1 -0
- package/dist/botlit/pages/RetrievalProfilesPage.js +219 -0
- package/dist/botlit/pages/RetrievalProfilesPage.js.map +1 -0
- package/dist/botlit/pages/SettingsPage.js +655 -0
- package/dist/botlit/pages/SettingsPage.js.map +1 -0
- package/dist/botlit/pages/SkillDetailPage.js +778 -0
- package/dist/botlit/pages/SkillDetailPage.js.map +1 -0
- package/dist/botlit/pages/SkillsPage.js +206 -0
- package/dist/botlit/pages/SkillsPage.js.map +1 -0
- package/dist/botlit/pages/StorePackageDetailPage.js +462 -0
- package/dist/botlit/pages/StorePackageDetailPage.js.map +1 -0
- package/dist/botlit/pages/StorePage.js +315 -0
- package/dist/botlit/pages/StorePage.js.map +1 -0
- package/dist/botlit/providers/BotlitProvider.js +93 -0
- package/dist/botlit/providers/BotlitProvider.js.map +1 -0
- package/dist/botlit/store/botlitStore.js +101 -0
- package/dist/botlit/store/botlitStore.js.map +1 -0
- package/dist/botlit/utils/cn.js +10 -0
- package/dist/botlit/utils/cn.js.map +1 -0
- package/dist/botlit/utils/formatters.js +37 -0
- package/dist/botlit/utils/formatters.js.map +1 -0
- package/dist/botlit/utils/navigation.js +9 -0
- package/dist/botlit/utils/navigation.js.map +1 -0
- package/dist/botlit/utils/unions.js +14 -0
- package/dist/botlit/utils/unions.js.map +1 -0
- package/dist/generated/global-operations.js +66 -0
- package/dist/generated/global-operations.js.map +1 -0
- package/dist/generated/global-types.js +8 -0
- package/dist/generated/global-types.js.map +1 -0
- package/dist/generated/wspace-operations.js +1591 -0
- package/dist/generated/wspace-operations.js.map +1 -0
- package/dist/generated/wspace-types.js +12 -0
- package/dist/generated/wspace-types.js.map +1 -0
- package/dist/index.js +13 -0
- package/dist/utils/nativeBridge.js +2 -0
- package/package.json +133 -0
|
@@ -0,0 +1,294 @@
|
|
|
1
|
+
import { useBotlit as e } from "../providers/BotlitProvider.js";
|
|
2
|
+
import { useBotlitStore as t } from "../store/botlitStore.js";
|
|
3
|
+
import { useAgents as n, useDeleteAgent as r } from "../hooks/useAgents.js";
|
|
4
|
+
import { cn as i } from "../utils/cn.js";
|
|
5
|
+
import { formatNumber as a, formatRelativeTime as o } from "../utils/formatters.js";
|
|
6
|
+
import { PageLayout as s } from "../components/PageLayout.js";
|
|
7
|
+
import { Card as c, CardContent as l } from "../components/Card.js";
|
|
8
|
+
import { Button as u } from "../components/Button.js";
|
|
9
|
+
import { StatusBadge as d } from "../components/Badge.js";
|
|
10
|
+
import { isNative as f, nativeConfirm as p, nativeImpact as m, nativeNotify as h } from "../../utils/nativeBridge.js";
|
|
11
|
+
import { EmptyState as g } from "../components/EmptyState.js";
|
|
12
|
+
import { Input as _ } from "../components/Input.js";
|
|
13
|
+
import { ErrorState as v } from "../components/ErrorState.js";
|
|
14
|
+
import { useState as y } from "react";
|
|
15
|
+
import { GlassCard as b, PagePurpose as x } from "@burdenoff/fe-libs/ui";
|
|
16
|
+
import { jsx as S, jsxs as C } from "react/jsx-runtime";
|
|
17
|
+
import { Link as w, useParams as T } from "react-router";
|
|
18
|
+
import { Bot as E, Grid3X3 as D, List as O, MessageSquare as k, MoreVertical as A, Play as j, Plus as M, Search as N, Settings as P, Trash2 as F } from "lucide-react";
|
|
19
|
+
import { toast as I } from "sonner";
|
|
20
|
+
//#region src/botlit/pages/AgentsListPage.tsx
|
|
21
|
+
var L = () => {
|
|
22
|
+
let { botId: L } = T(), { navigateTo: R, getPath: z } = e(), { data: B, loading: V, error: H, refetch: U } = n(), [W] = r(), { viewMode: G, setViewMode: K, agentFilter: q, updateAgentFilter: J } = t(), [Y, X] = y(null), Z = (e) => {
|
|
23
|
+
J({ search: e.target.value });
|
|
24
|
+
}, Q = async (e) => {
|
|
25
|
+
let t = await p({
|
|
26
|
+
title: "Delete agent?",
|
|
27
|
+
message: `Are you sure you want to delete "${e.name}"?`,
|
|
28
|
+
okButtonTitle: "Delete",
|
|
29
|
+
cancelButtonTitle: "Cancel"
|
|
30
|
+
});
|
|
31
|
+
if (t === null ? confirm(`Are you sure you want to delete "${e.name}"?`) : t) {
|
|
32
|
+
m("medium");
|
|
33
|
+
try {
|
|
34
|
+
await W(e.id), I.success(`Agent "${e.name}" deleted successfully`), f() && h("success");
|
|
35
|
+
} catch (e) {
|
|
36
|
+
let t = e instanceof Error ? e.message : "Failed to delete agent";
|
|
37
|
+
I.error(t), f() && h("error");
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
X(null);
|
|
41
|
+
}, $ = B.filter((e) => {
|
|
42
|
+
if (q.search) {
|
|
43
|
+
let t = q.search.toLowerCase();
|
|
44
|
+
return e.name.toLowerCase().includes(t) || (e.description?.toLowerCase().includes(t) ?? !1);
|
|
45
|
+
}
|
|
46
|
+
return !0;
|
|
47
|
+
});
|
|
48
|
+
return /* @__PURE__ */ S(s, {
|
|
49
|
+
title: L ? "Bot Agents" : "All Agents",
|
|
50
|
+
description: L ? "Manage agents for this bot" : "View and manage all your AI agents",
|
|
51
|
+
actions: /* @__PURE__ */ S(u, {
|
|
52
|
+
leftIcon: /* @__PURE__ */ S(M, { size: 16 }),
|
|
53
|
+
onClick: () => R(L ? `bots/${L}/agents/new` : "agents/new"),
|
|
54
|
+
children: "Create Agent"
|
|
55
|
+
}),
|
|
56
|
+
children: /* @__PURE__ */ C("div", {
|
|
57
|
+
className: "space-y-6",
|
|
58
|
+
children: [
|
|
59
|
+
/* @__PURE__ */ S(x, {
|
|
60
|
+
icon: /* @__PURE__ */ S(E, { size: 18 }),
|
|
61
|
+
children: "Agents are the reasoning workers behind your bots — each one bundles a model, a system prompt, tools and knowledge into a callable AI. Build an agent here to handle a specific job (answer support questions, summarise documents, run a workflow), then test it in chat and connect it to a bot or channel."
|
|
62
|
+
}),
|
|
63
|
+
B.length > 0 ? /* @__PURE__ */ C("div", {
|
|
64
|
+
className: "grid grid-cols-2 gap-4 sm:grid-cols-3",
|
|
65
|
+
children: [
|
|
66
|
+
/* @__PURE__ */ C(b, {
|
|
67
|
+
treatment: "glass",
|
|
68
|
+
glow: !0,
|
|
69
|
+
className: "p-4",
|
|
70
|
+
children: [/* @__PURE__ */ S("p", {
|
|
71
|
+
className: "text-sm text-text-secondary",
|
|
72
|
+
children: "Total agents"
|
|
73
|
+
}), /* @__PURE__ */ S("p", {
|
|
74
|
+
className: "mt-1 text-2xl font-semibold tabular-nums text-text-primary",
|
|
75
|
+
children: B.length
|
|
76
|
+
})]
|
|
77
|
+
}),
|
|
78
|
+
/* @__PURE__ */ C(b, {
|
|
79
|
+
treatment: "metric",
|
|
80
|
+
className: "p-4",
|
|
81
|
+
children: [/* @__PURE__ */ S("p", {
|
|
82
|
+
className: "text-sm text-text-secondary",
|
|
83
|
+
children: "Active"
|
|
84
|
+
}), /* @__PURE__ */ S("p", {
|
|
85
|
+
className: "mt-1 text-2xl font-semibold tabular-nums text-text-primary",
|
|
86
|
+
children: B.filter((e) => e.status === "ACTIVE").length
|
|
87
|
+
})]
|
|
88
|
+
}),
|
|
89
|
+
/* @__PURE__ */ C(b, {
|
|
90
|
+
treatment: "metric",
|
|
91
|
+
className: "col-span-2 p-4 sm:col-span-1",
|
|
92
|
+
children: [/* @__PURE__ */ S("p", {
|
|
93
|
+
className: "text-sm text-text-secondary",
|
|
94
|
+
children: "Total executions"
|
|
95
|
+
}), /* @__PURE__ */ S("p", {
|
|
96
|
+
className: "mt-1 text-2xl font-semibold tabular-nums text-text-primary",
|
|
97
|
+
children: a(B.reduce((e, t) => e + (t.executionCount ?? 0), 0))
|
|
98
|
+
})]
|
|
99
|
+
})
|
|
100
|
+
]
|
|
101
|
+
}) : null,
|
|
102
|
+
/* @__PURE__ */ C("div", {
|
|
103
|
+
className: "flex items-center justify-between gap-4",
|
|
104
|
+
children: [/* @__PURE__ */ C("div", {
|
|
105
|
+
className: "relative flex-1 max-w-md",
|
|
106
|
+
children: [/* @__PURE__ */ S(N, { className: "absolute left-3 top-1/2 -translate-y-1/2 h-4 w-4 text-text-secondary" }), /* @__PURE__ */ S(_, {
|
|
107
|
+
placeholder: "Search agents...",
|
|
108
|
+
value: q.search || "",
|
|
109
|
+
onChange: Z,
|
|
110
|
+
className: "pl-9"
|
|
111
|
+
})]
|
|
112
|
+
}), /* @__PURE__ */ C("div", {
|
|
113
|
+
className: "flex items-center gap-2",
|
|
114
|
+
children: [/* @__PURE__ */ S(u, {
|
|
115
|
+
variant: G === "grid" ? "secondary" : "ghost",
|
|
116
|
+
size: "icon",
|
|
117
|
+
onClick: () => K("grid"),
|
|
118
|
+
children: /* @__PURE__ */ S(D, { size: 18 })
|
|
119
|
+
}), /* @__PURE__ */ S(u, {
|
|
120
|
+
variant: G === "list" ? "secondary" : "ghost",
|
|
121
|
+
size: "icon",
|
|
122
|
+
onClick: () => K("list"),
|
|
123
|
+
children: /* @__PURE__ */ S(O, { size: 18 })
|
|
124
|
+
})]
|
|
125
|
+
})]
|
|
126
|
+
}),
|
|
127
|
+
V ? /* @__PURE__ */ S("div", {
|
|
128
|
+
className: i("gap-4", G === "grid" ? "grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3" : "flex flex-col"),
|
|
129
|
+
children: [
|
|
130
|
+
1,
|
|
131
|
+
2,
|
|
132
|
+
3,
|
|
133
|
+
4,
|
|
134
|
+
5,
|
|
135
|
+
6
|
|
136
|
+
].map((e) => /* @__PURE__ */ S("div", { className: "h-48 bg-bg-sunken motion-safe:animate-vc-shimmer rounded-lg" }, e))
|
|
137
|
+
}) : H ? /* @__PURE__ */ S(v, {
|
|
138
|
+
resource: "agents",
|
|
139
|
+
error: H,
|
|
140
|
+
onRetry: () => void U()
|
|
141
|
+
}) : $.length > 0 ? G === "grid" ? /* @__PURE__ */ S("div", {
|
|
142
|
+
className: "grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-4",
|
|
143
|
+
children: $.map((e) => /* @__PURE__ */ S(c, {
|
|
144
|
+
className: "group hover:shadow-md transition-shadow cursor-pointer relative",
|
|
145
|
+
onClick: () => R(`agents/${e.id}`),
|
|
146
|
+
children: /* @__PURE__ */ C(l, {
|
|
147
|
+
className: "pt-6",
|
|
148
|
+
children: [
|
|
149
|
+
/* @__PURE__ */ C("div", {
|
|
150
|
+
className: "flex items-start justify-between",
|
|
151
|
+
children: [/* @__PURE__ */ C("div", {
|
|
152
|
+
className: "flex items-center gap-3",
|
|
153
|
+
children: [/* @__PURE__ */ S("span", {
|
|
154
|
+
className: "text-4xl",
|
|
155
|
+
children: "🤖"
|
|
156
|
+
}), /* @__PURE__ */ C("div", { children: [/* @__PURE__ */ S("h3", {
|
|
157
|
+
className: "font-semibold text-text-primary",
|
|
158
|
+
children: e.name
|
|
159
|
+
}), /* @__PURE__ */ S("div", {
|
|
160
|
+
className: "flex items-center gap-2 mt-1",
|
|
161
|
+
children: /* @__PURE__ */ S(d, { status: e.status })
|
|
162
|
+
})] })]
|
|
163
|
+
}), /* @__PURE__ */ C("div", {
|
|
164
|
+
className: "relative",
|
|
165
|
+
children: [/* @__PURE__ */ S(u, {
|
|
166
|
+
variant: "ghost",
|
|
167
|
+
size: "icon",
|
|
168
|
+
className: "opacity-0 group-hover:opacity-100 transition-opacity",
|
|
169
|
+
onClick: (t) => {
|
|
170
|
+
t.stopPropagation(), X(Y === e.id ? null : e.id);
|
|
171
|
+
},
|
|
172
|
+
children: /* @__PURE__ */ S(A, { size: 16 })
|
|
173
|
+
}), Y === e.id && /* @__PURE__ */ C("div", {
|
|
174
|
+
className: "absolute right-0 top-full mt-1 w-48 bg-popover border border-border-subtle rounded-md shadow-lg z-10",
|
|
175
|
+
children: [
|
|
176
|
+
/* @__PURE__ */ C("button", {
|
|
177
|
+
className: "w-full px-4 py-2 text-left text-sm hover:bg-accent flex items-center gap-2",
|
|
178
|
+
onClick: (t) => {
|
|
179
|
+
t.stopPropagation(), R(`agents/${e.id}/chat`), X(null);
|
|
180
|
+
},
|
|
181
|
+
children: [/* @__PURE__ */ S(j, { size: 16 }), "Test Agent"]
|
|
182
|
+
}),
|
|
183
|
+
/* @__PURE__ */ C("button", {
|
|
184
|
+
className: "w-full px-4 py-2 text-left text-sm hover:bg-accent flex items-center gap-2",
|
|
185
|
+
onClick: (t) => {
|
|
186
|
+
t.stopPropagation(), R(`agents/${e.id}/edit`), X(null);
|
|
187
|
+
},
|
|
188
|
+
children: [/* @__PURE__ */ S(P, { size: 16 }), "Edit Agent"]
|
|
189
|
+
}),
|
|
190
|
+
/* @__PURE__ */ C("button", {
|
|
191
|
+
className: "w-full px-4 py-2 text-left text-sm hover:bg-accent text-status-error-text flex items-center gap-2",
|
|
192
|
+
onClick: (t) => {
|
|
193
|
+
t.stopPropagation(), Q(e);
|
|
194
|
+
},
|
|
195
|
+
children: [/* @__PURE__ */ S(F, { size: 16 }), "Delete"]
|
|
196
|
+
})
|
|
197
|
+
]
|
|
198
|
+
})]
|
|
199
|
+
})]
|
|
200
|
+
}),
|
|
201
|
+
/* @__PURE__ */ S("p", {
|
|
202
|
+
className: "mt-3 text-sm text-text-secondary line-clamp-2",
|
|
203
|
+
children: e.description
|
|
204
|
+
}),
|
|
205
|
+
/* @__PURE__ */ S("div", {
|
|
206
|
+
className: "mt-4 flex items-center gap-4 text-xs text-text-secondary",
|
|
207
|
+
children: /* @__PURE__ */ C("span", {
|
|
208
|
+
className: "flex items-center gap-1",
|
|
209
|
+
children: [
|
|
210
|
+
/* @__PURE__ */ S(k, { size: 14 }),
|
|
211
|
+
a(e.executionCount),
|
|
212
|
+
" executions"
|
|
213
|
+
]
|
|
214
|
+
})
|
|
215
|
+
}),
|
|
216
|
+
/* @__PURE__ */ C("div", {
|
|
217
|
+
className: "mt-3 pt-3 border-t border-border-subtle flex items-center justify-between",
|
|
218
|
+
children: [/* @__PURE__ */ C("span", {
|
|
219
|
+
className: "text-xs text-text-secondary",
|
|
220
|
+
children: ["Created ", o(e.createdAt)]
|
|
221
|
+
}), /* @__PURE__ */ S(u, {
|
|
222
|
+
size: "sm",
|
|
223
|
+
variant: "ghost",
|
|
224
|
+
leftIcon: /* @__PURE__ */ S(j, { size: 14 }),
|
|
225
|
+
onClick: (t) => {
|
|
226
|
+
t.stopPropagation(), R(`agents/${e.id}/chat`);
|
|
227
|
+
},
|
|
228
|
+
children: "Test"
|
|
229
|
+
})]
|
|
230
|
+
})
|
|
231
|
+
]
|
|
232
|
+
})
|
|
233
|
+
}, e.id))
|
|
234
|
+
}) : /* @__PURE__ */ S("div", {
|
|
235
|
+
className: "space-y-2",
|
|
236
|
+
children: $.map((e) => /* @__PURE__ */ S(c, {
|
|
237
|
+
className: "hover:shadow-md transition-shadow cursor-pointer",
|
|
238
|
+
onClick: () => R(`agents/${e.id}`),
|
|
239
|
+
children: /* @__PURE__ */ S(l, {
|
|
240
|
+
className: "py-4",
|
|
241
|
+
children: /* @__PURE__ */ C("div", {
|
|
242
|
+
className: "flex items-center justify-between",
|
|
243
|
+
children: [/* @__PURE__ */ C("div", {
|
|
244
|
+
className: "flex items-center gap-4",
|
|
245
|
+
children: [/* @__PURE__ */ S("span", {
|
|
246
|
+
className: "text-3xl",
|
|
247
|
+
children: "🤖"
|
|
248
|
+
}), /* @__PURE__ */ C("div", { children: [/* @__PURE__ */ C("div", {
|
|
249
|
+
className: "flex items-center gap-2",
|
|
250
|
+
children: [/* @__PURE__ */ S("h3", {
|
|
251
|
+
className: "font-semibold text-text-primary",
|
|
252
|
+
children: e.name
|
|
253
|
+
}), /* @__PURE__ */ S(d, { status: e.status })]
|
|
254
|
+
}), /* @__PURE__ */ S("p", {
|
|
255
|
+
className: "text-sm text-text-secondary line-clamp-1",
|
|
256
|
+
children: e.description
|
|
257
|
+
})] })]
|
|
258
|
+
}), /* @__PURE__ */ C("div", {
|
|
259
|
+
className: "flex items-center gap-4 text-sm text-text-secondary",
|
|
260
|
+
children: [
|
|
261
|
+
/* @__PURE__ */ C("span", { children: [a(e.executionCount), " executions"] }),
|
|
262
|
+
/* @__PURE__ */ S("span", { children: o(e.createdAt) }),
|
|
263
|
+
/* @__PURE__ */ S(u, {
|
|
264
|
+
variant: "outline",
|
|
265
|
+
size: "sm",
|
|
266
|
+
leftIcon: /* @__PURE__ */ S(j, { size: 14 }),
|
|
267
|
+
children: /* @__PURE__ */ S(w, {
|
|
268
|
+
to: z(`agents/${e.id}/chat`),
|
|
269
|
+
children: "Test"
|
|
270
|
+
})
|
|
271
|
+
})
|
|
272
|
+
]
|
|
273
|
+
})]
|
|
274
|
+
})
|
|
275
|
+
})
|
|
276
|
+
}, e.id))
|
|
277
|
+
}) : /* @__PURE__ */ S(g, {
|
|
278
|
+
illustration: "empty-agents",
|
|
279
|
+
title: "No agents yet",
|
|
280
|
+
description: "Create your first AI agent to start building intelligent automations.",
|
|
281
|
+
action: /* @__PURE__ */ S(u, {
|
|
282
|
+
leftIcon: /* @__PURE__ */ S(M, { size: 16 }),
|
|
283
|
+
onClick: () => R(L ? `bots/${L}/agents/new` : "agents/new"),
|
|
284
|
+
children: "Create Agent"
|
|
285
|
+
})
|
|
286
|
+
})
|
|
287
|
+
]
|
|
288
|
+
})
|
|
289
|
+
});
|
|
290
|
+
};
|
|
291
|
+
//#endregion
|
|
292
|
+
export { L as AgentsListPage };
|
|
293
|
+
|
|
294
|
+
//# sourceMappingURL=AgentsListPage.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AgentsListPage.js","names":[],"sources":["../../../src/botlit/pages/AgentsListPage.tsx"],"sourcesContent":["/**\n * Agents List Page\n * @module botlit/pages\n */\n\nimport type { ChangeEvent, FC } from 'react';\nimport { useState } from 'react';\nimport { useParams, Link } from 'react-router';\nimport {\n Bot,\n Plus,\n Search,\n Grid3X3,\n List,\n MoreVertical,\n MessageSquare,\n Trash2,\n Settings,\n Play,\n} from 'lucide-react';\nimport { toast } from 'sonner';\nimport { isNative, nativeConfirm, nativeImpact, nativeNotify } from '../../utils/nativeBridge';\nimport { PagePurpose, GlassCard } from '@burdenoff/fe-libs/ui';\nimport { PageLayout } from '../components/PageLayout';\nimport { Card, CardContent } from '../components/Card';\nimport { Button } from '../components/Button';\nimport { Input } from '../components/Input';\nimport { StatusBadge } from '../components/Badge';\nimport { EmptyState } from '../components/EmptyState';\nimport { ErrorState } from '../components/ErrorState';\nimport { useAgents, useDeleteAgent, type AgentRecord } from '../hooks/useAgents';\nimport { useBotlitStore } from '../store/botlitStore';\nimport { useBotlit } from '../providers/BotlitProvider';\nimport { formatRelativeTime, formatNumber } from '../utils/formatters';\nimport { cn } from '../utils/cn';\n\nexport const AgentsListPage: FC = () => {\n const { botId } = useParams();\n const { navigateTo, getPath } = useBotlit();\n const { data: agents, loading, error, refetch } = useAgents();\n const [deleteAgent] = useDeleteAgent();\n const { viewMode, setViewMode, agentFilter, updateAgentFilter } = useBotlitStore();\n const [menuOpen, setMenuOpen] = useState<string | null>(null);\n\n const handleSearch = (e: ChangeEvent<HTMLInputElement>) => {\n updateAgentFilter({ search: e.target.value });\n };\n\n const handleDelete = async (agent: { id: string; name: string }) => {\n const confirmed = await nativeConfirm({\n title: 'Delete agent?',\n message: `Are you sure you want to delete \"${agent.name}\"?`,\n okButtonTitle: 'Delete',\n cancelButtonTitle: 'Cancel',\n });\n const ok =\n confirmed === null ? confirm(`Are you sure you want to delete \"${agent.name}\"?`) : confirmed;\n if (ok) {\n nativeImpact('medium');\n try {\n await deleteAgent(agent.id);\n toast.success(`Agent \"${agent.name}\" deleted successfully`);\n if (isNative()) void nativeNotify('success');\n } catch (err: unknown) {\n const message = err instanceof Error ? err.message : 'Failed to delete agent';\n toast.error(message);\n if (isNative()) void nativeNotify('error');\n }\n }\n setMenuOpen(null);\n };\n\n const filteredAgents = agents.filter((agent) => {\n if (agentFilter.search) {\n const search = agentFilter.search.toLowerCase();\n return (\n agent.name.toLowerCase().includes(search) ||\n (agent.description?.toLowerCase().includes(search) ?? false)\n );\n }\n return true;\n });\n\n return (\n <PageLayout\n title={botId ? 'Bot Agents' : 'All Agents'}\n description={botId ? 'Manage agents for this bot' : 'View and manage all your AI agents'}\n actions={\n <Button\n leftIcon={<Plus size={16} />}\n onClick={() => navigateTo(botId ? `bots/${botId}/agents/new` : 'agents/new')}\n >\n Create Agent\n </Button>\n }\n >\n <div className=\"space-y-6\">\n <PagePurpose icon={<Bot size={18} />}>\n Agents are the reasoning workers behind your bots — each one bundles a model, a system\n prompt, tools and knowledge into a callable AI. Build an agent here to handle a specific\n job (answer support questions, summarise documents, run a workflow), then test it in chat\n and connect it to a bot or channel.\n </PagePurpose>\n\n {/* Summary */}\n {agents.length > 0 ? (\n <div className=\"grid grid-cols-2 gap-4 sm:grid-cols-3\">\n <GlassCard treatment=\"glass\" glow className=\"p-4\">\n <p className=\"text-sm text-text-secondary\">Total agents</p>\n <p className=\"mt-1 text-2xl font-semibold tabular-nums text-text-primary\">\n {agents.length}\n </p>\n </GlassCard>\n <GlassCard treatment=\"metric\" className=\"p-4\">\n <p className=\"text-sm text-text-secondary\">Active</p>\n <p className=\"mt-1 text-2xl font-semibold tabular-nums text-text-primary\">\n {agents.filter((agent) => agent.status === 'ACTIVE').length}\n </p>\n </GlassCard>\n <GlassCard treatment=\"metric\" className=\"col-span-2 p-4 sm:col-span-1\">\n <p className=\"text-sm text-text-secondary\">Total executions</p>\n <p className=\"mt-1 text-2xl font-semibold tabular-nums text-text-primary\">\n {formatNumber(agents.reduce((sum, agent) => sum + (agent.executionCount ?? 0), 0))}\n </p>\n </GlassCard>\n </div>\n ) : null}\n\n {/* Toolbar */}\n <div className=\"flex items-center justify-between gap-4\">\n <div className=\"relative flex-1 max-w-md\">\n <Search className=\"absolute left-3 top-1/2 -translate-y-1/2 h-4 w-4 text-text-secondary\" />\n <Input\n placeholder=\"Search agents...\"\n value={agentFilter.search || ''}\n onChange={handleSearch}\n className=\"pl-9\"\n />\n </div>\n <div className=\"flex items-center gap-2\">\n <Button\n variant={viewMode === 'grid' ? 'secondary' : 'ghost'}\n size=\"icon\"\n onClick={() => setViewMode('grid')}\n >\n <Grid3X3 size={18} />\n </Button>\n <Button\n variant={viewMode === 'list' ? 'secondary' : 'ghost'}\n size=\"icon\"\n onClick={() => setViewMode('list')}\n >\n <List size={18} />\n </Button>\n </div>\n </div>\n\n {/* Content */}\n {loading ? (\n <div\n className={cn(\n 'gap-4',\n viewMode === 'grid'\n ? 'grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3'\n : 'flex flex-col'\n )}\n >\n {[1, 2, 3, 4, 5, 6].map((i) => (\n <div\n key={i}\n className=\"h-48 bg-bg-sunken motion-safe:animate-vc-shimmer rounded-lg\"\n />\n ))}\n </div>\n ) : error ? (\n <ErrorState resource=\"agents\" error={error} onRetry={() => void refetch()} />\n ) : filteredAgents.length > 0 ? (\n viewMode === 'grid' ? (\n <div className=\"grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-4\">\n {filteredAgents.map((agent: AgentRecord) => (\n <Card\n key={agent.id}\n className=\"group hover:shadow-md transition-shadow cursor-pointer relative\"\n onClick={() => navigateTo(`agents/${agent.id}`)}\n >\n <CardContent className=\"pt-6\">\n <div className=\"flex items-start justify-between\">\n <div className=\"flex items-center gap-3\">\n <span className=\"text-4xl\">🤖</span>\n <div>\n <h3 className=\"font-semibold text-text-primary\">{agent.name}</h3>\n <div className=\"flex items-center gap-2 mt-1\">\n <StatusBadge status={agent.status} />\n </div>\n </div>\n </div>\n <div className=\"relative\">\n <Button\n variant=\"ghost\"\n size=\"icon\"\n className=\"opacity-0 group-hover:opacity-100 transition-opacity\"\n onClick={(e) => {\n e.stopPropagation();\n setMenuOpen(menuOpen === agent.id ? null : agent.id);\n }}\n >\n <MoreVertical size={16} />\n </Button>\n {menuOpen === agent.id && (\n <div className=\"absolute right-0 top-full mt-1 w-48 bg-popover border border-border-subtle rounded-md shadow-lg z-10\">\n <button\n className=\"w-full px-4 py-2 text-left text-sm hover:bg-accent flex items-center gap-2\"\n onClick={(e) => {\n e.stopPropagation();\n navigateTo(`agents/${agent.id}/chat`);\n setMenuOpen(null);\n }}\n >\n <Play size={16} />\n Test Agent\n </button>\n <button\n className=\"w-full px-4 py-2 text-left text-sm hover:bg-accent flex items-center gap-2\"\n onClick={(e) => {\n e.stopPropagation();\n navigateTo(`agents/${agent.id}/edit`);\n setMenuOpen(null);\n }}\n >\n <Settings size={16} />\n Edit Agent\n </button>\n <button\n className=\"w-full px-4 py-2 text-left text-sm hover:bg-accent text-status-error-text flex items-center gap-2\"\n onClick={(e) => {\n e.stopPropagation();\n handleDelete(agent);\n }}\n >\n <Trash2 size={16} />\n Delete\n </button>\n </div>\n )}\n </div>\n </div>\n <p className=\"mt-3 text-sm text-text-secondary line-clamp-2\">\n {agent.description}\n </p>\n <div className=\"mt-4 flex items-center gap-4 text-xs text-text-secondary\">\n <span className=\"flex items-center gap-1\">\n <MessageSquare size={14} />\n {formatNumber(agent.executionCount)} executions\n </span>\n </div>\n <div className=\"mt-3 pt-3 border-t border-border-subtle flex items-center justify-between\">\n <span className=\"text-xs text-text-secondary\">\n Created {formatRelativeTime(agent.createdAt)}\n </span>\n <Button\n size=\"sm\"\n variant=\"ghost\"\n leftIcon={<Play size={14} />}\n onClick={(e) => {\n e.stopPropagation();\n navigateTo(`agents/${agent.id}/chat`);\n }}\n >\n Test\n </Button>\n </div>\n </CardContent>\n </Card>\n ))}\n </div>\n ) : (\n <div className=\"space-y-2\">\n {filteredAgents.map((agent: AgentRecord) => (\n <Card\n key={agent.id}\n className=\"hover:shadow-md transition-shadow cursor-pointer\"\n onClick={() => navigateTo(`agents/${agent.id}`)}\n >\n <CardContent className=\"py-4\">\n <div className=\"flex items-center justify-between\">\n <div className=\"flex items-center gap-4\">\n <span className=\"text-3xl\">🤖</span>\n <div>\n <div className=\"flex items-center gap-2\">\n <h3 className=\"font-semibold text-text-primary\">{agent.name}</h3>\n <StatusBadge status={agent.status} />\n </div>\n <p className=\"text-sm text-text-secondary line-clamp-1\">\n {agent.description}\n </p>\n </div>\n </div>\n <div className=\"flex items-center gap-4 text-sm text-text-secondary\">\n <span>{formatNumber(agent.executionCount)} executions</span>\n <span>{formatRelativeTime(agent.createdAt)}</span>\n <Button variant=\"outline\" size=\"sm\" leftIcon={<Play size={14} />}>\n <Link to={getPath(`agents/${agent.id}/chat`)}>Test</Link>\n </Button>\n </div>\n </div>\n </CardContent>\n </Card>\n ))}\n </div>\n )\n ) : (\n <EmptyState\n illustration=\"empty-agents\"\n title=\"No agents yet\"\n description=\"Create your first AI agent to start building intelligent automations.\"\n action={\n <Button\n leftIcon={<Plus size={16} />}\n onClick={() => navigateTo(botId ? `bots/${botId}/agents/new` : 'agents/new')}\n >\n Create Agent\n </Button>\n }\n />\n )}\n </div>\n </PageLayout>\n );\n};\n"],"mappings":"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"}
|