refactor(tools): execute-маппинг в SHARED_TOOL_SPECS + автопроводка обоих хостов — тул регистрируется в одном месте #445
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?
Зачем
Реестр
SHARED_TOOL_SPECS(#294) разделяет между хостами только метаданные (имя, схему, описание, tier) — но не execute-логику. Каждый shared-тул по-прежнему имеет два ручных execute-тела с копией маппинга аргументов:registerShared(spec, execute)вpackages/mcp/src/index.ts;key: sharedTool(spec, execute)вapps/server/src/core/ai-chat/tools/ai-chat-tools.service.ts, где маппинг вручную зеркалит MCP-транспорт (например, для drawio: дефолтformat ?? 'xml', перегруппировка плоской схемы в объектwhere, позиционныйbaseHash).Это корневая причина повторяющихся parity-багов:
f46d89ea(drawio-тулы добавлены в реестр, но проводка сделана только в MCP — in-app сломался, чинили постфактум по красному develop CI), ранееf8d26420(stashPage),fc9088b7(in-app не парсил строковые node-аргументы как MCP). Добавление одного shared-тула сегодня = 7–9 согласованных ручных правок в двух пакетах.Механика
SharedToolSpec(packages/mcp/src/tool-specs.ts) полем:deleteCommentsу in-apptransformPage, hybrid-search) оформить явными override-полями спека (mcpExecute?/inAppExecute?/mcpOnly?/inAppOnly?), а не параллельными inline-определениями — чтобы различие было видно в одном файле рядом с каноном.Порядок
tableGetсможет войти в реестр после camelCase).Критерии приёмки
tool-specs.tsделает тул доступным в обоих хостах без правокindex.tsиai-chat-tools.service.ts.sharedTool(с телом — только override-случаи).Связано: #294 (реестр — предшественник), #416 (роадмап), #412 (breaking-окно), коммиты
f46d89ea/f8d26420/fc9088b7.