code-graph-rag 0.2.24__tar.gz → 0.3.13__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 (466) hide show
  1. {code_graph_rag-0.2.24/code_graph_rag.egg-info → code_graph_rag-0.3.13}/PKG-INFO +10 -6
  2. {code_graph_rag-0.2.24 → code_graph_rag-0.3.13}/PYPI_README.md +5 -5
  3. {code_graph_rag-0.2.24 → code_graph_rag-0.3.13}/README.md +6 -2
  4. {code_graph_rag-0.2.24 → code_graph_rag-0.3.13/code_graph_rag.egg-info}/PKG-INFO +10 -6
  5. {code_graph_rag-0.2.24 → code_graph_rag-0.3.13}/code_graph_rag.egg-info/SOURCES.txt +5 -0
  6. {code_graph_rag-0.2.24 → code_graph_rag-0.3.13}/code_graph_rag.egg-info/requires.txt +6 -0
  7. {code_graph_rag-0.2.24 → code_graph_rag-0.3.13}/codebase_rag/cli.py +28 -5
  8. {code_graph_rag-0.2.24 → code_graph_rag-0.3.13}/codebase_rag/cli_help.py +39 -0
  9. {code_graph_rag-0.2.24 → code_graph_rag-0.3.13}/codebase_rag/config.py +16 -1
  10. {code_graph_rag-0.2.24 → code_graph_rag-0.3.13}/codebase_rag/constants/__init__.py +1 -0
  11. {code_graph_rag-0.2.24 → code_graph_rag-0.3.13}/codebase_rag/constants/ast_rust.py +8 -0
  12. {code_graph_rag-0.2.24 → code_graph_rag-0.3.13}/codebase_rag/constants/core.py +3 -0
  13. {code_graph_rag-0.2.24 → code_graph_rag-0.3.13}/codebase_rag/constants/languages.py +1 -1
  14. {code_graph_rag-0.2.24 → code_graph_rag-0.3.13}/codebase_rag/constants/mcp.py +6 -0
  15. code_graph_rag-0.3.13/codebase_rag/constants/port.py +88 -0
  16. {code_graph_rag-0.2.24 → code_graph_rag-0.3.13}/codebase_rag/constants/providers.py +7 -0
  17. {code_graph_rag-0.2.24 → code_graph_rag-0.3.13}/codebase_rag/editing/rename.py +29 -13
  18. {code_graph_rag-0.2.24 → code_graph_rag-0.3.13}/codebase_rag/editing/sites.py +5 -3
  19. {code_graph_rag-0.2.24 → code_graph_rag-0.3.13}/codebase_rag/exceptions.py +6 -4
  20. {code_graph_rag-0.2.24 → code_graph_rag-0.3.13}/codebase_rag/graph_updater.py +168 -55
  21. {code_graph_rag-0.2.24 → code_graph_rag-0.3.13}/codebase_rag/logs.py +12 -0
  22. {code_graph_rag-0.2.24 → code_graph_rag-0.3.13}/codebase_rag/mcp/tools.py +35 -4
  23. {code_graph_rag-0.2.24 → code_graph_rag-0.3.13}/codebase_rag/parsers/call_processor.py +64 -3
  24. {code_graph_rag-0.2.24 → code_graph_rag-0.3.13}/codebase_rag/parsers/cpp/preproc_recovery.py +5 -0
  25. {code_graph_rag-0.2.24 → code_graph_rag-0.3.13}/codebase_rag/parsers/definition_processor.py +64 -0
  26. {code_graph_rag-0.2.24 → code_graph_rag-0.3.13}/codebase_rag/parsers/export_detection.py +5 -0
  27. {code_graph_rag-0.2.24 → code_graph_rag-0.3.13}/codebase_rag/parsers/factory.py +1 -0
  28. {code_graph_rag-0.2.24 → code_graph_rag-0.3.13}/codebase_rag/parsers/rs/type_inference.py +123 -4
  29. {code_graph_rag-0.2.24 → code_graph_rag-0.3.13}/codebase_rag/parsers/rs/utils.py +11 -3
  30. code_graph_rag-0.3.13/codebase_rag/parsers/sql_ddl.py +267 -0
  31. code_graph_rag-0.3.13/codebase_rag/parsers/sql_recovery.py +343 -0
  32. {code_graph_rag-0.2.24 → code_graph_rag-0.3.13}/codebase_rag/parsers/type_inference.py +6 -2
  33. {code_graph_rag-0.2.24 → code_graph_rag-0.3.13}/codebase_rag/parsers/utils.py +49 -0
  34. code_graph_rag-0.3.13/codebase_rag/port_cli.py +97 -0
  35. code_graph_rag-0.3.13/codebase_rag/port_parity.py +715 -0
  36. {code_graph_rag-0.2.24 → code_graph_rag-0.3.13}/codebase_rag/services/__init__.py +9 -0
  37. {code_graph_rag-0.2.24 → code_graph_rag-0.3.13}/codebase_rag/services/protobuf_service.py +17 -0
  38. {code_graph_rag-0.2.24 → code_graph_rag-0.3.13}/codebase_rag/structural_delta.py +13 -3
  39. {code_graph_rag-0.2.24 → code_graph_rag-0.3.13}/codebase_rag/utils/dependencies.py +26 -1
  40. {code_graph_rag-0.2.24 → code_graph_rag-0.3.13}/codebase_rag/vector_store.py +18 -1
  41. {code_graph_rag-0.2.24 → code_graph_rag-0.3.13}/codec/schema.proto +82 -0
  42. code_graph_rag-0.3.13/codec/schema_pb2.py +95 -0
  43. {code_graph_rag-0.2.24 → code_graph_rag-0.3.13}/codec/schema_pb2.pyi +144 -20
  44. {code_graph_rag-0.2.24 → code_graph_rag-0.3.13}/pyproject.toml +18 -3
  45. code_graph_rag-0.2.24/codec/schema_pb2.py +0 -95
  46. {code_graph_rag-0.2.24 → code_graph_rag-0.3.13}/LICENSE +0 -0
  47. {code_graph_rag-0.2.24 → code_graph_rag-0.3.13}/cgr/__init__.py +0 -0
  48. {code_graph_rag-0.2.24 → code_graph_rag-0.3.13}/code_graph_rag.egg-info/dependency_links.txt +0 -0
  49. {code_graph_rag-0.2.24 → code_graph_rag-0.3.13}/code_graph_rag.egg-info/entry_points.txt +0 -0
  50. {code_graph_rag-0.2.24 → code_graph_rag-0.3.13}/code_graph_rag.egg-info/top_level.txt +0 -0
  51. {code_graph_rag-0.2.24 → code_graph_rag-0.3.13}/codebase_rag/__init__.py +0 -0
  52. {code_graph_rag-0.2.24 → code_graph_rag-0.3.13}/codebase_rag/_cli_env.py +0 -0
  53. {code_graph_rag-0.2.24 → code_graph_rag-0.3.13}/codebase_rag/analyzers/__init__.py +0 -0
  54. {code_graph_rag-0.2.24 → code_graph_rag-0.3.13}/codebase_rag/analyzers/ast_grep_analyzer.py +0 -0
  55. {code_graph_rag-0.2.24 → code_graph_rag-0.3.13}/codebase_rag/analyzers/ast_grep_rules/patterns/c.yaml +0 -0
  56. {code_graph_rag-0.2.24 → code_graph_rag-0.3.13}/codebase_rag/analyzers/ast_grep_rules/patterns/cpp.yaml +0 -0
  57. {code_graph_rag-0.2.24 → code_graph_rag-0.3.13}/codebase_rag/analyzers/ast_grep_rules/patterns/csharp.yaml +0 -0
  58. {code_graph_rag-0.2.24 → code_graph_rag-0.3.13}/codebase_rag/analyzers/ast_grep_rules/patterns/dart.yaml +0 -0
  59. {code_graph_rag-0.2.24 → code_graph_rag-0.3.13}/codebase_rag/analyzers/ast_grep_rules/patterns/go.yaml +0 -0
  60. {code_graph_rag-0.2.24 → code_graph_rag-0.3.13}/codebase_rag/analyzers/ast_grep_rules/patterns/java.yaml +0 -0
  61. {code_graph_rag-0.2.24 → code_graph_rag-0.3.13}/codebase_rag/analyzers/ast_grep_rules/patterns/javascript.yaml +0 -0
  62. {code_graph_rag-0.2.24 → code_graph_rag-0.3.13}/codebase_rag/analyzers/ast_grep_rules/patterns/lua.yaml +0 -0
  63. {code_graph_rag-0.2.24 → code_graph_rag-0.3.13}/codebase_rag/analyzers/ast_grep_rules/patterns/php.yaml +0 -0
  64. {code_graph_rag-0.2.24 → code_graph_rag-0.3.13}/codebase_rag/analyzers/ast_grep_rules/patterns/python.yaml +0 -0
  65. {code_graph_rag-0.2.24 → code_graph_rag-0.3.13}/codebase_rag/analyzers/ast_grep_rules/patterns/ruby.yaml +0 -0
  66. {code_graph_rag-0.2.24 → code_graph_rag-0.3.13}/codebase_rag/analyzers/ast_grep_rules/patterns/rust.yaml +0 -0
  67. {code_graph_rag-0.2.24 → code_graph_rag-0.3.13}/codebase_rag/analyzers/ast_grep_rules/patterns/scala.yaml +0 -0
  68. {code_graph_rag-0.2.24 → code_graph_rag-0.3.13}/codebase_rag/analyzers/ast_grep_rules/patterns/tsx.yaml +0 -0
  69. {code_graph_rag-0.2.24 → code_graph_rag-0.3.13}/codebase_rag/analyzers/ast_grep_rules/patterns/typescript.yaml +0 -0
  70. {code_graph_rag-0.2.24 → code_graph_rag-0.3.13}/codebase_rag/analyzers/ast_grep_rules/security/c.yaml +0 -0
  71. {code_graph_rag-0.2.24 → code_graph_rag-0.3.13}/codebase_rag/analyzers/ast_grep_rules/security/cpp.yaml +0 -0
  72. {code_graph_rag-0.2.24 → code_graph_rag-0.3.13}/codebase_rag/analyzers/ast_grep_rules/security/csharp.yaml +0 -0
  73. {code_graph_rag-0.2.24 → code_graph_rag-0.3.13}/codebase_rag/analyzers/ast_grep_rules/security/dart.yaml +0 -0
  74. {code_graph_rag-0.2.24 → code_graph_rag-0.3.13}/codebase_rag/analyzers/ast_grep_rules/security/go.yaml +0 -0
  75. {code_graph_rag-0.2.24 → code_graph_rag-0.3.13}/codebase_rag/analyzers/ast_grep_rules/security/java.yaml +0 -0
  76. {code_graph_rag-0.2.24 → code_graph_rag-0.3.13}/codebase_rag/analyzers/ast_grep_rules/security/javascript.yaml +0 -0
  77. {code_graph_rag-0.2.24 → code_graph_rag-0.3.13}/codebase_rag/analyzers/ast_grep_rules/security/lua.yaml +0 -0
  78. {code_graph_rag-0.2.24 → code_graph_rag-0.3.13}/codebase_rag/analyzers/ast_grep_rules/security/php.yaml +0 -0
  79. {code_graph_rag-0.2.24 → code_graph_rag-0.3.13}/codebase_rag/analyzers/ast_grep_rules/security/python.yaml +0 -0
  80. {code_graph_rag-0.2.24 → code_graph_rag-0.3.13}/codebase_rag/analyzers/ast_grep_rules/security/ruby.yaml +0 -0
  81. {code_graph_rag-0.2.24 → code_graph_rag-0.3.13}/codebase_rag/analyzers/ast_grep_rules/security/rust.yaml +0 -0
  82. {code_graph_rag-0.2.24 → code_graph_rag-0.3.13}/codebase_rag/analyzers/ast_grep_rules/security/scala.yaml +0 -0
  83. {code_graph_rag-0.2.24 → code_graph_rag-0.3.13}/codebase_rag/analyzers/ast_grep_rules/security/tsx.yaml +0 -0
  84. {code_graph_rag-0.2.24 → code_graph_rag-0.3.13}/codebase_rag/analyzers/ast_grep_rules/security/typescript.yaml +0 -0
  85. {code_graph_rag-0.2.24 → code_graph_rag-0.3.13}/codebase_rag/analyzers/ast_grep_rules/smells/c.yaml +0 -0
  86. {code_graph_rag-0.2.24 → code_graph_rag-0.3.13}/codebase_rag/analyzers/ast_grep_rules/smells/cpp.yaml +0 -0
  87. {code_graph_rag-0.2.24 → code_graph_rag-0.3.13}/codebase_rag/analyzers/ast_grep_rules/smells/csharp.yaml +0 -0
  88. {code_graph_rag-0.2.24 → code_graph_rag-0.3.13}/codebase_rag/analyzers/ast_grep_rules/smells/dart.yaml +0 -0
  89. {code_graph_rag-0.2.24 → code_graph_rag-0.3.13}/codebase_rag/analyzers/ast_grep_rules/smells/go.yaml +0 -0
  90. {code_graph_rag-0.2.24 → code_graph_rag-0.3.13}/codebase_rag/analyzers/ast_grep_rules/smells/java.yaml +0 -0
  91. {code_graph_rag-0.2.24 → code_graph_rag-0.3.13}/codebase_rag/analyzers/ast_grep_rules/smells/javascript.yaml +0 -0
  92. {code_graph_rag-0.2.24 → code_graph_rag-0.3.13}/codebase_rag/analyzers/ast_grep_rules/smells/lua.yaml +0 -0
  93. {code_graph_rag-0.2.24 → code_graph_rag-0.3.13}/codebase_rag/analyzers/ast_grep_rules/smells/php.yaml +0 -0
  94. {code_graph_rag-0.2.24 → code_graph_rag-0.3.13}/codebase_rag/analyzers/ast_grep_rules/smells/python.yaml +0 -0
  95. {code_graph_rag-0.2.24 → code_graph_rag-0.3.13}/codebase_rag/analyzers/ast_grep_rules/smells/ruby.yaml +0 -0
  96. {code_graph_rag-0.2.24 → code_graph_rag-0.3.13}/codebase_rag/analyzers/ast_grep_rules/smells/rust.yaml +0 -0
  97. {code_graph_rag-0.2.24 → code_graph_rag-0.3.13}/codebase_rag/analyzers/ast_grep_rules/smells/scala.yaml +0 -0
  98. {code_graph_rag-0.2.24 → code_graph_rag-0.3.13}/codebase_rag/analyzers/ast_grep_rules/smells/tsx.yaml +0 -0
  99. {code_graph_rag-0.2.24 → code_graph_rag-0.3.13}/codebase_rag/analyzers/ast_grep_rules/smells/typescript.yaml +0 -0
  100. {code_graph_rag-0.2.24 → code_graph_rag-0.3.13}/codebase_rag/ast_cache.py +0 -0
  101. {code_graph_rag-0.2.24 → code_graph_rag-0.3.13}/codebase_rag/capture.py +0 -0
  102. {code_graph_rag-0.2.24 → code_graph_rag-0.3.13}/codebase_rag/check_isolation.py +0 -0
  103. {code_graph_rag-0.2.24 → code_graph_rag-0.3.13}/codebase_rag/checkout_state.py +0 -0
  104. {code_graph_rag-0.2.24 → code_graph_rag-0.3.13}/codebase_rag/cli_runtime.py +0 -0
  105. {code_graph_rag-0.2.24 → code_graph_rag-0.3.13}/codebase_rag/console_marks.py +0 -0
  106. {code_graph_rag-0.2.24 → code_graph_rag-0.3.13}/codebase_rag/constants/ast_cpp.py +0 -0
  107. {code_graph_rag-0.2.24 → code_graph_rag-0.3.13}/codebase_rag/constants/ast_csharp.py +0 -0
  108. {code_graph_rag-0.2.24 → code_graph_rag-0.3.13}/codebase_rag/constants/ast_dart.py +0 -0
  109. {code_graph_rag-0.2.24 → code_graph_rag-0.3.13}/codebase_rag/constants/ast_go.py +0 -0
  110. {code_graph_rag-0.2.24 → code_graph_rag-0.3.13}/codebase_rag/constants/ast_java.py +0 -0
  111. {code_graph_rag-0.2.24 → code_graph_rag-0.3.13}/codebase_rag/constants/ast_js.py +0 -0
  112. {code_graph_rag-0.2.24 → code_graph_rag-0.3.13}/codebase_rag/constants/ast_julia.py +0 -0
  113. {code_graph_rag-0.2.24 → code_graph_rag-0.3.13}/codebase_rag/constants/ast_lua.py +0 -0
  114. {code_graph_rag-0.2.24 → code_graph_rag-0.3.13}/codebase_rag/constants/ast_nodes.py +0 -0
  115. {code_graph_rag-0.2.24 → code_graph_rag-0.3.13}/codebase_rag/constants/ast_php.py +0 -0
  116. {code_graph_rag-0.2.24 → code_graph_rag-0.3.13}/codebase_rag/constants/ast_python.py +0 -0
  117. {code_graph_rag-0.2.24 → code_graph_rag-0.3.13}/codebase_rag/constants/ast_scala.py +0 -0
  118. {code_graph_rag-0.2.24 → code_graph_rag-0.3.13}/codebase_rag/constants/ast_sql.py +0 -0
  119. {code_graph_rag-0.2.24 → code_graph_rag-0.3.13}/codebase_rag/constants/build.py +0 -0
  120. {code_graph_rag-0.2.24 → code_graph_rag-0.3.13}/codebase_rag/constants/cli.py +0 -0
  121. {code_graph_rag-0.2.24 → code_graph_rag-0.3.13}/codebase_rag/constants/deadcode_roots.py +0 -0
  122. {code_graph_rag-0.2.24 → code_graph_rag-0.3.13}/codebase_rag/constants/deps.py +0 -0
  123. {code_graph_rag-0.2.24 → code_graph_rag-0.3.13}/codebase_rag/constants/duplicates.py +0 -0
  124. {code_graph_rag-0.2.24 → code_graph_rag-0.3.13}/codebase_rag/constants/embedded_graph.py +0 -0
  125. {code_graph_rag-0.2.24 → code_graph_rag-0.3.13}/codebase_rag/constants/fqn_specs.py +0 -0
  126. {code_graph_rag-0.2.24 → code_graph_rag-0.3.13}/codebase_rag/constants/graph.py +0 -0
  127. {code_graph_rag-0.2.24 → code_graph_rag-0.3.13}/codebase_rag/constants/health.py +0 -0
  128. {code_graph_rag-0.2.24 → code_graph_rag-0.3.13}/codebase_rag/constants/interface.py +0 -0
  129. {code_graph_rag-0.2.24 → code_graph_rag-0.3.13}/codebase_rag/constants/lang_tooling.py +0 -0
  130. {code_graph_rag-0.2.24 → code_graph_rag-0.3.13}/codebase_rag/constants/notebook.py +0 -0
  131. {code_graph_rag-0.2.24 → code_graph_rag-0.3.13}/codebase_rag/constants/security.py +0 -0
  132. {code_graph_rag-0.2.24 → code_graph_rag-0.3.13}/codebase_rag/constants/sqlite_vectors.py +0 -0
  133. {code_graph_rag-0.2.24 → code_graph_rag-0.3.13}/codebase_rag/constants/stdlib_types.py +0 -0
  134. {code_graph_rag-0.2.24 → code_graph_rag-0.3.13}/codebase_rag/constants/structural.py +0 -0
  135. {code_graph_rag-0.2.24 → code_graph_rag-0.3.13}/codebase_rag/constants/trace.py +0 -0
  136. {code_graph_rag-0.2.24 → code_graph_rag-0.3.13}/codebase_rag/context_pruning.py +0 -0
  137. {code_graph_rag-0.2.24 → code_graph_rag-0.3.13}/codebase_rag/context_slice.py +0 -0
  138. {code_graph_rag-0.2.24 → code_graph_rag-0.3.13}/codebase_rag/crash_correlation.py +0 -0
  139. {code_graph_rag-0.2.24 → code_graph_rag-0.3.13}/codebase_rag/cypher_queries.py +0 -0
  140. {code_graph_rag-0.2.24 → code_graph_rag-0.3.13}/codebase_rag/dead_code.py +0 -0
  141. {code_graph_rag-0.2.24 → code_graph_rag-0.3.13}/codebase_rag/decorators.py +0 -0
  142. {code_graph_rag-0.2.24 → code_graph_rag-0.3.13}/codebase_rag/docker-compose.yaml +0 -0
  143. {code_graph_rag-0.2.24 → code_graph_rag-0.3.13}/codebase_rag/duplicates.py +0 -0
  144. {code_graph_rag-0.2.24 → code_graph_rag-0.3.13}/codebase_rag/editing/__init__.py +0 -0
  145. {code_graph_rag-0.2.24 → code_graph_rag-0.3.13}/codebase_rag/editing/cli.py +0 -0
  146. {code_graph_rag-0.2.24 → code_graph_rag-0.3.13}/codebase_rag/editing/contract.py +0 -0
  147. {code_graph_rag-0.2.24 → code_graph_rag-0.3.13}/codebase_rag/editing/import_paths.py +0 -0
  148. {code_graph_rag-0.2.24 → code_graph_rag-0.3.13}/codebase_rag/editing/imports.py +0 -0
  149. {code_graph_rag-0.2.24 → code_graph_rag-0.3.13}/codebase_rag/editing/occurrences.py +0 -0
  150. {code_graph_rag-0.2.24 → code_graph_rag-0.3.13}/codebase_rag/editing/patcher.py +0 -0
  151. {code_graph_rag-0.2.24 → code_graph_rag-0.3.13}/codebase_rag/editing/signature_bind.py +0 -0
  152. {code_graph_rag-0.2.24 → code_graph_rag-0.3.13}/codebase_rag/editing/signature_contract.py +0 -0
  153. {code_graph_rag-0.2.24 → code_graph_rag-0.3.13}/codebase_rag/editing/signature_spec.py +0 -0
  154. {code_graph_rag-0.2.24 → code_graph_rag-0.3.13}/codebase_rag/editing/transaction.py +0 -0
  155. {code_graph_rag-0.2.24 → code_graph_rag-0.3.13}/codebase_rag/editor_links.py +0 -0
  156. {code_graph_rag-0.2.24 → code_graph_rag-0.3.13}/codebase_rag/embedded_graph/__init__.py +0 -0
  157. {code_graph_rag-0.2.24 → code_graph_rag-0.3.13}/codebase_rag/embedded_graph/compiler.py +0 -0
  158. {code_graph_rag-0.2.24 → code_graph_rag-0.3.13}/codebase_rag/embedded_graph/connection.py +0 -0
  159. {code_graph_rag-0.2.24 → code_graph_rag-0.3.13}/codebase_rag/embedded_graph/cypher_ast.py +0 -0
  160. {code_graph_rag-0.2.24 → code_graph_rag-0.3.13}/codebase_rag/embedded_graph/executor.py +0 -0
  161. {code_graph_rag-0.2.24 → code_graph_rag-0.3.13}/codebase_rag/embedded_graph/expressions.py +0 -0
  162. {code_graph_rag-0.2.24 → code_graph_rag-0.3.13}/codebase_rag/embedded_graph/extension.py +0 -0
  163. {code_graph_rag-0.2.24 → code_graph_rag-0.3.13}/codebase_rag/embedded_graph/functions.py +0 -0
  164. {code_graph_rag-0.2.24 → code_graph_rag-0.3.13}/codebase_rag/embedded_graph/lexer.py +0 -0
  165. {code_graph_rag-0.2.24 → code_graph_rag-0.3.13}/codebase_rag/embedded_graph/limits.py +0 -0
  166. {code_graph_rag-0.2.24 → code_graph_rag-0.3.13}/codebase_rag/embedded_graph/native.py +0 -0
  167. {code_graph_rag-0.2.24 → code_graph_rag-0.3.13}/codebase_rag/embedded_graph/parser.py +0 -0
  168. {code_graph_rag-0.2.24 → code_graph_rag-0.3.13}/codebase_rag/embedded_graph/procedures.py +0 -0
  169. {code_graph_rag-0.2.24 → code_graph_rag-0.3.13}/codebase_rag/embedded_graph/sql.py +0 -0
  170. {code_graph_rag-0.2.24 → code_graph_rag-0.3.13}/codebase_rag/embedded_graph/store.py +0 -0
  171. {code_graph_rag-0.2.24 → code_graph_rag-0.3.13}/codebase_rag/embedded_graph/types.py +0 -0
  172. {code_graph_rag-0.2.24 → code_graph_rag-0.3.13}/codebase_rag/embedder.py +0 -0
  173. {code_graph_rag-0.2.24 → code_graph_rag-0.3.13}/codebase_rag/flow_verdict.py +0 -0
  174. {code_graph_rag-0.2.24 → code_graph_rag-0.3.13}/codebase_rag/function_registry.py +0 -0
  175. {code_graph_rag-0.2.24 → code_graph_rag-0.3.13}/codebase_rag/gloss.py +0 -0
  176. {code_graph_rag-0.2.24 → code_graph_rag-0.3.13}/codebase_rag/gloss_anchor.py +0 -0
  177. {code_graph_rag-0.2.24 → code_graph_rag-0.3.13}/codebase_rag/gloss_repair.py +0 -0
  178. {code_graph_rag-0.2.24 → code_graph_rag-0.3.13}/codebase_rag/graph_audit.py +0 -0
  179. {code_graph_rag-0.2.24 → code_graph_rag-0.3.13}/codebase_rag/graph_cli.py +0 -0
  180. {code_graph_rag-0.2.24 → code_graph_rag-0.3.13}/codebase_rag/graph_dialects.py +0 -0
  181. {code_graph_rag-0.2.24 → code_graph_rag-0.3.13}/codebase_rag/graph_loader.py +0 -0
  182. {code_graph_rag-0.2.24 → code_graph_rag-0.3.13}/codebase_rag/graph_query.py +0 -0
  183. {code_graph_rag-0.2.24 → code_graph_rag-0.3.13}/codebase_rag/interface_skip.py +0 -0
  184. {code_graph_rag-0.2.24 → code_graph_rag-0.3.13}/codebase_rag/language_spec.py +0 -0
  185. {code_graph_rag-0.2.24 → code_graph_rag-0.3.13}/codebase_rag/main.py +0 -0
  186. {code_graph_rag-0.2.24 → code_graph_rag-0.3.13}/codebase_rag/mcp/__init__.py +0 -0
  187. {code_graph_rag-0.2.24 → code_graph_rag-0.3.13}/codebase_rag/mcp/client.py +0 -0
  188. {code_graph_rag-0.2.24 → code_graph_rag-0.3.13}/codebase_rag/mcp/server.py +0 -0
  189. {code_graph_rag-0.2.24 → code_graph_rag-0.3.13}/codebase_rag/mgclient_compat.py +0 -0
  190. {code_graph_rag-0.2.24 → code_graph_rag-0.3.13}/codebase_rag/mgclient_probe.py +0 -0
  191. {code_graph_rag-0.2.24 → code_graph_rag-0.3.13}/codebase_rag/models.py +0 -0
  192. {code_graph_rag-0.2.24 → code_graph_rag-0.3.13}/codebase_rag/parser_fingerprint.py +0 -0
  193. {code_graph_rag-0.2.24 → code_graph_rag-0.3.13}/codebase_rag/parser_loader.py +0 -0
  194. {code_graph_rag-0.2.24 → code_graph_rag-0.3.13}/codebase_rag/parsers/__init__.py +0 -0
  195. {code_graph_rag-0.2.24 → code_graph_rag-0.3.13}/codebase_rag/parsers/anchor_hash.py +0 -0
  196. {code_graph_rag-0.2.24 → code_graph_rag-0.3.13}/codebase_rag/parsers/ast_fingerprint.py +0 -0
  197. {code_graph_rag-0.2.24 → code_graph_rag-0.3.13}/codebase_rag/parsers/ast_grep_patterns/bash.yaml +0 -0
  198. {code_graph_rag-0.2.24 → code_graph_rag-0.3.13}/codebase_rag/parsers/ast_grep_patterns/elixir.yaml +0 -0
  199. {code_graph_rag-0.2.24 → code_graph_rag-0.3.13}/codebase_rag/parsers/ast_grep_patterns/haskell.yaml +0 -0
  200. {code_graph_rag-0.2.24 → code_graph_rag-0.3.13}/codebase_rag/parsers/ast_grep_patterns/kotlin.yaml +0 -0
  201. {code_graph_rag-0.2.24 → code_graph_rag-0.3.13}/codebase_rag/parsers/ast_grep_patterns/nix.yaml +0 -0
  202. {code_graph_rag-0.2.24 → code_graph_rag-0.3.13}/codebase_rag/parsers/ast_grep_patterns/ruby.yaml +0 -0
  203. {code_graph_rag-0.2.24 → code_graph_rag-0.3.13}/codebase_rag/parsers/ast_grep_patterns/solidity.yaml +0 -0
  204. {code_graph_rag-0.2.24 → code_graph_rag-0.3.13}/codebase_rag/parsers/ast_grep_patterns/swift.yaml +0 -0
  205. {code_graph_rag-0.2.24 → code_graph_rag-0.3.13}/codebase_rag/parsers/ast_grep_scope.py +0 -0
  206. {code_graph_rag-0.2.24 → code_graph_rag-0.3.13}/codebase_rag/parsers/ast_grep_tier.py +0 -0
  207. {code_graph_rag-0.2.24 → code_graph_rag-0.3.13}/codebase_rag/parsers/build_lock.py +0 -0
  208. {code_graph_rag-0.2.24 → code_graph_rag-0.3.13}/codebase_rag/parsers/call_resolver.py +0 -0
  209. {code_graph_rag-0.2.24 → code_graph_rag-0.3.13}/codebase_rag/parsers/class_ingest/__init__.py +0 -0
  210. {code_graph_rag-0.2.24 → code_graph_rag-0.3.13}/codebase_rag/parsers/class_ingest/base_targets.py +0 -0
  211. {code_graph_rag-0.2.24 → code_graph_rag-0.3.13}/codebase_rag/parsers/class_ingest/cpp_modules.py +0 -0
  212. {code_graph_rag-0.2.24 → code_graph_rag-0.3.13}/codebase_rag/parsers/class_ingest/identity.py +0 -0
  213. {code_graph_rag-0.2.24 → code_graph_rag-0.3.13}/codebase_rag/parsers/class_ingest/method_override.py +0 -0
  214. {code_graph_rag-0.2.24 → code_graph_rag-0.3.13}/codebase_rag/parsers/class_ingest/mixin.py +0 -0
  215. {code_graph_rag-0.2.24 → code_graph_rag-0.3.13}/codebase_rag/parsers/class_ingest/node_type.py +0 -0
  216. {code_graph_rag-0.2.24 → code_graph_rag-0.3.13}/codebase_rag/parsers/class_ingest/parent_extraction.py +0 -0
  217. {code_graph_rag-0.2.24 → code_graph_rag-0.3.13}/codebase_rag/parsers/class_ingest/relationships.py +0 -0
  218. {code_graph_rag-0.2.24 → code_graph_rag-0.3.13}/codebase_rag/parsers/class_ingest/utils.py +0 -0
  219. {code_graph_rag-0.2.24 → code_graph_rag-0.3.13}/codebase_rag/parsers/contract_linking.py +0 -0
  220. {code_graph_rag-0.2.24 → code_graph_rag-0.3.13}/codebase_rag/parsers/contracts.py +0 -0
  221. {code_graph_rag-0.2.24 → code_graph_rag-0.3.13}/codebase_rag/parsers/cpp/__init__.py +0 -0
  222. {code_graph_rag-0.2.24 → code_graph_rag-0.3.13}/codebase_rag/parsers/cpp/class_macro.py +0 -0
  223. {code_graph_rag-0.2.24 → code_graph_rag-0.3.13}/codebase_rag/parsers/cpp/function_values.py +0 -0
  224. {code_graph_rag-0.2.24 → code_graph_rag-0.3.13}/codebase_rag/parsers/cpp/local_types.py +0 -0
  225. {code_graph_rag-0.2.24 → code_graph_rag-0.3.13}/codebase_rag/parsers/cpp/overloads.py +0 -0
  226. {code_graph_rag-0.2.24 → code_graph_rag-0.3.13}/codebase_rag/parsers/cpp/trailing_annotation.py +0 -0
  227. {code_graph_rag-0.2.24 → code_graph_rag-0.3.13}/codebase_rag/parsers/cpp/type_inference.py +0 -0
  228. {code_graph_rag-0.2.24 → code_graph_rag-0.3.13}/codebase_rag/parsers/cpp/utils.py +0 -0
  229. {code_graph_rag-0.2.24 → code_graph_rag-0.3.13}/codebase_rag/parsers/cpp_frontend/__init__.py +0 -0
  230. {code_graph_rag-0.2.24 → code_graph_rag-0.3.13}/codebase_rag/parsers/cpp_frontend/constants.py +0 -0
  231. {code_graph_rag-0.2.24 → code_graph_rag-0.3.13}/codebase_rag/parsers/cpp_frontend/frontend.py +0 -0
  232. {code_graph_rag-0.2.24 → code_graph_rag-0.3.13}/codebase_rag/parsers/cpp_frontend/qn.py +0 -0
  233. {code_graph_rag-0.2.24 → code_graph_rag-0.3.13}/codebase_rag/parsers/csharp/__init__.py +0 -0
  234. {code_graph_rag-0.2.24 → code_graph_rag-0.3.13}/codebase_rag/parsers/csharp/arity.py +0 -0
  235. {code_graph_rag-0.2.24 → code_graph_rag-0.3.13}/codebase_rag/parsers/csharp/type_inference.py +0 -0
  236. {code_graph_rag-0.2.24 → code_graph_rag-0.3.13}/codebase_rag/parsers/csharp/utils.py +0 -0
  237. {code_graph_rag-0.2.24 → code_graph_rag-0.3.13}/codebase_rag/parsers/csharp_frontend/__init__.py +0 -0
  238. {code_graph_rag-0.2.24 → code_graph_rag-0.3.13}/codebase_rag/parsers/csharp_frontend/frontend.py +0 -0
  239. {code_graph_rag-0.2.24 → code_graph_rag-0.3.13}/codebase_rag/parsers/csharp_frontend/roslyn/Frontend.cs +0 -0
  240. {code_graph_rag-0.2.24 → code_graph_rag-0.3.13}/codebase_rag/parsers/csharp_frontend/roslyn/Frontend.csproj +0 -0
  241. {code_graph_rag-0.2.24 → code_graph_rag-0.3.13}/codebase_rag/parsers/csharp_frontend/roslyn/Program.cs +0 -0
  242. {code_graph_rag-0.2.24 → code_graph_rag-0.3.13}/codebase_rag/parsers/dart/__init__.py +0 -0
  243. {code_graph_rag-0.2.24 → code_graph_rag-0.3.13}/codebase_rag/parsers/dart/package_paths.py +0 -0
  244. {code_graph_rag-0.2.24 → code_graph_rag-0.3.13}/codebase_rag/parsers/dart/type_inference.py +0 -0
  245. {code_graph_rag-0.2.24 → code_graph_rag-0.3.13}/codebase_rag/parsers/dart/utils.py +0 -0
  246. {code_graph_rag-0.2.24 → code_graph_rag-0.3.13}/codebase_rag/parsers/definition_docstring.py +0 -0
  247. {code_graph_rag-0.2.24 → code_graph_rag-0.3.13}/codebase_rag/parsers/dependency_parser.py +0 -0
  248. {code_graph_rag-0.2.24 → code_graph_rag-0.3.13}/codebase_rag/parsers/dispatch_registry.py +0 -0
  249. {code_graph_rag-0.2.24 → code_graph_rag-0.3.13}/codebase_rag/parsers/document_tier.py +0 -0
  250. {code_graph_rag-0.2.24 → code_graph_rag-0.3.13}/codebase_rag/parsers/endpoint_prefixes.py +0 -0
  251. {code_graph_rag-0.2.24 → code_graph_rag-0.3.13}/codebase_rag/parsers/endpoint_routes.py +0 -0
  252. {code_graph_rag-0.2.24 → code_graph_rag-0.3.13}/codebase_rag/parsers/endpoints.py +0 -0
  253. {code_graph_rag-0.2.24 → code_graph_rag-0.3.13}/codebase_rag/parsers/enum_variants.py +0 -0
  254. {code_graph_rag-0.2.24 → code_graph_rag-0.3.13}/codebase_rag/parsers/field_nodes.py +0 -0
  255. {code_graph_rag-0.2.24 → code_graph_rag-0.3.13}/codebase_rag/parsers/flat_module.py +0 -0
  256. {code_graph_rag-0.2.24 → code_graph_rag-0.3.13}/codebase_rag/parsers/flow_access/__init__.py +0 -0
  257. {code_graph_rag-0.2.24 → code_graph_rag-0.3.13}/codebase_rag/parsers/flow_access/constants.py +0 -0
  258. {code_graph_rag-0.2.24 → code_graph_rag-0.3.13}/codebase_rag/parsers/flow_access/processor.py +0 -0
  259. {code_graph_rag-0.2.24 → code_graph_rag-0.3.13}/codebase_rag/parsers/frontend_mode.py +0 -0
  260. {code_graph_rag-0.2.24 → code_graph_rag-0.3.13}/codebase_rag/parsers/frontends/__init__.py +0 -0
  261. {code_graph_rag-0.2.24 → code_graph_rag-0.3.13}/codebase_rag/parsers/frontends/cpp.py +0 -0
  262. {code_graph_rag-0.2.24 → code_graph_rag-0.3.13}/codebase_rag/parsers/frontends/csharp.py +0 -0
  263. {code_graph_rag-0.2.24 → code_graph_rag-0.3.13}/codebase_rag/parsers/frontends/go.py +0 -0
  264. {code_graph_rag-0.2.24 → code_graph_rag-0.3.13}/codebase_rag/parsers/frontends/java.py +0 -0
  265. {code_graph_rag-0.2.24 → code_graph_rag-0.3.13}/codebase_rag/parsers/frontends/protocol.py +0 -0
  266. {code_graph_rag-0.2.24 → code_graph_rag-0.3.13}/codebase_rag/parsers/frontends/python.py +0 -0
  267. {code_graph_rag-0.2.24 → code_graph_rag-0.3.13}/codebase_rag/parsers/frontends/registry.py +0 -0
  268. {code_graph_rag-0.2.24 → code_graph_rag-0.3.13}/codebase_rag/parsers/function_ingest.py +0 -0
  269. {code_graph_rag-0.2.24 → code_graph_rag-0.3.13}/codebase_rag/parsers/go/__init__.py +0 -0
  270. {code_graph_rag-0.2.24 → code_graph_rag-0.3.13}/codebase_rag/parsers/go/builds.py +0 -0
  271. {code_graph_rag-0.2.24 → code_graph_rag-0.3.13}/codebase_rag/parsers/go/interface_ingest.py +0 -0
  272. {code_graph_rag-0.2.24 → code_graph_rag-0.3.13}/codebase_rag/parsers/go/interfaces.py +0 -0
  273. {code_graph_rag-0.2.24 → code_graph_rag-0.3.13}/codebase_rag/parsers/go/link_state.py +0 -0
  274. {code_graph_rag-0.2.24 → code_graph_rag-0.3.13}/codebase_rag/parsers/go/module_paths.py +0 -0
  275. {code_graph_rag-0.2.24 → code_graph_rag-0.3.13}/codebase_rag/parsers/go/type_inference.py +0 -0
  276. {code_graph_rag-0.2.24 → code_graph_rag-0.3.13}/codebase_rag/parsers/go/utils.py +0 -0
  277. {code_graph_rag-0.2.24 → code_graph_rag-0.3.13}/codebase_rag/parsers/go_frontend/__init__.py +0 -0
  278. {code_graph_rag-0.2.24 → code_graph_rag-0.3.13}/codebase_rag/parsers/go_frontend/frontend.py +0 -0
  279. {code_graph_rag-0.2.24 → code_graph_rag-0.3.13}/codebase_rag/parsers/go_frontend/gotypes/go.mod +0 -0
  280. {code_graph_rag-0.2.24 → code_graph_rag-0.3.13}/codebase_rag/parsers/go_frontend/gotypes/go.sum +0 -0
  281. {code_graph_rag-0.2.24 → code_graph_rag-0.3.13}/codebase_rag/parsers/go_frontend/gotypes/main.go +0 -0
  282. {code_graph_rag-0.2.24 → code_graph_rag-0.3.13}/codebase_rag/parsers/handlers/__init__.py +0 -0
  283. {code_graph_rag-0.2.24 → code_graph_rag-0.3.13}/codebase_rag/parsers/handlers/base.py +0 -0
  284. {code_graph_rag-0.2.24 → code_graph_rag-0.3.13}/codebase_rag/parsers/handlers/cpp.py +0 -0
  285. {code_graph_rag-0.2.24 → code_graph_rag-0.3.13}/codebase_rag/parsers/handlers/java.py +0 -0
  286. {code_graph_rag-0.2.24 → code_graph_rag-0.3.13}/codebase_rag/parsers/handlers/js_ts.py +0 -0
  287. {code_graph_rag-0.2.24 → code_graph_rag-0.3.13}/codebase_rag/parsers/handlers/julia.py +0 -0
  288. {code_graph_rag-0.2.24 → code_graph_rag-0.3.13}/codebase_rag/parsers/handlers/lua.py +0 -0
  289. {code_graph_rag-0.2.24 → code_graph_rag-0.3.13}/codebase_rag/parsers/handlers/php.py +0 -0
  290. {code_graph_rag-0.2.24 → code_graph_rag-0.3.13}/codebase_rag/parsers/handlers/protocol.py +0 -0
  291. {code_graph_rag-0.2.24 → code_graph_rag-0.3.13}/codebase_rag/parsers/handlers/python.py +0 -0
  292. {code_graph_rag-0.2.24 → code_graph_rag-0.3.13}/codebase_rag/parsers/handlers/registry.py +0 -0
  293. {code_graph_rag-0.2.24 → code_graph_rag-0.3.13}/codebase_rag/parsers/handlers/rust.py +0 -0
  294. {code_graph_rag-0.2.24 → code_graph_rag-0.3.13}/codebase_rag/parsers/import_processor.py +0 -0
  295. {code_graph_rag-0.2.24 → code_graph_rag-0.3.13}/codebase_rag/parsers/interface_fingerprint.py +0 -0
  296. {code_graph_rag-0.2.24 → code_graph_rag-0.3.13}/codebase_rag/parsers/io_access/__init__.py +0 -0
  297. {code_graph_rag-0.2.24 → code_graph_rag-0.3.13}/codebase_rag/parsers/io_access/constants.py +0 -0
  298. {code_graph_rag-0.2.24 → code_graph_rag-0.3.13}/codebase_rag/parsers/io_access/descriptor.py +0 -0
  299. {code_graph_rag-0.2.24 → code_graph_rag-0.3.13}/codebase_rag/parsers/io_access/extract.py +0 -0
  300. {code_graph_rag-0.2.24 → code_graph_rag-0.3.13}/codebase_rag/parsers/io_access/models.py +0 -0
  301. {code_graph_rag-0.2.24 → code_graph_rag-0.3.13}/codebase_rag/parsers/io_access/processor.py +0 -0
  302. {code_graph_rag-0.2.24 → code_graph_rag-0.3.13}/codebase_rag/parsers/io_access/registry.py +0 -0
  303. {code_graph_rag-0.2.24 → code_graph_rag-0.3.13}/codebase_rag/parsers/io_access/resource_names.py +0 -0
  304. {code_graph_rag-0.2.24 → code_graph_rag-0.3.13}/codebase_rag/parsers/io_access/url_folding.py +0 -0
  305. {code_graph_rag-0.2.24 → code_graph_rag-0.3.13}/codebase_rag/parsers/java/__init__.py +0 -0
  306. {code_graph_rag-0.2.24 → code_graph_rag-0.3.13}/codebase_rag/parsers/java/method_resolver.py +0 -0
  307. {code_graph_rag-0.2.24 → code_graph_rag-0.3.13}/codebase_rag/parsers/java/type_inference.py +0 -0
  308. {code_graph_rag-0.2.24 → code_graph_rag-0.3.13}/codebase_rag/parsers/java/type_resolver.py +0 -0
  309. {code_graph_rag-0.2.24 → code_graph_rag-0.3.13}/codebase_rag/parsers/java/utils.py +0 -0
  310. {code_graph_rag-0.2.24 → code_graph_rag-0.3.13}/codebase_rag/parsers/java/variable_analyzer.py +0 -0
  311. {code_graph_rag-0.2.24 → code_graph_rag-0.3.13}/codebase_rag/parsers/java_frontend/__init__.py +0 -0
  312. {code_graph_rag-0.2.24 → code_graph_rag-0.3.13}/codebase_rag/parsers/java_frontend/frontend.py +0 -0
  313. {code_graph_rag-0.2.24 → code_graph_rag-0.3.13}/codebase_rag/parsers/java_frontend/javac/cgr/Frontend.java +0 -0
  314. {code_graph_rag-0.2.24 → code_graph_rag-0.3.13}/codebase_rag/parsers/java_generated.py +0 -0
  315. {code_graph_rag-0.2.24 → code_graph_rag-0.3.13}/codebase_rag/parsers/java_lombok.py +0 -0
  316. {code_graph_rag-0.2.24 → code_graph_rag-0.3.13}/codebase_rag/parsers/js_ts/__init__.py +0 -0
  317. {code_graph_rag-0.2.24 → code_graph_rag-0.3.13}/codebase_rag/parsers/js_ts/commonjs_exports.py +0 -0
  318. {code_graph_rag-0.2.24 → code_graph_rag-0.3.13}/codebase_rag/parsers/js_ts/ingest.py +0 -0
  319. {code_graph_rag-0.2.24 → code_graph_rag-0.3.13}/codebase_rag/parsers/js_ts/module_paths.py +0 -0
  320. {code_graph_rag-0.2.24 → code_graph_rag-0.3.13}/codebase_rag/parsers/js_ts/module_system.py +0 -0
  321. {code_graph_rag-0.2.24 → code_graph_rag-0.3.13}/codebase_rag/parsers/js_ts/overloads.py +0 -0
  322. {code_graph_rag-0.2.24 → code_graph_rag-0.3.13}/codebase_rag/parsers/js_ts/reexports.py +0 -0
  323. {code_graph_rag-0.2.24 → code_graph_rag-0.3.13}/codebase_rag/parsers/js_ts/type_inference.py +0 -0
  324. {code_graph_rag-0.2.24 → code_graph_rag-0.3.13}/codebase_rag/parsers/js_ts/utils.py +0 -0
  325. {code_graph_rag-0.2.24 → code_graph_rag-0.3.13}/codebase_rag/parsers/julia/__init__.py +0 -0
  326. {code_graph_rag-0.2.24 → code_graph_rag-0.3.13}/codebase_rag/parsers/julia/utils.py +0 -0
  327. {code_graph_rag-0.2.24 → code_graph_rag-0.3.13}/codebase_rag/parsers/lua/__init__.py +0 -0
  328. {code_graph_rag-0.2.24 → code_graph_rag-0.3.13}/codebase_rag/parsers/lua/type_inference.py +0 -0
  329. {code_graph_rag-0.2.24 → code_graph_rag-0.3.13}/codebase_rag/parsers/lua/utils.py +0 -0
  330. {code_graph_rag-0.2.24 → code_graph_rag-0.3.13}/codebase_rag/parsers/module_docstring.py +0 -0
  331. {code_graph_rag-0.2.24 → code_graph_rag-0.3.13}/codebase_rag/parsers/notebook.py +0 -0
  332. {code_graph_rag-0.2.24 → code_graph_rag-0.3.13}/codebase_rag/parsers/parameter_nodes.py +0 -0
  333. {code_graph_rag-0.2.24 → code_graph_rag-0.3.13}/codebase_rag/parsers/php/__init__.py +0 -0
  334. {code_graph_rag-0.2.24 → code_graph_rag-0.3.13}/codebase_rag/parsers/php/class_names.py +0 -0
  335. {code_graph_rag-0.2.24 → code_graph_rag-0.3.13}/codebase_rag/parsers/php/namespaces.py +0 -0
  336. {code_graph_rag-0.2.24 → code_graph_rag-0.3.13}/codebase_rag/parsers/php/utils.py +0 -0
  337. {code_graph_rag-0.2.24 → code_graph_rag-0.3.13}/codebase_rag/parsers/positional_params.py +0 -0
  338. {code_graph_rag-0.2.24 → code_graph_rag-0.3.13}/codebase_rag/parsers/py/__init__.py +0 -0
  339. {code_graph_rag-0.2.24 → code_graph_rag-0.3.13}/codebase_rag/parsers/py/ast_analyzer.py +0 -0
  340. {code_graph_rag-0.2.24 → code_graph_rag-0.3.13}/codebase_rag/parsers/py/class_aliases.py +0 -0
  341. {code_graph_rag-0.2.24 → code_graph_rag-0.3.13}/codebase_rag/parsers/py/expression_analyzer.py +0 -0
  342. {code_graph_rag-0.2.24 → code_graph_rag-0.3.13}/codebase_rag/parsers/py/forward_refs.py +0 -0
  343. {code_graph_rag-0.2.24 → code_graph_rag-0.3.13}/codebase_rag/parsers/py/overloads.py +0 -0
  344. {code_graph_rag-0.2.24 → code_graph_rag-0.3.13}/codebase_rag/parsers/py/receiver_rebinding.py +0 -0
  345. {code_graph_rag-0.2.24 → code_graph_rag-0.3.13}/codebase_rag/parsers/py/type_inference.py +0 -0
  346. {code_graph_rag-0.2.24 → code_graph_rag-0.3.13}/codebase_rag/parsers/py/utils.py +0 -0
  347. {code_graph_rag-0.2.24 → code_graph_rag-0.3.13}/codebase_rag/parsers/py/variable_analyzer.py +0 -0
  348. {code_graph_rag-0.2.24 → code_graph_rag-0.3.13}/codebase_rag/parsers/py/with_analyzer.py +0 -0
  349. {code_graph_rag-0.2.24 → code_graph_rag-0.3.13}/codebase_rag/parsers/py_frontend/__init__.py +0 -0
  350. {code_graph_rag-0.2.24 → code_graph_rag-0.3.13}/codebase_rag/parsers/py_frontend/frontend.py +0 -0
  351. {code_graph_rag-0.2.24 → code_graph_rag-0.3.13}/codebase_rag/parsers/python_source_roots.py +0 -0
  352. {code_graph_rag-0.2.24 → code_graph_rag-0.3.13}/codebase_rag/parsers/rpc_exposure.py +0 -0
  353. {code_graph_rag-0.2.24 → code_graph_rag-0.3.13}/codebase_rag/parsers/rs/__init__.py +0 -0
  354. {code_graph_rag-0.2.24 → code_graph_rag-0.3.13}/codebase_rag/parsers/rs/cargo_semver.py +0 -0
  355. {code_graph_rag-0.2.24 → code_graph_rag-0.3.13}/codebase_rag/parsers/scala/__init__.py +0 -0
  356. {code_graph_rag-0.2.24 → code_graph_rag-0.3.13}/codebase_rag/parsers/scala/utils.py +0 -0
  357. {code_graph_rag-0.2.24 → code_graph_rag-0.3.13}/codebase_rag/parsers/semantic_call_join.py +0 -0
  358. {code_graph_rag-0.2.24 → code_graph_rag-0.3.13}/codebase_rag/parsers/stdlib_extractor.py +0 -0
  359. {code_graph_rag-0.2.24 → code_graph_rag-0.3.13}/codebase_rag/parsers/string_call.py +0 -0
  360. {code_graph_rag-0.2.24 → code_graph_rag-0.3.13}/codebase_rag/parsers/structure_processor.py +0 -0
  361. {code_graph_rag-0.2.24 → code_graph_rag-0.3.13}/codebase_rag/parsers/type_facts.py +0 -0
  362. {code_graph_rag-0.2.24 → code_graph_rag-0.3.13}/codebase_rag/path_filters.py +0 -0
  363. {code_graph_rag-0.2.24 → code_graph_rag-0.3.13}/codebase_rag/project_selection.py +0 -0
  364. {code_graph_rag-0.2.24 → code_graph_rag-0.3.13}/codebase_rag/prompts.py +0 -0
  365. {code_graph_rag-0.2.24 → code_graph_rag-0.3.13}/codebase_rag/providers/__init__.py +0 -0
  366. {code_graph_rag-0.2.24 → code_graph_rag-0.3.13}/codebase_rag/providers/base.py +0 -0
  367. {code_graph_rag-0.2.24 → code_graph_rag-0.3.13}/codebase_rag/providers/litellm.py +0 -0
  368. {code_graph_rag-0.2.24 → code_graph_rag-0.3.13}/codebase_rag/queries/highlights/c_sharp.scm +0 -0
  369. {code_graph_rag-0.2.24 → code_graph_rag-0.3.13}/codebase_rag/queries/highlights/dart.scm +0 -0
  370. {code_graph_rag-0.2.24 → code_graph_rag-0.3.13}/codebase_rag/queries/highlights/java.scm +0 -0
  371. {code_graph_rag-0.2.24 → code_graph_rag-0.3.13}/codebase_rag/queries/highlights/javascript.scm +0 -0
  372. {code_graph_rag-0.2.24 → code_graph_rag-0.3.13}/codebase_rag/queries/highlights/julia.scm +0 -0
  373. {code_graph_rag-0.2.24 → code_graph_rag-0.3.13}/codebase_rag/queries/highlights/php.scm +0 -0
  374. {code_graph_rag-0.2.24 → code_graph_rag-0.3.13}/codebase_rag/queries/highlights/python.scm +0 -0
  375. {code_graph_rag-0.2.24 → code_graph_rag-0.3.13}/codebase_rag/queries/highlights/rust.scm +0 -0
  376. {code_graph_rag-0.2.24 → code_graph_rag-0.3.13}/codebase_rag/queries/highlights/typescript.scm +0 -0
  377. {code_graph_rag-0.2.24 → code_graph_rag-0.3.13}/codebase_rag/readme_sections.py +0 -0
  378. {code_graph_rag-0.2.24 → code_graph_rag-0.3.13}/codebase_rag/schema_builder.py +0 -0
  379. {code_graph_rag-0.2.24 → code_graph_rag-0.3.13}/codebase_rag/schema_parse.py +0 -0
  380. {code_graph_rag-0.2.24 → code_graph_rag-0.3.13}/codebase_rag/schemas.py +0 -0
  381. {code_graph_rag-0.2.24 → code_graph_rag-0.3.13}/codebase_rag/services/anthropic_token_counter.py +0 -0
  382. {code_graph_rag-0.2.24 → code_graph_rag-0.3.13}/codebase_rag/services/cypher_guard.py +0 -0
  383. {code_graph_rag-0.2.24 → code_graph_rag-0.3.13}/codebase_rag/services/filtering.py +0 -0
  384. {code_graph_rag-0.2.24 → code_graph_rag-0.3.13}/codebase_rag/services/gloss_cleanup.py +0 -0
  385. {code_graph_rag-0.2.24 → code_graph_rag-0.3.13}/codebase_rag/services/graph_diff.py +0 -0
  386. {code_graph_rag-0.2.24 → code_graph_rag-0.3.13}/codebase_rag/services/graph_service.py +0 -0
  387. {code_graph_rag-0.2.24 → code_graph_rag-0.3.13}/codebase_rag/services/llm.py +0 -0
  388. {code_graph_rag-0.2.24 → code_graph_rag-0.3.13}/codebase_rag/services/neo4j_driver.py +0 -0
  389. {code_graph_rag-0.2.24 → code_graph_rag-0.3.13}/codebase_rag/services/provenance.py +0 -0
  390. {code_graph_rag-0.2.24 → code_graph_rag-0.3.13}/codebase_rag/services/resource_cleanup.py +0 -0
  391. {code_graph_rag-0.2.24 → code_graph_rag-0.3.13}/codebase_rag/services/usage_cost.py +0 -0
  392. {code_graph_rag-0.2.24 → code_graph_rag-0.3.13}/codebase_rag/sql_names.py +0 -0
  393. {code_graph_rag-0.2.24 → code_graph_rag-0.3.13}/codebase_rag/sqlite_vectors.py +0 -0
  394. {code_graph_rag-0.2.24 → code_graph_rag-0.3.13}/codebase_rag/stack/__init__.py +0 -0
  395. {code_graph_rag-0.2.24 → code_graph_rag-0.3.13}/codebase_rag/stack/cli.py +0 -0
  396. {code_graph_rag-0.2.24 → code_graph_rag-0.3.13}/codebase_rag/stack/constants.py +0 -0
  397. {code_graph_rag-0.2.24 → code_graph_rag-0.3.13}/codebase_rag/stack/health.py +0 -0
  398. {code_graph_rag-0.2.24 → code_graph_rag-0.3.13}/codebase_rag/stack/manager.py +0 -0
  399. {code_graph_rag-0.2.24 → code_graph_rag-0.3.13}/codebase_rag/structural_check.py +0 -0
  400. {code_graph_rag-0.2.24 → code_graph_rag-0.3.13}/codebase_rag/sync_guard.py +0 -0
  401. {code_graph_rag-0.2.24 → code_graph_rag-0.3.13}/codebase_rag/sync_lock.py +0 -0
  402. {code_graph_rag-0.2.24 → code_graph_rag-0.3.13}/codebase_rag/taint.py +0 -0
  403. {code_graph_rag-0.2.24 → code_graph_rag-0.3.13}/codebase_rag/tool_errors.py +0 -0
  404. {code_graph_rag-0.2.24 → code_graph_rag-0.3.13}/codebase_rag/tools/__init__.py +0 -0
  405. {code_graph_rag-0.2.24 → code_graph_rag-0.3.13}/codebase_rag/tools/ast_grep_service.py +0 -0
  406. {code_graph_rag-0.2.24 → code_graph_rag-0.3.13}/codebase_rag/tools/code_retrieval.py +0 -0
  407. {code_graph_rag-0.2.24 → code_graph_rag-0.3.13}/codebase_rag/tools/codebase_query.py +0 -0
  408. {code_graph_rag-0.2.24 → code_graph_rag-0.3.13}/codebase_rag/tools/directory_lister.py +0 -0
  409. {code_graph_rag-0.2.24 → code_graph_rag-0.3.13}/codebase_rag/tools/duplicate_detection.py +0 -0
  410. {code_graph_rag-0.2.24 → code_graph_rag-0.3.13}/codebase_rag/tools/file_editor.py +0 -0
  411. {code_graph_rag-0.2.24 → code_graph_rag-0.3.13}/codebase_rag/tools/file_reader.py +0 -0
  412. {code_graph_rag-0.2.24 → code_graph_rag-0.3.13}/codebase_rag/tools/file_writer.py +0 -0
  413. {code_graph_rag-0.2.24 → code_graph_rag-0.3.13}/codebase_rag/tools/graph_refresh.py +0 -0
  414. {code_graph_rag-0.2.24 → code_graph_rag-0.3.13}/codebase_rag/tools/graph_rerank.py +0 -0
  415. {code_graph_rag-0.2.24 → code_graph_rag-0.3.13}/codebase_rag/tools/health_checker.py +0 -0
  416. {code_graph_rag-0.2.24 → code_graph_rag-0.3.13}/codebase_rag/tools/language.py +0 -0
  417. {code_graph_rag-0.2.24 → code_graph_rag-0.3.13}/codebase_rag/tools/language_catalog.py +0 -0
  418. {code_graph_rag-0.2.24 → code_graph_rag-0.3.13}/codebase_rag/tools/research.py +0 -0
  419. {code_graph_rag-0.2.24 → code_graph_rag-0.3.13}/codebase_rag/tools/semantic_search.py +0 -0
  420. {code_graph_rag-0.2.24 → code_graph_rag-0.3.13}/codebase_rag/tools/shell_command.py +0 -0
  421. {code_graph_rag-0.2.24 → code_graph_rag-0.3.13}/codebase_rag/tools/structural_editor.py +0 -0
  422. {code_graph_rag-0.2.24 → code_graph_rag-0.3.13}/codebase_rag/tools/structural_search.py +0 -0
  423. {code_graph_rag-0.2.24 → code_graph_rag-0.3.13}/codebase_rag/tools/tool_descriptions.py +0 -0
  424. {code_graph_rag-0.2.24 → code_graph_rag-0.3.13}/codebase_rag/tools/web_search.py +0 -0
  425. {code_graph_rag-0.2.24 → code_graph_rag-0.3.13}/codebase_rag/trace/__init__.py +0 -0
  426. {code_graph_rag-0.2.24 → code_graph_rag-0.3.13}/codebase_rag/trace/carry.py +0 -0
  427. {code_graph_rag-0.2.24 → code_graph_rag-0.3.13}/codebase_rag/trace/cli.py +0 -0
  428. {code_graph_rag-0.2.24 → code_graph_rag-0.3.13}/codebase_rag/trace/cpuprofile.py +0 -0
  429. {code_graph_rag-0.2.24 → code_graph_rag-0.3.13}/codebase_rag/trace/dispatch_site.py +0 -0
  430. {code_graph_rag-0.2.24 → code_graph_rag-0.3.13}/codebase_rag/trace/ebpf_pprof.py +0 -0
  431. {code_graph_rag-0.2.24 → code_graph_rag-0.3.13}/codebase_rag/trace/ingest.py +0 -0
  432. {code_graph_rag-0.2.24 → code_graph_rag-0.3.13}/codebase_rag/trace/instrumented.py +0 -0
  433. {code_graph_rag-0.2.24 → code_graph_rag-0.3.13}/codebase_rag/trace/pprof.py +0 -0
  434. {code_graph_rag-0.2.24 → code_graph_rag-0.3.13}/codebase_rag/trace/pytest_plugin.py +0 -0
  435. {code_graph_rag-0.2.24 → code_graph_rag-0.3.13}/codebase_rag/trace/records.py +0 -0
  436. {code_graph_rag-0.2.24 → code_graph_rag-0.3.13}/codebase_rag/trace/resolution.py +0 -0
  437. {code_graph_rag-0.2.24 → code_graph_rag-0.3.13}/codebase_rag/trace/rust_pprof.py +0 -0
  438. {code_graph_rag-0.2.24 → code_graph_rag-0.3.13}/codebase_rag/trace/sourcemap.py +0 -0
  439. {code_graph_rag-0.2.24 → code_graph_rag-0.3.13}/codebase_rag/trace/speedscope.py +0 -0
  440. {code_graph_rag-0.2.24 → code_graph_rag-0.3.13}/codebase_rag/trace/tracer.py +0 -0
  441. {code_graph_rag-0.2.24 → code_graph_rag-0.3.13}/codebase_rag/trace/xdebug.py +0 -0
  442. {code_graph_rag-0.2.24 → code_graph_rag-0.3.13}/codebase_rag/tree_sitter_point.py +0 -0
  443. {code_graph_rag-0.2.24 → code_graph_rag-0.3.13}/codebase_rag/types_defs.py +0 -0
  444. {code_graph_rag-0.2.24 → code_graph_rag-0.3.13}/codebase_rag/unixcoder.py +0 -0
  445. {code_graph_rag-0.2.24 → code_graph_rag-0.3.13}/codebase_rag/utils/__init__.py +0 -0
  446. {code_graph_rag-0.2.24 → code_graph_rag-0.3.13}/codebase_rag/utils/cpp_signatures.py +0 -0
  447. {code_graph_rag-0.2.24 → code_graph_rag-0.3.13}/codebase_rag/utils/endpoints.py +0 -0
  448. {code_graph_rag-0.2.24 → code_graph_rag-0.3.13}/codebase_rag/utils/fqn_resolver.py +0 -0
  449. {code_graph_rag-0.2.24 → code_graph_rag-0.3.13}/codebase_rag/utils/interruptible_thread.py +0 -0
  450. {code_graph_rag-0.2.24 → code_graph_rag-0.3.13}/codebase_rag/utils/json_io.py +0 -0
  451. {code_graph_rag-0.2.24 → code_graph_rag-0.3.13}/codebase_rag/utils/path_utils.py +0 -0
  452. {code_graph_rag-0.2.24 → code_graph_rag-0.3.13}/codebase_rag/utils/process_owner.py +0 -0
  453. {code_graph_rag-0.2.24 → code_graph_rag-0.3.13}/codebase_rag/utils/qn_markers.py +0 -0
  454. {code_graph_rag-0.2.24 → code_graph_rag-0.3.13}/codebase_rag/utils/rich_markdown.py +0 -0
  455. {code_graph_rag-0.2.24 → code_graph_rag-0.3.13}/codebase_rag/utils/source_encoding.py +0 -0
  456. {code_graph_rag-0.2.24 → code_graph_rag-0.3.13}/codebase_rag/utils/source_extraction.py +0 -0
  457. {code_graph_rag-0.2.24 → code_graph_rag-0.3.13}/codebase_rag/utils/terminal_console.py +0 -0
  458. {code_graph_rag-0.2.24 → code_graph_rag-0.3.13}/codebase_rag/utils/token_utils.py +0 -0
  459. {code_graph_rag-0.2.24 → code_graph_rag-0.3.13}/codebase_rag/watch.py +0 -0
  460. {code_graph_rag-0.2.24 → code_graph_rag-0.3.13}/codebase_rag/workspaces/__init__.py +0 -0
  461. {code_graph_rag-0.2.24 → code_graph_rag-0.3.13}/codebase_rag/workspaces/cli.py +0 -0
  462. {code_graph_rag-0.2.24 → code_graph_rag-0.3.13}/codebase_rag/workspaces/constants.py +0 -0
  463. {code_graph_rag-0.2.24 → code_graph_rag-0.3.13}/codebase_rag/workspaces/models.py +0 -0
  464. {code_graph_rag-0.2.24 → code_graph_rag-0.3.13}/codebase_rag/workspaces/storage.py +0 -0
  465. {code_graph_rag-0.2.24 → code_graph_rag-0.3.13}/codec/__init__.py +0 -0
  466. {code_graph_rag-0.2.24 → code_graph_rag-0.3.13}/setup.cfg +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: code-graph-rag
