Dropstone CLI

Servidor

Interaja com o servidor dropstone via HTTP.

O comando dropstone serve executa um servidor HTTP headless que expõe um endpoint OpenAPI que um cliente Dropstone pode usar.


Uso

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

Opções

BandeiraDescriçãoPadrão
--portPorta para escutar4096
--hostnameHostname para escutar127.0.0.1
--mdnsAtivar descoberta mDNSfalse
--mdns-domainNome de domínio personalizado para o serviço mDNSdropstone.local
--corsOrigens de navegador adicionais a permitir[]

--cors pode ser passado várias vezes:

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

Autenticação

Defina DROPSTONE_SERVER_PASSWORD para proteger o servidor com autenticação básica HTTP. O nome de usuário padrão é dropstone, ou defina DROPSTONE_SERVER_USERNAME para substituí-lo. Isso se aplica tanto a dropstone serve quanto a dropstone web.

DROPSTONE_SERVER_PASSWORD=sua-senha dropstone serve

Credenciais do agente

DROPSTONE_SERVER_PASSWORD protege o próprio servidor. Ele não informa ao agente como alcançar o Dropstone. Em uma máquina não supervisionada, não há uma conta conectada para herdar, então passe uma chave de API através da configuração do provedor:

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

baseURL é importante. As chaves de API são aceitas em /api/v1, não em /v1, e uma chave enviada para /v1 é rejeitada com 403 Invalid token format. Please log in again. Defina isso aqui em vez de usar DROPSTONE_BASE_URL, que também é usado para construir os endpoints de conta, uso e memória e os quebrará se você apontá-lo para um caminho versionado.

Gere uma chave em dropstone.io/dashboard/settings.

Note

O agente build padrão pergunta antes de cada chamada de ferramenta. Nada aqui pode responder a esse prompt, então a solicitação fica pendurada em vez de falhar. Envie "agent": "accept all" ou defina uma lista de permissões explícita. Consulte Permissões.


Enviando um prompt

POST /session/:id/message requer tanto agent quanto model. Omitir model não resolve nenhum padrão: o turno retorna 200 com um corpo vazio e nada é executado.

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": "Adicione tratamento de erros a src/index.ts" }]
  }'

Um turno que falha ainda retorna 200. O motivo está em data.info.error, não no nível de transporte, então verifique esse campo em vez de confiar no código de status.


Como funciona

dropstone serve expõe os recursos do Dropstone através de um endpoint HTTP OpenAPI 3.1. O mesmo endpoint é usado para gerar o SDK.

Use o servidor quando quiser controlar o Dropstone programaticamente: a partir de um script, um pipeline de CI ou uma integração própria. A sessão interativa e o servidor são independentes. Executar dropstone serve inicia um novo servidor autônomo, independentemente de você ter uma sessão interativa aberta.

Você pode substituir o endereço de bind com as bandeiras --hostname e --port.


Spec

O servidor publica uma spec OpenAPI 3.1 que pode ser visualizada em:

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

Por exemplo, http://localhost:4096/doc. Use a spec para gerar clientes ou inspecionar tipos de solicitação e resposta. Ou visualize-a em um explorador Swagger.


APIs

O servidor dropstone expõe as seguintes APIs.


Global

MétodoCaminhoDescriçãoResposta
GET/global/healthObter saúde e versão do servidor{ healthy: true, version: string }
GET/global/eventObter eventos globais (stream SSE)Stream de eventos

Projeto

MétodoCaminhoDescriçãoResposta
GET/projectListar todos os projetosProject[]
GET/project/currentObter o projeto atualProject

Caminho e VCS

MétodoCaminhoDescriçãoResposta
GET/pathObter o caminho atualPath
GET/vcsObter informações de VCS para o projeto atualVcsInfo

Config

MétodoCaminhoDescriçãoResposta
GET/configObter informações de configConfig
PATCH/configAtualizar configConfig

Sessões

