code-graph-rag 0.0.770__tar.gz → 0.0.845__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.770/code_graph_rag.egg-info → code_graph_rag-0.0.845}/PKG-INFO +1 -1
- {code_graph_rag-0.0.770 → code_graph_rag-0.0.845}/README.md +6 -3
- {code_graph_rag-0.0.770 → code_graph_rag-0.0.845/code_graph_rag.egg-info}/PKG-INFO +1 -1
- {code_graph_rag-0.0.770 → code_graph_rag-0.0.845}/code_graph_rag.egg-info/SOURCES.txt +9 -0
- {code_graph_rag-0.0.770 → code_graph_rag-0.0.845}/codebase_rag/cli.py +14 -0
- {code_graph_rag-0.0.770 → code_graph_rag-0.0.845}/codebase_rag/cli_help.py +22 -0
- {code_graph_rag-0.0.770 → code_graph_rag-0.0.845}/codebase_rag/config.py +24 -0
- {code_graph_rag-0.0.770 → code_graph_rag-0.0.845}/codebase_rag/constants/ast_scala.py +14 -0
- {code_graph_rag-0.0.770 → code_graph_rag-0.0.845}/codebase_rag/constants/cli.py +58 -0
- {code_graph_rag-0.0.770 → code_graph_rag-0.0.845}/codebase_rag/constants/core.py +42 -0
- {code_graph_rag-0.0.770 → code_graph_rag-0.0.845}/codebase_rag/constants/duplicates.py +5 -0
- {code_graph_rag-0.0.770 → code_graph_rag-0.0.845}/codebase_rag/constants/graph.py +82 -4
- {code_graph_rag-0.0.770 → code_graph_rag-0.0.845}/codebase_rag/constants/lang_tooling.py +12 -0
- {code_graph_rag-0.0.770 → code_graph_rag-0.0.845}/codebase_rag/constants/languages.py +25 -1
- {code_graph_rag-0.0.770 → code_graph_rag-0.0.845}/codebase_rag/constants/mcp.py +14 -0
- {code_graph_rag-0.0.770 → code_graph_rag-0.0.845}/codebase_rag/constants/providers.py +46 -0
- code_graph_rag-0.0.845/codebase_rag/constants/security.py +842 -0
- code_graph_rag-0.0.845/codebase_rag/context_pruning.py +173 -0
- {code_graph_rag-0.0.770 → code_graph_rag-0.0.845}/codebase_rag/crash_correlation.py +287 -0
- code_graph_rag-0.0.845/codebase_rag/editing/__init__.py +50 -0
- code_graph_rag-0.0.845/codebase_rag/editing/cli.py +118 -0
- code_graph_rag-0.0.845/codebase_rag/editing/imports.py +470 -0
- code_graph_rag-0.0.845/codebase_rag/editing/patcher.py +377 -0
- code_graph_rag-0.0.845/codebase_rag/editing/transaction.py +644 -0
- {code_graph_rag-0.0.770 → code_graph_rag-0.0.845}/codebase_rag/exceptions.py +4 -0
- {code_graph_rag-0.0.770 → code_graph_rag-0.0.845}/codebase_rag/graph_updater.py +372 -50
- {code_graph_rag-0.0.770 → code_graph_rag-0.0.845}/codebase_rag/language_spec.py +31 -57
- {code_graph_rag-0.0.770 → code_graph_rag-0.0.845}/codebase_rag/logs.py +44 -5
- {code_graph_rag-0.0.770 → code_graph_rag-0.0.845}/codebase_rag/main.py +149 -7
- {code_graph_rag-0.0.770 → code_graph_rag-0.0.845}/codebase_rag/mcp/tools.py +258 -29
- {code_graph_rag-0.0.770 → code_graph_rag-0.0.845}/codebase_rag/models.py +5 -0
- {code_graph_rag-0.0.770 → code_graph_rag-0.0.845}/codebase_rag/parser_fingerprint.py +42 -1
- {code_graph_rag-0.0.770 → code_graph_rag-0.0.845}/codebase_rag/parser_loader.py +1 -0
- {code_graph_rag-0.0.770 → code_graph_rag-0.0.845}/codebase_rag/parsers/build_lock.py +66 -0
- {code_graph_rag-0.0.770 → code_graph_rag-0.0.845}/codebase_rag/parsers/call_processor.py +173 -50
- {code_graph_rag-0.0.770 → code_graph_rag-0.0.845}/codebase_rag/parsers/call_resolver.py +208 -10
- {code_graph_rag-0.0.770 → code_graph_rag-0.0.845}/codebase_rag/parsers/class_ingest/parent_extraction.py +103 -0
- {code_graph_rag-0.0.770 → code_graph_rag-0.0.845}/codebase_rag/parsers/cpp_frontend/qn.py +13 -49
- {code_graph_rag-0.0.770 → code_graph_rag-0.0.845}/codebase_rag/parsers/csharp_frontend/frontend.py +21 -26
- {code_graph_rag-0.0.770 → code_graph_rag-0.0.845}/codebase_rag/parsers/dart/utils.py +9 -7
- {code_graph_rag-0.0.770 → code_graph_rag-0.0.845}/codebase_rag/parsers/definition_processor.py +6 -8
- {code_graph_rag-0.0.770 → code_graph_rag-0.0.845}/codebase_rag/parsers/document_tier.py +199 -2
- {code_graph_rag-0.0.770 → code_graph_rag-0.0.845}/codebase_rag/parsers/flat_module.py +14 -9
- code_graph_rag-0.0.845/codebase_rag/parsers/frontend_mode.py +38 -0
- {code_graph_rag-0.0.770 → code_graph_rag-0.0.845}/codebase_rag/parsers/function_ingest.py +10 -1
- {code_graph_rag-0.0.770 → code_graph_rag-0.0.845}/codebase_rag/parsers/go_frontend/frontend.py +20 -25
- {code_graph_rag-0.0.770 → code_graph_rag-0.0.845}/codebase_rag/parsers/import_processor.py +398 -36
- {code_graph_rag-0.0.770 → code_graph_rag-0.0.845}/codebase_rag/parsers/java/variable_analyzer.py +37 -30
- {code_graph_rag-0.0.770 → code_graph_rag-0.0.845}/codebase_rag/parsers/java_frontend/frontend.py +17 -40
- {code_graph_rag-0.0.770 → code_graph_rag-0.0.845}/codebase_rag/parsers/java_lombok.py +1 -0
- {code_graph_rag-0.0.770 → code_graph_rag-0.0.845}/codebase_rag/parsers/py_frontend/frontend.py +9 -8
- {code_graph_rag-0.0.770 → code_graph_rag-0.0.845}/codebase_rag/parsers/stdlib_extractor.py +4 -0
- {code_graph_rag-0.0.770 → code_graph_rag-0.0.845}/codebase_rag/parsers/utils.py +64 -31
- {code_graph_rag-0.0.770 → code_graph_rag-0.0.845}/codebase_rag/providers/base.py +166 -23
- {code_graph_rag-0.0.770 → code_graph_rag-0.0.845}/codebase_rag/schema_builder.py +22 -1
- code_graph_rag-0.0.845/codebase_rag/schema_parse.py +129 -0
- {code_graph_rag-0.0.770 → code_graph_rag-0.0.845}/codebase_rag/schemas.py +4 -0
- {code_graph_rag-0.0.770 → code_graph_rag-0.0.845}/codebase_rag/services/anthropic_token_counter.py +26 -0
- {code_graph_rag-0.0.770 → code_graph_rag-0.0.845}/codebase_rag/services/graph_diff.py +20 -1
- {code_graph_rag-0.0.770 → code_graph_rag-0.0.845}/codebase_rag/services/protobuf_service.py +45 -36
- {code_graph_rag-0.0.770 → code_graph_rag-0.0.845}/codebase_rag/services/provenance.py +1 -0
- {code_graph_rag-0.0.770 → code_graph_rag-0.0.845}/codebase_rag/stack/manager.py +5 -0
- code_graph_rag-0.0.845/codebase_rag/tools/codebase_query.py +771 -0
- {code_graph_rag-0.0.770 → code_graph_rag-0.0.845}/codebase_rag/tools/duplicate_detection.py +1 -1
- code_graph_rag-0.0.845/codebase_rag/tools/graph_rerank.py +196 -0
- {code_graph_rag-0.0.770 → code_graph_rag-0.0.845}/codebase_rag/tools/health_checker.py +2 -0
- {code_graph_rag-0.0.770 → code_graph_rag-0.0.845}/codebase_rag/tools/language.py +4 -0
- code_graph_rag-0.0.845/codebase_rag/tools/shell_command.py +1705 -0
- {code_graph_rag-0.0.770 → code_graph_rag-0.0.845}/codebase_rag/tools/tool_descriptions.py +31 -2
- {code_graph_rag-0.0.770 → code_graph_rag-0.0.845}/codebase_rag/trace/cli.py +3 -0
- {code_graph_rag-0.0.770 → code_graph_rag-0.0.845}/codebase_rag/trace/instrumented.py +14 -2
- {code_graph_rag-0.0.770 → code_graph_rag-0.0.845}/codebase_rag/types_defs.py +40 -5
- {code_graph_rag-0.0.770 → code_graph_rag-0.0.845}/codebase_rag/utils/path_utils.py +123 -7
- {code_graph_rag-0.0.770 → code_graph_rag-0.0.845}/codebase_rag/vector_store.py +59 -59
- {code_graph_rag-0.0.770 → code_graph_rag-0.0.845}/codec/schema_pb2.py +36 -36
- {code_graph_rag-0.0.770 → code_graph_rag-0.0.845}/codec/schema_pb2.pyi +4 -2
- {code_graph_rag-0.0.770 → code_graph_rag-0.0.845}/pyproject.toml +25 -1
- code_graph_rag-0.0.770/codebase_rag/constants/security.py +0 -253
- code_graph_rag-0.0.770/codebase_rag/tools/codebase_query.py +0 -132
- code_graph_rag-0.0.770/codebase_rag/tools/shell_command.py +0 -768
- {code_graph_rag-0.0.770 → code_graph_rag-0.0.845}/LICENSE +0 -0
- {code_graph_rag-0.0.770 → code_graph_rag-0.0.845}/PYPI_README.md +0 -0
- {code_graph_rag-0.0.770 → code_graph_rag-0.0.845}/cgr/__init__.py +0 -0
- {code_graph_rag-0.0.770 → code_graph_rag-0.0.845}/code_graph_rag.egg-info/dependency_links.txt +0 -0
- {code_graph_rag-0.0.770 → code_graph_rag-0.0.845}/code_graph_rag.egg-info/entry_points.txt +0 -0
- {code_graph_rag-0.0.770 → code_graph_rag-0.0.845}/code_graph_rag.egg-info/requires.txt +0 -0
- {code_graph_rag-0.0.770 → code_graph_rag-0.0.845}/code_graph_rag.egg-info/top_level.txt +0 -0
- {code_graph_rag-0.0.770 → code_graph_rag-0.0.845}/codebase_rag/__init__.py +0 -0
- {code_graph_rag-0.0.770 → code_graph_rag-0.0.845}/codebase_rag/analyzers/__init__.py +0 -0
- {code_graph_rag-0.0.770 → code_graph_rag-0.0.845}/codebase_rag/analyzers/ast_grep_analyzer.py +0 -0
- {code_graph_rag-0.0.770 → code_graph_rag-0.0.845}/codebase_rag/analyzers/ast_grep_rules/patterns/c.yaml +0 -0
- {code_graph_rag-0.0.770 → code_graph_rag-0.0.845}/codebase_rag/analyzers/ast_grep_rules/patterns/cpp.yaml +0 -0
- {code_graph_rag-0.0.770 → code_graph_rag-0.0.845}/codebase_rag/analyzers/ast_grep_rules/patterns/csharp.yaml +0 -0
- {code_graph_rag-0.0.770 → code_graph_rag-0.0.845}/codebase_rag/analyzers/ast_grep_rules/patterns/dart.yaml +0 -0
- {code_graph_rag-0.0.770 → code_graph_rag-0.0.845}/codebase_rag/analyzers/ast_grep_rules/patterns/go.yaml +0 -0
- {code_graph_rag-0.0.770 → code_graph_rag-0.0.845}/codebase_rag/analyzers/ast_grep_rules/patterns/java.yaml +0 -0
- {code_graph_rag-0.0.770 → code_graph_rag-0.0.845}/codebase_rag/analyzers/ast_grep_rules/patterns/javascript.yaml +0 -0
- {code_graph_rag-0.0.770 → code_graph_rag-0.0.845}/codebase_rag/analyzers/ast_grep_rules/patterns/lua.yaml +0 -0
- {code_graph_rag-0.0.770 → code_graph_rag-0.0.845}/codebase_rag/analyzers/ast_grep_rules/patterns/php.yaml +0 -0
- {code_graph_rag-0.0.770 → code_graph_rag-0.0.845}/codebase_rag/analyzers/ast_grep_rules/patterns/python.yaml +0 -0
- {code_graph_rag-0.0.770 → code_graph_rag-0.0.845}/codebase_rag/analyzers/ast_grep_rules/patterns/ruby.yaml +0 -0
- {code_graph_rag-0.0.770 → code_graph_rag-0.0.845}/codebase_rag/analyzers/ast_grep_rules/patterns/rust.yaml +0 -0
- {code_graph_rag-0.0.770 → code_graph_rag-0.0.845}/codebase_rag/analyzers/ast_grep_rules/patterns/scala.yaml +0 -0
- {code_graph_rag-0.0.770 → code_graph_rag-0.0.845}/codebase_rag/analyzers/ast_grep_rules/patterns/tsx.yaml +0 -0
- {code_graph_rag-0.0.770 → code_graph_rag-0.0.845}/codebase_rag/analyzers/ast_grep_rules/patterns/typescript.yaml +0 -0
- {code_graph_rag-0.0.770 → code_graph_rag-0.0.845}/codebase_rag/analyzers/ast_grep_rules/security/c.yaml +0 -0
- {code_graph_rag-0.0.770 → code_graph_rag-0.0.845}/codebase_rag/analyzers/ast_grep_rules/security/cpp.yaml +0 -0
- {code_graph_rag-0.0.770 → code_graph_rag-0.0.845}/codebase_rag/analyzers/ast_grep_rules/security/csharp.yaml +0 -0
- {code_graph_rag-0.0.770 → code_graph_rag-0.0.845}/codebase_rag/analyzers/ast_grep_rules/security/dart.yaml +0 -0
- {code_graph_rag-0.0.770 → code_graph_rag-0.0.845}/codebase_rag/analyzers/ast_grep_rules/security/go.yaml +0 -0
- {code_graph_rag-0.0.770 → code_graph_rag-0.0.845}/codebase_rag/analyzers/ast_grep_rules/security/java.yaml +0 -0
- {code_graph_rag-0.0.770 → code_graph_rag-0.0.845}/codebase_rag/analyzers/ast_grep_rules/security/javascript.yaml +0 -0
- {code_graph_rag-0.0.770 → code_graph_rag-0.0.845}/codebase_rag/analyzers/ast_grep_rules/security/lua.yaml +0 -0
- {code_graph_rag-0.0.770 → code_graph_rag-0.0.845}/codebase_rag/analyzers/ast_grep_rules/security/php.yaml +0 -0
- {code_graph_rag-0.0.770 → code_graph_rag-0.0.845}/codebase_rag/analyzers/ast_grep_rules/security/python.yaml +0 -0
- {code_graph_rag-0.0.770 → code_graph_rag-0.0.845}/codebase_rag/analyzers/ast_grep_rules/security/ruby.yaml +0 -0
- {code_graph_rag-0.0.770 → code_graph_rag-0.0.845}/codebase_rag/analyzers/ast_grep_rules/security/rust.yaml +0 -0
- {code_graph_rag-0.0.770 → code_graph_rag-0.0.845}/codebase_rag/analyzers/ast_grep_rules/security/scala.yaml +0 -0
- {code_graph_rag-0.0.770 → code_graph_rag-0.0.845}/codebase_rag/analyzers/ast_grep_rules/security/tsx.yaml +0 -0
- {code_graph_rag-0.0.770 → code_graph_rag-0.0.845}/codebase_rag/analyzers/ast_grep_rules/security/typescript.yaml +0 -0
- {code_graph_rag-0.0.770 → code_graph_rag-0.0.845}/codebase_rag/analyzers/ast_grep_rules/smells/c.yaml +0 -0
- {code_graph_rag-0.0.770 → code_graph_rag-0.0.845}/codebase_rag/analyzers/ast_grep_rules/smells/cpp.yaml +0 -0
- {code_graph_rag-0.0.770 → code_graph_rag-0.0.845}/codebase_rag/analyzers/ast_grep_rules/smells/csharp.yaml +0 -0
- {code_graph_rag-0.0.770 → code_graph_rag-0.0.845}/codebase_rag/analyzers/ast_grep_rules/smells/dart.yaml +0 -0
- {code_graph_rag-0.0.770 → code_graph_rag-0.0.845}/codebase_rag/analyzers/ast_grep_rules/smells/go.yaml +0 -0
- {code_graph_rag-0.0.770 → code_graph_rag-0.0.845}/codebase_rag/analyzers/ast_grep_rules/smells/java.yaml +0 -0
- {code_graph_rag-0.0.770 → code_graph_rag-0.0.845}/codebase_rag/analyzers/ast_grep_rules/smells/javascript.yaml +0 -0
- {code_graph_rag-0.0.770 → code_graph_rag-0.0.845}/codebase_rag/analyzers/ast_grep_rules/smells/lua.yaml +0 -0
- {code_graph_rag-0.0.770 → code_graph_rag-0.0.845}/codebase_rag/analyzers/ast_grep_rules/smells/php.yaml +0 -0
- {code_graph_rag-0.0.770 → code_graph_rag-0.0.845}/codebase_rag/analyzers/ast_grep_rules/smells/python.yaml +0 -0
- {code_graph_rag-0.0.770 → code_graph_rag-0.0.845}/codebase_rag/analyzers/ast_grep_rules/smells/ruby.yaml +0 -0
- {code_graph_rag-0.0.770 → code_graph_rag-0.0.845}/codebase_rag/analyzers/ast_grep_rules/smells/rust.yaml +0 -0
- {code_graph_rag-0.0.770 → code_graph_rag-0.0.845}/codebase_rag/analyzers/ast_grep_rules/smells/scala.yaml +0 -0
- {code_graph_rag-0.0.770 → code_graph_rag-0.0.845}/codebase_rag/analyzers/ast_grep_rules/smells/tsx.yaml +0 -0
- {code_graph_rag-0.0.770 → code_graph_rag-0.0.845}/codebase_rag/analyzers/ast_grep_rules/smells/typescript.yaml +0 -0
- {code_graph_rag-0.0.770 → code_graph_rag-0.0.845}/codebase_rag/ast_cache.py +0 -0
- {code_graph_rag-0.0.770 → code_graph_rag-0.0.845}/codebase_rag/capture.py +0 -0
- {code_graph_rag-0.0.770 → code_graph_rag-0.0.845}/codebase_rag/cgr_state.py +0 -0
- {code_graph_rag-0.0.770 → code_graph_rag-0.0.845}/codebase_rag/constants/__init__.py +0 -0
- {code_graph_rag-0.0.770 → code_graph_rag-0.0.845}/codebase_rag/constants/ast_cpp.py +0 -0
- {code_graph_rag-0.0.770 → code_graph_rag-0.0.845}/codebase_rag/constants/ast_csharp.py +0 -0
- {code_graph_rag-0.0.770 → code_graph_rag-0.0.845}/codebase_rag/constants/ast_dart.py +0 -0
- {code_graph_rag-0.0.770 → code_graph_rag-0.0.845}/codebase_rag/constants/ast_go.py +0 -0
- {code_graph_rag-0.0.770 → code_graph_rag-0.0.845}/codebase_rag/constants/ast_java.py +0 -0
- {code_graph_rag-0.0.770 → code_graph_rag-0.0.845}/codebase_rag/constants/ast_js.py +0 -0
- {code_graph_rag-0.0.770 → code_graph_rag-0.0.845}/codebase_rag/constants/ast_lua.py +0 -0
- {code_graph_rag-0.0.770 → code_graph_rag-0.0.845}/codebase_rag/constants/ast_nodes.py +0 -0
- {code_graph_rag-0.0.770 → code_graph_rag-0.0.845}/codebase_rag/constants/ast_php.py +0 -0
- {code_graph_rag-0.0.770 → code_graph_rag-0.0.845}/codebase_rag/constants/ast_python.py +0 -0
- {code_graph_rag-0.0.770 → code_graph_rag-0.0.845}/codebase_rag/constants/ast_rust.py +0 -0
- {code_graph_rag-0.0.770 → code_graph_rag-0.0.845}/codebase_rag/constants/ast_sql.py +0 -0
- {code_graph_rag-0.0.770 → code_graph_rag-0.0.845}/codebase_rag/constants/build.py +0 -0
- {code_graph_rag-0.0.770 → code_graph_rag-0.0.845}/codebase_rag/constants/deadcode_roots.py +0 -0
- {code_graph_rag-0.0.770 → code_graph_rag-0.0.845}/codebase_rag/constants/deps.py +0 -0
- {code_graph_rag-0.0.770 → code_graph_rag-0.0.845}/codebase_rag/constants/fqn_specs.py +0 -0
- {code_graph_rag-0.0.770 → code_graph_rag-0.0.845}/codebase_rag/constants/health.py +0 -0
- {code_graph_rag-0.0.770 → code_graph_rag-0.0.845}/codebase_rag/constants/stdlib_types.py +0 -0
- {code_graph_rag-0.0.770 → code_graph_rag-0.0.845}/codebase_rag/constants/structural.py +0 -0
- {code_graph_rag-0.0.770 → code_graph_rag-0.0.845}/codebase_rag/constants/trace.py +0 -0
- {code_graph_rag-0.0.770 → code_graph_rag-0.0.845}/codebase_rag/cypher_queries.py +0 -0
- {code_graph_rag-0.0.770 → code_graph_rag-0.0.845}/codebase_rag/dead_code.py +0 -0
- {code_graph_rag-0.0.770 → code_graph_rag-0.0.845}/codebase_rag/decorators.py +0 -0
- {code_graph_rag-0.0.770 → code_graph_rag-0.0.845}/codebase_rag/docker-compose.yaml +0 -0
- {code_graph_rag-0.0.770 → code_graph_rag-0.0.845}/codebase_rag/duplicates.py +0 -0
- {code_graph_rag-0.0.770 → code_graph_rag-0.0.845}/codebase_rag/editor_links.py +0 -0
- {code_graph_rag-0.0.770 → code_graph_rag-0.0.845}/codebase_rag/embedder.py +0 -0
- {code_graph_rag-0.0.770 → code_graph_rag-0.0.845}/codebase_rag/flow_verdict.py +0 -0
- {code_graph_rag-0.0.770 → code_graph_rag-0.0.845}/codebase_rag/function_registry.py +0 -0
- {code_graph_rag-0.0.770 → code_graph_rag-0.0.845}/codebase_rag/graph_audit.py +0 -0
- {code_graph_rag-0.0.770 → code_graph_rag-0.0.845}/codebase_rag/graph_loader.py +0 -0
- {code_graph_rag-0.0.770 → code_graph_rag-0.0.845}/codebase_rag/mcp/__init__.py +0 -0
- {code_graph_rag-0.0.770 → code_graph_rag-0.0.845}/codebase_rag/mcp/client.py +0 -0
- {code_graph_rag-0.0.770 → code_graph_rag-0.0.845}/codebase_rag/mcp/server.py +0 -0
- {code_graph_rag-0.0.770 → code_graph_rag-0.0.845}/codebase_rag/parsers/__init__.py +0 -0
- {code_graph_rag-0.0.770 → code_graph_rag-0.0.845}/codebase_rag/parsers/ast_fingerprint.py +0 -0
- {code_graph_rag-0.0.770 → code_graph_rag-0.0.845}/codebase_rag/parsers/ast_grep_patterns/bash.yaml +0 -0
- {code_graph_rag-0.0.770 → code_graph_rag-0.0.845}/codebase_rag/parsers/ast_grep_patterns/elixir.yaml +0 -0
- {code_graph_rag-0.0.770 → code_graph_rag-0.0.845}/codebase_rag/parsers/ast_grep_patterns/haskell.yaml +0 -0
- {code_graph_rag-0.0.770 → code_graph_rag-0.0.845}/codebase_rag/parsers/ast_grep_patterns/kotlin.yaml +0 -0
- {code_graph_rag-0.0.770 → code_graph_rag-0.0.845}/codebase_rag/parsers/ast_grep_patterns/nix.yaml +0 -0
- {code_graph_rag-0.0.770 → code_graph_rag-0.0.845}/codebase_rag/parsers/ast_grep_patterns/ruby.yaml +0 -0
- {code_graph_rag-0.0.770 → code_graph_rag-0.0.845}/codebase_rag/parsers/ast_grep_patterns/solidity.yaml +0 -0
- {code_graph_rag-0.0.770 → code_graph_rag-0.0.845}/codebase_rag/parsers/ast_grep_patterns/swift.yaml +0 -0
- {code_graph_rag-0.0.770 → code_graph_rag-0.0.845}/codebase_rag/parsers/ast_grep_tier.py +0 -0
- {code_graph_rag-0.0.770 → code_graph_rag-0.0.845}/codebase_rag/parsers/class_ingest/__init__.py +0 -0
- {code_graph_rag-0.0.770 → code_graph_rag-0.0.845}/codebase_rag/parsers/class_ingest/cpp_modules.py +0 -0
- {code_graph_rag-0.0.770 → code_graph_rag-0.0.845}/codebase_rag/parsers/class_ingest/identity.py +0 -0
- {code_graph_rag-0.0.770 → code_graph_rag-0.0.845}/codebase_rag/parsers/class_ingest/method_override.py +0 -0
- {code_graph_rag-0.0.770 → code_graph_rag-0.0.845}/codebase_rag/parsers/class_ingest/mixin.py +0 -0
- {code_graph_rag-0.0.770 → code_graph_rag-0.0.845}/codebase_rag/parsers/class_ingest/node_type.py +0 -0
- {code_graph_rag-0.0.770 → code_graph_rag-0.0.845}/codebase_rag/parsers/class_ingest/relationships.py +0 -0
- {code_graph_rag-0.0.770 → code_graph_rag-0.0.845}/codebase_rag/parsers/class_ingest/utils.py +0 -0
- {code_graph_rag-0.0.770 → code_graph_rag-0.0.845}/codebase_rag/parsers/contract_linking.py +0 -0
- {code_graph_rag-0.0.770 → code_graph_rag-0.0.845}/codebase_rag/parsers/contracts.py +0 -0
- {code_graph_rag-0.0.770 → code_graph_rag-0.0.845}/codebase_rag/parsers/cpp/__init__.py +0 -0
- {code_graph_rag-0.0.770 → code_graph_rag-0.0.845}/codebase_rag/parsers/cpp/preproc_recovery.py +0 -0
- {code_graph_rag-0.0.770 → code_graph_rag-0.0.845}/codebase_rag/parsers/cpp/type_inference.py +0 -0
- {code_graph_rag-0.0.770 → code_graph_rag-0.0.845}/codebase_rag/parsers/cpp/utils.py +0 -0
- {code_graph_rag-0.0.770 → code_graph_rag-0.0.845}/codebase_rag/parsers/cpp_frontend/__init__.py +0 -0
- {code_graph_rag-0.0.770 → code_graph_rag-0.0.845}/codebase_rag/parsers/cpp_frontend/constants.py +0 -0
- {code_graph_rag-0.0.770 → code_graph_rag-0.0.845}/codebase_rag/parsers/cpp_frontend/frontend.py +0 -0
- {code_graph_rag-0.0.770 → code_graph_rag-0.0.845}/codebase_rag/parsers/csharp/__init__.py +0 -0
- {code_graph_rag-0.0.770 → code_graph_rag-0.0.845}/codebase_rag/parsers/csharp/type_inference.py +0 -0
- {code_graph_rag-0.0.770 → code_graph_rag-0.0.845}/codebase_rag/parsers/csharp/utils.py +0 -0
- {code_graph_rag-0.0.770 → code_graph_rag-0.0.845}/codebase_rag/parsers/csharp_frontend/__init__.py +0 -0
- {code_graph_rag-0.0.770 → code_graph_rag-0.0.845}/codebase_rag/parsers/csharp_frontend/roslyn/Frontend.cs +0 -0
- {code_graph_rag-0.0.770 → code_graph_rag-0.0.845}/codebase_rag/parsers/csharp_frontend/roslyn/Frontend.csproj +0 -0
- {code_graph_rag-0.0.770 → code_graph_rag-0.0.845}/codebase_rag/parsers/csharp_frontend/roslyn/Program.cs +0 -0
- {code_graph_rag-0.0.770 → code_graph_rag-0.0.845}/codebase_rag/parsers/dart/__init__.py +0 -0
- {code_graph_rag-0.0.770 → code_graph_rag-0.0.845}/codebase_rag/parsers/dart/type_inference.py +0 -0
- {code_graph_rag-0.0.770 → code_graph_rag-0.0.845}/codebase_rag/parsers/dependency_parser.py +0 -0
- {code_graph_rag-0.0.770 → code_graph_rag-0.0.845}/codebase_rag/parsers/dispatch_registry.py +0 -0
- {code_graph_rag-0.0.770 → code_graph_rag-0.0.845}/codebase_rag/parsers/endpoint_prefixes.py +0 -0
- {code_graph_rag-0.0.770 → code_graph_rag-0.0.845}/codebase_rag/parsers/endpoint_routes.py +0 -0
- {code_graph_rag-0.0.770 → code_graph_rag-0.0.845}/codebase_rag/parsers/endpoints.py +0 -0
- {code_graph_rag-0.0.770 → code_graph_rag-0.0.845}/codebase_rag/parsers/export_detection.py +0 -0
- {code_graph_rag-0.0.770 → code_graph_rag-0.0.845}/codebase_rag/parsers/factory.py +0 -0
- {code_graph_rag-0.0.770 → code_graph_rag-0.0.845}/codebase_rag/parsers/flow_access/__init__.py +0 -0
- {code_graph_rag-0.0.770 → code_graph_rag-0.0.845}/codebase_rag/parsers/flow_access/constants.py +0 -0
- {code_graph_rag-0.0.770 → code_graph_rag-0.0.845}/codebase_rag/parsers/flow_access/processor.py +0 -0
- {code_graph_rag-0.0.770 → code_graph_rag-0.0.845}/codebase_rag/parsers/frontends/__init__.py +0 -0
- {code_graph_rag-0.0.770 → code_graph_rag-0.0.845}/codebase_rag/parsers/frontends/cpp.py +0 -0
- {code_graph_rag-0.0.770 → code_graph_rag-0.0.845}/codebase_rag/parsers/frontends/csharp.py +0 -0
- {code_graph_rag-0.0.770 → code_graph_rag-0.0.845}/codebase_rag/parsers/frontends/go.py +0 -0
- {code_graph_rag-0.0.770 → code_graph_rag-0.0.845}/codebase_rag/parsers/frontends/java.py +0 -0
- {code_graph_rag-0.0.770 → code_graph_rag-0.0.845}/codebase_rag/parsers/frontends/protocol.py +0 -0
- {code_graph_rag-0.0.770 → code_graph_rag-0.0.845}/codebase_rag/parsers/frontends/python.py +0 -0
- {code_graph_rag-0.0.770 → code_graph_rag-0.0.845}/codebase_rag/parsers/frontends/registry.py +0 -0
- {code_graph_rag-0.0.770 → code_graph_rag-0.0.845}/codebase_rag/parsers/go/__init__.py +0 -0
- {code_graph_rag-0.0.770 → code_graph_rag-0.0.845}/codebase_rag/parsers/go/module_paths.py +0 -0
- {code_graph_rag-0.0.770 → code_graph_rag-0.0.845}/codebase_rag/parsers/go/type_inference.py +0 -0
- {code_graph_rag-0.0.770 → code_graph_rag-0.0.845}/codebase_rag/parsers/go/utils.py +0 -0
- {code_graph_rag-0.0.770 → code_graph_rag-0.0.845}/codebase_rag/parsers/go_frontend/__init__.py +0 -0
- {code_graph_rag-0.0.770 → code_graph_rag-0.0.845}/codebase_rag/parsers/go_frontend/gotypes/go.mod +0 -0
- {code_graph_rag-0.0.770 → code_graph_rag-0.0.845}/codebase_rag/parsers/go_frontend/gotypes/go.sum +0 -0
- {code_graph_rag-0.0.770 → code_graph_rag-0.0.845}/codebase_rag/parsers/go_frontend/gotypes/main.go +0 -0
- {code_graph_rag-0.0.770 → code_graph_rag-0.0.845}/codebase_rag/parsers/handlers/__init__.py +0 -0
- {code_graph_rag-0.0.770 → code_graph_rag-0.0.845}/codebase_rag/parsers/handlers/base.py +0 -0
- {code_graph_rag-0.0.770 → code_graph_rag-0.0.845}/codebase_rag/parsers/handlers/cpp.py +0 -0
- {code_graph_rag-0.0.770 → code_graph_rag-0.0.845}/codebase_rag/parsers/handlers/java.py +0 -0
- {code_graph_rag-0.0.770 → code_graph_rag-0.0.845}/codebase_rag/parsers/handlers/js_ts.py +0 -0
- {code_graph_rag-0.0.770 → code_graph_rag-0.0.845}/codebase_rag/parsers/handlers/lua.py +0 -0
- {code_graph_rag-0.0.770 → code_graph_rag-0.0.845}/codebase_rag/parsers/handlers/php.py +0 -0
- {code_graph_rag-0.0.770 → code_graph_rag-0.0.845}/codebase_rag/parsers/handlers/protocol.py +0 -0
- {code_graph_rag-0.0.770 → code_graph_rag-0.0.845}/codebase_rag/parsers/handlers/python.py +0 -0
- {code_graph_rag-0.0.770 → code_graph_rag-0.0.845}/codebase_rag/parsers/handlers/registry.py +0 -0
- {code_graph_rag-0.0.770 → code_graph_rag-0.0.845}/codebase_rag/parsers/handlers/rust.py +0 -0
- {code_graph_rag-0.0.770 → code_graph_rag-0.0.845}/codebase_rag/parsers/io_access/__init__.py +0 -0
- {code_graph_rag-0.0.770 → code_graph_rag-0.0.845}/codebase_rag/parsers/io_access/constants.py +0 -0
- {code_graph_rag-0.0.770 → code_graph_rag-0.0.845}/codebase_rag/parsers/io_access/descriptor.py +0 -0
- {code_graph_rag-0.0.770 → code_graph_rag-0.0.845}/codebase_rag/parsers/io_access/extract.py +0 -0
- {code_graph_rag-0.0.770 → code_graph_rag-0.0.845}/codebase_rag/parsers/io_access/models.py +0 -0
- {code_graph_rag-0.0.770 → code_graph_rag-0.0.845}/codebase_rag/parsers/io_access/processor.py +0 -0
- {code_graph_rag-0.0.770 → code_graph_rag-0.0.845}/codebase_rag/parsers/io_access/registry.py +0 -0
- {code_graph_rag-0.0.770 → code_graph_rag-0.0.845}/codebase_rag/parsers/java/__init__.py +0 -0
- {code_graph_rag-0.0.770 → code_graph_rag-0.0.845}/codebase_rag/parsers/java/method_resolver.py +0 -0
- {code_graph_rag-0.0.770 → code_graph_rag-0.0.845}/codebase_rag/parsers/java/type_inference.py +0 -0
- {code_graph_rag-0.0.770 → code_graph_rag-0.0.845}/codebase_rag/parsers/java/type_resolver.py +0 -0
- {code_graph_rag-0.0.770 → code_graph_rag-0.0.845}/codebase_rag/parsers/java/utils.py +0 -0
- {code_graph_rag-0.0.770 → code_graph_rag-0.0.845}/codebase_rag/parsers/java_frontend/__init__.py +0 -0
- {code_graph_rag-0.0.770 → code_graph_rag-0.0.845}/codebase_rag/parsers/java_frontend/javac/cgr/Frontend.java +0 -0
- {code_graph_rag-0.0.770 → code_graph_rag-0.0.845}/codebase_rag/parsers/java_generated.py +0 -0
- {code_graph_rag-0.0.770 → code_graph_rag-0.0.845}/codebase_rag/parsers/js_ts/__init__.py +0 -0
- {code_graph_rag-0.0.770 → code_graph_rag-0.0.845}/codebase_rag/parsers/js_ts/ingest.py +0 -0
- {code_graph_rag-0.0.770 → code_graph_rag-0.0.845}/codebase_rag/parsers/js_ts/module_paths.py +0 -0
- {code_graph_rag-0.0.770 → code_graph_rag-0.0.845}/codebase_rag/parsers/js_ts/module_system.py +0 -0
- {code_graph_rag-0.0.770 → code_graph_rag-0.0.845}/codebase_rag/parsers/js_ts/type_inference.py +0 -0
- {code_graph_rag-0.0.770 → code_graph_rag-0.0.845}/codebase_rag/parsers/js_ts/utils.py +0 -0
- {code_graph_rag-0.0.770 → code_graph_rag-0.0.845}/codebase_rag/parsers/lua/__init__.py +0 -0
- {code_graph_rag-0.0.770 → code_graph_rag-0.0.845}/codebase_rag/parsers/lua/type_inference.py +0 -0
- {code_graph_rag-0.0.770 → code_graph_rag-0.0.845}/codebase_rag/parsers/lua/utils.py +0 -0
- {code_graph_rag-0.0.770 → code_graph_rag-0.0.845}/codebase_rag/parsers/py/__init__.py +0 -0
- {code_graph_rag-0.0.770 → code_graph_rag-0.0.845}/codebase_rag/parsers/py/ast_analyzer.py +0 -0
- {code_graph_rag-0.0.770 → code_graph_rag-0.0.845}/codebase_rag/parsers/py/expression_analyzer.py +0 -0
- {code_graph_rag-0.0.770 → code_graph_rag-0.0.845}/codebase_rag/parsers/py/type_inference.py +0 -0
- {code_graph_rag-0.0.770 → code_graph_rag-0.0.845}/codebase_rag/parsers/py/utils.py +0 -0
- {code_graph_rag-0.0.770 → code_graph_rag-0.0.845}/codebase_rag/parsers/py/variable_analyzer.py +0 -0
- {code_graph_rag-0.0.770 → code_graph_rag-0.0.845}/codebase_rag/parsers/py_frontend/__init__.py +0 -0
- {code_graph_rag-0.0.770 → code_graph_rag-0.0.845}/codebase_rag/parsers/python_source_roots.py +0 -0
- {code_graph_rag-0.0.770 → code_graph_rag-0.0.845}/codebase_rag/parsers/rpc_exposure.py +0 -0
- {code_graph_rag-0.0.770 → code_graph_rag-0.0.845}/codebase_rag/parsers/rs/__init__.py +0 -0
- {code_graph_rag-0.0.770 → code_graph_rag-0.0.845}/codebase_rag/parsers/rs/type_inference.py +0 -0
- {code_graph_rag-0.0.770 → code_graph_rag-0.0.845}/codebase_rag/parsers/rs/utils.py +0 -0
- {code_graph_rag-0.0.770 → code_graph_rag-0.0.845}/codebase_rag/parsers/semantic_call_join.py +0 -0
- {code_graph_rag-0.0.770 → code_graph_rag-0.0.845}/codebase_rag/parsers/string_call.py +0 -0
- {code_graph_rag-0.0.770 → code_graph_rag-0.0.845}/codebase_rag/parsers/structure_processor.py +0 -0
- {code_graph_rag-0.0.770 → code_graph_rag-0.0.845}/codebase_rag/parsers/type_inference.py +0 -0
- {code_graph_rag-0.0.770 → code_graph_rag-0.0.845}/codebase_rag/path_filters.py +0 -0
- {code_graph_rag-0.0.770 → code_graph_rag-0.0.845}/codebase_rag/prompts.py +0 -0
- {code_graph_rag-0.0.770 → code_graph_rag-0.0.845}/codebase_rag/providers/__init__.py +0 -0
- {code_graph_rag-0.0.770 → code_graph_rag-0.0.845}/codebase_rag/providers/litellm.py +0 -0
- {code_graph_rag-0.0.770 → code_graph_rag-0.0.845}/codebase_rag/readme_sections.py +0 -0
- {code_graph_rag-0.0.770 → code_graph_rag-0.0.845}/codebase_rag/services/__init__.py +0 -0
- {code_graph_rag-0.0.770 → code_graph_rag-0.0.845}/codebase_rag/services/filtering.py +0 -0
- {code_graph_rag-0.0.770 → code_graph_rag-0.0.845}/codebase_rag/services/graph_service.py +0 -0
- {code_graph_rag-0.0.770 → code_graph_rag-0.0.845}/codebase_rag/services/llm.py +0 -0
- {code_graph_rag-0.0.770 → code_graph_rag-0.0.845}/codebase_rag/services/resource_cleanup.py +0 -0
- {code_graph_rag-0.0.770 → code_graph_rag-0.0.845}/codebase_rag/services/usage_cost.py +0 -0
- {code_graph_rag-0.0.770 → code_graph_rag-0.0.845}/codebase_rag/sql_names.py +0 -0
- {code_graph_rag-0.0.770 → code_graph_rag-0.0.845}/codebase_rag/stack/__init__.py +0 -0
- {code_graph_rag-0.0.770 → code_graph_rag-0.0.845}/codebase_rag/stack/cli.py +0 -0
- {code_graph_rag-0.0.770 → code_graph_rag-0.0.845}/codebase_rag/stack/constants.py +0 -0
- {code_graph_rag-0.0.770 → code_graph_rag-0.0.845}/codebase_rag/stack/health.py +0 -0
- {code_graph_rag-0.0.770 → code_graph_rag-0.0.845}/codebase_rag/taint.py +0 -0
- {code_graph_rag-0.0.770 → code_graph_rag-0.0.845}/codebase_rag/tool_errors.py +0 -0
- {code_graph_rag-0.0.770 → code_graph_rag-0.0.845}/codebase_rag/tools/__init__.py +0 -0
- {code_graph_rag-0.0.770 → code_graph_rag-0.0.845}/codebase_rag/tools/ast_grep_service.py +0 -0
- {code_graph_rag-0.0.770 → code_graph_rag-0.0.845}/codebase_rag/tools/code_retrieval.py +0 -0
- {code_graph_rag-0.0.770 → code_graph_rag-0.0.845}/codebase_rag/tools/directory_lister.py +0 -0
- {code_graph_rag-0.0.770 → code_graph_rag-0.0.845}/codebase_rag/tools/file_editor.py +0 -0
- {code_graph_rag-0.0.770 → code_graph_rag-0.0.845}/codebase_rag/tools/file_reader.py +0 -0
- {code_graph_rag-0.0.770 → code_graph_rag-0.0.845}/codebase_rag/tools/file_writer.py +0 -0
- {code_graph_rag-0.0.770 → code_graph_rag-0.0.845}/codebase_rag/tools/research.py +0 -0
- {code_graph_rag-0.0.770 → code_graph_rag-0.0.845}/codebase_rag/tools/semantic_search.py +0 -0
- {code_graph_rag-0.0.770 → code_graph_rag-0.0.845}/codebase_rag/tools/structural_editor.py +0 -0
- {code_graph_rag-0.0.770 → code_graph_rag-0.0.845}/codebase_rag/tools/structural_search.py +0 -0
- {code_graph_rag-0.0.770 → code_graph_rag-0.0.845}/codebase_rag/tools/web_search.py +0 -0
- {code_graph_rag-0.0.770 → code_graph_rag-0.0.845}/codebase_rag/trace/__init__.py +0 -0
- {code_graph_rag-0.0.770 → code_graph_rag-0.0.845}/codebase_rag/trace/cpuprofile.py +0 -0
- {code_graph_rag-0.0.770 → code_graph_rag-0.0.845}/codebase_rag/trace/ebpf_pprof.py +0 -0
- {code_graph_rag-0.0.770 → code_graph_rag-0.0.845}/codebase_rag/trace/ingest.py +0 -0
- {code_graph_rag-0.0.770 → code_graph_rag-0.0.845}/codebase_rag/trace/pprof.py +0 -0
- {code_graph_rag-0.0.770 → code_graph_rag-0.0.845}/codebase_rag/trace/pytest_plugin.py +0 -0
- {code_graph_rag-0.0.770 → code_graph_rag-0.0.845}/codebase_rag/trace/records.py +0 -0
- {code_graph_rag-0.0.770 → code_graph_rag-0.0.845}/codebase_rag/trace/resolution.py +0 -0
- {code_graph_rag-0.0.770 → code_graph_rag-0.0.845}/codebase_rag/trace/rust_pprof.py +0 -0
- {code_graph_rag-0.0.770 → code_graph_rag-0.0.845}/codebase_rag/trace/sourcemap.py +0 -0
- {code_graph_rag-0.0.770 → code_graph_rag-0.0.845}/codebase_rag/trace/speedscope.py +0 -0
- {code_graph_rag-0.0.770 → code_graph_rag-0.0.845}/codebase_rag/trace/tracer.py +0 -0
- {code_graph_rag-0.0.770 → code_graph_rag-0.0.845}/codebase_rag/trace/xdebug.py +0 -0
- {code_graph_rag-0.0.770 → code_graph_rag-0.0.845}/codebase_rag/unixcoder.py +0 -0
- {code_graph_rag-0.0.770 → code_graph_rag-0.0.845}/codebase_rag/utils/__init__.py +0 -0
- {code_graph_rag-0.0.770 → code_graph_rag-0.0.845}/codebase_rag/utils/dependencies.py +0 -0
- {code_graph_rag-0.0.770 → code_graph_rag-0.0.845}/codebase_rag/utils/fqn_resolver.py +0 -0
- {code_graph_rag-0.0.770 → code_graph_rag-0.0.845}/codebase_rag/utils/rich_markdown.py +0 -0
- {code_graph_rag-0.0.770 → code_graph_rag-0.0.845}/codebase_rag/utils/source_extraction.py +0 -0
- {code_graph_rag-0.0.770 → code_graph_rag-0.0.845}/codebase_rag/utils/token_utils.py +0 -0
- {code_graph_rag-0.0.770 → code_graph_rag-0.0.845}/codebase_rag/workspaces/__init__.py +0 -0
- {code_graph_rag-0.0.770 → code_graph_rag-0.0.845}/codebase_rag/workspaces/cli.py +0 -0
- {code_graph_rag-0.0.770 → code_graph_rag-0.0.845}/codebase_rag/workspaces/constants.py +0 -0
- {code_graph_rag-0.0.770 → code_graph_rag-0.0.845}/codebase_rag/workspaces/models.py +0 -0
- {code_graph_rag-0.0.770 → code_graph_rag-0.0.845}/codebase_rag/workspaces/storage.py +0 -0
- {code_graph_rag-0.0.770 → code_graph_rag-0.0.845}/codec/__init__.py +0 -0
- {code_graph_rag-0.0.770 → code_graph_rag-0.0.845}/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.845
|
|
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
|
|
@@ -51,9 +51,12 @@ 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
|
+
- **Index Consistency**: Ensure incremental deletes match clean index states.
|
|
55
|
+
- **Patch Reporting**: Distinguish between unverifiable and verified patches in reports.
|
|
56
|
+
- **Windows Teardown**: Clear the read-only bit when removing a temp repo for successful Windows teardown.
|
|
57
|
+
- **TypeScript Grading**: Grade TypeScript inheritance against the tsc oracle for improved accuracy.
|
|
58
|
+
- **Exclude Set Handling**: Record the exclusion set to ensure `--exclude` flags are correctly applied across runs.
|
|
59
|
+
- **MCP Indexing**: Honour `.cgrignore` and `.gitignore` in MCP index and update processes, matching the CLI.
|
|
57
60
|
<!-- /SECTION:latest_news -->
|
|
58
61
|
|
|
59
62
|
See [NEWS.md](NEWS.md) for the full history.
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: code-graph-rag
|
|
3
|
-
Version: 0.0.
|
|
3
|
+
Version: 0.0.845
|
|
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
|
|
@@ -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/context_pruning.py
|
|
19
20
|
codebase_rag/crash_correlation.py
|
|
20
21
|
codebase_rag/cypher_queries.py
|
|
21
22
|
codebase_rag/dead_code.py
|
|
@@ -40,6 +41,7 @@ codebase_rag/path_filters.py
|
|
|
40
41
|
codebase_rag/prompts.py
|
|
41
42
|
codebase_rag/readme_sections.py
|
|
42
43
|
codebase_rag/schema_builder.py
|
|
44
|
+
codebase_rag/schema_parse.py
|
|
43
45
|
codebase_rag/schemas.py
|
|
44
46
|
codebase_rag/sql_names.py
|
|
45
47
|
codebase_rag/taint.py
|
|
@@ -125,6 +127,11 @@ codebase_rag/constants/security.py
|
|
|
125
127
|
codebase_rag/constants/stdlib_types.py
|
|
126
128
|
codebase_rag/constants/structural.py
|
|
127
129
|
codebase_rag/constants/trace.py
|
|
130
|
+
codebase_rag/editing/__init__.py
|
|
131
|
+
codebase_rag/editing/cli.py
|
|
132
|
+
codebase_rag/editing/imports.py
|
|
133
|
+
codebase_rag/editing/patcher.py
|
|
134
|
+
codebase_rag/editing/transaction.py
|
|
128
135
|
codebase_rag/mcp/__init__.py
|
|
129
136
|
codebase_rag/mcp/client.py
|
|
130
137
|
codebase_rag/mcp/server.py
|
|
@@ -147,6 +154,7 @@ codebase_rag/parsers/endpoints.py
|
|
|
147
154
|
codebase_rag/parsers/export_detection.py
|
|
148
155
|
codebase_rag/parsers/factory.py
|
|
149
156
|
codebase_rag/parsers/flat_module.py
|
|
157
|
+
codebase_rag/parsers/frontend_mode.py
|
|
150
158
|
codebase_rag/parsers/function_ingest.py
|
|
151
159
|
codebase_rag/parsers/import_processor.py
|
|
152
160
|
codebase_rag/parsers/java_generated.py
|
|
@@ -289,6 +297,7 @@ codebase_rag/tools/duplicate_detection.py
|
|
|
289
297
|
codebase_rag/tools/file_editor.py
|
|
290
298
|
codebase_rag/tools/file_reader.py
|
|
291
299
|
codebase_rag/tools/file_writer.py
|
|
300
|
+
codebase_rag/tools/graph_rerank.py
|
|
292
301
|
codebase_rag/tools/health_checker.py
|
|
293
302
|
codebase_rag/tools/language.py
|
|
294
303
|
codebase_rag/tools/research.py
|
|
@@ -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 .editing.cli import cli as edits_cli
|
|
30
31
|
from .editor_links import (
|
|
31
32
|
EditorTemplateError,
|
|
32
33
|
diff_command,
|
|
@@ -405,6 +406,7 @@ def _delete_hash_cache(repo_path: Path) -> None:
|
|
|
405
406
|
cache_path.unlink(missing_ok=True)
|
|
406
407
|
(repo_path / cs.DIR_MTIMES_FILENAME).unlink(missing_ok=True)
|
|
407
408
|
(repo_path / cs.PARSER_FINGERPRINT_FILENAME).unlink(missing_ok=True)
|
|
409
|
+
(repo_path / cs.EXCLUSION_STATE_FILENAME).unlink(missing_ok=True)
|
|
408
410
|
|
|
409
411
|
|
|
410
412
|
def _resolve_and_validate_repo(repo_path: str | None) -> Path:
|
|
@@ -1076,6 +1078,18 @@ def trace_command(ctx: typer.Context) -> None:
|
|
|
1076
1078
|
_run_delegated_group(trace_cli, ctx)
|
|
1077
1079
|
|
|
1078
1080
|
|
|
1081
|
+
@app.command(
|
|
1082
|
+
name=ch.CLICommandName.EDITS,
|
|
1083
|
+
help=ch.CMD_EDITS,
|
|
1084
|
+
short_help=ch.CMD_EDITS,
|
|
1085
|
+
add_help_option=False,
|
|
1086
|
+
context_settings=_DELEGATED_GROUP_CONTEXT,
|
|
1087
|
+
rich_help_panel=ch.PANEL_GRAPH,
|
|
1088
|
+
)
|
|
1089
|
+
def edits_command(ctx: typer.Context) -> None:
|
|
1090
|
+
_run_delegated_group(edits_cli, ctx)
|
|
1091
|
+
|
|
1092
|
+
|
|
1079
1093
|
@app.command(
|
|
1080
1094
|
name=ch.CLICommandName.HELP,
|
|
1081
1095
|
help=ch.CMD_HELP,
|
|
@@ -17,6 +17,7 @@ class CLICommandName(StrEnum):
|
|
|
17
17
|
DAEMON = "daemon"
|
|
18
18
|
WORKSPACE = "workspace"
|
|
19
19
|
TRACE = "trace"
|
|
20
|
+
EDITS = "edits"
|
|
20
21
|
STOP = "stop"
|
|
21
22
|
STATUS = "status"
|
|
22
23
|
HELP = "help"
|
|
@@ -72,6 +73,26 @@ CMD_WORKSPACE_REMOVE_REPO = "Remove a repository from a workspace by path"
|
|
|
72
73
|
|
|
73
74
|
CMD_TRACE = "Ingest runtime call traces as dynamic CALLS edges"
|
|
74
75
|
CMD_TRACE_GROUP = CMD_TRACE
|
|
76
|
+
CMD_EDITS = (
|
|
77
|
+
"Show or undo recorded edit transactions (multi-file edits applied through cgr)."
|
|
78
|
+
)
|
|
79
|
+
CMD_EDITS_GROUP = CMD_EDITS
|
|
80
|
+
CMD_EDITS_SHOW = (
|
|
81
|
+
"List the last N recorded edit transactions, newest first, with their diffs."
|
|
82
|
+
)
|
|
83
|
+
CMD_EDITS_UNDO = "Reverse the last N recorded edit transactions, newest first; stops at the first file that changed since."
|
|
84
|
+
EPILOG_EDITS = "Run 'cgr help edits COMMAND' for command-specific help."
|
|
85
|
+
EXAMPLES_EDITS_SHOW = (
|
|
86
|
+
"Examples:\n cgr edits show\n cgr edits show -n 5 --repo-path ~/proj"
|
|
87
|
+
)
|
|
88
|
+
EXAMPLES_EDITS_UNDO = (
|
|
89
|
+
"Examples:\n cgr edits undo\n cgr edits undo -n 2 --repo-path ~/proj"
|
|
90
|
+
)
|
|
91
|
+
HELP_EDITS_COUNT = "How many transactions to show or undo."
|
|
92
|
+
HELP_EDITS_REPO_PATH = (
|
|
93
|
+
"Repository root holding .cgr-edit-history.json (default: current directory)."
|
|
94
|
+
)
|
|
95
|
+
HELP_EDITS_DIFF = "Print each transaction's unified diff."
|
|
75
96
|
CMD_TRACE_INGEST = "Resolve a trace file against a project and write dynamic edges"
|
|
76
97
|
CMD_TRACE_CONVERT = "Convert a V8 .cpuprofile (node --cpu-prof) to a trace file"
|
|
77
98
|
|
|
@@ -385,6 +406,7 @@ CLI_COMMANDS: dict[CLICommandName, str] = {
|
|
|
385
406
|
CLICommandName.LANGUAGE: CMD_LANGUAGE,
|
|
386
407
|
CLICommandName.DAEMON: CMD_DAEMON,
|
|
387
408
|
CLICommandName.TRACE: CMD_TRACE,
|
|
409
|
+
CLICommandName.EDITS: CMD_EDITS,
|
|
388
410
|
CLICommandName.WORKSPACE: CMD_WORKSPACE,
|
|
389
411
|
CLICommandName.STOP: CMD_STOP,
|
|
390
412
|
CLICommandName.STATUS: CMD_STATUS,
|
|
@@ -336,6 +336,30 @@ class AppConfig(BaseSettings):
|
|
|
336
336
|
CACHE_MEMORY_THRESHOLD_RATIO: float = 0.8
|
|
337
337
|
|
|
338
338
|
QUERY_RESULT_MAX_TOKENS: int = Field(default=16000, gt=0)
|
|
339
|
+
# The model's OUTPUT budget per request. Without it pydantic-ai falls back
|
|
340
|
+
# to the provider default, which on Anthropic is far below what current
|
|
341
|
+
# models support -- a long answer then fails with "Model token limit
|
|
342
|
+
# (provider default) exceeded before any response was generated" and the
|
|
343
|
+
# model never replies at all (issue #1498).
|
|
344
|
+
#
|
|
345
|
+
# Distinct from QUERY_RESULT_MAX_TOKENS above, which trims what goes IN.
|
|
346
|
+
# This bounds what comes back.
|
|
347
|
+
# 8192 rather than something larger: pydantic-ai forwards this value
|
|
348
|
+
# unchanged and exposes no per-model output cap to clamp against, so the
|
|
349
|
+
# default must fit the SMALLEST catalogued model or it breaks working
|
|
350
|
+
# configurations. `gemini-2.0-flash` caps output at 8192 and is
|
|
351
|
+
# selectable today; 16000 was rejected outright by it. This still fixes
|
|
352
|
+
# the reported crash, whose remedy is any value meaningfully above
|
|
353
|
+
# Anthropic's 4096 provider default.
|
|
354
|
+
#
|
|
355
|
+
# Raise it per-deployment when the chosen model allows more. A general
|
|
356
|
+
# clamping table over every model was rejected: it would need
|
|
357
|
+
# hand-maintaining and would silently go stale on every new release,
|
|
358
|
+
# capping a launch below what it supports. Retired snapshots are the
|
|
359
|
+
# exception -- their maxima are frozen -- so `LEGACY_MAX_OUTPUT_TOKENS`
|
|
360
|
+
# lowers this budget for those ids alone, leaving everything else at the
|
|
361
|
+
# configured value.
|
|
362
|
+
MODEL_MAX_TOKENS: int = Field(default=8192, gt=0)
|
|
339
363
|
QUERY_RESULT_ROW_CAP: int = Field(default=500, gt=0)
|
|
340
364
|
QUERY_MEMORY_LIMIT_MB: int = Field(default=4096, gt=0)
|
|
341
365
|
QUERY_TIMEOUT_S: float = Field(default=60.0, gt=0)
|
|
@@ -15,6 +15,20 @@ TS_SCALA_GENERIC_FUNCTION = TS_GENERIC_FUNCTION
|
|
|
15
15
|
TS_SCALA_FIELD_EXPRESSION = "field_expression"
|
|
16
16
|
TS_SCALA_INFIX_EXPRESSION = "infix_expression"
|
|
17
17
|
TS_SCALA_IMPORT_DECLARATION = "import_declaration"
|
|
18
|
+
# `import a.b.{C, D}` / `import a.b.{C => Alias}` / `import a.b._`
|
|
19
|
+
TS_SCALA_NAMESPACE_SELECTORS = "namespace_selectors"
|
|
20
|
+
TS_SCALA_ARROW_RENAMED_IDENTIFIER = "arrow_renamed_identifier"
|
|
21
|
+
TS_SCALA_NAMESPACE_WILDCARD = "namespace_wildcard"
|
|
22
|
+
# Scala 3 spells a rename `as`; Scala 2 spells it `=>`. Different node types.
|
|
23
|
+
TS_SCALA_AS_RENAMED_IDENTIFIER = "as_renamed_identifier"
|
|
24
|
+
TS_SCALA_IMPORT_KEYWORD = "import"
|
|
25
|
+
|
|
26
|
+
# Wrappers the grammar puts between an `extends` clause and the
|
|
27
|
+
# `type_identifier` naming the base. `type_arguments` is deliberately ABSENT:
|
|
28
|
+
# it also holds a type_identifier (the `Int` of `Service[Int]`), so descending
|
|
29
|
+
# into it would return the type ARGUMENT as the base class.
|
|
30
|
+
TS_SCALA_GENERIC_TYPE = "generic_type"
|
|
31
|
+
TS_SCALA_STABLE_TYPE_IDENTIFIER = "stable_type_identifier"
|
|
18
32
|
TS_SCALA_STRING = "string"
|
|
19
33
|
TS_SCALA_BLOCK = "block"
|
|
20
34
|
TS_SCALA_TEMPLATE_BODY = "template_body"
|
|
@@ -18,6 +18,8 @@ class KeyBinding(StrEnum):
|
|
|
18
18
|
ENTER = "enter"
|
|
19
19
|
CTRL_C = "c-c"
|
|
20
20
|
SHIFT_TAB = "s-tab"
|
|
21
|
+
UP = "up"
|
|
22
|
+
DOWN = "down"
|
|
21
23
|
|
|
22
24
|
|
|
23
25
|
class PermissionMode(StrEnum):
|
|
@@ -478,6 +480,54 @@ INTERACTIVE_BFS_MAX_DEPTH = 10
|
|
|
478
480
|
INTERACTIVE_DEFAULT_GROUP = "."
|
|
479
481
|
|
|
480
482
|
MSG_SURGICAL_SUCCESS = "Successfully applied surgical code replacement in: {path}"
|
|
483
|
+
# Span-preserving patchers (issue #1529).
|
|
484
|
+
PATCH_BAD_POSITION = "No such position: line {line}, column {col}"
|
|
485
|
+
PATCH_BAD_OFFSET = "Byte offset {offset} is outside the file"
|
|
486
|
+
PATCH_BAD_SPAN = "Span ({start}, {end}) is outside the file or reversed"
|
|
487
|
+
PATCH_OVERLAP = "Edit ({start}, {end}) overlaps an earlier edit in the same file"
|
|
488
|
+
PATCH_OUTSIDE_ROOT = "Path is outside the repository: {path}"
|
|
489
|
+
PATCH_NO_FILE = "No such file to patch: {path}"
|
|
490
|
+
PATCH_IDENTIFIER_MISMATCH = (
|
|
491
|
+
"{path}:{line}:{col} holds {found!r}, not the identifier {expected!r}"
|
|
492
|
+
)
|
|
493
|
+
PATCH_NOT_AN_IDENTIFIER = "{path}:{line}:{col} is not a whole identifier"
|
|
494
|
+
PATCH_PARSE_FAILED = "{path} no longer parses after the patch"
|
|
495
|
+
PATCH_FORMAT_DRIFT = "{path} applied, but {tool} would reformat it"
|
|
496
|
+
PATCH_OK = "{path}: {count} edit(s) applied"
|
|
497
|
+
# `parses is None` means no grammar was available, so the patch was checked
|
|
498
|
+
# by nothing. Reported apart from PATCH_OK because reporting both as OK is
|
|
499
|
+
# what turned an unverifiable write into an apparently verified one; the
|
|
500
|
+
# write itself is still allowed, since refusing would make edits a silent
|
|
501
|
+
# no-op on a base install where Rust and Go grammars are absent (#1580).
|
|
502
|
+
# The one wording for "checked by nothing", shared so the two messages that
|
|
503
|
+
# carry it cannot drift apart and a caller can match on either.
|
|
504
|
+
PATCH_UNVERIFIED_FRAGMENT = "unverified (no parser for it)"
|
|
505
|
+
PATCH_UNVERIFIED = "{path}: {count} edit(s) applied, " + PATCH_UNVERIFIED_FRAGMENT
|
|
506
|
+
# Both facts, because either alone is misleading here: drift on its own reads
|
|
507
|
+
# as "parsed fine, just reformat it", and a language with no grammar is
|
|
508
|
+
# exactly the case that also has a formatter installed (Rust, Go).
|
|
509
|
+
PATCH_UNVERIFIED_DRIFT = (
|
|
510
|
+
"{path}: {count} edit(s) applied, "
|
|
511
|
+
+ PATCH_UNVERIFIED_FRAGMENT
|
|
512
|
+
+ "; {tool} would also reformat it"
|
|
513
|
+
)
|
|
514
|
+
# Edit transactions (issue #1528).
|
|
515
|
+
EDIT_NOT_A_FILE = "Staged path is not a regular file: {path}"
|
|
516
|
+
EDIT_RESERVED_PATH = "Path is cgr state, not part of the tree: {path}"
|
|
517
|
+
EDIT_TRANSACTION_FINISHED = "This transaction has already been committed or rolled back"
|
|
518
|
+
EDIT_CONFLICT = "File changed since it was staged; transaction refused: {path}"
|
|
519
|
+
EDIT_NOTHING_STAGED = "Nothing staged; the working tree is untouched"
|
|
520
|
+
EDIT_VERIFICATION_FAILED = (
|
|
521
|
+
"Verification failed; the working tree is untouched: {reason}"
|
|
522
|
+
)
|
|
523
|
+
EDIT_VERIFIER_RAISED = "verifier raised {error!r}"
|
|
524
|
+
EDIT_VERIFIER_FALSE = "verifier returned False"
|
|
525
|
+
EDIT_APPLIED = "Applied {count} file(s)"
|
|
526
|
+
EDIT_UNDO_NONE = "No recorded edit transactions to undo"
|
|
527
|
+
EDIT_UNDO_DONE = "Undid transaction {tx} ({count} file(s))"
|
|
528
|
+
EDIT_UNDO_STOPPED = "Stopped at transaction {tx}: {reason}"
|
|
529
|
+
EDIT_SHOW_NONE = "No recorded edit transactions"
|
|
530
|
+
EDIT_SHOW_HEADER = "{tx} {at} {count} file(s) verification={ok}"
|
|
481
531
|
MSG_SURGICAL_FAILED = (
|
|
482
532
|
"Failed to apply surgical replacement in {path}. "
|
|
483
533
|
"Target code not found or patches failed."
|
|
@@ -487,6 +537,7 @@ GREP_SUGGESTION = " Use 'rg' instead of 'grep' for text searching."
|
|
|
487
537
|
|
|
488
538
|
QUERY_NOT_AVAILABLE = "N/A"
|
|
489
539
|
DICT_KEY_RESULTS = "results"
|
|
540
|
+
DICT_KEY_QUERY_USED = "query_used"
|
|
490
541
|
TIKTOKEN_ENCODING = "cl100k_base"
|
|
491
542
|
QUERY_SUMMARY_SUCCESS = "Successfully retrieved {count} item(s) from the graph."
|
|
492
543
|
QUERY_SUMMARY_TRUNCATED = (
|
|
@@ -497,6 +548,13 @@ QUERY_SUMMARY_TRANSLATION_FAILED = (
|
|
|
497
548
|
"I couldn't translate your request into a database query. Error: {error}"
|
|
498
549
|
)
|
|
499
550
|
QUERY_SUMMARY_DB_ERROR = "There was an error querying the database: {error}"
|
|
551
|
+
# Refused rather than answered unscoped: rows with no qualified name cannot
|
|
552
|
+
# be attributed to a project, so the requested scope cannot be honoured.
|
|
553
|
+
QUERY_SUMMARY_UNSCOPEABLE = (
|
|
554
|
+
"This query cannot be scoped to project {project!r}: it returns no "
|
|
555
|
+
"qualified name, so results cannot be attributed to a project. Ask for "
|
|
556
|
+
"the qualified name in the query."
|
|
557
|
+
)
|
|
500
558
|
QUERY_SUMMARY_TIMEOUT = (
|
|
501
559
|
"Query exceeded the {timeout:.1f}s timeout and was cancelled. "
|
|
502
560
|
"Avoid unbounded traversals; add depth bounds or use a graph-algorithm procedure."
|
|
@@ -18,6 +18,16 @@ ARG_DRY_RUN = "dry_run"
|
|
|
18
18
|
|
|
19
19
|
SEPARATOR_DOT = "."
|
|
20
20
|
SEPARATOR_SLASH = "/"
|
|
21
|
+
# Splits "provider:model" both in user-supplied settings and in the model
|
|
22
|
+
# names pydantic-ai enumerates.
|
|
23
|
+
MODEL_STRING_SEPARATOR = ":"
|
|
24
|
+
# `derive_project_name` builds "<name>__<8-hex-digest>", so this marker is
|
|
25
|
+
# what distinguishes a project-qualified name from free text that merely
|
|
26
|
+
# contains dots (a docstring, a file path).
|
|
27
|
+
PROJECT_NAME_DIGEST_MARKER = "__"
|
|
28
|
+
# Hex digits after the marker. Shared so `derive_project_name` and the
|
|
29
|
+
# scoping filter that recognises its output cannot drift apart.
|
|
30
|
+
PROJECT_NAME_DIGEST_LEN = 8
|
|
21
31
|
# Disambiguates definitions that share one qualified name (if/else import
|
|
22
32
|
# fallbacks, typing.overload, try/except fallbacks): "<qn>@<start_line>".
|
|
23
33
|
DUP_QN_MARKER = "@"
|
|
@@ -119,14 +129,46 @@ HASH_CACHE_FILENAME = ".cgr-hash-cache.json"
|
|
|
119
129
|
DIR_MTIMES_FILENAME = ".cgr-dir-mtimes.json"
|
|
120
130
|
PARSER_FINGERPRINT_FILENAME = ".cgr-parser-fingerprint"
|
|
121
131
|
DELOMBOK_STATE_FILENAME = ".cgr-delombok-state.json"
|
|
132
|
+
# The exclusion set the last run indexed under, covering both the excludes and
|
|
133
|
+
# the unignores (which come from `!` lines in .cgrignore/.gitignore and from
|
|
134
|
+
# interactive setup; there is no --unignore flag). Nothing on disk changes when
|
|
135
|
+
# only the CLI --exclude flags do, so without this the sync check cannot tell
|
|
136
|
+
# that the eligible set moved (issue #1606).
|
|
137
|
+
EXCLUSION_STATE_FILENAME = ".cgr-exclusion-state.json"
|
|
138
|
+
# Recorded edit transactions for `cgr edits show|undo` (issue #1528).
|
|
139
|
+
EDIT_HISTORY_FILENAME = ".cgr-edit-history.json"
|
|
140
|
+
EDIT_LOCK_FILENAME = ".cgr-edit-lock"
|
|
141
|
+
PLATFORM_WINDOWS = "win32"
|
|
142
|
+
# Permission bits copied onto a replacement file (rwx for u/g/o, setuid etc.).
|
|
143
|
+
EDIT_MODE_MASK = 0o7777
|
|
144
|
+
# Mode of the exclusively created temp sibling before the target's mode is
|
|
145
|
+
# copied onto it: owner-only, so nothing reads staged bytes mid-write.
|
|
146
|
+
EDIT_TEMP_FILE_MODE = 0o600
|
|
122
147
|
CGR_STATE_FILENAMES: frozenset[str] = frozenset(
|
|
123
148
|
{
|
|
124
149
|
HASH_CACHE_FILENAME,
|
|
125
150
|
DIR_MTIMES_FILENAME,
|
|
126
151
|
PARSER_FINGERPRINT_FILENAME,
|
|
127
152
|
DELOMBOK_STATE_FILENAME,
|
|
153
|
+
EXCLUSION_STATE_FILENAME,
|
|
154
|
+
EDIT_HISTORY_FILENAME,
|
|
155
|
+
EDIT_LOCK_FILENAME,
|
|
128
156
|
}
|
|
129
157
|
)
|
|
158
|
+
# Edit transactions (issue #1528).
|
|
159
|
+
EDIT_HISTORY_LIMIT = 50
|
|
160
|
+
EDIT_TRANSACTION_ID_LENGTH = 12
|
|
161
|
+
EDIT_STAGING_PREFIX = "cgr-edit-"
|
|
162
|
+
DIFF_DEV_NULL = "/dev/null"
|
|
163
|
+
EDIT_KEY_ID = "id"
|
|
164
|
+
EDIT_KEY_AT = "at"
|
|
165
|
+
EDIT_KEY_FILES = "files"
|
|
166
|
+
EDIT_KEY_BEFORE = "before"
|
|
167
|
+
EDIT_KEY_AFTER = "after"
|
|
168
|
+
EDIT_KEY_VERIFICATION = "verification"
|
|
169
|
+
EDIT_KEY_OK = "ok"
|
|
170
|
+
EDIT_KEY_MESSAGE = "message"
|
|
171
|
+
EDIT_KEY_MODE = "mode"
|
|
130
172
|
|
|
131
173
|
# Inputs to the parser fingerprint: everything that changes how source files
|
|
132
174
|
# become graph nodes and edges, plus the installed grammar wheels. Paths are
|
|
@@ -90,6 +90,11 @@ AST_FP_DIGEST_SIZE = 8
|
|
|
90
90
|
# Analysis defaults (CLI/tool overridable).
|
|
91
91
|
DUPLICATES_DEFAULT_THRESHOLD = 0.8
|
|
92
92
|
DUPLICATES_DEFAULT_MIN_NODES = 15
|
|
93
|
+
# Reported groups, largest first. Named rather than inlined because the CLI
|
|
94
|
+
# tool and the MCP tool must default alike: parity means the same call gives
|
|
95
|
+
# the same answer on both surfaces (issue #1342), which two literals agreeing
|
|
96
|
+
# today would not guarantee tomorrow.
|
|
97
|
+
DUPLICATES_DEFAULT_GROUP_LIMIT = 20
|
|
93
98
|
# Candidate generation is exact prefix filtering (AllPairs/PPJoin): each
|
|
94
99
|
# function is indexed only under its rarest prefix branches, sized so any
|
|
95
100
|
# pair clearing the Jaccard threshold is guaranteed to co-occur in a posting
|
|
@@ -35,6 +35,29 @@ KEY_START_COL = "start_col"
|
|
|
35
35
|
KEY_NAME_START_LINE = "name_start_line"
|
|
36
36
|
KEY_NAME_START_COL = "name_start_col"
|
|
37
37
|
KEY_END_LINE = "end_line"
|
|
38
|
+
# Edge-site location properties (issue #1522). Every CALLS / REFERENCES /
|
|
39
|
+
# INSTANTIATES edge records the span of the expression that produced it, and
|
|
40
|
+
# every IMPORTS edge the span of its import statement, so a consumer can jump
|
|
41
|
+
# to, verify, or rewrite the exact site. Lines are 1-based and columns 0-based,
|
|
42
|
+
# matching the node `start_line` / `start_col` convention. Sites are stored as
|
|
43
|
+
# ONE EDGE PER SITE: the site props join the MERGE key (see
|
|
44
|
+
# MERGE_KEY_PROPS_BY_REL), so a caller invoking one callee twice carries two
|
|
45
|
+
# parallel edges. Edges emitted without a site (libclang macro uses, Roslyn
|
|
46
|
+
# facts, dynamic-trace write-back, inferred C# namespace imports) carry none of
|
|
47
|
+
# these keys and keep collapsing on their endpoints.
|
|
48
|
+
KEY_LINE = "line"
|
|
49
|
+
KEY_COL = "col"
|
|
50
|
+
KEY_END_COL = "end_col"
|
|
51
|
+
KEY_ARG_COUNT = "arg_count"
|
|
52
|
+
KEY_KWARG_NAMES = "kwarg_names"
|
|
53
|
+
# IMPORTS only: the name the statement binds in the importing scope (the
|
|
54
|
+
# `as` name when renamed, else the imported/module name) and, for
|
|
55
|
+
# symbol-level imports (`from x import y`, `import { y }`, `use a::b::y`),
|
|
56
|
+
# the symbol's own name. A whole-module import has no `imported_name`.
|
|
57
|
+
KEY_ALIAS = "alias"
|
|
58
|
+
KEY_IMPORTED_NAME = "imported_name"
|
|
59
|
+
# `imported_name` of a wildcard import (`from x import *`, `export * from`).
|
|
60
|
+
IMPORTED_NAME_WILDCARD = "*"
|
|
38
61
|
KEY_PATH = "path"
|
|
39
62
|
KEY_ABSOLUTE_PATH = "absolute_path"
|
|
40
63
|
# Whether flow analysis covered a Module: its language is in the source/sink
|
|
@@ -348,7 +371,19 @@ SCHEMA_OPTIONAL_SUFFIX = "?"
|
|
|
348
371
|
NODE_PROJECT = NodeLabel.PROJECT
|
|
349
372
|
|
|
350
373
|
KEY_PARAMETERS = "parameters"
|
|
374
|
+
# Declared Markdown front-matter, as sorted "key=value" entries (issue #1448).
|
|
375
|
+
KEY_FRONT_MATTER = "front_matter"
|
|
351
376
|
KEY_DECORATORS = "decorators"
|
|
377
|
+
# Declared POSITIONAL parameter names of a Python function, receiver included,
|
|
378
|
+
# for arity-TypeError diagnosis (issue #227). Positional-only because CPython's
|
|
379
|
+
# "takes N positional arguments" counts nothing after `*`/`*args`, and
|
|
380
|
+
# receiver-inclusive because it counts the bound `self`.
|
|
381
|
+
#
|
|
382
|
+
# Absent on every other language rather than empty: absent means "kinds
|
|
383
|
+
# unknown", which `diagnose_arity` answers with "cannot corroborate", whereas
|
|
384
|
+
# an empty list would assert "declares zero positional parameters" and produce
|
|
385
|
+
# a false mismatch on correct code.
|
|
386
|
+
KEY_POSITIONAL_PARAMS = "positional_params"
|
|
352
387
|
# Target-module qn candidates of `#[cfg(test)] mod NAME;` declarations in a
|
|
353
388
|
# Rust file, stored on the DECLARING module's node (issue #1010). The
|
|
354
389
|
# ungated counterpart lets a production target's declaration of the SAME
|
|
@@ -408,6 +443,7 @@ CYPHER_DELETE_MODULE = (
|
|
|
408
443
|
# projects, and a path-only delete would take the sibling's node (issue #897).
|
|
409
444
|
CYPHER_DELETE_FILE = "MATCH (f:File {absolute_path: $path}) DETACH DELETE f"
|
|
410
445
|
CYPHER_DELETE_FOLDER = "MATCH (f:Folder {absolute_path: $path}) DETACH DELETE f"
|
|
446
|
+
CYPHER_DELETE_PACKAGE = "MATCH (p:Package {absolute_path: $path}) DETACH DELETE p"
|
|
411
447
|
CYPHER_DELETE_CALLS = "MATCH ()-[r:CALLS]->() DELETE r"
|
|
412
448
|
# Removes external import-target Module nodes that no module imports anymore
|
|
413
449
|
# (e.g. an imported name that was renamed/removed on an incremental rebuild).
|
|
@@ -452,6 +488,13 @@ CYPHER_ALL_MODULE_PATHS_INTERNAL = (
|
|
|
452
488
|
CYPHER_ALL_FOLDER_PATHS = (
|
|
453
489
|
"MATCH (f:Folder) RETURN f.path AS path, f.absolute_path AS absolute_path"
|
|
454
490
|
)
|
|
491
|
+
# Package nodes are pruned against the CURRENT structure, not the disk: a
|
|
492
|
+
# directory whose indicator file (__init__.py, Cargo.toml, ...) went away
|
|
493
|
+
# still exists, as a Folder (issue #1570).
|
|
494
|
+
CYPHER_ALL_PACKAGE_PATHS = (
|
|
495
|
+
"MATCH (p:Package) RETURN p.path AS path, p.absolute_path AS absolute_path, "
|
|
496
|
+
"p.qualified_name AS qualified_name"
|
|
497
|
+
)
|
|
455
498
|
|
|
456
499
|
# Rehydrate the in-memory function registry on an incremental run: returns
|
|
457
500
|
# every definition node's qualified name and label so call/instantiation
|
|
@@ -483,21 +526,48 @@ CYPHER_ALL_MODULE_QNS = (
|
|
|
483
526
|
# Re-resolving the callers instead would diverge from a clean index, because
|
|
484
527
|
# cgr's call resolution is context-sensitive (protocol vs concrete receiver,
|
|
485
528
|
# import granularity); the original edges already match a clean re-index.
|
|
529
|
+
#
|
|
530
|
+
# The STRUCTURE of this query and of CYPHER_AFFECTED_CALLER_PATHS below is not
|
|
531
|
+
# covered by the unit suite, only their relation lists are. The eval emulator
|
|
532
|
+
# (evals/cgr_graph.py) matches these constants whole, in a `case` that compares
|
|
533
|
+
# the query by VALUE, and never parses the Cypher: it reimplements the
|
|
534
|
+
# semantics in Python over its own frozensets. So an edit to the text here is
|
|
535
|
+
# followed automatically by the `case` while the emulator's behaviour stays
|
|
536
|
+
# hardcoded, and a structural edit keeps every unit test green while breaking
|
|
537
|
+
# production. Measured 2026-08-30: flipping the arrow here to
|
|
538
|
+
# `(caller)<-[r:...]-(target)` left all of test_incremental_implements_edge.py
|
|
539
|
+
# passing (7 passed), and deleting the `caller.path` guard from
|
|
540
|
+
# CYPHER_AFFECTED_CALLER_PATHS left 16 passed across `pytest
|
|
541
|
+
# test_incremental_implements_edge.py test_graph_updater_incremental_rename.py
|
|
542
|
+
# test_cacheless_lookup_failure.py`. Both queries do reach a real backend,
|
|
543
|
+
# via `ingestor.fetch_all` in graph_updater.py (the affected-caller read and
|
|
544
|
+
# `_capture_inbound_edges`), so such an edit ships a broken incremental
|
|
545
|
+
# restore. Verify a change to the MATCH shape or the WHERE clauses against a
|
|
546
|
+
# real graph (the Docker-backed integration tier), not against a green unit
|
|
547
|
+
# run. Two edits the unit suite DOES catch: adding or removing a relation
|
|
548
|
+
# type, and renaming this query's `props` key (test_edge_site_properties.py).
|
|
549
|
+
# CYPHER_AFFECTED_CALLER_PATHS' `caller_path` projection IS pinned, expression
|
|
550
|
+
# and alias both, by test_incremental_implements_edge.py; its other RETURN
|
|
551
|
+
# aliases are not.
|
|
486
552
|
CYPHER_INBOUND_EDGES = (
|
|
487
|
-
"MATCH (caller)-[r:CALLS|REFERENCES|INSTANTIATES|IMPORTS|INHERITS|OVERRIDES]->(target) "
|
|
553
|
+
"MATCH (caller)-[r:CALLS|REFERENCES|INSTANTIATES|IMPORTS|INHERITS|IMPLEMENTS|OVERRIDES]->(target) "
|
|
488
554
|
"WHERE target.path IN $paths AND caller.qualified_name IS NOT NULL "
|
|
489
555
|
"AND (caller.path IS NULL OR NOT caller.path IN $paths) "
|
|
490
556
|
"RETURN head(labels(caller)) AS caller_label, "
|
|
491
557
|
"caller.qualified_name AS caller_qn, type(r) AS rel, "
|
|
492
|
-
"head(labels(target)) AS target_label, target.qualified_name AS target_qn"
|
|
558
|
+
"head(labels(target)) AS target_label, target.qualified_name AS target_qn, "
|
|
559
|
+
"properties(r) AS props"
|
|
493
560
|
)
|
|
494
561
|
# Files whose code DEPENDS on a re-indexed file (issue #1229 phase 4): a
|
|
495
562
|
# change there can rebind their calls (a new override shadowing an inherited
|
|
496
563
|
# method), so restoring their old edges verbatim would freeze a stale
|
|
497
564
|
# binding. They are re-parsed instead, one level deep: their own definitions
|
|
498
|
-
# are unchanged, so their callers' bindings cannot move.
|
|
565
|
+
# are unchanged, so their callers' bindings cannot move. IMPLEMENTS counts
|
|
566
|
+
# like INHERITS: an implementor in the same package holds no import edge into
|
|
567
|
+
# its interface's file, and without this it was neither re-parsed nor
|
|
568
|
+
# restored when that file was re-indexed (issue #1565).
|
|
499
569
|
CYPHER_AFFECTED_CALLER_PATHS = (
|
|
500
|
-
"MATCH (caller)-[:CALLS|REFERENCES|INSTANTIATES|IMPORTS|INHERITS]->(target) "
|
|
570
|
+
"MATCH (caller)-[:CALLS|REFERENCES|INSTANTIATES|IMPORTS|INHERITS|IMPLEMENTS]->(target) "
|
|
501
571
|
"WHERE target.path IN $paths AND caller.path IS NOT NULL "
|
|
502
572
|
"AND NOT caller.path IN $paths "
|
|
503
573
|
"AND caller.qualified_name STARTS WITH $project_prefix "
|
|
@@ -581,6 +651,14 @@ REL_TYPE_CALLS = "CALLS"
|
|
|
581
651
|
# still dedups on endpoints.
|
|
582
652
|
MERGE_KEY_PROPS_BY_REL: dict[str, tuple[str, ...]] = {
|
|
583
653
|
RelationshipType.FLOWS_TO.value: ("via", "kind"),
|
|
654
|
+
# One edge per call/reference/instantiation site (issue #1522); a row
|
|
655
|
+
# without a site still merges on its endpoints alone.
|
|
656
|
+
RelationshipType.CALLS.value: (KEY_LINE, KEY_COL),
|
|
657
|
+
RelationshipType.REFERENCES.value: (KEY_LINE, KEY_COL),
|
|
658
|
+
RelationshipType.INSTANTIATES.value: (KEY_LINE, KEY_COL),
|
|
659
|
+
# One edge per bound name: `from x import a, b` shares a statement span
|
|
660
|
+
# but binds two names, each its own edge.
|
|
661
|
+
RelationshipType.IMPORTS.value: (KEY_LINE, KEY_COL, KEY_ALIAS),
|
|
584
662
|
}
|
|
585
663
|
|
|
586
664
|
NODE_UNIQUE_CONSTRAINTS: dict[str, str] = {
|
|
@@ -150,6 +150,18 @@ LANG_TABLE_PLACEHOLDER = "—"
|
|
|
150
150
|
|
|
151
151
|
LANG_MSG_AVAILABLE_NODES = "Available nodes for mapping:"
|
|
152
152
|
LANG_ELLIPSIS = "..."
|
|
153
|
+
# Span-preserving patchers (issue #1529): formatter checks and the identifier
|
|
154
|
+
# node types a rename may target beyond the shared `identifier` family.
|
|
155
|
+
PATCH_GOFMT = "gofmt"
|
|
156
|
+
PATCH_GOFMT_LIST_FLAG = "-l"
|
|
157
|
+
PATCH_RUSTFMT = "rustfmt"
|
|
158
|
+
PATCH_RUSTFMT_CHECK_FLAG = "--check"
|
|
159
|
+
PATCH_RUSTFMT_EDITION_FLAG = "--edition"
|
|
160
|
+
PATCH_RUSTFMT_EDITION = "2021"
|
|
161
|
+
PATCH_FORMATTER_TIMEOUT_S = 60
|
|
162
|
+
PATCH_TS_FIELD_IDENTIFIER = "field_identifier"
|
|
163
|
+
PATCH_TS_NAMESPACE_IDENTIFIER = "namespace_identifier"
|
|
164
|
+
PATCH_TS_STATEMENT_IDENTIFIER = "statement_identifier"
|
|
153
165
|
LANG_GIT_SUFFIX = ".git"
|
|
154
166
|
LANG_GITMODULES_FILE = ".gitmodules"
|
|
155
167
|
LANG_CALL_KEYWORD_EXCLUDE = "call"
|
|
@@ -445,9 +445,33 @@ IGNORE_PATTERNS = frozenset(
|
|
|
445
445
|
"venv",
|
|
446
446
|
}
|
|
447
447
|
)
|
|
448
|
+
# Machine-generated artefacts: never hand-edited, never first-party. Matched
|
|
449
|
+
# against the whole FILENAME with `str.endswith`, not against `Path.suffix`,
|
|
450
|
+
# because two entries here are not suffixes in pathlib's sense:
|
|
451
|
+
# `Path("jquery.min.js").suffix` is ".js" and `Path("notes.py~").suffix` is
|
|
452
|
+
# ".py~", so a `Path.suffix` test silently matched neither (issue #1636).
|
|
453
|
+
# Use `path_utils.is_ignored_filename`; do not re-derive the rule.
|
|
448
454
|
IGNORE_SUFFIXES = frozenset(
|
|
449
|
-
{
|
|
455
|
+
{
|
|
456
|
+
".tmp",
|
|
457
|
+
"~",
|
|
458
|
+
".pyc",
|
|
459
|
+
".pyo",
|
|
460
|
+
".o",
|
|
461
|
+
".a",
|
|
462
|
+
".so",
|
|
463
|
+
".dll",
|
|
464
|
+
".class",
|
|
465
|
+
# Vendored bundles that generated API docs (jazzy, YARD, JSDoc,
|
|
466
|
+
# Sphinx) ship alongside the source they document. Their symbols are
|
|
467
|
+
# whatever the minifier emitted, and they outnumber the real ones.
|
|
468
|
+
".min.js",
|
|
469
|
+
".min.css",
|
|
470
|
+
}
|
|
450
471
|
)
|
|
472
|
+
# `str.endswith` takes a tuple, and the repository walk tests every filename,
|
|
473
|
+
# so build it once rather than per file. Derived, never edited separately.
|
|
474
|
+
IGNORE_FILENAME_ENDINGS = tuple(sorted(IGNORE_SUFFIXES))
|
|
451
475
|
|
|
452
476
|
# pathspec style for .cgrignore / --exclude patterns (#495).
|
|
453
477
|
GITWILDMATCH_STYLE = "gitignore"
|
|
@@ -18,6 +18,8 @@ class MCPToolName(StrEnum):
|
|
|
18
18
|
SEMANTIC_SEARCH = "semantic_search"
|
|
19
19
|
STRUCTURAL_SEARCH = "structural_search"
|
|
20
20
|
STRUCTURAL_REPLACE = "structural_replace"
|
|
21
|
+
FIND_DUPLICATE_CODE = "find_duplicate_code"
|
|
22
|
+
GET_FUNCTION_SOURCE = "get_function_source"
|
|
21
23
|
ASK_AGENT = "ask_agent"
|
|
22
24
|
FLOW_VERDICT = "flow_verdict"
|
|
23
25
|
EXPLAIN_TRACEBACK = "explain_traceback"
|
|
@@ -39,6 +41,9 @@ class MCPSchemaType(StrEnum):
|
|
|
39
41
|
OBJECT = "object"
|
|
40
42
|
STRING = "string"
|
|
41
43
|
INTEGER = "integer"
|
|
44
|
+
# JSON Schema spells a float 'number'; 'integer' would reject a 0.8
|
|
45
|
+
# similarity threshold at the client before the call is even made.
|
|
46
|
+
NUMBER = "number"
|
|
42
47
|
BOOLEAN = "boolean"
|
|
43
48
|
|
|
44
49
|
|
|
@@ -52,6 +57,9 @@ class MCPSchemaField(StrEnum):
|
|
|
52
57
|
|
|
53
58
|
class MCPParamName(StrEnum):
|
|
54
59
|
PROJECT_NAME = "project_name"
|
|
60
|
+
# The per-request retrieval scope (issue #1494). Distinct from
|
|
61
|
+
# PROJECT_NAME, which names the target of delete_project.
|
|
62
|
+
PROJECT = "project"
|
|
55
63
|
CONFIRM = "confirm"
|
|
56
64
|
NATURAL_LANGUAGE_QUERY = "natural_language_query"
|
|
57
65
|
QUALIFIED_NAME = "qualified_name"
|
|
@@ -71,6 +79,9 @@ class MCPParamName(StrEnum):
|
|
|
71
79
|
SINK_QN = "sink_qualified_name"
|
|
72
80
|
DRY_RUN = "dry_run"
|
|
73
81
|
TRACEBACK_TEXT = "traceback_text"
|
|
82
|
+
NODE_ID = "node_id"
|
|
83
|
+
THRESHOLD = "threshold"
|
|
84
|
+
MIN_SIZE = "min_size"
|
|
74
85
|
|
|
75
86
|
|
|
76
87
|
# MCP server constants
|
|
@@ -95,6 +106,9 @@ MCP_SEMANTIC_NOT_AVAILABLE_RESPONSE = (
|
|
|
95
106
|
"Semantic search is not available. Install with: uv sync --extra semantic"
|
|
96
107
|
)
|
|
97
108
|
MCP_ASK_AGENT_ERROR = "Error running ask_agent: {error}"
|
|
109
|
+
# Refused rather than answered with zero rows: an empty result for a
|
|
110
|
+
# misspelled project name is indistinguishable from a genuine empty result.
|
|
111
|
+
MCP_UNKNOWN_PROJECT = "Unknown project {project!r}. Indexed projects: {known}"
|
|
98
112
|
MCP_PROJECT_DELETED = "Successfully deleted project '{project_name}'."
|
|
99
113
|
MCP_WIPE_CANCELLED = "Database wipe cancelled. Set confirm=true to proceed."
|
|
100
114
|
MCP_WIPE_SUCCESS = "Database completely wiped. All projects have been removed."
|