Azycode, bağımsız (dependency-free) bir AI kodlama CLI aracıdır. 51 kaynak modülü, ~17.500 satır JS kodu ve 50 test dosyası (~6.800 satır) ile orta-ölçekli, mimari olarak zengin bir projedir. COMPLETION_AUDIT.md'e göre çoğu temel özellik tamamlanmış durumdadır, ancak mimari, güvenlik, test kapsamı ve performans alanlarında önemli geliştirme fırsatları mevcuttur.
A) Path Traversal Koruması (path-guard.js)
- Sorun: Symlink traversal saldırısı mümkün (
ln -s /etc/passwd etc-passwd→write_file) - Sorun:
./.git/configprefix bypass (^\.gitregex eşleşmez) - Eylem:
fs.realpathSyncile symlink çözümlemesi ekle - Eylem:
path.normalize+startsWith(root)kontrolü uygula
B) Patch Validation Entegrasyonu (patch-validation.js + path-guard.js)
- Sorun:
assertPatchPathsAllowedhiç çağrılmıyor - Sorun:
runPatchChecksiçinde shell-risk.js entegrasyonu yok - Eylem:
validatePatchiçindeassertPatchPathsAllowedçağrısı ekle - Eylem:
runPatchChecksiçinevaluateShellPolicykontrolü ekle
C) Shell Risk Redirection (shell-risk.js)
- Sorun:
cat > /etc/passwdgibi redirection'lar yakalanmıyor - Sorun:
>,<,>>,|operatörleri kontrol dışı - Eylem: Pipeline segment ayrıştırması ekle
- Eylem: Redirection operatörleri için risk sınıflandırması ekle
D) MCP Güvenliği (mcp.js)
- Sorun: MCP server
commanddoğrulanmıyor - Sorun:
LD_PRELOAD,PATHmanipulation mümkün - Sorun: Timeout sonrası process zombi kalıyor
- Eylem:
commandpath doğrulaması ekle - Eylem:
server.envfiltrelemesi (LD_PRELOADengelle) - Eylem:
SIGTERM+SIGKILLfallback ekle
E) Subagent Güvenliği (subagents.js)
- Sorun:
alwaysApprove: trueprivilege escalation - Sorun:
subagentDepthartırılmadan recursive çağrı - Eylem:
alwaysApprovekaldır, ana agent permission profiline uy - Eylem:
subagentDepth + 1geçişini garantile
A) sandbox.js Eksikliği
- Sorun: ARCHITECTURE.md'de listelenen
sandbox.jsdosyası yok,execution-policy.jssandbox mantığını içeriyor - Eylem: Ya
sandbox.jsoluştur veexecution-policy.js'ten ayır, ya da ARCHITECTURE.md güncelle
B) guard.js İsim Çakışması
- Sorun:
guard.js(git guard) ilepath-guard.jsisimleri benzer, kafa karıştırıcı - Eylem:
guard.js→git-guard.jsolarak yeniden adlandır
C) applyPermissionProfile Çift Export
- Sorun: Hem
config.jshempermissions.jsiçinde var - Eylem: Tek kaynak olarak
permissions.js'te tut,config.js'ten kaldır
Durum: tui.js 2150 satır, 8 farklı sorumluluk içeriyor.
Hedef: Command Pattern uygulayarak modülü böl
src/tui/
├── index.js # launchTui() + input döngüsü
├── commands.js # handleCommand() + 30+ komut handler (Command Registry)
├── agent-runner.js # askAgent() + spinner/stream yönetimi
├── select.js # selectFromList() + readSecret()
├── composer.js # createComposerRenderer() + composer pane
└── commands/ # Her komut için ayrı handler dosyası
├── model.js
├── mission.js
├── config.js
└── ...
Somut İlk Adımlar:
handleCommanddevasa if-else zincirini{ name, handler, args }kayıt sistemine dönüştüraskAgentfonksiyonunuAgentRunnersınıfına çıkar (spinner, streamPanel, cost tracking)selectFromListraw mode yönetiminitry/finallyile garantile
Durum: ui.js 1915 satır, hem "piksel" seviyesi ANSI fonksiyonu hem business logic içeriyor.
Hedef: Katmanlı yapıya dönüştür
src/ui/
├── ansi.js # style, paint, truncate, wrapText, visibleLength
├── layout.js # box, frame, panel, rule, align
├── components.js # errorPanel, sessionCard, toolCard, welcomeScreen
└── cost.js # MODEL_PRICING, estimateCost (business logic)
Somut İlk Adımlar:
MODEL_PRICINGveestimateCost→src/cost.jsveyasrc/pricing.jsmodeColorgibi ortak fonksiyonlar →src/ui/ansi.js(tek kaynak)console.logside-effect'lerini temizle:title(),section()fonksiyonlarıstring[]döndürsünhighlightTermssadece ilk eşleşmeyi vurguluyor → global replace kullan
Hedef: %65 → %90+ satır kapsamı
Öncelikli Eksik Testler:
| Modül | Öncelik | Eksik Senaryolar |
|---|---|---|
context.js |
🔴 Kritik | repoSnapshot (10K+ dosya, monorepo, boş repo), contextPack (symlink, döngüsel import), cache invalidation |
agent.js |
🔴 Kritik | Unit test (şu an sadece E2E), maxSteps limit, invalid tool name, provider 500 error |
cli.js |
🟠 Yüksek | Network timeout, bozuk config.json, provider failure, streaming output |
terminal-input.js |
🟠 Yüksek | TTY olmayan ortam, key kombinasyonları |
model-sync.js |
🟠 Yüksek | 401/403/500 hata kodları, model migration |
agent-errors.js |
🟡 Orta | Error serialization, report generation |
prompt.js |
🟡 Orta | Template rendering, escaping, injection |
memory.js |
🟡 Orta | Add/search/remove, limit handling, persistence |
provider-errors.js |
🟡 Orta | Error formatting, retry classification |
Test Yardımcıları (test/helpers/):
withIsolatedHome()— AZYCODE_HOME izolasyonumockLlmServer()— LLM mock'ları merkezileştirmesetupGitRepo()— Git repo setup'u
modeColorhemui.jshemtui.jsiçinde → tek kaynak- ANSI escape state machine
truncate(),sliceVisible(),skipVisible()içinde tekrar ediyor →ansiWalk()iterator fonksiyonu palettePanelilehelpPanelneredeyse aynı kod →renderCommandList()yardımcı fonksiyonu
A) Context Pack (context.js)
listFiles()300 dosya limiti sabit kodlanmış → konfigüre edilebilir hale getirwalk()recursive senkron çağrı → async iterator kullanarak non-blocking hale getir- Büyük repo (10K+ dosya) için performans testi ekle
fileMtime()her çağrıdafs.statSync→ cache kullan
B) TUI Spinner/Stream Senkronizasyonu
spinnervestreamPanelaynı anda aktif olabilir → race conditionAgentUIManagersınıfı oluştur:start(),stop(),transitionToStream()metodları
C) Config Cache Race Condition
saveConfigtmp yolu${configPath()}.${process.pid}.tmp→ aynı process'te paralel write çakışırcrypto.randomBytesile tmp dosya adı kullan
D) LLM Stream Buffer
openaiChatStreambuffer yönetimi basit →TransformStreamveyaReadableStreamkullanarak daha robust hale getir
A) Config Detection Bug (local-review.js)
scanFilesiçindeconfig.jsonkontrolü file path'te arıyor, content'te değil/.azycode\/config\.json$/.test(file)→ content kontrolüne taşı
B) Secret Detection Eksikliği
password=,secret=,token=,AWS_ACCESS_KEY_ID=AKIA,GITHUB_TOKEN=ghp_,PRIVATE_KEY=pattern'leri ekle
C) SSRF Detection Eksikliği
axios,http.request,node-fetch,urllib,requestkütüphanelerini tespit et
D) Path Traversal Detection
fs.readFileSync(userInput)gibi pattern'leri tespit et
A) Container Mount Validasyonu
buildContainerArgsiçindemount.source/mount.targetdoğrulaması ekle/var/run/docker.sock,/proc,/sys,/devmount'larını engelle
B) Windows PowerShell
-ExecutionPolicy Bypassyerine-ExecutionPolicy RemoteSignedkullan
C) Fallback Bildirimi
- Sandbox → local düşüşü kullanıcıya bildir
- JSDoc: Hiçbir modülde JSDoc yok. En azından public API fonksiyonları için JSDoc ekle
- API Dokümanı:
docs/API.mdoluştur, modüllerin public API'larını listele - Migration Guide: Eski
azy-codekullanıcıları için migration rehberi - Troubleshooting:
docs/TROUBLESHOOTING.md— yaygın hatalar ve çözümler
A) TUI Hata Yönetimi
gitSummarycatch bloğu boş → en azındandebugmodda loglaselectFromListraw mode cleanup →try/finallygarantisi
B) Hata Mesajları
- Daha spesifik hata mesajları (örn: "No active provider" yerine "No active provider: run 'azycode login '")
- Error chaining ve
causeproperty kullanımı
C) Recovery Mekanizmaları
- Bozuk
config.jsoniçin otomatik backup ve recovery azycode doctordaha kapsamlı teşhis (disk space, network, git status)
examples/dizini sadece 1mission.ymliçeriyor- Ekle:
examples/skills/,examples/commands/,examples/missions/,examples/subagents/ - Ekle:
examples/README.md— her örneğin açıklaması
- Path traversal symlink koruması (
path-guard.js) - Patch validation entegrasyonu (
patch-validation.js+path-guard.js) - Shell risk redirection coverage (
shell-risk.js) - MCP server command validation + env filtreleme (
mcp.js) - Subagent alwaysApprove kaldırma + recursive depth fix (
subagents.js) sandbox.js/execution-policy.jstutarlılığı çöz
Çıktı: Güvenlik temeli sağlam, 5 kritik açık kapatılmış
context.jstest suit yazımı (~2-3 gün)agent.jsunit testleri (~1-2 gün)cli.jsek E2E testleri (~1-2 gün)- Test yardımcıları merkezileştirme (
test/helpers/) (~1 gün) - TUI modül bölünmesi başlangıcı (
src/tui/commands.js) (~2-3 gün) - UI modül katmanlı yapıya dönüşüm (
src/ui/) (~2-3 gün)
Çıktı: %90+ test kapsamı, TUI/UI modülleri bölünmüş
- Context pack async walk ve cache iyileştirmeleri
- TUI spinner/stream senkronizasyonu (
AgentUIManager) - Config cache race condition düzeltme
- Local review heuristic genişletme (secret, SSRF, path traversal)
- Execution policy container mount validasyonu
Çıktı: Daha hızlı context pack, daha güvenli shell, daha robust TUI
- JSDoc ekleme (public API fonksiyonları)
docs/API.mdvedocs/TROUBLESHOOTING.mdoluşturmaexamples/dizini genişletme- Hata mesajları iyileştirme
azycode doctorteşhis genişletme
Çıktı: Kapsamlı dokümantasyon, daha iyi UX, daha fazla örnek
| Metrik | Mevcut | Hedef | Takip Aracı |
|---|---|---|---|
| Test kapsamı | ~%65 | %90+ | node --test + coverage reporter |
| Kritik güvenlik açığı | 5 | 0 | Güvenlik audit checklist |
| Mimari tutarlılık sorunu | 7 | 0 | ARCHITECTURE.md senkronizasyonu |
| DRY ihlali | 8+ | 0 | Kod tekrarı tarama |
| JSDoc coverage | %0 | %50+ | JSDoc tarama |
| Örnek/template | 1 | 10+ | examples/ dizini sayımı |
| Ortalama modül satırı | ~340 | <200 | wc -l src/*.js |
| Risk | Olasılık | Etki | Mitigasyon |
|---|---|---|---|
| TUI/UI refaktörü regression | Orta | Yüksek | Faz 2'de test kapsamı önce artırılır, her adımda test çalıştırılır |
| Güvenlik fix'leri breaking change | Düşük | Yüksek | Migration guide yazılır, changelog'da belirtilir |
| context.js testleri uzun sürer | Yüksek | Orta | Paralel yazım, mock kullanımı, fixture'lar |
| MCP güvenlik fix'leri MCP server'ları bozar | Orta | Orta | Kapsamlı MCP test suiti önce yazılır |
| Subagent alwaysApprove kaldırma kullanıcıları etkiler | Orta | Düşük | Deprecation notice + config migration |
Azycode, sağlam bir temel üzerine kurulmuş, iyi düşünülmüş bir AI kodlama CLI aracıdır. COMPLETION_AUDIT.md'e göre çoğu temel özellik tamamlanmıştır. Ancak:
- Güvenlik: 5 kritik açık (path traversal, patch validation, shell risk, MCP, subagent) hemen düzeltilmelidir.
- Mimari:
tui.js(2150 satır) veui.js(1915 satır) modüllerinin bölünmesi uzun vadeli bakılabilirliği sağlar. - Test:
context.js(639 satır, test yok) veagent.js(sadece E2E) kapsamlı testlerle güvenli hale getirilmelidir. - Performans: Context pack büyük repo'lar için optimize edilmelidir.
- Dokümantasyon: JSDoc ve kullanıcı rehberleri eksiktir.
Bu planın uygulanmasıyla Azycode, hem daha güvenli hem daha bakılabilir hem de daha iyi test edilmiş bir proje haline gelecektir.