code-graph-rag 0.4.5__tar.gz → 0.5.0__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.5.0}/PKG-INFO +2 -2
- {code_graph_rag-0.4.5 → code_graph_rag-0.5.0}/README.md +3 -1
- {code_graph_rag-0.4.5 → code_graph_rag-0.5.0/code_graph_rag.egg-info}/PKG-INFO +2 -2
- {code_graph_rag-0.4.5 → code_graph_rag-0.5.0}/code_graph_rag.egg-info/SOURCES.txt +6 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.5.0}/code_graph_rag.egg-info/requires.txt +1 -1
- {code_graph_rag-0.4.5 → code_graph_rag-0.5.0}/codebase_rag/cli.py +355 -17
- {code_graph_rag-0.4.5 → code_graph_rag-0.5.0}/codebase_rag/cli_help.py +8 -1
- {code_graph_rag-0.4.5 → code_graph_rag-0.5.0}/codebase_rag/config.py +17 -2
- {code_graph_rag-0.4.5 → code_graph_rag-0.5.0}/codebase_rag/constants/ast_js.py +22 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.5.0}/codebase_rag/constants/ast_python.py +12 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.5.0}/codebase_rag/constants/cli.py +131 -4
- {code_graph_rag-0.4.5 → code_graph_rag-0.5.0}/codebase_rag/constants/core.py +5 -1
- {code_graph_rag-0.4.5 → code_graph_rag-0.5.0}/codebase_rag/constants/duplicates.py +31 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.5.0}/codebase_rag/constants/embedded_graph.py +22 -2
- {code_graph_rag-0.4.5 → code_graph_rag-0.5.0}/codebase_rag/constants/graph.py +22 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.5.0}/codebase_rag/constants/languages.py +44 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.5.0}/codebase_rag/constants/mcp.py +9 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.5.0}/codebase_rag/constants/security.py +36 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.5.0}/codebase_rag/context_slice.py +6 -4
- {code_graph_rag-0.4.5 → code_graph_rag-0.5.0}/codebase_rag/cypher_queries.py +209 -17
- {code_graph_rag-0.4.5 → code_graph_rag-0.5.0}/codebase_rag/docker-compose.yaml +1 -1
- {code_graph_rag-0.4.5 → code_graph_rag-0.5.0}/codebase_rag/editing/signature.py +74 -39
- {code_graph_rag-0.4.5 → code_graph_rag-0.5.0}/codebase_rag/editing/signature_bind.py +5 -2
- code_graph_rag-0.5.0/codebase_rag/editing/signature_js.py +249 -0
- code_graph_rag-0.5.0/codebase_rag/editing/signature_js_bind.py +265 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.5.0}/codebase_rag/editing/signature_spec.py +50 -7
- {code_graph_rag-0.4.5 → code_graph_rag-0.5.0}/codebase_rag/editing/transaction.py +6 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.5.0}/codebase_rag/exceptions.py +5 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.5.0}/codebase_rag/gloss.py +31 -1
- {code_graph_rag-0.4.5 → code_graph_rag-0.5.0}/codebase_rag/gloss_repair.py +395 -17
- {code_graph_rag-0.4.5 → code_graph_rag-0.5.0}/codebase_rag/graph_updater.py +11 -2
- {code_graph_rag-0.4.5 → code_graph_rag-0.5.0}/codebase_rag/logs.py +19 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.5.0}/codebase_rag/mcp/server.py +69 -10
- {code_graph_rag-0.4.5 → code_graph_rag-0.5.0}/codebase_rag/mcp/tools.py +11 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.5.0}/codebase_rag/parser_loader.py +30 -12
- {code_graph_rag-0.4.5 → code_graph_rag-0.5.0}/codebase_rag/parsers/call_processor.py +626 -35
- {code_graph_rag-0.4.5 → code_graph_rag-0.5.0}/codebase_rag/parsers/flow_access/processor.py +2 -55
- {code_graph_rag-0.4.5 → code_graph_rag-0.5.0}/codebase_rag/parsers/java/type_resolver.py +3 -2
- {code_graph_rag-0.4.5 → code_graph_rag-0.5.0}/codebase_rag/parsers/native_trees.py +58 -5
- {code_graph_rag-0.4.5 → code_graph_rag-0.5.0}/codebase_rag/parsers/py/ast_analyzer.py +58 -69
- code_graph_rag-0.5.0/codebase_rag/parsers/py/definition_index.py +149 -0
- code_graph_rag-0.5.0/codebase_rag/parsers/py/flow_bindings.py +794 -0
- code_graph_rag-0.5.0/codebase_rag/parsers/py/patterns.py +66 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.5.0}/codebase_rag/parsers/py/type_inference.py +19 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.5.0}/codebase_rag/parsers/py/variable_analyzer.py +180 -111
- {code_graph_rag-0.4.5 → code_graph_rag-0.5.0}/codebase_rag/parsers/utils.py +17 -1
- code_graph_rag-0.5.0/codebase_rag/sensitive_paths.py +164 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.5.0}/codebase_rag/services/graph_service.py +68 -9
- code_graph_rag-0.5.0/codebase_rag/source_checkout.py +29 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.5.0}/codebase_rag/structural_delta.py +692 -20
- {code_graph_rag-0.4.5 → code_graph_rag-0.5.0}/codebase_rag/sync_guard.py +119 -2
- {code_graph_rag-0.4.5 → code_graph_rag-0.5.0}/codebase_rag/tool_errors.py +11 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.5.0}/codebase_rag/tools/file_editor.py +10 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.5.0}/codebase_rag/tools/file_writer.py +5 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.5.0}/codebase_rag/tools/language.py +2 -20
- {code_graph_rag-0.4.5 → code_graph_rag-0.5.0}/codebase_rag/tools/tool_descriptions.py +7 -1
- {code_graph_rag-0.4.5 → code_graph_rag-0.5.0}/codebase_rag/types_defs.py +35 -1
- {code_graph_rag-0.4.5 → code_graph_rag-0.5.0}/codebase_rag/utils/path_utils.py +25 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.5.0}/pyproject.toml +4 -25
- code_graph_rag-0.4.5/codebase_rag/sensitive_paths.py +0 -41
- {code_graph_rag-0.4.5 → code_graph_rag-0.5.0}/LICENSE +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.5.0}/PYPI_README.md +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.5.0}/cgr/__init__.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.5.0}/code_graph_rag.egg-info/dependency_links.txt +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.5.0}/code_graph_rag.egg-info/entry_points.txt +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.5.0}/code_graph_rag.egg-info/top_level.txt +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.5.0}/codebase_rag/__init__.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.5.0}/codebase_rag/_cli_env.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.5.0}/codebase_rag/analyzers/__init__.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.5.0}/codebase_rag/analyzers/ast_grep_analyzer.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.5.0}/codebase_rag/analyzers/ast_grep_rules/patterns/c.yaml +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.5.0}/codebase_rag/analyzers/ast_grep_rules/patterns/cpp.yaml +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.5.0}/codebase_rag/analyzers/ast_grep_rules/patterns/csharp.yaml +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.5.0}/codebase_rag/analyzers/ast_grep_rules/patterns/dart.yaml +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.5.0}/codebase_rag/analyzers/ast_grep_rules/patterns/go.yaml +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.5.0}/codebase_rag/analyzers/ast_grep_rules/patterns/java.yaml +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.5.0}/codebase_rag/analyzers/ast_grep_rules/patterns/javascript.yaml +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.5.0}/codebase_rag/analyzers/ast_grep_rules/patterns/lua.yaml +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.5.0}/codebase_rag/analyzers/ast_grep_rules/patterns/php.yaml +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.5.0}/codebase_rag/analyzers/ast_grep_rules/patterns/python.yaml +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.5.0}/codebase_rag/analyzers/ast_grep_rules/patterns/ruby.yaml +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.5.0}/codebase_rag/analyzers/ast_grep_rules/patterns/rust.yaml +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.5.0}/codebase_rag/analyzers/ast_grep_rules/patterns/scala.yaml +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.5.0}/codebase_rag/analyzers/ast_grep_rules/patterns/tsx.yaml +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.5.0}/codebase_rag/analyzers/ast_grep_rules/patterns/typescript.yaml +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.5.0}/codebase_rag/analyzers/ast_grep_rules/security/c.yaml +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.5.0}/codebase_rag/analyzers/ast_grep_rules/security/cpp.yaml +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.5.0}/codebase_rag/analyzers/ast_grep_rules/security/csharp.yaml +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.5.0}/codebase_rag/analyzers/ast_grep_rules/security/dart.yaml +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.5.0}/codebase_rag/analyzers/ast_grep_rules/security/go.yaml +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.5.0}/codebase_rag/analyzers/ast_grep_rules/security/java.yaml +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.5.0}/codebase_rag/analyzers/ast_grep_rules/security/javascript.yaml +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.5.0}/codebase_rag/analyzers/ast_grep_rules/security/lua.yaml +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.5.0}/codebase_rag/analyzers/ast_grep_rules/security/php.yaml +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.5.0}/codebase_rag/analyzers/ast_grep_rules/security/python.yaml +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.5.0}/codebase_rag/analyzers/ast_grep_rules/security/ruby.yaml +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.5.0}/codebase_rag/analyzers/ast_grep_rules/security/rust.yaml +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.5.0}/codebase_rag/analyzers/ast_grep_rules/security/scala.yaml +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.5.0}/codebase_rag/analyzers/ast_grep_rules/security/tsx.yaml +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.5.0}/codebase_rag/analyzers/ast_grep_rules/security/typescript.yaml +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.5.0}/codebase_rag/analyzers/ast_grep_rules/smells/c.yaml +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.5.0}/codebase_rag/analyzers/ast_grep_rules/smells/cpp.yaml +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.5.0}/codebase_rag/analyzers/ast_grep_rules/smells/csharp.yaml +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.5.0}/codebase_rag/analyzers/ast_grep_rules/smells/dart.yaml +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.5.0}/codebase_rag/analyzers/ast_grep_rules/smells/go.yaml +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.5.0}/codebase_rag/analyzers/ast_grep_rules/smells/java.yaml +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.5.0}/codebase_rag/analyzers/ast_grep_rules/smells/javascript.yaml +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.5.0}/codebase_rag/analyzers/ast_grep_rules/smells/lua.yaml +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.5.0}/codebase_rag/analyzers/ast_grep_rules/smells/php.yaml +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.5.0}/codebase_rag/analyzers/ast_grep_rules/smells/python.yaml +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.5.0}/codebase_rag/analyzers/ast_grep_rules/smells/ruby.yaml +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.5.0}/codebase_rag/analyzers/ast_grep_rules/smells/rust.yaml +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.5.0}/codebase_rag/analyzers/ast_grep_rules/smells/scala.yaml +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.5.0}/codebase_rag/analyzers/ast_grep_rules/smells/tsx.yaml +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.5.0}/codebase_rag/analyzers/ast_grep_rules/smells/typescript.yaml +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.5.0}/codebase_rag/ast_cache.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.5.0}/codebase_rag/capture.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.5.0}/codebase_rag/check_isolation.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.5.0}/codebase_rag/checkout_state.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.5.0}/codebase_rag/cli_runtime.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.5.0}/codebase_rag/console_marks.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.5.0}/codebase_rag/constants/__init__.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.5.0}/codebase_rag/constants/ast_cpp.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.5.0}/codebase_rag/constants/ast_csharp.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.5.0}/codebase_rag/constants/ast_dart.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.5.0}/codebase_rag/constants/ast_go.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.5.0}/codebase_rag/constants/ast_java.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.5.0}/codebase_rag/constants/ast_julia.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.5.0}/codebase_rag/constants/ast_lua.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.5.0}/codebase_rag/constants/ast_nodes.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.5.0}/codebase_rag/constants/ast_php.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.5.0}/codebase_rag/constants/ast_rust.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.5.0}/codebase_rag/constants/ast_scala.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.5.0}/codebase_rag/constants/ast_sql.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.5.0}/codebase_rag/constants/build.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.5.0}/codebase_rag/constants/deadcode_roots.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.5.0}/codebase_rag/constants/deps.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.5.0}/codebase_rag/constants/fqn_specs.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.5.0}/codebase_rag/constants/health.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.5.0}/codebase_rag/constants/interface.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.5.0}/codebase_rag/constants/lang_tooling.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.5.0}/codebase_rag/constants/notebook.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.5.0}/codebase_rag/constants/port.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.5.0}/codebase_rag/constants/providers.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.5.0}/codebase_rag/constants/sqlite_vectors.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.5.0}/codebase_rag/constants/stdlib_types.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.5.0}/codebase_rag/constants/structural.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.5.0}/codebase_rag/constants/trace.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.5.0}/codebase_rag/context_pruning.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.5.0}/codebase_rag/crash_correlation.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.5.0}/codebase_rag/dead_code.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.5.0}/codebase_rag/decorators.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.5.0}/codebase_rag/duplicates.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.5.0}/codebase_rag/editing/__init__.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.5.0}/codebase_rag/editing/cli.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.5.0}/codebase_rag/editing/contract.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.5.0}/codebase_rag/editing/import_paths.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.5.0}/codebase_rag/editing/imports.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.5.0}/codebase_rag/editing/occurrences.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.5.0}/codebase_rag/editing/patcher.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.5.0}/codebase_rag/editing/rename.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.5.0}/codebase_rag/editing/signature_contract.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.5.0}/codebase_rag/editing/sites.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.5.0}/codebase_rag/editor_links.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.5.0}/codebase_rag/embedded_graph/__init__.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.5.0}/codebase_rag/embedded_graph/compiler.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.5.0}/codebase_rag/embedded_graph/connection.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.5.0}/codebase_rag/embedded_graph/cypher_ast.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.5.0}/codebase_rag/embedded_graph/executor.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.5.0}/codebase_rag/embedded_graph/expressions.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.5.0}/codebase_rag/embedded_graph/extension.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.5.0}/codebase_rag/embedded_graph/functions.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.5.0}/codebase_rag/embedded_graph/lexer.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.5.0}/codebase_rag/embedded_graph/limits.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.5.0}/codebase_rag/embedded_graph/native.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.5.0}/codebase_rag/embedded_graph/parser.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.5.0}/codebase_rag/embedded_graph/procedures.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.5.0}/codebase_rag/embedded_graph/sql.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.5.0}/codebase_rag/embedded_graph/store.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.5.0}/codebase_rag/embedded_graph/types.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.5.0}/codebase_rag/embedder.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.5.0}/codebase_rag/flow_verdict.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.5.0}/codebase_rag/function_registry.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.5.0}/codebase_rag/gloss_anchor.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.5.0}/codebase_rag/graph_audit.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.5.0}/codebase_rag/graph_cli.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.5.0}/codebase_rag/graph_dialects.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.5.0}/codebase_rag/graph_loader.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.5.0}/codebase_rag/graph_query.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.5.0}/codebase_rag/instructions_trust.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.5.0}/codebase_rag/interface_skip.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.5.0}/codebase_rag/language_spec.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.5.0}/codebase_rag/main.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.5.0}/codebase_rag/mcp/__init__.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.5.0}/codebase_rag/mcp/client.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.5.0}/codebase_rag/mgclient_compat.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.5.0}/codebase_rag/mgclient_probe.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.5.0}/codebase_rag/models.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.5.0}/codebase_rag/parser_fingerprint.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.5.0}/codebase_rag/parsers/__init__.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.5.0}/codebase_rag/parsers/anchor_hash.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.5.0}/codebase_rag/parsers/ast_fingerprint.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.5.0}/codebase_rag/parsers/ast_grep_patterns/bash.yaml +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.5.0}/codebase_rag/parsers/ast_grep_patterns/elixir.yaml +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.5.0}/codebase_rag/parsers/ast_grep_patterns/haskell.yaml +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.5.0}/codebase_rag/parsers/ast_grep_patterns/kotlin.yaml +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.5.0}/codebase_rag/parsers/ast_grep_patterns/nix.yaml +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.5.0}/codebase_rag/parsers/ast_grep_patterns/ruby.yaml +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.5.0}/codebase_rag/parsers/ast_grep_patterns/solidity.yaml +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.5.0}/codebase_rag/parsers/ast_grep_patterns/swift.yaml +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.5.0}/codebase_rag/parsers/ast_grep_scope.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.5.0}/codebase_rag/parsers/ast_grep_tier.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.5.0}/codebase_rag/parsers/build_lock.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.5.0}/codebase_rag/parsers/call_resolver.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.5.0}/codebase_rag/parsers/class_ingest/__init__.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.5.0}/codebase_rag/parsers/class_ingest/base_targets.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.5.0}/codebase_rag/parsers/class_ingest/cpp_modules.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.5.0}/codebase_rag/parsers/class_ingest/identity.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.5.0}/codebase_rag/parsers/class_ingest/method_override.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.5.0}/codebase_rag/parsers/class_ingest/mixin.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.5.0}/codebase_rag/parsers/class_ingest/node_type.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.5.0}/codebase_rag/parsers/class_ingest/parent_extraction.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.5.0}/codebase_rag/parsers/class_ingest/relationships.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.5.0}/codebase_rag/parsers/class_ingest/utils.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.5.0}/codebase_rag/parsers/contract_linking.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.5.0}/codebase_rag/parsers/contracts.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.5.0}/codebase_rag/parsers/cpp/__init__.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.5.0}/codebase_rag/parsers/cpp/class_macro.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.5.0}/codebase_rag/parsers/cpp/function_values.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.5.0}/codebase_rag/parsers/cpp/local_types.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.5.0}/codebase_rag/parsers/cpp/overloads.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.5.0}/codebase_rag/parsers/cpp/preproc_recovery.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.5.0}/codebase_rag/parsers/cpp/trailing_annotation.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.5.0}/codebase_rag/parsers/cpp/type_inference.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.5.0}/codebase_rag/parsers/cpp/utils.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.5.0}/codebase_rag/parsers/cpp_frontend/__init__.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.5.0}/codebase_rag/parsers/cpp_frontend/constants.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.5.0}/codebase_rag/parsers/cpp_frontend/frontend.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.5.0}/codebase_rag/parsers/cpp_frontend/qn.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.5.0}/codebase_rag/parsers/csharp/__init__.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.5.0}/codebase_rag/parsers/csharp/arity.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.5.0}/codebase_rag/parsers/csharp/type_inference.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.5.0}/codebase_rag/parsers/csharp/utils.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.5.0}/codebase_rag/parsers/csharp_frontend/__init__.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.5.0}/codebase_rag/parsers/csharp_frontend/frontend.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.5.0}/codebase_rag/parsers/csharp_frontend/roslyn/Frontend.cs +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.5.0}/codebase_rag/parsers/csharp_frontend/roslyn/Frontend.csproj +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.5.0}/codebase_rag/parsers/csharp_frontend/roslyn/Program.cs +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.5.0}/codebase_rag/parsers/dart/__init__.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.5.0}/codebase_rag/parsers/dart/package_paths.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.5.0}/codebase_rag/parsers/dart/type_inference.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.5.0}/codebase_rag/parsers/dart/utils.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.5.0}/codebase_rag/parsers/definition_docstring.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.5.0}/codebase_rag/parsers/definition_processor.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.5.0}/codebase_rag/parsers/dependency_parser.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.5.0}/codebase_rag/parsers/dispatch_registry.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.5.0}/codebase_rag/parsers/document_tier.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.5.0}/codebase_rag/parsers/endpoint_prefixes.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.5.0}/codebase_rag/parsers/endpoint_routes.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.5.0}/codebase_rag/parsers/endpoints.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.5.0}/codebase_rag/parsers/enum_variants.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.5.0}/codebase_rag/parsers/export_detection.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.5.0}/codebase_rag/parsers/factory.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.5.0}/codebase_rag/parsers/field_nodes.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.5.0}/codebase_rag/parsers/flat_module.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.5.0}/codebase_rag/parsers/flow_access/__init__.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.5.0}/codebase_rag/parsers/flow_access/constants.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.5.0}/codebase_rag/parsers/frontend_mode.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.5.0}/codebase_rag/parsers/frontends/__init__.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.5.0}/codebase_rag/parsers/frontends/cpp.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.5.0}/codebase_rag/parsers/frontends/csharp.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.5.0}/codebase_rag/parsers/frontends/go.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.5.0}/codebase_rag/parsers/frontends/java.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.5.0}/codebase_rag/parsers/frontends/protocol.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.5.0}/codebase_rag/parsers/frontends/python.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.5.0}/codebase_rag/parsers/frontends/registry.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.5.0}/codebase_rag/parsers/function_ingest.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.5.0}/codebase_rag/parsers/go/__init__.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.5.0}/codebase_rag/parsers/go/builds.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.5.0}/codebase_rag/parsers/go/interface_ingest.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.5.0}/codebase_rag/parsers/go/interfaces.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.5.0}/codebase_rag/parsers/go/link_state.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.5.0}/codebase_rag/parsers/go/module_paths.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.5.0}/codebase_rag/parsers/go/type_inference.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.5.0}/codebase_rag/parsers/go/utils.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.5.0}/codebase_rag/parsers/go_frontend/__init__.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.5.0}/codebase_rag/parsers/go_frontend/frontend.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.5.0}/codebase_rag/parsers/go_frontend/gotypes/go.mod +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.5.0}/codebase_rag/parsers/go_frontend/gotypes/go.sum +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.5.0}/codebase_rag/parsers/go_frontend/gotypes/main.go +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.5.0}/codebase_rag/parsers/handlers/__init__.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.5.0}/codebase_rag/parsers/handlers/base.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.5.0}/codebase_rag/parsers/handlers/cpp.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.5.0}/codebase_rag/parsers/handlers/java.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.5.0}/codebase_rag/parsers/handlers/js_ts.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.5.0}/codebase_rag/parsers/handlers/julia.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.5.0}/codebase_rag/parsers/handlers/lua.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.5.0}/codebase_rag/parsers/handlers/php.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.5.0}/codebase_rag/parsers/handlers/protocol.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.5.0}/codebase_rag/parsers/handlers/python.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.5.0}/codebase_rag/parsers/handlers/registry.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.5.0}/codebase_rag/parsers/handlers/rust.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.5.0}/codebase_rag/parsers/import_processor.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.5.0}/codebase_rag/parsers/interface_fingerprint.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.5.0}/codebase_rag/parsers/io_access/__init__.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.5.0}/codebase_rag/parsers/io_access/constants.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.5.0}/codebase_rag/parsers/io_access/descriptor.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.5.0}/codebase_rag/parsers/io_access/extract.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.5.0}/codebase_rag/parsers/io_access/models.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.5.0}/codebase_rag/parsers/io_access/processor.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.5.0}/codebase_rag/parsers/io_access/registry.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.5.0}/codebase_rag/parsers/io_access/resource_names.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.5.0}/codebase_rag/parsers/io_access/url_folding.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.5.0}/codebase_rag/parsers/java/__init__.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.5.0}/codebase_rag/parsers/java/method_resolver.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.5.0}/codebase_rag/parsers/java/type_inference.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.5.0}/codebase_rag/parsers/java/utils.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.5.0}/codebase_rag/parsers/java/variable_analyzer.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.5.0}/codebase_rag/parsers/java_frontend/__init__.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.5.0}/codebase_rag/parsers/java_frontend/frontend.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.5.0}/codebase_rag/parsers/java_frontend/javac/cgr/Frontend.java +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.5.0}/codebase_rag/parsers/java_generated.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.5.0}/codebase_rag/parsers/java_lombok.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.5.0}/codebase_rag/parsers/js_ts/__init__.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.5.0}/codebase_rag/parsers/js_ts/commonjs_exports.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.5.0}/codebase_rag/parsers/js_ts/ingest.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.5.0}/codebase_rag/parsers/js_ts/module_paths.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.5.0}/codebase_rag/parsers/js_ts/module_system.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.5.0}/codebase_rag/parsers/js_ts/overloads.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.5.0}/codebase_rag/parsers/js_ts/reexports.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.5.0}/codebase_rag/parsers/js_ts/type_inference.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.5.0}/codebase_rag/parsers/js_ts/utils.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.5.0}/codebase_rag/parsers/julia/__init__.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.5.0}/codebase_rag/parsers/julia/utils.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.5.0}/codebase_rag/parsers/lua/__init__.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.5.0}/codebase_rag/parsers/lua/type_inference.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.5.0}/codebase_rag/parsers/lua/utils.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.5.0}/codebase_rag/parsers/module_docstring.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.5.0}/codebase_rag/parsers/notebook.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.5.0}/codebase_rag/parsers/parameter_nodes.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.5.0}/codebase_rag/parsers/php/__init__.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.5.0}/codebase_rag/parsers/php/class_names.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.5.0}/codebase_rag/parsers/php/namespaces.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.5.0}/codebase_rag/parsers/php/utils.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.5.0}/codebase_rag/parsers/positional_params.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.5.0}/codebase_rag/parsers/py/__init__.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.5.0}/codebase_rag/parsers/py/class_aliases.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.5.0}/codebase_rag/parsers/py/expression_analyzer.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.5.0}/codebase_rag/parsers/py/forward_refs.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.5.0}/codebase_rag/parsers/py/overloads.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.5.0}/codebase_rag/parsers/py/receiver_rebinding.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.5.0}/codebase_rag/parsers/py/utils.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.5.0}/codebase_rag/parsers/py/with_analyzer.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.5.0}/codebase_rag/parsers/py_frontend/__init__.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.5.0}/codebase_rag/parsers/py_frontend/frontend.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.5.0}/codebase_rag/parsers/python_source_roots.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.5.0}/codebase_rag/parsers/rpc_exposure.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.5.0}/codebase_rag/parsers/rs/__init__.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.5.0}/codebase_rag/parsers/rs/cargo_semver.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.5.0}/codebase_rag/parsers/rs/type_inference.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.5.0}/codebase_rag/parsers/rs/utils.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.5.0}/codebase_rag/parsers/scala/__init__.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.5.0}/codebase_rag/parsers/scala/utils.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.5.0}/codebase_rag/parsers/semantic_call_join.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.5.0}/codebase_rag/parsers/sql_ddl.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.5.0}/codebase_rag/parsers/sql_recovery.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.5.0}/codebase_rag/parsers/stdlib_extractor.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.5.0}/codebase_rag/parsers/string_call.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.5.0}/codebase_rag/parsers/structure_processor.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.5.0}/codebase_rag/parsers/type_facts.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.5.0}/codebase_rag/parsers/type_inference.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.5.0}/codebase_rag/path_filters.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.5.0}/codebase_rag/port_cli.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.5.0}/codebase_rag/port_parity.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.5.0}/codebase_rag/project_selection.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.5.0}/codebase_rag/prompts.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.5.0}/codebase_rag/providers/__init__.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.5.0}/codebase_rag/providers/base.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.5.0}/codebase_rag/providers/litellm.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.5.0}/codebase_rag/queries/highlights/c_sharp.scm +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.5.0}/codebase_rag/queries/highlights/dart.scm +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.5.0}/codebase_rag/queries/highlights/java.scm +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.5.0}/codebase_rag/queries/highlights/javascript.scm +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.5.0}/codebase_rag/queries/highlights/julia.scm +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.5.0}/codebase_rag/queries/highlights/php.scm +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.5.0}/codebase_rag/queries/highlights/python.scm +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.5.0}/codebase_rag/queries/highlights/rust.scm +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.5.0}/codebase_rag/queries/highlights/typescript.scm +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.5.0}/codebase_rag/readme_sections.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.5.0}/codebase_rag/schema_builder.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.5.0}/codebase_rag/schema_parse.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.5.0}/codebase_rag/schemas.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.5.0}/codebase_rag/services/__init__.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.5.0}/codebase_rag/services/anthropic_token_counter.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.5.0}/codebase_rag/services/cypher_guard.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.5.0}/codebase_rag/services/filtering.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.5.0}/codebase_rag/services/gloss_cleanup.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.5.0}/codebase_rag/services/graph_diff.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.5.0}/codebase_rag/services/llm.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.5.0}/codebase_rag/services/neo4j_driver.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.5.0}/codebase_rag/services/protobuf_service.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.5.0}/codebase_rag/services/provenance.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.5.0}/codebase_rag/services/resource_cleanup.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.5.0}/codebase_rag/services/usage_cost.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.5.0}/codebase_rag/sql_names.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.5.0}/codebase_rag/sqlite_vectors.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.5.0}/codebase_rag/stack/__init__.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.5.0}/codebase_rag/stack/cli.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.5.0}/codebase_rag/stack/constants.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.5.0}/codebase_rag/stack/health.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.5.0}/codebase_rag/stack/manager.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.5.0}/codebase_rag/structural_check.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.5.0}/codebase_rag/sync_lock.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.5.0}/codebase_rag/taint.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.5.0}/codebase_rag/tools/__init__.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.5.0}/codebase_rag/tools/ast_grep_service.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.5.0}/codebase_rag/tools/code_retrieval.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.5.0}/codebase_rag/tools/codebase_query.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.5.0}/codebase_rag/tools/directory_lister.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.5.0}/codebase_rag/tools/duplicate_detection.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.5.0}/codebase_rag/tools/file_reader.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.5.0}/codebase_rag/tools/graph_refresh.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.5.0}/codebase_rag/tools/graph_rerank.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.5.0}/codebase_rag/tools/health_checker.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.5.0}/codebase_rag/tools/language_catalog.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.5.0}/codebase_rag/tools/research.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.5.0}/codebase_rag/tools/semantic_search.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.5.0}/codebase_rag/tools/shell_command.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.5.0}/codebase_rag/tools/structural_editor.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.5.0}/codebase_rag/tools/structural_search.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.5.0}/codebase_rag/tools/web_search.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.5.0}/codebase_rag/trace/__init__.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.5.0}/codebase_rag/trace/carry.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.5.0}/codebase_rag/trace/cli.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.5.0}/codebase_rag/trace/cpuprofile.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.5.0}/codebase_rag/trace/dispatch_site.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.5.0}/codebase_rag/trace/ebpf_pprof.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.5.0}/codebase_rag/trace/ingest.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.5.0}/codebase_rag/trace/instrumented.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.5.0}/codebase_rag/trace/pprof.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.5.0}/codebase_rag/trace/pytest_plugin.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.5.0}/codebase_rag/trace/records.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.5.0}/codebase_rag/trace/resolution.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.5.0}/codebase_rag/trace/rust_pprof.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.5.0}/codebase_rag/trace/sourcemap.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.5.0}/codebase_rag/trace/speedscope.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.5.0}/codebase_rag/trace/tracer.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.5.0}/codebase_rag/trace/xdebug.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.5.0}/codebase_rag/tree_sitter_point.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.5.0}/codebase_rag/unixcoder.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.5.0}/codebase_rag/utils/__init__.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.5.0}/codebase_rag/utils/cpp_signatures.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.5.0}/codebase_rag/utils/dependencies.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.5.0}/codebase_rag/utils/endpoints.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.5.0}/codebase_rag/utils/fqn_resolver.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.5.0}/codebase_rag/utils/interruptible_thread.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.5.0}/codebase_rag/utils/json_io.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.5.0}/codebase_rag/utils/process_owner.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.5.0}/codebase_rag/utils/qn_markers.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.5.0}/codebase_rag/utils/rich_markdown.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.5.0}/codebase_rag/utils/source_encoding.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.5.0}/codebase_rag/utils/source_extraction.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.5.0}/codebase_rag/utils/terminal_console.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.5.0}/codebase_rag/utils/token_utils.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.5.0}/codebase_rag/vector_store.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.5.0}/codebase_rag/watch.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.5.0}/codebase_rag/workspaces/__init__.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.5.0}/codebase_rag/workspaces/cli.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.5.0}/codebase_rag/workspaces/constants.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.5.0}/codebase_rag/workspaces/models.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.5.0}/codebase_rag/workspaces/storage.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.5.0}/codec/__init__.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.5.0}/codec/schema.proto +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.5.0}/codec/schema_pb2.py +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.5.0}/codec/schema_pb2.pyi +0 -0
- {code_graph_rag-0.4.5 → code_graph_rag-0.5.0}/setup.cfg +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: code-graph-rag
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.5.0
|
|
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,9 @@ 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
|
+
- **Rust Upgrade**: Updated Rust to version 1.99.1-slim-trixie.
|
|
65
|
+
- **Signature Functionality**: Added support for reading and writing JavaScript headers for change signatures, including the ability to change the signature of JavaScript functions or methods.
|
|
66
|
+
- **macOS Compatibility**: The build now leaves macOS-14 support.
|
|
65
67
|
<!-- /SECTION:latest_news -->
|
|
66
68
|
|
|
67
69
|
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.
|
|
3
|
+
Version: 0.5.0
|
|
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
|
|
@@ -170,6 +171,8 @@ codebase_rag/editing/rename.py
|
|
|
170
171
|
codebase_rag/editing/signature.py
|
|
171
172
|
codebase_rag/editing/signature_bind.py
|
|
172
173
|
codebase_rag/editing/signature_contract.py
|
|
174
|
+
codebase_rag/editing/signature_js.py
|
|
175
|
+
codebase_rag/editing/signature_js_bind.py
|
|
173
176
|
codebase_rag/editing/signature_spec.py
|
|
174
177
|
codebase_rag/editing/sites.py
|
|
175
178
|
codebase_rag/editing/transaction.py
|
|
@@ -357,9 +360,12 @@ codebase_rag/parsers/php/utils.py
|
|
|
357
360
|
codebase_rag/parsers/py/__init__.py
|
|
358
361
|
codebase_rag/parsers/py/ast_analyzer.py
|
|
359
362
|
codebase_rag/parsers/py/class_aliases.py
|
|
363
|
+
codebase_rag/parsers/py/definition_index.py
|
|
360
364
|
codebase_rag/parsers/py/expression_analyzer.py
|
|
365
|
+
codebase_rag/parsers/py/flow_bindings.py
|
|
361
366
|
codebase_rag/parsers/py/forward_refs.py
|
|
362
367
|
codebase_rag/parsers/py/overloads.py
|
|
368
|
+
codebase_rag/parsers/py/patterns.py
|
|
363
369
|
codebase_rag/parsers/py/receiver_rebinding.py
|
|
364
370
|
codebase_rag/parsers/py/type_inference.py
|
|
365
371
|
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"
|
|
@@ -200,7 +201,8 @@ HELP_RENAME_ALLOW_HEURISTIC = (
|
|
|
200
201
|
)
|
|
201
202
|
HELP_RENAME_DRY_RUN = "Print the plan and diff without writing anything."
|
|
202
203
|
CMD_CHANGE_SIGNATURE = (
|
|
203
|
-
"Change a Python definition's parameter list and rewrite
|
|
204
|
+
"Change a Python or JavaScript definition's parameter list and rewrite "
|
|
205
|
+
"every call site "
|
|
204
206
|
"the graph knows; sites the mapping cannot complete are listed, not touched; "
|
|
205
207
|
"refuses on a graph a stopped sync left partial."
|
|
206
208
|
)
|
|
@@ -724,6 +726,10 @@ HELP_DELETE_PROJECT_REPO_PATH = (
|
|
|
724
726
|
"Repository whose project to delete when --project is not given. Its "
|
|
725
727
|
"local hash cache is removed too."
|
|
726
728
|
)
|
|
729
|
+
HELP_PRUNE_DRY_RUN = "List the projects that would be pruned without deleting anything."
|
|
730
|
+
HELP_PRUNE_YES = "Prune without asking for confirmation."
|
|
731
|
+
CMD_PRUNE = "Prune projects whose repository root no longer exists"
|
|
732
|
+
EXAMPLES_PRUNE = "EXAMPLE\n\n cgr prune --dry-run\n\n cgr prune --yes"
|
|
727
733
|
HELP_COMMAND = "Command path to document, such as 'start' or 'daemon logs'."
|
|
728
734
|
|
|
729
735
|
CMD_VERIFY_INDEX = "Verify a protobuf index against its provenance manifest"
|
|
@@ -741,6 +747,7 @@ CLI_COMMANDS: dict[CLICommandName, str] = {
|
|
|
741
747
|
CLICommandName.DEAD_CODE: CMD_DEAD_CODE,
|
|
742
748
|
CLICommandName.DUPLICATES: CMD_DUPLICATES,
|
|
743
749
|
CLICommandName.DELETE_PROJECT: CMD_DELETE_PROJECT,
|
|
750
|
+
CLICommandName.PRUNE: CMD_PRUNE,
|
|
744
751
|
CLICommandName.LANGUAGE: CMD_LANGUAGE,
|
|
745
752
|
CLICommandName.DAEMON: CMD_DAEMON,
|
|
746
753
|
CLICommandName.TRACE: CMD_TRACE,
|
|
@@ -48,8 +48,12 @@ def merge_dotenv(path: Path) -> dict[str, str]:
|
|
|
48
48
|
# value, and a reference to it in the file reads that value too.
|
|
49
49
|
values = DotEnv(path, encoding=cs.ENCODING_UTF8, override=False).dict()
|
|
50
50
|
refused: dict[str, str] = {}
|
|
51
|
+
# The file may not set a waiver in any spelling: settings match names
|
|
52
|
+
# without regard to case, so `cgr_allow_sensitive_reads=true` beside an
|
|
53
|
+
# exported `CGR_ALLOW_SENSITIVE_READS=false` won (see load_settings).
|
|
54
|
+
environment_only = {name.upper() for name in cs.ENVIRONMENT_ONLY_SETTINGS}
|
|
51
55
|
for name, value in values.items():
|
|
52
|
-
if value is None or name in os.environ:
|
|
56
|
+
if value is None or name in os.environ or name.upper() in environment_only:
|
|
53
57
|
continue
|
|
54
58
|
try:
|
|
55
59
|
os.environ[name] = value
|
|
@@ -620,6 +624,14 @@ class AppConfig(BaseSettings):
|
|
|
620
624
|
False, validation_alias="CGR_ALLOW_SENSITIVE_READS"
|
|
621
625
|
)
|
|
622
626
|
|
|
627
|
+
# MCP write_file and surgical_replace_code refuse the same files: an
|
|
628
|
+
# overwrite destroys the secret, and an edit's refusals ("target not
|
|
629
|
+
# found", the lines of each match) let the client guess one character
|
|
630
|
+
# at a time. The CLI agent asks before every write instead.
|
|
631
|
+
ALLOW_SENSITIVE_WRITES: bool = Field(
|
|
632
|
+
False, validation_alias="CGR_ALLOW_SENSITIVE_WRITES"
|
|
633
|
+
)
|
|
634
|
+
|
|
623
635
|
# A repository's .cgr.md loads only once the user approved its content
|
|
624
636
|
# (issue #3456). True trusts every repository's file without asking:
|
|
625
637
|
# for CI on repositories you control, never for code you did not write.
|
|
@@ -780,7 +792,10 @@ def load_settings(
|
|
|
780
792
|
# when the user exported it: `.env` in the working directory is usually the
|
|
781
793
|
# analysed repository's file, and could approve its own .cgr.md (Codex
|
|
782
794
|
# review on PR #3471). Held at its default, silently, like an unset one.
|
|
783
|
-
|
|
795
|
+
# An empty one counts as unset: settings skip an empty variable
|
|
796
|
+
# (env_ignore_empty) and read `.env` in its place, so it let the
|
|
797
|
+
# repository's file decide.
|
|
798
|
+
exported = {name.upper() for name in inherited_env if os.environ.get(name)}
|
|
784
799
|
waivers = {
|
|
785
800
|
name for name in cs.ENVIRONMENT_ONLY_SETTINGS if name.upper() not in exported
|
|
786
801
|
}
|