Skip to content

Remote: restart-proof history, richer session picker, desktop style parity - #440

Merged
Juliusolsson05 merged 2 commits into
mainfrom
feat/remote-mobile-polish
Jul 7, 2026
Merged

Juliusolsson05 merged 2 commits into
mainfrom
feat/remote-mobile-polish

Conversation

@Juliusolsson05

Copy link
Copy Markdown
Owner

Three field-driven improvements from real phone testing (#420):

  1. Restart-proof backfill — after a desktop restart, resumed sessions showed raw terminal because main's transcript-file cache starts cold and get-history returned nothing until the session wrote a new line. SessionManager now captures {cwd, resumeSessionId} at spawn and resolveTranscriptFile() re-derives the on-disk transcript through the provider resolver, so restored sessions backfill immediately.
  2. Session picker worth the name — workspace basename + tail-visible full path + provider badge + pulsing ❯ while working + relative recency, sorted most-recent-first, exited sessions in a trailing section. lastActivityAt rides the session-list frame (from the manager's existing activity map) and is bumped client-side from live events.
  3. Desktop style parity — the phone shell now consumes the app's theme tokens (--theme-* via applyTheme) and obeys the styles.css hard rules: zero border-radius, var(--font-code) monospace everywhere, ❯/⏺ accent markers. The phone inherits any future desktop theme automatically.

265/265 tests, tsc clean both projects, bundle builds.

🤖 Generated with Claude Code

Juliusolsson05 and others added 2 commits July 7, 2026 00:18
…parity on the phone

Restart-proof backfill (the 'still just dumping raw terminal after a
restart' field bug): SessionManager now captures {cwd, resumeSessionId}
at spawn, and resolveTranscriptFile() falls back to the provider
transcript resolver for resumed sessions whose jsonl cache is cold this
app run — restored sessions get full scrollback on the phone immediately
after a desktop restart instead of after their next durable line.

Session picker, rebuilt around choosing confidently: rows show the
workspace basename (from the spawn cwd — the 'started' event's projectDir
is Claude's transcript dir, useless as a label), the full path with its
TAIL kept visible, a provider badge, a pulsing ❯ while working, and
relative recency; sorted most-recent-first with exited sessions in their
own trailing section. lastActivityAt rides the session-list wire frame
(read fresh from the manager's existing activity map) and the client
bumps it locally from live events.

Style parity: the shell chrome now consumes the desktop THEME TOKENS
(--theme-*, set by applyTheme at boot) instead of a hand-copied palette —
the phone inherits the desktop's palette and future themes automatically.
Hard rules matched to @renderer/styles.css: zero border-radius (the
connection dot keeps the app's one sanctioned circle), var(--font-code)
monospace everywhere, ❯/⏺ accent markers, no bubbles.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
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