10 KiB
WebUI als einzige Oberfläche — und Englisch komplett
Auftrag für einen eigenen Agenten. Beschlossen am 2026-10-02 (Mensch). Roadmap-Eintrag im Deploymentcenter: #764 (Themenbereich UI). Teil davon: #661 (Englisch als Hauptsprache).
Lies das ganz, bevor du die erste Datei anfasst. Die Stufen bauen aufeinander auf, und mehrere Grenzen in Abschnitt 2 sind keine Stilfragen, sondern Datenverlust oder Sicherheitslücken, wenn man sie übersieht.
1 — Worum es geht
- Eine Oberfläche statt zwei. Gepflegt wird nur noch die WebUI
(
src/ClawdDotNet.Manager.Web/wwwroot/), getragen vom Instanzmanager. Die Avalonia-Fenster insrc/ClawdDotNet.Desktop/Viewsverschwinden. Übrig bleibt eine Hülle, die den Manager startet und die WebUI zeigt. - Englisch komplett. Seit #661 (2026-09-19) entsteht Neues auf Englisch, Texte kommen aus
Sprachpaketen (
wwwroot/i18n/en.json,de.json). Der Bestand ist noch gemischt. Dieser Auftrag räumt ihn auf: Bezeichner, Kommentare und Oberflächentexte auf Englisch, jeder sichtbare Text über einen Sprachschlüssel, Deutsch nur noch als Sprachpaket.
Warum: Jede Funktion zweimal zu bauen kostet, die Desktop-Oberfläche hat keine Testabdeckung, und der Zielbetrieb (Linux, 24/7) läuft ohnehin über Manager und WebUI. Seit 0.1.17 kennt die Desktop-Oberfläche Einheiten, Stichproben, Abstimmungen, Vorlagen, Trigger, MCP-Server und Automatisierung nicht mehr — die Lücke ist schon da.
2 — Was nicht passieren darf
| Grenze | Warum |
|---|---|
Die Programmdatei ClawdDotNet bleibt. Program.cs, CommandLine.cs, HeadlessRun.cs, McpBridgeRun.cs bleiben lauffähig |
Sie ist der Instanzprozess (--headless --managed --instance …, so startet der Manager jede Instanz) und die MCP-Brücke. Fällt sie weg, startet keine Instanz mehr |
| Gespeicherte Namen nicht umbenennen — ohne Migration und Test mit einer alten Datei | Sonst sind Einstellungen, Rechte oder Datenbanken nach dem Update leer oder kaputt. Siehe Abschnitt 6 |
| Begründungskommentare übersetzen, nie löschen | Sie erklären, warum etwas so ist (oft ein Vorfall). Ein früherer Umbau durch ein Flash-Modell hat sie stillschweigend entfernt. Übersetzen: ja. Kürzen auf „was der Code tut“: nein |
| Texte, die ein Modell liest, nicht nebenbei umformulieren | Werkzeugbeschreibungen, ToolResult-Meldungen, Rahmen um Fremdinhalt (UntrustedContent), Systemhinweise — das sind Prompts. Übersetzen ändert das Verhalten der Agenten. Eigene Stufe, eigener Test auf der VM (Stufe 4d) |
| Sicherheitsstellen nicht anfassen, außer in Stufe 2 und nur wie dort beschrieben | AccessToken.cs, TokenGate.cs, McpTransport.cs, alles unter Security/, ConfigSecrets, Lizenzprüfung |
Kein innerHTML, kein Paketmanager, keine neuen CDN-Abhängigkeiten in der WebUI |
Siehe WebUI-Leitfaden |
Radius 0, App-Akzent var(--accent), keine zugeklappten Ebenen |
Hausstil, Entscheidung 2026-09-24 |
| Nur pushen, wenn alle vier Suiten grün sind — unter Windows und Linux | Siehe Teststrategie; Linux auf der Test-VM |
3 — Die Stufen
Jede Stufe ist ein eigener Branch und ein eigener Merge. Nach jeder Stufe: Suiten grün,
Kommentar am Roadmap-Eintrag (dc_comment), dann die nächste.
Stufe 0 — Bestandsaufnahme (Flash: ja)
Lege eine Tabelle an (in dieser Datei, Abschnitt 7): jede Funktion der Desktop-Oberfläche
und ob die WebUI sie hat. Quelle sind die Fenster in src/ClawdDotNet.Desktop/Views:
AddAgentWindow, AddJobWindow, AddServiceWindow, AgentChatsPageView, AgentsPageView,
BackupPageView, ChatPageView, InfoPageView, InstancePickerWindow, LicenseWindow,
LogPageView, MainWindow, RestoreBackupWindow, SettingsPageView, TasksPageView,
TextEditorWindow, TokenUsagePageView, ToolSettingsView.
Verdächtig, nur im Desktop zu stehen — besonders genau prüfen:
- Erstinstallation und Lizenz (
LicenseWindow) - Wiederherstellungs-Passphrase des Schlüsselbunds (im Start-Log steht die Warnung „kein Wiederherstellungsfach“ — wo setzt man sie heute?)
- Instanz anlegen / wählen (
InstancePickerWindow) - Sicherung zurückspielen (
RestoreBackupWindow) - Dateiauswahl-Dialoge, Texteditor für Identity/Soul (
TextEditorWindow)
Ergebnis: Liste „fehlt in der WebUI“. Nichts bauen in dieser Stufe.
Stufe 1 — Lücken der WebUI schließen (Flash: ja für reine Ansichten, nein sobald C# nötig ist)
Für jede Zeile aus Stufe 0 mit „fehlt“: zuerst prüfen, ob die API den Endpunkt hat.
- Hat sie ihn: Ansicht bauen, Texte in beide Sprachpakete.
- Hat sie ihn nicht: Endpunkt in
src/ClawdDotNet.Web/Endpoints(Instanz) odersrc/ClawdDotNet.Manager.Web/Endpoints.cs(Manager), Fachlogik inClawdDotNet.App(nie im Endpunkt), mit Test intests/ClawdDotNet.Web.TestsoderApp.Tests. Lizenz und Schlüsselbund sind Sicherheitsstellen → starkes Modell.
Stufe 2 — Die Hülle (Flash: nein)
Empfehlung (vom Menschen noch zu bestätigen, bevor du anfängst — frage im Roadmap-Eintrag):
Starter mit Systembrowser statt eingebettetem Browser.
- Startet den Instanzmanager, wenn er nicht läuft (unter Linux ist das der systemd-Dienst
clawddotnet-manager.service— nicht doppelt starten). - Öffnet die WebUI im Standardbrowser, angemeldet über einen Einmal-Link: der Manager erzeugt auf Anfrage über seinen lokalen Socket (nicht über TCP) einen Zufallswert, gültig einmal und höchstens 60 Sekunden; die WebUI tauscht ihn gegen das Sitzungstoken. Das Token selbst steht nie in einer Adresse.
- Taskleistensymbol mit Zustand (läuft / gestoppt / Fehler) und „WebUI öffnen“.
- Begründung: keine neue Abhängigkeit (ein eingebetteter Browser braucht unter Linux WebKitGTK als Systempaket), am wenigsten Code.
Der Einmal-Link ist eine neue Anmeldeart — Test für: zweimal benutzt, zu spät benutzt, über TCP statt Socket angefordert. Alle drei müssen scheitern.
Stufe 3 — Avalonia-Fenster entfernen (Flash: mit Vorsicht)
Views/,Controls/,Converters/, ViewModels der Fenster,App.axaml— weg.- Avalonia-Pakete aus der
.csproj, soweit die Hülle sie nicht braucht. Program.cs: ohne--headless/--managed/MCP-Brücke startet künftig die Hülle.deploy/publish.pyund das Paket prüfen: Was fällt weg, was muss dabei bleiben? Ein Probepaket mit--dry-runbauen und auf der VM--headlessstarten.docs/Oberflaechen-Leitfaden.md→ nachdocs/archiv/, Verweise inCLAUDE.mdanpassen.
Stufe 4 — Englisch komplett
| Teil | Was | Flash? |
|---|---|---|
| 4a | WebUI: jeder sichtbare Text über t("…"), Schlüssel in en.json und de.json. Heute stehen noch Umlaut-Texte direkt in .js-Dateien |
ja |
| 4b | WebUI: deutsche Bezeichner in JS (erstelleElement, zeigeMeldung, lade …, 28 Dateien) und CSS-Klassen (karte, schaltflaeche, gedaempft …, ~49) auf Englisch. Mechanisch, aber groß: eine Umbenennung je Commit, danach jede Ansicht im Browser öffnen |
ja, in kleinen Schritten |
| 4c | C#: Kommentare und nicht gespeicherte Bezeichner (Klassen, Methoden, Variablen) in ~167 Dateien. StagingAktion, Vorgabe, Rahmen, Werkzeugrechte … Öffentliche Namen ändern bricht Aufrufer — nach jedem Schritt bauen und testen |
ja, dateiweise |
| 4d | C#: Texte, die Modelle lesen — Werkzeugbeschreibungen, Fehlermeldungen an Agenten, Systemhinweise (~23 Werkzeugdateien, ~20 Meldungen). Danach eine Nacht Testinstanz auf der VM und Audit-Vergleich: arbeiten die Agenten wie vorher? | nein |
| 4e | API-Pfade: /api/verwaltung, /api/instanz, /instanzen, /hooks/{instanz} → englisch. Das bricht Absender von außen (n8n, Claude Code über MCP). Alte Pfade eine Version lang als Umleitung behalten |
nein |
Prüfung der Sprachpakete nach jeder Stufe:
python -c "import json;e=json.load(open('src/ClawdDotNet.Manager.Web/wwwroot/i18n/en.json',encoding='utf-8'));d=json.load(open('src/ClawdDotNet.Manager.Web/wwwroot/i18n/de.json',encoding='utf-8'));print(set(e)^set(d) or 'gleich')"
Besser: als Test in tests/ClawdDotNet.Web.Tests anlegen, dann prüft ihn jeder Lauf.
4 — Wer was macht
Der Mensch fragte, ob ein Gemini Flash genügt. Antwort: für etwa zwei Drittel ja — für Stufe 0, 1 (reine Ansichten), 3 und 4a–4c, wenn diese Datei mitgegeben wird und jede Stufe vor dem Merge von einem starken Modell gegengelesen wird. Nicht für Stufe 2 (neue Anmeldeart), 4d (Prompts) und 4e (Pfade nach außen) und nicht für Lizenz/Schlüsselbund in Stufe 1.
Gegenlesen heißt mindestens: git diff --stat auf unerwartet große Löschungen prüfen; nach
gelöschten Kommentarblöcken suchen (git diff | grep '^-\s*//'); Sprachpakete gleich; alle
vier Suiten grün auf Windows und Linux.
5 — Fertig ist es, wenn
src/ClawdDotNet.Desktopkeine Avalonia-Fenster mehr enthält und die Hülle unter Windows und Linux die WebUI angemeldet öffnet- jede Funktion aus der Tabelle in Abschnitt 7 in der WebUI erreichbar ist
grep -rn "[äöüÄÖÜß]" src --include=*.cs --include=*.js --include=*.cssnur noch Treffer ini18n/de.json-Inhalten, Testdaten und Kommentaren mit Zitaten liefert- die Testinstanz auf der VM eine Nacht mit der neuen Fassung läuft und das Audit keine neuen Fehlerbilder zeigt
6 — Gespeicherte Namen: nicht umbenennen
Diese Namen stehen in Dateien und Datenbanken bestehender Installationen. Eine Umbenennung braucht eine Migration (alt lesen, neu schreiben) und einen Test mit einer alten Datei. Im Zweifel: deutsch lassen und im Code mit einem englischen Namen kapseln.
| Wo | Beispiele |
|---|---|
Werkzeugeinstellungen der Agenten (AgentSettings.json, Tools.<Name>) |
erlaubt, verboten (Datenbank-/Werkzeugrechte), sharedAccessLevel, … |
Tabellen in state.db (SqliteStorage.cs) |
Dauerfreigaben, Spalten aller Tabellen |
Audit-Einträge, Source-Werte, DecidedBy-Präfixe |
werden gelesen und ausgewertet |
| Aufgabendateien (Frontmatter), Taskboard-Felder | onlyWhenMarketOpen, require_approval … |
manager.json, InstanceSettings.json (PascalCase-Altbestand) |
Schlüssel exakt so lassen |
| Sprachschlüssel selbst | sind schon englisch — gut so |
7 — Bestandsaufnahme (Stufe 0 füllt das aus)
| Desktop-Funktion | Fenster | In der WebUI? | Endpunkt vorhanden? | Bemerkung |
|---|---|---|---|---|