disclaw/tasks/DIS-154.md
Nick Tabeling 73cf627fb9
Some checks failed
CI / build-and-test (ubuntu-latest) (pull_request) Has been cancelled
CI / build-and-test (windows-latest) (pull_request) Has been cancelled
CI / lint (pull_request) Has been cancelled
chore: mark DIS-154 done
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-13 10:35:53 +02:00

4.1 KiB

id status phase priority labels branch assignee started pr merged
DIS-154 done 1.5 p1
phase:1.5
type:feat
priority: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 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 <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 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).

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)
  • 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 test grü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.