@burdenoff/microfe-vibecontrols 2026.528.7 → 2026.528.8

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.
Files changed (33) hide show
  1. package/dist/VibeControlsRoot.js +1 -0
  2. package/dist/VibeControlsRoot.js.map +1 -1
  3. package/dist/components/audit/AuditLogFilters.js +71 -47
  4. package/dist/components/audit/AuditLogFilters.js.map +1 -1
  5. package/dist/components/shared/AgentSetupBanner.js +50 -45
  6. package/dist/components/shared/AgentSetupBanner.js.map +1 -1
  7. package/dist/components/shared/LinkToVibePanel.js +97 -0
  8. package/dist/components/shared/LinkToVibePanel.js.map +1 -0
  9. package/dist/components/shared/index.js +1 -0
  10. package/dist/components/vibe/VibeLinkedEntitiesPanel.js +60 -0
  11. package/dist/components/vibe/VibeLinkedEntitiesPanel.js.map +1 -0
  12. package/dist/components/vibedeck/VibeDeckButtonTile.js +25 -23
  13. package/dist/components/vibedeck/VibeDeckButtonTile.js.map +1 -1
  14. package/dist/components/vibedeck/VibeDeckGrid.js +2 -2
  15. package/dist/components/vibedeck/VibeDeckGrid.js.map +1 -1
  16. package/dist/microfe-vibecontrols.css +1 -1
  17. package/dist/pages/AgentDetailsPage.js +2 -2
  18. package/dist/pages/AgentDetailsPage.js.map +1 -1
  19. package/dist/pages/AnalyticsPage.js +255 -204
  20. package/dist/pages/AnalyticsPage.js.map +1 -1
  21. package/dist/pages/OverviewPage.js +1 -11
  22. package/dist/pages/OverviewPage.js.map +1 -1
  23. package/dist/pages/SessionsPage.js +825 -629
  24. package/dist/pages/SessionsPage.js.map +1 -1
  25. package/dist/pages/VibeAuditPage.js +184 -153
  26. package/dist/pages/VibeAuditPage.js.map +1 -1
  27. package/dist/pages/VibeDeckPage.js +416 -379
  28. package/dist/pages/VibeDeckPage.js.map +1 -1
  29. package/dist/pages/VibeDetailsPage.js +621 -557
  30. package/dist/pages/VibeDetailsPage.js.map +1 -1
  31. package/dist/pages/tunnels/TunnelsTab.js +115 -90
  32. package/dist/pages/tunnels/TunnelsTab.js.map +1 -1
  33. package/package.json +1 -1
@@ -11,31 +11,31 @@ import { EntityTagPicker as Se } from "../components/shared/EntityTagPicker.js";
11
11
  import { useDraftEntityTags as Ce } from "../hooks/useDraftEntityTags.js";
12
12
  import { EmptyState as we } from "../components/shared/EmptyState.js";
13
13
  import { SearchInput as Te } from "../components/shared/SearchInput.js";
14
- import { FilterDropdown as l } from "../components/shared/FilterDropdown.js";
15
- import { AgentSetupBanner as Ee } from "../components/shared/AgentSetupBanner.js";
16
- import { GetHelpButton as De } from "../components/shared/GetHelpButton.js";
17
- import { SearchableSelect as u } from "../components/shared/SearchableSelect.js";
18
- import Oe from "../components/shared/SessionNotificationBanner.js";
14
+ import { FilterDropdown as Ee } from "../components/shared/FilterDropdown.js";
15
+ import { AgentSetupBanner as De } from "../components/shared/AgentSetupBanner.js";
16
+ import { GetHelpButton as Oe } from "../components/shared/GetHelpButton.js";
17
+ import { SearchableSelect as l } from "../components/shared/SearchableSelect.js";
18
+ import ke from "../components/shared/SessionNotificationBanner.js";
19
19
  import "../components/shared/index.js";
20
- import { VIBE_PERMISSIONS as d } from "../constants/permissions.js";
21
- import { SessionCard as ke } from "../components/sessions/SessionCard.js";
22
- import { SessionList as Ae } from "../components/sessions/SessionList.js";
23
- import { TerminalPanel as je } from "../components/sessions/TerminalPanel.js";
24
- import { SessionShareDialog as Me } from "../components/sessions/SessionShareDialog.js";
20
+ import { VIBE_PERMISSIONS as Ae } from "../constants/permissions.js";
21
+ import { SessionCard as je } from "../components/sessions/SessionCard.js";
22
+ import { SessionList as Me } from "../components/sessions/SessionList.js";
23
+ import { TerminalPanel as Ne } from "../components/sessions/TerminalPanel.js";
24
+ import { SessionShareDialog as Pe } from "../components/sessions/SessionShareDialog.js";
25
25
  import "../components/sessions/index.js";
26
- import { useCallback as f, useEffect as p, useMemo as m, useRef as h, useState as g } from "react";
27
- import { useI18n as Ne } from "@burdenoff/fe-libs/shared/providers/shell/I18nProvider";
28
- import { Activity as Pe, CheckSquare as Fe, Grid as Ie, List as Le, Monitor as Re, Play as ze, Plus as Be, RefreshCw as Ve, RotateCcw as He, Square as Ue, Terminal as We, Trash2 as Ge, XSquare as Ke } from "lucide-react";
29
- import { useSearchParams as qe } from "react-router-dom";
30
- import { usePermissions as Je } from "@burdenoff/fe-libs/shared/providers/shell";
31
- import { AnimatePresence as Ye } from "framer-motion";
32
- import { jsx as _, jsxs as v } from "react/jsx-runtime";
33
- import { SaveToFilesButton as Xe } from "@burdenoff/fe-libs/storage";
34
- import { MotionItem as Ze, MotionList as Qe, MotionPage as y } from "@burdenoff/fe-libs/shared/motion";
35
- import { AccessDenied as $e, PermissionButton as et } from "@burdenoff/fe-libs/shared/components";
26
+ import { useCallback as u, useEffect as d, useMemo as f, useRef as p, useState as m } from "react";
27
+ import { useI18n as Fe } from "@burdenoff/fe-libs/shared/providers/shell/I18nProvider";
28
+ import { Activity as Ie, CheckSquare as Le, Grid as Re, List as ze, Monitor as Be, Play as Ve, Plus as He, RefreshCw as Ue, RotateCcw as We, Square as Ge, Terminal as Ke, Trash2 as qe, XSquare as Je } from "lucide-react";
29
+ import { useSearchParams as Ye } from "react-router-dom";
30
+ import { usePermissions as Xe } from "@burdenoff/fe-libs/shared/providers/shell";
31
+ import { AnimatePresence as Ze } from "framer-motion";
32
+ import { jsx as h, jsxs as g } from "react/jsx-runtime";
33
+ import { SaveToFilesButton as Qe } from "@burdenoff/fe-libs/storage";
34
+ import { MotionItem as $e, MotionList as et, MotionPage as _ } from "@burdenoff/fe-libs/shared/motion";
35
+ import { AccessDenied as tt, PermissionButton as nt } from "@burdenoff/fe-libs/shared/components";
36
36
  //#region src/pages/SessionsPage.tsx
