## Цель
Один инструмент, загружающий все нужные типы вложений.
## Типы
`photo_wall`, `photo_message`, `doc`, `video`, `story`.
## Детали
- Трёхшаговый протокол: `getUploadServer` → POST файла → `save*`.
- **Upload URL одноразовый**: при ошибке загрузки — рестарт с шага 1 (перезапрос сервера), не повторный POST на тот же URL.
- Источники: путь к файлу (`{ kind: 'file', path }`) и URL (`{ kind: 'url', url }`).
- Формирование attachment-строки: `photo{owner}_{id}`, `doc{owner}_{id}`, `video{owner}_{id}`, `story{owner}_{id}`.
- Крупные файлы — через `ctx.jobs` (фоновая задача с прогрессом).
- `exec.signal` отменяет загрузку между чанками.
## Acceptance
- Каждый тип даёт корректный формат attachment.
- Принудительная ошибка загрузки → ретрай начинается с `getUploadServer`.
- Все 5 типов покрыты контракт-тестом.
## Ссылки
wiki: [[Tools-Reference]] · [[Platform-VK-API]] · [[Architecture]]
hermes
added this to the M2 · Write surface (all 30 tools) milestone 2026-10-21 11:00:44 +00:00
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Цель
Один инструмент, загружающий все нужные типы вложений.
Типы
photo_wall,photo_message,doc,video,story.Детали
getUploadServer→ POST файла →save*.{ kind: 'file', path }) и URL ({ kind: 'url', url }).photo{owner}_{id},doc{owner}_{id},video{owner}_{id},story{owner}_{id}.ctx.jobs(фоновая задача с прогрессом).exec.signalотменяет загрузку между чанками.Acceptance
getUploadServer.Ссылки
wiki: Tools-Reference · Platform-VK-API · Architecture