@burdenoff/microfe-botmanor 2026.1027.2 → 2026.1028.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 (91) hide show
  1. package/dist/botlit/BotlitRoutes.js +142 -132
  2. package/dist/botlit/BotlitRoutes.js.map +1 -1
  3. package/dist/botlit/components/AgentApprovalPanel.js +144 -126
  4. package/dist/botlit/components/AgentApprovalPanel.js.map +1 -1
  5. package/dist/botlit/components/ModelRegistrationPanel.js +4 -4
  6. package/dist/botlit/components/RetentionStatusPanel.js +95 -0
  7. package/dist/botlit/components/RetentionStatusPanel.js.map +1 -0
  8. package/dist/botlit/components/VersionHistoryPanel.js +92 -83
  9. package/dist/botlit/components/VersionHistoryPanel.js.map +1 -1
  10. package/dist/botlit/hooks/index.js +1 -0
  11. package/dist/botlit/hooks/useRetention.js +31 -0
  12. package/dist/botlit/hooks/useRetention.js.map +1 -0
  13. package/dist/botlit/pages/A2AAgentDetailPage.js +212 -203
  14. package/dist/botlit/pages/A2AAgentDetailPage.js.map +1 -1
  15. package/dist/botlit/pages/A2ARegistryPage.js +129 -117
  16. package/dist/botlit/pages/A2ARegistryPage.js.map +1 -1
  17. package/dist/botlit/pages/AgentApprovalsPage.js +122 -110
  18. package/dist/botlit/pages/AgentApprovalsPage.js.map +1 -1
  19. package/dist/botlit/pages/AgentBuilderPage.js +18 -18
  20. package/dist/botlit/pages/AgentDetailPage.js +298 -273
  21. package/dist/botlit/pages/AgentDetailPage.js.map +1 -1
  22. package/dist/botlit/pages/AgentsListPage.js +145 -121
  23. package/dist/botlit/pages/AgentsListPage.js.map +1 -1
  24. package/dist/botlit/pages/BotChannelsTab.js +238 -226
  25. package/dist/botlit/pages/BotChannelsTab.js.map +1 -1
  26. package/dist/botlit/pages/BotDetailPage.js +307 -288
  27. package/dist/botlit/pages/BotDetailPage.js.map +1 -1
  28. package/dist/botlit/pages/BotWorkflowTab.js +125 -116
  29. package/dist/botlit/pages/BotWorkflowTab.js.map +1 -1
  30. package/dist/botlit/pages/BotsListPage.js +159 -144
  31. package/dist/botlit/pages/BotsListPage.js.map +1 -1
  32. package/dist/botlit/pages/BucketsPage.js +279 -258
  33. package/dist/botlit/pages/BucketsPage.js.map +1 -1
  34. package/dist/botlit/pages/ChannelDetailPage.js +346 -328
  35. package/dist/botlit/pages/ChannelDetailPage.js.map +1 -1
  36. package/dist/botlit/pages/ChannelRoutesPage.js +10 -10
  37. package/dist/botlit/pages/ChannelsPage.js +163 -148
  38. package/dist/botlit/pages/ChannelsPage.js.map +1 -1
  39. package/dist/botlit/pages/DashboardPage.js +129 -114
  40. package/dist/botlit/pages/DashboardPage.js.map +1 -1
  41. package/dist/botlit/pages/ExecutionDetailPage.js +145 -139
  42. package/dist/botlit/pages/ExecutionDetailPage.js.map +1 -1
  43. package/dist/botlit/pages/ExecutionsPage.js +14 -14
  44. package/dist/botlit/pages/InstalledPackagesPage.js +245 -227
  45. package/dist/botlit/pages/InstalledPackagesPage.js.map +1 -1
  46. package/dist/botlit/pages/KnowledgeBaseDetailPage.js +168 -156
  47. package/dist/botlit/pages/KnowledgeBaseDetailPage.js.map +1 -1
  48. package/dist/botlit/pages/KnowledgeBasesPage.js +91 -79
  49. package/dist/botlit/pages/KnowledgeBasesPage.js.map +1 -1
  50. package/dist/botlit/pages/MCPServerDetailPage.js +200 -188
  51. package/dist/botlit/pages/MCPServerDetailPage.js.map +1 -1
  52. package/dist/botlit/pages/MCPServersPage.js +170 -155
  53. package/dist/botlit/pages/MCPServersPage.js.map +1 -1
  54. package/dist/botlit/pages/PoliciesPage.js +115 -104
  55. package/dist/botlit/pages/PoliciesPage.js.map +1 -1
  56. package/dist/botlit/pages/PolicyDetailPage.js +368 -324
  57. package/dist/botlit/pages/PolicyDetailPage.js.map +1 -1
  58. package/dist/botlit/pages/PromptStudioPage.js +106 -97
  59. package/dist/botlit/pages/PromptStudioPage.js.map +1 -1
  60. package/dist/botlit/pages/PromptTemplateDetailPage.js +359 -347
  61. package/dist/botlit/pages/PromptTemplateDetailPage.js.map +1 -1
  62. package/dist/botlit/pages/PromptTemplatesPage.js +127 -112
  63. package/dist/botlit/pages/PromptTemplatesPage.js.map +1 -1
  64. package/dist/botlit/pages/RetrievalProfileDetailPage.js +219 -210
  65. package/dist/botlit/pages/RetrievalProfileDetailPage.js.map +1 -1
  66. package/dist/botlit/pages/RetrievalProfilesPage.js +112 -103
  67. package/dist/botlit/pages/RetrievalProfilesPage.js.map +1 -1
  68. package/dist/botlit/pages/SettingsPage.js +264 -252
  69. package/dist/botlit/pages/SettingsPage.js.map +1 -1
  70. package/dist/botlit/pages/SkillDetailPage.js +235 -226
  71. package/dist/botlit/pages/SkillDetailPage.js.map +1 -1
  72. package/dist/botlit/pages/SkillsPage.js +115 -106
  73. package/dist/botlit/pages/SkillsPage.js.map +1 -1
  74. package/dist/botlit/pages/StorePackageDetailPage.js +194 -188
  75. package/dist/botlit/pages/StorePackageDetailPage.js.map +1 -1
  76. package/dist/botlit/pages/StorePage.js +161 -155
  77. package/dist/botlit/pages/StorePage.js.map +1 -1
  78. package/dist/botlit/permissions/PermissionRequired.js +45 -0
  79. package/dist/botlit/permissions/PermissionRequired.js.map +1 -0
  80. package/dist/botlit/permissions/botmanorPermissions.js +72 -0
  81. package/dist/botlit/permissions/botmanorPermissions.js.map +1 -0
  82. package/dist/botlit/permissions/index.js +3 -0
  83. package/dist/botlit/permissions/useBotmanorPermissions.js +19 -0
  84. package/dist/botlit/permissions/useBotmanorPermissions.js.map +1 -0
  85. package/dist/botlit/utils/policyConfig.js +67 -42
  86. package/dist/botlit/utils/policyConfig.js.map +1 -1
  87. package/dist/generated/global-types.js.map +1 -1
  88. package/dist/generated/wspace-operations.js +90 -54
  89. package/dist/generated/wspace-operations.js.map +1 -1
  90. package/dist/generated/wspace-types.js.map +1 -1
  91. package/package.json +1 -1
