Commit Graph
8 Commits
Author SHA1 Message Date
NucleicandClaude Opus 4.8 b5853eee67 iOS pairing scanner: fix black preview on device
The feed stayed black even when the session reported running: the preview
was a manually-framed sublayer (frame set in viewDidLoad/viewDidLayout,
which raced the async permission callback and could end up zero-sized),
and the session was configured across threads (addInput/Output on main,
startRunning on a queue).

Switch to the canonical AVFoundation pattern: the preview is now the
view's backing layer (CameraPreviewView via layerClass), so it always
fills the view with no frame bookkeeping, and all session configuration +
start/stop run on a dedicated serial queue with delegate/state callbacks
hopped to main.

Co-Authored-By: Claude Opus 4.8 <[email protected]>
2026-06-21 16:38:00 -07:00
NucleicandClaude Opus 4.8 d8fc4696a8 iOS pairing scanner: handle no-camera / denied gracefully
The QR scanner sat on a silent black screen when the camera couldn't
start: it called AVCaptureDevice.default(for: .video), got nil (e.g. on
the Simulator, which has no camera), and bailed via an early guard with
no UI feedback. It also never requested camera permission (a denied
device stayed black with no recovery) and sized the preview layer only
once in viewDidLoad.

Now it gates on AVCaptureDevice authorization (requesting access when
undetermined, surfacing a Settings link when denied), reports an
"unavailable" state when there's no camera so the UI explains the black
screen, and updates the preview frame in viewDidLayoutSubviews. Camera
runs work on a background queue.

Co-Authored-By: Claude Opus 4.8 <[email protected]>
2026-06-21 04:45:18 -07:00
NucleicandClaude Opus 4.8 e6ef59e830 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 e3b6ccc297 Slow the Orchestra glow: longer pause between pulses
Lengthens the glow pulse period from 0.9s to 2.6s (macOS + iOS), keeping the bold
amplitude — the easeInOut lingers at the baseline, so each pulse now lands
deliberately with a clear gap rather than strobing. The effort-label sparkle keeps
time with it.

Co-Authored-By: Claude Opus 4.8 (1M context) <[email protected]>
2026-06-21 01:18:17 +00:00
NucleicandClaude Opus 4.8 19c5e20503 Recolor Orchestra gold and make the composer glow more aggressive
Swaps the Orchestra accent from violet to a warm gold (AppTheme.orchestra +
iOS Palette.orchestra), so the composer glow, effort label, and subagent cards all
read gold. Tunes the glow harder — a ~0.9s pulse (was 1.8s) with a thicker stroke
and a bigger outer bloom that swells on the beat — so an Orchestra turn announces
itself. Reduce Motion still holds the glow steady. Against a Control project's
lavender accent, the gold glow stands out cleanly.

Co-Authored-By: Claude Opus 4.8 (1M context) <[email protected]>
2026-06-21 01:12:24 +00:00
NucleicandClaude Opus 4.8 e03ce837cf 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 1c9b120033 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
Nucleic f90ba73f0b Nucleic: Build A Claude “ultracode”-like System 2026-06-20 17:02:48 -07:00