4.1 KiB
4.1 KiB
| id | status | phase | priority | labels | branch | assignee | started | pr | merged | |||
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| DIS-154 | done | 1.5 | p1 |
|
refinement/discord-rich-features | developer-agent | 2026-04-13 | #64 | 2026-04-13 |
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
runAgentfertig ist (kein Overshoot)
3. Lange Antworten als Datei-Attachment (src/discord/send-response.ts)
- Neue Funktion
sendResponse(channel, text, message)ersetzt direkteschannel.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üftmessage.attachments- Dateien werden in
<workspace>/.disclaw-inbox/<timestamp>-<filename>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 testgrün
Dateien (erwartet)
src/discord/send-response.tssrc/discord/attachment-inbox.tssrc/router.ts(Reactions, Typing, Input-Limit)tests/unit/send-response.test.tstests/unit/attachment-inbox.test.ts
Abhängigkeiten
Phase 1 abgeschlossen (splitForDiscord, RunResult).
6. Agent sendet Dateien zurück (src/discord/send-response.ts)
- Agent schreibt
[ATTACH: pfad/zur/datei.ext]in seine Antwort - Bot parst alle
[ATTACH: ...]-Marker heraus, entfernt sie aus dem Text - Sicherheitscheck vor dem Senden:
- Datei muss existieren und lesbar sein (
fs.accessSync(path, fs.constants.R_OK)) - Pfad darf nicht außerhalb des Workspace liegen (Path-Traversal-Schutz via
path.resolve) - Max. Dateigröße: 8 MB (Discord-Limit für reguläre Bots)
- Datei muss existieren und lesbar sein (
- Erlaubte Pfade: relativ zum Workspace-Root oder absolut innerhalb des Workspace
- Dateien werden als Discord-Attachments gesendet, verbleibender Text normal
- CLAUDE.md-Template informiert den Agent über die
[ATTACH: ...]-Konvention
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 - Agent kann mit
[ATTACH: pfad]Dateien zurücksenden - Path-Traversal-Schutz: nur Dateien im Workspace erlaubt
- Dateien > 8 MB → Fehlermeldung an Channel statt Absturz
- CLAUDE.md-Template enthält Hinweis auf
[ATTACH: ...] - Unit-Tests:
send-response,attachment-inbox npm run build && npm testgrün
Hinweis
Reactions, Embeds, Threads und Polls (voller SF-004-Scope) können in Folge-Issues ausgebaut werden. Dieses Issue implementiert den Kern-QoL-Teil.