v0.9.49
NVIDIA/cosmosv0.9.49Aug 24, 2026by safishamsi
AI Summary
Adds cross-repo navigation capabilities and C# modeling features, resolving numerous issues with C/C++, Julia, and semantic extraction.
Key Highlights
- Cross-repo type linking introduces a `same_type_as` edge for shared contracts.
- C# properties now emit a member node, and object creation expressions emit `calls` edges.
- C# interface dispatch edges link methods to their single implementing class.
- Semantic result caching fixes prevent empty replies from freezing files.
New Features
- Cross-repo type linking with `same_type_as` edges.
- C# property node extraction.
- C# object creation edge emission.
- C# interface dispatch edge emission.
Full Release Notes
- Feature: `graphify merge-graphs` now links a type declaration that two repos share — same fully-qualified namespace and name, from different repos — with a `same_type_as` edge, so a shared contract type is navigable across the repo boundary; two unrelated types that merely share a short name are not linked (#3007, thanks @durmazoguzhan). - Feature: C# properties now emit a member node per property, so a property is visible as a class member alongside fields and methods; the property's type still emits its references edge and no built-in types are fabricated (#3006, thanks @durmazoguzhan). - Fix: when a C/C++/Objective-C declaration and its definition merge into one node, the node now points at the definition site (the implementation body) instead of the header prototype; the pick is deterministic regardless of file order, and a declaration with no definition keeps its own site (#2990, thanks @winesoft-namjin-yun). - Fix: a bash command substitution on the right of an assignment (`x=$(fn)`) now emits a `calls` edge like a bare `$(fn)`, while argument-position and process substitutions stay suppressed (#2978, thanks @akshitj11). - Fix: a SQL `CREATE TABLE` wrapped in a `BEGIN`/`COMMIT` transaction is now extracted, not just top-level DDL (#2953, thanks @akshitj11). - Feature: C# object-creation expressions (`new Foo()`) now emit a `calls` edge to the constructed type, so constructor usage is visible in the graph; built-in and out-of-corpus types are not fabricated and a qualified construction resolves against declared namespaces (#2997, thanks @durmazoguzhan). - Feature: when a C# interface has exactly one implementing class, its methods are now linked to that implementation with a `dispatches_to` edge, so a call through an injected dependency reaches the implementation; guarded against false links (single implementer, single case-sensitively same-named method, both ends C#) (#3003, thanks @durmazoguzhan). - Fix: Zig methods declared on enums and unions (not just structs) are now extracted, along with the calls in their bodies (#2999, thanks @rajatnagda45). - Fix: a Julia abstract type declared with a supertype (`abstract type Dog <: Animal end`) is now extracted with its `inherits` edge instead of being dropped (#3000, thanks @rajatnagda45). - Fix: a Common Lisp `defclass` whose superclass lives in another file now keeps its `inherits` edge — the cross-file base is a sourceless stub that the corpus rewire collapses onto the real definition (#3001, thanks @rajatnagda45). - Fix: PowerShell `enum` definitions and their members are now extracted as a real sourced node, so a `[Color]` type reference resolves to the enum instead of a phantom stub (#3002, thanks @rajatnagda45). - Fix: a semantic result with no nodes and no hyperedges is no longer cached and stamped into the manifest, so an empty or degenerate LLM reply for a file no longer freezes it out of future re-dispatch; an existing manifest carrying such a stamp is healed by re-queueing those files (#2927, thanks @hopstreax). - Fix: fresh semantic results are now scoped to the files actually dispatched before they reach the graph merge, so a stray fragment the model misattributes to a non-dispatched file can no longer replace that file's prior contribution (this also silences the "skipped out-of-scope source_file" warning) (#2926, thanks @SinghAman21). - Fix: `graphify extract --code-only --force` over an existing graph now preserves the document/paper/image semantic layer instead of dropping it; files deleted from disk are still pruned (#2923, thanks @santhiprakash). - Fix: a class that inherits from a built-in base (e.g. PHP `extends \Exception`) no longer collapses onto a same-named class in another language, so a PHP+TypeScript monorepo stops growing a phantom cross-language inheritance edge / god node; same-language inheritance and user classes named like a built-in still link (#2812, thanks @ousamabenyounes). - Fix: the git post-commit hook now resolves graphify when it is installed as a `uv tool`, by scanning the uv tool locations after the pin and launcher probes miss and verifying graphify is importable before adopting an interpreter, so the hook stops silently no-opping under that install (#2852, thanks @santhiprakash). - Fix: re-exporting into an Obsidian vault created before the ownership manifest existed now adopts graphify's own notes (recognized by their `graphify/` frontmatter tag or community markers) instead of orphaning them beside a fresh generation (#2863, thanks @abhay-codes07). - Fix: the tsconfig/jsconfig alias and `baseUrl` caches are now cleared per extraction run, so an edit to `compilerOptions.paths` or `baseUrl` is picked up on the next `graphify watch` / MCP rebuild instead of resolving imports through a stale alias map for the life of the process (#2917, thanks @sashankh). - Fix: the C# extractor now emits `references` edges for types used as generic arguments — both at call sites (`repo.Get<User>()`, `services.AddSingleton<IFoo, Foo>()`) and in field declarations (`private List<Order> _orders`) — so generic calls and field-injected dependencies are no longer invisible; built-in and type-parameter types are not fabricated (#2911, thanks @santhiprakash and @brobl2008). - Fix: oversized PDFs are now sliced through their text converter and their token count is estimated from the extracted text rather than the raw container, so a large paper no longer loses everything past the character cap or gets mis-sized by its binary bytes; slicing (including the adaptive-retry bisection) indexes the same extracted text the prompt carries (#2903, #2906, thanks @abhay-codes07). - Fix: every text document type is now sliced when oversized, not just five suffixes, so a large `.qmd` / `.skill` / `.html` / `.yaml` / `.yml` is no longer silently truncated at the character cap (#2900, thanks @abhay-codes07).