3
- Version: 0.2.24
3
+ Version: 0.3.13
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
@@ -38,6 +38,7 @@ Requires-Dist: defusedxml>=0.7.1
38
38
  Requires-Dist: huggingface-hub[hf-xet]>=1.7.2
39
39
  Requires-Dist: pathspec>=1.0.4
40
40
  Requires-Dist: pygments>=2.20.0
41
+ Requires-Dist: certifi>=2026.10.23
41
42
  Requires-Dist: regex>=2024.11.6
42
43
  Requires-Dist: cgr-graph-rs<0.2,>=0.1.0; platform_python_implementation == "CPython" and ((sys_platform == "linux" and (platform_machine == "x86_64" or platform_machine == "aarch64")) or sys_platform == "darwin" or (sys_platform == "win32" and platform_machine == "AMD64"))
43
44
  Provides-Extra: test
@@ -78,10 +79,13 @@ Requires-Dist: tree-sitter-sql>=0.3.11; extra == "treesitter-full"
78
79
  Requires-Dist: tree-sitter-markdown>=0.5.1; extra == "treesitter-full"
79
80
  Provides-Extra: semantic
80
81
  Requires-Dist: qdrant-client>=1.9.0; extra == "semantic"
82
+ Requires-Dist: grpcio>=1.84.1; extra == "semantic"
83
+ Requires-Dist: sqlite-vec>=0.1.9; ((sys_platform == "linux" and (platform_machine == "x86_64" or platform_machine == "aarch64")) or sys_platform == "darwin" or (sys_platform == "win32" and platform_machine == "AMD64")) and extra == "semantic"
81
84
  Requires-Dist: torch>=2.6.0; extra == "semantic"
