# PowerOn Frontend Architektur & Spezifikation ## 1. Funktionsumfang des Frontends Das Frontend der PowerOn-Plattform bietet folgende Kernfunktionen: - **Multi-Agent Chat-Workflow**: Interaktive Chat-Oberfläche für die Steuerung von Workflows mit mehreren KI-Agenten. - **Datei-Upload & -Verwaltung**: Nutzer können Dateien hochladen, anhängen, einsehen und herunterladen. - **Prompt-Verwaltung**: Verwaltung und Nutzung von Prompt-Vorlagen für wiederkehrende Aufgaben. - **Log- und Statusanzeige**: Fortschrittsanzeige, Fehler- und Statusmeldungen für Workflows. - **Benutzer- und Mandantenverwaltung**: Admin-Funktionen zur Verwaltung von Usern und Mandanten. - **Dynamische Datentabellen**: CRUD-Operationen (Create, Read, Update, Delete) für beliebige Entitäten über generische Tabellen und Formulare. - **Authentifizierung**: Login via klassischem Account oder Microsoft-Account. ## 2. Struktur des Frontends Das Frontend ist modular aufgebaut und besteht aus folgenden Hauptmodulen und -bereichen: - **js/main.js**: Einstiegspunkt, Initialisierung der App und Navigation. - **js/shared/**: Gemeinsame Module für State-Management, API-Calls, Navigation, Utilities, Authentifizierung, Formulargenerierung. - **globalState.js**: Zentrale State-Verwaltung und Navigation. - **apiCalls.js**: Konsolidierte Schnittstelle für Backend-Kommunikation. - **formGeneric.js**: Generisches Modul für CRUD-Tabellen und Formulare. - **msftCalls.js**: Microsoft-Authentifizierung und Status. - **navigation.js**: Dynamische Navigation und Menü-Rendering. - **utils.js**: Hilfsfunktionen (z.B. Toasts, UI-Feedback). - **js/modules/**: Feature-spezifische Module (z.B. prompts.js, users.js, files.js). - **public/htmlparts/**: HTML-Teile und Stylesheets für Layout, Navigation, Workflow, Formulare. - **public/docu/**: Dokumentation und Spezifikationen. ## 3. Kommunikation mit dem Backend Die gesamte Kommunikation mit dem Backend erfolgt konsolidiert über das Modul **apiCalls.js**. Dieses Modul bietet Funktionen für alle relevanten API-Endpunkte: - **Workflows**: Starten, Fortsetzen, Stoppen, Status, Logs, Nachrichten, Löschen - **Dateien**: Upload, Download, Löschen, Anhängen/Entfernen an Nachrichten - **Prompts**: CRUD-Operationen für Prompt-Vorlagen - **User/Mandanten**: Verwaltung von Benutzern und Mandanten - **Generische Entitäten**: CRUD für beliebige Datentabellen Alle API-Aufrufe sind asynchron und liefern Promises zurück. Fehlerbehandlung und Statusmeldungen werden zentral im Modul und über UI-Feedback (Toasts) gehandhabt. ## 4. Workflow-States (State Machine) Die States eines Workflows sind in den Dateien @doc_statemachine_backend.md und @doc_statemachine_frontend.md ausführlich beschrieben. Die wichtigsten States sind: - **null**: Kein Workflow aktiv - **running**: Workflow läuft, Polling aktiv - **completed**: Workflow abgeschlossen, UI bereit für neue Eingabe - **failed**: Fehler aufgetreten, UI zeigt Fehler und Retry-Option - **stopped**: Workflow wurde gestoppt, UI bietet Fortsetzen/Reset Transitions und State-Änderungen werden sowohl im Backend als auch im Frontend synchronisiert und über Polling-Mechanismen aktuell gehalten. ## 5. Administrierung von Usern, Mandanten und Datentabellen Die Administration erfolgt konsolidiert über das generische Modul **formGeneric.js**: - **User- und Mandantenverwaltung**: CRUD-Tabellen und Formulare für Benutzer und Mandanten, inklusive Rechteverwaltung. - **Datentabellen**: Beliebige Entitäten (z.B. Prompts, Dateien, Workflows) können als Tabelle mit Formularen verwaltet werden. - **Features**: - Tabellenansicht mit Filter, Sortierung, Pagination, Massenaktionen - Formulare für Erstellen/Bearbeiten mit dynamischer Feldgenerierung - Validierung und Transformation der Formulardaten - Externe Buttons für "+ Neuen ... erstellen" können einfach angebunden werden - Felder, die mit "_" beginnen oder Zeitstempel wie "created_at" werden automatisch ausgeblendet ## 6. Implementierung & Datenstruktur für das formGeneric Modul **Hinweis:** Die folgenden Beispiele und Erklärungen beziehen sich exemplarisch auf die Tabelle **"prompt"**. Das Prinzip ist jedoch für alle mit formGeneric verwalteten Entitäten identisch. ### Was macht das Modul formGeneric? Das Modul **formGeneric.js** stellt eine generische Lösung für die Verwaltung beliebiger Datentabellen im Frontend bereit. Es übernimmt: - Das Laden, Anzeigen, Erstellen, Bearbeiten und Löschen (CRUD) von Datensätzen - Die dynamische Generierung von Tabellen und Formularen anhand der gelieferten Datenstruktur - Die Filterung, Sortierung, Paginierung und Massenaktionen in der Tabellenansicht - Die Validierung und Transformation von Formulardaten (optional) - Die Anbindung externer Buttons (z.B. "+ Neuen Prompt erstellen") - Die automatische Ausblendung von Feldern, die mit "_" beginnen oder Zeitstempel wie "created_at" enthalten - Die Berücksichtigung von Berechtigungen: Felder wie `_hideEdit`, `_hideDelete`, `_hideView` steuern, ob die jeweiligen Aktionen für einen Datensatz im UI angezeigt werden - Die Rendering-Logik: Längere Felder wie "content" oder "description" werden als Textarea dargestellt, boolesche Felder als Checkbox, numerische Felder als Zahlenfeld - Die dynamische Anpassung an die Datenstruktur: Die Felder werden aus dem ersten Element der Datenliste abgeleitet ### Immer vorhandene/unterstützte Parameter (pro Datensatz) - **id**: Eindeutige ID des Datensatzes (wird immer angezeigt) - **_**-Felder: Interne Felder, die mit "_" beginnen, werden in Tabellen und Formularen ausgeblendet - **createdAt, updatedAt, created_at**: Zeitstempel werden automatisch ausgeblendet - **_hideEdit, _hideDelete, _hideView**: Steuern, ob die jeweiligen Aktionen (Bearbeiten, Löschen, Anzeigen) im UI für diesen Datensatz angezeigt werden - **Weitere Felder**: Werden dynamisch als Spalten und Formularfelder generiert, sofern sie nicht explizit ausgeschlossen sind ### Integration Das Modul wird wie folgt initialisiert: ```js window.genericEntityModule.init(globalState, { entityType: 'prompt', // oder 'user', 'mandate', ... apiEndpoint: { get: api.getPrompts, create: api.createPrompt, update: api.updatePrompt, delete: api.deletePrompt }, listContainerId: 'prompts-list', addButtonId: 'add-prompt-btn', transformFormData: function(formData) { /* optional */ }, onItemCreated: function(item) { /* optional */ }, onItemUpdated: function(item) { /* optional */ }, onItemDeleted: function(id) { /* optional */ } }); ``` ### Erwartete Datenstruktur (aus der Route/API) Das Modul erwartet, dass die API-Endpoints Objekte mit folgender Struktur liefern (Beispiel Prompt): ```json { "id": 123, "name": "Prompt-Name", "description": "Beschreibung", "content": "Prompt-Inhalt", "createdAt": "2024-05-11T12:34:56Z", "updatedAt": "2024-05-11T12:34:56Z", "_internal": "...", // wird ignoriert "_hideEdit": false, // steuert Bearbeiten-Button "_hideDelete": false, // steuert Löschen-Button "_hideView": false // steuert Anzeigen-Button } ``` - Felder mit "_" am Anfang sowie Zeitstempel wie "createdAt", "updatedAt", "created_at" werden automatisch in Tabellen und Formularen ausgeblendet. - Die Felder werden dynamisch aus dem ersten Element der Datenliste generiert. - Für längere Felder wie "content" oder "description" wird automatisch ein Textarea verwendet. - Checkboxen für boolesche Felder, Zahlenfelder für numerische Werte. - Die Sichtbarkeit von Aktionen (Bearbeiten, Löschen, Anzeigen) wird pro Datensatz über die _hide*-Felder gesteuert. ### Erweiterbarkeit - Das Modul kann für beliebige Entitäten verwendet werden, solange die API die Standard-CRUD-Methoden bereitstellt. - Zusätzliche Aktionen (z.B. "Vorschau", "Spezial-Buttons") können über die Option `getItemActions` ergänzt werden. - Die UI ist vollständig dynamisch und passt sich der gelieferten Datenstruktur an. --- ## 7. Workflow-UI: Darstellung und Datenfluss Das Workflow-Modul im Frontend bildet die zentrale Chat- und Prozessansicht ab. Die wichtigsten UI-Elemente und deren Datenquellen sind: - **Chatbereich**: Zeigt alle Nachrichten (user, agent, system) als Chat-Bubbles an. Die Nachrichten werden aus dem Backend über `/api/workflows/{workflowId}/messages` geladen und enthalten: - `content`: Text der Nachricht - `role`: user, assistant, agentName - `documents`: Anhänge (Dateien, die angezeigt oder heruntergeladen werden können) - `timestamp`, `status` (first, step, last) - **Logpanel**: Zeigt den Fortschritt und Status des Workflows an. Die Logs werden aus `/api/workflows/{workflowId}/logs` geladen und enthalten: - `message`: Logtext - `progress`: Fortschritt (0-100%) - `type`: info, warning, error - `agentName`, `timestamp` - **Prompt-Eingabe**: Textfeld für Nutzereingaben, Datei-Upload-Bereich, Start/Send-Button, Stop-Button - **Dateianhänge**: Hochgeladene Dateien werden im UI angezeigt und können entfernt werden. Die Metadaten kommen aus `/api/files/upload` und den Nachrichtenobjekten. - **Statusanzeige**: Zeigt den aktuellen Workflow-Status (running, completed, failed, stopped) an, basierend auf `/api/workflows/{workflowId}/status`. - **Polling-Mechanismus**: Das Frontend pollt periodisch die Status-, Log- und Nachrichtenendpunkte, um die UI aktuell zu halten. Neue Nachrichten und Logs werden automatisch ergänzt. - **Fehler- und Abschlusszustände**: Bei Fehlern oder Abschluss werden entsprechende UI-Elemente (z.B. Retry, Reset, neue Eingabe) angezeigt. **Datenfluss:** - Nach Start eines Workflows werden alle relevanten Daten (Nachrichten, Logs, Status) regelmäßig vom Backend geladen und im UI aktualisiert. - Die Zuordnung von Nachrichten, Logs und Dateien erfolgt über IDs und Statusfelder. - Die UI ist so gestaltet, dass sie den aktuellen Stand des Workflows und alle relevanten Aktionen für den Nutzer transparent darstellt. --- **Letzte Aktualisierung:** 2024-05-11