Safi
a507c97822
v0.4.20: fix #414 JS imports_from path normalisation, fix #418 graph.html missing from CLI
2026-04-17 15:47:56 +01:00
Safi
8a474eb1b3
v0.4.19: fix #390 #298 #410 #401 #385 , team workflow docs, Windows/pipx tips
...
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-04-17 12:46:42 +01:00
Safi
b2523fcdec
v0.4.16: fix watch NameError, .mjs dispatch, exclude llm.py from wheel
...
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-04-16 07:01:04 +01:00
Safi
01fb51ba78
Fix 9 issues: kiro package data, betweenness perf, wiki step, opencode plugin, cache root, PHP missing edges, Windows stability, cross-file calls
...
- #352 : add skill-kiro.md to pyproject.toml package-data
- #341 : guard edge_betweenness at >5000 nodes; use approximate k=100 for suggest_questions on large graphs
- #354/#229: add Step 6b in skill.md to call to_wiki() when --wiki given (before Step 9 cleanup)
- #356 : call _install_opencode_plugin() from install --platform opencode path
- #350 : add cache_root param to extract() so subdirectory runs keep cache at ./graphify-out/cache/
- #230 : PHP class_constant_access_expression emits references_constant edges
- #232 : PHP scoped_call_expression (static method calls) emits calls edges
- #287 : os.replace fallback for Windows WinError 5; graphify update exits 1 on failure; templates use graphify update . instead of python3 -c
- #348 : cross-file call resolution for all languages via raw_calls + global label map pass in extract()
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-04-15 00:26:11 +01:00
Safi
b85184002c
v0.4.13: Verilog support, HiDPI hyperedge fix, null label guards, AGENTS.md python3 fix
...
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-04-14 09:28:01 +01:00
Safi
1fbcaf840f
release: v0.4.9 — PHP extractor improvements, Dart, diacritics, Hermes, fixes
...
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-04-13 08:39:28 +01:00
Safi
4210de270f
Fix watch edge key, claw path, Blade support, WSL MCP docs (0.4.7)
...
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-04-12 20:49:24 +01:00
Safi
d1808bab8c
fix bugs #256 , #253 , #244 , #226 , #254 and bump to 0.4.3
...
- extract.py: resolve relative JS/TS imports to full-path IDs (fixes 0 import edges on TS codebases) (#256 )
- extract.py: resolve relative Python imports to full-path IDs (#256 )
- watch.py: merge fresh AST with existing semantic nodes instead of overwriting (#253 )
- hooks.py: add python fallback after python3 for Windows; exit 0 if neither found (#244 )
- analyze.py: guard stale _src/_tgt hints with node membership check (#226 )
- detect.py + extract.py: add .vue and .svelte to CODE_EXTENSIONS and _DISPATCH (#254 )
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-04-12 12:59:15 +01:00
Safi
1cb882a156
fix bugs #211 , #216 , #217 , #222 and bump to 0.4.2
...
- extract.py: use str(path) for node IDs to prevent same-basename collision (#211 )
- build.py: normalize from/to edge keys before KeyError (#216 )
- export.py: guard ZeroDivisionError when graph has no edges (#217 )
- hooks.py: remove stale CODE_EXTS filter, rebuild on any changed file (#222 )
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-04-11 20:53:08 +01:00
Safi
cede5b6ca6
Fix #188 : collect_files() now respects .graphifyignore; fix #195 : skill.md requires general-purpose subagent type for extraction dispatch
...
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-04-10 18:41:48 +01:00
Safi
e3adc0417a
fix hook reinstall, CRLF labels, skill-windows missing commands (0.3.28)
2026-04-10 10:07:11 +01:00
Safi
95f6c104d4
Pin tree-sitter>=0.23.0, add version guard, confidence=EXTRACTED for AST calls
...
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-04-09 09:36:32 +01:00
Safi
ca842472e5
Fix AST call edges confidence: INFERRED/0.8 -> EXTRACTED/1.0 ( #127 )
...
Tree-sitter resolves call targets directly from source — marking them
INFERRED was incorrect. Cross-file class-level uses edges remain INFERRED.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-04-09 09:22:12 +01:00
Safi
7ff7bd2e8f
v0.3.17: Julia support, smarter chunking, tree-sitter pin, progress output
...
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-04-08 22:54:18 +01:00
Safi
1896379283
v0.3.16: NetworkX <3.4 compat, .jsx support, pipx follow-up fix
...
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-04-08 22:27:08 +01:00
Safi
bd24ddb1d6
fix: hook JSON format, Go pkg scoping, xcassets PDF, cross-file guard, skill file paths ( #83 , #85 , #52 , #81 )
2026-04-08 19:20:48 +01:00
Safi
a78d25d4fc
Add ObjC support, C# inheritance, CLI query, symlink support, bug fixes (v0.3.7-0.3.9)
...
- Add Objective-C extractor (.m/.mm) with @interface, @implementation, @protocol, imports, calls
- Add C# inheritance extraction via base_list nodes (inherits edges)
- Add --obsidian-dir flag to skill.md and skill-windows.md
- Add graphify query CLI command with --dfs, --budget, --graph flags
- Add follow_symlinks parameter to detect() and collect_files() with cycle detection
- Fix semantic cache relative path resolution (was saving only 4/17 files)
- Fix validate.py missing rationale file_type causing 75 warnings per run
- Add tree-sitter-objc dependency
- Update README with .m/.mm extensions, --obsidian-dir usage, Codex $ skill trigger
- 367 tests passing
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-04-07 20:20:49 +01:00
Safi
3d5da6039a
Add Elixir language support (.ex/.exs)
...
Extracts defmodule, def/defp, alias/import/require/use, and call graph.
Follows same custom-walk pattern as Zig and PowerShell extractors.
2026-04-07 12:54:12 +01:00
Safi
9d998cc810
Add Zig and PowerShell language support
2026-04-07 09:56:53 +01:00
Safi
9eda1558c2
feat: Lua language support
2026-04-06 21:59:38 +01:00
Safi
477465ae0d
feat: Swift language support
...
* feat: add Swift language support
Add tree-sitter-swift extractor for classes, structs, protocols,
functions, imports, and call graph edges. Includes 8 passing tests.
* feat: full Swift AST support — enums, extensions, actors, conformance
- Enums: extract enum types, methods, and cases (case_of edges)
- Extensions: methods attach to the original type (no duplicate nodes)
- Actors: recognized via unified class_declaration node type
- Conformance/inheritance: inherits edges from : Protocol syntax
- deinit/subscript: name resolution for nameless declarations
- 12 new tests (110 total, all passing)
2026-04-06 21:59:38 +01:00
Safi
5461feb7e8
refactor extract.py: LanguageConfig + _extract_generic replaces 10 copy-pasted extractors (2527 → 1588 lines)
2026-04-06 16:06:31 +01:00
Safi
317d73f8f7
v2: confidence scores, hyperedges, rationale extraction, git hooks, Claude Code hooks
...
- confidence_score required on every edge (INFERRED: 0.4-0.9, EXTRACTED: 1.0, AMBIGUOUS: 0.1-0.3)
- semantically_similar_to edges for non-obvious cross-file conceptual links
- hyperedges for 3+ node group relationships - fixed cache and merge pipeline that was silently dropping them
- check_semantic_cache returns 4-tuple including cached_hyperedges
- extract.py: mine the "why" - module/class/function docstrings and rationale comments (# NOTE: # IMPORTANT: # HACK: # WHY: # RATIONALE: # TODO: # FIXME:) as rationale_for nodes
- skill.md: rationale_for in relation schema, doc files extract design rationale
- obsidian output opt-in (--obsidian flag) - default output is graph.html + graph.json + GRAPH_REPORT.md only
- hooks.py: post-checkout hook added alongside post-commit - graph rebuilds on branch switch
- claude install: writes .claude/settings.json PreToolUse hook on Glob/Grep - Claude checks graph before searching raw files
- README updated with all v2 features
2026-04-06 16:06:31 +01:00
Safi
5db8f7ce39
docs: update surprising connections description, test count
...
style: replace all em dashes with hyphens
fix: explain hidden .graphify/ folder in skill output and README
fix: rename .graphify/ to graphify-out/ so output is visible by default
2026-04-06 16:06:31 +01:00
Safi
81a43f028f
feat: 13-language AST support and token benchmark
...
Java, C, C++, Ruby, C#, Kotlin, Scala, PHP via tree-sitter (13 total)
benchmark.py measures BFS subgraph tokens vs corpus tokens
5 skill bug fixes (cohesion crash, dead step, missing MCP tool)
2026-04-04 18:56:38 +01:00
Safi
41e4e3576a
security: SSRF protection, HTML escaping, path guards, encoding hardening
...
- graphify/security.py (new): centralised security module
- validate_url(): blocks file://, ftp://, data:, any non-http/https scheme
- _NoFileRedirectHandler: re-validates redirect targets, blocks file:// redirects
- safe_fetch(): streams response, 50MB hard cap, non-2xx raises, timeout
- safe_fetch_text(): safe_fetch + UTF-8 decode with errors=replace
- validate_graph_path(): resolves path, requires inside .graphify/, base must exist
- sanitize_label(): strip control chars, cap 256, html.escape() — mirrors
code-review-graph's _sanitize_name pattern
- graphify/ingest.py: _fetch_html() and _download_binary() now use safe_fetch*;
ingest() validates URL scheme and wraps network calls in try/except;
YAML frontmatter: newlines stripped from question before embedding
- graphify/extract.py: all 33 bare .decode() → .decode("utf-8", errors="replace")
— non-UTF-8 source files degrade gracefully instead of crashing extraction
- graphify/export.py: sanitize_label() on all node labels and edge titles
before pyvis embeds them in HTML output
- graphify/serve.py: _load_graph() validates graph_path via validate_graph_path()
and wraps JSONDecodeError with recovery message; sanitize_label() on MCP
text output
- graphify/detect.py: os.walk(..., followlinks=False) made explicit
- SECURITY.md (new): threat model, mitigations table, reporting process
- tests/test_security.py (new): 20 tests covering all security.py functions
2026-04-04 18:56:38 +01:00
Safi
e7a03a0539
feat: cache, multi-language extraction, MCP, memory feedback
...
call-graph INFERRED edges, multi-language semantic extraction, SHA256 cache,
MCP stdio server with shortest_path, Q&A memory feedback loop
2026-04-04 18:56:38 +01:00
Safi
ce47198be1
feat: Claude Code skill, Obsidian vault, install, tests
...
skill.md with full pipeline steps, Obsidian as default output (canvas, tags,
dataview, graph colors), two-command install, 71 tests, .gitignore, deps
2026-04-04 18:53:43 +01:00