[0.6.0] — 2026-07-11
Cierra la última brecha accionable de paridad de experiencia entre los 3 SO
registrada en docs/PARITY.md: la de desinstalación en un comando. Con ella,
tts-sidecar setup --uninstall deja de ser solo-Linux y pasa a ser un comando
único en los tres SO (dispatch por SO sobre un contrato compartido: datos → PATH
→ binario, con cancelación atómica y guard de canal nativo). MINOR: capacidad
nueva en macOS y Windows, más un cambio de comportamiento deliberado en Linux.
Solo la brecha de firma de código (SmartScreen/Gatekeeper, binarios sin firmar)
queda diferida al goal a largo plazo.
Añadido
setup --uninstallen macOS (_uninstall_macos): desinstalación de un
comando que encadenacleanup --all, quita el symlink per-user de
~/.local/biny borra el.app(localizado desdesys.executablecon
resolve(); cubre~/Applications,/Applicationsy el Cask con una sola
expresión, con guard de sufijo.app). Si la instalación proviene de Homebrew
(metadata del Caskroom), aborta sin borrar nada y remite abrew uninstall --cask --zap tts-sidecarpara no dejar el Caskroom inconsistente.setup --uninstallen Windows (_uninstall_windows): valida primero el
QuietUninstallStringdel registro (HKCU, clave{AppId}_is1) sin efectos,
borra los datos en proceso concleanup --ally delega el binario y la
reversión del PATH al desinstalador de Inno, lanzado desacoplado con
subprocess.Popen(el SO mantiene el lock del.exe). El payload--json
atestigua las rutas de datos enremovedy el directorio de instalación en el
campo aditivodelegated.- Guard de canal nativo (
is_frozen) ensetup --uninstall, común a los
tres SO: desde fuente o desde una instalación pip/uv, aborta remitiendo apip uninstall tts-sidecaren lugar de operar sobre rutas que no le pertenecen.
Cambiado
- Reorden de la rama Linux de
setup --uninstallal orden unificado del
contrato compartido (cleanup --all→ symlink → directorio de instalación, en
vez de symlink → directorio → cleanup). Habilita la cancelación atómica:
cancelar la confirmación del cleanup aborta la desinstalación sin borrar nada
(salida 0), imposible con el orden anterior (el binario caía antes de la
pregunta). Además el uninstall borra ahora el directorio raíz de datos
(data_root()) si queda vacío tras el cleanup. - Payload
--jsondesetup --uninstall:removedincluye ahora las rutas
de datos delcleanupencadenado (corrección de una omisión de la rama Linux)
y eldata_root()si se eliminó. En Windows se añade el campodelegated
(directorio de instalación, borrado por Inno tras la salida del proceso).
Ambos son cambios aditivos:schema_versionno cambia.