Dropstone CLI

サーバー

HTTP経由でDropstoneサーバーと対話します。

dropstone serve コマンドは、Dropstone クライアントが使用できる OpenAPI エンドポイントを公開するヘッドレス HTTP サーバーを実行します。


使用方法

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

オプション

フラグ説明デフォルト
--portリッスンするポート4096
--hostnameリッスンするホスト名127.0.0.1
--mdnsmDNS ディスカバリーを有効にするfalse
--mdns-domainmDNS サービスのカスタムドメイン名dropstone.local
--cors許可する追加のブラウザオリジン[]

--cors は複数回渡すことができます:

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

認証

DROPSTONE_SERVER_PASSWORD を設定して、HTTP ベーシック認証でサーバーを保護します。ユーザー名はデフォルトで dropstone ですが、DROPSTONE_SERVER_USERNAME を設定して上書きできます。これは dropstone servedropstone 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 キーは /v1 ではなく /api/v1 で受け付けられ、/v1 に送信されたキーは 403 Invalid token format. Please log in again. で拒否されます。DROPSTONE_BASE_URL ではなく、ここで設定してください。DROPSTONE_BASE_URL はアカウント、使用量、メモリのエンドポイントの構築にも使用され、バージョン付きパスを指定するとそれらが壊れます。

キーは dropstone.io/dashboard/settings で生成します。

Note

デフォルトの build エージェントは、すべてのツール呼び出しの前に確認を求めます。ここではそのプロンプトに応答できるものがないため、リクエストは失敗せずにハングします。"agent": "accept all" を送信するか、明示的な権限許可リストを設定してください。権限 を参照してください。


プロンプトの送信

POST /session/:id/message には agentmodel の両方が必要です。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 の機能を OpenAPI 3.1 HTTP エンドポイント経由で公開します。同じエンドポイントが SDK の生成にも使用されます。

スクリプト、CI パイプライン、または独自の統合から Dropstone をプログラムで操作したい場合は、サーバーを使用してください。インタラクティブセッションとサーバーは独立しています。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新しいセッションを作成body: { parentID?, title? }Session を返します
GET/session/statusすべてのセッションのセッションステータスを取得{ [sessionID: string]: SessionStatus } を返します
GET/session/:idセッションの詳細を取得Session を返します
DELETE/session/:idセッションとそのすべてのデータを削除boolean を返します
PATCH/session/:idセッションプロパティを更新body: { title? }Session を返します
GET/session/:id/childrenセッションの子セッションを取得Session[] を返します
GET/session/:id/todoセッションの TODO リストを取得Todo[] を返します
POST/session/:id/initアプリを分析し AGENTS.md を作成body: { messageID, providerID, modelID }boolean を返します
POST/session/:id/forkメッセージで既存のセッションをフォークbody: { messageID? }Session を返します
POST/session/:id/abort実行中のセッションを中止boolean を返します
GET/session/:id/diffこのセッションの差分を取得query: messageID?FileDiff[] を返します
POST/session/:id/summarizeセッションを要約body: { providerID, modelID }boolean を返します
POST/session/:id/revertメッセージを元に戻すbody: { messageID, partID? }boolean を返します
POST/session/:id/unrevert元に戻されたすべてのメッセージを復元boolean を返します
POST/session/:id/permissions/:permissionID権限リクエストに応答body: { response, remember? }boolean を返します

メッセージ

メソッドパス説明メモ
GET/session/:id/messageセッション内のメッセージを一覧表示query: limit?{ info: Message, parts: Part[]}[] を返します
POST/session/:id/messageメッセージを送信し、応答を待つbody: { 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メッセージを非同期で送信 (待機なし)body: /session/:id/message と同じ、204 No Content を返します
POST/session/:id/commandスラッシュコマンドを実行body: { messageID?, agent?, model?, command, arguments }{ info: Message, parts: Part[]} を返します
POST/session/:id/shellシェルコマンドを実行body: { agent, model?, command }{ info: Message, parts: Part[]} を返します

コマンド

メソッドパス説明レスポンス
GET/commandすべてのコマンドを一覧表示Command[]

ファイル

メソッドパス説明レスポンス
GET/find?pattern=<pat>ファイル内のテキストを検索pathlinesline_numberabsolute_offsetsubmatches を持つマッチオブジェクトの配列
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/lspLSP サーバーのステータスを取得LSPStatus[]
GET/formatterフォーマッターのステータスを取得FormatterStatus[]
GET/mcpMCP サーバーのステータスを取得{ [name: string]: MCPStatus }
POST/mcpMCP サーバーを動的に追加body: { name, config }、MCP ステータスオブジェクトを返します

エージェント

メソッドパス説明レスポンス
GET/agent利用可能なすべてのエージェントを一覧表示Agent[]

ロギング

メソッドパス説明レスポンス
POST/logログエントリを書き込みます。ボディ: { service, level, message, extra? }boolean

認証

メソッドパス説明レスポンス
PUT/auth/:id指定されたターゲットの認証資格情報を設定します。boolean

イベント

メソッドパス説明レスポンス
GET/eventサーバー送信イベントストリーム。最初のイベントは server.connected、次にバスイベントサーバー送信イベントストリーム

ドキュメント

メソッドパス説明レスポンス
GET/docOpenAPI 3.1 スペックOpenAPI スペックを含む HTML ページ
Ctrl+I