Dokümantasyon / Geliştirici modu
Düzenleme ve onaylar
Bir şeyi değiştiren her çağrı önce tek bir diyalogda durur. Bu diyaloğun tamamı, izin modları, başında kimse yokken nasıl düzenleme yapılabileceği ve sormamasını söyleseniz bile ivralo'nun yine sorduğu durumlar bu sayfada.
Neyi sorar, neyi sormaz
Yalnızca okuma yapan bir çağrı hiçbir zaman sormaz: dosya okumak, arama yapmak, listelemek, git'ten okumak, skill yüklemek, bir uzmana iş devretmek. Şunlar ise diyalogda durup sizi bekler:
- bir düzenleme ya da yeni bir dosya (
edit_file,write_file, dil sunucusu üzerinden yeniden adlandırma, sembol düzenlemeleri); - Python çalıştırma ortamı
run_python; - politikanın kendi başına izin vermediği bir shell komutu (Shell komutları);
- git'e yazma işlemleri (stage'leme, commit, branch, revert) ve tek push (Git);
- e-posta ya da sohbet mesajı gibi bir gönderim.
Bu sırada çalıştırma arka planda bekletilir. Diyalogda gösterilen hiçbir şey kırpılmaz: düzenleme, değiştirilen kısmın diff'i olarak, yeni dosya bütünüyle, komut da onu çalıştıracak shell'in okuyacağı şekilde renklendirilerek gösterilir. PageUp, PageDown ve ok tuşlarıyla kaydırabilirsiniz. Terminal boyutu ne olursa olsun cevap seçenekleri ekranda kalır.
Diyalog
Başlıkta ivralo'nun ne yapmak istediği, kimin sorduğu ve değişikliğin boyutu (new file, 90 lines, overwrites, +12 −3) yazar. Altında çağrıyla ilgili bilgiler bulunur:
| Satır | Ne gösterir |
|---|---|
| effects | Çağrının ne yaptığı; aracın sözleşmesinden okunur (writes files, runs a command) |
| risk | Düşük, orta ya da yüksek ve riski neyin yükselttiği |
| reason | Düzenlemeler kabul edilmiş olsa bile neden yine sorduğu (isteğinizde adı geçmeyen bir test gibi) |
| where | Worktree'de çalışan bir coder için: düzenlemenin hangi worktree'ye yazılacağı |
| runs | Bir doğrulama için: çalıştıracağı tanımlı komutlar |
<agent> says | Soran ajanın çağrıdan hemen önce yazdıkları, kendi adıyla. Böylece bu sözler hiçbir zaman ivralo'nunmuş gibi okunmaz |
Ardından cevap seçenekleri gelir. Yalnızca bu çağrı için geçerli olanlar gösterilir:
| Tuş | Cevap | Hangi çağrılarda |
|---|---|---|
y | Bu çağrı | her çağrıda |
| Enter | Bu çağrı | yüksek riskliler hariç her çağrıda |
a | Bu çağrı ve bu turda çalıştırılmak istenen diğer her şey | her seferinde sormak zorunda olmayan her çağrıda |
s | Bu düzenleme ve oturumun sonuna kadar bütün düzenlemeler | düzenlemelerde |
p | Çalıştır ve bu repo'da önekine ya da eriştiği host'a her zaman izin ver | güvenilen bir klasörde shell komutlarında ve git yazma işlemlerinde |
n, Esc | Reddet ve modele bir not bırak | her çağrıda |
d | Değişikliği diff görüntüleyicide salt okunur aç; q ile geri dönülür | düzenlemelerde |
a tur bitince geçersiz olur. Bir planın dalgasında yalnızca o adımın çalışmasını kapsar, yani yanında çalışan başka bir adım yine sorar.
n diyaloğu hemen kapatmaz. Onun yerine ne yapılması gerektiğini yazabileceğiniz bir satır açar, örneğin "eski dönüş değerini koru, onun yerine bir test ekle". Enter bu notu retle birlikte modele gönderir. İkinci kez Esc'e basarsanız not bırakmadan reddedersiniz.
Bazı çağrılar her zaman sorar. Sözleşmesinde her zaman soracağı yazan araçlarda (gönderim, push) daha geniş cevaplar pasif hâle getirilmez, hiç gösterilmez. Böylece hiçbir tuş o çağrının sormasını kaldıramaz.
Yüksek risk. Yüksek riskli bir çağrıda (gönderim, gh ile GitHub gibi başka bir yerde yapılan bir değişiklik ya da hiçbir sözleşmenin kapsamadığı bir araç) Enter'a hiçbir şey bağlı değildir ve odak "reddet" seçeneğindedir. Onay için bilerek basılmış bir y gerekir.
İzin modları
| Mod | Nasıl açılır | Ne olur |
|---|---|---|
| Normal | varsayılan | Yukarıdaki bütün çağrılar sorar |
| Düzenlemeleri kabul et | bir düzenleme diyaloğunda s ya da /accept-edits | Oturumun sonuna kadar düzenlemeler diyalogsuz uygulanır; shell komutları, Python ve gönderimler yine sorar |
| Otomatik onay | /confirm | Her zaman soranlar dışında hiçbir çağrı sormaz |
/accept-edits düzenlemeleri otomatik kabul etmeyi açıp kapatır. /confirm otomatik onayı açıp kapatır. Otomatik onayı kapattığınızda düzenlemeleri kabul etme de kapanır, böylece bütün sorular bir anda geri gelir.
Bekleyen bir job'un sorusu da aynı diyalogda açılır, ama yalnızca üç seçenekle: y, o job'un geri kalanındaki bütün düzenlemeler için s ve n. Çünkü a'nın kapsayacağı bir tur da, p'nin kaydedeceği bir önek de yoktur.
Başında kimse olmayan çalıştırmalar ve allow_tools
Kimsenin izlemediği bir çalıştırmada, örneğin bir pipe içindeki ivralo ask'te, zamanlanmış bir görevde ya da bir job'da diyaloğu gösterecek kimse yoktur. Böyle bir çalıştırmanın Python kodu worker'ın sınırları içinde çalışır (Python worker'ı). Ama düzenleme, git'e yazma ve onay gerektiren bir shell komutu kimse görmeden çalıştırılmaz, reddedilir. Gönderimler de öyle.
Başında kimse olmayan bir çalıştırmanın düzenleme yapabilmesinin tek yolu, bir permissions.json içindeki allow_tools'tur. Bu dosya home dizinindeki ya da repo'nun .ivralo/permissions.json dosyası olabilir:
{
"allow_tools": ["edit_file", "write_file"]
}
| Ad | Başında kimse olmayan bir çalıştırmaya neye izin verir |
|---|---|
edit_file | Dosya düzenlemeye; aynı yazma işleminden geçen altı sembol düzenlemesi de dahil |
write_file | Dosya oluşturmaya ya da bir dosyayı baştan sona değiştirmeye; edit_file bunu hiçbir zaman kapsamaz |
replace_symbol, replace_range, insert_before_symbol, insert_after_symbol, delete_symbol, add_import | Her sembol düzenlemesine ayrı ayrı |
git_create_branch, git_stage_files, git_unstage_files, git_commit, git_revert_commit, git_restore_file | Her git yazma işlemine ayrı ayrı |
Başka bir ad yazılırsa ivralo doctor bunu raporlar ve o ad yok sayılır. Oturum içinde burada adı geçen bir araç, diyalog yerine bir allowed satırıyla çalışır. Genelde doğru yer repo'nun kendi dosyasıdır: "bu repo başında kimse yokken düzenlenebilir" cümlesi, üzerinde çalıştığınız her repo için nadiren doğrudur. Güvenmediğiniz bir klasörde repo'nun allow_tools'u geçerli olmaz.
İsteğinizde adı geçmeyen bir test
Hata yerinde dururken kırmızı bir suite'i yeşile çevirmenin kestirme yolu testi değiştirmektir. Bu yüzden var olan bir test dosyasının düzenlenmesi, düzenlemeler kabul edilmiş olsa bile onay ister ve diyalogdaki bilgiler arasında edits a test the task did not name gerekçesi yer alır. Başında kimse olmayan bir çalıştırma ise allow_tools'ta edit_file olsa bile bunu reddeder.
Bir dosyanın test olup olmadığı repo'nun kendi isimlendirmesine göre belirlenir: tests, test, __tests__ ya da spec adlı bir klasörün altında olması ya da adının test_*, *_test.*, *.test.*, *.spec.*, FooTest veya FooTests olması. İsteğinizde dosyanın adı, yolu ya da içindeki bir test geçiyorsa bu kural uygulanmaz. Ana ajanın bir uzmana iş devrederken yazdığı metin bu açıdan hiçbir şey saymaz, yalnızca sizin yazdıklarınız sayılır. Yeni bir test dosyası oluşturmak, var olanı düzenlemek sayılmaz.
Dil sunucusu üzerinden yapılan bir yeniden adlandırma ya da organize-imports, değiştireceği bütün dosyalar üzerinden değerlendirilir. Aralarında adı geçmeyen tek bir test bile olsa çağrının tamamı onay ister, başında kimse yokken de reddedilir.
Bir test gerçekten yanlışsa ajana onu değiştirmek yerine durumu söylemesi (hangi test, ne bekliyor, kod onun yerine ne yapıyor) talimatı verilmiştir. Düzenlemesine izin vermek istiyorsanız dosyanın adını isteğinizde geçirin.
Bir coder'ın worktree'sini entegre etmek
Kendi git worktree'sinde çalışan bir Code Engineer (paralel bir coder ya da bir instance olarak) çalışırken çalışma alanınızda hiçbir şeyi değiştirmez. İşi bitince bütün değişikliği tek bir patch olarak döner ve bu patch entegrasyon diyaloğunda bir kez daha onay ister. Diyalogda adım, coder ve her dosya için eklenen ve silinen satırlar gösterilir.
| Tuş | Cevap |
|---|---|
y, Enter | Patch'i çalışma alanınıza uygula |
s | Uygula ve oturumun sonuna kadar düzenlemeleri kabul et |
n, Esc | Reddet; worktree saklanır |
d | Patch'in tamamını aynı üç seçenekle diff görüntüleyicide aç |
Worktree içindeki her düzenleme yapıldığı anda zaten onay istemişti. Oturum boyunca düzenlemeleri kabul etmek ya da allow_tools'ta edit_file bulunması entegrasyon diyaloğunu da kaldırır. Patch'in nasıl uygulandığı ve çakışma olursa ne olduğu Paralel coder'lar ve worktree'ler sayfasında.