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

Dokümantasyon / Entegrasyonlar

GitHub

GitHub Clerk, repo'larınızla GitHub API'si ve shell'deki gh ile git üzerinden çalışır. Varsayılan olarak yalnızca okur; ancak siz yazmayı açarsanız ve her çağrıyı onaylarsanız yazar. Hiçbir zaman repo silmez.

GitHub Clerk

Clerk bir uzmandır: github preset'i. Üç yetkisi vardır: github.read, github.write ve shell.full; github skill'inin de sahibidir. Yalnızca çalışma alanında değil, token'ınızın erişebildiği bütün repo'larda çalışır.

Ana ajan hiçbir hesabı kendisi okumaz. GitHub'ınızla ilgili sorular Clerk'e gider; böylece hesaba erişim tek bir uzmanın yetkileriyle sınırlı kalır.

Kurulum

  1. GitHub'da Settings, Developer settings, Personal access tokens altından bir kişisel erişim token'ı oluşturun. Fine-grained token daha iyi bir seçimdir: repo'ları seçin ve Metadata, Contents, Issues ve Pull requests için okuma izni verin. Yazmayı açacaksanız bunları okuma ve yazma olarak ayarlayın. repo kapsamlı klasik bir token da çalışır ama izinleri çok daha geniştir.

  2. Token'ı ana dizininizdeki .env'ye ekleyin:

    GITHUB_ACCESS_TOKEN=github_pat_change-me
    
  3. github extra'sını kurun. Checkout'tan kuruyorsanız:

    uv sync --extra github
    

Bir sonraki oturumdan itibaren Clerk ekiptedir. ivralo doctor'daki github bölümü neyin hazır olduğunu gösterir. Token hiçbir zaman modele, Python worker'ına ya da shell'e ulaşmaz.

Neleri okur

SorduğunuzÇağırdığı araçlar
bir repo'da açık neler varlist_issues, get_issue, list_issue_comments
bir pull request neleri değiştiriyorget_pull_request_changes, get_pull_request_comments
issue'da adı geçen bir dosyaget_file_content, get_directory_content, list_branches
bir şey nerede tanımlısearch_code, search_issues_and_prs

Her iddia kaynağıyla birlikte gelir: repo, numara, branch ve yol, URL.

Yazmayı açarsanız

Varsayılan ayarlarla GitHub'da hiçbir şey değişmez. IVRALO_GITHUB_WRITE=true şunları açar: API üzerinden issue ve yorum oluşturma ve düzenleme, etiket ve atanan kişi ekleme, pull request açma ve review isteme; branch, dosya ve repo oluşturma.

Bunların her biri yüksek riskli bir çağrı olarak onayınızı bekler: y onaylar, Enter onaylamaz. Başında kimsenin olmadığı çalıştırmalarda, örneğin ivralo ask'te, bir pipe'ta ya da bir zamanlamada bu araçların hiçbiri bulunmaz.

delete_repository, ivralo'nun kurduğu araç setinde hiçbir modda yoktur. Hiçbir ayar ya da onay onu kullanılabilir hale getiremez.

Shell'de gh ve git

Clerk API'nin yanında shell üzerinden gh ve git de kullanır: CI çalıştırmalarını ve log'larını okumak, bir pull request'i incelemek, clone almak, commit atmak gibi. gh sizin kendi oturumunuzu kullanır; bunu bir kez, elle kurarsınız:

gh auth login
gh auth setup-git

İkinci komut, git'in https üzerinden aynı kimlik bilgisini kullanmasını sağlar. Dışarıya https üzerinden çıkılır: SSH_AUTH_SOCK shell'e aktarılmadığı için ssh remote'larının bağlanacağı bir agent yoktur. ivralo gh'ye hiçbir zaman token vermez; token basacak komutlar reddedilir.

Her komut çalışmadan önce sınıflandırılır:

