Интеграция CodeGraph с OpenCode

Как подключить CodeGraph к OpenCode через MCP-инструменты, плагин opencode-codegraph, пользовательские команды, отдельного агента и 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:

  1. В opencode.json присутствуют mcp.codegraph, lsp.codegraph, плагин opencode-codegraph и инструкции.
  2. Зависимости плагина в .opencode/ установлены (выполняет npm install только при необходимости).
  3. API CodeGraph автоматически поднимается, если недоступен (нужно для инструментов плагина и сценарных flow).
  4. 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

Пошагово для этого репозитория

Фактически примененные шаги в этом репозитории:

  1. Обновлен opencode.json: добавлены mcp.codegraph и lsp.codegraph.
  2. Для LSP задан путь БД data/projects/codegraph.duckdb как идентификатор CPG, которой владеет GoCPG.
  3. LSP оставлен в режиме stdio (по умолчанию), чтобы OpenCode сам управлял жизненным циклом процесса.
  4. Подключены plugin: ["opencode-codegraph"] и инструкции: - .codegraph/AGENTS.md (MCP-инструменты + CPG reference) - .codegraph/SCENARIO_PLAYBOOK.md (маршрутизация 21 сценария)
  5. Выполнена проверка конфигурации и доступности команд:
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 теперь строится вокруг плагина и команд:

  1. плагин может выполнить best-effort refresh после локального git commit;
  2. /update запускает явную проверку актуальности и инкрементальное обновление через codegraph_watch;
  3. /status и /next показывают текущее состояние workflow и рекомендуемое следующее действие;
  4. 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_only shared 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.jsonenvironment