v0.8.38
gravitational/teleportv0.8.38Jun 11, 2026by safishamsi
AI Summary
Graphifyy v0.8.38 corrects LLM edge directionality, improves TypeScript import resolution, and adds Rust support.
Key Highlights
- Fixed LLM `calls` edges direction and precision.
- Fixed TypeScript default imports/exports to produce symbol-level edges.
- Added Cargo workspace dependency extraction.
New Features
- Cargo workspace dependency extraction
Full Release Notes
## What's changed **13 fixes and improvements merged in this release.** ### Correctness - **Fix: LLM `calls` edges now have correct direction.** The extraction prompt never stated source = caller / target = callee — the LLM systematically emitted callee→caller. Explicit direction rule added to prompt. Ghost-node merge extended to collapse LLM bare-stem duplicates onto AST canonical nodes even when the LLM node has a `source_location`. Post-fix annotation: `calls` precision 100% (n=6), overall INFERRED precision 94% (n=16). - **Fix: JS/TS default imports/exports now produce symbol-level edges.** `export default class Foo` imported as `import Foo from './foo'` previously got only a file→file edge. The class node now receives a proper `imports` edge and call resolution through renamed bindings works correctly. - **Fix: tsconfig `paths` aliases resolved relative to `baseUrl`.** NestJS, monorepo, and similar layouts using `baseUrl: "./src"` now resolve `@/*` aliases correctly. - **Fix: dedup pass 2 picks winner only from the verified pair.** Unrelated same-named nodes from different files were being dragged into merges and supplanting the correct winner. - **Fix: global-graph edges rewired to deduplicated external nodes.** Dangling edge references after external node dedup are now remapped before insertion. - **Fix: ghost-merge skips ambiguous `(basename, label)` keys.** Two same-named symbols in different files (e.g. two `render` functions) no longer get mis-merged. - **Fix: `resolve_seed` matches bare names against callable-decorated labels.** A query for `render` now finds nodes labelled `.render()`. ### Performance - **Fix: `collect_files` is now a single pruned `os.walk`.** Replaces ~85 redundant `rglob` passes; noise directories are pruned before descent. ### Cache - **Fix: AST cache namespaced by graphify version.** Stale cache from previous releases no longer silently produces wrong output after upgrade. - **Fix: extraction cache anchored at `--out` root.** `graphify extract ./src --out /tmp/out` no longer leaks `graphify-out/` into the scanned project. - **Fix: frontmatter delimiter requires whole `---` line.** Thematic breaks (`----`) and YAML title lines (`--- title: foo`) no longer trigger false frontmatter parsing. ### Platform - **Fix: `claude-cli` spawns `claude.cmd` on Windows headless installs.** Adds `CREATE_NO_WINDOW` to both subprocess spawn sites. - **Fix: `claude-cli` handles JSON-array envelope from Claude Code CLI ≥ 2.1.** ### Features - **Feat: Cargo workspace dependency extraction.** `graphify extract ./my-workspace --cargo` maps Rust workspace crates and internal `crate_depends_on` edges. - **Fix: SystemVerilog class-level extraction improved.** Dart `with MyMixin` now correctly emits `mixes_in` (not `implements`). ### Docs - README grammar count updated: 28 → 36 tree-sitter grammars. --- Install: `uv tool install graphifyy` · [PyPI](https://pypi.org/project/graphifyy/0.8.38/) · [CHANGELOG](https://github.com/safishamsi/graphify/blob/v8/CHANGELOG.md)