Releases: abhigyanpatwari/GitNexus
v1.4.6
Highlights
Phase 7 type resolution ships return-aware loop inference: for-loop iterables like for (const u of getUsers()) now resolve element types via function return types across 8 languages. PHP gets class-property iterable support for foreach($this->property) patterns.
Type Resolution (Phase 7)
- Phase 7.1–7.2 —
ReturnTypeLookupinterface +ForLoopExtractorContextcontext object + dormantpendingCallResultsinfrastructure (#341) - Phase 7.3 — Call-expression iterable resolution for TS/JS, Java, Kotlin, C#, Go, Rust, Python, PHP (#341)
- Phase 7.4 — PHP
$this->propertyforeach via@varclass property scan (#341) - Phase 7.5 — PHP
function_call_expression/member_call_expressionforeach (#341) extractReturnTypeNamededuplicated fromcall-processor.tsintoshared.ts(137 lines removed)
Bug Fixes
- impact: return structured error + partial results instead of crashing (#345) by @ShunsukeHayashi
- impact: add
HAS_METHODandOVERRIDEStoVALID_RELATION_TYPES(#350) by @karesansui-u - cli: write tool output to stdout via fd 1 instead of stderr (#346) by @ShunsukeHayashi
- postinstall: add permission fix for CLI and hook scripts (#348) by @ShunsukeHayashi
New Contributors
- @ShunsukeHayashi made their first contribution in #345
- @karesansui-u made their first contribution in #350
Full Changelog: v1.4.5...v1.4.6
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
v1.4.0
What's New
Language-Aware Code Intelligence Engine (#238)
A full symbol resolution engine with 3-tier resolver, Method Resolution Order (MRO), constructor/struct literal resolution, receiver-constrained disambiguation, and heritage/ownership edges across 9 languages.
- 3-tier resolver: exact FQN → scope-walk → guarded fuzzy (refuses ambiguous matches)
- MRO: C++ leftmost-base, C#/Java class-over-interface, Python C3, Rust qualified syntax
- Constructor resolution:
new Foo(),User{...}, C# primary constructors, target-typed new - Receiver-constrained: per-file TypeEnv disambiguates
user.save()vsrepo.save() - Heritage edges: HAS_METHOD, OVERRIDES, Go struct embedding, Swift extensions
- Modular architecture:
resolvers/,type-extractors/,language-config.ts, dispatch tables withRecord<SupportedLanguages, Handler>+satisfies - 178 integration resolver tests across 9 languages, 1146 total tests passing
Skill Generation (#171)
Optional AI agent skill generation from the knowledge graph via npx gitnexus analyze --skills.
C/C++/C#/Rust Language Support (#237)
Consolidated fixes from 6 community PRs — .h → C++ mapping, sibling-based modifier scanning, adaptive buffer sizing, expanded entry point patterns, call expression matching.
Other
- DeepSeek model configurations (#217)
- Skip unavailable Swift parsers (#188)
- CI/CD hardening and fork PR support (#222, #225)
Contributors
- @Alice523 — C/C++ function name extraction, nodeId stabilization (#163)
- @benny-yamagata — First-class C# support (#170)
- @jnMetaCode — C# query compilation fix (#178)
- @JasonOA888 — Adaptive tree-sitter buffer sizing (#216), DeepSeek models (#217)
- @bitgineer — C/C++/C#/Rust language support fixes (#227)
- @ex-nihilo-jg — Call expression matching in tree-sitter queries (#234)
- @Gujiassh — Swift parser skip fix (#188)
- @zander-raycraft — Skill generation feature (#171)
- @magyargergo — Symbol resolution engine, MRO, architecture refactor (#237, #238)
Full Changelog: https://github.com/abhigyanpatwari/GitNexus/blob/main/CHANGELOG.md#140---2026-03-13
v1.3.11
What's Changed
🚨 Security
- test: add integration test coverage and fix KuzuDB fork crashes by @magyargergo in #209
🚀 Features
👷 CI/CD
- ci: add macOS to cross-platform test matrix by @magyargergo in #208
Full Changelog: v1.3.10...v1.3.11
v1.3.10
Security
- MCP transport buffer cap: Added 10 MB
MAX_BUFFER_SIZElimit to prevent out-of-memory attacks via oversizedContent-Lengthheaders or unbounded newline-delimited input - Content-Length validation: Reject
Content-Lengthvalues exceeding the buffer cap before allocating memory - Stack overflow prevention: Replaced recursive
readNewlineMessagewith iterative loop to prevent stack overflow from consecutive empty lines - Ambiguous prefix hardening: Tightened
looksLikeContentLengthto require 14+ bytes before matching, preventing false framing detection on short input - Closed transport guard:
send()now rejects with a clear error when called afterclose(), with proper write-error propagation
Added
- Dual-framing MCP transport (
CompatibleStdioServerTransport): Auto-detects Content-Length and newline-delimited JSON framing on the first message, responds in the same format (#207) - Lazy CLI module loading: All CLI subcommands now use
createLazyAction()to defer heavy imports (tree-sitter, ONNX, KuzuDB) until invocation, significantly improvinggitnexus mcpstartup time (#207) - Type-safe lazy actions:
createLazyActionuses constrained generics to validate export names against module types at compile time - Regression test suite: 13 unit tests covering transport framing, security hardening, buffer limits, and lazy action loading
Fixed
- CALLS edge sourceId alignment:
findEnclosingFunctionIdnow generates IDs with:startLinesuffix matching node creation format, fixing process detector finding 0 entry points (#194) - LRU cache zero maxSize crash: Guard
createASTCacheagainstmaxSize=0when repos have no parseable files (#144)
Changed
- Transport constructor accepts
NodeJS.ReadableStream/NodeJS.WritableStream(widened from concrete types) processReadBuffersimplified to break on first error instead of stale-buffer retry loop
What's Changed
- feat: local backend mode for web UI by @paulrobello in #49
- feat(plugin): self-contained Claude Code plugin with bundled MCP, hooks, and skills by @L1nusB in #68
- feat(ui): Add a copy button to the Nexus AI and copy the md result by @CrazyBunQnQ in #75
- feat(php): full PHP 8+ / Laravel support with Eloquent model tracking by @gunesbizim in #64
- Probe for CUDA before attempting GPU embeddings by @BlockSecCA in #58
- feat: remote server connection mode and multi-repo switching by @baconwasr1ght in #66
- fix(mcp): don't crash server when no repos are indexed by @abhigyanpatwari in #96
- fix: lazy-import embeddings to avoid onnxruntime crash on Node v24+ by @abhigyanpatwari in #99
- fix: ensure exec usage does not allow poisoning by @strazzere in #61
- feat(ingestion): add AST decorator-based entrypoint hints by @PurpleNewNew in #102
- fix(web): map API path field to repoPath in fetchRepoInfo by @christopheralex-cc in #105
- feat(swift): full Swift / iOS language support with SPM import resolution by @jandyx in #94
- feat: add Kotlin language support by @magyargergo in #84
- Feat/php laravel support by @gunesbizim in #133
- feat: inline imperative instructions in CLAUDE.md/AGENTS.md by @abhigyanpatwari in #190
- chore: bump version to 1.3.7 by @abhigyanpatwari in #191
- fix(cli): force-exit after analyze to prevent KuzuDB hang by @abhigyanpatwari in #192
- chore: bump version to 1.3.8 by @abhigyanpatwari in #193
- fix(ingestion): align CALLS edge sourceId with node ID format by @abhigyanpatwari in #194
- fix: guard createASTCache against zero maxSize to prevent LRU cache crash by @magyargergo in #144
- Improve MCP startup compatibility and lazy-load CLI commands by @Shockang in #207
New Contributors
- @paulrobello made their first contribution in #49
- @L1nusB made their first contribution in #68
- @CrazyBunQnQ made their first contribution in #75
- @gunesbizim made their first contribution in #64
- @BlockSecCA made their first contribution in #58
- @baconwasr1ght made their first contribution in #66
- @strazzere made their first contribution in #61
- @PurpleNewNew made their first contribution in #102
- @christopheralex-cc made their first contribution in #105
- @jandyx made their first contribution in #94
- @magyargergo made their first contribution in #84
- @Shockang made their first contribution in #207
Full Changelog: v1.2.8...v1.3.10