Перейти к содержимому

POST /api/projects/:id/doc-content/generate-all — Сгенерировать весь документ (SSE)

Сгенерировано из матриц + кода. Правки вносить в источники (docs/matrices/, server/routes/), не здесь.

ПолеЗначение
HTTPPOST /api/projects/:id/doc-content/generate-all
AuthoptionalAuth, 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
SRMSRM-200, SRM-201
RP (права)RP-113, RP-114
Файл роутаserver/routes/projects.js
Статусdone

Аргументы запроса (best-effort из хендлера; путь-параметры опущены):

АргументГдеОбяз.Заметка
qualityqueryподтвердить
resumequeryподтвердить

Коды ответов/ошибок (из хендлера): 403 (+ 200) — уточнить причины вручную

Для человека

Как открыть: откройте проект → вкладка «Doc» (▧) → в верхней панели документа нажмите «Сгенерировать весь документ». Запросит подтверждение (все блоки будут перегенерированы), затем пойдёт по блокам один за другим.

«Красная кнопка»: пишет текст сразу всему документу. Блоки генерируются не в произвольном порядке, а по графу зависимостей (топологическая сортировка) — каждый следующий блок получает в контекст уже готовый текст своих предшественников, так что документ выходит связным от начала до конца.

Что вы видите: индикатор прогресса «блок X из Y» и текст, который течёт по текущему блоку. Перед запуском снимается снимок документа, а старые тексты блоков уходят в историю — откатить можно. Процесс можно «Остановить»: уже готовые блоки сохранены, текущий — частично; и потом «Продолжить генерацию» — она начнёт с первого незаполненного блока, готовые не трогает.

Полная генерация — действие владельца проекта. Менеджер спейса и админ организации не запускают её за владельца. Точные правила — RP-113, RP-114.

Для агента

Запись — токен со scope read_write (см. Конвенции); под ролью владельца, write-доступ к проекту обязателен. Ответ — поток text/event-stream (SSE).

Параметры (query):

ПараметрЗначенияНазначение
resume1Продолжить с первого незаполненного блока, не трогая уже готовые (кнопка «Продолжить»)
qualityfast (дефолт) · propro — несколько вариантов на блок с выбором лучшего, дольше и качественнее

Пример запроса (-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: progress
data: {"total":6,"completed":0,"phase":"start"}
event: progress
data: {"total":6,"completed":0,"current":"node-1","currentLabel":"Бизнес-цель"}
event: chunk
data: {"nodeId":"node-1","text":"## Контекст\n..."}
event: saved
data: {"nodeId":"node-1","version":2,"contentLength":1240}
event: progress
data: {"total":6,"completed":1,"current":"node-3","currentLabel":"Сбор данных"}
event: all_done
data: {"total":6}

progress отмечает переход к следующему блоку (поля completed/total/current); внутри блока идут те же chunk/saved, что и в генерации одного блока. Завершение всего прогона — событие all_done. Если обнаружены циклы в графе, придёт warning (порядок может быть неоптимальным), есть и потолок на число блоков за прогон. Обрыв соединения = AbortController на сервере: запускается пауза, придёт paused с числом готовых блоков — затем поток можно возобновить с resume=1. Ошибки отдельных блоков — block_error, общий сбой — error. Поток — SSE, не JSON и не Markdown.

Связанные