Как подключить CodeGraph к OpenCode через MCP-инструменты, плагин opencode-codegraph, пользовательские команды, отдельного агента и LSP-сервер.
Содержание¶
- Обзор
- Установка
- Единый скрипт запуска
- Пошагово для этого репозитория
- Функции
- Плагин
- Пользовательские команды
- Пользовательский агент
- LSP-сервер
- Конфигурация
- Архитектура
- Устранение неполадок
Обзор¶
CodeGraph можно встроить в OpenCode на пяти уровнях. Их можно включать по отдельности или комбинировать. Основной интерактивный сценарий сейчас строится вокруг плагина OpenCode и LSP-сервера, а MCP остаётся доступным для прямых запросов и автоматизации.
| Уровень | Назначение | Механизм работы |
|---|---|---|
| MCP-инструменты (149) | Прямые запросы к CPG, контексту и рабочим сценариям | codegraph_query, codegraph_explain, codegraph_context_fetch и др. через stdio |
Плагин (opencode-codegraph) |
Сценарный контекстный слой + agent-native инструменты | Внедрение CPG/OpenViking-контекста, явные session tools, review/explain helpers, workflow follow-up и видимость governable multi-user sessions |
| Пользовательские команды (8) | Переиспользуемые шаблоны анализа | /review, /audit, /explain, /onboard, /update, /status, /next, /continue |
| Пользовательский агент | AI-агент с фокусом на CPG | @codegraph — всегда проверяет граф вызовов перед изменениями |
| LSP-сервер | Диагностика в реальном времени | Результаты безопасности, мёртвый код и сложность в редакторе через GoCPG gRPC |
Автоматические и ручные механизмы¶
| Механизм | Тип запуска | Что происходит |
|---|---|---|
chat.message + experimental.chat.system.transform в плагине |
Автоматический | В чат автоматически внедряется CPG-контекст при старте и упоминании файлов |
tool.execute.after в плагине на git commit |
Автоматический | Best-effort обновление актуальности после локального коммита через сценарий плагина |
Диагностика LSP (opencode + codegraph_lsp) |
Автоматический | Диагностики пересчитываются через gRPC-запросы к GoCPG в режиме только для чтения |
MCP codegraph_watch check/update |
Ручной | Явная проверка/обновление актуальности с подробным структурированным результатом |
Команда OpenCode /update |
Ручной | Удобная обёртка над процессом актуальности codegraph_watch |
Команда OpenCode /status |
Ручной | Единый статус по актуальности CPG, текущему HEAD и последнему следу ревью |
Команда OpenCode /next |
Ручной | Одна лучшая следующая команда на основе текущего состояния самоанализа |
Команда OpenCode /continue |
Ручной | Безопасно выполняет следующий шаг обновления или ревью без прямого управления обслуживанием базы |
Прямой gocpg update |
Ручной | Принудительное инкрементальное обновление вне UI-сценариев OpenCode |
Автоматические хуки плагина не блокируют рабочий поток и срабатывают по возможности. Если нужен строгий контроль актуальности в CI или в безголовом режиме, используйте явный codegraph_watch update или команду /update.
Установка¶
Минимальная настройка (только MCP)¶
Создайте opencode.json в корне проекта:
{
"$schema": "https://opencode.ai/config.json",
"mcp": {
"codegraph": {
"type": "local",
"command": ["python", "-m", "src.mcp", "--transport", "stdio", "--db", "data/projects/codegraph.duckdb"],
"environment": {
"CODEGRAPH_PROJECT": ""
}
}
},
"plugin": ["opencode-codegraph"],
"instructions": [".codegraph/AGENTS.md", ".codegraph/SCENARIO_PLAYBOOK.md"]
}
Полная настройка (MCP + LSP)¶
Добавьте LSP-сервер для диагностики в реальном времени:
{
"$schema": "https://opencode.ai/config.json",
"mcp": {
"codegraph": {
"type": "local",
"command": ["python", "-m", "src.mcp", "--transport", "stdio", "--db", "data/projects/codegraph.duckdb"],
"environment": {
"CODEGRAPH_PROJECT": ""
}
}
},
"lsp": {
"codegraph": {
"command": ["python", "-m", "codegraph_lsp", "--db", "data/projects/codegraph.duckdb"],
"extensions": [".py", ".go", ".js", ".ts", ".java", ".c", ".cpp", ".cs", ".kt", ".php", ".rb"]
}
},
"plugin": ["opencode-codegraph"],
"instructions": [".codegraph/AGENTS.md", ".codegraph/SCENARIO_PLAYBOOK.md"]
}
Примечание: Плагин
opencode-codegraphявляется основным слоем интеграции OpenCode. Он обеспечивает автоматическое обогащение контекста, явные CodeGraph/OpenViking session tools, сценарные команды, review/explain helpers и отображение shared или handed-off explicit sessions. Требует запущенный API CodeGraph (uvicorn src.api.main:app --port 8000). Если API недоступен, плагин деградирует корректно — MCP-инструменты продолжают работать через stdio.Примечание: Параметр
--dbобязателен. Он задаёт целевую CPG-базу, которой владеет GoCPG. В этом репозитории используетсяdata/projects/codegraph.duckdb.
Предварительные требования¶
- CodeGraph установлен (
pip install -e .в репозитории codegraph) - CPG-база данных создана (
gocpg parse --input=. --output=project.duckdb) - GoCPG gRPC server запущен и имеет доступ к целевой CPG-базе
- OpenCode 1.2.0+ установлен (
npm install -g opencode-ai)
Единый скрипт запуска¶
Рекомендуемая команда запуска (MCP + плагин + LSP + сценарный контекст):
python scripts/run_opencode_codegraph.py --model openai/gpt-5.3-codex
Что гарантирует скрипт запуска перед стартом OpenCode:
- В
opencode.jsonприсутствуютmcp.codegraph,lsp.codegraph, плагинopencode-codegraphи инструкции. - Зависимости плагина в
.opencode/установлены (выполняетnpm installтолько при необходимости). - API CodeGraph автоматически поднимается, если недоступен (нужно для инструментов плагина и сценарных flow).
- OpenCode запускается с
--agent codegraphпо умолчанию.
Пример headless запуска:
python scripts/run_opencode_codegraph.py --run "Use codegraph_project_context and summarize top risks"
Передача дополнительных флагов OpenCode после --:
python scripts/run_opencode_codegraph.py --model openai/gpt-5.3-codex -- --print-logs
Проверка настройки¶
opencode mcp list # Должно показать: ✓ codegraph connected
opencode debug config # Проверка итоговой конфигурации
opencode agent list # Должно показать: codegraph agent
python -m src.mcp --help # Проверка доступности MCP entrypoint
python -m codegraph_lsp --help # Проверка доступности LSP entrypoint
Пошагово для этого репозитория¶
Фактически примененные шаги в этом репозитории:
- Обновлен
opencode.json: добавленыmcp.codegraphиlsp.codegraph. - Для LSP задан путь БД
data/projects/codegraph.duckdbкак идентификатор CPG, которой владеет GoCPG. - LSP оставлен в режиме stdio (по умолчанию), чтобы OpenCode сам управлял жизненным циклом процесса.
- Подключены
plugin: ["opencode-codegraph"]и инструкции: -.codegraph/AGENTS.md(MCP-инструменты + CPG reference) -.codegraph/SCENARIO_PLAYBOOK.md(маршрутизация 21 сценария) - Выполнена проверка конфигурации и доступности команд:
python -m json.tool opencode.json # JSON валиден
opencode mcp list # codegraph server connected
opencode debug config # видны mcp/lsp/plugin/instructions
python -m src.mcp --help # MCP сервер доступен
python -m codegraph_lsp --help # LSP сервер доступен
gocpg stats --db data/projects/codegraph.duckdb
Stdio и TCP¶
- Для OpenCode рекомендуется stdio (не запускать отдельный долгоживущий LSP-процесс вручную).
- TCP режим оставляйте для отладки:
python -m codegraph_lsp --db data/projects/codegraph.duckdb --transport tcp --host 127.0.0.1 --port 2087
Модель владения¶
- GoCPG — единственный runtime-процесс, который открывает и изменяет CPG DuckDB.
- Интеграции OpenCode MCP, плагин и LSP работают как клиенты только для чтения поверх API GoCPG.
--dbв конфигурации OpenCode и LSP — это идентификатор целевой базы, а не разрешение открывать DuckDB напрямую.
Функции¶
1. MCP-инструменты (149 инструментов)¶
Все 149 MCP-инструментов CodeGraph доступны в чате OpenCode. Основные группы:
| Группа | Инструменты | Применение |
|---|---|---|
| Контекст | codegraph_project_context, codegraph_file_context, codegraph_diff_context |
Понимание проекта/файла/diff перед изменениями |
| Навигация | codegraph_find_callers, codegraph_find_callees, codegraph_explain, codegraph_search |
Навигация по графу вызовов |
| Анализ | codegraph_hotspots, codegraph_taint_analysis, codegraph_pattern_search, codegraph_hypothesis |
Поиск уязвимостей и точек перегрева |
| Операции | codegraph_compose, codegraph_autofix, codegraph_diagram |
Запуск составного анализа, автоисправление, диаграммы |
| Проект | codegraph_project_list, codegraph_project_switch |
Управление несколькими проектами |
Полный справочник инструментов находится в .codegraph/AGENTS.md (автоматически загружается через instructions).
2. Файлы инструкций¶
В каждый диалог через instructions загружаются два файла:
.codegraph/AGENTS.mdсодержит:- Полный список доступных MCP-инструментов с описаниями
- Справочник таблиц CPG (
nodes_method,edges_callи др.) - Рекомендации по использованию (когда какой инструмент применять)
.codegraph/SCENARIO_PLAYBOOK.mdсодержит:- Маршрутизацию по всем 21 сценариям CodeGraph
- Связку intent -> scenario (когда использовать S02 vs S09 vs S18)
- Пояснение, что structural pattern search — это tool/CLI feature, а не numbered scenario
3. Актуальность и инкрементальные обновления¶
Поддерживаемый путь актуализации для пользователей OpenCode теперь строится вокруг плагина и команд:
- плагин может выполнить best-effort refresh после локального
git commit; /updateзапускает явную проверку актуальности и инкрементальное обновление черезcodegraph_watch;/statusи/nextпоказывают текущее состояние workflow и рекомендуемое следующее действие;- LSP-диагностика отражает обновлённое состояние CPG в редакторе.
Для headless OpenCode /update остаётся рекомендуемой точкой контроля: команда возвращает структурированные поля актуальности (cpg_commit, head_commit, commits_behind, commits_behind_strict, is_fresh, is_fresh_strict, has_relevant_changes_since_cpg, freshness_reason, needs_update) и поля диагностики обновления (failure_kind, auto_unlock_attempted, auto_unlock_killed_pids, auto_unlock_errors, next_step, next_command).
Плагин¶
Плагин opencode-codegraph (npm, v0.1.37) является основным слоем интеграции OpenCode. Он добавляет автоматическое обогащение, agent-native операции с контекстом, сценарную поддержку команд, continuity и lifecycle-aware guidance поверх MCP-инструментов. Исходный код: каталог opencode-codegraph/.
Функции плагина¶
| Хук | Назначение |
|---|---|
experimental.chat.system.transform |
Внедряет сводку CPG-проекта (файлы, методы, точки перегрева, результаты безопасности) в системный промпт |
chat.message |
Автоматически обогащает чат CPG-контекстом при упоминании файлов (методы, метрики, результаты безопасности) |
chat.message при edit intent |
Добавляет pre-edit warnings, если сообщение похоже на запрос на изменение кода (refactor, fix, update и т.д.) |
experimental.session.compacting |
Сохраняет workflow state и continuity явной context-session в длинных сессиях |
command.execute.before |
Добавляет scenario-aware readiness, skill hints, resume guidance, session follow-up и формулировки для shared/handoff сценариев в /onboard, /review, /continue, /next, /explain, /status, /update |
tool.execute.after |
Обнаруживает git commit, запускает best-effort post-commit refresh flow CodeGraph и добавляет либо готовую review summary, либо pending summary с понятным следующим действием. После завершения OpenCode получает короткое уведомление с итогом обновления. |
permission.ask |
Автоматически разрешает все MCP-инструменты codegraph_* (без подтверждения) |
Автоматизация плагина рассчитана на разговорный интерактивный сценарий и работает по возможности. Поддерживаемый workflow для разработчика теперь строится вокруг самого плагина OpenCode, сценарных команд и LSP-сервера.
Текущая модель OpenViking-сессий со стороны плагина:
- для сценарных команд по умолчанию используется явное открытие или переподключение сессии
/continue,/statusи/reviewстараются продолжать тот же evidence chain, если recoverable session уже существуетread_onlyshared sessions можно видеть и переоткрывать для review или testing, но нельзя использовать для записи- ownership transfer управляется в CodeGraph как authoritative contract; плагин отражает текущий access mode и follow-up wording
- skill guidance учитывает lifecycle: по умолчанию только
current,needs_reviewтолько по явному opt-in,deprecatedисключается
Инструменты плагина¶
Плагин добавляет явные CodeGraph/OpenViking-инструменты, реализованные на TypeScript поверх MCP:
| Инструмент | Параметры | Описание |
|---|---|---|
codegraph_context_open_session |
session_id (необязательно) |
Открыть или переподключить явную CodeGraph/OpenViking context session |
codegraph_context_fetch |
query, target_uri (необязательно), limit (необязательно), session_id (необязательно), include_needs_review (необязательно) |
Получить семантические кандидаты контекста для активной сессии OpenCode |
codegraph_context_read |
uri, level (необязательно), session_id (необязательно) |
Прочитать конкретный ресурс OpenViking viking:// |
codegraph_context_browse |
uri, level_limit (необязательно), node_limit (необязательно), session_id (необязательно) |
Просмотреть дерево ресурса OpenViking |
codegraph_context_record_used_context |
items_json, session_id (необязательно) |
Сохранить used-context trace перед фоновым commit |
codegraph_context_commit |
session_id (необязательно) |
Запустить background commit для явной context session |
codegraph_context_status |
session_id (необязательно) |
Проверить статус background commit |
codegraph_context_sync_status |
нет | Получить project-level readiness и sync status контекста |
codegraph_fused_search |
query, target_uri (необязательно), limit (необязательно), include_graph (необязательно), session_id (необязательно), include_needs_review (необязательно) |
Вернуть единый fused payload из OpenViking context hits и graph evidence |
codegraph_skill_list |
category (необязательно), include_needs_review (необязательно) |
Показать curated agent-visible навыки CodeGraph |
codegraph_review |
base_ref (необязательный, по умолчанию HEAD~1) |
Анализ безопасности и влияния изменений на текущий diff |
codegraph_explain_function |
name (обязательный) |
Глубокий анализ функции с графом вызовов, метриками, путями распространения данных |
codegraph_review сначала использует стандартный процесс ревью. Если результат пустой, API автоматически переключается на детерминированный резервный сценарий на базе CPG: изменённые файлы из diff, затронутые методы и вызывающие, а также найденные паттерны безопасности по файлам.
Требования¶
Плагин требует запущенный REST API CodeGraph (uvicorn src.api.main:app --port 8000). Если API недоступен, плагин деградирует корректно — plugin-side automation пропускается, MCP-инструменты продолжают работать через stdio.
Плагин рассчитан на @opencode-ai/plugin >=1.2.0.
Пользовательские команды¶
Восемь команд доступны через /command в TUI OpenCode:
Для headless CLI используйте opencode run --command <name> [args...] (а не буквальное сообщение /name).
| Команда | Описание | Использование |
|---|---|---|
/review |
Анализ кода на основе CPG (diff, taint, влияние) | TUI: /review · Headless: opencode run --command review |
/audit |
Полный аудит кодовой базы (через compose, с переходом на быстрый аудит при таймауте) | TUI: /audit · Headless: opencode run --command audit |
/explain |
Анализ функции с фокусным графом вызовов и метриками | TUI: /explain process_data · Headless: opencode run --command explain process_data |
/onboard |
Фокусное онбординг-объяснение по вопросу/теме | TUI: /onboard how does auth work? · Headless: opencode run --command onboard "how does auth work?" |
/update |
Проверка актуальности CPG и инкрементальное обновление активного проекта | TUI: /update · Headless: opencode run --command update |
/status |
Единый статус разработки по актуальности и следу ревью | TUI: /status · Headless: opencode run --command status |
/next |
Одна лучшая следующая команда из текущего состояния процесса | TUI: /next · Headless: opencode run --command next |
/continue |
Безопасно выполняет следующий шаг обновления или ревью | TUI: /continue · Headless: opencode run --command continue |
Команды определены в .opencode/commands/ как файлы markdown с YAML-заголовком (frontmatter).
Пользовательский агент¶
Переключитесь на агент CodeGraph для анализа на основе CPG:
@codegraph
Агент codegraph (использует вашу модель по умолчанию):
- Всегда проверяет CPG перед изменением кода
- Проверяет вызывающие функции перед рефакторингом (codegraph_find_callers)
- Запускает анализ распространения данных перед проверкой безопасности (codegraph_taint_analysis)
- Расставляет приоритеты по метрикам сложности и влияния (codegraph_hotspots)
Определён в .opencode/agents/codegraph.md.
LSP-сервер¶
LSP-сервер CodeGraph обеспечивает диагностику на основе CPG в реальном времени:
- Диагностика: Результаты безопасности, мёртвый код, предупреждения о сложности
- Подсказки при наведении: Метрики методов (сложность, fan_in, fan_out)
- CodeLens: Количество вызывающих/вызываемых функций, пути распространения данных
- Действия кода: Автоисправление для результатов анализа шаблонов
Конвейер диагностик мёртвого кода отфильтрован от синтетических имён (например, <module> и артефактов metaclass adapter) и дедуплицируется по идентичности метода, чтобы headless-диагностика оставалась практичной для итеративного ревью.
Headless цикл plan/act/review¶
# Plan: сначала проверка статуса, затем обновление при необходимости
opencode run --command status
opencode run --command update
opencode debug lsp diagnostics src/dogfooding/cpg_freshness.py
# Act: изменения в коде и запуск фокусных тестов
pytest tests/unit/dogfooding/test_cpg_freshness.py tests/mcp/test_ci_ops.py -v
# Review: повторная проверка диагностик и актуальности
opencode debug lsp diagnostics src/mcp/tools/ci_ops.py
opencode run --command update
Используйте этот цикл, когда нужно подтвердить, что данные CodeGraph остаются релевантными и применимыми между итерациями: исправление, повторная диагностика, повторная проверка актуальности CPG.
Параметры¶
python -m codegraph_lsp --db project.duckdb [--complexity-threshold 10] [--transport stdio] [--log-level info]
| Параметр | По умолчанию | Описание |
|---|---|---|
--db |
(обязательный) | Путь к базе данных DuckDB CPG |
--complexity-threshold |
10 |
Порог предупреждений цикломатической сложности |
--transport |
stdio |
Протокол транспорта: stdio или tcp |
--host |
127.0.0.1 |
TCP-хост (только для --transport tcp) |
--port |
2087 |
TCP-порт (только для --transport tcp) |
--log-level |
info |
Уровень логирования: debug, info, warning, error |
Конфигурация¶
Переменные окружения¶
| Переменная | Значение по умолчанию | Описание |
|---|---|---|
CODEGRAPH_API_URL |
http://localhost:8000 |
Базовый URL API CodeGraph |
CODEGRAPH_PROJECT |
(пусто) | Идентификатор проекта по умолчанию |
Структура файлов¶
.opencode/
commands/
review.md # Команда /review
audit.md # Команда /audit
explain.md # Команда /explain
onboard.md # Команда /onboard
update.md # Команда /update
status.md # Команда /status
agents/
codegraph.md # Агент codegraph
.codegraph/
AGENTS.md # Справочник MCP-инструментов (загружается через opencode.json instructions)
SCENARIO_PLAYBOOK.md # Маршрутизация сценариев для контекста модели
opencode.json # Конфигурация MCP + плагин + инструкции
opencode-codegraph/ # Исходный код плагина (npm: opencode-codegraph@0.1.37)
Архитектура¶
OpenCode
|
+-- Плагин (opencode-codegraph, npm)
| |-- chat.message --> CodeGraph REST API --> CPG-контекст
| |-- experimental.chat.system.transform --> CodeGraph REST API --> сводка проекта
| |-- tool.execute.after --> CodeGraph REST API --> инкрементальное обновление
| |-- permission.ask --> авторазрешение codegraph_*
| +-- инструменты --> CodeGraph REST API --> review/explain
|
+-- MCP-сервер (src.mcp, stdio)
| +-- 149 инструментов --> CPG, контекст, taint, шаблоны, compose
|
+-- Пользовательские команды (.opencode/commands/)
| +-- /review, /audit --> Шаблоны промптов с MCP-инструментами
| +-- /explain, /onboard --> Шаблоны промптов с MCP-инструментами
| +-- /update --> Проверка актуальности + инкрементальный CPG update
| +-- /status --> Единый статус актуальности и review trace
|
+-- Пользовательский агент (.opencode/agents/codegraph.md)
| +-- CPG-first рабочий процесс --> Всегда проверяет вызывающих перед рефакторингом
|
+-- Инструкции (.codegraph/AGENTS.md)
| +-- Справочник инструментов --> Автоматически загружается в каждый диалог
|
+-- LSP-сервер (codegraph_lsp, опционально)
+-- диагностика --> безопасность, мёртвый код, сложность
+-- подсказки --> метрики методов
+-- codelens --> вызывающие/вызываемые/taint
+-- действия кода --> автоисправление
Устранение неполадок¶
MCP-сервер не подключается¶
opencode mcp list # Проверка статуса подключения
opencode debug config # Проверка итоговой конфигурации MCP
python -m src.mcp --transport stdio # Тест MCP-сервера напрямую
- Убедитесь, что
pythonдоступен в PATH и виртуальное окружение codegraph активировано - Проверьте, что CPG-база данных существует (
data/projects/*.duckdb)
Команды недоступны¶
- Убедитесь, что каталог
.opencode/commands/существует в корне проекта - Проверьте, что файлы содержат корректный YAML-заголовок (начинается с
---) - Перезапустите OpenCode после добавления новых команд
- Тест:
opencode debug skillдолжен показать команды
Headless-использование команд¶
- В TUI используйте
/review,/auditи т.д. - В headless-режиме используйте
opencode run --command review(илиaudit,explain,onboard,update) - Не передавайте
/reviewкак обычное сообщение вopencode run: оно будет воспринято как текст, а не как команда
Агент не отображается¶
- Убедитесь, что файл
.opencode/agents/codegraph.mdсуществует - Проверьте, что YAML-заголовок содержит поле
description - Тест:
opencode agent listдолжен показатьcodegraph - Тест:
opencode debug agent codegraphдля полной информации
LSP не работает¶
- Убедитесь, что
--dbуказывает на существующий файл DuckDB - Проверьте, что модуль
codegraph_lspимпортируется:python -m codegraph_lsp --help - Убедитесь, что в
opencode debug configприсутствуетlsp.codegraph.commandс ожидаемым путем к БД - Для режима stdio отсутствие отдельного TCP-listener — это ожидаемое поведение
- Тест:
opencode debug lsp diagnostics src/api/main.py
Нет данных CPG в результатах инструментов¶
- Проверьте, что CPG-база данных создана:
python -m src.cli query "SELECT count(*) FROM nodes_method" - Проверьте активный проект:
opencode run "Use codegraph_project_context" - Установите проект:
CODEGRAPH_PROJECT=myprojectвopencode.json→environment