Add web terminal, git credentials, OpenSCAD, review loops, automations

- Web terminal (PTY over WebSocket, xterm.js, sandboxed, reattach with replay)
- Per-user git credentials and commit identity (credential store in the user's home)
- OpenSCAD tool (STL/3MF + preview renders, bounding box) and cad skill; 3D model card
- Craft phase inferred from tool activity when the agent does not report it
- Configurable review loop per mode (rounds, reviewer model, criteria)
- Delete config and Markdown agents from the agent editor
- Automations: cron-scheduled agents from Markdown job files, schedule tool, page
- change_directory tool (only on the user's request)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
Richard ZinkandClaude Opus 5.5 committed 2026-11-08 22:00:38 +01:00
1 parent a0d0e707f2
commit df1924b0a1
41 files changed
+2809 -34

No files matched your search

+57
View File
@@ -278,6 +278,63 @@ export const de: Messages = {
"rename.title": "Session umbenennen",
"rename.generateWith": "Namen vorschlagen mit",
"rename.generate": "Generieren",
"nav.terminal": "Terminal",
"terminal.new": "Neues Terminal",
"terminal.close": "Terminal schließen",
"terminal.here": "Terminal in diesem Ordner öffnen",
"terminal.connecting": "Verbinde…",
"terminal.reconnecting": "Verbindung verloren – verbinde neu…",
"terminal.keys": "Zusatztasten",
"gitcred.title": "Git",
"gitcred.hint": "Werden von deinen Agenten, dem Terminal und dem Git-Client zum Pullen und Pushen verwendet (z. B. Access-Tokens von Gitea/GitHub/GitLab). Liegen in deinem Home-Ordner als Git-Credential-Store – nur deine Sessions können sie nutzen.",
"gitcred.name": "Name für Commits",
"gitcred.email": "E-Mail für Commits",
"gitcred.credentials": "Zugangsdaten",
"gitcred.none": "Noch keine Zugangsdaten.",
"gitcred.host": "Host",
"gitcred.user": "Benutzername",
"gitcred.token": "Passwort oder Token",
"gitcred.add": "Host hinzufügen",
"gitcred.saved": "Git-Einstellungen gespeichert",
"wizard.task.cad": "3D-Modell zum Drucken",
"wizard.task.cadDesc": "Aus einer Beschreibung oder einer Handskizze – OpenSCAD, STL/3MF",
"wizard.placeholder.cad": "Beschreibe das Teil und seine Maße – oder hänge ein Foto deiner Skizze an (mit Maßen).",
"wizard.idea.cadBox": "Eine Box mit Schnappdeckel, Innenmaß 80 × 50 × 30 mm",
"wizard.idea.cadBracket": "Eine Wandhalterung für ein 25-mm-Rohr mit zwei M4-Schraublöchern",
"activity.reviewing": "Ergebnis wird geprüft (Runde {round})…",
"chat.reviewRound": "Review {round}: Änderungen nötig",
"agents.refine": "Review-Schleife",
"agents.refineRounds": "Review-Runden pro Aufgabe",
"agents.refineOff": "0 = aus",
"agents.refineModel": "Prüfer-Modell",
"agents.refineCriteria": "Prüfkriterien",
"agents.refineCriteriaHint": "Leer = Standardkriterien dieses Modus. Nach jeder abgeschlossenen Aufgabe prüft ein Reviewer das Ergebnis gegen deine Anfrage; bei Befunden arbeitet der Agent weiter – höchstens so viele Runden.",
"agents.refineShort": "Review ×{n}",
"agents.deleteFile": "Agenten-Datei {path} löschen?",
"nav.jobs": "Automationen",
"jobs.intro": "Agenten, die nach Zeitplan starten. Jede Automation ist eine Markdown-Datei (Auftrag + Zeitplan im Frontmatter) – lass sie dir in einem Chat von einem Agenten anlegen (Tool „schedule“) oder registriere unten eine Datei. Jeder Lauf erscheint als normaler Chat; braucht er eine Freigabe, bekommst du eine Push-Benachrichtigung.",
"jobs.none": "Noch keine Automationen.",
"jobs.schedule": "Zeitplan",
"jobs.next": "Nächster Lauf",
"jobs.last": "Letzter Lauf",
"jobs.mode": "Läuft als",
"jobs.on": "An",
"jobs.off": "Aus",
"jobs.enable": "Aktivieren",
"jobs.disable": "Deaktivieren",
"jobs.runNow": "Jetzt starten",
"jobs.editFile": "Datei bearbeiten",
"jobs.remove": "Entfernen",
"jobs.deleteConfirm": "Automation „{name}“ entfernen? Die Job-Datei bleibt erhalten.",
"jobs.openRun": "Lauf öffnen",
"jobs.prompt": "Auftrag",
"jobs.register": "Job-Datei registrieren",
"jobs.registerHint": "Pfad zu einer Markdown-Datei mit Zeitplan im Frontmatter:",
"jobs.registerBtn": "Registrieren",
"jobs.status.running": "läuft",
"jobs.status.done": "fertig",
"jobs.status.timeout": "Zeitlimit",
"jobs.status.error": "Fehler",
"new.title": "Neue Session",
"new.directory": "Projektverzeichnis",
"new.up": "Hoch",