opencode-config/docs/handoff/pr-78-align-tool-names-kebab-case.md
Sergey d641f7a65b
fix(docs): align tool names to kebab-case in active documentation (#78)
Co-authored-by: opencode-agent <agent@opencode.local>
2026-07-26 17:48:55 +03:00

37 lines
4.3 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

---
pr: 78
title: fix(docs): align tool names to kebab-case (local .opencode/tools)
---
## Что сделано
Заменил snake_case имена ЛОКАЛЬНЫХ opencode tools на kebab-case в активной документации (AGENTS.md, 6 SKILL.md, 3 agents/*.md, 2 commands/*.md, docs/project-map/README.md). 12 файлов, 84 insertions / 82 deletions.
Локальные tools (правки, kebab-case): create-issue, create-pr, merge-pr, post-review, post-docs-review, pipeline-status, spec-status, memory-setup. Однословные commit/tunnel — без изменений.
MCP plugin tools (memory_search, memory_list, memory_save, memory_access) — НЕ тронуты, остались snake_case (это другой namespace, имена задаёт плагин).
Доп. правки:
- spec/SKILL.md:28 — broken ADR-026 ref → ADR-019 (ADR-026 создан в PR#63 про другой topic — enforce-tool-usage-policy; ADR-019 уже описывает аналогичный deny-rule паттерн для post-review/post-docs-review).
- spec/SKILL.md:28 — путь скрипта `config/scripts/spec-status.py``.opencode/scripts/spec-status.py` (расхождение с AGENTS.md).
- add-skill/SKILL.md — список существующих скиллов 12 → 14 (добавлены release, tunnel; восстановлен алфавитный порядок).
Исторические docs/handoff/* и docs/decisions/* НЕ тронуты — сохраняют оригинальное написание эпохи написания (включая snake_case в ADR-009, handoff pr-29 — там документационная конвенция, не runtime).
Верификация: grep по активным файлам на snake_case локальных tools → 0 совпадений.
## Почему
Реальные имена opencode tools в runtime registry — kebab-case (подтверждено анализом opencode.db: 397 runtime вызовов локальных tools в kebab-case, 0 в snake_case). Имя tool'а резолвится из filename (.opencode/tools/create-pr.ts → registry name "create-pr") — SDK `tool()` не имеет поля `name` (@opencode-ai/plugin@1.18.5 `tool.js`: `tool(input){ return input }`).
В AGENTS.md / SKILL.md / agents промптах tool'ы были написаны в snake_case (create_pr, merge_pr, pipeline_status и т.д.) — документационная конвенция эпохи написания (ADR-009/handoff pr-29, 2026-07-23). Runtime резолвит snake→kebab автоматически через utility `Re=(X)=>X.replace(/_/g,"-")` в opencode.exe — поэтому система работала, НО агент спотыкался: читал "вызови pipeline_status", искал такой tool в tool-списке, находил только pipeline-status, не совпадало → fallback на raw bash (deny → блок) или вызов не того tool.
MCP plugin tools (memory_*) остаются snake_case — их имена задаёт плагин в export-коде, не filename. opencode.db подтверждает: memory_search (65 calls), memory_save (13), memory_access (22) — все snake_case.
См. ADR-034 (этот PR) + memory `technical/tool-name-casing-kebab-vs-mcp-snake.md`.
## Pending
## Watch out
- ADR-009 (PR#29) текст остался со snake_case (pipeline_status, spec_status) — НЕ правлен, исторический документ. Intent ADR верен: "commands переименованы, tool'ы не тронуты" — registry names действительно не менялись, просто написаны были в snake в документации.
- opencode.json `agent.tools` map keys остались snake_case (create_pr, merge_pr и т.д.) — НЕ правлен. Runtime конвертирует _ → - через Re-utility, система работает. Смена keys на kebab требует проверки JSON-схемы + test_permissions.py (assert'ит snake keys) — отдельный PR если нужно.
- PR#2 (commit tool doc fix + restore --staged allow + ADR) — отдельный PR, не в этом scope.