unstale

npm / @colbymchenry/codegraph

@colbymchenry/codegraph

What changed in @colbymchenry/codegraph 1, from its official release notes, upgrade guides and advisories. Sources checked 2026-11-04.

75 breaking25 new APIs and options3 performance58 behavior and defaults10 tooling157 fixes and other

See which of these apply to your code, ranked, in your agent:

npx @unstale/cli init

@unstale/cli on npm

@colbymchenry/codegraph 1328 changes

Breaking changes 75

  • Types written in C# or VB.NET code resolve to their type declarations rather than same-named properties, methods, or fields; property reads and method values continue to resolve as before.

    1.6.2release notes

  • Bare names resolve only to members of the current or outer classes, their base classes, or types brought in with using static, including global and project-file static imports.

    1.6.2release notes

  • Interface members are treated as public and modifierless types as internal; interface-typed calls resolve to interface methods, and production references no longer guess to test mocks or helpers.

    1.6.2release notes

  • Case-sensitive languages no longer link names to symbols that differ only in case; case-insensitive languages are unchanged.

    1.6.2release notes

  • Unqualified calls resolve only to the component and its ancestors; untyped receiver calls require a matching component name rather than linking to unrelated methods.

    1.6.2release notes

  • Calls on values with unknown types resolve to Dart's String, List, or Map methods instead of same-named project methods; extensions match by the extended type.

    1.6.2release notes

  • Calls without receivers resolve to the nearest applicable class, superclass, mixin, interface, or extension method; class aliases using class A = B with C; are indexed under their declared name.

    1.6.2release notes

  • An unnamed extension on X is no longer mistaken for type X, and its members are reachable only within the declaring file.

    1.6.2release notes

  • Calls handed off to another object no longer resolve to the calling method; JavaScript and TypeScript field receivers count as recursion only when declared by the method's class.

    1.6.2release notes

  • In monorepos alongside Next.js, Expo Router reads only its own app files, not Next.js or shared-package files; re-index after upgrading.

    1.6.2release notes

  • JavaScript and TypeScript middleware, controller, and service conventions select declarations from the calling file; other files require an import or require.

    1.6.2release notes

  • C#, Java, and Kotlin calls through fields, properties, and parameters resolve using their declared type, including inherited and generic types; external types produce no link.

    1.6.2release notes

  • Django, FastAPI, Flask, ASP.NET, Gin, SwiftUI, and Vapor conventions select only visible classes, starting in the reference's file and package.

    1.6.2release notes

  • Names accessed through an imported package from outside the module no longer link to same-named project symbols.

    1.6.2release notes

  • Calls on imported values no longer resolve to same-named methods declared in the calling file.

    1.6.2release notes

  • Bare Java calls resolve only to methods on the enclosing class, its parents, or static imports, including inherited methods and project static imports; re-index Java projects after upgrading.

    1.6.2release notes

  • Bare Java type names resolve only when the type is in reach through its package, imports, nesting, inheritance, or owner qualification.

    1.6.2release notes

  • Names imported from outside the project resolve to the imported class or member rather than same-named project symbols, including static imports.

    1.6.2release notes

  • Unexported top-level functions, variables, and types are no longer linked from other files; all documented export forms remain effective.

    1.6.2release notes

  • Parameters and preceding var, let, or const declarations resolve as local bindings instead of same-named functions; destructured hook results still link to their source functions.

    1.6.2release notes

  • A barrel's export * as form exports only its namespace; namespace imports also resolve forwarded members and nested namespace paths.

    1.6.2release notes

  • Kotlin imports determine name resolution, including choosing among same-named classes and resolving renaming imports; declarations in the file still take precedence.

    1.6.2release notes

  • Calls without receivers resolve only to methods in reach through the current class, inheritance, extension receivers, DSL receivers, or imported object members; re-index after upgrading.

    1.6.2release notes

  • Route names now include leading slashes, group prefixes and Laravel's /api prefix as configured by the application.

    1.6.2release notes

  • Calls through standard or host library tables and string methods no longer resolve to same-named project methods, while project-defined table functions still link.

    1.6.2release notes

  • Bare calls resolve to Lua's own functions unless the file defines a same-named function; aliases of host table members are followed.

    1.6.2release notes

  • Local variables and functions no longer link across files; global functions remain linked across files.

    1.6.2release notes

  • Calls in Java, C#, Kotlin, Swift, Scala, Dart, and VB.NET now resolve to the overload whose parameters fit the arguments.

    1.6.2release notes

  • Minimal API paths written without a leading slash are now named with one.

    1.6.2release notes

  • Functions and names passed as values resolve according to scope where written; locals and parameters take precedence, and pytest fixtures are limited to their module or conftest.py.

    1.6.2release notes

  • NestJS provider conventions select classes only from the reference's own file; other files are reached through imports or ordinary nearest-name matching.

    1.6.2release notes

  • An Objective-C class conforming to a protocol of the same name now links to the protocol, and Swift naming conventions no longer apply to Objective-C code.

    1.6.2release notes

  • Function calls after => in arrays are parsed as plain function calls rather than method calls.

    1.6.2release notes

  • Calls without receivers are treated as function calls and no longer link to same-named project methods, fields, or classes.

    1.6.2release notes

  • Unqualified class names resolve to the current namespace's class or an imported class; imported library classes do not resolve to project symbols.

    1.6.2release notes

  • Calls on untyped variables no longer link to an unrelated class method just because it is the only same-named method; the variable must match the method's class or an inheriting class.

    1.6.2release notes

  • Calls resolve only to members of their named receiver or to in-scope imports, rather than arbitrary project methods with the same name; re-index Python projects after upgrading.

    1.6.2release notes

  • Calls to names bound locally by a function or module resolve to that local value rather than a same-named function elsewhere; this also applies to parameters and for/with targets.

    1.6.2release notes

  • Variables assigned at the top of a test file are no longer linked across package or test files; helper-*.R and setup-*.R variables remain shared.

    1.6.2release notes

  • React hook and context conventions select only declarations in the reference's file, including for optional calls; other files require imports.

    1.6.2release notes

  • Guesses from receiver names no longer resolve to framework-dispatched request handlers or test doubles that the calling file does not mention.

    1.6.2release notes

  • Calls on untyped receivers require a matching class name, while calls without receivers resolve within the class, its ancestors, and included, extended, or prepended modules.

    1.6.2release notes

  • Chained calls with standard-library method names no longer resolve to unrelated project methods, and plain calls do not resolve to methods.

    1.6.2release notes

  • Struct, handler, and service names no longer resolve to items inside function bodies; a file's own item takes precedence over items from other crates.

    1.6.2release notes

  • Bare names such as Ok, Some, Result, and Vec resolve to the standard library unless the file defines or imports a project item; enum variants require an import.

    1.6.2release notes

  • Calls on another expression's result, and initializer chains that call a same-named method, no longer resolve to the calling method itself.

    1.6.2release notes

  • A type extending another type with the same name now links to its base; an explicit qualifier selects between same-named candidates.

    1.6.2release notes

  • Package-object members resolve only where the package object is in scope: its package, nested packages, or files importing through it.

    1.6.2release notes

  • Kind-projector placeholders in types no longer resolve to operator methods, and symbolic names in types resolve only to types.

    1.6.2release notes

  • Calls without receivers resolve to the surrounding contract or an inherited contract; Erlang imported calls follow -import, while unimported cross-module calls no longer link elsewhere.

    1.6.2release notes

  • Overloaded function calls resolve to the overload whose parameter count fits.

    1.6.2release notes

  • Spring class names resolve to a class in the reference's file or package before folder-convention guesses; nested classes in other files are not reached by bare name.

    1.6.2release notes

  • Declarations in Svelte instance scripts and Vue script setup are private to their component, except for exported types; module scripts and plain Vue scripts remain externally reachable.

    1.6.2release notes

  • Calls without receivers and calls through self or super resolve within the enclosing type and its conformances or inheritance, with the nearest override winning; unrelated globals and standard-library names are not guessed.

    1.6.2release notes

  • Calls on variables are no longer guessed to target methods on Mocked, Fake, Stub, or Dummy classes solely because they are the only same-named methods.

    1.6.2release notes

  • Path aliases use the tsconfig or jsconfig nearest the importing file, allowing each monorepo app to resolve its own aliases.

    1.6.2release notes

  • Type-only imports bind the imported name rather than a symbol named type; package types and case-sensitive JavaScript and TypeScript names no longer link to unrelated project symbols.

    1.6.2release notes

  • Calls through VB.NET receivers resolve only through Me, MyBase, MyClass, the member's own class or module, or the service lookup's type.

    1.6.2release notes

  • Components own their setup scripts, Svelte instance scripts, and Astro frontmatter; imports and module-level scripts remain file-owned.

    1.6.2release notes

  • Built-in method calls on untyped values no longer resolve to same-named project methods; this.#field.method() resolves using the field's type.

    1.6.1release notes

  • Function-like macro invocations no longer bind to same-named functions or types in another file; a build-settable flag preserves both sides of #ifdef, and local object initialization records constructor calls.

    1.6.1release notes

  • Cross-call source deduplication is now available only as an explicit opt-in; fresh subagents and compacted contexts receive source again by default.

    1.6.1release notes

  • Index refuses uninitialized paths and identifies the nearest initialized parent instead of silently rebuilding it.

    1.6.1release notes

  • Direct MCP mode now takes an exclusive writer lock, so a second direct writer exits with guidance instead of silently killing auto-sync.

    1.6.1release notes

  • A second direct-mode MCP server on the same project exits rather than silently disabling auto-sync.

    1.6.1release notes

  • Sync reports a busy index and exits non-zero when another process holds the write lock, rather than claiming the index is up to date.

    1.6.1release notes

  • Render links now follow a component's own declaration or import, and JavaScript tags prefer JavaScript components over same-named native classes. Re-index after upgrading.

    1.6.1release notes

  • Calls through a default-imported API object now resolve to its functions, and export default NAME resolves to that named const.

    1.6.1release notes

  • Name matching now declines targets inaccessible across files due to language visibility rules, while preserving same-file and specified Rust visibility cases.

    1.6.1release notes

  • A JS/TS file with imports but no exports no longer offers its local bindings as cross-file targets; CommonJS, classic scripts, later exports, and declare global names are unaffected.

    1.6.1release notes

  • A receiver-less call through a function parameter or local func value no longer links to a same-named method.

    1.6.1release notes

  • Scala objects are indexed as modules so extends/with resolves to a trait or class rather than its companion object.

    1.6.1release notes

  • Only SvelteKit pages are indexed as routes; adjacent layouts and error files no longer create duplicate routes.

    1.6.1release notes

  • Production code under samples or examples package paths is no longer treated as test code; only layout above src/ determines this.

    1.6.1release notes

  • Returns weakly related files as name, symbol, and line-number pointers rather than spending answer space on their source.

    1.6.0release notes

