@burdenoff/microfe-vibecontrols 2026.601.2 → 2026.601.4

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,192 +1,195 @@
1
- import { useAgentPluginsLazyQuery as e, useAgentSecretRevealLazyQuery as t, useCheckSessionHealthMutation as n, useCreateSessionMutation as r, useDeleteAgentMutation as i, useGetAgentQuery as a, useInstallAgentPluginMutation as ee, usePushAgentGatewayAuthMutation as te, useRemoveAgentPluginMutation as o, useSetupAgentGatewayAuthMutation as ne, useStartVibecontrolsAgentMutation as re, useStopVibecontrolsAgentMutation as ie, useUpdateAgentMutation as ae, useVibecontrolsAgentHealthProbeStreamSubscription as s, useVibecontrolsAgentHealthProbesQuery as oe } from "../generated/wspace-operations.js";
2
- import { QuotaExhaustedDialog as se } from "../components/shared/QuotaExhaustedDialog.js";
3
- import { getQuotaDialogContent as ce, isQuotaExhaustedError as le, markQuotaHandledLocally as ue } from "../utils/quotaUtils.js";
4
- import { useVibeControls as de, useVibeNavigate as fe } from "../providers/VibeControlsProvider.js";
1
+ import { useAgentPluginsLazyQuery as e, useAgentSecretRevealLazyQuery as t, useCheckSessionHealthMutation as n, useCreateSessionMutation as r, useDeleteAgentMutation as i, useGetAgentQuery as a, useInstallAgentPluginMutation as ee, usePushAgentGatewayAuthMutation as te, useRemoveAgentPluginMutation as o, useSetupAgentGatewayAuthMutation as ne, useStartVibecontrolsAgentMutation as s, useStopVibecontrolsAgentMutation as re, useUpdateAgentMutation as ie, useUpdateAgentPluginMutation as c, useVibecontrolsAgentHealthProbeStreamSubscription as ae, useVibecontrolsAgentHealthProbesQuery as oe } from "../generated/wspace-operations.js";
2
+ import { ConfirmDialog as se } from "../components/shared/ConfirmDialog.js";
3
+ import { QuotaExhaustedDialog as ce } from "../components/shared/QuotaExhaustedDialog.js";
4
+ import { getQuotaDialogContent as le, isQuotaExhaustedError as ue, markQuotaHandledLocally as de } from "../utils/quotaUtils.js";
5
+ import { useVibeControls as fe, useVibeNavigate as l } from "../providers/VibeControlsProvider.js";
5
6
  import { useVibeControlsStore as pe } from "../store/vibeControlsStore.js";
6
- import { PageHeader as c } from "../components/shared/PageHeader.js";
7
- import { ErrorState as me } from "../components/shared/ErrorState.js";
8
- import { EntityTagPicker as he } from "../components/shared/EntityTagPicker.js";
9
- import { EmptyState as ge } from "../components/shared/EmptyState.js";
10
- import { StatusBadge as _e } from "../components/shared/StatusBadge.js";
11
- import { Card as l } from "../components/shared/Card.js";
12
- import { useActiveAgentProfile as ve } from "../hooks/useActiveAgentProfile.js";
7
+ import { PageHeader as me } from "../components/shared/PageHeader.js";
8
+ import { ErrorState as he } from "../components/shared/ErrorState.js";
9
+ import { EntityTagPicker as ge } from "../components/shared/EntityTagPicker.js";
10
+ import { EmptyState as _e } from "../components/shared/EmptyState.js";
11
+ import { StatusBadge as ve } from "../components/shared/StatusBadge.js";
12
+ import { Card as u } from "../components/shared/Card.js";
13
+ import { useActiveAgentProfile as ye } from "../hooks/useActiveAgentProfile.js";
13
14
  import "../components/shared/index.js";
14
- import { isNative as ye, nativeCopyText as be, nativeToast as xe } from "../utils/nativeBridge.js";
15
- import { VIBE_PERMISSIONS as Se } from "../constants/permissions.js";
16
- import { PageSkeleton as Ce } from "../components/shared/PageSkeleton.js";
17
- import { AgentBackupTab as we } from "../components/agents/backup/AgentBackupTab.js";
18
- import { ConnectionLogPanel as Te } from "../components/agents/ConnectionLogPanel.js";
19
- import { AliasManager as Ee } from "../components/aliases/AliasManager.js";
20
- import { AgentStatusBadge as De } from "../components/agents/AgentStatusBadge.js";
21
- import { RemoteTaskPermissionsCard as Oe } from "../components/agents/RemoteTaskPermissionsCard.js";
22
- import { PluginUIPanel as ke } from "../components/agents/PluginUIPanel.js";
23
- import { OpenInBrowserEditorButton as Ae } from "../components/agents/OpenInBrowserEditorButton.js";
15
+ import { isNative as be, nativeCopyText as xe, nativeToast as Se } from "../utils/nativeBridge.js";
16
+ import { VIBE_PERMISSIONS as Ce } from "../constants/permissions.js";
17
+ import { PageSkeleton as we } from "../components/shared/PageSkeleton.js";
18
+ import { AgentBackupTab as Te } from "../components/agents/backup/AgentBackupTab.js";
19
+ import { ConnectionLogPanel as Ee } from "../components/agents/ConnectionLogPanel.js";
20
+ import { AgentMaintenanceTab as De } from "../components/agents/AgentMaintenanceTab.js";
21
+ import { AliasManager as Oe } from "../components/aliases/AliasManager.js";
22
+ import { AgentStatusBadge as ke } from "../components/agents/AgentStatusBadge.js";
23
+ import { RemoteTaskPermissionsCard as Ae } from "../components/agents/RemoteTaskPermissionsCard.js";
24
+ import { PluginUIPanel as je } from "../components/agents/PluginUIPanel.js";
25
+ import { OpenInBrowserEditorButton as Me } from "../components/agents/OpenInBrowserEditorButton.js";
24
26
  import "../components/agents/index.js";
25
- import { deriveAgentStatus as je } from "../utils/agentStatus.js";
26
- import { LogViewer as Me } from "../components/logs/LogViewer.js";
27
- import { ProfilesPanel as Ne } from "../components/agent-manager/ProfilesPanel.js";
27
+ import { deriveAgentStatus as Ne } from "../utils/agentStatus.js";
28
+ import { LogViewer as Pe } from "../components/logs/LogViewer.js";
29
+ import { ProfilesPanel as Fe } from "../components/agent-manager/ProfilesPanel.js";
28
30
  import "../components/agent-manager/index.js";
29
- import { NotesTabPanel as Pe } from "../components/notes/NotesTabPanel.js";
31
+ import { NotesTabPanel as Ie } from "../components/notes/NotesTabPanel.js";
30
32
  import "../components/notes/index.js";
31
- import { useQueryBackedTab as Fe } from "../hooks/useQueryBackedTab.js";
32
- import { mintScopedIframeToken as Ie } from "../services/iframeToken.js";
33
- import { AddTabDialog as Le } from "../components/plugins/AddTabDialog.js";
34
- import { PluginIframeMount as Re } from "../components/plugins/PluginIframeMount.js";
35
- import { useCallback as u, useEffect as d, useMemo as ze, useRef as f, useState as p } from "react";
36
- import { useI18n as Be } from "@burdenoff/fe-libs/shared/providers/shell/I18nProvider";
37
- import { ArrowLeft as Ve, Bot as He, Check as Ue, CheckCircle2 as We, Clock as Ge, Command as Ke, Copy as qe, Cpu as Je, Database as Ye, Download as Xe, Edit3 as Ze, Eye as Qe, EyeOff as $e, FileText as et, HardDrive as tt, Info as nt, Key as rt, Link2 as m, Loader2 as h, Monitor as it, Play as at, Plus as ot, Puzzle as st, RefreshCw as g, ScrollText as ct, Search as lt, Server as ut, Settings as dt, Shield as ft, Square as pt, Tag as mt, Terminal as _, Trash2 as ht, Unlink as gt, Users as _t, X as v, Zap as vt } from "lucide-react";
38
- import { useParams as yt } from "react-router-dom";
39
- import { usePermissions as bt } from "@burdenoff/fe-libs/shared/providers/shell";
40
- import { AnimatePresence as xt, motion as y } from "framer-motion";
41
- import { Fragment as b, jsx as x, jsxs as S } from "react/jsx-runtime";
42
- import { useFeatureFlagDetails as St } from "@burdenoff/fe-libs/shared/feature-flags";
43
- import { PermissionButton as Ct } from "@burdenoff/fe-libs/shared/components";
44
- import { MotionPage as wt } from "@burdenoff/fe-libs/shared/motion";
45
- import { usePluginContributions as Tt } from "@burdenoff/fe-libs/shared/plugins";
33
+ import { useQueryBackedTab as Le } from "../hooks/useQueryBackedTab.js";
34
+ import { mintScopedIframeToken as Re } from "../services/iframeToken.js";
35
+ import { AddTabDialog as ze } from "../components/plugins/AddTabDialog.js";
36
+ import { PluginIframeMount as Be } from "../components/plugins/PluginIframeMount.js";
37
+ import { useCallback as d, useEffect as f, useMemo as Ve, useRef as p, useState as m } from "react";
38
+ import { useI18n as He } from "@burdenoff/fe-libs/shared/providers/shell/I18nProvider";
39
+ import { ArrowLeft as Ue, ArrowUpCircle as We, Bot as Ge, Check as Ke, CheckCircle2 as qe, Clock as Je, Command as Ye, Copy as Xe, Cpu as Ze, Database as Qe, Download as $e, Edit3 as et, Eye as tt, EyeOff as nt, FileText as rt, HardDrive as it, Info as at, Key as ot, Link2 as h, Loader2 as g, Monitor as st, Play as ct, Plus as lt, Puzzle as ut, RefreshCw as dt, ScrollText as ft, Search as pt, Server as mt, Settings as ht, Shield as gt, Square as _t, Tag as vt, Terminal as yt, Trash2 as bt, Unlink as xt, Users as St, Wrench as Ct, X as _, Zap as wt } from "lucide-react";
40
+ import { useParams as Tt } from "react-router-dom";
41
+ import { usePermissions as Et } from "@burdenoff/fe-libs/shared/providers/shell";
42
+ import { AnimatePresence as Dt, motion as v } from "framer-motion";
43
+ import { Fragment as y, jsx as b, jsxs as x } from "react/jsx-runtime";
44
+ import { Checkbox as Ot } from "@burdenoff/fe-libs/ui";
45
+ import { useFeatureFlagDetails as kt } from "@burdenoff/fe-libs/shared/feature-flags";
46
+ import { PermissionButton as At } from "@burdenoff/fe-libs/shared/components";
47
+ import { MotionPage as jt } from "@burdenoff/fe-libs/shared/motion";
48
+ import { usePluginContributions as Mt } from "@burdenoff/fe-libs/shared/plugins";
46
49
  //#region src/pages/AgentDetailsPage.tsx
