@burdenoff/microfe-vibecontrols 2026.601.19 → 2026.601.20
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
|
@@ -1,56 +1,56 @@
|
|
|
1
|
-
import { useAgentPluginsLazyQuery as e, useAgentSecretRevealLazyQuery as t, useCheckSessionHealthMutation as n, useCreateSessionMutation as r, useDeleteAgentMutation as i, useGetAgentQuery as a, useInstallAgentPluginMutation as ee,
|
|
2
|
-
import { ConfirmDialog as
|
|
3
|
-
import { QuotaExhaustedDialog as
|
|
4
|
-
import { getQuotaDialogContent as
|
|
5
|
-
import { useVibeControls as
|
|
6
|
-
import { useVibeControlsStore as
|
|
7
|
-
import { PageHeader as
|
|
8
|
-
import { ErrorState as
|
|
9
|
-
import { EntityTagPicker as
|
|
10
|
-
import { EmptyState as
|
|
11
|
-
import { StatusBadge as
|
|
1
|
+
import { useAgentPluginsLazyQuery as e, useAgentSecretRevealLazyQuery as t, useCheckSessionHealthMutation as n, useCreateSessionMutation as r, useDeleteAgentMutation as i, useGetAgentQuery as a, useInstallAgentPluginMutation as ee, useRemoveAgentPluginMutation as te, useSetupAgentGatewayAuthMutation as ne, useStartVibecontrolsAgentMutation as o, useStopVibecontrolsAgentMutation as re, useUpdateAgentMutation as ie, useUpdateAgentPluginMutation as ae, useVibecontrolsAgentHealthProbeStreamSubscription as s, useVibecontrolsAgentHealthProbesQuery as oe } from "../generated/wspace-operations.js";
|
|
2
|
+
import { ConfirmDialog as se } from "../components/shared/ConfirmDialog.js";
|
|
3
|
+
import { QuotaExhaustedDialog as ce } from "../components/shared/QuotaExhaustedDialog.js";
|
|
4
|
+
import { getQuotaDialogContent as le, isQuotaExhaustedError as ue, markQuotaHandledLocally as de } from "../utils/quotaUtils.js";
|
|
5
|
+
import { useVibeControls as fe, useVibeNavigate as pe } from "../providers/VibeControlsProvider.js";
|
|
6
|
+
import { useVibeControlsStore as c } from "../store/vibeControlsStore.js";
|
|
7
|
+
import { PageHeader as me } from "../components/shared/PageHeader.js";
|
|
8
|
+
import { ErrorState as he } from "../components/shared/ErrorState.js";
|
|
9
|
+
import { EntityTagPicker as ge } from "../components/shared/EntityTagPicker.js";
|
|
10
|
+
import { EmptyState as _e } from "../components/shared/EmptyState.js";
|
|
11
|
+
import { StatusBadge as ve } from "../components/shared/StatusBadge.js";
|
|
12
12
|
import { Card as l } from "../components/shared/Card.js";
|
|
13
|
-
import { useActiveAgentProfile as
|
|
13
|
+
import { useActiveAgentProfile as ye } from "../hooks/useActiveAgentProfile.js";
|
|
14
14
|
import "../components/shared/index.js";
|
|
15
|
-
import { isNative as
|
|
16
|
-
import { VIBE_PERMISSIONS as
|
|
17
|
-
import { PageSkeleton as
|
|
18
|
-
import { AgentBackupTab as
|
|
19
|
-
import { ConnectionLogPanel as
|
|
20
|
-
import { AgentMaintenanceTab as
|
|
21
|
-
import { AgentConnectionRecovery as
|
|
22
|
-
import { AgentStorageConfig as
|
|
23
|
-
import { AliasManager as
|
|
24
|
-
import { AgentStatusBadge as
|
|
25
|
-
import { RemoteTaskPermissionsCard as
|
|
26
|
-
import { PluginUIPanel as
|
|
27
|
-
import { OpenInBrowserEditorButton as
|
|
15
|
+
import { isNative as be, nativeCopyText as xe, nativeToast as Se } from "../utils/nativeBridge.js";
|
|
16
|
+
import { VIBE_PERMISSIONS as Ce } from "../constants/permissions.js";
|
|
17
|
+
import { PageSkeleton as we } from "../components/shared/PageSkeleton.js";
|
|
18
|
+
import { AgentBackupTab as Te } from "../components/agents/backup/AgentBackupTab.js";
|
|
19
|
+
import { ConnectionLogPanel as Ee } from "../components/agents/ConnectionLogPanel.js";
|
|
20
|
+
import { AgentMaintenanceTab as De } from "../components/agents/AgentMaintenanceTab.js";
|
|
21
|
+
import { AgentConnectionRecovery as Oe } from "../components/agents/AgentConnectionRecovery.js";
|
|
22
|
+
import { AgentStorageConfig as ke } from "../components/agents/AgentStorageConfig.js";
|
|
23
|
+
import { AliasManager as Ae } from "../components/aliases/AliasManager.js";
|
|
24
|
+
import { AgentStatusBadge as je } from "../components/agents/AgentStatusBadge.js";
|
|
25
|
+
import { RemoteTaskPermissionsCard as Me } from "../components/agents/RemoteTaskPermissionsCard.js";
|
|
26
|
+
import { PluginUIPanel as Ne } from "../components/agents/PluginUIPanel.js";
|
|
27
|
+
import { OpenInBrowserEditorButton as Pe } from "../components/agents/OpenInBrowserEditorButton.js";
|
|
28
28
|
import "../components/agents/index.js";
|
|
29
|
-
import { deriveAgentStatus as
|
|
30
|
-
import { LogViewer as
|
|
31
|
-
import { ProfilesPanel as
|
|
29
|
+
import { deriveAgentStatus as Fe } from "../utils/agentStatus.js";
|
|
30
|
+
import { LogViewer as Ie } from "../components/logs/LogViewer.js";
|
|
31
|
+
import { ProfilesPanel as Le } from "../components/agent-manager/ProfilesPanel.js";
|
|
32
32
|
import "../components/agent-manager/index.js";
|
|
33
|
-
import { NotesTabPanel as
|
|
33
|
+
import { NotesTabPanel as Re } from "../components/notes/NotesTabPanel.js";
|
|
34
34
|
import "../components/notes/index.js";
|
|
35
|
-
import { useQueryBackedTab as
|
|
36
|
-
import { mintScopedIframeToken as
|
|
37
|
-
import { AddTabDialog as
|
|
38
|
-
import { PluginIframeMount as
|
|
39
|
-
import { useCallback as u, useEffect as d, useMemo as
|
|
40
|
-
import { useI18n as
|
|
41
|
-
import { ArrowLeft as
|
|
42
|
-
import { useParams as
|
|
43
|
-
import { usePermissions as
|
|
44
|
-
import { AnimatePresence as
|
|
35
|
+
import { useQueryBackedTab as ze } from "../hooks/useQueryBackedTab.js";
|
|
36
|
+
import { mintScopedIframeToken as Be } from "../services/iframeToken.js";
|
|
37
|
+
import { AddTabDialog as Ve } from "../components/plugins/AddTabDialog.js";
|
|
38
|
+
import { PluginIframeMount as He } from "../components/plugins/PluginIframeMount.js";
|
|
39
|
+
import { useCallback as u, useEffect as d, useMemo as Ue, useRef as f, useState as p } from "react";
|
|
40
|
+
import { useI18n as We } from "@burdenoff/fe-libs/shared/providers/shell/I18nProvider";
|
|
41
|
+
import { ArrowLeft as Ge, ArrowUpCircle as Ke, Bot as qe, Check as Je, CheckCircle2 as Ye, Clock as Xe, Command as Ze, Copy as Qe, Cpu as $e, Database as et, Download as tt, Edit3 as nt, Eye as rt, EyeOff as it, FileText as at, HardDrive as ot, Info as st, Key as ct, Link2 as lt, Loader2 as m, Monitor as ut, Play as dt, Plus as ft, Puzzle as pt, RefreshCw as mt, ScrollText as ht, Search as gt, Server as _t, Settings as vt, Shield as yt, Square as bt, Tag as xt, Terminal as St, Trash2 as Ct, Unlink as h, Users as wt, Wrench as Tt, X as g, Zap as Et } from "lucide-react";
|
|
42
|
+
import { useParams as Dt } from "react-router-dom";
|
|
43
|
+
import { usePermissions as Ot } from "@burdenoff/fe-libs/shared/providers/shell";
|
|
44
|
+
import { AnimatePresence as kt, motion as _ } from "framer-motion";
|
|
45
45
|
import { Fragment as v, jsx as y, jsxs as b } from "react/jsx-runtime";
|
|
46
|
-
import { Checkbox as
|
|
47
|
-
import { useFeatureFlagDetails as
|
|
48
|
-
import { PermissionButton as
|
|
49
|
-
import { MotionPage as
|
|
50
|
-
import { usePluginContributions as
|
|
46
|
+
import { Checkbox as At } from "@burdenoff/fe-libs/ui";
|
|
47
|
+
import { useFeatureFlagDetails as jt } from "@burdenoff/fe-libs/shared/feature-flags";
|
|
48
|
+
import { PermissionButton as Mt } from "@burdenoff/fe-libs/shared/components";
|
|
49
|
+
import { MotionPage as Nt } from "@burdenoff/fe-libs/shared/motion";
|
|
50
|
+
import { usePluginContributions as Pt } from "@burdenoff/fe-libs/shared/plugins";
|
|
51
51
|
//#region src/pages/AgentDetailsPage.tsx
|
|
52
|
-
function
|
|
53
|
-
let { t: n } =
|
|
52
|
+
function Ft({ agent: e, onUpdate: t }) {
|
|
53
|
+
let { t: n } = We(), [r] = ie(), [i] = ne(), [a, ee] = p(!1), [te, o] = p(null), [re, ae] = p(!1), [s, oe] = p(null), [se, ce] = p(!1), [le, ue] = p(!1), [de, fe] = p(!1), pe = !!(e.appId && e.appClientId), c = (e, t, r) => {
|
|
54
54
|
let i = n(e, r), a = i === e ? t : i;
|
|
55
55
|
return r ? Object.entries(r).reduce((e, [t, n]) => e.replace(`{{${t}}}`, String(n)), a) : a;
|
|
56
56
|
}, me = e.metadata?.devportalApplicationId, he = async () => {
|
|
@@ -93,7 +93,7 @@ function It({ agent: e, onUpdate: t }) {
|
|
|
93
93
|
className: "flex items-start gap-3",
|
|
94
94
|
children: [/* @__PURE__ */ y("div", {
|
|
95
95
|
className: "size-8 rounded-lg bg-status-success-bg flex items-center justify-center flex-shrink-0 mt-0.5",
|
|
96
|
-
children: /* @__PURE__ */ y(
|
|
96
|
+
children: /* @__PURE__ */ y(lt, { className: "size-4 text-status-success-text" })
|
|
97
97
|
}), /* @__PURE__ */ b("div", {
|
|
98
98
|
className: "flex-1 min-w-0 space-y-2",
|
|
99
99
|
children: [/* @__PURE__ */ b("div", { children: [/* @__PURE__ */ y("p", {
|
|
@@ -116,12 +116,12 @@ function It({ agent: e, onUpdate: t }) {
|
|
|
116
116
|
type: "button",
|
|
117
117
|
onClick: async () => {
|
|
118
118
|
if (e.appClientId) try {
|
|
119
|
-
await
|
|
119
|
+
await xe(e.appClientId), be() && Se("Copied"), ue(!0), setTimeout(() => ue(!1), 2e3);
|
|
120
120
|
} catch {}
|
|
121
121
|
},
|
|
122
122
|
className: "p-1 rounded hover:bg-bg-sunken transition-colors flex-shrink-0",
|
|
123
123
|
title: c("agentDetails.copyClientId", "Copy Client ID"),
|
|
124
|
-
children: le ? /* @__PURE__ */ y(
|
|
124
|
+
children: le ? /* @__PURE__ */ y(Je, { className: "size-3.5 text-status-success-text" }) : /* @__PURE__ */ y(Qe, { className: "size-3.5 text-text-secondary" })
|
|
125
125
|
})]
|
|
126
126
|
})] }), /* @__PURE__ */ b("div", { children: [/* @__PURE__ */ y("p", {
|
|
127
127
|
className: "text-xs text-text-secondary mb-1",
|
|
@@ -153,19 +153,19 @@ function It({ agent: e, onUpdate: t }) {
|
|
|
153
153
|
}),
|
|
154
154
|
/* @__PURE__ */ y("button", {
|
|
155
155
|
type: "button",
|
|
156
|
-
onClick: () =>
|
|
156
|
+
onClick: () => ae(!re),
|
|
157
157
|
className: "p-1 rounded hover:bg-bg-sunken transition-colors flex-shrink-0",
|
|
158
|
-
children: y(re ?
|
|
158
|
+
children: y(re ? it : rt, { className: "size-3.5 text-text-secondary" })
|
|
159
159
|
}),
|
|
160
160
|
/* @__PURE__ */ y("button", {
|
|
161
161
|
type: "button",
|
|
162
162
|
onClick: async () => {
|
|
163
163
|
if (s) try {
|
|
164
|
-
await
|
|
164
|
+
await xe(s), be() && Se("Secret copied"), ce(!0), setTimeout(() => ce(!1), 2e3);
|
|
165
165
|
} catch {}
|
|
166
166
|
},
|
|
167
167
|
className: "p-1 rounded hover:bg-bg-sunken transition-colors flex-shrink-0",
|
|
168
|
-
children: se ? /* @__PURE__ */ y(
|
|
168
|
+
children: se ? /* @__PURE__ */ y(Je, { className: "size-3.5 text-status-success-text" }) : /* @__PURE__ */ y(Qe, { className: "size-3.5 text-text-secondary" })
|
|
169
169
|
})
|
|
170
170
|
]
|
|
171
171
|
})
|
|
@@ -185,7 +185,7 @@ function It({ agent: e, onUpdate: t }) {
|
|
|
185
185
|
disabled: a,
|
|
186
186
|
className: "flex items-center gap-2 px-3 py-1.5 text-xs text-action-primary-bg bg-action-primary-bg/10 hover:bg-action-primary-bg/20 rounded-md transition-colors disabled:opacity-50",
|
|
187
187
|
title: c("agentDetails.repushCredentialsTitle", "Rotate the OAuth secret and push it to the agent. Use this if the agent shows degraded with \"boot state awaiting-config\"."),
|
|
188
|
-
children: [a ? /* @__PURE__ */ y(
|
|
188
|
+
children: [a ? /* @__PURE__ */ y(m, { className: "size-3 animate-spin" }) : /* @__PURE__ */ y(mt, { className: "size-3" }), c("agentDetails.repushCredentials", "Re-push credentials")]
|
|
189
189
|
}),
|
|
190
190
|
/* @__PURE__ */ b("button", {
|
|
191
191
|
type: "button",
|
|
@@ -209,7 +209,7 @@ function It({ agent: e, onUpdate: t }) {
|
|
|
209
209
|
},
|
|
210
210
|
disabled: de,
|
|
211
211
|
className: "flex items-center gap-2 px-3 py-1.5 text-xs text-status-error-text hover:bg-status-error-bg rounded-md transition-colors disabled:opacity-50",
|
|
212
|
-
children: [de ? /* @__PURE__ */ y(
|
|
212
|
+
children: [de ? /* @__PURE__ */ y(m, { className: "size-3 animate-spin" }) : /* @__PURE__ */ y(h, { className: "size-3" }), c("agentDetails.unlinkApp", "Unlink App")]
|
|
213
213
|
})
|
|
214
214
|
]
|
|
215
215
|
})
|
|
@@ -233,11 +233,11 @@ function It({ agent: e, onUpdate: t }) {
|
|
|
233
233
|
onClick: he,
|
|
234
234
|
disabled: a,
|
|
235
235
|
className: "flex items-center gap-2 px-4 py-2 text-sm font-medium text-action-primary-text bg-action-primary-bg rounded-md hover:bg-action-primary-bg-hover transition-colors disabled:opacity-50",
|
|
236
|
-
children: a ? /* @__PURE__ */ b(v, { children: [/* @__PURE__ */ y(
|
|
236
|
+
children: a ? /* @__PURE__ */ b(v, { children: [/* @__PURE__ */ y(m, { className: "size-4 animate-spin" }), c("agentDetails.settingUp", "Setting up...")] }) : /* @__PURE__ */ b(v, { children: [/* @__PURE__ */ y(lt, { className: "size-4" }), c("agentDetails.setupGatewayAuth", "Setup Gateway Auth")] })
|
|
237
237
|
})] })]
|
|
238
238
|
})] });
|
|
239
239
|
}
|
|
240
|
-
var
|
|
240
|
+
var It = [
|
|
241
241
|
"overview",
|
|
242
242
|
"profiles",
|
|
243
243
|
"security",
|
|
@@ -251,11 +251,11 @@ var Lt = [
|
|
|
251
251
|
"backup",
|
|
252
252
|
"maintenance"
|
|
253
253
|
];
|
|
254
|
-
function
|
|
255
|
-
let { t:
|
|
256
|
-
let r =
|
|
254
|
+
function Lt() {
|
|
255
|
+
let { t: lt } = We(), { id: h } = Dt(), { basePath: Lt } = fe(), Rt = Lt || "", x = pe(), { hasPermission: zt, isLoading: Bt, permissions: Vt } = Ot(), S = u((e, t, n) => {
|
|
256
|
+
let r = lt(e, n), i = r === e ? t : r;
|
|
257
257
|
return n ? Object.entries(n).reduce((e, [t, n]) => e.replace(`{{${t}}}`, String(n)), i) : i;
|
|
258
|
-
}, [
|
|
258
|
+
}, [lt]), [Ht] = ie({ refetchQueries: ["GetAgent"] }), [Ut] = i({
|
|
259
259
|
refetchQueries: ["ListAgents", "VibeControlsInitialData"],
|
|
260
260
|
awaitRefetchQueries: !0,
|
|
261
261
|
update(e, t, { variables: n }) {
|
|
@@ -265,10 +265,10 @@ function Rt() {
|
|
|
265
265
|
id: r
|
|
266
266
|
}) }), e.gc());
|
|
267
267
|
}
|
|
268
|
-
}), [Wt] = n({ refetchQueries: ["GetAgent"] }), [Gt] =
|
|
268
|
+
}), [Wt] = n({ refetchQueries: ["GetAgent"] }), [Gt] = o(), [Kt] = re(), [C, qt] = p(null), [Jt, Yt] = p(null), Xt = c((e) => e.setActiveAgentId);
|
|
269
269
|
d(() => {
|
|
270
|
-
|
|
271
|
-
}, [
|
|
270
|
+
h && Xt(h);
|
|
271
|
+
}, [h, Xt]);
|
|
272
272
|
let [Zt, Qt] = p(!1), [$t, w] = p(null), [en, tn] = p(!1), [nn, T] = p(null), [rn, an] = p(!1), [on, sn] = p(!1), [cn, ln] = p(""), [E, un] = p(!1), [dn, fn] = p(null), pn = f(null), mn = f(null), hn = f(null), gn = f(null), _n = f(null), [vn, yn] = p(!1), [bn, xn] = p(!1), [D, Sn] = p(null), [Cn, wn] = p(!1), [Tn, En] = p(null), [Dn] = t({ fetchPolicy: "network-only" }), [O, k] = p(!1), [On, A] = p(null), [j, kn] = p(!1), M = f(null), An = f(null), jn = f(null), Mn = f(null), [Nn] = r({ refetchQueries: ["GetAgent", "ListSessions"] });
|
|
273
273
|
d(() => {
|
|
274
274
|
if (!O) return;
|
|
@@ -282,16 +282,16 @@ function Rt() {
|
|
|
282
282
|
return () => cancelAnimationFrame(e);
|
|
283
283
|
}, [O]);
|
|
284
284
|
let { data: Pn, loading: Fn, error: In, refetch: N } = a({
|
|
285
|
-
variables: { id:
|
|
286
|
-
skip: !
|
|
285
|
+
variables: { id: h || "" },
|
|
286
|
+
skip: !h,
|
|
287
287
|
fetchPolicy: "cache-and-network"
|
|
288
|
-
}), P = Pn?.vibecontrolsAgent, F =
|
|
288
|
+
}), P = Pn?.vibecontrolsAgent, F = oe({
|
|
289
289
|
fetchPolicy: "cache-and-network",
|
|
290
290
|
nextFetchPolicy: "cache-first",
|
|
291
291
|
notifyOnNetworkStatusChange: !0,
|
|
292
|
-
skip: !
|
|
292
|
+
skip: !h,
|
|
293
293
|
pollInterval: 3e4
|
|
294
|
-
}), { data: Ln } =
|
|
294
|
+
}), { data: Ln } = s({ skip: !h }), Rn = F.data === void 0 && Ln === void 0, I = Ue(() => {
|
|
295
295
|
let e = /* @__PURE__ */ new Map(), t = Ln?.vibecontrolsAgentHealthProbeStream ?? F.data?.vibecontrolsAgentHealthProbes ?? [];
|
|
296
296
|
for (let n of t) e.set(n.agentId, {
|
|
297
297
|
agentId: n.agentId,
|
|
@@ -299,7 +299,7 @@ function Rt() {
|
|
|
299
299
|
errorMessage: n.errorMessage
|
|
300
300
|
});
|
|
301
301
|
return e;
|
|
302
|
-
}, [F.data, Ln]), L =
|
|
302
|
+
}, [F.data, Ln]), L = Ue(() => P ? Fe({
|
|
303
303
|
id: P.id,
|
|
304
304
|
isActive: P.isActive,
|
|
305
305
|
metadata: P.metadata
|
|
@@ -307,14 +307,14 @@ function Rt() {
|
|
|
307
307
|
P,
|
|
308
308
|
I,
|
|
309
309
|
Rn
|
|
310
|
-
]), zn = L === "STOPPED" || L === "OFFLINE", { active: R } =
|
|
310
|
+
]), zn = L === "STOPPED" || L === "OFFLINE", { active: R } = ye(P?.id ?? null), z = jt("vibes.tabs.iframe-host")?.value === !0, Bn = Ue(() => {
|
|
311
311
|
if (!z || !P?.tunnelUrl) return [];
|
|
312
312
|
let e = P.id, t = R ?? "default";
|
|
313
313
|
return [{
|
|
314
314
|
tunnelUrl: P.tunnelUrl,
|
|
315
315
|
profile: t,
|
|
316
316
|
label: P.name ?? P.id,
|
|
317
|
-
mintIframeToken: async ({ pathPrefixes: n }) =>
|
|
317
|
+
mintIframeToken: async ({ pathPrefixes: n }) => Be(e, t, n)
|
|
318
318
|
}];
|
|
319
319
|
}, [
|
|
320
320
|
z,
|
|
@@ -322,17 +322,17 @@ function Rt() {
|
|
|
322
322
|
P?.tunnelUrl,
|
|
323
323
|
P?.name,
|
|
324
324
|
R
|
|
325
|
-
]), B =
|
|
325
|
+
]), B = Pt(Bn, {
|
|
326
326
|
mountPoint: "agent.detailTab",
|
|
327
327
|
enabled: z && Bn.length > 0
|
|
328
|
-
}), [V, Vn] =
|
|
328
|
+
}), [V, Vn] = ze(Ue(() => {
|
|
329
329
|
let e = B.data.filter((e) => e.contribution.mountPoint === "agent.detailTab").map((e) => e.contribution.id);
|
|
330
|
-
return [...
|
|
330
|
+
return [...It, ...e];
|
|
331
331
|
}, [B.data]), "overview"), [Hn, Un] = p(!1), Wn = f(!1);
|
|
332
332
|
d(() => {
|
|
333
333
|
P && !Wn.current && (Wn.current = !0, Wt().catch(() => {}));
|
|
334
334
|
}, [P, Wt]);
|
|
335
|
-
let [Gn] =
|
|
335
|
+
let [Gn] = ne(), Kn = f(!1);
|
|
336
336
|
d(() => {
|
|
337
337
|
if (!P || Kn.current) return;
|
|
338
338
|
let e = !!(P.appId && P.appClientId), t = !!P.tunnelUrl;
|
|
@@ -344,7 +344,7 @@ function Rt() {
|
|
|
344
344
|
Gn,
|
|
345
345
|
N
|
|
346
346
|
]);
|
|
347
|
-
let [H, qn] = p([]), [Jn, Yn] = p([]), [Xn, Zn] = p(!0), [U, W] = p(null), [Qn, G] = p(null), [$n, er] = p(!1), [tr, nr] = p(!1), [rr, ir] = p(!1), [ar, or] = p(!1), [sr, cr] = p(!1), [lr, ur] = p("plugin"), dr = f(null), [K, fr] = p("installed"), [q, pr] = p(""), [J, mr] = p([]), [hr, gr] = p(!1), [_r, vr] = p(null), [Y, yr] = p(null), [br] = e(), [xr] = ee(), [Sr] =
|
|
347
|
+
let [H, qn] = p([]), [Jn, Yn] = p([]), [Xn, Zn] = p(!0), [U, W] = p(null), [Qn, G] = p(null), [$n, er] = p(!1), [tr, nr] = p(!1), [rr, ir] = p(!1), [ar, or] = p(!1), [sr, cr] = p(!1), [lr, ur] = p("plugin"), dr = f(null), [K, fr] = p("installed"), [q, pr] = p(""), [J, mr] = p([]), [hr, gr] = p(!1), [_r, vr] = p(null), [Y, yr] = p(null), [br] = e(), [xr] = ee(), [Sr] = te(), [Cr] = ae(), X = u(async () => {
|
|
348
348
|
if (P?.id) {
|
|
349
349
|
Zn(!0), G(null);
|
|
350
350
|
try {
|
|
@@ -411,8 +411,8 @@ function Rt() {
|
|
|
411
411
|
if (t?.installAgentPlugin?.success) await X();
|
|
412
412
|
else throw Error(t?.installAgentPlugin?.error || S("agentDetails.installFailed", "Install failed"));
|
|
413
413
|
} catch (e) {
|
|
414
|
-
if (
|
|
415
|
-
|
|
414
|
+
if (ue(e)) {
|
|
415
|
+
de(), ur("plugin"), cr(!0);
|
|
416
416
|
return;
|
|
417
417
|
}
|
|
418
418
|
G(e instanceof Error ? e.message : S("agentDetails.pluginInstallFailed", "Failed to install plugin")), setTimeout(() => G(null), 5e3);
|
|
@@ -565,7 +565,7 @@ function Rt() {
|
|
|
565
565
|
children: "Loading permissions…"
|
|
566
566
|
})
|
|
567
567
|
});
|
|
568
|
-
if (Vt && (Vt.permissionStrings?.length ?? 0) > 0 && !zt(
|
|
568
|
+
if (Vt && (Vt.permissionStrings?.length ?? 0) > 0 && !zt(Ce.AGENT_READ)) return /* @__PURE__ */ y("div", {
|
|
569
569
|
className: "flex items-center justify-center min-h-[400px]",
|
|
570
570
|
children: /* @__PURE__ */ b("div", {
|
|
571
571
|
className: "text-center space-y-2",
|
|
@@ -653,7 +653,7 @@ function Rt() {
|
|
|
653
653
|
}, Rr = async () => {
|
|
654
654
|
let e = await kr();
|
|
655
655
|
if (e) try {
|
|
656
|
-
await
|
|
656
|
+
await xe(e), be() && Se("API key copied"), xn(!0), setTimeout(() => xn(!1), 2e3);
|
|
657
657
|
} catch {
|
|
658
658
|
console.error("Failed to copy API key");
|
|
659
659
|
}
|
|
@@ -705,8 +705,8 @@ function Rt() {
|
|
|
705
705
|
workingDirectory: r
|
|
706
706
|
} } }), k(!1), M.current && (M.current.value = ""), An.current && (An.current.selectedIndex = 0), jn.current && (jn.current.value = ""), Mn.current && (Mn.current.value = ""), T(S("sessions.createdSuccess", "Session created successfully")), setTimeout(() => T(null), 3e3);
|
|
707
707
|
} catch (e) {
|
|
708
|
-
if (
|
|
709
|
-
k(!1),
|
|
708
|
+
if (ue(e)) {
|
|
709
|
+
k(!1), de(), ur("session"), cr(!0);
|
|
710
710
|
return;
|
|
711
711
|
}
|
|
712
712
|
A(e instanceof Error ? e.message : S("sessions.failedCreate", "Failed to create session"));
|
|
@@ -720,39 +720,39 @@ function Rt() {
|
|
|
720
720
|
let t = Date.now() - new Date(e).getTime();
|
|
721
721
|
return t < 6e4 ? S("health.justNow", "Just now") : t < 36e5 ? S("agentDetails.minutesAgo", "{{count}}m ago", { count: Math.floor(t / 6e4) }) : t < 864e5 ? S("agentDetails.hoursAgo", "{{count}}h ago", { count: Math.floor(t / 36e5) }) : new Date(e).toLocaleDateString();
|
|
722
722
|
};
|
|
723
|
-
if (Fn && !P) return /* @__PURE__ */ b(
|
|
723
|
+
if (Fn && !P) return /* @__PURE__ */ b(Nt, {
|
|
724
724
|
className: "space-y-6 p-4 sm:p-6 bg-bg-surface min-h-screen",
|
|
725
725
|
children: [/* @__PURE__ */ b("button", {
|
|
726
726
|
type: "button",
|
|
727
727
|
onClick: $,
|
|
728
728
|
className: "flex items-center gap-2 text-text-secondary hover:text-text-primary transition-colors",
|
|
729
|
-
children: [/* @__PURE__ */ y(
|
|
730
|
-
}), /* @__PURE__ */ y(
|
|
729
|
+
children: [/* @__PURE__ */ y(Ge, { className: "size-4" }), S("agentDetails.backToAgents", "Back to Agents")]
|
|
730
|
+
}), /* @__PURE__ */ y(we, { variant: "detail" })]
|
|
731
731
|
});
|
|
732
|
-
if (In && !P) return /* @__PURE__ */ b(
|
|
732
|
+
if (In && !P) return /* @__PURE__ */ b(Nt, {
|
|
733
733
|
className: "space-y-6 p-4 sm:p-6 bg-bg-surface min-h-screen",
|
|
734
734
|
children: [/* @__PURE__ */ b("button", {
|
|
735
735
|
type: "button",
|
|
736
736
|
onClick: $,
|
|
737
737
|
className: "flex items-center gap-2 text-text-secondary hover:text-text-primary transition-colors",
|
|
738
|
-
children: [/* @__PURE__ */ y(
|
|
739
|
-
}), /* @__PURE__ */ y(
|
|
738
|
+
children: [/* @__PURE__ */ y(Ge, { className: "size-4" }), S("agentDetails.backToAgents", "Back to Agents")]
|
|
739
|
+
}), /* @__PURE__ */ y(he, {
|
|
740
740
|
title: S("agentDetails.failedLoad", "Failed to load agent"),
|
|
741
741
|
message: In.message,
|
|
742
742
|
onRetry: () => N()
|
|
743
743
|
})]
|
|
744
744
|
});
|
|
745
|
-
if (!P) return /* @__PURE__ */ b(
|
|
745
|
+
if (!P) return /* @__PURE__ */ b(Nt, {
|
|
746
746
|
className: "space-y-6 p-4 sm:p-6 bg-bg-surface min-h-screen",
|
|
747
747
|
children: [/* @__PURE__ */ b("button", {
|
|
748
748
|
type: "button",
|
|
749
749
|
onClick: $,
|
|
750
750
|
className: "flex items-center gap-2 text-text-secondary hover:text-text-primary transition-colors",
|
|
751
|
-
children: [/* @__PURE__ */ y(
|
|
752
|
-
}), /* @__PURE__ */ y(
|
|
751
|
+
children: [/* @__PURE__ */ y(Ge, { className: "size-4" }), S("agentDetails.backToAgents", "Back to Agents")]
|
|
752
|
+
}), /* @__PURE__ */ y(_e, {
|
|
753
753
|
icon: /* @__PURE__ */ y(_t, { className: "size-8 text-text-secondary" }),
|
|
754
754
|
title: S("agentDetails.notFound", "Agent not found"),
|
|
755
|
-
description: `${S("agentDetails.notFoundDescriptionPrefix", "No agent with ID")} "${
|
|
755
|
+
description: `${S("agentDetails.notFoundDescriptionPrefix", "No agent with ID")} "${h}" ${S("agentDetails.notFoundDescriptionSuffix", "exists")}`,
|
|
756
756
|
action: /* @__PURE__ */ y("button", {
|
|
757
757
|
type: "button",
|
|
758
758
|
onClick: $,
|
|
@@ -770,7 +770,7 @@ function Rt() {
|
|
|
770
770
|
{
|
|
771
771
|
id: "profiles",
|
|
772
772
|
label: S("agentDetails.profiles", "Profiles"),
|
|
773
|
-
icon:
|
|
773
|
+
icon: wt
|
|
774
774
|
},
|
|
775
775
|
{
|
|
776
776
|
id: "security",
|
|
@@ -802,31 +802,31 @@ function Rt() {
|
|
|
802
802
|
{
|
|
803
803
|
id: "vibes",
|
|
804
804
|
label: S("nav.vibes", "Vibes"),
|
|
805
|
-
icon:
|
|
805
|
+
icon: Et,
|
|
806
806
|
badge: `${Q.length}`
|
|
807
807
|
},
|
|
808
808
|
{
|
|
809
809
|
id: "notes",
|
|
810
810
|
label: S("vibeDetails.notes", "Notes"),
|
|
811
|
-
icon:
|
|
811
|
+
icon: at
|
|
812
812
|
},
|
|
813
813
|
{
|
|
814
814
|
id: "aliases",
|
|
815
815
|
label: S("agentDetails.aliases", "Aliases"),
|
|
816
|
-
icon:
|
|
816
|
+
icon: Ze
|
|
817
817
|
},
|
|
818
818
|
{
|
|
819
819
|
id: "backup",
|
|
820
820
|
label: S("agentDetails.backup", "Backup"),
|
|
821
|
-
icon:
|
|
821
|
+
icon: et
|
|
822
822
|
},
|
|
823
823
|
{
|
|
824
824
|
id: "maintenance",
|
|
825
825
|
label: S("agentDetails.maintenance.tab", "Maintenance"),
|
|
826
|
-
icon:
|
|
826
|
+
icon: Tt
|
|
827
827
|
}
|
|
828
828
|
], Jr = Z.filter((e) => e.status === "RUNNING").length;
|
|
829
|
-
return P?.tunnelUrl, /* @__PURE__ */ b(
|
|
829
|
+
return P?.tunnelUrl, /* @__PURE__ */ b(Nt, {
|
|
830
830
|
className: "space-y-6 p-4 sm:p-6 bg-bg-surface min-h-screen",
|
|
831
831
|
children: [
|
|
832
832
|
nn && /* @__PURE__ */ y("div", {
|
|
@@ -841,9 +841,9 @@ function Rt() {
|
|
|
841
841
|
type: "button",
|
|
842
842
|
onClick: $,
|
|
843
843
|
className: "flex items-center gap-2 text-text-secondary hover:text-text-primary transition-colors",
|
|
844
|
-
children: [/* @__PURE__ */ y(
|
|
844
|
+
children: [/* @__PURE__ */ y(Ge, { className: "size-4" }), S("agentDetails.backToAgents", "Back to Agents")]
|
|
845
845
|
}),
|
|
846
|
-
/* @__PURE__ */ y(
|
|
846
|
+
/* @__PURE__ */ y(me, {
|
|
847
847
|
title: P.name,
|
|
848
848
|
description: P.hostname || S("agentDetails.noHostnameConfigured", "No hostname configured"),
|
|
849
849
|
breadcrumb: [{
|
|
@@ -859,7 +859,7 @@ function Rt() {
|
|
|
859
859
|
className: "flex items-center gap-2 px-3 py-2 bg-bg-sunken text-text-primary rounded-md hover:bg-bg-sunken/80 transition-colors",
|
|
860
860
|
title: S("agentDetails.openAiChat", "Open AI chat with this agent"),
|
|
861
861
|
"data-testid": "agent-open-ai-chat",
|
|
862
|
-
children: [/* @__PURE__ */ y(
|
|
862
|
+
children: [/* @__PURE__ */ y(qe, { className: "size-4" }), /* @__PURE__ */ y("span", {
|
|
863
863
|
className: "hidden sm:inline",
|
|
864
864
|
children: S("agentDetails.aiChat", "AI Chat")
|
|
865
865
|
})]
|
|
@@ -878,14 +878,14 @@ function Rt() {
|
|
|
878
878
|
disabled: C !== null,
|
|
879
879
|
"aria-busy": C === "start",
|
|
880
880
|
className: "flex items-center gap-2 px-3 py-2 bg-status-success-bg text-status-success-text rounded-md hover:opacity-80 transition-colors disabled:opacity-60 disabled:cursor-not-allowed",
|
|
881
|
-
children: [C === "start" ? /* @__PURE__ */ y(
|
|
881
|
+
children: [C === "start" ? /* @__PURE__ */ y(m, { className: "size-4 animate-spin" }) : /* @__PURE__ */ y(dt, { className: "size-4" }), C === "start" ? S("agentDetails.starting", "Starting…") : S("agentDetails.start", "Start")]
|
|
882
882
|
}) : /* @__PURE__ */ b("button", {
|
|
883
883
|
type: "button",
|
|
884
884
|
onClick: Mr,
|
|
885
885
|
disabled: C !== null,
|
|
886
886
|
"aria-busy": C === "stop",
|
|
887
887
|
className: "flex items-center gap-2 px-3 py-2 bg-bg-sunken text-text-primary rounded-md hover:bg-bg-sunken/80 transition-colors disabled:opacity-60 disabled:cursor-not-allowed",
|
|
888
|
-
children: [C === "stop" ? /* @__PURE__ */ y(
|
|
888
|
+
children: [C === "stop" ? /* @__PURE__ */ y(m, { className: "size-4 animate-spin" }) : /* @__PURE__ */ y(bt, { className: "size-4" }), C === "stop" ? S("agentDetails.stopping", "Stopping…") : S("sessions.stop", "Stop")]
|
|
889
889
|
}),
|
|
890
890
|
L === "DEGRADED" && /* @__PURE__ */ b("button", {
|
|
891
891
|
type: "button",
|
|
@@ -894,9 +894,9 @@ function Rt() {
|
|
|
894
894
|
"aria-busy": C === "start",
|
|
895
895
|
className: "flex items-center gap-2 px-3 py-2 bg-status-warning-bg text-status-warning-text rounded-md hover:opacity-80 transition-colors disabled:opacity-60 disabled:cursor-not-allowed",
|
|
896
896
|
title: I.get(P.id)?.errorMessage ? `Retry lifecycle/start — last error: ${I.get(P.id)?.errorMessage}` : "Retry lifecycle/start",
|
|
897
|
-
children: [C === "start" ? /* @__PURE__ */ y(
|
|
897
|
+
children: [C === "start" ? /* @__PURE__ */ y(m, { className: "size-4 animate-spin" }) : /* @__PURE__ */ y(mt, { className: "size-4" }), C === "start" ? S("agentDetails.reconnecting", "Reconnecting…") : S("agentDetails.reconnect", "Reconnect")]
|
|
898
898
|
}),
|
|
899
|
-
/* @__PURE__ */ y(
|
|
899
|
+
/* @__PURE__ */ y(Pe, {
|
|
900
900
|
agentId: P.id,
|
|
901
901
|
tunnelUrl: P.tunnelUrl || null,
|
|
902
902
|
profile: R
|
|
@@ -940,7 +940,7 @@ function Rt() {
|
|
|
940
940
|
disabled: !cn.trim() || cn.trim() === P.name || E,
|
|
941
941
|
className: "inline-flex items-center gap-1.5 px-3 py-1.5 text-xs font-medium bg-action-primary-bg text-action-primary-text rounded-md hover:bg-action-primary-bg-hover transition-colors disabled:opacity-60 disabled:cursor-not-allowed",
|
|
942
942
|
"data-testid": "agent-details-rename-save",
|
|
943
|
-
children: [E ? /* @__PURE__ */ y(
|
|
943
|
+
children: [E ? /* @__PURE__ */ y(m, { className: "size-3.5 animate-spin" }) : /* @__PURE__ */ y(Je, { className: "size-3.5" }), S("agentDetails.saveName", "Save")]
|
|
944
944
|
}),
|
|
945
945
|
/* @__PURE__ */ y("button", {
|
|
946
946
|
type: "button",
|
|
@@ -963,7 +963,7 @@ function Rt() {
|
|
|
963
963
|
className: "inline-flex items-center gap-1.5 text-xs text-text-secondary hover:text-text-primary transition-colors",
|
|
964
964
|
title: S("agentDetails.renameTooltip", "Rename this agent"),
|
|
965
965
|
"data-testid": "agent-details-rename-trigger",
|
|
966
|
-
children: [/* @__PURE__ */ y(
|
|
966
|
+
children: [/* @__PURE__ */ y(nt, { className: "size-3.5" }), S("agentDetails.rename", "Rename")]
|
|
967
967
|
})
|
|
968
968
|
}),
|
|
969
969
|
L === "DEGRADED" && /* @__PURE__ */ b("div", {
|
|
@@ -971,7 +971,7 @@ function Rt() {
|
|
|
971
971
|
"aria-live": "polite",
|
|
972
972
|
className: "flex items-start gap-3 rounded-lg border border-status-warning-border bg-status-warning-bg/30 px-4 py-3 text-sm text-text-primary",
|
|
973
973
|
children: [
|
|
974
|
-
/* @__PURE__ */ y(
|
|
974
|
+
/* @__PURE__ */ y(m, { className: "size-4 mt-0.5 flex-shrink-0 animate-spin text-status-warning-text" }),
|
|
975
975
|
/* @__PURE__ */ b("div", {
|
|
976
976
|
className: "flex-1 min-w-0 space-y-1",
|
|
977
977
|
children: [
|
|
@@ -1013,7 +1013,7 @@ function Rt() {
|
|
|
1013
1013
|
}), /* @__PURE__ */ b("div", { children: [/* @__PURE__ */ y("p", {
|
|
1014
1014
|
className: "text-sm text-text-secondary",
|
|
1015
1015
|
children: S("sessions.filterStatus", "Status")
|
|
1016
|
-
}), /* @__PURE__ */ y(
|
|
1016
|
+
}), /* @__PURE__ */ y(je, {
|
|
1017
1017
|
status: L,
|
|
1018
1018
|
reason: I.get(P.id)?.errorMessage ?? (P.lastGatewayAuthPushStatus === "failed" ? P.lastGatewayAuthPushError ?? "Gateway-auth push failed" : null),
|
|
1019
1019
|
linkTo: "?tab=connection",
|
|
@@ -1029,7 +1029,7 @@ function Rt() {
|
|
|
1029
1029
|
className: "flex items-center gap-3",
|
|
1030
1030
|
children: [/* @__PURE__ */ y("div", {
|
|
1031
1031
|
className: "size-10 rounded-lg bg-bg-sunken flex items-center justify-center",
|
|
1032
|
-
children: /* @__PURE__ */ y(
|
|
1032
|
+
children: /* @__PURE__ */ y($e, { className: "size-5 text-text-secondary" })
|
|
1033
1033
|
}), /* @__PURE__ */ b("div", { children: [/* @__PURE__ */ y("p", {
|
|
1034
1034
|
className: "text-sm text-text-secondary",
|
|
1035
1035
|
children: S("analytics.platform", "Platform")
|
|
@@ -1049,7 +1049,7 @@ function Rt() {
|
|
|
1049
1049
|
className: "flex items-center gap-3",
|
|
1050
1050
|
children: [/* @__PURE__ */ y("div", {
|
|
1051
1051
|
className: "size-10 rounded-lg bg-bg-sunken flex items-center justify-center",
|
|
1052
|
-
children: /* @__PURE__ */ y(
|
|
1052
|
+
children: /* @__PURE__ */ y(ot, { className: "size-5 text-text-secondary" })
|
|
1053
1053
|
}), /* @__PURE__ */ b("div", { children: [/* @__PURE__ */ y("p", {
|
|
1054
1054
|
className: "text-sm text-text-secondary",
|
|
1055
1055
|
children: S("agentDetails.version", "Version")
|
|
@@ -1134,7 +1134,7 @@ function Rt() {
|
|
|
1134
1134
|
]
|
|
1135
1135
|
})
|
|
1136
1136
|
}),
|
|
1137
|
-
/* @__PURE__ */ b(
|
|
1137
|
+
/* @__PURE__ */ b(kt, {
|
|
1138
1138
|
mode: "wait",
|
|
1139
1139
|
children: [
|
|
1140
1140
|
V === "overview" && /* @__PURE__ */ b(_.div, {
|
|
@@ -1157,7 +1157,7 @@ function Rt() {
|
|
|
1157
1157
|
className: "p-4 border-b border-border-default",
|
|
1158
1158
|
children: /* @__PURE__ */ b("h3", {
|
|
1159
1159
|
className: "font-semibold text-text-primary flex items-center gap-2",
|
|
1160
|
-
children: [/* @__PURE__ */ y(
|
|
1160
|
+
children: [/* @__PURE__ */ y(Ye, { className: "size-5" }), S("agentDetails.capabilities", "Capabilities")]
|
|
1161
1161
|
})
|
|
1162
1162
|
}), /* @__PURE__ */ y("div", {
|
|
1163
1163
|
className: "p-4",
|
|
@@ -1227,7 +1227,7 @@ function Rt() {
|
|
|
1227
1227
|
})
|
|
1228
1228
|
}), /* @__PURE__ */ y("div", {
|
|
1229
1229
|
className: "p-4",
|
|
1230
|
-
children: /* @__PURE__ */ y(
|
|
1230
|
+
children: /* @__PURE__ */ y(ge, {
|
|
1231
1231
|
entityType: "VIBECONTROLS_AGENT",
|
|
1232
1232
|
entityId: P.id
|
|
1233
1233
|
})
|
|
@@ -1236,7 +1236,7 @@ function Rt() {
|
|
|
1236
1236
|
className: "p-4 border-b border-border-default",
|
|
1237
1237
|
children: /* @__PURE__ */ b("h3", {
|
|
1238
1238
|
className: "font-semibold text-text-primary flex items-center gap-2",
|
|
1239
|
-
children: [/* @__PURE__ */ y(
|
|
1239
|
+
children: [/* @__PURE__ */ y(Et, { className: "size-5" }), S("health.tunnel", "Tunnel")]
|
|
1240
1240
|
})
|
|
1241
1241
|
}), /* @__PURE__ */ y("div", {
|
|
1242
1242
|
className: "p-4",
|
|
@@ -1299,7 +1299,7 @@ function Rt() {
|
|
|
1299
1299
|
className: "p-4 border-b border-border-default",
|
|
1300
1300
|
children: /* @__PURE__ */ b("h3", {
|
|
1301
1301
|
className: "font-semibold text-text-primary flex items-center gap-2",
|
|
1302
|
-
children: [/* @__PURE__ */ y(
|
|
1302
|
+
children: [/* @__PURE__ */ y(Xe, { className: "size-5" }), S("vibeDetails.timeline", "Timeline")]
|
|
1303
1303
|
})
|
|
1304
1304
|
}), /* @__PURE__ */ y("div", {
|
|
1305
1305
|
className: "p-4",
|
|
@@ -1346,7 +1346,7 @@ function Rt() {
|
|
|
1346
1346
|
y: -8
|
|
1347
1347
|
},
|
|
1348
1348
|
transition: { duration: .2 },
|
|
1349
|
-
children: /* @__PURE__ */ y(
|
|
1349
|
+
children: /* @__PURE__ */ y(Le, { agentId: P.id })
|
|
1350
1350
|
}, "profiles"),
|
|
1351
1351
|
V === "security" && /* @__PURE__ */ b(_.div, {
|
|
1352
1352
|
initial: {
|
|
@@ -1368,7 +1368,7 @@ function Rt() {
|
|
|
1368
1368
|
className: "p-4 border-b border-border-default",
|
|
1369
1369
|
children: /* @__PURE__ */ b("h3", {
|
|
1370
1370
|
className: "font-semibold text-text-primary flex items-center gap-2",
|
|
1371
|
-
children: [/* @__PURE__ */ y(
|
|
1371
|
+
children: [/* @__PURE__ */ y(ct, { className: "size-5" }), S("agentDetails.agentApiKey", "Agent API Key")]
|
|
1372
1372
|
})
|
|
1373
1373
|
}), /* @__PURE__ */ b("div", {
|
|
1374
1374
|
className: "p-4",
|
|
@@ -1391,14 +1391,14 @@ function Rt() {
|
|
|
1391
1391
|
disabled: Cn,
|
|
1392
1392
|
className: "p-2 rounded hover:bg-bg-sunken transition-colors flex-shrink-0 disabled:opacity-50",
|
|
1393
1393
|
title: vn ? S("agentDetails.hideApiKey", "Hide API key") : S("agentDetails.showApiKey", "Show API key"),
|
|
1394
|
-
children: y(vn ?
|
|
1394
|
+
children: y(vn ? it : rt, { className: "size-4 text-text-secondary" })
|
|
1395
1395
|
}),
|
|
1396
1396
|
/* @__PURE__ */ y("button", {
|
|
1397
1397
|
type: "button",
|
|
1398
1398
|
onClick: Rr,
|
|
1399
1399
|
className: "p-2 rounded hover:bg-bg-sunken transition-colors flex-shrink-0",
|
|
1400
1400
|
title: S("agentDetails.copyApiKey", "Copy API key"),
|
|
1401
|
-
children: bn ? /* @__PURE__ */ y(
|
|
1401
|
+
children: bn ? /* @__PURE__ */ y(Je, { className: "size-4 text-status-success-text" }) : /* @__PURE__ */ y(Qe, { className: "size-4 text-text-secondary" })
|
|
1402
1402
|
})
|
|
1403
1403
|
]
|
|
1404
1404
|
}) : /* @__PURE__ */ y("p", {
|
|
@@ -1409,23 +1409,23 @@ function Rt() {
|
|
|
1409
1409
|
children: "This key authenticates requests sent to the agent. The key is revealed only on explicit operator action and every read is audited."
|
|
1410
1410
|
})]
|
|
1411
1411
|
})] }),
|
|
1412
|
-
/* @__PURE__ */ y(
|
|
1412
|
+
/* @__PURE__ */ y(Oe, {
|
|
1413
1413
|
agentId: P.id,
|
|
1414
1414
|
currentTunnelUrl: P.tunnelUrl,
|
|
1415
1415
|
onUpdated: () => N()
|
|
1416
1416
|
}),
|
|
1417
|
-
/* @__PURE__ */ y(
|
|
1417
|
+
/* @__PURE__ */ y(ke, {
|
|
1418
1418
|
agentId: P.id,
|
|
1419
1419
|
storageAdapter: P.storageAdapter,
|
|
1420
1420
|
dbPath: P.dbPath,
|
|
1421
1421
|
hasStorageOptions: P.hasStorageOptions,
|
|
1422
1422
|
onUpdated: () => N()
|
|
1423
1423
|
}),
|
|
1424
|
-
/* @__PURE__ */ y(
|
|
1424
|
+
/* @__PURE__ */ y(Ft, {
|
|
1425
1425
|
agent: P,
|
|
1426
1426
|
onUpdate: () => N()
|
|
1427
1427
|
}),
|
|
1428
|
-
/* @__PURE__ */ y(
|
|
1428
|
+
/* @__PURE__ */ y(Me, { agent: {
|
|
1429
1429
|
id: P.id,
|
|
1430
1430
|
profile: R ?? "default"
|
|
1431
1431
|
} })
|
|
@@ -1443,13 +1443,13 @@ function Rt() {
|
|
|
1443
1443
|
id: "available",
|
|
1444
1444
|
label: "Available",
|
|
1445
1445
|
count: n.length,
|
|
1446
|
-
icon:
|
|
1446
|
+
icon: tt
|
|
1447
1447
|
},
|
|
1448
1448
|
{
|
|
1449
1449
|
id: "store",
|
|
1450
1450
|
label: "Store",
|
|
1451
1451
|
count: J.length,
|
|
1452
|
-
icon:
|
|
1452
|
+
icon: tt
|
|
1453
1453
|
},
|
|
1454
1454
|
{
|
|
1455
1455
|
id: "ui-plugins",
|
|
@@ -1565,7 +1565,7 @@ function Rt() {
|
|
|
1565
1565
|
}),
|
|
1566
1566
|
!P?.isActive && /* @__PURE__ */ b("p", {
|
|
1567
1567
|
className: "text-sm text-text-muted flex items-center gap-1.5",
|
|
1568
|
-
children: [/* @__PURE__ */ y(
|
|
1568
|
+
children: [/* @__PURE__ */ y(st, { className: "size-4 flex-shrink-0" }), "Agent is offline — showing known plugin catalog. Live data will load when the agent is reachable."]
|
|
1569
1569
|
}),
|
|
1570
1570
|
K === "installed" && /* @__PURE__ */ y(v, { children: t.length > 0 ? /* @__PURE__ */ y("div", {
|
|
1571
1571
|
className: "space-y-2",
|
|
@@ -1659,14 +1659,14 @@ function Rt() {
|
|
|
1659
1659
|
disabled: U === e.packageName,
|
|
1660
1660
|
className: "flex items-center gap-1.5 px-2.5 py-1.5 text-xs font-medium text-text-primary bg-bg-secondary border border-border-default rounded-md hover:bg-bg-elevated transition-colors disabled:opacity-50 disabled:cursor-not-allowed",
|
|
1661
1661
|
title: S("agentDetails.updatePlugin", "Update plugin (latest or a specific version)"),
|
|
1662
|
-
children: [U === e.packageName ? /* @__PURE__ */ y(
|
|
1662
|
+
children: [U === e.packageName ? /* @__PURE__ */ y(m, { className: "size-3 animate-spin" }) : /* @__PURE__ */ y(Ke, { className: "size-3" }), S("agentDetails.update", "Update")]
|
|
1663
1663
|
}),
|
|
1664
1664
|
!e.isCore && /* @__PURE__ */ b("button", {
|
|
1665
1665
|
type: "button",
|
|
1666
1666
|
onClick: () => Tr(e.packageName),
|
|
1667
1667
|
disabled: U === e.packageName,
|
|
1668
1668
|
className: "flex items-center gap-1.5 px-2.5 py-1.5 text-xs font-medium text-status-error-text bg-status-error-bg/15 border border-status-error-border/40 rounded-md hover:bg-status-error-bg/25 transition-colors disabled:opacity-50 disabled:cursor-not-allowed",
|
|
1669
|
-
children: [U === e.packageName ? /* @__PURE__ */ y(
|
|
1669
|
+
children: [U === e.packageName ? /* @__PURE__ */ y(m, { className: "size-3 animate-spin" }) : /* @__PURE__ */ y(Ct, { className: "size-3" }), S("sessions.remove", "Remove")]
|
|
1670
1670
|
})
|
|
1671
1671
|
]
|
|
1672
1672
|
})]
|
|
@@ -1700,7 +1700,7 @@ function Rt() {
|
|
|
1700
1700
|
onClick: () => wr(e.packageName),
|
|
1701
1701
|
disabled: U === e.packageName,
|
|
1702
1702
|
className: "flex items-center gap-1.5 px-2.5 py-1.5 text-xs text-action-primary-text bg-action-primary-bg rounded-md hover:bg-action-primary-bg-hover transition-colors disabled:opacity-50 disabled:cursor-not-allowed flex-shrink-0 sm:ml-3",
|
|
1703
|
-
children: [U === e.packageName ? /* @__PURE__ */ y(
|
|
1703
|
+
children: [U === e.packageName ? /* @__PURE__ */ y(m, { className: "size-3 animate-spin" }) : /* @__PURE__ */ y(tt, { className: "size-3" }), "Install"]
|
|
1704
1704
|
})]
|
|
1705
1705
|
}, e.packageName))
|
|
1706
1706
|
}) : /* @__PURE__ */ y("p", {
|
|
@@ -1774,7 +1774,7 @@ function Rt() {
|
|
|
1774
1774
|
}, e.id);
|
|
1775
1775
|
})
|
|
1776
1776
|
})] }),
|
|
1777
|
-
K === "ui-plugins" && /* @__PURE__ */ y(v, { children: r.length > 0 || P?.tunnelUrl ? /* @__PURE__ */ y(
|
|
1777
|
+
K === "ui-plugins" && /* @__PURE__ */ y(v, { children: r.length > 0 || P?.tunnelUrl ? /* @__PURE__ */ y(Ne, {
|
|
1778
1778
|
availablePlugins: [...P?.tunnelUrl ? [{
|
|
1779
1779
|
pluginName: "code-server",
|
|
1780
1780
|
displayName: "Code Server (VS Code)",
|
|
@@ -1796,7 +1796,7 @@ function Rt() {
|
|
|
1796
1796
|
}) }),
|
|
1797
1797
|
Xn && H.length === 0 && /* @__PURE__ */ b("div", {
|
|
1798
1798
|
className: "flex items-center gap-2 text-sm text-text-secondary",
|
|
1799
|
-
children: [/* @__PURE__ */ y(
|
|
1799
|
+
children: [/* @__PURE__ */ y(m, { className: "size-4 animate-spin" }), "Loading plugins..."]
|
|
1800
1800
|
})
|
|
1801
1801
|
]
|
|
1802
1802
|
})] })
|
|
@@ -1827,8 +1827,8 @@ function Rt() {
|
|
|
1827
1827
|
Z.length,
|
|
1828
1828
|
")"
|
|
1829
1829
|
]
|
|
1830
|
-
}), /* @__PURE__ */ y(
|
|
1831
|
-
permission:
|
|
1830
|
+
}), /* @__PURE__ */ y(Mt, {
|
|
1831
|
+
permission: Ce.SESSION_CREATE,
|
|
1832
1832
|
deniedBehavior: "disable",
|
|
1833
1833
|
deniedTooltip: "You don't have permission to create sessions",
|
|
1834
1834
|
children: /* @__PURE__ */ b("button", {
|
|
@@ -1860,12 +1860,12 @@ function Rt() {
|
|
|
1860
1860
|
children: e.type
|
|
1861
1861
|
})]
|
|
1862
1862
|
})]
|
|
1863
|
-
}), /* @__PURE__ */ y(
|
|
1863
|
+
}), /* @__PURE__ */ y(ve, { status: e.status })]
|
|
1864
1864
|
}, e.id))
|
|
1865
1865
|
}) : /* @__PURE__ */ b("div", {
|
|
1866
1866
|
className: "p-6 text-center text-text-secondary flex flex-col items-center gap-3",
|
|
1867
|
-
children: [/* @__PURE__ */ y("span", { children: S("agentDetails.noSessionsOnAgent", "No sessions on this agent") }), /* @__PURE__ */ y(
|
|
1868
|
-
permission:
|
|
1867
|
+
children: [/* @__PURE__ */ y("span", { children: S("agentDetails.noSessionsOnAgent", "No sessions on this agent") }), /* @__PURE__ */ y(Mt, {
|
|
1868
|
+
permission: Ce.SESSION_CREATE,
|
|
1869
1869
|
deniedBehavior: "disable",
|
|
1870
1870
|
deniedTooltip: "You don't have permission to create sessions",
|
|
1871
1871
|
children: /* @__PURE__ */ b("button", {
|
|
@@ -1893,7 +1893,7 @@ function Rt() {
|
|
|
1893
1893
|
transition: { duration: .2 },
|
|
1894
1894
|
children: /* @__PURE__ */ y(l, {
|
|
1895
1895
|
className: "min-h-[60vh]",
|
|
1896
|
-
children: /* @__PURE__ */ y(
|
|
1896
|
+
children: /* @__PURE__ */ y(Ee, {
|
|
1897
1897
|
agentId: P.id,
|
|
1898
1898
|
agentName: P.name
|
|
1899
1899
|
})
|
|
@@ -1921,7 +1921,7 @@ function Rt() {
|
|
|
1921
1921
|
})
|
|
1922
1922
|
}), /* @__PURE__ */ y("div", {
|
|
1923
1923
|
className: "p-4",
|
|
1924
|
-
children: /* @__PURE__ */ y(
|
|
1924
|
+
children: /* @__PURE__ */ y(Ie, {
|
|
1925
1925
|
agentId: P.id,
|
|
1926
1926
|
profile: R,
|
|
1927
1927
|
className: "min-h-[28rem]"
|
|
@@ -1947,7 +1947,7 @@ function Rt() {
|
|
|
1947
1947
|
children: /* @__PURE__ */ b("h3", {
|
|
1948
1948
|
className: "font-semibold text-text-primary flex items-center gap-2",
|
|
1949
1949
|
children: [
|
|
1950
|
-
/* @__PURE__ */ y(
|
|
1950
|
+
/* @__PURE__ */ y(Et, { className: "size-5" }),
|
|
1951
1951
|
S("nav.vibes", "Vibes"),
|
|
1952
1952
|
" (",
|
|
1953
1953
|
Q.length,
|
|
@@ -1966,7 +1966,7 @@ function Rt() {
|
|
|
1966
1966
|
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",
|
|
1967
1967
|
children: [/* @__PURE__ */ b("div", {
|
|
1968
1968
|
className: "flex items-center gap-3 min-w-0",
|
|
1969
|
-
children: [/* @__PURE__ */ y(
|
|
1969
|
+
children: [/* @__PURE__ */ y(Et, { className: "size-5 text-text-secondary flex-shrink-0" }), /* @__PURE__ */ b("div", {
|
|
1970
1970
|
className: "min-w-0",
|
|
1971
1971
|
children: [/* @__PURE__ */ y("p", {
|
|
1972
1972
|
className: "font-medium text-text-primary truncate",
|
|
@@ -1976,7 +1976,7 @@ function Rt() {
|
|
|
1976
1976
|
children: e.type
|
|
1977
1977
|
})]
|
|
1978
1978
|
})]
|
|
1979
|
-
}), /* @__PURE__ */ y(
|
|
1979
|
+
}), /* @__PURE__ */ y(ve, { status: e.status })]
|
|
1980
1980
|
}, e.id))
|
|
1981
1981
|
}) : /* @__PURE__ */ y("div", {
|
|
1982
1982
|
className: "p-6 text-center text-text-secondary",
|
|
@@ -1998,7 +1998,7 @@ function Rt() {
|
|
|
1998
1998
|
},
|
|
1999
1999
|
transition: { duration: .2 },
|
|
2000
2000
|
className: "space-y-6",
|
|
2001
|
-
children: /* @__PURE__ */ y(
|
|
2001
|
+
children: /* @__PURE__ */ y(Re, {
|
|
2002
2002
|
context: "agent",
|
|
2003
2003
|
agentVibes: Q.map((e) => ({
|
|
2004
2004
|
id: e.id,
|
|
@@ -2021,7 +2021,7 @@ function Rt() {
|
|
|
2021
2021
|
},
|
|
2022
2022
|
transition: { duration: .2 },
|
|
2023
2023
|
className: "space-y-6",
|
|
2024
|
-
children: /* @__PURE__ */ y(
|
|
2024
|
+
children: /* @__PURE__ */ y(Ae, { agent: {
|
|
2025
2025
|
id: P.id,
|
|
2026
2026
|
profile: P.metadata?.profile ?? "default"
|
|
2027
2027
|
} })
|
|
@@ -2040,7 +2040,7 @@ function Rt() {
|
|
|
2040
2040
|
y: -8
|
|
2041
2041
|
},
|
|
2042
2042
|
transition: { duration: .2 },
|
|
2043
|
-
children: /* @__PURE__ */ y(
|
|
2043
|
+
children: /* @__PURE__ */ y(Te, {
|
|
2044
2044
|
agentId: P.id,
|
|
2045
2045
|
profile: R
|
|
2046
2046
|
})
|
|
@@ -2062,7 +2062,7 @@ function Rt() {
|
|
|
2062
2062
|
children: /* @__PURE__ */ b(l, {
|
|
2063
2063
|
className: "p-6 text-center text-text-secondary",
|
|
2064
2064
|
children: [
|
|
2065
|
-
/* @__PURE__ */ y(
|
|
2065
|
+
/* @__PURE__ */ y(et, { className: "size-8 mx-auto mb-2 text-text-muted" }),
|
|
2066
2066
|
/* @__PURE__ */ y("p", { children: S("agentDetails.backupRequiresTunnelAndApiKey", "Agent tunnel URL and API key are required for backup management.") }),
|
|
2067
2067
|
/* @__PURE__ */ y("p", {
|
|
2068
2068
|
className: "text-sm mt-1",
|
|
@@ -2085,7 +2085,7 @@ function Rt() {
|
|
|
2085
2085
|
y: -8
|
|
2086
2086
|
},
|
|
2087
2087
|
transition: { duration: .2 },
|
|
2088
|
-
children: /* @__PURE__ */ y(
|
|
2088
|
+
children: /* @__PURE__ */ y(De, {
|
|
2089
2089
|
agentId: P.id,
|
|
2090
2090
|
agentVersion: P.version,
|
|
2091
2091
|
onAfterDestructiveNuke: Nr
|
|
@@ -2110,7 +2110,7 @@ function Rt() {
|
|
|
2110
2110
|
className: "space-y-6",
|
|
2111
2111
|
children: /* @__PURE__ */ y(l, { children: /* @__PURE__ */ y("div", {
|
|
2112
2112
|
className: "p-0 h-[600px]",
|
|
2113
|
-
children: /* @__PURE__ */ y(
|
|
2113
|
+
children: /* @__PURE__ */ y(He, {
|
|
2114
2114
|
contribution: e,
|
|
2115
2115
|
tunnel: e.tunnel,
|
|
2116
2116
|
restPaths: e.capabilities.restPaths.length > 0 ? e.capabilities.restPaths : [`/ui/${e.pluginKey}`],
|
|
@@ -2130,7 +2130,7 @@ function Rt() {
|
|
|
2130
2130
|
})()
|
|
2131
2131
|
]
|
|
2132
2132
|
}),
|
|
2133
|
-
z && P && /* @__PURE__ */ y(
|
|
2133
|
+
z && P && /* @__PURE__ */ y(Ve, {
|
|
2134
2134
|
isOpen: Hn,
|
|
2135
2135
|
onClose: () => Un(!1),
|
|
2136
2136
|
mountPoint: "agent.detailTab",
|
|
@@ -2225,7 +2225,7 @@ function Rt() {
|
|
|
2225
2225
|
onClick: () => an((e) => !e),
|
|
2226
2226
|
className: "p-0.5 rounded-full text-text-muted hover:text-text-secondary transition-colors",
|
|
2227
2227
|
"aria-label": "What is AI Context?",
|
|
2228
|
-
children: /* @__PURE__ */ y(
|
|
2228
|
+
children: /* @__PURE__ */ y(st, { className: "size-3.5" })
|
|
2229
2229
|
}), rn && /* @__PURE__ */ b(v, { children: [/* @__PURE__ */ y("div", {
|
|
2230
2230
|
role: "button",
|
|
2231
2231
|
tabIndex: 0,
|
|
@@ -2396,16 +2396,16 @@ function Rt() {
|
|
|
2396
2396
|
]
|
|
2397
2397
|
})
|
|
2398
2398
|
}),
|
|
2399
|
-
/* @__PURE__ */ y(
|
|
2399
|
+
/* @__PURE__ */ y(ce, {
|
|
2400
2400
|
isOpen: sr,
|
|
2401
2401
|
onClose: () => cr(!1),
|
|
2402
2402
|
onConfirm: () => {
|
|
2403
2403
|
cr(!1), x("/billing/plans");
|
|
2404
2404
|
},
|
|
2405
|
-
title:
|
|
2406
|
-
message:
|
|
2405
|
+
title: le(lr).title,
|
|
2406
|
+
message: le(lr).message
|
|
2407
2407
|
}),
|
|
2408
|
-
/* @__PURE__ */ y(
|
|
2408
|
+
/* @__PURE__ */ y(se, {
|
|
2409
2409
|
isOpen: $n,
|
|
2410
2410
|
onClose: () => {
|
|
2411
2411
|
ar || er(!1);
|
|
@@ -2420,7 +2420,7 @@ function Rt() {
|
|
|
2420
2420
|
className: "space-y-2",
|
|
2421
2421
|
children: [/* @__PURE__ */ b("label", {
|
|
2422
2422
|
className: "flex items-start gap-3 p-3 rounded-md bg-bg-sunken border border-border-default cursor-pointer",
|
|
2423
|
-
children: [/* @__PURE__ */ y(
|
|
2423
|
+
children: [/* @__PURE__ */ y(At, {
|
|
2424
2424
|
checked: tr,
|
|
2425
2425
|
disabled: ar,
|
|
2426
2426
|
onCheckedChange: (e) => nr(e === !0),
|
|
@@ -2437,7 +2437,7 @@ function Rt() {
|
|
|
2437
2437
|
})]
|
|
2438
2438
|
}), /* @__PURE__ */ b("label", {
|
|
2439
2439
|
className: "flex items-start gap-3 p-3 rounded-md bg-bg-sunken border border-border-default cursor-pointer",
|
|
2440
|
-
children: [/* @__PURE__ */ y(
|
|
2440
|
+
children: [/* @__PURE__ */ y(At, {
|
|
2441
2441
|
checked: rr,
|
|
2442
2442
|
disabled: ar,
|
|
2443
2443
|
onCheckedChange: (e) => ir(e === !0),
|
|
@@ -2459,6 +2459,6 @@ function Rt() {
|
|
|
2459
2459
|
});
|
|
2460
2460
|
}
|
|
2461
2461
|
//#endregion
|
|
2462
|
-
export {
|
|
2462
|
+
export { Lt as AgentDetailsPage };
|
|
2463
2463
|
|
|
2464
2464
|
//# sourceMappingURL=AgentDetailsPage.js.map
|