New APIs and options 25

  • Angular routes and navigation split across Nx libraries are followed through re-exports, with paths read from constants or enums.

    1.6.2release notes

  • Angular route arrays, child and lazy-loaded routes, redirects, navigation APIs, template links and child components are represented in the graph.

    1.6.2release notes

  • Controls how long a project queried through projectPath remains open without queries; the default idle release is 10 minutes and 0 keeps it open.

    1.6.2release notes

  • Expo Router +api files are indexed as endpoints, one per exported method, bound to their handler functions rather than shown as screens.

    1.6.2release notes

  • ASP.NET FastEndpoints endpoint classes produce routes linked to their handlers, including paths stored in a request class's Route constant.

    1.6.2release notes

  • Links made by framework or bridge resolvers now record which resolver made them in metadata.framework.

    1.6.2release notes

  • Named route tables, per-module files and new Router(...) are read; child paths, layout components, lazy views and navigation are linked.

    1.6.2release notes

  • Project guidance for Codex and Astra now lives in AGENTS.md, with nested guidance in docs/AGENTS.md; CLAUDE.md wraps it for Claude Code.

    1.6.1release notes

  • The callers, callees and impact commands accept --file to narrow ambiguous names and resolve qualified names.

    1.6.1release notes

  • Claude Code now loads the MCP tool from the first prompt; codegraph install writes alwaysLoad: true. Copilot CLI's entry sets deferTools to never.

    1.6.1release notes

  • Direct MCP sessions serve concurrent calls from an off-thread query pool with two workers by default; this variable changes the pool size.

    1.6.1release notes

  • Explore can follow literal web requests, queue jobs, events, socket messages and Next.js server actions across application tiers.

    1.6.1release notes

  • Indexing adds Next.js pages, API endpoints and navigation links to the graph, including App Router, Pages Router and redirect calls.

    1.6.1release notes

  • Indexing adds file-based and code-based TanStack Router routes and navigation edges, excluding computed destinations.

    1.6.1release notes

  • Indexing adds Vue Router and Nuxt routes and navigation edges, resolved by route name or path.

    1.6.1release notes

  • Adds a task-context command that builds a markdown or JSON context pack containing relevant symbols, relationships, and code.

    1.6.0release notes

  • Setting this environment variable to 0 turns off codegraph_explore's repeat-source deduplication.

    1.6.0release notes

  • Runs initialization without prompts, enabling non-interactive setup in a fresh container or CI job.

    1.6.0release notes

  • Can configure GitHub Copilot Chat in VS Code, the Copilot CLI, and JetBrains IDEs; installed surfaces are auto-detected, existing MCP entries are preserved, and uninstall reverses setup.

    1.6.0release notes

  • Adds an option to configure agents and build the current project's index in one command; indexing still requires explicitly requesting it with the flag.

    1.6.0release notes

  • Adds per-project Codex setup, writing configuration to ./.codex/config.toml and a CodeGraph block to the project's AGENTS.md; local uninstall reverses it without affecting global setup.

    1.6.0release notes

  • Setting this environment variable to 1 opts out of reference rebinding during sync.

    1.6.0release notes

  • Sets the resting-size bound for the database write-ahead log, which is 64 MB by default.

    1.6.0release notes

  • Adds a codegraph.json setting for gitignore-style patterns that lower matching paths in search and codegraph_explore ranking without removing them from the index.

    1.6.0release notes

  • C, C++, Objective-C, and Rust unions are indexed as first-class union nodes; C union dispatch tables resolve function pointers, and typedef unions retain the typedef name.

    1.6.0release notes

