SDK
opencode सर्वर के लिए टाइप-सेफ JS क्लाइंट।
opencode JS/TS SDK सर्वर के साथ इंटरैक्ट करने के लिए एक टाइप-सेफ क्लाइंट प्रदान करता है। इसका उपयोग इंटीग्रेशन बनाने और opencode को प्रोग्रामेटिक रूप से कंट्रोल करने के लिए करें।
सर्वर कैसे काम करता है इसके बारे में और जानें। कम्युनिटी द्वारा बनाए गए प्रोजेक्ट्स देखें।
इंस्टॉलेशन
npm से SDK इंस्टॉल करें:
npm install @opencode-ai/sdkक्लाइंट बनाएं
opencode का एक इंस्टेंस बनाएं:
import { createOpencode } from "@opencode-ai/sdk"
const { client } = await createOpencode()यह सर्वर और क्लाइंट दोनों को स्टार्ट करता है।
विकल्प
| विकल्प | टाइप | विवरण | डिफ़ॉल्ट |
|---|---|---|---|
hostname | string | सर्वर होस्टनेम | 127.0.0.1 |
port | number | सर्वर पोर्ट | 4096 |
signal | AbortSignal | कैंसलेशन के लिए एबॉर्ट सिग्नल | undefined |
timeout | number | सर्वर स्टार्ट के लिए टाइमआउट (ms में) | 5000 |
config | Config | कॉन्फ़िगरेशन ऑब्जेक्ट | {} |
कॉन्फ़िगरेशन
आप व्यवहार को कस्टमाइज़ करने के लिए एक कॉन्फ़िगरेशन ऑब्जेक्ट पास कर सकते हैं। इंस्टेंस अभी भी आपकी opencode.json पढ़ता है, लेकिन आप इनलाइन कॉन्फ़िगरेशन को ओवरराइड या जोड़ सकते हैं:
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(`Server running at ${opencode.server.url}`)
opencode.server.close()केवल क्लाइंट
यदि आपके पास पहले से एक रनिंग opencode इंस्टेंस है, तो आप इससे कनेक्ट करने के लिए एक क्लाइंट इंस्टेंस बना सकते हैं:
import { createOpencodeClient } from "@opencode-ai/sdk"
const client = createOpencodeClient({
baseUrl: "http://localhost:4096",
})विकल्प
| विकल्प | टाइप | विवरण | डिफ़ॉल्ट |
|---|---|---|---|
baseUrl | string | सर्वर का URL | http://localhost:4096 |
fetch | function | कस्टम fetch इम्प्लीमेंटेशन | globalThis.fetch |
parseAs | string | रिस्पॉन्स पार्सिंग मेथड | auto |
responseStyle | string | रिटर्न स्टाइल: data या fields | fields |
throwOnError | boolean | रिटर्न के बजाय एरर थ्रो करें | false |
टाइप्स
SDK में सभी API टाइप्स के लिए TypeScript डेफिनिशन शामिल हैं। उन्हें सीधे इम्पोर्ट करें:
import type { Session, Message, Part } from "@opencode-ai/sdk"सभी टाइप्स सर्वर की OpenAPI स्पेसिफिकेशन से जेनरेट किए गए हैं और टाइप्स फाइल (opens in a new tab) में उपलब्ध हैं।
एरर्स
SDK एरर्स थ्रो कर सकता है जिन्हें आप कैच और हैंडल कर सकते हैं:
try {
await client.session.get({ path: { id: "invalid-id" } })
} catch (error) {
console.error("Failed to get session:", (error as Error).message)
}संरचित आउटपुट (SDK 1.18.31)
इस उदाहरण में @opencode-ai/sdk/v2 इस्तेमाल होता है। इस पृष्ठ के अन्य उदाहरण पुराने रूट एक्सपोर्ट और उसके path/body पैरामीटर इस्तेमाल करते हैं।
उदाहरण चालू स्थानीय v1 सर्वर (opencode serve) से जुड़ता है। पहले प्रदाता और मॉडल कॉन्फ़िगर करें; उत्तर बनाने पर प्रदाता का शुल्क लग सकता है।
import { createOpencodeClient } from "@opencode-ai/sdk/v2"
const client = createOpencodeClient({ baseUrl: "http://localhost:4096" })
const session = await client.session.create({ title: "Schema example" }, { throwOnError: true })
const result = await client.session.prompt({
sessionID: session.data.id,
parts: [{ type: "text", text: "Return the name and language of this project." }],
format: {
type: "json_schema",
schema: {
type: "object",
properties: {
name: { type: "string", description: "Project name" },
language: { type: "string", description: "Primary programming language" },
},
required: ["name", "language"],
additionalProperties: false,
},
retryCount: 2,
},
}, { throwOnError: true })
const info = result.data.info
if (info.error) {
if (info.error.name === "StructuredOutputError") {
console.error(info.error.data.message, info.error.data.retries)
} else {
console.error(info.error)
}
} else {
console.log(info.structured)
}format में text या json_schema दें। JSON आउटपुट के लिए schema में JSON Schema आवश्यक है। retryCount सत्यापन के पुनः प्रयास नियंत्रित करता है (डिफ़ॉल्ट: 2)। required और स्पष्ट फ़ील्ड विवरण इस्तेमाल करें तथा स्कीमा सरल रखें।
throwOnError सक्षम न होने पर SDK नेटवर्क या API की विफलता error में देता है। मॉडल की विफलता अलग से info.error में जाँचें। StructuredOutputError का विवरण error.data.message और error.data.retries में है। सफल डेटा info.structured में मिलता है।
यह उदाहरण @opencode-ai/sdk v1.18.31 का उपयोग करता है। इंटरफ़ेस की परिभाषाएँ SDK स्रोत कोड (opens in a new tab) में देखें।
APIs
SDK एक टाइप-सेफ क्लाइंट के माध्यम से सभी सर्वर APIs को एक्सपोज़ करता है।
वैश्विक
| मेथड | विवरण | रिस्पॉन्स |
|---|---|---|
global.health() | सर्वर हेल्थ और वर्जन चेक करें | { healthy: true, version: string } |
उदाहरण
const health = await client.global.health()
console.log(health.data.version)ऐप
| मेथड | विवरण | रिस्पॉन्स |
|---|---|---|
app.log() | एक लॉग एंट्री लिखें | boolean |
app.agents() | सभी उपलब्ध एजेंट्स की सूची | Agent[] (opens in a new tab) |
उदाहरण
// एक लॉग एंट्री लिखें
await client.app.log({
body: {
service: "my-app",
level: "info",
message: "Operation completed",
},
})
// उपलब्ध एजेंट्स की सूची
const agents = await client.app.agents()प्रोजेक्ट
| मेथड | विवरण | रिस्पॉन्स |
|---|---|---|
project.list() | सभी प्रोजेक्ट्स की सूची | Project[] (opens in a new tab) |
project.current() | वर्तमान प्रोजेक्ट प्राप्त करें | Project (opens in a new tab) |
उदाहरण
// सभी प्रोजेक्ट्स की सूची
const projects = await client.project.list()
// वर्तमान प्रोजेक्ट प्राप्त करें
const currentProject = await client.project.current()पथ
| मेथड | विवरण | रिस्पॉन्स |
|---|---|---|
path.get() | वर्तमान पाथ प्राप्त करें | Path (opens in a new tab) |
उदाहरण
// वर्तमान पाथ जानकारी प्राप्त करें
const pathInfo = await client.path.get()कॉन्फ़िगरेशन
| मेथड | विवरण | रिस्पॉन्स |
|---|---|---|
config.get() | कॉन्फ़िग जानकारी प्राप्त करें | Config (opens in a new tab) |
config.providers() | प्रोवाइडर्स और डिफ़ॉल्ट मॉडल्स की सूची | { providers: Provider[] (opens in a new tab), default: { [key: string]: string } } |
उदाहरण
const config = await client.config.get()
const { providers, default: defaults } = await client.config.providers()सत्र
| मेथड | विवरण | नोट्स |
|---|---|---|
session.list() | सेशंस की सूची | Session[] (opens in a new tab) रिटर्न करता है |
session.get({ path }) | सेशन प्राप्त करें | Session (opens in a new tab) रिटर्न करता है |
session.children({ path }) | चाइल्ड सेशंस की सूची | Session[] (opens in a new tab) रिटर्न करता है |
session.create({ body }) | सेशन बनाएं | Session (opens in a new tab) रिटर्न करता है |
session.delete({ path }) | सेशन डिलीट करें | boolean रिटर्न करता है |
session.update({ path, body }) | सेशन प्रॉपर्टीज़ अपडेट करें | Session (opens in a new tab) रिटर्न करता है |
session.init({ path, body }) | ऐप का विश्लेषण करें और AGENTS.md बनाएं | boolean रिटर्न करता है |
session.abort({ path }) | रनिंग सेशन को एबॉर्ट करें | boolean रिटर्न करता है |
session.share({ path }) | सेशन शेयर करें | Session (opens in a new tab) रिटर्न करता है |
session.unshare({ path }) | सेशन अनशेयर करें | Session (opens in a new tab) रिटर्न करता है |
session.summarize({ path, body }) | सेशन का सारांश | boolean रिटर्न करता है |
session.messages({ path }) | सेशन में मैसेजेस की सूची | { info: Message (opens in a new tab), parts: Part[] (opens in a new tab)}[] रिटर्न करता है |
session.message({ path }) | मैसेज डिटेल्स प्राप्त करें | { info: Message (opens in a new tab), parts: Part[] (opens in a new tab)} रिटर्न करता है |
session.prompt({ path, body }) | प्रॉम्प्ट मैसेज भेजें | body.noReply: true UserMessage रिटर्न करता है (केवल कॉन्टेक्स्ट)। डिफ़ॉल्ट AI रिस्पॉन्स के साथ AssistantMessage (opens in a new tab) रिटर्न करता है |
session.command({ path, body }) | सेशन को कमांड भेजें | { info: AssistantMessage (opens in a new tab), parts: Part[] (opens in a new tab)} रिटर्न करता है |
session.shell({ path, body }) | शेल कमांड रन करें | AssistantMessage (opens in a new tab) रिटर्न करता है |
session.revert({ path, body }) | मैसेज रिवर्ट करें | Session (opens in a new tab) रिटर्न करता है |
session.unrevert({ path }) | रिवर्ट किए गए मैसेजेस को रिस्टोर करें | Session (opens in a new tab) रिटर्न करता है |
postSessionByIdPermissionsByPermissionId({ path, body }) | परमिशन रिक्वेस्ट का जवाब दें | boolean रिटर्न करता है |
उदाहरण
// सेशंस बनाएं और मैनेज करें
const session = await client.session.create({
body: { title: "My session" },
})
const sessions = await client.session.list()
// प्रॉम्प्ट मैसेज भेजें
const result = await client.session.prompt({
path: { id: session.id },
body: {
model: { providerID: "anthropic", modelID: "claude-3-5-sonnet-20241022" },
parts: [{ type: "text", text: "Hello!" }],
},
})
// AI रिस्पॉन्स ट्रिगर किए बिना कॉन्टेक्स्ट इंजेक्ट करें (प्लगइन्स के लिए उपयोगी)
await client.session.prompt({
path: { id: session.id },
body: {
noReply: true,
parts: [{ type: "text", text: "You are a helpful assistant." }],
},
})फ़ाइलें
| मेथड | विवरण | रिस्पॉन्स |
|---|---|---|
find.text({ query }) | फाइल्स में टेक्स्ट खोजें | path, lines, line_number, absolute_offset, submatches के साथ मैच ऑब्जेक्ट्स का एरे |
find.files({ query }) | नाम से फाइल्स और डायरेक्टरीज़ खोजें | string[] (पाथ्स) |
find.symbols({ query }) | वर्कस्पेस सिंबल्स खोजें | Symbol[] (opens in a new tab) |
file.read({ query }) | फाइल पढ़ें | { type: "raw" | "patch", content: string } |
file.status({ query? }) | ट्रैक की गई फाइल्स का स्टेटस प्राप्त करें | File[] (opens in a new tab) |
find.files कुछ वैकल्पिक क्वेरी फील्ड्स को सपोर्ट करता है:
type:"file"या"directory"directory: सर्च के लिए प्रोजेक्ट रूट को ओवरराइड करेंlimit: अधिकतम रिजल्ट्स (1-200)
उदाहरण
// फाइल्स खोजें और पढ़ें
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
| मेथड | विवरण | रिस्पॉन्स |
|---|---|---|
tui.appendPrompt({ body }) | प्रॉम्प्ट में टेक्स्ट जोड़ें | boolean |
tui.openHelp() | हेल्प डायलॉग खोलें | boolean |
tui.openSessions() | सेशन सेलेक्टर खोलें | boolean |
tui.openThemes() | थीम सेलेक्टर खोलें | boolean |
tui.openModels() | मॉडल सेलेक्टर खोलें | boolean |
tui.submitPrompt() | वर्तमान प्रॉम्प्ट सबमिट करें | boolean |
tui.clearPrompt() | प्रॉम्प्ट क्लियर करें | boolean |
tui.executeCommand({ body }) | कमांड एक्जीक्यूट करें | boolean |
tui.showToast({ body }) | टोस्ट नोटिफिकेशन दिखाएं | boolean |
उदाहरण
// TUI इंटरफेस कंट्रोल करें
await client.tui.appendPrompt({
body: { text: "Add this to prompt" },
})
await client.tui.showToast({
body: { message: "Task completed", variant: "success" },
})प्रमाणीकरण
| मेथड | विवरण | रिस्पॉन्स |
|---|---|---|
auth.set({ ... }) | ऑथेंटिकेशन क्रेडेंशियल्स सेट करें | boolean |
उदाहरण
await client.auth.set({
path: { id: "anthropic" },
body: { type: "api", key: "your-api-key" },
})इवेंट
| मेथड | विवरण | रिस्पॉन्स |
|---|---|---|
event.subscribe() | सर्वर-सेंट इवेंट्स स्ट्रीम | सर्वर-सेंट इवेंट्स स्ट्रीम |
उदाहरण
// रियल-टाइम इवेंट्स सुनें
const events = await client.event.subscribe()
for await (const event of events.stream) {
console.log("Event:", event.type, event.properties)
}