@burdenoff/microfe-vibecontrols 2026.714.1 → 2026.718.1

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