Integrates ghostty-web and node-pty packages, adds tmux session recovery on startup,
refactors WebSocket transport to noServer mode, caches Sherpa voice model assets via
service worker. Large assets (sherpa, ghostty-vt.wasm, fonts) are now gitignored as
they are copied from the webterm project.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- Add shell terminal: new tmux window spawned at project cwd, opened
from the Terminal icon in the ChatView header; ShellTerminalView lets
you navigate back to chat or jump to the Claude tmux terminal mode
- Fix system keyboard appearing on first terminal launch: ghostty-web
calls focus() on a contenteditable div inside open(), triggering iOS
keyboard before we can suppress it; patch HTMLElement.prototype.focus
as a no-op for the synchronous duration of terminal.open()
- Add keyboard font-size slider in Settings
- Fix virtual keyboard button corner radius and depth scaling with key height
- Fix keybar gap/padding proportionality via heightScale factor
- Cap keybar font size so it does not grow when bar height is increased
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- Add a dedicated plan-approval bottom sheet (interactive-prompt) driven by
ExitPlanMode's now-4-option layout (Claude Code v2.1.177), with
approve/YOLO/reject/feedback wired through respondPlan(requestId).
- PermissionManager: stop auto-expiring AskUserQuestion/plan prompts and stop
releasing pending prompts on client disconnect — they reflect real CLI
state and must survive reconnects.
- Detect server-rejected tokens (401/403 or failed WS handshake) and bounce
back to the login screen via a new AUTH_EXPIRED_EVENT.
- Add `/cert` endpoint + Settings entry so phones can download/trust the
self-signed HTTPS cert directly; fix cert IP detection on non-macOS hosts.
- Add `clawtap reset-login` command and `/api/auth/reset-attempts` endpoint
to clear login rate-limit lockouts.
- Codex adapter: only forward recognized keystrokes/option indices to tmux,
never the synthetic "deny" dismissal signal.
- PWA: actively poll for service-worker updates (iOS standalone apps don't
reliably check on navigation).
- update-service.sh: install tmux if missing, prompt to create the env file
instead of failing, add --skip-firewall, and improve logging.
- fix(pwa): iOS keyboard gap caused by WebKit viewport-fit=cover bug.
After keyboard open/close, 100dvh permanently shrinks. Track max
innerHeight in --app-height CSS variable as stable replacement.
- feat(pwa): auto-prompt notification permission on first login in
standalone mode (once only, skips if denied).
- refactor: remove duplicate notification toggle from header menu
(already in Settings).
- feat(dev): expose Vite dev server on network (host: true) for
mobile testing via Tailscale.
- docs: update README — add Task Progress FAB, fix notification
flow description, document OPENAI_API_KEY / VAPID_EMAIL env vars,
clarify voice input backends, add CLI --version/--help, update
.env.example.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- New Chat → Chat uses replaceState so back skips new chat screen
- Active tab persisted to sessionStorage, restored on back navigation
- Scroll-to-bottom button positioned relative to footer (not hardcoded)
- overscroll-behavior: none to prevent iOS rubber-band
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- Remove useVisualViewport hook (keyboard gap is iOS browser behavior, not a bug in PWA)
- Header: absolute overlay with translateY animation (no content jump)
- Header: hide during scroll, show after 1s stop, stay visible at bottom
- Scroll-to-bottom: smooth animation with isAutoScrolling guard
- Icon: ArrowDownToLine replaces ChevronDown
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- New round starts when all tasks complete before next TaskCreate
- FAB counts only current round (e.g. 0/4 instead of 20/24)
- Bottom sheet: current round on top, collapsible "Previous tasks" history
- O(1) Set lookup for history filtering
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- Add TaskAggregator (server/stores) to unify TaskCreate/TaskUpdate/TodoWrite
- Broadcast task-state snapshots via new WS event on tool events + reconnect
- TaskFab: SVG progress ring with fade-out on completion, reappears on new tasks
- TaskBottomSheet: full task list with dependencies, activeForm, expandable description
- Remove inline TodoWrite rendering (TaskProgress), filter task tools from chat flow
- Rebuild task state from JSONL history on server restart/reconnect
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- Add safe-top to all full-screen overlays (PlanMode, DiffViewer, ChatView PlanViewer)
- Add safe-top to SessionsView drill-down header + swipe-back via pushState
- Move safe-top to ChatView outer container (persists when header hides)
- Add skipWaiting + clients.claim for immediate SW updates
- Create monochrome 96x96 badge icon for Android notifications
- Add -webkit-tap-highlight-color: transparent for dark theme
- Show SW update banner on all views, not just SessionsView
- Fix precache duplicates with specific glob patterns (18→16 entries)
- Add safe-bottom to ChatView saveToast
- Fix stale poll interval comment (10s→3s)
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- Add favicon.ico, favicon-32x32.png, favicon-16x16.png
- Add dedicated maskable-512x512.png with safe-zone padding for Android adaptive icons
- Add iOS splash screens for 5 common device sizes (excluded from SW precache)
- Add NetworkFirst runtime caching for stable API routes (excludes volatile endpoints)
- Add safe-top inset to all view headers for PWA standalone mode
- Bump version to 0.2.2
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Replace old finger-tap icons with pixel-art claw icons matching the
current ClawTap branding. Bump version to 0.2.1.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Multi-adapter mobile UI for AI coding assistants.
Supports Claude Code, Codex CLI, and Gemini CLI through one interface.
Features:
- Real-time bidirectional sync via tmux + WebSocket
- Cross-AI review (send one AI's output to another for review)
- Multi-review tabs with minimize/expand
- Push notifications (PWA) with smart session-aware filtering
- Three-channel event system (hooks, file watcher, pane monitor)
- Voice input, image paste, draft persistence
- Terminal-native design (JetBrains Mono, dark theme, pixel art claw)
- CLI with --adapter flag on every command
- Zero-overhead fire-and-forget hooks