Redesign the companion (视频通话) page to match Doubao's video calling experience:
- Scenario Selection: 6 scenarios (模拟面试, 英语陪练, 唱歌, 同声传译, 成语接龙, 心情树洞) in a floating grid
- Fullscreen camera mode: camera feed replaces AI avatar as background
- Screen sharing: getDisplayMedia capture with permission dialog & privacy notice
- Subtitle mode: camera shrinks to corner, transcript takes center stage
- Warm orange theme matching Doubao's brand color
- Bottom controls: camera → screen share → mic → speaker → call/hang up
- Camera/mic toggles work independently of WebSocket connection
- No auto-reconnect on connection failure (prevents button flashing)
- Cyberpunk-to-orange redesign: cleaner aesthetic with frosted glass elements
New files: CompanionTopBar, ScenarioSelector, ScreenShareDialog,
useScreenShare, useCameraDevices
Co-Authored-By: Claude Big Pickle <noreply@anthropic.com>
fix: desktop server CLI spawn and model listing for CLI auth
- Fix CLI process startup failure: resolveCliArgs now prefers the standalone
dist/cli binary (which has the real runHeadless implementation) over the
OSS sidecar binary (which has a stub print.ts without runHeadless).
Uses CLAUDE_APP_ROOT for real filesystem path resolution inside compiled
sidecar where import.meta.dir is a virtual bunfs path.
Fallback changed from broken bin/claude-haha path to PATH lookup.
- Fix desktop /api/models to recognize CLI auth state: added
fetchCliProviderModels() that reads ~/.claude.json directly and fetches
OpenCode models from models.dev/api.json or OpenRouter models from
openrouter.ai/api/v1/models, with 5-minute caching. This makes OpenCode
and OpenRouter models visible in the desktop UI after CLI /login.
Co-Authored-By: Claude Big Pickle <noreply@anthropic.com>