--- name: code-knowledge-graph description: "Codebase'i knowledge graph olarak analiz et. Dependency, call graph, hotspot analizi." allowed-tools: [Bash, Read, Glob, Grep] keywords: [dependency graph, code graph, knowledge graph, codebase analysis, architecture analysis, circular dependency, hotspot, orphan, call graph, import graph] --- # Code Knowledge Graph - Codebase Graph Analysis Codebase'i knowledge graph olarak modeller. Dosya, modul, fonksiyon ve class'lar node; import, call, inheritance ve composition iliskileri edge olur. Sonuc: Mermaid diagram + JSON graph data. ## Neden Knowledge Graph? Kod text degil, **graph**'tir. Her dosya diger dosyalara baglidir. Bu baglantilari anlamadan: - Refactoring yaparken neyi kiracagini bilemezsin - Dead code'u guvenle silemezsin - Yeni feature'in nereye oturacagini gormezsin - Circular dependency'lerin kokunu bulamazsin Knowledge graph tum bu iliskileri gorsellestirir ve olculebilir yapar. ## Kullanim ``` /code-knowledge-graph [hedef-dizin] [--focus module] [--depth N] [--format mermaid|json|both] ``` ### Ornekler ```bash # Tum codebase analizi /code-knowledge-graph src/ # Belirli module odaklan /code-knowledge-graph src/ --focus auth # Sadece circular dependency kontrolu /code-knowledge-graph src/ --focus circular # Hotspot analizi /code-knowledge-graph src/ --focus hotspots # Orphan/dead code tespiti /code-knowledge-graph src/ --focus orphans ``` ## Graph Olusturma Adimlari ### Adim 1: Node Discovery ```bash # Dosya agaci tldr tree ${PATH:-src/} --ext .py # Kod yapisi: fonksiyonlar, class'lar, export'lar tldr structure ${PATH:-src/} --lang python ``` Her dosya, class, fonksiyon ve export bir **node** olur. ### Adim 2: Edge Extraction ```bash # Dosyanin import'lari (outgoing edges) tldr imports ${FILE} # Modulu kim import ediyor? (incoming edges) tldr importers ${MODULE} ${PATH:-src/} # Cross-file call graph tldr calls ${PATH:-src/} ``` Her import ve fonksiyon cagrisi bir **directed edge** olur. ### Adim 3: Layer Detection ```bash # Architectural layer analizi tldr arch ${PATH:-src/} ``` Node'lar 3 katmana ayrilir: | Katman | Tanim | Ornekler | |--------|-------|---------| | Entry | Disaridan cagirilan, ici cagirmayan | routes, cli, main, handlers | | Middle | Hem cagrilan hem cagirir | services, business logic | | Leaf | Cagirilan ama baskasini cagirmayan | utils, helpers, constants | ### Adim 4: Impact Analysis ```bash # Bu fonksiyona kim bagimli? tldr impact ${FUNCTION} ${PATH:-src/} --depth 3 # Dead code: hicbir yerden cagrilmayan fonksiyonlar tldr dead ${PATH:-src/} ``` ### Adim 5: codebase-memory MCP Entegrasyonu codebase-memory MCP kuruluysa, persistent graph sorgusu yap: ``` mcp: index_status -> Repo index durumu mcp: index_repository -> Repo'yu indexle (yoksa) mcp: query_graph -> Graph sorgusu (iliskiler) mcp: search_graph -> Pattern arama mcp: get_architecture -> Mimari genel bakis mcp: trace_call_path -> Fonksiyonlar arasi cagri yolu ``` MCP, session'lar arasi kalici graph verisi saglar. tldr ise anlik taze analiz verir. Ikisini birlikte kullan. ## Dependency Analysis Pattern'leri ### Direct Dependencies A dogrudan B'yi import ediyor: ``` A --import--> B ``` ### Transitive Dependencies A, B'yi import ediyor, B de C'yi import ediyor. A, C'ye transitif bagimli: ``` A --import--> B --import--> C A ....transitif....> C ``` Transitive dependency chain'i uzadikca risk artar. `tldr impact` ile transitif zincirleri gor. ### Fan-In vs Fan-Out | Metrik | Yuksek Degerin Anlami | Risk | |--------|----------------------|------| | Fan-In (in-degree) | Cok modul buna bagimli | Fragile - degisiklik cascade yapar | | Fan-Out (out-degree) | Bu modul cok seye bagimli | Unstable - disaridan kirilabilir | **Hedef**: Leaf node'larda yuksek fan-in (iyi - utility), entry node'larda yuksek fan-out (kotu - god module). ## Circular Dependency Cozme Stratejileri Circular dependency = A imports B, B imports A (dogrudan veya transitif). ### Strateji 1: Extract Interface ``` ONCE: A <--> B (circular) SONRA: A --> IB <-- B (interface ile decouple) ``` Her iki modul de bir interface'e bagimli olur, birbirine degil. ### Strateji 2: Dependency Inversion ``` ONCE: A --> B --> A (circular) SONRA: A --> B, A <-- C (C yeni modul, B'nin A'ya ihtiyac duydugu kismi tasir) ``` ### Strateji 3: Extract Shared Module ``` ONCE: A <--> B (ortak kod paylasiyor) SONRA: A --> Shared <-- B (ortak kod ayri module) ``` ### Strateji 4: Event-Based Decoupling ``` ONCE: A --> B --> A (geri cagri) SONRA: A --> EventBus <-- B (event ile haberlesme) ``` ### Hangi Stratejiyi Sec? | Durum | Strateji | |-------|----------| | Type/interface paylasimi | Extract Interface | | Fonksiyon geri cagrisi | Dependency Inversion | | Ortak utility kodu | Extract Shared Module | | Async bildirim ihtiyaci | Event-Based Decoupling | ## Hotspot Analizi ve Refactoring Onceliklendirme Hotspot = Graph'ta en cok baglantisi olan node. ### Hotspot Skorlama ``` hotspot_score = (in_degree * 2) + out_degree + (change_frequency * 3) ``` - `in_degree * 2`: Bagimli modul sayisi (en onemli - cascade risk) - `out_degree`: Bagimlilik sayisi (kirilganlik) - `change_frequency * 3`: Git log'dan degisiklik sikligi (degisen hotspot = en tehlikeli) ### Refactoring Oncelik Matrisi | Hotspot Tipi | Oncelik | Aksiyon | |-------------|---------|--------| | Yuksek in-degree + sik degisen | P0 CRITICAL | Hemen split et, test ekle | | Yuksek in-degree + stabil | P2 MEDIUM | Test ekle, dikkatli degistir | | Yuksek out-degree | P1 HIGH | Dependency'leri azalt, facade pattern | | Yuksek her ikisi | P0 CRITICAL | God module - parcala | ### Change Frequency Analizi ```bash # Git log'dan en cok degisen dosyalar git log --format=format: --name-only --since="6 months ago" | sort | uniq -c | sort -rn | head -20 ``` Cok degisen + cok baglantili = en yuksek risk. ## Mermaid Diagram Ornekleri ### Dependency Graph (Layered) ```mermaid graph TD subgraph Entry["Entry Layer (Red)"] routes[routes.py] cli[cli.py] end subgraph Middle["Middle Layer (Orange)"] auth[auth_service.py] user[user_service.py] end subgraph Leaf["Leaf Layer (Green)"] utils[utils.py] validators[validators.py] end routes --> auth routes --> user cli --> user auth --> utils auth --> validators user --> utils style routes fill:#e74c3c,color:#fff style cli fill:#e74c3c,color:#fff style auth fill:#f39c12,color:#fff style user fill:#f39c12,color:#fff style utils fill:#27ae60,color:#fff style validators fill:#27ae60,color:#fff ``` ### Call Graph ```mermaid graph LR handle_request --> validate handle_request --> authorize authorize --> check_token authorize --> check_role validate --> sanitize check_token --> decode_jwt ``` ### Circular Dependency (Highlighted) ```mermaid graph LR A[module_a] -->|imports| B[module_b] B -->|imports| C[module_c] C -->|imports| A style A fill:#e74c3c,color:#fff style B fill:#e74c3c,color:#fff style C fill:#e74c3c,color:#fff linkStyle 0 stroke:#e74c3c,stroke-width:3px linkStyle 1 stroke:#e74c3c,stroke-width:3px linkStyle 2 stroke:#e74c3c,stroke-width:3px ``` ### Hotspot Visualization ```mermaid graph TD A[utils.py
in:12 out:1
HOTSPOT] B[service.py
in:3 out:8] C[routes.py
in:0 out:5] D[models.py
in:6 out:2] C --> B C --> A B --> A B --> D D --> A style A fill:#e74c3c,stroke:#c0392b,stroke-width:4px,color:#fff style D fill:#f39c12,stroke:#e67e22,stroke-width:2px,color:#fff ``` ## Graph-Based Code Review Knowledge graph review'da su sorulari cevaplar: 1. **Impact sorusu**: "Bu degisiklik kac modulu etkiler?" ```bash tldr impact changed_function src/ --depth 3 ``` 2. **Coupling sorusu**: "Bu yeni import cycle yaratir mi?" - Mevcut graph'a yeni edge ekle, cycle kontrol et 3. **Cohesion sorusu**: "Bu modul cok mu fazla is yapiyor?" - Out-degree > 8 ise muhtemelen evet 4. **Dead code sorusu**: "Bu fonksiyon gercekten kullaniliyor mu?" ```bash tldr impact function_name src/ ``` ## Onboarding Icin Graph Kullanimi Yeni developer'a codebase'i tanitmak icin: 1. **Buyuk resim**: Layer diagram'i goster (entry/middle/leaf) 2. **Kritik yollar**: En onemli call chain'leri goster 3. **Hotspot'lar**: "Bu dosyalara dokunurken dikkatli ol" listesi 4. **Moduller**: Her modulu 1 cumle ile acikla + bagimliliklari goster ## Architectural Decision Support Graph verisi mimari kararlari destekler: | Karar | Graph Verisi | |-------|-------------| | "Bu modulu bolmeli miyiz?" | In-degree + out-degree + LOC | | "Microservice siniri nerede?" | Cluster analizi (yuksek ic baglantilar, dusuk dis baglantilar) | | "Hangi modulu once refactor edelim?" | Hotspot score siralamasina bak | | "Yeni feature nereye oturur?" | Mevcut layer'a ve dependency pattern'ine bak | | "Bu dependency guvenli mi?" | Transitif dependency chain'ine bak | ## tldr CLI Komut Referansi | Komut | Kullanim | Cikti | |-------|---------|-------| | `tldr tree [path]` | Dosya agaci | JSON | | `tldr structure [path] --lang X` | Kod yapisi (codemaps) | JSON | | `tldr calls [path]` | Cross-file call graph | JSON | | `tldr impact [path]` | Reverse call graph | JSON | | `tldr dead [path]` | Dead/orphan code | JSON | | `tldr arch [path]` | Layer detection | JSON | | `tldr imports ` | Dosyanin import'lari | JSON | | `tldr importers [path]` | Modulu kim import ediyor | JSON | ## JSON Graph Data Formati ```json { "metadata": { "project": "project-name", "analyzed_at": "2026-03-26T10:00:00Z", "total_nodes": 45, "total_edges": 128, "languages": ["python"] }, "nodes": [ { "id": "src/auth/service.py::AuthService", "type": "class", "file": "src/auth/service.py", "layer": "middle", "in_degree": 5, "out_degree": 3, "is_hotspot": true, "is_orphan": false } ], "edges": [ { "source": "src/routes.py::handle_login", "target": "src/auth/service.py::AuthService.authenticate", "type": "call" } ], "layers": { "entry": [], "middle": [], "leaf": [] }, "circular_dependencies": [], "hotspots": [], "orphans": [] } ``` ## Iliskili Araclar | Arac | Ne Zaman | |------|---------| | `graph-analyst` agent | Tam graph analizi, otomatik rapor | | `tldr arch` | Hizli layer detection | | `tldr calls` | Hizli call graph | | `codebase-memory MCP` | Persistent graph, session arasi sorgulama | | `/explore architecture` | Genel mimari kesfetme | | `architect` agent | Graph verisiyle mimari karar | | `janitor` agent | Orphan/dead code temizligi |