Dupehound: локальний детермінований детектор дублікатів коду для агентної розробки
Dupehound — це швидкий локальний інтерфейс командного рядка, який використовує сигнатури структур абстрактних синтаксичних дерев для виявлення дубльованих функцій, створених ШІ-агентами. Інтегрувавши його в процеси безперервної інтеграції або передаючи вивід назад у моделі, розробники можуть запобігти розростанню коду.
Вплив: Високий
Чому це важливо
Він вирішує проблему розростання коду через роботу ШІ-агентів повністю локально та детерміновано, без витрачання API-токенів чи використання важких моделей машинного навчання.
TL;DR
- 01Вирішує проблему розростання ШІ-коду шляхом структурного аналізу абстрактних синтаксичних дерев за допомогою tree-sitter.
- 02Працює повністю офлайн та детерміновано, скануючи мільйони рядків за лічені секунди (3.6с для VS Code).
- 03Інтегрується в CI через pre-commit хуки або GitHub Actions для блокування дублікатів у пул-реквестах.
- 04Передає структурні попередження безпосередньо агентам через CLAUDE.md для повторного використання коду.
Ключові факти
- Підтримувані мови
- TypeScript, TSX, JavaScript, Python, Rust, Go, Java, Ruby, Swift
- Швидкість сканування (VS Code 2.97M рядків)
- 3.6с на звичайному ноутбуці
- Мінімальний ліміт токенів
- 40 нормалізованих токенів на функцію
- Коди завершення CI
- 0 чисто, 1 знайдено дублікати, 2 помилка
Структурне та детерміноване порівняння на базі AST
На відміну від текстового пошуку, dupehound ігнорує коментарі, замінює ідентифікатори, рядки та числа на універсальні токени-маркери (sentinels) та аналізує структуру абстрактного синтаксичного дерева. Використовуючи k-грами з 10 токенів, рухомі хеші та алгоритм стійкого просіювання (winnowing), інструмент гарантовано виявляє будь-які спільні послідовності з 17 нормалізованих токенів. Подібність розраховується за допомогою індексу Жаккара, а кластери збігів будуються через структуру систем неперетинних множин.
Команди CLI та інтеграція
Dupehound пропонує три основні команди:
dupehound scan [path]сканує директорію, сортує кластери дублікатів за кількістю зайвих рядків та виводить оцінку надлишковості (slop score).dupehound historyзчитує об'єкти безпосередньо з бази даних Git без виконання checkout, показуючи, коли саме рівень дублювання почав зростати.dupehound checkпрацює як перевірка в CI або pre-commit хук. Інструмент індексує базову ревізію Git і перевіряє лише додані або змінені функції, повертаючи код 1 у разі виявлення дублікатів.
Спрямування ШІ-агентів на повторне використання коду
Щоб запобігти написанню дублікатів агентами, розробники можуть передавати результати dupehound check прямо у контекст мовних моделей. Додавання звіту або відповідних правил до файлів CLAUDE.md чи AGENTS.md змушує агента дослідити наявну функцію та виконати рефакторинг замість створення нової копії логіки.
Спробуй за 2 хвилини
brew install rafaelpta/dupehound/dupehound
dupehound scan .
dupehound checkbash
✓ Коли використовувати
- При активній роботі з агентними інтегрованими середовищами розробки, такими як Claude Code, Cursor, або спеціалізованими генераторами коду.
- Коли потрібен детермінований і відтворюваний механізм перевірки для CI без залежностей від мережі чи API-ключів.
- При рефакторингу великих застарілих кодових баз, написаних однією з підтримуваних мов.
Що зробити сьогодні
- Встановіть dupehound локально через Homebrew: `brew install rafaelpta/dupehound/dupehound`
- Запустіть `dupehound scan .` у поточному проєкті, щоб дізнатися рівень надлишковості коду.
- Налаштуйте pre-commit хук або GitHub Action за допомогою `dupehound check` для відхилення дубльованої логіки.
- Оновіть файли інструкцій `CLAUDE.md` або `AGENTS.md`, щоб агенти враховували звіти перевірки.
Джерела