@omg-dev/app 0.2.22 → 0.3.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-l-UlKe1t.js → ChangelogPage-tITBP5A1.js} +64 -1
- package/dist-lib/{SessionFilesPanel-CIACL6m9.js → SessionFilesPanel-T3CkIp2a.js} +17 -17
- package/dist-lib/{TermView-DRG91TBB.js → TermView-BJiSY2oC.js} +1 -1
- package/dist-lib/apple-touch-icon.png +0 -0
- package/dist-lib/{chat-engine-BaoFBnjm.js → chat-engine-ChrOJLdY.js} +1 -1
- package/dist-lib/{coding-agents-page-BgaSJ48j.js → coding-agents-page-Bsy-dsUo.js} +1 -1
- package/dist-lib/{embedded-Dg1UH3AQ.js → embedded-cpSkU0tg.js} +13071 -12977
- package/dist-lib/{highlighted-body-OFNGDK62-Bcdmy8xK.js → highlighted-body-OFNGDK62-bfel3kiX.js} +1 -1
- 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-uXIZsv3_.js → index-BNac_jIC.js} +1 -1
- package/dist-lib/index.js +1 -1
- package/dist-lib/mermaid-GHXKKRXX-CTlo5kzO.js +4 -0
- package/dist-lib/resume-session-sheet-CsBKi_wb.js +347 -0
- package/dist-lib/{session-token-usage-BpE02cRH.js → session-token-usage-CTQR54Yk.js} +6 -6
- package/dist-lib/{shipped-page-DvL-9270.js → shipped-page-B46DR9zS.js} +91 -101
- package/dist-lib/{streamdown-response-9boPsbKB.js → streamdown-response-Bt7VM-cZ.js} +4 -4
- package/dist-lib/styles.css +1 -1
- package/package.json +2 -2
- package/dist-lib/mermaid-GHXKKRXX-sJaUMvbY.js +0 -4
- package/dist-lib/resume-session-sheet-ABKL_UJZ.js +0 -317
|
@@ -1,9 +1,72 @@
|
|
|
1
1
|
import { jsx as e } from "react/jsx-runtime";
|
|
2
|
-
import { M as n } from "./embedded-
|
|
2
|
+
import { M as n } from "./embedded-cpSkU0tg.js";
|
|
3
3
|
const t = `# Changelog
|
|
4
4
|
|
|
5
5
|
Recent product updates and deployment notes.
|
|
6
6
|
|
|
7
|
+
## August 22, 2026 - One session list, and sessions get their own page (v0.3.0)
|
|
8
|
+
|
|
9
|
+
- **Mobile and desktop now render the same session list.** Mobile used to show
|
|
10
|
+
a grid of cards, each carrying a whole transcript, split into Working and
|
|
11
|
+
Idle. It shows the desktop rail's rows now: one line of preview, a fixed
|
|
12
|
+
height, and the same delegated-child spine. A row cannot hold a transcript,
|
|
13
|
+
so tapping one opens the session instead of expanding in place.
|
|
14
|
+
- **An open session has its own URL.** \`/sessions/<id>\` is a real page. Back —
|
|
15
|
+
the browser's, the phone's gesture, ours — leaves the session rather than the
|
|
16
|
+
app, and a transcript can be linked to.
|
|
17
|
+
- **Folders are the only grouping, and the folder title is the filter.** Click
|
|
18
|
+
a folder heading to scope the list to it. The scoped heading carries a cross
|
|
19
|
+
to come back. Working and Idle are gone: they moved a session between two
|
|
20
|
+
groups every time it started or stopped, which reordered the list to say
|
|
21
|
+
something each row already shows.
|
|
22
|
+
- **The folder button is only for folders now.** It used to scope the list and
|
|
23
|
+
add projects at the same time. It opens the folder manager; scoping belongs
|
|
24
|
+
to the heading.
|
|
25
|
+
- **Bots have their own surface on both widths.** They are no longer repeated
|
|
26
|
+
inside the Chat list. The roster and the session list share one row
|
|
27
|
+
component, so bot rows gain the swipe gestures and the right-click menu they
|
|
28
|
+
never had. Creating a bot is the first row of the list.
|
|
29
|
+
- **A bot conversation opens even when its session is not running.** The
|
|
30
|
+
transcript lives on disk and outlives the process that wrote it. A bot with
|
|
31
|
+
months of history used to look brand new.
|
|
32
|
+
- **Thinking says how long it took.** "Thinking… 12s" while it runs, "Thought
|
|
33
|
+
for 12s" after. Thinking that happens between tool calls folds into that run,
|
|
34
|
+
so a turn using six tools reads as one line rather than twelve.
|
|
35
|
+
- **Tool calls and the typing indicator lost their cards.** A tool call is a
|
|
36
|
+
line in the transcript, not an object stacked between the sentences.
|
|
37
|
+
- **Working is one treatment everywhere.** The agent mark shrinks and an amber
|
|
38
|
+
spinner fills the space around it. The rail and the session header used to
|
|
39
|
+
disagree, in two different colours.
|
|
40
|
+
- **The app icon and favicons are the omg.dev mark.** They still drew the
|
|
41
|
+
"lfg" wordmark on a blue tile.
|
|
42
|
+
- **Settings is smaller.** Section headers that restated the single row below
|
|
43
|
+
them are gone, and so are descriptions that repeated the control they sat
|
|
44
|
+
under. Version and Updates are one row that expands, and it reports a version
|
|
45
|
+
skew without being expanded. Ping moved to the bottom of More as a plain
|
|
46
|
+
line. Your account picture appears once, not twice.
|
|
47
|
+
- **Removed: "Pause new agents" and "Archive idle agents".** Both are gone from
|
|
48
|
+
the interface and from the server. Agent creation is no longer refused by a
|
|
49
|
+
pause flag. An idle agent is now reclaimed only under memory pressure, or by
|
|
50
|
+
the systemd memory bound. Stored values from an older install are ignored
|
|
51
|
+
rather than rejected.
|
|
52
|
+
- **The findings feed no longer merges different errors.** Every "React error
|
|
53
|
+
#NNN" collapsed into one row, so a dismissed finding could silently absorb a
|
|
54
|
+
new, unrelated crash. A finding whose fix has landed now says which commit
|
|
55
|
+
fixed it, and resolves itself after two days without recurrence.
|
|
56
|
+
- **Attached images are shown, not described.** The composer used to list a
|
|
57
|
+
filename, a byte count and three buttons beside a thumbnail. Click the image
|
|
58
|
+
to annotate or remove it.
|
|
59
|
+
|
|
60
|
+
## August 22, 2026 - Add to home screen closes the first run (v0.2.23)
|
|
61
|
+
|
|
62
|
+
- **First-run setup now ends with an optional "Add omg to your home screen"
|
|
63
|
+
page.** It comes after agent connection and the value pitch, never before
|
|
64
|
+
them. On iPhone and Mac Safari it opens the step-by-step install sheet; on
|
|
65
|
+
Chrome and Android it fires the browser's real install prompt.
|
|
66
|
+
- **The page can never block anyone.** "Open my Computer" sits directly under
|
|
67
|
+
the install button, and the page only joins the flow on browsers that can
|
|
68
|
+
actually install. Everyone else sees the same flow as before.
|
|
69
|
+
|
|
7
70
|
## August 21, 2026 - One \`omg\` for computer setup and create / deploy (v0.2.22)
|
|
8
71
|
|
|
9
72
|
- **\`@omg-dev/cli\` 0.5.1 keeps one public \`omg\` binary.** \`0.5.0\` rejected
|
|
@@ -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-cpSkU0tg.js";
|
|
6
6
|
import { c as me } from "./create-BrnHvSDE.js";
|
|
7
7
|
/**
|
|
8
8
|
* @license lucide-react v0.577.0 - ISC
|
|
@@ -33,7 +33,7 @@ function xe(n, s, o) {
|
|
|
33
33
|
}
|
|
34
34
|
const ge = L("session-file-tree", () => import("./FileTreePane-BG2k7gTc.js")), be = L("session-file-viewer", () => import("./FileViewer-DgjR_OJp.js")), ve = L("session-file-editor", () => import("./FileEditor-ByMnm-sa.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-cpSkU0tg.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-cpSkU0tg.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.
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { jsxs as s, jsx as n, Fragment as E } from "react/jsx-runtime";
|
|
2
|
-
import { R, B as d, L as w, m as $, n as S, o as A, p as h, T as L, q as j, s as G, u as H, v as I, w as M, x as U, X as W, K as X } from "./embedded-
|
|
2
|
+
import { R, B as d, L as w, m as $, n as S, o as A, p as h, T as L, q as j, s as G, u as H, v as I, w as M, x as U, X as W, K as X } from "./embedded-cpSkU0tg.js";
|
|
3
3
|
import { cn as B } from "cnfast";
|
|
4
4
|
import { useState as T } from "react";
|
|
5
5
|
function P(t) {
|