Skip to content

Releases: optave/codegraph

v3.4.1

27 Mar 03:25
c0b46a5

Choose a tag to compare

Post-migration stabilization and native engine accuracy. This release fixes a Rust findCaller bug that misattributed 68 call edges, adds compound database indexes to restore query performance after the TypeScript migration, and delivers a 96% speedup to incremental role classification (255ms → 9ms). WASM builds are more resilient, incremental rebuilds handle JSONC and version changes correctly, and error handling is safer across the board.

Bug Fixes

  • native: remove spurious else-if in Rust findCaller that misattributed 68 call edges (#637)
  • native: recurse into await_expression children in walk_ast_nodes (#618)
  • build: JSONC parse and version-aware incremental rebuilds (#631)
  • WASM build resilience and lint cleanup from TypeScript migration (#629)
  • dogfood fixes 9.1–9.4 — version warning, barrel exports, quieter tsconfig, Set compatibility (#634)
  • use safe error coercion in debug catch blocks (#630)
  • add debug logging to empty catch blocks across infrastructure and domain layers (#616)
  • bench: use dist/ for npm benchmark installs to avoid Node type-stripping error (#624)
  • bench: repair benchmark workflow broken by TypeScript migration (#612)
  • skills: prevent /review from spamming @greptileai when already approved (#628)

Performance

  • db: add compound indexes to fix query regression from TypeScript migration (#632)
  • build: incremental rebuild optimizations — roles 255ms → 9ms (#622)

Refactors

  • errors: extract shared toErrorMessage helper (#633)
  • extract MAX_WALK_DEPTH constant to extractors helpers (#620)
  • address SLOC warnings in domain and features layers (#621)
  • split cfg-visitor.ts by control-flow construct (#619)

Chores

  • titan: first full Titan Paradigm pipeline run — audit report generation and skill improvements (#623)

Dev build 3.4.2-dev.9

27 Mar 05:58
0fa8053

Choose a tag to compare

Dev build 3.4.2-dev.9 Pre-release
Pre-release

Dev build from commit 0fa80530bdc7f04196dab711f59b935af0469cc6 on main.

Dev build 3.4.2-dev.7

27 Mar 05:19
398f9f8

Choose a tag to compare

Dev build 3.4.2-dev.7 Pre-release
Pre-release

Dev build from commit 398f9f882b338a12deba7444190fce211b033068 on main.

Dev build 3.4.2-dev.6

27 Mar 04:51
aa6499a

Choose a tag to compare

Dev build 3.4.2-dev.6 Pre-release
Pre-release

Dev build from commit aa6499abf03e831e2e5f5ebb08a8db9c1094bee7 on main.

Dev build 3.4.2-dev.4

27 Mar 04:14
f6bd74e

Choose a tag to compare

Dev build 3.4.2-dev.4 Pre-release
Pre-release

Dev build from commit f6bd74eb29fd643603c01e1824332419d10adbbf on main.

Dev build 3.4.2-dev.10

27 Mar 07:58
b302648

Choose a tag to compare

Pre-release

Dev build from commit b30264812d3319bb2424be6d528a4e1a04cd19ad on main.

v3.4.0

26 Mar 03:19
9107ec2

Choose a tag to compare

TypeScript migration complete, Leiden community detection, and native engine hardening. The entire codebase — all 271 source files — is now TypeScript with zero .js files remaining. Community detection upgrades from Louvain to a vendored Leiden algorithm with true probabilistic refinement, removing the graphology dependency. Go gains structural interface matching and C# gets proper implements disambiguation. The native Rust engine now extracts call-site AST nodes and bypasses the JS CFG visitor entirely on native builds. MCP server shutdown is graceful, and several edge-attribution and WASM fallback bugs are fixed.

Features

  • types: complete TypeScript migration — all 271 source files migrated from JavaScript, zero .js files remaining. Covers leaf modules, core domain, graph algorithms, builder stages, search, CLI layer (48 command handlers), AST analysis, features, presentation, MCP tools, and test suite (#553, #554, #555, #558, #566, #570, #579, #580, #581, #588)
  • communities: vendor Leiden community detection algorithm, replacing graphology-communities-louvain — full control over resolution, quality functions, and probabilistic refinement (#545, #552, #556)
  • resolution: Go structural interface matching — post-extraction pass matches struct method sets against interface method sets; C# implements disambiguation via post-walk reclassification of extends entries targeting known interfaces (#522)
  • native: extract call-site AST nodes in Rust during native parse, fixing WASM fallback path for incomplete extraction (#591)
  • native: extract base_list for C# classes in the Rust engine (#577)
  • cfg: bypass JS CFG visitor entirely on native builds; fix Go for-range CFG parity between engines (#595)

Bug Fixes

  • edges: remove findCaller fallback that misattributed file-scope calls to unrelated functions (#607)
  • mcp: add graceful shutdown to prevent "MCP Failed" errors on session clear (#598)
  • resolver: apply JS-side .js.ts extension remap after native resolution (#594)
  • resolver: normalize paths in native resolver for .js.ts remap (#600)
  • deps: patch 5 high-severity transitive vulnerabilities (#583)
  • types: narrow parser return types, cachedStmt in buildTestFileIds, WASM parser path, and triage query results (#569, #576, #578)
  • scripts: use version-aware strip-types flag in package.json scripts (#599)
  • tests: use fs.cpSync for fixture copy to handle subdirectories (#584)

Performance

  • native: fix WASM fallback bypass so native builds skip redundant JS analysis passes; batch SQL inserts for node/edge operations (#606)
  • queries: apply cachedStmt to buildTestFileIds static SQL for faster test filtering (#575)

Tests

  • strengthen weak assertions and add presentation layer coverage (#586)

Chores

  • add npm run bench script and stale embeddings warning (#604)
  • bump commit-and-tag-version, tree-sitter-cli, web-tree-sitter, @commitlint/cli, @commitlint/config-conventional (#560, #561, #562, #563, #564)

v3.3.1

20 Mar 07:51
45585a9

Choose a tag to compare

Incremental rebuild accuracy and post-3.3.0 stabilization. This patch fixes a critical edge gap in the file watcher's single-file rebuild path where call edges were silently dropped during incremental rebuilds, aligns the native Rust engine's edge builder kind filters with the JS engine for parity, plugs a WASM tree memory leak in native engine typeMap backfill, and restores query performance to pre-3.1.4 levels. Several post-reorganization import path issues are also corrected.

Bug Fixes

  • watcher: close edge gap in single-file rebuild — incremental rebuilds now correctly preserve call edges by coercing native typeMap arrays to Maps and rebuilding edges for reverse-dependency files (#533, #542)
  • native: align edge builder kind filters with JS engine parity — ensures native and WASM engines produce identical edge sets (#541)
  • native: free leaked WASM trees in native engine typeMap backfill (#534)
  • cli: correct ast command import path after src/ reorganization (#532)
  • benchmarks: stabilize benchmark targets across engines and preserve README links (#527)
  • benchmarks: update benchmark script import paths after src/ restructure (#521)
  • ci: sync Cargo.toml version before native binary build (#538)

Performance

  • queries: reduce query latency regression from 3.1.4 to 3.3.0 — cached prepared statements for findReverseDeps and deleteOutgoingEdges (#528)

Tests

  • watcher: incremental edge parity CI check — ensures watcher rebuilds produce identical edge sets to full builds (#539)

Chores

  • ci: add dynamic import verification to catch stale paths (#540)

3.3.0 (2026-03-19)

Resolution accuracy reaches a new level. This release delivers Phase 4 resolution improvements — type inference across all typed languages, receiver type tracking with graded confidence, package.json exports field resolution, and monorepo workspace resolution. Method calls like repo.findCallers() now resolve through receiver types instead of matching any findCallers in scope. Barrel files correctly show re-exported symbols. A precision/recall benchmark suite tracks call resolution accuracy across versions. On the infrastructure side, all hardcoded behavioral constants are centralized into DEFAULTS with recursive deep merge, and the TypeScript migration begins with project setup and core type definitions.

v3.3.0

19 Mar 07:10
be24c76

Choose a tag to compare

Resolution accuracy reaches a new level. This release delivers Phase 4 resolution improvements — type inference across all typed languages, receiver type tracking with graded confidence, package.json exports field resolution, and monorepo workspace resolution. Method calls like repo.findCallers() now resolve through receiver types instead of matching any findCallers in scope. Barrel files correctly show re-exported symbols. A precision/recall benchmark suite tracks call resolution accuracy across versions. On the infrastructure side, all hardcoded behavioral constants are centralized into DEFAULTS with recursive deep merge, and the TypeScript migration begins with project setup and core type definitions.

Features

  • resolution: type inference for all typed languages (TS, Java, Go, Rust, C#, PHP, Python) — obj.method() resolves through declared types in both WASM and native engines (#501)
  • resolution: receiver type tracking with graded confidence — constructors (new Foo()) at 1.0, annotations at 0.9, factory methods at 0.7; highest-confidence assignment wins per variable (#505)
  • resolution: package.json exports field and monorepo workspace resolution — conditional exports, subpath patterns, npm/pnpm/Yarn workspaces resolved with high confidence instead of brute-force filesystem probing (#509)
  • exports: show re-exported symbols for barrel files — codegraph exports now traces through re-exports to show the actual consumers of each symbol (#515)
  • roles: dead role sub-categories — dead-leaf, dead-entry, dead-ffi, dead-unresolved replace the coarse dead role for more precise dead code classification (#504)
  • config: centralize all hardcoded behavioral constants into DEFAULTS with recursive deep merge — partial .codegraphrc.json overrides now preserve sibling keys (#506)
  • benchmarks: call resolution precision/recall benchmark suite — hand-annotated fixtures per language with expected-edges manifests, CI gate on accuracy regression (#507)
  • benchmarks: child-process isolation for benchmarks — benchmark runner spawns builds in separate processes to prevent state leaks (#512)
  • typescript: project setup for incremental migration — tsconfig.json, build pipeline, dist/ output with source maps (#508)
  • typescript: core type definitions (src/types.ts) — comprehensive types for symbols, edges, nodes, config, queries, and all domain model interfaces (#516)
  • languages: add .pyi, .phtml, .rake, .gemspec extensions to Python, PHP, and Ruby parsers (#502)

Bug Fixes

  • cli: reword misleading 'stale' warning in codegraph info — no longer implies the graph is broken when it's simply older than some files (#510)
  • skills: update dogfood and release skill templates to match current CLI surface (#511)

v3.2.0

17 Mar 14:08
edefc50

Choose a tag to compare

Post-Phase 3 decomposition and dead code accuracy. This release completes a thorough decomposition of the remaining monolithic modules — language extractors, AST analysis visitors, domain analysis functions, and feature modules are all broken into focused, single-responsibility helpers. Dead code detection now correctly classifies symbols that are only referenced by tests as "test-only" instead of "dead", and constants are properly included in edge building so they no longer appear as false-positive dead exports. A new brief command provides token-efficient file summaries designed for AI hook context injection. The native engine gains a MAX_WALK_DEPTH guard to prevent stack overflows on deeply nested ASTs.

Features

  • cli: codegraph brief <file> command — token-efficient file summary with symbols, roles, caller counts, and risk tiers; designed for hook-based context injection (#480)

Bug Fixes

  • roles: classify test-only-called symbols as "test-only" instead of "dead" — reduces false positives in dead code detection (#497)
  • builder: include constant nodes in edge building — constants no longer appear as false-positive dead exports (#495)
  • native: add MAX_WALK_DEPTH guard to native engine AST walkers — prevents stack overflows on deeply nested files (#484)
  • cli: support repeated --file flag for multi-file scoping across all commands (#498)
  • versioning: use semver-compliant dev version numbering (-dev.0 suffix instead of non-standard format) (#479)

Refactors

  • extractors: decompose monolithic language extractors (JS/TS, Python, Java) into per-category handlers (#490)
  • ast-analysis: decompose AST analysis visitors and domain builder stages into focused helpers (#491)
  • domain: decompose domain analysis and feature modules into single-responsibility functions (#492)
  • presentation: split data fetching from formatting and extract CLI/MCP subcommand dispatch (#493)
  • cleanup: dead code removal, shared abstractions, and empty catch block replacement across all layers (#489)