Dropstone CLI

Server

Berinteraksi dengan server dropstone melalui HTTP.

Perintah dropstone serve menjalankan server HTTP headless yang mengekspos endpoint OpenAPI yang dapat digunakan oleh klien Dropstone.


Penggunaan

dropstone serve [--port <number>] [--hostname <string>] [--cors <origin>]

Opsi

FlagDeskripsiDefault
--portPort untuk mendengarkan4096
--hostnameHostname untuk mendengarkan127.0.0.1
--mdnsAktifkan penemuan mDNSfalse
--mdns-domainNama domain khusus untuk layanan mDNSdropstone.local
--corsOrigin browser tambahan yang diizinkan[]

--cors dapat diberikan beberapa kali:

dropstone serve --cors http://localhost:5173 --cors https://app.example.com

Autentikasi

Setel DROPSTONE_SERVER_PASSWORD untuk melindungi server dengan HTTP basic auth. Nama pengguna defaultnya adalah dropstone, atau setel DROPSTONE_SERVER_USERNAME untuk menimpanya. Ini berlaku untuk dropstone serve dan dropstone web.

DROPSTONE_SERVER_PASSWORD=your-password dropstone serve

Kredensial agen

DROPSTONE_SERVER_PASSWORD melindungi server itu sendiri. Ini tidak memberi tahu agen cara menjangkau Dropstone. Pada mesin tanpa pengawasan, tidak ada akun yang masuk untuk diwarisi, jadi berikan API key melalui konfigurasi penyedia:

{
  "provider": {
    "dropstone": {
      "options": {
        "apiKey": "dsk_live_...",
        "baseURL": "https://api.dropstone.io/api/v1"
      }
    }
  }
}

baseURL itu penting. API key diterima di /api/v1, bukan di /v1, dan key yang dikirim ke /v1 akan ditolak dengan 403 Invalid token format. Please log in again. Setel di sini daripada melalui DROPSTONE_BASE_URL, yang juga digunakan untuk membangun endpoint akun, penggunaan, dan memori dan akan merusaknya jika Anda mengarahkannya ke jalur berversi.

Buat key di dropstone.io/dashboard/settings.

Note

Agen build default bertanya sebelum setiap panggilan alat. Tidak ada apa pun di sini yang dapat menjawab prompt tersebut, sehingga permintaan akan menggantung daripada gagal. Kirim "agent": "accept all" atau setel daftar izin izin eksplisit. Lihat Izin.


Mengirim prompt

POST /session/:id/message memerlukan agent dan model. Menghilangkan model tidak menyelesaikan default apa pun: giliran mengembalikan 200 dengan body kosong dan tidak ada yang berjalan.

curl -X POST "http://127.0.0.1:4096/session/$SID/message?directory=$PWD" \
  -H "Content-Type: application/json" \
  -d '{
    "agent": "build",
    "model": { "providerID": "dropstone", "modelID": "dropstone-pro" },
    "parts": [{ "type": "text", "text": "Add error handling to src/index.ts" }]
  }'

Giliran yang gagal tetap mengembalikan 200. Alasannya ada di data.info.error, bukan di tingkat transport, jadi periksa bidang itu daripada mengandalkan kode status.


Cara kerjanya

dropstone serve mengekspos kemampuan Dropstone melalui endpoint HTTP OpenAPI 3.1. Endpoint yang sama digunakan untuk menghasilkan SDK.

Gunakan server saat Anda ingin menggerakkan Dropstone secara terprogram: dari skrip, pipeline CI, atau integrasi Anda sendiri. Sesi interaktif dan server bersifat independen. Menjalankan dropstone serve memulai server mandiri yang baru terlepas dari apakah Anda memiliki sesi interaktif yang terbuka.

Anda dapat menimpa alamat bind dengan flag --hostname dan --port.


Spesifikasi

Server menerbitkan spesifikasi OpenAPI 3.1 yang dapat dilihat di:

http://<hostname>:<port>/doc

Misalnya, http://localhost:4096/doc. Gunakan spesifikasi untuk menghasilkan klien atau memeriksa tipe permintaan dan respons. Atau lihat di penjelajah Swagger.


API

Server dropstone mengekspos API berikut.


Global

MetodeJalurDeskripsiRespons
GET/global/healthDapatkan kesehatan dan versi server{ healthy: true, version: string }
GET/global/eventDapatkan event global (aliran SSE)Aliran event

Proyek

MetodeJalurDeskripsiRespons
GET/projectDaftar semua proyekProject[]
GET/project/currentDapatkan proyek saat iniProject

Jalur & VCS

MetodeJalurDeskripsiRespons
GET/pathDapatkan jalur saat iniPath
GET/vcsDapatkan info VCS untuk proyek saat iniVcsInfo

Konfigurasi

MetodeJalurDeskripsiRespons
GET/configDapatkan info konfigurasiConfig
PATCH/configPerbarui konfigurasiConfig

