@omg-dev/app 0.1.313 → 0.1.315

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.
@@ -1,8 +1,8 @@
1
1
  import { jsxs as a, jsx as s } from "react/jsx-runtime";
2
2
  import { useRef as _, useState as f, useCallback as o, useLayoutEffect as me, useEffect as W } from "react";
3
- import { c as E, Z, ad as y, B as m, R as he, L as U, X as pe, k as J, ae as fe, af as Y, ag as ge, T as ye, H as be } from "./embedded-DkJNPkNV.js";
4
- import { B as xe } from "./badge-Ccc9P_y7.js";
5
- import { C as ve } from "./clipboard-paste-C58tGtpE.js";
3
+ import { c as E, Z, ad as y, B as m, R as he, L as U, X as pe, k as J, ae as fe, af as Y, ag as ge, T as ye, H as be } from "./embedded-DqbzKVPi.js";
4
+ import { B as xe } from "./badge-CT-G9Sni.js";
5
+ import { C as ve } from "./clipboard-paste-7Lt2VUd6.js";
6
6
  /**
7
7
  * @license lucide-react v0.577.0 - ISC
8
8
  *
@@ -1,9 +1,57 @@
1
1
  import { jsx as e } from "react/jsx-runtime";
2
- import { M as n } from "./embedded-DkJNPkNV.js";
2
+ import { M as n } from "./embedded-DqbzKVPi.js";
3
3
  const t = `# Changelog
4
4
 
5
5
  Recent product updates and deployment notes.
6
6
 
7
+ ## August 8, 2026 - \`omg update\`, and a setup that reports instead of narrating (v0.1.315)
8
+
9
+ - **\`omg update\` updates this machine.** It was reachable before — a button in
10
+ the web UI, and \`omg setup\` picking up a release on its way past — but neither
11
+ is what you reach for in a terminal, and \`setup\` reads like it might
12
+ reconfigure the box. \`omg update --check\` reports without changing anything.
13
+ - **Setup's output says what happened.** It used to end with a warning for every
14
+ agent CLI you had not installed, another for Tailscale Serve being off when
15
+ off is the default, and a "Next steps" block that had drifted out of date —
16
+ burying the one thing you want, which URL to open. It now prints the URLs,
17
+ which agents are ready, which can be added and where, and how to restart and
18
+ read logs.
19
+ - **The named URL is not described as needing sudo any more.** Since v0.1.313
20
+ the server advertises \`omg.local\` over mDNS on macOS, so it is already live by
21
+ the time setup finishes.
22
+ - **Hermes is gone.** It had already been dropped as an agent kind, but setup
23
+ still offered to install it and warned when it was missing.
24
+ - Downloads show a progress bar instead of six columns of transfer statistics.
25
+
26
+ ## August 8, 2026 - A fresh install opens, and cleanup stays in its lane (v0.1.314)
27
+
28
+ - **"Choose a project" no longer opens stuck on "Opening…".** On a brand new
29
+ install, before anyone touched a setting, the picker showed an empty listing
30
+ and "folder does not exist". \`.env\` is copied from \`.env.example\`, which
31
+ ships \`OMG_REPOS_ROOT=\` as documentation, and that empty value was read as a
32
+ deliberate answer rather than an unfilled placeholder — so the server had no
33
+ repos root and answered its own default-directory request with a 400.
34
+ - The picker's fallback, added in v0.1.305 so a missing folder could not strand
35
+ the drawer, landed on the same error: it falls back *to* the repos root, and
36
+ the repos root was the thing that was empty.
37
+ - Existing installs are repaired by updating — no \`.env\` edit needed. Re-running
38
+ \`omg setup\` also fills the placeholder in place.
39
+ - **The sweeper no longer deletes worktrees it didn't create.** \`~/lfg-worktrees\`
40
+ is a shared directory, and the background cleanup treated everything in it as
41
+ its own — so a hand-made worktree, release checkout or clone parked there was
42
+ removed within minutes, dirty or not. It now only reclaims worktrees it
43
+ provisioned itself and leaves everything else alone permanently.
44
+ - **Uncommitted work is never deleted.** Even for its own worktrees, the sweeper
45
+ now checks for uncommitted changes before removing one and holds it back if
46
+ there are any. The liveness checks it used before were heuristics; this is a
47
+ fact about the contents. Ignored files don't count, so a clean-but-built
48
+ worktree is still cleaned up.
49
+ - **Cleanup no longer piles onto server restarts.** The first sweep ran 30
50
+ seconds after startup — before session recovery had re-adopted running
51
+ sessions, when the most worktrees look abandoned. Every multi-worktree
52
+ deletion we observed happened within 40 seconds of a restart. It now waits
53
+ five minutes.
54
+
7
55
  ## August 8, 2026 - omg.local, with no password prompt (v0.1.313)
8
56
 
9
57
  - **The web UI answers on \`http://omg.local:8766\` on macOS.** No sudo, no
@@ -1,7 +1,7 @@
1
1
  import { jsx as e, jsxs as i, Fragment as te } from "react/jsx-runtime";
2
2
  import { memo as ne, useState as m, useRef as T, useCallback as v, useEffect as C, useMemo as q, Suspense as I } from "react";
3
3
  import { createPortal as re } from "react-dom";
4
- import { c as oe, H, I as se, X as U, J as ie, K as ae, g as y, L as J, N as le, C as de, y as ce, O as L } from "./embedded-DkJNPkNV.js";
4
+ import { c as oe, H, I as se, X as U, J as ie, K as ae, g as y, L as J, N as le, C as de, y as ce, O as L } from "./embedded-DqbzKVPi.js";
5
5
  import { c as me } from "./create-BrnHvSDE.js";
6
6
  /**
7
7
  * @license lucide-react v0.577.0 - ISC
@@ -1,7 +1,7 @@
1
1
  import { jsxs as r, jsx as k, Fragment as vA } from "react/jsx-runtime";
2
2
  import { useState as L, useRef as S, useEffect as x, useCallback as Y } from "react";
3
- import { c as yA, S as wQ, X as DA, a9 as sQ, C as tQ, aa as eQ, ab as aQ, H as MQ, ac as hQ, R as NQ, y as cQ } from "./embedded-DkJNPkNV.js";
4
- import { C as jA } from "./clipboard-paste-C58tGtpE.js";
3
+ import { c as yA, S as wQ, X as DA, a9 as sQ, C as tQ, aa as eQ, ab as aQ, H as MQ, ac as hQ, R as NQ, y as cQ } from "./embedded-DqbzKVPi.js";
4
+ import { C as jA } from "./clipboard-paste-7Lt2VUd6.js";
5
5
  /**
6
6
  * @license lucide-react v0.577.0 - ISC
7
7
  *
@@ -1,4 +1,4 @@
1
- import { z as a, E as n, g as d, F as o } from "./embedded-DkJNPkNV.js";
1
+ import { z as a, E as n, g as d, F as o } from "./embedded-DqbzKVPi.js";
2
2
  function s(e) {
3
3
  return a(e.defaultTagName ?? "div", e, e);
4
4
  }
@@ -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 { ah as uo } from "./embedded-DkJNPkNV.js";
4
+ import { ah as uo } from "./embedded-DqbzKVPi.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,4 +1,4 @@
1
- import { c as e } from "./embedded-DkJNPkNV.js";
1
+ import { c as e } from "./embedded-DqbzKVPi.js";
2
2
  /**
3
3
  * @license lucide-react v0.577.0 - ISC
4
4
  *
@@ -1,6 +1,6 @@
1
1
  import { jsxs as i, jsx as s } from "react/jsx-runtime";
2
- import { R as L, g as B, S as h, C as x, X as p, B as l, L as b, P as N, h as T, i as v, j as $, k as y, T as O, l as d, m as g } from "./embedded-DkJNPkNV.js";
3
- import { B as n } from "./badge-Ccc9P_y7.js";
2
+ import { R as L, g as B, S as h, C as x, X as p, B as l, L as b, P as N, h as T, i as v, j as $, k as y, T as O, l as d, m as g } from "./embedded-DqbzKVPi.js";
3
+ import { B as n } from "./badge-CT-G9Sni.js";
4
4
  import { useState as G } from "react";
5
5
  function q({
6
6
  setupChecks: c,
@@ -20323,7 +20323,7 @@ function ML({
20323
20323
  }
20324
20324
  const IL = So(
20325
20325
  "session-files-panel",
20326
- () => import("./SessionFilesPanel-evtTCSo8.js")
20326
+ () => import("./SessionFilesPanel-DiaJVC9f.js")
20327
20327
  ), _L = Tl(
20328
20328
  () => import("./index-DhYD46ms.js").then((e) => ({ default: e.PatchDiff }))
20329
20329
  );
@@ -26206,7 +26206,7 @@ async function XB() {
26206
26206
  }
26207
26207
  }
26208
26208
  const q$ = Tl(
26209
- () => import("./streamdown-response-BmWUvRSr.js").then((e) => e.a).then((e) => ({ default: e.StreamdownResponse }))
26209
+ () => import("./streamdown-response-DOEmUKCN.js").then((e) => e.a).then((e) => ({ default: e.StreamdownResponse }))
26210
26210
  );
26211
26211
  function Ri({ className: e, from: t, ...n }) {
26212
26212
  return /* @__PURE__ */ c(
@@ -28633,26 +28633,26 @@ function lz({ className: e, isStreaming: t, children: n, ...r }) {
28633
28633
  function uz({ className: e, children: t, ...n }) {
28634
28634
  return /* @__PURE__ */ c(iz, { className: te("mt-2 text-sm", e), ...n, children: /* @__PURE__ */ c(gu, { className: "ai-live-text max-w-full opacity-90", children: t }) });
28635
28635
  }
28636
- const dz = Tl(() => import("./chat-engine-qWEP8dP9.js"));
28636
+ const dz = Tl(() => import("./chat-engine-CusgSA-z.js"));
28637
28637
  function fz() {
28638
- const e = () => void import("./chat-engine-qWEP8dP9.js"), t = globalThis.requestIdleCallback;
28638
+ const e = () => void import("./chat-engine-CusgSA-z.js"), t = globalThis.requestIdleCallback;
28639
28639
  typeof t == "function" ? t(e, { timeout: 3e3 }) : setTimeout(e, 1500);
28640
28640
  }
28641
28641
  const Kk = So(
28642
28642
  "TermView",
28643
- () => import("./TermView-BLrojlpG.js").then((e) => ({ default: e.TermView }))
28644
- ), mz = So("BrowserProfiles", () => import("./BrowserProfiles-Crs8iOWi.js")), Wy = So("ShippedPage", () => import("./shipped-page-p3Rp58sd.js")), pz = So(
28643
+ () => import("./TermView-DmWxegya.js").then((e) => ({ default: e.TermView }))
28644
+ ), mz = So("BrowserProfiles", () => import("./BrowserProfiles-DWiOOnmZ.js")), Wy = So("ShippedPage", () => import("./shipped-page-DgRSNfaJ.js")), pz = So(
28645
28645
  "SessionTokenUsageDialog",
28646
- () => import("./session-token-usage-JZELdGNz.js")
28646
+ () => import("./session-token-usage-BTfEbMDF.js")
28647
28647
  ), hz = So(
28648
28648
  "CodingAgentsPage",
28649
- () => import("./coding-agents-page-b_R-Xvh_.js")
28649
+ () => import("./coding-agents-page-l0LEAhrA.js")
28650
28650
  ), Gy = So(
28651
28651
  "ResumeSessionSheet",
28652
- () => import("./resume-session-sheet-D1sam0RD.js")
28652
+ () => import("./resume-session-sheet-AFE1qhRv.js")
28653
28653
  ), gz = So(
28654
28654
  "ChangelogPage",
28655
- () => import("./ChangelogPage-Ca_8TgTL.js")
28655
+ () => import("./ChangelogPage-Br9RF_0x.js")
28656
28656
  ), yu = br("configured"), bz = {
28657
28657
  claude: "Claude",
28658
28658
  codex: "Codex",
@@ -1,4 +1,4 @@
1
- import { R as c, L as f, A as d } from "./streamdown-response-BmWUvRSr.js";
1
+ import { R as c, L as f, A as d } from "./streamdown-response-DOEmUKCN.js";
2
2
  import { useContext as p, useState as L, useEffect as N } from "react";
3
3
  import { jsx as x } from "react/jsx-runtime";
4
4
  var A = ({ code: s, language: e, raw: a, className: o, startLine: m, lineNumbers: u, ...g }) => {
@@ -1,4 +1,4 @@
1
- import { w as T, s as U, h as X, c as Y, v as G, S as J, o as k, l as Q, f as M, m as y } from "./streamdown-response-BmWUvRSr.js";
1
+ import { w as T, s as U, h as X, c as Y, v as G, S as J, o as k, l as Q, f as M, m as y } from "./streamdown-response-DOEmUKCN.js";
2
2
  import v from "./katex-jHfnQmlp.js";
3
3
  function Z(t, e) {
4
4
  return B(t, {}) || { type: "root", children: [] };
package/dist-lib/index.js CHANGED
@@ -1,6 +1,6 @@
1
1
  import "react/jsx-runtime";
2
2
  import "react";
3
- import { aj as p, ak as m, al as o } from "./embedded-DkJNPkNV.js";
3
+ import { aj as p, ak as m, al as o } from "./embedded-DqbzKVPi.js";
4
4
  export {
5
5
  p as OmgAppSurface,
6
6
  m as OmgSettingsSurface,
@@ -0,0 +1,4 @@
1
+ import { p } from "./streamdown-response-DOEmUKCN.js";
2
+ export {
3
+ p as Mermaid
4
+ };
@@ -1,5 +1,5 @@
1
1
  import { jsx as t, jsxs as s, Fragment as N } from "react/jsx-runtime";
2
- import { r as H, n as Q, a as le, o as re, p as oe, q as ie, X, A, g as u, R as B, s as ce, u as de, v as J, T as ue, w as me, x as he, y as pe, L as fe } from "./embedded-DkJNPkNV.js";
2
+ import { r as H, n as Q, a as le, o as re, p as oe, q as ie, X, A, g as u, R as B, s as ce, u as de, v as J, T as ue, w as me, x as he, y as pe, L as fe } from "./embedded-DqbzKVPi.js";
3
3
  import { useState as a, useRef as L, useEffect as v, useCallback as ge } from "react";
4
4
  function we({
5
5
  initial: m,
@@ -1,5 +1,5 @@
1
1
  import { jsx as s, jsxs as n, Fragment as $ } from "react/jsx-runtime";
2
- import { a as C, D as T, b as M, d as D, e as S, G as F, f as L, t as R, L as j, g as z } from "./embedded-DkJNPkNV.js";
2
+ import { a as C, D as T, b as M, d as D, e as S, G as F, f as L, t as R, L as j, g as z } from "./embedded-DqbzKVPi.js";
3
3
  import { useState as g, useCallback as P, useEffect as U } from "react";
4
4
  function u({
5
5
  title: r,
@@ -1,6 +1,6 @@
1
1
  import { jsxs as l, jsx as r, Fragment as me } from "react/jsx-runtime";
2
2
  import { useState as f, useEffect as w, useRef as fe, useContext as $e, useMemo as Te } from "react";
3
- import { c as ve, Q as he, U as ze, V as S, W as ge, Y as Se, Z as Pe, _ as je, B as Fe, L as pe, v as J, y as Ye, R as Ge, g as P, T as Be, $ as Ke, h as be, i as Ue, a0 as He, a as L, a1 as k, a2 as R, m as _, a3 as W, a4 as Ve, a5 as qe, a6 as Qe, a7 as Xe, P as Je, a8 as We } from "./embedded-DkJNPkNV.js";
3
+ import { c as ve, Q as he, U as ze, V as S, W as ge, Y as Se, Z as Pe, _ as je, B as Fe, L as pe, v as J, y as Ye, R as Ge, g as P, T as Be, $ as Ke, h as be, i as Ue, a0 as He, a as L, a1 as k, a2 as R, m as _, a3 as W, a4 as Ve, a5 as qe, a6 as Qe, a7 as Xe, P as Je, a8 as We } from "./embedded-DqbzKVPi.js";
4
4
  /**
5
5
  * @license lucide-react v0.577.0 - ISC
6
6
  *
@@ -3,7 +3,7 @@ var Od = (e, t, n) => t in e ? Rd(e, t, { enumerable: !0, configurable: !0, writ
3
3
  var le = (e, t, n) => Od(e, typeof t != "symbol" ? t + "" : t, n);
4
4
  import { jsx as y, jsxs as J, Fragment as _t } from "react/jsx-runtime";
5
5
  import { memo as he, useId as Dd, useTransition as Pd, useMemo as Ee, useRef as Re, useEffect as De, useState as ge, createElement as Xa, isValidElement as Vt, cloneElement as Md, useContext as Pe, createContext as Jt, useCallback as ze, Suspense as wi, lazy as Zu } from "react";
6
- import { ai as Ju, g as eo, a9 as vd, C as Bd, aa as Fd } from "./embedded-DkJNPkNV.js";
6
+ import { ai as Ju, g as eo, a9 as vd, C as Bd, aa as Fd } from "./embedded-DqbzKVPi.js";
7
7
  import { createPortal as to } from "react-dom";
8
8
  import { f as Ur, p as Ka, e as Za, g as Ja, h as Jn, s as Mt, z as no, i as ro, j as io, k as Hd, l as es, w as Ud, b as zd, c as $d, m as jd, d as qd } from "./engine-compile-BeZvvx0I.js";
9
9
  import { g as ao } from "./_commonjsHelpers-C6fGbg64.js";
@@ -18959,7 +18959,7 @@ var yc = Jt(!1), kk = () => Pe(yc), Ua = (...e) => nc(Ju(e)), xk = (e, t) => {
18959
18959
  for (; t > 0 && e[t - 1] === `
18960
18960
  `; ) t--;
18961
18961
  return e.slice(0, t);
18962
- }, wk = Zu(() => import("./highlighted-body-OFNGDK62-DbU5aODl.js").then((e) => ({ default: e.HighlightedCodeBlockBody }))), Lk = ({ code: e, language: t, className: n, children: r, isIncomplete: i = !1, startLine: a, lineNumbers: s, ...u }) => {
18962
+ }, wk = Zu(() => import("./highlighted-body-OFNGDK62-CE2XxxZN.js").then((e) => ({ default: e.HighlightedCodeBlockBody }))), Lk = ({ code: e, language: t, className: n, children: r, isIncomplete: i = !1, startLine: a, lineNumbers: s, ...u }) => {
18963
18963
  let o = ee(), l = Ee(() => Sk(e), [e]), d = Ee(() => ({ bg: "transparent", fg: "inherit", tokens: l.split(`
18964
18964
  `).map((f) => [{ content: f, color: "inherit", bgColor: "transparent", htmlStyle: {}, offset: 0 }]) }), [l]);
18965
18965
  return y(Cc.Provider, { value: { code: e }, children: J(Ik, { isIncomplete: i, language: t, children: [y(Nk, { language: t }), r ? y("div", { className: o("pointer-events-none sticky top-2 z-10 -mt-10 flex h-8 items-center justify-end"), children: y("div", { className: o("pointer-events-auto flex shrink-0 items-center gap-2 rounded-md border border-sidebar bg-sidebar/80 px-1.5 py-1 supports-[backdrop-filter]:bg-sidebar/70 supports-[backdrop-filter]:backdrop-blur"), "data-streamdown": "code-block-actions", children: r }) }) : null, y(wi, { fallback: y(Ck, { className: n, language: t, lineNumbers: s, result: d, startLine: a, ...u }), children: y(wk, { className: n, code: l, language: t, lineNumbers: s, raw: d, startLine: a, ...u }) })] }) });
@@ -19301,7 +19301,7 @@ var yc = Jt(!1), kk = () => Pe(yc), Ua = (...e) => nc(Ju(e)), xk = (e, t) => {
19301
19301
  }, Zk = ({ children: e, className: t, showControls: n, showCopy: r = !0, showDownload: i = !0, showFullscreen: a = !0, ...s }) => {
19302
19302
  let u = ee(), o = n && r, l = n && i, d = n && a, f = o || l || d;
19303
19303
  return J("div", { className: u("my-4 flex flex-col gap-2 rounded-lg border border-border bg-sidebar p-2"), "data-streamdown": "table-wrapper", children: [f ? J("div", { className: u("flex items-center justify-end gap-1"), children: [o ? y(Rc, {}) : null, l ? y(Oc, {}) : null, d ? y(Kk, { showCopy: o, showDownload: l, children: e }) : null] }) : null, y("div", { className: u("border-collapse overflow-x-auto overflow-y-auto rounded-md border border-border bg-background"), children: y("table", { className: u("w-full divide-y divide-border", t), "data-streamdown": "table", ...s, children: e }) })] });
19304
- }, Jk = /startLine=(\d+)/, ex = /\bnoLineNumbers\b/, tx = Zu(() => import("./mermaid-GHXKKRXX-D3ipvS5b.js").then((e) => ({ default: e.Mermaid }))), nx = /language-([^\s]+)/;
19304
+ }, Jk = /startLine=(\d+)/, ex = /\bnoLineNumbers\b/, tx = Zu(() => import("./mermaid-GHXKKRXX-CA6x18-K.js").then((e) => ({ default: e.Mermaid }))), nx = /language-([^\s]+)/;
19305
19305
  function Jr(e, t) {
19306
19306
  if (!(e != null && e.position || t != null && t.position)) return !0;
19307
19307
  if (!(e != null && e.position && t != null && t.position)) return !1;
@@ -20814,7 +20814,7 @@ function S6(e) {
20814
20814
  }
20815
20815
  function w6() {
20816
20816
  return Tr || (Tr = Promise.all([
20817
- import("./index-B1tL17K-.js"),
20817
+ import("./index-BhRhUmly.js"),
20818
20818
  import("./index-JkCQXUYs.js").then((e) => e.bp)
20819
20819
  ]).then(([e, t]) => {
20820
20820
  Hn = { math: e.math, mermaid: t.mermaid };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@omg-dev/app",
3
- "version": "0.1.313",
3
+ "version": "0.1.315",
4
4
  "description": "The full OMG application surface for React hosts.",
5
5
  "license": "MIT",
6
6
  "homepage": "https://omg.dev",
@@ -24,7 +24,7 @@
24
24
  },
25
25
  "type": "module",
26
26
  "dependencies": {
27
- "@omg-dev/client": "0.1.313",
27
+ "@omg-dev/client": "0.1.315",
28
28
  "@ai-sdk/react": "^4.0.19",
29
29
  "@base-ui/react": "^1.3.0",
30
30
  "@number-flow/react": "^0.6.2",
@@ -1,4 +0,0 @@
1
- import { p } from "./streamdown-response-BmWUvRSr.js";
2
- export {
3
- p as Mermaid
4
- };