Dropstone CLI

Server

Interagiere mit dem Dropstone-Server über HTTP.

Der Befehl dropstone serve startet einen headless HTTP-Server, der einen OpenAPI-Endpunkt bereitstellt, den ein Dropstone-Client verwenden kann.


Verwendung

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

Optionen

FlagBeschreibungStandard
--portPort, auf dem gelauscht wird4096
--hostnameHostname, auf dem gelauscht wird127.0.0.1
--mdnsmDNS-Erkennung aktivierenfalse
--mdns-domainBenutzerdefinierter Domainname für den mDNS-Dienstdropstone.local
--corsZusätzliche Browser-Ursprünge erlauben[]

--cors kann mehrfach übergeben werden:

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

Authentifizierung

Setze DROPSTONE_SERVER_PASSWORD, um den Server mit HTTP-Basisauthentifizierung zu schützen. Der Benutzername lautet standardmäßig dropstone, oder setze DROPSTONE_SERVER_USERNAME, um ihn zu überschreiben. Dies gilt sowohl für dropstone serve als auch für dropstone web.

DROPSTONE_SERVER_PASSWORD=your-password dropstone serve

Agent-Anmeldedaten

DROPSTONE_SERVER_PASSWORD schützt den Server selbst. Es teilt dem Agenten nicht mit, wie er Dropstone erreicht. Auf einem unbeaufsichtigten Rechner gibt es kein angemeldetes Konto, das geerbt werden kann. Übergebe daher einen API-Schlüssel über die Provider-Konfiguration:

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

baseURL ist wichtig. API-Schlüssel werden unter /api/v1 akzeptiert, nicht unter /v1, und ein an /v1 gesendeter Schlüssel wird mit 403 Invalid token format. Please log in again. abgelehnt. Setze ihn hier und nicht über DROPSTONE_BASE_URL, da diese auch zum Erstellen der Konto-, Nutzungs- und Speicher-Endpunkte verwendet wird und diese beschädigt, wenn du sie auf einen versionierten Pfad zeigst.

Generiere einen Schlüssel unter dropstone.io/dashboard/settings.

Note

Der Standard-Agent build fragt vor jedem Tool-Aufruf nach. Nichts hier kann diese Eingabeaufforderung beantworten, daher hängt die Anfrage, anstatt fehlzuschlagen. Sende entweder "agent": "accept all" oder setze eine explizite Berechtigungs-Whitelist. Siehe Berechtigungen.


Senden einer Eingabeaufforderung

POST /session/:id/message erfordert sowohl agent als auch model. Wenn model weggelassen wird, wird kein Standard aufgelöst: Die Runde gibt 200 mit einem leeren Body zurück und es wird nichts ausgeführt.

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" }]
  }'

Eine Runde, die fehlschlägt, gibt trotzdem 200 zurück. Der Grund liegt bei data.info.error, nicht auf Transportebene. Überprüfe also dieses Feld, anstatt dich auf den Statuscode zu verlassen.


So funktioniert es

dropstone serve stellt Dropstones Fähigkeiten über einen OpenAPI-3.1-HTTP-Endpunkt bereit. Derselbe Endpunkt wird verwendet, um das SDK zu generieren.

Verwende den Server, wenn du Dropstone programmatisch steuern möchtest: aus einem Skript, einer CI-Pipeline oder einer eigenen Integration. Die interaktive Sitzung und der Server sind unabhängig. Das Ausführen von dropstone serve startet einen frischen eigenständigen Server, unabhängig davon, ob du eine interaktive Sitzung geöffnet hast.

Du kannst die Bind-Adresse mit den Flags --hostname und --port überschreiben.


Spezifikation

Der Server veröffentlicht eine OpenAPI-3.1-Spezifikation, die unter folgender Adresse eingesehen werden kann:

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

Zum Beispiel http://localhost:4096/doc. Verwende die Spezifikation, um Clients zu generieren oder Anfrage- und Antworttypen zu prüfen. Oder betrachte sie in einem Swagger-Explorer.


APIs

Der Dropstone-Server stellt die folgenden APIs bereit.


Global

MethodePfadBeschreibungAntwort
GET/global/healthServer-Health und -Version abrufen{ healthy: true, version: string }
GET/global/eventGlobale Ereignisse abrufen (SSE-Stream)Ereignisstream

Projekt

MethodePfadBeschreibungAntwort
GET/projectAlle Projekte auflistenProject[]
GET/project/currentDas aktuelle Projekt abrufenProject

Pfad & VCS

MethodePfadBeschreibungAntwort
GET/pathDen aktuellen Pfad abrufenPath
GET/vcsVCS-Info für das aktuelle Projekt abrufenVcsInfo

Konfiguration

MethodePfadBeschreibungAntwort
GET/configKonfigurationsinfo abrufenConfig
PATCH/configKonfiguration aktualisierenConfig

Sitzungen

