@omg-dev/app 0.6.55 → 0.6.56

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 (24) hide show
  1. package/dist-lib/{ChangelogPage-BbQeVLzB.js → ChangelogPage-DOeIV4dV.js} +16 -1
  2. package/dist-lib/{File-6EjmZMI_.js → File-Cai5L4FH.js} +9 -9
  3. package/dist-lib/{FileEditor-Cd_j2Pn3.js → FileEditor-CBvFYi01.js} +1 -1
  4. package/dist-lib/{FileViewer-rlK_MPcS.js → FileViewer-Bw4MhWTo.js} +1 -1
  5. package/dist-lib/{SessionFilesPanel-BK6YFU3g.js → SessionFilesPanel-CljApZ_J.js} +90 -97
  6. package/dist-lib/{TermView-CTgGFv_h.js → TermView-rrih9NtI.js} +1057 -1047
  7. package/dist-lib/base-D0bhR7dg.js +134 -0
  8. package/dist-lib/{board-page-ComPCCtB.js → board-page-BwukgQSe.js} +4 -4
  9. package/dist-lib/{chat-engine-CX5mki3M.js → chat-engine-DABQ686L.js} +1 -1
  10. package/dist-lib/{coding-agents-page-CpAcT8LU.js → coding-agents-page-BnrON9w7.js} +1 -1
  11. package/dist-lib/{computer-page-C_CAfCjh.js → computer-page-Dh90OIFY.js} +1437 -1358
  12. package/dist-lib/create-BOwd_pad.js +175 -0
  13. package/dist-lib/{embedded-BMTU-zrw.js → embedded-D1ndCfZJ.js} +17112 -15818
  14. package/dist-lib/{index-bi2f1zSC.js → index-DzATxXrP.js} +7 -7
  15. package/dist-lib/index.js +1 -1
  16. package/dist-lib/keyboard-BDO5X89t.js +35 -0
  17. package/dist-lib/{resume-session-sheet-BVk71eSt.js → resume-session-sheet-KVNxdDSa.js} +1 -1
  18. package/dist-lib/{session-token-usage-nqc70CEb.js → session-token-usage-CnQ2HFfV.js} +1 -1
  19. package/dist-lib/{shipped-page-BLI5UJS4.js → shipped-page-DT5xVVf3.js} +21 -21
  20. package/dist-lib/{streamdown-response-BiOYv2QZ.js → streamdown-response-zhsvDlE5.js} +1 -1
  21. package/dist-lib/styles.css +1 -1
  22. package/package.json +3 -2
  23. package/dist-lib/create-CBk9uwJH.js +0 -306
  24. package/dist-lib/keyboard-BxXuHG1v.js +0 -21
@@ -1,9 +1,24 @@
1
1
  import { jsx as e } from "react/jsx-runtime";
