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