Автономная система исправления ошибок в чужом коде — которая доказуемо не ломает его при этом.
Webbles берёт незнакомый проект, сам находит в нём ошибки статическими анализаторами, генерирует минимальные исправления и проверяет каждое изменение против инварианта целостности, прежде чем принять. Работает офлайн на локальной языковой модели — код никуда не уходит.
Кликни на превью — откроется видео на YouTube.
Автоматические «починщики кода» (autofix) быстро набирают популярность, но у большинства две проблемы, из-за которых им не доверяют:
- Код уходит в чужое облако. Для приватных, коммерческих и чувствительных кодовых баз это неприемлемо.
- ИИ ломает код. Модель может «починить» одну ошибку и попутно удалить импорт, стереть перегрузку функции, исказить существующую логику — и это заметят не сразу.
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) → аудит → доставка
- Analyze — статические анализаторы находят ошибки.
- Classify — определяется тип и серьёзность.
- Prioritize — что чинить первым (учитывается каскад зависимостей: одна корневая ошибка может тянуть за собой десяток вторичных).
- Generate — исправление. Детерминированные rule-based фиксы в приоритете; LLM подключается там, где правило не подходит.
- Apply — патч применяется в песочнице.
- Validate — срабатывают guard-ы целостности (см. выше).
- Review — спорные случаи уходят в очередь на подтверждение человеком.
- Decide —
ACCEPT/REJECT/NEEDS_REVIEW. - Аудит и доставка — только проверенные изменения переносятся в оригинал.
Анализаторы под каждый язык:
| Язык | Инструменты |
|---|---|
| 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, захардкоженные секреты, небезопасная десериализация), стилевые нарушения и др.
studio.py — десктоп-приложение (на Eel): не CLI-скрипт, а окно, где можно:
- выбрать папку проекта и нажать «Исправить»;
- смотреть живой прогресс починки;
- по каждому файлу увидеть «до / после» с объяснением (почему ошибка, что изменено, как);
- вести очередь ревью — спорное подтверждать вручную;
- настраивать пайплайн (какие анализаторы включить, таймауты, dry-run);
- чат с LLM по проекту.
pip install -r requirements.txtLLM — на выбор:
- Локально: сервер 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, если хотите разрешить свободное использование.
