Deutsch
Dokumentation
Server

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

FlagBeschreibungStandard
--portPort, auf dem gelauscht wird4096
--hostnameHostname, auf dem gelauscht wird127.0.0.1
--mdnsmDNS-Erkennung aktivierenfalse
--mdns-domainBenutzerdefinierter Domänenname für den mDNS-Dienstopencode.local
--corsZusätzliche zu erlaubende Browser-Origins[]

--cors kann mehrfach übergeben werden:

opencode serve --cors http://localhost:5173 --cors https://app.example.com

Authentifizierung

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 serve

Funktionsweise

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>/doc

Zum 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

MethodePfadBeschreibungAntwort
GET/global/healthServerzustand und -version abrufen{ healthy: true, version: string }
GET/global/eventGlobale Events abrufen (SSE-Stream)Event-Stream

Projekt

MethodePfadBeschreibungAntwort
GET/projectAlle Projekte auflistenProject[] (opens in a new tab)
GET/project/currentAktuelles Projekt abrufenProject (opens in a new tab)

Pfad & VCS

MethodePfadBeschreibungAntwort
GET/pathAktuellen Pfad abrufenPath (opens in a new tab)
GET/vcsVCS-Informationen für das aktuelle Projekt abrufenVcsInfo (opens in a new tab)

Instanz

MethodePfadBeschreibungAntwort
POST/instance/disposeAktuelle Instanz verwerfenboolean

Config

MethodePfadBeschreibungAntwort
GET/configKonfigurationsinformationen abrufenConfig (opens in a new tab)
PATCH/configKonfiguration aktualisierenConfig (opens in a new tab)
GET/config/providersAnbieter und Standardmodelle auflisten{ providers: Provider[] (opens in a new tab), default: { [key: string]: string } }

Provider

MethodePfadBeschreibungAntwort
GET/providerAlle Anbieter auflisten{ all: Provider[] (opens in a new tab), default: {...}, connected: string[] }
GET/provider/authAuthentifizierungsmethoden des Anbieters abrufen{ [providerID: string]: ProviderAuthMethod[] (opens in a new tab) }
POST/provider/{id}/oauth/authorizeEinen Anbieter über OAuth autorisierenProviderAuthAuthorization (opens in a new tab)
POST/provider/{id}/oauth/callbackOAuth-Callback für einen Anbieter behandelnboolean

Sitzungen

MethodePfadBeschreibungHinweise
GET/sessionAlle Sitzungen auflistenGibt Session[] (opens in a new tab) zurück
POST/sessionEine neue Sitzung erstellenbody: { parentID?, title? }, gibt Session (opens in a new tab) zurück
GET/session/statusSitzungsstatus für alle Sitzungen abrufenGibt { [sessionID: string]: SessionStatus (opens in a new tab) } zurück
GET/session/:idSitzungsdetails abrufenGibt Session (opens in a new tab) zurück
DELETE/session/:idEine Sitzung und alle zugehörigen Daten löschenGibt boolean zurück
PATCH/session/:idSitzungseigenschaften aktualisierenbody: { title? }, gibt Session (opens in a new tab) zurück
GET/session/:id/childrenUntergeordnete Sitzungen einer Sitzung abrufenGibt Session[] (opens in a new tab) zurück
GET/session/:id/todoDie Todo-Liste für eine Sitzung abrufenGibt Todo[] (opens in a new tab) zurück
POST/session/:id/initApp analysieren und AGENTS.md erstellenbody: { messageID, providerID, modelID }, gibt boolean zurück
POST/session/:id/forkEine bestehende Sitzung bei einer Nachricht forkenbody: { messageID? }, gibt Session (opens in a new tab) zurück
POST/session/:id/abortEine laufende Sitzung abbrechenGibt boolean zurück
POST/session/:id/shareEine Sitzung teilenGibt Session (opens in a new tab) zurück
DELETE/session/:id/shareTeilen einer Sitzung aufhebenGibt Session (opens in a new tab) zurück
GET/session/:id/diffDas Diff für diese Sitzung abrufenquery: messageID?, gibt FileDiff[] (opens in a new tab) zurück
POST/session/:id/summarizeDie Sitzung zusammenfassenbody: { providerID, modelID }, gibt boolean zurück
POST/session/:id/revertEine Nachricht zurücksetzenbody: { messageID, partID? }, gibt boolean zurück
POST/session/:id/unrevertAlle zurückgesetzten Nachrichten wiederherstellenGibt boolean zurück
POST/session/:id/permissions/:permissionIDAuf eine Berechtigungsanfrage antwortenbody: { response, remember? }, gibt boolean zurück

Nachrichten

