Commit Graph
52 Commits
Author SHA1 Message Date
abkslm a3fb1fd4ae Merge nucleic/warm-coral-viper-sn0m into dev 2026-08-04 04:18:59 -07:00
abkslm 6f7aedc981 Merge nucleic/brisk-north-weasel-lmh2 into dev 2026-08-04 00:10:01 -07:00
abkslm 52c908f1f5 Merge nucleic/gentle-opal-raven-tjbz into dev 2026-08-03 21:04:53 -07:00
abkslm 3e59418f78 Nucleic: Intelligence Model Router Update 2026-08-03 21:04:52 -07:00
abkslmandClaude Fable 5 35f611cd7e Fold in the parallel storage-retention work (SessionDataArchive)
A second implementation of session-storage reclamation was drafted
uncommitted on the control root's dev checkout (SessionDataArchive).
This folds its distinct ideas into the committed implementation, which
stays the base (per-directory locking, partial-then-rename with the
directory-wins invariant, funnel-covered transparent restore, tests):

- deleteSession is now truly permanent: it removes sessions/<id>/, the
  compressed <id>.tar.gz if the sweep packed it, and any local
  Carbon-mirror copy — previously every deleted chat leaked its
  transcript directory forever. Project deletion purges the same per
  chat; deleteEphemeralSession drops its now-redundant own removal.
- The worktree-cleanup and storage sweeps source candidates from
  database.loadAllSessions() instead of persistedSessionRecords, which
  only holds active projects' sessions — an archived project's chats
  could otherwise never be reclaimed (a permanent worktree leak).