82
85
  Requires-Dist: transformers>=5.0.0; extra == "semantic"
83
86
  Provides-Extra: milvus
84
87
  Requires-Dist: pymilvus[milvus-lite]>=3.0.0; extra == "milvus"
88
+ Requires-Dist: grpcio>=1.84.1; extra == "milvus"
85
89
  Provides-Extra: sqlite-vec
86
90
  Requires-Dist: sqlite-vec>=0.1.9; extra == "sqlite-vec"
87
91
  Provides-Extra: ast-grep
@@ -135,12 +139,12 @@ With semantic code search (UniXcoder embeddings):
135
139
  pip install 'code-graph-rag[semantic]'
136
140
  ```
137
141
 
138
- Qdrant is the default vector store for semantic search. To use Milvus Lite,
139
- install `code-graph-rag[semantic,milvus]`, then set
142
+ The vectors go to a SQLite file beside the embedded graph
143
+ (`~/.cgr/vectors.sqlite`), so semantic search needs no server and no Docker
144
+ either. To use Qdrant instead, set `CGR_VECTOR_STORE_BACKEND=qdrant`. To use
145
+ Milvus Lite, install `code-graph-rag[semantic,milvus]`, then set
140
146
  `CGR_VECTOR_STORE_BACKEND=milvus` and `MILVUS_URI=./.milvus_code_embeddings.db`
141
- before indexing. To keep the vectors in a SQLite file beside the embedded graph
142
- (`~/.cgr/vectors.sqlite`, no server), install `code-graph-rag[semantic,sqlite-vec]`
143
- and set `CGR_VECTOR_STORE_BACKEND=sqlite`.
147
+ before indexing.
144
148
 
145
149
  To compute embeddings on an OpenAI-compatible endpoint (OpenAI, Ollama, vLLM)
146
150
  instead of locally, set `CGR_EMBEDDING_PROVIDER=openai` with
@@ -42,12 +42,12 @@ With semantic code search (UniXcoder embeddings):
42
42
  pip install 'code-graph-rag[semantic]'
43
43
  ```
