wip(docs): i18n (#12681)

This commit is contained in:
Adam
2026-02-09 11:34:35 -06:00
committed by GitHub
parent f74c0339cc
commit dc53086c1e
642 changed files with 192745 additions and 509 deletions

View File

@@ -0,0 +1,237 @@
---
title: Разрешения
description: Контролируйте, какие действия требуют одобрения для выполнения.
---
OpenCode использует конфигурацию `permission`, чтобы решить, должно ли данное действие выполняться автоматически, запрашивать вас или блокироваться.
Начиная с `v1.1.1`, устаревшая логическая конфигурация `tools` устарела и была объединена с `permission`. Старая конфигурация `tools` по-прежнему поддерживается для обеспечения обратной совместимости.
---
## Действия
Каждое правило разрешения разрешается в одно из:
- `"allow"` — запуск без одобрения
- `"ask"` — запрос на одобрение
- `"deny"` — заблокировать действие
---
## Конфигурация
Вы можете устанавливать разрешения глобально (с помощью `*`) и переопределять определенные инструменты.
```json title="opencode.json"
{
"$schema": "https://opencode.ai/config.json",
"permission": {
"*": "ask",
"bash": "allow",
"edit": "deny"
}
}
```
Вы также можете установить все разрешения одновременно:
```json title="opencode.json"
{
"$schema": "https://opencode.ai/config.json",
"permission": "allow"
}
```
---
## Детальные правила (синтаксис объекта)
Для большинства разрешений вы можете использовать объект для применения различных действий на основе входных данных инструмента.
```json title="opencode.json"
{
"$schema": "https://opencode.ai/config.json",
"permission": {
"bash": {
"*": "ask",
"git *": "allow",
"npm *": "allow",
"rm *": "deny",
"grep *": "allow"
},
"edit": {
"*": "deny",
"packages/web/src/content/docs/*.mdx": "allow"
}
}
}
```
Правила оцениваются по шаблону, при этом **выигрывает последнее совпадающее правило**. Обычно сначала ставится универсальное правило `"*"`, а после него — более конкретные правила.
### Подстановочные знаки
В шаблонах разрешений используется простое сопоставление с подстановочными знаками:
- `*` соответствует нулю или более любого символа.
- `?` соответствует ровно одному символу
- Все остальные символы совпадают буквально
### Расширение домашнего каталога
Вы можете использовать `~` или `$HOME` в начале шаблона для ссылки на ваш домашний каталог. Это особенно полезно для правил [`external_directory`](#external-directories).
- `~/projects/*` -> `/Users/username/projects/*`
- `$HOME/projects/*` -> `/Users/username/projects/*`
- `~` -> `/Users/username`
### Внешние каталоги
Используйте `external_directory`, чтобы разрешить вызовы инструментов, затрагивающие пути за пределами рабочего каталога, в котором был запущен OpenCode. Это применимо к любому инструменту, который принимает путь в качестве входных данных (например, `read`, `edit`, `list`, `glob`, `grep` и многие команды `bash`).
Расширение дома (например, `~/...`) влияет только на запись шаблона. Он не делает внешний путь частью текущего рабочего пространства, поэтому пути за пределами рабочего каталога все равно должны быть разрешены через `external_directory`.
Например, это позволяет получить доступ ко всему, что находится под `~/projects/personal/`:
```json title="opencode.json"
{
"$schema": "https://opencode.ai/config.json",
"permission": {
"external_directory": {
"~/projects/personal/**": "allow"
}
}
}
```
Любой каталог, разрешенный здесь, наследует те же настройки по умолчанию, что и текущая рабочая область. Поскольку для [`read` по умолчанию установлено значение `allow`](#defaults), чтение также разрешено для записей под `external_directory`, если оно не переопределено. Добавьте явные правила, когда инструмент должен быть ограничен в этих путях, например, блокировать редактирование при сохранении чтения:
```json title="opencode.json"
{
"$schema": "https://opencode.ai/config.json",
"permission": {
"external_directory": {
"~/projects/personal/**": "allow"
},
"edit": {
"~/projects/personal/**": "deny"
}
}
}
```
Держите список сосредоточенным на доверенных путях и добавляйте дополнительные правила разрешения или запрета по мере необходимости для других инструментов (например, `bash`).
---
## Доступные разрешения
Разрешения OpenCode привязаны к имени инструмента, а также к нескольким мерам безопасности:
- `read` — чтение файла (соответствует пути к файлу)
- `edit` — все модификации файлов (охватывает `edit`, `write`, `patch`, `multiedit`)
- `glob` — подстановка файла (соответствует шаблону подстановки)
- `grep` — поиск по контенту (соответствует шаблону регулярного выражения)
- `list` — список файлов в каталоге (соответствует пути к каталогу)
- `bash` — запуск команд оболочки (соответствует проанализированным командам, например `git status --porcelain`)
- `task` — запуск субагентов (соответствует типу субагента)
- `skill` — загрузка навыка (соответствует названию навыка)
- `lsp` — выполнение запросов LSP (в настоящее время не детализированных)
- `todoread`, `todowrite` — чтение/обновление списка дел.
- `webfetch` — получение URL-адреса (соответствует URL-адресу)
- `websearch`, `codesearch` — поиск в сети/коде (соответствует запросу)
- `external_directory` — срабатывает, когда инструмент касается путей за пределами рабочего каталога проекта.
- `doom_loop` — срабатывает, когда один и тот же вызов инструмента повторяется 3 раза с одинаковым вводом.
---
## По умолчанию
Если вы ничего не укажете, OpenCode запустится с разрешенных значений по умолчанию:
- Большинство разрешений по умолчанию имеют значение `"allow"`.
- `doom_loop` и `external_directory` по умолчанию равны `"ask"`.
- `read` — это `"allow"`, но файлы `.env` по умолчанию запрещены:
```json title="opencode.json"
{
"permission": {
"read": {
"*": "allow",
"*.env": "deny",
"*.env.*": "deny",
"*.env.example": "allow"
}
}
}
```
---
## Что означает «Спросить»
Когда OpenCode запрашивает одобрение, пользовательский интерфейс предлагает три результата:
- `once` — утвердить только этот запрос
- `always` — одобрять будущие запросы, соответствующие предложенным шаблонам (до конца текущего сеанса OpenCode).
- `reject` — отклонить запрос
Набор шаблонов, которые одобрит `always`, предоставляется инструментом (например, утверждения bash обычно включают в белый список безопасный префикс команды, такой как `git status*`).
---
## Агенты
Вы можете переопределить разрешения для каждого агента. Разрешения агента объединяются с глобальной конфигурацией, и правила агента имеют приоритет. [Подробнее](/docs/agents#permissions) о разрешениях агента.
:::примечание
Более подробные примеры сопоставления с образцом см. в разделе [Детальные правила (синтаксис объекта)](#granular-rules-object-syntax) выше.
:::
```json title="opencode.json"
{
"$schema": "https://opencode.ai/config.json",
"permission": {
"bash": {
"*": "ask",
"git *": "allow",
"git commit *": "deny",
"git push *": "deny",
"grep *": "allow"
}
},
"agent": {
"build": {
"permission": {
"bash": {
"*": "ask",
"git *": "allow",
"git commit *": "ask",
"git push *": "deny",
"grep *": "allow"
}
}
}
}
}
```
Вы также можете настроить разрешения агента в Markdown:
```markdown title="~/.config/opencode/agents/review.md"
---
description: Code review without edits
mode: subagent
permission:
edit: deny
bash: ask
webfetch: deny
---
Only analyze code and suggest changes.
```
:::кончик
Используйте сопоставление с образцом для команд с аргументами. `"grep *"` разрешает `grep pattern file.txt`, а сам `"grep"` блокирует его. Такие команды, как `git status`, работают по умолчанию, но требуют явного разрешения (например, `"git status *"`) при передаче аргументов.
:::