mirror of
https://gitea.toothfairyai.com/ToothFairyAI/tf_code.git
synced 2026-04-07 09:18:41 +00:00
238 lines
11 KiB
Plaintext
238 lines
11 KiB
Plaintext
---
|
||
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) о разрешениях агента.
|
||
|
||
:::note
|
||
Более подробные примеры сопоставления с образцом см. в разделе [Детальные правила (синтаксис объекта)](#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.
|
||
```
|
||
|
||
:::tip
|
||
Используйте сопоставление с образцом для команд с аргументами. `"grep *"` разрешает `grep pattern file.txt`, а сам `"grep"` блокирует его. Такие команды, как `git status`, работают по умолчанию, но требуют явного разрешения (например, `"git status *"`) при передаче аргументов.
|
||
:::
|