44
44
 
45
- Qdrant is the default vector store for semantic search. To use Milvus Lite,
46
- install `code-graph-rag[semantic,milvus]`, then set
45
+ The vectors go to a SQLite file beside the embedded graph
46
+ (`~/.cgr/vectors.sqlite`), so semantic search needs no server and no Docker
47
+ either. To use Qdrant instead, set `CGR_VECTOR_STORE_BACKEND=qdrant`. To use
48
+ Milvus Lite, install `code-graph-rag[semantic,milvus]`, then set
47
49
  `CGR_VECTOR_STORE_BACKEND=milvus` and `MILVUS_URI=./.milvus_code_embeddings.db`
48
- before indexing. To keep the vectors in a SQLite file beside the embedded graph
49
- (`~/.cgr/vectors.sqlite`, no server), install `code-graph-rag[semantic,sqlite-vec]`
50
- and set `CGR_VECTOR_STORE_BACKEND=sqlite`.
50
+ before indexing.
51
51
 
52
52
  To compute embeddings on an OpenAI-compatible endpoint (OpenAI, Ollama, vLLM)
53
53
  instead of locally, set `CGR_EMBEDDING_PROVIDER=openai` with
@@ -61,8 +61,11 @@ 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
- - **Security**: Linked dependency advisories in the security notice to the global database.
65
- - **Build**: Enabled building the gotypes helper on Go 1.27.2 with x/mod v0.42.0.
64
+ - **Security Enhancements**: Incorporates an OSS Scanner build image and threat model.
65
+ - **Data Export**: Ensures all node properties within the graph are exported.
66
+ - **SQL Fixes**: Addresses several SQL-related issues including grammar errors and dead-code roots.
67
+ - **Rust Fixes**: Improves indexing of methods and handling of types in Rust code.
68
+ - **Build Fixes**: Repairs build issues related to eMudhra root certificates and distrusted components.
66
69
  <!-- /SECTION:latest_news -->
