Server
Interagieren Sie mit dem opencode-Server über HTTP.
Der Befehl opencode serve führt einen Headless-HTTP-Server aus, der einen OpenAPI-Endpunkt bereitstellt, den ein opencode-Client verwenden kann.
Verwendung
opencode serve [--port <number>] [--hostname <string>] [--cors <origin>]Optionen
| Flag | Beschreibung | Standard |
|---|---|---|
--port | Port, auf dem gelauscht wird | 4096 |
--hostname | Hostname, auf dem gelauscht wird | 127.0.0.1 |
--mdns | mDNS-Erkennung aktivieren | false |
--mdns-domain | Benutzerdefinierter Domänenname für den mDNS-Dienst | opencode.local |
--cors | Zusätzliche zu erlaubende Browser-Origins | [] |
--cors kann mehrfach übergeben werden:
opencode serve --cors http://localhost:5173 --cors https://app.example.comAuthentifizierung
Setzen Sie OPENCODE_SERVER_PASSWORD, um den Server mit HTTP-Basic-Auth zu schützen. Der Benutzername ist standardmäßig opencode, oder setzen Sie OPENCODE_SERVER_USERNAME, um ihn zu überschreiben. Dies gilt sowohl für opencode serve als auch für opencode web.
OPENCODE_SERVER_PASSWORD=your-password opencode serveFunktionsweise
Wenn Sie opencode ausführen, startet es eine TUI und einen Server. Die TUI ist dabei der Client, der mit dem Server kommuniziert. Der Server stellt einen OpenAPI-3.1-Spec-Endpunkt bereit. Dieser Endpunkt wird auch zur Generierung eines SDK verwendet.
Tipp: Verwenden Sie den opencode-Server, um programmatisch mit opencode zu interagieren.
Diese Architektur ermöglicht es opencode, mehrere Clients zu unterstützen, und erlaubt Ihnen, programmatisch mit opencode zu interagieren.
Sie können opencode serve ausführen, um einen eigenständigen Server zu starten. Wenn die opencode-TUI läuft, startet opencode serve einen neuen Server.
Mit einem bestehenden Server verbinden
Wenn Sie die TUI starten, weist sie zufällig einen Port und Hostnamen zu. Sie können stattdessen die Flags --hostname und --port übergeben. Verwenden Sie dies dann, um sich mit ihrem Server zu verbinden.
Der Endpunkt /tui kann verwendet werden, um die TUI über den Server zu steuern. Sie können beispielsweise einen Prompt vorausfüllen oder ausführen. Diese Konfiguration wird von den OpenCode-IDE-Plugins verwendet.
Spec
Der Server veröffentlicht eine OpenAPI-3.1-Spec, die hier eingesehen werden kann:
http://<hostname>:<port>/docZum Beispiel http://localhost:4096/doc. Verwenden Sie die Spec, um Clients zu generieren oder Request- und Response-Typen zu untersuchen. Oder betrachten Sie sie in einem Swagger-Explorer.
APIs
Der opencode-Server stellt die folgenden APIs bereit.
Global
| Methode | Pfad | Beschreibung | Antwort |
|---|---|---|---|
GET | /global/health | Serverzustand und -version abrufen | { healthy: true, version: string } |
GET | /global/event | Globale Events abrufen (SSE-Stream) | Event-Stream |
Projekt
| Methode | Pfad | Beschreibung | Antwort |
|---|---|---|---|
GET | /project | Alle Projekte auflisten | Project[] (opens in a new tab) |
GET | /project/current | Aktuelles Projekt abrufen | Project (opens in a new tab) |
Pfad & VCS
| Methode | Pfad | Beschreibung | Antwort |
|---|---|---|---|
GET | /path | Aktuellen Pfad abrufen | Path (opens in a new tab) |
GET | /vcs | VCS-Informationen für das aktuelle Projekt abrufen | VcsInfo (opens in a new tab) |
Instanz
| Methode | Pfad | Beschreibung | Antwort |
|---|---|---|---|
POST | /instance/dispose | Aktuelle Instanz verwerfen | boolean |
Config
| Methode | Pfad | Beschreibung | Antwort |
|---|---|---|---|
GET | /config | Konfigurationsinformationen abrufen | Config (opens in a new tab) |
PATCH | /config | Konfiguration aktualisieren | Config (opens in a new tab) |
GET | /config/providers | Anbieter und Standardmodelle auflisten | { providers: Provider[] (opens in a new tab), default: { [key: string]: string } } |
Provider
| Methode | Pfad | Beschreibung | Antwort |
|---|---|---|---|
GET | /provider | Alle Anbieter auflisten | { all: Provider[] (opens in a new tab), default: {...}, connected: string[] } |
GET | /provider/auth | Authentifizierungsmethoden des Anbieters abrufen | { [providerID: string]: ProviderAuthMethod[] (opens in a new tab) } |
POST | /provider/{id}/oauth/authorize | Einen Anbieter über OAuth autorisieren | ProviderAuthAuthorization (opens in a new tab) |
POST | /provider/{id}/oauth/callback | OAuth-Callback für einen Anbieter behandeln | boolean |
Sitzungen
| Methode | Pfad | Beschreibung | Hinweise |
|---|---|---|---|
GET | /session | Alle Sitzungen auflisten | Gibt Session[] (opens in a new tab) zurück |
POST | /session | Eine neue Sitzung erstellen | body: { parentID?, title? }, gibt Session (opens in a new tab) zurück |
GET | /session/status | Sitzungsstatus für alle Sitzungen abrufen | Gibt { [sessionID: string]: SessionStatus (opens in a new tab) } zurück |
GET | /session/:id | Sitzungsdetails abrufen | Gibt Session (opens in a new tab) zurück |
DELETE | /session/:id | Eine Sitzung und alle zugehörigen Daten löschen | Gibt boolean zurück |
PATCH | /session/:id | Sitzungseigenschaften aktualisieren | body: { title? }, gibt Session (opens in a new tab) zurück |
GET | /session/:id/children | Untergeordnete Sitzungen einer Sitzung abrufen | Gibt Session[] (opens in a new tab) zurück |
GET | /session/:id/todo | Die Todo-Liste für eine Sitzung abrufen | Gibt Todo[] (opens in a new tab) zurück |
POST | /session/:id/init | App analysieren und AGENTS.md erstellen | body: { messageID, providerID, modelID }, gibt boolean zurück |
POST | /session/:id/fork | Eine bestehende Sitzung bei einer Nachricht forken | body: { messageID? }, gibt Session (opens in a new tab) zurück |
POST | /session/:id/abort | Eine laufende Sitzung abbrechen | Gibt boolean zurück |
POST | /session/:id/share | Eine Sitzung teilen | Gibt Session (opens in a new tab) zurück |
DELETE | /session/:id/share | Teilen einer Sitzung aufheben | Gibt Session (opens in a new tab) zurück |
GET | /session/:id/diff | Das Diff für diese Sitzung abrufen | query: messageID?, gibt FileDiff[] (opens in a new tab) zurück |
POST | /session/:id/summarize | Die Sitzung zusammenfassen | body: { providerID, modelID }, gibt boolean zurück |
POST | /session/:id/revert | Eine Nachricht zurücksetzen | body: { messageID, partID? }, gibt boolean zurück |
POST | /session/:id/unrevert | Alle zurückgesetzten Nachrichten wiederherstellen | Gibt boolean zurück |
POST | /session/:id/permissions/:permissionID | Auf eine Berechtigungsanfrage antworten | body: { response, remember? }, gibt boolean zurück |
Nachrichten
| Methode | Pfad | Beschreibung | Hinweise |
|---|---|---|---|
GET | /session/:id/message | Nachrichten in einer Sitzung auflisten | query: limit?, gibt { info: Message (opens in a new tab), parts: Part[] (opens in a new tab)}[] zurück |
POST | /session/:id/message | Eine Nachricht senden und auf Antwort warten | body: { messageID?, model?, agent?, noReply?, system?, tools?, parts }, gibt { info: Message (opens in a new tab), parts: Part[] (opens in a new tab)} zurück |
GET | /session/:id/message/:messageID | Nachrichtendetails abrufen | Gibt { info: Message (opens in a new tab), parts: Part[] (opens in a new tab)} zurück |
POST | /session/:id/prompt_async | Eine Nachricht asynchron senden (kein Warten) | body: wie /session/:id/message, gibt 204 No Content zurück |
POST | /session/:id/command | Einen Slash-Befehl ausführen | body: { messageID?, agent?, model?, command, arguments }, gibt { info: Message (opens in a new tab), parts: Part[] (opens in a new tab)} zurück |
POST | /session/:id/shell | Einen Shell-Befehl ausführen | body: { agent, model?, command }, gibt { info: Message (opens in a new tab), parts: Part[] (opens in a new tab)} zurück |
Befehle
| Methode | Pfad | Beschreibung | Antwort |
|---|---|---|---|
GET | /command | Alle Befehle auflisten | Command[] (opens in a new tab) |
Dateien
| Methode | Pfad | Beschreibung | Antwort |
|---|---|---|---|
GET | /find?pattern=<pat> | Nach Text in Dateien suchen | Array von Übereinstimmungsobjekten mit path, lines, line_number, absolute_offset, submatches |
GET | /find/file?query=<q> | Dateien und Verzeichnisse nach Namen finden | string[] (Pfade) |
GET | /find/symbol?query=<q> | Arbeitsbereich-Symbole finden | Symbol[] (opens in a new tab) |
GET | /file?path=<path> | Dateien und Verzeichnisse auflisten | FileNode[] (opens in a new tab) |
GET | /file/content?path=<p> | Eine Datei lesen | FileContent (opens in a new tab) |
GET | /file/status | Status für verfolgte Dateien abrufen | File[] (opens in a new tab) |
Abfrageparameter für /find/file
query(erforderlich) – Suchzeichenfolge (Fuzzy-Match)type(optional) – Ergebnisse auf"file"oder"directory"beschränkendirectory(optional) – Projektstamm für die Suche überschreibenlimit(optional) – maximale Ergebnisse (1-200)dirs(optional) – veraltetes Flag ("false"gibt nur Dateien zurück)
Tools (experimentell)
| Methode | Pfad | Beschreibung | Antwort |
|---|---|---|---|
GET | /experimental/tool/ids | Alle Tool-IDs auflisten | ToolIDs (opens in a new tab) |
GET | /experimental/tool?provider=<p>&model=<m> | Tools mit JSON-Schemas für ein Modell auflisten | ToolList (opens in a new tab) |
LSP, Formatierer & MCP
| Methode | Pfad | Beschreibung | Antwort |
|---|---|---|---|
GET | /lsp | LSP-Serverstatus abrufen | LSPStatus[] (opens in a new tab) |
GET | /formatter | Formatierer-Status abrufen | FormatterStatus[] (opens in a new tab) |
GET | /mcp | MCP-Serverstatus abrufen | { [name: string]: MCPStatus (opens in a new tab) } |
POST | /mcp | MCP Server dynamisch hinzufügen | body: { name, config }, gibt MCP-Statusobjekt zurück |
Agenten
| Methode | Pfad | Beschreibung | Antwort |
|---|---|---|---|
GET | /agent | Alle verfügbaren Agenten auflisten | Agent[] (opens in a new tab) |
Logging
| Methode | Pfad | Beschreibung | Antwort |
|---|---|---|---|
POST | /log | Log-Eintrag schreiben. Body: { service, level, message, extra? } | boolean |
TUI
| Methode | Pfad | Beschreibung | Antwort |
|---|---|---|---|
POST | /tui/append-prompt | Text an den Prompt anhängen | boolean |
POST | /tui/open-help | Den Hilfedialog öffnen | boolean |
POST | /tui/open-sessions | Die Sitzungsauswahl öffnen | boolean |
POST | /tui/open-themes | Die Theme-Auswahl öffnen | boolean |
POST | /tui/open-models | Die Modellauswahl öffnen | boolean |
POST | /tui/submit-prompt | Den aktuellen Prompt absenden | boolean |
POST | /tui/clear-prompt | Den Prompt löschen | boolean |
POST | /tui/execute-command | Einen Befehl ausführen ({ command }) | boolean |
POST | /tui/show-toast | Toast anzeigen ({ title?, message, variant }) | boolean |
GET | /tui/control/next | Auf die nächste Steueranfrage warten | Steueranfrage-Objekt |
POST | /tui/control/response | Auf eine Steueranfrage antworten ({ body }) | boolean |
Auth
| Methode | Pfad | Beschreibung | Antwort |
|---|---|---|---|
PUT | /auth/:id | Authentifizierungs-Anmeldeinformationen setzen. Body muss dem Anbieterschema entsprechen | boolean |
Events
| Methode | Pfad | Beschreibung | Antwort |
|---|---|---|---|
GET | /event | Server-Sent-Events-Stream. Das erste Event ist server.connected, dann Bus-Events | Server-Sent-Events-Stream |
Docs
| Methode | Pfad | Beschreibung | Antwort |
|---|---|---|---|
GET | /doc | OpenAPI-3.1-Spezifikation | HTML-Seite mit OpenAPI-Spec |