- Nombre final:
Kinetic WOL - App Android nativa
- Objetivo principal: despertar equipos por Wake-on-LAN
- Invocación por asistente: App Actions con foco en compatibilidad con Gemini en Android
- UI con
Jetpack Compose - Persistencia con
Room - Arquitectura simple sin librerías innecesarias
- Compatibilidad solo con
Android 16+ - Idiomas: español base, inglés secundario
applicationId:dev.neikon.kineticwol- El modelo de dispositivo se amplía para soportar capacidades adicionales además de Wake-on-LAN
- La primera ruta de apagado remoto será un agente Linux HTTP autenticado por token
- La app ya implementa dos rutas de apagado remoto:
- agente Linux HTTP autenticado por token
- SSH con clave privada, fingerprint de host y comando configurable
- La ruta SSH se apoya en una precondición explícita: el usuario remoto debe poder ejecutar
sudo -n systemctl poweroffo un comando equivalente sin prompt interactivo
- La estructura visual del prototipo original se conserva conceptualmente:
- dashboard con resumen
- lista de dispositivos
- acción manual de despertar
- formulario de alta/edición
- sección informativa de voz
- registro reciente de eventos
- El prototipo web original se ha eliminado del árbol de trabajo.
- El
integration_blueprint.mdinicial se retiró del repositorio al quedar obsoleto y contener referencias locales que no debían publicarse. - La integración de App Actions para este caso no dispone de un BII oficial específico para Wake-on-LAN.
- La implementación actual se apoyará en un fulfillment headless y en un custom intent para la parte de Assistant/App Actions.
- Según la documentación oficial actual, los custom intents de App Actions tienen limitación de locale
en-US; esto es un riesgo conocido para el objetivo de voz en español. - La documentación oficial sigue mencionando el
App Actions test tool, pero en el Android Studio del usuario no aparece el plugin correspondiente; la validación práctica queda apoyada enadb, shortcuts dinámicos y, si se desea cerrar el flujo real, unainternal testing release.
- No había
javainstalado - No había
gradleinstalado - No se ha podido compilar ni ejecutar tests instrumentados desde terminal
- Proyecto Android creado desde cero en este repositorio
- Base Compose con dashboard y editor de dispositivos
- Persistencia local con
Room WakeOnLanSendercon normalización MAC y magic packetWakeDeviceActivityheadless para fulfillmentshortcuts.xmlcon capacidad de App Actions basada en custom intent- publicación de shortcuts dinámicos por dispositivo para Assistant/Gemini
- quick tile de Android con selector rápido para despertar dispositivos guardados
- bloque hero de la pantalla principal descartable y persistido localmente
- Tests unitarios básicos para WOL y normalización
- Android Studio actualizó la toolchain del proyecto a AGP
9.1.0, Gradle9.3.1y daemon JVM21 - Validado el envío manual de WOL contra un listener Python local
- Validado el fulfillment headless mediante
adbresolviendo dispositivos guardados por nombre - Mejorada la UX del formulario con validación de nombres duplicados, limpieza selectiva de errores y teclados específicos por campo
- Primera implementación de apagado remoto por agente Linux en la app Android
- Migración de
Rooma versión 2 para persistir configuración del agente de apagado remoto - UI de edición extendida con sección de apagado remoto por agente y acción
Apagaren tarjetas compatibles - Integración Android alineada con el contrato HTTP actual de KineticSOL:
GET /api/v1/statusPOST /api/v1/poweroff- Bearer token obligatorio
- flujo de
Probar conexión - mapeo específico de
401,404,503, timeout y error de red
- Ajustado el cliente Android para diagnosticar mejor fallos de conectividad con KineticSOL:
- logging explícito de URL, método, código HTTP y excepción real
- validación previa de
baseUrl - separación de host no resoluble, conexión rechazada, timeout, SSL y cleartext
usesCleartextTraffic=trueactivado temporalmente para pruebas LAN conhttp://
- La quick tile de Android ahora abre el picker si un único dispositivo también soporta apagado remoto, y el picker muestra
Apagarcuando esa capacidad está lista - Implementada la primera versión de apagado remoto por SSH:
- persistencia Room ampliada para host, puerto, usuario, clave privada, fingerprint, passphrase opcional y comando
- selector de método
Agente/SSHen el editor del dispositivo - generación de par de claves SSH dentro de la app y visualización de la clave pública para copiarla al host
- prueba de conexión SSH con autenticación real y comando remoto inocuo
- captura automática del fingerprint del host en la primera prueba SSH si aún no estaba guardado
- apagado SSH usando el comando configurado, por defecto
sudo -n systemctl poweroff - quick tile y picker actualizados para apagar también por SSH
- La app ya define un icono adaptive propio con foreground, background y variante monochrome para themed icons
- Se añadió un workflow de GitHub Actions para compilar
:app:assembleDebug, adjuntar el APK como artifact y publicar una GitHub Release en cada push amain - El usuario confirmó que la integración end-to-end con el agente Linux HTTP del otro repositorio funciona correctamente
- El usuario confirmó que el apagado remoto por SSH funciona end-to-end en un PC Linux con sudoers preparado
- El usuario confirmó que el apagado remoto por SSH funciona end-to-end en TrueNAS SCALE
- El README se actualizó para presentar Kinetic WOL como app de despertar y apagar dispositivos, enlazar GitHub Releases y dejar claro que el control por voz todavía está pendiente
- El README enlaza el agente Linux HTTP compatible en
https://github.com/Neikon/kinetic_soly aclara que el apagado remoto puede ir por SSH o por agente - Se añadió
docs/ssh_linux_shutdown.mdcomo guía paso a paso para preparar apagado remoto por SSH en Linux y se enlazó desde el README - Se añadió
docs/truenas_scale_ssh_shutdown.mdcomo guía paso a paso para preparar apagado remoto por SSH en TrueNAS SCALE desde la Web UI y se enlazó desde el README
- La rama de limpieza migra la build a
built-in Kotlinde AGP 9 - Los flags heredados de compatibilidad añadidos por Android Studio se han eliminado para reducir warnings y deuda técnica
- La build
assembleDebugcompila correctamente en el entorno Android Studio del usuario tras la limpieza inicial - Android Studio actualizó la toolchain del proyecto a AGP
9.2.0y Gradle9.4.1 - Android Studio actualizó la toolchain del proyecto a AGP
9.2.1; el cambio se produjo tras recompilar e instalar una APK que resolvió el fallo SSH observado en Android 17. - El pipeline de GitHub Actions debe usar Gradle
9.4.1; falló al quedarse fijado en9.3.1tras la actualización de AGP - El workflow se ajustó para usar actions que ya declaran Node.js 24 y para configurar Android SDK con
sdkmanagerdirecto, evitandoandroid-actions/setup-android@v3 - El usuario confirmó que el pipeline resultante funciona y ya no muestra warnings de Node.js 20
- El workflow de build/release ignora pushes que solo cambian documentación Markdown (
**/*.mdydocs/**) - El repositorio sigue sin incluir
gradlew, así que desde esta sesión no se puede ejecutar la build localmente aunque haya tests unitarios añadidos
- La siguiente validación real recomendada es una
internal testing releaseen Google Play - Se ha añadido una guía operativa en
docs/release_internal_testing.md
- La clave privada SSH se persiste por ahora en
Room, igual que el token del agente; si la funcionalidad madura, habrá que mover ambos secretos a almacenamiento más seguro - La carga de ciertos formatos de clave puede depender de la compatibilidad real de
sshjen Android con el formato pegado por el usuario - El test de conexión SSH valida red, fingerprint, clave y ejecución remota, pero no garantiza por sí mismo que
sudoersesté correctamente preparado para el comando final de apagado - En Android 17 se observó un cierre SSH en
preauthcuando el móvil seguía ejecutando una APK antigua que negociabacurve25519y host keyssh-ed25519; reinstalar una build actualizada con los workarounds de SSHJ resolvió el caso práctico.