Releases: safishamsi/graphify
v0.4.19
What's fixed
- #390 — AST/semantic node ID mismatch: edges were dropped when the LLM generated slightly different casing or punctuation than the AST extractor.
build_from_jsonnow normalises IDs before dropping edges. - #298 — Cross-file call resolution extended to Go, Rust, Zig, PowerShell, and Elixir. Unresolved callees are saved as
raw_callsand resolved globally in a post-pass. - #410 — Windows
graphify-out/graphify-outnesting bug.cache_dirand_rebuild_codenow call.resolve()on the root path. - #401 —
graphify hook installnow respectscore.hooksPathgit config (Husky and similar tools). - #385 — Kiro skill YAML
descriptionfield now quoted — fixes parse error in Kiro's YAML loader.
Docs
- Windows PATH tip and macOS
pipx ensurepathtip added to install section (#413) - Team workflow section: committing
graphify-out/,.graphifyignoreusage, recommended.gitignoreadditions (#369)
Upgrade
pip install --upgrade graphifyyv0.4.18 -- cross-file call resolution + semantic/AST ID fix
- Cross-file call resolution for Go, Rust, Zig, PowerShell, and Elixir (raw_calls saved and resolved globally)
- Fix semantic/AST node ID mismatch: build.py now reconciles mismatched IDs so LLM-generated edges survive the merge
- skill.md: explicit node ID generation rules with example to reduce LLM ID drift
v0.4.17 -- llm.py removed from wheel
- Move llm.py out of graphify package into scripts/ so it is not shipped in the PyPI wheel
v0.4.16 -- crash fixes
- Fix NameError: name 'sys' is not defined in graphify watch (v0.4.15 regression)
- Fix .mjs files detected but producing 0 nodes (missing _DISPATCH entry)
- Exclude llm.py from wheel
v0.4.15
What's new
- VS Code Copilot Chat —
graphify vscode installconfigures VS Code Copilot Chat with a Python-only skill (works on Windows PowerShell) and writes.github/copilot-instructions.mdfor always-on graph context (#206) - Fix: OpenCode plugin path used backslashes on Windows causing duplicate
opencode.jsonentries — fixed via.as_posix()(#378) - Fix: Gemini CLI on Windows now installs skill to
~/.agents/skills/(correct higher-priority path) instead of~/.gemini/skills/(#368) - Fix:
.mjsand.ejsfiles now recognised by the AST extractor as JavaScript (#365) - Fix:
god_nodes()return field renamededges→degreefor clarity - Fix:
graphify watchon macOS now usesPollingObserverby default to avoid missed events with FSEvents (#373)
Upgrade
pip install --upgrade graphifyyv0.4.14
What's new
Cross-file call resolution for all languages
AST extraction now emits cross-file calls edges for Swift, Go, Rust, Java, C#, Kotlin, Scala, Ruby, PHP, and every other supported language. Previously only Python had this. Unresolved call sites are saved per file and resolved against a global label map after all files are processed. Cross-file edges are marked INFERRED with confidence 0.8.
PHP static method calls and constant references
Two node types were missing from the PHP extractor. scoped_call_expression (static calls like Helper::format()) now emits calls edges. class_constant_access_expression (enum and constant references like Status::ACTIVE) now emits references_constant edges.
Wiki flag implemented
--wiki now actually runs. Step 6b added to the skill pipeline (before the cleanup step so community labels are still available). Calls to_wiki() and writes graphify-out/wiki/ with index.md and one article per community and god node.
Performance: betweenness centrality on large graphs
edge_betweenness_centrality now returns early for graphs over 5000 nodes. betweenness_centrality in suggest_questions uses k=100 approximate sampling for graphs over 1000 nodes. Eliminates hangs on large repos.
OpenCode plugin installed on both install paths
graphify install --platform opencode now also writes .opencode/plugins/graphify.js and registers it in opencode.json. Previously only graphify opencode install did this.
Cache root fix for subdirectory runs
extract() accepts an explicit cache_root parameter. When graphify narrows to a subdirectory on a large repo, the cache stays at ./graphify-out/cache/ instead of /graphify-out/cache/.
Windows stability
os.replace in the cache writer falls back to shutil.copy2 on PermissionError (WinError 5). graphify update exits with code 1 when rebuild fails instead of silently returning. All generated config files now use graphify update . instead of a hardcoded python3 invocation.
Kiro package data
skill-kiro.md was missing from pyproject.toml package-data, causing graphify kiro install to fail on fresh pip installs. Fixed.
Upgrade
pip install -U graphifyyv0.4.13
What's new
Verilog / SystemVerilog support
.vand.svfiles now extracted via tree-sitter-verilog- Extracts modules, functions, tasks, package imports, and instantiations
HiDPI hyperedge fix
- Hyperedges now render correctly on high-DPI displays (Retina, 4K)
- Fixed double-applied view transform in the afterDrawing canvas callback
Null label guards in MCP server
- Fixed crashes when nodes have null label or source_file fields in query_graph, get_neighbors, and get_node tools
AGENTS.md / GEMINI.md rebuild rule
- Replaced hardcoded python3 invocation with graphify update .
- Uses the correct interpreter (pipx, venv, system) and is properly scoped to the project subfolder
Upgrade
pip install -U graphifyyv0.4.12 — Kiro IDE/CLI support, portable cache
What's new
Kiro IDE/CLI support (#319, #321)
graphify kiro install writes:
.kiro/skills/graphify/SKILL.md— the/graphifyslash command skill.kiro/steering/graphify.md— always-on steering withinclusion: always, injected into every Kiro conversation automatically
Portable cache (#311)
file_hash() now uses the path relative to the project root instead of the absolute path. Cache entries are now portable across machines, CI runners, and different checkout directories.
Note: this is a cache-breaking change. Delete
graphify-out/cache/once after upgrading — it will be rebuilt on the next run.
pip install --upgrade graphifyy
rm -rf graphify-out/cache/ # one-time after upgradingv0.4.11 — Bug fixes: query crash, MCP CWD, .graphifyignore subfolder
Bug fixes
graphify querycrashes with ValueError on MultiGraph —G.edges[u, v]replaced withG[u][v]+ MultiGraph guard (#305)- AttributeError: 'NoneType' has no attribute 'lower' in serve.py when a node has a null
source_file(#307) - MCP server launched from a different directory now correctly derives the
graphify-outbase from the absolute path, not CWD (#309) .graphifyignorepatterns from a parent directory now fire correctly when graphify is run on a subfolder (#303)
pip install --upgrade graphifyyv0.4.10 — Dart/Flutter, Hermes, 6 new CLI commands, PHP improvements
What's new
Dart/Flutter support
.dart files extracted via regex — classes, mixins, functions, imports. graphify now supports 23 languages.
Hermes Agent platform
graphify install --platform hermes writes the skill to ~/.hermes/skills/graphify/SKILL.md.
6 new terminal CLI commands
graphify path "AuthModule" "Database" # shortest path between two nodes
graphify explain "SwinTransformer" # plain-language node explanation
graphify add https://... # fetch URL, save to ./raw, update graph
graphify watch ./src # rebuild on code changes, no LLM needed
graphify update ./src # re-extract code files only
graphify cluster-only . # rerun clustering on existing graph.jsonPHP extractor improvements
Static property access, config() helper calls, service container bindings, event listener arrays.
Other fixes
- graspologic
python_version < '3.13'marker (#290) - matplotlib declared in
[svg]extra (#288) norm_labelin graph.json for diacritic-insensitive search (#293)prune_dangling_edges()utility (#294)- cursor install crash fixed (#281)
- agents uninstall platform-aware (#276)
- Codex skill:
wait→wait_agent(#273) - Windows hook tests platform-aware (#279)
- Antigravity: YAML frontmatter injection + MCP config snippet (#268)
pip install --upgrade graphifyy