code-graph-rag 0.2.0__tar.gz → 0.2.16__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.2.0/code_graph_rag.egg-info → code_graph_rag-0.2.16}/PKG-INFO +35 -17
- {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/PYPI_README.md +33 -15
- {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/README.md +16 -10
- {code_graph_rag-0.2.0 → code_graph_rag-0.2.16/code_graph_rag.egg-info}/PKG-INFO +35 -17
- {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/code_graph_rag.egg-info/SOURCES.txt +3 -0
- {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/code_graph_rag.egg-info/requires.txt +1 -1
- {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/cli.py +117 -3
- {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/cli_help.py +4 -2
- {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/config.py +4 -0
- {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/constants/ast_dart.py +7 -0
- {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/constants/ast_python.py +9 -0
- {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/constants/ast_rust.py +6 -0
- {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/constants/cli.py +30 -2
- {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/constants/core.py +9 -0
- {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/constants/duplicates.py +29 -1
- {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/constants/graph.py +46 -4
- {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/constants/mcp.py +20 -0
- {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/constants/providers.py +10 -0
- {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/constants/structural.py +4 -0
- {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/constants/trace.py +23 -0
- {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/crash_correlation.py +269 -29
- {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/cypher_queries.py +290 -64
- {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/editing/patcher.py +2 -2
- code_graph_rag-0.2.16/codebase_rag/editing/signature_bind.py +608 -0
- {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/editing/signature_spec.py +2 -1
- {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/gloss_repair.py +18 -0
- {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/graph_query.py +97 -17
- {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/graph_updater.py +238 -6
- {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/language_spec.py +6 -0
- {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/logs.py +19 -0
- {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/main.py +14 -3
- {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/mcp/tools.py +156 -50
- {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/parsers/call_processor.py +161 -50
- {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/parsers/call_resolver.py +10 -0
- {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/parsers/class_ingest/mixin.py +10 -1
- {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/parsers/cpp/type_inference.py +7 -3
- {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/parsers/dart/__init__.py +2 -0
- code_graph_rag-0.2.16/codebase_rag/parsers/dart/package_paths.py +61 -0
- {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/parsers/dart/utils.py +22 -6
- {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/parsers/definition_processor.py +5 -0
- {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/parsers/endpoint_prefixes.py +32 -13
- {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/parsers/endpoint_routes.py +74 -5
- {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/parsers/endpoints.py +33 -1
- {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/parsers/flow_access/processor.py +6 -2
- {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/parsers/go/type_inference.py +17 -11
- {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/parsers/import_processor.py +98 -29
- {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/parsers/io_access/constants.py +2 -0
- {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/parsers/io_access/processor.py +7 -4
- code_graph_rag-0.2.16/codebase_rag/parsers/io_access/resource_names.py +29 -0
- {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/parsers/php/namespaces.py +16 -0
- {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/parsers/py/variable_analyzer.py +40 -2
- {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/parsers/rs/type_inference.py +36 -28
- {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/services/graph_service.py +24 -7
- {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/services/llm.py +41 -1
- {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/structural_check.py +35 -9
- {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/structural_delta.py +710 -41
- {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/tools/ast_grep_service.py +19 -1
- {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/tools/tool_descriptions.py +18 -8
- {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/trace/cli.py +11 -7
- {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/trace/pprof.py +17 -7
- {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/trace/xdebug.py +23 -1
- {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/types_defs.py +3 -1
- {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/utils/path_utils.py +19 -0
- {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/utils/source_encoding.py +66 -8
- {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/utils/source_extraction.py +4 -2
- {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/pyproject.toml +6 -3
- {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/LICENSE +0 -0
- {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/cgr/__init__.py +0 -0
- {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/code_graph_rag.egg-info/dependency_links.txt +0 -0
- {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/code_graph_rag.egg-info/entry_points.txt +0 -0
- {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/code_graph_rag.egg-info/top_level.txt +0 -0
- {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/__init__.py +0 -0
- {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/_cli_env.py +0 -0
- {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/analyzers/__init__.py +0 -0
- {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/analyzers/ast_grep_analyzer.py +0 -0
- {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/analyzers/ast_grep_rules/patterns/c.yaml +0 -0
- {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/analyzers/ast_grep_rules/patterns/cpp.yaml +0 -0
- {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/analyzers/ast_grep_rules/patterns/csharp.yaml +0 -0
- {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/analyzers/ast_grep_rules/patterns/dart.yaml +0 -0
- {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/analyzers/ast_grep_rules/patterns/go.yaml +0 -0
- {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/analyzers/ast_grep_rules/patterns/java.yaml +0 -0
- {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/analyzers/ast_grep_rules/patterns/javascript.yaml +0 -0
- {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/analyzers/ast_grep_rules/patterns/lua.yaml +0 -0
- {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/analyzers/ast_grep_rules/patterns/php.yaml +0 -0
- {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/analyzers/ast_grep_rules/patterns/python.yaml +0 -0
- {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/analyzers/ast_grep_rules/patterns/ruby.yaml +0 -0
- {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/analyzers/ast_grep_rules/patterns/rust.yaml +0 -0
- {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/analyzers/ast_grep_rules/patterns/scala.yaml +0 -0
- {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/analyzers/ast_grep_rules/patterns/tsx.yaml +0 -0
- {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/analyzers/ast_grep_rules/patterns/typescript.yaml +0 -0
- {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/analyzers/ast_grep_rules/security/c.yaml +0 -0
- {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/analyzers/ast_grep_rules/security/cpp.yaml +0 -0
- {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/analyzers/ast_grep_rules/security/csharp.yaml +0 -0
- {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/analyzers/ast_grep_rules/security/dart.yaml +0 -0
- {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/analyzers/ast_grep_rules/security/go.yaml +0 -0
- {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/analyzers/ast_grep_rules/security/java.yaml +0 -0
- {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/analyzers/ast_grep_rules/security/javascript.yaml +0 -0
- {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/analyzers/ast_grep_rules/security/lua.yaml +0 -0
- {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/analyzers/ast_grep_rules/security/php.yaml +0 -0
- {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/analyzers/ast_grep_rules/security/python.yaml +0 -0
- {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/analyzers/ast_grep_rules/security/ruby.yaml +0 -0
- {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/analyzers/ast_grep_rules/security/rust.yaml +0 -0
- {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/analyzers/ast_grep_rules/security/scala.yaml +0 -0
- {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/analyzers/ast_grep_rules/security/tsx.yaml +0 -0
- {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/analyzers/ast_grep_rules/security/typescript.yaml +0 -0
- {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/analyzers/ast_grep_rules/smells/c.yaml +0 -0
- {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/analyzers/ast_grep_rules/smells/cpp.yaml +0 -0
- {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/analyzers/ast_grep_rules/smells/csharp.yaml +0 -0
- {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/analyzers/ast_grep_rules/smells/dart.yaml +0 -0
- {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/analyzers/ast_grep_rules/smells/go.yaml +0 -0
- {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/analyzers/ast_grep_rules/smells/java.yaml +0 -0
- {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/analyzers/ast_grep_rules/smells/javascript.yaml +0 -0
- {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/analyzers/ast_grep_rules/smells/lua.yaml +0 -0
- {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/analyzers/ast_grep_rules/smells/php.yaml +0 -0
- {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/analyzers/ast_grep_rules/smells/python.yaml +0 -0
- {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/analyzers/ast_grep_rules/smells/ruby.yaml +0 -0
- {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/analyzers/ast_grep_rules/smells/rust.yaml +0 -0
- {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/analyzers/ast_grep_rules/smells/scala.yaml +0 -0
- {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/analyzers/ast_grep_rules/smells/tsx.yaml +0 -0
- {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/analyzers/ast_grep_rules/smells/typescript.yaml +0 -0
- {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/ast_cache.py +0 -0
- {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/capture.py +0 -0
- {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/check_isolation.py +0 -0
- {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/checkout_state.py +0 -0
- {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/cli_runtime.py +0 -0
- {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/console_marks.py +0 -0
- {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/constants/__init__.py +0 -0
- {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/constants/ast_cpp.py +0 -0
- {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/constants/ast_csharp.py +0 -0
- {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/constants/ast_go.py +0 -0
- {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/constants/ast_java.py +0 -0
- {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/constants/ast_js.py +0 -0
- {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/constants/ast_julia.py +0 -0
- {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/constants/ast_lua.py +0 -0
- {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/constants/ast_nodes.py +0 -0
- {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/constants/ast_php.py +0 -0
- {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/constants/ast_scala.py +0 -0
- {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/constants/ast_sql.py +0 -0
- {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/constants/build.py +0 -0
- {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/constants/deadcode_roots.py +0 -0
- {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/constants/deps.py +0 -0
- {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/constants/embedded_graph.py +0 -0
- {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/constants/fqn_specs.py +0 -0
- {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/constants/health.py +0 -0
- {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/constants/interface.py +0 -0
- {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/constants/lang_tooling.py +0 -0
- {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/constants/languages.py +0 -0
- {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/constants/notebook.py +0 -0
- {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/constants/security.py +0 -0
- {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/constants/sqlite_vectors.py +0 -0
- {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/constants/stdlib_types.py +0 -0
- {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/context_pruning.py +0 -0
- {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/context_slice.py +0 -0
- {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/dead_code.py +0 -0
- {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/decorators.py +0 -0
- {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/docker-compose.yaml +0 -0
- {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/duplicates.py +0 -0
- {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/editing/__init__.py +0 -0
- {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/editing/cli.py +0 -0
- {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/editing/contract.py +0 -0
- {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/editing/import_paths.py +0 -0
- {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/editing/imports.py +0 -0
- {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/editing/occurrences.py +0 -0
- {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/editing/rename.py +0 -0
- {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/editing/signature_contract.py +0 -0
- {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/editing/sites.py +0 -0
- {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/editing/transaction.py +0 -0
- {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/editor_links.py +0 -0
- {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/embedded_graph/__init__.py +0 -0
- {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/embedded_graph/compiler.py +0 -0
- {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/embedded_graph/connection.py +0 -0
- {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/embedded_graph/cypher_ast.py +0 -0
- {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/embedded_graph/executor.py +0 -0
- {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/embedded_graph/expressions.py +0 -0
- {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/embedded_graph/extension.py +0 -0
- {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/embedded_graph/functions.py +0 -0
- {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/embedded_graph/lexer.py +0 -0
- {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/embedded_graph/limits.py +0 -0
- {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/embedded_graph/native.py +0 -0
- {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/embedded_graph/parser.py +0 -0
- {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/embedded_graph/procedures.py +0 -0
- {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/embedded_graph/sql.py +0 -0
- {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/embedded_graph/store.py +0 -0
- {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/embedded_graph/types.py +0 -0
- {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/embedder.py +0 -0
- {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/exceptions.py +0 -0
- {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/flow_verdict.py +0 -0
- {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/function_registry.py +0 -0
- {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/gloss.py +0 -0
- {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/gloss_anchor.py +0 -0
- {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/graph_audit.py +0 -0
- {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/graph_cli.py +0 -0
- {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/graph_dialects.py +0 -0
- {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/graph_loader.py +0 -0
- {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/interface_skip.py +0 -0
- {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/mcp/__init__.py +0 -0
- {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/mcp/client.py +0 -0
- {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/mcp/server.py +0 -0
- {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/mgclient_compat.py +0 -0
- {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/mgclient_probe.py +0 -0
- {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/models.py +0 -0
- {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/parser_fingerprint.py +0 -0
- {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/parser_loader.py +0 -0
- {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/parsers/__init__.py +0 -0
- {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/parsers/anchor_hash.py +0 -0
- {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/parsers/ast_fingerprint.py +0 -0
- {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/parsers/ast_grep_patterns/bash.yaml +0 -0
- {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/parsers/ast_grep_patterns/elixir.yaml +0 -0
- {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/parsers/ast_grep_patterns/haskell.yaml +0 -0
- {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/parsers/ast_grep_patterns/kotlin.yaml +0 -0
- {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/parsers/ast_grep_patterns/nix.yaml +0 -0
- {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/parsers/ast_grep_patterns/ruby.yaml +0 -0
- {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/parsers/ast_grep_patterns/solidity.yaml +0 -0
- {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/parsers/ast_grep_patterns/swift.yaml +0 -0
- {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/parsers/ast_grep_scope.py +0 -0
- {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/parsers/ast_grep_tier.py +0 -0
- {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/parsers/build_lock.py +0 -0
- {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/parsers/class_ingest/__init__.py +0 -0
- {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/parsers/class_ingest/base_targets.py +0 -0
- {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/parsers/class_ingest/cpp_modules.py +0 -0
- {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/parsers/class_ingest/identity.py +0 -0
- {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/parsers/class_ingest/method_override.py +0 -0
- {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/parsers/class_ingest/node_type.py +0 -0
- {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/parsers/class_ingest/parent_extraction.py +0 -0
- {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/parsers/class_ingest/relationships.py +0 -0
- {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/parsers/class_ingest/utils.py +0 -0
- {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/parsers/contract_linking.py +0 -0
- {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/parsers/contracts.py +0 -0
- {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/parsers/cpp/__init__.py +0 -0
- {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/parsers/cpp/class_macro.py +0 -0
- {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/parsers/cpp/function_values.py +0 -0
- {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/parsers/cpp/local_types.py +0 -0
- {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/parsers/cpp/overloads.py +0 -0
- {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/parsers/cpp/preproc_recovery.py +0 -0
- {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/parsers/cpp/trailing_annotation.py +0 -0
- {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/parsers/cpp/utils.py +0 -0
- {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/parsers/cpp_frontend/__init__.py +0 -0
- {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/parsers/cpp_frontend/constants.py +0 -0
- {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/parsers/cpp_frontend/frontend.py +0 -0
- {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/parsers/cpp_frontend/qn.py +0 -0
- {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/parsers/csharp/__init__.py +0 -0
- {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/parsers/csharp/arity.py +0 -0
- {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/parsers/csharp/type_inference.py +0 -0
- {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/parsers/csharp/utils.py +0 -0
- {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/parsers/csharp_frontend/__init__.py +0 -0
- {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/parsers/csharp_frontend/frontend.py +0 -0
- {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/parsers/csharp_frontend/roslyn/Frontend.cs +0 -0
- {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/parsers/csharp_frontend/roslyn/Frontend.csproj +0 -0
- {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/parsers/csharp_frontend/roslyn/Program.cs +0 -0
- {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/parsers/dart/type_inference.py +0 -0
- {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/parsers/definition_docstring.py +0 -0
- {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/parsers/dependency_parser.py +0 -0
- {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/parsers/dispatch_registry.py +0 -0
- {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/parsers/document_tier.py +0 -0
- {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/parsers/enum_variants.py +0 -0
- {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/parsers/export_detection.py +0 -0
- {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/parsers/factory.py +0 -0
- {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/parsers/field_nodes.py +0 -0
- {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/parsers/flat_module.py +0 -0
- {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/parsers/flow_access/__init__.py +0 -0
- {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/parsers/flow_access/constants.py +0 -0
- {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/parsers/frontend_mode.py +0 -0
- {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/parsers/frontends/__init__.py +0 -0
- {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/parsers/frontends/cpp.py +0 -0
- {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/parsers/frontends/csharp.py +0 -0
- {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/parsers/frontends/go.py +0 -0
- {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/parsers/frontends/java.py +0 -0
- {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/parsers/frontends/protocol.py +0 -0
- {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/parsers/frontends/python.py +0 -0
- {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/parsers/frontends/registry.py +0 -0
- {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/parsers/function_ingest.py +0 -0
- {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/parsers/go/__init__.py +0 -0
- {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/parsers/go/builds.py +0 -0
- {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/parsers/go/interface_ingest.py +0 -0
- {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/parsers/go/interfaces.py +0 -0
- {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/parsers/go/link_state.py +0 -0
- {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/parsers/go/module_paths.py +0 -0
- {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/parsers/go/utils.py +0 -0
- {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/parsers/go_frontend/__init__.py +0 -0
- {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/parsers/go_frontend/frontend.py +0 -0
- {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/parsers/go_frontend/gotypes/go.mod +0 -0
- {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/parsers/go_frontend/gotypes/go.sum +0 -0
- {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/parsers/go_frontend/gotypes/main.go +0 -0
- {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/parsers/handlers/__init__.py +0 -0
- {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/parsers/handlers/base.py +0 -0
- {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/parsers/handlers/cpp.py +0 -0
- {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/parsers/handlers/java.py +0 -0
- {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/parsers/handlers/js_ts.py +0 -0
- {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/parsers/handlers/julia.py +0 -0
- {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/parsers/handlers/lua.py +0 -0
- {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/parsers/handlers/php.py +0 -0
- {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/parsers/handlers/protocol.py +0 -0
- {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/parsers/handlers/python.py +0 -0
- {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/parsers/handlers/registry.py +0 -0
- {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/parsers/handlers/rust.py +0 -0
- {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/parsers/interface_fingerprint.py +0 -0
- {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/parsers/io_access/__init__.py +0 -0
- {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/parsers/io_access/descriptor.py +0 -0
- {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/parsers/io_access/extract.py +0 -0
- {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/parsers/io_access/models.py +0 -0
- {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/parsers/io_access/registry.py +0 -0
- {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/parsers/io_access/url_folding.py +0 -0
- {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/parsers/java/__init__.py +0 -0
- {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/parsers/java/method_resolver.py +0 -0
- {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/parsers/java/type_inference.py +0 -0
- {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/parsers/java/type_resolver.py +0 -0
- {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/parsers/java/utils.py +0 -0
- {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/parsers/java/variable_analyzer.py +0 -0
- {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/parsers/java_frontend/__init__.py +0 -0
- {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/parsers/java_frontend/frontend.py +0 -0
- {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/parsers/java_frontend/javac/cgr/Frontend.java +0 -0
- {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/parsers/java_generated.py +0 -0
- {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/parsers/java_lombok.py +0 -0
- {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/parsers/js_ts/__init__.py +0 -0
- {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/parsers/js_ts/commonjs_exports.py +0 -0
- {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/parsers/js_ts/ingest.py +0 -0
- {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/parsers/js_ts/module_paths.py +0 -0
- {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/parsers/js_ts/module_system.py +0 -0
- {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/parsers/js_ts/overloads.py +0 -0
- {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/parsers/js_ts/reexports.py +0 -0
- {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/parsers/js_ts/type_inference.py +0 -0
- {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/parsers/js_ts/utils.py +0 -0
- {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/parsers/julia/__init__.py +0 -0
- {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/parsers/julia/utils.py +0 -0
- {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/parsers/lua/__init__.py +0 -0
- {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/parsers/lua/type_inference.py +0 -0
- {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/parsers/lua/utils.py +0 -0
- {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/parsers/module_docstring.py +0 -0
- {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/parsers/notebook.py +0 -0
- {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/parsers/parameter_nodes.py +0 -0
- {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/parsers/php/__init__.py +0 -0
- {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/parsers/php/class_names.py +0 -0
- {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/parsers/php/utils.py +0 -0
- {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/parsers/positional_params.py +0 -0
- {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/parsers/py/__init__.py +0 -0
- {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/parsers/py/ast_analyzer.py +0 -0
- {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/parsers/py/class_aliases.py +0 -0
- {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/parsers/py/expression_analyzer.py +0 -0
- {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/parsers/py/forward_refs.py +0 -0
- {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/parsers/py/overloads.py +0 -0
- {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/parsers/py/receiver_rebinding.py +0 -0
- {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/parsers/py/type_inference.py +0 -0
- {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/parsers/py/utils.py +0 -0
- {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/parsers/py/with_analyzer.py +0 -0
- {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/parsers/py_frontend/__init__.py +0 -0
- {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/parsers/py_frontend/frontend.py +0 -0
- {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/parsers/python_source_roots.py +0 -0
- {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/parsers/rpc_exposure.py +0 -0
- {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/parsers/rs/__init__.py +0 -0
- {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/parsers/rs/cargo_semver.py +0 -0
- {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/parsers/rs/utils.py +0 -0
- {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/parsers/scala/__init__.py +0 -0
- {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/parsers/scala/utils.py +0 -0
- {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/parsers/semantic_call_join.py +0 -0
- {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/parsers/stdlib_extractor.py +0 -0
- {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/parsers/string_call.py +0 -0
- {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/parsers/structure_processor.py +0 -0
- {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/parsers/type_facts.py +0 -0
- {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/parsers/type_inference.py +0 -0
- {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/parsers/utils.py +0 -0
- {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/path_filters.py +0 -0
- {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/project_selection.py +0 -0
- {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/prompts.py +0 -0
- {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/providers/__init__.py +0 -0
- {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/providers/base.py +0 -0
- {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/providers/litellm.py +0 -0
- {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/queries/highlights/c_sharp.scm +0 -0
- {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/queries/highlights/dart.scm +0 -0
- {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/queries/highlights/java.scm +0 -0
- {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/queries/highlights/javascript.scm +0 -0
- {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/queries/highlights/julia.scm +0 -0
- {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/queries/highlights/php.scm +0 -0
- {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/queries/highlights/python.scm +0 -0
- {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/queries/highlights/rust.scm +0 -0
- {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/queries/highlights/typescript.scm +0 -0
- {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/readme_sections.py +0 -0
- {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/schema_builder.py +0 -0
- {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/schema_parse.py +0 -0
- {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/schemas.py +0 -0
- {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/services/__init__.py +0 -0
- {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/services/anthropic_token_counter.py +0 -0
- {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/services/cypher_guard.py +0 -0
- {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/services/filtering.py +0 -0
- {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/services/gloss_cleanup.py +0 -0
- {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/services/graph_diff.py +0 -0
- {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/services/neo4j_driver.py +0 -0
- {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/services/protobuf_service.py +0 -0
- {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/services/provenance.py +0 -0
- {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/services/resource_cleanup.py +0 -0
- {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/services/usage_cost.py +0 -0
- {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/sql_names.py +0 -0
- {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/sqlite_vectors.py +0 -0
- {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/stack/__init__.py +0 -0
- {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/stack/cli.py +0 -0
- {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/stack/constants.py +0 -0
- {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/stack/health.py +0 -0
- {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/stack/manager.py +0 -0
- {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/sync_guard.py +0 -0
- {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/sync_lock.py +0 -0
- {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/taint.py +0 -0
- {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/tool_errors.py +0 -0
- {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/tools/__init__.py +0 -0
- {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/tools/code_retrieval.py +0 -0
- {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/tools/codebase_query.py +0 -0
- {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/tools/directory_lister.py +0 -0
- {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/tools/duplicate_detection.py +0 -0
- {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/tools/file_editor.py +0 -0
- {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/tools/file_reader.py +0 -0
- {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/tools/file_writer.py +0 -0
- {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/tools/graph_refresh.py +0 -0
- {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/tools/graph_rerank.py +0 -0
- {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/tools/health_checker.py +0 -0
- {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/tools/language.py +0 -0
- {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/tools/language_catalog.py +0 -0
- {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/tools/research.py +0 -0
- {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/tools/semantic_search.py +0 -0
- {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/tools/shell_command.py +0 -0
- {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/tools/structural_editor.py +0 -0
- {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/tools/structural_search.py +0 -0
- {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/tools/web_search.py +0 -0
- {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/trace/__init__.py +0 -0
- {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/trace/carry.py +0 -0
- {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/trace/cpuprofile.py +0 -0
- {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/trace/dispatch_site.py +0 -0
- {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/trace/ebpf_pprof.py +0 -0
- {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/trace/ingest.py +0 -0
- {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/trace/instrumented.py +0 -0
- {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/trace/pytest_plugin.py +0 -0
- {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/trace/records.py +0 -0
- {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/trace/resolution.py +0 -0
- {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/trace/rust_pprof.py +0 -0
- {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/trace/sourcemap.py +0 -0
- {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/trace/speedscope.py +0 -0
- {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/trace/tracer.py +0 -0
- {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/tree_sitter_point.py +0 -0
- {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/unixcoder.py +0 -0
- {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/utils/__init__.py +0 -0
- {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/utils/cpp_signatures.py +0 -0
- {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/utils/dependencies.py +0 -0
- {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/utils/endpoints.py +0 -0
- {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/utils/fqn_resolver.py +0 -0
- {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/utils/interruptible_thread.py +0 -0
- {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/utils/json_io.py +0 -0
- {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/utils/process_owner.py +0 -0
- {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/utils/qn_markers.py +0 -0
- {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/utils/rich_markdown.py +0 -0
- {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/utils/terminal_console.py +0 -0
- {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/utils/token_utils.py +0 -0
- {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/vector_store.py +0 -0
- {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/watch.py +0 -0
- {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/workspaces/__init__.py +0 -0
- {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/workspaces/cli.py +0 -0
- {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/workspaces/constants.py +0 -0
- {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/workspaces/models.py +0 -0
- {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/workspaces/storage.py +0 -0
- {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codec/__init__.py +0 -0
- {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codec/schema.proto +0 -0
- {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codec/schema_pb2.py +0 -0
- {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codec/schema_pb2.pyi +0 -0
- {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/setup.cfg +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: code-graph-rag
|
|
3
|
-
Version: 0.2.
|
|
3
|
+
Version: 0.2.16
|
|
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
|
|
@@ -19,7 +19,7 @@ Requires-Python: >=3.12
|
|
|
19
19
|
Description-Content-Type: text/markdown
|
|
20
20
|
License-File: LICENSE
|
|
21
21
|
Requires-Dist: loguru>=0.7.3
|
|
22
|
-
Requires-Dist: mcp<2,>=1.
|
|
22
|
+
Requires-Dist: mcp<2,>=1.30.0
|
|
23
23
|
Requires-Dist: pydantic-ai-slim[anthropic,google,openai]>=2.0.0
|
|
24
24
|
Requires-Dist: pydantic-settings>=2.12.0
|
|
25
25
|
Requires-Dist: python-dotenv>=1.2.1
|
|
@@ -93,7 +93,7 @@ Dynamic: license-file
|
|
|
93
93
|
|
|
94
94
|
# Code-Graph-RAG
|
|
95
95
|
|
|
96
|
-
Code-Graph-RAG parses a multi-language codebase with Tree-sitter, sharpened by compiler-grade frontends and runtime traces where available, builds a knowledge graph of its structure in
|
|
96
|
+
Code-Graph-RAG parses a multi-language codebase with Tree-sitter, sharpened by compiler-grade frontends and runtime traces where available, builds a knowledge graph of its structure in an embedded graph database that needs no server, and lets you query, edit, and optimise that code in plain English. It works across a monorepo of mixed languages under one unified graph schema.
|
|
97
97
|
|
|
98
98
|
## What It Does
|
|
99
99
|
|
|
@@ -152,8 +152,9 @@ transformers are then not required locally.
|
|
|
152
152
|
`pip install code-graph-rag` gives you the newest PyPI release, which is deliberately
|
|
153
153
|
not the newest commit. Git tags exist for every version (one per merge), while PyPI
|
|
154
154
|
uploads and GitHub Release binaries land on an every-50 cadence, so the tag on `main`
|
|
155
|
-
usually runs ahead of the published version. A security fix
|
|
156
|
-
|
|
155
|
+
usually runs ahead of the published version. A security fix, a breaking change or a
|
|
156
|
+
merge a maintainer labels `release now` is the exception: each ships immediately
|
|
157
|
+
rather than waiting for the cadence.
|
|
157
158
|
|
|
158
159
|
To run code newer than the latest release, install from git with uv:
|
|
159
160
|
|
|
@@ -175,14 +176,22 @@ for git installs and the other methods.
|
|
|
175
176
|
### Prerequisites
|
|
176
177
|
|
|
177
178
|
- Python 3.12+
|
|
178
|
-
- Docker (for Memgraph)
|
|
179
|
-
- `cmake` (for building pymgclient)
|
|
180
179
|
- `ripgrep` (`rg`) (for shell command text searching)
|
|
180
|
+
- Only for the optional Memgraph backend: Docker, and `cmake` where no
|
|
181
|
+
`pymgclient` wheel fits your platform
|
|
182
|
+
|
|
183
|
+
The knowledge graph is an embedded SQLite file (`~/.cgr/graph.sqlite`), so there
|
|
184
|
+
is no database server to run. Memgraph and Neo4j remain available as opt-in
|
|
185
|
+
backends; see [Graph Backends](https://docs.code-graph-rag.com/architecture/embedded-graph/).
|
|
181
186
|
|
|
182
187
|
The wheel is pure Python (`py3-none-any`), so it installs on any platform with
|
|
183
|
-
Python 3.12 or newer.
|
|
184
|
-
|
|
185
|
-
|
|
188
|
+
Python 3.12 or newer. On Linux (x86_64, aarch64), macOS and Windows x64 it also
|
|
189
|
+
pulls in `cgr-graph-rs`, a native extension that speeds up the embedded graph;
|
|
190
|
+
elsewhere the same engine runs in pure Python.
|
|
191
|
+
|
|
192
|
+
Some distributions ship an older interpreter (Debian Bookworm, and so Raspberry
|
|
193
|
+
Pi OS Bookworm, ships 3.11), which also explains the failed piwheels Bookworm
|
|
194
|
+
build. On those systems, see the [installation
|
|
186
195
|
guide](https://github.com/vitali87/code-graph-rag/blob/main/docs/getting-started/installation.md#older-system-interpreters)
|
|
187
196
|
for the available interpreter-pinning alternatives.
|
|
188
197
|
|
|
@@ -190,14 +199,17 @@ for the available interpreter-pinning alternatives.
|
|
|
190
199
|
|
|
191
200
|
The package installs a `cgr` command.
|
|
192
201
|
|
|
193
|
-
**
|
|
202
|
+
**Parse a repo, then query it:**
|
|
194
203
|
|
|
195
204
|
```bash
|
|
196
|
-
cgr
|
|
197
|
-
cgr start --repo-path ./my-project
|
|
198
|
-
--update-graph --clean # parse & launch interactive chat
|
|
205
|
+
cgr start --repo-path ./my-project --update-graph # parse into the graph
|
|
206
|
+
cgr start --repo-path ./my-project # launch the interactive chat
|
|
199
207
|
```
|
|
200
208
|
|
|
209
|
+
The graph is written to `~/.cgr/graph.sqlite`. To use Memgraph instead, install
|
|
210
|
+
`code-graph-rag[memgraph]`, set `GRAPH_BACKEND=memgraph`, and start the packaged
|
|
211
|
+
Memgraph + Qdrant stack with `cgr daemon up`.
|
|
212
|
+
|
|
201
213
|
**Index to protobuf for offline use:**
|
|
202
214
|
|
|
203
215
|
```bash
|
|
@@ -304,7 +316,11 @@ for fn in functions[:5]:
|
|
|
304
316
|
print(f"{fn.properties['name']}: {len(rels)} relationships")
|
|
305
317
|
```
|
|
306
318
|
|
|
307
|
-
### Query
|
|
319
|
+
### Query the graph with Cypher
|
|
320
|
+
|
|
321
|
+
`MemgraphIngestor` keeps its original name but works with whichever backend
|
|
322
|
+
`GRAPH_BACKEND` selects. On the default embedded graph, `host` and `port` are
|
|
323
|
+
not used.
|
|
308
324
|
|
|
309
325
|
```python
|
|
310
326
|
from cgr import MemgraphIngestor
|
|
@@ -357,8 +373,10 @@ Configure via `.env` or environment variables:
|
|
|
357
373
|
|
|
358
374
|
| Variable | Default | Description |
|
|
359
375
|
|----------|---------|-------------|
|
|
360
|
-
| `
|
|
361
|
-
| `
|
|
376
|
+
| `GRAPH_BACKEND` | `sqlite` | Graph engine: `sqlite` (embedded), `memgraph`, or `neo4j` |
|
|
377
|
+
| `SQLITE_GRAPH_PATH` | `~/.cgr/graph.sqlite` | Embedded graph file |
|
|
378
|
+
| `MEMGRAPH_HOST` | `localhost` | Memgraph hostname (with `GRAPH_BACKEND=memgraph`) |
|
|
379
|
+
| `MEMGRAPH_PORT` | `7687` | Memgraph port (with `GRAPH_BACKEND=memgraph`) |
|
|
362
380
|
| `ORCHESTRATOR_PROVIDER` | | Provider: `google`, `openai`, `anthropic`, `azure`, `ollama`, `minimax`, `litellm_proxy` |
|
|
363
381
|
| `ORCHESTRATOR_MODEL` | | Model ID (e.g. `gpt-5.6-terra`, `gemini-3.6-flash`, `claude-sonnet-5`, `qwen2.5-coder`) |
|
|
364
382
|
| `ORCHESTRATOR_API_KEY` | | API key for the provider (not needed for `ollama`) |
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# Code-Graph-RAG
|
|
2
2
|
|
|
3
|
-
Code-Graph-RAG parses a multi-language codebase with Tree-sitter, sharpened by compiler-grade frontends and runtime traces where available, builds a knowledge graph of its structure in
|
|
3
|
+
Code-Graph-RAG parses a multi-language codebase with Tree-sitter, sharpened by compiler-grade frontends and runtime traces where available, builds a knowledge graph of its structure in an embedded graph database that needs no server, and lets you query, edit, and optimise that code in plain English. It works across a monorepo of mixed languages under one unified graph schema.
|
|
4
4
|
|
|
5
5
|
## What It Does
|
|
6
6
|
|
|
@@ -59,8 +59,9 @@ transformers are then not required locally.
|
|
|
59
59
|
`pip install code-graph-rag` gives you the newest PyPI release, which is deliberately
|
|
60
60
|
not the newest commit. Git tags exist for every version (one per merge), while PyPI
|
|
61
61
|
uploads and GitHub Release binaries land on an every-50 cadence, so the tag on `main`
|
|
62
|
-
usually runs ahead of the published version. A security fix
|
|
63
|
-
|
|
62
|
+
usually runs ahead of the published version. A security fix, a breaking change or a
|
|
63
|
+
merge a maintainer labels `release now` is the exception: each ships immediately
|
|
64
|
+
rather than waiting for the cadence.
|
|
64
65
|
|
|
65
66
|
To run code newer than the latest release, install from git with uv:
|
|
66
67
|
|
|
@@ -82,14 +83,22 @@ for git installs and the other methods.
|
|
|
82
83
|
### Prerequisites
|
|
83
84
|
|
|
84
85
|
- Python 3.12+
|
|
85
|
-
- Docker (for Memgraph)
|
|
86
|
-
- `cmake` (for building pymgclient)
|
|
87
86
|
- `ripgrep` (`rg`) (for shell command text searching)
|
|
87
|
+
- Only for the optional Memgraph backend: Docker, and `cmake` where no
|
|
88
|
+
`pymgclient` wheel fits your platform
|
|
89
|
+
|
|
90
|
+
The knowledge graph is an embedded SQLite file (`~/.cgr/graph.sqlite`), so there
|
|
91
|
+
is no database server to run. Memgraph and Neo4j remain available as opt-in
|
|
92
|
+
backends; see [Graph Backends](https://docs.code-graph-rag.com/architecture/embedded-graph/).
|
|
88
93
|
|
|
89
94
|
The wheel is pure Python (`py3-none-any`), so it installs on any platform with
|
|
90
|
-
Python 3.12 or newer.
|
|
91
|
-
|
|
92
|
-
|
|
95
|
+
Python 3.12 or newer. On Linux (x86_64, aarch64), macOS and Windows x64 it also
|
|
96
|
+
pulls in `cgr-graph-rs`, a native extension that speeds up the embedded graph;
|
|
97
|
+
elsewhere the same engine runs in pure Python.
|
|
98
|
+
|
|
99
|
+
Some distributions ship an older interpreter (Debian Bookworm, and so Raspberry
|
|
100
|
+
Pi OS Bookworm, ships 3.11), which also explains the failed piwheels Bookworm
|
|
101
|
+
build. On those systems, see the [installation
|
|
93
102
|
guide](https://github.com/vitali87/code-graph-rag/blob/main/docs/getting-started/installation.md#older-system-interpreters)
|
|
94
103
|
for the available interpreter-pinning alternatives.
|
|
95
104
|
|
|
@@ -97,14 +106,17 @@ for the available interpreter-pinning alternatives.
|
|
|
97
106
|
|
|
98
107
|
The package installs a `cgr` command.
|
|
99
108
|
|
|
100
|
-
**
|
|
109
|
+
**Parse a repo, then query it:**
|
|
101
110
|
|
|
102
111
|
```bash
|
|
103
|
-
cgr
|
|
104
|
-
cgr start --repo-path ./my-project
|
|
105
|
-
--update-graph --clean # parse & launch interactive chat
|
|
112
|
+
cgr start --repo-path ./my-project --update-graph # parse into the graph
|
|
113
|
+
cgr start --repo-path ./my-project # launch the interactive chat
|
|
106
114
|
```
|
|
107
115
|
|
|
116
|
+
The graph is written to `~/.cgr/graph.sqlite`. To use Memgraph instead, install
|
|
117
|
+
`code-graph-rag[memgraph]`, set `GRAPH_BACKEND=memgraph`, and start the packaged
|
|
118
|
+
Memgraph + Qdrant stack with `cgr daemon up`.
|
|
119
|
+
|
|
108
120
|
**Index to protobuf for offline use:**
|
|
109
121
|
|
|
110
122
|
```bash
|
|
@@ -211,7 +223,11 @@ for fn in functions[:5]:
|
|
|
211
223
|
print(f"{fn.properties['name']}: {len(rels)} relationships")
|
|
212
224
|
```
|
|
213
225
|
|
|
214
|
-
### Query
|
|
226
|
+
### Query the graph with Cypher
|
|
227
|
+
|
|
228
|
+
`MemgraphIngestor` keeps its original name but works with whichever backend
|
|
229
|
+
`GRAPH_BACKEND` selects. On the default embedded graph, `host` and `port` are
|
|
230
|
+
not used.
|
|
215
231
|
|
|
216
232
|
```python
|
|
217
233
|
from cgr import MemgraphIngestor
|
|
@@ -264,8 +280,10 @@ Configure via `.env` or environment variables:
|
|
|
264
280
|
|
|
265
281
|
| Variable | Default | Description |
|
|
266
282
|
|----------|---------|-------------|
|
|
267
|
-
| `
|
|
268
|
-
| `
|
|
283
|
+
| `GRAPH_BACKEND` | `sqlite` | Graph engine: `sqlite` (embedded), `memgraph`, or `neo4j` |
|
|
284
|
+
| `SQLITE_GRAPH_PATH` | `~/.cgr/graph.sqlite` | Embedded graph file |
|
|
285
|
+
| `MEMGRAPH_HOST` | `localhost` | Memgraph hostname (with `GRAPH_BACKEND=memgraph`) |
|
|
286
|
+
| `MEMGRAPH_PORT` | `7687` | Memgraph port (with `GRAPH_BACKEND=memgraph`) |
|
|
269
287
|
| `ORCHESTRATOR_PROVIDER` | | Provider: `google`, `openai`, `anthropic`, `azure`, `ollama`, `minimax`, `litellm_proxy` |
|
|
270
288
|
| `ORCHESTRATOR_MODEL` | | Model ID (e.g. `gpt-5.6-terra`, `gemini-3.6-flash`, `claude-sonnet-5`, `qwen2.5-coder`) |
|
|
271
289
|
| `ORCHESTRATOR_API_KEY` | | API key for the provider (not needed for `ollama`) |
|
|
@@ -42,13 +42,13 @@
|
|
|
42
42
|
|
|
43
43
|
# Code-Graph-RAG
|
|
44
44
|
|
|
45
|
-
Code-Graph-RAG parses a multi-language codebase with Tree-sitter, sharpened by compiler-grade frontends and runtime traces where available, builds a knowledge graph of its structure in
|
|
45
|
+
Code-Graph-RAG parses a multi-language codebase with Tree-sitter, sharpened by compiler-grade frontends and runtime traces where available, builds a knowledge graph of its structure in an embedded graph database that needs no server, and lets you query, edit, and optimise that code in plain English. It works across a monorepo of mixed languages under one unified graph schema.
|
|
46
46
|
|
|
47
47
|
<p align="center">
|
|
48
48
|
<b>1. Index:</b> <code>cgr start --update-graph</code> parses a repository into a knowledge graph (sped up)
|
|
49
49
|
</p>
|
|
50
50
|
<p align="center">
|
|
51
|
-
<img src="./assets/demo-indexing.gif" alt="cgr parsing the code-graph-rag repository into a
|
|
51
|
+
<img src="./assets/demo-indexing.gif" alt="cgr parsing the code-graph-rag repository into a knowledge graph, then printing node and relationship counts">
|
|
52
52
|
</p>
|
|
53
53
|
|
|
54
54
|
<p align="center">
|
|
@@ -61,8 +61,8 @@ Code-Graph-RAG parses a multi-language codebase with Tree-sitter, sharpened by c
|
|
|
61
61
|
## Latest News 🔥
|
|
62
62
|
|
|
63
63
|
<!-- SECTION:latest_news -->
|
|
64
|
-
- **
|
|
65
|
-
- **
|
|
64
|
+
- **Python**: Added support for inferring instance attributes from annotations.
|
|
65
|
+
- **General**: Various fixes for import resolution, naming conflicts, and project syncing.
|
|
66
66
|
<!-- /SECTION:latest_news -->
|
|
67
67
|
|
|
68
68
|
See [NEWS.md](NEWS.md) for the full history.
|
|
@@ -83,15 +83,17 @@ Point Code-Graph-RAG at a repository and it reads every source file, extracts fu
|
|
|
83
83
|
|
|
84
84
|
The system has two components:
|
|
85
85
|
|
|
86
|
-
1. **Multi-language parser.** A Tree-sitter based parser reads the codebase and ingests functions, classes, methods, modules, and their relationships into
|
|
86
|
+
1. **Multi-language parser.** A Tree-sitter based parser reads the codebase and ingests functions, classes, methods, modules, and their relationships into the graph under a single language-agnostic schema. Where a toolchain is available, compiler-grade frontends layer exact facts on top (libclang for C/C++, `go/types` for Go, and opt-in Roslyn, `javac` and Jedi for C#, Java and Python), and [dynamic tracing](docs/guide/dynamic-tracing.md) merges calls observed at runtime. Tree-sitter stays the backbone: a trace only sees code that ran, and a compiler frontend only covers what its toolchain can build.
|
|
87
87
|
2. **RAG system** (`codebase_rag/`). An interactive CLI that turns natural language into Cypher queries, retrieves matching code, and drives AI-powered editing and optimisation.
|
|
88
88
|
|
|
89
89
|
```
|
|
90
|
-
Source Code -> Tree-sitter Parser -> AST Analysis ->
|
|
90
|
+
Source Code -> Tree-sitter Parser -> AST Analysis -> Knowledge Graph
|
|
91
91
|
|
|
|
92
92
|
User Query -> AI Model (Cypher Gen) -> Cypher Query -> Graph Results -> Response
|
|
93
93
|
```
|
|
94
94
|
|
|
95
|
+
The graph is stored in an embedded SQLite file by default. Memgraph and Neo4j are opt-in backends that run the same Cypher; [Graph Backends](docs/architecture/embedded-graph.md) compares them.
|
|
96
|
+
|
|
95
97
|
See the [Architecture Overview](docs/architecture/overview.md) and [Graph Schema](docs/architecture/graph-schema.md) for the full picture.
|
|
96
98
|
|
|
97
99
|
## Supported Languages
|
|
@@ -117,13 +119,14 @@ Three version lines exist and they intentionally differ:
|
|
|
117
119
|
| where | what it tracks |
|
|
118
120
|
|---|---|
|
|
119
121
|
| git tags | every version, one per merge |
|
|
120
|
-
| GitHub Releases (binaries, signatures) | every 50th version, plus any security fix |
|
|
121
|
-
| PyPI | every 50th version, plus any security fix |
|
|
122
|
+
| GitHub Releases (binaries, signatures) | every 50th version, plus any security fix, breaking change or merge labelled `release now` |
|
|
123
|
+
| PyPI | every 50th version, plus any security fix, breaking change or merge labelled `release now` |
|
|
122
124
|
|
|
123
125
|
So the newest tag on `main` usually runs ahead of the newest release, often by
|
|
124
126
|
tens of patch versions; they coincide only just after a release. Nothing is
|
|
125
|
-
stuck, the cadences differ by design. A security fix
|
|
126
|
-
|
|
127
|
+
stuck, the cadences differ by design. A security fix, a breaking change or a
|
|
128
|
+
merge a maintainer labels `release now` does NOT wait for the cadence: each ships
|
|
129
|
+
a release and a PyPI upload immediately.
|
|
127
130
|
|
|
128
131
|
`uv tool install` and `pipx install` give you the newest PyPI version, which is the
|
|
129
132
|
newest RELEASE, not the newest tag. Interim tags exist so every merge is
|
|
@@ -190,6 +193,7 @@ Code-Graph-RAG runs as an [MCP](https://modelcontextprotocol.io) server so Claud
|
|
|
190
193
|
**Architecture**
|
|
191
194
|
- [Overview](docs/architecture/overview.md)
|
|
192
195
|
- [Graph Schema](docs/architecture/graph-schema.md)
|
|
196
|
+
- [Graph Backends](docs/architecture/embedded-graph.md)
|
|
193
197
|
- [Language Support](docs/architecture/language-support.md)
|
|
194
198
|
- [Data-Flow Edges](docs/architecture/data-flow-edges.md)
|
|
195
199
|
|
|
@@ -224,6 +228,8 @@ Please see [CONTRIBUTING.md](CONTRIBUTING.md) for contribution guidelines. Good
|
|
|
224
228
|
|
|
225
229
|
For issues or questions, check the [Troubleshooting](docs/advanced/troubleshooting.md) guide first, then open an issue.
|
|
226
230
|
|
|
231
|
+
If cgr is useful to you, please consider pledging support on [GitHub Sponsors](https://github.com/sponsors/vitali87). cgr links the page under `cgr --version` and, in a terminal, after most commands finish; set `CGR_SPONSOR_PLEDGE=false` to hide that line.
|
|
232
|
+
|
|
227
233
|
## License
|
|
228
234
|
|
|
229
235
|
MIT. See [LICENSE](LICENSE).
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: code-graph-rag
|
|
3
|
-
Version: 0.2.
|
|
3
|
+
Version: 0.2.16
|
|
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
|
|
@@ -19,7 +19,7 @@ Requires-Python: >=3.12
|
|
|
19
19
|
Description-Content-Type: text/markdown
|
|
20
20
|
License-File: LICENSE
|
|
21
21
|
Requires-Dist: loguru>=0.7.3
|
|
22
|
-
Requires-Dist: mcp<2,>=1.
|
|
22
|
+
Requires-Dist: mcp<2,>=1.30.0
|
|
23
23
|
Requires-Dist: pydantic-ai-slim[anthropic,google,openai]>=2.0.0
|
|
24
24
|
Requires-Dist: pydantic-settings>=2.12.0
|
|
25
25
|
Requires-Dist: python-dotenv>=1.2.1
|
|
@@ -93,7 +93,7 @@ Dynamic: license-file
|
|
|
93
93
|
|
|
94
94
|
# Code-Graph-RAG
|
|
95
95
|
|
|
96
|
-
Code-Graph-RAG parses a multi-language codebase with Tree-sitter, sharpened by compiler-grade frontends and runtime traces where available, builds a knowledge graph of its structure in
|
|
96
|
+
Code-Graph-RAG parses a multi-language codebase with Tree-sitter, sharpened by compiler-grade frontends and runtime traces where available, builds a knowledge graph of its structure in an embedded graph database that needs no server, and lets you query, edit, and optimise that code in plain English. It works across a monorepo of mixed languages under one unified graph schema.
|
|
97
97
|
|
|
98
98
|
## What It Does
|
|
99
99
|
|
|
@@ -152,8 +152,9 @@ transformers are then not required locally.
|
|
|
152
152
|
`pip install code-graph-rag` gives you the newest PyPI release, which is deliberately
|
|
153
153
|
not the newest commit. Git tags exist for every version (one per merge), while PyPI
|
|
154
154
|
uploads and GitHub Release binaries land on an every-50 cadence, so the tag on `main`
|
|
155
|
-
usually runs ahead of the published version. A security fix
|
|
156
|
-
|
|
155
|
+
usually runs ahead of the published version. A security fix, a breaking change or a
|
|
156
|
+
merge a maintainer labels `release now` is the exception: each ships immediately
|
|
157
|
+
rather than waiting for the cadence.
|
|
157
158
|
|
|
158
159
|
To run code newer than the latest release, install from git with uv:
|
|
159
160
|
|
|
@@ -175,14 +176,22 @@ for git installs and the other methods.
|
|
|
175
176
|
### Prerequisites
|
|
176
177
|
|
|
177
178
|
- Python 3.12+
|
|
178
|
-
- Docker (for Memgraph)
|
|
179
|
-
- `cmake` (for building pymgclient)
|
|
180
179
|
- `ripgrep` (`rg`) (for shell command text searching)
|
|
180
|
+
- Only for the optional Memgraph backend: Docker, and `cmake` where no
|
|
181
|
+
`pymgclient` wheel fits your platform
|
|
182
|
+
|
|
183
|
+
The knowledge graph is an embedded SQLite file (`~/.cgr/graph.sqlite`), so there
|
|
184
|
+
is no database server to run. Memgraph and Neo4j remain available as opt-in
|
|
185
|
+
backends; see [Graph Backends](https://docs.code-graph-rag.com/architecture/embedded-graph/).
|
|
181
186
|
|
|
182
187
|
The wheel is pure Python (`py3-none-any`), so it installs on any platform with
|
|
183
|
-
Python 3.12 or newer.
|
|
184
|
-
|
|
185
|
-
|
|
188
|
+
Python 3.12 or newer. On Linux (x86_64, aarch64), macOS and Windows x64 it also
|
|
189
|
+
pulls in `cgr-graph-rs`, a native extension that speeds up the embedded graph;
|
|
190
|
+
elsewhere the same engine runs in pure Python.
|
|
191
|
+
|
|
192
|
+
Some distributions ship an older interpreter (Debian Bookworm, and so Raspberry
|
|
193
|
+
Pi OS Bookworm, ships 3.11), which also explains the failed piwheels Bookworm
|
|
194
|
+
build. On those systems, see the [installation
|
|
186
195
|
guide](https://github.com/vitali87/code-graph-rag/blob/main/docs/getting-started/installation.md#older-system-interpreters)
|
|
187
196
|
for the available interpreter-pinning alternatives.
|
|
188
197
|
|
|
@@ -190,14 +199,17 @@ for the available interpreter-pinning alternatives.
|
|
|
190
199
|
|
|
191
200
|
The package installs a `cgr` command.
|
|
192
201
|
|
|
193
|
-
**
|
|
202
|
+
**Parse a repo, then query it:**
|
|
194
203
|
|
|
195
204
|
```bash
|
|
196
|
-
cgr
|
|
197
|
-
cgr start --repo-path ./my-project
|
|
198
|
-
--update-graph --clean # parse & launch interactive chat
|
|
205
|
+
cgr start --repo-path ./my-project --update-graph # parse into the graph
|
|
206
|
+
cgr start --repo-path ./my-project # launch the interactive chat
|
|
199
207
|
```
|
|
200
208
|
|
|
209
|
+
The graph is written to `~/.cgr/graph.sqlite`. To use Memgraph instead, install
|
|
210
|
+
`code-graph-rag[memgraph]`, set `GRAPH_BACKEND=memgraph`, and start the packaged
|
|
211
|
+
Memgraph + Qdrant stack with `cgr daemon up`.
|
|
212
|
+
|
|
201
213
|
**Index to protobuf for offline use:**
|
|
202
214
|
|
|
203
215
|
```bash
|
|
@@ -304,7 +316,11 @@ for fn in functions[:5]:
|
|
|
304
316
|
print(f"{fn.properties['name']}: {len(rels)} relationships")
|
|
305
317
|
```
|
|
306
318
|
|
|
307
|
-
### Query
|
|
319
|
+
### Query the graph with Cypher
|
|
320
|
+
|
|
321
|
+
`MemgraphIngestor` keeps its original name but works with whichever backend
|
|
322
|
+
`GRAPH_BACKEND` selects. On the default embedded graph, `host` and `port` are
|
|
323
|
+
not used.
|
|
308
324
|
|
|
309
325
|
```python
|
|
310
326
|
from cgr import MemgraphIngestor
|
|
@@ -357,8 +373,10 @@ Configure via `.env` or environment variables:
|
|
|
357
373
|
|
|
358
374
|
| Variable | Default | Description |
|
|
359
375
|
|----------|---------|-------------|
|
|
360
|
-
| `
|
|
361
|
-
| `
|
|
376
|
+
| `GRAPH_BACKEND` | `sqlite` | Graph engine: `sqlite` (embedded), `memgraph`, or `neo4j` |
|
|
377
|
+
| `SQLITE_GRAPH_PATH` | `~/.cgr/graph.sqlite` | Embedded graph file |
|
|
378
|
+
| `MEMGRAPH_HOST` | `localhost` | Memgraph hostname (with `GRAPH_BACKEND=memgraph`) |
|
|
379
|
+
| `MEMGRAPH_PORT` | `7687` | Memgraph port (with `GRAPH_BACKEND=memgraph`) |
|
|
362
380
|
| `ORCHESTRATOR_PROVIDER` | | Provider: `google`, `openai`, `anthropic`, `azure`, `ollama`, `minimax`, `litellm_proxy` |
|
|
363
381
|
| `ORCHESTRATOR_MODEL` | | Model ID (e.g. `gpt-5.6-terra`, `gemini-3.6-flash`, `claude-sonnet-5`, `qwen2.5-coder`) |
|
|
364
382
|
| `ORCHESTRATOR_API_KEY` | | API key for the provider (not needed for `ollama`) |
|
|
@@ -162,6 +162,7 @@ codebase_rag/editing/imports.py
|
|
|
162
162
|
codebase_rag/editing/occurrences.py
|
|
163
163
|
codebase_rag/editing/patcher.py
|
|
164
164
|
codebase_rag/editing/rename.py
|
|
165
|
+
codebase_rag/editing/signature_bind.py
|
|
165
166
|
codebase_rag/editing/signature_contract.py
|
|
166
167
|
codebase_rag/editing/signature_spec.py
|
|
167
168
|
codebase_rag/editing/sites.py
|
|
@@ -269,6 +270,7 @@ codebase_rag/parsers/csharp_frontend/roslyn/Frontend.cs
|
|
|
269
270
|
codebase_rag/parsers/csharp_frontend/roslyn/Frontend.csproj
|
|
270
271
|
codebase_rag/parsers/csharp_frontend/roslyn/Program.cs
|
|
271
272
|
codebase_rag/parsers/dart/__init__.py
|
|
273
|
+
codebase_rag/parsers/dart/package_paths.py
|
|
272
274
|
codebase_rag/parsers/dart/type_inference.py
|
|
273
275
|
codebase_rag/parsers/dart/utils.py
|
|
274
276
|
codebase_rag/parsers/flow_access/__init__.py
|
|
@@ -314,6 +316,7 @@ codebase_rag/parsers/io_access/extract.py
|
|
|
314
316
|
codebase_rag/parsers/io_access/models.py
|
|
315
317
|
codebase_rag/parsers/io_access/processor.py
|
|
316
318
|
codebase_rag/parsers/io_access/registry.py
|
|
319
|
+
codebase_rag/parsers/io_access/resource_names.py
|
|
317
320
|
codebase_rag/parsers/io_access/url_folding.py
|
|
318
321
|
codebase_rag/parsers/java/__init__.py
|
|
319
322
|
codebase_rag/parsers/java/method_resolver.py
|
|
@@ -44,7 +44,7 @@ from .capture import (
|
|
|
44
44
|
unknown_tokens,
|
|
45
45
|
)
|
|
46
46
|
from .checkout_state import prepare_state_dir
|
|
47
|
-
from .cli_runtime import app_context, connect_memgraph, style
|
|
47
|
+
from .cli_runtime import app_context, connect_memgraph, dim, style
|
|
48
48
|
from .config import load_ignore_patterns, settings, settings_errors
|
|
49
49
|
from .console_marks import status_mark
|
|
50
50
|
from .editing.cli import cli as edits_cli
|
|
@@ -60,6 +60,7 @@ from .graph_cli import cli as graph_cli
|
|
|
60
60
|
from .graph_dialects import DIALECT_MEMGRAPH
|
|
61
61
|
from .parser_loader import load_parsers
|
|
62
62
|
from .project_selection import ProjectChoice, choose_project, scope_refusal
|
|
63
|
+
from .services.gloss_cleanup import prune_orphaned_glosses
|
|
63
64
|
from .services.graph_diff import DiffError, diff_indexes, diff_is_empty
|
|
64
65
|
from .services.graph_service import GraphUnavailableError, MemgraphIngestor
|
|
65
66
|
from .services.protobuf_service import ProtobufFileIngestor
|
|
@@ -102,6 +103,7 @@ from .utils.path_utils import (
|
|
|
102
103
|
normalize_project_name,
|
|
103
104
|
project_name_error,
|
|
104
105
|
project_roots_from_rows,
|
|
106
|
+
projects_sharing_root,
|
|
105
107
|
resolve_repo_path,
|
|
106
108
|
unwritable_output_reason,
|
|
107
109
|
)
|
|
@@ -199,10 +201,40 @@ class _CgrGroup(TyperGroup):
|
|
|
199
201
|
# this at connect time with the fix in its message; printing it here
|
|
200
202
|
# covers them all, the delegated groups and the chat included (#2443).
|
|
201
203
|
try:
|
|
202
|
-
|
|
204
|
+
result = super().invoke(ctx)
|
|
203
205
|
except GraphUnavailableError as e:
|
|
204
206
|
app_context.console.print(style(str(e), cs.Color.RED))
|
|
205
207
|
raise typer.Exit(1) from e
|
|
208
|
+
# Only a command that finished gets here: a failure exits by raising.
|
|
209
|
+
pledge = sponsor_pledge(ctx.invoked_subcommand, sys.stderr.isatty())
|
|
210
|
+
if pledge:
|
|
211
|
+
# Soft-wrapped so the terminal, not Rich, breaks the line, and
|
|
212
|
+
# the URL stays one clickable link.
|
|
213
|
+
terminal_aware_console(stderr=True).print(
|
|
214
|
+
dim(pledge), highlight=False, soft_wrap=True
|
|
215
|
+
)
|
|
216
|
+
return result
|
|
217
|
+
|
|
218
|
+
|
|
219
|
+
# Help pages, and the MCP server, which speaks its protocol until the client
|
|
220
|
+
# hangs up, are not runs that finished.
|
|
221
|
+
_NO_SPONSOR_PLEDGE = frozenset({ch.CLICommandName.HELP, ch.CLICommandName.MCP_SERVER})
|
|
222
|
+
|
|
223
|
+
|
|
224
|
+
def sponsor_pledge(command: str | None, terminal: bool) -> str | None:
|
|
225
|
+
"""The GitHub Sponsors line a finished command ends on, or None where it
|
|
226
|
+
would be in the way: off a terminal (a script or a log reading stderr),
|
|
227
|
+
under `--quiet` or CGR_SPONSOR_PLEDGE=false, and after the commands in
|
|
228
|
+
`_NO_SPONSOR_PLEDGE`. On stderr, so it never mixes into a command's
|
|
229
|
+
output on stdout."""
|
|
230
|
+
if (
|
|
231
|
+
not terminal
|
|
232
|
+
or settings.QUIET
|
|
233
|
+
or not settings.SPONSOR_PLEDGE
|
|
234
|
+
or command in _NO_SPONSOR_PLEDGE
|
|
235
|
+
):
|
|
236
|
+
return None
|
|
237
|
+
return cs.CLI_MSG_SPONSOR_PLEDGE.format(url=cs.SPONSOR_URL)
|
|
206
238
|
|
|
207
239
|
|
|
208
240
|
app = typer.Typer(
|
|
@@ -225,6 +257,9 @@ def _version_callback(value: bool) -> None:
|
|
|
225
257
|
)
|
|
226
258
|
for line in credits_lines():
|
|
227
259
|
app_context.console.print(line, highlight=False)
|
|
260
|
+
app_context.console.print(
|
|
261
|
+
cs.CLI_MSG_SPONSOR.format(url=cs.SPONSOR_URL), highlight=False
|
|
262
|
+
)
|
|
228
263
|
raise typer.Exit()
|
|
229
264
|
|
|
230
265
|
|
|
@@ -1035,6 +1070,28 @@ def _clear_deleted_project_markers(
|
|
|
1035
1070
|
logger.warning(ls.CLI_DELETE_SYNC_MARKER_KEPT.format(project=project_name))
|
|
1036
1071
|
|
|
1037
1072
|
|
|
1073
|
+
def _sweep_glosses_after_failed_delete(
|
|
1074
|
+
ingestor: MemgraphIngestor, project_name: str
|
|
1075
|
+
) -> None:
|
|
1076
|
+
"""Sweep the notes of a delete that raised after the project was removed.
|
|
1077
|
+
|
|
1078
|
+
The delete commits statement by statement, so a later cleanup can raise
|
|
1079
|
+
once the project is already gone, and a retry then stops at "project not
|
|
1080
|
+
found" before any sweep. A project still listed keeps its unattached
|
|
1081
|
+
notes: they are LOST or AMBIGUOUS by design and readable on their old
|
|
1082
|
+
names. Never raises, so the delete's own error is what is reported.
|
|
1083
|
+
"""
|
|
1084
|
+
try:
|
|
1085
|
+
still_listed = project_name in ingestor.list_projects()
|
|
1086
|
+
except Exception as exc:
|
|
1087
|
+
logger.warning(
|
|
1088
|
+
ls.CLI_DELETE_GLOSS_SWEEP_SKIPPED.format(project=project_name, error=exc)
|
|
1089
|
+
)
|
|
1090
|
+
return
|
|
1091
|
+
if not still_listed:
|
|
1092
|
+
prune_orphaned_glosses(ingestor, project_name)
|
|
1093
|
+
|
|
1094
|
+
|
|
1038
1095
|
def _run_updater_deferring_interrupt(
|
|
1039
1096
|
updater: "GraphUpdater",
|
|
1040
1097
|
) -> KeyboardInterrupt | None:
|
|
@@ -1173,10 +1230,33 @@ def _run_graph_sync(
|
|
|
1173
1230
|
cs.StyleModifier.NONE,
|
|
1174
1231
|
)
|
|
1175
1232
|
)
|
|
1233
|
+
_report_call_pass_failures(repo, list(updater.call_pass_failures))
|
|
1176
1234
|
if interrupted is not None:
|
|
1177
1235
|
raise interrupted
|
|
1178
1236
|
|
|
1179
1237
|
|
|
1238
|
+
def _report_call_pass_failures(repo: Path, failed: list[Path]) -> None:
|
|
1239
|
+
# A file whose call pass failed lost edges while the sync still reads
|
|
1240
|
+
# "done": the error lines scroll away, so the summary counts them (#3173).
|
|
1241
|
+
if not failed:
|
|
1242
|
+
return
|
|
1243
|
+
names = sorted(
|
|
1244
|
+
path.relative_to(repo).as_posix() if path.is_relative_to(repo) else str(path)
|
|
1245
|
+
for path in failed
|
|
1246
|
+
)
|
|
1247
|
+
shown = names[: cs.CLI_CALL_PASS_FAILURES_SHOWN]
|
|
1248
|
+
if len(names) > len(shown):
|
|
1249
|
+
shown.append(cs.CLI_MSG_AND_MORE.format(count=len(names) - len(shown)))
|
|
1250
|
+
app_context.console.print(
|
|
1251
|
+
style(
|
|
1252
|
+
cs.CLI_MSG_CALL_PASS_FAILURES.format(
|
|
1253
|
+
count=len(names), files=", ".join(shown)
|
|
1254
|
+
),
|
|
1255
|
+
cs.Color.YELLOW,
|
|
1256
|
+
)
|
|
1257
|
+
)
|
|
1258
|
+
|
|
1259
|
+
|
|
1180
1260
|
def _delete_hash_cache(repo_path: Path) -> None:
|
|
1181
1261
|
# Resolving the state directory also moves in what an older cgr left in
|
|
1182
1262
|
# the tree, so a clean right after upgrading clears that copy too.
|
|
@@ -3463,6 +3543,21 @@ def delete_project(
|
|
|
3463
3543
|
app_context.console.print(style(choice.refusal, cs.Color.RED))
|
|
3464
3544
|
raise typer.Exit(1)
|
|
3465
3545
|
|
|
3546
|
+
# A directory indexed under two names used to lose both on delete
|
|
3547
|
+
# (#2665). The delete is ownership-scoped now; say so before it runs.
|
|
3548
|
+
roots = ingestor.list_project_roots()
|
|
3549
|
+
if sharing := projects_sharing_root(project_name, roots):
|
|
3550
|
+
app_context.console.print(
|
|
3551
|
+
style(
|
|
3552
|
+
cs.CLI_WARN_DELETE_PROJECT_SHARED_ROOT.format(
|
|
3553
|
+
projects=", ".join(sharing),
|
|
3554
|
+
project_name=project_name,
|
|
3555
|
+
root_path=roots[project_name],
|
|
3556
|
+
),
|
|
3557
|
+
cs.Color.YELLOW,
|
|
3558
|
+
)
|
|
3559
|
+
)
|
|
3560
|
+
|
|
3466
3561
|
_info(
|
|
3467
3562
|
style(
|
|
3468
3563
|
cs.CLI_MSG_DELETING_PROJECT.format(project_name=project_name),
|
|
@@ -3470,7 +3565,26 @@ def delete_project(
|
|
|
3470
3565
|
)
|
|
3471
3566
|
)
|
|
3472
3567
|
_cleanup_project_embeddings(ingestor, project_name, projects)
|
|
3473
|
-
|
|
3568
|
+
try:
|
|
3569
|
+
ingestor.delete_project(project_name)
|
|
3570
|
+
except Exception:
|
|
3571
|
+
_sweep_glosses_after_failed_delete(ingestor, project_name)
|
|
3572
|
+
raise
|
|
3573
|
+
# A Gloss is out of the delete's reach by design, which is what
|
|
3574
|
+
# lets it survive an index's delete-then-rebuild, so the
|
|
3575
|
+
# deliberate delete sweeps the project's notes, as MCP
|
|
3576
|
+
# `delete_project` does. Without it the next index re-attached
|
|
3577
|
+
# them by name (issue #3231). The sweep never raises: the delete
|
|
3578
|
+
# is done, and a retry would stop at "project not found".
|
|
3579
|
+
if not prune_orphaned_glosses(ingestor, project_name):
|
|
3580
|
+
app_context.console.print(
|
|
3581
|
+
style(
|
|
3582
|
+
cs.CLI_WARN_GLOSSES_NOT_PRUNED.format(
|
|
3583
|
+
project_name=project_name
|
|
3584
|
+
),
|
|
3585
|
+
cs.Color.YELLOW,
|
|
3586
|
+
)
|
|
3587
|
+
)
|
|
3474
3588
|
_clear_deleted_project_markers(ingestor, project_name)
|
|
3475
3589
|
except typer.Exit:
|
|
3476
3590
|
raise
|
|
@@ -169,8 +169,10 @@ HELP_CHECK_BASE = (
|
|
|
169
169
|
)
|
|
170
170
|
HELP_CHECK_FAIL_ON_FOUND = (
|
|
171
171
|
"Exit with status 1 when the delta reports dangling callers, dangling "
|
|
172
|
-
"importers, calls with too many arguments,
|
|
173
|
-
"
|
|
172
|
+
"importers, calls with too many arguments, too few for a required "
|
|
173
|
+
"parameter or a keyword the callee does not accept, new duplicates or new "
|
|
174
|
+
"import cycles. A possibly_missing site is reported but does not fail the "
|
|
175
|
+
"check."
|
|
174
176
|
)
|
|
175
177
|
HELP_CHECK_ISOLATED = (
|
|
176
178
|
"Measure the edit, then put the graph and the hash cache back so the "
|
|
@@ -584,6 +584,10 @@ class AppConfig(BaseSettings):
|
|
|
584
584
|
|
|
585
585
|
QUIET: bool = Field(False, validation_alias="CGR_QUIET")
|
|
586
586
|
|
|
587
|
+
# The GitHub Sponsors line a finished command ends on in a terminal; set
|
|
588
|
+
# false to drop it without the rest of the output `--quiet` drops.
|
|
589
|
+
SPONSOR_PLEDGE: bool = Field(True, validation_alias="CGR_SPONSOR_PLEDGE")
|
|
590
|
+
|
|
587
591
|
# Compaction discards old tool output to bound the context (#1500). It is
|
|
588
592
|
# on by default because an unbounded history eventually fails the request
|
|
589
593
|
# outright, but a mechanism that drops data must be declinable: set this
|