@omg-dev/app 0.1.378 → 0.1.380

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,22 @@
1
1
  import { jsx as e } from "react/jsx-runtime";
2
- import { M as n } from "./embedded-CeZ6fNt3.js";
2
+ import { M as n } from "./embedded-C2gDvz9G.js";
3
3
  const t = `# Changelog
4
4
 
5
5
  Recent product updates and deployment notes.
6
6
 
7
+ ## August 15, 2026 - Connect OpenCode Go without a terminal (v0.1.380)
8
+
9
+ - **OpenCode's Go plan and Zen now connect with an API key in Settings →
10
+ Coding agents.** Paste the key on the provider row and it is stored with
11
+ OpenCode's own credentials. Previously the only way in was running
12
+ \`opencode auth login\` in a terminal, which a hosted Computer may not have.
13
+ - **The OpenCode row now shows which providers are connected**, including ones
14
+ signed in earlier from the CLI, instead of only reporting that OpenCode is
15
+ signed in somewhere.
16
+ - **Connecting or disconnecting one provider leaves the others untouched**, so
17
+ adding a Go key no longer risks the ChatGPT login \`opencode auth login\`
18
+ wrote.
19
+
7
20
  ## August 15, 2026 - Plans run the agents they advertise (v0.1.378)
8
21
 
9
22
  - **Starter and Starter Plus Computers now run three agents at once**, as their
@@ -1,7 +1,8 @@
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 { 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-CeZ6fNt3.js";
4
+ import { cn as y } from "cnfast";
5
+ import { y as oe, z as H, F as se, X as U, E as ie, H as ae, L as J, I as le, l as de, x as ce, J as L } from "./embedded-C2gDvz9G.js";
5
6
  import { c as me } from "./create-BrnHvSDE.js";
6
7
  /**
7
8
  * @license lucide-react v0.577.0 - ISC
@@ -330,7 +331,7 @@ function we({ sid: n, onClose: s }) {
330
331
  );
331
332
  return re(Z, document.body);
332
333
  }
333
- const Te = ne(we);
334
+ const Le = ne(we);
334
335
  export {
335
- Te as default
336
+ Le as default
336
337
  };
@@ -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 { z as cA, S as wQ, X as DA, a8 as sQ, m as tQ, a9 as eQ, aa as aQ, E as MQ, ab as hQ, R as NQ, y as cQ } from "./embedded-CeZ6fNt3.js";
3
+ import { y as cA, S as wQ, X as DA, a7 as sQ, l as tQ, a8 as eQ, a9 as aQ, z as MQ, aa as hQ, R as NQ, x as cQ } from "./embedded-C2gDvz9G.js";
4
4
  /**
5
5
  * @license lucide-react v0.577.0 - ISC
6
6
  *
@@ -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 { ac as uo } from "./embedded-CeZ6fNt3.js";
4
+ import { ab as uo } from "./embedded-C2gDvz9G.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,17 +1,18 @@
1
- import { jsxs as t, jsx as e, Fragment as G } from "react/jsx-runtime";
2
- import { R as K, f as L, B as d, L as C, P as z, S as w, g as R, h as p, T, i as m, j as F, k as M, l as $, C as _, m as q, X as H, K as U } from "./embedded-CeZ6fNt3.js";
3
- import { useState as S } from "react";
4
- function j(l) {
5
- const i = l.filter((r) => !r.ok);
1
+ import { jsxs as t, jsx as e, Fragment as K } from "react/jsx-runtime";
2
+ import { R as F, B as d, L as z, P as w, S as R, f as $, g, T, h as m, i as M, j as _, k as S, C as q, l as H, X as U, K as W } from "./embedded-C2gDvz9G.js";
3
+ import { cn as E } from "cnfast";
4
+ import { useState as A } from "react";
5
+ function j(a) {
6
+ const i = a.filter((r) => !r.ok);
6
7
  return i.length ? i.length === 1 ? `${i[0].label} missing` : `${i.length} checks failing` : null;
7
8
  }
8
- function A({ checks: l }) {
9
- return /* @__PURE__ */ e("div", { className: "space-y-1", children: l.map((i) => /* @__PURE__ */ t(
9
+ function I({ checks: a }) {
10
+ return /* @__PURE__ */ e("div", { className: "space-y-1", children: a.map((i) => /* @__PURE__ */ t(
10
11
  "div",
11
12
  {
12
13
  className: "flex min-w-0 items-center gap-1.5 text-xs text-muted-foreground",
13
14
  children: [
14
- i.ok ? /* @__PURE__ */ e(q, { className: "size-3.5 shrink-0 text-success" }) : /* @__PURE__ */ e(H, { className: "size-3.5 shrink-0 text-destructive" }),
15
+ i.ok ? /* @__PURE__ */ e(H, { className: "size-3.5 shrink-0 text-success" }) : /* @__PURE__ */ e(U, { className: "size-3.5 shrink-0 text-destructive" }),
15
16
  /* @__PURE__ */ e("span", { className: "shrink-0", children: i.label }),
16
17
  i.detail ? /* @__PURE__ */ e("span", { className: "min-w-0 truncate text-muted-foreground/70", children: i.detail }) : null
17
18
  ]
@@ -19,8 +20,8 @@ function A({ checks: l }) {
19
20
  i.label
20
21
  )) });
21
22
  }
22
- function I({
23
- icon: l,
23
+ function L({
24
+ icon: a,
24
25
  title: i,
25
26
  note: r,
26
27
  ok: u,
@@ -39,7 +40,7 @@ function I({
39
40
  "aria-expanded": c,
40
41
  className: "flex min-w-0 flex-1 items-center gap-3 text-left",
41
42
  children: [
42
- /* @__PURE__ */ e("span", { className: "flex size-8 shrink-0 items-center justify-center rounded-[8px] border border-border bg-background", children: l }),
43
+ /* @__PURE__ */ e("span", { className: "flex size-8 shrink-0 items-center justify-center rounded-[8px] border border-border bg-background", children: a }),
43
44
  /* @__PURE__ */ t("span", { className: "min-w-0 flex-1", children: [
44
45
  /* @__PURE__ */ t("span", { className: "flex items-center gap-2", children: [
45
46
  /* @__PURE__ */ e("span", { className: "truncate text-sm font-medium", children: i }),
@@ -48,9 +49,9 @@ function I({
48
49
  r ? /* @__PURE__ */ e("span", { className: "block truncate text-xs text-muted-foreground", children: r }) : null
49
50
  ] }),
50
51
  /* @__PURE__ */ e(
51
- _,
52
+ q,
52
53
  {
53
- className: L(
54
+ className: E(
54
55
  "size-4 shrink-0 text-muted-foreground/60 transition-transform duration-150",
55
56
  c && "rotate-180"
56
57
  )
@@ -64,58 +65,58 @@ function I({
64
65
  c ? /* @__PURE__ */ e("div", { className: "mt-3 space-y-3 pl-11", children: f }) : null
65
66
  ] });
66
67
  }
67
- function W({
68
- provider: l,
68
+ function X({
69
+ provider: a,
69
70
  onConnect: i,
70
71
  onDisconnect: r
71
72
  }) {
72
73
  return /* @__PURE__ */ t("div", { className: "flex items-center gap-2 rounded-xl border border-border/70 bg-background/55 px-2.5 py-2", children: [
73
74
  /* @__PURE__ */ t("span", { className: "min-w-0 flex-1", children: [
74
- /* @__PURE__ */ e("span", { className: "block truncate text-xs font-medium", children: l.label }),
75
- l.fromEnv ? /* @__PURE__ */ e("span", { className: "block truncate text-[11px] text-muted-foreground", children: "From the environment" }) : null
75
+ /* @__PURE__ */ e("span", { className: "block truncate text-xs font-medium", children: a.label }),
76
+ a.detail || a.fromEnv ? /* @__PURE__ */ e("span", { className: "block truncate text-[11px] text-muted-foreground", children: a.detail ?? "From the environment" }) : null
76
77
  ] }),
77
- l.connected ? /* @__PURE__ */ t(G, { children: [
78
+ a.connected ? /* @__PURE__ */ t(K, { children: [
78
79
  /* @__PURE__ */ e("span", { className: "text-[11px] text-success", children: "Connected" }),
79
- l.fromEnv ? null : /* @__PURE__ */ e(
80
+ a.fromEnv ? null : /* @__PURE__ */ e(
80
81
  "button",
81
82
  {
82
83
  type: "button",
83
- onClick: () => r(l),
84
- title: `Disconnect ${l.label}`,
85
- "aria-label": `Disconnect ${l.label}`,
84
+ onClick: () => r(a),
85
+ title: `Disconnect ${a.label}`,
86
+ "aria-label": `Disconnect ${a.label}`,
86
87
  className: "flex size-7 items-center justify-center rounded-full text-muted-foreground transition hover:bg-destructive/10 hover:text-destructive",
87
88
  children: /* @__PURE__ */ e(T, { className: "size-3.5" })
88
89
  }
89
90
  )
90
- ] }) : /* @__PURE__ */ t(d, { size: "sm", variant: "outline", onClick: () => i(l), children: [
91
- l.method === "oauth" ? /* @__PURE__ */ e(p, { className: "size-3.5" }) : /* @__PURE__ */ e(U, { className: "size-3.5" }),
91
+ ] }) : /* @__PURE__ */ t(d, { size: "sm", variant: "outline", onClick: () => i(a), children: [
92
+ a.method === "oauth" ? /* @__PURE__ */ e(g, { className: "size-3.5" }) : /* @__PURE__ */ e(W, { className: "size-3.5" }),
92
93
  "Connect"
93
94
  ] })
94
95
  ] });
95
96
  }
96
- function V({
97
- setupChecks: l,
97
+ function Z({
98
+ setupChecks: a,
98
99
  agents: i,
99
100
  onVisibleChange: r,
100
101
  onSetup: u,
101
102
  onLogin: o,
102
103
  onAddClaudeAccount: c,
103
104
  onRemoveClaudeAccount: h,
104
- onConnectPiProvider: f,
105
- onDisconnectPiProvider: E,
106
- onSetupCheck: D,
105
+ onConnectProvider: f,
106
+ onDisconnectProvider: D,
107
+ onSetupCheck: O,
107
108
  onRefresh: P
108
109
  }) {
109
- const [x, g] = S(!1), [N, O] = S(null), k = (n) => O((s) => s === n ? null : n);
110
- async function B() {
110
+ const [x, k] = A(!1), [N, B] = A(null), y = (n) => B((s) => s === n ? null : n);
111
+ async function G() {
111
112
  if (!x) {
112
- g(!0);
113
+ k(!0);
113
114
  try {
114
- await P(), $.success("Coding agents refreshed");
115
+ await P(), S.success("Coding agents refreshed");
115
116
  } catch (n) {
116
- $.error(n instanceof Error ? n.message : "Could not refresh coding agents");
117
+ S.error(n instanceof Error ? n.message : "Could not refresh coding agents");
117
118
  } finally {
118
- g(!1);
119
+ k(!1);
119
120
  }
120
121
  }
121
122
  }
@@ -126,27 +127,27 @@ function V({
126
127
  "button",
127
128
  {
128
129
  type: "button",
129
- onClick: () => void B(),
130
+ onClick: () => void G(),
130
131
  disabled: x,
131
132
  className: "flex items-center gap-1 text-xs text-muted-foreground transition-colors hover:text-foreground disabled:opacity-50",
132
133
  children: [
133
- /* @__PURE__ */ e(K, { className: L("size-3.5", x && "animate-spin") }),
134
+ /* @__PURE__ */ e(F, { className: E("size-3.5", x && "animate-spin") }),
134
135
  "Refresh"
135
136
  ]
136
137
  }
137
138
  )
138
139
  ] }),
139
- l.length ? /* @__PURE__ */ e("div", { className: "overflow-hidden rounded-2xl border border-border bg-card/40 divide-y divide-border", children: l.map((n) => /* @__PURE__ */ t(
140
- I,
140
+ a.length ? /* @__PURE__ */ e("div", { className: "overflow-hidden rounded-2xl border border-border bg-card/40 divide-y divide-border", children: a.map((n) => /* @__PURE__ */ t(
141
+ L,
141
142
  {
142
- icon: /* @__PURE__ */ e(w, { className: "size-4 text-muted-foreground" }),
143
+ icon: /* @__PURE__ */ e(R, { className: "size-4 text-muted-foreground" }),
143
144
  title: n.label,
144
145
  note: j(n.checks),
145
146
  ok: n.configured,
146
147
  open: N === `setup:${n.key}`,
147
- onToggle: () => k(`setup:${n.key}`),
148
+ onToggle: () => y(`setup:${n.key}`),
148
149
  children: [
149
- /* @__PURE__ */ e(A, { checks: n.checks }),
150
+ /* @__PURE__ */ e(I, { checks: n.checks }),
150
151
  n.instructions.map((s) => /* @__PURE__ */ e("p", { className: "text-xs text-muted-foreground", children: s }, s)),
151
152
  /* @__PURE__ */ t(
152
153
  d,
@@ -154,10 +155,10 @@ function V({
154
155
  size: "sm",
155
156
  variant: "outline",
156
157
  disabled: !n.canAutoSetup || n.running,
157
- onClick: () => D(n.key),
158
+ onClick: () => O(n.key),
158
159
  title: n.canAutoSetup ? n.actionLabel : "Install a supported coding agent first",
159
160
  children: [
160
- n.running ? /* @__PURE__ */ e(C, { className: "size-4 animate-spin" }) : /* @__PURE__ */ e(z, { className: "size-4" }),
161
+ n.running ? /* @__PURE__ */ e(z, { className: "size-4 animate-spin" }) : /* @__PURE__ */ e(w, { className: "size-4" }),
161
162
  n.running ? "Running…" : n.actionLabel
162
163
  ]
163
164
  }
@@ -167,73 +168,73 @@ function V({
167
168
  n.key
168
169
  )) }) : null,
169
170
  /* @__PURE__ */ e("div", { className: "overflow-hidden rounded-2xl border border-border bg-card/40 divide-y divide-border", children: i.map((n) => {
170
- const s = n.status, b = n.key === "aisdk" ? s.accounts ?? [] : [], y = s.providers ?? [], v = b.some((a) => a.connected);
171
+ const s = n.status, b = n.key === "aisdk" ? s.accounts ?? [] : [], v = s.providers ?? [], C = b.some((l) => l.connected);
171
172
  return /* @__PURE__ */ t(
172
- I,
173
+ L,
173
174
  {
174
- icon: /* @__PURE__ */ e("img", { src: R(n.key), alt: M(n.key), className: "size-5" }),
175
+ icon: /* @__PURE__ */ e("img", { src: $(n.key), alt: _(n.key), className: "size-5" }),
175
176
  title: n.label,
176
177
  note: j(s.checks),
177
178
  ok: s.configured,
178
179
  open: N === `agent:${n.key}`,
179
- onToggle: () => k(`agent:${n.key}`),
180
+ onToggle: () => y(`agent:${n.key}`),
180
181
  control: /* @__PURE__ */ e(
181
- F,
182
+ M,
182
183
  {
183
184
  checked: n.visible,
184
- onCheckedChange: (a) => r(n.key, a),
185
+ onCheckedChange: (l) => r(n.key, l),
185
186
  "aria-label": `${n.label} visible in composer`
186
187
  }
187
188
  ),
188
189
  children: [
189
- /* @__PURE__ */ e(A, { checks: s.checks }),
190
- b.length ? /* @__PURE__ */ e("div", { className: "space-y-1.5", children: b.map((a) => /* @__PURE__ */ t(
190
+ /* @__PURE__ */ e(I, { checks: s.checks }),
191
+ b.length ? /* @__PURE__ */ e("div", { className: "space-y-1.5", children: b.map((l) => /* @__PURE__ */ t(
191
192
  "div",
192
193
  {
193
194
  className: "flex items-center gap-2 rounded-xl border border-border/70 bg-background/55 px-2.5 py-2",
194
195
  children: [
195
196
  /* @__PURE__ */ t("span", { className: "relative flex size-7 shrink-0 items-center justify-center rounded-full bg-muted", children: [
196
- /* @__PURE__ */ e("img", { src: R("aisdk"), alt: "", className: "size-4.5" }),
197
- /* @__PURE__ */ e("span", { className: "absolute -bottom-0.5 -right-0.5 flex size-3.5 items-center justify-center rounded-full bg-foreground text-[8px] font-bold text-background ring-1 ring-background", children: a.number })
197
+ /* @__PURE__ */ e("img", { src: $("aisdk"), alt: "", className: "size-4.5" }),
198
+ /* @__PURE__ */ e("span", { className: "absolute -bottom-0.5 -right-0.5 flex size-3.5 items-center justify-center rounded-full bg-foreground text-[8px] font-bold text-background ring-1 ring-background", children: l.number })
198
199
  ] }),
199
- /* @__PURE__ */ e("span", { className: "min-w-0 flex-1 truncate text-xs font-medium", children: a.label }),
200
- a.connected ? /* @__PURE__ */ e("span", { className: "text-[11px] text-success", children: "Connected" }) : /* @__PURE__ */ t(
200
+ /* @__PURE__ */ e("span", { className: "min-w-0 flex-1 truncate text-xs font-medium", children: l.label }),
201
+ l.connected ? /* @__PURE__ */ e("span", { className: "text-[11px] text-success", children: "Connected" }) : /* @__PURE__ */ t(
201
202
  d,
202
203
  {
203
204
  size: "sm",
204
205
  variant: "outline",
205
- onClick: () => o(n.key, a.id),
206
+ onClick: () => o(n.key, l.id),
206
207
  children: [
207
- /* @__PURE__ */ e(p, { className: "size-3.5" }),
208
+ /* @__PURE__ */ e(g, { className: "size-3.5" }),
208
209
  "Connect"
209
210
  ]
210
211
  }
211
212
  ),
212
- a.removable ? /* @__PURE__ */ e(
213
+ l.removable ? /* @__PURE__ */ e(
213
214
  "button",
214
215
  {
215
216
  type: "button",
216
- onClick: () => h(a),
217
- title: `Remove ${a.label}`,
218
- "aria-label": `Remove ${a.label}`,
217
+ onClick: () => h(l),
218
+ title: `Remove ${l.label}`,
219
+ "aria-label": `Remove ${l.label}`,
219
220
  className: "flex size-7 items-center justify-center rounded-full text-muted-foreground transition hover:bg-destructive/10 hover:text-destructive",
220
221
  children: /* @__PURE__ */ e(T, { className: "size-3.5" })
221
222
  }
222
223
  ) : null
223
224
  ]
224
225
  },
225
- a.id
226
+ l.id
226
227
  )) }) : null,
227
- y.length ? /* @__PURE__ */ e("div", { className: "space-y-1.5", children: y.map((a) => /* @__PURE__ */ e(
228
- W,
228
+ v.length ? /* @__PURE__ */ e("div", { className: "space-y-1.5", children: v.map((l) => /* @__PURE__ */ e(
229
+ X,
229
230
  {
230
- provider: a,
231
- onConnect: f,
232
- onDisconnect: E
231
+ provider: l,
232
+ onConnect: (p) => f(n.key, p),
233
+ onDisconnect: (p) => D(n.key, p)
233
234
  },
234
- a.id
235
+ l.id
235
236
  )) }) : null,
236
- s.instructions.map((a) => /* @__PURE__ */ e("p", { className: "text-xs text-muted-foreground", children: a }, a)),
237
+ s.instructions.map((l) => /* @__PURE__ */ e("p", { className: "text-xs text-muted-foreground", children: l }, l)),
237
238
  !s.configured && (s.installCommand || s.loginCommand && !m.has(n.key)) ? /* @__PURE__ */ t("div", { className: "space-y-1 text-xs text-muted-foreground", children: [
238
239
  s.installCommand ? /* @__PURE__ */ t("div", { className: "truncate", children: [
239
240
  "Install: ",
@@ -254,7 +255,7 @@ function V({
254
255
  onClick: () => u(n.key),
255
256
  title: "Run setup for this agent",
256
257
  children: [
257
- s.setupRunning ? /* @__PURE__ */ e(C, { className: "size-4 animate-spin" }) : /* @__PURE__ */ e(z, { className: "size-4" }),
258
+ s.setupRunning ? /* @__PURE__ */ e(z, { className: "size-4 animate-spin" }) : /* @__PURE__ */ e(w, { className: "size-4" }),
258
259
  s.setupRunning ? "Running…" : "Install"
259
260
  ]
260
261
  }
@@ -265,11 +266,11 @@ function V({
265
266
  size: "sm",
266
267
  variant: "outline",
267
268
  disabled: s.setupRunning,
268
- onClick: () => n.key === "aisdk" && v ? c() : o(n.key),
269
+ onClick: () => n.key === "aisdk" && C ? c() : o(n.key),
269
270
  title: m.has(n.key) ? `Sign in to ${n.label} in your browser` : `Open terminal and run ${s.loginCommand}`,
270
271
  children: [
271
- m.has(n.key) ? /* @__PURE__ */ e(p, { className: "size-4" }) : /* @__PURE__ */ e(w, { className: "size-4" }),
272
- n.key === "aisdk" && v ? "Add account" : "Login"
272
+ m.has(n.key) ? /* @__PURE__ */ e(g, { className: "size-4" }) : /* @__PURE__ */ e(R, { className: "size-4" }),
273
+ n.key === "aisdk" && C ? "Add account" : "Login"
273
274
  ]
274
275
  }
275
276
  ) : null,
@@ -283,5 +284,5 @@ function V({
283
284
  ] });
284
285
  }
285
286
  export {
286
- V as default
287
+ Z as default
287
288
  };