code-graph-rag 0.4.5__tar.gz → 0.4.19__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.4.5/code_graph_rag.egg-info → code_graph_rag-0.4.19}/PKG-INFO +2 -2
- {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/README.md +4 -1
- {code_graph_rag-0.4.5 → code_graph_rag-0.4.19/code_graph_rag.egg-info}/PKG-INFO +2 -2
- {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/code_graph_rag.egg-info/SOURCES.txt +4 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/code_graph_rag.egg-info/requires.txt +1 -1
- {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/cli.py +355 -17
- {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/cli_help.py +6 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/constants/ast_js.py +1 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/constants/ast_python.py +12 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/constants/cli.py +63 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/constants/duplicates.py +31 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/constants/embedded_graph.py +22 -2
- {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/constants/graph.py +22 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/constants/languages.py +44 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/context_slice.py +6 -4
- {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/cypher_queries.py +209 -17
- {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/docker-compose.yaml +1 -1
- {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/exceptions.py +5 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/gloss.py +31 -1
- {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/gloss_repair.py +395 -17
- {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/graph_updater.py +11 -2
- {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/logs.py +15 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/parser_loader.py +30 -12
- {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/parsers/call_processor.py +626 -35
- {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/parsers/flow_access/processor.py +2 -55
- {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/parsers/java/type_resolver.py +3 -2
- {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/parsers/native_trees.py +58 -5
- {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/parsers/py/ast_analyzer.py +58 -69
- code_graph_rag-0.4.19/codebase_rag/parsers/py/definition_index.py +149 -0
- code_graph_rag-0.4.19/codebase_rag/parsers/py/flow_bindings.py +794 -0
- code_graph_rag-0.4.19/codebase_rag/parsers/py/patterns.py +66 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/parsers/py/type_inference.py +19 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/parsers/py/variable_analyzer.py +180 -111
- {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/parsers/utils.py +17 -1
- {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/services/graph_service.py +68 -9
- code_graph_rag-0.4.19/codebase_rag/source_checkout.py +29 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/structural_delta.py +692 -20
- {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/sync_guard.py +119 -2
- {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/tools/language.py +2 -20
- {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/tools/tool_descriptions.py +5 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/types_defs.py +35 -1
- {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/utils/path_utils.py +25 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/pyproject.toml +2 -23
- {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/LICENSE +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/PYPI_README.md +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/cgr/__init__.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/code_graph_rag.egg-info/dependency_links.txt +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/code_graph_rag.egg-info/entry_points.txt +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/code_graph_rag.egg-info/top_level.txt +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/__init__.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/_cli_env.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/analyzers/__init__.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/analyzers/ast_grep_analyzer.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/analyzers/ast_grep_rules/patterns/c.yaml +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/analyzers/ast_grep_rules/patterns/cpp.yaml +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/analyzers/ast_grep_rules/patterns/csharp.yaml +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/analyzers/ast_grep_rules/patterns/dart.yaml +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/analyzers/ast_grep_rules/patterns/go.yaml +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/analyzers/ast_grep_rules/patterns/java.yaml +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/analyzers/ast_grep_rules/patterns/javascript.yaml +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/analyzers/ast_grep_rules/patterns/lua.yaml +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/analyzers/ast_grep_rules/patterns/php.yaml +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/analyzers/ast_grep_rules/patterns/python.yaml +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/analyzers/ast_grep_rules/patterns/ruby.yaml +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/analyzers/ast_grep_rules/patterns/rust.yaml +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/analyzers/ast_grep_rules/patterns/scala.yaml +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/analyzers/ast_grep_rules/patterns/tsx.yaml +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/analyzers/ast_grep_rules/patterns/typescript.yaml +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/analyzers/ast_grep_rules/security/c.yaml +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/analyzers/ast_grep_rules/security/cpp.yaml +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/analyzers/ast_grep_rules/security/csharp.yaml +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/analyzers/ast_grep_rules/security/dart.yaml +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/analyzers/ast_grep_rules/security/go.yaml +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/analyzers/ast_grep_rules/security/java.yaml +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/analyzers/ast_grep_rules/security/javascript.yaml +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/analyzers/ast_grep_rules/security/lua.yaml +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/analyzers/ast_grep_rules/security/php.yaml +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/analyzers/ast_grep_rules/security/python.yaml +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/analyzers/ast_grep_rules/security/ruby.yaml +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/analyzers/ast_grep_rules/security/rust.yaml +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/analyzers/ast_grep_rules/security/scala.yaml +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/analyzers/ast_grep_rules/security/tsx.yaml +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/analyzers/ast_grep_rules/security/typescript.yaml +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/analyzers/ast_grep_rules/smells/c.yaml +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/analyzers/ast_grep_rules/smells/cpp.yaml +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/analyzers/ast_grep_rules/smells/csharp.yaml +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/analyzers/ast_grep_rules/smells/dart.yaml +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/analyzers/ast_grep_rules/smells/go.yaml +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/analyzers/ast_grep_rules/smells/java.yaml +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/analyzers/ast_grep_rules/smells/javascript.yaml +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/analyzers/ast_grep_rules/smells/lua.yaml +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/analyzers/ast_grep_rules/smells/php.yaml +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/analyzers/ast_grep_rules/smells/python.yaml +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/analyzers/ast_grep_rules/smells/ruby.yaml +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/analyzers/ast_grep_rules/smells/rust.yaml +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/analyzers/ast_grep_rules/smells/scala.yaml +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/analyzers/ast_grep_rules/smells/tsx.yaml +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/analyzers/ast_grep_rules/smells/typescript.yaml +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/ast_cache.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/capture.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/check_isolation.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/checkout_state.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/cli_runtime.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/config.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/console_marks.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/constants/__init__.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/constants/ast_cpp.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/constants/ast_csharp.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/constants/ast_dart.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/constants/ast_go.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/constants/ast_java.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/constants/ast_julia.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/constants/ast_lua.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/constants/ast_nodes.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/constants/ast_php.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/constants/ast_rust.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/constants/ast_scala.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/constants/ast_sql.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/constants/build.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/constants/core.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/constants/deadcode_roots.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/constants/deps.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/constants/fqn_specs.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/constants/health.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/constants/interface.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/constants/lang_tooling.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/constants/mcp.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/constants/notebook.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/constants/port.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/constants/providers.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/constants/security.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/constants/sqlite_vectors.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/constants/stdlib_types.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/constants/structural.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/constants/trace.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/context_pruning.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/crash_correlation.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/dead_code.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/decorators.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/duplicates.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/editing/__init__.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/editing/cli.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/editing/contract.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/editing/import_paths.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/editing/imports.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/editing/occurrences.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/editing/patcher.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/editing/rename.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/editing/signature.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/editing/signature_bind.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/editing/signature_contract.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/editing/signature_spec.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/editing/sites.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/editing/transaction.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/editor_links.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/embedded_graph/__init__.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/embedded_graph/compiler.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/embedded_graph/connection.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/embedded_graph/cypher_ast.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/embedded_graph/executor.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/embedded_graph/expressions.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/embedded_graph/extension.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/embedded_graph/functions.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/embedded_graph/lexer.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/embedded_graph/limits.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/embedded_graph/native.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/embedded_graph/parser.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/embedded_graph/procedures.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/embedded_graph/sql.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/embedded_graph/store.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/embedded_graph/types.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/embedder.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/flow_verdict.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/function_registry.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/gloss_anchor.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/graph_audit.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/graph_cli.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/graph_dialects.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/graph_loader.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/graph_query.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/instructions_trust.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/interface_skip.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/language_spec.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/main.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/mcp/__init__.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/mcp/client.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/mcp/server.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/mcp/tools.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/mgclient_compat.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/mgclient_probe.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/models.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/parser_fingerprint.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/parsers/__init__.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/parsers/anchor_hash.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/parsers/ast_fingerprint.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/parsers/ast_grep_patterns/bash.yaml +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/parsers/ast_grep_patterns/elixir.yaml +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/parsers/ast_grep_patterns/haskell.yaml +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/parsers/ast_grep_patterns/kotlin.yaml +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/parsers/ast_grep_patterns/nix.yaml +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/parsers/ast_grep_patterns/ruby.yaml +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/parsers/ast_grep_patterns/solidity.yaml +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/parsers/ast_grep_patterns/swift.yaml +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/parsers/ast_grep_scope.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/parsers/ast_grep_tier.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/parsers/build_lock.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/parsers/call_resolver.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/parsers/class_ingest/__init__.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/parsers/class_ingest/base_targets.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/parsers/class_ingest/cpp_modules.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/parsers/class_ingest/identity.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/parsers/class_ingest/method_override.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/parsers/class_ingest/mixin.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/parsers/class_ingest/node_type.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/parsers/class_ingest/parent_extraction.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/parsers/class_ingest/relationships.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/parsers/class_ingest/utils.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/parsers/contract_linking.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/parsers/contracts.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/parsers/cpp/__init__.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/parsers/cpp/class_macro.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/parsers/cpp/function_values.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/parsers/cpp/local_types.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/parsers/cpp/overloads.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/parsers/cpp/preproc_recovery.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/parsers/cpp/trailing_annotation.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/parsers/cpp/type_inference.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/parsers/cpp/utils.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/parsers/cpp_frontend/__init__.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/parsers/cpp_frontend/constants.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/parsers/cpp_frontend/frontend.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/parsers/cpp_frontend/qn.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/parsers/csharp/__init__.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/parsers/csharp/arity.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/parsers/csharp/type_inference.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/parsers/csharp/utils.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/parsers/csharp_frontend/__init__.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/parsers/csharp_frontend/frontend.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/parsers/csharp_frontend/roslyn/Frontend.cs +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/parsers/csharp_frontend/roslyn/Frontend.csproj +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/parsers/csharp_frontend/roslyn/Program.cs +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/parsers/dart/__init__.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/parsers/dart/package_paths.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/parsers/dart/type_inference.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/parsers/dart/utils.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/parsers/definition_docstring.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/parsers/definition_processor.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/parsers/dependency_parser.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/parsers/dispatch_registry.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/parsers/document_tier.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/parsers/endpoint_prefixes.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/parsers/endpoint_routes.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/parsers/endpoints.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/parsers/enum_variants.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/parsers/export_detection.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/parsers/factory.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/parsers/field_nodes.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/parsers/flat_module.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/parsers/flow_access/__init__.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/parsers/flow_access/constants.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/parsers/frontend_mode.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/parsers/frontends/__init__.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/parsers/frontends/cpp.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/parsers/frontends/csharp.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/parsers/frontends/go.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/parsers/frontends/java.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/parsers/frontends/protocol.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/parsers/frontends/python.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/parsers/frontends/registry.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/parsers/function_ingest.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/parsers/go/__init__.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/parsers/go/builds.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/parsers/go/interface_ingest.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/parsers/go/interfaces.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/parsers/go/link_state.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/parsers/go/module_paths.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/parsers/go/type_inference.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/parsers/go/utils.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/parsers/go_frontend/__init__.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/parsers/go_frontend/frontend.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/parsers/go_frontend/gotypes/go.mod +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/parsers/go_frontend/gotypes/go.sum +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/parsers/go_frontend/gotypes/main.go +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/parsers/handlers/__init__.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/parsers/handlers/base.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/parsers/handlers/cpp.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/parsers/handlers/java.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/parsers/handlers/js_ts.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/parsers/handlers/julia.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/parsers/handlers/lua.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/parsers/handlers/php.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/parsers/handlers/protocol.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/parsers/handlers/python.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/parsers/handlers/registry.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/parsers/handlers/rust.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/parsers/import_processor.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/parsers/interface_fingerprint.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/parsers/io_access/__init__.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/parsers/io_access/constants.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/parsers/io_access/descriptor.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/parsers/io_access/extract.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/parsers/io_access/models.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/parsers/io_access/processor.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/parsers/io_access/registry.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/parsers/io_access/resource_names.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/parsers/io_access/url_folding.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/parsers/java/__init__.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/parsers/java/method_resolver.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/parsers/java/type_inference.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/parsers/java/utils.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/parsers/java/variable_analyzer.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/parsers/java_frontend/__init__.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/parsers/java_frontend/frontend.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/parsers/java_frontend/javac/cgr/Frontend.java +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/parsers/java_generated.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/parsers/java_lombok.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/parsers/js_ts/__init__.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/parsers/js_ts/commonjs_exports.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/parsers/js_ts/ingest.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/parsers/js_ts/module_paths.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/parsers/js_ts/module_system.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/parsers/js_ts/overloads.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/parsers/js_ts/reexports.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/parsers/js_ts/type_inference.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/parsers/js_ts/utils.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/parsers/julia/__init__.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/parsers/julia/utils.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/parsers/lua/__init__.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/parsers/lua/type_inference.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/parsers/lua/utils.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/parsers/module_docstring.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/parsers/notebook.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/parsers/parameter_nodes.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/parsers/php/__init__.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/parsers/php/class_names.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/parsers/php/namespaces.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/parsers/php/utils.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/parsers/positional_params.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/parsers/py/__init__.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/parsers/py/class_aliases.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/parsers/py/expression_analyzer.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/parsers/py/forward_refs.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/parsers/py/overloads.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/parsers/py/receiver_rebinding.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/parsers/py/utils.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/parsers/py/with_analyzer.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/parsers/py_frontend/__init__.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/parsers/py_frontend/frontend.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/parsers/python_source_roots.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/parsers/rpc_exposure.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/parsers/rs/__init__.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/parsers/rs/cargo_semver.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/parsers/rs/type_inference.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/parsers/rs/utils.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/parsers/scala/__init__.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/parsers/scala/utils.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/parsers/semantic_call_join.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/parsers/sql_ddl.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/parsers/sql_recovery.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/parsers/stdlib_extractor.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/parsers/string_call.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/parsers/structure_processor.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/parsers/type_facts.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/parsers/type_inference.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/path_filters.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/port_cli.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/port_parity.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/project_selection.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/prompts.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/providers/__init__.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/providers/base.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/providers/litellm.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/queries/highlights/c_sharp.scm +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/queries/highlights/dart.scm +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/queries/highlights/java.scm +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/queries/highlights/javascript.scm +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/queries/highlights/julia.scm +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/queries/highlights/php.scm +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/queries/highlights/python.scm +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/queries/highlights/rust.scm +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/queries/highlights/typescript.scm +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/readme_sections.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/schema_builder.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/schema_parse.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/schemas.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/sensitive_paths.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/services/__init__.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/services/anthropic_token_counter.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/services/cypher_guard.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/services/filtering.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/services/gloss_cleanup.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/services/graph_diff.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/services/llm.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/services/neo4j_driver.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/services/protobuf_service.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/services/provenance.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/services/resource_cleanup.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/services/usage_cost.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/sql_names.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/sqlite_vectors.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/stack/__init__.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/stack/cli.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/stack/constants.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/stack/health.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/stack/manager.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/structural_check.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/sync_lock.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/taint.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/tool_errors.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/tools/__init__.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/tools/ast_grep_service.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/tools/code_retrieval.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/tools/codebase_query.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/tools/directory_lister.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/tools/duplicate_detection.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/tools/file_editor.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/tools/file_reader.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/tools/file_writer.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/tools/graph_refresh.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/tools/graph_rerank.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/tools/health_checker.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/tools/language_catalog.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/tools/research.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/tools/semantic_search.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/tools/shell_command.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/tools/structural_editor.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/tools/structural_search.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/tools/web_search.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/trace/__init__.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/trace/carry.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/trace/cli.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/trace/cpuprofile.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/trace/dispatch_site.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/trace/ebpf_pprof.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/trace/ingest.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/trace/instrumented.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/trace/pprof.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/trace/pytest_plugin.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/trace/records.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/trace/resolution.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/trace/rust_pprof.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/trace/sourcemap.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/trace/speedscope.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/trace/tracer.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/trace/xdebug.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/tree_sitter_point.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/unixcoder.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/utils/__init__.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/utils/cpp_signatures.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/utils/dependencies.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/utils/endpoints.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/utils/fqn_resolver.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/utils/interruptible_thread.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/utils/json_io.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/utils/process_owner.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/utils/qn_markers.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/utils/rich_markdown.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/utils/source_encoding.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/utils/source_extraction.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/utils/terminal_console.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/utils/token_utils.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/vector_store.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/watch.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/workspaces/__init__.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/workspaces/cli.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/workspaces/constants.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/workspaces/models.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/workspaces/storage.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codec/__init__.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codec/schema.proto +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codec/schema_pb2.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codec/schema_pb2.pyi +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/setup.cfg +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: code-graph-rag
|
|
3
|
-
Version: 0.4.
|
|
3
|
+
Version: 0.4.19
|
|
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
|
|
@@ -41,7 +41,7 @@ Requires-Dist: pathspec>=1.0.4
|
|
|
41
41
|
Requires-Dist: pygments>=2.20.0
|
|
42
42
|
Requires-Dist: certifi>=2026.10.23
|
|
43
43
|
Requires-Dist: regex>=2024.11.6
|
|
44
|
-
Requires-Dist: cgr-graph-rs<0.2,>=0.1.
|
|
44
|
+
Requires-Dist: cgr-graph-rs<0.2,>=0.1.5; platform_python_implementation == "CPython" and ((sys_platform == "linux" and (platform_machine == "x86_64" or platform_machine == "aarch64")) or sys_platform == "darwin" or (sys_platform == "win32" and platform_machine == "AMD64"))
|
|
45
45
|
Provides-Extra: test
|
|
46
46
|
Requires-Dist: jedi>=0.19; extra == "test"
|
|
47
47
|
Requires-Dist: pytest>=8.4.1; extra == "test"
|
|
@@ -61,7 +61,10 @@ Code-Graph-RAG parses a multi-language codebase with Tree-sitter, sharpened by c
|
|
|
61
61
|
## Latest News 🔥
|
|
62
62
|
|
|
63
63
|
<!-- SECTION:latest_news -->
|
|
64
|
-
- **
|
|
64
|
+
- **Quiet Mode Enhancement**: The `--quiet` flag for the CLI now suppresses the scanning line for dead code and duplicates, providing a cleaner output.
|
|
65
|
+
- **Context Budget Fix**: The system now correctly handles cases where a target doesn't fit within the allocated budget, preventing unexpected behaviour.
|
|
66
|
+
- **Code Quality**: Changes have been made to report decorator and modifier changes that affect method calls and to ensure submodule grammars are loaded correctly.
|
|
67
|
+
- **CGR Prune Feature**: A new `cgr prune` functionality has been added to remove projects where the root no longer exists.
|
|
65
68
|
<!-- /SECTION:latest_news -->
|
|
66
69
|
|
|
67
70
|
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.4.
|
|
3
|
+
Version: 0.4.19
|
|
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
|
|
@@ -41,7 +41,7 @@ Requires-Dist: pathspec>=1.0.4
|
|
|
41
41
|
Requires-Dist: pygments>=2.20.0
|
|
42
42
|
Requires-Dist: certifi>=2026.10.23
|
|
43
43
|
Requires-Dist: regex>=2024.11.6
|
|
44
|
-
Requires-Dist: cgr-graph-rs<0.2,>=0.1.
|
|
44
|
+
Requires-Dist: cgr-graph-rs<0.2,>=0.1.5; platform_python_implementation == "CPython" and ((sys_platform == "linux" and (platform_machine == "x86_64" or platform_machine == "aarch64")) or sys_platform == "darwin" or (sys_platform == "win32" and platform_machine == "AMD64"))
|
|
45
45
|
Provides-Extra: test
|
|
46
46
|
Requires-Dist: jedi>=0.19; extra == "test"
|
|
47
47
|
Requires-Dist: pytest>=8.4.1; extra == "test"
|
|
@@ -62,6 +62,7 @@ codebase_rag/schema_builder.py
|
|
|
62
62
|
codebase_rag/schema_parse.py
|
|
63
63
|
codebase_rag/schemas.py
|
|
64
64
|
codebase_rag/sensitive_paths.py
|
|
65
|
+
codebase_rag/source_checkout.py
|
|
65
66
|
codebase_rag/sql_names.py
|
|
66
67
|
codebase_rag/sqlite_vectors.py
|
|
67
68
|
codebase_rag/structural_check.py
|
|
@@ -357,9 +358,12 @@ codebase_rag/parsers/php/utils.py
|
|
|
357
358
|
codebase_rag/parsers/py/__init__.py
|
|
358
359
|
codebase_rag/parsers/py/ast_analyzer.py
|
|
359
360
|
codebase_rag/parsers/py/class_aliases.py
|
|
361
|
+
codebase_rag/parsers/py/definition_index.py
|
|
360
362
|
codebase_rag/parsers/py/expression_analyzer.py
|
|
363
|
+
codebase_rag/parsers/py/flow_bindings.py
|
|
361
364
|
codebase_rag/parsers/py/forward_refs.py
|
|
362
365
|
codebase_rag/parsers/py/overloads.py
|
|
366
|
+
codebase_rag/parsers/py/patterns.py
|
|
363
367
|
codebase_rag/parsers/py/receiver_rebinding.py
|
|
364
368
|
codebase_rag/parsers/py/type_inference.py
|
|
365
369
|
codebase_rag/parsers/py/utils.py
|
|
@@ -23,7 +23,7 @@ certifi>=2026.10.23
|
|
|
23
23
|
regex>=2024.11.6
|
|
24
24
|
|
|
25
25
|
[:platform_python_implementation == "CPython" and ((sys_platform == "linux" and (platform_machine == "x86_64" or platform_machine == "aarch64")) or sys_platform == "darwin" or (sys_platform == "win32" and platform_machine == "AMD64"))]
|
|
26
|
-
cgr-graph-rs<0.2,>=0.1.
|
|
26
|
+
cgr-graph-rs<0.2,>=0.1.5
|
|
27
27
|
|
|
28
28
|
[ast-grep]
|
|
29
29
|
ast-grep-py>=0.51.0
|
|
@@ -8,6 +8,7 @@ import subprocess
|
|
|
8
8
|
import sys
|
|
9
9
|
import tempfile
|
|
10
10
|
import time
|
|
11
|
+
import uuid
|
|
11
12
|
from collections.abc import Callable, Coroutine, Generator, Iterable
|
|
12
13
|
from contextlib import ExitStack, contextmanager
|
|
13
14
|
from fnmatch import fnmatch
|
|
@@ -20,6 +21,7 @@ import click
|
|
|
20
21
|
import typer
|
|
21
22
|
from loguru import logger
|
|
22
23
|
from rich.console import Console
|
|
24
|
+
from rich.markup import escape
|
|
23
25
|
from rich.panel import Panel
|
|
24
26
|
from rich.table import Table
|
|
25
27
|
from rich.text import Text
|
|
@@ -81,10 +83,13 @@ from .sync_guard import SyncRefusedError, mark_sync_incomplete, release_project_
|
|
|
81
83
|
from .sync_guard import clear_sync_incomplete as _clear_sync_incomplete
|
|
82
84
|
from .sync_guard import partial_graph_refusal as _partial_graph_refusal
|
|
83
85
|
from .sync_guard import project_owner_refusal as _project_owner_refusal
|
|
86
|
+
from .sync_guard import retire_exited_runs as _retire_exited_runs
|
|
84
87
|
from .sync_guard import retire_stranded_runs as _retire_stranded_runs
|
|
85
88
|
from .sync_guard import stranded_runs as _stranded_runs
|
|
86
89
|
from .sync_guard import sync_marker_params as _sync_marker_params
|
|
87
90
|
from .sync_guard import sync_owner as _sync_owner
|
|
91
|
+
from .sync_guard import take_over_runs as _take_over_runs
|
|
92
|
+
from .sync_guard import writing_runs as _writing_runs
|
|
88
93
|
from .sync_lock import SyncLockError, repo_sync_lock
|
|
89
94
|
from .tools.health_checker import HealthChecker
|
|
90
95
|
from .tools.language import cli as language_cli
|
|
@@ -110,6 +115,7 @@ from .utils.path_utils import (
|
|
|
110
115
|
project_roots_from_rows,
|
|
111
116
|
projects_sharing_root,
|
|
112
117
|
resolve_repo_path,
|
|
118
|
+
root_proven_missing,
|
|
113
119
|
unwritable_output_reason,
|
|
114
120
|
)
|
|
115
121
|
from .utils.process_owner import pid_may_be_running, process_host
|
|
@@ -1066,13 +1072,15 @@ def _clear_deleted_project_markers(
|
|
|
1066
1072
|
a sync that failed before the delete keeps the project in `cgr status`
|
|
1067
1073
|
as interrupted. A marker goes only when its run cannot still be writing:
|
|
1068
1074
|
the CLI sync's once that sync provably stopped (PR #2532 review: a sync
|
|
1069
|
-
still running would otherwise write on unguarded),
|
|
1070
|
-
|
|
1071
|
-
|
|
1072
|
-
|
|
1075
|
+
still running would otherwise write on unguarded), any run's whose
|
|
1076
|
+
process provably exited (#2479), and any run's that never wrote the
|
|
1077
|
+
graph. A run that had begun writing and may still be alive owns its
|
|
1078
|
+
marker (#1709). Best effort, like `_clear_sync_incomplete`: the project
|
|
1079
|
+
is deleted.
|
|
1073
1080
|
"""
|
|
1074
1081
|
try:
|
|
1075
1082
|
kept = _clear_stopped_sync_marker(ingestor, project_name)
|
|
1083
|
+
_retire_exited_runs(ingestor, project_name)
|
|
1076
1084
|
ingestor.execute_write(
|
|
1077
1085
|
cq.CYPHER_RECOVER_PROJECT_INCOMPLETE,
|
|
1078
1086
|
{cs.KEY_PROJECT_NAME: project_name},
|
|
@@ -1336,20 +1344,30 @@ def _resolve_and_validate_repo(repo_path: str | None) -> Path:
|
|
|
1336
1344
|
|
|
1337
1345
|
|
|
1338
1346
|
def _cleanup_project_embeddings(
|
|
1339
|
-
ingestor: MemgraphIngestor,
|
|
1340
|
-
|
|
1341
|
-
|
|
1342
|
-
|
|
1343
|
-
|
|
1344
|
-
|
|
1347
|
+
ingestor: MemgraphIngestor,
|
|
1348
|
+
project_name: str,
|
|
1349
|
+
projects: Iterable[str],
|
|
1350
|
+
node_rows: list[ResultRow] | None = None,
|
|
1351
|
+
) -> bool:
|
|
1352
|
+
"""Delete the project's vectors; False when the store reports a miss.
|
|
1353
|
+
|
|
1354
|
+
The rows may be supplied pre-fetched: prune reads the ids before the
|
|
1355
|
+
conditional purge fires, because once the graph is deleted no query can
|
|
1356
|
+
recover them.
|
|
1357
|
+
"""
|
|
1358
|
+
if node_rows is None:
|
|
1359
|
+
node_rows = ingestor.fetch_all(
|
|
1360
|
+
cs.CYPHER_QUERY_PROJECT_NODE_IDS,
|
|
1361
|
+
{cs.KEY_PROJECT_NAME: project_name},
|
|
1362
|
+
)
|
|
1345
1363
|
node_ids: list[int] = []
|
|
1346
|
-
for row in
|
|
1364
|
+
for row in node_rows:
|
|
1347
1365
|
node_id = row.get(cs.KEY_NODE_ID)
|
|
1348
1366
|
if isinstance(node_id, int):
|
|
1349
1367
|
node_ids.append(node_id)
|
|
1350
1368
|
# A project nested under this one (`svc.v2` under `svc`) keeps its
|
|
1351
1369
|
# vectors, which the prefix-scoped node-id read also names.
|
|
1352
|
-
delete_project_embeddings(
|
|
1370
|
+
return delete_project_embeddings(
|
|
1353
1371
|
project_name, node_ids, nested_project_names(project_name, projects)
|
|
1354
1372
|
)
|
|
1355
1373
|
|
|
@@ -2600,9 +2618,10 @@ def status_command() -> None:
|
|
|
2600
2618
|
cs.CLI_STATUS_SYNCS_NONE.format(endpoint=status.memgraph_endpoint)
|
|
2601
2619
|
)
|
|
2602
2620
|
return
|
|
2621
|
+
missing = _missing_root_candidates({sync.name: sync.root_path for sync in syncs})
|
|
2603
2622
|
app_context.console.print(cs.CLI_STATUS_SYNCS_HEADER)
|
|
2604
2623
|
for sync in syncs:
|
|
2605
|
-
app_context.console.print(_sync_row(sync))
|
|
2624
|
+
app_context.console.print(_sync_row(sync, sync.name in missing))
|
|
2606
2625
|
|
|
2607
2626
|
|
|
2608
2627
|
def _stamp_text(stamp: ResultValue | None) -> str | None:
|
|
@@ -2631,23 +2650,29 @@ def _project_syncs() -> list[ProjectSync] | None:
|
|
|
2631
2650
|
for row in projects
|
|
2632
2651
|
if row.get(cs.KEY_NAME)
|
|
2633
2652
|
}
|
|
2653
|
+
roots = project_roots_from_rows(projects)
|
|
2634
2654
|
interrupted = {str(row["project"]) for row in markers if row.get("project")}
|
|
2635
2655
|
return [
|
|
2636
2656
|
ProjectSync(
|
|
2637
2657
|
name=name,
|
|
2638
2658
|
last_synced_at=_stamp_text(synced_at.get(name)),
|
|
2639
2659
|
interrupted=name in interrupted,
|
|
2660
|
+
root_path=roots.get(name),
|
|
2640
2661
|
)
|
|
2641
2662
|
for name in sorted(synced_at.keys() | interrupted)
|
|
2642
2663
|
]
|
|
2643
2664
|
|
|
2644
2665
|
|
|
2645
|
-
def _sync_row(sync: ProjectSync) -> str:
|
|
2666
|
+
def _sync_row(sync: ProjectSync, root_missing: bool = False) -> str:
|
|
2646
2667
|
details: list[str] = []
|
|
2647
2668
|
if sync.last_synced_at:
|
|
2648
2669
|
details.append(cs.CLI_STATUS_SYNC_TIME.format(time=sync.last_synced_at))
|
|
2649
2670
|
elif not sync.interrupted:
|
|
2650
2671
|
details.append(cs.CLI_STATUS_SYNC_NOT_RECORDED)
|
|
2672
|
+
if sync.root_path:
|
|
2673
|
+
details.append(cs.CLI_STATUS_SYNC_ROOT.format(root=escape(sync.root_path)))
|
|
2674
|
+
if root_missing:
|
|
2675
|
+
details.append(style(cs.CLI_STATUS_ROOT_MISSING, cs.Color.RED))
|
|
2651
2676
|
if sync.interrupted:
|
|
2652
2677
|
details.append(
|
|
2653
2678
|
cs.CLI_STATUS_SYNC_MARKED.format(marker=cs.CLI_STATUS_SYNC_INCOMPLETE)
|
|
@@ -2788,6 +2813,16 @@ def context_command(
|
|
|
2788
2813
|
if payload["resolved"] is None:
|
|
2789
2814
|
typer.echo(cs.CONTEXT_UNRESOLVED.format(target=target), err=True)
|
|
2790
2815
|
raise typer.Exit(code=1)
|
|
2816
|
+
# Only the target's own trim marks a slice truncated, so truncated and
|
|
2817
|
+
# empty means not even its first line fitted.
|
|
2818
|
+
if payload["truncated"] and not payload["pieces"]:
|
|
2819
|
+
typer.echo(
|
|
2820
|
+
cs.CONTEXT_TARGET_OVER_BUDGET.format(
|
|
2821
|
+
target=payload["resolved"], budget=budget
|
|
2822
|
+
),
|
|
2823
|
+
err=True,
|
|
2824
|
+
)
|
|
2825
|
+
raise typer.Exit(code=1)
|
|
2791
2826
|
|
|
2792
2827
|
|
|
2793
2828
|
@app.command(
|
|
@@ -3172,7 +3207,8 @@ def _emit_dead_code(
|
|
|
3172
3207
|
def _notice_single_project_endpoint_roots(show_progress: bool) -> None:
|
|
3173
3208
|
"""Endpoint roots off on a graph holding one project: every endpoint
|
|
3174
3209
|
reads as uncalled. Stdout carries the JSON payload when that format is
|
|
3175
|
-
chosen (local review P1),
|
|
3210
|
+
chosen (local review P1), and only the table under --quiet, so the
|
|
3211
|
+
notice goes to stderr then."""
|
|
3176
3212
|
if show_progress:
|
|
3177
3213
|
app_context.console.print(
|
|
3178
3214
|
style(cs.CLI_DEADCODE_SINGLE_PROJECT_ENDPOINTS, cs.Color.YELLOW)
|
|
@@ -3244,7 +3280,11 @@ def dead_code(
|
|
|
3244
3280
|
from .dead_code import collect_dead_code_with_coverage
|
|
3245
3281
|
|
|
3246
3282
|
chosen = _scan_project_option(project, project_name)
|
|
3247
|
-
show_progress =
|
|
3283
|
+
show_progress = (
|
|
3284
|
+
output_format == cs.DeadCodeFormat.TABLE
|
|
3285
|
+
and output is None
|
|
3286
|
+
and not settings.QUIET
|
|
3287
|
+
)
|
|
3248
3288
|
if show_progress:
|
|
3249
3289
|
app_context.console.print(style(cs.CLI_DEADCODE_CONNECTING, cs.Color.CYAN))
|
|
3250
3290
|
|
|
@@ -3657,7 +3697,11 @@ def duplicates(
|
|
|
3657
3697
|
from .duplicates import collect_duplicates_with_coverage
|
|
3658
3698
|
|
|
3659
3699
|
chosen = _scan_project_option(project, project_name)
|
|
3660
|
-
show_progress =
|
|
3700
|
+
show_progress = (
|
|
3701
|
+
output_format == cs.DuplicatesFormat.TABLE
|
|
3702
|
+
and output is None
|
|
3703
|
+
and not settings.QUIET
|
|
3704
|
+
)
|
|
3661
3705
|
if show_progress:
|
|
3662
3706
|
app_context.console.print(style(cs.CLI_DUPLICATES_CONNECTING, cs.Color.CYAN))
|
|
3663
3707
|
|
|
@@ -3838,5 +3882,299 @@ def delete_project(
|
|
|
3838
3882
|
)
|
|
3839
3883
|
|
|
3840
3884
|
|
|
3885
|
+
def _missing_root_candidates(roots: dict[str, str | None]) -> dict[str, str]:
|
|
3886
|
+
"""Projects whose recorded root is provably gone (issue #2479).
|
|
3887
|
+
|
|
3888
|
+
The checkout cgr itself runs from is never a candidate, whatever the
|
|
3889
|
+
stat says. A shell can survive its own directory being deleted, so a
|
|
3890
|
+
dead cwd reads as an unknown, not as an exemption: the question is
|
|
3891
|
+
undeterminable and nothing is a candidate.
|
|
3892
|
+
"""
|
|
3893
|
+
try:
|
|
3894
|
+
cwd = Path.cwd().resolve()
|
|
3895
|
+
except OSError:
|
|
3896
|
+
return {}
|
|
3897
|
+
missing: dict[str, str] = {}
|
|
3898
|
+
for project_name, root in roots.items():
|
|
3899
|
+
if not root:
|
|
3900
|
+
continue
|
|
3901
|
+
try:
|
|
3902
|
+
here = Path(root).resolve() == cwd
|
|
3903
|
+
except (OSError, RuntimeError):
|
|
3904
|
+
# A symlink loop cannot be resolved: undeterminable, so live.
|
|
3905
|
+
continue
|
|
3906
|
+
if here:
|
|
3907
|
+
continue
|
|
3908
|
+
if root_proven_missing(root):
|
|
3909
|
+
missing[project_name] = root
|
|
3910
|
+
return missing
|
|
3911
|
+
|
|
3912
|
+
|
|
3913
|
+
def _report_prune_candidates(candidates: dict[str, str]) -> None:
|
|
3914
|
+
if not candidates:
|
|
3915
|
+
app_context.console.print(style(cs.CLI_MSG_PRUNE_NO_CANDIDATES, cs.Color.GREEN))
|
|
3916
|
+
return
|
|
3917
|
+
app_context.console.print(cs.CLI_MSG_PRUNE_CANDIDATES)
|
|
3918
|
+
for project_name, root in sorted(candidates.items()):
|
|
3919
|
+
app_context.console.print(
|
|
3920
|
+
cs.CLI_MSG_PRUNE_CANDIDATE.format(
|
|
3921
|
+
project_name=project_name, root=escape(root)
|
|
3922
|
+
)
|
|
3923
|
+
)
|
|
3924
|
+
|
|
3925
|
+
|
|
3926
|
+
def _report_prune_failure(project_name: str, error: Exception) -> None:
|
|
3927
|
+
message = cs.CLI_ERR_PRUNE_FAILED.format(project_name=project_name, error=error)
|
|
3928
|
+
app_context.console.print(style(message, cs.Color.RED))
|
|
3929
|
+
logger.exception(message)
|
|
3930
|
+
|
|
3931
|
+
|
|
3932
|
+
def _clear_own_marker(
|
|
3933
|
+
ingestor: MemgraphIngestor, project_name: str, run_id: str
|
|
3934
|
+
) -> None:
|
|
3935
|
+
# Only a verified purge takes prune's marker off: one that failed keeps
|
|
3936
|
+
# it, standing for the exited runs' markers it replaced. Best effort, as
|
|
3937
|
+
# the purge is done.
|
|
3938
|
+
try:
|
|
3939
|
+
ingestor.execute_write(
|
|
3940
|
+
cq.CYPHER_CLEAR_PROJECT_INCOMPLETE,
|
|
3941
|
+
{cs.KEY_PROJECT_NAME: project_name, cs.KEY_RUN_ID: run_id},
|
|
3942
|
+
)
|
|
3943
|
+
except Exception as exc:
|
|
3944
|
+
logger.warning(
|
|
3945
|
+
ls.CLI_DELETE_MARKER_NOT_CLEARED.format(project=project_name, error=exc)
|
|
3946
|
+
)
|
|
3947
|
+
|
|
3948
|
+
|
|
3949
|
+
def _purge_left_nothing(
|
|
3950
|
+
ingestor: MemgraphIngestor, project_name: str, run_id: str
|
|
3951
|
+
) -> bool:
|
|
3952
|
+
"""Whether a fresh read finds nothing of the project left (#2479).
|
|
3953
|
+
|
|
3954
|
+
Nothing left means no Project, nothing under its name, and no run of it
|
|
3955
|
+
writing: a sync that began writing since the delete may own what the
|
|
3956
|
+
vector cleanup that follows would take. Raises when the graph cannot be
|
|
3957
|
+
read; an empty count reads as not proven.
|
|
3958
|
+
"""
|
|
3959
|
+
if project_name in ingestor.list_projects():
|
|
3960
|
+
return False
|
|
3961
|
+
if _writing_runs(ingestor, project_name, run_id).live:
|
|
3962
|
+
return False
|
|
3963
|
+
rows = ingestor.fetch_all(
|
|
3964
|
+
cq.CYPHER_COUNT_PROJECT_NODES,
|
|
3965
|
+
{
|
|
3966
|
+
cs.KEY_PROJECT_NAME: project_name,
|
|
3967
|
+
cs.KEY_PROJECT_PREFIX: f"{project_name}{cs.SEPARATOR_DOT}",
|
|
3968
|
+
},
|
|
3969
|
+
)
|
|
3970
|
+
counts = [row.get(cs.KEY_RESIDUAL_NODES) for row in rows]
|
|
3971
|
+
return bool(counts) and all(count == 0 for count in counts)
|
|
3972
|
+
|
|
3973
|
+
|
|
3974
|
+
def _prune_projects(
|
|
3975
|
+
ingestor: MemgraphIngestor, candidates: dict[str, str], projects: list[str]
|
|
3976
|
+
) -> tuple[list[str], list[str]]:
|
|
3977
|
+
"""Prune each candidate and verify the purge against a fresh graph read.
|
|
3978
|
+
|
|
3979
|
+
Returns the names verified as purged and the names whose removal could
|
|
3980
|
+
not be verified; the caller reports the second list as failures, never
|
|
3981
|
+
as successes, and a skipped candidate is in neither.
|
|
3982
|
+
"""
|
|
3983
|
+
pruned: list[str] = []
|
|
3984
|
+
failures: list[str] = []
|
|
3985
|
+
for project_name, root in sorted(candidates.items()):
|
|
3986
|
+
outcome = _prune_one(ingestor, project_name, root, projects)
|
|
3987
|
+
if outcome == cs.PruneOutcome.PRUNED:
|
|
3988
|
+
pruned.append(project_name)
|
|
3989
|
+
elif outcome == cs.PruneOutcome.FAILED:
|
|
3990
|
+
failures.append(project_name)
|
|
3991
|
+
return pruned, failures
|
|
3992
|
+
|
|
3993
|
+
|
|
3994
|
+
def _prune_one(
|
|
3995
|
+
ingestor: MemgraphIngestor, project_name: str, root: str, projects: list[str]
|
|
3996
|
+
) -> cs.PruneOutcome:
|
|
3997
|
+
"""Prune one candidate (#2479).
|
|
3998
|
+
|
|
3999
|
+
The delete is conditional on the project still naming the root this run
|
|
4000
|
+
checked, and on no run of it writing, inside the delete statement
|
|
4001
|
+
itself, so a concurrent sync repointing the project's root_path, or one
|
|
4002
|
+
starting to write it, is skipped, not destroyed. A checkout
|
|
4003
|
+
recreated at the old path is still only narrowed by the existence
|
|
4004
|
+
re-check. A purge that cannot be proven complete -- the project still
|
|
4005
|
+
listed, or anything left under its name -- is a failure, never a
|
|
4006
|
+
success. A proven purge then takes what `delete-project` takes after its
|
|
4007
|
+
delete: the project's notes and its incomplete-run markers, which would
|
|
4008
|
+
otherwise keep it in `cgr status`.
|
|
4009
|
+
"""
|
|
4010
|
+
if not root_proven_missing(root):
|
|
4011
|
+
_say(cs.CLI_WARN_PRUNE_ROOT_BACK.format(project_name=project_name))
|
|
4012
|
+
return cs.PruneOutcome.SKIPPED
|
|
4013
|
+
run_id = f"{cs.PRUNE_RUN_ID_PREFIX}{uuid.uuid4().hex}"
|
|
4014
|
+
try:
|
|
4015
|
+
# A run of the same name may be writing from another checkout or
|
|
4016
|
+
# machine: its marker is the one signal it gives. One whose process
|
|
4017
|
+
# provably exited does not hold the project: prune takes its place,
|
|
4018
|
+
# so a sync that died with its checkout is not a reason to keep it.
|
|
4019
|
+
runs = _writing_runs(ingestor, project_name, run_id)
|
|
4020
|
+
if runs.live:
|
|
4021
|
+
_say(cs.CLI_WARN_PRUNE_RUN_WRITING.format(project_name=project_name))
|
|
4022
|
+
return cs.PruneOutcome.SKIPPED
|
|
4023
|
+
_take_over_runs(ingestor, project_name, run_id, runs.exited)
|
|
4024
|
+
node_rows = _purge_if_root(ingestor, project_name, root, run_id)
|
|
4025
|
+
except GraphUnavailableError:
|
|
4026
|
+
raise
|
|
4027
|
+
except Exception as e:
|
|
4028
|
+
_report_prune_failure(project_name, e)
|
|
4029
|
+
return cs.PruneOutcome.FAILED
|
|
4030
|
+
if node_rows is None:
|
|
4031
|
+
_say(cs.CLI_WARN_PRUNE_ROOT_CHANGED.format(project_name=project_name))
|
|
4032
|
+
return cs.PruneOutcome.SKIPPED
|
|
4033
|
+
try:
|
|
4034
|
+
verified = _purge_left_nothing(ingestor, project_name, run_id)
|
|
4035
|
+
except GraphUnavailableError:
|
|
4036
|
+
raise
|
|
4037
|
+
except Exception as e:
|
|
4038
|
+
_report_prune_failure(project_name, e)
|
|
4039
|
+
return cs.PruneOutcome.FAILED
|
|
4040
|
+
if not verified:
|
|
4041
|
+
_say(
|
|
4042
|
+
cs.CLI_ERR_PRUNE_VERIFY_FAILED.format(project_name=project_name),
|
|
4043
|
+
cs.Color.RED,
|
|
4044
|
+
)
|
|
4045
|
+
return cs.PruneOutcome.FAILED
|
|
4046
|
+
_delete_pruned_vectors(ingestor, project_name, projects, node_rows)
|
|
4047
|
+
if not prune_orphaned_glosses(ingestor, project_name):
|
|
4048
|
+
_say(cs.CLI_WARN_GLOSSES_NOT_PRUNED.format(project_name=project_name))
|
|
4049
|
+
_clear_own_marker(ingestor, project_name, run_id)
|
|
4050
|
+
_clear_deleted_project_markers(ingestor, project_name)
|
|
4051
|
+
_say(cs.CLI_MSG_PROJECT_PRUNED.format(project_name=project_name), cs.Color.GREEN)
|
|
4052
|
+
return cs.PruneOutcome.PRUNED
|
|
4053
|
+
|
|
4054
|
+
|
|
4055
|
+
def _say(message: str, color: cs.Color = cs.Color.YELLOW) -> None:
|
|
4056
|
+
app_context.console.print(style(message, color))
|
|
4057
|
+
|
|
4058
|
+
|
|
4059
|
+
def _purge_if_root(
|
|
4060
|
+
ingestor: MemgraphIngestor, project_name: str, root: str, run_id: str
|
|
4061
|
+
) -> list[ResultRow] | None:
|
|
4062
|
+
"""Run the conditional purge; the project's node-id rows when it fired.
|
|
4063
|
+
|
|
4064
|
+
The ids are read while the project is still in the graph: once it is
|
|
4065
|
+
deleted no query can recover them, and its vectors go only when the
|
|
4066
|
+
conditional delete fires. None when it did not fire.
|
|
4067
|
+
"""
|
|
4068
|
+
node_rows = ingestor.fetch_all(
|
|
4069
|
+
cs.CYPHER_QUERY_PROJECT_NODE_IDS,
|
|
4070
|
+
{cs.KEY_PROJECT_NAME: project_name},
|
|
4071
|
+
)
|
|
4072
|
+
_info(
|
|
4073
|
+
style(
|
|
4074
|
+
cs.CLI_MSG_PRUNING_PROJECT.format(
|
|
4075
|
+
project_name=project_name, root=escape(root)
|
|
4076
|
+
),
|
|
4077
|
+
cs.Color.YELLOW,
|
|
4078
|
+
)
|
|
4079
|
+
)
|
|
4080
|
+
try:
|
|
4081
|
+
fired = ingestor.delete_project(
|
|
4082
|
+
project_name, expected_root=root, own_run_id=run_id
|
|
4083
|
+
)
|
|
4084
|
+
except Exception:
|
|
4085
|
+
_sweep_glosses_after_failed_delete(ingestor, project_name)
|
|
4086
|
+
raise
|
|
4087
|
+
return node_rows if fired else None
|
|
4088
|
+
|
|
4089
|
+
|
|
4090
|
+
def _delete_pruned_vectors(
|
|
4091
|
+
ingestor: MemgraphIngestor,
|
|
4092
|
+
project_name: str,
|
|
4093
|
+
projects: list[str],
|
|
4094
|
+
node_rows: list[ResultRow],
|
|
4095
|
+
) -> None:
|
|
4096
|
+
# Run only once the purge is verified: the store finds a project's
|
|
4097
|
+
# points by its name, so a project a sync recreated under that name
|
|
4098
|
+
# since the delete would lose its vectors, and verification has just
|
|
4099
|
+
# read that none exists. The graph purge is proven either way; a vector
|
|
4100
|
+
# deletion that fails or raises leaks vectors for dead node ids and is
|
|
4101
|
+
# not recoverable by a retry, so it warns and the prune still counts.
|
|
4102
|
+
try:
|
|
4103
|
+
deleted = _cleanup_project_embeddings(
|
|
4104
|
+
ingestor, project_name, projects, node_rows
|
|
4105
|
+
)
|
|
4106
|
+
except Exception as e:
|
|
4107
|
+
logger.warning(
|
|
4108
|
+
ls.CLI_PRUNE_VECTORS_FAILED.format(project=project_name, error=e)
|
|
4109
|
+
)
|
|
4110
|
+
deleted = False
|
|
4111
|
+
if not deleted:
|
|
4112
|
+
_say(cs.CLI_WARN_PRUNE_VECTORS_KEPT.format(project_name=project_name))
|
|
4113
|
+
|
|
4114
|
+
|
|
4115
|
+
@app.command(
|
|
4116
|
+
name=ch.CLICommandName.PRUNE,
|
|
4117
|
+
help=ch.CMD_PRUNE,
|
|
4118
|
+
short_help=ch.CMD_PRUNE,
|
|
4119
|
+
epilog=ch.EXAMPLES_PRUNE,
|
|
4120
|
+
rich_help_panel=ch.PANEL_MANAGE,
|
|
4121
|
+
)
|
|
4122
|
+
def prune(
|
|
4123
|
+
dry_run: bool = typer.Option(False, "--dry-run", help=ch.HELP_PRUNE_DRY_RUN),
|
|
4124
|
+
yes: bool = typer.Option(False, "--yes", "-y", help=ch.HELP_PRUNE_YES),
|
|
4125
|
+
) -> None:
|
|
4126
|
+
effective_batch_size = settings.resolve_batch_size(None)
|
|
4127
|
+
|
|
4128
|
+
try:
|
|
4129
|
+
with connect_memgraph(effective_batch_size) as ingestor:
|
|
4130
|
+
roots = ingestor.list_project_roots()
|
|
4131
|
+
candidates = _missing_root_candidates(roots)
|
|
4132
|
+
_report_prune_candidates(candidates)
|
|
4133
|
+
if not candidates or dry_run:
|
|
4134
|
+
if dry_run and candidates:
|
|
4135
|
+
_info(
|
|
4136
|
+
style(
|
|
4137
|
+
cs.CLI_MSG_PRUNE_DRY_RUN.format(count=len(candidates)),
|
|
4138
|
+
cs.Color.CYAN,
|
|
4139
|
+
)
|
|
4140
|
+
)
|
|
4141
|
+
return
|
|
4142
|
+
if not yes:
|
|
4143
|
+
if not _stdin_is_interactive():
|
|
4144
|
+
app_context.console.print(
|
|
4145
|
+
style(cs.CLI_ERR_PRUNE_NEEDS_CONFIRMATION, cs.Color.RED)
|
|
4146
|
+
)
|
|
4147
|
+
raise typer.Exit(1)
|
|
4148
|
+
confirmed = typer.confirm(
|
|
4149
|
+
cs.CLI_PROMPT_PRUNE_CONFIRM.format(count=len(candidates)),
|
|
4150
|
+
default=False,
|
|
4151
|
+
)
|
|
4152
|
+
if not confirmed:
|
|
4153
|
+
app_context.console.print(
|
|
4154
|
+
style(cs.CLI_MSG_PRUNE_ABORTED, cs.Color.CYAN)
|
|
4155
|
+
)
|
|
4156
|
+
raise typer.Exit(1)
|
|
4157
|
+
pruned, failures = _prune_projects(ingestor, candidates, list(roots))
|
|
4158
|
+
if pruned:
|
|
4159
|
+
_info(
|
|
4160
|
+
style(
|
|
4161
|
+
cs.CLI_MSG_PRUNE_DONE.format(count=len(pruned)),
|
|
4162
|
+
cs.Color.GREEN,
|
|
4163
|
+
)
|
|
4164
|
+
)
|
|
4165
|
+
if failures:
|
|
4166
|
+
raise typer.Exit(1)
|
|
4167
|
+
except typer.Exit:
|
|
4168
|
+
raise
|
|
4169
|
+
except GraphUnavailableError:
|
|
4170
|
+
raise
|
|
4171
|
+
except Exception as e:
|
|
4172
|
+
app_context.console.print(
|
|
4173
|
+
style(cs.CLI_ERR_PRUNE_RUN_FAILED.format(error=e), cs.Color.RED)
|
|
4174
|
+
)
|
|
4175
|
+
logger.exception(cs.CLI_ERR_PRUNE_RUN_FAILED.format(error=e))
|
|
4176
|
+
raise typer.Exit(1) from e
|
|
4177
|
+
|
|
4178
|
+
|
|
3841
4179
|
if __name__ == "__main__":
|
|
3842
4180
|
app()
|
|
@@ -15,6 +15,7 @@ class CLICommandName(StrEnum):
|
|
|
15
15
|
DEAD_CODE = "dead-code"
|
|
16
16
|
DUPLICATES = "duplicates"
|
|
17
17
|
DELETE_PROJECT = "delete-project"
|
|
18
|
+
PRUNE = "prune"
|
|
18
19
|
DAEMON = "daemon"
|
|
19
20
|
WORKSPACE = "workspace"
|
|
20
21
|
TRACE = "trace"
|
|
@@ -724,6 +725,10 @@ HELP_DELETE_PROJECT_REPO_PATH = (
|
|
|
724
725
|
"Repository whose project to delete when --project is not given. Its "
|
|
725
726
|
"local hash cache is removed too."
|
|
726
727
|
)
|
|
728
|
+
HELP_PRUNE_DRY_RUN = "List the projects that would be pruned without deleting anything."
|
|
729
|
+
HELP_PRUNE_YES = "Prune without asking for confirmation."
|
|
730
|
+
CMD_PRUNE = "Prune projects whose repository root no longer exists"
|
|
731
|
+
EXAMPLES_PRUNE = "EXAMPLE\n\n cgr prune --dry-run\n\n cgr prune --yes"
|
|
727
732
|
HELP_COMMAND = "Command path to document, such as 'start' or 'daemon logs'."
|
|
728
733
|
|
|
729
734
|
CMD_VERIFY_INDEX = "Verify a protobuf index against its provenance manifest"
|
|
@@ -741,6 +746,7 @@ CLI_COMMANDS: dict[CLICommandName, str] = {
|
|
|
741
746
|
CLICommandName.DEAD_CODE: CMD_DEAD_CODE,
|
|
742
747
|
CLICommandName.DUPLICATES: CMD_DUPLICATES,
|
|
743
748
|
CLICommandName.DELETE_PROJECT: CMD_DELETE_PROJECT,
|
|
749
|
+
CLICommandName.PRUNE: CMD_PRUNE,
|
|
744
750
|
CLICommandName.LANGUAGE: CMD_LANGUAGE,
|
|
745
751
|
CLICommandName.DAEMON: CMD_DAEMON,
|
|
746
752
|
CLICommandName.TRACE: CMD_TRACE,
|
|
@@ -110,6 +110,7 @@ TS_FUNCTION_EXPRESSION = "function_expression"
|
|
|
110
110
|
# (`get thing() {...}`); its presence marks the method as a property whose
|
|
111
111
|
# reads are member accesses, not invocations.
|
|
112
112
|
TS_GET_ACCESSOR_KEYWORD = "get"
|
|
113
|
+
TS_SET_ACCESSOR_KEYWORD = "set"
|
|
113
114
|
TS_ARROW_FUNCTION = "arrow_function"
|
|
114
115
|
TS_REQUIRED_PARAMETER = "required_parameter"
|
|
115
116
|
TS_OPTIONAL_PARAMETER = "optional_parameter"
|
|
@@ -49,6 +49,13 @@ TS_PY_ASYNC = "async"
|
|
|
49
49
|
# target is bound to: `with` calls `__enter__`, `async with` awaits `__aenter__`.
|
|
50
50
|
PY_DUNDER_ENTER = "__enter__"
|
|
51
51
|
PY_DUNDER_AENTER = "__aenter__"
|
|
52
|
+
# ...and what it calls when the block is left, however it is left.
|
|
53
|
+
PY_DUNDER_EXIT = "__exit__"
|
|
54
|
+
PY_DUNDER_AEXIT = "__aexit__"
|
|
55
|
+
# `name` then, on the same line and statement, an `=`: a plain, annotated,
|
|
56
|
+
# chained, unpacking or walrus assignment to it (and some comparisons and
|
|
57
|
+
# keyword arguments, harmlessly). `{name}` is the escaped name.
|
|
58
|
+
PY_ASSIGNED_NAME_PATTERN = r"\b{name}\b[^=\n;]*="
|
|
52
59
|
# The `if TYPE_CHECKING:` guard (bare or `typing.`-qualified): its body is
|
|
53
60
|
# read by type checkers only and binds nothing at runtime.
|
|
54
61
|
PY_TYPE_CHECKING = "TYPE_CHECKING"
|
|
@@ -521,6 +528,11 @@ PY_COMPREHENSION_TYPES = frozenset(
|
|
|
521
528
|
# tree stays alive outside the AST cache's memory cap, so the cache holds a
|
|
522
529
|
# few trees, all of whose scopes it keeps, rather than a number of scopes.
|
|
523
530
|
PY_SCOPE_CACHE_TREES = 8
|
|
531
|
+
# Trees whose definition indexes stay cached (`PythonDefinitionIndexes`), for
|
|
532
|
+
# the same reason. Lookups cluster by file: indexing code-graph-rag's own tree
|
|
533
|
+
# made 12,944 lookups into 1,375 files, and keeping 8 trees answered 83% of
|
|
534
|
+
# them from an index (keeping every tree, 89%).
|
|
535
|
+
PY_DEFINITION_INDEX_TREES = 8
|
|
524
536
|
# The callable-parameter scan (`parsers/utils.py`, and the tree bridge's port
|
|
525
537
|
# of it for the interface fingerprint): the scopes that capture an enclosing
|
|
526
538
|
# def's parameters, and the ones it never enters.
|