@omg-dev/app 0.2.23 → 0.4.0
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-CeCtrXuD.js → ChangelogPage-B6oxujtj.js} +135 -1
- package/dist-lib/{File-BszRWhXA.js → File-B-qYa2zY.js} +1 -1
- package/dist-lib/{FileEditor-ByMnm-sa.js → FileEditor-BIz0qCyW.js} +2 -2
- package/dist-lib/{FileViewer-DgjR_OJp.js → FileViewer-Clmf04v1.js} +1 -1
- package/dist-lib/{SessionFilesPanel-Ck0KNzua.js → SessionFilesPanel-CF_zsqbI.js} +18 -18
- package/dist-lib/{TermView-D2F19OhV.js → TermView-CJF4nZya.js} +1 -1
- package/dist-lib/apple-touch-icon.png +0 -0
- package/dist-lib/{chat-engine-Bo21-04D.js → chat-engine-CK_sLDum.js} +1 -1
- package/dist-lib/{streamdown-response-k_s41jX5.js → chunk-BO2N2NFS-kYiI5SD9.js} +5006 -6023
- package/dist-lib/{coding-agents-page-Bfy-IdbL.js → coding-agents-page-DR79T5z3.js} +80 -80
- package/dist-lib/embedded-B900iwBO.js +32318 -0
- package/dist-lib/engine-compile-BeDRSL6Y.js +9199 -0
- package/dist-lib/{highlighted-body-OFNGDK62-XrUZDzoE.js → highlighted-body-OFNGDK62-C2DGVKV8.js} +4 -4
- package/dist-lib/icon-192.png +0 -0
- package/dist-lib/icon-512.png +0 -0
- package/dist-lib/icon-maskable-512.png +0 -0
- package/dist-lib/icon-maskable.svg +11 -11
- package/dist-lib/icon-small.svg +18 -15
- package/dist-lib/icon.svg +18 -15
- package/dist-lib/index-BXzud6tj.js +1247 -0
- package/dist-lib/{index-CdRi0Fvj.js → index-DWkBvb-9.js} +27 -27
- package/dist-lib/{index-Bw4EY_Nm.js → index-DcwavxA1.js} +3 -3
- package/dist-lib/index-Dtkd4mEk.js +29 -0
- package/dist-lib/index.js +1 -1
- package/dist-lib/mermaid-GHXKKRXX-Ox_2d3uB.js +4 -0
- package/dist-lib/{resume-session-sheet-9na3HKD2.js → resume-session-sheet-5ffg3hJB.js} +1 -1
- package/dist-lib/{session-token-usage-Buv6ihdg.js → session-token-usage-Csrm3KDa.js} +6 -6
- package/dist-lib/{shipped-page-DRgFmUbI.js → shipped-page-B9ihw5Gz.js} +91 -101
- package/dist-lib/streamdown-response-B858u5YQ.js +1051 -0
- package/dist-lib/styles.css +1 -1
- package/package.json +4 -2
- package/dist-lib/embedded-pRKgmVAd.js +0 -27950
- package/dist-lib/engine-compile-BeZvvx0I.js +0 -10442
- package/dist-lib/mermaid-GHXKKRXX-CPr0wWN7.js +0 -4
|
@@ -1,9 +1,143 @@
|
|
|
1
1
|
import { jsx as e } from "react/jsx-runtime";
|
|
2
|
-
import { M as n } from "./embedded-
|
|
2
|
+
import { M as n } from "./embedded-B900iwBO.js";
|
|
3
3
|
const t = `# Changelog
|
|
4
4
|
|
|
5
5
|
Recent product updates and deployment notes.
|
|
6
6
|
|
|
7
|
+
## August 23, 2026 - A quieter composer, and Manage sessions is gone (v0.4.0)
|
|
8
|
+
|
|
9
|
+
- **New: one-shot commands over the API.** \`POST /api/exec\` runs a single
|
|
10
|
+
shell command in a configured repo and returns its output, exit code and
|
|
11
|
+
timing. It exists for a caller reaching this box from somewhere else — an
|
|
12
|
+
agent on another machine had no way to read a file short of starting a whole
|
|
13
|
+
coding-agent session. Capped deliberately: 60s by default and 120s at most,
|
|
14
|
+
64KB per stream keeping both the start and the end of the output, and the
|
|
15
|
+
working directory must resolve to a repo this computer already knows.
|
|
16
|
+
Anything longer belongs in a session.
|
|
17
|
+
- **Requests are size-limited.** A body over 32MB is now rejected with a 413
|
|
18
|
+
instead of being read into memory. Uploads that legitimately pass through
|
|
19
|
+
this server, like session artifact images and videos, are well under it.
|
|
20
|
+
- **The chat composer is rebuilt.** The bar gives the text more room without
|
|
21
|
+
growing its buttons, which stay at a full 40px touch target. Send is an arrow
|
|
22
|
+
that only appears once there is something to send. Attach is a plus that moved
|
|
23
|
+
inside the bar. The mic is a real circle, and send sits beside it.
|
|
24
|
+
Hold-to-queue and Cmd/Ctrl+Enter still queue. Voice lives entirely on the mic
|
|
25
|
+
button now: tap to dictate, hold to talk, drag to cancel.
|
|
26
|
+
- **Removed: the "/" button in the composer.** Typing "/" still opens the skill
|
|
27
|
+
suggestions, but nothing on screen advertises them any more. That is what the
|
|
28
|
+
composer rework costs, and it is recorded here rather than glossed over.
|
|
29
|
+
- **Removed: "Manage sessions".** The submenu is gone, along with the five
|
|
30
|
+
agent-driven templates behind it, the path that launched an agent from one,
|
|
31
|
+
and the clear-idle action. \`POST /api/sessions/close-all\` went with it,
|
|
32
|
+
because that action was its only caller. Closing a single session is
|
|
33
|
+
untouched, and so is reclaiming an idle one under memory pressure.
|
|
34
|
+
- **The transcript glides instead of jumping.** Staying stuck to the bottom used
|
|
35
|
+
to set the scroll position instantly on every change, which raced the entrance
|
|
36
|
+
animations and produced a jump under a still-arriving message. Appends, the
|
|
37
|
+
typing indicator, and re-engaging stick now animate. A message streaming in
|
|
38
|
+
place still snaps, because a smooth scroll cannot keep up with 30ms token
|
|
39
|
+
gaps. A reader who has scrolled up is still left alone.
|
|
40
|
+
- **Sending a message no longer stutters the scroll.** Three separate triggers
|
|
41
|
+
fired on send, and each one restarted the eased scroll from zero, so the
|
|
42
|
+
transcript hitched instead of settling. The glide is now started once and
|
|
43
|
+
left to finish. A wheel, a touch, or a pointer press cancels it immediately,
|
|
44
|
+
so the view can no longer pull away from a reader who is scrolling up.
|
|
45
|
+
- **The transcript re-renders less while a message streams.** Every arriving
|
|
46
|
+
token re-rendered every message and every tool group in the session. Those
|
|
47
|
+
are now compared before they redraw. On a long streaming session this took
|
|
48
|
+
dropped frames from 81 to 32, and layout recalculations from 1733 to 520.
|
|
49
|
+
- **A reclaimed worktree is captured before it is removed.** Session worktrees
|
|
50
|
+
used to be deleted outright. The contents are now committed under
|
|
51
|
+
\`refs/wip/<session-id>\` first, and the removal is abandoned if that capture
|
|
52
|
+
fails. A worktree is never reclaimed while its tmux pane is alive, while a
|
|
53
|
+
process is running inside it, or while it is still registered, whatever its
|
|
54
|
+
age. The retention window is seven days.
|
|
55
|
+
- **Archiving a session stops the dev servers it started.** They used to keep
|
|
56
|
+
running after the session was gone, which is how this machine collected
|
|
57
|
+
orphaned Vite processes. Closing a session now reaps them. A registry row is
|
|
58
|
+
also checked for a live pane before it is deleted, so a resume can no longer
|
|
59
|
+
orphan a session that is still running.
|
|
60
|
+
- **The session tree connector is drawn at one weight.** The elbow joining a
|
|
61
|
+
child to its parent used a corner radius scaled off the app's \`--radius\`, so
|
|
62
|
+
on a 20px connector it ended well short of where the T-junction reached, and
|
|
63
|
+
read lighter because a border-and-radius elbow and a filled spine are drawn by
|
|
64
|
+
two different rasterizers. The connector is a single stroke now, and holds
|
|
65
|
+
even weight on standard and retina displays.
|
|
66
|
+
- **A row's preview fades when it changes.** A streaming session rewrites the
|
|
67
|
+
line under its title, and a dozen rows snapping to new words at once made the
|
|
68
|
+
list twitch. The new text now fades in over 220ms without moving, because a
|
|
69
|
+
row that shifts looks like it changed position in the list. Off entirely under
|
|
70
|
+
\`prefers-reduced-motion\`.
|
|
71
|
+
- **"Copy session reference" no longer writes LFG on your clipboard.** It put
|
|
72
|
+
\`LFG session reference: <id>\` there, which is the most public of the
|
|
73
|
+
leftover names, because that string gets pasted into other tools and into
|
|
74
|
+
conversations. The \`lfg mcp\` command and the \`lfg-mcp\` settings key are
|
|
75
|
+
deliberately unchanged: one is what agents are already configured to run, and
|
|
76
|
+
the other is where setup state is stored, so renaming them is a migration
|
|
77
|
+
rather than a label fix.
|
|
78
|
+
- **Setup names the cause when the command is missing afterwards.** It used to
|
|
79
|
+
report that \`lfg\` was not on PATH, to someone who had just typed
|
|
80
|
+
\`omg computer setup\`. It now names the actual fix: open a new shell, or add
|
|
81
|
+
\`~/.local/bin\` to PATH, then run \`omg computer status\`.
|
|
82
|
+
- **The README says whether the install can run unattended.** It can. Setup has
|
|
83
|
+
no prompts of its own, and every optional feature stays off until you set its
|
|
84
|
+
variable. What it does need is documented now: it refuses to run as root, and
|
|
85
|
+
on Linux it always calls sudo, for \`apt-get\` and for \`loginctl enable-linger\`.
|
|
86
|
+
There is also a copy-paste prompt for handing the install to a coding agent.
|
|
87
|
+
|
|
88
|
+
## August 22, 2026 - One session list, and sessions get their own page (v0.3.0)
|
|
89
|
+
|
|
90
|
+
- **Mobile and desktop now render the same session list.** Mobile used to show
|
|
91
|
+
a grid of cards, each carrying a whole transcript, split into Working and
|
|
92
|
+
Idle. It shows the desktop rail's rows now: one line of preview, a fixed
|
|
93
|
+
height, and the same delegated-child spine. A row cannot hold a transcript,
|
|
94
|
+
so tapping one opens the session instead of expanding in place.
|
|
95
|
+
- **An open session has its own URL.** \`/sessions/<id>\` is a real page. Back —
|
|
96
|
+
the browser's, the phone's gesture, ours — leaves the session rather than the
|
|
97
|
+
app, and a transcript can be linked to.
|
|
98
|
+
- **Folders are the only grouping, and the folder title is the filter.** Click
|
|
99
|
+
a folder heading to scope the list to it. The scoped heading carries a cross
|
|
100
|
+
to come back. Working and Idle are gone: they moved a session between two
|
|
101
|
+
groups every time it started or stopped, which reordered the list to say
|
|
102
|
+
something each row already shows.
|
|
103
|
+
- **The folder button is only for folders now.** It used to scope the list and
|
|
104
|
+
add projects at the same time. It opens the folder manager; scoping belongs
|
|
105
|
+
to the heading.
|
|
106
|
+
- **Bots have their own surface on both widths.** They are no longer repeated
|
|
107
|
+
inside the Chat list. The roster and the session list share one row
|
|
108
|
+
component, so bot rows gain the swipe gestures and the right-click menu they
|
|
109
|
+
never had. Creating a bot is the first row of the list.
|
|
110
|
+
- **A bot conversation opens even when its session is not running.** The
|
|
111
|
+
transcript lives on disk and outlives the process that wrote it. A bot with
|
|
112
|
+
months of history used to look brand new.
|
|
113
|
+
- **Thinking says how long it took.** "Thinking… 12s" while it runs, "Thought
|
|
114
|
+
for 12s" after. Thinking that happens between tool calls folds into that run,
|
|
115
|
+
so a turn using six tools reads as one line rather than twelve.
|
|
116
|
+
- **Tool calls and the typing indicator lost their cards.** A tool call is a
|
|
117
|
+
line in the transcript, not an object stacked between the sentences.
|
|
118
|
+
- **Working is one treatment everywhere.** The agent mark shrinks and an amber
|
|
119
|
+
spinner fills the space around it. The rail and the session header used to
|
|
120
|
+
disagree, in two different colours.
|
|
121
|
+
- **The app icon and favicons are the omg.dev mark.** They still drew the
|
|
122
|
+
"lfg" wordmark on a blue tile.
|
|
123
|
+
- **Settings is smaller.** Section headers that restated the single row below
|
|
124
|
+
them are gone, and so are descriptions that repeated the control they sat
|
|
125
|
+
under. Version and Updates are one row that expands, and it reports a version
|
|
126
|
+
skew without being expanded. Ping moved to the bottom of More as a plain
|
|
127
|
+
line. Your account picture appears once, not twice.
|
|
128
|
+
- **Removed: "Pause new agents" and "Archive idle agents".** Both are gone from
|
|
129
|
+
the interface and from the server. Agent creation is no longer refused by a
|
|
130
|
+
pause flag. An idle agent is now reclaimed only under memory pressure, or by
|
|
131
|
+
the systemd memory bound. Stored values from an older install are ignored
|
|
132
|
+
rather than rejected.
|
|
133
|
+
- **The findings feed no longer merges different errors.** Every "React error
|
|
134
|
+
#NNN" collapsed into one row, so a dismissed finding could silently absorb a
|
|
135
|
+
new, unrelated crash. A finding whose fix has landed now says which commit
|
|
136
|
+
fixed it, and resolves itself after two days without recurrence.
|
|
137
|
+
- **Attached images are shown, not described.** The composer used to list a
|
|
138
|
+
filename, a byte count and three buttons beside a thumbnail. Click the image
|
|
139
|
+
to annotate or remove it.
|
|
140
|
+
|
|
7
141
|
## August 22, 2026 - Add to home screen closes the first run (v0.2.23)
|
|
8
142
|
|
|
9
143
|
- **First-run setup now ends with an optional "Add omg to your home screen"
|
|
@@ -2,7 +2,7 @@ var an = Object.defineProperty;
|
|
|
2
2
|
var on = (e, t, n) => t in e ? an(e, t, { enumerable: !0, configurable: !0, writable: !0, value: n }) : e[t] = n;
|
|
3
3
|
var m = (e, t, n) => on(e, typeof t != "symbol" ? t + "" : t, n);
|
|
4
4
|
import { jsx as N, jsxs as Ae, Fragment as ge } from "react/jsx-runtime";
|
|
5
|
-
import { b as Ye, n as sn, c as ln,
|
|
5
|
+
import { b as Ye, n as sn, c as ln, e as dn, d as cn, t as _ } from "./engine-compile-BeDRSL6Y.js";
|
|
6
6
|
import { useRef as De, useInsertionEffect as hn, useCallback as Ct, useContext as Oe, createContext as _e, useEffect as fn, useLayoutEffect as un } from "react";
|
|
7
7
|
function wt(e) {
|
|
8
8
|
const t = De(e);
|
|
@@ -15,8 +15,8 @@ var fe = (t, e, n, i) => ({
|
|
|
15
15
|
});
|
|
16
16
|
import { jsx as Gs } from "react/jsx-runtime";
|
|
17
17
|
import { memo as mc, useRef as vo, useEffect as mo, useCallback as Cc, useMemo as Lc } from "react";
|
|
18
|
-
import { i as xc, s as bc, r as Sc, p as wc, a as yc, h as kc, d as Tc, c as Ec, b as Ac, e as ia, f as Mc, g as Ds, j as Rc, D as Co, k as Lo, l as js, q as ss, m as xo, n as bo, E as Oc, F as Ic } from "./File-
|
|
19
|
-
import { I as cn, E as So } from "./engine-compile-
|
|
18
|
+
import { i as xc, s as bc, r as Sc, p as wc, a as yc, h as kc, d as Tc, c as Ec, b as Ac, e as ia, f as Mc, g as Ds, j as Rc, D as Co, k as Lo, l as js, q as ss, m as xo, n as bo, E as Oc, F as Ic } from "./File-B-qYa2zY.js";
|
|
19
|
+
import { I as cn, E as So } from "./engine-compile-BeDRSL6Y.js";
|
|
20
20
|
import { p as Pc } from "./shadow-text-size-CBCTdbYU.js";
|
|
21
21
|
import { P as Nc } from "./types-BSXdE6DF.js";
|
|
22
22
|
const Bc = {
|
|
@@ -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-B-qYa2zY.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,8 +1,8 @@
|
|
|
1
1
|
import { jsx as e, jsxs as i, 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
|
|
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";
|
|
3
3
|
import { createPortal as re } from "react-dom";
|
|
4
4
|
import { cn as y } from "cnfast";
|
|
5
|
-
import { y as oe,
|
|
5
|
+
import { y as oe, a2 as W, a3 as se, X as I, a4 as ie, a5 as ae, L as H, a6 as le, x as de, C as ce, a7 as L } from "./embedded-B900iwBO.js";
|
|
6
6
|
import { c as me } from "./create-BrnHvSDE.js";
|
|
7
7
|
/**
|
|
8
8
|
* @license lucide-react v0.577.0 - ISC
|
|
@@ -31,9 +31,9 @@ function xe(n, s, o) {
|
|
|
31
31
|
return c && t.push("", c), t.join(`
|
|
32
32
|
`);
|
|
33
33
|
}
|
|
34
|
-
const ge = L("session-file-tree", () => import("./FileTreePane-BG2k7gTc.js")), be = L("session-file-viewer", () => import("./FileViewer-
|
|
34
|
+
const ge = L("session-file-tree", () => import("./FileTreePane-BG2k7gTc.js")), be = L("session-file-viewer", () => import("./FileViewer-Clmf04v1.js")), ve = L("session-file-editor", () => import("./FileEditor-BIz0qCyW.js"));
|
|
35
35
|
async function _(n) {
|
|
36
|
-
const s = await
|
|
36
|
+
const s = await W(n), o = await s.json().catch(() => ({}));
|
|
37
37
|
if (!s.ok) throw new Error((o == null ? void 0 : o.error) || `${s.status}`);
|
|
38
38
|
return o;
|
|
39
39
|
}
|
|
@@ -45,7 +45,7 @@ function ye() {
|
|
|
45
45
|
}, []), s;
|
|
46
46
|
}
|
|
47
47
|
const N = ({ label: n }) => /* @__PURE__ */ i("div", { className: "flex items-center justify-center gap-2 py-8 text-[12px] text-muted-foreground", children: [
|
|
48
|
-
/* @__PURE__ */ e(
|
|
48
|
+
/* @__PURE__ */ e(H, { className: "size-3.5 animate-spin" }),
|
|
49
49
|
" ",
|
|
50
50
|
n
|
|
51
51
|
] });
|
|
@@ -81,7 +81,7 @@ function ke({ tree: n, onNavigate: s }) {
|
|
|
81
81
|
);
|
|
82
82
|
}
|
|
83
83
|
function we({ sid: n, onClose: s }) {
|
|
84
|
-
const [o, c] = m(null), [t, h] = m(null), [k, x] = m(null), [g, j] = m(null), [a,
|
|
84
|
+
const [o, c] = m(null), [t, h] = m(null), [k, x] = m(null), [g, j] = m(null), [a, 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) => {
|
|
85
85
|
b.current = r;
|
|
86
86
|
}, []), F = T(null);
|
|
87
87
|
C(() => {
|
|
@@ -101,15 +101,15 @@ function we({ sid: n, onClose: s }) {
|
|
|
101
101
|
}, [s]);
|
|
102
102
|
const D = v(
|
|
103
103
|
(r) => {
|
|
104
|
-
t && (E("file"), r !== F.current && (F.current = r, j(r), w(!1), f({ kind: "idle" }), A(""), b.current = null,
|
|
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), _(
|
|
105
105
|
`/api/sessions/${n}/file?path=${encodeURIComponent(`${t.root}/${r}`)}`
|
|
106
106
|
).then((d) => {
|
|
107
|
-
|
|
107
|
+
S(d.file), b.current = d.file.contents;
|
|
108
108
|
}).catch((d) => $(d instanceof Error ? d.message : String(d))).finally(() => P(!1))));
|
|
109
109
|
},
|
|
110
110
|
[n, t]
|
|
111
111
|
), O = v((r) => {
|
|
112
|
-
c(r), F.current = null, j(null),
|
|
112
|
+
c(r), F.current = null, j(null), S(null), w(!1), E("tree");
|
|
113
113
|
}, []), K = v(() => E("tree"), []), Y = q(
|
|
114
114
|
() => a ? { ...a, contents: b.current ?? a.contents } : null,
|
|
115
115
|
// eslint-disable-next-line react-hooks/exhaustive-deps -- `editing` is the
|
|
@@ -121,7 +121,7 @@ function we({ sid: n, onClose: s }) {
|
|
|
121
121
|
displayPath: r,
|
|
122
122
|
original: a.contents,
|
|
123
123
|
edited: b.current,
|
|
124
|
-
note:
|
|
124
|
+
note: z
|
|
125
125
|
});
|
|
126
126
|
if (!d.ok) {
|
|
127
127
|
f({
|
|
@@ -132,7 +132,7 @@ function we({ sid: n, onClose: s }) {
|
|
|
132
132
|
}
|
|
133
133
|
f({ kind: "sending" });
|
|
134
134
|
try {
|
|
135
|
-
const l = await
|
|
135
|
+
const l = await W(`/api/sessions/${n}/send`, {
|
|
136
136
|
method: "POST",
|
|
137
137
|
headers: { "Content-Type": "application/json" },
|
|
138
138
|
// Queued rather than steered: the agent finishes its current turn and
|
|
@@ -150,7 +150,7 @@ function we({ sid: n, onClose: s }) {
|
|
|
150
150
|
} catch (l) {
|
|
151
151
|
f({ kind: "error", message: l instanceof Error ? l.message : String(l) });
|
|
152
152
|
}
|
|
153
|
-
}, [n, a, g,
|
|
153
|
+
}, [n, a, g, z]), Q = !!g && V === "file", B = p.kind === "sent" || p.kind === "error" ? "banner" : u ? "editor" : "content", Z = /* @__PURE__ */ e(
|
|
154
154
|
"div",
|
|
155
155
|
{
|
|
156
156
|
role: "dialog",
|
|
@@ -193,7 +193,7 @@ function we({ sid: n, onClose: s }) {
|
|
|
193
193
|
onClick: s,
|
|
194
194
|
"aria-label": "Close files",
|
|
195
195
|
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
|
-
children: /* @__PURE__ */ e(
|
|
196
|
+
children: /* @__PURE__ */ e(I, { className: "size-5 md:size-4" })
|
|
197
197
|
}
|
|
198
198
|
)
|
|
199
199
|
] }),
|
|
@@ -203,7 +203,7 @@ function we({ sid: n, onClose: s }) {
|
|
|
203
203
|
/* @__PURE__ */ e("div", { className: "min-h-0 flex-1 overflow-hidden pb-[var(--lfg-safe-bottom,0px)] md:pb-0", children: k ? /* @__PURE__ */ i("div", { className: "px-3 py-2 text-[12px] text-[var(--destructive)]", children: [
|
|
204
204
|
"Could not list files: ",
|
|
205
205
|
k
|
|
206
|
-
] }) : t ? /* @__PURE__ */ e(
|
|
206
|
+
] }) : t ? /* @__PURE__ */ e(U, { fallback: /* @__PURE__ */ e(N, { label: "Loading tree…" }), children: /* @__PURE__ */ e(
|
|
207
207
|
ge,
|
|
208
208
|
{
|
|
209
209
|
paths: t.paths,
|
|
@@ -258,7 +258,7 @@ function we({ sid: n, onClose: s }) {
|
|
|
258
258
|
onClick: s,
|
|
259
259
|
"aria-label": "Close files",
|
|
260
260
|
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
|
-
children: /* @__PURE__ */ e(
|
|
261
|
+
children: /* @__PURE__ */ e(I, { className: "size-5" })
|
|
262
262
|
}
|
|
263
263
|
)
|
|
264
264
|
] }),
|
|
@@ -273,7 +273,7 @@ function we({ sid: n, onClose: s }) {
|
|
|
273
273
|
R ? /* @__PURE__ */ i("div", { className: "px-3 py-2 text-[12px] text-[var(--destructive)]", children: [
|
|
274
274
|
"Could not open: ",
|
|
275
275
|
R
|
|
276
|
-
] }) :
|
|
276
|
+
] }) : J || !a ? /* @__PURE__ */ e(N, { label: "Opening…" }) : a.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 ?? a, themeType: M, onChange: X }) : /* @__PURE__ */ e(be, { file: a, themeType: M }) }),
|
|
277
277
|
a != null && a.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
278
|
]
|
|
279
279
|
}
|
|
@@ -289,7 +289,7 @@ function we({ sid: n, onClose: s }) {
|
|
|
289
289
|
/* @__PURE__ */ e(
|
|
290
290
|
"textarea",
|
|
291
291
|
{
|
|
292
|
-
value:
|
|
292
|
+
value: z,
|
|
293
293
|
onChange: (r) => A(r.target.value),
|
|
294
294
|
rows: 2,
|
|
295
295
|
placeholder: "Optional: anything else the agent should do alongside this edit",
|
|
@@ -306,7 +306,7 @@ function we({ sid: n, onClose: s }) {
|
|
|
306
306
|
disabled: p.kind === "sending",
|
|
307
307
|
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
308
|
children: [
|
|
309
|
-
p.kind === "sending" ? /* @__PURE__ */ e(
|
|
309
|
+
p.kind === "sending" ? /* @__PURE__ */ e(H, { className: "size-3.5 animate-spin" }) : /* @__PURE__ */ e(le, { className: "size-3.5" }),
|
|
310
310
|
"Send to agent"
|
|
311
311
|
]
|
|
312
312
|
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { jsxs as r, jsx as k, Fragment as ZA } from "react/jsx-runtime";
|
|
2
2
|
import { useState as L, useRef as S, useEffect as x, useCallback as Y } from "react";
|
|
3
|
-
import { y as cA, n as wQ, X as DA,
|
|
3
|
+
import { y as cA, n as wQ, X as DA, a8 as sQ, x as tQ, a9 as eQ, aa as aQ, a2 as MQ, ab as hQ, R as NQ, C as cQ } from "./embedded-B900iwBO.js";
|
|
4
4
|
/**
|
|
5
5
|
* @license lucide-react v0.577.0 - ISC
|
|
6
6
|
*
|
|
Binary file
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { jsx as ao } from "react/jsx-runtime";
|
|
2
2
|
import { useRef as Dt, useCallback as Lt, useSyncExternalStore as ut, useEffect as so } from "react";
|
|
3
3
|
import { g as io } from "./_commonjsHelpers-C6fGbg64.js";
|
|
4
|
-
import {
|
|
4
|
+
import { ac as uo } from "./embedded-B900iwBO.js";
|
|
5
5
|
var Ar = "vercel.ai.error", co = Symbol.for(Ar), Ut, Ft, se = class Nr extends (Ft = Error, Ut = co, Ft) {
|
|
6
6
|
/**
|
|
7
7
|
* Creates an AI SDK Error.
|