Releases: optave/ops-codegraph-tool
v3.9.1
Dead code accuracy, native query performance, and supply-chain hardening. This release significantly improves dead code detection — class instantiations via new, type-only imports, barrel re-exports, and same-file constants are now correctly tracked as consumption. The native Rust engine gains a composite fnDeps query that runs dependency resolution in a single cross-language call, and a critical 1238% incremental rebuild regression from v3.9.0 is fixed. WASM grammar validation and npm audit harden the build pipeline. CLI reliability improves with a fix for hangs in git worktree environments.
Bug Fixes
- track class instantiation (
new) as consumption for dead code detection (#861) - resolve type-only imports for dead code analysis (#862)
- trace barrel re-exports in role classification (#860)
- recognize same-file constant consumption in dead code detector (#859)
- resolve codegraph CLI hangs in git worktrees (#863)
- use shared
shouldIgnore/isSupportedFilein watcher (#864) - resolve barrel resolution quality and cycle regression (#848)
- show both engines side-by-side in README benchmark table (#826)
- release config script validation and broken postbump (#825)
- native: lower version gate for native orchestrator (#867)
- native: correct incremental purge, scoped deletion, and barrel resolution (#865)
- ci: retry npm publish on transient registry errors (#833)
- ci: upgrade publish job to Node 24 for OIDC trusted publishing (#850)
- ci: add npm auth debug step and fix publish retry logic (#835)
- perf: wire engine selection through openRepo to fix query benchmarks (#869)
- bench: attribute unified walk time to per-phase timers (#858)
Performance
Refactors
- native: decompose core Rust algorithms and pipeline (#845)
- native: extract constants and shared barrel resolution (#842)
- native: flatten and decompose extractor match arms (#844)
- DRY shared abstractions in TS features (#843)
- decompose TS complexity and build pipeline (#846)
- improve TS code quality across modules (#847)
Chores
- security: WASM grammar validation and npm audit CI (#834)
- deps: bump @modelcontextprotocol/sdk from 1.28.0 to 1.29.0 (#829)
- deps-dev: bump @huggingface/transformers from 3.8.1 to 4.0.1 (#831)
- deps-dev: bump @biomejs/biome from 2.4.9 to 2.4.10 (#828)
- deps-dev: bump tree-sitter-gleam (#830)
- deps-dev: bump tree-sitter-erlang from 0.0.0 to 0.15 (#827)
v3.9.0
Engine parity hardening and cross-database queries. This release closes the remaining native/WASM divergences — node counts, edge counts, complexity metrics, and import resolution now match across engines. A new --db flag on branch-compare and info lets you point at any .codegraph/graph.db, enabling cross-repo comparisons without rebuilding. WASM grammar loading is now lazy during incremental rebuilds, cutting rebuild times for large codebases. Windows users get a fix for ENOENT failures during auto-install.
Features
- cli: add
--dbflag tobranch-compareandinfocommands for cross-database queries (#820) - add resolution precision/recall metrics and version stamp to README benchmarks (#796)
Bug Fixes
- respect
--engine wasmin pipeline guard (#819) - resolve npm ENOENT on Windows for auto-install (#818)
- resolve native/WASM engine divergence in node and edge counts (#810)
- native: resolve importedNames priority and type map scope collisions (#811)
- native: resolve import path mismatch and add post-native structure phase (#807)
- native: extract export name for destructured dynamic imports (#813)
- native: fix incremental barrel edges, median parity, and analysis data loss (#806)
- parity: align native vs WASM complexity metrics (#809)
- v3.8.1 regression fixes (fnDeps, WASM lazy-load, edge parity, CI guard) (#815)
- ci: remove npm self-upgrade that breaks publish workflow (#790)
Performance
- lazy-load WASM grammars for incremental rebuilds (#808)
v3.8.1
Windows stability, native engine fixes, and large-codebase performance. This patch hardens the v3.8.0 release with critical Windows fixes (polling watcher to avoid ReFS BSOD, Windows-scoped import-edge handling), several native engine corrections (dataflow parameter indexing, embedding path resolution, build orchestrator sequencing), and performance improvements for large codebases — cycle detection and stats queries are faster, and query-time analysis now routes through the native Rust engine.
Bug Fixes
- native: resolve dataflow null paramIndex and import edge key mismatch (#788)
- native: keep nativeDb open through finalize for correct build_meta (#784)
- embed: handle absolute file paths from native engine (#780, #783)
- default watcher to polling on Windows to avoid ReFS BSOD (#778)
- scope native import-edge skip to Windows only (#777)
- run analysis phases after native Rust build orchestrator (#757)
- skip native build orchestrator for addon ≤3.8.0 and fix path bug (#758)
- auto-install @huggingface/transformers in non-TTY environments (#779)
- remove duplicate function definitions in leiden optimiser (#786)
- replace empty catch blocks with structured error handling (#764)
- replace console.log with structured logging in non-CLI-output code (#765)
- ci: add concurrency group to codegraph-impact workflow (#785)
- bench: resolve query benchmark CI failure and increase embedding timeout (#749)
Performance
- route query analysis through native Rust engine (#745)
- optimize cycles and stats for large codebases (#781)
- filter reverse-dep files from native build analysis scope (#782)
- forward langId hint to native standalone analysis functions (#743)
Refactors
- decompose ast-analysis visitor framework (#771)
- Titan v3.8.0 — decompose god-functions, structured logging, error handling (#775)
- extract class declaration handlers in language extractors (#769)
- split hybridSearchData into keyword, vector, and merge steps (#768)
- decompose makePartition into focused graph operations (#766)
- extract rendering sub-functions from inspect and diff-impact-mermaid (#767)
- address quality warnings in shared modules (#770)
v3.8.0
34 languages and a fully native build pipeline. This release completes Phase 7 (Expanded Language Support) by shipping the final 11 languages — F#, Gleam, Clojure, Julia, R, Erlang, Solidity, Objective-C, CUDA, Groovy, and Verilog — bringing codegraph from 23 to 34 supported languages. On the performance side, the entire build pipeline now runs natively in Rust: graph algorithms (BFS, shortest path, Louvain, centrality), import edge building with barrel resolution, and build-glue queries all migrate from JS to napi-rs. A new Rust build orchestration layer coordinates the full native pipeline end-to-end.
Features
- add F#, Gleam, Clojure, Julia, R, Erlang language support (#722)
- add Solidity, Objective-C, CUDA, Groovy, Verilog language support (#729)
- full Rust build orchestration (#740)
Bug Fixes
- native: enable bulkInsertNodes native path (#736)
- native: enable bulkInsertNodes native path — null-visibility serialisation (#737)
- native: prevent SQLITE_CORRUPT in incremental pipeline (#728)
- ocaml: use LANGUAGE_OCAML_INTERFACE grammar for .mli files (#730)
- address unresolved review feedback from batch4 language extractors (#731)
- bench: report partial native results when incremental rebuild fails (#741)
Performance
- migrate graph algorithms (BFS, shortest path, Louvain, centrality) to Rust (#732)
- migrate import edge building + barrel resolution to Rust (#738)
- native: expose standalone complexity/CFG/dataflow analysis via napi-rs (#733)
- native Rust build-glue queries (detect-changes, finalize, incremental) (#735)
Refactors
- native: remove call kind from AST node extraction (#734)
v3.7.0
Six more languages and a CFG stability fix. Codegraph now supports Elixir, Lua, Dart, Zig, Haskell, and OCaml — bringing the total to 23 languages with dual-engine extractors. A WAL conflict in the native CFG bulk-insert path is also fixed, preventing database corruption when JS and native connections overlap during control-flow graph writes.
Features
- add Elixir, Lua, Dart, Zig, Haskell, OCaml language support (#718)
Bug Fixes
- cfg: avoid dual-connection WAL conflict in native bulkInsertCfg (#719)
v3.6.0
Six new languages and a parser abstraction layer. This release adds first-class support for C, C++, Kotlin, Swift, Scala, and Bash — bringing the total supported languages to 17. A new parser abstraction layer decouples language extractors from tree-sitter internals, making it straightforward to add more languages. The native Rust engine gains batched query methods for the read path, WAL corruption is fixed when native and JS connections overlap, and WASM call-AST extraction is restored for full engine parity.
Features
- add C, C++, Kotlin, Swift, Scala, Bash language support (#708)
Bug Fixes
- parity: restore call AST node extraction in WASM engine (#705)
- native: suspend JS connection around native writes to prevent WAL corruption (#704)
- native visibility crash and dual-SQLite WAL corruption in benchmarks (#689)
- ci: resolve visibility null crash and sequence dataflow annotation (#693)
- publish: update repository URLs for npm provenance (#682)
Performance
- queries: batched native Rust query methods for read path (#698)
Refactors
v3.5.0
Full rusqlite database migration and sub-100ms incremental rebuilds. This release completes the migration of all SQLite operations from better-sqlite3 to native Rust/rusqlite via napi-rs, delivering major performance gains across the entire build pipeline. Incremental rebuilds drop from 466ms to 67–80ms, and bulk inserts for nodes, edges, roles, AST nodes, CFG, and dataflow all run through the native engine. better-sqlite3 is now lazy-loaded only as a fallback. Path aliases are restored with TS 6.x-compatible subpath imports, and several WASM/native parity bugs are fixed.
Features
- config: restore path aliases with TS 6.x-compatible subpath imports (#672)
Bug Fixes
- db: fold reverse-dep edge deletion into NativeDatabase.purgeFilesData (#670, #679)
- wasm: extract call-site AST nodes in ast-store-visitor (#678)
- parser: close WASM–native engine parity gap (#649, #657)
- test: remove constant-kind exclusion from parity test (#676, #680)
Performance
- db: NativeDatabase napi-rs class for rusqlite connection lifecycle (6.13) (#666)
- db: migrate Repository read queries to NativeDatabase rusqlite (6.14) (#671)
- db: migrate build pipeline writes to NativeDatabase (6.15) (#669)
- db: generic query execution on NativeDatabase (6.16) (#677)
- db: bulk CFG and dataflow DB writes via rusqlite (#653)
- build: native Rust/rusqlite for roles & edge insertion (6.12) (#658)
- insert-nodes: native Rust/rusqlite pipeline for node insertion (#654)
- ast: bulk-insert AST nodes via native Rust/rusqlite (#651)
- sub-100ms incremental rebuilds (466ms → 67–80ms) (#644)
- hooks: narrow Bash hook matchers to git commands only (#655)
Refactors
- db: lazy-load better-sqlite3 and remove standalone napi functions (6.17) (#673)
Chores
v3.4.1
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
findCallerthat misattributed 68 call edges (#637) - native: recurse into
await_expressionchildren inwalk_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
/reviewfrom spamming@greptileaiwhen 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
toErrorMessagehelper (#633) - extract
MAX_WALK_DEPTHconstant to extractors helpers (#620) - address SLOC warnings in domain and features layers (#621)
- split
cfg-visitor.tsby control-flow construct (#619)
Chores
- titan: first full Titan Paradigm pipeline run — audit report generation and skill improvements (#623)
v3.4.0
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
.jsfiles 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#
implementsdisambiguation via post-walk reclassification ofextendsentries 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_listfor C# classes in the Rust engine (#577) - cfg: bypass JS CFG visitor entirely on native builds; fix Go
for-rangeCFG parity between engines (#595)
Bug Fixes
- edges: remove
findCallerfallback 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→.tsextension remap after native resolution (#594) - resolver: normalize paths in native resolver for
.js→.tsremap (#600) - deps: patch 5 high-severity transitive vulnerabilities (#583)
- types: narrow parser return types,
cachedStmtinbuildTestFileIds, WASM parser path, and triage query results (#569, #576, #578) - scripts: use version-aware
strip-typesflag inpackage.jsonscripts (#599) - tests: use
fs.cpSyncfor 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
cachedStmttobuildTestFileIdsstatic SQL for faster test filtering (#575)
Tests
- strengthen weak assertions and add presentation layer coverage (#586)
Chores
v3.3.1
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
astcommand 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
findReverseDepsanddeleteOutgoingEdges(#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.