Dropstone CLI

Сервер

Взаимодействие с сервером Dropstone по HTTP.

Команда dropstone serve запускает автономный HTTP-сервер, который предоставляет конечную точку OpenAPI, которую может использовать клиент Dropstone.


Использование

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

Параметры

ФлагОписаниеПо умолчанию
--portПорт для прослушивания4096
--hostnameИмя хоста для прослушивания127.0.0.1
--mdnsВключить обнаружение mDNSfalse
--mdns-domainПользовательское доменное имя для службы mDNSdropstone.local
--corsДополнительные источники браузера для разрешения[]

--cors можно передавать несколько раз:

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

Аутентификация

Установите DROPSTONE_SERVER_PASSWORD, чтобы защитить сервер с помощью базовой HTTP-аутентификации. Имя пользователя по умолчанию — dropstone, либо установите DROPSTONE_SERVER_USERNAME, чтобы переопределить его. Это применимо как к dropstone serve, так и к dropstone web.

DROPSTONE_SERVER_PASSWORD=your-password dropstone serve

Учетные данные агента

DROPSTONE_SERVER_PASSWORD защищает сам сервер. Он не сообщает агенту, как связаться с Dropstone. На машине без присмотра нет авторизованной учетной записи для наследования, поэтому передайте ключ API через конфигурацию провайдера:

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

baseURL имеет значение. Ключи API принимаются по адресу /api/v1, а не /v1, и ключ, отправленный на /v1, отклоняется с ошибкой 403 Invalid token format. Please log in again. Установите его здесь, а не через DROPSTONE_BASE_URL, который также используется для создания конечных точек учетной записи, использования и памяти, и сломает их, если вы укажете его на версионированный путь.

Сгенерируйте ключ на dropstone.io/dashboard/settings.

Note

Агент build по умолчанию спрашивает перед каждым вызовом инструмента. Здесь ничто не может ответить на этот запрос, поэтому запрос зависает, а не завершается ошибкой. Либо отправьте "agent": "accept all", либо задайте явный список разрешений. См. Разрешения.


Отправка запроса

POST /session/:id/message требует оба параметра agent и model. Если опустить model, значение по умолчанию не определяется: ход возвращает 200 с пустым телом, и ничего не выполняется.

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

Ход, завершившийся ошибкой, всё равно возвращает 200. Причина находится в data.info.error, а не на транспортном уровне, поэтому проверяйте это поле, а не полагайтесь на код состояния.


Как это работает

dropstone serve предоставляет возможности Dropstone через конечную точку HTTP OpenAPI 3.1. Та же конечная точка используется для генерации SDK.

Используйте сервер, когда хотите управлять Dropstone программно: из скрипта, конвейера CI или собственной интеграции. Интерактивный сеанс и сервер независимы. Запуск dropstone serve создает новый автономный сервер независимо от того, открыт ли у вас интерактивный сеанс.

Вы можете переопределить адрес привязки с помощью флагов --hostname и --port.


Спецификация

Сервер публикует спецификацию OpenAPI 3.1, которую можно просмотреть по адресу:

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

Например, http://localhost:4096/doc. Используйте спецификацию для генерации клиентов или проверки типов запросов и ответов. Или просмотрите её в обозревателе Swagger.


API

Сервер Dropstone предоставляет следующие API.


Глобальные

МетодПутьОписаниеОтвет
GET/global/healthПолучить состояние и версию сервера{ healthy: true, version: string }
GET/global/eventПолучить глобальные события (поток SSE)Поток событий

Проект

МетодПутьОписаниеОтвет
GET/projectСписок всех проектовProject[]
GET/project/currentПолучить текущий проектProject

Путь и VCS

МетодПутьОписаниеОтвет
GET/pathПолучить текущий путьPath
GET/vcsПолучить информацию VCS для текущего проектаVcsInfo

Конфигурация

МетодПутьОписаниеОтвет
GET/configПолучить информацию о конфигурацииConfig
PATCH/configОбновить конфигурациюConfig

Сеансы