67
70
 
68
71
  See [NEWS.md](NEWS.md) for the full history.
@@ -189,6 +192,7 @@ Code-Graph-RAG runs as an [MCP](https://modelcontextprotocol.io) server so Claud
189
192
  - [Real-Time Updates](docs/guide/realtime-updates.md)
190
193
  - [C/C++ Semantic Mode](docs/guide/cpp-semantic-mode.md)
191
194
  - [MCP Server](docs/guide/mcp-server.md)
195
+ - [Porting Between Languages](docs/guide/porting.md)
192
196
 
193
197
  **Architecture**
194
198
  - [Overview](docs/architecture/overview.md)
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: code-graph-rag
3
- Version: 0.2.24
3
+ Version: 0.3.13
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
@@ -38,6 +38,7 @@ Requires-Dist: defusedxml>=0.7.1
38
38
  Requires-Dist: huggingface-hub[hf-xet]>=1.7.2
39
39
  Requires-Dist: pathspec>=1.0.4
40
40
  Requires-Dist: pygments>=2.20.0
41
+ Requires-Dist: certifi>=2026.10.23
41
42
  Requires-Dist: regex>=2024.11.6
42
43
  Requires-Dist: cgr-graph-rs<0.2,>=0.1.0; platform_python_implementation == "CPython" and ((sys_platform == "linux" and (platform_machine == "x86_64" or platform_machine == "aarch64")) or sys_platform == "darwin" or (sys_platform == "win32" and platform_machine == "AMD64"))
43
44
  Provides-Extra: test
@@ -78,10 +79,13 @@ Requires-Dist: tree-sitter-sql>=0.3.11; extra == "treesitter-full"
78
79
  Requires-Dist: tree-sitter-markdown>=0.5.1; extra == "treesitter-full"
79
80
  Provides-Extra: semantic
80
81
  Requires-Dist: qdrant-client>=1.9.0; extra == "semantic"
82
+ Requires-Dist: grpcio>=1.84.1; extra == "semantic"
83
+ Requires-Dist: sqlite-vec>=0.1.9; ((sys_platform == "linux" and (platform_machine == "x86_64" or platform_machine == "aarch64")) or sys_platform == "darwin" or (sys_platform == "win32" and platform_machine == "AMD64")) and extra == "semantic"
81
84
  Requires-Dist: torch>=2.6.0; extra == "semantic"
82
85
  Requires-Dist: transformers>=5.0.0; extra == "semantic"
83
86
  Provides-Extra: milvus
84
87
  Requires-Dist: pymilvus[milvus-lite]>=3.0.0; extra == "milvus"
88
+ Requires-Dist: grpcio>=1.84.1; extra == "milvus"
85
89
  Provides-Extra: sqlite-vec
86
90
  Requires-Dist: sqlite-vec>=0.1.9; extra == "sqlite-vec"
87
91
  Provides-Extra: ast-grep
@@ -135,12 +139,12 @@ With semantic code search (UniXcoder embeddings):
135
139
  pip install 'code-graph-rag[semantic]'
136
140
  ```
137
141
 
138
- Qdrant is the default vector store for semantic search. To use Milvus Lite,
139
- install `code-graph-rag[semantic,milvus]`, then set
142
+ The vectors go to a SQLite file beside the embedded graph
143
+ (`~/.cgr/vectors.sqlite`), so semantic search needs no server and no Docker
144
+ either. To use Qdrant instead, set `CGR_VECTOR_STORE_BACKEND=qdrant`. To use
145
+ Milvus Lite, install `code-graph-rag[semantic,milvus]`, then set
140
146
  `CGR_VECTOR_STORE_BACKEND=milvus` and `MILVUS_URI=./.milvus_code_embeddings.db`
141
- before indexing. To keep the vectors in a SQLite file beside the embedded graph
142
- (`~/.cgr/vectors.sqlite`, no server), install `code-graph-rag[semantic,sqlite-vec]`
143
- and set `CGR_VECTOR_STORE_BACKEND=sqlite`.
147
+ before indexing.
144
148
 
145
149
  To compute embeddings on an OpenAI-compatible endpoint (OpenAI, Ollama, vLLM)
146
150
  instead of locally, set `CGR_EMBEDDING_PROVIDER=openai` with
@@ -52,6 +52,8 @@ codebase_rag/models.py
52
52
  codebase_rag/parser_fingerprint.py
53
53
  codebase_rag/parser_loader.py
54
54
  codebase_rag/path_filters.py
55
+ codebase_rag/port_cli.py
56
+ codebase_rag/port_parity.py
55
57
  codebase_rag/project_selection.py
56
58
  codebase_rag/prompts.py
57
59
  codebase_rag/readme_sections.py
@@ -148,6 +150,7 @@ codebase_rag/constants/lang_tooling.py
148
150
  codebase_rag/constants/languages.py
149
151
  codebase_rag/constants/mcp.py
150
152
  codebase_rag/constants/notebook.py
153
+ codebase_rag/constants/port.py
151
154
  codebase_rag/constants/providers.py
152
155
  codebase_rag/constants/security.py
153
156
  codebase_rag/constants/sqlite_vectors.py
@@ -223,6 +226,8 @@ codebase_rag/parsers/positional_params.py
223
226
  codebase_rag/parsers/python_source_roots.py
224
227
  codebase_rag/parsers/rpc_exposure.py
225
228
  codebase_rag/parsers/semantic_call_join.py
229
+ codebase_rag/parsers/sql_ddl.py
230
+ codebase_rag/parsers/sql_recovery.py
226
231
  codebase_rag/parsers/stdlib_extractor.py
227
232
  codebase_rag/parsers/string_call.py
228
233
  codebase_rag/parsers/structure_processor.py
@@ -18,6 +18,7 @@ defusedxml>=0.7.1
18
18
  huggingface-hub[hf-xet]>=1.7.2
19
19
  pathspec>=1.0.4
20
20
  pygments>=2.20.0
21
+ certifi>=2026.10.23
21
22
  regex>=2024.11.6
22
23
 
23
24
  [:platform_python_implementation == "CPython" and ((sys_platform == "linux" and (platform_machine == "x86_64" or platform_machine == "aarch64")) or sys_platform == "darwin" or (sys_platform == "win32" and platform_machine == "AMD64"))]
@@ -35,6 +36,7 @@ pymgclient>=1.6.0
35
36
 
36
37
  [milvus]
37
38
  pymilvus[milvus-lite]>=3.0.0
39
+ grpcio>=1.84.1
38
40
 
39
41
  [neo4j]
40
42
  neo4j>=5.28.1
@@ -44,9 +46,13 @@ jedi>=0.19
44
46
 
45
47
  [semantic]
46
48
  qdrant-client>=1.9.0
49
+ grpcio>=1.84.1
47
50
  torch>=2.6.0
48
51
  transformers>=5.0.0
49
52
 
53
+ [semantic:(sys_platform == "linux" and (platform_machine == "x86_64" or platform_machine == "aarch64")) or sys_platform == "darwin" or (sys_platform == "win32" and platform_machine == "AMD64")]
54
+ sqlite-vec>=0.1.9
55
+
50
56
  [sqlite-vec]
51
57
  sqlite-vec>=0.1.9
52
58
 
@@ -59,6 +59,7 @@ from .editor_links import (
59
59
  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
+ from .port_cli import cli as port_cli
62
63
  from .project_selection import ProjectChoice, choose_project, scope_refusal
63
64
  from .services.gloss_cleanup import prune_orphaned_glosses
64
65
  from .services.graph_diff import DiffError, diff_indexes, diff_is_empty
@@ -72,7 +73,7 @@ from .services.provenance import (
72
73
  )
73
74
  from .stack import StackManager
74
75
  from .stack.cli import cli as daemon_cli
75
- from .stack.constants import SERVICE_QDRANT, StackState
76
+ from .stack.constants import SERVICE_MEMGRAPH, SERVICE_QDRANT, StackState
76
77
  from .stack.manager import StackError
77
78
  from .sync_guard import RUNNING_SYNC_TOKENS as _RUNNING_SYNC_TOKENS
78
79
  from .sync_guard import OwnerCheck as _OwnerCheck
@@ -775,15 +776,25 @@ def _resolve_active_projects(projects: str | None, default_project: str) -> list
775
776
  return [default_project]
776
777
 
777
778
 
778
- def _maybe_start_stack() -> None:
779
+ def _maybe_start_stack(skip_embeddings: bool = False) -> None:
779
780
  # The Docker stack serves Memgraph, and Qdrant when the vector settings
780
781
  # pick the bundled one. The embedded graph is a file and Neo4j is the
781
782
  # user's own server, so for them the stack runs only for the vectors:
782
783
  # only its Qdrant is started and checked, since every Memgraph check
783
- # needs a driver those installs need not have.
784
+ # needs a driver those installs need not have. A run that writes no
785
+ # embeddings, or writes them to another backend, needs no Qdrant, so it
786
+ # never starts one: for the embedded graph that means no Docker at all.
787
+ wants_vectors = not (skip_embeddings or settings.SKIP_EMBEDDINGS)
784
788
  if settings.GRAPH_BACKEND == DIALECT_MEMGRAPH:
785
- mgr = StackManager()
789
+ mgr = (
790
+ StackManager()
791
+ if wants_vectors
792
+ and settings.VECTOR_STORE_BACKEND == cs.VectorStoreBackend.QDRANT
793
+ else StackManager(services=(SERVICE_MEMGRAPH,))
794
+ )
786
795
  else:
796
+ if not wants_vectors:
797
+ return
787
798
  mgr = StackManager(services=(SERVICE_QDRANT,))
788
799
  if not mgr.serves_vectors():
789
800
  return
@@ -1479,7 +1490,7 @@ def start(
1479
1490
  _refuse_empty_workspace(workspace_config, update_graph, active_projects)
1480
1491
 
1481
1492
  if not no_start_stack:
1482
- _maybe_start_stack()
1493
+ _maybe_start_stack(skip_embeddings=no_embeddings)
1483
1494
 
1484
1495
  effective_batch_size = settings.resolve_batch_size(batch_size)
1485
1496
 
@@ -2166,6 +2177,18 @@ def graph_command(ctx: typer.Context) -> None:
2166
2177
  _run_delegated_group(graph_cli, ctx)
2167
2178
 
2168
2179
 
2180
+ @app.command(
2181
+ name=ch.CLICommandName.PORT,
2182
+ help=ch.CMD_PORT,
2183
+ short_help=ch.CMD_PORT,
2184
+ add_help_option=False,
2185
+ context_settings=_DELEGATED_GROUP_CONTEXT,
2186
+ rich_help_panel=ch.PANEL_USE,
2187
+ )
2188
+ def port_command(ctx: typer.Context) -> None:
2189
+ _run_delegated_group(port_cli, ctx)
2190
+
2191
+
2169
2192
  @app.command(
2170
2193
  name=ch.CLICommandName.CHECK,
2171
2194
  help=ch.CMD_CHECK,
@@ -23,6 +23,7 @@ class CLICommandName(StrEnum):
23
23
  CHECK = "check"
24
24
  RENAME = "rename"
25
25
  CONTEXT = "context"
26
+ PORT = "port"
26
27
  STOP = "stop"
27
28
  STATUS = "status"
28
29
  HELP = "help"
@@ -206,6 +207,43 @@ EXAMPLES_CONTEXT = (
206
207
  )
207
208
  HELP_CONTEXT_TARGET = "Qualified name, bare name, path:line, or a free-text task."
208
209
  HELP_CONTEXT_BUDGET = "Token budget for the slice."
210
+ CMD_PORT = "Judge a port between languages: pair the functions of two implementations and compare their calls and arity, as JSON, no LLM."
211
+ CMD_PORT_GROUP = CMD_PORT
212
+ CMD_PORT_CHECK = (
213
+ "Pair the functions and methods under OLD_SCOPE with those under "
214
+ "NEW_SCOPE (paths relative to the repository root) and judge each pair "
215
+ "MATCH, DIFFERS or UNKNOWN on the first-party calls it makes and its "
216
+ "positional arity; unpaired and ambiguous definitions are listed."
217
+ )
218
+ EPILOG_PORT = "Run 'cgr help port COMMAND' for command-specific help."
219
+ # `\b` opens a paragraph click prints as written instead of rewrapping it,
220
+ # which keeps one example per line.
221
+ EPILOG_PORT_CHECK = (
222
+ "\b\nExamples:\n cgr port check src/legacy src/rewrite\n"
223
+ " cgr port check codebase_rag/embedded_graph rust/cgr_graph_rs/src "
224
+ "--fail-on-found\n"
225
+ " cgr port check py rs --pair py.lexer._lex=rs.lexer.tokenize\n\n"
226
+ "Exit status: 0 with the JSON report; 1 with --fail-on-found when a pair "
227
+ "DIFFERS; 2 when the scopes overlap or a --pair is malformed or repeated; "
228
+ "3 when a project is not indexed; 4 when a scope holds no function or "
229
+ "method, or a --pair names none or several."
230
+ )
231
+ HELP_PORT_NEW_PROJECT = (
232
+ "Project holding NEW_SCOPE, when the new implementation was indexed as a "
233
+ "project of its own (default: the project of OLD_SCOPE)."
234
+ )
235
+ HELP_PORT_PAIR = (
236
+ "Pair two definitions explicitly, OLD=NEW, each a qualified name or a "
237
+ "dotted suffix naming exactly one definition of its side. Repeatable."
238
+ )
239
+ HELP_PORT_INCLUDE_TESTS = (
240
+ "Pair test functions too; by default they are left out, classified as "
241
+ "tests-reaching classifies them."
242
+ )
243
+ HELP_PORT_FAIL_ON_FOUND = (
244
+ "Exit with status 1 when any pair DIFFERS. UNKNOWN pairs and unpaired "
245
+ "definitions do not fail the check."
246
+ )
209
247
  CMD_TRACE_INGEST = "Resolve a trace file against a project and write dynamic edges"
210
248
  CMD_TRACE_CONVERT = "Convert a V8 .cpuprofile (node --cpu-prof) to a trace file"
211
249
 
@@ -678,6 +716,7 @@ CLI_COMMANDS: dict[CLICommandName, str] = {
678
716
  CLICommandName.CHECK: CMD_CHECK,
679
717
  CLICommandName.RENAME: CMD_RENAME,
680
718
  CLICommandName.CONTEXT: CMD_CONTEXT,
719
+ CLICommandName.PORT: CMD_PORT,
681
720
  CLICommandName.WORKSPACE: CMD_WORKSPACE,
682
721
  CLICommandName.STOP: CMD_STOP,
683
722
  CLICommandName.STATUS: CMD_STATUS,
@@ -452,8 +452,11 @@ class AppConfig(BaseSettings):
452
452
  QDRANT_UPSERT_RETRIES: int = Field(default=3, gt=0)
453
453
  QDRANT_RETRY_BASE_DELAY: float = Field(default=0.5, gt=0)
454
454
  QDRANT_BATCH_SIZE: int = Field(default=50, gt=0)
455
+ # The `sqlite` store is the default for the reason the embedded graph is:
456
+ # a file under CGR_HOME needs no server and no Docker. Qdrant and Milvus
457
+ # stay one setting away.
455
458
  VECTOR_STORE_BACKEND: cs.VectorStoreBackend = Field(
456
- cs.VectorStoreBackend.QDRANT, validation_alias="CGR_VECTOR_STORE_BACKEND"
459
+ cs.VectorStoreBackend.SQLITE, validation_alias="CGR_VECTOR_STORE_BACKEND"
457
460
  )
458
461
  MILVUS_URI: str = "./.milvus_code_embeddings.db"
459
462
  MILVUS_TOKEN: str | None = None
@@ -469,6 +472,18 @@ class AppConfig(BaseSettings):
469
472
  SQLITE_VECTOR_DIM: int = 768
470
473
  SQLITE_VECTOR_TOP_K: int = 5
471
474
 
475
+ @property
476
+ def qdrant_set_without_backend(self) -> bool:
477
+ """Whether Qdrant is configured but the vector store was left to default.
478
+
479
+ Qdrant was the default vector store before the `sqlite` one replaced
480
+ it, so this is how an install upgraded in place looks: its embeddings
481
+ live in Qdrant while cgr now opens an empty file.
482
+ """
483
+ return cs.SETTING_VECTOR_STORE_BACKEND not in self.model_fields_set and any(
484
+ name in self.model_fields_set for name in cs.QDRANT_CONNECTION_SETTINGS
485
+ )
486
+
472
487
  @property
473
488
  def vector_db_file(self) -> Path:
474
489
  if self.SQLITE_VECTOR_PATH is not None:
@@ -30,6 +30,7 @@ from .lang_tooling import * # noqa: F403
30
30
  from .languages import * # noqa: F403
31
31
  from .mcp import * # noqa: F403
32
32
  from .notebook import * # noqa: F403
33
+ from .port import * # noqa: F403
33
34
  from .providers import * # noqa: F403
34
35
  from .security import * # noqa: F403
35
36
  from .sqlite_vectors import * # noqa: F403
@@ -113,6 +113,14 @@ TS_RS_LOOP_EXPRESSION = "loop_expression"
113
113
  # A Rust call node whose callee is descended for chain flattening: a plain call
114
114
  # or a turbofish generic_function (`f::<T>()`).
115
115
  RS_CALL_OR_GENERIC_FN = (TS_RS_CALL_EXPRESSION, TS_GENERIC_FUNCTION)
116
+ TS_RS_GENERIC_TYPE_WITH_TURBOFISH = "generic_type_with_turbofish"
117
+ # A constructor path with type arguments: `Tree::<u8>::Leaf`'s qualifier,
118
+ # `Wrapper::<u8> { .. }`'s name, `Pair::<u8>(..)`'s callee.
119
+ RS_GENERIC_CONSTRUCTOR_PATHS = (
120
+ TS_GENERIC_TYPE,
121
+ TS_RS_GENERIC_TYPE_WITH_TURBOFISH,
122
+ TS_GENERIC_FUNCTION,
123
+ )
116
124
  TS_RS_TUPLE_STRUCT_PATTERN = "tuple_struct_pattern"
117
125
  TS_RS_TYPE_ARGUMENTS = "type_arguments"
118
126
  TS_RS_TRY_EXPRESSION = "try_expression"
@@ -262,6 +262,9 @@ PRUNE_PENDING_FILENAME = ".cgr-prune-pending"
262
262
  # PR #3358). Not in CGR_STATE_FILENAMES: no cgr ever wrote one into the tree,
263
263
  # so there is nothing to move out of it.
264
264
  EMBEDDINGS_PENDING_PROJECT_TEMPLATE = ".cgr-embeddings-pending-{digest}"
265
+ # The vector store backend a project's points were last settled in, one file
266
+ # per project for the same reason; likewise never written into the tree.
267
+ EMBEDDINGS_STORE_PROJECT_TEMPLATE = ".cgr-embeddings-store-{digest}"
265
268
  # The marker an earlier build shared between every project of a checkout: a
266
269
  # JSON list of the projects owing a pass, or an empty file. Read so that each
267
270
  # still retries once, then split into the per-project files above.
@@ -401,7 +401,7 @@ LANGUAGE_METADATA: dict[SupportedLanguage, LanguageMetadata] = {
401
401
  ),
402
402
  SupportedLanguage.SQL: LanguageMetadata(
403
403
  LanguageStatus.DEV,
404
- "Stored functions (CREATE FUNCTION), schema-qualified names, invocations between routines. CREATE PROCEDURE and in-depth PL/pgSQL bodies await upstream grammar support: the published grammar parses plain SQL statements only",
404
+ "Stored functions (CREATE FUNCTION), each one a dead-code root, schema-qualified names, invocations between routines, and the DDL that runs a routine by name (trigger EXECUTE FUNCTION, aggregate SFUNC/FINALFUNC, cast WITH FUNCTION, operator FUNCTION, type INPUT/OUTPUT, HANDLER/VALIDATOR, SUPPORT). CREATE PROCEDURE and in-depth PL/pgSQL bodies await upstream grammar support: the published grammar parses plain SQL statements only",
405
405
  "SQL (PostgreSQL)",
406
406
  ),
407
407
  SupportedLanguage.JULIA: LanguageMetadata(
@@ -246,6 +246,12 @@ MCP_ROOT_NOT_INDEXED = (
246
246
  "No project is indexed for this server's root {path}; run "
247
247
  "index_repository or update_repository first, or pass `project`."
248
248
  )
249
+ # flow_verdict, explain_traceback and rank_root_causes take no `project`, so
250
+ # their refusal cannot advise passing one (issue #3193).
251
+ MCP_FIXED_ROOT_NOT_INDEXED = (
252
+ "No project is indexed for this server's root {path}; run "
253
+ "index_repository or update_repository first."
254
+ )
249
255
  # An empty answer for a name the graph does not hold read as "nothing calls
250
256
  # it" / "no test reaches it" (issue #2461).
251
257
  MCP_UNKNOWN_TARGET = "{qualified_name!r} is not in the graph."
@@ -0,0 +1,88 @@
1
+ # Cross-language parity (`cgr port check`, epic #3413): how two
2
+ # implementations of the same code are paired and judged.
3
+
4
+ from enum import StrEnum
5
+
6
+ from .graph import EdgeResolution, NodeLabel
7
+
8
+
9
+ class ParityVerdict(StrEnum):
10
+ """A dimension's or a pair's verdict. `UNKNOWN` is what the graph cannot
11
+ settle (an edge it only guessed, a signature it did not record), and is
12
+ never reported as `MATCH`."""
13
+
14
+ MATCH = "MATCH"
15
+ DIFFERS = "DIFFERS"
16
+ UNKNOWN = "UNKNOWN"
17
+
18
+
19
+ # A pair's verdict is the worst of its dimensions'.
20
+ PARITY_VERDICT_RANK: dict[ParityVerdict, int] = {
21
+ ParityVerdict.MATCH: 0,
22
+ ParityVerdict.UNKNOWN: 1,
23
+ ParityVerdict.DIFFERS: 2,
24
+ }
25
+
26
+
27
+ class PairedBy(StrEnum):
28
+ """How a pair was found, strongest first: a `--pair` the user gave; the
29
+ same normalised name at the same module path relative to each scope (and
30
+ in the same class, for a method); the same name in the same container
31
+ (the class, or the module file's stem) when the layouts differ; or the
32
+ same name alone with the containers differing, which is the pairing to
33
+ verify."""
34
+
35
+ EXPLICIT = "explicit"
36
+ MODULE = "module"
37
+ CONTAINER = "container"
38
+ NAME = "name"
39
+
40
+
41
+ # The automatic tiers, tried in this order on what the previous one left.
42
+ PORT_PAIRING_TIERS = (PairedBy.MODULE, PairedBy.CONTAINER, PairedBy.NAME)
43
+
44
+
45
+ PORT_CALLABLE_LABELS = frozenset({NodeLabel.FUNCTION.value, NodeLabel.METHOD.value})
46
+
47
+ # Edges the resolver only guessed: a difference resting on them alone is
48
+ # UNKNOWN, since the other side may simply have bound the same call exactly.
49
+ PORT_UNCERTAIN_RESOLUTIONS = frozenset(
50
+ {EdgeResolution.HEURISTIC.value, EdgeResolution.OVERLOAD.value}
51
+ )
52
+
53
+ # Folded before names are compared, so `_read_number`, `readNumber` and
54
+ # `ReadNumber` agree. The boundary pattern splits camelCase and the end of an
55
+ # acronym (`HTTPServer` -> `HTTP_Server`).
56
+ PORT_NAME_STRIP_CHARS = "_"
57
+ PORT_CAMEL_BOUNDARY_PATTERN = r"(?<=[a-z0-9])(?=[A-Z])|(?<=[A-Z])(?=[A-Z][a-z])"
58
+ PORT_NAME_JOIN = "_"
59
+
60
+ # File stems that name a package rather than its contents (`__init__.py`,
61
+ # Rust `mod.rs` and `lib.rs`, `index.ts`): a function's container is then the
62
+ # directory holding the file.
63
+ PORT_PACKAGE_ENTRY_STEMS = frozenset({"__init__", "mod", "lib", "main", "index"})
64
+
65
+ PORT_PAIR_SEPARATOR = "="
66
+ PORT_SCOPE_ROOTS = frozenset({"", "."})
67
+
68
+ # Overlapping scopes and a malformed or repeated `--pair` are usage errors,
69
+ # reported under click's own status for one; a scope or pair naming nothing
70
+ # in the graph exits with GRAPH_EXIT_UNKNOWN_TARGET like `cgr graph`.
71
+ PORT_EXIT_USAGE = 2
72
+ PORT_EXIT_DIFFERS = 1
73
+
74
+ PORT_ERR_EMPTY_SCOPE = (
75
+ "No function or method of project '{project}' lies under '{scope}'. "
76
+ "A scope is a path relative to the repository root, as `cgr graph "
77
+ "definition` prints it."
78
+ )
79
+ PORT_ERR_OVERLAPPING_SCOPES = (
80
+ "The scopes '{old}' and '{new}' overlap in project '{project}': each "
81
+ "definition must belong to one side."
82
+ )
83
+ PORT_ERR_PAIR_FORMAT = "--pair takes OLD=NEW, got '{value}'."
84
+ PORT_ERR_PAIR_TARGET = (
85
+ "--pair: '{target}' names {count} definitions under '{scope}'; give a "
86
+ "qualified name, or a dotted suffix of one, that names exactly one."
87
+ )
88
+ PORT_ERR_PAIR_TWICE = "--pair: '{qualified_name}' is paired more than once."
@@ -191,6 +191,13 @@ QDRANT_DEFAULT_DB_PATH = "./.qdrant_code_embeddings"
191
191
  # The settings field that holds it. Whether it was supplied is read from the
