Dropstone Docs

SDK

Klien JS/TS yang aman tipe untuk server dropstone.

SDK JS/TS Dropstone menyediakan klien yang aman tipe untuk berinteraksi dengan agen Dropstone lokal. Ini menjalankan dropstone serve sebagai subprocess dan memberikan Anda klien HTTP yang diketik yang menunjuk ke sana.

Butuh akses API headless di CI?:

Untuk penggunaan murni pemrograman (pipeline CI, otomasi, serverless), lebih suka HTTP API dengan DROPSTONE_API_KEY. SDK di halaman ini dimaksudkan untuk menyematkan agen interaktif dalam proses Node di mana biner CLI dipasang bersama.

Lihat halaman Server untuk mengetahui cara kerja HTTP API yang mendasar.


Instal

Instal SDK dari npm:

npm install @blankline/dropstone-sdk

Buat klien

Buat instance dropstone:

import { createDropstone } from "@blankline/dropstone-sdk"

const { client } = await createDropstone()

Ini memulai server dan klien

Opsi

OpsiTipeDeskripsiDefault
hostnamestringHostname server127.0.0.1
portnumberPort server4096
signalAbortSignalSinyal abort untuk pembatalanundefined
timeoutnumberTimeout dalam ms untuk awal server5000
configConfigObjek konfigurasi{}

Konfigurasi

Anda dapat melewatkan objek konfigurasi untuk menyesuaikan perilaku. Instance masih mengambil dropstone.json Anda, tetapi Anda dapat mengganti atau menambahkan konfigurasi secara inline:

import { createDropstone } from "@blankline/dropstone-sdk"

const dropstone = await createDropstone({
  hostname: "127.0.0.1",
  port: 4096,
  config: {
    model: "dropstone/dropstone-pro",
  },
})

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

dropstone.server.close()

Hanya klien

Jika Anda sudah memiliki instance dropstone yang berjalan, Anda dapat membuat instance klien untuk terhubung ke sana:

import { createDropstoneClient } from "@blankline/dropstone-sdk"

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

Opsi

OpsiTipeDeskripsiDefault
baseUrlstringURL serverhttp://localhost:4096
fetchfunctionImplementasi fetch khususglobalThis.fetch
parseAsstringMetode parsing responsauto
responseStylestringGaya pengembalian: data atau fieldsfields
throwOnErrorbooleanLempar kesalahan alih-alih kembalifalse

Tipe

SDK mencakup definisi TypeScript untuk semua tipe API. Impor langsung:

import type { Session, Message, Part } from "@blankline/dropstone-sdk"

Semua tipe dihasilkan dari spesifikasi OpenAPI server, jadi nama yang Anda lihat di TypeScript memetakan satu-ke-satu ke bentuk permintaan dan respons server.


Kesalahan

SDK dapat melempar kesalahan yang dapat Anda tangkap dan tangani:

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

Output Terstruktur

Anda dapat meminta output JSON terstruktur dari model dengan menentukan format dengan skema JSON. Model akan menggunakan alat StructuredOutput untuk mengembalikan JSON yang divalidasi yang cocok dengan skema Anda.

Penggunaan Dasar

