Commit Graph
6093 Commits
Author SHA1 Message Date
abkslm 7526dc0dd4 Merge nucleic/olive-iris-heron-n0uc into dev 2026-07-17 21:49:09 -07:00
abkslm a148a93cb0 Merge nucleic/jolly-kelp-marten-pn7t into dev 2026-07-18 03:46:53 +00:00
abkslm 0d7b649edb Merge nucleic/zesty-yarn-civet-bpfk into dev 2026-07-17 20:25:39 -07:00
abkslm fab32e744e Merge nucleic/bold-willow-quail-umg5 into dev 2026-07-17 20:20:53 -07:00
abkslm a80c5dd8c2 Merge branch 'dev' into nucleic/jolly-kelp-marten-pn7t 2026-07-17 20:15:16 -07:00
abkslm 474ee2e24d Merge nucleic/jolly-kelp-marten-pn7t into dev 2026-07-17 20:15:16 -07:00
abkslm 69ad616db6 Nucleic: String Interpolation Update 2026-07-17 20:15:16 -07:00
abkslm 6aeede0aa3 Merge nucleic/jolly-willow-badger-cozu into dev 2026-07-17 19:35:21 -07:00
abkslm 7aa4ea3893 Merge nucleic/keen-yarn-wren-n8iw into dev 2026-07-17 19:32:49 -07:00
abkslm 5203b5ad36 Merge nucleic/amber-spruce-koala-cxai into dev 2026-07-17 19:32:38 -07:00
abkslm 2254ff4ffa Merge nucleic/amber-spruce-koala-cxai into dev 2026-07-17 19:25:14 -07:00
abkslm 00a68415b1 Merge nucleic/nimble-maple-vole-j0g0 into dev 2026-07-17 17:45:43 -07:00
abkslm d7834b126a sync(dev): VERSION 0.4.3 (900) -> 0.4.4 (901) — catch up to canary 2026-07-17 16:54:09 -07:00
abkslm 46cfefd161 Merge nucleic/hazy-lunar-gecko-ck0y into dev 2026-07-17 16:37:45 -07:00
abkslm b2460fb6ac Merge nucleic/hazy-lunar-gecko-ck0y into dev 2026-07-17 16:29:23 -07:00
abkslm fd1b0e9bf7 Merge nucleic/quiet-opal-gecko-ah7w into dev 2026-07-17 16:03:36 -07:00
abkslm 4275e1745e Merge nucleic/tidy-north-gecko-6wqv into dev 2026-07-17 16:01:25 -07:00
abkslm 1cd4d31ba7 Merge nucleic/tidy-north-gecko-6wqv into dev 2026-07-17 15:35:17 -07:00
abkslm b2b5969e06 Merge nucleic/humble-quartz-panda-u3zj into dev 2026-07-17 15:19:20 -07:00
abkslm 84dbd0267c Merge nucleic/dusky-river-shrew-xau6 into dev 2026-07-17 15:16:12 -07:00
abkslm 9876fb4a3f Merge nucleic/humble-umber-quail-8mkq into dev 2026-07-17 15:11:00 -07:00
abkslm 1496bcd27c Merge nucleic/vivid-cedar-falcon-jzgw into dev 2026-07-17 14:56:04 -07:00
abkslm c00d7c005d Merge nucleic/keen-cedar-bison-cifb into dev 2026-07-17 14:27:45 -07:00
abkslm 6f53e324d5 Merge nucleic/upbeat-willow-tapir-knud into dev 2026-07-14 20:01:33 -07:00
abkslm fcd21d0a92 Merge nucleic/plucky-ancient-koala-2qbh into dev 2026-07-14 19:54:13 -07:00
abkslm 90bec668cf Merge nucleic/nimble-opal-gecko-yu0v into dev 2026-07-14 18:46:16 -07:00
abkslm d96d02314a Merge nucleic/warm-yarn-koala-ffjl into dev 2026-07-14 18:44:15 -07:00
abkslm 387f817813 Merge nucleic/dusky-slate-newt-1i5r into dev 2026-07-14 18:15:31 -07:00
abkslm f92118d711 sync(dev): VERSION 0.4.2 (899) -> 0.4.3 (900) — catch up to canary 2026-07-14 18:05:46 -07:00
abkslm cc69cb82cd Merge nucleic/olive-meadow-otter-vrgd into dev (host-run mediated token + login UI cleanup) 2026-07-15 00:41:27 +00:00
Andrew Blakeslee Moore 05aa9e410d Use Nucleic's mediated token for host-run Claude; hide stale login UI
Root cause of 'OAuth session expired and could not be refreshed': a host-run
(non-containerized) claude turn read claude's OWN credential store (macOS
Keychain / ~/.claude), not the login the user signed into through Nucleic — so a
stale external login failed. The broker only injected the token for containerized
turns. Now the host spawn sets CLAUDE_CODE_OAUTH_TOKEN from the broker's
freshAccessToken() (refreshed on demand), via a token-provider closure wired from
the app; container turns are unchanged.

