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