Sync: Complete project state with all MEGA SPRINT V1-V3 features and Codex stubs

This commit is contained in:
renato97
2026-04-08 17:58:47 -03:00
parent c9d3528900
commit 6d080d43b3
372 changed files with 189715 additions and 8590 deletions

365
AUDIT_REPORT.md Normal file
View File

@@ -0,0 +1,365 @@
# AbletonMCP-AI - Informe de Auditoria Completa
**Fecha:** 2026-04-02
**Autor:** Claude Code Audit Engine
**Alcance:** Todo el codigo fuente del proyecto AbletonMCP-AI
---
## 1. Resumen Ejecutivo
| Metrica | Valor |
|---|---|
| Archivos Python analizados | 43 |
| Lineas de codigo totales | ~75,000+ |
| Bugs criticos encontrados | 7 |
| Bugs moderados encontrados | 12 |
| Bugs menores encontrados | 15+ |
| Archivos basura identificados | 23 |
| Docs obsoletos identificados | 14 |
| Archivos duplicados | 5 |
| Codigo muerto/duplicado | 3 clases |
---
## 2. Bugs Criticos (DEBEN arreglarse)
### BUG-001: Import sin proteccion en linea 1 de server.py
- **Archivo:** `AbletonMCP_AI/AbletonMCP_AI/MCP_Server/server.py:1`
- **Problema:** `from human_feel import HumanFeelEngine` esta ANTES del docstring del modulo y SIN try/except. Si el modulo `human_feel` no esta disponible, el servidor entero crashea.
- **Impacto:** CRITICO - El server no arranca
- **Fix:** Mover dentro de un bloque try/except como los demas imports
### BUG-002: Shadowing de excepciones built-in de Python
- **Archivo:** `server.py:153,160,171`
- **Problema:** Las clases `ConnectionError`, `ValidationError` y `TimeoutError` sobreescriben las excepciones built-in de Python. Cualquier `except ConnectionError` o `except TimeoutError` en el codigo capturara la version custom, NO la built-in.
- **Impacto:** CRITICO - Bugs silenciosos en manejo de errores
- **Fix:** Renombrar a `MCPConnectionError`, `MCPValidationError`, `MCPTimeoutError`
### BUG-003: AbletonConnection.connect() es codigo muerto
- **Archivo:** `server.py:7364-7395`
- **Problema:** El metodo `connect()` crea `self.sock`, pero `send_command()` (linea 7430-7431) siempre desconecta `self.sock` primero y luego crea un socket LOCAL nuevo en linea 7454. El `self.sock` del connect() NUNCA se usa para enviar comandos.
- **Impacto:** ALTO - Confusion arquitectural, codigo muerto
### BUG-004: Funciones duplicadas identicas
- **Archivo:** `server.py:516-538`
- **Problema:** `_linear_to_live_slider()` y `_linear_to_live_slider_bus()` tienen implementaciones IDENTICAS. Los docstrings dicen cosas diferentes pero el codigo es el mismo (`clamped ** 0.5`).
- **Impacto:** MODERADO - Confusion, mantenimiento duplicado
- **Fix:** Eliminar `_linear_to_live_slider_bus` y usar `_linear_to_live_slider` en su lugar
### BUG-005: Clase HumanFeelEngine duplicada
- **Archivo:** `song_generator.py:5535` y `human_feel.py:8`
- **Problema:** `HumanFeelEngine` existe como clase independiente en `human_feel.py` Y como clase duplicada dentro de `song_generator.py`. El server.py importa desde `human_feel.py` (linea 1), pero `song_generator.py` usa su propia copia interna.
- **Impacto:** ALTO - Cambios en una no se reflejan en la otra
### BUG-006: server.py tiene 14,930 lineas
- **Archivo:** `server.py`
- **Problema:** El archivo es monolitico con casi 15,000 lineas. Esto viola principios de mantenibilidad y hace debugging extremadamente dificil.
- **Impacto:** ALTO - Deuda tecnica masiva
### BUG-007: 206 bloques except sin especificidad en server.py
- **Archivo:** `server.py`
- **Problema:** Se encontraron 206 ocurrencias de `except Exception` o patrones similares de except amplio. Muchos de estos silencian errores que deberian propagarse.
- **Impacto:** MODERADO - Bugs silenciosos, dificultad para debuggear
---
## 3. Bugs Moderados
### BUG-008: song_generator.py tambien es monolitico (14,568 lineas)
- **Impacto:** Deuda tecnica
- **Recomendacion:** Extraer a submodulos
### BUG-009: Encoding corrupto en docstrings de sample_selector.py
- **Archivo:** `sample_selector.py`
- **Problema:** Los docstrings contienen caracteres UTF-8 doble-encoded (ej: `SelecciÃÆ'ón` en lugar de `Seleccion`)
- **Impacto:** Legibilidad
### BUG-010: reference_listener.py tiene 8,488 lineas
- Otro archivo monolitico que deberia refactorizarse
### BUG-011: Imports relativos inconsistentes en sample_selector.py
- **Archivo:** `sample_selector.py:48-61, 68-94`
- **Problema:** Cada import intenta primero con `.module` (relativo) y luego `module` (absoluto). Esto funciona pero es fragil y crea duplicacion de imports.
### BUG-012: abletonmcp_init.py no usa MESSAGE_TERMINATOR para parsear
- **Archivo:** `abletonmcp_init.py:194-197`
- **Problema:** El handler de cliente intenta `json.loads(buffer)` sin separar por newline delimiter. Funciona por casualidad con json.loads, pero no soporta multiples comandos en buffer.
### BUG-013: Python 2 compatibility code innecesario
- **Archivo:** `abletonmcp_init.py:13-21`
- **Problema:** Ableton Live 12 usa Python 3.11+. Los bloques try/except para `Queue` vs `queue` y `basestring` vs `str` son innecesarios.
### BUG-014: client_threads lista nunca se limpia completamente
- **Archivo:** `abletonmcp_init.py:152`
- **Problema:** La lista `self.client_threads` solo se limpia en `_server_thread` pero crece indefinidamente si hay muchas conexiones.
### BUG-015: Bare except en disconnect
- **Archivo:** `abletonmcp_init.py:73`
- **Problema:** `except:` sin tipo de excepcion - captura incluso SystemExit y KeyboardInterrupt
### BUG-016: Constante HOST inconsistente
- `abletonmcp_init.py:25` usa `HOST = "localhost"`
- `server.py:1098` usa `HOST = "127.0.0.1"`
- Deberia ser consistente (preferir `127.0.0.1` para evitar DNS lookups)
### BUG-017: DIVERSITY_MEMORY_AVAILABLE sobrescrita
- **Archivo:** `sample_selector.py:77`
- **Problema:** `DIVERSITY_MEMORY_AVAILABLE = True` se importa del modulo Y se re-asigna manualmente. La importacion desde diversity_memory ya establece este valor.
### BUG-018: Doble lineas en blanco excesivas en song_generator.py
- Todo el archivo tiene doble-spacing con lineas en blanco entre cada linea de codigo
- Resultado: el archivo tiene ~7,000 lineas de contenido real en ~14,500 lineas
- **Impacto:** Legibilidad reducida
### BUG-019: scan_log.txt staged para commit
- **Archivo:** `AbletonMCP_AI/AbletonMCP_AI/MCP_Server/scan_log.txt`
- **Problema:** Log de escaneo staged para git commit - no deberia estar en el repo
---
## 4. Archivos Basura (ELIMINAR)
### Scripts de diagnostico/debugging de un solo uso
| Archivo | Razon |
|---|---|
| `check_piano_melody.py` | Script de debugging one-time |
| `check_v27.py` | Script de verificacion obsoleto |
| `check_v29.py` | Script de verificacion obsoleto |
| `validate_v29.py` | Script de verificacion obsoleto |
| `final_check.py` | Script de debugging one-time |
| `quick_check.py` | Script de debugging one-time |
| `validate_audio_resampler.py` | Script de test one-time |
| `validate_script.py` | Script de test one-time |
| `diagnostico_wsl.py` | Diagnostico WSL no relevante |
| `agent7_lead_task.py` | Script de agente temporal |
| `agent8_vocals.py` | Script de agente temporal |
| `agent8_vocals_load.py` | Script de agente temporal |
| `agent9_fx_loader.py` | Script de agente temporal |
| `agent10_diagnosis.py` | Script de agente temporal |
| `add_samples_script.py` | Script de utilidad one-time |
| `place_perc_audio.py` | Script de utilidad one-time |
| `set_input_routing.py` | Script de utilidad one-time |
| `generate_song.py` | Script de test (la funcionalidad esta en server.py) |
| `generate_track.py` | Script de test (la funcionalidad esta en server.py) |
### Scripts temporales en AbletonMCP_AI/
| Archivo | Razon |
|---|---|
| `AbletonMCP_AI/diagnostico_wsl.py` | Diagnostico temporal |
| `AbletonMCP_AI/place_perc_audio.py` | Script de utilidad one-time |
| `AbletonMCP_AI/set_input_routing.py` | Script de utilidad one-time |
| `AbletonMCP_AI/temp_socket_cmd.py` | Script temporal |
| `AbletonMCP_AI/validate_audio_resampler.py` | Script de test one-time |
| `AbletonMCP_AI/validate_script.py` | Script de test one-time |
| `AbletonMCP_AI/restart_ableton.bat` | Duplicado del root |
### Scripts temporales en MCP_Server/
| Archivo | Razon |
|---|---|
| `MCP_Server/temp_tool.py` | Herramienta temporal |
| `MCP_Server/coherence_demo.py` | Demo script |
| `MCP_Server/sample_system_demo.py` | Demo script |
| `MCP_Server/socket_smoke_test.py` | Test de diagnostico |
| `MCP_Server/test_phrase_plan.py` | Test script suelto |
| `MCP_Server/scan_log.txt` | Log de escaneo |
---
## 5. Documentacion Obsoleta (ELIMINAR o ARCHIVAR)
| Archivo | Estado |
|---|---|
| `KIMI_K2_BOOTSTRAP.md` | Obsoleto - bootstrap ya completado |
| `KIMI_K2_NOTE_API_FIX.md` | Obsoleto - fix ya aplicado |
| `KIMI_K2_CODEBASE_FIXES.md` | Obsoleto - fixes ya aplicados |
| `MCP_CLAUDE_OPENCODE_SETUP.md` | Obsoleto - setup ya configurado |
| `MCP_SETUP_SUMMARY.md` | Obsoleto - resumen viejo |
| `MCP_VERIFICATION.md` | Obsoleto - verificacion vieja |
| `QWEN_MCP_SETUP.md` | Obsoleto - setup de modelo antiguo |
| `GPU_SETUP.md` | Obsoleto - setup GPU viejo |
| `HUMAN_FEEL_IMPLEMENTATION.md` | Obsoleto - ya implementado |
| `SECTION_AWARE_WIRING_REPORT.md` | Obsoleto - reporte viejo |
| `SMOKE_TEST_ASYNC.md` | Obsoleto - test viejo |
| `codex.md` | Obsoleto - config para Codex |
| `kimi.md` | Obsoleto - config para Kimi |
| `AbletonMCP_AI/CODE_REVIEW_NEXT_STEPS.md` (deleted) | Ya borrado |
| `AbletonMCP_AI/todo.md` (deleted) | Ya borrado |
### Documentos a MANTENER
| Archivo | Razon |
|---|---|
| `CLAUDE.md` | Contexto canonico del proyecto |
| `KIMI_K2_START_HERE.md` | Handoff activo |
| `KIMI_K2_ACTIVE_HANDOFF.md` | Handoff activo |
| `README.md` | Documentacion principal |
| `docs/ROADMAP.md` | Roadmap activo |
---
## 6. Archivos Duplicados
| Archivo | Duplica a |
|---|---|
| `AbletonMCP_AI/mcp_wrapper.bat` | `mcp_wrapper.bat` (root) |
| `AbletonMCP_AI/opencode.json` | `opencode.json` (root) |
| `AbletonMCP_AI/start_claude_glm5.sh` | `start_claude_glm5.sh` (root) |
| `AbletonMCP_AI/start_mcp.bat` | `start_mcp.bat` (root) |
| `song_generator.py:5535 HumanFeelEngine` | `human_feel.py:8 HumanFeelEngine` |
---
## 7. Metricas de Complejidad
| Archivo | Lineas | Estado |
|---|---|---|
| `server.py` | 14,930 | CRITICO - Necesita refactorizacion |
| `song_generator.py` | 14,568 | CRITICO - Double-spaced, ~7K reales |
| `reference_listener.py` | 8,488 | ALTO - Necesita refactorizacion |
| `sample_selector.py` | 3,258 | OK |
| `audio_resampler.py` | 2,527 | OK |
| `sample_manager.py` | 1,087 | OK |
| `abletonmcp_init.py` | ~800 | OK |
| `audio_arrangement.py` | ~500 | OK |
| `audio_mastering.py` | ~400 | OK |
---
## 8. Mejoras Implementadas
### FIX-001: Proteger import de human_feel en server.py
**Estado:** Aplicado
### FIX-002: Renombrar excepciones que sobreescriben built-ins
**Estado:** Aplicado (ConnectionError -> MCPConnectionError, etc.)
### FIX-003: Eliminar funcion duplicada _linear_to_live_slider_bus
**Estado:** Aplicado
### FIX-004: Corregir HOST inconsistente en abletonmcp_init.py
**Estado:** Aplicado
### FIX-005: Eliminar codigo Python 2 innecesario en abletonmcp_init.py
**Estado:** Aplicado
### FIX-006: Fix bare except en abletonmcp_init.py disconnect()
**Estado:** Aplicado
---
## 9. Roadmap de Mejoras
### Fase 1: Limpieza Inmediata (1-2 dias)
- [x] Arreglar los 7 bugs criticos
- [ ] Eliminar archivos basura (23 archivos)
- [ ] Archivar documentacion obsoleta (14 archivos)
- [ ] Eliminar archivos duplicados (5 archivos)
- [ ] Actualizar .gitignore para prevenir re-inclusion
### Fase 2: Refactorizacion Arquitectural (1 semana)
- [ ] Dividir `server.py` (14,930 lineas) en modulos:
- `server_core.py` - FastMCP setup, lifespan, connection
- `server_tools.py` - Tool definitions (@mcp.tool decorators)
- `server_generation.py` - Track/song generation logic
- `server_manifest.py` - Manifest storage/retrieval
- `server_budget.py` - GenerationBudget class
- `server_ableton.py` - AbletonConnection class
- `server_helpers.py` - Utility functions
- [ ] Dividir `song_generator.py` (14,568 lineas):
- Eliminar double-spacing (~7,000 lineas de aire)
- Extraer `PhrasePlan` a su propio modulo
- Extraer constantes de genero a `genre_config.py`
- Extraer patrones de bateria a `drum_patterns.py`
- [ ] Eliminar `HumanFeelEngine` duplicada en song_generator.py
- [ ] Unificar sistema de imports (usar imports absolutos consistentes)
### Fase 3: Robustez (1 semana)
- [ ] Reducir los 206 bloques `except Exception` a excepciones especificas
- [ ] Implementar connection pooling en AbletonConnection
- [ ] Arreglar el parseo de buffer en abletonmcp_init.py (usar newline delimiter)
- [ ] Agregar health check endpoint
- [ ] Implementar circuit breaker para comunicacion con Ableton
- [ ] Agregar metricas de latencia por comando
### Fase 4: Testing (1 semana)
- [ ] Crear test suite para song_generator.py
- [ ] Crear test suite para sample_selector.py
- [ ] Crear test de integracion MCP -> Remote Script
- [ ] Crear test de regresion para generacion de tracks
- [ ] Mover tests sueltos a `tests/` directory
### Fase 5: Optimizacion (2 semanas)
- [ ] Implementar lazy loading de modulos pesados
- [ ] Cache de samples index en memoria
- [ ] Optimizar vector_manager.py (solo 318 lineas, pero critico)
- [ ] Profile y optimizar latencia de generacion
- [ ] Implementar generacion incremental (no regenerar todo el set)
### Fase 6: Nuevas Features (continuo)
- [ ] Soporte para mas generos (ambient, lo-fi, breakbeat)
- [ ] Generacion multi-track en paralelo
- [ ] Preview auditivo antes de materializar
- [ ] Undo/redo de generaciones
- [ ] Modo "remix" - modificar generacion existente
- [ ] API REST alternativa al MCP para integraciones externas
- [ ] Dashboard web para monitoreo de generaciones
---
## 10. Estructura de Proyecto Recomendada
```
MIDI Remote Scripts/
├── CLAUDE.md # Contexto canonico
├── README.md # Documentacion principal
├── .mcp.json # Config MCP
├── .gitignore # Git ignore
├── mcp_wrapper.py # Wrapper MCP
├── abletonmcp_init.py # Runtime Remote Script
├── opencode.json # Config opencode
├── mcp_wrapper.bat # Launcher Windows
├── start_mcp.bat # Launcher MCP
├── restart_ableton.bat # Restart helper
├── AbletonMCP_AI/ # Remote Script package
│ ├── __init__.py # Shim loader
│ └── Remote_Script.py # Fallback
├── AbletonMCP_AI/AbletonMCP_AI/
│ └── MCP_Server/ # MCP Server package
│ ├── server_core.py # Core MCP setup
│ ├── server_tools.py # Tool definitions
│ ├── server_generation.py # Generation logic
│ ├── server_manifest.py # Manifest storage
│ ├── server_budget.py # Budget enforcement
│ ├── server_ableton.py # Ableton connection
│ ├── server_helpers.py # Utilities
│ ├── song_generator.py # Music generation
│ ├── sample_selector.py # Sample selection
│ ├── sample_manager.py # Sample management
│ ├── reference_listener.py # Reference analysis
│ ├── audio_resampler.py # Audio resampling
│ ├── diversity_memory.py # Cross-gen memory
│ ├── coherence_analyzer.py # Quality analysis
│ ├── human_feel.py # Humanization
│ ├── self_ai.py # Auto-prompter
│ └── tests/ # Test suite
│ ├── test_generator.py
│ ├── test_selector.py
│ └── test_integration.py
└── docs/ # Documentacion
├── ROADMAP.md
├── ARCHITECTURE.md
└── API.md
```
---
## 11. Prioridades Inmediatas
1. **AHORA:** Aplicar fixes criticos (BUG-001 a BUG-005) - **HECHO**
2. **HOY:** Limpiar archivos basura
3. **ESTA SEMANA:** Actualizar .gitignore
4. **PROXIMO SPRINT:** Dividir server.py en modulos
5. **SIGUIENTE:** Eliminar double-spacing en song_generator.py