- New opt-in retention policy (Settings ▸ Chats ▸ "Reclaim archived
  chat data", Never by default): an archived, non-favorite chat past
  the window is deleted outright on an Optimized-storage Mac, but on an
  All-Copies Mac it is compressed in place through the same guarded
  compression path — full storage never deletes. Off by default because
  discarding chat data must be an explicit opt-in.
- The archiver verifies the fresh archive is listable (tar -tzf)
  before the source directory is removed, so a truncated stream is
  caught at compress time, not restore time.

Co-Authored-By: Claude Fable 5 <[email protected]>
2026-08-04 03:41:25 +00:00
abkslmandClaude Fable 5 c19af1e528 Storage at scale: Done-only worktree reclaim + idle-chat session compression
At hundreds-to-thousands of sessions Nucleic's storage balloons into the
hundreds of gigabytes across worktrees and per-session storage. Two changes:

1. "Delete archived chat worktrees" now reclaims only chats whose work is
   Done (a finished run, or a last turn classified/marked .completed) — a
   chat archived mid-conversation keeps its checkout. Moved-away tombstones
   remain reclaimable regardless: their work lives on another Mac, and the
   transfer's own discard is best-effort. The Done predicate is the new
   Session.isCompleted, shared with isChatDone so the definitions can't
   drift, and the Settings ▸ Chats picker documents the narrowed behavior.

2. Idle-chat session-storage compression for Macs in Carbon's "All Copies"
   role — the machines carrying the mesh's full storage burden. A new
   SessionStorageArchiver packs sessions/<id>/ (transcript, render
   sidecars, agent home) into a sibling <id>.tar.gz via the system tar
   (~10x on this JSONL-heavy data), with a partial-then-rename protocol
   and a "directory wins over any archive beside it" invariant so every
   crash point degrades safely. A sweep on the auto-archive loop packs at
   most 4 chats per pass, and only ones with no live controller, no
   hydration in flight or queued, not open, not pinned, not transferring,
   and idle past the threshold. Restore is transparent at every read
   funnel: prepareSession (open/hydration/dashboard repair), the open-chat
   preview streamer, and the mesh transcript server. The idle window is a
   new Settings ▸ Carbon dropdown (default: after 7 days), resolved
   against the storage role at launch and on change; Optimized-role Macs
   and headless hosts stay off.

Co-Authored-By: Claude Fable 5 <[email protected]>
2026-08-04 03:21:25 +00:00
abkslm 847db99eff Merge nucleic/quiet-fern-viper-bqbc into dev 2026-08-01 20:29:09 -07:00
abkslm 8b8917e4d7 Merge nucleic/dapper-breezy-heron-eqsl into dev 2026-07-30 16:13:23 -07:00
abkslm 9826f11836 Merge nucleic/eager-breezy-badger-alo9 into dev 2026-07-30 03:44:19 -07:00
abkslm 869c725849 Merge nucleic/eager-glass-wren-mrb5 into dev 2026-07-29 17:37:29 -07:00
abkslm 85cae4e314 Merge nucleic/dapper-velvet-urchin-ewz7 into dev 2026-07-29 16:10:19 -07:00
abkslm e4c539322b Merge nucleic/zesty-breezy-marten-c5as into dev 2026-07-24 15:08:29 -07:00
abkslm 135cd110aa Merge nucleic/zesty-breezy-marten-c5as into dev 2026-07-24 14:43:58 -07:00
abkslm 113beccee8 Merge nucleic/dusky-meadow-gecko into dev 2026-07-12 19:17:58 -07:00
abkslm 6f3fcb8d66 Merge nucleic/clever-umber-yak into dev 2026-07-10 03:46:31 -07:00
abkslm eee476ceb5 Merge nucleic/jolly-feather-ferret into dev 2026-07-10 03:26:43 -07:00
abkslm edb9f26be5 Merge nucleic/olive-meadow-badger into dev 2026-07-10 03:23:32 -07:00
abkslm a87519754a Merge nucleic/fuzzy-jade-egret into dev 2026-07-09 21:51:06 -07:00
abkslm 0b7c6af4dc Merge nucleic/plucky-meadow-weasel into dev 2026-07-09 20:20:28 -07:00
abkslmandnucleic 5e966dfce7 nvrsion: Add: Adjust chat sheet size to original smaller popover bar, refactor Settings > Agents by separating Orchestra into its own section, add “Supervisor model” selector (default Fable 5), restrict “Orchestra” to enabling only at the start of a chat, fix macOS VM rendering issues in Image File Review, remove keyboard shortcut subtext for “Cancel,” and move “Ephemeral” button next to “Cancel” in New chat composer.
Nucleic-Promote: 1
Co-authored-by: Nucleic <[email protected]>
2026-07-09 18:21:14 -07:00
abkslmandnucleic 45325d4414 Add Model Selector Options
Nucleic-Session: 6359C9B9-DA05-42C5-8E0D-7904A70E7ED7
Co-authored-by: Nucleic <[email protected]>
2026-07-09 13:07:12 -07:00
abkslmandnucleic 980e9f734b Add Model Selector Options
Nucleic-Session: 6359C9B9-DA05-42C5-8E0D-7904A70E7ED7
Co-authored-by: Nucleic <[email protected]>
2026-07-09 13:07:08 -07:00
abkslmandnucleic d32f2a6a09 nvrsion: Add support for Sonnet 5 to the claude model selector options.
Nucleic-Promote: 1
Co-authored-by: Nucleic <[email protected]>
2026-07-05 03:48:43 -07:00
abkslmandnucleic 0404147164 nvrsion: Add: Fix truncation of “Run now” button text in New idea composer, add model selector support for Claude Fable 5, refactor Project Workflow Enhancement, add Wait Button Logic, update iOS remote to match Chat Message Queue Display, block sandboxed/controlled agents from running git commands via mcp__nucleic__host_exec using container-level shims, add chat icon animation to bounce when chat is blocked for >60 seconds, add “Cmd+Shift+N” shortcut to open a floating chat composer over the window, remove “Run now” button from “New idea” composer, and shield Git command execution by scanning inside ‘-c’ strings.
Nucleic-Promote: 1
Co-authored-by: Nucleic <[email protected]>
2026-07-01 19:01:20 -07:00
abkslmandnucleic 222a111522 Disable Orchestra Feature
Nucleic-Session: 921760EC-9063-4C8B-807B-DF166B271459
Co-authored-by: Nucleic <[email protected]>
2026-06-27 15:46:58 -07:00
Nucleic dbfdf12637 Model Selection Priority Adjustment
Nucleic-Session: D1842842-C5D8-4613-8CCB-82AACF31097E
2026-06-27 14:26:11 -07:00
Nucleic 3a99668992 Model Selection Priority Adjustment
Nucleic-Session: D1842842-C5D8-4613-8CCB-82AACF31097E
2026-06-27 14:26:04 -07:00
NucleicandClaude Opus 4.8 277a76b85c iOS remote: transcript fidelity + mid-session controls & model catalog
Bring NucleicRemote closer to desktop parity in two areas (the core
sync loop was already at parity — shared protocol, control scope).

Transcript fidelity (iOS): a client-side TranscriptProjection coalesces
streaming text by messageID and folds each tool call's lifecycle
(start/deltas/complete/result/fileChange) into one expandable card —
fixing the duplicate started+completed rows. Adds Markdown bubbles, the
gold Orchestra card for Task/Agent spawns, and the previously-dropped
usage/cost, rate-limit, file-change, turn-boundary and session-started
rows, plus a context-window % header badge.

Mid-session controls + model catalog (protocol/host/iOS): project the
host ModelCatalog over the wire as WireModelCatalog (in Welcome); add 5
control-scope setters (setSessionModel/Effort/Auto/AutoShip/ShipBranch)
backed by the existing AppStore.mutateSession + SessionController hooks;
enrich WireSessionSummary with model/effort/auto/autoShip/shipBranch/
contextInputTokens (all forward-compatible). The composer gains a model
picker and a catalog-driven effort menu (per-backend caps: Codex→xhigh,
Grok→auto), and the session header gains a model/effort/auto/autoship
control bar.

Tests: CBOR round-trips for the new messages, Welcome.modelCatalog, the
new summary fields, forward-compat decode of old bytes, and the setters
reaching the host. Verified in the Simulator (NUCLEIC_DEMO=1).

Co-Authored-By: Claude Opus 4.8 <[email protected]>
2026-06-21 04:03:53 -07:00
NucleicandClaude Opus 4.8 609ce70539 Migrate Grok backend to ACP (grok agent stdio)
Replace the streaming-json CLI + generated PreToolUse-hook Grok adapter with grok's native ACP mode (JSON-RPC 2.0 over stdio). Adds GrokACPBackend/GrokACPDecoder/GrokACPDecisionMapping (a near-twin of the Codex app-server adapter); generalizes CodexJSONRPC into a shared JSONRPCConnection (jsonrpc-header flag, default off so Codex is byte-identical, plus endNotifications); deletes GrokBuildBackend, GrokStreamDecoder, GrokHookConfig and strips the /grok-hook HTTP bridge from MCPApprovalServer. Claude and Codex are left native. Preserves conflict-lock parity, native resume (session/load), and the hermetic fake-grok contract test. Full suite: 525 tests green.

Co-Authored-By: Claude Opus 4.8 <[email protected]>
2026-06-21 02:52:24 -07:00
Nucleic c180ee39a2 Merge nucleic/lucid-thistle-quail into dev 2026-06-20 21:28:23 -07:00
Nucleic 8d5ba0d636 Merge nucleic/humble-quartz-lynx into dev 2026-06-20 20:39:20 -07:00
Nucleic bcd7214722 Merge nucleic/jolly-ancient-civet into dev 2026-06-20 19:58:47 -07:00
Nucleic 92aa0d305a Merge nucleic/humble-quartz-lynx into dev 2026-06-20 19:50:28 -07:00
Nucleic 23fce0e8e4 Merge nucleic/ivory-ember-vole into dev 2026-06-20 19:08:14 -07:00
NucleicandClaude Opus 4.8 c686d17f93 Gate Orchestra behind Nucleic Control; lavender Home composer accent
Orchestra is a Nucleic Control capability now:
- Core: SessionController withholds the fan-out consent unless the session's project
  is under Control (resolvedEffort still maps the sentinel to xhigh, so a stray
  selection never reaches a backend verbatim). Covered by a new SessionController test.
- macOS: the effort menu shows Orchestra disabled with a 'Requires Nucleic Control'
  note + tooltip off-control; effectiveEffort demotes a carried-over selection so the
  label/glow never show it active where it can't run.
- Home composer themes lavender (the Control accent) for a Control project — the
  Auto/Merge accents and a persistent ring on the field, tracking the project picker.
- Remote: WireProject carries isNucleicControlled (decode-tolerant) so the iOS effort
  picker gates Orchestra the same way.

Co-Authored-By: Claude Opus 4.8 (1M context) <[email protected]>
2026-06-21 01:08:07 +00:00
NucleicandClaude Opus 4.8 7adab8b0a6 Extend Orchestra to Codex models
Orchestra already worked end-to-end on Codex (resolvedEffort maps it to xhigh,
which Codex accepts, and CodexAppServerBackend forwards appendSystemPrompt as
developerInstructions); it was only held back by a deliberate Claude-only UI gate.
Drops supportsOrchestra and the menu gating so the mode is offered for every model,
and simplifies clampedEffort to always preserve Orchestra (it's an orchestration
mode, not an API level).

Co-Authored-By: Claude Opus 4.8 (1M context) <[email protected]>
2026-06-21 00:44:24 +00:00
NucleicandClaude Opus 4.8 5ec19c86f8 Rebrand Ultracode → Orchestra
Renames the orchestration mode's user-facing brand and all code identifiers
(UltracodeStyle→OrchestraStyle, isUltracode→isOrchestra, AppTheme.ultracode→
.orchestra, etc.). The canonical effort sentinel becomes "orchestra"; the legacy
"ultracode" token is still recognized so a persisted/in-flight session keeps
working. Comment referencing Claude Code's own ultracode mode kept accurate.

Co-Authored-By: Claude Opus 4.8 (1M context) <[email protected]>
2026-06-21 00:37:44 +00:00
NucleicandClaude Opus 4.8 8d8d028ded Merge nucleic/humble-slate-ferret into dev
Adds the ultracode orchestration mode. Resolved effort-menu conflicts with the
per-model effort rework on dev (efforts(for:)/effortNoun/clampedEffort): ultracode
is offered only for Claude models and preserved by clampedEffort there.

Co-Authored-By: Claude Opus 4.8 (1M context) <[email protected]>
2026-06-21 00:09:51 +00:00
Nucleic cb1e8b8df1 Nucleic: Build A Claude “ultracode”-like System 2026-06-20 17:02:48 -07:00
Nucleic 9c9eb2a4d1 Merge nucleic/dapper-quartz-gecko into dev 2026-06-20 16:40:30 -07:00
Nucleic 2c3240ed39 Merge nucleic/dapper-quartz-gecko into dev 2026-06-20 16:25:05 -07:00
abkslm aa249edf69 Merge nucleic/ivory-pebble-vole into dev 2026-06-16 00:37:39 -07:00
abkslmandClaude Opus 4.8 12b7667765 Drop '(1M)' from Opus 4.8 name; show gray '1M' badge instead
Both Opus 4.8 SKUs now display as 'Opus 4.8', distinguished only by the
grayed picker badge: '1M' for the [1m] variant, '256K' for the standard.

Co-Authored-By: Claude Opus 4.8 <[email protected]>
2026-06-14 23:44:48 -07:00
abkslmandClaude Opus 4.8 aa87b8a1e0 Restore Opus 4.8 (1M) as default; badge standard Opus 4.8 as 256K
Put the 'claude-opus-4-8[1m]' SKU back in the picker and as the app
default. Standard Opus 4.8 now sizes to a 256K context window and shows
a grayed '256K' badge beside it in the model pickers.

Co-Authored-By: Claude Opus 4.8 <[email protected]>
2026-06-14 23:43:21 -07:00
abkslmandClaude Opus 4.8 e65acabb86 Treat Opus 4.8 as 1M-context; drop discontinued 200K [1m] variant
Opus 4.8 now ships a 1M context window natively, so the separate
'claude-opus-4-8[1m]' SKU is redundant. Remove it from the picker,
revert the default back to 'claude-opus-4-8', and size the session
context-usage indicator (5h/weekly bars) to 1M for any opus-4-8 SKU.

Co-Authored-By: Claude Opus 4.8 <[email protected]>
2026-06-14 23:31:14 -07:00
abkslmandClaude Opus 4.8 03b1340153 Default new sessions to Opus 4.8 (1M) instead of 200K
Co-Authored-By: Claude Opus 4.8 (1M context) <[email protected]>
2026-06-14 23:24:14 -07:00
abkslmandClaude Opus 4.8 e18eed7842 Default auto-archive to 24 hours instead of 30 minutes
The idle window is still user-configurable in Settings (Chats > Archiving);
this only moves the out-of-the-box default from 30 minutes to 1 day, which is
a less aggressive default for sweeping completed chats into the archive.

Co-Authored-By: Claude Opus 4.8 <[email protected]>
2026-06-14 22:22:03 -07:00
abkslmandClaude Opus 4.8 f2e9a4b291 Auto-archive completed chats after an idle timeout
Adds a background sweep that archives chats whose work is done (a finished
run, or an interactive chat whose last turn classified `.completed`) once
they've sat untouched past a configurable idle window. Favorites, the open
chat, and anything still awaiting the user (a question, a pending approval,
or an unclassified turn) are left alone.

A new "Archiving" setting in Chats picks the window: 30 minutes (default),
1 hour, 3 hours, 1 day, 1 week, or Never. Persisted via AutoArchivePolicy;
the AppStore only sees the resolved interval (nil = Never).

Co-Authored-By: Claude Opus 4.8 <[email protected]>
2026-06-14 21:35:44 -07:00
abkslmandClaude Opus 4.8 2cdf7e14a4 Refine quota indicators: matched-height home card, context usage, icons
- Home: size the usage card to the activity chart's measured height (the
  card stretches to match) and make the chart a touch taller, so the two
  columns line up. Trim the card to the 5-hour + weekly windows.
- Composer: add session context-window usage (latest turn's input tokens vs
  the model's window) as the left-most metric, and trailing-inset the row so
  the text aligns with the chat box's right edge rather than the send button.
- Replace the "5h"/"wk" text with clock/calendar symbols and use a document
  symbol for context usage; each metric is colored by its own utilization.

Co-Authored-By: Claude Opus 4.8 <[email protected]>
2026-06-14 18:47:19 -07:00
abkslmandClaude Opus 4.8 4c8b2c6a6c Add a default autoship toggle to settings
New chats can default to autoship via a Settings toggle in New chat
defaults. Enabling it implies Auto mode, mirroring the per-session
control. Persisted under nucleic.defaultAutoShip and loaded into the
store on launch.

Co-Authored-By: Claude Opus 4.8 <[email protected]>
2026-06-13 22:26:42 -07:00