Change PIN to 1451

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
ARCHITECT
2026-01-17 23:31:52 +00:00
parent c152cacb90
commit f199daf4ba
171 changed files with 10492 additions and 2 deletions

307
PLAN_CAPTAIN_MOBILE_V2.md Normal file
View File

@@ -0,0 +1,307 @@
# PLAN: Captain Claude Mobile v2
## Objetivo
App móvil nativa de chat con Claude que ejecuta comandos en el servidor y muestra resultados formateados.
---
## 1. ARQUITECTURA
```
┌──────────────────┐ HTTPS/WSS ┌──────────────────┐
│ │ ◄────────────────► │ │
│ Flutter App │ │ FastAPI │
│ (Android/iOS) │ │ Backend │
│ │ │ │
└──────────────────┘ └────────┬─────────┘
│ subprocess
┌──────────────────┐
│ │
│ Claude CLI │
│ (claude -p) │
│ │
└──────────────────┘
```
### Backend (FastAPI)
- Recibe mensajes del usuario via WebSocket
- Ejecuta `claude -p "mensaje" --output-format stream-json`
- Parsea el output JSON de Claude
- Envía respuesta formateada al frontend
- Guarda historial en PostgreSQL
### Frontend (Flutter)
- UI de chat nativa (burbujas, input, etc.)
- Renderiza Markdown en respuestas
- Syntax highlighting en code blocks
- Muestra progreso de ejecución
- Historial de conversaciones
---
## 2. DISEÑO UI/UX
### Pantalla Principal (Chat)
```
┌─────────────────────────────────┐
│ ☰ Captain Claude [●] Online│ ← AppBar con estado conexión
├─────────────────────────────────┤
│ │
│ ┌─ User ────────────────────┐ │
│ │ Muéstrame el uso de disco │ │ ← Burbuja usuario (derecha)
│ └───────────────────────────┘ │
│ │
│ ┌─ Claude ──────────────────┐ │ ← Burbuja Claude (izquierda)
│ │ Ejecutando `df -h`... │ │
│ │ │ │
│ │ ``` │ │ ← Code block con resultado
│ │ Filesystem Size Used │ │
│ │ /dev/sda1 100G 45G │ │
│ │ ``` │ │
│ │ │ │
│ │ El disco principal tiene │ │ ← Explicación en texto
│ │ 55% libre (55GB). │ │
│ └───────────────────────────┘ │
│ │
├─────────────────────────────────┤
│ ┌─────────────────────────┐ 📎│ ← Input con attach
│ │ Escribe un mensaje... │ ➤ │ ← Botón enviar
│ └─────────────────────────────┘│
└─────────────────────────────────┘
```
### Pantalla Historial
```
┌─────────────────────────────────┐
│ ← Conversaciones │
├─────────────────────────────────┤
│ ┌─────────────────────────────┐│
│ │ 📁 Backup de base de datos ││ ← Título auto-generado
│ │ Hace 2 horas • 5 mensajes ││
│ └─────────────────────────────┘│
│ ┌─────────────────────────────┐│
│ │ 🔧 Fix error en nginx ││
│ │ Ayer • 12 mensajes ││
│ └─────────────────────────────┘│
│ ┌─────────────────────────────┐│
│ │ 📊 Análisis de logs ││
│ │ 15 Ene • 8 mensajes ││
│ └─────────────────────────────┘│
└─────────────────────────────────┘
```
### Estados de Mensaje Claude
1. **Pensando**: Spinner + "Claude está pensando..."
2. **Ejecutando**: Muestra comando siendo ejecutado
3. **Streaming**: Texto aparece progresivamente
4. **Completado**: Mensaje completo con formato
5. **Error**: Mensaje rojo con opción de reintentar
---
## 3. API BACKEND
### Endpoints REST
| Método | Endpoint | Descripción |
|--------|----------|-------------|
| POST | /auth/login | Login, retorna JWT |
| GET | /conversations | Lista conversaciones |
| GET | /conversations/{id} | Mensajes de una conversación |
| DELETE | /conversations/{id} | Eliminar conversación |
| POST | /upload | Subir archivo para contexto |
### WebSocket /ws/chat
**Cliente → Servidor:**
```json
{
"type": "message",
"content": "Muéstrame el uso de disco",
"conversation_id": "uuid-opcional",
"files": ["/path/to/file"]
}
```
**Servidor → Cliente (streaming):**
```json
{"type": "thinking"}
{"type": "tool_use", "tool": "Bash", "input": "df -h"}
{"type": "tool_result", "output": "Filesystem Size..."}
{"type": "text", "content": "El disco principal..."}
{"type": "done", "conversation_id": "uuid"}
```
---
## 4. MODELO DE DATOS
### PostgreSQL
```sql
-- Conversaciones
CREATE TABLE conversations (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
user_id VARCHAR(255) NOT NULL,
title VARCHAR(500),
created_at TIMESTAMP DEFAULT NOW(),
updated_at TIMESTAMP DEFAULT NOW()
);
-- Mensajes
CREATE TABLE messages (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
conversation_id UUID REFERENCES conversations(id),
role VARCHAR(50) NOT NULL, -- 'user' | 'assistant'
content TEXT NOT NULL,
tool_uses JSONB, -- [{tool, input, output}]
created_at TIMESTAMP DEFAULT NOW()
);
```
---
## 5. FLUTTER - ESTRUCTURA
```
lib/
├── main.dart
├── config/
│ └── api_config.dart
├── models/
│ ├── conversation.dart
│ ├── message.dart
│ └── tool_use.dart
├── services/
│ ├── api_service.dart
│ ├── chat_service.dart # WebSocket
│ └── auth_service.dart
├── providers/
│ ├── auth_provider.dart
│ └── chat_provider.dart
├── screens/
│ ├── login_screen.dart
│ ├── chat_screen.dart
│ └── history_screen.dart
└── widgets/
├── message_bubble.dart # Burbuja de mensaje
├── code_block.dart # Syntax highlighting
├── tool_use_card.dart # Muestra ejecución de tool
├── thinking_indicator.dart
└── chat_input.dart # Input con attach
```
---
## 6. COMPONENTES CLAVE
### MessageBubble (Flutter)
```dart
class MessageBubble extends StatelessWidget {
final Message message;
// Renderiza según tipo:
// - Texto normal → Markdown
// - Code blocks → Syntax highlighting
// - Tool uses → Cards expandibles
// - Errores → Estilo rojo
}
```
### ToolUseCard (Flutter)
```dart
// Muestra:
// ┌─ Bash ──────────────────────┐
// │ ▶ df -h │ ← Comando ejecutado
// ├─────────────────────────────┤
// │ Filesystem Size Used ... │ ← Output (colapsable)
// └─────────────────────────────┘
```
### ChatInput (Flutter)
```dart
// - TextField multilínea
// - Botón adjuntar archivo
// - Botón enviar (disabled si vacío o desconectado)
// - Indicador de conexión
```
---
## 7. PROCESO DE DESARROLLO
### Fase 1: Backend básico
1. FastAPI con WebSocket
2. Integración con Claude CLI
3. Parsing de output JSON
4. Base de datos PostgreSQL
### Fase 2: Frontend básico
1. Chat UI con burbujas
2. Conexión WebSocket
3. Streaming de mensajes
4. Markdown rendering
### Fase 3: Features completas
1. Historial de conversaciones
2. Syntax highlighting
3. Tool use cards
4. Upload de archivos
5. Estados de conexión
### Fase 4: Pulido
1. Animaciones
2. Error handling robusto
3. Offline mode básico
4. Notificaciones
---
## 8. PROCESO DE AUDITORÍA (post-código)
### Ronda 1: Agentes paralelos
- **Arquitecto**: Revisa estructura del código
- **QA**: Busca bugs y edge cases
- **UX**: Evalúa usabilidad
### Ronda 2: Tests reales
- Probar cada endpoint con curl
- Instalar APK y probar flujos
- Documentar problemas
### Ronda 3: Fixes + re-test
- Aplicar correcciones
- Verificar que funcionan
- Compilar versión final
---
## 9. DIFERENCIAS CON v1
| Aspecto | v1 (Terminal) | v2 (Chat) |
|---------|---------------|-----------|
| UI | Emulador xterm | Chat nativo |
| Input | Teclado terminal | Texto natural |
| Output | Raw ANSI | Markdown formateado |
| Comandos | Ctrl+C manual | Claude decide |
| UX | Técnico | Amigable |
---
## 10. CRITERIOS DE ÉXITO
1. ✅ Usuario puede chatear con Claude en lenguaje natural
2. ✅ Claude ejecuta comandos y muestra resultados formateados
3. ✅ Code blocks tienen syntax highlighting
4. ✅ Conversaciones se guardan y se pueden retomar
5. ✅ UI es responsiva y agradable en móvil
6. ✅ Errores se muestran claramente con opción de reintentar
7. ✅ Conexión se reconecta automáticamente
---
## PRÓXIMO PASO
¿Apruebas este plan para empezar a implementar?