İçeriğe geç
ivralo
Bölümler

Dokümantasyon / Referans

permissions.json

ivralo'nun sormadan yapabileceklerini permissions.json ile genişletir ya da daraltırsınız: shell komutu önekleri, ulaşabileceği host'lar ve başında kimse olmayan bir run'ın kullanabileceği araçlar. Bu sayfada anahtarlar ve iki dosyanın nasıl birleştiği anlatılıyor.

İki dosya

DosyaNeredeNeye uygulanırKim yazar
Ana dizindekiivralo ana dizininizdeki permissions.json ya da IVRALO_PERMISSIONS'ın gösterdiği yolBütün çalışma alanlarınaSiz, elle. ivralo bu dosyaya hiçbir zaman yazmaz.
Repo'dakiÇalışma alanında, git'in dışında kalan .ivralo/permissions.jsonYalnızca o repo'yaSiz, elle; onay diyaloğundaki p bir girdi ekler, /permissions remove <n> bir girdiyi çıkarır.

İkisinin de olması gerekmez. IVRALO_PERMISSIONS repo'nun kendi dosyasını gösteriyorsa ortada tek dosya vardır ve bir kez okunur. Her dosyanın neyi eklediğini oturumda /permissions, dışarıda ivralo doctor gösterir.

Anahtarlar

Dosya tek bir JSON nesnesidir. Bütün anahtarlar isteğe bağlıdır.

AnahtarTürVarsayılanNe yapar
versionsayıyokKabul edilir ama okunmaz. 1 yazın.
allowmetin listesi[]Sormadan çalışan shell komutu önekleri.
denymetin listesi[]Her zaman reddedilen shell komutu önekleri.
timeouttam sayı120Çağrı kendi süresini belirtmediğinde bir shell komutunun en fazla kaç saniye çalışabileceği. En az 1; 600'ün üstündeki değerler 600'e indirilir.
allow_toolsaraç adı listesi[]Onaylayacak kimse yokken de çalışabilecek araçlar.
hostsallow ve deny içeren bir nesneyokShell'in, web araçlarının ve Python worker'ının sormadan ulaşabileceği ya da hiçbir zaman ulaşamayacağı host'lar.

Bilinmeyen bir anahtarı, yanlış bir türü ya da hatalı bir girdiyi ivralo doctor bildirir ve o girdi atılır. Dosyanın geri kalanı yine geçerlidir. Geçerli JSON olmayan bir dosya okunamıyor olarak bildirilir.

allow ve deny

Her girdi bir komut önekidir ve sözcük sözcük eşleştirilir. Büyük küçük harf ve fazladan boşluklar fark etmez.

  • uv run pytest, uv run pytest -q ile eşleşir; ama uv run, uv runner ile eşleşmez.
  • gh ve git komutları kanonik biçimleriyle de karşılaştırılır; böylece sözcüklerin arasına giren bir genel seçenek, örneğin git -C repo push, hiçbir şeyi gizleyemez.
  • Birkaç parçadan oluşan bir komut (a && b, bir pipe) parça parça değerlendirilir; komutun tamamı en katı parçası kadar katı sayılır.

Yerleşik red listesi iki dosyanın da altında durur ve hiçbir şey onu kaldıramaz: ağa çıkan programlar (curl, ssh, nc), sistemin paket yöneticileri, git geçmişini yeniden yazan her şey, git push'un her türlü yazımı ve bir pull request'i merge etmek ya da onaylamak. Yerleşik listenin zaten reddettiği bir allow girdisini ivralo doctor bildirir; geçerli olan yerleşik listedir. Ayrıntılar Shell komutları sayfasında.

Bir allow girdisi komutu onaylar, komutun ulaştığı host'u hiçbir zaman onaylamaz. Bilinmeyen bir host'a giden komut yine onay ister.

allow_tools

Başında kimsenin olmadığı bir run'ın, örneğin bir pipe'taki ivralo ask'in, bir zamanlamanın ya da bir job'un, dosya düzenleyebilmesinin ya da git'te değişiklik yapabilmesinin tek yolu budur. Liste kapalıdır: buradakilerin dışında bir ad yazılırsa bildirilir ve atılır.

