Skip to content

✨ ScoutNext: responsive presentation, connection hardening + composer rework#203

Merged
arach merged 3 commits into
mainfrom
feat/scoutnext-responsive-presentation
Jun 6, 2026
Merged

✨ ScoutNext: responsive presentation, connection hardening + composer rework#203
arach merged 3 commits into
mainfrom
feat/scoutnext-responsive-presentation

Conversation

@arach
Copy link
Copy Markdown
Owner

@arach arach commented Jun 6, 2026

ScoutNext — responsive presentation + connection/composer polish

Reworks the ScoutNext iOS app for a clean small ↔ large iPhone presentation, hardens the connection chrome, and reworks the New-session composer. Reviewed by a fresh project-scoped Codex session via Scout; findings addressed in the second commit.

Presentation

  • DesignFrame — authors every surface at a 393pt reference width, scales the whole UI down to fit the iPhone 13 mini (375pt), and fills fluidly at ≥393pt. Verified on the 13 mini and the 17 Pro Max.
  • Cockpit kit: hand-drawn Glyphs, Theme palette, bottom StatusBar readouts, in-app TerminalHostedKeyboard.

Connection / routing

  • Friendly machine names (prettyMachineName → first host label) so a long Tailscale host (arachs-mac-mini.tail1e8e67.ts.net) no longer overflows the .fixedSize() status bar and shoves every surface off-screen.
  • Status bar caps only the machine readout (long host truncates; route + fleet stats stay crisp), and readouts now have a stable id (no pulse churn).
  • Settings connection log → a contained dark terminal-style block (time · event · message, color-coded by level); wss:// URLs stripped from messages. Route-disabled lines read as warning, not muted.
  • Fleet counts keep the last-good rollup on a failed poll (no zero-blink).
  • TransportClassification: ::1 classified as loopback rather than WAN (+ test).

Surfaces

  • Projects list: single-agent rows get a leaf-dot rail so their names align with the expandable (chevron) rows; dropped the redundant harness tag.
  • Home: neutral back-navigation — refresh in place instead of blanking to "Loading fleet".
  • New composer: order is now Project → Agent (Harness+Model) → Prompt → Start; taller Prompt editor with a floating centered dictation mic (shared HudDictation).

Tooling

  • hkit build driver (hkit.ts / hkit.json) + scoutnext / scoutnext:build run scripts.

Test plan

  • swift test (scout-ios-core) — transport classification incl. ::1.
  • Built + run on iPhone 17 Pro Max and ScoutNext 13 mini simulators across LAN and forced-TSN routes.

Follow-ups (not in this PR)

  • Source the harness list from the connected Mac — the bridge already serves readiness-aware mobile/workspaces; the iOS client just needs to consume it.
  • Donate a reusable HudLogView to HudsonKit (the log block generalized).
  • Codex nits: compactLogMessage URL-token hardening; DesignFrame narrow-floor / zero-size first pass; decide whether to wrap Settings/conversation surfaces in DesignFrame.

arach added 2 commits June 6, 2026 00:17
…yle connection log

- DesignFrame: author every surface at the 393pt reference, scale down to fit the
  13 mini, fill fluidly on larger phones (small + large iPhone presentation)
- Cockpit kit: hand-drawn Glyphs, Theme palette, bottom StatusBar readouts, and the
  in-app TerminalHostedKeyboard
- Friendly machine names (first host component) so a long Tailscale host no longer
  overflows the fixed-width status bar and shoves every surface off-screen
- Projects list: leaf-dot rail aligns single-agent rows with the expandable ones;
  drop the redundant harness tag
- Settings connection log: contained dark terminal block (time · event · message,
  color-coded by level) with URL-stripped messages instead of loud inspector rows
- Home: neutral back-navigation — refresh in place, never blank to the loading state
- Transport classification + tests; hkit build driver (hkit.ts/json) + run scripts
- web SettingsScreen tweaks
Codex review (fresh project-scoped session via Scout) findings:
- Status bar caps the machine readout — a long host truncates instead of
  forcing the bar (and every surface) past the screen; readouts get a stable
  id so pulse animations don't churn on each body pass
- Route-disabled connection-log lines read as a warning, not muted
- Fleet counts keep the last-good rollup on a failed poll (no zero-blink),
  mirroring the HomeSurface refresh guard
- Classify ::1 as loopback rather than WAN (+ test)

New session composer:
- Reading order is now Project -> Agent (Harness+Model) -> Prompt -> Start
- "Instructions" renamed to "Prompt"; taller editor
- Floating, centered dictation mic (shared HudDictation) with a live partial
  transcript above it
@vercel
Copy link
Copy Markdown

vercel Bot commented Jun 6, 2026

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated (UTC)
openscout Ready Ready Preview, Comment Jun 6, 2026 5:30am

The New-session composer's harness menu now reflects what's actually installed
on the connected Mac instead of a hardcoded list.

- ScoutCapabilities: new `WorkspaceSummary` (readiness-aware harnesses) +
  `ListingCapability.listWorkspaces` with a default impl (source-compatible)
- BridgeBrokerClient: `listWorkspaces()` over the already-served `mobile/workspaces`
  RPC; add the missing `mobile/workspaces` entry to `trpcRouteMap` (its absence
  surfaced as a misleading `encodingFailed`)
- NewSessionSurface: harness menu = union of usable harnesses across the Mac's
  workspaces, defaulting to the selected project's `defaultHarness`; curated
  catalog stays as the offline fallback. Models remain curated (not machine
  cataloged). Load keys on `reloadToken` so it fills in once the bridge connects.
@arach arach merged commit f537b01 into main Jun 6, 2026
3 checks passed
@arach arach deleted the feat/scoutnext-responsive-presentation branch June 6, 2026 05:44
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant