Serveur
La commande opencode serve exécute un serveur HTTP sans tête qui expose un point de terminaison OpenAPI qu’un client opencode peut utiliser.
opencode serve [--port <number>] [--hostname <string>] [--cors <origin>]Options
| Drapeau | Descriptif | Par défaut |
|---|---|---|
--port | Port à écouter sur | 4096 |
--hostname | Nom d’hôte sur lequel écouter | 127.0.0.1 |
--mdns | Activer la découverte mDNS | false |
--mdns-domain | Nom de domaine personnalisé pour le service mDNS | opencode.local |
--cors | Origines de navigateur supplémentaires à autoriser | [] |
--cors peut être transmis plusieurs fois :
opencode serve --cors http://localhost:5173 --cors https://app.example.comDéfinissez OPENCODE_SERVER_PASSWORD pour protéger le serveur avec l’authentification de base HTTP. Le nom d’utilisateur est par défaut opencode, ou définissez OPENCODE_SERVER_USERNAME pour le remplacer. Cela s’applique à la fois à opencode serve et à opencode web.
OPENCODE_SERVER_PASSWORD=your-password opencode serveLorsque vous exécutez opencode, il démarre un TUI et un serveur. Où le TUI est le
client qui parle au serveur. Le serveur expose une spécification OpenAPI 3.1
point final. Ce point de terminaison est également utilisé pour générer un SDK.
Cette architecture permet à opencode de prendre en charge plusieurs clients et vous permet d’interagir avec opencode par programme.
Vous pouvez exécuter opencode serve pour démarrer un serveur autonome. Si vous avez le
opencode TUI en cours d’exécution, opencode serve démarrera un nouveau serveur.
Connectez-vous à un serveur existant
Lorsque vous démarrez le TUI, il attribue de manière aléatoire un port et un nom d’hôte. Vous pouvez à la place transmettre les --hostname et --port flags. Utilisez-le ensuite pour vous connecter à son serveur.
Le point de terminaison /tui peut être utilisé pour piloter le TUI via le serveur. Par exemple, vous pouvez pré-remplir ou exécuter une invite. Cette configuration est utilisée par les plugins OpenCode IDE.
Le serveur publie une spécification OpenAPI 3.1 qui peut être consultée à l’adresse :
http://<hostname>:<port>/docPar exemple, http://localhost:4096/doc. Utilisez la spécification pour générer des clients ou inspecter les types de requêtes et de réponses. Ou visualisez-le dans un explorateur Swagger.
Le serveur opencode expose les API suivantes.
| Méthode | Chemin | Descriptif | Réponse |
|---|---|---|---|
GET | /global/health | Obtenir l’état et la version du serveur | { healthy: true, version: string } |
GET | /global/event | Obtenez des événements mondiaux (flux SSE) | Flux d’événements |
| Méthode | Chemin | Descriptif | Réponse |
|---|---|---|---|
GET | /project | Lister tous les projets | Project[] |
GET | /project/current | Obtenez le projet en cours | Project |
| Méthode | Chemin | Descriptif | Réponse |
|---|---|---|---|
GET | /path | Obtenir le chemin actuel | Path |
GET | /vcs | Obtenir des informations VCS pour le projet en cours | VcsInfo |
| Méthode | Chemin | Descriptif | Réponse |
|---|---|---|---|
POST | /instance/dispose | Supprimer l’instance actuelle | boolean |
| Méthode | Chemin | Descriptif | Réponse |
|---|---|---|---|
GET | /config | Obtenir des informations de configuration | Config |
PATCH | /config | Mettre à jour la configuration | Config |
GET | /config/providers | Liste des fournisseurs et modèles par défaut | { providers: Provider[], default: { [key: string]: string } } |
| Méthode | Chemin | Descriptif | Réponse |
|---|---|---|---|
GET | /provider | Liste de tous les fournisseurs | { all: Provider[], default: {...}, connected: string[] } |
GET | /provider/auth | Obtenir les méthodes d’authentification du fournisseur | { [providerID: string]: ProviderAuthMethod[] } |
POST | /provider/{id}/oauth/authorize | Autoriser un fournisseur en utilisant OAuth | ProviderAuthAuthorization |
POST | /provider/{id}/oauth/callback | Gérer le rappel OAuth pour un fournisseur | boolean |
| Méthode | Chemin | Descriptif | Remarques |
|---|---|---|---|
GET | /session | Liste toutes les sessions | Renvoie Session[] |
POST | /session | Créer une nouvelle session | corps : { parentID?, title? }, renvoie Session |
GET | /session/status | Obtenir l’état de la session pour toutes les sessions | Renvoie { [sessionID: string]: SessionStatus } |
GET | /session/:id | Obtenez les détails de la session | Renvoie Session |
DELETE | /session/:id | Supprimer une session et toutes ses données | Renvoie boolean |
PATCH | /session/:id | Mettre à jour les propriétés de la session | corps : { title? }, renvoie Session |
GET | /session/:id/children | Obtenir les sessions enfants d’une session | Renvoie Session[] |
POST | /session/:id/init | Analysez l’application et créez AGENTS.md | corps : { messageID, providerID, modelID }, renvoie boolean |
POST | /session/:id/fork | Forkez une session existante à un message | corps : { messageID? }, renvoie Session |
POST | /session/:id/abort | Abandonner une session en cours | Renvoie boolean |
GET | /session/:id/diff | Obtenez le diff pour cette session | requête : messageID?, renvoie FileDiff[] |
POST | /session/:id/summarize | Résumer la séance | corps : { providerID, modelID }, renvoie boolean |
POST | /session/:id/revert | Rétablir un message | corps : { messageID, partID? }, renvoie boolean |
POST | /session/:id/unrevert | Restaurer tous les messages annulés | Renvoie boolean |
POST | /session/:id/permissions/:permissionID | Répondre à une demande d’autorisation | corps : { response, remember? }, renvoie boolean |
| Méthode | Chemin | Descriptif | Remarques |
|---|---|---|---|
GET | /session/:id/message | Liste des messages dans une session | requête : limit?, renvoie { info: Message, parts: Part[]}[] |
POST | /session/:id/message | Envoyer un message et attendre une réponse | corps : { messageID?, model?, agent?, noReply?, system?, tools?, parts }, renvoie { info: Message, parts: Part[]} |
GET | /session/:id/message/:messageID | Obtenir les détails du message | Renvoie { info: Message, parts: Part[]} |
POST | /session/:id/prompt_async | Envoyer un message de manière asynchrone (pas d’attente) | body : identique à /session/:id/message, renvoie 204 No Content |
POST | /session/:id/command | Exécuter une commande slash | corps : { messageID?, agent?, model?, command, arguments }, renvoie { info: Message, parts: Part[]} |
POST | /session/:id/shell | Exécuter une commande shell | corps : { agent, model?, command }, renvoie { info: Message, parts: Part[]} |
| Méthode | Chemin | Descriptif | Réponse |
|---|---|---|---|
GET | /command | Liste toutes les commandes | Command[] |
| Méthode | Chemin | Descriptif | Réponse |
|---|---|---|---|
GET | /find?pattern=<pat> | Rechercher du texte dans des fichiers | Tableau d’objets correspondant avec path, lines, line_number, absolute_offset, submatches |
GET | /find/file?query=<q> | Rechercher des fichiers et des répertoires par nom | string[] (chemins) |
GET | /find/symbol?query=<q> | Rechercher des symboles d’espace de travail | Symbol[] |
GET | /file?path=<path> | Liste des fichiers et répertoires | FileNode[] |
GET | /file/content?path=<p> | Lire un fichier | FileContent |
GET | /file/status | Obtenir le statut des fichiers suivis | File[] |
Paramètres de requête /find/file
query(obligatoire) — chaîne de recherche (correspondance floue)type(facultatif) — limiter les résultats à"file"ou"directory"directory(facultatif) — remplace la racine du projet pour la recherchelimit(facultatif) — résultats maximum (1 à 200)dirs(facultatif) — indicateur hérité ("false"renvoie uniquement les fichiers)
| Méthode | Chemin | Descriptif | Réponse |
|---|---|---|---|
GET | /experimental/tool/ids | Répertorier tous les ID d’outils | ToolIDs |
GET | /experimental/tool?provider=<p>&model=<m> | Répertorier les outils avec des schémas JSON pour un modèle | ToolList |
| Méthode | Chemin | Descriptif | Réponse |
|---|---|---|---|
GET | /lsp | Obtenir l’état du serveur LSP | LSPStatus[] |
GET | /formatter | Obtenir le statut du formateur | FormatterStatus[] |
GET | /mcp | Obtenir l’état du serveur MCP | { [name: string]: MCPStatus } |
POST | /mcp | Ajouter dynamiquement le serveur MCP | corps : { name, config }, renvoie l’objet d’état MCP |
| Méthode | Chemin | Descriptif | Réponse |
|---|---|---|---|
GET | /agent | Liste tous les agents disponibles | Agent[] |
| Méthode | Chemin | Descriptif | Réponse |
|---|---|---|---|
POST | /log | Écrire une entrée de journal. Corps : { service, level, message, extra? } | boolean |
| Méthode | Chemin | Descriptif | Réponse |
|---|---|---|---|
POST | /tui/append-prompt | Ajouter du texte à l’invite | boolean |
POST | /tui/open-help | Ouvrir la boîte de dialogue d’aide | boolean |
POST | /tui/open-sessions | Ouvrez le sélecteur de session | boolean |
POST | /tui/open-themes | Ouvrez le sélecteur de thème | boolean |
POST | /tui/open-models | Ouvrez le sélecteur de modèle | boolean |
POST | /tui/submit-prompt | Soumettre l’invite actuelle | boolean |
POST | /tui/clear-prompt | Effacez l’invite | boolean |
POST | /tui/execute-command | Exécuter une commande ({ command }) | boolean |
POST | /tui/show-toast | Afficher le toast ({ title?, message, variant }) | boolean |
GET | /tui/control/next | Attendre la prochaine demande de contrôle | Objet de demande de contrôle |
POST | /tui/control/response | Répondre à une demande de contrôle ({ body }) | boolean |
| Méthode | Chemin | Descriptif | Réponse |
|---|---|---|---|
PUT | /auth/:id | Définissez les informations d’authentification. Le corps doit correspondre au schéma du fournisseur | boolean |
| Méthode | Chemin | Descriptif | Réponse |
|---|---|---|---|
GET | /event | Flux d’événements envoyés par le serveur. Le premier événement est server.connected, puis les événements de bus | Flux d’événements envoyés par le serveur |
| Méthode | Chemin | Descriptif | Réponse |
|---|---|---|---|
GET | /doc | Spécification OpenAPI 3.1 | Page HTML avec spécification OpenAPI |