16 KiB
16 KiB
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 HumanFeelEngineesta ANTES del docstring del modulo y SIN try/except. Si el modulohuman_feelno 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,ValidationErroryTimeoutErrorsobreescriben las excepciones built-in de Python. Cualquierexcept ConnectionErroroexcept TimeoutErroren 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()creaself.sock, perosend_command()(linea 7430-7431) siempre desconectaself.sockprimero y luego crea un socket LOCAL nuevo en linea 7454. Elself.sockdel 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_busy usar_linear_to_live_slideren su lugar
BUG-005: Clase HumanFeelEngine duplicada
- Archivo:
song_generator.py:5535yhuman_feel.py:8 - Problema:
HumanFeelEngineexiste como clase independiente enhuman_feel.pyY como clase duplicada dentro desong_generator.py. El server.py importa desdehuman_feel.py(linea 1), perosong_generator.pyusa 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 Exceptiono 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ÃÆ'³nen lugar deSeleccion) - 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 luegomodule(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
Queuevsqueueybasestringvsstrson innecesarios.
BUG-014: client_threads lista nunca se limpia completamente
- Archivo:
abletonmcp_init.py:152 - Problema: La lista
self.client_threadssolo se limpia en_server_threadpero 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:25usaHOST = "localhost"server.py:1098usaHOST = "127.0.0.1"- Deberia ser consistente (preferir
127.0.0.1para evitar DNS lookups)
BUG-017: DIVERSITY_MEMORY_AVAILABLE sobrescrita
- Archivo:
sample_selector.py:77 - Problema:
DIVERSITY_MEMORY_AVAILABLE = Truese 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)
- 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, connectionserver_tools.py- Tool definitions (@mcp.tool decorators)server_generation.py- Track/song generation logicserver_manifest.py- Manifest storage/retrievalserver_budget.py- GenerationBudget classserver_ableton.py- AbletonConnection classserver_helpers.py- Utility functions
- Dividir
song_generator.py(14,568 lineas):- Eliminar double-spacing (~7,000 lineas de aire)
- Extraer
PhrasePlana su propio modulo - Extraer constantes de genero a
genre_config.py - Extraer patrones de bateria a
drum_patterns.py
- Eliminar
HumanFeelEngineduplicada en song_generator.py - Unificar sistema de imports (usar imports absolutos consistentes)
Fase 3: Robustez (1 semana)
- Reducir los 206 bloques
except Exceptiona 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
- AHORA: Aplicar fixes criticos (BUG-001 a BUG-005) - HECHO
- HOY: Limpiar archivos basura
- ESTA SEMANA: Actualizar .gitignore
- PROXIMO SPRINT: Dividir server.py en modulos
- SIGUIENTE: Eliminar double-spacing en song_generator.py