GET /api/projects/:id/doc-content/:nodeId/artifacts — Артефакты блока
Сгенерировано из матриц + кода. Правки вносить в источники (
docs/matrices/,server/routes/), не здесь.
| Поле | Значение |
|---|---|
| HTTP | GET /api/projects/:id/doc-content/:nodeId/artifacts |
| Auth | optionalAuth, requireProjectAccess — гость + авторизованный, доступ к проекту (read/write) |
| Scope токена | read |
| PG-функции | api.get_all_artifact_doc_content |
| Таблицы | artifact_doc_content |
| SRM | SRM-208 |
| RP (права) | RP-040, RP-041 |
| Файл роута | server/routes/projects.js |
| Статус | done |
Аргументы запроса (best-effort из хендлера; путь-параметры опущены):
аргументов не обнаружено (подтвердить вручную по server/routes/projects.js)
Коды ответов/ошибок (из хендлера): 500 (+ 200) — уточнить причины вручную
Для человека
Как открыть: откройте проект → вид «Дизайн-документ» → найдите блок. Под основным текстом блока идут его артефакты — подсекции (каждая со своей специальностью и цветным чипом роли). По умолчанию основной блок раскрыт, а артефакты свёрнуты; разверните артефакт, чтобы увидеть его содержимое.
Артефакты — это под-элементы блока: отдельные части документа, каждая закреплена за своей специальностью. Метод возвращает все артефакты блока — и уже заполненные, и пока пустые (заготовки). По каждому видно заголовок, специальность-владельца, описание, текст и номер версии. Артефакты идут в заданном порядке отображения, поэтому список читается сверху вниз так же, как в документе.
Кто может. Артефакты блока видит любой, кто видит сам документ: в своём проекте — все роли, включая гостя; в чужом — сотрудник и выше с доступом к проекту (RP-040, RP-041).
Для агента
Чтение — токен со scope read (см. Конвенции). Доступ к проекту проверяется через requireProjectAccess.
Путь-параметры:
| Параметр | Назначение |
|---|---|
:id | UUID проекта |
:nodeId | id блока (ноды), чьи артефакты перечисляем |
Тела запроса нет.
Пример запроса:
curl https://specbuilder.vnimanie.ai/api/projects/{id}/doc-content/{nodeId}/artifacts \ -H "Authorization: Bearer tak_..."Ответ 200 — массив артефактов блока в порядке отображения (включая ещё не заполненные):
[ { "content_item_id": 51, "title": "Модель данных", "owner_role": "data-engineer", "description": "Схема таблиц и связей", "content": "## Таблицы\n\n- events\n- aggregates", "generated_by": "llm_generate", "version": 2, "updated_at": "2026-06-20T11:04:00Z" }, { "content_item_id": 52, "title": "API-контракт", "owner_role": "backend", "description": "Эндпоинты сервиса", "content": "", "generated_by": null, "version": 0, "updated_at": null }]content_item_id — id артефакта, который дальше подставляется в изменение и генерацию (путь-параметр :contentItemId). Пустая заготовка приходит с content: "", version: 0 и generated_by: null — это нормально, артефакт ещё не наполняли. owner_role — ключ специальности-владельца.
Формат. Метод отдаёт только JSON. Markdown-зеркала и ETag/304 у per-block списка нет. Если нужен Markdown по артефактам, его отдаёт проектный обзорный эндпоинт GET /api/projects/:id/artifact-content (с Accept: text/markdown), но он собирает артефакты по всему проекту, а не по одному блоку. Блок affordances здесь не строится (server/agent/affordances.js).