AdNeye izin verir
edit_fileBir dosyada birebir düzenlemeler. Aşağıdaki sembol düzenlemelerine de izin verir.
write_fileYeni bir dosya da dahil, bir dosyanın tamamını yazmak. edit_file buna hiçbir zaman izin vermez.
replace_symbol, replace_range, insert_before_symbol, insert_after_symbol, delete_symbol, add_importSembol üzerinden yapılan düzenlemeler, her biri ayrı bir ad.
git_create_branch, git_stage_files, git_unstage_files, git_commit, git_revert_commit, git_restore_filegit'e yazan işlemler, her biri ayrı bir ad.

E-posta ya da sohbet mesajı gibi gönderimler bu listeye hiçbir zaman giremez; her zaman onay ister. Push da giremez; başında kimse olmayan bir run'a push yetkisini yalnızca sunucu modu verir. Ayrıntılar Sunucu modu sayfasında.

hosts

{ "hosts": { "allow": ["pypi.org", "10.0.4.12"], "deny": ["metadata.google.internal"] } }

Her girdi bir host adı ya da bir IP adresidir. Bir ad alt alan adlarını da kapsar: example.com, api.example.com'u da kapsar. Joker karakterler, portlar, ağ maskeleri ve URL'ler reddedilir. Farklı biçimde yazılmış bir adres (127.1 ya da onaltılık bir yazım) reddedilir ve yerine nasıl yazılması gerektiği söylenir.

Onay diyaloğunda, host'u yüzünden onay isteyen bir çağrıda p'ye basarsanız o host repo'nun hosts.allow listesine yazılır. Ayrıntılar Makineden neler çıkar sayfasında.

İki dosya nasıl birleşir

AnahtarNasıl birleşir
allow, deny, allow_tools, hosts.allow, hosts.denyİki dosyadaki girdilerin birleşimi.
timeoutRepo'daki değer 120 değilse o; 120 ise ana dizindeki.

İki dosyadan birindeki bir deny reddetmeye yeter, çünkü deny, allow'dan önce okunur. Böylece bir repo, ana dizinde olmayan bir deny ekleyebilir; ama ana dizindeki bir deny'ı bir repo kaldıramaz.

timeout kuralında bir incelik var: repo dosyasına elle 120 yazmak, bu değeri yükseltmiş bir ana dizin ayarını geçersiz kılmaz. İstediğiniz sayıyı, geçerli olmasını istediğiniz dosyaya yazın.

Güvenmediğiniz bir klasörde

Klonladığınız bir repo, bütün kısıtları kaldıran bir .ivralo/permissions.json ile gelebilir. Klasörü güvenilir saymadığınız sürece bu dosyanın yalnızca daraltan kısımları geçerlidir:

Repo'daki anahtarGüvenilmeyen klasörGüvenilen klasör
denyGeçerliGeçerli
hosts.denyGeçerliGeçerli
allow, allow_tools, hosts.allow, timeoutYok sayılırGeçerli

Güvenilmeyen bir klasörde diyalog p seçeneğini sunmaz ve nedenini söyler. Güvenin başka neleri değiştirdiği IVRALO.md sayfasında.

Örnek

Projenin araçlarının çalışmasına izin veren, şirket içindeki paket aynasına erişen ve gecelik bir zamanlamanın kendi düzenlemelerini commit etmesine izin veren bir ana dizin dosyası:

{
  "version": 1,
  "allow": ["uv run pytest", "uv run ruff", "uv add", "make test"],
  "deny": ["python -c", "rm -rf"],
  "timeout": 300,
  "allow_tools": ["edit_file", "git_stage_files", "git_commit"],
  "hosts": {
    "allow": ["pypi.internal.example.com"],
    "deny": ["169.254.169.254"]
  }
}

Yanında yalnızca ekleme yapan bir repo dosyası:

{
  "allow": ["npm run lint"],
  "deny": ["npm publish"]
}

İkisi birlikte, güvenilen bir klasörde şunu verir: beş allow girdisi, üç deny girdisi, ana dizinden gelen 300 saniyelik zaman aşımı ve ana dizindeki araçlar ile host'lar.