You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
The web client at /app was a single terminal screen — no home view, no
sessions list, no agent picker, no modal system. The Flutter mobile app
has all of those plus a coherent visual language. Port the mobile screens
and modal patterns to the inline-HTML web client so the two surfaces read
as the same product.
What changed:
- Three-view router via window.location.hash: #pair (token redeem +
4-digit SAS), #home (paired-device card + sessions list + new-session
FAB), #session/:id (terminal). First load with #loopsy://pair?... auto-
redeems and lands on #home.
- Modal system mirrors loopsy_modal.dart: showLoopsyDialog() and
showLoopsySheet() helpers, action variants (text/outlined/primary/
danger), LoopsyMenuTile rows for picker sheets.
- Sessions list backed by localStorage keys matching mobile/storage.dart:
loopsy.pairing.v1, loopsy.sessions.v1, loopsy.auto_approve.v1.
- Auto-approve password handshake matches the daemon flow shipped in
02adb75: cached approveToken used silently, falls back to a password
dialog that hands sudoPassword to the daemon. Handles auto-approve-
granted/denied control frames.
- Forget-pairing dialog calls DELETE /device/:id/phones/self for CSO #8
server-side revoke, then wipes all three localStorage keys.
Preserved: xterm.js terminal, voice input (Web Speech API), compose-box
keyboard handling, WS reconnect logic, summary-capture from first stdin
bytes, session bookkeeping. The terminal view is functionally identical;
only the chrome (back button + session topbar) changed.
Deviations from mobile (unavoidable):
- Pair view uses URL input instead of camera-based QR scan. No CDN
scanner library; the URL hash carries the token in the typical flow
anyway, so this only matters for the rare manual-paste path.
- No long-press on session cards (no reliable browser equivalent). The
kebab is the only path to the session menu.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
0 commit comments