Dropstone Docs

SDK

Client type-safe JS per il server dropstone.

L'SDK JS/TS di Dropstone fornisce un client type-safe per interagire con un agente Dropstone locale. Avvia dropstone serve come sottoprocesso e ti fornisce un client HTTP tipizzato che punta ad esso.

Hai bisogno di accesso API headless in CI?:

Per un uso puramente programmatico (pipeline CI, automazione, serverless), preferisci l'HTTP API con una DROPSTONE_API_KEY. L'SDK in questa pagina è destinato all'integrazione dell'agente interattivo in un processo Node dove il binario CLI è installato insieme.

Vedi la pagina Server per come funziona l'API HTTP sottostante.


Installa

Installa l'SDK da npm:

npm install @blankline/dropstone-sdk

Crea client

Crea un'istanza di dropstone:

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

const { client } = await createDropstone()

Questo avvia sia un server che un client

Opzioni

OpzioneTipoDescrizionePredefinito
hostnamestringHostname del server127.0.0.1
portnumberPorta del server4096
signalAbortSignalSegnale di interruzioneundefined
timeoutnumberTimeout in ms per l'avvio server5000
configConfigOggetto di configurazione{}

Config

Puoi passare un oggetto di configurazione per personalizzare il comportamento. L'istanza raccoglie comunque il tuo dropstone.json, ma puoi sovrascrivere o aggiungere configurazione 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()

Solo client

Se hai già un'istanza di dropstone in esecuzione, puoi creare un'istanza client per connetterti ad essa:

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

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

Opzioni

OpzioneTipoDescrizionePredefinito
baseUrlstringURL del serverhttp://localhost:4096
fetchfunctionImplementazione fetch personalizzataglobalThis.fetch
parseAsstringMetodo di parsing della rispostaauto
responseStylestringStile di ritorno: data o fieldsfields
throwOnErrorbooleanLancia errori invece di restituirlifalse

Tipi

L'SDK include definizioni TypeScript per tutti i tipi di API. Importali direttamente:

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

Tutti i tipi sono generati dalla specifica OpenAPI del server, quindi i nomi che vedi in TypeScript corrispondono uno-a-uno alle forme di richiesta e risposta del server.


Errori

L'SDK può lanciare errori che puoi catturare e gestire:

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

Output Strutturato

Puoi richiedere output JSON strutturato dal modello specificando un format con uno schema JSON. Il modello utilizzerà uno strumento StructuredOutput per restituire JSON validato che corrisponda al tuo schema.

Utilizzo di Base

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

// Accedi all'output strutturato
console.log(result.data.info.structured_output)
// { company: "Dropstone", founded: 2024, products: ["Dropstone CLI"] }

Tipi di Formato Output

TipoDescrizione
textPredefinito. Risposta di testo standard (nessun output strutturato)
json_schemaRestituisce JSON validato che corrisponde allo schema fornito

Formato JSON Schema

Quando usi type: 'json_schema', fornisci:

CampoTipoDescrizione
type'json_schema'Obbligatorio. Specifica la modalità JSON schema
schemaobjectObbligatorio. Oggetto JSON Schema che definisce la struttura dell'output
retryCountnumberOpzionale. Numero di tentativi di validazione (predefinito: 2)

Gestione degli Errori

Se il modello non riesce a produrre output strutturato valido dopo tutti i tentativi, la risposta includerà un 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)
}

Best Practices

  1. Fornisci descrizioni chiare nelle proprietà dello schema per aiutare il modello a capire quali dati estrarre
  2. Usa required per specificare quali campi devono essere presenti
  3. Mantieni gli schemi focalizzati - schemi annidati complessi potrebbero essere più difficili da compilare correttamente per il modello
  4. Imposta un retryCount appropriato - aumenta per schemi complessi, diminuisci per quelli semplici

API

L'SDK espone tutte le API del server attraverso un client type-safe.


Global

MetodoDescrizioneRisposta
global.health()Controlla la salute e la versione del server{ healthy: true, version: string }

Esempi

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

App

MetodoDescrizioneRisposta
app.log()Scrivi una voce di logboolean
app.agents()Elenca tutti gli agenti disponibiliAgent[]

Esempi

