code-graph-rag 0.0.895__tar.gz → 0.0.996__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (383) hide show
  1. {code_graph_rag-0.0.895/code_graph_rag.egg-info → code_graph_rag-0.0.996}/PKG-INFO +10 -11
  2. {code_graph_rag-0.0.895 → code_graph_rag-0.0.996}/PYPI_README.md +7 -10
  3. {code_graph_rag-0.0.895 → code_graph_rag-0.0.996}/README.md +6 -9
  4. {code_graph_rag-0.0.895 → code_graph_rag-0.0.996/code_graph_rag.egg-info}/PKG-INFO +10 -11
  5. {code_graph_rag-0.0.895 → code_graph_rag-0.0.996}/code_graph_rag.egg-info/SOURCES.txt +24 -0
  6. {code_graph_rag-0.0.895 → code_graph_rag-0.0.996}/code_graph_rag.egg-info/requires.txt +3 -0
  7. {code_graph_rag-0.0.895 → code_graph_rag-0.0.996}/codebase_rag/ast_cache.py +47 -28
  8. {code_graph_rag-0.0.895 → code_graph_rag-0.0.996}/codebase_rag/cli.py +42 -3
  9. {code_graph_rag-0.0.895 → code_graph_rag-0.0.996}/codebase_rag/cli_help.py +23 -2
  10. {code_graph_rag-0.0.895 → code_graph_rag-0.0.996}/codebase_rag/config.py +100 -13
  11. code_graph_rag-0.0.996/codebase_rag/console_marks.py +59 -0
  12. {code_graph_rag-0.0.895 → code_graph_rag-0.0.996}/codebase_rag/constants/ast_cpp.py +8 -0
  13. {code_graph_rag-0.0.895 → code_graph_rag-0.0.996}/codebase_rag/constants/ast_csharp.py +7 -0
  14. {code_graph_rag-0.0.895 → code_graph_rag-0.0.996}/codebase_rag/constants/ast_dart.py +44 -0
  15. {code_graph_rag-0.0.895 → code_graph_rag-0.0.996}/codebase_rag/constants/ast_java.py +13 -0
  16. {code_graph_rag-0.0.895 → code_graph_rag-0.0.996}/codebase_rag/constants/ast_nodes.py +19 -0
  17. {code_graph_rag-0.0.895 → code_graph_rag-0.0.996}/codebase_rag/constants/ast_php.py +14 -0
  18. {code_graph_rag-0.0.895 → code_graph_rag-0.0.996}/codebase_rag/constants/ast_python.py +28 -0
  19. {code_graph_rag-0.0.895 → code_graph_rag-0.0.996}/codebase_rag/constants/ast_rust.py +8 -0
  20. {code_graph_rag-0.0.895 → code_graph_rag-0.0.996}/codebase_rag/constants/ast_scala.py +5 -0
  21. {code_graph_rag-0.0.895 → code_graph_rag-0.0.996}/codebase_rag/constants/build.py +7 -1
  22. {code_graph_rag-0.0.895 → code_graph_rag-0.0.996}/codebase_rag/constants/cli.py +59 -0
  23. {code_graph_rag-0.0.895 → code_graph_rag-0.0.996}/codebase_rag/constants/core.py +24 -0
  24. {code_graph_rag-0.0.895 → code_graph_rag-0.0.996}/codebase_rag/constants/graph.py +306 -4
  25. code_graph_rag-0.0.996/codebase_rag/constants/health.py +100 -0
  26. {code_graph_rag-0.0.895 → code_graph_rag-0.0.996}/codebase_rag/constants/mcp.py +54 -0
  27. {code_graph_rag-0.0.895 → code_graph_rag-0.0.996}/codebase_rag/constants/security.py +214 -0
  28. {code_graph_rag-0.0.895 → code_graph_rag-0.0.996}/codebase_rag/constants/trace.py +2 -0
  29. {code_graph_rag-0.0.895 → code_graph_rag-0.0.996}/codebase_rag/context_pruning.py +107 -16
  30. code_graph_rag-0.0.996/codebase_rag/cypher_queries.py +989 -0
  31. {code_graph_rag-0.0.895 → code_graph_rag-0.0.996}/codebase_rag/dead_code.py +64 -3
  32. {code_graph_rag-0.0.895 → code_graph_rag-0.0.996}/codebase_rag/duplicates.py +4 -12
  33. {code_graph_rag-0.0.895 → code_graph_rag-0.0.996}/codebase_rag/editing/__init__.py +18 -0
  34. code_graph_rag-0.0.996/codebase_rag/editing/contract.py +352 -0
  35. {code_graph_rag-0.0.895 → code_graph_rag-0.0.996}/codebase_rag/editing/imports.py +27 -5
  36. {code_graph_rag-0.0.895 → code_graph_rag-0.0.996}/codebase_rag/editing/rename.py +480 -9
  37. {code_graph_rag-0.0.895 → code_graph_rag-0.0.996}/codebase_rag/editing/transaction.py +17 -0
  38. {code_graph_rag-0.0.895 → code_graph_rag-0.0.996}/codebase_rag/embedder.py +5 -3
  39. {code_graph_rag-0.0.895 → code_graph_rag-0.0.996}/codebase_rag/exceptions.py +29 -0
  40. code_graph_rag-0.0.996/codebase_rag/gloss.py +370 -0
  41. code_graph_rag-0.0.996/codebase_rag/gloss_anchor.py +228 -0
  42. code_graph_rag-0.0.996/codebase_rag/gloss_repair.py +439 -0
  43. code_graph_rag-0.0.996/codebase_rag/graph_dialects.py +243 -0
  44. {code_graph_rag-0.0.895 → code_graph_rag-0.0.996}/codebase_rag/graph_query.py +214 -9
  45. {code_graph_rag-0.0.895 → code_graph_rag-0.0.996}/codebase_rag/graph_updater.py +1558 -109
  46. {code_graph_rag-0.0.895 → code_graph_rag-0.0.996}/codebase_rag/language_spec.py +147 -19
  47. {code_graph_rag-0.0.895 → code_graph_rag-0.0.996}/codebase_rag/logs.py +60 -13
  48. {code_graph_rag-0.0.895 → code_graph_rag-0.0.996}/codebase_rag/main.py +247 -35
  49. {code_graph_rag-0.0.895 → code_graph_rag-0.0.996}/codebase_rag/mcp/server.py +35 -6
  50. {code_graph_rag-0.0.895 → code_graph_rag-0.0.996}/codebase_rag/mcp/tools.py +1283 -82
  51. {code_graph_rag-0.0.895 → code_graph_rag-0.0.996}/codebase_rag/models.py +7 -0
  52. code_graph_rag-0.0.996/codebase_rag/parsers/anchor_hash.py +85 -0
  53. {code_graph_rag-0.0.895 → code_graph_rag-0.0.996}/codebase_rag/parsers/ast_grep_tier.py +42 -28
  54. {code_graph_rag-0.0.895 → code_graph_rag-0.0.996}/codebase_rag/parsers/call_processor.py +339 -80
  55. {code_graph_rag-0.0.895 → code_graph_rag-0.0.996}/codebase_rag/parsers/call_resolver.py +389 -28
  56. {code_graph_rag-0.0.895 → code_graph_rag-0.0.996}/codebase_rag/parsers/class_ingest/identity.py +7 -9
  57. {code_graph_rag-0.0.895 → code_graph_rag-0.0.996}/codebase_rag/parsers/class_ingest/method_override.py +2 -1
  58. {code_graph_rag-0.0.895 → code_graph_rag-0.0.996}/codebase_rag/parsers/class_ingest/mixin.py +112 -18
  59. {code_graph_rag-0.0.895 → code_graph_rag-0.0.996}/codebase_rag/parsers/class_ingest/parent_extraction.py +77 -65
  60. {code_graph_rag-0.0.895 → code_graph_rag-0.0.996}/codebase_rag/parsers/cpp_frontend/frontend.py +5 -1
  61. {code_graph_rag-0.0.895 → code_graph_rag-0.0.996}/codebase_rag/parsers/csharp/type_inference.py +288 -3
  62. {code_graph_rag-0.0.895 → code_graph_rag-0.0.996}/codebase_rag/parsers/csharp/utils.py +230 -54
  63. {code_graph_rag-0.0.895 → code_graph_rag-0.0.996}/codebase_rag/parsers/dart/utils.py +214 -13
  64. code_graph_rag-0.0.996/codebase_rag/parsers/definition_docstring.py +385 -0
  65. {code_graph_rag-0.0.895 → code_graph_rag-0.0.996}/codebase_rag/parsers/definition_processor.py +115 -10
  66. code_graph_rag-0.0.996/codebase_rag/parsers/enum_variants.py +177 -0
  67. {code_graph_rag-0.0.895 → code_graph_rag-0.0.996}/codebase_rag/parsers/factory.py +3 -0
  68. code_graph_rag-0.0.996/codebase_rag/parsers/field_nodes.py +1083 -0
  69. {code_graph_rag-0.0.895 → code_graph_rag-0.0.996}/codebase_rag/parsers/function_ingest.py +43 -29
  70. code_graph_rag-0.0.996/codebase_rag/parsers/go_frontend/gotypes/go.mod +12 -0
  71. code_graph_rag-0.0.996/codebase_rag/parsers/go_frontend/gotypes/go.sum +8 -0
  72. {code_graph_rag-0.0.895 → code_graph_rag-0.0.996}/codebase_rag/parsers/import_processor.py +36 -1
  73. {code_graph_rag-0.0.895 → code_graph_rag-0.0.996}/codebase_rag/parsers/java/utils.py +38 -4
  74. {code_graph_rag-0.0.895 → code_graph_rag-0.0.996}/codebase_rag/parsers/java/variable_analyzer.py +8 -4
  75. {code_graph_rag-0.0.895 → code_graph_rag-0.0.996}/codebase_rag/parsers/js_ts/ingest.py +6 -4
  76. {code_graph_rag-0.0.895 → code_graph_rag-0.0.996}/codebase_rag/parsers/js_ts/module_system.py +23 -4
  77. code_graph_rag-0.0.996/codebase_rag/parsers/module_docstring.py +672 -0
  78. code_graph_rag-0.0.996/codebase_rag/parsers/parameter_nodes.py +828 -0
  79. code_graph_rag-0.0.996/codebase_rag/parsers/py/ast_analyzer.py +1500 -0
  80. {code_graph_rag-0.0.895 → code_graph_rag-0.0.996}/codebase_rag/parsers/py/expression_analyzer.py +89 -1
  81. code_graph_rag-0.0.996/codebase_rag/parsers/py/type_inference.py +407 -0
  82. {code_graph_rag-0.0.895 → code_graph_rag-0.0.996}/codebase_rag/parsers/py/variable_analyzer.py +365 -13
  83. code_graph_rag-0.0.996/codebase_rag/parsers/python_source_roots.py +220 -0
  84. code_graph_rag-0.0.996/codebase_rag/parsers/structure_processor.py +273 -0
  85. {code_graph_rag-0.0.895 → code_graph_rag-0.0.996}/codebase_rag/parsers/type_facts.py +26 -4
  86. {code_graph_rag-0.0.895 → code_graph_rag-0.0.996}/codebase_rag/parsers/type_inference.py +34 -3
  87. {code_graph_rag-0.0.895 → code_graph_rag-0.0.996}/codebase_rag/parsers/utils.py +272 -11
  88. {code_graph_rag-0.0.895 → code_graph_rag-0.0.996}/codebase_rag/prompts.py +91 -11
  89. {code_graph_rag-0.0.895 → code_graph_rag-0.0.996}/codebase_rag/providers/base.py +21 -6
  90. {code_graph_rag-0.0.895 → code_graph_rag-0.0.996}/codebase_rag/providers/litellm.py +2 -2
  91. code_graph_rag-0.0.996/codebase_rag/queries/highlights/c_sharp.scm +3 -0
  92. code_graph_rag-0.0.996/codebase_rag/queries/highlights/dart.scm +19 -0
  93. code_graph_rag-0.0.996/codebase_rag/queries/highlights/java.scm +17 -0
  94. code_graph_rag-0.0.996/codebase_rag/queries/highlights/javascript.scm +14 -0
  95. code_graph_rag-0.0.996/codebase_rag/queries/highlights/php.scm +11 -0
  96. code_graph_rag-0.0.996/codebase_rag/queries/highlights/python.scm +5 -0
  97. code_graph_rag-0.0.996/codebase_rag/queries/highlights/rust.scm +11 -0
  98. code_graph_rag-0.0.996/codebase_rag/queries/highlights/typescript.scm +17 -0
  99. {code_graph_rag-0.0.895 → code_graph_rag-0.0.996}/codebase_rag/readme_sections.py +37 -29
  100. {code_graph_rag-0.0.895 → code_graph_rag-0.0.996}/codebase_rag/services/__init__.py +13 -1
  101. code_graph_rag-0.0.996/codebase_rag/services/cypher_guard.py +198 -0
  102. code_graph_rag-0.0.996/codebase_rag/services/gloss_cleanup.py +94 -0
  103. {code_graph_rag-0.0.895 → code_graph_rag-0.0.996}/codebase_rag/services/graph_service.py +167 -42
  104. {code_graph_rag-0.0.895 → code_graph_rag-0.0.996}/codebase_rag/services/llm.py +61 -26
  105. code_graph_rag-0.0.996/codebase_rag/services/neo4j_driver.py +221 -0
  106. {code_graph_rag-0.0.895 → code_graph_rag-0.0.996}/codebase_rag/services/protobuf_service.py +20 -14
  107. {code_graph_rag-0.0.895 → code_graph_rag-0.0.996}/codebase_rag/services/provenance.py +25 -14
  108. {code_graph_rag-0.0.895 → code_graph_rag-0.0.996}/codebase_rag/structural_delta.py +381 -37
  109. {code_graph_rag-0.0.895 → code_graph_rag-0.0.996}/codebase_rag/tools/code_retrieval.py +12 -5
  110. {code_graph_rag-0.0.895 → code_graph_rag-0.0.996}/codebase_rag/tools/codebase_query.py +56 -7
  111. code_graph_rag-0.0.996/codebase_rag/tools/health_checker.py +389 -0
  112. {code_graph_rag-0.0.895 → code_graph_rag-0.0.996}/codebase_rag/tools/semantic_search.py +18 -5
  113. {code_graph_rag-0.0.895 → code_graph_rag-0.0.996}/codebase_rag/tools/shell_command.py +114 -1
  114. {code_graph_rag-0.0.895 → code_graph_rag-0.0.996}/codebase_rag/tools/tool_descriptions.py +79 -0
  115. {code_graph_rag-0.0.895 → code_graph_rag-0.0.996}/codebase_rag/trace/cpuprofile.py +8 -4
  116. {code_graph_rag-0.0.895 → code_graph_rag-0.0.996}/codebase_rag/trace/resolution.py +2 -5
  117. {code_graph_rag-0.0.895 → code_graph_rag-0.0.996}/codebase_rag/types_defs.py +152 -9
  118. {code_graph_rag-0.0.895 → code_graph_rag-0.0.996}/codebase_rag/utils/fqn_resolver.py +28 -12
  119. {code_graph_rag-0.0.895 → code_graph_rag-0.0.996}/codebase_rag/utils/path_utils.py +65 -9
  120. code_graph_rag-0.0.996/codebase_rag/utils/qn_markers.py +77 -0
  121. code_graph_rag-0.0.996/codebase_rag/utils/token_utils.py +104 -0
  122. {code_graph_rag-0.0.895 → code_graph_rag-0.0.996}/codebase_rag/vector_store.py +64 -19
  123. code_graph_rag-0.0.996/codec/schema_pb2.py +93 -0
  124. {code_graph_rag-0.0.895 → code_graph_rag-0.0.996}/codec/schema_pb2.pyi +154 -14
  125. {code_graph_rag-0.0.895 → code_graph_rag-0.0.996}/pyproject.toml +8 -1
  126. code_graph_rag-0.0.895/codebase_rag/constants/health.py +0 -62
  127. code_graph_rag-0.0.895/codebase_rag/cypher_queries.py +0 -572
  128. code_graph_rag-0.0.895/codebase_rag/parsers/go_frontend/gotypes/go.mod +0 -10
  129. code_graph_rag-0.0.895/codebase_rag/parsers/go_frontend/gotypes/go.sum +0 -8
  130. code_graph_rag-0.0.895/codebase_rag/parsers/py/ast_analyzer.py +0 -575
  131. code_graph_rag-0.0.895/codebase_rag/parsers/py/type_inference.py +0 -116
  132. code_graph_rag-0.0.895/codebase_rag/parsers/python_source_roots.py +0 -147
  133. code_graph_rag-0.0.895/codebase_rag/parsers/structure_processor.py +0 -167
  134. code_graph_rag-0.0.895/codebase_rag/tools/health_checker.py +0 -258
  135. code_graph_rag-0.0.895/codebase_rag/utils/token_utils.py +0 -53
  136. code_graph_rag-0.0.895/codec/schema_pb2.py +0 -85
  137. {code_graph_rag-0.0.895 → code_graph_rag-0.0.996}/LICENSE +0 -0
  138. {code_graph_rag-0.0.895 → code_graph_rag-0.0.996}/cgr/__init__.py +0 -0
  139. {code_graph_rag-0.0.895 → code_graph_rag-0.0.996}/code_graph_rag.egg-info/dependency_links.txt +0 -0
  140. {code_graph_rag-0.0.895 → code_graph_rag-0.0.996}/code_graph_rag.egg-info/entry_points.txt +0 -0
  141. {code_graph_rag-0.0.895 → code_graph_rag-0.0.996}/code_graph_rag.egg-info/top_level.txt +0 -0
  142. {code_graph_rag-0.0.895 → code_graph_rag-0.0.996}/codebase_rag/__init__.py +0 -0
  143. {code_graph_rag-0.0.895 → code_graph_rag-0.0.996}/codebase_rag/analyzers/__init__.py +0 -0
  144. {code_graph_rag-0.0.895 → code_graph_rag-0.0.996}/codebase_rag/analyzers/ast_grep_analyzer.py +0 -0
  145. {code_graph_rag-0.0.895 → code_graph_rag-0.0.996}/codebase_rag/analyzers/ast_grep_rules/patterns/c.yaml +0 -0
  146. {code_graph_rag-0.0.895 → code_graph_rag-0.0.996}/codebase_rag/analyzers/ast_grep_rules/patterns/cpp.yaml +0 -0
  147. {code_graph_rag-0.0.895 → code_graph_rag-0.0.996}/codebase_rag/analyzers/ast_grep_rules/patterns/csharp.yaml +0 -0
  148. {code_graph_rag-0.0.895 → code_graph_rag-0.0.996}/codebase_rag/analyzers/ast_grep_rules/patterns/dart.yaml +0 -0
  149. {code_graph_rag-0.0.895 → code_graph_rag-0.0.996}/codebase_rag/analyzers/ast_grep_rules/patterns/go.yaml +0 -0
  150. {code_graph_rag-0.0.895 → code_graph_rag-0.0.996}/codebase_rag/analyzers/ast_grep_rules/patterns/java.yaml +0 -0
  151. {code_graph_rag-0.0.895 → code_graph_rag-0.0.996}/codebase_rag/analyzers/ast_grep_rules/patterns/javascript.yaml +0 -0
  152. {code_graph_rag-0.0.895 → code_graph_rag-0.0.996}/codebase_rag/analyzers/ast_grep_rules/patterns/lua.yaml +0 -0
  153. {code_graph_rag-0.0.895 → code_graph_rag-0.0.996}/codebase_rag/analyzers/ast_grep_rules/patterns/php.yaml +0 -0
  154. {code_graph_rag-0.0.895 → code_graph_rag-0.0.996}/codebase_rag/analyzers/ast_grep_rules/patterns/python.yaml +0 -0
  155. {code_graph_rag-0.0.895 → code_graph_rag-0.0.996}/codebase_rag/analyzers/ast_grep_rules/patterns/ruby.yaml +0 -0
  156. {code_graph_rag-0.0.895 → code_graph_rag-0.0.996}/codebase_rag/analyzers/ast_grep_rules/patterns/rust.yaml +0 -0
  157. {code_graph_rag-0.0.895 → code_graph_rag-0.0.996}/codebase_rag/analyzers/ast_grep_rules/patterns/scala.yaml +0 -0
  158. {code_graph_rag-0.0.895 → code_graph_rag-0.0.996}/codebase_rag/analyzers/ast_grep_rules/patterns/tsx.yaml +0 -0
  159. {code_graph_rag-0.0.895 → code_graph_rag-0.0.996}/codebase_rag/analyzers/ast_grep_rules/patterns/typescript.yaml +0 -0
  160. {code_graph_rag-0.0.895 → code_graph_rag-0.0.996}/codebase_rag/analyzers/ast_grep_rules/security/c.yaml +0 -0
  161. {code_graph_rag-0.0.895 → code_graph_rag-0.0.996}/codebase_rag/analyzers/ast_grep_rules/security/cpp.yaml +0 -0
  162. {code_graph_rag-0.0.895 → code_graph_rag-0.0.996}/codebase_rag/analyzers/ast_grep_rules/security/csharp.yaml +0 -0
  163. {code_graph_rag-0.0.895 → code_graph_rag-0.0.996}/codebase_rag/analyzers/ast_grep_rules/security/dart.yaml +0 -0
  164. {code_graph_rag-0.0.895 → code_graph_rag-0.0.996}/codebase_rag/analyzers/ast_grep_rules/security/go.yaml +0 -0
  165. {code_graph_rag-0.0.895 → code_graph_rag-0.0.996}/codebase_rag/analyzers/ast_grep_rules/security/java.yaml +0 -0
  166. {code_graph_rag-0.0.895 → code_graph_rag-0.0.996}/codebase_rag/analyzers/ast_grep_rules/security/javascript.yaml +0 -0
  167. {code_graph_rag-0.0.895 → code_graph_rag-0.0.996}/codebase_rag/analyzers/ast_grep_rules/security/lua.yaml +0 -0
  168. {code_graph_rag-0.0.895 → code_graph_rag-0.0.996}/codebase_rag/analyzers/ast_grep_rules/security/php.yaml +0 -0
  169. {code_graph_rag-0.0.895 → code_graph_rag-0.0.996}/codebase_rag/analyzers/ast_grep_rules/security/python.yaml +0 -0
  170. {code_graph_rag-0.0.895 → code_graph_rag-0.0.996}/codebase_rag/analyzers/ast_grep_rules/security/ruby.yaml +0 -0
  171. {code_graph_rag-0.0.895 → code_graph_rag-0.0.996}/codebase_rag/analyzers/ast_grep_rules/security/rust.yaml +0 -0
  172. {code_graph_rag-0.0.895 → code_graph_rag-0.0.996}/codebase_rag/analyzers/ast_grep_rules/security/scala.yaml +0 -0
  173. {code_graph_rag-0.0.895 → code_graph_rag-0.0.996}/codebase_rag/analyzers/ast_grep_rules/security/tsx.yaml +0 -0
  174. {code_graph_rag-0.0.895 → code_graph_rag-0.0.996}/codebase_rag/analyzers/ast_grep_rules/security/typescript.yaml +0 -0
  175. {code_graph_rag-0.0.895 → code_graph_rag-0.0.996}/codebase_rag/analyzers/ast_grep_rules/smells/c.yaml +0 -0
  176. {code_graph_rag-0.0.895 → code_graph_rag-0.0.996}/codebase_rag/analyzers/ast_grep_rules/smells/cpp.yaml +0 -0
  177. {code_graph_rag-0.0.895 → code_graph_rag-0.0.996}/codebase_rag/analyzers/ast_grep_rules/smells/csharp.yaml +0 -0
  178. {code_graph_rag-0.0.895 → code_graph_rag-0.0.996}/codebase_rag/analyzers/ast_grep_rules/smells/dart.yaml +0 -0
  179. {code_graph_rag-0.0.895 → code_graph_rag-0.0.996}/codebase_rag/analyzers/ast_grep_rules/smells/go.yaml +0 -0
  180. {code_graph_rag-0.0.895 → code_graph_rag-0.0.996}/codebase_rag/analyzers/ast_grep_rules/smells/java.yaml +0 -0
  181. {code_graph_rag-0.0.895 → code_graph_rag-0.0.996}/codebase_rag/analyzers/ast_grep_rules/smells/javascript.yaml +0 -0
  182. {code_graph_rag-0.0.895 → code_graph_rag-0.0.996}/codebase_rag/analyzers/ast_grep_rules/smells/lua.yaml +0 -0
  183. {code_graph_rag-0.0.895 → code_graph_rag-0.0.996}/codebase_rag/analyzers/ast_grep_rules/smells/php.yaml +0 -0
  184. {code_graph_rag-0.0.895 → code_graph_rag-0.0.996}/codebase_rag/analyzers/ast_grep_rules/smells/python.yaml +0 -0
  185. {code_graph_rag-0.0.895 → code_graph_rag-0.0.996}/codebase_rag/analyzers/ast_grep_rules/smells/ruby.yaml +0 -0
  186. {code_graph_rag-0.0.895 → code_graph_rag-0.0.996}/codebase_rag/analyzers/ast_grep_rules/smells/rust.yaml +0 -0
  187. {code_graph_rag-0.0.895 → code_graph_rag-0.0.996}/codebase_rag/analyzers/ast_grep_rules/smells/scala.yaml +0 -0
  188. {code_graph_rag-0.0.895 → code_graph_rag-0.0.996}/codebase_rag/analyzers/ast_grep_rules/smells/tsx.yaml +0 -0
  189. {code_graph_rag-0.0.895 → code_graph_rag-0.0.996}/codebase_rag/analyzers/ast_grep_rules/smells/typescript.yaml +0 -0
  190. {code_graph_rag-0.0.895 → code_graph_rag-0.0.996}/codebase_rag/capture.py +0 -0
  191. {code_graph_rag-0.0.895 → code_graph_rag-0.0.996}/codebase_rag/cgr_state.py +0 -0
  192. {code_graph_rag-0.0.895 → code_graph_rag-0.0.996}/codebase_rag/constants/__init__.py +0 -0
  193. {code_graph_rag-0.0.895 → code_graph_rag-0.0.996}/codebase_rag/constants/ast_go.py +0 -0
  194. {code_graph_rag-0.0.895 → code_graph_rag-0.0.996}/codebase_rag/constants/ast_js.py +0 -0
  195. {code_graph_rag-0.0.895 → code_graph_rag-0.0.996}/codebase_rag/constants/ast_lua.py +0 -0
  196. {code_graph_rag-0.0.895 → code_graph_rag-0.0.996}/codebase_rag/constants/ast_sql.py +0 -0
  197. {code_graph_rag-0.0.895 → code_graph_rag-0.0.996}/codebase_rag/constants/deadcode_roots.py +0 -0
  198. {code_graph_rag-0.0.895 → code_graph_rag-0.0.996}/codebase_rag/constants/deps.py +0 -0
  199. {code_graph_rag-0.0.895 → code_graph_rag-0.0.996}/codebase_rag/constants/duplicates.py +0 -0
  200. {code_graph_rag-0.0.895 → code_graph_rag-0.0.996}/codebase_rag/constants/fqn_specs.py +0 -0
  201. {code_graph_rag-0.0.895 → code_graph_rag-0.0.996}/codebase_rag/constants/lang_tooling.py +0 -0
  202. {code_graph_rag-0.0.895 → code_graph_rag-0.0.996}/codebase_rag/constants/languages.py +0 -0
  203. {code_graph_rag-0.0.895 → code_graph_rag-0.0.996}/codebase_rag/constants/providers.py +0 -0
  204. {code_graph_rag-0.0.895 → code_graph_rag-0.0.996}/codebase_rag/constants/stdlib_types.py +0 -0
  205. {code_graph_rag-0.0.895 → code_graph_rag-0.0.996}/codebase_rag/constants/structural.py +0 -0
  206. {code_graph_rag-0.0.895 → code_graph_rag-0.0.996}/codebase_rag/crash_correlation.py +0 -0
  207. {code_graph_rag-0.0.895 → code_graph_rag-0.0.996}/codebase_rag/decorators.py +0 -0
  208. {code_graph_rag-0.0.895 → code_graph_rag-0.0.996}/codebase_rag/docker-compose.yaml +0 -0
  209. {code_graph_rag-0.0.895 → code_graph_rag-0.0.996}/codebase_rag/editing/cli.py +0 -0
  210. {code_graph_rag-0.0.895 → code_graph_rag-0.0.996}/codebase_rag/editing/patcher.py +0 -0
  211. {code_graph_rag-0.0.895 → code_graph_rag-0.0.996}/codebase_rag/editor_links.py +0 -0
  212. {code_graph_rag-0.0.895 → code_graph_rag-0.0.996}/codebase_rag/flow_verdict.py +0 -0
  213. {code_graph_rag-0.0.895 → code_graph_rag-0.0.996}/codebase_rag/function_registry.py +0 -0
  214. {code_graph_rag-0.0.895 → code_graph_rag-0.0.996}/codebase_rag/graph_audit.py +0 -0
  215. {code_graph_rag-0.0.895 → code_graph_rag-0.0.996}/codebase_rag/graph_cli.py +0 -0
  216. {code_graph_rag-0.0.895 → code_graph_rag-0.0.996}/codebase_rag/graph_loader.py +0 -0
  217. {code_graph_rag-0.0.895 → code_graph_rag-0.0.996}/codebase_rag/mcp/__init__.py +0 -0
  218. {code_graph_rag-0.0.895 → code_graph_rag-0.0.996}/codebase_rag/mcp/client.py +0 -0
  219. {code_graph_rag-0.0.895 → code_graph_rag-0.0.996}/codebase_rag/parser_fingerprint.py +0 -0
  220. {code_graph_rag-0.0.895 → code_graph_rag-0.0.996}/codebase_rag/parser_loader.py +0 -0
  221. {code_graph_rag-0.0.895 → code_graph_rag-0.0.996}/codebase_rag/parsers/__init__.py +0 -0
  222. {code_graph_rag-0.0.895 → code_graph_rag-0.0.996}/codebase_rag/parsers/ast_fingerprint.py +0 -0
  223. {code_graph_rag-0.0.895 → code_graph_rag-0.0.996}/codebase_rag/parsers/ast_grep_patterns/bash.yaml +0 -0
  224. {code_graph_rag-0.0.895 → code_graph_rag-0.0.996}/codebase_rag/parsers/ast_grep_patterns/elixir.yaml +0 -0
  225. {code_graph_rag-0.0.895 → code_graph_rag-0.0.996}/codebase_rag/parsers/ast_grep_patterns/haskell.yaml +0 -0
  226. {code_graph_rag-0.0.895 → code_graph_rag-0.0.996}/codebase_rag/parsers/ast_grep_patterns/kotlin.yaml +0 -0
  227. {code_graph_rag-0.0.895 → code_graph_rag-0.0.996}/codebase_rag/parsers/ast_grep_patterns/nix.yaml +0 -0
  228. {code_graph_rag-0.0.895 → code_graph_rag-0.0.996}/codebase_rag/parsers/ast_grep_patterns/ruby.yaml +0 -0
  229. {code_graph_rag-0.0.895 → code_graph_rag-0.0.996}/codebase_rag/parsers/ast_grep_patterns/solidity.yaml +0 -0
  230. {code_graph_rag-0.0.895 → code_graph_rag-0.0.996}/codebase_rag/parsers/ast_grep_patterns/swift.yaml +0 -0
  231. {code_graph_rag-0.0.895 → code_graph_rag-0.0.996}/codebase_rag/parsers/build_lock.py +0 -0
  232. {code_graph_rag-0.0.895 → code_graph_rag-0.0.996}/codebase_rag/parsers/class_ingest/__init__.py +0 -0
  233. {code_graph_rag-0.0.895 → code_graph_rag-0.0.996}/codebase_rag/parsers/class_ingest/cpp_modules.py +0 -0
  234. {code_graph_rag-0.0.895 → code_graph_rag-0.0.996}/codebase_rag/parsers/class_ingest/node_type.py +0 -0
  235. {code_graph_rag-0.0.895 → code_graph_rag-0.0.996}/codebase_rag/parsers/class_ingest/relationships.py +0 -0
  236. {code_graph_rag-0.0.895 → code_graph_rag-0.0.996}/codebase_rag/parsers/class_ingest/utils.py +0 -0
  237. {code_graph_rag-0.0.895 → code_graph_rag-0.0.996}/codebase_rag/parsers/contract_linking.py +0 -0
  238. {code_graph_rag-0.0.895 → code_graph_rag-0.0.996}/codebase_rag/parsers/contracts.py +0 -0
  239. {code_graph_rag-0.0.895 → code_graph_rag-0.0.996}/codebase_rag/parsers/cpp/__init__.py +0 -0
  240. {code_graph_rag-0.0.895 → code_graph_rag-0.0.996}/codebase_rag/parsers/cpp/preproc_recovery.py +0 -0
  241. {code_graph_rag-0.0.895 → code_graph_rag-0.0.996}/codebase_rag/parsers/cpp/type_inference.py +0 -0
  242. {code_graph_rag-0.0.895 → code_graph_rag-0.0.996}/codebase_rag/parsers/cpp/utils.py +0 -0
  243. {code_graph_rag-0.0.895 → code_graph_rag-0.0.996}/codebase_rag/parsers/cpp_frontend/__init__.py +0 -0
  244. {code_graph_rag-0.0.895 → code_graph_rag-0.0.996}/codebase_rag/parsers/cpp_frontend/constants.py +0 -0
  245. {code_graph_rag-0.0.895 → code_graph_rag-0.0.996}/codebase_rag/parsers/cpp_frontend/qn.py +0 -0
  246. {code_graph_rag-0.0.895 → code_graph_rag-0.0.996}/codebase_rag/parsers/csharp/__init__.py +0 -0
  247. {code_graph_rag-0.0.895 → code_graph_rag-0.0.996}/codebase_rag/parsers/csharp_frontend/__init__.py +0 -0
  248. {code_graph_rag-0.0.895 → code_graph_rag-0.0.996}/codebase_rag/parsers/csharp_frontend/frontend.py +0 -0
  249. {code_graph_rag-0.0.895 → code_graph_rag-0.0.996}/codebase_rag/parsers/csharp_frontend/roslyn/Frontend.cs +0 -0
  250. {code_graph_rag-0.0.895 → code_graph_rag-0.0.996}/codebase_rag/parsers/csharp_frontend/roslyn/Frontend.csproj +0 -0
  251. {code_graph_rag-0.0.895 → code_graph_rag-0.0.996}/codebase_rag/parsers/csharp_frontend/roslyn/Program.cs +0 -0
  252. {code_graph_rag-0.0.895 → code_graph_rag-0.0.996}/codebase_rag/parsers/dart/__init__.py +0 -0
  253. {code_graph_rag-0.0.895 → code_graph_rag-0.0.996}/codebase_rag/parsers/dart/type_inference.py +0 -0
  254. {code_graph_rag-0.0.895 → code_graph_rag-0.0.996}/codebase_rag/parsers/dependency_parser.py +0 -0
  255. {code_graph_rag-0.0.895 → code_graph_rag-0.0.996}/codebase_rag/parsers/dispatch_registry.py +0 -0
  256. {code_graph_rag-0.0.895 → code_graph_rag-0.0.996}/codebase_rag/parsers/document_tier.py +0 -0
  257. {code_graph_rag-0.0.895 → code_graph_rag-0.0.996}/codebase_rag/parsers/endpoint_prefixes.py +0 -0
  258. {code_graph_rag-0.0.895 → code_graph_rag-0.0.996}/codebase_rag/parsers/endpoint_routes.py +0 -0
  259. {code_graph_rag-0.0.895 → code_graph_rag-0.0.996}/codebase_rag/parsers/endpoints.py +0 -0
  260. {code_graph_rag-0.0.895 → code_graph_rag-0.0.996}/codebase_rag/parsers/export_detection.py +0 -0
  261. {code_graph_rag-0.0.895 → code_graph_rag-0.0.996}/codebase_rag/parsers/flat_module.py +0 -0
  262. {code_graph_rag-0.0.895 → code_graph_rag-0.0.996}/codebase_rag/parsers/flow_access/__init__.py +0 -0
  263. {code_graph_rag-0.0.895 → code_graph_rag-0.0.996}/codebase_rag/parsers/flow_access/constants.py +0 -0
  264. {code_graph_rag-0.0.895 → code_graph_rag-0.0.996}/codebase_rag/parsers/flow_access/processor.py +0 -0
  265. {code_graph_rag-0.0.895 → code_graph_rag-0.0.996}/codebase_rag/parsers/frontend_mode.py +0 -0
  266. {code_graph_rag-0.0.895 → code_graph_rag-0.0.996}/codebase_rag/parsers/frontends/__init__.py +0 -0
  267. {code_graph_rag-0.0.895 → code_graph_rag-0.0.996}/codebase_rag/parsers/frontends/cpp.py +0 -0
  268. {code_graph_rag-0.0.895 → code_graph_rag-0.0.996}/codebase_rag/parsers/frontends/csharp.py +0 -0
  269. {code_graph_rag-0.0.895 → code_graph_rag-0.0.996}/codebase_rag/parsers/frontends/go.py +0 -0
  270. {code_graph_rag-0.0.895 → code_graph_rag-0.0.996}/codebase_rag/parsers/frontends/java.py +0 -0
  271. {code_graph_rag-0.0.895 → code_graph_rag-0.0.996}/codebase_rag/parsers/frontends/protocol.py +0 -0
  272. {code_graph_rag-0.0.895 → code_graph_rag-0.0.996}/codebase_rag/parsers/frontends/python.py +0 -0
  273. {code_graph_rag-0.0.895 → code_graph_rag-0.0.996}/codebase_rag/parsers/frontends/registry.py +0 -0
  274. {code_graph_rag-0.0.895 → code_graph_rag-0.0.996}/codebase_rag/parsers/go/__init__.py +0 -0
  275. {code_graph_rag-0.0.895 → code_graph_rag-0.0.996}/codebase_rag/parsers/go/module_paths.py +0 -0
  276. {code_graph_rag-0.0.895 → code_graph_rag-0.0.996}/codebase_rag/parsers/go/type_inference.py +0 -0
  277. {code_graph_rag-0.0.895 → code_graph_rag-0.0.996}/codebase_rag/parsers/go/utils.py +0 -0
  278. {code_graph_rag-0.0.895 → code_graph_rag-0.0.996}/codebase_rag/parsers/go_frontend/__init__.py +0 -0
  279. {code_graph_rag-0.0.895 → code_graph_rag-0.0.996}/codebase_rag/parsers/go_frontend/frontend.py +0 -0
  280. {code_graph_rag-0.0.895 → code_graph_rag-0.0.996}/codebase_rag/parsers/go_frontend/gotypes/main.go +0 -0
  281. {code_graph_rag-0.0.895 → code_graph_rag-0.0.996}/codebase_rag/parsers/handlers/__init__.py +0 -0
  282. {code_graph_rag-0.0.895 → code_graph_rag-0.0.996}/codebase_rag/parsers/handlers/base.py +0 -0
  283. {code_graph_rag-0.0.895 → code_graph_rag-0.0.996}/codebase_rag/parsers/handlers/cpp.py +0 -0
  284. {code_graph_rag-0.0.895 → code_graph_rag-0.0.996}/codebase_rag/parsers/handlers/java.py +0 -0
  285. {code_graph_rag-0.0.895 → code_graph_rag-0.0.996}/codebase_rag/parsers/handlers/js_ts.py +0 -0
  286. {code_graph_rag-0.0.895 → code_graph_rag-0.0.996}/codebase_rag/parsers/handlers/lua.py +0 -0
  287. {code_graph_rag-0.0.895 → code_graph_rag-0.0.996}/codebase_rag/parsers/handlers/php.py +0 -0
  288. {code_graph_rag-0.0.895 → code_graph_rag-0.0.996}/codebase_rag/parsers/handlers/protocol.py +0 -0
  289. {code_graph_rag-0.0.895 → code_graph_rag-0.0.996}/codebase_rag/parsers/handlers/python.py +0 -0
  290. {code_graph_rag-0.0.895 → code_graph_rag-0.0.996}/codebase_rag/parsers/handlers/registry.py +0 -0
  291. {code_graph_rag-0.0.895 → code_graph_rag-0.0.996}/codebase_rag/parsers/handlers/rust.py +0 -0
  292. {code_graph_rag-0.0.895 → code_graph_rag-0.0.996}/codebase_rag/parsers/io_access/__init__.py +0 -0
  293. {code_graph_rag-0.0.895 → code_graph_rag-0.0.996}/codebase_rag/parsers/io_access/constants.py +0 -0
  294. {code_graph_rag-0.0.895 → code_graph_rag-0.0.996}/codebase_rag/parsers/io_access/descriptor.py +0 -0
  295. {code_graph_rag-0.0.895 → code_graph_rag-0.0.996}/codebase_rag/parsers/io_access/extract.py +0 -0
  296. {code_graph_rag-0.0.895 → code_graph_rag-0.0.996}/codebase_rag/parsers/io_access/models.py +0 -0
  297. {code_graph_rag-0.0.895 → code_graph_rag-0.0.996}/codebase_rag/parsers/io_access/processor.py +0 -0
  298. {code_graph_rag-0.0.895 → code_graph_rag-0.0.996}/codebase_rag/parsers/io_access/registry.py +0 -0
  299. {code_graph_rag-0.0.895 → code_graph_rag-0.0.996}/codebase_rag/parsers/java/__init__.py +0 -0
  300. {code_graph_rag-0.0.895 → code_graph_rag-0.0.996}/codebase_rag/parsers/java/method_resolver.py +0 -0
  301. {code_graph_rag-0.0.895 → code_graph_rag-0.0.996}/codebase_rag/parsers/java/type_inference.py +0 -0
  302. {code_graph_rag-0.0.895 → code_graph_rag-0.0.996}/codebase_rag/parsers/java/type_resolver.py +0 -0
  303. {code_graph_rag-0.0.895 → code_graph_rag-0.0.996}/codebase_rag/parsers/java_frontend/__init__.py +0 -0
  304. {code_graph_rag-0.0.895 → code_graph_rag-0.0.996}/codebase_rag/parsers/java_frontend/frontend.py +0 -0
  305. {code_graph_rag-0.0.895 → code_graph_rag-0.0.996}/codebase_rag/parsers/java_frontend/javac/cgr/Frontend.java +0 -0
  306. {code_graph_rag-0.0.895 → code_graph_rag-0.0.996}/codebase_rag/parsers/java_generated.py +0 -0
  307. {code_graph_rag-0.0.895 → code_graph_rag-0.0.996}/codebase_rag/parsers/java_lombok.py +0 -0
  308. {code_graph_rag-0.0.895 → code_graph_rag-0.0.996}/codebase_rag/parsers/js_ts/__init__.py +0 -0
  309. {code_graph_rag-0.0.895 → code_graph_rag-0.0.996}/codebase_rag/parsers/js_ts/module_paths.py +0 -0
  310. {code_graph_rag-0.0.895 → code_graph_rag-0.0.996}/codebase_rag/parsers/js_ts/type_inference.py +0 -0
  311. {code_graph_rag-0.0.895 → code_graph_rag-0.0.996}/codebase_rag/parsers/js_ts/utils.py +0 -0
  312. {code_graph_rag-0.0.895 → code_graph_rag-0.0.996}/codebase_rag/parsers/lua/__init__.py +0 -0
  313. {code_graph_rag-0.0.895 → code_graph_rag-0.0.996}/codebase_rag/parsers/lua/type_inference.py +0 -0
  314. {code_graph_rag-0.0.895 → code_graph_rag-0.0.996}/codebase_rag/parsers/lua/utils.py +0 -0
  315. {code_graph_rag-0.0.895 → code_graph_rag-0.0.996}/codebase_rag/parsers/py/__init__.py +0 -0
  316. {code_graph_rag-0.0.895 → code_graph_rag-0.0.996}/codebase_rag/parsers/py/utils.py +0 -0
  317. {code_graph_rag-0.0.895 → code_graph_rag-0.0.996}/codebase_rag/parsers/py_frontend/__init__.py +0 -0
  318. {code_graph_rag-0.0.895 → code_graph_rag-0.0.996}/codebase_rag/parsers/py_frontend/frontend.py +0 -0
  319. {code_graph_rag-0.0.895 → code_graph_rag-0.0.996}/codebase_rag/parsers/rpc_exposure.py +0 -0
  320. {code_graph_rag-0.0.895 → code_graph_rag-0.0.996}/codebase_rag/parsers/rs/__init__.py +0 -0
  321. {code_graph_rag-0.0.895 → code_graph_rag-0.0.996}/codebase_rag/parsers/rs/type_inference.py +0 -0
  322. {code_graph_rag-0.0.895 → code_graph_rag-0.0.996}/codebase_rag/parsers/rs/utils.py +0 -0
  323. {code_graph_rag-0.0.895 → code_graph_rag-0.0.996}/codebase_rag/parsers/semantic_call_join.py +0 -0
  324. {code_graph_rag-0.0.895 → code_graph_rag-0.0.996}/codebase_rag/parsers/stdlib_extractor.py +0 -0
  325. {code_graph_rag-0.0.895 → code_graph_rag-0.0.996}/codebase_rag/parsers/string_call.py +0 -0
  326. {code_graph_rag-0.0.895 → code_graph_rag-0.0.996}/codebase_rag/path_filters.py +0 -0
  327. {code_graph_rag-0.0.895 → code_graph_rag-0.0.996}/codebase_rag/providers/__init__.py +0 -0
  328. {code_graph_rag-0.0.895 → code_graph_rag-0.0.996}/codebase_rag/schema_builder.py +0 -0
  329. {code_graph_rag-0.0.895 → code_graph_rag-0.0.996}/codebase_rag/schema_parse.py +0 -0
  330. {code_graph_rag-0.0.895 → code_graph_rag-0.0.996}/codebase_rag/schemas.py +0 -0
  331. {code_graph_rag-0.0.895 → code_graph_rag-0.0.996}/codebase_rag/services/anthropic_token_counter.py +0 -0
  332. {code_graph_rag-0.0.895 → code_graph_rag-0.0.996}/codebase_rag/services/filtering.py +0 -0
  333. {code_graph_rag-0.0.895 → code_graph_rag-0.0.996}/codebase_rag/services/graph_diff.py +0 -0
  334. {code_graph_rag-0.0.895 → code_graph_rag-0.0.996}/codebase_rag/services/resource_cleanup.py +0 -0
  335. {code_graph_rag-0.0.895 → code_graph_rag-0.0.996}/codebase_rag/services/usage_cost.py +0 -0
  336. {code_graph_rag-0.0.895 → code_graph_rag-0.0.996}/codebase_rag/sql_names.py +0 -0
  337. {code_graph_rag-0.0.895 → code_graph_rag-0.0.996}/codebase_rag/stack/__init__.py +0 -0
  338. {code_graph_rag-0.0.895 → code_graph_rag-0.0.996}/codebase_rag/stack/cli.py +0 -0
  339. {code_graph_rag-0.0.895 → code_graph_rag-0.0.996}/codebase_rag/stack/constants.py +0 -0
  340. {code_graph_rag-0.0.895 → code_graph_rag-0.0.996}/codebase_rag/stack/health.py +0 -0
  341. {code_graph_rag-0.0.895 → code_graph_rag-0.0.996}/codebase_rag/stack/manager.py +0 -0
  342. {code_graph_rag-0.0.895 → code_graph_rag-0.0.996}/codebase_rag/structural_check.py +0 -0
  343. {code_graph_rag-0.0.895 → code_graph_rag-0.0.996}/codebase_rag/taint.py +0 -0
  344. {code_graph_rag-0.0.895 → code_graph_rag-0.0.996}/codebase_rag/tool_errors.py +0 -0
  345. {code_graph_rag-0.0.895 → code_graph_rag-0.0.996}/codebase_rag/tools/__init__.py +0 -0
  346. {code_graph_rag-0.0.895 → code_graph_rag-0.0.996}/codebase_rag/tools/ast_grep_service.py +0 -0
  347. {code_graph_rag-0.0.895 → code_graph_rag-0.0.996}/codebase_rag/tools/directory_lister.py +0 -0
  348. {code_graph_rag-0.0.895 → code_graph_rag-0.0.996}/codebase_rag/tools/duplicate_detection.py +0 -0
  349. {code_graph_rag-0.0.895 → code_graph_rag-0.0.996}/codebase_rag/tools/file_editor.py +0 -0
  350. {code_graph_rag-0.0.895 → code_graph_rag-0.0.996}/codebase_rag/tools/file_reader.py +0 -0
  351. {code_graph_rag-0.0.895 → code_graph_rag-0.0.996}/codebase_rag/tools/file_writer.py +0 -0
  352. {code_graph_rag-0.0.895 → code_graph_rag-0.0.996}/codebase_rag/tools/graph_rerank.py +0 -0
  353. {code_graph_rag-0.0.895 → code_graph_rag-0.0.996}/codebase_rag/tools/language.py +0 -0
  354. {code_graph_rag-0.0.895 → code_graph_rag-0.0.996}/codebase_rag/tools/research.py +0 -0
  355. {code_graph_rag-0.0.895 → code_graph_rag-0.0.996}/codebase_rag/tools/structural_editor.py +0 -0
  356. {code_graph_rag-0.0.895 → code_graph_rag-0.0.996}/codebase_rag/tools/structural_search.py +0 -0
  357. {code_graph_rag-0.0.895 → code_graph_rag-0.0.996}/codebase_rag/tools/web_search.py +0 -0
  358. {code_graph_rag-0.0.895 → code_graph_rag-0.0.996}/codebase_rag/trace/__init__.py +0 -0
  359. {code_graph_rag-0.0.895 → code_graph_rag-0.0.996}/codebase_rag/trace/cli.py +0 -0
  360. {code_graph_rag-0.0.895 → code_graph_rag-0.0.996}/codebase_rag/trace/dispatch_site.py +0 -0
  361. {code_graph_rag-0.0.895 → code_graph_rag-0.0.996}/codebase_rag/trace/ebpf_pprof.py +0 -0
  362. {code_graph_rag-0.0.895 → code_graph_rag-0.0.996}/codebase_rag/trace/ingest.py +0 -0
  363. {code_graph_rag-0.0.895 → code_graph_rag-0.0.996}/codebase_rag/trace/instrumented.py +0 -0
  364. {code_graph_rag-0.0.895 → code_graph_rag-0.0.996}/codebase_rag/trace/pprof.py +0 -0
  365. {code_graph_rag-0.0.895 → code_graph_rag-0.0.996}/codebase_rag/trace/pytest_plugin.py +0 -0
  366. {code_graph_rag-0.0.895 → code_graph_rag-0.0.996}/codebase_rag/trace/records.py +0 -0
  367. {code_graph_rag-0.0.895 → code_graph_rag-0.0.996}/codebase_rag/trace/rust_pprof.py +0 -0
  368. {code_graph_rag-0.0.895 → code_graph_rag-0.0.996}/codebase_rag/trace/sourcemap.py +0 -0
  369. {code_graph_rag-0.0.895 → code_graph_rag-0.0.996}/codebase_rag/trace/speedscope.py +0 -0
  370. {code_graph_rag-0.0.895 → code_graph_rag-0.0.996}/codebase_rag/trace/tracer.py +0 -0
  371. {code_graph_rag-0.0.895 → code_graph_rag-0.0.996}/codebase_rag/trace/xdebug.py +0 -0
  372. {code_graph_rag-0.0.895 → code_graph_rag-0.0.996}/codebase_rag/unixcoder.py +0 -0
  373. {code_graph_rag-0.0.895 → code_graph_rag-0.0.996}/codebase_rag/utils/__init__.py +0 -0
  374. {code_graph_rag-0.0.895 → code_graph_rag-0.0.996}/codebase_rag/utils/dependencies.py +0 -0
  375. {code_graph_rag-0.0.895 → code_graph_rag-0.0.996}/codebase_rag/utils/rich_markdown.py +0 -0
  376. {code_graph_rag-0.0.895 → code_graph_rag-0.0.996}/codebase_rag/utils/source_extraction.py +0 -0
  377. {code_graph_rag-0.0.895 → code_graph_rag-0.0.996}/codebase_rag/workspaces/__init__.py +0 -0
  378. {code_graph_rag-0.0.895 → code_graph_rag-0.0.996}/codebase_rag/workspaces/cli.py +0 -0
  379. {code_graph_rag-0.0.895 → code_graph_rag-0.0.996}/codebase_rag/workspaces/constants.py +0 -0
  380. {code_graph_rag-0.0.895 → code_graph_rag-0.0.996}/codebase_rag/workspaces/models.py +0 -0
  381. {code_graph_rag-0.0.895 → code_graph_rag-0.0.996}/codebase_rag/workspaces/storage.py +0 -0
  382. {code_graph_rag-0.0.895 → code_graph_rag-0.0.996}/codec/__init__.py +0 -0
  383. {code_graph_rag-0.0.895 → code_graph_rag-0.0.996}/setup.cfg +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: code-graph-rag
