v1.4.5
Highlights
This release brings a major type resolution overhaul (Phases 4–6), Ruby language support, a database migration from KuzuDB to LadybugDB, and significant performance optimizations to the ingestion pipeline.
Type Resolution System (Phases 4–6)
The type resolution pipeline now covers 12 languages with deep support for receiver-constrained call resolution:
- Phase 4 — Nullable unwrapping, for-loop element typing, assignment chain propagation (#310)
- Phase 5 — Chained method calls, pattern matching, class-as-receiver dispatch (#315)
- Phase 6 — Container descriptors (Map keys vs values), recursive pattern binding (C#
is, Kotlinwhen/is), for-loop Tier 1c across all languages (#318)- C# nested member foreach (
this.data.Values) - C++ pointer dereference range-for (
*usersPtr) - Java
this.data.values()field access - PHP
$this->propertyforeach member access - Position-indexed branch-local narrowing for Kotlin smart casts
- C# nested member foreach (
Performance Optimizations
- Worker pool threshold — skip thread pool for small repos (<15 files or <512KB), saving 100–400ms
- AST walk pruning —
SKIP_SUBTREE_TYPESskips leaf-only subtrees (strings, comments, literals) - Pre-computed
interestingNodeTypes— singleSet.has()replaces 3 checks per AST node fastStripNullable— fast-path nullable check for simple identifiers (90%+ of lookups)extractFunctionNamerefactor — replace.children?.find()with manualforloops to eliminate array allocationsskipGraphPhasespipeline option — skip MRO/community/process phases for faster test runs
New Features
- Ruby language support for CLI and web (#111) by @candidosales
- TypeEnvironment API with constructor inference, self/this/super/base/parent resolution (#274)
- Return type inference with JSDoc, PHPDoc, and YARD doc-comment parsing (#284)
.gitignoreand.gitnexusignoresupport during file discovery (#231) by @ivkond and @jecanore- Codex MCP configuration documentation (#236) by @ZakAnun
- Type resolution system documentation with architecture guide and roadmap
Infrastructure
- Migrated from KuzuDB to LadybugDB v0.15 (#275) by @candidosales
hookTimeout: 120000in vitest config for CI reliability
Bug Fixes
- Same-directory Python import resolution (#328) by @cnighut
- Ruby method-level call resolution, HAS_METHOD edges, and dispatch table (#278)
- Dynamic agent skill discovery and installation in CLI (#270) by @cnighut
- Template string incorrectly included in AST pruning set (contains interpolated expressions)
What's Changed
🚀 Features
- feat(ruby): Add Ruby language support for CLI and web by @candidosales in #111
- feat: TypeEnvironment API with constructor inference, self/this/super resolution by @magyargergo in #274
- feat: return type inference, doc-comment parsing, and per-language type extractors by @magyargergo in #284
- feat(ingestion): respect .gitignore and .gitnexusignore during file discovery by @ivkond and @jecanore in #231
- feat: Phase 4 type resolution — nullable unwrapping, for-loop typing, assignment chains by @magyargergo in #310
- feat: Phase 5 type resolution — chained calls, pattern matching, class-as-receiver by @magyargergo in #315
- feat: Phase 6 type resolution — for-loop Tier 1c, pattern matching, container descriptors by @magyargergo in #318
⚡ Performance
- perf: worker pool threshold, AST walk pruning, fastStripNullable, extractFunctionName refactor
🔧 Infrastructure
- refactor: migrate from KuzuDB to LadybugDB v0.15 by @candidosales in #275
- docs: add Codex MCP configuration to README by @ZakAnun in #236
🐛 Bug Fixes
- fix(cli): dynamically discover and install agent skills by @cnighut in #270
- fix(ruby): method-level call resolution, HAS_METHOD edges, and dispatch table by @magyargergo in #278
- fix(resolver): fix for same-directory python imports by @cnighut in #328
New Contributors
- @cnighut made their first contribution in #270
- @candidosales made their first contribution in #111
- @ivkond made their first contribution in #231
- @jecanore made their first contribution in #231
- @ZakAnun made their first contribution in #236
Full Changelog: v1.4.0...v1.4.5