MétodoCaminhoDescriçãoNotas
GET/sessionListar todas as sessõesRetorna Session[]
POST/sessionCriar uma nova sessãocorpo: { parentID?, title? }, retorna Session
GET/session/statusObter status da sessão para todas as sessõesRetorna { [sessionID: string]: SessionStatus }
GET/session/:idObter detalhes da sessãoRetorna Session
DELETE/session/:idExcluir uma sessão e todos os seus dadosRetorna boolean
PATCH/session/:idAtualizar propriedades da sessãocorpo: { title? }, retorna Session
GET/session/:id/childrenObter sessões filhas de uma sessãoRetorna Session[]
GET/session/:id/todoObter a lista de tarefas de uma sessãoRetorna Todo[]
POST/session/:id/initAnalisar aplicativo e criar AGENTS.mdcorpo: { messageID, providerID, modelID }, retorna boolean
POST/session/:id/forkBifurcar uma sessão existente em uma mensagemcorpo: { messageID? }, retorna Session
POST/session/:id/abortAbortar uma sessão em execuçãoRetorna boolean
GET/session/:id/diffObter o diff desta sessãoconsulta: messageID?, retorna FileDiff[]
POST/session/:id/summarizeResumir a sessãocorpo: { providerID, modelID }, retorna boolean
POST/session/:id/revertReverter uma mensagemcorpo: { messageID, partID? }, retorna boolean
POST/session/:id/unrevertRestaurar todas as mensagens revertidasRetorna boolean
POST/session/:id/permissions/:permissionIDResponder a uma solicitação de permissãocorpo: { response, remember? }, retorna boolean

Mensagens

MétodoCaminhoDescriçãoNotas
GET/session/:id/messageListar mensagens em uma sessãoconsulta: limit?, retorna { info: Message, parts: Part[]}[]
POST/session/:id/messageEnviar uma mensagem e aguardar respostacorpo: { messageID?, model?, agent?, noReply?, system?, tools?, parts }, retorna { info: Message, parts: Part[]}
GET/session/:id/message/:messageIDObter detalhes da mensagemRetorna { info: Message, parts: Part[]}
POST/session/:id/prompt_asyncEnviar uma mensagem assincronamente (sem espera)corpo: igual a /session/:id/message, retorna 204 No Content
POST/session/:id/commandExecutar um comando de barracorpo: { messageID?, agent?, model?, command, arguments }, retorna { info: Message, parts: Part[]}
POST/session/:id/shellExecutar um comando de shellcorpo: { agent, model?, command }, retorna { info: Message, parts: Part[]}

Comandos

MétodoCaminhoDescriçãoResposta
GET/commandListar todos os comandosCommand[]

Arquivos

MétodoCaminhoDescriçãoResposta
GET/find?pattern=<pat>Pesquisar texto em arquivosMatriz de objetos de correspondência com path, lines, line_number, absolute_offset, submatches
GET/find/file?query=<q>Encontrar arquivos e diretórios por nomestring[] (caminhos)
GET/find/symbol?query=<q>Encontrar símbolos do workspaceSymbol[]
GET/file?path=<path>Listar arquivos e diretóriosFileNode[]
GET/file/content?path=<p>Ler um arquivoFileContent
GET/file/statusObter status de arquivos rastreadosFile[]

Parâmetros de consulta de /find/file

  • query (obrigatório): string de pesquisa (correspondência difusa)
  • type (opcional): limitar resultados a "file" ou "directory"
  • directory (opcional): substituir a raiz do projeto para a pesquisa
  • limit (opcional): máximo de resultados (1–200)
  • dirs (opcional): bandeira legada ("false" retorna apenas arquivos)

LSP, Formatadores e MCP

MétodoCaminhoDescriçãoResposta
GET/lspObter status do servidor LSPLSPStatus[]
GET/formatterObter status do formatadorFormatterStatus[]
GET/mcpObter status do servidor MCP{ [name: string]: MCPStatus }
POST/mcpAdicionar servidor MCP dinamicamentecorpo: { name, config }, retorna objeto de status MCP

Agentes

MétodoCaminhoDescriçãoResposta
GET/agentListar todos os agentes disponíveisAgent[]

Registro

MétodoCaminhoDescriçãoResposta
POST/logEscrever entrada de registro. Corpo: { service, level, message, extra? }boolean

Autenticação

MétodoCaminhoDescriçãoResposta
PUT/auth/:idDefinir credenciais de autenticação para o alvo fornecido.boolean

Eventos

MétodoCaminhoDescriçãoResposta
GET/eventStream de eventos enviados pelo servidor. O primeiro evento é server.connected, depois eventos de barramentoStream de eventos enviados pelo servidor

Documentos

MétodoCaminhoDescriçãoResposta
GET/docEspecificação OpenAPI 3.1Página HTML com spec OpenAPI
Ctrl+I