--- id: DIS-151 status: ready phase: 1.5 priority: p1 labels: [phase:1.5, type:feat, priority:p1] branch: refinement/channel-categories assignee: null started: null pr: null merged: null --- # DIS-151: Channel-Kategorisierung (aktiv / inaktiv / archiv) + Lifecycle-Management ## Ziel Discord-Channels werden beim Start von DisClaw automatisch in Kategorien eingeordnet. Verwaiste Workspaces und Channels werden aufgeräumt. Live-Events halten den Zustand aktuell. ## Kontext Beim Betrieb entstehen Inkonsistenzen: Channels ohne Workspace, Workspaces ohne Channel, oder Agents die aus der DB entfernt wurden aber noch einen Workspace haben. → `docs/ideas/known-issues.md` KI-002, KI-002.1 ## Scope ### Kategorien (werden beim ersten Start automatisch angelegt falls nicht vorhanden) - **`🟢 Aktive Agents`** — Channel ist in DB, Workspace existiert unter `~/.disclaw/workspaces/` - **`🔴 Inaktive Agents`** — Workspace existiert, aber kein Channel in Discord (oder Channel nicht in DB) - **`🗄️ Archiv`** — Kein DB-Eintrag, kein Workspace — Channel existiert aber ist unbekannt ### Startup-Reconciliation (`src/lifecycle/reconcile.ts`) Beim Start einmalig ausführen, nach DB-Init und Bot-Login: 1. **Alle Channels des Servers scannen** — welche sind in welcher Kategorie? 2. **DB-Einträge abgleichen** — für jeden Workspace-Eintrag in DB prüfen ob Channel noch existiert 3. **Workspace-Verzeichnisse scannen** — alle Verzeichnisse unter `workspaces_root` mit `agent.yaml` 4. **Einordnung**: - DB-Eintrag + Workspace vorhanden + Channel existiert → **aktiv** (Kategorie + Channel-Name) - Workspace vorhanden, aber kein DB-Eintrag / kein Channel → **inaktiv** (Kategorie verschieben oder Channel neu anlegen) - Weder DB noch Workspace, aber Channel existiert → **archiv** (Channel in Archiv-Kategorie verschieben) - Workspace existiert, kein Channel in aktiv/inaktiv/archiv → Workspace-Verzeichnis löschen (Cleanup) ### Live-Event: `channelDelete` - Wenn ein Agent-Channel gelöscht wird: Workspace-Verzeichnis (`~/.disclaw/workspaces/`) ebenfalls löschen, DB-Eintrag entfernen - Wenn Management-Channel gelöscht wird: automatisch neu anlegen (KI-002.1) - Kategorie-Channels (aktiv/inaktiv/archiv) werden bei Löschung neu angelegt ### `src/bot.ts` / `src/index.ts` - `reconcileChannels(guild, db, config)` nach Bot-Ready aufrufen - `channelDelete`-Event-Handler registrieren ## Definition of Done - [ ] Kategorien werden beim Start automatisch angelegt (falls nicht vorhanden) - [ ] Channels werden korrekt eingeordnet (aktiv/inaktiv/archiv) - [ ] Workspace-Verzeichnisse ohne Channel werden beim Start gelöscht - [ ] `channelDelete`-Event: Workspace + DB-Eintrag werden entfernt - [ ] Management-Channel-Löschung: wird neu angelegt - [ ] Unit-Test `tests/unit/reconcile.test.ts`: Mock-Guild, Mock-DB — alle Reconcile-Cases - [ ] `npm run build && npm test` grün ## Dateien (erwartet) - `src/lifecycle/reconcile.ts` - `src/bot.ts` - `src/index.ts` - `tests/unit/reconcile.test.ts` ## Abhängigkeiten Phase 0 + Phase 1 abgeschlossen. ## Spec → `docs/ideas/known-issues.md` KI-002, KI-002.1