Add security hardening, Ghidra, recreate skill, checkpoints, shells, web search and themes
- Sandbox (bubblewrap) for non-admin shell/git, MCP per-user rights, hard budgets and quotas, login rate limiting, audit log and backups - Ghidra headless decompilation (ARM64 natives built from source), binary_info tool, clean room / deep workflow per session - Recreate skill and commands for analysing and re-building old software - File checkpoints with rewind/restore, background shells (bash_output, kill_shell) - web_search tool (DuckDuckGo, SearXNG, Brave, Tavily) - In-app dialogs and toasts instead of browser dialogs - 15 base themes (trilium-themes palettes plus Nord, VS Code, GitHub, Catppuccin, One, Dracula, Rose Pine, Everforest, Kanagawa) with light/dark/auto switcher and license notes Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
1 parent
fab9add5d5
commit
5b569b6835
108 files changed
+6785
-279
No files matched your search
+75
-2
@@ -125,6 +125,74 @@ export const de: Messages = {
|
||||
"git.noDiff": "Keine Unterschiede.",
|
||||
"composer.attachedFiles": "Angehängte Dateien (im Projekt, mit deinen Tools lesen):",
|
||||
"composer.uploading": "Lade {n} hoch…",
|
||||
"usage.title": "Modelle und Verbrauch dieser Session",
|
||||
"usage.period": "Zeitraum",
|
||||
"usage.current": "aktuell",
|
||||
"usage.model": "Modell",
|
||||
"usage.prices": "Preise pro 1 Mio. Tokens",
|
||||
"usage.usage": "Nutzung",
|
||||
"usage.speed": "Geschwindigkeit",
|
||||
"usage.cacheWrite": "Cache geschrieben",
|
||||
"usage.contextNow": "Kontext jetzt",
|
||||
"usage.totalTime": "Gesamtzeit",
|
||||
"usage.inSession": "In dieser Session",
|
||||
"usage.providerMonth": "Provider diesen Monat",
|
||||
"usage.byAgent": "Nach Agent und Modell",
|
||||
"preview.page": "Seite {n} / {total}",
|
||||
"preview.openBrowser": "Im Browser öffnen",
|
||||
"preview.moreRows": "{n} weitere Zeilen nicht angezeigt",
|
||||
"preview.moduleHint": "Tracker-Modul – wird auf dem Server zu Audio gerendert (der erste Start kann kurz dauern).",
|
||||
"activity.phrases": "Grübelt|Tüftelt|Werkelt|Brütet|Sinniert|Knobelt|Schmiedet|Rätselt|Zaubert|Bastelt|Puzzelt|Feilt|Köchelt|Hirnt|Fummelt|Sortiert Gedanken|Dreht Schrauben|Entwirrt|Klamüsert|Ausbaldowert|Fuchst sich rein|Wuselt|Tüftelt weiter|Kalibriert",
|
||||
"activity.prefill": "Prefill",
|
||||
"activity.generated": "generiert",
|
||||
"activity.prefilling": "liest Prompt…",
|
||||
"mcp.users": "Erlaubte Benutzer",
|
||||
"mcp.usersPlaceholder": "nur Admins",
|
||||
"mcp.usersHint": "Benutzernamen mit Komma getrennt oder * für alle. Admins haben immer Zugriff.",
|
||||
"settings.budgetAction": "Wenn ein Budget aufgebraucht ist",
|
||||
"settings.budgetWarn": "Nur warnen",
|
||||
"settings.budgetBlock": "Neue Anfragen blockieren",
|
||||
"settings.sandbox": "Shell-Sandbox",
|
||||
"settings.sandboxAuto": "Benutzer (nicht Admins)",
|
||||
"settings.sandboxAlways": "Alle",
|
||||
"settings.sandboxOff": "Aus",
|
||||
"settings.sandboxHint": "Shell-Befehle und Git laufen in einer bubblewrap-Sandbox, in der nur die Ordner des Benutzers beschreibbar sind.",
|
||||
"users.quota": "Monatskontingent",
|
||||
"users.quotaHint": "Monatliches Kostenlimit (leer = unbegrenzt)",
|
||||
"users.quotaPrompt": "Monatliches Kostenlimit für {name} (leer = unbegrenzt):",
|
||||
"settings.tab.audit": "Audit",
|
||||
"audit.title": "Audit-Log",
|
||||
"audit.all": "Alle Aktionen",
|
||||
"audit.time": "Zeit",
|
||||
"audit.action": "Aktion",
|
||||
"audit.detail": "Details",
|
||||
"audit.backup": "Sicherung",
|
||||
"audit.backupHint": "ZIP mit der Konfiguration und einer konsistenten Kopie der Datenbank (Sessions, Benutzer, Statistik). Als ${VAR} referenzierte Secrets sind nicht enthalten.",
|
||||
"audit.download": "Sicherung herunterladen",
|
||||
"craft.mode": "Craft-Modus",
|
||||
"craft.modeHint": "Clean Room: nur, was ein Benutzer sieht. Deep: auch Seitenquelltext und Programme (Ghidra) – zum Nachbilden, nicht zum Kopieren.",
|
||||
"craft.cleanRoom": "Clean Room",
|
||||
"craft.deep": "Deep",
|
||||
"settings.tab.tools": "Werkzeuge",
|
||||
"tools.installed": "installiert",
|
||||
"tools.install": "Ghidra installieren",
|
||||
"tools.reinstall": "Installation prüfen / reparieren",
|
||||
"tools.installing": "Installiere (Download ca. 800 MB, auf ARM wird der Dekompiler kompiliert – das dauert einige Minuten)…",
|
||||
"tools.ghidraHint": "Mit Ghidra können Agenten im Craft-Deep-Modus Programme dekompilieren (Windows .exe/.dll, Linux, DOS …), um zu verstehen, wie sie funktionieren. Wird samt eigenem JDK ins Daten-Volume installiert.",
|
||||
"rewind.intro": "Die Unterhaltung wird auf den Stand vor dieser Nachricht zurückgesetzt; du kannst sie bearbeiten und neu senden.",
|
||||
"rewind.noFiles": "Der Agent hat seitdem keine Dateien geändert.",
|
||||
"rewind.restore": "Auch die {n} vom Agenten geänderte(n) Datei(en) zurücksetzen",
|
||||
"rewind.willDelete": "wird gelöscht (neu)",
|
||||
"rewind.bashNote": "Änderungen durch Shell-Befehle (z. B. installierte Pakete) werden nicht zurückgesetzt.",
|
||||
"rewind.confirm": "Zurückspulen",
|
||||
"files.discard": "Verwerfen",
|
||||
"files.overwrite": "Überschreiben",
|
||||
"shells.title": "Hintergrund-Shells",
|
||||
"shells.chip": "{n}/{total} Shells",
|
||||
"shells.running": "läuft",
|
||||
"shells.exited": "beendet ({code})",
|
||||
"shells.stop": "Stoppen",
|
||||
"shells.noOutput": "(noch keine Ausgabe)",
|
||||
"login.prompt": "Melde dich an, um fortzufahren.",
|
||||
"login.invalid": "Ungültiges Token.",
|
||||
"login.submit": "Anmelden",
|
||||
@@ -173,7 +241,6 @@ export const de: Messages = {
|
||||
"chat.statsHint": "Tokens und Kosten dieser Session (Klick für Details)",
|
||||
"chat.renameHint": "Doppelklick zum Umbenennen",
|
||||
"chat.rewind": "Ab hier bearbeiten und neu senden",
|
||||
"chat.rewindConfirm": "Diese Nachricht und alles danach entfernen? Dateiänderungen werden nicht rückgängig gemacht.",
|
||||
"chat.delete": "Session löschen",
|
||||
"chat.deleteConfirm": "Diese Session inklusive Subagenten löschen? Die Statistik bleibt erhalten.",
|
||||
|
||||
@@ -231,7 +298,12 @@ export const de: Messages = {
|
||||
"settings.interface": "Oberfläche (dieses Gerät)",
|
||||
"settings.language": "Sprache",
|
||||
"settings.theme": "Design",
|
||||
"settings.themeSystem": "System",
|
||||
"settings.themeMode": "Modus",
|
||||
"settings.themeAuto": "Auto",
|
||||
"settings.themeLight": "Hell",
|
||||
"settings.themeDark": "Dunkel",
|
||||
"settings.themeSource": "Farben: {source} ({license})",
|
||||
"settings.themeToggle": "Hell/Dunkel/Auto umschalten",
|
||||
"settings.notifications": "Benachrichtigungen",
|
||||
"settings.notificationsEnable": "Aktivieren",
|
||||
"settings.notificationsOn": "Aktiv",
|
||||
@@ -353,6 +425,7 @@ export const de: Messages = {
|
||||
"stats.other": "Sonstige",
|
||||
"stats.noData": "Keine Anfragen in diesem Zeitraum.",
|
||||
|
||||
"common.ok": "OK",
|
||||
"common.cancel": "Abbrechen",
|
||||
"nav.logout": "Abmelden",
|
||||
"login.username": "Benutzername",
|
||||
|
||||
+75
-2
@@ -124,6 +124,74 @@ export const en = {
|
||||
"git.noDiff": "No differences.",
|
||||
"composer.attachedFiles": "Attached files (in the project, read them with your tools):",
|
||||
"composer.uploading": "Uploading {n}…",
|
||||
"usage.title": "Models and usage in this session",
|
||||
"usage.period": "Period",
|
||||
"usage.current": "current",
|
||||
"usage.model": "Model",
|
||||
"usage.prices": "Prices per 1M tokens",
|
||||
"usage.usage": "Usage",
|
||||
"usage.speed": "Speed",
|
||||
"usage.cacheWrite": "Cache write",
|
||||
"usage.contextNow": "Context now",
|
||||
"usage.totalTime": "Total time",
|
||||
"usage.inSession": "In this session",
|
||||
"usage.providerMonth": "Provider this month",
|
||||
"usage.byAgent": "By agent and model",
|
||||
"preview.page": "Page {n} / {total}",
|
||||
"preview.openBrowser": "Open in browser",
|
||||
"preview.moreRows": "{n} more rows not shown",
|
||||
"preview.moduleHint": "Tracker module – rendered to audio on the server (first playback may take a moment).",
|
||||
"activity.phrases": "Pondering|Tinkering|Noodling|Brewing|Conjuring|Mulling|Crafting|Percolating|Ruminating|Whittling|Forging|Musing|Scheming|Untangling|Cogitating|Simmering|Wrangling|Hatching|Spelunking|Finagling|Concocting|Calibrating|Divining|Marinating",
|
||||
"activity.prefill": "prefill",
|
||||
"activity.generated": "generated",
|
||||
"activity.prefilling": "reading prompt…",
|
||||
"mcp.users": "Allowed users",
|
||||
"mcp.usersPlaceholder": "admins only",
|
||||
"mcp.usersHint": "Usernames separated by commas, or * for everybody. Admins always have access.",
|
||||
"settings.budgetAction": "When a budget is used up",
|
||||
"settings.budgetWarn": "Warn only",
|
||||
"settings.budgetBlock": "Block new requests",
|
||||
"settings.sandbox": "Shell sandbox",
|
||||
"settings.sandboxAuto": "Users (not admins)",
|
||||
"settings.sandboxAlways": "Everybody",
|
||||
"settings.sandboxOff": "Off",
|
||||
"settings.sandboxHint": "Shell commands and git run in a bubblewrap sandbox with only the user's folders writable.",
|
||||
"users.quota": "Monthly quota",
|
||||
"users.quotaHint": "Monthly cost limit (empty = unlimited)",
|
||||
"users.quotaPrompt": "Monthly cost limit for {name} (empty = unlimited):",
|
||||
"settings.tab.audit": "Audit",
|
||||
"audit.title": "Audit log",
|
||||
"audit.all": "All actions",
|
||||
"audit.time": "Time",
|
||||
"audit.action": "Action",
|
||||
"audit.detail": "Details",
|
||||
"audit.backup": "Backup",
|
||||
"audit.backupHint": "ZIP with the configuration and a consistent copy of the database (sessions, users, statistics). Secrets referenced as ${VAR} are not included.",
|
||||
"audit.download": "Download backup",
|
||||
"craft.mode": "Craft mode",
|
||||
"craft.modeHint": "Clean room: only what a user sees. Deep: also page sources and programs (Ghidra) – for re-creating, not copying.",
|
||||
"craft.cleanRoom": "Clean room",
|
||||
"craft.deep": "Deep",
|
||||
"settings.tab.tools": "Tools",
|
||||
"tools.installed": "installed",
|
||||
"tools.install": "Install Ghidra",
|
||||
"tools.reinstall": "Check / repair installation",
|
||||
"tools.installing": "Installing (download ~800 MB, on ARM the decompiler is compiled – this takes several minutes)…",
|
||||
"tools.ghidraHint": "Ghidra lets agents in craft Deep mode decompile programs (Windows .exe/.dll, Linux, DOS, …) to study how they work. Installed into the data volume together with its own JDK.",
|
||||
"rewind.intro": "The conversation is reset to before this message; you can edit and resend it.",
|
||||
"rewind.noFiles": "The agent did not change files since then.",
|
||||
"rewind.restore": "Also restore the {n} file(s) the agent changed",
|
||||
"rewind.willDelete": "will be deleted (new)",
|
||||
"rewind.bashNote": "Changes made by shell commands (e.g. installed packages) are not restored.",
|
||||
"rewind.confirm": "Rewind",
|
||||
"files.discard": "Discard",
|
||||
"files.overwrite": "Overwrite",
|
||||
"shells.title": "Background shells",
|
||||
"shells.chip": "{n}/{total} shells",
|
||||
"shells.running": "running",
|
||||
"shells.exited": "exited ({code})",
|
||||
"shells.stop": "Stop",
|
||||
"shells.noOutput": "(no output yet)",
|
||||
"login.prompt": "Sign in to continue.",
|
||||
"login.invalid": "Invalid token.",
|
||||
"login.submit": "Sign in",
|
||||
@@ -172,7 +240,6 @@ export const en = {
|
||||
"chat.statsHint": "Tokens and cost of this session (click for details)",
|
||||
"chat.renameHint": "Double-click to rename",
|
||||
"chat.rewind": "Edit and resend from here",
|
||||
"chat.rewindConfirm": "Remove this message and everything after it? File changes are not undone.",
|
||||
"chat.delete": "Delete session",
|
||||
"chat.deleteConfirm": "Delete this session including its subagents? Statistics are kept.",
|
||||
|
||||
@@ -230,7 +297,12 @@ export const en = {
|
||||
"settings.interface": "Interface (this device)",
|
||||
"settings.language": "Language",
|
||||
"settings.theme": "Theme",
|
||||
"settings.themeSystem": "System",
|
||||
"settings.themeMode": "Mode",
|
||||
"settings.themeAuto": "Auto",
|
||||
"settings.themeLight": "Light",
|
||||
"settings.themeDark": "Dark",
|
||||
"settings.themeSource": "Colours: {source} ({license})",
|
||||
"settings.themeToggle": "Switch light/dark/auto",
|
||||
"settings.notifications": "Notifications",
|
||||
"settings.notificationsEnable": "Enable",
|
||||
"settings.notificationsOn": "Enabled",
|
||||
@@ -352,6 +424,7 @@ export const en = {
|
||||
"stats.other": "Other",
|
||||
"stats.noData": "No requests in this period.",
|
||||
|
||||
"common.ok": "OK",
|
||||
"common.cancel": "Cancel",
|
||||
"nav.logout": "Sign out",
|
||||
"login.username": "Username",
|
||||
|
||||
Reference in new issue
Block a user