МетодПутьОписаниеПримечания
GET/sessionСписок всех сеансовВозвращает Session[]
POST/sessionСоздать новый сеанстело: { parentID?, title? }, возвращает Session
GET/session/statusПолучить статус сеансов для всех сеансовВозвращает { [sessionID: string]: SessionStatus }
GET/session/:idПолучить сведения о сеансеВозвращает Session
DELETE/session/:idУдалить сеанс и все его данныеВозвращает boolean
PATCH/session/:idОбновить свойства сеансатело: { title? }, возвращает Session
GET/session/:id/childrenПолучить дочерние сеансы сеансаВозвращает Session[]
GET/session/:id/todoПолучить список задач для сеансаВозвращает Todo[]
POST/session/:id/initПроанализировать приложение и создать AGENTS.mdтело: { messageID, providerID, modelID }, возвращает boolean
POST/session/:id/forkРазветвить существующий сеанс на сообщениитело: { messageID? }, возвращает Session
POST/session/:id/abortПрервать выполняющийся сеансВозвращает boolean
GET/session/:id/diffПолучить diff для этого сеансазапрос: messageID?, возвращает FileDiff[]
POST/session/:id/summarizeСуммировать сеанстело: { providerID, modelID }, возвращает boolean
POST/session/:id/revertОткатить сообщениетело: { messageID, partID? }, возвращает boolean
POST/session/:id/unrevertВосстановить все откаченные сообщенияВозвращает boolean
POST/session/:id/permissions/:permissionIDОтветить на запрос разрешениятело: { response, remember? }, возвращает boolean

Сообщения

МетодПутьОписаниеПримечания
GET/session/:id/messageСписок сообщений в сеансезапрос: limit?, возвращает { info: Message, parts: Part[]}[]
POST/session/:id/messageОтправить сообщение и дождаться ответатело: { messageID?, model?, agent?, noReply?, system?, tools?, parts }, возвращает { info: Message, parts: Part[]}
GET/session/:id/message/:messageIDПолучить сведения о сообщенииВозвращает { info: Message, parts: Part[]}
POST/session/:id/prompt_asyncОтправить сообщение асинхронно (без ожидания)тело: как у /session/:id/message, возвращает 204 No Content
POST/session/:id/commandВыполнить слэш-командутело: { messageID?, agent?, model?, command, arguments }, возвращает { info: Message, parts: Part[]}
POST/session/:id/shellВыполнить команду оболочкитело: { agent, model?, command }, возвращает { info: Message, parts: Part[]}

Команды

МетодПутьОписаниеОтвет
GET/commandСписок всех командCommand[]

Файлы

МетодПутьОписаниеОтвет
GET/find?pattern=<pat>Поиск текста в файлахМассив объектов совпадений с path, lines, line_number, absolute_offset, submatches
GET/find/file?query=<q>Поиск файлов и каталогов по имениstring[] (пути)
GET/find/symbol?query=<q>Поиск символов рабочей областиSymbol[]
GET/file?path=<path>Список файлов и каталоговFileNode[]
GET/file/content?path=<p>Чтение файлаFileContent
GET/file/statusПолучить статус отслеживаемых файловFile[]

Параметры запроса /find/file

  • query (обязательный): строка поиска (нечеткое совпадение)
  • type (необязательный): ограничить результаты "file" или "directory"
  • directory (необязательный): переопределить корень проекта для поиска
  • limit (необязательный): максимум результатов (1–200)
  • dirs (необязательный): устаревший флаг ("false" возвращает только файлы)

LSP, форматтеры и MCP

МетодПутьОписаниеОтвет
GET/lspПолучить статус LSP-сервераLSPStatus[]
GET/formatterПолучить статус форматтераFormatterStatus[]
GET/mcpПолучить статус MCP-сервера{ [name: string]: MCPStatus }
POST/mcpДобавить MCP-сервер динамическитело: { name, config }, возвращает объект статуса MCP

Агенты

МетодПутьОписаниеОтвет
GET/agentСписок всех доступных агентовAgent[]

Журналирование

МетодПутьОписаниеОтвет
POST/logЗаписать запись журнала. Тело: { service, level, message, extra? }boolean

Аутентификация

МетодПутьОписаниеОтвет
PUT/auth/:idУстановить учетные данные аутентификации для указанной цели.boolean

События

МетодПутьОписаниеОтвет
GET/eventПоток событий, отправляемых сервером. Первое событие — server.connected, затем события шиныПоток событий, отправляемых сервером

Документация

МетодПутьОписаниеОтвет
GET/docСпецификация OpenAPI 3.1HTML-страница со спецификацией OpenAPI
Ctrl+I