@omg-dev/app 0.6.39 → 0.6.40

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,9 +1,44 @@
1
1
  import { jsx as e } from "react/jsx-runtime";
2
- import { z as n } from "./embedded-7v2RQwAy.js";
2
+ import { z as n } from "./embedded-crKLFtim.js";
3
3
  const t = `# Changelog
4
4
 
5
5
  Recent product updates and deployment notes.
6
6
 
7
+ ## September 4, 2026 - Auto agent reports and a clearer schedule editor (v0.6.40)
8
+
9
+ - **One row per auto agent in the Auto section.** Findings from the same
10
+ agent no longer stack as separate rows. The row shows the agent, a count
11
+ pill, the worst open finding, and a severity dot in the unread-dot slot.
12
+ - **Agent report sheet.** Tap a row to open the agent's report. It lists the
13
+ open findings worst first, with the last sighting and how many runs repeated
14
+ each one. Tap a finding to read it and act on it in place. Dismiss all or
15
+ edit the schedule from the footer.
16
+ - **Full-height sheets on mobile.** The finding sheet, the report sheet and the
17
+ schedule editor are full pages on a phone. The composer no longer hides
18
+ behind the keyboard.
19
+ - **Schedules list rows are two lines.** The name gets the full width. The
20
+ "N open" pill opens the agent's report.
21
+ - **Schedule editor redesign.** The prompt comes first. Schedule, repo, agent
22
+ and enabled sit in one grouped card. The schedule picker has labelled rows.
23
+ Save and Run now stay pinned at the bottom.
24
+ - **Meta Muse Code is available as a coding agent.**
25
+ - **Agents can show any file with \`omg_display_file\`.**
26
+ - **Mobile app:** findings are rows like the web live list, and the app gains a
27
+ user filter, a Pages menu and a Schedules screen.
28
+
29
+ ## September 4, 2026 - Banked Codex resets in Usage (v0.6.39)
30
+
31
+ - **Usage shows every banked Codex reset.** The Codex row now gives the
32
+ authoritative available count, each returned expiry date and grant date, and
33
+ says when Codex returned a count without all detail rows.
34
+ - **A selected reset can be used from Usage.** Each available credit has a
35
+ \`Use reset\` button, followed by an explicit confirmation because redemption
36
+ immediately resets the current Codex limit and cannot be undone.
37
+ - **The remaining stock is hard to miss.** A prominent counter says exactly
38
+ how many resets are still available before any action is taken.
39
+ - **Codex usage is current when the local app server is available.** Older
40
+ Codex installs still fall back to the last session snapshot for the normal
41
+ usage windows.
7
42
  ## September 4, 2026 - Native integrations and per-role tool access (v0.6.39)
8
43
 
9
44
  - **Connect integrations natively.** The Integrations panel lists your
@@ -2,7 +2,7 @@ import { jsx as e, jsxs as s, 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 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, a4 as W, a5 as se, X as I, a6 as ie, a7 as ae, L as H, a8 as le, y as de, C as ce, a9 as L } from "./embedded-7v2RQwAy.js";
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-crKLFtim.js";
6
6
  import { c as me } from "./create-CBk9uwJH.js";
7
7
  /**
8
8
  * @license lucide-react v0.577.0 - ISC
@@ -15,13 +15,13 @@ const ue = [
15
15
  ["path", { d: "M12 3v14", key: "7cf3v8" }],
16
16
  ["path", { d: "M5 21h14", key: "11awu3" }]
17
17
  ], pe = oe("arrow-up-from-line", ue), fe = 6e4;
18
- function he({ displayPath: n, original: o, edited: i, note: c }) {
19
- if (o === i) return { ok: !1, reason: "unchanged" };
20
- const t = me(n, o, i, void 0, void 0, { context: 3 });
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
21
  return t.length > fe ? { ok: !1, reason: "too-large" } : { ok: !0, patch: t, message: xe(n, t, c) };
22
22
  }
23
- function xe(n, o, i) {
24
- const c = i?.trim(), t = [
23
+ function xe(n, o, a) {
24
+ const c = a?.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",
@@ -33,14 +33,14 @@ function xe(n, o, i) {
33
33
  }
34
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"));
35
35
  async function _(n) {
36
- const o = await W(n), i = await o.json().catch(() => ({}));
37
- if (!o.ok) throw new Error(i?.error || `${o.status}`);
38
- return i;
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;
39
39
  }
40
40
  function ye() {
41
- const n = () => typeof document < "u" && document.documentElement.classList.contains("dark") ? "dark" : "light", [o, i] = m(n);
41
+ const n = () => typeof document < "u" && document.documentElement.classList.contains("dark") ? "dark" : "light", [o, a] = m(n);
42
42
  return C(() => {
43
- const c = new MutationObserver(() => i(n()));
43
+ const c = new MutationObserver(() => a(n()));
44
44
  return c.observe(document.documentElement, { attributes: !0, attributeFilter: ["class"] }), () => c.disconnect();
45
45
  }, []), o;
46
46
  }
@@ -50,7 +50,7 @@ const N = ({ label: n }) => /* @__PURE__ */ s("div", { className: "flex items-ce
50
50
  n
51
51
  ] });
52
52
  function ke({ tree: n, onNavigate: o }) {
53
- const i = T(null), c = q(() => {
53
+ const a = T(null), c = q(() => {
54
54
  const t = n.root.split("/").filter(Boolean);
55
55
  return t.map((h, k) => {
56
56
  const x = "/" + t.slice(0, k + 1).join("/");
@@ -58,12 +58,12 @@ function ke({ tree: n, onNavigate: o }) {
58
58
  });
59
59
  }, [n.root, n.ceiling]);
60
60
  return C(() => {
61
- const t = i.current;
61
+ const t = a.current;
62
62
  t && (t.scrollLeft = t.scrollWidth);
63
63
  }, [c]), /* @__PURE__ */ e(
64
64
  "nav",
65
65
  {
66
- ref: i,
66
+ ref: a,
67
67
  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
68
  children: c.map((t, h) => /* @__PURE__ */ s("span", { className: "flex shrink-0 items-center gap-0.5", children: [
69
69
  h > 0 ? /* @__PURE__ */ e(ce, { className: "size-3 opacity-50" }) : null,
@@ -81,18 +81,18 @@ function ke({ tree: n, onNavigate: o }) {
81
81
  );
82
82
  }
83
83
  function we({ sid: n, onClose: o }) {
84
- const [i, 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) => {
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) => {
85
85
  b.current = r;
86
86
  }, []), F = T(null);
87
87
  C(() => {
88
88
  let r = !0;
89
89
  h(null), x(null);
90
- const d = i ? `?root=${encodeURIComponent(i)}` : "";
91
- return _(`/api/sessions/${n}/tree${d}`).then((a) => r && h(a.tree)).catch((a) => r && x(a instanceof Error ? a.message : String(a))), () => {
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))), () => {
92
92
  r = !1;
93
93
  };
94
- }, [n, i]), C(() => {
95
- const r = (a) => a.key === "Escape" && o();
94
+ }, [n, a]), C(() => {
95
+ const r = (i) => i.key === "Escape" && o();
96
96
  window.addEventListener("keydown", r);
97
97
  const d = document.body.style.overflow;
98
98
  return document.body.style.overflow = "hidden", () => {
@@ -132,23 +132,23 @@ function we({ sid: n, onClose: o }) {
132
132
  }
133
133
  f({ kind: "sending" });
134
134
  try {
135
- const a = await W(`/api/sessions/${n}/send`, {
135
+ const i = 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
139
139
  // then picks the edit up, instead of having its thought interrupted.
140
140
  body: JSON.stringify({ text: d.message, mode: "queue" })
141
- }), ee = await a.json().catch(() => ({}));
142
- if (!a.ok) {
141
+ }), ee = await i.json().catch(() => ({}));
142
+ if (!i.ok) {
143
143
  f({
144
144
  kind: "error",
145
- 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})`
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})`
146
146
  });
147
147
  return;
148
148
  }
149
149
  f({ kind: "sent" }), w(!1);
150
- } catch (a) {
151
- f({ kind: "error", message: a instanceof Error ? a.message : String(a) });
150
+ } catch (i) {
151
+ f({ kind: "error", message: i instanceof Error ? i.message : String(i) });
152
152
  }
153
153
  }, [n, l, g, z]), Q = !!g && V === "file", B = p.kind === "sent" || p.kind === "error" ? "banner" : u ? "editor" : "content", Z = /* @__PURE__ */ e(
154
154
  "div",
@@ -229,7 +229,7 @@ function we({ sid: n, onClose: o }) {
229
229
  onClick: K,
230
230
  "aria-label": "Back to file tree",
231
231
  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(ie, { className: "size-5" })
232
+ children: /* @__PURE__ */ e(ae, { className: "size-5" })
233
233
  }
234
234
  ),
235
235
  /* @__PURE__ */ e("span", { className: "min-w-0 flex-1 truncate font-mono text-[12px] text-foreground", children: g }),
@@ -245,7 +245,7 @@ function we({ sid: n, onClose: o }) {
245
245
  u ? "border-[var(--primary)]/40 bg-[var(--primary)]/10 text-foreground" : "border-border text-muted-foreground hover:bg-muted hover:text-foreground"
246
246
  ),
247
247
  children: [
248
- /* @__PURE__ */ e(ae, { className: "size-3.5 md:size-3" }),
248
+ /* @__PURE__ */ e(ie, { className: "size-3.5 md:size-3" }),
249
249
  " ",
250
250
  u ? "Editing" : "Edit"
251
251
  ]
@@ -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 R, useEffect as p, useCallback as q } from "react";
3
- import { f as UA, o as iQ, X as CA, aa as wQ, y as sQ, ab as tQ, ac as eQ, a4 as aQ, ad as MQ, R as hQ, C as NQ } from "./embedded-7v2RQwAy.js";
4
- import { K as ZA } from "./keyboard-CnQhbyYy.js";
3
+ import { f as UA, o as iQ, X as CA, ab as wQ, y as sQ, ac as tQ, ad as eQ, a5 as aQ, ae as MQ, R as hQ, C as NQ } from "./embedded-crKLFtim.js";
4
+ import { K as ZA } from "./keyboard-DMPtynCa.js";
5
5
  /**
6
6
  * @license lucide-react v0.577.0 - ISC
7
7
  *
@@ -0,0 +1 @@
1
+ <svg height="1em" width="1em" viewBox="0 0 180 180" fill="none" xmlns="http://www.w3.org/2000/svg"><title>Muse</title><rect width="180" height="180" rx="37" fill="#0866FF"/><path d="M44 118c0-27 10-49 26-49 12 0 20 12 28 27 8-15 16-27 28-27 16 0 26 22 26 49 0 10-4 16-11 16-8 0-12-7-15-15-5-13-10-30-18-30-6 0-11 11-17 24l-6 13c-4 7-8 8-13 8-8 0-11-7-11-16Z" fill="#fff"/><path d="M66 69c-16 0-26 22-26 49 0 9 3 16 11 16 5 0 9-1 13-8l6-13c6-13 11-24 17-24 8 0 13 17 18 30 3 8 7 15 15 15 7 0 11-6 11-16 0-27-10-49-26-49" stroke="#fff" stroke-width="8" stroke-linejoin="round"/></svg>
@@ -1,6 +1,6 @@
1
1
  import { jsx as i, jsxs as l } from "react/jsx-runtime";
2
2
  import { useState as x, useEffect as h, useMemo as b } from "react";
3
- import { f as y, F as N, O as k, Q as w, a3 as v, L as I, m as A, k as _ } from "./embedded-7v2RQwAy.js";
3
+ import { f as y, F as N, O as k, Q as w, a4 as v, L as I, m as A, k as _ } from "./embedded-crKLFtim.js";
4
4
  import { cn as g } from "cnfast";
5
5
  /**
6
6
  * @license lucide-react v0.577.0 - ISC
@@ -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 { ae as uo } from "./embedded-7v2RQwAy.js";
4
+ import { af as uo } from "./embedded-crKLFtim.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 e, Fragment as O } from "react/jsx-runtime";
2
- import { R, B as u, L as $, n as A, o as S, M as G, p as j, q as E, s as f, T as P, u as D, v as W, w as T, x as X, y as J, X as Q, K as V } from "./embedded-7v2RQwAy.js";
2
+ import { R, B as u, L as $, n as A, o as S, M as G, p as j, q as E, s as f, T as P, u as D, v as W, w as T, x as X, y as J, X as Q, K as V } from "./embedded-crKLFtim.js";
3
3
  import { cn as U } from "cnfast";
4
4
  import { useState as I } from "react";
5
5
  function B(l) {
@@ -1,7 +1,7 @@
1
1
  import { jsxs as pe, jsx as J, Fragment as zt } from "react/jsx-runtime";
2
2
  import { useState as Ve, useRef as Qe, useCallback as ve, useEffect as Le } from "react";
3
- import { f as Fn, a4 as Ai, ac as Mn, B as Ge, R as Tn, X as Qn, L as Xi, af as Ln } from "./embedded-7v2RQwAy.js";
4
- import { K as Rn } from "./keyboard-CnQhbyYy.js";
3
+ import { f as Fn, a5 as Ai, ad as Mn, B as Ge, R as Tn, X as Qn, L as Xi, ag as Ln } from "./embedded-crKLFtim.js";
4
+ import { K as Rn } from "./keyboard-DMPtynCa.js";
5
5
  /**
6
6
  * @license lucide-react v0.577.0 - ISC
7
7
  *