Releases: optave/codegraph
Dev build 3.1.17-dev.637fc01
Dev build from commit 637fc01ce6db317b2d310c1547829a19ddb9bc05 on main.
Dev build 3.1.15-dev.1a729a6
Dev build from commit 1a729a605d51a0336d30e15ec674aa941f0e5579 on main.
Dev build 3.1.13-dev.a2a2a04
Dev build from commit a2a2a04885509614941c1bbc21fca5bcc9c5ecfa on main.
Dev build 3.1.12-dev.6de3105
Dev build from commit 6de3105eb76a391ce23a61b80ec6ec93c28effbe on main.
Dev build 3.1.11-dev.2f6e2e4
Dev build from commit 2f6e2e479d34216872330a62f720b29e8a0ae9c7 on main.
v3.1.3
Bug fixes and build instrumentation. This patch fixes WASM builds silently producing zero complexity rows, resolves four dogfood-reported issues (benchmark crash resilience, WASM parser memory cleanup, native dynamic import tracking, stale native version reporting), and adds missing build phase timers so setupMs and finalizeMs now account for the previously untracked ~45% of total build time. Prepared statement caching is extracted into a reusable cachedStmt utility.
Features
- builder: add
setupMsandfinalizeMsphase timers tobuildGraph— closes the ~45% gap in phase breakdown accounting (#415)
Bug Fixes
- complexity: fix WASM builds producing zero
function_complexityrows — incorrect import alias causedfindFunctionNodeto be undefined in WASM-only path (#414) - native: track
import()expressions in Rust extractor — addsdynamicImportfield toImportstruct, matching WASM behavior for dead-export analysis (#418) - native: report correct native package version in
codegraph info— reads from platform npm package.json instead of binary-embedded version (#418) - benchmark: wrap engine calls in try/catch so one engine failure doesn't prevent the other from running; fix embedding benchmark
disposeModelleak (#418) - parser: add
disposeParsers()to release cached WASM parsers/queries; calltree.delete()after AST analysis to prevent segfaults on repeated builds (#418) - queries: hoist prepared statement out of BFS loop in
getClassHierarchy(#403) - ci: only trigger Claude automated review on PR open, not every push (#419)
Performance
v3.1.2
Phase 3 architectural refactoring reaches substantial completion. This release finishes the unified AST analysis framework (Phase 3.1) — all four analyses (complexity, CFG, dataflow, AST-store) now run in a single DFS walk via pluggable visitors, with cfg.js shrinking from 1,242 to 518 lines and cyclomatic complexity derived directly from CFG structure. CLI command/query separation (Phase 3.2) moves ~1,059 lines of formatting code into a dedicated src/commands/ directory. Repository pattern migration (Phase 3.3) extracts raw SQL from 14 source modules. Dynamic import() expressions are now tracked as dynamic-imports graph edges, fixing false positives in dead-export analysis and impact tracing. Prepared statement caching cuts hot-path DB overhead in the repository layer.
Features
- ast-analysis: unified AST analysis framework — shared DFS walker with pluggable
enterNode/exitNode/enterFunction/exitFunctionhooks; complexity, CFG, AST-store, and dataflow visitors in a single coordinated pass (#388) - cfg: CFG visitor rewrite — node-level DFS visitor replaces statement-level
buildFunctionCFG, Mode A/B split eliminated; cyclomatic complexity now derived from CFG (E - N + 2);cfg.jsreduced from 1,242 → 518 lines (#392) - commands: extract CLI wrappers into
src/commands/directory (Phase 3.2) — command/query separation complete across all 19 analysis modules;src/infrastructure/added for sharedresult-formatter.jsandtest-filter.js(#393) - builder: track dynamic
import()expressions asdynamic-importsgraph edges — destructured names feed into call resolution, fixing false "zero consumers" in dead-export analysis (#389)
Bug Fixes
- hooks: fix
check-dead-exportshook silently no-ops on ESM codebases (#394) - hooks: guard pre-push hook against
sh -efailure whendiff-impactis unavailable - complexity: remove function nodes from
nestingNodeTypesand eliminate O(n²) lookup - complexity: remove function nesting inflation in
computeAllMetricsand passlangIdto LOC - ast-analysis: guard
runAnalysescall, fix nested function nesting, rename_engineOpts - ast-analysis: fix Halstead skip depth counter, debug logging, perf import
Performance
- db: cache prepared statements in hot-path repository functions — avoids repeated statement compilation on incremental builds
Refactors
- migrate raw SQL from 14 source modules into repository pattern (Phase 3.3) —
src/db/repository/split into 10 domain files (nodes, edges, build-stmts, complexity, cfg, dataflow, cochange, embeddings, graph-read, barrel) - address Greptile review — deduplicate
relatedTests, hoist prepared stmts, fix.raw()no-op
v3.1.1
Reliability, architecture, and MCP cold-start fixes. This patch breaks a circular dependency cycle, fixes MCP server first-connect reliability by deferring heavy imports, corrects flow matching to use core symbol kinds, and refactors all database access to use try/finally for reliable db.close(). Internal architecture improves with repository pattern for data access and command/query separation.
Features
- hooks: add pre-commit hooks for cycles, dead exports, signature warnings (#381)
- benchmark: add 1-file rebuild phase breakdown to build benchmarks (#370)
Bug Fixes
- cycles: break circular dependency cycle and remove dead
queryNameexport (#378) - queries: use
CORE_SYMBOL_KINDSin flow matching (#382) - mcp: defer heavy imports in MCP server for first-connect reliability (#380)
Refactors
- wrap all db usage in try/finally for reliable
db.close()(#384, #383) - repository pattern for data access (#371)
- command/query separation — extract CLI wrappers, shared output helper (#373)
Chores
v3.1.0
Sequence diagrams, native engine performance leap, and unused export detection. This release adds codegraph sequence for Mermaid sequence diagram generation from call graph edges, delivers major native engine build optimizations (deep-clone elimination, batched SQLite inserts, call edge building in Rust, FS caching, rayon-parallel import resolution), introduces --unused on the exports command to detect dead exports, and fixes an ~80x native no-op rebuild regression.
Features
- sequence: add
codegraph sequence <name>command for Mermaid sequence diagram generation from call graph edges — participants are files, BFS forward from entry point, optional--dataflowflag for parameter/return annotations; exposed via CLI, MCP tool, and programmatic API (#345) - exports: add
--unusedflag tocodegraph exports— newexportedcolumn (migration v14) populated from parser export declarations, enabling detection of symbols declared as exports but with zero consumers (#361)
Performance
- native: eliminate deep-clone in
normalizeNativeSymbols— replace 125-line JS deep-clone with in-placepatchNativeResultvia#[napi(js_name)]annotations on Rust types (#361) - native: add
include_ast_nodesflag toparse_file/parse_files— initial parse skips AST node walking, saving ~200ms (#361) - native: move call/receiver/extends edge building to Rust (
edge_builder.rs) — narrowest-span caller resolution, confidence sorting, dedup via u64 edge keys (#361) - native: add
known_filesHashSet cache toresolve_imports_batch— avoids redundant FS syscalls during import resolution (#361) - native: parallelize
resolve_imports_batchwith rayon for concurrent import resolution (#361) - builder: batch SQLite multi-value INSERTs — accumulate node/edge rows and flush with chunked INSERT statements (200 rows per chunk) instead of individual prepared statement runs (#361)
Bug Fixes
- native: fix no-op rebuild regression (~80x slower than WASM) —
extToLangmap was not built when native engine provided pre-computed CFG, causinglangIdlookup to return null and triggering full re-parse on every incremental build (#360) - native: pass full file list to
known_filescache — on incremental builds only changed files were passed, causing valid import targets to be dropped (#361) - benchmark: install native package explicitly in npm benchmark mode (#351)
Documentation
- reorder README to be AI-first throughout (#362)
- add MCP tool surface optimization proposal (#363)
- update build performance, query, and incremental benchmarks for 3.0.4 (#352, #353, #354)
Chores
v3.0.4 Performance
Native engine goes full-stack: CFG, AST nodes, and WASM double-parse elimination. This release completes the native engine migration — CFG computation and AST node extraction now run in Rust for 8 languages, eliminating the redundant WASM pre-parse on native builds.
Performance
- native: compute CFG in Rust native engine for all 8 languages (JS/TS/TSX, Python, Go, Rust, Java, C#, Ruby, PHP) — ports
buildFunctionCFGalgorithm to Rust with per-languageCfgRules, eliminates WASM re-parsing in CFG phase (#342) - native: extract AST nodes (call, new, throw, await, string, regex) for all non-JS languages in Rust via shared
walk_ast_nodes_with_config()— astMs drops from ~651ms to ~50ms (#340) - builder: skip
ensureWasmTreesentirely when native engine provides complete CFG + dataflow + AST data — wasmPreMs drops from ~388ms to 0 on native builds (#344)
Bug Fixes
- native: fix function-scoped
constdeclarations being incorrectly extracted as top-level constants (#344) - benchmark: show all build phases (astMs, cfgMs, dataflowMs, wasmPreMs) in benchmark report and document v3.0.0→v3.0.3 native regression cause (#339)
3.0.3 (2026-03-04)
Note: 3.0.2 was an internal/unpublished version used during development.