hunk: terminal diff viewer для AI-сгенерированных изменений

hunk — это review-first terminal diff viewer для AI-сгенерированных changeset-ов, построенный на OpenTUI и Pierre diffs.

  • multi-file review stream с sidebar-навигацией

  • inline AI- и agent-аннотации рядом с кодом

  • split, stack и responsive auto layouts

  • watch-режим: автообновление при изменении ветки

  • кастомные шорткаты для accept/reject hunk-ов

  • поддержка нескольких git-провайдеров (GitHub, GitLab, локальные patches)

Зачем ещё один diff-viewer

Классические diff-инструменты (git diff, GitHub UI, IntelliJ diff) спроектированы под человеческие PR: несколько hunk-ов, понятная история, чёткое авторство. AI-агенты ломают эту модель:

  • PR от агента может содержать 200 файлов и 5000 строк изменений.

  • Часть hunk-ов — реальная фича, часть — рефакторинг ради рефакторинга, часть — AI просто "причесал" то, что не просили трогать.

  • Reviewer должен быстро отделить релевантное от шума.

hunk оптимизирует именно этот процесс: показать всё, дать быстро отсеять, сфокусироваться на сути.

Установка

npm install -g @modem/hunk
# или
brew install modem-dev/tap/hunk

Использование

Показать diff в текущей ветке против main:

cd your-repo
hunk main..HEAD

Watch-режим — обновляется live при каждом коммите:

hunk --watch main..agent/feature-x

С PR-номером GitHub:

hunk pr 123

Шорткаты

В режиме review:

  • j / k — следующий / предыдущий hunk.

  • J / K — следующий / предыдущий файл.

  • space — пометить hunk как reviewed.

  • a — accept (применить в local branch).

  • r — reject (отметить как нежелательное).

  • c — добавить inline комментарий.

  • ? — справка.

Все действия пишутся в .hunk/review.log, чтобы reviewer мог потом скопом отправить решения в PR-комментарий или в follow-up patches.

AI-аннотации

Если коммиты в branch созданы агентом (Claude Code, Cursor, Aider), агент часто пишет commit-сообщение с обоснованием. hunk вытаскивает эти обоснования и показывает их рядом с конкретными hunk-ами:

┌─ src/auth/login.ts ────────────────────────────┐
│ AI: "Extracted validation logic into a separate │
│  function for testability. No behaviour change." │
├─────────────────────────────────────────────────┤
│ -function login(email, password) {              │
│ -  if (!email || !email.includes('@')) {        │
│ -    return Error('invalid email')              │
│ -  }                                            │
│ ...                                             │
└─────────────────────────────────────────────────┘

Для reviewer это сразу маркер: «это не bug fix, это рефакторинг — смотреть с правильным фоном».

Layouts

  • split — два панели (старый ↔ новый код).

  • stack — построчно (одна панель, маркеры +/-).

  • responsive auto — выбирает в зависимости от ширины терминала.

hunk --layout=split main..HEAD
hunk --layout=stack main..HEAD

Когда брать

  • У вас регулярно PRs от AI-агентов на сотни файлов.

  • Веб-UI GitHub/GitLab слишком медленный для таких PR.

  • Вы предпочитаете терминал.

  • Нужен watch-режим для активно меняющихся feature-branches.

Лицензия

MIT. Активная разработка. Issue tracker: github.com/modem-dev/hunk/issues.