Aller au contenu
Installer

SDK

Le SDK opencode JS/TS fournit un client de type sécurisé pour interagir avec le serveur. Utilisez-le pour créer des intégrations et contrôler opencode par programme.

En savoir plus sur le fonctionnement du serveur. Pour des exemples, consultez les projects construits par la communauté.


Installez le SDK à partir de npm :

Terminal
npm install @opencode-ai/sdk

Créez une instance de opencode :

JavaScript
import { createOpencode } from "@opencode-ai/sdk"

const { client } = await createOpencode()

Cela démarre à la fois un serveur et un client

Options

OptionsTapezDescriptifPar défaut
hostnamestringNom d’hôte du serveur127.0.0.1
portnumberPort du serveur4096
signalAbortSignalSignal d’abandon pour annulationundefined
timeoutnumberDélai d’attente en ms pour le démarrage du serveur5000
configConfigObjet de configuration{}

Vous pouvez transmettre un objet de configuration pour personnaliser le comportement. L’instance récupère toujours votre opencode.json, mais vous pouvez remplacer ou ajouter une configuration en ligne :

JavaScript
import { createOpencode } from "@opencode-ai/sdk"

const opencode = await createOpencode({
  hostname: "127.0.0.1",
  port: 4096,
  config: {
    model: "anthropic/claude-sonnet-5-5",
  },
})

console.log(`Server running at ${opencode.server.url}`)

opencode.server.close()

Si vous disposez déjà d’une instance en cours d’exécution de opencode, vous pouvez créer une instance client pour vous y connecter :

JavaScript
import { createOpencodeClient } from "@opencode-ai/sdk"

const client = createOpencodeClient({
  baseUrl: "http://localhost:4096",
})

Options

OptionsTapezDescriptifPar défaut
baseUrlstringURL du serveurhttp://localhost:4096
fetchfunctionImplémentation de récupération personnaliséeglobalThis.fetch
parseAsstringMéthode d’analyse des réponsesauto
responseStylestringStyle de retour : data ou fieldsfields
throwOnErrorbooleanLancez des erreurs au lieu de returnfalse

Le SDK inclut des définitions TypeScript pour tous les types API. Importez-les directement :

TypeScript
import type { Session, Message, Part } from "@opencode-ai/sdk"

Tous les types sont générés à partir de la spécification OpenAPI du serveur et disponibles dans le fichier de types.


Le SDK peut générer des erreurs que vous pouvez détecter et gérer :

TypeScript
try {
  await client.session.get({ path: { id: "invalid-id" } })
} catch (error) {
  console.error("Failed to get session:", (error as Error).message)
}

Vous pouvez demander une sortie JSON structurée au modèle en spécifiant un format avec un schéma JSON. Le modèle utilisera un outil StructuredOutput pour renvoyer un JSON validé correspondant à votre schéma.

TypeScript
const result = await client.session.prompt({
  path: { id: sessionId },
  body: {
    parts: [{ type: "text", text: "Research Anthropic and provide company info" }],
    format: {
      type: "json_schema",
      schema: {
        type: "object",
        properties: {
          company: { type: "string", description: "Company name" },
          founded: { type: "number", description: "Year founded" },
          products: {
            type: "array",
            items: { type: "string" },
            description: "Main products",
          },
        },
        required: ["company", "founded"],
      },
    },
  },
})

// Access the structured output
console.log(result.data.info.structured_output)
// { company: "Anthropic", founded: 2021, products: ["Claude", "Claude API"] }

TypeDescription
textPar défaut. Réponse textuelle standard (pas de sortie structurée)
json_schemaRenvoie un JSON validé correspondant au schéma fourni

Lors de l’utilisation de type: 'json_schema', fournissez :

ChampTypeDescription
type'json_schema'Requis. Spécifie le mode de schéma JSON
schemaobjectRequis. Objet JSON Schema définissant la structure de sortie
retryCountnumberFacultatif. Nombre de tentatives de validation (par défaut : 2)

Si le modèle ne parvient pas à produire une sortie structurée valide après toutes les tentatives, la réponse inclura une StructuredOutputError :

TypeScript
if (result.data.info.error?.name === "StructuredOutputError") {
  console.error("Failed to produce structured output:", result.data.info.error.message)
  console.error("Attempts:", result.data.info.error.retries)
}

  1. Fournissez des descriptions claires dans les propriétés de votre schéma pour aider le modèle à comprendre quelles données extraire
  2. Utilisez required pour spécifier quels champs doivent être présents
  3. Gardez les schémas ciblés - les schémas imbriqués complexes peuvent être plus difficiles à remplir correctement pour le modèle
  4. Définissez un retryCount approprié - augmentez-le pour les schémas complexes, diminuez-le pour les simples

Le SDK expose toutes les API du serveur via un client de type sécurisé.


MéthodeDescriptifRéponse
global.health()Vérifier l’état et la version du serveur{ healthy: true, version: string }

Exemples

JavaScript
const health = await client.global.health()
console.log(health.data.version)

MéthodeDescriptifRéponse
app.log()Écrire une entrée de journalboolean
app.agents()Liste tous les agents disponiblesAgent[]

Exemples

JavaScript
// Write a log entry
await client.app.log({
  body: {
    service: "my-app",
    level: "info",
    message: "Operation completed",
  },
})

// List available agents
const agents = await client.app.agents()

