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

GET /api/projects/:id/doc-content/:nodeId/history — История версий блока

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

ПолеЗначение
HTTPGET /api/projects/:id/doc-content/:nodeId/history
AuthoptionalAuth, requireProjectAccess — гость + авторизованный, доступ к проекту (read/write)
Scope токенаread
PG-функцииapi.list_block_doc_history
Таблицыblock_doc_content_history
SRMSRM-202
RP (права)RP-115
Файл роутаserver/routes/projects.js
Статусdone

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

аргументов не обнаружено (подтвердить вручную по server/routes/projects.js)

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

Для человека

Как открыть: откройте проект → переключитесь на вид «Дизайн-документ» → найдите нужный блок. Под содержимым блока есть навигатор версий (стрелки ← v3 →) — он и листает историю правок этого блока.

Содержимое каждого блока версионируется: при любом сохранении предыдущий текст уходит в историю, а текущая версия получает следующий номер. Этот метод отдаёт список версий блока — что и когда менялось, кто автор правки и какого она была типа (ручная, генерация, инлайн-коррекция, восстановление). Сам текст версии здесь не возвращается — только метаданные; чтобы увидеть содержимое конкретной версии, откройте её через просмотр версии.

Версии идут от новой к старой. Если у блока ещё ни одной правки не было, история пустая.

Кто может. Историю версий видят сотрудники, менеджеры спейса, наблюдатели и администраторы организации — в проектах, к которым у них есть доступ. Гостю и администратору платформы история недоступна (RP-115).

Для агента

Чтение — достаточно токена со scope read (см. Конвенции). Доступ проверяется по проекту (requireProjectAccess): токен видит историю только тех проектов, к которым у его владельца есть доступ.

Путь-параметры:

ПараметрНазначение
:idUUID проекта
:nodeIdid блока (ноды) внутри графа проекта

Тела запроса нет.

Пример запроса:

Окно терминала
curl https://specbuilder.vnimanie.ai/api/projects/{id}/doc-content/{nodeId}/history \
-H "Authorization: Bearer tak_..."

Ответ 200 — массив версий, метаданные без текста, отсортирован по убыванию version (новые сверху):

[
{ "id": 412, "version": 3, "edit_type": "llm_generate", "edited_by": "f9e8d7c6-...", "edited_by_name": "Иван П.", "created_at": "2026-06-20T11:04:00Z", "content_length": 4820 },
{ "id": 388, "version": 2, "edit_type": "manual", "edited_by": "f9e8d7c6-...", "edited_by_name": "Иван П.", "created_at": "2026-06-19T09:12:00Z", "content_length": 4190 },
{ "id": 350, "version": 1, "edit_type": "restore", "edited_by": null, "edited_by_name": "User", "created_at": "2026-06-18T16:40:00Z", "content_length": 3905 }
]

edit_type — как именно правилась версия: manual (вручную), llm_generate / llm_full (генерация), llm_inline (инлайн-коррекция фрагмента), restore (восстановление прошлой версии). content_length — длина текста в символах; сам текст версии берётся отдельным вызовом версии блока. У блока без правок ответ — пустой массив [].

Формат. Метод отдаёт только JSON — Markdown-зеркала и ETag/304 у истории нет (в отличие от содержимого блока). Заголовки Accept: text/markdown / ?format=md игнорируются. Это плоский служебный список, не аффордансный ресурс, поэтому блок affordances к нему не строится (server/agent/affordances.js).

Связанные