feat(shuma): barra de ventanas en el modo launcher

Fase 3b: la barra del shell muestra ahora las ventanas abiertas del
escritorio y deja saltar entre ellas.

- `shuma-shell` depende de `mirada-brain` para hablar el protocolo de
  control de carmen.
- `start_loop` sondea el socket de control cada ~1 s con `ListWindows`
  — la llamada bloquea un instante, pero en el executor de fondo, no en
  el hilo de la UI. El resultado se guarda en `Shell.windows_bar`.
- `render_launcher` dibuja una cajita por ventana entre el input y el
  estado: la enfocada resaltada, las demás en gris. Un clic envía
  `Do(FocusWindow(id))` y refleja el cambio al instante (el sondeo lo
  confirma en el siguiente ciclo).

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
sergio
2026-05-21 06:21:06 +00:00
parent b17ac8c67a
commit a9e880240d
5 changed files with 96 additions and 6 deletions
+5 -3
View File
@@ -241,14 +241,16 @@ Cerebro: **autónomo** (`Desktop` embebido) o **enlazado** (`MIRADA_SOCKET`
| ------------------ | ---------------------------------------------------------- |
| puntero en `winit` | ratón en el backend anidado (hoy sólo el backend DRM) |
| `mirada-input` | repetición de teclas, gestos; hotplug de monitores |
| `shuma-shell` | modo launcher: falta la barra de ventanas y el cajón |
| `shuma-shell` | modo launcher: falta el cajón de resultados y la config |
| `wlr-layer-shell` | barras externas tipo waybar, fondos, notificaciones |
| `mirada-sandbox` | aislamiento de clientes sobre `arje-incarnate` |
`shuma-shell --launcher` ya corre como el shell de carmen: abre una
ventana sin barra de título con `app_id = "carmen.shell"` (el acople la
reconoce) y dibuja una barra compacta — glifo, la línea de comandos de
`shuma-line` y el estado del último comando. Falta la barra de ventanas
abiertas (vía el socket de control) y el cajón de resultados.
`shuma-line`, la **barra de ventanas abiertas** (las consulta por el
socket de control de carmen con `ListWindows`, un clic enfoca con
`FocusWindow`) y el estado del último comando. Falta el cajón de
resultados expandible y la config para esconder/reubicar.
CRIU (congelar/restaurar ventanas) queda anotado como futuro.