MéthodeDescriptifRéponse
project.list()Lister tous les projetsProject[]

Exemples

JavaScript
// List all projects
const projects = await client.project.list()

MéthodeDescriptifRéponse
path.get()Obtenir le chemin actuelPath

Exemples

JavaScript
// Get current path information
const pathInfo = await client.path.get()

MéthodeDescriptifRéponse
config.get()Obtenir des informations de configurationConfig
config.providers()Liste des fournisseurs et modèles par défaut{ providers: Provider[], default: { [key: string]: string } }

Exemples

JavaScript
const config = await client.config.get()

const { providers, default: defaults } = await client.config.providers()

MéthodeDescriptifRemarques
session.list()Liste des séancesRenvoie Session[]
session.get({ path })Obtenir une sessionRenvoie Session
session.children({ path })Liste des sessions enfantsRenvoie Session[]
session.create({ body })Créer une séanceRenvoie Session
session.delete({ path })Supprimer la séanceRenvoie boolean
session.update({ path, body })Mettre à jour les propriétés de la sessionRenvoie Session
session.init({ path, body })Analysez l’application et créez AGENTS.mdRenvoie boolean
session.abort({ path })Abandonner une session en coursRenvoie boolean
session.share({ path })Séance de partageRenvoie Session
session.unshare({ path })Annuler le partage de la sessionRenvoie Session
session.summarize({ path, body })Résumer la séanceRenvoie boolean
session.messages({ path })Liste des messages dans une sessionRenvoie { info: Message, parts: Part[]}[]
session.message({ path })Obtenir les détails du messageRenvoie { info: Message, parts: Part[]}
session.prompt({ path, body })Envoyer un message d’invitebody.noReply: true renvoie UserMessage (contexte uniquement). La valeur par défaut renvoie AssistantMessage avec réponse IA. Prend en charge body.outputFormat pour sortie structurée
session.command({ path, body })Envoyer la commande à la sessionRenvoie { info: AssistantMessage, parts: Part[]}
session.shell({ path, body })Exécuter une commande shellRenvoie AssistantMessage
session.revert({ path, body })Rétablir un messageRenvoie Session
session.unrevert({ path })Restaurer les messages annulésRenvoie Session
postSessionByIdPermissionsByPermissionId({ path, body })Répondre à une demande d’autorisationRenvoie boolean

Exemples

JavaScript
// Create and manage sessions
const session = await client.session.create({
  body: { title: "My session" },
})

const sessions = await client.session.list()

// Send a prompt message
const result = await client.session.prompt({
  path: { id: session.id },
  body: {
    model: { providerID: "anthropic", modelID: "claude-sonnet-5-5" },
    parts: [{ type: "text", text: "Hello!" }],
  },
})

// Inject context without triggering AI response (useful for plugins)
await client.session.prompt({
  path: { id: session.id },
  body: {
    noReply: true,
    parts: [{ type: "text", text: "You are a helpful assistant." }],
  },
})

MéthodeDescriptifRéponse
find.text({ query })Rechercher du texte dans des fichiersTableau d’objets correspondant avec path, lines, line_number, absolute_offset, submatches
find.files({ query })Rechercher des fichiers et des répertoires par nomstring[] (chemins)
find.symbols({ query })Rechercher des symboles d’espace de travailSymbol[]
file.read({ query })Lire un fichier{ type: "raw" | "patch", content: string }
file.status({ query? })Obtenir le statut des fichiers suivisFile[]

find.files prend en charge quelques champs de requête facultatifs :

  • type : "file" ou "directory"
  • directory : remplace la racine du projet pour la recherche
  • limit : résultats maximum (1 à 200)

Exemples

JavaScript
// Search and read files
const textResults = await client.find.text({
  query: { pattern: "function.*opencode" },
})

const files = await client.find.files({
  query: { query: "*.ts", type: "file" },
})

const directories = await client.find.files({
  query: { query: "packages", type: "directory", limit: 20 },
})

const content = await client.file.read({
  query: { path: "src/index.ts" },
})

MéthodeDescriptifRéponse
tui.appendPrompt({ body })Ajouter du texte à l’inviteboolean
tui.openHelp()Ouvrir la boîte de dialogue d’aideboolean
tui.openSessions()Ouvrez le sélecteur de sessionboolean
tui.openThemes()Ouvrez le sélecteur de thèmeboolean
tui.openModels()Ouvrez le sélecteur de modèleboolean
tui.submitPrompt()Soumettre l’invite actuelleboolean
tui.clearPrompt()Effacez l’inviteboolean
tui.executeCommand({ body })Exécuter une commandeboolean
tui.showToast({ body })Afficher la notification toastboolean

Exemples

JavaScript
// Control TUI interface
await client.tui.appendPrompt({
  body: { text: "Add this to prompt" },
})

await client.tui.showToast({
  body: { message: "Task completed", variant: "success" },
})

MéthodeDescriptifRéponse
auth.set({ ... })Définir les informations d’authentificationboolean

Exemples

JavaScript
await client.auth.set({
  path: { id: "anthropic" },
  body: { type: "api", key: "your-api-key" },
})

MéthodeDescriptifRéponse
event.subscribe()Flux d’événements envoyés par le serveurFlux d’événements envoyés par le serveur

Exemples

JavaScript
// Listen to real-time events
const events = await client.event.subscribe()
for await (const event of events.stream) {
  console.log("Event:", event.type, event.properties)
}