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.
Files changed (473) hide show
  1. {code_graph_rag-0.4.5/code_graph_rag.egg-info → code_graph_rag-0.4.19}/PKG-INFO +2 -2
  2. {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/README.md +4 -1
  3. {code_graph_rag-0.4.5 → code_graph_rag-0.4.19/code_graph_rag.egg-info}/PKG-INFO +2 -2
  4. {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/code_graph_rag.egg-info/SOURCES.txt +4 -0
  5. {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/code_graph_rag.egg-info/requires.txt +1 -1
  6. {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/cli.py +355 -17
  7. {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/cli_help.py +6 -0
  8. {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/constants/ast_js.py +1 -0
  9. {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/constants/ast_python.py +12 -0
  10. {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/constants/cli.py +63 -0
  11. {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/constants/duplicates.py +31 -0
  12. {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/constants/embedded_graph.py +22 -2
  13. {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/constants/graph.py +22 -0
  14. {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/constants/languages.py +44 -0
  15. {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/context_slice.py +6 -4
  16. {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/cypher_queries.py +209 -17
  17. {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/docker-compose.yaml +1 -1
  18. {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/exceptions.py +5 -0
  19. {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/gloss.py +31 -1
  20. {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/gloss_repair.py +395 -17
  21. {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/graph_updater.py +11 -2
  22. {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/logs.py +15 -0
  23. {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/parser_loader.py +30 -12
  24. {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/parsers/call_processor.py +626 -35
  25. {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/parsers/flow_access/processor.py +2 -55
  26. {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/parsers/java/type_resolver.py +3 -2
  27. {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/parsers/native_trees.py +58 -5
  28. {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/parsers/py/ast_analyzer.py +58 -69
  29. code_graph_rag-0.4.19/codebase_rag/parsers/py/definition_index.py +149 -0
  30. code_graph_rag-0.4.19/codebase_rag/parsers/py/flow_bindings.py +794 -0
  31. code_graph_rag-0.4.19/codebase_rag/parsers/py/patterns.py +66 -0
  32. {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/parsers/py/type_inference.py +19 -0
  33. {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/parsers/py/variable_analyzer.py +180 -111
  34. {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/parsers/utils.py +17 -1
  35. {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/services/graph_service.py +68 -9
  36. code_graph_rag-0.4.19/codebase_rag/source_checkout.py +29 -0
  37. {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/structural_delta.py +692 -20
  38. {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/sync_guard.py +119 -2
  39. {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/tools/language.py +2 -20
  40. {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/tools/tool_descriptions.py +5 -0
  41. {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/types_defs.py +35 -1
  42. {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/utils/path_utils.py +25 -0
  43. {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/pyproject.toml +2 -23
  44. {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/LICENSE +0 -0
  45. {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/PYPI_README.md +0 -0
  46. {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/cgr/__init__.py +0 -0
  47. {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/code_graph_rag.egg-info/dependency_links.txt +0 -0
  48. {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/code_graph_rag.egg-info/entry_points.txt +0 -0
  49. {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/code_graph_rag.egg-info/top_level.txt +0 -0
  50. {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/__init__.py +0 -0
  51. {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/_cli_env.py +0 -0
  52. {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/analyzers/__init__.py +0 -0
  53. {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/analyzers/ast_grep_analyzer.py +0 -0
  54. {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/analyzers/ast_grep_rules/patterns/c.yaml +0 -0
  55. {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/analyzers/ast_grep_rules/patterns/cpp.yaml +0 -0
  56. {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/analyzers/ast_grep_rules/patterns/csharp.yaml +0 -0
  57. {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/analyzers/ast_grep_rules/patterns/dart.yaml +0 -0
  58. {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/analyzers/ast_grep_rules/patterns/go.yaml +0 -0
  59. {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/analyzers/ast_grep_rules/patterns/java.yaml +0 -0
  60. {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/analyzers/ast_grep_rules/patterns/javascript.yaml +0 -0
  61. {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/analyzers/ast_grep_rules/patterns/lua.yaml +0 -0
  62. {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/analyzers/ast_grep_rules/patterns/php.yaml +0 -0
  63. {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/analyzers/ast_grep_rules/patterns/python.yaml +0 -0
  64. {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/analyzers/ast_grep_rules/patterns/ruby.yaml +0 -0
  65. {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/analyzers/ast_grep_rules/patterns/rust.yaml +0 -0
  66. {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/analyzers/ast_grep_rules/patterns/scala.yaml +0 -0
  67. {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/analyzers/ast_grep_rules/patterns/tsx.yaml +0 -0
  68. {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/analyzers/ast_grep_rules/patterns/typescript.yaml +0 -0
  69. {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/analyzers/ast_grep_rules/security/c.yaml +0 -0
  70. {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/analyzers/ast_grep_rules/security/cpp.yaml +0 -0
  71. {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/analyzers/ast_grep_rules/security/csharp.yaml +0 -0
  72. {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/analyzers/ast_grep_rules/security/dart.yaml +0 -0
  73. {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/analyzers/ast_grep_rules/security/go.yaml +0 -0
  74. {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/analyzers/ast_grep_rules/security/java.yaml +0 -0
  75. {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/analyzers/ast_grep_rules/security/javascript.yaml +0 -0
  76. {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/analyzers/ast_grep_rules/security/lua.yaml +0 -0
  77. {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/analyzers/ast_grep_rules/security/php.yaml +0 -0
  78. {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/analyzers/ast_grep_rules/security/python.yaml +0 -0
  79. {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/analyzers/ast_grep_rules/security/ruby.yaml +0 -0
  80. {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/analyzers/ast_grep_rules/security/rust.yaml +0 -0
  81. {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/analyzers/ast_grep_rules/security/scala.yaml +0 -0
  82. {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/analyzers/ast_grep_rules/security/tsx.yaml +0 -0
  83. {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/analyzers/ast_grep_rules/security/typescript.yaml +0 -0
  84. {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/analyzers/ast_grep_rules/smells/c.yaml +0 -0
  85. {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/analyzers/ast_grep_rules/smells/cpp.yaml +0 -0
  86. {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/analyzers/ast_grep_rules/smells/csharp.yaml +0 -0
  87. {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/analyzers/ast_grep_rules/smells/dart.yaml +0 -0
  88. {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/analyzers/ast_grep_rules/smells/go.yaml +0 -0
  89. {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/analyzers/ast_grep_rules/smells/java.yaml +0 -0
  90. {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/analyzers/ast_grep_rules/smells/javascript.yaml +0 -0
  91. {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/analyzers/ast_grep_rules/smells/lua.yaml +0 -0
  92. {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/analyzers/ast_grep_rules/smells/php.yaml +0 -0
  93. {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/analyzers/ast_grep_rules/smells/python.yaml +0 -0
  94. {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/analyzers/ast_grep_rules/smells/ruby.yaml +0 -0
  95. {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/analyzers/ast_grep_rules/smells/rust.yaml +0 -0
  96. {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/analyzers/ast_grep_rules/smells/scala.yaml +0 -0
  97. {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/analyzers/ast_grep_rules/smells/tsx.yaml +0 -0
  98. {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/analyzers/ast_grep_rules/smells/typescript.yaml +0 -0
  99. {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/ast_cache.py +0 -0
  100. {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/capture.py +0 -0
  101. {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/check_isolation.py +0 -0
  102. {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/checkout_state.py +0 -0
  103. {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/cli_runtime.py +0 -0
  104. {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/config.py +0 -0
  105. {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/console_marks.py +0 -0
  106. {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/constants/__init__.py +0 -0
  107. {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/constants/ast_cpp.py +0 -0
  108. {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/constants/ast_csharp.py +0 -0
  109. {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/constants/ast_dart.py +0 -0
  110. {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/constants/ast_go.py +0 -0
  111. {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/constants/ast_java.py +0 -0
  112. {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/constants/ast_julia.py +0 -0
  113. {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/constants/ast_lua.py +0 -0
  114. {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/constants/ast_nodes.py +0 -0
  115. {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/constants/ast_php.py +0 -0
  116. {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/constants/ast_rust.py +0 -0
  117. {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/constants/ast_scala.py +0 -0
  118. {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/constants/ast_sql.py +0 -0
  119. {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/constants/build.py +0 -0
  120. {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/constants/core.py +0 -0
  121. {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/constants/deadcode_roots.py +0 -0
  122. {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/constants/deps.py +0 -0
  123. {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/constants/fqn_specs.py +0 -0
  124. {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/constants/health.py +0 -0
  125. {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/constants/interface.py +0 -0
  126. {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/constants/lang_tooling.py +0 -0
  127. {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/constants/mcp.py +0 -0
  128. {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/constants/notebook.py +0 -0
  129. {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/constants/port.py +0 -0
  130. {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/constants/providers.py +0 -0
  131. {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/constants/security.py +0 -0
  132. {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/constants/sqlite_vectors.py +0 -0
  133. {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/constants/stdlib_types.py +0 -0
  134. {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/constants/structural.py +0 -0
  135. {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/constants/trace.py +0 -0
  136. {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/context_pruning.py +0 -0
  137. {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/crash_correlation.py +0 -0
  138. {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/dead_code.py +0 -0
  139. {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/decorators.py +0 -0
  140. {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/duplicates.py +0 -0
  141. {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/editing/__init__.py +0 -0
  142. {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/editing/cli.py +0 -0
  143. {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/editing/contract.py +0 -0
  144. {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/editing/import_paths.py +0 -0
  145. {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/editing/imports.py +0 -0
  146. {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/editing/occurrences.py +0 -0
  147. {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/editing/patcher.py +0 -0
  148. {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/editing/rename.py +0 -0
  149. {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/editing/signature.py +0 -0
  150. {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/editing/signature_bind.py +0 -0
  151. {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/editing/signature_contract.py +0 -0
  152. {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/editing/signature_spec.py +0 -0
  153. {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/editing/sites.py +0 -0
  154. {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/editing/transaction.py +0 -0
  155. {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/editor_links.py +0 -0
  156. {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/embedded_graph/__init__.py +0 -0
  157. {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/embedded_graph/compiler.py +0 -0
  158. {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/embedded_graph/connection.py +0 -0
  159. {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/embedded_graph/cypher_ast.py +0 -0
  160. {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/embedded_graph/executor.py +0 -0
  161. {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/embedded_graph/expressions.py +0 -0
  162. {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/embedded_graph/extension.py +0 -0
  163. {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/embedded_graph/functions.py +0 -0
  164. {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/embedded_graph/lexer.py +0 -0
  165. {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/embedded_graph/limits.py +0 -0
  166. {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/embedded_graph/native.py +0 -0
  167. {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/embedded_graph/parser.py +0 -0
  168. {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/embedded_graph/procedures.py +0 -0
  169. {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/embedded_graph/sql.py +0 -0
  170. {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/embedded_graph/store.py +0 -0
  171. {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/embedded_graph/types.py +0 -0
  172. {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/embedder.py +0 -0
  173. {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/flow_verdict.py +0 -0
  174. {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/function_registry.py +0 -0
  175. {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/gloss_anchor.py +0 -0
  176. {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/graph_audit.py +0 -0
  177. {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/graph_cli.py +0 -0
  178. {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/graph_dialects.py +0 -0
  179. {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/graph_loader.py +0 -0
  180. {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/graph_query.py +0 -0
  181. {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/instructions_trust.py +0 -0
  182. {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/interface_skip.py +0 -0
  183. {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/language_spec.py +0 -0
  184. {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/main.py +0 -0
  185. {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/mcp/__init__.py +0 -0
  186. {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/mcp/client.py +0 -0
  187. {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/mcp/server.py +0 -0
  188. {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/mcp/tools.py +0 -0
  189. {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/mgclient_compat.py +0 -0
  190. {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/mgclient_probe.py +0 -0
  191. {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/models.py +0 -0
  192. {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/parser_fingerprint.py +0 -0
  193. {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/parsers/__init__.py +0 -0
  194. {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/parsers/anchor_hash.py +0 -0
  195. {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/parsers/ast_fingerprint.py +0 -0
  196. {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/parsers/ast_grep_patterns/bash.yaml +0 -0
  197. {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/parsers/ast_grep_patterns/elixir.yaml +0 -0
  198. {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/parsers/ast_grep_patterns/haskell.yaml +0 -0
  199. {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/parsers/ast_grep_patterns/kotlin.yaml +0 -0
  200. {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/parsers/ast_grep_patterns/nix.yaml +0 -0
  201. {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/parsers/ast_grep_patterns/ruby.yaml +0 -0
  202. {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/parsers/ast_grep_patterns/solidity.yaml +0 -0
  203. {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/parsers/ast_grep_patterns/swift.yaml +0 -0
  204. {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/parsers/ast_grep_scope.py +0 -0
  205. {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/parsers/ast_grep_tier.py +0 -0
  206. {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/parsers/build_lock.py +0 -0
  207. {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/parsers/call_resolver.py +0 -0
  208. {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/parsers/class_ingest/__init__.py +0 -0
  209. {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/parsers/class_ingest/base_targets.py +0 -0
  210. {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/parsers/class_ingest/cpp_modules.py +0 -0
  211. {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/parsers/class_ingest/identity.py +0 -0
  212. {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/parsers/class_ingest/method_override.py +0 -0
  213. {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/parsers/class_ingest/mixin.py +0 -0
  214. {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/parsers/class_ingest/node_type.py +0 -0
  215. {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/parsers/class_ingest/parent_extraction.py +0 -0
  216. {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/parsers/class_ingest/relationships.py +0 -0
  217. {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/parsers/class_ingest/utils.py +0 -0
  218. {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/parsers/contract_linking.py +0 -0
  219. {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/parsers/contracts.py +0 -0
  220. {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/parsers/cpp/__init__.py +0 -0
  221. {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/parsers/cpp/class_macro.py +0 -0
  222. {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/parsers/cpp/function_values.py +0 -0
  223. {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/parsers/cpp/local_types.py +0 -0
  224. {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/parsers/cpp/overloads.py +0 -0
  225. {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/parsers/cpp/preproc_recovery.py +0 -0
  226. {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/parsers/cpp/trailing_annotation.py +0 -0
  227. {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/parsers/cpp/type_inference.py +0 -0
  228. {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/parsers/cpp/utils.py +0 -0
  229. {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/parsers/cpp_frontend/__init__.py +0 -0
  230. {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/parsers/cpp_frontend/constants.py +0 -0
  231. {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/parsers/cpp_frontend/frontend.py +0 -0
  232. {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/parsers/cpp_frontend/qn.py +0 -0
  233. {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/parsers/csharp/__init__.py +0 -0
  234. {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/parsers/csharp/arity.py +0 -0
  235. {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/parsers/csharp/type_inference.py +0 -0
  236. {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/parsers/csharp/utils.py +0 -0
  237. {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/parsers/csharp_frontend/__init__.py +0 -0
  238. {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/parsers/csharp_frontend/frontend.py +0 -0
  239. {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/parsers/csharp_frontend/roslyn/Frontend.cs +0 -0
  240. {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/parsers/csharp_frontend/roslyn/Frontend.csproj +0 -0
  241. {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/parsers/csharp_frontend/roslyn/Program.cs +0 -0
  242. {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/parsers/dart/__init__.py +0 -0
  243. {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/parsers/dart/package_paths.py +0 -0
  244. {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/parsers/dart/type_inference.py +0 -0
  245. {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/parsers/dart/utils.py +0 -0
  246. {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/parsers/definition_docstring.py +0 -0
  247. {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/parsers/definition_processor.py +0 -0
  248. {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/parsers/dependency_parser.py +0 -0
  249. {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/parsers/dispatch_registry.py +0 -0
  250. {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/parsers/document_tier.py +0 -0
  251. {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/parsers/endpoint_prefixes.py +0 -0
  252. {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/parsers/endpoint_routes.py +0 -0
  253. {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/parsers/endpoints.py +0 -0
  254. {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/parsers/enum_variants.py +0 -0
  255. {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/parsers/export_detection.py +0 -0
  256. {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/parsers/factory.py +0 -0
  257. {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/parsers/field_nodes.py +0 -0
  258. {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/parsers/flat_module.py +0 -0
  259. {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/parsers/flow_access/__init__.py +0 -0
  260. {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/parsers/flow_access/constants.py +0 -0
  261. {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/parsers/frontend_mode.py +0 -0
  262. {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/parsers/frontends/__init__.py +0 -0
  263. {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/parsers/frontends/cpp.py +0 -0
  264. {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/parsers/frontends/csharp.py +0 -0
  265. {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/parsers/frontends/go.py +0 -0
  266. {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/parsers/frontends/java.py +0 -0
  267. {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/parsers/frontends/protocol.py +0 -0
  268. {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/parsers/frontends/python.py +0 -0
  269. {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/parsers/frontends/registry.py +0 -0
  270. {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/parsers/function_ingest.py +0 -0
  271. {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/parsers/go/__init__.py +0 -0
  272. {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/parsers/go/builds.py +0 -0
  273. {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/parsers/go/interface_ingest.py +0 -0
  274. {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/parsers/go/interfaces.py +0 -0
  275. {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/parsers/go/link_state.py +0 -0
  276. {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/parsers/go/module_paths.py +0 -0
  277. {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/parsers/go/type_inference.py +0 -0
  278. {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/parsers/go/utils.py +0 -0
  279. {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/parsers/go_frontend/__init__.py +0 -0
  280. {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/parsers/go_frontend/frontend.py +0 -0
  281. {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/parsers/go_frontend/gotypes/go.mod +0 -0
  282. {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/parsers/go_frontend/gotypes/go.sum +0 -0
  283. {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/parsers/go_frontend/gotypes/main.go +0 -0
  284. {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/parsers/handlers/__init__.py +0 -0
  285. {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/parsers/handlers/base.py +0 -0
  286. {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/parsers/handlers/cpp.py +0 -0
  287. {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/parsers/handlers/java.py +0 -0
  288. {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/parsers/handlers/js_ts.py +0 -0
  289. {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/parsers/handlers/julia.py +0 -0
  290. {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/parsers/handlers/lua.py +0 -0
  291. {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/parsers/handlers/php.py +0 -0
  292. {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/parsers/handlers/protocol.py +0 -0
  293. {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/parsers/handlers/python.py +0 -0
  294. {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/parsers/handlers/registry.py +0 -0
  295. {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/parsers/handlers/rust.py +0 -0
  296. {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/parsers/import_processor.py +0 -0
  297. {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/parsers/interface_fingerprint.py +0 -0
  298. {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/parsers/io_access/__init__.py +0 -0
  299. {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/parsers/io_access/constants.py +0 -0
  300. {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/parsers/io_access/descriptor.py +0 -0
  301. {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/parsers/io_access/extract.py +0 -0
  302. {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/parsers/io_access/models.py +0 -0
  303. {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/parsers/io_access/processor.py +0 -0
  304. {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/parsers/io_access/registry.py +0 -0
  305. {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/parsers/io_access/resource_names.py +0 -0
  306. {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/parsers/io_access/url_folding.py +0 -0
  307. {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/parsers/java/__init__.py +0 -0
  308. {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/parsers/java/method_resolver.py +0 -0
  309. {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/parsers/java/type_inference.py +0 -0
  310. {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/parsers/java/utils.py +0 -0
  311. {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/parsers/java/variable_analyzer.py +0 -0
  312. {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/parsers/java_frontend/__init__.py +0 -0
  313. {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/parsers/java_frontend/frontend.py +0 -0
  314. {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/parsers/java_frontend/javac/cgr/Frontend.java +0 -0
  315. {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/parsers/java_generated.py +0 -0
  316. {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/parsers/java_lombok.py +0 -0
  317. {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/parsers/js_ts/__init__.py +0 -0
  318. {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/parsers/js_ts/commonjs_exports.py +0 -0
  319. {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/parsers/js_ts/ingest.py +0 -0
  320. {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/parsers/js_ts/module_paths.py +0 -0
  321. {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/parsers/js_ts/module_system.py +0 -0
  322. {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/parsers/js_ts/overloads.py +0 -0
  323. {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/parsers/js_ts/reexports.py +0 -0
  324. {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/parsers/js_ts/type_inference.py +0 -0
  325. {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/parsers/js_ts/utils.py +0 -0
  326. {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/parsers/julia/__init__.py +0 -0
  327. {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/parsers/julia/utils.py +0 -0
  328. {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/parsers/lua/__init__.py +0 -0
  329. {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/parsers/lua/type_inference.py +0 -0
  330. {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/parsers/lua/utils.py +0 -0
  331. {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/parsers/module_docstring.py +0 -0
  332. {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/parsers/notebook.py +0 -0
  333. {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/parsers/parameter_nodes.py +0 -0
  334. {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/parsers/php/__init__.py +0 -0
  335. {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/parsers/php/class_names.py +0 -0
  336. {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/parsers/php/namespaces.py +0 -0
  337. {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/parsers/php/utils.py +0 -0
  338. {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/parsers/positional_params.py +0 -0
  339. {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/parsers/py/__init__.py +0 -0
  340. {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/parsers/py/class_aliases.py +0 -0
  341. {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/parsers/py/expression_analyzer.py +0 -0
  342. {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/parsers/py/forward_refs.py +0 -0
  343. {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/parsers/py/overloads.py +0 -0
  344. {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/parsers/py/receiver_rebinding.py +0 -0
  345. {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/parsers/py/utils.py +0 -0
  346. {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/parsers/py/with_analyzer.py +0 -0
  347. {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/parsers/py_frontend/__init__.py +0 -0
  348. {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/parsers/py_frontend/frontend.py +0 -0
  349. {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/parsers/python_source_roots.py +0 -0
  350. {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/parsers/rpc_exposure.py +0 -0
  351. {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/parsers/rs/__init__.py +0 -0
  352. {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/parsers/rs/cargo_semver.py +0 -0
  353. {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/parsers/rs/type_inference.py +0 -0
  354. {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/parsers/rs/utils.py +0 -0
  355. {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/parsers/scala/__init__.py +0 -0
  356. {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/parsers/scala/utils.py +0 -0
  357. {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/parsers/semantic_call_join.py +0 -0
  358. {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/parsers/sql_ddl.py +0 -0
  359. {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/parsers/sql_recovery.py +0 -0
  360. {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/parsers/stdlib_extractor.py +0 -0
  361. {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/parsers/string_call.py +0 -0
  362. {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/parsers/structure_processor.py +0 -0
  363. {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/parsers/type_facts.py +0 -0
  364. {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/parsers/type_inference.py +0 -0
  365. {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/path_filters.py +0 -0
  366. {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/port_cli.py +0 -0
  367. {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/port_parity.py +0 -0
  368. {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/project_selection.py +0 -0
  369. {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/prompts.py +0 -0
  370. {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/providers/__init__.py +0 -0
  371. {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/providers/base.py +0 -0
  372. {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/providers/litellm.py +0 -0
  373. {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/queries/highlights/c_sharp.scm +0 -0
  374. {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/queries/highlights/dart.scm +0 -0
  375. {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/queries/highlights/java.scm +0 -0
  376. {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/queries/highlights/javascript.scm +0 -0
  377. {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/queries/highlights/julia.scm +0 -0
  378. {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/queries/highlights/php.scm +0 -0
  379. {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/queries/highlights/python.scm +0 -0
  380. {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/queries/highlights/rust.scm +0 -0
  381. {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/queries/highlights/typescript.scm +0 -0
  382. {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/readme_sections.py +0 -0
  383. {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/schema_builder.py +0 -0
  384. {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/schema_parse.py +0 -0
  385. {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/schemas.py +0 -0
  386. {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/sensitive_paths.py +0 -0
  387. {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/services/__init__.py +0 -0
  388. {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/services/anthropic_token_counter.py +0 -0
  389. {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/services/cypher_guard.py +0 -0
  390. {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/services/filtering.py +0 -0
  391. {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/services/gloss_cleanup.py +0 -0
  392. {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/services/graph_diff.py +0 -0
  393. {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/services/llm.py +0 -0
  394. {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/services/neo4j_driver.py +0 -0
  395. {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/services/protobuf_service.py +0 -0
  396. {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/services/provenance.py +0 -0
  397. {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/services/resource_cleanup.py +0 -0
  398. {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/services/usage_cost.py +0 -0
  399. {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/sql_names.py +0 -0
  400. {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/sqlite_vectors.py +0 -0
  401. {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/stack/__init__.py +0 -0
  402. {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/stack/cli.py +0 -0
  403. {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/stack/constants.py +0 -0
  404. {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/stack/health.py +0 -0
  405. {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/stack/manager.py +0 -0
  406. {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/structural_check.py +0 -0
  407. {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/sync_lock.py +0 -0
  408. {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/taint.py +0 -0
  409. {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/tool_errors.py +0 -0
  410. {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/tools/__init__.py +0 -0
  411. {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/tools/ast_grep_service.py +0 -0
  412. {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/tools/code_retrieval.py +0 -0
  413. {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/tools/codebase_query.py +0 -0
  414. {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/tools/directory_lister.py +0 -0
  415. {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/tools/duplicate_detection.py +0 -0
  416. {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/tools/file_editor.py +0 -0
  417. {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/tools/file_reader.py +0 -0
  418. {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/tools/file_writer.py +0 -0
  419. {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/tools/graph_refresh.py +0 -0
  420. {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/tools/graph_rerank.py +0 -0
  421. {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/tools/health_checker.py +0 -0
  422. {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/tools/language_catalog.py +0 -0
  423. {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/tools/research.py +0 -0
  424. {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/tools/semantic_search.py +0 -0
  425. {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/tools/shell_command.py +0 -0
  426. {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/tools/structural_editor.py +0 -0
  427. {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/tools/structural_search.py +0 -0
  428. {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/tools/web_search.py +0 -0
  429. {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/trace/__init__.py +0 -0
  430. {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/trace/carry.py +0 -0
  431. {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/trace/cli.py +0 -0
  432. {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/trace/cpuprofile.py +0 -0
  433. {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/trace/dispatch_site.py +0 -0
  434. {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/trace/ebpf_pprof.py +0 -0
  435. {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/trace/ingest.py +0 -0
  436. {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/trace/instrumented.py +0 -0
  437. {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/trace/pprof.py +0 -0
  438. {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/trace/pytest_plugin.py +0 -0
  439. {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/trace/records.py +0 -0
  440. {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/trace/resolution.py +0 -0
  441. {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/trace/rust_pprof.py +0 -0
  442. {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/trace/sourcemap.py +0 -0
  443. {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/trace/speedscope.py +0 -0
  444. {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/trace/tracer.py +0 -0
  445. {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/trace/xdebug.py +0 -0
  446. {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/tree_sitter_point.py +0 -0
  447. {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/unixcoder.py +0 -0
  448. {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/utils/__init__.py +0 -0
  449. {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/utils/cpp_signatures.py +0 -0
  450. {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/utils/dependencies.py +0 -0
  451. {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/utils/endpoints.py +0 -0
  452. {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/utils/fqn_resolver.py +0 -0
  453. {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/utils/interruptible_thread.py +0 -0
  454. {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/utils/json_io.py +0 -0
  455. {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/utils/process_owner.py +0 -0
  456. {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/utils/qn_markers.py +0 -0
  457. {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/utils/rich_markdown.py +0 -0
  458. {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/utils/source_encoding.py +0 -0
  459. {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/utils/source_extraction.py +0 -0
  460. {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/utils/terminal_console.py +0 -0
  461. {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/utils/token_utils.py +0 -0
  462. {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/vector_store.py +0 -0
  463. {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/watch.py +0 -0
  464. {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/workspaces/__init__.py +0 -0
  465. {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/workspaces/cli.py +0 -0
  466. {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/workspaces/constants.py +0 -0
  467. {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/workspaces/models.py +0 -0
  468. {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codebase_rag/workspaces/storage.py +0 -0
  469. {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codec/__init__.py +0 -0
  470. {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codec/schema.proto +0 -0
  471. {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codec/schema_pb2.py +0 -0
  472. {code_graph_rag-0.4.5 → code_graph_rag-0.4.19}/codec/schema_pb2.pyi +0 -0
  473. {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.5
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.4; 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"))
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
- - **MiniMax Models Added**: Current MiniMax text models have been included.
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.5
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.4; 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"))
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.4
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), and any run's that
1070
- never wrote the graph. A run that had begun writing owns its marker
1071
- (#1709). Best effort, like `_clear_sync_incomplete`: the project is
1072
- deleted.
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, project_name: str, projects: Iterable[str]
1340
- ) -> None:
1341
- rows = ingestor.fetch_all(
1342
- cs.CYPHER_QUERY_PROJECT_NODE_IDS,
1343
- {cs.KEY_PROJECT_NAME: project_name},
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 rows:
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), so the notice goes to stderr then."""
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 = output_format == cs.DeadCodeFormat.TABLE and output is None
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 = output_format == cs.DuplicatesFormat.TABLE and output is None
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.