@burdenoff/microfe-vibecontrols 2026.625.3 → 2026.626.2

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 (59) hide show
  1. package/dist/components/agents/AgentForm.js +129 -127
  2. package/dist/components/agents/AgentForm.js.map +1 -1
  3. package/dist/components/shared/InstallTabs.js +19 -7
  4. package/dist/components/shared/InstallTabs.js.map +1 -1
  5. package/dist/pages/ActionsPage.js +209 -204
  6. package/dist/pages/ActionsPage.js.map +1 -1
  7. package/dist/pages/AgentDetailsPage.js +678 -648
  8. package/dist/pages/AgentDetailsPage.js.map +1 -1
  9. package/dist/pages/AgentGraphPage.js +112 -108
  10. package/dist/pages/AgentGraphPage.js.map +1 -1
  11. package/dist/pages/AgentsPage.js +159 -155
  12. package/dist/pages/AgentsPage.js.map +1 -1
  13. package/dist/pages/AnalyticsPage.js +140 -136
  14. package/dist/pages/AnalyticsPage.js.map +1 -1
  15. package/dist/pages/CatalogDetailPage.js +249 -244
  16. package/dist/pages/CatalogDetailPage.js.map +1 -1
  17. package/dist/pages/CatalogPage.js +73 -68
  18. package/dist/pages/CatalogPage.js.map +1 -1
  19. package/dist/pages/ComponentDetailPage.js +195 -164
  20. package/dist/pages/ComponentDetailPage.js.map +1 -1
  21. package/dist/pages/ComponentsPage.js +80 -75
  22. package/dist/pages/ComponentsPage.js.map +1 -1
  23. package/dist/pages/EnvTopologyPage.js +100 -95
  24. package/dist/pages/EnvTopologyPage.js.map +1 -1
  25. package/dist/pages/HealthPage.js +331 -204
  26. package/dist/pages/HealthPage.js.map +1 -1
  27. package/dist/pages/LogsPage.js +54 -49
  28. package/dist/pages/LogsPage.js.map +1 -1
  29. package/dist/pages/OverviewPage.js +159 -129
  30. package/dist/pages/OverviewPage.js.map +1 -1
  31. package/dist/pages/PluginsCatalogPage.js +72 -78
  32. package/dist/pages/PluginsCatalogPage.js.map +1 -1
  33. package/dist/pages/SessionDetailsPage.js +517 -512
  34. package/dist/pages/SessionDetailsPage.js.map +1 -1
  35. package/dist/pages/SessionsPage.js +1084 -1079
  36. package/dist/pages/SessionsPage.js.map +1 -1
  37. package/dist/pages/SettingsPage.js +107 -103
  38. package/dist/pages/SettingsPage.js.map +1 -1
  39. package/dist/pages/TargetDetailsPage.js +131 -123
  40. package/dist/pages/TargetDetailsPage.js.map +1 -1
  41. package/dist/pages/TargetsPage.js +198 -194
  42. package/dist/pages/TargetsPage.js.map +1 -1
  43. package/dist/pages/TemplatesPage.js +77 -71
  44. package/dist/pages/TemplatesPage.js.map +1 -1
  45. package/dist/pages/VibeAuditPage.js +83 -78
  46. package/dist/pages/VibeAuditPage.js.map +1 -1
  47. package/dist/pages/VibeCalendarPage.js +109 -104
  48. package/dist/pages/VibeCalendarPage.js.map +1 -1
  49. package/dist/pages/VibeDeckPage.js +222 -217
  50. package/dist/pages/VibeDeckPage.js.map +1 -1
  51. package/dist/pages/VibeDetailsPage.js +532 -501
  52. package/dist/pages/VibeDetailsPage.js.map +1 -1
  53. package/dist/pages/VibesPage.js +137 -133
  54. package/dist/pages/VibesPage.js.map +1 -1
  55. package/dist/pages/WebhooksPage.js +329 -324
  56. package/dist/pages/WebhooksPage.js.map +1 -1
  57. package/dist/pages/ai/AIPage.js +149 -144
  58. package/dist/pages/ai/AIPage.js.map +1 -1
  59. package/package.json +2 -2
@@ -45,19 +45,19 @@ import { useQueryBackedTab as Ze } from "../hooks/useQueryBackedTab.js";
45
45
  import { mintScopedIframeToken as Qe } from "../services/iframeToken.js";
46
46
  import { AddTabDialog as $e } from "../components/plugins/AddTabDialog.js";
47
47
  import { PluginIframeMount as et } from "../components/plugins/PluginIframeMount.js";
48
- import { useCallback as o, useEffect as s, useMemo as c, useRef as l, useState as u } from "react";
49
- import { ArrowLeft as d, ArrowUpCircle as tt, Bot as nt, Check as rt, CheckCircle2 as it, Clock as at, Command as ot, Copy as st, Cpu as ct, Database as lt, Download as ut, Edit3 as dt, Eye as ft, EyeOff as pt, FileText as mt, HardDrive as ht, Info as gt, Key as _t, Loader2 as f, Monitor as vt, Play as yt, Plus as bt, Puzzle as p, RefreshCw as xt, ScrollText as St, Server as Ct, Settings as wt, Shield as Tt, Square as Et, Tag as Dt, Terminal as m, Trash2 as Ot, Users as kt, Wrench as At, X as jt, Zap as h } from "lucide-react";
50
- import { useParams as Mt } from "react-router-dom";
51
- import { usePermissions as Nt } from "@burdenoff/fe-libs/shared/providers/shell";
52
- import { Fragment as g, jsx as _, jsxs as v } from "react/jsx-runtime";
53
- import { Button as y, Checkbox as Pt } from "@burdenoff/fe-libs/ui";
54
- import { useFeatureFlagDetails as Ft } from "@burdenoff/fe-libs/shared/feature-flags";
55
- import { PermissionButton as It } from "@burdenoff/fe-libs/shared/components";
56
- import { Tabs as Lt } from "@burdenoff/fe-libs/chrome";
57
- import { MotionPage as b } from "@burdenoff/fe-libs/shared/motion";
58
- import { usePluginContributions as Rt } from "@burdenoff/fe-libs/shared/plugins";
48
+ import { useCallback as o, useEffect as s, useMemo as tt, useRef as nt, useState as c } from "react";
49
+ import { ArrowLeft as l, ArrowUpCircle as rt, Bot as it, Check as at, CheckCircle2 as ot, Clock as st, Command as ct, Copy as lt, Cpu as ut, Database as dt, Download as ft, Edit3 as pt, Eye as mt, EyeOff as ht, FileText as gt, HardDrive as _t, Info as vt, Key as yt, Loader2 as u, Monitor as bt, Play as xt, Plus as St, Puzzle as d, RefreshCw as Ct, ScrollText as wt, Server as f, Settings as Tt, Shield as Et, Square as Dt, Tag as Ot, Terminal as p, Trash2 as kt, Users as At, Wrench as jt, X as Mt, Zap as m } from "lucide-react";
50
+ import { useParams as Nt } from "react-router-dom";
51
+ import { usePermissions as Pt } from "@burdenoff/fe-libs/shared/providers/shell";
52
+ import { Fragment as h, jsx as g, jsxs as _ } from "react/jsx-runtime";
53
+ import { Button as v, Checkbox as Ft, NextSteps as It, PagePurpose as Lt } from "@burdenoff/fe-libs/ui";
54
+ import { useFeatureFlagDetails as Rt } from "@burdenoff/fe-libs/shared/feature-flags";
55
+ import { PermissionButton as zt } from "@burdenoff/fe-libs/shared/components";
56
+ import { Tabs as Bt } from "@burdenoff/fe-libs/chrome";
57
+ import { MotionPage as y } from "@burdenoff/fe-libs/shared/motion";
58
+ import { usePluginContributions as Vt } from "@burdenoff/fe-libs/shared/plugins";
59
59
  //#region src/pages/AgentDetailsPage.tsx
