Skip to content

fix(tui): una sesión caducada deja volver a entrar, y Home deja de pintar el error de otra pestaña - #36

Merged
borjaperfra merged 1 commit into
mainfrom
fix/tui-session-expired
Sep 30, 2026
Merged

borjaperfra merged 1 commit into
mainfrom
fix/tui-session-expired

Conversation

@borjaperfra

Copy link
Copy Markdown
Contributor

Cuando el token de sesión caduca en el servidor sigue en session.json, y el panel decide si hay sesión mirando si hay token. Por eso, con una sesión caducada:

  • Home te daba por conectado y no ofrecía el login.
  • s no hacía nada, porque solo funciona cuando no hay sesión.
  • El resto de pestañas mostraba invalid session, que es lo que devuelve el servidor: 401 {"error":"invalid session"}, comprobado contra cloud-api.nan.builders.

Cambios

  • api.ErrSessionExpired: el cliente devuelve este error ante un 401 cuando la petición llevaba sesión. Sin sesión, o con el servidor caído (5xx), el error es el de siempre.
  • El panel borra la sesión rechazada, también de session.json, y conserva la API key y las herramientas configuradas. La pestaña dice "your session has expired — press s to sign in again", Home vuelve a mostrar el paso de login y s funciona.
  • Al abrir el panel se pregunta una vez a /auth/me. Si la sesión ha caducado se entra directamente al login, como en una máquina nueva. Sin red no hace nada.
  • Si caduca más tarde, solo lo avisa, porque el login captura todas las teclas.
  • Un rechazo que llega tarde no se lleva la sesión nueva: la respuesta lleva el token con el que se hizo la petición y se compara con el actual.
  • Cambiar de pestaña borra el error de la anterior. m.err es uno para todas las pestañas, y las que no cargan nada (Home, About, las que ya están en caché) no lo limpiaban. Al volver a Home se veía el error de la pestaña anterior.

Pruebas

  • internal/api: 401 con sesión da ErrSessionExpired; 401 sin sesión y 502 no.
  • internal/tui/session_test.go, cuatro casos:
    • se puede volver a entrar: se borra el token y se conserva la key, en memoria y en disco, Home ofrece el login y s funciona;
    • un rechazo que llega tarde no afecta a la sesión nueva;
    • abrir el panel con la sesión caducada lleva al login;
    • si caduca más tarde no se abre el login solo.
  • Los tests fallan si se quita el borrado del token o la limpieza de m.err.
  • go vet limpio y la suite completa en verde.
  • No probado a mano en el panel: habría que estropear un session.json real.

🤖 Generated with Claude Code

…ntar el error de otra pestaña

El token de sesion caduca en el servidor pero se queda en session.json, y el
panel decide si hay sesion mirando si hay token. Con una sesion caducada,
Home decia que estabas dentro, `s` no hacia nada porque ya habia sesion, y
el resto de pestañas contestaba `invalid session`: justo la tecla que lo
arregla era la que estaba apagada.

Ahora el cliente devuelve api.ErrSessionExpired ante un 401 con sesion, y el
panel, al recibirlo, suelta el token (tambien del disco) y se queda con la
API key y las herramientas, que siguen valiendo. La pestaña dice que pulses
s, y Home vuelve a ofrecer el login. Al abrir el panel pregunta una vez a
/auth/me: si la sesion ha caducado entra al login como en una maquina nueva;
sin red no dice nada. Si caduca mas tarde solo lo avisa, porque el login se
queda con todas las teclas. Un rechazo que llega despues de volver a entrar
no se lleva la sesion nueva.

Y aparte: m.err es uno para todas las pestañas y las que no cargan nada
(Home, About, una ya en cache) no lo limpiaban, asi que al volver a Home se
veia el error de la pestaña anterior en lugar de Home. maybeLoad lo limpia.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@borjaperfra
borjaperfra merged commit 9c6ac73 into main Sep 30, 2026
6 checks passed
@borjaperfra borjaperfra mentioned this pull request Sep 30, 2026
borjaperfra added a commit that referenced this pull request Sep 30, 2026
Entrega lo mergeado desde la 0.1.21:

- #35 los perfiles de Codex sin web_search ni la herramienta de
  sub-agentes, que dejaban vacio el turno en qwen3.8-flash y mimo; y la
  tabla de Costs con Opus 5.5, Sonnet 5.5, GPT-6.1 Sol y GPT-6 Luna
- #36 una sesion caducada deja volver a entrar, y Home deja de pintar el
  error de otra pestaña

Co-authored-by: borjaperfra <borjaperfra@users.noreply.github.com>
Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants