Dropstone CLI

Servidor

Interactúa con el servidor de Dropstone a través de HTTP.

El comando dropstone serve ejecuta un servidor HTTP sin interfaz gráfica que expone un endpoint OpenAPI que un cliente de Dropstone puede utilizar.


Uso

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

Opciones

FlagDescripciónValor por defecto
--portPuerto en el que escuchar4096
--hostnameNombre de host en el que escuchar127.0.0.1
--mdnsHabilitar descubrimiento mDNSfalse
--mdns-domainNombre de dominio personalizado para el servicio mDNSdropstone.local
--corsOrígenes de navegador adicionales a permitir[]

--cors se puede pasar varias veces:

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

Autenticación

Establece DROPSTONE_SERVER_PASSWORD para proteger el servidor con autenticación básica HTTP. El nombre de usuario por defecto es dropstone, o establece DROPSTONE_SERVER_USERNAME para cambiarlo. Esto se aplica tanto a dropstone serve como a dropstone web.

DROPSTONE_SERVER_PASSWORD=tu-contraseña dropstone serve

Credenciales del agente

DROPSTONE_SERVER_PASSWORD protege el servidor en sí. No le indica al agente cómo conectarse a Dropstone. En una máquina desatendida no hay una cuenta iniciada de la que heredar, así que pasa una clave de API a través de la configuración del proveedor:

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

baseURL es importante. Las claves de API se aceptan en /api/v1, no en /v1, y una clave enviada a /v1 se rechaza con 403 Invalid token format. Please log in again. Establécelo aquí en lugar de a través de DROPSTONE_BASE_URL, que también se usa para construir los endpoints de cuenta, uso y memoria, y los romperá si lo apuntas a una ruta con versión.

Genera una clave en dropstone.io/dashboard/settings.

Note

El agente build por defecto pregunta antes de cada llamada a una herramienta. Nada aquí puede responder a esa solicitud, por lo que la petición se queda colgada en lugar de fallar. O envía "agent": "accept all" o establece una lista de permisos explícita. Consulta Permisos.


Enviar una solicitud

POST /session/:id/message requiere tanto agent como model. Si se omite model, no se resuelve ningún valor por defecto: el turno devuelve 200 con un cuerpo vacío y no se ejecuta nada.

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 turno que falla aún devuelve 200. El motivo está en data.info.error, no a nivel de transporte, así que revisa ese campo en lugar de confiar en el código de estado.


Cómo funciona

dropstone serve expone las capacidades de Dropstone a través de un endpoint HTTP OpenAPI 3.1. El mismo endpoint se usa para generar el SDK.

Usa el servidor cuando quieras controlar Dropstone programáticamente: desde un script, una canalización de CI o una integración propia. La sesión interactiva y el servidor son independientes. Ejecutar dropstone serve inicia un servidor independiente nuevo, sin importar si tienes una sesión interactiva abierta.

Puedes cambiar la dirección de enlace con las banderas --hostname y --port.


Especificación

El servidor publica una especificación OpenAPI 3.1 que se puede ver en:

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

Por ejemplo, http://localhost:4096/doc. Usa la especificación para generar clientes o inspeccionar los tipos de solicitud y respuesta. O mírala en un explorador de Swagger.


APIs

El servidor de Dropstone expone las siguientes APIs.


Global

MétodoRutaDescripciónRespuesta
GET/global/healthObtener salud y versión del servidor{ healthy: true, version: string }
GET/global/eventObtener eventos globales (flujo SSE)Flujo de eventos

Proyecto

MétodoRutaDescripciónRespuesta
GET/projectListar todos los proyectosProject[]
GET/project/currentObtener el proyecto actualProject

Ruta y VCS

MétodoRutaDescripciónRespuesta
GET/pathObtener la ruta actualPath
GET/vcsObtener información de VCS para el proyecto actualVcsInfo

Configuración

MétodoRutaDescripciónRespuesta
GET/configObtener información de configuraciónConfig
PATCH/configActualizar configuraciónConfig

Sesiones

