graphifyy 0.9.76__tar.gz → 0.9.78__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {graphifyy-0.9.76/graphifyy.egg-info → graphifyy-0.9.78}/PKG-INFO +18 -1
- {graphifyy-0.9.76 → graphifyy-0.9.78}/README.md +17 -0
- {graphifyy-0.9.76 → graphifyy-0.9.78}/graphify/analyze.py +26 -11
- {graphifyy-0.9.76 → graphifyy-0.9.78}/graphify/build.py +8 -2
- {graphifyy-0.9.76 → graphifyy-0.9.78}/graphify/cli.py +8 -0
- {graphifyy-0.9.76 → graphifyy-0.9.78}/graphify/detect.py +49 -13
- {graphifyy-0.9.76 → graphifyy-0.9.78}/graphify/export.py +21 -0
- {graphifyy-0.9.76 → graphifyy-0.9.78}/graphify/exporters/graphdb.py +3 -3
- {graphifyy-0.9.76 → graphifyy-0.9.78}/graphify/extract.py +120 -27
- {graphifyy-0.9.76 → graphifyy-0.9.78}/graphify/extractors/apex.py +2 -2
- {graphifyy-0.9.76 → graphifyy-0.9.78}/graphify/extractors/base.py +68 -0
- {graphifyy-0.9.76 → graphifyy-0.9.78}/graphify/extractors/bash.py +2 -2
- {graphifyy-0.9.76 → graphifyy-0.9.78}/graphify/extractors/blade.py +2 -2
- {graphifyy-0.9.76 → graphifyy-0.9.78}/graphify/extractors/cobol.py +2 -2
- {graphifyy-0.9.76 → graphifyy-0.9.78}/graphify/extractors/commonlisp.py +2 -2
- {graphifyy-0.9.76 → graphifyy-0.9.78}/graphify/extractors/dart.py +2 -2
- {graphifyy-0.9.76 → graphifyy-0.9.78}/graphify/extractors/dm.py +19 -6
- {graphifyy-0.9.76 → graphifyy-0.9.78}/graphify/extractors/elixir.py +7 -2
- {graphifyy-0.9.76 → graphifyy-0.9.78}/graphify/extractors/engine.py +165 -10
- {graphifyy-0.9.76 → graphifyy-0.9.78}/graphify/extractors/erlang.py +2 -2
- {graphifyy-0.9.76 → graphifyy-0.9.78}/graphify/extractors/fortran.py +3 -3
- {graphifyy-0.9.76 → graphifyy-0.9.78}/graphify/extractors/go.py +8 -2
- {graphifyy-0.9.76 → graphifyy-0.9.78}/graphify/extractors/julia.py +2 -2
- {graphifyy-0.9.76 → graphifyy-0.9.78}/graphify/extractors/markdown.py +2 -2
- {graphifyy-0.9.76 → graphifyy-0.9.78}/graphify/extractors/objc.py +62 -2
- {graphifyy-0.9.76 → graphifyy-0.9.78}/graphify/extractors/ocaml.py +2 -2
- {graphifyy-0.9.76 → graphifyy-0.9.78}/graphify/extractors/pascal.py +3 -3
- {graphifyy-0.9.76 → graphifyy-0.9.78}/graphify/extractors/pascal_forms.py +2 -2
- {graphifyy-0.9.76 → graphifyy-0.9.78}/graphify/extractors/powershell.py +70 -11
- {graphifyy-0.9.76 → graphifyy-0.9.78}/graphify/extractors/r.py +17 -5
- {graphifyy-0.9.76 → graphifyy-0.9.78}/graphify/extractors/razor.py +2 -2
- {graphifyy-0.9.76 → graphifyy-0.9.78}/graphify/extractors/resolution.py +8 -6
- {graphifyy-0.9.76 → graphifyy-0.9.78}/graphify/extractors/rust.py +12 -2
- {graphifyy-0.9.76 → graphifyy-0.9.78}/graphify/extractors/sln.py +2 -2
- {graphifyy-0.9.76 → graphifyy-0.9.78}/graphify/extractors/solidity.py +9 -3
- {graphifyy-0.9.76 → graphifyy-0.9.78}/graphify/extractors/sql.py +25 -2
- {graphifyy-0.9.76 → graphifyy-0.9.78}/graphify/extractors/terraform.py +2 -2
- {graphifyy-0.9.76 → graphifyy-0.9.78}/graphify/extractors/vbnet.py +2 -2
- {graphifyy-0.9.76 → graphifyy-0.9.78}/graphify/extractors/verilog.py +2 -2
- {graphifyy-0.9.76 → graphifyy-0.9.78}/graphify/extractors/zig.py +2 -2
- {graphifyy-0.9.76 → graphifyy-0.9.78}/graphify/file_slice.py +6 -4
- {graphifyy-0.9.76 → graphifyy-0.9.78}/graphify/llm.py +3 -2
- {graphifyy-0.9.76 → graphifyy-0.9.78}/graphify/paths.py +21 -0
- {graphifyy-0.9.76 → graphifyy-0.9.78}/graphify/skill-agents.md +5 -1
- {graphifyy-0.9.76 → graphifyy-0.9.78}/graphify/skill-aider.md +2 -2
- {graphifyy-0.9.76 → graphifyy-0.9.78}/graphify/skill-amp.md +5 -1
- {graphifyy-0.9.76 → graphifyy-0.9.78}/graphify/skill-claw.md +5 -1
- {graphifyy-0.9.76 → graphifyy-0.9.78}/graphify/skill-codex.md +5 -1
- {graphifyy-0.9.76 → graphifyy-0.9.78}/graphify/skill-copilot.md +5 -1
- {graphifyy-0.9.76 → graphifyy-0.9.78}/graphify/skill-devin.md +2 -2
- {graphifyy-0.9.76 → graphifyy-0.9.78}/graphify/skill-droid.md +5 -1
- {graphifyy-0.9.76 → graphifyy-0.9.78}/graphify/skill-kilo.md +5 -1
- {graphifyy-0.9.76 → graphifyy-0.9.78}/graphify/skill-kiro.md +5 -1
- {graphifyy-0.9.76 → graphifyy-0.9.78}/graphify/skill-opencode.md +5 -1
- {graphifyy-0.9.76 → graphifyy-0.9.78}/graphify/skill-pi.md +5 -1
- {graphifyy-0.9.76 → graphifyy-0.9.78}/graphify/skill-trae.md +5 -1
- {graphifyy-0.9.76 → graphifyy-0.9.78}/graphify/skill-vscode.md +5 -1
- {graphifyy-0.9.76 → graphifyy-0.9.78}/graphify/skill-windows.md +5 -1
- {graphifyy-0.9.76 → graphifyy-0.9.78}/graphify/skill.md +5 -1
- {graphifyy-0.9.76/graphify/skills/claude → graphifyy-0.9.78/graphify/skills/agents}/references/update.md +2 -2
- {graphifyy-0.9.76/graphify/skills/agents → graphifyy-0.9.78/graphify/skills/amp}/references/update.md +2 -2
- {graphifyy-0.9.76/graphify/skills/claw → graphifyy-0.9.78/graphify/skills/claude}/references/update.md +2 -2
- {graphifyy-0.9.76/graphify/skills/amp → graphifyy-0.9.78/graphify/skills/claw}/references/update.md +2 -2
- graphifyy-0.9.78/graphify/skills/codex/references/update.md +210 -0
- graphifyy-0.9.78/graphify/skills/copilot/references/update.md +210 -0
- graphifyy-0.9.78/graphify/skills/droid/references/update.md +210 -0
- graphifyy-0.9.78/graphify/skills/kilo/references/update.md +210 -0
- graphifyy-0.9.78/graphify/skills/kiro/references/update.md +210 -0
- graphifyy-0.9.78/graphify/skills/opencode/references/update.md +210 -0
- graphifyy-0.9.78/graphify/skills/pi/references/update.md +210 -0
- graphifyy-0.9.78/graphify/skills/trae/references/update.md +210 -0
- graphifyy-0.9.78/graphify/skills/vscode/references/update.md +210 -0
- graphifyy-0.9.78/graphify/skills/windows/references/update.md +210 -0
- {graphifyy-0.9.76 → graphifyy-0.9.78}/graphify/symbol_resolution.py +2 -1
- {graphifyy-0.9.76 → graphifyy-0.9.78}/graphify/watch.py +113 -1
- {graphifyy-0.9.76 → graphifyy-0.9.78/graphifyy.egg-info}/PKG-INFO +18 -1
- {graphifyy-0.9.76 → graphifyy-0.9.78}/graphifyy.egg-info/SOURCES.txt +8 -0
- {graphifyy-0.9.76 → graphifyy-0.9.78}/pyproject.toml +1 -1
- {graphifyy-0.9.76 → graphifyy-0.9.78}/tests/test_analyze.py +33 -0
- {graphifyy-0.9.76 → graphifyy-0.9.78}/tests/test_astro_extraction.py +29 -0
- graphifyy-0.9.78/tests/test_build_located_semantic_identity.py +88 -0
- {graphifyy-0.9.76 → graphifyy-0.9.78}/tests/test_cpp_nested_and_cli.py +99 -0
- {graphifyy-0.9.76 → graphifyy-0.9.78}/tests/test_csharp_member_calls.py +65 -0
- {graphifyy-0.9.76 → graphifyy-0.9.78}/tests/test_csharp_type_resolution.py +54 -0
- {graphifyy-0.9.76 → graphifyy-0.9.78}/tests/test_detect.py +61 -0
- {graphifyy-0.9.76 → graphifyy-0.9.78}/tests/test_export.py +12 -0
- graphifyy-0.9.78/tests/test_export_direction.py +191 -0
- {graphifyy-0.9.76 → graphifyy-0.9.78}/tests/test_extract.py +122 -6
- graphifyy-0.9.78/tests/test_incremental_unscanned_placeholders.py +126 -0
- {graphifyy-0.9.76 → graphifyy-0.9.78}/tests/test_js_import_resolution.py +31 -0
- {graphifyy-0.9.76 → graphifyy-0.9.78}/tests/test_kotlin_grammar.py +23 -0
- {graphifyy-0.9.76 → graphifyy-0.9.78}/tests/test_languages.py +243 -4
- {graphifyy-0.9.76 → graphifyy-0.9.78}/tests/test_merge_graphs_cli.py +28 -0
- {graphifyy-0.9.76 → graphifyy-0.9.78}/tests/test_multilang.py +51 -0
- graphifyy-0.9.78/tests/test_objc_enum_declarations.py +85 -0
- {graphifyy-0.9.76 → graphifyy-0.9.78}/tests/test_partial_extraction_warning.py +19 -0
- {graphifyy-0.9.76 → graphifyy-0.9.78}/tests/test_pascal.py +34 -0
- {graphifyy-0.9.76 → graphifyy-0.9.78}/tests/test_php_language_construct_calls.py +97 -0
- {graphifyy-0.9.76 → graphifyy-0.9.78}/tests/test_python_import_resolution.py +25 -0
- {graphifyy-0.9.76 → graphifyy-0.9.78}/tests/test_r_extractor.py +91 -0
- graphifyy-0.9.78/tests/test_rust_anonymous_const.py +24 -0
- {graphifyy-0.9.76 → graphifyy-0.9.78}/tests/test_scala_context_bounds.py +91 -0
- graphifyy-0.9.78/tests/test_skill_semantic_all_cached.py +92 -0
- {graphifyy-0.9.76 → graphifyy-0.9.78}/tests/test_solidity_extractor.py +34 -0
- graphifyy-0.9.78/tests/test_source_file_encoding.py +259 -0
- graphifyy-0.9.78/tests/test_watch_identity_cache.py +59 -0
- graphifyy-0.9.76/graphify/skills/codex/references/update.md +0 -210
- graphifyy-0.9.76/graphify/skills/copilot/references/update.md +0 -210
- graphifyy-0.9.76/graphify/skills/droid/references/update.md +0 -210
- graphifyy-0.9.76/graphify/skills/kilo/references/update.md +0 -210
- graphifyy-0.9.76/graphify/skills/kiro/references/update.md +0 -210
- graphifyy-0.9.76/graphify/skills/opencode/references/update.md +0 -210
- graphifyy-0.9.76/graphify/skills/pi/references/update.md +0 -210
- graphifyy-0.9.76/graphify/skills/trae/references/update.md +0 -210
- graphifyy-0.9.76/graphify/skills/vscode/references/update.md +0 -210
- graphifyy-0.9.76/graphify/skills/windows/references/update.md +0 -210
- {graphifyy-0.9.76 → graphifyy-0.9.78}/LICENSE +0 -0
- {graphifyy-0.9.76 → graphifyy-0.9.78}/LICENSE-MIT +0 -0
- {graphifyy-0.9.76 → graphifyy-0.9.78}/NOTICE +0 -0
- {graphifyy-0.9.76 → graphifyy-0.9.78}/graphify/__init__.py +0 -0
- {graphifyy-0.9.76 → graphifyy-0.9.78}/graphify/__main__.py +0 -0
- {graphifyy-0.9.76 → graphifyy-0.9.78}/graphify/_minhash.py +0 -0
- {graphifyy-0.9.76 → graphifyy-0.9.78}/graphify/affected.py +0 -0
- {graphifyy-0.9.76 → graphifyy-0.9.78}/graphify/always_on/agents-md.md +0 -0
- {graphifyy-0.9.76 → graphifyy-0.9.78}/graphify/always_on/antigravity-rules.md +0 -0
- {graphifyy-0.9.76 → graphifyy-0.9.78}/graphify/always_on/claude-md.md +0 -0
- {graphifyy-0.9.76 → graphifyy-0.9.78}/graphify/always_on/gemini-md.md +0 -0
- {graphifyy-0.9.76 → graphifyy-0.9.78}/graphify/always_on/kiro-steering.md +0 -0
- {graphifyy-0.9.76 → graphifyy-0.9.78}/graphify/always_on/vscode-instructions.md +0 -0
- {graphifyy-0.9.76 → graphifyy-0.9.78}/graphify/benchmark.py +0 -0
- {graphifyy-0.9.76 → graphifyy-0.9.78}/graphify/cache.py +0 -0
- {graphifyy-0.9.76 → graphifyy-0.9.78}/graphify/callflow_html.py +0 -0
- {graphifyy-0.9.76 → graphifyy-0.9.78}/graphify/cargo_introspect.py +0 -0
- {graphifyy-0.9.76 → graphifyy-0.9.78}/graphify/cluster.py +0 -0
- {graphifyy-0.9.76 → graphifyy-0.9.78}/graphify/command-kilo.md +0 -0
- {graphifyy-0.9.76 → graphifyy-0.9.78}/graphify/cross_repo_calls.py +0 -0
- {graphifyy-0.9.76 → graphifyy-0.9.78}/graphify/cross_repo_types.py +0 -0
- {graphifyy-0.9.76 → graphifyy-0.9.78}/graphify/csharp_dispatch.py +0 -0
- {graphifyy-0.9.76 → graphifyy-0.9.78}/graphify/dedup.py +0 -0
- {graphifyy-0.9.76 → graphifyy-0.9.78}/graphify/diagnostics.py +0 -0
- {graphifyy-0.9.76 → graphifyy-0.9.78}/graphify/exporters/__init__.py +0 -0
- {graphifyy-0.9.76 → graphifyy-0.9.78}/graphify/exporters/base.py +0 -0
- {graphifyy-0.9.76 → graphifyy-0.9.78}/graphify/exporters/html.py +0 -0
- {graphifyy-0.9.76 → graphifyy-0.9.78}/graphify/extractors/__init__.py +0 -0
- {graphifyy-0.9.76 → graphifyy-0.9.78}/graphify/extractors/csharp.py +0 -0
- {graphifyy-0.9.76 → graphifyy-0.9.78}/graphify/extractors/json_config.py +0 -0
- {graphifyy-0.9.76 → graphifyy-0.9.78}/graphify/extractors/models.py +0 -0
- {graphifyy-0.9.76 → graphifyy-0.9.78}/graphify/extractors/robot.py +0 -0
- {graphifyy-0.9.76 → graphifyy-0.9.78}/graphify/global_graph.py +0 -0
- {graphifyy-0.9.76 → graphifyy-0.9.78}/graphify/google_workspace.py +0 -0
- {graphifyy-0.9.76 → graphifyy-0.9.78}/graphify/hooks.py +0 -0
- {graphifyy-0.9.76 → graphifyy-0.9.78}/graphify/ids.py +0 -0
- {graphifyy-0.9.76 → graphifyy-0.9.78}/graphify/ingest.py +0 -0
- {graphifyy-0.9.76 → graphifyy-0.9.78}/graphify/install.py +0 -0
- {graphifyy-0.9.76 → graphifyy-0.9.78}/graphify/interface_dispatch.py +0 -0
- {graphifyy-0.9.76 → graphifyy-0.9.78}/graphify/manifest.py +0 -0
- {graphifyy-0.9.76 → graphifyy-0.9.78}/graphify/manifest_ingest.py +0 -0
- {graphifyy-0.9.76 → graphifyy-0.9.78}/graphify/markdown_resolution.py +0 -0
- {graphifyy-0.9.76 → graphifyy-0.9.78}/graphify/mcp_ingest.py +0 -0
- {graphifyy-0.9.76 → graphifyy-0.9.78}/graphify/multigraph_compat.py +0 -0
- {graphifyy-0.9.76 → graphifyy-0.9.78}/graphify/pascal_resolution.py +0 -0
- {graphifyy-0.9.76 → graphifyy-0.9.78}/graphify/pg_introspect.py +0 -0
- {graphifyy-0.9.76 → graphifyy-0.9.78}/graphify/prs.py +0 -0
- {graphifyy-0.9.76 → graphifyy-0.9.78}/graphify/querylog.py +0 -0
- {graphifyy-0.9.76 → graphifyy-0.9.78}/graphify/reflect.py +0 -0
- {graphifyy-0.9.76 → graphifyy-0.9.78}/graphify/report.py +0 -0
- {graphifyy-0.9.76 → graphifyy-0.9.78}/graphify/resolver_registry.py +0 -0
- {graphifyy-0.9.76 → graphifyy-0.9.78}/graphify/ruby_resolution.py +0 -0
- {graphifyy-0.9.76 → graphifyy-0.9.78}/graphify/scip_ingest.py +0 -0
- {graphifyy-0.9.76 → graphifyy-0.9.78}/graphify/security.py +0 -0
- {graphifyy-0.9.76 → graphifyy-0.9.78}/graphify/semantic_cleanup.py +0 -0
- {graphifyy-0.9.76 → graphifyy-0.9.78}/graphify/serve.py +0 -0
- {graphifyy-0.9.76 → graphifyy-0.9.78}/graphify/skills/agents/references/add-watch.md +0 -0
- {graphifyy-0.9.76 → graphifyy-0.9.78}/graphify/skills/agents/references/exports.md +0 -0
- {graphifyy-0.9.76 → graphifyy-0.9.78}/graphify/skills/agents/references/extraction-spec.md +0 -0
- {graphifyy-0.9.76 → graphifyy-0.9.78}/graphify/skills/agents/references/github-and-merge.md +0 -0
- {graphifyy-0.9.76 → graphifyy-0.9.78}/graphify/skills/agents/references/hooks.md +0 -0
- {graphifyy-0.9.76 → graphifyy-0.9.78}/graphify/skills/agents/references/query.md +0 -0
- {graphifyy-0.9.76 → graphifyy-0.9.78}/graphify/skills/agents/references/transcribe.md +0 -0
- {graphifyy-0.9.76 → graphifyy-0.9.78}/graphify/skills/amp/references/add-watch.md +0 -0
- {graphifyy-0.9.76 → graphifyy-0.9.78}/graphify/skills/amp/references/exports.md +0 -0
- {graphifyy-0.9.76 → graphifyy-0.9.78}/graphify/skills/amp/references/extraction-spec.md +0 -0
- {graphifyy-0.9.76 → graphifyy-0.9.78}/graphify/skills/amp/references/github-and-merge.md +0 -0
- {graphifyy-0.9.76 → graphifyy-0.9.78}/graphify/skills/amp/references/hooks.md +0 -0
- {graphifyy-0.9.76 → graphifyy-0.9.78}/graphify/skills/amp/references/query.md +0 -0
- {graphifyy-0.9.76 → graphifyy-0.9.78}/graphify/skills/amp/references/transcribe.md +0 -0
- {graphifyy-0.9.76 → graphifyy-0.9.78}/graphify/skills/claude/references/add-watch.md +0 -0
- {graphifyy-0.9.76 → graphifyy-0.9.78}/graphify/skills/claude/references/exports.md +0 -0
- {graphifyy-0.9.76 → graphifyy-0.9.78}/graphify/skills/claude/references/extraction-spec.md +0 -0
- {graphifyy-0.9.76 → graphifyy-0.9.78}/graphify/skills/claude/references/github-and-merge.md +0 -0
- {graphifyy-0.9.76 → graphifyy-0.9.78}/graphify/skills/claude/references/hooks.md +0 -0
- {graphifyy-0.9.76 → graphifyy-0.9.78}/graphify/skills/claude/references/query.md +0 -0
- {graphifyy-0.9.76 → graphifyy-0.9.78}/graphify/skills/claude/references/transcribe.md +0 -0
- {graphifyy-0.9.76 → graphifyy-0.9.78}/graphify/skills/claw/references/add-watch.md +0 -0
- {graphifyy-0.9.76 → graphifyy-0.9.78}/graphify/skills/claw/references/exports.md +0 -0
- {graphifyy-0.9.76 → graphifyy-0.9.78}/graphify/skills/claw/references/extraction-spec.md +0 -0
- {graphifyy-0.9.76 → graphifyy-0.9.78}/graphify/skills/claw/references/github-and-merge.md +0 -0
- {graphifyy-0.9.76 → graphifyy-0.9.78}/graphify/skills/claw/references/hooks.md +0 -0
- {graphifyy-0.9.76 → graphifyy-0.9.78}/graphify/skills/claw/references/query.md +0 -0
- {graphifyy-0.9.76 → graphifyy-0.9.78}/graphify/skills/claw/references/transcribe.md +0 -0
- {graphifyy-0.9.76 → graphifyy-0.9.78}/graphify/skills/codex/references/add-watch.md +0 -0
- {graphifyy-0.9.76 → graphifyy-0.9.78}/graphify/skills/codex/references/exports.md +0 -0
- {graphifyy-0.9.76 → graphifyy-0.9.78}/graphify/skills/codex/references/extraction-spec.md +0 -0
- {graphifyy-0.9.76 → graphifyy-0.9.78}/graphify/skills/codex/references/github-and-merge.md +0 -0
- {graphifyy-0.9.76 → graphifyy-0.9.78}/graphify/skills/codex/references/hooks.md +0 -0
- {graphifyy-0.9.76 → graphifyy-0.9.78}/graphify/skills/codex/references/query.md +0 -0
- {graphifyy-0.9.76 → graphifyy-0.9.78}/graphify/skills/codex/references/transcribe.md +0 -0
- {graphifyy-0.9.76 → graphifyy-0.9.78}/graphify/skills/copilot/references/add-watch.md +0 -0
- {graphifyy-0.9.76 → graphifyy-0.9.78}/graphify/skills/copilot/references/exports.md +0 -0
- {graphifyy-0.9.76 → graphifyy-0.9.78}/graphify/skills/copilot/references/extraction-spec.md +0 -0
- {graphifyy-0.9.76 → graphifyy-0.9.78}/graphify/skills/copilot/references/github-and-merge.md +0 -0
- {graphifyy-0.9.76 → graphifyy-0.9.78}/graphify/skills/copilot/references/hooks.md +0 -0
- {graphifyy-0.9.76 → graphifyy-0.9.78}/graphify/skills/copilot/references/query.md +0 -0
- {graphifyy-0.9.76 → graphifyy-0.9.78}/graphify/skills/copilot/references/transcribe.md +0 -0
- {graphifyy-0.9.76 → graphifyy-0.9.78}/graphify/skills/droid/references/add-watch.md +0 -0
- {graphifyy-0.9.76 → graphifyy-0.9.78}/graphify/skills/droid/references/exports.md +0 -0
- {graphifyy-0.9.76 → graphifyy-0.9.78}/graphify/skills/droid/references/extraction-spec.md +0 -0
- {graphifyy-0.9.76 → graphifyy-0.9.78}/graphify/skills/droid/references/github-and-merge.md +0 -0
- {graphifyy-0.9.76 → graphifyy-0.9.78}/graphify/skills/droid/references/hooks.md +0 -0
- {graphifyy-0.9.76 → graphifyy-0.9.78}/graphify/skills/droid/references/query.md +0 -0
- {graphifyy-0.9.76 → graphifyy-0.9.78}/graphify/skills/droid/references/transcribe.md +0 -0
- {graphifyy-0.9.76 → graphifyy-0.9.78}/graphify/skills/kilo/references/add-watch.md +0 -0
- {graphifyy-0.9.76 → graphifyy-0.9.78}/graphify/skills/kilo/references/exports.md +0 -0
- {graphifyy-0.9.76 → graphifyy-0.9.78}/graphify/skills/kilo/references/extraction-spec.md +0 -0
- {graphifyy-0.9.76 → graphifyy-0.9.78}/graphify/skills/kilo/references/github-and-merge.md +0 -0
- {graphifyy-0.9.76 → graphifyy-0.9.78}/graphify/skills/kilo/references/hooks.md +0 -0
- {graphifyy-0.9.76 → graphifyy-0.9.78}/graphify/skills/kilo/references/query.md +0 -0
- {graphifyy-0.9.76 → graphifyy-0.9.78}/graphify/skills/kilo/references/transcribe.md +0 -0
- {graphifyy-0.9.76 → graphifyy-0.9.78}/graphify/skills/kiro/references/add-watch.md +0 -0
- {graphifyy-0.9.76 → graphifyy-0.9.78}/graphify/skills/kiro/references/exports.md +0 -0
- {graphifyy-0.9.76 → graphifyy-0.9.78}/graphify/skills/kiro/references/extraction-spec.md +0 -0
- {graphifyy-0.9.76 → graphifyy-0.9.78}/graphify/skills/kiro/references/github-and-merge.md +0 -0
- {graphifyy-0.9.76 → graphifyy-0.9.78}/graphify/skills/kiro/references/hooks.md +0 -0
- {graphifyy-0.9.76 → graphifyy-0.9.78}/graphify/skills/kiro/references/query.md +0 -0
- {graphifyy-0.9.76 → graphifyy-0.9.78}/graphify/skills/kiro/references/transcribe.md +0 -0
- {graphifyy-0.9.76 → graphifyy-0.9.78}/graphify/skills/opencode/references/add-watch.md +0 -0
- {graphifyy-0.9.76 → graphifyy-0.9.78}/graphify/skills/opencode/references/exports.md +0 -0
- {graphifyy-0.9.76 → graphifyy-0.9.78}/graphify/skills/opencode/references/extraction-spec.md +0 -0
- {graphifyy-0.9.76 → graphifyy-0.9.78}/graphify/skills/opencode/references/github-and-merge.md +0 -0
- {graphifyy-0.9.76 → graphifyy-0.9.78}/graphify/skills/opencode/references/hooks.md +0 -0
- {graphifyy-0.9.76 → graphifyy-0.9.78}/graphify/skills/opencode/references/query.md +0 -0
- {graphifyy-0.9.76 → graphifyy-0.9.78}/graphify/skills/opencode/references/transcribe.md +0 -0
- {graphifyy-0.9.76 → graphifyy-0.9.78}/graphify/skills/pi/references/add-watch.md +0 -0
- {graphifyy-0.9.76 → graphifyy-0.9.78}/graphify/skills/pi/references/exports.md +0 -0
- {graphifyy-0.9.76 → graphifyy-0.9.78}/graphify/skills/pi/references/extraction-spec.md +0 -0
- {graphifyy-0.9.76 → graphifyy-0.9.78}/graphify/skills/pi/references/github-and-merge.md +0 -0
- {graphifyy-0.9.76 → graphifyy-0.9.78}/graphify/skills/pi/references/hooks.md +0 -0
- {graphifyy-0.9.76 → graphifyy-0.9.78}/graphify/skills/pi/references/query.md +0 -0
- {graphifyy-0.9.76 → graphifyy-0.9.78}/graphify/skills/pi/references/transcribe.md +0 -0
- {graphifyy-0.9.76 → graphifyy-0.9.78}/graphify/skills/trae/references/add-watch.md +0 -0
- {graphifyy-0.9.76 → graphifyy-0.9.78}/graphify/skills/trae/references/exports.md +0 -0
- {graphifyy-0.9.76 → graphifyy-0.9.78}/graphify/skills/trae/references/extraction-spec.md +0 -0
- {graphifyy-0.9.76 → graphifyy-0.9.78}/graphify/skills/trae/references/github-and-merge.md +0 -0
- {graphifyy-0.9.76 → graphifyy-0.9.78}/graphify/skills/trae/references/hooks.md +0 -0
- {graphifyy-0.9.76 → graphifyy-0.9.78}/graphify/skills/trae/references/query.md +0 -0
- {graphifyy-0.9.76 → graphifyy-0.9.78}/graphify/skills/trae/references/transcribe.md +0 -0
- {graphifyy-0.9.76 → graphifyy-0.9.78}/graphify/skills/vscode/references/add-watch.md +0 -0
- {graphifyy-0.9.76 → graphifyy-0.9.78}/graphify/skills/vscode/references/exports.md +0 -0
- {graphifyy-0.9.76 → graphifyy-0.9.78}/graphify/skills/vscode/references/extraction-spec.md +0 -0
- {graphifyy-0.9.76 → graphifyy-0.9.78}/graphify/skills/vscode/references/github-and-merge.md +0 -0
- {graphifyy-0.9.76 → graphifyy-0.9.78}/graphify/skills/vscode/references/hooks.md +0 -0
- {graphifyy-0.9.76 → graphifyy-0.9.78}/graphify/skills/vscode/references/query.md +0 -0
- {graphifyy-0.9.76 → graphifyy-0.9.78}/graphify/skills/vscode/references/transcribe.md +0 -0
- {graphifyy-0.9.76 → graphifyy-0.9.78}/graphify/skills/windows/references/add-watch.md +0 -0
- {graphifyy-0.9.76 → graphifyy-0.9.78}/graphify/skills/windows/references/exports.md +0 -0
- {graphifyy-0.9.76 → graphifyy-0.9.78}/graphify/skills/windows/references/extraction-spec.md +0 -0
- {graphifyy-0.9.76 → graphifyy-0.9.78}/graphify/skills/windows/references/github-and-merge.md +0 -0
- {graphifyy-0.9.76 → graphifyy-0.9.78}/graphify/skills/windows/references/hooks.md +0 -0
- {graphifyy-0.9.76 → graphifyy-0.9.78}/graphify/skills/windows/references/query.md +0 -0
- {graphifyy-0.9.76 → graphifyy-0.9.78}/graphify/skills/windows/references/transcribe.md +0 -0
- {graphifyy-0.9.76 → graphifyy-0.9.78}/graphify/swift_dispatch.py +0 -0
- {graphifyy-0.9.76 → graphifyy-0.9.78}/graphify/transcribe.py +0 -0
- {graphifyy-0.9.76 → graphifyy-0.9.78}/graphify/tree_html.py +0 -0
- {graphifyy-0.9.76 → graphifyy-0.9.78}/graphify/validate.py +0 -0
- {graphifyy-0.9.76 → graphifyy-0.9.78}/graphify/wiki.py +0 -0
- {graphifyy-0.9.76 → graphifyy-0.9.78}/graphifyy.egg-info/dependency_links.txt +0 -0
- {graphifyy-0.9.76 → graphifyy-0.9.78}/graphifyy.egg-info/entry_points.txt +0 -0
- {graphifyy-0.9.76 → graphifyy-0.9.78}/graphifyy.egg-info/requires.txt +0 -0
- {graphifyy-0.9.76 → graphifyy-0.9.78}/graphifyy.egg-info/top_level.txt +0 -0
- {graphifyy-0.9.76 → graphifyy-0.9.78}/setup.cfg +0 -0
- {graphifyy-0.9.76 → graphifyy-0.9.78}/tests/test_affected_cli.py +0 -0
- {graphifyy-0.9.76 → graphifyy-0.9.78}/tests/test_affected_member_seed.py +0 -0
- {graphifyy-0.9.76 → graphifyy-0.9.78}/tests/test_agents_platform.py +0 -0
- {graphifyy-0.9.76 → graphifyy-0.9.78}/tests/test_anthropic_custom_endpoint.py +0 -0
- {graphifyy-0.9.76 → graphifyy-0.9.78}/tests/test_antigravity_install.py +0 -0
- {graphifyy-0.9.76 → graphifyy-0.9.78}/tests/test_apm_fallback_version.py +0 -0
- {graphifyy-0.9.76 → graphifyy-0.9.78}/tests/test_architecture_doc.py +0 -0
- {graphifyy-0.9.76 → graphifyy-0.9.78}/tests/test_astro_import_ids.py +0 -0
- {graphifyy-0.9.76 → graphifyy-0.9.78}/tests/test_atomic_canvas_export.py +0 -0
- {graphifyy-0.9.76 → graphifyy-0.9.78}/tests/test_atomic_version_stamp.py +0 -0
- {graphifyy-0.9.76 → graphifyy-0.9.78}/tests/test_atomic_writes.py +0 -0
- {graphifyy-0.9.76 → graphifyy-0.9.78}/tests/test_backend_env_isolation.py +0 -0
- {graphifyy-0.9.76 → graphifyy-0.9.78}/tests/test_backend_extras.py +0 -0
- {graphifyy-0.9.76 → graphifyy-0.9.78}/tests/test_benchmark.py +0 -0
- {graphifyy-0.9.76 → graphifyy-0.9.78}/tests/test_benchmark_raw_graph.py +0 -0
- {graphifyy-0.9.76 → graphifyy-0.9.78}/tests/test_blade_extractor.py +0 -0
- {graphifyy-0.9.76 → graphifyy-0.9.78}/tests/test_build.py +0 -0
- {graphifyy-0.9.76 → graphifyy-0.9.78}/tests/test_build_merge_dedup_scope.py +0 -0
- {graphifyy-0.9.76 → graphifyy-0.9.78}/tests/test_build_merge_hyperedges_and_prune.py +0 -0
- {graphifyy-0.9.76 → graphifyy-0.9.78}/tests/test_build_merge_shrink_guard.py +0 -0
- {graphifyy-0.9.76 → graphifyy-0.9.78}/tests/test_builtin_global_type_refs.py +0 -0
- {graphifyy-0.9.76 → graphifyy-0.9.78}/tests/test_cache.py +0 -0
- {graphifyy-0.9.76 → graphifyy-0.9.78}/tests/test_callflow_html.py +0 -0
- {graphifyy-0.9.76 → graphifyy-0.9.78}/tests/test_cargo_introspect.py +0 -0
- {graphifyy-0.9.76 → graphifyy-0.9.78}/tests/test_cargo_missing_manifest.py +0 -0
- {graphifyy-0.9.76 → graphifyy-0.9.78}/tests/test_carried_hyperedge_remap.py +0 -0
- {graphifyy-0.9.76 → graphifyy-0.9.78}/tests/test_case_sensitive_resolution.py +0 -0
- {graphifyy-0.9.76 → graphifyy-0.9.78}/tests/test_charmap_encoding.py +0 -0
- {graphifyy-0.9.76 → graphifyy-0.9.78}/tests/test_chunking.py +0 -0
- {graphifyy-0.9.76 → graphifyy-0.9.78}/tests/test_cjs_module_extension.py +0 -0
- {graphifyy-0.9.76 → graphifyy-0.9.78}/tests/test_claude_cli_backend.py +0 -0
- {graphifyy-0.9.76 → graphifyy-0.9.78}/tests/test_claude_md.py +0 -0
- {graphifyy-0.9.76 → graphifyy-0.9.78}/tests/test_cli_broken_pipe.py +0 -0
- {graphifyy-0.9.76 → graphifyy-0.9.78}/tests/test_cli_export.py +0 -0
- {graphifyy-0.9.76 → graphifyy-0.9.78}/tests/test_cli_help.py +0 -0
- {graphifyy-0.9.76 → graphifyy-0.9.78}/tests/test_cluster.py +0 -0
- {graphifyy-0.9.76 → graphifyy-0.9.78}/tests/test_cluster_exclude_hubs.py +0 -0
- {graphifyy-0.9.76 → graphifyy-0.9.78}/tests/test_cobol_extractor.py +0 -0
- {graphifyy-0.9.76 → graphifyy-0.9.78}/tests/test_codebuddy.py +0 -0
- {graphifyy-0.9.76 → graphifyy-0.9.78}/tests/test_community_hub_labels.py +0 -0
- {graphifyy-0.9.76 → graphifyy-0.9.78}/tests/test_community_labels_skill.py +0 -0
- {graphifyy-0.9.76 → graphifyy-0.9.78}/tests/test_confidence.py +0 -0
- {graphifyy-0.9.76 → graphifyy-0.9.78}/tests/test_corrupt_graph_json.py +0 -0
- {graphifyy-0.9.76 → graphifyy-0.9.78}/tests/test_cpp_method_declarations.py +0 -0
- {graphifyy-0.9.76 → graphifyy-0.9.78}/tests/test_cpp_objc_cross_file_calls.py +0 -0
- {graphifyy-0.9.76 → graphifyy-0.9.78}/tests/test_cpp_preprocess.py +0 -0
- {graphifyy-0.9.76 → graphifyy-0.9.78}/tests/test_cross_extension_reexport_self_cycle.py +0 -0
- {graphifyy-0.9.76 → graphifyy-0.9.78}/tests/test_cross_language_call_resolution.py +0 -0
- {graphifyy-0.9.76 → graphifyy-0.9.78}/tests/test_cross_repo_external_call_guards.py +0 -0
- {graphifyy-0.9.76 → graphifyy-0.9.78}/tests/test_cross_repo_member_calls.py +0 -0
- {graphifyy-0.9.76 → graphifyy-0.9.78}/tests/test_cross_repo_shared_types.py +0 -0
- {graphifyy-0.9.76 → graphifyy-0.9.78}/tests/test_csharp_call_site_generic_args.py +0 -0
- {graphifyy-0.9.76 → graphifyy-0.9.78}/tests/test_csharp_enum_members.py +0 -0
- {graphifyy-0.9.76 → graphifyy-0.9.78}/tests/test_csharp_field_generic_args.py +0 -0
- {graphifyy-0.9.76 → graphifyy-0.9.78}/tests/test_csharp_generic_callsites.py +0 -0
- {graphifyy-0.9.76 → graphifyy-0.9.78}/tests/test_csharp_interface_dispatch.py +0 -0
- {graphifyy-0.9.76 → graphifyy-0.9.78}/tests/test_csharp_member_nodes.py +0 -0
- {graphifyy-0.9.76 → graphifyy-0.9.78}/tests/test_csharp_object_creation.py +0 -0
- {graphifyy-0.9.76 → graphifyy-0.9.78}/tests/test_csharp_partial_classes.py +0 -0
- {graphifyy-0.9.76 → graphifyy-0.9.78}/tests/test_csharp_tuple_type_refs.py +0 -0
- {graphifyy-0.9.76 → graphifyy-0.9.78}/tests/test_dart.py +0 -0
- {graphifyy-0.9.76 → graphifyy-0.9.78}/tests/test_dedup.py +0 -0
- {graphifyy-0.9.76 → graphifyy-0.9.78}/tests/test_dedup_remaps_hyperedges.py +0 -0
- {graphifyy-0.9.76 → graphifyy-0.9.78}/tests/test_dedup_shrink_refuses_force_write.py +0 -0
- {graphifyy-0.9.76 → graphifyy-0.9.78}/tests/test_dedup_survivor_richness.py +0 -0
- {graphifyy-0.9.76 → graphifyy-0.9.78}/tests/test_definition_file_portability.py +0 -0
- {graphifyy-0.9.76 → graphifyy-0.9.78}/tests/test_devin.py +0 -0
- {graphifyy-0.9.76 → graphifyy-0.9.78}/tests/test_docx_to_markdown.py +0 -0
- {graphifyy-0.9.76 → graphifyy-0.9.78}/tests/test_dotnet.py +0 -0
- {graphifyy-0.9.76 → graphifyy-0.9.78}/tests/test_duplicate_annotation_edges.py +0 -0
- {graphifyy-0.9.76 → graphifyy-0.9.78}/tests/test_elixir_import_resolution.py +0 -0
- {graphifyy-0.9.76 → graphifyy-0.9.78}/tests/test_elixir_unqualified_call_scope.py +0 -0
- {graphifyy-0.9.76 → graphifyy-0.9.78}/tests/test_erlang_extractor.py +0 -0
- {graphifyy-0.9.76 → graphifyy-0.9.78}/tests/test_evidence_binding.py +0 -0
- {graphifyy-0.9.76 → graphifyy-0.9.78}/tests/test_explain_cli.py +0 -0
- {graphifyy-0.9.76 → graphifyy-0.9.78}/tests/test_export_control_characters.py +0 -0
- {graphifyy-0.9.76 → graphifyy-0.9.78}/tests/test_export_idempotent_writes.py +0 -0
- {graphifyy-0.9.76 → graphifyy-0.9.78}/tests/test_export_path_length.py +0 -0
- {graphifyy-0.9.76 → graphifyy-0.9.78}/tests/test_external_stub_endpoints.py +0 -0
- {graphifyy-0.9.76 → graphifyy-0.9.78}/tests/test_extract_cache_location.py +0 -0
- {graphifyy-0.9.76 → graphifyy-0.9.78}/tests/test_extract_cli.py +0 -0
- {graphifyy-0.9.76 → graphifyy-0.9.78}/tests/test_extract_code_only_cli.py +0 -0
- {graphifyy-0.9.76 → graphifyy-0.9.78}/tests/test_extract_php_closures.py +0 -0
- {graphifyy-0.9.76 → graphifyy-0.9.78}/tests/test_extraction_spec_ids.py +0 -0
- {graphifyy-0.9.76 → graphifyy-0.9.78}/tests/test_extractors_registry.py +0 -0
- {graphifyy-0.9.76 → graphifyy-0.9.78}/tests/test_falkordb_integration.py +0 -0
- {graphifyy-0.9.76 → graphifyy-0.9.78}/tests/test_file_label_disambiguation.py +0 -0
- {graphifyy-0.9.76 → graphifyy-0.9.78}/tests/test_file_node_id_spec.py +0 -0
- {graphifyy-0.9.76 → graphifyy-0.9.78}/tests/test_file_slice.py +0 -0
- {graphifyy-0.9.76 → graphifyy-0.9.78}/tests/test_file_truncation_warning.py +0 -0
- {graphifyy-0.9.76 → graphifyy-0.9.78}/tests/test_forwarding_review_findings.py +0 -0
- {graphifyy-0.9.76 → graphifyy-0.9.78}/tests/test_gemini_hook.py +0 -0
- {graphifyy-0.9.76 → graphifyy-0.9.78}/tests/test_global_add_tag_inference.py +0 -0
- {graphifyy-0.9.76 → graphifyy-0.9.78}/tests/test_global_graph.py +0 -0
- {graphifyy-0.9.76 → graphifyy-0.9.78}/tests/test_go_builtin_call_targets.py +0 -0
- {graphifyy-0.9.76 → graphifyy-0.9.78}/tests/test_go_import_repoint.py +0 -0
- {graphifyy-0.9.76 → graphifyy-0.9.78}/tests/test_go_interface_methods.py +0 -0
- {graphifyy-0.9.76 → graphifyy-0.9.78}/tests/test_go_qualified_resolution.py +0 -0
- {graphifyy-0.9.76 → graphifyy-0.9.78}/tests/test_god_nodes_cli.py +0 -0
- {graphifyy-0.9.76 → graphifyy-0.9.78}/tests/test_god_nodes_exclude_hubs.py +0 -0
- {graphifyy-0.9.76 → graphifyy-0.9.78}/tests/test_google_workspace.py +0 -0
- {graphifyy-0.9.76 → graphifyy-0.9.78}/tests/test_graphdb_push_indexes.py +0 -0
- {graphifyy-0.9.76 → graphifyy-0.9.78}/tests/test_hollow_chunks_arm_shrink_guard.py +0 -0
- {graphifyy-0.9.76 → graphifyy-0.9.78}/tests/test_home_sandbox.py +0 -0
- {graphifyy-0.9.76 → graphifyy-0.9.78}/tests/test_hook_chain_survives_skip.py +0 -0
- {graphifyy-0.9.76 → graphifyy-0.9.78}/tests/test_hook_guard.py +0 -0
- {graphifyy-0.9.76 → graphifyy-0.9.78}/tests/test_hook_guard_token_match.py +0 -0
- {graphifyy-0.9.76 → graphifyy-0.9.78}/tests/test_hook_out_of_project_paths.py +0 -0
- {graphifyy-0.9.76 → graphifyy-0.9.78}/tests/test_hook_strict.py +0 -0
- {graphifyy-0.9.76 → graphifyy-0.9.78}/tests/test_hooks.py +0 -0
- {graphifyy-0.9.76 → graphifyy-0.9.78}/tests/test_hyperedge_member_shapes.py +0 -0
- {graphifyy-0.9.76 → graphifyy-0.9.78}/tests/test_hyperedge_roundtrip.py +0 -0
- {graphifyy-0.9.76 → graphifyy-0.9.78}/tests/test_hypergraph.py +0 -0
- {graphifyy-0.9.76 → graphifyy-0.9.78}/tests/test_id_normalization_contract.py +0 -0
- {graphifyy-0.9.76 → graphifyy-0.9.78}/tests/test_ignore_file_encoding.py +0 -0
- {graphifyy-0.9.76 → graphifyy-0.9.78}/tests/test_image_vision.py +0 -0
- {graphifyy-0.9.76 → graphifyy-0.9.78}/tests/test_import_extension_resolution.py +0 -0
- {graphifyy-0.9.76 → graphifyy-0.9.78}/tests/test_import_self_loops.py +0 -0
- {graphifyy-0.9.76 → graphifyy-0.9.78}/tests/test_imported_export_forwarding.py +0 -0
- {graphifyy-0.9.76 → graphifyy-0.9.78}/tests/test_incomplete_build_guard.py +0 -0
- {graphifyy-0.9.76 → graphifyy-0.9.78}/tests/test_incremental.py +0 -0
- {graphifyy-0.9.76 → graphifyy-0.9.78}/tests/test_incremental_mtime_collision.py +0 -0
- {graphifyy-0.9.76 → graphifyy-0.9.78}/tests/test_indirect_call_arrow_single_param_shadow.py +0 -0
- {graphifyy-0.9.76 → graphifyy-0.9.78}/tests/test_indirect_call_block_scoped_shadow.py +0 -0
- {graphifyy-0.9.76 → graphifyy-0.9.78}/tests/test_indirect_call_catch_binding_shadow.py +0 -0
- {graphifyy-0.9.76 → graphifyy-0.9.78}/tests/test_indirect_call_external_import_shadow.py +0 -0
- {graphifyy-0.9.76 → graphifyy-0.9.78}/tests/test_indirect_call_for_of_binding_shadow.py +0 -0
- {graphifyy-0.9.76 → graphifyy-0.9.78}/tests/test_indirect_call_function_expression_shadow.py +0 -0
- {graphifyy-0.9.76 → graphifyy-0.9.78}/tests/test_indirect_call_nested_closure_shadow.py +0 -0
- {graphifyy-0.9.76 → graphifyy-0.9.78}/tests/test_indirect_dispatch.py +0 -0
- {graphifyy-0.9.76 → graphifyy-0.9.78}/tests/test_indirect_dispatch_assign_return.py +0 -0
- {graphifyy-0.9.76 → graphifyy-0.9.78}/tests/test_indirect_dispatch_getattr.py +0 -0
- {graphifyy-0.9.76 → graphifyy-0.9.78}/tests/test_inferred_confidence_rubric.py +0 -0
- {graphifyy-0.9.76 → graphifyy-0.9.78}/tests/test_ingest.py +0 -0
- {graphifyy-0.9.76 → graphifyy-0.9.78}/tests/test_ingest_url_type.py +0 -0
- {graphifyy-0.9.76 → graphifyy-0.9.78}/tests/test_inherited_field_receivers.py +0 -0
- {graphifyy-0.9.76 → graphifyy-0.9.78}/tests/test_injection_sentinel_coverage.py +0 -0
- {graphifyy-0.9.76 → graphifyy-0.9.78}/tests/test_install.py +0 -0
- {graphifyy-0.9.76 → graphifyy-0.9.78}/tests/test_install_references.py +0 -0
- {graphifyy-0.9.76 → graphifyy-0.9.78}/tests/test_install_roundtrip.py +0 -0
- {graphifyy-0.9.76 → graphifyy-0.9.78}/tests/test_install_strings.py +0 -0
- {graphifyy-0.9.76 → graphifyy-0.9.78}/tests/test_install_upgrade.py +0 -0
- {graphifyy-0.9.76 → graphifyy-0.9.78}/tests/test_install_version_stamp.py +0 -0
- {graphifyy-0.9.76 → graphifyy-0.9.78}/tests/test_install_version_warning.py +0 -0
- {graphifyy-0.9.76 → graphifyy-0.9.78}/tests/test_issue_3405_python_resolution.py +0 -0
- {graphifyy-0.9.76 → graphifyy-0.9.78}/tests/test_issue_3472_source_file_collision.py +0 -0
- {graphifyy-0.9.76 → graphifyy-0.9.78}/tests/test_java_enum_members.py +0 -0
- {graphifyy-0.9.76 → graphifyy-0.9.78}/tests/test_java_member_calls.py +0 -0
- {graphifyy-0.9.76 → graphifyy-0.9.78}/tests/test_java_type_resolution.py +0 -0
- {graphifyy-0.9.76 → graphifyy-0.9.78}/tests/test_js_callback_calls.py +0 -0
- {graphifyy-0.9.76 → graphifyy-0.9.78}/tests/test_js_destructured_export.py +0 -0
- {graphifyy-0.9.76 → graphifyy-0.9.78}/tests/test_js_dynamic_import_affected.py +0 -0
- {graphifyy-0.9.76 → graphifyy-0.9.78}/tests/test_js_dynamic_imports.py +0 -0
- {graphifyy-0.9.76 → graphifyy-0.9.78}/tests/test_js_exported_fn_call_resolution.py +0 -0
- {graphifyy-0.9.76 → graphifyy-0.9.78}/tests/test_js_exported_scalar_bindings.py +0 -0
- {graphifyy-0.9.76 → graphifyy-0.9.78}/tests/test_js_module_level_anonymous_calls.py +0 -0
- {graphifyy-0.9.76 → graphifyy-0.9.78}/tests/test_js_this_member_expressions.py +0 -0
- {graphifyy-0.9.76 → graphifyy-0.9.78}/tests/test_jsconfig_baseurl.py +0 -0
- {graphifyy-0.9.76 → graphifyy-0.9.78}/tests/test_json_schema_config.py +0 -0
- {graphifyy-0.9.76 → graphifyy-0.9.78}/tests/test_jsx_component_usage_calls.py +0 -0
- {graphifyy-0.9.76 → graphifyy-0.9.78}/tests/test_kotlin_object_literal.py +0 -0
- {graphifyy-0.9.76 → graphifyy-0.9.78}/tests/test_label_retry.py +0 -0
- {graphifyy-0.9.76 → graphifyy-0.9.78}/tests/test_labeling.py +0 -0
- {graphifyy-0.9.76 → graphifyy-0.9.78}/tests/test_language_resolvers.py +0 -0
- {graphifyy-0.9.76 → graphifyy-0.9.78}/tests/test_llm_backends.py +0 -0
- {graphifyy-0.9.76 → graphifyy-0.9.78}/tests/test_llm_parser.py +0 -0
- {graphifyy-0.9.76 → graphifyy-0.9.78}/tests/test_llm_parser_reasoning.py +0 -0
- {graphifyy-0.9.76 → graphifyy-0.9.78}/tests/test_long_path_hashing.py +0 -0
- {graphifyy-0.9.76 → graphifyy-0.9.78}/tests/test_loose_sibling_import_resolution.py +0 -0
- {graphifyy-0.9.76 → graphifyy-0.9.78}/tests/test_lua_import.py +0 -0
- {graphifyy-0.9.76 → graphifyy-0.9.78}/tests/test_lua_method_calls.py +0 -0
- {graphifyy-0.9.76 → graphifyy-0.9.78}/tests/test_manifest_ingest.py +0 -0
- {graphifyy-0.9.76 → graphifyy-0.9.78}/tests/test_manifest_tomli_required.py +0 -0
- {graphifyy-0.9.76 → graphifyy-0.9.78}/tests/test_markdown_code_spans.py +0 -0
- {graphifyy-0.9.76 → graphifyy-0.9.78}/tests/test_mcp_ingest.py +0 -0
- {graphifyy-0.9.76 → graphifyy-0.9.78}/tests/test_merge_chunks_validation.py +0 -0
- {graphifyy-0.9.76 → graphifyy-0.9.78}/tests/test_minhash.py +0 -0
- {graphifyy-0.9.76 → graphifyy-0.9.78}/tests/test_multigraph_compat.py +0 -0
- {graphifyy-0.9.76 → graphifyy-0.9.78}/tests/test_multigraph_diagnostics.py +0 -0
- {graphifyy-0.9.76 → graphifyy-0.9.78}/tests/test_no_dedup_flag.py +0 -0
- {graphifyy-0.9.76 → graphifyy-0.9.78}/tests/test_node_id_canonical.py +0 -0
- {graphifyy-0.9.76 → graphifyy-0.9.78}/tests/test_non_regular_files.py +0 -0
- {graphifyy-0.9.76 → graphifyy-0.9.78}/tests/test_non_string_node_ids.py +0 -0
- {graphifyy-0.9.76 → graphifyy-0.9.78}/tests/test_objc_category_interfaces.py +0 -0
- {graphifyy-0.9.76 → graphifyy-0.9.78}/tests/test_objc_field_table_remap.py +0 -0
- {graphifyy-0.9.76 → graphifyy-0.9.78}/tests/test_objc_member_calls.py +0 -0
- {graphifyy-0.9.76 → graphifyy-0.9.78}/tests/test_objc_property_ivar_receivers.py +0 -0
- {graphifyy-0.9.76 → graphifyy-0.9.78}/tests/test_obsidian_dangling_member.py +0 -0
- {graphifyy-0.9.76 → graphifyy-0.9.78}/tests/test_obsidian_filename_cap.py +0 -0
- {graphifyy-0.9.76 → graphifyy-0.9.78}/tests/test_obsidian_unicode_tags.py +0 -0
- {graphifyy-0.9.76 → graphifyy-0.9.78}/tests/test_obsidian_vault_migration.py +0 -0
- {graphifyy-0.9.76 → graphifyy-0.9.78}/tests/test_ocaml.py +0 -0
- {graphifyy-0.9.76 → graphifyy-0.9.78}/tests/test_office_incremental.py +0 -0
- {graphifyy-0.9.76 → graphifyy-0.9.78}/tests/test_office_limits.py +0 -0
- {graphifyy-0.9.76 → graphifyy-0.9.78}/tests/test_ollama.py +0 -0
- {graphifyy-0.9.76 → graphifyy-0.9.78}/tests/test_ollama_retry_cap.py +0 -0
- {graphifyy-0.9.76 → graphifyy-0.9.78}/tests/test_openai_custom_endpoint.py +0 -0
- {graphifyy-0.9.76 → graphifyy-0.9.78}/tests/test_out_dir_evidence.py +0 -0
- {graphifyy-0.9.76 → graphifyy-0.9.78}/tests/test_oversized_document_slicing.py +0 -0
- {graphifyy-0.9.76 → graphifyy-0.9.78}/tests/test_owned_type_sources.py +0 -0
- {graphifyy-0.9.76 → graphifyy-0.9.78}/tests/test_package_json_subpath_imports.py +0 -0
- {graphifyy-0.9.76 → graphifyy-0.9.78}/tests/test_partial_cache.py +0 -0
- {graphifyy-0.9.76 → graphifyy-0.9.78}/tests/test_pascal_call_scoping.py +0 -0
- {graphifyy-0.9.76 → graphifyy-0.9.78}/tests/test_pascal_resolution.py +0 -0
- {graphifyy-0.9.76 → graphifyy-0.9.78}/tests/test_path_cli.py +0 -0
- {graphifyy-0.9.76 → graphifyy-0.9.78}/tests/test_paths.py +0 -0
- {graphifyy-0.9.76 → graphifyy-0.9.78}/tests/test_pdf_extra_warning.py +0 -0
- {graphifyy-0.9.76 → graphifyy-0.9.78}/tests/test_pdf_slicing.py +0 -0
- {graphifyy-0.9.76 → graphifyy-0.9.78}/tests/test_pdf_token_estimate.py +0 -0
- {graphifyy-0.9.76 → graphifyy-0.9.78}/tests/test_pg_introspect.py +0 -0
- {graphifyy-0.9.76 → graphifyy-0.9.78}/tests/test_phantom_cross_package_call.py +0 -0
- {graphifyy-0.9.76 → graphifyy-0.9.78}/tests/test_phantom_external_import.py +0 -0
- {graphifyy-0.9.76 → graphifyy-0.9.78}/tests/test_php_object_creation.py +0 -0
- {graphifyy-0.9.76 → graphifyy-0.9.78}/tests/test_php_type_resolution.py +0 -0
- {graphifyy-0.9.76 → graphifyy-0.9.78}/tests/test_pin_hash_seed.py +0 -0
- {graphifyy-0.9.76 → graphifyy-0.9.78}/tests/test_pipeline.py +0 -0
- {graphifyy-0.9.76 → graphifyy-0.9.78}/tests/test_provider_registry.py +0 -0
- {graphifyy-0.9.76 → graphifyy-0.9.78}/tests/test_prs.py +0 -0
- {graphifyy-0.9.76 → graphifyy-0.9.78}/tests/test_prune_sweeps_orphans.py +0 -0
- {graphifyy-0.9.76 → graphifyy-0.9.78}/tests/test_python_decorators.py +0 -0
- {graphifyy-0.9.76 → graphifyy-0.9.78}/tests/test_python_parse_memoization.py +0 -0
- {graphifyy-0.9.76 → graphifyy-0.9.78}/tests/test_python_underscore_resolution.py +0 -0
- {graphifyy-0.9.76 → graphifyy-0.9.78}/tests/test_query_cli.py +0 -0
- {graphifyy-0.9.76 → graphifyy-0.9.78}/tests/test_query_induced_edges.py +0 -0
- {graphifyy-0.9.76 → graphifyy-0.9.78}/tests/test_query_mcp_direction.py +0 -0
- {graphifyy-0.9.76 → graphifyy-0.9.78}/tests/test_query_names_its_graph.py +0 -0
- {graphifyy-0.9.76 → graphifyy-0.9.78}/tests/test_querylog.py +0 -0
- {graphifyy-0.9.76 → graphifyy-0.9.78}/tests/test_rationale.py +0 -0
- {graphifyy-0.9.76 → graphifyy-0.9.78}/tests/test_read_hook.py +0 -0
- {graphifyy-0.9.76 → graphifyy-0.9.78}/tests/test_reflect.py +0 -0
- {graphifyy-0.9.76 → graphifyy-0.9.78}/tests/test_relation_collapse_precedence.py +0 -0
- {graphifyy-0.9.76 → graphifyy-0.9.78}/tests/test_replace_or_append_section.py +0 -0
- {graphifyy-0.9.76 → graphifyy-0.9.78}/tests/test_report.py +0 -0
- {graphifyy-0.9.76 → graphifyy-0.9.78}/tests/test_report_gap_thresholds.py +0 -0
- {graphifyy-0.9.76 → graphifyy-0.9.78}/tests/test_resolve_memoization.py +0 -0
- {graphifyy-0.9.76 → graphifyy-0.9.78}/tests/test_ruby_bare_self_send_calls.py +0 -0
- {graphifyy-0.9.76 → graphifyy-0.9.78}/tests/test_ruby_resolution.py +0 -0
- {graphifyy-0.9.76 → graphifyy-0.9.78}/tests/test_rust_builtin_type_hubs.py +0 -0
- {graphifyy-0.9.76 → graphifyy-0.9.78}/tests/test_rust_macro_rules.py +0 -0
- {graphifyy-0.9.76 → graphifyy-0.9.78}/tests/test_rust_self_member_calls.py +0 -0
- {graphifyy-0.9.76 → graphifyy-0.9.78}/tests/test_scala_abstract_methods.py +0 -0
- {graphifyy-0.9.76 → graphifyy-0.9.78}/tests/test_scala_self_type.py +0 -0
- {graphifyy-0.9.76 → graphifyy-0.9.78}/tests/test_scala_top_level_binding.py +0 -0
- {graphifyy-0.9.76 → graphifyy-0.9.78}/tests/test_scala_type_definition.py +0 -0
- {graphifyy-0.9.76 → graphifyy-0.9.78}/tests/test_scip_ingest.py +0 -0
- {graphifyy-0.9.76 → graphifyy-0.9.78}/tests/test_search_hook.py +0 -0
- {graphifyy-0.9.76 → graphifyy-0.9.78}/tests/test_security.py +0 -0
- {graphifyy-0.9.76 → graphifyy-0.9.78}/tests/test_semantic_cache_basename_recovery.py +0 -0
- {graphifyy-0.9.76 → graphifyy-0.9.78}/tests/test_semantic_cache_out_root.py +0 -0
- {graphifyy-0.9.76 → graphifyy-0.9.78}/tests/test_semantic_cleanup.py +0 -0
- {graphifyy-0.9.76 → graphifyy-0.9.78}/tests/test_semantic_fragment_sanitize.py +0 -0
- {graphifyy-0.9.76 → graphifyy-0.9.78}/tests/test_semantic_id_remap_root.py +0 -0
- {graphifyy-0.9.76 → graphifyy-0.9.78}/tests/test_semantic_similarity.py +0 -0
- {graphifyy-0.9.76 → graphifyy-0.9.78}/tests/test_serve.py +0 -0
- {graphifyy-0.9.76 → graphifyy-0.9.78}/tests/test_serve_http.py +0 -0
- {graphifyy-0.9.76 → graphifyy-0.9.78}/tests/test_settings_merge.py +0 -0
- {graphifyy-0.9.76 → graphifyy-0.9.78}/tests/test_skill_auto_refresh.py +0 -0
- {graphifyy-0.9.76 → graphifyy-0.9.78}/tests/test_skill_version_warning.py +0 -0
- {graphifyy-0.9.76 → graphifyy-0.9.78}/tests/test_skillgen.py +0 -0
- {graphifyy-0.9.76 → graphifyy-0.9.78}/tests/test_skillgen_input_path_injection.py +0 -0
- {graphifyy-0.9.76 → graphifyy-0.9.78}/tests/test_source_key_memoization.py +0 -0
- {graphifyy-0.9.76 → graphifyy-0.9.78}/tests/test_sourceless_call_targets.py +0 -0
- {graphifyy-0.9.76 → graphifyy-0.9.78}/tests/test_src_layout_import_resolution.py +0 -0
- {graphifyy-0.9.76 → graphifyy-0.9.78}/tests/test_stale_prune.py +0 -0
- {graphifyy-0.9.76 → graphifyy-0.9.78}/tests/test_stat_index_husk.py +0 -0
- {graphifyy-0.9.76 → graphifyy-0.9.78}/tests/test_stat_index_multi_root.py +0 -0
- {graphifyy-0.9.76 → graphifyy-0.9.78}/tests/test_stat_index_portability.py +0 -0
- {graphifyy-0.9.76 → graphifyy-0.9.78}/tests/test_svelte_extraction.py +0 -0
- {graphifyy-0.9.76 → graphifyy-0.9.78}/tests/test_swift_builtin_noise.py +0 -0
- {graphifyy-0.9.76 → graphifyy-0.9.78}/tests/test_swift_computed_properties.py +0 -0
- {graphifyy-0.9.76 → graphifyy-0.9.78}/tests/test_swift_cross_file_calls.py +0 -0
- {graphifyy-0.9.76 → graphifyy-0.9.78}/tests/test_swift_import_resolution.py +0 -0
- {graphifyy-0.9.76 → graphifyy-0.9.78}/tests/test_swift_protocol_dispatch.py +0 -0
- {graphifyy-0.9.76 → graphifyy-0.9.78}/tests/test_swift_protocol_requirements.py +0 -0
- {graphifyy-0.9.76 → graphifyy-0.9.78}/tests/test_symbol_resolution.py +0 -0
- {graphifyy-0.9.76 → graphifyy-0.9.78}/tests/test_terraform.py +0 -0
- {graphifyy-0.9.76 → graphifyy-0.9.78}/tests/test_terraform_modules.py +0 -0
- {graphifyy-0.9.76 → graphifyy-0.9.78}/tests/test_trailing_newline_not_a_syntax_error.py +0 -0
- {graphifyy-0.9.76 → graphifyy-0.9.78}/tests/test_transcribe.py +0 -0
- {graphifyy-0.9.76 → graphifyy-0.9.78}/tests/test_tree_html.py +0 -0
- {graphifyy-0.9.76 → graphifyy-0.9.78}/tests/test_ts_abstract_methods.py +0 -0
- {graphifyy-0.9.76 → graphifyy-0.9.78}/tests/test_ts_decorators.py +0 -0
- {graphifyy-0.9.76 → graphifyy-0.9.78}/tests/test_ts_generators.py +0 -0
- {graphifyy-0.9.76 → graphifyy-0.9.78}/tests/test_ts_import_require.py +0 -0
- {graphifyy-0.9.76 → graphifyy-0.9.78}/tests/test_ts_import_type_arguments.py +0 -0
- {graphifyy-0.9.76 → graphifyy-0.9.78}/tests/test_ts_inheritance.py +0 -0
- {graphifyy-0.9.76 → graphifyy-0.9.78}/tests/test_ts_namespace.py +0 -0
- {graphifyy-0.9.76 → graphifyy-0.9.78}/tests/test_ts_new_expression_calls.py +0 -0
- {graphifyy-0.9.76 → graphifyy-0.9.78}/tests/test_ts_parse_warning.py +0 -0
- {graphifyy-0.9.76 → graphifyy-0.9.78}/tests/test_ts_receiver_member_calls.py +0 -0
- {graphifyy-0.9.76 → graphifyy-0.9.78}/tests/test_type_only_import_cycles.py +0 -0
- {graphifyy-0.9.76 → graphifyy-0.9.78}/tests/test_typescript_enum_members.py +0 -0
- {graphifyy-0.9.76 → graphifyy-0.9.78}/tests/test_typescript_module_extensions.py +0 -0
- {graphifyy-0.9.76 → graphifyy-0.9.78}/tests/test_uninstall_scope.py +0 -0
- {graphifyy-0.9.76 → graphifyy-0.9.78}/tests/test_uninstall_symlink.py +0 -0
- {graphifyy-0.9.76 → graphifyy-0.9.78}/tests/test_unmapped_at_alias_resolution.py +0 -0
- {graphifyy-0.9.76 → graphifyy-0.9.78}/tests/test_unverified_semantic_shrink.py +0 -0
- {graphifyy-0.9.76 → graphifyy-0.9.78}/tests/test_validate.py +0 -0
- {graphifyy-0.9.76 → graphifyy-0.9.78}/tests/test_vbnet_extractor.py +0 -0
- {graphifyy-0.9.76 → graphifyy-0.9.78}/tests/test_vue_extraction.py +0 -0
- {graphifyy-0.9.76 → graphifyy-0.9.78}/tests/test_walk_python_tree_iterative.py +0 -0
- {graphifyy-0.9.76 → graphifyy-0.9.78}/tests/test_watch.py +0 -0
- {graphifyy-0.9.76 → graphifyy-0.9.78}/tests/test_watch_manifest_location.py +0 -0
- {graphifyy-0.9.76 → graphifyy-0.9.78}/tests/test_wheel_packaging.py +0 -0
- {graphifyy-0.9.76 → graphifyy-0.9.78}/tests/test_wiki.py +0 -0
- {graphifyy-0.9.76 → graphifyy-0.9.78}/tests/test_wiki_link_filename_parity.py +0 -0
- {graphifyy-0.9.76 → graphifyy-0.9.78}/tests/test_wiki_truncation_indicator.py +0 -0
- {graphifyy-0.9.76 → graphifyy-0.9.78}/tests/test_word_count_cache.py +0 -0
- {graphifyy-0.9.76 → graphifyy-0.9.78}/tests/test_zero_node_no_cache.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: graphifyy
|
|
3
|
-
Version: 0.9.
|
|
3
|
+
Version: 0.9.78
|
|
4
4
|
Summary: AI coding assistant skill (Claude Code, CodeBuddy, Codex, OpenCode, Kilo Code, Cursor, Gemini CLI, Aider, OpenClaw, Factory Droid, Trae, Hermes, Kiro, Pi, Devin CLI, Google Antigravity) - turn any folder of code, docs, papers, images, or videos into a queryable knowledge graph
|
|
5
5
|
License-Expression: Apache-2.0
|
|
6
6
|
Project-URL: Homepage, https://graphify.com
|
|
@@ -219,6 +219,10 @@ graphify-out/
|
|
|
219
219
|
└── graph.json the full graph — query it anytime without re-reading your files
|
|
220
220
|
```
|
|
221
221
|
|
|
222
|
+
The persisted graph includes `graph.schema_version` so integrations can detect
|
|
223
|
+
incompatible format changes, plus `graph.graphify_version` identifying the
|
|
224
|
+
Graphify release that produced it.
|
|
225
|
+
|
|
222
226
|
**Works in** Claude Code, Cursor, Codex, Gemini CLI, GitHub Copilot, and 15+ more — [pick your platform](#install).
|
|
223
227
|
|
|
224
228
|
---
|
|
@@ -277,6 +281,7 @@ What you get out of the box:
|
|
|
277
281
|
| LOCOMO (n=300) | recall@10 | **0.497** | mem0 0.048, supermemory 0.149 |
|
|
278
282
|
| LOCOMO (n=300) | QA accuracy | 45.3% | supermemory 49.7%, mem0 27.3% |
|
|
279
283
|
| LongMemEval-S (n=50) | QA accuracy | **76%** | tied with dense RAG |
|
|
284
|
+
| ERPNext cross-tool (n=6) | key-fact coverage | **82.0%** | grep/read baseline 70.8% |
|
|
280
285
|
| Graph build | LLM credits | **0** | per-token for most systems |
|
|
281
286
|
|
|
282
287
|
Every system ran on the same harness with the same model and budgets, scored by a judge blind-validated against a second judge (90.6% agreement, Cohen's kappa 0.81). Full per-system tables, the code-intelligence result, and reproduction commands: **[BENCHMARKS.md](./BENCHMARKS.md)**.
|
|
@@ -1011,6 +1016,12 @@ graphify label ./my-project # (re)name commun
|
|
|
1011
1016
|
graphify label ./my-project --backend=openai --model gpt-4o # force a specific backend and model
|
|
1012
1017
|
```
|
|
1013
1018
|
|
|
1019
|
+
`--no-dedup` also skips coalescing distinct non-AST nodes solely because they
|
|
1020
|
+
share a file and label. The Python equivalents are `build(chunks, dedup=False)`,
|
|
1021
|
+
`build_merge(chunks, graph_path, dedup=False)`, and
|
|
1022
|
+
`build_from_json(extraction, dedup=False)`. AST/semantic twins still reconcile to
|
|
1023
|
+
the canonical AST node, and document-file twin reconciliation remains enabled.
|
|
1024
|
+
|
|
1014
1025
|
> **Community names:** inside an agent (Claude Code, Gemini CLI) the agent names communities itself. When you run the bare CLI, `cluster-only` auto-names them with the configured backend (built-in or custom OpenAI-compatible provider) — pass `--no-label` to keep `Community N`, or run `graphify label` to (re)generate names on demand.
|
|
1015
1026
|
|
|
1016
1027
|
---
|
|
@@ -1053,6 +1064,12 @@ Made with [contrib.rocks](https://contrib.rocks).
|
|
|
1053
1064
|
|
|
1054
1065
|
---
|
|
1055
1066
|
|
|
1067
|
+
## Translations
|
|
1068
|
+
|
|
1069
|
+
The README is available in 32 languages. Use the language switcher at the top of this file to read it in yours, or browse [`docs/translations/`](docs/translations/). To improve a translation or add a new one, open a pull request against the matching file there.
|
|
1070
|
+
|
|
1071
|
+
---
|
|
1072
|
+
|
|
1056
1073
|
## Community and links
|
|
1057
1074
|
|
|
1058
1075
|
<p align="center">
|
|
@@ -68,6 +68,10 @@ graphify-out/
|
|
|
68
68
|
└── graph.json the full graph — query it anytime without re-reading your files
|
|
69
69
|
```
|
|
70
70
|
|
|
71
|
+
The persisted graph includes `graph.schema_version` so integrations can detect
|
|
72
|
+
incompatible format changes, plus `graph.graphify_version` identifying the
|
|
73
|
+
Graphify release that produced it.
|
|
74
|
+
|
|
71
75
|
**Works in** Claude Code, Cursor, Codex, Gemini CLI, GitHub Copilot, and 15+ more — [pick your platform](#install).
|
|
72
76
|
|
|
73
77
|
---
|
|
@@ -126,6 +130,7 @@ What you get out of the box:
|
|
|
126
130
|
| LOCOMO (n=300) | recall@10 | **0.497** | mem0 0.048, supermemory 0.149 |
|
|
127
131
|
| LOCOMO (n=300) | QA accuracy | 45.3% | supermemory 49.7%, mem0 27.3% |
|
|
128
132
|
| LongMemEval-S (n=50) | QA accuracy | **76%** | tied with dense RAG |
|
|
133
|
+
| ERPNext cross-tool (n=6) | key-fact coverage | **82.0%** | grep/read baseline 70.8% |
|
|
129
134
|
| Graph build | LLM credits | **0** | per-token for most systems |
|
|
130
135
|
|
|
131
136
|
Every system ran on the same harness with the same model and budgets, scored by a judge blind-validated against a second judge (90.6% agreement, Cohen's kappa 0.81). Full per-system tables, the code-intelligence result, and reproduction commands: **[BENCHMARKS.md](./BENCHMARKS.md)**.
|
|
@@ -860,6 +865,12 @@ graphify label ./my-project # (re)name commun
|
|
|
860
865
|
graphify label ./my-project --backend=openai --model gpt-4o # force a specific backend and model
|
|
861
866
|
```
|
|
862
867
|
|
|
868
|
+
`--no-dedup` also skips coalescing distinct non-AST nodes solely because they
|
|
869
|
+
share a file and label. The Python equivalents are `build(chunks, dedup=False)`,
|
|
870
|
+
`build_merge(chunks, graph_path, dedup=False)`, and
|
|
871
|
+
`build_from_json(extraction, dedup=False)`. AST/semantic twins still reconcile to
|
|
872
|
+
the canonical AST node, and document-file twin reconciliation remains enabled.
|
|
873
|
+
|
|
863
874
|
> **Community names:** inside an agent (Claude Code, Gemini CLI) the agent names communities itself. When you run the bare CLI, `cluster-only` auto-names them with the configured backend (built-in or custom OpenAI-compatible provider) — pass `--no-label` to keep `Community N`, or run `graphify label` to (re)generate names on demand.
|
|
864
875
|
|
|
865
876
|
---
|
|
@@ -902,6 +913,12 @@ Made with [contrib.rocks](https://contrib.rocks).
|
|
|
902
913
|
|
|
903
914
|
---
|
|
904
915
|
|
|
916
|
+
## Translations
|
|
917
|
+
|
|
918
|
+
The README is available in 32 languages. Use the language switcher at the top of this file to read it in yours, or browse [`docs/translations/`](docs/translations/). To improve a translation or add a new one, open a pull request against the matching file there.
|
|
919
|
+
|
|
920
|
+
---
|
|
921
|
+
|
|
905
922
|
## Community and links
|
|
906
923
|
|
|
907
924
|
<p align="center">
|
|
@@ -630,24 +630,39 @@ def graph_diff(G_old: nx.Graph, G_new: nx.Graph) -> dict:
|
|
|
630
630
|
return (u, v, data.get("relation", ""))
|
|
631
631
|
return (min(u, v), max(u, v), data.get("relation", ""))
|
|
632
632
|
|
|
633
|
-
|
|
634
|
-
|
|
633
|
+
def edge_dir(data: dict) -> tuple | None:
|
|
634
|
+
# Stored direction of an undirected edge (build_from_json, load_node_link_graph).
|
|
635
|
+
if "_src" in data and "_tgt" in data:
|
|
636
|
+
return (data["_src"], data["_tgt"])
|
|
637
|
+
return None
|
|
638
|
+
|
|
639
|
+
old_edge_dirs = {
|
|
640
|
+
edge_key(G_old, u, v, d): edge_dir(d)
|
|
635
641
|
for u, v, d in G_old.edges(data=True)
|
|
636
642
|
}
|
|
637
|
-
|
|
638
|
-
edge_key(G_new, u, v, d)
|
|
643
|
+
new_edge_dirs = {
|
|
644
|
+
edge_key(G_new, u, v, d): edge_dir(d)
|
|
639
645
|
for u, v, d in G_new.edges(data=True)
|
|
640
646
|
}
|
|
641
|
-
|
|
642
|
-
|
|
643
|
-
|
|
647
|
+
old_edge_keys = set(old_edge_dirs)
|
|
648
|
+
new_edge_keys = set(new_edge_dirs)
|
|
649
|
+
|
|
650
|
+
# A reversed edge (a->b became b->a) keeps its undirected key. Report it as
|
|
651
|
+
# removed + added only when both snapshots carry _src/_tgt and they differ,
|
|
652
|
+
# so graphs without the markers diff exactly as before (#4067).
|
|
653
|
+
reversed_edge_keys = {
|
|
654
|
+
k for k in old_edge_keys & new_edge_keys
|
|
655
|
+
if old_edge_dirs[k] and new_edge_dirs[k] and old_edge_dirs[k] != new_edge_dirs[k]
|
|
656
|
+
}
|
|
657
|
+
added_edge_keys = (new_edge_keys - old_edge_keys) | reversed_edge_keys
|
|
658
|
+
removed_edge_keys = (old_edge_keys - new_edge_keys) | reversed_edge_keys
|
|
644
659
|
|
|
645
660
|
new_edges_list = []
|
|
646
661
|
for u, v, d in G_new.edges(data=True):
|
|
647
662
|
if edge_key(G_new, u, v, d) in added_edge_keys:
|
|
648
663
|
new_edges_list.append({
|
|
649
|
-
"source": u,
|
|
650
|
-
"target": v,
|
|
664
|
+
"source": d.get("_src", u),
|
|
665
|
+
"target": d.get("_tgt", v),
|
|
651
666
|
"relation": d.get("relation", ""),
|
|
652
667
|
"confidence": d.get("confidence", ""),
|
|
653
668
|
})
|
|
@@ -656,8 +671,8 @@ def graph_diff(G_old: nx.Graph, G_new: nx.Graph) -> dict:
|
|
|
656
671
|
for u, v, d in G_old.edges(data=True):
|
|
657
672
|
if edge_key(G_old, u, v, d) in removed_edge_keys:
|
|
658
673
|
removed_edges_list.append({
|
|
659
|
-
"source": u,
|
|
660
|
-
"target": v,
|
|
674
|
+
"source": d.get("_src", u),
|
|
675
|
+
"target": d.get("_tgt", v),
|
|
661
676
|
"relation": d.get("relation", ""),
|
|
662
677
|
"confidence": d.get("confidence", ""),
|
|
663
678
|
})
|
|
@@ -874,13 +874,17 @@ def _doc_twin_remap(nodes: list) -> dict[str, str]:
|
|
|
874
874
|
return remap
|
|
875
875
|
|
|
876
876
|
|
|
877
|
-
def build_from_json(extraction: dict, *, directed: bool = False, root: str | Path | None = None
|
|
877
|
+
def build_from_json(extraction: dict, *, directed: bool = False, root: str | Path | None = None,
|
|
878
|
+
dedup: bool = True) -> nx.Graph:
|
|
878
879
|
"""Build a NetworkX graph from an extraction dict.
|
|
879
880
|
|
|
880
881
|
directed=True produces a DiGraph that preserves edge direction (source→target).
|
|
881
882
|
directed=False (default) produces an undirected Graph for backward compatibility.
|
|
882
883
|
root: if given, absolute source_file paths from semantic subagents are made
|
|
883
884
|
relative to root so all nodes share a consistent path key (#932).
|
|
885
|
+
dedup=False preserves distinct non-AST IDs rather than coalescing nodes by
|
|
886
|
+
file and label. AST/semantic and document-file twin reconciliation
|
|
887
|
+
remain enabled.
|
|
884
888
|
"""
|
|
885
889
|
_root = str(Path(root).resolve()) if root else None
|
|
886
890
|
# NetworkX <= 3.1 serialised edges as "links"; remap to "edges" for compatibility.
|
|
@@ -1158,6 +1162,8 @@ def build_from_json(extraction: dict, *, directed: bool = False, root: str | Pat
|
|
|
1158
1162
|
if key in _loc_collisions:
|
|
1159
1163
|
continue # ambiguous key: no safe canonical winner, leave ghost intact
|
|
1160
1164
|
if key in _loc_nodes and _loc_nodes[key] != nid:
|
|
1165
|
+
if not dedup and G.nodes[_loc_nodes[key]].get("_origin") != "ast":
|
|
1166
|
+
continue
|
|
1161
1167
|
_noloc_nodes[key] = nid
|
|
1162
1168
|
elif key not in _loc_nodes:
|
|
1163
1169
|
# Spec-conformant method ghost omitting class segment / leading dot
|
|
@@ -1599,7 +1605,7 @@ def build(
|
|
|
1599
1605
|
protected_ids=protected_ids,
|
|
1600
1606
|
)
|
|
1601
1607
|
_dedup_collapsed = _before_dedup - len(combined["nodes"])
|
|
1602
|
-
G = build_from_json(combined, directed=directed, root=_root)
|
|
1608
|
+
G = build_from_json(combined, directed=directed, root=_root, dedup=dedup)
|
|
1603
1609
|
# CLI reads this to tell a dedup shrink from a file deletion (#3774).
|
|
1604
1610
|
# Popped before to_json so it is not stored in graph.json.
|
|
1605
1611
|
if _dedup_collapsed:
|
|
@@ -2684,6 +2684,12 @@ def dispatch_command(cmd: str) -> None:
|
|
|
2684
2684
|
out_data = _jg.node_link_data(merged, edges="links")
|
|
2685
2685
|
except TypeError:
|
|
2686
2686
|
out_data = _jg.node_link_data(merged)
|
|
2687
|
+
# Write direction back into arc order, as to_json does (#563): the
|
|
2688
|
+
# loader stamped _src/_tgt, and compose() kept them on each edge.
|
|
2689
|
+
for _link in out_data.get("links", []):
|
|
2690
|
+
_ts, _tt = _link.pop("_src", None), _link.pop("_tgt", None)
|
|
2691
|
+
if _ts is not None and _tt is not None:
|
|
2692
|
+
_link["source"], _link["target"] = _ts, _tt
|
|
2687
2693
|
from graphify.paths import write_json_atomic
|
|
2688
2694
|
write_json_atomic(_current_path, out_data, indent=2)
|
|
2689
2695
|
sys.exit(0)
|
|
@@ -3081,6 +3087,8 @@ def dispatch_command(cmd: str) -> None:
|
|
|
3081
3087
|
_raw = json.loads(graph_path.read_text(encoding="utf-8"))
|
|
3082
3088
|
if "links" not in _raw and "edges" in _raw:
|
|
3083
3089
|
_raw = dict(_raw, links=_raw["edges"])
|
|
3090
|
+
from graphify.paths import restore_arc_direction as _rad
|
|
3091
|
+
_raw = _rad(_raw)
|
|
3084
3092
|
try:
|
|
3085
3093
|
G = _jg.node_link_graph(_raw, edges="links")
|
|
3086
3094
|
except TypeError:
|
|
@@ -22,7 +22,7 @@ from graphify.google_workspace import (
|
|
|
22
22
|
convert_google_workspace_file,
|
|
23
23
|
google_workspace_enabled,
|
|
24
24
|
)
|
|
25
|
-
from graphify.paths import GRAPHIFY_OUT, out_path
|
|
25
|
+
from graphify.paths import GRAPHIFY_OUT, GRAPHIFY_OUT_NAME, out_path
|
|
26
26
|
|
|
27
27
|
|
|
28
28
|
class FileType(str, Enum):
|
|
@@ -2397,6 +2397,27 @@ def _collapse_manifest_duplicates(
|
|
|
2397
2397
|
return result
|
|
2398
2398
|
|
|
2399
2399
|
|
|
2400
|
+
def _manifest_storage_anchor(manifest_path: str | Path | None, root: Path | None) -> Path | None:
|
|
2401
|
+
"""When a manifest lives under <repo>/graphify-out/manifest.json and root
|
|
2402
|
+
is a subfolder of <repo>, stored relative keys are anchored to <repo> (#3785)."""
|
|
2403
|
+
if root is None or not manifest_path:
|
|
2404
|
+
return root
|
|
2405
|
+
try:
|
|
2406
|
+
mp = Path(manifest_path).resolve()
|
|
2407
|
+
if mp.parent.name in ("graphify-out", GRAPHIFY_OUT_NAME):
|
|
2408
|
+
manifest_base = mp.parent.parent
|
|
2409
|
+
root_resolved = Path(root).resolve()
|
|
2410
|
+
if root_resolved != manifest_base:
|
|
2411
|
+
try:
|
|
2412
|
+
root_resolved.relative_to(manifest_base)
|
|
2413
|
+
return manifest_base
|
|
2414
|
+
except ValueError:
|
|
2415
|
+
pass
|
|
2416
|
+
except (OSError, RuntimeError):
|
|
2417
|
+
pass
|
|
2418
|
+
return root
|
|
2419
|
+
|
|
2420
|
+
|
|
2400
2421
|
def load_manifest(
|
|
2401
2422
|
manifest_path: str = _MANIFEST_PATH,
|
|
2402
2423
|
*,
|
|
@@ -2421,8 +2442,9 @@ def load_manifest(
|
|
|
2421
2442
|
return raw
|
|
2422
2443
|
if root is None:
|
|
2423
2444
|
return _collapse_manifest_duplicates(raw.items(), _nfc)
|
|
2445
|
+
anchor = _manifest_storage_anchor(manifest_path, root) or root
|
|
2424
2446
|
return _collapse_manifest_duplicates(
|
|
2425
|
-
raw.items(), lambda k: _nfc(_to_absolute_from_storage(k,
|
|
2447
|
+
raw.items(), lambda k: _nfc(_to_absolute_from_storage(k, anchor))
|
|
2426
2448
|
)
|
|
2427
2449
|
|
|
2428
2450
|
|
|
@@ -2624,18 +2646,10 @@ def save_manifest(
|
|
|
2624
2646
|
"semantic_hash": sem_h,
|
|
2625
2647
|
}
|
|
2626
2648
|
manifest[key] = entry
|
|
2627
|
-
if root is not None
|
|
2628
|
-
|
|
2629
|
-
# ``root`` (out-of-tree symlinked corpora, --include sources) keep
|
|
2630
|
-
# their absolute form so the manifest round-trips on the saving
|
|
2631
|
-
# machine even when not every entry can be portably encoded.
|
|
2632
|
-
# NFC after relativize so on-disk keys match what load_manifest
|
|
2633
|
-
# re-anchors and compares against (#2221). A seeded absolute key and
|
|
2634
|
-
# a seeded relative key for the same file collapse here too (#1964)
|
|
2635
|
-
# -- _collapse_manifest_duplicates keeps whichever is more recently
|
|
2636
|
-
# seen instead of whichever the dict comprehension iterates last.
|
|
2649
|
+
storage_root = _manifest_storage_anchor(manifest_path, root) if root is not None else None
|
|
2650
|
+
if storage_root is not None:
|
|
2637
2651
|
manifest = _collapse_manifest_duplicates(
|
|
2638
|
-
manifest.items(), lambda k: _nfc(_to_relative_for_storage(k,
|
|
2652
|
+
manifest.items(), lambda k: _nfc(_to_relative_for_storage(k, storage_root))
|
|
2639
2653
|
)
|
|
2640
2654
|
else:
|
|
2641
2655
|
manifest = _collapse_manifest_duplicates(manifest.items(), _nfc)
|
|
@@ -2813,10 +2827,32 @@ def detect_incremental(
|
|
|
2813
2827
|
# current scan was EXCLUDED (ignore rules / --exclude changed) and must
|
|
2814
2828
|
# not be reported as deleted. Mirrors the watch-side excluded-vs-deleted
|
|
2815
2829
|
# distinction (#1795).
|
|
2830
|
+
try:
|
|
2831
|
+
root_res: Path | None = Path(root).resolve() if root is not None else None
|
|
2832
|
+
except (OSError, RuntimeError):
|
|
2833
|
+
root_res = Path(root) if root is not None else None
|
|
2834
|
+
|
|
2835
|
+
def _in_root(path_str: str) -> bool:
|
|
2836
|
+
if root_res is None:
|
|
2837
|
+
return True
|
|
2838
|
+
p = Path(path_str)
|
|
2839
|
+
try:
|
|
2840
|
+
p.relative_to(root_res)
|
|
2841
|
+
return True
|
|
2842
|
+
except ValueError:
|
|
2843
|
+
pass
|
|
2844
|
+
try:
|
|
2845
|
+
p.resolve().relative_to(root_res)
|
|
2846
|
+
return True
|
|
2847
|
+
except (ValueError, OSError, RuntimeError):
|
|
2848
|
+
return False
|
|
2849
|
+
|
|
2816
2850
|
current_files = {_nfc(f) for flist in full["files"].values() for f in flist}
|
|
2817
2851
|
deleted_files: list[str] = []
|
|
2818
2852
|
excluded_files: list[str] = []
|
|
2819
2853
|
for f in manifest:
|
|
2854
|
+
if not _in_root(f):
|
|
2855
|
+
continue
|
|
2820
2856
|
if _nfc(f) in current_files:
|
|
2821
2857
|
continue
|
|
2822
2858
|
try:
|
|
@@ -172,6 +172,20 @@ from graphify.exporters.base import COMMUNITY_COLORS # noqa: E402,F401
|
|
|
172
172
|
from graphify.exporters.html import to_html # noqa: E402,F401
|
|
173
173
|
|
|
174
174
|
|
|
175
|
+
# Increment when the persisted graph structure changes incompatibly for consumers.
|
|
176
|
+
GRAPH_SCHEMA_VERSION = 1
|
|
177
|
+
|
|
178
|
+
|
|
179
|
+
def _graphify_version() -> str | None:
|
|
180
|
+
"""Return the installed graphify version for graph provenance."""
|
|
181
|
+
try:
|
|
182
|
+
from importlib.metadata import version
|
|
183
|
+
|
|
184
|
+
return version("graphifyy")
|
|
185
|
+
except Exception:
|
|
186
|
+
return None
|
|
187
|
+
|
|
188
|
+
|
|
175
189
|
# Fallback scores for an edge that carries a confidence tier but no
|
|
176
190
|
# confidence_score. The INFERRED default was 0.5, which references/extraction-spec.md
|
|
177
191
|
# rules out in as many words — "never omit it, never use 0.5 as a default" — and
|
|
@@ -433,6 +447,11 @@ def to_json(G: nx.Graph, communities: dict[int, list[str]], output_path: str, *,
|
|
|
433
447
|
if isinstance(data.get("graph"), dict) and "hyperedges" in data["graph"]:
|
|
434
448
|
data["graph"]["hyperedges"] = hyperedges
|
|
435
449
|
data["hyperedges"] = hyperedges
|
|
450
|
+
graph_metadata = data.setdefault("graph", {})
|
|
451
|
+
graph_metadata["schema_version"] = GRAPH_SCHEMA_VERSION
|
|
452
|
+
graphify_version = _graphify_version()
|
|
453
|
+
if graphify_version is not None:
|
|
454
|
+
graph_metadata["graphify_version"] = graphify_version
|
|
436
455
|
# Fallback provenance comes from the repo the graph is being written INTO
|
|
437
456
|
# (output_path lives in <target>/graphify-out/), never the shell's cwd —
|
|
438
457
|
# the same cwd-anchoring mistake #2316 fixed for `update`.
|
|
@@ -517,6 +536,7 @@ def to_cypher(G: nx.Graph, output_path: str) -> None:
|
|
|
517
536
|
lines.append(f"MERGE (n:{ftype} {{id: '{node_id_esc}', label: '{label}'}});")
|
|
518
537
|
lines.append("")
|
|
519
538
|
for u, v, data in G.edges(data=True):
|
|
539
|
+
u, v = data.get("_src", u), data.get("_tgt", v)
|
|
520
540
|
rel = _cypher_label(
|
|
521
541
|
(data.get("relation", "RELATES_TO") or "RELATES_TO").upper(),
|
|
522
542
|
"RELATES_TO",
|
|
@@ -1223,6 +1243,7 @@ def to_canvas(
|
|
|
1223
1243
|
# Generate edges - only between nodes both in canvas, cap at 200 highest-weight
|
|
1224
1244
|
all_edges_weighted: list[tuple[float, str, str, str]] = []
|
|
1225
1245
|
for u, v, edata in G.edges(data=True):
|
|
1246
|
+
u, v = edata.get("_src", u), edata.get("_tgt", v)
|
|
1226
1247
|
if u in all_canvas_nodes and v in all_canvas_nodes:
|
|
1227
1248
|
weight = edata.get("weight", 1.0)
|
|
1228
1249
|
relation = edata.get("relation", "")
|
|
@@ -91,8 +91,8 @@ def push_to_neo4j(
|
|
|
91
91
|
session.run(
|
|
92
92
|
f"MATCH (a {{id: $src}}), (b {{id: $tgt}}) "
|
|
93
93
|
f"MERGE (a)-[r:{rel}]->(b) SET r += $props",
|
|
94
|
-
src=u,
|
|
95
|
-
tgt=v,
|
|
94
|
+
src=data.get("_src", u),
|
|
95
|
+
tgt=data.get("_tgt", v),
|
|
96
96
|
props=props,
|
|
97
97
|
)
|
|
98
98
|
edges_pushed += 1
|
|
@@ -203,7 +203,7 @@ def push_to_falkordb(
|
|
|
203
203
|
graph.query(
|
|
204
204
|
f"MATCH (a {{id: $src}}), (b {{id: $tgt}}) "
|
|
205
205
|
f"MERGE (a)-[r:{rel}]->(b) SET r += $props",
|
|
206
|
-
{"src": u, "tgt": v, "props": props},
|
|
206
|
+
{"src": data.get("_src", u), "tgt": data.get("_tgt", v), "props": props},
|
|
207
207
|
)
|
|
208
208
|
edges_pushed += 1
|
|
209
209
|
|