--- id: DIS-154 status: in-progress phase: 1.5 priority: p1 labels: [phase:1.5, type:feat, priority:p1] branch: refinement/discord-rich-features assignee: developer-agent started: 2026-04-13 pr: null merged: null --- # DIS-154: Discord Rich Features für Agents (Reactions, Embeds, Dateien) ## Ziel Agents nutzen Discord vollständiger: Status-Reactions, strukturierte Embeds für lange Antworten, Datei-Uploads für Code/Outputs, und Datei-Empfang aus dem Channel. Vorgezogen aus Phase 3 / SF-004. ## Kontext Aktuell senden Agents nur Plaintext. Discord bietet viel mehr: → `docs/ideas/future-features.md` SF-004 → `docs/development-plan.md` Phase 3 ## Scope ### 1. Status-Reactions (`src/router.ts`) - `👀` sobald Nachricht in Queue eingereiht wird (sofort, nicht blockierend) - `✅` nach erfolgreicher Antwort - `❌` bei Fehler (timeout, cli-error) - Alle `.catch(() => {})` — nie blockierend ### 2. Typing-Refresh-Intervall - Aktuell: 5s Intervall — auf **8s** erhöhen (Discord-Timeout ist 10s) - Typing endet exakt wenn `runAgent` fertig ist (kein Overshoot) ### 3. Lange Antworten als Datei-Attachment (`src/discord/send-response.ts`) - Neue Funktion `sendResponse(channel, text, message)` ersetzt direktes `channel.send()` - Wenn Text > **4000 Zeichen**: als `.md`-Attachment senden statt mehrerer Chunks - Unter 4000 Zeichen: bisheriges Split-Verhalten (`splitForDiscord`) ### 4. Eingehende Dateien verarbeiten (`src/discord/attachment-inbox.ts`) - `messageCreate`-Handler prüft `message.attachments` - Dateien werden in `/.disclaw-inbox/-` gespeichert - Im Prompt-Kontext wird ein Hinweis auf die Datei eingefügt: `[Datei verfügbar: .disclaw-inbox/1234-example.py]` - TTL-Cleanup: Dateien älter als 24h werden beim nächsten Start gelöscht ### 5. Input-Limit - Nachrichten > **4000 Zeichen** → `⚠️`-Reaction + kurze Hinweis-Nachricht - Agent wird nicht aufgerufen ## Definition of Done - [ ] Reactions `👀` / `✅` / `❌` werden korrekt gesetzt - [ ] Typing-Intervall 8s, endet mit Agent-Antwort - [ ] Antworten > 4000 Zeichen kommen als `.md`-Attachment - [ ] Eingehende Dateien landen im `.disclaw-inbox/`-Verzeichnis - [ ] Input > 4000 Zeichen → `⚠️` + Hinweis, kein Agent-Aufruf - [ ] Unit-Tests: `send-response`, `attachment-inbox` - [ ] `npm run build && npm test` grün ## Dateien (erwartet) - `src/discord/send-response.ts` - `src/discord/attachment-inbox.ts` - `src/router.ts` (Reactions, Typing, Input-Limit) - `tests/unit/send-response.test.ts` - `tests/unit/attachment-inbox.test.ts` ## Abhängigkeiten Phase 1 abgeschlossen (splitForDiscord, RunResult). ## Hinweis Reactions, Embeds, Threads und Polls (voller SF-004-Scope) können in Folge-Issues ausgebaut werden. Dieses Issue implementiert den Kern-QoL-Teil.