@@ -3,67 +3,76 @@ import { useBotlit as t } from "../providers/BotlitProvider.js";
3
3
  import { useBots as n } from "../hooks/useBots.js";
4
4
  import { useAgents as r } from "../hooks/useAgents.js";
5
5
  import { formatNumber as i } from "../utils/formatters.js";
6
- import { PageLayout as a } from "../components/PageLayout.js";
7
- import { Card as o, CardContent as s, CardHeader as c, CardTitle 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 { GlassCard as f, GradientText as p, PagePurpose as m } from "@burdenoff/fe-libs/ui";
11
- import { Fragment as h, jsx as g, jsxs as _ } from "react/jsx-runtime";
12
- import { Link as v } from "react-router";
13
- import { AppWindow as y, ArrowRight as b, BookOpen as x, Bot as S, Plus as C, Zap as w } from "lucide-react";
6
+ import { BOTMANOR_PERMISSIONS as a } from "../permissions/botmanorPermissions.js";
7
+ import { BotmanorPermissionGate as o } from "../permissions/useBotmanorPermissions.js";
8
+ import { PageLayout as s } from "../components/PageLayout.js";
9
+ import { Button as c } from "../components/Button.js";
10
+ import "../permissions/index.js";
11
+ import { Card as l, CardContent as u, CardHeader as d, CardTitle as f } from "../components/Card.js";
12
+ import { StatusBadge as p } from "../components/Badge.js";
13
+ import { GlassCard as m, GradientText as h, PagePurpose as g } from "@burdenoff/fe-libs/ui";
14
+ import { Fragment as _, jsx as v, jsxs as y } from "react/jsx-runtime";
15
+ import { Link as b } from "react-router";
16
+ import { AppWindow as x, ArrowRight as S, BookOpen as C, Bot as w, Plus as T, Zap as E } from "lucide-react";
14
17
  //#region src/botlit/pages/DashboardPage.tsx
15
- var T = () => {
16
- let T = e(), { currentUser: E, navigateTo: D, getPath: O } = t(), { data: k, loading: A } = n(), { data: j, loading: M } = r(), N = [{
17
- label: T("botlit.dashboard.stats.totalBots", "Total Bots"),
18
- value: k?.length || 0,
19
- icon: /* @__PURE__ */ g(y, { className: "h-5 w-5" }),
18
+ var D = () => {
19
+ let D = e(), { currentUser: O, navigateTo: k, getPath: A } = t(), { data: j, loading: M } = n(), { data: N, loading: P } = r(), F = [{
20
+ label: D("botlit.dashboard.stats.totalBots", "Total Bots"),
21
+ value: j?.length || 0,
22
+ icon: /* @__PURE__ */ v(x, { className: "h-5 w-5" }),
20
23
  hero: !0
21
24
  }, {
22
- label: T("botlit.dashboard.stats.activeAgents", "Active Agents"),
23
- value: j?.filter((e) => e.status === "ACTIVE").length || 0,
24
- icon: /* @__PURE__ */ g(S, { className: "h-5 w-5" }),
25
+ label: D("botlit.dashboard.stats.activeAgents", "Active Agents"),
26
+ value: N?.filter((e) => e.status === "ACTIVE").length || 0,
27
+ icon: /* @__PURE__ */ v(w, { className: "h-5 w-5" }),
25
28
  hero: !1
26
- }], P = E?.name ? E.name.split(" ")[0] : "";
27
- return /* @__PURE__ */ g(a, {
29
+ }], I = O?.name ? O.name.split(" ")[0] : "";
30
+ return /* @__PURE__ */ v(s, {
28
31
  hero: !0,
29
- title: /* @__PURE__ */ _(h, { children: [T("botlit.dashboard.title", "Welcome back"), P ? /* @__PURE__ */ _(h, { children: [", ", /* @__PURE__ */ g(p, { children: P })] }) : null] }),
30
- description: T("botlit.dashboard.description", "Here's an overview of your AI agents and bots"),
31
- actions: /* @__PURE__ */ _("div", {
32
+ title: /* @__PURE__ */ y(_, { children: [D("botlit.dashboard.title", "Welcome back"), I ? /* @__PURE__ */ y(_, { children: [", ", /* @__PURE__ */ v(h, { children: I })] }) : null] }),
33
+ description: D("botlit.dashboard.description", "Here's an overview of your AI agents and bots"),
34
+ actions: /* @__PURE__ */ y("div", {
32
35
  className: "flex gap-2",
33
- children: [/* @__PURE__ */ g(u, {
34
- variant: "outline",
35
- leftIcon: /* @__PURE__ */ g(C, { size: 16 }),
36
- onClick: () => D("bots/new"),
37
- children: T("botlit.dashboard.actions.newBot", "New Bot")
38
- }), /* @__PURE__ */ g(u, {
39
- leftIcon: /* @__PURE__ */ g(S, { size: 16 }),
40
- onClick: () => D("agents/new"),
41
- children: T("botlit.dashboard.actions.createAgent", "Create Agent")
36
+ children: [/* @__PURE__ */ v(o, {
37
+ permission: a.APP_CREATE,
38
+ children: /* @__PURE__ */ v(c, {
39
+ variant: "outline",
40
+ leftIcon: /* @__PURE__ */ v(T, { size: 16 }),
41
+ onClick: () => k("bots/new"),
42
+ children: D("botlit.dashboard.actions.newBot", "New Bot")
43
+ })
44
+ }), /* @__PURE__ */ v(o, {
45
+ permission: a.AGENT_CREATE,
46
+ children: /* @__PURE__ */ v(c, {
47
+ leftIcon: /* @__PURE__ */ v(w, { size: 16 }),
48
+ onClick: () => k("agents/new"),
49
+ children: D("botlit.dashboard.actions.createAgent", "Create Agent")
50
+ })
42
51
  })]
43
52
  }),
44
- children: /* @__PURE__ */ _("div", {
53
+ children: /* @__PURE__ */ y("div", {
45
54
  className: "space-y-6",
46
55
  children: [
47
- /* @__PURE__ */ g(m, {
48
- icon: /* @__PURE__ */ g(w, { size: 18 }),
49
- children: T("botlit.dashboard.purpose", "This is your home base — a quick pulse on every bot and agent in your workspace. Glance at the headline numbers, jump back into recent work, and use the quick actions below to start something new. If you are just getting started, create your first agent and connect it to a bot.")
56
+ /* @__PURE__ */ v(g, {
57
+ icon: /* @__PURE__ */ v(E, { size: 18 }),
58
+ children: D("botlit.dashboard.purpose", "This is your home base — a quick pulse on every bot and agent in your workspace. Glance at the headline numbers, jump back into recent work, and use the quick actions below to start something new. If you are just getting started, create your first agent and connect it to a bot.")
50
59
  }),
51
- /* @__PURE__ */ g("div", {
60
+ /* @__PURE__ */ v("div", {
52
61
  className: "grid grid-cols-1 md:grid-cols-2 gap-4",
53
- children: N.map((e) => /* @__PURE__ */ g(o, {
62
+ children: F.map((e) => /* @__PURE__ */ v(l, {
54
63
  treatment: e.hero ? "glass" : "metric",
55
64
  glow: e.hero,
56
- children: /* @__PURE__ */ g(s, {
65
+ children: /* @__PURE__ */ v(u, {
57
66
  className: "pt-6",
58
- children: /* @__PURE__ */ _("div", {
67
+ children: /* @__PURE__ */ y("div", {
59
68
  className: "flex items-center gap-4",
60
- children: [/* @__PURE__ */ g("div", {
69
+ children: [/* @__PURE__ */ v("div", {
61
70
  className: "p-3 rounded-lg bg-[var(--color-accent-soft)] text-text-primary [&>svg]:text-text-primary",
62
71
  children: e.icon
63
- }), /* @__PURE__ */ _("div", { children: [/* @__PURE__ */ g("p", {
72
+ }), /* @__PURE__ */ y("div", { children: [/* @__PURE__ */ v("p", {
64
73
  className: "text-2xl font-bold text-text-primary tabular-nums",
65
74
  children: e.value
66
- }), /* @__PURE__ */ g("p", {
75
+ }), /* @__PURE__ */ v("p", {
67
76
  className: "text-sm text-text-secondary",
68
77
  children: e.label
69
78
  })] })]
@@ -71,159 +80,165 @@ var T = () => {
71
80
  })
72
81
  }, e.label))
73
82
  }),
74
- /* @__PURE__ */ _("div", {
83
+ /* @__PURE__ */ y("div", {
75
84
  className: "grid grid-cols-1 lg:grid-cols-2 gap-6",
76
- children: [/* @__PURE__ */ _(o, {
85
+ children: [/* @__PURE__ */ y(l, {
77
86
  treatment: "insight",
78
- children: [/* @__PURE__ */ _(c, {
87
+ children: [/* @__PURE__ */ y(d, {
79
88
  className: "flex flex-row items-center justify-between",
80
- children: [/* @__PURE__ */ g(l, { children: T("botlit.dashboard.recentBots.title", "Recent Bots") }), /* @__PURE__ */ g(u, {
89
+ children: [/* @__PURE__ */ v(f, { children: D("botlit.dashboard.recentBots.title", "Recent Bots") }), /* @__PURE__ */ v(c, {
81
90
  variant: "ghost",
82
91
  size: "sm",
83
- rightIcon: /* @__PURE__ */ g(b, { size: 16 }),
84
- onClick: () => D("bots"),
85
- children: T("botlit.common.viewAll", "View All")
92
+ rightIcon: /* @__PURE__ */ v(S, { size: 16 }),
93
+ onClick: () => k("bots"),
94
+ children: D("botlit.common.viewAll", "View All")
86
95
  })]
87
- }), /* @__PURE__ */ g(s, { children: A ? /* @__PURE__ */ g("div", {
96
+ }), /* @__PURE__ */ v(u, { children: M ? /* @__PURE__ */ v("div", {
88
97
  className: "space-y-3",
89
98
  children: [
90
99
  1,
91
100
  2,
92
101
  3
93
- ].map((e) => /* @__PURE__ */ g("div", { className: "h-16 bg-bg-sunken rounded-lg motion-safe:animate-vc-shimmer" }, e))
94
- }) : k && k.length > 0 ? /* @__PURE__ */ g("div", {
102
+ ].map((e) => /* @__PURE__ */ v("div", { className: "h-16 bg-bg-sunken rounded-lg motion-safe:animate-vc-shimmer" }, e))
103
+ }) : j && j.length > 0 ? /* @__PURE__ */ v("div", {
95
104
  className: "space-y-3",
96
- children: k.slice(0, 4).map((e) => /* @__PURE__ */ _(v, {
97
- to: O(`bots/${e.id}`),
105
+ children: j.slice(0, 4).map((e) => /* @__PURE__ */ y(b, {
106
+ to: A(`bots/${e.id}`),
98
107
  className: "flex items-center justify-between p-3 rounded-lg border border-border-seam hover:border-border-strong hover:bg-accent transition-colors",
99
- children: [/* @__PURE__ */ _("div", {
108
+ children: [/* @__PURE__ */ y("div", {
100
109
  className: "flex items-center gap-3",
101
- children: [/* @__PURE__ */ g("span", {
110
+ children: [/* @__PURE__ */ v("span", {
102
111
  className: "text-2xl",
103
112
  children: e.icon || "🤖"
104
- }), /* @__PURE__ */ _("div", { children: [/* @__PURE__ */ g("p", {
113
+ }), /* @__PURE__ */ y("div", { children: [/* @__PURE__ */ v("p", {
105
114
  className: "font-medium text-text-primary",
106
115
  children: e.name
107
- }), /* @__PURE__ */ _("p", {
116
+ }), /* @__PURE__ */ y("p", {
108
117
  className: "text-xs text-text-secondary",
109
118
  children: [
110
119
  e.executionCount || 0,
111
120
  " ",
112
- T("botlit.common.executions", "executions")
121
+ D("botlit.common.executions", "executions")
113
122
  ]
114
123
  })] })]
115
- }), /* @__PURE__ */ g(d, { status: e.status })]
124
+ }), /* @__PURE__ */ v(p, { status: e.status })]
116
125
  }, e.id))
117
- }) : /* @__PURE__ */ _("div", {
126
+ }) : /* @__PURE__ */ y("div", {
118
127
  className: "text-center py-8 text-text-secondary",
119
128
  children: [
120
- /* @__PURE__ */ g(y, { className: "h-8 w-8 mx-auto mb-2 opacity-50" }),
121
- /* @__PURE__ */ g("p", { children: T("botlit.dashboard.recentBots.emptyTitle", "No bots yet") }),
122
- /* @__PURE__ */ g(u, {
123
- variant: "outline",
124
- size: "sm",
125
- className: "mt-3",
126
- onClick: () => D("bots/new"),
127
- children: T("botlit.dashboard.recentBots.emptyAction", "Create your first bot")
129
+ /* @__PURE__ */ v(x, { className: "h-8 w-8 mx-auto mb-2 opacity-50" }),
130
+ /* @__PURE__ */ v("p", { children: D("botlit.dashboard.recentBots.emptyTitle", "No bots yet") }),
131
+ /* @__PURE__ */ v(o, {
132
+ permission: a.APP_CREATE,
133
+ children: /* @__PURE__ */ v(c, {
134
+ variant: "outline",
135
+ size: "sm",
136
+ className: "mt-3",
137
+ onClick: () => k("bots/new"),
138
+ children: D("botlit.dashboard.recentBots.emptyAction", "Create your first bot")
139
+ })
128
140
  })
129
141
  ]
130
142
  }) })]
131
- }), /* @__PURE__ */ _(o, {
143
+ }), /* @__PURE__ */ y(l, {
132
144
  treatment: "insight",
133
- children: [/* @__PURE__ */ _(c, {
145
+ children: [/* @__PURE__ */ y(d, {
134
146
  className: "flex flex-row items-center justify-between",
135
- children: [/* @__PURE__ */ g(l, { children: T("botlit.dashboard.activeAgents.title", "Active Agents") }), /* @__PURE__ */ g(u, {
147
+ children: [/* @__PURE__ */ v(f, { children: D("botlit.dashboard.activeAgents.title", "Active Agents") }), /* @__PURE__ */ v(c, {
136
148
  variant: "ghost",
137
149
  size: "sm",
138
- rightIcon: /* @__PURE__ */ g(b, { size: 16 }),
139
- onClick: () => D("agents"),
140
- children: T("botlit.common.viewAll", "View All")
150
+ rightIcon: /* @__PURE__ */ v(S, { size: 16 }),
151
+ onClick: () => k("agents"),
152
+ children: D("botlit.common.viewAll", "View All")
141
153
  })]
142
- }), /* @__PURE__ */ g(s, { children: M ? /* @__PURE__ */ g("div", {
154
+ }), /* @__PURE__ */ v(u, { children: P ? /* @__PURE__ */ v("div", {
143
155
  className: "space-y-3",
144
156
  children: [
145
157
  1,
146
158
  2,
147
159
  3
148
- ].map((e) => /* @__PURE__ */ g("div", { className: "h-16 bg-bg-sunken rounded-lg motion-safe:animate-vc-shimmer" }, e))
149
- }) : j && j.length > 0 ? /* @__PURE__ */ g("div", {
160
+ ].map((e) => /* @__PURE__ */ v("div", { className: "h-16 bg-bg-sunken rounded-lg motion-safe:animate-vc-shimmer" }, e))
161
+ }) : N && N.length > 0 ? /* @__PURE__ */ v("div", {
150
162
  className: "space-y-3",
151
- children: j.filter((e) => e.status === "ACTIVE").slice(0, 4).map((e) => /* @__PURE__ */ g(v, {
152
- to: O(`agents/${e.id}`),
163
+ children: N.filter((e) => e.status === "ACTIVE").slice(0, 4).map((e) => /* @__PURE__ */ v(b, {
164
+ to: A(`agents/${e.id}`),
153
165
  className: "flex items-center justify-between p-3 rounded-lg border border-border-seam hover:border-border-strong hover:bg-accent transition-colors",
154
- children: /* @__PURE__ */ _("div", {
166
+ children: /* @__PURE__ */ y("div", {
155
167
  className: "flex items-center gap-3",
156
- children: [/* @__PURE__ */ _("span", {
168
+ children: [/* @__PURE__ */ y("span", {
157
169
  className: "relative text-2xl",
158
- children: ["🤖", /* @__PURE__ */ g("span", { className: "absolute -right-0.5 -top-0.5 size-2 rounded-full bg-status-success-text motion-safe:animate-vc-glow-pulse" })]
159
- }), /* @__PURE__ */ _("div", { children: [/* @__PURE__ */ g("p", {
170
+ children: ["🤖", /* @__PURE__ */ v("span", { className: "absolute -right-0.5 -top-0.5 size-2 rounded-full bg-status-success-text motion-safe:animate-vc-glow-pulse" })]
171
+ }), /* @__PURE__ */ y("div", { children: [/* @__PURE__ */ v("p", {
160
172
  className: "font-medium text-text-primary",
161
173
  children: e.name
162
- }), /* @__PURE__ */ _("p", {
174
+ }), /* @__PURE__ */ y("p", {
163
175
  className: "text-xs text-text-secondary",
164
176
  children: [
165
177
  i(e.executionCount ?? 0),
166
178
  " ",
167
- T("botlit.common.executions", "executions")
179
+ D("botlit.common.executions", "executions")
168
180
  ]
169
181
  })] })]
170
182
  })
171
183
  }, e.id))
172
- }) : /* @__PURE__ */ _("div", {
184
+ }) : /* @__PURE__ */ y("div", {
173
185
  className: "text-center py-8 text-text-secondary",
174
186
  children: [
175
- /* @__PURE__ */ g(S, { className: "h-8 w-8 mx-auto mb-2 opacity-50" }),
176
- /* @__PURE__ */ g("p", { children: T("botlit.dashboard.activeAgents.emptyTitle", "No active agents") }),
177
- /* @__PURE__ */ g(u, {
178
- variant: "outline",
179
- size: "sm",
180
- className: "mt-3",
181
- onClick: () => D("agents/new"),
182
- children: T("botlit.dashboard.activeAgents.emptyAction", "Create your first agent")
187
+ /* @__PURE__ */ v(w, { className: "h-8 w-8 mx-auto mb-2 opacity-50" }),
188
+ /* @__PURE__ */ v("p", { children: D("botlit.dashboard.activeAgents.emptyTitle", "No active agents") }),
189
+ /* @__PURE__ */ v(o, {
190
+ permission: a.AGENT_CREATE,
191
+ children: /* @__PURE__ */ v(c, {
192
+ variant: "outline",
193
+ size: "sm",
194
+ className: "mt-3",
195
+ onClick: () => k("agents/new"),
196
+ children: D("botlit.dashboard.activeAgents.emptyAction", "Create your first agent")
197
+ })
183
198
  })
184
199
  ]
185
200
  }) })]
186
201
  })]
187
202
  }),
188
- /* @__PURE__ */ _(f, {
203
+ /* @__PURE__ */ y(m, {
189
204
  treatment: "plain",
190
205
  className: "border-border-seam p-6",
191
- children: [/* @__PURE__ */ g("h2", {
206
+ children: [/* @__PURE__ */ v("h2", {
192
207
  className: "text-lg font-semibold tracking-tight text-text-primary",
193
- children: T("botlit.dashboard.quickActions.title", "Quick Actions")
194
- }), /* @__PURE__ */ _("div", {
208
+ children: D("botlit.dashboard.quickActions.title", "Quick Actions")
209
+ }), /* @__PURE__ */ y("div", {
195
210
  className: "mt-4 grid grid-cols-2 md:grid-cols-4 gap-4",
196
211
  children: [
197
- /* @__PURE__ */ _(v, {
198
- to: O("bots/new"),
212
+ /* @__PURE__ */ y(b, {
213
+ to: A("bots/new"),
199
214
  className: "flex flex-col items-center gap-2 p-4 rounded-card border border-border-seam bg-bg-surface hover:border-border-strong hover:shadow-elevation-2 transition-[box-shadow,border-color]",
200
- children: [/* @__PURE__ */ g(y, { className: "h-8 w-8 text-text-secondary" }), /* @__PURE__ */ g("span", {
215
+ children: [/* @__PURE__ */ v(x, { className: "h-8 w-8 text-text-secondary" }), /* @__PURE__ */ v("span", {
201
216
  className: "text-sm font-medium",
202
- children: T("botlit.dashboard.quickActions.createBot", "Create Bot")
217
+ children: D("botlit.dashboard.quickActions.createBot", "Create Bot")
203
218
  })]
204
219
  }),
205
- /* @__PURE__ */ _(v, {
206
- to: O("agents/new"),
220
+ /* @__PURE__ */ y(b, {
221
+ to: A("agents/new"),
207
222
  className: "flex flex-col items-center gap-2 p-4 rounded-card border border-border-seam bg-bg-surface hover:border-border-strong hover:shadow-elevation-2 transition-[box-shadow,border-color]",
208
- children: [/* @__PURE__ */ g(S, { className: "h-8 w-8 text-text-secondary" }), /* @__PURE__ */ g("span", {
223
+ children: [/* @__PURE__ */ v(w, { className: "h-8 w-8 text-text-secondary" }), /* @__PURE__ */ v("span", {
209
224
  className: "text-sm font-medium",
210
- children: T("botlit.dashboard.quickActions.buildAgent", "Build Agent")
225
+ children: D("botlit.dashboard.quickActions.buildAgent", "Build Agent")
211
226
  })]
212
227
  }),
213
- /* @__PURE__ */ _(v, {
214
- to: O("knowledge/new"),
228
+ /* @__PURE__ */ y(b, {
229
+ to: A("knowledge/new"),
215
230
  className: "flex flex-col items-center gap-2 p-4 rounded-card border border-border-seam bg-bg-surface hover:border-border-strong hover:shadow-elevation-2 transition-[box-shadow,border-color]",
216
- children: [/* @__PURE__ */ g(x, { className: "h-8 w-8 text-text-secondary" }), /* @__PURE__ */ g("span", {
231
+ children: [/* @__PURE__ */ v(C, { className: "h-8 w-8 text-text-secondary" }), /* @__PURE__ */ v("span", {
217
232
  className: "text-sm font-medium",
218
- children: T("botlit.dashboard.quickActions.addKnowledge", "Add Knowledge")
233
+ children: D("botlit.dashboard.quickActions.addKnowledge", "Add Knowledge")
219
234
  })]
220
235
  }),
221
- /* @__PURE__ */ _("a", {
236
+ /* @__PURE__ */ y("a", {
222
237
  href: "/conversations",
223
238
  className: "flex flex-col items-center gap-2 p-4 rounded-card border border-border-seam bg-bg-surface hover:border-border-strong hover:shadow-elevation-2 transition-[box-shadow,border-color]",
224
- children: [/* @__PURE__ */ g(w, { className: "h-8 w-8 text-text-secondary" }), /* @__PURE__ */ g("span", {
239
+ children: [/* @__PURE__ */ v(E, { className: "h-8 w-8 text-text-secondary" }), /* @__PURE__ */ v("span", {
225
240
  className: "text-sm font-medium",
226
- children: T("botlit.dashboard.quickActions.quickChat", "Quick Chat")
241
+ children: D("botlit.dashboard.quickActions.quickChat", "Quick Chat")
227
242
  })]
228
243
  })
229
244
  ]
@@ -234,6 +249,6 @@ var T = () => {
234
249
  });
235
250
  };
236
251
  //#endregion
237
- export { T as DashboardPage };
252
+ export { D as DashboardPage };
238
253
 
239
254
  //# sourceMappingURL=DashboardPage.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"DashboardPage.js","names":[],"sources":["../../../src/botlit/pages/DashboardPage.tsx"],"sourcesContent":["/**\n * Dashboard Page\n * @module botlit/pages\n */\n\nimport type { FC } from 'react';\nimport { Link } from 'react-router';\nimport { AppWindow, Bot, BookOpen, Zap, ArrowRight, Plus } from 'lucide-react';\nimport { useTr } from '../../shared/hooks/useTr';\nimport { GradientText, GlassCard, PagePurpose } from '@burdenoff/fe-libs/ui';\nimport { PageLayout } from '../components/PageLayout';\nimport { Card, CardHeader, CardTitle, CardContent } from '../components/Card';\nimport { Button } from '../components/Button';\nimport { StatusBadge } from '../components/Badge';\nimport { useBots } from '../hooks/useBots';\nimport { useAgents } from '../hooks/useAgents';\nimport { useBotlit } from '../providers/BotlitProvider';\nimport { formatNumber } from '../utils/formatters';\n\nexport const DashboardPage: FC = () => {\n const t = useTr();\n const { currentUser, navigateTo, getPath } = useBotlit();\n const { data: bots, loading: botsLoading } = useBots();\n const { data: agents, loading: agentsLoading } = useAgents();\n\n const stats = [\n {\n label: t('botlit.dashboard.stats.totalBots', 'Total Bots'),\n value: bots?.length || 0,\n icon: <AppWindow className=\"h-5 w-5\" />,\n hero: true,\n },\n {\n label: t('botlit.dashboard.stats.activeAgents', 'Active Agents'),\n value: agents?.filter((a: { status: string }) => a.status === 'ACTIVE').length || 0,\n icon: <Bot className=\"h-5 w-5\" />,\n hero: false,\n },\n ];\n\n const firstName = currentUser?.name ? currentUser.name.split(' ')[0] : '';\n\n return (\n <PageLayout\n hero\n title={\n <>\n {t('botlit.dashboard.title', 'Welcome back')}\n {firstName ? (\n <>\n , <GradientText>{firstName}</GradientText>\n </>\n ) : null}\n </>\n }\n description={t(\n 'botlit.dashboard.description',\n \"Here's an overview of your AI agents and bots\"\n )}\n actions={\n <div className=\"flex gap-2\">\n <Button\n variant=\"outline\"\n leftIcon={<Plus size={16} />}\n onClick={() => navigateTo('bots/new')}\n >\n {t('botlit.dashboard.actions.newBot', 'New Bot')}\n </Button>\n <Button leftIcon={<Bot size={16} />} onClick={() => navigateTo('agents/new')}>\n {t('botlit.dashboard.actions.createAgent', 'Create Agent')}\n </Button>\n </div>\n }\n >\n <div className=\"space-y-6\">\n <PagePurpose icon={<Zap size={18} />}>\n {t(\n 'botlit.dashboard.purpose',\n 'This is your home base — a quick pulse on every bot and agent in your workspace. Glance at the headline numbers, jump back into recent work, and use the quick actions below to start something new. If you are just getting started, create your first agent and connect it to a bot.'\n )}\n </PagePurpose>\n\n {/* Stats Grid */}\n <div className=\"grid grid-cols-1 md:grid-cols-2 gap-4\">\n {stats.map((stat) => (\n <Card key={stat.label} treatment={stat.hero ? 'glass' : 'metric'} glow={stat.hero}>\n <CardContent className=\"pt-6\">\n <div className=\"flex items-center gap-4\">\n <div className=\"p-3 rounded-lg bg-[var(--color-accent-soft)] text-text-primary [&>svg]:text-text-primary\">\n {stat.icon}\n </div>\n <div>\n <p className=\"text-2xl font-bold text-text-primary tabular-nums\">\n {stat.value}\n </p>\n <p className=\"text-sm text-text-secondary\">{stat.label}</p>\n </div>\n </div>\n </CardContent>\n </Card>\n ))}\n </div>\n\n {/* Main Content Grid */}\n <div className=\"grid grid-cols-1 lg:grid-cols-2 gap-6\">\n {/* Recent Bots */}\n <Card treatment=\"insight\">\n <CardHeader className=\"flex flex-row items-center justify-between\">\n <CardTitle>{t('botlit.dashboard.recentBots.title', 'Recent Bots')}</CardTitle>\n <Button\n variant=\"ghost\"\n size=\"sm\"\n rightIcon={<ArrowRight size={16} />}\n onClick={() => navigateTo('bots')}\n >\n {t('botlit.common.viewAll', 'View All')}\n </Button>\n </CardHeader>\n <CardContent>\n {botsLoading ? (\n <div className=\"space-y-3\">\n {[1, 2, 3].map((i) => (\n <div\n key={i}\n className=\"h-16 bg-bg-sunken rounded-lg motion-safe:animate-vc-shimmer\"\n />\n ))}\n </div>\n ) : bots && bots.length > 0 ? (\n <div className=\"space-y-3\">\n {bots.slice(0, 4).map((bot) => (\n <Link\n key={bot.id}\n to={getPath(`bots/${bot.id}`)}\n className=\"flex items-center justify-between p-3 rounded-lg border border-border-seam hover:border-border-strong hover:bg-accent transition-colors\"\n >\n <div className=\"flex items-center gap-3\">\n <span className=\"text-2xl\">{bot.icon || '🤖'}</span>\n <div>\n <p className=\"font-medium text-text-primary\">{bot.name}</p>\n <p className=\"text-xs text-text-secondary\">\n {bot.executionCount || 0} {t('botlit.common.executions', 'executions')}\n </p>\n </div>\n </div>\n <StatusBadge status={bot.status} />\n </Link>\n ))}\n </div>\n ) : (\n <div className=\"text-center py-8 text-text-secondary\">\n <AppWindow className=\"h-8 w-8 mx-auto mb-2 opacity-50\" />\n <p>{t('botlit.dashboard.recentBots.emptyTitle', 'No bots yet')}</p>\n <Button\n variant=\"outline\"\n size=\"sm\"\n className=\"mt-3\"\n onClick={() => navigateTo('bots/new')}\n >\n {t('botlit.dashboard.recentBots.emptyAction', 'Create your first bot')}\n </Button>\n </div>\n )}\n </CardContent>\n </Card>\n\n {/* Active Agents */}\n <Card treatment=\"insight\">\n <CardHeader className=\"flex flex-row items-center justify-between\">\n <CardTitle>{t('botlit.dashboard.activeAgents.title', 'Active Agents')}</CardTitle>\n <Button\n variant=\"ghost\"\n size=\"sm\"\n rightIcon={<ArrowRight size={16} />}\n onClick={() => navigateTo('agents')}\n >\n {t('botlit.common.viewAll', 'View All')}\n </Button>\n </CardHeader>\n <CardContent>\n {agentsLoading ? (\n <div className=\"space-y-3\">\n {[1, 2, 3].map((i) => (\n <div\n key={i}\n className=\"h-16 bg-bg-sunken rounded-lg motion-safe:animate-vc-shimmer\"\n />\n ))}\n </div>\n ) : agents && agents.length > 0 ? (\n <div className=\"space-y-3\">\n {agents\n .filter((a) => a.status === 'ACTIVE')\n .slice(0, 4)\n .map((agent) => (\n <Link\n key={agent.id}\n to={getPath(`agents/${agent.id}`)}\n className=\"flex items-center justify-between p-3 rounded-lg border border-border-seam hover:border-border-strong hover:bg-accent transition-colors\"\n >\n <div className=\"flex items-center gap-3\">\n <span className=\"relative text-2xl\">\n 🤖\n <span className=\"absolute -right-0.5 -top-0.5 size-2 rounded-full bg-status-success-text motion-safe:animate-vc-glow-pulse\" />\n </span>\n <div>\n <p className=\"font-medium text-text-primary\">{agent.name}</p>\n <p className=\"text-xs text-text-secondary\">\n {formatNumber(agent.executionCount ?? 0)}{' '}\n {t('botlit.common.executions', 'executions')}\n </p>\n </div>\n </div>\n </Link>\n ))}\n </div>\n ) : (\n <div className=\"text-center py-8 text-text-secondary\">\n <Bot className=\"h-8 w-8 mx-auto mb-2 opacity-50\" />\n <p>{t('botlit.dashboard.activeAgents.emptyTitle', 'No active agents')}</p>\n <Button\n variant=\"outline\"\n size=\"sm\"\n className=\"mt-3\"\n onClick={() => navigateTo('agents/new')}\n >\n {t('botlit.dashboard.activeAgents.emptyAction', 'Create your first agent')}\n </Button>\n </div>\n )}\n </CardContent>\n </Card>\n </div>\n\n {/* Quick Actions */}\n <GlassCard treatment=\"plain\" className=\"border-border-seam p-6\">\n <h2 className=\"text-lg font-semibold tracking-tight text-text-primary\">\n {t('botlit.dashboard.quickActions.title', 'Quick Actions')}\n </h2>\n <div className=\"mt-4 grid grid-cols-2 md:grid-cols-4 gap-4\">\n <Link\n to={getPath('bots/new')}\n className=\"flex flex-col items-center gap-2 p-4 rounded-card border border-border-seam bg-bg-surface hover:border-border-strong hover:shadow-elevation-2 transition-[box-shadow,border-color]\"\n >\n <AppWindow className=\"h-8 w-8 text-text-secondary\" />\n <span className=\"text-sm font-medium\">\n {t('botlit.dashboard.quickActions.createBot', 'Create Bot')}\n </span>\n </Link>\n <Link\n to={getPath('agents/new')}\n className=\"flex flex-col items-center gap-2 p-4 rounded-card border border-border-seam bg-bg-surface hover:border-border-strong hover:shadow-elevation-2 transition-[box-shadow,border-color]\"\n >\n <Bot className=\"h-8 w-8 text-text-secondary\" />\n <span className=\"text-sm font-medium\">\n {t('botlit.dashboard.quickActions.buildAgent', 'Build Agent')}\n </span>\n </Link>\n <Link\n to={getPath('knowledge/new')}\n className=\"flex flex-col items-center gap-2 p-4 rounded-card border border-border-seam bg-bg-surface hover:border-border-strong hover:shadow-elevation-2 transition-[box-shadow,border-color]\"\n >\n <BookOpen className=\"h-8 w-8 text-text-secondary\" />\n <span className=\"text-sm font-medium\">\n {t('botlit.dashboard.quickActions.addKnowledge', 'Add Knowledge')}\n </span>\n </Link>\n <a\n href=\"/conversations\"\n className=\"flex flex-col items-center gap-2 p-4 rounded-card border border-border-seam bg-bg-surface hover:border-border-strong hover:shadow-elevation-2 transition-[box-shadow,border-color]\"\n >\n <Zap className=\"h-8 w-8 text-text-secondary\" />\n <span className=\"text-sm font-medium\">\n {t('botlit.dashboard.quickActions.quickChat', 'Quick Chat')}\n </span>\n </a>\n </div>\n </GlassCard>\n </div>\n </PageLayout>\n );\n};\n"],"mappings":"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"}
1
+ {"version":3,"file":"DashboardPage.js","names":[],"sources":["../../../src/botlit/pages/DashboardPage.tsx"],"sourcesContent":["/**\n * Dashboard Page\n * @module botlit/pages\n */\n\nimport type { FC } from 'react';\nimport { Link } from 'react-router';\nimport { AppWindow, Bot, BookOpen, Zap, ArrowRight, Plus } from 'lucide-react';\nimport { useTr } from '../../shared/hooks/useTr';\nimport { GradientText, GlassCard, PagePurpose } from '@burdenoff/fe-libs/ui';\nimport { PageLayout } from '../components/PageLayout';\nimport { Card, CardHeader, CardTitle, CardContent } from '../components/Card';\nimport { Button } from '../components/Button';\nimport { StatusBadge } from '../components/Badge';\nimport { useBots } from '../hooks/useBots';\nimport { useAgents } from '../hooks/useAgents';\nimport { useBotlit } from '../providers/BotlitProvider';\nimport { formatNumber } from '../utils/formatters';\nimport { BOTMANOR_PERMISSIONS, BotmanorPermissionGate } from '../permissions';\n\nexport const DashboardPage: FC = () => {\n const t = useTr();\n const { currentUser, navigateTo, getPath } = useBotlit();\n const { data: bots, loading: botsLoading } = useBots();\n const { data: agents, loading: agentsLoading } = useAgents();\n\n const stats = [\n {\n label: t('botlit.dashboard.stats.totalBots', 'Total Bots'),\n value: bots?.length || 0,\n icon: <AppWindow className=\"h-5 w-5\" />,\n hero: true,\n },\n {\n label: t('botlit.dashboard.stats.activeAgents', 'Active Agents'),\n value: agents?.filter((a: { status: string }) => a.status === 'ACTIVE').length || 0,\n icon: <Bot className=\"h-5 w-5\" />,\n hero: false,\n },\n ];\n\n const firstName = currentUser?.name ? currentUser.name.split(' ')[0] : '';\n\n return (\n <PageLayout\n hero\n title={\n <>\n {t('botlit.dashboard.title', 'Welcome back')}\n {firstName ? (\n <>\n , <GradientText>{firstName}</GradientText>\n </>\n ) : null}\n </>\n }\n description={t(\n 'botlit.dashboard.description',\n \"Here's an overview of your AI agents and bots\"\n )}\n actions={\n <div className=\"flex gap-2\">\n <BotmanorPermissionGate permission={BOTMANOR_PERMISSIONS.APP_CREATE}>\n <Button\n variant=\"outline\"\n leftIcon={<Plus size={16} />}\n onClick={() => navigateTo('bots/new')}\n >\n {t('botlit.dashboard.actions.newBot', 'New Bot')}\n </Button>\n </BotmanorPermissionGate>\n <BotmanorPermissionGate permission={BOTMANOR_PERMISSIONS.AGENT_CREATE}>\n <Button leftIcon={<Bot size={16} />} onClick={() => navigateTo('agents/new')}>\n {t('botlit.dashboard.actions.createAgent', 'Create Agent')}\n </Button>\n </BotmanorPermissionGate>\n </div>\n }\n >\n <div className=\"space-y-6\">\n <PagePurpose icon={<Zap size={18} />}>\n {t(\n 'botlit.dashboard.purpose',\n 'This is your home base — a quick pulse on every bot and agent in your workspace. Glance at the headline numbers, jump back into recent work, and use the quick actions below to start something new. If you are just getting started, create your first agent and connect it to a bot.'\n )}\n </PagePurpose>\n\n {/* Stats Grid */}\n <div className=\"grid grid-cols-1 md:grid-cols-2 gap-4\">\n {stats.map((stat) => (\n <Card key={stat.label} treatment={stat.hero ? 'glass' : 'metric'} glow={stat.hero}>\n <CardContent className=\"pt-6\">\n <div className=\"flex items-center gap-4\">\n <div className=\"p-3 rounded-lg bg-[var(--color-accent-soft)] text-text-primary [&>svg]:text-text-primary\">\n {stat.icon}\n </div>\n <div>\n <p className=\"text-2xl font-bold text-text-primary tabular-nums\">\n {stat.value}\n </p>\n <p className=\"text-sm text-text-secondary\">{stat.label}</p>\n </div>\n </div>\n </CardContent>\n </Card>\n ))}\n </div>\n\n {/* Main Content Grid */}\n <div className=\"grid grid-cols-1 lg:grid-cols-2 gap-6\">\n {/* Recent Bots */}\n <Card treatment=\"insight\">\n <CardHeader className=\"flex flex-row items-center justify-between\">\n <CardTitle>{t('botlit.dashboard.recentBots.title', 'Recent Bots')}</CardTitle>\n <Button\n variant=\"ghost\"\n size=\"sm\"\n rightIcon={<ArrowRight size={16} />}\n onClick={() => navigateTo('bots')}\n >\n {t('botlit.common.viewAll', 'View All')}\n </Button>\n </CardHeader>\n <CardContent>\n {botsLoading ? (\n <div className=\"space-y-3\">\n {[1, 2, 3].map((i) => (\n <div\n key={i}\n className=\"h-16 bg-bg-sunken rounded-lg motion-safe:animate-vc-shimmer\"\n />\n ))}\n </div>\n ) : bots && bots.length > 0 ? (\n <div className=\"space-y-3\">\n {bots.slice(0, 4).map((bot) => (\n <Link\n key={bot.id}\n to={getPath(`bots/${bot.id}`)}\n className=\"flex items-center justify-between p-3 rounded-lg border border-border-seam hover:border-border-strong hover:bg-accent transition-colors\"\n >\n <div className=\"flex items-center gap-3\">\n <span className=\"text-2xl\">{bot.icon || '🤖'}</span>\n <div>\n <p className=\"font-medium text-text-primary\">{bot.name}</p>\n <p className=\"text-xs text-text-secondary\">\n {bot.executionCount || 0} {t('botlit.common.executions', 'executions')}\n </p>\n </div>\n </div>\n <StatusBadge status={bot.status} />\n </Link>\n ))}\n </div>\n ) : (\n <div className=\"text-center py-8 text-text-secondary\">\n <AppWindow className=\"h-8 w-8 mx-auto mb-2 opacity-50\" />\n <p>{t('botlit.dashboard.recentBots.emptyTitle', 'No bots yet')}</p>\n <BotmanorPermissionGate permission={BOTMANOR_PERMISSIONS.APP_CREATE}>\n <Button\n variant=\"outline\"\n size=\"sm\"\n className=\"mt-3\"\n onClick={() => navigateTo('bots/new')}\n >\n {t('botlit.dashboard.recentBots.emptyAction', 'Create your first bot')}\n </Button>\n </BotmanorPermissionGate>\n </div>\n )}\n </CardContent>\n </Card>\n\n {/* Active Agents */}\n <Card treatment=\"insight\">\n <CardHeader className=\"flex flex-row items-center justify-between\">\n <CardTitle>{t('botlit.dashboard.activeAgents.title', 'Active Agents')}</CardTitle>\n <Button\n variant=\"ghost\"\n size=\"sm\"\n rightIcon={<ArrowRight size={16} />}\n onClick={() => navigateTo('agents')}\n >\n {t('botlit.common.viewAll', 'View All')}\n </Button>\n </CardHeader>\n <CardContent>\n {agentsLoading ? (\n <div className=\"space-y-3\">\n {[1, 2, 3].map((i) => (\n <div\n key={i}\n className=\"h-16 bg-bg-sunken rounded-lg motion-safe:animate-vc-shimmer\"\n />\n ))}\n </div>\n ) : agents && agents.length > 0 ? (\n <div className=\"space-y-3\">\n {agents\n .filter((a) => a.status === 'ACTIVE')\n .slice(0, 4)\n .map((agent) => (\n <Link\n key={agent.id}\n to={getPath(`agents/${agent.id}`)}\n className=\"flex items-center justify-between p-3 rounded-lg border border-border-seam hover:border-border-strong hover:bg-accent transition-colors\"\n >\n <div className=\"flex items-center gap-3\">\n <span className=\"relative text-2xl\">\n 🤖\n <span className=\"absolute -right-0.5 -top-0.5 size-2 rounded-full bg-status-success-text motion-safe:animate-vc-glow-pulse\" />\n </span>\n <div>\n <p className=\"font-medium text-text-primary\">{agent.name}</p>\n <p className=\"text-xs text-text-secondary\">\n {formatNumber(agent.executionCount ?? 0)}{' '}\n {t('botlit.common.executions', 'executions')}\n </p>\n </div>\n </div>\n </Link>\n ))}\n </div>\n ) : (\n <div className=\"text-center py-8 text-text-secondary\">\n <Bot className=\"h-8 w-8 mx-auto mb-2 opacity-50\" />\n <p>{t('botlit.dashboard.activeAgents.emptyTitle', 'No active agents')}</p>\n <BotmanorPermissionGate permission={BOTMANOR_PERMISSIONS.AGENT_CREATE}>\n <Button\n variant=\"outline\"\n size=\"sm\"\n className=\"mt-3\"\n onClick={() => navigateTo('agents/new')}\n >\n {t('botlit.dashboard.activeAgents.emptyAction', 'Create your first agent')}\n </Button>\n </BotmanorPermissionGate>\n </div>\n )}\n </CardContent>\n </Card>\n </div>\n\n {/* Quick Actions */}\n <GlassCard treatment=\"plain\" className=\"border-border-seam p-6\">\n <h2 className=\"text-lg font-semibold tracking-tight text-text-primary\">\n {t('botlit.dashboard.quickActions.title', 'Quick Actions')}\n </h2>\n <div className=\"mt-4 grid grid-cols-2 md:grid-cols-4 gap-4\">\n <Link\n to={getPath('bots/new')}\n className=\"flex flex-col items-center gap-2 p-4 rounded-card border border-border-seam bg-bg-surface hover:border-border-strong hover:shadow-elevation-2 transition-[box-shadow,border-color]\"\n >\n <AppWindow className=\"h-8 w-8 text-text-secondary\" />\n <span className=\"text-sm font-medium\">\n {t('botlit.dashboard.quickActions.createBot', 'Create Bot')}\n </span>\n </Link>\n <Link\n to={getPath('agents/new')}\n className=\"flex flex-col items-center gap-2 p-4 rounded-card border border-border-seam bg-bg-surface hover:border-border-strong hover:shadow-elevation-2 transition-[box-shadow,border-color]\"\n >\n <Bot className=\"h-8 w-8 text-text-secondary\" />\n <span className=\"text-sm font-medium\">\n {t('botlit.dashboard.quickActions.buildAgent', 'Build Agent')}\n </span>\n </Link>\n <Link\n to={getPath('knowledge/new')}\n className=\"flex flex-col items-center gap-2 p-4 rounded-card border border-border-seam bg-bg-surface hover:border-border-strong hover:shadow-elevation-2 transition-[box-shadow,border-color]\"\n >\n <BookOpen className=\"h-8 w-8 text-text-secondary\" />\n <span className=\"text-sm font-medium\">\n {t('botlit.dashboard.quickActions.addKnowledge', 'Add Knowledge')}\n </span>\n </Link>\n <a\n href=\"/conversations\"\n className=\"flex flex-col items-center gap-2 p-4 rounded-card border border-border-seam bg-bg-surface hover:border-border-strong hover:shadow-elevation-2 transition-[box-shadow,border-color]\"\n >\n <Zap className=\"h-8 w-8 text-text-secondary\" />\n <span className=\"text-sm font-medium\">\n {t('botlit.dashboard.quickActions.quickChat', 'Quick Chat')}\n </span>\n </a>\n </div>\n </GlassCard>\n </div>\n </PageLayout>\n );\n};\n"],"mappings":"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"}