Перейти к основному содержимому

Участие в разработке

Pull request'ы приветствуются, и ждать приглашения не нужно. Это маленький проект; полезное обычно не большая функция, а строка в таблице, фраза в переводе или сообщение об ошибке, достаточно подробное, чтобы по нему можно было действовать.

Самые полезные вклады​

Строка в таблице моделей. Проверка модели — фиксированная пятиминутная задача. Таблица короткая, потому что в ней только те модели, которые кто-то запускал, а отрицательный результат стоит столько же, сколько положительный: о модели, которая не сработала, никто не пишет, поэтому её открывает заново каждый.

Перевод — или одна строка исправления в нём. Их десять. Любой можно исправлять по фразе, не трогая остального — см. Языки. Новый язык — это один файл JSON.

Сообщение об ошибке с четырьмя вещами. Модель и поставщик, записанные точно (qwen3-coder:30b на Ollama, а не «локальная модель»), о чём вы попросили, что произошло, и пятьдесят строк из ~/.opencli/log вокруг сбоя. Перед вставкой просмотрите эти строки на предмет ключей.

Рассказать нам, что вы на самом деле хотели сделать. Встроенные отделы и навыки написаны из догадок о том, что людям нужно. То, за чем вы потянулись и чего не нашли, — самое полезное, что вы можете сказать.

Прежде чем писать код​

Для всего крупнее одной правки сначала откройте issue. Не как шлагбаум — а чтобы договориться о подходе прежде, чем вы потратите на него вечер. PR, пришедший без issue за спиной, всё равно будет прочитан.

Настройка окружения​

Rust и pnpm; рабочее пространство — opencli-rs/, веб-интерфейс — web/, настольная оболочка — desktop/.

git clone https://github.com/ai-dashboad/opencli
cd opencli
pnpm install
cargo build -p opencli-cli

just из корня репозитория запускает вспомогательные команды рабочего пространства; just help их перечисляет.

Прежде чем открывать PR​

just fmt
just fix -p <crate>
cargo test -p <crate>

Не запускайте голый cargo fmt. Дерево отформатировано с imports_granularity=Item, а это опция только для nightly. На stable она молча игнорируется, поэтому cargo fmt перепишет блок импортов почти в каждом файле рабочего пространства и похоронит вашу правку под сотнями посторонних диффов. just fmt вызывает nightly именно поэтому. Без nightly-тулчейна (rustup toolchain install nightly) форматируйте только те файлы, которых касались, а остальное пусть подтвердит CI.

Если вы трогали веб-интерфейс, python3 scripts/i18n-check.py находит английский, который так и не обернули для перевода, включая случаи, которые легко пропустить: текст, разрезанный строчным тегом, и подписи, собираемые в момент импорта.

Что делает PR лёгким для слияния​

  • Одно дело. Несвязанные правки — отдельными PR.
  • Тест, который падает до вашей правки и проходит после. Не полное покрытие — одно утверждение, которое поймало бы эту ошибку.
  • Каждый коммит собирается. Именно это делает возможными ревью и откат.
  • Документация, если поведение изменилось. README, opencli --help или та страница здесь, которая теперь неверна.
  • Что, зачем и как в описании. Именно зачем по диффу не прочитать.

Никакого CLA​

Подписывать нечего. Вклады идут под Apache-2.0, как и всё остальное дерево.

Сообщить об уязвимости​

Не открывайте публичный issue из-за уязвимости. Воспользуйтесь формой закрытого уведомления на GitHub: она доходит до сопровождающих, ничего не публикуя.

Больше всего внимания заслуживают: политика песочницы, путь подтверждений и всё, что решает, к чему вызову инструмента позволено прикасаться. У агента, который читает ваши файлы и выполняет команды на вашей машине, большая поверхность, и лучше, чтобы её нашли вы, а не кто-то другой.

По-человечески​

Относитесь к людям с уважением; мы следуем Contributor Covenant. Предполагайте добрые намерения — письменное общение даётся трудно, ошибайтесь в сторону великодушия. Если что-то сбивает с толку, это само по себе стоит issue: сбивающая с толку документация — это ошибка в документации.