서버
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.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는 OpenAPI 3.1 HTTP 엔드포인트를 통해 Dropstone의 기능을 노출합니다. 동일한 엔드포인트가 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 | 새 세션 생성 | 본문: { 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.1 스펙 | OpenAPI 스펙이 포함된 HTML 페이지 |