@burdenoff/microfe-vibecontrols 2026.625.2 → 2026.625.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/components/agents/AgentStatusBadge.js +11 -4
- package/dist/components/agents/AgentStatusBadge.js.map +1 -1
- package/dist/components/sessions/SessionStatusBadge.js +11 -8
- package/dist/components/sessions/SessionStatusBadge.js.map +1 -1
- package/dist/components/shared/EmptyState.js +14 -8
- package/dist/components/shared/EmptyState.js.map +1 -1
- package/dist/components/shared/PageHeader.js.map +1 -1
- package/dist/components/shared/PageSkeleton.js +4 -1
- package/dist/components/shared/PageSkeleton.js.map +1 -1
- package/dist/components/shared/SessionNotificationBanner.js +12 -5
- package/dist/components/shared/SessionNotificationBanner.js.map +1 -1
- package/dist/components/shared/StatusBadge.js +2 -2
- package/dist/components/shared/StatusBadge.js.map +1 -1
- package/dist/pages/AgentsPage.js +1 -0
- package/dist/pages/AgentsPage.js.map +1 -1
- package/dist/pages/OverviewPage.js +220 -240
- package/dist/pages/OverviewPage.js.map +1 -1
- package/dist/pages/SessionsPage.js +1 -0
- package/dist/pages/SessionsPage.js.map +1 -1
- package/dist/pages/TargetsPage.js +176 -175
- package/dist/pages/TargetsPage.js.map +1 -1
- package/dist/pages/VibesPage.js +1 -0
- package/dist/pages/VibesPage.js.map +1 -1
- package/package.json +2 -2
|
@@ -2,8 +2,8 @@ import { useListTargetsQuery as e } from "../generated/wspace-operations.js";
|
|
|
2
2
|
import { useVibeControls as t, useVibeNavigate as n } from "../providers/VibeControlsProvider.js";
|
|
3
3
|
import r from "../hooks/useCachedInitialData.js";
|
|
4
4
|
import { PageHeader as i } from "../components/shared/PageHeader.js";
|
|
5
|
-
import { LoadingState as
|
|
6
|
-
import { ErrorState as
|
|
5
|
+
import { LoadingState as a } from "../components/shared/LoadingState.js";
|
|
6
|
+
import { ErrorState as ee } from "../components/shared/ErrorState.js";
|
|
7
7
|
import { Card as o } from "../components/shared/Card.js";
|
|
8
8
|
import { StatCard as s } from "../components/shared/StatCard.js";
|
|
9
9
|
import { AgentSetupBanner as c } from "../components/shared/AgentSetupBanner.js";
|
|
@@ -13,32 +13,32 @@ import { AgentCard as u } from "../components/agents/AgentCard.js";
|
|
|
13
13
|
import "../components/agents/index.js";
|
|
14
14
|
import { SessionCard as te } from "../components/sessions/SessionCard.js";
|
|
15
15
|
import "../components/sessions/index.js";
|
|
16
|
-
import { VibeCard as
|
|
16
|
+
import { VibeCard as d } from "../components/vibes/VibeCard.js";
|
|
17
17
|
import "../components/vibes/index.js";
|
|
18
|
-
import { useCallback as
|
|
19
|
-
import { useI18n as
|
|
20
|
-
import { Activity as
|
|
21
|
-
import { usePermissions as
|
|
22
|
-
import { jsx as
|
|
23
|
-
import { EmphasisPanel as
|
|
24
|
-
import { MotionItem as
|
|
18
|
+
import { useCallback as f, useMemo as p } from "react";
|
|
19
|
+
import { useI18n as ne } from "@burdenoff/fe-libs/shared/providers/shell/I18nProvider";
|
|
20
|
+
import { Activity as m, Bot as h, FileText as re, GitBranch as ie, Play as g, RefreshCw as ae, Server as _, Terminal as v, Zap as y } from "lucide-react";
|
|
21
|
+
import { usePermissions as b } from "@burdenoff/fe-libs/shared/providers/shell";
|
|
22
|
+
import { Fragment as oe, jsx as x, jsxs as S } from "react/jsx-runtime";
|
|
23
|
+
import { AuroraBackground as se, EmphasisPanel as ce, GradientText as C, IllustratedEmptyState as w } from "@burdenoff/fe-libs/ui";
|
|
24
|
+
import { MotionItem as T, MotionList as E, MotionPage as D } from "@burdenoff/fe-libs/shared/motion";
|
|
25
25
|
//#region src/pages/OverviewPage.tsx
|
|
26
|
-
function
|
|
27
|
-
let
|
|
28
|
-
let r =
|
|
26
|
+
function O() {
|
|
27
|
+
let O = n(), { t: k } = ne(), { hasPermission: A, isLoading: j } = b(), M = (e, t, n) => {
|
|
28
|
+
let r = k(e, n), i = r === e ? t : r;
|
|
29
29
|
return n ? Object.entries(n).reduce((e, [t, n]) => e.replace(`{{${t}}}`, String(n)), i) : i;
|
|
30
|
-
}, { agents:
|
|
30
|
+
}, { agents: N, vibes: P, sessions: F, loading: I, error: L, totals: R, refetch: z } = r(), { workspaceId: B } = t(), V = e({
|
|
31
31
|
variables: {
|
|
32
|
-
workspaceId:
|
|
32
|
+
workspaceId: B || "",
|
|
33
33
|
limit: 50
|
|
34
34
|
},
|
|
35
|
-
skip: !
|
|
35
|
+
skip: !B,
|
|
36
36
|
fetchPolicy: "cache-and-network"
|
|
37
|
-
}),
|
|
38
|
-
|
|
39
|
-
}, [
|
|
40
|
-
|
|
41
|
-
let K =
|
|
37
|
+
}), H = V.refetch, U = f(() => {
|
|
38
|
+
z(), H();
|
|
39
|
+
}, [z, H]), W = V.data?.targets.items ?? [], G = V.data?.targets.total ?? 0, le = G > W.length, ue = W.filter((e) => e.status === "connected" || e.status === "active").length;
|
|
40
|
+
L && console.error("[overview] failed to load initial workspace data", L);
|
|
41
|
+
let K = p(() => N.map((e) => ({
|
|
42
42
|
id: e.id,
|
|
43
43
|
workspaceId: "",
|
|
44
44
|
name: e.name,
|
|
@@ -58,7 +58,7 @@ function E() {
|
|
|
58
58
|
metadata: {},
|
|
59
59
|
createdAt: e.createdAt || "",
|
|
60
60
|
updatedAt: ""
|
|
61
|
-
})), [
|
|
61
|
+
})), [N]), q = p(() => P.map((e) => ({
|
|
62
62
|
id: e.id,
|
|
63
63
|
workspaceId: "",
|
|
64
64
|
name: e.name,
|
|
@@ -77,7 +77,7 @@ function E() {
|
|
|
77
77
|
updatedAt: "",
|
|
78
78
|
archivedAt: null,
|
|
79
79
|
agents: e.agents ?? []
|
|
80
|
-
})), [
|
|
80
|
+
})), [P]), J = p(() => F.map((e) => ({
|
|
81
81
|
id: e.id,
|
|
82
82
|
workspaceId: "",
|
|
83
83
|
agentId: e.agentId ?? null,
|
|
@@ -97,29 +97,29 @@ function E() {
|
|
|
97
97
|
updatedAt: "",
|
|
98
98
|
agent: void 0,
|
|
99
99
|
vibe: void 0
|
|
100
|
-
})), [
|
|
100
|
+
})), [F]), Y = K.filter((e) => e.isActive), X = J.filter((e) => e.status === "RUNNING"), Z = q.filter((e) => e.status === "ACTIVE"), Q = {
|
|
101
101
|
agents: {
|
|
102
|
-
total:
|
|
102
|
+
total: R.agents,
|
|
103
103
|
active: Y.length,
|
|
104
104
|
offline: K.filter((e) => !e.isActive).length
|
|
105
105
|
},
|
|
106
106
|
vibes: {
|
|
107
|
-
total:
|
|
107
|
+
total: R.vibes,
|
|
108
108
|
active: Z.length,
|
|
109
109
|
archived: q.filter((e) => e.status === "ARCHIVED").length
|
|
110
110
|
},
|
|
111
111
|
sessions: {
|
|
112
|
-
total:
|
|
112
|
+
total: R.sessions,
|
|
113
113
|
running: X.length,
|
|
114
114
|
stopped: J.filter((e) => e.status === "STOPPED").length
|
|
115
115
|
}
|
|
116
|
-
}, $ =
|
|
116
|
+
}, $ = p(() => {
|
|
117
117
|
let e = [];
|
|
118
118
|
return J.slice(0, 3).forEach((t) => {
|
|
119
119
|
e.push({
|
|
120
120
|
id: `session-${t.id}`,
|
|
121
121
|
type: "session_started",
|
|
122
|
-
title: t.status === "RUNNING" ?
|
|
122
|
+
title: t.status === "RUNNING" ? M("overviewPage.activity.sessionRunning", "Session Running") : M("overviewPage.activity.sessionStatus", "Session {{status}}", { status: t.status.toLowerCase() }),
|
|
123
123
|
description: `${t.name}`,
|
|
124
124
|
timestamp: t.createdAt,
|
|
125
125
|
color: t.status === "RUNNING" ? "green" : "blue"
|
|
@@ -128,41 +128,41 @@ function E() {
|
|
|
128
128
|
e.push({
|
|
129
129
|
id: `agent-${t.id}`,
|
|
130
130
|
type: "agent_connected",
|
|
131
|
-
title:
|
|
132
|
-
description:
|
|
131
|
+
title: M("overviewPage.activity.agentOnline", "Agent Online"),
|
|
132
|
+
description: M("overviewPage.activity.agentOnlineDescription", "{{name}} is active", { name: t.name }),
|
|
133
133
|
timestamp: t.lastHeartbeat || t.updatedAt,
|
|
134
134
|
color: "blue"
|
|
135
135
|
});
|
|
136
136
|
}), e.sort((e, t) => new Date(t.timestamp).getTime() - new Date(e.timestamp).getTime()).slice(0, 6);
|
|
137
137
|
}, [J, Y]);
|
|
138
|
-
if (
|
|
138
|
+
if (j || I && N.length === 0 && P.length === 0 && F.length === 0) return /* @__PURE__ */ x("div", {
|
|
139
139
|
className: "flex items-center justify-center min-h-[400px]",
|
|
140
|
-
children: /* @__PURE__ */
|
|
140
|
+
children: /* @__PURE__ */ x(a, { message: M("overviewPage.loadingPermissions", "Loading permissions...") })
|
|
141
141
|
});
|
|
142
|
-
if (!
|
|
142
|
+
if (!A(l.VIBE_LIST)) return /* @__PURE__ */ x("div", {
|
|
143
143
|
className: "flex items-center justify-center min-h-[400px] px-4",
|
|
144
|
-
children: /* @__PURE__ */
|
|
144
|
+
children: /* @__PURE__ */ S("div", {
|
|
145
145
|
className: "text-center space-y-2 max-w-sm",
|
|
146
|
-
children: [/* @__PURE__ */
|
|
146
|
+
children: [/* @__PURE__ */ x("h2", {
|
|
147
147
|
className: "text-lg font-semibold tracking-tight text-text-primary",
|
|
148
|
-
children:
|
|
149
|
-
}), /* @__PURE__ */
|
|
148
|
+
children: M("common.accessDeniedTitle", "Access Denied")
|
|
149
|
+
}), /* @__PURE__ */ x("p", {
|
|
150
150
|
className: "text-sm text-text-secondary",
|
|
151
|
-
children:
|
|
151
|
+
children: M("overviewPage.accessDeniedDescription", "You don't have permission to access this page.")
|
|
152
152
|
})]
|
|
153
153
|
})
|
|
154
154
|
});
|
|
155
|
-
let
|
|
156
|
-
if (!e) return
|
|
155
|
+
let de = (e) => {
|
|
156
|
+
if (!e) return M("overviewPage.time.unknown", "Unknown");
|
|
157
157
|
let t = Date.now() - new Date(e).getTime();
|
|
158
|
-
return t < 6e4 ?
|
|
159
|
-
},
|
|
160
|
-
session_started:
|
|
161
|
-
agent_connected:
|
|
162
|
-
vibe_updated:
|
|
163
|
-
note_created:
|
|
164
|
-
module_installed:
|
|
165
|
-
}[e] ||
|
|
158
|
+
return t < 6e4 ? M("overviewPage.time.justNow", "Just now") : t < 36e5 ? M("overviewPage.time.minutesAgo", "{{count}}m ago", { count: Math.floor(t / 6e4) }) : t < 864e5 ? M("overviewPage.time.hoursAgo", "{{count}}h ago", { count: Math.floor(t / 36e5) }) : M("overviewPage.time.daysAgo", "{{count}}d ago", { count: Math.floor(t / 864e5) });
|
|
159
|
+
}, fe = (e) => /* @__PURE__ */ x({
|
|
160
|
+
session_started: g,
|
|
161
|
+
agent_connected: _,
|
|
162
|
+
vibe_updated: ie,
|
|
163
|
+
note_created: re,
|
|
164
|
+
module_installed: m
|
|
165
|
+
}[e] || m, { className: "size-4" }), pe = (e) => ({
|
|
166
166
|
green: "bg-status-success-bg-subtle text-status-success-text",
|
|
167
167
|
blue: "bg-[var(--color-accent-soft)] text-text-primary",
|
|
168
168
|
purple: "bg-accent-purple-subtle text-text-primary",
|
|
@@ -171,294 +171,274 @@ function E() {
|
|
|
171
171
|
yellow: "bg-status-warning-bg-subtle text-status-warning-text",
|
|
172
172
|
pink: "bg-accent-purple-subtle text-text-primary"
|
|
173
173
|
})[e] || "bg-bg-sunken text-text-secondary";
|
|
174
|
-
return /* @__PURE__ */
|
|
174
|
+
return /* @__PURE__ */ S(D, {
|
|
175
175
|
className: "space-y-6 px-6 lg:px-8 py-6 bg-bg-canvas min-h-screen",
|
|
176
176
|
children: [
|
|
177
|
-
/* @__PURE__ */ S(
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
177
|
+
/* @__PURE__ */ S("div", {
|
|
178
|
+
className: "relative overflow-hidden rounded-card -mx-2 px-2 pt-1",
|
|
179
|
+
children: [/* @__PURE__ */ x(se, { intensity: "subtle" }), /* @__PURE__ */ x(i, {
|
|
180
|
+
title: /* @__PURE__ */ S(oe, { children: [
|
|
181
|
+
/* @__PURE__ */ x(C, { children: M("overviewPage.titleNoun", "VibeControls") }),
|
|
182
|
+
" ",
|
|
183
|
+
M("overviewPage.titleSuffix", "Overview")
|
|
184
|
+
] }),
|
|
185
|
+
description: M("overviewPage.description", "Monitor and manage your development environments"),
|
|
186
|
+
actions: /* @__PURE__ */ S("button", {
|
|
187
|
+
type: "button",
|
|
188
|
+
onClick: U,
|
|
189
|
+
disabled: I,
|
|
190
|
+
className: "inline-flex items-center gap-2 px-3 py-2 text-sm bg-bg-surface border border-border-subtle rounded-button text-text-primary hover:bg-bg-sunken hover:border-border-strong transition-all duration-200 disabled:opacity-50 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-border-focus",
|
|
191
|
+
children: [/* @__PURE__ */ x(ae, {
|
|
192
|
+
className: `size-4 ${I ? "animate-spin" : ""}`,
|
|
193
|
+
"aria-hidden": "true"
|
|
194
|
+
}), M("overviewPage.refresh", "Refresh")]
|
|
195
|
+
})
|
|
196
|
+
})]
|
|
190
197
|
}),
|
|
191
|
-
|
|
192
|
-
title:
|
|
193
|
-
message:
|
|
194
|
-
onRetry:
|
|
198
|
+
L && !I && /* @__PURE__ */ x(ee, {
|
|
199
|
+
title: M("overviewPage.loadFailed.title", "Could not load workspace data"),
|
|
200
|
+
message: M("overviewPage.loadFailed.message", "We couldn't load your VibeControls overview. Please try again in a moment."),
|
|
201
|
+
onRetry: U
|
|
195
202
|
}),
|
|
196
|
-
!
|
|
203
|
+
!L && K.length === 0 && !I && /* @__PURE__ */ x(c, {
|
|
197
204
|
variant: "full",
|
|
198
205
|
dismissKey: "vibecontrols-overview-setup-banner"
|
|
199
206
|
}),
|
|
200
|
-
/* @__PURE__ */
|
|
207
|
+
/* @__PURE__ */ S(E, {
|
|
201
208
|
"data-tour": "overview-stats",
|
|
202
209
|
className: "grid grid-cols-2 sm:grid-cols-4 gap-4",
|
|
203
210
|
stagger: .06,
|
|
204
211
|
children: [
|
|
205
|
-
/* @__PURE__ */
|
|
212
|
+
/* @__PURE__ */ x(T, {
|
|
206
213
|
variant: "fadeScale",
|
|
207
|
-
children: /* @__PURE__ */
|
|
208
|
-
title:
|
|
209
|
-
value:
|
|
210
|
-
subtitle:
|
|
211
|
-
icon: /* @__PURE__ */
|
|
212
|
-
variant: !
|
|
213
|
-
onClick: () =>
|
|
214
|
+
children: /* @__PURE__ */ x(s, {
|
|
215
|
+
title: M("overviewPage.stats.targets", "Targets"),
|
|
216
|
+
value: I ? "-" : G,
|
|
217
|
+
subtitle: I || le ? "" : M("overviewPage.stats.connected", "{{count}} connected", { count: ue }),
|
|
218
|
+
icon: /* @__PURE__ */ x(_, { className: "size-6" }),
|
|
219
|
+
variant: !I && G > 0 ? "success" : "default",
|
|
220
|
+
onClick: () => O("/targets")
|
|
214
221
|
})
|
|
215
222
|
}),
|
|
216
|
-
/* @__PURE__ */
|
|
223
|
+
/* @__PURE__ */ x(T, {
|
|
217
224
|
variant: "fadeScale",
|
|
218
|
-
children: /* @__PURE__ */
|
|
219
|
-
title:
|
|
220
|
-
value:
|
|
221
|
-
subtitle:
|
|
222
|
-
icon: /* @__PURE__ */
|
|
223
|
-
variant: !
|
|
224
|
-
onClick: () =>
|
|
225
|
+
children: /* @__PURE__ */ x(s, {
|
|
226
|
+
title: M("overviewPage.stats.agents", "Agents"),
|
|
227
|
+
value: I ? "-" : Q.agents.total,
|
|
228
|
+
subtitle: I ? "" : M("overviewPage.stats.active", "{{count}} active", { count: Q.agents.active }),
|
|
229
|
+
icon: /* @__PURE__ */ x(h, { className: "size-6" }),
|
|
230
|
+
variant: !I && Q.agents.active > 0 ? "success" : "default",
|
|
231
|
+
onClick: () => O("/agents")
|
|
225
232
|
})
|
|
226
233
|
}),
|
|
227
|
-
/* @__PURE__ */
|
|
234
|
+
/* @__PURE__ */ x(T, {
|
|
228
235
|
variant: "fadeScale",
|
|
229
|
-
children: /* @__PURE__ */
|
|
230
|
-
title:
|
|
231
|
-
value:
|
|
232
|
-
subtitle:
|
|
233
|
-
icon: /* @__PURE__ */
|
|
234
|
-
onClick: () =>
|
|
236
|
+
children: /* @__PURE__ */ x(s, {
|
|
237
|
+
title: M("overviewPage.stats.vibes", "Vibes"),
|
|
238
|
+
value: I ? "-" : Q.vibes.total,
|
|
239
|
+
subtitle: I ? "" : M("overviewPage.stats.active", "{{count}} active", { count: Q.vibes.active }),
|
|
240
|
+
icon: /* @__PURE__ */ x(y, { className: "size-6" }),
|
|
241
|
+
onClick: () => O("/vibes")
|
|
235
242
|
})
|
|
236
243
|
}),
|
|
237
|
-
/* @__PURE__ */
|
|
244
|
+
/* @__PURE__ */ x(T, {
|
|
238
245
|
variant: "fadeScale",
|
|
239
|
-
children: /* @__PURE__ */
|
|
240
|
-
title:
|
|
241
|
-
value:
|
|
242
|
-
subtitle:
|
|
243
|
-
icon: /* @__PURE__ */
|
|
244
|
-
variant: !
|
|
245
|
-
onClick: () =>
|
|
246
|
+
children: /* @__PURE__ */ x(s, {
|
|
247
|
+
title: M("overviewPage.stats.sessions", "Sessions"),
|
|
248
|
+
value: I ? "-" : Q.sessions.total,
|
|
249
|
+
subtitle: I ? "" : M("overviewPage.stats.running", "{{count}} running", { count: Q.sessions.running }),
|
|
250
|
+
icon: /* @__PURE__ */ x(v, { className: "size-6" }),
|
|
251
|
+
variant: !I && Q.sessions.running > 0 ? "success" : "default",
|
|
252
|
+
onClick: () => O("/sessions")
|
|
246
253
|
})
|
|
247
254
|
})
|
|
248
255
|
]
|
|
249
256
|
}),
|
|
250
|
-
/* @__PURE__ */
|
|
257
|
+
/* @__PURE__ */ S(E, {
|
|
251
258
|
className: "grid grid-cols-1 gap-6 xl:grid-cols-3",
|
|
252
259
|
stagger: .08,
|
|
253
|
-
children: [/* @__PURE__ */
|
|
260
|
+
children: [/* @__PURE__ */ x(T, {
|
|
254
261
|
className: "xl:col-span-2 h-full",
|
|
255
|
-
children: /* @__PURE__ */
|
|
256
|
-
className: "flex h-full flex-col",
|
|
257
|
-
children: [/* @__PURE__ */
|
|
262
|
+
children: /* @__PURE__ */ S(ce, {
|
|
263
|
+
className: "flex h-full flex-col border-[color-mix(in_oklab,var(--color-action-primary-bg)_34%,transparent)] shadow-[var(--shadow-glow)]",
|
|
264
|
+
children: [/* @__PURE__ */ S("div", {
|
|
258
265
|
className: "flex items-center justify-between mb-5",
|
|
259
|
-
children: [/* @__PURE__ */
|
|
266
|
+
children: [/* @__PURE__ */ S("h2", {
|
|
260
267
|
className: "text-lg font-semibold tracking-tight text-text-primary flex items-center gap-2.5",
|
|
261
|
-
children: [/* @__PURE__ */
|
|
268
|
+
children: [/* @__PURE__ */ x("span", {
|
|
262
269
|
className: "inline-flex size-8 items-center justify-center rounded-lg bg-[var(--color-accent-soft)] text-text-primary",
|
|
263
|
-
children: /* @__PURE__ */
|
|
264
|
-
}),
|
|
265
|
-
}), /* @__PURE__ */
|
|
270
|
+
children: /* @__PURE__ */ x(h, { className: "size-5" })
|
|
271
|
+
}), M("overviewPage.sections.activeAgents", "Active Agents")]
|
|
272
|
+
}), /* @__PURE__ */ x("button", {
|
|
266
273
|
type: "button",
|
|
267
|
-
onClick: () =>
|
|
274
|
+
onClick: () => O("/agents"),
|
|
268
275
|
className: "text-sm font-medium text-text-link hover:underline",
|
|
269
|
-
"aria-label":
|
|
270
|
-
children:
|
|
276
|
+
"aria-label": M("overviewPage.sections.viewAllAgents", "View all agents"),
|
|
277
|
+
children: M("overviewPage.sections.viewAll", "View all")
|
|
271
278
|
})]
|
|
272
|
-
}), Y.length > 0 ? /* @__PURE__ */
|
|
279
|
+
}), Y.length > 0 ? /* @__PURE__ */ x(E, {
|
|
273
280
|
className: "grid grid-cols-1 sm:grid-cols-2 gap-4 flex-1 content-start",
|
|
274
281
|
stagger: .04,
|
|
275
|
-
children: Y.slice(0, 4).map((e) => /* @__PURE__ */
|
|
282
|
+
children: Y.slice(0, 4).map((e) => /* @__PURE__ */ x(T, { children: /* @__PURE__ */ x(u, {
|
|
276
283
|
agent: e,
|
|
277
|
-
onSelect: (e) =>
|
|
284
|
+
onSelect: (e) => O(`/agents/${e.id}`)
|
|
278
285
|
}) }, e.id))
|
|
279
|
-
}) : /* @__PURE__ */
|
|
280
|
-
className: "flex
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
children: "·"
|
|
306
|
-
}),
|
|
307
|
-
/* @__PURE__ */ S("button", {
|
|
308
|
-
type: "button",
|
|
309
|
-
onClick: () => E("/agents"),
|
|
310
|
-
className: "text-sm text-text-link hover:underline",
|
|
311
|
-
children: A("overviewPage.empty.addAgent", "Add agent")
|
|
312
|
-
})
|
|
313
|
-
]
|
|
314
|
-
})
|
|
315
|
-
]
|
|
286
|
+
}) : /* @__PURE__ */ x(w, {
|
|
287
|
+
className: "flex-1 py-8",
|
|
288
|
+
illustration: "empty-agents",
|
|
289
|
+
title: M("overviewPage.empty.noActiveAgents", "No active agents"),
|
|
290
|
+
description: M("overviewPage.empty.installCliHint", "Install the agent CLI to get started"),
|
|
291
|
+
action: /* @__PURE__ */ S("div", {
|
|
292
|
+
className: "flex flex-wrap items-center justify-center gap-2",
|
|
293
|
+
children: [
|
|
294
|
+
/* @__PURE__ */ x("button", {
|
|
295
|
+
type: "button",
|
|
296
|
+
onClick: () => O("/getting-started"),
|
|
297
|
+
className: "text-sm font-medium text-text-link hover:underline",
|
|
298
|
+
children: M("overviewPage.empty.setupGuide", "Setup guide")
|
|
299
|
+
}),
|
|
300
|
+
/* @__PURE__ */ x("span", {
|
|
301
|
+
className: "text-text-muted",
|
|
302
|
+
children: "·"
|
|
303
|
+
}),
|
|
304
|
+
/* @__PURE__ */ x("button", {
|
|
305
|
+
type: "button",
|
|
306
|
+
onClick: () => O("/agents"),
|
|
307
|
+
className: "text-sm text-text-link hover:underline",
|
|
308
|
+
children: M("overviewPage.empty.addAgent", "Add agent")
|
|
309
|
+
})
|
|
310
|
+
]
|
|
311
|
+
})
|
|
316
312
|
})]
|
|
317
313
|
})
|
|
318
|
-
}), /* @__PURE__ */
|
|
314
|
+
}), /* @__PURE__ */ x(T, {
|
|
319
315
|
className: "h-full",
|
|
320
|
-
children: /* @__PURE__ */
|
|
316
|
+
children: /* @__PURE__ */ S(o, {
|
|
321
317
|
className: "flex h-full flex-col",
|
|
322
|
-
children: [/* @__PURE__ */
|
|
318
|
+
children: [/* @__PURE__ */ S("div", {
|
|
323
319
|
className: "flex items-center justify-between mb-5",
|
|
324
|
-
children: [/* @__PURE__ */
|
|
320
|
+
children: [/* @__PURE__ */ S("h2", {
|
|
325
321
|
className: "text-lg font-semibold tracking-tight text-text-primary flex items-center gap-2.5",
|
|
326
|
-
children: [/* @__PURE__ */
|
|
322
|
+
children: [/* @__PURE__ */ x("span", {
|
|
327
323
|
className: "inline-flex size-8 items-center justify-center rounded-lg bg-[var(--color-accent-soft)] text-text-primary",
|
|
328
|
-
children: /* @__PURE__ */
|
|
329
|
-
}),
|
|
330
|
-
}), /* @__PURE__ */
|
|
324
|
+
children: /* @__PURE__ */ x(m, { className: "size-5" })
|
|
325
|
+
}), M("overviewPage.sections.recentActivity", "Recent Activity")]
|
|
326
|
+
}), /* @__PURE__ */ x("button", {
|
|
331
327
|
type: "button",
|
|
332
|
-
onClick: () =>
|
|
328
|
+
onClick: () => O("/audit"),
|
|
333
329
|
className: "text-sm font-medium text-text-link hover:underline",
|
|
334
|
-
"aria-label":
|
|
330
|
+
"aria-label": M("overviewPage.sections.viewAllActivity", "View all activity"),
|
|
335
331
|
children: "View all"
|
|
336
332
|
})]
|
|
337
|
-
}), /* @__PURE__ */
|
|
333
|
+
}), /* @__PURE__ */ x(E, {
|
|
338
334
|
className: "space-y-3 flex-1",
|
|
339
335
|
stagger: .04,
|
|
340
|
-
children: $.length > 0 ? $.map((e) => /* @__PURE__ */
|
|
336
|
+
children: $.length > 0 ? $.map((e) => /* @__PURE__ */ x(T, {
|
|
341
337
|
variant: "fadeRight",
|
|
342
|
-
children: /* @__PURE__ */
|
|
338
|
+
children: /* @__PURE__ */ S("div", {
|
|
343
339
|
className: "flex items-start gap-3",
|
|
344
340
|
children: [
|
|
345
|
-
/* @__PURE__ */
|
|
346
|
-
className: `flex-shrink-0 size-8 rounded-full flex items-center justify-center ${
|
|
347
|
-
children:
|
|
341
|
+
/* @__PURE__ */ x("div", {
|
|
342
|
+
className: `flex-shrink-0 size-8 rounded-full flex items-center justify-center ${pe(e.color)}`,
|
|
343
|
+
children: fe(e.type)
|
|
348
344
|
}),
|
|
349
|
-
/* @__PURE__ */
|
|
345
|
+
/* @__PURE__ */ S("div", {
|
|
350
346
|
className: "flex-1 min-w-0",
|
|
351
|
-
children: [/* @__PURE__ */
|
|
347
|
+
children: [/* @__PURE__ */ x("p", {
|
|
352
348
|
className: "text-sm font-medium text-text-primary truncate",
|
|
353
349
|
children: e.title
|
|
354
|
-
}), /* @__PURE__ */
|
|
350
|
+
}), /* @__PURE__ */ x("p", {
|
|
355
351
|
className: "text-xs text-text-secondary truncate",
|
|
356
352
|
children: e.description
|
|
357
353
|
})]
|
|
358
354
|
}),
|
|
359
|
-
/* @__PURE__ */
|
|
355
|
+
/* @__PURE__ */ x("span", {
|
|
360
356
|
className: "text-xs text-text-secondary flex-shrink-0",
|
|
361
|
-
children:
|
|
357
|
+
children: de(e.timestamp)
|
|
362
358
|
})
|
|
363
359
|
]
|
|
364
360
|
})
|
|
365
|
-
}, e.id)) : /* @__PURE__ */
|
|
366
|
-
className: "
|
|
367
|
-
|
|
361
|
+
}, e.id)) : /* @__PURE__ */ x(w, {
|
|
362
|
+
className: "h-full py-6",
|
|
363
|
+
illustration: "empty-notifications",
|
|
364
|
+
title: M("overviewPage.empty.noRecentActivity", "No recent activity"),
|
|
365
|
+
action: /* @__PURE__ */ x("button", {
|
|
368
366
|
type: "button",
|
|
369
|
-
onClick: () =>
|
|
370
|
-
className: "
|
|
371
|
-
children:
|
|
372
|
-
})
|
|
367
|
+
onClick: () => O("/audit"),
|
|
368
|
+
className: "text-sm text-text-link hover:underline",
|
|
369
|
+
children: M("overviewPage.empty.viewAuditLog", "View audit log")
|
|
370
|
+
})
|
|
373
371
|
})
|
|
374
372
|
})]
|
|
375
373
|
})
|
|
376
374
|
})]
|
|
377
375
|
}),
|
|
378
|
-
/* @__PURE__ */
|
|
376
|
+
/* @__PURE__ */ x(T, { children: /* @__PURE__ */ S(o, { children: [/* @__PURE__ */ S("div", {
|
|
379
377
|
className: "flex items-center justify-between mb-5",
|
|
380
|
-
children: [/* @__PURE__ */
|
|
378
|
+
children: [/* @__PURE__ */ S("h2", {
|
|
381
379
|
className: "text-lg font-semibold tracking-tight text-text-primary flex items-center gap-2.5",
|
|
382
|
-
children: [/* @__PURE__ */
|
|
380
|
+
children: [/* @__PURE__ */ x("span", {
|
|
383
381
|
className: "inline-flex size-8 items-center justify-center rounded-lg bg-[var(--color-accent-soft)] text-text-primary",
|
|
384
|
-
children: /* @__PURE__ */
|
|
385
|
-
}),
|
|
386
|
-
}), /* @__PURE__ */
|
|
382
|
+
children: /* @__PURE__ */ x(v, { className: "size-5" })
|
|
383
|
+
}), M("overviewPage.sections.runningSessions", "Running Sessions")]
|
|
384
|
+
}), /* @__PURE__ */ x("button", {
|
|
387
385
|
type: "button",
|
|
388
|
-
onClick: () =>
|
|
386
|
+
onClick: () => O("/sessions"),
|
|
389
387
|
className: "text-sm font-medium text-text-link hover:underline",
|
|
390
|
-
children:
|
|
388
|
+
children: M("overviewPage.sections.viewAll", "View all")
|
|
391
389
|
})]
|
|
392
|
-
}), X.length > 0 ? /* @__PURE__ */
|
|
390
|
+
}), X.length > 0 ? /* @__PURE__ */ x(E, {
|
|
393
391
|
className: "grid grid-cols-1 sm:grid-cols-2 xl:grid-cols-3 gap-4",
|
|
394
392
|
stagger: .04,
|
|
395
|
-
children: X.slice(0, 6).map((e) => /* @__PURE__ */
|
|
393
|
+
children: X.slice(0, 6).map((e) => /* @__PURE__ */ x(T, { children: /* @__PURE__ */ x(te, {
|
|
396
394
|
session: e,
|
|
397
|
-
onOpen: (e) =>
|
|
395
|
+
onOpen: (e) => O(`/sessions/${e.id}`)
|
|
398
396
|
}) }, e.id))
|
|
399
|
-
}) : /* @__PURE__ */
|
|
400
|
-
|
|
401
|
-
|
|
402
|
-
|
|
403
|
-
|
|
404
|
-
|
|
405
|
-
|
|
406
|
-
|
|
407
|
-
|
|
408
|
-
children: A("overviewPage.empty.noRunningSessions", "No running sessions")
|
|
409
|
-
}),
|
|
410
|
-
/* @__PURE__ */ S("button", {
|
|
411
|
-
type: "button",
|
|
412
|
-
onClick: () => E("/sessions"),
|
|
413
|
-
className: "mt-3 text-sm font-medium text-text-link hover:underline",
|
|
414
|
-
children: A("overviewPage.empty.startSession", "Start a session")
|
|
415
|
-
})
|
|
416
|
-
]
|
|
397
|
+
}) : /* @__PURE__ */ x(w, {
|
|
398
|
+
illustration: "empty-sessions",
|
|
399
|
+
title: M("overviewPage.empty.noRunningSessions", "No running sessions"),
|
|
400
|
+
action: /* @__PURE__ */ x("button", {
|
|
401
|
+
type: "button",
|
|
402
|
+
onClick: () => O("/sessions"),
|
|
403
|
+
className: "text-sm font-medium text-text-link hover:underline",
|
|
404
|
+
children: M("overviewPage.empty.startSession", "Start a session")
|
|
405
|
+
})
|
|
417
406
|
})] }) }),
|
|
418
|
-
/* @__PURE__ */
|
|
407
|
+
/* @__PURE__ */ x(T, { children: /* @__PURE__ */ S(o, { children: [/* @__PURE__ */ S("div", {
|
|
419
408
|
className: "flex items-center justify-between mb-5",
|
|
420
|
-
children: [/* @__PURE__ */
|
|
409
|
+
children: [/* @__PURE__ */ S("h2", {
|
|
421
410
|
className: "text-lg font-semibold tracking-tight text-text-primary flex items-center gap-2.5",
|
|
422
|
-
children: [/* @__PURE__ */
|
|
411
|
+
children: [/* @__PURE__ */ x("span", {
|
|
423
412
|
className: "inline-flex size-8 items-center justify-center rounded-lg bg-[var(--color-accent-soft)] text-text-primary",
|
|
424
|
-
children: /* @__PURE__ */
|
|
425
|
-
}),
|
|
426
|
-
}), /* @__PURE__ */
|
|
413
|
+
children: /* @__PURE__ */ x(y, { className: "size-5" })
|
|
414
|
+
}), M("overviewPage.sections.activeVibes", "Active Vibes")]
|
|
415
|
+
}), /* @__PURE__ */ x("button", {
|
|
427
416
|
type: "button",
|
|
428
|
-
onClick: () =>
|
|
417
|
+
onClick: () => O("/vibes"),
|
|
429
418
|
className: "text-sm font-medium text-text-link hover:underline",
|
|
430
|
-
children:
|
|
419
|
+
children: M("overviewPage.sections.viewAll", "View all")
|
|
431
420
|
})]
|
|
432
|
-
}), Z.length > 0 ? /* @__PURE__ */
|
|
421
|
+
}), Z.length > 0 ? /* @__PURE__ */ x(E, {
|
|
433
422
|
className: "grid grid-cols-1 sm:grid-cols-2 xl:grid-cols-3 gap-4",
|
|
434
423
|
stagger: .04,
|
|
435
|
-
children: Z.slice(0, 6).map((e) => /* @__PURE__ */
|
|
424
|
+
children: Z.slice(0, 6).map((e) => /* @__PURE__ */ x(T, { children: /* @__PURE__ */ x(d, {
|
|
436
425
|
vibe: e,
|
|
437
|
-
onOpen: (e) =>
|
|
426
|
+
onOpen: (e) => O(`/vibes/${e.id}`)
|
|
438
427
|
}) }, e.id))
|
|
439
|
-
}) : /* @__PURE__ */
|
|
440
|
-
|
|
441
|
-
|
|
442
|
-
|
|
443
|
-
|
|
444
|
-
|
|
445
|
-
|
|
446
|
-
|
|
447
|
-
|
|
448
|
-
children: A("overviewPage.empty.noActiveVibes", "No active vibes")
|
|
449
|
-
}),
|
|
450
|
-
/* @__PURE__ */ S("button", {
|
|
451
|
-
type: "button",
|
|
452
|
-
onClick: () => E("/vibes"),
|
|
453
|
-
className: "mt-3 text-sm font-medium text-text-link hover:underline",
|
|
454
|
-
children: A("overviewPage.empty.addVibe", "Add a vibe")
|
|
455
|
-
})
|
|
456
|
-
]
|
|
428
|
+
}) : /* @__PURE__ */ x(w, {
|
|
429
|
+
illustration: "empty-vibes",
|
|
430
|
+
title: M("overviewPage.empty.noActiveVibes", "No active vibes"),
|
|
431
|
+
action: /* @__PURE__ */ x("button", {
|
|
432
|
+
type: "button",
|
|
433
|
+
onClick: () => O("/vibes"),
|
|
434
|
+
className: "text-sm font-medium text-text-link hover:underline",
|
|
435
|
+
children: M("overviewPage.empty.addVibe", "Add a vibe")
|
|
436
|
+
})
|
|
457
437
|
})] }) })
|
|
458
438
|
]
|
|
459
439
|
});
|
|
460
440
|
}
|
|
461
441
|
//#endregion
|
|
462
|
-
export {
|
|
442
|
+
export { O as OverviewPage };
|
|
463
443
|
|
|
464
444
|
//# sourceMappingURL=OverviewPage.js.map
|