code-graph-rag 0.0.945__tar.gz → 0.0.996__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.945/code_graph_rag.egg-info → code_graph_rag-0.0.996}/PKG-INFO +8 -11
- {code_graph_rag-0.0.945 → code_graph_rag-0.0.996}/PYPI_README.md +7 -10
- {code_graph_rag-0.0.945 → code_graph_rag-0.0.996}/README.md +6 -6
- {code_graph_rag-0.0.945 → code_graph_rag-0.0.996/code_graph_rag.egg-info}/PKG-INFO +8 -11
- {code_graph_rag-0.0.945 → code_graph_rag-0.0.996}/code_graph_rag.egg-info/SOURCES.txt +13 -0
- {code_graph_rag-0.0.945 → code_graph_rag-0.0.996}/codebase_rag/ast_cache.py +47 -28
- {code_graph_rag-0.0.945 → code_graph_rag-0.0.996}/codebase_rag/cli.py +31 -15
- {code_graph_rag-0.0.945 → code_graph_rag-0.0.996}/codebase_rag/cli_help.py +23 -2
- {code_graph_rag-0.0.945 → code_graph_rag-0.0.996}/codebase_rag/config.py +59 -10
- code_graph_rag-0.0.996/codebase_rag/console_marks.py +59 -0
- {code_graph_rag-0.0.945 → code_graph_rag-0.0.996}/codebase_rag/constants/ast_cpp.py +7 -0
- {code_graph_rag-0.0.945 → code_graph_rag-0.0.996}/codebase_rag/constants/ast_csharp.py +7 -0
- {code_graph_rag-0.0.945 → code_graph_rag-0.0.996}/codebase_rag/constants/ast_dart.py +39 -0
- {code_graph_rag-0.0.945 → code_graph_rag-0.0.996}/codebase_rag/constants/ast_java.py +10 -0
- {code_graph_rag-0.0.945 → code_graph_rag-0.0.996}/codebase_rag/constants/ast_nodes.py +18 -0
- {code_graph_rag-0.0.945 → code_graph_rag-0.0.996}/codebase_rag/constants/ast_php.py +9 -0
- {code_graph_rag-0.0.945 → code_graph_rag-0.0.996}/codebase_rag/constants/ast_rust.py +7 -0
- {code_graph_rag-0.0.945 → code_graph_rag-0.0.996}/codebase_rag/constants/ast_scala.py +4 -0
- {code_graph_rag-0.0.945 → code_graph_rag-0.0.996}/codebase_rag/constants/build.py +7 -1
- {code_graph_rag-0.0.945 → code_graph_rag-0.0.996}/codebase_rag/constants/cli.py +17 -0
- {code_graph_rag-0.0.945 → code_graph_rag-0.0.996}/codebase_rag/constants/core.py +7 -3
- {code_graph_rag-0.0.945 → code_graph_rag-0.0.996}/codebase_rag/constants/graph.py +76 -3
- {code_graph_rag-0.0.945 → code_graph_rag-0.0.996}/codebase_rag/constants/health.py +17 -4
- {code_graph_rag-0.0.945 → code_graph_rag-0.0.996}/codebase_rag/constants/mcp.py +29 -0
- {code_graph_rag-0.0.945 → code_graph_rag-0.0.996}/codebase_rag/constants/security.py +214 -0
- {code_graph_rag-0.0.945 → code_graph_rag-0.0.996}/codebase_rag/context_pruning.py +107 -16
- {code_graph_rag-0.0.945 → code_graph_rag-0.0.996}/codebase_rag/cypher_queries.py +178 -10
- {code_graph_rag-0.0.945 → code_graph_rag-0.0.996}/codebase_rag/dead_code.py +64 -3
- {code_graph_rag-0.0.945 → code_graph_rag-0.0.996}/codebase_rag/duplicates.py +4 -12
- {code_graph_rag-0.0.945 → code_graph_rag-0.0.996}/codebase_rag/editing/rename.py +13 -0
- {code_graph_rag-0.0.945 → code_graph_rag-0.0.996}/codebase_rag/embedder.py +5 -3
- {code_graph_rag-0.0.945 → code_graph_rag-0.0.996}/codebase_rag/exceptions.py +29 -0
- {code_graph_rag-0.0.945 → code_graph_rag-0.0.996}/codebase_rag/gloss.py +55 -6
- code_graph_rag-0.0.996/codebase_rag/gloss_anchor.py +228 -0
- {code_graph_rag-0.0.945 → code_graph_rag-0.0.996}/codebase_rag/gloss_repair.py +219 -25
- {code_graph_rag-0.0.945 → code_graph_rag-0.0.996}/codebase_rag/graph_query.py +196 -6
- {code_graph_rag-0.0.945 → code_graph_rag-0.0.996}/codebase_rag/graph_updater.py +673 -48
- {code_graph_rag-0.0.945 → code_graph_rag-0.0.996}/codebase_rag/language_spec.py +113 -1
- {code_graph_rag-0.0.945 → code_graph_rag-0.0.996}/codebase_rag/logs.py +30 -21
- {code_graph_rag-0.0.945 → code_graph_rag-0.0.996}/codebase_rag/main.py +90 -27
- {code_graph_rag-0.0.945 → code_graph_rag-0.0.996}/codebase_rag/mcp/server.py +35 -6
- {code_graph_rag-0.0.945 → code_graph_rag-0.0.996}/codebase_rag/mcp/tools.py +385 -10
- {code_graph_rag-0.0.945 → code_graph_rag-0.0.996}/codebase_rag/models.py +7 -0
- {code_graph_rag-0.0.945 → code_graph_rag-0.0.996}/codebase_rag/parsers/ast_grep_tier.py +42 -28
- {code_graph_rag-0.0.945 → code_graph_rag-0.0.996}/codebase_rag/parsers/call_processor.py +202 -43
- {code_graph_rag-0.0.945 → code_graph_rag-0.0.996}/codebase_rag/parsers/call_resolver.py +188 -12
- {code_graph_rag-0.0.945 → code_graph_rag-0.0.996}/codebase_rag/parsers/class_ingest/identity.py +5 -8
- {code_graph_rag-0.0.945 → code_graph_rag-0.0.996}/codebase_rag/parsers/class_ingest/method_override.py +2 -1
- {code_graph_rag-0.0.945 → code_graph_rag-0.0.996}/codebase_rag/parsers/class_ingest/mixin.py +83 -16
- {code_graph_rag-0.0.945 → code_graph_rag-0.0.996}/codebase_rag/parsers/class_ingest/parent_extraction.py +77 -65
- {code_graph_rag-0.0.945 → code_graph_rag-0.0.996}/codebase_rag/parsers/csharp/type_inference.py +288 -3
- {code_graph_rag-0.0.945 → code_graph_rag-0.0.996}/codebase_rag/parsers/csharp/utils.py +166 -16
- {code_graph_rag-0.0.945 → code_graph_rag-0.0.996}/codebase_rag/parsers/dart/utils.py +204 -4
- {code_graph_rag-0.0.945 → code_graph_rag-0.0.996}/codebase_rag/parsers/definition_processor.py +13 -0
- code_graph_rag-0.0.996/codebase_rag/parsers/enum_variants.py +177 -0
- {code_graph_rag-0.0.945 → code_graph_rag-0.0.996}/codebase_rag/parsers/factory.py +3 -0
- {code_graph_rag-0.0.945 → code_graph_rag-0.0.996}/codebase_rag/parsers/field_nodes.py +1 -1
- {code_graph_rag-0.0.945 → code_graph_rag-0.0.996}/codebase_rag/parsers/function_ingest.py +13 -25
- code_graph_rag-0.0.996/codebase_rag/parsers/go_frontend/gotypes/go.mod +12 -0
- code_graph_rag-0.0.996/codebase_rag/parsers/go_frontend/gotypes/go.sum +8 -0
- {code_graph_rag-0.0.945 → code_graph_rag-0.0.996}/codebase_rag/parsers/import_processor.py +36 -1
- {code_graph_rag-0.0.945 → code_graph_rag-0.0.996}/codebase_rag/parsers/java/utils.py +38 -4
- {code_graph_rag-0.0.945 → code_graph_rag-0.0.996}/codebase_rag/parsers/java/variable_analyzer.py +8 -4
- code_graph_rag-0.0.996/codebase_rag/parsers/parameter_nodes.py +828 -0
- {code_graph_rag-0.0.945 → code_graph_rag-0.0.996}/codebase_rag/parsers/py/ast_analyzer.py +127 -2
- {code_graph_rag-0.0.945 → code_graph_rag-0.0.996}/codebase_rag/parsers/python_source_roots.py +79 -38
- {code_graph_rag-0.0.945 → code_graph_rag-0.0.996}/codebase_rag/parsers/type_facts.py +19 -3
- {code_graph_rag-0.0.945 → code_graph_rag-0.0.996}/codebase_rag/parsers/type_inference.py +23 -0
- {code_graph_rag-0.0.945 → code_graph_rag-0.0.996}/codebase_rag/parsers/utils.py +10 -0
- {code_graph_rag-0.0.945 → code_graph_rag-0.0.996}/codebase_rag/prompts.py +20 -4
- {code_graph_rag-0.0.945 → code_graph_rag-0.0.996}/codebase_rag/providers/base.py +21 -6
- {code_graph_rag-0.0.945 → code_graph_rag-0.0.996}/codebase_rag/providers/litellm.py +2 -2
- code_graph_rag-0.0.996/codebase_rag/queries/highlights/c_sharp.scm +3 -0
- code_graph_rag-0.0.996/codebase_rag/queries/highlights/dart.scm +19 -0
- code_graph_rag-0.0.996/codebase_rag/queries/highlights/java.scm +17 -0
- code_graph_rag-0.0.996/codebase_rag/queries/highlights/javascript.scm +14 -0
- code_graph_rag-0.0.996/codebase_rag/queries/highlights/php.scm +11 -0
- code_graph_rag-0.0.996/codebase_rag/queries/highlights/python.scm +5 -0
- code_graph_rag-0.0.996/codebase_rag/queries/highlights/rust.scm +11 -0
- code_graph_rag-0.0.996/codebase_rag/queries/highlights/typescript.scm +17 -0
- {code_graph_rag-0.0.945 → code_graph_rag-0.0.996}/codebase_rag/readme_sections.py +1 -3
- {code_graph_rag-0.0.945 → code_graph_rag-0.0.996}/codebase_rag/services/__init__.py +13 -1
- code_graph_rag-0.0.996/codebase_rag/services/cypher_guard.py +198 -0
- {code_graph_rag-0.0.945 → code_graph_rag-0.0.996}/codebase_rag/services/graph_service.py +36 -0
- {code_graph_rag-0.0.945 → code_graph_rag-0.0.996}/codebase_rag/services/llm.py +61 -26
- {code_graph_rag-0.0.945 → code_graph_rag-0.0.996}/codebase_rag/services/neo4j_driver.py +34 -3
- {code_graph_rag-0.0.945 → code_graph_rag-0.0.996}/codebase_rag/services/protobuf_service.py +1 -0
- {code_graph_rag-0.0.945 → code_graph_rag-0.0.996}/codebase_rag/structural_delta.py +119 -17
- {code_graph_rag-0.0.945 → code_graph_rag-0.0.996}/codebase_rag/tools/code_retrieval.py +12 -5
- {code_graph_rag-0.0.945 → code_graph_rag-0.0.996}/codebase_rag/tools/codebase_query.py +7 -4
- {code_graph_rag-0.0.945 → code_graph_rag-0.0.996}/codebase_rag/tools/health_checker.py +17 -6
- {code_graph_rag-0.0.945 → code_graph_rag-0.0.996}/codebase_rag/tools/semantic_search.py +18 -5
- {code_graph_rag-0.0.945 → code_graph_rag-0.0.996}/codebase_rag/tools/shell_command.py +114 -1
- {code_graph_rag-0.0.945 → code_graph_rag-0.0.996}/codebase_rag/tools/tool_descriptions.py +41 -4
- {code_graph_rag-0.0.945 → code_graph_rag-0.0.996}/codebase_rag/trace/resolution.py +2 -5
- {code_graph_rag-0.0.945 → code_graph_rag-0.0.996}/codebase_rag/types_defs.py +29 -6
- {code_graph_rag-0.0.945 → code_graph_rag-0.0.996}/codebase_rag/utils/fqn_resolver.py +28 -12
- {code_graph_rag-0.0.945 → code_graph_rag-0.0.996}/codebase_rag/utils/path_utils.py +65 -9
- code_graph_rag-0.0.996/codebase_rag/utils/qn_markers.py +77 -0
- {code_graph_rag-0.0.945 → code_graph_rag-0.0.996}/codebase_rag/vector_store.py +64 -19
- code_graph_rag-0.0.996/codec/schema_pb2.py +93 -0
- {code_graph_rag-0.0.945 → code_graph_rag-0.0.996}/codec/schema_pb2.pyi +38 -8
- {code_graph_rag-0.0.945 → code_graph_rag-0.0.996}/pyproject.toml +2 -1
- code_graph_rag-0.0.945/codebase_rag/parsers/go_frontend/gotypes/go.mod +0 -10
- code_graph_rag-0.0.945/codebase_rag/parsers/go_frontend/gotypes/go.sum +0 -8
- code_graph_rag-0.0.945/codebase_rag/parsers/parameter_nodes.py +0 -262
- code_graph_rag-0.0.945/codec/schema_pb2.py +0 -91
- {code_graph_rag-0.0.945 → code_graph_rag-0.0.996}/LICENSE +0 -0
- {code_graph_rag-0.0.945 → code_graph_rag-0.0.996}/cgr/__init__.py +0 -0
- {code_graph_rag-0.0.945 → code_graph_rag-0.0.996}/code_graph_rag.egg-info/dependency_links.txt +0 -0
- {code_graph_rag-0.0.945 → code_graph_rag-0.0.996}/code_graph_rag.egg-info/entry_points.txt +0 -0
- {code_graph_rag-0.0.945 → code_graph_rag-0.0.996}/code_graph_rag.egg-info/requires.txt +0 -0
- {code_graph_rag-0.0.945 → code_graph_rag-0.0.996}/code_graph_rag.egg-info/top_level.txt +0 -0
- {code_graph_rag-0.0.945 → code_graph_rag-0.0.996}/codebase_rag/__init__.py +0 -0
- {code_graph_rag-0.0.945 → code_graph_rag-0.0.996}/codebase_rag/analyzers/__init__.py +0 -0
- {code_graph_rag-0.0.945 → code_graph_rag-0.0.996}/codebase_rag/analyzers/ast_grep_analyzer.py +0 -0
- {code_graph_rag-0.0.945 → code_graph_rag-0.0.996}/codebase_rag/analyzers/ast_grep_rules/patterns/c.yaml +0 -0
- {code_graph_rag-0.0.945 → code_graph_rag-0.0.996}/codebase_rag/analyzers/ast_grep_rules/patterns/cpp.yaml +0 -0
- {code_graph_rag-0.0.945 → code_graph_rag-0.0.996}/codebase_rag/analyzers/ast_grep_rules/patterns/csharp.yaml +0 -0
- {code_graph_rag-0.0.945 → code_graph_rag-0.0.996}/codebase_rag/analyzers/ast_grep_rules/patterns/dart.yaml +0 -0
- {code_graph_rag-0.0.945 → code_graph_rag-0.0.996}/codebase_rag/analyzers/ast_grep_rules/patterns/go.yaml +0 -0
- {code_graph_rag-0.0.945 → code_graph_rag-0.0.996}/codebase_rag/analyzers/ast_grep_rules/patterns/java.yaml +0 -0
- {code_graph_rag-0.0.945 → code_graph_rag-0.0.996}/codebase_rag/analyzers/ast_grep_rules/patterns/javascript.yaml +0 -0
- {code_graph_rag-0.0.945 → code_graph_rag-0.0.996}/codebase_rag/analyzers/ast_grep_rules/patterns/lua.yaml +0 -0
- {code_graph_rag-0.0.945 → code_graph_rag-0.0.996}/codebase_rag/analyzers/ast_grep_rules/patterns/php.yaml +0 -0
- {code_graph_rag-0.0.945 → code_graph_rag-0.0.996}/codebase_rag/analyzers/ast_grep_rules/patterns/python.yaml +0 -0
- {code_graph_rag-0.0.945 → code_graph_rag-0.0.996}/codebase_rag/analyzers/ast_grep_rules/patterns/ruby.yaml +0 -0
- {code_graph_rag-0.0.945 → code_graph_rag-0.0.996}/codebase_rag/analyzers/ast_grep_rules/patterns/rust.yaml +0 -0
- {code_graph_rag-0.0.945 → code_graph_rag-0.0.996}/codebase_rag/analyzers/ast_grep_rules/patterns/scala.yaml +0 -0
- {code_graph_rag-0.0.945 → code_graph_rag-0.0.996}/codebase_rag/analyzers/ast_grep_rules/patterns/tsx.yaml +0 -0
- {code_graph_rag-0.0.945 → code_graph_rag-0.0.996}/codebase_rag/analyzers/ast_grep_rules/patterns/typescript.yaml +0 -0
- {code_graph_rag-0.0.945 → code_graph_rag-0.0.996}/codebase_rag/analyzers/ast_grep_rules/security/c.yaml +0 -0
- {code_graph_rag-0.0.945 → code_graph_rag-0.0.996}/codebase_rag/analyzers/ast_grep_rules/security/cpp.yaml +0 -0
- {code_graph_rag-0.0.945 → code_graph_rag-0.0.996}/codebase_rag/analyzers/ast_grep_rules/security/csharp.yaml +0 -0
- {code_graph_rag-0.0.945 → code_graph_rag-0.0.996}/codebase_rag/analyzers/ast_grep_rules/security/dart.yaml +0 -0
- {code_graph_rag-0.0.945 → code_graph_rag-0.0.996}/codebase_rag/analyzers/ast_grep_rules/security/go.yaml +0 -0
- {code_graph_rag-0.0.945 → code_graph_rag-0.0.996}/codebase_rag/analyzers/ast_grep_rules/security/java.yaml +0 -0
- {code_graph_rag-0.0.945 → code_graph_rag-0.0.996}/codebase_rag/analyzers/ast_grep_rules/security/javascript.yaml +0 -0
- {code_graph_rag-0.0.945 → code_graph_rag-0.0.996}/codebase_rag/analyzers/ast_grep_rules/security/lua.yaml +0 -0
- {code_graph_rag-0.0.945 → code_graph_rag-0.0.996}/codebase_rag/analyzers/ast_grep_rules/security/php.yaml +0 -0
- {code_graph_rag-0.0.945 → code_graph_rag-0.0.996}/codebase_rag/analyzers/ast_grep_rules/security/python.yaml +0 -0
- {code_graph_rag-0.0.945 → code_graph_rag-0.0.996}/codebase_rag/analyzers/ast_grep_rules/security/ruby.yaml +0 -0
- {code_graph_rag-0.0.945 → code_graph_rag-0.0.996}/codebase_rag/analyzers/ast_grep_rules/security/rust.yaml +0 -0
- {code_graph_rag-0.0.945 → code_graph_rag-0.0.996}/codebase_rag/analyzers/ast_grep_rules/security/scala.yaml +0 -0
- {code_graph_rag-0.0.945 → code_graph_rag-0.0.996}/codebase_rag/analyzers/ast_grep_rules/security/tsx.yaml +0 -0
- {code_graph_rag-0.0.945 → code_graph_rag-0.0.996}/codebase_rag/analyzers/ast_grep_rules/security/typescript.yaml +0 -0
- {code_graph_rag-0.0.945 → code_graph_rag-0.0.996}/codebase_rag/analyzers/ast_grep_rules/smells/c.yaml +0 -0
- {code_graph_rag-0.0.945 → code_graph_rag-0.0.996}/codebase_rag/analyzers/ast_grep_rules/smells/cpp.yaml +0 -0
- {code_graph_rag-0.0.945 → code_graph_rag-0.0.996}/codebase_rag/analyzers/ast_grep_rules/smells/csharp.yaml +0 -0
- {code_graph_rag-0.0.945 → code_graph_rag-0.0.996}/codebase_rag/analyzers/ast_grep_rules/smells/dart.yaml +0 -0
- {code_graph_rag-0.0.945 → code_graph_rag-0.0.996}/codebase_rag/analyzers/ast_grep_rules/smells/go.yaml +0 -0
- {code_graph_rag-0.0.945 → code_graph_rag-0.0.996}/codebase_rag/analyzers/ast_grep_rules/smells/java.yaml +0 -0
- {code_graph_rag-0.0.945 → code_graph_rag-0.0.996}/codebase_rag/analyzers/ast_grep_rules/smells/javascript.yaml +0 -0
- {code_graph_rag-0.0.945 → code_graph_rag-0.0.996}/codebase_rag/analyzers/ast_grep_rules/smells/lua.yaml +0 -0
- {code_graph_rag-0.0.945 → code_graph_rag-0.0.996}/codebase_rag/analyzers/ast_grep_rules/smells/php.yaml +0 -0
- {code_graph_rag-0.0.945 → code_graph_rag-0.0.996}/codebase_rag/analyzers/ast_grep_rules/smells/python.yaml +0 -0
- {code_graph_rag-0.0.945 → code_graph_rag-0.0.996}/codebase_rag/analyzers/ast_grep_rules/smells/ruby.yaml +0 -0
- {code_graph_rag-0.0.945 → code_graph_rag-0.0.996}/codebase_rag/analyzers/ast_grep_rules/smells/rust.yaml +0 -0
- {code_graph_rag-0.0.945 → code_graph_rag-0.0.996}/codebase_rag/analyzers/ast_grep_rules/smells/scala.yaml +0 -0
- {code_graph_rag-0.0.945 → code_graph_rag-0.0.996}/codebase_rag/analyzers/ast_grep_rules/smells/tsx.yaml +0 -0
- {code_graph_rag-0.0.945 → code_graph_rag-0.0.996}/codebase_rag/analyzers/ast_grep_rules/smells/typescript.yaml +0 -0
- {code_graph_rag-0.0.945 → code_graph_rag-0.0.996}/codebase_rag/capture.py +0 -0
- {code_graph_rag-0.0.945 → code_graph_rag-0.0.996}/codebase_rag/cgr_state.py +0 -0
- {code_graph_rag-0.0.945 → code_graph_rag-0.0.996}/codebase_rag/constants/__init__.py +0 -0
- {code_graph_rag-0.0.945 → code_graph_rag-0.0.996}/codebase_rag/constants/ast_go.py +0 -0
- {code_graph_rag-0.0.945 → code_graph_rag-0.0.996}/codebase_rag/constants/ast_js.py +0 -0
- {code_graph_rag-0.0.945 → code_graph_rag-0.0.996}/codebase_rag/constants/ast_lua.py +0 -0
- {code_graph_rag-0.0.945 → code_graph_rag-0.0.996}/codebase_rag/constants/ast_python.py +0 -0
- {code_graph_rag-0.0.945 → code_graph_rag-0.0.996}/codebase_rag/constants/ast_sql.py +0 -0
- {code_graph_rag-0.0.945 → code_graph_rag-0.0.996}/codebase_rag/constants/deadcode_roots.py +0 -0
- {code_graph_rag-0.0.945 → code_graph_rag-0.0.996}/codebase_rag/constants/deps.py +0 -0
- {code_graph_rag-0.0.945 → code_graph_rag-0.0.996}/codebase_rag/constants/duplicates.py +0 -0
- {code_graph_rag-0.0.945 → code_graph_rag-0.0.996}/codebase_rag/constants/fqn_specs.py +0 -0
- {code_graph_rag-0.0.945 → code_graph_rag-0.0.996}/codebase_rag/constants/lang_tooling.py +0 -0
- {code_graph_rag-0.0.945 → code_graph_rag-0.0.996}/codebase_rag/constants/languages.py +0 -0
- {code_graph_rag-0.0.945 → code_graph_rag-0.0.996}/codebase_rag/constants/providers.py +0 -0
- {code_graph_rag-0.0.945 → code_graph_rag-0.0.996}/codebase_rag/constants/stdlib_types.py +0 -0
- {code_graph_rag-0.0.945 → code_graph_rag-0.0.996}/codebase_rag/constants/structural.py +0 -0
- {code_graph_rag-0.0.945 → code_graph_rag-0.0.996}/codebase_rag/constants/trace.py +0 -0
- {code_graph_rag-0.0.945 → code_graph_rag-0.0.996}/codebase_rag/crash_correlation.py +0 -0
- {code_graph_rag-0.0.945 → code_graph_rag-0.0.996}/codebase_rag/decorators.py +0 -0
- {code_graph_rag-0.0.945 → code_graph_rag-0.0.996}/codebase_rag/docker-compose.yaml +0 -0
- {code_graph_rag-0.0.945 → code_graph_rag-0.0.996}/codebase_rag/editing/__init__.py +0 -0
- {code_graph_rag-0.0.945 → code_graph_rag-0.0.996}/codebase_rag/editing/cli.py +0 -0
- {code_graph_rag-0.0.945 → code_graph_rag-0.0.996}/codebase_rag/editing/contract.py +0 -0
- {code_graph_rag-0.0.945 → code_graph_rag-0.0.996}/codebase_rag/editing/imports.py +0 -0
- {code_graph_rag-0.0.945 → code_graph_rag-0.0.996}/codebase_rag/editing/patcher.py +0 -0
- {code_graph_rag-0.0.945 → code_graph_rag-0.0.996}/codebase_rag/editing/transaction.py +0 -0
- {code_graph_rag-0.0.945 → code_graph_rag-0.0.996}/codebase_rag/editor_links.py +0 -0
- {code_graph_rag-0.0.945 → code_graph_rag-0.0.996}/codebase_rag/flow_verdict.py +0 -0
- {code_graph_rag-0.0.945 → code_graph_rag-0.0.996}/codebase_rag/function_registry.py +0 -0
- {code_graph_rag-0.0.945 → code_graph_rag-0.0.996}/codebase_rag/graph_audit.py +0 -0
- {code_graph_rag-0.0.945 → code_graph_rag-0.0.996}/codebase_rag/graph_cli.py +0 -0
- {code_graph_rag-0.0.945 → code_graph_rag-0.0.996}/codebase_rag/graph_dialects.py +0 -0
- {code_graph_rag-0.0.945 → code_graph_rag-0.0.996}/codebase_rag/graph_loader.py +0 -0
- {code_graph_rag-0.0.945 → code_graph_rag-0.0.996}/codebase_rag/mcp/__init__.py +0 -0
- {code_graph_rag-0.0.945 → code_graph_rag-0.0.996}/codebase_rag/mcp/client.py +0 -0
- {code_graph_rag-0.0.945 → code_graph_rag-0.0.996}/codebase_rag/parser_fingerprint.py +0 -0
- {code_graph_rag-0.0.945 → code_graph_rag-0.0.996}/codebase_rag/parser_loader.py +0 -0
- {code_graph_rag-0.0.945 → code_graph_rag-0.0.996}/codebase_rag/parsers/__init__.py +0 -0
- {code_graph_rag-0.0.945 → code_graph_rag-0.0.996}/codebase_rag/parsers/anchor_hash.py +0 -0
- {code_graph_rag-0.0.945 → code_graph_rag-0.0.996}/codebase_rag/parsers/ast_fingerprint.py +0 -0
- {code_graph_rag-0.0.945 → code_graph_rag-0.0.996}/codebase_rag/parsers/ast_grep_patterns/bash.yaml +0 -0
- {code_graph_rag-0.0.945 → code_graph_rag-0.0.996}/codebase_rag/parsers/ast_grep_patterns/elixir.yaml +0 -0
- {code_graph_rag-0.0.945 → code_graph_rag-0.0.996}/codebase_rag/parsers/ast_grep_patterns/haskell.yaml +0 -0
- {code_graph_rag-0.0.945 → code_graph_rag-0.0.996}/codebase_rag/parsers/ast_grep_patterns/kotlin.yaml +0 -0
- {code_graph_rag-0.0.945 → code_graph_rag-0.0.996}/codebase_rag/parsers/ast_grep_patterns/nix.yaml +0 -0
- {code_graph_rag-0.0.945 → code_graph_rag-0.0.996}/codebase_rag/parsers/ast_grep_patterns/ruby.yaml +0 -0
- {code_graph_rag-0.0.945 → code_graph_rag-0.0.996}/codebase_rag/parsers/ast_grep_patterns/solidity.yaml +0 -0
- {code_graph_rag-0.0.945 → code_graph_rag-0.0.996}/codebase_rag/parsers/ast_grep_patterns/swift.yaml +0 -0
- {code_graph_rag-0.0.945 → code_graph_rag-0.0.996}/codebase_rag/parsers/build_lock.py +0 -0
- {code_graph_rag-0.0.945 → code_graph_rag-0.0.996}/codebase_rag/parsers/class_ingest/__init__.py +0 -0
- {code_graph_rag-0.0.945 → code_graph_rag-0.0.996}/codebase_rag/parsers/class_ingest/cpp_modules.py +0 -0
- {code_graph_rag-0.0.945 → code_graph_rag-0.0.996}/codebase_rag/parsers/class_ingest/node_type.py +0 -0
- {code_graph_rag-0.0.945 → code_graph_rag-0.0.996}/codebase_rag/parsers/class_ingest/relationships.py +0 -0
- {code_graph_rag-0.0.945 → code_graph_rag-0.0.996}/codebase_rag/parsers/class_ingest/utils.py +0 -0
- {code_graph_rag-0.0.945 → code_graph_rag-0.0.996}/codebase_rag/parsers/contract_linking.py +0 -0
- {code_graph_rag-0.0.945 → code_graph_rag-0.0.996}/codebase_rag/parsers/contracts.py +0 -0
- {code_graph_rag-0.0.945 → code_graph_rag-0.0.996}/codebase_rag/parsers/cpp/__init__.py +0 -0
- {code_graph_rag-0.0.945 → code_graph_rag-0.0.996}/codebase_rag/parsers/cpp/preproc_recovery.py +0 -0
- {code_graph_rag-0.0.945 → code_graph_rag-0.0.996}/codebase_rag/parsers/cpp/type_inference.py +0 -0
- {code_graph_rag-0.0.945 → code_graph_rag-0.0.996}/codebase_rag/parsers/cpp/utils.py +0 -0
- {code_graph_rag-0.0.945 → code_graph_rag-0.0.996}/codebase_rag/parsers/cpp_frontend/__init__.py +0 -0
- {code_graph_rag-0.0.945 → code_graph_rag-0.0.996}/codebase_rag/parsers/cpp_frontend/constants.py +0 -0
- {code_graph_rag-0.0.945 → code_graph_rag-0.0.996}/codebase_rag/parsers/cpp_frontend/frontend.py +0 -0
- {code_graph_rag-0.0.945 → code_graph_rag-0.0.996}/codebase_rag/parsers/cpp_frontend/qn.py +0 -0
- {code_graph_rag-0.0.945 → code_graph_rag-0.0.996}/codebase_rag/parsers/csharp/__init__.py +0 -0
- {code_graph_rag-0.0.945 → code_graph_rag-0.0.996}/codebase_rag/parsers/csharp_frontend/__init__.py +0 -0
- {code_graph_rag-0.0.945 → code_graph_rag-0.0.996}/codebase_rag/parsers/csharp_frontend/frontend.py +0 -0
- {code_graph_rag-0.0.945 → code_graph_rag-0.0.996}/codebase_rag/parsers/csharp_frontend/roslyn/Frontend.cs +0 -0
- {code_graph_rag-0.0.945 → code_graph_rag-0.0.996}/codebase_rag/parsers/csharp_frontend/roslyn/Frontend.csproj +0 -0
- {code_graph_rag-0.0.945 → code_graph_rag-0.0.996}/codebase_rag/parsers/csharp_frontend/roslyn/Program.cs +0 -0
- {code_graph_rag-0.0.945 → code_graph_rag-0.0.996}/codebase_rag/parsers/dart/__init__.py +0 -0
- {code_graph_rag-0.0.945 → code_graph_rag-0.0.996}/codebase_rag/parsers/dart/type_inference.py +0 -0
- {code_graph_rag-0.0.945 → code_graph_rag-0.0.996}/codebase_rag/parsers/definition_docstring.py +0 -0
- {code_graph_rag-0.0.945 → code_graph_rag-0.0.996}/codebase_rag/parsers/dependency_parser.py +0 -0
- {code_graph_rag-0.0.945 → code_graph_rag-0.0.996}/codebase_rag/parsers/dispatch_registry.py +0 -0
- {code_graph_rag-0.0.945 → code_graph_rag-0.0.996}/codebase_rag/parsers/document_tier.py +0 -0
- {code_graph_rag-0.0.945 → code_graph_rag-0.0.996}/codebase_rag/parsers/endpoint_prefixes.py +0 -0
- {code_graph_rag-0.0.945 → code_graph_rag-0.0.996}/codebase_rag/parsers/endpoint_routes.py +0 -0
- {code_graph_rag-0.0.945 → code_graph_rag-0.0.996}/codebase_rag/parsers/endpoints.py +0 -0
- {code_graph_rag-0.0.945 → code_graph_rag-0.0.996}/codebase_rag/parsers/export_detection.py +0 -0
- {code_graph_rag-0.0.945 → code_graph_rag-0.0.996}/codebase_rag/parsers/flat_module.py +0 -0
- {code_graph_rag-0.0.945 → code_graph_rag-0.0.996}/codebase_rag/parsers/flow_access/__init__.py +0 -0
- {code_graph_rag-0.0.945 → code_graph_rag-0.0.996}/codebase_rag/parsers/flow_access/constants.py +0 -0
- {code_graph_rag-0.0.945 → code_graph_rag-0.0.996}/codebase_rag/parsers/flow_access/processor.py +0 -0
- {code_graph_rag-0.0.945 → code_graph_rag-0.0.996}/codebase_rag/parsers/frontend_mode.py +0 -0
- {code_graph_rag-0.0.945 → code_graph_rag-0.0.996}/codebase_rag/parsers/frontends/__init__.py +0 -0
- {code_graph_rag-0.0.945 → code_graph_rag-0.0.996}/codebase_rag/parsers/frontends/cpp.py +0 -0
- {code_graph_rag-0.0.945 → code_graph_rag-0.0.996}/codebase_rag/parsers/frontends/csharp.py +0 -0
- {code_graph_rag-0.0.945 → code_graph_rag-0.0.996}/codebase_rag/parsers/frontends/go.py +0 -0
- {code_graph_rag-0.0.945 → code_graph_rag-0.0.996}/codebase_rag/parsers/frontends/java.py +0 -0
- {code_graph_rag-0.0.945 → code_graph_rag-0.0.996}/codebase_rag/parsers/frontends/protocol.py +0 -0
- {code_graph_rag-0.0.945 → code_graph_rag-0.0.996}/codebase_rag/parsers/frontends/python.py +0 -0
- {code_graph_rag-0.0.945 → code_graph_rag-0.0.996}/codebase_rag/parsers/frontends/registry.py +0 -0
- {code_graph_rag-0.0.945 → code_graph_rag-0.0.996}/codebase_rag/parsers/go/__init__.py +0 -0
- {code_graph_rag-0.0.945 → code_graph_rag-0.0.996}/codebase_rag/parsers/go/module_paths.py +0 -0
- {code_graph_rag-0.0.945 → code_graph_rag-0.0.996}/codebase_rag/parsers/go/type_inference.py +0 -0
- {code_graph_rag-0.0.945 → code_graph_rag-0.0.996}/codebase_rag/parsers/go/utils.py +0 -0
- {code_graph_rag-0.0.945 → code_graph_rag-0.0.996}/codebase_rag/parsers/go_frontend/__init__.py +0 -0
- {code_graph_rag-0.0.945 → code_graph_rag-0.0.996}/codebase_rag/parsers/go_frontend/frontend.py +0 -0
- {code_graph_rag-0.0.945 → code_graph_rag-0.0.996}/codebase_rag/parsers/go_frontend/gotypes/main.go +0 -0
- {code_graph_rag-0.0.945 → code_graph_rag-0.0.996}/codebase_rag/parsers/handlers/__init__.py +0 -0
- {code_graph_rag-0.0.945 → code_graph_rag-0.0.996}/codebase_rag/parsers/handlers/base.py +0 -0
- {code_graph_rag-0.0.945 → code_graph_rag-0.0.996}/codebase_rag/parsers/handlers/cpp.py +0 -0
- {code_graph_rag-0.0.945 → code_graph_rag-0.0.996}/codebase_rag/parsers/handlers/java.py +0 -0
- {code_graph_rag-0.0.945 → code_graph_rag-0.0.996}/codebase_rag/parsers/handlers/js_ts.py +0 -0
- {code_graph_rag-0.0.945 → code_graph_rag-0.0.996}/codebase_rag/parsers/handlers/lua.py +0 -0
- {code_graph_rag-0.0.945 → code_graph_rag-0.0.996}/codebase_rag/parsers/handlers/php.py +0 -0
- {code_graph_rag-0.0.945 → code_graph_rag-0.0.996}/codebase_rag/parsers/handlers/protocol.py +0 -0
- {code_graph_rag-0.0.945 → code_graph_rag-0.0.996}/codebase_rag/parsers/handlers/python.py +0 -0
- {code_graph_rag-0.0.945 → code_graph_rag-0.0.996}/codebase_rag/parsers/handlers/registry.py +0 -0
- {code_graph_rag-0.0.945 → code_graph_rag-0.0.996}/codebase_rag/parsers/handlers/rust.py +0 -0
- {code_graph_rag-0.0.945 → code_graph_rag-0.0.996}/codebase_rag/parsers/io_access/__init__.py +0 -0
- {code_graph_rag-0.0.945 → code_graph_rag-0.0.996}/codebase_rag/parsers/io_access/constants.py +0 -0
- {code_graph_rag-0.0.945 → code_graph_rag-0.0.996}/codebase_rag/parsers/io_access/descriptor.py +0 -0
- {code_graph_rag-0.0.945 → code_graph_rag-0.0.996}/codebase_rag/parsers/io_access/extract.py +0 -0
- {code_graph_rag-0.0.945 → code_graph_rag-0.0.996}/codebase_rag/parsers/io_access/models.py +0 -0
- {code_graph_rag-0.0.945 → code_graph_rag-0.0.996}/codebase_rag/parsers/io_access/processor.py +0 -0
- {code_graph_rag-0.0.945 → code_graph_rag-0.0.996}/codebase_rag/parsers/io_access/registry.py +0 -0
- {code_graph_rag-0.0.945 → code_graph_rag-0.0.996}/codebase_rag/parsers/java/__init__.py +0 -0
- {code_graph_rag-0.0.945 → code_graph_rag-0.0.996}/codebase_rag/parsers/java/method_resolver.py +0 -0
- {code_graph_rag-0.0.945 → code_graph_rag-0.0.996}/codebase_rag/parsers/java/type_inference.py +0 -0
- {code_graph_rag-0.0.945 → code_graph_rag-0.0.996}/codebase_rag/parsers/java/type_resolver.py +0 -0
- {code_graph_rag-0.0.945 → code_graph_rag-0.0.996}/codebase_rag/parsers/java_frontend/__init__.py +0 -0
- {code_graph_rag-0.0.945 → code_graph_rag-0.0.996}/codebase_rag/parsers/java_frontend/frontend.py +0 -0
- {code_graph_rag-0.0.945 → code_graph_rag-0.0.996}/codebase_rag/parsers/java_frontend/javac/cgr/Frontend.java +0 -0
- {code_graph_rag-0.0.945 → code_graph_rag-0.0.996}/codebase_rag/parsers/java_generated.py +0 -0
- {code_graph_rag-0.0.945 → code_graph_rag-0.0.996}/codebase_rag/parsers/java_lombok.py +0 -0
- {code_graph_rag-0.0.945 → code_graph_rag-0.0.996}/codebase_rag/parsers/js_ts/__init__.py +0 -0
- {code_graph_rag-0.0.945 → code_graph_rag-0.0.996}/codebase_rag/parsers/js_ts/ingest.py +0 -0
- {code_graph_rag-0.0.945 → code_graph_rag-0.0.996}/codebase_rag/parsers/js_ts/module_paths.py +0 -0
- {code_graph_rag-0.0.945 → code_graph_rag-0.0.996}/codebase_rag/parsers/js_ts/module_system.py +0 -0
- {code_graph_rag-0.0.945 → code_graph_rag-0.0.996}/codebase_rag/parsers/js_ts/type_inference.py +0 -0
- {code_graph_rag-0.0.945 → code_graph_rag-0.0.996}/codebase_rag/parsers/js_ts/utils.py +0 -0
- {code_graph_rag-0.0.945 → code_graph_rag-0.0.996}/codebase_rag/parsers/lua/__init__.py +0 -0
- {code_graph_rag-0.0.945 → code_graph_rag-0.0.996}/codebase_rag/parsers/lua/type_inference.py +0 -0
- {code_graph_rag-0.0.945 → code_graph_rag-0.0.996}/codebase_rag/parsers/lua/utils.py +0 -0
- {code_graph_rag-0.0.945 → code_graph_rag-0.0.996}/codebase_rag/parsers/module_docstring.py +0 -0
- {code_graph_rag-0.0.945 → code_graph_rag-0.0.996}/codebase_rag/parsers/py/__init__.py +0 -0
- {code_graph_rag-0.0.945 → code_graph_rag-0.0.996}/codebase_rag/parsers/py/expression_analyzer.py +0 -0
- {code_graph_rag-0.0.945 → code_graph_rag-0.0.996}/codebase_rag/parsers/py/type_inference.py +0 -0
- {code_graph_rag-0.0.945 → code_graph_rag-0.0.996}/codebase_rag/parsers/py/utils.py +0 -0
- {code_graph_rag-0.0.945 → code_graph_rag-0.0.996}/codebase_rag/parsers/py/variable_analyzer.py +0 -0
- {code_graph_rag-0.0.945 → code_graph_rag-0.0.996}/codebase_rag/parsers/py_frontend/__init__.py +0 -0
- {code_graph_rag-0.0.945 → code_graph_rag-0.0.996}/codebase_rag/parsers/py_frontend/frontend.py +0 -0
- {code_graph_rag-0.0.945 → code_graph_rag-0.0.996}/codebase_rag/parsers/rpc_exposure.py +0 -0
- {code_graph_rag-0.0.945 → code_graph_rag-0.0.996}/codebase_rag/parsers/rs/__init__.py +0 -0
- {code_graph_rag-0.0.945 → code_graph_rag-0.0.996}/codebase_rag/parsers/rs/type_inference.py +0 -0
- {code_graph_rag-0.0.945 → code_graph_rag-0.0.996}/codebase_rag/parsers/rs/utils.py +0 -0
- {code_graph_rag-0.0.945 → code_graph_rag-0.0.996}/codebase_rag/parsers/semantic_call_join.py +0 -0
- {code_graph_rag-0.0.945 → code_graph_rag-0.0.996}/codebase_rag/parsers/stdlib_extractor.py +0 -0
- {code_graph_rag-0.0.945 → code_graph_rag-0.0.996}/codebase_rag/parsers/string_call.py +0 -0
- {code_graph_rag-0.0.945 → code_graph_rag-0.0.996}/codebase_rag/parsers/structure_processor.py +0 -0
- {code_graph_rag-0.0.945 → code_graph_rag-0.0.996}/codebase_rag/path_filters.py +0 -0
- {code_graph_rag-0.0.945 → code_graph_rag-0.0.996}/codebase_rag/providers/__init__.py +0 -0
- {code_graph_rag-0.0.945 → code_graph_rag-0.0.996}/codebase_rag/schema_builder.py +0 -0
- {code_graph_rag-0.0.945 → code_graph_rag-0.0.996}/codebase_rag/schema_parse.py +0 -0
- {code_graph_rag-0.0.945 → code_graph_rag-0.0.996}/codebase_rag/schemas.py +0 -0
- {code_graph_rag-0.0.945 → code_graph_rag-0.0.996}/codebase_rag/services/anthropic_token_counter.py +0 -0
- {code_graph_rag-0.0.945 → code_graph_rag-0.0.996}/codebase_rag/services/filtering.py +0 -0
- {code_graph_rag-0.0.945 → code_graph_rag-0.0.996}/codebase_rag/services/gloss_cleanup.py +0 -0
- {code_graph_rag-0.0.945 → code_graph_rag-0.0.996}/codebase_rag/services/graph_diff.py +0 -0
- {code_graph_rag-0.0.945 → code_graph_rag-0.0.996}/codebase_rag/services/provenance.py +0 -0
- {code_graph_rag-0.0.945 → code_graph_rag-0.0.996}/codebase_rag/services/resource_cleanup.py +0 -0
- {code_graph_rag-0.0.945 → code_graph_rag-0.0.996}/codebase_rag/services/usage_cost.py +0 -0
- {code_graph_rag-0.0.945 → code_graph_rag-0.0.996}/codebase_rag/sql_names.py +0 -0
- {code_graph_rag-0.0.945 → code_graph_rag-0.0.996}/codebase_rag/stack/__init__.py +0 -0
- {code_graph_rag-0.0.945 → code_graph_rag-0.0.996}/codebase_rag/stack/cli.py +0 -0
- {code_graph_rag-0.0.945 → code_graph_rag-0.0.996}/codebase_rag/stack/constants.py +0 -0
- {code_graph_rag-0.0.945 → code_graph_rag-0.0.996}/codebase_rag/stack/health.py +0 -0
- {code_graph_rag-0.0.945 → code_graph_rag-0.0.996}/codebase_rag/stack/manager.py +0 -0
- {code_graph_rag-0.0.945 → code_graph_rag-0.0.996}/codebase_rag/structural_check.py +0 -0
- {code_graph_rag-0.0.945 → code_graph_rag-0.0.996}/codebase_rag/taint.py +0 -0
- {code_graph_rag-0.0.945 → code_graph_rag-0.0.996}/codebase_rag/tool_errors.py +0 -0
- {code_graph_rag-0.0.945 → code_graph_rag-0.0.996}/codebase_rag/tools/__init__.py +0 -0
- {code_graph_rag-0.0.945 → code_graph_rag-0.0.996}/codebase_rag/tools/ast_grep_service.py +0 -0
- {code_graph_rag-0.0.945 → code_graph_rag-0.0.996}/codebase_rag/tools/directory_lister.py +0 -0
- {code_graph_rag-0.0.945 → code_graph_rag-0.0.996}/codebase_rag/tools/duplicate_detection.py +0 -0
- {code_graph_rag-0.0.945 → code_graph_rag-0.0.996}/codebase_rag/tools/file_editor.py +0 -0
- {code_graph_rag-0.0.945 → code_graph_rag-0.0.996}/codebase_rag/tools/file_reader.py +0 -0
- {code_graph_rag-0.0.945 → code_graph_rag-0.0.996}/codebase_rag/tools/file_writer.py +0 -0
- {code_graph_rag-0.0.945 → code_graph_rag-0.0.996}/codebase_rag/tools/graph_rerank.py +0 -0
- {code_graph_rag-0.0.945 → code_graph_rag-0.0.996}/codebase_rag/tools/language.py +0 -0
- {code_graph_rag-0.0.945 → code_graph_rag-0.0.996}/codebase_rag/tools/research.py +0 -0
- {code_graph_rag-0.0.945 → code_graph_rag-0.0.996}/codebase_rag/tools/structural_editor.py +0 -0
- {code_graph_rag-0.0.945 → code_graph_rag-0.0.996}/codebase_rag/tools/structural_search.py +0 -0
- {code_graph_rag-0.0.945 → code_graph_rag-0.0.996}/codebase_rag/tools/web_search.py +0 -0
- {code_graph_rag-0.0.945 → code_graph_rag-0.0.996}/codebase_rag/trace/__init__.py +0 -0
- {code_graph_rag-0.0.945 → code_graph_rag-0.0.996}/codebase_rag/trace/cli.py +0 -0
- {code_graph_rag-0.0.945 → code_graph_rag-0.0.996}/codebase_rag/trace/cpuprofile.py +0 -0
- {code_graph_rag-0.0.945 → code_graph_rag-0.0.996}/codebase_rag/trace/dispatch_site.py +0 -0
- {code_graph_rag-0.0.945 → code_graph_rag-0.0.996}/codebase_rag/trace/ebpf_pprof.py +0 -0
- {code_graph_rag-0.0.945 → code_graph_rag-0.0.996}/codebase_rag/trace/ingest.py +0 -0
- {code_graph_rag-0.0.945 → code_graph_rag-0.0.996}/codebase_rag/trace/instrumented.py +0 -0
- {code_graph_rag-0.0.945 → code_graph_rag-0.0.996}/codebase_rag/trace/pprof.py +0 -0
- {code_graph_rag-0.0.945 → code_graph_rag-0.0.996}/codebase_rag/trace/pytest_plugin.py +0 -0
- {code_graph_rag-0.0.945 → code_graph_rag-0.0.996}/codebase_rag/trace/records.py +0 -0
- {code_graph_rag-0.0.945 → code_graph_rag-0.0.996}/codebase_rag/trace/rust_pprof.py +0 -0
- {code_graph_rag-0.0.945 → code_graph_rag-0.0.996}/codebase_rag/trace/sourcemap.py +0 -0
- {code_graph_rag-0.0.945 → code_graph_rag-0.0.996}/codebase_rag/trace/speedscope.py +0 -0
- {code_graph_rag-0.0.945 → code_graph_rag-0.0.996}/codebase_rag/trace/tracer.py +0 -0
- {code_graph_rag-0.0.945 → code_graph_rag-0.0.996}/codebase_rag/trace/xdebug.py +0 -0
- {code_graph_rag-0.0.945 → code_graph_rag-0.0.996}/codebase_rag/unixcoder.py +0 -0
- {code_graph_rag-0.0.945 → code_graph_rag-0.0.996}/codebase_rag/utils/__init__.py +0 -0
- {code_graph_rag-0.0.945 → code_graph_rag-0.0.996}/codebase_rag/utils/dependencies.py +0 -0
- {code_graph_rag-0.0.945 → code_graph_rag-0.0.996}/codebase_rag/utils/rich_markdown.py +0 -0
- {code_graph_rag-0.0.945 → code_graph_rag-0.0.996}/codebase_rag/utils/source_extraction.py +0 -0
- {code_graph_rag-0.0.945 → code_graph_rag-0.0.996}/codebase_rag/utils/token_utils.py +0 -0
- {code_graph_rag-0.0.945 → code_graph_rag-0.0.996}/codebase_rag/workspaces/__init__.py +0 -0
- {code_graph_rag-0.0.945 → code_graph_rag-0.0.996}/codebase_rag/workspaces/cli.py +0 -0
- {code_graph_rag-0.0.945 → code_graph_rag-0.0.996}/codebase_rag/workspaces/constants.py +0 -0
- {code_graph_rag-0.0.945 → code_graph_rag-0.0.996}/codebase_rag/workspaces/models.py +0 -0
- {code_graph_rag-0.0.945 → code_graph_rag-0.0.996}/codebase_rag/workspaces/storage.py +0 -0
- {code_graph_rag-0.0.945 → code_graph_rag-0.0.996}/codec/__init__.py +0 -0
- {code_graph_rag-0.0.945 → code_graph_rag-0.0.996}/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.996
|
|
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
|
|
@@ -85,7 +85,7 @@ Dynamic: license-file
|
|
|
85
85
|
|
|
86
86
|
# Code-Graph-RAG
|
|
87
87
|
|
|
88
|
-
Code-Graph-RAG parses a multi-language codebase with Tree-sitter, builds a knowledge graph of its structure in Memgraph, 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.
|
|
88
|
+
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 Memgraph, 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.
|
|
89
89
|
|
|
90
90
|
## What It Does
|
|
91
91
|
|
|
@@ -155,15 +155,12 @@ pip install "code-graph-rag[treesitter-full] @ git+https://github.com/vitali87/c
|
|
|
155
155
|
- `cmake` (for building pymgclient)
|
|
156
156
|
- `ripgrep` (`rg`) (for shell command text searching)
|
|
157
157
|
|
|
158
|
-
The wheel is pure Python (`py3-none-any`), so
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
run `uv venv --python 3.12 --seed && source .venv/bin/activate` (uv downloads
|
|
165
|
-
3.12 automatically; `--seed` puts pip in the environment), or install CPython 3.12 yourself and use
|
|
166
|
-
`python3.12 -m pip install ...`.
|
|
158
|
+
The wheel is pure Python (`py3-none-any`), so it installs on any platform with
|
|
159
|
+
Python 3.12 or newer. Some distributions ship an older interpreter (Debian
|
|
160
|
+
Bookworm, and so Raspberry Pi OS Bookworm, ships 3.11), which also explains the
|
|
161
|
+
failed piwheels Bookworm build. On those systems, see the [installation
|
|
162
|
+
guide](https://github.com/vitali87/code-graph-rag/blob/main/docs/getting-started/installation.md#older-system-interpreters)
|
|
163
|
+
for the available interpreter-pinning alternatives.
|
|
167
164
|
|
|
168
165
|
## CLI Quick Start
|
|
169
166
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# Code-Graph-RAG
|
|
2
2
|
|
|
3
|
-
Code-Graph-RAG parses a multi-language codebase with Tree-sitter, builds a knowledge graph of its structure in Memgraph, 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.
|
|
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 Memgraph, 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
|
|
|
@@ -70,15 +70,12 @@ pip install "code-graph-rag[treesitter-full] @ git+https://github.com/vitali87/c
|
|
|
70
70
|
- `cmake` (for building pymgclient)
|
|
71
71
|
- `ripgrep` (`rg`) (for shell command text searching)
|
|
72
72
|
|
|
73
|
-
The wheel is pure Python (`py3-none-any`), so
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
run `uv venv --python 3.12 --seed && source .venv/bin/activate` (uv downloads
|
|
80
|
-
3.12 automatically; `--seed` puts pip in the environment), or install CPython 3.12 yourself and use
|
|
81
|
-
`python3.12 -m pip install ...`.
|
|
73
|
+
The wheel is pure Python (`py3-none-any`), so it installs on any platform with
|
|
74
|
+
Python 3.12 or newer. Some distributions ship an older interpreter (Debian
|
|
75
|
+
Bookworm, and so Raspberry Pi OS Bookworm, ships 3.11), which also explains the
|
|
76
|
+
failed piwheels Bookworm build. On those systems, see the [installation
|
|
77
|
+
guide](https://github.com/vitali87/code-graph-rag/blob/main/docs/getting-started/installation.md#older-system-interpreters)
|
|
78
|
+
for the available interpreter-pinning alternatives.
|
|
82
79
|
|
|
83
80
|
## CLI Quick Start
|
|
84
81
|
|
|
@@ -42,7 +42,7 @@
|
|
|
42
42
|
|
|
43
43
|
# Code-Graph-RAG
|
|
44
44
|
|
|
45
|
-
Code-Graph-RAG parses a multi-language codebase with Tree-sitter, builds a knowledge graph of its structure in Memgraph, 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.
|
|
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 Memgraph, 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
|
<img src="./assets/demo.gif" alt="demo">
|
|
@@ -51,9 +51,9 @@ Code-Graph-RAG parses a multi-language codebase with Tree-sitter, builds a knowl
|
|
|
51
51
|
## Latest News 🔥
|
|
52
52
|
|
|
53
53
|
<!-- SECTION:latest_news -->
|
|
54
|
-
- **
|
|
55
|
-
- **
|
|
56
|
-
- **
|
|
54
|
+
- **Code Generation**: Split Cypher response cleaning and AST-grep rule validation into smaller, more manageable helpers for improved clarity and maintainability.
|
|
55
|
+
- **Scripting Improvements**: Resolved an issue where closed pull request run associations were incorrectly reported as missing, and improved error reporting in scripts to avoid over-claiming failing checks.
|
|
56
|
+
- **Data Handling**: Enhanced the handling of CONTAINS_SECTION in the double's module subtree and refined snippet lookup to project the matched node's own path.
|
|
57
57
|
<!-- /SECTION:latest_news -->
|
|
58
58
|
|
|
59
59
|
See [NEWS.md](NEWS.md) for the full history.
|
|
@@ -74,7 +74,7 @@ Point Code-Graph-RAG at a repository and it reads every source file, extracts fu
|
|
|
74
74
|
|
|
75
75
|
The system has two components:
|
|
76
76
|
|
|
77
|
-
1. **Multi-language parser.** A Tree-sitter based parser reads the codebase and ingests functions, classes, methods, modules, and their relationships into Memgraph under a single language-agnostic schema.
|
|
77
|
+
1. **Multi-language parser.** A Tree-sitter based parser reads the codebase and ingests functions, classes, methods, modules, and their relationships into Memgraph 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.
|
|
78
78
|
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.
|
|
79
79
|
|
|
80
80
|
```
|
|
@@ -129,7 +129,7 @@ uv tool install "code-graph-rag[treesitter-full,semantic] @ git+https://github.c
|
|
|
129
129
|
You also need Python 3.12+, Docker (for Memgraph), `cmake`, and `ripgrep`. Full prerequisites, source installs, and environment setup are in the [Installation](docs/getting-started/installation.md) guide.
|
|
130
130
|
|
|
131
131
|
> [!NOTE]
|
|
132
|
-
> The wheel is pure Python (`py3-none-any`), so
|
|
132
|
+
> The wheel is pure Python (`py3-none-any`), so it installs on any platform with Python 3.12 or newer. Older system interpreters (Debian Bookworm ships 3.11) need the interpreter pinned explicitly; see [Installation](docs/getting-started/installation.md#older-system-interpreters) for the commands.
|
|
133
133
|
|
|
134
134
|
## Quick Start
|
|
135
135
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: code-graph-rag
|
|
3
|
-
Version: 0.0.
|
|
3
|
+
Version: 0.0.996
|
|
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
|
|
@@ -85,7 +85,7 @@ Dynamic: license-file
|
|
|
85
85
|
|
|
86
86
|
# Code-Graph-RAG
|
|
87
87
|
|
|
88
|
-
Code-Graph-RAG parses a multi-language codebase with Tree-sitter, builds a knowledge graph of its structure in Memgraph, 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.
|
|
88
|
+
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 Memgraph, 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.
|
|
89
89
|
|
|
90
90
|
## What It Does
|
|
91
91
|
|
|
@@ -155,15 +155,12 @@ pip install "code-graph-rag[treesitter-full] @ git+https://github.com/vitali87/c
|
|
|
155
155
|
- `cmake` (for building pymgclient)
|
|
156
156
|
- `ripgrep` (`rg`) (for shell command text searching)
|
|
157
157
|
|
|
158
|
-
The wheel is pure Python (`py3-none-any`), so
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
run `uv venv --python 3.12 --seed && source .venv/bin/activate` (uv downloads
|
|
165
|
-
3.12 automatically; `--seed` puts pip in the environment), or install CPython 3.12 yourself and use
|
|
166
|
-
`python3.12 -m pip install ...`.
|
|
158
|
+
The wheel is pure Python (`py3-none-any`), so it installs on any platform with
|
|
159
|
+
Python 3.12 or newer. Some distributions ship an older interpreter (Debian
|
|
160
|
+
Bookworm, and so Raspberry Pi OS Bookworm, ships 3.11), which also explains the
|
|
161
|
+
failed piwheels Bookworm build. On those systems, see the [installation
|
|
162
|
+
guide](https://github.com/vitali87/code-graph-rag/blob/main/docs/getting-started/installation.md#older-system-interpreters)
|
|
163
|
+
for the available interpreter-pinning alternatives.
|
|
167
164
|
|
|
168
165
|
## CLI Quick Start
|
|
169
166
|
|
|
@@ -16,6 +16,7 @@ codebase_rag/cgr_state.py
|
|
|
16
16
|
codebase_rag/cli.py
|
|
17
17
|
codebase_rag/cli_help.py
|
|
18
18
|
codebase_rag/config.py
|
|
19
|
+
codebase_rag/console_marks.py
|
|
19
20
|
codebase_rag/context_pruning.py
|
|
20
21
|
codebase_rag/crash_correlation.py
|
|
21
22
|
codebase_rag/cypher_queries.py
|
|
@@ -29,6 +30,7 @@ codebase_rag/exceptions.py
|
|
|
29
30
|
codebase_rag/flow_verdict.py
|
|
30
31
|
codebase_rag/function_registry.py
|
|
31
32
|
codebase_rag/gloss.py
|
|
33
|
+
codebase_rag/gloss_anchor.py
|
|
32
34
|
codebase_rag/gloss_repair.py
|
|
33
35
|
codebase_rag/graph_audit.py
|
|
34
36
|
codebase_rag/graph_cli.py
|
|
@@ -162,6 +164,7 @@ codebase_rag/parsers/document_tier.py
|
|
|
162
164
|
codebase_rag/parsers/endpoint_prefixes.py
|
|
163
165
|
codebase_rag/parsers/endpoint_routes.py
|
|
164
166
|
codebase_rag/parsers/endpoints.py
|
|
167
|
+
codebase_rag/parsers/enum_variants.py
|
|
165
168
|
codebase_rag/parsers/export_detection.py
|
|
166
169
|
codebase_rag/parsers/factory.py
|
|
167
170
|
codebase_rag/parsers/field_nodes.py
|
|
@@ -288,8 +291,17 @@ codebase_rag/parsers/rs/utils.py
|
|
|
288
291
|
codebase_rag/providers/__init__.py
|
|
289
292
|
codebase_rag/providers/base.py
|
|
290
293
|
codebase_rag/providers/litellm.py
|
|
294
|
+
codebase_rag/queries/highlights/c_sharp.scm
|
|
295
|
+
codebase_rag/queries/highlights/dart.scm
|
|
296
|
+
codebase_rag/queries/highlights/java.scm
|
|
297
|
+
codebase_rag/queries/highlights/javascript.scm
|
|
298
|
+
codebase_rag/queries/highlights/php.scm
|
|
299
|
+
codebase_rag/queries/highlights/python.scm
|
|
300
|
+
codebase_rag/queries/highlights/rust.scm
|
|
301
|
+
codebase_rag/queries/highlights/typescript.scm
|
|
291
302
|
codebase_rag/services/__init__.py
|
|
292
303
|
codebase_rag/services/anthropic_token_counter.py
|
|
304
|
+
codebase_rag/services/cypher_guard.py
|
|
293
305
|
codebase_rag/services/filtering.py
|
|
294
306
|
codebase_rag/services/gloss_cleanup.py
|
|
295
307
|
codebase_rag/services/graph_diff.py
|
|
@@ -344,6 +356,7 @@ codebase_rag/utils/__init__.py
|
|
|
344
356
|
codebase_rag/utils/dependencies.py
|
|
345
357
|
codebase_rag/utils/fqn_resolver.py
|
|
346
358
|
codebase_rag/utils/path_utils.py
|
|
359
|
+
codebase_rag/utils/qn_markers.py
|
|
347
360
|
codebase_rag/utils/rich_markdown.py
|
|
348
361
|
codebase_rag/utils/source_extraction.py
|
|
349
362
|
codebase_rag/utils/token_utils.py
|
|
@@ -2,7 +2,6 @@
|
|
|
2
2
|
# re-parses from disk via the loader so an eviction cannot lose an AST that
|
|
3
3
|
# type inference still needs (see load()).
|
|
4
4
|
|
|
5
|
-
import sys
|
|
6
5
|
from collections import OrderedDict
|
|
7
6
|
from collections.abc import Callable, ItemsView
|
|
8
7
|
from pathlib import Path
|
|
@@ -13,8 +12,24 @@ from . import constants as cs
|
|
|
13
12
|
from .config import settings
|
|
14
13
|
|
|
15
14
|
|
|
15
|
+
def _estimate_entry_bytes(value: tuple[Node, cs.SupportedLanguage]) -> int:
|
|
16
|
+
# The memory cap is measured in bytes of SOURCE the cached trees span, not
|
|
17
|
+
# the trees' true footprint: tree-sitter allocates nodes in C, invisible to
|
|
18
|
+
# sys.getsizeof (which reports ~56 bytes for any (Node, lang) tuple, so a
|
|
19
|
+
# cap summed from it never triggered). Tree size scales with source size,
|
|
20
|
+
# which makes this a stable proxy; the real heap cost is a multiple of it.
|
|
21
|
+
return value[0].end_byte
|
|
22
|
+
|
|
23
|
+
|
|
16
24
|
class BoundedASTCache:
|
|
17
|
-
__slots__ = (
|
|
25
|
+
__slots__ = (
|
|
26
|
+
"cache",
|
|
27
|
+
"entry_sizes",
|
|
28
|
+
"loader",
|
|
29
|
+
"max_entries",
|
|
30
|
+
"max_memory_bytes",
|
|
31
|
+
"total_bytes",
|
|
32
|
+
)
|
|
18
33
|
|
|
19
34
|
def __init__(
|
|
20
35
|
self,
|
|
@@ -24,6 +39,10 @@ class BoundedASTCache:
|
|
|
24
39
|
| None = None,
|
|
25
40
|
):
|
|
26
41
|
self.cache: OrderedDict[Path, tuple[Node, cs.SupportedLanguage]] = OrderedDict()
|
|
42
|
+
# Sizes are recorded at insert so eviction and the running total never
|
|
43
|
+
# rescan every entry: each insert stays O(1) plus the evictions it causes.
|
|
44
|
+
self.entry_sizes: dict[Path, int] = {}
|
|
45
|
+
self.total_bytes = 0
|
|
27
46
|
self.loader = loader
|
|
28
47
|
self.max_entries = (
|
|
29
48
|
max_entries if max_entries is not None else settings.CACHE_MAX_ENTRIES
|
|
@@ -47,11 +66,11 @@ class BoundedASTCache:
|
|
|
47
66
|
return entry
|
|
48
67
|
|
|
49
68
|
def __setitem__(self, key: Path, value: tuple[Node, cs.SupportedLanguage]) -> None:
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
69
|
+
self._remove(key)
|
|
70
|
+
size = _estimate_entry_bytes(value)
|
|
53
71
|
self.cache[key] = value
|
|
54
|
-
|
|
72
|
+
self.entry_sizes[key] = size
|
|
73
|
+
self.total_bytes += size
|
|
55
74
|
self._enforce_limits()
|
|
56
75
|
|
|
57
76
|
def __getitem__(self, key: Path) -> tuple[Node, cs.SupportedLanguage]:
|
|
@@ -60,8 +79,7 @@ class BoundedASTCache:
|
|
|
60
79
|
return value
|
|
61
80
|
|
|
62
81
|
def __delitem__(self, key: Path) -> None:
|
|
63
|
-
|
|
64
|
-
del self.cache[key]
|
|
82
|
+
self._remove(key)
|
|
65
83
|
|
|
66
84
|
def __contains__(self, key: Path) -> bool:
|
|
67
85
|
return key in self.cache
|
|
@@ -69,24 +87,25 @@ class BoundedASTCache:
|
|
|
69
87
|
def items(self) -> ItemsView[Path, tuple[Node, cs.SupportedLanguage]]:
|
|
70
88
|
return self.cache.items()
|
|
71
89
|
|
|
90
|
+
def clear(self) -> None:
|
|
91
|
+
self.cache.clear()
|
|
92
|
+
self.entry_sizes.clear()
|
|
93
|
+
self.total_bytes = 0
|
|
94
|
+
|
|
95
|
+
def _remove(self, key: Path) -> None:
|
|
96
|
+
if key in self.cache:
|
|
97
|
+
del self.cache[key]
|
|
98
|
+
self.total_bytes -= self.entry_sizes.pop(key)
|
|
99
|
+
|
|
100
|
+
def _evict_oldest(self) -> None:
|
|
101
|
+
key, _ = self.cache.popitem(last=False)
|
|
102
|
+
self.total_bytes -= self.entry_sizes.pop(key)
|
|
103
|
+
|
|
72
104
|
def _enforce_limits(self) -> None:
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
)
|
|
80
|
-
for _ in range(entries_to_remove):
|
|
81
|
-
if self.cache:
|
|
82
|
-
self.cache.popitem(last=False)
|
|
83
|
-
|
|
84
|
-
def _should_evict_for_memory(self) -> bool:
|
|
85
|
-
try:
|
|
86
|
-
cache_size = sum(sys.getsizeof(v) for v in self.cache.values())
|
|
87
|
-
return cache_size > self.max_memory_bytes
|
|
88
|
-
except Exception:
|
|
89
|
-
return (
|
|
90
|
-
len(self.cache)
|
|
91
|
-
> self.max_entries * settings.CACHE_MEMORY_THRESHOLD_RATIO
|
|
92
|
-
)
|
|
105
|
+
# Evict LRU entries until both caps hold. The newest entry is kept even
|
|
106
|
+
# if it alone exceeds the memory cap: the caller just parsed it and is
|
|
107
|
+
# about to use it, and load() would only re-parse it on the next read.
|
|
108
|
+
while len(self.cache) > self.max_entries or (
|
|
109
|
+
self.total_bytes > self.max_memory_bytes and len(self.cache) > 1
|
|
110
|
+
):
|
|
111
|
+
self._evict_oldest()
|
|
@@ -27,6 +27,7 @@ from . import cypher_queries as cq
|
|
|
27
27
|
from . import logs as ls
|
|
28
28
|
from .capture import CaptureSelection, resolve_capture, split_spec
|
|
29
29
|
from .config import load_ignore_patterns, settings
|
|
30
|
+
from .console_marks import status_mark
|
|
30
31
|
from .editing.cli import cli as edits_cli
|
|
31
32
|
from .editor_links import (
|
|
32
33
|
EditorTemplateError,
|
|
@@ -953,6 +954,9 @@ def mcp_server(
|
|
|
953
954
|
),
|
|
954
955
|
host: str = typer.Option(None, help=ch.HELP_MCP_HTTP_HOST),
|
|
955
956
|
port: int = typer.Option(None, help=ch.HELP_MCP_HTTP_PORT),
|
|
957
|
+
workspace: str | None = typer.Option(
|
|
958
|
+
None, "--workspace", help=ch.HELP_MCP_WORKSPACE
|
|
959
|
+
),
|
|
956
960
|
) -> None:
|
|
957
961
|
try:
|
|
958
962
|
if transport == cs.MCPTransport.HTTP:
|
|
@@ -960,11 +964,13 @@ def mcp_server(
|
|
|
960
964
|
|
|
961
965
|
resolved_host = host or settings.MCP_HTTP_HOST
|
|
962
966
|
resolved_port = port or settings.MCP_HTTP_PORT
|
|
963
|
-
asyncio.run(
|
|
967
|
+
asyncio.run(
|
|
968
|
+
serve_http(host=resolved_host, port=resolved_port, workspace=workspace)
|
|
969
|
+
)
|
|
964
970
|
else:
|
|
965
971
|
from codebase_rag.mcp import serve_stdio
|
|
966
972
|
|
|
967
|
-
asyncio.run(serve_stdio())
|
|
973
|
+
asyncio.run(serve_stdio(workspace=workspace))
|
|
968
974
|
except KeyboardInterrupt:
|
|
969
975
|
app_context.console.print(style(cs.CLI_MSG_APP_TERMINATED, cs.Color.RED))
|
|
970
976
|
except ValueError as e:
|
|
@@ -1301,18 +1307,6 @@ def status_command() -> None:
|
|
|
1301
1307
|
app_context.console.print(f" - {project}: last sync {ts}")
|
|
1302
1308
|
|
|
1303
1309
|
|
|
1304
|
-
def _status_mark(passed: bool, encoding: str) -> str:
|
|
1305
|
-
"""The pass/fail mark the console's stream can encode.
|
|
1306
|
-
|
|
1307
|
-
Rich substitutes ASCII box characters on a non-UTF stream but leaves
|
|
1308
|
-
text alone, so the glyph raised UnicodeEncodeError on a CP950 Windows
|
|
1309
|
-
terminal before a single check was shown (issue #1910).
|
|
1310
|
-
"""
|
|
1311
|
-
if encoding.lower().startswith(cs.ENCODING_UTF_PREFIX):
|
|
1312
|
-
return cs.HEALTH_MARK_PASS if passed else cs.HEALTH_MARK_FAIL
|
|
1313
|
-
return cs.HEALTH_MARK_PASS_ASCII if passed else cs.HEALTH_MARK_FAIL_ASCII
|
|
1314
|
-
|
|
1315
|
-
|
|
1316
1310
|
@app.command(
|
|
1317
1311
|
name=ch.CLICommandName.DOCTOR,
|
|
1318
1312
|
help=ch.CMD_DOCTOR,
|
|
@@ -1330,7 +1324,7 @@ def doctor() -> None:
|
|
|
1330
1324
|
|
|
1331
1325
|
encoding = app_context.console.encoding
|
|
1332
1326
|
for result in results:
|
|
1333
|
-
status =
|
|
1327
|
+
status = status_mark(result.passed, encoding)
|
|
1334
1328
|
status_color = cs.Color.GREEN if result.passed else cs.Color.RED
|
|
1335
1329
|
status_text = style(status, status_color, cs.StyleModifier.NONE)
|
|
1336
1330
|
|
|
@@ -1458,6 +1452,7 @@ def _dead_code_config(
|
|
|
1458
1452
|
entry_points: list[str],
|
|
1459
1453
|
decorator_roots: list[str],
|
|
1460
1454
|
min_resolution: cs.EdgeResolution | None = None,
|
|
1455
|
+
endpoint_roots: bool = True,
|
|
1461
1456
|
) -> DeadCodeConfig:
|
|
1462
1457
|
# test_patterns is always set: included tests become roots; excluded, it
|
|
1463
1458
|
# filters test modules out of module-load roots so test-only code stays dead.
|
|
@@ -1471,6 +1466,7 @@ def _dead_code_config(
|
|
|
1471
1466
|
entry_points=tuple(entry_points),
|
|
1472
1467
|
test_patterns=tuple(cs.TEST_PATH_PATTERNS),
|
|
1473
1468
|
min_resolution=str(min_resolution) if min_resolution is not None else None,
|
|
1469
|
+
endpoint_roots=endpoint_roots,
|
|
1474
1470
|
)
|
|
1475
1471
|
|
|
1476
1472
|
|
|
@@ -1581,6 +1577,18 @@ def _emit_dead_code(
|
|
|
1581
1577
|
app_context.console.print(style(notice, cs.Color.YELLOW))
|
|
1582
1578
|
|
|
1583
1579
|
|
|
1580
|
+
def _notice_single_project_endpoint_roots(show_progress: bool) -> None:
|
|
1581
|
+
"""Endpoint roots off on a graph holding one project: every endpoint
|
|
1582
|
+
reads as uncalled. Stdout carries the JSON payload when that format is
|
|
1583
|
+
chosen (local review P1), so the notice goes to stderr then."""
|
|
1584
|
+
if show_progress:
|
|
1585
|
+
app_context.console.print(
|
|
1586
|
+
style(cs.CLI_DEADCODE_SINGLE_PROJECT_ENDPOINTS, cs.Color.YELLOW)
|
|
1587
|
+
)
|
|
1588
|
+
else:
|
|
1589
|
+
typer.echo(cs.CLI_DEADCODE_SINGLE_PROJECT_ENDPOINTS, err=True)
|
|
1590
|
+
|
|
1591
|
+
|
|
1584
1592
|
@app.command(
|
|
1585
1593
|
name=ch.CLICommandName.DEAD_CODE,
|
|
1586
1594
|
help=ch.CMD_DEAD_CODE,
|
|
@@ -1621,6 +1629,11 @@ def dead_code(
|
|
|
1621
1629
|
min_resolution: cs.EdgeResolution | None = typer.Option(
|
|
1622
1630
|
None, "--min-resolution", help=ch.HELP_DEADCODE_MIN_RESOLUTION
|
|
1623
1631
|
),
|
|
1632
|
+
endpoint_roots: bool = typer.Option(
|
|
1633
|
+
True,
|
|
1634
|
+
"--endpoint-roots/--no-endpoint-roots",
|
|
1635
|
+
help=ch.HELP_DEADCODE_ENDPOINT_ROOTS,
|
|
1636
|
+
),
|
|
1624
1637
|
) -> None:
|
|
1625
1638
|
from .dead_code import collect_dead_code_with_coverage
|
|
1626
1639
|
|
|
@@ -1647,8 +1660,11 @@ def dead_code(
|
|
|
1647
1660
|
entry_point,
|
|
1648
1661
|
decorator_root,
|
|
1649
1662
|
min_resolution,
|
|
1663
|
+
endpoint_roots,
|
|
1650
1664
|
),
|
|
1651
1665
|
)
|
|
1666
|
+
if not endpoint_roots and len(projects) <= 1:
|
|
1667
|
+
_notice_single_project_endpoint_roots(show_progress)
|
|
1652
1668
|
except Exception as e:
|
|
1653
1669
|
app_context.console.print(
|
|
1654
1670
|
style(cs.CLI_ERR_DEADCODE_FAILED.format(error=e), cs.Color.RED)
|
|
@@ -24,6 +24,8 @@ class CLICommandName(StrEnum):
|
|
|
24
24
|
STOP = "stop"
|
|
25
25
|
STATUS = "status"
|
|
26
26
|
HELP = "help"
|
|
27
|
+
VERIFY_INDEX = "verify-index"
|
|
28
|
+
DIFF_INDEX = "diff-index"
|
|
27
29
|
|
|
28
30
|
|
|
29
31
|
APP_DESCRIPTION = (
|
|
@@ -380,6 +382,13 @@ HELP_QUERY_OUTPUT_FORMAT = "Format --ask-agent output as table or json."
|
|
|
380
382
|
HELP_MCP_TRANSPORT = "Transport to serve: stdio or http."
|
|
381
383
|
HELP_MCP_HTTP_HOST = "HTTP bind host. Used only with --transport http."
|
|
382
384
|
HELP_MCP_HTTP_PORT = "HTTP bind port. Used only with --transport http."
|
|
385
|
+
HELP_MCP_WORKSPACE = (
|
|
386
|
+
"Serve the projects of workspace NAME: `list_projects` shows them, a "
|
|
387
|
+
"`project` argument, when given, must name one (omitted, the server "
|
|
388
|
+
"takes the project rooted at its directory, or the workspace's only "
|
|
389
|
+
"one), and source is read from each repo's own root. Also read from the "
|
|
390
|
+
"MCP_WORKSPACE environment variable."
|
|
391
|
+
)
|
|
383
392
|
|
|
384
393
|
HELP_DEADCODE_PROJECT_NAME = (
|
|
385
394
|
"Project to scan. If omitted, cgr uses the only indexed project."
|
|
@@ -405,6 +414,15 @@ HELP_DEADCODE_CLASSES = (
|
|
|
405
414
|
)
|
|
406
415
|
HELP_DEADCODE_FORMAT = "Report format: table or json."
|
|
407
416
|
HELP_DEADCODE_OUTPUT = "Write the report to this file instead of stdout."
|
|
417
|
+
HELP_DEADCODE_ENDPOINT_ROOTS = (
|
|
418
|
+
"Treat a decorator-routed handler (FastAPI, Flask) as reachable by its "
|
|
419
|
+
"route decorator alone (default). With --no-endpoint-roots, such a "
|
|
420
|
+
"handler is live only if some indexed call site resolves to its endpoint "
|
|
421
|
+
"(RESOLVES_TO into it, or a direct READS_FROM/WRITES_TO for RPC and "
|
|
422
|
+
"dispatch resources), so an endpoint nobody calls is reported. A handler "
|
|
423
|
+
"registered by a call (Go HandleFunc, Express app.get) stays live "
|
|
424
|
+
"through that call."
|
|
425
|
+
)
|
|
408
426
|
HELP_DEADCODE_MIN_RESOLUTION = (
|
|
409
427
|
"Ignore call edges below this confidence when deciding liveness: "
|
|
410
428
|
"heuristic < overload < exact < trace_confirmed (dynamic counts as confirmed)."
|
|
@@ -448,6 +466,9 @@ HELP_DELETE_PROJECT_REPO_PATH = (
|
|
|
448
466
|
)
|
|
449
467
|
HELP_COMMAND = "Command path to document, such as 'start' or 'daemon logs'."
|
|
450
468
|
|
|
469
|
+
CMD_VERIFY_INDEX = "Verify a protobuf index against its provenance manifest"
|
|
470
|
+
CMD_DIFF_INDEX = "Structural diff between two protobuf index snapshots"
|
|
471
|
+
|
|
451
472
|
CLI_COMMANDS: dict[CLICommandName, str] = {
|
|
452
473
|
CLICommandName.START: CMD_START,
|
|
453
474
|
CLICommandName.OPTIMIZE: CMD_OPTIMIZE,
|
|
@@ -471,14 +492,14 @@ CLI_COMMANDS: dict[CLICommandName, str] = {
|
|
|
471
492
|
CLICommandName.STATUS: CMD_STATUS,
|
|
472
493
|
CLICommandName.DOCTOR: CMD_DOCTOR,
|
|
473
494
|
CLICommandName.HELP: CMD_HELP,
|
|
495
|
+
CLICommandName.VERIFY_INDEX: CMD_VERIFY_INDEX,
|
|
496
|
+
CLICommandName.DIFF_INDEX: CMD_DIFF_INDEX,
|
|
474
497
|
}
|
|
475
|
-
CMD_VERIFY_INDEX = "Verify a protobuf index against its provenance manifest"
|
|
476
498
|
HELP_VERIFY_INDEX_DIR = "Directory holding the index artifacts and manifest.json."
|
|
477
499
|
HELP_TRUSTED_MANIFEST_SHA = (
|
|
478
500
|
"Externally trusted sha256 of manifest.json (e.g. from an attestation); "
|
|
479
501
|
"anchors verification beyond local self-consistency."
|
|
480
502
|
)
|
|
481
|
-
CMD_DIFF_INDEX = "Structural diff between two protobuf index snapshots"
|
|
482
503
|
HELP_DIFF_OLD = "Directory holding the OLD snapshot artifacts."
|
|
483
504
|
HELP_DIFF_NEW = "Directory holding the NEW snapshot artifacts."
|
|
484
505
|
HELP_DIFF_JSON_OUT = "Write the JSON delta to FILE instead of stdout."
|
|
@@ -104,14 +104,36 @@ def format_missing_api_key_errors(
|
|
|
104
104
|
|
|
105
105
|
LOCAL_PROVIDERS = frozenset({cs.Provider.OLLAMA})
|
|
106
106
|
|
|
107
|
+
|
|
108
|
+
def normalised_credential(value: str | None) -> str | None:
|
|
109
|
+
"""A credential with surrounding whitespace removed, or None if it is blank
|
|
110
|
+
or the local-provider placeholder (`cs.DEFAULT_API_KEY`).
|
|
111
|
+
|
|
112
|
+
One rule for every source, a role's `api_key` and a provider variable
|
|
113
|
+
alike (#2119): the environment used to be read raw, so `" "` or `"ollama"`
|
|
114
|
+
there passed the start-up gate and failed later in the provider call.
|
|
115
|
+
"""
|
|
116
|
+
if value is None:
|
|
117
|
+
return None
|
|
118
|
+
stripped = value.strip()
|
|
119
|
+
if not stripped or stripped == cs.DEFAULT_API_KEY:
|
|
120
|
+
return None
|
|
121
|
+
return stripped
|
|
122
|
+
|
|
123
|
+
|
|
107
124
|
# The provider-owned variable `validate_api_key` accepts INSTEAD of the role's
|
|
108
125
|
# own `<ROLE>_API_KEY`. Module level so `cgr doctor` can name the same variable
|
|
109
126
|
# the gate reads rather than restating the rule and drifting from it (#1910).
|
|
110
|
-
#
|
|
127
|
+
#
|
|
128
|
+
# DERIVED from API_KEY_INFO rather than hand-kept, because a hand-kept subset is
|
|
129
|
+
# what #1913 was: it left out OpenAI and Google, so the gate refused a
|
|
130
|
+
# configuration naming the variable `format_missing_api_key_errors` had just
|
|
131
|
+
# told the user to export, and that the provider itself reads
|
|
132
|
+
# (`_resolve_api_key(api_key, cs.ENV_OPENAI_API_KEY)` at providers/base.py:181,
|
|
133
|
+
# and ENV_GOOGLE_API_KEY at :116). One table means the gate, the error message
|
|
134
|
+
# and `cgr doctor` cannot disagree about which variable counts.
|
|
111
135
|
PROVIDER_ENV_KEYS = {
|
|
112
|
-
|
|
113
|
-
cs.Provider.AZURE: cs.ENV_AZURE_API_KEY,
|
|
114
|
-
cs.Provider.MINIMAX: cs.ENV_MINIMAX_API_KEY,
|
|
136
|
+
provider: info["env_var"] for provider, info in API_KEY_INFO.items()
|
|
115
137
|
}
|
|
116
138
|
|
|
117
139
|
|
|
@@ -142,14 +164,10 @@ class ModelConfig:
|
|
|
142
164
|
provider_lower == cs.Provider.GOOGLE
|
|
143
165
|
and self.provider_type == cs.GoogleProviderType.VERTEX
|
|
144
166
|
)
|
|
145
|
-
or (env_key and os.environ.get(env_key))
|
|
167
|
+
or (env_key and normalised_credential(os.environ.get(env_key)))
|
|
146
168
|
):
|
|
147
169
|
return
|
|
148
|
-
if (
|
|
149
|
-
not self.api_key
|
|
150
|
-
or not self.api_key.strip()
|
|
151
|
-
or self.api_key == cs.DEFAULT_API_KEY
|
|
152
|
-
):
|
|
170
|
+
if normalised_credential(self.api_key) is None:
|
|
153
171
|
error_msg = format_missing_api_key_errors(self.provider, role)
|
|
154
172
|
raise ValueError(error_msg)
|
|
155
173
|
|
|
@@ -350,7 +368,10 @@ class AppConfig(BaseSettings):
|
|
|
350
368
|
FILE_FLUSH_INTERVAL: int = Field(default=500, gt=0)
|
|
351
369
|
|
|
352
370
|
CACHE_MAX_ENTRIES: int = 1000
|
|
371
|
+
# Measured in bytes of source the cached ASTs span (see ast_cache.py).
|
|
353
372
|
CACHE_MAX_MEMORY_MB: int = 500
|
|
373
|
+
# No longer read (the AST cache now evicts LRU until under its cap); kept
|
|
374
|
+
# so an existing .env that sets them still validates.
|
|
354
375
|
CACHE_EVICTION_DIVISOR: int = 10
|
|
355
376
|
CACHE_MEMORY_THRESHOLD_RATIO: float = 0.8
|
|
356
377
|
|
|
@@ -410,6 +431,14 @@ class AppConfig(BaseSettings):
|
|
|
410
431
|
|
|
411
432
|
QUIET: bool = Field(False, validation_alias="CGR_QUIET")
|
|
412
433
|
|
|
434
|
+
# Compaction discards old tool output to bound the context (#1500). It is
|
|
435
|
+
# on by default because an unbounded history eventually fails the request
|
|
436
|
+
# outright, but a mechanism that drops data must be declinable: set this
|
|
437
|
+
# false to keep every tool result and accept the ceiling.
|
|
438
|
+
CONTEXT_COMPACTION_ENABLED: bool = Field(
|
|
439
|
+
True, validation_alias="CGR_CONTEXT_COMPACTION_ENABLED"
|
|
440
|
+
)
|
|
441
|
+
|
|
413
442
|
CGR_CAPTURE: str = Field("", validation_alias="CGR_CAPTURE")
|
|
414
443
|
|
|
415
444
|
# Loopback by default: the StreamableHTTP endpoint has no built-in
|
|
@@ -428,6 +457,26 @@ class AppConfig(BaseSettings):
|
|
|
428
457
|
provider = getattr(self, f"{role_upper}_PROVIDER", None)
|
|
429
458
|
model = getattr(self, f"{role_upper}_MODEL", None)
|
|
430
459
|
|
|
460
|
+
# Half a role is a mistake, not a request for the default: falling
|
|
461
|
+
# back to Ollama here skipped the API-key gate (Ollama needs none) and
|
|
462
|
+
# then failed later as "Ollama not running" or quietly ran a small
|
|
463
|
+
# local model instead of the one the user asked for.
|
|
464
|
+
if bool(provider) != bool(model):
|
|
465
|
+
provider_var, model_var = f"{role_upper}_PROVIDER", f"{role_upper}_MODEL"
|
|
466
|
+
set_var, value, missing_var = (
|
|
467
|
+
(provider_var, provider, model_var)
|
|
468
|
+
if provider
|
|
469
|
+
else (model_var, model, provider_var)
|
|
470
|
+
)
|
|
471
|
+
raise ValueError(
|
|
472
|
+
ex.MODEL_ROLE_HALF_CONFIGURED.format(
|
|
473
|
+
set_var=set_var,
|
|
474
|
+
value=value,
|
|
475
|
+
missing_var=missing_var,
|
|
476
|
+
role=role_upper,
|
|
477
|
+
)
|
|
478
|
+
)
|
|
479
|
+
|
|
431
480
|
if provider and model:
|
|
432
481
|
return ModelConfig(
|
|
433
482
|
provider=provider.lower(),
|