47
- function Et({ agent: e, onUpdate: t }) {
48
- let { t: n } = Be(), [r] = ae(), [i] = ne(), [a, ee] = p(!1), [te, o] = p(null), [re, ie] = p(!1), [s, oe] = p(null), [se, ce] = p(!1), [le, ue] = p(!1), [de, fe] = p(!1), pe = !!(e.appId && e.appClientId), c = (e, t, r) => {
50
+ function Nt({ agent: e, onUpdate: t }) {
51
+ let { t: n } = He(), [r] = ie(), [i] = ne(), [a, ee] = m(!1), [te, o] = m(null), [s, re] = m(!1), [c, ae] = m(null), [oe, se] = m(!1), [ce, le] = m(!1), [ue, de] = m(!1), fe = !!(e.appId && e.appClientId), l = (e, t, r) => {
49
52
  let i = n(e, r), a = i === e ? t : i;
50
53
  return r ? Object.entries(r).reduce((e, [t, n]) => e.replace(`{{${t}}}`, String(n)), a) : a;
51
- }, me = e.metadata?.devportalApplicationId, he = async () => {
54
+ }, pe = e.metadata?.devportalApplicationId, me = async () => {
52
55
  ee(!0), o(null);
53
56
  try {
54
57
  let { data: n } = await i({ variables: { input: { agentId: e.id } } }), r = n?.setupAgentGatewayAuth;
55
- if (!r) throw Error(c("agentDetails.gatewayAuthNoResultError", "No result returned from setupAgentGatewayAuth"));
56
- oe(r.clientSecret), r.error && o(r.error), t();
58
+ if (!r) throw Error(l("agentDetails.gatewayAuthNoResultError", "No result returned from setupAgentGatewayAuth"));
59
+ ae(r.clientSecret), r.error && o(r.error), t();
57
60
  } catch (e) {
58
- o(e instanceof Error ? e.message : c("agentDetails.failedSetupGatewayAuth", "Failed to set up gateway auth"));
61
+ o(e instanceof Error ? e.message : l("agentDetails.failedSetupGatewayAuth", "Failed to set up gateway auth"));
59
62
  } finally {
60
63
  ee(!1);
61
64
  }
62
65
  };
63
- return /* @__PURE__ */ S(l, { children: [/* @__PURE__ */ x("div", {
66
+ return /* @__PURE__ */ x(u, { children: [/* @__PURE__ */ b("div", {
64
67
  className: "p-4 border-b border-border-default",
65
- children: /* @__PURE__ */ S("h3", {
68
+ children: /* @__PURE__ */ x("h3", {
66
69
  className: "font-semibold text-text-primary flex items-center gap-2",
67
- children: [/* @__PURE__ */ x(ft, { className: "size-5" }), c("agentDetails.gatewayAuthTitle", "Gateway Auth (OAuth2)")]
70
+ children: [/* @__PURE__ */ b(gt, { className: "size-5" }), l("agentDetails.gatewayAuthTitle", "Gateway Auth (OAuth2)")]
68
71
  })
69
- }), /* @__PURE__ */ S("div", {
72
+ }), /* @__PURE__ */ x("div", {
70
73
  className: "p-4 space-y-3",
71
- children: [te && /* @__PURE__ */ S("div", {
74
+ children: [te && /* @__PURE__ */ x("div", {
72
75
  className: "flex items-center gap-2 p-3 bg-status-error-bg text-status-error-text rounded-md text-sm",
73
76
  children: [
74
- /* @__PURE__ */ x(v, { className: "size-4 flex-shrink-0" }),
75
- /* @__PURE__ */ x("span", {
77
+ /* @__PURE__ */ b(_, { className: "size-4 flex-shrink-0" }),
78
+ /* @__PURE__ */ b("span", {
76
79
  className: "flex-1",
77
80
  children: te
78
81
  }),
79
- /* @__PURE__ */ x("button", {
82
+ /* @__PURE__ */ b("button", {
80
83
  type: "button",
81
84
  onClick: () => o(null),
82
85
  className: "flex-shrink-0 p-0.5 hover:bg-status-error-text/10 rounded",
83
- children: /* @__PURE__ */ x(v, { className: "size-3.5" })
86
+ children: /* @__PURE__ */ b(_, { className: "size-3.5" })
84
87
  })
85
88
  ]
86
- }), pe ? /* @__PURE__ */ S(b, { children: [
87
- /* @__PURE__ */ S("div", {
89
+ }), fe ? /* @__PURE__ */ x(y, { children: [
90
+ /* @__PURE__ */ x("div", {
88
91
  className: "flex items-start gap-3",
89
- children: [/* @__PURE__ */ x("div", {
92
+ children: [/* @__PURE__ */ b("div", {
90
93
  className: "size-8 rounded-lg bg-status-success-bg flex items-center justify-center flex-shrink-0 mt-0.5",
91
- children: /* @__PURE__ */ x(m, { className: "size-4 text-status-success-text" })
92
- }), /* @__PURE__ */ S("div", {
94
+ children: /* @__PURE__ */ b(h, { className: "size-4 text-status-success-text" })
95
+ }), /* @__PURE__ */ x("div", {
93
96
  className: "flex-1 min-w-0 space-y-2",
94
- children: [/* @__PURE__ */ S("div", { children: [/* @__PURE__ */ x("p", {
97
+ children: [/* @__PURE__ */ x("div", { children: [/* @__PURE__ */ b("p", {
95
98
  className: "text-sm font-medium text-text-primary",
96
- children: c("agentDetails.linkedToOauthApp", "Linked to OAuth App")
97
- }), /* @__PURE__ */ x("p", {
99
+ children: l("agentDetails.linkedToOauthApp", "Linked to OAuth App")
100
+ }), /* @__PURE__ */ b("p", {
98
101
  className: "text-xs text-text-muted",
99
- children: c("agentDetails.gatewayAuthLinkedDescription", "This agent can authenticate with the API gateway using Client Credentials.")
100
- })] }), /* @__PURE__ */ S("div", {
102
+ children: l("agentDetails.gatewayAuthLinkedDescription", "This agent can authenticate with the API gateway using Client Credentials.")
103
+ })] }), /* @__PURE__ */ x("div", {
101
104
  className: "grid grid-cols-1 sm:grid-cols-2 gap-3",
102
- children: [/* @__PURE__ */ S("div", { children: [/* @__PURE__ */ x("p", {
105
+ children: [/* @__PURE__ */ x("div", { children: [/* @__PURE__ */ b("p", {
103
106
  className: "text-xs text-text-secondary mb-1",
104
- children: c("agentDetails.clientId", "Client ID")
105
- }), /* @__PURE__ */ S("div", {
107
+ children: l("agentDetails.clientId", "Client ID")
108
+ }), /* @__PURE__ */ x("div", {
106
109
  className: "flex items-center gap-2",
107
- children: [/* @__PURE__ */ x("code", {
110
+ children: [/* @__PURE__ */ b("code", {
108
111
  className: "text-xs font-mono text-text-primary bg-bg-sunken px-2 py-1 rounded truncate block flex-1",
109
112
  children: e.appClientId
110
- }), /* @__PURE__ */ x("button", {
113
+ }), /* @__PURE__ */ b("button", {
111
114
  type: "button",
112
115
  onClick: async () => {
113
116
  if (e.appClientId) try {
114
- await be(e.appClientId), ye() && xe("Copied"), ue(!0), setTimeout(() => ue(!1), 2e3);
117
+ await xe(e.appClientId), be() && Se("Copied"), le(!0), setTimeout(() => le(!1), 2e3);
115
118
  } catch {}
116
119
  },
117
120
  className: "p-1 rounded hover:bg-bg-sunken transition-colors flex-shrink-0",
118
- title: c("agentDetails.copyClientId", "Copy Client ID"),
119
- children: le ? /* @__PURE__ */ x(Ue, { className: "size-3.5 text-status-success-text" }) : /* @__PURE__ */ x(qe, { className: "size-3.5 text-text-secondary" })
121
+ title: l("agentDetails.copyClientId", "Copy Client ID"),
122
+ children: ce ? /* @__PURE__ */ b(Ke, { className: "size-3.5 text-status-success-text" }) : /* @__PURE__ */ b(Xe, { className: "size-3.5 text-text-secondary" })
120
123
  })]
121
- })] }), /* @__PURE__ */ S("div", { children: [/* @__PURE__ */ x("p", {
124
+ })] }), /* @__PURE__ */ x("div", { children: [/* @__PURE__ */ b("p", {
122
125
  className: "text-xs text-text-secondary mb-1",
123
- children: c("agentDetails.appId", "App ID")
124
- }), /* @__PURE__ */ x("code", {
126
+ children: l("agentDetails.appId", "App ID")
127
+ }), /* @__PURE__ */ b("code", {
125
128
  className: "text-xs font-mono text-text-muted bg-bg-sunken px-2 py-1 rounded truncate block",
126
129
  children: e.appId
127
130
  })] })]
128
131
  })]
129
132
  })]
130
133
  }),
131
- s && /* @__PURE__ */ S("div", {
134
+ c && /* @__PURE__ */ x("div", {
132
135
  className: "p-3 bg-status-warning-bg/20 border border-status-warning-text/20 rounded-lg space-y-2",
133
136
  children: [
134
- /* @__PURE__ */ x("p", {
137
+ /* @__PURE__ */ b("p", {
135
138
  className: "text-sm font-medium text-status-warning-text",
136
- children: c("agentDetails.clientSecretOneTimeTitle", "Client Secret (one-time display)")
139
+ children: l("agentDetails.clientSecretOneTimeTitle", "Client Secret (one-time display)")
137
140
  }),
138
- /* @__PURE__ */ x("p", {
141
+ /* @__PURE__ */ b("p", {
139
142
  className: "text-xs text-text-secondary",
140
- children: c("agentDetails.clientSecretOneTimeDescription", "This secret has been automatically sent to the agent. Save it now if you need it — it won't be shown again.")
143
+ children: l("agentDetails.clientSecretOneTimeDescription", "This secret has been automatically sent to the agent. Save it now if you need it — it won't be shown again.")
141
144
  }),
142
- /* @__PURE__ */ S("div", {
145
+ /* @__PURE__ */ x("div", {
143
146
  className: "flex items-center gap-2",
144
147
  children: [
145
- /* @__PURE__ */ x("code", {
148
+ /* @__PURE__ */ b("code", {
146
149
  className: "text-xs font-mono text-text-primary bg-bg-sunken px-2 py-1 rounded flex-1 truncate",
147
- children: re ? s : "•".repeat(32)
150
+ children: s ? c : "•".repeat(32)
148
151
  }),
149
- /* @__PURE__ */ x("button", {
152
+ /* @__PURE__ */ b("button", {
150
153
  type: "button",
151
- onClick: () => ie(!re),
154
+ onClick: () => re(!s),
152
155
  className: "p-1 rounded hover:bg-bg-sunken transition-colors flex-shrink-0",
153
- children: x(re ? $e : Qe, { className: "size-3.5 text-text-secondary" })
156
+ children: b(s ? nt : tt, { className: "size-3.5 text-text-secondary" })
154
157
  }),
155
- /* @__PURE__ */ x("button", {
158
+ /* @__PURE__ */ b("button", {
156
159
  type: "button",
157
160
  onClick: async () => {
158
- if (s) try {
159
- await be(s), ye() && xe("Secret copied"), ce(!0), setTimeout(() => ce(!1), 2e3);
161
+ if (c) try {
162
+ await xe(c), be() && Se("Secret copied"), se(!0), setTimeout(() => se(!1), 2e3);
160
163
  } catch {}
161
164
  },
162
165
  className: "p-1 rounded hover:bg-bg-sunken transition-colors flex-shrink-0",
163
- children: se ? /* @__PURE__ */ x(Ue, { className: "size-3.5 text-status-success-text" }) : /* @__PURE__ */ x(qe, { className: "size-3.5 text-text-secondary" })
166
+ children: oe ? /* @__PURE__ */ b(Ke, { className: "size-3.5 text-status-success-text" }) : /* @__PURE__ */ b(Xe, { className: "size-3.5 text-text-secondary" })
164
167
  })
165
168
  ]
166
169
  })
167
170
  ]
168
171
  }),
169
- /* @__PURE__ */ S("div", {
172
+ /* @__PURE__ */ x("div", {
170
173
  className: "flex items-center gap-2",
171
174
  children: [
172
- me && /* @__PURE__ */ S("a", {
173
- href: `/devportal/apps/${me}`,
175
+ pe && /* @__PURE__ */ x("a", {
176
+ href: `/devportal/apps/${pe}`,
174
177
  className: "flex items-center gap-2 px-3 py-1.5 text-xs text-action-primary-bg bg-action-primary-bg/10 hover:bg-action-primary-bg/20 rounded-md transition-colors",
175
- children: [/* @__PURE__ */ x(it, { className: "size-3" }), c("agentDetails.viewInDeveloperPortal", "View in Developer Portal")]
178
+ children: [/* @__PURE__ */ b(st, { className: "size-3" }), l("agentDetails.viewInDeveloperPortal", "View in Developer Portal")]
176
179
  }),
177
- /* @__PURE__ */ S("button", {
180
+ /* @__PURE__ */ x("button", {
178
181
  type: "button",
179
- onClick: he,
182
+ onClick: me,
180
183
  disabled: a,
181
184
  className: "flex items-center gap-2 px-3 py-1.5 text-xs text-action-primary-bg bg-action-primary-bg/10 hover:bg-action-primary-bg/20 rounded-md transition-colors disabled:opacity-50",
182
- title: c("agentDetails.repushCredentialsTitle", "Rotate the OAuth secret and push it to the agent. Use this if the agent shows degraded with \"boot state awaiting-config\"."),
183
- children: [a ? /* @__PURE__ */ x(h, { className: "size-3 animate-spin" }) : /* @__PURE__ */ x(g, { className: "size-3" }), c("agentDetails.repushCredentials", "Re-push credentials")]
185
+ title: l("agentDetails.repushCredentialsTitle", "Rotate the OAuth secret and push it to the agent. Use this if the agent shows degraded with \"boot state awaiting-config\"."),
186
+ children: [a ? /* @__PURE__ */ b(g, { className: "size-3 animate-spin" }) : /* @__PURE__ */ b(dt, { className: "size-3" }), l("agentDetails.repushCredentials", "Re-push credentials")]
184
187
  }),
185
- /* @__PURE__ */ S("button", {
188
+ /* @__PURE__ */ x("button", {
186
189
  type: "button",
187
190
  onClick: async () => {
188
- if (window.confirm(c("agentDetails.confirmUnlinkOauthApp", "Remove the linked OAuth app from this agent? The app will still exist in auth-svc."))) {
189
- fe(!0), o(null);
191
+ if (window.confirm(l("agentDetails.confirmUnlinkOauthApp", "Remove the linked OAuth app from this agent? The app will still exist in auth-svc."))) {
192
+ de(!0), o(null);
190
193
  try {
191
194
  await r({ variables: {
192
195
  id: e.id,
@@ -194,45 +197,45 @@ function Et({ agent: e, onUpdate: t }) {
194
197
  appId: null,
195
198
  appClientId: null
196
199
  }
197
- } }), oe(null), t();
200
+ } }), ae(null), t();
198
201
  } catch (e) {
199
- o(e instanceof Error ? e.message : c("agentDetails.failedUnlinkApp", "Failed to unlink app"));
202
+ o(e instanceof Error ? e.message : l("agentDetails.failedUnlinkApp", "Failed to unlink app"));
200
203
  } finally {
201
- fe(!1);
204
+ de(!1);
202
205
  }
203
206
  }
204
207
  },
205
- disabled: de,
208
+ disabled: ue,
206
209
  className: "flex items-center gap-2 px-3 py-1.5 text-xs text-status-error-text hover:bg-status-error-bg rounded-md transition-colors disabled:opacity-50",
207
- children: [de ? /* @__PURE__ */ x(h, { className: "size-3 animate-spin" }) : /* @__PURE__ */ x(gt, { className: "size-3" }), c("agentDetails.unlinkApp", "Unlink App")]
210
+ children: [ue ? /* @__PURE__ */ b(g, { className: "size-3 animate-spin" }) : /* @__PURE__ */ b(xt, { className: "size-3" }), l("agentDetails.unlinkApp", "Unlink App")]
208
211
  })
209
212
  ]
210
213
  })
211
- ] }) : /* @__PURE__ */ S(b, { children: [/* @__PURE__ */ S("div", {
214
+ ] }) : /* @__PURE__ */ x(y, { children: [/* @__PURE__ */ x("div", {
212
215
  className: "flex items-start gap-3",
213
- children: [/* @__PURE__ */ x("div", {
216
+ children: [/* @__PURE__ */ b("div", {
214
217
  className: "size-8 rounded-lg bg-bg-sunken flex items-center justify-center flex-shrink-0 mt-0.5",
215
- children: /* @__PURE__ */ x(ft, { className: "size-4 text-text-muted" })
216
- }), /* @__PURE__ */ S("div", {
218
+ children: /* @__PURE__ */ b(gt, { className: "size-4 text-text-muted" })
219
+ }), /* @__PURE__ */ x("div", {
217
220
  className: "flex-1",
218
- children: [/* @__PURE__ */ x("p", {
221
+ children: [/* @__PURE__ */ b("p", {
219
222
  className: "text-sm font-medium text-text-primary",
220
- children: c("agentDetails.noOauthAppLinked", "No OAuth App Linked")
221
- }), /* @__PURE__ */ x("p", {
223
+ children: l("agentDetails.noOauthAppLinked", "No OAuth App Linked")
224
+ }), /* @__PURE__ */ b("p", {
222
225
  className: "text-xs text-text-muted mt-0.5",
223
- children: c("agentDetails.gatewayAuthSetupDescription", "Set up gateway auth to allow this agent to communicate with the API gateways using OAuth2 Client Credentials. This creates an OAuth app, registers it in the Developer Portal, and pushes the credentials to the agent.")
226
+ children: l("agentDetails.gatewayAuthSetupDescription", "Set up gateway auth to allow this agent to communicate with the API gateways using OAuth2 Client Credentials. This creates an OAuth app, registers it in the Developer Portal, and pushes the credentials to the agent.")
224
227
  })]
225
228
  })]
226
- }), /* @__PURE__ */ x("button", {
229
+ }), /* @__PURE__ */ b("button", {
227
230
  type: "button",
228
- onClick: he,
231
+ onClick: me,
229
232
  disabled: a,
230
233
  className: "flex items-center gap-2 px-4 py-2 text-sm font-medium text-action-primary-text bg-action-primary-bg rounded-md hover:bg-action-primary-bg-hover transition-colors disabled:opacity-50",
231
- children: a ? /* @__PURE__ */ S(b, { children: [/* @__PURE__ */ x(h, { className: "size-4 animate-spin" }), c("agentDetails.settingUp", "Setting up...")] }) : /* @__PURE__ */ S(b, { children: [/* @__PURE__ */ x(m, { className: "size-4" }), c("agentDetails.setupGatewayAuth", "Setup Gateway Auth")] })
234
+ children: a ? /* @__PURE__ */ x(y, { children: [/* @__PURE__ */ b(g, { className: "size-4 animate-spin" }), l("agentDetails.settingUp", "Setting up...")] }) : /* @__PURE__ */ x(y, { children: [/* @__PURE__ */ b(h, { className: "size-4" }), l("agentDetails.setupGatewayAuth", "Setup Gateway Auth")] })
232
235
  })] })]
233
236
  })] });
234
237
  }
235
- var Dt = [
238
+ var Pt = [
236
239
  "overview",
237
240
  "profiles",
238
241
  "security",
@@ -243,13 +246,14 @@ var Dt = [
243
246
  "vibes",
244
247
  "notes",
245
248
  "aliases",
246
- "backup"
249
+ "backup",
250
+ "maintenance"
247
251
  ];
248
- function Ot() {
249
- let { t: ne } = Be(), { id: m } = yt(), { basePath: gt } = de(), Ot = gt || "", C = fe(), { hasPermission: kt, isLoading: At, permissions: jt } = bt(), w = u((e, t, n) => {
252
+ function Ft() {
253
+ let { t: ne } = He(), { id: h } = Tt(), { basePath: xt } = fe(), Ft = xt || "", S = l(), { hasPermission: It, isLoading: Lt, permissions: Rt } = Et(), C = d((e, t, n) => {
250
254
  let r = ne(e, n), i = r === e ? t : r;
251
255
  return n ? Object.entries(n).reduce((e, [t, n]) => e.replace(`{{${t}}}`, String(n)), i) : i;
252
- }, [ne]), [Mt] = ae({ refetchQueries: ["GetAgent"] }), [Nt] = i({
256
+ }, [ne]), [zt] = ie({ refetchQueries: ["GetAgent"] }), [Bt] = i({
253
257
  refetchQueries: ["ListAgents", "VibeControlsInitialData"],
254
258
  awaitRefetchQueries: !0,
255
259
  update(e, t, { variables: n }) {
@@ -259,92 +263,92 @@ function Ot() {
259
263
  id: r
260
264
  }) }), e.gc());
261
265
  }
262
- }), [Pt] = n({ refetchQueries: ["GetAgent"] }), [Ft] = re(), [It] = ie(), [T, Lt] = p(null), [Rt, zt] = p(null), Bt = pe((e) => e.setActiveAgentId);
263
- d(() => {
264
- m && Bt(m);
265
- }, [m, Bt]);
266
- let [Vt, Ht] = p(!1), [Ut, E] = p(null), [Wt, Gt] = p(!1), [Kt, D] = p(null), [qt, Jt] = p(!1), [Yt, O] = p(!1), [Xt, Zt] = p(""), [k, Qt] = p(!1), [$t, en] = p(null), tn = f(null), nn = f(null), rn = f(null), an = f(null), on = f(null), [sn, cn] = p(!1), [ln, un] = p(!1), [A, dn] = p(null), [fn, pn] = p(!1), [mn, hn] = p(null), [gn] = t({ fetchPolicy: "network-only" }), [j, M] = p(!1), [_n, N] = p(null), [P, vn] = p(!1), F = f(null), yn = f(null), I = f(null), bn = f(null), [xn] = r({ refetchQueries: ["GetAgent", "ListSessions"] });
267
- d(() => {
268
- if (!j) return;
266
+ }), [Vt] = n({ refetchQueries: ["GetAgent"] }), [Ht] = s(), [Ut] = re(), [w, Wt] = m(null), [Gt, Kt] = m(null), qt = pe((e) => e.setActiveAgentId);
267
+ f(() => {
268
+ h && qt(h);
269
+ }, [h, qt]);
270
+ let [Jt, Yt] = m(!1), [Xt, T] = m(null), [Zt, Qt] = m(!1), [$t, E] = m(null), [en, tn] = m(!1), [nn, rn] = m(!1), [an, on] = m(""), [D, sn] = m(!1), [cn, ln] = m(null), un = p(null), dn = p(null), fn = p(null), pn = p(null), mn = p(null), [hn, gn] = m(!1), [_n, vn] = m(!1), [O, yn] = m(null), [bn, xn] = m(!1), [Sn, Cn] = m(null), [wn] = t({ fetchPolicy: "network-only" }), [k, A] = m(!1), [Tn, j] = m(null), [M, En] = m(!1), N = p(null), Dn = p(null), On = p(null), kn = p(null), [An] = r({ refetchQueries: ["GetAgent", "ListSessions"] });
271
+ f(() => {
272
+ if (!k) return;
269
273
  let e = (e) => {
270
- e.key === "Escape" && !P && M(!1);
274
+ e.key === "Escape" && !M && A(!1);
271
275
  };
272
276
  return window.addEventListener("keydown", e), () => window.removeEventListener("keydown", e);
273
- }, [j, P]), d(() => {
274
- if (!j) return;
275
- let e = requestAnimationFrame(() => F.current?.focus());
277
+ }, [k, M]), f(() => {
278
+ if (!k) return;
279
+ let e = requestAnimationFrame(() => N.current?.focus());
276
280
  return () => cancelAnimationFrame(e);
277
- }, [j]);
278
- let { data: Sn, loading: Cn, error: wn, refetch: L } = a({
279
- variables: { id: m || "" },
280
- skip: !m,
281
+ }, [k]);
282
+ let { data: jn, loading: Mn, error: Nn, refetch: P } = a({
283
+ variables: { id: h || "" },
284
+ skip: !h,
281
285
  fetchPolicy: "cache-and-network"
282
- }), R = Sn?.vibecontrolsAgent, Tn = oe({
286
+ }), F = jn?.vibecontrolsAgent, I = oe({
283
287
  fetchPolicy: "cache-and-network",
284
288
  nextFetchPolicy: "cache-first",
285
289
  notifyOnNetworkStatusChange: !0,
286
- skip: !m,
290
+ skip: !h,
287
291
  pollInterval: 3e4
288
- }), { data: En } = s({ skip: !m }), Dn = Tn.data === void 0 && En === void 0, z = ze(() => {
289
- let e = /* @__PURE__ */ new Map(), t = En?.vibecontrolsAgentHealthProbeStream ?? Tn.data?.vibecontrolsAgentHealthProbes ?? [];
292
+ }), { data: Pn } = ae({ skip: !h }), Fn = I.data === void 0 && Pn === void 0, L = Ve(() => {
293
+ let e = /* @__PURE__ */ new Map(), t = Pn?.vibecontrolsAgentHealthProbeStream ?? I.data?.vibecontrolsAgentHealthProbes ?? [];
290
294
  for (let n of t) e.set(n.agentId, {
291
295
  agentId: n.agentId,
292
296
  healthy: n.healthy,
293
297
  errorMessage: n.errorMessage
294
298
  });
295
299
  return e;
296
- }, [Tn.data, En]), B = ze(() => R ? je({
297
- id: R.id,
298
- isActive: R.isActive,
299
- metadata: R.metadata
300
- }, z, { probesLoading: Dn }) : "REGISTERING", [
301
- R,
302
- z,
303
- Dn
304
- ]), On = B === "STOPPED" || B === "OFFLINE", { active: V } = ve(R?.id ?? null), H = St("vibes.tabs.iframe-host")?.value === !0, kn = ze(() => {
305
- if (!H || !R?.tunnelUrl) return [];
306
- let e = R.id, t = V ?? "default";
300
+ }, [I.data, Pn]), R = Ve(() => F ? Ne({
301
+ id: F.id,
302
+ isActive: F.isActive,
303
+ metadata: F.metadata
304
+ }, L, { probesLoading: Fn }) : "REGISTERING", [
305
+ F,
306
+ L,
307
+ Fn
308
+ ]), In = R === "STOPPED" || R === "OFFLINE", { active: z } = ye(F?.id ?? null), B = kt("vibes.tabs.iframe-host")?.value === !0, Ln = Ve(() => {
309
+ if (!B || !F?.tunnelUrl) return [];
310
+ let e = F.id, t = z ?? "default";
307
311
  return [{
308
- tunnelUrl: R.tunnelUrl,
312
+ tunnelUrl: F.tunnelUrl,
309
313
  profile: t,
310
- label: R.name ?? R.id,
311
- mintIframeToken: async ({ pathPrefixes: n }) => Ie(e, t, n)
314
+ label: F.name ?? F.id,
315
+ mintIframeToken: async ({ pathPrefixes: n }) => Re(e, t, n)
312
316
  }];
313
317
  }, [
314
- H,
315
- R?.id,
316
- R?.tunnelUrl,
317
- R?.name,
318
- V
319
- ]), U = Tt(kn, {
318
+ B,
319
+ F?.id,
320
+ F?.tunnelUrl,
321
+ F?.name,
322
+ z
323
+ ]), V = Mt(Ln, {
320
324
  mountPoint: "agent.detailTab",
321
- enabled: H && kn.length > 0
322
- }), [W, An] = Fe(ze(() => {
323
- let e = U.data.filter((e) => e.contribution.mountPoint === "agent.detailTab").map((e) => e.contribution.id);
324
- return [...Dt, ...e];
325
- }, [U.data]), "overview"), [jn, Mn] = p(!1), Nn = f(!1);
326
- d(() => {
327
- R && !Nn.current && (Nn.current = !0, Pt().catch(() => {}));
328
- }, [R, Pt]);
329
- let [Pn] = te(), Fn = f(!1);
330
- d(() => {
331
- if (!R || Fn.current) return;
332
- let e = !!(R.appId && R.appClientId), t = !!R.tunnelUrl;
333
- !e || !t || (Fn.current = !0, Pn({ variables: { input: { agentId: R.id } } }).then(() => {
334
- L().catch(() => {});
325
+ enabled: B && Ln.length > 0
326
+ }), [H, Rn] = Le(Ve(() => {
327
+ let e = V.data.filter((e) => e.contribution.mountPoint === "agent.detailTab").map((e) => e.contribution.id);
328
+ return [...Pt, ...e];
329
+ }, [V.data]), "overview"), [zn, Bn] = m(!1), Vn = p(!1);
330
+ f(() => {
331
+ F && !Vn.current && (Vn.current = !0, Vt().catch(() => {}));
332
+ }, [F, Vt]);
333
+ let [Hn] = te(), Un = p(!1);
334
+ f(() => {
335
+ if (!F || Un.current) return;
336
+ let e = !!(F.appId && F.appClientId), t = !!F.tunnelUrl;
337
+ !e || !t || (Un.current = !0, Hn({ variables: { input: { agentId: F.id } } }).then(() => {
338
+ P().catch(() => {});
335
339
  }).catch(() => {}));
336
340
  }, [
337
- R,
338
- Pn,
339
- L
341
+ F,
342
+ Hn,
343
+ P
340
344
  ]);
341
- let [G, In] = p([]), [Ln, Rn] = p([]), [zn, Bn] = p(!0), [Vn, Hn] = p(null), [Un, K] = p(null), [Wn, Gn] = p(!1), [Kn, qn] = p("plugin"), Jn = f(null), [q, Yn] = p("installed"), [J, Xn] = p(""), [Y, Zn] = p([]), [Qn, $n] = p(!1), [er, tr] = p(null), [nr, rr] = p(null), [ir] = e(), [ar] = ee(), [or] = o(), X = u(async () => {
342
- if (R?.id) {
343
- Bn(!0), K(null);
345
+ let [U, Wn] = m([]), [Gn, Kn] = m([]), [qn, Jn] = m(!0), [W, G] = m(null), [Yn, K] = m(null), [Xn, Zn] = m(!1), [Qn, $n] = m(!1), [er, tr] = m(!1), [nr, rr] = m(!1), [ir, ar] = m("plugin"), or = p(null), [q, sr] = m("installed"), [J, cr] = m(""), [Y, lr] = m([]), [ur, dr] = m(!1), [fr, pr] = m(null), [mr, hr] = m(null), [gr] = e(), [_r] = ee(), [vr] = o(), [yr] = c(), X = d(async () => {
346
+ if (F?.id) {
347
+ Jn(!0), K(null);
344
348
  try {
345
- let { data: e } = await ir({ variables: {
346
- agentId: R.id,
347
- profile: V
349
+ let { data: e } = await gr({ variables: {
350
+ agentId: F.id,
351
+ profile: z
348
352
  } }), t = e?.agentPlugins;
349
353
  if (t) {
350
354
  let e = (t.installed || []).map((e) => ({
@@ -372,76 +376,100 @@ function Ot() {
372
376
  tags: [...e.tags],
373
377
  installed: e.installed
374
378
  }));
375
- In(e), Rn(n), t.error && K(t.error);
379
+ Wn(e), Kn(n), t.error && K(t.error);
376
380
  }
377
381
  } catch {
378
382
  K("Agent unreachable — unable to fetch plugin list");
379
383
  } finally {
380
- Bn(!1);
384
+ Jn(!1);
381
385
  }
382
386
  }
383
387
  }, [
384
- R?.id,
385
- ir,
386
- V
388
+ F?.id,
389
+ gr,
390
+ z
387
391
  ]);
388
- d(() => {
389
- if (!R?.id) return;
390
- let e = `${R.id}:${V}`;
391
- Jn.current !== e && (Jn.current = e, X());
392
+ f(() => {
393
+ if (!F?.id) return;
394
+ let e = `${F.id}:${z}`;
395
+ or.current !== e && (or.current = e, X());
392
396
  }, [
393
- R?.id,
394
- V,
397
+ F?.id,
398
+ z,
395
399
  X
396
400
  ]);
397
- let sr = u(async (e) => {
398
- if (R?.id) {
399
- Hn(e);
401
+ let br = d(async (e) => {
402
+ if (F?.id) {
403
+ G(e);
400
404
  try {
401
- let { data: t } = await ar({ variables: {
402
- agentId: R.id,
405
+ let { data: t } = await _r({ variables: {
406
+ agentId: F.id,
403
407
  packageName: e
404
408
  } });
405
409
  if (t?.installAgentPlugin?.success) await X();
406
- else throw Error(t?.installAgentPlugin?.error || w("agentDetails.installFailed", "Install failed"));
410
+ else throw Error(t?.installAgentPlugin?.error || C("agentDetails.installFailed", "Install failed"));
407
411
  } catch (e) {
408
- if (le(e)) {
409
- ue(), qn("plugin"), Gn(!0);
412
+ if (ue(e)) {
413
+ de(), ar("plugin"), rr(!0);
410
414
  return;
411
415
  }
412
- K(e instanceof Error ? e.message : w("agentDetails.pluginInstallFailed", "Failed to install plugin")), setTimeout(() => K(null), 5e3);
416
+ K(e instanceof Error ? e.message : C("agentDetails.pluginInstallFailed", "Failed to install plugin")), setTimeout(() => K(null), 5e3);
413
417
  } finally {
414
- Hn(null);
418
+ G(null);
415
419
  }
416
420
  }
417
421
  }, [
418
- R?.id,
419
- ar,
422
+ F?.id,
423
+ _r,
420
424
  X,
421
- w
422
- ]), cr = u(async (e) => {
423
- if (R?.id && window.confirm(w("agentDetails.removePluginConfirm", "Remove plugin {{packageName}}?", { packageName: e }))) {
424
- Hn(e);
425
+ C
426
+ ]), xr = d(async (e) => {
427
+ if (F?.id && window.confirm(C("agentDetails.removePluginConfirm", "Remove plugin {{packageName}}?", { packageName: e }))) {
428
+ G(e);
425
429
  try {
426
- let { data: t } = await or({ variables: {
427
- agentId: R.id,
430
+ let { data: t } = await vr({ variables: {
431
+ agentId: F.id,
428
432
  packageName: e
429
433
  } });
430
434
  if (t?.removeAgentPlugin?.success) await X();
431
- else throw Error(t?.removeAgentPlugin?.error || w("agentDetails.removeFailed", "Remove failed"));
435
+ else throw Error(t?.removeAgentPlugin?.error || C("agentDetails.removeFailed", "Remove failed"));
432
436
  } catch (e) {
433
- K(e instanceof Error ? e.message : w("agentDetails.pluginRemoveFailed", "Failed to remove plugin")), setTimeout(() => K(null), 5e3);
437
+ K(e instanceof Error ? e.message : C("agentDetails.pluginRemoveFailed", "Failed to remove plugin")), setTimeout(() => K(null), 5e3);
434
438
  } finally {
435
- Hn(null);
439
+ G(null);
436
440
  }
437
441
  }
438
442
  }, [
439
- R?.id,
440
- or,
443
+ F?.id,
444
+ vr,
445
+ X,
446
+ C
447
+ ]), Sr = d(async (e) => {
448
+ if (!F?.id) return;
449
+ let t = window.prompt(C("agentDetails.updatePluginPrompt", "Update {{packageName}} to which version? Leave blank for latest.", { packageName: e }));
450
+ if (t === null) return;
451
+ let n = t.trim() || void 0;
452
+ G(e);
453
+ try {
454
+ let { data: t } = await yr({ variables: {
455
+ agentId: F.id,
456
+ packageName: e,
457
+ version: n ?? null
458
+ } }), r = t?.updateAgentPlugin;
459
+ if (r?.ok) await X();
460
+ else throw Error(r?.error || C("agentDetails.updateFailed", "Plugin update failed"));
461
+ } catch (e) {
462
+ K(e instanceof Error ? e.message : C("agentDetails.pluginUpdateFailed", "Failed to update plugin")), setTimeout(() => K(null), 5e3);
463
+ } finally {
464
+ G(null);
465
+ }
466
+ }, [
467
+ F?.id,
468
+ yr,
441
469
  X,
442
- w
443
- ]), Z = R?.sessions || [], Q = R?.vibes || [], lr = u(async () => {
444
- $n(!0), tr(null);
470
+ C
471
+ ]), Z = F?.sessions || [], Q = F?.vibes || [], Cr = d(async () => {
472
+ dr(!0), pr(null);
445
473
  try {
446
474
  let e = await (await fetch(typeof window < "u" && window.__BURDENOFF_GLOBAL_GATEWAY__ || "/global/graphql", {
447
475
  method: "POST",
@@ -450,29 +478,29 @@ function Ot() {
450
478
  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 }" })
451
479
  })).json();
452
480
  if (e.errors?.length) throw Error(e.errors[0]?.message ?? "Failed to load store plugins");
453
- Zn((e.data?.myEntitlements ?? []).filter((e) => {
481
+ lr((e.data?.myEntitlements ?? []).filter((e) => {
454
482
  let t = e.product?.manifest;
455
483
  if (!t) return !1;
456
484
  let n = t.itemType?.toLowerCase();
457
485
  return n === "vibemodule" || n === "plugin";
458
486
  }));
459
487
  } catch (e) {
460
- tr(e instanceof Error ? e.message : "Failed to load store plugins");
488
+ pr(e instanceof Error ? e.message : "Failed to load store plugins");
461
489
  } finally {
462
- $n(!1);
490
+ dr(!1);
463
491
  }
464
492
  }, []);
465
- d(() => {
466
- q === "store" && Y.length === 0 && !Qn && lr();
493
+ f(() => {
494
+ q === "store" && Y.length === 0 && !ur && Cr();
467
495
  }, [
468
496
  q,
469
497
  Y.length,
470
- Qn,
471
- lr
498
+ ur,
499
+ Cr
472
500
  ]);
473
- let ur = u(async (e, t) => {
474
- if (R?.id) {
475
- rr(e);
501
+ let wr = d(async (e, t) => {
502
+ if (F?.id) {
503
+ hr(e);
476
504
  try {
477
505
  let n = await (await fetch(typeof window < "u" && window.__BURDENOFF_WSPACE_GATEWAY__ || "/workspaces/graphql", {
478
506
  method: "POST",
@@ -481,7 +509,7 @@ function Ot() {
481
509
  body: JSON.stringify({
482
510
  query: "mutation InstallStorePlugin($agentId: ID!, $productId: ID!, $licenseKey: String) {\n installStorePluginOnAgent(agentId: $agentId, productId: $productId, licenseKey: $licenseKey) {\n success\n error\n }\n }",
483
511
  variables: {
484
- agentId: R.id,
512
+ agentId: F.id,
485
513
  productId: e,
486
514
  licenseKey: t
487
515
  }
@@ -490,578 +518,595 @@ function Ot() {
490
518
  if (n.errors?.length) throw Error(n.errors[0]?.message ?? "Install failed");
491
519
  let r = n.data?.installStorePluginOnAgent;
492
520
  if (!r?.success) throw Error(r?.error ?? "Install failed");
493
- await X(), Yn("installed");
521
+ await X(), sr("installed");
494
522
  } catch (e) {
495
- tr(e instanceof Error ? e.message : "Install failed");
523
+ pr(e instanceof Error ? e.message : "Install failed");
496
524
  } finally {
497
- rr(null);
525
+ hr(null);
498
526
  }
499
527
  }
500
- }, [R?.id, X]);
501
- d(() => {
502
- if (typeof window > "u" || !R?.id) return;
528
+ }, [F?.id, X]);
529
+ f(() => {
530
+ if (typeof window > "u" || !F?.id) return;
503
531
  let e = new URLSearchParams(window.location.search), t = e.get("install"), n = e.get("licenseKey");
504
- if (t && t !== nr) {
505
- Yn("store"), ur(t, n);
532
+ if (t && t !== mr) {
533
+ sr("store"), wr(t, n);
506
534
  let e = new URL(window.location.href);
507
535
  e.searchParams.delete("install"), e.searchParams.delete("licenseKey"), window.history.replaceState({}, "", e.toString());
508
536
  }
509
537
  }, [
510
- R?.id,
511
- ur,
512
- nr
538
+ F?.id,
539
+ wr,
540
+ mr
513
541
  ]);
514
- let dr = u(async () => {
515
- if (!R?.id) return null;
516
- if (A) return A;
517
- pn(!0), hn(null);
542
+ let Tr = d(async () => {
543
+ if (!F?.id) return null;
544
+ if (O) return O;
545
+ xn(!0), Cn(null);
518
546
  try {
519
- let e = (await gn({ variables: { agentId: R.id } })).data?.vibecontrolsAgentSecretReveal ?? null;
520
- return e ? (dn(e), e) : (hn("No API key configured"), null);
547
+ let e = (await wn({ variables: { agentId: F.id } })).data?.vibecontrolsAgentSecretReveal ?? null;
548
+ return e ? (yn(e), e) : (Cn("No API key configured"), null);
521
549
  } catch (e) {
522
- return hn(e instanceof Error ? e.message : "Reveal failed"), null;
550
+ return Cn(e instanceof Error ? e.message : "Reveal failed"), null;
523
551
  } finally {
524
- pn(!1);
552
+ xn(!1);
525
553
  }
526
554
  }, [
527
- R?.id,
528
- A,
529
- gn
555
+ F?.id,
556
+ O,
557
+ wn
530
558
  ]);
531
- if (At) return /* @__PURE__ */ x("div", {
559
+ if (Lt) return /* @__PURE__ */ b("div", {
532
560
  className: "flex items-center justify-center min-h-[400px]",
533
- children: /* @__PURE__ */ x("p", {
561
+ children: /* @__PURE__ */ b("p", {
534
562
  className: "text-text-secondary",
535
563
  children: "Loading permissions…"
536
564
  })
537
565
  });
538
- if (jt && (jt.permissionStrings?.length ?? 0) > 0 && !kt(Se.AGENT_READ)) return /* @__PURE__ */ x("div", {
566
+ if (Rt && (Rt.permissionStrings?.length ?? 0) > 0 && !It(Ce.AGENT_READ)) return /* @__PURE__ */ b("div", {
539
567
  className: "flex items-center justify-center min-h-[400px]",
540
- children: /* @__PURE__ */ S("div", {
568
+ children: /* @__PURE__ */ x("div", {
541
569
  className: "text-center space-y-2",
542
- children: [/* @__PURE__ */ x("h2", {
570
+ children: [/* @__PURE__ */ b("h2", {
543
571
  className: "text-lg font-semibold text-foreground",
544
572
  children: "Access Denied"
545
- }), /* @__PURE__ */ x("p", {
573
+ }), /* @__PURE__ */ b("p", {
546
574
  className: "text-sm text-text-secondary",
547
575
  children: "You don't have permission to access this page."
548
576
  })]
549
577
  })
550
578
  });
551
579
  let $ = () => {
552
- C("/agents");
553
- }, fr = async (e) => {
554
- if (!(!R?.id || T)) {
555
- Lt(e), zt(null);
580
+ S("/agents");
581
+ }, Er = async (e) => {
582
+ if (!(!F?.id || w)) {
583
+ Wt(e), Kt(null);
556
584
  try {
557
- let t = e === "start" ? await Ft({ variables: { agentId: R.id } }) : await It({ variables: { agentId: R.id } }), n = e === "start" ? t.data?.startVibecontrolsAgent : t.data?.stopVibecontrolsAgent;
585
+ let t = e === "start" ? await Ht({ variables: { agentId: F.id } }) : await Ut({ variables: { agentId: F.id } }), n = e === "start" ? t.data?.startVibecontrolsAgent : t.data?.stopVibecontrolsAgent;
558
586
  if (!n || n.success === !1) throw Error(n?.error || `Failed to ${e} agent`);
559
- D(e === "start" ? w("agentDetails.agentStarted", "Agent started") : w("agentDetails.agentStopped", "Agent stopped")), setTimeout(() => D(null), 3e3), await Promise.all([L(), Tn.refetch()]).catch(() => {});
587
+ E(e === "start" ? C("agentDetails.agentStarted", "Agent started") : C("agentDetails.agentStopped", "Agent stopped")), setTimeout(() => E(null), 3e3), await Promise.all([P(), I.refetch()]).catch(() => {});
560
588
  } catch (t) {
561
589
  let n = t instanceof Error ? t.message : "";
562
- zt(/unable to connect|fetch failed|timed? ?out|ECONN|agent returned 5|network/i.test(n) ? w("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 || w("agentDetails.lifecycleFailed", `Failed to ${e} agent`)), setTimeout(() => zt(null), 6e3);
590
+ Kt(/unable to connect|fetch failed|timed? ?out|ECONN|agent returned 5|network/i.test(n) ? 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 ${e} agent`)), setTimeout(() => Kt(null), 6e3);
563
591
  } finally {
564
- Lt(null);
592
+ Wt(null);
565
593
  }
566
594
  }
567
- }, pr = () => void fr("start"), mr = () => void fr("stop"), hr = () => {
568
- E(null), Ht(!0);
569
- }, gr = async () => {
570
- if (!R?.id) return;
571
- let e = Xt.trim();
572
- if (!e || e === R.name) {
573
- O(!1);
595
+ }, Dr = () => void Er("start"), Or = () => void Er("stop"), kr = async () => {
596
+ await Promise.all([P(), I.refetch()]).catch(() => {}), S("/agents");
597
+ }, Ar = () => {
598
+ T(null), Yt(!0);
599
+ }, jr = async () => {
600
+ if (!F?.id) return;
601
+ let e = an.trim();
602
+ if (!e || e === F.name) {
603
+ rn(!1);
574
604
  return;
575
605
  }
576
- Qt(!0), en(null);
606
+ sn(!0), ln(null);
577
607
  try {
578
- let t = await Mt({ variables: {
579
- id: R.id,
608
+ let t = await zt({ variables: {
609
+ id: F.id,
580
610
  input: { name: e }
581
611
  } });
582
612
  if (t.error) throw t.error;
583
- O(!1);
613
+ rn(!1);
584
614
  } catch (e) {
585
- en(e instanceof Error ? e.message : String(e));
615
+ ln(e instanceof Error ? e.message : String(e));
586
616
  } finally {
587
- Qt(!1);
617
+ sn(!1);
588
618
  }
589
- }, _r = () => {
590
- O(!1), Zt(""), en(null);
591
- }, vr = async () => {
592
- if (!R?.id) return;
593
- let e = nn.current?.value?.trim(), t = rn.current?.value?.trim(), n = an.current?.value?.trim(), r = on.current?.value?.trim();
619
+ }, Mr = () => {
620
+ rn(!1), on(""), ln(null);
621
+ }, Nr = async () => {
622
+ if (!F?.id) return;
623
+ let e = dn.current?.value?.trim(), t = fn.current?.value?.trim(), n = pn.current?.value?.trim(), r = mn.current?.value?.trim();
594
624
  if (!e) {
595
- E(w("agentDetails.agentNameRequired", "Agent name is required"));
625
+ T(C("agentDetails.agentNameRequired", "Agent name is required"));
596
626
  return;
597
627
  }
598
628
  let i;
599
629
  if (r) try {
600
630
  i = JSON.parse(r);
601
631
  } catch {
602
- E(w("agentDetails.metadataJsonRequired", "Metadata must be valid JSON"));
632
+ T(C("agentDetails.metadataJsonRequired", "Metadata must be valid JSON"));
603
633
  return;
604
634
  }
605
- Gt(!0), E(null);
635
+ Qt(!0), T(null);
606
636
  try {
607
- await Mt({ variables: {
608
- id: R.id,
637
+ await zt({ variables: {
638
+ id: F.id,
609
639
  input: {
610
640
  name: e,
611
641
  ...t === void 0 ? {} : { tunnelUrl: t || null },
612
642
  aiContext: n || null,
613
643
  metadata: i
614
644
  }
615
- } }), Ht(!1), D(w("agentDetails.configurationUpdated", "Agent configuration updated successfully")), setTimeout(() => D(null), 3e3);
645
+ } }), Yt(!1), E(C("agentDetails.configurationUpdated", "Agent configuration updated successfully")), setTimeout(() => E(null), 3e3);
616
646
  } catch (e) {
617
- E(e instanceof Error ? e.message : w("agentDetails.configurationUpdateFailed", "Failed to update agent configuration"));
647
+ T(e instanceof Error ? e.message : C("agentDetails.configurationUpdateFailed", "Failed to update agent configuration"));
618
648
  } finally {
619
- Gt(!1);
649
+ Qt(!1);
620
650
  }
621
- }, yr = async () => {
622
- let e = await dr();
651
+ }, Pr = async () => {
652
+ let e = await Tr();
623
653
  if (e) try {
624
- await be(e), ye() && xe("API key copied"), un(!0), setTimeout(() => un(!1), 2e3);
654
+ await xe(e), be() && Se("API key copied"), vn(!0), setTimeout(() => vn(!1), 2e3);
625
655
  } catch {
626
656
  console.error("Failed to copy API key");
627
657
  }
628
- }, br = async () => {
629
- sn || await dr(), cn((e) => !e);
630
- }, xr = async () => {
631
- if (R?.id && window.confirm(w("agentDetails.removeAgentConfirm", "Are you sure you want to remove agent \"{{name}}\"?", { name: R.name }))) try {
632
- await Nt({ variables: { id: R.id } }), $();
633
- } catch (e) {
634
- console.error("Failed to remove agent:", e);
658
+ }, Fr = async () => {
659
+ hn || await Tr(), gn((e) => !e);
660
+ }, Ir = () => {
661
+ F?.id && ($n(!1), Zn(!0));
662
+ }, Lr = async () => {
663
+ if (F?.id) {
664
+ tr(!0);
665
+ try {
666
+ await Bt({ variables: {
667
+ id: F.id,
668
+ uninstallFromTarget: Qn
669
+ } }), Zn(!1), $();
670
+ } catch (e) {
671
+ console.error("Failed to remove agent:", e);
672
+ } finally {
673
+ tr(!1);
674
+ }
635
675
  }
636
- }, Sr = (e) => {
637
- C(`/sessions/${e}`);
638
- }, Cr = () => {
639
- N(null), M(!0);
640
- }, wr = async () => {
641
- let e = F.current?.value?.trim(), t = yn.current?.value, n = I.current?.value?.trim() || void 0, r = bn.current?.value?.trim() || void 0;
676
+ }, Rr = (e) => {
677
+ S(`/sessions/${e}`);
678
+ }, zr = () => {
679
+ j(null), A(!0);
680
+ }, Br = async () => {
681
+ let e = N.current?.value?.trim(), t = Dn.current?.value, n = On.current?.value?.trim() || void 0, r = kn.current?.value?.trim() || void 0;
642
682
  if (!e) {
643
- N(w("vibeDetails.sessionNameRequired", "Session name is required"));
683
+ j(C("vibeDetails.sessionNameRequired", "Session name is required"));
644
684
  return;
645
685
  }
646
- if (!R?.id) {
647
- N(w("agentDetails.noAgent", "Agent not loaded"));
686
+ if (!F?.id) {
687
+ j(C("agentDetails.noAgent", "Agent not loaded"));
648
688
  return;
649
689
  }
650
- let i = z.get(R.id);
690
+ let i = L.get(F.id);
651
691
  if (i && !i.healthy) {
652
- N(w("sessions.agentNotHealthy", "The selected agent isn’t fully reachable right now. Please wait for the agent badge to turn green and retry.") + (i.errorMessage ? ` (${i.errorMessage})` : ""));
692
+ j(C("sessions.agentNotHealthy", "The selected agent isn’t fully reachable right now. Please wait for the agent badge to turn green and retry.") + (i.errorMessage ? ` (${i.errorMessage})` : ""));
653
693
  return;
654
694
  }
655
- vn(!0), N(null);
695
+ En(!0), j(null);
656
696
  try {
657
- await xn({ variables: { input: {
697
+ await An({ variables: { input: {
658
698
  name: e,
659
699
  type: t || "TERMINAL",
660
- agentId: R.id,
700
+ agentId: F.id,
661
701
  command: n,
662
702
  workingDirectory: r
663
- } } }), M(!1), F.current && (F.current.value = ""), yn.current && (yn.current.selectedIndex = 0), I.current && (I.current.value = ""), bn.current && (bn.current.value = ""), D(w("sessions.createdSuccess", "Session created successfully")), setTimeout(() => D(null), 3e3);
703
+ } } }), A(!1), N.current && (N.current.value = ""), Dn.current && (Dn.current.selectedIndex = 0), On.current && (On.current.value = ""), kn.current && (kn.current.value = ""), E(C("sessions.createdSuccess", "Session created successfully")), setTimeout(() => E(null), 3e3);
664
704
  } catch (e) {
665
- if (le(e)) {
666
- M(!1), ue(), qn("session"), Gn(!0);
705
+ if (ue(e)) {
706
+ A(!1), de(), ar("session"), rr(!0);
667
707
  return;
668
708
  }
669
- N(e instanceof Error ? e.message : w("sessions.failedCreate", "Failed to create session"));
709
+ j(e instanceof Error ? e.message : C("sessions.failedCreate", "Failed to create session"));
670
710
  } finally {
671
- vn(!1);
711
+ En(!1);
672
712
  }
673
- }, Tr = (e) => {
674
- C(`/vibes/${e}`);
675
- }, Er = (e) => {
676
- if (!e) return w("health.never", "Never");
713
+ }, Vr = (e) => {
714
+ S(`/vibes/${e}`);
715
+ }, Hr = (e) => {
716
+ if (!e) return C("health.never", "Never");
677
717
  let t = Date.now() - new Date(e).getTime();
678
- return t < 6e4 ? w("health.justNow", "Just now") : t < 36e5 ? w("agentDetails.minutesAgo", "{{count}}m ago", { count: Math.floor(t / 6e4) }) : t < 864e5 ? w("agentDetails.hoursAgo", "{{count}}h ago", { count: Math.floor(t / 36e5) }) : new Date(e).toLocaleDateString();
718
+ 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();
679
719
  };
680
- if (Cn && !R) return /* @__PURE__ */ S(wt, {
720
+ if (Mn && !F) return /* @__PURE__ */ x(jt, {
681
721
  className: "space-y-6 p-4 sm:p-6 bg-bg-surface min-h-screen",
682
- children: [/* @__PURE__ */ S("button", {
722
+ children: [/* @__PURE__ */ x("button", {
683
723
  type: "button",
684
724
  onClick: $,
685
725
  className: "flex items-center gap-2 text-text-secondary hover:text-text-primary transition-colors",
686
- children: [/* @__PURE__ */ x(Ve, { className: "size-4" }), w("agentDetails.backToAgents", "Back to Agents")]
687
- }), /* @__PURE__ */ x(Ce, { variant: "detail" })]
726
+ children: [/* @__PURE__ */ b(Ue, { className: "size-4" }), C("agentDetails.backToAgents", "Back to Agents")]
727
+ }), /* @__PURE__ */ b(we, { variant: "detail" })]
688
728
  });
689
- if (wn && !R) return /* @__PURE__ */ S(wt, {
729
+ if (Nn && !F) return /* @__PURE__ */ x(jt, {
690
730
  className: "space-y-6 p-4 sm:p-6 bg-bg-surface min-h-screen",
691
- children: [/* @__PURE__ */ S("button", {
731
+ children: [/* @__PURE__ */ x("button", {
692
732
  type: "button",
693
733
  onClick: $,
694
734
  className: "flex items-center gap-2 text-text-secondary hover:text-text-primary transition-colors",
695
- children: [/* @__PURE__ */ x(Ve, { className: "size-4" }), w("agentDetails.backToAgents", "Back to Agents")]
696
- }), /* @__PURE__ */ x(me, {
697
- title: w("agentDetails.failedLoad", "Failed to load agent"),
698
- message: wn.message,
699
- onRetry: () => L()
735
+ children: [/* @__PURE__ */ b(Ue, { className: "size-4" }), C("agentDetails.backToAgents", "Back to Agents")]
736
+ }), /* @__PURE__ */ b(he, {
737
+ title: C("agentDetails.failedLoad", "Failed to load agent"),
738
+ message: Nn.message,
739
+ onRetry: () => P()
700
740
  })]
701
741
  });
702
- if (!R) return /* @__PURE__ */ S(wt, {
742
+ if (!F) return /* @__PURE__ */ x(jt, {
703
743
  className: "space-y-6 p-4 sm:p-6 bg-bg-surface min-h-screen",
704
- children: [/* @__PURE__ */ S("button", {
744
+ children: [/* @__PURE__ */ x("button", {
705
745
  type: "button",
706
746
  onClick: $,
707
747
  className: "flex items-center gap-2 text-text-secondary hover:text-text-primary transition-colors",
708
- children: [/* @__PURE__ */ x(Ve, { className: "size-4" }), w("agentDetails.backToAgents", "Back to Agents")]
709
- }), /* @__PURE__ */ x(ge, {
710
- icon: /* @__PURE__ */ x(ut, { className: "size-8 text-text-secondary" }),
711
- title: w("agentDetails.notFound", "Agent not found"),
712
- description: `${w("agentDetails.notFoundDescriptionPrefix", "No agent with ID")} "${m}" ${w("agentDetails.notFoundDescriptionSuffix", "exists")}`,
713
- action: /* @__PURE__ */ x("button", {
748
+ children: [/* @__PURE__ */ b(Ue, { className: "size-4" }), C("agentDetails.backToAgents", "Back to Agents")]
749
+ }), /* @__PURE__ */ b(_e, {
750
+ icon: /* @__PURE__ */ b(mt, { className: "size-8 text-text-secondary" }),
751
+ title: C("agentDetails.notFound", "Agent not found"),
752
+ description: `${C("agentDetails.notFoundDescriptionPrefix", "No agent with ID")} "${h}" ${C("agentDetails.notFoundDescriptionSuffix", "exists")}`,
753
+ action: /* @__PURE__ */ b("button", {
714
754
  type: "button",
715
755
  onClick: $,
716
756
  className: "px-4 py-2 bg-action-primary-bg text-action-primary-text rounded-md hover:bg-action-primary-bg-hover transition-colors",
717
- children: w("agentDetails.backToAgents", "Back to Agents")
757
+ children: C("agentDetails.backToAgents", "Back to Agents")
718
758
  })
719
759
  })]
720
760
  });
721
- let Dr = [
761
+ let Ur = [
722
762
  {
723
763
  id: "overview",
724
- label: w("nav.overview", "Overview"),
725
- icon: ut
764
+ label: C("nav.overview", "Overview"),
765
+ icon: mt
726
766
  },
727
767
  {
728
768
  id: "profiles",
729
- label: w("agentDetails.profiles", "Profiles"),
730
- icon: _t
769
+ label: C("agentDetails.profiles", "Profiles"),
770
+ icon: St
731
771
  },
732
772
  {
733
773
  id: "security",
734
- label: w("agentDetails.security", "Security"),
735
- icon: ft
774
+ label: C("agentDetails.security", "Security"),
775
+ icon: gt
736
776
  },
737
777
  {
738
778
  id: "plugins",
739
- label: w("agentDetails.plugins", "Plugins"),
740
- icon: st,
741
- badge: `${G.length}`
779
+ label: C("agentDetails.plugins", "Plugins"),
780
+ icon: ut,
781
+ badge: `${U.length}`
742
782
  },
743
783
  {
744
784
  id: "sessions",
745
- label: w("nav.sessions", "Sessions"),
746
- icon: _,
785
+ label: C("nav.sessions", "Sessions"),
786
+ icon: yt,
747
787
  badge: `${Z.length}`
748
788
  },
749
789
  {
750
790
  id: "logs",
751
- label: w("nav.logs", "Logs"),
752
- icon: ct
791
+ label: C("nav.logs", "Logs"),
792
+ icon: ft
753
793
  },
754
794
  {
755
795
  id: "connection",
756
- label: w("agentDetails.connection", "Connection Log"),
757
- icon: ct
796
+ label: C("agentDetails.connection", "Connection Log"),
797
+ icon: ft
758
798
  },
759
799
  {
760
800
  id: "vibes",
761
- label: w("nav.vibes", "Vibes"),
762
- icon: vt,
801
+ label: C("nav.vibes", "Vibes"),
802
+ icon: wt,
763
803
  badge: `${Q.length}`
764
804
  },
765
805
  {
766
806
  id: "notes",
767
- label: w("vibeDetails.notes", "Notes"),
768
- icon: et
807
+ label: C("vibeDetails.notes", "Notes"),
808
+ icon: rt
769
809
  },
770
810
  {
771
811
  id: "aliases",
772
- label: w("agentDetails.aliases", "Aliases"),
773
- icon: Ke
812
+ label: C("agentDetails.aliases", "Aliases"),
813
+ icon: Ye
774
814
  },
775
815
  {
776
816
  id: "backup",
777
- label: w("agentDetails.backup", "Backup"),
778
- icon: Ye
817
+ label: C("agentDetails.backup", "Backup"),
818
+ icon: Qe
819
+ },
820
+ {
821
+ id: "maintenance",
822
+ label: C("agentDetails.maintenance.tab", "Maintenance"),
823
+ icon: Ct
779
824
  }
780
- ], Or = Z.filter((e) => e.status === "RUNNING").length;
781
- return R?.tunnelUrl, /* @__PURE__ */ S(wt, {
825
+ ], Wr = Z.filter((e) => e.status === "RUNNING").length;
826
+ return F?.tunnelUrl, /* @__PURE__ */ x(jt, {
782
827
  className: "space-y-6 p-4 sm:p-6 bg-bg-surface min-h-screen",
783
828
  children: [
784
- Kt && /* @__PURE__ */ x("div", {
829
+ $t && /* @__PURE__ */ b("div", {
785
830
  className: "fixed top-4 left-4 right-4 sm:left-auto z-50 bg-status-success-bg text-status-success-text px-4 py-3 rounded-md shadow-lg",
786
- children: Kt
831
+ children: $t
787
832
  }),
788
- Rt && /* @__PURE__ */ x("div", {
833
+ Gt && /* @__PURE__ */ b("div", {
789
834
  className: "fixed top-16 left-4 right-4 sm:left-auto z-50 bg-status-error-bg text-status-error-text px-4 py-3 rounded-md shadow-lg",
790
- children: Rt
835
+ children: Gt
791
836
  }),
792
- /* @__PURE__ */ S("button", {
837
+ /* @__PURE__ */ x("button", {
793
838
  type: "button",
794
839
  onClick: $,
795
840
  className: "flex items-center gap-2 text-text-secondary hover:text-text-primary transition-colors",
796
- children: [/* @__PURE__ */ x(Ve, { className: "size-4" }), w("agentDetails.backToAgents", "Back to Agents")]
841
+ children: [/* @__PURE__ */ b(Ue, { className: "size-4" }), C("agentDetails.backToAgents", "Back to Agents")]
797
842
  }),
798
- /* @__PURE__ */ x(c, {
799
- title: R.name,
800
- description: R.hostname || w("agentDetails.noHostnameConfigured", "No hostname configured"),
843
+ /* @__PURE__ */ b(me, {
844
+ title: F.name,
845
+ description: F.hostname || C("agentDetails.noHostnameConfigured", "No hostname configured"),
801
846
  breadcrumb: [{
802
- label: w("nav.agents", "Agents"),
803
- path: Ot ? `${Ot}/agents` : "/agents"
804
- }, { label: R.name }],
805
- actions: /* @__PURE__ */ S("div", {
847
+ label: C("nav.agents", "Agents"),
848
+ path: Ft ? `${Ft}/agents` : "/agents"
849
+ }, { label: F.name }],
850
+ actions: /* @__PURE__ */ x("div", {
806
851
  className: "flex flex-wrap items-center gap-2",
807
852
  children: [
808
- /* @__PURE__ */ S("button", {
853
+ /* @__PURE__ */ x("button", {
809
854
  type: "button",
810
- onClick: () => C("/ai?contextLevel=agent"),
855
+ onClick: () => S("/ai?contextLevel=agent"),
811
856
  className: "flex items-center gap-2 px-3 py-2 bg-bg-sunken text-text-primary rounded-md hover:bg-bg-sunken/80 transition-colors",
812
- title: w("agentDetails.openAiChat", "Open AI chat with this agent"),
857
+ title: C("agentDetails.openAiChat", "Open AI chat with this agent"),
813
858
  "data-testid": "agent-open-ai-chat",
814
- children: [/* @__PURE__ */ x(He, { className: "size-4" }), /* @__PURE__ */ x("span", {
859
+ children: [/* @__PURE__ */ b(Ge, { className: "size-4" }), /* @__PURE__ */ b("span", {
815
860
  className: "hidden sm:inline",
816
- children: w("agentDetails.aiChat", "AI Chat")
861
+ children: C("agentDetails.aiChat", "AI Chat")
817
862
  })]
818
863
  }),
819
- /* @__PURE__ */ x("button", {
864
+ /* @__PURE__ */ b("button", {
820
865
  type: "button",
821
- onClick: () => L(),
822
- disabled: Cn,
866
+ onClick: () => P(),
867
+ disabled: Mn,
823
868
  className: "flex items-center gap-2 px-3 py-2 bg-bg-sunken text-text-primary rounded-md hover:bg-bg-sunken/80 transition-colors disabled:opacity-50",
824
- title: w("common.refresh", "Refresh"),
825
- children: /* @__PURE__ */ x(g, { className: `size-4 ${Cn ? "animate-spin" : ""}` })
869
+ title: C("common.refresh", "Refresh"),
870
+ children: /* @__PURE__ */ b(dt, { className: `size-4 ${Mn ? "animate-spin" : ""}` })
826
871
  }),
827
- On ? /* @__PURE__ */ S("button", {
872
+ In ? /* @__PURE__ */ x("button", {
828
873
  type: "button",
829
- onClick: pr,
830
- disabled: T !== null,
831
- "aria-busy": T === "start",
874
+ onClick: Dr,
875
+ disabled: w !== null,
876
+ "aria-busy": w === "start",
832
877
  className: "flex items-center gap-2 px-3 py-2 bg-status-success-bg text-status-success-text rounded-md hover:opacity-80 transition-colors disabled:opacity-60 disabled:cursor-not-allowed",
833
- children: [T === "start" ? /* @__PURE__ */ x(h, { className: "size-4 animate-spin" }) : /* @__PURE__ */ x(at, { className: "size-4" }), T === "start" ? w("agentDetails.starting", "Starting…") : w("agentDetails.start", "Start")]
834
- }) : /* @__PURE__ */ S("button", {
878
+ children: [w === "start" ? /* @__PURE__ */ b(g, { className: "size-4 animate-spin" }) : /* @__PURE__ */ b(ct, { className: "size-4" }), w === "start" ? C("agentDetails.starting", "Starting…") : C("agentDetails.start", "Start")]
879
+ }) : /* @__PURE__ */ x("button", {
835
880
  type: "button",
836
- onClick: mr,
837
- disabled: T !== null,
838
- "aria-busy": T === "stop",
881
+ onClick: Or,
882
+ disabled: w !== null,
883
+ "aria-busy": w === "stop",
839
884
  className: "flex items-center gap-2 px-3 py-2 bg-bg-sunken text-text-primary rounded-md hover:bg-bg-sunken/80 transition-colors disabled:opacity-60 disabled:cursor-not-allowed",
840
- children: [T === "stop" ? /* @__PURE__ */ x(h, { className: "size-4 animate-spin" }) : /* @__PURE__ */ x(pt, { className: "size-4" }), T === "stop" ? w("agentDetails.stopping", "Stopping…") : w("sessions.stop", "Stop")]
885
+ children: [w === "stop" ? /* @__PURE__ */ b(g, { className: "size-4 animate-spin" }) : /* @__PURE__ */ b(_t, { className: "size-4" }), w === "stop" ? C("agentDetails.stopping", "Stopping…") : C("sessions.stop", "Stop")]
841
886
  }),
842
- B === "DEGRADED" && /* @__PURE__ */ S("button", {
887
+ R === "DEGRADED" && /* @__PURE__ */ x("button", {
843
888
  type: "button",
844
- onClick: pr,
845
- disabled: T !== null,
846
- "aria-busy": T === "start",
889
+ onClick: Dr,
890
+ disabled: w !== null,
891
+ "aria-busy": w === "start",
847
892
  className: "flex items-center gap-2 px-3 py-2 bg-status-warning-bg text-status-warning-text rounded-md hover:opacity-80 transition-colors disabled:opacity-60 disabled:cursor-not-allowed",
848
- title: z.get(R.id)?.errorMessage ? `Retry lifecycle/start — last error: ${z.get(R.id)?.errorMessage}` : "Retry lifecycle/start",
849
- children: [T === "start" ? /* @__PURE__ */ x(h, { className: "size-4 animate-spin" }) : /* @__PURE__ */ x(g, { className: "size-4" }), T === "start" ? w("agentDetails.reconnecting", "Reconnecting…") : w("agentDetails.reconnect", "Reconnect")]
893
+ title: L.get(F.id)?.errorMessage ? `Retry lifecycle/start — last error: ${L.get(F.id)?.errorMessage}` : "Retry lifecycle/start",
894
+ children: [w === "start" ? /* @__PURE__ */ b(g, { className: "size-4 animate-spin" }) : /* @__PURE__ */ b(dt, { className: "size-4" }), w === "start" ? C("agentDetails.reconnecting", "Reconnecting…") : C("agentDetails.reconnect", "Reconnect")]
850
895
  }),
851
- /* @__PURE__ */ x(Ae, {
852
- agentId: R.id,
853
- tunnelUrl: R.tunnelUrl || null,
854
- profile: V
896
+ /* @__PURE__ */ b(Me, {
897
+ agentId: F.id,
898
+ tunnelUrl: F.tunnelUrl || null,
899
+ profile: z
855
900
  }),
856
- /* @__PURE__ */ S("button", {
901
+ /* @__PURE__ */ x("button", {
857
902
  type: "button",
858
- onClick: hr,
903
+ onClick: Ar,
859
904
  className: "flex items-center gap-2 px-3 py-2 bg-bg-sunken text-text-primary rounded-md hover:bg-bg-sunken/80 transition-colors",
860
- children: [/* @__PURE__ */ x(dt, { className: "size-4" }), w("agentDetails.configure", "Configure")]
905
+ children: [/* @__PURE__ */ b(ht, { className: "size-4" }), C("agentDetails.configure", "Configure")]
861
906
  }),
862
- /* @__PURE__ */ S("button", {
907
+ /* @__PURE__ */ x("button", {
863
908
  type: "button",
864
- onClick: xr,
909
+ onClick: Ir,
865
910
  className: "flex items-center gap-2 px-3 py-2 bg-status-error-bg text-status-error-text rounded-md hover:opacity-80 transition-colors",
866
- children: [/* @__PURE__ */ x(ht, { className: "size-4" }), w("sessions.remove", "Remove")]
911
+ children: [/* @__PURE__ */ b(bt, { className: "size-4" }), C("sessions.remove", "Remove")]
867
912
  })
868
913
  ]
869
914
  })
870
915
  }),
871
- /* @__PURE__ */ x("div", {
916
+ /* @__PURE__ */ b("div", {
872
917
  className: "flex items-center gap-2 -mt-2",
873
- children: Yt ? /* @__PURE__ */ S(b, { children: [
874
- /* @__PURE__ */ x("input", {
875
- ref: tn,
918
+ children: nn ? /* @__PURE__ */ x(y, { children: [
919
+ /* @__PURE__ */ b("input", {
920
+ ref: un,
876
921
  type: "text",
877
- value: Xt,
878
- onChange: (e) => Zt(e.target.value),
922
+ value: an,
923
+ onChange: (e) => on(e.target.value),
879
924
  onKeyDown: (e) => {
880
- e.key === "Enter" && !k ? gr() : e.key === "Escape" && _r();
925
+ e.key === "Enter" && !D ? jr() : e.key === "Escape" && Mr();
881
926
  },
882
- disabled: k,
927
+ disabled: D,
883
928
  maxLength: 120,
884
- "aria-label": w("agentDetails.renameInput", "New agent name"),
929
+ "aria-label": C("agentDetails.renameInput", "New agent name"),
885
930
  className: "flex-1 max-w-md px-3 py-1.5 text-sm bg-bg-surface border border-border-default rounded-md text-text-primary placeholder:text-text-placeholder focus:outline-none focus:ring-2 focus:ring-action-primary-bg",
886
- placeholder: R.name,
931
+ placeholder: F.name,
887
932
  "data-testid": "agent-details-rename-input"
888
933
  }),
889
- /* @__PURE__ */ S("button", {
934
+ /* @__PURE__ */ x("button", {
890
935
  type: "button",
891
- onClick: () => void gr(),
892
- disabled: !Xt.trim() || Xt.trim() === R.name || k,
936
+ onClick: () => void jr(),
937
+ disabled: !an.trim() || an.trim() === F.name || D,
893
938
  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-bg-hover transition-colors disabled:opacity-60 disabled:cursor-not-allowed",
894
939
  "data-testid": "agent-details-rename-save",
895
- children: [k ? /* @__PURE__ */ x(h, { className: "size-3.5 animate-spin" }) : /* @__PURE__ */ x(Ue, { className: "size-3.5" }), w("agentDetails.saveName", "Save")]
940
+ children: [D ? /* @__PURE__ */ b(g, { className: "size-3.5 animate-spin" }) : /* @__PURE__ */ b(Ke, { className: "size-3.5" }), C("agentDetails.saveName", "Save")]
896
941
  }),
897
- /* @__PURE__ */ x("button", {
942
+ /* @__PURE__ */ b("button", {
898
943
  type: "button",
899
- onClick: _r,
900
- disabled: k,
944
+ onClick: Mr,
945
+ disabled: D,
901
946
  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",
902
947
  "data-testid": "agent-details-rename-cancel",
903
- children: w("common.cancel", "Cancel")
948
+ children: C("common.cancel", "Cancel")
904
949
  }),
905
- $t && /* @__PURE__ */ x("span", {
950
+ cn && /* @__PURE__ */ b("span", {
906
951
  className: "text-xs text-status-error-text",
907
952
  role: "alert",
908
- children: $t
953
+ children: cn
909
954
  })
910
- ] }) : /* @__PURE__ */ S("button", {
955
+ ] }) : /* @__PURE__ */ x("button", {
911
956
  type: "button",
912
957
  onClick: () => {
913
- en(null), Zt(R.name), O(!0), requestAnimationFrame(() => tn.current?.select());
958
+ ln(null), on(F.name), rn(!0), requestAnimationFrame(() => un.current?.select());
914
959
  },
915
960
  className: "inline-flex items-center gap-1.5 text-xs text-text-secondary hover:text-text-primary transition-colors",
916
- title: w("agentDetails.renameTooltip", "Rename this agent"),
961
+ title: C("agentDetails.renameTooltip", "Rename this agent"),
917
962
  "data-testid": "agent-details-rename-trigger",
918
- children: [/* @__PURE__ */ x(Ze, { className: "size-3.5" }), w("agentDetails.rename", "Rename")]
963
+ children: [/* @__PURE__ */ b(et, { className: "size-3.5" }), C("agentDetails.rename", "Rename")]
919
964
  })
920
965
  }),
921
- B === "DEGRADED" && /* @__PURE__ */ S("div", {
966
+ R === "DEGRADED" && /* @__PURE__ */ x("div", {
922
967
  role: "status",
923
968
  "aria-live": "polite",
924
969
  className: "flex items-start gap-3 rounded-lg border border-status-warning-border bg-status-warning-bg/30 px-4 py-3 text-sm text-text-primary",
925
970
  children: [
926
- /* @__PURE__ */ x(h, { className: "size-4 mt-0.5 flex-shrink-0 animate-spin text-status-warning-text" }),
927
- /* @__PURE__ */ S("div", {
971
+ /* @__PURE__ */ b(g, { className: "size-4 mt-0.5 flex-shrink-0 animate-spin text-status-warning-text" }),
972
+ /* @__PURE__ */ x("div", {
928
973
  className: "flex-1 min-w-0 space-y-1",
929
974
  children: [
930
- /* @__PURE__ */ x("p", {
975
+ /* @__PURE__ */ b("p", {
931
976
  className: "font-medium",
932
- children: w("agentDetails.degradedBanner.title", "Agent is degraded — auto-reconnecting in the background")
977
+ children: C("agentDetails.degradedBanner.title", "Agent is degraded — auto-reconnecting in the background")
933
978
  }),
934
- z.get(R.id)?.errorMessage && /* @__PURE__ */ x("p", {
979
+ L.get(F.id)?.errorMessage && /* @__PURE__ */ b("p", {
935
980
  className: "text-xs text-text-secondary",
936
- children: /* @__PURE__ */ x("span", {
981
+ children: /* @__PURE__ */ b("span", {
937
982
  className: "font-mono text-status-warning-text",
938
- children: z.get(R.id)?.errorMessage
983
+ children: L.get(F.id)?.errorMessage
939
984
  })
940
985
  }),
941
- /* @__PURE__ */ x("p", {
986
+ /* @__PURE__ */ b("p", {
942
987
  className: "text-xs text-text-secondary",
943
- children: w("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.")
988
+ 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.")
944
989
  })
945
990
  ]
946
991
  }),
947
- /* @__PURE__ */ x("button", {
992
+ /* @__PURE__ */ b("button", {
948
993
  type: "button",
949
- onClick: () => An("connection"),
994
+ onClick: () => Rn("connection"),
950
995
  className: "text-xs font-medium text-action-primary-text hover:underline flex-shrink-0",
951
- children: w("agentDetails.degradedBanner.viewLog", "View log →")
996
+ children: C("agentDetails.degradedBanner.viewLog", "View log →")
952
997
  })
953
998
  ]
954
999
  }),
955
- /* @__PURE__ */ S("div", {
1000
+ /* @__PURE__ */ x("div", {
956
1001
  className: "grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-4 gap-4",
957
1002
  children: [
958
- /* @__PURE__ */ x(l, {
1003
+ /* @__PURE__ */ b(u, {
959
1004
  className: "p-4",
960
- children: /* @__PURE__ */ S("div", {
1005
+ children: /* @__PURE__ */ x("div", {
961
1006
  className: "flex items-center gap-3",
962
- children: [/* @__PURE__ */ x("div", {
1007
+ children: [/* @__PURE__ */ b("div", {
963
1008
  className: "size-10 rounded-lg bg-bg-sunken flex items-center justify-center",
964
- children: /* @__PURE__ */ x(ut, { className: "size-5 text-text-secondary" })
965
- }), /* @__PURE__ */ S("div", { children: [/* @__PURE__ */ x("p", {
1009
+ children: /* @__PURE__ */ b(mt, { className: "size-5 text-text-secondary" })
1010
+ }), /* @__PURE__ */ x("div", { children: [/* @__PURE__ */ b("p", {
966
1011
  className: "text-sm text-text-secondary",
967
- children: w("sessions.filterStatus", "Status")
968
- }), /* @__PURE__ */ x(De, {
969
- status: B,
970
- reason: z.get(R.id)?.errorMessage ?? (R.lastGatewayAuthPushStatus === "failed" ? R.lastGatewayAuthPushError ?? "Gateway-auth push failed" : null),
1012
+ children: C("sessions.filterStatus", "Status")
1013
+ }), /* @__PURE__ */ b(ke, {
1014
+ status: R,
1015
+ reason: L.get(F.id)?.errorMessage ?? (F.lastGatewayAuthPushStatus === "failed" ? F.lastGatewayAuthPushError ?? "Gateway-auth push failed" : null),
971
1016
  linkTo: "?tab=connection",
972
1017
  onClick: (e) => {
973
- e.preventDefault(), An("connection");
1018
+ e.preventDefault(), Rn("connection");
974
1019
  }
975
1020
  })] })]
976
1021
  })
977
1022
  }),
978
- /* @__PURE__ */ x(l, {
1023
+ /* @__PURE__ */ b(u, {
979
1024
  className: "p-4",
980
- children: /* @__PURE__ */ S("div", {
1025
+ children: /* @__PURE__ */ x("div", {
981
1026
  className: "flex items-center gap-3",
982
- children: [/* @__PURE__ */ x("div", {
1027
+ children: [/* @__PURE__ */ b("div", {
983
1028
  className: "size-10 rounded-lg bg-bg-sunken flex items-center justify-center",
984
- children: /* @__PURE__ */ x(Je, { className: "size-5 text-text-secondary" })
985
- }), /* @__PURE__ */ S("div", { children: [/* @__PURE__ */ x("p", {
1029
+ children: /* @__PURE__ */ b(Ze, { className: "size-5 text-text-secondary" })
1030
+ }), /* @__PURE__ */ x("div", { children: [/* @__PURE__ */ b("p", {
986
1031
  className: "text-sm text-text-secondary",
987
- children: w("analytics.platform", "Platform")
988
- }), /* @__PURE__ */ S("p", {
1032
+ children: C("analytics.platform", "Platform")
1033
+ }), /* @__PURE__ */ x("p", {
989
1034
  className: "font-semibold text-text-primary",
990
1035
  children: [
991
- R.platform,
1036
+ F.platform,
992
1037
  "/",
993
- R.architecture
1038
+ F.architecture
994
1039
  ]
995
1040
  })] })]
996
1041
  })
997
1042
  }),
998
- /* @__PURE__ */ x(l, {
1043
+ /* @__PURE__ */ b(u, {
999
1044
  className: "p-4",
1000
- children: /* @__PURE__ */ S("div", {
1045
+ children: /* @__PURE__ */ x("div", {
1001
1046
  className: "flex items-center gap-3",
1002
- children: [/* @__PURE__ */ x("div", {
1047
+ children: [/* @__PURE__ */ b("div", {
1003
1048
  className: "size-10 rounded-lg bg-bg-sunken flex items-center justify-center",
1004
- children: /* @__PURE__ */ x(tt, { className: "size-5 text-text-secondary" })
1005
- }), /* @__PURE__ */ S("div", { children: [/* @__PURE__ */ x("p", {
1049
+ children: /* @__PURE__ */ b(it, { className: "size-5 text-text-secondary" })
1050
+ }), /* @__PURE__ */ x("div", { children: [/* @__PURE__ */ b("p", {
1006
1051
  className: "text-sm text-text-secondary",
1007
- children: w("agentDetails.version", "Version")
1008
- }), /* @__PURE__ */ S("p", {
1052
+ children: C("agentDetails.version", "Version")
1053
+ }), /* @__PURE__ */ x("p", {
1009
1054
  className: "font-semibold text-text-primary",
1010
- children: ["v", R.version]
1055
+ children: ["v", F.version]
1011
1056
  })] })]
1012
1057
  })
1013
1058
  }),
1014
- /* @__PURE__ */ x(l, {
1059
+ /* @__PURE__ */ b(u, {
1015
1060
  className: "p-4",
1016
- children: /* @__PURE__ */ S("div", {
1061
+ children: /* @__PURE__ */ x("div", {
1017
1062
  className: "flex items-center gap-3",
1018
- children: [/* @__PURE__ */ x("div", {
1063
+ children: [/* @__PURE__ */ b("div", {
1019
1064
  className: "size-10 rounded-lg bg-bg-sunken flex items-center justify-center",
1020
- children: /* @__PURE__ */ x(_, { className: "size-5 text-text-secondary" })
1021
- }), /* @__PURE__ */ S("div", { children: [/* @__PURE__ */ x("p", {
1065
+ children: /* @__PURE__ */ b(yt, { className: "size-5 text-text-secondary" })
1066
+ }), /* @__PURE__ */ x("div", { children: [/* @__PURE__ */ b("p", {
1022
1067
  className: "text-sm text-text-secondary",
1023
- children: w("nav.sessions", "Sessions")
1024
- }), /* @__PURE__ */ S("p", {
1068
+ children: C("nav.sessions", "Sessions")
1069
+ }), /* @__PURE__ */ x("p", {
1025
1070
  className: "font-semibold text-text-primary",
1026
1071
  children: [
1027
- Or,
1072
+ Wr,
1028
1073
  " ",
1029
- w("health.active", "active")
1074
+ C("health.active", "active")
1030
1075
  ]
1031
1076
  })] })]
1032
1077
  })
1033
1078
  })
1034
1079
  ]
1035
1080
  }),
1036
- /* @__PURE__ */ x("div", {
1081
+ /* @__PURE__ */ b("div", {
1037
1082
  className: "border-b border-border-default",
1038
- children: /* @__PURE__ */ S("nav", {
1083
+ children: /* @__PURE__ */ x("nav", {
1039
1084
  className: "flex gap-1 -mb-px overflow-x-auto pb-1",
1040
- "aria-label": w("agentDetails.tabsAriaLabel", "Agent tabs"),
1085
+ "aria-label": C("agentDetails.tabsAriaLabel", "Agent tabs"),
1041
1086
  children: [
1042
- Dr.map((e) => {
1043
- let t = e.icon, n = W === e.id;
1044
- return /* @__PURE__ */ S("button", {
1087
+ Ur.map((e) => {
1088
+ let t = e.icon, n = H === e.id;
1089
+ return /* @__PURE__ */ x("button", {
1045
1090
  type: "button",
1046
- onClick: () => An(e.id),
1091
+ onClick: () => Rn(e.id),
1047
1092
  className: `flex shrink-0 items-center gap-1.5 px-3 py-2.5 text-xs sm:gap-2 sm:px-4 sm:text-sm font-medium border-b-2 transition-colors whitespace-nowrap ${n ? "border-action-primary-bg text-action-primary-bg" : "border-transparent text-text-secondary hover:text-text-primary hover:border-border-default"}`,
1048
1093
  "aria-selected": n,
1049
1094
  role: "tab",
1050
1095
  children: [
1051
- /* @__PURE__ */ x(t, { className: "size-4" }),
1096
+ /* @__PURE__ */ b(t, { className: "size-4" }),
1052
1097
  e.label,
1053
- e.badge && /* @__PURE__ */ x("span", {
1098
+ e.badge && /* @__PURE__ */ b("span", {
1054
1099
  className: `hidden rounded-full px-1.5 py-0.5 text-[10px] sm:inline-flex sm:text-xs ${n ? "bg-action-primary-bg/10 text-action-primary-bg" : "bg-bg-sunken text-text-muted"}`,
1055
1100
  children: e.badge
1056
1101
  })
1057
1102
  ]
1058
1103
  }, e.id);
1059
1104
  }),
1060
- H && U.data.map((e) => {
1061
- let t = W === e.contribution.id;
1062
- return /* @__PURE__ */ x("button", {
1105
+ B && V.data.map((e) => {
1106
+ let t = H === e.contribution.id;
1107
+ return /* @__PURE__ */ b("button", {
1063
1108
  type: "button",
1064
- onClick: () => An(e.contribution.id),
1109
+ onClick: () => Rn(e.contribution.id),
1065
1110
  className: `flex shrink-0 items-center gap-1.5 px-3 py-2.5 text-xs sm:gap-2 sm:px-4 sm:text-sm font-medium border-b-2 transition-colors whitespace-nowrap ${t ? "border-action-primary-bg text-action-primary-bg" : "border-transparent text-text-secondary hover:text-text-primary hover:border-border-default"}`,
1066
1111
  "aria-selected": t,
1067
1112
  role: "tab",
@@ -1069,16 +1114,16 @@ function Ot() {
1069
1114
  children: e.contribution.title
1070
1115
  }, `plugin-${e.contribution.id}`);
1071
1116
  }),
1072
- H && R && /* @__PURE__ */ S("button", {
1117
+ B && F && /* @__PURE__ */ x("button", {
1073
1118
  type: "button",
1074
- onClick: () => Mn(!0),
1119
+ onClick: () => Bn(!0),
1075
1120
  className: "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",
1076
1121
  title: "Install a UI plugin tab",
1077
1122
  "aria-label": "Add tab",
1078
- children: [/* @__PURE__ */ x("span", {
1123
+ children: [/* @__PURE__ */ b("span", {
1079
1124
  "aria-hidden": !0,
1080
1125
  children: "+"
1081
- }), /* @__PURE__ */ x("span", {
1126
+ }), /* @__PURE__ */ b("span", {
1082
1127
  className: "hidden sm:inline",
1083
1128
  children: "Add tab"
1084
1129
  })]
@@ -1086,10 +1131,10 @@ function Ot() {
1086
1131
  ]
1087
1132
  })
1088
1133
  }),
1089
- /* @__PURE__ */ S(xt, {
1134
+ /* @__PURE__ */ x(Dt, {
1090
1135
  mode: "wait",
1091
1136
  children: [
1092
- W === "overview" && /* @__PURE__ */ S(y.div, {
1137
+ H === "overview" && /* @__PURE__ */ x(v.div, {
1093
1138
  initial: {
1094
1139
  opacity: 0,
1095
1140
  y: 8
@@ -1105,62 +1150,62 @@ function Ot() {
1105
1150
  transition: { duration: .2 },
1106
1151
  className: "space-y-6",
1107
1152
  children: [
1108
- /* @__PURE__ */ S(l, { children: [/* @__PURE__ */ x("div", {
1153
+ /* @__PURE__ */ x(u, { children: [/* @__PURE__ */ b("div", {
1109
1154
  className: "p-4 border-b border-border-default",
1110
- children: /* @__PURE__ */ S("h3", {
1155
+ children: /* @__PURE__ */ x("h3", {
1111
1156
  className: "font-semibold text-text-primary flex items-center gap-2",
1112
- children: [/* @__PURE__ */ x(We, { className: "size-5" }), w("agentDetails.capabilities", "Capabilities")]
1157
+ children: [/* @__PURE__ */ b(qe, { className: "size-5" }), C("agentDetails.capabilities", "Capabilities")]
1113
1158
  })
1114
- }), /* @__PURE__ */ x("div", {
1159
+ }), /* @__PURE__ */ b("div", {
1115
1160
  className: "p-4",
1116
- children: /* @__PURE__ */ x("div", {
1161
+ children: /* @__PURE__ */ b("div", {
1117
1162
  className: "flex flex-wrap gap-2",
1118
- children: R.capabilities && typeof R.capabilities == "object" && (Array.isArray(R.capabilities) ? R.capabilities.length > 0 : Object.keys(R.capabilities).length > 0) ? (Array.isArray(R.capabilities) ? R.capabilities : (() => {
1119
- let e = R.capabilities, t = Object.keys(e);
1163
+ children: F.capabilities && typeof F.capabilities == "object" && (Array.isArray(F.capabilities) ? F.capabilities.length > 0 : Object.keys(F.capabilities).length > 0) ? (Array.isArray(F.capabilities) ? F.capabilities : (() => {
1164
+ let e = F.capabilities, t = Object.keys(e);
1120
1165
  return t.length > 0 && t.every((e) => /^\d+$/.test(e)) ? Object.values(e) : t;
1121
- })()).map((e) => /* @__PURE__ */ x("span", {
1166
+ })()).map((e) => /* @__PURE__ */ b("span", {
1122
1167
  className: "px-3 py-1 bg-bg-sunken text-text-primary text-sm rounded-full",
1123
1168
  children: e
1124
- }, e)) : /* @__PURE__ */ S("div", {
1169
+ }, e)) : /* @__PURE__ */ x("div", {
1125
1170
  className: "space-y-2 text-sm text-text-secondary",
1126
1171
  children: [
1127
- /* @__PURE__ */ x("p", { children: w("agentDetails.noCapabilitiesConfigured", "No capabilities configured") }),
1128
- /* @__PURE__ */ S("p", {
1172
+ /* @__PURE__ */ b("p", { children: C("agentDetails.noCapabilitiesConfigured", "No capabilities configured") }),
1173
+ /* @__PURE__ */ x("p", {
1129
1174
  className: "text-xs",
1130
1175
  children: [
1131
1176
  "Capabilities are feature tags the agent advertises to vibes (e.g.",
1132
1177
  " ",
1133
- /* @__PURE__ */ x("code", {
1178
+ /* @__PURE__ */ b("code", {
1134
1179
  className: "text-text-primary",
1135
1180
  children: "docker"
1136
1181
  }),
1137
1182
  ",",
1138
1183
  " ",
1139
- /* @__PURE__ */ x("code", {
1184
+ /* @__PURE__ */ b("code", {
1140
1185
  className: "text-text-primary",
1141
1186
  children: "gpu"
1142
1187
  }),
1143
1188
  ",",
1144
1189
  " ",
1145
- /* @__PURE__ */ x("code", {
1190
+ /* @__PURE__ */ b("code", {
1146
1191
  className: "text-text-primary",
1147
1192
  children: "node20"
1148
1193
  }),
1149
1194
  ",",
1150
1195
  " ",
1151
- /* @__PURE__ */ x("code", {
1196
+ /* @__PURE__ */ b("code", {
1152
1197
  className: "text-text-primary",
1153
1198
  children: "git"
1154
1199
  }),
1155
1200
  "). Vibes use them to pick an agent that can run their workloads."
1156
1201
  ]
1157
1202
  }),
1158
- /* @__PURE__ */ S("p", {
1203
+ /* @__PURE__ */ x("p", {
1159
1204
  className: "text-xs",
1160
1205
  children: [
1161
1206
  "Add from the agent host CLI:",
1162
1207
  " ",
1163
- /* @__PURE__ */ x("code", {
1208
+ /* @__PURE__ */ b("code", {
1164
1209
  className: "text-text-primary",
1165
1210
  children: "vibe agent caps add docker gpu"
1166
1211
  }),
@@ -1171,120 +1216,120 @@ function Ot() {
1171
1216
  })
1172
1217
  })
1173
1218
  })] }),
1174
- /* @__PURE__ */ S(l, { children: [/* @__PURE__ */ x("div", {
1219
+ /* @__PURE__ */ x(u, { children: [/* @__PURE__ */ b("div", {
1175
1220
  className: "p-4 border-b border-border-default",
1176
- children: /* @__PURE__ */ S("h3", {
1221
+ children: /* @__PURE__ */ x("h3", {
1177
1222
  className: "font-semibold text-text-primary flex items-center gap-2",
1178
- children: [/* @__PURE__ */ x(mt, { className: "size-5" }), "Tags"]
1223
+ children: [/* @__PURE__ */ b(vt, { className: "size-5" }), "Tags"]
1179
1224
  })
1180
- }), /* @__PURE__ */ x("div", {
1225
+ }), /* @__PURE__ */ b("div", {
1181
1226
  className: "p-4",
1182
- children: /* @__PURE__ */ x(he, {
1227
+ children: /* @__PURE__ */ b(ge, {
1183
1228
  entityType: "VIBECONTROLS_AGENT",
1184
- entityId: R.id
1229
+ entityId: F.id
1185
1230
  })
1186
1231
  })] }),
1187
- R.tunnelUrl && /* @__PURE__ */ S(l, { children: [/* @__PURE__ */ x("div", {
1232
+ F.tunnelUrl && /* @__PURE__ */ x(u, { children: [/* @__PURE__ */ b("div", {
1188
1233
  className: "p-4 border-b border-border-default",
1189
- children: /* @__PURE__ */ S("h3", {
1234
+ children: /* @__PURE__ */ x("h3", {
1190
1235
  className: "font-semibold text-text-primary flex items-center gap-2",
1191
- children: [/* @__PURE__ */ x(vt, { className: "size-5" }), w("health.tunnel", "Tunnel")]
1236
+ children: [/* @__PURE__ */ b(wt, { className: "size-5" }), C("health.tunnel", "Tunnel")]
1192
1237
  })
1193
- }), /* @__PURE__ */ x("div", {
1238
+ }), /* @__PURE__ */ b("div", {
1194
1239
  className: "p-4",
1195
- children: /* @__PURE__ */ S("div", {
1240
+ children: /* @__PURE__ */ x("div", {
1196
1241
  className: "flex-1 min-w-0",
1197
- children: [/* @__PURE__ */ x("p", {
1242
+ children: [/* @__PURE__ */ b("p", {
1198
1243
  className: "text-sm text-text-secondary mb-1",
1199
- children: w("agentDetails.tunnelUrl", "Tunnel URL")
1200
- }), /* @__PURE__ */ x("a", {
1201
- href: R.tunnelUrl,
1244
+ children: C("agentDetails.tunnelUrl", "Tunnel URL")
1245
+ }), /* @__PURE__ */ b("a", {
1246
+ href: F.tunnelUrl,
1202
1247
  target: "_blank",
1203
1248
  rel: "noopener noreferrer",
1204
1249
  className: "text-action-primary-text hover:underline break-all",
1205
- children: R.tunnelUrl
1250
+ children: F.tunnelUrl
1206
1251
  })]
1207
1252
  })
1208
1253
  })] }),
1209
- /* @__PURE__ */ S(l, { children: [/* @__PURE__ */ x("div", {
1254
+ /* @__PURE__ */ x(u, { children: [/* @__PURE__ */ b("div", {
1210
1255
  className: "p-4 border-b border-border-default",
1211
- children: /* @__PURE__ */ S("h3", {
1256
+ children: /* @__PURE__ */ x("h3", {
1212
1257
  className: "font-semibold text-text-primary flex items-center gap-2",
1213
- children: [/* @__PURE__ */ x(dt, { className: "size-5" }), w("agentDetails.configuration", "Configuration")]
1258
+ children: [/* @__PURE__ */ b(ht, { className: "size-5" }), C("agentDetails.configuration", "Configuration")]
1214
1259
  })
1215
- }), /* @__PURE__ */ S("div", {
1260
+ }), /* @__PURE__ */ x("div", {
1216
1261
  className: "p-4 space-y-4",
1217
- children: [/* @__PURE__ */ S("div", {
1262
+ children: [/* @__PURE__ */ x("div", {
1218
1263
  className: "grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-4",
1219
1264
  children: [
1220
- /* @__PURE__ */ S("div", { children: [/* @__PURE__ */ x("p", {
1265
+ /* @__PURE__ */ x("div", { children: [/* @__PURE__ */ b("p", {
1221
1266
  className: "text-sm text-text-secondary",
1222
- children: w("analytics.platform", "Platform")
1223
- }), /* @__PURE__ */ x("p", {
1267
+ children: C("analytics.platform", "Platform")
1268
+ }), /* @__PURE__ */ b("p", {
1224
1269
  className: "font-medium text-text-primary",
1225
- children: R.platform
1270
+ children: F.platform
1226
1271
  })] }),
1227
- /* @__PURE__ */ S("div", { children: [/* @__PURE__ */ x("p", {
1272
+ /* @__PURE__ */ x("div", { children: [/* @__PURE__ */ b("p", {
1228
1273
  className: "text-sm text-text-secondary",
1229
- children: w("analytics.architecture", "Architecture")
1230
- }), /* @__PURE__ */ x("p", {
1274
+ children: C("analytics.architecture", "Architecture")
1275
+ }), /* @__PURE__ */ b("p", {
1231
1276
  className: "font-medium text-text-primary",
1232
- children: R.architecture
1277
+ children: F.architecture
1233
1278
  })] }),
1234
- /* @__PURE__ */ S("div", { children: [/* @__PURE__ */ x("p", {
1279
+ /* @__PURE__ */ x("div", { children: [/* @__PURE__ */ b("p", {
1235
1280
  className: "text-sm text-text-secondary",
1236
- children: w("agentDetails.version", "Version")
1237
- }), /* @__PURE__ */ x("p", {
1281
+ children: C("agentDetails.version", "Version")
1282
+ }), /* @__PURE__ */ b("p", {
1238
1283
  className: "font-medium text-text-primary",
1239
- children: R.version
1284
+ children: F.version
1240
1285
  })] })
1241
1286
  ]
1242
- }), R.aiContext && /* @__PURE__ */ S("div", { children: [/* @__PURE__ */ x("p", {
1287
+ }), F.aiContext && /* @__PURE__ */ x("div", { children: [/* @__PURE__ */ b("p", {
1243
1288
  className: "text-sm text-text-secondary mb-1",
1244
1289
  children: "AI Context"
1245
- }), /* @__PURE__ */ x("pre", {
1290
+ }), /* @__PURE__ */ b("pre", {
1246
1291
  className: "text-sm text-text-primary bg-bg-sunken border border-border-default rounded-md p-3 whitespace-pre-wrap font-sans",
1247
- children: R.aiContext
1292
+ children: F.aiContext
1248
1293
  })] })]
1249
1294
  })] }),
1250
- /* @__PURE__ */ S(l, { children: [/* @__PURE__ */ x("div", {
1295
+ /* @__PURE__ */ x(u, { children: [/* @__PURE__ */ b("div", {
1251
1296
  className: "p-4 border-b border-border-default",
1252
- children: /* @__PURE__ */ S("h3", {
1297
+ children: /* @__PURE__ */ x("h3", {
1253
1298
  className: "font-semibold text-text-primary flex items-center gap-2",
1254
- children: [/* @__PURE__ */ x(Ge, { className: "size-5" }), w("vibeDetails.timeline", "Timeline")]
1299
+ children: [/* @__PURE__ */ b(Je, { className: "size-5" }), C("vibeDetails.timeline", "Timeline")]
1255
1300
  })
1256
- }), /* @__PURE__ */ x("div", {
1301
+ }), /* @__PURE__ */ b("div", {
1257
1302
  className: "p-4",
1258
- children: /* @__PURE__ */ S("div", {
1303
+ children: /* @__PURE__ */ x("div", {
1259
1304
  className: "grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-4 text-sm",
1260
1305
  children: [
1261
- /* @__PURE__ */ S("div", { children: [/* @__PURE__ */ x("p", {
1306
+ /* @__PURE__ */ x("div", { children: [/* @__PURE__ */ b("p", {
1262
1307
  className: "text-text-secondary",
1263
- children: w("health.lastHeartbeat", "Last Heartbeat")
1264
- }), /* @__PURE__ */ x("p", {
1308
+ children: C("health.lastHeartbeat", "Last Heartbeat")
1309
+ }), /* @__PURE__ */ b("p", {
1265
1310
  className: "font-medium text-text-primary",
1266
- children: Er(R.lastHeartbeat)
1311
+ children: Hr(F.lastHeartbeat)
1267
1312
  })] }),
1268
- /* @__PURE__ */ S("div", { children: [/* @__PURE__ */ x("p", {
1313
+ /* @__PURE__ */ x("div", { children: [/* @__PURE__ */ b("p", {
1269
1314
  className: "text-text-secondary",
1270
- children: w("vibeDetails.created", "Created")
1271
- }), /* @__PURE__ */ x("p", {
1315
+ children: C("vibeDetails.created", "Created")
1316
+ }), /* @__PURE__ */ b("p", {
1272
1317
  className: "font-medium text-text-primary",
1273
- children: Er(R.createdAt)
1318
+ children: Hr(F.createdAt)
1274
1319
  })] }),
1275
- /* @__PURE__ */ S("div", { children: [/* @__PURE__ */ x("p", {
1320
+ /* @__PURE__ */ x("div", { children: [/* @__PURE__ */ b("p", {
1276
1321
  className: "text-text-secondary",
1277
- children: w("vibeDetails.updated", "Updated")
1278
- }), /* @__PURE__ */ x("p", {
1322
+ children: C("vibeDetails.updated", "Updated")
1323
+ }), /* @__PURE__ */ b("p", {
1279
1324
  className: "font-medium text-text-primary",
1280
- children: Er(R.updatedAt)
1325
+ children: Hr(F.updatedAt)
1281
1326
  })] })
1282
1327
  ]
1283
1328
  })
1284
1329
  })] })
1285
1330
  ]
1286
1331
  }, "overview"),
1287
- W === "profiles" && /* @__PURE__ */ x(y.div, {
1332
+ H === "profiles" && /* @__PURE__ */ b(v.div, {
1288
1333
  initial: {
1289
1334
  opacity: 0,
1290
1335
  y: 8
@@ -1298,9 +1343,9 @@ function Ot() {
1298
1343
  y: -8
1299
1344
  },
1300
1345
  transition: { duration: .2 },
1301
- children: /* @__PURE__ */ x(Ne, { agentId: R.id })
1346
+ children: /* @__PURE__ */ b(Fe, { agentId: F.id })
1302
1347
  }, "profiles"),
1303
- W === "security" && /* @__PURE__ */ S(y.div, {
1348
+ H === "security" && /* @__PURE__ */ x(v.div, {
1304
1349
  initial: {
1305
1350
  opacity: 0,
1306
1351
  y: 8
@@ -1316,89 +1361,89 @@ function Ot() {
1316
1361
  transition: { duration: .2 },
1317
1362
  className: "space-y-6",
1318
1363
  children: [
1319
- /* @__PURE__ */ S(l, { children: [/* @__PURE__ */ x("div", {
1364
+ /* @__PURE__ */ x(u, { children: [/* @__PURE__ */ b("div", {
1320
1365
  className: "p-4 border-b border-border-default",
1321
- children: /* @__PURE__ */ S("h3", {
1366
+ children: /* @__PURE__ */ x("h3", {
1322
1367
  className: "font-semibold text-text-primary flex items-center gap-2",
1323
- children: [/* @__PURE__ */ x(rt, { className: "size-5" }), w("agentDetails.agentApiKey", "Agent API Key")]
1368
+ children: [/* @__PURE__ */ b(ot, { className: "size-5" }), C("agentDetails.agentApiKey", "Agent API Key")]
1324
1369
  })
1325
- }), /* @__PURE__ */ S("div", {
1370
+ }), /* @__PURE__ */ x("div", {
1326
1371
  className: "p-4",
1327
- children: [R.tunnelUrl ? /* @__PURE__ */ S("div", {
1372
+ children: [F.tunnelUrl ? /* @__PURE__ */ x("div", {
1328
1373
  className: "flex items-center gap-3",
1329
1374
  children: [
1330
- /* @__PURE__ */ S("div", {
1375
+ /* @__PURE__ */ x("div", {
1331
1376
  className: "flex-1 min-w-0",
1332
- children: [/* @__PURE__ */ x("code", {
1377
+ children: [/* @__PURE__ */ b("code", {
1333
1378
  className: "text-sm font-mono text-text-primary bg-bg-sunken px-3 py-2 rounded-md block truncate",
1334
- children: sn && A ? A : fn ? w("agentDetails.revealLoading", "Revealing…") : "•".repeat(32)
1335
- }), mn && /* @__PURE__ */ x("p", {
1379
+ children: hn && O ? O : bn ? C("agentDetails.revealLoading", "Revealing…") : "•".repeat(32)
1380
+ }), Sn && /* @__PURE__ */ b("p", {
1336
1381
  className: "text-xs text-status-error-text mt-1",
1337
- children: mn
1382
+ children: Sn
1338
1383
  })]
1339
1384
  }),
1340
- /* @__PURE__ */ x("button", {
1385
+ /* @__PURE__ */ b("button", {
1341
1386
  type: "button",
1342
- onClick: () => void br(),
1343
- disabled: fn,
1387
+ onClick: () => void Fr(),
1388
+ disabled: bn,
1344
1389
  className: "p-2 rounded hover:bg-bg-sunken transition-colors flex-shrink-0 disabled:opacity-50",
1345
- title: sn ? w("agentDetails.hideApiKey", "Hide API key") : w("agentDetails.showApiKey", "Show API key"),
1346
- children: x(sn ? $e : Qe, { className: "size-4 text-text-secondary" })
1390
+ title: hn ? C("agentDetails.hideApiKey", "Hide API key") : C("agentDetails.showApiKey", "Show API key"),
1391
+ children: b(hn ? nt : tt, { className: "size-4 text-text-secondary" })
1347
1392
  }),
1348
- /* @__PURE__ */ x("button", {
1393
+ /* @__PURE__ */ b("button", {
1349
1394
  type: "button",
1350
- onClick: yr,
1395
+ onClick: Pr,
1351
1396
  className: "p-2 rounded hover:bg-bg-sunken transition-colors flex-shrink-0",
1352
- title: w("agentDetails.copyApiKey", "Copy API key"),
1353
- children: ln ? /* @__PURE__ */ x(Ue, { className: "size-4 text-status-success-text" }) : /* @__PURE__ */ x(qe, { className: "size-4 text-text-secondary" })
1397
+ title: C("agentDetails.copyApiKey", "Copy API key"),
1398
+ children: _n ? /* @__PURE__ */ b(Ke, { className: "size-4 text-status-success-text" }) : /* @__PURE__ */ b(Xe, { className: "size-4 text-text-secondary" })
1354
1399
  })
1355
1400
  ]
1356
- }) : /* @__PURE__ */ x("p", {
1401
+ }) : /* @__PURE__ */ b("p", {
1357
1402
  className: "text-sm text-text-secondary",
1358
1403
  children: "Agent tunnel not configured. Bring the agent online first."
1359
- }), /* @__PURE__ */ x("p", {
1404
+ }), /* @__PURE__ */ b("p", {
1360
1405
  className: "mt-2 text-xs text-text-muted",
1361
1406
  children: "This key authenticates requests sent to the agent. The key is revealed only on explicit operator action and every read is audited."
1362
1407
  })]
1363
1408
  })] }),
1364
- /* @__PURE__ */ x(Et, {
1365
- agent: R,
1366
- onUpdate: () => L()
1409
+ /* @__PURE__ */ b(Nt, {
1410
+ agent: F,
1411
+ onUpdate: () => P()
1367
1412
  }),
1368
- /* @__PURE__ */ x(Oe, { agent: {
1369
- id: R.id,
1370
- profile: V ?? "default"
1413
+ /* @__PURE__ */ b(Ae, { agent: {
1414
+ id: F.id,
1415
+ profile: z ?? "default"
1371
1416
  } })
1372
1417
  ]
1373
1418
  }, "security"),
1374
- W === "plugins" && (() => {
1375
- let e = J.toLowerCase(), t = G.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 = Ln.filter((t) => !t.installed && (!e || t.name.toLowerCase().includes(e) || t.packageName.toLowerCase().includes(e) || t.description.toLowerCase().includes(e))), r = G.filter((e) => e.hasUI), i = r.filter((t) => !e || t.pluginName.toLowerCase().includes(e) || t.packageName.toLowerCase().includes(e)), a = [
1419
+ H === "plugins" && (() => {
1420
+ let e = J.toLowerCase(), t = U.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 = Gn.filter((t) => !t.installed && (!e || t.name.toLowerCase().includes(e) || t.packageName.toLowerCase().includes(e) || t.description.toLowerCase().includes(e))), r = U.filter((e) => e.hasUI), i = r.filter((t) => !e || t.pluginName.toLowerCase().includes(e) || t.packageName.toLowerCase().includes(e)), a = [
1376
1421
  {
1377
1422
  id: "installed",
1378
1423
  label: "Installed",
1379
1424
  count: t.length,
1380
- icon: st
1425
+ icon: ut
1381
1426
  },
1382
1427
  {
1383
1428
  id: "available",
1384
1429
  label: "Available",
1385
1430
  count: n.length,
1386
- icon: Xe
1431
+ icon: $e
1387
1432
  },
1388
1433
  {
1389
1434
  id: "store",
1390
1435
  label: "Store",
1391
1436
  count: Y.length,
1392
- icon: Xe
1437
+ icon: $e
1393
1438
  },
1394
1439
  {
1395
1440
  id: "ui-plugins",
1396
1441
  label: "UI Plugins",
1397
1442
  count: i.length,
1398
- icon: it
1443
+ icon: st
1399
1444
  }
1400
1445
  ];
1401
- return /* @__PURE__ */ x(y.div, {
1446
+ return /* @__PURE__ */ b(v.div, {
1402
1447
  initial: {
1403
1448
  opacity: 0,
1404
1449
  y: 8
@@ -1413,69 +1458,69 @@ function Ot() {
1413
1458
  },
1414
1459
  transition: { duration: .2 },
1415
1460
  className: "space-y-6",
1416
- children: /* @__PURE__ */ S(l, { children: [/* @__PURE__ */ S("div", {
1461
+ children: /* @__PURE__ */ x(u, { children: [/* @__PURE__ */ x("div", {
1417
1462
  className: "p-4 border-b border-border-default space-y-3",
1418
1463
  children: [
1419
- /* @__PURE__ */ S("div", {
1464
+ /* @__PURE__ */ x("div", {
1420
1465
  className: "flex items-center justify-between",
1421
- children: [/* @__PURE__ */ S("h3", {
1466
+ children: [/* @__PURE__ */ x("h3", {
1422
1467
  className: "font-semibold text-text-primary flex items-center gap-2",
1423
1468
  children: [
1424
- /* @__PURE__ */ x(st, { className: "size-5" }),
1469
+ /* @__PURE__ */ b(ut, { className: "size-5" }),
1425
1470
  "Plugins",
1426
- G.length > 0 && /* @__PURE__ */ S("span", {
1471
+ U.length > 0 && /* @__PURE__ */ x("span", {
1427
1472
  className: "text-sm font-normal text-text-secondary",
1428
1473
  children: [
1429
1474
  "(",
1430
- G.filter((e) => e.isCore).length,
1475
+ U.filter((e) => e.isCore).length,
1431
1476
  " core,",
1432
1477
  " ",
1433
- G.filter((e) => !e.isCore).length,
1478
+ U.filter((e) => !e.isCore).length,
1434
1479
  " external)"
1435
1480
  ]
1436
1481
  })
1437
1482
  ]
1438
- }), /* @__PURE__ */ x("button", {
1483
+ }), /* @__PURE__ */ b("button", {
1439
1484
  type: "button",
1440
1485
  onClick: X,
1441
- disabled: zn,
1486
+ disabled: qn,
1442
1487
  className: "p-1.5 text-text-secondary hover:bg-bg-sunken rounded transition-colors disabled:opacity-50",
1443
- title: w("agentDetails.refreshPlugins", "Refresh plugins"),
1444
- children: /* @__PURE__ */ x(g, { className: `size-4 ${zn ? "animate-spin" : ""}` })
1488
+ title: C("agentDetails.refreshPlugins", "Refresh plugins"),
1489
+ children: /* @__PURE__ */ b(dt, { className: `size-4 ${qn ? "animate-spin" : ""}` })
1445
1490
  })]
1446
1491
  }),
1447
- /* @__PURE__ */ S("div", {
1492
+ /* @__PURE__ */ x("div", {
1448
1493
  className: "relative",
1449
1494
  children: [
1450
- /* @__PURE__ */ x(lt, { className: "absolute left-3 top-1/2 -translate-y-1/2 size-4 text-text-muted" }),
1451
- /* @__PURE__ */ x("input", {
1495
+ /* @__PURE__ */ b(pt, { className: "absolute left-3 top-1/2 -translate-y-1/2 size-4 text-text-muted" }),
1496
+ /* @__PURE__ */ b("input", {
1452
1497
  "aria-label": "control",
1453
1498
  type: "text",
1454
1499
  value: J,
1455
- onChange: (e) => Xn(e.target.value),
1456
- placeholder: w("agentDetails.searchPluginsPlaceholder", "Search plugins by name, package, description, or tag..."),
1500
+ onChange: (e) => cr(e.target.value),
1501
+ placeholder: C("agentDetails.searchPluginsPlaceholder", "Search plugins by name, package, description, or tag..."),
1457
1502
  className: "w-full pl-9 pr-8 py-2 text-sm bg-bg-sunken border border-border-default rounded-md text-text-primary placeholder:text-text-muted focus:outline-none focus:ring-1 focus:ring-action-primary-bg focus:border-action-primary-bg"
1458
1503
  }),
1459
- J && /* @__PURE__ */ x("button", {
1504
+ J && /* @__PURE__ */ b("button", {
1460
1505
  type: "button",
1461
- onClick: () => Xn(""),
1506
+ onClick: () => cr(""),
1462
1507
  className: "absolute right-2 top-1/2 -translate-y-1/2 p-0.5 text-text-muted hover:text-text-secondary rounded",
1463
- children: /* @__PURE__ */ x(v, { className: "size-3.5" })
1508
+ children: /* @__PURE__ */ b(_, { className: "size-3.5" })
1464
1509
  })
1465
1510
  ]
1466
1511
  }),
1467
- /* @__PURE__ */ x("div", {
1512
+ /* @__PURE__ */ b("div", {
1468
1513
  className: "flex gap-1 border-b border-border-default -mx-4 overflow-x-auto px-4 pb-1",
1469
1514
  children: a.map((e) => {
1470
1515
  let t = q === e.id, n = e.icon;
1471
- return /* @__PURE__ */ S("button", {
1516
+ return /* @__PURE__ */ x("button", {
1472
1517
  type: "button",
1473
- onClick: () => Yn(e.id),
1518
+ onClick: () => sr(e.id),
1474
1519
  className: `flex shrink-0 items-center gap-1.5 px-3 py-2 text-xs sm:text-sm font-medium border-b-2 transition-colors whitespace-nowrap ${t ? "border-action-primary-bg text-action-primary-bg" : "border-transparent text-text-secondary hover:text-text-primary hover:border-border-default"}`,
1475
1520
  children: [
1476
- /* @__PURE__ */ x(n, { className: "size-3.5" }),
1521
+ /* @__PURE__ */ b(n, { className: "size-3.5" }),
1477
1522
  e.label,
1478
- /* @__PURE__ */ x("span", {
1523
+ /* @__PURE__ */ b("span", {
1479
1524
  className: `text-xs px-1.5 py-0.5 rounded-full ${t ? "bg-action-primary-bg/15 text-action-primary-bg" : "bg-bg-secondary text-text-muted"}`,
1480
1525
  children: e.count
1481
1526
  })
@@ -1484,90 +1529,90 @@ function Ot() {
1484
1529
  })
1485
1530
  })
1486
1531
  ]
1487
- }), /* @__PURE__ */ S("div", {
1532
+ }), /* @__PURE__ */ x("div", {
1488
1533
  className: "p-4 space-y-4",
1489
1534
  children: [
1490
- Un && /* @__PURE__ */ S("div", {
1535
+ Yn && /* @__PURE__ */ x("div", {
1491
1536
  className: "flex items-center gap-2 p-3 bg-status-error-bg text-status-error-text rounded-md text-sm",
1492
1537
  children: [
1493
- /* @__PURE__ */ x(v, { className: "size-4 flex-shrink-0" }),
1494
- /* @__PURE__ */ x("span", {
1538
+ /* @__PURE__ */ b(_, { className: "size-4 flex-shrink-0" }),
1539
+ /* @__PURE__ */ b("span", {
1495
1540
  className: "flex-1",
1496
- children: Un
1541
+ children: Yn
1497
1542
  }),
1498
- /* @__PURE__ */ x("button", {
1543
+ /* @__PURE__ */ b("button", {
1499
1544
  type: "button",
1500
1545
  onClick: () => K(null),
1501
1546
  className: "flex-shrink-0 p-0.5 hover:bg-status-error-text/10 rounded",
1502
- children: /* @__PURE__ */ x(v, { className: "size-3.5" })
1547
+ children: /* @__PURE__ */ b(_, { className: "size-3.5" })
1503
1548
  })
1504
1549
  ]
1505
1550
  }),
1506
- !R?.isActive && /* @__PURE__ */ S("p", {
1551
+ !F?.isActive && /* @__PURE__ */ x("p", {
1507
1552
  className: "text-sm text-text-muted flex items-center gap-1.5",
1508
- children: [/* @__PURE__ */ x(nt, { className: "size-4 flex-shrink-0" }), "Agent is offline — showing known plugin catalog. Live data will load when the agent is reachable."]
1553
+ children: [/* @__PURE__ */ b(at, { className: "size-4 flex-shrink-0" }), "Agent is offline — showing known plugin catalog. Live data will load when the agent is reachable."]
1509
1554
  }),
1510
- q === "installed" && /* @__PURE__ */ x(b, { children: t.length > 0 ? /* @__PURE__ */ x("div", {
1555
+ q === "installed" && /* @__PURE__ */ b(y, { children: t.length > 0 ? /* @__PURE__ */ b("div", {
1511
1556
  className: "space-y-2",
1512
- children: t.map((e) => /* @__PURE__ */ S("div", {
1557
+ children: t.map((e) => /* @__PURE__ */ x("div", {
1513
1558
  className: "flex flex-col sm:flex-row sm:items-center justify-between gap-2 p-3 bg-bg-sunken rounded-lg",
1514
- children: [/* @__PURE__ */ S("div", {
1559
+ children: [/* @__PURE__ */ x("div", {
1515
1560
  className: "min-w-0",
1516
1561
  children: [
1517
- /* @__PURE__ */ S("p", {
1562
+ /* @__PURE__ */ x("p", {
1518
1563
  className: "text-sm font-medium text-text-primary flex items-center gap-1.5 flex-wrap",
1519
1564
  children: [
1520
1565
  e.pluginName,
1521
- /* @__PURE__ */ x("span", {
1566
+ /* @__PURE__ */ b("span", {
1522
1567
  className: "text-xs text-text-muted font-normal",
1523
1568
  children: e.version === "latest" ? e.version : `v${e.version}`
1524
1569
  }),
1525
- e.isCore && /* @__PURE__ */ x("span", {
1570
+ e.isCore && /* @__PURE__ */ b("span", {
1526
1571
  className: "inline-flex items-center px-1.5 py-0.5 text-xs bg-action-primary-bg/10 text-action-primary-bg rounded border border-action-primary-bg/20",
1527
1572
  children: "core"
1528
1573
  }),
1529
- e.loaded && /* @__PURE__ */ x("span", {
1574
+ e.loaded && /* @__PURE__ */ b("span", {
1530
1575
  className: "inline-flex items-center px-1.5 py-0.5 text-xs bg-status-success-bg text-status-success-text rounded",
1531
1576
  children: "loaded"
1532
1577
  }),
1533
- e.hasProviders && /* @__PURE__ */ x("span", {
1578
+ e.hasProviders && /* @__PURE__ */ b("span", {
1534
1579
  className: "inline-flex items-center px-1.5 py-0.5 text-xs bg-status-warning-bg-subtle text-status-warning-text rounded",
1535
1580
  children: "provider"
1536
1581
  }),
1537
- e.hasUI && /* @__PURE__ */ x("span", {
1582
+ e.hasUI && /* @__PURE__ */ b("span", {
1538
1583
  className: "inline-flex items-center px-1.5 py-0.5 text-xs bg-accent-purple-subtle text-accent-purple rounded",
1539
1584
  children: "ui"
1540
1585
  })
1541
1586
  ]
1542
1587
  }),
1543
- e.description && /* @__PURE__ */ x("p", {
1588
+ e.description && /* @__PURE__ */ b("p", {
1544
1589
  className: "text-xs text-text-secondary mt-0.5",
1545
1590
  children: e.description
1546
1591
  }),
1547
- /* @__PURE__ */ S("div", {
1592
+ /* @__PURE__ */ x("div", {
1548
1593
  className: "flex items-center gap-2 mt-0.5 flex-wrap",
1549
1594
  children: [
1550
- !e.isCore && /* @__PURE__ */ x("span", {
1595
+ !e.isCore && /* @__PURE__ */ b("span", {
1551
1596
  className: "text-xs text-text-muted font-mono",
1552
1597
  children: e.packageName
1553
1598
  }),
1554
- e.cliCommand && /* @__PURE__ */ S("span", {
1599
+ e.cliCommand && /* @__PURE__ */ x("span", {
1555
1600
  className: "text-xs text-text-muted",
1556
1601
  children: [
1557
1602
  "cli:",
1558
1603
  " ",
1559
- /* @__PURE__ */ S("code", {
1604
+ /* @__PURE__ */ x("code", {
1560
1605
  className: "text-xs font-mono",
1561
1606
  children: ["vibe ", e.cliCommand]
1562
1607
  })
1563
1608
  ]
1564
1609
  }),
1565
- e.apiPrefix && /* @__PURE__ */ S("span", {
1610
+ e.apiPrefix && /* @__PURE__ */ x("span", {
1566
1611
  className: "text-xs text-text-muted",
1567
1612
  children: [
1568
1613
  "api:",
1569
1614
  " ",
1570
- /* @__PURE__ */ x("code", {
1615
+ /* @__PURE__ */ b("code", {
1571
1616
  className: "text-xs font-mono",
1572
1617
  children: e.apiPrefix
1573
1618
  })
@@ -1575,136 +1620,147 @@ function Ot() {
1575
1620
  })
1576
1621
  ]
1577
1622
  }),
1578
- e.tags && e.tags.length > 0 && /* @__PURE__ */ x("div", {
1623
+ e.tags && e.tags.length > 0 && /* @__PURE__ */ b("div", {
1579
1624
  className: "flex gap-1 mt-1 flex-wrap",
1580
- children: e.tags.map((e) => /* @__PURE__ */ x("span", {
1625
+ children: e.tags.map((e) => /* @__PURE__ */ b("span", {
1581
1626
  className: "inline-flex px-1.5 py-0.5 text-[10px] bg-bg-secondary text-text-muted rounded",
1582
1627
  children: e
1583
1628
  }, e))
1584
1629
  })
1585
1630
  ]
1586
- }), /* @__PURE__ */ S("div", {
1631
+ }), /* @__PURE__ */ x("div", {
1587
1632
  className: "flex items-center gap-2 flex-shrink-0 sm:ml-3",
1588
- children: [e.hasUI && /* @__PURE__ */ S("button", {
1589
- type: "button",
1590
- onClick: () => Yn("ui-plugins"),
1591
- className: "flex items-center gap-1.5 px-2.5 py-1.5 text-xs text-action-primary-bg bg-action-primary-bg/10 rounded-md hover:bg-action-primary-bg/20 transition-colors border border-action-primary-bg/20",
1592
- title: `Open ${e.pluginName} UI`,
1593
- children: [/* @__PURE__ */ x(it, { className: "size-3" }), "Open UI"]
1594
- }), !e.isCore && /* @__PURE__ */ S("button", {
1595
- type: "button",
1596
- onClick: () => cr(e.packageName),
1597
- disabled: Vn === e.packageName,
1598
- className: "flex items-center gap-1.5 px-2.5 py-1.5 text-xs font-medium text-status-error-text bg-status-error-bg/15 border border-status-error-border/40 rounded-md hover:bg-status-error-bg/25 transition-colors disabled:opacity-50 disabled:cursor-not-allowed",
1599
- children: [Vn === e.packageName ? /* @__PURE__ */ x(h, { className: "size-3 animate-spin" }) : /* @__PURE__ */ x(ht, { className: "size-3" }), "Remove"]
1600
- })]
1633
+ children: [
1634
+ e.hasUI && /* @__PURE__ */ x("button", {
1635
+ type: "button",
1636
+ onClick: () => sr("ui-plugins"),
1637
+ className: "flex items-center gap-1.5 px-2.5 py-1.5 text-xs text-action-primary-bg bg-action-primary-bg/10 rounded-md hover:bg-action-primary-bg/20 transition-colors border border-action-primary-bg/20",
1638
+ title: `Open ${e.pluginName} UI`,
1639
+ children: [/* @__PURE__ */ b(st, { className: "size-3" }), "Open UI"]
1640
+ }),
1641
+ !e.isCore && /* @__PURE__ */ x("button", {
1642
+ type: "button",
1643
+ onClick: () => Sr(e.packageName),
1644
+ disabled: W === e.packageName,
1645
+ className: "flex items-center gap-1.5 px-2.5 py-1.5 text-xs font-medium text-text-primary bg-bg-secondary border border-border-default rounded-md hover:bg-bg-elevated transition-colors disabled:opacity-50 disabled:cursor-not-allowed",
1646
+ title: C("agentDetails.updatePlugin", "Update plugin (latest or a specific version)"),
1647
+ children: [W === e.packageName ? /* @__PURE__ */ b(g, { className: "size-3 animate-spin" }) : /* @__PURE__ */ b(We, { className: "size-3" }), C("agentDetails.update", "Update")]
1648
+ }),
1649
+ !e.isCore && /* @__PURE__ */ x("button", {
1650
+ type: "button",
1651
+ onClick: () => xr(e.packageName),
1652
+ disabled: W === e.packageName,
1653
+ className: "flex items-center gap-1.5 px-2.5 py-1.5 text-xs font-medium text-status-error-text bg-status-error-bg/15 border border-status-error-border/40 rounded-md hover:bg-status-error-bg/25 transition-colors disabled:opacity-50 disabled:cursor-not-allowed",
1654
+ children: [W === e.packageName ? /* @__PURE__ */ b(g, { className: "size-3 animate-spin" }) : /* @__PURE__ */ b(bt, { className: "size-3" }), C("sessions.remove", "Remove")]
1655
+ })
1656
+ ]
1601
1657
  })]
1602
1658
  }, e.packageName))
1603
- }) : /* @__PURE__ */ x("p", {
1659
+ }) : /* @__PURE__ */ b("p", {
1604
1660
  className: "text-sm text-text-muted",
1605
1661
  children: J ? "No installed plugins match your search." : "No plugin data available. Check agent connectivity or refresh."
1606
1662
  }) }),
1607
- q === "available" && /* @__PURE__ */ x(b, { children: n.length > 0 ? /* @__PURE__ */ x("div", {
1663
+ q === "available" && /* @__PURE__ */ b(y, { children: n.length > 0 ? /* @__PURE__ */ b("div", {
1608
1664
  className: "space-y-2",
1609
- children: n.map((e) => /* @__PURE__ */ S("div", {
1665
+ children: n.map((e) => /* @__PURE__ */ x("div", {
1610
1666
  className: "flex flex-col sm:flex-row sm:items-center justify-between gap-2 p-3 bg-bg-sunken rounded-lg",
1611
- children: [/* @__PURE__ */ S("div", {
1667
+ children: [/* @__PURE__ */ x("div", {
1612
1668
  className: "min-w-0",
1613
1669
  children: [
1614
- /* @__PURE__ */ x("p", {
1670
+ /* @__PURE__ */ b("p", {
1615
1671
  className: "text-sm font-medium text-text-primary",
1616
1672
  children: e.name
1617
1673
  }),
1618
- /* @__PURE__ */ x("p", {
1674
+ /* @__PURE__ */ b("p", {
1619
1675
  className: "text-xs text-text-secondary mt-0.5",
1620
1676
  children: e.description
1621
1677
  }),
1622
- /* @__PURE__ */ x("p", {
1678
+ /* @__PURE__ */ b("p", {
1623
1679
  className: "text-xs text-text-muted font-mono mt-0.5",
1624
1680
  children: e.packageName
1625
1681
  })
1626
1682
  ]
1627
- }), /* @__PURE__ */ S("button", {
1683
+ }), /* @__PURE__ */ x("button", {
1628
1684
  type: "button",
1629
- onClick: () => sr(e.packageName),
1630
- disabled: Vn === e.packageName,
1685
+ onClick: () => br(e.packageName),
1686
+ disabled: W === e.packageName,
1631
1687
  className: "flex items-center gap-1.5 px-2.5 py-1.5 text-xs text-action-primary-text bg-action-primary-bg rounded-md hover:bg-action-primary-bg-hover transition-colors disabled:opacity-50 disabled:cursor-not-allowed flex-shrink-0 sm:ml-3",
1632
- children: [Vn === e.packageName ? /* @__PURE__ */ x(h, { className: "size-3 animate-spin" }) : /* @__PURE__ */ x(Xe, { className: "size-3" }), "Install"]
1688
+ children: [W === e.packageName ? /* @__PURE__ */ b(g, { className: "size-3 animate-spin" }) : /* @__PURE__ */ b($e, { className: "size-3" }), "Install"]
1633
1689
  })]
1634
1690
  }, e.packageName))
1635
- }) : /* @__PURE__ */ x("p", {
1691
+ }) : /* @__PURE__ */ b("p", {
1636
1692
  className: "text-sm text-text-muted",
1637
- children: J ? "No available plugins match your search." : Ln.every((e) => e.installed) ? "All available plugins are already installed." : "No available plugins found."
1693
+ children: J ? "No available plugins match your search." : Gn.every((e) => e.installed) ? "All available plugins are already installed." : "No available plugins found."
1638
1694
  }) }),
1639
- q === "store" && /* @__PURE__ */ S(b, { children: [er && /* @__PURE__ */ S("div", {
1695
+ q === "store" && /* @__PURE__ */ x(y, { children: [fr && /* @__PURE__ */ x("div", {
1640
1696
  className: "flex items-center gap-2 p-3 bg-status-error-bg text-status-error-text rounded-md text-sm",
1641
- children: [/* @__PURE__ */ x(v, { className: "size-4 flex-shrink-0" }), /* @__PURE__ */ x("span", {
1697
+ children: [/* @__PURE__ */ b(_, { className: "size-4 flex-shrink-0" }), /* @__PURE__ */ b("span", {
1642
1698
  className: "flex-1",
1643
- children: er
1699
+ children: fr
1644
1700
  })]
1645
- }), Qn ? /* @__PURE__ */ x("p", {
1701
+ }), ur ? /* @__PURE__ */ b("p", {
1646
1702
  className: "text-sm text-text-muted",
1647
1703
  children: "Loading purchased plugins…"
1648
- }) : Y.length === 0 ? /* @__PURE__ */ S("div", {
1704
+ }) : Y.length === 0 ? /* @__PURE__ */ x("div", {
1649
1705
  className: "py-8 text-center",
1650
- children: [/* @__PURE__ */ x("p", {
1706
+ children: [/* @__PURE__ */ b("p", {
1651
1707
  className: "text-sm text-text-muted",
1652
1708
  children: "No plugins purchased from the Burdenoff store yet."
1653
- }), /* @__PURE__ */ x("a", {
1709
+ }), /* @__PURE__ */ b("a", {
1654
1710
  href: "/store/marketplace",
1655
1711
  className: "mt-2 inline-flex items-center gap-1 text-xs font-semibold text-action-primary-text hover:underline",
1656
1712
  children: "Browse the store →"
1657
1713
  })]
1658
- }) : /* @__PURE__ */ x("div", {
1714
+ }) : /* @__PURE__ */ b("div", {
1659
1715
  className: "space-y-2",
1660
1716
  children: Y.map((e) => {
1661
- let t = (e.product?.manifest ?? {}).digital?.install, n = typeof t?.packageName == "string" ? t.packageName : null, r = G.some((e) => e.packageName === n);
1662
- return /* @__PURE__ */ S("div", {
1717
+ let t = (e.product?.manifest ?? {}).digital?.install, n = typeof t?.packageName == "string" ? t.packageName : null, r = U.some((e) => e.packageName === n);
1718
+ return /* @__PURE__ */ x("div", {
1663
1719
  className: "flex flex-col sm:flex-row sm:items-center justify-between gap-2 p-3 bg-bg-sunken rounded-lg",
1664
- children: [/* @__PURE__ */ S("div", {
1720
+ children: [/* @__PURE__ */ x("div", {
1665
1721
  className: "flex items-start gap-3 min-w-0 flex-1",
1666
- children: [e.product?.icon ? /* @__PURE__ */ x("img", {
1722
+ children: [e.product?.icon ? /* @__PURE__ */ b("img", {
1667
1723
  src: e.product.icon,
1668
1724
  alt: "",
1669
1725
  className: "size-10 rounded-md object-cover flex-shrink-0"
1670
- }) : /* @__PURE__ */ x("div", {
1726
+ }) : /* @__PURE__ */ b("div", {
1671
1727
  className: "size-10 flex-shrink-0 rounded-md bg-bg-secondary flex items-center justify-center",
1672
- children: /* @__PURE__ */ x(st, { className: "size-5 text-text-muted" })
1673
- }), /* @__PURE__ */ S("div", {
1728
+ children: /* @__PURE__ */ b(ut, { className: "size-5 text-text-muted" })
1729
+ }), /* @__PURE__ */ x("div", {
1674
1730
  className: "min-w-0 flex-1",
1675
1731
  children: [
1676
- /* @__PURE__ */ S("div", {
1732
+ /* @__PURE__ */ x("div", {
1677
1733
  className: "flex items-center gap-2",
1678
- children: [/* @__PURE__ */ x("h4", {
1734
+ children: [/* @__PURE__ */ b("h4", {
1679
1735
  className: "text-sm font-semibold text-text-primary truncate",
1680
1736
  children: e.product?.name ?? "Unknown"
1681
- }), e.licenseKey && /* @__PURE__ */ x("span", {
1737
+ }), e.licenseKey && /* @__PURE__ */ b("span", {
1682
1738
  className: "text-[10px] bg-status-success-bg text-status-success-text px-1.5 py-0.5 rounded-full",
1683
1739
  children: "Licensed"
1684
1740
  })]
1685
1741
  }),
1686
- n && /* @__PURE__ */ x("p", {
1742
+ n && /* @__PURE__ */ b("p", {
1687
1743
  className: "text-xs text-text-muted font-mono truncate",
1688
1744
  children: n
1689
1745
  }),
1690
- e.product?.description && /* @__PURE__ */ x("p", {
1746
+ e.product?.description && /* @__PURE__ */ b("p", {
1691
1747
  className: "text-xs text-text-secondary line-clamp-2 mt-1",
1692
1748
  children: e.product.description
1693
1749
  })
1694
1750
  ]
1695
1751
  })]
1696
- }), /* @__PURE__ */ x("button", {
1752
+ }), /* @__PURE__ */ b("button", {
1697
1753
  type: "button",
1698
- onClick: () => void ur(e.productId, e.licenseKey),
1699
- disabled: r || nr === e.productId || !n,
1754
+ onClick: () => void wr(e.productId, e.licenseKey),
1755
+ disabled: r || mr === e.productId || !n,
1700
1756
  className: "inline-flex items-center gap-1.5 px-3 py-1.5 text-xs font-semibold rounded-md bg-action-primary-bg text-action-primary-text hover:opacity-90 disabled:opacity-60 flex-shrink-0",
1701
- children: r ? "Installed" : nr === e.productId ? "Installing…" : "Install"
1757
+ children: r ? "Installed" : mr === e.productId ? "Installing…" : "Install"
1702
1758
  })]
1703
1759
  }, e.id);
1704
1760
  })
1705
1761
  })] }),
1706
- q === "ui-plugins" && /* @__PURE__ */ x(b, { children: r.length > 0 || R?.tunnelUrl ? /* @__PURE__ */ x(ke, {
1707
- availablePlugins: [...R?.tunnelUrl ? [{
1762
+ q === "ui-plugins" && /* @__PURE__ */ b(y, { children: r.length > 0 || F?.tunnelUrl ? /* @__PURE__ */ b(je, {
1763
+ availablePlugins: [...F?.tunnelUrl ? [{
1708
1764
  pluginName: "code-server",
1709
1765
  displayName: "Code Server (VS Code)",
1710
1766
  description: "Browser-based VS Code editor",
@@ -1716,22 +1772,22 @@ function Ot() {
1716
1772
  description: e.description,
1717
1773
  version: e.version
1718
1774
  }))],
1719
- tunnelUrl: R?.tunnelUrl || null,
1720
- agentId: R?.id ?? null,
1721
- profile: V
1722
- }) : /* @__PURE__ */ x("p", {
1775
+ tunnelUrl: F?.tunnelUrl || null,
1776
+ agentId: F?.id ?? null,
1777
+ profile: z
1778
+ }) : /* @__PURE__ */ b("p", {
1723
1779
  className: "text-sm text-text-muted",
1724
1780
  children: J ? "No UI plugins match your search." : "No plugins with UI are currently installed."
1725
1781
  }) }),
1726
- zn && G.length === 0 && /* @__PURE__ */ S("div", {
1782
+ qn && U.length === 0 && /* @__PURE__ */ x("div", {
1727
1783
  className: "flex items-center gap-2 text-sm text-text-secondary",
1728
- children: [/* @__PURE__ */ x(h, { className: "size-4 animate-spin" }), "Loading plugins..."]
1784
+ children: [/* @__PURE__ */ b(g, { className: "size-4 animate-spin" }), "Loading plugins..."]
1729
1785
  })
1730
1786
  ]
1731
1787
  })] })
1732
1788
  }, "plugins");
1733
1789
  })(),
1734
- W === "sessions" && /* @__PURE__ */ x(y.div, {
1790
+ H === "sessions" && /* @__PURE__ */ b(v.div, {
1735
1791
  initial: {
1736
1792
  opacity: 0,
1737
1793
  y: 8
@@ -1745,68 +1801,68 @@ function Ot() {
1745
1801
  y: -8
1746
1802
  },
1747
1803
  transition: { duration: .2 },
1748
- children: /* @__PURE__ */ S(l, { children: [/* @__PURE__ */ S("div", {
1804
+ children: /* @__PURE__ */ x(u, { children: [/* @__PURE__ */ x("div", {
1749
1805
  className: "p-4 border-b border-border-default flex items-center justify-between gap-3 flex-wrap",
1750
- children: [/* @__PURE__ */ S("h3", {
1806
+ children: [/* @__PURE__ */ x("h3", {
1751
1807
  className: "font-semibold text-text-primary flex items-center gap-2",
1752
1808
  children: [
1753
- /* @__PURE__ */ x(_, { className: "size-5" }),
1754
- w("nav.sessions", "Sessions"),
1809
+ /* @__PURE__ */ b(yt, { className: "size-5" }),
1810
+ C("nav.sessions", "Sessions"),
1755
1811
  " (",
1756
1812
  Z.length,
1757
1813
  ")"
1758
1814
  ]
1759
- }), /* @__PURE__ */ x(Ct, {
1760
- permission: Se.SESSION_CREATE,
1815
+ }), /* @__PURE__ */ b(At, {
1816
+ permission: Ce.SESSION_CREATE,
1761
1817
  deniedBehavior: "disable",
1762
1818
  deniedTooltip: "You don't have permission to create sessions",
1763
- children: /* @__PURE__ */ S("button", {
1819
+ children: /* @__PURE__ */ x("button", {
1764
1820
  "data-testid": "create-session-btn",
1765
- onClick: Cr,
1821
+ onClick: zr,
1766
1822
  className: "inline-flex items-center gap-2 px-3 py-1.5 bg-action-primary-bg text-action-primary-text rounded-md hover:bg-action-primary-bg-hover transition-colors text-sm font-medium disabled:opacity-50 disabled:cursor-not-allowed",
1767
- children: [/* @__PURE__ */ x(ot, { className: "w-4 h-4" }), w("sessions.createSession", "Create Session")]
1823
+ children: [/* @__PURE__ */ b(lt, { className: "w-4 h-4" }), C("sessions.createSession", "Create Session")]
1768
1824
  })
1769
1825
  })]
1770
- }), Z.length > 0 ? /* @__PURE__ */ x("div", {
1826
+ }), Z.length > 0 ? /* @__PURE__ */ b("div", {
1771
1827
  className: "divide-y divide-border-primary",
1772
- children: Z.map((e) => /* @__PURE__ */ S("div", {
1828
+ children: Z.map((e) => /* @__PURE__ */ x("div", {
1773
1829
  role: "button",
1774
1830
  tabIndex: 0,
1775
1831
  onKeyDown: (t) => {
1776
- (t.key === "Enter" || t.key === " ") && (t.preventDefault(), Sr(e.id));
1832
+ (t.key === "Enter" || t.key === " ") && (t.preventDefault(), Rr(e.id));
1777
1833
  },
1778
- onClick: () => Sr(e.id),
1834
+ onClick: () => Rr(e.id),
1779
1835
  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",
1780
- children: [/* @__PURE__ */ S("div", {
1836
+ children: [/* @__PURE__ */ x("div", {
1781
1837
  className: "flex items-center gap-3 min-w-0",
1782
- children: [/* @__PURE__ */ x(_, { className: "size-5 text-text-secondary flex-shrink-0" }), /* @__PURE__ */ S("div", {
1838
+ children: [/* @__PURE__ */ b(yt, { className: "size-5 text-text-secondary flex-shrink-0" }), /* @__PURE__ */ x("div", {
1783
1839
  className: "min-w-0",
1784
- children: [/* @__PURE__ */ x("p", {
1840
+ children: [/* @__PURE__ */ b("p", {
1785
1841
  className: "font-medium text-text-primary truncate",
1786
1842
  children: e.name
1787
- }), /* @__PURE__ */ x("p", {
1843
+ }), /* @__PURE__ */ b("p", {
1788
1844
  className: "text-sm text-text-secondary truncate",
1789
1845
  children: e.type
1790
1846
  })]
1791
1847
  })]
1792
- }), /* @__PURE__ */ x(_e, { status: e.status })]
1848
+ }), /* @__PURE__ */ b(ve, { status: e.status })]
1793
1849
  }, e.id))
1794
- }) : /* @__PURE__ */ S("div", {
1850
+ }) : /* @__PURE__ */ x("div", {
1795
1851
  className: "p-6 text-center text-text-secondary flex flex-col items-center gap-3",
1796
- children: [/* @__PURE__ */ x("span", { children: w("agentDetails.noSessionsOnAgent", "No sessions on this agent") }), /* @__PURE__ */ x(Ct, {
1797
- permission: Se.SESSION_CREATE,
1852
+ children: [/* @__PURE__ */ b("span", { children: C("agentDetails.noSessionsOnAgent", "No sessions on this agent") }), /* @__PURE__ */ b(At, {
1853
+ permission: Ce.SESSION_CREATE,
1798
1854
  deniedBehavior: "disable",
1799
1855
  deniedTooltip: "You don't have permission to create sessions",
1800
- children: /* @__PURE__ */ S("button", {
1856
+ children: /* @__PURE__ */ x("button", {
1801
1857
  "data-testid": "create-session-empty-btn",
1802
- onClick: Cr,
1858
+ onClick: zr,
1803
1859
  className: "inline-flex items-center gap-2 px-3 py-1.5 bg-action-primary-bg text-action-primary-text rounded-md hover:bg-action-primary-bg-hover transition-colors text-sm font-medium disabled:opacity-50 disabled:cursor-not-allowed",
1804
- children: [/* @__PURE__ */ x(ot, { className: "w-4 h-4" }), w("sessions.createSession", "Create Session")]
1860
+ children: [/* @__PURE__ */ b(lt, { className: "w-4 h-4" }), C("sessions.createSession", "Create Session")]
1805
1861
  })
1806
1862
  })]
1807
1863
  })] })
1808
1864
  }, "sessions"),
1809
- W === "connection" && /* @__PURE__ */ x(y.div, {
1865
+ H === "connection" && /* @__PURE__ */ b(v.div, {
1810
1866
  initial: {
1811
1867
  opacity: 0,
1812
1868
  y: 8
@@ -1820,15 +1876,15 @@ function Ot() {
1820
1876
  y: -8
1821
1877
  },
1822
1878
  transition: { duration: .2 },
1823
- children: /* @__PURE__ */ x(l, {
1879
+ children: /* @__PURE__ */ b(u, {
1824
1880
  className: "min-h-[60vh]",
1825
- children: /* @__PURE__ */ x(Te, {
1826
- agentId: R.id,
1827
- agentName: R.name
1881
+ children: /* @__PURE__ */ b(Ee, {
1882
+ agentId: F.id,
1883
+ agentName: F.name
1828
1884
  })
1829
1885
  })
1830
1886
  }, "connection"),
1831
- W === "logs" && /* @__PURE__ */ x(y.div, {
1887
+ H === "logs" && /* @__PURE__ */ b(v.div, {
1832
1888
  initial: {
1833
1889
  opacity: 0,
1834
1890
  y: 8
@@ -1842,22 +1898,22 @@ function Ot() {
1842
1898
  y: -8
1843
1899
  },
1844
1900
  transition: { duration: .2 },
1845
- children: /* @__PURE__ */ S(l, { children: [/* @__PURE__ */ x("div", {
1901
+ children: /* @__PURE__ */ x(u, { children: [/* @__PURE__ */ b("div", {
1846
1902
  className: "p-4 border-b border-border-default flex items-center justify-between",
1847
- children: /* @__PURE__ */ S("h3", {
1903
+ children: /* @__PURE__ */ x("h3", {
1848
1904
  className: "font-semibold text-text-primary flex items-center gap-2",
1849
- children: [/* @__PURE__ */ x(ct, { className: "size-5" }), w("nav.logs", "Logs")]
1905
+ children: [/* @__PURE__ */ b(ft, { className: "size-5" }), C("nav.logs", "Logs")]
1850
1906
  })
1851
- }), /* @__PURE__ */ x("div", {
1907
+ }), /* @__PURE__ */ b("div", {
1852
1908
  className: "p-4",
1853
- children: /* @__PURE__ */ x(Me, {
1854
- agentId: R.id,
1855
- profile: V,
1909
+ children: /* @__PURE__ */ b(Pe, {
1910
+ agentId: F.id,
1911
+ profile: z,
1856
1912
  className: "min-h-[28rem]"
1857
1913
  })
1858
1914
  })] })
1859
1915
  }, "logs"),
1860
- W === "vibes" && /* @__PURE__ */ x(y.div, {
1916
+ H === "vibes" && /* @__PURE__ */ b(v.div, {
1861
1917
  initial: {
1862
1918
  opacity: 0,
1863
1919
  y: 8
@@ -1871,48 +1927,48 @@ function Ot() {
1871
1927
  y: -8
1872
1928
  },
1873
1929
  transition: { duration: .2 },
1874
- children: /* @__PURE__ */ S(l, { children: [/* @__PURE__ */ x("div", {
1930
+ children: /* @__PURE__ */ x(u, { children: [/* @__PURE__ */ b("div", {
1875
1931
  className: "p-4 border-b border-border-default flex items-center justify-between",
1876
- children: /* @__PURE__ */ S("h3", {
1932
+ children: /* @__PURE__ */ x("h3", {
1877
1933
  className: "font-semibold text-text-primary flex items-center gap-2",
1878
1934
  children: [
1879
- /* @__PURE__ */ x(vt, { className: "size-5" }),
1880
- w("nav.vibes", "Vibes"),
1935
+ /* @__PURE__ */ b(wt, { className: "size-5" }),
1936
+ C("nav.vibes", "Vibes"),
1881
1937
  " (",
1882
1938
  Q.length,
1883
1939
  ")"
1884
1940
  ]
1885
1941
  })
1886
- }), Q.length > 0 ? /* @__PURE__ */ x("div", {
1942
+ }), Q.length > 0 ? /* @__PURE__ */ b("div", {
1887
1943
  className: "divide-y divide-border-primary",
1888
- children: Q.map((e) => /* @__PURE__ */ S("div", {
1944
+ children: Q.map((e) => /* @__PURE__ */ x("div", {
1889
1945
  role: "button",
1890
1946
  tabIndex: 0,
1891
1947
  onKeyDown: (t) => {
1892
- (t.key === "Enter" || t.key === " ") && (t.preventDefault(), Tr(e.id));
1948
+ (t.key === "Enter" || t.key === " ") && (t.preventDefault(), Vr(e.id));
1893
1949
  },
1894
- onClick: () => Tr(e.id),
1950
+ onClick: () => Vr(e.id),
1895
1951
  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",
1896
- children: [/* @__PURE__ */ S("div", {
1952
+ children: [/* @__PURE__ */ x("div", {
1897
1953
  className: "flex items-center gap-3 min-w-0",
1898
- children: [/* @__PURE__ */ x(vt, { className: "size-5 text-text-secondary flex-shrink-0" }), /* @__PURE__ */ S("div", {
1954
+ children: [/* @__PURE__ */ b(wt, { className: "size-5 text-text-secondary flex-shrink-0" }), /* @__PURE__ */ x("div", {
1899
1955
  className: "min-w-0",
1900
- children: [/* @__PURE__ */ x("p", {
1956
+ children: [/* @__PURE__ */ b("p", {
1901
1957
  className: "font-medium text-text-primary truncate",
1902
1958
  children: e.name
1903
- }), /* @__PURE__ */ x("p", {
1959
+ }), /* @__PURE__ */ b("p", {
1904
1960
  className: "text-sm text-text-secondary truncate",
1905
1961
  children: e.type
1906
1962
  })]
1907
1963
  })]
1908
- }), /* @__PURE__ */ x(_e, { status: e.status })]
1964
+ }), /* @__PURE__ */ b(ve, { status: e.status })]
1909
1965
  }, e.id))
1910
- }) : /* @__PURE__ */ x("div", {
1966
+ }) : /* @__PURE__ */ b("div", {
1911
1967
  className: "p-6 text-center text-text-secondary",
1912
- children: w("agentDetails.noVibesUsingAgent", "No vibes using this agent")
1968
+ children: C("agentDetails.noVibesUsingAgent", "No vibes using this agent")
1913
1969
  })] })
1914
1970
  }, "vibes"),
1915
- W === "notes" && /* @__PURE__ */ x(y.div, {
1971
+ H === "notes" && /* @__PURE__ */ b(v.div, {
1916
1972
  initial: {
1917
1973
  opacity: 0,
1918
1974
  y: 8
@@ -1927,7 +1983,7 @@ function Ot() {
1927
1983
  },
1928
1984
  transition: { duration: .2 },
1929
1985
  className: "space-y-6",
1930
- children: /* @__PURE__ */ x(Pe, {
1986
+ children: /* @__PURE__ */ b(Ie, {
1931
1987
  context: "agent",
1932
1988
  agentVibes: Q.map((e) => ({
1933
1989
  id: e.id,
@@ -1935,7 +1991,7 @@ function Ot() {
1935
1991
  }))
1936
1992
  })
1937
1993
  }, "notes"),
1938
- W === "aliases" && /* @__PURE__ */ x(y.div, {
1994
+ H === "aliases" && /* @__PURE__ */ b(v.div, {
1939
1995
  initial: {
1940
1996
  opacity: 0,
1941
1997
  y: 8
@@ -1950,12 +2006,12 @@ function Ot() {
1950
2006
  },
1951
2007
  transition: { duration: .2 },
1952
2008
  className: "space-y-6",
1953
- children: /* @__PURE__ */ x(Ee, { agent: {
1954
- id: R.id,
1955
- profile: R.metadata?.profile ?? "default"
2009
+ children: /* @__PURE__ */ b(Oe, { agent: {
2010
+ id: F.id,
2011
+ profile: F.metadata?.profile ?? "default"
1956
2012
  } })
1957
2013
  }, "aliases"),
1958
- W === "backup" && R.tunnelUrl && /* @__PURE__ */ x(y.div, {
2014
+ H === "backup" && F.tunnelUrl && /* @__PURE__ */ b(v.div, {
1959
2015
  initial: {
1960
2016
  opacity: 0,
1961
2017
  y: 8
@@ -1969,12 +2025,12 @@ function Ot() {
1969
2025
  y: -8
1970
2026
  },
1971
2027
  transition: { duration: .2 },
1972
- children: /* @__PURE__ */ x(we, {
1973
- agentId: R.id,
1974
- profile: V
2028
+ children: /* @__PURE__ */ b(Te, {
2029
+ agentId: F.id,
2030
+ profile: z
1975
2031
  })
1976
2032
  }, "backup"),
1977
- W === "backup" && !R.tunnelUrl && /* @__PURE__ */ x(y.div, {
2033
+ H === "backup" && !F.tunnelUrl && /* @__PURE__ */ b(v.div, {
1978
2034
  initial: {
1979
2035
  opacity: 0,
1980
2036
  y: 8
@@ -1988,21 +2044,41 @@ function Ot() {
1988
2044
  y: -8
1989
2045
  },
1990
2046
  transition: { duration: .2 },
1991
- children: /* @__PURE__ */ S(l, {
2047
+ children: /* @__PURE__ */ x(u, {
1992
2048
  className: "p-6 text-center text-text-secondary",
1993
2049
  children: [
1994
- /* @__PURE__ */ x(Ye, { className: "size-8 mx-auto mb-2 text-text-muted" }),
1995
- /* @__PURE__ */ x("p", { children: w("agentDetails.backupRequiresTunnelAndApiKey", "Agent tunnel URL and API key are required for backup management.") }),
1996
- /* @__PURE__ */ x("p", {
2050
+ /* @__PURE__ */ b(Qe, { className: "size-8 mx-auto mb-2 text-text-muted" }),
2051
+ /* @__PURE__ */ b("p", { children: C("agentDetails.backupRequiresTunnelAndApiKey", "Agent tunnel URL and API key are required for backup management.") }),
2052
+ /* @__PURE__ */ b("p", {
1997
2053
  className: "text-sm mt-1",
1998
- children: w("agentDetails.configureConnectionInOverview", "Configure the agent connection in the Overview tab.")
2054
+ children: C("agentDetails.configureConnectionInOverview", "Configure the agent connection in the Overview tab.")
1999
2055
  })
2000
2056
  ]
2001
2057
  })
2002
2058
  }, "backup-no-tunnel"),
2003
- H && (() => {
2004
- let e = U.data.find((e) => e.contribution.id === W);
2005
- return !e || !R ? null : /* @__PURE__ */ x(y.div, {
2059
+ H === "maintenance" && /* @__PURE__ */ b(v.div, {
2060
+ initial: {
2061
+ opacity: 0,
2062
+ y: 8
2063
+ },
2064
+ animate: {
2065
+ opacity: 1,
2066
+ y: 0
2067
+ },
2068
+ exit: {
2069
+ opacity: 0,
2070
+ y: -8
2071
+ },
2072
+ transition: { duration: .2 },
2073
+ children: /* @__PURE__ */ b(De, {
2074
+ agentId: F.id,
2075
+ agentVersion: F.version,
2076
+ onAfterDestructiveNuke: kr
2077
+ })
2078
+ }, "maintenance"),
2079
+ B && (() => {
2080
+ let e = V.data.find((e) => e.contribution.id === H);
2081
+ return !e || !F ? null : /* @__PURE__ */ b(v.div, {
2006
2082
  initial: {
2007
2083
  opacity: 0,
2008
2084
  y: 8
@@ -2017,14 +2093,14 @@ function Ot() {
2017
2093
  },
2018
2094
  transition: { duration: .2 },
2019
2095
  className: "space-y-6",
2020
- children: /* @__PURE__ */ x(l, { children: /* @__PURE__ */ x("div", {
2096
+ children: /* @__PURE__ */ b(u, { children: /* @__PURE__ */ b("div", {
2021
2097
  className: "p-0 h-[600px]",
2022
- children: /* @__PURE__ */ x(Re, {
2098
+ children: /* @__PURE__ */ b(Be, {
2023
2099
  contribution: e,
2024
2100
  tunnel: e.tunnel,
2025
2101
  restPaths: e.capabilities.restPaths.length > 0 ? e.capabilities.restPaths : [`/ui/${e.pluginKey}`],
2026
- context: { agentId: R.id },
2027
- agentId: R.id,
2102
+ context: { agentId: F.id },
2103
+ agentId: F.id,
2028
2104
  profile: e.tunnel.profile,
2029
2105
  theme: {
2030
2106
  colorMode: "light",
@@ -2039,172 +2115,172 @@ function Ot() {
2039
2115
  })()
2040
2116
  ]
2041
2117
  }),
2042
- H && R && /* @__PURE__ */ x(Le, {
2043
- isOpen: jn,
2044
- onClose: () => Mn(!1),
2118
+ B && F && /* @__PURE__ */ b(ze, {
2119
+ isOpen: zn,
2120
+ onClose: () => Bn(!1),
2045
2121
  mountPoint: "agent.detailTab",
2046
- agentId: R.id,
2047
- profile: V ?? "default",
2122
+ agentId: F.id,
2123
+ profile: z ?? "default",
2048
2124
  onInstalled: () => {
2049
- U.refetch();
2125
+ V.refetch();
2050
2126
  }
2051
2127
  }),
2052
- Vt && /* @__PURE__ */ x("div", {
2128
+ Jt && /* @__PURE__ */ b("div", {
2053
2129
  className: "fixed inset-0 bg-bg-overlay flex items-center justify-center z-[100] p-4",
2054
- children: /* @__PURE__ */ S("div", {
2130
+ children: /* @__PURE__ */ x("div", {
2055
2131
  className: "bg-bg-surface rounded-lg w-full max-w-lg max-h-[90vh] flex flex-col",
2056
2132
  children: [
2057
- /* @__PURE__ */ x("div", {
2133
+ /* @__PURE__ */ b("div", {
2058
2134
  className: "px-6 pt-6 pb-3 border-b border-border-default flex-shrink-0",
2059
- children: /* @__PURE__ */ S("h2", {
2135
+ children: /* @__PURE__ */ x("h2", {
2060
2136
  className: "text-lg font-semibold text-text-primary",
2061
2137
  children: [
2062
- w("agentDetails.configure", "Configure"),
2138
+ C("agentDetails.configure", "Configure"),
2063
2139
  " ",
2064
- R.name
2140
+ F.name
2065
2141
  ]
2066
2142
  })
2067
2143
  }),
2068
- /* @__PURE__ */ S("div", {
2144
+ /* @__PURE__ */ x("div", {
2069
2145
  className: "px-6 py-4 overflow-y-auto flex-1",
2070
- children: [Ut && /* @__PURE__ */ x("div", {
2146
+ children: [Xt && /* @__PURE__ */ b("div", {
2071
2147
  className: "mb-4 p-3 bg-status-error-bg text-status-error-text rounded-md text-sm",
2072
- children: Ut
2073
- }), /* @__PURE__ */ S("div", {
2148
+ children: Xt
2149
+ }), /* @__PURE__ */ x("div", {
2074
2150
  className: "space-y-4",
2075
2151
  children: [
2076
- /* @__PURE__ */ S("div", { children: [/* @__PURE__ */ x("label", {
2152
+ /* @__PURE__ */ x("div", { children: [/* @__PURE__ */ b("label", {
2077
2153
  className: "block text-sm font-medium text-text-primary mb-1",
2078
- children: w("webhooks.name", "Name")
2079
- }), /* @__PURE__ */ x("input", {
2154
+ children: C("webhooks.name", "Name")
2155
+ }), /* @__PURE__ */ b("input", {
2080
2156
  "aria-label": "control",
2081
- ref: nn,
2157
+ ref: dn,
2082
2158
  type: "text",
2083
- defaultValue: R.name,
2159
+ defaultValue: F.name,
2084
2160
  className: "w-full px-3 py-2 bg-bg-sunken border border-border-default rounded-md text-text-primary"
2085
2161
  })] }),
2086
- /* @__PURE__ */ S("div", { children: [/* @__PURE__ */ x("label", {
2162
+ /* @__PURE__ */ x("div", { children: [/* @__PURE__ */ b("label", {
2087
2163
  className: "block text-sm font-medium text-text-primary mb-1",
2088
- children: w("analytics.platform", "Platform")
2089
- }), /* @__PURE__ */ x("input", {
2164
+ children: C("analytics.platform", "Platform")
2165
+ }), /* @__PURE__ */ b("input", {
2090
2166
  "aria-label": "control",
2091
2167
  type: "text",
2092
- value: `${R.platform} / ${R.architecture}`,
2168
+ value: `${F.platform} / ${F.architecture}`,
2093
2169
  disabled: !0,
2094
2170
  className: "w-full px-3 py-2 bg-bg-sunken border border-border-default rounded-md text-text-secondary"
2095
2171
  })] }),
2096
- /* @__PURE__ */ S("div", { children: [/* @__PURE__ */ x("label", {
2172
+ /* @__PURE__ */ x("div", { children: [/* @__PURE__ */ b("label", {
2097
2173
  className: "block text-sm font-medium text-text-primary mb-1",
2098
- children: w("agentDetails.version", "Version")
2099
- }), /* @__PURE__ */ x("input", {
2174
+ children: C("agentDetails.version", "Version")
2175
+ }), /* @__PURE__ */ b("input", {
2100
2176
  "aria-label": "control",
2101
2177
  type: "text",
2102
- value: R.version,
2178
+ value: F.version,
2103
2179
  disabled: !0,
2104
2180
  className: "w-full px-3 py-2 bg-bg-sunken border border-border-default rounded-md text-text-secondary"
2105
2181
  })] }),
2106
- /* @__PURE__ */ S("div", { children: [
2107
- /* @__PURE__ */ x("label", {
2182
+ /* @__PURE__ */ x("div", { children: [
2183
+ /* @__PURE__ */ b("label", {
2108
2184
  className: "block text-sm font-medium text-text-primary mb-1",
2109
- children: w("agentDetails.tunnelUrl", "Tunnel URL")
2185
+ children: C("agentDetails.tunnelUrl", "Tunnel URL")
2110
2186
  }),
2111
- /* @__PURE__ */ x("input", {
2187
+ /* @__PURE__ */ b("input", {
2112
2188
  "aria-label": "control",
2113
- ref: rn,
2189
+ ref: fn,
2114
2190
  type: "text",
2115
- defaultValue: R.tunnelUrl ?? "",
2116
- placeholder: w("agentDetails.tunnelUrlPlaceholder", "https://xxx.trycloudflare.com"),
2191
+ defaultValue: F.tunnelUrl ?? "",
2192
+ placeholder: C("agentDetails.tunnelUrlPlaceholder", "https://xxx.trycloudflare.com"),
2117
2193
  className: "w-full px-3 py-2 bg-bg-sunken border border-border-default rounded-md text-text-primary font-mono text-sm"
2118
2194
  }),
2119
- /* @__PURE__ */ x("p", {
2195
+ /* @__PURE__ */ b("p", {
2120
2196
  className: "mt-1 text-xs text-text-muted",
2121
- children: w("agentDetails.tunnelUrlHint", "The public URL for accessing this agent remotely. Auto-updates when gateway auth is configured.")
2197
+ children: C("agentDetails.tunnelUrlHint", "The public URL for accessing this agent remotely. Auto-updates when gateway auth is configured.")
2122
2198
  })
2123
2199
  ] }),
2124
- /* @__PURE__ */ S("div", { children: [/* @__PURE__ */ S("div", {
2200
+ /* @__PURE__ */ x("div", { children: [/* @__PURE__ */ x("div", {
2125
2201
  className: "flex items-center gap-1.5 mb-1",
2126
- children: [/* @__PURE__ */ x("label", {
2202
+ children: [/* @__PURE__ */ b("label", {
2127
2203
  htmlFor: "agentdetailspage-58",
2128
2204
  className: "text-sm font-medium text-text-primary",
2129
2205
  children: "AI Context"
2130
- }), /* @__PURE__ */ S("div", {
2206
+ }), /* @__PURE__ */ x("div", {
2131
2207
  className: "relative",
2132
- children: [/* @__PURE__ */ x("button", {
2208
+ children: [/* @__PURE__ */ b("button", {
2133
2209
  type: "button",
2134
- onClick: () => Jt((e) => !e),
2210
+ onClick: () => tn((e) => !e),
2135
2211
  className: "p-0.5 rounded-full text-text-muted hover:text-text-secondary transition-colors",
2136
2212
  "aria-label": "What is AI Context?",
2137
- children: /* @__PURE__ */ x(nt, { className: "size-3.5" })
2138
- }), qt && /* @__PURE__ */ S(b, { children: [/* @__PURE__ */ x("div", {
2213
+ children: /* @__PURE__ */ b(at, { className: "size-3.5" })
2214
+ }), en && /* @__PURE__ */ x(y, { children: [/* @__PURE__ */ b("div", {
2139
2215
  role: "button",
2140
2216
  tabIndex: 0,
2141
2217
  onKeyDown: (e) => {
2142
- (e.key === "Enter" || e.key === " ") && (e.preventDefault(), Jt(!1));
2218
+ (e.key === "Enter" || e.key === " ") && (e.preventDefault(), tn(!1));
2143
2219
  },
2144
2220
  className: "fixed inset-0 z-10",
2145
- onClick: () => Jt(!1)
2146
- }), /* @__PURE__ */ S("div", {
2221
+ onClick: () => tn(!1)
2222
+ }), /* @__PURE__ */ x("div", {
2147
2223
  className: "absolute left-0 top-6 z-20 w-72 bg-bg-elevated border border-border-default rounded-lg shadow-xl p-3 text-xs text-text-secondary space-y-1.5",
2148
2224
  children: [
2149
- /* @__PURE__ */ x("p", {
2225
+ /* @__PURE__ */ b("p", {
2150
2226
  className: "font-semibold text-text-primary",
2151
2227
  children: "What is AI Context?"
2152
2228
  }),
2153
- /* @__PURE__ */ x("p", { children: "A short description (Markdown supported) that AI tools running on this agent will read to understand the environment — e.g. what the machine is for, what services it runs, or any constraints to follow." }),
2154
- /* @__PURE__ */ x("p", {
2229
+ /* @__PURE__ */ b("p", { children: "A short description (Markdown supported) that AI tools running on this agent will read to understand the environment — e.g. what the machine is for, what services it runs, or any constraints to follow." }),
2230
+ /* @__PURE__ */ b("p", {
2155
2231
  className: "text-text-muted",
2156
2232
  children: "Example: \"Production billing server. Do not modify files outside /src. Node 20, Docker installed.\""
2157
2233
  })
2158
2234
  ]
2159
2235
  })] })]
2160
2236
  })]
2161
- }), /* @__PURE__ */ x("textarea", {
2237
+ }), /* @__PURE__ */ b("textarea", {
2162
2238
  id: "agentdetailspage-58",
2163
2239
  "aria-label": "e.g. This agent runs on the billing server. Node 20, Docker installed. Do not modify files outside /src.",
2164
- ref: an,
2165
- defaultValue: R.aiContext ?? "",
2240
+ ref: pn,
2241
+ defaultValue: F.aiContext ?? "",
2166
2242
  rows: 4,
2167
2243
  placeholder: "e.g. This agent runs on the billing server. Node 20, Docker installed. Do not modify files outside /src.",
2168
2244
  className: "w-full px-3 py-2 bg-bg-sunken border border-border-default rounded-md text-text-primary text-sm"
2169
2245
  })] }),
2170
- /* @__PURE__ */ S("div", { children: [/* @__PURE__ */ x("label", {
2246
+ /* @__PURE__ */ x("div", { children: [/* @__PURE__ */ b("label", {
2171
2247
  className: "block text-sm font-medium text-text-primary mb-1",
2172
- children: w("agentDetails.metadataLabel", "Metadata (JSON)")
2173
- }), /* @__PURE__ */ x("textarea", {
2248
+ children: C("agentDetails.metadataLabel", "Metadata (JSON)")
2249
+ }), /* @__PURE__ */ b("textarea", {
2174
2250
  "aria-label": "control",
2175
- ref: on,
2176
- defaultValue: R.metadata ? JSON.stringify(R.metadata, null, 2) : "{}",
2251
+ ref: mn,
2252
+ defaultValue: F.metadata ? JSON.stringify(F.metadata, null, 2) : "{}",
2177
2253
  rows: 4,
2178
2254
  className: "w-full px-3 py-2 bg-bg-sunken border border-border-default rounded-md text-text-primary font-mono text-sm"
2179
2255
  })] })
2180
2256
  ]
2181
2257
  })]
2182
2258
  }),
2183
- /* @__PURE__ */ S("div", {
2259
+ /* @__PURE__ */ x("div", {
2184
2260
  className: "px-6 py-4 border-t border-border-default flex-shrink-0 flex flex-wrap justify-end gap-3",
2185
- children: [/* @__PURE__ */ x("button", {
2261
+ children: [/* @__PURE__ */ b("button", {
2186
2262
  type: "button",
2187
- onClick: () => Ht(!1),
2188
- disabled: Wt,
2263
+ onClick: () => Yt(!1),
2264
+ disabled: Zt,
2189
2265
  className: "px-4 py-2 text-text-primary hover:bg-bg-sunken rounded-md transition-colors disabled:opacity-50",
2190
- children: w("common.cancel", "Cancel")
2191
- }), /* @__PURE__ */ x("button", {
2266
+ children: C("common.cancel", "Cancel")
2267
+ }), /* @__PURE__ */ b("button", {
2192
2268
  type: "button",
2193
- onClick: vr,
2194
- disabled: Wt,
2269
+ onClick: Nr,
2270
+ disabled: Zt,
2195
2271
  className: "px-4 py-2 bg-action-primary-bg text-action-primary-text rounded-md hover:bg-action-primary-bg-hover transition-colors disabled:opacity-50",
2196
- children: Wt ? w("agentDetails.saving", "Saving...") : w("agentDetails.saveConfiguration", "Save Configuration")
2272
+ children: Zt ? C("agentDetails.saving", "Saving...") : C("agentDetails.saveConfiguration", "Save Configuration")
2197
2273
  })]
2198
2274
  })
2199
2275
  ]
2200
2276
  })
2201
2277
  }),
2202
- j && /* @__PURE__ */ x("div", {
2278
+ k && /* @__PURE__ */ b("div", {
2203
2279
  className: "fixed inset-0 bg-bg-overlay flex items-center justify-center z-[100] p-4",
2204
2280
  onClick: () => {
2205
- P || M(!1);
2281
+ M || A(!1);
2206
2282
  },
2207
- children: /* @__PURE__ */ S("div", {
2283
+ children: /* @__PURE__ */ x("div", {
2208
2284
  className: "bg-bg-surface rounded-lg p-6 w-full max-w-lg",
2209
2285
  "data-testid": "create-session-modal",
2210
2286
  role: "dialog",
@@ -2212,112 +2288,142 @@ function Ot() {
2212
2288
  "aria-labelledby": "create-session-title",
2213
2289
  onClick: (e) => e.stopPropagation(),
2214
2290
  children: [
2215
- /* @__PURE__ */ S("h2", {
2291
+ /* @__PURE__ */ x("h2", {
2216
2292
  id: "create-session-title",
2217
2293
  className: "text-lg font-semibold text-text-primary mb-4",
2218
2294
  children: [
2219
- w("agentDetails.newSessionFor", "New Session for"),
2295
+ C("agentDetails.newSessionFor", "New Session for"),
2220
2296
  " ",
2221
- R.name
2297
+ F.name
2222
2298
  ]
2223
2299
  }),
2224
- _n && /* @__PURE__ */ x("div", {
2300
+ Tn && /* @__PURE__ */ b("div", {
2225
2301
  className: "mb-4 p-3 bg-status-error-bg text-status-error-text rounded-md text-sm",
2226
- children: _n
2302
+ children: Tn
2227
2303
  }),
2228
- /* @__PURE__ */ S("div", {
2304
+ /* @__PURE__ */ x("div", {
2229
2305
  className: "space-y-4",
2230
2306
  children: [
2231
- /* @__PURE__ */ S("div", { children: [/* @__PURE__ */ x("label", {
2307
+ /* @__PURE__ */ x("div", { children: [/* @__PURE__ */ b("label", {
2232
2308
  className: "block text-sm font-medium text-text-primary mb-1",
2233
- children: w("vibeDetails.sessionName", "Session Name")
2234
- }), /* @__PURE__ */ x("input", {
2309
+ children: C("vibeDetails.sessionName", "Session Name")
2310
+ }), /* @__PURE__ */ b("input", {
2235
2311
  "data-testid": "session-name-input",
2236
- ref: F,
2312
+ ref: N,
2237
2313
  type: "text",
2238
- placeholder: w("vibeDetails.sessionNamePlaceholder", "dev-terminal"),
2314
+ placeholder: C("vibeDetails.sessionNamePlaceholder", "dev-terminal"),
2239
2315
  className: "w-full px-3 py-2 bg-bg-sunken border border-border-default rounded-md text-text-primary placeholder:text-text-placeholder"
2240
2316
  })] }),
2241
- /* @__PURE__ */ S("div", { children: [/* @__PURE__ */ x("label", {
2317
+ /* @__PURE__ */ x("div", { children: [/* @__PURE__ */ b("label", {
2242
2318
  className: "block text-sm font-medium text-text-primary mb-1",
2243
- children: w("sessions.filterType", "Type")
2244
- }), /* @__PURE__ */ S("select", {
2245
- ref: yn,
2319
+ children: C("sessions.filterType", "Type")
2320
+ }), /* @__PURE__ */ x("select", {
2321
+ ref: Dn,
2246
2322
  className: "w-full px-3 py-2 bg-bg-sunken border border-border-default rounded-md text-text-primary",
2247
2323
  children: [
2248
- /* @__PURE__ */ x("option", {
2324
+ /* @__PURE__ */ b("option", {
2249
2325
  value: "TERMINAL",
2250
- children: w("sessions.typeTerminal", "Terminal")
2326
+ children: C("sessions.typeTerminal", "Terminal")
2251
2327
  }),
2252
- /* @__PURE__ */ x("option", {
2328
+ /* @__PURE__ */ b("option", {
2253
2329
  value: "TMUX",
2254
- children: w("sessions.typeTmux", "TMUX")
2330
+ children: C("sessions.typeTmux", "TMUX")
2255
2331
  }),
2256
- /* @__PURE__ */ x("option", {
2332
+ /* @__PURE__ */ b("option", {
2257
2333
  value: "SSH",
2258
- children: w("sessions.typeSsh", "SSH")
2334
+ children: C("sessions.typeSsh", "SSH")
2259
2335
  }),
2260
- /* @__PURE__ */ x("option", {
2336
+ /* @__PURE__ */ b("option", {
2261
2337
  value: "SCRIPT",
2262
- children: w("sessions.typeScript", "Script")
2338
+ children: C("sessions.typeScript", "Script")
2263
2339
  }),
2264
- /* @__PURE__ */ x("option", {
2340
+ /* @__PURE__ */ b("option", {
2265
2341
  value: "CUSTOM",
2266
- children: w("sessions.typeCustom", "Custom")
2342
+ children: C("sessions.typeCustom", "Custom")
2267
2343
  })
2268
2344
  ]
2269
2345
  })] }),
2270
- /* @__PURE__ */ S("div", { children: [/* @__PURE__ */ x("label", {
2346
+ /* @__PURE__ */ x("div", { children: [/* @__PURE__ */ b("label", {
2271
2347
  className: "block text-sm font-medium text-text-primary mb-1",
2272
- children: w("sessions.command", "Command")
2273
- }), /* @__PURE__ */ x("input", {
2274
- ref: I,
2348
+ children: C("sessions.command", "Command")
2349
+ }), /* @__PURE__ */ b("input", {
2350
+ ref: On,
2275
2351
  type: "text",
2276
- placeholder: w("vibeDetails.sessionCommandPlaceholder", "bash"),
2352
+ placeholder: C("vibeDetails.sessionCommandPlaceholder", "bash"),
2277
2353
  className: "w-full px-3 py-2 bg-bg-sunken border border-border-default rounded-md text-text-primary placeholder:text-text-placeholder"
2278
2354
  })] }),
2279
- /* @__PURE__ */ S("div", { children: [/* @__PURE__ */ x("label", {
2355
+ /* @__PURE__ */ x("div", { children: [/* @__PURE__ */ b("label", {
2280
2356
  className: "block text-sm font-medium text-text-primary mb-1",
2281
- children: w("vibeDetails.workingDirectory", "Working Directory")
2282
- }), /* @__PURE__ */ x("input", {
2283
- ref: bn,
2357
+ children: C("vibeDetails.workingDirectory", "Working Directory")
2358
+ }), /* @__PURE__ */ b("input", {
2359
+ ref: kn,
2284
2360
  type: "text",
2285
2361
  placeholder: "/home/user",
2286
2362
  className: "w-full px-3 py-2 bg-bg-sunken border border-border-default rounded-md text-text-primary placeholder:text-text-placeholder"
2287
2363
  })] })
2288
2364
  ]
2289
2365
  }),
2290
- /* @__PURE__ */ S("div", {
2366
+ /* @__PURE__ */ x("div", {
2291
2367
  className: "flex flex-col sm:flex-row justify-end gap-3 mt-6",
2292
- children: [/* @__PURE__ */ x("button", {
2293
- onClick: () => M(!1),
2294
- disabled: P,
2368
+ children: [/* @__PURE__ */ b("button", {
2369
+ onClick: () => A(!1),
2370
+ disabled: M,
2295
2371
  className: "px-4 py-2 text-text-primary hover:bg-bg-sunken rounded-md transition-colors disabled:opacity-50",
2296
- children: w("common.cancel", "Cancel")
2297
- }), /* @__PURE__ */ x("button", {
2372
+ children: C("common.cancel", "Cancel")
2373
+ }), /* @__PURE__ */ b("button", {
2298
2374
  "data-testid": "create-session-submit",
2299
- onClick: wr,
2300
- disabled: P,
2375
+ onClick: Br,
2376
+ disabled: M,
2301
2377
  className: "px-4 py-2 bg-action-primary-bg text-action-primary-text rounded-md hover:bg-action-primary-bg-hover transition-colors disabled:opacity-50",
2302
- children: P ? w("sessions.creating", "Creating...") : w("sessions.createSession", "Create Session")
2378
+ children: M ? C("sessions.creating", "Creating...") : C("sessions.createSession", "Create Session")
2303
2379
  })]
2304
2380
  })
2305
2381
  ]
2306
2382
  })
2307
2383
  }),
2308
- /* @__PURE__ */ x(se, {
2309
- isOpen: Wn,
2310
- onClose: () => Gn(!1),
2384
+ /* @__PURE__ */ b(ce, {
2385
+ isOpen: nr,
2386
+ onClose: () => rr(!1),
2311
2387
  onConfirm: () => {
2312
- Gn(!1), C("/billing/plans");
2388
+ rr(!1), S("/billing/plans");
2389
+ },
2390
+ title: le(ir).title,
2391
+ message: le(ir).message
2392
+ }),
2393
+ /* @__PURE__ */ b(se, {
2394
+ isOpen: Xn,
2395
+ onClose: () => {
2396
+ er || Zn(!1);
2313
2397
  },
2314
- title: ce(Kn).title,
2315
- message: ce(Kn).message
2398
+ onConfirm: Lr,
2399
+ title: C("agentDetails.removeAgentTitle", "Remove agent"),
2400
+ message: C("agentDetails.removeAgentMessage", "Remove “{{name}}” from this workspace.", { name: F.name }),
2401
+ confirmLabel: C("sessions.remove", "Remove"),
2402
+ variant: "danger",
2403
+ isLoading: er,
2404
+ children: /* @__PURE__ */ x("label", {
2405
+ className: "flex items-start gap-3 p-3 rounded-md bg-bg-sunken border border-border-default cursor-pointer",
2406
+ children: [/* @__PURE__ */ b(Ot, {
2407
+ checked: Qn,
2408
+ disabled: er,
2409
+ onCheckedChange: (e) => $n(e === !0),
2410
+ className: "mt-0.5"
2411
+ }), /* @__PURE__ */ x("span", {
2412
+ className: "min-w-0",
2413
+ children: [/* @__PURE__ */ b("span", {
2414
+ className: "block text-sm font-medium text-text-primary",
2415
+ children: C("agentDetails.uninstallFromTarget", "Uninstall agent from the target")
2416
+ }), /* @__PURE__ */ b("span", {
2417
+ className: "block text-xs text-text-secondary mt-0.5",
2418
+ children: C("agentDetails.uninstallFromTargetDesc", "Also wipe all agent state + VibeControls plugins and uninstall the agent from the host machine. This cannot be undone.")
2419
+ })]
2420
+ })]
2421
+ })
2316
2422
  })
2317
2423
  ]
2318
2424
  });
2319
2425
  }
2320
2426
  //#endregion
2321
- export { Ot as AgentDetailsPage };
2427
+ export { Ft as AgentDetailsPage };
2322
2428
 
2323
2429
  //# sourceMappingURL=AgentDetailsPage.js.map