repowise — слой интеллекта над кодовой базой для AI-агентов
📂 Исходный код на GitHubСлой codebase intelligence для AI-агентов и людей: health-скоринг кода, автогенерация документации, git-аналитика, поиск мёртвого кода и архитектурные решения через MCP. Локальный, без облака, первый индекс без API-ключа.
repowise — слой codebase intelligence для AI-агентов. Вместо того чтобы агент на каждой задаче заново грепал, читал и перечитывал код, repowise один раз строит индекс и поддерживает его актуальным на каждом коммите. Один pip install, всё локально, код не покидает машину, а первый индекс не требует API-ключа.
Измеренный результат: загрузка контекста одного коммита через get_context стоит 393 токена вместо 13 984 при сыром чтении файлов (−97%, замер на 30 коммитах). В реальном агентском цикле экономия честнее и скромнее: −15,9% выходных токенов агента (n=15, p=0,035) — единственный значимый результат в своей категории инструментов.
Что строит один индекс
Пять слоёв, собранных за один проход и синхронизируемых на каждом коммите. Каждый слой доступен из CLI, MCP-инструментов и локальной веб-панели.
| Слой | Что даёт |
|---|---|
| Граф | Граф зависимостей по 18 языкам: узлы файлов и символов, трёхуровневое разрешение вызовов, Leiden-кластеры, PageRank, исполняемые потоки, framework-aware рёбра route→handler |
| Git | Хотспоты (churn × сложность), ownership, скрытая связность (co-change), bus factor, какие файлы реально чинят баги |
| Документация | Сгенерированная вики по каждому модулю и файлу, инкрементальная пересборка на коммите, скоринг свежести и уверенности, гибридный поиск (full-text + vector) |
| Решения | Архитектурные решения, добытые из восьми источников, привязанные к узлам графа и отслеживаемые на устаревание |
| Health кода | 25 детерминированных маркеров, оценка 1–10 на файл по трём сигналам: риск дефектов, поддерживаемость, производительность. Ноль LLM, до 30 секунд на репозиторий из 3000 файлов |
Вики целиком генерируется без LLM: repowise init --no-prose собирает граф, git, решения и health и рендерит страницы из структуры кода. Любую часть можно позже перегенерировать моделью через repowise generate — по одной странице, директории или целиком, каждый шаг за сметой стоимости до подтверждения.
Health-скоринг с конкретным фиксом
Оценка 1–10 собирается из 25 детерминированных маркеров (сложность Мак-Кейба, brain methods, связность LCOM4, god classes, нативный Rabin-Karp детектор клонов, нетронутые хотспоты, энтропия изменений, история дефектов и другое). Веса маркеров калиброваны по реальному корпусу дефектов, а не подобраны вручную.
Рефакторинг-интеллект называет конкретный фикс — не «класс слишком большой», а Extract Class, Move Method, Break Cycle, Split File — с точными методами, рёбрами и символами, которые нужно переносить, радиусом влияния и граф-осознанным ранжированием. Extract Method доходит до intra-procedural dataflow-пасса: поднимает точный спан и выводит сигнатуру, сохраняющую поведение.
Валидация на 21 open-source репозитории в 9 языках (2826 файлов): ROC AUC 0,737 [0,683; 0,787]. В честном сравнении с CodeScene на тех же 2770 файлах repowise находит в 2,3 раза больше дефектов при фиксированном бюджете ревью (p=0,003).
Десять MCP-инструментов
Вместо инструментов вокруг сущностей (один файл, один символ) — вокруг задач: несколько целей за один вызов, полный контекст сразу.
| Инструмент | Что отвечает |
|---|---|
get_overview() |
Сводка архитектуры, карта модулей, точки входа, git-здоровье |
get_answer(question) |
Гибридная выдача (full-text + vector через RRF) с PageRank-смещением в один ответ с цитатами |
get_context(targets, include?) |
Триаж-карточка файлов, модулей и символов: сводка, сигнатуры, хотспот, governing решения |
get_symbol("file.py::Name") |
Исходник символа с точными границами строк |
search_codebase(query, kind?) |
Семантический поиск по вики с фильтром по типу |
get_risk(targets, changed_files?) |
Хотспоты, зависимые, co-change, ownership, пробелы тестов, история багов |
get_change_risk(revspec) |
Оценка дефектности коммита до мержа, 0–10, перцентиль против недавних коммитов |
get_why(query?, targets?) |
Архитектурные решения, их evidence и цепочка замен |
get_dead_code(...) |
Недостижимый код по уровню уверенности с оценкой влияния очистки |
get_health(targets?, include?) |
Маркеры по всем трём сигналам, покрытие, тренды и планы рефакторинга |
Знать, что опасно, до мержа
Три детерминированных сигнала без LLM:
- Change risk. Оценка коммита или диапазона
base..HEADот 0 до 10 по форме диффа против собственного распределения коммитов репозитория. PR-режим возвращает директивы:will_break,missing_cochanges,missing_tests,tests_to_run. - Bug history. Какие файлы и символы реально получали фиксы багов. Файл с серией недавних фиксов помечается как «магнит багов».
- Test intelligence. Импорт покрытия, поиск нетронутых хотспотов и запуск только тестов, которых касается дифф:
repowise impacted-tests HEAD~1.
Плюс PR Bot — GitHub App, который кладёт весь этот анализ на каждый pull request. Один комментарий, редактируемый на месте при каждом пуше, а зелёный PR не получает комментария вовсе. Ноль LLM-вызовов, детерминированно, код не отправляется провайдерам моделей.
Distill — экономия на чтении вывода команд
Большая часть того, что агент читает из шелла, — шум. repowise distill <cmd> сжимает вывод команды до того, как агент его прочитает: ошибки первыми, exit code сохранён.
repowise distill pytest # −61% токенов, все 11 строк падений сохранены
repowise distill git log -50 # −89% токенов
repowise saved # сколько сэкономили, в токенах и долларах
Ничего не теряется: каждая вырезка оставляет инлайн-маркер [repowise#<ref>], который repowise expand <ref> возвращает целиком.
Установка и быстрый старт
pip install repowise
cd /path/to/your/repo
repowise init --no-prose -y # бесплатно, без ключа, без вопросов
Подключение агента — MCP-сервер repowise mcp из директории репозитория:
claude mcp add repowise -- repowise mcp
Без ключа работают get_overview и get_context (синтезируются из графа, git и health-слоёв). Позже вики можно прокачать моделью через repowise generate — нужен только ANTHROPIC_API_KEY, OPENAI_API_KEY или GEMINI_API_KEY.
CLI
repowise init [PATH] # одноразовая индексация (--no-prose -y не требует LLM)
repowise generate [PATH] # написание вики моделью по требованию
repowise serve [PATH] # MCP-сервер + локальная панель на localhost:3000
repowise update [PATH] # инкрементальное обновление (секунды)
repowise watch # демон автосинхронизации
repowise health # KPI health и файлы с худшими оценками
repowise risk main..HEAD # скоринг ветки/PR на риск дефектов
repowise dead-code # отчёт о недостижимом коде
repowise distill pytest # компактный, с ошибками первыми, обратимый вывод
repowise saved # сколько сэкономила дистилляция
Экосистема
- VS Code extension: риск изменений, health в gutter и status bar, callers на hover, планы рефакторинга как CodeLens. Один установщик регистрирует MCP-сервер и отдаёт шесть инструментов GitHub Copilot.
- Workspaces: индексация нескольких репозиториев как одного целого — контракты producer↔consumer, кросс-репо co-change, федеративный MCP.
- Worktrees:
repowise initвнутри linked worktree определяет базовый чек-аут и догоняет индекс инкрементально. - Hosted-версия: repowise.dev — тот же движок под управлением для команд и enterprise (SSO/SCIM, on-prem, коммерческая лицензия без AGPL-обязательств).
Языки: 18 языков парсятся в AST, 13 на полном тире, framework-aware во всех. Добавление языка — один .scm-файл и одна запись в конфиге, без изменений в ядре парсера.
Лицензия: AGPL-3.0, свободно для личных, командных и внутренних использований.
Ссылки
- GitHub: https://github.com/repowise-dev/repowise
- Документация: https://docs.repowise.dev
- Live-демо: https://repowise.dev
Источник: https://github.com/repowise-dev/repowise