MethodePfadBeschreibungHinweise
GET/sessionAlle Sitzungen auflistenGibt Session[] zurück
POST/sessionEine neue Sitzung erstellenbody: { parentID?, title? }, gibt Session zurück
GET/session/statusSitzungsstatus für alle Sitzungen abrufenGibt { [sessionID: string]: SessionStatus } zurück
GET/session/:idSitzungsdetails abrufenGibt Session zurück
DELETE/session/:idEine Sitzung und alle ihre Daten löschenGibt boolean zurück
PATCH/session/:idSitzungseigenschaften aktualisierenbody: { title? }, gibt Session zurück
GET/session/:id/childrenUntersitzungen einer Sitzung abrufenGibt Session[] zurück
GET/session/:id/todoDie Todo-Liste für eine Sitzung abrufenGibt Todo[] zurück
POST/session/:id/initApp analysieren und AGENTS.md erstellenbody: { messageID, providerID, modelID }, gibt boolean zurück
POST/session/:id/forkEine bestehende Sitzung an einer Nachricht forkenbody: { messageID? }, gibt Session zurück
POST/session/:id/abortEine laufende Sitzung abbrechenGibt boolean zurück
GET/session/:id/diffDen Diff für diese Sitzung abrufenquery: messageID?, gibt FileDiff[] zurück
POST/session/:id/summarizeDie Sitzung zusammenfassenbody: { providerID, modelID }, gibt boolean zurück
POST/session/:id/revertEine Nachricht zurücksetzenbody: { messageID, partID? }, gibt boolean zurück
POST/session/:id/unrevertAlle zurückgesetzten Nachrichten wiederherstellenGibt boolean zurück
POST/session/:id/permissions/:permissionIDAuf eine Berechtigungsanfrage antwortenbody: { response, remember? }, gibt boolean zurück

Nachrichten

MethodePfadBeschreibungHinweise
GET/session/:id/messageNachrichten in einer Sitzung auflistenquery: limit?, gibt { info: Message, parts: Part[]}[] zurück
POST/session/:id/messageEine Nachricht senden und auf Antwort wartenbody: { messageID?, model?, agent?, noReply?, system?, tools?, parts }, gibt { info: Message, parts: Part[]} zurück
GET/session/:id/message/:messageIDNachrichtendetails abrufenGibt { info: Message, parts: Part[]} zurück
POST/session/:id/prompt_asyncEine Nachricht asynchron senden (kein Warten)body: wie bei /session/:id/message, gibt 204 No Content zurück
POST/session/:id/commandEinen Slash-Befehl ausführenbody: { messageID?, agent?, model?, command, arguments }, gibt { info: Message, parts: Part[]} zurück
POST/session/:id/shellEinen Shell-Befehl ausführenbody: { agent, model?, command }, gibt { info: Message, parts: Part[]} zurück

Befehle

MethodePfadBeschreibungAntwort
GET/commandAlle Befehle auflistenCommand[]

Dateien

MethodePfadBeschreibungAntwort
GET/find?pattern=<pat>Nach Text in Dateien suchenArray von Übereinstimmungsobjekten mit path, lines, line_number, absolute_offset, submatches
GET/find/file?query=<q>Dateien und Verzeichnisse nach Namen findenstring[] (Pfade)
GET/find/symbol?query=<q>Workspace-Symbole findenSymbol[]
GET/file?path=<path>Dateien und Verzeichnisse auflistenFileNode[]
GET/file/content?path=<p>Eine Datei lesenFileContent
GET/file/statusStatus für verfolgte Dateien abrufenFile[]

/find/file-Abfrageparameter

  • query (erforderlich): Suchzeichenfolge (Fuzzy-Match)
  • type (optional): Ergebnisse auf "file" oder "directory" beschränken
  • directory (optional): Projektstamm für die Suche überschreiben
  • limit (optional): Maximale Ergebnisse (1–200)
  • dirs (optional): Legacy-Flag ("false" gibt nur Dateien zurück)

LSP, Formatierer & MCP

MethodePfadBeschreibungAntwort
GET/lspLSP-Serverstatus abrufenLSPStatus[]
GET/formatterFormatiererstatus abrufenFormatterStatus[]
GET/mcpMCP-Serverstatus abrufen{ [name: string]: MCPStatus }
POST/mcpMCP-Server dynamisch hinzufügenbody: { name, config }, gibt MCP-Statusobjekt zurück

Agenten

MethodePfadBeschreibungAntwort
GET/agentAlle verfügbaren Agenten auflistenAgent[]

Protokollierung

MethodePfadBeschreibungAntwort
POST/logProtokolleintrag schreiben. Body: { service, level, message, extra? }boolean

Authentifizierung

MethodePfadBeschreibungAntwort
PUT/auth/:idAuthentifizierungsdaten für das angegebene Ziel festlegen.boolean

Ereignisse

MethodePfadBeschreibungAntwort
GET/eventServer-Sent-Events-Stream. Erstes Ereignis ist server.connected, dann Bus-EreignisseServer-Sent-Events-Stream

Dokumentation

MethodePfadBeschreibungAntwort
GET/docOpenAPI-3.1-SpezifikationHTML-Seite mit OpenAPI-Spezifikation
Strg+I