feat(i18n): complete German localization
This commit is contained in:
@@ -203,13 +203,14 @@ other language mirrors the English files under a locale folder.
|
||||
| Korean | `ko/` | `ko` |
|
||||
| Polish | `pl/` | `pl` |
|
||||
| French | `fr/` | `fr` |
|
||||
| German | `de/` | `de` |
|
||||
| Japanese | `ja/` | `ja` |
|
||||
|
||||
> [!IMPORTANT]
|
||||
> The **content folder** uses the lowercase locale key (`zh-cn`, `pt-br`); the
|
||||
> **sidebar `translations`** key uses the BCP-47 language tag (`zh-CN`, `pt-BR`).
|
||||
> They look similar but are not interchangeable — Starlight resolves them with
|
||||
> different rules. Everything else (`uk`, `es`, `ko`, `pl`, `fr`, `ja`, `en`) is identical
|
||||
> different rules. Everything else (`uk`, `es`, `ko`, `pl`, `fr`, `de`, `ja`, `en`) is identical
|
||||
> in both columns.
|
||||
|
||||
This locale set is mirrored in the website at
|
||||
@@ -269,6 +270,7 @@ to each section and item in `sidebar.config.json`:
|
||||
"ko": "여기서 시작",
|
||||
"pl": "Zacznij tutaj",
|
||||
"fr": "Commencer ici",
|
||||
"de": "Hier starten",
|
||||
"ja": "ここから開始"
|
||||
},
|
||||
"items": [
|
||||
@@ -283,6 +285,7 @@ to each section and item in `sidebar.config.json`:
|
||||
"ko": "설치",
|
||||
"pl": "Instalacja",
|
||||
"fr": "Installation",
|
||||
"de": "Installation",
|
||||
"ja": "インストール"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,39 @@
|
||||
---
|
||||
title: Agent-Steuerungswerkzeug
|
||||
description: Lass einen Agenten OpenChamber-Sitzungen, Worktrees und geplante Aufgaben direkt aus dem Chat verwalten.
|
||||
---
|
||||
|
||||
# Agent-Steuerungswerkzeug
|
||||
|
||||
Verwende das Agentenwerkzeug `openchamber`, um Arbeit in der App direkt aus dem Chat zu verwalten. Es ist standardmäßig aktiviert, wenn OpenChamber seinen eigenen lokalen OpenCode-Server ausführt; du musst kein separates Werkzeug installieren und keinen Shell-Befehl ausführen.
|
||||
|
||||
## Was du anfragen kannst
|
||||
|
||||
Sprich einfach in natürlicher Sprache mit dem Agenten. Zum Beispiel:
|
||||
|
||||
- "Erstelle in diesem Projekt eine neue OpenChamber-Sitzung, verwende das Modell `openai/gpt-5.6-sol` und sende ihr diese Aufforderung: überprüfe den Authentifizierungsfluss."
|
||||
- "Erstelle für diese Aufgabe eine neue OpenChamber-Sitzung in einem separaten Worktree und bitte sie, Tests für den Login-Fluss hinzuzufügen."
|
||||
- "Verwende OpenChamber, um meine 10 neuesten Sitzungen aufzulisten und ihren aktuellen Status anzuzeigen."
|
||||
- "Erstelle eine geplante OpenChamber-Aufgabe mit dem Namen Weekday review, die diese Aufforderung werktags um 09:00 sendet: review changes since the last run."
|
||||
- "Führe die geplante OpenChamber-Aufgabe mit dem Namen Weekday review jetzt aus."
|
||||
- "Prüfe die OpenChamber-Sitzung mit dem Namen Authentication review und zeige mir die neueste Antwort des Assistenten."
|
||||
|
||||
Das Werkzeug kann Projekte und Modelleinstellungen auflisten, Sitzungen erstellen und weiterführen, eine Sitzung forken, isolierte Worktree-Sitzungen erstellen und geplante Aufgaben verwalten. Auf diese Weise gestartete Sitzungen erscheinen in OpenChamber wie jede andere Sitzung auch, sodass du sie öffnen und die Arbeit selbst fortsetzen kannst.
|
||||
|
||||
## Beachten
|
||||
|
||||
- Neue Sitzungsaufforderungen kehren standardmäßig sofort zurück. Verfolge die Sitzung in OpenChamber oder bitte den Agenten, sie später noch einmal zu prüfen.
|
||||
- Ein separater Worktree wird nur erstellt, wenn du ausdrücklich danach fragst. Nicht-committete Änderungen aus deinem aktuellen Worktree werden nicht dorthin kopiert.
|
||||
- Das Werkzeug kann keine Sitzungen oder Worktrees löschen, keine Projektpfade registrieren, keine beliebigen Shell-Befehle ausführen und keine beliebigen URLs aufrufen.
|
||||
|
||||
## Werkzeug ein- oder ausschalten
|
||||
|
||||
Öffne **Einstellungen → Allgemein → OpenCode CLI**, ändere **Agent control tool** und wähle dann **Save + Reload**. Die Einstellung gilt, nachdem der verwaltete OpenCode-Server neu gestartet wurde.
|
||||
|
||||
Das Werkzeug ist nicht verfügbar, wenn OpenChamber über `OPENCODE_HOST` oder skip-start mit einem externen OpenCode-Server verbunden ist oder innerhalb der VS-Code-Erweiterung läuft. Desktop- und Web-Installationen, die den verwalteten OpenCode-Server von OpenChamber verwenden, unterstützen es automatisch.
|
||||
|
||||
## Verwandt
|
||||
|
||||
- [Geplante Aufgaben](/scheduled-tasks/)
|
||||
- [Worktree-Sitzungen](/worktrees/)
|
||||
- [Sitzungsziele](/session-goals/)
|
||||
@@ -0,0 +1,39 @@
|
||||
---
|
||||
title: Befehle & Snippets
|
||||
description: Wiederverwendbare Slash-Befehle und Text-Snippets für den Chat erstellen.
|
||||
---
|
||||
|
||||
# Befehle & Snippets
|
||||
|
||||
Sowohl Befehle als auch Snippets ersparen dir das wiederholte Tippen derselben Dinge. Befehle sind ganze Prompts, die du mit `/` aufrufst; Snippets sind Textbausteine, die du mit `#` in eine Nachricht einfügst.
|
||||
|
||||
## Befehle
|
||||
|
||||
Ein Befehl ist ein gespeicherter Prompt, den du mit einem Slash aufrufst, etwa `/review`. Du verwaltest ihn unter **Einstellungen → Befehle**.
|
||||
|
||||
1. Öffne **Einstellungen → Befehle** und erstelle einen Befehl.
|
||||
2. Gib ihm einen Namen, eine Beschreibung und den Prompt-Text, den er senden soll.
|
||||
3. Optional kannst du ihn an einen bestimmten Agenten oder ein Modell binden.
|
||||
4. Wähle den Geltungsbereich: persönlich oder projektbezogen.
|
||||
|
||||
Gib im Chat als **erstes** Zeichen der Nachricht `/` ein, um Befehle anzuzeigen, und wähle dann einen aus. Dein Text kann Platzhalter verwenden:
|
||||
|
||||
- `$ARGUMENTS` — alles, was du nach dem Befehl eingibst
|
||||
- `@filename` — fügt den Inhalt einer Datei ein
|
||||
- `` !`command` `` — fügt die Ausgabe eines Shell-Befehls ein
|
||||
|
||||
Die eingebauten Befehle `init` und `review` können zurückgesetzt, aber nicht gelöscht werden.
|
||||
|
||||
## Snippets
|
||||
|
||||
Ein Snippet ist wiederverwendbarer Text, auf den du inline mit einer Raute verweist, zum Beispiel `#signoff`. Du verwaltest ihn unter **Einstellungen → Snippets**.
|
||||
|
||||
1. Öffne **Einstellungen → Snippets** und erstelle ein Snippet.
|
||||
2. Gib ihm einen Namen und den Text, für den es steht. Füge Aliase hinzu, wenn du mehr als einen Auslöser möchtest.
|
||||
3. Wähle den persönlichen oder projektbezogenen Geltungsbereich.
|
||||
|
||||
Gib im Chat `#` ein und wähle ein Snippet aus. OpenChamber ersetzt es vor dem Senden durch den vollständigen Text.
|
||||
|
||||
## Weiterführend
|
||||
|
||||
- [Skills](/skills/) — größere Anweisungssätze bei Bedarf laden
|
||||
@@ -0,0 +1,68 @@
|
||||
---
|
||||
title: Ein Gerät verbinden
|
||||
description: Kopple dein Telefon, deinen Desktop oder einen anderen Browser mit deinem OpenChamber-Server über einen einmaligen QR-Code.
|
||||
---
|
||||
|
||||
# Ein Gerät verbinden
|
||||
|
||||
Kopple ein weiteres Gerät — die Mobile App, die Desktop-App oder einen Browser auf einem anderen Rechner — mit deinem OpenChamber-Server, indem du einen einmaligen QR-Code scannst. Das ist der empfohlene Weg, Geräte zu verbinden; du musst keine Ports öffnen und keine Adressen eintippen.
|
||||
|
||||
## Gerät koppeln
|
||||
|
||||
1. Öffne auf dem Rechner mit OpenChamber **Settings → Remote Instances → Connect to this server** und drücke **Add a device**.
|
||||
2. Gib dem Gerät einen Namen (z. B. *Mein iPhone*), damit du es später wiedererkennst.
|
||||
3. Wähle, wo du das Gerät nutzen wirst:
|
||||
- **This computer only** — für Apps, die auf genau diesem Rechner laufen
|
||||
- **Home network only** — verbindet sich direkt über dein WLAN; funktioniert außerhalb dieses Netzwerks nicht
|
||||
- **Anywhere** — funktioniert zu Hause und unterwegs; Daten außerhalb deines Netzwerks laufen über das [Private Relay](/private-relay/), ein Ende-zu-Ende-verschlüsselter Tunnel ohne zusätzliche Einrichtung
|
||||
4. Drücke **Create QR code**.
|
||||
5. Scanne den Code auf dem anderen Gerät:
|
||||
- **mobile app** — tippe auf dem Verbindungsbildschirm (oder in der Instanzliste) auf **Scan QR code**
|
||||
- **desktop app** — kopiere stattdessen den Verbindungslink und füge ihn unter **Settings → Remote Instances → Other OpenChamber servers → Import Link** ein
|
||||
|
||||
Der Dialog schließt sich von selbst, sobald das Gerät verbunden ist, und das Gerät erscheint mit Live-Status in der Liste. Das war’s — die Kopplung ist abgeschlossen.
|
||||
|
||||
## So bleibt die Kopplung sicher
|
||||
|
||||
- **Der QR-Code ist nur einmal verwendbar.** Er funktioniert in dem Moment nicht mehr, in dem ein Gerät ihn einlöst, und läuft von selbst ab, wenn er nie benutzt wird.
|
||||
- **Jedes Gerät erhält sein eigenes Token.** Beim Scannen wird niemals dein UI-Passwort offengelegt, und das Token eines Geräts kann nicht verwendet werden, um sich als ein anderes auszugeben.
|
||||
- **Du behältst die Kontrolle.** Jedes gekoppelte Gerät wird mit Name, Plattform und Verbindungsstatus angezeigt — du kannst jedes davon jederzeit widerrufen.
|
||||
- **Verkehr von unterwegs ist Ende-zu-Ende verschlüsselt.** Bei **Anywhere** läuft Verkehr außerhalb deines Netzwerks über das [Private Relay](/private-relay/), das nicht lesen kann, was hindurchläuft.
|
||||
|
||||
## Gekoppelte Geräte verwalten
|
||||
|
||||
**Settings → Remote Instances → Connect to this server** listet jedes Gerät, das diesen Server erreichen kann, mit einem grünen Punkt, wenn es online ist, und zeigt an, ob es über das lokale Netzwerk oder das Relay verbunden ist.
|
||||
|
||||
- **Revoke** trennt ein Gerät sofort. Kopple es mit einem neuen QR-Code erneut, wenn du es dir anders überlegst.
|
||||
- **Clear revoked** räumt die Liste auf.
|
||||
|
||||
Dasselbe physische Gerät bleibt nur in einem Eintrag, auch wenn es sich später erneut anmeldet — du sammelst keine Duplikate an.
|
||||
|
||||
## Über die Kommandozeile verbinden
|
||||
|
||||
Wenn der Server ohne UI läuft (also headless), erstelle einen Verbindungslink in einem Terminal auf diesem Rechner.
|
||||
|
||||
Für ein Gerät im selben Netzwerk:
|
||||
|
||||
```bash
|
||||
openchamber connect-url --port 3000 --qr
|
||||
```
|
||||
|
||||
Für ein Gerät, das sich von **überall** verbinden soll — das entspricht der Wahl von **Anywhere** im Dialog:
|
||||
|
||||
```bash
|
||||
openchamber connect-url --relay --qr
|
||||
```
|
||||
|
||||
Ein `--relay`-Link enthält beide Routen, genau wie der Dialog: Das Gerät verbindet sich direkt über dein lokales Netzwerk, wenn es den Server erreichen kann, und fällt auf das [Private Relay](/private-relay/) zurück, wenn es unterwegs ist. Das Relay startet von selbst: Eine laufende Instanz übernimmt den Link innerhalb einer Minute, eine gestoppte Instanz beim nächsten Start.
|
||||
|
||||
> Die direkte Route funktioniert nur, wenn der Server tatsächlich im Netzwerk lauscht. Standardmäßig lauscht OpenChamber nur auf dem Rechner selbst — starte es mit `--lan`, damit es über WLAN erreichbar ist. Der Befehl warnt dich (`[LAN_UNREACHABLE]`), wenn die direkte Route des Links von anderen Geräten nicht nutzbar ist; ein `--relay`-Link funktioniert dann trotzdem, nur immer über das Relay.
|
||||
|
||||
Der ausgegebene Link und QR-Code funktionieren genau wie die aus dem Einstellungsdialog — nur einmal verwendbar, mit Ablaufzeit und widerrufbar.
|
||||
|
||||
## Verwandt
|
||||
|
||||
- [Private Relay](/private-relay/) — wie "Anywhere"-Verbindungen funktionieren
|
||||
- [Mobile Apps](/mobile/) — die iOS- oder Android-App installieren
|
||||
- [Remote Instances](/remote-instances/) — die Desktop-App per SSH oder Link mit Servern verbinden
|
||||
- [Remote access](/troubleshooting/remote-access/) — wenn sich ein Gerät nicht verbinden kann
|
||||
@@ -0,0 +1,38 @@
|
||||
---
|
||||
title: Kontext
|
||||
description: Sieh, wie viel des Modellgedächtnisses eine Session verwendet.
|
||||
---
|
||||
|
||||
# Kontext
|
||||
|
||||
Jedes Modell kann immer nur so viel von einer Unterhaltung gleichzeitig halten — seinen Kontext. OpenChamber zeigt dir, wie voll er ist, damit du erkennst, wenn eine Session an die Grenze kommt und eine Antwort vielleicht ältere Details fallen lässt.
|
||||
|
||||
## Die schnelle Anzeige
|
||||
|
||||
Während du chattest, zeigt eine kleine Anzeige den prozentualen Kontextverbrauch. Die Farbe ändert sich, während er voller wird:
|
||||
|
||||
- grün — noch reichlich Platz
|
||||
- gelb — wird voll (etwa drei Viertel)
|
||||
- rot — fast voll
|
||||
|
||||
Bewege den Mauszeiger darüber (oder tippe sie auf dem Handy an), um die genauen Token-Zahlen zu sehen.
|
||||
|
||||
## Das vollständige Kontext-Panel
|
||||
|
||||
Öffne den Tab **Kontext** in der rechten Seitenleiste für ein vollständigeres Bild der aktuellen Session:
|
||||
|
||||
- das verwendete Modell und wann die Session gestartet wurde
|
||||
- Gesamtzahl der Tokens im Verhältnis zum Limit des Modells
|
||||
- Gesamtzahlen für Nachrichten und Kosten
|
||||
- eine Aufschlüsselung der Token der letzten Antwort
|
||||
- eine grobe Aufteilung dessen, was den Kontext belegt (deine Nachrichten, die des Agenten, Tool-Ausgaben)
|
||||
|
||||
Die Aufschlüsselung ist eine Schätzung, keine exakte Zahl — nutze sie, um zu erkennen, was das Fenster füllt, nicht für die Abrechnung.
|
||||
|
||||
## Was tun, wenn es voll ist
|
||||
|
||||
Starte für eine neue Aufgabe eine frische Session, statt eine Session endlos wachsen zu lassen. Ein kürzerer Kontext ist schneller und hält das Modell fokussiert.
|
||||
|
||||
## Verwandtes
|
||||
|
||||
- [Projekte](/projects/) — Sessions werden pro Projekt gruppiert
|
||||
@@ -0,0 +1,22 @@
|
||||
---
|
||||
title: Desktop-Browser
|
||||
description: Durchsuche jede Seite in der Desktop-App mit Inspektion und Konsolenaufzeichnung.
|
||||
---
|
||||
|
||||
# Desktop-Browser
|
||||
|
||||
Die Desktop-App hat einen eingebauten Browser, damit du jede Seite direkt neben deinem Chat öffnen, auf Elemente zeigen und danach fragen sowie die Konsole der Seite aufzeichnen kannst. Öffne ihn über die Globus-Schaltfläche im App-Kopfbereich.
|
||||
|
||||
> Der Desktop-Browser ist eine Funktion **nur für den Desktop**. Im Web bietet das [Preview](/preview/)-Panel dieselben Inspektions- und Konsolentools für deinen lokalen Dev-Server.
|
||||
|
||||
## Inspizieren und annotieren
|
||||
|
||||
Aktiviere **inspect** und klicke auf ein beliebiges Element auf der Seite. OpenChamber erstellt dazu eine Notiz — was es ist, welche Stile es hat, wo es sich befindet und einen Screenshot — und hängt sie an deine Chatnachricht an. Das ist der schnellste Weg, dem Agenten zu sagen: „dieses Element, genau hier“.
|
||||
|
||||
## Konsolenaufzeichnung
|
||||
|
||||
Der Browser sammelt die Konsolenausgabe der Seite — Fehler, Warnungen und Logs — damit du sie filtern und lesen kannst, ohne die Entwicklertools zu öffnen.
|
||||
|
||||
## Verwandt
|
||||
|
||||
- [Preview & Dev Servers](/preview/) — dieselben Tools für deinen lokalen Dev-Server
|
||||
@@ -0,0 +1,41 @@
|
||||
---
|
||||
title: Desktop-Tunnel
|
||||
description: Erstelle Cloudflare- oder Ngrok-Tunnel aus der Desktop-App.
|
||||
---
|
||||
|
||||
# Desktop-Tunnel
|
||||
|
||||
Die Desktop-App kann unter **Settings → OpenChamber → Tunnel** einen öffentlichen Tunnel erstellen. Für diesen Weg musst du OpenChamber nicht per CLI starten.
|
||||
|
||||
## Anbieter installieren
|
||||
|
||||
OpenChamber startet das Provider-CLI auf deinem Rechner. Installiere zuerst den Anbieter, den du verwenden möchtest:
|
||||
|
||||
```bash
|
||||
brew install cloudflared
|
||||
brew install ngrok
|
||||
```
|
||||
|
||||
Cloudflare verwendet `cloudflared`. Ngrok benötigt ein ngrok-Konto und ein Authtoken aus dem ngrok-Dashboard:
|
||||
|
||||
```bash
|
||||
ngrok config add-authtoken <your-ngrok-token>
|
||||
```
|
||||
|
||||
## In der App starten
|
||||
|
||||
1. Öffne **Settings → OpenChamber → Tunnel**.
|
||||
2. Wähle **Cloudflare** oder **Ngrok**.
|
||||
3. Starte einen Quick Tunnel.
|
||||
4. Scanne den erzeugten QR-Code mit deinem Telefon.
|
||||
|
||||
Ngrok unterstützt derzeit Quick Tunnels. Cloudflare unterstützt Quick Tunnels und verwaltete Cloudflare-Modi.
|
||||
|
||||
## Zugriffsschutz
|
||||
|
||||
Auch wenn die Anbieter-URL selbst öffentlich ist, schützt OpenChamber den Zugriff weiterhin mit seinem eigenen Verbindungs-Token. Der erzeugte Verbindungslink enthält ein Einmal-Token, hat eine TTL, und alte unbenutzte Links werden widerrufen, wenn du einen neuen erzeugst oder den Tunnel stoppst bzw. neu startest.
|
||||
|
||||
## Verwandt
|
||||
|
||||
- [Tunnels](/tunnels/) — Tunnel-Nutzung per CLI und verwaltete Cloudflare-Modi
|
||||
- [PWA & Mobile](/mobile/) — OpenChamber vom Telefon aus erreichen
|
||||
@@ -0,0 +1,138 @@
|
||||
---
|
||||
title: Umgebungsvariablen
|
||||
description: Konfiguriere die OpenChamber- und OpenCode-Integration mit Umgebungsvariablen.
|
||||
---
|
||||
|
||||
# Umgebungsvariablen
|
||||
|
||||
OpenChamber liest diese Umgebungsvariablen beim Start. Für Startdienste speichert `openchamber startup enable` die aktuelle Umgebung standardmäßig als Schnappschuss, also führe den Befehl nach Änderungen an den Variablen, die der Dienst verwenden soll, erneut aus.
|
||||
|
||||
## OpenChamber-Server
|
||||
|
||||
### `OPENCHAMBER_HOST`
|
||||
|
||||
Bind-Adresse für den OpenChamber-Webserver. Verwende `0.0.0.0`, um Zugriff von anderen Maschinen zu erlauben.
|
||||
|
||||
### `OPENCHAMBER_UI_PASSWORD`
|
||||
|
||||
Passwort für die Browser-Oberfläche. Verwende es, wenn du außerhalb von localhost bindest, Tunnels nutzt oder hinter einem Reverse Proxy läufst.
|
||||
|
||||
### `OPENCHAMBER_API_ONLY`
|
||||
|
||||
Startet OpenChamber im Headless-Modus, wenn auf `true` oder `1` gesetzt. API-Routen bleiben für Desktop- und Mobile-Clients verfügbar, aber die Browser-Oberfläche wird nicht ausgeliefert.
|
||||
|
||||
### `OPENCHAMBER_DATA_DIR`
|
||||
|
||||
Überschreibt das OpenChamber-Datenverzeichnis. Standard ist `~/.config/openchamber`.
|
||||
|
||||
### `OPENCHAMBER_COMPRESS_API`
|
||||
|
||||
Steuert die Komprimierung von API-Antworten. Verwende `true` oder `1`, um sie zu erzwingen, und `false` oder `0`, um sie zu deaktivieren.
|
||||
|
||||
### `OPENCHAMBER_SKIP_API_COMPRESSION`
|
||||
|
||||
Deaktiviert die Komprimierung von API-Antworten, wenn auf `true` oder `1` gesetzt. Das hat Vorrang vor `OPENCHAMBER_COMPRESS_API`.
|
||||
|
||||
### `OPENCHAMBER_VERBOSE_REQUEST_LOGS`
|
||||
|
||||
Aktiviert ausführliche HTTP-Request-Logs, wenn auf `true` oder `1` gesetzt.
|
||||
|
||||
### `OPENCHAMBER_UPDATE_API_URL`
|
||||
|
||||
Überschreibt den API-Endpunkt für Update-Prüfungen. Die meisten Nutzer sollten das nicht setzen.
|
||||
|
||||
### `OPENCHAMBER_PACKAGE_MANAGER`
|
||||
|
||||
Erzwingt den Paketmanager, den Update-Operationen verwenden, wenn die automatische Erkennung falsch liegt.
|
||||
|
||||
## OpenCode-Server
|
||||
|
||||
### `OPENCODE_HOST`
|
||||
|
||||
Verbindet OpenChamber mit einem vorhandenen OpenCode-Server. Der Wert muss ein `http`- oder `https`-Origin mit explizitem Port und ohne Pfad, Query oder Hash sein. `OPENCODE_HOST` hat Vorrang vor `OPENCODE_PORT`.
|
||||
|
||||
### `OPENCODE_PORT`
|
||||
|
||||
Legt den Port des OpenCode-Servers fest. Bei verwaltetem OpenCode fordert dies den verwalteten Port an; mit `OPENCODE_SKIP_START=true` verbindet es sich mit einem externen Server auf diesem Port.
|
||||
|
||||
### `OPENCODE_SKIP_START`
|
||||
|
||||
Verhindert, dass OpenChamber einen eigenen OpenCode-Server startet, wenn auf `true` gesetzt.
|
||||
|
||||
### `OPENCHAMBER_OPENCODE_HOSTNAME`
|
||||
|
||||
Bind-Hostname für den von OpenChamber verwalteten OpenCode-Server. Standard ist `127.0.0.1`.
|
||||
|
||||
### `OPENCODE_BINARY`
|
||||
|
||||
Pfad zur ausführbaren `opencode`-Datei, die OpenChamber ausführen soll.
|
||||
|
||||
### `OPENCODE_CONFIG`
|
||||
|
||||
Pfad zu einer bestimmten OpenCode-Konfigurationsdatei.
|
||||
|
||||
### `OPENCODE_CONFIG_DIR`
|
||||
|
||||
Pfad zu einem bestimmten OpenCode-Konfigurationsverzeichnis für Agents, Skills, Snippets und Konfigurationssuche.
|
||||
|
||||
### `OPENCODE_DATA_DIR`
|
||||
|
||||
Benutzerdefiniertes Datenverzeichnis für den verwalteten OpenCode-Server.
|
||||
|
||||
### `OPENCODE_WSL_DISTRO`
|
||||
|
||||
Wählt die WSL-Distribution für die OpenCode-Integration unter Windows aus.
|
||||
|
||||
### `OPENCHAMBER_OPENCODE_WSL_DISTRO`
|
||||
|
||||
OpenChamber-spezifischer Alias zur Auswahl der WSL-Distribution. `OPENCODE_WSL_DISTRO` hat Vorrang, wenn beide gesetzt sind.
|
||||
|
||||
### `OPENCODE_JWT_SECRET`
|
||||
|
||||
Geheimnis zum Signieren von UI-Authentifizierungstokens. Verwende für dauerhafte Diensteinrichtungen einen langen, zufälligen Wert.
|
||||
|
||||
## Terminal und Git
|
||||
|
||||
### `OPENCHAMBER_TERMINAL_SHELL`
|
||||
|
||||
Shell-Executable, die OpenChamber für Terminal-Sessions verwendet.
|
||||
|
||||
### `OPENCHAMBER_GIT_BINARY`
|
||||
|
||||
Git-Executable, die OpenChamber-Git-Funktionen verwenden.
|
||||
|
||||
### `GIT_BINARY`
|
||||
|
||||
Alternative Git-Executable-Überschreibung. Bevorzuge `OPENCHAMBER_GIT_BINARY` für OpenChamber-spezifische Konfiguration.
|
||||
|
||||
### `OPENCHAMBER_GIT_READ_CACHE_TTL_MS`
|
||||
|
||||
Lebensdauer in Millisekunden für zwischengespeicherte Git-gestützte Dateilesevorgänge. Setze `0`, um diesen Cache beim Debuggen zu deaktivieren.
|
||||
|
||||
## Voice und Tunnels
|
||||
|
||||
### `OPENAI_API_KEY`
|
||||
|
||||
API-Schlüssel, den OpenChamber-Voice-Funktionen für OpenAI-kompatible Dienste verwenden.
|
||||
|
||||
### `OPENCHAMBER_ALLOW_REMOTE_OPENAI_COMPAT_URLS`
|
||||
|
||||
Erlaubt entfernte OpenAI-kompatible Basis-URLs für Voice-Funktionen, wenn auf `true` oder `1` gesetzt.
|
||||
|
||||
### `NGROK_AUTHTOKEN`
|
||||
|
||||
ngrok-Auth-Token, den OpenChamber-Tunnel-Befehle verwenden. Du kannst ngrok auch mit `ngrok config add-authtoken <token>` konfigurieren.
|
||||
|
||||
## Laufzeit-Helfer
|
||||
|
||||
### `BUN_BINARY`
|
||||
|
||||
Bun-Executable, die OpenChamber beim Starten von Daemon-Prozessen verwenden soll.
|
||||
|
||||
### `BUN_INSTALL`
|
||||
|
||||
Installationswurzel von Bun. OpenChamber verwendet sie, um `bin/bun` für Daemon-Start und Updates zu finden.
|
||||
|
||||
### `VITE_OPENCODE_URL`
|
||||
|
||||
Build-Zeit-API-Basis-URL für die mit Vite gebaute Web-App. Die meisten Nutzer sollten sie für die normale CLI- oder Desktop-Nutzung nicht setzen.
|
||||
@@ -0,0 +1,30 @@
|
||||
---
|
||||
title: Git-Identitäten
|
||||
description: Committe mit dem richtigen Namen und der richtigen E-Mail für jedes Repository.
|
||||
---
|
||||
|
||||
# Git-Identitäten
|
||||
|
||||
Eine Git-Identität ist der Name und die E-Mail-Adresse, mit denen deine Commits signiert werden. Wenn du zwischen privaten und Arbeits-Repos wechselst, kannst du Identitäten speichern und pro Repository die richtige anwenden, statt dich auf eine einzige globale Einstellung zu verlassen. Verwalte sie unter **Einstellungen → Git**.
|
||||
|
||||
## Eine Identität hinzufügen
|
||||
|
||||
1. Öffne **Einstellungen → Git** und wähle **New**.
|
||||
2. Gib den **name** und die **email** ein, mit denen committen werden soll.
|
||||
3. Wähle aus, wie sie sich beim Remote authentifiziert:
|
||||
- **SSH** — verweise auf einen SSH-Schlüssel
|
||||
- **token** — verwende eine gespeicherte Anmeldedaten für einen Host
|
||||
4. Gib ihr optional eine Farbe und ein Symbol, damit sie leicht zu erkennen ist.
|
||||
|
||||
Auch deine globale System-Identität wird angezeigt, allerdings nur lesbar.
|
||||
|
||||
## Eine Identität auf ein Repo anwenden
|
||||
|
||||
Das Anwenden einer Identität schreibt sie in die **lokale** Git-Konfiguration dieses Repositories — sie betrifft nur dieses Repo, nicht deine globale Einstellung. SSH-Identitäten setzen außerdem den zu verwendenden SSH-Befehl auf deinen Schlüssel; Token-Identitäten richten die Anmeldedatenspeicherung für den Host ein.
|
||||
|
||||
Du kannst Identitäten importieren, die OpenChamber aus deinen vorhandenen Git-Anmeldedaten erkennt, und sie als Token-Identitäten speichern.
|
||||
|
||||
## Verwandt
|
||||
|
||||
- [Git- & GitHub-Workflows](/git/) — mit der von dir festgelegten Identität committen
|
||||
- [GitHub Issues & PRs](/github/) — ein GitHub-Konto für PRs verbinden
|
||||
@@ -0,0 +1,41 @@
|
||||
---
|
||||
title: Git- & GitHub-Workflows
|
||||
description: Änderungen vormerken, committen und Branches verwalten, ohne OpenChamber zu verlassen.
|
||||
---
|
||||
|
||||
# Git- & GitHub-Workflows
|
||||
|
||||
OpenChamber hat eine integrierte Git-Ansicht, damit du Änderungen prüfen, committen und Branches verwalten kannst, ohne in ein Terminal zu wechseln. Öffne sie über den **Git**-Tab in der rechten Seitenleiste.
|
||||
|
||||
## Prüfen und committen
|
||||
|
||||
Die Git-Ansicht teilt deine Änderungen in **staged** und **unstaged** auf:
|
||||
|
||||
- klicke auf das **+** einer Datei, um sie zu stage'n, oder auf **−**, um sie wieder unstaged zu machen
|
||||
- stage oder unstage ganze Gruppen auf einmal
|
||||
- klicke auf eine Datei, um ihren Diff zu sehen
|
||||
|
||||
Schreibe dann eine Commit-Nachricht und committe. Du kannst OpenChamber eine **Commit-Nachricht generieren** lassen, basierend auf deinen gestagten Änderungen — dabei wird das Modell der aktuellen Sitzung verwendet, also brauchst du eine geöffnete Sitzung.
|
||||
|
||||
## Branches und Verlauf
|
||||
|
||||
Die Git-Ansicht deckt auch den üblichen Rest von Git ab:
|
||||
|
||||
- Branches erstellen, wechseln, umbenennen und löschen
|
||||
- pushen, pullen und fetchen
|
||||
- Verlauf und Diffs pro Commit durchsuchen
|
||||
- Änderungen stashen und wiederherstellen
|
||||
|
||||
## Pull Requests
|
||||
|
||||
Verbinde GitHub (siehe [GitHub Issues & PRs](/github/)) und der **PR**-Tab lässt dich einen Pull Request öffnen, aktualisieren, als bereit markieren oder mergen — und seinen Titel und seine Beschreibung auf dieselbe Weise wie Commit-Nachrichten generieren.
|
||||
|
||||
## Konflikte übernehmen
|
||||
|
||||
Wenn ein Merge, Rebase oder Integrate auf einen Konflikt stößt, zeigt OpenChamber, was festhängt, und lässt dich es lösen — einschließlich der Übergabe an den Agenten.
|
||||
|
||||
## Verwandt
|
||||
|
||||
- [GitHub Issues & PRs](/github/) — GitHub verbinden und mit Issues mit der Arbeit beginnen
|
||||
- [Worktree-Sitzungen](/worktrees/) — einen Branch in seinem eigenen Ordner isolieren
|
||||
- [Git-Identitäten](/git-identities/) — als die richtige Person pro Repo committen
|
||||
@@ -0,0 +1,34 @@
|
||||
---
|
||||
title: GitHub Issues & PRs
|
||||
description: Verbinde GitHub und starte Sitzungen aus Issues und Pull Requests.
|
||||
---
|
||||
|
||||
# GitHub Issues & PRs
|
||||
|
||||
Verbinde dein GitHub-Konto und OpenChamber kann Issues und Pull Requests einlesen, direkt daraus eine Sitzung starten und PRs für dich öffnen oder aktualisieren.
|
||||
|
||||
## GitHub verbinden
|
||||
|
||||
1. Öffne **Einstellungen → Git**.
|
||||
2. Wähle unter GitHub **Connect**. OpenChamber zeigt einen Link und einen kurzen Code an.
|
||||
3. Öffne den Link, gib den Code ein und bestätige.
|
||||
|
||||
Wenn die Verbindung steht, erscheint dein Konto im GitHub-Bereich. Du kannst mehr als ein Konto verbinden und zwischen ihnen wechseln oder dich jederzeit trennen.
|
||||
|
||||
## Arbeit aus einem Issue oder PR starten
|
||||
|
||||
Wenn du mit verbundenem GitHub eine [Worktree-Sitzung](/worktrees/) erstellst, kannst du **Start from GitHub issue/PR** wählen:
|
||||
|
||||
- wähle ein **issue** und OpenChamber benennt den Branch danach und öffnet die Sitzung mit dem Issue und seinen Kommentaren als erster Nachricht
|
||||
- wähle einen **pull request** und OpenChamber checkt den Branch des PR aus; du kannst den Diff des PR einbeziehen, damit der Agent die komplette Änderung hat
|
||||
|
||||
So landest du direkt in einer Sitzung, in der der Kontext bereits geladen ist.
|
||||
|
||||
## Pull Requests öffnen und verwalten
|
||||
|
||||
Im **PR**-Tab der [Git-Ansicht](/git/) kannst du einen Pull Request erstellen, aktualisieren, einen Entwurf als bereit markieren oder mergen. OpenChamber kann den PR-Titel und die Beschreibung aus deinen Änderungen generieren.
|
||||
|
||||
## Verwandt
|
||||
|
||||
- [Git- & GitHub-Workflows](/git/) — committen und Branches verwalten
|
||||
- [Worktree-Sitzungen](/worktrees/) — dort starten Issue- und PR-Sitzungen
|
||||
@@ -0,0 +1,32 @@
|
||||
---
|
||||
title: OpenChamber-Dokumentation
|
||||
description: Ein Einrichtungs- und Bedienhandbuch für OpenChamber für Web, Desktop und VS Code.
|
||||
---
|
||||
|
||||
# OpenChamber-Dokumentation
|
||||
|
||||
OpenChamber ist der visuelle Arbeitsbereich rund um OpenCode (den KI-Coding-Agenten, der in deinem Terminal läuft). Er gibt dir einen Bildschirm, auf dem du diese Arbeit beobachten und steuern kannst, statt nur auf der Befehlszeile zu arbeiten.
|
||||
|
||||
Nutze diese Doku, um:
|
||||
|
||||
- die richtige App für deine Arbeitsweise zu installieren
|
||||
- OpenChamber für den sicheren Remote-Einsatz zu öffnen
|
||||
- das Aussehen anzupassen und häufige Probleme zu beheben
|
||||
|
||||
## Lies zuerst das hier
|
||||
|
||||
- [Install](/install/)
|
||||
- [Quickstart](/quickstart/)
|
||||
- [Tunnels](/tunnels/)
|
||||
- [Troubleshooting](/troubleshooting/)
|
||||
|
||||
## Entdecken
|
||||
|
||||
- [Projects](/projects/) und [Worktree Sessions](/worktrees/) — deine Arbeit organisieren und isolieren
|
||||
- [Providers, Models & Agents](/providers/) — OpenCode verbinden und ein Modell wählen
|
||||
- [Git & GitHub Workflows](/git/) — commits erstellen, prüfen und PRs öffnen
|
||||
- [Security](/security/) und [Tunnels](/tunnels/) — deine Instanz schützen und erreichen
|
||||
|
||||
## Wofür OpenChamber gedacht ist
|
||||
|
||||
OpenChamber ist für die Teile des KI-Codings gedacht, die von einer Leitstelle profitieren: verzweigende Sessions, Diffs prüfen, Terminals verwalten, den Fortschritt von Tools beobachten, Projektaktionen ausführen und das gesamte Board sichtbar halten, während der Agent arbeitet.
|
||||
@@ -0,0 +1,33 @@
|
||||
---
|
||||
title: Installieren
|
||||
description: Installiere OpenChamber für Desktop, Web oder VS Code.
|
||||
---
|
||||
|
||||
# Installieren
|
||||
|
||||
Es gibt drei Möglichkeiten, OpenChamber auszuführen:
|
||||
|
||||
- Desktop-App für macOS
|
||||
- Web-App, die vom CLI gehostet wird und die du wie eine Handy-App installieren kannst (eine PWA)
|
||||
- VS-Code-Erweiterung
|
||||
|
||||
## Voraussetzung
|
||||
|
||||
Installiere zuerst [OpenCode](https://opencode.ai) — OpenChamber läuft darauf auf.
|
||||
|
||||
## Web + PWA
|
||||
|
||||
```bash
|
||||
curl -fsSL https://raw.githubusercontent.com/openchamber/openchamber/main/scripts/install.sh | bash
|
||||
openchamber --ui-password be-creative-here
|
||||
```
|
||||
|
||||
Öffne die URL, die das CLI ausgibt (normalerweise `http://localhost:3000`). Du solltest die OpenChamber-Session-Liste sehen. Damit du sie griffbereit hast, kannst du im Adressfeld deines Browsers über die Option „Installieren“ daraus eine App machen.
|
||||
|
||||
## Desktop
|
||||
|
||||
Lade den aktuellen Desktop-Build von der GitHub-Releases-Seite oder der OpenChamber-Downloadseite herunter. Öffne ihn und melde dich in deinem gewohnten OpenCode-Workflow an.
|
||||
|
||||
## VS Code
|
||||
|
||||
Installiere sie aus dem VS Code Marketplace und melde dich in deinem gewohnten OpenCode-Workflow an. Die OpenChamber-Ansicht öffnet sich dann in der Seitenleiste.
|
||||
@@ -0,0 +1,26 @@
|
||||
---
|
||||
title: Magische Prompts
|
||||
description: Passe die eingebauten Prompts an, die hinter OpenChambers automatisierten Abläufen stehen.
|
||||
---
|
||||
|
||||
# Magische Prompts
|
||||
|
||||
OpenChamber verwendet im Hintergrund eingebaute Prompts, wenn etwas automatisch geschieht — eine Commit-Nachricht schreiben, einen PR entwerfen, ein Issue prüfen, einen Konflikt lösen oder eine Sitzung zusammenfassen. Hier kannst du diese Prompts ansehen und umschreiben. Öffne die Seite unter **Einstellungen → Magische Prompts**.
|
||||
|
||||
Für die normale Nutzung brauchst du diese Seite nicht. Nutze sie, wenn ein Ablauf sich anders verhalten soll — etwa bei Commit-Nachrichten in einem bestimmten Stil.
|
||||
|
||||
## Einen Prompt bearbeiten
|
||||
|
||||
1. Öffne **Einstellungen → Magische Prompts**.
|
||||
2. Wähle einen Prompt aus den Gruppen in der Seitenleiste — Git, GitHub, Planung und Sitzung.
|
||||
3. Bearbeite den Text und speichere ihn.
|
||||
|
||||
Einige Prompts haben einen sichtbaren Teil (die Nachricht, die du sehen würdest) und einen Anweisungsteil (versteckte Hinweise für den Agenten). Prompts können `{{placeholders}}` enthalten, die OpenChamber einsetzt, zum Beispiel den Diff oder den Issue-Titel — lass diese unverändert.
|
||||
|
||||
## Zurücksetzen
|
||||
|
||||
Anders entschieden? Jeder Prompt hat **Auf Standard zurücksetzen**, und es gibt **Alle zurücksetzen**, wenn du überall neu anfangen möchtest.
|
||||
|
||||
## Weiterführend
|
||||
|
||||
- [Git- & GitHub-Workflows](/git/) — viele dieser Prompts treiben die Git-Abläufe an
|
||||
@@ -0,0 +1,30 @@
|
||||
---
|
||||
title: MCP-Server
|
||||
description: Füge MCP-Server hinzu, damit Agents zusätzliche Werkzeuge erhalten.
|
||||
---
|
||||
|
||||
# MCP-Server
|
||||
|
||||
Ein MCP-Server gibt deinen Agents zusätzliche Werkzeuge — etwa um eine Datenbank zu durchsuchen, eine API aufzurufen oder einen genutzten Dienst auszulesen. Du fügst sie unter **Einstellungen → MCP** hinzu.
|
||||
|
||||
## Einen Server hinzufügen
|
||||
|
||||
1. Öffne **Einstellungen → MCP**.
|
||||
2. Füge einen Server hinzu und wähle seinen Typ:
|
||||
- **lokal** — OpenChamber führt einen Befehl auf deinem Rechner aus. Du gibst den auszuführenden Befehl an und, falls nötig, Umgebungsvariablen.
|
||||
- **entfernt** — OpenChamber verbindet sich mit einer URL, die jemand anderes hostet. Du gibst die URL und alle nötigen Header an (zum Beispiel ein Auth-Token).
|
||||
3. Speichere. Der Server ist standardmäßig eingeschaltet; du kannst ihn deaktivieren, ohne ihn zu löschen.
|
||||
|
||||
## Wo es gilt
|
||||
|
||||
Wähle den Geltungsbereich, wenn du einen Server hinzufügst:
|
||||
|
||||
- **persönlich** — in jedem Projekt verfügbar
|
||||
- **projektbezogen** — nur im aktuellen Projekt verfügbar und zusammen mit den übrigen Projekteinstellungen gespeichert
|
||||
|
||||
Servernamen verwenden Kleinbuchstaben, Ziffern, Bindestriche und Unterstriche.
|
||||
|
||||
## Weiterführend
|
||||
|
||||
- [Provider, Modelle & Agents](/providers/) — verbinde zuerst ein Modell
|
||||
- [Skills](/skills/) — eine weitere Möglichkeit, die Fähigkeiten von Agents zu erweitern
|
||||
@@ -0,0 +1,43 @@
|
||||
---
|
||||
title: Mobile Apps & PWA
|
||||
description: Installiere die OpenChamber-App auf iOS oder Android und verbinde sie mit deinem Server.
|
||||
---
|
||||
|
||||
# Mobile Apps & PWA
|
||||
|
||||
OpenChamber hat native Apps für iPhone und Android, damit du Sitzungen verfolgen, auf Agenten antworten und Arbeiten von deinem Telefon aus verwalten kannst — zu Hause über WLAN oder von überall über das [Private Relay](/private-relay/).
|
||||
|
||||
## App installieren
|
||||
|
||||
- **iPhone/iPad** — tritt der [TestFlight-Beta](https://testflight.apple.com/join/5ek6GU1E) bei
|
||||
- **Android** — lade das APK aus dem [latest release](https://github.com/openchamber/openchamber/releases/latest) herunter
|
||||
|
||||
## Mit deinem Server verbinden
|
||||
|
||||
1. Öffne auf dem Computer mit OpenChamber **Settings → Remote Instances → Connect to this server** und drücke **Add a device**.
|
||||
2. Wähle **Anywhere** (oder **Home network only**, wenn du das Telefon nur zu Hause nutzt) und drücke **Create QR code**.
|
||||
3. Tippe in der Mobile App auf **Scan QR code** und halte die Kamera darauf.
|
||||
|
||||
Die App verbindet sich und merkt sich den Server. Der QR-Code ist nur einmal verwendbar, und jedes Gerät erhält sein eigenes, widerrufbares Token — siehe [Connect a Device](/connect-devices/) für die sichere Kopplung.
|
||||
|
||||
Du kannst die App mit mehreren Servern koppeln und im Instanzenbereich zwischen ihnen wechseln; die App zeigt bei jedem an, ob er erreichbar ist und ob du über das lokale Netzwerk oder das Relay verbunden bist.
|
||||
|
||||
## PWA (Browser-Installation)
|
||||
|
||||
Du willst gar keinen App-Store? Die Web-App lässt sich direkt aus dem Browser installieren:
|
||||
|
||||
- **desktop browser** — nutze die Option **Install** in der Adressleiste
|
||||
- **iPhone/iPad (Safari)** — Teilen → **Add to Home Screen**
|
||||
- **Android (Chrome)** — Menü → **Install app** / **Add to Home Screen**
|
||||
|
||||
Um die PWA von außerhalb deines Netzwerks zu erreichen, brauchst du einen [Tunnel](/tunnels/) und ein starkes [UI password](/security/) — die nativen Apps übernehmen das für dich über das Relay.
|
||||
|
||||
## Mobile Einstellungen
|
||||
|
||||
Unter **Settings → OpenChamber** passen ein paar Optionen die mobile und installierte Nutzung an — der Installationsname der App, die Bildschirmausrichtung und das Verhalten der Bildschirmtastatur.
|
||||
|
||||
## Verwandt
|
||||
|
||||
- [Connect a Device](/connect-devices/) — Kopplung, einmalige QR-Codes und Geräteverwaltung
|
||||
- [Private Relay](/private-relay/) — wie "Anywhere"-Zugriff funktioniert
|
||||
- [Security](/security/) — die UI schützen, bevor du sie freigibst
|
||||
@@ -0,0 +1,34 @@
|
||||
---
|
||||
title: Multi-run
|
||||
description: Führe dieselbe Aufforderung gleichzeitig über mehrere Modelle oder Sitzungen aus.
|
||||
---
|
||||
|
||||
# Multi-run
|
||||
|
||||
Multi-run startet mehrere Sitzungen aus einem einzigen Formular — praktisch, um dieselbe Aufgabe mit verschiedenen Modellen zu testen und die Ergebnisse zu vergleichen. Öffne es über die Schaltfläche oben in der Sitzungs-Seitenleiste.
|
||||
|
||||
## Einen Multi-run starten
|
||||
|
||||
1. Öffne den Multi-run-Startbildschirm.
|
||||
2. Wähle das Projekt und benenne die Run-Gruppe.
|
||||
3. Schreibe die Aufforderung und wähle die Modelle aus, mit denen sie ausgeführt werden soll (bis zu fünf pro Gruppe).
|
||||
4. Entscheide, ob du **Runs isolieren** möchtest.
|
||||
5. Starte.
|
||||
|
||||
Jedes Modell erhält seine eigene Sitzung, und alle beginnen mit deiner Aufforderung.
|
||||
|
||||
## Isolierte Runs
|
||||
|
||||
Aktiviere **Runs isolieren**, damit jeder Run seinen eigenen [Worktree](/worktrees/) und Branch bekommt und sie sich nie dieselben Dateien teilen. Dafür brauchst du ein Git-Repo — für Ordner, die keines sind, wird es automatisch deaktiviert. Wähle den Branch, von dem die Runs starten.
|
||||
|
||||
Ohne Isolation ist jeder Run einfach eine normale Sitzung im Projektordner.
|
||||
|
||||
## Ergebnisse vergleichen
|
||||
|
||||
Jeder Run ist eine normale Sitzung, die du öffnen, lesen und behalten oder verwerfen kannst. Wenn du Runs gestartet hast, um Ansätze zu vergleichen, prüfe sie nebeneinander und nimm den besten mit.
|
||||
|
||||
Wenn ein einzelner Run nicht startet, werden die anderen trotzdem ausgeführt — du siehst dann nur weniger Sitzungen, als du angefordert hast.
|
||||
|
||||
## Verwandt
|
||||
|
||||
- [Worktree-Sitzungen](/worktrees/) — wie Isolation unter der Haube funktioniert
|
||||
@@ -0,0 +1,37 @@
|
||||
---
|
||||
title: Projektnotizen, Todos & Pläne
|
||||
description: Halte Notizen, eine Todo-Liste und gespeicherte Pläne für jedes Projekt fest.
|
||||
---
|
||||
|
||||
# Projektnotizen, Todos & Pläne
|
||||
|
||||
Jedes Projekt hat seinen eigenen Arbeitsbereich für Notizen, eine Todo-Liste und gespeicherte Pläne. Sie gehören zum Projekt und nicht zu einer einzelnen Session, also bleiben sie erhalten, wenn du zwischen Sessions wechselst. Du findest sie im Tab **Kontext** der rechten Seitenleiste (auf Mobilgeräten ein eigener Tab).
|
||||
|
||||
## Notizen
|
||||
|
||||
Ein freies Notizfeld für alles, woran du dich zum Projekt erinnern möchtest. Es speichert automatisch, während du tippst.
|
||||
|
||||
## Todos
|
||||
|
||||
Eine einfache Checkliste. Füge Einträge hinzu, hake sie ab, ordne sie per Drag-and-drop um und lösche die erledigten.
|
||||
|
||||
Jedes Todo hat ein Menü **Senden**, damit du es an den Agenten übergeben kannst:
|
||||
|
||||
- an die aktuelle Session senden
|
||||
- mit ihm eine neue Session starten
|
||||
- mit ihm eine neue [Worktree-Session](/worktrees/) starten (nur wenn das Projekt ein Git-Repo ist)
|
||||
|
||||
## Pläne
|
||||
|
||||
Ein Ort, um längere Pläne als gespeicherte Dateien aufzubewahren. Du kannst:
|
||||
|
||||
- einen Plan aus einer Markdown- oder Textdatei importieren
|
||||
- einen Plan öffnen, um ihn im Seitenpanel zu lesen
|
||||
- Pläne löschen, die du nicht mehr brauchst
|
||||
|
||||
Du solltest danach wieder im Kontext-Tab landen — mit gespeicherter Notiz, abgehakter Todo oder gelistetem Plan; so erkennst du, dass es geklappt hat.
|
||||
|
||||
## Verwandtes
|
||||
|
||||
- [Worktree-Sessions](/worktrees/) — eine Todo in einem eigenen Branch ausführen
|
||||
- [Projekte](/projects/) — diese gehören zum aktiven Projekt
|
||||
@@ -0,0 +1,34 @@
|
||||
---
|
||||
title: Benachrichtigungen
|
||||
description: Lass dich benachrichtigen, wenn eine Sitzung deine Aufmerksamkeit braucht oder fertig ist.
|
||||
---
|
||||
|
||||
# Benachrichtigungen
|
||||
|
||||
Benachrichtigungen sagen dir, wenn etwas deine Aufmerksamkeit braucht, damit du nicht ständig auf den Bildschirm schauen musst — eine Sitzung ist fertig, hat einen Fehler, stellt eine Frage oder braucht eine Berechtigung für etwas. Du richtest sie unter **Einstellungen → OpenChamber → Benachrichtigungen** ein.
|
||||
|
||||
## Aktivieren
|
||||
|
||||
1. Öffne **Einstellungen → OpenChamber → Benachrichtigungen**.
|
||||
2. Erlaube Benachrichtigungen, wenn dein Browser oder System dich danach fragt.
|
||||
3. Wähle aus, worüber du informiert werden möchtest:
|
||||
- eine Sitzung **endet**
|
||||
- eine Sitzung **hat einen Fehler**
|
||||
- eine Sitzung **stellt eine Frage**
|
||||
- eine Sitzung braucht **eine Berechtigung**
|
||||
- **Unteraufgaben** sind abgeschlossen
|
||||
|
||||
## Wie sie bei dir ankommen
|
||||
|
||||
- auf dem **Desktop** bekommst du native Systembenachrichtigungen
|
||||
- in einem **Browser oder einer installierten App** bekommst du Web-Push-Benachrichtigungen, damit sie auch ankommen, wenn der Tab im Hintergrund ist
|
||||
|
||||
Sitzungen, die auf automatisches Annehmen gesetzt sind, belästigen dich nicht mit Berechtigungsbenachrichtigungen.
|
||||
|
||||
## Die Formulierungen anpassen
|
||||
|
||||
Jede Art von Benachrichtigung hat einen Titel und eine Nachrichtenvorlage, die du bearbeiten kannst, mit Feldern wie Agentenname und Modell. Außerdem gibt es eine Begrenzung, wie viel der letzten Nachricht eingefügt wird, damit Benachrichtigungen kurz bleiben.
|
||||
|
||||
## Weiterführend
|
||||
|
||||
- [Sprachmodus](/voice/) — lass dir Antworten stattdessen vorlesen
|
||||
@@ -0,0 +1,97 @@
|
||||
---
|
||||
title: OpenCode-Server
|
||||
description: Verbinde OpenChamber mit einem lokalen oder entfernten OpenCode-Server.
|
||||
---
|
||||
|
||||
# OpenCode-Server
|
||||
|
||||
OpenChamber läuft auf einem OpenCode-Server auf. Standardmäßig startet es einen für dich, sodass du nichts tun musst. Diese Seite brauchst du nur, wenn du OpenChamber auf einen Server zeigen lassen willst, den du bereits betreibst, oder den Server verwalten willst, den es startet.
|
||||
|
||||
## Wie OpenChamber einen Server findet
|
||||
|
||||
Wenn OpenChamber startet, sucht es in dieser Reihenfolge nach einem Server:
|
||||
|
||||
1. einen Server wiederverwenden, den es bereits gestartet hat
|
||||
2. zu einem externen verbinden, wenn du es so angegeben hast (siehe unten)
|
||||
3. einen Server am Standard-Port automatisch erkennen (`4096`)
|
||||
4. andernfalls den eigenen starten und verwalten
|
||||
|
||||
Wenn nichts konfiguriert ist, geschieht Schritt 4 automatisch und du bist startklar.
|
||||
|
||||
## Mit einem Server verbinden, den du bereits betreibst
|
||||
|
||||
Setze diese Variablen, bevor du OpenChamber startest:
|
||||
|
||||
```bash
|
||||
OPENCODE_HOST=http://localhost:4096 OPENCODE_SKIP_START=true openchamber
|
||||
```
|
||||
|
||||
- `OPENCODE_HOST` — die vollständige Adresse deines OpenCode-Servers einschließlich des Ports (ein Wert wie `http://localhost:4096`). Sie darf am Ende keinen Pfad haben.
|
||||
- `OPENCODE_SKIP_START=true` — weist OpenChamber an, keinen eigenen Server zu starten.
|
||||
|
||||
Wenn du nur den Port ändern musst, setze `OPENCODE_PORT` statt `OPENCODE_HOST`.
|
||||
|
||||
Wenn `OPENCODE_HOST` keinen Port hat oder einen Pfad enthält, ignoriert OpenChamber ihn und fällt darauf zurück, den eigenen Server zu starten. Achte beim Start auf eine `[config]`-Warnung in den Logs, wenn eine erwartete Verbindung nicht zustande kam.
|
||||
|
||||
## Den Server über das CLI verwalten
|
||||
|
||||
```bash
|
||||
openchamber status
|
||||
openchamber logs
|
||||
openchamber restart
|
||||
openchamber stop
|
||||
```
|
||||
|
||||
`openchamber` allein startet den Server im Hintergrund. Füge `--foreground` hinzu, damit er an dein Terminal gebunden bleibt.
|
||||
|
||||
## OpenChamber beim Anmelden starten
|
||||
|
||||
Verwende `startup enable`, um einen nativen Benutzerdienst zu installieren. OpenChamber nutzt `launchd` auf macOS, `systemd --user` auf Linux und den Taskplaner auf Windows.
|
||||
|
||||
```bash
|
||||
openchamber startup enable
|
||||
openchamber startup status
|
||||
openchamber startup disable
|
||||
```
|
||||
|
||||
Um die UI zu schützen, setze das Passwort beim Aktivieren des Dienstes:
|
||||
|
||||
```bash
|
||||
OPENCHAMBER_UI_PASSWORD='secret' openchamber startup enable
|
||||
```
|
||||
|
||||
Für einen headless Server, der sich beim Anmelden startet und für Desktop- oder Mobile-Clients gedacht ist, füge `--api-only` und einen erreichbaren Host hinzu:
|
||||
|
||||
```bash
|
||||
openchamber startup enable --port 3000 --api-only --host 0.0.0.0 --ui-password secret
|
||||
```
|
||||
|
||||
`startup enable` speichert deine aktuelle Umgebung als Schnappschuss im Dienst, damit er sich eher so verhält, als würdest du `openchamber` aus derselben Shell starten. So bleiben Provider-Tokens, `PATH`, SSH-Agent-Einstellungen und andere CLI-Auth-/Konfigurationsvariablen verfügbar. Verwende `--no-env-snapshot`, wenn du eine minimale Dienstenumgebung willst.
|
||||
|
||||
Der Startup-Dienst merkt sich `--port`, `--host`, `--ui-password` und `--api-only`. CLI-Neustarts und Update-Neustarts verwenden diese gespeicherten Einstellungen wieder.
|
||||
|
||||
Um einen Verbindungslink für eine andere OpenChamber-App zu erstellen, verwende:
|
||||
|
||||
```bash
|
||||
openchamber connect-url --port 3000 --server http://your-host:3000 --qr
|
||||
```
|
||||
|
||||
Führe `openchamber connect-url --help` aus, um alle Link-Optionen zu sehen, einschließlich `--name`, `--lan`, `--server`, `--api-only`, `--ui-password` und `--qr`.
|
||||
|
||||
Du kannst Tunnel für diesen laufenden Dienst weiterhin unabhängig verwalten:
|
||||
|
||||
```bash
|
||||
openchamber tunnel start --port 3000
|
||||
openchamber tunnel stop --port 3000
|
||||
```
|
||||
|
||||
Das Stoppen des Tunnels startet weder den Dienst noch die App neu.
|
||||
|
||||
## „OpenCode wird neu gestartet“
|
||||
|
||||
Während der Server startet oder neu startet, zeigt OpenChamber den Status „OpenCode wird neu gestartet“ an und pausiert Anfragen, bis er bereit ist. Das ist direkt nach dem Start oder einem Neustart normal. Wenn er nie verschwindet, siehe [OpenCode-Verbindung](/troubleshooting/opencode-connection/).
|
||||
|
||||
## Verwandtes
|
||||
|
||||
- [Providers, Models & Agents](/providers/) — festlegen, womit der Server spricht
|
||||
- [OpenCode-Verbindung](/troubleshooting/opencode-connection/) — falls keine Verbindung möglich ist
|
||||
@@ -0,0 +1,32 @@
|
||||
---
|
||||
title: Vorschau & Entwicklungsserver
|
||||
description: Öffne einen laufenden Entwicklungsserver direkt in OpenChamber.
|
||||
---
|
||||
|
||||
# Vorschau & Entwicklungsserver
|
||||
|
||||
Wenn du einen Entwicklungsserver startest, kann OpenChamber ihn direkt in der App öffnen statt in einem separaten Browser-Tab — so kannst du deine Seite neben dem Chat sehen, ihre Konsole aufzeichnen und Elemente anstupsen, um Fragen dazu zu stellen.
|
||||
|
||||
## Eine Vorschau öffnen
|
||||
|
||||
OpenChamber überwacht die Terminalausgabe auf eine lokale Adresse (die `Local:`-Zeile, die Werkzeuge wie Vite, Next.js oder Astro ausgeben). Sobald es eine findet:
|
||||
|
||||
- erscheint im Terminal eine Schaltfläche **Open preview**
|
||||
- öffnet eine [Projektaktion](/project-actions/) mit aktiviertem Auto-Open die Vorschau für dich
|
||||
- kann auch ein lokaler Link in einer Chatnachricht sie öffnen
|
||||
|
||||
Die Seite lädt im Seitenbereich. Nur lokale Adressen (auf deinem eigenen Rechner) können als Vorschau geöffnet werden.
|
||||
|
||||
## Konsole und Inspektion
|
||||
|
||||
Im Vorschau-Bereich kannst du:
|
||||
|
||||
- die **Konsole** der Seite beobachten — Fehler, Warnungen und Protokolle, so gefiltert, wie du möchtest
|
||||
- **inspect** einschalten, auf ein beliebiges Element klicken und eine Notiz dazu senden — Selektor, Stile, Position und ein Screenshot — direkt in den Chat
|
||||
|
||||
Das ist der schnellste Weg, dem Agenten "diese Schaltfläche hier" zu sagen, ohne sie beschreiben zu müssen.
|
||||
|
||||
## Verwandt
|
||||
|
||||
- [Projektaktionen](/project-actions/) — einen Server automatisch öffnen, wenn du ihn startest
|
||||
- [Desktop-Browser](/desktop-browser/) — dieselben Werkzeuge für jede Seite, auf dem Desktop
|
||||
@@ -0,0 +1,44 @@
|
||||
---
|
||||
title: Privates Relay
|
||||
description: Erreiche deinen OpenChamber-Server von überall über ein Ende-zu-Ende-verschlüsseltes Relay — ohne Ports, ohne Tunnel, ohne Einrichtung.
|
||||
---
|
||||
|
||||
# Privates Relay
|
||||
|
||||
Das OpenChamber Private Relay ermöglicht es deinen gekoppelten Geräten, deinen Server von überall aus zu erreichen — im Mobilfunknetz, im Café, in einer anderen Stadt — ohne Ports zu öffnen, einen Tunnel einzurichten oder deinen Rechner direkt mit dem Internet zu verbinden. Die Einrichtung ist selbstständig: Ein Gerät mit **Anywhere** unter [Connect a Device](/connect-devices/) zu koppeln reicht aus.
|
||||
|
||||
## So funktioniert es
|
||||
|
||||
Dein Server baut eine ausgehende Verbindung zur Relay-Infrastruktur von OpenChamber auf und hält sie offen. Wenn eines deiner Geräte außerhalb deines Netzwerks ist, verbindet es sich ebenfalls mit dem Relay, und das Relay leitet die verschlüsselten Daten zwischen beiden weiter. Auf deinem Rechner lauscht nichts auf eingehende Verbindungen aus dem Internet.
|
||||
|
||||
Wenn eine direkte Verbindung verfügbar ist — du bist wieder zu Hause im selben WLAN — bevorzugen deine Geräte sie und umgehen das Relay vollständig.
|
||||
|
||||
## Was das Relay sehen kann und was nicht
|
||||
|
||||
Das Relay ist ein blinder Kurier, kein Vermittler:
|
||||
|
||||
- **Ende-zu-Ende verschlüsselt.** Dein Gerät und dein Server handeln Verschlüsselungsschlüssel direkt miteinander aus. Das Relay leitet nur versiegelte Daten weiter, für die es keine Schlüssel hat — es kann weder deinen Code noch deine Prompts oder Passwörter lesen.
|
||||
- **Nur deine Geräte können sich verbinden.** Ein Gerät muss ein Token besitzen, das über [one-time pairing](/connect-devices/) von *deinem* Server ausgestellt wurde. Niemand kann deinen Server über das Relay entdecken oder ohne ein von dir erstelltes Token darauf zugreifen — und du kannst jedes Token jederzeit widerrufen.
|
||||
- **Pairing-Links sind nur einmal verwendbar.** Ein QR-Code zum Koppeln funktioniert genau einmal und läuft ab, wenn er nicht verwendet wird; ein geleakter alter Link ist also wertlos.
|
||||
- **Nichts wird geteilt, bevor du es erlaubst.** Das Relay bleibt aus, bis du es aktivierst oder ein Gerät darüber koppelst, und du kannst es jederzeit deaktivieren — Geräte, die darüber verbunden sind, werden sofort getrennt.
|
||||
|
||||
## Wann es läuft
|
||||
|
||||
Das Relay verwaltet seinen Lebenszyklus selbst — es gibt keinen Schalter, den du dir merken musst:
|
||||
|
||||
- **Es startet bei Bedarf.** Das Erstellen einer **Anywhere**-Kopplung schaltet das Relay ein, und es kommt nach einem Neustart zurück, solange noch ein gekoppeltes Gerät davon abhängt.
|
||||
- **Es stoppt von selbst.** Sobald kein Gerät und keine ausstehende Kopplung das Relay mehr nutzt — zum Beispiel nachdem du das letzte Relay-gekoppelte Gerät widerrufen hast — fährt es automatisch herunter.
|
||||
|
||||
**Settings → Remote Instances → OpenChamber Relay** zeigt den Live-Status (Connected, Reconnecting, …) und wie viele Geräte gerade darüber verbunden sind. Dort kannst du auch **Disable** drücken, um den Relay-Zugriff sofort zu beenden; Geräte im lokalen Netzwerk sind davon nicht betroffen.
|
||||
|
||||
## Relay oder ein Tunnel?
|
||||
|
||||
- Nutze das **Relay**, um von deinen eigenen gekoppelten Geräten aus deinen eigenen Server zu erreichen. Es kommt ohne Einrichtung aus, und nichts ist öffentlich exponiert.
|
||||
- Nutze einen [Tunnel](/tunnels/), wenn du eine einfache **öffentliche URL** brauchst — zum Beispiel um OpenChamber in einem normalen Browser auf einem Rechner zu öffnen, den du nicht koppeln kannst, oder um Zugriff hinter einem [UI password](/security/) zu teilen.
|
||||
|
||||
## Verwandt
|
||||
|
||||
- [Connect a Device](/connect-devices/) — ein Gerät mit einem einmaligen QR-Code koppeln
|
||||
- [Mobile Apps](/mobile/) — die iOS- oder Android-App installieren
|
||||
- [Security](/security/) — Passwörter, Passkeys und Grundlagen der Freigabe
|
||||
- [Remote access](/troubleshooting/remote-access/) — wenn eine Verbindung nicht zustande kommt
|
||||
@@ -0,0 +1,28 @@
|
||||
---
|
||||
title: Projektaktionen
|
||||
description: Speichere Befehle, die du oft ausführst, und starte sie mit einem Klick.
|
||||
---
|
||||
|
||||
# Projektaktionen
|
||||
|
||||
Eine Projektaktion ist ein Shell-Befehl, den du einmal speicherst und dann mit einem Klick ausführst — dein Entwicklungsserver, ein Build, ein Testlauf. Jedes Projekt hat seine eigene Liste. Richte sie unter **Einstellungen → Projekte → Projektaktionen** ein.
|
||||
|
||||
## Eine Aktion hinzufügen
|
||||
|
||||
1. Öffne **Einstellungen → Projekte** und suche den Bereich **Projektaktionen**.
|
||||
2. Füge eine Aktion hinzu, gib ihr einen Namen, wähle ein Symbol und gib den auszuführenden Befehl ein.
|
||||
3. Speichern.
|
||||
|
||||
Du kannst eine Aktion auf bestimmte Betriebssysteme beschränken, wenn ein Befehl nur auf einem davon sinnvoll ist.
|
||||
|
||||
## Eine Aktion ausführen
|
||||
|
||||
Aktionen liegen in einem Menü im App-Header. Klicke auf eine und OpenChamber führt sie in einem Terminal in deinem Projektordner aus und wechselt dich in die Terminalansicht, damit du die Ausgabe verfolgen kannst. Stoppe sie über dasselbe Menü.
|
||||
|
||||
## Einen Entwicklungsserver automatisch öffnen
|
||||
|
||||
Aktiviere **auto-open URL** für eine Aktion, die einen Server startet. OpenChamber überwacht die Ausgabe auf eine lokale Adresse und bietet an, sie zu öffnen — siehe [Vorschau & Entwicklungsserver](/preview/). Auf dem Desktop kannst du sie außerdem über einen SSH-Port-Forward leiten.
|
||||
|
||||
## Verwandt
|
||||
|
||||
- [Vorschau & Entwicklungsserver](/preview/) — einen laufenden Entwicklungsserver in OpenChamber öffnen
|
||||
@@ -0,0 +1,20 @@
|
||||
---
|
||||
title: Projektsymbole
|
||||
description: Geben Sie jedem Projekt ein wiedererkennbares Symbol.
|
||||
---
|
||||
|
||||
# Projektsymbole
|
||||
|
||||
Ein Projektsymbol macht es leicht, Ihre Projekte auf einen Blick zu unterscheiden. OpenChamber versucht, eines für Sie zu finden, und Sie können jederzeit Ihr eigenes setzen. Verwalten Sie es unter **Einstellungen → Projekte**.
|
||||
|
||||
## Automatische Erkennung
|
||||
|
||||
Wenn Sie ein Projekt hinzufügen, sucht OpenChamber darin nach einer `favicon`-Datei und verwendet sie als Symbol des Projekts. Wenn Ihr Repo bereits ein Favicon ausliefert, erscheint das Symbol meist einfach — Sie müssen nichts tun.
|
||||
|
||||
## Eigenes festlegen
|
||||
|
||||
Öffnen Sie **Einstellungen → Projekte** und laden Sie ein Bild hoch (PNG, JPEG oder SVG, bis zu 5 MB). Ein benutzerdefiniertes Bild hat Vorrang vor dem automatisch erkannten. Sie können stattdessen auch eine Farbe wählen oder das Bild entfernen, um zur Erkennung zurückzukehren.
|
||||
|
||||
## Verwandt
|
||||
|
||||
- [Projekte](/projects/) — Ihre Projekte benennen, einfärben und organisieren
|
||||
@@ -0,0 +1,34 @@
|
||||
---
|
||||
title: Projekte
|
||||
description: Organisiere deine Arbeit in Projekten und wechsle zwischen ihnen.
|
||||
---
|
||||
|
||||
# Projekte
|
||||
|
||||
Ein Projekt ist ein Ordner auf deinem Computer, den OpenChamber im Blick behält — normalerweise eine Codebasis. Wenn du das Projekt wechselst, wechselt der Ordner, in dem der Agent arbeitet, zusammen mit den Sessions und Einstellungen dieses Projekts.
|
||||
|
||||
## Ein Projekt hinzufügen
|
||||
|
||||
Du kannst ein Projekt an ein paar Stellen hinzufügen:
|
||||
|
||||
- der Eintrag **Projekt hinzufügen** in der Befehlspalette
|
||||
- die Schaltfläche **+** oben in der Session-Seitenleiste
|
||||
- der Ordnerbrowser, wenn du ein Verzeichnis auswählst
|
||||
|
||||
Zeige auf einen Ordner, und OpenChamber merkt ihn sich. Der Name kommt vom Ordner; du kannst ihn später ändern.
|
||||
|
||||
## Projekte wechseln
|
||||
|
||||
Wähle ein Projekt in der Seitenleiste aus, um es aktiv zu machen. Alles — Sessions, Git, Notizen — folgt dem Projekt, das du geöffnet hast.
|
||||
|
||||
## Ein Projekt wiedererkennbar machen
|
||||
|
||||
Öffne **Einstellungen → Projekte**, um einem Projekt einen eigenen Namen, eine Farbe oder ein Symbol zu geben. OpenChamber versucht, automatisch ein Symbol zu finden — siehe [Projekt-Symbole](/project-icons/).
|
||||
|
||||
> In VS Code verwendet OpenChamber immer den Ordner, den du geöffnet hast, als einziges Projekt. Es gibt dort also nichts hinzuzufügen oder umzuschalten. Die Seite mit den Projekteinstellungen ist dort ausgeblendet.
|
||||
|
||||
## Verwandtes
|
||||
|
||||
- [Projektnotizen, Todos & Pläne](/notes-todos-plans/) — Arbeitsnotizen pro Projekt behalten
|
||||
- [Projektaktionen](/project-actions/) — Befehle speichern, die du oft ausführst
|
||||
- [Kontext](/context/) — sehen, wie viel des Modellgedächtnisses eine Session verbraucht
|
||||
@@ -0,0 +1,49 @@
|
||||
---
|
||||
title: Provider, Modelle & Agents
|
||||
description: Verbinde KI-Provider, wähle Modelle aus und richte Agents ein.
|
||||
---
|
||||
|
||||
# Provider, Modelle & Agents
|
||||
|
||||
Bevor OpenChamber etwas tun kann, braucht es mindestens einen verbundenen KI-Provider. Diese Seite erklärt, wie du einen Provider verbindest, ein Modell auswählst und Agents anpasst.
|
||||
|
||||
## Einen Provider verbinden
|
||||
|
||||
1. Öffne **Einstellungen → Provider**.
|
||||
2. Öffne das Menü **Provider hinzufügen** und wähle einen Provider aus, der noch nicht verbunden ist.
|
||||
3. Melde dich auf eine von zwei Arten an, je nach Provider:
|
||||
- **API-Schlüssel** — füge deinen Schlüssel ein und speichere.
|
||||
- **Anmeldung (Gerätefluss)** — OpenChamber zeigt einen Link und einen kurzen Code an. Öffne den Link, gib den Code ein und bestätige. OpenChamber schließt die Verbindung dann selbstständig ab.
|
||||
|
||||
Wenn ein Provider als verbunden angezeigt wird, sind seine Modelle im Chat verfügbar.
|
||||
|
||||
Zum Trennen öffnest du den Provider und entfernst seine Anmeldung.
|
||||
|
||||
## Ein Modell auswählen
|
||||
|
||||
Du wählst das Modell dort aus, wo du arbeitest:
|
||||
|
||||
- im Chat verwendest du den Modellwähler in der Nachrichtenleiste, um Provider und Modell für diese Sitzung festzulegen
|
||||
- pro Agent legst du unten ein Standardmodell fest
|
||||
|
||||
## Agents einrichten
|
||||
|
||||
Ein Agent ist eine benannte Konfiguration — ein Modell, eine Persönlichkeit und das, was er tun darf.
|
||||
|
||||
1. Öffne **Einstellungen → Agents**.
|
||||
2. Wähle einen Agenten aus oder erstelle einen neuen.
|
||||
3. Bearbeite beliebige dieser Felder:
|
||||
- **Beschreibung** — wofür der Agent gedacht ist
|
||||
- **Modell** — sein Standardmodell
|
||||
- **Temperatur** — wie kreativ seine Antworten sind
|
||||
- **Prompt** — dauerhafte Anweisungen, denen er immer folgt
|
||||
- **Tool-Regeln** — welche Werkzeuge er verwenden darf
|
||||
|
||||
## Wo deine Anmeldungen gespeichert werden
|
||||
|
||||
Provider-Anmeldungen werden von OpenCode gespeichert, nicht von OpenChamber, daher sind sie mit der OpenCode-CLI geteilt. Wenn du denselben Provider an mehr als einem Ort einrichtest, gewinnt die spezifischste Einstellung: Eine projektbezogene Einstellung überschreibt deine persönliche.
|
||||
|
||||
## Weiterführend
|
||||
|
||||
- [MCP-Server](/mcp/) — füge Agents zusätzliche Werkzeuge hinzu
|
||||
- [Nutzung & Kontingente](/usage/) — verfolge, wie viel du verbraucht hast
|
||||
@@ -0,0 +1,26 @@
|
||||
---
|
||||
title: Schnellstart
|
||||
description: Starte OpenChamber schnell und wähle die richtige App für die Aufgabe.
|
||||
---
|
||||
|
||||
# Schnellstart
|
||||
|
||||
## Schnellster Weg
|
||||
|
||||
1. Installiere [OpenCode](https://opencode.ai).
|
||||
2. Installiere das OpenChamber-CLI (siehe [Installieren](/install/) für den Einzeilenbefehl).
|
||||
3. Führe `openchamber --ui-password be-creative-here` aus.
|
||||
4. Öffne die URL, die das CLI ausgibt (normalerweise `http://localhost:3000`).
|
||||
5. Um es auf deinem Handy zu nutzen, starte einen [Tunnel](/tunnels/) und scanne den QR-Code.
|
||||
|
||||
Du solltest die OpenChamber-Session-Liste in deinem Browser sehen. Wenn sie geladen wird, bist du startklar.
|
||||
|
||||
Verwende ein starkes UI-Passwort, besonders wenn du die Instanz ins Internet öffnen willst.
|
||||
|
||||
Wenn die Seite nicht lädt, sieh unter [Troubleshooting](/troubleshooting/) nach.
|
||||
|
||||
## Welche App soll ich verwenden?
|
||||
|
||||
- verwende **Desktop** für die tägliche Arbeit auf macOS
|
||||
- verwende **Web** für den Remote-Zugriff und zum Prüfen vom Handy aus
|
||||
- verwende **VS Code** für Sessions direkt neben deinem Code
|
||||
@@ -0,0 +1,48 @@
|
||||
---
|
||||
title: Remote-Instanzen
|
||||
description: Verbinde die Desktop-App per SSH mit OpenChamber auf einem anderen Rechner.
|
||||
---
|
||||
|
||||
# Remote-Instanzen
|
||||
|
||||
Die Desktop-App kann per SSH mit OpenChamber auf einem anderen Rechner verbunden werden — einem Arbeitsserver, einer Cloud-Box, einem Homelab — und dessen UI so auf deinen Bildschirm bringen, als wäre sie lokal. Richte das unter **Settings → Remote Instances** ein.
|
||||
|
||||
> Remote-Instanzen sind eine Funktion **nur für den Desktop**. Im Web oder in VS Code verbindest du dich stattdessen über die Umgebungsvariablen in [OpenCode Server](/opencode-server/) mit einem Remote-Server.
|
||||
|
||||
## Remote-Instanz hinzufügen
|
||||
|
||||
1. Öffne **Settings → Remote Instances** und füge eine hinzu.
|
||||
2. Gib den SSH-Befehl an, den du normalerweise für den Zugriff auf den Rechner verwendest, plus einen Spitznamen.
|
||||
3. Wähle, wie OpenChamber dort läuft:
|
||||
- **managed** — OpenChamber installiert und startet sich auf dem entfernten Rechner selbst
|
||||
- **external** — verbinde dich mit einer Instanz, die bereits läuft
|
||||
4. Verbinde dich.
|
||||
|
||||
OpenChamber geht die Schritte durch — Verbindung prüfen, Remote einrichten, Server starten und den Port weiterleiten — und zeigt bei jedem Schritt, wo es gerade ist. Wenn **ready** erreicht ist, wird die entfernte UI lokal geladen.
|
||||
|
||||
## Anmeldedaten
|
||||
|
||||
Du entscheidest, ob SSH- und UI-Passwörter gespeichert werden oder ob du sie jedes Mal eingibst. Wenn die Verbindung abbricht, meldet OpenChamber, welcher Schritt fehlgeschlagen ist, damit du ihn beheben kannst — siehe [Remote access](/troubleshooting/remote-access/).
|
||||
|
||||
## Verbindungslinks
|
||||
|
||||
Wenn auf einem entfernten Rechner bereits OpenChamber läuft, ist ein Kopplungslink der einfachste Weg, die Desktop-App zu verbinden. Öffne auf der UI des entfernten Servers **Settings → Remote Instances → Connect to this server → Add a device**, erstelle einen Link und importiere ihn auf deinem Desktop unter **Settings → Remote Instances → Other OpenChamber servers → Import Link**. Den vollständigen Ablauf findest du unter [Connect a Device](/connect-devices/).
|
||||
|
||||
Ein mit **Anywhere** erstellter Link enthält sowohl eine direkte Adresse als auch eine Route über das [Private Relay](/private-relay/): Die Desktop-App verbindet sich direkt, wenn sie den Server erreichen kann (gleiches Netzwerk), und fällt auf das Ende-zu-Ende-verschlüsselte Relay zurück, wenn du unterwegs bist. Der Status neben jedem gespeicherten Server zeigt, welche Route gerade verwendet wird.
|
||||
|
||||
Du kannst einen Link auch in einem Terminal auf dem entfernten Rechner erstellen:
|
||||
|
||||
```bash
|
||||
openchamber connect-url --port 3000 --server http://your-host:3000 --qr
|
||||
```
|
||||
|
||||
`connect-url` startet den Server zuerst, wenn auf diesem Port nichts läuft. Füge `--api-only` für einen headless Server hinzu, `--lan`, um beim Starten an das LAN zu binden, `--ui-password`, um den Browserzugriff zu schützen, und `--name`, um die gespeicherte Verbindung zu benennen. Füge `--relay` für einen Link hinzu, der auch außerhalb des lokalen Netzwerks funktioniert: Das Gerät bevorzugt die direkte Verbindung, wenn sie erreichbar ist, und fällt auf das [Private Relay](/private-relay/) zurück — die Instanz startet das Relay selbstständig.
|
||||
|
||||
Der erzeugte Link enthält ein Einmal-Geheimnis zum Koppeln. Nach dem Import besitzt das Gerät sein eigenes Client-Token — getrennt vom UI password des Browsers —, das Server-Neustarts überdauert, bis du es auf dem ausstellenden Server widerrufst.
|
||||
|
||||
## Verwandt
|
||||
|
||||
- [Connect a Device](/connect-devices/) — Kopplungslinks, QR-Codes und Geräteverwaltung
|
||||
- [Private Relay](/private-relay/) — wie "Anywhere"-Verbindungen funktionieren
|
||||
- [OpenCode Server](/opencode-server/) — eine Verbindung zu einem entfernten Server in Web oder VS Code herstellen
|
||||
- [Remote access](/troubleshooting/remote-access/) — wenn eine Verbindung nicht zustande kommt
|
||||
@@ -0,0 +1,347 @@
|
||||
---
|
||||
title: Reverse Proxy
|
||||
description: Konfigurieren Sie OpenChamber korrekt hinter Nginx, Nginx Proxy Manager oder einem anderen Reverse Proxy.
|
||||
---
|
||||
|
||||
# Reverse Proxy
|
||||
|
||||
Nutzen Sie diese Seite, wenn OpenChamber hinter Nginx, Nginx Proxy Manager, Caddy, Cloudflare oder einem anderen Reverse Proxy läuft.
|
||||
|
||||
## Bevor Sie es proxyen
|
||||
|
||||
1. Bestätigen Sie zuerst, dass OpenChamber direkt funktioniert.
|
||||
2. Öffnen Sie `http://<server-ip>:3000` oder Ihren benutzerdefinierten Port aus demselben Netzwerk.
|
||||
3. Fügen Sie den Reverse Proxy erst hinzu, wenn die Direktverbindung funktioniert.
|
||||
|
||||
## Was der Proxy unterstützen muss
|
||||
|
||||
- WebSockets für den Live-Nachrichtenverkehr:
|
||||
- `/api/event/ws`
|
||||
- `/api/global/event/ws`
|
||||
- `/api/terminal/ws`
|
||||
- SSE ohne Buffering:
|
||||
- `/api/event`
|
||||
- `/api/global/event`
|
||||
- `/api/notifications/stream`
|
||||
- `/api/openchamber/events`
|
||||
- `/api/terminal/:sessionId/stream`
|
||||
- Große Request-Bodies für Anhänge und Dateioperationen
|
||||
- Lange Read-Timeouts für Live-Streams und Terminal-Sitzungen
|
||||
|
||||
## Wichtige Regeln
|
||||
|
||||
- Aktivieren Sie das Proxying für WebSockets.
|
||||
- Deaktivieren Sie Buffering auf SSE-Routen.
|
||||
- Deaktivieren Sie gzip auf dem Proxy, wenn OpenChamber Antworten bereits komprimiert.
|
||||
- Halten Sie Komprimierung nur in einer Ebene aktiv.
|
||||
- Leiten Sie normale Proxy-Header wie `Host`, `X-Forwarded-For` und `X-Forwarded-Proto` weiter.
|
||||
- Erhöhen Sie die Body-Größenlimits, wenn Nutzer Dateien hochladen.
|
||||
|
||||
## Kurze Checkliste
|
||||
|
||||
- OpenChamber direkt im LAN erreichbar
|
||||
- WebSockets im Proxy aktiviert
|
||||
- SSE-Routen ohne Buffering
|
||||
- `gzip off` auf dem Proxy-Host oder Komprimierung anderweitig deaktiviert
|
||||
- `client_max_body_size` groß genug für Anhänge
|
||||
- `proxy_read_timeout` lang genug für Streams
|
||||
|
||||
## Beispiel: Nginx
|
||||
|
||||
<details>
|
||||
<summary>Beispielkonfiguration anzeigen</summary>
|
||||
|
||||
```nginx
|
||||
client_max_body_size 50M;
|
||||
client_body_buffer_size 50M;
|
||||
proxy_request_buffering off;
|
||||
|
||||
proxy_http_version 1.1;
|
||||
proxy_set_header Connection "";
|
||||
proxy_set_header Host $host;
|
||||
proxy_set_header X-Real-IP $remote_addr;
|
||||
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
|
||||
proxy_set_header X-Forwarded-Proto $scheme;
|
||||
proxy_set_header X-Forwarded-Host $host;
|
||||
|
||||
gzip off;
|
||||
|
||||
location = /api/terminal/ws {
|
||||
proxy_pass http://127.0.0.1:3000;
|
||||
proxy_set_header Upgrade $http_upgrade;
|
||||
proxy_set_header Connection "upgrade";
|
||||
proxy_buffering off;
|
||||
proxy_cache off;
|
||||
proxy_read_timeout 3600s;
|
||||
proxy_send_timeout 3600s;
|
||||
}
|
||||
|
||||
location = /api/global/event/ws {
|
||||
proxy_pass http://127.0.0.1:3000;
|
||||
proxy_set_header Upgrade $http_upgrade;
|
||||
proxy_set_header Connection "upgrade";
|
||||
proxy_buffering off;
|
||||
proxy_cache off;
|
||||
proxy_read_timeout 3600s;
|
||||
proxy_send_timeout 3600s;
|
||||
}
|
||||
|
||||
location = /api/event/ws {
|
||||
proxy_pass http://127.0.0.1:3000;
|
||||
proxy_set_header Upgrade $http_upgrade;
|
||||
proxy_set_header Connection "upgrade";
|
||||
proxy_buffering off;
|
||||
proxy_cache off;
|
||||
proxy_read_timeout 3600s;
|
||||
proxy_send_timeout 3600s;
|
||||
}
|
||||
|
||||
location ~ ^/api/(event|global/event|notifications/stream|openchamber/events)$ {
|
||||
proxy_pass http://127.0.0.1:3000;
|
||||
proxy_set_header Accept "text/event-stream";
|
||||
proxy_set_header Cache-Control "no-cache";
|
||||
proxy_buffering off;
|
||||
proxy_cache off;
|
||||
gzip off;
|
||||
add_header X-Accel-Buffering "no" always;
|
||||
add_header Cache-Control "no-cache, no-transform" always;
|
||||
proxy_read_timeout 3600s;
|
||||
proxy_send_timeout 3600s;
|
||||
}
|
||||
|
||||
location ~ ^/api/terminal/.+/stream$ {
|
||||
proxy_pass http://127.0.0.1:3000;
|
||||
proxy_set_header Accept "text/event-stream";
|
||||
proxy_set_header Cache-Control "no-cache";
|
||||
proxy_buffering off;
|
||||
proxy_cache off;
|
||||
gzip off;
|
||||
add_header X-Accel-Buffering "no" always;
|
||||
add_header Cache-Control "no-cache, no-transform" always;
|
||||
proxy_read_timeout 3600s;
|
||||
proxy_send_timeout 3600s;
|
||||
}
|
||||
|
||||
location /api {
|
||||
proxy_pass http://127.0.0.1:3000;
|
||||
proxy_read_timeout 3600s;
|
||||
proxy_send_timeout 3600s;
|
||||
}
|
||||
|
||||
location / {
|
||||
proxy_pass http://127.0.0.1:3000;
|
||||
}
|
||||
```
|
||||
|
||||
</details>
|
||||
|
||||
## Beispiel: Nginx Proxy Manager
|
||||
|
||||
<details>
|
||||
<summary>Beispiel für den Tab „Advanced“ anzeigen</summary>
|
||||
|
||||
```nginx
|
||||
client_max_body_size 50M;
|
||||
client_body_buffer_size 50M;
|
||||
proxy_request_buffering off;
|
||||
|
||||
proxy_http_version 1.1;
|
||||
proxy_set_header Connection "";
|
||||
proxy_set_header Host $host;
|
||||
proxy_set_header X-Real-IP $remote_addr;
|
||||
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
|
||||
proxy_set_header X-Forwarded-Proto $scheme;
|
||||
proxy_set_header X-Forwarded-Host $host;
|
||||
|
||||
gzip off;
|
||||
|
||||
location = /api/terminal/ws {
|
||||
proxy_pass http://127.0.0.1:3000;
|
||||
proxy_set_header Upgrade $http_upgrade;
|
||||
proxy_set_header Connection "upgrade";
|
||||
proxy_buffering off;
|
||||
proxy_cache off;
|
||||
proxy_read_timeout 3600s;
|
||||
proxy_send_timeout 3600s;
|
||||
proxy_connect_timeout 30s;
|
||||
}
|
||||
|
||||
location = /api/global/event/ws {
|
||||
proxy_pass http://127.0.0.1:3000;
|
||||
proxy_set_header Upgrade $http_upgrade;
|
||||
proxy_set_header Connection "upgrade";
|
||||
proxy_buffering off;
|
||||
proxy_cache off;
|
||||
proxy_read_timeout 3600s;
|
||||
proxy_send_timeout 3600s;
|
||||
proxy_connect_timeout 30s;
|
||||
}
|
||||
|
||||
location = /api/event/ws {
|
||||
proxy_pass http://127.0.0.1:3000;
|
||||
proxy_set_header Upgrade $http_upgrade;
|
||||
proxy_set_header Connection "upgrade";
|
||||
proxy_buffering off;
|
||||
proxy_cache off;
|
||||
proxy_read_timeout 3600s;
|
||||
proxy_send_timeout 3600s;
|
||||
proxy_connect_timeout 30s;
|
||||
}
|
||||
|
||||
location = /api/event {
|
||||
proxy_pass http://127.0.0.1:3000;
|
||||
proxy_set_header Accept "text/event-stream";
|
||||
proxy_set_header Cache-Control "no-cache";
|
||||
proxy_buffering off;
|
||||
proxy_cache off;
|
||||
gzip off;
|
||||
add_header X-Accel-Buffering "no" always;
|
||||
add_header Cache-Control "no-cache, no-transform" always;
|
||||
proxy_read_timeout 3600s;
|
||||
proxy_send_timeout 3600s;
|
||||
proxy_connect_timeout 30s;
|
||||
}
|
||||
|
||||
location = /api/global/event {
|
||||
proxy_pass http://127.0.0.1:3000;
|
||||
proxy_set_header Accept "text/event-stream";
|
||||
proxy_set_header Cache-Control "no-cache";
|
||||
proxy_buffering off;
|
||||
proxy_cache off;
|
||||
gzip off;
|
||||
add_header X-Accel-Buffering "no" always;
|
||||
add_header Cache-Control "no-cache, no-transform" always;
|
||||
proxy_read_timeout 3600s;
|
||||
proxy_send_timeout 3600s;
|
||||
proxy_connect_timeout 30s;
|
||||
}
|
||||
|
||||
location = /api/notifications/stream {
|
||||
proxy_pass http://127.0.0.1:3000;
|
||||
proxy_set_header Accept "text/event-stream";
|
||||
proxy_set_header Cache-Control "no-cache";
|
||||
proxy_buffering off;
|
||||
proxy_cache off;
|
||||
gzip off;
|
||||
add_header X-Accel-Buffering "no" always;
|
||||
add_header Cache-Control "no-cache, no-transform" always;
|
||||
proxy_read_timeout 3600s;
|
||||
proxy_send_timeout 3600s;
|
||||
proxy_connect_timeout 30s;
|
||||
}
|
||||
|
||||
location = /api/openchamber/events {
|
||||
proxy_pass http://127.0.0.1:3000;
|
||||
proxy_set_header Accept "text/event-stream";
|
||||
proxy_set_header Cache-Control "no-cache";
|
||||
proxy_buffering off;
|
||||
proxy_cache off;
|
||||
gzip off;
|
||||
add_header X-Accel-Buffering "no" always;
|
||||
add_header Cache-Control "no-cache, no-transform" always;
|
||||
proxy_read_timeout 3600s;
|
||||
proxy_send_timeout 3600s;
|
||||
proxy_connect_timeout 30s;
|
||||
}
|
||||
|
||||
location ~ ^/api/terminal/.+/stream$ {
|
||||
proxy_pass http://127.0.0.1:3000;
|
||||
proxy_set_header Accept "text/event-stream";
|
||||
proxy_set_header Cache-Control "no-cache";
|
||||
proxy_buffering off;
|
||||
proxy_cache off;
|
||||
gzip off;
|
||||
add_header X-Accel-Buffering "no" always;
|
||||
add_header Cache-Control "no-cache, no-transform" always;
|
||||
proxy_read_timeout 3600s;
|
||||
proxy_send_timeout 3600s;
|
||||
proxy_connect_timeout 30s;
|
||||
}
|
||||
|
||||
location /api {
|
||||
proxy_pass http://127.0.0.1:3000;
|
||||
proxy_read_timeout 3600s;
|
||||
proxy_send_timeout 3600s;
|
||||
proxy_connect_timeout 30s;
|
||||
}
|
||||
|
||||
location / {
|
||||
proxy_pass http://127.0.0.1:3000;
|
||||
}
|
||||
```
|
||||
|
||||
</details>
|
||||
|
||||
Aktivieren Sie für diesen Host außerdem `Websockets Support` in Nginx Proxy Manager.
|
||||
|
||||
## Häufige Fehlersymptome
|
||||
|
||||
### Seite lädt, aber das Senden von Nachrichten schlägt fehl
|
||||
|
||||
- WebSockets sind im Proxy nicht aktiviert
|
||||
- `/api/event/ws` oder `/api/global/event/ws` wird nicht korrekt weitergeleitet
|
||||
|
||||
### Benachrichtigungen oder Live-Status werden nicht aktualisiert
|
||||
|
||||
- eine der SSE-Routen wird gepuffert oder gecacht
|
||||
- `X-Accel-Buffering "no"` fehlt
|
||||
|
||||
### Datei-Uploads schlagen fehl
|
||||
|
||||
- `client_max_body_size` ist zu klein
|
||||
|
||||
### Alles funktioniert lokal, bricht aber nur hinter dem Proxy
|
||||
|
||||
- der Proxy komprimiert und puffert Live-Verkehr
|
||||
- dem Proxy fehlt WebSocket-Unterstützung
|
||||
|
||||
## Beispiel: Caddy
|
||||
|
||||
<details>
|
||||
<summary>Beispielkonfiguration anzeigen</summary>
|
||||
|
||||
```caddy
|
||||
reverse_proxy 127.0.0.1:3000 {
|
||||
# WebSocket-Unterstützung ist in Caddy automatisch vorhanden
|
||||
|
||||
# SSE-Antworten sofort flushen
|
||||
flush_interval -1
|
||||
|
||||
# Host- und Proxy-Header weiterreichen
|
||||
header_up Host {host}
|
||||
header_up X-Real-IP {remote_host}
|
||||
header_up X-Forwarded-For {remote_host}
|
||||
header_up X-Forwarded-Proto {scheme}
|
||||
|
||||
# Timeouts für langlebige Streams erhöhen
|
||||
transport http {
|
||||
read_timeout 3600s
|
||||
write_timeout 3600s
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
</details>
|
||||
|
||||
Caddy behandelt WebSocket-Upgrades automatisch — keine zusätzliche Konfiguration nötig. Die Direktive `flush_interval -1` sorgt dafür, dass SSE-Teilstücke ohne Buffering sofort weitergeleitet werden.
|
||||
|
||||
## Warnung zu CDN und doppelter Komprimierung
|
||||
|
||||
Wenn Sie ein CDN (wie Cloudflare) vor Ihren Reverse Proxy setzen, achten Sie auf doppelte Komprimierung:
|
||||
|
||||
- OpenChamber komprimiert HTTP-Antworten mit gzip (Schwelle 1 KB).
|
||||
- Cloudflare und andere CDNs komprimieren Antworten standardmäßig ebenfalls.
|
||||
- Das kann zu doppelt komprimierten Antworten oder falschen `Content-Encoding`-Headern führen.
|
||||
|
||||
Um das zu vermeiden, deaktivieren Sie die Komprimierung auf **einer** Ebene:
|
||||
|
||||
- **Cloudflare:** Rules → Compression → deaktivieren (oder den Modus „Passthrough“ verwenden).
|
||||
- **Nginx:** `gzip off` (oben in den Beispielen bereits gezeigt).
|
||||
- **Caddy:** Caddy komprimiert standardmäßig nicht erneut, wenn der Upstream bereits komprimierte Inhalte sendet.
|
||||
|
||||
SSE-Streaming-Routen sind von OpenChamber von der Komprimierung ausgeschlossen, das CDN kann sie aber trotzdem puffern. Prüfen Sie in der CDN-Dokumentation, wie sich Buffering auf SSE-Pfaden deaktivieren lässt.
|
||||
|
||||
## Verwandt
|
||||
|
||||
- [Tunnels](/tunnels/)
|
||||
- [Fehlerbehebung](/troubleshooting/)
|
||||
@@ -0,0 +1,35 @@
|
||||
---
|
||||
title: Geplante Aufgaben
|
||||
description: Führe einen Prompt automatisch nach Zeitplan aus.
|
||||
---
|
||||
|
||||
# Geplante Aufgaben
|
||||
|
||||
Eine geplante Aufgabe führt für dich nach Zeitplan einen Prompt aus — zum Beispiel täglich „die Änderungen von gestern zusammenfassen“ oder wöchentlich eine Bereinigung. Wenn sie läuft, startet OpenChamber eine neue Session und sendet den Prompt selbst. Öffne den Scheduler über die Schaltfläche oben in der Session-Seitenleiste.
|
||||
|
||||
## Eine Aufgabe erstellen
|
||||
|
||||
1. Öffne den Dialog für geplante Aufgaben in der Session-Seitenleiste.
|
||||
2. Füge eine Aufgabe hinzu und gib ihr einen Namen.
|
||||
3. Wähle, wann sie läuft:
|
||||
- **daily** — zu einer oder mehreren Zeiten pro Tag
|
||||
- **weekly** — an ausgewählten Wochentagen und Uhrzeiten
|
||||
- **once** — ein einzelnes Datum und eine einzelne Uhrzeit
|
||||
4. Lege fest, was sie tut: den zu sendenden Prompt sowie Provider, Modell und Agent, die verwendet werden sollen. Der Prompt kann ein Slash-Befehl sein, zum Beispiel `/review`.
|
||||
5. Speichern und sicherstellen, dass die Aufgabe aktiviert ist.
|
||||
|
||||
Du kannst jede Aufgabe sofort mit **run now** ausführen, um zu prüfen, ob sie das tut, was du erwartest.
|
||||
|
||||
Aktiviere **Run as goal**, damit der Lauf seinen Prompt bis zum Abschluss verfolgt, statt nach einer Antwort zu stoppen — siehe [Session Goals](/session-goals/).
|
||||
|
||||
## Woran du Erfolg erkennst
|
||||
|
||||
Nach einem Lauf zeigt die Aufgabe, wann sie zuletzt gelaufen ist, ob sie erfolgreich war und einen Link zur Session, die sie erstellt hat. Wenn ein Lauf fehlschlägt, wird dort auch der Fehler angezeigt.
|
||||
|
||||
## Wichtig zu wissen
|
||||
|
||||
Aufgaben werden nur ausgelöst, während der OpenChamber-Server läuft. Wenn du ihn schließt, sind geplante Läufe pausiert, bis er wieder online ist.
|
||||
|
||||
## Verwandtes
|
||||
|
||||
- [Commands & Snippets](/commands-snippets/) — einen Slash-Befehl als Prompt wiederverwenden
|
||||
@@ -0,0 +1,44 @@
|
||||
---
|
||||
title: Sicherheit
|
||||
description: Schützen Sie die UI mit einem Passwort und Passkeys, bevor Sie sie freigeben.
|
||||
---
|
||||
|
||||
# Sicherheit
|
||||
|
||||
OpenChamber gewährt Zugriff auf Ihren Rechner und Ihren Code. Sperren Sie es also ab, bevor jemand außer Ihnen darauf zugreifen kann. Diese Seite behandelt das UI-Passwort, Passkeys und was Sie wissen sollten, bevor Sie OpenChamber in ein Netzwerk exponieren.
|
||||
|
||||
## UI-Passwort setzen
|
||||
|
||||
Starten Sie OpenChamber mit einem Passwort, und die Browser-UI fragt danach:
|
||||
|
||||
```bash
|
||||
openchamber --ui-password be-creative-here
|
||||
```
|
||||
|
||||
Sie können es auch über die Umgebungsvariable `OPENCHAMBER_UI_PASSWORD` setzen, statt es in die Befehlszeile zu schreiben. Nach der Anmeldung merkt sich OpenChamber das Gerät für eine Weile, damit Sie nicht jedes Mal gefragt werden.
|
||||
|
||||
Setzen Sie immer ein Passwort, wenn die Instanz für andere erreichbar ist — besonders über einen [Tunnel](/tunnels/) oder das öffentliche Internet.
|
||||
|
||||
## Passkeys
|
||||
|
||||
Sobald ein Passwort gesetzt ist, können Sie Passkeys (Face ID, Touch ID, ein Sicherheitsschlüssel) für eine schnellere Anmeldung hinzufügen. Fügen Sie sie unter **Einstellungen → OpenChamber → Passkeys** hinzu.
|
||||
|
||||
Passkeys sind an das aktuelle Passwort gebunden. Wenn Sie das Passwort ändern oder entfernen, werden gespeicherte Passkeys gelöscht und Sie fügen sie erneut hinzu.
|
||||
|
||||
## Geräte-Tokens
|
||||
|
||||
Geräte, die über [Ein Gerät verbinden](/connect-devices/) gekoppelt werden, authentifizieren sich mit eigenen gerätespezifischen Tokens, nicht mit dem UI-Passwort. Pairing-Links sind nur einmal nutzbar und laufen ab, wenn sie nicht verwendet werden; jedes gekoppelte Gerät wird unter **Einstellungen → Remote-Instanzen → Mit diesem Server verbinden** aufgeführt, wo Sie es jederzeit widerrufen können. Verbindungen von außerhalb laufen über das [Private Relay](/private-relay/), das Ende-zu-Ende verschlüsselt ist und Ihren Traffic nicht lesen kann.
|
||||
|
||||
## Bevor Sie es freigeben
|
||||
|
||||
- Standardmäßig lauscht OpenChamber nur auf Ihrem eigenen Rechner (`127.0.0.1`). Es braucht eine bewusste Änderung, um breiter zu lauschen, und Sie sollten vorher ein Passwort setzen.
|
||||
- Für Ihre eigenen Geräte bevorzugen Sie [Pairing](/connect-devices/) mit dem [Private Relay](/private-relay/) — dabei wird überhaupt nichts öffentlich freigegeben.
|
||||
- Wenn Sie eine öffentliche URL brauchen, verwenden Sie lieber einen [Tunnel](/tunnels/) oder ein privates Netzwerk (z. B. VPN), statt einen Port ins Internet zu öffnen.
|
||||
- Wenn Sie OpenChamber hinter Ihrem eigenen HTTPS-Server betreiben, sehen Sie sich [Reverse Proxy](/reverse-proxy/) an.
|
||||
|
||||
## Verwandt
|
||||
|
||||
- [Ein Gerät verbinden](/connect-devices/) — einmaliges Pairing und gerätespezifische Tokens
|
||||
- [Private Relay](/private-relay/) — Ende-zu-Ende-verschlüsselter Zugriff von überall
|
||||
- [Tunnel](/tunnels/) — eine öffentliche URL freigeben, wenn Sie eine brauchen
|
||||
- [Reverse Proxy](/reverse-proxy/) — OpenChamber hinter Ihrem eigenen Server betreiben
|
||||
@@ -0,0 +1,73 @@
|
||||
---
|
||||
title: Sitzungsziele
|
||||
description: Verwandelt eine Aufforderung in ein Ziel, auf das der Agent automatisch hinarbeitet.
|
||||
---
|
||||
|
||||
# Sitzungsziele
|
||||
|
||||
Ein Ziel macht aus einer Aufforderung eine Ziellinie. Statt den Agenten nach jeder Antwort mit "continue" anzustupsen, legst du das Ziel einmal fest — und OpenChamber hält die Sitzung automatisch darauf ausgerichtet und prüft nach jedem Zug mit einem unabhängigen Prüfer den Fortschritt. Es läuft weiter, auch wenn du nicht da bist.
|
||||
|
||||
## Ein Ziel starten
|
||||
|
||||
1. Drücke in der Composer-Ansicht die Zielschaltfläche. Sie leuchtet auf — der Zielmodus ist aktiviert.
|
||||
2. Gib deine Aufforderung ein und sende sie ab. Diese Nachricht wird zum Ziel des Vorhabens.
|
||||
|
||||
Das funktioniert in einer bestehenden Sitzung ebenso wie in einem neuen Sitzungsentwurf: Zielmodus aktivieren, die erste Nachricht schreiben, senden — die neue Sitzung startet mit dem bereits aktiven Ziel.
|
||||
|
||||
### Weitere Wege, ein Ziel zu starten
|
||||
|
||||
- **Aus einer Antwort des Agenten**: Im Dialog "Start new session from this answer" aktiviere **Run as goal** — die Antwort wird als Aufgabe übergeben, die die neue Sitzung bis zum Abschluss ausführt (kombiniere das mit **Create worktree** für einen isolierten Lauf).
|
||||
- **Aus einem Plan**: Wenn du einen gespeicherten Plan in einer neuen Sitzung oder einem Worktree umsetzt, aktiviere im Dialog **Run as goal**. Das Ziel übernimmt den Planinhalt als seine Aufgabe, sodass der Prüfer den Fortschritt am tatsächlichen Plan misst.
|
||||
- **Nach Zeitplan**: Aktiviere bei einer [geplanten Aufgabe](/scheduled-tasks/) **Run as goal**, damit wiederkehrende Läufe ihre Aufforderung bis zum Abschluss verfolgen.
|
||||
|
||||
## Eine eigenständige Zielbeschreibung schreiben
|
||||
|
||||
Der Fortschrittsprüfer sieht nur deine Zielbeschreibung und die neueste Antwort des Agenten — nicht den Chatverlauf. Formuliere die Zielnachricht also so, dass auch jemand ohne Gesprächskontext versteht, wie der fertige Zustand aussieht.
|
||||
|
||||
- Gut: "Füge Tests für das Exportmodul hinzu und sorge dafür, dass die gesamte Test-Suite besteht."
|
||||
- Nicht so gut: "Beheb das" oder "Mach mit der Idee weiter."
|
||||
|
||||
Für kleine nachgelagerte Rückfragen mit Kontext brauchst du kein Ziel — sende einfach eine normale Nachricht.
|
||||
|
||||
## So funktioniert es
|
||||
|
||||
Nachdem der Agent anhält und die Sitzung für einen Moment ruhig bleibt, macht OpenChamber Folgendes:
|
||||
|
||||
1. Es bittet ein kleines, günstiges Modell, den letzten Zug gegen das Ziel zu prüfen: weitermachen, fertig oder festgefahren?
|
||||
2. Wenn das Urteil "weitermachen" lautet, sendet es eine Fortsetzungsaufforderung und der Agent nimmt die Arbeit wieder auf.
|
||||
3. Wenn das Ziel nachweislich erreicht ist, ist es abgeschlossen und du bekommst eine Benachrichtigung.
|
||||
4. Wenn der Agent wirklich feststeckt (deine Eingabe braucht), wird das Ziel erst dann als blockiert gestoppt — aber nur nachdem der Prüfer das dreimal in Folge gesagt hat, damit ein einzelner Ausrutscher das Ziel nie beendet.
|
||||
|
||||
Es gibt auch harte Sicherheitsstopps: ein optionales Token-Budget, eine Obergrenze für automatische Fortsetzungen und ein Stopp bei Fehlern in einem Zug. Wenn der Kontext der Sitzung mitten in der Arbeit komprimiert wird, geht das Ziel einfach weiter — in das Kontextfenster zu laufen ist ein Beweis dafür, dass die Arbeit noch nicht fertig war.
|
||||
|
||||
### Stoppen und fortsetzen
|
||||
|
||||
- Die **Stopp-Schaltfläche** bricht den laufenden Zug ab und pausiert das Ziel — dein ausdrückliches "stop" gewinnt immer gegen die Schleife.
|
||||
- **Pause** in der Zielleiste macht aus der anderen Richtung dasselbe: Es pausiert das Ziel und stoppt den laufenden Zug.
|
||||
- Während der Pause kannst du normal chatten — die Schleife bleibt dir aus dem Weg.
|
||||
- **Resume** aktiviert die Schleife neu: Bei einer ruhenden Sitzung geht der Fortsetzungsanstupser sofort raus; wenn der Agent gerade arbeitet, hängt sich die Schleife beim nächsten Halt stillschweigend wieder an.
|
||||
|
||||
## Beobachten und verwalten
|
||||
|
||||
- Die Leiste über dem Composer zeigt die neueste Fortschrittsnotiz, den Status und die Token-Nutzung des Ziels sowie eine Inline-Schaltfläche zum Pausieren/Fortsetzen. Wenn der Agent angehalten hat und das Ziel aktiv ist, zeigt die Leiste ein drehendes **Evaluating…** — das ist das ruhige Zeitfenster und der laufende Audit.
|
||||
- Die Zielschaltfläche bleibt während der Laufzeit blau beleuchtet, wird bei Abschluss grün und bei Blockierung oder erreichtem Budget rot. Drücke sie, um den Zieldialog zu öffnen: Bearbeite das Ziel oder das Budget oder entferne das Ziel. Ein abgeschlossenes Ziel ist schreibgeschützt — entferne es und aktiviere dann ein neues.
|
||||
- In der Sitzungs-Seitenleiste erscheint neben dem Sitzungsdatum ein kleines Zielsymbol, dessen Farbe den Zustand des Ziels widerspiegelt.
|
||||
|
||||
## Benachrichtigungen
|
||||
|
||||
Während ein Ziel aktiv ist, werden die "Agent ist bereit"-Benachrichtigungen pro Zug unterdrückt — sie würden nur die eigenen Fortsetzungen der Zielschleife wiederholen. Wenn das Ziel zur Ruhe kommt (abgeschlossen, blockiert oder Budget erreicht), bekommst du stattdessen eine letzte Benachrichtigung, auf dem Desktop und als mobile Push-Nachricht. Sie folgt derselben Einstellung "bei Abschluss benachrichtigen"; Berechtigungsanfragen, Fragen und Fehlermeldungen funktionieren währenddessen wie gewohnt weiter.
|
||||
|
||||
## Token-Budget
|
||||
|
||||
In **Einstellungen → Chat → Goal** kannst du ein Standard-Token-Budget für neue Ziele festlegen. Wenn ein Ziel sein Budget erreicht, stoppt es als "budget reached" statt weiter zu verbrauchen — du kannst das Budget erhöhen und im Zieldialog fortsetzen.
|
||||
|
||||
## Beachten
|
||||
|
||||
- Die Zielschleife läuft im OpenChamber-Server, nicht in deinem Browser-Tab. Schließe den Tab, sperre das Telefon — der Agent arbeitet weiter, und du bekommst eine Benachrichtigung, wenn das Ziel zur Ruhe kommt. Der Server (Desktop-App oder `openchamber`-Prozess) muss weiterlaufen.
|
||||
- Ziele verwenden den eigenen Provider und das Modell deiner Sitzung, einschließlich der Prüferaufrufe — nichts verlässt die Provider, die du bereits nutzt.
|
||||
- Pro Sitzung immer nur ein Ziel gleichzeitig.
|
||||
|
||||
## Verwandt
|
||||
|
||||
- [Geplante Aufgaben](/scheduled-tasks/) — eine Aufforderung nach Zeitplan ausführen; dort "Run as goal" aktivieren, damit ein geplanter Lauf seine Aufforderung bis zum Abschluss verfolgt
|
||||
- [Benachrichtigungen](/notifications/) — wie du von einem fertigen Ziel erfährst
|
||||
@@ -0,0 +1,27 @@
|
||||
---
|
||||
title: Skills-Katalog
|
||||
description: Fertige Skills durchsuchen und installieren.
|
||||
---
|
||||
|
||||
# Skills-Katalog
|
||||
|
||||
Im Skills-Katalog kannst du Skills installieren, die andere veröffentlicht haben, statt selbst welche zu schreiben. Du öffnest ihn unter **Einstellungen → Skills → Katalog**.
|
||||
|
||||
Zum Schreiben eigener Skills siehe [Skills](/skills/).
|
||||
|
||||
## Einen Skill installieren
|
||||
|
||||
1. Öffne den Katalog.
|
||||
2. Durchsuche die eingebauten Quellen — das Anthropic-Skills-Repo und die ClawdHub-Community-Registry — oder nutze die Suche.
|
||||
3. Wähle einen Skill aus und installiere ihn.
|
||||
4. Entscheide, wo er installiert werden soll: für alles, was du tust, oder nur für das aktuelle Projekt.
|
||||
|
||||
Wenn bereits ein Skill mit demselben Namen existiert, fragt OpenChamber, was geschehen soll — überspringen, überschreiben oder für jeden Skill einzeln entscheiden.
|
||||
|
||||
## Eigene Quelle hinzufügen
|
||||
|
||||
Du kannst jedes Git-Repository als Quelle hinzufügen — entweder mit seinem `owner/repo`-Namen oder mit einer vollständigen Git-URL. Private Repositories brauchen Zugriff auf deinem Rechner (einen SSH-Schlüssel oder gespeicherte Anmeldedaten); wenn sich eine Quelle nicht authentifizieren kann, weist der Katalog darauf hin, statt still zu scheitern.
|
||||
|
||||
## Weiterführend
|
||||
|
||||
- [Skills](/skills/) — installierte Skills erstellen und verwalten
|
||||
@@ -0,0 +1,30 @@
|
||||
---
|
||||
title: Skills
|
||||
description: Erstelle wiederverwendbare Anweisungen, die Agents bei Bedarf laden.
|
||||
---
|
||||
|
||||
# Skills
|
||||
|
||||
Ein Skill ist ein wiederverwendbarer Satz von Anweisungen, den ein Agent bei Bedarf laden kann — zum Beispiel „wie wir Commit-Nachrichten schreiben“ oder „unsere API-Konventionen“. Du verwaltest sie unter **Einstellungen → Skills**.
|
||||
|
||||
Wenn du fertige Skills installieren statt eigene schreiben möchtest, siehe [Skills-Katalog](/skills-catalog/).
|
||||
|
||||
## Einen Skill erstellen
|
||||
|
||||
1. Öffne **Einstellungen → Skills**.
|
||||
2. Erstelle einen Skill und gib ihm einen Namen und eine kurze Beschreibung. Die Beschreibung ist die Grundlage dafür, wann der Agent den Skill anwendet. Sei daher konkret.
|
||||
3. Schreibe die Anweisungen. Füge unterstützende Dateien hinzu, falls der Skill sie braucht.
|
||||
4. Wähle den Speicherort:
|
||||
- **persönlich** — in jedem Projekt verfügbar
|
||||
- **projektbezogen** — nur im aktuellen Projekt verfügbar
|
||||
|
||||
## Einen Skill im Chat verwenden
|
||||
|
||||
Gib mitten in einer Nachricht `/` ein, um die Skill-Auswahl zu öffnen, und wähle dann einen Skill aus. Der Agent lädt für die Antwort die Anweisungen dieses Skills.
|
||||
|
||||
Ein `/` ganz am Anfang der Nachricht öffnet stattdessen [Befehle](/commands-snippets/).
|
||||
|
||||
## Weiterführend
|
||||
|
||||
- [Skills-Katalog](/skills-catalog/) — installiere Skills, die andere veröffentlicht haben
|
||||
- [Befehle & Snippets](/commands-snippets/) — weitere Möglichkeiten, Text im Chat wiederzuverwenden
|
||||
@@ -0,0 +1,48 @@
|
||||
---
|
||||
title: SSH-Hosts & Proxying
|
||||
description: Importiere gespeicherte SSH-Hosts und füge in der Desktop-App zusätzliche SSH-Portweiterleitungen hinzu.
|
||||
---
|
||||
|
||||
# SSH-Hosts & Proxying
|
||||
|
||||
Verwende in der Desktop-App **Settings → Remote Instances**, um gespeicherte SSH-Hosts zu importieren, dich mit einem entfernten Rechner zu verbinden und über dieselbe SSH-Verbindung zusätzliche Ports bereitzustellen.
|
||||
|
||||
> SSH-Hosts und SSH-Proxying sind Funktionen **nur für den Desktop**. Sie verwenden den SSH-Client auf deinem Rechner.
|
||||
|
||||
## SSH-Host importieren
|
||||
|
||||
OpenChamber kann Hosts aus deiner lokalen SSH-Konfiguration lesen, also aus demselben Ort, den auch Befehle wie `ssh work-server` verwenden.
|
||||
|
||||
1. Öffne **Settings → Remote Instances**.
|
||||
2. Wähle einen Host unter **Saved SSH hosts**.
|
||||
3. Wenn es sich um ein Muster handelt, gib das tatsächliche Ziel ein, zum Beispiel `deploy@app.example.com`.
|
||||
4. Speichern und verbinden.
|
||||
|
||||
OpenChamber erstellt mit diesem SSH-Befehl eine Remote-Instanz. Wenn sie **ready** erreicht, öffnet sich die entfernte OpenChamber-UI in der Desktop-App.
|
||||
|
||||
## Zusätzliche Portweiterleitungen hinzufügen
|
||||
|
||||
Jede Remote-Instanz hat den Bereich **Port Forwards**. Verwende ihn, wenn etwas auf einer Seite der SSH-Verbindung einen Port auf der anderen Seite erreichen muss.
|
||||
|
||||
OpenChamber unterstützt drei Weiterleitungstypen:
|
||||
|
||||
- **Local (-L)** — öffne einen Port auf deinem Rechner, der mit etwas auf dem entfernten Rechner verbunden ist.
|
||||
- **Remote (-R)** — öffne einen Port auf dem entfernten Rechner, der zurück zu deinem Rechner verbindet.
|
||||
- **Dynamic (-D)** — öffne einen lokalen SOCKS-Proxy über die SSH-Verbindung.
|
||||
|
||||
Für die meisten App-Vorschauen und Dashboards, die auf dem entfernten Rechner laufen, verwende **Local (-L)**.
|
||||
|
||||
## Den SOCKS-Proxy verwenden
|
||||
|
||||
Wähle **Dynamic (-D)**, wenn andere Tools auf deinem Rechner über den entfernten Rechner browsen sollen. OpenChamber öffnet dafür einen lokalen SOCKS-Proxy-Port für diese SSH-Verbindung.
|
||||
|
||||
Sobald die Verbindung bereit ist, kopiere oder verwende die lokale Proxy-Adresse aus der Weiterleitungszeile. Konfiguriere deinen Browser oder dein Tool so, dass es sie als SOCKS5-Proxy verwendet.
|
||||
|
||||
## Privat halten
|
||||
|
||||
Verwende `127.0.0.1` oder `localhost` für den lokalen Bind-Host, es sei denn, du möchtest ausdrücklich, dass andere Geräte in deinem Netzwerk den weitergeleiteten Port erreichen.
|
||||
|
||||
## Verwandt
|
||||
|
||||
- [Remote Instances](/remote-instances/) — die Desktop-App mit OpenChamber auf einem anderen Rechner verbinden
|
||||
- [Remote access](/troubleshooting/remote-access/) — wenn SSH oder Remote-Zugriff keine Verbindung herstellen
|
||||
@@ -0,0 +1,30 @@
|
||||
---
|
||||
title: Themes
|
||||
description: Passe OpenChamber mit eingebauten und benutzerdefinierten Themes an.
|
||||
---
|
||||
|
||||
# Themes
|
||||
|
||||
OpenChamber unterstützt eingebaute Themes und benutzerdefinierte Theme-JSON-Dateien.
|
||||
|
||||
## Ein benutzerdefiniertes Theme hinzufügen
|
||||
|
||||
1. Erstelle das Themes-Verzeichnis:
|
||||
|
||||
```bash
|
||||
mkdir -p ~/.config/openchamber/themes
|
||||
```
|
||||
|
||||
2. Füge deine JSON-Datei in dieses Verzeichnis ein (zum Beispiel `my-theme.json`).
|
||||
3. Öffne OpenChamber und gehe dann zu **Einstellungen -> Theme -> Themes neu laden**.
|
||||
4. Wähle dein Theme im Dropdown aus. Es wird sofort angewendet.
|
||||
|
||||
## Speicherort der Themes
|
||||
|
||||
- macOS/Linux: `~/.config/openchamber/themes/`
|
||||
|
||||
## Vollständige Referenz des JSON-Formats
|
||||
|
||||
Verwende die vollständige Formatbeschreibung in den Haupt-Repository-Dokumenten:
|
||||
|
||||
- [`docs/CUSTOM_THEMES.md`](https://github.com/openchamber/openchamber/blob/main/docs/CUSTOM_THEMES.md)
|
||||
@@ -0,0 +1,40 @@
|
||||
---
|
||||
title: Fehlerbehebung
|
||||
description: Häufige Einrichtungs- und Laufzeitprobleme mit schnellen Lösungen.
|
||||
---
|
||||
|
||||
# Fehlerbehebung
|
||||
|
||||
Hakt es irgendwo? Suchen Sie unten das Symptom und probieren Sie die Lösung.
|
||||
|
||||
## OpenChamber-Befehl beendet sich oder startet nicht
|
||||
|
||||
- bestätigen Sie Node.js `>=22`
|
||||
- führen Sie `openchamber --version` aus
|
||||
- installieren Sie die neueste CLI bei Bedarf neu
|
||||
|
||||
## Web-UI ist nicht erreichbar
|
||||
|
||||
- prüfen Sie die Server-Logs mit `openchamber logs`
|
||||
- verifizieren Sie den aktiven Port (standardmäßig `3000`)
|
||||
- öffnen Sie `http://localhost:3000` zuerst direkt, bevor Sie Tunnel-Links testen
|
||||
|
||||
## Remote-/Tunnel-Link funktioniert nicht
|
||||
|
||||
- führen Sie `openchamber tunnel status --all` aus
|
||||
- starten Sie den Tunnel von derselben Instanz / demselben Port neu
|
||||
- erzeugen Sie den Connect-Link neu, wenn das vorherige Token bereits verwendet wurde
|
||||
|
||||
Die vollständige Einrichtung steht unter [Tunnel](/tunnels/) und [Reverse Proxy](/reverse-proxy/), falls Sie einen nutzen.
|
||||
|
||||
## VS-Code-Erweiterung verbindet sich nicht
|
||||
|
||||
- bestätigen Sie, dass der OpenChamber-Server läuft
|
||||
- prüfen Sie, ob die Erweiterung aktualisiert ist
|
||||
- laden Sie das VS-Code-Fenster neu und versuchen Sie die Verbindung erneut
|
||||
|
||||
## Verwandt
|
||||
|
||||
- [Schnellstart](/quickstart/)
|
||||
- [Tunnel](/tunnels/)
|
||||
- [Reverse Proxy](/reverse-proxy/)
|
||||
@@ -0,0 +1,34 @@
|
||||
---
|
||||
title: OpenCode-Verbindung
|
||||
description: Beheben Sie, dass OpenChamber keine Verbindung zu seinem OpenCode-Server herstellt.
|
||||
---
|
||||
|
||||
# OpenCode-Verbindung
|
||||
|
||||
Wenn OpenChamber lädt, aber nie über „OpenCode is restarting“ hinauskommt, oder der Chat nicht antwortet, ist der Server, mit dem es spricht, nicht erreichbar. Gehen Sie diese Punkte durch.
|
||||
|
||||
## Es hängt bei „OpenCode is restarting“
|
||||
|
||||
- geben Sie ihm direkt nach dem Start einen Moment — dieser Zustand ist normal, während der Server hochfährt
|
||||
- prüfen Sie mit `openchamber status`, ob der Server noch läuft
|
||||
- starten Sie ihn mit `openchamber restart` neu
|
||||
- sehen Sie sich mit `openchamber logs` die Startdetails an
|
||||
|
||||
## Sie verbinden sich mit Ihrem eigenen Server
|
||||
|
||||
Wenn Sie OpenChamber so konfiguriert haben, dass es einen vorhandenen Server nutzt, prüfen Sie die Einrichtung aus [OpenCode Server](/opencode-server/) noch einmal:
|
||||
|
||||
- `OPENCODE_HOST` muss den Port enthalten, aber keinen Pfad — zum Beispiel `http://localhost:4096`
|
||||
- setzen Sie `OPENCODE_SKIP_START=true`, damit OpenChamber nicht auch noch seinen eigenen Server startet
|
||||
- wenn die Adresse ungültig ist, ignoriert OpenChamber sie und startet stattdessen seinen eigenen Server — achten Sie in den Logs auf eine `[config]`-Warnung
|
||||
|
||||
## Es schlägt immer noch fehl
|
||||
|
||||
- bestätigen Sie, dass Node.js Version `20` oder neuer ist
|
||||
- installieren Sie die neueste CLI neu
|
||||
- öffnen Sie `http://localhost:3000` direkt, bevor Sie einen Tunnel- oder Remote-Link testen
|
||||
|
||||
## Verwandt
|
||||
|
||||
- [OpenCode Server](/opencode-server/) — wie OpenChamber den Server findet und verwaltet
|
||||
- [Fehlerbehebung](/troubleshooting/) — weitere häufige Probleme
|
||||
@@ -0,0 +1,47 @@
|
||||
---
|
||||
title: Remote-Zugriff
|
||||
description: Beheben Sie Tunnel, Remote-Instanzen und den Zugriff auf OpenChamber von einem anderen Gerät aus.
|
||||
---
|
||||
|
||||
# Remote-Zugriff
|
||||
|
||||
Wenn Sie OpenChamber von Ihrem Telefon oder einem anderen Rechner aus nicht erreichen, hängt die Lösung davon ab, wie Sie sich verbinden.
|
||||
|
||||
## Prüfen Sie zuerst die Grundlagen
|
||||
|
||||
- öffnen Sie zuerst `http://localhost:3000` auf demselben Computer — wenn das fehlschlägt, ist es kein Remote-Problem; sehen Sie unter [OpenCode-Verbindung](/troubleshooting/opencode-connection/) nach
|
||||
- bestätigen Sie mit `openchamber status`, dass der Server läuft
|
||||
|
||||
## Gekoppeltes Gerät verbindet sich nicht
|
||||
|
||||
- der QR-Code / Pairing-Link ist **nur einmal nutzbar** — wenn er bereits gescannt wurde (oder abgelaufen ist), erstellen Sie über **Gerät hinzufügen** einen neuen
|
||||
- wenn das Gerät mit **Nur Heimnetzwerk** gekoppelt wurde, kann es sich von außerhalb dieses Netzwerks nicht verbinden — koppeln Sie es erneut mit **Überall**
|
||||
- prüfen Sie bei **Überall**-Pairing auf dem Server **Einstellungen → Remote-Instanzen → OpenChamber Relay**: Dort sollte **Verbunden** stehen; wenn nicht, deaktivieren und reaktivieren Sie es
|
||||
- wenn ein Gerät **widerrufen** wurde, ist sein Token endgültig weg — koppeln Sie es mit einem neuen QR-Code erneut
|
||||
|
||||
Wie diese Verbindungen funktionieren, steht unter [Ein Gerät verbinden](/connect-devices/) und [Private Relay](/private-relay/).
|
||||
|
||||
## Tunnel-Link funktioniert nicht
|
||||
|
||||
- führen Sie `openchamber tunnel status --all` aus
|
||||
- starten Sie den Tunnel von derselben Instanz und demselben Port neu
|
||||
- erzeugen Sie den Connect-Link neu, wenn der vorherige bereits verwendet wurde
|
||||
|
||||
Die vollständige Einrichtung steht unter [Tunnel](/tunnels/).
|
||||
|
||||
## Remote-Instanz verbindet sich nicht (Desktop)
|
||||
|
||||
Wenn eine [Remote-Instanz](/remote-instances/) hängen bleibt, nennt OpenChamber den fehlgeschlagenen Schritt:
|
||||
|
||||
- **auth** — Ihr SSH- oder UI-Passwort wurde abgelehnt; geben Sie es erneut ein
|
||||
- **install / start** — OpenChamber konnte den Server auf dem entfernten Rechner nicht einrichten oder starten; prüfen Sie die Anforderungen dieses Rechners
|
||||
- **forwarding** — die Verbindung steht, aber der Port erreicht Sie nicht; versuchen Sie einen anderen lokalen Port
|
||||
|
||||
## Hinter Ihrem eigenen Server
|
||||
|
||||
Wenn Sie OpenChamber hinter einen Reverse Proxy setzen und es seltsam lädt oder keine Verbindung herstellt, sehen Sie sich [Reverse Proxy](/reverse-proxy/) an.
|
||||
|
||||
## Verwandt
|
||||
|
||||
- [Ein Gerät verbinden](/connect-devices/) · [Private Relay](/private-relay/) · [Tunnel](/tunnels/) · [Remote-Instanzen](/remote-instances/) · [Reverse Proxy](/reverse-proxy/)
|
||||
- [Sicherheit](/security/) — schützen Sie die UI, bevor Sie sie freigeben
|
||||
@@ -0,0 +1,35 @@
|
||||
---
|
||||
title: Worktrees & Git
|
||||
description: Häufige Probleme mit Worktrees und Git beheben.
|
||||
---
|
||||
|
||||
# Worktrees & Git
|
||||
|
||||
Probleme, die bei [Worktree-Sitzungen](/worktrees/) und der [Git-Ansicht](/git/) auftreten, und wie Sie sie beheben.
|
||||
|
||||
## Ein Worktree braucht Aufmerksamkeit
|
||||
|
||||
OpenChamber markiert einen Worktree, wenn etwas nicht stimmt:
|
||||
|
||||
- **Ordner fehlt** — der Ordner des Worktrees wurde gelöscht oder außerhalb von OpenChamber verschoben; entfernen Sie die Sitzung und erstellen Sie einen frischen Worktree
|
||||
- **abgetrennter oder noch nicht angelegter Branch** — der Worktree liegt nicht auf einem normalen Branch; checken Sie ihn auf einen aus
|
||||
- **Merge, Rebase oder Cherry-Pick läuft noch** — eine Operation wurde halb fertig gelassen; beenden oder abbrechen Sie sie in der Git-Ansicht
|
||||
|
||||
## Worktree lässt sich nicht erstellen
|
||||
|
||||
- **Branch existiert bereits** — wählen Sie einen anderen Branchnamen oder verwenden Sie die Option für einen bestehenden Branch
|
||||
- **Name bereits vergeben** — wählen Sie einen anderen Worktree-Namen
|
||||
|
||||
## Commit- oder PR-Erstellung schlägt fehl
|
||||
|
||||
Das Erzeugen einer Commit-Nachricht oder einer PR-Beschreibung läuft in Ihrer aktiven Sitzung, daher brauchen Sie eine geöffnete Sitzung mit ausgewähltem Arbeitsmodell. Öffnen oder wählen Sie eine Sitzung und versuchen Sie es erneut.
|
||||
|
||||
## SSH- oder Windows-Pfadprobleme
|
||||
|
||||
- stellen Sie sicher, dass der SSH-Schlüssel, den das Repo verwendet, derselbe ist, den Sie in Ihrer [Git-Identität](/git-identities/) gesetzt haben
|
||||
- unter Windows verwendet Git Unix-ähnliche Pfade (wie `/c/Users/...`) — OpenChamber handhabt das, aber benutzerdefinierte SSH-Schlüsselpfade sollten dieselbe Form haben
|
||||
|
||||
## Verwandt
|
||||
|
||||
- [Worktree-Sitzungen](/worktrees/) — wie Worktrees erstellt und entfernt werden
|
||||
- [Git-Identitäten](/git-identities/) — für jedes Repo den richtigen Schlüssel und die richtige Identität setzen
|
||||
@@ -0,0 +1,120 @@
|
||||
---
|
||||
title: Tunnel
|
||||
description: Stelle OpenChamber sicher für Remote- und Mobilzugriff bereit.
|
||||
---
|
||||
|
||||
# Tunnel
|
||||
|
||||
Ein Tunnel ist ein öffentlicher Link zu deinem OpenChamber, damit du ihn von einem normalen Browser in einem anderen Netzwerk aus erreichen kannst. Nutze `openchamber tunnel`, um einen für eine laufende Instanz zu erstellen.
|
||||
|
||||
> Wenn du **deine eigenen Geräte** verbindest (die Mobile App, einen anderen Desktop), brauchst du normalerweise keinen Tunnel — [kopple sie](/connect-devices/) stattdessen und lass das Ende-zu-Ende-verschlüsselte [Private Relay](/private-relay/) den Zugriff von unterwegs ohne zusätzliche Einrichtung übernehmen.
|
||||
|
||||
## Voraussetzungen
|
||||
|
||||
OpenChamber startet das CLI des Tunnel-Anbieters auf deinem Rechner. Installiere zuerst den Anbieter, den du verwenden möchtest:
|
||||
|
||||
```bash
|
||||
brew install cloudflared
|
||||
brew install ngrok
|
||||
```
|
||||
|
||||
Cloudflare Quick Tunnels können mit `cloudflared` laufen. Ngrok benötigt ein ngrok-Konto und ein Authtoken aus dem ngrok-Dashboard:
|
||||
|
||||
```bash
|
||||
ngrok config add-authtoken <your-ngrok-token>
|
||||
```
|
||||
|
||||
## Schnellstart
|
||||
|
||||
1. Starte OpenChamber:
|
||||
|
||||
```bash
|
||||
openchamber
|
||||
```
|
||||
|
||||
Wenn du diesen Schritt überspringst, kann `openchamber tunnel start` automatisch einen CLI-Server starten. Beim automatischen Start kannst du Serveroptionen wie `--port`, `--host`, `--lan`, `--ui-password` und `--api-only` mitgeben.
|
||||
|
||||
2. Starte einen Cloudflare-Tunnel:
|
||||
|
||||
```bash
|
||||
openchamber tunnel start --provider cloudflare --mode quick
|
||||
```
|
||||
|
||||
Oder starte einen Ngrok-Tunnel:
|
||||
|
||||
```bash
|
||||
openchamber tunnel start --provider ngrok --mode quick
|
||||
```
|
||||
|
||||
3. Status prüfen:
|
||||
|
||||
```bash
|
||||
openchamber tunnel status
|
||||
```
|
||||
|
||||
Sobald der Tunnel aktiv ist, zeigt `status` eine öffentliche URL. Öffne sie oder scanne den QR-Code, um OpenChamber von überall aus zu erreichen.
|
||||
|
||||
Standardmäßig druckt OpenChamber in interaktiven TTY-Sitzungen einen QR-Code. Mit `--qr` erzwingst du die QR-Ausgabe, mit `--no-qr` deaktivierst du sie.
|
||||
|
||||
## Anbieter
|
||||
|
||||
- `cloudflare`: Quick-, Managed-Remote- und Managed-Local-Modi
|
||||
- `ngrok`: Quick-Modus
|
||||
|
||||
## Verwaltete Modi
|
||||
|
||||
### Managed Remote
|
||||
|
||||
Verwende ein von Cloudflare verwaltetes Token und einen Hostnamen:
|
||||
|
||||
```bash
|
||||
openchamber tunnel start --provider cloudflare --mode managed-remote --token-file ~/.secrets/cf-token --hostname app.example.com
|
||||
```
|
||||
|
||||
### Managed Local
|
||||
|
||||
Verwende eine lokale `cloudflared`-Konfiguration:
|
||||
|
||||
```bash
|
||||
openchamber tunnel start --provider cloudflare --mode managed-local --config ~/.cloudflared/config.yml
|
||||
```
|
||||
|
||||
## Profile (managed-remote)
|
||||
|
||||
Ein wiederverwendbares Profil speichern:
|
||||
|
||||
```bash
|
||||
openchamber tunnel profile add --provider cloudflare --mode managed-remote --name prod-main --hostname app.example.com --token-file ~/.secrets/cf-token
|
||||
```
|
||||
|
||||
Mit dem gespeicherten Profil starten:
|
||||
|
||||
```bash
|
||||
openchamber tunnel start --profile prod-main
|
||||
```
|
||||
|
||||
## Nützliche Befehle
|
||||
|
||||
```bash
|
||||
openchamber tunnel providers
|
||||
openchamber tunnel ready --provider cloudflare
|
||||
openchamber tunnel ready --provider ngrok
|
||||
openchamber tunnel doctor --provider cloudflare
|
||||
openchamber tunnel doctor --provider ngrok
|
||||
openchamber tunnel stop --port 3000
|
||||
```
|
||||
|
||||
## Hinweise zum Verhalten
|
||||
|
||||
- ein aktiver Tunnel pro OpenChamber-Instanz (Port)
|
||||
- wenn auf derselben Instanz ein neuer Modus oder Anbieter startet, ersetzt er den vorherigen Tunnel
|
||||
- das Erstellen eines neuen Verbindungslinks widerruft den vorherigen unbenutzten Link
|
||||
- das automatische Starten des Tunnels bewahrt Server-Flags wie `--ui-password` und `--api-only` in den Instanzeinstellungen auf, die von Neustart-/Update-Flows verwendet werden
|
||||
|
||||
## Verwandt
|
||||
|
||||
- [Connect a Device](/connect-devices/) — eigene Geräte ohne öffentliche URL koppeln
|
||||
- [Security](/security/) — die UI schützen, bevor du sie freigibst
|
||||
- [Desktop Tunnels](/desktop-tunnels/) — Tunnel-Einrichtung in der Desktop-App ohne CLI-Start
|
||||
- [PWA & Mobile](/mobile/) — OpenChamber vom Telefon aus erreichen
|
||||
- [Troubleshooting](/troubleshooting/) — wenn der Tunnel-Link nicht funktioniert
|
||||
@@ -0,0 +1,31 @@
|
||||
---
|
||||
title: Updates
|
||||
description: Halten Sie OpenChamber auf Desktop, Web und VS Code auf dem neuesten Stand.
|
||||
---
|
||||
|
||||
# Updates
|
||||
|
||||
Wie Sie OpenChamber aktualisieren, hängt davon ab, wie Sie es installiert haben. In jedem Fall können Sie Ihre aktuelle Version unter **Einstellungen → OpenChamber → Über** prüfen.
|
||||
|
||||
## Desktop-App
|
||||
|
||||
Die Desktop-App prüft GitHub-Releases auf Updates. Wenn eines verfügbar ist, informiert OpenChamber Sie, lädt es auf Wunsch herunter und installiert es beim nächsten Neustart. Sie behalten immer die Kontrolle — nichts wird ohne Ihr Zutun installiert.
|
||||
|
||||
## Web / CLI
|
||||
|
||||
Wenn Sie die CLI installiert haben, aktualisieren Sie sie im Bereich **Über** mit den Schaltflächen zum Prüfen und Aktualisieren oder im Terminal:
|
||||
|
||||
```bash
|
||||
openchamber update
|
||||
```
|
||||
|
||||
OpenChamber erkennt, wie es installiert wurde (npm, pnpm, yarn oder bun), und führt das passende Update für Sie aus.
|
||||
|
||||
## Der OpenCode-Server
|
||||
|
||||
OpenChamber und OpenCode werden getrennt aktualisiert. Wenn eine neue OpenCode-Version verfügbar ist, bietet OpenChamber an, sie zu aktualisieren, und startet den Server danach neu. Wie dieser Server verwaltet wird, steht unter [OpenCode Server](/opencode-server/).
|
||||
|
||||
## Verwandt
|
||||
|
||||
- [Installieren](/install/) — wie die jeweilige App überhaupt installiert wird
|
||||
- [OpenCode Server](/opencode-server/) — den zugrunde liegenden Server aktualisieren
|
||||
@@ -0,0 +1,28 @@
|
||||
---
|
||||
title: Nutzung & Kontingente
|
||||
description: Verfolge, wie viel deines Provider-Tarifs du bereits genutzt hast.
|
||||
---
|
||||
|
||||
# Nutzung & Kontingente
|
||||
|
||||
Die Seite Nutzung zeigt, wie viel du von den Tarifen der einzelnen Provider bereits verbraucht hast, damit du sehen kannst, wie nah du an einem Limit bist. Du öffnest sie unter **Einstellungen → Nutzung**.
|
||||
|
||||
## Was du siehst
|
||||
|
||||
Für jeden verbundenen Provider zeigt OpenChamber:
|
||||
|
||||
- wie viel des aktuellen Zeitfensters du bereits genutzt hast, als Balken
|
||||
- eine Aufschlüsselung nach Modell
|
||||
- einen Tempoindikator, damit du siehst, ob du rechtzeitig am Limit ankommen wirst
|
||||
|
||||
Du kannst auswählen, welche Provider angezeigt werden, und dieselbe Zusammenfassung ist auch über ein Dropdown in der App-Kopfzeile verfügbar.
|
||||
|
||||
## Unterstützte Provider
|
||||
|
||||
Die Nutzung funktioniert für die Provider, die ein Kontingent veröffentlichen, darunter Claude, Codex, GitHub Copilot, Google, OpenRouter, Kimi, NanoGPT, z.ai, Zhipu, MiniMax, Ollama Cloud und Wafer.
|
||||
|
||||
Ein Anbieter zeigt Nutzung erst dann an, wenn du dich auf der [Seite „Anbieter“](/providers/) dort angemeldet hast. Einige Anbieter brauchen noch einen zusätzlichen Schritt — Ollama Cloud liest zum Beispiel eine Sitzungsdatei, die du separat einrichtest. Wenn ein Anbieter keine Daten anzeigt, fehlt meist diese zusätzliche Anmeldeinformation.
|
||||
|
||||
## Weiterführend
|
||||
|
||||
- [Provider, Modelle & Agents](/providers/) — zuerst anmelden, damit Nutzung angezeigt wird
|
||||
@@ -0,0 +1,36 @@
|
||||
---
|
||||
title: Sprachmodus
|
||||
description: Sprich mit OpenChamber und lass dir Antworten vorlesen.
|
||||
---
|
||||
|
||||
# Sprachmodus
|
||||
|
||||
Mit dem Sprachmodus kannst du Nachrichten diktieren und dir Antworten vorlesen lassen. Schalte ihn unter **Einstellungen → OpenChamber → Sprache** ein.
|
||||
|
||||
## Antworten vorlesen lassen (Text-zu-Sprache)
|
||||
|
||||
Wähle aus, wie Antworten gesprochen werden:
|
||||
|
||||
- **Browser** — die integrierten Stimmen deines Browsers, keine Einrichtung nötig
|
||||
- **OpenAI** — die Stimmen von OpenAI; füge deinen API-Schlüssel ein und wähle eine Stimme
|
||||
- **OpenAI-kompatibel** — jeder Dienst, der das OpenAI-Format unterstützt; gib seine URL und, falls nötig, einen API-Schlüssel an
|
||||
- **macOS say** — der eingebaute `say`-Befehl, auf Macs mit dieser Funktion
|
||||
|
||||
Sobald es aktiviert ist, erscheint bei Nachrichten eine Abspieltaste, mit der du sie vorlesen lassen kannst.
|
||||
|
||||
## Nachrichten diktieren (Sprache-zu-Text)
|
||||
|
||||
Wähle aus, wie deine Sprache transkribiert wird:
|
||||
|
||||
- **Browser** — die integrierte Spracherkennung deines Browsers, keine Einrichtung nötig
|
||||
- **Server** — ein OpenAI-kompatibler Transkriptionsdienst; gib seine URL und, falls nötig, einen API-Schlüssel an
|
||||
- **Gerätebasiert** — ein Sprachmodell, das in deinem Browser läuft und beim ersten Verwenden heruntergeladen wird
|
||||
|
||||
## Hinweis für Telefone
|
||||
|
||||
Beim Vorlesen auf einem Telefon sind die Optionen OpenAI oder OpenAI-kompatibel am zuverlässigsten — mobile Browser begrenzen die integrierten Stimmen.
|
||||
|
||||
## Weiterführend
|
||||
|
||||
- [Benachrichtigungen](/notifications/) — lasse dich statt durch Zuhören per Ping informieren
|
||||
- [Provider, Modelle & Agents](/providers/) — dort liegt möglicherweise bereits dein OpenAI-Schlüssel
|
||||
@@ -0,0 +1,71 @@
|
||||
---
|
||||
title: Änderungen durchgehen
|
||||
description: Lesen Sie einen Diff in der Reihenfolge, in der er Sinn ergibt, nicht alphabetisch.
|
||||
---
|
||||
|
||||
# Änderungen durchgehen
|
||||
|
||||
Ein Diff ist nach Dateipfad sortiert, und das ist fast nie die Reihenfolge, in der die Änderung Sinn ergibt. Das Walkthrough ordnet ihn neu: Zusammengehörige Änderungen werden in **Stops** gruppiert, jeder Stop erklärt, was der Code jetzt anders macht, und die Stops sind so angeordnet, dass jeder auf dem vorherigen aufbaut.
|
||||
|
||||
Es erklärt und ordnet. Es bewertet Ihren Code nicht und fällt kein Urteil — dafür ist [Review](/git/) da.
|
||||
|
||||
Öffnen Sie es über das **Walkthrough**-Symbol in der rechten Leiste oder über die Schaltfläche **AI walkthrough** in den Bereichen Changes und Pull Request. Beides öffnet nur das Panel; generiert wird erst, wenn Sie **Generate walkthrough** drücken.
|
||||
|
||||
## Was es prüfen kann
|
||||
|
||||
| Bereich | Was enthalten ist |
|
||||
| --- | --- |
|
||||
| Alle uncommitteten | Alles, was noch nicht committet ist: gestagte, ungestagte und neue Dateien |
|
||||
| Gestaged | Nur das, was jetzt in einen Commit gehen würde |
|
||||
| Ungestaged | Arbeitsbaum und neue Dateien |
|
||||
| Dieser Branch | Jeder Commit auf diesem Branch, der nicht auf seinem Basis-Stand ist |
|
||||
| Pull Request | Die Änderung so, wie sie auf GitHub existiert |
|
||||
|
||||
**Dieser Branch** bedeutet nicht „nicht gepushte Commits“ — es ist alles, was der Branch gegenüber seiner Basis hinzufügt, egal ob gepusht oder nicht. Nach einem Commit, aber vor dem Push, unterscheiden sich also Branch und Pull Request absichtlich: Der eine zeigt, was Sie getan haben, der andere, was Reviewer gerade sehen.
|
||||
|
||||
Jeder Bereich wird separat gespeichert, sodass der Wechsel zwischen ihnen nichts verliert.
|
||||
|
||||
## Das Modell wählen
|
||||
|
||||
Walkthroughs nutzen standardmäßig Ihr kleines Modell. Wählen Sie unter **Einstellungen → Sitzungen → Modell für Änderungen durchgehen** ein anderes aus oder für eine einzelne Prüfung im Kopfbereich des Panels — nützlich, wenn eine Änderung riskant genug ist, ein stärkeres Modell zu brauchen.
|
||||
|
||||
Die Auswahl zeigt nur Modelle an, die strukturierten Output zurückgeben können, weil sich das Walkthrough ohne ihn nicht zusammensetzen lässt. Wenn ein Modell für den Diff zu klein ist, wird die Generierung mit einer Erklärung abgelehnt, statt die Eingabe stillschweigend zu kürzen: Ein Walkthrough über einen halben Diff wirkt sicher und ist falsch.
|
||||
|
||||
Wenn Sie ein Panel erneut öffnen, sehen Sie das Modell, das den aktuellen Inhalt erzeugt hat, sodass **Regenerate** mit demselben Modell wiederholt, sofern Sie es nicht ändern.
|
||||
|
||||
## Die Sprache wählen
|
||||
|
||||
Walkthroughs werden standardmäßig in Ihrer UI-Sprache geschrieben. Der Sprachwähler im Panelkopf startet dort, und Sie können für eine einzelne Prüfung jede andere Sprache wählen, in die OpenChamber übersetzt ist — eine geführte Erklärung ist nur in einer Sprache nützlich, die Sie bequem lesen.
|
||||
|
||||
Übersetzt wird nur der Fließtext. Bezeichner, Dateipfade und API-Namen bleiben genau so, wie sie im Code erscheinen, damit das, was ein Stop nennt, weiterhin suchbar bleibt.
|
||||
|
||||
Wenn in der von Ihnen gewählten Sprache noch nichts erzeugt wurde, zeigt das Panel weiterhin das vorhandene Walkthrough an und sagt das auch, statt leer zu werden. Drücken Sie **Generate walkthrough**, um eines in der neuen Sprache zu erhalten.
|
||||
|
||||
## Kosten und Caching
|
||||
|
||||
Nichts wird von selbst generiert. Die Generierung startet nur, wenn Sie sie anfordern, und auch das erneute Generieren ist manuell.
|
||||
|
||||
Ergebnisse werden gegen den exakten Inhalt des Diffs gecacht. Wenn Sie den Arbeitsbaum auf einen früheren Stand zurücksetzen, erscheint das frühere Walkthrough kostenlos wieder, ohne Modellaufruf. Sprache und Modell sind ebenfalls Teil dieses Schlüssels, also wird jede Kombination separat gespeichert: Hat ein Diff einmal Walkthroughs in zwei Sprachen, ist das Umschalten zwischen ihnen sofort und kostenlos.
|
||||
|
||||
Die Generierung läuft auf dem OpenChamber-Server, nicht in Ihrem Browser-Tab. Laden Sie die Seite neu oder schließen Sie das Panel, und sie läuft weiter; wenn Sie zurückkommen, wartet das Ergebnis. Nur **Cancel** beendet sie.
|
||||
|
||||
## Ehrlich mit Aktualität umgehen
|
||||
|
||||
Jeder Stop ist an den exakten Codeinhalt gebunden, den er beschreibt, damit das Panel Ihnen sagen kann, wenn sich dieser Code weiterentwickelt hat:
|
||||
|
||||
- **Veraltete Schritte** — der Code, den ein Stop beschrieben hat, wurde geändert oder ist verschwunden. Das Walkthrough bleibt sichtbar und markiert, damit Sie entscheiden können, ob Sie es neu generieren.
|
||||
- **Nicht abgedeckt** — Änderungen im aktuellen Diff, die kein Stop beschreibt. Dazu gehören spätere Bearbeitungen nach der Generierung, Änderungen, die das Walkthrough als Routine eingestuft hat, sowie Lockfiles und andere generierte Dateien, die absichtlich aus der Modelleingabe herausgehalten werden. Sie werden alle am Ende des Streams aufgelistet, damit nichts stillschweigend verschwindet.
|
||||
|
||||
Neu generieren bedeutet neu schreiben statt patchen: Das vorherige Walkthrough geht als Kontext an das Modell, damit richtige Teile erhalten bleiben, und alles wird neu an den aktuellen Code angeheftet.
|
||||
|
||||
## Hinweise
|
||||
|
||||
- Kommentieren Sie im Walkthrough jede Zeile genau wie in der Diff-Ansicht; Kommentare werden an den Chat-Composer angehängt.
|
||||
- Verfügbar auf Desktop- und Tablet-Breiten. In der VS-Code-Erweiterung oder der mobilen App nicht angeboten.
|
||||
- Eine Pull-Request-Review benötigt ein verbundenes GitHub-Konto — siehe [GitHub Issues & PRs](/github/).
|
||||
|
||||
## Verwandt
|
||||
|
||||
- [Git & GitHub](/git/) — das Changes-Panel, aus dem dies liest, und die Review-Aktion, die tatsächlich Code bewertet
|
||||
- [GitHub Issues & PRs](/github/) — GitHub verbinden, um Pull Requests zu prüfen
|
||||
- [Anbieter, Modelle & Agents](/providers/) — woher das kleine Modell kommt
|
||||
@@ -0,0 +1,36 @@
|
||||
---
|
||||
title: Worktree-Sitzungen
|
||||
description: Gib einer Sitzung einen eigenen Branch und Ordner, damit die Arbeit isoliert bleibt.
|
||||
---
|
||||
|
||||
# Worktree-Sitzungen
|
||||
|
||||
Eine Worktree-Sitzung läuft in einer eigenen ausgecheckten Kopie deines Repos auf einem eigenen Branch (einem Git-Worktree). So kommen sich parallele Sitzungen nicht in die Quere — die eine kann refaktorieren, während eine andere einen Fehler behebt, ohne ständiges Hin- und Herwechseln.
|
||||
|
||||
## Eine erstellen
|
||||
|
||||
1. Öffne den Dialog für einen neuen Worktree über die Schaltfläche oben in der Sitzungs-Seitenleiste.
|
||||
2. Wähle einen Startpunkt:
|
||||
- **new branch** — benenne den Branch und wähle, von welchem Branch aus gestartet werden soll
|
||||
- **existing branch** — checke einen bereits vorhandenen Branch aus
|
||||
3. Bestätige den Worktree-Ordner (OpenChamber schlägt einen anhand des Branchnamens vor).
|
||||
4. Erstelle ihn.
|
||||
|
||||
OpenChamber legt den Branch an, richtet den Ordner ein und startet dort eine Sitzung. Du kannst auch direkt von einer [todo](/notes-todos-plans/) oder einem [GitHub issue or PR](/github/) aus damit beginnen.
|
||||
|
||||
## Die Arbeit zurückbringen
|
||||
|
||||
Wenn die Arbeit gut ist, verwende **Integrate** in der Git-Ansicht, um die Commits des Worktrees auf einen anderen Branch (etwa `main`) zu übertragen. Wenn ein Konflikt auftritt, kannst du den Konflikt dem Agenten zur Lösung geben.
|
||||
|
||||
## Aufräumen
|
||||
|
||||
Das Löschen oder Archivieren der Sitzung kann den Worktree entfernen. Du entscheidest, ob auch der Branch gelöscht werden soll — lokal und, falls vorhanden, remote. Nichts wird gelöscht, ohne dass du es anforderst.
|
||||
|
||||
## Wenn etwas seltsam aussieht
|
||||
|
||||
Ein Worktree braucht möglicherweise Aufmerksamkeit, wenn sein Ordner fehlt, sein Branch in einem detached-Zustand ist oder ein Merge oder Rebase noch nicht abgeschlossen wurde. OpenChamber markiert das, damit du es beheben kannst — siehe [Worktrees & Git](/troubleshooting/worktrees-git/).
|
||||
|
||||
## Verwandt
|
||||
|
||||
- [Multi-run](/multi-run/) — viele Worktree-Sitzungen gleichzeitig starten
|
||||
- [Git- & GitHub-Workflows](/git/) — von innen in OpenChamber committen und integrieren
|
||||
@@ -10,7 +10,8 @@
|
||||
"ko": "여기서 시작",
|
||||
"pl": "Zacznij tutaj",
|
||||
"fr": "Commencer ici",
|
||||
"ja": "ここから開始"
|
||||
"ja": "ここから開始",
|
||||
"de": "Hier starten"
|
||||
},
|
||||
"items": [
|
||||
{
|
||||
@@ -24,7 +25,8 @@
|
||||
"ko": "개요",
|
||||
"pl": "Przegląd",
|
||||
"fr": "Vue d’ensemble",
|
||||
"ja": "概要"
|
||||
"ja": "概要",
|
||||
"de": "Übersicht"
|
||||
}
|
||||
},
|
||||
{
|
||||
@@ -38,7 +40,8 @@
|
||||
"ko": "설치",
|
||||
"pl": "Instalacja",
|
||||
"fr": "Installation",
|
||||
"ja": "インストール"
|
||||
"ja": "インストール",
|
||||
"de": "Installation"
|
||||
}
|
||||
},
|
||||
{
|
||||
@@ -52,7 +55,8 @@
|
||||
"ko": "빠른 시작",
|
||||
"pl": "Szybki start",
|
||||
"fr": "Démarrage rapide",
|
||||
"ja": "クイックスタート"
|
||||
"ja": "クイックスタート",
|
||||
"de": "Schnellstart"
|
||||
}
|
||||
},
|
||||
{
|
||||
@@ -66,7 +70,8 @@
|
||||
"ko": "OpenCode 서버",
|
||||
"pl": "Serwer OpenCode",
|
||||
"fr": "Serveur OpenCode",
|
||||
"ja": "OpenCode サーバー"
|
||||
"ja": "OpenCode サーバー",
|
||||
"de": "OpenCode-Server"
|
||||
}
|
||||
},
|
||||
{
|
||||
@@ -80,7 +85,8 @@
|
||||
"ko": "환경 변수",
|
||||
"pl": "Zmienne środowiskowe",
|
||||
"fr": "Variables d’environnement",
|
||||
"ja": "環境変数"
|
||||
"ja": "環境変数",
|
||||
"de": "Umgebungsvariablen"
|
||||
}
|
||||
}
|
||||
]
|
||||
@@ -95,7 +101,8 @@
|
||||
"ko": "워크플로",
|
||||
"pl": "Przepływy pracy",
|
||||
"fr": "Workflows",
|
||||
"ja": "ワークフロー"
|
||||
"ja": "ワークフロー",
|
||||
"de": "Abläufe"
|
||||
},
|
||||
"items": [
|
||||
{
|
||||
@@ -109,7 +116,8 @@
|
||||
"ko": "프로젝트",
|
||||
"pl": "Projekty",
|
||||
"fr": "Projets",
|
||||
"ja": "プロジェクト"
|
||||
"ja": "プロジェクト",
|
||||
"de": "Projekte"
|
||||
}
|
||||
},
|
||||
{
|
||||
@@ -123,7 +131,8 @@
|
||||
"ko": "컨텍스트",
|
||||
"pl": "Kontekst",
|
||||
"fr": "Contexte",
|
||||
"ja": "コンテキスト"
|
||||
"ja": "コンテキスト",
|
||||
"de": "Kontext"
|
||||
}
|
||||
},
|
||||
{
|
||||
@@ -137,7 +146,8 @@
|
||||
"ko": "메모, 할 일, 계획",
|
||||
"pl": "Notatki, zadania i plany",
|
||||
"fr": "Notes, todos et plans",
|
||||
"ja": "メモ、Todo、計画"
|
||||
"ja": "メモ、Todo、計画",
|
||||
"de": "Notizen, Aufgaben und Pläne"
|
||||
}
|
||||
},
|
||||
{
|
||||
@@ -151,7 +161,8 @@
|
||||
"ko": "예약 작업",
|
||||
"pl": "Zaplanowane zadania",
|
||||
"fr": "Tâches planifiées",
|
||||
"ja": "スケジュールタスク"
|
||||
"ja": "スケジュールタスク",
|
||||
"de": "Geplante Aufgaben"
|
||||
}
|
||||
},
|
||||
{
|
||||
@@ -165,7 +176,8 @@
|
||||
"ko": "에이전트 제어 도구",
|
||||
"pl": "Narzędzie sterowania dla agentów",
|
||||
"fr": "Outil de contrôle pour les agents",
|
||||
"ja": "エージェント制御ツール"
|
||||
"ja": "エージェント制御ツール",
|
||||
"de": "Agenten-Steuerungstool"
|
||||
}
|
||||
},
|
||||
{
|
||||
@@ -179,7 +191,8 @@
|
||||
"ko": "세션 목표",
|
||||
"pl": "Cele sesji",
|
||||
"fr": "Objectifs de session",
|
||||
"ja": "セッションゴール"
|
||||
"ja": "セッションゴール",
|
||||
"de": "Sitzungsziele"
|
||||
}
|
||||
},
|
||||
{
|
||||
@@ -193,7 +206,8 @@
|
||||
"ko": "프로젝트 작업",
|
||||
"pl": "Akcje projektu",
|
||||
"fr": "Actions de projet",
|
||||
"ja": "プロジェクトアクション"
|
||||
"ja": "プロジェクトアクション",
|
||||
"de": "Projektaktionen"
|
||||
}
|
||||
},
|
||||
{
|
||||
@@ -207,7 +221,8 @@
|
||||
"ko": "미리보기 및 개발 서버",
|
||||
"pl": "Podgląd i serwery deweloperskie",
|
||||
"fr": "Aperçu et serveurs de dev",
|
||||
"ja": "プレビューと開発サーバー"
|
||||
"ja": "プレビューと開発サーバー",
|
||||
"de": "Vorschau und Entwicklungsserver"
|
||||
}
|
||||
},
|
||||
{
|
||||
@@ -221,7 +236,8 @@
|
||||
"ko": "Worktree 세션",
|
||||
"pl": "Sesje worktree",
|
||||
"fr": "Sessions worktree",
|
||||
"ja": "Worktree セッション"
|
||||
"ja": "Worktree セッション",
|
||||
"de": "Worktree-Sitzungen"
|
||||
}
|
||||
},
|
||||
{
|
||||
@@ -229,7 +245,8 @@
|
||||
"link": "/multi-run/",
|
||||
"translations": {
|
||||
"fr": "Multi-run",
|
||||
"ja": "Multi-run"
|
||||
"ja": "Multi-run",
|
||||
"de": "Mehrfachausführung"
|
||||
}
|
||||
},
|
||||
{
|
||||
@@ -237,7 +254,8 @@
|
||||
"link": "/git/",
|
||||
"translations": {
|
||||
"fr": "Git et GitHub",
|
||||
"ja": "Git と GitHub"
|
||||
"ja": "Git と GitHub",
|
||||
"de": "Git und GitHub"
|
||||
}
|
||||
},
|
||||
{
|
||||
@@ -251,7 +269,8 @@
|
||||
"ko": "변경 워크스루",
|
||||
"pl": "Przewodnik po zmianach",
|
||||
"fr": "Parcours des modifications",
|
||||
"ja": "変更のウォークスルー"
|
||||
"ja": "変更のウォークスルー",
|
||||
"de": "Änderungsrundgang"
|
||||
}
|
||||
},
|
||||
{
|
||||
@@ -265,7 +284,8 @@
|
||||
"ko": "GitHub 이슈 및 PR",
|
||||
"pl": "Zgłoszenia i PR-y GitHub",
|
||||
"fr": "Issues et PR GitHub",
|
||||
"ja": "GitHub Issues と PR"
|
||||
"ja": "GitHub Issues と PR",
|
||||
"de": "GitHub-Issues und PRs"
|
||||
}
|
||||
},
|
||||
{
|
||||
@@ -279,7 +299,8 @@
|
||||
"ko": "매직 프롬프트",
|
||||
"pl": "Magiczne prompty",
|
||||
"fr": "Magic Prompts",
|
||||
"ja": "マジックプロンプト"
|
||||
"ja": "マジックプロンプト",
|
||||
"de": "Magische Prompts"
|
||||
}
|
||||
},
|
||||
{
|
||||
@@ -293,7 +314,8 @@
|
||||
"ko": "Git 아이덴티티",
|
||||
"pl": "Tożsamości Git",
|
||||
"fr": "Identités Git",
|
||||
"ja": "Git ID"
|
||||
"ja": "Git ID",
|
||||
"de": "Git-Identitäten"
|
||||
}
|
||||
}
|
||||
]
|
||||
@@ -308,7 +330,8 @@
|
||||
"ko": "OpenCode 설정",
|
||||
"pl": "Konfiguracja OpenCode",
|
||||
"fr": "Configuration OpenCode",
|
||||
"ja": "OpenCode 設定"
|
||||
"ja": "OpenCode 設定",
|
||||
"de": "OpenCode-Einrichtung"
|
||||
},
|
||||
"items": [
|
||||
{
|
||||
@@ -322,7 +345,8 @@
|
||||
"ko": "공급자, 모델, 에이전트",
|
||||
"pl": "Dostawcy, modele i agenci",
|
||||
"fr": "Fournisseurs, modèles et agents",
|
||||
"ja": "プロバイダー、モデル、エージェント"
|
||||
"ja": "プロバイダー、モデル、エージェント",
|
||||
"de": "Anbieter, Modelle und Agenten"
|
||||
}
|
||||
},
|
||||
{
|
||||
@@ -336,7 +360,8 @@
|
||||
"ko": "MCP 서버",
|
||||
"pl": "Serwery MCP",
|
||||
"fr": "Serveurs MCP",
|
||||
"ja": "MCP サーバー"
|
||||
"ja": "MCP サーバー",
|
||||
"de": "MCP-Server"
|
||||
}
|
||||
},
|
||||
{
|
||||
@@ -350,7 +375,8 @@
|
||||
"ko": "스킬",
|
||||
"pl": "Umiejętności",
|
||||
"fr": "Skills",
|
||||
"ja": "スキル"
|
||||
"ja": "スキル",
|
||||
"de": "Fähigkeiten"
|
||||
}
|
||||
},
|
||||
{
|
||||
@@ -364,7 +390,8 @@
|
||||
"ko": "스킬 카탈로그",
|
||||
"pl": "Katalog umiejętności",
|
||||
"fr": "Catalogue de skills",
|
||||
"ja": "スキルカタログ"
|
||||
"ja": "スキルカタログ",
|
||||
"de": "Fähigkeitenkatalog"
|
||||
}
|
||||
},
|
||||
{
|
||||
@@ -378,7 +405,8 @@
|
||||
"ko": "명령 및 스니펫",
|
||||
"pl": "Polecenia i fragmenty",
|
||||
"fr": "Commandes et snippets",
|
||||
"ja": "コマンドとスニペット"
|
||||
"ja": "コマンドとスニペット",
|
||||
"de": "Befehle und Snippets"
|
||||
}
|
||||
},
|
||||
{
|
||||
@@ -392,7 +420,8 @@
|
||||
"ko": "사용량 및 할당량",
|
||||
"pl": "Zużycie i limity",
|
||||
"fr": "Utilisation et quotas",
|
||||
"ja": "使用量とクォータ"
|
||||
"ja": "使用量とクォータ",
|
||||
"de": "Nutzung und Kontingente"
|
||||
}
|
||||
}
|
||||
]
|
||||
@@ -407,7 +436,8 @@
|
||||
"ko": "원격 접속",
|
||||
"pl": "Dostęp zdalny",
|
||||
"fr": "Accès distant",
|
||||
"ja": "リモートアクセス"
|
||||
"ja": "リモートアクセス",
|
||||
"de": "Zugriff von außen"
|
||||
},
|
||||
"items": [
|
||||
{
|
||||
@@ -421,7 +451,8 @@
|
||||
"ko": "기기 연결",
|
||||
"pl": "Podłączanie urządzenia",
|
||||
"fr": "Connecter un appareil",
|
||||
"ja": "デバイスを接続"
|
||||
"ja": "デバイスを接続",
|
||||
"de": "Gerät verbinden"
|
||||
}
|
||||
},
|
||||
{
|
||||
@@ -435,7 +466,8 @@
|
||||
"ko": "프라이빗 릴레이",
|
||||
"pl": "Prywatny relay",
|
||||
"fr": "Relay privé",
|
||||
"ja": "プライベートリレー"
|
||||
"ja": "プライベートリレー",
|
||||
"de": "Privates Relay"
|
||||
}
|
||||
},
|
||||
{
|
||||
@@ -449,7 +481,8 @@
|
||||
"ko": "터널",
|
||||
"pl": "Tunele",
|
||||
"fr": "Tunnels",
|
||||
"ja": "トンネル"
|
||||
"ja": "トンネル",
|
||||
"de": "Tunnel"
|
||||
}
|
||||
},
|
||||
{
|
||||
@@ -463,7 +496,8 @@
|
||||
"ko": "리버스 프록시",
|
||||
"pl": "Reverse proxy",
|
||||
"fr": "Reverse proxy",
|
||||
"ja": "リバースプロキシ"
|
||||
"ja": "リバースプロキシ",
|
||||
"de": "Reverse Proxy"
|
||||
}
|
||||
},
|
||||
{
|
||||
@@ -477,7 +511,8 @@
|
||||
"ko": "모바일 앱 및 PWA",
|
||||
"pl": "Aplikacje mobilne i PWA",
|
||||
"fr": "Apps mobiles et PWA",
|
||||
"ja": "モバイルアプリと PWA"
|
||||
"ja": "モバイルアプリと PWA",
|
||||
"de": "Mobile Apps und PWA"
|
||||
}
|
||||
},
|
||||
{
|
||||
@@ -491,7 +526,8 @@
|
||||
"ko": "보안",
|
||||
"pl": "Bezpieczeństwo",
|
||||
"fr": "Sécurité",
|
||||
"ja": "セキュリティ"
|
||||
"ja": "セキュリティ",
|
||||
"de": "Sicherheit"
|
||||
}
|
||||
}
|
||||
]
|
||||
@@ -506,7 +542,8 @@
|
||||
"ko": "맞춤 설정",
|
||||
"pl": "Dostosuj",
|
||||
"fr": "Personnaliser",
|
||||
"ja": "カスタマイズ"
|
||||
"ja": "カスタマイズ",
|
||||
"de": "Anpassen"
|
||||
},
|
||||
"items": [
|
||||
{
|
||||
@@ -520,7 +557,8 @@
|
||||
"ko": "테마",
|
||||
"pl": "Motywy",
|
||||
"fr": "Thèmes",
|
||||
"ja": "テーマ"
|
||||
"ja": "テーマ",
|
||||
"de": "Designs"
|
||||
}
|
||||
},
|
||||
{
|
||||
@@ -534,7 +572,8 @@
|
||||
"ko": "알림",
|
||||
"pl": "Powiadomienia",
|
||||
"fr": "Notifications",
|
||||
"ja": "通知"
|
||||
"ja": "通知",
|
||||
"de": "Benachrichtigungen"
|
||||
}
|
||||
},
|
||||
{
|
||||
@@ -548,7 +587,8 @@
|
||||
"ko": "음성 모드",
|
||||
"pl": "Tryb głosowy",
|
||||
"fr": "Mode vocal",
|
||||
"ja": "音声モード"
|
||||
"ja": "音声モード",
|
||||
"de": "Sprachmodus"
|
||||
}
|
||||
},
|
||||
{
|
||||
@@ -562,7 +602,8 @@
|
||||
"ko": "프로젝트 아이콘",
|
||||
"pl": "Ikony projektów",
|
||||
"fr": "Icônes de projet",
|
||||
"ja": "プロジェクトアイコン"
|
||||
"ja": "プロジェクトアイコン",
|
||||
"de": "Projektsymbole"
|
||||
}
|
||||
}
|
||||
]
|
||||
@@ -577,7 +618,8 @@
|
||||
"ko": "데스크톱",
|
||||
"pl": "Pulpit",
|
||||
"fr": "Desktop",
|
||||
"ja": "デスクトップ"
|
||||
"ja": "デスクトップ",
|
||||
"de": "Desktop"
|
||||
},
|
||||
"items": [
|
||||
{
|
||||
@@ -591,7 +633,8 @@
|
||||
"ko": "원격 인스턴스",
|
||||
"pl": "Zdalne instancje",
|
||||
"fr": "Instances distantes",
|
||||
"ja": "リモートインスタンス"
|
||||
"ja": "リモートインスタンス",
|
||||
"de": "Entfernte Instanzen"
|
||||
}
|
||||
},
|
||||
{
|
||||
@@ -605,7 +648,8 @@
|
||||
"ko": "데스크톱 브라우저",
|
||||
"pl": "Przeglądarka na pulpicie",
|
||||
"fr": "Navigateur desktop",
|
||||
"ja": "デスクトップブラウザ"
|
||||
"ja": "デスクトップブラウザ",
|
||||
"de": "Desktop-Browser"
|
||||
}
|
||||
},
|
||||
{
|
||||
@@ -619,7 +663,8 @@
|
||||
"ko": "데스크톱 터널",
|
||||
"pl": "Tunele w aplikacji desktopowej",
|
||||
"fr": "Tunnels desktop",
|
||||
"ja": "デスクトップトンネル"
|
||||
"ja": "デスクトップトンネル",
|
||||
"de": "Desktop-Tunnel"
|
||||
}
|
||||
},
|
||||
{
|
||||
@@ -633,7 +678,8 @@
|
||||
"ko": "SSH 호스트 및 프록시",
|
||||
"pl": "Hosty SSH i proxy",
|
||||
"fr": "Hosts SSH et proxy",
|
||||
"ja": "SSH ホストとプロキシ"
|
||||
"ja": "SSH ホストとプロキシ",
|
||||
"de": "SSH-Hosts und Proxying"
|
||||
}
|
||||
},
|
||||
{
|
||||
@@ -647,7 +693,8 @@
|
||||
"ko": "업데이트",
|
||||
"pl": "Aktualizacje",
|
||||
"fr": "Mises à jour",
|
||||
"ja": "更新"
|
||||
"ja": "更新",
|
||||
"de": "Aktualisierungen"
|
||||
}
|
||||
}
|
||||
]
|
||||
@@ -662,7 +709,8 @@
|
||||
"ko": "도움말",
|
||||
"pl": "Pomoc",
|
||||
"fr": "Aide",
|
||||
"ja": "ヘルプ"
|
||||
"ja": "ヘルプ",
|
||||
"de": "Hilfe"
|
||||
},
|
||||
"items": [
|
||||
{
|
||||
@@ -676,7 +724,8 @@
|
||||
"ko": "문제 해결",
|
||||
"pl": "Rozwiązywanie problemów",
|
||||
"fr": "Dépannage",
|
||||
"ja": "トラブルシューティング"
|
||||
"ja": "トラブルシューティング",
|
||||
"de": "Fehlerbehebung"
|
||||
}
|
||||
},
|
||||
{
|
||||
@@ -690,7 +739,8 @@
|
||||
"ko": "OpenCode 연결",
|
||||
"pl": "Połączenie z OpenCode",
|
||||
"fr": "Connexion à OpenCode",
|
||||
"ja": "OpenCode 接続"
|
||||
"ja": "OpenCode 接続",
|
||||
"de": "OpenCode-Verbindung"
|
||||
}
|
||||
},
|
||||
{
|
||||
@@ -704,7 +754,8 @@
|
||||
"ko": "Worktree 및 Git",
|
||||
"pl": "Worktree i Git",
|
||||
"fr": "Worktrees et Git",
|
||||
"ja": "Worktrees と Git"
|
||||
"ja": "Worktrees と Git",
|
||||
"de": "Worktrees und Git"
|
||||
}
|
||||
},
|
||||
{
|
||||
@@ -718,7 +769,8 @@
|
||||
"ko": "원격 접속",
|
||||
"pl": "Dostęp zdalny",
|
||||
"fr": "Accès distant",
|
||||
"ja": "リモートアクセス"
|
||||
"ja": "リモートアクセス",
|
||||
"de": "Externer Zugriff"
|
||||
}
|
||||
}
|
||||
]
|
||||
|
||||
@@ -209,12 +209,32 @@ const JA_MESSAGES: BootstrapMessages = {
|
||||
loadingData: (providersText, agentsText) => `データを読み込み中 (${providersText}, ${agentsText})…`,
|
||||
};
|
||||
|
||||
const DE_MESSAGES: BootstrapMessages = {
|
||||
startingApi: 'OpenCode API wird gestartet…',
|
||||
initializing: 'Initialisierung…',
|
||||
connecting: 'Verbindung wird hergestellt…',
|
||||
connected: 'Verbunden!',
|
||||
connectionError: 'Verbindungsfehler',
|
||||
disconnected: 'Verbindung getrennt',
|
||||
reconnecting: 'Verbindung wird wiederhergestellt…',
|
||||
initialDataLoadFailed: 'OpenCode ist verbunden, aber die Anfangsdaten konnten nicht geladen werden.',
|
||||
cliNotFound: 'OpenCode CLI wurde nicht gefunden. Installieren Sie es zuerst.',
|
||||
providersReady: '✓ Anbieter',
|
||||
providersLoading: '… Anbieter',
|
||||
agentsReady: '✓ Agents',
|
||||
agentsLoading: '… Agents',
|
||||
startingDevServer: (hostLabel) => `Webview-Entwicklungsserver wird gestartet (${hostLabel})...`,
|
||||
waitingDevServer: (hostLabel, attempt) => `Warten auf den Webview-Entwicklungsserver (${hostLabel})... Versuch ${attempt}`,
|
||||
loadingData: (providersText, agentsText) => `Daten werden geladen (${providersText}, ${agentsText})…`,
|
||||
};
|
||||
|
||||
export const getBootstrapMessages = (locale: Locale): BootstrapMessages => {
|
||||
return BOOTSTRAP_MESSAGES[locale];
|
||||
};
|
||||
|
||||
const BOOTSTRAP_MESSAGES: Record<Locale, BootstrapMessages> = {
|
||||
en: EN_MESSAGES,
|
||||
de: DE_MESSAGES,
|
||||
fr: FR_MESSAGES,
|
||||
'zh-CN': ZH_CN_MESSAGES,
|
||||
'zh-TW': ZH_TW_MESSAGES,
|
||||
|
||||
@@ -3,6 +3,7 @@ import type { Locale } from './runtime';
|
||||
|
||||
const INTL_LOCALE_BY_LOCALE: Record<Locale, string> = {
|
||||
en: 'en-US',
|
||||
de: 'de-DE',
|
||||
fr: 'fr-FR',
|
||||
'zh-CN': 'zh-CN',
|
||||
'zh-TW': 'zh-TW',
|
||||
|
||||
@@ -2,6 +2,7 @@ import { describe, expect, test } from 'bun:test';
|
||||
|
||||
import { dict as enDict } from './messages/en';
|
||||
import { dict as esDict } from './messages/es';
|
||||
import { dict as deDict } from './messages/de';
|
||||
import { dict as frDict } from './messages/fr';
|
||||
import { dict as jaDict } from './messages/ja';
|
||||
import { dict as koDict } from './messages/ko';
|
||||
@@ -13,6 +14,7 @@ import { dict as zhTwDict } from './messages/zh-TW';
|
||||
|
||||
const localeDictionaries = {
|
||||
en: enDict,
|
||||
de: deDict,
|
||||
fr: frDict,
|
||||
es: esDict,
|
||||
ja: jaDict,
|
||||
@@ -35,6 +37,7 @@ describe('i18n dictionaries', () => {
|
||||
|
||||
test('all locales expose language label keys', () => {
|
||||
for (const [, dictionary] of Object.entries(localeDictionaries)) {
|
||||
expect(dictionary['common.language.german']).toBeTruthy();
|
||||
expect(dictionary['common.language.french']).toBeTruthy();
|
||||
expect(dictionary['common.language.japanese']).toBeTruthy();
|
||||
}
|
||||
|
||||
@@ -532,9 +532,7 @@ export const settingsDict = {
|
||||
'settings.behavior.page.warning.title': 'Globale Regeln werden mit Projektregeln kombiniert',
|
||||
'settings.behavior.page.warning.description': 'Hier vorgenommene Änderungen aktualisieren {path}. OpenCode berücksichtigt auch alle AGENTS.md-Regeln auf Projektebene, sofern vorhanden.',
|
||||
'settings.behavior.page.section.systemPrompt': 'Globale AGENTS.md',
|
||||
'settings.behavior.page.field.systemPromptPlaceholder': 'Sie sind ein hilfreicher KI-Assistent...
|
||||
|
||||
Verwenden Sie diesen Bereich, um absolute Regeln für das Verhalten der KI über alle Sitzungen und Anbieter hinweg festzulegen.',
|
||||
'settings.behavior.page.field.systemPromptPlaceholder': 'Sie sind ein hilfreicher KI-Assistent...\n\nVerwenden Sie diesen Bereich, um absolute Regeln für das Verhalten der KI über alle Sitzungen und Anbieter hinweg festzulegen.',
|
||||
'settings.behavior.page.section.responseStyle': 'Antwortstil',
|
||||
'settings.behavior.page.responseStyle.tooltip': 'Wenn aktiviert, steuern diese Anweisungen, wie der Assistent in jedem neuen Gespräch antwortet.',
|
||||
'settings.behavior.page.responseStyle.enableAria': 'Antwortstil-Anweisungen aktivieren',
|
||||
@@ -898,7 +896,6 @@ Verwenden Sie diesen Bereich, um absolute Regeln für das Verhalten der KI über
|
||||
'settings.openchamber.desktopNetwork.field.windowControlsPosition': 'Position der Fenstersteuerung',
|
||||
'settings.openchamber.desktopNetwork.field.windowControlsPositionDescription': 'Wählen Sie aus, wo die Schaltflächen zum Minimieren, Maximieren und Schließen angezeigt werden. Auto folgt Ihrem Betriebssystem.',
|
||||
'settings.openchamber.desktopNetwork.field.windowControlsPositionAria': 'Position der Fenstersteuerung',
|
||||
'settings.openchamber.desktopNetwork.option.windowControlsAuto': 'Auto',
|
||||
'settings.openchamber.desktopNetwork.option.windowControlsLeft': 'Links',
|
||||
'settings.openchamber.desktopNetwork.option.windowControlsRight': 'Rechts',
|
||||
'settings.openchamber.desktopNetwork.field.launchAtLoginAria': 'OpenChamber bei Anmeldung starten',
|
||||
@@ -1046,7 +1043,6 @@ Verwenden Sie diesen Bereich, um absolute Regeln für das Verhalten der KI über
|
||||
'settings.openchamber.keyboardShortcuts.action.toggle_right_sidebar.label': 'Rechte Seitenleiste umschalten',
|
||||
'settings.openchamber.keyboardShortcuts.action.open_right_sidebar_git.label': 'Git-Tab der rechten Seitenleiste öffnen',
|
||||
'settings.openchamber.keyboardShortcuts.action.open_right_sidebar_files.label': 'Datei-Tab der rechten Seitenleiste öffnen',
|
||||
'settings.openchamber.keyboardShortcuts.action.cycle_right_sidebar_tab.label': 'Rechte Seitenleisten-Tab durchschalten',
|
||||
'settings.openchamber.keyboardShortcuts.action.new_chat.label': 'Neue Sitzung',
|
||||
'settings.openchamber.keyboardShortcuts.action.new_chat_worktree.label': 'Neuer Worktree-Entwurf',
|
||||
'settings.openchamber.keyboardShortcuts.action.new_mini_chat.label': 'Neues Mini-Chat-Fenster',
|
||||
@@ -1953,4 +1949,95 @@ Verwenden Sie diesen Bereich, um absolute Regeln für das Verhalten der KI über
|
||||
'settings.openchamber.visual.field.followUpBehaviorDescription': 'Wählen Sie aus, was passiert, wenn Sie Enter auf einer Follow-up-Nachricht drücken, während der Agent noch antwortet.',
|
||||
'settings.openchamber.visual.option.followUpBehavior.steer.label': 'Steuerung',
|
||||
'settings.openchamber.visual.option.followUpBehavior.queue.label': 'Warteschlange',
|
||||
|
||||
'settings.providers.page.quotaCredentials.accessToken': 'Zugriffstoken',
|
||||
'settings.providers.page.quotaCredentials.refreshToken': 'Aktualisierungstoken',
|
||||
'settings.providers.page.quotaCredentials.tokenPlaceholder': 'Token einfügen',
|
||||
'settings.view.nav.group.general': 'OpenChamber',
|
||||
'settings.view.nav.group.projects': 'Arbeitsbereich',
|
||||
'settings.view.nav.group.opencode': 'OpenCode',
|
||||
'settings.view.nav.group.content': 'Bibliothek',
|
||||
'settings.page.appearance.description': 'Passe an, wie OpenChamber aussieht und sich anfühlt.',
|
||||
'settings.page.chat.description': 'Konfiguriere, wie Nachrichten und Werkzeuge angezeigt werden.',
|
||||
'settings.page.shortcuts.description': 'Tastenkürzel anpassen.',
|
||||
'settings.page.general.title': 'Allgemein',
|
||||
'settings.page.general.description': 'App-Start, Sicherheit, Verbindung und Datenschutz.',
|
||||
'settings.page.sessions.description': 'Standardwerte und Aufbewahrung für Sitzungen festlegen.',
|
||||
'settings.page.notifications.description': 'Wähle, wann und wie du benachrichtigt wirst.',
|
||||
'settings.page.voice.description': 'Spracheingabe und Diktat konfigurieren.',
|
||||
'settings.page.tunnel.description': 'Diese Instanz über einen Remote-Tunnel bereitstellen.',
|
||||
'settings.common.infoAria': 'Weitere Informationen',
|
||||
'settings.common.status.saved': 'Gespeichert',
|
||||
'settings.common.status.saveFailed': 'Speichern fehlgeschlagen',
|
||||
'settings.agents.page.permissionsEditor.sectionInfo': 'Bearbeitet die eigenen Berechtigungsregeln dieses Agenten genau so, wie sie in seiner Konfiguration gespeichert sind. „Vererben“ lässt einen Schlüssel unset, damit globale Konfiguration und Standardwerte gelten.',
|
||||
'settings.agents.page.permissionsEditor.defaultLabel': 'Standard für alle Werkzeuge',
|
||||
'settings.agents.page.permissionsEditor.defaultAria': 'Standardberechtigung für alle Werkzeuge',
|
||||
'settings.agents.page.permissionsEditor.defaultInfo': 'Der agentenweite Fallback (der *-Schlüssel). Gilt für jedes Werkzeug ohne eigene Regel.',
|
||||
'settings.agents.page.permissionsEditor.effectiveHint': '→ {action}',
|
||||
'settings.agents.page.permissionsEditor.ruleCount': '{count} Regeln',
|
||||
'settings.agents.page.permissionsEditor.keyAria': 'Berechtigung für {key}',
|
||||
'settings.agents.page.permissionsEditor.patternPlaceholder': 'Muster, z. B. rm -rf * oder /pfad/**',
|
||||
'settings.agents.page.permissionsEditor.patternActionAria': 'Aktion für das Muster {key}',
|
||||
'settings.agents.page.permissionsEditor.customKeyPlaceholder': 'Benutzerdefinierter Berechtigungsschlüssel…',
|
||||
'settings.agents.page.permissionsEditor.sessionRulesTitle': 'In Sitzung gewährt (nicht gespeichert)',
|
||||
'settings.agents.page.permissionsEditor.sessionRulesInfo': 'Regeln, die während aktiver Sitzungen gewährt wurden (z. B. Antworten wie „immer erlauben“). Sie gelten sofort, sind aber kein Teil der gespeicherten Konfiguration und verschwinden beim Neustart.',
|
||||
'settings.agents.page.permissionsEditor.action.default': 'Standard',
|
||||
'settings.agents.page.permissionsEditor.action.inherit': 'Vererben',
|
||||
'settings.agents.page.permissionsEditor.action.allow': 'Erlauben',
|
||||
'settings.agents.page.permissionsEditor.action.ask': 'Nachfragen',
|
||||
'settings.agents.page.permissionsEditor.action.deny': 'Verweigern',
|
||||
'settings.agents.page.permissionsEditor.actions.save': 'Berechtigungen speichern',
|
||||
'settings.agents.page.permissionsEditor.actions.discard': 'Verwerfen',
|
||||
'settings.agents.page.permissionsEditor.actions.addRule': 'Regel hinzufügen',
|
||||
'settings.agents.page.permissionsEditor.actions.addKey': 'Schlüssel hinzufügen',
|
||||
'settings.agents.page.permissionsEditor.actions.removeRuleAria': 'Regel entfernen',
|
||||
'settings.agents.page.permissionsEditor.actions.retry': 'Erneut versuchen',
|
||||
'settings.agents.page.permissionsEditor.state.loadFailed': 'Agenten-Berechtigungskonfiguration konnte nicht geladen werden.',
|
||||
'settings.agents.page.permissionsEditor.toast.saved': 'Berechtigungen gespeichert',
|
||||
'settings.agents.page.permissionsEditor.toast.savedRestartRequired': 'Berechtigungen gespeichert — OpenCode-Server neu starten, um sie anzuwenden',
|
||||
'settings.agents.page.permissionsEditor.toast.saveFailed': 'Berechtigungen konnten nicht gespeichert werden',
|
||||
'settings.page.behavior.description': 'Lege fest, wie der Agent reagiert.',
|
||||
'settings.behavior.page.section.systemPromptOptimization': 'System-Prompt-Optimierung',
|
||||
'settings.behavior.page.systemPromptOptimization.enable': 'Größe des System-Prompts optimieren',
|
||||
'settings.behavior.page.systemPromptOptimization.enableAria': 'Größe des OpenCode-System-Prompts optimieren',
|
||||
'settings.behavior.page.systemPromptOptimization.info': 'Reduziert den System-Prompt für die Build- und Plan-Agenten schätzungsweise um 40 %. Andere Agenten bleiben unverändert. Dadurch können benutzerdefinierte Definitionen entfernt werden, die Build oder Plan überschreiben, daher nicht für Workflows aktivieren, die diese Agenten anpassen. Ein Neustart von OpenCode wendet die Änderung an.',
|
||||
'settings.behavior.page.systemPromptOptimization.restarting': 'OpenCode wird neu gestartet, um die System-Prompt-Optimierung anzuwenden…',
|
||||
'settings.openchamber.desktopNetwork.field.windowControls': 'Fenstersteuerungen',
|
||||
'settings.openchamber.desktopNetwork.field.windowControlsStyle': 'Stil',
|
||||
'settings.openchamber.desktopNetwork.field.windowControlsStyleAria': 'Stil der Fenstersteuerungen',
|
||||
'settings.openchamber.desktopNetwork.option.windowControlsClassic': 'Klassisch',
|
||||
'settings.openchamber.desktopNetwork.option.windowControlsTrafficLights': 'Ampeln',
|
||||
'settings.openchamber.desktopNetwork.field.macMenuBarAria': 'OpenChamber in der macOS-Menüleiste anzeigen',
|
||||
'settings.openchamber.desktopNetwork.field.macMenuBar': 'OpenChamber in der Menüleiste anzeigen',
|
||||
'settings.openchamber.desktopNetwork.field.macMenuBarDescription': 'Erfordert einen Neustart der App. Wenn deaktiviert, erstellt OpenChamber weder den Menüleisten-Eintrag noch führt es dessen Sitzungs-, Genehmigungs- und Nutzungsaktualisierungen aus.',
|
||||
'settings.openchamber.desktopPassword.actions.showPassword': 'Passwort anzeigen',
|
||||
'settings.openchamber.desktopPassword.actions.hidePassword': 'Passwort verbergen',
|
||||
'settings.openchamber.opencodeCli.field.agentControlTool': 'Agenten-Steuerungswerkzeug',
|
||||
'settings.openchamber.opencodeCli.field.agentControlToolAria': 'Das Agenten-Steuerungswerkzeug aktivieren',
|
||||
'settings.openchamber.opencodeCli.field.agentControlToolInfo': 'Lässt Agenten deine Arbeit per Chat orchestrieren: Sitzungen und Arbeitsbereiche starten, Prompts an andere Agenten delegieren und geplante Aufgaben verwalten. Fügt jeder Sitzung eine kleine Werkzeugbeschreibung hinzu. Gilt nach Speichern + Neuladen.',
|
||||
'settings.openchamber.defaults.walkthroughModel.title': 'Walkthrough-Modell ändern',
|
||||
'settings.openchamber.defaults.walkthroughModel.description': 'Die KI-Prüfung deiner Änderungen benötigt strukturierten Output und Platz für einen ganzen Diff, den ein günstiges kleines Modell oft nicht liefern kann. Modelle, die der Katalog als nicht in der Lage zu strukturiertem Output meldet, werden in diesem Auswahlfeld ausgeblendet. Lasse es leer, dann wird das kleine Modell verwendet.',
|
||||
'settings.openchamber.defaults.walkthroughModel.overrideModel': 'Walkthrough-Modell',
|
||||
'settings.openchamber.defaults.walkthroughModel.usesSmallModel': 'Kleines Modell',
|
||||
'settings.voice.page.provider.openai': 'OpenAI',
|
||||
'settings.openchamber.visual.section.colorModeAndTheme': 'Farbmodus & Theme',
|
||||
'settings.openchamber.visual.section.densityAndType': 'Dichte & Typografie',
|
||||
'settings.openchamber.visual.section.appInstall': 'App-Installation',
|
||||
'settings.openchamber.visual.section.chatDisplay': 'Anzeige',
|
||||
'settings.openchamber.visual.section.chatMessageOptions': 'Nachrichtenoptionen',
|
||||
'settings.openchamber.visual.section.chatFeatures': 'Funktionen',
|
||||
'settings.openchamber.visual.field.terminalShell': 'Terminal-Shell',
|
||||
'settings.openchamber.visual.field.terminalShellAria': 'Terminal-Shell auswählen',
|
||||
'settings.openchamber.visual.field.terminalShellHint': 'Terminal neu starten, um diese Änderung auf die aktuelle Sitzung anzuwenden.',
|
||||
'settings.openchamber.visual.field.terminalLoginShell': 'Als Login-Shell starten',
|
||||
'settings.openchamber.visual.option.terminalShell.auto': 'Automatisch',
|
||||
'settings.openchamber.visual.field.autoSaveEnabledAria': 'Dateien automatisch speichern',
|
||||
'settings.openchamber.visual.field.autoSaveEnabled': 'Dateien automatisch speichern',
|
||||
'settings.openchamber.visual.field.autoSaveEnabledInfo': 'Dateiänderungen automatisch speichern, nachdem du mit dem Tippen aufgehört hast. Deaktivieren, um manuelles Speichern zu verlangen.',
|
||||
'settings.openchamber.visual.field.draftStartersVisible': 'Starter auf dem Bildschirm für neue Sitzungen anzeigen',
|
||||
'settings.openchamber.visual.field.draftStartersVisibleAria': 'Starter auf dem Bildschirm für neue Sitzungen anzeigen',
|
||||
'settings.openchamber.visual.option.themeMode.system.description': 'Systemeinstellung übernehmen',
|
||||
'settings.openchamber.visual.option.themeMode.light.description': 'Immer helles Erscheinungsbild verwenden',
|
||||
'settings.openchamber.visual.option.themeMode.dark.description': 'Immer dunkles Erscheinungsbild verwenden',
|
||||
'chat.message.userText.collapseAria': 'Benutzernachricht einklappen',
|
||||
};
|
||||
|
||||
@@ -3,7 +3,6 @@ import { settingsDict } from './de.settings';
|
||||
export const dict = {
|
||||
...settingsDict,
|
||||
'common.language.german': 'Deutsch',
|
||||
'chat.message.userText.collapseAria': 'Benutzer-Nachricht einklappen',
|
||||
'common.loading': 'Wird geladen...',
|
||||
'common.unavailable': 'Nicht verfügbar',
|
||||
'common.language.english': 'Englisch',
|
||||
@@ -24,13 +23,6 @@ export const dict = {
|
||||
'pwa.installPrompt.dismiss': 'Schließen',
|
||||
'pwa.installPrompt.started': 'Installation gestartet',
|
||||
'pwa.installPrompt.installed': 'OpenChamber installiert',
|
||||
'shareOpinion.actions.shareOpinion': 'Meinung teilen',
|
||||
'shareOpinion.actions.bookCall': 'Anruf vereinbaren',
|
||||
'shareOpinion.actions.shortSurvey': 'Kurze Umfrage',
|
||||
'shareOpinion.dialog.title': 'Teile deine Meinung',
|
||||
'shareOpinion.toast.title': 'Hilf bei der Gestaltung von OpenChamber',
|
||||
'shareOpinion.toast.description': 'Teile, was nützlich, verwirrend oder fehlt, um mitzuwirken, was als Nächstes kommt.',
|
||||
'sessions.sidebar.footer.actions.shareOpinion': 'Meinung teilen',
|
||||
'layout.mainTab.chat': 'Chat',
|
||||
'layout.mainTab.plan': 'Plan',
|
||||
'layout.mainTab.diff': 'Diff',
|
||||
@@ -87,10 +79,8 @@ export const dict = {
|
||||
'mobile.nav.changes': 'Änderungen',
|
||||
'mobile.nav.settings': 'Einstellungen',
|
||||
'mobile.surface.closeAria': 'Schließen',
|
||||
'mobile.header.openMenuAria': 'Menü öffnen',
|
||||
'mobile.header.openMetadataAria': 'Sitzungs-Metadaten öffnen',
|
||||
'mobile.header.metadata.context': 'Kontext',
|
||||
'mobile.header.metadata.branch': 'Zweig',
|
||||
'mobile.header.metadata.usage': 'Nutzung',
|
||||
'mobile.menu.titleAria': 'Arbeitsbereichstools',
|
||||
'mobile.menu.files': 'Dateien',
|
||||
@@ -127,8 +117,6 @@ export const dict = {
|
||||
'mobile.sessions.moveUpAria': '{label} nach oben verschieben',
|
||||
'mobile.sessions.moveDownAria': '{label} nach unten verschieben',
|
||||
'mobile.sessions.removeProjectAria': '{label} entfernen',
|
||||
'mobile.sessions.cancelRemoveProjectAria': 'Entfernen von {label} abbrechen',
|
||||
'mobile.sessions.confirmRemoveProject': 'Schließen',
|
||||
'mobile.sessions.confirmRemoveProjectAria': 'Entfernen von {label} bestätigen',
|
||||
'mobile.sessions.toast.projectRemoved': '{label} entfernt',
|
||||
'mobile.sessions.archiveSessionAria': '{title} archivieren',
|
||||
@@ -966,9 +954,6 @@ export const dict = {
|
||||
'gitView.pullRequest.createHint': 'Erstelle und verwalte Pull-Requests aus diesem Branch.',
|
||||
'gitView.pullRequest.availableOnFeatureBranches': 'Verfügbar, wenn der aktuelle Branch einen Pull-Request öffnen kann.',
|
||||
'gitView.pullRequest.title': 'Pull-Request',
|
||||
'gitView.tabs.commit': 'Commit',
|
||||
'gitView.tabs.pr': 'PR',
|
||||
'gitView.tabs.update': 'Update',
|
||||
'gitView.tabs.worktree': 'Worktree',
|
||||
'gitView.toast.abortOperationFailed': 'Fehler beim Abbrechen der Operation',
|
||||
'gitView.toast.appliedIdentity': 'Identität angewendet: {name}',
|
||||
@@ -1070,12 +1055,8 @@ export const dict = {
|
||||
'contextPanel.preview.startFailed': 'Fehler beim Starten des Vorschau-Servers.',
|
||||
'contextPanel.preview.serverExited': 'Dev-Server wurde unerwartet beendet.',
|
||||
'contextPanel.preview.noUrlDetected': 'Dev-Server gestartet, aber keine URL in der Ausgabe erkannt. Öffne den Vorschau-Terminal-Tab, um die Protokolle zu prüfen.',
|
||||
'contextPanel.preview.serverExitedWithLog': 'Dev-Server wurde unerwartet beendet. Letzte Ausgabe:
|
||||
|
||||
{log}',
|
||||
'contextPanel.preview.noUrlDetectedWithLog': 'Dev-Server ist nicht erreichbar geworden. Letzte Ausgabe:
|
||||
|
||||
{log}',
|
||||
'contextPanel.preview.serverExitedWithLog': 'Dev-Server wurde unerwartet beendet. Letzte Ausgabe:\n\n{log}',
|
||||
'contextPanel.preview.noUrlDetectedWithLog': 'Dev-Server ist nicht erreichbar geworden. Letzte Ausgabe:\n\n{log}',
|
||||
'contextPanel.preview.console.open': 'Vorschau-Konsole öffnen',
|
||||
'contextPanel.preview.console.waiting': 'Warte auf Vorschau-Konsole',
|
||||
'contextPanel.preview.console.title': 'Vorschau-Konsole',
|
||||
@@ -1444,7 +1425,6 @@ export const dict = {
|
||||
'chat.goal.action.save': 'Ziel speichern',
|
||||
'chat.goal.action.start': 'Ziel starten',
|
||||
'chat.goal.toast.actionFailed': 'Aktualisierung des Ziels fehlgeschlagen',
|
||||
'chat.goal.toast.distillFallback': 'Ziel überschreitet das Limit und konnte nicht reduziert werden — eine gekürzte Version wird für den Prüfer verwendet',
|
||||
'chat.goal.row.aria': 'Sitzungsziel — Details öffnen',
|
||||
'chat.goal.button.createAria': 'Sitzungsziel festlegen',
|
||||
'chat.goal.button.manageAria': 'Sitzungsziel verwalten',
|
||||
@@ -1485,13 +1465,6 @@ export const dict = {
|
||||
'terminalView.quickKeys.enterAria': 'Enter',
|
||||
'terminalView.tabs.closeTabTitle': 'Registerkarte schließen',
|
||||
'terminalView.tabs.newTabTitle': 'Neue Registerkarte',
|
||||
'terminalView.bottomDock.resizeAria': 'Größe des Terminalbereichs ändern',
|
||||
'terminalView.bottomDock.restoreTitle': 'Höhe des Terminalbereichs wiederherstellen',
|
||||
'terminalView.bottomDock.restoreAria': 'Höhe des Terminalbereichs wiederherstellen',
|
||||
'terminalView.bottomDock.expandTitle': 'Terminalbereich ausklappen',
|
||||
'terminalView.bottomDock.expandAria': 'Terminalbereich ausklappen',
|
||||
'terminalView.bottomDock.closeTitle': 'Terminalbereich schließen',
|
||||
'terminalView.bottomDock.closeAria': 'Terminalbereich schließen',
|
||||
'terminalView.viewport.inputAria': 'Terminal-Eingabe',
|
||||
'directoryExplorerDialog.title': 'Projektverzeichnis hinzufügen',
|
||||
'directoryExplorerDialog.description': 'Wählen Sie einen Ordner aus, der als Projekt hinzugefügt werden soll.',
|
||||
@@ -1572,7 +1545,6 @@ export const dict = {
|
||||
'helpDialog.item.toggleRightSidebar': 'Rechte Seitenleiste umschalten',
|
||||
'helpDialog.item.openRightSidebarGitTab': 'Git-Registerkarte der rechten Seitenleiste öffnen',
|
||||
'helpDialog.item.openRightSidebarFilesTab': 'Datei-Registerkarte der rechten Seitenleiste öffnen',
|
||||
'helpDialog.item.cycleRightSidebarTab': 'Registerkarte der rechten Seitenleiste wechseln',
|
||||
'helpDialog.item.toggleTerminalDock': 'Terminal-Dock umschalten',
|
||||
'helpDialog.item.toggleTerminalExpanded': 'Terminal erweitert umschalten',
|
||||
'helpDialog.item.togglePlanContextPanel': 'Plan-Kontext-Panel umschalten',
|
||||
@@ -1726,8 +1698,7 @@ export const dict = {
|
||||
'session.githubIntegration.validation.branchAlreadyExists': 'Branch existiert bereits lokal',
|
||||
'session.githubIntegration.validation.failed': 'Validierung fehlgeschlagen',
|
||||
'chat.fileAttachment.toast.attachFailed': 'Fehler beim Anhängen der Datei',
|
||||
'chat.fileAttachment.toast.someFilesSkipped': 'Einige Dateien wurden übersprungen:
|
||||
{summary}',
|
||||
'chat.fileAttachment.toast.someFilesSkipped': 'Einige Dateien wurden übersprungen:\n{summary}',
|
||||
'chat.fileAttachment.toast.vscodePickFailed': 'Fehler beim Auswählen von Dateien in VS Code',
|
||||
'chat.fileAttachment.fileFallback': 'Datei',
|
||||
'chat.fileAttachment.skippedFallback': 'übersprungen',
|
||||
@@ -1986,8 +1957,7 @@ export const dict = {
|
||||
'chat.chatInput.toast.addedFileMentions': '{count} Datei(er) hinzugefügt',
|
||||
'chat.chatInput.toast.attachFileFailed': 'Fehler beim Anhängen der Datei',
|
||||
'chat.chatInput.toast.attachNamedFailed': 'Fehler beim Anhängen von {name}',
|
||||
'chat.chatInput.toast.someFilesSkipped': 'Einige Dateien wurden übersprungen:
|
||||
{summary}',
|
||||
'chat.chatInput.toast.someFilesSkipped': 'Einige Dateien wurden übersprungen:\n{summary}',
|
||||
'chat.chatInput.toast.vscodePickFailed': 'Fehler beim Auswählen der Dateien in VS Code',
|
||||
'chat.chatInput.toast.openSessionFirst': 'Öffne zuerst eine Sitzung',
|
||||
'chat.chatInput.toast.togglePermissionAutoAcceptFailed': 'Fehler beim Umschalten der automatischen Zustimmung zur Berechtigung',
|
||||
@@ -2008,21 +1978,6 @@ export const dict = {
|
||||
'chat.chatInput.drop.insertMention': 'Hier ablegen, um als Erwähnung einzufügen',
|
||||
'chat.chatInput.drop.attachFiles': 'Dateien hier ablegen, um sie anzuhängen',
|
||||
'chat.chatInput.fileFallback': 'Datei',
|
||||
'chat.mobileStatus.editProjects.title': 'Projekte bearbeiten',
|
||||
'chat.mobileStatus.editProjects.footer': 'Ziehen Sie Elemente, um die Reihenfolge zu ändern, oder verwenden Sie Pfeile zum Verschieben. Tippen Sie auf Bearbeiten, um Details zu ändern.',
|
||||
'chat.mobileStatus.editProjects.empty': 'Keine Projekte zum Bearbeiten',
|
||||
'chat.mobileStatus.projects.empty': 'Keine Projekte',
|
||||
'chat.mobileStatus.projects.addAria': 'Projekt hinzufügen',
|
||||
'chat.mobileStatus.projects.removeTitle': 'Projekt entfernen',
|
||||
'chat.mobileStatus.projects.removeDescriptionPrefix': 'Sind Sie sicher, dass Sie folgendes entfernen möchten',
|
||||
'chat.mobileStatus.projects.cancel': 'Abbrechen',
|
||||
'chat.mobileStatus.projects.remove': 'Entfernen',
|
||||
'chat.mobileStatus.new': 'Neu',
|
||||
'chat.mobileStatus.noSessionsInProject': 'Keine Sitzungen in diesem Projekt',
|
||||
'chat.mobileStatus.swipeHint': '← Hier wischen, um Seitenleisten zu öffnen →',
|
||||
'chat.mobileStatus.toast.addProjectFailed': 'Fehler beim Hinzufügen des Projekts',
|
||||
'chat.mobileStatus.toast.selectValidDirectory': 'Bitte wählen Sie ein gültiges Verzeichnis aus.',
|
||||
'chat.mobileStatus.toast.selectDirectoryFailed': 'Fehler beim Auswählen des Verzeichnisses',
|
||||
'chat.toolOutputDialog.image.previousAria': 'Vorheriges Bild',
|
||||
'chat.toolOutputDialog.image.nextAria': 'Nächstes Bild',
|
||||
'chat.toolOutputDialog.image.closeAria': 'Bildvorschau schließen',
|
||||
@@ -2177,7 +2132,6 @@ export const dict = {
|
||||
'commandPalette.item.addProject': 'Projekt hinzufügen',
|
||||
'commandPalette.item.showSessionSwitcher': 'Sitzungsumschalter anzeigen',
|
||||
'commandPalette.item.toggleSidebar': 'Seitenleiste umschalten',
|
||||
'commandPalette.item.toggleRightSidebar': 'Rechte Seitenleiste umschalten',
|
||||
'commandPalette.item.showContextUsage': 'Kontextnutzung anzeigen',
|
||||
'commandPalette.item.toggleTerminal': 'Terminal umschalten',
|
||||
'commandPalette.item.openSettings': 'Einstellungen öffnen...',
|
||||
@@ -2565,11 +2519,9 @@ export const dict = {
|
||||
'onboarding.localSetup.docs.windows': 'OpenCode-Dokumentation',
|
||||
'onboarding.localSetup.docs.default': 'OpenCode-Dokumentation',
|
||||
'onboarding.localSetup.actions.checking': 'Überprüfe…',
|
||||
'onboarding.localSetup.actions.checkAndContinue': 'Ich habe die Installation abgeschlossen, überprüfen und fortfahren',
|
||||
'onboarding.localSetup.actions.checkNow': 'Jetzt überprüfen',
|
||||
'onboarding.localSetup.helper.checkAndContinue': 'Klicken Sie, um zu prüfen, ob OpenCode CLI verfügbar ist. Bei Erfolg gelangen Sie automatisch zum Hauptbildschirm.',
|
||||
'onboarding.localSetup.status.watching': 'Warte auf OpenCode',
|
||||
'onboarding.localSetup.status.autoContinue': 'Wir fahren automatisch fort, sobald es erkannt wurde.',
|
||||
'onboarding.localSetup.field.alreadyInstalled': 'Bereits installiert? Legen Sie den OpenCode CLI-Pfad fest:',
|
||||
'onboarding.localSetup.advanced.title': 'Benutzerdefinierten Binärpfad festlegen',
|
||||
'onboarding.localSetup.troubleshoot.title': 'Probleme beim Verbinden?',
|
||||
@@ -2657,7 +2609,6 @@ export const dict = {
|
||||
'vscodeLayout.quota.actions.refreshAria': 'Ratenlimits aktualisieren',
|
||||
'updateDialog.header.updateAvailable': 'Update verfügbar',
|
||||
'updateDialog.header.updating': 'OpenChamber wird aktualisiert...',
|
||||
'updateDialog.changelog.title': 'Was ist neu',
|
||||
'updateDialog.status.installingUpdate': 'Update wird installiert...',
|
||||
'updateDialog.status.serverRestarting': 'Server wird neu gestartet...',
|
||||
'updateDialog.status.waitingForServer': 'Warten auf Server...',
|
||||
@@ -2790,4 +2741,168 @@ export const dict = {
|
||||
'quota.window.chat': 'Chat-Anfragen',
|
||||
'quota.window.completions': 'Vervollständigungen',
|
||||
'quota.window.premiumInteractions': 'Premium-Interaktionen',
|
||||
'terminalView.actions.attachSelection': 'Ausgewählte Ausgabe anhängen',
|
||||
'terminalView.actions.restart': 'Terminal neu starten',
|
||||
'chat.message.terminalContext': '{terminal}, Zeilen {start}-{end}',
|
||||
'chat.chatInput.terminalContext': '{terminal}, Zeilen {start}-{end}',
|
||||
'chat.chatInput.terminalContextRemove': 'Terminal-Kontext entfernen',
|
||||
'chat.chatInput.prCommentContext': 'PR-Kommentare',
|
||||
'chat.chatInput.prCommentContextRemove': 'PR-Kommentarkontext entfernen',
|
||||
'chat.chatInput.prCheckContext': 'Fehlgeschlagene PR-Prüfungen',
|
||||
'chat.chatInput.prCheckContextRemove': 'Kontext der PR-Prüfungen entfernen',
|
||||
'mobile.connect.notice.unreachable': '{label} konnte nicht erreicht werden. Prüfen Sie, ob der Server läuft.',
|
||||
'mobile.connect.notice.authExpired': 'Der Zugriff auf {label} ist abgelaufen oder wurde widerrufen. Melden Sie sich erneut an.',
|
||||
'mobile.connect.recovery.description': 'Verbindung mit dem gespeicherten Server nicht möglich. Prüfen Sie, ob er läuft, oder wählen Sie eine andere Instanz.',
|
||||
'mobile.header.openWorkspaceAria': 'Arbeitsbereich öffnen',
|
||||
'mobile.menu.terminal': 'Terminal',
|
||||
'mobile.sessions.renameSessionAria': '{title} umbenennen',
|
||||
'mobile.sessions.renameError': 'Sitzung konnte nicht umbenannt werden',
|
||||
'mobile.sessions.deleteSessionAria': '{title} löschen',
|
||||
'mobile.sessions.confirmDeleteSessionAria': 'Löschen von {title} bestätigen',
|
||||
'mobile.files.editAria': 'Datei bearbeiten',
|
||||
'mobile.files.doneEditingAria': 'Bearbeitung abschließen',
|
||||
'sessions.scheduledTasks.editor.permissionAutoAccept.label': 'Berechtigungen automatisch akzeptieren',
|
||||
'sessions.scheduledTasks.editor.permissionAutoAccept.aria': 'Die Sitzung der Aufgabe mit aktivierter automatischer Berechtigungsannahme starten',
|
||||
'sessions.archivePage.allDirectories': 'Alle Verzeichnisse',
|
||||
'sessions.sidebar.header.displayMode.stickyHeaders': 'Angeheftete Projektüberschriften',
|
||||
'sessions.sidebar.header.grouping.label': 'Sitzungen gruppieren',
|
||||
'sessions.sidebar.header.grouping.byWorktree': 'Nach Worktree',
|
||||
'sessions.sidebar.header.grouping.flat': 'Flache Liste',
|
||||
'sessions.sidebar.project.actions.manageWorktrees': 'Worktrees verwalten',
|
||||
'sessions.worktreesPage.title': 'Worktrees in {project}',
|
||||
'sessions.worktreesPage.description': 'Git-Worktrees für dieses Projekt erstellen, prüfen und entfernen.',
|
||||
'sessions.worktreesPage.closeAria': 'Worktrees schließen',
|
||||
'sessions.scheduledTasks.page.closeAria': 'Geplante Aufgaben schließen',
|
||||
'sessions.sidebar.nav.archive': 'Archiv',
|
||||
'sessions.archivePage.title': 'Archiv',
|
||||
'sessions.archivePage.countSingle': '{count} archivierte Sitzung',
|
||||
'sessions.archivePage.countPlural': '{count} archivierte Sitzungen',
|
||||
'sessions.archivePage.closeAria': 'Archiv schließen',
|
||||
'sessions.archivePage.searchPlaceholder': 'Archivierte Sitzungen durchsuchen',
|
||||
'sessions.archivePage.empty.noArchived': 'Keine archivierten Sitzungen',
|
||||
'sessions.archivePage.empty.noMatches': 'Keine passenden archivierten Sitzungen',
|
||||
'sessions.archivePage.otherProjects': 'andere Projekte',
|
||||
'sessions.archivePage.deleteProject': 'Alle archivierten Sitzungen in diesem Projekt löschen',
|
||||
'sessions.archivePage.deleteProjectAria': 'Alle archivierten Sitzungen in {label} löschen',
|
||||
'sessions.archivePage.deleteSessionAria': '{title} löschen',
|
||||
'header.sessionActions.openAria': 'Sitzungsaktionen öffnen',
|
||||
'sessions.sidebar.session.menu.copyId': 'Sitzungs-ID kopieren',
|
||||
'sessions.sidebar.session.copyId.success': 'Sitzungs-ID kopiert',
|
||||
'sessions.sidebar.session.copyId.error': 'Sitzungs-ID konnte nicht kopiert werden',
|
||||
'sessions.sidebar.session.menu.moveToWorktree': 'In neuen Worktree verschieben',
|
||||
'sessions.sidebar.session.moveToWorktree.success': 'Sitzung in einen neuen Worktree verschoben',
|
||||
'sessions.sidebar.session.moveToWorktree.failed': 'Sitzung konnte nicht in einen neuen Worktree verschoben werden',
|
||||
'sessions.sidebar.session.moveToWorktree.tooltip': 'Erstellt einen neuen Worktree aus dem aktuellen Branch, überträgt nicht gespeicherte Änderungen und verschiebt diese Sitzung samt Untersitzungen dorthin.',
|
||||
'sessions.sidebar.session.moveToWorktree.tooltipBusy': 'Verfügbar, wenn die Sitzung inaktiv ist. Warten Sie oder beenden Sie die aktuelle Aktivität.',
|
||||
'sessions.sidebar.session.moveToWorktree.tooltipMoving': 'Diese Sitzung wird bereits in einen neuen Worktree verschoben.',
|
||||
'sessions.sidebar.session.export.failedLoadHistory': 'Die vollständige Sitzungshistorie konnte nicht geladen werden',
|
||||
'sessions.sidebar.session.status.movingToWorktree': 'Sitzung wird in einen neuen Worktree verschoben',
|
||||
'gitView.header.updateBranch': 'Branch aktualisieren',
|
||||
'gitView.header.openPullRequest': 'Pull Request öffnen',
|
||||
'gitView.history.refresh': 'Verlauf aktualisieren',
|
||||
'gitView.operation.inProgressTitleManyConflicts': 'Operation {operation} läuft: {count} Konflikte',
|
||||
'gitView.operation.inProgressTitleOneConflict': 'Operation {operation} läuft: {count} Konflikt',
|
||||
'gitView.operation.readyToContinueHint': 'Bereit zum Fortfahren',
|
||||
'gitView.pr.segment.overview': 'Übersicht',
|
||||
'gitView.pr.segment.checks': 'Prüfungen',
|
||||
'gitView.pr.segment.comments': 'Kommentare',
|
||||
'gitView.pr.comments.addAll': 'Alle hinzufügen',
|
||||
'contextPanel.mode.pr': 'PR',
|
||||
'contextRail.aria.rail': 'Kontextleiste',
|
||||
'contextPanel.editorEmpty.title': 'Kein Kontext ausgewählt',
|
||||
'contextPanel.editorEmpty.description': 'Wählen Sie etwas aus der Seitenleiste aus, um Kontext anzuzeigen.',
|
||||
'contextRail.surface.editor.description': 'Bearbeitungskontext',
|
||||
'contextRail.surface.git.description': 'Git-Kontext',
|
||||
'contextRail.surface.terminal.description': 'Terminal-Kontext',
|
||||
'contextRail.surface.diff.description': 'Diff-Kontext',
|
||||
'contextPanel.mode.walkthrough': 'Walkthrough',
|
||||
'contextRail.surface.walkthrough.description': 'Walkthrough-Kontext',
|
||||
'walkthrough.scope.all': 'Alle',
|
||||
'walkthrough.scope.group.workingTree': 'Arbeitsbaum',
|
||||
'walkthrough.scope.group.committed': 'Eingecheckt',
|
||||
'walkthrough.scope.staged': 'Bereitgestellt',
|
||||
'walkthrough.scope.working': 'Arbeitsstand',
|
||||
'walkthrough.scope.branch': 'Branch',
|
||||
'walkthrough.scope.selectorAria': 'Walkthrough-Bereich auswählen',
|
||||
'walkthrough.language.menuLabel': 'Sprache',
|
||||
'walkthrough.missing.language': 'Noch kein Walkthrough auf {requested} vorhanden — zeige den Walkthrough auf {shown}.',
|
||||
'walkthrough.missing.model': 'Noch kein Walkthrough von {model} vorhanden — zeige den zuletzt hier erstellten.',
|
||||
'walkthrough.missing.languageAndModel': 'Noch kein Walkthrough auf dieser Sprache von diesem Modell vorhanden — zeige den zuletzt hier erstellten.',
|
||||
'walkthrough.language.selectorAria': 'Sprache auswählen',
|
||||
'walkthrough.scope.pullRequest': 'PR #{number}',
|
||||
'walkthrough.action.generate': 'Generieren',
|
||||
'walkthrough.action.regenerate': 'Erneut generieren',
|
||||
'walkthrough.action.cancel': 'Abbrechen',
|
||||
'walkthrough.action.next': 'Weiter',
|
||||
'walkthrough.action.previous': 'Zurück',
|
||||
'walkthrough.action.refresh': 'Aktualisieren',
|
||||
'walkthrough.action.open': 'Öffnen',
|
||||
'walkthrough.stage.collecting': 'Sammeln',
|
||||
'walkthrough.stage.asking': 'Fragen',
|
||||
'walkthrough.stage.assembling': 'Zusammenstellen',
|
||||
'walkthrough.empty.title': 'Noch nichts vorhanden',
|
||||
'walkthrough.empty.description': 'Wählen Sie Inhalte aus, um einen Walkthrough zu erstellen.',
|
||||
'walkthrough.stale.banner': 'Der Code hat sich nach diesem Review geändert. Veraltete Schritte: {count}',
|
||||
'walkthrough.stop.staleAll': 'Alle veralteten Inhalte stoppen',
|
||||
'walkthrough.stop.stalePartial': 'Ein Teil des vom Schritt beschriebenen Codes hat sich geändert. Fehlende Teile: {count}',
|
||||
'walkthrough.stop.staleShort': 'Veraltete stoppen',
|
||||
'walkthrough.stop.noCode': 'Kein Code vorhanden',
|
||||
'walkthrough.uncovered.title': 'Vom Review ausgelassene Änderungen: {count}',
|
||||
'walkthrough.uncovered.description': 'Diese Bereiche wurden noch nicht in den Walkthrough aufgenommen.',
|
||||
'walkthrough.toc.moreFiles': 'Weitere Dateien: {count}',
|
||||
'walkthrough.toc.uncovered': 'Nicht abgedeckt: {count}',
|
||||
'walkthrough.toc.resize': 'Größe ändern',
|
||||
'walkthrough.importance.critical': 'Kritisch',
|
||||
'walkthrough.importance.context': 'Kontext',
|
||||
'walkthrough.blocked.noModel.title': 'Kein Modell ausgewählt',
|
||||
'walkthrough.blocked.noModel.description': 'Wählen Sie zuerst ein Modell aus.',
|
||||
'walkthrough.blocked.emptyDiff.title': 'Kein Diff vorhanden',
|
||||
'walkthrough.blocked.emptyDiff.description': 'Es gibt keine Änderungen, die zusammengefasst werden können.',
|
||||
'walkthrough.blocked.contextTooSmall.title': 'Kontext zu klein',
|
||||
'walkthrough.blocked.contextTooSmall.description': '{model} passt in etwa {available}K Zeichen, und dieser Diff braucht etwa {required}K. Nichts wird abgeschnitten — wähle stattdessen ein Modell mit größerem Kontext.',
|
||||
'walkthrough.blocked.structuredOutput.title': 'Strukturierte Ausgabe nicht verfügbar',
|
||||
'walkthrough.blocked.structuredOutput.description': '{model} unterstützt die strukturierten Antworten nicht, die ein Walkthrough benötigt.',
|
||||
'walkthrough.blocked.chooseModel': 'Modell auswählen',
|
||||
'walkthrough.blocked.outputExhausted.title': 'Ausgabelimit erreicht',
|
||||
'walkthrough.blocked.outputExhausted.description': '{model} hat sein gesamtes Ausgabelimit fürs Nachdenken verbraucht und nichts zurückgegeben. Denkende Modelle tun das bei großen Diffs oft — ein Modell, das weniger denkt, oder ein schmalerer Review-Bereich reicht eher aus.',
|
||||
'walkthrough.blocked.outputExhausted.descriptionUnknownModel': 'Das kleine Modell hat sein gesamtes Ausgabelimit fürs Nachdenken verbraucht und nichts zurückgegeben. Denkende Modelle tun das bei großen Diffs oft — ein Modell, das weniger denkt, oder ein schmalerer Review-Bereich reicht eher aus.',
|
||||
'walkthrough.blocked.onlyGenerated.title': 'Nur generierter Inhalt',
|
||||
'walkthrough.blocked.onlyGenerated.description': 'Es ist nur generierter Inhalt vorhanden.',
|
||||
'walkthrough.blocked.contextTooSmall.descriptionUnknownModel': 'Das kleine Modell passt in etwa {available}K Zeichen, und dieser Diff braucht etwa {required}K. Nichts wird abgeschnitten — wähle stattdessen ein Modell mit größerem Kontext.',
|
||||
'walkthrough.blocked.structuredOutput.descriptionUnknownModel': 'Das kleine Modell unterstützt die strukturierten Antworten nicht, die ein Walkthrough benötigt.',
|
||||
'contextRail.surface.plan.description': 'Plankontext',
|
||||
'contextRail.surface.pr.description': 'PR-Kontext',
|
||||
'contextRail.surface.notes.description': 'Notizkontext',
|
||||
'contextRail.surface.context.description': 'Allgemeiner Kontext',
|
||||
'contextRail.surface.browser.description': 'Browserkontext',
|
||||
'contextRail.surface.preview.description': 'Vorschaukontext',
|
||||
'contextRail.surface.chat.description': 'Chatkontext',
|
||||
'contextRail.surface.notes': 'Notizen',
|
||||
'contextRail.editorTree.toggle': 'Editorbaum umschalten',
|
||||
'sidebarFilesTree.actions.collapseAllTitle': 'Alle einklappen',
|
||||
'filesView.editor.cannotPreviewBinary': 'Binärdatei kann nicht in der Vorschau angezeigt werden',
|
||||
'filesView.editor.binaryFileDescription': 'Diese Datei ist binär und kann nicht als Text angezeigt werden.',
|
||||
'chat.goal.dialog.evaluationModelLabel': 'Bewertungsmodell',
|
||||
'terminalView.quickKeys.altLabel': 'Alt',
|
||||
'terminalView.quickKeys.altModifierAria': 'Alt-Taste',
|
||||
'chat.draftPresets.scheduleTask.label': 'Aufgabe planen',
|
||||
'chat.statusRow.modelStatus': '{model} ist {status}',
|
||||
'chat.commandAutocomplete.command.scheduleTaskDescription': 'Eine geplante Aufgabe erstellen',
|
||||
'chat.chatInput.toast.scheduleTaskFailed': 'Aufgabe konnte nicht geplant werden',
|
||||
'chat.container.sessionLoadError.title': 'Sitzung konnte nicht geladen werden',
|
||||
'chat.container.sessionLoadError.description': 'Die Sitzung konnte nicht geladen werden.',
|
||||
'chat.container.sessionLoadError.retry': 'Erneut versuchen',
|
||||
'sessions.sidebar.group.empty.loadingSessions': 'Sitzungen werden geladen...',
|
||||
'sessions.sidebar.group.empty.loadFailed': 'Sitzungen konnten nicht geladen werden',
|
||||
'sessions.sidebar.group.empty.retry': 'Erneut versuchen',
|
||||
'chat.messageBody.actions.pinContext': 'Kontext anheften',
|
||||
'chat.messageBody.actions.unpinContext': 'Kontext lösen',
|
||||
'chat.messageBody.actions.contextPinFailed': 'Kontext konnte nicht angeheftet werden',
|
||||
'chat.chatInput.toast.unsupportedAttachmentModalities': '{model} unterstützt den von {files} benötigten Eingabetyp {modalities} nicht. Du kannst die Nachricht trotzdem senden, aber diese Anhänge werden möglicherweise ignoriert.',
|
||||
'projectActions.actions.autoDiscoverTooltip': 'Automatisch erkannte Aktionen',
|
||||
'onboarding.localSetup.windows.stepInstallWslSuffix': 'WSL installieren',
|
||||
'chat.goal.toast.distillFallback': 'Das Ziel überschritt das Limit und konnte nicht verdichtet werden — für die Auswertung wird eine gekürzte Version verwendet',
|
||||
'onboarding.localSetup.actions.checkAndContinue': 'Installation abgeschlossen, prüfen und fortfahren',
|
||||
'onboarding.localSetup.status.autoContinue': 'Wir fahren automatisch fort, sobald die Installation erkannt wurde.',
|
||||
'updateDialog.changelog.title': 'Neuigkeiten',
|
||||
};
|
||||
|
||||
@@ -15,6 +15,7 @@ export const dict: Record<I18nKey, string> = {
|
||||
"common.loading": "Cargando...",
|
||||
"common.unavailable": "No disponible",
|
||||
"common.language.english": "Inglés",
|
||||
"common.language.german": "Alemán",
|
||||
"common.language.french": "Francés",
|
||||
"common.language.simplifiedChinese": "Chino (simplificado)",
|
||||
"common.language.traditionalChinese": "Chino (tradicional)",
|
||||
|
||||
@@ -14,6 +14,7 @@ export const dict = {
|
||||
'common.loading': 'Chargement...',
|
||||
'common.unavailable': 'Indisponible',
|
||||
'common.language.english': 'Anglais',
|
||||
'common.language.german': 'Allemand',
|
||||
'common.language.french': 'Français',
|
||||
'common.language.simplifiedChinese': 'Chinois (simplifié)',
|
||||
'common.language.traditionalChinese': 'Chinois (traditionnel)',
|
||||
|
||||
@@ -15,6 +15,7 @@ export const dict: Record<I18nKey, string> = {
|
||||
'common.loading': '読み込み中...',
|
||||
'common.unavailable': '利用できません',
|
||||
'common.language.english': '英語',
|
||||
'common.language.german': 'ドイツ語',
|
||||
'common.language.french': 'フランス語',
|
||||
'common.language.simplifiedChinese': '中国語(簡体字)',
|
||||
'common.language.traditionalChinese': '中国語(繁体字)',
|
||||
|
||||
@@ -15,6 +15,7 @@ export const dict: Record<I18nKey, string> = {
|
||||
'common.loading': '로딩 중...',
|
||||
'common.unavailable': '사용할 수 없음',
|
||||
'common.language.english': '영어',
|
||||
'common.language.german': '독일어',
|
||||
'common.language.french': '프랑스어',
|
||||
'common.language.simplifiedChinese': '중국어(간체)',
|
||||
'common.language.traditionalChinese': '중국어(번체)',
|
||||
|
||||
@@ -16,6 +16,7 @@ export const dict: Record<I18nKey, string> = {
|
||||
'common.loading': 'Ładowanie...',
|
||||
'common.unavailable': 'Niedostępne',
|
||||
'common.language.english': 'Angielski',
|
||||
'common.language.german': 'Niemiecki',
|
||||
'common.language.french': 'Francuski',
|
||||
'common.language.simplifiedChinese': 'Chiński (Uproszczony)',
|
||||
'common.language.traditionalChinese': 'Chiński (Tradycyjny)',
|
||||
|
||||
@@ -15,6 +15,7 @@ export const dict: Record<I18nKey, string> = {
|
||||
"common.loading": "Carregando...",
|
||||
"common.unavailable": "Indisponível",
|
||||
"common.language.english": "Inglês",
|
||||
"common.language.german": "Alemão",
|
||||
"common.language.french": "Francês",
|
||||
"common.language.simplifiedChinese": "Chinês (simplificado)",
|
||||
"common.language.traditionalChinese": "Chinês (tradicional)",
|
||||
|
||||
@@ -15,6 +15,7 @@ export const dict: Record<I18nKey, string> = {
|
||||
"common.loading": "Завантаження...",
|
||||
"common.unavailable": "Недоступно",
|
||||
"common.language.english": "англійська",
|
||||
"common.language.german": "Німецька",
|
||||
"common.language.french": "Французька",
|
||||
"common.language.simplifiedChinese": "Китайська (спрощена)",
|
||||
"common.language.traditionalChinese": "Китайська (традиційна)",
|
||||
|
||||
@@ -15,6 +15,7 @@ export const dict: Record<I18nKey, string> = {
|
||||
'common.loading': '加载中...',
|
||||
'common.unavailable': '不可用',
|
||||
'common.language.english': 'English',
|
||||
'common.language.german': '德语',
|
||||
'common.language.french': '法语',
|
||||
'common.language.simplifiedChinese': '简体中文',
|
||||
'common.language.traditionalChinese': '繁体中文',
|
||||
|
||||
@@ -15,6 +15,7 @@ export const dict: Record<I18nKey, string> = {
|
||||
'common.loading': '載入中...',
|
||||
'common.unavailable': '無法使用',
|
||||
'common.language.english': 'English',
|
||||
'common.language.german': '德語',
|
||||
'common.language.french': '法語',
|
||||
'common.language.simplifiedChinese': '簡體中文',
|
||||
'common.language.traditionalChinese': '繁體中文',
|
||||
|
||||
Reference in New Issue
Block a user