Files
ableton-mcp-ai/diagnostico_wsl.py
2026-03-30 02:35:02 -03:00

212 lines
7.4 KiB
Python

#!/usr/bin/env python3
"""
Diagnóstico completo de conectividad Ableton <-> WSL
"""
import socket
import subprocess
import sys
import os
def run_cmd(cmd, description):
"""Ejecuta un comando y muestra el resultado"""
print(f"\n{'='*60}")
print(f"🔍 {description}")
print(f"{'='*60}")
print(f"Comando: {cmd}")
try:
result = subprocess.run(cmd, shell=True, capture_output=True, text=True, timeout=10)
if result.stdout:
print(f"STDOUT:\n{result.stdout}")
if result.stderr:
print(f"STDERR:\n{result.stderr}")
return result.returncode == 0
except Exception as e:
print(f"❌ Error: {e}")
return False
def test_socket_connection(host, port, description):
"""Prueba conexión socket"""
print(f"\n{'='*60}")
print(f"🔌 {description}")
print(f"{'='*60}")
print(f"Probando: {host}:{port}")
try:
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.settimeout(5)
result = sock.connect_ex((host, port))
if result == 0:
print(f"✅ Conexión exitosa a {host}:{port}")
sock.close()
return True
else:
print(f"❌ No se puede conectar a {host}:{port}")
print(f" Código de error: {result}")
if result == 111:
print(" (111 = Connection refused - nadie escucha en ese puerto)")
elif result == 113:
print(" (113 = No route to host - problema de red)")
elif result == 110:
print(" (110 = Connection timed out - firewall o no accesible)")
sock.close()
return False
except Exception as e:
print(f"❌ Error: {e}")
return False
def get_network_info():
"""Obtiene información de red de WSL"""
print(f"\n{'='*60}")
print(f"🌐 Información de red WSL")
print(f"{'='*60}")
# IP de WSL
try:
hostname = socket.gethostname()
ip_wsl = socket.getaddrinfo(hostname, None, socket.AF_INET)[0][4][0]
print(f"IP de WSL: {ip_wsl}")
except:
print("No se pudo obtener IP de WSL")
# IP de Windows (desde resolv.conf)
try:
with open('/etc/resolv.conf', 'r') as f:
for line in f:
if line.startswith('nameserver'):
ip_windows = line.split()[1]
print(f"IP de Windows (resolv.conf): {ip_windows}")
break
except Exception as e:
print(f"No se pudo leer resolv.conf: {e}")
# Gateway
try:
result = subprocess.run(['ip', 'route', 'show'], capture_output=True, text=True)
print(f"\nRutas de red:")
print(result.stdout)
except:
pass
def test_windows_ports():
"""Prueba puertos en Windows desde WSL"""
print(f"\n{'='*60}")
print(f"🔍 Probando puertos en Windows desde WSL")
print(f"{'='*60}")
# Intentar conectar desde WSL a Windows en diferentes IPs
ips_to_test = [
"127.0.0.1", # Localhost (solo funciona en WSL1)
"172.19.0.1", # Gateway WSL
"10.255.255.254", # Windows (desde resolv.conf)
"192.168.1.1", # Router común
]
# Detectar IPs reales
try:
result = subprocess.run(['ip', 'route', 'show'], capture_output=True, text=True)
for line in result.stdout.split('\n'):
if 'default' in line:
parts = line.split()
if 'via' in parts:
idx = parts.index('via')
gateway = parts[idx + 1]
if gateway not in ips_to_test:
ips_to_test.insert(0, gateway)
print(f"Añadida IP de gateway: {gateway}")
except:
pass
for ip in ips_to_test:
test_socket_connection(ip, 9877, f"Conexión a {ip}:9877")
test_socket_connection(ip, 9879, f"Conexión a {ip}:9879 (M4L)")
def check_ableton_log():
"""Verifica el log de Ableton"""
print(f"\n{'='*60}")
print(f"📋 Verificando Log de Ableton")
print(f"{'='*60}")
# Convertir path de Windows a WSL
log_path = "/mnt/c/Users/ren/AppData/Roaming/Ableton/Live 12.0.15/Preferences/Log.txt"
if os.path.exists(log_path):
print(f"✅ Log encontrado: {log_path}")
try:
# Leer últimas 50 líneas
result = subprocess.run(['tail', '-50', log_path], capture_output=True, text=True)
print(f"\nÚltimas 50 líneas del log:")
print("-" * 60)
print(result.stdout)
print("-" * 60)
# Buscar mensajes relevantes
if 'AbletonMCP' in result.stdout or '9877' in result.stdout:
print("✅ Encontradas referencias a AbletonMCP en el log")
else:
print("⚠️ No se encontraron referencias a AbletonMCP en las últimas líneas")
print(" Esto puede significar que el remote script no se cargó")
except Exception as e:
print(f"❌ Error leyendo log: {e}")
else:
print(f"❌ Log no encontrado en: {log_path}")
print(" Verifica la ruta del log de Ableton")
def check_remote_script():
"""Verifica que el remote script existe"""
print(f"\n{'='*60}")
print(f"📁 Verificando Remote Script")
print(f"{'='*60}")
script_path = "/mnt/c/ProgramData/Ableton/Live 12 Suite/Resources/MIDI Remote Scripts/AbletonMCP_AI/__init__.py"
if os.path.exists(script_path):
print(f"✅ Remote script encontrado: {script_path}")
# Verificar que tiene el socket server
try:
with open(script_path, 'r') as f:
content = f.read()
if 'socket' in content and '9877' in content:
print("✅ Remote script contiene código de socket server")
if '0.0.0.0' in content or 'DEFAULT_HOST' in content:
print("✅ Configurado para escuchar en todas las interfaces")
else:
print("⚠️ Puede estar configurado solo para localhost")
else:
print("❌ Remote script no parece tener código de socket")
except Exception as e:
print(f"Error leyendo script: {e}")
else:
print(f"❌ Remote script NO encontrado: {script_path}")
def main():
print("="*60)
print("🔧 DIAGNÓSTICO DE CONECTIVIDAD ABLETON MCP")
print("="*60)
print(f"Fecha: {subprocess.run(['date'], capture_output=True, text=True).stdout.strip()}")
get_network_info()
check_remote_script()
check_ableton_log()
test_windows_ports()
print(f"\n{'='*60}")
print("📊 RESUMEN DEL DIAGNÓSTICO")
print(f"{'='*60}")
print("""
Si todas las conexiones fallaron con "Connection refused" (111):
→ El remote script no está corriendo o no escucha en la red
→ Solución: Verifica que Ableton tenga cargado AbletonMCP_AI en Preferencias → MIDI
Si falla con "No route to host" (113) o timeout (110):
→ Problema de red entre WSL y Windows
→ Solución: Configurar firewall de Windows o usar WSL1
Recomendaciones:
1. En Ableton: Preferencias → MIDI → Control Surfaces → Seleccionar AbletonMCP_AI
2. En Windows (PowerShell Admin): netsh advfirewall firewall add rule name="AbletonMCP-AI" dir=in action=allow protocol=TCP localport=9877
3. Reiniciar Ableton Live después de cambios
""")
if __name__ == "__main__":
main()