// Scrivi una voce di log
await client.app.log({
  body: {
    service: "my-app",
    level: "info",
    message: "Operation completed",
  },
})

// Elenca gli agenti disponibili
const agents = await client.app.agents()

Project

MetodoDescrizioneRisposta
project.list()Elenca tutti i progettiProject[]
project.current()Ottieni il progetto correnteProject

Esempi

// Elenca tutti i progetti
const projects = await client.project.list()

// Ottieni il progetto corrente
const currentProject = await client.project.current()

Path

MetodoDescrizioneRisposta
path.get()Ottieni il percorso correntePath

Esempi

// Ottieni le informazioni del percorso corrente
const pathInfo = await client.path.get()

Config

MetodoDescrizioneRisposta
config.get()Ottieni le informazioni di configurazioneConfig

Esempi

const config = await client.config.get()

Sessions

MetodoDescrizioneNote
session.list()Elenca le sessioniRestituisce Session[]
session.get({ path })Ottieni la sessioneRestituisce Session
session.children({ path })Elenca le sessioni figlieRestituisce Session[]
session.create({ body })Crea una sessioneRestituisce Session
session.delete({ path })Elimina una sessioneRestituisce boolean
session.update({ path, body })Aggiorna le proprietà della sessioneRestituisce Session
session.init({ path, body })Analizza l'app e crea AGENTS.mdRestituisce boolean
session.abort({ path })Interrompi una sessione in esecuzioneRestituisce boolean
session.summarize({ path, body })Riassumi la sessioneRestituisce boolean
session.messages({ path })Elenca i messaggi in una sessioneRestituisce { info: Message, parts: Part[]}[]
session.message({ path })Ottieni i dettagli del messaggioRestituisce { info: Message, parts: Part[]}
session.prompt({ path, body })Invia un messaggio di promptbody.noReply: true restituisce UserMessage (solo contesto). Predefinito restituisce AssistantMessage con risposta AI. Supporta body.outputFormat per output strutturato
session.command({ path, body })Invia un comando alla sessioneRestituisce { info: AssistantMessage, parts: Part[]}
session.shell({ path, body })Esegui un comando shellRestituisce AssistantMessage
session.revert({ path, body })Ripristina un messaggioRestituisce Session
session.unrevert({ path })Ripristina i messaggi ripristinatiRestituisce Session
postSessionByIdPermissionsByPermissionId({ path, body })Rispondi a una richiesta di permessoRestituisce boolean

Esempi

// Crea e gestisci le sessioni
const session = await client.session.create({
  body: { title: "My session" },
})

const sessions = await client.session.list()

// Invia un messaggio di prompt
const result = await client.session.prompt({
  path: { id: session.id },
  body: {
    model: { providerID: "dropstone", modelID: "dropstone-pro" },
    parts: [{ type: "text", text: "Hello!" }],
  },
})

// Inietta contesto senza attivare la risposta AI (utile per i plugin)
await client.session.prompt({
  path: { id: session.id },
  body: {
    noReply: true,
    parts: [{ type: "text", text: "You are a helpful assistant." }],
  },
})

Files

MetodoDescrizioneRisposta
find.text({ query })Cerca testo nei fileArray di oggetti di corrispondenza con path, lines, line_number, absolute_offset, submatches
find.files({ query })Trova file e directory per nomestring[] (percorsi)
find.symbols({ query })Trova simboli dell'area di lavoroSymbol[]
file.read({ query })Leggi un file{ type: "raw" | "patch", content: string }
file.status({ query? })Ottieni lo stato dei file tracciatiFile[]

find.files supporta alcuni campi di query opzionali:

  • type: "file" o "directory"
  • directory: sovrascrivi la radice del progetto per la ricerca
  • limit: risultati massimi (1–200)

Esempi

// Cerca e leggi i file
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

MetodoDescrizioneRisposta
auth.set({ ... })Imposta le credenziali di autenticazioneboolean

Esempi

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

Events

MetodoDescrizioneRisposta
event.subscribe()Flusso di eventi inviati dal serverFlusso di eventi inviati dal server

Esempi

// Ascolta gli eventi in tempo reale
const events = await client.event.subscribe()
for await (const event of events.stream) {
  console.log("Event:", event.type, event.properties)
}
Ctrl+I