Унифицированный граф контекста
lean-ctx строит унифицированный граф, связывающий код, коммиты, тесты, знания и задачи - обеспечивая контекстное снабжение с учётом задач и глубокий анализ влияния.
Типы узлов
Граф содержит 8 типов узлов, представляющих различные аспекты проекта:
File Исходные файлы, отслеживаемые индексатором
Symbol Функции, классы, типы и переменные
Module Логические группировки (пакеты, крейты, модули)
Commit Git-коммиты с сообщением и метаданными
Test Тестовые функции и файлы тестов
CIRun Запуски CI/CD пайплайна и результаты
Knowledge Знания проекта из ctx_session
Issue Задачи и тикеты, связанные с кодом
Типы рёбер
Рёбра представляют связи между узлами. lean-ctx отслеживает 11 типов рёбер:
| Тип ребра | Значение | Пример |
|---|---|---|
Imports | Файл импортирует другой файл | A.ts → B.ts |
Calls | Функция вызывает другую функцию | fn_a → fn_b |
Defines | Модуль определяет символ | mod → fn |
TestedBy | Файл тестируется тестовым файлом | utils.rs → test_utils.rs |
ChangedIn | Файл изменён в коммите | file → commit |
MentionedIn | Файл упомянут в факте знаний | file → knowledge |
Affects | Задача затрагивает файл | issue → file |
Breaks | Коммит ломает тест | commit → test |
Обогащение графа
Обогащение расширяет граф кода данными из Git, тестов и знаний - создавая единое представление проекта.
Индексатор истории Git
Анализирует последние коммиты Git (по умолчанию: 500) и создаёт узлы Commit с рёбрами ChangedIn к затронутым файлам.
Индексатор тестов
Определяет тестовые файлы по соглашению об именах (test_, _test, _spec) и связывает их с исходными файлами рёбрами TestedBy.
Мост знаний
Связывает факты знаний проекта, записанные через ctx_session, с файлами рёбрами MentionedIn.
Команды MCP
ctx_graph enrich # Enrich graph with git, tests, knowledge
ctx_graph build # Index code structure
ctx_graph status # Show node/edge counts Community Detection (Louvain)
The Louvain algorithm clusters files into communities based on their dependency relationships. Files that frequently import each other or share transitive dependencies are grouped together, enabling smarter context preloading and relevance scoring for task-driven queries.
PageRank
Computes file importance scores based on the dependency graph structure. Files imported by many others (structural hubs) receive higher PageRank, which is used by Spectral Relevance and Boltzmann Allocation to prioritize high-impact files during context assembly.
Запросы контекста
Используйте запросы контекста на основе графа для поиска наиболее релевантных файлов для любой задачи.
Использование
ctx_graph context "fix auth bug" # Find relevant files for task
ctx_graph related src/auth.rs # Connected files
ctx_graph impact src/auth.rs # Blast radius analysis
ctx_graph symbol src/auth.rs::verify # Symbol definition/usages Как это работает
- Извлекает ключевые слова из описания задачи
- Сопоставляет ключевые слова с именами файлов и сообщениями коммитов
- Расширяет результаты через рёбра графа (импорты, тесты, знания)
- Возвращает ранжированный список релевантных файлов с контекстом связей
Интерактивный HTML-экспорт
Экспортируйте граф зависимостей в виде одного автономного HTML-файла. Сгенерированный файл работает полностью офлайн - откройте его в любом браузере для визуального исследования кодовой базы. Без сервера, без зависимостей, всего один HTML-файл.
Использование
# Export full graph (all nodes)
lean-ctx graph export-html --out graph.html
# Limit to 100 most-connected nodes
lean-ctx graph export-html --out graph.html --max-nodes 100
# Custom project root
lean-ctx graph export-html --out graph.html --root /path/to/project Интерактивные функции
Search Введите подстроку пути к файлу, чтобы мгновенно выделить совпадающие узлы
Pan & Zoom Нажмите и перетащите для перемещения, прокрутите для масштабирования. Работает как карта.
Node Details Нажмите на любой узел, чтобы увидеть его импорты и зависимые файлы в боковой панели
Reverse Deps Нажмите правой кнопкой мыши на узел, чтобы выделить все файлы, которые от него зависят (обход BFS)
PNG Export Скачайте текущий вид холста как PNG-изображение одним нажатием
Offline Без внешних зависимостей. Всё приложение встроено в один HTML-файл.
Советы
- Используйте --max-nodes, чтобы визуализация оставалась читаемой для больших проектов (50–200 - хороший диапазон)
- Сначала выполните graph build, чтобы убедиться, что индекс актуален перед экспортом
- HTML-файл безопасно делиться с коллегами - он не содержит исходного кода, только пути к файлам и связи
- Выделение правой кнопкой мыши показывает полную цепочку обратных зависимостей, что позволяет легко оценить радиус влияния изменений
API дашборда
| Эндпоинт | Описание |
|---|---|
/api/graph/stats | Количество узлов и рёбер, путь к базе данных |
/api/graph/enrich | Запустить полное обогащение графа и вернуть статистику |