Skip to content

Releases: abhigyanpatwari/GitNexus

v1.4.6

18 Mar 08:55

Choose a tag to compare

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.2ReturnTypeLookup interface + ForLoopExtractorContext context object + dormant pendingCallResults infrastructure (#341)
  • Phase 7.3 — Call-expression iterable resolution for TS/JS, Java, Kotlin, C#, Go, Rust, Python, PHP (#341)
  • Phase 7.4 — PHP $this->property foreach via @var class property scan (#341)
  • Phase 7.5 — PHP function_call_expression / member_call_expression foreach (#341)
  • extractReturnTypeName deduplicated from call-processor.ts into shared.ts (137 lines removed)

Bug Fixes

New Contributors

Full Changelog: v1.4.5...v1.4.6

v1.4.5

17 Mar 17:41

Choose a tag to compare

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, Kotlin when/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->property foreach member access
    • Position-indexed branch-local narrowing for Kotlin smart casts

Performance Optimizations

  • Worker pool threshold — skip thread pool for small repos (<15 files or <512KB), saving 100–400ms
  • AST walk pruningSKIP_SUBTREE_TYPES skips leaf-only subtrees (strings, comments, literals)
  • Pre-computed interestingNodeTypes — single Set.has() replaces 3 checks per AST node
  • fastStripNullable — fast-path nullable check for simple identifiers (90%+ of lookups)
  • extractFunctionName refactor — replace .children?.find() with manual for loops to eliminate array allocations
  • skipGraphPhases pipeline 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)
  • .gitignore and .gitnexusignore support 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: 120000 in 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

🐛 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

Full Changelog: v1.4.0...v1.4.5

v1.4.0

13 Mar 13:24

Choose a tag to compare

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() vs repo.save()
  • Heritage edges: HAS_METHOD, OVERRIDES, Go struct embedding, Swift extensions
  • Modular architecture: resolvers/, type-extractors/, language-config.ts, dispatch tables with Record<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

Full Changelog: https://github.com/abhigyanpatwari/GitNexus/blob/main/CHANGELOG.md#140---2026-03-13

v1.3.11

08 Mar 18:27

Choose a tag to compare

What's Changed

🚨 Security

  • test: add integration test coverage and fix KuzuDB fork crashes by @magyargergo in #209

🚀 Features

  • feat(hooks): auto-reindex after git commit with embeddings preservation by @L1nusB in #205

👷 CI/CD

Full Changelog: v1.3.10...v1.3.11

v1.3.10

07 Mar 08:05

Choose a tag to compare

Security

  • MCP transport buffer cap: Added 10 MB MAX_BUFFER_SIZE limit to prevent out-of-memory attacks via oversized Content-Length headers or unbounded newline-delimited input
  • Content-Length validation: Reject Content-Length values exceeding the buffer cap before allocating memory
  • Stack overflow prevention: Replaced recursive readNewlineMessage with iterative loop to prevent stack overflow from consecutive empty lines
  • Ambiguous prefix hardening: Tightened looksLikeContentLength to require 14+ bytes before matching, preventing false framing detection on short input
  • Closed transport guard: send() now rejects with a clear error when called after close(), 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 improving gitnexus mcp startup time (#207)
  • Type-safe lazy actions: createLazyAction uses 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: findEnclosingFunctionId now generates IDs with :startLine suffix matching node creation format, fixing process detector finding 0 entry points (#194)
  • LRU cache zero maxSize crash: Guard createASTCache against maxSize=0 when repos have no parseable files (#144)

Changed

  • Transport constructor accepts NodeJS.ReadableStream / NodeJS.WritableStream (widened from concrete types)
  • processReadBuffer simplified to break on first error instead of stale-buffer retry loop

What's Changed

New Contributors

Full Changelog: v1.2.8...v1.3.10