@omg-dev/app 0.6.54 → 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.
- package/dist-lib/{ChangelogPage-ZCG63VYl.js → ChangelogPage-DOeIV4dV.js} +25 -1
- package/dist-lib/{File-6EjmZMI_.js → File-Cai5L4FH.js} +9 -9
- package/dist-lib/{FileEditor-Cd_j2Pn3.js → FileEditor-CBvFYi01.js} +1 -1
- package/dist-lib/{FileViewer-rlK_MPcS.js → FileViewer-Bw4MhWTo.js} +1 -1
- package/dist-lib/{SessionFilesPanel-C96LFRaK.js → SessionFilesPanel-CljApZ_J.js} +90 -97
- package/dist-lib/{TermView-DPak1fmH.js → TermView-rrih9NtI.js} +1057 -1047
- package/dist-lib/base-D0bhR7dg.js +134 -0
- package/dist-lib/{board-page-CjMNQP53.js → board-page-BwukgQSe.js} +4 -4
- package/dist-lib/{chat-engine-9n8lwBiU.js → chat-engine-DABQ686L.js} +1 -1
- package/dist-lib/{coding-agents-page-BjNVGDUO.js → coding-agents-page-BnrON9w7.js} +1 -1
- package/dist-lib/{computer-page-CpnPqiR3.js → computer-page-Dh90OIFY.js} +1437 -1358
- package/dist-lib/create-BOwd_pad.js +175 -0
- package/dist-lib/{embedded-Be_WfQ0h.js → embedded-D1ndCfZJ.js} +17211 -15895
- package/dist-lib/{index-bi2f1zSC.js → index-DzATxXrP.js} +7 -7
- package/dist-lib/index.js +1 -1
- package/dist-lib/keyboard-BDO5X89t.js +35 -0
- package/dist-lib/{resume-session-sheet-Cdd6ggcF.js → resume-session-sheet-KVNxdDSa.js} +1 -1
- package/dist-lib/{session-token-usage-CFcnTEub.js → session-token-usage-CnQ2HFfV.js} +1 -1
- package/dist-lib/{shipped-page-YCpkukPP.js → shipped-page-DT5xVVf3.js} +21 -21
- package/dist-lib/{streamdown-response-Sv-hLrr_.js → streamdown-response-zhsvDlE5.js} +1 -1
- package/dist-lib/styles.css +1 -1
- package/package.json +3 -2
- package/dist-lib/create-CBk9uwJH.js +0 -306
- package/dist-lib/keyboard-CcMBZA9k.js +0 -21
|
@@ -1,9 +1,33 @@
|
|
|
1
1
|
import { jsx as e } from "react/jsx-runtime";
|
|
2
|
-
import { z as n } from "./embedded-
|
|
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
|
+
|
|
22
|
+
## September 7, 2026 - File downloads work on managed machines (v0.6.55)
|
|
23
|
+
|
|
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.
|
|
25
|
+
- Downloads through a managed machine now report their size, so the browser shows real progress.
|
|
26
|
+
- The file card is one click target. Click the file name to download it.
|
|
27
|
+
- On omg.dev hosted sessions the card shows a percentage while a file downloads, and it says when a download fails. Click again to retry.
|
|
28
|
+
- iPad: the session rail shares the phone header, and the composer is the empty pane.
|
|
29
|
+
- Return sends in the session composer. New sessions follow the project filter.
|
|
30
|
+
|
|
7
31
|
## September 7, 2026 - Tool access works inside omg.dev (v0.6.54)
|
|
8
32
|
|
|
9
33
|
- Roles and connectors load from your machine when Settings is opened inside omg.dev. The "Unexpected token '<'" error is gone.
|
|
@@ -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,
|
|
4
|
-
import { D as un } from "./
|
|
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
|
-
|
|
7745
|
-
|
|
7746
|
-
|
|
7747
|
-
|
|
7748
|
-
|
|
7749
|
-
|
|
7750
|
-
|
|
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-
|
|
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-
|
|
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
|
|
2
|
-
import { memo as ne, useState as
|
|
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 {
|
|
6
|
-
import { c as
|
|
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
|
|
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
|
-
],
|
|
18
|
-
function
|
|
19
|
-
if (
|
|
20
|
-
const t =
|
|
21
|
-
return t.length >
|
|
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
|
|
24
|
-
const
|
|
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
|
-
|
|
28
|
+
s.trimEnd(),
|
|
29
29
|
"```"
|
|
30
30
|
];
|
|
31
|
-
return
|
|
31
|
+
return m && t.push("", m), t.join(`
|
|
32
32
|
`);
|
|
33
33
|
}
|
|
34
|
-
const
|
|
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
|
|
37
|
-
if (!
|
|
38
|
-
return
|
|
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
|
-
|
|
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:
|
|
53
|
-
const
|
|
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
|
|
61
|
-
const t =
|
|
53
|
+
return T(() => {
|
|
54
|
+
const t = l.current;
|
|
62
55
|
t && (t.scrollLeft = t.scrollWidth);
|
|
63
|
-
}, [
|
|
56
|
+
}, [m]), /* @__PURE__ */ e(
|
|
64
57
|
"nav",
|
|
65
58
|
{
|
|
66
|
-
ref:
|
|
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:
|
|
69
|
-
h > 0 ? /* @__PURE__ */ e(
|
|
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: () =>
|
|
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:
|
|
84
|
-
const [
|
|
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 =
|
|
87
|
-
|
|
79
|
+
}, []), F = E(null);
|
|
80
|
+
T(() => {
|
|
88
81
|
let r = !0;
|
|
89
82
|
h(null), x(null);
|
|
90
|
-
const d =
|
|
91
|
-
return _(`/api/sessions/${n}/tree${d}`).then((
|
|
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,
|
|
95
|
-
const r = (
|
|
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
|
-
}, [
|
|
94
|
+
}, [s]);
|
|
102
95
|
const D = v(
|
|
103
96
|
(r) => {
|
|
104
|
-
t && (
|
|
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
|
-
|
|
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
|
-
),
|
|
112
|
-
|
|
113
|
-
}, []), K = v(() =>
|
|
114
|
-
() =>
|
|
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
|
-
[
|
|
110
|
+
[i, u]
|
|
118
111
|
), G = v(async () => {
|
|
119
|
-
if (!
|
|
120
|
-
const r = g ??
|
|
112
|
+
if (!i || b.current === null) return;
|
|
113
|
+
const r = g ?? i.name, d = xe({
|
|
121
114
|
displayPath: r,
|
|
122
|
-
original:
|
|
115
|
+
original: i.contents,
|
|
123
116
|
edited: b.current,
|
|
124
|
-
note:
|
|
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
|
|
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
|
|
142
|
-
if (!
|
|
134
|
+
}), ee = await a.json().catch(() => ({}));
|
|
135
|
+
if (!a.ok) {
|
|
143
136
|
f({
|
|
144
137
|
kind: "error",
|
|
145
|
-
message:
|
|
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 (
|
|
151
|
-
f({ kind: "error", message:
|
|
143
|
+
} catch (a) {
|
|
144
|
+
f({ kind: "error", message: a instanceof Error ? a.message : String(a) });
|
|
152
145
|
}
|
|
153
|
-
}, [n,
|
|
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:
|
|
165
|
-
children: /* @__PURE__ */
|
|
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__ */
|
|
172
|
-
/* @__PURE__ */ e(
|
|
173
|
-
/* @__PURE__ */
|
|
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:
|
|
168
|
+
t ? /* @__PURE__ */ e(ke, { tree: t, onNavigate: M }) : null
|
|
176
169
|
] }),
|
|
177
|
-
t?.parent ? /* @__PURE__ */
|
|
170
|
+
t?.parent ? /* @__PURE__ */ o(
|
|
178
171
|
"button",
|
|
179
172
|
{
|
|
180
173
|
type: "button",
|
|
181
|
-
onClick: () =>
|
|
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(
|
|
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:
|
|
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__ */
|
|
201
|
-
/* @__PURE__ */
|
|
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__ */
|
|
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
|
-
|
|
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__ */
|
|
224
|
-
/* @__PURE__ */
|
|
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(
|
|
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
|
-
|
|
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(
|
|
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:
|
|
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__ */
|
|
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
|
-
|
|
263
|
+
O === "content" && "pb-[var(--lfg-safe-bottom,0px)] md:pb-0"
|
|
271
264
|
),
|
|
272
265
|
children: [
|
|
273
|
-
R ? /* @__PURE__ */
|
|
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 || !
|
|
277
|
-
|
|
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__ */
|
|
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
|
-
|
|
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:
|
|
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__ */
|
|
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__ */
|
|
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(
|
|
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__ */
|
|
319
|
-
/* @__PURE__ */ e(
|
|
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
|
|
327
|
+
const je = ne(we);
|
|
335
328
|
export {
|
|
336
|
-
|
|
329
|
+
je as default
|
|
337
330
|
};
|