POST /api/projects/:id/doc-content/generate-all — Сгенерировать весь документ (SSE)
Сгенерировано из матриц + кода. Правки вносить в источники (
docs/matrices/,server/routes/), не здесь.
| Поле | Значение |
|---|---|
| HTTP | POST /api/projects/:id/doc-content/generate-all |
| Auth | optionalAuth, requireProjectAccess — гость + авторизованный, доступ к проекту (read/write) |
| Scope токена | read_write |
| PG-функции | api.get_block_prerequisites_content, api.upsert_block_doc_content |
| Таблицы | block_doc_content, block_doc_content_history, project_edge, project_node |
| SRM | SRM-200, SRM-201 |
| RP (права) | RP-113, RP-114 |
| Файл роута | server/routes/projects.js |
| Статус | done |
Аргументы запроса (best-effort из хендлера; путь-параметры опущены):
| Аргумент | Где | Обяз. | Заметка |
|---|---|---|---|
quality | query | подтвердить | |
resume | query | подтвердить |
Коды ответов/ошибок (из хендлера): 403 (+ 200) — уточнить причины вручную
Для человека
Как открыть: откройте проект → вкладка «Doc» (▧) → в верхней панели документа нажмите «Сгенерировать весь документ». Запросит подтверждение (все блоки будут перегенерированы), затем пойдёт по блокам один за другим.
«Красная кнопка»: пишет текст сразу всему документу. Блоки генерируются не в произвольном порядке, а по графу зависимостей (топологическая сортировка) — каждый следующий блок получает в контекст уже готовый текст своих предшественников, так что документ выходит связным от начала до конца.
Что вы видите: индикатор прогресса «блок X из Y» и текст, который течёт по текущему блоку. Перед запуском снимается снимок документа, а старые тексты блоков уходят в историю — откатить можно. Процесс можно «Остановить»: уже готовые блоки сохранены, текущий — частично; и потом «Продолжить генерацию» — она начнёт с первого незаполненного блока, готовые не трогает.
Полная генерация — действие владельца проекта. Менеджер спейса и админ организации не запускают её за владельца. Точные правила — RP-113, RP-114.
Для агента
Запись — токен со scope read_write (см. Конвенции); под ролью владельца, write-доступ к проекту обязателен. Ответ — поток text/event-stream (SSE).
Параметры (query):
| Параметр | Значения | Назначение |
|---|---|---|
resume | 1 | Продолжить с первого незаполненного блока, не трогая уже готовые (кнопка «Продолжить») |
quality | fast (дефолт) · pro | pro — несколько вариантов на блок с выбором лучшего, дольше и качественнее |
Пример запроса (-N — потоковый ответ):
curl -N -X POST "https://specbuilder.vnimanie.ai/api/projects/a1b2c3d4-.../doc-content/generate-all?quality=fast" \ -H "Authorization: Bearer tak_..."Пример потока (события — из server/services/docGenerator.js):
event: progressdata: {"total":6,"completed":0,"phase":"start"}
event: progressdata: {"total":6,"completed":0,"current":"node-1","currentLabel":"Бизнес-цель"}
event: chunkdata: {"nodeId":"node-1","text":"## Контекст\n..."}
event: saveddata: {"nodeId":"node-1","version":2,"contentLength":1240}
event: progressdata: {"total":6,"completed":1,"current":"node-3","currentLabel":"Сбор данных"}
event: all_donedata: {"total":6}progress отмечает переход к следующему блоку (поля completed/total/current); внутри блока идут те же chunk/saved, что и в генерации одного блока. Завершение всего прогона — событие all_done. Если обнаружены циклы в графе, придёт warning (порядок может быть неоптимальным), есть и потолок на число блоков за прогон. Обрыв соединения = AbortController на сервере: запускается пауза, придёт paused с числом готовых блоков — затем поток можно возобновить с resume=1. Ошибки отдельных блоков — block_error, общий сбой — error. Поток — SSE, не JSON и не Markdown.