SDK
kodine sunucusu için type-safe JS istemcisi.
kodine JS/TS SDK, sunucuyla etkileşim kurmanız için type-safe bir istemci sunar. kodine’u programatik olarak yönetmek ve entegrasyonlar geliştirmek için kullanabilirsiniz.
Nasıl çalıştığını Sunucu sayfasında görebilir, örnekler için topluluğun geliştirdiği projelere göz atabilirsiniz.
Kurulum
SDK’yı npm üzerinden kurun:
npm install @kodine-ai/sdkİstemci Oluşturma
Bir kodine örneği oluşturun:
import { createKodine } from "@kodine-ai/sdk"
const { client } = await createKodine()Bu çağrı hem bir sunucu hem de bir istemci başlatır
Seçenekler
| Seçenek | Tip | Açıklama | Varsayılan |
|---|---|---|---|
hostname | string | Sunucunun ana bilgisayar adı | 127.0.0.1 |
port | number | Sunucunun bağlantı noktası | 4096 |
signal | AbortSignal | İptal için durdurma sinyali | undefined |
timeout | number | Sunucu başlatma için milisaniye cinsinden süre | 5000 |
config | Config | Yapılandırma nesnesi | {} |
Yapılandırma
Davranışı özelleştirmek için bir yapılandırma nesnesi geçebilirsiniz. Örnek yine de kodine.json dosyanızı okur; ancak satır içi yapılandırmayla ezebilir ya da ekleme yapabilirsiniz:
import { createKodine } from "@kodine-ai/sdk"
const kodine = await createKodine({ hostname: "127.0.0.1", port: 4096, config: { model: "anthropic/claude-3-5-sonnet-20241022", },})
console.log(`Server running at ${kodine.server.url}`)
kodine.server.close()Yalnızca istemci
Zaten çalışan bir kodine örneğiniz varsa ona bağlanmak için yalnızca bir istemci örneği oluşturabilirsiniz:
import { createKodineClient } from "@kodine-ai/sdk"
const client = createKodineClient({ baseUrl: "http://localhost:4096",})Seçenekler
| Seçenek | Tip | Açıklama | Varsayılan |
|---|---|---|---|
baseUrl | string | Sunucunun URL’si | http://localhost:4096 |
fetch | function | Özel fetch uygulaması | globalThis.fetch |
parseAs | string | Yanıtı ayrıştırma yöntemi | auto |
responseStyle | string | Dönüş stili: data veya fields | fields |
throwOnError | boolean | Döndürmek yerine hata fırlatır | false |
Türler
SDK, tüm API türleri için TypeScript tanımları içerir. Bunları doğrudan içe aktarabilirsiniz:
import type { Session, Message, Part } from "@kodine-ai/sdk"Tüm türler sunucunun OpenAPI spesifikasyonundan üretilir ve türler dosyasında bulunabilir.
Hatalar
SDK, yakalayıp işleyebileceğiniz hatalar fırlatabilir:
try { await client.session.get({ path: { id: "invalid-id" } })} catch (error) { console.error("Failed to get session:", (error as Error).message)}Yapılandırılmış Çıktı
format alanına bir JSON şeması vererek modelden yapılandırılmış JSON çıktısı isteyebilirsiniz. Model, şemanızla eşleşen doğrulanmış JSON döndürmek için bir StructuredOutput aracı kullanır.
Temel Kullanım
const result = await client.session.prompt({ path: { id: sessionId }, body: { parts: [{ type: "text", text: "Anthropic'i araştırın ve şirket bilgileri sağlayın" }], format: { type: "json_schema", schema: { type: "object", properties: { company: { type: "string", description: "Şirket adı" }, founded: { type: "number", description: "Kuruluş yılı" }, products: { type: "array", items: { type: "string" }, description: "Ana ürünler", }, }, required: ["company", "founded"], }, }, },})
// Yapılandırılmış çıktıya erişinconsole.log(result.data.info.structured_output)// { company: "Anthropic", founded: 2021, products: ["Claude", "Claude API"] }Çıktı Format Türleri
| Tür | Açıklama |
|---|---|
text | Varsayılan. Standart metin yanıtı (yapılandırılmış çıktı içermez) |
json_schema | Verilen şemayla eşleşen doğrulanmış JSON döndürür |
JSON Şema Formatı
type: 'json_schema' kullanırken şunları sağlayın:
| Alan | Tür | Açıklama |
|---|---|---|
type | 'json_schema' | Zorunlu. JSON şema modunu belirtir |
schema | object | Zorunlu. Çıktı yapısını tanımlayan JSON Şema nesnesi |
retryCount | number | İsteğe bağlı. Doğrulama için yeniden deneme sayısı (varsayılan: 2) |
Hata Yönetimi
Model, tüm yeniden denemelere rağmen geçerli bir yapılandırılmış çıktı üretemezse yanıt bir StructuredOutputError içerir:
if (result.data.info.error?.name === "StructuredOutputError") { console.error("Yapılandırılmış çıktı üretilemedi:", result.data.info.error.message) console.error("Denemeler:", result.data.info.error.retries)}En İyi Uygulamalar
- Açık açıklamalar yazın: Modelin hangi verileri çıkaracağını anlaması için şema özelliklerinde net açıklamalar kullanın
requiredalanını kullanın: Hangi alanların zorunlu olduğunu belirtin- Şemaları odaklı tutun: Karmaşık ve iç içe şemaların doğru doldurulması model için daha zordur
- Uygun
retryCountbelirleyin: Karmaşık şemalarda artırın, basitlerde azaltın
API’ler
SDK, tüm sunucu API’lerini type-safe bir istemci üzerinden sunar.
Global
| Yöntem | Açıklama | Yanıt |
|---|---|---|
global.health() | Sunucunun sağlık durumunu ve sürümünü verir | { healthy: true, version: string } |
Örnekler
const health = await client.global.health()console.log(health.data.version)App
| Yöntem | Açıklama | Yanıt |
|---|---|---|
app.log() | Günlük girdisi yazar | boolean |
app.agents() | Mevcut tüm agent’ları listeler | Agent[] |
Örnekler
// Write a log entryawait client.app.log({ body: { service: "my-app", level: "info", message: "Operation completed", },})
// List available agentsconst agents = await client.app.agents()Project
| Yöntem | Açıklama | Yanıt |
|---|---|---|
project.list() | Tüm projeleri listeler | Project[] |
project.current() | Geçerli projeyi döndürür | Project |
Örnekler
// List all projectsconst projects = await client.project.list()
// Get current projectconst currentProject = await client.project.current()Path
| Yöntem | Açıklama | Yanıt |
|---|---|---|
path.get() | Geçerli yolu döndürür | Path |
Örnekler
// Get current path informationconst pathInfo = await client.path.get()Config
| Yöntem | Açıklama | Yanıt |
|---|---|---|
config.get() | Yapılandırma bilgisini döndürür | Config |
config.providers() | Sağlayıcıları ve varsayılan modelleri listeler | { providers: Provider[], default: { [key: string]: string } } |
Örnekler
const config = await client.config.get()
const { providers, default: defaults } = await client.config.providers()Oturumlar
| Yöntem | Açıklama | Notlar |
|---|---|---|
session.list() | Oturumları listeler | Session[] döndürür |
session.get({ path }) | Oturum döndürür | Session döndürür |
session.children({ path }) | Alt oturumları listeler | Session[] döndürür |
session.create({ body }) | Oturum oluşturur | Session döndürür |
session.delete({ path }) | Oturum siler | boolean döndürür |
session.update({ path, body }) | Oturum özelliklerini günceller | Session döndürür |
session.init({ path, body }) | Uygulamayı analiz edip AGENTS.md oluşturur | boolean döndürür |
session.abort({ path }) | Çalışan bir oturumu iptal eder | boolean döndürür |
session.share({ path }) | Oturumu paylaşır | Session döndürür |
session.unshare({ path }) | Oturum paylaşımını kaldırır | Session döndürür |
session.summarize({ path, body }) | Oturumu özetler | boolean döndürür |
session.messages({ path }) | Oturumdaki mesajları listeler | { info: Message, parts: Part[]}[] döndürür |
session.message({ path }) | Mesaj ayrıntılarını döndürür | { info: Message, parts: Part[]} döndürür |
session.prompt({ path, body }) | İstem mesajı gönderir | body.noReply: true UserMessage (yalnızca bağlam) döndürür. Varsayılan olarak AI yanıtıyla AssistantMessage döndürür. yapılandırılmış çıktı için body.outputFormat destekler |
session.command({ path, body }) | Oturuma komut gönderir | { info: AssistantMessage, parts: Part[]} döndürür |
session.shell({ path, body }) | Kabuk komutu çalıştırır | AssistantMessage döndürür |
session.revert({ path, body }) | Bir mesajı geri alır | Session döndürür |
session.unrevert({ path }) | Geri alınan mesajları geri yükler | Session döndürür |
postSessionByIdPermissionsByPermissionId({ path, body }) | Bir izin isteğine yanıt verir | boolean döndürür |
Örnekler
// Create and manage sessionsconst session = await client.session.create({ body: { title: "My session" },})
const sessions = await client.session.list()
// Send a prompt messageconst result = await client.session.prompt({ path: { id: session.id }, body: { model: { providerID: "anthropic", modelID: "claude-3-5-sonnet-20241022" }, 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." }], },})Dosyalar
| Yöntem | Açıklama | Yanıt |
|---|---|---|
find.text({ query }) | Dosyalarda metin arar | path, lines, line_number, absolute_offset, submatches içeren eşleşme nesneleri dizisi |
find.files({ query }) | Dosya ve dizinleri ada göre bulur | string[] (yollar) |
find.symbols({ query }) | Çalışma alanı sembollerini bulur | Symbol[] |
file.read({ query }) | Bir dosyayı okur | { type: "raw" | "patch", content: string } |
file.status({ query? }) | İzlenen dosyaların durumunu döndürür | File[] |
find.files birkaç isteğe bağlı sorgu alanı destekler:
type:"file"veya"directory"directory: arama için proje kökünü ezerlimit: maksimum sonuç sayısı (1-200)
Örnekler
// Search and read filesconst textResults = await client.find.text({ query: { pattern: "function.*kodine" },})
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
| Yöntem | Açıklama | Yanıt |
|---|---|---|
tui.appendPrompt({ body }) | İsteme metin ekler | boolean |
tui.openHelp() | Yardım penceresini açar | boolean |
tui.openSessions() | Oturum seçiciyi açar | boolean |
tui.openThemes() | Tema seçiciyi açar | boolean |
tui.openModels() | Model seçiciyi açar | boolean |
tui.submitPrompt() | Mevcut istemi gönderir | boolean |
tui.clearPrompt() | İstemi temizler | boolean |
tui.executeCommand({ body }) | Bir komut çalıştırır | boolean |
tui.showToast({ body }) | Toast bildirimi gösterir | boolean |
Örnekler
// Control TUI interfaceawait client.tui.appendPrompt({ body: { text: "Add this to prompt" },})
await client.tui.showToast({ body: { message: "Task completed", variant: "success" },})Auth
| Yöntem | Açıklama | Yanıt |
|---|---|---|
auth.set({ ... }) | Kimlik bilgilerini ayarlar | boolean |
Örnekler
await client.auth.set({ path: { id: "anthropic" }, body: { type: "api", key: "your-api-key" },})Olaylar
| Yöntem | Açıklama | Yanıt |
|---|---|---|
event.subscribe() | Sunucunun gönderdiği olay akışı | Sunucu tarafından gönderilen olay akışı |
Örnekler
// Listen to real-time eventsconst events = await client.event.subscribe()for await (const event of events.stream) { console.log("Event:", event.type, event.properties)}