const result = await client.session.prompt({
  path: { id: sessionId },
  body: {
    parts: [{ type: "text", text: "Research Dropstone 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: "Dropstone", founded: 2024, products: ["Dropstone CLI"] }

Tipe Format Output

TipeDeskripsi
textDefault. Respons teks standar (tidak ada output terstruktur)
json_schemaMengembalikan JSON yang divalidasi yang cocok dengan skema yang disediakan

Format Skema JSON

Saat menggunakan type: 'json_schema', sediakan:

FieldTipeDeskripsi
type'json_schema'Diperlukan. Menentukan mode skema JSON
schemaobjectDiperlukan. Objek JSON Schema yang menentukan struktur output
retryCountnumberOpsional. Jumlah percobaan validasi ulang (default: 2)

Penanganan Kesalahan

Jika model gagal menghasilkan output terstruktur yang valid setelah semua percobaan ulang, respons akan menyertakan StructuredOutputError:

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)
}

Praktik Terbaik

  1. Berikan deskripsi yang jelas dalam properti skema Anda untuk membantu model memahami data apa yang akan diekstrak
  2. Gunakan required untuk menentukan bidang mana yang harus ada
  3. Jaga skema tetap fokus - skema bersarang yang kompleks mungkin lebih sulit bagi model untuk diisi dengan benar
  4. Tetapkan retryCount yang sesuai - tingkatkan untuk skema kompleks, kurangi untuk skema sederhana

API

SDK mengekspos semua API server melalui klien yang aman tipe.


Global

MetodeDeskripsiRespons
global.health()Periksa kesehatan dan versi server{ healthy: true, version: string }

Contoh

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

App

MetodeDeskripsiRespons
app.log()Tulis entri logboolean
app.agents()Daftar semua agen yang tersediaAgent[]

Contoh

// 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()

Proyek

MetodeDeskripsiRespons
project.list()Daftar semua proyekProject[]
project.current()Dapatkan proyek saat iniProject

Contoh

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

// Get current project
const currentProject = await client.project.current()

Path

MetodeDeskripsiRespons
path.get()Dapatkan path saat iniPath

Contoh

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

Konfigurasi

MetodeDeskripsiRespons
config.get()Dapatkan info konfigurasiConfig

Contoh

const config = await client.config.get()

Sesi

MetodeDeskripsiCatatan
session.list()Daftar sesiMengembalikan Session[]
session.get({ path })Dapatkan sesiMengembalikan Session
session.children({ path })Daftar sesi anakMengembalikan Session[]
session.create({ body })Buat sesiMengembalikan Session
session.delete({ path })Hapus sesiMengembalikan boolean
session.update({ path, body })Perbarui properti sesiMengembalikan Session
session.init({ path, body })Analisis aplikasi dan buat AGENTS.mdMengembalikan boolean
session.abort({ path })Batalkan sesi yang sedang berjalanMengembalikan boolean
session.summarize({ path, body })Ringkas sesiMengembalikan boolean
session.messages({ path })Daftar pesan dalam sesiMengembalikan { info: Message, parts: Part[]}[]
session.message({ path })Dapatkan detail pesanMengembalikan { info: Message, parts: Part[]}
session.prompt({ path, body })Kirim pesan promptbody.noReply: true mengembalikan UserMessage (hanya konteks). Default mengembalikan AssistantMessage dengan respons AI. Mendukung body.outputFormat untuk output terstruktur
session.command({ path, body })Kirim pesan perintah ke sesiMengembalikan { info: AssistantMessage, parts: Part[]}
session.shell({ path, body })Jalankan perintah shellMengembalikan AssistantMessage
session.revert({ path, body })Kembalikan pesanMengembalikan Session
session.unrevert({ path })Pulihkan pesan yang dikembalikanMengembalikan Session
postSessionByIdPermissionsByPermissionId({ path, body })Merespons permintaan izinMengembalikan boolean

Contoh

// 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: "dropstone", modelID: "dropstone-pro" },
    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." }],
  },
})

File

MetodeDeskripsiRespons
find.text({ query })Cari teks dalam fileArray objek kecocokan dengan path, lines, line_number, absolute_offset, submatches
find.files({ query })Temukan file dan direktori berdasarkan namastring[] (paths)
find.symbols({ query })Temukan simbol workspaceSymbol[]
file.read({ query })Baca file{ type: "raw" | "patch", content: string }
file.status({ query? })Dapatkan status untuk file yang dilacakFile[]

find.files mendukung beberapa bidang kueri opsional:

  • type: "file" atau "directory"
  • directory: ganti akar proyek untuk pencarian
  • limit: hasil maksimal (1–200)

Contoh

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

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" },
})

Auth

MetodeDeskripsiRespons
auth.set({ ... })Tetapkan kredensial autentikasiboolean

Contoh

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

Event

MetodeDeskripsiRespons
event.subscribe()Aliran event yang dikirim serverAliran event yang dikirim server

Contoh

// 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)
}
Ctrl+I