Как добавить инструмент помощнику
Каждый файл, который затрагивает новый инструмент, по порядку. Как ход пользуется инструментами: Как устроен помощник.
Сначала решите
- Он читает или меняет? Инструмент чтения возвращает данные и ничего не меняет. Инструмент, который меняет граф, это инструмент сборки, и он обязан идти через движок команд. Инструмент, который предлагает, это инструмент предложений, он пишет черновик.
- Нужна ли ему сеть? Тогда он обязан слушаться «Настройки ▸ Помощник» (поиск, чтение страниц) и никогда не
обращаться к этому компьютеру, локальной сети, ComfyUI или MCP-серверу. См.
src/main/agent/web.ts. - Обращается ли он к ComfyUI? Только через проверку «только чтение»; новому вызову MCP нужна своя схема в
src/main/mcp/readOnly.ts. Чтение ComfyUI
Инструмент чтения, знаний или предложений
- Имя: добавьте его в
AGENT_READ_TOOLS,AGENT_KNOWLEDGE_TOOLSилиAGENT_PROPOSAL_TOOLSвsrc/shared/contracts/agentTools.ts. - Описание: текст и схема JSON в
MAIN_TOOL_SPECS,src/main/agent/toolSpecs.ts. Пишите описание для модели: что возвращает, когда вызывать, какие пределы (страницы, размеры). - Код: запись
define(name, zodSchema, run)вsrc/main/agent/tools.ts. Разбирайте аргументы через zod; возвращайте простые данные; скрывайте всё, где может оказаться ключ (src/shared/agent/redact.ts). - Запрос: если модели нужно знать, когда его предпочесть, одна строка в
src/main/agent/prompt.ts; если это один из немногих инструментов, которые остаются при маленьком окне контекста, добавьте его в короткие списки вsrc/main/agent/turn.ts. - Чат: его подпись в каталоге текстов на обоих языках:
agent.tools.<имя>(карточка инструмента) иchat.quiet.<имя>(тихая строка чтений) вsrc/shared/i18n/catalog.ts. - Тесты:
tests/unit/agent/tools.test.ts(аргументы, результат, отказ на плохой аргумент).
Инструмент сборки
- Имя:
AGENT_BUILD_TOOLS(иBUILD_STEP_TOOLS, если это видимый шаг) вsrc/shared/contracts/agentTools.ts. - Описание:
src/shared/commands/toolSpecs.ts(общее с renderer, который рисует шаг). - Команда: если ни одно содержимое команды не подходит, добавьте новое в
src/shared/commands/types.tsи примените его вsrc/main/commands/commit.ts/graphOps.ts(Движок команд и история). - Код: ветка в
src/main/agent/buildTools.ts, которая превращает вызов вcommitCommandсactor: 'ai'и id хода. Конфликт или отказ возвращается модели как неудачный шаг, а не исключение. - Шаг в чате:
src/renderer/components/chat/buildSteps.tsи текстыchat.step.<имя>иchat.stepFailed.<имя>на обоих языках. - Тесты:
tests/unit/agent/иtests/integration/chatToGraph.test.tsдля всего пути с заготовленной моделью.
Перед запросом на слияние
npm test,npm run type-check.xvfb-run -a npx playwright test tests/e2e/strict-chat-to-graph.test.ts --trace offдля инструмента сборки.- Если человек видит результат инструмента, скажите об этом на странице вики о помощнике, к которой он относится.