code-graph-rag 0.0.670__tar.gz → 0.0.720__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.
- {code_graph_rag-0.0.670/code_graph_rag.egg-info → code_graph_rag-0.0.720}/PKG-INFO +21 -2
- {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/PYPI_README.md +15 -1
- {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/README.md +30 -25
- {code_graph_rag-0.0.670 → code_graph_rag-0.0.720/code_graph_rag.egg-info}/PKG-INFO +21 -2
- {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/code_graph_rag.egg-info/SOURCES.txt +19 -0
- {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/code_graph_rag.egg-info/requires.txt +7 -0
- {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/cli.py +101 -11
- {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/cli_help.py +10 -0
- {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/config.py +3 -0
- {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/constants/ast_csharp.py +26 -0
- {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/constants/ast_dart.py +7 -0
- {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/constants/ast_java.py +71 -1
- {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/constants/ast_lua.py +4 -0
- {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/constants/ast_python.py +6 -0
- {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/constants/ast_rust.py +3 -0
- code_graph_rag-0.0.720/codebase_rag/constants/ast_scala.py +37 -0
- {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/constants/cli.py +9 -0
- {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/constants/core.py +8 -1
- {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/constants/graph.py +58 -0
- {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/constants/languages.py +22 -0
- {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/dead_code.py +33 -1
- {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/graph_updater.py +463 -2
- {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/logs.py +50 -2
- code_graph_rag-0.0.720/codebase_rag/parser_fingerprint.py +143 -0
- code_graph_rag-0.0.720/codebase_rag/parsers/ast_grep_patterns/bash.yaml +14 -0
- code_graph_rag-0.0.720/codebase_rag/parsers/ast_grep_patterns/elixir.yaml +32 -0
- code_graph_rag-0.0.720/codebase_rag/parsers/ast_grep_patterns/haskell.yaml +26 -0
- code_graph_rag-0.0.720/codebase_rag/parsers/ast_grep_patterns/kotlin.yaml +24 -0
- code_graph_rag-0.0.720/codebase_rag/parsers/ast_grep_patterns/nix.yaml +14 -0
- code_graph_rag-0.0.720/codebase_rag/parsers/ast_grep_patterns/solidity.yaml +21 -0
- code_graph_rag-0.0.720/codebase_rag/parsers/ast_grep_patterns/swift.yaml +17 -0
- {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/parsers/ast_grep_tier.py +188 -28
- code_graph_rag-0.0.720/codebase_rag/parsers/build_lock.py +152 -0
- {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/parsers/call_processor.py +38 -4
- {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/parsers/call_resolver.py +71 -0
- {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/parsers/class_ingest/mixin.py +28 -5
- {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/parsers/cpp_frontend/__init__.py +2 -0
- {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/parsers/cpp_frontend/frontend.py +14 -0
- {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/parsers/csharp_frontend/frontend.py +92 -19
- {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/parsers/csharp_frontend/roslyn/Frontend.cs +349 -10
- {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/parsers/definition_processor.py +37 -13
- {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/parsers/factory.py +7 -0
- {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/parsers/flow_access/processor.py +793 -22
- {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/parsers/frontends/__init__.py +2 -0
- {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/parsers/frontends/csharp.py +3 -0
- code_graph_rag-0.0.720/codebase_rag/parsers/frontends/java.py +47 -0
- {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/parsers/frontends/protocol.py +18 -0
- code_graph_rag-0.0.720/codebase_rag/parsers/frontends/python.py +33 -0
- {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/parsers/function_ingest.py +20 -0
- {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/parsers/go_frontend/frontend.py +69 -29
- {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/parsers/import_processor.py +16 -1
- {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/parsers/io_access/__init__.py +4 -0
- {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/parsers/io_access/constants.py +3 -0
- {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/parsers/io_access/descriptor.py +87 -0
- {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/parsers/io_access/extract.py +322 -16
- {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/parsers/io_access/processor.py +129 -30
- {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/parsers/io_access/registry.py +106 -0
- {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/parsers/java/method_resolver.py +185 -32
- {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/parsers/java/type_inference.py +69 -0
- {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/parsers/java/variable_analyzer.py +104 -22
- code_graph_rag-0.0.720/codebase_rag/parsers/java_frontend/__init__.py +15 -0
- code_graph_rag-0.0.720/codebase_rag/parsers/java_frontend/frontend.py +259 -0
- code_graph_rag-0.0.720/codebase_rag/parsers/java_frontend/javac/cgr/Frontend.java +418 -0
- code_graph_rag-0.0.720/codebase_rag/parsers/java_generated.py +103 -0
- code_graph_rag-0.0.720/codebase_rag/parsers/java_lombok.py +183 -0
- code_graph_rag-0.0.720/codebase_rag/parsers/py_frontend/__init__.py +11 -0
- code_graph_rag-0.0.720/codebase_rag/parsers/py_frontend/frontend.py +229 -0
- {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/parsers/type_inference.py +38 -0
- {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/parsers/utils.py +69 -0
- code_graph_rag-0.0.720/codebase_rag/services/graph_diff.py +248 -0
- {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/services/protobuf_service.py +74 -13
- code_graph_rag-0.0.720/codebase_rag/services/provenance.py +288 -0
- {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/stack/constants.py +10 -3
- {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/tools/code_retrieval.py +33 -4
- {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/tools/directory_lister.py +1 -1
- {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/tools/tool_descriptions.py +7 -1
- {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/types_defs.py +18 -8
- {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/utils/source_extraction.py +7 -1
- {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codec/schema_pb2.py +26 -26
- {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codec/schema_pb2.pyi +6 -2
- {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/pyproject.toml +12 -1
- code_graph_rag-0.0.670/codebase_rag/constants/ast_scala.py +0 -17
- code_graph_rag-0.0.670/codebase_rag/parser_fingerprint.py +0 -73
- {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/LICENSE +0 -0
- {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/cgr/__init__.py +0 -0
- {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/code_graph_rag.egg-info/dependency_links.txt +0 -0
- {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/code_graph_rag.egg-info/entry_points.txt +0 -0
- {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/code_graph_rag.egg-info/top_level.txt +0 -0
- {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/__init__.py +0 -0
- {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/analyzers/__init__.py +0 -0
- {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/analyzers/ast_grep_analyzer.py +0 -0
- {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/analyzers/ast_grep_rules/patterns/c.yaml +0 -0
- {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/analyzers/ast_grep_rules/patterns/cpp.yaml +0 -0
- {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/analyzers/ast_grep_rules/patterns/csharp.yaml +0 -0
- {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/analyzers/ast_grep_rules/patterns/dart.yaml +0 -0
- {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/analyzers/ast_grep_rules/patterns/go.yaml +0 -0
- {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/analyzers/ast_grep_rules/patterns/java.yaml +0 -0
- {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/analyzers/ast_grep_rules/patterns/javascript.yaml +0 -0
- {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/analyzers/ast_grep_rules/patterns/lua.yaml +0 -0
- {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/analyzers/ast_grep_rules/patterns/php.yaml +0 -0
- {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/analyzers/ast_grep_rules/patterns/python.yaml +0 -0
- {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/analyzers/ast_grep_rules/patterns/ruby.yaml +0 -0
- {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/analyzers/ast_grep_rules/patterns/rust.yaml +0 -0
- {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/analyzers/ast_grep_rules/patterns/scala.yaml +0 -0
- {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/analyzers/ast_grep_rules/patterns/tsx.yaml +0 -0
- {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/analyzers/ast_grep_rules/patterns/typescript.yaml +0 -0
- {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/analyzers/ast_grep_rules/security/c.yaml +0 -0
- {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/analyzers/ast_grep_rules/security/cpp.yaml +0 -0
- {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/analyzers/ast_grep_rules/security/csharp.yaml +0 -0
- {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/analyzers/ast_grep_rules/security/dart.yaml +0 -0
- {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/analyzers/ast_grep_rules/security/go.yaml +0 -0
- {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/analyzers/ast_grep_rules/security/java.yaml +0 -0
- {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/analyzers/ast_grep_rules/security/javascript.yaml +0 -0
- {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/analyzers/ast_grep_rules/security/lua.yaml +0 -0
- {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/analyzers/ast_grep_rules/security/php.yaml +0 -0
- {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/analyzers/ast_grep_rules/security/python.yaml +0 -0
- {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/analyzers/ast_grep_rules/security/ruby.yaml +0 -0
- {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/analyzers/ast_grep_rules/security/rust.yaml +0 -0
- {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/analyzers/ast_grep_rules/security/scala.yaml +0 -0
- {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/analyzers/ast_grep_rules/security/tsx.yaml +0 -0
- {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/analyzers/ast_grep_rules/security/typescript.yaml +0 -0
- {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/analyzers/ast_grep_rules/smells/c.yaml +0 -0
- {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/analyzers/ast_grep_rules/smells/cpp.yaml +0 -0
- {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/analyzers/ast_grep_rules/smells/csharp.yaml +0 -0
- {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/analyzers/ast_grep_rules/smells/dart.yaml +0 -0
- {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/analyzers/ast_grep_rules/smells/go.yaml +0 -0
- {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/analyzers/ast_grep_rules/smells/java.yaml +0 -0
- {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/analyzers/ast_grep_rules/smells/javascript.yaml +0 -0
- {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/analyzers/ast_grep_rules/smells/lua.yaml +0 -0
- {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/analyzers/ast_grep_rules/smells/php.yaml +0 -0
- {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/analyzers/ast_grep_rules/smells/python.yaml +0 -0
- {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/analyzers/ast_grep_rules/smells/ruby.yaml +0 -0
- {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/analyzers/ast_grep_rules/smells/rust.yaml +0 -0
- {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/analyzers/ast_grep_rules/smells/scala.yaml +0 -0
- {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/analyzers/ast_grep_rules/smells/tsx.yaml +0 -0
- {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/analyzers/ast_grep_rules/smells/typescript.yaml +0 -0
- {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/ast_cache.py +0 -0
- {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/capture.py +0 -0
- {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/cgr_state.py +0 -0
- {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/constants/__init__.py +0 -0
- {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/constants/ast_cpp.py +0 -0
- {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/constants/ast_go.py +0 -0
- {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/constants/ast_js.py +0 -0
- {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/constants/ast_nodes.py +0 -0
- {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/constants/ast_php.py +0 -0
- {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/constants/build.py +0 -0
- {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/constants/deadcode_roots.py +0 -0
- {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/constants/deps.py +0 -0
- {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/constants/fqn_specs.py +0 -0
- {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/constants/health.py +0 -0
- {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/constants/lang_tooling.py +0 -0
- {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/constants/mcp.py +0 -0
- {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/constants/providers.py +0 -0
- {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/constants/security.py +0 -0
- {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/constants/stdlib_types.py +0 -0
- {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/constants/structural.py +0 -0
- {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/constants/trace.py +0 -0
- {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/crash_correlation.py +0 -0
- {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/cypher_queries.py +0 -0
- {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/decorators.py +0 -0
- {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/docker-compose.yaml +0 -0
- {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/embedder.py +0 -0
- {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/exceptions.py +0 -0
- {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/flow_verdict.py +0 -0
- {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/function_registry.py +0 -0
- {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/graph_audit.py +0 -0
- {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/graph_loader.py +0 -0
- {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/language_spec.py +0 -0
- {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/main.py +0 -0
- {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/mcp/__init__.py +0 -0
- {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/mcp/client.py +0 -0
- {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/mcp/server.py +0 -0
- {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/mcp/tools.py +0 -0
- {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/models.py +0 -0
- {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/parser_loader.py +0 -0
- {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/parsers/__init__.py +0 -0
- {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/parsers/ast_grep_patterns/ruby.yaml +0 -0
- {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/parsers/class_ingest/__init__.py +0 -0
- {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/parsers/class_ingest/cpp_modules.py +0 -0
- {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/parsers/class_ingest/identity.py +0 -0
- {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/parsers/class_ingest/method_override.py +0 -0
- {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/parsers/class_ingest/node_type.py +0 -0
- {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/parsers/class_ingest/parent_extraction.py +0 -0
- {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/parsers/class_ingest/relationships.py +0 -0
- {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/parsers/class_ingest/utils.py +0 -0
- {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/parsers/contract_linking.py +0 -0
- {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/parsers/contracts.py +0 -0
- {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/parsers/cpp/__init__.py +0 -0
- {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/parsers/cpp/preproc_recovery.py +0 -0
- {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/parsers/cpp/type_inference.py +0 -0
- {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/parsers/cpp/utils.py +0 -0
- {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/parsers/cpp_frontend/constants.py +0 -0
- {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/parsers/cpp_frontend/qn.py +0 -0
- {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/parsers/csharp/__init__.py +0 -0
- {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/parsers/csharp/type_inference.py +0 -0
- {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/parsers/csharp/utils.py +0 -0
- {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/parsers/csharp_frontend/__init__.py +0 -0
- {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/parsers/csharp_frontend/roslyn/Frontend.csproj +0 -0
- {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/parsers/csharp_frontend/roslyn/Program.cs +0 -0
- {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/parsers/dart/__init__.py +0 -0
- {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/parsers/dart/type_inference.py +0 -0
- {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/parsers/dart/utils.py +0 -0
- {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/parsers/dependency_parser.py +0 -0
- {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/parsers/dispatch_registry.py +0 -0
- {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/parsers/endpoint_prefixes.py +0 -0
- {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/parsers/endpoint_routes.py +0 -0
- {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/parsers/endpoints.py +0 -0
- {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/parsers/export_detection.py +0 -0
- {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/parsers/flow_access/__init__.py +0 -0
- {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/parsers/flow_access/constants.py +0 -0
- {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/parsers/frontends/go.py +0 -0
- {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/parsers/frontends/registry.py +0 -0
- {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/parsers/go/__init__.py +0 -0
- {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/parsers/go/module_paths.py +0 -0
- {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/parsers/go/type_inference.py +0 -0
- {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/parsers/go/utils.py +0 -0
- {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/parsers/go_frontend/__init__.py +0 -0
- {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/parsers/go_frontend/gotypes/go.mod +0 -0
- {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/parsers/go_frontend/gotypes/go.sum +0 -0
- {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/parsers/go_frontend/gotypes/main.go +0 -0
- {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/parsers/handlers/__init__.py +0 -0
- {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/parsers/handlers/base.py +0 -0
- {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/parsers/handlers/cpp.py +0 -0
- {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/parsers/handlers/java.py +0 -0
- {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/parsers/handlers/js_ts.py +0 -0
- {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/parsers/handlers/lua.py +0 -0
- {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/parsers/handlers/php.py +0 -0
- {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/parsers/handlers/protocol.py +0 -0
- {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/parsers/handlers/python.py +0 -0
- {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/parsers/handlers/registry.py +0 -0
- {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/parsers/handlers/rust.py +0 -0
- {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/parsers/io_access/models.py +0 -0
- {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/parsers/java/__init__.py +0 -0
- {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/parsers/java/type_resolver.py +0 -0
- {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/parsers/java/utils.py +0 -0
- {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/parsers/js_ts/__init__.py +0 -0
- {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/parsers/js_ts/ingest.py +0 -0
- {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/parsers/js_ts/module_paths.py +0 -0
- {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/parsers/js_ts/module_system.py +0 -0
- {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/parsers/js_ts/type_inference.py +0 -0
- {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/parsers/js_ts/utils.py +0 -0
- {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/parsers/lua/__init__.py +0 -0
- {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/parsers/lua/type_inference.py +0 -0
- {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/parsers/lua/utils.py +0 -0
- {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/parsers/py/__init__.py +0 -0
- {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/parsers/py/ast_analyzer.py +0 -0
- {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/parsers/py/expression_analyzer.py +0 -0
- {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/parsers/py/type_inference.py +0 -0
- {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/parsers/py/utils.py +0 -0
- {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/parsers/py/variable_analyzer.py +0 -0
- {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/parsers/python_source_roots.py +0 -0
- {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/parsers/rpc_exposure.py +0 -0
- {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/parsers/rs/__init__.py +0 -0
- {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/parsers/rs/type_inference.py +0 -0
- {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/parsers/rs/utils.py +0 -0
- {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/parsers/semantic_call_join.py +0 -0
- {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/parsers/stdlib_extractor.py +0 -0
- {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/parsers/structure_processor.py +0 -0
- {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/path_filters.py +0 -0
- {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/prompts.py +0 -0
- {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/providers/__init__.py +0 -0
- {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/providers/base.py +0 -0
- {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/providers/litellm.py +0 -0
- {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/readme_sections.py +0 -0
- {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/schema_builder.py +0 -0
- {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/schemas.py +0 -0
- {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/services/__init__.py +0 -0
- {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/services/anthropic_token_counter.py +0 -0
- {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/services/filtering.py +0 -0
- {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/services/graph_service.py +0 -0
- {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/services/llm.py +0 -0
- {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/services/resource_cleanup.py +0 -0
- {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/services/usage_cost.py +0 -0
- {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/stack/__init__.py +0 -0
- {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/stack/cli.py +0 -0
- {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/stack/health.py +0 -0
- {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/stack/manager.py +0 -0
- {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/tool_errors.py +0 -0
- {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/tools/__init__.py +0 -0
- {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/tools/ast_grep_service.py +0 -0
- {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/tools/codebase_query.py +0 -0
- {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/tools/file_editor.py +0 -0
- {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/tools/file_reader.py +0 -0
- {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/tools/file_writer.py +0 -0
- {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/tools/health_checker.py +0 -0
- {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/tools/language.py +0 -0
- {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/tools/semantic_search.py +0 -0
- {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/tools/shell_command.py +0 -0
- {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/tools/structural_editor.py +0 -0
- {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/tools/structural_search.py +0 -0
- {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/tools/web_search.py +0 -0
- {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/trace/__init__.py +0 -0
- {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/trace/cli.py +0 -0
- {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/trace/cpuprofile.py +0 -0
- {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/trace/ebpf_pprof.py +0 -0
- {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/trace/ingest.py +0 -0
- {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/trace/instrumented.py +0 -0
- {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/trace/pprof.py +0 -0
- {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/trace/pytest_plugin.py +0 -0
- {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/trace/records.py +0 -0
- {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/trace/resolution.py +0 -0
- {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/trace/rust_pprof.py +0 -0
- {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/trace/sourcemap.py +0 -0
- {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/trace/speedscope.py +0 -0
- {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/trace/tracer.py +0 -0
- {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/trace/xdebug.py +0 -0
- {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/unixcoder.py +0 -0
- {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/utils/__init__.py +0 -0
- {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/utils/dependencies.py +0 -0
- {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/utils/fqn_resolver.py +0 -0
- {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/utils/path_utils.py +0 -0
- {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/utils/rich_markdown.py +0 -0
- {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/utils/token_utils.py +0 -0
- {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/vector_store.py +0 -0
- {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/workspaces/__init__.py +0 -0
- {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/workspaces/cli.py +0 -0
- {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/workspaces/constants.py +0 -0
- {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/workspaces/models.py +0 -0
- {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/workspaces/storage.py +0 -0
- {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codec/__init__.py +0 -0
- {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/setup.cfg +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: code-graph-rag
|
|
3
|
-
Version: 0.0.
|
|
3
|
+
Version: 0.0.720
|
|
4
4
|
Summary: The ultimate RAG for your monorepo. Query, understand, and edit multi-language codebases with the power of AI and knowledge graphs
|
|
5
5
|
License-Expression: MIT
|
|
6
6
|
Keywords: rag,retrieval-augmented-generation,knowledge-graph,code-analysis,tree-sitter,mcp,mcp-server,llm,graph-database,semantic-search,codebase,memgraph,developer-tools,monorepo
|
|
@@ -40,6 +40,7 @@ Requires-Dist: huggingface-hub[hf-xet]>=1.7.2
|
|
|
40
40
|
Requires-Dist: pathspec>=1.0.4
|
|
41
41
|
Requires-Dist: pygments>=2.20.0
|
|
42
42
|
Provides-Extra: test
|
|
43
|
+
Requires-Dist: jedi>=0.19; extra == "test"
|
|
43
44
|
Requires-Dist: pytest>=8.4.1; extra == "test"
|
|
44
45
|
Requires-Dist: pytest-asyncio>=1.0.0; extra == "test"
|
|
45
46
|
Requires-Dist: pytest-cov>=4.0.0; extra == "test"
|
|
@@ -49,6 +50,8 @@ Requires-Dist: libclang>=18.1.1; extra == "test"
|
|
|
49
50
|
Requires-Dist: filelock>=3.12; extra == "test"
|
|
50
51
|
Requires-Dist: ast-grep-py>=0.44.0; extra == "test"
|
|
51
52
|
Requires-Dist: pyyaml>=6.0; extra == "test"
|
|
53
|
+
Provides-Extra: cpp
|
|
54
|
+
Requires-Dist: libclang>=18.1.1; extra == "cpp"
|
|
52
55
|
Provides-Extra: treesitter-full
|
|
53
56
|
Requires-Dist: tree-sitter-python>=0.23.6; extra == "treesitter-full"
|
|
54
57
|
Requires-Dist: tree-sitter-javascript>=0.23.1; extra == "treesitter-full"
|
|
@@ -72,6 +75,8 @@ Requires-Dist: pymilvus[milvus-lite]>=3.0.0; extra == "milvus"
|
|
|
72
75
|
Provides-Extra: ast-grep
|
|
73
76
|
Requires-Dist: ast-grep-py>=0.44.0; extra == "ast-grep"
|
|
74
77
|
Requires-Dist: pyyaml>=6.0; extra == "ast-grep"
|
|
78
|
+
Provides-Extra: python-semantics
|
|
79
|
+
Requires-Dist: jedi>=0.19; extra == "python-semantics"
|
|
75
80
|
Dynamic: license-file
|
|
76
81
|
|
|
77
82
|
# Code-Graph-RAG
|
|
@@ -95,7 +100,7 @@ Point it at a repository and it reads every source file, extracts functions, cla
|
|
|
95
100
|
|
|
96
101
|
## Supported Languages
|
|
97
102
|
|
|
98
|
-
Python, TypeScript, TSX, JavaScript, Rust, Go, Java, C, C++, C#, PHP, Lua, and Dart are fully supported. Scala is in development, and Ruby
|
|
103
|
+
Python, TypeScript, TSX, JavaScript, Rust, Go, Java, C, C++, C#, PHP, Lua, and Dart are fully supported. Scala is in development, and Ruby, Kotlin, Swift, Elixir, Haskell, Solidity, Bash, and Nix have structural support (modules, functions, classes where the language has them, and imports) through the pluggable ast-grep tier, which requires the `ast-grep` extra (`pip install 'code-graph-rag[ast-grep]'`).
|
|
99
104
|
|
|
100
105
|
## Install
|
|
101
106
|
|
|
@@ -125,6 +130,20 @@ instead of locally, set `CGR_EMBEDDING_PROVIDER=openai` with
|
|
|
125
130
|
`OPENAI_EMBEDDING_BASE_URL` and `OPENAI_EMBEDDING_MODEL`; torch and
|
|
126
131
|
transformers are then not required locally.
|
|
127
132
|
|
|
133
|
+
### Which version am I getting?
|
|
134
|
+
|
|
135
|
+
`pip install code-graph-rag` gives you the newest PyPI release, which is deliberately
|
|
136
|
+
not the newest commit. Git tags exist for every version (one per merge), while PyPI
|
|
137
|
+
uploads and GitHub Release binaries land on an every-50 cadence, so the tag on `main`
|
|
138
|
+
usually runs ahead of the published version. A security fix is the exception: it
|
|
139
|
+
ships immediately rather than waiting for the cadence.
|
|
140
|
+
|
|
141
|
+
To run code newer than the latest release, install from git:
|
|
142
|
+
|
|
143
|
+
```bash
|
|
144
|
+
pip install "code-graph-rag[treesitter-full] @ git+https://github.com/vitali87/code-graph-rag@main"
|
|
145
|
+
```
|
|
146
|
+
|
|
128
147
|
### Prerequisites
|
|
129
148
|
|
|
130
149
|
- Python 3.12+
|
|
@@ -19,7 +19,7 @@ Point it at a repository and it reads every source file, extracts functions, cla
|
|
|
19
19
|
|
|
20
20
|
## Supported Languages
|
|
21
21
|
|
|
22
|
-
Python, TypeScript, TSX, JavaScript, Rust, Go, Java, C, C++, C#, PHP, Lua, and Dart are fully supported. Scala is in development, and Ruby
|
|
22
|
+
Python, TypeScript, TSX, JavaScript, Rust, Go, Java, C, C++, C#, PHP, Lua, and Dart are fully supported. Scala is in development, and Ruby, Kotlin, Swift, Elixir, Haskell, Solidity, Bash, and Nix have structural support (modules, functions, classes where the language has them, and imports) through the pluggable ast-grep tier, which requires the `ast-grep` extra (`pip install 'code-graph-rag[ast-grep]'`).
|
|
23
23
|
|
|
24
24
|
## Install
|
|
25
25
|
|
|
@@ -49,6 +49,20 @@ instead of locally, set `CGR_EMBEDDING_PROVIDER=openai` with
|
|
|
49
49
|
`OPENAI_EMBEDDING_BASE_URL` and `OPENAI_EMBEDDING_MODEL`; torch and
|
|
50
50
|
transformers are then not required locally.
|
|
51
51
|
|
|
52
|
+
### Which version am I getting?
|
|
53
|
+
|
|
54
|
+
`pip install code-graph-rag` gives you the newest PyPI release, which is deliberately
|
|
55
|
+
not the newest commit. Git tags exist for every version (one per merge), while PyPI
|
|
56
|
+
uploads and GitHub Release binaries land on an every-50 cadence, so the tag on `main`
|
|
57
|
+
usually runs ahead of the published version. A security fix is the exception: it
|
|
58
|
+
ships immediately rather than waiting for the cadence.
|
|
59
|
+
|
|
60
|
+
To run code newer than the latest release, install from git:
|
|
61
|
+
|
|
62
|
+
```bash
|
|
63
|
+
pip install "code-graph-rag[treesitter-full] @ git+https://github.com/vitali87/code-graph-rag@main"
|
|
64
|
+
```
|
|
65
|
+
|
|
52
66
|
### Prerequisites
|
|
53
67
|
|
|
54
68
|
- Python 3.12+
|
|
@@ -10,17 +10,6 @@
|
|
|
10
10
|
</p>
|
|
11
11
|
|
|
12
12
|
<p>
|
|
13
|
-
<!-- Badges below are commented out while the GitHub account is suspended. Restore them when the account is reinstated.
|
|
14
|
-
Stars/Forks: shields.io hits GitHub's API (returns "repo not found" for suspended accounts).
|
|
15
|
-
gitcgr: indexes from GitHub (shows "not indexed" while unavailable).
|
|
16
|
-
MseeP.ai: badge PNG ignores inline height on Bitbucket and renders as a full-size tile.
|
|
17
|
-
<a href="https://github.com/vitali87/code-graph-rag/stargazers">
|
|
18
|
-
<img src="https://img.shields.io/github/stars/vitali87/code-graph-rag?style=social" alt="GitHub stars" />
|
|
19
|
-
</a>
|
|
20
|
-
<a href="https://github.com/vitali87/code-graph-rag/network/members">
|
|
21
|
-
<img src="https://img.shields.io/github/forks/vitali87/code-graph-rag?style=social" alt="GitHub forks" />
|
|
22
|
-
</a>
|
|
23
|
-
-->
|
|
24
13
|
<a href="https://github.com/vitali87/code-graph-rag/actions/workflows/ci.yml">
|
|
25
14
|
<img src="https://img.shields.io/github/actions/workflow/status/vitali87/code-graph-rag/ci.yml?branch=main" alt="CI" />
|
|
26
15
|
</a>
|
|
@@ -30,11 +19,6 @@
|
|
|
30
19
|
<a href="https://sonarcloud.io/summary/overall?id=vitali87_code-graph-rag">
|
|
31
20
|
<img src="https://sonarcloud.io/api/project_badges/measure?project=vitali87_code-graph-rag&metric=alert_status" alt="Quality Gate Status" />
|
|
32
21
|
</a>
|
|
33
|
-
<!--
|
|
34
|
-
<a href="https://mseep.ai/app/vitali87-code-graph-rag">
|
|
35
|
-
<img src="https://mseep.net/pr/vitali87-code-graph-rag-badge.png" alt="MseeP.ai Security Assessment" height="20" />
|
|
36
|
-
</a>
|
|
37
|
-
-->
|
|
38
22
|
<a href="https://code-graph-rag.com">
|
|
39
23
|
<img src="https://img.shields.io/badge/Enterprise-Support%20%26%20Services-6366f1" alt="Enterprise Support" />
|
|
40
24
|
</a>
|
|
@@ -53,11 +37,6 @@
|
|
|
53
37
|
<a href="https://www.bestpractices.dev/projects/13757">
|
|
54
38
|
<img src="https://www.bestpractices.dev/projects/13757/badge" alt="OpenSSF Best Practices" />
|
|
55
39
|
</a>
|
|
56
|
-
<!--
|
|
57
|
-
<a href="https://gitcgr.com/vitali87/code-graph-rag">
|
|
58
|
-
<img src="https://gitcgr.com/badge/vitali87/code-graph-rag.svg" alt="gitcgr" />
|
|
59
|
-
</a>
|
|
60
|
-
-->
|
|
61
40
|
</p>
|
|
62
41
|
</div>
|
|
63
42
|
|
|
@@ -72,9 +51,9 @@ Code-Graph-RAG parses a multi-language codebase with Tree-sitter, builds a knowl
|
|
|
72
51
|
## Latest News 🔥
|
|
73
52
|
|
|
74
53
|
<!-- SECTION:latest_news -->
|
|
75
|
-
- **
|
|
76
|
-
- **
|
|
77
|
-
- **
|
|
54
|
+
- **Language Support**: The system now supports Ruby, bringing enhanced code analysis capabilities to your Ruby projects.
|
|
55
|
+
- **Structural Analysis**: You can now find and rewrite code based on AST patterns using structural search and replace.
|
|
56
|
+
- **Data Flow Tracking**: Enhanced data-flow tracing is now available for C#, Java, C, and Go, providing more comprehensive visibility into data movement.
|
|
78
57
|
<!-- /SECTION:latest_news -->
|
|
79
58
|
|
|
80
59
|
See [NEWS.md](NEWS.md) for the full history.
|
|
@@ -108,7 +87,7 @@ See the [Architecture Overview](docs/architecture/overview.md) and [Graph Schema
|
|
|
108
87
|
|
|
109
88
|
## Supported Languages
|
|
110
89
|
|
|
111
|
-
Python, TypeScript, TSX, JavaScript, Rust, Go, Java, C, C++, C#, PHP, Lua, and Dart are fully supported. Scala is in development, and Ruby
|
|
90
|
+
Python, TypeScript, TSX, JavaScript, Rust, Go, Java, C, C++, C#, PHP, Lua, and Dart are fully supported. Scala is in development, and Ruby, Kotlin, Swift, Elixir, Haskell, Solidity, Bash, and Nix have structural support (modules, functions, classes where the language has them, and imports) through the pluggable ast-grep tier. See the [Language Support](docs/architecture/language-support.md) matrix for per-language capabilities.
|
|
112
91
|
|
|
113
92
|
## Installation
|
|
114
93
|
|
|
@@ -122,6 +101,31 @@ uv tool install "code-graph-rag[treesitter-full,semantic]"
|
|
|
122
101
|
pipx install "code-graph-rag[treesitter-full,semantic]"
|
|
123
102
|
```
|
|
124
103
|
|
|
104
|
+
### Which version am I getting?
|
|
105
|
+
|
|
106
|
+
Three version lines exist and they intentionally differ:
|
|
107
|
+
|
|
108
|
+
| where | what it tracks |
|
|
109
|
+
|---|---|
|
|
110
|
+
| git tags | every version, one per merge |
|
|
111
|
+
| GitHub Releases (binaries, signatures) | every 50th version, plus any security fix |
|
|
112
|
+
| PyPI | every 50th version, plus any security fix |
|
|
113
|
+
|
|
114
|
+
So the newest tag on `main` usually runs ahead of the newest release, often by
|
|
115
|
+
tens of patch versions; they coincide only just after a release. Nothing is
|
|
116
|
+
stuck, the cadences differ by design. A security fix does NOT wait for the
|
|
117
|
+
cadence: it ships a release and a PyPI upload immediately.
|
|
118
|
+
|
|
119
|
+
`uv tool install` and `pipx install` give you the newest PyPI version, which is the
|
|
120
|
+
newest RELEASE, not the newest tag. Interim tags exist so every merge is
|
|
121
|
+
addressable; binaries and PyPI uploads follow the cadence above.
|
|
122
|
+
|
|
123
|
+
To run code newer than the latest release, install from git:
|
|
124
|
+
|
|
125
|
+
```bash
|
|
126
|
+
uv tool install "code-graph-rag[treesitter-full,semantic] @ git+https://github.com/vitali87/code-graph-rag@main"
|
|
127
|
+
```
|
|
128
|
+
|
|
125
129
|
You also need Docker (for Memgraph), `cmake`, and `ripgrep`. Full prerequisites, source installs, and environment setup are in the [Installation](docs/getting-started/installation.md) guide.
|
|
126
130
|
|
|
127
131
|
## Quick Start
|
|
@@ -162,6 +166,7 @@ Code-Graph-RAG runs as an [MCP](https://modelcontextprotocol.io) server so Claud
|
|
|
162
166
|
- [Dynamic Call Tracing](docs/guide/dynamic-tracing.md)
|
|
163
167
|
- [Graph Export](docs/guide/graph-export.md)
|
|
164
168
|
- [Real-Time Updates](docs/guide/realtime-updates.md)
|
|
169
|
+
- [C/C++ Semantic Mode](docs/guide/cpp-semantic-mode.md)
|
|
165
170
|
- [MCP Server](docs/guide/mcp-server.md)
|
|
166
171
|
|
|
167
172
|
**Architecture**
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: code-graph-rag
|
|
3
|
-
Version: 0.0.
|
|
3
|
+
Version: 0.0.720
|
|
4
4
|
Summary: The ultimate RAG for your monorepo. Query, understand, and edit multi-language codebases with the power of AI and knowledge graphs
|
|
5
5
|
License-Expression: MIT
|
|
6
6
|
Keywords: rag,retrieval-augmented-generation,knowledge-graph,code-analysis,tree-sitter,mcp,mcp-server,llm,graph-database,semantic-search,codebase,memgraph,developer-tools,monorepo
|
|
@@ -40,6 +40,7 @@ Requires-Dist: huggingface-hub[hf-xet]>=1.7.2
|
|
|
40
40
|
Requires-Dist: pathspec>=1.0.4
|
|
41
41
|
Requires-Dist: pygments>=2.20.0
|
|
42
42
|
Provides-Extra: test
|
|
43
|
+
Requires-Dist: jedi>=0.19; extra == "test"
|
|
43
44
|
Requires-Dist: pytest>=8.4.1; extra == "test"
|
|
44
45
|
Requires-Dist: pytest-asyncio>=1.0.0; extra == "test"
|
|
45
46
|
Requires-Dist: pytest-cov>=4.0.0; extra == "test"
|
|
@@ -49,6 +50,8 @@ Requires-Dist: libclang>=18.1.1; extra == "test"
|
|
|
49
50
|
Requires-Dist: filelock>=3.12; extra == "test"
|
|
50
51
|
Requires-Dist: ast-grep-py>=0.44.0; extra == "test"
|
|
51
52
|
Requires-Dist: pyyaml>=6.0; extra == "test"
|
|
53
|
+
Provides-Extra: cpp
|
|
54
|
+
Requires-Dist: libclang>=18.1.1; extra == "cpp"
|
|
52
55
|
Provides-Extra: treesitter-full
|
|
53
56
|
Requires-Dist: tree-sitter-python>=0.23.6; extra == "treesitter-full"
|
|
54
57
|
Requires-Dist: tree-sitter-javascript>=0.23.1; extra == "treesitter-full"
|
|
@@ -72,6 +75,8 @@ Requires-Dist: pymilvus[milvus-lite]>=3.0.0; extra == "milvus"
|
|
|
72
75
|
Provides-Extra: ast-grep
|
|
73
76
|
Requires-Dist: ast-grep-py>=0.44.0; extra == "ast-grep"
|
|
74
77
|
Requires-Dist: pyyaml>=6.0; extra == "ast-grep"
|
|
78
|
+
Provides-Extra: python-semantics
|
|
79
|
+
Requires-Dist: jedi>=0.19; extra == "python-semantics"
|
|
75
80
|
Dynamic: license-file
|
|
76
81
|
|
|
77
82
|
# Code-Graph-RAG
|
|
@@ -95,7 +100,7 @@ Point it at a repository and it reads every source file, extracts functions, cla
|
|
|
95
100
|
|
|
96
101
|
## Supported Languages
|
|
97
102
|
|
|
98
|
-
Python, TypeScript, TSX, JavaScript, Rust, Go, Java, C, C++, C#, PHP, Lua, and Dart are fully supported. Scala is in development, and Ruby
|
|
103
|
+
Python, TypeScript, TSX, JavaScript, Rust, Go, Java, C, C++, C#, PHP, Lua, and Dart are fully supported. Scala is in development, and Ruby, Kotlin, Swift, Elixir, Haskell, Solidity, Bash, and Nix have structural support (modules, functions, classes where the language has them, and imports) through the pluggable ast-grep tier, which requires the `ast-grep` extra (`pip install 'code-graph-rag[ast-grep]'`).
|
|
99
104
|
|
|
100
105
|
## Install
|
|
101
106
|
|
|
@@ -125,6 +130,20 @@ instead of locally, set `CGR_EMBEDDING_PROVIDER=openai` with
|
|
|
125
130
|
`OPENAI_EMBEDDING_BASE_URL` and `OPENAI_EMBEDDING_MODEL`; torch and
|
|
126
131
|
transformers are then not required locally.
|
|
127
132
|
|
|
133
|
+
### Which version am I getting?
|
|
134
|
+
|
|
135
|
+
`pip install code-graph-rag` gives you the newest PyPI release, which is deliberately
|
|
136
|
+
not the newest commit. Git tags exist for every version (one per merge), while PyPI
|
|
137
|
+
uploads and GitHub Release binaries land on an every-50 cadence, so the tag on `main`
|
|
138
|
+
usually runs ahead of the published version. A security fix is the exception: it
|
|
139
|
+
ships immediately rather than waiting for the cadence.
|
|
140
|
+
|
|
141
|
+
To run code newer than the latest release, install from git:
|
|
142
|
+
|
|
143
|
+
```bash
|
|
144
|
+
pip install "code-graph-rag[treesitter-full] @ git+https://github.com/vitali87/code-graph-rag@main"
|
|
145
|
+
```
|
|
146
|
+
|
|
128
147
|
### Prerequisites
|
|
129
148
|
|
|
130
149
|
- Python 3.12+
|
|
@@ -125,6 +125,7 @@ codebase_rag/mcp/server.py
|
|
|
125
125
|
codebase_rag/mcp/tools.py
|
|
126
126
|
codebase_rag/parsers/__init__.py
|
|
127
127
|
codebase_rag/parsers/ast_grep_tier.py
|
|
128
|
+
codebase_rag/parsers/build_lock.py
|
|
128
129
|
codebase_rag/parsers/call_processor.py
|
|
129
130
|
codebase_rag/parsers/call_resolver.py
|
|
130
131
|
codebase_rag/parsers/contract_linking.py
|
|
@@ -139,6 +140,8 @@ codebase_rag/parsers/export_detection.py
|
|
|
139
140
|
codebase_rag/parsers/factory.py
|
|
140
141
|
codebase_rag/parsers/function_ingest.py
|
|
141
142
|
codebase_rag/parsers/import_processor.py
|
|
143
|
+
codebase_rag/parsers/java_generated.py
|
|
144
|
+
codebase_rag/parsers/java_lombok.py
|
|
142
145
|
codebase_rag/parsers/python_source_roots.py
|
|
143
146
|
codebase_rag/parsers/rpc_exposure.py
|
|
144
147
|
codebase_rag/parsers/semantic_call_join.py
|
|
@@ -146,7 +149,14 @@ codebase_rag/parsers/stdlib_extractor.py
|
|
|
146
149
|
codebase_rag/parsers/structure_processor.py
|
|
147
150
|
codebase_rag/parsers/type_inference.py
|
|
148
151
|
codebase_rag/parsers/utils.py
|
|
152
|
+
codebase_rag/parsers/ast_grep_patterns/bash.yaml
|
|
153
|
+
codebase_rag/parsers/ast_grep_patterns/elixir.yaml
|
|
154
|
+
codebase_rag/parsers/ast_grep_patterns/haskell.yaml
|
|
155
|
+
codebase_rag/parsers/ast_grep_patterns/kotlin.yaml
|
|
156
|
+
codebase_rag/parsers/ast_grep_patterns/nix.yaml
|
|
149
157
|
codebase_rag/parsers/ast_grep_patterns/ruby.yaml
|
|
158
|
+
codebase_rag/parsers/ast_grep_patterns/solidity.yaml
|
|
159
|
+
codebase_rag/parsers/ast_grep_patterns/swift.yaml
|
|
150
160
|
codebase_rag/parsers/class_ingest/__init__.py
|
|
151
161
|
codebase_rag/parsers/class_ingest/cpp_modules.py
|
|
152
162
|
codebase_rag/parsers/class_ingest/identity.py
|
|
@@ -181,7 +191,9 @@ codebase_rag/parsers/flow_access/processor.py
|
|
|
181
191
|
codebase_rag/parsers/frontends/__init__.py
|
|
182
192
|
codebase_rag/parsers/frontends/csharp.py
|
|
183
193
|
codebase_rag/parsers/frontends/go.py
|
|
194
|
+
codebase_rag/parsers/frontends/java.py
|
|
184
195
|
codebase_rag/parsers/frontends/protocol.py
|
|
196
|
+
codebase_rag/parsers/frontends/python.py
|
|
185
197
|
codebase_rag/parsers/frontends/registry.py
|
|
186
198
|
codebase_rag/parsers/go/__init__.py
|
|
187
199
|
codebase_rag/parsers/go/module_paths.py
|
|
@@ -216,6 +228,9 @@ codebase_rag/parsers/java/type_inference.py
|
|
|
216
228
|
codebase_rag/parsers/java/type_resolver.py
|
|
217
229
|
codebase_rag/parsers/java/utils.py
|
|
218
230
|
codebase_rag/parsers/java/variable_analyzer.py
|
|
231
|
+
codebase_rag/parsers/java_frontend/__init__.py
|
|
232
|
+
codebase_rag/parsers/java_frontend/frontend.py
|
|
233
|
+
codebase_rag/parsers/java_frontend/javac/cgr/Frontend.java
|
|
219
234
|
codebase_rag/parsers/js_ts/__init__.py
|
|
220
235
|
codebase_rag/parsers/js_ts/ingest.py
|
|
221
236
|
codebase_rag/parsers/js_ts/module_paths.py
|
|
@@ -231,6 +246,8 @@ codebase_rag/parsers/py/expression_analyzer.py
|
|
|
231
246
|
codebase_rag/parsers/py/type_inference.py
|
|
232
247
|
codebase_rag/parsers/py/utils.py
|
|
233
248
|
codebase_rag/parsers/py/variable_analyzer.py
|
|
249
|
+
codebase_rag/parsers/py_frontend/__init__.py
|
|
250
|
+
codebase_rag/parsers/py_frontend/frontend.py
|
|
234
251
|
codebase_rag/parsers/rs/__init__.py
|
|
235
252
|
codebase_rag/parsers/rs/type_inference.py
|
|
236
253
|
codebase_rag/parsers/rs/utils.py
|
|
@@ -240,9 +257,11 @@ codebase_rag/providers/litellm.py
|
|
|
240
257
|
codebase_rag/services/__init__.py
|
|
241
258
|
codebase_rag/services/anthropic_token_counter.py
|
|
242
259
|
codebase_rag/services/filtering.py
|
|
260
|
+
codebase_rag/services/graph_diff.py
|
|
243
261
|
codebase_rag/services/graph_service.py
|
|
244
262
|
codebase_rag/services/llm.py
|
|
245
263
|
codebase_rag/services/protobuf_service.py
|
|
264
|
+
codebase_rag/services/provenance.py
|
|
246
265
|
codebase_rag/services/resource_cleanup.py
|
|
247
266
|
codebase_rag/services/usage_cost.py
|
|
248
267
|
codebase_rag/stack/__init__.py
|
|
@@ -24,15 +24,22 @@ pygments>=2.20.0
|
|
|
24
24
|
ast-grep-py>=0.44.0
|
|
25
25
|
pyyaml>=6.0
|
|
26
26
|
|
|
27
|
+
[cpp]
|
|
28
|
+
libclang>=18.1.1
|
|
29
|
+
|
|
27
30
|
[milvus]
|
|
28
31
|
pymilvus[milvus-lite]>=3.0.0
|
|
29
32
|
|
|
33
|
+
[python-semantics]
|
|
34
|
+
jedi>=0.19
|
|
35
|
+
|
|
30
36
|
[semantic]
|
|
31
37
|
qdrant-client>=1.9.0
|
|
32
38
|
torch>=2.6.0
|
|
33
39
|
transformers>=4.0.0
|
|
34
40
|
|
|
35
41
|
[test]
|
|
42
|
+
jedi>=0.19
|
|
36
43
|
pytest>=8.4.1
|
|
37
44
|
pytest-asyncio>=1.0.0
|
|
38
45
|
pytest-cov>=4.0.0
|
|
@@ -37,8 +37,15 @@ from .main import (
|
|
|
37
37
|
update_model_settings,
|
|
38
38
|
)
|
|
39
39
|
from .parser_loader import load_parsers
|
|
40
|
+
from .services.graph_diff import DiffError, diff_indexes, diff_is_empty
|
|
40
41
|
from .services.graph_service import MemgraphIngestor
|
|
41
42
|
from .services.protobuf_service import ProtobufFileIngestor
|
|
43
|
+
from .services.provenance import (
|
|
44
|
+
capture_description,
|
|
45
|
+
source_state,
|
|
46
|
+
verify_index,
|
|
47
|
+
write_manifest,
|
|
48
|
+
)
|
|
42
49
|
from .stack import StackManager
|
|
43
50
|
from .stack.cli import cli as daemon_cli
|
|
44
51
|
from .stack.constants import StackState
|
|
@@ -688,8 +695,12 @@ def index(
|
|
|
688
695
|
unignore_paths = cgrignore.unignore or None
|
|
689
696
|
|
|
690
697
|
try:
|
|
698
|
+
indexed_source = source_state(Path(repo_to_index))
|
|
699
|
+
capture_config = _capture_selection(capture)
|
|
691
700
|
ingestor = ProtobufFileIngestor(
|
|
692
|
-
output_path=output_proto_dir,
|
|
701
|
+
output_path=output_proto_dir,
|
|
702
|
+
split_index=split_index,
|
|
703
|
+
repo_path=str(repo_to_index),
|
|
693
704
|
)
|
|
694
705
|
parsers, queries = load_parsers()
|
|
695
706
|
updater = GraphUpdater(
|
|
@@ -699,10 +710,18 @@ def index(
|
|
|
699
710
|
queries=queries,
|
|
700
711
|
unignore_paths=unignore_paths,
|
|
701
712
|
exclude_paths=exclude_paths,
|
|
702
|
-
capture=
|
|
713
|
+
capture=capture_config,
|
|
703
714
|
)
|
|
704
715
|
|
|
705
716
|
updater.run()
|
|
717
|
+
manifest_path = write_manifest(
|
|
718
|
+
Path(output_proto_dir),
|
|
719
|
+
indexed_source,
|
|
720
|
+
capture_description(capture_config),
|
|
721
|
+
)
|
|
722
|
+
_info(
|
|
723
|
+
style(cs.CLI_MSG_MANIFEST_WRITTEN.format(path=manifest_path), cs.Color.CYAN)
|
|
724
|
+
)
|
|
706
725
|
_info(style(cs.CLI_MSG_INDEXING_DONE, cs.Color.GREEN))
|
|
707
726
|
|
|
708
727
|
except Exception as e:
|
|
@@ -713,6 +732,58 @@ def index(
|
|
|
713
732
|
raise typer.Exit(1) from e
|
|
714
733
|
|
|
715
734
|
|
|
735
|
+
@app.command(
|
|
736
|
+
name="verify-index",
|
|
737
|
+
help=ch.CMD_VERIFY_INDEX,
|
|
738
|
+
short_help=ch.CMD_VERIFY_INDEX,
|
|
739
|
+
rich_help_panel=ch.PANEL_GRAPH,
|
|
740
|
+
)
|
|
741
|
+
def verify_index_command(
|
|
742
|
+
index_dir: str = typer.Option(
|
|
743
|
+
..., "-i", "--index-dir", help=ch.HELP_VERIFY_INDEX_DIR
|
|
744
|
+
),
|
|
745
|
+
trusted_manifest_sha256: str | None = typer.Option(
|
|
746
|
+
None,
|
|
747
|
+
"--trusted-manifest-sha256",
|
|
748
|
+
help=ch.HELP_TRUSTED_MANIFEST_SHA,
|
|
749
|
+
),
|
|
750
|
+
) -> None:
|
|
751
|
+
problems = verify_index(Path(index_dir), trusted_manifest_sha256)
|
|
752
|
+
if problems:
|
|
753
|
+
for problem in problems:
|
|
754
|
+
app_context.console.print(
|
|
755
|
+
style(cs.CLI_MSG_VERIFY_PROBLEM.format(problem=problem), cs.Color.RED)
|
|
756
|
+
)
|
|
757
|
+
raise typer.Exit(1)
|
|
758
|
+
_info(style(cs.CLI_MSG_VERIFY_OK.format(path=index_dir), cs.Color.GREEN))
|
|
759
|
+
|
|
760
|
+
|
|
761
|
+
@app.command(
|
|
762
|
+
name="diff-index",
|
|
763
|
+
help=ch.CMD_DIFF_INDEX,
|
|
764
|
+
short_help=ch.CMD_DIFF_INDEX,
|
|
765
|
+
rich_help_panel=ch.PANEL_GRAPH,
|
|
766
|
+
)
|
|
767
|
+
def diff_index_command(
|
|
768
|
+
old_dir: str = typer.Option(..., "--old", help=ch.HELP_DIFF_OLD),
|
|
769
|
+
new_dir: str = typer.Option(..., "--new", help=ch.HELP_DIFF_NEW),
|
|
770
|
+
json_out: str | None = typer.Option(None, "--json-out", help=ch.HELP_DIFF_JSON_OUT),
|
|
771
|
+
) -> None:
|
|
772
|
+
try:
|
|
773
|
+
diff = diff_indexes(Path(old_dir), Path(new_dir))
|
|
774
|
+
except DiffError as error:
|
|
775
|
+
app_context.console.print(style(str(error), cs.Color.RED))
|
|
776
|
+
raise typer.Exit(2) from error
|
|
777
|
+
rendered = json.dumps(diff, indent=2, sort_keys=True)
|
|
778
|
+
if json_out is not None:
|
|
779
|
+
Path(json_out).write_text(rendered + "\n", encoding="utf-8")
|
|
780
|
+
_info(style(cs.CLI_MSG_DIFF_WRITTEN.format(path=json_out), cs.Color.CYAN))
|
|
781
|
+
else:
|
|
782
|
+
app_context.console.print(rendered)
|
|
783
|
+
if diff_is_empty(diff):
|
|
784
|
+
_info(style(cs.CLI_MSG_DIFF_EMPTY, cs.Color.GREEN))
|
|
785
|
+
|
|
786
|
+
|
|
716
787
|
@app.command(
|
|
717
788
|
help=ch.CMD_EXPORT,
|
|
718
789
|
short_help=ch.CMD_EXPORT,
|
|
@@ -1256,6 +1327,7 @@ def _emit_dead_code(
|
|
|
1256
1327
|
output_format: cs.DeadCodeFormat,
|
|
1257
1328
|
output: Path | None,
|
|
1258
1329
|
project_name: str,
|
|
1330
|
+
structural_tier_symbols: int = 0,
|
|
1259
1331
|
) -> None:
|
|
1260
1332
|
if output_format == cs.DeadCodeFormat.JSON:
|
|
1261
1333
|
payload = json.dumps(candidates, indent=2)
|
|
@@ -1271,25 +1343,40 @@ def _emit_dead_code(
|
|
|
1271
1343
|
typer.echo(payload)
|
|
1272
1344
|
return
|
|
1273
1345
|
|
|
1346
|
+
# The coverage notice follows the table into whichever sink it goes, so a
|
|
1347
|
+
# saved report (CI artifact, shared review) never reads as "all clean"
|
|
1348
|
+
# when whole languages went unanalyzed.
|
|
1349
|
+
notice = (
|
|
1350
|
+
cs.CLI_DEADCODE_STRUCTURAL_TIER_SKIPPED.format(count=structural_tier_symbols)
|
|
1351
|
+
if structural_tier_symbols
|
|
1352
|
+
else ""
|
|
1353
|
+
)
|
|
1274
1354
|
table = _build_dead_code_table(candidates, project_name)
|
|
1275
1355
|
if output is not None:
|
|
1276
1356
|
with output.open("w", encoding=cs.ENCODING_UTF8) as fh:
|
|
1277
|
-
Console(file=fh)
|
|
1357
|
+
file_console = Console(file=fh)
|
|
1358
|
+
file_console.print(table)
|
|
1359
|
+
if notice:
|
|
1360
|
+
file_console.print(notice)
|
|
1278
1361
|
app_context.console.print(
|
|
1279
1362
|
style(
|
|
1280
1363
|
cs.CLI_DEADCODE_WRITTEN.format(count=len(candidates), path=output),
|
|
1281
1364
|
cs.Color.GREEN,
|
|
1282
1365
|
)
|
|
1283
1366
|
)
|
|
1367
|
+
if notice:
|
|
1368
|
+
app_context.console.print(style(notice, cs.Color.YELLOW))
|
|
1284
1369
|
return
|
|
1285
1370
|
|
|
1286
1371
|
if not candidates:
|
|
1287
1372
|
app_context.console.print(style(cs.CLI_DEADCODE_NONE, cs.Color.GREEN))
|
|
1288
|
-
|
|
1289
|
-
|
|
1290
|
-
|
|
1291
|
-
|
|
1292
|
-
|
|
1373
|
+
else:
|
|
1374
|
+
app_context.console.print(table)
|
|
1375
|
+
app_context.console.print(
|
|
1376
|
+
style(cs.CLI_DEADCODE_SUMMARY.format(count=len(candidates)), cs.Color.GREEN)
|
|
1377
|
+
)
|
|
1378
|
+
if notice:
|
|
1379
|
+
app_context.console.print(style(notice, cs.Color.YELLOW))
|
|
1293
1380
|
|
|
1294
1381
|
|
|
1295
1382
|
@app.command(
|
|
@@ -1330,7 +1417,7 @@ def dead_code(
|
|
|
1330
1417
|
False, "--fail-on-found", help=ch.HELP_DEADCODE_FAIL_ON_FOUND
|
|
1331
1418
|
),
|
|
1332
1419
|
) -> None:
|
|
1333
|
-
from .dead_code import
|
|
1420
|
+
from .dead_code import collect_dead_code_with_coverage
|
|
1334
1421
|
|
|
1335
1422
|
show_progress = output_format == cs.DeadCodeFormat.TABLE and output is None
|
|
1336
1423
|
if show_progress:
|
|
@@ -1339,13 +1426,14 @@ def dead_code(
|
|
|
1339
1426
|
projects: list[str] = []
|
|
1340
1427
|
resolved: str | None = None
|
|
1341
1428
|
rows: list[ResultRow] = []
|
|
1429
|
+
structural_tier_symbols = 0
|
|
1342
1430
|
try:
|
|
1343
1431
|
with connect_memgraph(batch_size=1) as ingestor:
|
|
1344
1432
|
projects = ingestor.list_projects()
|
|
1345
1433
|
resolved = _resolve_dead_code_project(project_name, projects)
|
|
1346
1434
|
if resolved is not None:
|
|
1347
1435
|
logger.info(ls.DEADCODE_SCANNING.format(project_name=resolved))
|
|
1348
|
-
rows =
|
|
1436
|
+
rows, structural_tier_symbols = collect_dead_code_with_coverage(
|
|
1349
1437
|
ingestor,
|
|
1350
1438
|
resolved,
|
|
1351
1439
|
_dead_code_config(
|
|
@@ -1371,7 +1459,9 @@ def dead_code(
|
|
|
1371
1459
|
candidates = [
|
|
1372
1460
|
_to_dead_code_row(row) for row in _filter_excluded_rows(rows, exclude)
|
|
1373
1461
|
]
|
|
1374
|
-
_emit_dead_code(
|
|
1462
|
+
_emit_dead_code(
|
|
1463
|
+
candidates, output_format, output, resolved, structural_tier_symbols
|
|
1464
|
+
)
|
|
1375
1465
|
|
|
1376
1466
|
if fail_on_found and candidates:
|
|
1377
1467
|
raise typer.Exit(1)
|
|
@@ -351,3 +351,13 @@ CLI_COMMANDS: dict[CLICommandName, str] = {
|
|
|
351
351
|
CLICommandName.DOCTOR: CMD_DOCTOR,
|
|
352
352
|
CLICommandName.HELP: CMD_HELP,
|
|
353
353
|
}
|
|
354
|
+
CMD_VERIFY_INDEX = "Verify a protobuf index against its provenance manifest"
|
|
355
|
+
HELP_VERIFY_INDEX_DIR = "Directory holding the index artifacts and manifest.json."
|
|
356
|
+
HELP_TRUSTED_MANIFEST_SHA = (
|
|
357
|
+
"Externally trusted sha256 of manifest.json (e.g. from an attestation); "
|
|
358
|
+
"anchors verification beyond local self-consistency."
|
|
359
|
+
)
|
|
360
|
+
CMD_DIFF_INDEX = "Structural diff between two protobuf index snapshots"
|
|
361
|
+
HELP_DIFF_OLD = "Directory holding the OLD snapshot artifacts."
|
|
362
|
+
HELP_DIFF_NEW = "Directory holding the NEW snapshot artifacts."
|
|
363
|
+
HELP_DIFF_JSON_OUT = "Write the JSON delta to FILE instead of stdout."
|
|
@@ -212,6 +212,9 @@ class AppConfig(BaseSettings):
|
|
|
212
212
|
# augments exact first-party call binding and external-site suppression;
|
|
213
213
|
# tree-sitter stays the standalone-correct backbone.
|
|
214
214
|
GO_FRONTEND: cs.GoFrontend = cs.GoFrontend.AUTO
|
|
215
|
+
PYTHON_FRONTEND: cs.PythonFrontend = cs.PythonFrontend.HEURISTIC
|
|
216
|
+
JAVA_FRONTEND: cs.JavaFrontend = cs.JavaFrontend.HEURISTIC
|
|
217
|
+
LOMBOK_JAR: str | None = None
|
|
215
218
|
CAPTURE_FUNCTION_LOCAL_DEFINITIONS: bool = Field(
|
|
216
219
|
True, validation_alias="CGR_CAPTURE_LOCAL_DEFINITIONS"
|
|
217
220
|
)
|
|
@@ -312,3 +312,29 @@ CSHARP_RESERVED_KEYWORDS = frozenset(
|
|
|
312
312
|
"while",
|
|
313
313
|
}
|
|
314
314
|
)
|
|
315
|
+
|
|
316
|
+
|
|
317
|
+
# Await plumbing that returns the SAME value in a different wrapper: the flow
|
|
318
|
+
# walk recurses a method-call receiver only through these, so without them
|
|
319
|
+
# `await FetchAsync().ConfigureAwait(false)` loses the receiver's taint and a
|
|
320
|
+
# sink fed from it has no edge. `ConfigureAwait` is near-universal in library
|
|
321
|
+
# code, so this shape is common rather than exotic (issue #1187).
|
|
322
|
+
CSHARP_TAINT_TRANSPARENT_METHODS = frozenset(
|
|
323
|
+
{
|
|
324
|
+
"ConfigureAwait",
|
|
325
|
+
"GetAwaiter",
|
|
326
|
+
"GetResult",
|
|
327
|
+
"AsTask",
|
|
328
|
+
}
|
|
329
|
+
)
|
|
330
|
+
|
|
331
|
+
|
|
332
|
+
# Deconstructing declaration: `var (a, b) = (x, y)` binds through a pattern
|
|
333
|
+
# child and a tuple child rather than the usual name/value fields.
|
|
334
|
+
TS_CSHARP_TUPLE_PATTERN = "tuple_pattern"
|
|
335
|
+
TS_CSHARP_TUPLE_EXPRESSION = "tuple_expression"
|
|
336
|
+
TS_CSHARP_DECLARATION_EXPRESSION = "declaration_expression"
|
|
337
|
+
# `if (o is string s)` binds `s` to the SUBJECT's value, so taint has to cross
|
|
338
|
+
# the pattern or the bound name looks clean inside the branch.
|
|
339
|
+
TS_CSHARP_IS_PATTERN = "is_pattern_expression"
|
|
340
|
+
TS_CSHARP_DECLARATION_PATTERN = "declaration_pattern"
|
|
@@ -23,6 +23,10 @@ TS_DART_LABEL = "label"
|
|
|
23
23
|
# Python's `conditional_expression` node TYPE but orders operands
|
|
24
24
|
# [condition, consequence, alternative], not [body, condition, alternative].
|
|
25
25
|
TS_DART_LIST_LITERAL = "list_literal"
|
|
26
|
+
# `await expr` parses as unary_expression > await_expression > chain; the
|
|
27
|
+
# awaited value carries the chain's taint and handle (issue #1224).
|
|
28
|
+
TS_DART_UNARY_EXPRESSION = "unary_expression"
|
|
29
|
+
TS_DART_AWAIT_EXPRESSION = "await_expression"
|
|
26
30
|
TS_DART_SET_OR_MAP_LITERAL = "set_or_map_literal"
|
|
27
31
|
# Inside a set_or_map_literal: a MAP entry is a `pair` whose `value` field
|
|
28
32
|
# holds the stored expression; `type_arguments` (`<String, T>{...}`) carry
|
|
@@ -65,6 +69,7 @@ DART_PATTERN_NODE_SUFFIX = "_pattern"
|
|
|
65
69
|
# swallows a trailing ternary as its LAST named child.
|
|
66
70
|
DART_EXPRESSION_NODE_SUFFIX = "_expression"
|
|
67
71
|
TS_DART_FUNCTION_EXPRESSION = "function_expression"
|
|
72
|
+
TS_DART_FUNCTION_EXPRESSION_BODY = "function_expression_body"
|
|
68
73
|
TS_DART_LOCAL_FUNCTION_DECLARATION = "local_function_declaration"
|
|
69
74
|
|
|
70
75
|
# Nodes opening their OWN variable scope: the local-type walk must not descend,
|
|
@@ -93,6 +98,8 @@ TS_DART_FORMAL_PARAMETER_LIST = "formal_parameter_list"
|
|
|
93
98
|
TS_DART_SWITCH_STATEMENT_CASE = "switch_statement_case"
|
|
94
99
|
TS_DART_SWITCH_STATEMENT_DEFAULT = "switch_statement_default"
|
|
95
100
|
TS_DART_TEMPLATE_SUBSTITUTION = "template_substitution"
|
|
101
|
+
# The bare `$name` interpolation form wraps its name in this node type.
|
|
102
|
+
TS_DART_IDENTIFIER_DOLLAR_ESCAPED = "identifier_dollar_escaped"
|
|
96
103
|
# `[String m]` (optional positional) and `{String? m}` (named) both wrap their
|
|
97
104
|
# `formal_parameter`s in an `optional_formal_parameters` node (issue #1173).
|
|
98
105
|
TS_DART_OPTIONAL_FORMAL_PARAMETERS = "optional_formal_parameters"
|