192
192
  # fields the settings sources set, since a supplied value can equal the default.
193
193
  SETTING_QDRANT_DB_PATH = "QDRANT_DB_PATH"
194
+ # Settings whose presence, with VECTOR_STORE_BACKEND left unset, marks an
195
+ # install that stored its embeddings in Qdrant when Qdrant was the default.
196
+ SETTING_VECTOR_STORE_BACKEND = "VECTOR_STORE_BACKEND"
197
+ QDRANT_CONNECTION_SETTINGS = ("QDRANT_URL", SETTING_QDRANT_DB_PATH, "QDRANT_API_KEY")
198
+ # The backend a project synced before cgr stamped its vector store was embedded
199
+ # into: the default then.
200
+ EMBEDDINGS_STORE_UNSTAMPED = VectorStoreBackend.QDRANT
194
201
 
195
202
  SEMANTIC_DEPENDENCIES = (
196
203
  MODULE_PYMILVUS,
@@ -471,25 +471,39 @@ def _chain_links(
471
471
  if parser is None:
472
472
  return []
473
473
  root = parser.parse(source).root_node
474
+ # Each link's own site starts at its name (issue #3166); the links of
475
+ # its chain are the calls that start where the site's call starts.
476
+ starts = {call.start_point for call in calls_starting_at(root, line - 1, col)}
477
+ starts = starts or {(line - 1, col)}
474
478
  found: list[tuple[int, int]] = []
475
479
  stack: list[Node] = [root]
476
480
  while stack:
477
481
  node = stack.pop()
478
- if node.start_point == (line - 1, col):
479
- func = node.child_by_field_name(cs.FIELD_FUNCTION)
480
- member = func.children[-1] if func is not None and func.children else None
481
- if (
482
- member is not None
483
- and member.type in _MEMBER_NAME_TYPES
484
- and member.text is not None
485
- and member.text.decode(cs.ENCODING_UTF8, errors="replace") == name
486
- ):
487
- found.append((member.start_point[0] + 1, member.start_point[1]))
488
- if node.start_point[0] <= line - 1 <= node.end_point[0]:
482
+ if (
483
+ node.start_point in starts
484
+ and (member := _called_member(node, name)) is not None
485
+ ):
486
+ found.append((member.start_point[0] + 1, member.start_point[1]))
487
+ if any(node.start_point[0] <= row <= node.end_point[0] for row, _ in starts):
489
488
  stack.extend(node.children)
490
489
  return sorted(found)
491
490
 
492
491
 
492
+ def _called_member(call: Node, name: str) -> Node | None:
493
+ # The member name a call invokes (`name` in `obj.name(...)`), if it is
494
+ # `name`; None for a bare call or another member.
495
+ func = call.child_by_field_name(cs.FIELD_FUNCTION)
496
+ member = func.children[-1] if func is not None and func.children else None
497
+ if (
498
+ member is not None
499
+ and member.type in _MEMBER_NAME_TYPES
500
+ and member.text is not None
501
+ and member.text.decode(cs.ENCODING_UTF8, errors="replace") == name
502
+ ):
503
+ return member
504
+ return None
505
+
506
+
493
507
  def _jsx_closing_token(
494
508
  source: bytes,
495
509
  language: cs.SupportedLanguage | None,
@@ -614,8 +628,10 @@ def _last_identifier(
614
628
  # (a grammar whose call node has no `function` field, such as Java's
615
629
  # method_invocation) keeps the fallback.
616
630
  return _STALE_CALL
617
- if callee is not None and callee[0] == start:
618
- start, end = callee
631
+ if callee is not None and callee[0] <= start < callee[1]:
632
+ # The callee ends the token search, whether the site starts with it
633
+ # or at its member name (issue #3166): never inside the arguments.
634
+ end = callee[1]
619
635
  text = source[start:end].decode(cs.ENCODING_UTF8, errors="replace")
620
636
  if callee is None:
621
637
  # No grammar: cut at the last opening parenthesis so the arguments
@@ -17,6 +17,7 @@ from .. import constants as cs
17
17
  from .. import cypher_queries as cq
18
18
  from .. import graph_query
19
19
  from ..graph_query import QueryFn
20
+ from ..parsers.utils import call_site_start
20
21
 
21
22
  # Resolutions that bound a site by guesswork: an operation rewrites through
22
23
  # them only when the caller accepts the risk with `allow_heuristic`.
@@ -123,13 +124,14 @@ def call_node_at(
123
124
 
124
125
 
125
126
  def calls_starting_at(root: Node, row: int, col: int) -> list[Node]:
127
+ # A member call's site starts at its name (issue #3166); a graph indexed
128
+ # before that recorded the call node's own start, so both name the call.
126
129
  calls: list[Node] = []
127
130
  stack: list[Node] = [root]
128
131
  while stack:
129
132
  node = stack.pop()
130
- if (
131
- node.start_point == (row, col)
132
- and node.child_by_field_name(cs.FIELD_FUNCTION) is not None
133
+ if node.child_by_field_name(cs.FIELD_FUNCTION) is not None and (
134
+ node.start_point == (row, col) or call_site_start(node) == (row, col)
133
135
  ):
134
136
  calls.append(node)
135
137
  if node.start_point[0] <= row <= node.end_point[0]:
@@ -119,12 +119,14 @@ SQLITE_VECTOR_DIM_MISMATCH = (
119
119
  "or re-index with --clean to rebuild the store with the new size."
120
120
  )
121
121
  SQLITE_VEC_NOT_INSTALLED = (
122
- "CGR_VECTOR_STORE_BACKEND=sqlite needs sqlite-vec, which is not installed. "
123
- "Install it with `pip install 'code-graph-rag[sqlite-vec]'` (or "
124
- "`uv sync --extra sqlite-vec`)."
122
+ "The sqlite vector store (the default, CGR_VECTOR_STORE_BACKEND=sqlite) "
123
+ "needs sqlite-vec, which is not installed. Install it with "
124
+ "`pip install 'code-graph-rag[sqlite-vec]'` (or `uv sync --extra "
125
+ "sqlite-vec`); the `semantic` extra includes it."
125
126
  )
126
127
  SQLITE_VEC_EXTENSIONS_UNSUPPORTED = (
127
- "CGR_VECTOR_STORE_BACKEND=sqlite loads the sqlite-vec extension, but this "
128
+ "The sqlite vector store (the default, CGR_VECTOR_STORE_BACKEND=sqlite) "
129
+ "loads the sqlite-vec extension, but this "
128
130
  "Python's sqlite3 module was built without extension loading. Use a Python "
129
131
  "that has it (uv-managed Pythons do), or set CGR_VECTOR_STORE_BACKEND=qdrant."
130
132
  )