Sobre el proyecto

Esta es una aplicación shell que lleva DeepSeek Harness (dsh) a teléfonos Android, con nombre de app DeepCode, paquete com.dsharnessmobile.shell, versión actual 0.14.0-preview, e incluye el motor @deepseek-ai/dsh 0.1.5-rc.1. La idea central es «extraer y ejecutar»: el APK incorpora una instantánea del runtime Termux comprimida en xz, que incluye node, git, bash, coreutils, dsh, plugins, pnpm y python/perl/ruby. La primera ejecución tarda 2-4 minutos en descomprimir; después, el motor escucha en 127.0.0.1:3080 y funciona completamente sin conexión, sin que el usuario necesite instalar Termux por separado. En cuanto al runtime y ciclo de vida, se admite actualización del runtime en línea impulsada por manifiesto: descarga, verificación sha256, cambio atómico y reinicio automático; el cambio de árbol es una operación de transacción única, con reversión ante interrupciones, y no toca los datos del usuario (sesiones, adjuntos, configuraciones, credenciales, espacios de trabajo). La autoactualización del APK se activa manualmente tocando «Buscar actualizaciones» en la pantalla de inicio; no se verifica automáticamente, consulta el último lanzamiento de GitHub y empareja activos según la ABI del dispositivo. El mecanismo de persistencia incluye servicio en primer plano, un perro guardián de 5 segundos que relanza el motor colgado, sondeo de UI cada 3 segundos y una compuerta de retroceso ante fallos. También hay una consola bash interactiva independiente para diagnosticar problemas incluso cuando el motor no está en ejecución. El navegador de IA es un segundo WebView totalmente aislado de la interfaz principal; la IA puede abrir varias pestañas y la persona también puede verlas directamente. La resolución se inyecta según el viewport CSS, con window.innerWidth exactamente igual al valor solicitado, y admite cambio de identidad entre PC y móvil. La función de pantalla virtual crea una pantalla separada mediante el canal privilegiado de Shizuku para ejecutar apps de terceros sin ocupar el primer plano del usuario, con un límite de 1 instancia. El lanzamiento entre pantallas usa la ruta am start --display del UserService de Shizuku en el lado del shell. La entrada de coordenadas en la pantalla virtual usa x/y absolutos más screenId; las coordenadas normalizadas se rechazan explícitamente para evitar tocar la pantalla real por error. Las capturas de pantalla se guardan en el displayId objetivo y usan los píxeles de esa pantalla como ancla de resolución. La pantalla virtual se recicla automáticamente tras 10 minutos de inactividad. El control del teléfono ofrece doble canal: accesibilidad y Shizuku. El canal de accesibilidad gestiona el árbol semántico y acciones ref; el canal Shizuku ejecuta con uid 2000 comandos de solo lectura y entrada como screencap, uiautomator, dumpsys e input; cualquier escritura en la configuración del sistema se rechaza. En adjuntos y archivos, el menú desplegable del clip ofrece «Subir adjunto/Subir imagen» con un toque, usando el selector de archivos del sistema y la galería del sistema respectivamente. Mediante «Abrir con otra app/Compartir» se puede enviar un archivo directamente a la sesión, creando automáticamente un espacio de trabajo temporal con limpieza por TTL de 7 días. El puente SAF puede mapear un directorio seleccionado a una ruta real. El protocolo puente v1 expone 51 métodos @JavascriptInterface; la página detecta características mediante androidBridge.version, por lo que el APK y la versión de dsh están desacoplados. Las herramientas visibles para el modelo provienen todas de plugins, actualmente 45, reveladas progresivamente por grupos de capacidades; primero se debe llamar a android_capabilities para desbloquearlas, divididas en grupos como phone, browser y virtual-display. Los permisos incluyen INTERNET, POST_NOTIFICATIONS, servicio en primer plano, MANAGE_EXTERNAL_STORAGE y REQUEST_INSTALL_PACKAGES. La pantalla virtual y el shell privilegiado requieren que el usuario instale y autorice Shizuku por su cuenta. La publicación ofrece paquetes para ABI arm64 y x86_64; la ABI debe coincidir con el dispositivo, de lo contrario el motor falla al iniciar. La compilación requiere JDK 17+, Android SDK (compileSdk 36), Gradle 8.11.1 proporcionado por el wrapper; la construcción de instantáneas y el empaquetado se realizan en el repositorio coordinado. El README indica claramente: la mayoría de los plugins de terceros del mercado integrado probablemente no funcionen en el móvil y tengan errores; en fase beta el objetivo es validar usabilidad y recopilar comentarios, y no se recomienda como dependencia de producción. El proyecto usa licencia MIT y ha realizado tratamiento de cumplimiento GPL.