[0.9.8] - 2026-06-01
New Features
codegraph initnow builds the initial index by default — you no longer need the-i/--indexflag (it's still accepted, so existing commands and scripts keep working). (#483)- Go: Gin middleware chains now connect end-to-end in
codegraph_traceandcodegraph_explore— following a request reaches the middleware and route handlers registered via.Use()/.GET()instead of dead-ending where the framework dispatches the chain dynamically. codegraph_explorenow sizes its response to the answer instead of the file count: it shows the mechanism and the exact methods you asked about in full — even when they're buried deep in a large file — while collapsing the redundant interchangeable implementations of an interface (an HTTP interceptor chain, a query-compiler family) down to signatures. Fewer tokens for a more complete answer, so on the flows that used to occasionally cost more than plain grep/read it's now clearly cheaper — and the win holds across small, medium, and large codebases. Distinct, non-interchangeable code is shown in full as before. Disable withCODEGRAPH_ADAPTIVE_EXPLORE=0.- Swift deferred-validation flows (and similar "handler array" patterns) now connect end-to-end in
codegraph_traceandcodegraph_explore— following a request's lifecycle reaches the validators registered with.validate { … }instead of dead-ending where the framework runs them by iterating a stored list of closures. Any pattern where closures are appended to a collection and later invoked by looping over it is now traced. codegraph_explorenow spells out the dynamic-dispatch relationships of the symbols you ask about — e.g. "the closures registered here are run bydidCompleteTask" — so the indirect hops you'd otherwise grep to reconstruct are listed alongside the call flow.codegraph_exploreanswers multi-phase questions that span a large "god file" far more completely. For a flow like "build, send, and validate a request" — where one big file holds the build chain and the validate logic lives in others — it now keeps every method on the flow path in full, collapses the file's off-path methods to one-line signatures, and guarantees each phase's defining file is shown (instead of truncating at a fixed size and dropping whichever phase came last, which sent you to read it by hand). Incidental files that merely name-drop the flow are still trimmed, so the response stays focused on the code that answers the question.- CodeGraph is usable as an embedded library again:
require("@colbymchenry/codegraph")andimportnow resolve the programmatic API — theCodeGraphclass plus building blocks likeDatabaseConnection,QueryBuilder,initGrammars, andFileLock— so you can drive the graph directly from your own app (for example an Electron process) instead of only through the CLI or MCP server. Embedding runs on your own runtime, so it needs Node 22.5+ for the built-in SQLite. (#354)
Fixes
codegraph_tracenow resolves an overloaded symbol name to its real implementation instead of an empty protocol/delegate stub. Tracing a flow through a heavily-overloaded API (common in Swift, Java, C#, and Go) could land on an unrelated no-op method that happened to share the name and report "no path"; it now picks the substantive definition the flow actually runs through.- CodeGraph's MCP server now answers an agent's opening handshake the instant it launches instead of blocking while the index loads, so a fresh session's very first tool call no longer occasionally races a server that's still warming up and falls back to grep/read. The first question in a new session now reliably goes through CodeGraph.
- Indexing a project that contains only config-style files (YAML, Twig, or
.properties) no longer misleadingly reports "No files found to index" — these files are tracked at the file level and are now counted as indexed. Thanks @luojiyin1987 (#357).