MethodePfadBeschreibungHinweise
GET/session/:id/messageNachrichten in einer Sitzung auflistenquery: limit?, gibt { info: Message (opens in a new tab), parts: Part[] (opens in a new tab)}[] zurück
POST/session/:id/messageEine Nachricht senden und auf Antwort wartenbody: { 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/:messageIDNachrichtendetails abrufenGibt { info: Message (opens in a new tab), parts: Part[] (opens in a new tab)} zurück
POST/session/:id/prompt_asyncEine Nachricht asynchron senden (kein Warten)body: wie /session/:id/message, gibt 204 No Content zurück
POST/session/:id/commandEinen Slash-Befehl ausführenbody: { 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/shellEinen Shell-Befehl ausführenbody: { agent, model?, command }, gibt { info: Message (opens in a new tab), parts: Part[] (opens in a new tab)} zurück

Befehle

MethodePfadBeschreibungAntwort
GET/commandAlle Befehle auflistenCommand[] (opens in a new tab)

Dateien

MethodePfadBeschreibungAntwort
GET/find?pattern=<pat>Nach Text in Dateien suchenArray von Übereinstimmungsobjekten mit path, lines, line_number, absolute_offset, submatches
GET/find/file?query=<q>Dateien und Verzeichnisse nach Namen findenstring[] (Pfade)
GET/find/symbol?query=<q>Arbeitsbereich-Symbole findenSymbol[] (opens in a new tab)
GET/file?path=<path>Dateien und Verzeichnisse auflistenFileNode[] (opens in a new tab)
GET/file/content?path=<p>Eine Datei lesenFileContent (opens in a new tab)
GET/file/statusStatus für verfolgte Dateien abrufenFile[] (opens in a new tab)

Abfrageparameter für /find/file

  • query (erforderlich) – Suchzeichenfolge (Fuzzy-Match)
  • type (optional) – Ergebnisse auf "file" oder "directory" beschränken
  • directory (optional) – Projektstamm für die Suche überschreiben
  • limit (optional) – maximale Ergebnisse (1-200)
  • dirs (optional) – veraltetes Flag ( "false" gibt nur Dateien zurück)

Tools (experimentell)

MethodePfadBeschreibungAntwort
GET/experimental/tool/idsAlle Tool-IDs auflistenToolIDs (opens in a new tab)
GET/experimental/tool?provider=<p>&model=<m>Tools mit JSON-Schemas für ein Modell auflistenToolList (opens in a new tab)

LSP, Formatierer & MCP

MethodePfadBeschreibungAntwort
GET/lspLSP-Serverstatus abrufenLSPStatus[] (opens in a new tab)
GET/formatterFormatierer-Status abrufenFormatterStatus[] (opens in a new tab)
GET/mcpMCP-Serverstatus abrufen{ [name: string]: MCPStatus (opens in a new tab) }
POST/mcpMCP Server dynamisch hinzufügenbody: { name, config }, gibt MCP-Statusobjekt zurück

Agenten

MethodePfadBeschreibungAntwort
GET/agentAlle verfügbaren Agenten auflistenAgent[] (opens in a new tab)

Logging

MethodePfadBeschreibungAntwort
POST/logLog-Eintrag schreiben. Body: { service, level, message, extra? }boolean

TUI

MethodePfadBeschreibungAntwort
POST/tui/append-promptText an den Prompt anhängenboolean
POST/tui/open-helpDen Hilfedialog öffnenboolean
POST/tui/open-sessionsDie Sitzungsauswahl öffnenboolean
POST/tui/open-themesDie Theme-Auswahl öffnenboolean
POST/tui/open-modelsDie Modellauswahl öffnenboolean
POST/tui/submit-promptDen aktuellen Prompt absendenboolean
POST/tui/clear-promptDen Prompt löschenboolean
POST/tui/execute-commandEinen Befehl ausführen ({ command })boolean
POST/tui/show-toastToast anzeigen ({ title?, message, variant })boolean
GET/tui/control/nextAuf die nächste Steueranfrage wartenSteueranfrage-Objekt
POST/tui/control/responseAuf eine Steueranfrage antworten ({ body })boolean

Auth

MethodePfadBeschreibungAntwort
PUT/auth/:idAuthentifizierungs-Anmeldeinformationen setzen. Body muss dem Anbieterschema entsprechenboolean

Events

MethodePfadBeschreibungAntwort
GET/eventServer-Sent-Events-Stream. Das erste Event ist server.connected, dann Bus-EventsServer-Sent-Events-Stream

Docs

MethodePfadBeschreibungAntwort
GET/docOpenAPI-3.1-SpezifikationHTML-Seite mit OpenAPI-Spec