@burdenoff/microfe-vibecontrols 2026.1023.7 → 2026.1027.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/generated/wspace-types.js +4 -2
- package/dist/pages/OverviewPage.js +165 -160
- package/dist/pages/VibesPage.js +365 -351
- package/package.json +1 -1
|
@@ -42,9 +42,11 @@ var e = /* @__PURE__ */ function(e) {
|
|
|
42
42
|
}({}), b = /* @__PURE__ */ function(e) {
|
|
43
43
|
return e.Action = "ACTION", e.AiContext = "AI_CONTEXT", e.AiPrompt = "AI_PROMPT", e.InstructionFile = "INSTRUCTION_FILE", e.Sandbox = "SANDBOX", e.ScheduledJob = "SCHEDULED_JOB", e.Tunnel = "TUNNEL", e.VibeDeck = "VIBE_DECK", e;
|
|
44
44
|
}({}), x = /* @__PURE__ */ function(e) {
|
|
45
|
-
return e.
|
|
45
|
+
return e.Custom = "CUSTOM", e.Monorepo = "MONOREPO", e.Package = "PACKAGE", e.Project = "PROJECT", e.Repository = "REPOSITORY", e.Workspace = "WORKSPACE", e;
|
|
46
46
|
}({}), S = /* @__PURE__ */ function(e) {
|
|
47
|
+
return e.Private = "PRIVATE", e.SharedWithVibe = "SHARED_WITH_VIBE", e;
|
|
48
|
+
}({}), C = /* @__PURE__ */ function(e) {
|
|
47
49
|
return e.Custom = "CUSTOM", e.Script = "SCRIPT", e.Ssh = "SSH", e.Terminal = "TERMINAL", e.Tmux = "TMUX", e.Wezterm = "WEZTERM", e.Zellij = "ZELLIJ", e;
|
|
48
50
|
}({});
|
|
49
51
|
//#endregion
|
|
50
|
-
export { e as AgentCapabilityScope, t as AnalyticsEntityType, n as CollaboratorRole, r as ComponentType, i as DeploymentEnvironment, a as InstructionFilename, o as InstructionScope, s as MeshSessionKind, c as NoteVisibility, l as ScorecardTier, u as SessionSharePermission, d as TunnelDomainType, f as TunnelDomainVerificationStatus, p as TunnelEnvironment, m as TunnelProtocol, h as TunnelProviderKey, g as TunnelSessionStatus, _ as TunnelStatus, v as VibeAuditExportFormat, y as VibeDeckSharePermission, b as VibeEntityType, x as
|
|
52
|
+
export { e as AgentCapabilityScope, t as AnalyticsEntityType, n as CollaboratorRole, r as ComponentType, i as DeploymentEnvironment, a as InstructionFilename, o as InstructionScope, s as MeshSessionKind, c as NoteVisibility, l as ScorecardTier, u as SessionSharePermission, d as TunnelDomainType, f as TunnelDomainVerificationStatus, p as TunnelEnvironment, m as TunnelProtocol, h as TunnelProviderKey, g as TunnelSessionStatus, _ as TunnelStatus, v as VibeAuditExportFormat, y as VibeDeckSharePermission, b as VibeEntityType, x as VibeType, S as VibeVisibility, C as VibecontrolsSessionType };
|
|
@@ -9,28 +9,37 @@ import { StatCard as o } from "../components/shared/StatCard.js";
|
|
|
9
9
|
import { AgentSetupBanner as ne } from "../components/shared/AgentSetupBanner.js";
|
|
10
10
|
import "../components/shared/index.js";
|
|
11
11
|
import { VIBE_PERMISSIONS as s } from "../constants/permissions.js";
|
|
12
|
-
import { AgentCard as
|
|
12
|
+
import { AgentCard as re } from "../components/agents/AgentCard.js";
|
|
13
13
|
import "../components/agents/index.js";
|
|
14
|
-
import { SessionCard as
|
|
14
|
+
import { SessionCard as ie } from "../components/sessions/SessionCard.js";
|
|
15
15
|
import "../components/sessions/index.js";
|
|
16
|
-
import { VibeCard as
|
|
16
|
+
import { VibeCard as ae } from "../components/vibes/VibeCard.js";
|
|
17
17
|
import "../components/vibes/index.js";
|
|
18
|
-
import { FleetActivityChart as
|
|
19
|
-
import { FleetHealthCard as
|
|
20
|
-
import { QuickActionsCard as
|
|
21
|
-
import { useAiRunsToday as
|
|
18
|
+
import { FleetActivityChart as oe } from "../components/overview/FleetActivityChart.js";
|
|
19
|
+
import { FleetHealthCard as se } from "../components/overview/FleetHealthCard.js";
|
|
20
|
+
import { QuickActionsCard as ce } from "../components/overview/QuickActionsCard.js";
|
|
21
|
+
import { useAiRunsToday as le, useFleetActivity as ue } from "../components/overview/useFleetAnalytics.js";
|
|
22
22
|
import "../components/overview/index.js";
|
|
23
|
-
import { useCallback as
|
|
24
|
-
import { useI18n as
|
|
25
|
-
import { Activity as
|
|
26
|
-
import { usePermissions as
|
|
27
|
-
import { Fragment as
|
|
28
|
-
import { AuroraBackground as
|
|
23
|
+
import { useCallback as de, useMemo as c, useState as fe } from "react";
|
|
24
|
+
import { useI18n as pe } from "@burdenoff/fe-libs/shared/providers/shell/I18nProvider";
|
|
25
|
+
import { Activity as l, Bot as u, FileText as me, GitBranch as he, Play as ge, RefreshCw as _e, Server as d, Sparkles as ve, Terminal as f, Zap as p } from "lucide-react";
|
|
26
|
+
import { usePermissions as ye } from "@burdenoff/fe-libs/shared/providers/shell";
|
|
27
|
+
import { Fragment as m, jsx as h, jsxs as g } from "react/jsx-runtime";
|
|
28
|
+
import { AuroraBackground as be, EmphasisPanel as xe, GradientText as _, IllustratedEmptyState as v, NextSteps as Se, PagePurpose as Ce } from "@burdenoff/fe-libs/ui";
|
|
29
29
|
import { MotionItem as y, MotionList as b, MotionPage as we } from "@burdenoff/fe-libs/shared/motion";
|
|
30
30
|
//#region src/pages/OverviewPage.tsx
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
31
|
+
var x = "VibeControls";
|
|
32
|
+
function Te({ title: e }) {
|
|
33
|
+
let t = e.indexOf(x);
|
|
34
|
+
return t < 0 ? /* @__PURE__ */ h(m, { children: e }) : /* @__PURE__ */ g(m, { children: [
|
|
35
|
+
e.slice(0, t),
|
|
36
|
+
/* @__PURE__ */ h(_, { children: x }),
|
|
37
|
+
e.slice(t + 12)
|
|
38
|
+
] });
|
|
39
|
+
}
|
|
40
|
+
function S() {
|
|
41
|
+
let m = n(), { t: _ } = pe(), { hasPermission: x, isLoading: S } = ye(), C = (e, t, n) => {
|
|
42
|
+
let r = _(e, n), i = r === e ? t : r;
|
|
34
43
|
return n ? Object.entries(n).reduce((e, [t, n]) => e.replace(`{{${t}}}`, String(n)), i) : i;
|
|
35
44
|
}, { agents: w, vibes: T, sessions: E, loading: D, error: O, totals: k, refetch: A } = r(), { workspaceId: j } = t(), M = e({
|
|
36
45
|
variables: {
|
|
@@ -39,16 +48,16 @@ function x() {
|
|
|
39
48
|
},
|
|
40
49
|
skip: !j,
|
|
41
50
|
fetchPolicy: "cache-and-network"
|
|
42
|
-
}), N = M.refetch, P =
|
|
51
|
+
}), N = M.refetch, P = x(s.ANALYTICS_READ), F = P && !!j, [I, Ee] = fe("LAST_24H"), L = ue(I, F), R = le(F), z = L.refetch, B = R.refetch, V = de(() => {
|
|
43
52
|
A(), N(), z(), B();
|
|
44
53
|
}, [
|
|
45
54
|
A,
|
|
46
55
|
N,
|
|
47
56
|
z,
|
|
48
57
|
B
|
|
49
|
-
]), H = M.data?.targets.items ?? [], U = M.data?.targets.total ?? 0,
|
|
58
|
+
]), H = M.data?.targets.items ?? [], U = M.data?.targets.total ?? 0, De = U > H.length, Oe = H.filter((e) => e.status === "connected" || e.status === "active").length;
|
|
50
59
|
O && console.error("[overview] failed to load initial workspace data", O);
|
|
51
|
-
let W =
|
|
60
|
+
let W = c(() => w.map((e) => ({
|
|
52
61
|
id: e.id,
|
|
53
62
|
workspaceId: "",
|
|
54
63
|
name: e.name,
|
|
@@ -70,7 +79,7 @@ function x() {
|
|
|
70
79
|
visibility: e.visibility,
|
|
71
80
|
createdAt: e.createdAt || "",
|
|
72
81
|
updatedAt: ""
|
|
73
|
-
})), [w]), G =
|
|
82
|
+
})), [w]), G = c(() => T.map((e) => ({
|
|
74
83
|
id: e.id,
|
|
75
84
|
workspaceId: "",
|
|
76
85
|
name: e.name,
|
|
@@ -89,7 +98,7 @@ function x() {
|
|
|
89
98
|
updatedAt: "",
|
|
90
99
|
archivedAt: null,
|
|
91
100
|
agents: e.agents ?? []
|
|
92
|
-
})), [T]), K =
|
|
101
|
+
})), [T]), K = c(() => E.map((e) => ({
|
|
93
102
|
id: e.id,
|
|
94
103
|
workspaceId: "",
|
|
95
104
|
agentId: e.agentId ?? null,
|
|
@@ -125,7 +134,7 @@ function x() {
|
|
|
125
134
|
running: J.length,
|
|
126
135
|
stopped: K.filter((e) => e.status === "STOPPED").length
|
|
127
136
|
}
|
|
128
|
-
}, Z =
|
|
137
|
+
}, Z = c(() => {
|
|
129
138
|
let e = [];
|
|
130
139
|
return K.slice(0, 3).forEach((t) => {
|
|
131
140
|
e.push({
|
|
@@ -147,34 +156,34 @@ function x() {
|
|
|
147
156
|
});
|
|
148
157
|
}), e.sort((e, t) => new Date(t.timestamp).getTime() - new Date(e.timestamp).getTime()).slice(0, 6);
|
|
149
158
|
}, [K, q]);
|
|
150
|
-
if (
|
|
159
|
+
if (S || D && w.length === 0 && T.length === 0 && E.length === 0) return /* @__PURE__ */ h("div", {
|
|
151
160
|
className: "flex items-center justify-center min-h-[400px]",
|
|
152
|
-
children: /* @__PURE__ */
|
|
161
|
+
children: /* @__PURE__ */ h(ee, { message: C("overviewPage.loadingPermissions", "Loading permissions...") })
|
|
153
162
|
});
|
|
154
|
-
if (!
|
|
163
|
+
if (!x(s.VIBE_LIST)) return /* @__PURE__ */ h("div", {
|
|
155
164
|
className: "flex items-center justify-center min-h-[400px] px-4",
|
|
156
|
-
children: /* @__PURE__ */
|
|
165
|
+
children: /* @__PURE__ */ g("div", {
|
|
157
166
|
className: "text-center space-y-2 max-w-sm",
|
|
158
|
-
children: [/* @__PURE__ */
|
|
167
|
+
children: [/* @__PURE__ */ h("h2", {
|
|
159
168
|
className: "text-lg font-semibold tracking-tight text-text-primary",
|
|
160
169
|
children: C("common.accessDeniedTitle", "Access Denied")
|
|
161
|
-
}), /* @__PURE__ */
|
|
170
|
+
}), /* @__PURE__ */ h("p", {
|
|
162
171
|
className: "text-sm text-text-secondary",
|
|
163
172
|
children: C("overviewPage.accessDeniedDescription", "You don't have permission to access this page.")
|
|
164
173
|
})]
|
|
165
174
|
})
|
|
166
175
|
});
|
|
167
|
-
let
|
|
176
|
+
let ke = (e) => {
|
|
168
177
|
if (!e) return C("overviewPage.time.unknown", "Unknown");
|
|
169
178
|
let t = Date.now() - new Date(e).getTime();
|
|
170
179
|
return t < 6e4 ? C("overviewPage.time.justNow", "Just now") : t < 36e5 ? C("overviewPage.time.minutesAgo", "{{count}}m ago", { count: Math.floor(t / 6e4) }) : t < 864e5 ? C("overviewPage.time.hoursAgo", "{{count}}h ago", { count: Math.floor(t / 36e5) }) : C("overviewPage.time.daysAgo", "{{count}}d ago", { count: Math.floor(t / 864e5) });
|
|
171
|
-
},
|
|
172
|
-
session_started:
|
|
173
|
-
agent_connected:
|
|
174
|
-
vibe_updated:
|
|
175
|
-
note_created:
|
|
176
|
-
module_installed:
|
|
177
|
-
}[e] ||
|
|
180
|
+
}, Ae = (e) => /* @__PURE__ */ h({
|
|
181
|
+
session_started: ge,
|
|
182
|
+
agent_connected: d,
|
|
183
|
+
vibe_updated: he,
|
|
184
|
+
note_created: me,
|
|
185
|
+
module_installed: l
|
|
186
|
+
}[e] || l, { className: "size-4" }), je = (e) => ({
|
|
178
187
|
green: "bg-status-success-bg-subtle text-status-success-text",
|
|
179
188
|
blue: "bg-[var(--color-accent-soft)] text-text-primary",
|
|
180
189
|
purple: "bg-accent-purple-subtle text-text-primary",
|
|
@@ -182,218 +191,214 @@ function x() {
|
|
|
182
191
|
cyan: "bg-accent-teal-subtle text-accent-teal",
|
|
183
192
|
yellow: "bg-status-warning-bg-subtle text-status-warning-text",
|
|
184
193
|
pink: "bg-accent-purple-subtle text-text-primary"
|
|
185
|
-
})[e] || "bg-bg-sunken text-text-secondary", Q = /* @__PURE__ */
|
|
194
|
+
})[e] || "bg-bg-sunken text-text-secondary", Q = /* @__PURE__ */ h(se, {
|
|
186
195
|
agents: W,
|
|
187
196
|
loading: D,
|
|
188
197
|
error: O,
|
|
189
198
|
onRetry: V,
|
|
190
|
-
onViewAll: () =>
|
|
191
|
-
onSelectAgent: (e) =>
|
|
192
|
-
onAddAgent: () =>
|
|
193
|
-
}), $ = /* @__PURE__ */
|
|
194
|
-
return /* @__PURE__ */
|
|
199
|
+
onViewAll: () => m("/health"),
|
|
200
|
+
onSelectAgent: (e) => m(`/agents/${e}`),
|
|
201
|
+
onAddAgent: () => m("/agents?create=true")
|
|
202
|
+
}), $ = /* @__PURE__ */ h(ce, { onNavigate: m });
|
|
203
|
+
return /* @__PURE__ */ g(we, {
|
|
195
204
|
className: "space-y-6 px-6 lg:px-8 py-6 bg-bg-canvas min-h-screen",
|
|
196
205
|
children: [
|
|
197
|
-
/* @__PURE__ */
|
|
206
|
+
/* @__PURE__ */ g("div", {
|
|
198
207
|
className: "relative overflow-hidden rounded-card -mx-2 px-2 pt-1",
|
|
199
|
-
children: [/* @__PURE__ */
|
|
200
|
-
title: /* @__PURE__ */
|
|
201
|
-
/* @__PURE__ */ g(xe, { children: C("overviewPage.titleNoun", "VibeControls") }),
|
|
202
|
-
" ",
|
|
203
|
-
C("overviewPage.titleSuffix", "Overview")
|
|
204
|
-
] }),
|
|
208
|
+
children: [/* @__PURE__ */ h(be, { intensity: "subtle" }), /* @__PURE__ */ h(i, {
|
|
209
|
+
title: /* @__PURE__ */ h(Te, { title: C("overviewPage.title", "VibeControls Overview") }),
|
|
205
210
|
description: C("overviewPage.description", "Monitor and manage your development environments"),
|
|
206
|
-
actions: /* @__PURE__ */
|
|
211
|
+
actions: /* @__PURE__ */ g("button", {
|
|
207
212
|
type: "button",
|
|
208
213
|
onClick: V,
|
|
209
214
|
disabled: D,
|
|
210
215
|
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",
|
|
211
|
-
children: [/* @__PURE__ */
|
|
216
|
+
children: [/* @__PURE__ */ h(_e, {
|
|
212
217
|
className: `size-4 ${D ? "animate-spin" : ""}`,
|
|
213
218
|
"aria-hidden": "true"
|
|
214
219
|
}), C("overviewPage.refresh", "Refresh")]
|
|
215
220
|
})
|
|
216
221
|
})]
|
|
217
222
|
}),
|
|
218
|
-
/* @__PURE__ */
|
|
219
|
-
icon: /* @__PURE__ */
|
|
223
|
+
/* @__PURE__ */ h(Ce, {
|
|
224
|
+
icon: /* @__PURE__ */ h(u, { className: "size-4" }),
|
|
220
225
|
children: C("overviewPage.purpose", "This is your VibeControls home — a live snapshot of everything you’re running. See which agents are online, what sessions and vibes are active, and recent activity at a glance, then jump straight into the area that needs you. Start here each day to get your bearings before diving into the work.")
|
|
221
226
|
}),
|
|
222
|
-
/* @__PURE__ */
|
|
227
|
+
/* @__PURE__ */ h(Se, {
|
|
223
228
|
storageKey: "vibecontrols-overview",
|
|
224
229
|
steps: [
|
|
225
230
|
{
|
|
226
231
|
id: "register-agent",
|
|
227
232
|
label: C("overviewPage.next.registerAgent", "Register an agent"),
|
|
228
233
|
description: C("overviewPage.next.registerAgentDesc", "Install the agent on a machine so VibeControls can run work there."),
|
|
229
|
-
icon: /* @__PURE__ */
|
|
230
|
-
onClick: () =>
|
|
234
|
+
icon: /* @__PURE__ */ h(d, { className: "size-4" }),
|
|
235
|
+
onClick: () => m("/agents")
|
|
231
236
|
},
|
|
232
237
|
{
|
|
233
238
|
id: "create-vibe",
|
|
234
239
|
label: C("overviewPage.next.createVibe", "Create your first vibe"),
|
|
235
240
|
description: C("overviewPage.next.createVibeDesc", "Spin up a workspace to organise a piece of work."),
|
|
236
|
-
icon: /* @__PURE__ */
|
|
237
|
-
onClick: () =>
|
|
241
|
+
icon: /* @__PURE__ */ h(p, { className: "size-4" }),
|
|
242
|
+
onClick: () => m("/vibes")
|
|
238
243
|
},
|
|
239
244
|
{
|
|
240
245
|
id: "open-session",
|
|
241
246
|
label: C("overviewPage.next.openSession", "Start a session"),
|
|
242
247
|
description: C("overviewPage.next.openSessionDesc", "Open a live terminal or task on one of your agents."),
|
|
243
|
-
icon: /* @__PURE__ */
|
|
244
|
-
onClick: () =>
|
|
248
|
+
icon: /* @__PURE__ */ h(u, { className: "size-4" }),
|
|
249
|
+
onClick: () => m("/sessions")
|
|
245
250
|
}
|
|
246
251
|
]
|
|
247
252
|
}),
|
|
248
|
-
O && !D && /* @__PURE__ */
|
|
253
|
+
O && !D && /* @__PURE__ */ h(te, {
|
|
249
254
|
title: C("overviewPage.loadFailed.title", "Could not load workspace data"),
|
|
250
255
|
message: C("overviewPage.loadFailed.message", "We couldn't load your VibeControls overview. Please try again in a moment."),
|
|
251
256
|
onRetry: V
|
|
252
257
|
}),
|
|
253
|
-
!O && W.length === 0 && !D && /* @__PURE__ */
|
|
258
|
+
!O && W.length === 0 && !D && /* @__PURE__ */ h(ne, {
|
|
254
259
|
variant: "full",
|
|
255
260
|
dismissKey: "vibecontrols-overview-setup-banner"
|
|
256
261
|
}),
|
|
257
|
-
/* @__PURE__ */
|
|
262
|
+
/* @__PURE__ */ g(b, {
|
|
258
263
|
"data-tour": "overview-stats",
|
|
259
264
|
className: `grid grid-cols-2 gap-4 sm:grid-cols-3 ${P ? "xl:grid-cols-5" : "xl:grid-cols-4"}`,
|
|
260
265
|
stagger: .06,
|
|
261
266
|
children: [
|
|
262
|
-
/* @__PURE__ */
|
|
267
|
+
/* @__PURE__ */ h(y, {
|
|
263
268
|
variant: "fadeScale",
|
|
264
|
-
children: /* @__PURE__ */
|
|
269
|
+
children: /* @__PURE__ */ h(o, {
|
|
265
270
|
title: C("overviewPage.stats.targets", "Targets"),
|
|
266
271
|
value: D ? "-" : U,
|
|
267
|
-
subtitle: D ||
|
|
268
|
-
icon: /* @__PURE__ */
|
|
272
|
+
subtitle: D || De ? "" : C("overviewPage.stats.connected", "{{count}} connected", { count: Oe }),
|
|
273
|
+
icon: /* @__PURE__ */ h(d, { className: "size-6" }),
|
|
269
274
|
variant: !D && U > 0 ? "success" : "default",
|
|
270
|
-
onClick: () =>
|
|
275
|
+
onClick: () => m("/targets")
|
|
271
276
|
})
|
|
272
277
|
}),
|
|
273
|
-
/* @__PURE__ */
|
|
278
|
+
/* @__PURE__ */ h(y, {
|
|
274
279
|
variant: "fadeScale",
|
|
275
|
-
children: /* @__PURE__ */
|
|
280
|
+
children: /* @__PURE__ */ h(o, {
|
|
276
281
|
title: C("overviewPage.stats.agents", "Agents"),
|
|
277
282
|
value: D ? "-" : X.agents.total,
|
|
278
283
|
subtitle: D ? "" : C("overviewPage.stats.active", "{{count}} active", { count: X.agents.active }),
|
|
279
|
-
icon: /* @__PURE__ */
|
|
284
|
+
icon: /* @__PURE__ */ h(u, { className: "size-6" }),
|
|
280
285
|
variant: !D && X.agents.active > 0 ? "success" : "default",
|
|
281
|
-
onClick: () =>
|
|
286
|
+
onClick: () => m("/agents")
|
|
282
287
|
})
|
|
283
288
|
}),
|
|
284
|
-
/* @__PURE__ */
|
|
289
|
+
/* @__PURE__ */ h(y, {
|
|
285
290
|
variant: "fadeScale",
|
|
286
|
-
children: /* @__PURE__ */
|
|
291
|
+
children: /* @__PURE__ */ h(o, {
|
|
287
292
|
title: C("overviewPage.stats.vibes", "Vibes"),
|
|
288
293
|
value: D ? "-" : X.vibes.total,
|
|
289
294
|
subtitle: D ? "" : C("overviewPage.stats.active", "{{count}} active", { count: X.vibes.active }),
|
|
290
|
-
icon: /* @__PURE__ */
|
|
291
|
-
onClick: () =>
|
|
295
|
+
icon: /* @__PURE__ */ h(p, { className: "size-6" }),
|
|
296
|
+
onClick: () => m("/vibes")
|
|
292
297
|
})
|
|
293
298
|
}),
|
|
294
|
-
/* @__PURE__ */
|
|
299
|
+
/* @__PURE__ */ h(y, {
|
|
295
300
|
variant: "fadeScale",
|
|
296
|
-
children: /* @__PURE__ */
|
|
301
|
+
children: /* @__PURE__ */ h(o, {
|
|
297
302
|
title: C("overviewPage.stats.sessions", "Sessions"),
|
|
298
303
|
value: D ? "-" : X.sessions.total,
|
|
299
304
|
subtitle: D ? "" : C("overviewPage.stats.running", "{{count}} running", { count: X.sessions.running }),
|
|
300
|
-
icon: /* @__PURE__ */
|
|
305
|
+
icon: /* @__PURE__ */ h(f, { className: "size-6" }),
|
|
301
306
|
variant: !D && X.sessions.running > 0 ? "success" : "default",
|
|
302
|
-
onClick: () =>
|
|
307
|
+
onClick: () => m("/sessions")
|
|
303
308
|
})
|
|
304
309
|
}),
|
|
305
|
-
P && /* @__PURE__ */
|
|
310
|
+
P && /* @__PURE__ */ h(y, {
|
|
306
311
|
variant: "fadeScale",
|
|
307
|
-
children: /* @__PURE__ */
|
|
312
|
+
children: /* @__PURE__ */ h(o, {
|
|
308
313
|
title: C("overviewPage.stats.aiRunsToday", "AI Runs Today"),
|
|
309
314
|
value: R.total === null ? "-" : R.total,
|
|
310
315
|
subtitle: R.error ? C("overviewPage.stats.aiRunsUnavailable", "Currently unavailable") : R.total === null ? "" : C("overviewPage.stats.aiRunsSubtitle", "AI tool events since midnight"),
|
|
311
|
-
icon: /* @__PURE__ */
|
|
316
|
+
icon: /* @__PURE__ */ h(ve, { className: "size-6" }),
|
|
312
317
|
variant: R.error ? "warning" : (R.total ?? 0) > 0 ? "success" : "default",
|
|
313
|
-
onClick: () =>
|
|
318
|
+
onClick: () => m("/analytics")
|
|
314
319
|
})
|
|
315
320
|
})
|
|
316
321
|
]
|
|
317
322
|
}),
|
|
318
|
-
P ? /* @__PURE__ */
|
|
323
|
+
P ? /* @__PURE__ */ g(b, {
|
|
319
324
|
className: "grid grid-cols-1 gap-6 xl:grid-cols-3",
|
|
320
325
|
stagger: .08,
|
|
321
|
-
children: [/* @__PURE__ */
|
|
326
|
+
children: [/* @__PURE__ */ h(y, {
|
|
322
327
|
className: "xl:col-span-2 h-full",
|
|
323
|
-
children: /* @__PURE__ */
|
|
328
|
+
children: /* @__PURE__ */ h(oe, {
|
|
324
329
|
range: I,
|
|
325
|
-
onRangeChange:
|
|
330
|
+
onRangeChange: Ee,
|
|
326
331
|
activity: L,
|
|
327
|
-
onViewAnalytics: () =>
|
|
332
|
+
onViewAnalytics: () => m("/analytics")
|
|
328
333
|
})
|
|
329
|
-
}), /* @__PURE__ */
|
|
334
|
+
}), /* @__PURE__ */ h(y, {
|
|
330
335
|
className: "h-full",
|
|
331
|
-
children: /* @__PURE__ */
|
|
336
|
+
children: /* @__PURE__ */ g("div", {
|
|
332
337
|
className: "flex h-full flex-col gap-6",
|
|
333
338
|
children: [Q, $]
|
|
334
339
|
})
|
|
335
340
|
})]
|
|
336
|
-
}) : /* @__PURE__ */
|
|
341
|
+
}) : /* @__PURE__ */ g(b, {
|
|
337
342
|
className: "grid grid-cols-1 gap-6 lg:grid-cols-2",
|
|
338
343
|
stagger: .08,
|
|
339
|
-
children: [/* @__PURE__ */
|
|
344
|
+
children: [/* @__PURE__ */ h(y, {
|
|
340
345
|
className: "h-full",
|
|
341
346
|
children: Q
|
|
342
|
-
}), /* @__PURE__ */
|
|
347
|
+
}), /* @__PURE__ */ h(y, {
|
|
343
348
|
className: "h-full",
|
|
344
349
|
children: $
|
|
345
350
|
})]
|
|
346
351
|
}),
|
|
347
|
-
/* @__PURE__ */
|
|
352
|
+
/* @__PURE__ */ g(b, {
|
|
348
353
|
className: "grid grid-cols-1 gap-6 xl:grid-cols-3",
|
|
349
354
|
stagger: .08,
|
|
350
|
-
children: [/* @__PURE__ */
|
|
355
|
+
children: [/* @__PURE__ */ h(y, {
|
|
351
356
|
className: "xl:col-span-2 h-full",
|
|
352
|
-
children: /* @__PURE__ */
|
|
357
|
+
children: /* @__PURE__ */ g(xe, {
|
|
353
358
|
className: "flex h-full flex-col border-[color-mix(in_oklab,var(--color-action-primary-bg)_34%,transparent)] shadow-[var(--shadow-glow)]",
|
|
354
|
-
children: [/* @__PURE__ */
|
|
359
|
+
children: [/* @__PURE__ */ g("div", {
|
|
355
360
|
className: "flex items-center justify-between mb-5",
|
|
356
|
-
children: [/* @__PURE__ */
|
|
361
|
+
children: [/* @__PURE__ */ g("h2", {
|
|
357
362
|
className: "text-lg font-semibold tracking-tight text-text-primary flex items-center gap-2.5",
|
|
358
|
-
children: [/* @__PURE__ */
|
|
363
|
+
children: [/* @__PURE__ */ h("span", {
|
|
359
364
|
className: "inline-flex size-8 items-center justify-center rounded-lg bg-[var(--color-accent-soft)] text-text-primary",
|
|
360
|
-
children: /* @__PURE__ */
|
|
365
|
+
children: /* @__PURE__ */ h(u, { className: "size-5" })
|
|
361
366
|
}), C("overviewPage.sections.activeAgents", "Active Agents")]
|
|
362
|
-
}), /* @__PURE__ */
|
|
367
|
+
}), /* @__PURE__ */ h("button", {
|
|
363
368
|
type: "button",
|
|
364
|
-
onClick: () =>
|
|
369
|
+
onClick: () => m("/agents"),
|
|
365
370
|
className: "text-sm font-medium text-text-link hover:underline",
|
|
366
371
|
"aria-label": C("overviewPage.sections.viewAllAgents", "View all agents"),
|
|
367
372
|
children: C("overviewPage.sections.viewAll", "View all")
|
|
368
373
|
})]
|
|
369
|
-
}), q.length > 0 ? /* @__PURE__ */
|
|
374
|
+
}), q.length > 0 ? /* @__PURE__ */ h(b, {
|
|
370
375
|
className: "grid grid-cols-1 sm:grid-cols-2 gap-4 flex-1 content-start",
|
|
371
376
|
stagger: .04,
|
|
372
|
-
children: q.slice(0, 4).map((e) => /* @__PURE__ */
|
|
377
|
+
children: q.slice(0, 4).map((e) => /* @__PURE__ */ h(y, { children: /* @__PURE__ */ h(re, {
|
|
373
378
|
agent: e,
|
|
374
|
-
onSelect: (e) =>
|
|
379
|
+
onSelect: (e) => m(`/agents/${e.id}`)
|
|
375
380
|
}) }, e.id))
|
|
376
|
-
}) : /* @__PURE__ */
|
|
381
|
+
}) : /* @__PURE__ */ h(v, {
|
|
377
382
|
className: "flex-1 py-8",
|
|
378
383
|
illustration: "empty-agents",
|
|
379
384
|
title: C("overviewPage.empty.noActiveAgents", "No active agents"),
|
|
380
385
|
description: C("overviewPage.empty.installCliHint", "Install the agent CLI to get started"),
|
|
381
|
-
action: /* @__PURE__ */
|
|
386
|
+
action: /* @__PURE__ */ g("div", {
|
|
382
387
|
className: "flex flex-wrap items-center justify-center gap-2",
|
|
383
388
|
children: [
|
|
384
|
-
/* @__PURE__ */
|
|
389
|
+
/* @__PURE__ */ h("button", {
|
|
385
390
|
type: "button",
|
|
386
|
-
onClick: () =>
|
|
391
|
+
onClick: () => m("/getting-started"),
|
|
387
392
|
className: "text-sm font-medium text-text-link hover:underline",
|
|
388
393
|
children: C("overviewPage.empty.setupGuide", "Setup guide")
|
|
389
394
|
}),
|
|
390
|
-
/* @__PURE__ */
|
|
395
|
+
/* @__PURE__ */ h("span", {
|
|
391
396
|
className: "text-text-muted",
|
|
392
397
|
children: "·"
|
|
393
398
|
}),
|
|
394
|
-
/* @__PURE__ */
|
|
399
|
+
/* @__PURE__ */ h("button", {
|
|
395
400
|
type: "button",
|
|
396
|
-
onClick: () =>
|
|
401
|
+
onClick: () => m("/agents"),
|
|
397
402
|
className: "text-sm text-text-link hover:underline",
|
|
398
403
|
children: C("overviewPage.empty.addAgent", "Add agent")
|
|
399
404
|
})
|
|
@@ -401,60 +406,60 @@ function x() {
|
|
|
401
406
|
})
|
|
402
407
|
})]
|
|
403
408
|
})
|
|
404
|
-
}), /* @__PURE__ */
|
|
409
|
+
}), /* @__PURE__ */ h(y, {
|
|
405
410
|
className: "h-full",
|
|
406
|
-
children: /* @__PURE__ */
|
|
411
|
+
children: /* @__PURE__ */ g(a, {
|
|
407
412
|
className: "flex h-full flex-col",
|
|
408
|
-
children: [/* @__PURE__ */
|
|
413
|
+
children: [/* @__PURE__ */ g("div", {
|
|
409
414
|
className: "flex items-center justify-between mb-5",
|
|
410
|
-
children: [/* @__PURE__ */
|
|
415
|
+
children: [/* @__PURE__ */ g("h2", {
|
|
411
416
|
className: "text-lg font-semibold tracking-tight text-text-primary flex items-center gap-2.5",
|
|
412
|
-
children: [/* @__PURE__ */
|
|
417
|
+
children: [/* @__PURE__ */ h("span", {
|
|
413
418
|
className: "inline-flex size-8 items-center justify-center rounded-lg bg-[var(--color-accent-soft)] text-text-primary",
|
|
414
|
-
children: /* @__PURE__ */
|
|
419
|
+
children: /* @__PURE__ */ h(l, { className: "size-5" })
|
|
415
420
|
}), C("overviewPage.sections.recentActivity", "Recent Activity")]
|
|
416
|
-
}), /* @__PURE__ */
|
|
421
|
+
}), /* @__PURE__ */ h("button", {
|
|
417
422
|
type: "button",
|
|
418
|
-
onClick: () =>
|
|
423
|
+
onClick: () => m("/audit"),
|
|
419
424
|
className: "text-sm font-medium text-text-link hover:underline",
|
|
420
425
|
"aria-label": C("overviewPage.sections.viewAllActivity", "View all activity"),
|
|
421
426
|
children: "View all"
|
|
422
427
|
})]
|
|
423
|
-
}), /* @__PURE__ */
|
|
428
|
+
}), /* @__PURE__ */ h(b, {
|
|
424
429
|
className: "space-y-3 flex-1",
|
|
425
430
|
stagger: .04,
|
|
426
|
-
children: Z.length > 0 ? Z.map((e) => /* @__PURE__ */
|
|
431
|
+
children: Z.length > 0 ? Z.map((e) => /* @__PURE__ */ h(y, {
|
|
427
432
|
variant: "fadeRight",
|
|
428
|
-
children: /* @__PURE__ */
|
|
433
|
+
children: /* @__PURE__ */ g("div", {
|
|
429
434
|
className: "flex items-start gap-3",
|
|
430
435
|
children: [
|
|
431
|
-
/* @__PURE__ */
|
|
432
|
-
className: `flex-shrink-0 size-8 rounded-full flex items-center justify-center ${
|
|
433
|
-
children:
|
|
436
|
+
/* @__PURE__ */ h("div", {
|
|
437
|
+
className: `flex-shrink-0 size-8 rounded-full flex items-center justify-center ${je(e.color)}`,
|
|
438
|
+
children: Ae(e.type)
|
|
434
439
|
}),
|
|
435
|
-
/* @__PURE__ */
|
|
440
|
+
/* @__PURE__ */ g("div", {
|
|
436
441
|
className: "flex-1 min-w-0",
|
|
437
|
-
children: [/* @__PURE__ */
|
|
442
|
+
children: [/* @__PURE__ */ h("p", {
|
|
438
443
|
className: "text-sm font-medium text-text-primary truncate",
|
|
439
444
|
children: e.title
|
|
440
|
-
}), /* @__PURE__ */
|
|
445
|
+
}), /* @__PURE__ */ h("p", {
|
|
441
446
|
className: "text-xs text-text-secondary truncate",
|
|
442
447
|
children: e.description
|
|
443
448
|
})]
|
|
444
449
|
}),
|
|
445
|
-
/* @__PURE__ */
|
|
450
|
+
/* @__PURE__ */ h("span", {
|
|
446
451
|
className: "text-xs text-text-secondary flex-shrink-0",
|
|
447
|
-
children:
|
|
452
|
+
children: ke(e.timestamp)
|
|
448
453
|
})
|
|
449
454
|
]
|
|
450
455
|
})
|
|
451
|
-
}, e.id)) : /* @__PURE__ */
|
|
456
|
+
}, e.id)) : /* @__PURE__ */ h(v, {
|
|
452
457
|
className: "h-full py-6",
|
|
453
458
|
illustration: "empty-notifications",
|
|
454
459
|
title: C("overviewPage.empty.noRecentActivity", "No recent activity"),
|
|
455
|
-
action: /* @__PURE__ */
|
|
460
|
+
action: /* @__PURE__ */ h("button", {
|
|
456
461
|
type: "button",
|
|
457
|
-
onClick: () =>
|
|
462
|
+
onClick: () => m("/audit"),
|
|
458
463
|
className: "text-sm text-text-link hover:underline",
|
|
459
464
|
children: C("overviewPage.empty.viewAuditLog", "View audit log")
|
|
460
465
|
})
|
|
@@ -463,64 +468,64 @@ function x() {
|
|
|
463
468
|
})
|
|
464
469
|
})]
|
|
465
470
|
}),
|
|
466
|
-
/* @__PURE__ */
|
|
471
|
+
/* @__PURE__ */ h(y, { children: /* @__PURE__ */ g(a, { children: [/* @__PURE__ */ g("div", {
|
|
467
472
|
className: "flex items-center justify-between mb-5",
|
|
468
|
-
children: [/* @__PURE__ */
|
|
473
|
+
children: [/* @__PURE__ */ g("h2", {
|
|
469
474
|
className: "text-lg font-semibold tracking-tight text-text-primary flex items-center gap-2.5",
|
|
470
|
-
children: [/* @__PURE__ */
|
|
475
|
+
children: [/* @__PURE__ */ h("span", {
|
|
471
476
|
className: "inline-flex size-8 items-center justify-center rounded-lg bg-[var(--color-accent-soft)] text-text-primary",
|
|
472
|
-
children: /* @__PURE__ */
|
|
477
|
+
children: /* @__PURE__ */ h(f, { className: "size-5" })
|
|
473
478
|
}), C("overviewPage.sections.runningSessions", "Running Sessions")]
|
|
474
|
-
}), /* @__PURE__ */
|
|
479
|
+
}), /* @__PURE__ */ h("button", {
|
|
475
480
|
type: "button",
|
|
476
|
-
onClick: () =>
|
|
481
|
+
onClick: () => m("/sessions"),
|
|
477
482
|
className: "text-sm font-medium text-text-link hover:underline",
|
|
478
483
|
children: C("overviewPage.sections.viewAll", "View all")
|
|
479
484
|
})]
|
|
480
|
-
}), J.length > 0 ? /* @__PURE__ */
|
|
485
|
+
}), J.length > 0 ? /* @__PURE__ */ h(b, {
|
|
481
486
|
className: "grid grid-cols-1 sm:grid-cols-2 xl:grid-cols-3 gap-4",
|
|
482
487
|
stagger: .04,
|
|
483
|
-
children: J.slice(0, 6).map((e) => /* @__PURE__ */
|
|
488
|
+
children: J.slice(0, 6).map((e) => /* @__PURE__ */ h(y, { children: /* @__PURE__ */ h(ie, {
|
|
484
489
|
session: e,
|
|
485
|
-
onOpen: (e) =>
|
|
490
|
+
onOpen: (e) => m(`/sessions/${e.id}`)
|
|
486
491
|
}) }, e.id))
|
|
487
|
-
}) : /* @__PURE__ */
|
|
492
|
+
}) : /* @__PURE__ */ h(v, {
|
|
488
493
|
illustration: "empty-sessions",
|
|
489
494
|
title: C("overviewPage.empty.noRunningSessions", "No running sessions"),
|
|
490
|
-
action: /* @__PURE__ */
|
|
495
|
+
action: /* @__PURE__ */ h("button", {
|
|
491
496
|
type: "button",
|
|
492
|
-
onClick: () =>
|
|
497
|
+
onClick: () => m("/sessions"),
|
|
493
498
|
className: "text-sm font-medium text-text-link hover:underline",
|
|
494
499
|
children: C("overviewPage.empty.startSession", "Start a session")
|
|
495
500
|
})
|
|
496
501
|
})] }) }),
|
|
497
|
-
/* @__PURE__ */
|
|
502
|
+
/* @__PURE__ */ h(y, { children: /* @__PURE__ */ g(a, { children: [/* @__PURE__ */ g("div", {
|
|
498
503
|
className: "flex items-center justify-between mb-5",
|
|
499
|
-
children: [/* @__PURE__ */
|
|
504
|
+
children: [/* @__PURE__ */ g("h2", {
|
|
500
505
|
className: "text-lg font-semibold tracking-tight text-text-primary flex items-center gap-2.5",
|
|
501
|
-
children: [/* @__PURE__ */
|
|
506
|
+
children: [/* @__PURE__ */ h("span", {
|
|
502
507
|
className: "inline-flex size-8 items-center justify-center rounded-lg bg-[var(--color-accent-soft)] text-text-primary",
|
|
503
|
-
children: /* @__PURE__ */
|
|
508
|
+
children: /* @__PURE__ */ h(p, { className: "size-5" })
|
|
504
509
|
}), C("overviewPage.sections.activeVibes", "Active Vibes")]
|
|
505
|
-
}), /* @__PURE__ */
|
|
510
|
+
}), /* @__PURE__ */ h("button", {
|
|
506
511
|
type: "button",
|
|
507
|
-
onClick: () =>
|
|
512
|
+
onClick: () => m("/vibes"),
|
|
508
513
|
className: "text-sm font-medium text-text-link hover:underline",
|
|
509
514
|
children: C("overviewPage.sections.viewAll", "View all")
|
|
510
515
|
})]
|
|
511
|
-
}), Y.length > 0 ? /* @__PURE__ */
|
|
516
|
+
}), Y.length > 0 ? /* @__PURE__ */ h(b, {
|
|
512
517
|
className: "grid grid-cols-1 sm:grid-cols-2 xl:grid-cols-3 gap-4",
|
|
513
518
|
stagger: .04,
|
|
514
|
-
children: Y.slice(0, 6).map((e) => /* @__PURE__ */
|
|
519
|
+
children: Y.slice(0, 6).map((e) => /* @__PURE__ */ h(y, { children: /* @__PURE__ */ h(ae, {
|
|
515
520
|
vibe: e,
|
|
516
|
-
onOpen: (e) =>
|
|
521
|
+
onOpen: (e) => m(`/vibes/${e.id}`)
|
|
517
522
|
}) }, e.id))
|
|
518
|
-
}) : /* @__PURE__ */
|
|
523
|
+
}) : /* @__PURE__ */ h(v, {
|
|
519
524
|
illustration: "empty-vibes",
|
|
520
525
|
title: C("overviewPage.empty.noActiveVibes", "No active vibes"),
|
|
521
|
-
action: /* @__PURE__ */
|
|
526
|
+
action: /* @__PURE__ */ h("button", {
|
|
522
527
|
type: "button",
|
|
523
|
-
onClick: () =>
|
|
528
|
+
onClick: () => m("/vibes"),
|
|
524
529
|
className: "text-sm font-medium text-text-link hover:underline",
|
|
525
530
|
children: C("overviewPage.empty.addVibe", "Add a vibe")
|
|
526
531
|
})
|
|
@@ -529,4 +534,4 @@ function x() {
|
|
|
529
534
|
});
|
|
530
535
|
}
|
|
531
536
|
//#endregion
|
|
532
|
-
export {
|
|
537
|
+
export { S as OverviewPage };
|