72 lines
3 KiB
Markdown
72 lines
3 KiB
Markdown
---
|
|
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 Channel nicht in DB
|
|
- **`🗄️ Archiv`** — Kein DB-Eintrag, kein Workspace — Channel existiert aber ist verwaist
|
|
|
|
### 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 → **inaktiv** (in Kategorie verschieben)
|
|
- 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/<name>`) 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
|