graphifyy 0.9.75__tar.gz → 0.9.76__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.75/graphifyy.egg-info → graphifyy-0.9.76}/PKG-INFO +3 -2
- {graphifyy-0.9.75 → graphifyy-0.9.76}/graphify/analyze.py +13 -1
- {graphifyy-0.9.75 → graphifyy-0.9.76}/graphify/build.py +6 -3
- {graphifyy-0.9.75 → graphifyy-0.9.76}/graphify/cache.py +1 -1
- {graphifyy-0.9.75 → graphifyy-0.9.76}/graphify/cli.py +12 -20
- {graphifyy-0.9.75 → graphifyy-0.9.76}/graphify/cross_repo_calls.py +1 -1
- {graphifyy-0.9.75 → graphifyy-0.9.76}/graphify/cross_repo_types.py +1 -1
- {graphifyy-0.9.75 → graphifyy-0.9.76}/graphify/dedup.py +39 -32
- {graphifyy-0.9.75 → graphifyy-0.9.76}/graphify/detect.py +43 -1
- {graphifyy-0.9.75 → graphifyy-0.9.76}/graphify/extract.py +151 -38
- {graphifyy-0.9.75 → graphifyy-0.9.76}/graphify/extractors/elixir.py +24 -3
- {graphifyy-0.9.75 → graphifyy-0.9.76}/graphify/extractors/engine.py +180 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/graphify/extractors/json_config.py +45 -9
- {graphifyy-0.9.75 → graphifyy-0.9.76}/graphify/extractors/pascal.py +32 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/graphify/extractors/vbnet.py +12 -3
- {graphifyy-0.9.75 → graphifyy-0.9.76}/graphify/extractors/zig.py +17 -4
- {graphifyy-0.9.75 → graphifyy-0.9.76}/graphify/hooks.py +73 -2
- {graphifyy-0.9.75 → graphifyy-0.9.76}/graphify/interface_dispatch.py +1 -1
- {graphifyy-0.9.75 → graphifyy-0.9.76}/graphify/serve.py +90 -22
- {graphifyy-0.9.75 → graphifyy-0.9.76/graphifyy.egg-info}/PKG-INFO +3 -2
- {graphifyy-0.9.75 → graphifyy-0.9.76}/graphifyy.egg-info/SOURCES.txt +3 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/pyproject.toml +3 -2
- {graphifyy-0.9.75 → graphifyy-0.9.76}/tests/test_analyze.py +54 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/tests/test_cache.py +32 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/tests/test_cpp_nested_and_cli.py +39 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/tests/test_cross_repo_member_calls.py +1 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/tests/test_cross_repo_shared_types.py +1 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/tests/test_csharp_interface_dispatch.py +4 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/tests/test_dedup.py +82 -14
- {graphifyy-0.9.75 → graphifyy-0.9.76}/tests/test_detect.py +161 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/tests/test_elixir_unqualified_call_scope.py +32 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/tests/test_extract.py +279 -16
- {graphifyy-0.9.75 → graphifyy-0.9.76}/tests/test_hooks.py +64 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/tests/test_inferred_confidence_rubric.py +72 -12
- graphifyy-0.9.76/tests/test_json_schema_config.py +227 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/tests/test_languages.py +45 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/tests/test_loose_sibling_import_resolution.py +8 -4
- {graphifyy-0.9.75 → graphifyy-0.9.76}/tests/test_pascal.py +46 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/tests/test_path_cli.py +176 -0
- graphifyy-0.9.76/tests/test_php_language_construct_calls.py +258 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/tests/test_python_import_resolution.py +96 -0
- graphifyy-0.9.76/tests/test_svelte_extraction.py +205 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/tests/test_swift_cross_file_calls.py +3 -3
- {graphifyy-0.9.75 → graphifyy-0.9.76}/tests/test_swift_protocol_dispatch.py +1 -1
- {graphifyy-0.9.75 → graphifyy-0.9.76}/tests/test_vbnet_extractor.py +36 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/LICENSE +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/LICENSE-MIT +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/NOTICE +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/README.md +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/graphify/__init__.py +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/graphify/__main__.py +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/graphify/_minhash.py +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/graphify/affected.py +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/graphify/always_on/agents-md.md +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/graphify/always_on/antigravity-rules.md +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/graphify/always_on/claude-md.md +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/graphify/always_on/gemini-md.md +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/graphify/always_on/kiro-steering.md +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/graphify/always_on/vscode-instructions.md +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/graphify/benchmark.py +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/graphify/callflow_html.py +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/graphify/cargo_introspect.py +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/graphify/cluster.py +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/graphify/command-kilo.md +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/graphify/csharp_dispatch.py +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/graphify/diagnostics.py +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/graphify/export.py +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/graphify/exporters/__init__.py +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/graphify/exporters/base.py +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/graphify/exporters/graphdb.py +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/graphify/exporters/html.py +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/graphify/extractors/__init__.py +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/graphify/extractors/apex.py +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/graphify/extractors/base.py +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/graphify/extractors/bash.py +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/graphify/extractors/blade.py +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/graphify/extractors/cobol.py +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/graphify/extractors/commonlisp.py +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/graphify/extractors/csharp.py +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/graphify/extractors/dart.py +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/graphify/extractors/dm.py +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/graphify/extractors/erlang.py +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/graphify/extractors/fortran.py +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/graphify/extractors/go.py +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/graphify/extractors/julia.py +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/graphify/extractors/markdown.py +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/graphify/extractors/models.py +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/graphify/extractors/objc.py +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/graphify/extractors/ocaml.py +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/graphify/extractors/pascal_forms.py +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/graphify/extractors/powershell.py +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/graphify/extractors/r.py +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/graphify/extractors/razor.py +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/graphify/extractors/resolution.py +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/graphify/extractors/robot.py +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/graphify/extractors/rust.py +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/graphify/extractors/sln.py +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/graphify/extractors/solidity.py +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/graphify/extractors/sql.py +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/graphify/extractors/terraform.py +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/graphify/extractors/verilog.py +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/graphify/file_slice.py +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/graphify/global_graph.py +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/graphify/google_workspace.py +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/graphify/ids.py +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/graphify/ingest.py +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/graphify/install.py +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/graphify/llm.py +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/graphify/manifest.py +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/graphify/manifest_ingest.py +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/graphify/markdown_resolution.py +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/graphify/mcp_ingest.py +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/graphify/multigraph_compat.py +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/graphify/pascal_resolution.py +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/graphify/paths.py +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/graphify/pg_introspect.py +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/graphify/prs.py +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/graphify/querylog.py +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/graphify/reflect.py +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/graphify/report.py +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/graphify/resolver_registry.py +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/graphify/ruby_resolution.py +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/graphify/scip_ingest.py +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/graphify/security.py +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/graphify/semantic_cleanup.py +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/graphify/skill-agents.md +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/graphify/skill-aider.md +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/graphify/skill-amp.md +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/graphify/skill-claw.md +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/graphify/skill-codex.md +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/graphify/skill-copilot.md +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/graphify/skill-devin.md +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/graphify/skill-droid.md +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/graphify/skill-kilo.md +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/graphify/skill-kiro.md +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/graphify/skill-opencode.md +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/graphify/skill-pi.md +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/graphify/skill-trae.md +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/graphify/skill-vscode.md +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/graphify/skill-windows.md +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/graphify/skill.md +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/graphify/skills/agents/references/add-watch.md +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/graphify/skills/agents/references/exports.md +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/graphify/skills/agents/references/extraction-spec.md +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/graphify/skills/agents/references/github-and-merge.md +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/graphify/skills/agents/references/hooks.md +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/graphify/skills/agents/references/query.md +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/graphify/skills/agents/references/transcribe.md +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/graphify/skills/agents/references/update.md +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/graphify/skills/amp/references/add-watch.md +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/graphify/skills/amp/references/exports.md +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/graphify/skills/amp/references/extraction-spec.md +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/graphify/skills/amp/references/github-and-merge.md +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/graphify/skills/amp/references/hooks.md +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/graphify/skills/amp/references/query.md +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/graphify/skills/amp/references/transcribe.md +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/graphify/skills/amp/references/update.md +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/graphify/skills/claude/references/add-watch.md +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/graphify/skills/claude/references/exports.md +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/graphify/skills/claude/references/extraction-spec.md +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/graphify/skills/claude/references/github-and-merge.md +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/graphify/skills/claude/references/hooks.md +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/graphify/skills/claude/references/query.md +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/graphify/skills/claude/references/transcribe.md +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/graphify/skills/claude/references/update.md +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/graphify/skills/claw/references/add-watch.md +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/graphify/skills/claw/references/exports.md +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/graphify/skills/claw/references/extraction-spec.md +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/graphify/skills/claw/references/github-and-merge.md +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/graphify/skills/claw/references/hooks.md +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/graphify/skills/claw/references/query.md +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/graphify/skills/claw/references/transcribe.md +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/graphify/skills/claw/references/update.md +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/graphify/skills/codex/references/add-watch.md +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/graphify/skills/codex/references/exports.md +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/graphify/skills/codex/references/extraction-spec.md +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/graphify/skills/codex/references/github-and-merge.md +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/graphify/skills/codex/references/hooks.md +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/graphify/skills/codex/references/query.md +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/graphify/skills/codex/references/transcribe.md +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/graphify/skills/codex/references/update.md +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/graphify/skills/copilot/references/add-watch.md +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/graphify/skills/copilot/references/exports.md +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/graphify/skills/copilot/references/extraction-spec.md +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/graphify/skills/copilot/references/github-and-merge.md +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/graphify/skills/copilot/references/hooks.md +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/graphify/skills/copilot/references/query.md +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/graphify/skills/copilot/references/transcribe.md +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/graphify/skills/copilot/references/update.md +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/graphify/skills/droid/references/add-watch.md +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/graphify/skills/droid/references/exports.md +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/graphify/skills/droid/references/extraction-spec.md +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/graphify/skills/droid/references/github-and-merge.md +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/graphify/skills/droid/references/hooks.md +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/graphify/skills/droid/references/query.md +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/graphify/skills/droid/references/transcribe.md +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/graphify/skills/droid/references/update.md +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/graphify/skills/kilo/references/add-watch.md +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/graphify/skills/kilo/references/exports.md +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/graphify/skills/kilo/references/extraction-spec.md +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/graphify/skills/kilo/references/github-and-merge.md +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/graphify/skills/kilo/references/hooks.md +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/graphify/skills/kilo/references/query.md +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/graphify/skills/kilo/references/transcribe.md +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/graphify/skills/kilo/references/update.md +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/graphify/skills/kiro/references/add-watch.md +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/graphify/skills/kiro/references/exports.md +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/graphify/skills/kiro/references/extraction-spec.md +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/graphify/skills/kiro/references/github-and-merge.md +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/graphify/skills/kiro/references/hooks.md +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/graphify/skills/kiro/references/query.md +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/graphify/skills/kiro/references/transcribe.md +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/graphify/skills/kiro/references/update.md +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/graphify/skills/opencode/references/add-watch.md +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/graphify/skills/opencode/references/exports.md +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/graphify/skills/opencode/references/extraction-spec.md +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/graphify/skills/opencode/references/github-and-merge.md +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/graphify/skills/opencode/references/hooks.md +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/graphify/skills/opencode/references/query.md +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/graphify/skills/opencode/references/transcribe.md +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/graphify/skills/opencode/references/update.md +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/graphify/skills/pi/references/add-watch.md +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/graphify/skills/pi/references/exports.md +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/graphify/skills/pi/references/extraction-spec.md +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/graphify/skills/pi/references/github-and-merge.md +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/graphify/skills/pi/references/hooks.md +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/graphify/skills/pi/references/query.md +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/graphify/skills/pi/references/transcribe.md +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/graphify/skills/pi/references/update.md +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/graphify/skills/trae/references/add-watch.md +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/graphify/skills/trae/references/exports.md +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/graphify/skills/trae/references/extraction-spec.md +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/graphify/skills/trae/references/github-and-merge.md +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/graphify/skills/trae/references/hooks.md +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/graphify/skills/trae/references/query.md +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/graphify/skills/trae/references/transcribe.md +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/graphify/skills/trae/references/update.md +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/graphify/skills/vscode/references/add-watch.md +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/graphify/skills/vscode/references/exports.md +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/graphify/skills/vscode/references/extraction-spec.md +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/graphify/skills/vscode/references/github-and-merge.md +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/graphify/skills/vscode/references/hooks.md +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/graphify/skills/vscode/references/query.md +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/graphify/skills/vscode/references/transcribe.md +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/graphify/skills/vscode/references/update.md +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/graphify/skills/windows/references/add-watch.md +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/graphify/skills/windows/references/exports.md +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/graphify/skills/windows/references/extraction-spec.md +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/graphify/skills/windows/references/github-and-merge.md +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/graphify/skills/windows/references/hooks.md +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/graphify/skills/windows/references/query.md +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/graphify/skills/windows/references/transcribe.md +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/graphify/skills/windows/references/update.md +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/graphify/swift_dispatch.py +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/graphify/symbol_resolution.py +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/graphify/transcribe.py +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/graphify/tree_html.py +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/graphify/validate.py +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/graphify/watch.py +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/graphify/wiki.py +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/graphifyy.egg-info/dependency_links.txt +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/graphifyy.egg-info/entry_points.txt +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/graphifyy.egg-info/requires.txt +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/graphifyy.egg-info/top_level.txt +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/setup.cfg +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/tests/test_affected_cli.py +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/tests/test_affected_member_seed.py +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/tests/test_agents_platform.py +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/tests/test_anthropic_custom_endpoint.py +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/tests/test_antigravity_install.py +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/tests/test_apm_fallback_version.py +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/tests/test_architecture_doc.py +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/tests/test_astro_extraction.py +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/tests/test_astro_import_ids.py +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/tests/test_atomic_canvas_export.py +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/tests/test_atomic_version_stamp.py +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/tests/test_atomic_writes.py +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/tests/test_backend_env_isolation.py +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/tests/test_backend_extras.py +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/tests/test_benchmark.py +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/tests/test_benchmark_raw_graph.py +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/tests/test_blade_extractor.py +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/tests/test_build.py +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/tests/test_build_merge_dedup_scope.py +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/tests/test_build_merge_hyperedges_and_prune.py +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/tests/test_build_merge_shrink_guard.py +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/tests/test_builtin_global_type_refs.py +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/tests/test_callflow_html.py +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/tests/test_cargo_introspect.py +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/tests/test_cargo_missing_manifest.py +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/tests/test_carried_hyperedge_remap.py +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/tests/test_case_sensitive_resolution.py +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/tests/test_charmap_encoding.py +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/tests/test_chunking.py +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/tests/test_cjs_module_extension.py +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/tests/test_claude_cli_backend.py +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/tests/test_claude_md.py +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/tests/test_cli_broken_pipe.py +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/tests/test_cli_export.py +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/tests/test_cli_help.py +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/tests/test_cluster.py +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/tests/test_cluster_exclude_hubs.py +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/tests/test_cobol_extractor.py +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/tests/test_codebuddy.py +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/tests/test_community_hub_labels.py +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/tests/test_community_labels_skill.py +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/tests/test_confidence.py +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/tests/test_corrupt_graph_json.py +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/tests/test_cpp_method_declarations.py +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/tests/test_cpp_objc_cross_file_calls.py +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/tests/test_cpp_preprocess.py +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/tests/test_cross_extension_reexport_self_cycle.py +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/tests/test_cross_language_call_resolution.py +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/tests/test_cross_repo_external_call_guards.py +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/tests/test_csharp_call_site_generic_args.py +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/tests/test_csharp_enum_members.py +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/tests/test_csharp_field_generic_args.py +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/tests/test_csharp_generic_callsites.py +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/tests/test_csharp_member_calls.py +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/tests/test_csharp_member_nodes.py +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/tests/test_csharp_object_creation.py +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/tests/test_csharp_partial_classes.py +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/tests/test_csharp_tuple_type_refs.py +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/tests/test_csharp_type_resolution.py +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/tests/test_dart.py +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/tests/test_dedup_remaps_hyperedges.py +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/tests/test_dedup_shrink_refuses_force_write.py +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/tests/test_dedup_survivor_richness.py +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/tests/test_definition_file_portability.py +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/tests/test_devin.py +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/tests/test_docx_to_markdown.py +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/tests/test_dotnet.py +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/tests/test_duplicate_annotation_edges.py +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/tests/test_elixir_import_resolution.py +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/tests/test_erlang_extractor.py +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/tests/test_evidence_binding.py +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/tests/test_explain_cli.py +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/tests/test_export.py +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/tests/test_export_control_characters.py +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/tests/test_export_idempotent_writes.py +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/tests/test_export_path_length.py +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/tests/test_external_stub_endpoints.py +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/tests/test_extract_cache_location.py +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/tests/test_extract_cli.py +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/tests/test_extract_code_only_cli.py +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/tests/test_extract_php_closures.py +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/tests/test_extraction_spec_ids.py +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/tests/test_extractors_registry.py +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/tests/test_falkordb_integration.py +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/tests/test_file_label_disambiguation.py +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/tests/test_file_node_id_spec.py +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/tests/test_file_slice.py +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/tests/test_file_truncation_warning.py +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/tests/test_forwarding_review_findings.py +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/tests/test_gemini_hook.py +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/tests/test_global_add_tag_inference.py +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/tests/test_global_graph.py +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/tests/test_go_builtin_call_targets.py +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/tests/test_go_import_repoint.py +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/tests/test_go_interface_methods.py +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/tests/test_go_qualified_resolution.py +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/tests/test_god_nodes_cli.py +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/tests/test_god_nodes_exclude_hubs.py +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/tests/test_google_workspace.py +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/tests/test_graphdb_push_indexes.py +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/tests/test_hollow_chunks_arm_shrink_guard.py +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/tests/test_home_sandbox.py +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/tests/test_hook_chain_survives_skip.py +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/tests/test_hook_guard.py +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/tests/test_hook_guard_token_match.py +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/tests/test_hook_out_of_project_paths.py +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/tests/test_hook_strict.py +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/tests/test_hyperedge_member_shapes.py +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/tests/test_hyperedge_roundtrip.py +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/tests/test_hypergraph.py +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/tests/test_id_normalization_contract.py +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/tests/test_ignore_file_encoding.py +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/tests/test_image_vision.py +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/tests/test_import_extension_resolution.py +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/tests/test_import_self_loops.py +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/tests/test_imported_export_forwarding.py +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/tests/test_incomplete_build_guard.py +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/tests/test_incremental.py +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/tests/test_incremental_mtime_collision.py +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/tests/test_indirect_call_arrow_single_param_shadow.py +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/tests/test_indirect_call_block_scoped_shadow.py +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/tests/test_indirect_call_catch_binding_shadow.py +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/tests/test_indirect_call_external_import_shadow.py +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/tests/test_indirect_call_for_of_binding_shadow.py +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/tests/test_indirect_call_function_expression_shadow.py +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/tests/test_indirect_call_nested_closure_shadow.py +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/tests/test_indirect_dispatch.py +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/tests/test_indirect_dispatch_assign_return.py +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/tests/test_indirect_dispatch_getattr.py +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/tests/test_ingest.py +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/tests/test_ingest_url_type.py +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/tests/test_inherited_field_receivers.py +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/tests/test_injection_sentinel_coverage.py +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/tests/test_install.py +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/tests/test_install_references.py +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/tests/test_install_roundtrip.py +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/tests/test_install_strings.py +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/tests/test_install_upgrade.py +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/tests/test_install_version_stamp.py +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/tests/test_install_version_warning.py +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/tests/test_issue_3405_python_resolution.py +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/tests/test_issue_3472_source_file_collision.py +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/tests/test_java_enum_members.py +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/tests/test_java_member_calls.py +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/tests/test_java_type_resolution.py +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/tests/test_js_callback_calls.py +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/tests/test_js_destructured_export.py +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/tests/test_js_dynamic_import_affected.py +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/tests/test_js_dynamic_imports.py +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/tests/test_js_exported_fn_call_resolution.py +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/tests/test_js_exported_scalar_bindings.py +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/tests/test_js_import_resolution.py +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/tests/test_js_module_level_anonymous_calls.py +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/tests/test_js_this_member_expressions.py +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/tests/test_jsconfig_baseurl.py +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/tests/test_jsx_component_usage_calls.py +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/tests/test_kotlin_grammar.py +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/tests/test_kotlin_object_literal.py +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/tests/test_label_retry.py +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/tests/test_labeling.py +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/tests/test_language_resolvers.py +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/tests/test_llm_backends.py +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/tests/test_llm_parser.py +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/tests/test_llm_parser_reasoning.py +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/tests/test_long_path_hashing.py +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/tests/test_lua_import.py +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/tests/test_lua_method_calls.py +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/tests/test_manifest_ingest.py +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/tests/test_manifest_tomli_required.py +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/tests/test_markdown_code_spans.py +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/tests/test_mcp_ingest.py +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/tests/test_merge_chunks_validation.py +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/tests/test_merge_graphs_cli.py +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/tests/test_minhash.py +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/tests/test_multigraph_compat.py +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/tests/test_multigraph_diagnostics.py +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/tests/test_multilang.py +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/tests/test_no_dedup_flag.py +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/tests/test_node_id_canonical.py +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/tests/test_non_regular_files.py +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/tests/test_non_string_node_ids.py +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/tests/test_objc_category_interfaces.py +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/tests/test_objc_field_table_remap.py +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/tests/test_objc_member_calls.py +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/tests/test_objc_property_ivar_receivers.py +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/tests/test_obsidian_dangling_member.py +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/tests/test_obsidian_filename_cap.py +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/tests/test_obsidian_unicode_tags.py +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/tests/test_obsidian_vault_migration.py +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/tests/test_ocaml.py +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/tests/test_office_incremental.py +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/tests/test_office_limits.py +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/tests/test_ollama.py +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/tests/test_ollama_retry_cap.py +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/tests/test_openai_custom_endpoint.py +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/tests/test_out_dir_evidence.py +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/tests/test_oversized_document_slicing.py +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/tests/test_owned_type_sources.py +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/tests/test_package_json_subpath_imports.py +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/tests/test_partial_cache.py +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/tests/test_partial_extraction_warning.py +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/tests/test_pascal_call_scoping.py +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/tests/test_pascal_resolution.py +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/tests/test_paths.py +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/tests/test_pdf_extra_warning.py +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/tests/test_pdf_slicing.py +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/tests/test_pdf_token_estimate.py +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/tests/test_pg_introspect.py +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/tests/test_phantom_cross_package_call.py +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/tests/test_phantom_external_import.py +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/tests/test_php_object_creation.py +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/tests/test_php_type_resolution.py +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/tests/test_pin_hash_seed.py +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/tests/test_pipeline.py +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/tests/test_provider_registry.py +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/tests/test_prs.py +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/tests/test_prune_sweeps_orphans.py +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/tests/test_python_decorators.py +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/tests/test_python_parse_memoization.py +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/tests/test_python_underscore_resolution.py +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/tests/test_query_cli.py +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/tests/test_query_induced_edges.py +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/tests/test_query_mcp_direction.py +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/tests/test_query_names_its_graph.py +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/tests/test_querylog.py +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/tests/test_r_extractor.py +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/tests/test_rationale.py +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/tests/test_read_hook.py +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/tests/test_reflect.py +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/tests/test_relation_collapse_precedence.py +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/tests/test_replace_or_append_section.py +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/tests/test_report.py +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/tests/test_report_gap_thresholds.py +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/tests/test_resolve_memoization.py +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/tests/test_ruby_bare_self_send_calls.py +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/tests/test_ruby_resolution.py +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/tests/test_rust_builtin_type_hubs.py +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/tests/test_rust_macro_rules.py +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/tests/test_rust_self_member_calls.py +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/tests/test_scala_abstract_methods.py +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/tests/test_scala_context_bounds.py +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/tests/test_scala_self_type.py +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/tests/test_scala_top_level_binding.py +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/tests/test_scala_type_definition.py +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/tests/test_scip_ingest.py +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/tests/test_search_hook.py +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/tests/test_security.py +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/tests/test_semantic_cache_basename_recovery.py +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/tests/test_semantic_cache_out_root.py +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/tests/test_semantic_cleanup.py +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/tests/test_semantic_fragment_sanitize.py +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/tests/test_semantic_id_remap_root.py +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/tests/test_semantic_similarity.py +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/tests/test_serve.py +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/tests/test_serve_http.py +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/tests/test_settings_merge.py +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/tests/test_skill_auto_refresh.py +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/tests/test_skill_version_warning.py +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/tests/test_skillgen.py +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/tests/test_skillgen_input_path_injection.py +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/tests/test_solidity_extractor.py +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/tests/test_source_key_memoization.py +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/tests/test_sourceless_call_targets.py +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/tests/test_src_layout_import_resolution.py +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/tests/test_stale_prune.py +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/tests/test_stat_index_husk.py +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/tests/test_stat_index_multi_root.py +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/tests/test_stat_index_portability.py +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/tests/test_swift_builtin_noise.py +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/tests/test_swift_computed_properties.py +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/tests/test_swift_import_resolution.py +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/tests/test_swift_protocol_requirements.py +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/tests/test_symbol_resolution.py +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/tests/test_terraform.py +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/tests/test_terraform_modules.py +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/tests/test_trailing_newline_not_a_syntax_error.py +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/tests/test_transcribe.py +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/tests/test_tree_html.py +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/tests/test_ts_abstract_methods.py +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/tests/test_ts_decorators.py +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/tests/test_ts_generators.py +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/tests/test_ts_import_require.py +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/tests/test_ts_import_type_arguments.py +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/tests/test_ts_inheritance.py +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/tests/test_ts_namespace.py +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/tests/test_ts_new_expression_calls.py +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/tests/test_ts_parse_warning.py +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/tests/test_ts_receiver_member_calls.py +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/tests/test_type_only_import_cycles.py +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/tests/test_typescript_enum_members.py +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/tests/test_typescript_module_extensions.py +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/tests/test_uninstall_scope.py +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/tests/test_uninstall_symlink.py +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/tests/test_unmapped_at_alias_resolution.py +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/tests/test_unverified_semantic_shrink.py +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/tests/test_validate.py +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/tests/test_vue_extraction.py +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/tests/test_walk_python_tree_iterative.py +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/tests/test_watch.py +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/tests/test_watch_manifest_location.py +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/tests/test_wheel_packaging.py +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/tests/test_wiki.py +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/tests/test_wiki_link_filename_parity.py +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/tests/test_wiki_truncation_indicator.py +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/tests/test_word_count_cache.py +0 -0
- {graphifyy-0.9.75 → graphifyy-0.9.76}/tests/test_zero_node_no_cache.py +0 -0
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: graphifyy
|
|
3
|
-
Version: 0.9.
|
|
3
|
+
Version: 0.9.76
|
|
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
|
-
Project-URL: Homepage, https://
|
|
6
|
+
Project-URL: Homepage, https://graphify.com
|
|
7
|
+
Project-URL: Documentation, https://docs.graphify.com
|
|
7
8
|
Project-URL: Repository, https://github.com/Graphify-Labs/graphify
|
|
8
9
|
Project-URL: Issues, https://github.com/Graphify-Labs/graphify/issues
|
|
9
10
|
Keywords: claude,claude-code,codex,opencode,kilo,cursor,gemini,aider,kiro,pi,devin,knowledge-graph,rag,graphrag,obsidian,community-detection,tree-sitter,leiden,llm
|
|
@@ -468,6 +468,9 @@ def suggest_questions(
|
|
|
468
468
|
Generate questions the graph is uniquely positioned to answer.
|
|
469
469
|
Based on: AMBIGUOUS edges, bridge nodes, underexplored god nodes, isolated nodes.
|
|
470
470
|
Each question has a 'type', 'question', and 'why' field.
|
|
471
|
+
Interleave question types before applying top_n so an abundant early type
|
|
472
|
+
cannot crowd out later signals. Preserve the existing order within each type
|
|
473
|
+
and category generation order when the limit is smaller than the type count.
|
|
471
474
|
"""
|
|
472
475
|
if community_labels:
|
|
473
476
|
community_labels = {int(k) if isinstance(k, str) else k: v for k, v in community_labels.items()}
|
|
@@ -583,7 +586,16 @@ def suggest_questions(
|
|
|
583
586
|
),
|
|
584
587
|
}]
|
|
585
588
|
|
|
586
|
-
|
|
589
|
+
from itertools import zip_longest
|
|
590
|
+
|
|
591
|
+
by_type: dict[str, list[dict]] = {}
|
|
592
|
+
for question in questions:
|
|
593
|
+
by_type.setdefault(question["type"], []).append(question)
|
|
594
|
+
diversified = [
|
|
595
|
+
question for row in zip_longest(*by_type.values())
|
|
596
|
+
for question in row if question is not None
|
|
597
|
+
]
|
|
598
|
+
return diversified[:top_n]
|
|
587
599
|
|
|
588
600
|
|
|
589
601
|
def graph_diff(G_old: nx.Graph, G_new: nx.Graph) -> dict:
|
|
@@ -70,9 +70,12 @@ _CONFIDENCE_RANK: dict[str, int] = {"EXTRACTED": 3, "INFERRED": 2, "AMBIGUOUS":
|
|
|
70
70
|
# on-disk graph.json (written by the incremental update path) keep the edge with
|
|
71
71
|
# no matching node — an undeclared endpoint every loader materialises as an
|
|
72
72
|
# attribute-less phantom (#2873). For these relations we instead mint a typed
|
|
73
|
-
# external stub node so every edge endpoint resolves.
|
|
74
|
-
#
|
|
75
|
-
#
|
|
73
|
+
# external stub node so every edge endpoint resolves. `calls` is intentionally
|
|
74
|
+
# NOT in this set: a `calls` edge to an external target only survives when the
|
|
75
|
+
# module was also imported (its import edge pre-mints the stub, see the Python
|
|
76
|
+
# external-call resolution in #3793); a `calls` edge to a never-imported target
|
|
77
|
+
# is still dropped as a phantom (#3156). External stubs stay out of god-node
|
|
78
|
+
# ranking regardless (analyze._is_concept_node filters source_file="").
|
|
76
79
|
_EXTERNAL_STUB_RELATIONS: frozenset[str] = frozenset(
|
|
77
80
|
{"imports", "imports_from", "re_exports"}
|
|
78
81
|
)
|
|
@@ -36,7 +36,7 @@ except Exception:
|
|
|
36
36
|
_EXTRACTOR_VERSION = "unknown"
|
|
37
37
|
|
|
38
38
|
# Bump when AST cache-key semantics change independently of the package version.
|
|
39
|
-
_AST_CACHE_SCHEMA =
|
|
39
|
+
_AST_CACHE_SCHEMA = 5 # Python receiver-shadow facts in persisted raw calls.
|
|
40
40
|
|
|
41
41
|
# Version dirs already swept this process — cleanup runs once per (base, version).
|
|
42
42
|
_cleaned_ast_dirs: set[str] = set()
|
|
@@ -1628,7 +1628,7 @@ def dispatch_command(cmd: str) -> None:
|
|
|
1628
1628
|
file=sys.stderr,
|
|
1629
1629
|
)
|
|
1630
1630
|
sys.exit(1)
|
|
1631
|
-
from graphify.serve import
|
|
1631
|
+
from graphify.serve import _resolve_path_endpoint
|
|
1632
1632
|
from networkx.readwrite import json_graph
|
|
1633
1633
|
import networkx as _nx
|
|
1634
1634
|
|
|
@@ -1679,16 +1679,15 @@ def dispatch_command(cmd: str) -> None:
|
|
|
1679
1679
|
G = json_graph.node_link_graph(_raw, edges="links")
|
|
1680
1680
|
except TypeError:
|
|
1681
1681
|
G = json_graph.node_link_graph(_raw)
|
|
1682
|
-
src_scored =
|
|
1683
|
-
tgt_scored =
|
|
1684
|
-
|
|
1685
|
-
|
|
1686
|
-
|
|
1687
|
-
|
|
1688
|
-
|
|
1689
|
-
|
|
1690
|
-
|
|
1691
|
-
tgt_nid = _pick_scored_endpoint(G, tgt_scored, target_label)
|
|
1682
|
+
src_nid, src_scored, src_err = _resolve_path_endpoint(G, source_label)
|
|
1683
|
+
tgt_nid, tgt_scored, tgt_err = _resolve_path_endpoint(G, target_label)
|
|
1684
|
+
for _label, _nid, _err in (
|
|
1685
|
+
(source_label, src_nid, src_err),
|
|
1686
|
+
(target_label, tgt_nid, tgt_err),
|
|
1687
|
+
):
|
|
1688
|
+
if _err or _nid is None:
|
|
1689
|
+
print(_err or f"No node matching '{_label}' found.", file=sys.stderr)
|
|
1690
|
+
sys.exit(1)
|
|
1692
1691
|
# Ambiguity guard: when both queries resolve to the same node, the
|
|
1693
1692
|
# shortest path is trivially zero hops, which is almost never what the
|
|
1694
1693
|
# caller wanted (see bug #828).
|
|
@@ -1805,7 +1804,7 @@ def dispatch_command(cmd: str) -> None:
|
|
|
1805
1804
|
if len(sys.argv) < 3:
|
|
1806
1805
|
print('Usage: graphify explain "<node>" [--graph path]', file=sys.stderr)
|
|
1807
1806
|
sys.exit(1)
|
|
1808
|
-
from graphify.serve import _find_node, find_node_ambiguity
|
|
1807
|
+
from graphify.serve import _ambiguity_message, _find_node, find_node_ambiguity
|
|
1809
1808
|
from networkx.readwrite import json_graph
|
|
1810
1809
|
|
|
1811
1810
|
label = sys.argv[2]
|
|
@@ -1834,14 +1833,7 @@ def dispatch_command(cmd: str) -> None:
|
|
|
1834
1833
|
sys.exit(0)
|
|
1835
1834
|
rivals = find_node_ambiguity(G, label)
|
|
1836
1835
|
if rivals:
|
|
1837
|
-
print(
|
|
1838
|
-
for rival in rivals:
|
|
1839
|
-
print(f" {G.nodes[rival].get('source_file') or rival}")
|
|
1840
|
-
print(f" id: {rival}")
|
|
1841
|
-
print(
|
|
1842
|
-
f"Retry with path::symbol using one of the paths above (e.g. "
|
|
1843
|
-
f"<path>::{label}) or the full node id."
|
|
1844
|
-
)
|
|
1836
|
+
print(_ambiguity_message(G, label, rivals))
|
|
1845
1837
|
sys.exit(1)
|
|
1846
1838
|
nid = matches[0]
|
|
1847
1839
|
d = G.nodes[nid]
|
|
@@ -235,7 +235,7 @@ def link_cross_repo_member_calls(merged: "nx.Graph") -> int:
|
|
|
235
235
|
relation="calls",
|
|
236
236
|
context="cross_repo",
|
|
237
237
|
confidence="INFERRED",
|
|
238
|
-
confidence_score=0.
|
|
238
|
+
confidence_score=0.85,
|
|
239
239
|
source_file=str(caller_data.get("source_file") or ""),
|
|
240
240
|
source_location=entry.get("line"),
|
|
241
241
|
weight=1.0,
|
|
@@ -65,7 +65,7 @@ def link_shared_type_declarations(merged: "nx.Graph") -> int:
|
|
|
65
65
|
relation=SHARED_TYPE_RELATION,
|
|
66
66
|
context="cross_repo",
|
|
67
67
|
confidence="INFERRED",
|
|
68
|
-
confidence_score=0.
|
|
68
|
+
confidence_score=0.85,
|
|
69
69
|
source_file=str(merged.nodes[left].get("source_file") or ""),
|
|
70
70
|
weight=1.0,
|
|
71
71
|
_src=left,
|
|
@@ -678,6 +678,30 @@ def deduplicate_entities(
|
|
|
678
678
|
if prot is not None:
|
|
679
679
|
prot_by_root[new_root] = prot
|
|
680
680
|
|
|
681
|
+
def _crossfile_union(left: dict, right: dict, *, with_prot: bool) -> None:
|
|
682
|
+
nonlocal exact_merges
|
|
683
|
+
if _crossfile_fileanchored_blocked(left, right):
|
|
684
|
+
return
|
|
685
|
+
left_id = left["id"]
|
|
686
|
+
right_id = right["id"]
|
|
687
|
+
if with_prot:
|
|
688
|
+
px = _get_prot(left_id)
|
|
689
|
+
py = _get_prot(right_id)
|
|
690
|
+
if px is not None and py is not None and px != py:
|
|
691
|
+
return
|
|
692
|
+
if uf.find(left_id) == uf.find(right_id):
|
|
693
|
+
return
|
|
694
|
+
if with_prot:
|
|
695
|
+
_union_with_prot(left_id, right_id)
|
|
696
|
+
else:
|
|
697
|
+
uf.union(left_id, right_id)
|
|
698
|
+
exact_merges += 1
|
|
699
|
+
|
|
700
|
+
def _crossfile_join(members: list[dict], *, with_prot: bool) -> None:
|
|
701
|
+
for index, left in enumerate(members):
|
|
702
|
+
for right in members[index + 1:]:
|
|
703
|
+
_crossfile_union(left, right, with_prot=with_prot)
|
|
704
|
+
|
|
681
705
|
for key, group in norm_to_nodes.items():
|
|
682
706
|
if len(group) <= 1:
|
|
683
707
|
continue
|
|
@@ -726,20 +750,15 @@ def deduplicate_entities(
|
|
|
726
750
|
# it is provably safe (#2182). `concept` is the one file_type meant to
|
|
727
751
|
# unify across files (#1284) — code is keyed by ID (#1205) and
|
|
728
752
|
# image/paper labels are often shared basenames (logo.png), so both stay
|
|
729
|
-
# blocked. rationale
|
|
730
|
-
# reads as an entity
|
|
731
|
-
#
|
|
732
|
-
#
|
|
733
|
-
#
|
|
734
|
-
# corpora almost no entity node is typed `concept` and this merge never
|
|
735
|
-
# got to run on them. A file's own node and its headings still never
|
|
736
|
-
# merge (#1284, #3094).
|
|
753
|
+
# blocked. A rationale or document node can still enter this list when
|
|
754
|
+
# it reads as an entity (#296). Each union calls
|
|
755
|
+
# `_crossfile_fileanchored_blocked`, so that node does not join a node
|
|
756
|
+
# from another file (#3094). Concept nodes still join across files.
|
|
757
|
+
# A file's own node and its headings never enter the list (#1284).
|
|
737
758
|
# Provenance is required (#1178), and the entropy gate mirrors Pass 2 so
|
|
738
759
|
# short generic labels ("API") stay distinct — both untouched here.
|
|
739
|
-
#
|
|
740
|
-
#
|
|
741
|
-
# near-identical boilerplate and heading siblings stay blocked.
|
|
742
|
-
# Sorting by id keeps the winner order-independent.
|
|
760
|
+
# Pass 2 still calls the same block, so near-identical boilerplate stays
|
|
761
|
+
# blocked (#1284). Sorting by id keeps the pair order stable.
|
|
743
762
|
mergeable = sorted(
|
|
744
763
|
(n for n in group
|
|
745
764
|
if (n.get("file_type") == "concept"
|
|
@@ -758,30 +777,18 @@ def deduplicate_entities(
|
|
|
758
777
|
# NEVER collapse them during incremental merge.
|
|
759
778
|
continue
|
|
760
779
|
if prot_members:
|
|
761
|
-
# Mixed:
|
|
762
|
-
#
|
|
780
|
+
# Mixed: fold an incoming node into at most one protected
|
|
781
|
+
# survivor. Protected nodes stay separate from each other.
|
|
782
|
+
# Incoming nodes the block still allows are joined to each
|
|
783
|
+
# other, so a blocked winner does not leave them apart.
|
|
763
784
|
canonical_winner = _pick_winner(prot_members)
|
|
764
785
|
for inc in inc_members:
|
|
765
|
-
|
|
766
|
-
|
|
767
|
-
if px is not None and py is not None and px != py:
|
|
768
|
-
continue
|
|
769
|
-
if uf.find(canonical_winner["id"]) != uf.find(inc["id"]):
|
|
770
|
-
_union_with_prot(canonical_winner["id"], inc["id"])
|
|
771
|
-
exact_merges += 1
|
|
786
|
+
_crossfile_union(canonical_winner, inc, with_prot=True)
|
|
787
|
+
_crossfile_join(inc_members, with_prot=True)
|
|
772
788
|
else:
|
|
773
|
-
|
|
774
|
-
winner = _pick_winner(inc_members)
|
|
775
|
-
for node in inc_members:
|
|
776
|
-
if uf.find(winner["id"]) != uf.find(node["id"]):
|
|
777
|
-
_union_with_prot(winner["id"], node["id"])
|
|
778
|
-
exact_merges += 1
|
|
789
|
+
_crossfile_join(inc_members, with_prot=True)
|
|
779
790
|
else:
|
|
780
|
-
|
|
781
|
-
for node in mergeable:
|
|
782
|
-
if uf.find(winner["id"]) != uf.find(node["id"]):
|
|
783
|
-
uf.union(winner["id"], node["id"])
|
|
784
|
-
exact_merges += 1
|
|
791
|
+
_crossfile_join(mergeable, with_prot=False)
|
|
785
792
|
|
|
786
793
|
# ── pass 2: MinHash/LSH + Jaro-Winkler (high-entropy nodes only) ─────────
|
|
787
794
|
candidates: list[dict] = []
|
|
@@ -971,6 +971,31 @@ _SKIP_FILES = {
|
|
|
971
971
|
# unconditionally pruned above; only the ambiguous bare name is gated here.
|
|
972
972
|
_JS_SNAPSHOT_TEST_ROOTS = frozenset({"__tests__", "__test__"})
|
|
973
973
|
|
|
974
|
+
# Platforms whose project-scope skills dir is one level below the hidden dir
|
|
975
|
+
# (install.py: pi -> .pi/agent/skills, kilo -> .config/kilo/skills).
|
|
976
|
+
_NESTED_SKILL_HOLDERS = frozenset({(".pi", "agent"), (".config", "kilo")})
|
|
977
|
+
|
|
978
|
+
# Single files `graphify install` writes whole into a project (#4057): the
|
|
979
|
+
# always-on rules/steering/workflow files and the opencode/kilo hook plugins.
|
|
980
|
+
# Matched on the hidden holder dir plus the exact relative path, never on the
|
|
981
|
+
# bare file name, so e.g. docs/graphify.md or src/plugins/graphify.js stay.
|
|
982
|
+
# Files graphify only adds a section or entry to (AGENTS.md, CLAUDE.md,
|
|
983
|
+
# settings.json, ...) belong to the user and are not listed here.
|
|
984
|
+
_GRAPHIFY_INSTALLED_FILES = frozenset({
|
|
985
|
+
(".agents", "rules", "graphify.md"), # antigravity
|
|
986
|
+
(".agents", "workflows", "graphify.md"), # antigravity
|
|
987
|
+
(".cursor", "rules", "graphify.mdc"), # cursor
|
|
988
|
+
(".kilo", "plugins", "graphify.js"), # kilo
|
|
989
|
+
(".kiro", "steering", "graphify.md"), # kiro
|
|
990
|
+
(".opencode", "plugins", "graphify.js"), # opencode
|
|
991
|
+
(".windsurf", "rules", "graphify.md"), # devin
|
|
992
|
+
})
|
|
993
|
+
|
|
994
|
+
|
|
995
|
+
def _is_installed_graphify_file(path: "Path") -> bool:
|
|
996
|
+
"""True for a single file `graphify install` wrote into the project (#4057)."""
|
|
997
|
+
return path.parts[-3:] in _GRAPHIFY_INSTALLED_FILES
|
|
998
|
+
|
|
974
999
|
# Files a coverage tool writes into its own output dir. Any one of them is proof
|
|
975
1000
|
# the directory is generated: lcov (lcov.info), nyc/Istanbul (coverage-final.json,
|
|
976
1001
|
# clover.xml, the lcov-report/ subtree), coverage.py (coverage.xml, .coverage),
|
|
@@ -1128,6 +1153,21 @@ def _is_noise_dir(part: str, parent: "Path | None" = None) -> bool:
|
|
|
1128
1153
|
# worktrees/ nested inside a dotted dir (e.g. .claude/worktrees/, .git/worktrees/)
|
|
1129
1154
|
if part == "worktrees" and parent is not None and parent.name.startswith("."):
|
|
1130
1155
|
return True
|
|
1156
|
+
# graphify's own skill folder, as `graphify install --project` writes it
|
|
1157
|
+
# (#4057): <hidden dir>/skills/graphify/ (.claude, .codex, .agents, ...),
|
|
1158
|
+
# .pi/agent/skills/graphify/, .config/kilo/skills/graphify/ and
|
|
1159
|
+
# .aider/graphify/. Matched on the whole path shape rather than the bare
|
|
1160
|
+
# names "skills"/"graphify" (#2479), so graphify's own source tree
|
|
1161
|
+
# (graphify/skills/<host>/), a top-level skills/graphify/ and the user's
|
|
1162
|
+
# other skills under .claude/skills/ are still indexed.
|
|
1163
|
+
if part == "graphify" and parent is not None:
|
|
1164
|
+
if parent.name == ".aider":
|
|
1165
|
+
return True
|
|
1166
|
+
if parent.name == "skills":
|
|
1167
|
+
holder = parent.parent
|
|
1168
|
+
if holder.name.startswith(".") and holder.name != "..":
|
|
1169
|
+
return True
|
|
1170
|
+
return (holder.parent.name, holder.name) in _NESTED_SKILL_HOLDERS
|
|
1131
1171
|
return False
|
|
1132
1172
|
|
|
1133
1173
|
|
|
@@ -1771,7 +1811,7 @@ def ignored_predicate(
|
|
|
1771
1811
|
rel_parts = path.relative_to(root).parts
|
|
1772
1812
|
except ValueError:
|
|
1773
1813
|
return False # outside the scan root: detect() never considered it
|
|
1774
|
-
if path.name in _SKIP_FILES:
|
|
1814
|
+
if path.name in _SKIP_FILES or _is_installed_graphify_file(path):
|
|
1775
1815
|
return True
|
|
1776
1816
|
# Noise-dir pruning: os.walk never descends these, so anything beneath
|
|
1777
1817
|
# one is excluded from the corpus regardless of ignore patterns.
|
|
@@ -2014,6 +2054,8 @@ def detect(root: Path, *, follow_symlinks: bool | None = None, google_workspace:
|
|
|
2014
2054
|
if fname in _SKIP_FILES:
|
|
2015
2055
|
continue
|
|
2016
2056
|
p = dp / fname
|
|
2057
|
+
if _is_installed_graphify_file(p):
|
|
2058
|
+
continue
|
|
2017
2059
|
if p not in seen:
|
|
2018
2060
|
seen.add(p)
|
|
2019
2061
|
all_files.append(p)
|