| --- |
| title: Serveur |
| description: Interagissez avec le serveur opencode via HTTP. |
| --- |
| |
| import config from "../../../../config.mjs" |
| export const typesUrl = `${config.github}/blob/dev/packages/sdk/js/src/gen/types.gen.ts` |
|
|
| 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. |
|
|
| --- |
| |
| |
|
|
| ```bash |
| opencode serve [--port <number>] [--hostname <string>] [--cors <origin>] |
| ``` |
|
|
| |
|
|
| | 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 : |
|
|
| ```bash |
| opencode serve --cors http://localhost:5173 --cors https://app.example.com |
| ``` |
|
|
| --- |
| |
| |
|
|
| Dé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`. |
|
|
| ```bash |
| OPENCODE_SERVER_PASSWORD=your-password opencode serve |
| ``` |
|
|
| --- |
| |
| |
|
|
| Lorsque 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](/docs/sdk). |
|
|
| :::tip |
| Utilisez le serveur opencode pour interagir avec opencode par programmation. |
| ::: |
|
|
| 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. |
|
|
| --- |
| |
| |
|
|
| 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](/docs/cli). Utilisez-le ensuite pour vous connecter à son serveur. |
|
|
| Le point de terminaison [`/tui`](#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](/docs/ide). |
|
|
| --- |
| |
| |
|
|
| Le serveur publie une spécification OpenAPI 3.1 qui peut être consultée à l'adresse : |
|
|
| ``` |
| http://<hostname>:<port>/doc |
| ``` |
|
|
| Par 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 | <a href={typesUrl}><code>Project[]</code></a> | |
| | `GET` | `/project/current` | Obtenez le projet en cours | <a href={typesUrl}><code>Project</code></a> | |
|
|
| --- |
| |
| |
|
|
| | Méthode | Chemin | Descriptif | Réponse | |
| | ------- | ------- | ---------------------------------------------------- | ------------------------------------------- | |
| | `GET` | `/path` | Obtenir le chemin actuel | <a href={typesUrl}><code>Path</code></a> | |
| | `GET` | `/vcs` | Obtenir des informations VCS pour le projet en cours | <a href={typesUrl}><code>VcsInfo</code></a> | |
|
|
| --- |
| |
| |
|
|
| | 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 | <a href={typesUrl}><code>Config</code></a> | |
| | `PATCH` | `/config` | Mettre à jour la configuration | <a href={typesUrl}><code>Config</code></a> | |
| | `GET` | `/config/providers` | Liste des fournisseurs et modèles par défaut | `{ providers: `<a href={typesUrl}>Provider[]</a>`, default: { [key: string]: string } }` | |
|
|
| --- |
| |
| |
|
|
| | Méthode | Chemin | Descriptif | Réponse | |
| | ------- | -------------------------------- | ------------------------------------------------------ | ----------------------------------------------------------------------------------- | |
| | `GET` | `/provider` | Liste de tous les fournisseurs | `{ all: `<a href={typesUrl}>Provider[]</a>`, default: {...}, connected: string[] }` | |
| | `GET` | `/provider/auth` | Obtenir les méthodes d'authentification du fournisseur | `{ [providerID: string]: `<a href={typesUrl}>ProviderAuthMethod[]</a>` }` | |
| | `POST` | `/provider/{id}/oauth/authorize` | Autoriser un fournisseur en utilisant OAuth | <a href={typesUrl}><code>ProviderAuthAuthorization</code></a> | |
| | `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 <a href={typesUrl}><code>Session[]</code></a> | |
| | `POST` | `/session` | Créer une nouvelle session | corps : `{ parentID?, title? }`, renvoie <a href={typesUrl}><code>Session</code></a> | |
| | `GET` | `/session/status` | Obtenir l'état de la session pour toutes les sessions | Renvoie `{ [sessionID: string]: `<a href={typesUrl}>SessionStatus</a>` }` | |
| | `GET` | `/session/:id` | Obtenez les détails de la session | Renvoie <a href={typesUrl}><code>Session</code></a> | |
| | `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 <a href={typesUrl}><code>Session</code></a> | |
| | `GET` | `/session/:id/children` | Obtenir les sessions enfants d'une session | Renvoie <a href={typesUrl}><code>Session[]</code></a> | |
| | `GET` | `/session/:id/todo` | Obtenez la liste de tâches pour une session | Renvoie <a href={typesUrl}><code>Todo[]</code></a> | |
| | `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 <a href={typesUrl}><code>Session</code></a> | |
| | `POST` | `/session/:id/abort` | Abandonner une session en cours | Renvoie `boolean` | |
| | `POST` | `/session/:id/share` | Partager une séance | Renvoie <a href={typesUrl}><code>Session</code></a> | |
| | `DELETE` | `/session/:id/share` | Annuler le partage d'une session | Renvoie <a href={typesUrl}><code>Session</code></a> | |
| | `GET` | `/session/:id/diff` | Obtenez le diff pour cette session | requête : `messageID?`, renvoie <a href={typesUrl}><code>FileDiff[]</code></a> | |
| | `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: `<a href={typesUrl}>Message</a>`, parts: `<a href={typesUrl}>Part[]</a>`}[]` | |
| | `POST` | `/session/:id/message` | Envoyer un message et attendre une réponse | corps : `{ messageID?, model?, agent?, noReply?, system?, tools?, parts }`, renvoie `{ info: `<a href={typesUrl}>Message</a>`, parts: `<a href={typesUrl}>Part[]</a>`}` | |
| | `GET` | `/session/:id/message/:messageID` | Obtenir les détails du message | Renvoie `{ info: `<a href={typesUrl}>Message</a>`, parts: `<a href={typesUrl}>Part[]</a>`}` | |
| | `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: `<a href={typesUrl}>Message</a>`, parts: `<a href={typesUrl}>Part[]</a>`}` | |
| | `POST` | `/session/:id/shell` | Exécuter une commande shell | corps : `{ agent, model?, command }`, renvoie `{ info: `<a href={typesUrl}>Message</a>`, parts: `<a href={typesUrl}>Part[]</a>`}` | |
|
|
| --- |
| |
| |
|
|
| | Méthode | Chemin | Descriptif | Réponse | |
| | ------- | ---------- | -------------------------- | --------------------------------------------- | |
| | `GET` | `/command` | Liste toutes les commandes | <a href={typesUrl}><code>Command[]</code></a> | |
|
|
| --- |
| |
| |
|
|
| | 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 | <a href={typesUrl}><code>Symbol[]</code></a> | |
| | `GET` | `/file?path=<path>` | Liste des fichiers et répertoires | <a href={typesUrl}><code>FileNode[]</code></a> | |
| | `GET` | `/file/content?path=<p>` | Lire un fichier | <a href={typesUrl}><code>FileContent</code></a> | |
| | `GET` | `/file/status` | Obtenir le statut des fichiers suivis | <a href={typesUrl}><code>File[]</code></a> | |
|
|
| |
|
|
| - `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 recherche |
| - `limit` (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 | <a href={typesUrl}><code>ToolIDs</code></a> | |
| | `GET` | `/experimental/tool?provider=<p>&model=<m>` | Répertorier les outils avec des schémas JSON pour un modèle | <a href={typesUrl}><code>ToolList</code></a> | |
|
|
| --- |
| |
| |
|
|
| | Méthode | Chemin | Descriptif | Réponse | |
| | ------- | ------------ | ------------------------------------ | -------------------------------------------------------- | |
| | `GET` | `/lsp` | Obtenir l'état du serveur LSP | <a href={typesUrl}><code>LSPStatus[]</code></a> | |
| | `GET` | `/formatter` | Obtenir le statut du formateur | <a href={typesUrl}><code>FormatterStatus[]</code></a> | |
| | `GET` | `/mcp` | Obtenir l'état du serveur MCP | `{ [name: string]: `<a href={typesUrl}>MCPStatus</a>` }` | |
| | `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 | <a href={typesUrl}><code>Agent[]</code></a> | |
|
|
| --- |
| |
| |
|
|
| | 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 | |
|
|