docs(roadmap): Phase M — MiniApp-Plattform & Dashboard-Builder verankert (M1-M6, user-abgestimmt)

- M1 Universal-Registry (permission fail-closed + settings_schema, /api/v1/miniapps, Server-seitiger Permission-Filter, Lifecycle-Cleanup)
- M2 Dashboard-Backend (dashboards-Tabelle pro User, Tabs, Layout JSONB, RLS, Dual-Path)
- M3 Builder-Frontend (Edit-Modus, dnd-kit Grid, Resize, Tabs, Settings-Form aus settings_schema)
- M4 System-Rueckbau (StatCards->contacts, ActivityFeed->audit, System-Metrics->System-MiniApp, alte Widgets migrieren)
- M5 Plugin-MiniApps (contacts, tasks, calendar, wiki, dms, mail, knowledge, automation)
- M6 Weitere Hosts (AI-Agenten-Tool-Ausgabe, Windows, Wiki-Eval)
- Basis-Live-Bestand dokumentiert inkl. bewiesener Luecken (MiniAppContribution ohne permission, FrontendDashboardWidget ohne settings_schema)
- dashboard_widgets wird Alias von miniapps (ein Contribution-Typ, #359-Philosophie)
This commit is contained in:
Agent Zero
2026-08-29 23:06:35 +02:00
parent 559bba69a4
commit dfe46dff16
2 changed files with 69 additions and 0 deletions
+61
View File
@@ -1632,3 +1632,64 @@ Der AI Assistent ist ein paralleles System das die Kommunikation-Plattform dupli
**Abhängigkeiten:** L5 benötigt Phase F (Agents) und das Verkaufs-Modul (noch nicht gebaut).
**Verwandte Issues:** #359 (Import/Export Contribution — gleiche Plugin-Philosophie).
---
## Phase M — MiniApp-Plattform & Dashboard-Builder (geplant, user-abgestimmt 2026-08-29)
**Ziel:** MiniApps als universelles, teilbares UI-Baustein-System über alle Hosts (Chat, Dashboard, Windows, AI-Agenten). Dashboard-Builder mit Edit-Modus, Drag&Drop, Resize, Tabs und pro-Widget-Settings. System-Dashboard-Teile werden zurück in Plugins gebaut (Core wird zum reinen Host).
**Basis (Live-Bestand 2026-08-29):**
- `kommunikation/miniapp_registry.py` (92 Z., MiniAppDef mit register/unregister/unregister_plugin — inkl. Lifecycle-Cleanup)
- `MiniAppContribution` im Manifest-Schema (app_id, name, icon, description, render_schema) — **LÜCKE: kein permission-Feld**
- `FrontendDashboardWidget` im Manifest (id, component, col_span, row_span, permission) — **LÜCKE: kein settings_schema**
- `MiniAppBlock.tsx` als comm-Block-Typ (Chat-Host — fertig verdrahtet)
- `DashboardGrid`/`DashboardWidgetLoader` + 4 Widgets (RecentContacts, TasksSummary, CalendarUpcoming)
- Dashboard.tsx (170 Z.) mit hardcodierten StatCards (via contacts-Contract `get_counts`), ActivityFeed (via Audit-Log), System-Metrics (Admin-only) — **Rückbau-Bestand**
- `app/routes/dashboard.py` listet manifest `dashboard_widgets` (bereits permission-agnostisch, nur `dashboard:read` auf Endpoint-Ebene)
- @dnd-kit (core/sortable/utilities) bereits im Projekt (Referenz: SettingsMenuOrder, Dokumente-BlockEditor)
- windowStore (Window-Manager) existiert für spätere Hosts
**Architektur-Entscheidung (user-bestiätigt):** EINE Universal-Registry statt zweier paralleler Systeme — `dashboard_widgets` wird Alias von `miniapps`; jedes Plugin/System registriert MiniApps via Contribution (gleiches Muster wie settings_pages/print document blocks, #359-Philosophie). Ein Host-Set: Chat-Block (fertig), Dashboard (neu), Windows (M6), AI-Agenten-Tool-Ausgabe (M6).
### M1 — Universal-MiniApp-Registry (2-3 Tage)
- miniapp_registry aus kommunikation-Plugin in Plugin-Layer heben (Plattform-Konzept, kommunikation behält Chat-Hosting)
- MiniAppDef/MiniAppContribution erweitern: `permission` (Pflicht-Feld, fail-closed), `settings_schema` (generisches Settings-Form), `col_span`/`row_span`, `min_size`
- `dashboard_widgets` (Manifest) → Alias von `miniapps` (Rückwärtskompatibilität, ein Contribution-Typ)
- `/api/v1/miniapps`-Endpoint: Registry-Listing **server-seitig permission-gefiltert** (nur MiniApps sichtbar, für die der User die Permission hat)
- Host-Rendering prüft Permission zusätzlich beim Render (Defense-in-Depth wie Plugin-Routen)
- Lifecycle: Plugin-Deaktivierung → unregister_plugin → Widgets verschwinden aus allen Hosts
### M2 — Dashboard-Backend (2-3 Tage)
- `dashboards`-Tabelle: pro User mehrere Dashboards, Tabs, Layout als JSONB (`[{tab, widgets: [{app_id, settings, col, row, span}]}]`), RLS fail-closed + crm_api-Policy (0084-Muster)
- CRUD-Endpoints (list/create/update/delete + set-default), Tenant-Scoping, Owner-only oder Admin
- Dual-Path: Plugin-SQL idempotent + Alembic-Konvergenz (Gate-B-Muster wie 0143)
- Default-Dashboard-Seed beim ersten Aufruf (aus Registrierungs-Order abgeleitet)
### M3 — Dashboard-Builder-Frontend (3-5 Tage)
- Edit-Modus als Modus-Schalter: aktiv → Widgets hinzufügen/entfernen, Größe ändern (col/row-span), Einstellungen; beenden → persistiertes Layout, reine Ansicht
- Drag&Drop-Grid (@dnd-kit, Referenz BlockEditor/SettingsMenuOrder): Platzierung + Umsortieren
- Widget-Palette: verfügbare MiniApps (aus `/api/v1/miniapps`, permission-gefiltert), Suche/Kategorie
- Generisches Settings-Form pro Widget aus `settings_schema` (gleiche Philosophie wie Block-Config-Panels beim Dokumente-Editor)
- Tabs: mehrere Dashboards pro User, Tab-Verwaltung im Edit-Modus
- Dashboard.tsx wird zum reinen Host (keine hardcodierten Inhalte mehr)
### M4 — System-Rückbau (2-3 Tage)
- StatCards (Firmen-/Kontakt-Zähler via contacts-Contract) → contacts-Plugin-MiniApp
- Aktiv-diese-Woche/Neu-diesen-Monat + ActivityFeed (Audit-Log) → audit/auditlog-MiniApp
- System-Metrics-Block (DB/Redis/Worker/LLM-Kosten, Admin) → System-MiniApp mit `settings:read`-Permission
- Bestehende Dashboard-Widgets (RecentContacts, TasksSummary, CalendarUpcoming) zu MiniApps migrieren (gleiches Format, dann Chat-fähig)
### M5 — Plugin-MiniApps (2-3 Tage)
- contacts, tasks, calendar, wiki, dms, mail, knowledge (Graph-RAG), automation liefern jeweils MiniApps via Manifest-Contribution
- Jede MiniApp automatisch überall verfügbar: Chat senden + Dashboard platzieren
- Permission je MiniApp passend zum Owner-Modul (z.B. `tasks:read` für TaskSummary)
### M6 — Weitere Hosts (2-3 Tage)
- AI-Agenten-Tool: Agent kann MiniApp als Ausgabe-Block in Chat-Antwort einbetten (miniapp-Block-Typ existiert, Tool-Registry erweitern)
- Windows (windowStore): MiniApp per Klick/Expand in eigenem Fenster öffnen
- Evaluiert: Wiki-Einbettung (BlockRenderer-Muster) — nur wenn Bedarf bleibt
**Abhängigkeiten:** M3 benötigt M1+M2. M4/M5 nach M3 (Host muss stehen). M6 zuletzt.
**Verwandte Phasen/Issues:** Phase L (Gleiche Contribution-Philosophie), #359 (Contract-Muster), Phase F (Agenten für M6).