Sesi

MetodeJalurDeskripsiCatatan
GET/sessionDaftar semua sesiMengembalikan Session[]
POST/sessionBuat sesi barubody: { parentID?, title? }, mengembalikan Session
GET/session/statusDapatkan status sesi untuk semua sesiMengembalikan { [sessionID: string]: SessionStatus }
GET/session/:idDapatkan detail sesiMengembalikan Session
DELETE/session/:idHapus sesi dan semua datanyaMengembalikan boolean
PATCH/session/:idPerbarui properti sesibody: { title? }, mengembalikan Session
GET/session/:id/childrenDapatkan sesi anak dari sesiMengembalikan Session[]
GET/session/:id/todoDapatkan daftar todo untuk sesiMengembalikan Todo[]
POST/session/:id/initAnalisis aplikasi dan buat AGENTS.mdbody: { messageID, providerID, modelID }, mengembalikan boolean
POST/session/:id/forkFork sesi yang ada pada pesanbody: { messageID? }, mengembalikan Session
POST/session/:id/abortBatalkan sesi yang berjalanMengembalikan boolean
GET/session/:id/diffDapatkan diff untuk sesi iniquery: messageID?, mengembalikan FileDiff[]
POST/session/:id/summarizeRingkas sesibody: { providerID, modelID }, mengembalikan boolean
POST/session/:id/revertKembalikan pesanbody: { messageID, partID? }, mengembalikan boolean
POST/session/:id/unrevertPulihkan semua pesan yang dikembalikanMengembalikan boolean
POST/session/:id/permissions/:permissionIDTanggapi permintaan izinbody: { response, remember? }, mengembalikan boolean

Pesan

MetodeJalurDeskripsiCatatan
GET/session/:id/messageDaftar pesan dalam sesiquery: limit?, mengembalikan { info: Message, parts: Part[]}[]
POST/session/:id/messageKirim pesan dan tunggu responsbody: { messageID?, model?, agent?, noReply?, system?, tools?, parts }, mengembalikan { info: Message, parts: Part[]}
GET/session/:id/message/:messageIDDapatkan detail pesanMengembalikan { info: Message, parts: Part[]}
POST/session/:id/prompt_asyncKirim pesan secara asinkron (tanpa menunggu)body: sama dengan /session/:id/message, mengembalikan 204 No Content
POST/session/:id/commandJalankan perintah slashbody: { messageID?, agent?, model?, command, arguments }, mengembalikan { info: Message, parts: Part[]}
POST/session/:id/shellJalankan perintah shellbody: { agent, model?, command }, mengembalikan { info: Message, parts: Part[]}

Perintah

MetodeJalurDeskripsiRespons
GET/commandDaftar semua perintahCommand[]

File

MetodeJalurDeskripsiRespons
GET/find?pattern=<pat>Cari teks dalam fileArray objek kecocokan dengan path, lines, line_number, absolute_offset, submatches
GET/find/file?query=<q>Temukan file dan direktori berdasarkan namastring[] (jalur)
GET/find/symbol?query=<q>Temukan simbol ruang kerjaSymbol[]
GET/file?path=<path>Daftar file dan direktoriFileNode[]
GET/file/content?path=<p>Baca fileFileContent
GET/file/statusDapatkan status untuk file yang dilacakFile[]

Parameter kueri /find/file

  • query (wajib): string pencarian (pencocokan fuzzy)
  • type (opsional): batasi hasil ke "file" atau "directory"
  • directory (opsional): timpa akar proyek untuk pencarian
  • limit (opsional): hasil maksimal (1–200)
  • dirs (opsional): flag lama ("false" hanya mengembalikan file)

LSP, Formatter & MCP

MetodeJalurDeskripsiRespons
GET/lspDapatkan status server LSPLSPStatus[]
GET/formatterDapatkan status formatterFormatterStatus[]
GET/mcpDapatkan status server MCP{ [name: string]: MCPStatus }
POST/mcpTambahkan server MCP secara dinamisbody: { name, config }, mengembalikan objek status MCP

Agen

MetodeJalurDeskripsiRespons
GET/agentDaftar semua agen yang tersediaAgent[]

Pencatatan

MetodeJalurDeskripsiRespons
POST/logTulis entri log. Body: { service, level, message, extra? }boolean

Autentikasi

MetodeJalurDeskripsiRespons
PUT/auth/:idSetel kredensial autentikasi untuk target yang diberikan.boolean

Event

MetodeJalurDeskripsiRespons
GET/eventAliran event yang dikirim server. Event pertama adalah server.connected, lalu event busAliran event yang dikirim server

Dokumen

MetodeJalurDeskripsiRespons
GET/docSpesifikasi OpenAPI 3.1Halaman HTML dengan spesifikasi OpenAPI
Ctrl+I