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