2
- import { z as n } from "./embedded-BMTU-zrw.js";
2
+ import { z as n } from "./embedded-D1ndCfZJ.js";
3
3
  const t = `# Changelog
4
4
 
5
5
  Recent product updates and deployment notes.
6
6
 
7
+ ## September 8, 2026 - Media reads like chat, files open a page (v0.6.56)
8
+
9
+ - Images and videos in the transcript have no card. The media stands alone with a small caption under it.
10
+ - Tap a file card to open its page. The page shows the name, type, and size, and a Download button.
11
+ - Text files and code preview on the page. CSV and TSV show as a table. Files over 1 MB ask before they load, and show the first 1 MB.
12
+ - Archives, PDFs, audio, and unknown types show no preview. Download them to open them.
13
+ - The file card is one row. On a mouse, the download icon appears on hover. On a touch screen, the page has the Download button.
14
+ - The thinking row has no chevron.
15
+ - Text labels on the Live header, the thinking timer, and busy buttons morph in place.
16
+ - Web terminal: select and copy text while tmux mouse mode is on.
17
+ - Computer: copy and paste between the device and the desktop. Trackpad mode stays on after a tap. A mouse event within one second of a touch is ignored.
18
+ - Auto findings: a refine marks the finding read, not dismissed. A rewrite grounded in a finding dismisses it when it lands. Feedback refine answers at once.
19
+ - Faster live updates: the socket sends only the status rows that changed, unchanged polls do not re-render, and every asset is compressed.
20
+ - iPad: the selected rail row is a flat tint, not a card.
21
+
7
22
  ## September 7, 2026 - File downloads work on managed machines (v0.6.55)
8
23
 
9
24
  - Downloading a file from a managed machine stays on the machine. A redirect from the machine no longer sends the browser to the wrong path.
@@ -1,7 +1,7 @@
1
1
  import { jsx as D, jsxs as it, Fragment as Fe } from "react/jsx-runtime";
2
2
  import { b as xt, n as ti, c as ni, e as ii, d as ri, t as J } from "./engine-compile-D_stzVMa.js";
3
- import { useRef as mt, useInsertionEffect as dn, useCallback as vt, createContext as bt, useContext as qe, useState as cn, useEffect as hn, useLayoutEffect as si } from "react";
4
- import { D as un } from "./create-CBk9uwJH.js";
3
+ import { useRef as mt, useInsertionEffect as dn, useCallback as vt, useContext as qe, createContext as bt, useState as cn, useEffect as hn, useLayoutEffect as si } from "react";
4
+ import { D as un } from "./base-D0bhR7dg.js";
5
5
  import { g as oi } from "./_commonjsHelpers-C6fGbg64.js";
6
6
  function fn(e) {
7
7
  const t = mt(e);
@@ -7741,13 +7741,13 @@ export {
7741
7741
  hr as a9,
7742
7742
  pt as aA,
7743
7743
  As as aB,
7744
- Es as aC,
7745
- Is as aD,
7746
- Rs as aE,
7747
- ms as aF,
7748
- Fs as aG,
7749
- Q as aH,
7750
- xs as aI,
7744
+ xs as aC,
7745
+ Es as aD,
7746
+ Is as aE,
7747
+ Rs as aF,
7748
+ ms as aG,
7749
+ Fs as aH,
7750
+ Q as aI,
7751
7751
  lr as aJ,
7752
7752
  ut as aK,
7753
7753
  Qt as aL,
@@ -1,6 +1,6 @@
1
1
  import { jsx as xt } from "react/jsx-runtime";
2
2
  import { memo as Ye, useRef as Qt, useEffect as Jt, useCallback as Xe, useMemo as Qe } from "react";
3
- import { i as Je, s as tn, r as en, p as nn, a as sn, h as rn, d as on, c as an, b as cn, e as Ae, f as ln, g as vt, j as hn, D as te, k as ee, l as bt, q as at, m as ne, n as ie, E as dn, F as fn } from "./File-6EjmZMI_.js";
3
+ import { i as Je, s as tn, r as en, p as nn, a as sn, h as rn, d as on, c as an, b as cn, e as Ae, f as ln, g as vt, j as hn, D as te, k as ee, l as bt, q as at, m as ne, n as ie, E as dn, F as fn } from "./File-Cai5L4FH.js";
4
4
  import { I as K, E as se } from "./engine-compile-D_stzVMa.js";
5
5
  import { p as un } from "./shadow-text-size-smWA4wIU.js";
6
6
  import { P as pn } from "./types-BSXdE6DF.js";
@@ -1,6 +1,6 @@
1
1
  import { jsx as r } from "react/jsx-runtime";
2
2
  import { memo as t } from "react";
3
- import { F as i } from "./File-6EjmZMI_.js";
3
+ import { F as i } from "./File-Cai5L4FH.js";
4
4
  import { P as m } from "./types-BSXdE6DF.js";
5
5
  function n({ file: e, themeType: o }) {
6
6
  return /* @__PURE__ */ r(
@@ -1,77 +1,70 @@
1
- import { jsx as e, jsxs as s, Fragment as te } from "react/jsx-runtime";
2
- import { memo as ne, useState as m, useRef as T, useCallback as v, useEffect as C, useMemo as q, Suspense as U } from "react";
1
+ import { jsx as e, jsxs as o, Fragment as te } from "react/jsx-runtime";
2
+ import { memo as ne, useState as c, useRef as E, useCallback as v, useEffect as T, useMemo as q, Suspense as U } from "react";
3
3
  import { createPortal as re } from "react-dom";
4
4
  import { cn as y } from "cnfast";
5
- import { f as oe, a5 as W, a6 as se, X as I, a7 as ae, a8 as ie, L as H, a9 as le, y as de, C as ce, aa as L } from "./embedded-BMTU-zrw.js";
6
- import { c as me } from "./create-CBk9uwJH.js";
5
+ import { y as oe, a5 as se, a6 as W, a7 as ae, X as I, a8 as ie, a9 as le, L as H, aa as de, x as ce, C as me, ab as j } from "./embedded-D1ndCfZJ.js";
6
+ import { c as ue } from "./create-BOwd_pad.js";
7
7
  /**
8
8
  * @license lucide-react v0.577.0 - ISC
9
9
  *
10
10
  * This source code is licensed under the ISC license.
11
11
  * See the LICENSE file in the root directory of this source tree.
12
12
  */
13
- const ue = [
13
+ const pe = [
14
14
  ["path", { d: "m18 9-6-6-6 6", key: "kcunyi" }],
15
15
  ["path", { d: "M12 3v14", key: "7cf3v8" }],
16
16
  ["path", { d: "M5 21h14", key: "11awu3" }]
17
- ], pe = oe("arrow-up-from-line", ue), fe = 6e4;
18
- function he({ displayPath: n, original: o, edited: a, note: c }) {
19
- if (o === a) return { ok: !1, reason: "unchanged" };
20
- const t = me(n, o, a, void 0, void 0, { context: 3 });
21
- return t.length > fe ? { ok: !1, reason: "too-large" } : { ok: !0, patch: t, message: xe(n, t, c) };
17
+ ], fe = oe("arrow-up-from-line", pe), he = 6e4;
18
+ function xe({ displayPath: n, original: s, edited: l, note: m }) {
19
+ if (s === l) return { ok: !1, reason: "unchanged" };
20
+ const t = ue(n, s, l, void 0, void 0, { context: 3 });
21
+ return t.length > he ? { ok: !1, reason: "too-large" } : { ok: !0, patch: t, message: ge(n, t, m) };
22
22
  }
23
- function xe(n, o, a) {
24
- const c = a?.trim(), t = [
23
+ function ge(n, s, l) {
24
+ const m = l?.trim(), t = [
25
25
  `I edited \`${n}\` in the file viewer. Apply this patch to the file exactly as written — do not reformat it, improve it, or make any other change:`,
