mirror of
https://github.com/alibaba/open-code-review.git
synced 2026-07-09 17:28:58 +00:00
docs: add Russian translations for README and CONTRIBUTING (#101)
Add README.ru-RU.md and CONTRIBUTING.ru-RU.md following the existing localization pattern (zh-CN, ja-JP, ko-KR), and add the Русский link to the language switcher line in all README and CONTRIBUTING variants. Also add the previously missing 한국어 link to the CONTRIBUTING.zh-CN.md and CONTRIBUTING.ja-JP.md switchers. Closes #100
This commit is contained in:
parent
3239640df4
commit
9c0c6f2393
10 changed files with 711 additions and 9 deletions
|
|
@ -2,7 +2,7 @@
|
|||
|
||||
OpenCodeReviewへのコントリビューションに興味を持っていただきありがとうございます!タイポの修正、バグ報告、新機能の実装など、あらゆる貢献が重要です。
|
||||
|
||||
[English Version](CONTRIBUTING.md) | [简体中文版](CONTRIBUTING.zh-CN.md)
|
||||
[English Version](CONTRIBUTING.md) | [简体中文版](CONTRIBUTING.zh-CN.md) | [한국어](CONTRIBUTING.ko-KR.md) | [Русский](CONTRIBUTING.ru-RU.md)
|
||||
|
||||
## 行動規範
|
||||
|
||||
|
|
|
|||
|
|
@ -2,7 +2,7 @@
|
|||
|
||||
OpenCodeReview에 기여해 주셔서 감사합니다. 오타 수정, bug report, 새 기능 구현 등 모든 기여는 프로젝트에 도움이 됩니다.
|
||||
|
||||
[English](CONTRIBUTING.md) | [简体中文版](CONTRIBUTING.zh-CN.md) | [日本語版](CONTRIBUTING.ja-JP.md) | 한국어
|
||||
[English](CONTRIBUTING.md) | [简体中文版](CONTRIBUTING.zh-CN.md) | [日本語版](CONTRIBUTING.ja-JP.md) | 한국어 | [Русский](CONTRIBUTING.ru-RU.md)
|
||||
|
||||
## Code of Conduct
|
||||
|
||||
|
|
|
|||
|
|
@ -2,7 +2,7 @@
|
|||
|
||||
Thank you for your interest in contributing to OpenCodeReview! Every contribution matters — whether it's fixing a typo, reporting a bug, or implementing a new feature.
|
||||
|
||||
[简体中文版](CONTRIBUTING.zh-CN.md) | [日本語版](CONTRIBUTING.ja-JP.md) | [한국어](CONTRIBUTING.ko-KR.md)
|
||||
[简体中文版](CONTRIBUTING.zh-CN.md) | [日本語版](CONTRIBUTING.ja-JP.md) | [한국어](CONTRIBUTING.ko-KR.md) | [Русский](CONTRIBUTING.ru-RU.md)
|
||||
|
||||
## Code of Conduct
|
||||
|
||||
|
|
@ -135,7 +135,7 @@ Documentation is a crucial part of OpenCodeReview. We welcome improvements to RE
|
|||
- Clarifying confusing explanations or adding missing context
|
||||
- Adding usage examples for commands or configuration options
|
||||
- Updating outdated content (e.g., after a feature change)
|
||||
- Translating or improving localized documentation (`README.zh-CN.md`, `README.ja-JP.md`, `README.ko-KR.md`, `CONTRIBUTING.zh-CN.md`, `CONTRIBUTING.ja-JP.md`, `CONTRIBUTING.ko-KR.md`)
|
||||
- Translating or improving localized documentation (`README.zh-CN.md`, `README.ja-JP.md`, `README.ko-KR.md`, `README.ru-RU.md`, `CONTRIBUTING.zh-CN.md`, `CONTRIBUTING.ja-JP.md`, `CONTRIBUTING.ko-KR.md`, `CONTRIBUTING.ru-RU.md`)
|
||||
|
||||
### Documentation Workflow
|
||||
|
||||
|
|
@ -151,10 +151,12 @@ Documentation is a crucial part of OpenCodeReview. We welcome improvements to RE
|
|||
| `README.zh-CN.md` | Chinese translation |
|
||||
| `README.ja-JP.md` | Japanese translation |
|
||||
| `README.ko-KR.md` | Korean translation |
|
||||
| `README.ru-RU.md` | Russian translation |
|
||||
| `CONTRIBUTING.md` | Contribution guide (English) |
|
||||
| `CONTRIBUTING.zh-CN.md` | Contribution guide (Chinese) |
|
||||
| `CONTRIBUTING.ja-JP.md` | Contribution guide (Japanese) |
|
||||
| `CONTRIBUTING.ko-KR.md` | Contribution guide (Korean) |
|
||||
| `CONTRIBUTING.ru-RU.md` | Contribution guide (Russian) |
|
||||
|
||||
## Submitting Changes
|
||||
|
||||
|
|
|
|||
224
CONTRIBUTING.ru-RU.md
Normal file
224
CONTRIBUTING.ru-RU.md
Normal file
|
|
@ -0,0 +1,224 @@
|
|||
# Участие в разработке OpenCodeReview
|
||||
|
||||
Спасибо за интерес к развитию OpenCodeReview! Важен любой вклад — будь то исправленная опечатка, сообщение о баге или новая функциональность.
|
||||
|
||||
[English](CONTRIBUTING.md) | [简体中文版](CONTRIBUTING.zh-CN.md) | [日本語版](CONTRIBUTING.ja-JP.md) | [한국어](CONTRIBUTING.ko-KR.md) | Русский
|
||||
|
||||
## Кодекс поведения
|
||||
|
||||
Участвуя в этом проекте, вы соглашаетесь поддерживать уважительную и инклюзивную атмосферу. Пожалуйста, будьте доброжелательны и конструктивны в любом взаимодействии.
|
||||
|
||||
## Как можно помочь
|
||||
|
||||
Помимо написания кода, есть много способов внести вклад:
|
||||
|
||||
- **Сообщайте о багах** — нашли поломку? Заведите issue с шагами воспроизведения.
|
||||
- **Предлагайте улучшения** — есть идея? Начните обсуждение в [GitHub Discussions](https://github.com/alibaba/open-code-review/discussions/categories/ideas) или заведите issue [Feature Request](https://github.com/alibaba/open-code-review/issues/new?template=feature_request.yml).
|
||||
- **Улучшайте документацию** — исправляйте опечатки, проясняйте формулировки, добавляйте примеры. Чтобы сообщить о проблеме, можно также завести [Documentation Issue](https://github.com/alibaba/open-code-review/issues/new?template=docs_report.yml).
|
||||
- **Ревьюйте pull request'ы** — помогайте нам проверять код других контрибьюторов.
|
||||
- **Пишите код** — исправляйте баги, добавляйте функциональность, улучшайте производительность.
|
||||
|
||||
## С чего начать
|
||||
|
||||
### Требования
|
||||
|
||||
- [Go 1.25+](https://go.dev/dl/)
|
||||
- [Git](https://git-scm.com/)
|
||||
- [Make](https://www.gnu.org/software/make/)
|
||||
|
||||
### Настройка
|
||||
|
||||
```bash
|
||||
# 1. Сделайте форк репозитория на GitHub
|
||||
|
||||
# 2. Склонируйте свой форк
|
||||
git clone https://github.com/<your-username>/open-code-review.git
|
||||
cd open-code-review
|
||||
|
||||
# 3. Добавьте remote upstream (для синхронизации с основным репозиторием)
|
||||
git remote add upstream https://github.com/alibaba/open-code-review.git
|
||||
|
||||
# 4. Соберите проект
|
||||
make build
|
||||
|
||||
# 5. Запустите тесты
|
||||
make test
|
||||
```
|
||||
|
||||
Если всё прошло успешно — вы готовы контрибьютить.
|
||||
|
||||
> **Примечание:** remote `upstream` для контрибьюторов доступен только на чтение — он используется, чтобы подтягивать свежие изменения из основного репозитория. Пушить напрямую в upstream нельзя. Все изменения отправляются в ваш форк (`origin`) и подаются через Pull Request.
|
||||
|
||||
## Процесс разработки
|
||||
|
||||
### Ветки
|
||||
|
||||
Создайте feature-ветку от `main`:
|
||||
|
||||
```bash
|
||||
git checkout main
|
||||
git pull upstream main
|
||||
git checkout -b feat/your-feature-name
|
||||
```
|
||||
|
||||
Используйте префиксы, обозначающие тип изменения:
|
||||
|
||||
| Префикс | Назначение |
|
||||
| ----------- | --------------------------------------- |
|
||||
| `feat/` | Новая функциональность |
|
||||
| `fix/` | Исправление бага |
|
||||
| `docs/` | Только документация |
|
||||
| `refactor/` | Рефакторинг (без изменения поведения) |
|
||||
| `test/` | Добавление или обновление тестов |
|
||||
| `chore/` | Сборка, CI или инструментарий |
|
||||
|
||||
### Сообщения коммитов
|
||||
|
||||
Следуйте формату [Conventional Commits](https://www.conventionalcommits.org/):
|
||||
|
||||
```
|
||||
<type>(<scope>): <краткое описание>
|
||||
|
||||
[необязательное тело]
|
||||
```
|
||||
|
||||
Примеры:
|
||||
|
||||
```
|
||||
feat(agent): add support for custom tool definitions
|
||||
fix(llm): handle timeout errors in Anthropic API calls
|
||||
docs(README): update configuration examples
|
||||
```
|
||||
|
||||
### Качество кода
|
||||
|
||||
Перед отправкой изменений убедитесь, что они проходят все проверки:
|
||||
|
||||
```bash
|
||||
# Форматирование и линт (стандартный инструментарий Go)
|
||||
go fmt ./...
|
||||
go vet ./...
|
||||
|
||||
# Тесты с детектором гонок
|
||||
make test
|
||||
|
||||
# Успешная сборка
|
||||
make build
|
||||
```
|
||||
|
||||
### Структура проекта
|
||||
|
||||
```
|
||||
├── cmd/opencodereview/ # Точка входа CLI
|
||||
├── internal/
|
||||
│ ├── agent/ # Логика ревью-агента
|
||||
│ ├── config/ # Управление конфигурацией
|
||||
│ ├── diff/ # Разбор git-диффов
|
||||
│ ├── llm/ # Клиент LLM API (Anthropic и OpenAI)
|
||||
│ ├── model/ # Модели данных
|
||||
│ ├── session/ # Управление сессиями ревью
|
||||
│ ├── tool/ # Встроенные инструменты (file_read, code_search и др.)
|
||||
│ ├── telemetry/ # Интеграция с OpenTelemetry
|
||||
│ └── viewer/ # WebUI-просмотрщик сессий
|
||||
├── pages/ # Фронтенд WebUI
|
||||
├── scripts/ # Скрипты сборки и установки
|
||||
└── bin/ # NPM-обёртка
|
||||
```
|
||||
|
||||
## Вклад в документацию
|
||||
|
||||
Документация — важнейшая часть OpenCodeReview. Мы приветствуем улучшения README-файлов, комментариев в коде, примеров конфигурации и любых текстов, обращённых к пользователю.
|
||||
|
||||
### Что считается вкладом в документацию
|
||||
|
||||
- Исправление опечаток, грамматических ошибок и битых ссылок
|
||||
- Прояснение запутанных объяснений и добавление недостающего контекста
|
||||
- Добавление примеров использования команд и параметров конфигурации
|
||||
- Обновление устаревшего содержимого (например, после изменения функциональности)
|
||||
- Перевод и улучшение локализованной документации (`README.zh-CN.md`, `README.ja-JP.md`, `README.ko-KR.md`, `README.ru-RU.md`, `CONTRIBUTING.zh-CN.md`, `CONTRIBUTING.ja-JP.md`, `CONTRIBUTING.ko-KR.md`, `CONTRIBUTING.ru-RU.md`)
|
||||
|
||||
### Процесс работы с документацией
|
||||
|
||||
1. Если вы заметили проблему, но не планируете исправлять её сами, заведите [Documentation Issue](https://github.com/alibaba/open-code-review/issues/new?template=docs_report.yml).
|
||||
2. Если хотите исправить сами — сделайте форк, внесите изменения и подайте PR с префиксом ветки `docs/` (например, `docs/fix-config-example`).
|
||||
3. PR, затрагивающие только документацию, не требуют изменений в тестах, но, пожалуйста, проверяйте точность всех приводимых команд и фрагментов кода.
|
||||
|
||||
### Файлы документации
|
||||
|
||||
| Файл | Назначение |
|
||||
| ----------------------- | ------------------------------------------- |
|
||||
| `README.md` | Основная документация проекта (английский) |
|
||||
| `README.zh-CN.md` | Китайский перевод |
|
||||
| `README.ja-JP.md` | Японский перевод |
|
||||
| `README.ko-KR.md` | Корейский перевод |
|
||||
| `README.ru-RU.md` | Русский перевод |
|
||||
| `CONTRIBUTING.md` | Руководство контрибьютора (английский) |
|
||||
| `CONTRIBUTING.zh-CN.md` | Руководство контрибьютора (китайский) |
|
||||
| `CONTRIBUTING.ja-JP.md` | Руководство контрибьютора (японский) |
|
||||
| `CONTRIBUTING.ko-KR.md` | Руководство контрибьютора (корейский) |
|
||||
| `CONTRIBUTING.ru-RU.md` | Руководство контрибьютора (русский) |
|
||||
|
||||
## Отправка изменений
|
||||
|
||||
### Заведение issue
|
||||
|
||||
Прежде чем браться за существенное изменение, пожалуйста, сначала заведите issue и обсудите подход. Это предотвращает дублирование работы и гарантирует, что ваш вклад согласуется с направлением развития проекта.
|
||||
|
||||
Сообщая о баге, укажите:
|
||||
|
||||
1. Версию OpenCodeReview (`ocr version`)
|
||||
2. ОС и архитектуру
|
||||
3. Шаги воспроизведения
|
||||
4. Ожидаемое и фактическое поведение
|
||||
5. Релевантные логи или сообщения об ошибках
|
||||
|
||||
### Процесс Pull Request
|
||||
|
||||
1. **Держите PR сфокусированным** — одно логическое изменение на PR. Несколько независимых изменений лучше подать отдельными PR.
|
||||
2. **Пишите тесты** — добавляйте или обновляйте тесты при любых изменениях поведения.
|
||||
3. **Обновляйте документацию** — если изменение затрагивает видимое пользователю поведение, обновите соответствующую документацию.
|
||||
4. **Подпишите CLA** — прежде чем PR может быть принят, все контрибьюторы должны подписать Contributor License Agreement (см. ниже).
|
||||
5. **Заполните шаблон PR** — опишите, что делает ваше изменение и зачем оно нужно.
|
||||
|
||||
### Формат заголовка PR
|
||||
|
||||
Используйте тот же формат Conventional Commits, что и для сообщений коммитов:
|
||||
|
||||
```
|
||||
feat(agent): add support for custom tool definitions
|
||||
```
|
||||
|
||||
### Процесс ревью
|
||||
|
||||
- Мейнтейнер посмотрит ваш PR — обычно в течение нескольких рабочих дней.
|
||||
- Мы можем попросить внести изменения — это нормальная совместная работа, а не противостояние.
|
||||
- После одобрения мейнтейнер смёржит ваш PR.
|
||||
|
||||
## Лицензионное соглашение контрибьютора (CLA)
|
||||
|
||||
Прежде чем мы сможем принять ваш вклад, необходимо подписать Alibaba Open Source Contributor License Agreement. Это гарантирует, что проект может распространяться на условиях своей лицензии.
|
||||
|
||||
Когда вы откроете свой первый PR, CLA-бот оставит комментарий с инструкциями. Просто перейдите по ссылке и подпишите соглашение электронно — это занимает минуту.
|
||||
|
||||
## Новичкам
|
||||
|
||||
Впервые в проекте? Ищите issues с метками:
|
||||
|
||||
- [`good first issue`](https://github.com/alibaba/open-code-review/labels/good%20first%20issue) — небольшие, хорошо очерченные задачи, идеальные для старта.
|
||||
- [`help wanted`](https://github.com/alibaba/open-code-review/labels/help%20wanted) — задачи, где мы будем рады помощи сообщества.
|
||||
|
||||
С чего удобно начать:
|
||||
|
||||
- Улучшение сообщений об ошибках и вывода CLI
|
||||
- Написание тестов для непокрытых участков кода
|
||||
- Улучшение документации
|
||||
|
||||
## Сообщество
|
||||
|
||||
- **Сообщения о багах** — [GitHub Issues](https://github.com/alibaba/open-code-review/issues)
|
||||
- **Предложения функциональности** — [GitHub Discussions (Ideas)](https://github.com/alibaba/open-code-review/discussions/categories/ideas) или issue [Feature Request](https://github.com/alibaba/open-code-review/issues/new?template=feature_request.yml)
|
||||
- **Вопросы и помощь** — если у вас есть вопросы об использовании OpenCodeReview, задавайте их в [GitHub Discussions](https://github.com/alibaba/open-code-review/discussions)
|
||||
|
||||
## Лицензия
|
||||
|
||||
Внося вклад в OpenCodeReview, вы соглашаетесь с тем, что ваш вклад будет лицензирован на условиях [Apache License 2.0](LICENSE).
|
||||
|
|
@ -2,7 +2,7 @@
|
|||
|
||||
感谢你对 OpenCodeReview 的关注!无论是修复拼写错误、报告 Bug,还是实现新功能,每一份贡献都很有价值。
|
||||
|
||||
[English version](CONTRIBUTING.md) | [日本語版](CONTRIBUTING.ja-JP.md)
|
||||
[English version](CONTRIBUTING.md) | [日本語版](CONTRIBUTING.ja-JP.md) | [한국어](CONTRIBUTING.ko-KR.md) | [Русский](CONTRIBUTING.ru-RU.md)
|
||||
|
||||
## 行为准则
|
||||
|
||||
|
|
|
|||
|
|
@ -11,7 +11,7 @@
|
|||
<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>
|
||||
</p>
|
||||
<p align="center">
|
||||
<a href="README.md">English</a> | <a href="README.zh-CN.md">简体中文</a> | 日本語 | <a href="README.ko-KR.md">한국어</a>
|
||||
<a href="README.md">English</a> | <a href="README.zh-CN.md">简体中文</a> | 日本語 | <a href="README.ko-KR.md">한국어</a> | <a href="README.ru-RU.md">Русский</a>
|
||||
</p>
|
||||
|
||||
---
|
||||
|
|
|
|||
|
|
@ -11,7 +11,7 @@
|
|||
<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>
|
||||
</p>
|
||||
<p align="center">
|
||||
<a href="README.md">English</a> | <a href="README.zh-CN.md">简体中文</a> | <a href="README.ja-JP.md">日本語</a> | 한국어
|
||||
<a href="README.md">English</a> | <a href="README.zh-CN.md">简体中文</a> | <a href="README.ja-JP.md">日本語</a> | 한국어 | <a href="README.ru-RU.md">Русский</a>
|
||||
</p>
|
||||
|
||||
---
|
||||
|
|
|
|||
|
|
@ -11,7 +11,7 @@
|
|||
<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>
|
||||
</p>
|
||||
<p align="center">
|
||||
English | <a href="README.zh-CN.md">简体中文</a> | <a href="README.ja-JP.md">日本語</a> | <a href="README.ko-KR.md">한국어</a>
|
||||
English | <a href="README.zh-CN.md">简体中文</a> | <a href="README.ja-JP.md">日本語</a> | <a href="README.ko-KR.md">한국어</a> | <a href="README.ru-RU.md">Русский</a>
|
||||
</p>
|
||||
|
||||
---
|
||||
|
|
|
|||
476
README.ru-RU.md
Normal file
476
README.ru-RU.md
Normal file
|
|
@ -0,0 +1,476 @@
|
|||
<p align="center">
|
||||
<a href="https://alibaba.github.io/open-code-review/">
|
||||
<img src="imgs/logo.svg" alt="OpenCodeReview logo" width="240" height="240">
|
||||
</a>
|
||||
</p>
|
||||
<p align="center">AI-агент код-ревью с открытым исходным кодом.</p>
|
||||
<p align="center">
|
||||
<a href="https://www.npmjs.com/package/@alibaba-group/open-code-review"><img alt="npm" src="https://img.shields.io/npm/v/@alibaba-group/open-code-review?style=flat-square" /></a>
|
||||
<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>
|
||||
<a href="https://goreportcard.com/report/github.com/alibaba/open-code-review"><img alt="Go Report Card" src="https://goreportcard.com/badge/github.com/alibaba/open-code-review?style=flat-square" /></a>
|
||||
<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>
|
||||
</p>
|
||||
<p align="center">
|
||||
<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> | Русский
|
||||
</p>
|
||||
|
||||
---
|
||||
|
||||
## Что такое Open Code Review?
|
||||
|
||||
Open Code Review — это CLI-инструмент для код-ревью на основе ИИ. Он появился как внутренний официальный ИИ-ассистент код-ревью Alibaba Group: за последние два года им воспользовались десятки тысяч разработчиков, и он выявил миллионы дефектов в коде. После тщательной проверки в огромных масштабах мы превратили его в open-source-проект для сообщества. Чтобы начать работу, достаточно настроить эндпоинт модели.
|
||||
|
||||
Инструмент читает git-диффы, отправляет изменённые файлы настраиваемой LLM через агента с поддержкой вызова инструментов (tool use) и генерирует структурированные ревью-комментарии с точностью до строки. Агент может читать полное содержимое файлов, искать по кодовой базе, заглядывать в другие изменённые файлы за контекстом и выполнять глубокое ревью — а не только давать поверхностные замечания по диффу.
|
||||
|
||||

|
||||
|
||||
## Почему Open Code Review?
|
||||
|
||||
### Проблема агентов общего назначения
|
||||
|
||||
Если вы использовали для код-ревью агентов общего назначения, например Claude Code со Skills, вы наверняка сталкивались с этими болевыми точками:
|
||||
|
||||
- **Неполное покрытие** — на крупных ченджсетах агенты склонны «срезать углы»: выборочно проверяют часть файлов и пропускают остальные.
|
||||
- **Дрейф позиций** — найденные проблемы часто не совпадают с реальным местом в коде: номера строк и ссылки на файлы «уезжают» от цели.
|
||||
- **Нестабильное качество** — Skills, управляемые естественным языком, трудно отлаживать, и качество ревью заметно колеблется при небольших изменениях промпта.
|
||||
|
||||
Первопричина: чисто языковая архитектура не накладывает жёстких ограничений на процесс ревью.
|
||||
|
||||
### Ключевая идея: детерминированная инженерия × агент
|
||||
|
||||
Ключевая философия Open Code Review — сочетать детерминированную инженерию и агента так, чтобы каждый занимался тем, что у него получается лучше всего.
|
||||
|
||||
**Детерминированная инженерия — жёсткие гарантии**
|
||||
|
||||
Для тех шагов ревью, где *нельзя ошибаться*, корректность гарантирует инженерная логика, а не языковая модель:
|
||||
|
||||
- **Точный отбор файлов** — точно определяет, какие файлы нуждаются в ревью, а какие следует отфильтровать, гарантируя, что ни одно важное изменение не будет упущено.
|
||||
- **Умный бандлинг файлов** — группирует связанные файлы в одну единицу ревью (например, `message_en.properties` и `message_zh.properties` объединяются вместе). Каждый бандл выполняется как суб-агент с изолированным контекстом — стратегия «разделяй и властвуй», которая сохраняет стабильность на очень больших ченджсетах и естественным образом поддерживает конкурентное ревью.
|
||||
- **Тонкий матчинг правил** — сопоставляет правила ревью с характеристиками каждого файла, удерживая внимание модели сфокусированным и устраняя информационный шум у самого источника. По сравнению с чисто языковым управлением правилами матчинг правил на основе шаблонизатора стабильнее и предсказуемее.
|
||||
- **Внешние модули позиционирования и рефлексии** — независимые модули позиционирования комментариев и рефлексии над комментариями системно повышают точность как расположения, так и содержания замечаний ИИ.
|
||||
|
||||
**Агент — динамические решения**
|
||||
|
||||
Сильные стороны агента сосредоточены там, где они важнее всего, — в динамических решениях и динамическом доборе контекста:
|
||||
|
||||
- **Промпты, заточенные под сценарий** — шаблоны промптов, глубоко оптимизированные под код-ревью: выше качество при меньшем расходе токенов.
|
||||
- **Набор инструментов, заточенный под сценарий** — выведен из глубокого анализа трейсов вызовов инструментов на больших продакшен-данных, включая распределение частоты вызовов, долю повторных вызовов каждого инструмента и влияние новых инструментов на всю цепочку вызовов. В результате получился специализированный набор инструментов, который для код-ревью стабильнее и предсказуемее, чем универсальный агентский тулкит.
|
||||
|
||||
## Как использовать
|
||||
|
||||
### CLI
|
||||
|
||||
#### Установка
|
||||
|
||||
**Через NPM (рекомендуется)**
|
||||
|
||||
```bash
|
||||
npm install -g @alibaba-group/open-code-review
|
||||
```
|
||||
|
||||
После установки команда `ocr` доступна глобально.
|
||||
|
||||
**Из GitHub Release**
|
||||
|
||||
Скачайте свежий бинарный файл со страницы [GitHub Releases](https://github.com/alibaba/open-code-review/releases):
|
||||
|
||||
```bash
|
||||
# macOS (Apple Silicon)
|
||||
curl -Lo ocr https://github.com/alibaba/open-code-review/releases/latest/download/opencodereview-darwin-arm64
|
||||
chmod +x ocr && sudo mv ocr /usr/local/bin/ocr
|
||||
|
||||
# macOS (Intel)
|
||||
curl -Lo ocr https://github.com/alibaba/open-code-review/releases/latest/download/opencodereview-darwin-amd64
|
||||
chmod +x ocr && sudo mv ocr /usr/local/bin/ocr
|
||||
|
||||
# Linux (x86_64)
|
||||
curl -Lo ocr https://github.com/alibaba/open-code-review/releases/latest/download/opencodereview-linux-amd64
|
||||
chmod +x ocr && sudo mv ocr /usr/local/bin/ocr
|
||||
|
||||
# Linux (ARM64)
|
||||
curl -Lo ocr https://github.com/alibaba/open-code-review/releases/latest/download/opencodereview-linux-arm64
|
||||
chmod +x ocr && sudo mv ocr /usr/local/bin/ocr
|
||||
|
||||
# Windows (x86_64) — переместите ocr.exe в каталог из вашего PATH
|
||||
curl -Lo ocr.exe https://github.com/alibaba/open-code-review/releases/latest/download/opencodereview-windows-amd64.exe
|
||||
|
||||
# Windows (ARM64) — переместите ocr.exe в каталог из вашего PATH
|
||||
curl -Lo ocr.exe https://github.com/alibaba/open-code-review/releases/latest/download/opencodereview-windows-arm64.exe
|
||||
```
|
||||
|
||||
**Из исходников**
|
||||
|
||||
```bash
|
||||
git clone https://github.com/alibaba/open-code-review.git
|
||||
cd open-code-review
|
||||
make build
|
||||
sudo cp dist/opencodereview /usr/local/bin/ocr
|
||||
```
|
||||
|
||||
#### Быстрый старт
|
||||
|
||||
**1. Настройте LLM**
|
||||
|
||||
**Перед запуском ревью необходимо настроить LLM.**
|
||||
|
||||
```bash
|
||||
# Вариант A: настройка через CLI
|
||||
ocr config set llm.url https://api.anthropic.com/v1/messages
|
||||
ocr config set llm.auth_token your-api-key-here
|
||||
ocr config set llm.model claude-opus-4-6
|
||||
ocr config set llm.use_anthropic true
|
||||
|
||||
# Вариант B: переменные окружения (наивысший приоритет)
|
||||
export OCR_LLM_URL=https://api.anthropic.com/v1/messages
|
||||
export OCR_LLM_TOKEN=your-api-key-here
|
||||
export OCR_LLM_MODEL=claude-opus-4-6
|
||||
export OCR_USE_ANTHROPIC=true
|
||||
```
|
||||
|
||||
Конфигурация хранится в `~/.opencodereview/config.json`.
|
||||
|
||||
**`auth_header` (необязательно):** определяет, в каком HTTP-заголовке передаётся API-ключ при работе с Anthropic. Если не задан, по умолчанию используется `authorization` (Bearer-токен). Если у вас стандартный API-ключ вида `sk-ant-*`, необходимо установить значение `x-api-key`:
|
||||
|
||||
```bash
|
||||
ocr config set llm.auth_header x-api-key
|
||||
# или
|
||||
export OCR_LLM_AUTH_HEADER=x-api-key
|
||||
```
|
||||
|
||||
Поддерживаемые значения: `x-api-key`, `authorization` (алиас: `bearer`). Прочие значения отклоняются с ошибкой.
|
||||
|
||||
Инструмент также совместим с переменными окружения Claude Code (`ANTHROPIC_BASE_URL`, `ANTHROPIC_AUTH_TOKEN`, `ANTHROPIC_MODEL`) и разбирает `~/.zshrc` / `~/.bashrc` в поисках соответствующих export'ов.
|
||||
|
||||
> **Примечание для пользователей CC-Switch**: если вы используете [CC-Switch](https://github.com/farion1231/cc-switch) с включённым [routing service](https://www.ccswitch.io/en/docs?section=proxy&item=service), можно указать в `llm.url` адрес прокси CC-Switch без дополнительной настройки:
|
||||
> - для провайдера **Claude**: установите `llm.url` в `http://127.0.0.1:15721`
|
||||
> - для провайдера **Codex**: установите `llm.url` в `http://127.0.0.1:15721/v1`
|
||||
> - `llm.model` задайте в соответствии с настройками вашего провайдера
|
||||
> - `llm.auth_token` может быть любым
|
||||
> - настройки `extra_body` продолжают действовать
|
||||
|
||||
**2. Проверьте подключение**
|
||||
|
||||
```bash
|
||||
ocr llm test
|
||||
```
|
||||
|
||||
**3. Запустите ревью**
|
||||
|
||||
```bash
|
||||
cd your-project
|
||||
|
||||
# Режим рабочей копии — ревью всех staged, unstaged и untracked изменений
|
||||
ocr review
|
||||
|
||||
# Диапазон веток — сравнение двух ref'ов
|
||||
ocr review --from main --to feature-branch
|
||||
|
||||
# Один коммит
|
||||
ocr review --commit abc123
|
||||
```
|
||||
|
||||
### Интеграция с кодинг-агентами
|
||||
|
||||
OCR легко встраивается в ИИ-агентов для разработки в виде slash-команды, позволяя выполнять код-ревью прямо в рабочем процессе агента.
|
||||
|
||||
#### Вариант 1: установка как Skill
|
||||
|
||||
Установите скилл OCR в свой проект через `npx`:
|
||||
|
||||
```bash
|
||||
npx skills add alibaba/open-code-review --skill open-code-review
|
||||
```
|
||||
|
||||
Это установит скилл `open-code-review` из [реестра скиллов](skills/open-code-review/SKILL.md), который объясняет вашему кодинг-агенту, как вызывать `ocr` для код-ревью, классифицировать найденные проблемы по приоритету и при необходимости применять исправления.
|
||||
|
||||
#### Вариант 2: установка как плагин Claude Code
|
||||
|
||||
Для [Claude Code](https://docs.anthropic.com/en/docs/claude-code) установите плагин с командой, выполнив в Claude Code:
|
||||
|
||||
```bash
|
||||
/plugin marketplace add alibaba/open-code-review
|
||||
/plugin install open-code-review@open-code-review
|
||||
```
|
||||
|
||||
Это зарегистрирует slash-команду `/open-code-review:review`, которая запускает OCR и автоматически фильтрует и исправляет найденные проблемы.
|
||||
|
||||
#### Вариант 3: установка как плагин Codex
|
||||
|
||||
Для локального Codex установите плагин Open Code Review из этого репозитория:
|
||||
|
||||
```bash
|
||||
codex plugin marketplace add alibaba/open-code-review
|
||||
codex
|
||||
/plugins
|
||||
```
|
||||
|
||||
Для локального чекаута или форка:
|
||||
|
||||
```bash
|
||||
codex plugin marketplace add .
|
||||
codex
|
||||
/plugins
|
||||
```
|
||||
|
||||
Установите и включите `Open Code Review`, затем начните новый тред Codex и вызывайте плагин явно:
|
||||
|
||||
```text
|
||||
@Open Code Review review my current changes
|
||||
@Open Code Review review this branch against main
|
||||
@Open Code Review review and fix high-confidence issues
|
||||
```
|
||||
|
||||
Это зарегистрирует Codex-скилл, запускающий локальный CLI OCR:
|
||||
|
||||
```bash
|
||||
ocr review --audience agent
|
||||
```
|
||||
|
||||
Эта интеграция не меняет внутренний LLM-бэкенд OCR и не требует настройки эндпоинта OpenAI Responses API для Codex. Самому OCR по-прежнему нужен установленный и настроенный CLI `ocr`, как описано в разделе про настройку CLI.
|
||||
|
||||
Руководство на корейском: [`plugins/open-code-review/CODEX.ko-KR.md`](plugins/open-code-review/CODEX.ko-KR.md)
|
||||
|
||||
#### Вариант 4: просто скопировать файл команды
|
||||
|
||||
Для быстрой настройки без пакетных менеджеров достаточно скопировать файл команды, чтобы использовать slash-команду `/open-code-review` в Claude Code.
|
||||
|
||||
**На уровне проекта** (общий для команды через git):
|
||||
|
||||
```bash
|
||||
mkdir -p .claude/commands
|
||||
curl -o .claude/commands/open-code-review.md \
|
||||
https://raw.githubusercontent.com/alibaba/open-code-review/main/plugins/open-code-review/commands/review.md
|
||||
```
|
||||
|
||||
**На уровне пользователя** (личное глобальное использование во всех проектах):
|
||||
|
||||
```bash
|
||||
mkdir -p ~/.claude/commands
|
||||
curl -o ~/.claude/commands/open-code-review.md \
|
||||
https://raw.githubusercontent.com/alibaba/open-code-review/main/plugins/open-code-review/commands/review.md
|
||||
```
|
||||
|
||||
> **Требование**: для всех способов интеграции необходим установленный CLI `ocr` и настроенная LLM. См. разделы [Установка](#установка) и [Настройте LLM](#быстрый-старт) выше.
|
||||
|
||||
### Интеграция с CI/CD
|
||||
|
||||
OCR можно встроить в CI/CD-пайплайны для автоматического код-ревью Merge Request'ов / Pull Request'ов.
|
||||
|
||||
Базовая команда для интеграции с CI:
|
||||
|
||||
```bash
|
||||
ocr review \
|
||||
--from "origin/main" \
|
||||
--to "<commit_sha>" \
|
||||
--format json
|
||||
```
|
||||
|
||||
Флаг `--from` принимает в качестве базы ref ветки (например, `origin/main`) или SHA коммита, а `--to` — SHA коммита или ref ветки в качестве head. В CI-окружениях для `--to` рекомендуется использовать SHA коммита: это корректно обрабатывает PR/MR из форков, у которых исходная ветка отсутствует в remote `origin`.
|
||||
|
||||
Флаг `--format json` выводит машиночитаемый результат, удобный для разбора в CI-скриптах.
|
||||
|
||||
Примеры интеграции — в каталоге [`examples/`](./examples/):
|
||||
|
||||
- [`github_actions/`](./examples/github_actions/) — пример интеграции с GitHub Actions
|
||||
- [`gitlab_ci/`](./examples/gitlab_ci/) — пример интеграции с GitLab CI
|
||||
|
||||
## Команды
|
||||
|
||||
| Команда | Алиас | Описание |
|
||||
|---------|-------|----------|
|
||||
| `ocr review` | `ocr r` | Запустить код-ревью |
|
||||
| `ocr rules check <file>` | — | Показать, какое правило ревью применяется к пути файла |
|
||||
| `ocr config set <key> <value>` | — | Установить значения конфигурации |
|
||||
| `ocr llm test` | — | Проверить подключение к LLM |
|
||||
| `ocr viewer` | `ocr v` | Запустить WebUI-просмотрщик сессий на `localhost:5483` |
|
||||
| `ocr version` | — | Показать информацию о версии |
|
||||
|
||||
### Флаги `ocr review`
|
||||
|
||||
| Флаг | Короткая форма | По умолчанию | Описание |
|
||||
|------|----------------|--------------|----------|
|
||||
| `--repo` | — | текущий каталог | Корень git-репозитория |
|
||||
| `--from` | — | — | Исходный ref (например, `main`) |
|
||||
| `--to` | — | — | Целевой ref (например, `feature-branch`) |
|
||||
| `--commit` | `-c` | — | Один коммит для ревью |
|
||||
| `--preview` | `-p` | `false` | Показать, какие файлы попадут в ревью, без запуска LLM |
|
||||
| `--format` | `-f` | `text` | Формат вывода: `text` или `json` |
|
||||
| `--concurrency` | — | `8` | Максимум одновременных ревью файлов |
|
||||
| `--timeout` | — | `10` | Таймаут конкурентной задачи в минутах |
|
||||
| `--audience` | — | `human` | `human` (показывать прогресс) или `agent` (только сводка) |
|
||||
| `--background` | `-b` | — | Необязательный контекст требований/бизнес-логики для ревью; при `--commit` автоматически заполняется из сообщения коммита |
|
||||
| `--rule` | — | — | Путь к пользовательским JSON-правилам ревью |
|
||||
| `--max-tools` | — | встроенное | Максимум раундов вызова инструментов на файл; действует, только если больше значения шаблона по умолчанию |
|
||||
| `--max-git-procs` | — | встроенное | Максимум одновременных git-подпроцессов |
|
||||
| `--tools` | — | — | Путь к пользовательскому JSON-конфигу инструментов |
|
||||
|
||||
## Примеры
|
||||
|
||||
```bash
|
||||
# Показать, какие файлы попадут в ревью (без вызовов LLM)
|
||||
ocr review --preview
|
||||
ocr review -c abc123 -p
|
||||
|
||||
# Ревью изменений рабочей копии с настройками по умолчанию
|
||||
ocr review
|
||||
|
||||
# Ревью диффа веток с заданной конкурентностью
|
||||
ocr review --from main --to my-feature --concurrency 4
|
||||
|
||||
# Ревью конкретного коммита с подробным JSON-выводом
|
||||
ocr review --commit abc123 --format json --audience agent
|
||||
|
||||
# Передать контекст требований для более прицельного ревью
|
||||
ocr review --background "Добавляем rate limiting в API логина"
|
||||
|
||||
# Использовать собственные правила ревью
|
||||
ocr review --rule /path/to/my-rules.json
|
||||
|
||||
# Посмотреть, какое правило применяется к файлу
|
||||
ocr rules check src/main/java/com/example/Foo.java
|
||||
ocr rules check --rule custom.json src/main/resources/mapper/UserMapper.xml
|
||||
|
||||
# Открыть историю сессий ревью в браузере
|
||||
ocr viewer
|
||||
ocr viewer --addr :3000
|
||||
```
|
||||
|
||||
### Безопасность viewer'а
|
||||
|
||||
Viewer отдаёт содержимое сессионных JSONL-файлов (сообщения запросов к LLM и ответы) по HTTP. На каждый запрос применяется allowlist по заголовку Host: loopback-имена (`localhost`, `127.0.0.0/8`, `::1`) и конкретный хост привязки разрешены всегда. Wildcard-привязки (`--addr :3000`, `--addr 0.0.0.0:3000`) и прочие не-loopback имена хостов нужно добавлять через переменную окружения `OCR_VIEWER_ALLOWED_HOSTS` (через запятую):
|
||||
|
||||
```bash
|
||||
OCR_VIEWER_ALLOWED_HOSTS=review.internal,ocr.lan ocr viewer --addr :3000
|
||||
```
|
||||
|
||||
Это блокирует атаки DNS rebinding на локальный viewer.
|
||||
|
||||
## Правила ревью
|
||||
|
||||
OCR разрешает правила ревью по цепочке приоритетов из четырёх уровней. На каждом уровне действует принцип «первое совпадение побеждает»: если путь файла совпал с паттерном, используется это правило; иначе поиск продолжается на следующем уровне.
|
||||
|
||||
| Приоритет | Источник | Путь | Описание |
|
||||
|-----------|----------|------|----------|
|
||||
| 1 (высший) | Флаг `--rule` | Путь, указанный пользователем | Явное переопределение из CLI |
|
||||
| 2 | Конфиг проекта | `<repoDir>/.opencodereview/rule.json` | Правила уровня проекта, можно коммитить в git |
|
||||
| 3 | Глобальный конфиг | `~/.opencodereview/rule.json` | Личные настройки пользователя |
|
||||
| 4 (низший) | Системные по умолчанию | Встроенный `system_rules.json` | Встроенные правила для распространённых языков и типов файлов |
|
||||
|
||||
### Формат файла правил
|
||||
|
||||
Уровни 1–3 используют один и тот же JSON-формат:
|
||||
|
||||
```json
|
||||
{
|
||||
"rules": [
|
||||
{
|
||||
"path": "force-api/**/*.java",
|
||||
"rule": "Все новые методы должны проверять обязательные параметры на null"
|
||||
},
|
||||
{
|
||||
"path": "**/*mapper*.xml",
|
||||
"rule": "Проверять SQL на риски инъекций, ошибки в параметрах и незакрытые теги"
|
||||
}
|
||||
]
|
||||
}
|
||||
```
|
||||
|
||||
- `path` поддерживает рекурсивное сопоставление `**` и расширение фигурных скобок `{java,kt}`.
|
||||
- Внутри каждого уровня правила проверяются в порядке объявления — побеждает первое совпадение.
|
||||
- Если файл правил не существует, он молча пропускается.
|
||||
|
||||
### Фильтрация путей
|
||||
|
||||
Файлы правил также поддерживают поля `include` и `exclude`, управляющие тем, какие файлы попадают в область ревью:
|
||||
|
||||
```json
|
||||
{
|
||||
"rules": [
|
||||
{"path": "**/*.java", "rule": "Проверять null-безопасность"}
|
||||
],
|
||||
"include": ["src/main/**/*.java", "lib/**/*.kt"],
|
||||
"exclude": ["**/generated/**", "vendor/**"]
|
||||
}
|
||||
```
|
||||
|
||||
**Приоритет решений фильтра (от высшего к низшему):**
|
||||
|
||||
| Шаг | Условие | Результат |
|
||||
|-----|---------|-----------|
|
||||
| 1 | Файл бинарный | Исключён |
|
||||
| 2 | Путь совпадает с пользовательским паттерном `exclude` | Исключён |
|
||||
| 3 | Расширение файла не входит в список поддерживаемых | Исключён |
|
||||
| 4 | `include` настроен и путь совпадает | **В ревью** (шаг 5 пропускается) |
|
||||
| 5 | Путь совпадает со встроенным паттерном исключения по умолчанию (тестовые файлы и т. п.) | Исключён |
|
||||
| 6 | Ничего из перечисленного | В ревью |
|
||||
|
||||
**Как это работает:**
|
||||
|
||||
- `include` и `exclude` следуют той же цепочке приоритетов, что и правила ревью (`--rule` > конфиг проекта > глобальный конфиг). Действует **целиком самый приоритетный уровень, на котором include/exclude настроены** — паттерны разных уровней не объединяются.
|
||||
- `exclude` всегда сильнее `include` — файл, совпавший с обоими, исключается.
|
||||
- `include` работает как **обход встроенных паттернов исключения по умолчанию** (например, тестовых файлов), а не как эксклюзивный allowlist: файлы, не совпавшие ни с одним паттерном `include`, всё равно обычным образом проходят проверки фильтра по умолчанию.
|
||||
- Синтаксис паттернов: поддерживаются рекурсивное сопоставление `**`, односегментное `*` и расширение фигурных скобок `{a,b}`. Сопоставление регистронезависимое.
|
||||
|
||||
**Встроенные паттерны исключения по умолчанию** (отфильтровывают тестовые файлы и т. п. — можно переопределить через `include`):
|
||||
|
||||
```
|
||||
**/*_test.go, **/*Test.java, **/*Tests.java, **/*_test.rs,
|
||||
**/*.test.{js,jsx,ts,tsx}, **/*.spec.{js,jsx,ts,tsx}, **/__tests__/**,
|
||||
**/src/test/java/**/*.java, **/src/test/**/*.kt,
|
||||
**/test/**/*_test.py, **/tests/**/*_test.py, **/*_test.py,
|
||||
**/*_spec.rb, **/spec/**/*_spec.rb, **/oh_modules/**
|
||||
```
|
||||
|
||||
## Справочник по конфигурации
|
||||
|
||||
Файл конфигурации: `~/.opencodereview/config.json`
|
||||
|
||||
| Ключ | Тип | Пример |
|
||||
|------|-----|--------|
|
||||
| `llm.url` | string | `https://api.openai.com/v1/chat/completions` |
|
||||
| `llm.auth_token` | string | `sk-xxxxxxx` |
|
||||
| `llm.auth_header` | string | Только для Anthropic: `x-api-key` \| `authorization` |
|
||||
| `llm.model` | string | `claude-opus-4-6` |
|
||||
| `llm.use_anthropic` | boolean | `true` \| `false` |
|
||||
| `language` | string | `English` \| `Chinese` (по умолчанию: Chinese) |
|
||||
| `telemetry.enabled` | boolean | `true` \| `false` |
|
||||
| `telemetry.exporter` | string | `console` \| `otlp` |
|
||||
| `telemetry.otlp_endpoint` | string | Адрес OTLP-коллектора |
|
||||
| `telemetry.content_logging` | boolean | Включать промпты в телеметрию |
|
||||
|
||||
Переменные окружения имеют приоритет над файлом конфигурации.
|
||||
|
||||
### Переменные окружения
|
||||
|
||||
| Переменная | Назначение |
|
||||
|------------|------------|
|
||||
| `OCR_LLM_URL` | URL эндпоинта LLM API |
|
||||
| `OCR_LLM_TOKEN` | API-ключ / токен авторизации |
|
||||
| `OCR_LLM_AUTH_HEADER` | Заголовок авторизации Anthropic (`x-api-key` или `authorization`) |
|
||||
| `OCR_LLM_MODEL` | Имя модели |
|
||||
| `OCR_USE_ANTHROPIC` | `true` = Anthropic, `false` = OpenAI |
|
||||
|
||||
|
||||
## Телеметрия
|
||||
|
||||
Интеграция с OpenTelemetry для наблюдаемости (спаны, метрики). По умолчанию выключена.
|
||||
|
||||
```bash
|
||||
ocr config set telemetry.enabled true
|
||||
ocr config set telemetry.exporter otlp
|
||||
ocr config set telemetry.otlp_endpoint localhost:4317
|
||||
```
|
||||
|
||||
Установите `telemetry.content_logging`, чтобы включать промпты и ответы LLM в экспортируемые данные.
|
||||
|
||||
## Участие в разработке
|
||||
|
||||
В [CONTRIBUTING.ru-RU.md](CONTRIBUTING.ru-RU.md) описаны настройка окружения разработки, рекомендации по коду и порядок отправки pull request'ов.
|
||||
|
||||
## История звёзд
|
||||
|
||||
[](https://star-history.com/#alibaba/open-code-review&Date)
|
||||
|
||||
## Лицензия
|
||||
|
||||
[Apache-2.0](LICENSE) — Copyright 2026 Alibaba
|
||||
|
|
@ -11,7 +11,7 @@
|
|||
<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>
|
||||
</p>
|
||||
<p align="center">
|
||||
<a href="README.md">English</a> | 简体中文 | <a href="README.ja-JP.md">日本語</a> | <a href="README.ko-KR.md">한국어</a>
|
||||
<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>
|
||||
</p>
|
||||
|
||||
---
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue