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 zum Lauschen | 4096 |
--hostname | Hostname zum Lauschen | 127.0.0.1 |
--mdns | mDNS-Erkennung aktivieren | false |
--mdns-domain | Benutzerdefinierter Domainname für mDNS-Dienst | opencode.local |
--cors | Zusätzliche Browser-Origins erlauben | [] |
--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 der Client, der mit dem Server kommuniziert. Der Server stellt einen OpenAPI 3.1-Spezifikations-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 bereits läuft, startet opencode serve einen neuen Server.
Mit einem bestehenden Server verbinden
Wenn Sie die TUI starten, wird zufällig ein Port und Hostname zugewiesen. Sie können stattdessen die --hostname und --port Flags übergeben. Verwenden Sie diese dann, um sich mit dem Server zu verbinden.
Der /tui-Endpunkt kann verwendet werden, um die TUI über den Server zu steuern. Zum Beispiel können Sie einen Prompt vorausfüllen oder ausführen. Diese Konfiguration wird von den OpenCode IDE-Plugins verwendet.
Spezifikation
Der Server veröffentlicht eine OpenAPI 3.1-Spezifikation, die unter folgender Adresse eingesehen werden kann:
http://<hostname>:<port>/docZum Beispiel http://localhost:4096/doc. Verwenden Sie die Spezifikation, um Clients zu generieren oder Request- und Response-Typen zu inspizieren. 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 | Server-Gesundheit 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[] |
GET | /project/current | Aktuelles Projekt abrufen | Project |
Pfad & VCS
| Methode | Pfad | Beschreibung | Antwort |
|---|---|---|---|
GET | /path | Aktuellen Pfad abrufen | Path |
GET | /vcs | VCS-Info für aktuelles Projekt abrufen | VcsInfo |
Instanz
| Methode | Pfad | Beschreibung | Antwort |
|---|---|---|---|
POST | /instance/dispose | Aktuelle Instanz verwerfen | boolean |
Konfiguration
| Methode | Pfad | Beschreibung | Antwort |
|---|---|---|---|
GET | /config | Konfigurationsinfo abrufen | Config |
PATCH | /config | Konfiguration aktualisieren | Config |
GET | /config/providers | Anbieter und Standardmodelle auflisten | { providers: Provider[], default: { [key: string]: string } } |
Anbieter
| Methode | Pfad | Beschreibung | Antwort |
|---|---|---|---|
GET | /provider | Alle Anbieter auflisten | { all: Provider[], default: {...}, connected: string[] } |
GET | /provider/auth | Anbieter-Authentifizierungsmethoden abrufen | { [providerID: string]: ProviderAuthMethod[] } |
POST | /provider/{id}/oauth/authorize | Anbieter mit OAuth autorisieren | ProviderAuthAuthorization |
POST | /provider/{id}/oauth/callback | OAuth-Callback für Anbieter verarbeiten | boolean |
Sitzungen
| Methode | Pfad | Beschreibung | Hinweise |
|---|---|---|---|
GET | /session | Alle Sitzungen auflisten | Gibt Session[] zurück |
POST | /session | Neue Sitzung erstellen | body: { parentID?, title? }, gibt Session zurück |
GET | /session/status | Sitzungsstatus für alle Sitzungen abrufen | Gibt { [sessionID: string]: SessionStatus } zurück |
GET | /session/:id | Sitzungsdetails abrufen | Gibt Session zurück |
DELETE | /session/:id | Sitzung und alle Daten löschen | Gibt boolean zurück |
PATCH | /session/:id | Sitzungseigenschaften aktualisieren | body: { title? }, gibt Session zurück |
GET | /session/:id/children | Kind-Sitzungen einer Sitzung abrufen | Gibt Session[] zurück |
GET | /session/:id/todo | Todo-Liste für Sitzung abrufen | Gibt Todo[] zurück |
POST | /session/:id/init | App analysieren und AGENTS.md erstellen | body: { messageID, providerID, modelID }, gibt boolean zurück |
POST | /session/:id/fork | Bestehende Sitzung bei Nachricht forken | body: { messageID? }, gibt Session zurück |
POST | /session/:id/abort | Laufende Sitzung abbrechen | Gibt boolean zurück |
POST | /session/:id/share | Sitzung teilen | Gibt Session zurück |
DELETE | /session/:id/share | Sitzungsfreigabe aufheben | Gibt Session zurück |
GET | /session/:id/diff | Diff für diese Sitzung abrufen | query: messageID?, gibt FileDiff[] zurück |
POST | /session/:id/summarize | Sitzung zusammenfassen | body: { providerID, modelID }, gibt boolean zurück |
POST | /session/:id/revert | Nachricht rückgängig machen | body: { messageID, partID? }, gibt boolean zurück |
POST | /session/:id/unrevert | Alle rückgängig gemachten Nachrichten wiederherstellen | Gibt boolean zurück |
POST | /session/:id/permissions/:permissionID | Auf Berechtigungsanfrage antworten | body: { response, remember? }, gibt boolean zurück |
Nachrichten
| Methode | Pfad | Beschreibung | Hinweise |
|---|---|---|---|
GET | /session/:id/message | Nachrichten in Sitzung auflisten | query: limit?, gibt { info: Message, parts: Part[] }[] zurück |
POST | /session/:id/message | Nachricht senden und auf Antwort warten | body: { messageID?, model?, agent?, noReply?, system?, tools?, parts }, gibt { info: Message, parts: Part[] } zurück |
GET | /session/:id/message/:messageID | Nachrichtendetails abrufen | Gibt { info: Message, parts: Part[] } zurück |
POST | /session/:id/prompt_async | Nachricht asynchron senden (ohne Warten) | body: wie /session/:id/message, gibt 204 No Content zurück |
POST | /session/:id/command | Slash-Befehl ausführen | body: { messageID?, agent?, model?, command, arguments }, gibt { info: Message, parts: Part[] } zurück |
POST | /session/:id/shell | Shell-Befehl ausführen | body: { agent, model?, command }, gibt { info: Message, parts: Part[] } zurück |
Befehle
| Methode | Pfad | Beschreibung | Antwort |
|---|---|---|---|
GET | /command | Alle Befehle auflisten | Command[] |
Dateien
| Methode | Pfad | Beschreibung | Antwort |
|---|---|---|---|
GET | /find?pattern=<pat> | Text in Dateien suchen | Array von Match-Objekten 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> | Workspace-Symbole finden | Symbol[] |
GET | /file?path=<path> | Dateien und Verzeichnisse auflisten | FileNode[] |
GET | /file/content?path=<p> | Datei lesen | FileContent |
GET | /file/status | Status für verfolgte Dateien abrufen | File[] |
/find/file Query-Parameter
query(erforderlich) — Suchstring (Fuzzy-Match)type(optional) — Ergebnisse auf"file"oder"directory"beschränkendirectory(optional) — Projekt-Root für Suche überschreibenlimit(optional) — Max. Ergebnisse (1–200)dirs(optional) — Legacy-Flag ("false"gibt nur Dateien zurück)
Tools (Experimentell)
| Methode | Pfad | Beschreibung | Antwort |
|---|---|---|---|
GET | /experimental/tool/ids | Alle Tool-IDs auflisten | ToolIDs |
GET | /experimental/tool?provider=<p>&model=<m> | Tools mit JSON-Schemas für Modell auflisten | ToolList |
LSP, Formatierer & MCP
| Methode | Pfad | Beschreibung | Antwort |
|---|---|---|---|
GET | /lsp | LSP-Server-Status abrufen | LSPStatus[] |
GET | /formatter | Formatierer-Status abrufen | FormatterStatus[] |
GET | /mcp | MCP-Server-Status abrufen | { [name: string]: MCPStatus } |
POST | /mcp | MCP-Server dynamisch hinzufügen | body: { name, config }, gibt MCP-Status-Objekt zurück |
Agenten
| Methode | Pfad | Beschreibung | Antwort |
|---|---|---|---|
GET | /agent | Alle verfügbaren Agenten auflisten | Agent[] |
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 Prompt anhängen | boolean |
POST | /tui/open-help | Hilfe-Dialog öffnen | boolean |
POST | /tui/open-sessions | Sitzungsauswahl öffnen | boolean |
POST | /tui/open-themes | Themenauswahl öffnen | boolean |
POST | /tui/open-models | Modellauswahl öffnen | boolean |
POST | /tui/submit-prompt | Aktuellen Prompt absenden | boolean |
POST | /tui/clear-prompt | Prompt leeren | boolean |
POST | /tui/execute-command | Befehl ausführen ({ command }) | boolean |
POST | /tui/show-toast | Toast anzeigen ({ title?, message, variant }) | boolean |
GET | /tui/control/next | Auf nächste Steuerungsanfrage warten | Steuerungsanfrage-Objekt |
POST | /tui/control/response | Auf Steuerungsanfrage antworten ({ body }) | boolean |
Auth
| Methode | Pfad | Beschreibung | Antwort |
|---|---|---|---|
PUT | /auth/:id | Authentifizierungsdaten setzen. Body muss Anbieter-Schema entsprechen | boolean |
Events
| Methode | Pfad | Beschreibung | Antwort |
|---|---|---|---|
GET | /event | Server-sent Events Stream. Erstes 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-Spezifikation |