3
- Version: 0.0.895
3
+ Version: 0.0.996
4
4
  Summary: The ultimate RAG for your monorepo. Query, understand, and edit multi-language codebases with the power of AI and knowledge graphs
5
5
  License-Expression: MIT
6
6
  Keywords: rag,retrieval-augmented-generation,knowledge-graph,code-analysis,tree-sitter,mcp,mcp-server,llm,graph-database,semantic-search,codebase,memgraph,developer-tools,monorepo
@@ -52,6 +52,8 @@ Requires-Dist: ast-grep-py>=0.44.0; extra == "test"
52
52
  Requires-Dist: pyyaml>=6.0; extra == "test"
53
53
  Provides-Extra: cpp
54
54
  Requires-Dist: libclang>=18.1.1; extra == "cpp"
55
+ Provides-Extra: neo4j
56
+ Requires-Dist: neo4j>=5.28.1; extra == "neo4j"
55
57
  Provides-Extra: treesitter-full
56
58
  Requires-Dist: tree-sitter-python>=0.23.6; extra == "treesitter-full"
57
59
  Requires-Dist: tree-sitter-javascript>=0.23.1; extra == "treesitter-full"
@@ -83,7 +85,7 @@ Dynamic: license-file
83
85
 
84
86
  # Code-Graph-RAG
