CI 修复(plugin-mount 的 ctx.sessions.get TypeError ×1003):
- 客户端 runtime 无事件日志面——badge/SessionLens 原在客户端直读
ctx.sessions.get(id).events / ctx.on('session/event'),全部不可达。
- 新增宿主路由 changes.ops:live 会话日志优先,冷会话回放
sessionPersistence.inspect;afterSeq 增量(缺省游标含 seq 0,
显式游标为 seq > afterSeq,同 sidechat.events 约定),窗口上限
4000 与客户端累加器一致。
- ChangesTab 轮询(mount 一拉 + visible 2.5s 增量)折入 ops,写
模块级 opCounts 缓存供 badge 同步读取;SessionLens 改纯展示。
diff 展开二级设置(changesDiffFloat,默认浮窗):
- prefs 四处接线 + git tab settings select(浮窗/面板,图标选项卡)
- 预览面板「展开为 diff tab」按设置落点:浮窗居中弹出或源 pane
下方 split;i18n 全 21 词典同步。
视觉迭代(真机挂载截图审查后调整):
- Session 视角:kind 徽章为左轨,大小+相对时间右对齐元列;失败
操作行红色内嵌条;文件组头降为三级标签并加组间距。
- Git 视角:untracked '?' 徽章与新增同绿色;stage 按钮改 plus 图标。
- diff 折叠行:可展开折叠带 › 箭头 + 次级对比度,静态 gap 不再
显示 pointer/hover;预览头路径改尾部截断(RTL 技巧,保文件名)。
验证:typecheck ✓ / vitest 1123 ✓ / pnpm test:mount(钉 alpha.2 CLI)
14/14 ✓;真机挂载截图(badge=5、双视角、浮窗展开)0 console error。
392 lines
30 KiB
TypeScript
392 lines
30 KiB
TypeScript
/**
|
||
* German dictionary for better-sidebar.
|
||
*/
|
||
export const de: Record<string, string> = {
|
||
files: 'Dateien',
|
||
changesSessionEmpty: 'Noch keine Dateioperationen in dieser Sitzung',
|
||
changesRead: 'Lesen',
|
||
changesWrite: 'Schreiben',
|
||
changesEdit: 'Bearbeiten',
|
||
changesRunning: 'läuft',
|
||
changesError: 'Fehler',
|
||
changesFold: '{count} Zeilen… zum Aufklappen klicken',
|
||
changesContext: 'Kontext',
|
||
changesPriorUnknown: 'Inhalt vor der Änderung liegt außerhalb des Fensters; als vollständig neu angezeigt',
|
||
explorer: 'Explorer',
|
||
terminal: 'Terminal',
|
||
editor: 'Editor',
|
||
editorExplorer: 'Dateiöffnungsverhalten',
|
||
editorExplorerDesc: 'Steuert, wie Dateien geöffnet werden',
|
||
editorExplorerMerged: 'Zusammengeführt',
|
||
editorExplorerMergedDesc: 'Dateien wechseln im selben Fenster; neue Fenster starten mit geöffneter Baumansicht',
|
||
editorExplorerSplit: 'Getrennt',
|
||
editorExplorerSplitDesc: 'Fenster ohne Pfad sind der eigenständige Explorer (nur Dateibaum); jede Datei öffnet ein eigenes Fenster (mit angedocktem, standardmäßig eingeklapptem Baum)',
|
||
editorTreeToggle: 'Dateibaum-Panel',
|
||
editorPathPlaceholder: 'Dateipfad (relativ zum Sitzungsverzeichnis oder absolut), Enter zum Öffnen',
|
||
editorSearchPlaceholder: 'Nach Dateiname suchen…',
|
||
editorSearchNoResults: 'Keine passenden Dateien',
|
||
editorSearchTruncated: 'Zu viele Ergebnisse – nur ein Teil wird angezeigt',
|
||
editorEmptyHint: 'Wählen Sie eine Datei aus dem Dateibaum rechts oder dem Pfadeingabefeld oben, um mit der Vorschau zu beginnen',
|
||
openFileNewTab: 'In neuem Tab öffnen',
|
||
openFileSide: 'Seitlich öffnen',
|
||
openWithMenu: 'Öffnen mit',
|
||
openWithSshSuffix: ' (SSH)',
|
||
pinOpenWith: 'Im Menü anheften',
|
||
unpinOpenWith: 'Lösen',
|
||
openWithExplorer: 'Dateimanager',
|
||
openWithVscode: 'VS Code',
|
||
openWithCursor: 'Cursor',
|
||
openWithZed: 'Zed',
|
||
openWithSettingsSshTitle: 'SSH-Remote-Host',
|
||
openWithSettingsSshDesc: 'Leer = lokaler Arbeitsbereich; bei Angabe von user@host oder eines SSH-Alias verwenden die VSCode-Familienöffner das vscode-remote/ssh-remote-Protokoll, und Dateimanager / Zed / benutzerdefinierte Editoren außerhalb der VSCode-Familie werden im Menü ausgeblendet',
|
||
openWithSettingsSshPlaceholder: 'user@host oder SSH-Alias',
|
||
openWithSettingsCustomTitle: 'Benutzerdefinierte Editoren',
|
||
openWithSettingsCustomDesc: 'Name + URL-Vorlage ({path}-Platzhalter) + VSCode-Familien-Kennzeichen; im SSH-Modus können nur Editoren der VSCode-Familie Remote-Pfade öffnen',
|
||
openWithSettingsAdd: 'Hinzufügen',
|
||
openWithSettingsName: 'Name',
|
||
openWithSettingsTemplate: 'z. B. cursor://file/{path}',
|
||
openWithSettingsFamily: 'VSCode-Familie',
|
||
openWithSettingsFamilyDesc: 'Dieser Editor spricht das VSCode-URL-Protokoll (unterstützt SSH-Remote-Öffnen)',
|
||
openWithSettingsRemove: 'Entfernen',
|
||
openWithSettingsInvalidHint: 'Editoren ohne Namen oder mit Vorlage ohne {path} / scheme:// erscheinen nicht im Menü',
|
||
newTab: 'Neuer Tab',
|
||
openExplorer: 'Explorer',
|
||
brokenSymlink: 'Defekter Symlink',
|
||
openGit: 'Git-Panel',
|
||
newTerminal: 'Neues Terminal',
|
||
terminalLimit: 'Terminal-Limit erreicht (3)',
|
||
close: 'Schließen',
|
||
closeOtherTabs: 'Andere Tabs schließen',
|
||
closeLeftTabs: 'Tabs links schließen',
|
||
closeRightTabs: 'Tabs rechts schließen',
|
||
moveToFreeWindow: 'In freies Fenster verschieben',
|
||
floatDropHint: 'Loslassen, um in einem freien Fenster zu öffnen',
|
||
dockToSidebar: 'Zurück zur Seitenleiste',
|
||
pinTerminal: 'Terminal anheften',
|
||
pinAgentTerminal: 'Agent-Terminal anheften',
|
||
pinToWorkspace: 'An Arbeitsbereich anheften',
|
||
pinToGlobal: 'Global anheften',
|
||
unpinTerminal: 'Lösen',
|
||
pinnedTerminalTooltip: '{kind} · {scope} · {cwd}',
|
||
pinnedTerminalKindUi: 'UI-Terminal',
|
||
pinnedTerminalKindAgent: 'Agent-Terminal',
|
||
pinnedTerminalScopeWorkspace: 'An Arbeitsbereich angeheftet',
|
||
pinnedTerminalScopeGlobal: 'Global angeheftet',
|
||
pinnedRailLabel: 'Angeheftete Terminals',
|
||
closePinnedTerminal: 'Terminal schließen',
|
||
collapse: 'Seitenleiste einklappen',
|
||
expand: 'Seitenleiste ausklappen',
|
||
collapseBottomPanel: 'Unteres Panel einklappen',
|
||
expandBottomPanel: 'Unteres Panel ausklappen',
|
||
terminalError: 'Terminalverbindung fehlgeschlagen',
|
||
terminalConnectFailed: 'Terminal konnte wiederholt keine Verbindung herstellen',
|
||
terminalRetry: 'Erneut versuchen',
|
||
terminalDepsFailed: 'Die Terminal-Abhängigkeit node-pty konnte nicht geladen werden',
|
||
terminalDepsHint: 'Führen Sie den folgenden Befehl in einem Terminal oder in cmd auf dem DSH-System aus, um dies zu beheben, und klicken Sie dann auf „Erneut versuchen“ (node-pty bleibt mit der DSH-Core-Version synchron):',
|
||
terminalDepsProfile: ' (erkanntes Profil: {profile})',
|
||
preview: 'Vorschau',
|
||
toc: 'Inhaltsverzeichnis',
|
||
edit: 'Bearbeiten',
|
||
mermaidError: 'Mermaid-Rendering fehlgeschlagen',
|
||
mermaidZoomIn: 'Vergrößern',
|
||
mermaidZoomOut: 'Verkleinern',
|
||
mermaidZoomReset: 'Zurücksetzen',
|
||
mermaidZoomHint: 'Scrollen zum Zoomen · Ziehen zum Verschieben · Esc zum Schließen',
|
||
refresh: 'Aktualisieren',
|
||
showInFolder: 'Im Ordner anzeigen',
|
||
refreshUnsavedConfirm: 'Die Datei wurde geändert. Beim Aktualisieren gehen ungespeicherte Änderungen verloren. Fortfahren?',
|
||
save: 'Speichern',
|
||
saved: 'Gespeichert',
|
||
unsaved: 'Nicht gespeichert',
|
||
saveFailed: 'Speichern fehlgeschlagen',
|
||
truncation: 'Datei zu groß – nur die ersten 512KB werden angezeigt',
|
||
binary: 'Binärdatei, Vorschau nicht verfügbar',
|
||
loading: 'Wird geladen…',
|
||
error: 'Laden fehlgeschlagen',
|
||
retry: 'Erneut versuchen',
|
||
splitLeft: 'Nach links teilen',
|
||
splitRight: 'Nach rechts teilen',
|
||
splitUp: 'Nach oben teilen',
|
||
splitDown: 'Nach unten teilen',
|
||
notRepo: 'Dieses Verzeichnis ist kein Git-Repository',
|
||
noChanges: 'Keine Änderungen',
|
||
statusTruncated: 'Zu viele Änderungen; nur die ersten 2000 Einträge werden angezeigt',
|
||
stage: 'Stagen',
|
||
unstage: 'Unstagen',
|
||
stageAll: 'Alle stagen',
|
||
unstageAll: 'Alle unstagen',
|
||
commitPlaceholder: 'Commit-Nachricht (Ctrl+Enter)',
|
||
commit: 'Committen',
|
||
commitError: 'Commit fehlgeschlagen',
|
||
branch: 'Branch',
|
||
worktree: 'Worktree',
|
||
checkoutError: 'Branchenwechsel fehlgeschlagen',
|
||
history: 'Verlauf',
|
||
changes: 'Dateiänderungen',
|
||
changesGitLens: 'Git',
|
||
changesSessionLens: 'Sitzung',
|
||
changesFilterAll: 'Alle',
|
||
changesFilterEmpty: 'Keine Vorgänge dieser Art',
|
||
changesOpenDiffTab: 'In eigenem Tab öffnen',
|
||
changesClosePreview: 'Vorschau schließen',
|
||
changesResizePreview: 'Vorschauhöhe anpassen',
|
||
changesDiffOpenTitle: 'Diff öffnet als',
|
||
changesDiffOpenDesc: 'Wo die Aktion „In eigenem Tab öffnen“ den Diff platziert',
|
||
changesDiffOpenFloat: 'Freies Fenster',
|
||
changesDiffOpenFloatDesc: 'Ein schwebendes Fenster mittig im Viewport — verschieben, skalieren, oben halten',
|
||
changesDiffOpenPane: 'Bereich',
|
||
changesDiffOpenPaneDesc: 'Unter dem Quellbereich angedockt (VSCode-artiger Diff-Split)',
|
||
changesLoadError: 'Sitzungsdatei-Aufzeichnungen sind derzeit nicht verfügbar',
|
||
staged: 'Gestaged',
|
||
unstaged: 'Nicht gestaged',
|
||
cancel: 'Abbrechen',
|
||
diffEmpty: 'Keine Textunterschiede',
|
||
diffLoadError: 'Diff konnte nicht geladen werden',
|
||
diffBinary: 'Binär',
|
||
diffAdded: 'Hinzugefügt',
|
||
diffDeleted: 'Gelöscht',
|
||
diffRenamed: 'Umbenannt',
|
||
diffExpand: '{count} weitere Zeilen ausklappen',
|
||
diffCollapse: 'Einklappen',
|
||
discard: 'Änderungen verwerfen',
|
||
discardTitle: 'Änderungen verwerfen',
|
||
discardDesc: 'Dadurch werden die Arbeitsbereichsänderungen von „{path}“ verworfen (nicht wiederherstellbar).',
|
||
viewCommitDiff: 'Commit-Diff ansehen',
|
||
copyShortHash: 'Kurzen Hash kopieren',
|
||
copyFullHash: 'Vollständigen Hash kopieren',
|
||
copySubject: 'Commit-Titel kopieren',
|
||
revertCommit: 'Commit zurücknehmen',
|
||
revertTitle: 'Commit zurücknehmen',
|
||
revertDesc: 'Erstellt einen neuen Commit im aktuellen Branch, der „{subject}“ rückgängig macht.',
|
||
cherryPickCommit: 'Commit cherripicken',
|
||
cherryPickTitle: 'Commit cherripicken',
|
||
cherryPickDesc: 'Wendet die Änderungen von „{subject}“ auf den aktuellen Branch an.',
|
||
timeJustNow: 'gerade eben',
|
||
timeMinutesAgo: 'vor {n} Min.',
|
||
timeHoursAgo: 'vor {n} Std.',
|
||
timeYesterday: 'gestern',
|
||
loadMore: 'Mehr laden',
|
||
historyLoadError: 'Laden weiterer Verlaufseinträge fehlgeschlagen',
|
||
produced: 'Erstellt',
|
||
producedOpen: 'In der Seitenleiste öffnen',
|
||
disconnected: 'Terminalverbindung getrennt, Verbindung wird wiederhergestellt…',
|
||
exited: 'Terminalprozess beendet',
|
||
noSession: 'Wählen Sie eine Sitzung, um die Seitenleiste zu verwenden',
|
||
pluginNotLoaded: 'Plugin nicht geladen; Tab vorübergehend nicht verfügbar:',
|
||
hiddenFiles: 'Versteckte Dateien',
|
||
parent: 'Übergeordnetes Verzeichnis',
|
||
copied: 'Kopiert',
|
||
copy: 'Kopieren',
|
||
newFile: 'Neue Datei',
|
||
openEditor: 'Editor öffnen',
|
||
gitDetail: 'Änderungsdetails ansehen',
|
||
referenceFile: '@Datei',
|
||
addToConversation: 'Zur Unterhaltung hinzufügen',
|
||
copyRelative: 'Relativen Pfad kopieren',
|
||
copyAbsolute: 'Absoluten Pfad kopieren',
|
||
download: 'Herunterladen',
|
||
uploadFiles: 'Dateien hochladen',
|
||
uploadFolder: 'Ordner hochladen',
|
||
uploadHere: 'Hierher hochladen',
|
||
uploadDropHint: 'Dateien/Ordner hierher ziehen, um sie hochzuladen',
|
||
uploadDropChat: 'In den Chatbereich ziehen: Bilder zur Unterhaltung hinzufügen',
|
||
uploadTo: 'Nach {dir} hochladen',
|
||
uploadingTo: 'Wird nach {dir} hochgeladen…',
|
||
uploadProgress: 'Lade {done}/{total} hoch: {name}',
|
||
uploadDone: '{count} Dateien hochgeladen',
|
||
uploadFailed: 'Upload fehlgeschlagen: {error}',
|
||
uploadFailedUnknown: 'Unbekannter Fehler',
|
||
uploadTooLarge: 'Datei zu groß (über dem Upload-Limit)',
|
||
uploadCancelled: 'Upload abgebrochen',
|
||
settingsNav: 'Seitenkarte',
|
||
settingsIntro: 'Verwalten Sie, was die Seitenkarte anzeigt und wie sie sich verhält',
|
||
settingsPopupDesc: 'Optionen für „{feature}“ konfigurieren',
|
||
settingsDone: 'Fertig',
|
||
settingsOpenTitle: 'Für neue Unterhaltungen standardmäßig geöffnet',
|
||
settingsOpenDesc: 'Die Seitenkarte wird für brandneue Unterhaltungen automatisch ausgeklappt; bestehende Unterhaltungen behalten ihr eigenes Layout',
|
||
settingsWidthTitle: 'Standardbreite',
|
||
settingsWidthDesc: 'Standardanteil der Seitenkarte an der Fensterbreite für neue Unterhaltungen (20–60)',
|
||
settingsWidthSuffix: '%',
|
||
settingsOpenPathTitle: 'Chat-Dateien in der Seitenleiste öffnen',
|
||
settingsOpenPathDesc: 'Dateilinks im Chat (Werkzeugzeilen, erstellte Dateien, Erwähnungen) werden im Seitenleisten-Editor geöffnet statt in der System-Standardanwendung',
|
||
settingsOpenToolsTitle: 'Seitenleisten-Öffnungswerkzeug für das Modell bereitstellen',
|
||
settingsOpenToolsDesc: 'Wenn aktiviert, kann das Modell über das sidebar_open-Werkzeug Dateien, Ordner und HTTP(S)-Seiten in der Seitenleiste öffnen (standardmäßig deaktiviert)',
|
||
settingsTitleBarTitle: 'Kompatibilitätsmodus der Position',
|
||
settingsTitleBarDesc: 'Kompatibilitätsschema der Titelleiste wählen: automatische Erkennung (Standard, konservativ) / offizielles DSH-Web / bekannte Desktop-Shells / benutzerdefiniert (Verschiebung + benutzerdefiniertes CSS)',
|
||
settingsTitleBarStripTitle: 'Verschiebungsabstand',
|
||
settingsTitleBarStripDesc: 'Höhe des Titelleisten-Streifens: um wie viele Pixel Seitenleisten-Buttons und -Inhalt nach unten rutschen (0–120, Standard 40; wirkt beim benutzerdefinierten Schema)',
|
||
settingsSchemeAutoTitle: 'Automatische Erkennung',
|
||
settingsSchemeAutoDesc: 'Konservativ: nur die Standard-API „Window Controls Overlay“ trägt bei (echte Caption-Overlay-Höhe); reine Web-Umgebungen erhalten keine Anpassung',
|
||
settingsSchemeWebTitle: 'Offizielles DSH-Web',
|
||
settingsSchemeWebDesc: 'Explizit die offizielle Webversion erklären: keinerlei Anpassung (nicht einmal die Standard-WCO-Geometrie)',
|
||
settingsSchemeCustomTitle: 'Benutzerdefiniert',
|
||
settingsSchemeCustomDesc: 'Volle Kontrolle: benutzerdefiniertes CSS einspielen (kann eingebaute Stile überschreiben) und den Verschiebungsabstand der Titelleiste festlegen',
|
||
settingsSchemeDetectedSuffix: 'erkannt',
|
||
settingsCustomCssTitle: 'Benutzerdefiniertes CSS',
|
||
settingsCustomCssDesc: 'Am Seitenende angehängte Stile (bei gleicher Priorität gewinnt der spätere; zum Überschreiben von JS-Inline-Variablen ist !important nötig)',
|
||
settingsCustomCssPlaceholder: '/* z. B. 36px für eine Shell mit selbst gezeichneter Titelleiste reservieren */\nhtml[data-dsh-title-bar-height="36"] {\n --dsh-title-bar-strip: 36px !important;\n}',
|
||
settingsSaveFailed: 'Speichern fehlgeschlagen',
|
||
settingsConflict: 'Die Einstellung wurde in einem anderen Fenster geändert – bitte erneut versuchen',
|
||
binaryNoPreview: 'Dieser Dateityp kann nicht in der Vorschau angezeigt werden',
|
||
downloadToView: 'Zum Ansehen herunterladen',
|
||
settingsSubagentTitle: 'Aufgaben-Seite bei einem Subagenten automatisch öffnen',
|
||
settingsSubagentDesc: 'Die Seitenkarte wird ausgeklappt und die Aufgaben-Seite geöffnet, wenn die aktuelle Unterhaltung einen neuen Subagenten erzeugt; ausschalten, um sie manuell zu öffnen',
|
||
settingsJobsTitle: 'Aufgaben-Seite bei einer neuen Hintergrundaufgabe automatisch öffnen',
|
||
settingsJobsDesc: 'Die Seitenkarte wird ausgeklappt und die Aufgaben-Seite geöffnet, sobald für die aktuelle Unterhaltung eine neue Hintergrundaufgabe erscheint (jede neue Aufgabe löst dies aus); ausschalten, um sie manuell zu öffnen',
|
||
settingsToolsTitle: 'Terminal-Werkzeuge für das Modell bereitstellen',
|
||
settingsToolsDesc: 'Wenn aktiviert, kann das Modell über die 8 terminal_*-Werkzeuge Terminale in der Seitenleiste erstellen und steuern (standardmäßig deaktiviert)',
|
||
settingsFenceTitle: 'Workspace-Pfadkontrolle',
|
||
settingsFenceDesc: 'Wenn aktiv, erreichen die Dateifunktionen der Seitenleiste nur Pfade innerhalb des Session-Workspaces (Standard); ausgeschaltet sind Dateien überall auf dem Host erreichbar — Skripte der Seite erhalten solange dieselbe Reichweite',
|
||
fenceErrorReason: 'Dieser Pfad liegt außerhalb des Session-Workspaces und wurde von der Workspace-Kontrolle blockiert',
|
||
fenceDisableAction: 'Workspace-Kontrolle ausschalten',
|
||
settingsBottomTerminalTitle: 'Beim ersten Ausklappen des unteren Panels automatisch ein Terminal öffnen',
|
||
settingsBottomTerminalDesc: 'Wird das untere Panel in einer Sitzung zum ersten Mal ausgeklappt, wird dort versucht, einen neuen Terminal-Tab zu öffnen (das Terminal-Kontingent gilt weiterhin; standardmäßig aktiviert)',
|
||
settingsFontFamilyTitle: 'Terminal-Schriftart',
|
||
settingsFontFamilyDesc: 'Benutzerdefinierte Terminal-Schriftfamilie (ein CSS-font-family-Stapel wie "JetBrains Mono", monospace; leer lassen, um der Monospace-Schrift des Themas zu folgen)',
|
||
settingsFontFamilyPlaceholder: '"JetBrains Mono", monospace',
|
||
settingsFontSizeTitle: 'Terminal-Schriftgröße',
|
||
settingsFontSizeDesc: 'Terminal-Schriftgröße in px (9–32, Standard 13)',
|
||
settingsFontSizeSuffix: 'px',
|
||
settingsShellTitle: 'Shell-Pfad',
|
||
settingsShellDesc: 'Shell für UI- und Modell-Terminals (absoluter Pfad oder ausführbarer Name). Leer lassen für die bestehende Reihenfolge: config.shell aus der yaml → $SHELL / Login-Shell / powershell.exe unter Windows. Wirkt für danach geöffnete Terminals',
|
||
settingsShellPlaceholder: 'z. B. /bin/zsh (leer = automatisch)',
|
||
settingsShellArgsTitle: 'Shell-Argumente',
|
||
settingsShellArgsDesc: 'Explizite Shell-Startargumente, durch Leerzeichen getrennt; wenn nicht leer, ersetzen sie die Standardargumente vollständig (gleicher Vertrag wie shellArgs in der yaml)',
|
||
settingsShellArgsPlaceholder: 'z. B. -l (leer = Standardargumente)',
|
||
settingsTabsTitle: 'Seitenleisten-Inhalt',
|
||
settingsViewersTitle: 'Datei-Viewer',
|
||
settingsGeneralTitle: 'Allgemein',
|
||
settingsPopup: 'Funktionseinstellungen',
|
||
settingsViewerCatchAll: 'Catch-all: beliebige Datei',
|
||
viewerImage: 'Bild',
|
||
viewerPdf: 'PDF',
|
||
viewerMarkdown: 'Markdown',
|
||
viewerCode: 'Code',
|
||
viewerBinary: 'Binär-Download',
|
||
viewerHtml: 'HTML',
|
||
browser: 'Browser',
|
||
browserPlaceholder: 'URL eingeben, z. B. example.com',
|
||
browserGo: 'Los',
|
||
browserBack: 'Zurück',
|
||
browserForward: 'Vor',
|
||
browserStart: 'URL eingeben, um mit dem Browsen zu beginnen (Sandbox-Modus)',
|
||
browserBlockedScheme: 'Blockiert: nur http/https-Links sind erlaubt',
|
||
browserBlockedLoopback: 'Blockiert: lokale und interne Adressen können hier nicht aufgerufen werden',
|
||
browserInvalid: 'Ungültige URL',
|
||
browserNoSandboxWarning: 'Sandbox aus: Die aktuelle Seite läuft mit vollen Benutzeroberflächen-Rechten (in den Einstellungen wieder aktivierbar)',
|
||
htmlNoSandboxWarning: 'Sandbox aus: Dieses HTML läuft mit vollen Benutzeroberflächen-Rechten (in den Einstellungen wieder aktivierbar)',
|
||
sandboxStatusOn: 'Sandbox-Modus: aktiviert · Seiten können weder auf die Daten der Oberfläche noch auf lokale Dateien zugreifen; Anmeldungen und Drittanbieter-Cookies funktionieren möglicherweise nicht',
|
||
sandboxUnlock: 'Vorübergehend deaktivieren (unsicher)',
|
||
sandboxRestore: 'Sandbox wiederherstellen',
|
||
settingsHtmlDefaultUnsafeTitle: 'HTML-Vorschauen standardmäßig ohne Sandbox öffnen (unsicher)',
|
||
settingsHtmlDefaultUnsafeDesc: 'Wenn aktiviert, startet jede neu geöffnete HTML-Vorschau ohne Sandbox (gleiche Herkunft wie die Oberfläche – sie kann Sitzungsdateien und interne APIs lesen); die Statuszeile bietet weiterhin eine einmalige Wiederherstellung',
|
||
settingsHtmlSandboxTitle: 'HTML-Vorschau-Sandbox deaktivieren (unsicher)',
|
||
settingsHtmlSandboxDesc: 'Ohne Sandbox läuft das angezeigte HTML mit der gleichen Herkunft wie die Oberfläche: Es kann Sitzungsdateien und lokalen Speicher lesen und interne APIs aufrufen. Nur für vollständig vertrauenswürdige Dateien aktivieren',
|
||
settingsBrowserSandboxTitle: 'Browser-Sandbox deaktivieren (unsicher)',
|
||
settingsBrowserSandboxDesc: 'Ohne Sandbox läuft jede besuchte Website mit der gleichen Herkunft wie die Oberfläche: Sie kann Sitzungsdaten lesen und sich als Ihre Anmeldung ausgeben. Nur für vollständig vertrauenswürdige Websites aktivieren',
|
||
settingsBrowserLinksTitle: 'Externe Links aus dem Chat in der Seitenleiste öffnen',
|
||
settingsBrowserLinksDesc: 'Wenn aktiviert, öffnet ein Klick auf einen externen Link im Chat oder in der Oberfläche die Seitenleiste statt eines neuen Fensters; HTTP und HTTPS werden getrennt über die Schalter unten gesteuert; Ctrl/Cmd-Klick umgeht dies immer',
|
||
settingsBrowserHttpTitle: 'HTTP-Seiten in der Seitenleiste öffnen',
|
||
settingsBrowserHttpDesc: 'Wenn aktiviert, öffnet ein Klick auf einen HTTP-Externlink im Chat oder in der Oberfläche die Seitenleiste (Plugin-Seiten mit urlTarget gewinnen); Ctrl/Cmd-Klick umgeht dies immer',
|
||
settingsBrowserHttpsTitle: 'HTTPS-Seiten in der Seitenleiste öffnen',
|
||
settingsBrowserHttpsDesc: 'Wenn aktiviert, öffnet ein Klick auf einen HTTPS-Externlink im Chat oder in der Oberfläche die Seitenleiste. Standardmäßig deaktiviert: Die meisten HTTPS-Sites verweigern die Einbettung, der Systembrowser ist der reibungslosere Standard',
|
||
settingsBrowserLoopbackTitle: 'Erlaubte lokale Adressen',
|
||
settingsBrowserLoopbackDesc: 'Kommagetrennte Allowlist von Loopback-Adressen (z. B. localhost:5174 oder 127.0.0.1:8080), die der Seitenleisten-Browser besuchen darf; leer blockiert standardmäßig alle lokalen Adressen. Die Sandbox bleibt aktiv — Seiten können keine GUI-Daten lesen',
|
||
settingsBrowserLoopbackPlaceholder: 'z. B. localhost:5174, 127.0.0.1:8080',
|
||
browserOpenExternal: 'Im Browser öffnen',
|
||
browserEmbedBlocked: '{host} hat die Einbettung verweigert',
|
||
browserEmbedBlockedDesc: 'Die Site verbietet die Anzeige in anderen Seiten (X-Frame-Options / frame-ancestors) und kann daher nicht in der Seitenleiste geladen werden. Öffnen Sie sie stattdessen direkt im Browser.',
|
||
browserEmbedAnyway: 'Trotzdem laden',
|
||
subagent: 'Aufgaben',
|
||
openSubagent: 'Aufgaben',
|
||
subagentMainAgent: 'Hauptagent',
|
||
subagentEmpty: 'Keine Subagenten',
|
||
subagentEmptyDesc: 'Subagenten, die unter dem Hauptagenten erzeugt werden, erscheinen hier',
|
||
subagentRunning: 'Läuft',
|
||
subagentInactive: 'Inaktiv',
|
||
subagentModeOneShot: 'Einmalig',
|
||
subagentModeContinuable: 'Fortsetzbar',
|
||
subagentCount: '{count} Subagenten',
|
||
subagentCountRunning: '{count} Subagenten · {running} läuft',
|
||
subagentDiagCorrupt: 'Beschädigt',
|
||
subagentDiagUnsupported: 'Nicht unterstützt',
|
||
subagentDiagUnavailable: 'Nicht verfügbar',
|
||
subagentThinking: 'Denkt nach…',
|
||
sideChat: 'Seitenchat (beta)',
|
||
sideChatNew: 'Neuer Thread',
|
||
sideChatUntitled: 'Neuer Thread',
|
||
sideChatEmpty: 'Keine Seitenunterhaltungen',
|
||
sideChatEmptyDesc: 'Jede Seitenunterhaltung ist ein eigener Tab in der Tab-Leiste – sie erbt den Kontext der aktuellen Sitzung und wird nie Teil der Hauptunterhaltung',
|
||
sideChatCreating: 'Seitenunterhaltung wird erstellt…',
|
||
sideChatRetry: 'Erneut versuchen',
|
||
sideChatThreads: 'Thread wechseln / neu',
|
||
sideChatSave: 'Als neue Sitzung speichern',
|
||
sideChatSaveTitle: 'Diesen Thread in der Hauptsitzungsliste zu einer Top-Level-Sitzung erheben',
|
||
sideChatSaved: 'Als neue Sitzung gespeichert',
|
||
sideChatNoTurn: 'Das Speichern ist nach der ersten abgeschlossenen Runde verfügbar',
|
||
sideChatPendingDrop: 'Die letzte unbeantwortete Nachfrage wird in der gespeicherten Sitzung nicht enthalten sein',
|
||
sideChatFirstPlaceholder: 'Stellen Sie die erste Frage – der Kontext ist geerbt…',
|
||
sideChatComposerPlaceholder: 'Nachfrage stellen…',
|
||
sideChatThinking: 'Denkt vertieft…',
|
||
sideChatThink: 'Denkvorgang',
|
||
sideChatInjection: 'Kontext eingespielt',
|
||
sideChatSend: 'Senden',
|
||
sideChatCancel: 'Stoppen',
|
||
sideChatCancelTitle: 'Laufende Runde abbrechen (wartende Nachrichten bleiben erhalten)',
|
||
sideChatClose: 'Thread schließen',
|
||
sideChatCloseTitle: 'Den Agenten des Threads freigeben (Verlauf bleibt erhalten)',
|
||
sideChatError: 'Seitenchat-Fehler: {message}',
|
||
jobs: 'Hintergrundaufgaben',
|
||
jobsCount: '{count} Hintergrundaufgaben',
|
||
jobsCountRunning: '{count} Hintergrundaufgaben · {running} läuft',
|
||
jobStatusRunning: 'Läuft',
|
||
jobStatusStopping: 'Wird beendet',
|
||
jobStatusCompleted: 'Abgeschlossen',
|
||
jobStatusKilled: 'Beendet',
|
||
jobStatusFailed: 'Fehlgeschlagen',
|
||
jobDurationSeconds: '{seconds} s',
|
||
jobDurationMinutes: '{minutes} m {seconds} s',
|
||
jobDurationHours: '{hours} h {minutes} m',
|
||
jobViewOutput: 'Ausgabe ansehen',
|
||
jobHideOutput: 'Ausgabe ausblenden',
|
||
jobNoOutput: 'Noch keine Ausgabe',
|
||
jobNotReadYet: 'Warten, bis das Modell die Ausgabe dieser Aufgabe liest (nach Ausführung von job_output durch das Modell erscheint die Ausgabe hier)',
|
||
jobOutputTruncated: 'Ausgabe zu lang, gekürzt angezeigt',
|
||
jobOutputError: 'Ausgabe konnte nicht gelesen werden',
|
||
jobKill: 'Beenden',
|
||
jobKillConfirm: 'Zum Bestätigen erneut klicken',
|
||
jobKillError: 'Beenden fehlgeschlagen',
|
||
addPluginsTabCard: 'Tab-Plugins hinzufügen',
|
||
addPluginsTabCardDesc: 'Eine neue Seitenleisten-Seite registrieren',
|
||
addPluginsViewerCard: 'Vorschau-Plugins hinzufügen',
|
||
addPluginsViewerCardDesc: 'Eine Dateityp-Vorschau registrieren',
|
||
addPluginsTabDesc: 'Seitenleisten-Seiten (Tabs) können durch Plugins erweitert werden. Plugins registrieren sich über den ctx.betterSidebar-Dienst; ein Klick auf „Installieren“ kopiert den Installationsbefehl – fügen Sie ihn in einem Terminal ein, in dem Ihr DSH-Profil liegt, und führen Sie ihn aus.',
|
||
addPluginsViewerDesc: 'Datei-Viewer können durch Plugins erweitert werden. Plugins registrieren sich über den ctx.betterSidebar-Dienst; ein Klick auf „Installieren“ kopiert den Installationsbefehl – fügen Sie ihn in einem Terminal ein, in dem Ihr DSH-Profil liegt, und führen Sie ihn aus.',
|
||
addPluginsBrowseMore: 'Weitere Plugins auf GitHub durchsuchen (Topic: dsh-better-sidebar)',
|
||
addPluginsSearch: 'Nach Plugin-Name oder -Beschreibung suchen…',
|
||
addPluginsNoMatch: 'Keine passenden Plugins',
|
||
addPluginsRecommended: 'Empfohlene Plugins',
|
||
addPluginsEmpty: 'Noch keine Plugins katalogisiert – veröffentlichen Sie Ihre Plugin unter dem GitHub-Topic',
|
||
openPlugin: 'Öffnen',
|
||
copyInstall: 'Installationsbefehl kopieren',
|
||
pluginOfficeDesc: 'Office-Suite-Vorschau (.docx / .xlsx / .pptx) für den better-sidebar-Editor, die die schweren Office-Render-Bibliotheken aus dem Kernbundle heraushält',
|
||
pluginFlowglassDesc: 'Live-Sitzungsflussdiagramm: dreispurige Darstellung von Benutzer, Assistent und Werkzeugaufrufen mit parallelen Gruppen, Subagent-Zweigen, Drill-down und Live-Status; registriert bei installiertem better-sidebar einen nativen „Flowglass“-Tab und behält sonst eine eigenständige Schublade',
|
||
pluginGitForgeDesc: '„Git-Anmeldedaten“-Tab: Konto-Bibliothek für Forges wie GitHub/Gitea + projektbezogene Freigaben + harte Push-Richtlinie; Tokens liegen nur in lokalen Secrets, nie im Modellkontext; bietet ein schreibgeschütztes GitForge-Werkzeug und einen HTTPS-Credential-Helper für den Agenten',
|
||
pluginGithubWorkbenchDesc: '„GitHub Workbench“-Tab: Repository-Baum + Issues / Pull requests / Actions mit vollen Schreibrechten — Issue/PR erstellen, kommentieren, bearbeiten, schließen/wieder öffnen, squash·merge·rebase-Merge (mit starker Bestätigung), CI erneut ausführen/abbrechen; der Repo-Umschalter listet automatisch zugreifbare Repos auf und durchsucht öffentliche; ohne better-sidebar fällt er auf ein eigenständiges rechtes Panel zurück',
|
||
pluginMdExportDesc: 'Fügt einen „Export"-Button zur Markdown-Symbolleiste in better-sidebar hinzu: rendert die aktuelle .md per Klick in eigenständiges HTML (Tabellen/Codeblöcke/Mermaid-Diagramme inline, Layout folgt dem Vorschau-Theme) und speichert es neben der .md, oder exportiert über den Druckdialog als PDF',
|
||
pluginCodeNavDesc: 'Code-Vorschau-Navigation: erkennt die Sprache am Dateityp und hebt die Syntax hervor, Symbol-Gliederung (Filter für Klassen/Methoden/Variablen + Sprung mit einem Klick) und Suche in der Datei (alle Treffer hervorgehoben, vor/zurück, Groß-/Kleinschreibung) — übernimmt die Code-Dateivorschau im better-sidebar-Editor',
|
||
pluginSuhuangScrollDesc: 'Verbindet die lokale Suhuang Scroll Runtime mit den DSH-Einstellungen und better-sidebar für Modellkonfiguration, Verbindungstests und fortlaufende Bewertung; benötigt Suhuang Scroll Runtime und dsh-better-sidebar',
|
||
pluginBetterOverleafDesc: 'Overleaf-Tab für better-sidebar: Login direkt über CDP-Browser (Chromium von Drittanbietern unterstützt), Projekliste/-wechsel, lokale git-Spiegel unter <workspace>/overleaf/, bidirektionaler git-Abgleich mit Read-only-API-Fallback und Dateivorschau über die Sidebar-Workbench',
|
||
pluginGitRemotesDesc: '„Git-Remotes“-Tab: Branches/Upstream/ahead-behind ansehen, fetch (optional prune), ff-only pull und push erst nach Bestätigung im Tab. Ersetzt nicht den eingebauten Stagen/Commit-Tab und bietet weder force-push noch automatisches Push-Werkzeug für das Modell',
|
||
pluginSentinelDesc: 'Bedingungsgesteuertes Wecksystem für Agenten: Datei-/Prozess-/Port-/HTTP-/Befehls-/Webhook-Sensoren wecken ruhende Sitzungen, wenn Bedingungen zutreffen; registriert einen „Sentinel“-Tab mit der serverweiten Überwachungstabelle',
|
||
pluginServerDeckDesc: 'Server-Karten-Dashboard: eine Karte pro Host mit Onlinestatus, OS, Uptime sowie CPU-/RAM-/Festplattenauslastung und Latenz; ein Klick öffnet ein interaktives xterm.js-Terminal; ~/.ssh/config-Import mit einem Klick (Git-Hosting-Aliase werden übersprungen). Registriert einen nativen „Server“-Tab bei installiertem better-sidebar, sonst bleibt der eigenständige Drawer erhalten',
|
||
pluginSidebarQaDesc: 'Auswählen-und-Fragen mit Tab-Aufteilung: Text in der Unterhaltung auswählen → rechts im Panel fragen → eine eigene Folgesitzung (❓Nachfrage) im selben Arbeitsbereich; ein schnelles Modell ohne Denkvorgang komprimiert den Hauptkontext und spielt ihn samt Zitat ein, ohne die Hauptunterhaltung zu unterbrechen. Nachfragen lassen sich verschachteln, fortsetzen und archivieren',
|
||
pluginSidenoteDesc: 'Side-Chat im Codex-Stil + Auswahl-Annotationen: die aktuelle Sitzung per fork in ein dauerhaftes Seiten-Panel auslagern (aus der Sitzungsliste archiviert, mehrere Instanzen gleichzeitig, /side-Befehl, übersteht Neuladen, das Modell folgt der Haupt-Sitzung); assistant-Text markieren → nummeriertes Badge + Annotation-Editor → ein "N Annotationen"-Chip wird mit der nächsten Nachricht mitgesendet, oder direkt im Side-Chat fragen',
|
||
pluginSshTunnelDesc: '„SSH-Tunnel“-Tab: Multi-Host-Inventar + projektbezogene Freigaben + lokale Schlüsselverwahrung; Modellwerkzeug SSHManager (exec/SFTP/Sitzungsstrategien); zentrales interaktives Terminal und zweispaltiges SFTP',
|
||
pluginTurnReviewDesc: 'Eine menschliche Freigabestufe für den Diff der „gerade abgeschlossenen Runde“: Approve / Request changes pro Pfad mit optionalem Kommentar; Pfade gruppiert nach Hauptsitzung / Subagent / nicht zugeordnet; Inline-Diff von Snapshot-vs-jetzt, bevor Sie entscheiden. Kein Fork, kein /rewind',
|
||
pluginVideoPreviewDesc: 'Inline-Videovorschau (.mp4/.webm/.mov/.mkv/.avi usw.) für den better-sidebar-Editor, gestützt auf eine eigene /video-Hostroute mit HTTP-Range-Unterstützung (206) – das Scrubbing funktioniert und Dateien unterliegen nicht dem 20MB-mediaLimit',
|
||
pluginDocsPanelDesc: '„Globale Dokumente“ in der DSH-Seitenleiste: eigene Markdown-Notizen aus jedem Arbeitsbereich lesen – Dateiliste, Gliederung, Öffnen in Chrome / VS Code und Kopieren-Buttons; das Dokumentenverzeichnis ist konfigurierbar (Standard ~/.dsh/docs)',
|
||
pluginEgoBrowserDesc: 'Der Agent-Browser für DeepSeek Harness: 32 ego_*-Tools steuern ein echtes Chromium; ein nativer „ego-Browser“-Tab in der Seitenleiste zeigt live jede Seite, die der Agent besucht – Klicken, Ziehen und Tippen zum Übernehmen. Registriert den Tab automatisch, wenn better-sidebar vorhanden ist, sonst eine schwebende Blase',
|
||
pluginBilingualReaderDesc: 'PDFs im DSH-Seitenbereich lesen: native PDF-Anzeige, Text auswählen und mit dem LLM übersetzen — mit Kontext, vollständig vom Hauptgespräch isoliert',
|
||
}
|