refactor(tools): переименовать тул updatePageContent → updatePageMarkdown; внешний MCP: + updatePageMarkdown, − import_page_markdown #411
Reference in New Issue
Block a user
Delete Branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Мотивация
Вскрылось при разборе инцидента со сносками (#410): поверхности записи «целым телом» несимметричны и невнятно названы.
updatePageContent— имя не говорит о формате, тогда как парный структурный тул называетсяupdatePageJson. Пара должна бытьupdatePageMarkdown/updatePageJson.import_page_markdown, который на самом деле не «plain-body replace», а парный кexport_page_markdownразбор self-contained Docmost-файла (meta-блок + метаданные комментариев + восстановление inline-меток) —client.importPageMarkdown@packages/mcp/src/client.ts:1856.Решение (зафиксировано владельцем)
updatePageContent→updatePageMarkdown(замена тела страницы markdown'ом,^[...]-сноски парсятся — путьclient.updatePage→updatePageContentRealtime→markdownToProseMirrorCanonical).updatePageMarkdown(общая спека, тот же execute →docmostClient.updatePage(pageId, content, title)).import_page_markdownс внешнего MCP убрать. Принято осознанно:export_page_markdownстановится односторонним, round-trip «экспорт → правка файла → реимпорт с комментариями/meta» с внешней стороны перестаёт поддерживаться.Скоуп правок
packages/mcp/src/tool-specs.ts: новая спекаupdatePageMarkdown(pageId, content, title?). СпекуimportPageMarkdown(строка ~423) пока НЕ удалять — её использует in-app агент (importPageMarkdownостаётся у агента); убрать только MCP-регистрацию. Если решим убирать и у агента — отдельным решением.packages/mcp/src/index.ts:registerShared(SHARED_TOOL_SPECS.updatePageMarkdown, …); удалить регистрациюimport_page_markdown(строка ~325); обновить guide-текст (строка ~50) — убрать import_page_markdown, добавить updatePageMarkdown в раздел «Bulk/structural rewrite».apps/server/src/core/ai-chat/tools/ai-chat-tools.service.ts:371:updatePageContent: tool({...})→updatePageMarkdownчерезsharedTool(SHARED_TOOL_SPECS.updatePageMarkdown, …).apps/server/src/core/ai-chat/tools/tool-tiers.ts:119: ключupdatePageContent→updatePageMarkdown+ catalogLine.apps/server/src/core/ai-chat/chat-markdown.util.ts:78,99: ключи мапы лейблов действий (en «Updated page» / ru «Обновил страницу»).agent-roles-catalog/bundles/research/*.yaml) — если там упоминается имя тула, синхронизировать (сейчас координируется с #410 п.5).shared-tool-specs.contract.spec.ts,tool-tiers.spec.ts,ai-chat-tools.service.spec.ts,packages/mcp/test/*(там есть моки full-doc-write).README.md,README.ru.md,packages/mcp/README.md,CHANGELOG.md.⚠️ НЕ трогать (одноимённые внутренности — не тулы)
PageService.updatePageContent(apps/server/src/core/page/services/page.service.ts:346) — внутренний метод REST-пути.updatePageContentRealtime(packages/mcp/src/lib/collaboration.ts:480) — collab-путь записи.collaboration.handler.ts:145— обработчик collab-действия.Это ядро записи; переименовывается только имя тула на обеих поверхностях.
Breaking
Для внешних MCP-клиентов: исчезает
import_page_markdown, появляетсяupdatePageMarkdown. Отразить в CHANGELOG как BREAKING, дать миграционную заметку. Согласуется с общим переименованием в camelCase (отдельное issue) — лучше выпускать одним релизом, чтобы внешние конфиги ломались один раз.Критерии приёмки
updatePageMarkdown+updatePageJson; имениupdatePageContentкак тула больше нет.import_page_markdownна внешнем MCP отсутствует; guide-текст и доки не упоминают его.^[...]в теле, переданном вupdatePageMarkdown, материализуется в сноски (существующий тест-контур канонизации проходит).Связано: #410 (тулы агенту), camelCase-переименование — следующее issue.