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