サーバー
HTTP経由でDropstoneサーバーと対話します。
dropstone serve コマンドは、Dropstone クライアントが使用できる OpenAPI エンドポイントを公開するヘッドレス HTTP サーバーを実行します。
使用方法
dropstone serve [--port <number>] [--hostname <string>] [--cors <origin>]
オプション
| フラグ | 説明 | デフォルト |
|---|---|---|
--port | リッスンするポート | 4096 |
--hostname | リッスンするホスト名 | 127.0.0.1 |
--mdns | mDNS ディスカバリーを有効にする | false |
--mdns-domain | mDNS サービスのカスタムドメイン名 | dropstone.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 キーは /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 には 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 の機能を 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> | ファイル内のテキストを検索 | 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 サーバーを動的に追加 | body: { 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.1 スペック | OpenAPI スペックを含む HTML ページ |