Усилить безопасность и надёжность выполнения операций
CI / Rust Checks (push) Successful in 5m7s
CI / UI Checks (push) Successful in 4s
CI / Deployment Manifests (push) Successful in 3s
CI / Frontend E2E (push) Successful in 3m9s
CI / Deploy (push) Successful in 1m41s

This commit is contained in:
2026-07-11 14:08:07 +03:00
parent 626f2845e2
commit 8318e4b560
40 changed files with 1343 additions and 185 deletions
+10
View File
@@ -199,6 +199,16 @@ curl https://crank.example.com/mcp/v1/default/sales/approvals/<approval_id>/appr
После подтверждения Crank выполняет исходный REST-запрос с тем payload, который был сохранен при первом `tools/call`. Если запрос прошел успешно, заявка получает статус `completed`, а результат сохраняется в `response_payload`. Если upstream вернул ошибку, заявка получает статус `failed`, а в `response_payload` сохраняется код и текст ошибки.
Перед обращением к upstream заявка атомарно переходит в статус `executing`. Если
`mcp-server` завершился во время выполнения, другой рабочий цикл повторно захватит
заявку после истечения аренды. Для изменяющих операций рекомендуется настроить
`execution_config.idempotency` и передавать поддерживаемый upstream заголовок
идемпотентности: универсальный HTTP-клиент не может гарантировать ровно одно внешнее
побочное действие при падении процесса между ответом upstream и записью результата.
Повторный `tools/call` с теми же агентом, операцией, версией и JSON-аргументами
возвращает уже существующую активную заявку вместо создания дубликата.
Отклонение:
```bash
+30
View File
@@ -85,6 +85,32 @@ Demo seed идемпотентный: повторный старт не соз
Эти настройки ограничивают параллельное выполнение операций и служебных задач.
## Исходящие HTTP-запросы
По умолчанию Crank обращается только к публичным IP-адресам. Локальные, частные,
служебные и link-local сети блокируются после разрешения DNS-имени. Автоматические
HTTP-перенаправления и системный прокси отключены.
- `CRANK_OUTBOUND_ALLOWED_HOSTS` - исключения для разрешённых внутренних узлов через
запятую. Публичные узлы разрешены независимо от этого списка. Для внутреннего API
укажите его имя или IP явно. Поддерживаются маски вида `*.example.internal`.
- `CRANK_OUTBOUND_DENIED_HOSTS` - список узлов, запрещённых независимо от списка
разрешённых.
- `CRANK_OUTBOUND_MAX_RESPONSE_BYTES` - максимальный размер ответа внешнего API;
по умолчанию `4194304` байт.
Пример доступа только к двум внутренним API:
```env
CRANK_OUTBOUND_ALLOWED_HOSTS=crm.example.internal,192.168.1.50
CRANK_OUTBOUND_DENIED_HOSTS=metadata.example.internal
CRANK_OUTBOUND_MAX_RESPONSE_BYTES=4194304
```
Одинаковые значения должны передаваться в `admin-api` и `mcp-server`: первый
проверяет операции при сохранении, второй применяет политику при каждом соединении.
Максимальный `execution_config.timeout_ms` операции равен `300000` мс.
## Кэш
По умолчанию Crank работает без внешнего кэша:
@@ -107,6 +133,10 @@ CRANK_CACHE_DEFAULT_TTL_MS=60000
- `CRANK_LOG_LEVEL` - уровень логирования, например `info`, `debug`, `warn`.
Поля с паролями, токенами, ключами и заголовками авторизации удаляются из снимков
запросов и ответов. Один снимок ограничен 16 КиБ; более крупное значение хранится в
усечённом виде с исходным размером.
Пример:
```env