Aller au contenu

SDK

Client JS typ pour le serveur opencode.

Le SDK JS/TS d’opencode fournit un client typ pour interagir avec le serveur. Utilisez-le pour crer des intgrations et contrler opencode par programmation.

En savoir plus sur le fonctionnement du serveur. Pour des exemples, consultez les projets crs par la communaut.


Installation

Installez le SDK depuis npm :

Fenêtre de terminal
npm install @opencode-ai/sdk

Crer un client

Crez une instance d’opencode :

import { createOpencode } from "@opencode-ai/sdk"
const { client } = await createOpencode()

Cela lance la fois un serveur et un client

Options

OptionTypeDescriptionDefault
hostnamestringNom d’hte du serveur127.0.0.1
portnumberPort du serveur4096
signalAbortSignalSignal d’abandon pour l’annulationundefined
timeoutnumberDlai en ms pour le dmarrage du serveur5000
configConfigObjet de configuration{}

Config

Vous pouvez passer un objet de configuration pour personnaliser le comportement. L’instance rcupre toujours votre opencode.json, mais vous pouvez remplacer ou ajouter une configuration en ligne :

import { createOpencode } from "@opencode-ai/sdk"
const opencode = await createOpencode({
hostname: "127.0.0.1",
port: 4096,
config: {
model: "anthropic/claude-3-5-sonnet-20241022",
},
})
console.log(`Serveur en cours d'excution sur ${opencode.server.url}`)
opencode.server.close()

Client uniquement

Si vous avez dj une instance d’opencode en cours d’excution, vous pouvez crer une instance client pour vous y connecter :

import { createOpencodeClient } from "@opencode-ai/sdk"
const client = createOpencodeClient({
baseUrl: "http://localhost:4096",
})

Options

OptionTypeDescriptionDefault
baseUrlstringURL du serveurhttp://localhost:4096
fetchfunctionImplmentation fetch personnaliseglobalThis.fetch
parseAsstringMthode d’analyse de la rponseauto
responseStylestringStyle de retour : data ou fieldsfields
throwOnErrorbooleanLancer des erreurs au lieu de retournerfalse

Types

Le SDK inclut les dfinitions TypeScript pour tous les types API. Importez-les directement :

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

Tous les types sont gnrs partir de la spcification OpenAPI du serveur et sont disponibles dans le fichier de types.


Erreurs

Le SDK peut lancer des erreurs que vous pouvez attraper et grer :

try {
await client.session.get({ path: { id: "invalid-id" } })
} catch (error) {
console.error("chec de l'obtention de la session :", (error as Error).message)
}

API

Le SDK expose toutes les API du serveur via un client typ.


Global

MethodDescriptionResponse
global.health()Vrifier la sant du serveur et la version{ healthy: true, version: string }

Exemples

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

App

MethodDescriptionResponse
app.log()crire une entre de journalboolean
app.agents()Lister tous les agents disponiblesAgent[]

Exemples

// crire une entre de journal
await client.app.log({
body: {
service: "my-app",
level: "info",
message: "Opration termine",
},
})
// Lister les agents disponibles
const agents = await client.app.agents()

Project

MethodDescriptionResponse
project.list()Lister tous les projetsProject[]
project.current()Obtenir le projet actuelProject

Exemples

// Lister tous les projets
const projects = await client.project.list()
// Obtenir le projet actuel
const currentProject = await client.project.current()

Path

MethodDescriptionResponse
path.get()Obtenir le chemin actuelPath

Exemples

// Obtenir les informations sur le chemin actuel
const pathInfo = await client.path.get()

Config

MethodDescriptionResponse
config.get()Obtenir les infos de configurationConfig
config.providers()Lister les fournisseurs et les modles par dfaut{ providers: Provider[], default: { [key: string]: string } }

Exemples

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

Sessions

MethodDescriptionNotes
session.list()Lister les sessionsRetourne Session[]
session.get({ path })Obtenir la sessionRetourne Session
session.children({ path })Lister les sessions enfantsRetourne Session[]
session.create({ body })Crer une sessionRetourne Session
session.delete({ path })Supprimer une session et toutes ses donnesRetourne boolean
session.update({ path, body })Mettre jour les proprits de la sessionRetourne Session
session.init({ path, body })Analyser l’application et crer AGENTS.mdRetourne boolean
session.abort({ path })Avorter une session en coursRetourne boolean
session.share({ path })Partager la sessionRetourne Session
session.unshare({ path })Annuler le partage de la sessionRetourne Session
session.summarize({ path, body })Rsumer la sessionRetourne boolean
session.messages({ path })Lister les messages dans une sessionRetourne { info: Message, parts: Part[]}[]
session.message({ path })Obtenir les dtails du messageRetourne { info: Message, parts: Part[]}
session.prompt({ path, body })Envoyer un message de promptbody.noReply: true retourne UserMessage (contexte uniquement). Par dfaut, retourne AssistantMessage avec rponse IA
session.command({ path, body })Envoyer une commande la sessionRetourne { info: AssistantMessage, parts: Part[]}
session.shell({ path, body })Excuter une commande shellRetourne AssistantMessage
session.revert({ path, body })Rtablir un messageRetourne Session
session.unrevert({ path })Restaurer les messages rtablisRetourne Session
postSessionByIdPermissionsByPermissionId({ path, body })Rpondre une demande d’autorisationRetourne boolean

Exemples

// Crer et grer des sessions
const session = await client.session.create({
body: { title: "Ma session" },
})
const sessions = await client.session.list()
// Envoyer un message de prompt
const result = await client.session.prompt({
path: { id: session.id },
body: {
model: { providerID: "anthropic", modelID: "claude-3-5-sonnet-20241022" },
parts: [{ type: "text", text: "Bonjour !" }],
},
})
// Injecter du contexte sans dclencher de rponse IA (utile pour les plugins)
await client.session.prompt({
path: { id: session.id },
body: {
noReply: true,
parts: [{ type: "text", text: "Vous tes un assistant utile." }],
},
})

Files

MethodDescriptionResponse
find.text({ query })Rechercher du texte dans les fichiersTableau d’objets de correspondance avec path, lines, line_number, absolute_offset, submatches
find.files({ query })Trouver des fichiers et rpertoires par nomstring[] (chemins)
find.symbols({ query })Trouver les symboles de l’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 requete facultatifs :

  • type : "file" ou "directory"
  • directory : remplacer la racine du projet pour la recherche
  • limit : rsultats max (1-200)

Exemples

// Rechercher et lire des fichiers
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" },
})

TUI

MethodDescriptionResponse
tui.appendPrompt({ body })Ajouter du texte au promptboolean
tui.openHelp()Ouvrir la bote de dialogue d’aideboolean
tui.openSessions()Ouvrir le slecteur de sessionboolean
tui.openThemes()Ouvrir le slecteur de thmeboolean
tui.openModels()Ouvrir le slecteur de modleboolean
tui.submitPrompt()Soumettre le prompt actuelboolean
tui.clearPrompt()Effacer le promptboolean
tui.executeCommand({ body })Excuter une commandeboolean
tui.showToast({ body })Afficher une notification de toastboolean

Exemples

// Contrler l'interface TUI
await client.tui.appendPrompt({
body: { text: "Ajouter ceci au prompt" },
})
await client.tui.showToast({
body: { message: "Tche termine", variant: "success" },
})

Auth

MethodDescriptionResponse
auth.set({ ... })Dfinir les informations d’authentificationboolean

Exemples

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

Events

MethodDescriptionResponse
event.subscribe()Flux d’vnements envoys par le serveurFlux d’vnements envoys par le serveur

Exemples

// couter les vnements en temps rel
const events = await client.event.subscribe()
for await (const event of events.stream) {
console.log("vnement :", event.type, event.properties)
}