Performance 3

  • Headers are read once per include state, and a hard limit stops resolution on excessively large include trees, preventing indexing from running out of memory.

    1.6.2release notes

  • Small projects on busy machines no longer start unusable extra background threads for resolving references, reducing run time and memory use.

    1.6.2release notes

  • Uses the name index instead of repeatedly scanning every indexed symbol, so lookup time no longer grows with project size.

    1.6.0release notes

Behavior and default changes 58

  • Astro component-name matching now applies only inside .astro files.

    1.6.2release notes

  • Claude Code now receives the full status text and stale-index refusal text instead of only structured freshness JSON.

    1.6.2release notes

  • JavaScript and TypeScript CommonJS requires count as imports, with module paths resolved using extensions, index files, and aliases.

    1.6.2release notes

  • Calls to Expo modules now link to native iOS and Android functions even when the JavaScript module name differs.

    1.6.2release notes

  • Files with @flow in their header are parsed like TypeScript, preserving classes and type-annotated methods during indexing; files without the pragma are unchanged.

    1.6.2release notes

  • Minified or bundled JavaScript is recognized as generated even without a .min.js name, ranking its one-letter functions below user code in search and codegraph_explore.

    1.6.2release notes

  • Delphi and Free Pascal .inc files are indexed as Pascal; PHP tags and explicit codegraph.json mappings retain precedence.

    1.6.2release notes

  • Infix calls are recorded as calls to the infix function; numeric bit operations remain Kotlin operators even if same-named extensions exist.

    1.6.2release notes

  • Route names now include global prefixes and exclusions, URI versioning, @Version, VERSION_NEUTRAL and controller versions.

    1.6.2release notes

  • Play projects in subdirectories are recognized and their conf/routes files are read.

    1.6.2release notes

  • Calls on pytest parameters resolve through the class returned by their fixture; fixtures brought in through conftest.py imports or pytest_plugins count as in reach.

    1.6.2release notes

  • React hook and context rules no longer apply to backend code in projects that also have a React front end.

    1.6.2release notes

  • Events named by constants now link native emitters to JavaScript listeners, resolving constants through file, import or owning-class scope.

    1.6.2release notes

  • Data-router paths include nested children and constants, lazy routes link to their module component, and guard wrappers no longer stand in for pages.

    1.6.2release notes

  • React Router v5 Redirect elements and styled links now produce navigation links between screens.

    1.6.2release notes

  • Paper-style React Native native components link JavaScript to iOS and Android implementations, including in plain JavaScript files.

    1.6.2release notes

  • Production code no longer links to same-named symbols inside test suites; shipped test-support code remains reachable.

    1.6.2release notes

  • Spring and Laravel controllers exercised by URL-based tests and request helpers now count as tested, and codegraph_explore names the reaching test suite.

    1.6.2release notes

  • The prompt hook context cap is reduced to 9,000 characters so Claude Code displays it inline instead of persisting it with only a short preview.

    1.6.1release notes

  • The installer honors this variable for global Claude Code setup so CodeGraph loads in the selected profile.

    1.6.1release notes

  • CLAUDE.md is now a thin @AGENTS.md wrapper for Claude Code; Codex and Astra read the canonical guide directly.

    1.6.1release notes

  • callers, callees, and query now report when limits hide matches; callers/callees JSON and MCP answers include totals or a showing N of M note.

    1.6.1release notes

  • WSL projects on Windows drives receive a separate .codegraph-wsl/ index by default; this variable still selects the index directory when set.

    1.6.1release notes

  • Explore flags dynamic imports or requires built from template literals with substitutions or string concatenation.

    1.6.1release notes

  • Index coordinates with a running MCP daemon, stops it cleanly before rebuilding, and tells MCP callers to retry during the rebuild.

    1.6.1release notes

  • Init and index list unsupported file extensions and explain when no supported source files are found.

    1.6.1release notes

  • The installer honors this variable for global Codex setup so CodeGraph loads in the selected profile.

    1.6.1release notes

  • FastAPI router and literal mount prefixes now compose into route names, including nested routers and imported or aliased modules; non-string setting prefixes are not guessed.

    1.6.1release notes

  • Functions assigned to locals, table members, or keyed table fields are indexed as callable nodes, with calls attributed to their named function or method.

    1.6.1release notes

  • Conditional destinations now produce an edge for each route arm; arms naming the same route produce one edge.

    1.6.1release notes

  • Re-indexing is required after upgrading to write the new navigation links and other indexing-time fixes into existing project indexes.

    1.6.1release notes

  • Docstrings are indexed alongside preceding comments, making their prose searchable and visible.

    1.6.1release notes

  • Indexing adds React Router navigation edges and resolves optional route parameters; computed or undeclared destinations are omitted.

    1.6.1release notes

  • Handlers created with useCallback, React.useCallback, or useEffectEvent are extracted as named function symbols; handler values in JSX and hook-returned objects are represented as references.

    1.6.1release notes

  • Interface methods and properties are indexed for node, callers, and impact; declaration-only files retain lower flow-query ranking. Re-index TypeScript projects.

    1.6.1release notes

  • Bounds output for files built around very long functions to a window of whole lines, retaining the signature, top of body, and relevant call site.

    1.6.0release notes

  • Budgets source per file so an early file cannot consume space reserved for later files; files that no longer fit whole are shown as excerpts instead of disappearing.

    1.6.0release notes

  • Trims trailing notes rather than discarding a whole file's source when an answer reaches its size limit.

    1.6.0release notes

  • Budgets and trims pointers for files not covered so full answers still tell users which names to request next.

    1.6.0release notes

  • Shortens oversized excerpts by whole methods to fit the answer rather than dropping a useful excerpt entirely.

    1.6.0release notes

  • Follows caller chains up to three hops when checking test coverage and reports indirect coverage as tested via callers.

    1.6.0release notes

  • Avoids resending unchanged source already shown in the conversation, returning a pointer instead and using the space for unseen code; edited files are shown in full again.

    1.6.0release notes

  • Matches query words against words inside camelCase identifiers, helping plain-language questions find relevant code.

    1.6.0release notes

  • Counts variables and constants when choosing starting symbols, so state held in plain variables is no longer overlooked.

    1.6.0release notes

  • Concentrates answers on code that answers the question instead of spreading results across files that merely share a word.

    1.6.0release notes

  • States up front that CodeGraph indexes 30+ languages so agents do not assume a language is unsupported and skip the graph.

    1.6.0release notes

  • Verifies files against the index before returning sliced code; stale files are shown whole with current source or withheld with a changed-on-disk notice.

    1.6.0release notes

  • Shows write-ahead-log size next to database size and warns when killed sessions leave it oversized.

    1.6.0release notes

  • Changes to exclude, include, or .gitignore while the MCP server runs refresh the watcher and trigger a full reconcile immediately.

    1.6.0release notes

  • Generated declaration files identified by a generation banner are recognized as generated, reducing irrelevant source in explore answers.

    1.6.0release notes

  • Ranks handwritten ambient shims, vendored typings, and module augmentations lower for behavior questions while still returning them first for queries about a type by name.

    1.6.0release notes

  • Makes a visible warning when parsing falls back to comment-stripped source, since the recovered result may be incomplete.

    1.6.0release notes

  • Bounds the default parse budget for data-only C/C++ headers near the file-size limit while still honoring explicitly configured larger timeouts.

    1.6.0release notes

  • Uses the sole indexed project below the launch directory as the session default when the launch directory itself has no index.

    1.6.0release notes

  • Records why files were skipped for size or repeated parse failures, preventing unchanged rejected files from being retried on every status check and sync.

    1.6.0release notes

  • Classes used as values, including returned classes, aliases, registry entries, and arguments, now produce graph reference edges.

    1.6.0release notes

  • Recognizes test and spec files in top-level test/ or spec/ directories so they take less room from code requested in explore answers.

    1.6.0release notes

  • Anonymous telemetry is stored on CodeGraph's first-party infrastructure; events are deleted after 90 days, leaving anonymous daily totals, with collection and off-switches unchanged.

    1.6.0release notes