60
- var zt = [
60
+ var Ht = [
61
61
  "overview",
62
62
  "profiles",
63
63
  "security",
@@ -71,8 +71,8 @@ var zt = [
71
71
  "backup",
72
72
  "maintenance"
73
73
  ];
74
- function x() {
75
- let { id: x } = Mt(), { basePath: Bt } = ge(), Vt = Bt || "", S = _e(), { hasPermission: Ht, isLoading: Ut, permissions: Wt } = Nt(), C = ue(), [Gt] = oe({ refetchQueries: ["GetAgent"] }), [Kt] = r({
74
+ function b() {
75
+ let { id: b } = Nt(), { basePath: Ut } = ge(), Wt = Ut || "", x = _e(), { hasPermission: Gt, isLoading: Kt, permissions: qt } = Pt(), S = ue(), [Jt] = oe({ refetchQueries: ["GetAgent"] }), [Yt] = r({
76
76
  refetchQueries: ["ListAgents", "VibeControlsInitialData"],
77
77
  awaitRefetchQueries: !0,
78
78
  update(e, t, { variables: n }) {
@@ -82,37 +82,37 @@ function x() {
82
82
  id: r
83
83
  }) }), e.gc());
84
84
  }
85
- }), [qt] = n({ refetchQueries: ["GetAgent"] }), [Jt] = ie(), [Yt] = ae(), [w, Xt] = u(null), Zt = ve((e) => e.setActiveAgentId);
85
+ }), [Xt] = n({ refetchQueries: ["GetAgent"] }), [Zt] = ie(), [Qt] = ae(), [C, $t] = c(null), en = ve((e) => e.setActiveAgentId);
86
86
  s(() => {
87
- x && Zt(x);
88
- }, [x, Zt]);
89
- let [Qt, $t] = u(!1), [en, T] = u(!1), [tn, nn] = u(""), [E, rn] = u(!1), [an, D] = u(null), on = l(null), [O, sn] = u(!1), [cn, ln] = u(!1), [k, un] = u(null), [dn, fn] = u(!1), [pn, mn] = u(null), [hn] = t({ fetchPolicy: "network-only" }), [gn, _n] = u(!1), { data: vn, loading: yn, error: bn, refetch: A } = ee({
90
- variables: { id: x || "" },
91
- skip: !x,
87
+ b && en(b);
88
+ }, [b, en]);
89
+ let [tn, nn] = c(!1), [rn, w] = c(!1), [T, an] = c(""), [E, on] = c(!1), [sn, D] = c(null), cn = nt(null), [O, ln] = c(!1), [un, dn] = c(!1), [k, fn] = c(null), [pn, mn] = c(!1), [hn, gn] = c(null), [_n] = t({ fetchPolicy: "network-only" }), [vn, yn] = c(!1), { data: bn, loading: xn, error: Sn, refetch: A } = ee({
90
+ variables: { id: b || "" },
91
+ skip: !b,
92
92
  fetchPolicy: "cache-and-network"
93
- }), j = vn?.vibecontrolsAgent, M = le({
93
+ }), j = bn?.vibecontrolsAgent, M = le({
94
94
  fetchPolicy: "cache-and-network",
95
95
  nextFetchPolicy: "cache-first",
96
96
  notifyOnNetworkStatusChange: !0,
97
- skip: !x,
97
+ skip: !b,
98
98
  pollInterval: 3e4
99
- }), { data: xn } = ce({ skip: !x }), Sn = M.data === void 0 && xn === void 0, N = c(() => {
100
- let e = /* @__PURE__ */ new Map(), t = xn?.vibecontrolsAgentHealthProbeStream ?? M.data?.vibecontrolsAgentHealthProbes ?? [];
99
+ }), { data: Cn } = ce({ skip: !b }), wn = M.data === void 0 && Cn === void 0, N = tt(() => {
100
+ let e = /* @__PURE__ */ new Map(), t = Cn?.vibecontrolsAgentHealthProbeStream ?? M.data?.vibecontrolsAgentHealthProbes ?? [];
101
101
  for (let n of t) e.set(n.agentId, {
102
102
  agentId: n.agentId,
103
103
  healthy: n.healthy,
104
104
  errorMessage: n.errorMessage
105
105
  });
106
106
  return e;
107
- }, [M.data, xn]), P = c(() => j ? qe({
107
+ }, [M.data, Cn]), P = tt(() => j ? qe({
108
108
  id: j.id,
109
109
  isActive: j.isActive,
110
110
  metadata: j.metadata
111
- }, N, { probesLoading: Sn }) : "REGISTERING", [
111
+ }, N, { probesLoading: wn }) : "REGISTERING", [
112
112
  j,
113
113
  N,
114
- Sn
115
- ]), Cn = P === "STOPPED" || P === "OFFLINE", { active: F } = Oe(j?.id ?? null), I = Ft("vibes.tabs.iframe-host")?.value === !0, wn = c(() => {
114
+ wn
115
+ ]), Tn = P === "STOPPED" || P === "OFFLINE", { active: F } = Oe(j?.id ?? null), I = Rt("vibes.tabs.iframe-host")?.value === !0, En = tt(() => {
116
116
  if (!I || !j?.tunnelUrl) return [];
117
117
  let e = j.id, t = F ?? "default";
118
118
  return [{
@@ -127,33 +127,33 @@ function x() {
127
127
  j?.tunnelUrl,
128
128
  j?.name,
129
129
  F
130
- ]), L = Rt(wn, {
130
+ ]), L = Vt(En, {
131
131
  mountPoint: "agent.detailTab",
132
- enabled: I && wn.length > 0
133
- }), [R, Tn] = Ze(c(() => {
132
+ enabled: I && En.length > 0
133
+ }), [R, z] = Ze(tt(() => {
134
134
  let e = L.data.filter((e) => e.contribution.mountPoint === "agent.detailTab").map((e) => e.contribution.id);
135
- return [...zt, ...e];
136
- }, [L.data]), "overview"), [En, Dn] = u(!1), On = l(!1);
135
+ return [...Ht, ...e];
136
+ }, [L.data]), "overview"), [Dn, On] = c(!1), kn = nt(!1);
137
137
  s(() => {
138
- j && !On.current && (On.current = !0, qt().catch(() => {}));
139
- }, [j, qt]);
140
- let [kn] = re(), An = l(!1);
138
+ j && !kn.current && (kn.current = !0, Xt().catch(() => {}));
139
+ }, [j, Xt]);
140
+ let [An] = re(), jn = nt(!1);
141
141
  s(() => {
142
- if (!j || An.current) return;
142
+ if (!j || jn.current) return;
143
143
  let e = !!(j.appId && j.appClientId), t = !!j.tunnelUrl;
144
- !e || !t || (An.current = !0, kn({ variables: { input: { agentId: j.id } } }).then(() => {
144
+ !e || !t || (jn.current = !0, An({ variables: { input: { agentId: j.id } } }).then(() => {
145
145
  A().catch(() => {});
146
146
  }).catch(() => {}));
147
147
  }, [
148
148
  j,
149
- kn,
149
+ An,
150
150
  A
151
151
  ]);
152
- let [z, jn] = u([]), [Mn, Nn] = u([]), [Pn, Fn] = u(!0), [B, V] = u(null), [In, H] = u(null), [Ln, Rn] = u(null), [zn, Bn] = u(null), [Vn, Hn] = u(!1), [Un, Wn] = u(!1), [Gn, Kn] = u(!1), [U, qn] = u(!1), [Jn, W] = u(!1), [Yn, Xn] = u("plugin"), Zn = l(null), [G, K] = u("installed"), [q, Qn] = u(""), [J, $n] = u([]), [er, tr] = u(!1), [nr, rr] = u(null), [Y, ir] = u(null), [ar] = e(), [or] = te(), [sr] = ne(), [cr] = se(), X = o(async () => {
152
+ let [B, Mn] = c([]), [Nn, Pn] = c([]), [Fn, In] = c(!0), [V, H] = c(null), [Ln, U] = c(null), [Rn, zn] = c(null), [Bn, Vn] = c(null), [Hn, Un] = c(!1), [Wn, Gn] = c(!1), [Kn, qn] = c(!1), [W, Jn] = c(!1), [Yn, G] = c(!1), [Xn, Zn] = c("plugin"), Qn = nt(null), [K, $n] = c("installed"), [q, er] = c(""), [J, tr] = c([]), [nr, rr] = c(!1), [ir, ar] = c(null), [Y, or] = c(null), [sr] = e(), [cr] = te(), [lr] = ne(), [ur] = se(), X = o(async () => {
153
153
  if (j?.id) {
154
- Fn(!0), H(null);
154
+ In(!0), U(null);
155
155
  try {
156
- let { data: e } = await ar({ variables: {
156
+ let { data: e } = await sr({ variables: {
157
157
  agentId: j.id,
158
158
  profile: F
159
159
  } }), t = e?.agentPlugins;
@@ -183,102 +183,102 @@ function x() {
183
183
  tags: [...e.tags],
184
184
  installed: e.installed
185
185
  }));
186
- jn(e), Nn(n), t.error && H(t.error);
186
+ Mn(e), Pn(n), t.error && U(t.error);
187
187
  }
188
188
  } catch {
189
- H("Agent unreachable — unable to fetch plugin list");
189
+ U("Agent unreachable — unable to fetch plugin list");
190
190
  } finally {
191
- Fn(!1);
191
+ In(!1);
192
192
  }
193
193
  }
194
194
  }, [
195
195
  j?.id,
196
- ar,
196
+ sr,
197
197
  F
198
198
  ]);
199
199
  s(() => {
200
200
  if (!j?.id) return;
201
201
  let e = `${j.id}:${F}`;
202
- Zn.current !== e && (Zn.current = e, X());
202
+ Qn.current !== e && (Qn.current = e, X());
203
203
  }, [
204
204
  j?.id,
205
205
  F,
206
206
  X
207
207
  ]);
208
- let lr = o(async (e) => {
208
+ let dr = o(async (e) => {
209
209
  if (j?.id) {
210
- V(e);
210
+ H(e);
211
211
  try {
212
- let { data: t } = await or({ variables: {
212
+ let { data: t } = await cr({ variables: {
213
213
  agentId: j.id,
214
214
  packageName: e
215
215
  } });
216
216
  if (t?.installAgentPlugin?.success) await X();
217
- else throw Error(t?.installAgentPlugin?.error || C("agentDetails.installFailed", "Install failed"));
217
+ else throw Error(t?.installAgentPlugin?.error || S("agentDetails.installFailed", "Install failed"));
218
218
  } catch (e) {
219
219
  if (me(e)) {
220
- he(), Xn("plugin"), W(!0);
220
+ he(), Zn("plugin"), G(!0);
221
221
  return;
222
222
  }
223
- H(e instanceof Error ? e.message : C("agentDetails.pluginInstallFailed", "Failed to install plugin")), setTimeout(() => H(null), 5e3);
223
+ U(e instanceof Error ? e.message : S("agentDetails.pluginInstallFailed", "Failed to install plugin")), setTimeout(() => U(null), 5e3);
224
224
  } finally {
225
- V(null);
225
+ H(null);
226
226
  }
227
227
  }
228
228
  }, [
229
229
  j?.id,
230
- or,
230
+ cr,
231
231
  X,
232
- C
233
- ]), ur = o((e) => {
234
- Rn(e);
235
- }, []), dr = o(async (e) => {
232
+ S
233
+ ]), fr = o((e) => {
234
+ zn(e);
235
+ }, []), pr = o(async (e) => {
236
236
  if (j?.id) {
237
- V(e);
237
+ H(e);
238
238
  try {
239
- let { data: t } = await sr({ variables: {
239
+ let { data: t } = await lr({ variables: {
240
240
  agentId: j.id,
241
241
  packageName: e
242
242
  } });
243
243
  if (t?.removeAgentPlugin?.success) await X();
244
- else throw Error(t?.removeAgentPlugin?.error || C("agentDetails.removeFailed", "Remove failed"));
244
+ else throw Error(t?.removeAgentPlugin?.error || S("agentDetails.removeFailed", "Remove failed"));
245
245
  } catch (e) {
246
- H(e instanceof Error ? e.message : C("agentDetails.pluginRemoveFailed", "Failed to remove plugin")), setTimeout(() => H(null), 5e3);
246
+ U(e instanceof Error ? e.message : S("agentDetails.pluginRemoveFailed", "Failed to remove plugin")), setTimeout(() => U(null), 5e3);
247
247
  } finally {
248
- V(null);
248
+ H(null);
249
249
  }
250
250
  }
251
251
  }, [
252
252
  j?.id,
253
- sr,
253
+ lr,
254
254
  X,
255
- C
256
- ]), fr = o((e) => {
257
- Bn(e);
258
- }, []), pr = o(async (e, t) => {
255
+ S
256
+ ]), mr = o((e) => {
257
+ Vn(e);
258
+ }, []), hr = o(async (e, t) => {
259
259
  if (j?.id) {
260
- V(e);
260
+ H(e);
261
261
  try {
262
- let { data: n } = await cr({ variables: {
262
+ let { data: n } = await ur({ variables: {
263
263
  agentId: j.id,
264
264
  packageName: e,
265
265
  version: t ?? null
266
266
  } }), r = n?.updateAgentPlugin;
267
267
  if (r?.ok) await X();
268
- else throw Error(r?.error || C("agentDetails.updateFailed", "Plugin update failed"));
268
+ else throw Error(r?.error || S("agentDetails.updateFailed", "Plugin update failed"));
269
269
  } catch (e) {
270
- H(e instanceof Error ? e.message : C("agentDetails.pluginUpdateFailed", "Failed to update plugin")), setTimeout(() => H(null), 5e3);
270
+ U(e instanceof Error ? e.message : S("agentDetails.pluginUpdateFailed", "Failed to update plugin")), setTimeout(() => U(null), 5e3);
271
271
  } finally {
272
- V(null);
272
+ H(null);
273
273
  }
274
274
  }
275
275
  }, [
276
276
  j?.id,
277
- cr,
277
+ ur,
278
278
  X,
279
- C
280
- ]), Z = j?.sessions || [], Q = j?.vibes || [], mr = o(async () => {
281
- tr(!0), rr(null);
279
+ S
280
+ ]), Z = j?.sessions || [], Q = j?.vibes || [], gr = o(async () => {
281
+ rr(!0), ar(null);
282
282
  try {
283
283
  let e = await (await fetch(typeof window < "u" && window.__BURDENOFF_GLOBAL_GATEWAY__ || "/global/graphql", {
284
284
  method: "POST",
@@ -287,29 +287,29 @@ function x() {
287
287
  body: JSON.stringify({ query: "query MyStorePlugins {\n myEntitlements {\n id\n productId\n licenseKey\n product {\n id\n name\n slug\n icon\n description\n manifest\n }\n }\n }" })
288
288
  })).json();
289
289
  if (e.errors?.length) throw Error(e.errors[0]?.message ?? "Failed to load store plugins");
290
- $n((e.data?.myEntitlements ?? []).filter((e) => {
290
+ tr((e.data?.myEntitlements ?? []).filter((e) => {
291
291
  let t = e.product?.manifest;
292
292
  if (!t) return !1;
293
293
  let n = t.itemType?.toLowerCase();
294
294
  return n === "vibemodule" || n === "plugin";
295
295
  }));
296
296
  } catch (e) {
297
- rr(e instanceof Error ? e.message : "Failed to load store plugins");
297
+ ar(e instanceof Error ? e.message : "Failed to load store plugins");
298
298
  } finally {
299
- tr(!1);
299
+ rr(!1);
300
300
  }
301
301
  }, []);
302
302
  s(() => {
303
- G === "store" && J.length === 0 && !er && mr();
303
+ K === "store" && J.length === 0 && !nr && gr();
304
304
  }, [
305
- G,
305
+ K,
306
306
  J.length,
307
- er,
308
- mr
307
+ nr,
308
+ gr
309
309
  ]);
310
- let hr = o(async (e, t) => {
310
+ let _r = o(async (e, t) => {
311
311
  if (j?.id) {
312
- ir(e);
312
+ or(e);
313
313
  try {
314
314
  let n = await (await fetch(typeof window < "u" && window.__BURDENOFF_WSPACE_GATEWAY__ || "/workspaces/graphql", {
315
315
  method: "POST",
@@ -327,11 +327,11 @@ function x() {
327
327
  if (n.errors?.length) throw Error(n.errors[0]?.message ?? "Install failed");
328
328
  let r = n.data?.installStorePluginOnAgent;
329
329
  if (!r?.success) throw Error(r?.error ?? "Install failed");
330
- await X(), K("installed");
330
+ await X(), $n("installed");
331
331
  } catch (e) {
332
- rr(e instanceof Error ? e.message : "Install failed");
332
+ ar(e instanceof Error ? e.message : "Install failed");
333
333
  } finally {
334
- ir(null);
334
+ or(null);
335
335
  }
336
336
  }
337
337
  }, [j?.id, X]);
@@ -339,334 +339,334 @@ function x() {
339
339
  if (typeof window > "u" || !j?.id) return;
340
340
  let e = new URLSearchParams(window.location.search), t = e.get("install"), n = e.get("licenseKey");
341
341
  if (t && t !== Y) {
342
- K("store"), hr(t, n);
342
+ $n("store"), _r(t, n);
343
343
  let e = new URL(window.location.href);
344
344
  e.searchParams.delete("install"), e.searchParams.delete("licenseKey"), window.history.replaceState({}, "", e.toString());
345
345
  }
346
346
  }, [
347
347
  j?.id,
348
- hr,
348
+ _r,
349
349
  Y
350
350
  ]);
351
- let gr = o(async () => {
351
+ let vr = o(async () => {
352
352
  if (!j?.id) return null;
353
353
  if (k) return k;
354
- fn(!0), mn(null);
354
+ mn(!0), gn(null);
355
355
  try {
356
- let e = (await hn({ variables: { agentId: j.id } })).data?.vibecontrolsAgentSecretReveal ?? null;
357
- return e ? (un(e), e) : (mn("No API key configured"), null);
356
+ let e = (await _n({ variables: { agentId: j.id } })).data?.vibecontrolsAgentSecretReveal ?? null;
357
+ return e ? (fn(e), e) : (gn("No API key configured"), null);
358
358
  } catch (e) {
359
- return mn(e instanceof Error ? e.message : "Reveal failed"), null;
359
+ return gn(e instanceof Error ? e.message : "Reveal failed"), null;
360
360
  } finally {
361
- fn(!1);
361
+ mn(!1);
362
362
  }
363
363
  }, [
364
364
  j?.id,
365
365
  k,
366
- hn
366
+ _n
367
367
  ]);
368
- if (Ut) return /* @__PURE__ */ _("div", {
368
+ if (Kt) return /* @__PURE__ */ g("div", {
369
369
  className: "flex items-center justify-center min-h-[400px]",
370
- children: /* @__PURE__ */ _("p", {
370
+ children: /* @__PURE__ */ g("p", {
371
371
  className: "text-text-secondary",
372
372
  children: "Loading permissions…"
373
373
  })
374
374
  });
375
- if (Wt && (Wt.permissionStrings?.length ?? 0) > 0 && !Ht(Me.AGENT_READ)) return /* @__PURE__ */ _("div", {
375
+ if (qt && (qt.permissionStrings?.length ?? 0) > 0 && !Gt(Me.AGENT_READ)) return /* @__PURE__ */ g("div", {
376
376
  className: "flex items-center justify-center min-h-[400px]",
377
- children: /* @__PURE__ */ v("div", {
377
+ children: /* @__PURE__ */ _("div", {
378
378
  className: "text-center space-y-2",
379
- children: [/* @__PURE__ */ _("h2", {
379
+ children: [/* @__PURE__ */ g("h2", {
380
380
  className: "text-lg font-semibold text-text-primary",
381
381
  children: "Access Denied"
382
- }), /* @__PURE__ */ _("p", {
382
+ }), /* @__PURE__ */ g("p", {
383
383
  className: "text-sm text-text-secondary",
384
384
  children: "You don't have permission to access this page."
385
385
  })]
386
386
  })
387
387
  });
388
388
  let $ = () => {
389
- S("/agents");
390
- }, _r = async (e) => {
391
- if (!(!j?.id || w)) {
392
- Xt(e);
389
+ x("/agents");
390
+ }, yr = async (e) => {
391
+ if (!(!j?.id || C)) {
392
+ $t(e);
393
393
  try {
394
- let t = e === "start" ? await Jt({ variables: { agentId: j.id } }) : await Yt({ variables: { agentId: j.id } }), n = e === "start" ? t.data?.startVibecontrolsAgent : t.data?.stopVibecontrolsAgent;
394
+ let t = e === "start" ? await Zt({ variables: { agentId: j.id } }) : await Qt({ variables: { agentId: j.id } }), n = e === "start" ? t.data?.startVibecontrolsAgent : t.data?.stopVibecontrolsAgent;
395
395
  if (!n || n.success === !1) throw Error(n?.error || `Failed to ${e} agent`);
396
- a.success(e === "start" ? C("agentDetails.agentStarted", "Agent started") : C("agentDetails.agentStopped", "Agent stopped")), await Promise.all([A(), M.refetch()]).catch(() => {});
396
+ a.success(e === "start" ? S("agentDetails.agentStarted", "Agent started") : S("agentDetails.agentStopped", "Agent stopped")), await Promise.all([A(), M.refetch()]).catch(() => {});
397
397
  } catch (t) {
398
398
  let n = t instanceof Error ? t.message : "", r = /unable to connect|fetch failed|timed? ?out|ECONN|agent returned 5|network/i.test(n);
399
- a.error(r ? C("agentDetails.agentUnreachable", `Couldn't reach the agent to ${e} it — it may be offline or its tunnel is down. Start it from the host with: vibe start`) : n || C("agentDetails.lifecycleFailed", "Failed to {{action}} agent", { action: e }));
399
+ a.error(r ? S("agentDetails.agentUnreachable", `Couldn't reach the agent to ${e} it — it may be offline or its tunnel is down. Start it from the host with: vibe start`) : n || S("agentDetails.lifecycleFailed", "Failed to {{action}} agent", { action: e }));
400
400
  } finally {
401
- Xt(null);
401
+ $t(null);
402
402
  }
403
403
  }
404
- }, vr = () => void _r("start"), yr = () => void _r("stop"), br = async () => {
405
- await Promise.all([A(), M.refetch()]).catch(() => {}), S("/agents");
406
- }, xr = () => {
407
- $t(!0);
408
- }, Sr = async () => {
404
+ }, br = () => void yr("start"), xr = () => void yr("stop"), Sr = async () => {
405
+ await Promise.all([A(), M.refetch()]).catch(() => {}), x("/agents");
406
+ }, Cr = () => {
407
+ nn(!0);
408
+ }, wr = async () => {
409
409
  if (!j?.id) return;
410
- let e = tn.trim();
410
+ let e = T.trim();
411
411
  if (!e || e === j.name) {
412
- T(!1);
412
+ w(!1);
413
413
  return;
414
414
  }
415
- rn(!0), D(null);
415
+ on(!0), D(null);
416
416
  try {
417
- let t = await Gt({ variables: {
417
+ let t = await Jt({ variables: {
418
418
  id: j.id,
419
419
  input: { name: e }
420
420
  } });
421
421
  if (t.error) throw t.error;
422
- T(!1);
422
+ w(!1);
423
423
  } catch (e) {
424
424
  D(e instanceof Error ? e.message : String(e));
425
425
  } finally {
426
- rn(!1);
426
+ on(!1);
427
427
  }
428
- }, Cr = () => {
429
- T(!1), nn(""), D(null);
430
- }, wr = async () => {
431
- let e = await gr();
428
+ }, Tr = () => {
429
+ w(!1), an(""), D(null);
430
+ }, Er = async () => {
431
+ let e = await vr();
432
432
  if (e) try {
433
- await Ae(e), ke() && je("API key copied"), ln(!0), setTimeout(() => ln(!1), 2e3);
433
+ await Ae(e), ke() && je("API key copied"), dn(!0), setTimeout(() => dn(!1), 2e3);
434
434
  } catch {
435
435
  console.error("Failed to copy API key");
436
436
  }
437
- }, Tr = async () => {
438
- O || await gr(), sn((e) => !e);
439
- }, Er = () => {
440
- j?.id && (Wn(!1), Kn(!1), Hn(!0));
441
437
  }, Dr = async () => {
438
+ O || await vr(), ln((e) => !e);
439
+ }, Or = () => {
440
+ j?.id && (Gn(!1), qn(!1), Un(!0));
441
+ }, kr = async () => {
442
442
  if (j?.id) {
443
- qn(!0);
443
+ Jn(!0);
444
444
  try {
445
- await Kt({ variables: {
445
+ await Yt({ variables: {
446
446
  id: j.id,
447
- uninstallFromTarget: Un,
448
- deleteTarget: Gn
449
- } }), Hn(!1), $();
447
+ uninstallFromTarget: Wn,
448
+ deleteTarget: Kn
449
+ } }), Un(!1), $();
450
450
  } catch (e) {
451
451
  console.error("Failed to remove agent:", e);
452
452
  } finally {
453
- qn(!1);
453
+ Jn(!1);
454
454
  }
455
455
  }
456
- }, Or = (e) => {
457
- S(`/sessions/${e}`);
458
- }, kr = () => {
459
- _n(!0);
460
456
  }, Ar = (e) => {
461
- S(`/vibes/${e}`);
462
- }, jr = (e) => {
463
- if (!e) return C("health.never", "Never");
457
+ x(`/sessions/${e}`);
458
+ }, jr = () => {
459
+ yn(!0);
460
+ }, Mr = (e) => {
461
+ x(`/vibes/${e}`);
462
+ }, Nr = (e) => {
463
+ if (!e) return S("health.never", "Never");
464
464
  let t = Date.now() - new Date(e).getTime();
465
- return t < 6e4 ? C("health.justNow", "Just now") : t < 36e5 ? C("agentDetails.minutesAgo", "{{count}}m ago", { count: Math.floor(t / 6e4) }) : t < 864e5 ? C("agentDetails.hoursAgo", "{{count}}h ago", { count: Math.floor(t / 36e5) }) : new Date(e).toLocaleDateString();
465
+ return t < 6e4 ? S("health.justNow", "Just now") : t < 36e5 ? S("agentDetails.minutesAgo", "{{count}}m ago", { count: Math.floor(t / 6e4) }) : t < 864e5 ? S("agentDetails.hoursAgo", "{{count}}h ago", { count: Math.floor(t / 36e5) }) : new Date(e).toLocaleDateString();
466
466
  };
467
- if (yn && !j) return /* @__PURE__ */ v(b, {
467
+ if (xn && !j) return /* @__PURE__ */ _(y, {
468
468
  className: "space-y-6 p-4 sm:p-6 bg-bg-surface min-h-screen",
469
- children: [/* @__PURE__ */ v("button", {
469
+ children: [/* @__PURE__ */ _("button", {
470
470
  type: "button",
471
471
  onClick: $,
472
472
  className: "flex items-center gap-2 text-text-secondary hover:text-text-primary transition-colors",
473
- children: [/* @__PURE__ */ _(d, { className: "size-4" }), C("agentDetails.backToAgents", "Back to Agents")]
474
- }), /* @__PURE__ */ _(Ne, { variant: "detail" })]
473
+ children: [/* @__PURE__ */ g(l, { className: "size-4" }), S("agentDetails.backToAgents", "Back to Agents")]
474
+ }), /* @__PURE__ */ g(Ne, { variant: "detail" })]
475
475
  });
476
- if (bn && !j) return /* @__PURE__ */ v(b, {
476
+ if (Sn && !j) return /* @__PURE__ */ _(y, {
477
477
  className: "space-y-6 p-4 sm:p-6 bg-bg-surface min-h-screen",
478
- children: [/* @__PURE__ */ v("button", {
478
+ children: [/* @__PURE__ */ _("button", {
479
479
  type: "button",
480
480
  onClick: $,
481
481
  className: "flex items-center gap-2 text-text-secondary hover:text-text-primary transition-colors",
482
- children: [/* @__PURE__ */ _(d, { className: "size-4" }), C("agentDetails.backToAgents", "Back to Agents")]
483
- }), /* @__PURE__ */ _(be, {
484
- title: C("agentDetails.failedLoad", "Failed to load agent"),
485
- message: bn.message,
482
+ children: [/* @__PURE__ */ g(l, { className: "size-4" }), S("agentDetails.backToAgents", "Back to Agents")]
483
+ }), /* @__PURE__ */ g(be, {
484
+ title: S("agentDetails.failedLoad", "Failed to load agent"),
485
+ message: Sn.message,
486
486
  onRetry: () => A()
487
487
  })]
488
488
  });
489
- if (!j) return /* @__PURE__ */ v(b, {
489
+ if (!j) return /* @__PURE__ */ _(y, {
490
490
  className: "space-y-6 p-4 sm:p-6 bg-bg-surface min-h-screen",
491
- children: [/* @__PURE__ */ v("button", {
491
+ children: [/* @__PURE__ */ _("button", {
492
492
  type: "button",
493
493
  onClick: $,
494
494
  className: "flex items-center gap-2 text-text-secondary hover:text-text-primary transition-colors",
495
- children: [/* @__PURE__ */ _(d, { className: "size-4" }), C("agentDetails.backToAgents", "Back to Agents")]
496
- }), /* @__PURE__ */ _(Se, {
497
- icon: /* @__PURE__ */ _(Ct, { className: "size-8 text-text-secondary" }),
498
- title: C("agentDetails.notFound", "Agent not found"),
499
- description: `${C("agentDetails.notFoundDescriptionPrefix", "No agent with ID")} "${x}" ${C("agentDetails.notFoundDescriptionSuffix", "exists")}`,
500
- action: /* @__PURE__ */ _(y, {
495
+ children: [/* @__PURE__ */ g(l, { className: "size-4" }), S("agentDetails.backToAgents", "Back to Agents")]
496
+ }), /* @__PURE__ */ g(Se, {
497
+ icon: /* @__PURE__ */ g(f, { className: "size-8 text-text-secondary" }),
498
+ title: S("agentDetails.notFound", "Agent not found"),
499
+ description: `${S("agentDetails.notFoundDescriptionPrefix", "No agent with ID")} "${b}" ${S("agentDetails.notFoundDescriptionSuffix", "exists")}`,
500
+ action: /* @__PURE__ */ g(v, {
501
501
  type: "button",
502
502
  onClick: $,
503
- children: C("agentDetails.backToAgents", "Back to Agents")
503
+ children: S("agentDetails.backToAgents", "Back to Agents")
504
504
  })
505
505
  })]
506
506
  });
507
- let Mr = [
507
+ let Pr = [
508
508
  {
509
509
  id: "overview",
510
- label: C("nav.overview", "Overview"),
511
- icon: Ct
510
+ label: S("nav.overview", "Overview"),
511
+ icon: f
512
512
  },
513
513
  {
514
514
  id: "profiles",
515
- label: C("agentDetails.profiles", "Profiles"),
516
- icon: kt
515
+ label: S("agentDetails.profiles", "Profiles"),
516
+ icon: At
517
517
  },
518
518
  {
519
519
  id: "security",
520
- label: C("agentDetails.security", "Security"),
521
- icon: Tt
520
+ label: S("agentDetails.security", "Security"),
521
+ icon: Et
522
522
  },
523
523
  {
524
524
  id: "plugins",
525
- label: C("agentDetails.plugins", "Plugins"),
526
- icon: p,
527
- badge: `${z.length}`
525
+ label: S("agentDetails.plugins", "Plugins"),
526
+ icon: d,
527
+ badge: `${B.length}`
528
528
  },
529
529
  {
530
530
  id: "sessions",
531
- label: C("nav.sessions", "Sessions"),
532
- icon: m,
531
+ label: S("nav.sessions", "Sessions"),
532
+ icon: p,
533
533
  badge: `${Z.length}`
534
534
  },
535
535
  {
536
536
  id: "logs",
537
- label: C("nav.logs", "Logs"),
538
- icon: St
537
+ label: S("nav.logs", "Logs"),
538
+ icon: wt
539
539
  },
540
540
  {
541
541
  id: "connection",
542
- label: C("agentDetails.connection", "Connection Log"),
543
- icon: St
542
+ label: S("agentDetails.connection", "Connection Log"),
543
+ icon: wt
544
544
  },
545
545
  {
546
546
  id: "vibes",
547
- label: C("nav.vibes", "Vibes"),
548
- icon: h,
547
+ label: S("nav.vibes", "Vibes"),
548
+ icon: m,
549
549
  badge: `${Q.length}`
550
550
  },
551
551
  {
552
552
  id: "notes",
553
- label: C("vibeDetails.notes", "Notes"),
554
- icon: mt
553
+ label: S("vibeDetails.notes", "Notes"),
554
+ icon: gt
555
555
  },
556
556
  {
557
557
  id: "aliases",
558
- label: C("agentDetails.aliases", "Aliases"),
559
- icon: ot
558
+ label: S("agentDetails.aliases", "Aliases"),
559
+ icon: ct
560
560
  },
561
561
  {
562
562
  id: "backup",
563
- label: C("agentDetails.backup", "Backup"),
564
- icon: lt
563
+ label: S("agentDetails.backup", "Backup"),
564
+ icon: dt
565
565
  },
566
566
  {
567
567
  id: "maintenance",
568
- label: C("agentDetails.maintenance.tab", "Maintenance"),
569
- icon: At
568
+ label: S("agentDetails.maintenance.tab", "Maintenance"),
569
+ icon: jt
570
570
  }
571
- ], Nr = Z.filter((e) => e.status === "RUNNING").length;
572
- return /* @__PURE__ */ v(b, {
571
+ ], Fr = Z.filter((e) => e.status === "RUNNING").length;
572
+ return /* @__PURE__ */ _(y, {
573
573
  className: "space-y-6 p-4 sm:p-6 bg-bg-surface min-h-screen",
574
574
  children: [
575
- /* @__PURE__ */ v("button", {
575
+ /* @__PURE__ */ _("button", {
576
576
  type: "button",
577
577
  onClick: $,
578
578
  className: "flex items-center gap-2 text-text-secondary hover:text-text-primary transition-colors",
579
- children: [/* @__PURE__ */ _(d, { className: "size-4" }), C("agentDetails.backToAgents", "Back to Agents")]
579
+ children: [/* @__PURE__ */ g(l, { className: "size-4" }), S("agentDetails.backToAgents", "Back to Agents")]
580
580
  }),
581
- /* @__PURE__ */ _(ye, {
581
+ /* @__PURE__ */ g(ye, {
582
582
  title: j.name,
583
- description: j.hostname || C("agentDetails.noHostnameConfigured", "No hostname configured"),
583
+ description: j.hostname || S("agentDetails.noHostnameConfigured", "No hostname configured"),
584
584
  breadcrumb: [{
585
- label: C("nav.agents", "Agents"),
586
- path: Vt ? `${Vt}/agents` : "/agents"
585
+ label: S("nav.agents", "Agents"),
586
+ path: Wt ? `${Wt}/agents` : "/agents"
587
587
  }, { label: j.name }],
588
- actions: /* @__PURE__ */ v("div", {
588
+ actions: /* @__PURE__ */ _("div", {
589
589
  className: "flex flex-wrap items-center gap-2",
590
590
  children: [
591
- Cn ? /* @__PURE__ */ v(y, {
591
+ Tn ? /* @__PURE__ */ _(v, {
592
592
  type: "button",
593
- onClick: vr,
594
- disabled: w !== null,
595
- "aria-busy": w === "start",
596
- children: [w === "start" ? /* @__PURE__ */ _(f, {
593
+ onClick: br,
594
+ disabled: C !== null,
595
+ "aria-busy": C === "start",
596
+ children: [C === "start" ? /* @__PURE__ */ g(u, {
597
597
  className: "size-4 animate-spin",
598
598
  "aria-hidden": "true"
599
- }) : /* @__PURE__ */ _(yt, {
599
+ }) : /* @__PURE__ */ g(xt, {
600
600
  className: "size-4",
601
601
  "aria-hidden": "true"
602
- }), w === "start" ? C("agentDetails.starting", "Starting…") : C("agentDetails.start", "Start")]
603
- }) : /* @__PURE__ */ v(y, {
602
+ }), C === "start" ? S("agentDetails.starting", "Starting…") : S("agentDetails.start", "Start")]
603
+ }) : /* @__PURE__ */ _(v, {
604
604
  type: "button",
605
605
  variant: "outline",
606
- onClick: yr,
607
- disabled: w !== null,
608
- "aria-busy": w === "stop",
609
- children: [w === "stop" ? /* @__PURE__ */ _(f, {
606
+ onClick: xr,
607
+ disabled: C !== null,
608
+ "aria-busy": C === "stop",
609
+ children: [C === "stop" ? /* @__PURE__ */ g(u, {
610
610
  className: "size-4 animate-spin",
611
611
  "aria-hidden": "true"
612
- }) : /* @__PURE__ */ _(Et, {
612
+ }) : /* @__PURE__ */ g(Dt, {
613
613
  className: "size-4",
614
614
  "aria-hidden": "true"
615
- }), w === "stop" ? C("agentDetails.stopping", "Stopping…") : C("sessions.stop", "Stop")]
615
+ }), C === "stop" ? S("agentDetails.stopping", "Stopping…") : S("sessions.stop", "Stop")]
616
616
  }),
617
- P === "DEGRADED" && /* @__PURE__ */ v(y, {
617
+ P === "DEGRADED" && /* @__PURE__ */ _(v, {
618
618
  type: "button",
619
619
  variant: "secondary",
620
- onClick: vr,
621
- disabled: w !== null,
622
- "aria-busy": w === "start",
620
+ onClick: br,
621
+ disabled: C !== null,
622
+ "aria-busy": C === "start",
623
623
  className: "text-status-warning-text hover:text-status-warning-text",
624
624
  title: N.get(j.id)?.errorMessage ? `Retry lifecycle/start — last error: ${N.get(j.id)?.errorMessage}` : "Retry lifecycle/start",
625
- children: [w === "start" ? /* @__PURE__ */ _(f, {
625
+ children: [C === "start" ? /* @__PURE__ */ g(u, {
626
626
  className: "size-4 animate-spin",
627
627
  "aria-hidden": "true"
628
- }) : /* @__PURE__ */ _(xt, {
628
+ }) : /* @__PURE__ */ g(Ct, {
629
629
  className: "size-4",
630
630
  "aria-hidden": "true"
631
- }), w === "start" ? C("agentDetails.reconnecting", "Reconnecting…") : C("agentDetails.reconnect", "Reconnect")]
631
+ }), C === "start" ? S("agentDetails.reconnecting", "Reconnecting…") : S("agentDetails.reconnect", "Reconnect")]
632
632
  }),
633
- /* @__PURE__ */ _(Ke, {
633
+ /* @__PURE__ */ g(Ke, {
634
634
  agentId: j.id,
635
635
  tunnelUrl: j.tunnelUrl || null,
636
636
  profile: F
637
637
  }),
638
- /* @__PURE__ */ v(y, {
638
+ /* @__PURE__ */ _(v, {
639
639
  type: "button",
640
640
  variant: "outline",
641
- onClick: xr,
642
- children: [/* @__PURE__ */ _(wt, {
641
+ onClick: Cr,
642
+ children: [/* @__PURE__ */ g(Tt, {
643
643
  className: "size-4",
644
644
  "aria-hidden": "true"
645
- }), C("agentDetails.configure", "Configure")]
645
+ }), S("agentDetails.configure", "Configure")]
646
646
  }),
647
- /* @__PURE__ */ _(Te, {
648
- ariaLabel: C("agentDetails.agentActions", "Agent actions"),
649
- title: C("agentDetails.agentActions", "Agent actions"),
647
+ /* @__PURE__ */ g(Te, {
648
+ ariaLabel: S("agentDetails.agentActions", "Agent actions"),
649
+ title: S("agentDetails.agentActions", "Agent actions"),
650
650
  align: "end",
651
651
  items: [
652
652
  {
653
653
  key: "ai-chat",
654
- label: C("agentDetails.aiChat", "AI Chat"),
655
- icon: nt,
656
- onSelect: () => S("/ai?contextLevel=agent")
654
+ label: S("agentDetails.aiChat", "AI Chat"),
655
+ icon: it,
656
+ onSelect: () => x("/ai?contextLevel=agent")
657
657
  },
658
658
  {
659
659
  key: "refresh",
660
- label: C("common.refresh", "Refresh"),
661
- icon: xt,
660
+ label: S("common.refresh", "Refresh"),
661
+ icon: Ct,
662
662
  onSelect: () => void A(),
663
- disabled: yn
663
+ disabled: xn
664
664
  },
665
665
  {
666
666
  key: "remove",
667
- label: C("sessions.remove", "Remove"),
668
- icon: Ot,
669
- onSelect: Er,
667
+ label: S("sessions.remove", "Remove"),
668
+ icon: kt,
669
+ onSelect: Or,
670
670
  variant: "danger",
671
671
  separatorBefore: !0
672
672
  }
@@ -675,127 +675,157 @@ function x() {
675
675
  ]
676
676
  })
677
677
  }),
678
- /* @__PURE__ */ _("div", {
678
+ /* @__PURE__ */ g(Lt, {
679
+ icon: /* @__PURE__ */ g(f, { className: "size-4" }),
680
+ children: S("agentDetails.purpose", "This page is the control panel for one agent — the program running on your machine that VibeControls uses to execute work. Here you check its health and connection, start or restart it, push gateway credentials, review its sessions and security, and copy the commands to (re)install it. Come here when an agent is degraded or you need to confirm it is reachable.")
681
+ }),
682
+ /* @__PURE__ */ g(It, {
683
+ storageKey: "vibecontrols-agent-details",
684
+ steps: [
685
+ {
686
+ id: "start-session",
687
+ label: S("agentDetails.next.startSession", "Start a session on this agent"),
688
+ description: S("agentDetails.next.startSessionDesc", "Open a terminal or task that runs on this machine."),
689
+ icon: /* @__PURE__ */ g(St, { className: "size-4" }),
690
+ onClick: jr
691
+ },
692
+ {
693
+ id: "check-connection",
694
+ label: S("agentDetails.next.checkConnection", "Check the connection"),
695
+ description: S("agentDetails.next.checkConnectionDesc", "Verify the tunnel URL and reachability on the Connection tab."),
696
+ icon: /* @__PURE__ */ g(f, { className: "size-4" }),
697
+ onClick: () => z("connection")
698
+ },
699
+ {
700
+ id: "review-security",
701
+ label: S("agentDetails.next.reviewSecurity", "Review security & credentials"),
702
+ description: S("agentDetails.next.reviewSecurityDesc", "Confirm gateway auth is pushed and scopes are correct."),
703
+ icon: /* @__PURE__ */ g(it, { className: "size-4" }),
704
+ onClick: () => z("security")
705
+ }
706
+ ]
707
+ }),
708
+ /* @__PURE__ */ g("div", {
679
709
  className: "flex items-center gap-2 -mt-2",
680
- children: en ? /* @__PURE__ */ v(g, { children: [
681
- /* @__PURE__ */ _("input", {
682
- ref: on,
710
+ children: rn ? /* @__PURE__ */ _(h, { children: [
711
+ /* @__PURE__ */ g("input", {
712
+ ref: cn,
683
713
  type: "text",
684
- value: tn,
685
- onChange: (e) => nn(e.target.value),
714
+ value: T,
715
+ onChange: (e) => an(e.target.value),
686
716
  onKeyDown: (e) => {
687
- e.key === "Enter" && !E ? Sr() : e.key === "Escape" && Cr();
717
+ e.key === "Enter" && !E ? wr() : e.key === "Escape" && Tr();
688
718
  },
689
719
  disabled: E,
690
720
  maxLength: 120,
691
- "aria-label": C("agentDetails.renameInput", "New agent name"),
721
+ "aria-label": S("agentDetails.renameInput", "New agent name"),
692
722
  className: "flex-1 max-w-md px-3 py-1.5 text-sm bg-bg-surface border border-border-subtle rounded-input text-text-primary placeholder:text-text-placeholder transition-colors focus:outline-none focus:ring-1 focus:ring-[var(--color-focus-ring)] focus:border-border-strong",
693
723
  placeholder: j.name,
694
724
  "data-testid": "agent-details-rename-input"
695
725
  }),
696
- /* @__PURE__ */ v("button", {
726
+ /* @__PURE__ */ _("button", {
697
727
  type: "button",
698
- onClick: () => void Sr(),
699
- disabled: !tn.trim() || tn.trim() === j.name || E,
728
+ onClick: () => void wr(),
729
+ disabled: !T.trim() || T.trim() === j.name || E,
700
730
  className: "inline-flex items-center gap-1.5 px-3 py-1.5 text-xs font-medium bg-action-primary-bg text-action-primary-text rounded-md hover:bg-action-primary-bgHover transition-colors disabled:opacity-60 disabled:cursor-not-allowed focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-border-focus",
701
731
  "data-testid": "agent-details-rename-save",
702
- children: [E ? /* @__PURE__ */ _(f, { className: "size-3.5 animate-spin" }) : /* @__PURE__ */ _(rt, { className: "size-3.5" }), C("agentDetails.saveName", "Save")]
732
+ children: [E ? /* @__PURE__ */ g(u, { className: "size-3.5 animate-spin" }) : /* @__PURE__ */ g(at, { className: "size-3.5" }), S("agentDetails.saveName", "Save")]
703
733
  }),
704
- /* @__PURE__ */ _("button", {
734
+ /* @__PURE__ */ g("button", {
705
735
  type: "button",
706
- onClick: Cr,
736
+ onClick: Tr,
707
737
  disabled: E,
708
738
  className: "inline-flex items-center gap-1.5 px-3 py-1.5 text-xs text-text-secondary hover:text-text-primary disabled:opacity-60",
709
739
  "data-testid": "agent-details-rename-cancel",
710
- children: C("common.cancel", "Cancel")
740
+ children: S("common.cancel", "Cancel")
711
741
  }),
712
- an && /* @__PURE__ */ _("span", {
742
+ sn && /* @__PURE__ */ g("span", {
713
743
  className: "text-xs text-status-error-text",
714
744
  role: "alert",
715
- children: an
745
+ children: sn
716
746
  })
717
- ] }) : /* @__PURE__ */ v("button", {
747
+ ] }) : /* @__PURE__ */ _("button", {
718
748
  type: "button",
719
749
  onClick: () => {
720
- D(null), nn(j.name), T(!0), requestAnimationFrame(() => on.current?.select());
750
+ D(null), an(j.name), w(!0), requestAnimationFrame(() => cn.current?.select());
721
751
  },
722
752
  className: "inline-flex items-center gap-1.5 text-xs text-text-secondary hover:text-text-primary transition-colors",
723
- title: C("agentDetails.renameTooltip", "Rename this agent"),
753
+ title: S("agentDetails.renameTooltip", "Rename this agent"),
724
754
  "data-testid": "agent-details-rename-trigger",
725
- children: [/* @__PURE__ */ _(dt, { className: "size-3.5" }), C("agentDetails.rename", "Rename")]
755
+ children: [/* @__PURE__ */ g(pt, { className: "size-3.5" }), S("agentDetails.rename", "Rename")]
726
756
  })
727
757
  }),
728
- P === "DEGRADED" && /* @__PURE__ */ v("div", {
758
+ P === "DEGRADED" && /* @__PURE__ */ _("div", {
729
759
  role: "status",
730
760
  "aria-live": "polite",
731
761
  className: "flex items-start gap-3 rounded-lg border border-status-warning-border bg-status-warning-bg-subtle px-4 py-3 text-sm text-text-primary",
732
762
  children: [
733
- /* @__PURE__ */ _(f, {
763
+ /* @__PURE__ */ g(u, {
734
764
  className: "size-4 mt-0.5 flex-shrink-0 animate-spin text-status-warning-text",
735
765
  "aria-hidden": "true"
736
766
  }),
737
- /* @__PURE__ */ v("div", {
767
+ /* @__PURE__ */ _("div", {
738
768
  className: "flex-1 min-w-0 space-y-1",
739
769
  children: [
740
- /* @__PURE__ */ _("p", {
770
+ /* @__PURE__ */ g("p", {
741
771
  className: "font-medium",
742
- children: C("agentDetails.degradedBanner.title", "Agent is degraded — auto-reconnecting in the background")
772
+ children: S("agentDetails.degradedBanner.title", "Agent is degraded — auto-reconnecting in the background")
743
773
  }),
744
- N.get(j.id)?.errorMessage && /* @__PURE__ */ _("p", {
774
+ N.get(j.id)?.errorMessage && /* @__PURE__ */ g("p", {
745
775
  className: "text-xs text-text-secondary",
746
- children: /* @__PURE__ */ _("span", {
776
+ children: /* @__PURE__ */ g("span", {
747
777
  className: "font-mono text-status-warning-text",
748
778
  children: N.get(j.id)?.errorMessage
749
779
  })
750
780
  }),
751
- /* @__PURE__ */ _("p", {
781
+ /* @__PURE__ */ g("p", {
752
782
  className: "text-xs text-text-secondary",
753
- children: C("agentDetails.degradedBanner.action", "Health probes run every ~30s; the badge flips back to Active automatically once a probe succeeds. You can click Reconnect above to retry now, or check the Connection tab for the probe history.")
783
+ children: S("agentDetails.degradedBanner.action", "Health probes run every ~30s; the badge flips back to Active automatically once a probe succeeds. You can click Reconnect above to retry now, or check the Connection tab for the probe history.")
754
784
  })
755
785
  ]
756
786
  }),
757
- /* @__PURE__ */ _("button", {
787
+ /* @__PURE__ */ g("button", {
758
788
  type: "button",
759
- onClick: () => Tn("connection"),
789
+ onClick: () => z("connection"),
760
790
  className: "text-xs font-medium text-text-link hover:underline flex-shrink-0 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-border-focus rounded",
761
- children: C("agentDetails.degradedBanner.viewLog", "View log →")
791
+ children: S("agentDetails.degradedBanner.viewLog", "View log →")
762
792
  })
763
793
  ]
764
794
  }),
765
- /* @__PURE__ */ v("div", {
795
+ /* @__PURE__ */ _("div", {
766
796
  className: "grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-4 gap-4",
767
797
  children: [
768
- /* @__PURE__ */ _(i, {
798
+ /* @__PURE__ */ g(i, {
769
799
  className: "p-4",
770
- children: /* @__PURE__ */ v("div", {
800
+ children: /* @__PURE__ */ _("div", {
771
801
  className: "flex items-center gap-3",
772
- children: [/* @__PURE__ */ _("div", {
802
+ children: [/* @__PURE__ */ g("div", {
773
803
  className: "size-10 rounded-lg bg-[var(--color-accent-soft)] flex items-center justify-center",
774
- children: /* @__PURE__ */ _(Ct, { className: "size-5 text-action-primary-bg" })
775
- }), /* @__PURE__ */ v("div", { children: [/* @__PURE__ */ _("p", {
804
+ children: /* @__PURE__ */ g(f, { className: "size-5 text-action-primary-bg" })
805
+ }), /* @__PURE__ */ _("div", { children: [/* @__PURE__ */ g("p", {
776
806
  className: "text-sm text-text-secondary",
777
- children: C("sessions.filterStatus", "Status")
778
- }), /* @__PURE__ */ _(Be, {
807
+ children: S("sessions.filterStatus", "Status")
808
+ }), /* @__PURE__ */ g(Be, {
779
809
  status: P,
780
810
  reason: N.get(j.id)?.errorMessage ?? (j.lastGatewayAuthPushStatus === "failed" ? j.lastGatewayAuthPushError ?? "Gateway-auth push failed" : null),
781
811
  linkTo: "?tab=connection",
782
812
  onClick: (e) => {
783
- e.preventDefault(), Tn("connection");
813
+ e.preventDefault(), z("connection");
784
814
  }
785
815
  })] })]
786
816
  })
787
817
  }),
788
- /* @__PURE__ */ _(i, {
818
+ /* @__PURE__ */ g(i, {
789
819
  className: "p-4",
790
- children: /* @__PURE__ */ v("div", {
820
+ children: /* @__PURE__ */ _("div", {
791
821
  className: "flex items-center gap-3",
792
- children: [/* @__PURE__ */ _("div", {
822
+ children: [/* @__PURE__ */ g("div", {
793
823
  className: "size-10 rounded-lg bg-[var(--color-accent-soft)] flex items-center justify-center",
794
- children: /* @__PURE__ */ _(ct, { className: "size-5 text-action-primary-bg" })
795
- }), /* @__PURE__ */ v("div", { children: [/* @__PURE__ */ _("p", {
824
+ children: /* @__PURE__ */ g(ut, { className: "size-5 text-action-primary-bg" })
825
+ }), /* @__PURE__ */ _("div", { children: [/* @__PURE__ */ g("p", {
796
826
  className: "text-sm text-text-secondary",
797
- children: C("analytics.platform", "Platform")
798
- }), /* @__PURE__ */ v("p", {
827
+ children: S("analytics.platform", "Platform")
828
+ }), /* @__PURE__ */ _("p", {
799
829
  className: "font-semibold text-text-primary",
800
830
  children: [
801
831
  j.platform,
@@ -805,51 +835,51 @@ function x() {
805
835
  })] })]
806
836
  })
807
837
  }),
808
- /* @__PURE__ */ _(i, {
838
+ /* @__PURE__ */ g(i, {
809
839
  className: "p-4",
810
- children: /* @__PURE__ */ v("div", {
840
+ children: /* @__PURE__ */ _("div", {
811
841
  className: "flex items-center gap-3",
812
- children: [/* @__PURE__ */ _("div", {
842
+ children: [/* @__PURE__ */ g("div", {
813
843
  className: "size-10 rounded-lg bg-[var(--color-accent-soft)] flex items-center justify-center",
814
- children: /* @__PURE__ */ _(ht, { className: "size-5 text-action-primary-bg" })
815
- }), /* @__PURE__ */ v("div", { children: [/* @__PURE__ */ _("p", {
844
+ children: /* @__PURE__ */ g(_t, { className: "size-5 text-action-primary-bg" })
845
+ }), /* @__PURE__ */ _("div", { children: [/* @__PURE__ */ g("p", {
816
846
  className: "text-sm text-text-secondary",
817
- children: C("agentDetails.version", "Version")
818
- }), /* @__PURE__ */ v("p", {
847
+ children: S("agentDetails.version", "Version")
848
+ }), /* @__PURE__ */ _("p", {
819
849
  className: "font-semibold text-text-primary",
820
850
  children: ["v", j.version]
821
851
  })] })]
822
852
  })
823
853
  }),
824
- /* @__PURE__ */ _(i, {
854
+ /* @__PURE__ */ g(i, {
825
855
  className: "p-4",
826
- children: /* @__PURE__ */ v("div", {
856
+ children: /* @__PURE__ */ _("div", {
827
857
  className: "flex items-center gap-3",
828
- children: [/* @__PURE__ */ _("div", {
858
+ children: [/* @__PURE__ */ g("div", {
829
859
  className: "size-10 rounded-lg bg-[var(--color-accent-soft)] flex items-center justify-center",
830
- children: /* @__PURE__ */ _(m, { className: "size-5 text-action-primary-bg" })
831
- }), /* @__PURE__ */ v("div", { children: [/* @__PURE__ */ _("p", {
860
+ children: /* @__PURE__ */ g(p, { className: "size-5 text-action-primary-bg" })
861
+ }), /* @__PURE__ */ _("div", { children: [/* @__PURE__ */ g("p", {
832
862
  className: "text-sm text-text-secondary",
833
- children: C("nav.sessions", "Sessions")
834
- }), /* @__PURE__ */ v("p", {
863
+ children: S("nav.sessions", "Sessions")
864
+ }), /* @__PURE__ */ _("p", {
835
865
  className: "font-semibold text-text-primary",
836
866
  children: [
837
- Nr,
867
+ Fr,
838
868
  " ",
839
- C("health.active", "active")
869
+ S("health.active", "active")
840
870
  ]
841
871
  })] })]
842
872
  })
843
873
  })
844
874
  ]
845
875
  }),
846
- /* @__PURE__ */ v("div", {
876
+ /* @__PURE__ */ _("div", {
847
877
  className: "flex items-end border-b border-border-default",
848
- children: [/* @__PURE__ */ _(Lt, {
849
- items: [...Mr.map(({ id: e, label: t, icon: n, badge: r }) => ({
878
+ children: [/* @__PURE__ */ g(Bt, {
879
+ items: [...Pr.map(({ id: e, label: t, icon: n, badge: r }) => ({
850
880
  id: e,
851
881
  label: t,
852
- icon: /* @__PURE__ */ _(n, {
882
+ icon: /* @__PURE__ */ g(n, {
853
883
  className: "size-4",
854
884
  "aria-hidden": "true"
855
885
  }),
@@ -859,86 +889,86 @@ function x() {
859
889
  label: e.contribution.title
860
890
  })) : []],
861
891
  activeTabId: R,
862
- onTabChange: Tn,
892
+ onTabChange: z,
863
893
  variant: "underline",
864
894
  className: "min-w-0 flex-1 border-b-0"
865
- }), I && j && /* @__PURE__ */ v("button", {
895
+ }), I && j && /* @__PURE__ */ _("button", {
866
896
  type: "button",
867
- onClick: () => Dn(!0),
897
+ onClick: () => On(!0),
868
898
  className: "-mb-px flex shrink-0 items-center gap-1 p-2 text-xs sm:text-sm border-b-2 border-transparent text-text-secondary hover:text-text-primary hover:border-border-default focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-border-focus rounded-t",
869
899
  title: "Install a UI plugin tab",
870
900
  "aria-label": "Add tab",
871
- children: [/* @__PURE__ */ _("span", {
901
+ children: [/* @__PURE__ */ g("span", {
872
902
  "aria-hidden": !0,
873
903
  children: "+"
874
- }), /* @__PURE__ */ _("span", {
904
+ }), /* @__PURE__ */ g("span", {
875
905
  className: "hidden sm:inline",
876
906
  children: "Add tab"
877
907
  })]
878
908
  })]
879
909
  }),
880
- /* @__PURE__ */ v(Ee, {
910
+ /* @__PURE__ */ _(Ee, {
881
911
  tabKey: R,
882
912
  children: [
883
- R === "overview" && /* @__PURE__ */ v("div", {
913
+ R === "overview" && /* @__PURE__ */ _("div", {
884
914
  className: "space-y-6",
885
915
  children: [
886
- /* @__PURE__ */ v(i, { children: [/* @__PURE__ */ _("div", {
916
+ /* @__PURE__ */ _(i, { children: [/* @__PURE__ */ g("div", {
887
917
  className: "p-4 border-b border-border-default",
888
- children: /* @__PURE__ */ v("h3", {
918
+ children: /* @__PURE__ */ _("h3", {
889
919
  className: "font-semibold text-text-primary flex items-center gap-2",
890
- children: [/* @__PURE__ */ _(it, { className: "size-5" }), C("agentDetails.capabilities", "Capabilities")]
920
+ children: [/* @__PURE__ */ g(ot, { className: "size-5" }), S("agentDetails.capabilities", "Capabilities")]
891
921
  })
892
- }), /* @__PURE__ */ _("div", {
922
+ }), /* @__PURE__ */ g("div", {
893
923
  className: "p-4",
894
- children: /* @__PURE__ */ _("div", {
924
+ children: /* @__PURE__ */ g("div", {
895
925
  className: "flex flex-wrap gap-2",
896
926
  children: j.capabilities && typeof j.capabilities == "object" && (Array.isArray(j.capabilities) ? j.capabilities.length > 0 : Object.keys(j.capabilities).length > 0) ? (Array.isArray(j.capabilities) ? j.capabilities : (() => {
897
927
  let e = j.capabilities, t = Object.keys(e);
898
928
  return t.length > 0 && t.every((e) => /^\d+$/.test(e)) ? Object.values(e) : t;
899
- })()).map((e) => /* @__PURE__ */ _("span", {
929
+ })()).map((e) => /* @__PURE__ */ g("span", {
900
930
  className: "px-2 py-0.5 bg-bg-sunken text-text-secondary text-xs rounded-pill",
901
931
  children: e
902
- }, e)) : /* @__PURE__ */ v("div", {
932
+ }, e)) : /* @__PURE__ */ _("div", {
903
933
  className: "space-y-2 text-sm text-text-secondary",
904
934
  children: [
905
- /* @__PURE__ */ _("p", { children: C("agentDetails.noCapabilitiesConfigured", "No capabilities configured") }),
906
- /* @__PURE__ */ v("p", {
935
+ /* @__PURE__ */ g("p", { children: S("agentDetails.noCapabilitiesConfigured", "No capabilities configured") }),
936
+ /* @__PURE__ */ _("p", {
907
937
  className: "text-xs",
908
938
  children: [
909
939
  "Capabilities are feature tags the agent advertises to vibes (e.g.",
910
940
  " ",
911
- /* @__PURE__ */ _("code", {
941
+ /* @__PURE__ */ g("code", {
912
942
  className: "text-text-primary",
913
943
  children: "docker"
914
944
  }),
915
945
  ",",
916
946
  " ",
917
- /* @__PURE__ */ _("code", {
947
+ /* @__PURE__ */ g("code", {
918
948
  className: "text-text-primary",
919
949
  children: "gpu"
920
950
  }),
921
951
  ",",
922
952
  " ",
923
- /* @__PURE__ */ _("code", {
953
+ /* @__PURE__ */ g("code", {
924
954
  className: "text-text-primary",
925
955
  children: "node20"
926
956
  }),
927
957
  ",",
928
958
  " ",
929
- /* @__PURE__ */ _("code", {
959
+ /* @__PURE__ */ g("code", {
930
960
  className: "text-text-primary",
931
961
  children: "git"
932
962
  }),
933
963
  "). Vibes use them to pick an agent that can run their workloads."
934
964
  ]
935
965
  }),
936
- /* @__PURE__ */ v("p", {
966
+ /* @__PURE__ */ _("p", {
937
967
  className: "text-xs",
938
968
  children: [
939
969
  "Add from the agent host CLI:",
940
970
  " ",
941
- /* @__PURE__ */ _("code", {
971
+ /* @__PURE__ */ g("code", {
942
972
  className: "text-text-primary",
943
973
  children: "vibe agent caps add docker gpu"
944
974
  }),
@@ -949,33 +979,33 @@ function x() {
949
979
  })
950
980
  })
951
981
  })] }),
952
- /* @__PURE__ */ v(i, { children: [/* @__PURE__ */ _("div", {
982
+ /* @__PURE__ */ _(i, { children: [/* @__PURE__ */ g("div", {
953
983
  className: "p-4 border-b border-border-default",
954
- children: /* @__PURE__ */ v("h3", {
984
+ children: /* @__PURE__ */ _("h3", {
955
985
  className: "font-semibold text-text-primary flex items-center gap-2",
956
- children: [/* @__PURE__ */ _(Dt, { className: "size-5" }), "Tags"]
986
+ children: [/* @__PURE__ */ g(Ot, { className: "size-5" }), "Tags"]
957
987
  })
958
- }), /* @__PURE__ */ _("div", {
988
+ }), /* @__PURE__ */ g("div", {
959
989
  className: "p-4",
960
- children: /* @__PURE__ */ _(xe, {
990
+ children: /* @__PURE__ */ g(xe, {
961
991
  entityType: "VIBECONTROLS_AGENT",
962
992
  entityId: j.id
963
993
  })
964
994
  })] }),
965
- j.tunnelUrl && /* @__PURE__ */ v(i, { children: [/* @__PURE__ */ _("div", {
995
+ j.tunnelUrl && /* @__PURE__ */ _(i, { children: [/* @__PURE__ */ g("div", {
966
996
  className: "p-4 border-b border-border-default",
967
- children: /* @__PURE__ */ v("h3", {
997
+ children: /* @__PURE__ */ _("h3", {
968
998
  className: "font-semibold text-text-primary flex items-center gap-2",
969
- children: [/* @__PURE__ */ _(h, { className: "size-5" }), C("health.tunnel", "Tunnel")]
999
+ children: [/* @__PURE__ */ g(m, { className: "size-5" }), S("health.tunnel", "Tunnel")]
970
1000
  })
971
- }), /* @__PURE__ */ _("div", {
1001
+ }), /* @__PURE__ */ g("div", {
972
1002
  className: "p-4",
973
- children: /* @__PURE__ */ v("div", {
1003
+ children: /* @__PURE__ */ _("div", {
974
1004
  className: "flex-1 min-w-0",
975
- children: [/* @__PURE__ */ _("p", {
1005
+ children: [/* @__PURE__ */ g("p", {
976
1006
  className: "text-sm text-text-secondary mb-1",
977
- children: C("agentDetails.tunnelUrl", "Tunnel URL")
978
- }), /* @__PURE__ */ _("a", {
1007
+ children: S("agentDetails.tunnelUrl", "Tunnel URL")
1008
+ }), /* @__PURE__ */ g("a", {
979
1009
  href: j.tunnelUrl,
980
1010
  target: "_blank",
981
1011
  rel: "noopener noreferrer",
@@ -984,351 +1014,351 @@ function x() {
984
1014
  })]
985
1015
  })
986
1016
  })] }),
987
- /* @__PURE__ */ v(i, { children: [/* @__PURE__ */ _("div", {
1017
+ /* @__PURE__ */ _(i, { children: [/* @__PURE__ */ g("div", {
988
1018
  className: "p-4 border-b border-border-default",
989
- children: /* @__PURE__ */ v("h3", {
1019
+ children: /* @__PURE__ */ _("h3", {
990
1020
  className: "font-semibold text-text-primary flex items-center gap-2",
991
- children: [/* @__PURE__ */ _(wt, { className: "size-5" }), C("agentDetails.configuration", "Configuration")]
1021
+ children: [/* @__PURE__ */ g(Tt, { className: "size-5" }), S("agentDetails.configuration", "Configuration")]
992
1022
  })
993
- }), /* @__PURE__ */ v("div", {
1023
+ }), /* @__PURE__ */ _("div", {
994
1024
  className: "p-4 space-y-4",
995
- children: [/* @__PURE__ */ v("div", {
1025
+ children: [/* @__PURE__ */ _("div", {
996
1026
  className: "grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-4",
997
1027
  children: [
998
- /* @__PURE__ */ v("div", { children: [/* @__PURE__ */ _("p", {
1028
+ /* @__PURE__ */ _("div", { children: [/* @__PURE__ */ g("p", {
999
1029
  className: "text-sm text-text-secondary",
1000
- children: C("analytics.platform", "Platform")
1001
- }), /* @__PURE__ */ _("p", {
1030
+ children: S("analytics.platform", "Platform")
1031
+ }), /* @__PURE__ */ g("p", {
1002
1032
  className: "font-medium text-text-primary",
1003
1033
  children: j.platform
1004
1034
  })] }),
1005
- /* @__PURE__ */ v("div", { children: [/* @__PURE__ */ _("p", {
1035
+ /* @__PURE__ */ _("div", { children: [/* @__PURE__ */ g("p", {
1006
1036
  className: "text-sm text-text-secondary",
1007
- children: C("analytics.architecture", "Architecture")
1008
- }), /* @__PURE__ */ _("p", {
1037
+ children: S("analytics.architecture", "Architecture")
1038
+ }), /* @__PURE__ */ g("p", {
1009
1039
  className: "font-medium text-text-primary",
1010
1040
  children: j.architecture
1011
1041
  })] }),
1012
- /* @__PURE__ */ v("div", { children: [/* @__PURE__ */ _("p", {
1042
+ /* @__PURE__ */ _("div", { children: [/* @__PURE__ */ g("p", {
1013
1043
  className: "text-sm text-text-secondary",
1014
- children: C("agentDetails.version", "Version")
1015
- }), /* @__PURE__ */ _("p", {
1044
+ children: S("agentDetails.version", "Version")
1045
+ }), /* @__PURE__ */ g("p", {
1016
1046
  className: "font-medium text-text-primary",
1017
1047
  children: j.version
1018
1048
  })] })
1019
1049
  ]
1020
- }), j.aiContext && /* @__PURE__ */ v("div", { children: [/* @__PURE__ */ _("p", {
1050
+ }), j.aiContext && /* @__PURE__ */ _("div", { children: [/* @__PURE__ */ g("p", {
1021
1051
  className: "text-sm text-text-secondary mb-1",
1022
1052
  children: "AI Context"
1023
- }), /* @__PURE__ */ _("pre", {
1053
+ }), /* @__PURE__ */ g("pre", {
1024
1054
  className: "text-sm text-text-primary bg-bg-sunken border border-border-default rounded-md p-3 whitespace-pre-wrap font-sans",
1025
1055
  children: j.aiContext
1026
1056
  })] })]
1027
1057
  })] }),
1028
- /* @__PURE__ */ v(i, { children: [/* @__PURE__ */ _("div", {
1058
+ /* @__PURE__ */ _(i, { children: [/* @__PURE__ */ g("div", {
1029
1059
  className: "p-4 border-b border-border-default",
1030
- children: /* @__PURE__ */ v("h3", {
1060
+ children: /* @__PURE__ */ _("h3", {
1031
1061
  className: "font-semibold text-text-primary flex items-center gap-2",
1032
- children: [/* @__PURE__ */ _(at, { className: "size-5" }), C("vibeDetails.timeline", "Timeline")]
1062
+ children: [/* @__PURE__ */ g(st, { className: "size-5" }), S("vibeDetails.timeline", "Timeline")]
1033
1063
  })
1034
- }), /* @__PURE__ */ _("div", {
1064
+ }), /* @__PURE__ */ g("div", {
1035
1065
  className: "p-4",
1036
- children: /* @__PURE__ */ v("div", {
1066
+ children: /* @__PURE__ */ _("div", {
1037
1067
  className: "grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-4 text-sm",
1038
1068
  children: [
1039
- /* @__PURE__ */ v("div", { children: [/* @__PURE__ */ _("p", {
1069
+ /* @__PURE__ */ _("div", { children: [/* @__PURE__ */ g("p", {
1040
1070
  className: "text-text-secondary",
1041
- children: C("health.lastHeartbeat", "Last Heartbeat")
1042
- }), /* @__PURE__ */ _("p", {
1071
+ children: S("health.lastHeartbeat", "Last Heartbeat")
1072
+ }), /* @__PURE__ */ g("p", {
1043
1073
  className: "font-medium text-text-primary",
1044
- children: jr(j.lastHeartbeat)
1074
+ children: Nr(j.lastHeartbeat)
1045
1075
  })] }),
1046
- /* @__PURE__ */ v("div", { children: [/* @__PURE__ */ _("p", {
1076
+ /* @__PURE__ */ _("div", { children: [/* @__PURE__ */ g("p", {
1047
1077
  className: "text-text-secondary",
1048
- children: C("vibeDetails.created", "Created")
1049
- }), /* @__PURE__ */ _("p", {
1078
+ children: S("vibeDetails.created", "Created")
1079
+ }), /* @__PURE__ */ g("p", {
1050
1080
  className: "font-medium text-text-primary",
1051
- children: jr(j.createdAt)
1081
+ children: Nr(j.createdAt)
1052
1082
  })] }),
1053
- /* @__PURE__ */ v("div", { children: [/* @__PURE__ */ _("p", {
1083
+ /* @__PURE__ */ _("div", { children: [/* @__PURE__ */ g("p", {
1054
1084
  className: "text-text-secondary",
1055
- children: C("vibeDetails.updated", "Updated")
1056
- }), /* @__PURE__ */ _("p", {
1085
+ children: S("vibeDetails.updated", "Updated")
1086
+ }), /* @__PURE__ */ g("p", {
1057
1087
  className: "font-medium text-text-primary",
1058
- children: jr(j.updatedAt)
1088
+ children: Nr(j.updatedAt)
1059
1089
  })] })
1060
1090
  ]
1061
1091
  })
1062
1092
  })] })
1063
1093
  ]
1064
1094
  }),
1065
- R === "profiles" && /* @__PURE__ */ _(Ye, { agentId: j.id }),
1066
- R === "security" && /* @__PURE__ */ v("div", {
1095
+ R === "profiles" && /* @__PURE__ */ g(Ye, { agentId: j.id }),
1096
+ R === "security" && /* @__PURE__ */ _("div", {
1067
1097
  className: "space-y-6",
1068
1098
  children: [
1069
- /* @__PURE__ */ v(i, { children: [/* @__PURE__ */ _("div", {
1099
+ /* @__PURE__ */ _(i, { children: [/* @__PURE__ */ g("div", {
1070
1100
  className: "p-4 border-b border-border-default",
1071
- children: /* @__PURE__ */ v("h3", {
1101
+ children: /* @__PURE__ */ _("h3", {
1072
1102
  className: "font-semibold text-text-primary flex items-center gap-2",
1073
- children: [/* @__PURE__ */ _(_t, { className: "size-5" }), C("agentDetails.agentApiKey", "Agent API Key")]
1103
+ children: [/* @__PURE__ */ g(yt, { className: "size-5" }), S("agentDetails.agentApiKey", "Agent API Key")]
1074
1104
  })
1075
- }), /* @__PURE__ */ v("div", {
1105
+ }), /* @__PURE__ */ _("div", {
1076
1106
  className: "p-4",
1077
- children: [j.tunnelUrl ? /* @__PURE__ */ v("div", {
1107
+ children: [j.tunnelUrl ? /* @__PURE__ */ _("div", {
1078
1108
  className: "flex items-center gap-3",
1079
1109
  children: [
1080
- /* @__PURE__ */ v("div", {
1110
+ /* @__PURE__ */ _("div", {
1081
1111
  className: "flex-1 min-w-0",
1082
- children: [/* @__PURE__ */ _("code", {
1112
+ children: [/* @__PURE__ */ g("code", {
1083
1113
  className: "text-sm font-mono text-text-primary bg-bg-sunken px-3 py-2 rounded-md block truncate",
1084
- children: O && k ? k : dn ? C("agentDetails.revealLoading", "Revealing…") : "•".repeat(32)
1085
- }), pn && /* @__PURE__ */ _("p", {
1114
+ children: O && k ? k : pn ? S("agentDetails.revealLoading", "Revealing…") : "•".repeat(32)
1115
+ }), hn && /* @__PURE__ */ g("p", {
1086
1116
  className: "text-xs text-status-error-text mt-1",
1087
- children: pn
1117
+ children: hn
1088
1118
  })]
1089
1119
  }),
1090
- /* @__PURE__ */ _("button", {
1120
+ /* @__PURE__ */ g("button", {
1091
1121
  type: "button",
1092
- onClick: () => void Tr(),
1093
- disabled: dn,
1122
+ onClick: () => void Dr(),
1123
+ disabled: pn,
1094
1124
  className: "p-2 rounded hover:bg-bg-sunken transition-colors flex-shrink-0 disabled:opacity-50 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-border-focus",
1095
- "aria-label": O ? C("agentDetails.hideApiKey", "Hide API key") : C("agentDetails.showApiKey", "Show API key"),
1096
- title: O ? C("agentDetails.hideApiKey", "Hide API key") : C("agentDetails.showApiKey", "Show API key"),
1097
- children: _(O ? pt : ft, {
1125
+ "aria-label": O ? S("agentDetails.hideApiKey", "Hide API key") : S("agentDetails.showApiKey", "Show API key"),
1126
+ title: O ? S("agentDetails.hideApiKey", "Hide API key") : S("agentDetails.showApiKey", "Show API key"),
1127
+ children: g(O ? ht : mt, {
1098
1128
  className: "size-4 text-text-secondary",
1099
1129
  "aria-hidden": "true"
1100
1130
  })
1101
1131
  }),
1102
- /* @__PURE__ */ _("button", {
1132
+ /* @__PURE__ */ g("button", {
1103
1133
  type: "button",
1104
- onClick: wr,
1134
+ onClick: Er,
1105
1135
  className: "p-2 rounded hover:bg-bg-sunken transition-colors flex-shrink-0 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-border-focus",
1106
- "aria-label": C("agentDetails.copyApiKey", "Copy API key"),
1107
- title: C("agentDetails.copyApiKey", "Copy API key"),
1108
- children: cn ? /* @__PURE__ */ _(rt, {
1136
+ "aria-label": S("agentDetails.copyApiKey", "Copy API key"),
1137
+ title: S("agentDetails.copyApiKey", "Copy API key"),
1138
+ children: un ? /* @__PURE__ */ g(at, {
1109
1139
  className: "size-4 text-status-success-text",
1110
1140
  "aria-hidden": "true"
1111
- }) : /* @__PURE__ */ _(st, {
1141
+ }) : /* @__PURE__ */ g(lt, {
1112
1142
  className: "size-4 text-text-secondary",
1113
1143
  "aria-hidden": "true"
1114
1144
  })
1115
1145
  })
1116
1146
  ]
1117
- }) : /* @__PURE__ */ _("p", {
1147
+ }) : /* @__PURE__ */ g("p", {
1118
1148
  className: "text-sm text-text-secondary",
1119
1149
  children: "Agent tunnel not configured. Bring the agent online first."
1120
- }), /* @__PURE__ */ _("p", {
1150
+ }), /* @__PURE__ */ g("p", {
1121
1151
  className: "mt-2 text-xs text-text-muted",
1122
1152
  children: "This key authenticates requests sent to the agent. The key is revealed only on explicit operator action and every read is audited."
1123
1153
  })]
1124
1154
  })] }),
1125
- /* @__PURE__ */ _(Le, {
1155
+ /* @__PURE__ */ g(Le, {
1126
1156
  agentId: j.id,
1127
1157
  currentTunnelUrl: j.tunnelUrl,
1128
1158
  onUpdated: () => A()
1129
1159
  }),
1130
- /* @__PURE__ */ _(Re, {
1160
+ /* @__PURE__ */ g(Re, {
1131
1161
  agentId: j.id,
1132
1162
  storageAdapter: j.storageAdapter,
1133
1163
  dbPath: j.dbPath,
1134
1164
  hasStorageOptions: j.hasStorageOptions,
1135
1165
  onUpdated: () => A()
1136
1166
  }),
1137
- /* @__PURE__ */ _(He, {
1167
+ /* @__PURE__ */ g(He, {
1138
1168
  agent: j,
1139
1169
  onUpdate: () => A()
1140
1170
  }),
1141
- /* @__PURE__ */ _(Ve, { agent: {
1171
+ /* @__PURE__ */ g(Ve, { agent: {
1142
1172
  id: j.id,
1143
1173
  profile: F ?? "default"
1144
1174
  } })
1145
1175
  ]
1146
1176
  }),
1147
1177
  R === "plugins" && (() => {
1148
- let e = q.toLowerCase(), t = z.filter((t) => !e || t.pluginName.toLowerCase().includes(e) || t.packageName.toLowerCase().includes(e) || t.description?.toLowerCase().includes(e) || t.tags?.some((t) => t.toLowerCase().includes(e))), n = Mn.filter((t) => !t.installed && (!e || t.name.toLowerCase().includes(e) || t.packageName.toLowerCase().includes(e) || t.description.toLowerCase().includes(e))), r = z.filter((e) => e.hasUI), ee = r.filter((t) => !e || t.pluginName.toLowerCase().includes(e) || t.packageName.toLowerCase().includes(e)), te = [
1178
+ let e = q.toLowerCase(), t = B.filter((t) => !e || t.pluginName.toLowerCase().includes(e) || t.packageName.toLowerCase().includes(e) || t.description?.toLowerCase().includes(e) || t.tags?.some((t) => t.toLowerCase().includes(e))), n = Nn.filter((t) => !t.installed && (!e || t.name.toLowerCase().includes(e) || t.packageName.toLowerCase().includes(e) || t.description.toLowerCase().includes(e))), r = B.filter((e) => e.hasUI), ee = r.filter((t) => !e || t.pluginName.toLowerCase().includes(e) || t.packageName.toLowerCase().includes(e)), te = [
1149
1179
  {
1150
1180
  id: "installed",
1151
1181
  label: "Installed",
1152
1182
  count: t.length,
1153
- icon: p
1183
+ icon: d
1154
1184
  },
1155
1185
  {
1156
1186
  id: "available",
1157
1187
  label: "Available",
1158
1188
  count: n.length,
1159
- icon: ut
1189
+ icon: ft
1160
1190
  },
1161
1191
  {
1162
1192
  id: "store",
1163
1193
  label: "Store",
1164
1194
  count: J.length,
1165
- icon: ut
1195
+ icon: ft
1166
1196
  },
1167
1197
  {
1168
1198
  id: "ui-plugins",
1169
1199
  label: "UI Plugins",
1170
1200
  count: ee.length,
1171
- icon: vt
1201
+ icon: bt
1172
1202
  }
1173
1203
  ];
1174
- return /* @__PURE__ */ _("div", {
1204
+ return /* @__PURE__ */ g("div", {
1175
1205
  className: "space-y-6",
1176
- children: /* @__PURE__ */ v(i, { children: [/* @__PURE__ */ v("div", {
1206
+ children: /* @__PURE__ */ _(i, { children: [/* @__PURE__ */ _("div", {
1177
1207
  className: "p-4 border-b border-border-default space-y-3",
1178
1208
  children: [
1179
- /* @__PURE__ */ v("div", {
1209
+ /* @__PURE__ */ _("div", {
1180
1210
  className: "flex items-center justify-between gap-2",
1181
- children: [/* @__PURE__ */ v("h3", {
1211
+ children: [/* @__PURE__ */ _("h3", {
1182
1212
  className: "font-semibold text-text-primary flex items-center gap-2 min-w-0",
1183
1213
  children: [
1184
- /* @__PURE__ */ _(p, {
1214
+ /* @__PURE__ */ g(d, {
1185
1215
  className: "size-5",
1186
1216
  "aria-hidden": "true"
1187
1217
  }),
1188
1218
  "Plugins",
1189
- z.length > 0 && /* @__PURE__ */ v("span", {
1219
+ B.length > 0 && /* @__PURE__ */ _("span", {
1190
1220
  className: "text-sm font-normal text-text-secondary",
1191
1221
  children: [
1192
1222
  "(",
1193
- z.filter((e) => e.isCore).length,
1223
+ B.filter((e) => e.isCore).length,
1194
1224
  " core,",
1195
1225
  " ",
1196
- z.filter((e) => !e.isCore).length,
1226
+ B.filter((e) => !e.isCore).length,
1197
1227
  " external)"
1198
1228
  ]
1199
1229
  })
1200
1230
  ]
1201
- }), /* @__PURE__ */ _("button", {
1231
+ }), /* @__PURE__ */ g("button", {
1202
1232
  type: "button",
1203
1233
  onClick: X,
1204
- disabled: Pn,
1234
+ disabled: Fn,
1205
1235
  className: "p-1.5 text-text-secondary hover:bg-bg-sunken rounded transition-colors disabled:opacity-50 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-border-focus",
1206
- "aria-label": C("agentDetails.refreshPlugins", "Refresh plugins"),
1207
- title: C("agentDetails.refreshPlugins", "Refresh plugins"),
1208
- children: /* @__PURE__ */ _(xt, {
1209
- className: `size-4 ${Pn ? "animate-spin" : ""}`,
1236
+ "aria-label": S("agentDetails.refreshPlugins", "Refresh plugins"),
1237
+ title: S("agentDetails.refreshPlugins", "Refresh plugins"),
1238
+ children: /* @__PURE__ */ g(Ct, {
1239
+ className: `size-4 ${Fn ? "animate-spin" : ""}`,
1210
1240
  "aria-hidden": "true"
1211
1241
  })
1212
1242
  })]
1213
1243
  }),
1214
- /* @__PURE__ */ _(Ce, {
1244
+ /* @__PURE__ */ g(Ce, {
1215
1245
  value: q,
1216
- onChange: Qn,
1217
- placeholder: C("agentDetails.searchPluginsPlaceholder", "Search plugins by name, package, description, or tag...")
1246
+ onChange: er,
1247
+ placeholder: S("agentDetails.searchPluginsPlaceholder", "Search plugins by name, package, description, or tag...")
1218
1248
  }),
1219
- /* @__PURE__ */ _(Lt, {
1249
+ /* @__PURE__ */ g(Bt, {
1220
1250
  items: te.map(({ id: e, label: t, count: n, icon: r }) => ({
1221
1251
  id: e,
1222
1252
  label: t,
1223
- icon: /* @__PURE__ */ _(r, {
1253
+ icon: /* @__PURE__ */ g(r, {
1224
1254
  className: "size-4",
1225
1255
  "aria-hidden": "true"
1226
1256
  }),
1227
1257
  badge: n
1228
1258
  })),
1229
- activeTabId: G,
1230
- onTabChange: (e) => K(e),
1259
+ activeTabId: K,
1260
+ onTabChange: (e) => $n(e),
1231
1261
  variant: "pills",
1232
1262
  size: "sm",
1233
1263
  className: "max-w-full overflow-x-auto"
1234
1264
  })
1235
1265
  ]
1236
- }), /* @__PURE__ */ v("div", {
1266
+ }), /* @__PURE__ */ _("div", {
1237
1267
  className: "p-4 space-y-4",
1238
1268
  children: [
1239
- In && /* @__PURE__ */ v("div", {
1269
+ Ln && /* @__PURE__ */ _("div", {
1240
1270
  role: "alert",
1241
1271
  className: "flex items-center gap-2 p-3 bg-status-error-bg-subtle border border-status-error-border text-status-error-text rounded-md text-sm",
1242
1272
  children: [
1243
- /* @__PURE__ */ _(jt, {
1273
+ /* @__PURE__ */ g(Mt, {
1244
1274
  className: "size-4 flex-shrink-0",
1245
1275
  "aria-hidden": "true"
1246
1276
  }),
1247
- /* @__PURE__ */ _("span", {
1277
+ /* @__PURE__ */ g("span", {
1248
1278
  className: "flex-1 min-w-0 break-words",
1249
- children: In
1279
+ children: Ln
1250
1280
  }),
1251
- /* @__PURE__ */ _("button", {
1281
+ /* @__PURE__ */ g("button", {
1252
1282
  type: "button",
1253
- onClick: () => H(null),
1254
- "aria-label": C("agentDetails.dismissError", "Dismiss error"),
1283
+ onClick: () => U(null),
1284
+ "aria-label": S("agentDetails.dismissError", "Dismiss error"),
1255
1285
  className: "flex-shrink-0 p-0.5 hover:bg-status-error-border/40 rounded focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-border-focus",
1256
- children: /* @__PURE__ */ _(jt, {
1286
+ children: /* @__PURE__ */ g(Mt, {
1257
1287
  className: "size-3.5",
1258
1288
  "aria-hidden": "true"
1259
1289
  })
1260
1290
  })
1261
1291
  ]
1262
1292
  }),
1263
- !j?.isActive && /* @__PURE__ */ v("p", {
1293
+ !j?.isActive && /* @__PURE__ */ _("p", {
1264
1294
  role: "status",
1265
1295
  className: "text-sm text-text-muted flex items-center gap-1.5",
1266
- children: [/* @__PURE__ */ _(gt, {
1296
+ children: [/* @__PURE__ */ g(vt, {
1267
1297
  className: "size-4 flex-shrink-0",
1268
1298
  "aria-hidden": "true"
1269
1299
  }), "Agent is offline — showing known plugin catalog. Live data will load when the agent is reachable."]
1270
1300
  }),
1271
- G === "installed" && /* @__PURE__ */ _(g, { children: t.length > 0 ? /* @__PURE__ */ _("div", {
1301
+ K === "installed" && /* @__PURE__ */ g(h, { children: t.length > 0 ? /* @__PURE__ */ g("div", {
1272
1302
  className: "space-y-2",
1273
- children: t.map((e) => /* @__PURE__ */ v("div", {
1303
+ children: t.map((e) => /* @__PURE__ */ _("div", {
1274
1304
  className: "flex flex-col sm:flex-row sm:items-center justify-between gap-2 p-3 bg-bg-sunken rounded-lg",
1275
- children: [/* @__PURE__ */ v("div", {
1305
+ children: [/* @__PURE__ */ _("div", {
1276
1306
  className: "min-w-0",
1277
1307
  children: [
1278
- /* @__PURE__ */ v("p", {
1308
+ /* @__PURE__ */ _("p", {
1279
1309
  className: "text-sm font-medium text-text-primary flex items-center gap-1.5 flex-wrap",
1280
1310
  children: [
1281
1311
  e.pluginName,
1282
- /* @__PURE__ */ _("span", {
1312
+ /* @__PURE__ */ g("span", {
1283
1313
  className: "text-xs text-text-muted font-normal",
1284
1314
  children: e.version === "latest" ? e.version : `v${e.version}`
1285
1315
  }),
1286
- e.isCore && /* @__PURE__ */ _("span", {
1316
+ e.isCore && /* @__PURE__ */ g("span", {
1287
1317
  className: "inline-flex items-center px-1.5 py-0.5 text-xs bg-bg-sunken text-text-secondary rounded",
1288
1318
  children: "core"
1289
1319
  }),
1290
- e.loaded && /* @__PURE__ */ _("span", {
1320
+ e.loaded && /* @__PURE__ */ g("span", {
1291
1321
  className: "inline-flex items-center px-1.5 py-0.5 text-xs bg-status-success-bg-subtle text-status-success-text rounded",
1292
1322
  children: "loaded"
1293
1323
  }),
1294
- e.hasProviders && /* @__PURE__ */ _("span", {
1324
+ e.hasProviders && /* @__PURE__ */ g("span", {
1295
1325
  className: "inline-flex items-center px-1.5 py-0.5 text-xs bg-bg-sunken text-text-secondary rounded",
1296
1326
  children: "provider"
1297
1327
  }),
1298
- e.hasUI && /* @__PURE__ */ _("span", {
1328
+ e.hasUI && /* @__PURE__ */ g("span", {
1299
1329
  className: "inline-flex items-center px-1.5 py-0.5 text-xs bg-bg-sunken text-text-secondary rounded",
1300
1330
  children: "ui"
1301
1331
  })
1302
1332
  ]
1303
1333
  }),
1304
- e.description && /* @__PURE__ */ _("p", {
1334
+ e.description && /* @__PURE__ */ g("p", {
1305
1335
  className: "text-xs text-text-secondary mt-0.5",
1306
1336
  children: e.description
1307
1337
  }),
1308
- /* @__PURE__ */ v("div", {
1338
+ /* @__PURE__ */ _("div", {
1309
1339
  className: "flex items-center gap-2 mt-0.5 flex-wrap",
1310
1340
  children: [
1311
- !e.isCore && /* @__PURE__ */ _("span", {
1341
+ !e.isCore && /* @__PURE__ */ g("span", {
1312
1342
  className: "text-xs text-text-muted font-mono",
1313
1343
  children: e.packageName
1314
1344
  }),
1315
- e.cliCommand && /* @__PURE__ */ v("span", {
1345
+ e.cliCommand && /* @__PURE__ */ _("span", {
1316
1346
  className: "text-xs text-text-muted",
1317
1347
  children: [
1318
1348
  "cli:",
1319
1349
  " ",
1320
- /* @__PURE__ */ v("code", {
1350
+ /* @__PURE__ */ _("code", {
1321
1351
  className: "text-xs font-mono",
1322
1352
  children: ["vibe ", e.cliCommand]
1323
1353
  })
1324
1354
  ]
1325
1355
  }),
1326
- e.apiPrefix && /* @__PURE__ */ v("span", {
1356
+ e.apiPrefix && /* @__PURE__ */ _("span", {
1327
1357
  className: "text-xs text-text-muted",
1328
1358
  children: [
1329
1359
  "api:",
1330
1360
  " ",
1331
- /* @__PURE__ */ _("code", {
1361
+ /* @__PURE__ */ g("code", {
1332
1362
  className: "text-xs font-mono",
1333
1363
  children: e.apiPrefix
1334
1364
  })
@@ -1336,173 +1366,173 @@ function x() {
1336
1366
  })
1337
1367
  ]
1338
1368
  }),
1339
- e.tags && e.tags.length > 0 && /* @__PURE__ */ _("div", {
1369
+ e.tags && e.tags.length > 0 && /* @__PURE__ */ g("div", {
1340
1370
  className: "flex gap-1 mt-1 flex-wrap",
1341
- children: e.tags.map((e) => /* @__PURE__ */ _("span", {
1371
+ children: e.tags.map((e) => /* @__PURE__ */ g("span", {
1342
1372
  className: "inline-flex px-1.5 py-0.5 text-xs bg-bg-sunken text-text-muted rounded",
1343
1373
  children: e
1344
1374
  }, e))
1345
1375
  })
1346
1376
  ]
1347
- }), /* @__PURE__ */ v("div", {
1377
+ }), /* @__PURE__ */ _("div", {
1348
1378
  className: "flex flex-wrap items-center gap-2 flex-shrink-0 sm:ml-3",
1349
1379
  children: [
1350
- e.hasUI && /* @__PURE__ */ v(y, {
1380
+ e.hasUI && /* @__PURE__ */ _(v, {
1351
1381
  type: "button",
1352
1382
  variant: "outline",
1353
1383
  size: "sm",
1354
- onClick: () => K("ui-plugins"),
1384
+ onClick: () => $n("ui-plugins"),
1355
1385
  title: `Open ${e.pluginName} UI`,
1356
- children: [/* @__PURE__ */ _(vt, {
1386
+ children: [/* @__PURE__ */ g(bt, {
1357
1387
  className: "size-3",
1358
1388
  "aria-hidden": "true"
1359
1389
  }), "Open UI"]
1360
1390
  }),
1361
- !e.isCore && /* @__PURE__ */ v(y, {
1391
+ !e.isCore && /* @__PURE__ */ _(v, {
1362
1392
  type: "button",
1363
1393
  variant: "outline",
1364
1394
  size: "sm",
1365
- onClick: () => fr(e.packageName),
1366
- disabled: B === e.packageName,
1367
- title: C("agentDetails.updatePlugin", "Update plugin (latest or a specific version)"),
1368
- children: [B === e.packageName ? /* @__PURE__ */ _(f, {
1395
+ onClick: () => mr(e.packageName),
1396
+ disabled: V === e.packageName,
1397
+ title: S("agentDetails.updatePlugin", "Update plugin (latest or a specific version)"),
1398
+ children: [V === e.packageName ? /* @__PURE__ */ g(u, {
1369
1399
  className: "size-3 animate-spin",
1370
1400
  "aria-hidden": "true"
1371
- }) : /* @__PURE__ */ _(tt, {
1401
+ }) : /* @__PURE__ */ g(rt, {
1372
1402
  className: "size-3",
1373
1403
  "aria-hidden": "true"
1374
- }), C("agentDetails.update", "Update")]
1404
+ }), S("agentDetails.update", "Update")]
1375
1405
  }),
1376
- !e.isCore && /* @__PURE__ */ v(y, {
1406
+ !e.isCore && /* @__PURE__ */ _(v, {
1377
1407
  type: "button",
1378
1408
  variant: "outline",
1379
1409
  size: "sm",
1380
- onClick: () => ur(e.packageName),
1381
- disabled: B === e.packageName,
1410
+ onClick: () => fr(e.packageName),
1411
+ disabled: V === e.packageName,
1382
1412
  className: "text-status-error-text hover:bg-status-error-bg-subtle hover:text-status-error-text",
1383
- children: [B === e.packageName ? /* @__PURE__ */ _(f, {
1413
+ children: [V === e.packageName ? /* @__PURE__ */ g(u, {
1384
1414
  className: "size-3 animate-spin",
1385
1415
  "aria-hidden": "true"
1386
- }) : /* @__PURE__ */ _(Ot, {
1416
+ }) : /* @__PURE__ */ g(kt, {
1387
1417
  className: "size-3",
1388
1418
  "aria-hidden": "true"
1389
- }), C("sessions.remove", "Remove")]
1419
+ }), S("sessions.remove", "Remove")]
1390
1420
  })
1391
1421
  ]
1392
1422
  })]
1393
1423
  }, e.packageName))
1394
- }) : /* @__PURE__ */ _("p", {
1424
+ }) : /* @__PURE__ */ g("p", {
1395
1425
  className: "text-sm text-text-muted",
1396
1426
  children: q ? "No installed plugins match your search." : "No plugin data available. Check agent connectivity or refresh."
1397
1427
  }) }),
1398
- G === "available" && /* @__PURE__ */ _(g, { children: n.length > 0 ? /* @__PURE__ */ _("div", {
1428
+ K === "available" && /* @__PURE__ */ g(h, { children: n.length > 0 ? /* @__PURE__ */ g("div", {
1399
1429
  className: "space-y-2",
1400
- children: n.map((e) => /* @__PURE__ */ v("div", {
1430
+ children: n.map((e) => /* @__PURE__ */ _("div", {
1401
1431
  className: "flex flex-col sm:flex-row sm:items-center justify-between gap-2 p-3 bg-bg-sunken rounded-lg",
1402
- children: [/* @__PURE__ */ v("div", {
1432
+ children: [/* @__PURE__ */ _("div", {
1403
1433
  className: "min-w-0",
1404
1434
  children: [
1405
- /* @__PURE__ */ _("p", {
1435
+ /* @__PURE__ */ g("p", {
1406
1436
  className: "text-sm font-medium text-text-primary",
1407
1437
  children: e.name
1408
1438
  }),
1409
- /* @__PURE__ */ _("p", {
1439
+ /* @__PURE__ */ g("p", {
1410
1440
  className: "text-xs text-text-secondary mt-0.5",
1411
1441
  children: e.description
1412
1442
  }),
1413
- /* @__PURE__ */ _("p", {
1443
+ /* @__PURE__ */ g("p", {
1414
1444
  className: "text-xs text-text-muted font-mono mt-0.5",
1415
1445
  children: e.packageName
1416
1446
  })
1417
1447
  ]
1418
- }), /* @__PURE__ */ v(y, {
1448
+ }), /* @__PURE__ */ _(v, {
1419
1449
  type: "button",
1420
1450
  size: "sm",
1421
- onClick: () => lr(e.packageName),
1422
- disabled: B === e.packageName,
1451
+ onClick: () => dr(e.packageName),
1452
+ disabled: V === e.packageName,
1423
1453
  className: "flex-shrink-0 sm:ml-3",
1424
- children: [B === e.packageName ? /* @__PURE__ */ _(f, {
1454
+ children: [V === e.packageName ? /* @__PURE__ */ g(u, {
1425
1455
  className: "size-3 animate-spin",
1426
1456
  "aria-hidden": "true"
1427
- }) : /* @__PURE__ */ _(ut, {
1457
+ }) : /* @__PURE__ */ g(ft, {
1428
1458
  className: "size-3",
1429
1459
  "aria-hidden": "true"
1430
1460
  }), "Install"]
1431
1461
  })]
1432
1462
  }, e.packageName))
1433
- }) : /* @__PURE__ */ _("p", {
1463
+ }) : /* @__PURE__ */ g("p", {
1434
1464
  className: "text-sm text-text-muted",
1435
- children: q ? "No available plugins match your search." : Mn.every((e) => e.installed) ? "All available plugins are already installed." : "No available plugins found."
1465
+ children: q ? "No available plugins match your search." : Nn.every((e) => e.installed) ? "All available plugins are already installed." : "No available plugins found."
1436
1466
  }) }),
1437
- G === "store" && /* @__PURE__ */ v(g, { children: [nr && /* @__PURE__ */ v("div", {
1467
+ K === "store" && /* @__PURE__ */ _(h, { children: [ir && /* @__PURE__ */ _("div", {
1438
1468
  role: "alert",
1439
1469
  className: "flex items-center gap-2 p-3 bg-status-error-bg-subtle border border-status-error-border text-status-error-text rounded-md text-sm",
1440
- children: [/* @__PURE__ */ _(jt, {
1470
+ children: [/* @__PURE__ */ g(Mt, {
1441
1471
  className: "size-4 flex-shrink-0",
1442
1472
  "aria-hidden": "true"
1443
- }), /* @__PURE__ */ _("span", {
1473
+ }), /* @__PURE__ */ g("span", {
1444
1474
  className: "flex-1 min-w-0 break-words",
1445
- children: nr
1475
+ children: ir
1446
1476
  })]
1447
- }), er ? /* @__PURE__ */ _("p", {
1477
+ }), nr ? /* @__PURE__ */ g("p", {
1448
1478
  role: "status",
1449
1479
  className: "text-sm text-text-muted",
1450
1480
  children: "Loading purchased plugins…"
1451
- }) : J.length === 0 ? /* @__PURE__ */ v("div", {
1481
+ }) : J.length === 0 ? /* @__PURE__ */ _("div", {
1452
1482
  className: "py-8 text-center",
1453
- children: [/* @__PURE__ */ _("p", {
1483
+ children: [/* @__PURE__ */ g("p", {
1454
1484
  className: "text-sm text-text-muted",
1455
1485
  children: "No plugins purchased from the Burdenoff store yet."
1456
- }), /* @__PURE__ */ _("a", {
1486
+ }), /* @__PURE__ */ g("a", {
1457
1487
  href: "/store/marketplace",
1458
1488
  className: "mt-2 inline-flex items-center gap-1 text-xs font-semibold text-text-link hover:underline",
1459
1489
  children: "Browse the store →"
1460
1490
  })]
1461
- }) : /* @__PURE__ */ _("div", {
1491
+ }) : /* @__PURE__ */ g("div", {
1462
1492
  className: "space-y-2",
1463
1493
  children: J.map((e) => {
1464
- let t = (e.product?.manifest ?? {}).digital?.install, n = typeof t?.packageName == "string" ? t.packageName : null, r = z.some((e) => e.packageName === n);
1465
- return /* @__PURE__ */ v("div", {
1494
+ let t = (e.product?.manifest ?? {}).digital?.install, n = typeof t?.packageName == "string" ? t.packageName : null, r = B.some((e) => e.packageName === n);
1495
+ return /* @__PURE__ */ _("div", {
1466
1496
  className: "flex flex-col sm:flex-row sm:items-center justify-between gap-2 p-3 bg-bg-sunken rounded-lg",
1467
- children: [/* @__PURE__ */ v("div", {
1497
+ children: [/* @__PURE__ */ _("div", {
1468
1498
  className: "flex items-start gap-3 min-w-0 flex-1",
1469
- children: [e.product?.icon ? /* @__PURE__ */ _("img", {
1499
+ children: [e.product?.icon ? /* @__PURE__ */ g("img", {
1470
1500
  src: e.product.icon,
1471
1501
  alt: "",
1472
1502
  className: "size-10 rounded-md object-cover flex-shrink-0"
1473
- }) : /* @__PURE__ */ _("div", {
1503
+ }) : /* @__PURE__ */ g("div", {
1474
1504
  className: "size-10 flex-shrink-0 rounded-md bg-bg-sunken flex items-center justify-center",
1475
- children: /* @__PURE__ */ _(p, {
1505
+ children: /* @__PURE__ */ g(d, {
1476
1506
  className: "size-5 text-text-muted",
1477
1507
  "aria-hidden": "true"
1478
1508
  })
1479
- }), /* @__PURE__ */ v("div", {
1509
+ }), /* @__PURE__ */ _("div", {
1480
1510
  className: "min-w-0 flex-1",
1481
1511
  children: [
1482
- /* @__PURE__ */ v("div", {
1512
+ /* @__PURE__ */ _("div", {
1483
1513
  className: "flex items-center gap-2",
1484
- children: [/* @__PURE__ */ _("h4", {
1514
+ children: [/* @__PURE__ */ g("h4", {
1485
1515
  className: "text-sm font-semibold text-text-primary truncate",
1486
1516
  children: e.product?.name ?? "Unknown"
1487
- }), e.licenseKey && /* @__PURE__ */ _("span", {
1517
+ }), e.licenseKey && /* @__PURE__ */ g("span", {
1488
1518
  className: "text-xs bg-status-success-bg-subtle text-status-success-text px-1.5 py-0.5 rounded-full",
1489
1519
  children: "Licensed"
1490
1520
  })]
1491
1521
  }),
1492
- n && /* @__PURE__ */ _("p", {
1522
+ n && /* @__PURE__ */ g("p", {
1493
1523
  className: "text-xs text-text-muted font-mono truncate",
1494
1524
  children: n
1495
1525
  }),
1496
- e.product?.description && /* @__PURE__ */ _("p", {
1526
+ e.product?.description && /* @__PURE__ */ g("p", {
1497
1527
  className: "text-xs text-text-secondary line-clamp-2 mt-1",
1498
1528
  children: e.product.description
1499
1529
  })
1500
1530
  ]
1501
1531
  })]
1502
- }), /* @__PURE__ */ _(y, {
1532
+ }), /* @__PURE__ */ g(v, {
1503
1533
  type: "button",
1504
1534
  size: "sm",
1505
- onClick: () => void hr(e.productId, e.licenseKey),
1535
+ onClick: () => void _r(e.productId, e.licenseKey),
1506
1536
  disabled: r || Y === e.productId || !n,
1507
1537
  "aria-busy": Y === e.productId,
1508
1538
  className: "flex-shrink-0",
@@ -1511,7 +1541,7 @@ function x() {
1511
1541
  }, e.id);
1512
1542
  })
1513
1543
  })] }),
1514
- G === "ui-plugins" && /* @__PURE__ */ _(g, { children: r.length > 0 || j?.tunnelUrl ? /* @__PURE__ */ _(Ge, {
1544
+ K === "ui-plugins" && /* @__PURE__ */ g(h, { children: r.length > 0 || j?.tunnelUrl ? /* @__PURE__ */ g(Ge, {
1515
1545
  availablePlugins: [...j?.tunnelUrl ? [{
1516
1546
  pluginName: "code-server",
1517
1547
  displayName: "Code Server (VS Code)",
@@ -1527,14 +1557,14 @@ function x() {
1527
1557
  tunnelUrl: j?.tunnelUrl || null,
1528
1558
  agentId: j?.id ?? null,
1529
1559
  profile: F
1530
- }) : /* @__PURE__ */ _("p", {
1560
+ }) : /* @__PURE__ */ g("p", {
1531
1561
  className: "text-sm text-text-muted",
1532
1562
  children: q ? "No UI plugins match your search." : "No plugins with UI are currently installed."
1533
1563
  }) }),
1534
- Pn && z.length === 0 && /* @__PURE__ */ v("div", {
1564
+ Fn && B.length === 0 && /* @__PURE__ */ _("div", {
1535
1565
  role: "status",
1536
1566
  className: "flex items-center gap-2 text-sm text-text-secondary",
1537
- children: [/* @__PURE__ */ _(f, {
1567
+ children: [/* @__PURE__ */ g(u, {
1538
1568
  className: "size-4 animate-spin",
1539
1569
  "aria-hidden": "true"
1540
1570
  }), "Loading plugins..."]
@@ -1543,144 +1573,144 @@ function x() {
1543
1573
  })] })
1544
1574
  });
1545
1575
  })(),
1546
- R === "sessions" && /* @__PURE__ */ v(i, { children: [/* @__PURE__ */ v("div", {
1576
+ R === "sessions" && /* @__PURE__ */ _(i, { children: [/* @__PURE__ */ _("div", {
1547
1577
  className: "p-4 border-b border-border-default flex items-center justify-between gap-3 flex-wrap",
1548
- children: [/* @__PURE__ */ v("h3", {
1578
+ children: [/* @__PURE__ */ _("h3", {
1549
1579
  className: "font-semibold text-text-primary flex items-center gap-2",
1550
1580
  children: [
1551
- /* @__PURE__ */ _(m, { className: "size-5" }),
1552
- C("nav.sessions", "Sessions"),
1581
+ /* @__PURE__ */ g(p, { className: "size-5" }),
1582
+ S("nav.sessions", "Sessions"),
1553
1583
  " (",
1554
1584
  Z.length,
1555
1585
  ")"
1556
1586
  ]
1557
- }), /* @__PURE__ */ _(It, {
1587
+ }), /* @__PURE__ */ g(zt, {
1558
1588
  permission: Me.SESSION_CREATE,
1559
1589
  deniedBehavior: "disable",
1560
1590
  deniedTooltip: "You don't have permission to create sessions",
1561
- children: /* @__PURE__ */ v(y, {
1591
+ children: /* @__PURE__ */ _(v, {
1562
1592
  type: "button",
1563
1593
  size: "sm",
1564
1594
  "data-testid": "create-session-btn",
1565
- onClick: kr,
1566
- children: [/* @__PURE__ */ _(bt, {
1595
+ onClick: jr,
1596
+ children: [/* @__PURE__ */ g(St, {
1567
1597
  className: "size-4",
1568
1598
  "aria-hidden": "true"
1569
- }), C("sessions.createSession", "Create Session")]
1599
+ }), S("sessions.createSession", "Create Session")]
1570
1600
  })
1571
1601
  })]
1572
- }), Z.length > 0 ? /* @__PURE__ */ _("div", {
1602
+ }), Z.length > 0 ? /* @__PURE__ */ g("div", {
1573
1603
  className: "divide-y divide-border-default",
1574
- children: Z.map((e) => /* @__PURE__ */ v("div", {
1604
+ children: Z.map((e) => /* @__PURE__ */ _("div", {
1575
1605
  role: "button",
1576
1606
  tabIndex: 0,
1577
1607
  onKeyDown: (t) => {
1578
- t.target === t.currentTarget && (t.key === "Enter" || t.key === " ") && (t.preventDefault(), Or(e.id));
1608
+ t.target === t.currentTarget && (t.key === "Enter" || t.key === " ") && (t.preventDefault(), Ar(e.id));
1579
1609
  },
1580
- onClick: () => Or(e.id),
1610
+ onClick: () => Ar(e.id),
1581
1611
  className: "p-4 flex flex-col sm:flex-row items-start sm:items-center justify-between gap-2 cursor-pointer hover:bg-bg-sunken/50 transition-colors duration-150 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-border-focus focus-visible:ring-inset",
1582
- children: [/* @__PURE__ */ v("div", {
1612
+ children: [/* @__PURE__ */ _("div", {
1583
1613
  className: "flex items-center gap-3 min-w-0",
1584
- children: [/* @__PURE__ */ _(m, {
1614
+ children: [/* @__PURE__ */ g(p, {
1585
1615
  className: "size-5 text-text-secondary flex-shrink-0",
1586
1616
  "aria-hidden": "true"
1587
- }), /* @__PURE__ */ v("div", {
1617
+ }), /* @__PURE__ */ _("div", {
1588
1618
  className: "min-w-0",
1589
- children: [/* @__PURE__ */ _("p", {
1619
+ children: [/* @__PURE__ */ g("p", {
1590
1620
  className: "font-medium text-text-primary truncate",
1591
1621
  children: e.name
1592
- }), /* @__PURE__ */ _("p", {
1622
+ }), /* @__PURE__ */ g("p", {
1593
1623
  className: "text-sm text-text-secondary truncate",
1594
1624
  children: e.type
1595
1625
  })]
1596
1626
  })]
1597
- }), /* @__PURE__ */ _(we, { status: e.status })]
1627
+ }), /* @__PURE__ */ g(we, { status: e.status })]
1598
1628
  }, e.id))
1599
- }) : /* @__PURE__ */ v("div", {
1629
+ }) : /* @__PURE__ */ _("div", {
1600
1630
  className: "p-6 text-center text-text-secondary flex flex-col items-center gap-3",
1601
- children: [/* @__PURE__ */ _("span", { children: C("agentDetails.noSessionsOnAgent", "No sessions on this agent") }), /* @__PURE__ */ _(It, {
1631
+ children: [/* @__PURE__ */ g("span", { children: S("agentDetails.noSessionsOnAgent", "No sessions on this agent") }), /* @__PURE__ */ g(zt, {
1602
1632
  permission: Me.SESSION_CREATE,
1603
1633
  deniedBehavior: "disable",
1604
1634
  deniedTooltip: "You don't have permission to create sessions",
1605
- children: /* @__PURE__ */ v(y, {
1635
+ children: /* @__PURE__ */ _(v, {
1606
1636
  type: "button",
1607
1637
  size: "sm",
1608
1638
  "data-testid": "create-session-empty-btn",
1609
- onClick: kr,
1610
- children: [/* @__PURE__ */ _(bt, {
1639
+ onClick: jr,
1640
+ children: [/* @__PURE__ */ g(St, {
1611
1641
  className: "size-4",
1612
1642
  "aria-hidden": "true"
1613
- }), C("sessions.createSession", "Create Session")]
1643
+ }), S("sessions.createSession", "Create Session")]
1614
1644
  })
1615
1645
  })]
1616
1646
  })] }),
1617
- R === "connection" && /* @__PURE__ */ _(i, {
1647
+ R === "connection" && /* @__PURE__ */ g(i, {
1618
1648
  className: "min-h-[60vh]",
1619
- children: /* @__PURE__ */ _(Fe, {
1649
+ children: /* @__PURE__ */ g(Fe, {
1620
1650
  agentId: j.id,
1621
1651
  agentName: j.name
1622
1652
  })
1623
1653
  }),
1624
- R === "logs" && /* @__PURE__ */ v(i, { children: [/* @__PURE__ */ _("div", {
1654
+ R === "logs" && /* @__PURE__ */ _(i, { children: [/* @__PURE__ */ g("div", {
1625
1655
  className: "p-4 border-b border-border-default flex items-center justify-between",
1626
- children: /* @__PURE__ */ v("h3", {
1656
+ children: /* @__PURE__ */ _("h3", {
1627
1657
  className: "font-semibold text-text-primary flex items-center gap-2",
1628
- children: [/* @__PURE__ */ _(St, { className: "size-5" }), C("nav.logs", "Logs")]
1658
+ children: [/* @__PURE__ */ g(wt, { className: "size-5" }), S("nav.logs", "Logs")]
1629
1659
  })
1630
- }), /* @__PURE__ */ _("div", {
1660
+ }), /* @__PURE__ */ g("div", {
1631
1661
  className: "p-4",
1632
- children: /* @__PURE__ */ _(Je, {
1662
+ children: /* @__PURE__ */ g(Je, {
1633
1663
  agentId: j.id,
1634
1664
  profile: F,
1635
1665
  className: "min-h-[28rem]"
1636
1666
  })
1637
1667
  })] }),
1638
- R === "vibes" && /* @__PURE__ */ v(i, { children: [/* @__PURE__ */ _("div", {
1668
+ R === "vibes" && /* @__PURE__ */ _(i, { children: [/* @__PURE__ */ g("div", {
1639
1669
  className: "p-4 border-b border-border-default flex items-center justify-between",
1640
- children: /* @__PURE__ */ v("h3", {
1670
+ children: /* @__PURE__ */ _("h3", {
1641
1671
  className: "font-semibold text-text-primary flex items-center gap-2",
1642
1672
  children: [
1643
- /* @__PURE__ */ _(h, { className: "size-5" }),
1644
- C("nav.vibes", "Vibes"),
1673
+ /* @__PURE__ */ g(m, { className: "size-5" }),
1674
+ S("nav.vibes", "Vibes"),
1645
1675
  " (",
1646
1676
  Q.length,
1647
1677
  ")"
1648
1678
  ]
1649
1679
  })
1650
- }), Q.length > 0 ? /* @__PURE__ */ _("div", {
1680
+ }), Q.length > 0 ? /* @__PURE__ */ g("div", {
1651
1681
  className: "divide-y divide-border-default",
1652
- children: Q.map((e) => /* @__PURE__ */ v("div", {
1682
+ children: Q.map((e) => /* @__PURE__ */ _("div", {
1653
1683
  role: "button",
1654
1684
  tabIndex: 0,
1655
1685
  onKeyDown: (t) => {
1656
- t.target === t.currentTarget && (t.key === "Enter" || t.key === " ") && (t.preventDefault(), Ar(e.id));
1686
+ t.target === t.currentTarget && (t.key === "Enter" || t.key === " ") && (t.preventDefault(), Mr(e.id));
1657
1687
  },
1658
- onClick: () => Ar(e.id),
1688
+ onClick: () => Mr(e.id),
1659
1689
  className: "p-4 flex flex-col sm:flex-row items-start sm:items-center justify-between gap-2 cursor-pointer hover:bg-bg-sunken/50 transition-colors duration-150 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-border-focus focus-visible:ring-inset",
1660
- children: [/* @__PURE__ */ v("div", {
1690
+ children: [/* @__PURE__ */ _("div", {
1661
1691
  className: "flex items-center gap-3 min-w-0",
1662
- children: [/* @__PURE__ */ _(h, {
1692
+ children: [/* @__PURE__ */ g(m, {
1663
1693
  className: "size-5 text-text-secondary flex-shrink-0",
1664
1694
  "aria-hidden": "true"
1665
- }), /* @__PURE__ */ v("div", {
1695
+ }), /* @__PURE__ */ _("div", {
1666
1696
  className: "min-w-0",
1667
- children: [/* @__PURE__ */ _("p", {
1697
+ children: [/* @__PURE__ */ g("p", {
1668
1698
  className: "font-medium text-text-primary truncate",
1669
1699
  children: e.name
1670
- }), /* @__PURE__ */ _("p", {
1700
+ }), /* @__PURE__ */ g("p", {
1671
1701
  className: "text-sm text-text-secondary truncate",
1672
1702
  children: e.type
1673
1703
  })]
1674
1704
  })]
1675
- }), /* @__PURE__ */ _(we, { status: e.status })]
1705
+ }), /* @__PURE__ */ g(we, { status: e.status })]
1676
1706
  }, e.id))
1677
- }) : /* @__PURE__ */ _("div", {
1707
+ }) : /* @__PURE__ */ g("div", {
1678
1708
  className: "p-6 text-center text-text-secondary",
1679
- children: C("agentDetails.noVibesUsingAgent", "No vibes using this agent")
1709
+ children: S("agentDetails.noVibesUsingAgent", "No vibes using this agent")
1680
1710
  })] }),
1681
- R === "notes" && /* @__PURE__ */ _("div", {
1711
+ R === "notes" && /* @__PURE__ */ g("div", {
1682
1712
  className: "space-y-6",
1683
- children: /* @__PURE__ */ _(Xe, {
1713
+ children: /* @__PURE__ */ g(Xe, {
1684
1714
  context: "agent",
1685
1715
  agentVibes: Q.map((e) => ({
1686
1716
  id: e.id,
@@ -1688,43 +1718,43 @@ function x() {
1688
1718
  }))
1689
1719
  })
1690
1720
  }),
1691
- R === "aliases" && /* @__PURE__ */ _("div", {
1721
+ R === "aliases" && /* @__PURE__ */ g("div", {
1692
1722
  className: "space-y-6",
1693
- children: /* @__PURE__ */ _(ze, { agent: {
1723
+ children: /* @__PURE__ */ g(ze, { agent: {
1694
1724
  id: j.id,
1695
1725
  profile: j.metadata?.profile ?? "default"
1696
1726
  } })
1697
1727
  }),
1698
- R === "backup" && j.tunnelUrl && /* @__PURE__ */ _(Pe, {
1728
+ R === "backup" && j.tunnelUrl && /* @__PURE__ */ g(Pe, {
1699
1729
  agentId: j.id,
1700
1730
  profile: F
1701
1731
  }),
1702
- R === "backup" && !j.tunnelUrl && /* @__PURE__ */ v(i, {
1732
+ R === "backup" && !j.tunnelUrl && /* @__PURE__ */ _(i, {
1703
1733
  className: "p-6 text-center text-text-secondary",
1704
1734
  children: [
1705
- /* @__PURE__ */ _(lt, {
1735
+ /* @__PURE__ */ g(dt, {
1706
1736
  className: "size-8 mx-auto mb-2 text-text-muted",
1707
1737
  "aria-hidden": "true"
1708
1738
  }),
1709
- /* @__PURE__ */ _("p", { children: C("agentDetails.backupRequiresTunnelAndApiKey", "Agent tunnel URL and API key are required for backup management.") }),
1710
- /* @__PURE__ */ _("p", {
1739
+ /* @__PURE__ */ g("p", { children: S("agentDetails.backupRequiresTunnelAndApiKey", "Agent tunnel URL and API key are required for backup management.") }),
1740
+ /* @__PURE__ */ g("p", {
1711
1741
  className: "text-sm mt-1",
1712
- children: C("agentDetails.configureConnectionInOverview", "Configure the agent connection in the Overview tab.")
1742
+ children: S("agentDetails.configureConnectionInOverview", "Configure the agent connection in the Overview tab.")
1713
1743
  })
1714
1744
  ]
1715
1745
  }),
1716
- R === "maintenance" && /* @__PURE__ */ _(Ie, {
1746
+ R === "maintenance" && /* @__PURE__ */ g(Ie, {
1717
1747
  agentId: j.id,
1718
1748
  agentVersion: j.version,
1719
- onAfterDestructiveNuke: br
1749
+ onAfterDestructiveNuke: Sr
1720
1750
  }),
1721
1751
  I && (() => {
1722
1752
  let e = L.data.find((e) => e.contribution.id === R);
1723
- return !e || !j ? null : /* @__PURE__ */ _("div", {
1753
+ return !e || !j ? null : /* @__PURE__ */ g("div", {
1724
1754
  className: "space-y-6",
1725
- children: /* @__PURE__ */ _(i, { children: /* @__PURE__ */ _("div", {
1755
+ children: /* @__PURE__ */ g(i, { children: /* @__PURE__ */ g("div", {
1726
1756
  className: "p-0 h-[70vh] max-h-[40rem] min-h-[20rem]",
1727
- children: /* @__PURE__ */ _(et, {
1757
+ children: /* @__PURE__ */ g(et, {
1728
1758
  contribution: e,
1729
1759
  tunnel: e.tunnel,
1730
1760
  restPaths: e.capabilities.restPaths.length > 0 ? e.capabilities.restPaths : [`/ui/${e.pluginKey}`],
@@ -1744,9 +1774,9 @@ function x() {
1744
1774
  })()
1745
1775
  ]
1746
1776
  }),
1747
- I && j && /* @__PURE__ */ _($e, {
1748
- isOpen: En,
1749
- onClose: () => Dn(!1),
1777
+ I && j && /* @__PURE__ */ g($e, {
1778
+ isOpen: Dn,
1779
+ onClose: () => On(!1),
1750
1780
  mountPoint: "agent.detailTab",
1751
1781
  agentId: j.id,
1752
1782
  profile: F ?? "default",
@@ -1754,7 +1784,7 @@ function x() {
1754
1784
  L.refetch();
1755
1785
  }
1756
1786
  }),
1757
- /* @__PURE__ */ _(Ue, {
1787
+ /* @__PURE__ */ g(Ue, {
1758
1788
  agent: {
1759
1789
  id: j.id,
1760
1790
  name: j.name,
@@ -1765,100 +1795,100 @@ function x() {
1765
1795
  aiContext: j.aiContext,
1766
1796
  metadata: j.metadata
1767
1797
  },
1768
- isOpen: Qt,
1769
- onClose: () => $t(!1),
1770
- onSaved: () => a.success(C("agentDetails.configurationUpdated", "Agent configuration updated successfully"))
1798
+ isOpen: tn,
1799
+ onClose: () => nn(!1),
1800
+ onSaved: () => a.success(S("agentDetails.configurationUpdated", "Agent configuration updated successfully"))
1771
1801
  }),
1772
- /* @__PURE__ */ _(We, {
1802
+ /* @__PURE__ */ g(We, {
1773
1803
  agentId: j.id,
1774
1804
  agentName: j.name,
1775
1805
  probe: N.get(j.id),
1776
- isOpen: gn,
1777
- onClose: () => _n(!1),
1778
- onCreated: () => a.success(C("sessions.createdSuccess", "Session created successfully")),
1806
+ isOpen: vn,
1807
+ onClose: () => yn(!1),
1808
+ onCreated: () => a.success(S("sessions.createdSuccess", "Session created successfully")),
1779
1809
  onQuotaExhausted: () => {
1780
- _n(!1), he(), Xn("session"), W(!0);
1810
+ yn(!1), he(), Zn("session"), G(!0);
1781
1811
  }
1782
1812
  }),
1783
- /* @__PURE__ */ _(de, {
1784
- isOpen: Ln !== null,
1785
- onClose: () => Rn(null),
1813
+ /* @__PURE__ */ g(de, {
1814
+ isOpen: Rn !== null,
1815
+ onClose: () => zn(null),
1786
1816
  onConfirm: () => {
1787
- let e = Ln;
1788
- Rn(null), e && dr(e);
1817
+ let e = Rn;
1818
+ zn(null), e && pr(e);
1789
1819
  },
1790
- title: C("agentDetails.removePluginTitle", "Remove plugin"),
1791
- message: C("agentDetails.removePluginConfirm", "Remove plugin {{packageName}}?", { packageName: Ln ?? "" }),
1792
- confirmLabel: C("sessions.remove", "Remove"),
1820
+ title: S("agentDetails.removePluginTitle", "Remove plugin"),
1821
+ message: S("agentDetails.removePluginConfirm", "Remove plugin {{packageName}}?", { packageName: Rn ?? "" }),
1822
+ confirmLabel: S("sessions.remove", "Remove"),
1793
1823
  variant: "danger"
1794
1824
  }),
1795
- /* @__PURE__ */ _(De, {
1796
- isOpen: zn !== null,
1797
- onClose: () => Bn(null),
1825
+ /* @__PURE__ */ g(De, {
1826
+ isOpen: Bn !== null,
1827
+ onClose: () => Vn(null),
1798
1828
  onSubmit: (e) => {
1799
- let t = zn;
1800
- Bn(null), t && pr(t, e || void 0);
1829
+ let t = Bn;
1830
+ Vn(null), t && hr(t, e || void 0);
1801
1831
  },
1802
- title: C("agentDetails.updatePluginTitle", "Update plugin"),
1803
- description: C("agentDetails.updatePluginPrompt", "Update {{packageName}} to which version? Leave blank for latest.", { packageName: zn ?? "" }),
1804
- label: C("agentDetails.updatePluginVersionLabel", "Version"),
1805
- placeholder: C("agentDetails.updatePluginVersionPlaceholder", "latest"),
1806
- confirmLabel: C("agentDetails.update", "Update")
1832
+ title: S("agentDetails.updatePluginTitle", "Update plugin"),
1833
+ description: S("agentDetails.updatePluginPrompt", "Update {{packageName}} to which version? Leave blank for latest.", { packageName: Bn ?? "" }),
1834
+ label: S("agentDetails.updatePluginVersionLabel", "Version"),
1835
+ placeholder: S("agentDetails.updatePluginVersionPlaceholder", "latest"),
1836
+ confirmLabel: S("agentDetails.update", "Update")
1807
1837
  }),
1808
- /* @__PURE__ */ _(fe, {
1809
- isOpen: Jn,
1810
- onClose: () => W(!1),
1838
+ /* @__PURE__ */ g(fe, {
1839
+ isOpen: Yn,
1840
+ onClose: () => G(!1),
1811
1841
  onConfirm: () => {
1812
- W(!1), S("/billing/plans");
1842
+ G(!1), x("/billing/plans");
1813
1843
  },
1814
- title: pe(Yn).title,
1815
- message: pe(Yn).message
1844
+ title: pe(Xn).title,
1845
+ message: pe(Xn).message
1816
1846
  }),
1817
- /* @__PURE__ */ _(de, {
1818
- isOpen: Vn,
1847
+ /* @__PURE__ */ g(de, {
1848
+ isOpen: Hn,
1819
1849
  onClose: () => {
1820
- U || Hn(!1);
1850
+ W || Un(!1);
1821
1851
  },
1822
- onConfirm: Dr,
1823
- title: C("agentDetails.removeAgentTitle", "Remove agent"),
1824
- message: C("agentDetails.removeAgentMessage", "Remove “{{name}}” from this workspace.", { name: j.name }),
1825
- confirmLabel: C("sessions.remove", "Remove"),
1852
+ onConfirm: kr,
1853
+ title: S("agentDetails.removeAgentTitle", "Remove agent"),
1854
+ message: S("agentDetails.removeAgentMessage", "Remove “{{name}}” from this workspace.", { name: j.name }),
1855
+ confirmLabel: S("sessions.remove", "Remove"),
1826
1856
  variant: "danger",
1827
- isLoading: U,
1828
- children: /* @__PURE__ */ v("div", {
1857
+ isLoading: W,
1858
+ children: /* @__PURE__ */ _("div", {
1829
1859
  className: "space-y-2",
1830
- children: [/* @__PURE__ */ v("label", {
1860
+ children: [/* @__PURE__ */ _("label", {
1831
1861
  className: "flex items-start gap-3 p-3 rounded-md bg-bg-sunken border border-border-default cursor-pointer",
1832
- children: [/* @__PURE__ */ _(Pt, {
1833
- checked: Un,
1834
- disabled: U,
1835
- onCheckedChange: (e) => Wn(e === !0),
1862
+ children: [/* @__PURE__ */ g(Ft, {
1863
+ checked: Wn,
1864
+ disabled: W,
1865
+ onCheckedChange: (e) => Gn(e === !0),
1836
1866
  className: "mt-0.5"
1837
- }), /* @__PURE__ */ v("span", {
1867
+ }), /* @__PURE__ */ _("span", {
1838
1868
  className: "min-w-0",
1839
- children: [/* @__PURE__ */ _("span", {
1869
+ children: [/* @__PURE__ */ g("span", {
1840
1870
  className: "block text-sm font-medium text-text-primary",
1841
- children: C("agentDetails.uninstallFromTarget", "Uninstall agent from the target")
1842
- }), /* @__PURE__ */ _("span", {
1871
+ children: S("agentDetails.uninstallFromTarget", "Uninstall agent from the target")
1872
+ }), /* @__PURE__ */ g("span", {
1843
1873
  className: "block text-xs text-text-secondary mt-0.5",
1844
- children: C("agentDetails.uninstallFromTargetDesc", "Also wipe all agent state + VibeControls plugins and uninstall the agent from the host machine. This cannot be undone.")
1874
+ children: S("agentDetails.uninstallFromTargetDesc", "Also wipe all agent state + VibeControls plugins and uninstall the agent from the host machine. This cannot be undone.")
1845
1875
  })]
1846
1876
  })]
1847
- }), /* @__PURE__ */ v("label", {
1877
+ }), /* @__PURE__ */ _("label", {
1848
1878
  className: "flex items-start gap-3 p-3 rounded-md bg-bg-sunken border border-border-default cursor-pointer",
1849
- children: [/* @__PURE__ */ _(Pt, {
1850
- checked: Gn,
1851
- disabled: U,
1852
- onCheckedChange: (e) => Kn(e === !0),
1879
+ children: [/* @__PURE__ */ g(Ft, {
1880
+ checked: Kn,
1881
+ disabled: W,
1882
+ onCheckedChange: (e) => qn(e === !0),
1853
1883
  className: "mt-0.5"
1854
- }), /* @__PURE__ */ v("span", {
1884
+ }), /* @__PURE__ */ _("span", {
1855
1885
  className: "min-w-0",
1856
- children: [/* @__PURE__ */ _("span", {
1886
+ children: [/* @__PURE__ */ g("span", {
1857
1887
  className: "block text-sm font-medium text-text-primary",
1858
- children: C("agentDetails.deleteTarget", "Delete the mapped target")
1859
- }), /* @__PURE__ */ _("span", {
1888
+ children: S("agentDetails.deleteTarget", "Delete the mapped target")
1889
+ }), /* @__PURE__ */ g("span", {
1860
1890
  className: "block text-xs text-text-secondary mt-0.5",
1861
- children: C("agentDetails.deleteTargetDesc", "Also delete the target this agent is mapped to. Any other agents on the same target are removed too. This cannot be undone.")
1891
+ children: S("agentDetails.deleteTargetDesc", "Also delete the target this agent is mapped to. Any other agents on the same target are removed too. This cannot be undone.")
1862
1892
  })]
1863
1893
  })]
1864
1894
  })]
@@ -1868,6 +1898,6 @@ function x() {
1868
1898
  });
1869
1899
  }
1870
1900
  //#endregion
1871
- export { x as AgentDetailsPage };
1901
+ export { b as AgentDetailsPage };
1872
1902
 
1873
1903
  //# sourceMappingURL=AgentDetailsPage.js.map