@hachej/boring-workspace 0.1.43 → 0.1.45

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/app-front.js CHANGED
@@ -1,16 +1,16 @@
1
- import { jsx as f, jsxs as ye, Fragment as ce } from "react/jsx-runtime";
2
- import { useEffect as E, useSyncExternalStore as Tr, useMemo as F, useState as L, useCallback as w, useRef as J, useLayoutEffect as Nr } from "react";
3
- import { PiChatPanel as Dr, usePiSessions as _r } from "@hachej/boring-agent/front";
4
- import { aj as Lr, at as Ve, au as En, av as An, aw as wn, ax as Rn, ay as Ye, az as bt, aA as St, aB as Tn, aC as Or, aD as ze, aE as xr, U as gn, aF as Mr, q as Cr, aG as Fr, u as Nn, aH as Wr, ag as Gr, aI as Ir } from "./WorkspaceProvider-DkZAxsYo.js";
5
- import { T as $r, C as Ur, r as mn, w as Kr, W as pn } from "./WorkspaceLoadingState-yp4vNmrT.js";
6
- import { Sun as Hr, Moon as Jr } from "lucide-react";
7
- import { IconButton as jr, ErrorState as Br } from "@hachej/boring-ui-kit";
8
- function qr() {
9
- const { theme: e, toggleTheme: n } = Lr(), r = e === "dark";
1
+ import { jsx as d, jsxs as ye, Fragment as ue } from "react/jsx-runtime";
2
+ import { useEffect as E, useSyncExternalStore as Nr, useMemo as F, useState as O, useCallback as w, useRef as J, useLayoutEffect as Dr } from "react";
3
+ import { PiChatPanel as _r, usePiSessions as Lr } from "@hachej/boring-agent/front";
4
+ import { aj as Or, at as ke, au as wn, av as Rn, aw as Tn, ax as Nn, ay as Xe, az as St, aA as yt, aB as Dn, aC as xr, aD as Ye, aE as Mr, U as pn, aF as Cr, q as Fr, aG as Wr, u as _n, aH as Gr, ag as Ir, aI as $r } from "./WorkspaceProvider-CSwoKjTp.js";
5
+ import { T as Ur, C as Kr, r as hn, w as Hr, W as vn } from "./WorkspaceLoadingState-BoFzsDji.js";
6
+ import { Sun as Jr, Moon as jr } from "lucide-react";
7
+ import { IconButton as Br, ErrorState as qr } from "@hachej/boring-ui-kit";
8
+ function zr() {
9
+ const { theme: e, toggleTheme: n } = Or(), r = e === "dark";
10
10
  return E(() => {
11
11
  typeof document > "u" || document.documentElement.classList.toggle("dark", r);
12
- }, [r]), /* @__PURE__ */ f(
13
- jr,
12
+ }, [r]), /* @__PURE__ */ d(
13
+ Br,
14
14
  {
15
15
  type: "button",
16
16
  variant: "ghost",
@@ -18,53 +18,53 @@ function qr() {
18
18
  onClick: n,
19
19
  "aria-label": "Toggle theme",
20
20
  title: r ? "Switch to light theme" : "Switch to dark theme",
21
- children: r ? /* @__PURE__ */ f(Hr, { className: "h-4 w-4" }) : /* @__PURE__ */ f(Jr, { className: "h-4 w-4" })
21
+ children: r ? /* @__PURE__ */ d(Jr, { className: "h-4 w-4" }) : /* @__PURE__ */ d(jr, { className: "h-4 w-4" })
22
22
  }
23
23
  );
24
24
  }
25
- function zr() {
25
+ function Vr() {
26
26
  const e = `s${Date.now()}`;
27
27
  return {
28
28
  sessions: [{ id: e, title: "New session", updatedAt: Date.now() }],
29
29
  activeId: e
30
30
  };
31
31
  }
32
- function Vr(e, n) {
32
+ function Yr(e, n) {
33
33
  var r;
34
34
  if (typeof localStorage > "u") return n();
35
35
  try {
36
36
  const i = localStorage.getItem(e);
37
37
  if (i) {
38
- const o = JSON.parse(i), s = Array.isArray(o.sessions) ? o.sessions : Array.isArray(o.items) ? o.items : null;
39
- if (s)
40
- return { sessions: s, activeId: o.activeId ?? ((r = s[0]) == null ? void 0 : r.id) ?? "" };
38
+ const s = JSON.parse(i), o = Array.isArray(s.sessions) ? s.sessions : Array.isArray(s.items) ? s.items : null;
39
+ if (o)
40
+ return { sessions: o, activeId: s.activeId ?? ((r = o[0]) == null ? void 0 : r.id) ?? "" };
41
41
  }
42
42
  } catch {
43
43
  }
44
44
  return n();
45
45
  }
46
- function Yr(e, n) {
46
+ function kr(e, n) {
47
47
  if (!(typeof localStorage > "u"))
48
48
  try {
49
49
  localStorage.setItem(e, JSON.stringify(n));
50
50
  } catch {
51
51
  }
52
52
  }
53
- function kr(e = {}) {
54
- const n = e.storageKey ?? "workspace:sessions", r = e.initial ?? zr;
55
- let i = Vr(n, r);
56
- const o = /* @__PURE__ */ new Set(), s = (c) => {
57
- i = c, Yr(n, i), o.forEach((u) => u());
53
+ function Xr(e = {}) {
54
+ const n = e.storageKey ?? "workspace:sessions", r = e.initial ?? Vr;
55
+ let i = Yr(n, r);
56
+ const s = /* @__PURE__ */ new Set(), o = (c) => {
57
+ i = c, kr(n, i), s.forEach((u) => u());
58
58
  };
59
59
  return {
60
60
  getState: () => i,
61
61
  subscribe(c) {
62
- return o.add(c), () => {
63
- o.delete(c);
62
+ return s.add(c), () => {
63
+ s.delete(c);
64
64
  };
65
65
  },
66
66
  switchTo(c) {
67
- s({ ...i, activeId: c });
67
+ o({ ...i, activeId: c });
68
68
  },
69
69
  create() {
70
70
  const c = `s${Date.now()}`, u = {
@@ -72,58 +72,58 @@ function kr(e = {}) {
72
72
  title: "New session",
73
73
  updatedAt: Date.now()
74
74
  };
75
- s({ sessions: [u, ...i.sessions], activeId: c });
75
+ o({ sessions: [u, ...i.sessions], activeId: c });
76
76
  },
77
77
  remove(c) {
78
78
  var y;
79
79
  const u = i.sessions.filter((S) => S.id !== c), b = i.activeId === c ? ((y = u[0]) == null ? void 0 : y.id) ?? "" : i.activeId;
80
- s({ sessions: u, activeId: b });
80
+ o({ sessions: u, activeId: b });
81
81
  }
82
82
  };
83
83
  }
84
- function Xr(e) {
85
- return Tr(e.subscribe, e.getState, e.getState);
84
+ function Qr(e) {
85
+ return Nr(e.subscribe, e.getState, e.getState);
86
86
  }
87
- const Qr = 500, Zr = 1e4;
88
- function hn(e) {
87
+ const Zr = 500, ei = 1e4;
88
+ function bn(e) {
89
89
  return new Promise((n, r) => {
90
90
  let i;
91
- const o = () => {
92
- i && globalThis.clearTimeout(i), e.removeEventListener("abort", s);
93
- }, s = () => {
94
- o(), r(new DOMException("Warmup aborted", "AbortError"));
91
+ const s = () => {
92
+ i && globalThis.clearTimeout(i), e.removeEventListener("abort", o);
93
+ }, o = () => {
94
+ s(), r(new DOMException("Warmup aborted", "AbortError"));
95
95
  };
96
96
  if (e.aborted) {
97
- s();
97
+ o();
98
98
  return;
99
99
  }
100
100
  i = globalThis.setTimeout(() => {
101
- o(), n();
102
- }, Qr), e.addEventListener("abort", s, { once: !0 });
101
+ s(), n();
102
+ }, Zr), e.addEventListener("abort", o, { once: !0 });
103
103
  });
104
104
  }
105
- async function ei(e) {
105
+ async function ti(e) {
106
106
  const n = e.body;
107
- if (!n) return ze(await Ye(e));
107
+ if (!n) return Ye(await Xe(e));
108
108
  const r = n.getReader(), i = new TextDecoder();
109
- let o = "";
109
+ let s = "";
110
110
  try {
111
111
  for (; ; ) {
112
- const { done: s, value: c } = await r.read();
112
+ const { done: o, value: c } = await r.read();
113
113
  if (c) {
114
- o += i.decode(c, { stream: !s });
115
- const u = ze(o);
114
+ s += i.decode(c, { stream: !o });
115
+ const u = Ye(s);
116
116
  if (u) return u;
117
117
  }
118
- if (s)
119
- return o += i.decode(), ze(o);
118
+ if (o)
119
+ return s += i.decode(), Ye(s);
120
120
  }
121
121
  } finally {
122
122
  await r.cancel().catch(() => {
123
123
  });
124
124
  }
125
125
  }
126
- function ti(e) {
126
+ function ni(e) {
127
127
  if (!((e == null ? void 0 : e.runtimeDependenciesState) !== "preparing" && (e == null ? void 0 : e.runtimeDependenciesState) !== "ready" && (e == null ? void 0 : e.runtimeDependenciesState) !== "failed"))
128
128
  return {
129
129
  state: e.runtimeDependenciesState,
@@ -131,13 +131,13 @@ function ti(e) {
131
131
  ...e.runtimeDependenciesRequirement ? { requirement: e.runtimeDependenciesRequirement } : {}
132
132
  };
133
133
  }
134
- async function ni(e) {
134
+ async function ri(e) {
135
135
  if (!e.ok) {
136
- const o = await Ye(e);
137
- if (bt(o)) return { status: "preparing" };
138
- throw new Error(St(o) ?? `/api/v1/ready-status failed with ${e.status}`);
136
+ const s = await Xe(e);
137
+ if (St(s)) return { status: "preparing" };
138
+ throw new Error(yt(s) ?? `/api/v1/ready-status failed with ${e.status}`);
139
139
  }
140
- const n = await ei(e), r = ti(n), i = Or(n);
140
+ const n = await ti(e), r = ni(n), i = xr(n);
141
141
  if ((n == null ? void 0 : n.state) === "degraded" || (n == null ? void 0 : n.state) === "failed") {
142
142
  if (i && (r == null ? void 0 : r.state) === "failed")
143
143
  return { status: "ready", runtimeDependencies: r };
@@ -145,56 +145,56 @@ async function ni(e) {
145
145
  }
146
146
  return i ? { status: "ready", ...r ? { runtimeDependencies: r } : {} } : { status: "preparing", ...r ? { runtimeDependencies: r } : {} };
147
147
  }
148
- async function ri({
148
+ async function ii({
149
149
  apiBaseUrl: e,
150
150
  path: n,
151
151
  headers: r,
152
152
  signal: i,
153
- workspaceId: o
153
+ workspaceId: s
154
154
  }) {
155
- const s = new AbortController(), c = globalThis.setTimeout(() => s.abort(new DOMException("Warmup attempt timed out", "TimeoutError")), Zr), u = () => s.abort(i.reason);
155
+ const o = new AbortController(), c = globalThis.setTimeout(() => o.abort(new DOMException("Warmup attempt timed out", "TimeoutError")), ei), u = () => o.abort(i.reason);
156
156
  i.aborted && u(), i.addEventListener("abort", u, { once: !0 });
157
157
  try {
158
- const b = await fetch(wn(e, n), { headers: r, signal: s.signal });
159
- if (Rn(n)) return await ni(b);
160
- const y = await Ye(b);
158
+ const b = await fetch(Tn(e, n), { headers: r, signal: o.signal });
159
+ if (Nn(n)) return await ri(b);
160
+ const y = await Xe(b);
161
161
  if (!b.ok) {
162
- const S = bt(y);
162
+ const S = St(y);
163
163
  if (S) return { status: "preparing", ...S };
164
- throw new Error(St(y) ?? `${n} failed with ${b.status}`);
164
+ throw new Error(yt(y) ?? `${n} failed with ${b.status}`);
165
165
  }
166
- return y && typeof y == "object" && Tn(e, r["x-boring-workspace-id"] ?? o, n, y), { status: "ready" };
166
+ return y && typeof y == "object" && Dn(e, r["x-boring-workspace-id"] ?? s, n, y), { status: "ready" };
167
167
  } catch (b) {
168
168
  if (i.aborted) throw b;
169
- if (s.signal.aborted || b instanceof TypeError) return { status: "preparing" };
169
+ if (o.signal.aborted || b instanceof TypeError) return { status: "preparing" };
170
170
  throw b;
171
171
  } finally {
172
172
  globalThis.clearTimeout(c), i.removeEventListener("abort", u);
173
173
  }
174
174
  }
175
- function ii({
175
+ function si({
176
176
  workspaceId: e,
177
177
  requestHeaders: n,
178
178
  apiBaseUrl: r,
179
- preloadPaths: i = En,
180
- provisionWorkspace: o = !0,
181
- onStatusChange: s
179
+ preloadPaths: i = wn,
180
+ provisionWorkspace: s = !0,
181
+ onStatusChange: o
182
182
  }) {
183
183
  return E(() => {
184
184
  let c = !1;
185
- const u = new AbortController(), b = Ve(e, n);
185
+ const u = new AbortController(), b = ke(e, n);
186
186
  async function y() {
187
187
  var S, j;
188
- s == null || s({ status: "preparing" });
188
+ o == null || o({ status: "preparing" });
189
189
  try {
190
- const W = An(i, o), k = (p) => ri({
190
+ const W = Rn(i, s), V = (p) => ii({
191
191
  apiBaseUrl: r,
192
192
  path: p,
193
193
  headers: b,
194
194
  signal: u.signal,
195
195
  workspaceId: e
196
196
  });
197
- let R = await Promise.all(W.map(async (p) => ({ path: p, result: await k(p) })));
197
+ let R = await Promise.all(W.map(async (p) => ({ path: p, result: await V(p) })));
198
198
  if (c || u.signal.aborted) return;
199
199
  let h = (S = R.find((p) => p.result.runtimeDependencies)) == null ? void 0 : S.result.runtimeDependencies, T = R.filter((p) => p.result.status === "preparing");
200
200
  for (; T.length > 0; ) {
@@ -204,18 +204,18 @@ function ii({
204
204
  p = N.result.requirement;
205
205
  break;
206
206
  }
207
- if (s == null || s({ status: "preparing", message: "Workspace is still preparing", ...p ? { requirement: p } : {} }), await hn(u.signal), c || u.signal.aborted || (R = await Promise.all(T.map(async (N) => ({ path: N.path, result: await k(N.path) }))), c || u.signal.aborted)) return;
207
+ if (o == null || o({ status: "preparing", message: "Workspace is still preparing", ...p ? { requirement: p } : {} }), await bn(u.signal), c || u.signal.aborted || (R = await Promise.all(T.map(async (N) => ({ path: N.path, result: await V(N.path) }))), c || u.signal.aborted)) return;
208
208
  h = ((j = R.find((N) => N.result.runtimeDependencies)) == null ? void 0 : j.result.runtimeDependencies) ?? h, T = R.filter((N) => N.result.status === "preparing");
209
209
  }
210
- for (s == null || s({ status: "ready", ...h ? { runtimeDependencies: h } : {} }); (h == null ? void 0 : h.state) === "preparing"; ) {
211
- if (await hn(u.signal), c || u.signal.aborted) return;
212
- const p = await k("/api/v1/ready-status");
210
+ for (o == null || o({ status: "ready", ...h ? { runtimeDependencies: h } : {} }); (h == null ? void 0 : h.state) === "preparing"; ) {
211
+ if (await bn(u.signal), c || u.signal.aborted) return;
212
+ const p = await V("/api/v1/ready-status");
213
213
  if (c || u.signal.aborted) return;
214
- h = p.runtimeDependencies, h && (s == null || s({ status: "ready", runtimeDependencies: h }));
214
+ h = p.runtimeDependencies, h && (o == null || o({ status: "ready", runtimeDependencies: h }));
215
215
  }
216
216
  } catch (W) {
217
217
  if (c || u.signal.aborted) return;
218
- s == null || s({
218
+ o == null || o({
219
219
  status: "failed",
220
220
  message: W instanceof Error ? W.message : "Workspace failed to prepare"
221
221
  });
@@ -224,56 +224,53 @@ function ii({
224
224
  return y(), () => {
225
225
  c = !0, u.abort();
226
226
  };
227
- }, [r, s, i, o, n, e]), null;
227
+ }, [r, o, i, s, n, e]), null;
228
228
  }
229
229
  function oi(e) {
230
230
  return typeof (e == null ? void 0 : e.id) == "string" ? e.id : null;
231
231
  }
232
- function qe(e, n, r) {
232
+ function Ve(e, n, r) {
233
233
  if (e.includes(r)) return e;
234
- const i = n ? e.indexOf(n) : -1, o = i >= 0 ? i + 1 : e.length;
235
- return [...e.slice(0, o), r, ...e.slice(o)];
234
+ const i = n ? e.indexOf(n) : -1, s = i >= 0 ? i + 1 : e.length;
235
+ return [...e.slice(0, s), r, ...e.slice(s)];
236
236
  }
237
- function vn(e, n, r) {
237
+ function Sn(e, n, r) {
238
238
  if (e.includes(r)) return e;
239
239
  if (e.length === 0) return [r];
240
- const i = n ? e.indexOf(n) : -1, o = i >= 0 ? i : 0;
241
- return e.map((s, c) => c === o ? r : s);
242
- }
243
- function si(e, n) {
244
- return !!(e && e.title === n && e.turnCount === 0);
240
+ const i = n ? e.indexOf(n) : -1, s = i >= 0 ? i : 0;
241
+ return e.map((o, c) => c === s ? r : o);
245
242
  }
246
243
  function ai(e, n) {
247
244
  return e.endsWith(":surface") ? e.slice(0, -8) : n;
248
245
  }
249
- function pt(e, n, r) {
250
- const [i, o] = L(() => mn(e, n, r));
246
+ function ht(e, n, r) {
247
+ const [i, s] = O(() => hn(e, n, r));
251
248
  E(() => {
252
- o(mn(e, n, r));
249
+ s(hn(e, n, r));
253
250
  }, [e, n, r]);
254
- const s = w(
251
+ const o = w(
255
252
  (c) => {
256
- o(c), Kr(e, c, r);
253
+ s(c), Hr(e, c, r);
257
254
  },
258
255
  [r, e]
259
256
  );
260
- return [i, s];
257
+ return [i, o];
261
258
  }
262
- const ht = {}, li = [], bn = { status: "preparing" }, Sn = {
259
+ const vt = {}, li = [], yn = { status: "preparing" }, Pn = {
263
260
  openTabs: [],
264
261
  activeTab: null
265
262
  };
266
263
  function ci({ status: e }) {
267
- const n = e.status === "ready" ? void 0 : e.requirement, r = e.status !== "failed", i = r ? n === "workspace-fs" ? "Preparing files…" : n === "sandbox-exec" ? "Preparing secure runtime…" : n === "ui-bridge" ? "Connecting workspace…" : "Preparing workspace…" : "Workspace workbench failed", o = e.status === "failed" ? e.message : "Chat is ready while files, tools, and workspace panels finish warming up.";
268
- return /* @__PURE__ */ f("div", { className: "flex h-full min-h-0 items-center justify-center bg-background px-6 text-center", children: /* @__PURE__ */ ye("div", { className: "max-w-sm rounded-2xl border border-border bg-card p-5 shadow-sm", children: [
269
- r ? /* @__PURE__ */ f("div", { className: "mx-auto mb-3 h-7 w-7 rounded-full border-2 border-muted-foreground/20 border-t-foreground animate-spin", "aria-hidden": "true" }) : null,
270
- /* @__PURE__ */ f("div", { className: "text-sm font-semibold text-foreground", children: i }),
271
- /* @__PURE__ */ f("p", { className: "mt-2 text-sm text-muted-foreground", children: o }),
272
- e.status === "failed" ? /* @__PURE__ */ f("p", { className: "mt-3 text-xs text-muted-foreground", children: "Reload the workspace to retry." }) : null
264
+ const n = e.status === "ready" ? void 0 : e.requirement, r = e.status !== "failed", i = r ? n === "workspace-fs" ? "Preparing files…" : n === "sandbox-exec" ? "Preparing secure runtime…" : n === "ui-bridge" ? "Connecting workspace…" : "Preparing workspace…" : "Workspace workbench failed", s = e.status === "failed" ? e.message : "Chat is ready while files, tools, and workspace panels finish warming up.";
265
+ return /* @__PURE__ */ d("div", { className: "flex h-full min-h-0 items-center justify-center bg-background px-6 text-center", children: /* @__PURE__ */ ye("div", { className: "max-w-sm rounded-2xl border border-border bg-card p-5 shadow-sm", children: [
266
+ r ? /* @__PURE__ */ d("div", { className: "mx-auto mb-3 h-7 w-7 rounded-full border-2 border-muted-foreground/20 border-t-foreground animate-spin", "aria-hidden": "true" }) : null,
267
+ /* @__PURE__ */ d("div", { className: "text-sm font-semibold text-foreground", children: i }),
268
+ /* @__PURE__ */ d("p", { className: "mt-2 text-sm text-muted-foreground", children: s }),
269
+ e.status === "failed" ? /* @__PURE__ */ d("p", { className: "mt-3 text-xs text-muted-foreground", children: "Reload the workspace to retry." }) : null
273
270
  ] }) });
274
271
  }
275
272
  function ui(e) {
276
- const n = e.workspaceId ?? di(e.requestHeaders) ?? e.storageKey, r = _r({
273
+ const n = e.workspaceId ?? di(e.requestHeaders) ?? e.storageKey, r = Lr({
277
274
  apiBaseUrl: e.apiBaseUrl,
278
275
  workspaceId: n,
279
276
  storageScope: n,
@@ -303,15 +300,15 @@ function gi(e) {
303
300
  return null;
304
301
  }
305
302
  }
306
- function yn(e, n) {
303
+ function En(e, n) {
307
304
  var r;
308
305
  try {
309
306
  const i = (r = globalThis.localStorage) == null ? void 0 : r.getItem(e);
310
307
  if (!i) return null;
311
- const o = JSON.parse(i), s = Array.isArray(o.ids) ? o.ids.filter((u) => typeof u == "string" && u.length > 0) : [];
312
- if (s.length === 0) return null;
313
- const c = typeof o.activeId == "string" && s.includes(o.activeId) ? o.activeId : s[0];
314
- return { workspaceId: n, ids: s, activeId: c };
308
+ const s = JSON.parse(i), o = Array.isArray(s.ids) ? s.ids.filter((u) => typeof u == "string" && u.length > 0) : [];
309
+ if (o.length === 0) return null;
310
+ const c = typeof s.activeId == "string" && o.includes(s.activeId) ? s.activeId : o[0];
311
+ return { workspaceId: n, ids: o, activeId: c };
315
312
  } catch {
316
313
  return null;
317
314
  }
@@ -330,13 +327,13 @@ function mi(e, n) {
330
327
  } catch {
331
328
  }
332
329
  }
333
- function Pn(e, n) {
330
+ function An(e, n) {
334
331
  var r;
335
332
  try {
336
333
  const i = (r = globalThis.localStorage) == null ? void 0 : r.getItem(e);
337
334
  if (!i) return null;
338
- const o = JSON.parse(i), s = Array.isArray(o.ids) ? o.ids.filter((c) => typeof c == "string" && c.length > 0) : [];
339
- return { workspaceId: n, ids: s };
335
+ const s = JSON.parse(i), o = Array.isArray(s.ids) ? s.ids.filter((c) => typeof c == "string" && c.length > 0) : [];
336
+ return { workspaceId: n, ids: o };
340
337
  } catch {
341
338
  return null;
342
339
  }
@@ -353,10 +350,10 @@ function pi(e, n) {
353
350
  }
354
351
  }
355
352
  function hi() {
356
- return /* @__PURE__ */ f("div", { className: "flex h-full min-h-0 items-center justify-center bg-background px-6 text-center", children: /* @__PURE__ */ ye("div", { className: "max-w-sm rounded-2xl border border-border bg-card p-5 shadow-sm", children: [
357
- /* @__PURE__ */ f("div", { className: "mx-auto mb-3 h-7 w-7 rounded-full border-2 border-muted-foreground/20 border-t-foreground animate-spin", "aria-hidden": "true" }),
358
- /* @__PURE__ */ f("div", { className: "text-sm font-semibold text-foreground", children: "Loading sessions…" }),
359
- /* @__PURE__ */ f("p", { className: "mt-2 text-sm text-muted-foreground", children: "Finding this workspace’s saved chats." })
353
+ return /* @__PURE__ */ d("div", { className: "flex h-full min-h-0 items-center justify-center bg-background px-6 text-center", children: /* @__PURE__ */ ye("div", { className: "max-w-sm rounded-2xl border border-border bg-card p-5 shadow-sm", children: [
354
+ /* @__PURE__ */ d("div", { className: "mx-auto mb-3 h-7 w-7 rounded-full border-2 border-muted-foreground/20 border-t-foreground animate-spin", "aria-hidden": "true" }),
355
+ /* @__PURE__ */ d("div", { className: "text-sm font-semibold text-foreground", children: "Loading sessions…" }),
356
+ /* @__PURE__ */ d("p", { className: "mt-2 text-sm text-muted-foreground", children: "Finding this workspace’s saved chats." })
360
357
  ] }) });
361
358
  }
362
359
  function vi(e) {
@@ -369,7 +366,7 @@ function bi(e) {
369
366
  }
370
367
  function Si(e) {
371
368
  var i;
372
- const n = e.openTabs.find((o) => o.id === e.activeTab), r = (i = n == null ? void 0 : n.params) == null ? void 0 : i.path;
369
+ const n = e.openTabs.find((s) => s.id === e.activeTab), r = (i = n == null ? void 0 : n.params) == null ? void 0 : i.path;
373
370
  return typeof r == "string" ? r : null;
374
371
  }
375
372
  function yi({
@@ -377,13 +374,13 @@ function yi({
377
374
  requestHeaders: n,
378
375
  navOpen: r,
379
376
  surfaceOpen: i,
380
- surfaceReady: o,
381
- snapshot: s
377
+ surfaceReady: s,
378
+ snapshot: o
382
379
  }) {
383
- const c = Nn(), u = J(null);
380
+ const c = _n(), u = J(null);
384
381
  return E(() => {
385
382
  var S;
386
- if (e === null || i && !o) return;
383
+ if (e === null || i && !s) return;
387
384
  (S = u.current) == null || S.abort();
388
385
  const b = new AbortController();
389
386
  u.current = b;
@@ -391,9 +388,9 @@ function yi({
391
388
  v: 1,
392
389
  drawerOpen: r,
393
390
  workbenchOpen: i,
394
- openTabs: s.openTabs,
395
- activeTab: s.activeTab,
396
- activeFile: Si(s),
391
+ openTabs: o.openTabs,
392
+ activeTab: o.activeTab,
393
+ activeFile: Si(o),
397
394
  availablePanels: c.list().map((j) => j.id)
398
395
  };
399
396
  return fetch(bi(e), {
@@ -405,15 +402,15 @@ function yi({
405
402
  }), () => {
406
403
  b.abort();
407
404
  };
408
- }, [e, r, c, n, s, i, o]), null;
405
+ }, [e, r, c, n, o, i, s]), null;
409
406
  }
410
- function Hi({
407
+ function Ji({
411
408
  workspaceId: e,
412
409
  chatPanel: n,
413
410
  useSessions: r,
414
411
  requestHeaders: i,
415
- sessionStorageKey: o,
416
- providerStorageKey: s,
412
+ sessionStorageKey: s,
413
+ providerStorageKey: o,
417
414
  surfaceStorageKey: c,
418
415
  beforeShell: u,
419
416
  afterShell: b,
@@ -421,476 +418,472 @@ function Hi({
421
418
  commands: S,
422
419
  catalogs: j,
423
420
  plugins: W,
424
- excludeDefaults: k,
421
+ excludeDefaults: V,
425
422
  capabilities: R,
426
423
  apiBaseUrl: h,
427
424
  authHeaders: T,
428
425
  apiTimeout: p,
429
426
  defaultTheme: N,
430
- onThemeChange: Dn,
431
- persistenceEnabled: yt,
432
- debug: _n,
433
- bridgeEndpoint: ke,
434
- fullPageBasePath: Ln,
435
- onAuthError: On,
436
- sessions: Pt,
437
- activeSessionId: Et,
438
- onSwitchSession: At,
439
- onCreateSession: wt,
427
+ onThemeChange: Ln,
428
+ persistenceEnabled: Pt,
429
+ debug: On,
430
+ bridgeEndpoint: Qe,
431
+ fullPageBasePath: xn,
432
+ onAuthError: Mn,
433
+ sessions: Et,
434
+ activeSessionId: At,
435
+ onSwitchSession: wt,
436
+ onCreateSession: Ze,
440
437
  onDeleteSession: Rt,
441
438
  onActiveSessionIdChange: Pe,
442
- appTitle: xn = "Sovereign Workspace",
443
- workspaceLabel: Mn,
444
- defaultSessionTitle: q = "New session",
439
+ appTitle: Cn = "Sovereign Workspace",
440
+ workspaceLabel: Fn,
441
+ defaultSessionTitle: Y = "New session",
445
442
  navEnabled: Tt = !0,
446
- defaultNavOpen: Cn = !1,
447
- defaultSurfaceOpen: Fn,
443
+ defaultNavOpen: Wn = !1,
444
+ defaultSurfaceOpen: Gn,
448
445
  defaultWorkbenchLeftTab: Ee,
449
- defaultWorkbenchLeftOpen: Xe,
446
+ defaultWorkbenchLeftOpen: et,
450
447
  surfaceInitialPanels: Nt,
451
- topBarLeft: Wn,
452
- topBarRight: Gn,
453
- showThemeToggle: In = !0,
454
- chatParams: _,
455
- externalPlugins: $n,
456
- hotReloadEnabled: Un,
457
- frontPluginHotReload: Kn,
448
+ topBarLeft: In,
449
+ topBarRight: $n,
450
+ showThemeToggle: Un = !0,
451
+ chatParams: L,
452
+ externalPlugins: Kn,
453
+ hotReloadEnabled: Hn,
454
+ frontPluginHotReload: Jn,
458
455
  extraPanels: Dt,
459
456
  extraCommands: _t,
460
- provisionWorkspace: Qe,
461
- bootPreloadPaths: Hn,
457
+ provisionWorkspace: tt,
458
+ bootPreloadPaths: jn,
462
459
  onWorkspaceWarmupStatusChange: Ae,
463
- onOpenNav: Ze,
464
- onOpenSurface: et,
465
- surfaceButtonBottomOffset: Jn,
466
- className: jn
460
+ onOpenNav: nt,
461
+ onOpenSurface: rt,
462
+ surfaceButtonBottomOffset: Bn,
463
+ className: qn
467
464
  }) {
468
- var sn, an;
469
- const Lt = $n !== !1, Bn = Lt ? Kn : !1, tt = Lt ? Un : !1, nt = s ?? `boring-ui-v2:layout:${e}`, G = c ?? `${nt}:surface`, we = ai(
465
+ var ln, cn;
466
+ const Lt = Kn !== !1, zn = Lt ? Jn : !1, it = Lt ? Hn : !1, st = o ?? `boring-ui-v2:layout:${e}`, G = c ?? `${st}:surface`, we = ai(
470
467
  G,
471
- nt
472
- ), x = yt !== !1, Re = o ?? `boring-workspace:sessions:${e}`, X = F(
473
- () => Ve(e, i ?? ht),
468
+ st
469
+ ), M = Pt !== !1, Re = s ?? `boring-workspace:sessions:${e}`, k = F(
470
+ () => ke(e, i ?? vt),
474
471
  [i, e]
475
- ), qn = F(
476
- () => Ve(e, { ...i ?? ht, ...T ?? ht }),
472
+ ), Vn = F(
473
+ () => ke(e, { ...i ?? vt, ...T ?? vt }),
477
474
  [T, i, e]
478
475
  ), Te = F(
479
- () => kr({ storageKey: Re }),
476
+ () => Xr({ storageKey: Re }),
480
477
  [Re]
481
- ), Ot = Xr(Te), [xt, zn] = L(() => ({
478
+ ), Ot = Qr(Te), [xt, Yn] = O(() => ({
482
479
  workspaceId: e,
483
- status: bn
484
- })), [Ne, rt] = L(() => ({
480
+ status: yn
481
+ })), [Ne, ot] = O(() => ({
485
482
  workspaceId: e,
486
483
  expired: !1
487
- })), [Mt, De] = L(() => ({
484
+ })), [Mt, De] = O(() => ({
488
485
  workspaceId: e,
489
486
  creating: !1
490
- })), [Ct, _e] = L(() => ({
487
+ })), [Ct, _e] = O(() => ({
491
488
  workspaceId: e,
492
489
  failed: !1
493
- })), [it, Ft] = L(null), ue = `boring-workspace:chat-panes:${e}`, [D, z] = L(
494
- () => (x ? yn(ue, e) : null) ?? { workspaceId: e, ids: [], activeId: null }
495
- ), [re, Wt] = L(null);
490
+ })), [at, Ft] = O(null), de = `boring-workspace:chat-panes:${e}`, [D, q] = O(
491
+ () => (M ? En(de, e) : null) ?? { workspaceId: e, ids: [], activeId: null }
492
+ ), [ie, Wt] = O(null);
496
493
  E(() => {
497
- if (!re) return;
494
+ if (!ie) return;
498
495
  const t = setTimeout(() => Wt(null), 700);
499
496
  return () => clearTimeout(t);
500
- }, [re]);
501
- const de = `boring-workspace:pinned-sessions:${e}`, [Gt, It] = L(
502
- () => (x ? Pn(de, e) : null) ?? { workspaceId: e, ids: [] }
503
- ), Vn = Gt.workspaceId === e ? Gt.ids : li;
497
+ }, [ie]);
498
+ const fe = `boring-workspace:pinned-sessions:${e}`, [Gt, It] = O(
499
+ () => (M ? An(fe, e) : null) ?? { workspaceId: e, ids: [] }
500
+ ), kn = Gt.workspaceId === e ? Gt.ids : li;
504
501
  E(() => {
505
- It((t) => t.workspaceId === e ? t : (x ? Pn(de, e) : null) ?? { workspaceId: e, ids: [] });
506
- }, [de, x, e]);
507
- const Yn = w((t) => {
502
+ It((t) => t.workspaceId === e ? t : (M ? An(fe, e) : null) ?? { workspaceId: e, ids: [] });
503
+ }, [fe, M, e]);
504
+ const Xn = w((t) => {
508
505
  It((a) => {
509
506
  const l = a.workspaceId === e ? a.ids : [], g = l.includes(t) ? l.filter((v) => v !== t) : [t, ...l];
510
- return x && pi(de, g), { workspaceId: e, ids: g };
507
+ return M && pi(fe, g), { workspaceId: e, ids: g };
511
508
  });
512
- }, [de, x, e]);
509
+ }, [fe, M, e]);
513
510
  E(() => {
514
- x && D.workspaceId === e && mi(ue, D);
515
- }, [D, ue, x, e]), E(() => {
516
- z((t) => t.workspaceId === e ? t : (x ? yn(ue, e) : null) ?? { workspaceId: e, ids: [], activeId: null });
517
- }, [ue, x, e]);
518
- const Le = xt.workspaceId === e ? xt.status : bn, kn = n ?? Dr, Xn = r ?? ui, ie = !n || !!r, Oe = ie && Qe !== !1, ot = () => {
519
- }, M = Xn({
520
- requestHeaders: X,
511
+ M && D.workspaceId === e && mi(de, D);
512
+ }, [D, de, M, e]), E(() => {
513
+ q((t) => t.workspaceId === e ? t : (M ? En(de, e) : null) ?? { workspaceId: e, ids: [], activeId: null });
514
+ }, [de, M, e]);
515
+ const Le = xt.workspaceId === e ? xt.status : yn, Qn = n ?? _r, Zn = r ?? ui, X = !n || !!r, Oe = X && tt !== !1, lt = () => {
516
+ }, _ = Zn({
517
+ requestHeaders: k,
521
518
  storageKey: Re,
522
519
  workspaceId: e,
523
520
  apiBaseUrl: h,
524
521
  enabled: Oe
525
- }), [fe, Qn] = L(() => ({ workspaceId: e, sessions: [], activeSessionId: null })), Zn = Oe && M.workspaceId != null && M.workspaceId !== e, V = Oe && !M.loading && !M.error && !Zn, I = Oe && !V;
522
+ }), [ge, er] = O(() => ({ workspaceId: e, sessions: [], activeSessionId: null })), $t = Oe && _.workspaceId != null && _.workspaceId !== e, z = Oe && !_.loading && !_.error && !$t, C = Oe && !z;
526
523
  E(() => {
527
- V && Qn((t) => {
528
- const a = t.workspaceId === e, l = t.activeSessionId === M.activeSessionId, g = t.sessions.length === M.sessions.length && t.sessions.every((v, A) => {
529
- var te;
530
- return v.id === ((te = M.sessions[A]) == null ? void 0 : te.id);
524
+ z && er((t) => {
525
+ const a = t.workspaceId === e, l = t.activeSessionId === _.activeSessionId, g = t.sessions.length === _.sessions.length && t.sessions.every((v, A) => {
526
+ var ne;
527
+ return v.id === ((ne = _.sessions[A]) == null ? void 0 : ne.id);
531
528
  });
532
529
  return a && l && g ? t : {
533
530
  workspaceId: e,
534
- sessions: M.sessions,
535
- activeSessionId: M.activeSessionId
531
+ sessions: _.sessions,
532
+ activeSessionId: _.activeSessionId
536
533
  };
537
534
  });
538
- }, [M.activeSessionId, M.sessions, V, e]);
539
- const st = I && fe.workspaceId === e && fe.sessions.length > 0, at = I ? gi(Re) : null, Y = V ? M.sessions : st ? fe.sessions : [], er = V ? M.activeSessionId : st ? fe.activeSessionId : null, d = ie && (V || st) ? M : void 0, ge = Pt !== void 0 || Et !== void 0 || At !== void 0 || wt !== void 0 || Rt !== void 0, $t = Ne.workspaceId === e && Ne.expired, me = J(!1), pe = !!(V && d && !ge && Y.length === 0 && !$t), tr = Mt.workspaceId === e && Mt.creating, nr = Ct.workspaceId === e && Ct.failed, rr = !!(V && d && !ge && Y.length === 0 && $t && !me.current && !nr), xe = pe || tr || rr;
535
+ }, [_.activeSessionId, _.sessions, z, e]);
536
+ const xe = C && ge.workspaceId === e && ge.sessions.length > 0, Me = C ? gi(Re) : null, Ut = C && !$t ? _.activeSessionId ?? null : null, Q = z ? _.sessions : xe ? ge.sessions : [], tr = z ? _.activeSessionId : xe ? ge.activeSessionId : null, f = X && (z || xe) ? _ : void 0, se = Et !== void 0 || At !== void 0 || wt !== void 0 || Ze !== void 0 || Rt !== void 0, Kt = Ne.workspaceId === e && Ne.expired, me = J(!1), pe = !!(z && f && !se && Q.length === 0 && !Kt), nr = Mt.workspaceId === e && Mt.creating, rr = Ct.workspaceId === e && Ct.failed, ir = !!(z && f && !se && Q.length === 0 && Kt && !me.current && !rr), Ce = !!(C && _.loading && !_.error && X && !se && !xe && !Me && !Ut) || pe || nr || ir;
540
537
  E(() => {
541
538
  if (!pe) {
542
- Ne.workspaceId !== e && rt({ workspaceId: e, expired: !1 });
539
+ Ne.workspaceId !== e && ot({ workspaceId: e, expired: !1 });
543
540
  return;
544
541
  }
545
- rt({ workspaceId: e, expired: !1 });
542
+ ot({ workspaceId: e, expired: !1 });
546
543
  const t = globalThis.setTimeout(() => {
547
- rt({ workspaceId: e, expired: !0 });
544
+ ot({ workspaceId: e, expired: !0 });
548
545
  }, 2e3);
549
546
  return () => globalThis.clearTimeout(t);
550
547
  }, [Ne.workspaceId, pe, e]);
551
- const ir = d ? Y.map((t) => ({
548
+ const sr = f ? Q.map((t) => ({
552
549
  ...t,
553
550
  title: t.title ?? "New session"
554
- })) : void 0, or = at ? [{
555
- id: at,
551
+ })) : void 0, or = Me ? [{
552
+ id: Me,
556
553
  title: "Loading sessions…",
557
554
  createdAt: (/* @__PURE__ */ new Date(0)).toISOString(),
558
555
  updatedAt: (/* @__PURE__ */ new Date(0)).toISOString(),
559
556
  turnCount: 0
560
- }] : [], $ = d ? ir ?? [] : I ? or : ge ? Pt ?? [] : Ot.sessions, sr = d ? er ?? null : I ? at : ge ? Et ?? null : Ot.activeId, oe = (_ == null ? void 0 : _.autoSubmitInitialDraft) === !0, Me = oe && ie && !ge, [U, he] = L(() => Me ? null : void 0), Ut = J(e), se = J(!1);
557
+ }] : [], $ = f ? sr ?? [] : C ? or : se ? Et ?? [] : Ot.sessions, ar = f ? tr ?? null : C ? Me ?? Ut : se ? At ?? null : Ot.activeId, oe = (L == null ? void 0 : L.autoSubmitInitialDraft) === !0, Fe = oe && X && !se, [U, he] = O(() => Fe ? null : void 0), Ht = J(e), ae = J(!1);
561
558
  E(() => {
562
- if (Ut.current !== e) {
563
- Ut.current = e, se.current = !1, he(Me ? null : void 0);
559
+ if (Ht.current !== e) {
560
+ Ht.current = e, ae.current = !1, he(Fe ? null : void 0);
564
561
  return;
565
562
  }
566
- Me && U === void 0 && (se.current = !1, he(null));
567
- }, [U, Me, e]), E(() => {
568
- !d || U !== null || se.current || (se.current = !0, Promise.resolve(d.create({ title: q })).then((t) => {
563
+ Fe && U === void 0 && (ae.current = !1, he(null));
564
+ }, [U, Fe, e]), E(() => {
565
+ !f || U !== null || ae.current || (ae.current = !0, Promise.resolve(f.create({ title: Y })).then((t) => {
569
566
  if (typeof (t == null ? void 0 : t.id) != "string")
570
567
  throw new Error("auto_submit_session_create_failed");
571
568
  he(t.id);
572
569
  }).catch(() => {
573
- se.current = !1, he(void 0);
570
+ ae.current = !1, he(void 0);
574
571
  }));
575
- }, [U, q, d]);
576
- const C = U !== void 0 ? U ?? null : sr, H = I ? ot : (d == null ? void 0 : d.switch) ?? At ?? Te.switchTo, Ce = w((t) => (C && t !== C && window.dispatchEvent(new CustomEvent("boring:workspace-composer-stop", { detail: { sessionId: C } })), H(t)), [C, H]), lt = I ? ot : d ? () => {
577
- const t = Y.find((l) => l.id === C && si(l, q)), a = d.create();
578
- return t && Promise.resolve(a).then(() => d.delete(t.id)).catch(() => {
579
- }), a;
580
- } : wt ?? Te.create, Kt = I ? ot : (d == null ? void 0 : d.delete) ?? Rt ?? Te.remove, Ht = w((t) => (d && Y.length <= 1 && (me.current = !0), Kt(t)), [Y.length, Kt, d]), ar = ((sn = $.find((t) => t.id === C)) == null ? void 0 : sn.title) ?? void 0, [lr, Jt] = pt(
572
+ }, [U, Y, f]);
573
+ const I = U !== void 0 ? U ?? null : ar, H = C ? lt : (f == null ? void 0 : f.switch) ?? wt ?? Te.switchTo, We = w((t) => (I && t !== I && window.dispatchEvent(new CustomEvent("boring:workspace-composer-stop", { detail: { sessionId: I } })), H(t)), [I, H]), ct = C ? lt : f ? () => f.create() : Ze ? () => Ze() : () => Te.create(), Jt = C ? lt : (f == null ? void 0 : f.delete) ?? Rt ?? Te.remove, jt = w((t) => (f && Q.length <= 1 && (me.current = !0), Jt(t)), [Q.length, Jt, f]), lr = ((ln = $.find((t) => t.id === I)) == null ? void 0 : ln.title) ?? void 0, [cr, Bt] = ht(
581
574
  `${we}:drawer`,
582
- Cn,
583
- x
584
- ), jt = Tt && lr, [Q, B] = pt(
575
+ Wn,
576
+ M
577
+ ), qt = Tt && cr, [Z, B] = ht(
585
578
  // Key must NOT match resolvedSurfaceStorageKey (which stores the dockview
586
579
  // layout JSON at the same ":surface" suffix). Writing "1"/"0" to the same
587
580
  // key corrupts the JSON and drops the persisted workbench layout on reload.
588
581
  `${we}:workbenchOpen`,
589
- Fn ?? !1,
590
- x
591
- ), [cr, ct] = L(!1), [ur, ve] = pt(
582
+ Gn ?? !1,
583
+ M
584
+ ), [ur, ut] = O(!1), [dr, ve] = ht(
592
585
  `${we}:workbenchLeftOpen`,
593
- Xe ?? !1,
594
- x
595
- ), [dr, Fe] = L(() => Xe ?? !1), fr = Xe === !1 ? dr : ur, be = J(!1), Z = J(null), ee = J(Q), Bt = J(G), ut = J(null);
596
- Bt.current = G;
597
- const [qt, zt] = L(() => ({
586
+ et ?? !1,
587
+ M
588
+ ), [fr, Ge] = O(() => et ?? !1), gr = et === !1 ? fr : dr, be = J(!1), ee = J(null), te = J(Z), zt = J(G), dt = J(null);
589
+ zt.current = G;
590
+ const [Vt, Yt] = O(() => ({
598
591
  key: G,
599
- snapshot: Sn
600
- })), gr = qt.key === G ? qt.snapshot : Sn;
592
+ snapshot: Pn
593
+ })), mr = Vt.key === G ? Vt.snapshot : Pn;
601
594
  E(() => {
602
595
  be.current = !1, me.current = !1, De({ workspaceId: e, creating: !1 }), _e({ workspaceId: e, failed: !1 }), Ft(null);
603
596
  }, [e]), E(() => {
604
- ct(!1);
597
+ ut(!1);
605
598
  }, [G]), E(() => {
606
- if (!(!d || d.loading) && !pe && U === void 0) {
607
- if (Y.length > 0) {
599
+ if (!(!f || f.loading) && !pe && U === void 0) {
600
+ if (Q.length > 0) {
608
601
  be.current = !1, me.current = !1, De((t) => t.workspaceId === e && t.creating ? { workspaceId: e, creating: !1 } : t), _e((t) => t.workspaceId === e && t.failed ? { workspaceId: e, failed: !1 } : t);
609
602
  return;
610
603
  }
611
- me.current || be.current || (be.current = !0, De({ workspaceId: e, creating: !0 }), _e({ workspaceId: e, failed: !1 }), Promise.resolve(d.create({ title: q })).then((t) => {
604
+ me.current || be.current || (be.current = !0, De({ workspaceId: e, creating: !0 }), _e({ workspaceId: e, failed: !1 }), Promise.resolve(f.create({ title: Y })).then((t) => {
612
605
  const a = t == null ? void 0 : t.id;
613
606
  typeof a == "string" && Ft({ workspaceId: e, id: a });
614
607
  }).catch(() => {
615
608
  be.current = !1, De({ workspaceId: e, creating: !1 }), _e({ workspaceId: e, failed: !0 });
616
609
  }));
617
610
  }
618
- }, [Y.length, U, q, pe, d, e]), E(() => {
619
- ee.current = Q;
620
- }, [Q]);
621
- const Vt = w((t) => {
622
- ut.current = { key: G, api: t }, ct(!0), zt({
611
+ }, [Q.length, U, Y, pe, f, e]), E(() => {
612
+ te.current = Z;
613
+ }, [Z]);
614
+ const kt = w((t) => {
615
+ dt.current = { key: G, api: t }, ut(!0), Yt({
623
616
  key: G,
624
617
  snapshot: t.getSnapshot()
625
618
  });
626
- }, [G]), Yt = w((t) => {
627
- zt({
619
+ }, [G]), Xt = w((t) => {
620
+ Yt({
628
621
  key: G,
629
622
  snapshot: t
630
623
  });
631
- }, [G]), We = w(() => {
632
- const t = ut.current;
633
- return (t == null ? void 0 : t.key) === Bt.current ? t.api : null;
634
- }, []), Ge = w(() => ee.current, []), Ie = w(() => {
635
- ee.current = !0, B(!0);
636
- }, [B]), $e = w(() => {
637
- ee.current = !0, B(!0), ve(!0), Fe(!0);
638
- }, [B, ve]), Ue = w(() => {
639
- ee.current = !1, ut.current = null, ct(!1), B(!1);
640
- }, [B]), ae = F(
641
- () => (W == null ? void 0 : W.map(xr)) ?? [],
624
+ }, [G]), Ie = w(() => {
625
+ const t = dt.current;
626
+ return (t == null ? void 0 : t.key) === zt.current ? t.api : null;
627
+ }, []), $e = w(() => te.current, []), Ue = w(() => {
628
+ te.current = !0, B(!0);
629
+ }, [B]), Ke = w(() => {
630
+ te.current = !0, B(!0), ve(!0), Ge(!0);
631
+ }, [B, ve]), He = w(() => {
632
+ te.current = !1, dt.current = null, ut(!1), B(!1);
633
+ }, [B]), le = F(
634
+ () => (W == null ? void 0 : W.map(Mr)) ?? [],
642
635
  [W]
643
- ), dt = F(
644
- () => ae.some((t) => t.registrations.leftTabs.length > 0),
645
- [ae]
646
- ), kt = F(
647
- () => ae.flatMap((t) => t.registrations.panels.map((a) => a.id)),
648
- [ae]
649
- ), Xt = F(() => {
636
+ ), ft = F(
637
+ () => le.some((t) => t.registrations.leftTabs.length > 0),
638
+ [le]
639
+ ), Qt = F(
640
+ () => le.flatMap((t) => t.registrations.panels.map((a) => a.id)),
641
+ [le]
642
+ ), Zt = F(() => {
650
643
  const t = {};
651
- for (const a of ae)
644
+ for (const a of le)
652
645
  for (const l of a.registrations.toolRenderers)
653
646
  t[l.id] = l.render;
654
647
  return t;
655
- }, [ae]), Qt = F(
656
- () => [...Dt ?? [], ...kt],
657
- [Dt, kt]
658
- ), m = ie && !r && fe.workspaceId !== e ? "default" : C ?? (U !== void 0 ? "default" : ((an = $[0]) == null ? void 0 : an.id) ?? "default"), Zt = !(d != null && d.hasMore) && !I;
648
+ }, [le]), en = F(
649
+ () => [...Dt ?? [], ...Qt],
650
+ [Dt, Qt]
651
+ ), m = X && !r && ge.workspaceId !== e ? "default" : I ?? (U !== void 0 ? "default" : ((cn = $[0]) == null ? void 0 : cn.id) ?? "default"), tn = !(f != null && f.hasMore) && !C;
659
652
  E(() => {
660
- var te, ln;
661
- if (xe) return;
662
- const t = Z.current, a = new Set($.map((K) => K.id)), l = t ? t.createdId ?? (a.has(m) && !t.knownIds.has(m) ? m : ((te = $.find((K) => !t.knownIds.has(K.id))) == null ? void 0 : te.id) ?? null) : null;
663
- l && a.has(l) && (Z.current = null);
664
- const g = m === "default" && U !== void 0, v = Zt && a.size > 0 && !g, A = l ?? (v && !a.has(m) ? ((ln = $[0]) == null ? void 0 : ln.id) ?? m : m);
665
- z((K) => {
666
- const ne = K.workspaceId === e ? K : { workspaceId: e, ids: [], activeId: null };
667
- if (I && ne.ids.length > 0 && !l) return ne;
668
- const cn = ne.ids.length > 0 ? ne.ids : [A], un = v ? cn.filter((Be) => a.has(Be) || Be === l) : cn, le = un.length > 0 ? un : [A], dn = ne.activeId && le.includes(ne.activeId) ? ne.activeId : le[0] ?? A, Se = l ? qe(le, t == null ? void 0 : t.afterId, l) : A === dn || le.includes(A) ? le : vn(le, dn, A), fn = Se.includes(A) ? A : Se[0] ?? A;
669
- return K.workspaceId === e && K.activeId === fn && K.ids.length === Se.length && K.ids.every((Be, Rr) => Be === Se[Rr]) ? K : { workspaceId: e, ids: Se, activeId: fn };
653
+ var ne, un;
654
+ if (Ce) return;
655
+ const t = ee.current, a = new Set($.map((K) => K.id)), l = t ? t.createdId ?? (a.has(m) && !t.knownIds.has(m) ? m : ((ne = $.find((K) => !t.knownIds.has(K.id))) == null ? void 0 : ne.id) ?? null) : null;
656
+ l && a.has(l) && (ee.current = null);
657
+ const g = m === "default" && U !== void 0, v = tn && a.size > 0 && !g, A = l ?? (v && !a.has(m) ? ((un = $[0]) == null ? void 0 : un.id) ?? m : m);
658
+ q((K) => {
659
+ const re = K.workspaceId === e ? K : { workspaceId: e, ids: [], activeId: null };
660
+ if (C && re.ids.length > 0 && !l) return re;
661
+ const dn = re.ids.length > 0 ? re.ids : [A], fn = v ? dn.filter((ze) => a.has(ze) || ze === l) : dn, ce = fn.length > 0 ? fn : [A], gn = re.activeId && ce.includes(re.activeId) ? re.activeId : ce[0] ?? A, Se = l ? Ve(ce, t == null ? void 0 : t.afterId, l) : A === gn || ce.includes(A) ? ce : Sn(ce, gn, A), mn = Se.includes(A) ? A : Se[0] ?? A;
662
+ return K.workspaceId === e && K.activeId === mn && K.ids.length === Se.length && K.ids.every((ze, Tr) => ze === Se[Tr]) ? K : { workspaceId: e, ids: Se, activeId: mn };
670
663
  });
671
- }, [U, m, I, xe, $, Zt, e]);
672
- const en = F(() => {
664
+ }, [U, m, C, Ce, $, tn, e]);
665
+ const nn = F(() => {
673
666
  const t = /* @__PURE__ */ new Map();
674
667
  for (const a of $) t.set(a.id, a.title);
675
668
  return t;
676
- }, [$]), ft = D.workspaceId === e ? D : { ids: [], activeId: null }, Ke = ft.ids.length > 0 ? ft.ids : [m], He = ft.activeId ?? Ke[0] ?? m, mr = w((t) => {
669
+ }, [$]), gt = D.workspaceId === e ? D : { ids: [], activeId: null }, Je = gt.ids.length > 0 ? gt.ids : [m], je = gt.activeId ?? Je[0] ?? m, pr = w((t) => {
677
670
  const l = (D.workspaceId === e ? D : { ids: [m] }).ids.includes(t);
678
- return z((g) => {
679
- const v = g.workspaceId === e ? g : { ids: [m], activeId: m }, A = v.ids.includes(t) ? v.ids : vn(v.ids, v.activeId, t);
671
+ return q((g) => {
672
+ const v = g.workspaceId === e ? g : { ids: [m], activeId: m }, A = v.ids.includes(t) ? v.ids : Sn(v.ids, v.activeId, t);
680
673
  return { workspaceId: e, ids: A, activeId: t };
681
- }), l ? H(t) : Ce(t);
682
- }, [D, m, H, Ce, e]), pr = w((t) => (z((a) => {
674
+ }), l ? H(t) : We(t);
675
+ }, [D, m, H, We, e]), hr = w((t) => (q((a) => {
683
676
  const l = a.workspaceId === e ? a : { ids: [m], activeId: m };
684
677
  return {
685
678
  workspaceId: e,
686
- ids: l.ids.includes(t) ? l.ids : qe(l.ids, l.activeId, t),
679
+ ids: l.ids.includes(t) ? l.ids : Ve(l.ids, l.activeId, t),
687
680
  activeId: t
688
681
  };
689
- }), H(t)), [m, H, e]), tn = w((t) => ((D.workspaceId === e ? D : { ids: [m] }).ids.includes(t) && Wt({ workspaceId: e, id: t }), z((l) => {
682
+ }), H(t)), [m, H, e]), rn = w((t) => ((D.workspaceId === e ? D : { ids: [m] }).ids.includes(t) && Wt({ workspaceId: e, id: t }), q((l) => {
690
683
  const g = l.workspaceId === e ? l : { ids: [m], activeId: m };
691
684
  return {
692
685
  workspaceId: e,
693
- ids: qe(g.ids, g.activeId, t),
686
+ ids: Ve(g.ids, g.activeId, t),
694
687
  activeId: t
695
688
  };
696
- }), H(t)), [D, m, H, e]), hr = w((t) => {
689
+ }), H(t)), [D, m, H, e]), vr = w((t) => {
697
690
  const a = D.workspaceId === e ? D : { ids: [m], activeId: m };
698
691
  if (a.ids.length <= 1) return;
699
692
  const l = a.ids.indexOf(t);
700
693
  if (l < 0) return;
701
694
  const g = a.ids.filter((A) => A !== t), v = a.activeId === t ? g[Math.max(0, l - 1)] ?? g[0] ?? null : a.activeId;
702
- z({ workspaceId: e, ids: g, activeId: v }), v && a.activeId === t && H(v);
703
- }, [D, m, H, e]), vr = w((t) => {
695
+ q({ workspaceId: e, ids: g, activeId: v }), v && a.activeId === t && H(v);
696
+ }, [D, m, H, e]), br = w((t) => {
704
697
  const a = {
705
698
  afterId: t,
706
699
  knownIds: new Set($.map((g) => g.id))
707
700
  };
708
- Z.current = a;
709
- const l = lt();
701
+ ee.current = a;
702
+ const l = ct();
710
703
  return Promise.resolve(l).then((g) => {
711
704
  const v = oi(g);
712
- v && (Z.current === a && (Z.current = { ...a, createdId: v }), z((A) => {
713
- const te = A.workspaceId === e ? A : { ids: [m] };
705
+ v && (ee.current === a && (ee.current = { ...a, createdId: v }), q((A) => {
706
+ const ne = A.workspaceId === e ? A : { ids: [m] };
714
707
  return {
715
708
  workspaceId: e,
716
- ids: qe(te.ids, t, v),
709
+ ids: Ve(ne.ids, t, v),
717
710
  activeId: v
718
711
  };
719
712
  }));
720
713
  }).catch(() => {
721
- Z.current === a && (Z.current = null);
714
+ ee.current === a && (ee.current = null);
722
715
  }), l;
723
- }, [m, lt, $, e]), br = w((t) => {
716
+ }, [m, ct, $, e]), Sr = w((t) => {
724
717
  const a = D.workspaceId === e ? D : { ids: [m], activeId: m }, l = a.ids.indexOf(t);
725
718
  let g = a.activeId;
726
719
  if (l >= 0) {
727
720
  const v = a.ids.filter((A) => A !== t);
728
- g = a.activeId === t ? v[Math.max(0, l - 1)] ?? v[0] ?? null : a.activeId, z({ workspaceId: e, ids: v, activeId: g }), g && a.activeId === t && Ce(g);
721
+ g = a.activeId === t ? v[Math.max(0, l - 1)] ?? v[0] ?? null : a.activeId, q({ workspaceId: e, ids: v, activeId: g }), g && a.activeId === t && We(g);
729
722
  }
730
- return Ht(t);
731
- }, [D, m, Ht, Ce, e]), [Sr, gt] = L(oe), nn = J(e);
723
+ return jt(t);
724
+ }, [D, m, jt, We, e]), [yr, mt] = O(oe), sn = J(e);
732
725
  E(() => {
733
- if (nn.current !== e) {
734
- nn.current = e, gt(oe);
726
+ if (sn.current !== e) {
727
+ sn.current = e, mt(oe);
735
728
  return;
736
729
  }
737
- oe && gt(!0);
730
+ oe && mt(!0);
738
731
  }, [oe, e]);
739
- const rn = oe && ie && !C, on = !!!(it && it.workspaceId === e && it.id === C) && !Sr && Qe !== !1 && (ie ? !!C : !0), yr = w((t) => {
740
- zn({ workspaceId: e, status: t }), Ae == null || Ae(t);
732
+ const on = oe && X && !I, an = !!!(at && at.workspaceId === e && at.id === I) && !yr && tt !== !1 && (X ? !!I : !0), Pr = w((t) => {
733
+ Yn({ workspaceId: e, status: t }), Ae == null || Ae(t);
741
734
  }, [Ae, e]);
742
735
  E(() => {
743
736
  var a;
744
737
  const t = (l) => {
745
738
  const g = l.detail;
746
- !g || typeof g != "object" || Fr(g, {
747
- surface: We,
748
- isWorkbenchOpen: Ge,
749
- openWorkbench: Ie,
750
- openWorkbenchSources: $e
739
+ !g || typeof g != "object" || Wr(g, {
740
+ surface: Ie,
741
+ isWorkbenchOpen: $e,
742
+ openWorkbench: Ue,
743
+ openWorkbenchSources: Ke
751
744
  });
752
745
  };
753
- return (a = globalThis.addEventListener) == null || a.call(globalThis, gn, t), () => {
746
+ return (a = globalThis.addEventListener) == null || a.call(globalThis, pn, t), () => {
754
747
  var l;
755
- return (l = globalThis.removeEventListener) == null ? void 0 : l.call(globalThis, gn, t);
748
+ return (l = globalThis.removeEventListener) == null ? void 0 : l.call(globalThis, pn, t);
756
749
  };
757
- }, [We, Ge, Ie, $e]), E(() => {
758
- I || Pe == null || Pe(C ?? null);
759
- }, [C, Pe, I]);
760
- const mt = Le.status !== "ready", Pr = mt ? /* @__PURE__ */ f(ci, { status: Le }) : void 0, Je = w(async (t) => {
750
+ }, [Ie, $e, Ue, Ke]), E(() => {
751
+ C || Pe == null || Pe(I ?? null);
752
+ }, [I, Pe, C]);
753
+ const pt = Le.status !== "ready", Er = pt ? /* @__PURE__ */ d(ci, { status: Le }) : void 0, Be = w(async (t) => {
761
754
  const a = `${(h == null ? void 0 : h.replace(/\/$/, "")) ?? ""}/api/v1/agent/reload`;
762
755
  try {
763
756
  const l = await fetch(a, {
764
757
  method: "POST",
765
- headers: { ...X, "content-type": "application/json" },
758
+ headers: { ...k, "content-type": "application/json" },
766
759
  body: JSON.stringify({ sessionId: t })
767
760
  });
768
761
  if (!l.ok)
769
762
  return (await l.json().catch(() => ({}))).error || `reload failed (${l.status})`;
770
763
  const g = await l.json().catch(() => ({}));
771
- return window.dispatchEvent(new CustomEvent(Mr, { detail: g })), fi(g);
764
+ return window.dispatchEvent(new CustomEvent(Cr, { detail: g })), fi(g);
772
765
  } catch (l) {
773
766
  return l instanceof Error ? l.message : "Agent plugin reload failed.";
774
767
  }
775
- }, [h, X]), je = w(
768
+ }, [h, k]), qe = w(
776
769
  (t, a = {}) => {
777
- const l = a.bridgeEnabled ?? !0, g = _ != null && _.toolRenderers && typeof _.toolRenderers == "object" ? _.toolRenderers : void 0;
770
+ const l = a.bridgeEnabled ?? !0, g = L != null && L.toolRenderers && typeof L.toolRenderers == "object" ? L.toolRenderers : void 0;
778
771
  return {
779
- ..._,
780
- ...rn ? { autoSubmitInitialDraft: !1, initialDraft: void 0 } : {},
772
+ ...L,
773
+ ...on ? { autoSubmitInitialDraft: !1, initialDraft: void 0 } : {},
781
774
  sessionId: t,
782
775
  apiBaseUrl: h,
783
776
  workspaceId: e,
784
777
  storageScope: e,
785
- requestHeaders: X,
778
+ requestHeaders: k,
786
779
  showSessions: !1,
787
- onReloadAgentPlugins: (_ == null ? void 0 : _.onReloadAgentPlugins) ?? (() => Je(t)),
788
- toolRenderers: { ...Xt, ...g ?? {} },
789
- bridgeEndpoint: l ? ke : null,
790
- getSurface: We,
791
- isWorkbenchOpen: Ge,
792
- openWorkbench: Ie,
793
- openWorkbenchSources: $e,
794
- closeWorkbench: Ue,
780
+ onReloadAgentPlugins: (L == null ? void 0 : L.onReloadAgentPlugins) ?? (() => Be(t)),
781
+ toolRenderers: { ...Zt, ...g ?? {} },
782
+ bridgeEndpoint: l ? Qe : null,
783
+ getSurface: Ie,
784
+ isWorkbenchOpen: $e,
785
+ openWorkbench: Ue,
786
+ openWorkbenchSources: Ke,
787
+ closeWorkbench: He,
795
788
  extraCommands: _t,
796
789
  workspaceWarmupStatus: Le,
797
- hydrateMessages: on,
790
+ hydrateMessages: an,
798
791
  onAutoSubmitInitialDraftSettled: () => {
799
- se.current = !1, gt(!1), he(void 0);
800
- const v = _ == null ? void 0 : _.onAutoSubmitInitialDraftSettled;
792
+ ae.current = !1, mt(!1), he(void 0);
793
+ const v = L == null ? void 0 : L.onAutoSubmitInitialDraftSettled;
801
794
  typeof v == "function" && v();
802
795
  },
803
796
  // Forward the explicit prop when set. Omitting the key (when undefined)
804
797
  // lets ChatPanel apply its own default (true) and avoids overriding a
805
798
  // value passed through chatParams.
806
- ...tt !== void 0 ? { hotReloadEnabled: tt } : {}
799
+ ...it !== void 0 ? { hotReloadEnabled: it } : {}
807
800
  };
808
801
  },
809
- [h, _, rn, X, ke, We, Ge, Ie, $e, Ue, _t, Le, on, tt, Xt, Je, e]
810
- ), Er = F(
811
- () => je(m),
812
- [m, je]
813
- ), Ar = F(() => Ke.map((t) => ({
802
+ [h, L, on, k, Qe, Ie, $e, Ue, Ke, He, _t, Le, an, it, Zt, Be, e]
803
+ ), Ar = F(
804
+ () => qe(m),
805
+ [m, qe]
806
+ ), wr = F(() => Je.map((t) => ({
814
807
  id: t,
815
- title: en.get(t) ?? (t === "default" ? q : t),
808
+ title: nn.get(t) ?? (t === "default" ? Y : t),
816
809
  panel: "chat",
817
- params: je(t, { bridgeEnabled: t === He })
818
- })), [He, Ke, q, je, en]), wr = F(() => ({
810
+ params: qe(t, { bridgeEnabled: t === je })
811
+ })), [je, Je, Y, qe, nn]), Rr = F(() => ({
819
812
  storageKey: G,
820
813
  defaultLeftTab: Ee,
821
814
  initialPanels: Nt,
822
- extraPanels: Qt,
823
- onReloadAgentPlugins: () => Je(C ?? m),
824
- onReady: Vt,
825
- onChange: Yt,
826
- onClose: Ue
815
+ extraPanels: en,
816
+ onReloadAgentPlugins: () => Be(I ?? m),
817
+ onReady: kt,
818
+ onChange: Xt,
819
+ onClose: He
827
820
  }), [
828
- Ue,
821
+ He,
829
822
  Ee,
830
823
  Nt,
831
- Je,
832
- C,
824
+ Be,
825
+ I,
833
826
  m,
834
- Yt,
835
- Vt,
827
+ Xt,
828
+ kt,
836
829
  G,
837
- Qt,
830
+ en,
838
831
  B
839
832
  ]);
840
- return /* @__PURE__ */ f("div", { className: "h-full bg-background text-foreground", children: /* @__PURE__ */ ye(
841
- Cr,
833
+ return /* @__PURE__ */ d("div", { className: "h-full bg-background text-foreground", children: /* @__PURE__ */ ye(
834
+ Fr,
842
835
  {
843
- chatPanel: kn,
836
+ chatPanel: Qn,
844
837
  panels: y,
845
838
  commands: S,
846
839
  catalogs: j,
847
840
  plugins: W,
848
- excludeDefaults: k,
841
+ excludeDefaults: V,
849
842
  capabilities: R,
850
843
  apiBaseUrl: h,
851
- authHeaders: qn,
844
+ authHeaders: Vn,
852
845
  apiTimeout: p,
853
846
  defaultTheme: N,
854
- onThemeChange: Dn,
847
+ onThemeChange: Ln,
855
848
  workspaceId: e,
856
- workspaceLabel: Mn,
857
- storageKey: nt,
858
- persistenceEnabled: yt,
859
- debug: _n,
849
+ workspaceLabel: Fn,
850
+ storageKey: st,
851
+ persistenceEnabled: Pt,
852
+ debug: On,
860
853
  bridgeEndpoint: null,
861
- onAuthError: On,
862
- frontPluginHotReload: Bn,
863
- fullPageBasePath: Ln,
854
+ onAuthError: Mn,
855
+ frontPluginHotReload: zn,
856
+ fullPageBasePath: xn,
864
857
  children: [
865
858
  u,
866
- /* @__PURE__ */ f(
867
- ii,
859
+ /* @__PURE__ */ d(
860
+ si,
868
861
  {
869
862
  workspaceId: e,
870
- requestHeaders: X,
863
+ requestHeaders: k,
871
864
  apiBaseUrl: h,
872
- preloadPaths: Hn,
873
- provisionWorkspace: Qe,
874
- onStatusChange: yr
865
+ preloadPaths: jn,
866
+ provisionWorkspace: tt,
867
+ onStatusChange: Pr
875
868
  }
876
869
  ),
877
- /* @__PURE__ */ f(
870
+ /* @__PURE__ */ d(
878
871
  yi,
879
872
  {
880
- bridgeEndpoint: ke,
881
- requestHeaders: X,
882
- navOpen: jt,
883
- surfaceOpen: Q,
884
- surfaceReady: cr,
885
- snapshot: gr
873
+ bridgeEndpoint: Qe,
874
+ requestHeaders: k,
875
+ navOpen: qt,
876
+ surfaceOpen: Z,
877
+ surfaceReady: ur,
878
+ snapshot: mr
886
879
  }
887
880
  ),
888
881
  /* @__PURE__ */ ye("div", { className: "flex h-full min-h-0 flex-col", children: [
889
- /* @__PURE__ */ f(
890
- $r,
882
+ /* @__PURE__ */ d(
883
+ Ur,
891
884
  {
892
- appTitle: xn,
893
- sessionTitle: xe ? "Loading sessions…" : ar ?? q,
885
+ appTitle: Cn,
886
+ sessionTitle: Ce ? "Loading sessions…" : lr ?? Y,
894
887
  onCommandPalette: () => {
895
888
  document.dispatchEvent(new KeyboardEvent("keydown", {
896
889
  key: "k",
@@ -900,65 +893,65 @@ function Hi({
900
893
  cancelable: !0
901
894
  }));
902
895
  },
903
- topBarLeft: Wn,
904
- topBarRight: /* @__PURE__ */ ye(ce, { children: [
905
- In ? /* @__PURE__ */ f(qr, {}) : null,
906
- Gn
896
+ topBarLeft: In,
897
+ topBarRight: /* @__PURE__ */ ye(ue, { children: [
898
+ Un ? /* @__PURE__ */ d(zr, {}) : null,
899
+ $n
907
900
  ] })
908
901
  }
909
902
  ),
910
- xe ? /* @__PURE__ */ f(hi, {}) : /* @__PURE__ */ f(
911
- Ur,
903
+ Ce ? /* @__PURE__ */ d(hi, {}) : /* @__PURE__ */ d(
904
+ Kr,
912
905
  {
913
- className: jn,
914
- nav: jt ? "session-list" : null,
906
+ className: qn,
907
+ nav: qt ? "session-list" : null,
915
908
  navParams: {
916
909
  sessions: $,
917
- activeId: He,
918
- openIds: Ke,
919
- pinnedIds: Vn,
920
- onTogglePin: Yn,
921
- onSwitch: mr,
922
- onOpenAsTab: tn,
923
- onCreate: lt,
924
- onDelete: br,
925
- onLoadMore: d == null ? void 0 : d.loadMore,
926
- hasMore: d == null ? void 0 : d.hasMore,
927
- loadingMore: d == null ? void 0 : d.loadingMore,
928
- onClose: () => Jt(!1)
910
+ activeId: je,
911
+ openIds: Je,
912
+ pinnedIds: kn,
913
+ onTogglePin: Xn,
914
+ onSwitch: pr,
915
+ onOpenAsTab: rn,
916
+ onCreate: ct,
917
+ onDelete: Sr,
918
+ onLoadMore: f == null ? void 0 : f.loadMore,
919
+ hasMore: f == null ? void 0 : f.hasMore,
920
+ loadingMore: f == null ? void 0 : f.loadingMore,
921
+ onClose: () => Bt(!1)
929
922
  },
930
923
  center: "chat",
931
- centerParams: Er,
932
- chatPanes: Ar,
933
- activeChatPaneId: He,
934
- onActiveChatPaneChange: pr,
935
- onCloseChatPane: hr,
936
- onCreateChatPaneAfter: vr,
937
- onDropChatSession: tn,
938
- flashChatPaneId: (re == null ? void 0 : re.workspaceId) === e ? re.id : null,
939
- surface: Q ? "artifact-surface" : null,
940
- surfaceParams: wr,
941
- surfaceOverlay: Pr,
942
- sidebar: Q && !mt && dt && fr ? "workbench-left" : null,
943
- sidebarParams: Q && !mt && dt ? {
924
+ centerParams: Ar,
925
+ chatPanes: wr,
926
+ activeChatPaneId: je,
927
+ onActiveChatPaneChange: hr,
928
+ onCloseChatPane: vr,
929
+ onCreateChatPaneAfter: br,
930
+ onDropChatSession: rn,
931
+ flashChatPaneId: (ie == null ? void 0 : ie.workspaceId) === e ? ie.id : null,
932
+ surface: Z ? "artifact-surface" : null,
933
+ surfaceParams: Rr,
934
+ surfaceOverlay: Er,
935
+ sidebar: Z && !pt && ft && gr ? "workbench-left" : null,
936
+ sidebarParams: Z && !pt && ft ? {
944
937
  ...Ee ? { defaultTab: Ee } : {},
945
938
  onClose: () => {
946
- ve(!1), Fe(!1);
939
+ ve(!1), Ge(!1);
947
940
  },
948
941
  onCollapse: () => {
949
- ve(!1), Fe(!1);
942
+ ve(!1), Ge(!1);
950
943
  }
951
944
  } : void 0,
952
- storageKey: x ? we : void 0,
945
+ storageKey: M ? we : void 0,
953
946
  onOpenNav: Tt ? () => {
954
- Jt(!0), Ze == null || Ze();
947
+ Bt(!0), nt == null || nt();
955
948
  } : void 0,
956
949
  onOpenSurface: () => {
957
- ee.current = !0, B(!0), et == null || et();
950
+ te.current = !0, B(!0), rt == null || rt();
958
951
  },
959
- surfaceButtonBottomOffset: Jn,
960
- onOpenSidebar: dt ? () => {
961
- ee.current = !0, B(!0), ve(!0), Fe(!0);
952
+ surfaceButtonBottomOffset: Bn,
953
+ onOpenSidebar: ft ? () => {
954
+ te.current = !0, B(!0), ve(!0), Ge(!0);
962
955
  } : void 0
963
956
  }
964
957
  )
@@ -972,55 +965,55 @@ const Pi = 500;
972
965
  function Ei(e) {
973
966
  return new Promise((n, r) => {
974
967
  let i;
975
- const o = () => {
976
- i && globalThis.clearTimeout(i), e.removeEventListener("abort", s);
977
- }, s = () => {
978
- o(), r(new DOMException("Workspace boot aborted", "AbortError"));
968
+ const s = () => {
969
+ i && globalThis.clearTimeout(i), e.removeEventListener("abort", o);
970
+ }, o = () => {
971
+ s(), r(new DOMException("Workspace boot aborted", "AbortError"));
979
972
  };
980
973
  if (e.aborted) {
981
- s();
974
+ o();
982
975
  return;
983
976
  }
984
977
  i = globalThis.setTimeout(() => {
985
- o(), n();
986
- }, Pi), e.addEventListener("abort", s, { once: !0 });
978
+ s(), n();
979
+ }, Pi), e.addEventListener("abort", o, { once: !0 });
987
980
  });
988
981
  }
989
- function Ji({
982
+ function ji({
990
983
  workspaceId: e,
991
984
  requestHeaders: n,
992
985
  apiBaseUrl: r,
993
- preloadPaths: i = En,
994
- provisionWorkspace: o = !0,
995
- loadingFallback: s,
986
+ preloadPaths: i = wn,
987
+ provisionWorkspace: s = !0,
988
+ loadingFallback: o,
996
989
  errorFallback: c,
997
990
  children: u
998
991
  }) {
999
- const [b, y] = L({
992
+ const [b, y] = O({
1000
993
  status: "loading",
1001
994
  label: "Waking workspace runtime"
1002
995
  });
1003
996
  return E(() => {
1004
- const S = new AbortController(), j = Ve(e, n);
997
+ const S = new AbortController(), j = ke(e, n);
1005
998
  async function W(R) {
1006
- const h = await fetch(wn(r, R), {
999
+ const h = await fetch(Tn(r, R), {
1007
1000
  headers: j,
1008
1001
  signal: S.signal
1009
- }), T = await Ye(h);
1002
+ }), T = await Xe(h);
1010
1003
  if (!h.ok) {
1011
- if (bt(T)) return "preparing";
1012
- throw new Error(St(T) ?? `${R} failed with ${h.status}`);
1004
+ if (St(T)) return "preparing";
1005
+ throw new Error(yt(T) ?? `${R} failed with ${h.status}`);
1013
1006
  }
1014
- if (Rn(R)) {
1015
- const N = ze(T);
1007
+ if (Nn(R)) {
1008
+ const N = Ye(T);
1016
1009
  if ((N == null ? void 0 : N.state) === "degraded") throw new Error(N.message ?? "Workspace failed to prepare");
1017
1010
  }
1018
- return Wr(R) !== null && T && typeof T == "object" && Tn(r, j["x-boring-workspace-id"] ?? e, R, T), "ready";
1011
+ return Gr(R) !== null && T && typeof T == "object" && Dn(r, j["x-boring-workspace-id"] ?? e, R, T), "ready";
1019
1012
  }
1020
- async function k() {
1013
+ async function V() {
1021
1014
  y({ status: "loading", label: "Waking workspace runtime" });
1022
1015
  try {
1023
- const R = An(i, o);
1016
+ const R = Rn(i, s);
1024
1017
  let h = await Promise.all(R.map(async (p) => ({ path: p, status: await W(p) }))), T = h.filter((p) => p.status === "preparing").map((p) => p.path);
1025
1018
  for (; T.length > 0; ) {
1026
1019
  if (y({ status: "loading", label: "Workspace is still preparing" }), await Ei(S.signal), S.signal.aborted) return;
@@ -1035,16 +1028,16 @@ function Ji({
1035
1028
  });
1036
1029
  }
1037
1030
  }
1038
- return k(), () => S.abort();
1039
- }, [r, i, o, n, e]), b.status === "ready" ? /* @__PURE__ */ f(ce, { children: u }) : b.status === "error" ? typeof c == "function" ? /* @__PURE__ */ f(ce, { children: c(b.message) }) : c ? /* @__PURE__ */ f(ce, { children: c }) : /* @__PURE__ */ f(
1040
- pn,
1031
+ return V(), () => S.abort();
1032
+ }, [r, i, s, n, e]), b.status === "ready" ? /* @__PURE__ */ d(ue, { children: u }) : b.status === "error" ? typeof c == "function" ? /* @__PURE__ */ d(ue, { children: c(b.message) }) : c ? /* @__PURE__ */ d(ue, { children: c }) : /* @__PURE__ */ d(
1033
+ vn,
1041
1034
  {
1042
1035
  title: "Workspace failed to open",
1043
1036
  description: b.message,
1044
1037
  status: "Retry by reloading the page"
1045
1038
  }
1046
- ) : typeof s == "function" ? /* @__PURE__ */ f(ce, { children: s(b.label) }) : s ? /* @__PURE__ */ f(ce, { children: s }) : /* @__PURE__ */ f(
1047
- pn,
1039
+ ) : typeof o == "function" ? /* @__PURE__ */ d(ue, { children: o(b.label) }) : o ? /* @__PURE__ */ d(ue, { children: o }) : /* @__PURE__ */ d(
1040
+ vn,
1048
1041
  {
1049
1042
  title: "Opening workspace",
1050
1043
  description: "Preparing secure runtime, files, sessions, and layout.",
@@ -1053,9 +1046,9 @@ function Ji({
1053
1046
  );
1054
1047
  }
1055
1048
  const Ai = "FULL_PAGE_PANEL_MISSING_COMPONENT", wi = "FULL_PAGE_PANEL_INVALID_PARAMS_JSON", Ri = "FULL_PAGE_PANEL_PARAMS_NOT_OBJECT", Ti = "FULL_PAGE_PANEL_UNKNOWN_COMPONENT", Ni = "FULL_PAGE_PANEL_NOT_SUPPORTED", Di = "FULL_PAGE_PANEL_RENDER_FAILED";
1056
- function O() {
1049
+ function x() {
1057
1050
  }
1058
- const _i = { dispose: O }, P = () => _i;
1051
+ const _i = { dispose: x }, P = () => _i;
1059
1052
  function Li(e) {
1060
1053
  return {
1061
1054
  id: `full-page:${e}`,
@@ -1066,19 +1059,19 @@ function Li(e) {
1066
1059
  width: 0,
1067
1060
  height: 0,
1068
1061
  location: { type: "grid", referenceGroup: void 0 },
1069
- setActive: O,
1062
+ setActive: x,
1070
1063
  setTitle: (n) => {
1071
1064
  document.title = n;
1072
1065
  },
1073
- setSize: O,
1066
+ setSize: x,
1074
1067
  close: () => {
1075
1068
  window.close();
1076
1069
  },
1077
- moveTo: O,
1078
- maximize: O,
1079
- exitMaximized: O,
1070
+ moveTo: x,
1071
+ maximize: x,
1072
+ exitMaximized: x,
1080
1073
  isMaximized: () => !1,
1081
- minimize: O,
1074
+ minimize: x,
1082
1075
  onDidActiveChange: P,
1083
1076
  onDidVisibilityChange: P,
1084
1077
  onDidDimensionsChange: P,
@@ -1102,20 +1095,20 @@ function Oi() {
1102
1095
  panels: [],
1103
1096
  groups: [],
1104
1097
  activeGroup: void 0,
1105
- addPanel: O,
1106
- addGroup: O,
1107
- removePanel: O,
1108
- removeGroup: O,
1098
+ addPanel: x,
1099
+ addGroup: x,
1100
+ removePanel: x,
1101
+ removeGroup: x,
1109
1102
  getPanel: () => {
1110
1103
  },
1111
1104
  getGroup: () => {
1112
1105
  },
1113
- moveGroupOrPanel: O,
1114
- fromJSON: O,
1106
+ moveGroupOrPanel: x,
1107
+ fromJSON: x,
1115
1108
  toJSON: () => ({}),
1116
- clear: O,
1117
- focus: O,
1118
- layout: O,
1109
+ clear: x,
1110
+ focus: x,
1111
+ layout: x,
1119
1112
  onDidLayoutChange: P,
1120
1113
  onDidLayoutFromJSON: P,
1121
1114
  onDidAddPanel: P,
@@ -1132,53 +1125,53 @@ function Oi() {
1132
1125
  onDidActivePanelChange_: P
1133
1126
  };
1134
1127
  }
1135
- function vt({ code: e, title: n, description: r }) {
1136
- return /* @__PURE__ */ f(
1128
+ function bt({ code: e, title: n, description: r }) {
1129
+ return /* @__PURE__ */ d(
1137
1130
  "div",
1138
1131
  {
1139
1132
  className: "flex min-h-screen items-center justify-center bg-background p-6 text-foreground",
1140
1133
  "data-testid": "full-page-error-state",
1141
1134
  "data-full-page-error-code": e,
1142
- children: /* @__PURE__ */ f(Br, { className: "w-full max-w-lg", title: n, description: r })
1135
+ children: /* @__PURE__ */ d(qr, { className: "w-full max-w-lg", title: n, description: r })
1143
1136
  }
1144
1137
  );
1145
1138
  }
1146
- function ji({ componentId: e, params: n = {} }) {
1147
- const r = Nn(), { errors: i } = Gr(), o = r.get(e), s = r.getComponents()[e];
1148
- Nr(() => {
1149
- document.title = (o == null ? void 0 : o.title) ?? e;
1150
- }, [e, o == null ? void 0 : o.title]);
1139
+ function Bi({ componentId: e, params: n = {} }) {
1140
+ const r = _n(), { errors: i } = Ir(), s = r.get(e), o = r.getComponents()[e];
1141
+ Dr(() => {
1142
+ document.title = (s == null ? void 0 : s.title) ?? e;
1143
+ }, [e, s == null ? void 0 : s.title]);
1151
1144
  const c = F(() => ({
1152
1145
  params: n,
1153
1146
  api: Li(e),
1154
1147
  containerApi: Oi(),
1155
1148
  className: "h-full"
1156
1149
  }), [e, n]), u = F(() => {
1157
- if (!o) return null;
1158
- const b = o.pluginId ?? o.id;
1150
+ if (!s) return null;
1151
+ const b = s.pluginId ?? s.id;
1159
1152
  for (let y = i.length - 1; y >= 0; y -= 1) {
1160
1153
  const S = i[y];
1161
1154
  if (S.contributionKind === "panel" && S.contributionId === e && S.pluginId === b)
1162
1155
  return S;
1163
1156
  }
1164
1157
  return null;
1165
- }, [e, i, o]);
1166
- return o ? !o.supportsFullPage || !s ? /* @__PURE__ */ f(
1167
- vt,
1158
+ }, [e, i, s]);
1159
+ return s ? !s.supportsFullPage || !o ? /* @__PURE__ */ d(
1160
+ bt,
1168
1161
  {
1169
1162
  code: Ni,
1170
1163
  title: "Panel does not support full-page mode",
1171
1164
  description: `Panel "${e}" can render in the workspace, but it has not opted into the dedicated full-page pane route.`
1172
1165
  }
1173
- ) : u ? /* @__PURE__ */ f(
1174
- vt,
1166
+ ) : u ? /* @__PURE__ */ d(
1167
+ bt,
1175
1168
  {
1176
1169
  code: Di,
1177
1170
  title: "Panel failed to render",
1178
1171
  description: `Panel "${e}" crashed while rendering in full-page mode: ${u.error.message}`
1179
1172
  }
1180
- ) : /* @__PURE__ */ f("div", { className: "min-h-screen bg-background text-foreground", children: /* @__PURE__ */ f(Ir, { mode: "full-page", children: /* @__PURE__ */ f(s, { ...c }) }) }) : /* @__PURE__ */ f(
1181
- vt,
1173
+ ) : /* @__PURE__ */ d("div", { className: "min-h-screen bg-background text-foreground", children: /* @__PURE__ */ d($r, { mode: "full-page", children: /* @__PURE__ */ d(o, { ...c }) }) }) : /* @__PURE__ */ d(
1174
+ bt,
1182
1175
  {
1183
1176
  code: Ti,
1184
1177
  title: "Unknown panel",
@@ -1186,9 +1179,9 @@ function ji({ componentId: e, params: n = {} }) {
1186
1179
  }
1187
1180
  );
1188
1181
  }
1189
- function Bi(e) {
1190
- var s;
1191
- const n = new URLSearchParams(e), r = ((s = n.get("component")) == null ? void 0 : s.trim()) ?? "";
1182
+ function qi(e) {
1183
+ var o;
1184
+ const n = new URLSearchParams(e), r = ((o = n.get("component")) == null ? void 0 : o.trim()) ?? "";
1192
1185
  if (!r)
1193
1186
  return {
1194
1187
  componentId: null,
@@ -1201,9 +1194,9 @@ function Bi(e) {
1201
1194
  const i = n.get("params");
1202
1195
  if (!i)
1203
1196
  return { componentId: r, params: {} };
1204
- let o;
1197
+ let s;
1205
1198
  try {
1206
- o = JSON.parse(i);
1199
+ s = JSON.parse(i);
1207
1200
  } catch {
1208
1201
  return {
1209
1202
  componentId: null,
@@ -1214,14 +1207,14 @@ function Bi(e) {
1214
1207
  }
1215
1208
  };
1216
1209
  }
1217
- return o === null || Array.isArray(o) || typeof o != "object" ? {
1210
+ return s === null || Array.isArray(s) || typeof s != "object" ? {
1218
1211
  componentId: null,
1219
1212
  params: {},
1220
1213
  error: {
1221
1214
  code: Ri,
1222
1215
  message: "Full-page panel params must be a JSON object."
1223
1216
  }
1224
- } : { componentId: r, params: o };
1217
+ } : { componentId: r, params: s };
1225
1218
  }
1226
1219
  export {
1227
1220
  wi as FULL_PAGE_PANEL_INVALID_PARAMS_JSON,
@@ -1230,11 +1223,11 @@ export {
1230
1223
  Ri as FULL_PAGE_PANEL_PARAMS_NOT_OBJECT,
1231
1224
  Di as FULL_PAGE_PANEL_RENDER_FAILED,
1232
1225
  Ti as FULL_PAGE_PANEL_UNKNOWN_COMPONENT,
1233
- Hi as WorkspaceAgentFront,
1234
- ii as WorkspaceBackgroundBoot,
1235
- Ji as WorkspaceBootGate,
1236
- ji as WorkspaceFullPagePanel,
1237
- kr as createLocalStorageSessions,
1238
- Bi as parseFullPagePanelLocation,
1239
- Xr as useLocalStorageSessions
1226
+ Ji as WorkspaceAgentFront,
1227
+ si as WorkspaceBackgroundBoot,
1228
+ ji as WorkspaceBootGate,
1229
+ Bi as WorkspaceFullPagePanel,
1230
+ Xr as createLocalStorageSessions,
1231
+ qi as parseFullPagePanelLocation,
1232
+ Qr as useLocalStorageSessions
1240
1233
  };