26
26
  "",
27
27
  "```diff",
28
- o.trimEnd(),
28
+ s.trimEnd(),
29
29
  "```"
30
30
  ];
31
- return c && t.push("", c), t.join(`
31
+ return m && t.push("", m), t.join(`
32
32
  `);
33
33
  }
34
- const ge = L("session-file-tree", () => import("./FileTreePane-J8P-OiHb.js")), be = L("session-file-viewer", () => import("./FileViewer-rlK_MPcS.js")), ve = L("session-file-editor", () => import("./FileEditor-Cd_j2Pn3.js"));
34
+ const be = j("session-file-tree", () => import("./FileTreePane-J8P-OiHb.js")), ve = j("session-file-viewer", () => import("./FileViewer-Bw4MhWTo.js")), ye = j("session-file-editor", () => import("./FileEditor-CBvFYi01.js"));
35
35
  async function _(n) {
36
- const o = await W(n), a = await o.json().catch(() => ({}));
37
- if (!o.ok) throw new Error(a?.error || `${o.status}`);
38
- return a;
36
+ const s = await W(n), l = await s.json().catch(() => ({}));
37
+ if (!s.ok) throw new Error(l?.error || `${s.status}`);
38
+ return l;
39
39
  }
40
- function ye() {
41
- const n = () => typeof document < "u" && document.documentElement.classList.contains("dark") ? "dark" : "light", [o, a] = m(n);
42
- return C(() => {
43
- const c = new MutationObserver(() => a(n()));
44
- return c.observe(document.documentElement, { attributes: !0, attributeFilter: ["class"] }), () => c.disconnect();
45
- }, []), o;
46
- }
47
- const N = ({ label: n }) => /* @__PURE__ */ s("div", { className: "flex items-center justify-center gap-2 py-8 text-[12px] text-muted-foreground", children: [
40
+ const N = ({ label: n }) => /* @__PURE__ */ o("div", { className: "flex items-center justify-center gap-2 py-8 text-[12px] text-muted-foreground", children: [
48
41
  /* @__PURE__ */ e(H, { className: "size-3.5 animate-spin" }),
49
42
  " ",
50
43
  n
51
44
  ] });
52
- function ke({ tree: n, onNavigate: o }) {
53
- const a = T(null), c = q(() => {
45
+ function ke({ tree: n, onNavigate: s }) {
46
+ const l = E(null), m = q(() => {
54
47
  const t = n.root.split("/").filter(Boolean);
55
48
  return t.map((h, k) => {
56
49
  const x = "/" + t.slice(0, k + 1).join("/");
57
50
  return { name: h, abs: x, browsable: x === n.ceiling || x.startsWith(n.ceiling + "/") };
58
51
  });
59
52
  }, [n.root, n.ceiling]);
60
- return C(() => {
61
- const t = a.current;
53
+ return T(() => {
54
+ const t = l.current;
62
55
  t && (t.scrollLeft = t.scrollWidth);
63
- }, [c]), /* @__PURE__ */ e(
56
+ }, [m]), /* @__PURE__ */ e(
64
57
  "nav",
65
58
  {
66
- ref: a,
59
+ ref: l,
67
60
  className: "flex min-w-0 items-center gap-0.5 overflow-x-auto whitespace-nowrap font-mono text-[11px] text-muted-foreground [scrollbar-width:none] [&::-webkit-scrollbar]:hidden",
68
- children: c.map((t, h) => /* @__PURE__ */ s("span", { className: "flex shrink-0 items-center gap-0.5", children: [
69
- h > 0 ? /* @__PURE__ */ e(ce, { className: "size-3 opacity-50" }) : null,
61
+ children: m.map((t, h) => /* @__PURE__ */ o("span", { className: "flex shrink-0 items-center gap-0.5", children: [
62
+ h > 0 ? /* @__PURE__ */ e(me, { className: "size-3 opacity-50" }) : null,
70
63
  t.browsable && t.abs !== n.root ? /* @__PURE__ */ e(
71
64
  "button",
72
65
  {
73
66
  type: "button",
74
- onClick: () => o(t.abs),
67
+ onClick: () => s(t.abs),
75
68
  className: "rounded px-1 py-1 transition-colors hover:bg-muted hover:text-foreground md:py-0.5",
76
69
  children: t.name
77
70
  }
@@ -80,48 +73,48 @@ function ke({ tree: n, onNavigate: o }) {
80
73
  }
81
74
  );
82
75
  }
83
- function we({ sid: n, onClose: o }) {
84
- const [a, c] = m(null), [t, h] = m(null), [k, x] = m(null), [g, j] = m(null), [l, S] = m(null), [R, $] = m(null), [J, P] = m(!1), [u, w] = m(!1), [z, A] = m(""), [p, f] = m({ kind: "idle" }), [V, E] = m("tree"), M = ye(), b = T(null), X = v((r) => {
76
+ function we({ sid: n, onClose: s }) {
77
+ const [l, m] = c(null), [t, h] = c(null), [k, x] = c(null), [g, L] = c(null), [i, C] = c(null), [R, $] = c(null), [J, P] = c(!1), [u, w] = c(!1), [S, A] = c(""), [p, f] = c({ kind: "idle" }), [V, z] = c("tree"), B = se(), b = E(null), X = v((r) => {
85
78
  b.current = r;
86
- }, []), F = T(null);
87
- C(() => {
79
+ }, []), F = E(null);
80
+ T(() => {
88
81
  let r = !0;
89
82
  h(null), x(null);
90
- const d = a ? `?root=${encodeURIComponent(a)}` : "";
91
- return _(`/api/sessions/${n}/tree${d}`).then((i) => r && h(i.tree)).catch((i) => r && x(i instanceof Error ? i.message : String(i))), () => {
83
+ const d = l ? `?root=${encodeURIComponent(l)}` : "";
84
+ return _(`/api/sessions/${n}/tree${d}`).then((a) => r && h(a.tree)).catch((a) => r && x(a instanceof Error ? a.message : String(a))), () => {
92
85
  r = !1;
93
86
  };
94
- }, [n, a]), C(() => {
95
- const r = (i) => i.key === "Escape" && o();
87
+ }, [n, l]), T(() => {
88
+ const r = (a) => a.key === "Escape" && s();
96
89
  window.addEventListener("keydown", r);
97
90
  const d = document.body.style.overflow;
98
91
  return document.body.style.overflow = "hidden", () => {
99
92
  window.removeEventListener("keydown", r), document.body.style.overflow = d;
100
93
  };
101
- }, [o]);
94
+ }, [s]);
102
95
  const D = v(
103
96
  (r) => {
104
- t && (E("file"), r !== F.current && (F.current = r, j(r), w(!1), f({ kind: "idle" }), A(""), b.current = null, S(null), $(null), P(!0), _(
97
+ t && (z("file"), r !== F.current && (F.current = r, L(r), w(!1), f({ kind: "idle" }), A(""), b.current = null, C(null), $(null), P(!0), _(
105
98
  `/api/sessions/${n}/file?path=${encodeURIComponent(`${t.root}/${r}`)}`
106
99
  ).then((d) => {
107
- S(d.file), b.current = d.file.contents;
100
+ C(d.file), b.current = d.file.contents;
108
101
  }).catch((d) => $(d instanceof Error ? d.message : String(d))).finally(() => P(!1))));
109
102
  },
110
103
  [n, t]
111
- ), O = v((r) => {
112
- c(r), F.current = null, j(null), S(null), w(!1), E("tree");
113
- }, []), K = v(() => E("tree"), []), Y = q(
114
- () => l ? { ...l, contents: b.current ?? l.contents } : null,
104
+ ), M = v((r) => {
105
+ m(r), F.current = null, L(null), C(null), w(!1), z("tree");
106
+ }, []), K = v(() => z("tree"), []), Y = q(
107
+ () => i ? { ...i, contents: b.current ?? i.contents } : null,
115
108
  // eslint-disable-next-line react-hooks/exhaustive-deps -- `editing` is the
116
109
  // intended trigger; draftRef is a ref and deliberately not reactive.
117
- [l, u]
110
+ [i, u]
118
111
  ), G = v(async () => {
119
- if (!l || b.current === null) return;
120
- const r = g ?? l.name, d = he({
112
+ if (!i || b.current === null) return;
113
+ const r = g ?? i.name, d = xe({
121
114
  displayPath: r,
122
- original: l.contents,
115
+ original: i.contents,
123
116
  edited: b.current,
124
- note: z
117
+ note: S
125
118
  });
126
119
  if (!d.ok) {
127
120
  f({
@@ -132,25 +125,25 @@ function we({ sid: n, onClose: o }) {
132
125
  }
133
126
  f({ kind: "sending" });
134
127
  try {
135
- const i = await W(`/api/sessions/${n}/send`, {
128
+ const a = await W(`/api/sessions/${n}/send`, {
136
129
  method: "POST",
137
130
  headers: { "Content-Type": "application/json" },
138
131
  // Queued rather than steered: the agent finishes its current turn and
139
132
  // then picks the edit up, instead of having its thought interrupted.
140
133
  body: JSON.stringify({ text: d.message, mode: "queue" })
141
- }), ee = await i.json().catch(() => ({}));
142
- if (!i.ok) {
134
+ }), ee = await a.json().catch(() => ({}));
135
+ if (!a.ok) {
143
136
  f({
144
137
  kind: "error",
145
- message: i.status === 409 ? "This session isn't running, so there's no agent to apply the edit. Resume it and try again." : ee.error || `Couldn't send (${i.status})`
138
+ message: a.status === 409 ? "This session isn't running, so there's no agent to apply the edit. Resume it and try again." : ee.error || `Couldn't send (${a.status})`
146
139
  });