85
87
 
86
- Code-Graph-RAG parses a multi-language codebase with Tree-sitter, builds a knowledge graph of its structure in Memgraph, and lets you query, edit, and optimise that code in plain English. It works across a monorepo of mixed languages under one unified graph schema.
88
+ Code-Graph-RAG parses a multi-language codebase with Tree-sitter, sharpened by compiler-grade frontends and runtime traces where available, builds a knowledge graph of its structure in Memgraph, and lets you query, edit, and optimise that code in plain English. It works across a monorepo of mixed languages under one unified graph schema.
87
89
 
88
90
  ## What It Does
89
91
 
@@ -153,15 +155,12 @@ pip install "code-graph-rag[treesitter-full] @ git+https://github.com/vitali87/c
153
155
  - `cmake` (for building pymgclient)
154
156
  - `ripgrep` (`rg`) (for shell command text searching)
155
157
 
156
- The wheel is pure Python (`py3-none-any`), so the package itself installs on
157
- any platform with Python 3.12 or newer (dependencies may still need platform
158
- wheels or build tools, such as `cmake` for `pymgclient`). The piwheels build for Debian Bookworm shows as failed
159
- because Bookworm's system Python is 3.11, which is below our floor. On
160
- Raspberry Pi OS Bookworm, install into a Python 3.12 environment so the pip
161
- commands above actually run under 3.12: with [uv](https://docs.astral.sh/uv/)
162
- run `uv venv --python 3.12 --seed && source .venv/bin/activate` (uv downloads
163
- 3.12 automatically; `--seed` puts pip in the environment), or install CPython 3.12 yourself and use
164
- `python3.12 -m pip install ...`.
158
+ The wheel is pure Python (`py3-none-any`), so it installs on any platform with
159
+ Python 3.12 or newer. Some distributions ship an older interpreter (Debian
160
+ Bookworm, and so Raspberry Pi OS Bookworm, ships 3.11), which also explains the
161
+ failed piwheels Bookworm build. On those systems, see the [installation
162
+ guide](https://github.com/vitali87/code-graph-rag/blob/main/docs/getting-started/installation.md#older-system-interpreters)
163
+ for the available interpreter-pinning alternatives.
165
164
 
166
165
  ## CLI Quick Start
167
166
 
@@ -1,6 +1,6 @@
1
1
  # Code-Graph-RAG
2
2
 
3
- Code-Graph-RAG parses a multi-language codebase with Tree-sitter, builds a knowledge graph of its structure in Memgraph, and lets you query, edit, and optimise that code in plain English. It works across a monorepo of mixed languages under one unified graph schema.
3
+ Code-Graph-RAG parses a multi-language codebase with Tree-sitter, sharpened by compiler-grade frontends and runtime traces where available, builds a knowledge graph of its structure in Memgraph, and lets you query, edit, and optimise that code in plain English. It works across a monorepo of mixed languages under one unified graph schema.
4
4
 
5
5
  ## What It Does
6
6
 
@@ -70,15 +70,12 @@ pip install "code-graph-rag[treesitter-full] @ git+https://github.com/vitali87/c
70
70
  - `cmake` (for building pymgclient)
71
71
  - `ripgrep` (`rg`) (for shell command text searching)
72
72
 
73
- The wheel is pure Python (`py3-none-any`), so the package itself installs on
74
- any platform with Python 3.12 or newer (dependencies may still need platform
75
- wheels or build tools, such as `cmake` for `pymgclient`). The piwheels build for Debian Bookworm shows as failed
76
- because Bookworm's system Python is 3.11, which is below our floor. On
77
- Raspberry Pi OS Bookworm, install into a Python 3.12 environment so the pip
78
- commands above actually run under 3.12: with [uv](https://docs.astral.sh/uv/)
79
- run `uv venv --python 3.12 --seed && source .venv/bin/activate` (uv downloads
80
- 3.12 automatically; `--seed` puts pip in the environment), or install CPython 3.12 yourself and use
81
- `python3.12 -m pip install ...`.
73
+ The wheel is pure Python (`py3-none-any`), so it installs on any platform with
74
+ Python 3.12 or newer. Some distributions ship an older interpreter (Debian
75
+ Bookworm, and so Raspberry Pi OS Bookworm, ships 3.11), which also explains the
76
+ failed piwheels Bookworm build. On those systems, see the [installation
77
+ guide](https://github.com/vitali87/code-graph-rag/blob/main/docs/getting-started/installation.md#older-system-interpreters)
78
+ for the available interpreter-pinning alternatives.
82
79
 
83
80
  ## CLI Quick Start
84
81
 
@@ -42,7 +42,7 @@
42
42
 
43
43
  # Code-Graph-RAG
44
44
 
45
- Code-Graph-RAG parses a multi-language codebase with Tree-sitter, builds a knowledge graph of its structure in Memgraph, and lets you query, edit, and optimise that code in plain English. It works across a monorepo of mixed languages under one unified graph schema.
45
+ Code-Graph-RAG parses a multi-language codebase with Tree-sitter, sharpened by compiler-grade frontends and runtime traces where available, builds a knowledge graph of its structure in Memgraph, and lets you query, edit, and optimise that code in plain English. It works across a monorepo of mixed languages under one unified graph schema.
46
46
 
47
47
  <p align="center">
48
48
  <img src="./assets/demo.gif" alt="demo">
@@ -51,12 +51,9 @@ Code-Graph-RAG parses a multi-language codebase with Tree-sitter, builds a knowl
51
51
  ## Latest News 🔥
52
52
 
53
53
  <!-- SECTION:latest_news -->
54
- - **File System Operations**: Improved handling of file system operations with platform-neutral joins and safeguards against removing project root.
55
- - **Cache Management**: Enhanced cache management with atomic publishing, dedicated cache stamps, and improved deletion handling for orphan caches.
56
- - **Graph Querying**: Introduced deterministic graph query tools for more precise analysis of code relationships.
57
- - **Re-ingestion & Parsing**: Improved re-ingestion processes, including handling of deleted files, re-parsing of related files, and rebuilding of key data structures.
58
- - **Security & Stability**: Addressed security concerns by blocking removal of project root and improved stability by preventing skipped edits and handling orphaned caches.
59
- - **C++ & Go Integration**: Enhanced integration with C++ and Go, including parsing of module interfaces and handling of module-level class aliases.
54
+ - **Code Generation**: Split Cypher response cleaning and AST-grep rule validation into smaller, more manageable helpers for improved clarity and maintainability.
55
+ - **Scripting Improvements**: Resolved an issue where closed pull request run associations were incorrectly reported as missing, and improved error reporting in scripts to avoid over-claiming failing checks.
56
+ - **Data Handling**: Enhanced the handling of CONTAINS_SECTION in the double's module subtree and refined snippet lookup to project the matched node's own path.
60
57
  <!-- /SECTION:latest_news -->
61
58
 
62
59
  See [NEWS.md](NEWS.md) for the full history.
@@ -77,7 +74,7 @@ Point Code-Graph-RAG at a repository and it reads every source file, extracts fu
77
74
 
78
75
  The system has two components:
79
76
 
80
- 1. **Multi-language parser.** A Tree-sitter based parser reads the codebase and ingests functions, classes, methods, modules, and their relationships into Memgraph under a single language-agnostic schema.
77
+ 1. **Multi-language parser.** A Tree-sitter based parser reads the codebase and ingests functions, classes, methods, modules, and their relationships into Memgraph under a single language-agnostic schema. Where a toolchain is available, compiler-grade frontends layer exact facts on top (libclang for C/C++, `go/types` for Go, and opt-in Roslyn, `javac` and Jedi for C#, Java and Python), and [dynamic tracing](docs/guide/dynamic-tracing.md) merges calls observed at runtime. Tree-sitter stays the backbone: a trace only sees code that ran, and a compiler frontend only covers what its toolchain can build.
81
78
  2. **RAG system** (`codebase_rag/`). An interactive CLI that turns natural language into Cypher queries, retrieves matching code, and drives AI-powered editing and optimisation.
82
79
 
83
80
  ```
@@ -132,7 +129,7 @@ uv tool install "code-graph-rag[treesitter-full,semantic] @ git+https://github.c
132
129
  You also need Python 3.12+, Docker (for Memgraph), `cmake`, and `ripgrep`. Full prerequisites, source installs, and environment setup are in the [Installation](docs/getting-started/installation.md) guide.
133
130
 
134
131
  > [!NOTE]
135
- > The wheel is pure Python (`py3-none-any`), so the package itself installs on any platform with Python 3.12 or newer (dependencies may still need platform wheels or build tools, such as `cmake` for `pymgclient`). The [piwheels](https://www.piwheels.org/project/code-graph-rag/) build for Debian Bookworm shows as failed because Bookworm's system Python is 3.11, which is below our floor. On Raspberry Pi OS Bookworm, pin the interpreter explicitly, for example `uv tool install --python 3.12 "code-graph-rag[treesitter-full,semantic]"`; uv downloads Python 3.12 automatically and the PyPI wheel installs normally.
132
+ > The wheel is pure Python (`py3-none-any`), so it installs on any platform with Python 3.12 or newer. Older system interpreters (Debian Bookworm ships 3.11) need the interpreter pinned explicitly; see [Installation](docs/getting-started/installation.md#older-system-interpreters) for the commands.
136
133
 
137
134
  ## Quick Start
138
135
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: code-graph-rag
3
- Version: 0.0.895
3
+ Version: 0.0.996
4
4
  Summary: The ultimate RAG for your monorepo. Query, understand, and edit multi-language codebases with the power of AI and knowledge graphs
5
5
  License-Expression: MIT
6
6
  Keywords: rag,retrieval-augmented-generation,knowledge-graph,code-analysis,tree-sitter,mcp,mcp-server,llm,graph-database,semantic-search,codebase,memgraph,developer-tools,monorepo
@@ -52,6 +52,8 @@ Requires-Dist: ast-grep-py>=0.44.0; extra == "test"
52
52
  Requires-Dist: pyyaml>=6.0; extra == "test"
53
53
  Provides-Extra: cpp
54
54
  Requires-Dist: libclang>=18.1.1; extra == "cpp"
55
+ Provides-Extra: neo4j
56
+ Requires-Dist: neo4j>=5.28.1; extra == "neo4j"
55
57
  Provides-Extra: treesitter-full
56
58
  Requires-Dist: tree-sitter-python>=0.23.6; extra == "treesitter-full"
57
59
  Requires-Dist: tree-sitter-javascript>=0.23.1; extra == "treesitter-full"
@@ -83,7 +85,7 @@ Dynamic: license-file
83
85
 
84
86
  # Code-Graph-RAG
85
87
 
86
- Code-Graph-RAG parses a multi-language codebase with Tree-sitter, builds a knowledge graph of its structure in Memgraph, and lets you query, edit, and optimise that code in plain English. It works across a monorepo of mixed languages under one unified graph schema.
88
+ Code-Graph-RAG parses a multi-language codebase with Tree-sitter, sharpened by compiler-grade frontends and runtime traces where available, builds a knowledge graph of its structure in Memgraph, and lets you query, edit, and optimise that code in plain English. It works across a monorepo of mixed languages under one unified graph schema.
87
89
 
88
90
  ## What It Does
89
91
 
@@ -153,15 +155,12 @@ pip install "code-graph-rag[treesitter-full] @ git+https://github.com/vitali87/c
153
155
  - `cmake` (for building pymgclient)
154
156
  - `ripgrep` (`rg`) (for shell command text searching)
155
157
 
156
- The wheel is pure Python (`py3-none-any`), so the package itself installs on
157
- any platform with Python 3.12 or newer (dependencies may still need platform
158
- wheels or build tools, such as `cmake` for `pymgclient`). The piwheels build for Debian Bookworm shows as failed
159
- because Bookworm's system Python is 3.11, which is below our floor. On
160
- Raspberry Pi OS Bookworm, install into a Python 3.12 environment so the pip
161
- commands above actually run under 3.12: with [uv](https://docs.astral.sh/uv/)
162
- run `uv venv --python 3.12 --seed && source .venv/bin/activate` (uv downloads
163
- 3.12 automatically; `--seed` puts pip in the environment), or install CPython 3.12 yourself and use
164
- `python3.12 -m pip install ...`.
158
+ The wheel is pure Python (`py3-none-any`), so it installs on any platform with
159
+ Python 3.12 or newer. Some distributions ship an older interpreter (Debian
160
+ Bookworm, and so Raspberry Pi OS Bookworm, ships 3.11), which also explains the
161
+ failed piwheels Bookworm build. On those systems, see the [installation
162
+ guide](https://github.com/vitali87/code-graph-rag/blob/main/docs/getting-started/installation.md#older-system-interpreters)
163
+ for the available interpreter-pinning alternatives.
165
164
 
166
165
  ## CLI Quick Start
167
166
 
@@ -16,6 +16,7 @@ codebase_rag/cgr_state.py
16
16
  codebase_rag/cli.py
17
17
  codebase_rag/cli_help.py
18
18
  codebase_rag/config.py
19
+ codebase_rag/console_marks.py
19
20
  codebase_rag/context_pruning.py
20
21
  codebase_rag/crash_correlation.py
21
22
  codebase_rag/cypher_queries.py
@@ -28,8 +29,12 @@ codebase_rag/embedder.py
28
29
  codebase_rag/exceptions.py
29
30
  codebase_rag/flow_verdict.py
30
31
  codebase_rag/function_registry.py
32
+ codebase_rag/gloss.py
33
+ codebase_rag/gloss_anchor.py
34
+ codebase_rag/gloss_repair.py
31
35
  codebase_rag/graph_audit.py
32
36
  codebase_rag/graph_cli.py
37
+ codebase_rag/graph_dialects.py
33
38
  codebase_rag/graph_loader.py
34
39
  codebase_rag/graph_query.py
35
40
  codebase_rag/graph_updater.py
@@ -133,6 +138,7 @@ codebase_rag/constants/structural.py
133
138
  codebase_rag/constants/trace.py
134
139
  codebase_rag/editing/__init__.py
135
140
  codebase_rag/editing/cli.py
141
+ codebase_rag/editing/contract.py
136
142
  codebase_rag/editing/imports.py
137
143
  codebase_rag/editing/patcher.py
138
144
  codebase_rag/editing/rename.py
@@ -142,6 +148,7 @@ codebase_rag/mcp/client.py
142
148
  codebase_rag/mcp/server.py
143
149
  codebase_rag/mcp/tools.py
144
150
  codebase_rag/parsers/__init__.py
151
+ codebase_rag/parsers/anchor_hash.py
145
152
  codebase_rag/parsers/ast_fingerprint.py
146
153
  codebase_rag/parsers/ast_grep_tier.py
147
154
  codebase_rag/parsers/build_lock.py
@@ -149,6 +156,7 @@ codebase_rag/parsers/call_processor.py
149
156
  codebase_rag/parsers/call_resolver.py
150
157
  codebase_rag/parsers/contract_linking.py
151
158
  codebase_rag/parsers/contracts.py
159
+ codebase_rag/parsers/definition_docstring.py
152
160
  codebase_rag/parsers/definition_processor.py
153
161
  codebase_rag/parsers/dependency_parser.py
154
162
  codebase_rag/parsers/dispatch_registry.py
@@ -156,14 +164,18 @@ codebase_rag/parsers/document_tier.py
156
164
  codebase_rag/parsers/endpoint_prefixes.py
157
165
  codebase_rag/parsers/endpoint_routes.py
158
166
  codebase_rag/parsers/endpoints.py
167
+ codebase_rag/parsers/enum_variants.py
159
168
  codebase_rag/parsers/export_detection.py
160
169
  codebase_rag/parsers/factory.py
170
+ codebase_rag/parsers/field_nodes.py
161
171
  codebase_rag/parsers/flat_module.py
162
172
  codebase_rag/parsers/frontend_mode.py
163
173
  codebase_rag/parsers/function_ingest.py
164
174
  codebase_rag/parsers/import_processor.py
165
175
  codebase_rag/parsers/java_generated.py
166
176
  codebase_rag/parsers/java_lombok.py
177
+ codebase_rag/parsers/module_docstring.py
178
+ codebase_rag/parsers/parameter_nodes.py
167
179
  codebase_rag/parsers/python_source_roots.py
168
180
  codebase_rag/parsers/rpc_exposure.py
169
181
  codebase_rag/parsers/semantic_call_join.py
@@ -279,12 +291,23 @@ codebase_rag/parsers/rs/utils.py
279
291
  codebase_rag/providers/__init__.py
280
292
  codebase_rag/providers/base.py
281
293
  codebase_rag/providers/litellm.py
294
+ codebase_rag/queries/highlights/c_sharp.scm
295
+ codebase_rag/queries/highlights/dart.scm
296
+ codebase_rag/queries/highlights/java.scm
297
+ codebase_rag/queries/highlights/javascript.scm
298
+ codebase_rag/queries/highlights/php.scm
299
+ codebase_rag/queries/highlights/python.scm
300
+ codebase_rag/queries/highlights/rust.scm
301
+ codebase_rag/queries/highlights/typescript.scm
282
302
  codebase_rag/services/__init__.py
283
303
  codebase_rag/services/anthropic_token_counter.py
304
+ codebase_rag/services/cypher_guard.py
284
305
  codebase_rag/services/filtering.py
306
+ codebase_rag/services/gloss_cleanup.py
285
307
  codebase_rag/services/graph_diff.py
286
308
  codebase_rag/services/graph_service.py
287
309
  codebase_rag/services/llm.py
310
+ codebase_rag/services/neo4j_driver.py
288
311
  codebase_rag/services/protobuf_service.py
289
312
  codebase_rag/services/provenance.py
290
313
  codebase_rag/services/resource_cleanup.py
@@ -333,6 +356,7 @@ codebase_rag/utils/__init__.py
333
356
  codebase_rag/utils/dependencies.py
334
357
  codebase_rag/utils/fqn_resolver.py
335
358
  codebase_rag/utils/path_utils.py
359
+ codebase_rag/utils/qn_markers.py
336
360
  codebase_rag/utils/rich_markdown.py
337
361
  codebase_rag/utils/source_extraction.py
338
362
  codebase_rag/utils/token_utils.py
@@ -30,6 +30,9 @@ libclang>=18.1.1
30
30
  [milvus]
31
31
  pymilvus[milvus-lite]>=3.0.0
32
32
 
33
+ [neo4j]
34
+ neo4j>=5.28.1
35
+
33
36
  [python-semantics]
34
37
  jedi>=0.19
35
38
 
@@ -2,7 +2,6 @@
2
2
  # re-parses from disk via the loader so an eviction cannot lose an AST that
3
3
  # type inference still needs (see load()).
4
4
 
5
- import sys
6
5
  from collections import OrderedDict
7
6
  from collections.abc import Callable, ItemsView
8
7
  from pathlib import Path
@@ -13,8 +12,24 @@ from . import constants as cs
13
12
  from .config import settings
14
13
 
15
14
 
15
+ def _estimate_entry_bytes(value: tuple[Node, cs.SupportedLanguage]) -> int:
16
+ # The memory cap is measured in bytes of SOURCE the cached trees span, not
17
+ # the trees' true footprint: tree-sitter allocates nodes in C, invisible to
18
+ # sys.getsizeof (which reports ~56 bytes for any (Node, lang) tuple, so a
19
+ # cap summed from it never triggered). Tree size scales with source size,
20
+ # which makes this a stable proxy; the real heap cost is a multiple of it.
21
+ return value[0].end_byte
22
+
23
+
16
24
  class BoundedASTCache:
17
- __slots__ = ("cache", "loader", "max_entries", "max_memory_bytes")
25
+ __slots__ = (
26
+ "cache",
27
+ "entry_sizes",
28
+ "loader",
29
+ "max_entries",
30
+ "max_memory_bytes",
31
+ "total_bytes",
32
+ )
18
33
 
19
34
  def __init__(
20
35
  self,
@@ -24,6 +39,10 @@ class BoundedASTCache:
24
39
  | None = None,
25
40
  ):
26
41
  self.cache: OrderedDict[Path, tuple[Node, cs.SupportedLanguage]] = OrderedDict()
42
+ # Sizes are recorded at insert so eviction and the running total never
43
+ # rescan every entry: each insert stays O(1) plus the evictions it causes.
44
+ self.entry_sizes: dict[Path, int] = {}
45
+ self.total_bytes = 0
27
46
  self.loader = loader
28
47
  self.max_entries = (
29
48
  max_entries if max_entries is not None else settings.CACHE_MAX_ENTRIES
@@ -47,11 +66,11 @@ class BoundedASTCache:
47
66
  return entry
48
67
 
49
68
  def __setitem__(self, key: Path, value: tuple[Node, cs.SupportedLanguage]) -> None:
50
- if key in self.cache:
51
- del self.cache[key]
52
-
69
+ self._remove(key)
70
+ size = _estimate_entry_bytes(value)
53
71
  self.cache[key] = value
54
-
72
+ self.entry_sizes[key] = size
73
+ self.total_bytes += size
55
74
  self._enforce_limits()
56
75
 
57
76
  def __getitem__(self, key: Path) -> tuple[Node, cs.SupportedLanguage]:
@@ -60,8 +79,7 @@ class BoundedASTCache:
60
79
  return value
61
80
 
62
81
  def __delitem__(self, key: Path) -> None:
63
- if key in self.cache:
64
- del self.cache[key]
82
+ self._remove(key)
65
83
 
66
84
  def __contains__(self, key: Path) -> bool:
67
85
  return key in self.cache
@@ -69,24 +87,25 @@ class BoundedASTCache:
69
87
  def items(self) -> ItemsView[Path, tuple[Node, cs.SupportedLanguage]]:
70
88
  return self.cache.items()
71
89
 
90
+ def clear(self) -> None:
91
+ self.cache.clear()
92
+ self.entry_sizes.clear()
93
+ self.total_bytes = 0
94
+
95
+ def _remove(self, key: Path) -> None:
96
+ if key in self.cache:
97
+ del self.cache[key]
98
+ self.total_bytes -= self.entry_sizes.pop(key)
99
+
100
+ def _evict_oldest(self) -> None:
101
+ key, _ = self.cache.popitem(last=False)
102
+ self.total_bytes -= self.entry_sizes.pop(key)
103
+
72
104
  def _enforce_limits(self) -> None:
73
- while len(self.cache) > self.max_entries:
74
- self.cache.popitem(last=False)
75
-
76
- if self._should_evict_for_memory():
77
- entries_to_remove = max(
78
- 1, len(self.cache) // settings.CACHE_EVICTION_DIVISOR
79
- )
80
- for _ in range(entries_to_remove):
81
- if self.cache:
82
- self.cache.popitem(last=False)
83
-
84
- def _should_evict_for_memory(self) -> bool:
85
- try:
86
- cache_size = sum(sys.getsizeof(v) for v in self.cache.values())
87
- return cache_size > self.max_memory_bytes
88
- except Exception:
89
- return (
90
- len(self.cache)
91
- > self.max_entries * settings.CACHE_MEMORY_THRESHOLD_RATIO
92
- )
105
+ # Evict LRU entries until both caps hold. The newest entry is kept even
106
+ # if it alone exceeds the memory cap: the caller just parsed it and is
107
+ # about to use it, and load() would only re-parse it on the next read.
108
+ while len(self.cache) > self.max_entries or (
109
+ self.total_bytes > self.max_memory_bytes and len(self.cache) > 1
110
+ ):
111
+ self._evict_oldest()
@@ -27,6 +27,7 @@ from . import cypher_queries as cq
27
27
  from . import logs as ls
28
28
  from .capture import CaptureSelection, resolve_capture, split_spec
29
29
  from .config import load_ignore_patterns, settings
30
+ from .console_marks import status_mark
30
31
  from .editing.cli import cli as edits_cli
31
32
  from .editor_links import (
32
33
  EditorTemplateError,
@@ -953,6 +954,9 @@ def mcp_server(
953
954
  ),
954
955
  host: str = typer.Option(None, help=ch.HELP_MCP_HTTP_HOST),
955
956
  port: int = typer.Option(None, help=ch.HELP_MCP_HTTP_PORT),
957
+ workspace: str | None = typer.Option(
958
+ None, "--workspace", help=ch.HELP_MCP_WORKSPACE
959
+ ),
956
960
  ) -> None:
957
961
  try:
958
962
  if transport == cs.MCPTransport.HTTP:
@@ -960,11 +964,13 @@ def mcp_server(
960
964
 
961
965
  resolved_host = host or settings.MCP_HTTP_HOST
962
966
  resolved_port = port or settings.MCP_HTTP_PORT
963
- asyncio.run(serve_http(host=resolved_host, port=resolved_port))
967
+ asyncio.run(
968
+ serve_http(host=resolved_host, port=resolved_port, workspace=workspace)
969
+ )
964
970
  else:
965
971
  from codebase_rag.mcp import serve_stdio
966
972
 
967
- asyncio.run(serve_stdio())
973
+ asyncio.run(serve_stdio(workspace=workspace))
968
974
  except KeyboardInterrupt:
969
975
  app_context.console.print(style(cs.CLI_MSG_APP_TERMINATED, cs.Color.RED))
970
976
  except ValueError as e:
@@ -1185,6 +1191,14 @@ def rename_command(
1185
1191
 
1186
1192
  name, fetch_all, ingestor = _project_and_fetch(project, repo_path)
1187
1193
  with ingestor: # type: ignore[attr-defined]
1194
+ parsers, queries = load_parsers()
1195
+ updater = GraphUpdater(
1196
+ ingestor=ingestor, # type: ignore[arg-type]
1197
+ repo_path=repo_path.resolve(),
1198
+ parsers=parsers,
1199
+ queries=queries,
1200
+ project_name=name,
1201
+ )
1188
1202
  try:
1189
1203
  report = rename(
1190
1204
  repo_path.resolve(),
@@ -1194,6 +1208,7 @@ def rename_command(
1194
1208
  new_name,
1195
1209
  allow_heuristic=allow_heuristic,
1196
1210
  dry_run=dry_run,
1211
+ reingest=updater.reingest,
1197
1212
  )
1198
1213
  except RenameRefused as refused:
1199
1214
  typer.echo(str(refused), err=True)
@@ -1205,6 +1220,7 @@ def rename_command(
1205
1220
  payload = dict(report._asdict())
1206
1221
  payload[cs.KEY_SITES] = sites_for(report.sites)
1207
1222
  payload[cs.KEY_AMBIGUOUS] = sites_for(report.ambiguous)
1223
+ payload["verdict"] = report.verdict._asdict() if report.verdict else None
1208
1224
  typer.echo(json.dumps(payload, indent=cs.MCP_JSON_INDENT, sort_keys=True))
1209
1225
  if not report.applied and not dry_run:
1210
1226
  raise typer.Exit(code=1)
@@ -1306,8 +1322,9 @@ def doctor() -> None:
1306
1322
  table = Table(show_header=False, box=None, padding=(0, 2))
1307
1323
  table.add_column(style="cyan", no_wrap=False)
1308
1324
 
1325
+ encoding = app_context.console.encoding
1309
1326
  for result in results:
1310
- status = "✓" if result.passed else "✗"
1327
+ status = status_mark(result.passed, encoding)
1311
1328
  status_color = cs.Color.GREEN if result.passed else cs.Color.RED
1312
1329
  status_text = style(status, status_color, cs.StyleModifier.NONE)
1313
1330
 
@@ -1435,6 +1452,7 @@ def _dead_code_config(
1435
1452
  entry_points: list[str],
1436
1453
  decorator_roots: list[str],
1437
1454
  min_resolution: cs.EdgeResolution | None = None,
1455
+ endpoint_roots: bool = True,
1438
1456
  ) -> DeadCodeConfig:
1439
1457
  # test_patterns is always set: included tests become roots; excluded, it
1440
1458
  # filters test modules out of module-load roots so test-only code stays dead.
@@ -1448,6 +1466,7 @@ def _dead_code_config(
1448
1466
  entry_points=tuple(entry_points),
1449
1467
  test_patterns=tuple(cs.TEST_PATH_PATTERNS),
1450
1468
  min_resolution=str(min_resolution) if min_resolution is not None else None,
1469
+ endpoint_roots=endpoint_roots,
1451
1470
  )
1452
1471
 
1453
1472
 
@@ -1558,6 +1577,18 @@ def _emit_dead_code(
1558
1577
  app_context.console.print(style(notice, cs.Color.YELLOW))
1559
1578
 
1560
1579
 
1580
+ def _notice_single_project_endpoint_roots(show_progress: bool) -> None:
1581
+ """Endpoint roots off on a graph holding one project: every endpoint
1582
+ reads as uncalled. Stdout carries the JSON payload when that format is
1583
+ chosen (local review P1), so the notice goes to stderr then."""
1584
+ if show_progress:
1585
+ app_context.console.print(
1586
+ style(cs.CLI_DEADCODE_SINGLE_PROJECT_ENDPOINTS, cs.Color.YELLOW)
1587
+ )
1588
+ else:
1589
+ typer.echo(cs.CLI_DEADCODE_SINGLE_PROJECT_ENDPOINTS, err=True)
1590
+
1591
+
1561
1592
  @app.command(
1562
1593
  name=ch.CLICommandName.DEAD_CODE,
1563
1594
  help=ch.CMD_DEAD_CODE,
@@ -1598,6 +1629,11 @@ def dead_code(
1598
1629
  min_resolution: cs.EdgeResolution | None = typer.Option(
1599
1630
  None, "--min-resolution", help=ch.HELP_DEADCODE_MIN_RESOLUTION
1600
1631
  ),
1632
+ endpoint_roots: bool = typer.Option(
1633
+ True,
1634
+ "--endpoint-roots/--no-endpoint-roots",
1635
+ help=ch.HELP_DEADCODE_ENDPOINT_ROOTS,
1636
+ ),
1601
1637
  ) -> None:
1602
1638
  from .dead_code import collect_dead_code_with_coverage
1603
1639
 
@@ -1624,8 +1660,11 @@ def dead_code(
1624
1660
  entry_point,
1625
1661
  decorator_root,
1626
1662
  min_resolution,
1663
+ endpoint_roots,
1627
1664
  ),
1628
1665
  )
1666
+ if not endpoint_roots and len(projects) <= 1:
1667
+ _notice_single_project_endpoint_roots(show_progress)
1629
1668
  except Exception as e:
1630
1669
  app_context.console.print(
1631
1670
  style(cs.CLI_ERR_DEADCODE_FAILED.format(error=e), cs.Color.RED)
@@ -24,6 +24,8 @@ class CLICommandName(StrEnum):
24
24
  STOP = "stop"
25
25
  STATUS = "status"
26
26
  HELP = "help"
27
+ VERIFY_INDEX = "verify-index"
28
+ DIFF_INDEX = "diff-index"
27
29
 
28
30
 
29
31
  APP_DESCRIPTION = (
@@ -380,6 +382,13 @@ HELP_QUERY_OUTPUT_FORMAT = "Format --ask-agent output as table or json."
380
382
  HELP_MCP_TRANSPORT = "Transport to serve: stdio or http."
381
383
  HELP_MCP_HTTP_HOST = "HTTP bind host. Used only with --transport http."
382
384
  HELP_MCP_HTTP_PORT = "HTTP bind port. Used only with --transport http."
385
+ HELP_MCP_WORKSPACE = (
386
+ "Serve the projects of workspace NAME: `list_projects` shows them, a "
387
+ "`project` argument, when given, must name one (omitted, the server "
388
+ "takes the project rooted at its directory, or the workspace's only "
389
+ "one), and source is read from each repo's own root. Also read from the "
390
+ "MCP_WORKSPACE environment variable."
391
+ )
383
392
 
384
393
  HELP_DEADCODE_PROJECT_NAME = (
385
394
  "Project to scan. If omitted, cgr uses the only indexed project."
@@ -405,6 +414,15 @@ HELP_DEADCODE_CLASSES = (
405
414
  )
406
415
  HELP_DEADCODE_FORMAT = "Report format: table or json."
407
416
  HELP_DEADCODE_OUTPUT = "Write the report to this file instead of stdout."
417
+ HELP_DEADCODE_ENDPOINT_ROOTS = (
418
+ "Treat a decorator-routed handler (FastAPI, Flask) as reachable by its "
419
+ "route decorator alone (default). With --no-endpoint-roots, such a "
420
+ "handler is live only if some indexed call site resolves to its endpoint "
421
+ "(RESOLVES_TO into it, or a direct READS_FROM/WRITES_TO for RPC and "
422
+ "dispatch resources), so an endpoint nobody calls is reported. A handler "
423
+ "registered by a call (Go HandleFunc, Express app.get) stays live "
424
+ "through that call."
425
+ )
408
426
  HELP_DEADCODE_MIN_RESOLUTION = (
409
427
  "Ignore call edges below this confidence when deciding liveness: "
410
428
  "heuristic < overload < exact < trace_confirmed (dynamic counts as confirmed)."
@@ -448,6 +466,9 @@ HELP_DELETE_PROJECT_REPO_PATH = (
448
466
  )
449
467
  HELP_COMMAND = "Command path to document, such as 'start' or 'daemon logs'."
450
468
 
469
+ CMD_VERIFY_INDEX = "Verify a protobuf index against its provenance manifest"
470
+ CMD_DIFF_INDEX = "Structural diff between two protobuf index snapshots"
471
+
451
472
  CLI_COMMANDS: dict[CLICommandName, str] = {
452
473
  CLICommandName.START: CMD_START,
453
474
  CLICommandName.OPTIMIZE: CMD_OPTIMIZE,
@@ -471,14 +492,14 @@ CLI_COMMANDS: dict[CLICommandName, str] = {
471
492
  CLICommandName.STATUS: CMD_STATUS,
472
493
  CLICommandName.DOCTOR: CMD_DOCTOR,
473
494
  CLICommandName.HELP: CMD_HELP,
495
+ CLICommandName.VERIFY_INDEX: CMD_VERIFY_INDEX,
496
+ CLICommandName.DIFF_INDEX: CMD_DIFF_INDEX,
474
497
  }
475
- CMD_VERIFY_INDEX = "Verify a protobuf index against its provenance manifest"
476
498
  HELP_VERIFY_INDEX_DIR = "Directory holding the index artifacts and manifest.json."
477
499
  HELP_TRUSTED_MANIFEST_SHA = (
478
500
  "Externally trusted sha256 of manifest.json (e.g. from an attestation); "
479
501
  "anchors verification beyond local self-consistency."
480
502
  )
481
- CMD_DIFF_INDEX = "Structural diff between two protobuf index snapshots"
482
503
  HELP_DIFF_OLD = "Directory holding the OLD snapshot artifacts."
483
504
  HELP_DIFF_NEW = "Directory holding the NEW snapshot artifacts."
484
505
  HELP_DIFF_JSON_OUT = "Write the JSON delta to FILE instead of stdout."