update sandbox control docs
This commit is contained in:
parent
312b657e49
commit
db1fe6d630
1 changed files with 53 additions and 5 deletions
58
README.md
58
README.md
|
|
@ -18,12 +18,15 @@
|
||||||
|
|
||||||
Текущий sandbox MVP покрывает:
|
Текущий sandbox MVP покрывает:
|
||||||
- `GET /api/v1/health`
|
- `GET /api/v1/health`
|
||||||
- `POST /api/v1/create` с `chat_id: UUID`
|
- `POST /api/v1/create` с `chat_id`, `agent_id` и `volume_host_path`
|
||||||
|
- `DELETE /api/v1/sandboxes/{chat_id}` для удаления активной sandbox
|
||||||
- одну активную sandbox на чат
|
- одну активную sandbox на чат
|
||||||
- reuse активной sandbox до истечения TTL
|
- reuse активной sandbox до истечения TTL при совпадении `agent_id` и `volume_host_path`
|
||||||
|
- возврат Docker-network endpoint `ip:port` после создания или reuse sandbox
|
||||||
- cleanup просроченных sandbox в фоне
|
- cleanup просроченных sandbox в фоне
|
||||||
- startup reconciliation по Docker labels после рестарта сервиса
|
- startup reconciliation по Docker labels после рестарта сервиса
|
||||||
- chat mount `rw`, dependencies mount `ro`, lambda-tools mount `ro`
|
- chat mount `rw`, request volume mount `rw`, dependencies mount `ro`, lambda-tools mount `ro`
|
||||||
|
- прокидывание `AGENT_ID` в env sandbox-контейнера
|
||||||
- логи, метрики и трейсы через порты `Logger`, `Metrics`, `Tracer`
|
- логи, метрики и трейсы через порты `Logger`, `Metrics`, `Tracer`
|
||||||
|
|
||||||
Пока вне scope:
|
Пока вне scope:
|
||||||
|
|
@ -81,11 +84,15 @@ APP_API_TOKEN=local-api-token APP_SIGNING_KEY=local-signing-key make run
|
||||||
- Docker daemon должен быть доступен по `docker.base_url`
|
- Docker daemon должен быть доступен по `docker.base_url`
|
||||||
- образ `sandbox.image` должен существовать локально
|
- образ `sandbox.image` должен существовать локально
|
||||||
- директории `sandbox.dependencies_host_path` и `sandbox.lambda_tools_host_path` должны существовать
|
- директории `sandbox.dependencies_host_path` и `sandbox.lambda_tools_host_path` должны существовать
|
||||||
|
- Docker network `sandbox.network_name` должен существовать заранее
|
||||||
|
- `volume_host_path` из request должен быть абсолютным host path
|
||||||
|
|
||||||
В дефолтном `config/app.yaml` это значит:
|
В дефолтном `config/app.yaml` это значит:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
mkdir -p var/sandbox/dependencies var/sandbox/lambda-tools
|
mkdir -p var/sandbox/dependencies var/sandbox/lambda-tools
|
||||||
|
mkdir -p /tmp/master-volume
|
||||||
|
docker network inspect sandbox >/dev/null || docker network create sandbox
|
||||||
docker image inspect ai-agent:latest >/dev/null
|
docker image inspect ai-agent:latest >/dev/null
|
||||||
```
|
```
|
||||||
|
|
||||||
|
|
@ -105,7 +112,11 @@ curl http://127.0.0.1:8123/api/v1/health
|
||||||
```bash
|
```bash
|
||||||
curl -X POST http://127.0.0.1:8123/api/v1/create \
|
curl -X POST http://127.0.0.1:8123/api/v1/create \
|
||||||
-H 'Content-Type: application/json' \
|
-H 'Content-Type: application/json' \
|
||||||
-d '{"chat_id":"11111111-1111-1111-1111-111111111111"}'
|
-d '{
|
||||||
|
"chat_id":"11111111-1111-1111-1111-111111111111",
|
||||||
|
"agent_id":"agent-local",
|
||||||
|
"volume_host_path":"/tmp/master-volume"
|
||||||
|
}'
|
||||||
```
|
```
|
||||||
|
|
||||||
Пример ответа:
|
Пример ответа:
|
||||||
|
|
@ -114,12 +125,41 @@ curl -X POST http://127.0.0.1:8123/api/v1/create \
|
||||||
{
|
{
|
||||||
"session_id": "3701cfe3-e05e-48af-8385-442dcd954ca2",
|
"session_id": "3701cfe3-e05e-48af-8385-442dcd954ca2",
|
||||||
"chat_id": "11111111-1111-1111-1111-111111111111",
|
"chat_id": "11111111-1111-1111-1111-111111111111",
|
||||||
|
"agent_id": "agent-local",
|
||||||
|
"volume_host_path": "/tmp/master-volume",
|
||||||
"container_id": "64d839c6007de9396ee08ad4af4a22a59a6410ec5f4892a9277a87eb49c3ff5d",
|
"container_id": "64d839c6007de9396ee08ad4af4a22a59a6410ec5f4892a9277a87eb49c3ff5d",
|
||||||
|
"endpoint": {
|
||||||
|
"ip": "172.18.0.5",
|
||||||
|
"port": 8000
|
||||||
|
},
|
||||||
"status": "running",
|
"status": "running",
|
||||||
"expires_at": "2026-04-02T21:11:38.292893Z"
|
"expires_at": "2026-04-02T21:11:38.292893Z"
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
|
Повторный create для того же `chat_id` вернет существующую sandbox только если совпадают `agent_id` и canonical `volume_host_path`.
|
||||||
|
Если параметры отличаются, API вернет `409 sandbox_conflict`.
|
||||||
|
|
||||||
|
Удаление sandbox по chat:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
curl -X DELETE http://127.0.0.1:8123/api/v1/sandboxes/11111111-1111-1111-1111-111111111111
|
||||||
|
```
|
||||||
|
|
||||||
|
Пример ответа:
|
||||||
|
|
||||||
|
```json
|
||||||
|
{
|
||||||
|
"chat_id": "11111111-1111-1111-1111-111111111111",
|
||||||
|
"result": "deleted",
|
||||||
|
"session_id": "3701cfe3-e05e-48af-8385-442dcd954ca2",
|
||||||
|
"container_id": "64d839c6007de9396ee08ad4af4a22a59a6410ec5f4892a9277a87eb49c3ff5d"
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
Если активной sandbox нет, `result` будет `not_found`.
|
||||||
|
Возвращенный `endpoint.ip` доступен из контейнеров, подключенных к той же Docker network.
|
||||||
|
|
||||||
## Запуск через Docker Compose
|
## Запуск через Docker Compose
|
||||||
|
|
||||||
Для локального smoke-run есть `docker-compose.yml`.
|
Для локального smoke-run есть `docker-compose.yml`.
|
||||||
|
|
@ -153,6 +193,7 @@ make compose-down
|
||||||
Важно:
|
Важно:
|
||||||
- в `config/docker-compose.yml` сейчас для smoke-проверки стоит `sandbox.image: nginx:1.27-alpine`
|
- в `config/docker-compose.yml` сейчас для smoke-проверки стоит `sandbox.image: nginx:1.27-alpine`
|
||||||
- для реального agent runtime замени `sandbox.image` на образ своего sandbox/agent контейнера
|
- для реального agent runtime замени `sandbox.image` на образ своего sandbox/agent контейнера
|
||||||
|
- sandbox подключается к Docker network из `sandbox.network_name`; внешний контейнер-интеграцию нужно подключить к этой же сети
|
||||||
- в compose auth env vars нужны для startup config, но текущий MVP API еще не проверяет request token
|
- в compose auth env vars нужны для startup config, но текущий MVP API еще не проверяет request token
|
||||||
|
|
||||||
## Как конфигурировать
|
## Как конфигурировать
|
||||||
|
|
@ -172,7 +213,7 @@ make compose-down
|
||||||
- `APP_API_TOKEN`
|
- `APP_API_TOKEN`
|
||||||
- `APP_SIGNING_KEY`
|
- `APP_SIGNING_KEY`
|
||||||
|
|
||||||
Сейчас это startup config, а не активная request auth для `/api/v1/create` и `/api/v1/health`.
|
Сейчас это startup config, а не активная request auth для `/api/v1/create`, `/api/v1/sandboxes/{chat_id}` и `/api/v1/health`.
|
||||||
То есть в текущем MVP токен не нужно передавать в HTTP headers для вызова этих endpoint.
|
То есть в текущем MVP токен не нужно передавать в HTTP headers для вызова этих endpoint.
|
||||||
|
|
||||||
### Основные секции YAML
|
### Основные секции YAML
|
||||||
|
|
@ -215,6 +256,8 @@ make compose-down
|
||||||
|
|
||||||
#### Sandbox
|
#### Sandbox
|
||||||
- `APP_SANDBOX_IMAGE`
|
- `APP_SANDBOX_IMAGE`
|
||||||
|
- `APP_SANDBOX_NETWORK_NAME`
|
||||||
|
- `APP_SANDBOX_AGENT_SERVICE_PORT`
|
||||||
- `APP_SANDBOX_TTL_SECONDS`
|
- `APP_SANDBOX_TTL_SECONDS`
|
||||||
- `APP_SANDBOX_CLEANUP_INTERVAL_SECONDS`
|
- `APP_SANDBOX_CLEANUP_INTERVAL_SECONDS`
|
||||||
- `APP_SANDBOX_CHATS_ROOT`
|
- `APP_SANDBOX_CHATS_ROOT`
|
||||||
|
|
@ -223,6 +266,7 @@ make compose-down
|
||||||
- `APP_SANDBOX_CHAT_MOUNT_PATH`
|
- `APP_SANDBOX_CHAT_MOUNT_PATH`
|
||||||
- `APP_SANDBOX_DEPENDENCIES_MOUNT_PATH`
|
- `APP_SANDBOX_DEPENDENCIES_MOUNT_PATH`
|
||||||
- `APP_SANDBOX_LAMBDA_TOOLS_MOUNT_PATH`
|
- `APP_SANDBOX_LAMBDA_TOOLS_MOUNT_PATH`
|
||||||
|
- `APP_SANDBOX_VOLUME_MOUNT_PATH`
|
||||||
|
|
||||||
#### Security
|
#### Security
|
||||||
- `APP_API_TOKEN_HEADER`
|
- `APP_API_TOKEN_HEADER`
|
||||||
|
|
@ -233,6 +277,8 @@ make compose-down
|
||||||
|
|
||||||
- `docker.base_url` — адрес Docker daemon
|
- `docker.base_url` — адрес Docker daemon
|
||||||
- `sandbox.image` — образ sandbox контейнера
|
- `sandbox.image` — образ sandbox контейнера
|
||||||
|
- `sandbox.network_name` — Docker network для sandbox и интеграций
|
||||||
|
- `sandbox.agent_service_port` — порт agent service внутри sandbox, возвращается в response endpoint
|
||||||
- `sandbox.ttl_seconds` — TTL sandbox
|
- `sandbox.ttl_seconds` — TTL sandbox
|
||||||
- `sandbox.cleanup_interval_seconds` — частота cleanup loop
|
- `sandbox.cleanup_interval_seconds` — частота cleanup loop
|
||||||
- `sandbox.chats_root` — корень chat directories
|
- `sandbox.chats_root` — корень chat directories
|
||||||
|
|
@ -241,6 +287,7 @@ make compose-down
|
||||||
- `sandbox.chat_mount_path` — путь внутри sandbox для chat volume
|
- `sandbox.chat_mount_path` — путь внутри sandbox для chat volume
|
||||||
- `sandbox.dependencies_mount_path` — путь внутри sandbox для dependency cache
|
- `sandbox.dependencies_mount_path` — путь внутри sandbox для dependency cache
|
||||||
- `sandbox.lambda_tools_mount_path` — путь внутри sandbox для lambda-tools
|
- `sandbox.lambda_tools_mount_path` — путь внутри sandbox для lambda-tools
|
||||||
|
- `sandbox.volume_mount_path` — путь внутри sandbox для request `volume_host_path`
|
||||||
|
|
||||||
## Основные команды
|
## Основные команды
|
||||||
|
|
||||||
|
|
@ -278,6 +325,7 @@ make compose-down
|
||||||
- [006 MVP Docker Sandbox Orchestration](docs/006-mvp-docker-sandbox-orchestration.md)
|
- [006 MVP Docker Sandbox Orchestration](docs/006-mvp-docker-sandbox-orchestration.md)
|
||||||
- [007 Startup Sandbox Reconciliation](docs/007-startup-sandbox-reconciliation.md)
|
- [007 Startup Sandbox Reconciliation](docs/007-startup-sandbox-reconciliation.md)
|
||||||
- [008 Sandbox Lifecycle Observability](docs/008-sandbox-lifecycle-observability.md)
|
- [008 Sandbox Lifecycle Observability](docs/008-sandbox-lifecycle-observability.md)
|
||||||
|
- [009 Sandbox HTTP Control and Runtime Params](docs/009-sandbox-http-control-and-runtime-params.md)
|
||||||
|
|
||||||
## Для AI-агента
|
## Для AI-агента
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue