Files
talk/.superpowers/sdd/plan/task-4-brief.md
T

2.0 KiB

Task 4: talkd-Daemon + Queue + Mute

Blockiert durch: 02, 03. Liefert: Daemon-betriebene, serialisierte Ansagen mit persistentem Mute.

  • cmd/talkd: Daemon-Prozess; HTTP-Server auf 127.0.0.1:<port> (Port Default 7800, konfigurierbar TALK_PORT/config server.port); Endpunkte:
    • POST /speak — JSON {text, priority?, provider?, voice?, lang?, now?} → enqueued, Antwort 202 {id}; bei Mute: 202 {muted:true} (verworfen, dokumentiertes Verhalten).
    • GET /status — JSON: Queue-Länge, aktuelles Item, Mute-State, aktiver Provider, Version.
    • POST /cancel — bricht aktive Ansage ab + leert Queue, Antwort 200 {cancelled:n}.
    • POST /mute, POST /unmute — toggelt persistenten Mute-State (Datei mute im Config-Dir).
  • internal/queue: serialisierte Abarbeitung (eine Ansage gleichzeitig), Priorität (high > normal > low; gleiches Level: FIFO), now-Items springen vor; IDs (z. B. fortlaufend/zufällig kurz); konfigurierbares Rate-Limit existiert als Struktur, Limit-Wiring folgt Task 05 (Default unendlich in T04-Tests, dokumentiert).
  • CLI-Anbindung: talk say (und Default) erkennt Daemon via GET /status; läuft er: enqueue + sofort zurück (non-blocking Default); --wait pollt bis abgearbeitet; --now setzt now:true; mute/unmute/status/cancel werden Daemon-Aufrufe mit plain Output.
  • Degraded Mode: Daemon antwortet nicht → Lock-File talk.lock im Config-Dir, sequenzielles lokale Abspielen (best-effort; Kollision = warten), mute wird respektiert.
  • Tests an der Prozessgrenze (primäre Seam): talkd mit Fake-Provider-Endpunkt + audio.sink=null starten; per CLI/HTTP enqueue; assert: Serialisierung (2 schnell nacheinander → nacheinander abgespielt, an Fake+Sink beobachtbar), Priorität, Mute-Persistenz über Daemon-Restart, cancel, non-blocking-Verhalten (say kehrt vor Abspielende zurück), Degraded Mode (Daemon tot → Lock-File-Pfad).
  • Abnahme: alle Prozessgrenzen-Tests grün; talkd & + 3 parallele talk-Aufrufe → drei Ansagen nacheinander; talk mute → Daemon-Restart → weiter stumm.