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)