147
140
  return;
148
141
  }
149
142
  f({ kind: "sent" }), w(!1);
150
- } catch (i) {
151
- f({ kind: "error", message: i instanceof Error ? i.message : String(i) });
143
+ } catch (a) {
144
+ f({ kind: "error", message: a instanceof Error ? a.message : String(a) });
152
145
  }
153
- }, [n, l, g, z]), Q = !!g && V === "file", B = p.kind === "sent" || p.kind === "error" ? "banner" : u ? "editor" : "content", Z = /* @__PURE__ */ e(
146
+ }, [n, i, g, S]), Q = !!g && V === "file", O = p.kind === "sent" || p.kind === "error" ? "banner" : u ? "editor" : "content", Z = /* @__PURE__ */ e(
154
147
  "div",
155
148
  {
156
149
  role: "dialog",
@@ -161,27 +154,27 @@ function we({ sid: n, onClose: o }) {
161
154
  top: "var(--lfg-visual-offset-top, 0px)",
162
155
  height: "var(--lfg-visual-height, var(--lfg-app-height, 100dvh))"
163
156
  },
164
- onClick: o,
165
- children: /* @__PURE__ */ s(
157
+ onClick: s,
158
+ children: /* @__PURE__ */ o(
166
159
  "div",
167
160
  {
168
161
  className: "relative mx-auto flex h-full w-full max-w-6xl flex-col overflow-hidden bg-background md:my-6 md:h-[calc(100%-3rem)] md:rounded-2xl md:border md:border-border md:shadow-2xl",
169
162
  onClick: (r) => r.stopPropagation(),
170
163
  children: [
171
- /* @__PURE__ */ s("header", { className: "flex items-center gap-2 border-b border-border px-3 py-2 pt-[calc(0.5rem+env(safe-area-inset-top,0px))] md:gap-3 md:px-4 md:py-3 md:pt-3", children: [
172
- /* @__PURE__ */ e(se, { className: "size-4 shrink-0 text-[var(--primary)]" }),
173
- /* @__PURE__ */ s("div", { className: "min-w-0 flex-1", children: [
164
+ /* @__PURE__ */ o("header", { className: "flex items-center gap-2 border-b border-border px-3 py-2 pt-[calc(0.5rem+env(safe-area-inset-top,0px))] md:gap-3 md:px-4 md:py-3 md:pt-3", children: [
165
+ /* @__PURE__ */ e(ae, { className: "size-4 shrink-0 text-[var(--primary)]" }),
166
+ /* @__PURE__ */ o("div", { className: "min-w-0 flex-1", children: [
174
167
  /* @__PURE__ */ e("div", { className: "text-sm font-semibold text-foreground", children: "Files" }),
175
- t ? /* @__PURE__ */ e(ke, { tree: t, onNavigate: O }) : null
168
+ t ? /* @__PURE__ */ e(ke, { tree: t, onNavigate: M }) : null
176
169
  ] }),
177
- t?.parent ? /* @__PURE__ */ s(
170
+ t?.parent ? /* @__PURE__ */ o(
178
171
  "button",
179
172
  {
180
173
  type: "button",
181
- onClick: () => O(t.parent),
174
+ onClick: () => M(t.parent),
182
175
  className: "flex min-h-9 shrink-0 items-center gap-1.5 rounded-lg border border-border px-2.5 text-[12px] text-muted-foreground transition-colors hover:bg-muted hover:text-foreground md:min-h-0 md:px-2 md:py-1 md:text-[11px]",
183
176
  children: [
184
- /* @__PURE__ */ e(pe, { className: "size-3.5 md:size-3" }),
177
+ /* @__PURE__ */ e(fe, { className: "size-3.5 md:size-3" }),
185
178
  " Up"
186
179
  ]
187
180
  }
@@ -190,21 +183,21 @@ function we({ sid: n, onClose: o }) {
190
183
  "button",
191
184
  {
192
185
  type: "button",
193
- onClick: o,
186
+ onClick: s,
194
187
  "aria-label": "Close files",
195
188
  className: "flex size-9 shrink-0 items-center justify-center rounded-lg text-muted-foreground transition-colors hover:bg-muted hover:text-foreground md:size-auto md:p-1.5",
196
189
  children: /* @__PURE__ */ e(I, { className: "size-5 md:size-4" })
197
190
  }
198
191
  )
199
192
  ] }),
200
- /* @__PURE__ */ s("div", { className: "flex min-h-0 flex-1 flex-col md:flex-row", children: [
201
- /* @__PURE__ */ s("aside", { className: "flex min-h-0 flex-1 flex-col overflow-hidden border-border md:h-auto md:w-72 md:flex-none md:border-r", children: [
193
+ /* @__PURE__ */ o("div", { className: "flex min-h-0 flex-1 flex-col md:flex-row", children: [
194
+ /* @__PURE__ */ o("aside", { className: "flex min-h-0 flex-1 flex-col overflow-hidden border-border md:h-auto md:w-72 md:flex-none md:border-r", children: [
202
195
  t?.truncated ? /* @__PURE__ */ e("div", { className: "shrink-0 border-b border-border bg-[var(--warning)]/10 px-3 py-1.5 text-[11px] text-[var(--warning)]", children: "This directory is very large — the listing was truncated." }) : null,
203
- /* @__PURE__ */ e("div", { className: "min-h-0 flex-1 overflow-hidden pb-[var(--lfg-safe-bottom,0px)] md:pb-0", children: k ? /* @__PURE__ */ s("div", { className: "px-3 py-2 text-[12px] text-[var(--destructive)]", children: [
196
+ /* @__PURE__ */ e("div", { className: "min-h-0 flex-1 overflow-hidden pb-[var(--lfg-safe-bottom,0px)] md:pb-0", children: k ? /* @__PURE__ */ o("div", { className: "px-3 py-2 text-[12px] text-[var(--destructive)]", children: [
204
197
  "Could not list files: ",
205
198
  k
206
199
  ] }) : t ? /* @__PURE__ */ e(U, { fallback: /* @__PURE__ */ e(N, { label: "Loading tree…" }), children: /* @__PURE__ */ e(
207
- ge,
200
+ be,
208
201
  {
209
202
  paths: t.paths,
210
203
  gitStatus: t.gitStatus,
@@ -220,8 +213,8 @@ function we({ sid: n, onClose: o }) {
220
213
  "min-h-0 min-w-0 flex-col bg-background md:static md:flex md:flex-1",
221
214
  Q ? "absolute inset-0 z-20 flex" : "hidden"
222
215
  ),
223
- children: g ? /* @__PURE__ */ s(te, { children: [
224
- /* @__PURE__ */ s("div", { className: "flex items-center gap-2 border-b border-border px-2 py-2 pt-[calc(0.5rem+env(safe-area-inset-top,0px))] md:px-3 md:pt-2", children: [
216
+ children: g ? /* @__PURE__ */ o(te, { children: [
217
+ /* @__PURE__ */ o("div", { className: "flex items-center gap-2 border-b border-border px-2 py-2 pt-[calc(0.5rem+env(safe-area-inset-top,0px))] md:px-3 md:pt-2", children: [
225
218
  /* @__PURE__ */ e(
226
219
  "button",
227
220
  {
@@ -229,11 +222,11 @@ function we({ sid: n, onClose: o }) {
229
222
  onClick: K,
230
223
  "aria-label": "Back to file tree",
231
224
  className: "flex size-9 shrink-0 items-center justify-center rounded-lg text-muted-foreground transition-colors hover:bg-muted hover:text-foreground md:hidden",
232
- children: /* @__PURE__ */ e(ae, { className: "size-5" })
225
+ children: /* @__PURE__ */ e(ie, { className: "size-5" })
233
226
  }
234
227
  ),
235
228
  /* @__PURE__ */ e("span", { className: "min-w-0 flex-1 truncate font-mono text-[12px] text-foreground", children: g }),
236
- l && !l.binary ? /* @__PURE__ */ s(
229
+ i && !i.binary ? /* @__PURE__ */ o(
237
230
  "button",
238
231
  {
239
232
  type: "button",
@@ -245,7 +238,7 @@ function we({ sid: n, onClose: o }) {
245
238
  u ? "border-[var(--primary)]/40 bg-[var(--primary)]/10 text-foreground" : "border-border text-muted-foreground hover:bg-muted hover:text-foreground"
246
239
  ),
247
240
  children: [
248
- /* @__PURE__ */ e(ie, { className: "size-3.5 md:size-3" }),
241
+ /* @__PURE__ */ e(le, { className: "size-3.5 md:size-3" }),
249
242
  " ",
250
243
  u ? "Editing" : "Edit"
251
244
  ]
@@ -255,50 +248,50 @@ function we({ sid: n, onClose: o }) {
255
248
  "button",
256
249
  {
257
250
  type: "button",
258
- onClick: o,
251
+ onClick: s,
259
252
  "aria-label": "Close files",
260
253
  className: "flex size-9 shrink-0 items-center justify-center rounded-lg text-muted-foreground transition-colors hover:bg-muted hover:text-foreground md:hidden",
261
254
  children: /* @__PURE__ */ e(I, { className: "size-5" })
262
255
  }
263
256
  )
264
257
  ] }),
265
- /* @__PURE__ */ s(
258
+ /* @__PURE__ */ o(
266
259
  "div",
267
260
  {
268
261
  className: y(
269
262
  "min-h-0 flex-1 overflow-auto overscroll-contain text-[12px]",
270
- B === "content" && "pb-[var(--lfg-safe-bottom,0px)] md:pb-0"
263
+ O === "content" && "pb-[var(--lfg-safe-bottom,0px)] md:pb-0"
271
264
  ),
272
265
  children: [
273
- R ? /* @__PURE__ */ s("div", { className: "px-3 py-2 text-[12px] text-[var(--destructive)]", children: [
266
+ R ? /* @__PURE__ */ o("div", { className: "px-3 py-2 text-[12px] text-[var(--destructive)]", children: [
274
267
  "Could not open: ",
275
268
  R
276
- ] }) : J || !l ? /* @__PURE__ */ e(N, { label: "Opening…" }) : l.binary ? /* @__PURE__ */ e("div", { className: "px-3 py-3 text-[12px] text-muted-foreground", children: "Binary file — not shown." }) : /* @__PURE__ */ e(U, { fallback: /* @__PURE__ */ e(N, { label: u ? "Loading editor…" : "Rendering…" }), children: u ? /* @__PURE__ */ e(ve, { file: Y ?? l, themeType: M, onChange: X }) : /* @__PURE__ */ e(be, { file: l, themeType: M }) }),
277
- l?.truncated ? /* @__PURE__ */ e("div", { className: "px-3 py-1.5 text-[11px] text-[var(--warning)]", children: "File truncated — only the first megabyte is shown." }) : null
269
+ ] }) : J || !i ? /* @__PURE__ */ e(N, { label: "Opening…" }) : i.binary ? /* @__PURE__ */ e("div", { className: "px-3 py-3 text-[12px] text-muted-foreground", children: "Binary file — not shown." }) : /* @__PURE__ */ e(U, { fallback: /* @__PURE__ */ e(N, { label: u ? "Loading editor…" : "Rendering…" }), children: u ? /* @__PURE__ */ e(ye, { file: Y ?? i, themeType: B, onChange: X }) : /* @__PURE__ */ e(ve, { file: i, themeType: B }) }),
270
+ i?.truncated ? /* @__PURE__ */ e("div", { className: "px-3 py-1.5 text-[11px] text-[var(--warning)]", children: "File truncated — only the first megabyte is shown." }) : null
278
271
  ]
279
272
  }
280
273
  ),
281
- u ? /* @__PURE__ */ s(
274
+ u ? /* @__PURE__ */ o(
282
275
  "div",
283
276
  {
284
277
  className: y(
285
278
  "shrink-0 space-y-2 border-t border-border p-3",
286
- B === "editor" && "pb-[max(var(--lfg-safe-bottom,0px),0.75rem)] md:pb-3"
279
+ O === "editor" && "pb-[max(var(--lfg-safe-bottom,0px),0.75rem)] md:pb-3"
287
280
  ),
288
281
  children: [
289
282
  /* @__PURE__ */ e(
290
283
  "textarea",
291
284
  {
292
- value: z,
285
+ value: S,
293
286
  onChange: (r) => A(r.target.value),
294
287
  rows: 2,
295
288
  placeholder: "Optional: anything else the agent should do alongside this edit",
296
289
  className: "w-full resize-none rounded-lg border border-border bg-card px-2.5 py-2 text-[12px] text-foreground outline-none placeholder:text-muted-foreground focus:border-[var(--primary)]/50"
297
290
  }
298
291
  ),
299
- /* @__PURE__ */ s("div", { className: "flex flex-col gap-2 md:flex-row md:items-center", children: [
292
+ /* @__PURE__ */ o("div", { className: "flex flex-col gap-2 md:flex-row md:items-center", children: [
300
293
  /* @__PURE__ */ e("p", { className: "min-w-0 flex-1 text-[11px] text-muted-foreground", children: "Your edit is sent to the agent as a patch — it applies the change, so nothing here writes to disk behind its back." }),
301
- /* @__PURE__ */ s(
294
+ /* @__PURE__ */ o(
302
295
  "button",
303
296
  {
304
297
  type: "button",
@@ -306,7 +299,7 @@ function we({ sid: n, onClose: o }) {
306
299
  disabled: p.kind === "sending",
307
300
  className: "flex min-h-11 w-full shrink-0 items-center justify-center gap-1.5 rounded-lg bg-[var(--primary)] px-3 text-[13px] font-medium text-[var(--primary-foreground)] transition-opacity hover:opacity-90 disabled:opacity-60 md:min-h-0 md:w-auto md:py-1.5 md:text-[12px]",
308
301
  children: [
309
- p.kind === "sending" ? /* @__PURE__ */ e(H, { className: "size-3.5 animate-spin" }) : /* @__PURE__ */ e(le, { className: "size-3.5" }),
302
+ p.kind === "sending" ? /* @__PURE__ */ e(H, { className: "size-3.5 animate-spin" }) : /* @__PURE__ */ e(de, { className: "size-3.5" }),
310
303
  "Send to agent"
311
304
  ]
312
305
  }
@@ -315,8 +308,8 @@ function we({ sid: n, onClose: o }) {
315
308
  ]
316
309
  }
317
310
  ) : null,
318
- p.kind === "sent" ? /* @__PURE__ */ s("div", { className: "flex shrink-0 items-center gap-2 border-t border-[var(--success)]/40 bg-[var(--success)]/10 px-3 py-2 pb-[max(var(--lfg-safe-bottom,0px),0.5rem)] text-[12px] text-foreground md:pb-2", children: [
319
- /* @__PURE__ */ e(de, { className: "size-3.5 text-[var(--success)]" }),
311
+ p.kind === "sent" ? /* @__PURE__ */ o("div", { className: "flex shrink-0 items-center gap-2 border-t border-[var(--success)]/40 bg-[var(--success)]/10 px-3 py-2 pb-[max(var(--lfg-safe-bottom,0px),0.5rem)] text-[12px] text-foreground md:pb-2", children: [
312
+ /* @__PURE__ */ e(ce, { className: "size-3.5 text-[var(--success)]" }),
320
313
  " Patch queued — the agent will apply it on its next turn."
321
314
  ] }) : null,
322
315
  p.kind === "error" ? /* @__PURE__ */ e("div", { className: "shrink-0 border-t border-[var(--destructive)]/40 bg-[var(--destructive)]/10 px-3 py-2 pb-[max(var(--lfg-safe-bottom,0px),0.5rem)] text-[12px] text-[var(--destructive)] md:pb-2", children: p.message }) : null
@@ -331,7 +324,7 @@ function we({ sid: n, onClose: o }) {
331
324
  );
332
325
  return re(Z, document.body);
333
326
  }
334
- const Le = ne(we);
327
+ const je = ne(we);
335
328
  export {
336
- Le as default
329
+ je as default
337
330
  };