# Changelog de infraestructura — global (sobremesa <-> portatil <-> VPS) > Fichero generado por `scripts/infra_changelog.py`. NO editar a mano. > Fuente de verdad: `changelog_infra.json`. ## Pendientes de replicar - **2026-10-03-superwhisper-enter-ahk-f13-boton-auxiliar-logitech-tarea-pro** [scripts] SuperWhisper Enter: AHK F13 boton auxiliar Logitech + tarea programada (aplicado en: portatil) - **2026-10-03-perfil-juanjo-instaladas-dependencias-python-21-paquetes-en-** [scripts] Perfil juanjo: instaladas dependencias Python (21 paquetes) en C:\Python314 (aplicado en: sobremesa) - **2026-10-03-sobremesa-juanjo-instaladas-17-apps-de-usuario-que-estaban-e** [scripts] Sobremesa juanjo: instaladas 17 apps de usuario que estaban en juanm (aplicado en: sobremesa) - **2026-10-03-migracion-cuenta-juanjo-rutas-juanm-dinamicas-os-path-expand** [scripts] Migracion cuenta juanjo: rutas juanm -> dinamicas (os.path.expanduser / \C:\Users\juanjo / USERPROFILE) (aplicado en: sobremesa) ## Historial ### 2026-10-03 · SuperWhisper Enter: AHK F13 boton auxiliar Logitech + tarea programada - **id**: `2026-10-03-superwhisper-enter-ahk-f13-boton-auxiliar-logitech-tarea-pro` - **Equipo**: portatil - **Categoria**: scripts - **Transferible**: si - **Aplicado en**: portatil - **Detalle**: Script superwhisper_enter.ahk: F13 (boton auxiliar Logitech asignado en Logi Options+) espera cambio portapapeles (Super Whisper pega) y manda Enter + devuelve foco a OpenCode. Tarea programada SuperWhisper Enter al inicio de sesion. Rueda central = toggle Super Whisper (inicio/parar). F13 = Enter automatico. ### 2026-10-03 · Monitor de estado (Telegram + correo + Jira) en segundo plano - **id**: `2026-10-03-monitor-de-estado-telegram-correo-jira-en-segundo-plano` - **Equipo**: portatil - **Categoria**: servicios - **Transferible**: si - **Aplicado en**: portatil, sobremesa - **Detalle**: Proceso Python (scripts/monitor_estado.py) que cada 30 min recoge Telegram (5 fuentes), correo jminguez@prolongo.es y Jira DS (nuevos + sin asignar), archiva por fuente, resume con IA (OmniRoute) y avisa por voz local. Arranque por tarea programada 'Monitor Estado' + plugin global monitor-estado-bootstrap.ts; watchdog idempotente; sesion Telegram dedicada (sessions/monitor, login por QR); tests pytest en tests/. Requiere en el otro equipo: pip install pytest qrcode, login Telegram QR y re-ejecutar instalar_global.ps1. ### 2026-10-03 · Acceso remoto al sobremesa: OpenSSH Server + Tailscale (ssh -> PowerShell) - **id**: `2026-10-03-acceso-remoto-al-sobremesa-openssh-server-tailscale-ssh-powe` - **Equipo**: portatil - **Categoria**: servicios - **Transferible**: si - **Aplicado en**: portatil, sobremesa - **Detalle**: Scripts en scripts/acceso_remoto/: setup_tailscale.ps1 (malla privada) y setup_ssh_server.ps1 (OpenSSH Server, shell PowerShell, firewall solo Tailscale+LAN, instala clave publica). Clave SSH del portatil: ~/.ssh/id_ed25519. Doc: docs/ACCESO_REMOTO_SOBREMESA.md. Permite ssh juanm@sobremesa desde cualquier red sin abrir puertos. Requiere en cada equipo: ejecutar setup_tailscale; en el sobremesa ademas setup_ssh_server (admin). ### 2026-10-03 · VoiceMonkey sustituido por Home Assistant (Alexa) - **id**: `2026-10-03-voicemonkey-sustituido-por-home-assistant-alexa` - **Equipo**: portatil - **Categoria**: servicios - **Transferible**: si - **Aplicado en**: portatil, sobremesa - **Detalle**: Validado con efecto real (anuncio por voz + comando 'apaga/enciende barras'). Nuevo helper biblioteca/scripts/ha_alexa.py (announce/command via HA REST). Migrados: netatmo_tool.notificar_alexa, telegram_read_tracker.notificar_alexa, protocolo_apagado.py y protocolo_apagado_test.py (apagar_luces_alexa). .env: +HOMEASSISTANT_URL/TOKEN (long-lived), -VOICEMONKEY_TOKEN/DEVICE. Obsoletos: alexa_notify.js, configurar_voicemonkey.py. Requiere en el otro equipo: git pull + tener HOMEASSISTANT_TOKEN en .env. ### 2026-10-03 · OmniRoute 3.8.48 -> 3.8.51: fix catalogo live antigravity - **id**: `2026-10-03-omniroute-3-8-48-3-8-51-fix-catalogo-live-antigravity` - **Equipo**: portatil - **Categoria**: omniroute - **Transferible**: si - **Aplicado en**: portatil, sobremesa - **Detalle**: Actualizado omniroute a 3.8.51 (npm i -g omniroute@latest). Ahora valida contra el 'active live catalog' de Antigravity: los modelos deprecados (gemini-3.5-flash-*, gemini-2.5-*, claude-* en antigravity) devuelven HTTP 400 en vez de texto de deprecacion. Funcionan: gemini-3.1-pro-low/high, gemini-3.1-flash-lite, gemini-pro-agent, gpt-oss-120b-medium. Servidor relanzado via omniroute_watchdog.ps1 -Once. ### 2026-10-03 · Fix ACL setup_ssh_server.ps1 (SIDs, no nombres en ingles) - **id**: `2026-10-03-fix-acl-setup-ssh-server-ps1-sids-no-nombres-en-ingles` - **Equipo**: sobremesa - **Categoria**: scripts - **Transferible**: no - **Aplicado en**: sobremesa - **Detalle**: icacls fallaba en Windows es-ES al usar BUILTIN\Administrators; ahora usa *S-1-5-18 y *S-1-5-32-544. Aplicado y verificado en sobremesa (sshd Automatic/Running, key portatil autorizada). ### 2026-10-03 · Perfil juanjo: instaladas dependencias Python (21 paquetes) en C:\Python314 - **id**: `2026-10-03-perfil-juanjo-instaladas-dependencias-python-21-paquetes-en-` - **Equipo**: sobremesa - **Categoria**: scripts - **Transferible**: si - **Aplicado en**: sobremesa - **Detalle**: Tras migrar a la cuenta juanjo, Python solo tenia pip. Instalados: pycryptodome PyP100 caldav python-dotenv edge-tts feedparser flask ftfy google-auth-oauthlib google-api-python-client openpyxl psutil qrcode requests telethon todoist-api-python urllib3 wakeonlan watchdog win10toast + setuptools<81 + pywin32. Necesario para watchers/tablero/Jira. ### 2026-10-03 · Sobremesa juanjo: instaladas 17 apps de usuario que estaban en juanm - **id**: `2026-10-03-sobremesa-juanjo-instaladas-17-apps-de-usuario-que-estaban-e` - **Equipo**: sobremesa - **Categoria**: scripts - **Transferible**: si - **Aplicado en**: sobremesa - **Detalle**: VS Code, GitHub Desktop, Postman, HeidiSQL, Inno Setup, FFmpeg, Rclone, WinDbg(pend), Obsidian, Ollama, Antigravity IDE, Claude, Discord, Telegram Desktop, Stremio, superwhisper, Greenshot. Via winget (ids del inventario docs/formateo/01-INVENTARIO_PROGRAMAS.md). Requiere winget elevado. ### 2026-10-03 · Migracion cuenta juanjo: rutas juanm -> dinamicas (os.path.expanduser / \C:\Users\juanjo / USERPROFILE) - **id**: `2026-10-03-migracion-cuenta-juanjo-rutas-juanm-dinamicas-os-path-expand` - **Equipo**: sobremesa - **Categoria**: scripts - **Transferible**: si - **Aplicado en**: sobremesa - **Detalle**: 50 ficheros .py + 8 .ps1 + 2 .ts: rutas C:\Users\juanm -> dinamicas para que funcionen en juanm (portatil) y juanjo (sobremesa). Incluye .env de INFRA scripts, gestion_jira, gestion_jira, contabo key, plugins opencode. Tambien: clave SSH contabo copiada, OmniRoute 3.8.51, UFW 5001 solo IP sobremesa, Google OAuth reautorizado. ### 2026-10-03 · Sobremesa juanjo: SuperWhisper config replicada + Obsidian vault registrado + boton central M575 -> Ctrl+Space - **id**: `2026-10-03-sobremesa-juanjo-superwhisper-config-replicada-obsidian-vaul` - **Equipo**: sobremesa - **Categoria**: scripts - **Transferible**: no - **Aplicado en**: sobremesa - **Detalle**: Perfil nuevo juanjo tras migracion. (1) SuperWhisper modes/default.json=s1-mini+es+prompt, settings.json=31 terminos vocab, preferences launchAtLogin=true (pendiente login PRO + descarga modelo s1-mini). (2) Obsidian: creado %APPDATA%\obsidian\obsidian.json registrando vault biblioteca_negocio_prolongo\vault (open true) -> API REST 27124 OK. (3) LogiOptionsPlus settings.db: slot m575-6b027_c82 (boton central) MB3 -> KEYSTROKE Ctrl+Space (toggle SuperWhisper). appbroker corre elevado y no se puede matar; editar DB con agent parado y relanzar logioptionsplus.exe persiste. ### 2026-10-02 · superguardado.py: protocolo guardado total automatico portatil+sobremesa - **id**: `2026-10-02-superguardado-py-protocolo-guardado-total-automatico-portati` - **Equipo**: portatil - **Categoria**: scripts - **Transferible**: si - **Aplicado en**: portatil, sobremesa - **Detalle**: Script scripts/superguardado.py en biblioteca_negocio_prolongo. 7 pasos: ESTADO_DIARIO + git biblioteca + engram cloud + sync_continuo + obsidian + git INFRAESTRUCTURA + aviso sonoro. Palabra clave: superguardado/guarda/memoria. Descripcion auto si no se indica. ### 2026-09-30 · Fix telegram_watcher (telethon 1.44 + encoding UTF-8) - **id**: `2026-09-30-fix-telegram-watcher-telethon-1-44-encoding-utf-8` - **Equipo**: portatil - **Categoria**: watchers - **Transferible**: si - **Aplicado en**: portatil, sobremesa - **Detalle**: MessageRead(outbox=True) rompe en telethon 1.44 (kwarg eliminado) -> usar MessageRead(). Anadido reconfigure UTF-8 en stdout/stderr para evitar UnicodeEncodeError cp1252 al lanzar desde tarea programada sin PYTHONUTF8. ### 2026-09-29 · Migración de watchers al VPS - **id**: `2026-09-29-migraci-n-de-watchers-al-vps` - **Equipo**: sobremesa - **Categoria**: servicios - **Transferible**: si - **Aplicado en**: sobremesa, portatil - **Detalle**: Telegram Watcher y Shutdown Listener migrados al VPS. Recordatorios Msgbox eliminado. Ver INFRAESTRUCTURA/vps/MIGRACION_SERVICIOS_VPS.md para instrucciones. ### 2026-09-20 · OmniRoute arranque fiable (tarea programada + vigilante) - **id**: `2026-09-20-omniroute-arranque-fiable-tarea-programada-vigilante` - **Equipo**: sobremesa - **Categoria**: omniroute - **Transferible**: si - **Aplicado en**: sobremesa, portatil - **Detalle**: Tarea 'OmniRoute Watchdog' al iniciar sesion + omniroute_watchdog.ps1 (puerto 20128 cada 120s, autocuracion). Sustituye el .vbs fragil. ### 2026-09-20 · OmniRoute: 505 modelos expuestos en OpenCode - **id**: `2026-09-20-omniroute-505-modelos-expuestos-en-opencode` - **Equipo**: sobremesa - **Categoria**: omniroute - **Transferible**: si - **Aplicado en**: sobremesa, portatil - **Detalle**: setup-opencode --only de 5 conexiones probadas (antigravity, claude, opencode-go, opencode, aihorde) + auto/*. Quitar BOM de opencode.jsonc. ### 2026-09-20 · Plugin global OpenCode relanza OmniRoute - **id**: `2026-09-20-plugin-global-opencode-relanza-omniroute` - **Equipo**: sobremesa - **Categoria**: opencode - **Transferible**: si - **Aplicado en**: sobremesa, portatil - **Detalle**: omniroute-bootstrap.ts en ~/.config/opencode/plugins/ lanza el vigilante -Once al arrancar OpenCode en cualquier repo. ### 2026-09-20 · Gitea caido (502) - contenedor en bucle de reinicio - **id**: `2026-09-20-gitea-caido-502-contenedor-en-bucle-de-reinicio` - **Equipo**: VPS - **Categoria**: servicios - **Transferible**: no - **Aplicado en**: VPS - **Detalle**: git.v-encore-lab.com (185.187.169.109) devolvia 502. Causa: contenedor gitea con capa de escritura corrupta (/app/gitea/gitea Permission denied, 3595 reinicios). Fix: recrear solo el contenedor desde /root/docker-compose.yml (docker compose up -d --force-recreate --no-deps gitea). Datos intactos en /root/gitea/data. Gitea 1.25.5, healthz pass. ### 2026-09-20 · Gitea: watchdog systemd (recrea contenedor) + fix URL monitor Kuma - **id**: `2026-09-20-gitea-watchdog-systemd-recrea-contenedor-fix-url-monitor-kum` - **Equipo**: VPS - **Categoria**: servicios - **Transferible**: no - **Aplicado en**: VPS - **Detalle**: VPS: /opt/gitea-watchdog/gitea_watchdog.sh + timer systemd cada 2min (recrea gitea si falla 2 veces). Verificado parando gitea. Monitor Uptime-Kuma 'Gitea - Repositorios' corregido (URL tenia punto final) con alerta email SMTP. Ficheros en INFRAESTRUCTURA/vps/gitea/. ### 2026-09-20 · Migracion de watchers (Telegram + recordatorios) a INFRAESTRUCTURA - **id**: `2026-09-20-migracion-de-watchers-telegram-recordatorios-a-infraestructu` - **Equipo**: sobremesa - **Categoria**: watchers - **Transferible**: si - **Aplicado en**: sobremesa, portatil - **Detalle**: telegram_watcher.py, recordatorios_msgbox.py y recordatorio.cmd movidos de biblioteca_negocio_prolongo/scripts a INFRAESTRUCTURA/scripts. Rutas resueltas con scripts/infra_paths.py: estado en INFRAESTRUCTURA/estado; pendientes.json y modulos compartidos (idd_channel, netatmo_tool, alarma_twilio) desde el repo hermano (override BIBLIOTECA_REPO). Tareas programadas nuevas (Telegram Watcher, Recordatorios Msgbox) via scripts/instalar_watchers.ps1 (integrado en instalar_global.ps1). En el portatil: git clone INFRAESTRUCTURA, ejecutar scripts/instalar_global.ps1, copiar ~/.telegram-agent y ~/.omniroute, y eliminar el autostart .lnk antiguo si existe. Estado migrado a INFRAESTRUCTURA/estado/. ### 2026-09-20 · Primera version de Morning Routine (WoL, Tapo, AutoLogon y Arranque Apps) - **id**: `2026-09-20-primera-version-de-morning-routine-wol-tapo-autologon-y-arra` - **Equipo**: sobremesa - **Categoria**: scripts - **Transferible**: si - **Aplicado en**: sobremesa, portatil - **Detalle**: Scripts para encender PC via RPi+Tapo, hacer autologon en Windows y lanzar Chrome, Edge, WhatsApp y Telegram al arrancar ### 2026-09-20 · Fix bot Telegram control PC: confirmacion + watchdog - **id**: `2026-09-20-fix-bot-telegram-control-pc-confirmacion-watchdog` - **Equipo**: sobremesa - **Categoria**: scripts - **Transferible**: si - **Aplicado en**: sobremesa, portatil - **Detalle**: Corregidos 4 problemas del bot telegram_bot_pc.py: (1) confirmacion obligatoria antes de apagar, (2) watchdog automatico de estado tras apagar (30s + ping), (3) watchdog de encendido con 3 reintentos (90s + 3x15s ping), (4) documentado problema autologon usuario nuevo. Archivos: telegram_bot_pc.py (corregido), docs/TELEGRAM_BOT_PC_FIXES.md, docs/FIX_PROBLEMA_AUTOLOGON_USUARIO_NUEVO.md ### 2026-09-20 · Bot IDD desplegado en VPS con control PC - **id**: `2026-09-20-bot-idd-desplegado-en-vps-con-control-pc` - **Equipo**: sobremesa - **Categoria**: servicios - **Transferible**: no - **Aplicado en**: sobremesa - **Detalle**: Bot Telegram IDD en /opt/telegram_bot_idd (VPS 185.187.169.109), servicio telegram-idd-bot.service, control remoto PC (apagar/encender/estado WoL). Panel IDD actualizado con botones de control PC. ### 2026-09-20 · Shutdown listener instalado como tarea programada - **id**: `2026-09-20-shutdown-listener-instalado-como-tarea-programada` - **Equipo**: sobremesa - **Categoria**: watchers - **Transferible**: si - **Aplicado en**: sobremesa, portatil - **Detalle**: shutdown_listener.py añadido a instalar_watchers.ps1. Escucha puerto 5555, arranca al login, reinicio automático. Recibe comandos de Home Assistant para apagar el PC. ### 2026-09-20 · PC Status Proxy en VPS via túnel RPi - **id**: `2026-09-20-pc-status-proxy-en-vps-via-t-nel-rpi` - **Equipo**: sobremesa - **Categoria**: servicios - **Transferible**: no - **Aplicado en**: sobremesa - **Detalle**: Servicio pc-status-proxy.service en VPS verifica estado PC via SSH a RPi (puerto 2222) → curl a 192.168.1.239:5555. Bot IDD usa localhost:15555 para consultar estado real del PC. ### 2026-09-20 · Timeout Home Assistant aumentado 5s→15s para proxy shutdown - **id**: `2026-09-20-timeout-home-assistant-aumentado-5s-15s-para-proxy-shutdown` - **Equipo**: sobremesa - **Categoria**: servicios - **Transferible**: si - **Aplicado en**: sobremesa, portatil - **Detalle**: rest_command.shutdown_pc_local timeout aumentado de 5s a 15s en /opt/homeassistant/config/configuration.yaml. El proxy VPS tarda ~5s por túnel SSH→RPi→PC. Evita timeout que abortaba script completo de apagado. ### 2026-09-20 · Scripts test apagado luces sin regleta (continue_on_error) - **id**: `2026-09-20-scripts-test-apagado-luces-sin-regleta-continue-on-error` - **Equipo**: sobremesa - **Categoria**: servicios - **Transferible**: no - **Aplicado en**: sobremesa - **Detalle**: Creados scripts V2 en Home Assistant para probar apagado de luces sin apagar regleta: apagar_pc_test_luces_v2 con continue_on_error: true. Webhook: test-luces-v2-juanjo. Problema detectado: comandos Alexa custom no se ejecutan (requiere investigación). ### 2026-09-20 · Usuario temporal Juan M en login - script fix_autologon.ps1 listo - **id**: `2026-09-20-usuario-temporal-juan-m-en-login-script-fix-autologon-ps1-li` - **Equipo**: sobremesa - **Categoria**: scripts - **Transferible**: no - **Aplicado en**: sobremesa - **Detalle**: Documentado problema usuario temporal Juan M en pantalla login. No es usuario real, es perfil corrupto de Windows. Solución: ejecutar scripts\fix_autologon.ps1 como Admin y reiniciar. Autologon correctamente configurado pero perfil persiste en caché.