Repository navigation
refactor(entry): in-memory CLI invocation for beyin.py (launcher unchanged) - #256
Conversation
…xai#256) The batch launcher is rewritten by the update it starts; cmd.exe resumes at the old byte offset, so the first update from 3.8.1 would end before pause and exit /b. A non-ASCII Python path (a Turkish user profile) would also depend on chcp 65001 with no CI coverage, and chcp is not restored. The saving is one PowerShell start on a manual click; hooks keep EncodedCommand.
…venoxai#256) With the in-memory call, human_result ran outside the old parse guard, so history (a list) exited 1 with "'list' object has no attribute 'get'". Restore the captured path's fallback. The test also pins the gain of the direct call: argparse errors are no longer swallowed in human mode.
|
Katkı için teşekkürler. İki parçayı ayrı ayrı inceledik: doğrudan çağrıyı aldık, Windows launcher değişikliğini geri çevirdik. Başlığı içeriğe göre güncelledim. Doğrudan çağrı ( Bir gerileme bulduk: Hız notu: bu değişiklik bir Windows launcher (
Bu yönde tekrar denemek istersen: dosyanın bayt düzeni bir güncelleme boyunca uyumlu kalmalı, Windows CI'da ASCII olmayan bir Python yolu (ör. Türkçe karakterli klasörde venv) ile test eklenmeli ve kod sayfası geri yüklenmeli. Tam paket Python 3.11 ve 3.14'te geçti, |
🎯 Özet ve Amaç
Bu PR, DietrichGebert/ponytail ("Makes your AI agent think like the laziest senior dev in the room. The best code is the code you never wrote") kıdemli mühendislik denetimi metodolojisi doğrultusunda Seçenek A (Paket 1: Launcher Matruşkası ve CLI Bellek-İçi Çağrım Sadeleştirmesi) geliştirmelerini hayata geçirir.
Sistemde gereksiz süreç başlatma (cold start), yapay tampon bellek kopyalamaları ve JSON serileştirme/ayrıştırma dolambaçları elenerek mimari en yalın, doğrudan ve hızlı haline getirilmiştir.
📊 Ölçülen Somut Kazanımlar (Windows 11 · Canlı Kasa Ölçümleri)
beyin.pyEtkileşimli CLI Çağrımıio.StringIOcapture + JSON loadsreturn_result=True)v3_launchers_test.pyTest Süresidoctor --humanSüresi🔍 Neler Değişti?
1. Launcher Matruşkasının Tasfiyesi (
template/.claude/scripts/beyin_v3_launchers.py)Windows'ta
Beyni Guncelle.cmddosyası, Unicode yol desteği bahanesiyle Base64 UTF-16LE kodlanmış bir PowerShell komutu (powershell.exe -NoProfile -NonInteractive -EncodedCommand ...) çağırıyor, PowerShell ise dönüp Python'ı çalıştırıyordu (CMD -> PowerShell -> Python).base64bağımlılığı tamamen kaldırıldı.chcp 65001 >nulile UTF-8 moduna geçirilip%~dp0beyin.pyvesys.executableile Python'ı doğrudan çalıştıracak şekilde modernize edildi.%~dp0Windows dosya sisteminde batch dosyasının bulunduğu dizini dosya yolu seviyesinde doğrudan çözdüğü için Unicode (Ö,ç,ı) ve boşluk içeren klasör yollarında dahi PowerShell'e ihtiyaç kalmadı.2.
beyin.pystdout-JSON Dolambacının Tasfiyesi (scripts/beyin_entry.py&scripts/beyin_v3.py)Kullanıcının çağırdığı
beyin.py(entrypoint), dahili CLI modülünü (beyin_v3_cli.py) çalıştırırken:output, error = io.StringIO(), io.StringIO()oluşturuyor,redirect_stdout(output)ile stdout'u StringIO'ya kilitliyor,dictsonucunu JSON string yapıp stdout'a yazıyor,beyin.pyStringIO tamponundan string'i okuyor,json.loads()ile string'i tekrar Pythondict'e dönüştürüyor,human_result()ile biçimlendirip ekrana basıyordu.Kendi iç fonksiyonunu çağıran bir Python süreci, bellek içindeki veriyi önce JSON string'e çevirip stdout yakalamasıyla tekrar Python nesnesine dönüştürüyordu.
scripts/beyin_v3.pyiçindekimain(argv=None, return_result=False)fonksiyonunareturn_result=Trueparametresi eklendi.return_result=Trueçağrıldığında komut sonucu JSON serialize edilmeden doğrudan(result_dict, exit_code)tuple'ı olarak döndürülür.scripts/beyin_entry.pyartıkio.StringIO,redirect_stdoutvejson.loadsdöngüsüne girmeden doğrudan Python nesnesi üzerinden çalışır.from contextlib import redirect_stdout, redirect_stderrveimport ioimportları modül başlatma yolundan temizlendi (eski kurulu sürümler için güvenli lazy fallback olarak korundu).🧪 Testler ve Doğrulama
Tüm değişiklikler tam geriye dönük uyumluluk (backward compatibility) ve katı regresyon testleriyle güvence altına alınmıştır:
tests/v3_launchers_test.py:Beyin Ölçüm & Space) Windows.cmdlauncher'ının doğru argümanlarla çalıştığı ve exit code'u (23) maskelemeden ilettiği doğrulandı.%~dp0ve UTF-8 kod sayfası kullandığı assertion ile sabitlendi.tests/v3_entry_test.py:--json) hem insan (--human) modlarının tam uyumlu çalıştığı test edildi.test_entry_in_memory_invocation_avoids_io_redirecttesti eklenerek in-memory sonucun hatasız teslim edildiği doğrulandı.v3_launchers_test.py(302 ms)v3_entry_test.py(3/3 OK)v3_companion_test.py&v3_companion_rules_test.py(20/20 OK)v3_update_test.py(26/26 OK - tüm installer/rollback/update paketleri)📦 Bağımlılık Politikası
--json,--human, çıkış kodları) %100 korunmuştur.