Files
captain-claude/apps/captain-mobile-v2/ESTADO_PROYECTO.md
ARCHITECT 48e66b1129 Captain Mobile v3.1 - App funcional
- Backend: claude -p --output-format stream-json
- --resume para mantener contexto de conversación
- Auto-connect al crear sesión
- UI simplificada (botón + y logout)
- Servicio systemd: captain-claude

Siguiente paso: sesiones screen

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-18 00:03:15 +00:00

132 lines
3.4 KiB
Markdown

# Captain Claude Mobile - Estado del Proyecto
**Fecha:** 2026-01-17
**Versión:** v3.1
**Estado:** FUNCIONAL
---
## Resumen
App móvil para chatear con Claude Code usando `claude -p --output-format stream-json`.
---
## Arquitectura v3
### Backend (`captain_api_v3.py`)
- **Puerto:** 3030
- **Servicio systemd:** `captain-claude`
- **Método:** `claude -p --output-format stream-json`
- **Contexto:** `--resume SESSION_ID` mantiene historial de conversación
- **Auto-connect:** Al crear sesión, se conecta automáticamente
- **Almacenamiento:** Sesiones en memoria (se pierden al reiniciar)
### Flutter App
- **APK:** `260117_captain-claude-v3.1.apk`
- **UI:** Simplificada - botón + para nuevo chat, logout
- **Conexión:** WebSocket a `wss://captain.tzzrarchitect.me/ws/chat`
---
## API WebSocket
### Mensajes del Cliente
```json
{"token": "jwt"} // Autenticación
{"type": "create_session", "name": "Chat 1"} // Crear sesión
{"type": "message", "content": "hola"} // Enviar mensaje
{"type": "ping"} // Keep-alive
```
### Respuestas del Servidor
```json
{"type": "init", "sessions": [...]} // Estado inicial
{"type": "session_created", "session_id": "x", "name": "y"} // Sesión creada
{"type": "session_connected", "session_id": "x", "name": "y"} // Conectado
{"type": "output", "content": "..."} // Respuesta de Claude
{"type": "done", "session_id": "uuid"} // Respuesta completa
{"type": "error", "message": "..."} // Error
```
---
## Archivos
```
apps/captain-mobile-v2/
├── backend/
│ ├── captain_api_v3.py # Backend actual
│ ├── captain-claude.service # Servicio systemd
│ └── test_*.py # Tests
├── flutter/
│ ├── lib/
│ │ ├── screens/chat_screen.dart
│ │ ├── providers/chat_provider.dart
│ │ ├── services/chat_service.dart
│ │ └── config/api_config.dart
│ └── build/app/outputs/flutter-apk/app-release.apk
└── ESTADO_PROYECTO.md
```
---
## Comandos Útiles
```bash
# Estado del servicio
systemctl status captain-claude
# Logs
journalctl -u captain-claude -f
# Reiniciar
systemctl restart captain-claude
# Compilar APK
cd /home/architect/captain-claude/apps/captain-mobile-v2/flutter
/home/architect/flutter/bin/flutter build apk --release
# Subir a Nextcloud
/home/architect/bin/rclone copy build/app/outputs/flutter-apk/app-release.apk nextcloud-architect:app/
```
---
## Siguiente Paso: Sesiones Screen
### Objetivo
Crear versión capaz de:
1. Listar sesiones screen existentes
2. Conectarse a sesiones screen en tiempo real
3. Crear nuevas sesiones screen con Claude Code
4. Enviar input a sesiones activas
### Diferencia
| v3 Actual | Screen Sessions |
|-----------|-----------------|
| `claude -p` por mensaje | Proceso persistente en screen |
| Sesiones en memoria | Sesiones reales en servidor |
| Solo texto limpio | Output completo |
| Sin acceso a otras screens | Acceso a cualquier screen |
### Implementación
1. Backend v4 con endpoints para screen
2. Parsing de output ANSI
3. Flutter con selector de screens
---
## Historial
- **v3.1** (17/01/26): UI simplificada, auto-connect en backend
- **v3.0** (17/01/26): Cambio a `claude -p --output-format stream-json`
- **v2.x** (17/01/26): Intentos con screen+hardcopy (descartado)