Dropstone CLI

Serveur

Interagissez avec le serveur Dropstone via HTTP.

La commande dropstone serve exécute un serveur HTTP headless qui expose un endpoint OpenAPI qu'un client Dropstone peut utiliser.


Utilisation

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

Options

FlagDescriptionDéfaut
--portPort d'écoute4096
--hostnameNom d'hôte d'écoute127.0.0.1
--mdnsActiver la découverte mDNSfalse
--mdns-domainNom de domaine personnalisé pour le service mDNSdropstone.local
--corsOrigines navigateur supplémentaires à autoriser[]

--cors peut être passé plusieurs fois :

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

Authentification

Définissez DROPSTONE_SERVER_PASSWORD pour protéger le serveur avec une authentification HTTP de base. Le nom d'utilisateur par défaut est dropstone, ou définissez DROPSTONE_SERVER_USERNAME pour le remplacer. Cela s'applique à la fois à dropstone serve et à dropstone web.

DROPSTONE_SERVER_PASSWORD=your-password dropstone serve

Identifiants de l'agent

DROPSTONE_SERVER_PASSWORD protège le serveur lui-même. Il ne dit pas à l'agent comment joindre Dropstone. Sur une machine sans surveillance, il n'y a pas de compte connecté à hériter, donc transmettez une clé API via la configuration du fournisseur :

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

baseURL est important. Les clés API sont acceptées sur /api/v1, pas sur /v1, et une clé envoyée à /v1 est rejetée avec 403 Invalid token format. Please log in again. Définissez-la ici plutôt que via DROPSTONE_BASE_URL, qui est également utilisé pour construire les endpoints de compte, d'utilisation et de mémoire et les cassera si vous le pointez vers un chemin versionné.

Générez une clé sur dropstone.io/dashboard/settings.

Note

L'agent build par défaut demande avant chaque appel d'outil. Rien ici ne peut répondre à cette invite, donc la requête reste bloquée plutôt que d'échouer. Envoyez soit "agent": "accept all" soit définissez une liste d'autorisations explicite. Voir Permissions.


Envoi d'une invite

POST /session/:id/message nécessite à la fois agent et model. Omettre model ne résout aucun défaut : le tour renvoie 200 avec un corps vide et rien ne s'exécute.

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

Un tour qui échoue renvoie toujours 200. La raison se trouve dans data.info.error, pas au niveau du transport, donc vérifiez ce champ plutôt que de vous fier au code de statut.


Comment ça fonctionne

dropstone serve expose les capacités de Dropstone via un endpoint HTTP OpenAPI 3.1. Le même endpoint est utilisé pour générer le SDK.

Utilisez le serveur lorsque vous souhaitez piloter Dropstone par programmation : depuis un script, un pipeline CI, ou une intégration personnalisée. La session interactive et le serveur sont indépendants. Lancer dropstone serve démarre un nouveau serveur autonome, que vous ayez ou non une session interactive ouverte.

Vous pouvez remplacer l'adresse de liaison avec les flags --hostname et --port.


Spécification

Le serveur publie une spécification OpenAPI 3.1 consultable à l'adresse :

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

Par exemple, http://localhost:4096/doc. Utilisez la spécification pour générer des clients ou inspecter les types de requêtes et de réponses. Ou consultez-la dans un explorateur Swagger.


API

Le serveur Dropstone expose les API suivantes.


Global

MéthodeCheminDescriptionRéponse
GET/global/healthObtenir la santé et la version du serveur{ healthy: true, version: string }
GET/global/eventObtenir les événements globaux (flux SSE)Flux d'événements

Projet

MéthodeCheminDescriptionRéponse
GET/projectLister tous les projetsProject[]
GET/project/currentObtenir le projet actuelProject

Chemin et VCS

MéthodeCheminDescriptionRéponse
GET/pathObtenir le chemin actuelPath
GET/vcsObtenir les informations VCS pour le projet actuelVcsInfo

Configuration

MéthodeCheminDescriptionRéponse
GET/configObtenir les informations de configurationConfig
PATCH/configMettre à jour la configurationConfig

Sessions

