Skip to content

Alexktzl/WEBBLES-FIX

Repository files navigation

Webbles

Автономная система исправления ошибок в чужом коде — которая доказуемо не ломает его при этом.

Webbles берёт незнакомый проект, сам находит в нём ошибки статическими анализаторами, генерирует минимальные исправления и проверяет каждое изменение против инварианта целостности, прежде чем принять. Работает офлайн на локальной языковой модели — код никуда не уходит.


🎥 Демо

Webbles — демонстрация работы

Кликни на превью — откроется видео на YouTube.


Зачем это нужно

Автоматические «починщики кода» (autofix) быстро набирают популярность, но у большинства две проблемы, из-за которых им не доверяют:

  1. Код уходит в чужое облако. Для приватных, коммерческих и чувствительных кодовых баз это неприемлемо.
  2. ИИ ломает код. Модель может «починить» одну ошибку и попутно удалить импорт, стереть перегрузку функции, исказить существующую логику — и это заметят не сразу.

Webbles решает обе:

  • Всё локально. LLM крутится на твоей машине (llama.cpp + Qwen-Coder), ни строчки кода не отправляется наружу. Опционально можно подключить внешний API.
  • Не ломает код — это гарантирует не доверие к модели, а детерминированные проверки. Патч, который потерял, задублировал или исказил хоть один существующий символ, не будет принят. На верификационных прогонах — ноль небезопасных изменений.

Главная идея: не сломать

Это фундамент всей системы. Формулируется как нерушимый инвариант:

Система не имеет права принять патч, если после него исчезли, задублировались или исказились существующие символы, либо если откат не вернул файл в исходное состояние.

Держат этот инвариант детерминированные проверки (а не языковая модель):

  • Символьная регрессия — до и после каждого патча сверяется полный набор символов (функции, классы, импорты). Пропажа или дубль → откат.
  • Net-delta — считается, что число ошибок реально уменьшилось, а не «переехало».
  • Проверка синтаксиса — патч, ломающий парсинг файла, отклоняется сразу.
  • Изолированная песочница — вся работа идёт на копии проекта; в оригинал не попадает ничего, кроме резервной копии (.webbles_backups/).

Философия: любая ошибка внутри защиты трактуется в сторону блокировки (fail-closed). Лучше не починить, чем сломать.


Как это работает

Каждая ошибка проходит конвейер стадий:

Analyze → Classify → Prioritize → Generate → Apply → Validate → Review
        → Decide (ACCEPT / REJECT / NEEDS_REVIEW) → аудит → доставка
  1. Analyze — статические анализаторы находят ошибки.
  2. Classify — определяется тип и серьёзность.
  3. Prioritize — что чинить первым (учитывается каскад зависимостей: одна корневая ошибка может тянуть за собой десяток вторичных).
  4. Generate — исправление. Детерминированные rule-based фиксы в приоритете; LLM подключается там, где правило не подходит.
  5. Apply — патч применяется в песочнице.
  6. Validate — срабатывают guard-ы целостности (см. выше).
  7. Review — спорные случаи уходят в очередь на подтверждение человеком.
  8. DecideACCEPT / REJECT / NEEDS_REVIEW.
  9. Аудит и доставка — только проверенные изменения переносятся в оригинал.

Анализаторы под каждый язык:

Язык Инструменты
Python flake8, mypy
C++ cppcheck, clang-tidy (bug-focused)
Rust clippy
C# Roslyn-анализаторы (dotnet build)
Все semgrep — поиск уязвимостей

Что умеет чинить

От стилистики и типов до реальных уязвимостей. Примеры настоящих исправлений:

Небезопасный хеш (Python, безопасность):

- return hashlib.sha1(secret)
+ return hashlib.sha256(secret)

Неявный конструктор (C++):

- Foo(const std::string &value) : m_value(value) {}
+ explicit Foo(const std::string &value) : m_value(value) {}

Строковый typeof вместо generic (C#):

- services.AddScoped(typeof(IStreamRequestHandler<Sing, Song>), typeof(SingHandler));
+ services.AddScoped<IStreamRequestHandler<Sing, Song>, SingHandler>();

Плюс: неиспользуемые импорты, ошибки типов (mypy), небезопасные вызовы (SQL-инъекции, command injection, захардкоженные секреты, небезопасная десериализация), стилевые нарушения и др.


Интерфейс — Webbles Studio

studio.py — десктоп-приложение (на Eel): не CLI-скрипт, а окно, где можно:

  • выбрать папку проекта и нажать «Исправить»;
  • смотреть живой прогресс починки;
  • по каждому файлу увидеть «до / после» с объяснением (почему ошибка, что изменено, как);
  • вести очередь ревью — спорное подтверждать вручную;
  • настраивать пайплайн (какие анализаторы включить, таймауты, dry-run);
  • чат с LLM по проекту.

Установка и запуск

pip install -r requirements.txt

LLM — на выбор:

  • Локально: сервер llama.cpp (OpenAI-совместимый), настройки в webles_config.json.
  • Внешний API: ключ в .env (см. .env.example).

Запуск:

python studio.py                      # десктоп-интерфейс
python run_agent.py <путь-к-проекту>  # из командной строки

Поддерживаемые языки и статус

Язык Статус
Python зрелый (основной)
Rust поддержан, ранняя стадия
C++ поддержан, ранняя стадия
C# поддержан, ранняя стадия

Это прототип с проработанным ядром безопасности, а не готовый enterprise-продукт. Python-ветка отлажена лучше всего; остальные языки идут по тому же процессу. Комментарии в коде — на русском.


Лицензия

Не выбрана. Рекомендация — MIT (простая, разрешительная). Добавьте файл LICENSE, если хотите разрешить свободное использование.

About

Автономная мультиязычная система исправления ошибок в коде с LLM‑оркестрацией

Topics

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

No releases published

Packages

 
 
 

Contributors