code-graph-rag 0.2.0__tar.gz → 0.2.16__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 (460) hide show
  1. {code_graph_rag-0.2.0/code_graph_rag.egg-info → code_graph_rag-0.2.16}/PKG-INFO +35 -17
  2. {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/PYPI_README.md +33 -15
  3. {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/README.md +16 -10
  4. {code_graph_rag-0.2.0 → code_graph_rag-0.2.16/code_graph_rag.egg-info}/PKG-INFO +35 -17
  5. {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/code_graph_rag.egg-info/SOURCES.txt +3 -0
  6. {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/code_graph_rag.egg-info/requires.txt +1 -1
  7. {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/cli.py +117 -3
  8. {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/cli_help.py +4 -2
  9. {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/config.py +4 -0
  10. {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/constants/ast_dart.py +7 -0
  11. {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/constants/ast_python.py +9 -0
  12. {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/constants/ast_rust.py +6 -0
  13. {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/constants/cli.py +30 -2
  14. {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/constants/core.py +9 -0
  15. {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/constants/duplicates.py +29 -1
  16. {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/constants/graph.py +46 -4
  17. {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/constants/mcp.py +20 -0
  18. {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/constants/providers.py +10 -0
  19. {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/constants/structural.py +4 -0
  20. {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/constants/trace.py +23 -0
  21. {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/crash_correlation.py +269 -29
  22. {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/cypher_queries.py +290 -64
  23. {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/editing/patcher.py +2 -2
  24. code_graph_rag-0.2.16/codebase_rag/editing/signature_bind.py +608 -0
  25. {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/editing/signature_spec.py +2 -1
  26. {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/gloss_repair.py +18 -0
  27. {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/graph_query.py +97 -17
  28. {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/graph_updater.py +238 -6
  29. {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/language_spec.py +6 -0
  30. {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/logs.py +19 -0
  31. {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/main.py +14 -3
  32. {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/mcp/tools.py +156 -50
  33. {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/parsers/call_processor.py +161 -50
  34. {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/parsers/call_resolver.py +10 -0
  35. {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/parsers/class_ingest/mixin.py +10 -1
  36. {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/parsers/cpp/type_inference.py +7 -3
  37. {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/parsers/dart/__init__.py +2 -0
  38. code_graph_rag-0.2.16/codebase_rag/parsers/dart/package_paths.py +61 -0
  39. {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/parsers/dart/utils.py +22 -6
  40. {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/parsers/definition_processor.py +5 -0
  41. {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/parsers/endpoint_prefixes.py +32 -13
  42. {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/parsers/endpoint_routes.py +74 -5
  43. {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/parsers/endpoints.py +33 -1
  44. {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/parsers/flow_access/processor.py +6 -2
  45. {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/parsers/go/type_inference.py +17 -11
  46. {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/parsers/import_processor.py +98 -29
  47. {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/parsers/io_access/constants.py +2 -0
  48. {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/parsers/io_access/processor.py +7 -4
  49. code_graph_rag-0.2.16/codebase_rag/parsers/io_access/resource_names.py +29 -0
  50. {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/parsers/php/namespaces.py +16 -0
  51. {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/parsers/py/variable_analyzer.py +40 -2
  52. {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/parsers/rs/type_inference.py +36 -28
  53. {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/services/graph_service.py +24 -7
  54. {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/services/llm.py +41 -1
  55. {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/structural_check.py +35 -9
  56. {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/structural_delta.py +710 -41
  57. {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/tools/ast_grep_service.py +19 -1
  58. {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/tools/tool_descriptions.py +18 -8
  59. {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/trace/cli.py +11 -7
  60. {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/trace/pprof.py +17 -7
  61. {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/trace/xdebug.py +23 -1
  62. {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/types_defs.py +3 -1
  63. {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/utils/path_utils.py +19 -0
  64. {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/utils/source_encoding.py +66 -8
  65. {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/utils/source_extraction.py +4 -2
  66. {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/pyproject.toml +6 -3
  67. {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/LICENSE +0 -0
  68. {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/cgr/__init__.py +0 -0
  69. {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/code_graph_rag.egg-info/dependency_links.txt +0 -0
  70. {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/code_graph_rag.egg-info/entry_points.txt +0 -0
  71. {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/code_graph_rag.egg-info/top_level.txt +0 -0
  72. {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/__init__.py +0 -0
  73. {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/_cli_env.py +0 -0
  74. {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/analyzers/__init__.py +0 -0
  75. {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/analyzers/ast_grep_analyzer.py +0 -0
  76. {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/analyzers/ast_grep_rules/patterns/c.yaml +0 -0
  77. {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/analyzers/ast_grep_rules/patterns/cpp.yaml +0 -0
  78. {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/analyzers/ast_grep_rules/patterns/csharp.yaml +0 -0
  79. {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/analyzers/ast_grep_rules/patterns/dart.yaml +0 -0
  80. {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/analyzers/ast_grep_rules/patterns/go.yaml +0 -0
  81. {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/analyzers/ast_grep_rules/patterns/java.yaml +0 -0
  82. {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/analyzers/ast_grep_rules/patterns/javascript.yaml +0 -0
  83. {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/analyzers/ast_grep_rules/patterns/lua.yaml +0 -0
  84. {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/analyzers/ast_grep_rules/patterns/php.yaml +0 -0
  85. {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/analyzers/ast_grep_rules/patterns/python.yaml +0 -0
  86. {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/analyzers/ast_grep_rules/patterns/ruby.yaml +0 -0
  87. {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/analyzers/ast_grep_rules/patterns/rust.yaml +0 -0
  88. {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/analyzers/ast_grep_rules/patterns/scala.yaml +0 -0
  89. {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/analyzers/ast_grep_rules/patterns/tsx.yaml +0 -0
  90. {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/analyzers/ast_grep_rules/patterns/typescript.yaml +0 -0
  91. {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/analyzers/ast_grep_rules/security/c.yaml +0 -0
  92. {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/analyzers/ast_grep_rules/security/cpp.yaml +0 -0
  93. {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/analyzers/ast_grep_rules/security/csharp.yaml +0 -0
  94. {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/analyzers/ast_grep_rules/security/dart.yaml +0 -0
  95. {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/analyzers/ast_grep_rules/security/go.yaml +0 -0
  96. {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/analyzers/ast_grep_rules/security/java.yaml +0 -0
  97. {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/analyzers/ast_grep_rules/security/javascript.yaml +0 -0
  98. {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/analyzers/ast_grep_rules/security/lua.yaml +0 -0
  99. {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/analyzers/ast_grep_rules/security/php.yaml +0 -0
  100. {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/analyzers/ast_grep_rules/security/python.yaml +0 -0
  101. {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/analyzers/ast_grep_rules/security/ruby.yaml +0 -0
  102. {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/analyzers/ast_grep_rules/security/rust.yaml +0 -0
  103. {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/analyzers/ast_grep_rules/security/scala.yaml +0 -0
  104. {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/analyzers/ast_grep_rules/security/tsx.yaml +0 -0
  105. {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/analyzers/ast_grep_rules/security/typescript.yaml +0 -0
  106. {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/analyzers/ast_grep_rules/smells/c.yaml +0 -0
  107. {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/analyzers/ast_grep_rules/smells/cpp.yaml +0 -0
  108. {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/analyzers/ast_grep_rules/smells/csharp.yaml +0 -0
  109. {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/analyzers/ast_grep_rules/smells/dart.yaml +0 -0
  110. {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/analyzers/ast_grep_rules/smells/go.yaml +0 -0
  111. {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/analyzers/ast_grep_rules/smells/java.yaml +0 -0
  112. {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/analyzers/ast_grep_rules/smells/javascript.yaml +0 -0
  113. {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/analyzers/ast_grep_rules/smells/lua.yaml +0 -0
  114. {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/analyzers/ast_grep_rules/smells/php.yaml +0 -0
  115. {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/analyzers/ast_grep_rules/smells/python.yaml +0 -0
  116. {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/analyzers/ast_grep_rules/smells/ruby.yaml +0 -0
  117. {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/analyzers/ast_grep_rules/smells/rust.yaml +0 -0
  118. {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/analyzers/ast_grep_rules/smells/scala.yaml +0 -0
  119. {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/analyzers/ast_grep_rules/smells/tsx.yaml +0 -0
  120. {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/analyzers/ast_grep_rules/smells/typescript.yaml +0 -0
  121. {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/ast_cache.py +0 -0
  122. {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/capture.py +0 -0
  123. {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/check_isolation.py +0 -0
  124. {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/checkout_state.py +0 -0
  125. {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/cli_runtime.py +0 -0
  126. {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/console_marks.py +0 -0
  127. {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/constants/__init__.py +0 -0
  128. {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/constants/ast_cpp.py +0 -0
  129. {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/constants/ast_csharp.py +0 -0
  130. {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/constants/ast_go.py +0 -0
  131. {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/constants/ast_java.py +0 -0
  132. {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/constants/ast_js.py +0 -0
  133. {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/constants/ast_julia.py +0 -0
  134. {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/constants/ast_lua.py +0 -0
  135. {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/constants/ast_nodes.py +0 -0
  136. {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/constants/ast_php.py +0 -0
  137. {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/constants/ast_scala.py +0 -0
  138. {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/constants/ast_sql.py +0 -0
  139. {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/constants/build.py +0 -0
  140. {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/constants/deadcode_roots.py +0 -0
  141. {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/constants/deps.py +0 -0
  142. {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/constants/embedded_graph.py +0 -0
  143. {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/constants/fqn_specs.py +0 -0
  144. {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/constants/health.py +0 -0
  145. {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/constants/interface.py +0 -0
  146. {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/constants/lang_tooling.py +0 -0
  147. {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/constants/languages.py +0 -0
  148. {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/constants/notebook.py +0 -0
  149. {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/constants/security.py +0 -0
  150. {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/constants/sqlite_vectors.py +0 -0
  151. {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/constants/stdlib_types.py +0 -0
  152. {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/context_pruning.py +0 -0
  153. {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/context_slice.py +0 -0
  154. {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/dead_code.py +0 -0
  155. {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/decorators.py +0 -0
  156. {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/docker-compose.yaml +0 -0
  157. {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/duplicates.py +0 -0
  158. {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/editing/__init__.py +0 -0
  159. {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/editing/cli.py +0 -0
  160. {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/editing/contract.py +0 -0
  161. {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/editing/import_paths.py +0 -0
  162. {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/editing/imports.py +0 -0
  163. {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/editing/occurrences.py +0 -0
  164. {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/editing/rename.py +0 -0
  165. {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/editing/signature_contract.py +0 -0
  166. {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/editing/sites.py +0 -0
  167. {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/editing/transaction.py +0 -0
  168. {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/editor_links.py +0 -0
  169. {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/embedded_graph/__init__.py +0 -0
  170. {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/embedded_graph/compiler.py +0 -0
  171. {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/embedded_graph/connection.py +0 -0
  172. {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/embedded_graph/cypher_ast.py +0 -0
  173. {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/embedded_graph/executor.py +0 -0
  174. {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/embedded_graph/expressions.py +0 -0
  175. {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/embedded_graph/extension.py +0 -0
  176. {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/embedded_graph/functions.py +0 -0
  177. {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/embedded_graph/lexer.py +0 -0
  178. {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/embedded_graph/limits.py +0 -0
  179. {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/embedded_graph/native.py +0 -0
  180. {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/embedded_graph/parser.py +0 -0
  181. {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/embedded_graph/procedures.py +0 -0
  182. {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/embedded_graph/sql.py +0 -0
  183. {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/embedded_graph/store.py +0 -0
  184. {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/embedded_graph/types.py +0 -0
  185. {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/embedder.py +0 -0
  186. {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/exceptions.py +0 -0
  187. {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/flow_verdict.py +0 -0
  188. {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/function_registry.py +0 -0
  189. {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/gloss.py +0 -0
  190. {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/gloss_anchor.py +0 -0
  191. {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/graph_audit.py +0 -0
  192. {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/graph_cli.py +0 -0
  193. {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/graph_dialects.py +0 -0
  194. {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/graph_loader.py +0 -0
  195. {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/interface_skip.py +0 -0
  196. {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/mcp/__init__.py +0 -0
  197. {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/mcp/client.py +0 -0
  198. {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/mcp/server.py +0 -0
  199. {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/mgclient_compat.py +0 -0
  200. {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/mgclient_probe.py +0 -0
  201. {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/models.py +0 -0
  202. {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/parser_fingerprint.py +0 -0
  203. {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/parser_loader.py +0 -0
  204. {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/parsers/__init__.py +0 -0
  205. {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/parsers/anchor_hash.py +0 -0
  206. {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/parsers/ast_fingerprint.py +0 -0
  207. {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/parsers/ast_grep_patterns/bash.yaml +0 -0
  208. {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/parsers/ast_grep_patterns/elixir.yaml +0 -0
  209. {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/parsers/ast_grep_patterns/haskell.yaml +0 -0
  210. {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/parsers/ast_grep_patterns/kotlin.yaml +0 -0
  211. {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/parsers/ast_grep_patterns/nix.yaml +0 -0
  212. {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/parsers/ast_grep_patterns/ruby.yaml +0 -0
  213. {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/parsers/ast_grep_patterns/solidity.yaml +0 -0
  214. {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/parsers/ast_grep_patterns/swift.yaml +0 -0
  215. {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/parsers/ast_grep_scope.py +0 -0
  216. {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/parsers/ast_grep_tier.py +0 -0
  217. {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/parsers/build_lock.py +0 -0
  218. {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/parsers/class_ingest/__init__.py +0 -0
  219. {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/parsers/class_ingest/base_targets.py +0 -0
  220. {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/parsers/class_ingest/cpp_modules.py +0 -0
  221. {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/parsers/class_ingest/identity.py +0 -0
  222. {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/parsers/class_ingest/method_override.py +0 -0
  223. {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/parsers/class_ingest/node_type.py +0 -0
  224. {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/parsers/class_ingest/parent_extraction.py +0 -0
  225. {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/parsers/class_ingest/relationships.py +0 -0
  226. {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/parsers/class_ingest/utils.py +0 -0
  227. {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/parsers/contract_linking.py +0 -0
  228. {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/parsers/contracts.py +0 -0
  229. {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/parsers/cpp/__init__.py +0 -0
  230. {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/parsers/cpp/class_macro.py +0 -0
  231. {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/parsers/cpp/function_values.py +0 -0
  232. {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/parsers/cpp/local_types.py +0 -0
  233. {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/parsers/cpp/overloads.py +0 -0
  234. {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/parsers/cpp/preproc_recovery.py +0 -0
  235. {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/parsers/cpp/trailing_annotation.py +0 -0
  236. {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/parsers/cpp/utils.py +0 -0
  237. {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/parsers/cpp_frontend/__init__.py +0 -0
  238. {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/parsers/cpp_frontend/constants.py +0 -0
  239. {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/parsers/cpp_frontend/frontend.py +0 -0
  240. {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/parsers/cpp_frontend/qn.py +0 -0
  241. {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/parsers/csharp/__init__.py +0 -0
  242. {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/parsers/csharp/arity.py +0 -0
  243. {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/parsers/csharp/type_inference.py +0 -0
  244. {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/parsers/csharp/utils.py +0 -0
  245. {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/parsers/csharp_frontend/__init__.py +0 -0
  246. {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/parsers/csharp_frontend/frontend.py +0 -0
  247. {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/parsers/csharp_frontend/roslyn/Frontend.cs +0 -0
  248. {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/parsers/csharp_frontend/roslyn/Frontend.csproj +0 -0
  249. {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/parsers/csharp_frontend/roslyn/Program.cs +0 -0
  250. {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/parsers/dart/type_inference.py +0 -0
  251. {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/parsers/definition_docstring.py +0 -0
  252. {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/parsers/dependency_parser.py +0 -0
  253. {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/parsers/dispatch_registry.py +0 -0
  254. {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/parsers/document_tier.py +0 -0
  255. {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/parsers/enum_variants.py +0 -0
  256. {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/parsers/export_detection.py +0 -0
  257. {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/parsers/factory.py +0 -0
  258. {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/parsers/field_nodes.py +0 -0
  259. {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/parsers/flat_module.py +0 -0
  260. {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/parsers/flow_access/__init__.py +0 -0
  261. {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/parsers/flow_access/constants.py +0 -0
  262. {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/parsers/frontend_mode.py +0 -0
  263. {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/parsers/frontends/__init__.py +0 -0
  264. {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/parsers/frontends/cpp.py +0 -0
  265. {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/parsers/frontends/csharp.py +0 -0
  266. {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/parsers/frontends/go.py +0 -0
  267. {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/parsers/frontends/java.py +0 -0
  268. {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/parsers/frontends/protocol.py +0 -0
  269. {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/parsers/frontends/python.py +0 -0
  270. {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/parsers/frontends/registry.py +0 -0
  271. {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/parsers/function_ingest.py +0 -0
  272. {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/parsers/go/__init__.py +0 -0
  273. {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/parsers/go/builds.py +0 -0
  274. {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/parsers/go/interface_ingest.py +0 -0
  275. {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/parsers/go/interfaces.py +0 -0
  276. {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/parsers/go/link_state.py +0 -0
  277. {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/parsers/go/module_paths.py +0 -0
  278. {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/parsers/go/utils.py +0 -0
  279. {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/parsers/go_frontend/__init__.py +0 -0
  280. {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/parsers/go_frontend/frontend.py +0 -0
  281. {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/parsers/go_frontend/gotypes/go.mod +0 -0
  282. {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/parsers/go_frontend/gotypes/go.sum +0 -0
  283. {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/parsers/go_frontend/gotypes/main.go +0 -0
  284. {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/parsers/handlers/__init__.py +0 -0
  285. {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/parsers/handlers/base.py +0 -0
  286. {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/parsers/handlers/cpp.py +0 -0
  287. {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/parsers/handlers/java.py +0 -0
  288. {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/parsers/handlers/js_ts.py +0 -0
  289. {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/parsers/handlers/julia.py +0 -0
  290. {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/parsers/handlers/lua.py +0 -0
  291. {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/parsers/handlers/php.py +0 -0
  292. {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/parsers/handlers/protocol.py +0 -0
  293. {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/parsers/handlers/python.py +0 -0
  294. {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/parsers/handlers/registry.py +0 -0
  295. {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/parsers/handlers/rust.py +0 -0
  296. {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/parsers/interface_fingerprint.py +0 -0
  297. {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/parsers/io_access/__init__.py +0 -0
  298. {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/parsers/io_access/descriptor.py +0 -0
  299. {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/parsers/io_access/extract.py +0 -0
  300. {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/parsers/io_access/models.py +0 -0
  301. {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/parsers/io_access/registry.py +0 -0
  302. {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/parsers/io_access/url_folding.py +0 -0
  303. {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/parsers/java/__init__.py +0 -0
  304. {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/parsers/java/method_resolver.py +0 -0
  305. {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/parsers/java/type_inference.py +0 -0
  306. {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/parsers/java/type_resolver.py +0 -0
  307. {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/parsers/java/utils.py +0 -0
  308. {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/parsers/java/variable_analyzer.py +0 -0
  309. {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/parsers/java_frontend/__init__.py +0 -0
  310. {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/parsers/java_frontend/frontend.py +0 -0
  311. {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/parsers/java_frontend/javac/cgr/Frontend.java +0 -0
  312. {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/parsers/java_generated.py +0 -0
  313. {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/parsers/java_lombok.py +0 -0
  314. {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/parsers/js_ts/__init__.py +0 -0
  315. {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/parsers/js_ts/commonjs_exports.py +0 -0
  316. {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/parsers/js_ts/ingest.py +0 -0
  317. {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/parsers/js_ts/module_paths.py +0 -0
  318. {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/parsers/js_ts/module_system.py +0 -0
  319. {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/parsers/js_ts/overloads.py +0 -0
  320. {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/parsers/js_ts/reexports.py +0 -0
  321. {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/parsers/js_ts/type_inference.py +0 -0
  322. {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/parsers/js_ts/utils.py +0 -0
  323. {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/parsers/julia/__init__.py +0 -0
  324. {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/parsers/julia/utils.py +0 -0
  325. {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/parsers/lua/__init__.py +0 -0
  326. {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/parsers/lua/type_inference.py +0 -0
  327. {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/parsers/lua/utils.py +0 -0
  328. {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/parsers/module_docstring.py +0 -0
  329. {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/parsers/notebook.py +0 -0
  330. {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/parsers/parameter_nodes.py +0 -0
  331. {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/parsers/php/__init__.py +0 -0
  332. {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/parsers/php/class_names.py +0 -0
  333. {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/parsers/php/utils.py +0 -0
  334. {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/parsers/positional_params.py +0 -0
  335. {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/parsers/py/__init__.py +0 -0
  336. {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/parsers/py/ast_analyzer.py +0 -0
  337. {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/parsers/py/class_aliases.py +0 -0
  338. {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/parsers/py/expression_analyzer.py +0 -0
  339. {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/parsers/py/forward_refs.py +0 -0
  340. {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/parsers/py/overloads.py +0 -0
  341. {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/parsers/py/receiver_rebinding.py +0 -0
  342. {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/parsers/py/type_inference.py +0 -0
  343. {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/parsers/py/utils.py +0 -0
  344. {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/parsers/py/with_analyzer.py +0 -0
  345. {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/parsers/py_frontend/__init__.py +0 -0
  346. {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/parsers/py_frontend/frontend.py +0 -0
  347. {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/parsers/python_source_roots.py +0 -0
  348. {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/parsers/rpc_exposure.py +0 -0
  349. {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/parsers/rs/__init__.py +0 -0
  350. {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/parsers/rs/cargo_semver.py +0 -0
  351. {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/parsers/rs/utils.py +0 -0
  352. {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/parsers/scala/__init__.py +0 -0
  353. {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/parsers/scala/utils.py +0 -0
  354. {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/parsers/semantic_call_join.py +0 -0
  355. {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/parsers/stdlib_extractor.py +0 -0
  356. {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/parsers/string_call.py +0 -0
  357. {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/parsers/structure_processor.py +0 -0
  358. {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/parsers/type_facts.py +0 -0
  359. {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/parsers/type_inference.py +0 -0
  360. {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/parsers/utils.py +0 -0
  361. {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/path_filters.py +0 -0
  362. {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/project_selection.py +0 -0
  363. {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/prompts.py +0 -0
  364. {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/providers/__init__.py +0 -0
  365. {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/providers/base.py +0 -0
  366. {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/providers/litellm.py +0 -0
  367. {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/queries/highlights/c_sharp.scm +0 -0
  368. {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/queries/highlights/dart.scm +0 -0
  369. {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/queries/highlights/java.scm +0 -0
  370. {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/queries/highlights/javascript.scm +0 -0
  371. {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/queries/highlights/julia.scm +0 -0
  372. {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/queries/highlights/php.scm +0 -0
  373. {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/queries/highlights/python.scm +0 -0
  374. {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/queries/highlights/rust.scm +0 -0
  375. {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/queries/highlights/typescript.scm +0 -0
  376. {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/readme_sections.py +0 -0
  377. {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/schema_builder.py +0 -0
  378. {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/schema_parse.py +0 -0
  379. {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/schemas.py +0 -0
  380. {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/services/__init__.py +0 -0
  381. {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/services/anthropic_token_counter.py +0 -0
  382. {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/services/cypher_guard.py +0 -0
  383. {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/services/filtering.py +0 -0
  384. {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/services/gloss_cleanup.py +0 -0
  385. {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/services/graph_diff.py +0 -0
  386. {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/services/neo4j_driver.py +0 -0
  387. {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/services/protobuf_service.py +0 -0
  388. {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/services/provenance.py +0 -0
  389. {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/services/resource_cleanup.py +0 -0
  390. {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/services/usage_cost.py +0 -0
  391. {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/sql_names.py +0 -0
  392. {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/sqlite_vectors.py +0 -0
  393. {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/stack/__init__.py +0 -0
  394. {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/stack/cli.py +0 -0
  395. {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/stack/constants.py +0 -0
  396. {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/stack/health.py +0 -0
  397. {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/stack/manager.py +0 -0
  398. {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/sync_guard.py +0 -0
  399. {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/sync_lock.py +0 -0
  400. {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/taint.py +0 -0
  401. {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/tool_errors.py +0 -0
  402. {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/tools/__init__.py +0 -0
  403. {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/tools/code_retrieval.py +0 -0
  404. {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/tools/codebase_query.py +0 -0
  405. {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/tools/directory_lister.py +0 -0
  406. {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/tools/duplicate_detection.py +0 -0
  407. {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/tools/file_editor.py +0 -0
  408. {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/tools/file_reader.py +0 -0
  409. {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/tools/file_writer.py +0 -0
  410. {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/tools/graph_refresh.py +0 -0
  411. {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/tools/graph_rerank.py +0 -0
  412. {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/tools/health_checker.py +0 -0
  413. {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/tools/language.py +0 -0
  414. {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/tools/language_catalog.py +0 -0
  415. {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/tools/research.py +0 -0
  416. {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/tools/semantic_search.py +0 -0
  417. {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/tools/shell_command.py +0 -0
  418. {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/tools/structural_editor.py +0 -0
  419. {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/tools/structural_search.py +0 -0
  420. {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/tools/web_search.py +0 -0
  421. {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/trace/__init__.py +0 -0
  422. {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/trace/carry.py +0 -0
  423. {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/trace/cpuprofile.py +0 -0
  424. {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/trace/dispatch_site.py +0 -0
  425. {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/trace/ebpf_pprof.py +0 -0
  426. {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/trace/ingest.py +0 -0
  427. {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/trace/instrumented.py +0 -0
  428. {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/trace/pytest_plugin.py +0 -0
  429. {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/trace/records.py +0 -0
  430. {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/trace/resolution.py +0 -0
  431. {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/trace/rust_pprof.py +0 -0
  432. {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/trace/sourcemap.py +0 -0
  433. {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/trace/speedscope.py +0 -0
  434. {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/trace/tracer.py +0 -0
  435. {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/tree_sitter_point.py +0 -0
  436. {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/unixcoder.py +0 -0
  437. {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/utils/__init__.py +0 -0
  438. {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/utils/cpp_signatures.py +0 -0
  439. {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/utils/dependencies.py +0 -0
  440. {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/utils/endpoints.py +0 -0
  441. {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/utils/fqn_resolver.py +0 -0
  442. {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/utils/interruptible_thread.py +0 -0
  443. {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/utils/json_io.py +0 -0
  444. {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/utils/process_owner.py +0 -0
  445. {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/utils/qn_markers.py +0 -0
  446. {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/utils/rich_markdown.py +0 -0
  447. {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/utils/terminal_console.py +0 -0
  448. {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/utils/token_utils.py +0 -0
  449. {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/vector_store.py +0 -0
  450. {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/watch.py +0 -0
  451. {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/workspaces/__init__.py +0 -0
  452. {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/workspaces/cli.py +0 -0
  453. {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/workspaces/constants.py +0 -0
  454. {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/workspaces/models.py +0 -0
  455. {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codebase_rag/workspaces/storage.py +0 -0
  456. {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codec/__init__.py +0 -0
  457. {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codec/schema.proto +0 -0
  458. {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codec/schema_pb2.py +0 -0
  459. {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/codec/schema_pb2.pyi +0 -0
  460. {code_graph_rag-0.2.0 → code_graph_rag-0.2.16}/setup.cfg +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: code-graph-rag
3
- Version: 0.2.0
3
+ Version: 0.2.16
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
@@ -19,7 +19,7 @@ Requires-Python: >=3.12
19
19
  Description-Content-Type: text/markdown
20
20
  License-File: LICENSE
21
21
  Requires-Dist: loguru>=0.7.3
22
- Requires-Dist: mcp<2,>=1.28.1
22
+ Requires-Dist: mcp<2,>=1.30.0
23
23
  Requires-Dist: pydantic-ai-slim[anthropic,google,openai]>=2.0.0
24
24
  Requires-Dist: pydantic-settings>=2.12.0
25
25
  Requires-Dist: python-dotenv>=1.2.1
@@ -93,7 +93,7 @@ Dynamic: license-file
93
93
 
94
94
  # Code-Graph-RAG
95
95
 
96
- 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.
96
+ 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 an embedded graph database that needs no server, 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.
97
97
 
98
98
  ## What It Does
99
99
 
@@ -152,8 +152,9 @@ transformers are then not required locally.
152
152
  `pip install code-graph-rag` gives you the newest PyPI release, which is deliberately
153
153
  not the newest commit. Git tags exist for every version (one per merge), while PyPI
154
154
  uploads and GitHub Release binaries land on an every-50 cadence, so the tag on `main`
155
- usually runs ahead of the published version. A security fix is the exception: it
156
- ships immediately rather than waiting for the cadence.
155
+ usually runs ahead of the published version. A security fix, a breaking change or a
156
+ merge a maintainer labels `release now` is the exception: each ships immediately
157
+ rather than waiting for the cadence.
157
158
 
158
159
  To run code newer than the latest release, install from git with uv:
159
160
 
@@ -175,14 +176,22 @@ for git installs and the other methods.
175
176
  ### Prerequisites
176
177
 
177
178
  - Python 3.12+
178
- - Docker (for Memgraph)
179
- - `cmake` (for building pymgclient)
180
179
  - `ripgrep` (`rg`) (for shell command text searching)
180
+ - Only for the optional Memgraph backend: Docker, and `cmake` where no
181
+ `pymgclient` wheel fits your platform
182
+
183
+ The knowledge graph is an embedded SQLite file (`~/.cgr/graph.sqlite`), so there
184
+ is no database server to run. Memgraph and Neo4j remain available as opt-in
185
+ backends; see [Graph Backends](https://docs.code-graph-rag.com/architecture/embedded-graph/).
181
186
 
182
187
  The wheel is pure Python (`py3-none-any`), so it installs on any platform with
183
- Python 3.12 or newer. Some distributions ship an older interpreter (Debian
184
- Bookworm, and so Raspberry Pi OS Bookworm, ships 3.11), which also explains the
185
- failed piwheels Bookworm build. On those systems, see the [installation
188
+ Python 3.12 or newer. On Linux (x86_64, aarch64), macOS and Windows x64 it also
189
+ pulls in `cgr-graph-rs`, a native extension that speeds up the embedded graph;
190
+ elsewhere the same engine runs in pure Python.
191
+
192
+ Some distributions ship an older interpreter (Debian Bookworm, and so Raspberry
193
+ Pi OS Bookworm, ships 3.11), which also explains the failed piwheels Bookworm
194
+ build. On those systems, see the [installation
186
195
  guide](https://github.com/vitali87/code-graph-rag/blob/main/docs/getting-started/installation.md#older-system-interpreters)
187
196
  for the available interpreter-pinning alternatives.
188
197
 
@@ -190,14 +199,17 @@ for the available interpreter-pinning alternatives.
190
199
 
191
200
  The package installs a `cgr` command.
192
201
 
193
- **Start Memgraph, parse a repo, and query it:**
202
+ **Parse a repo, then query it:**
194
203
 
195
204
  ```bash
196
- cgr daemon up # start Memgraph + Qdrant
197
- cgr start --repo-path ./my-project \
198
- --update-graph --clean # parse & launch interactive chat
205
+ cgr start --repo-path ./my-project --update-graph # parse into the graph
206
+ cgr start --repo-path ./my-project # launch the interactive chat
199
207
  ```
200
208
 
209
+ The graph is written to `~/.cgr/graph.sqlite`. To use Memgraph instead, install
210
+ `code-graph-rag[memgraph]`, set `GRAPH_BACKEND=memgraph`, and start the packaged
211
+ Memgraph + Qdrant stack with `cgr daemon up`.
212
+
201
213
  **Index to protobuf for offline use:**
202
214
 
203
215
  ```bash
@@ -304,7 +316,11 @@ for fn in functions[:5]:
304
316
  print(f"{fn.properties['name']}: {len(rels)} relationships")
305
317
  ```
306
318
 
307
- ### Query Memgraph with Cypher
319
+ ### Query the graph with Cypher
320
+
321
+ `MemgraphIngestor` keeps its original name but works with whichever backend
322
+ `GRAPH_BACKEND` selects. On the default embedded graph, `host` and `port` are
323
+ not used.
308
324
 
309
325
  ```python
310
326
  from cgr import MemgraphIngestor
@@ -357,8 +373,10 @@ Configure via `.env` or environment variables:
357
373
 
358
374
  | Variable | Default | Description |
359
375
  |----------|---------|-------------|
360
- | `MEMGRAPH_HOST` | `localhost` | Memgraph hostname |
361
- | `MEMGRAPH_PORT` | `7687` | Memgraph port |
376
+ | `GRAPH_BACKEND` | `sqlite` | Graph engine: `sqlite` (embedded), `memgraph`, or `neo4j` |
377
+ | `SQLITE_GRAPH_PATH` | `~/.cgr/graph.sqlite` | Embedded graph file |
378
+ | `MEMGRAPH_HOST` | `localhost` | Memgraph hostname (with `GRAPH_BACKEND=memgraph`) |
379
+ | `MEMGRAPH_PORT` | `7687` | Memgraph port (with `GRAPH_BACKEND=memgraph`) |
362
380
  | `ORCHESTRATOR_PROVIDER` | | Provider: `google`, `openai`, `anthropic`, `azure`, `ollama`, `minimax`, `litellm_proxy` |
363
381
  | `ORCHESTRATOR_MODEL` | | Model ID (e.g. `gpt-5.6-terra`, `gemini-3.6-flash`, `claude-sonnet-5`, `qwen2.5-coder`) |
364
382
  | `ORCHESTRATOR_API_KEY` | | API key for the provider (not needed for `ollama`) |
@@ -1,6 +1,6 @@
1
1
  # Code-Graph-RAG
2
2
 
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.
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 an embedded graph database that needs no server, 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
 
@@ -59,8 +59,9 @@ transformers are then not required locally.
59
59
  `pip install code-graph-rag` gives you the newest PyPI release, which is deliberately
60
60
  not the newest commit. Git tags exist for every version (one per merge), while PyPI
61
61
  uploads and GitHub Release binaries land on an every-50 cadence, so the tag on `main`
62
- usually runs ahead of the published version. A security fix is the exception: it
63
- ships immediately rather than waiting for the cadence.
62
+ usually runs ahead of the published version. A security fix, a breaking change or a
63
+ merge a maintainer labels `release now` is the exception: each ships immediately
64
+ rather than waiting for the cadence.
64
65
 
65
66
  To run code newer than the latest release, install from git with uv:
66
67
 
@@ -82,14 +83,22 @@ for git installs and the other methods.
82
83
  ### Prerequisites
83
84
 
84
85
  - Python 3.12+
85
- - Docker (for Memgraph)
86
- - `cmake` (for building pymgclient)
87
86
  - `ripgrep` (`rg`) (for shell command text searching)
87
+ - Only for the optional Memgraph backend: Docker, and `cmake` where no
88
+ `pymgclient` wheel fits your platform
89
+
90
+ The knowledge graph is an embedded SQLite file (`~/.cgr/graph.sqlite`), so there
91
+ is no database server to run. Memgraph and Neo4j remain available as opt-in
92
+ backends; see [Graph Backends](https://docs.code-graph-rag.com/architecture/embedded-graph/).
88
93
 
89
94
  The wheel is pure Python (`py3-none-any`), so it installs on any platform with
90
- Python 3.12 or newer. Some distributions ship an older interpreter (Debian
91
- Bookworm, and so Raspberry Pi OS Bookworm, ships 3.11), which also explains the
92
- failed piwheels Bookworm build. On those systems, see the [installation
95
+ Python 3.12 or newer. On Linux (x86_64, aarch64), macOS and Windows x64 it also
96
+ pulls in `cgr-graph-rs`, a native extension that speeds up the embedded graph;
97
+ elsewhere the same engine runs in pure Python.
98
+
99
+ Some distributions ship an older interpreter (Debian Bookworm, and so Raspberry
100
+ Pi OS Bookworm, ships 3.11), which also explains the failed piwheels Bookworm
101
+ build. On those systems, see the [installation
93
102
  guide](https://github.com/vitali87/code-graph-rag/blob/main/docs/getting-started/installation.md#older-system-interpreters)
94
103
  for the available interpreter-pinning alternatives.
95
104
 
@@ -97,14 +106,17 @@ for the available interpreter-pinning alternatives.
97
106
 
98
107
  The package installs a `cgr` command.
99
108
 
100
- **Start Memgraph, parse a repo, and query it:**
109
+ **Parse a repo, then query it:**
101
110
 
102
111
  ```bash
103
- cgr daemon up # start Memgraph + Qdrant
104
- cgr start --repo-path ./my-project \
105
- --update-graph --clean # parse & launch interactive chat
112
+ cgr start --repo-path ./my-project --update-graph # parse into the graph
113
+ cgr start --repo-path ./my-project # launch the interactive chat
106
114
  ```
107
115
 
116
+ The graph is written to `~/.cgr/graph.sqlite`. To use Memgraph instead, install
117
+ `code-graph-rag[memgraph]`, set `GRAPH_BACKEND=memgraph`, and start the packaged
118
+ Memgraph + Qdrant stack with `cgr daemon up`.
119
+
108
120
  **Index to protobuf for offline use:**
109
121
 
110
122
  ```bash
@@ -211,7 +223,11 @@ for fn in functions[:5]:
211
223
  print(f"{fn.properties['name']}: {len(rels)} relationships")
212
224
  ```
213
225
 
214
- ### Query Memgraph with Cypher
226
+ ### Query the graph with Cypher
227
+
228
+ `MemgraphIngestor` keeps its original name but works with whichever backend
229
+ `GRAPH_BACKEND` selects. On the default embedded graph, `host` and `port` are
230
+ not used.
215
231
 
216
232
  ```python
217
233
  from cgr import MemgraphIngestor
@@ -264,8 +280,10 @@ Configure via `.env` or environment variables:
264
280
 
265
281
  | Variable | Default | Description |
266
282
  |----------|---------|-------------|
267
- | `MEMGRAPH_HOST` | `localhost` | Memgraph hostname |
268
- | `MEMGRAPH_PORT` | `7687` | Memgraph port |
283
+ | `GRAPH_BACKEND` | `sqlite` | Graph engine: `sqlite` (embedded), `memgraph`, or `neo4j` |
284
+ | `SQLITE_GRAPH_PATH` | `~/.cgr/graph.sqlite` | Embedded graph file |
285
+ | `MEMGRAPH_HOST` | `localhost` | Memgraph hostname (with `GRAPH_BACKEND=memgraph`) |
286
+ | `MEMGRAPH_PORT` | `7687` | Memgraph port (with `GRAPH_BACKEND=memgraph`) |
269
287
  | `ORCHESTRATOR_PROVIDER` | | Provider: `google`, `openai`, `anthropic`, `azure`, `ollama`, `minimax`, `litellm_proxy` |
270
288
  | `ORCHESTRATOR_MODEL` | | Model ID (e.g. `gpt-5.6-terra`, `gemini-3.6-flash`, `claude-sonnet-5`, `qwen2.5-coder`) |
271
289
  | `ORCHESTRATOR_API_KEY` | | API key for the provider (not needed for `ollama`) |
@@ -42,13 +42,13 @@
42
42
 
43
43
  # Code-Graph-RAG
44
44
 
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.
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 an embedded graph database that needs no server, 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
  <b>1. Index:</b> <code>cgr start --update-graph</code> parses a repository into a knowledge graph (sped up)
49
49
  </p>
50
50
  <p align="center">
51
- <img src="./assets/demo-indexing.gif" alt="cgr parsing the code-graph-rag repository into a Memgraph knowledge graph, then printing node and relationship counts">
51
+ <img src="./assets/demo-indexing.gif" alt="cgr parsing the code-graph-rag repository into a knowledge graph, then printing node and relationship counts">
52
52
  </p>
53
53
 
54
54
  <p align="center">
@@ -61,8 +61,8 @@ 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
- - **Contextual Queries**: Support for more detailed context queries has been added, including reasons and evaluation ingestor reads, enhancing the understanding of code interactions.
65
- - **Graph Improvements**: The graph analysis capabilities have been expanded to follow cross-service links and implementors/overrides, providing a more comprehensive view of code dependencies.
64
+ - **Python**: Added support for inferring instance attributes from annotations.
65
+ - **General**: Various fixes for import resolution, naming conflicts, and project syncing.
66
66
  <!-- /SECTION:latest_news -->
67
67
 
68
68
  See [NEWS.md](NEWS.md) for the full history.
@@ -83,15 +83,17 @@ Point Code-Graph-RAG at a repository and it reads every source file, extracts fu
83
83
 
84
84
  The system has two components:
85
85
 
86
- 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.
86
+ 1. **Multi-language parser.** A Tree-sitter based parser reads the codebase and ingests functions, classes, methods, modules, and their relationships into the graph 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.
87
87
  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.
88
88
 
89
89
  ```
90
- Source Code -> Tree-sitter Parser -> AST Analysis -> Memgraph Knowledge Graph
90
+ Source Code -> Tree-sitter Parser -> AST Analysis -> Knowledge Graph
91
91
  |
92
92
  User Query -> AI Model (Cypher Gen) -> Cypher Query -> Graph Results -> Response
93
93
  ```
94
94
 
95
+ The graph is stored in an embedded SQLite file by default. Memgraph and Neo4j are opt-in backends that run the same Cypher; [Graph Backends](docs/architecture/embedded-graph.md) compares them.
96
+
95
97
  See the [Architecture Overview](docs/architecture/overview.md) and [Graph Schema](docs/architecture/graph-schema.md) for the full picture.
96
98
 
97
99
  ## Supported Languages
@@ -117,13 +119,14 @@ Three version lines exist and they intentionally differ:
117
119
  | where | what it tracks |
118
120
  |---|---|
119
121
  | git tags | every version, one per merge |
120
- | GitHub Releases (binaries, signatures) | every 50th version, plus any security fix |
121
- | PyPI | every 50th version, plus any security fix |
122
+ | GitHub Releases (binaries, signatures) | every 50th version, plus any security fix, breaking change or merge labelled `release now` |
123
+ | PyPI | every 50th version, plus any security fix, breaking change or merge labelled `release now` |
122
124
 
123
125
  So the newest tag on `main` usually runs ahead of the newest release, often by
124
126
  tens of patch versions; they coincide only just after a release. Nothing is
125
- stuck, the cadences differ by design. A security fix does NOT wait for the
126
- cadence: it ships a release and a PyPI upload immediately.
127
+ stuck, the cadences differ by design. A security fix, a breaking change or a
128
+ merge a maintainer labels `release now` does NOT wait for the cadence: each ships
129
+ a release and a PyPI upload immediately.
127
130
 
128
131
  `uv tool install` and `pipx install` give you the newest PyPI version, which is the
129
132
  newest RELEASE, not the newest tag. Interim tags exist so every merge is
@@ -190,6 +193,7 @@ Code-Graph-RAG runs as an [MCP](https://modelcontextprotocol.io) server so Claud
190
193
  **Architecture**
191
194
  - [Overview](docs/architecture/overview.md)
192
195
  - [Graph Schema](docs/architecture/graph-schema.md)
196
+ - [Graph Backends](docs/architecture/embedded-graph.md)
193
197
  - [Language Support](docs/architecture/language-support.md)
194
198
  - [Data-Flow Edges](docs/architecture/data-flow-edges.md)
195
199
 
@@ -224,6 +228,8 @@ Please see [CONTRIBUTING.md](CONTRIBUTING.md) for contribution guidelines. Good
224
228
 
225
229
  For issues or questions, check the [Troubleshooting](docs/advanced/troubleshooting.md) guide first, then open an issue.
226
230
 
231
+ If cgr is useful to you, please consider pledging support on [GitHub Sponsors](https://github.com/sponsors/vitali87). cgr links the page under `cgr --version` and, in a terminal, after most commands finish; set `CGR_SPONSOR_PLEDGE=false` to hide that line.
232
+
227
233
  ## License
228
234
 
229
235
  MIT. See [LICENSE](LICENSE).
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: code-graph-rag
3
- Version: 0.2.0
3
+ Version: 0.2.16
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
@@ -19,7 +19,7 @@ Requires-Python: >=3.12
19
19
  Description-Content-Type: text/markdown
20
20
  License-File: LICENSE
21
21
  Requires-Dist: loguru>=0.7.3
22
- Requires-Dist: mcp<2,>=1.28.1
22
+ Requires-Dist: mcp<2,>=1.30.0
23
23
  Requires-Dist: pydantic-ai-slim[anthropic,google,openai]>=2.0.0
24
24
  Requires-Dist: pydantic-settings>=2.12.0
25
25
  Requires-Dist: python-dotenv>=1.2.1
@@ -93,7 +93,7 @@ Dynamic: license-file
93
93
 
94
94
  # Code-Graph-RAG
95
95
 
96
- 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.
96
+ 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 an embedded graph database that needs no server, 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.
97
97
 
98
98
  ## What It Does
99
99
 
@@ -152,8 +152,9 @@ transformers are then not required locally.
152
152
  `pip install code-graph-rag` gives you the newest PyPI release, which is deliberately
153
153
  not the newest commit. Git tags exist for every version (one per merge), while PyPI
154
154
  uploads and GitHub Release binaries land on an every-50 cadence, so the tag on `main`
155
- usually runs ahead of the published version. A security fix is the exception: it
156
- ships immediately rather than waiting for the cadence.
155
+ usually runs ahead of the published version. A security fix, a breaking change or a
156
+ merge a maintainer labels `release now` is the exception: each ships immediately
157
+ rather than waiting for the cadence.
157
158
 
158
159
  To run code newer than the latest release, install from git with uv:
159
160
 
@@ -175,14 +176,22 @@ for git installs and the other methods.
175
176
  ### Prerequisites
176
177
 
177
178
  - Python 3.12+
178
- - Docker (for Memgraph)
179
- - `cmake` (for building pymgclient)
180
179
  - `ripgrep` (`rg`) (for shell command text searching)
180
+ - Only for the optional Memgraph backend: Docker, and `cmake` where no
181
+ `pymgclient` wheel fits your platform
182
+
183
+ The knowledge graph is an embedded SQLite file (`~/.cgr/graph.sqlite`), so there
184
+ is no database server to run. Memgraph and Neo4j remain available as opt-in
185
+ backends; see [Graph Backends](https://docs.code-graph-rag.com/architecture/embedded-graph/).
181
186
 
182
187
  The wheel is pure Python (`py3-none-any`), so it installs on any platform with
183
- Python 3.12 or newer. Some distributions ship an older interpreter (Debian
184
- Bookworm, and so Raspberry Pi OS Bookworm, ships 3.11), which also explains the
185
- failed piwheels Bookworm build. On those systems, see the [installation
188
+ Python 3.12 or newer. On Linux (x86_64, aarch64), macOS and Windows x64 it also
189
+ pulls in `cgr-graph-rs`, a native extension that speeds up the embedded graph;
190
+ elsewhere the same engine runs in pure Python.
191
+
192
+ Some distributions ship an older interpreter (Debian Bookworm, and so Raspberry
193
+ Pi OS Bookworm, ships 3.11), which also explains the failed piwheels Bookworm
194
+ build. On those systems, see the [installation
186
195
  guide](https://github.com/vitali87/code-graph-rag/blob/main/docs/getting-started/installation.md#older-system-interpreters)
187
196
  for the available interpreter-pinning alternatives.
188
197
 
@@ -190,14 +199,17 @@ for the available interpreter-pinning alternatives.
190
199
 
191
200
  The package installs a `cgr` command.
192
201
 
193
- **Start Memgraph, parse a repo, and query it:**
202
+ **Parse a repo, then query it:**
194
203
 
195
204
  ```bash
196
- cgr daemon up # start Memgraph + Qdrant
197
- cgr start --repo-path ./my-project \
198
- --update-graph --clean # parse & launch interactive chat
205
+ cgr start --repo-path ./my-project --update-graph # parse into the graph
206
+ cgr start --repo-path ./my-project # launch the interactive chat
199
207
  ```
200
208
 
209
+ The graph is written to `~/.cgr/graph.sqlite`. To use Memgraph instead, install
210
+ `code-graph-rag[memgraph]`, set `GRAPH_BACKEND=memgraph`, and start the packaged
211
+ Memgraph + Qdrant stack with `cgr daemon up`.
212
+
201
213
  **Index to protobuf for offline use:**
202
214
 
203
215
  ```bash
@@ -304,7 +316,11 @@ for fn in functions[:5]:
304
316
  print(f"{fn.properties['name']}: {len(rels)} relationships")
305
317
  ```
306
318
 
307
- ### Query Memgraph with Cypher
319
+ ### Query the graph with Cypher
320
+
321
+ `MemgraphIngestor` keeps its original name but works with whichever backend
322
+ `GRAPH_BACKEND` selects. On the default embedded graph, `host` and `port` are
323
+ not used.
308
324
 
309
325
  ```python
310
326
  from cgr import MemgraphIngestor
@@ -357,8 +373,10 @@ Configure via `.env` or environment variables:
357
373
 
358
374
  | Variable | Default | Description |
359
375
  |----------|---------|-------------|
360
- | `MEMGRAPH_HOST` | `localhost` | Memgraph hostname |
361
- | `MEMGRAPH_PORT` | `7687` | Memgraph port |
376
+ | `GRAPH_BACKEND` | `sqlite` | Graph engine: `sqlite` (embedded), `memgraph`, or `neo4j` |
377
+ | `SQLITE_GRAPH_PATH` | `~/.cgr/graph.sqlite` | Embedded graph file |
378
+ | `MEMGRAPH_HOST` | `localhost` | Memgraph hostname (with `GRAPH_BACKEND=memgraph`) |
379
+ | `MEMGRAPH_PORT` | `7687` | Memgraph port (with `GRAPH_BACKEND=memgraph`) |
362
380
  | `ORCHESTRATOR_PROVIDER` | | Provider: `google`, `openai`, `anthropic`, `azure`, `ollama`, `minimax`, `litellm_proxy` |
363
381
  | `ORCHESTRATOR_MODEL` | | Model ID (e.g. `gpt-5.6-terra`, `gemini-3.6-flash`, `claude-sonnet-5`, `qwen2.5-coder`) |
364
382
  | `ORCHESTRATOR_API_KEY` | | API key for the provider (not needed for `ollama`) |
@@ -162,6 +162,7 @@ codebase_rag/editing/imports.py
162
162
  codebase_rag/editing/occurrences.py
163
163
  codebase_rag/editing/patcher.py
164
164
  codebase_rag/editing/rename.py
165
+ codebase_rag/editing/signature_bind.py
165
166
  codebase_rag/editing/signature_contract.py
166
167
  codebase_rag/editing/signature_spec.py
167
168
  codebase_rag/editing/sites.py
@@ -269,6 +270,7 @@ codebase_rag/parsers/csharp_frontend/roslyn/Frontend.cs
269
270
  codebase_rag/parsers/csharp_frontend/roslyn/Frontend.csproj
270
271
  codebase_rag/parsers/csharp_frontend/roslyn/Program.cs
271
272
  codebase_rag/parsers/dart/__init__.py
273
+ codebase_rag/parsers/dart/package_paths.py
272
274
  codebase_rag/parsers/dart/type_inference.py
273
275
  codebase_rag/parsers/dart/utils.py
274
276
  codebase_rag/parsers/flow_access/__init__.py
@@ -314,6 +316,7 @@ codebase_rag/parsers/io_access/extract.py
314
316
  codebase_rag/parsers/io_access/models.py
315
317
  codebase_rag/parsers/io_access/processor.py
316
318
  codebase_rag/parsers/io_access/registry.py
319
+ codebase_rag/parsers/io_access/resource_names.py
317
320
  codebase_rag/parsers/io_access/url_folding.py
318
321
  codebase_rag/parsers/java/__init__.py
319
322
  codebase_rag/parsers/java/method_resolver.py
@@ -1,5 +1,5 @@
1
1
  loguru>=0.7.3
2
- mcp<2,>=1.28.1
2
+ mcp<2,>=1.30.0
3
3
  pydantic-ai-slim[anthropic,google,openai]>=2.0.0
4
4
  pydantic-settings>=2.12.0
5
5
  python-dotenv>=1.2.1
@@ -44,7 +44,7 @@ from .capture import (
44
44
  unknown_tokens,
45
45
  )
46
46
  from .checkout_state import prepare_state_dir
47
- from .cli_runtime import app_context, connect_memgraph, style
47
+ from .cli_runtime import app_context, connect_memgraph, dim, style
48
48
  from .config import load_ignore_patterns, settings, settings_errors
49
49
  from .console_marks import status_mark
50
50
  from .editing.cli import cli as edits_cli
@@ -60,6 +60,7 @@ from .graph_cli import cli as graph_cli
60
60
  from .graph_dialects import DIALECT_MEMGRAPH
61
61
  from .parser_loader import load_parsers
62
62
  from .project_selection import ProjectChoice, choose_project, scope_refusal
63
+ from .services.gloss_cleanup import prune_orphaned_glosses
63
64
  from .services.graph_diff import DiffError, diff_indexes, diff_is_empty
64
65
  from .services.graph_service import GraphUnavailableError, MemgraphIngestor
65
66
  from .services.protobuf_service import ProtobufFileIngestor
@@ -102,6 +103,7 @@ from .utils.path_utils import (
102
103
  normalize_project_name,
103
104
  project_name_error,
104
105
  project_roots_from_rows,
106
+ projects_sharing_root,
105
107
  resolve_repo_path,
106
108
  unwritable_output_reason,
107
109
  )
@@ -199,10 +201,40 @@ class _CgrGroup(TyperGroup):
199
201
  # this at connect time with the fix in its message; printing it here
200
202
  # covers them all, the delegated groups and the chat included (#2443).
201
203
  try:
202
- return super().invoke(ctx)
204
+ result = super().invoke(ctx)
203
205
  except GraphUnavailableError as e:
204
206
  app_context.console.print(style(str(e), cs.Color.RED))
205
207
  raise typer.Exit(1) from e
208
+ # Only a command that finished gets here: a failure exits by raising.
209
+ pledge = sponsor_pledge(ctx.invoked_subcommand, sys.stderr.isatty())
210
+ if pledge:
211
+ # Soft-wrapped so the terminal, not Rich, breaks the line, and
212
+ # the URL stays one clickable link.
213
+ terminal_aware_console(stderr=True).print(
214
+ dim(pledge), highlight=False, soft_wrap=True
215
+ )
216
+ return result
217
+
218
+
219
+ # Help pages, and the MCP server, which speaks its protocol until the client
220
+ # hangs up, are not runs that finished.
221
+ _NO_SPONSOR_PLEDGE = frozenset({ch.CLICommandName.HELP, ch.CLICommandName.MCP_SERVER})
222
+
223
+
224
+ def sponsor_pledge(command: str | None, terminal: bool) -> str | None:
225
+ """The GitHub Sponsors line a finished command ends on, or None where it
226
+ would be in the way: off a terminal (a script or a log reading stderr),
227
+ under `--quiet` or CGR_SPONSOR_PLEDGE=false, and after the commands in
228
+ `_NO_SPONSOR_PLEDGE`. On stderr, so it never mixes into a command's
229
+ output on stdout."""
230
+ if (
231
+ not terminal
232
+ or settings.QUIET
233
+ or not settings.SPONSOR_PLEDGE
234
+ or command in _NO_SPONSOR_PLEDGE
235
+ ):
236
+ return None
237
+ return cs.CLI_MSG_SPONSOR_PLEDGE.format(url=cs.SPONSOR_URL)
206
238
 
207
239
 
208
240
  app = typer.Typer(
@@ -225,6 +257,9 @@ def _version_callback(value: bool) -> None:
225
257
  )
226
258
  for line in credits_lines():
227
259
  app_context.console.print(line, highlight=False)
260
+ app_context.console.print(
261
+ cs.CLI_MSG_SPONSOR.format(url=cs.SPONSOR_URL), highlight=False
262
+ )
228
263
  raise typer.Exit()
229
264
 
230
265
 
@@ -1035,6 +1070,28 @@ def _clear_deleted_project_markers(
1035
1070
  logger.warning(ls.CLI_DELETE_SYNC_MARKER_KEPT.format(project=project_name))
1036
1071
 
1037
1072
 
1073
+ def _sweep_glosses_after_failed_delete(
1074
+ ingestor: MemgraphIngestor, project_name: str
1075
+ ) -> None:
1076
+ """Sweep the notes of a delete that raised after the project was removed.
1077
+
1078
+ The delete commits statement by statement, so a later cleanup can raise
1079
+ once the project is already gone, and a retry then stops at "project not
1080
+ found" before any sweep. A project still listed keeps its unattached
1081
+ notes: they are LOST or AMBIGUOUS by design and readable on their old
1082
+ names. Never raises, so the delete's own error is what is reported.
1083
+ """
1084
+ try:
1085
+ still_listed = project_name in ingestor.list_projects()
1086
+ except Exception as exc:
1087
+ logger.warning(
1088
+ ls.CLI_DELETE_GLOSS_SWEEP_SKIPPED.format(project=project_name, error=exc)
1089
+ )
1090
+ return
1091
+ if not still_listed:
1092
+ prune_orphaned_glosses(ingestor, project_name)
1093
+
1094
+
1038
1095
  def _run_updater_deferring_interrupt(
1039
1096
  updater: "GraphUpdater",
1040
1097
  ) -> KeyboardInterrupt | None:
@@ -1173,10 +1230,33 @@ def _run_graph_sync(
1173
1230
  cs.StyleModifier.NONE,
1174
1231
  )
1175
1232
  )
1233
+ _report_call_pass_failures(repo, list(updater.call_pass_failures))
1176
1234
  if interrupted is not None:
1177
1235
  raise interrupted
1178
1236
 
1179
1237
 
1238
+ def _report_call_pass_failures(repo: Path, failed: list[Path]) -> None:
1239
+ # A file whose call pass failed lost edges while the sync still reads
1240
+ # "done": the error lines scroll away, so the summary counts them (#3173).
1241
+ if not failed:
1242
+ return
1243
+ names = sorted(
1244
+ path.relative_to(repo).as_posix() if path.is_relative_to(repo) else str(path)
1245
+ for path in failed
1246
+ )
1247
+ shown = names[: cs.CLI_CALL_PASS_FAILURES_SHOWN]
1248
+ if len(names) > len(shown):
1249
+ shown.append(cs.CLI_MSG_AND_MORE.format(count=len(names) - len(shown)))
1250
+ app_context.console.print(
1251
+ style(
1252
+ cs.CLI_MSG_CALL_PASS_FAILURES.format(
1253
+ count=len(names), files=", ".join(shown)
1254
+ ),
1255
+ cs.Color.YELLOW,
1256
+ )
1257
+ )
1258
+
1259
+
1180
1260
  def _delete_hash_cache(repo_path: Path) -> None:
1181
1261
  # Resolving the state directory also moves in what an older cgr left in
1182
1262
  # the tree, so a clean right after upgrading clears that copy too.
@@ -3463,6 +3543,21 @@ def delete_project(
3463
3543
  app_context.console.print(style(choice.refusal, cs.Color.RED))
3464
3544
  raise typer.Exit(1)
3465
3545
 
3546
+ # A directory indexed under two names used to lose both on delete
3547
+ # (#2665). The delete is ownership-scoped now; say so before it runs.
3548
+ roots = ingestor.list_project_roots()
3549
+ if sharing := projects_sharing_root(project_name, roots):
3550
+ app_context.console.print(
3551
+ style(
3552
+ cs.CLI_WARN_DELETE_PROJECT_SHARED_ROOT.format(
3553
+ projects=", ".join(sharing),
3554
+ project_name=project_name,
3555
+ root_path=roots[project_name],
3556
+ ),
3557
+ cs.Color.YELLOW,
3558
+ )
3559
+ )
3560
+
3466
3561
  _info(
3467
3562
  style(
3468
3563
  cs.CLI_MSG_DELETING_PROJECT.format(project_name=project_name),
@@ -3470,7 +3565,26 @@ def delete_project(
3470
3565
  )
3471
3566
  )
3472
3567
  _cleanup_project_embeddings(ingestor, project_name, projects)
3473
- ingestor.delete_project(project_name)
3568
+ try:
3569
+ ingestor.delete_project(project_name)
3570
+ except Exception:
3571
+ _sweep_glosses_after_failed_delete(ingestor, project_name)
3572
+ raise
3573
+ # A Gloss is out of the delete's reach by design, which is what
3574
+ # lets it survive an index's delete-then-rebuild, so the
3575
+ # deliberate delete sweeps the project's notes, as MCP
3576
+ # `delete_project` does. Without it the next index re-attached
3577
+ # them by name (issue #3231). The sweep never raises: the delete
3578
+ # is done, and a retry would stop at "project not found".
3579
+ if not prune_orphaned_glosses(ingestor, project_name):
3580
+ app_context.console.print(
3581
+ style(
3582
+ cs.CLI_WARN_GLOSSES_NOT_PRUNED.format(
3583
+ project_name=project_name
3584
+ ),
3585
+ cs.Color.YELLOW,
3586
+ )
3587
+ )
3474
3588
  _clear_deleted_project_markers(ingestor, project_name)
3475
3589
  except typer.Exit:
3476
3590
  raise
@@ -169,8 +169,10 @@ HELP_CHECK_BASE = (
169
169
  )
170
170
  HELP_CHECK_FAIL_ON_FOUND = (
171
171
  "Exit with status 1 when the delta reports dangling callers, dangling "
172
- "importers, calls with too many arguments, new duplicates or new import "
173
- "cycles. A possibly_missing site is reported but does not fail the check."
172
+ "importers, calls with too many arguments, too few for a required "
173
+ "parameter or a keyword the callee does not accept, new duplicates or new "
174
+ "import cycles. A possibly_missing site is reported but does not fail the "
175
+ "check."
174
176
  )
175
177
  HELP_CHECK_ISOLATED = (
176
178
  "Measure the edit, then put the graph and the hash cache back so the "
@@ -584,6 +584,10 @@ class AppConfig(BaseSettings):
584
584
 
585
585
  QUIET: bool = Field(False, validation_alias="CGR_QUIET")
586
586
 
587
+ # The GitHub Sponsors line a finished command ends on in a terminal; set
588
+ # false to drop it without the rest of the output `--quiet` drops.
589
+ SPONSOR_PLEDGE: bool = Field(True, validation_alias="CGR_SPONSOR_PLEDGE")
590
+
587
591
  # Compaction discards old tool output to bound the context (#1500). It is
588
592
  # on by default because an unbounded history eventually fails the request
589
593
  # outright, but a mechanism that drops data must be declinable: set this