3.6 KiB
3.6 KiB
Phase 4: Notifications et i3bar - Context
Gathered: 2026-03-24 Status: Ready for planning
## Phase BoundaryNotifications desktop (dunst) quand une session passe de Working à Needs Input, mode focus avec timer pour supprimer temporairement les notifications, et widget i3bar affichant le statut des sessions en temps réel.
## Implementation DecisionsNotifications dunst
- D-01: Notifier uniquement sur transition Working → Needs Input. Pas de notif pour Idle → Needs Input ou Working → Idle.
- D-02: Pas de debounce en v1. Un event hook = une transition = une notification (si pas en mode focus).
- D-03: Envoyer les notifications via
notify-send(ou esiqveland/notify D-Bus). Claude décide l'approche.
Mode focus
- D-04: Timer uniquement :
vmux focus 30(30 min). Se désactive automatiquement après la durée. Pas de toggle on/off sans durée. - D-05: Le mode focus supprime les notifications dunst. Le widget i3bar reste visible.
Widget i3bar
- D-06: Format liste courte :
vmux: auth[!] portal[W] neia[I]. Les noms sont le dernier segment du cwd ou le label si défini.[!]= Needs Input,[W]= Working,[I]= Idle. - D-07: Quand aucune session n'attend :
vmux: all working (3). - D-08: Couleurs selon urgence : rouge si ≥1 session attend, vert sinon.
Claude's Discretion
- Protocole i3bar (i3status-rs, i3blocks, ou script custom)
- Implémentation des notifications (notify-send vs D-Bus natif)
- Fréquence de rafraîchissement du widget i3bar
- Stockage du timer focus (en mémoire dans le daemon, persisté ou non)
<canonical_refs>
Canonical References
Downstream agents MUST read these before planning or implementing.
Existing codebase (Phases 1-3)
daemon.go— Daemon struct avec poll loop, hook server, handlers. Les notifications se déclenchent dans la transition d'état.protocol.go— SessionInfo avec WaitType. Le widget i3bar consomme la liste des sessions.hook.go— processHookEvent, UpdateFromHook. Point d'intégration pour les notifications.display.go— DisplaySessionInfos. Pattern pour le formatage.main.go— CLI dispatch. Ajoutervmux focus <minutes>et potentiellementvmux i3bar.
</canonical_refs>
<code_context>
Existing Code Insights
Reusable Assets
SessionRegistry.List()— retourne toutes les sessions actives, utilisable pour le widget i3barprocessHookEventdans hook.go — point d'intégration pour déclencher les notificationsDaemon.handleConnection— pattern pour ajouter de nouvelles actions (focus)
Established Patterns
- Sous-commandes CLI via switch dans main.go
- Request/Response JSON sur Unix socket
- Goroutines daemon (acceptLoop, pollLoop, hookServerLoop)
Integration Points
- hook.go
processHookEventouUpdateFromHook— déclencher la notif après un changement Working → Needs Input - daemon.go — ajouter le state focus (timer) et le handler focus
- main.go — ajouter les sous-commandes
focuseti3bar
</code_context>
## Specific Ideas- Le widget i3bar peut être un script que i3blocks/i3bar appelle périodiquement. Le script query le daemon via le socket Unix et formate la sortie.
- Le mode focus est un timer dans le daemon : timestamp d'expiration. Si
time.Now()< expiration, pas de notification. - Les noms courts dans le widget i3bar : label si défini, sinon dernier segment du cwd (ex:
/home/pierre/Code/vibe/vmux→vmux).
None — discussion stayed within phase scope
Phase: 04-notifications-et-i3bar Context gathered: 2026-03-24