mirror of
https://gitea.toothfairyai.com/ToothFairyAI/tf_code.git
synced 2026-04-02 23:23:45 +00:00
231 lines
7.1 KiB
Plaintext
231 lines
7.1 KiB
Plaintext
---
|
|
title: Dozvole
|
|
description: Kontrolirajte koje radnje zahtijevaju odobrenje za pokretanje.
|
|
---
|
|
|
|
OpenCode koristi `permission` konfiguraciju da odluči da li će se određena radnja pokrenuti automatski, zatražiti od vas ili biti blokirana.
|
|
Od `v1.1.1`, naslijeđena `tools` logička konfiguracija je zastarjela i spojena je u `permission`. Stara `tools` konfiguracija je još uvijek podržana za kompatibilnost unatrag.
|
|
|
|
---
|
|
|
|
## Akcije
|
|
|
|
Svako pravilo dozvole rješava jedno od:
|
|
|
|
- `"allow"` — pokrenuti bez odobrenja
|
|
- `"ask"` — upit za odobrenje
|
|
- `"deny"` — blokiraj akciju
|
|
|
|
---
|
|
|
|
## Konfiguracija
|
|
|
|
Dozvole možete postaviti globalno (sa `*`) i nadjačati određene alate.
|
|
|
|
```json title="opencode.json"
|
|
{
|
|
"$schema": "https://opencode.ai/config.json",
|
|
"permission": {
|
|
"*": "ask",
|
|
"bash": "allow",
|
|
"edit": "deny"
|
|
}
|
|
}
|
|
```
|
|
|
|
Također možete postaviti sve dozvole odjednom:
|
|
|
|
```json title="opencode.json"
|
|
{
|
|
"$schema": "https://opencode.ai/config.json",
|
|
"permission": "allow"
|
|
}
|
|
```
|
|
|
|
---
|
|
|
|
## Granularna pravila (sintaksa objekta)
|
|
|
|
Za većinu dozvola, možete koristiti objekt za primjenu različitih radnji na osnovu unosa alata.
|
|
|
|
```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"
|
|
}
|
|
}
|
|
}
|
|
```
|
|
|
|
Pravila se procjenjuju na osnovu podudaranja uzorka, pri čemu **pobjeđuje **poslednje odgovarajuće pravilo\*_. Uobičajeni obrazac je da se prvo pravilo `"_"` stavi sveobuhvatno, a poslije njega konkretnija pravila.
|
|
|
|
### Zamjenski znakovi
|
|
|
|
Uzorci dozvola koriste jednostavno podudaranje zamjenskih znakova:
|
|
|
|
- `*` odgovara nula ili više bilo kojeg znaka
|
|
- `?` odgovara tačno jednom znaku
|
|
- Svi ostali likovi se bukvalno podudaraju
|
|
|
|
### Proširenje kućnog imenika
|
|
|
|
Možete koristiti `~` ili `$HOME` na početku obrasca da referencirate svoj početni direktorij. Ovo je posebno korisno za [`external_directory`](#external-directories) pravila.
|
|
|
|
- `~/projects/*` -> `/Users/username/projects/*`
|
|
- `$HOME/projects/*` -> `/Users/username/projects/*`
|
|
- `~` -> `/Users/username`
|
|
|
|
### Vanjski imenici
|
|
|
|
Koristite `external_directory` da dozvolite pozive alata koji dodiruju putanje izvan radnog direktorija gdje je OpenCode pokrenut. Ovo se odnosi na bilo koji alat koji uzima putanju kao ulaz (na primjer `read`, `edit`, `list`, `glob`, `grep` i mnoge `bash` komande).
|
|
Proširenje kuće (poput `~/...`) utiče samo na način na koji je obrazac napisan. Ne čini vanjsku stazu dijelom trenutnog radnog prostora, tako da staze izvan radnog direktorija i dalje moraju biti dozvoljene preko `external_directory`.
|
|
Na primjer, ovo omogućava pristup svemu pod `~/projects/personal/`:
|
|
|
|
```json title="opencode.json"
|
|
{
|
|
"$schema": "https://opencode.ai/config.json",
|
|
"permission": {
|
|
"external_directory": {
|
|
"~/projects/personal/**": "allow"
|
|
}
|
|
}
|
|
}
|
|
```
|
|
|
|
Svaki direktorij koji je ovdje dozvoljen nasljeđuje iste zadane postavke kao trenutni radni prostor. Pošto je [`read` zadano na `allow`](#defaults), čitanje je također dozvoljeno za unose pod `external_directory` osim ako se ne poništi. Dodajte eksplicitna pravila kada bi alat trebao biti ograničen na ovim stazama, kao što je blokiranje uređivanja uz zadržavanje čitanja:
|
|
|
|
```json title="opencode.json"
|
|
{
|
|
"$schema": "https://opencode.ai/config.json",
|
|
"permission": {
|
|
"external_directory": {
|
|
"~/projects/personal/**": "allow"
|
|
},
|
|
"edit": {
|
|
"~/projects/personal/**": "deny"
|
|
}
|
|
}
|
|
}
|
|
```
|
|
|
|
## Neka lista bude fokusirana na pouzdane staze, a dodatni sloj dozvoljava ili odbija pravila prema potrebi za druge alate (na primjer `bash`).
|
|
|
|
## Dostupne dozvole
|
|
|
|
Dozvole OpenCode-a su označene imenom alata, plus nekoliko sigurnosnih mjera:
|
|
|
|
- `read` — čitanje datoteke (odgovara putanji datoteke)
|
|
- `edit` — sve izmjene fajlova (pokriva `edit`, `write`, `patch`, `multiedit`)
|
|
- `glob` — globbiranje fajla (odgovara glob uzorku)
|
|
- `grep` — pretraga sadržaja (podudara se sa regularnim izrazom)
|
|
- `list` — lista fajlova u direktorijumu (podudara se sa putanjom direktorijuma)
|
|
- `bash` — izvođenje komandi ljuske (podudara se s raščlanjenim komandama kao što je `git status --porcelain`)
|
|
- `task` — pokretanje subagenta (odgovara tipu podagenta)
|
|
- `skill` — učitavanje vještine (odgovara nazivu vještine)
|
|
- `lsp` — pokretanje LSP upita (trenutno negranularno)
|
|
- `todoread`, `todowrite` — čitanje/ažuriranje liste obaveza
|
|
- `webfetch` — dohvaćanje URL-a (odgovara URL-u)
|
|
- `websearch`, `codesearch` — pretraživanje weba/koda (odgovara upitu)
|
|
- `external_directory` — pokreće se kada alat dodirne staze izvan radnog direktorija projekta
|
|
- `doom_loop` — aktivira se kada se isti poziv alata ponovi 3 puta sa identičnim unosom
|
|
|
|
---
|
|
|
|
## Defaults
|
|
|
|
Ako ništa ne navedete, OpenCode počinje od dozvoljenih zadanih vrijednosti:
|
|
|
|
- Većina dozvola je zadana na `"allow"`.
|
|
- `doom_loop` i `external_directory` zadano na `"ask"`.
|
|
- `read` je `"allow"`, ali `.env` fajlovi su po defaultu odbijeni:
|
|
|
|
```json title="opencode.json"
|
|
{
|
|
"permission": {
|
|
"read": {
|
|
"*": "allow",
|
|
"*.env": "deny",
|
|
"*.env.*": "deny",
|
|
"*.env.example": "allow"
|
|
}
|
|
}
|
|
}
|
|
```
|
|
|
|
---
|
|
|
|
## Šta radi “Ask”.
|
|
|
|
Kada OpenCode zatraži odobrenje, korisničko sučelje nudi tri ishoda:
|
|
|
|
- `once` — odobri samo ovaj zahtjev
|
|
- `always` — odobri buduće zahtjeve koji odgovaraju predloženim obrascima (za ostatak trenutne OpenCode sesije)
|
|
- `reject` — odbiti zahtjev
|
|
Skup obrazaca koje bi `always` odobrio pruža alat (na primjer, bash odobrenja obično stavljaju na bijelu listu sigurni prefiks komande kao što je `git status*`).
|
|
|
|
---
|
|
|
|
## Agenti
|
|
|
|
Možete nadjačati dozvole po agentu. Dozvole agenta su spojene sa globalnom konfiguracijom, a pravila agenta imaju prednost. [Saznajte više](/docs/agents#permissions) o dozvolama agenta.
|
|
:::note
|
|
Pogledajte gornji odjeljak [Granularna pravila (sintaksa objekata)](#granular-rules-object-syntax) za detaljnije primjere podudaranja uzoraka.
|
|
:::
|
|
|
|
```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"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
```
|
|
|
|
Također možete konfigurirati dozvole agenta u Markdownu:
|
|
|
|
```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
|
|
Koristite podudaranje uzoraka za naredbe s argumentima. `"grep *"` dozvoljava `grep pattern file.txt`, dok bi ga samo `"grep"` blokirao. Naredbe poput `git status` rade za zadano ponašanje, ali zahtijevaju eksplicitnu dozvolu (kao `"git status *"`) kada se prosljeđuju argumenti.
|
|
:::
|