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