What's new
- Gemini + OpenAI backends —
graphify extract ./docs --backend gemini (GEMINI_API_KEY / GOOGLE_API_KEY) or --backend openai (OPENAI_API_KEY); pip install graphifyy[gemini] / graphifyy[openai]
- Groovy + Spock support —
.groovy and .gradle via tree-sitter-groovy; Spock def "feature"() syntax handled via regex fallback
- Luau support —
.luau (Roblox Luau) extracted using the Lua parser
- Markdown structural extraction — headings, code blocks, and nesting hierarchy extracted as graph nodes from
.md/.mdx files (zero new deps)
collect_files() extension sync — 18 extensions (.sql, .vue, .svelte, .jsx, .ex, .jl, etc.) were silently skipped in skill-mode extraction; now auto-syncs with _DISPATCH
- TS import resolution — bare-path,
.svelte.ts, .svelte.js, index.ts directory, and multi-dot imports now resolve correctly
Bug fixes
cluster-only now loads and saves .graphify_labels.json — human labels survive re-clustering (#744)
graphify export wiki fails fast (exit 1) when .graphify_analysis.json is missing — prevents silent wiki deletion (#746)
detect_incremental forwards follow_symlinks — symlinked subtrees no longer vanish on --update (#736)
- Ollama import error now says "Ollama" and points to
pip install openai (#750)
- hooks.py path execution validates scripts are within repo root — closes supply-chain attack vector (#747)
Upgrade
uv tool upgrade graphifyy
pip install --upgrade graphifyy