@omg-dev/app 0.1.320 → 0.1.322

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,56 @@
1
1
  import { jsx as e } from "react/jsx-runtime";
2
- import { M as n } from "./embedded-DdwkOHs-.js";
2
+ import { M as n } from "./embedded-DT1Dv8oy.js";
3
3
  const t = `# Changelog
4
4
 
5
5
  Recent product updates and deployment notes.
6
6
 
7
+ ## August 9, 2026 - pi can sign in, and the agents page stops shouting (v0.1.322)
8
+
9
+ - **You can sign in to pi from Settings.** pi shipped with no sign-in at all —
10
+ just an \`ANTHROPIC_API_KEY\` note and two disabled buttons — because it has no
11
+ \`pi login\` command to drive; its login lives inside the interactive TUI. We now
12
+ use pi's own credential library in-process, so three providers connect from the
13
+ same UI as every other agent: **Claude (Pro/Max)** and **ChatGPT (Codex)** by
14
+ OAuth, and **OpenCode Zen** by API key. Credentials are written to pi's own
15
+ \`~/.pi/agent/auth.json\` under pi's lock, so a token refresh happening at the
16
+ same time cannot rotate a refresh token out from under itself.
17
+ - **pi can actually run as the provider you connected.** pi sessions could only
18
+ ever name one provider, so ChatGPT and Zen models would have been unreachable
19
+ even after signing in. Models now carry their provider, and only models whose
20
+ provider is connected are offered.
21
+ - **pi no longer reports "Ready" when nothing is configured.** The check treated
22
+ the existence of \`auth.json\` as proof of sign-in, but pi creates that file as
23
+ \`{}\` on first launch — so every machine that had ever started pi looked
24
+ connected. It now looks inside, and also counts env vars and pinned provider
25
+ keys.
26
+ - **The coding-agents settings page shows the state that matters.** It used to
27
+ print two badges, every check with its resolved binary path, an instructions
28
+ sentence, an install command and a login command — per agent, times seven. A
29
+ working agent now says nothing; a broken one says what is missing, and the
30
+ diagnostics are one tap down.
31
+ - **\`omg setup\` stopped handing out a URL it never checked.** On macOS the
32
+ summary's first line was \`http://omg.local:8766\` whenever \`dns-sd\` existed,
33
+ assuming the mDNS name had been claimed — which setup cannot see, and which
34
+ fails when mDNS is off or the name is already taken on the network. The summary
35
+ now shows only addresses it verified.
36
+
37
+ ## August 9, 2026 - The browser tool goes, and macOS installs work in a plain shell (v0.1.321)
38
+
39
+ - **The cloud-browser login profiles are gone.** They did not work reliably
40
+ enough to keep, and they were the most expensive thing left: playwright's
41
+ 20MB driver plus a ~150MB Chromium that setup never installed, so a default
42
+ install paid for the feature and still could not run it. Anything like this
43
+ belongs in a plugin system, added on top at runtime, rather than carried by
44
+ every install on the chance someone wants it.
45
+ - **\`omg\` and \`lfg\` work in a plain terminal on macOS.** They were symlinks to a
46
+ \`#!/usr/bin/env bun\` script, and setup deliberately does not edit your shell
47
+ profile there — so both failed with "env: bun: No such file or directory" on
48
+ machines where bun was installed and working. Setup now writes a launcher that
49
+ finds bun the way the npm CLI does.
50
+ - **\`omg setup\` no longer dies claiming bun is missing** when it is installed.
51
+ The check ran one line before the code that adds \`~/.bun/bin\` to \`PATH\`.
52
+ - \`node_modules\` is 66MB to 46MB; nothing in it is larger than 7MB.
53
+
7
54
  ## August 9, 2026 - Starting an opencode session from a finding works again (v0.1.320)
8
55
 
9
56
  - **"thinkingLevel is not supported for opencode sessions" is fixed.** Replying
@@ -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-DdwkOHs-.js";
4
+ import { z as oe, E as H, F as se, X as U, H as ie, I as ae, f as y, L as J, J as le, m as de, y as ce, N as L } from "./embedded-DT1Dv8oy.js";
5
5
  import { c as me } from "./create-BrnHvSDE.js";
6
6
  /**
7
7
  * @license lucide-react v0.577.0 - ISC
@@ -80,7 +80,7 @@ function ke({ tree: n, onNavigate: s }) {
80
80
  );
81
81
  }
82
82
  function we({ sid: n, onClose: s }) {
83
- const [o, c] = m(null), [t, h] = m(null), [k, x] = m(null), [g, j] = m(null), [a, S] = m(null), [R, $] = m(null), [W, P] = m(!1), [u, w] = m(!1), [z, O] = m(""), [p, f] = m({ kind: "idle" }), [K, E] = m("tree"), A = ye(), b = T(null), V = v((r) => {
83
+ const [o, c] = m(null), [t, h] = m(null), [k, x] = m(null), [g, j] = m(null), [a, z] = m(null), [R, $] = m(null), [W, P] = m(!1), [u, w] = m(!1), [S, A] = m(""), [p, f] = m({ kind: "idle" }), [V, E] = m("tree"), M = ye(), b = T(null), X = v((r) => {
84
84
  b.current = r;
85
85
  }, []), F = T(null);
86
86
  C(() => {
@@ -98,18 +98,18 @@ function we({ sid: n, onClose: s }) {
98
98
  window.removeEventListener("keydown", r), document.body.style.overflow = d;
99
99
  };
100
100
  }, [s]);
101
- const X = v(
101
+ const D = v(
102
102
  (r) => {
103
- t && (E("file"), r !== F.current && (F.current = r, j(r), w(!1), f({ kind: "idle" }), O(""), b.current = null, S(null), $(null), P(!0), _(
103
+ t && (E("file"), r !== F.current && (F.current = r, j(r), w(!1), f({ kind: "idle" }), A(""), b.current = null, z(null), $(null), P(!0), _(
104
104
  `/api/sessions/${n}/file?path=${encodeURIComponent(`${t.root}/${r}`)}`
105
105
  ).then((d) => {
106
- S(d.file), b.current = d.file.contents;
106
+ z(d.file), b.current = d.file.contents;
107
107
  }).catch((d) => $(d instanceof Error ? d.message : String(d))).finally(() => P(!1))));
108
108
  },
109
109
  [n, t]
110
- ), M = v((r) => {
111
- c(r), F.current = null, j(null), S(null), w(!1), E("tree");
112
- }, []), D = v(() => E("tree"), []), Y = q(
110
+ ), O = v((r) => {
111
+ c(r), F.current = null, j(null), z(null), w(!1), E("tree");
112
+ }, []), K = v(() => E("tree"), []), Y = q(
113
113
  () => a ? { ...a, contents: b.current ?? a.contents } : null,
114
114
  // eslint-disable-next-line react-hooks/exhaustive-deps -- `editing` is the
115
115
  // intended trigger; draftRef is a ref and deliberately not reactive.
@@ -120,7 +120,7 @@ function we({ sid: n, onClose: s }) {
120
120
  displayPath: r,
121
121
  original: a.contents,
122
122
  edited: b.current,
123
- note: z
123
+ note: S
124
124
  });
125
125
  if (!d.ok) {
126
126
  f({
@@ -149,7 +149,7 @@ function we({ sid: n, onClose: s }) {
149
149
  } catch (l) {
150
150
  f({ kind: "error", message: l instanceof Error ? l.message : String(l) });
151
151
  }
152
- }, [n, a, g, z]), Q = !!g && K === "file", B = p.kind === "sent" || p.kind === "error" ? "banner" : u ? "editor" : "content", Z = /* @__PURE__ */ e(
152
+ }, [n, a, g, S]), Q = !!g && V === "file", B = p.kind === "sent" || p.kind === "error" ? "banner" : u ? "editor" : "content", Z = /* @__PURE__ */ e(
153
153
  "div",
154
154
  {
155
155
  role: "dialog",
@@ -171,13 +171,13 @@ function we({ sid: n, onClose: s }) {
171
171
  /* @__PURE__ */ e(se, { className: "size-4 shrink-0 text-[var(--primary)]" }),
172
172
  /* @__PURE__ */ i("div", { className: "min-w-0 flex-1", children: [
173
173
  /* @__PURE__ */ e("div", { className: "text-sm font-semibold text-foreground", children: "Files" }),
174
- t ? /* @__PURE__ */ e(ke, { tree: t, onNavigate: M }) : null
174
+ t ? /* @__PURE__ */ e(ke, { tree: t, onNavigate: O }) : null
175
175
  ] }),
176
176
  t != null && t.parent ? /* @__PURE__ */ i(
177
177
  "button",
178
178
  {
179
179
  type: "button",
180
- onClick: () => M(t.parent),
180
+ onClick: () => O(t.parent),
181
181
  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]",
182
182
  children: [
183
183
  /* @__PURE__ */ e(pe, { className: "size-3.5 md:size-3" }),
@@ -208,7 +208,7 @@ function we({ sid: n, onClose: s }) {
208
208
  paths: t.paths,
209
209
  gitStatus: t.gitStatus,
210
210
  selectedPath: g,
211
- onSelectFile: X
211
+ onSelectFile: D
212
212
  }
213
213
  ) }) : /* @__PURE__ */ e(N, { label: "Listing files…" }) })
214
214
  ] }),
@@ -225,7 +225,7 @@ function we({ sid: n, onClose: s }) {
225
225
  "button",
226
226
  {
227
227
  type: "button",
228
- onClick: D,
228
+ onClick: K,
229
229
  "aria-label": "Back to file tree",
230
230
  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",
231
231
  children: /* @__PURE__ */ e(ie, { className: "size-5" })
@@ -272,7 +272,7 @@ function we({ sid: n, onClose: s }) {
272
272
  R ? /* @__PURE__ */ i("div", { className: "px-3 py-2 text-[12px] text-[var(--destructive)]", children: [
273
273
  "Could not open: ",
274
274
  R
275
- ] }) : W || !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(I, { fallback: /* @__PURE__ */ e(N, { label: u ? "Loading editor…" : "Rendering…" }), children: u ? /* @__PURE__ */ e(ve, { file: Y ?? a, themeType: A, onChange: V }) : /* @__PURE__ */ e(be, { file: a, themeType: A }) }),
275
+ ] }) : W || !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(I, { 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 }) }),
276
276
  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
277
277
  ]
278
278
  }
@@ -288,8 +288,8 @@ function we({ sid: n, onClose: s }) {
288
288
  /* @__PURE__ */ e(
289
289
  "textarea",
290
290
  {
291
- value: z,
292
- onChange: (r) => O(r.target.value),
291
+ value: S,
292
+ onChange: (r) => A(r.target.value),
293
293
  rows: 2,
294
294
  placeholder: "Optional: anything else the agent should do alongside this edit",
295
295
  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"