What's New in v0.3.2
Architecture Overview (get_architecture)
New tool that provides instant codebase orientation in a single call. Returns 12 selectable aspects:
- languages: Language breakdown by file count
- packages: Top packages with node counts
- entry_points: Main/init functions (test functions filtered out)
- routes: HTTP endpoints with handlers
- hotspots: Most-called functions by fan-in (test functions filtered out)
- boundaries: Cross-package call volumes
- services: Cross-service HTTP/async links
- layers: Package-level layer classification (entry/core/internal)
- clusters: Louvain community detection across CALLS, HTTP_CALLS, and ASYNC_CALLS edges
- file_tree: Condensed directory structure
- adr: Stored Architecture Decision Record
Use get_architecture(aspects=["all"]) for full orientation or select specific aspects to reduce output.
Architecture Decision Records (manage_adr)
Persist architectural decisions across AI sessions with structured, validated records:
- 6 fixed sections: PURPOSE, STACK, ARCHITECTURE, PATTERNS, TRADEOFFS, PHILOSOPHY
- Section filtering:
manage_adr(mode="get", include=["STACK", "PATTERNS"])returns only needed sections - Partial updates:
manage_adr(mode="update", sections={"PATTERNS": "..."})patches one section, preserves the rest - Validation: Store rejects content missing any section; update rejects non-canonical keys
- ADR discovery: When no ADR exists, hints about existing architecture docs found in the repo (ARCHITECTURE.md, docs/adr/*, etc.)
- Max 8000 chars (up from 4000)
Louvain Community Detection
Renamed from "Leiden" to accurately reflect the algorithm (simplified Louvain, not actual Leiden which requires CPM-based refinement). The clusters aspect in get_architecture uses Louvain to discover hidden functional modules across packages.
Case-Insensitive Search
search_graph and search_code are now case-insensitive by default. Set case_sensitive=true for exact matching.
Bug Fixes
- qnToPackage: Fixed extraction of sub-package from qualified names — packages now show meaningful names (e.g., "store", "pipeline") instead of collapsing to top-level directory ("internal")
- Test filtering: Entry points, hotspots, and routes now exclude test functions via
is_testproperty + file path pattern matching - Boundary filtering: Limited to Function/Method/Class nodes (previously included all node types)
- Removed unused tools:
read_fileandlist_directoryremoved — handled natively by coding agents
Files Changed
- New:
internal/store/architecture.go,internal/store/architecture_test.go,internal/store/louvain.go,internal/tools/architecture.go - Modified:
internal/tools/tools.go,internal/pipeline/communities.go,README.md, and 9 other files - Removed:
internal/store/leiden.go(renamed to louvain.go)