PATCH /api/projects/:id/doc-content/:nodeId/artifacts/:contentItemId — Изменить артефакт
Сгенерировано из матриц + кода. Правки вносить в источники (
docs/matrices/,server/routes/), не здесь.
| Поле | Значение |
|---|---|
| HTTP | PATCH /api/projects/:id/doc-content/:nodeId/artifacts/:contentItemId |
| Auth | optionalAuth, requireProjectAccess — гость + авторизованный, доступ к проекту (read/write) |
| Scope токена | read_write |
| PG-функции | api.upsert_artifact_doc_content |
| Таблицы | artifact_doc_content |
| SRM | SRM-209 |
| RP (права) | RP-119 |
| Файл роута | server/routes/projects.js |
| Статус | done |
Аргументы запроса (best-effort из хендлера; путь-параметры опущены):
| Аргумент | Где | Обяз. | Заметка |
|---|---|---|---|
content | body | подтвердить | |
editType | body | подтвердить |
Коды ответов/ошибок (из хендлера): 400, 403, 404, 500 (+ 200) — уточнить причины вручную
Для человека
Как открыть: откройте проект → вид «Дизайн-документ» → блок → разверните нужный артефакт → нажмите на ручку (значок редактирования). Откроется textarea с Markdown — правьте текст и сохраните.
Сохраняет текст одного артефакта блока. Правка идёт по конкретному артефакту, остальные подсекции блока не трогаются. Прежний текст артефакта при сохранении уходит в его историю версий, а у текущей версии прибавляется номер — так что любую правку можно потом отменить и вернуть назад.
Ограничение по объёму — до 50 000 символов; больше — ошибка. Пустой текст допустим (артефакт будет очищен). Правка фиксируется как ручная.
Кто может. Редактировать артефакт может только владелец проекта (RP-119). Менеджер спейса, наблюдатель и администратор организации чужой документ не правят; гость — только если проект его собственный.
Для агента
Запись — нужен токен со scope read_write (см. Конвенции). Помимо доступа к проекту хендлер требует уровень write (иначе 403); под гостевым доступом правка разрешена только владельцу проекта.
Путь-параметры:
| Параметр | Назначение |
|---|---|
:id | UUID проекта |
:nodeId | id блока (ноды) |
:contentItemId | id артефакта (из списка артефактов, поле content_item_id) |
Тело запроса (JSON):
| Поле | Тип | Обяз. | Назначение |
|---|---|---|---|
content | string | да | Новый Markdown-текст артефакта, ≤ 50 000 символов. Пустая строка допустима |
editType | string | нет | manual (по умолчанию) или llm_inline. Любое другое значение → безопасный дефолт manual |
content должен быть строкой — иначе 400; длиннее 50 000 символов — тоже 400. Если артефакт с таким :contentItemId не принадлежит этому блоку — 404.
Пример запроса:
curl -X PATCH https://specbuilder.vnimanie.ai/api/projects/{id}/doc-content/{nodeId}/artifacts/51 \ -H "Authorization: Bearer tak_..." \ -H "Content-Type: application/json" \ -d '{"content":"## Таблицы\n\n- events\n- aggregates","editType":"manual"}'Ответ 200 — id записи и новый номер версии:
{ "id": 51, "version": 3 }Операция версионирующая: прежний текст артефакта уходит в историю, а текущая версия инкрементируется. После записи актуальный список артефактов блока перечитывается через артефакты блока.
Формат. Только JSON; Markdown-зеркала и ETag/304 у мутации нет. Блок affordances в ответе не строится (server/agent/affordances.js).