MéthodeCheminDescriptionNotes
GET/sessionLister toutes les sessionsRenvoie Session[]
POST/sessionCréer une nouvelle sessioncorps : { parentID?, title? }, renvoie Session
GET/session/statusObtenir le statut des sessions pour toutes les sessionsRenvoie { [sessionID: string]: SessionStatus }
GET/session/:idObtenir les détails d'une sessionRenvoie Session
DELETE/session/:idSupprimer une session et toutes ses donnéesRenvoie boolean
PATCH/session/:idMettre à jour les propriétés d'une sessioncorps : { title? }, renvoie Session
GET/session/:id/childrenObtenir les sessions enfants d'une sessionRenvoie Session[]
GET/session/:id/todoObtenir la liste de tâches d'une sessionRenvoie Todo[]
POST/session/:id/initAnalyser l'application et créer AGENTS.mdcorps : { messageID, providerID, modelID }, renvoie boolean
POST/session/:id/forkDupliquer une session existante à un messagecorps : { messageID? }, renvoie Session
POST/session/:id/abortInterrompre une session en coursRenvoie boolean
GET/session/:id/diffObtenir le diff de cette sessionrequête : messageID?, renvoie FileDiff[]
POST/session/:id/summarizeRésumer la sessioncorps : { providerID, modelID }, renvoie boolean
POST/session/:id/revertAnnuler un messagecorps : { messageID, partID? }, renvoie boolean
POST/session/:id/unrevertRestaurer tous les messages annulésRenvoie boolean
POST/session/:id/permissions/:permissionIDRépondre à une demande d'autorisationcorps : { response, remember? }, renvoie boolean

Messages

MéthodeCheminDescriptionNotes
GET/session/:id/messageLister les messages d'une sessionrequête : limit?, renvoie { info: Message, parts: Part[]}[]
POST/session/:id/messageEnvoyer un message et attendre la réponsecorps : { messageID?, model?, agent?, noReply?, system?, tools?, parts }, renvoie { info: Message, parts: Part[]}
GET/session/:id/message/:messageIDObtenir les détails d'un messageRenvoie { info: Message, parts: Part[]}
POST/session/:id/prompt_asyncEnvoyer un message de manière asynchrone (sans attendre)corps : identique à /session/:id/message, renvoie 204 No Content
POST/session/:id/commandExécuter une commande slashcorps : { messageID?, agent?, model?, command, arguments }, renvoie { info: Message, parts: Part[]}
POST/session/:id/shellExécuter une commande shellcorps : { agent, model?, command }, renvoie { info: Message, parts: Part[]}

Commandes

MéthodeCheminDescriptionRéponse
GET/commandLister toutes les commandesCommand[]

Fichiers

MéthodeCheminDescriptionRéponse
GET/find?pattern=<pat>Rechercher du texte dans les fichiersTableau d'objets de correspondance avec path, lines, line_number, absolute_offset, submatches
GET/find/file?query=<q>Trouver des fichiers et dossiers par nomstring[] (chemins)
GET/find/symbol?query=<q>Trouver des symboles d'espace de travailSymbol[]
GET/file?path=<path>Lister les fichiers et dossiersFileNode[]
GET/file/content?path=<p>Lire un fichierFileContent
GET/file/statusObtenir le statut des fichiers suivisFile[]

Paramètres de requête /find/file

  • query (obligatoire) : chaîne de recherche (correspondance floue)
  • type (facultatif) : limiter les résultats à "file" ou "directory"
  • directory (facultatif) : remplacer la racine du projet pour la recherche
  • limit (facultatif) : nombre maximal de résultats (1–200)
  • dirs (facultatif) : indicateur hérité ("false" renvoie uniquement les fichiers)

LSP, Formateurs et MCP

MéthodeCheminDescriptionRéponse
GET/lspObtenir le statut du serveur LSPLSPStatus[]
GET/formatterObtenir le statut du formateurFormatterStatus[]
GET/mcpObtenir le statut du serveur MCP{ [name: string]: MCPStatus }
POST/mcpAjouter un serveur MCP dynamiquementcorps : { name, config }, renvoie l'objet de statut MCP

Agents

MéthodeCheminDescriptionRéponse
GET/agentLister tous les agents disponiblesAgent[]

Journalisation

MéthodeCheminDescriptionRéponse
POST/logÉcrire une entrée de journal. Corps : { service, level, message, extra? }boolean

Authentification

MéthodeCheminDescriptionRéponse
PUT/auth/:idDéfinir les identifiants d'authentification pour la cible donnée.boolean

Événements

MéthodeCheminDescriptionRéponse
GET/eventFlux d'événements envoyés par le serveur. Le premier événement est server.connected, puis les événements du busFlux d'événements envoyés par le serveur

Documentation

MéthodeCheminDescriptionRéponse
GET/docSpécification OpenAPI 3.1Page HTML avec la spécification OpenAPI
Ctrl+I