37
- var tt = 3e5;
38
- function nt(e, t) {
37
+ var rt = 3e5;
38
+ function it(e, t) {
39
39
  if (!e) return null;
40
40
  try {
41
41
  let n = new URL(e);
@@ -52,7 +52,7 @@ function nt(e, t) {
52
52
  return e;
53
53
  }
54
54
  }
55
- function rt(e, t, n, r) {
55
+ function at(e, t, n, r) {
56
56
  if (e !== "RUNNING") return e;
57
57
  if (r === !1) return "ERROR";
58
58
  if (!t) return e;
@@ -65,223 +65,236 @@ function rt(e, t, n, r) {
65
65
  }
66
66
  return e;
67
67
  }
68
- function it() {
69
- let { t: it } = Ne(), { onSessionStart: at, workspaceId: ot } = he(), st = ge(), { hasPermission: ct, isLoading: lt, permissions: ut } = Je(), [dt, ft] = qe(), b = f((e, t, n) => {
70
- let r = it(e, n), i = r === e ? t : r;
68
+ function ot() {
69
+ let { t: ot } = Fe(), { onSessionStart: st, workspaceId: ct } = he(), lt = ge(), { hasPermission: ut, isLoading: dt, permissions: ft } = Xe(), [pt, mt] = Ye(), v = u((e, t, n) => {
70
+ let r = ot(e, n), i = r === e ? t : r;
71
71
  return n ? Object.entries(n).reduce((e, [t, n]) => e.replace(`{{${t}}}`, String(n)), i) : i;
72
- }, [it]), pt = m(() => [
72
+ }, [ot]), ht = f(() => [
73
73
  {
74
74
  value: "all",
75
- label: b("sessions.statusAll", "All Statuses")
75
+ label: v("sessions.statusAll", "All Statuses")
76
76
  },
77
77
  {
78
78
  value: "RUNNING",
79
- label: b("sessions.running", "Running")
79
+ label: v("sessions.running", "Running")
80
80
  },
81
81
  {
82
82
  value: "STOPPED",
83
- label: b("sessions.stopped", "Stopped")
83
+ label: v("sessions.stopped", "Stopped")
84
84
  },
85
85
  {
86
86
  value: "STARTING",
87
- label: b("sessions.starting", "Starting")
87
+ label: v("sessions.starting", "Starting")
88
88
  },
89
89
  {
90
90
  value: "ERROR",
91
- label: b("common.error", "Error")
91
+ label: v("common.error", "Error")
92
92
  }
93
- ], [b]), mt = m(() => [
93
+ ], [v]), gt = f(() => [
94
94
  {
95
95
  value: "all",
96
- label: b("sessions.typeAll", "All Types")
96
+ label: v("sessions.typeAll", "All Types")
97
97
  },
98
98
  {
99
99
  value: "TMUX",
100
- label: b("sessions.typeTmux", "Tmux")
100
+ label: v("sessions.typeTmux", "Tmux")
101
101
  },
102
102
  {
103
103
  value: "TERMINAL",
104
- label: b("sessions.typeTerminal", "Terminal")
104
+ label: v("sessions.typeTerminal", "Terminal")
105
105
  },
106
106
  {
107
107
  value: "SCRIPT",
108
- label: b("sessions.typeScript", "Script")
108
+ label: v("sessions.typeScript", "Script")
109
109
  },
110
110
  {
111
111
  value: "CUSTOM",
112
- label: b("sessions.typeCustom", "Custom")
112
+ label: v("sessions.typeCustom", "Custom")
113
113
  }
114
- ], [b]), ht = ct(d.SESSION_LIST), gt = ct(d.SESSION_CREATE), [x, _t] = g(""), [S, vt] = g("all"), [C, yt] = g("all"), [w, bt] = g("all"), [T, xt] = g("all"), [E, D] = g("terminal"), [St, O] = g(!1), [Ct, k] = g(!1), [wt, A] = g(null), [Tt, Et] = g(!1), [j, M] = g(null), [N, P] = g(/* @__PURE__ */ new Set()), [Dt, F] = g(!1), [Ot, kt] = g(!1), At = h(null), jt = h(null), Mt = h(null), Nt = h(null), [Pt, Ft] = g(""), [It, Lt] = g(""), [I, Rt] = g("TMUX"), [zt, Bt] = g(!1), { terminalTabs: Vt, activeTerminalTabId: Ht, sessionsViewMode: Ut, setTerminalTabs: Wt, setActiveTerminalTabId: Gt, setSessionsViewMode: Kt, activeSessionId: L } = _e(), [R, z] = g([]), [B, V] = g(null), [qt, H] = g(!1), [Jt, Yt] = g(null), [Xt, Zt] = g(!1), [U, Qt] = g(!1), W = dt.get("view"), $t = dt.get("session"), [en] = c({ refetchQueries: ["ListSessions"] }), { setDraftTagIds: tn, flushTags: nn } = Ce("VIBECONTROLS_SESSION"), [rn, an] = g(!1), [on, sn] = g(""), [cn, ln] = g(null), [un, dn] = g(null), [fn, { data: pn, loading: mn }] = a({ fetchPolicy: "network-only" }), [hn] = i({ refetchQueries: ["ListSessions"] }), [gn] = se({ refetchQueries: ["ListSessions"] }), [_n] = le({ refetchQueries: ["ListSessions"] }), [vn] = ie({ refetchQueries: ["ListSessions"] }), [G] = ce({ refetchQueries: ["ListSessions"] }), [yn] = ue({ refetchQueries: ["ListSessions"] }), [bn] = ae({ refetchQueries: ["ListSessions"] }), [xn] = fe({ refetchQueries: ["ListSessions"] }), [Sn] = de({ refetchQueries: ["ListSessions"] }), [Cn] = s({ refetchQueries: ["ListSessions"] }), [wn] = te({ refetchQueries: ["ListSessions"] }), [Tn] = ee({ refetchQueries: ["ListSessions"] }), [En] = o({ refetchQueries: ["ListSessions"] }), [Dn] = ne();
115
- p(() => {
116
- U || (W === "terminal" || W === "grid" || W === "list" ? D(W) : Ut && D(Ut), $t ? V($t) : Ht && V(Ht), Vt.length > 0 && z(Vt.map((e) => ({
114
+ ], [v]), _t = ut(Ae.SESSION_LIST), vt = ut(Ae.SESSION_CREATE), [y, yt] = m(""), [b, bt] = m("all"), [x, xt] = m("all"), [S, St] = m("all"), [C, Ct] = m("all"), [w, T] = m("terminal"), [wt, E] = m(!1), [Tt, D] = m(!1), [Et, O] = m(null), [Dt, Ot] = m(!1), [k, A] = m(null), [j, M] = m(/* @__PURE__ */ new Set()), [kt, N] = m(!1), [At, jt] = m(!1), Mt = p(null), Nt = p(null), Pt = p(null), Ft = p(null), [It, Lt] = m(""), [Rt, zt] = m(""), [P, Bt] = m("TMUX"), [Vt, Ht] = m(!1), { terminalTabs: Ut, activeTerminalTabId: Wt, sessionsViewMode: Gt, setTerminalTabs: Kt, setActiveTerminalTabId: qt, setSessionsViewMode: Jt, activeSessionId: F } = _e(), [I, L] = m([]), [R, z] = m(null), [Yt, Xt] = m(!1), [Zt, B] = m(!1), [V, Qt] = m(""), [$t, H] = m(!1), [en, tn] = m(null), [nn, rn] = m(!1), [U, an] = m(!1), W = pt.get("view"), on = pt.get("session"), [sn] = c({ refetchQueries: ["ListSessions"] }), { setDraftTagIds: cn, flushTags: ln } = Ce("VIBECONTROLS_SESSION"), [un, dn] = m(!1), [fn, pn] = m(""), [mn, hn] = m(null), [gn, _n] = m(null), [vn, { data: yn, loading: bn }] = a({ fetchPolicy: "network-only" }), [xn] = i({ refetchQueries: ["ListSessions"] }), [Sn] = se({ refetchQueries: ["ListSessions"] }), [Cn] = le({ refetchQueries: ["ListSessions"] }), [wn] = ie({ refetchQueries: ["ListSessions"] }), [G] = ce({ refetchQueries: ["ListSessions"] }), [Tn] = ue({ refetchQueries: ["ListSessions"] }), [En] = ae({ refetchQueries: ["ListSessions"] }), [Dn] = fe({ refetchQueries: ["ListSessions"] }), [On] = de({ refetchQueries: ["ListSessions"] }), [kn] = s({ refetchQueries: ["ListSessions"] }), [An] = te({ refetchQueries: ["ListSessions"] }), [jn] = ee({ refetchQueries: ["ListSessions"] }), [Mn] = o({ refetchQueries: ["ListSessions"] }), [Nn] = ne();
115
+ d(() => {
116
+ U || (W === "terminal" || W === "grid" || W === "list" ? T(W) : Gt && T(Gt), on ? z(on) : Wt && z(Wt), Ut.length > 0 && L(Ut.map((e) => ({
117
117
  sessionId: e.sessionId,
118
118
  name: e.name,
119
119
  terminalUrl: null,
120
120
  loading: !1,
121
121
  error: null
122
- }))), Qt(!0));
122
+ }))), an(!0));
123
123
  }, [
124
- Vt,
125
- Ht,
126
124
  Ut,
127
- $t,
125
+ Wt,
126
+ Gt,
127
+ on,
128
128
  W,
129
129
  U
130
130
  ]);
131
- let On = h(!1);
132
- p(() => {
133
- U && Wt(R.map((e) => ({
131
+ let Pn = p(!1);
132
+ d(() => {
133
+ U && Kt(I.map((e) => ({
134
134
  sessionId: e.sessionId,
135
135
  name: e.name
136
136
  })));
137
137
  }, [
138
- R,
138
+ I,
139
139
  U,
140
- Wt
141
- ]), p(() => {
142
- U && Gt(B);
140
+ Kt
141
+ ]), d(() => {
142
+ U && qt(R);
143
143
  }, [
144
- B,
144
+ R,
145
145
  U,
146
- Gt
147
- ]), p(() => {
148
- U && Kt(E);
146
+ qt
147
+ ]), d(() => {
148
+ U && Jt(w);
149
149
  }, [
150
- E,
150
+ w,
151
151
  U,
152
- Kt
153
- ]), p(() => {
152
+ Jt
153
+ ]), d(() => {
154
154
  if (!U) return;
155
- let e = new URLSearchParams(dt), t = !1, n = E === "terminal" ? null : E;
156
- n ? e.get("view") !== n && (e.set("view", n), t = !0) : e.has("view") && (e.delete("view"), t = !0), B ? e.get("session") !== B && (e.set("session", B), t = !0) : e.has("session") && (e.delete("session"), t = !0), t && ft(e, { replace: !0 });
155
+ let e = new URLSearchParams(pt), t = !1, n = w === "terminal" ? null : w;
156
+ n ? e.get("view") !== n && (e.set("view", n), t = !0) : e.has("view") && (e.delete("view"), t = !0), R ? e.get("session") !== R && (e.set("session", R), t = !0) : e.has("session") && (e.delete("session"), t = !0), t && mt(e, { replace: !0 });
157
157
  }, [
158
- B,
159
- dt,
160
- ft,
158
+ R,
159
+ pt,
160
+ mt,
161
161
  U,
162
- E
162
+ w
163
163
  ]);
164
- let K = h(null);
164
+ let K = p(null);
165
165
  oe({
166
- skip: !ot,
167
- variables: { workspaceId: ot || "" }
168
- }), p(() => {
166
+ skip: !ct,
167
+ variables: { workspaceId: ct || "" }
168
+ }), d(() => {
169
169
  let e = setInterval(() => {
170
- Cn().catch(() => {});
171
- }, tt);
170
+ kn().catch(() => {});
171
+ }, rt);
172
172
  return () => clearInterval(e);
173
- }, [Cn]), p(() => {
173
+ }, [kn]), d(() => {
174
174
  let e = (e) => {
175
175
  let t = e.target;
176
176
  if (t.tagName === "INPUT" || t.tagName === "TEXTAREA" || t.tagName === "SELECT" || t.isContentEditable) return;
177
177
  let n = e.metaKey || e.ctrlKey;
178
178
  if (n && e.key === "t") {
179
- e.preventDefault(), O(!0);
179
+ e.preventDefault(), E(!0);
180
180
  return;
181
181
  }
182
- if (n && e.key === "w" && B) {
182
+ if (n && e.key === "w" && R) {
183
183
  e.preventDefault();
184
- let t = B;
185
- z((e) => e.filter((e) => e.sessionId !== t)), V(() => {
186
- let e = R.filter((e) => e.sessionId !== t);
184
+ let t = R;
185
+ L((e) => e.filter((e) => e.sessionId !== t)), z(() => {
186
+ let e = I.filter((e) => e.sessionId !== t);
187
187
  return e.length > 0 ? e[e.length - 1].sessionId : null;
188
188
  });
189
189
  return;
190
190
  }
191
- if (e.ctrlKey && e.key === "Tab" && !e.shiftKey && R.length > 1) {
192
- e.preventDefault(), V(R[(R.findIndex((e) => e.sessionId === B) + 1) % R.length].sessionId);
191
+ if (e.ctrlKey && e.key === "Tab" && !e.shiftKey && I.length > 1) {
192
+ e.preventDefault(), z(I[(I.findIndex((e) => e.sessionId === R) + 1) % I.length].sessionId);
193
+ return;
194
+ }
195
+ if (e.ctrlKey && e.key === "Tab" && e.shiftKey && I.length > 1) {
196
+ e.preventDefault(), z(I[(I.findIndex((e) => e.sessionId === R) - 1 + I.length) % I.length].sessionId);
193
197
  return;
194
198
  }
195
- if (e.ctrlKey && e.key === "Tab" && e.shiftKey && R.length > 1) {
196
- e.preventDefault(), V(R[(R.findIndex((e) => e.sessionId === B) - 1 + R.length) % R.length].sessionId);
199
+ if (n && /^[1-9]$/.test(e.key) && I.length > 0) {
200
+ let t = Number(e.key) - 1;
201
+ t < I.length && (e.preventDefault(), z(I[t].sessionId));
202
+ return;
203
+ }
204
+ if (n && (e.key === "p" || e.key === "P")) {
205
+ e.preventDefault(), Qt(""), B(!0);
206
+ return;
207
+ }
208
+ if (!n && !e.altKey && !e.shiftKey && e.key === "?") {
209
+ e.preventDefault(), Xt(!0);
197
210
  return;
198
211
  }
199
212
  };
200
213
  return document.addEventListener("keydown", e), () => document.removeEventListener("keydown", e);
201
- }, [B, R]);
202
- let { data: kn, previousData: An, loading: q, error: jn, refetch: J } = re({
214
+ }, [R, I]);
215
+ let { data: Fn, previousData: In, loading: q, error: Ln, refetch: J } = re({
203
216
  variables: {
204
217
  filter: {
205
- status: S === "all" ? void 0 : S,
206
- type: C === "all" ? void 0 : C,
207
- vibeId: w !== "all" && w !== "none" ? w : void 0,
208
- agentId: T === "all" ? void 0 : T
218
+ status: b === "all" ? void 0 : b,
219
+ type: x === "all" ? void 0 : x,
220
+ vibeId: S !== "all" && S !== "none" ? S : void 0,
221
+ agentId: C === "all" ? void 0 : C
209
222
  },
210
223
  pagination: { limit: 50 }
211
224
  },
212
- fetchPolicy: S === "all" && C === "all" && w === "all" && T === "all" ? "cache-first" : "cache-and-network"
213
- }), Mn = kn ?? An, { agents: Nn, vibes: Y } = ve(), [Pn, Fn] = me({
225
+ fetchPolicy: b === "all" && x === "all" && S === "all" && C === "all" ? "cache-first" : "cache-and-network"
226
+ }), Rn = Fn ?? In, { agents: zn, vibes: Y } = ve(), [Bn, Vn] = me({
214
227
  fetchPolicy: "network-only",
215
228
  notifyOnNetworkStatusChange: !0
216
- }), { data: In } = pe(), Ln = m(() => {
217
- let e = /* @__PURE__ */ new Map(), t = In?.vibecontrolsAgentHealthProbeStream ?? Fn.data?.vibecontrolsAgentHealthProbes ?? [];
229
+ }), { data: Hn } = pe(), Un = f(() => {
230
+ let e = /* @__PURE__ */ new Map(), t = Hn?.vibecontrolsAgentHealthProbeStream ?? Vn.data?.vibecontrolsAgentHealthProbes ?? [];
218
231
  for (let n of t) e.set(n.agentId, {
219
232
  healthy: n.healthy,
220
233
  error: n.errorMessage ?? null
221
234
  });
222
235
  return e;
223
- }, [Fn.data, In]), Rn = m(() => [
236
+ }, [Vn.data, Hn]), Wn = f(() => [
224
237
  {
225
238
  value: "all",
226
- label: b("sessions.filterVibeAll", "All Vibes")
239
+ label: v("sessions.filterVibeAll", "All Vibes")
227
240
  },
228
241
  {
229
242
  value: "none",
230
- label: b("sessions.filterVibeNone", "No Vibe")
243
+ label: v("sessions.filterVibeNone", "No Vibe")
231
244
  },
232
245
  ...Y.map((e) => ({
233
246
  value: e.id,
234
247
  label: e.name
235
248
  }))
236
- ], [Y, b]), zn = m(() => [{
249
+ ], [Y, v]), Gn = f(() => [{
237
250
  value: "all",
238
- label: b("sessions.filterAgentAll", "All Agents")
239
- }, ...Nn.map((e) => ({
251
+ label: v("sessions.filterAgentAll", "All Agents")
252
+ }, ...zn.map((e) => ({
240
253
  value: e.id,
241
- label: `${e.name} ${e.isActive ? "" : `(${b("sessions.offline", "Offline")})`}`
242
- }))], [Nn, b]), Bn = m(() => [{
254
+ label: `${e.name} ${e.isActive ? "" : `(${v("sessions.offline", "Offline")})`}`
255
+ }))], [zn, v]), Kn = f(() => [{
243
256
  value: "",
244
- label: b("sessions.noVibe", "No vibe")
257
+ label: v("sessions.noVibe", "No vibe")
245
258
  }, ...Y.map((e) => ({
246
259
  value: e.id,
247
260
  label: e.name
248
- }))], [Y, b]), Vn = m(() => [{
261
+ }))], [Y, v]), qn = f(() => [{
249
262
  value: "",
250
- label: b("sessions.selectAgent", "Select an agent")
251
- }, ...Nn.map((e) => ({
263
+ label: v("sessions.selectAgent", "Select an agent")
264
+ }, ...zn.map((e) => ({
252
265
  value: e.id,
253
- label: `${e.name} ${e.isActive ? `(${b("sessions.active", "Active")})` : `(${b("sessions.offline", "Offline")})`}`
254
- }))], [Nn, b]), Hn = m(() => [
266
+ label: `${e.name} ${e.isActive ? `(${v("sessions.active", "Active")})` : `(${v("sessions.offline", "Offline")})`}`
267
+ }))], [zn, v]), Jn = f(() => [
255
268
  {
256
269
  value: "TMUX",
257
- label: b("sessions.typeTmuxLower", "tmux")
270
+ label: v("sessions.typeTmuxLower", "tmux")
258
271
  },
259
272
  {
260
273
  value: "WEZTERM",
261
- label: b("sessions.typeWezTerm", "WezTerm")
274
+ label: v("sessions.typeWezTerm", "WezTerm")
262
275
  },
263
276
  {
264
277
  value: "ZELLIJ",
265
- label: b("sessions.typeZellij", "Zellij")
278
+ label: v("sessions.typeZellij", "Zellij")
266
279
  },
267
280
  {
268
281
  value: "TERMINAL",
269
- label: b("sessions.typeTerminal", "Terminal")
282
+ label: v("sessions.typeTerminal", "Terminal")
270
283
  },
271
284
  {
272
285
  value: "SSH",
273
- label: b("sessions.typeSsh", "SSH")
286
+ label: v("sessions.typeSsh", "SSH")
274
287
  },
275
288
  {
276
289
  value: "SCRIPT",
277
- label: b("sessions.typeScript", "Script")
290
+ label: v("sessions.typeScript", "Script")
278
291
  },
279
292
  {
280
293
  value: "CUSTOM",
281
- label: b("sessions.typeCustom", "Custom")
294
+ label: v("sessions.typeCustom", "Custom")
282
295
  }
283
- ], [b]), X = m(() => (Mn?.sessions?.items ?? []).map((e) => {
284
- let t = nt(e.ttydUrl || null, e.agent?.tunnelUrl || null);
296
+ ], [v]), X = f(() => (Rn?.sessions?.items ?? []).map((e) => {
297
+ let t = it(e.ttydUrl || null, e.agent?.tunnelUrl || null);
285
298
  return {
286
299
  id: e.id,
287
300
  workspaceId: e.workspaceId,
@@ -289,7 +302,7 @@ function it() {
289
302
  agentId: e.agentId || null,
290
303
  name: e.name,
291
304
  type: e.type,
292
- status: rt(e.status, e.ttydUrl || null, t, e.agent?.isActive),
305
+ status: at(e.status, e.ttydUrl || null, t, e.agent?.isActive),
293
306
  command: e.command || null,
294
307
  workingDirectory: e.workingDirectory || null,
295
308
  environmentVariables: e.environmentVariables || {},
@@ -314,20 +327,20 @@ function it() {
314
327
  isActive: e.agent.isActive
315
328
  } : void 0
316
329
  };
317
- }), [Mn?.sessions?.items]);
318
- p(() => {
319
- On.current || X.length === 0 || R.length === 0 || (On.current = !0, Promise.allSettled(R.map(async (e) => {
330
+ }), [Rn?.sessions?.items]);
331
+ d(() => {
332
+ Pn.current || X.length === 0 || I.length === 0 || (Pn.current = !0, Promise.allSettled(I.map(async (e) => {
320
333
  let t = X.find((t) => t.id === e.sessionId);
321
334
  if (t) try {
322
- let n = await G({ variables: { id: e.sessionId } }), r = t.agent?.tunnelUrl ?? null, i = nt(n.data?.startSessionTerminal?.ttydUrl ?? null, r);
323
- z((t) => t.map((t) => t.sessionId === e.sessionId ? {
335
+ let n = await G({ variables: { id: e.sessionId } }), r = t.agent?.tunnelUrl ?? null, i = it(n.data?.startSessionTerminal?.ttydUrl ?? null, r);
336
+ L((t) => t.map((t) => t.sessionId === e.sessionId ? {
324
337
  ...t,
325
338
  terminalUrl: i,
326
339
  loading: !1,
327
340
  error: null
328
341
  } : t));
329
342
  } catch (n) {
330
- console.warn("[sessions] tab restore startSessionTerminal failed", n), z((n) => n.map((n) => n.sessionId === e.sessionId && t.ttydUrl ? {
343
+ console.warn("[sessions] tab restore startSessionTerminal failed", n), L((n) => n.map((n) => n.sessionId === e.sessionId && t.ttydUrl ? {
331
344
  ...n,
332
345
  terminalUrl: t.ttydUrl,
333
346
  loading: !1
@@ -336,21 +349,21 @@ function it() {
336
349
  })));
337
350
  }, [
338
351
  X,
339
- R,
352
+ I,
340
353
  G
341
- ]), p(() => {
342
- if (!U || !L) {
343
- K.current = L;
354
+ ]), d(() => {
355
+ if (!U || !F) {
356
+ K.current = F;
344
357
  return;
345
358
  }
346
- if (K.current === null && L) {
347
- K.current = L;
359
+ if (K.current === null && F) {
360
+ K.current = F;
348
361
  return;
349
362
  }
350
- if (K.current === L) return;
351
- K.current = L;
352
- let e = X.find((e) => e.id === L);
353
- if (e) if (R.find((e) => e.sessionId === L)) V(L), H(!1);
363
+ if (K.current === F) return;
364
+ K.current = F;
365
+ let e = X.find((e) => e.id === F);
366
+ if (e) if (I.find((e) => e.sessionId === F)) z(F), H(!1);
354
367
  else {
355
368
  let t = e.ttydUrl || null, n = {
356
369
  sessionId: e.id,
@@ -359,17 +372,17 @@ function it() {
359
372
  loading: !t,
360
373
  error: null
361
374
  };
362
- z((e) => [...e, n]), V(L), H(!1), t || G({ variables: { id: e.id } }).then((t) => {
375
+ L((e) => [...e, n]), z(F), H(!1), t || G({ variables: { id: e.id } }).then((t) => {
363
376
  let n = t.data?.startSessionTerminal?.ttydUrl || null;
364
- z((t) => t.map((t) => t.sessionId === e.id ? {
377
+ L((t) => t.map((t) => t.sessionId === e.id ? {
365
378
  ...t,
366
379
  terminalUrl: n,
367
380
  loading: !1,
368
- error: n ? null : b("sessions.terminalStartedNoUrl", "Terminal started but no URL was returned. Try restarting.")
381
+ error: n ? null : v("sessions.terminalStartedNoUrl", "Terminal started but no URL was returned. Try restarting.")
369
382
  } : t));
370
383
  }).catch((t) => {
371
- let n = t instanceof Error ? t.message : b("sessions.failedStartTerminal", "Failed to start terminal");
372
- z((t) => t.map((t) => t.sessionId === e.id ? {
384
+ let n = t instanceof Error ? t.message : v("sessions.failedStartTerminal", "Failed to start terminal");
385
+ L((t) => t.map((t) => t.sessionId === e.id ? {
373
386
  ...t,
374
387
  loading: !1,
375
388
  error: n
@@ -377,132 +390,132 @@ function it() {
377
390
  });
378
391
  }
379
392
  }, [
380
- L,
393
+ F,
381
394
  X,
382
- R,
395
+ I,
383
396
  U,
384
397
  G
385
398
  ]);
386
- let Z = m(() => X.filter((e) => {
387
- if (x) {
388
- let t = x.toLowerCase();
399
+ let Z = f(() => X.filter((e) => {
400
+ if (y) {
401
+ let t = y.toLowerCase();
389
402
  if (!(e.name.toLowerCase().includes(t) || e.command?.toLowerCase().includes(t) || e.workingDirectory?.toLowerCase().includes(t))) return !1;
390
403
  }
391
- return !(w === "none" && e.vibeId);
404
+ return !(S === "none" && e.vibeId);
392
405
  }), [
393
406
  X,
394
- x,
395
- w
396
- ]), Un = f((e) => {
397
- P((t) => {
407
+ y,
408
+ S
409
+ ]), Yn = u((e) => {
410
+ M((t) => {
398
411
  let n = new Set(t);
399
412
  return n.has(e) ? n.delete(e) : n.add(e), n;
400
413
  });
401
- }, []), Wn = f(() => {
402
- P(new Set(Z.map((e) => e.id)));
403
- }, [Z]), Gn = f(() => {
404
- P(/* @__PURE__ */ new Set());
405
- }, []), Kn = Z.length > 0 && N.size === Z.length, qn = N.size > 0, Jn = f(async () => {
406
- if (N.size !== 0) {
407
- F(!0);
414
+ }, []), Xn = u(() => {
415
+ M(new Set(Z.map((e) => e.id)));
416
+ }, [Z]), Zn = u(() => {
417
+ M(/* @__PURE__ */ new Set());
418
+ }, []), Qn = Z.length > 0 && j.size === Z.length, $n = j.size > 0, er = u(async () => {
419
+ if (j.size !== 0) {
420
+ N(!0);
408
421
  try {
409
- let e = (await wn({ variables: { ids: Array.from(N) } })).data?.bulkStopSessions;
410
- M(`${b("sessions.stopped", "Stopped")} ${e?.succeeded ?? 0} ${b("nav.sessions", "sessions")}${e?.failed ? `, ${e.failed} ${b("sessions.failed", "failed")}` : ""}`), P(/* @__PURE__ */ new Set()), setTimeout(() => M(null), 3e3);
422
+ let e = (await An({ variables: { ids: Array.from(j) } })).data?.bulkStopSessions;
423
+ A(`${v("sessions.stopped", "Stopped")} ${e?.succeeded ?? 0} ${v("nav.sessions", "sessions")}${e?.failed ? `, ${e.failed} ${v("sessions.failed", "failed")}` : ""}`), M(/* @__PURE__ */ new Set()), setTimeout(() => A(null), 3e3);
411
424
  } catch (e) {
412
- M(`${b("sessions.errorPrefix", "Error")}: ${e instanceof Error ? e.message : b("sessions.failedStop", "Failed to stop sessions")}`), setTimeout(() => M(null), 5e3);
425
+ A(`${v("sessions.errorPrefix", "Error")}: ${e instanceof Error ? e.message : v("sessions.failedStop", "Failed to stop sessions")}`), setTimeout(() => A(null), 5e3);
413
426
  } finally {
414
- F(!1);
427
+ N(!1);
415
428
  }
416
429
  }
417
430
  }, [
418
- N,
419
- wn,
420
- b
421
- ]), Yn = f(async () => {
422
- if (N.size !== 0) {
423
- F(!0);
431
+ j,
432
+ An,
433
+ v
434
+ ]), tr = u(async () => {
435
+ if (j.size !== 0) {
436
+ N(!0);
424
437
  try {
425
- let e = (await Tn({ variables: { ids: Array.from(N) } })).data?.bulkRestartSessions;
426
- M(`${b("sessions.restarted", "Restarted")} ${e?.succeeded ?? 0} ${b("nav.sessions", "sessions")}${e?.failed ? `, ${e.failed} ${b("sessions.failed", "failed")}` : ""}`), P(/* @__PURE__ */ new Set()), setTimeout(() => M(null), 3e3);
438
+ let e = (await jn({ variables: { ids: Array.from(j) } })).data?.bulkRestartSessions;
439
+ A(`${v("sessions.restarted", "Restarted")} ${e?.succeeded ?? 0} ${v("nav.sessions", "sessions")}${e?.failed ? `, ${e.failed} ${v("sessions.failed", "failed")}` : ""}`), M(/* @__PURE__ */ new Set()), setTimeout(() => A(null), 3e3);
427
440
  } catch (e) {
428
- M(`${b("sessions.errorPrefix", "Error")}: ${e instanceof Error ? e.message : b("sessions.failedRestart", "Failed to restart sessions")}`), setTimeout(() => M(null), 5e3);
441
+ A(`${v("sessions.errorPrefix", "Error")}: ${e instanceof Error ? e.message : v("sessions.failedRestart", "Failed to restart sessions")}`), setTimeout(() => A(null), 5e3);
429
442
  } finally {
430
- F(!1);
443
+ N(!1);
431
444
  }
432
445
  }
433
446
  }, [
434
- N,
435
- Tn,
436
- b
437
- ]), Xn = f(async () => {
438
- if (N.size !== 0 && confirm(`${b("sessions.confirmRemovePrefix", "Are you sure you want to remove")} ${N.size} ${b("nav.sessions", "session(s)")}? ${b("sessions.confirmRemoveSuffix", "This cannot be undone.")}`)) {
439
- F(!0);
447
+ j,
448
+ jn,
449
+ v
450
+ ]), nr = u(async () => {
451
+ if (j.size !== 0 && confirm(`${v("sessions.confirmRemovePrefix", "Are you sure you want to remove")} ${j.size} ${v("nav.sessions", "session(s)")}? ${v("sessions.confirmRemoveSuffix", "This cannot be undone.")}`)) {
452
+ N(!0);
440
453
  try {
441
- let e = (await En({ variables: { ids: Array.from(N) } })).data?.bulkTerminateSessions;
442
- M(`${b("sessions.removed", "Removed")} ${e?.succeeded ?? 0} ${b("nav.sessions", "sessions")}${e?.failed ? `, ${e.failed} ${b("sessions.failed", "failed")}` : ""}`), P(/* @__PURE__ */ new Set()), setTimeout(() => M(null), 3e3);
454
+ let e = (await Mn({ variables: { ids: Array.from(j) } })).data?.bulkTerminateSessions;
455
+ A(`${v("sessions.removed", "Removed")} ${e?.succeeded ?? 0} ${v("nav.sessions", "sessions")}${e?.failed ? `, ${e.failed} ${v("sessions.failed", "failed")}` : ""}`), M(/* @__PURE__ */ new Set()), setTimeout(() => A(null), 3e3);
443
456
  } catch (e) {
444
- M(`${b("sessions.errorPrefix", "Error")}: ${e instanceof Error ? e.message : b("sessions.failedRemove", "Failed to remove sessions")}`), setTimeout(() => M(null), 5e3);
457
+ A(`${v("sessions.errorPrefix", "Error")}: ${e instanceof Error ? e.message : v("sessions.failedRemove", "Failed to remove sessions")}`), setTimeout(() => A(null), 5e3);
445
458
  } finally {
446
- F(!1);
459
+ N(!1);
447
460
  }
448
461
  }
449
462
  }, [
450
- N,
451
- En,
452
- b
453
- ]), Zn = f(async (e = "CSV") => {
454
- kt(!0);
463
+ j,
464
+ Mn,
465
+ v
466
+ ]), rr = u(async (e = "CSV") => {
467
+ jt(!0);
455
468
  try {
456
- let t = (await Dn({ variables: { input: {
469
+ let t = (await Nn({ variables: { input: {
457
470
  filter: {
458
- status: S === "all" ? void 0 : S,
459
- type: C === "all" ? void 0 : C,
460
- vibeId: w !== "all" && w !== "none" ? w : void 0,
461
- agentId: T === "all" ? void 0 : T
471
+ status: b === "all" ? void 0 : b,
472
+ type: x === "all" ? void 0 : x,
473
+ vibeId: S !== "all" && S !== "none" ? S : void 0,
474
+ agentId: C === "all" ? void 0 : C
462
475
  },
463
476
  format: e
464
477
  } } })).data?.exportSessions;
465
478
  if (!t) return;
466
479
  let n = e === "CSV" ? "text/csv" : "application/json", r = new Blob([t.data], { type: n }), i = URL.createObjectURL(r), a = document.createElement("a");
467
- a.href = i, a.download = `sessions-export-${(/* @__PURE__ */ new Date()).toISOString().slice(0, 10)}.${e.toLowerCase()}`, a.click(), URL.revokeObjectURL(i), M(b("sessions.exportSuccess", "Exported {{count}} sessions as {{format}}", {
480
+ a.href = i, a.download = `sessions-export-${(/* @__PURE__ */ new Date()).toISOString().slice(0, 10)}.${e.toLowerCase()}`, a.click(), URL.revokeObjectURL(i), A(v("sessions.exportSuccess", "Exported {{count}} sessions as {{format}}", {
468
481
  count: t.count,
469
482
  format: e
470
- })), setTimeout(() => M(null), 3e3);
483
+ })), setTimeout(() => A(null), 3e3);
471
484
  } catch (e) {
472
- M(`${b("sessions.errorPrefix", "Error")}: ${e instanceof Error ? e.message : b("sessions.failedExport", "Failed to export sessions")}`), setTimeout(() => M(null), 5e3);
485
+ A(`${v("sessions.errorPrefix", "Error")}: ${e instanceof Error ? e.message : v("sessions.failedExport", "Failed to export sessions")}`), setTimeout(() => A(null), 5e3);
473
486
  } finally {
474
- kt(!1);
487
+ jt(!1);
475
488
  }
476
489
  }, [
477
- Dn,
490
+ Nn,
491
+ b,
492
+ x,
478
493
  S,
479
494
  C,
480
- w,
481
- T,
482
- b
483
- ]), Qn = (e) => {
484
- st(`/sessions/${e.id}`);
485
- }, $n = () => {
486
- A(null), O(!0);
487
- }, er = async () => {
488
- let e = At.current?.value?.trim(), t = Pt, i = It, a = I, ee = jt.current?.value?.trim(), te = Mt.current?.checked ?? !1;
495
+ v
496
+ ]), ir = (e) => {
497
+ lt(`/sessions/${e.id}`);
498
+ }, ar = () => {
499
+ O(null), E(!0);
500
+ }, or = async () => {
501
+ let e = Mt.current?.value?.trim(), t = It, i = Rt, a = P, ee = Nt.current?.value?.trim(), te = Pt.current?.checked ?? !1;
489
502
  if (!e) {
490
- A(b("sessions.nameRequired", "Name is required"));
503
+ O(v("sessions.nameRequired", "Name is required"));
491
504
  return;
492
505
  }
493
506
  let o = Y.find((e) => e.id === t)?.agents ?? [], s = null;
494
507
  if (i && (!t || o.some((e) => e.id === i)) ? s = i : o.length === 1 && (s = o[0]?.id ?? null), !s) {
495
- A(t && o.length === 0 ? b("sessions.noAgentAttached", "This vibe has no agents attached. Attach one from the Vibe → Agents tab before creating sessions.") : t && o.length > 1 ? b("sessions.pickAgentFromVibe", "This vibe has multiple agents attached. Pick one before creating the session.") : b("sessions.agentRequired", "Please select an agent for this session."));
508
+ O(t && o.length === 0 ? v("sessions.noAgentAttached", "This vibe has no agents attached. Attach one from the Vibe → Agents tab before creating sessions.") : t && o.length > 1 ? v("sessions.pickAgentFromVibe", "This vibe has multiple agents attached. Pick one before creating the session.") : v("sessions.agentRequired", "Please select an agent for this session."));
496
509
  return;
497
510
  }
498
- let c = Ln.get(s);
511
+ let c = Un.get(s);
499
512
  if (c && !c.healthy) {
500
- A(b("sessions.agentNotHealthy", "The selected agent isn’t fully reachable right now. Please wait for the agent badge to turn green and retry.") + (c.error ? ` (${c.error})` : ""));
513
+ O(v("sessions.agentNotHealthy", "The selected agent isn’t fully reachable right now. Please wait for the agent badge to turn green and retry.") + (c.error ? ` (${c.error})` : ""));
501
514
  return;
502
515
  }
503
- Et(!0), A(null);
516
+ Ot(!0), O(null);
504
517
  try {
505
- let n = Nt.current?.value?.trim() || void 0, r = await en({ variables: { input: {
518
+ let n = Ft.current?.value?.trim() || void 0, r = await sn({ variables: { input: {
506
519
  name: e,
507
520
  type: a || "TMUX",
508
521
  command: ee || void 0,
@@ -511,7 +524,7 @@ function it() {
511
524
  autoStart: te,
512
525
  externalSessionName: n
513
526
  } } }), i = r.data?.createSession?.id;
514
- O(!1), M(b("sessions.createdSuccess", "Session created successfully")), i && await nn(i), setTimeout(() => M(null), 3e3), E === "terminal" && r.data?.createSession && Q({
527
+ E(!1), A(v("sessions.createdSuccess", "Session created successfully")), i && await ln(i), setTimeout(() => A(null), 3e3), w === "terminal" && r.data?.createSession && Q({
515
528
  id: r.data.createSession.id,
516
529
  workspaceId: r.data.createSession.workspaceId,
517
530
  vibeId: r.data.createSession.vibeId || null,
@@ -535,16 +548,16 @@ function it() {
535
548
  });
536
549
  } catch (e) {
537
550
  if (n(e)) {
538
- O(!1), r(), k(!0);
551
+ E(!1), r(), D(!0);
539
552
  return;
540
553
  }
541
- A(e instanceof Error ? e.message : b("sessions.failedCreate", "Failed to create session"));
554
+ O(e instanceof Error ? e.message : v("sessions.failedCreate", "Failed to create session"));
542
555
  } finally {
543
- Et(!1);
556
+ Ot(!1);
544
557
  }
545
- }, tr = async (e) => {
558
+ }, sr = async (e) => {
546
559
  try {
547
- await gn({ variables: { id: e.id } }), at?.({
560
+ await Sn({ variables: { id: e.id } }), st?.({
548
561
  id: e.id,
549
562
  name: e.name,
550
563
  type: e.type,
@@ -552,41 +565,41 @@ function it() {
552
565
  });
553
566
  } catch (e) {
554
567
  if (n(e)) {
555
- r(), k(!0);
568
+ r(), D(!0);
556
569
  return;
557
570
  }
558
571
  console.error("Failed to start session:", e);
559
572
  }
560
- }, nr = async (e) => {
573
+ }, cr = async (e) => {
561
574
  try {
562
- await _n({ variables: { id: e.id } });
575
+ await Cn({ variables: { id: e.id } });
563
576
  } catch (e) {
564
577
  console.error("Failed to stop session:", e);
565
578
  }
566
- }, rr = async (e) => {
579
+ }, lr = async (e) => {
567
580
  try {
568
- await vn({ variables: { id: e.id } });
581
+ await wn({ variables: { id: e.id } });
569
582
  } catch (e) {
570
583
  if (n(e)) {
571
- r(), k(!0);
584
+ r(), D(!0);
572
585
  return;
573
586
  }
574
587
  console.error("Failed to restart session:", e);
575
588
  }
576
- }, ir = async (e) => {
589
+ }, ur = async (e) => {
577
590
  try {
578
- await Sn({ variables: { id: e.id } });
591
+ await On({ variables: { id: e.id } });
579
592
  } catch (e) {
580
593
  console.error("Failed to terminate session:", e);
581
594
  }
582
- }, ar = f((e) => e.ttydUrl || null, []), or = f((e) => {
583
- Yt(e);
584
- }, []), Q = f(async (e) => {
585
- if (R.find((t) => t.sessionId === e.id)?.terminalUrl) {
586
- V(e.id), H(!1);
595
+ }, dr = u((e) => e.ttydUrl || null, []), fr = u((e) => {
596
+ tn(e);
597
+ }, []), Q = u(async (e) => {
598
+ if (I.find((t) => t.sessionId === e.id)?.terminalUrl) {
599
+ z(e.id), H(!1);
587
600
  return;
588
601
  }
589
- let t = ar(e);
602
+ let t = dr(e);
590
603
  if (t) {
591
604
  let n = {
592
605
  sessionId: e.id,
@@ -595,7 +608,7 @@ function it() {
595
608
  loading: !1,
596
609
  error: null
597
610
  };
598
- z((t) => [...t.filter((t) => t.sessionId !== e.id), n]), V(e.id), H(!1);
611
+ L((t) => [...t.filter((t) => t.sessionId !== e.id), n]), z(e.id), H(!1);
599
612
  return;
600
613
  }
601
614
  let i = {
@@ -605,342 +618,525 @@ function it() {
605
618
  loading: !0,
606
619
  error: null
607
620
  };
608
- z((t) => [...t.filter((t) => t.sessionId !== e.id), i]), V(e.id), H(!1);
621
+ L((t) => [...t.filter((t) => t.sessionId !== e.id), i]), z(e.id), H(!1);
609
622
  try {
610
623
  let t = await G({ variables: { id: e.id } });
611
624
  if (t.error && n(t.error)) {
612
- let t = R.filter((t) => t.sessionId !== e.id);
613
- z(t), B === e.id && V(t.length > 0 ? t[t.length - 1].sessionId : null), r(), k(!0);
625
+ let t = I.filter((t) => t.sessionId !== e.id);
626
+ L(t), R === e.id && z(t.length > 0 ? t[t.length - 1].sessionId : null), r(), D(!0);
614
627
  return;
615
628
  }
616
- let i = nt(t.data?.startSessionTerminal?.ttydUrl || null, X.find((t) => t.id === e.id)?.agent?.tunnelUrl ?? null);
617
- z((t) => t.map((t) => t.sessionId === e.id ? {
629
+ let i = it(t.data?.startSessionTerminal?.ttydUrl || null, X.find((t) => t.id === e.id)?.agent?.tunnelUrl ?? null);
630
+ L((t) => t.map((t) => t.sessionId === e.id ? {
618
631
  ...t,
619
632
  terminalUrl: i,
620
633
  loading: !1,
621
- error: i ? null : b("sessions.terminalStartedNoTunnelUrl", "Terminal started but no tunnel URL was returned. Try restarting.")
634
+ error: i ? null : v("sessions.terminalStartedNoTunnelUrl", "Terminal started but no tunnel URL was returned. Try restarting.")
622
635
  } : t));
623
636
  } catch (t) {
624
637
  if (n(t)) {
625
- let t = R.filter((t) => t.sessionId !== e.id);
626
- z(t), B === e.id && V(t.length > 0 ? t[t.length - 1].sessionId : null), r(), k(!0);
638
+ let t = I.filter((t) => t.sessionId !== e.id);
639
+ L(t), R === e.id && z(t.length > 0 ? t[t.length - 1].sessionId : null), r(), D(!0);
627
640
  return;
628
641
  }
629
- let i = t instanceof Error ? t.message : b("sessions.failedStartTerminal", "Failed to start terminal");
630
- z((t) => t.map((t) => t.sessionId === e.id ? {
642
+ let i = t instanceof Error ? t.message : v("sessions.failedStartTerminal", "Failed to start terminal");
643
+ L((t) => t.map((t) => t.sessionId === e.id ? {
631
644
  ...t,
632
645
  loading: !1,
633
646
  error: i
634
647
  } : t));
635
648
  }
636
649
  }, [
637
- B,
638
650
  R,
639
- ar,
651
+ I,
652
+ dr,
640
653
  G
641
654
  ]);
642
- p(() => {
643
- if (!U || !B || R.some((e) => e.sessionId === B)) return;
644
- let e = X.find((e) => e.id === B);
655
+ d(() => {
656
+ if (!U || !R || I.some((e) => e.sessionId === R)) return;
657
+ let e = X.find((e) => e.id === R);
645
658
  e && Q(e);
646
659
  }, [
647
- B,
660
+ R,
648
661
  Q,
649
662
  X,
650
- R,
663
+ I,
651
664
  U
652
665
  ]);
653
- let sr = f((e) => {
654
- z((t) => t.filter((t) => t.sessionId !== e)), B === e && V(() => {
655
- let t = R.filter((t) => t.sessionId !== e);
666
+ let pr = u((e) => {
667
+ L((t) => t.filter((t) => t.sessionId !== e)), R === e && z(() => {
668
+ let t = I.filter((t) => t.sessionId !== e);
656
669
  return t.length > 0 ? t[t.length - 1].sessionId : null;
657
670
  });
658
- }, [B, R]), cr = f((e) => {
659
- let t = R.find((t) => t.sessionId === e);
671
+ }, [R, I]), mr = u((e) => {
672
+ let t = I.find((t) => t.sessionId === e);
660
673
  t?.terminalUrl && window.open(t.terminalUrl, "_blank");
661
- }, [R]), lr = f(async (e, t) => {
674
+ }, [I]), hr = u(async (e, t) => {
662
675
  try {
663
- await xn({ variables: {
676
+ await Dn({ variables: {
664
677
  id: e,
665
678
  input: { name: t }
666
- } }), z((n) => n.map((n) => n.sessionId === e ? {
679
+ } }), L((n) => n.map((n) => n.sessionId === e ? {
667
680
  ...n,
668
681
  name: t
669
682
  } : n));
670
683
  } catch (e) {
671
684
  console.error("Failed to rename session:", e);
672
685
  }
673
- }, [xn]), ur = f(async (e) => {
686
+ }, [Dn]), gr = u(async (e) => {
674
687
  try {
675
- await yn({ variables: { id: e } }), z((t) => t.map((t) => t.sessionId === e ? {
688
+ await Tn({ variables: { id: e } }), L((t) => t.map((t) => t.sessionId === e ? {
676
689
  ...t,
677
690
  terminalUrl: null,
678
- error: b("sessions.terminalStopped", "Terminal stopped")
691
+ error: v("sessions.terminalStopped", "Terminal stopped")
679
692
  } : t));
680
693
  } catch (e) {
681
694
  console.error("Failed to stop terminal:", e);
682
695
  }
683
- }, [yn]), dr = f(async (e) => {
684
- let t = R.find((t) => t.sessionId === e) || null;
696
+ }, [Tn]), _r = u(async (e) => {
697
+ let t = I.find((t) => t.sessionId === e) || null;
685
698
  try {
686
- z((t) => t.map((t) => t.sessionId === e ? {
699
+ L((t) => t.map((t) => t.sessionId === e ? {
687
700
  ...t,
688
701
  loading: !0,
689
702
  error: null,
690
703
  terminalUrl: null
691
704
  } : t));
692
- let i = await bn({ variables: { id: e } });
705
+ let i = await En({ variables: { id: e } });
693
706
  if (i.error && n(i.error)) {
694
- z((n) => n.map((n) => n.sessionId === e ? {
707
+ L((n) => n.map((n) => n.sessionId === e ? {
695
708
  ...n,
696
709
  loading: !1,
697
710
  error: null,
698
711
  terminalUrl: t?.terminalUrl ?? n.terminalUrl
699
- } : n)), r(), k(!0);
712
+ } : n)), r(), D(!0);
700
713
  return;
701
714
  }
702
715
  let a = i.data?.restartSessionTerminal?.ttydUrl || null;
703
- z((t) => t.map((t) => t.sessionId === e ? {
716
+ L((t) => t.map((t) => t.sessionId === e ? {
704
717
  ...t,
705
718
  terminalUrl: a,
706
719
  loading: !1,
707
- error: a ? null : b("sessions.terminalRestartedNoUrl", "Terminal restarted but no URL returned.")
720
+ error: a ? null : v("sessions.terminalRestartedNoUrl", "Terminal restarted but no URL returned.")
708
721
  } : t));
709
722
  } catch (i) {
710
723
  if (n(i)) {
711
- z((n) => n.map((n) => n.sessionId === e ? {
724
+ L((n) => n.map((n) => n.sessionId === e ? {
712
725
  ...n,
713
726
  loading: !1,
714
727
  error: null,
715
728
  terminalUrl: t?.terminalUrl ?? n.terminalUrl
716
- } : n)), r(), k(!0);
729
+ } : n)), r(), D(!0);
717
730
  return;
718
731
  }
719
- let a = i instanceof Error ? i.message : b("sessions.failedRestartTerminal", "Failed to restart terminal");
720
- z((t) => t.map((t) => t.sessionId === e ? {
732
+ let a = i instanceof Error ? i.message : v("sessions.failedRestartTerminal", "Failed to restart terminal");
733
+ L((t) => t.map((t) => t.sessionId === e ? {
721
734
  ...t,
722
735
  loading: !1,
723
736
  error: a
724
737
  } : t));
725
738
  }
726
- }, [bn, R]), fr = f(() => {
727
- Zt((e) => !e);
739
+ }, [En, I]), vr = u(() => {
740
+ rn((e) => !e);
728
741
  }, []), $ = {
729
742
  total: X.length,
730
743
  running: X.filter((e) => e.status === "RUNNING").length,
731
744
  stopped: X.filter((e) => e.status === "STOPPED").length
732
745
  };
733
- if (lt) return /* @__PURE__ */ _(y, {
746
+ if (dt) return /* @__PURE__ */ h(_, {
734
747
  className: "space-y-6 p-4 sm:p-6 bg-bg-surface min-h-screen",
735
- children: /* @__PURE__ */ _(be, { message: b("sessions.loadingPermissions", "Loading permissions...") })
748
+ children: /* @__PURE__ */ h(be, { message: v("sessions.loadingPermissions", "Loading permissions...") })
736
749
  });
737
- if (ut && ut.permissionStrings?.length > 0 && !ht) return /* @__PURE__ */ _(y, {
750
+ if (ft && ft.permissionStrings?.length > 0 && !_t) return /* @__PURE__ */ h(_, {
738
751
  className: "space-y-6 p-4 sm:p-6 bg-bg-surface min-h-screen",
739
- children: /* @__PURE__ */ _($e, {
740
- title: b("common.accessDeniedTitle", "Access Denied"),
741
- description: b("sessions.accessDeniedDescription", "You don't have permission to view sessions."),
742
- details: b("sessions.requiredPermission", "Required permission: session:list")
752
+ children: /* @__PURE__ */ h(tt, {
753
+ title: v("common.accessDeniedTitle", "Access Denied"),
754
+ description: v("sessions.accessDeniedDescription", "You don't have permission to view sessions."),
755
+ details: v("sessions.requiredPermission", "Required permission: session:list")
743
756
  })
744
757
  });
745
- if (q && !An && X.length === 0) return /* @__PURE__ */ _(y, {
758
+ if (q && !In && X.length === 0) return /* @__PURE__ */ h(_, {
746
759
  className: "space-y-6 p-4 sm:p-6 bg-bg-surface min-h-screen",
747
- children: /* @__PURE__ */ _(be, { message: b("sessions.loading", "Loading sessions...") })
760
+ children: /* @__PURE__ */ h(be, { message: v("sessions.loading", "Loading sessions...") })
748
761
  });
749
- if (jn && X.length === 0) return /* @__PURE__ */ _(y, {
762
+ if (Ln && X.length === 0) return /* @__PURE__ */ h(_, {
750
763
  className: "space-y-6 p-4 sm:p-6 bg-bg-surface min-h-screen",
751
- children: /* @__PURE__ */ _(xe, {
752
- title: b("sessions.failedLoad", "Failed to load sessions"),
753
- message: jn.message,
764
+ children: /* @__PURE__ */ h(xe, {
765
+ title: v("sessions.failedLoad", "Failed to load sessions"),
766
+ message: Ln.message,
754
767
  onRetry: () => J()
755
768
  })
756
769
  });
757
- let pr = () => !qn || E === "terminal" ? null : /* @__PURE__ */ v("div", {
770
+ let yr = () => !$n || w === "terminal" ? null : /* @__PURE__ */ g("div", {
758
771
  className: "flex flex-col sm:flex-row items-start sm:items-center gap-3 px-4 py-2 bg-action-primary-bg/10 border border-action-primary-bg/20 rounded-lg",
759
- children: [/* @__PURE__ */ _("span", {
772
+ children: [/* @__PURE__ */ h("span", {
760
773
  className: "text-sm font-medium text-text-primary",
761
- children: b(N.size === 1 ? "sessions.selectionCountSingle" : "sessions.selectionCountPlural", N.size === 1 ? "{{count}} session selected" : "{{count}} sessions selected", { count: N.size })
762
- }), /* @__PURE__ */ v("div", {
774
+ children: v(j.size === 1 ? "sessions.selectionCountSingle" : "sessions.selectionCountPlural", j.size === 1 ? "{{count}} session selected" : "{{count}} sessions selected", { count: j.size })
775
+ }), /* @__PURE__ */ g("div", {
763
776
  className: "flex items-center gap-1.5 sm:ml-auto flex-wrap",
764
777
  children: [
765
- /* @__PURE__ */ v("button", {
778
+ /* @__PURE__ */ g("button", {
766
779
  type: "button",
767
- onClick: Jn,
768
- disabled: Dt,
780
+ onClick: er,
781
+ disabled: kt,
769
782
  className: "flex items-center gap-1.5 px-3 py-1.5 text-xs font-medium text-text-primary bg-bg-surface border border-border-default rounded-md hover:bg-bg-sunken transition-colors disabled:opacity-50",
770
783
  children: [
771
- /* @__PURE__ */ _(Ue, { className: "size-3" }),
784
+ /* @__PURE__ */ h(Ge, { className: "size-3" }),
772
785
  " ",
773
- b("sessions.stop", "Stop")
786
+ v("sessions.stop", "Stop")
774
787
  ]
775
788
  }),
776
- /* @__PURE__ */ v("button", {
789
+ /* @__PURE__ */ g("button", {
777
790
  type: "button",
778
- onClick: Yn,
779
- disabled: Dt,
791
+ onClick: tr,
792
+ disabled: kt,
780
793
  className: "flex items-center gap-1.5 px-3 py-1.5 text-xs font-medium text-text-primary bg-bg-surface border border-border-default rounded-md hover:bg-bg-sunken transition-colors disabled:opacity-50",
781
794
  children: [
782
- /* @__PURE__ */ _(He, { className: "size-3" }),
795
+ /* @__PURE__ */ h(We, { className: "size-3" }),
783
796
  " ",
784
- b("sessions.restart", "Restart")
797
+ v("sessions.restart", "Restart")
785
798
  ]
786
799
  }),
787
- /* @__PURE__ */ v("button", {
800
+ /* @__PURE__ */ g("button", {
788
801
  type: "button",
789
- onClick: Xn,
790
- disabled: Dt,
802
+ onClick: nr,
803
+ disabled: kt,
791
804
  className: "flex items-center gap-1.5 px-3 py-1.5 text-xs font-medium text-status-error-text bg-status-error-bg border border-status-error-text/20 rounded-md hover:bg-status-error-bg/80 transition-colors disabled:opacity-50",
792
805
  children: [
793
- /* @__PURE__ */ _(Ge, { className: "size-3" }),
806
+ /* @__PURE__ */ h(qe, { className: "size-3" }),
794
807
  " ",
795
- b("sessions.remove", "Remove")
808
+ v("sessions.remove", "Remove")
796
809
  ]
797
810
  }),
798
- /* @__PURE__ */ v("button", {
811
+ /* @__PURE__ */ g("button", {
799
812
  type: "button",
800
- onClick: Gn,
813
+ onClick: Zn,
801
814
  className: "flex items-center gap-1.5 px-3 py-1.5 text-xs text-text-secondary hover:text-text-primary transition-colors",
802
815
  children: [
803
- /* @__PURE__ */ _(Ke, { className: "size-3" }),
816
+ /* @__PURE__ */ h(Je, { className: "size-3" }),
804
817
  " ",
805
- b("sessions.deselect", "Deselect")
818
+ v("sessions.deselect", "Deselect")
806
819
  ]
807
820
  })
808
821
  ]
809
822
  })]
810
823
  });
811
- if (E === "terminal") return /* @__PURE__ */ v(y, {
824
+ if (w === "terminal") return /* @__PURE__ */ g(_, {
812
825
  className: "flex flex-col bg-bg-surface h-screen",
813
826
  children: [
814
- /* @__PURE__ */ v("div", {
827
+ /* @__PURE__ */ g("div", {
815
828
  className: "flex flex-col sm:flex-row items-start sm:items-center justify-between gap-2 px-4 py-2 border-b border-border-default bg-bg-sunken",
816
- children: [/* @__PURE__ */ v("div", {
829
+ children: [/* @__PURE__ */ g("div", {
817
830
  className: "flex flex-wrap items-center gap-3",
818
- children: [/* @__PURE__ */ _("h1", {
831
+ children: [/* @__PURE__ */ h("h1", {
819
832
  className: "text-sm font-semibold text-text-primary",
820
- children: b("nav.sessions", "Sessions")
821
- }), /* @__PURE__ */ _("span", {
833
+ children: v("nav.sessions", "Sessions")
834
+ }), /* @__PURE__ */ h("span", {
822
835
  className: "text-xs text-text-muted",
823
- children: b("sessions.runningSummary", "{{running}} running / {{total}} total", {
836
+ children: v("sessions.runningSummary", "{{running}} running / {{total}} total", {
824
837
  running: $.running,
825
838
  total: $.total
826
839
  })
827
840
  })]
828
- }), /* @__PURE__ */ v("div", {
841
+ }), /* @__PURE__ */ g("div", {
829
842
  className: "flex w-full flex-wrap items-center gap-2 sm:w-auto sm:justify-end",
830
843
  children: [
831
- /* @__PURE__ */ _("button", {
844
+ /* @__PURE__ */ h("button", {
832
845
  type: "button",
833
- onClick: () => Cn().then(() => J()),
846
+ onClick: () => kn().then(() => J()),
834
847
  className: "p-1.5 text-text-secondary hover:bg-bg-surface rounded transition-colors",
835
- title: b("sessions.checkHealth", "Check session health"),
836
- children: /* @__PURE__ */ _(Pe, { className: "size-3.5" })
848
+ title: v("sessions.checkHealth", "Check session health"),
849
+ children: /* @__PURE__ */ h(Ie, { className: "size-3.5" })
837
850
  }),
838
- /* @__PURE__ */ _("button", {
851
+ /* @__PURE__ */ h("button", {
839
852
  type: "button",
840
853
  onClick: () => {
841
- J(), Pn();
854
+ J(), Bn();
842
855
  },
843
856
  disabled: q,
844
857
  className: "p-1.5 text-text-secondary hover:bg-bg-surface rounded transition-colors disabled:opacity-50",
845
- title: b("common.refresh", "Refresh"),
846
- children: /* @__PURE__ */ _(Ve, { className: `size-3.5 ${q ? "animate-spin" : ""}` })
858
+ title: v("common.refresh", "Refresh"),
859
+ children: /* @__PURE__ */ h(Ue, { className: `size-3.5 ${q ? "animate-spin" : ""}` })
847
860
  }),
848
- /* @__PURE__ */ v("div", {
861
+ /* @__PURE__ */ g("div", {
849
862
  className: "flex items-center gap-0.5 rounded bg-bg-surface p-0.5",
850
863
  children: [
851
- /* @__PURE__ */ _("button", {
864
+ /* @__PURE__ */ h("button", {
852
865
  type: "button",
853
- onClick: () => D("terminal"),
866
+ onClick: () => T("terminal"),
854
867
  className: "p-1.5 rounded bg-bg-sunken shadow-sm",
855
- title: b("sessions.terminalViewTitle", "Terminal view"),
856
- children: /* @__PURE__ */ _(Re, { className: "size-3.5 text-text-secondary" })
868
+ title: v("sessions.terminalViewTitle", "Terminal view"),
869
+ children: /* @__PURE__ */ h(Be, { className: "size-3.5 text-text-secondary" })
857
870
  }),
858
- /* @__PURE__ */ _("button", {
871
+ /* @__PURE__ */ h("button", {
859
872
  type: "button",
860
- onClick: () => D("grid"),
873
+ onClick: () => T("grid"),
861
874
  className: "p-1.5 rounded hover:bg-bg-sunken/50",
862
- title: b("sessions.gridViewTitle", "Grid view"),
863
- children: /* @__PURE__ */ _(Ie, { className: "size-3.5 text-text-secondary" })
875
+ title: v("sessions.gridViewTitle", "Grid view"),
876
+ children: /* @__PURE__ */ h(Re, { className: "size-3.5 text-text-secondary" })
864
877
  }),
865
- /* @__PURE__ */ _("button", {
878
+ /* @__PURE__ */ h("button", {
866
879
  type: "button",
867
- onClick: () => D("list"),
880
+ onClick: () => T("list"),
868
881
  className: "p-1.5 rounded hover:bg-bg-sunken/50",
869
- title: b("sessions.listViewTitle", "List view"),
870
- children: /* @__PURE__ */ _(Le, { className: "size-3.5 text-text-secondary" })
882
+ title: v("sessions.listViewTitle", "List view"),
883
+ children: /* @__PURE__ */ h(ze, { className: "size-3.5 text-text-secondary" })
871
884
  })
872
885
  ]
873
886
  })
874
887
  ]
875
888
  })]
876
889
  }),
877
- /* @__PURE__ */ _("div", {
890
+ /* @__PURE__ */ h("div", {
878
891
  className: "px-4 pt-3",
879
- children: /* @__PURE__ */ _(Oe, {
892
+ children: /* @__PURE__ */ h(ke, {
880
893
  showConnectionStatus: !0,
881
894
  maxVisible: 3
882
895
  })
883
896
  }),
884
- /* @__PURE__ */ _(je, {
885
- tabs: R,
886
- activeTabId: B,
887
- onTabSelect: V,
888
- onTabClose: sr,
889
- onOpenExternal: cr,
897
+ /* @__PURE__ */ h(Ne, {
898
+ tabs: I,
899
+ activeTabId: R,
900
+ onTabSelect: z,
901
+ onTabClose: pr,
902
+ onOpenExternal: mr,
890
903
  collapsed: !1,
891
904
  sessions: Z,
892
905
  onOpenTerminal: Q,
893
906
  onRetryTerminal: Q,
894
- onRenameSession: lr,
895
- onStopTerminal: ur,
896
- onRestartTerminal: dr,
897
- onCreateSession: $n,
907
+ onRenameSession: hr,
908
+ onStopTerminal: gr,
909
+ onRestartTerminal: _r,
910
+ onCreateSession: ar,
898
911
  fullScreen: !0,
899
- isImmersiveFullscreen: Xt,
900
- onToggleImmersiveFullscreen: fr,
912
+ isImmersiveFullscreen: nn,
913
+ onToggleImmersiveFullscreen: vr,
901
914
  contextSwitcher: void 0
902
915
  }),
903
- j && /* @__PURE__ */ _("div", {
916
+ /* @__PURE__ */ g("div", {
917
+ className: "flex items-center justify-between gap-3 px-4 py-1.5 border-t border-border-default bg-bg-sunken text-[11px] text-text-tertiary",
918
+ children: [/* @__PURE__ */ g("div", {
919
+ className: "flex items-center gap-3",
920
+ children: [
921
+ /* @__PURE__ */ g("span", {
922
+ className: "inline-flex items-center gap-1.5",
923
+ children: [/* @__PURE__ */ h("span", {
924
+ className: "size-1.5 rounded-full bg-status-success-bg",
925
+ "aria-hidden": !0
926
+ }), v("sessions.statusOnline", "Online")]
927
+ }),
928
+ /* @__PURE__ */ g("span", { children: [
929
+ I.length,
930
+ " ",
931
+ I.length === 1 ? "tab" : "tabs"
932
+ ] }),
933
+ R && /* @__PURE__ */ h("span", {
934
+ className: "truncate max-w-[40ch]",
935
+ children: I.find((e) => e.sessionId === R)?.name
936
+ })
937
+ ]
938
+ }), /* @__PURE__ */ g("div", {
939
+ className: "hidden sm:flex items-center gap-3",
940
+ children: [/* @__PURE__ */ h("button", {
941
+ type: "button",
942
+ onClick: () => Xt(!0),
943
+ className: "hover:text-text-secondary transition-colors",
944
+ children: v("sessions.shortcutsHint", "Press ? for shortcuts")
945
+ }), /* @__PURE__ */ h("button", {
946
+ type: "button",
947
+ onClick: () => {
948
+ Qt(""), B(!0);
949
+ },
950
+ className: "hover:text-text-secondary transition-colors",
951
+ children: v("sessions.paletteHint", "Cmd+P · Command palette")
952
+ })]
953
+ })]
954
+ }),
955
+ k && /* @__PURE__ */ h("div", {
904
956
  className: "fixed bottom-4 right-4 z-50 px-4 py-3 bg-status-success-bg text-status-success-text rounded-md shadow-lg text-sm",
905
- children: j
957
+ children: k
958
+ }),
959
+ wt && xr(),
960
+ br(),
961
+ Yt && /* @__PURE__ */ h("div", {
962
+ className: "fixed inset-0 z-50 flex items-center justify-center bg-bg-overlay/80 backdrop-blur-sm p-4",
963
+ role: "dialog",
964
+ "aria-modal": "true",
965
+ "aria-labelledby": "sessions-cheatsheet-title",
966
+ onClick: () => Xt(!1),
967
+ children: /* @__PURE__ */ g("div", {
968
+ className: "bg-bg-surface border border-border-default rounded-xl shadow-2xl p-6 max-w-md w-full",
969
+ onClick: (e) => e.stopPropagation(),
970
+ children: [
971
+ /* @__PURE__ */ h("h2", {
972
+ id: "sessions-cheatsheet-title",
973
+ className: "text-lg font-semibold text-text-primary mb-4",
974
+ children: v("sessions.cheatsheet.title", "Keyboard shortcuts")
975
+ }),
976
+ /* @__PURE__ */ g("dl", {
977
+ className: "grid grid-cols-[auto_1fr] gap-x-4 gap-y-2 text-sm",
978
+ children: [
979
+ /* @__PURE__ */ h("dt", {
980
+ className: "font-mono text-text-secondary",
981
+ children: "Cmd / Ctrl + T"
982
+ }),
983
+ /* @__PURE__ */ h("dd", {
984
+ className: "text-text-primary",
985
+ children: "New session"
986
+ }),
987
+ /* @__PURE__ */ h("dt", {
988
+ className: "font-mono text-text-secondary",
989
+ children: "Cmd / Ctrl + W"
990
+ }),
991
+ /* @__PURE__ */ h("dd", {
992
+ className: "text-text-primary",
993
+ children: "Close active tab"
994
+ }),
995
+ /* @__PURE__ */ h("dt", {
996
+ className: "font-mono text-text-secondary",
997
+ children: "Cmd / Ctrl + 1–9"
998
+ }),
999
+ /* @__PURE__ */ h("dd", {
1000
+ className: "text-text-primary",
1001
+ children: "Switch to tab N"
1002
+ }),
1003
+ /* @__PURE__ */ h("dt", {
1004
+ className: "font-mono text-text-secondary",
1005
+ children: "Ctrl + Tab"
1006
+ }),
1007
+ /* @__PURE__ */ h("dd", {
1008
+ className: "text-text-primary",
1009
+ children: "Next tab"
1010
+ }),
1011
+ /* @__PURE__ */ h("dt", {
1012
+ className: "font-mono text-text-secondary",
1013
+ children: "Ctrl + Shift + Tab"
1014
+ }),
1015
+ /* @__PURE__ */ h("dd", {
1016
+ className: "text-text-primary",
1017
+ children: "Previous tab"
1018
+ }),
1019
+ /* @__PURE__ */ h("dt", {
1020
+ className: "font-mono text-text-secondary",
1021
+ children: "Cmd / Ctrl + P"
1022
+ }),
1023
+ /* @__PURE__ */ h("dd", {
1024
+ className: "text-text-primary",
1025
+ children: "Command palette"
1026
+ }),
1027
+ /* @__PURE__ */ h("dt", {
1028
+ className: "font-mono text-text-secondary",
1029
+ children: "?"
1030
+ }),
1031
+ /* @__PURE__ */ h("dd", {
1032
+ className: "text-text-primary",
1033
+ children: "This cheatsheet"
1034
+ })
1035
+ ]
1036
+ }),
1037
+ /* @__PURE__ */ h("div", {
1038
+ className: "mt-5 flex justify-end",
1039
+ children: /* @__PURE__ */ h("button", {
1040
+ type: "button",
1041
+ onClick: () => Xt(!1),
1042
+ className: "px-3 py-1.5 text-sm rounded-md bg-bg-sunken hover:bg-bg-secondary text-text-primary transition-colors",
1043
+ children: v("common.close", "Close")
1044
+ })
1045
+ })
1046
+ ]
1047
+ })
906
1048
  }),
907
- St && hr(),
908
- mr()
1049
+ Zt && /* @__PURE__ */ h("div", {
1050
+ className: "fixed inset-0 z-50 flex items-start justify-center bg-bg-overlay/80 backdrop-blur-sm p-4 pt-20",
1051
+ role: "dialog",
1052
+ "aria-modal": "true",
1053
+ "aria-labelledby": "sessions-palette-title",
1054
+ onClick: () => B(!1),
1055
+ children: /* @__PURE__ */ g("div", {
1056
+ className: "bg-bg-surface border border-border-default rounded-xl shadow-2xl w-full max-w-lg overflow-hidden",
1057
+ onClick: (e) => e.stopPropagation(),
1058
+ children: [/* @__PURE__ */ h("input", {
1059
+ autoFocus: !0,
1060
+ type: "search",
1061
+ value: V,
1062
+ onChange: (e) => Qt(e.target.value),
1063
+ onKeyDown: (e) => {
1064
+ e.key === "Escape" && B(!1);
1065
+ },
1066
+ placeholder: v("sessions.palette.placeholder", "Search sessions or type a command…"),
1067
+ "aria-label": "Command palette search",
1068
+ className: "w-full px-4 py-3 bg-bg-surface border-b border-border-default text-text-primary placeholder:text-text-muted focus:outline-none"
1069
+ }), /* @__PURE__ */ g("ul", {
1070
+ id: "sessions-palette-title",
1071
+ className: "max-h-80 overflow-y-auto divide-y divide-border-subtle",
1072
+ children: [["new"].map((e) => {
1073
+ let t = v("sessions.palette.new", "New session");
1074
+ return V && !t.toLowerCase().includes(V.toLowerCase()) ? null : /* @__PURE__ */ h("li", { children: /* @__PURE__ */ g("button", {
1075
+ type: "button",
1076
+ onClick: () => {
1077
+ B(!1), E(!0);
1078
+ },
1079
+ className: "w-full text-left px-4 py-2.5 text-sm hover:bg-bg-sunken transition-colors",
1080
+ children: [/* @__PURE__ */ h("span", {
1081
+ className: "font-medium text-text-primary",
1082
+ children: t
1083
+ }), /* @__PURE__ */ h("span", {
1084
+ className: "ml-2 text-xs text-text-muted",
1085
+ children: "Cmd+T"
1086
+ })]
1087
+ }) }, e);
1088
+ }), Z.filter((e) => !V || e.name.toLowerCase().includes(V.toLowerCase())).slice(0, 20).map((e) => /* @__PURE__ */ h("li", { children: /* @__PURE__ */ g("button", {
1089
+ type: "button",
1090
+ onClick: () => {
1091
+ B(!1), Q(e);
1092
+ },
1093
+ className: "w-full text-left px-4 py-2.5 text-sm hover:bg-bg-sunken transition-colors flex items-center justify-between",
1094
+ children: [/* @__PURE__ */ h("span", {
1095
+ className: "text-text-primary truncate",
1096
+ children: e.name
1097
+ }), /* @__PURE__ */ h("span", {
1098
+ className: "ml-2 text-xs text-text-muted",
1099
+ children: e.status
1100
+ })]
1101
+ }) }, e.id))]
1102
+ })]
1103
+ })
1104
+ })
909
1105
  ]
910
1106
  });
911
- return /* @__PURE__ */ v(y, {
1107
+ return /* @__PURE__ */ g(_, {
912
1108
  className: "flex flex-col bg-bg-surface min-h-screen",
913
1109
  children: [
914
- /* @__PURE__ */ v("div", {
1110
+ /* @__PURE__ */ g("div", {
915
1111
  className: "flex-1 overflow-y-auto space-y-6 p-4 sm:p-6",
916
1112
  children: [
917
- /* @__PURE__ */ _(ye, {
918
- title: b("nav.sessions", "Sessions"),
919
- description: b("sessions.pageDescription", "{{running}} of {{total}} sessions running", {
1113
+ /* @__PURE__ */ h(ye, {
1114
+ title: v("nav.sessions", "Sessions"),
1115
+ description: v("sessions.pageDescription", "{{running}} of {{total}} sessions running", {
920
1116
  running: $.running,
921
1117
  total: $.total
922
1118
  }),
923
- actions: /* @__PURE__ */ v("div", {
1119
+ actions: /* @__PURE__ */ g("div", {
924
1120
  className: "flex flex-col sm:flex-row items-stretch sm:items-center gap-2",
925
1121
  children: [
926
- /* @__PURE__ */ _("button", {
1122
+ /* @__PURE__ */ h("button", {
927
1123
  type: "button",
928
- onClick: () => Cn().then(() => J()),
1124
+ onClick: () => kn().then(() => J()),
929
1125
  className: "flex items-center gap-2 px-3 py-2 text-text-secondary hover:bg-bg-sunken rounded-md transition-colors",
930
- title: b("sessions.checkHealth", "Check session health"),
931
- children: /* @__PURE__ */ _(Pe, { className: "size-4" })
1126
+ title: v("sessions.checkHealth", "Check session health"),
1127
+ children: /* @__PURE__ */ h(Ie, { className: "size-4" })
932
1128
  }),
933
- /* @__PURE__ */ _("button", {
1129
+ /* @__PURE__ */ h("button", {
934
1130
  type: "button",
935
1131
  onClick: () => J(),
936
1132
  disabled: q,
937
1133
  className: "flex items-center gap-2 px-3 py-2 text-text-secondary hover:bg-bg-sunken rounded-md transition-colors disabled:opacity-50",
938
- title: b("sessions.refreshTitle", "Refresh sessions"),
939
- children: /* @__PURE__ */ _(Ve, { className: `size-4 ${q ? "animate-spin" : ""}` })
1134
+ title: v("sessions.refreshTitle", "Refresh sessions"),
1135
+ children: /* @__PURE__ */ h(Ue, { className: `size-4 ${q ? "animate-spin" : ""}` })
940
1136
  }),
941
- /* @__PURE__ */ _(Xe, {
942
- label: b("sessions.export", "Export"),
943
- disabled: Ot,
1137
+ /* @__PURE__ */ h(Qe, {
1138
+ label: v("sessions.export", "Export"),
1139
+ disabled: At,
944
1140
  testId: "sessions-export",
945
1141
  defaultFolderPath: "/Vibecontrols/Sessions",
946
1142
  source: {
@@ -948,267 +1144,267 @@ function it() {
948
1144
  filename: `sessions-export-${(/* @__PURE__ */ new Date()).toISOString().slice(0, 10)}.csv`,
949
1145
  mimeType: "text/csv",
950
1146
  getBlob: async () => {
951
- let e = (await Dn({ variables: { input: {
1147
+ let e = (await Nn({ variables: { input: {
952
1148
  filter: {
953
- status: S === "all" ? void 0 : S,
954
- type: C === "all" ? void 0 : C,
955
- vibeId: w !== "all" && w !== "none" ? w : void 0,
956
- agentId: T === "all" ? void 0 : T
1149
+ status: b === "all" ? void 0 : b,
1150
+ type: x === "all" ? void 0 : x,
1151
+ vibeId: S !== "all" && S !== "none" ? S : void 0,
1152
+ agentId: C === "all" ? void 0 : C
957
1153
  },
958
1154
  format: "CSV"
959
1155
  } } })).data?.exportSessions;
960
1156
  return e ? { blob: new Blob([e.data], { type: "text/csv" }) } : null;
961
1157
  }
962
1158
  },
963
- onDownload: () => Zn("CSV")
1159
+ onDownload: () => rr("CSV")
964
1160
  }),
965
- /* @__PURE__ */ _(et, {
966
- permission: d.SESSION_CREATE,
967
- children: /* @__PURE__ */ v("button", {
1161
+ /* @__PURE__ */ h(nt, {
1162
+ permission: Ae.SESSION_CREATE,
1163
+ children: /* @__PURE__ */ g("button", {
968
1164
  type: "button",
969
- onClick: () => an(!0),
1165
+ onClick: () => dn(!0),
970
1166
  className: "flex items-center gap-2 px-3 py-2 text-text-primary border border-border-default rounded-md hover:bg-bg-sunken transition-colors",
971
1167
  "data-testid": "sessions-reconnect-button",
972
- title: b("sessions.reconnectTooltip", "Reconnect orphan tmux/wezterm/zellij sessions left over from a previous agent run"),
973
- children: [/* @__PURE__ */ _(Ve, { className: "size-4" }), b("sessions.reconnect", "Reconnect")]
1168
+ title: v("sessions.reconnectTooltip", "Reconnect orphan tmux/wezterm/zellij sessions left over from a previous agent run"),
1169
+ children: [/* @__PURE__ */ h(Ue, { className: "size-4" }), v("sessions.reconnect", "Reconnect")]
974
1170
  })
975
1171
  }),
976
- /* @__PURE__ */ _(et, {
977
- permission: d.SESSION_CREATE,
978
- children: /* @__PURE__ */ v("button", {
1172
+ /* @__PURE__ */ h(nt, {
1173
+ permission: Ae.SESSION_CREATE,
1174
+ children: /* @__PURE__ */ g("button", {
979
1175
  type: "button",
980
- onClick: $n,
1176
+ onClick: ar,
981
1177
  className: "flex items-center gap-2 px-4 py-2 bg-action-primary-bg text-action-primary-text rounded-md hover:bg-action-primary-bg-hover transition-colors",
982
- children: [/* @__PURE__ */ _(Be, { className: "size-4" }), b("sessions.newSession", "New Session")]
1178
+ children: [/* @__PURE__ */ h(He, { className: "size-4" }), v("sessions.newSession", "New Session")]
983
1179
  })
984
1180
  })
985
1181
  ]
986
1182
  })
987
1183
  }),
988
- /* @__PURE__ */ _(Oe, {
1184
+ /* @__PURE__ */ h(ke, {
989
1185
  showConnectionStatus: !0,
990
1186
  maxVisible: 3
991
1187
  }),
992
- /* @__PURE__ */ v("div", {
1188
+ /* @__PURE__ */ g("div", {
993
1189
  "data-tour": "sessions-filters",
994
1190
  className: "space-y-3",
995
- children: [/* @__PURE__ */ v("div", {
1191
+ children: [/* @__PURE__ */ g("div", {
996
1192
  className: "flex flex-col sm:flex-row items-stretch sm:items-center gap-2",
997
- children: [/* @__PURE__ */ _(Te, {
998
- value: x,
999
- onChange: _t,
1000
- placeholder: b("sessions.searchPlaceholder", "Search sessions..."),
1193
+ children: [/* @__PURE__ */ h(Te, {
1194
+ value: y,
1195
+ onChange: yt,
1196
+ placeholder: v("sessions.searchPlaceholder", "Search sessions..."),
1001
1197
  className: "flex-1 sm:w-64 sm:flex-none"
1002
- }), /* @__PURE__ */ v("div", {
1198
+ }), /* @__PURE__ */ g("div", {
1003
1199
  className: "flex items-center gap-1 bg-bg-sunken rounded-md p-1 flex-shrink-0",
1004
1200
  children: [
1005
- /* @__PURE__ */ _("button", {
1201
+ /* @__PURE__ */ h("button", {
1006
1202
  type: "button",
1007
- onClick: () => D("terminal"),
1203
+ onClick: () => T("terminal"),
1008
1204
  className: "p-1.5 sm:p-2 rounded hover:bg-bg-surface/50",
1009
- title: b("sessions.terminalViewTitle", "Terminal view"),
1010
- children: /* @__PURE__ */ _(Re, { className: "size-4 text-text-secondary" })
1205
+ title: v("sessions.terminalViewTitle", "Terminal view"),
1206
+ children: /* @__PURE__ */ h(Be, { className: "size-4 text-text-secondary" })
1011
1207
  }),
1012
- /* @__PURE__ */ _("button", {
1208
+ /* @__PURE__ */ h("button", {
1013
1209
  type: "button",
1014
- onClick: () => D("grid"),
1015
- className: `p-1.5 sm:p-2 rounded ${E === "grid" ? "bg-bg-surface shadow-sm" : "hover:bg-bg-surface/50"}`,
1016
- title: b("sessions.gridViewTitle", "Grid view"),
1017
- children: /* @__PURE__ */ _(Ie, { className: "size-4 text-text-secondary" })
1210
+ onClick: () => T("grid"),
1211
+ className: `p-1.5 sm:p-2 rounded ${w === "grid" ? "bg-bg-surface shadow-sm" : "hover:bg-bg-surface/50"}`,
1212
+ title: v("sessions.gridViewTitle", "Grid view"),
1213
+ children: /* @__PURE__ */ h(Re, { className: "size-4 text-text-secondary" })
1018
1214
  }),
1019
- /* @__PURE__ */ _("button", {
1215
+ /* @__PURE__ */ h("button", {
1020
1216
  type: "button",
1021
- onClick: () => D("list"),
1022
- className: `p-1.5 sm:p-2 rounded ${E === "list" ? "bg-bg-surface shadow-sm" : "hover:bg-bg-surface/50"}`,
1023
- title: b("sessions.listViewTitle", "List view"),
1024
- children: /* @__PURE__ */ _(Le, { className: "size-4 text-text-secondary" })
1217
+ onClick: () => T("list"),
1218
+ className: `p-1.5 sm:p-2 rounded ${w === "list" ? "bg-bg-surface shadow-sm" : "hover:bg-bg-surface/50"}`,
1219
+ title: v("sessions.listViewTitle", "List view"),
1220
+ children: /* @__PURE__ */ h(ze, { className: "size-4 text-text-secondary" })
1025
1221
  })
1026
1222
  ]
1027
1223
  })]
1028
- }), /* @__PURE__ */ v("div", {
1224
+ }), /* @__PURE__ */ g("div", {
1029
1225
  className: "flex items-center gap-2 sm:gap-3 flex-wrap",
1030
1226
  children: [
1031
- /* @__PURE__ */ _(l, {
1032
- label: b("sessions.filterStatus", "Status"),
1033
- value: S,
1034
- options: pt,
1035
- onChange: vt
1036
- }),
1037
- /* @__PURE__ */ _(l, {
1038
- label: b("sessions.filterType", "Type"),
1039
- value: C,
1040
- options: mt,
1041
- onChange: yt
1042
- }),
1043
- /* @__PURE__ */ _(l, {
1044
- label: b("sessions.filterVibe", "Vibe"),
1045
- value: w,
1046
- options: Rn,
1227
+ /* @__PURE__ */ h(Ee, {
1228
+ label: v("sessions.filterStatus", "Status"),
1229
+ value: b,
1230
+ options: ht,
1047
1231
  onChange: bt
1048
1232
  }),
1049
- /* @__PURE__ */ _(l, {
1050
- label: b("sessions.filterAgent", "Agent"),
1051
- value: T,
1052
- options: zn,
1233
+ /* @__PURE__ */ h(Ee, {
1234
+ label: v("sessions.filterType", "Type"),
1235
+ value: x,
1236
+ options: gt,
1053
1237
  onChange: xt
1238
+ }),
1239
+ /* @__PURE__ */ h(Ee, {
1240
+ label: v("sessions.filterVibe", "Vibe"),
1241
+ value: S,
1242
+ options: Wn,
1243
+ onChange: St
1244
+ }),
1245
+ /* @__PURE__ */ h(Ee, {
1246
+ label: v("sessions.filterAgent", "Agent"),
1247
+ value: C,
1248
+ options: Gn,
1249
+ onChange: Ct
1054
1250
  })
1055
1251
  ]
1056
1252
  })]
1057
1253
  }),
1058
- /* @__PURE__ */ v("div", {
1254
+ /* @__PURE__ */ g("div", {
1059
1255
  className: "flex flex-col sm:flex-row items-start sm:items-center gap-2 flex-wrap",
1060
1256
  children: [
1061
- /* @__PURE__ */ v("button", {
1257
+ /* @__PURE__ */ g("button", {
1062
1258
  type: "button",
1063
- onClick: () => vt("RUNNING"),
1064
- className: `flex items-center gap-2 px-3 py-1.5 text-sm rounded-full transition-colors ${S === "RUNNING" ? "bg-status-success-bg text-status-success-text" : "bg-bg-sunken text-text-secondary hover:bg-bg-sunken/80"}`,
1259
+ onClick: () => bt("RUNNING"),
1260
+ className: `flex items-center gap-2 px-3 py-1.5 text-sm rounded-full transition-colors ${b === "RUNNING" ? "bg-status-success-bg text-status-success-text" : "bg-bg-sunken text-text-secondary hover:bg-bg-sunken/80"}`,
1065
1261
  children: [
1066
- /* @__PURE__ */ _(ze, { className: "size-3" }),
1262
+ /* @__PURE__ */ h(Ve, { className: "size-3" }),
1067
1263
  " ",
1068
- b("sessions.running", "Running"),
1264
+ v("sessions.running", "Running"),
1069
1265
  " (",
1070
1266
  $.running,
1071
1267
  ")"
1072
1268
  ]
1073
1269
  }),
1074
- /* @__PURE__ */ v("button", {
1270
+ /* @__PURE__ */ g("button", {
1075
1271
  type: "button",
1076
- onClick: () => vt("STOPPED"),
1077
- className: `flex items-center gap-2 px-3 py-1.5 text-sm rounded-full transition-colors ${S === "STOPPED" ? "bg-bg-sunken text-text-secondary" : "bg-bg-sunken text-text-secondary hover:bg-bg-sunken/80"}`,
1272
+ onClick: () => bt("STOPPED"),
1273
+ className: `flex items-center gap-2 px-3 py-1.5 text-sm rounded-full transition-colors ${b === "STOPPED" ? "bg-bg-sunken text-text-secondary" : "bg-bg-sunken text-text-secondary hover:bg-bg-sunken/80"}`,
1078
1274
  children: [
1079
- /* @__PURE__ */ _(Ue, { className: "size-3" }),
1275
+ /* @__PURE__ */ h(Ge, { className: "size-3" }),
1080
1276
  " ",
1081
- b("sessions.stoppedState", "Stopped"),
1277
+ v("sessions.stoppedState", "Stopped"),
1082
1278
  " (",
1083
1279
  $.stopped,
1084
1280
  ")"
1085
1281
  ]
1086
1282
  }),
1087
- /* @__PURE__ */ _("div", {
1283
+ /* @__PURE__ */ h("div", {
1088
1284
  className: "sm:ml-auto flex items-center gap-2",
1089
- children: Z.length > 0 && /* @__PURE__ */ v("button", {
1285
+ children: Z.length > 0 && /* @__PURE__ */ g("button", {
1090
1286
  type: "button",
1091
- onClick: Kn ? Gn : Wn,
1287
+ onClick: Qn ? Zn : Xn,
1092
1288
  className: "flex items-center gap-1.5 px-3 py-1.5 text-xs text-text-secondary hover:text-text-primary transition-colors",
1093
- children: [/* @__PURE__ */ _(Fe, { className: "size-3.5" }), Kn ? b("sessions.deselectAll", "Deselect All") : b("sessions.selectAll", "Select All")]
1289
+ children: [/* @__PURE__ */ h(Le, { className: "size-3.5" }), Qn ? v("sessions.deselectAll", "Deselect All") : v("sessions.selectAll", "Select All")]
1094
1290
  })
1095
1291
  })
1096
1292
  ]
1097
1293
  }),
1098
- pr(),
1099
- x || S !== "all" || C !== "all" || w !== "all" || T !== "all" ? /* @__PURE__ */ v("p", {
1294
+ yr(),
1295
+ y || b !== "all" || x !== "all" || S !== "all" || C !== "all" ? /* @__PURE__ */ g("p", {
1100
1296
  className: "text-sm text-text-secondary",
1101
1297
  children: [
1102
- b("sessions.showing", "Showing"),
1298
+ v("sessions.showing", "Showing"),
1103
1299
  " ",
1104
1300
  Z.length,
1105
1301
  " ",
1106
- b("sessions.of", "of"),
1302
+ v("sessions.of", "of"),
1107
1303
  " ",
1108
1304
  X.length,
1109
1305
  " ",
1110
- b("nav.sessions", "sessions"),
1111
- q && /* @__PURE__ */ v("span", {
1306
+ v("nav.sessions", "sessions"),
1307
+ q && /* @__PURE__ */ g("span", {
1112
1308
  className: "ml-2 text-text-muted",
1113
1309
  children: [
1114
1310
  "(",
1115
- b("sessions.refreshing", "refreshing..."),
1311
+ v("sessions.refreshing", "refreshing..."),
1116
1312
  ")"
1117
1313
  ]
1118
1314
  })
1119
1315
  ]
1120
1316
  }) : null,
1121
- /* @__PURE__ */ _(Ye, {
1317
+ /* @__PURE__ */ h(Ze, {
1122
1318
  mode: "wait",
1123
- children: Z.length > 0 ? E === "grid" ? /* @__PURE__ */ _(Qe, {
1319
+ children: Z.length > 0 ? w === "grid" ? /* @__PURE__ */ h(et, {
1124
1320
  stagger: .04,
1125
1321
  className: "grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-3 gap-4",
1126
- children: Z.map((e) => /* @__PURE__ */ _(Ze, { children: /* @__PURE__ */ _(ke, {
1322
+ children: Z.map((e) => /* @__PURE__ */ h($e, { children: /* @__PURE__ */ h(je, {
1127
1323
  session: e,
1128
- onOpen: Qn,
1129
- onStart: tr,
1130
- onStop: nr,
1131
- onRestart: rr,
1324
+ onOpen: ir,
1325
+ onStart: sr,
1326
+ onStop: cr,
1327
+ onRestart: lr,
1132
1328
  onOpenTerminal: Q,
1133
- onShare: or,
1134
- selected: N.has(e.id),
1135
- onToggleSelect: () => Un(e.id)
1329
+ onShare: fr,
1330
+ selected: j.has(e.id),
1331
+ onToggleSelect: () => Yn(e.id)
1136
1332
  }) }, e.id))
1137
- }, "grid-view") : /* @__PURE__ */ _(Ze, { children: /* @__PURE__ */ _(Ae, {
1333
+ }, "grid-view") : /* @__PURE__ */ h($e, { children: /* @__PURE__ */ h(Me, {
1138
1334
  sessions: Z,
1139
- onOpen: Qn,
1140
- onStart: tr,
1141
- onStop: nr,
1142
- onRestart: rr,
1143
- onTerminate: ir,
1335
+ onOpen: ir,
1336
+ onStart: sr,
1337
+ onStop: cr,
1338
+ onRestart: lr,
1339
+ onTerminate: ur,
1144
1340
  onOpenTerminal: Q,
1145
- onShare: or,
1146
- selectedIds: N,
1147
- onToggleSelect: Un,
1148
- onSelectAll: Wn,
1149
- onDeselectAll: Gn
1150
- }) }, "list-view") : /* @__PURE__ */ v("div", {
1341
+ onShare: fr,
1342
+ selectedIds: j,
1343
+ onToggleSelect: Yn,
1344
+ onSelectAll: Xn,
1345
+ onDeselectAll: Zn
1346
+ }) }, "list-view") : /* @__PURE__ */ g("div", {
1151
1347
  className: "space-y-4",
1152
- children: [/* @__PURE__ */ _(Ee, {
1348
+ children: [/* @__PURE__ */ h(De, {
1153
1349
  variant: "compact",
1154
1350
  dismissKey: "vibecontrols-sessions-setup-banner"
1155
- }), /* @__PURE__ */ _(we, {
1156
- icon: /* @__PURE__ */ _(We, { className: "size-8 text-text-secondary" }),
1157
- title: x || S !== "all" || C !== "all" || w !== "all" || T !== "all" ? b("sessions.emptyFound", "No sessions found") : b("sessions.emptyConfigured", "No sessions configured"),
1158
- description: x || S !== "all" || C !== "all" || w !== "all" || T !== "all" ? b("sessions.emptyAdjustSearch", "Try adjusting your search or filters") : b("sessions.emptyDescription", "Sessions require an active agent. Install the CLI agent first, then start a session."),
1159
- action: !x && S === "all" && C === "all" && w === "all" && T === "all" ? /* @__PURE__ */ v("div", {
1351
+ }), /* @__PURE__ */ h(we, {
1352
+ icon: /* @__PURE__ */ h(Ke, { className: "size-8 text-text-secondary" }),
1353
+ title: y || b !== "all" || x !== "all" || S !== "all" || C !== "all" ? v("sessions.emptyFound", "No sessions found") : v("sessions.emptyConfigured", "No sessions configured"),
1354
+ description: y || b !== "all" || x !== "all" || S !== "all" || C !== "all" ? v("sessions.emptyAdjustSearch", "Try adjusting your search or filters") : v("sessions.emptyDescription", "Sessions require an active agent. Install the CLI agent first, then start a session."),
1355
+ action: !y && b === "all" && x === "all" && S === "all" && C === "all" ? /* @__PURE__ */ g("div", {
1160
1356
  className: "flex items-center gap-2",
1161
- children: [gt && /* @__PURE__ */ v("button", {
1357
+ children: [vt && /* @__PURE__ */ g("button", {
1162
1358
  type: "button",
1163
- onClick: $n,
1359
+ onClick: ar,
1164
1360
  className: "flex items-center gap-2 px-4 py-2 bg-action-primary-bg text-action-primary-text rounded-md hover:bg-action-primary-bg-hover transition-colors",
1165
1361
  children: [
1166
- /* @__PURE__ */ _(Be, { className: "size-4" }),
1362
+ /* @__PURE__ */ h(He, { className: "size-4" }),
1167
1363
  " ",
1168
- b("sessions.newSession", "New Session")
1364
+ v("sessions.newSession", "New Session")
1169
1365
  ]
1170
- }), /* @__PURE__ */ _(De, { prompt: "What is a Session in VibeControls and how do I start one?" })]
1366
+ }), /* @__PURE__ */ h(Oe, { prompt: "What is a Session in VibeControls and how do I start one?" })]
1171
1367
  }) : void 0
1172
1368
  })]
1173
1369
  })
1174
1370
  }),
1175
- j && /* @__PURE__ */ _("div", {
1371
+ k && /* @__PURE__ */ h("div", {
1176
1372
  className: "fixed bottom-4 right-4 z-50 px-4 py-3 bg-status-success-bg text-status-success-text rounded-md shadow-lg text-sm",
1177
- children: j
1373
+ children: k
1178
1374
  })
1179
1375
  ]
1180
1376
  }),
1181
- R.length > 0 && /* @__PURE__ */ _(je, {
1182
- tabs: R,
1183
- activeTabId: B,
1184
- onTabSelect: V,
1185
- onTabClose: sr,
1186
- onOpenExternal: cr,
1377
+ I.length > 0 && /* @__PURE__ */ h(Ne, {
1378
+ tabs: I,
1379
+ activeTabId: R,
1380
+ onTabSelect: z,
1381
+ onTabClose: pr,
1382
+ onOpenExternal: mr,
1187
1383
  onToggleCollapse: () => H((e) => !e),
1188
- collapsed: qt,
1384
+ collapsed: $t,
1189
1385
  sessions: Z,
1190
1386
  onOpenTerminal: Q,
1191
1387
  onRetryTerminal: Q,
1192
- onRenameSession: lr,
1193
- onStopTerminal: ur,
1194
- onRestartTerminal: dr,
1388
+ onRenameSession: hr,
1389
+ onStopTerminal: gr,
1390
+ onRestartTerminal: _r,
1195
1391
  heightClass: "h-[280px] sm:h-[380px]",
1196
- isImmersiveFullscreen: Xt,
1197
- onToggleImmersiveFullscreen: fr,
1392
+ isImmersiveFullscreen: nn,
1393
+ onToggleImmersiveFullscreen: vr,
1198
1394
  contextSwitcher: void 0
1199
1395
  }),
1200
- St && hr(),
1201
- mr(),
1202
- Jt && /* @__PURE__ */ _(Me, {
1203
- session: Jt,
1204
- isOpen: !!Jt,
1205
- onClose: () => Yt(null)
1396
+ wt && xr(),
1397
+ br(),
1398
+ en && /* @__PURE__ */ h(Pe, {
1399
+ session: en,
1400
+ isOpen: !!en,
1401
+ onClose: () => tn(null)
1206
1402
  }),
1207
- /* @__PURE__ */ _(e, {
1208
- isOpen: Ct,
1209
- onClose: () => k(!1),
1403
+ /* @__PURE__ */ h(e, {
1404
+ isOpen: Tt,
1405
+ onClose: () => D(!1),
1210
1406
  onConfirm: () => {
1211
- k(!1), st("/billing");
1407
+ D(!1), lt("/billing");
1212
1408
  },
1213
1409
  title: t("session").title,
1214
1410
  message: t("session").message,
@@ -1218,62 +1414,62 @@ function it() {
1218
1414
  })
1219
1415
  ]
1220
1416
  });
1221
- function mr() {
1222
- if (!rn) return null;
1223
- let e = pn?.agentSessionOrphans ?? [];
1224
- return /* @__PURE__ */ _("div", {
1417
+ function br() {
1418
+ if (!un) return null;
1419
+ let e = yn?.agentSessionOrphans ?? [];
1420
+ return /* @__PURE__ */ h("div", {
1225
1421
  className: "fixed inset-0 bg-bg-overlay flex items-center justify-center z-50 p-4",
1226
1422
  "data-testid": "sessions-reconnect-modal",
1227
- children: /* @__PURE__ */ v("div", {
1423
+ children: /* @__PURE__ */ g("div", {
1228
1424
  className: "bg-bg-surface rounded-lg p-6 w-full max-w-2xl max-h-[80vh] overflow-y-auto",
1229
1425
  children: [
1230
- /* @__PURE__ */ _("h2", {
1426
+ /* @__PURE__ */ h("h2", {
1231
1427
  className: "text-lg font-semibold text-text-primary mb-1",
1232
- children: b("sessions.reconnectTitle", "Reconnect orphan sessions")
1428
+ children: v("sessions.reconnectTitle", "Reconnect orphan sessions")
1233
1429
  }),
1234
- /* @__PURE__ */ _("p", {
1430
+ /* @__PURE__ */ h("p", {
1235
1431
  className: "text-sm text-text-secondary mb-4",
1236
- children: b("sessions.reconnectDesc", "Pick an agent to scan its host for tmux / wezterm / zellij sessions named vibe-* that are not currently tracked. Adopt one to start a web terminal and bring it back into the UI.")
1432
+ children: v("sessions.reconnectDesc", "Pick an agent to scan its host for tmux / wezterm / zellij sessions named vibe-* that are not currently tracked. Adopt one to start a web terminal and bring it back into the UI.")
1237
1433
  }),
1238
- /* @__PURE__ */ v("div", {
1434
+ /* @__PURE__ */ g("div", {
1239
1435
  className: "space-y-4",
1240
1436
  children: [
1241
- /* @__PURE__ */ v("div", { children: [/* @__PURE__ */ _("label", {
1437
+ /* @__PURE__ */ g("div", { children: [/* @__PURE__ */ h("label", {
1242
1438
  className: "block text-sm font-medium text-text-primary mb-1",
1243
- children: b("sessions.agent", "Agent")
1244
- }), /* @__PURE__ */ _(u, {
1245
- options: Vn,
1246
- value: on,
1439
+ children: v("sessions.agent", "Agent")
1440
+ }), /* @__PURE__ */ h(l, {
1441
+ options: qn,
1442
+ value: fn,
1247
1443
  onChange: (e) => {
1248
- sn(e), ln(null), e && fn({ variables: { agentId: e } });
1444
+ pn(e), hn(null), e && vn({ variables: { agentId: e } });
1249
1445
  },
1250
- placeholder: b("sessions.selectAgent", "Select an agent"),
1251
- searchPlaceholder: b("sessions.searchAgents", "Search agents..."),
1446
+ placeholder: v("sessions.selectAgent", "Select an agent"),
1447
+ searchPlaceholder: v("sessions.searchAgents", "Search agents..."),
1252
1448
  clearable: !0
1253
1449
  })] }),
1254
- cn && /* @__PURE__ */ _("div", {
1450
+ mn && /* @__PURE__ */ h("div", {
1255
1451
  className: "p-3 bg-status-error-bg text-status-error-text text-sm rounded-md",
1256
1452
  "data-testid": "sessions-reconnect-error",
1257
- children: cn
1453
+ children: mn
1258
1454
  }),
1259
- on && /* @__PURE__ */ _("div", {
1455
+ fn && /* @__PURE__ */ h("div", {
1260
1456
  "data-testid": "sessions-reconnect-list",
1261
1457
  className: "space-y-2",
1262
- children: mn ? /* @__PURE__ */ _("div", {
1458
+ children: bn ? /* @__PURE__ */ h("div", {
1263
1459
  className: "text-sm text-text-secondary",
1264
- children: b("sessions.scanningHost", "Scanning host...")
1265
- }) : e.length === 0 ? /* @__PURE__ */ _("div", {
1460
+ children: v("sessions.scanningHost", "Scanning host...")
1461
+ }) : e.length === 0 ? /* @__PURE__ */ h("div", {
1266
1462
  className: "text-sm text-text-secondary",
1267
- children: b("sessions.noOrphans", "No orphan vibe-* sessions found on this agent.")
1268
- }) : e.map((e) => /* @__PURE__ */ v("div", {
1463
+ children: v("sessions.noOrphans", "No orphan vibe-* sessions found on this agent.")
1464
+ }) : e.map((e) => /* @__PURE__ */ g("div", {
1269
1465
  className: "flex items-center justify-between gap-3 p-3 border border-border-default rounded-md bg-bg-sunken/40",
1270
1466
  "data-testid": "sessions-reconnect-row",
1271
- children: [/* @__PURE__ */ v("div", {
1467
+ children: [/* @__PURE__ */ g("div", {
1272
1468
  className: "min-w-0 flex-1",
1273
- children: [/* @__PURE__ */ _("div", {
1469
+ children: [/* @__PURE__ */ h("div", {
1274
1470
  className: "font-mono text-sm text-text-primary break-all",
1275
1471
  children: e.externalName
1276
- }), /* @__PURE__ */ v("div", {
1472
+ }), /* @__PURE__ */ g("div", {
1277
1473
  className: "text-xs text-text-tertiary mt-0.5",
1278
1474
  children: [
1279
1475
  e.provider,
@@ -1285,196 +1481,196 @@ function it() {
1285
1481
  e.createdAt ? ` · created ${e.createdAt}` : ""
1286
1482
  ]
1287
1483
  })]
1288
- }), /* @__PURE__ */ _("button", {
1484
+ }), /* @__PURE__ */ h("button", {
1289
1485
  type: "button",
1290
- disabled: un === e.externalName,
1486
+ disabled: gn === e.externalName,
1291
1487
  onClick: async () => {
1292
- dn(e.externalName), ln(null);
1488
+ _n(e.externalName), hn(null);
1293
1489
  try {
1294
- await hn({ variables: {
1295
- agentId: on,
1490
+ await xn({ variables: {
1491
+ agentId: fn,
1296
1492
  externalName: e.externalName,
1297
1493
  name: e.externalName
1298
- } }), await fn({ variables: { agentId: on } });
1494
+ } }), await vn({ variables: { agentId: fn } });
1299
1495
  } catch (e) {
1300
- ln(e instanceof Error ? e.message : String(e));
1496
+ hn(e instanceof Error ? e.message : String(e));
1301
1497
  } finally {
1302
- dn(null);
1498
+ _n(null);
1303
1499
  }
1304
1500
  },
1305
1501
  className: "shrink-0 px-3 py-1.5 text-xs bg-action-primary-bg text-action-primary-text rounded-md hover:bg-action-primary-bg-hover transition-colors disabled:opacity-50",
1306
1502
  "data-testid": `sessions-reconnect-adopt-${e.externalName}`,
1307
- children: un === e.externalName ? b("sessions.adopting", "Adopting…") : b("sessions.adopt", "Adopt")
1503
+ children: gn === e.externalName ? v("sessions.adopting", "Adopting…") : v("sessions.adopt", "Adopt")
1308
1504
  })]
1309
1505
  }, e.externalName))
1310
1506
  })
1311
1507
  ]
1312
1508
  }),
1313
- /* @__PURE__ */ _("div", {
1509
+ /* @__PURE__ */ h("div", {
1314
1510
  className: "flex justify-end gap-3 mt-6",
1315
- children: /* @__PURE__ */ _("button", {
1511
+ children: /* @__PURE__ */ h("button", {
1316
1512
  type: "button",
1317
1513
  onClick: () => {
1318
- an(!1), ln(null);
1514
+ dn(!1), hn(null);
1319
1515
  },
1320
1516
  className: "px-4 py-2 text-text-primary hover:bg-bg-sunken rounded-md transition-colors",
1321
- children: b("common.close", "Close")
1517
+ children: v("common.close", "Close")
1322
1518
  })
1323
1519
  })
1324
1520
  ]
1325
1521
  })
1326
1522
  });
1327
1523
  }
1328
- function hr() {
1329
- return /* @__PURE__ */ _("div", {
1524
+ function xr() {
1525
+ return /* @__PURE__ */ h("div", {
1330
1526
  className: "fixed inset-0 bg-bg-overlay flex items-center justify-center z-50 p-4",
1331
- children: /* @__PURE__ */ v("div", {
1527
+ children: /* @__PURE__ */ g("div", {
1332
1528
  className: "bg-bg-surface rounded-lg p-6 w-full max-w-lg",
1333
1529
  children: [
1334
- /* @__PURE__ */ _("h2", {
1530
+ /* @__PURE__ */ h("h2", {
1335
1531
  className: "text-lg font-semibold text-text-primary mb-4",
1336
- children: b("sessions.newSession", "New Session")
1532
+ children: v("sessions.newSession", "New Session")
1337
1533
  }),
1338
- /* @__PURE__ */ v("div", {
1534
+ /* @__PURE__ */ g("div", {
1339
1535
  className: "space-y-4",
1340
1536
  children: [
1341
- wt && /* @__PURE__ */ _("div", {
1537
+ Et && /* @__PURE__ */ h("div", {
1342
1538
  className: "p-3 bg-status-error-bg text-status-error-text text-sm rounded-md",
1343
- children: wt
1539
+ children: Et
1344
1540
  }),
1345
- /* @__PURE__ */ v("div", { children: [/* @__PURE__ */ _("label", {
1541
+ /* @__PURE__ */ g("div", { children: [/* @__PURE__ */ h("label", {
1346
1542
  className: "block text-sm font-medium text-text-primary mb-1",
1347
- children: b("sessions.name", "Name")
1348
- }), /* @__PURE__ */ _("input", {
1543
+ children: v("sessions.name", "Name")
1544
+ }), /* @__PURE__ */ h("input", {
1349
1545
  "aria-label": "control",
1350
- ref: At,
1546
+ ref: Mt,
1351
1547
  type: "text",
1352
- placeholder: b("sessions.namePlaceholder", "dev-server"),
1548
+ placeholder: v("sessions.namePlaceholder", "dev-server"),
1353
1549
  className: "w-full px-3 py-2 bg-bg-sunken border border-border-default rounded-md text-text-primary placeholder:text-text-placeholder"
1354
1550
  })] }),
1355
- /* @__PURE__ */ v("div", { children: [/* @__PURE__ */ _("label", {
1551
+ /* @__PURE__ */ g("div", { children: [/* @__PURE__ */ h("label", {
1356
1552
  className: "block text-sm font-medium text-text-primary mb-1",
1357
- children: b("sessions.filterVibe", "Vibe")
1358
- }), /* @__PURE__ */ _(u, {
1359
- options: Bn,
1360
- value: Pt,
1361
- onChange: Ft,
1362
- placeholder: b("sessions.noVibe", "No vibe"),
1363
- searchPlaceholder: b("sessions.searchVibes", "Search vibes..."),
1553
+ children: v("sessions.filterVibe", "Vibe")
1554
+ }), /* @__PURE__ */ h(l, {
1555
+ options: Kn,
1556
+ value: It,
1557
+ onChange: Lt,
1558
+ placeholder: v("sessions.noVibe", "No vibe"),
1559
+ searchPlaceholder: v("sessions.searchVibes", "Search vibes..."),
1364
1560
  clearable: !0
1365
1561
  })] }),
1366
- /* @__PURE__ */ v("div", { children: [
1367
- /* @__PURE__ */ _("label", {
1562
+ /* @__PURE__ */ g("div", { children: [
1563
+ /* @__PURE__ */ h("label", {
1368
1564
  className: "block text-sm font-medium text-text-primary mb-1",
1369
- children: b("sessions.filterAgent", "Agent")
1565
+ children: v("sessions.filterAgent", "Agent")
1370
1566
  }),
1371
- /* @__PURE__ */ _(u, {
1372
- options: Vn,
1373
- value: It,
1374
- onChange: Lt,
1375
- placeholder: b("sessions.selectAgent", "Select an agent"),
1376
- searchPlaceholder: b("sessions.searchAgents", "Search agents..."),
1567
+ /* @__PURE__ */ h(l, {
1568
+ options: qn,
1569
+ value: Rt,
1570
+ onChange: zt,
1571
+ placeholder: v("sessions.selectAgent", "Select an agent"),
1572
+ searchPlaceholder: v("sessions.searchAgents", "Search agents..."),
1377
1573
  clearable: !0
1378
1574
  }),
1379
- /* @__PURE__ */ _("p", {
1575
+ /* @__PURE__ */ h("p", {
1380
1576
  className: "text-xs text-text-muted mt-1",
1381
- children: b("sessions.agentHint", "Required when no vibe is selected. Overridden by the vibe's agent if a vibe is chosen.")
1577
+ children: v("sessions.agentHint", "Required when no vibe is selected. Overridden by the vibe's agent if a vibe is chosen.")
1382
1578
  })
1383
1579
  ] }),
1384
- /* @__PURE__ */ v("div", { children: [/* @__PURE__ */ _("label", {
1580
+ /* @__PURE__ */ g("div", { children: [/* @__PURE__ */ h("label", {
1385
1581
  className: "block text-sm font-medium text-text-primary mb-1",
1386
- children: b("sessions.filterType", "Type")
1387
- }), /* @__PURE__ */ _(u, {
1388
- options: Hn,
1389
- value: I,
1390
- onChange: Rt,
1391
- placeholder: b("sessions.selectType", "Select type"),
1392
- searchPlaceholder: b("sessions.searchTypes", "Search types...")
1582
+ children: v("sessions.filterType", "Type")
1583
+ }), /* @__PURE__ */ h(l, {
1584
+ options: Jn,
1585
+ value: P,
1586
+ onChange: Bt,
1587
+ placeholder: v("sessions.selectType", "Select type"),
1588
+ searchPlaceholder: v("sessions.searchTypes", "Search types...")
1393
1589
  })] }),
1394
- /* @__PURE__ */ v("div", { children: [/* @__PURE__ */ _("label", {
1590
+ /* @__PURE__ */ g("div", { children: [/* @__PURE__ */ h("label", {
1395
1591
  className: "block text-sm font-medium text-text-primary mb-1",
1396
- children: b("sessions.command", "Command")
1397
- }), /* @__PURE__ */ _("input", {
1592
+ children: v("sessions.command", "Command")
1593
+ }), /* @__PURE__ */ h("input", {
1398
1594
  "aria-label": "control",
1399
- ref: jt,
1595
+ ref: Nt,
1400
1596
  type: "text",
1401
- placeholder: b("sessions.commandPlaceholder", "bun run dev"),
1597
+ placeholder: v("sessions.commandPlaceholder", "bun run dev"),
1402
1598
  className: "w-full px-3 py-2 bg-bg-sunken border border-border-default rounded-md text-text-primary placeholder:text-text-placeholder"
1403
1599
  })] }),
1404
- /* @__PURE__ */ v("div", {
1600
+ /* @__PURE__ */ g("div", {
1405
1601
  className: "flex items-center gap-2",
1406
- children: [/* @__PURE__ */ _("input", {
1602
+ children: [/* @__PURE__ */ h("input", {
1407
1603
  "aria-label": "autoStart",
1408
- ref: Mt,
1604
+ ref: Pt,
1409
1605
  type: "checkbox",
1410
1606
  id: "autoStart",
1411
1607
  className: "size-4 rounded border-border-default"
1412
- }), /* @__PURE__ */ _("label", {
1608
+ }), /* @__PURE__ */ h("label", {
1413
1609
  htmlFor: "autoStart",
1414
1610
  className: "text-sm text-text-primary",
1415
- children: b("sessions.autoStartWithVibe", "Auto-start with vibe")
1611
+ children: v("sessions.autoStartWithVibe", "Auto-start with vibe")
1416
1612
  })]
1417
1613
  }),
1418
- (I === "TMUX" || I === "WEZTERM" || I === "ZELLIJ") && /* @__PURE__ */ v("div", {
1614
+ (P === "TMUX" || P === "WEZTERM" || P === "ZELLIJ") && /* @__PURE__ */ g("div", {
1419
1615
  className: "rounded-md border border-border-default bg-bg-sunken/40",
1420
1616
  "data-testid": "sessions-create-advanced",
1421
- children: [/* @__PURE__ */ v("button", {
1617
+ children: [/* @__PURE__ */ g("button", {
1422
1618
  type: "button",
1423
- onClick: () => Bt((e) => !e),
1619
+ onClick: () => Ht((e) => !e),
1424
1620
  className: "w-full flex items-center justify-between px-3 py-2 text-sm font-medium text-text-primary",
1425
- "aria-expanded": zt,
1426
- children: [/* @__PURE__ */ _("span", { children: b("sessions.advanced", "Advanced options") }), /* @__PURE__ */ _("span", {
1621
+ "aria-expanded": Vt,
1622
+ children: [/* @__PURE__ */ h("span", { children: v("sessions.advanced", "Advanced options") }), /* @__PURE__ */ h("span", {
1427
1623
  className: "text-text-tertiary text-xs",
1428
- children: zt ? "▾" : "▸"
1624
+ children: Vt ? "▾" : "▸"
1429
1625
  })]
1430
- }), zt && /* @__PURE__ */ v("div", {
1626
+ }), Vt && /* @__PURE__ */ g("div", {
1431
1627
  className: "px-3 pb-3 space-y-2",
1432
1628
  children: [
1433
- /* @__PURE__ */ _("label", {
1629
+ /* @__PURE__ */ h("label", {
1434
1630
  className: "block text-xs font-medium text-text-secondary",
1435
- children: b("sessions.attachExistingLabel", "Attach to existing session (optional)")
1631
+ children: v("sessions.attachExistingLabel", "Attach to existing session (optional)")
1436
1632
  }),
1437
- /* @__PURE__ */ _("input", {
1633
+ /* @__PURE__ */ h("input", {
1438
1634
  "aria-label": "control",
1439
- ref: Nt,
1635
+ ref: Ft,
1440
1636
  type: "text",
1441
1637
  "data-testid": "sessions-create-external-name",
1442
- placeholder: I === "WEZTERM" ? "e.g. vibe-051c9c62 (existing wezterm workspace)" : I === "ZELLIJ" ? "e.g. vibe-051c9c62 (existing zellij session)" : "e.g. vibe-051c9c62 (existing tmux session)",
1638
+ placeholder: P === "WEZTERM" ? "e.g. vibe-051c9c62 (existing wezterm workspace)" : P === "ZELLIJ" ? "e.g. vibe-051c9c62 (existing zellij session)" : "e.g. vibe-051c9c62 (existing tmux session)",
1443
1639
  className: "w-full px-3 py-2 text-sm bg-bg-sunken border border-border-default rounded-md text-text-primary placeholder:text-text-placeholder font-mono"
1444
1640
  }),
1445
- /* @__PURE__ */ _("p", {
1641
+ /* @__PURE__ */ h("p", {
1446
1642
  className: "text-xs text-text-tertiary",
1447
- children: b("sessions.attachExistingHint", "When set, the agent attaches to that existing session instead of creating a new one. Leave blank to spawn fresh.")
1643
+ children: v("sessions.attachExistingHint", "When set, the agent attaches to that existing session instead of creating a new one. Leave blank to spawn fresh.")
1448
1644
  })
1449
1645
  ]
1450
1646
  })]
1451
1647
  })
1452
1648
  ]
1453
1649
  }),
1454
- /* @__PURE__ */ v("div", {
1650
+ /* @__PURE__ */ g("div", {
1455
1651
  className: "border-t border-border-default pt-4",
1456
- children: [/* @__PURE__ */ _("h3", {
1652
+ children: [/* @__PURE__ */ h("h3", {
1457
1653
  className: "text-sm font-medium text-text-secondary mb-2",
1458
- children: b("sessions.tags", "Tags")
1459
- }), /* @__PURE__ */ _(Se, {
1654
+ children: v("sessions.tags", "Tags")
1655
+ }), /* @__PURE__ */ h(Se, {
1460
1656
  entityType: "VIBECONTROLS_SESSION",
1461
- onDraftChange: tn
1657
+ onDraftChange: cn
1462
1658
  })]
1463
1659
  }),
1464
- /* @__PURE__ */ v("div", {
1660
+ /* @__PURE__ */ g("div", {
1465
1661
  className: "flex justify-end gap-3 mt-6",
1466
- children: [/* @__PURE__ */ _("button", {
1662
+ children: [/* @__PURE__ */ h("button", {
1467
1663
  type: "button",
1468
- onClick: () => O(!1),
1469
- disabled: Tt,
1664
+ onClick: () => E(!1),
1665
+ disabled: Dt,
1470
1666
  className: "px-4 py-2 text-text-primary hover:bg-bg-sunken rounded-md transition-colors disabled:opacity-50",
1471
- children: b("common.cancel", "Cancel")
1472
- }), /* @__PURE__ */ _("button", {
1667
+ children: v("common.cancel", "Cancel")
1668
+ }), /* @__PURE__ */ h("button", {
1473
1669
  type: "button",
1474
- onClick: er,
1475
- disabled: Tt,
1670
+ onClick: or,
1671
+ disabled: Dt,
1476
1672
  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",
1477
- children: Tt ? b("sessions.creating", "Creating...") : b("sessions.createSession", "Create Session")
1673
+ children: Dt ? v("sessions.creating", "Creating...") : v("sessions.createSession", "Create Session")
1478
1674
  })]
1479
1675
  })
1480
1676
  ]
@@ -1483,6 +1679,6 @@ function it() {
1483
1679
  }
1484
1680
  }
1485
1681
  //#endregion
1486
- export { it as SessionsPage };
1682
+ export { ot as SessionsPage };
1487
1683
 
1488
1684
  //# sourceMappingURL=SessionsPage.js.map