MétodoRutaDescripciónNotas
GET/sessionListar todas las sesionesDevuelve Session[]
POST/sessionCrear una nueva sesióncuerpo: { parentID?, title? }, devuelve Session
GET/session/statusObtener estado de sesión para todas las sesionesDevuelve { [sessionID: string]: SessionStatus }
GET/session/:idObtener detalles de la sesiónDevuelve Session
DELETE/session/:idEliminar una sesión y todos sus datosDevuelve boolean
PATCH/session/:idActualizar propiedades de la sesióncuerpo: { title? }, devuelve Session
GET/session/:id/childrenObtener las sesiones hijas de una sesiónDevuelve Session[]
GET/session/:id/todoObtener la lista de tareas de una sesiónDevuelve Todo[]
POST/session/:id/initAnalizar la aplicación y crear AGENTS.mdcuerpo: { messageID, providerID, modelID }, devuelve boolean
POST/session/:id/forkBifurcar una sesión existente en un mensajecuerpo: { messageID? }, devuelve Session
POST/session/:id/abortAbortar una sesión en ejecuciónDevuelve boolean
GET/session/:id/diffObtener el diff de esta sesiónconsulta: messageID?, devuelve FileDiff[]
POST/session/:id/summarizeResumir la sesióncuerpo: { providerID, modelID }, devuelve boolean
POST/session/:id/revertRevertir un mensajecuerpo: { messageID, partID? }, devuelve boolean
POST/session/:id/unrevertRestaurar todos los mensajes revertidosDevuelve boolean
POST/session/:id/permissions/:permissionIDResponder a una solicitud de permisocuerpo: { response, remember? }, devuelve boolean

Mensajes

MétodoRutaDescripciónNotas
GET/session/:id/messageListar mensajes en una sesiónconsulta: limit?, devuelve { info: Message, parts: Part[]}[]
POST/session/:id/messageEnviar un mensaje y esperar respuestacuerpo: { messageID?, model?, agent?, noReply?, system?, tools?, parts }, devuelve { info: Message, parts: Part[]}
GET/session/:id/message/:messageIDObtener detalles del mensajeDevuelve { info: Message, parts: Part[]}
POST/session/:id/prompt_asyncEnviar un mensaje de forma asíncrona (sin espera)cuerpo: igual que /session/:id/message, devuelve 204 No Content
POST/session/:id/commandEjecutar un comando de barracuerpo: { messageID?, agent?, model?, command, arguments }, devuelve { info: Message, parts: Part[]}
POST/session/:id/shellEjecutar un comando de shellcuerpo: { agent, model?, command }, devuelve { info: Message, parts: Part[]}

Comandos

MétodoRutaDescripciónRespuesta
GET/commandListar todos los comandosCommand[]

Archivos

MétodoRutaDescripciónRespuesta
GET/find?pattern=<pat>Buscar texto en archivosMatriz de objetos de coincidencia con path, lines, line_number, absolute_offset, submatches
GET/find/file?query=<q>Buscar archivos y directorios por nombrestring[] (rutas)
GET/find/symbol?query=<q>Buscar símbolos del espacio de trabajoSymbol[]
GET/file?path=<path>Listar archivos y directoriosFileNode[]
GET/file/content?path=<p>Leer un archivoFileContent
GET/file/statusObtener estado de los archivos rastreadosFile[]

Parámetros de consulta de /find/file

  • query (obligatorio): cadena de búsqueda (coincidencia difusa)
  • type (opcional): limitar resultados a "file" o "directory"
  • directory (opcional): anular la raíz del proyecto para la búsqueda
  • limit (opcional): máximo de resultados (1–200)
  • dirs (opcional): bandera heredada ("false" devuelve solo archivos)

LSP, Formateadores y MCP

MétodoRutaDescripciónRespuesta
GET/lspObtener estado del servidor LSPLSPStatus[]
GET/formatterObtener estado del formateadorFormatterStatus[]
GET/mcpObtener estado del servidor MCP{ [name: string]: MCPStatus }
POST/mcpAñadir servidor MCP dinámicamentecuerpo: { name, config }, devuelve objeto de estado MCP

Agentes

MétodoRutaDescripciónRespuesta
GET/agentListar todos los agentes disponiblesAgent[]

Registro

MétodoRutaDescripciónRespuesta
POST/logEscribir entrada de registro. Cuerpo: { service, level, message, extra? }boolean

Autenticación

MétodoRutaDescripciónRespuesta
PUT/auth/:idEstablecer credenciales de autenticación para el destino dado.boolean

Eventos

MétodoRutaDescripciónRespuesta
GET/eventFlujo de eventos enviados por el servidor. El primer evento es server.connected, luego eventos del busFlujo de eventos enviados por el servidor

Documentación

MétodoRutaDescripciónRespuesta
GET/docEspecificación OpenAPI 3.1Página HTML con especificación OpenAPI
Ctrl+I