PAILot Flutter - TODO
Pending Features
File Transfer (send/receive arbitrary files)
- File picker in app (PDFs, Word docs, attachments, etc.)
- New
file message type in WebSocket protocol
- Gateway handler to save received files and route to session
- Session can send files back via
pailot_send_file
- Display file attachments in chat bubbles (icon + filename + tap to open)
Voice+Image Combined Message
- When voice caption is recorded with images, hold images on server until voice transcript arrives
- Deliver transcript + images together as one message to Claude
- Ensures voice prefix sets reply channel correctly
Push Notifications (iOS APNs) — NEXT SESSION with user at computer
- Step 1: User creates APNs key in Apple Developer Portal (needs login)
- Step 2: Save
.p8 key to ~/.aibroker/apns-key.p8, add env vars (key ID, team ID)
- Step 3: Server-side APNs HTTP/2 sender (
src/daemon/apns.ts) with JWT auth
- Step 4: App sends device token on WebSocket connect
- Step 5: Gateway buffers messages when no WS clients, sends push notification
- Step 6: App receives push → user taps → opens app → catch_up drains messages
- Optional: silent push to wake app briefly for critical messages
App Name Renaming (Runner → PAILot)
- Rename Xcode target from Runner to PAILot (like Glidr did)
- Update scheme names, bundle paths
Known Issues
Audio
- Background audio may not survive full app termination (only screen lock)
- Audio session category may conflict with phone calls
UI
- Launch image still uses default Flutter placeholder
- No app splash screen with PAILot branding
Navigation
- vi keys (0, G, dd) are sent as literal text paste — works for Claude Code but may not for other terminals