Tooling 10

  • Astro endpoints now link to their exported HTTP-verb handlers.

    1.6.2release notes

  • Routes registered with add_url_rule or project helpers passing path lists and view_func= are found and linked to their views.

    1.6.2release notes

  • File-routed Nuxt pages now link to the component defined by the page file, allowing callers, impact and flows to continue from the route.

    1.6.2release notes

  • Calls in CFML tags and expressions are linked; tag-wrapped functions and cfinterface declarations are indexed.

    1.6.2release notes

  • Options API methods, computed properties, watchers and lifecycle hooks are indexed individually, and template event handlers link to their methods.

    1.6.2release notes

  • Flow hops now show the source conditions under which calls execute for JavaScript, TypeScript, Swift, Python, Java, Kotlin, C#, Go and C.

    1.6.1release notes

  • Files under an e2e/ directory now count as tests.

    1.6.1release notes

  • Expo Router screen files become route nodes, and supported navigation calls link to their destination screens.

    1.6.1release notes

  • MSVC COM interface declarations in C++ headers are indexed as types with their methods.

    1.6.1release notes

  • Indexing adds SvelteKit navigation edges and links pages to their page files and adjacent server files.

    1.6.1release notes

Fixes and other changes 157

  • Methods called by Angular templates now have caller links, improving impact and callers results and preventing false unused-code reports.

    1.6.2release notes

  • Sessions that lose the shared-server connection or cannot reach it at startup reconnect automatically when the server becomes available.

    1.6.2release notes

  • C calls no longer link to methods of C++ classes, which C cannot call.

    1.6.2release notes

  • Classes using access-specifier macros, attribute macros, or mid-declaration preprocessor conditionals retain their members; re-index after upgrading.

    1.6.2release notes

  • C# names now follow block and nested namespace scopes, using directives, project-local global usings, and nested-type reachability through owners or derived types.

    1.6.2release notes

  • Calls into macro-opened namespaces select an overload based on argument types and count.

    1.6.2release notes

  • Qualified names resolve inside namespaces opened by macros and through namespace aliases.

    1.6.2release notes

  • C# types resolve through their namespace, using directives, project-wide global usings, project and SDK implicit usings, or aliases.

    1.6.2release notes

  • PHP, CFML, Pascal, COBOL, and VB.NET calls with different casing from their definitions now resolve.

    1.6.2release notes

  • Calls through class names now resolve to inherited class methods using declarations, across Pascal, Python, Ruby, PHP, TypeScript/JavaScript, and the Java family.

    1.6.2release notes

  • The prompt hook no longer runs on subagent-report handoff messages, avoiding hook timeouts and unrelated context injection.

    1.6.2release notes

  • COBOL files ending inside columns 1–6 no longer stall indexing and then enter the index without symbols.

    1.6.2release notes

  • The daemon command waits for a shutting-down server to exit, for up to about 20 seconds, rather than reporting it could not stop.

    1.6.2release notes

  • Indexing waits for the background daemon to finish shutting down, up to about 20 seconds, instead of failing daemon-stop verification.

    1.6.2release notes

  • Syncing files with duplicate definitions no longer moves callers onto one definition or loses callers after an interrupted sync.

    1.6.2release notes

  • Windows upgrades can swap files while CodeGraph is running and restore the previous version if anything fails.

    1.6.2release notes

  • Calls through CommonJS require bindings resolve exported functions and named properties, including multiple bindings in one var declaration; external packages no longer link to local variables.

    1.6.2release notes

  • Calls through names destructured from composables or custom hooks now resolve to the functions returned by those hooks.

    1.6.2release notes

  • Inline Express function handlers now link to their calls, including wrapped handlers and trailing commas; the route's last argument is identified as the handler.

    1.6.2release notes

  • Calls on variables or types declared outside the project no longer link to project methods with the same name; Python keyword arguments are no longer mistaken for assignments.

    1.6.2release notes

  • Bare calls in build.gradle.kts no longer resolve to methods or properties of project classes, while build-logic extension functions on Gradle types still resolve.

    1.6.2release notes

  • Calls in inline route handlers retain their receivers and resolve like ordinary method calls.

    1.6.2release notes

  • Methods declared in Java enum constants with bodies are indexed, preserving calls made inside them.

    1.6.2release notes

  • Calls no longer link to same-named class members through namespace imports, npm imports, or bare calls; package-imported hooks and components and nested hooks are not false targets.

    1.6.2release notes

  • Calls inside DSL lambdas resolve through the lambda's own receiver, including receivers supplied through a typealias, instead of other project lambda receivers.

    1.6.2release notes

  • Methods declared in Kotlin enum entries with bodies are indexed, preserving calls made inside them.

    1.6.2release notes

  • Calls to infix functions whose names start with e now parse cleanly, preventing the rest of a line or enclosing class from being lost.

    1.6.2release notes

  • Parsing now preserves enclosing classes when Kotlin files use when guards, ..< ranges, multi-dollar strings, or nullable function-type receivers; re-index after upgrading.

    1.6.2release notes

  • String-named route controllers resolve to handlers without requiring a Controller suffix, preserve their namespace, and support resource options arrays.

    1.6.2release notes

  • Calls on library-owned types and modules resolve to the library rather than same-named project methods; chained Rust and Go calls are named after the chain's first line.

    1.6.2release notes

  • Calls through local aliases resolve to the function they name, including module members and renamed exports; aliases of Lua functions no longer appear as project calls.

    1.6.2release notes

  • Calls no longer resolve to same-named functions in vendored minified scripts or bundles.

    1.6.2release notes

  • Calls, imports and types resolve according to language scopes, reducing links to unrelated same-named symbols and improving callers, impact and codegraph_explore results.

    1.6.2release notes

  • Objective-C messages resolve only to methods that can receive them: self and super use the class hierarchy, local variables use their declared type, and C-style calls are not treated as methods or properties.

    1.6.2release notes

  • Messages sent to super resolve to the superclass method rather than the sending class's override, including when the index lacks the implementation range.

    1.6.2release notes

  • Calls resolve to matching overloads and parent methods; calls to another object's same-named method no longer appear recursive.

    1.6.2release notes

  • Calls from one overload to another overload of itself link to the target overload, which lists convenience overloads among its callers; real recursion is unchanged.

    1.6.2release notes

  • Calls on $this, self, static, and parent resolve through the current class, parents, and traits using namespace and import information; re-index PHP projects after upgrading.

    1.6.2release notes

  • Namespaced PHP class names resolve through aliases, namespace-relative names, and fully qualified names.

    1.6.2release notes

  • Calls written on an instance resolve to the class's own method even when the file imports a same-named function.

    1.6.2release notes

  • Methods accessed through module-level variables assigned by setup functions now resolve to the assigned class's method, or to a declaration inherited by all possible backend classes.

    1.6.2release notes

  • Module members accessed through an imported package now follow re-exports to their definitions, preserving resolution of qualified members such as generic.ObjectEditView.

    1.6.2release notes

  • An attribute passed through an object of unknown type is no longer linked to an unrelated project method with the same name.

    1.6.2release notes

  • Names imported from a package now resolve through its re-exports, including explicit and wildcard imports in __init__.py.

    1.6.2release notes

  • Imports split across multiple lines inside parentheses are now read in full, allowing their names to resolve correctly.

    1.6.2release notes

  • Calls such as c(1, 2) no longer resolve to a non-function data binding with the same name; factory-built functions still resolve.

    1.6.2release notes

  • Rails routes now account for namespaces, scopes, nested resources, member and collection blocks, and routes in engines.

    1.6.2release notes

  • Links and navigate calls written through route-config objects now reach their destination routes; arrow-function attributes before to are read.

    1.6.2release notes

  • Rails resource declarations now read only: and except: in all forms Rails accepts, including %i, %w, quoted names, and the older hash syntax.

    1.6.2release notes

  • Self::Error resolves to the enclosing impl or trait's associated type, and generic-parameter paths no longer resolve to unrelated same-named structs.

    1.6.2release notes

  • Rust names follow scoping and imports, including module-qualified paths and imports from outside the project.

    1.6.2release notes

  • Scala calls resolve within scope: local bindings take precedence, chained calls use the receiver's members, and plain calls use the enclosing class, supertypes, companion, or imported objects.

    1.6.2release notes

  • Scala calls no longer resolve to another test's local values or treat every class member as in scope through a package import; genuinely in-scope package-object members still resolve.

    1.6.2release notes

  • The MCP server promptly answers newer clients' discovery probes with method not found so they continue to the regular handshake.

    1.6.2release notes

  • A session serving CodeGraph without the background server waits for its work to stop before exiting, avoiding partial exits and Windows crashes.

    1.6.2release notes

  • Calls to a parent implementation no longer make an overriding method appear recursive or list itself as a caller.

    1.6.2release notes

  • Route names now omit (group) folders and normalize matcher parameters to :id, allowing links and navigation to reach the page.

    1.6.2release notes

  • Calls, initializers, and enum cases through nested type paths resolve to the named type, including types in extensions; paths naming no project type remain unlinked.

    1.6.2release notes

  • Overloaded Swift calls resolve using argument labels as well as argument count, with defaulted parameters remaining optional.

    1.6.2release notes

  • Calls through typed Swift properties resolve to methods on the property's type or its inherited methods, rather than unrelated same-named methods.

    1.6.2release notes

  • Swift types with protocol compositions split across lines are now parsed whole, retaining their methods, initializers, and properties.

    1.6.2release notes

  • Calls on values constructed inline resolve to methods of that value's type or its inherited methods.

    1.6.2release notes

  • Swift type references resolve to the type declaration rather than an extension file; qualified names and extension methods on conforming types also resolve correctly.

    1.6.2release notes

  • SwiftUI views, @main apps, view controllers, and UIView subclasses are indexed once instead of producing a duplicate one-line copy without callers or calls.

    1.6.2release notes

  • Generic type parameters no longer link to same-named project symbols; function-local types and parameters, nested types, and Scala def parameters also follow their scope.

    1.6.2release notes

  • Anonymous telemetry now sends one daily count per tool or command rather than duplicate counts from each CodeGraph process.

    1.6.2release notes

  • Vapor routes resolve to the handler they name, including nested and extension-declared handlers and self.index; re-index Vapor projects after upgrading.

    1.6.2release notes

  • Trailing-closure, WebSocket and routes.on registrations are found; closure routes link to the calls they contain.

    1.6.2release notes

  • Vue compiler macros, Nuxt auto-imports, and component-name rules apply only to app scripts, preventing backend calls from resolving to Vue components.

    1.6.2release notes

  • Component calls follow JavaScript and TypeScript resolution rules; package imports declared in nested package.json files or Deno import maps are not mistaken for project symbols.

    1.6.2release notes

  • Git calls run hidden on Windows, preventing console or terminal windows from flashing during background operation and resyncs.

    1.6.2release notes

  • Windows access-violation crashes during parsing, indexing, background sync and shutdown are fixed by waiting for helper threads to finish startup and cleanup.

    1.6.2release notes

  • Windows paths differing only in drive-letter or folder-name case now join the same background server instead of creating duplicate sessions.

    1.6.2release notes

  • Handler-first mappings in endpoint groups are now indexed as routes, with app group heads and class RoutePrefix values applied.

    1.6.1release notes

  • Methods called by a base class outside the index, including framework lifecycle and hook methods, are no longer reported as dead code.

    1.6.1release notes

  • Calls to C macros with designated initializers no longer cause parser recovery to swallow following functions. Re-index.

    1.6.1release notes

  • Callers, callees and impact now suggest alternatives for missing names and return empty results for exact matches with no callers.

    1.6.1release notes

  • A method called on another call's result no longer links to an unrelated same-named top-level function in Python or JavaScript/TypeScript.

    1.6.1release notes

  • Now finds Go, Python, and JVM test files while preserving custom --filter behavior.

    1.6.1release notes

  • Queries with line numbers now return the method containing the line or the exact requested range instead of pinning the file and ignoring the numbers.

    1.6.1release notes

  • Explore prioritizes named functions and methods in large files, uses available answer space for them, and identifies shortened or omitted source.

    1.6.1release notes

  • File references with line numbers or ranges are accepted, and the range becomes the read window unless --offset or --limit is supplied.

    1.6.1release notes

  • Sync reports pending references it resolved instead of saying the index is up to date while doing that work.

    1.6.1release notes

  • Incremental sync stops with an error if the WAL exceeds its limit and checkpointing cannot finish; raise this variable if the limit is too tight.

    1.6.1release notes

  • CommonJS exported arrow functions and functions are indexed as exported handlers, with their calls owned by the handler. Re-index JavaScript projects.

    1.6.1release notes

  • Nested conditional destinations are paired correctly; three-way choices are left alone.

    1.6.1release notes

  • Calls, constructors, and inheritance no longer link to same-named symbols in unrelated languages; real interop edges remain.

    1.6.1release notes

  • Functions passed to curried wrappers are now indexed under their declarator or property name.

    1.6.1release notes

  • Dart 3 extension types are indexed as types with their members attached.

    1.6.1release notes

  • Calls in declaration initializers now belong to their owning declaration across Kotlin, Java, TypeScript, JavaScript, Scala, Rust, and Python. Re-index with codegraph index -f.

    1.6.1release notes

  • A Delphi DFM component range now extends through its closing end, associating its properties and event bindings with the component.

    1.6.1release notes

  • codegraph_explore again lists a dynamic-dispatch link when the same symbols also have an ordinary call.

    1.6.1release notes

  • An Express handler passed through an async wrapper is now bound to its route as the endpoint handler.

    1.6.1release notes

  • Mounted Express routers compose their prefixes into route names, chained route methods register separately, and client requests pair with the composed paths.

    1.6.1release notes

  • Framework detection now works when project dependencies and files are in subfolders or workspace packages.

    1.6.1release notes

  • Fuzzy matching now declines an unreachable closure candidate instead of assigning it calls; it does not filter candidates before checking reachability.

    1.6.1release notes

  • Depth-limited impact, callers and callees now find every dependent within the requested number of hops, including nodes first reached by a longer path.

    1.6.1release notes

  • Files opted in with includeIgnored remain indexed on Git versions older than 2.36, and embedded repositories remain visible to the watcher.

    1.6.1release notes

  • External Rust or npm supertypes no longer attach to unrelated local same-named symbols; TypeScript classes implementing a value-and-interface service now link to its interface. Re-index.

    1.6.1release notes

  • Methods and calls in anonymous classes initialized in Java fields are now exposed in the graph.

    1.6.1release notes

  • Methods are no longer candidates for receiver-less calls, preventing a bare call from resolving to a same-named method; receiver-qualified calls still resolve.

    1.6.1release notes

  • Calls in Kotlin property accessors, initialization blocks, and destructuring declarations now retain their correct owner.

    1.6.1release notes

  • Kotlin functions and methods now include (params): ReturnType signatures in codegraph_explore and node. Re-index Kotlin projects.

    1.6.1release notes

  • Liquid render, include, section, and assign statements are extracted with correct line numbers, while commented and raw content is ignored.

    1.6.1release notes

  • Mapper extraction now handles whitespace inside closing tags and include references to another namespace.

    1.6.1release notes

  • Functions bound with const inside another function are now indexed as symbols, contained by their enclosing function and owning their calls. Re-index.

    1.6.1release notes

  • Imports from Node built-ins or npm packages no longer connect to unrelated type members with matching names. Re-index to clear existing false dependencies.

    1.6.1release notes

  • Calls through object-literal members that reference an outer function now resolve to that function.

    1.6.1release notes

  • Headers are now indexed as Objective-C in projects without an .m file.

    1.6.1release notes

  • Static calls through imported class aliases now reach the correct class when services and repositories share method names.

    1.6.1release notes

  • Calls and file dependencies through from-package module imports with aliases now appear in the graph.

    1.6.1release notes

  • Python and Go methods passed as values now appear in callers and impact results.

    1.6.1release notes

  • Quoted parameter annotations, including those under future annotations, now resolve methods called on the parameter. Re-index Python projects.

    1.6.1release notes

  • Calls through imported project modules whose names collide with builtin collection methods are no longer dropped as builtin calls.

    1.6.1release notes

  • Method calls on module-scope builtin collections no longer create false calls or file dependencies to unrelated same-named project methods.

    1.6.1release notes

  • JavaScript calls through an RCT_EXTERN_MODULE shim resolve to Swift methods, and inline native-event listeners are attributed to their registering component.

    1.6.1release notes

  • Each Route tag and route object is read from its own attributes or fields, preventing an element from bleeding into sibling or parent routes.

    1.6.1release notes

  • Navigation in a multi-app repository now resolves to a route within its own app.

    1.6.1release notes

  • Rust unit structs and their trait implementation relationships now appear in the graph after re-indexing.

    1.6.1release notes

  • The bundled Scala grammar is updated to official tree-sitter-scala v0.26.2, preserving inheritance edges for classes with multiple parameter lists.

    1.6.1release notes

  • Functions defined through a single-argument macro are indexed under their real name when the macro definition proves it.

    1.6.1release notes

  • Spring DI patterns now apply only to Java/Kotlin references; inheritance resolves through imports and name matching, avoiding cross-language false relationships. Re-index.

    1.6.1release notes

  • A callback registered with subscribe(this.handler) now links to that exact handler rather than the first same-named method in the project.

    1.6.1release notes

  • Same-named symbols on one line, such as a one-line getter/setter pair, no longer collide and drop one; existing symbol IDs remain unchanged.

    1.6.1release notes

  • Rust functions annotated as Tauri commands are no longer reported as dead code.

    1.6.1release notes

  • Client calls with a type argument now resolve to their route like untyped calls.

    1.6.1release notes

  • When emitted .js, .jsx, .mjs, or .cjs files are absent, import resolution retries source extensions; a real emitted-extension file still wins.

    1.6.1release notes

  • Collection calls through local variables and nested properties no longer link to unrelated project methods. Re-index.

    1.6.1release notes

  • Calls through an enclosing class field resolve using its declared type; external or builtin field types remain unresolved rather than guessed. Re-index.

    1.6.1release notes

  • Calls through value aliases now forward call edges to the aliased function, improving callers and impact results. Re-index after upgrading.

    1.6.1release notes

  • Actions in stores exported on a later line via export default or export {} are now extracted like actions in export const stores.

    1.6.1release notes

  • Checks database-file progress before killing a server waiting on a slow disk.

    1.6.0release notes

  • Bounds compiled-pattern caches to prevent regular-expression code-space exhaustion in very large repositories.

    1.6.0release notes

  • Falls back to another parser and records a parse warning for extremely deeply nested files instead of crashing the indexing process.

    1.6.0release notes

  • C++ headers containing a plain derived type are recognized as C++, including when a long C-compatible preamble precedes the type.

    1.6.0release notes

  • Resolves file paths named in a query against the index and guarantees a matching file a place at the top of the answer; unmatched paths are called out.

    1.6.0release notes

  • Matches kebab-case indexed filenames even when queries omit their extension, without splitting ordinary hyphenated words that do not name a file.

    1.6.0release notes

  • Preserves definitions explicitly named in a query, including sibling symbols, when selecting and trimming answer source.

    1.6.0release notes

  • Writes a platform-correct Claude Code prompt hook command on Windows, and rerunning install or upgrade repairs existing installs.

    1.6.0release notes

  • Includes new files inside brand-new, untracked directories in its pending-changes report.

    1.6.0release notes

  • Avoids a maximum-call-stack crash while resolving references in large changed-file batches, preserving graph connections.

    1.6.0release notes

  • Repairs files incorrectly recorded with zero symbols after an interrupted first parse, including records already present in the index.

    1.6.0release notes

  • Clears stale daemon artifacts as well as the indexing lock.

    1.6.0release notes

  • Binary literals no longer cause commas inside arguments to be counted as argument separators, preventing dropped or mislinked behaviour-dispatch edges.

    1.6.0release notes

  • Erlang functions with the same name but different arities are separate symbols identified as module:fun/arity, with arity-specific specs, spans, exports, and exploration.

    1.6.0release notes

  • Calls to methods on exported object-literal constants now resolve to those methods in defining files and through imports, improving caller and impact analysis.

    1.6.0release notes

  • Recognizes generated files by the // Code generated by … DO NOT EDIT. banner, preventing generated layers from crowding out handwritten code in explore answers.

    1.6.0release notes

  • Methods in generic or lifetime-parameterized Rust impl blocks, including impls on references and module-qualified types, are attributed to the implementing type.

    1.6.0release notes

  • Restores dropped database indexes after a crash during bulk loading and marks a successful recovery sync complete.

    1.6.0release notes

  • Rebinds references when symbol definitions change so long-lived sync results remain closer to a fresh index; body-only edits do no extra work.

    1.6.0release notes

  • Runs JSX rendering analysis only on JavaScript-family files, avoiding impossible call edges from JSX-looking strings in other languages.

    1.6.0release notes

  • Reports when no project can be resolved, including the searched directory and nearby indexed sub-projects.

    1.6.0release notes

  • Method calls on struct fields resolve against the field's declared type, looking through references and Box, Rc, and Arc; unsupported or external field types remain unresolved rather than guessed.

    1.6.0release notes

  • Handles Swift Vapor calls with long labeled argument lists and no use: handler without stalling indexing or the MCP server.

    1.6.0release notes

  • Import aliases from shared and inherited TypeScript configs are now followed, improving cross-package resolution in monorepos.

    1.6.0release notes

  • Folds oversized leftover logs back into the index and trims them automatically the next time a project opens after a force-killed session.

    1.6.0release notes

  • Extensionless imports in SAP HANA .xsjs files now resolve across files to .xsjslib modules, creating accurate cross-file call edges.

    1.6.0release notes