@smallfishworld/open-code-review-svn 1.11.2-svn.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,231 @@
1
+ <div align="center">
2
+ <a href="https://open-codereview.ai">
3
+ <img src="imgs/logo-core.svg" alt="OpenCodeReview logo" width="180" />
4
+ </a>
5
+ <h1>OpenCodeReview</h1>
6
+ </div>
7
+
8
+ <p align="center">
9
+ <a href="https://trendshift.io/repositories/41087?utm_source=repository-badge&amp;utm_medium=badge&amp;utm_campaign=badge-repository-41087" target="_blank" rel="noopener noreferrer">
10
+ <img src="https://trendshift.io/api/badge/repositories/41087" alt="alibaba%2Fopen-code-review | Trendshift" style="width: 280px; height: 60px;" width="280" height="60" />
11
+ </a>
12
+ <a href="https://trendshift.io/repositories/41087" target="_blank">
13
+ <img src="https://trendshift.io/api/badge/trendshift/repositories/41087/weekly?language=Go" alt="alibaba%2Fopen-code-review | Trendshift" style="width: 280px; height: 60px;" width="280" height="60" />
14
+ </a>
15
+ </p>
16
+ <p align="center">
17
+ <a href="https://www.npmjs.com/package/@smallfishworld/open-code-review-svn"><img alt="npm" src="https://img.shields.io/npm/v/@smallfishworld/open-code-review-svn?style=flat-square" /></a>
18
+ <a href="https://github.com/alibaba/open-code-review/actions/workflows/release.yml"><img alt="Build status" src="https://img.shields.io/github/actions/workflow/status/alibaba/open-code-review/release.yml?style=flat-square" /></a>
19
+ <a href="https://github.com/alibaba/open-code-review/blob/main/LICENSE"><img alt="License" src="https://img.shields.io/github/license/alibaba/open-code-review?style=flat-square" /></a>
20
+ <a href="https://deepwiki.com/alibaba/open-code-review"><img alt="Ask DeepWiki" src="https://deepwiki.com/badge.svg" /></a>
21
+ <a href="https://www.bestpractices.dev/projects/13328"><img alt="OpenSSF Best Practices" src="https://img.shields.io/badge/OpenSSF-Gold-D4AF37?style=flat-square" /></a>
22
+ </p>
23
+ <p align="center">
24
+ <a href="#supported-platforms"><img alt="Windows" src="https://img.shields.io/badge/Windows-supported-blue.svg" /></a>
25
+ <a href="#supported-platforms"><img alt="macOS" src="https://img.shields.io/badge/macOS-supported-blue.svg" /></a>
26
+ <a href="#supported-platforms"><img alt="Linux" src="https://img.shields.io/badge/Linux-supported-blue.svg" /></a>
27
+ <a href="#supported-agents"><img alt="Claude Code" src="https://img.shields.io/badge/Claude_Code-supported-blueviolet.svg" /></a>
28
+ <a href="#supported-agents"><img alt="Codex" src="https://img.shields.io/badge/Codex-supported-blueviolet.svg" /></a>
29
+ <a href="#supported-agents"><img alt="Cursor" src="https://img.shields.io/badge/Cursor-supported-blueviolet.svg" /></a>
30
+ </p>
31
+ <p align="center">
32
+ <a href="README.md">English</a> | <a href="README.zh-CN.md">简体中文</a> | <a href="README.ja-JP.md">日本語</a> | <a href="README.ko-KR.md">한국어</a> | Русский
33
+ </p>
34
+
35
+ ---
36
+
37
+ ## Что такое Open Code Review?
38
+
39
+ Open Code Review — это CLI-инструмент для код-ревью на основе ИИ. Он появился как внутренний официальный ИИ-ассистент код-ревью Alibaba Group: за последние два года им воспользовались десятки тысяч разработчиков, и он выявил миллионы дефектов в коде. После тщательной проверки в огромных масштабах мы превратили его в open-source-проект для сообщества. Чтобы начать работу, достаточно настроить эндпоинт модели.
40
+
41
+ Инструмент читает git-диффы, отправляет изменённые файлы настраиваемой LLM через агента с поддержкой вызова инструментов (tool use) и генерирует структурированные ревью-комментарии с точностью до строки. Агент может читать полное содержимое файлов, искать по кодовой базе, заглядывать в другие изменённые файлы за контекстом и выполнять глубокое ревью — а не только давать поверхностные замечания по диффу. Помимо ревью диффов, `ocr scan` позволяет проверять файлы целиком — удобно для аудита незнакомой кодовой базы или каталогов без значимого диффа.
42
+
43
+ Подробнее на [официальном сайте](https://open-codereview.ai).
44
+
45
+ ![Highlights](imgs/highlights-ru.png)
46
+
47
+ ## Бенчмарк
48
+
49
+ > По сравнению с агентами общего назначения (Claude Code), Open Code Review при той же базовой модели достигает значительно более высоких показателей **Precision** и **F1**, потребляя лишь **~1/9 токенов** и выполняя ревью быстрее. При этом показатель Recall ниже, чем у агентов общего назначения — это осознанный компромисс в пользу точности и минимального шума.
50
+
51
+ Бенчмарк собран на основе реальных код-ревью и включает **50** популярных open-source-репозиториев, **200** реальных пул-реквестов и **10** языков программирования. Разметку из **1 505** дефектов перекрёстно проверили более 80 ведущих инженеров.
52
+
53
+ <a href="https://huggingface.co/datasets/Alibaba-Aone/aacr-bench"><img src="https://huggingface.co/favicon.ico" alt="Hugging Face" width="20" height="20" /> Открыть датасет AACR-Bench на Hugging Face</a>.
54
+
55
+ | Метрика | Что измеряет | Почему важна |
56
+ |---------|-------------|--------------|
57
+ | **F1** | Гармоническое среднее precision и recall | Лучший единый показатель качества ревью |
58
+ | **Precision** | Доля найденных проблем, являющихся реальными дефектами | Выше = меньше ложных срабатываний |
59
+ | **Recall** | Доля реальных дефектов, которые были найдены | Выше = меньше пропущенных проблем |
60
+ | **Avg Time** | Время выполнения одного ревью | Влияет на задержки в CI-пайплайне |
61
+ | **Avg Token** | Суммарное потребление токенов за ревью | Прямо влияет на стоимость API |
62
+
63
+ ![Benchmark](imgs/benchmark-ru.png)
64
+
65
+ ## Почему Open Code Review?
66
+
67
+ ### Проблема агентов общего назначения
68
+
69
+ Если вы использовали для код-ревью агентов общего назначения, например Claude Code со Skills, вы наверняка сталкивались с такими проблемами:
70
+
71
+ - **Неполное покрытие** — на крупных ченджсетах агенты склонны «срезать углы»: выборочно проверяют часть файлов и пропускают остальные.
72
+ - **Дрейф позиций** — найденные проблемы часто не совпадают с реальным местом в коде: номера строк и ссылки на файлы «уезжают» от цели.
73
+ - **Нестабильное качество** — Skills, управляемые естественным языком, трудно отлаживать, и качество ревью заметно колеблется при небольших изменениях промпта.
74
+
75
+ Первопричина: чисто языковая архитектура не накладывает жёстких ограничений на процесс ревью.
76
+
77
+ ### Ключевая идея: детерминированная инженерия × агент
78
+
79
+ Ключевая философия Open Code Review — сочетать детерминированную инженерию и агента так, чтобы каждый занимался тем, что у него получается лучше всего.
80
+
81
+ **Детерминированная инженерия — жёсткие гарантии**
82
+
83
+ Для тех шагов ревью, где *нельзя ошибаться*, корректность гарантирует инженерная логика, а не языковая модель:
84
+
85
+ - **Точный отбор файлов** — точно определяет, какие файлы нуждаются в ревью, а какие следует отфильтровать, гарантируя, что ни одно важное изменение не будет упущено.
86
+ - **Группировка связанных файлов** — объединяет связанные файлы в одну единицу ревью (например, `message_en.properties` и `message_zh.properties`). Каждая группа обрабатывается отдельным субагентом в изолированном контексте. Подход «разделяй и властвуй» сохраняет стабильность при очень больших изменениях и позволяет выполнять ревью параллельно.
87
+ - **Точное сопоставление правил** — подбирает правила ревью с учётом особенностей каждого файла, удерживая внимание модели на задаче и устраняя лишний информационный шум. Сопоставление по шаблонам работает стабильнее и предсказуемее, чем управление правилами только на естественном языке.
88
+ - **Внешние модули позиционирования и рефлексии** — независимые модули позиционирования комментариев и рефлексии над комментариями системно повышают точность как расположения, так и содержания замечаний ИИ.
89
+
90
+ **Агент — динамические решения**
91
+
92
+ Сильные стороны агента сосредоточены там, где они важнее всего, — в динамических решениях и динамическом доборе контекста:
93
+
94
+ - **Промпты, заточенные под сценарий** — шаблоны промптов, глубоко оптимизированные под код-ревью: выше качество при меньшем расходе токенов.
95
+ - **Специализированный набор инструментов** — создан на основе анализа вызовов инструментов в реальных проектах: частоты вызовов, доли повторных обращений к каждому инструменту и влияния новых инструментов на всю цепочку. Такой набор работает при код-ревью стабильнее и предсказуемее, чем универсальные инструменты агента.
96
+
97
+ ## Как использовать
98
+
99
+ ### Предварительные требования
100
+
101
+ - **Git >= 2.41** — требуется для ревью рабочей копии Git, диапазона и отдельного коммита.
102
+ - **SVN >= 1.9** — требуется только для ревью незакоммиченных изменений в рабочей копии SVN.
103
+
104
+ ### CLI
105
+
106
+ #### Установка
107
+
108
+ ```bash
109
+ npm install -g @smallfishworld/open-code-review-svn
110
+ ```
111
+
112
+ После установки команда `ocr` доступна глобально.
113
+
114
+ Другие способы установки (скрипт установки, бинарный файл из GitHub Release, сборка из исходников) описаны в [руководстве по установке](https://open-codereview.ai/docs/installation).
115
+
116
+ #### Быстрый старт
117
+
118
+ **1. Настройте LLM**
119
+
120
+ Перед запуском ревью необходимо настроить LLM, если только вы не используете [режим делегирования](https://open-codereview.ai/docs/delegate).
121
+
122
+ ```bash
123
+ ocr config provider # Выбрать встроенного провайдера или добавить пользовательский
124
+ ocr config model # Выбрать модель для активного провайдера
125
+ ```
126
+
127
+ ![Provider setup](imgs/providers.jpg)
128
+
129
+ Интерактивный UI проведёт вас через выбор провайдера, ввод API-ключа и настройку модели, после чего автоматически проверит подключение.
130
+
131
+ Настройка через CLI, переменные окружения, пользовательские провайдеры и другие расширенные параметры описаны в [руководстве по конфигурации](https://open-codereview.ai/docs/configuration).
132
+
133
+ **2. Запустите ревью**
134
+
135
+ ```bash
136
+ cd your-project
137
+
138
+ # Режим рабочей копии — ревью всех staged, unstaged и untracked изменений
139
+ ocr review
140
+
141
+ # Режим рабочей копии SVN — ревью изменённых, добавленных, удалённых и неотслеживаемых файлов
142
+ # Режимы диапазона и отдельного коммита пока доступны только для Git.
143
+ ocr review --repo /path/to/svn-working-copy
144
+
145
+ # Диапазон веток — просматривает изменения feature-branch с момента её отделения от main (режим merge-base)
146
+ ocr review --from main --to feature-branch
147
+
148
+ # Один коммит
149
+ ocr review --commit abc123
150
+
151
+ # Возобновить прерванное ревью диапазона или одного коммита
152
+ ocr session list
153
+ ocr review --from main --to feature-branch --resume <session-id>
154
+
155
+ # Полнофайловое сканирование — ревью целых файлов вместо диффа (история git не нужна)
156
+ ocr scan # сканировать весь репозиторий
157
+ ocr scan --path internal/agent # сканировать каталог или конкретные файлы
158
+ ocr scan --resume <session-id> # возобновить прерванное полнофайловое сканирование
159
+
160
+ # Сохранить результаты в файл (рекомендуется для хост-агентов ИИ)
161
+ ocr review --format json --output result.json
162
+
163
+ # Режим делегирования — ИИ-агент сам выполняет ревью
164
+ # OCR отвечает за выбор файлов и разрешение правил; настройка LLM не требуется
165
+ ocr delegate preview
166
+ ocr delegate rule src/main.go src/handler.go
167
+ ```
168
+
169
+ ### Ревью рабочей копии SVN
170
+
171
+ Этот форк поддерживает ревью незакоммиченных изменений в рабочей копии SVN (Apache Subversion) перед коммитом. OCR автоматически определяет корень рабочей копии, поэтому команду можно запускать из корня или любого подкаталога.
172
+
173
+ В режиме рабочей копии SVN поддерживаются:
174
+
175
+ - Изменённые, запланированные к добавлению и запланированные к удалению файлы из `svn status`.
176
+ - Файлы и каталоги вне системы контроля версий, включая рекурсивное обнаружение файлов внутри таких каталогов.
177
+ - Текстовые и бинарные изменения, имена файлов с пробелами, а также те же правила ревью и форматы вывода, что и для рабочей копии Git.
178
+
179
+ Проверка текущей рабочей копии SVN перед коммитом:
180
+
181
+ ```bash
182
+ cd /path/to/svn-working-copy
183
+ svn status
184
+ ocr review
185
+ ```
186
+
187
+ Можно также явно указать рабочую копию и сохранить результат:
188
+
189
+ ```bash
190
+ ocr review --repo /path/to/svn-working-copy
191
+ ocr review --repo /path/to/svn-working-copy --format json --output svn-review.json
192
+ ```
193
+
194
+ Сейчас SVN поддерживает только ревью рабочей копии. Режимы на основе истории Git, включая `--from`, `--to`, `--commit` и возобновление сессии, недоступны для рабочих копий SVN. Файлы, игнорируемые SVN, не проверяются; чтобы включить их, выполните `svn add` или измените свойства игнорирования SVN.
195
+
196
+ ## Документация
197
+
198
+ Полная документация доступна на **[open-codereview.ai/docs](https://open-codereview.ai/docs)**:
199
+
200
+ - [Быстрый старт](https://open-codereview.ai/docs/quickstart) — установка и запуск первого ревью
201
+ - [Установка](https://open-codereview.ai/docs/installation) — все платформы и менеджеры пакетов
202
+ - [Справочник CLI](https://open-codereview.ai/docs/cli-reference) — все команды и флаги
203
+ - [Правила ревью](https://open-codereview.ai/docs/review-rules) — кастомизация правил ревью, фильтрация и таргетинг по путям
204
+ - [Конфигурация](https://open-codereview.ai/docs/configuration) — ключи конфигурации и переменные окружения
205
+ - [MCP-сервер](https://open-codereview.ai/docs/mcp) — расширение агента ревью внешними инструментами
206
+ - Интеграции с кодинг-агентами — выберите используемую платформу
207
+ - [Claude Code](plugins/open-code-review/README.md#claude-code) — установка плагина со slash-командами для ревью
208
+ - [Codex](plugins/open-code-review/README.md#codex) — установка плагина с вызываемыми навыками ревью
209
+ - [Cursor](plugins/open-code-review/README.md#cursor) — установка плагина с переносимыми навыками ревью
210
+ - [OpenCode](plugins/open-code-review/opencode/README.md) — установка нативных инструментов ревью и slash-команд
211
+ - [QCA Forward](plugins/open-code-review/qca/README.md) — запуск режима делегирования с хост-моделью QCA и готовым к публикации шаблоном
212
+ - [Агенты с поддержкой Skill](https://open-codereview.ai/docs/agent-skill) — установка переносимого навыка агента
213
+ - Режимы выполнения ревью — после интеграции выберите, какая LLM выполняет ревью
214
+ - [По умолчанию (под управлением OCR)](https://open-codereview.ai/docs/configuration) — OCR выполняет ревью с помощью настроенной LLM
215
+ - [Режим делегирования](https://open-codereview.ai/docs/delegate) — кодинг-агент выполняет ревью с помощью собственной LLM; API-ключ для OCR не требуется
216
+ - [Интеграция с CI/CD](https://open-codereview.ai/docs/cicd) — GitHub Actions, GitLab CI, GitFlic CI и Gerrit
217
+ - [Просмотр сессий](https://open-codereview.ai/docs/viewer) — просмотр и воспроизведение сессий ревью в браузере
218
+ - [Телеметрия](https://open-codereview.ai/docs/telemetry) — интеграция с OpenTelemetry для наблюдаемости
219
+ - [FAQ](https://open-codereview.ai/docs/faq) — частые вопросы и устранение неполадок
220
+
221
+ ## Участие в разработке
222
+
223
+ Этот проект существует благодаря всем, кто вносит свой вклад. В [CONTRIBUTING.ru-RU.md](CONTRIBUTING.ru-RU.md) описаны настройка окружения разработки, рекомендации по коду и порядок отправки пул-реквестов.
224
+
225
+ <a href="https://github.com/alibaba/open-code-review/graphs/contributors">
226
+ <img src="https://contrib.rocks/image?repo=alibaba/open-code-review" />
227
+ </a>
228
+
229
+ ## Лицензия
230
+
231
+ [Apache-2.0](LICENSE) — Copyright 2026 Alibaba
@@ -0,0 +1,231 @@
1
+ <div align="center">
2
+ <a href="https://open-codereview.ai">
3
+ <img src="imgs/logo-core.svg" alt="OpenCodeReview logo" width="180" />
4
+ </a>
5
+ <h1>OpenCodeReview</h1>
6
+ </div>
7
+
8
+ <p align="center">
9
+ <a href="https://trendshift.io/repositories/41087?utm_source=repository-badge&amp;utm_medium=badge&amp;utm_campaign=badge-repository-41087" target="_blank" rel="noopener noreferrer">
10
+ <img src="https://trendshift.io/api/badge/repositories/41087" alt="alibaba%2Fopen-code-review | Trendshift" style="width: 280px; height: 60px;" width="280" height="60" />
11
+ </a>
12
+ <a href="https://trendshift.io/repositories/41087" target="_blank">
13
+ <img src="https://trendshift.io/api/badge/trendshift/repositories/41087/weekly?language=Go" alt="alibaba%2Fopen-code-review | Trendshift" style="width: 280px; height: 60px;" width="280" height="60" />
14
+ </a>
15
+ </p>
16
+ <p align="center">
17
+ <a href="https://www.npmjs.com/package/@smallfishworld/open-code-review-svn"><img alt="npm" src="https://img.shields.io/npm/v/@smallfishworld/open-code-review-svn?style=flat-square" /></a>
18
+ <a href="https://github.com/alibaba/open-code-review/actions/workflows/release.yml"><img alt="Build status" src="https://img.shields.io/github/actions/workflow/status/alibaba/open-code-review/release.yml?style=flat-square" /></a>
19
+ <a href="https://github.com/alibaba/open-code-review/blob/main/LICENSE"><img alt="License" src="https://img.shields.io/github/license/alibaba/open-code-review?style=flat-square" /></a>
20
+ <a href="https://deepwiki.com/alibaba/open-code-review"><img alt="Ask DeepWiki" src="https://deepwiki.com/badge.svg" /></a>
21
+ <a href="https://www.bestpractices.dev/projects/13328"><img alt="OpenSSF Best Practices" src="https://img.shields.io/badge/OpenSSF-Gold-D4AF37?style=flat-square" /></a>
22
+ </p>
23
+ <p align="center">
24
+ <a href="#supported-platforms"><img alt="Windows" src="https://img.shields.io/badge/Windows-supported-blue.svg" /></a>
25
+ <a href="#supported-platforms"><img alt="macOS" src="https://img.shields.io/badge/macOS-supported-blue.svg" /></a>
26
+ <a href="#supported-platforms"><img alt="Linux" src="https://img.shields.io/badge/Linux-supported-blue.svg" /></a>
27
+ <a href="#supported-agents"><img alt="Claude Code" src="https://img.shields.io/badge/Claude_Code-supported-blueviolet.svg" /></a>
28
+ <a href="#supported-agents"><img alt="Codex" src="https://img.shields.io/badge/Codex-supported-blueviolet.svg" /></a>
29
+ <a href="#supported-agents"><img alt="Cursor" src="https://img.shields.io/badge/Cursor-supported-blueviolet.svg" /></a>
30
+ </p>
31
+ <p align="center">
32
+ <a href="README.md">English</a> | 简体中文 | <a href="README.ja-JP.md">日本語</a> | <a href="README.ko-KR.md">한국어</a> | <a href="README.ru-RU.md">Русский</a>
33
+ </p>
34
+
35
+ ---
36
+
37
+ ## Open Code Review 是什么?
38
+
39
+ Open Code Review 是一款 AI 驱动的代码审查 CLI 工具。它的前身是阿里集团内部官方 AI 代码审查助手,过去两年在内部服务了数万开发者,识别了数百万个代码缺陷。经过大规模充分验证后,我们将其孵化为开源项目,对社区开放。只需配置一个模型端点即可使用。
40
+
41
+ 它读取 Git diff,通过具备工具调用能力的 Agent 将变更文件发送至可配置的 LLM,生成具有行级精度的结构化审查意见。Agent 可以读取完整文件内容、搜索代码库、检查其他变更文件以获取上下文,从而进行深度审查——而非仅停留在表面的 diff 反馈。除了 diff 审查,`ocr scan` 可以审查整个文件,适用于审计不熟悉的代码库或没有有意义 diff 的目录。
42
+
43
+ 访问[官方网站](https://open-codereview.ai)了解更多信息。
44
+
45
+ ![Highlights](imgs/highlights-zh.png)
46
+
47
+ ## 基准测试
48
+
49
+ > 相比通用 Agent(Claude Code),Open Code Review 在相同底层模型下取得了显著更高的 **准确率(Precision)** 与 **F1 综合得分**,同时仅消耗 **约 1/9 的 token**、审查更快。但召回率(Recall)低于通用 Agent——这是以精准度换取低噪声的设计取舍。
50
+
51
+ 基于真实场景的代码审查基准测试,从 **50** 个热门开源仓库中精选 **200** 个真实的 Pull Request,覆盖 **10** 种编程语言——由 80+ 位资深工程师交叉标注验证(共 **1,505** 个标注缺陷)。
52
+
53
+ <a href="https://huggingface.co/datasets/Alibaba-Aone/aacr-bench"><img src="https://huggingface.co/favicon.ico" alt="Hugging Face" width="20" height="20" /> 在 Hugging Face 上探索 AACR-Bench 数据集</a>。
54
+
55
+ | 指标 | 含义 | 为什么重要 |
56
+ |------|------|-----------|
57
+ | **F1** | 准确率与召回率的调和均值 | 综合衡量审查质量的最佳单一指标 |
58
+ | **准确率 (Precision)** | 报告的问题中真正有效的比例 | 越高 = 误报越少,减少人工确认成本 |
59
+ | **召回率 (Recall)** | 真实缺陷中被发现的比例 | 越高 = 漏报越少,更多问题不会遗漏 |
60
+ | **平均耗时 (Avg Time)** | 每次审查的实际耗时 | 决定 CI 流水线的等待时间 |
61
+ | **平均 Token (Avg Token)** | 每次审查消耗的总 token 数 | 直接影响 API 使用成本 |
62
+
63
+ ![Benchmark](imgs/benchmark-zh.png)
64
+
65
+ ## 为什么选择 Open Code Review?
66
+
67
+ ### 通用 Agent 的局限
68
+
69
+ 如果你深度用过 Claude Code 等通用 Agent + Skills 方案做代码审查,可能对以下问题深有同感:
70
+
71
+ - **覆盖不全** —— 变更较大时,Agent 倾向于"偷懒",选择性地审查部分文件,导致遗漏。
72
+ - **位置漂移** —— 报告的问题与实际代码位置常常对不上,出现行号或文件偏移。
73
+ - **效果不稳定** —— 基于自然语言驱动的 Skills 难以调试,审查质量因提示词的细微差异而大幅波动。
74
+
75
+ 这些问题的根源在于:纯语言驱动的架构缺乏对审查流程的强约束。
76
+
77
+ ### 核心设计:确定性工程 × Agent 混合驱动
78
+
79
+ Open Code Review 的核心设计理念是将确定性工程与 Agent 结合,各司其职。
80
+
81
+ **确定性工程——负责强约束**
82
+
83
+ 对代码审查场景中"不能出错"的环节,由工程逻辑而非语言模型来保证:
84
+
85
+ - **精准的文件筛选** —— 明确哪些文件需要审查、哪些应当过滤,确保真正重要的改动一个不漏。
86
+ - **智能的文件打包** —— 将关联文件归并为同一审查单元(例如 `message_en.properties` 与 `message_zh.properties` 会被打包在一起)。每个包会作为 sub-agent 进行任务,它们之间的上下文是隔离的——这一分治策略在超大变更场景下表现更为稳定,同时天然支持并发审查。
87
+ - **精细化规则匹配** —— 针对不同文件的特征,匹配对应的审查规则,确保模型的注意力足够聚焦,从源头规避信息噪声的干扰。相比纯语言驱动的规则引导,基于模板引擎的规则匹配行为更稳定、结果更可预期。
88
+ - **外挂的定位与反思组件** —— 独立的评论定位模块与评论反思模块,系统性地提升 AI 反馈的位置准确性与内容准确性。
89
+
90
+ **Agent——负责动态决策**
91
+
92
+ 将 Agent 的优势集中发挥在它真正擅长的地方——动态决策、动态召回上下文:
93
+
94
+ - **场景化提示词调优** —— 针对代码审查场景深度优化提示词模板,在提升效果的同时有效降低 Token 消耗。
95
+ - **场景化工具集沉淀** —— 基于对大量线上数据中工具调用轨迹的深入分析,包括不同工具的调用频率分布、单一工具的重复调用率、新增工具对整体调用链路的影响等多维度分析,从而对通用 Agent 工具集进行取舍与拆分,最终沉淀出一套在代码审查场景下效果更稳定、行为更可预期的专属工具集。
96
+
97
+ ## 如何使用
98
+
99
+ ### 前置条件
100
+
101
+ - **Git >= 2.41** — Git 工作区、区间和单提交审查需要 Git。
102
+ - **SVN >= 1.9** — 仅审查 SVN 工作副本中的未提交变更时需要 SVN。
103
+
104
+ ### CLI
105
+
106
+ #### 安装
107
+
108
+ ```bash
109
+ npm install -g @smallfishworld/open-code-review-svn
110
+ ```
111
+
112
+ 安装后,`ocr` 命令即可全局使用。
113
+
114
+ 其他安装方式(安装脚本、GitHub Release 二进制、源码构建),详见[安装指南](https://open-codereview.ai/docs/installation)。
115
+
116
+ #### 快速开始
117
+
118
+ **1. 配置 LLM**
119
+
120
+ 在审查代码之前,必须先配置 LLM。除非你使用[委托模式](https://open-codereview.ai/docs/delegate)。
121
+
122
+ ```bash
123
+ ocr config provider # 选择内置供应商或添加自定义供应商
124
+ ocr config model # 为当前供应商选择模型
125
+ ```
126
+
127
+ ![Provider setup](imgs/providers.jpg)
128
+
129
+ 交互式界面会引导你完成供应商选择、API Key 输入和模型配置,完成后自动测试连通性。
130
+
131
+ 命令行设置、环境变量、自定义供应商等高级配置,详见[配置指南](https://open-codereview.ai/docs/configuration)。
132
+
133
+ **2. 开始审查**
134
+
135
+ ```bash
136
+ cd your-project
137
+
138
+ # 工作区模式 —— 审查所有暂存、未暂存和未跟踪的变更
139
+ ocr review
140
+
141
+ # SVN 工作区模式 —— 审查修改、新增、删除及未版本控制的文件
142
+ # 区间和单提交模式目前仅支持 Git。
143
+ ocr review --repo /path/to/svn-working-copy
144
+
145
+ # 分支范围 —— 评审 feature-branch 与 main 分叉后的变更(合并基准模式)
146
+ ocr review --from main --to feature-branch
147
+
148
+ # 单个提交
149
+ ocr review --commit abc123
150
+
151
+ # 恢复中断的区间或单 commit 评审
152
+ ocr session list
153
+ ocr review --from main --to feature-branch --resume <session-id>
154
+
155
+ # 全量文件扫描 —— 审查整个文件而非 diff(无需 git 历史)
156
+ ocr scan # 扫描整个仓库
157
+ ocr scan --path internal/agent # 扫描指定目录或文件
158
+ ocr scan --resume <session-id> # 恢复中断的全量文件扫描
159
+
160
+ # 将结果输出到文件(AI 宿主 agent 推荐)
161
+ ocr review --format json --output result.json
162
+
163
+ # 委托模式 — 让你的 AI 编程 agent 自己执行评审
164
+ # OCR 负责文件选择和规则解析;无需配置 LLM
165
+ ocr delegate preview
166
+ ocr delegate rule src/main.go src/handler.go
167
+ ```
168
+
169
+ ### SVN 工作副本审查
170
+
171
+ 此分支支持在提交前审查 SVN(Apache Subversion)工作副本中尚未提交的变更。OCR 会自动识别工作副本根目录,因此可以在根目录或任意子目录中执行命令。
172
+
173
+ SVN 工作区模式当前支持:
174
+
175
+ - `svn status` 报告的已修改、计划新增和计划删除文件。
176
+ - 未版本控制的文件和目录,包括递归发现未版本控制目录中的文件。
177
+ - 文本及二进制变更、包含空格的文件名,以及 Git 工作区审查所使用的相同规则与输出格式。
178
+
179
+ 提交前审查当前 SVN 工作副本:
180
+
181
+ ```bash
182
+ cd /path/to/svn-working-copy
183
+ svn status
184
+ ocr review
185
+ ```
186
+
187
+ 也可以显式指定工作副本并保存审查结果:
188
+
189
+ ```bash
190
+ ocr review --repo /path/to/svn-working-copy
191
+ ocr review --repo /path/to/svn-working-copy --format json --output svn-review.json
192
+ ```
193
+
194
+ SVN 当前仅支持工作区审查。`--from`、`--to`、`--commit` 和会话恢复等依赖 Git 历史的模式不适用于 SVN 工作副本。被 SVN 忽略的文件不会参与审查;如需审查,请先执行 `svn add` 或调整 SVN 忽略属性。
195
+
196
+ ## 文档
197
+
198
+ 完整文档见 **[open-codereview.ai/docs](https://open-codereview.ai/docs)**:
199
+
200
+ - [快速开始](https://open-codereview.ai/docs/quickstart) —— 安装并运行你的第一次评审
201
+ - [安装](https://open-codereview.ai/docs/installation) —— 覆盖各平台与包管理器
202
+ - [CLI 参考](https://open-codereview.ai/docs/cli-reference) —— 所有命令与参数
203
+ - [评审规则](https://open-codereview.ai/docs/review-rules) —— 深度定制规则进行评审,过滤路径、指定路径等
204
+ - [配置](https://open-codereview.ai/docs/configuration) —— 配置项与环境变量
205
+ - [MCP 服务器](https://open-codereview.ai/docs/mcp) —— 用外部工具扩展评审 agent
206
+ - 编程 Agent 集成 —— 选择你使用的平台
207
+ - [Claude Code](plugins/open-code-review/README.md#claude-code) —— 安装包含评审斜杠命令的插件
208
+ - [Codex](plugins/open-code-review/README.md#codex) —— 安装包含可调用评审 Skill 的插件
209
+ - [Cursor](plugins/open-code-review/README.md#cursor) —— 安装包含可移植评审 Skill 的插件
210
+ - [OpenCode](plugins/open-code-review/opencode/README.md) —— 安装原生评审工具和斜杠命令
211
+ - [QCA Forward](plugins/open-code-review/qca/README.md) —— 使用 QCA 宿主模型运行委托模式,并提供可发布的模板
212
+ - [兼容 Skill 的 Agent](https://open-codereview.ai/docs/agent-skill) —— 安装可移植的 Agent Skill
213
+ - 评审执行模式 —— 完成集成后,选择由哪个 LLM 执行评审
214
+ - [默认模式(OCR 驱动)](https://open-codereview.ai/docs/configuration) —— OCR 使用其已配置的 LLM 执行评审
215
+ - [委托模式](https://open-codereview.ai/docs/delegate) —— 编程 Agent 使用自身的 LLM 执行评审;无需 OCR API Key
216
+ - [CI/CD 集成](https://open-codereview.ai/docs/cicd) —— 支持 GitHub Actions、GitLab CI、GitFlic CI、Gerrit 集成
217
+ - [会话查看器](https://open-codereview.ai/docs/viewer) —— 在浏览器中浏览和回放评审会话
218
+ - [遥测](https://open-codereview.ai/docs/telemetry) —— OpenTelemetry 集成,用于可观测性
219
+ - [FAQ](https://open-codereview.ai/docs/faq) —— 常见问题与故障排查
220
+
221
+ ## 贡献
222
+
223
+ 感谢所有为本项目做出贡献的人。参见 [CONTRIBUTING.zh-CN.md](CONTRIBUTING.zh-CN.md) 了解开发环境搭建、编码规范以及如何提交 Pull Request。
224
+
225
+ <a href="https://github.com/alibaba/open-code-review/graphs/contributors">
226
+ <img src="https://contrib.rocks/image?repo=alibaba/open-code-review" />
227
+ </a>
228
+
229
+ ## 许可证
230
+
231
+ [Apache-2.0](LICENSE) — Copyright 2026 Alibaba
package/bin/ocr.js ADDED
@@ -0,0 +1,85 @@
1
+ #!/usr/bin/env node
2
+
3
+ // SPDX-License-Identifier: Apache-2.0
4
+ // Copyright 2026 alibaba/open-code-review Contributors
5
+
6
+ "use strict";
7
+
8
+ const { spawnSync, spawn } = require("child_process");
9
+ const path = require("path");
10
+ const fs = require("fs");
11
+ const os = require("os");
12
+
13
+ const { resolveNativeBinary } = require("../scripts/platform");
14
+ const { version: packageVersion } = require("../package.json");
15
+ const { shouldShowUpdateHint } = require("../scripts/version");
16
+
17
+ // Maps a child process result to the launcher exit code.
18
+ // A child killed by a signal has status = null, which must not fall through
19
+ // to a clean 0 — pipelines gating on the exit code would read an OOM kill
20
+ // (or any signal death) as success. Conventional 128+signo is used instead.
21
+ function launcherExitCode(result) {
22
+ if (result.signal) {
23
+ return 128 + (os.constants.signals[result.signal] ?? 1);
24
+ }
25
+ return result.status ?? (result.error ? 1 : 0);
26
+ }
27
+
28
+ module.exports = { launcherExitCode };
29
+
30
+ if (require.main !== module) {
31
+ // Required as a module (tests); the launcher body below must not run.
32
+ return;
33
+ }
34
+
35
+ const resolved = resolveNativeBinary();
36
+ if (!resolved) {
37
+ console.error(
38
+ "[ERROR] OpenCodeReview binary not found. Run: npm install -g @alibaba-group/open-code-review"
39
+ );
40
+ process.exit(1);
41
+ }
42
+ const binaryPath = resolved.path;
43
+
44
+ const hintFile = path.join(os.homedir(), ".opencodereview", "update-available");
45
+ try {
46
+ const hint = JSON.parse(fs.readFileSync(hintFile, "utf8"));
47
+ if (hint.pkg && shouldShowUpdateHint(hint.version, packageVersion)) {
48
+ console.error(
49
+ `\x1b[33m[ocr] A new version (v${hint.version}) is available. Run to update:\x1b[0m\n` +
50
+ `\x1b[33m npm i -g ${hint.pkg}@${hint.version}\x1b[0m\n`
51
+ );
52
+ } else {
53
+ fs.unlinkSync(hintFile);
54
+ }
55
+ } catch (_) {}
56
+
57
+ if (!process.env.OCR_NO_UPDATE) {
58
+ const stateDir = path.join(os.homedir(), ".opencodereview");
59
+ const tsFile = path.join(stateDir, "last-update-check");
60
+ const cooldownMs =
61
+ (parseInt(process.env.OCR_UPDATE_INTERVAL, 10) || 18) * 60 * 1000;
62
+
63
+ let shouldCheck = true;
64
+ try {
65
+ const mt = fs.statSync(tsFile).mtimeMs;
66
+ if (Date.now() - mt < cooldownMs) shouldCheck = false;
67
+ } catch (_) {}
68
+
69
+ if (shouldCheck) {
70
+ const updateScript = path.join(__dirname, "..", "scripts", "update.js");
71
+ const child = spawn(process.execPath, [updateScript], {
72
+ detached: true,
73
+ stdio: "ignore",
74
+ env: Object.assign({}, process.env, { OCR_NO_UPDATE: "1" }),
75
+ });
76
+ child.unref();
77
+ }
78
+ }
79
+
80
+ const result = spawnSync(binaryPath, process.argv.slice(2), {
81
+ stdio: "inherit",
82
+ env: process.env,
83
+ });
84
+
85
+ process.exit(launcherExitCode(result));
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
@@ -0,0 +1 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" fill="none" version="1.1" width="64" height="64" viewBox="0 0 64 64"><path d="M16.011564254260254,24.651044499999998C14.199108154260253,26.0486085,12.604812654260254,27.6949085,11.290275574260255,29.5567475C11.202753064260254,29.6807115,10.984476089260253,29.5737765,11.051337242260255,29.4375555C12.365951554260254,26.7591665,14.005819354260254,24.3629835,15.886684454260255,22.313341100000002L15.886684454260255,14.091053C15.886684454260255,13.28568935,16.539560354260253,12.6328125,17.344924954260254,12.6328125L46.644013054260256,12.6328125C47.449376054260256,12.6328125,48.10225405426026,13.28568935,48.10225405426026,14.091054L48.10225405426026,24.7461315C43.604340054260255,21.2891407,37.94170905426026,19.4149723,31.994634054260253,19.4149723C26.104784054260254,19.4149723,20.491794554260252,21.2537956,16.011564254260254,24.651044499999998ZM31.994557054260255,36.8882445C35.14015305426025,36.8882445,37.690160054260254,34.3323665,37.690160054260254,31.1795235C37.690160054260254,30.5937725,37.60022405426025,30.0115585,37.423505054260254,29.4532315C36.96355905426026,30.4290525,35.98299105426025,31.0517195,34.906236054260255,31.0517195C33.36864905426025,31.0517195,32.122189054260254,29.8023895,32.122189054260254,28.2612605C32.122189054260254,27.1816535,32.74318005426025,26.199264499999998,33.71711105426026,25.738142500000002C33.160027054260254,25.5609745,32.57901505426025,25.4708005,31.994557054260255,25.4708005C28.848966054260252,25.4708005,26.298958054260254,28.026681500000002,26.298958054260254,31.1795235C26.298958054260254,34.3323665,28.848966054260252,36.8882445,31.994557054260255,36.8882445ZM47.15295105426026,40.7200085C49.430203054260254,38.5980795,51.40581205426025,36.0023425,52.94698805426025,33.029174499999996C53.01721305426025,32.8936925,52.805627054260256,32.7626725,52.716546054260256,32.8865775C51.36659305426026,34.7642635,49.73017205426025,36.4189305,47.87169405426025,37.8158765C47.87339505426026,37.8053205,47.87509205426026,37.7947615,47.87677505426026,37.7842025C43.46611505426026,41.092453500000005,37.971620054260256,42.9006615,32.199830054260254,42.9434055C32.19153705426025,42.9434665,32.18324405426026,42.9435235,32.174951054260255,42.9435765C32.11482705426025,42.943946499999996,32.054662054260255,42.9441415,31.994454054260252,42.9441415C26.150606054260255,42.9441185,20.577615754260254,41.1334415,16.112119654260255,37.7839245C17.329820654260253,45.4193075,23.367437054260254,51.7093845,31.457871054260252,54.2405735C31.808347054260253,54.3502275,32.18059205426025,54.3502275,32.53106805426025,54.2405775C39.557904054260256,52.0421445,45.03618705426025,47.0081745,47.15295105426026,40.7200085Z" fill-rule="evenodd" fill="#2BDE5E"/></svg>
package/imgs/logo.svg ADDED
@@ -0,0 +1 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" fill="none" version="1.1" width="500" height="500" viewBox="0 0 500 500"><defs><clipPath id="master_svg0_3_2815"><rect x="0" y="0" width="500" height="500" rx="0"/></clipPath></defs><g clip-path="url(#master_svg0_3_2815)"><rect x="0" y="0" width="500" height="500" rx="0" fill="#35BD5F" fill-opacity="1"/><path d="M369.391824777832,207.16973852783204L369.391854777832,131.60131852783203C369.391854777832,128.15557852783203,367.18552477783203,125.09696952783203,363.915744777832,124.00987252783203L265.002354777832,91.12426762783203C256.809764777832,88.40048217783203,247.95578477783204,88.40048217783203,239.76320477783204,91.12426762783203L140.84986477783204,124.00987252783203C137.58010877783204,125.09696952783203,135.37377977783203,128.15557852783203,135.37377977783203,131.60131052783203L135.37377977783203,187.979896527832Q110.36145377783203,206.39992852783203,91.91033172783203,231.29782852783202C91.25267028783203,232.18527852783203,91.45416259783204,233.43310852783202,92.34779357783204,234.08234852783204L101.33021547783203,240.60814852783204C102.22384677783204,241.25737852783203,103.48256677783203,241.04652852783204,104.14099877783204,240.15965852783202Q117.80681777783204,221.75247852783204,135.37377977783203,207.15375852783203L135.37377977783203,207.16844852783203C135.42535377783202,207.120678527832,135.47695877783204,207.07293852783204,135.52861377783202,207.02521852783204Q150.71416877783201,194.43234852783203,168.80918877783205,184.679801527832Q209.221374777832,162.89910852783203,251.50217477783204,162.39883452783204C251.59465477783203,162.39774352783203,251.68558477783202,162.39046452783202,251.77458477783202,162.377410527832C251.97704477783202,162.37673952783203,252.17955477783204,162.37640352783203,252.38211477783204,162.37640352783203C296.51404477783205,162.37640352783203,338.303324777832,178.37405352783202,369.391824777832,207.16973852783204ZM252.38291477783204,295.414878527832C279.10971477783204,295.414878527832,300.776084777832,273.74850852783203,300.776084777832,247.02170852783203C300.776084777832,240.21207852783203,299.33893477783204,233.47909852783204,296.55858477783204,227.26292852783203C294.66187477783205,235.80182852783204,287.548164777832,242.19144852783202,278.85541477783204,243.16412852783202C279.03736477783207,244.42372852783203,279.131504777832,245.71170852783203,279.131504777832,247.02168852783203C279.131504777832,261.794608527832,267.155694777832,273.770428527832,252.38277477783203,273.770428527832C237.60985477783203,273.770428527832,225.63404477783203,261.794608527832,225.63404477783203,247.02168852783203C225.63404477783203,232.24876852783203,237.60985477783203,220.27295852783203,252.38277477783203,220.27295852783203C253.69280477783204,220.27295852783203,254.98084477783203,220.36711852783202,256.240474777832,220.54907852783202C257.21321477783204,211.85636852783205,263.60280477783203,204.742728527832,272.141634777832,202.84602852783203C265.925484777832,200.06567852783203,259.19254477783204,198.62853852783203,252.38291477783204,198.62853852783203C225.65610477783204,198.62853852783203,203.98974477783202,220.29489852783203,203.98974477783202,247.02170852783203C203.98974477783202,273.74850852783203,225.65610477783204,295.414878527832,252.38291477783204,295.414878527832ZM274.81439477783204,243.21481852783202C264.90529477783207,242.35698852783204,257.04755477783203,234.49919852783202,256.1897847778321,224.59009852783203C254.95186477783204,224.38151852783204,253.68000477783204,224.27295852783203,252.38277477783203,224.27295852783203C239.81899477783202,224.27295852783203,229.63404477783203,234.45790852783202,229.63404477783203,247.02168852783203C229.63404477783203,259.58546852783206,239.81899477783202,269.770428527832,252.38277477783203,269.770428527832C264.94655477783203,269.770428527832,275.131504777832,259.58546852783206,275.131504777832,247.02168852783203C275.131504777832,245.72450852783203,275.02294477783204,244.45268852783204,274.81439477783204,243.21481852783202ZM313.98419477783204,373.06705852783205C339.510884777832,356.763438527832,357.584414777832,331.664328527832,365.268044777832,303.130198527832Q389.75965477783205,285.49699852783203,408.07666477783204,260.794778527832C408.73459477783206,259.907508527832,408.54608477783205,258.641948527832,407.65244477783205,257.99271852783204L398.67002477783205,251.46689852783203C397.77640477783206,250.81766852783204,396.535654777832,251.00403852783202,395.877174777832,251.89087852783203Q383.89688477783204,268.02576852783204,369.057804777832,280.89220852783205L369.05826477783205,280.885928527832L368.94913477783206,280.98634852783204Q352.69916477783204,295.05307852783204,333.02570477783206,305.20590852783204Q296.653174777832,323.976558527832,256.24495477783205,325.33028852783207C254.95948477783202,325.35753852783205,253.67179477783202,325.37118852783203,252.38211477783204,325.37118852783203C208.41640477783204,325.37118852783203,166.76860077783203,309.49235852783204,135.70742077783203,280.887278527832C138.50840777783202,318.39349852783204,158.79283877783203,352.636328527832,190.78138777783204,373.067088527832L248.07660477783202,409.660928527832C250.70246477783203,411.33801852783205,254.06308477783202,411.33801852783205,256.68894477783203,409.660928527832L313.98419477783204,373.06705852783205Z" fill-rule="evenodd" fill="#121519" fill-opacity="1"/></g></svg>
Binary file