Hemen çalışırÖnce sorarHer zaman reddedilir
gh pr list, view, diff, checks; gh issue list, view; gh run list, view; gh api okumalarıgh pr create, comment, review; gh issue create, comment; gh release create; gh run rerungh pr merge, gh pr ready, gh pr review --approve; gh repo, issue, release, run, gist ve project delete; gh auth token
git status, log, diff, show, blame; git fetchgit add, commit, switch, merge, rebase; git clone; git pullher biçimiyle git push; git reset --hard; git clean; git commit --amend; git credential

Onay isteyen gh komutları diyalogda yüksek riskli olarak görünür. Ret kesindir: diyalogda verilen hiçbir cevap ya da permissions.json'daki hiçbir kayıt onu kaldıramaz. Soracak kimse yoksa onay gerektiren bütün komutlar da reddedilir. Kuralların tamamı Shell komutları sayfasında.

Tek push

Shell hiçbir zaman push yapmaz. ivralo'nun yaptığı tek push, git.push yetkisine bağlı open_pull_request aracıdır: ivralo'nun açtığı bir branch'i push'lar ve onun için taslak bir pull request açar. Bu yetki Code Engineer'da ve ekibin yetkilerini taşıyan ana ajanda bulunur.

Makineden herhangi bir şey çıkmadan önce şu koşulların hepsi sağlanmalıdır:

  • branch'i ivralo açmıştır, varsayılan branch değildir ve remote'ta henüz yoktur;
  • gönderilecek her commit bu oturumda, ivralo'nun kendi git kimliğiyle atılmıştır;
  • hiçbir commit repo'nun hook'larına dokunmaz;
  • klasör güvenilirdir ve origin, forge'un host'unda bir https URL'sidir;
  • forge'un host'u egress politikasından geçer.

Her çağrıda onay ister; oturum boyunca geçerli bir cevap bu soruyu kaldırmaz. Soracak kimse yoksa reddedilir. Tek istisna, bu izni başında kimse yokken veren server modudur (IVRALO_MODE=server). Hiçbir zaman merge etmez, onay vermez ya da auto-merge açmaz; merge, GitHub'da bir insanın işidir.

ivralo'nun git kimliği ivralo init --server ile, --git-name ve --git-email seçenekleri kullanılarak belirlenir; sizin git ayarlarınızda değil, ana dizindeki gitconfig'te tutulur. Push sırasında kimlik doğrulama ana dizindeki .env'de bulunan GITHUB_ACCESS_TOKEN ile, kurulumda bu seçildiyse gh oturumuyla yapılır. Bu token'a, çalıştığı repo'larda yalnızca contents: write ve pull requests: write izni verin, fazlasını vermeyin. Ayrıntılar Git ve Taslak pull request'ler sayfalarında.

Pull request kartı

Bir tur pull request açtığında oturum, onu açan adımın altında bir kart gösterir: numara ve başlık, branch'ler, durum (açık, taslak, merge edilmiş ya da kapalı) ve önce başarısız olanlar gelecek şekilde kontroller. Kontroller sürerken kart onları 30 saniyede bir, en fazla 30 dakika boyunca yeniden okur. ivralo ask kartı cevaptan sonra bir kez basar.

Ayarlar

DeğişkenVarsayılanNeyi belirler
GITHUB_ACCESS_TOKENtanımsıztoken; tanımlı değilse GitHub Clerk ekipte olmaz
IVRALO_GITHUB_WRITEfalseher biri ayrıca onay isteyen API yazma araçları
IVRALO_GITHUB_URLgithub.combir GitHub Enterprise sunucusunun API adresi, örneğin https://github.example.com/api/v3; buradaki host, open_pull_request'in push yapabildiği tek forge'dur

IVRALO_GITHUB_URL yalnızca ana dizindeki .env'den ve ortamdan okunur; bir repo'nun .ivralo/.env dosyasından hiçbir zaman okunmaz.