Also hide auth artifacts a completed sign-in made stale: the 'Unauthenticated —
log in' row + Log in button and the 'Opening … sign-in in your browser…' note are
dropped once a newer 'sign-in complete' note exists (a later lapse still shows the
prompt). The completion note is kept.
2026-07-15 00:41:22 +00:00
abkslm 425ddf44f7 Merge nucleic/olive-meadow-otter-vrgd into dev (in-chat + Settings login buttons) 2026-07-15 00:13:21 +00:00
Andrew Blakeslee Moore ea920dfdee Show in-chat Log in button in all views + Settings auth state
The login affordance never appeared: the ephemeral/scratch transcript passed no
onLogin, and a fatal auth failure arrives as runFinished(.errored) with the reason
in finalText (no .error event) so AuthErrorRow never fired in the main view.

- Wire a backend-aware onLogin into the ephemeral transcript.
- Render AuthErrorRow for a runFinished(.errored) whose finalText looks like an
  auth failure, so the main + scratch views both show the button.
- Broaden isAuthError (oauth session expired / failed to authenticate / run /login).
- AppStore.login(forBackend:) routes to Claude or Codex OAuth.
- Settings > Agents: add third 'Unauthenticated' state (orange) with a Log in
  button, alongside Connected/Not Connected.
2026-07-15 00:13:16 +00:00
abkslm 3683053717 Merge nucleic/olive-meadow-otter-vrgd into dev (never read Claude Code's Keychain item) 2026-07-14 23:49:44 +00:00
Andrew Blakeslee Moore c1bc27fd1d Stop reading Claude Code's Keychain item entirely
Suppressing the prompt was a band-aid; the root cause is that ClaudeLoginKeychain
read Claude Code's foreign 'Claude Code-credentials' item on every read. Now that
Nucleic mediates its own OAuth, it has no reason to touch another app's credential.
Remove the external read, adoptExternalLoginAfterExplicitLogin, preferredLogin, and
the legacyService constant; read() returns Nucleic's own item only. Nucleic now
reads exclusively credentials it minted, so it can never raise a cross-application
Keychain prompt.
2026-07-14 23:49:37 +00:00
abkslm 4128626480 Merge nucleic/olive-meadow-otter-vrgd into dev (no Keychain prompt on legacy reads) 2026-07-14 23:42:46 +00:00
Andrew Blakeslee Moore c023dd3220 Never raise a Keychain prompt when reading legacy login items
The legacy login-Keychain ACL/partition-list panel ("<app> wants to use
'Claude Code-credentials'…") is not governed by kSecUseAuthenticationUIFail,
so Nucleic Dev.app prompted when reading Claude Code's item. Wrap every legacy
read in SecKeychainSetUserInteractionAllowed(false) so it fails silently instead
of prompting; an already-trusted item still reads without UI. Drop the redundant
(and deprecated) kSecUseAuthenticationUIFail flag.
2026-07-14 23:42:38 +00:00
abkslm f3557e172e Merge nucleic/olive-meadow-otter-vrgd into dev (restrict agent auth to mediated credentials) 2026-07-14 23:32:44 +00:00
Andrew Blakeslee Moore da139c31d5 Restrict agent auth to Nucleic-mediated credentials
Stop sandbox/control containers from inheriting ambient ANTHROPIC_API_KEY/
OPENAI_API_KEY/CODEX_API_KEY (which override the mediated OAuth login); keep
the in-Nucleic API-key stores. Scrub the same keys from host_exec subprocesses
via ProcessSpec.removeFromEnvironment. Agent-spawned containers/VMs already
receive no credentials.
2026-07-14 23:32:35 +00:00
abkslm d5afc90dc3 Merge nucleic/olive-meadow-otter-vrgd into dev (native OAuth mediation + usage-token refresh) 2026-07-14 23:10:01 +00:00
Andrew Blakeslee Moore 1771a6b9ae Mediate usage-token refresh + Codex auth follow-ups 2026-07-14 23:00:12 +00:00
abkslm 85a4992e1f Merge nucleic/humble-opal-ferret-jlos into dev 2026-07-14 05:05:06 -07:00
abkslm 643ab58fd6 Merge nucleic/mellow-drift-lemur-o6gt into dev 2026-07-14 04:59:48 -07:00
abkslm 90de1b3316 Merge nucleic/vivid-meadow-tapir-30hu into dev 2026-07-14 04:49:58 -07:00
abkslm 3c62e1e102 Merge nucleic/olive-dewy-urchin-megz into dev 2026-07-14 04:40:04 -07:00
abkslm 3d8e96b995 Merge nucleic/bold-fern-raven-pfer into dev 2026-07-14 04:30:20 -07:00
abkslm f51f5b41e5 Merge nucleic/warm-ancient-lemur-kprc into dev 2026-07-14 01:32:30 -07:00
abkslm 472b46157c sync(dev): VERSION 0.4.1 (892) -> 0.4.2 (899) — catch up to canary 2026-07-14 01:08:39 -07:00
abkslm 99f313eba4 Merge nucleic/amber-yarn-ferret-43bn into dev 2026-07-14 00:56:30 -07:00
abkslm 0fcf1c61f5 Merge claude/nucleic-stdio-stall-391480 into dev 2026-07-14 00:47:08 -07:00