code-graph-rag 0.0.187__tar.gz → 0.0.245__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 (161) hide show
  1. {code_graph_rag-0.0.187/code_graph_rag.egg-info → code_graph_rag-0.0.245}/PKG-INFO +3 -2
  2. {code_graph_rag-0.0.187 → code_graph_rag-0.0.245}/PYPI_README.md +1 -1
  3. {code_graph_rag-0.0.187 → code_graph_rag-0.0.245}/README.md +24 -16
  4. {code_graph_rag-0.0.187 → code_graph_rag-0.0.245/code_graph_rag.egg-info}/PKG-INFO +3 -2
  5. {code_graph_rag-0.0.187 → code_graph_rag-0.0.245}/code_graph_rag.egg-info/SOURCES.txt +6 -0
  6. {code_graph_rag-0.0.187 → code_graph_rag-0.0.245}/code_graph_rag.egg-info/requires.txt +1 -0
  7. {code_graph_rag-0.0.187 → code_graph_rag-0.0.245}/codebase_rag/cli.py +24 -4
  8. {code_graph_rag-0.0.187 → code_graph_rag-0.0.245}/codebase_rag/cli_help.py +5 -0
  9. {code_graph_rag-0.0.187 → code_graph_rag-0.0.245}/codebase_rag/config.py +29 -3
  10. {code_graph_rag-0.0.187 → code_graph_rag-0.0.245}/codebase_rag/constants.py +456 -9
  11. {code_graph_rag-0.0.187 → code_graph_rag-0.0.245}/codebase_rag/cypher_queries.py +112 -12
  12. {code_graph_rag-0.0.187 → code_graph_rag-0.0.245}/codebase_rag/graph_updater.py +240 -11
  13. {code_graph_rag-0.0.187 → code_graph_rag-0.0.245}/codebase_rag/language_spec.py +27 -9
  14. {code_graph_rag-0.0.187 → code_graph_rag-0.0.245}/codebase_rag/logs.py +5 -0
  15. {code_graph_rag-0.0.187 → code_graph_rag-0.0.245}/codebase_rag/main.py +13 -9
  16. {code_graph_rag-0.0.187 → code_graph_rag-0.0.245}/codebase_rag/mcp/tools.py +2 -2
  17. {code_graph_rag-0.0.187 → code_graph_rag-0.0.245}/codebase_rag/parser_loader.py +16 -2
  18. code_graph_rag-0.0.245/codebase_rag/parsers/call_processor.py +3165 -0
  19. {code_graph_rag-0.0.187 → code_graph_rag-0.0.245}/codebase_rag/parsers/call_resolver.py +673 -18
  20. {code_graph_rag-0.0.187 → code_graph_rag-0.0.245}/codebase_rag/parsers/class_ingest/identity.py +12 -5
  21. {code_graph_rag-0.0.187 → code_graph_rag-0.0.245}/codebase_rag/parsers/class_ingest/mixin.py +209 -8
  22. {code_graph_rag-0.0.187 → code_graph_rag-0.0.245}/codebase_rag/parsers/class_ingest/relationships.py +18 -2
  23. code_graph_rag-0.0.245/codebase_rag/parsers/cpp/__init__.py +5 -0
  24. code_graph_rag-0.0.245/codebase_rag/parsers/cpp/type_inference.py +313 -0
  25. {code_graph_rag-0.0.187 → code_graph_rag-0.0.245}/codebase_rag/parsers/cpp/utils.py +51 -0
  26. {code_graph_rag-0.0.187 → code_graph_rag-0.0.245}/codebase_rag/parsers/cpp_frontend/frontend.py +20 -3
  27. {code_graph_rag-0.0.187 → code_graph_rag-0.0.245}/codebase_rag/parsers/definition_processor.py +35 -4
  28. code_graph_rag-0.0.245/codebase_rag/parsers/export_detection.py +160 -0
  29. {code_graph_rag-0.0.187 → code_graph_rag-0.0.245}/codebase_rag/parsers/factory.py +5 -0
  30. {code_graph_rag-0.0.187 → code_graph_rag-0.0.245}/codebase_rag/parsers/function_ingest.py +75 -6
  31. code_graph_rag-0.0.245/codebase_rag/parsers/go/__init__.py +16 -0
  32. code_graph_rag-0.0.245/codebase_rag/parsers/go/module_paths.py +65 -0
  33. code_graph_rag-0.0.245/codebase_rag/parsers/go/type_inference.py +198 -0
  34. code_graph_rag-0.0.245/codebase_rag/parsers/go/utils.py +63 -0
  35. {code_graph_rag-0.0.187 → code_graph_rag-0.0.245}/codebase_rag/parsers/handlers/registry.py +1 -0
  36. {code_graph_rag-0.0.187 → code_graph_rag-0.0.245}/codebase_rag/parsers/import_processor.py +305 -7
  37. {code_graph_rag-0.0.187 → code_graph_rag-0.0.245}/codebase_rag/parsers/java/method_resolver.py +33 -1
  38. {code_graph_rag-0.0.187 → code_graph_rag-0.0.245}/codebase_rag/parsers/java/type_inference.py +14 -10
  39. {code_graph_rag-0.0.187 → code_graph_rag-0.0.245}/codebase_rag/parsers/java/type_resolver.py +26 -1
  40. {code_graph_rag-0.0.187 → code_graph_rag-0.0.245}/codebase_rag/parsers/js_ts/ingest.py +28 -1
  41. {code_graph_rag-0.0.187 → code_graph_rag-0.0.245}/codebase_rag/parsers/js_ts/type_inference.py +4 -6
  42. {code_graph_rag-0.0.187 → code_graph_rag-0.0.245}/codebase_rag/parsers/py/ast_analyzer.py +5 -15
  43. {code_graph_rag-0.0.187 → code_graph_rag-0.0.245}/codebase_rag/parsers/py/expression_analyzer.py +20 -4
  44. code_graph_rag-0.0.245/codebase_rag/parsers/python_source_roots.py +150 -0
  45. code_graph_rag-0.0.245/codebase_rag/parsers/rs/__init__.py +3 -0
  46. code_graph_rag-0.0.245/codebase_rag/parsers/rs/type_inference.py +314 -0
  47. {code_graph_rag-0.0.187 → code_graph_rag-0.0.245}/codebase_rag/parsers/rs/utils.py +45 -0
  48. {code_graph_rag-0.0.187 → code_graph_rag-0.0.245}/codebase_rag/parsers/stdlib_extractor.py +5 -1
  49. code_graph_rag-0.0.245/codebase_rag/parsers/type_inference.py +410 -0
  50. code_graph_rag-0.0.245/codebase_rag/parsers/utils.py +706 -0
  51. {code_graph_rag-0.0.187 → code_graph_rag-0.0.245}/codebase_rag/prompts.py +62 -4
  52. {code_graph_rag-0.0.187 → code_graph_rag-0.0.245}/codebase_rag/services/llm.py +5 -5
  53. {code_graph_rag-0.0.187 → code_graph_rag-0.0.245}/codebase_rag/services/protobuf_service.py +1 -0
  54. {code_graph_rag-0.0.187 → code_graph_rag-0.0.245}/codebase_rag/tools/health_checker.py +1 -1
  55. code_graph_rag-0.0.245/codebase_rag/tools/semantic_search.py +162 -0
  56. {code_graph_rag-0.0.187 → code_graph_rag-0.0.245}/codebase_rag/types_defs.py +10 -1
  57. code_graph_rag-0.0.245/codebase_rag/utils/path_utils.py +125 -0
  58. code_graph_rag-0.0.245/codec/schema_pb2.py +75 -0
  59. {code_graph_rag-0.0.187 → code_graph_rag-0.0.245}/codec/schema_pb2.pyi +82 -98
  60. {code_graph_rag-0.0.187 → code_graph_rag-0.0.245}/pyproject.toml +2 -1
  61. code_graph_rag-0.0.187/codebase_rag/parsers/call_processor.py +0 -1487
  62. code_graph_rag-0.0.187/codebase_rag/parsers/go/__init__.py +0 -6
  63. code_graph_rag-0.0.187/codebase_rag/parsers/go/utils.py +0 -36
  64. code_graph_rag-0.0.187/codebase_rag/parsers/type_inference.py +0 -151
  65. code_graph_rag-0.0.187/codebase_rag/parsers/utils.py +0 -350
  66. code_graph_rag-0.0.187/codebase_rag/tools/semantic_search.py +0 -164
  67. code_graph_rag-0.0.187/codebase_rag/utils/__init__.py +0 -0
  68. code_graph_rag-0.0.187/codebase_rag/utils/path_utils.py +0 -87
  69. code_graph_rag-0.0.187/codec/__init__.py +0 -0
  70. code_graph_rag-0.0.187/codec/schema_pb2.py +0 -62
  71. {code_graph_rag-0.0.187 → code_graph_rag-0.0.245}/LICENSE +0 -0
  72. {code_graph_rag-0.0.187 → code_graph_rag-0.0.245}/cgr/__init__.py +0 -0
  73. {code_graph_rag-0.0.187 → code_graph_rag-0.0.245}/code_graph_rag.egg-info/dependency_links.txt +0 -0
  74. {code_graph_rag-0.0.187 → code_graph_rag-0.0.245}/code_graph_rag.egg-info/entry_points.txt +0 -0
  75. {code_graph_rag-0.0.187 → code_graph_rag-0.0.245}/code_graph_rag.egg-info/top_level.txt +0 -0
  76. {code_graph_rag-0.0.187 → code_graph_rag-0.0.245}/codebase_rag/__init__.py +0 -0
  77. {code_graph_rag-0.0.187 → code_graph_rag-0.0.245}/codebase_rag/cgr_state.py +0 -0
  78. {code_graph_rag-0.0.187 → code_graph_rag-0.0.245}/codebase_rag/decorators.py +0 -0
  79. {code_graph_rag-0.0.187 → code_graph_rag-0.0.245}/codebase_rag/docker-compose.yaml +0 -0
  80. {code_graph_rag-0.0.187 → code_graph_rag-0.0.245}/codebase_rag/embedder.py +0 -0
  81. {code_graph_rag-0.0.187 → code_graph_rag-0.0.245}/codebase_rag/exceptions.py +0 -0
  82. {code_graph_rag-0.0.187 → code_graph_rag-0.0.245}/codebase_rag/graph_loader.py +0 -0
  83. {code_graph_rag-0.0.187 → code_graph_rag-0.0.245}/codebase_rag/mcp/__init__.py +0 -0
  84. {code_graph_rag-0.0.187 → code_graph_rag-0.0.245}/codebase_rag/mcp/client.py +0 -0
  85. {code_graph_rag-0.0.187 → code_graph_rag-0.0.245}/codebase_rag/mcp/server.py +0 -0
  86. {code_graph_rag-0.0.187 → code_graph_rag-0.0.245}/codebase_rag/models.py +0 -0
  87. {code_graph_rag-0.0.187 → code_graph_rag-0.0.245}/codebase_rag/parsers/__init__.py +0 -0
  88. {code_graph_rag-0.0.187 → code_graph_rag-0.0.245}/codebase_rag/parsers/class_ingest/__init__.py +0 -0
  89. {code_graph_rag-0.0.187 → code_graph_rag-0.0.245}/codebase_rag/parsers/class_ingest/cpp_modules.py +0 -0
  90. {code_graph_rag-0.0.187 → code_graph_rag-0.0.245}/codebase_rag/parsers/class_ingest/method_override.py +0 -0
  91. {code_graph_rag-0.0.187 → code_graph_rag-0.0.245}/codebase_rag/parsers/class_ingest/node_type.py +0 -0
  92. {code_graph_rag-0.0.187 → code_graph_rag-0.0.245}/codebase_rag/parsers/class_ingest/parent_extraction.py +0 -0
  93. {code_graph_rag-0.0.187 → code_graph_rag-0.0.245}/codebase_rag/parsers/class_ingest/utils.py +0 -0
  94. {code_graph_rag-0.0.187 → code_graph_rag-0.0.245}/codebase_rag/parsers/cpp_frontend/__init__.py +0 -0
  95. {code_graph_rag-0.0.187 → code_graph_rag-0.0.245}/codebase_rag/parsers/cpp_frontend/constants.py +0 -0
  96. {code_graph_rag-0.0.187 → code_graph_rag-0.0.245}/codebase_rag/parsers/cpp_frontend/qn.py +0 -0
  97. {code_graph_rag-0.0.187 → code_graph_rag-0.0.245}/codebase_rag/parsers/dependency_parser.py +0 -0
  98. {code_graph_rag-0.0.187 → code_graph_rag-0.0.245}/codebase_rag/parsers/handlers/__init__.py +0 -0
  99. {code_graph_rag-0.0.187 → code_graph_rag-0.0.245}/codebase_rag/parsers/handlers/base.py +0 -0
  100. {code_graph_rag-0.0.187 → code_graph_rag-0.0.245}/codebase_rag/parsers/handlers/cpp.py +0 -0
  101. {code_graph_rag-0.0.187 → code_graph_rag-0.0.245}/codebase_rag/parsers/handlers/java.py +0 -0
  102. {code_graph_rag-0.0.187 → code_graph_rag-0.0.245}/codebase_rag/parsers/handlers/js_ts.py +0 -0
  103. {code_graph_rag-0.0.187 → code_graph_rag-0.0.245}/codebase_rag/parsers/handlers/lua.py +0 -0
  104. {code_graph_rag-0.0.187 → code_graph_rag-0.0.245}/codebase_rag/parsers/handlers/php.py +0 -0
  105. {code_graph_rag-0.0.187 → code_graph_rag-0.0.245}/codebase_rag/parsers/handlers/protocol.py +0 -0
  106. {code_graph_rag-0.0.187 → code_graph_rag-0.0.245}/codebase_rag/parsers/handlers/python.py +0 -0
  107. {code_graph_rag-0.0.187 → code_graph_rag-0.0.245}/codebase_rag/parsers/handlers/rust.py +0 -0
  108. {code_graph_rag-0.0.187 → code_graph_rag-0.0.245}/codebase_rag/parsers/java/__init__.py +0 -0
  109. {code_graph_rag-0.0.187 → code_graph_rag-0.0.245}/codebase_rag/parsers/java/utils.py +0 -0
  110. {code_graph_rag-0.0.187 → code_graph_rag-0.0.245}/codebase_rag/parsers/java/variable_analyzer.py +0 -0
  111. {code_graph_rag-0.0.187 → code_graph_rag-0.0.245}/codebase_rag/parsers/js_ts/__init__.py +0 -0
  112. {code_graph_rag-0.0.187 → code_graph_rag-0.0.245}/codebase_rag/parsers/js_ts/module_system.py +0 -0
  113. {code_graph_rag-0.0.187 → code_graph_rag-0.0.245}/codebase_rag/parsers/js_ts/utils.py +0 -0
  114. {code_graph_rag-0.0.187 → code_graph_rag-0.0.245}/codebase_rag/parsers/lua/__init__.py +0 -0
  115. {code_graph_rag-0.0.187 → code_graph_rag-0.0.245}/codebase_rag/parsers/lua/type_inference.py +0 -0
  116. {code_graph_rag-0.0.187 → code_graph_rag-0.0.245}/codebase_rag/parsers/lua/utils.py +0 -0
  117. {code_graph_rag-0.0.187 → code_graph_rag-0.0.245}/codebase_rag/parsers/py/__init__.py +0 -0
  118. {code_graph_rag-0.0.187 → code_graph_rag-0.0.245}/codebase_rag/parsers/py/type_inference.py +0 -0
  119. {code_graph_rag-0.0.187 → code_graph_rag-0.0.245}/codebase_rag/parsers/py/utils.py +0 -0
  120. {code_graph_rag-0.0.187 → code_graph_rag-0.0.245}/codebase_rag/parsers/py/variable_analyzer.py +0 -0
  121. {code_graph_rag-0.0.187 → code_graph_rag-0.0.245}/codebase_rag/parsers/structure_processor.py +0 -0
  122. {code_graph_rag-0.0.187/codebase_rag/parsers/cpp → code_graph_rag-0.0.245/codebase_rag/providers}/__init__.py +0 -0
  123. {code_graph_rag-0.0.187 → code_graph_rag-0.0.245}/codebase_rag/providers/base.py +0 -0
  124. {code_graph_rag-0.0.187 → code_graph_rag-0.0.245}/codebase_rag/providers/litellm.py +0 -0
  125. {code_graph_rag-0.0.187 → code_graph_rag-0.0.245}/codebase_rag/readme_sections.py +0 -0
  126. {code_graph_rag-0.0.187 → code_graph_rag-0.0.245}/codebase_rag/schema_builder.py +0 -0
  127. {code_graph_rag-0.0.187 → code_graph_rag-0.0.245}/codebase_rag/schemas.py +0 -0
  128. {code_graph_rag-0.0.187 → code_graph_rag-0.0.245}/codebase_rag/services/__init__.py +0 -0
  129. {code_graph_rag-0.0.187 → code_graph_rag-0.0.245}/codebase_rag/services/anthropic_token_counter.py +0 -0
  130. {code_graph_rag-0.0.187 → code_graph_rag-0.0.245}/codebase_rag/services/graph_service.py +0 -0
  131. {code_graph_rag-0.0.187 → code_graph_rag-0.0.245}/codebase_rag/stack/__init__.py +0 -0
  132. {code_graph_rag-0.0.187 → code_graph_rag-0.0.245}/codebase_rag/stack/cli.py +0 -0
  133. {code_graph_rag-0.0.187 → code_graph_rag-0.0.245}/codebase_rag/stack/constants.py +0 -0
  134. {code_graph_rag-0.0.187 → code_graph_rag-0.0.245}/codebase_rag/stack/health.py +0 -0
  135. {code_graph_rag-0.0.187 → code_graph_rag-0.0.245}/codebase_rag/stack/manager.py +0 -0
  136. {code_graph_rag-0.0.187 → code_graph_rag-0.0.245}/codebase_rag/tool_errors.py +0 -0
  137. {code_graph_rag-0.0.187/codebase_rag/parsers/rs → code_graph_rag-0.0.245/codebase_rag/tools}/__init__.py +0 -0
  138. {code_graph_rag-0.0.187 → code_graph_rag-0.0.245}/codebase_rag/tools/code_retrieval.py +0 -0
  139. {code_graph_rag-0.0.187 → code_graph_rag-0.0.245}/codebase_rag/tools/codebase_query.py +0 -0
  140. {code_graph_rag-0.0.187 → code_graph_rag-0.0.245}/codebase_rag/tools/directory_lister.py +0 -0
  141. {code_graph_rag-0.0.187 → code_graph_rag-0.0.245}/codebase_rag/tools/file_editor.py +0 -0
  142. {code_graph_rag-0.0.187 → code_graph_rag-0.0.245}/codebase_rag/tools/file_reader.py +0 -0
  143. {code_graph_rag-0.0.187 → code_graph_rag-0.0.245}/codebase_rag/tools/file_writer.py +0 -0
  144. {code_graph_rag-0.0.187 → code_graph_rag-0.0.245}/codebase_rag/tools/language.py +0 -0
  145. {code_graph_rag-0.0.187 → code_graph_rag-0.0.245}/codebase_rag/tools/shell_command.py +0 -0
  146. {code_graph_rag-0.0.187 → code_graph_rag-0.0.245}/codebase_rag/tools/tool_descriptions.py +0 -0
  147. {code_graph_rag-0.0.187 → code_graph_rag-0.0.245}/codebase_rag/unixcoder.py +0 -0
  148. {code_graph_rag-0.0.187/codebase_rag/providers → code_graph_rag-0.0.245/codebase_rag/utils}/__init__.py +0 -0
  149. {code_graph_rag-0.0.187 → code_graph_rag-0.0.245}/codebase_rag/utils/dependencies.py +0 -0
  150. {code_graph_rag-0.0.187 → code_graph_rag-0.0.245}/codebase_rag/utils/fqn_resolver.py +0 -0
  151. {code_graph_rag-0.0.187 → code_graph_rag-0.0.245}/codebase_rag/utils/rich_markdown.py +0 -0
  152. {code_graph_rag-0.0.187 → code_graph_rag-0.0.245}/codebase_rag/utils/source_extraction.py +0 -0
  153. {code_graph_rag-0.0.187 → code_graph_rag-0.0.245}/codebase_rag/utils/token_utils.py +0 -0
  154. {code_graph_rag-0.0.187 → code_graph_rag-0.0.245}/codebase_rag/vector_store.py +0 -0
  155. {code_graph_rag-0.0.187 → code_graph_rag-0.0.245}/codebase_rag/workspaces/__init__.py +0 -0
  156. {code_graph_rag-0.0.187 → code_graph_rag-0.0.245}/codebase_rag/workspaces/cli.py +0 -0
  157. {code_graph_rag-0.0.187 → code_graph_rag-0.0.245}/codebase_rag/workspaces/constants.py +0 -0
  158. {code_graph_rag-0.0.187 → code_graph_rag-0.0.245}/codebase_rag/workspaces/models.py +0 -0
  159. {code_graph_rag-0.0.187 → code_graph_rag-0.0.245}/codebase_rag/workspaces/storage.py +0 -0
  160. {code_graph_rag-0.0.187/codebase_rag/tools → code_graph_rag-0.0.245/codec}/__init__.py +0 -0
  161. {code_graph_rag-0.0.187 → code_graph_rag-0.0.245}/setup.cfg +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: code-graph-rag
3
- Version: 0.0.187
3
+ Version: 0.0.245
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: protobuf>=6.33.5
38
38
  Requires-Dist: defusedxml>=0.7.1
39
39
  Requires-Dist: huggingface-hub[hf-xet]>=1.7.2
40
40
  Requires-Dist: griffe<2,>=1.0
41
+ Requires-Dist: pathspec>=1.0.4
41
42
  Provides-Extra: test
42
43
  Requires-Dist: pytest>=8.4.1; extra == "test"
43
44
  Requires-Dist: pytest-asyncio>=1.0.0; extra == "test"
@@ -99,7 +100,7 @@ The package installs a `cgr` command.
99
100
  **Start Memgraph, parse a repo, and query it:**
100
101
 
101
102
  ```bash
102
- docker compose up -d # start Memgraph
103
+ cgr daemon up # start Memgraph + Qdrant
103
104
  cgr start --repo-path ./my-project \
104
105
  --update-graph --clean # parse & launch interactive chat
105
106
  ```
@@ -34,7 +34,7 @@ The package installs a `cgr` command.
34
34
  **Start Memgraph, parse a repo, and query it:**
35
35
 
36
36
  ```bash
37
- docker compose up -d # start Memgraph
37
+ cgr daemon up # start Memgraph + Qdrant
38
38
  cgr start --repo-path ./my-project \
39
39
  --update-graph --clean # parse & launch interactive chat
40
40
  ```
@@ -20,7 +20,7 @@
20
20
  <img src="https://img.shields.io/github/forks/vitali87/code-graph-rag?style=social" alt="GitHub forks" />
21
21
  </a>
22
22
  -->
23
- <!-- Codecov, SonarCloud, and OpenSSF Scorecard badges were fed by GitHub-side CI. They no longer update after the move to Codeberg. Restore once equivalent CI is in place on Codeberg (Woodpecker).
23
+ <!-- Codecov, SonarCloud, and OpenSSF Scorecard badges are fed by GitHub-side CI. Uncomment once that CI is confirmed to publish to these services again.
24
24
  <a href="https://codecov.io/gh/vitali87/code-graph-rag">
25
25
  <img src="https://codecov.io/gh/vitali87/code-graph-rag/graph/badge.svg" alt="Codecov" />
26
26
  </a>
@@ -39,7 +39,7 @@
39
39
  <a href="https://pepy.tech/projects/code-graph-rag">
40
40
  <img src="https://static.pepy.tech/personalized-badge/code-graph-rag?period=total&units=INTERNATIONAL_SYSTEM&left_color=BLACK&right_color=GREEN&left_text=downloads" alt="PyPI Downloads" />
41
41
  </a>
42
- <!-- OpenSSF Scorecard only tracks GitHub-hosted repos. Restore if the project is mirrored back to GitHub or scorecard.dev adds Codeberg support.
42
+ <!-- OpenSSF Scorecard only tracks GitHub-hosted repos. Uncomment once the Scorecard workflow is confirmed running on the authoritative GitHub repo.
43
43
  <a href="https://scorecard.dev/viewer/?uri=github.com/vitali87/code-graph-rag">
44
44
  <img src="https://api.scorecard.dev/projects/github.com/vitali87/code-graph-rag/badge" alt="OpenSSF Scorecard" />
45
45
  </a>
@@ -82,7 +82,8 @@ An accurate Retrieval-Augmented Generation (RAG) system that analyzes multi-lang
82
82
  | PHP | Fully Supported | .php | ✓ | ✓ | ✓ | - | Classes, interfaces, traits, enums, namespaces, PHP 8 attributes |
83
83
  | Python | Fully Supported | .py | ✓ | ✓ | ✓ | ✓ | Type inference, decorators, nested functions |
84
84
  | Rust | Fully Supported | .rs | ✓ | ✓ | ✓ | ✓ | impl blocks, associated functions |
85
- | TypeScript | Fully Supported | .ts, .tsx | ✓ | ✓ | ✓ | - | Interfaces, type aliases, enums, namespaces, ES6/CommonJS modules |
85
+ | TypeScript (TSX) | Fully Supported | .tsx | ✓ | ✓ | ✓ | - | All TypeScript features plus JSX elements and components |
86
+ | TypeScript | Fully Supported | .ts | ✓ | ✓ | ✓ | - | Interfaces, type aliases, enums, namespaces, ES6/CommonJS modules |
86
87
  | Go | In Development | .go | ✓ | ✓ | ✓ | - | Methods, type declarations |
87
88
  | Scala | In Development | .scala, .sc | ✓ | ✓ | ✓ | - | Case classes, objects |
88
89
  <!-- /SECTION:supported_languages -->
@@ -187,7 +188,7 @@ volumes (`memgraph_data`, `memgraph_log`, `qdrant_storage`).
187
188
  ### Local development install
188
189
 
189
190
  ```bash
190
- git clone https://codeberg.org/vitali87/code-graph-rag.git
191
+ git clone https://github.com/vitali87/code-graph-rag.git
191
192
  cd code-graph-rag
192
193
  ```
193
194
 
@@ -292,7 +293,7 @@ ollama pull llama3.2
292
293
 
293
294
  4. **Start Memgraph database**:
294
295
  ```bash
295
- docker compose up -d
296
+ cgr daemon up
296
297
  ```
297
298
 
298
299
  5. **Verify installation**:
@@ -331,6 +332,7 @@ Use the Makefile for common development tasks:
331
332
  | `make format` | Run ruff format |
332
333
  | `make typecheck` | Run type checking with ty |
333
334
  | `make check` | Run all checks: lint, typecheck, test |
335
+ | `make release` | Build, verify, and publish the current pyproject version to PyPI, then tag and create a GitHub Release |
334
336
  | `make pre-commit` | Run all pre-commit checks locally (comprehensive test before commit) |
335
337
  <!-- /SECTION:makefile_commands -->
336
338
 
@@ -674,6 +676,7 @@ The knowledge graph uses the following node types and relationships:
674
676
  | ModuleInterface | `{qualified_name: string, name: string, path: string, absolute_path: string}` |
675
677
  | ModuleImplementation | `{qualified_name: string, name: string, path: string, absolute_path: string, implements_module: string}` |
676
678
  | ExternalPackage | `{name: string, version_spec: string}` |
679
+ | ExternalModule | `{qualified_name: string, name: string, path: string}` |
677
680
  <!-- /SECTION:node_schemas -->
678
681
 
679
682
  ### Language-Specific Mappings
@@ -687,6 +690,7 @@ The knowledge graph uses the following node types and relationships:
687
690
  - **PHP**: `anonymous_function`, `arrow_function`, `class_declaration`, `enum_declaration`, `function_definition`, `interface_declaration`, `method_declaration`, `trait_declaration`
688
691
  - **Python**: `class_definition`, `function_definition`
689
692
  - **Rust**: `closure_expression`, `enum_item`, `function_item`, `function_signature_item`, `impl_item`, `struct_item`, `trait_item`, `type_item`, `union_item`
693
+ - **TypeScript (TSX)**: `abstract_class_declaration`, `arrow_function`, `class`, `class_declaration`, `enum_declaration`, `function_declaration`, `function_expression`, `function_signature`, `generator_function_declaration`, `interface_declaration`, `internal_module`, `method_definition`, `type_alias_declaration`
690
694
  - **TypeScript**: `abstract_class_declaration`, `arrow_function`, `class`, `class_declaration`, `enum_declaration`, `function_declaration`, `function_expression`, `function_signature`, `generator_function_declaration`, `interface_declaration`, `internal_module`, `method_definition`, `type_alias_declaration`
691
695
  - **Go**: `function_declaration`, `method_declaration`, `type_alias`, `type_spec`
692
696
  - **Scala**: `class_definition`, `function_declaration`, `function_definition`, `object_definition`, `trait_definition`
@@ -703,7 +707,7 @@ The knowledge graph uses the following node types and relationships:
703
707
  | Project, Package, Folder | CONTAINS_MODULE | Module |
704
708
  | Module | DEFINES | Class, Function |
705
709
  | Class | DEFINES_METHOD | Method |
706
- | Module | IMPORTS | Module |
710
+ | Module | IMPORTS | Module, ExternalModule |
707
711
  | Module | EXPORTS | Class, Function |
708
712
  | Module | EXPORTS_MODULE | ModuleInterface |
709
713
  | Module | IMPLEMENTS_MODULE | ModuleImplementation |
@@ -713,6 +717,8 @@ The knowledge graph uses the following node types and relationships:
713
717
  | ModuleImplementation | IMPLEMENTS | ModuleInterface |
714
718
  | Project | DEPENDS_ON_EXTERNAL | ExternalPackage |
715
719
  | Function, Method | CALLS | Function, Method |
720
+ | Module, Function, Method | REFERENCES | Function, Method, Class |
721
+ | Module, Function, Method | INSTANTIATES | Class |
716
722
  <!-- /SECTION:relationship_schemas -->
717
723
 
718
724
  ## 🔧 Configuration
@@ -754,27 +760,28 @@ Configuration is managed through environment variables in `.env` file:
754
760
 
755
761
  ### Custom Ignore Patterns
756
762
 
757
- You can specify additional directories to exclude by creating a `.cgrignore` file in your repository root:
763
+ You can specify additional files and directories to exclude by creating a `.cgrignore` file in your repository root. Patterns follow `.gitignore` conventions:
758
764
 
759
765
  ```
760
766
  # Comments start with #
761
767
  vendor
762
- .custom_cache
763
- my_build_output
768
+ *.gen.ts
769
+ docs/*.md
770
+ /generated
771
+ !bin/keep.py
764
772
  ```
765
773
 
766
- - One directory name per line
767
- - Lines starting with `#` are comments
768
- - Blank lines are ignored
769
- - Patterns are exact directory name matches (not globs)
770
- - Patterns from `.cgrignore` are merged with `--exclude` flags and auto-detected directories
774
+ - Gitignore syntax: `*` matches within a segment, `**` crosses segments, bare names match at any depth, slash-containing patterns are anchored to the root, trailing slash matches directories only
775
+ - Lines starting with `!` un-ignore paths that a default exclusion would skip (explicit excludes always win)
776
+ - Lines starting with `#` are comments; blank lines are ignored
777
+ - Patterns from `.cgrignore` are merged with `--exclude` flags (same syntax) and auto-detected directories
771
778
 
772
779
  ### Key Dependencies
773
780
 
774
781
  <!-- SECTION:dependencies -->
775
782
  - **loguru**: Python logging made (stupidly) simple
776
783
  - **mcp**: Model Context Protocol SDK
777
- - **pydantic-ai**: Agent Framework / shim to use Pydantic with LLMs
784
+ - **pydantic-ai**: AI Agent Framework, the Pydantic way
778
785
  - **pydantic-settings**: Settings management using Pydantic
779
786
  - **pymgclient**: Memgraph database adapter for Python language
780
787
  - **python-dotenv**: Read key-value pairs from a .env file and set them as environment variables
@@ -792,6 +799,7 @@ my_build_output
792
799
  - **defusedxml**: XML bomb protection for Python stdlib modules
793
800
  - **huggingface-hub**: Client library to download and publish models, datasets and other repos on the huggingface.co hub
794
801
  - **griffe**: Signatures for entire Python programs. Extract the structure, the frame, the skeleton of your project, to generate API documentation or find breaking changes in your API.
802
+ - **pathspec**: Utility library for gitignore style pattern matching of file paths.
795
803
  <!-- /SECTION:dependencies -->
796
804
 
797
805
  ## 🤖 Agentic Workflow & Tools
@@ -835,7 +843,7 @@ Code-Graph-RAG makes it easy to add support for any language that has a Tree-sit
835
843
 
836
844
  > **⚠️ Recommendation**: While you can add languages yourself, we recommend waiting for official full support to ensure optimal parsing quality, comprehensive feature coverage, and robust integration. The languages marked as "In Development" above will receive dedicated optimization and testing.
837
845
 
838
- > **💡 Request Support**: If you want a specific language to be officially supported, please [submit an issue](https://codeberg.org/vitali87/code-graph-rag/issues) with your language request.
846
+ > **💡 Request Support**: If you want a specific language to be officially supported, please [submit an issue](https://github.com/vitali87/code-graph-rag/issues) with your language request.
839
847
 
840
848
  #### Quick Start: Add a Language
841
849
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: code-graph-rag
3
- Version: 0.0.187
3
+ Version: 0.0.245
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: protobuf>=6.33.5
38
38
  Requires-Dist: defusedxml>=0.7.1
39
39
  Requires-Dist: huggingface-hub[hf-xet]>=1.7.2
40
40
  Requires-Dist: griffe<2,>=1.0
41
+ Requires-Dist: pathspec>=1.0.4
41
42
  Provides-Extra: test
42
43
  Requires-Dist: pytest>=8.4.1; extra == "test"
43
44
  Requires-Dist: pytest-asyncio>=1.0.0; extra == "test"
@@ -99,7 +100,7 @@ The package installs a `cgr` command.
99
100
  **Start Memgraph, parse a repo, and query it:**
100
101
 
101
102
  ```bash
102
- docker compose up -d # start Memgraph
103
+ cgr daemon up # start Memgraph + Qdrant
103
104
  cgr start --repo-path ./my-project \
104
105
  --update-graph --clean # parse & launch interactive chat
105
106
  ```
@@ -44,9 +44,11 @@ codebase_rag/parsers/call_processor.py
44
44
  codebase_rag/parsers/call_resolver.py
45
45
  codebase_rag/parsers/definition_processor.py
46
46
  codebase_rag/parsers/dependency_parser.py
47
+ codebase_rag/parsers/export_detection.py
47
48
  codebase_rag/parsers/factory.py
48
49
  codebase_rag/parsers/function_ingest.py
49
50
  codebase_rag/parsers/import_processor.py
51
+ codebase_rag/parsers/python_source_roots.py
50
52
  codebase_rag/parsers/stdlib_extractor.py
51
53
  codebase_rag/parsers/structure_processor.py
52
54
  codebase_rag/parsers/type_inference.py
@@ -61,12 +63,15 @@ codebase_rag/parsers/class_ingest/parent_extraction.py
61
63
  codebase_rag/parsers/class_ingest/relationships.py
62
64
  codebase_rag/parsers/class_ingest/utils.py
63
65
  codebase_rag/parsers/cpp/__init__.py
66
+ codebase_rag/parsers/cpp/type_inference.py
64
67
  codebase_rag/parsers/cpp/utils.py
65
68
  codebase_rag/parsers/cpp_frontend/__init__.py
66
69
  codebase_rag/parsers/cpp_frontend/constants.py
67
70
  codebase_rag/parsers/cpp_frontend/frontend.py
68
71
  codebase_rag/parsers/cpp_frontend/qn.py
69
72
  codebase_rag/parsers/go/__init__.py
73
+ codebase_rag/parsers/go/module_paths.py
74
+ codebase_rag/parsers/go/type_inference.py
70
75
  codebase_rag/parsers/go/utils.py
71
76
  codebase_rag/parsers/handlers/__init__.py
72
77
  codebase_rag/parsers/handlers/base.py
@@ -100,6 +105,7 @@ codebase_rag/parsers/py/type_inference.py
100
105
  codebase_rag/parsers/py/utils.py
101
106
  codebase_rag/parsers/py/variable_analyzer.py
102
107
  codebase_rag/parsers/rs/__init__.py
108
+ codebase_rag/parsers/rs/type_inference.py
103
109
  codebase_rag/parsers/rs/utils.py
104
110
  codebase_rag/providers/__init__.py
105
111
  codebase_rag/providers/base.py
@@ -18,6 +18,7 @@ protobuf>=6.33.5
18
18
  defusedxml>=0.7.1
19
19
  huggingface-hub[hf-xet]>=1.7.2
20
20
  griffe<2,>=1.0
21
+ pathspec>=1.0.4
21
22
 
22
23
  [semantic]
23
24
  qdrant-client>=1.9.0
@@ -2,6 +2,7 @@ import asyncio
2
2
  import json
3
3
  import time
4
4
  from collections.abc import Callable
5
+ from fnmatch import fnmatch
5
6
  from functools import partial
6
7
  from importlib.metadata import version as get_version
7
8
  from pathlib import Path
@@ -16,7 +17,7 @@ from . import cgr_state
16
17
  from . import cli_help as ch
17
18
  from . import constants as cs
18
19
  from . import logs as ls
19
- from .config import load_cgrignore_patterns, settings
20
+ from .config import load_ignore_patterns, settings
20
21
  from .graph_updater import GraphUpdater
21
22
  from .main import (
22
23
  _create_configuration_table,
@@ -192,7 +193,7 @@ def _run_graph_sync(
192
193
  clean: bool = False,
193
194
  output: str | None = None,
194
195
  ) -> None:
195
- cgrignore = load_cgrignore_patterns(repo)
196
+ cgrignore = load_ignore_patterns(repo)
196
197
  cli_excludes = frozenset(exclude) if exclude else frozenset()
197
198
  exclude_paths = cli_excludes | cgrignore.exclude or None
198
199
  unignore_paths: frozenset[str] | None
@@ -535,7 +536,7 @@ def index(
535
536
 
536
537
  _info(style(cs.CLI_MSG_OUTPUT_TO.format(path=output_proto_dir), cs.Color.CYAN))
537
538
 
538
- cgrignore = load_cgrignore_patterns(repo_to_index)
539
+ cgrignore = load_ignore_patterns(repo_to_index)
539
540
  cli_excludes = frozenset(exclude) if exclude else frozenset()
540
541
  exclude_paths = cli_excludes | cgrignore.exclude or None
541
542
  unignore_paths: frozenset[str] | None = None
@@ -941,6 +942,22 @@ def _dead_code_params(
941
942
  }
942
943
 
943
944
 
945
+ def _filter_excluded_rows(rows: list[ResultRow], exclude: list[str]) -> list[ResultRow]:
946
+ # (H) Drop candidates whose file path matches an exclude glob (generated dirs
947
+ # (H) like client/core or *.gen.* have no in-repo caller, so every symbol
948
+ # (H) reports as dead). fnmatch treats '*' as spanning '/', so '*client/core*'
949
+ # (H) matches at any depth.
950
+ if not exclude:
951
+ return rows
952
+ return [
953
+ row
954
+ for row in rows
955
+ if not any(
956
+ fnmatch(str(row.get(cs.KEY_PATH) or ""), pattern) for pattern in exclude
957
+ )
958
+ ]
959
+
960
+
944
961
  def _to_dead_code_row(row: ResultRow) -> DeadCodeRow:
945
962
  start = row.get(cs.KEY_START_LINE, 0)
946
963
  end = row.get(cs.KEY_END_LINE, 0)
@@ -1028,6 +1045,7 @@ def dead_code(
1028
1045
  decorator_root: list[str] = typer.Option(
1029
1046
  [], "--decorator-root", help=ch.HELP_DEADCODE_DECORATOR_ROOT
1030
1047
  ),
1048
+ exclude: list[str] = typer.Option([], "--exclude", help=ch.HELP_DEADCODE_EXCLUDE),
1031
1049
  include_tests: bool = typer.Option(
1032
1050
  True,
1033
1051
  "--include-tests/--no-include-tests",
@@ -1083,7 +1101,9 @@ def dead_code(
1083
1101
  app_context.console.print(style(message, cs.Color.RED))
1084
1102
  raise typer.Exit(1)
1085
1103
 
1086
- candidates = [_to_dead_code_row(row) for row in rows]
1104
+ candidates = [
1105
+ _to_dead_code_row(row) for row in _filter_excluded_rows(rows, exclude)
1106
+ ]
1087
1107
  _emit_dead_code(candidates, output_format, output, resolved)
1088
1108
 
1089
1109
  if fail_on_found and candidates:
@@ -191,6 +191,11 @@ HELP_DEADCODE_DECORATOR_ROOT = (
191
191
  "Treat functions/methods carrying this decorator as reachable roots. "
192
192
  "Extends the built-in set (route, task, fixture, command, ...). Repeatable."
193
193
  )
194
+ HELP_DEADCODE_EXCLUDE = (
195
+ "Glob matched against a symbol's file path to exclude from the report "
196
+ "(e.g. '*client/core*', '*.gen.*' for generated code). '*' spans '/'. "
197
+ "Repeatable."
198
+ )
194
199
  HELP_DEADCODE_INCLUDE_TESTS = (
195
200
  "Treat test code as reachable roots so production code it exercises is "
196
201
  "not reported. On by default."
@@ -360,13 +360,13 @@ class AppConfig(BaseSettings):
360
360
  settings = AppConfig()
361
361
 
362
362
  CGRIGNORE_FILENAME = ".cgrignore"
363
+ GITIGNORE_FILENAME = ".gitignore"
363
364
 
364
365
 
365
366
  EMPTY_CGRIGNORE = CgrignorePatterns(exclude=frozenset(), unignore=frozenset())
366
367
 
367
368
 
368
- def load_cgrignore_patterns(repo_path: Path) -> CgrignorePatterns:
369
- ignore_file = repo_path / CGRIGNORE_FILENAME
369
+ def _load_ignore_file(ignore_file: Path) -> CgrignorePatterns:
370
370
  if not ignore_file.is_file():
371
371
  return EMPTY_CGRIGNORE
372
372
 
@@ -394,11 +394,37 @@ def load_cgrignore_patterns(repo_path: Path) -> CgrignorePatterns:
394
394
  exclude=frozenset(exclude),
395
395
  unignore=frozenset(unignore),
396
396
  )
397
- except OSError as e:
397
+ except (OSError, ValueError) as e:
398
398
  logger.warning(logs.CGRIGNORE_READ_FAILED.format(path=ignore_file, error=e))
399
399
  return EMPTY_CGRIGNORE
400
400
 
401
401
 
402
+ def load_cgrignore_patterns(repo_path: Path) -> CgrignorePatterns:
403
+ return _load_ignore_file(repo_path / CGRIGNORE_FILENAME)
404
+
405
+
406
+ def load_ignore_patterns(repo_path: Path) -> CgrignorePatterns:
407
+ # (H) Merged exclude/unignore set for indexing: root .gitignore (gitignored
408
+ # (H) paths are build artifacts / generated output whose symbols pollute the
409
+ # (H) graph and the dead-code report) plus .cgrignore, which stays the
410
+ # (H) authoritative cgr-specific channel. The runtime skip check gives
411
+ # (H) excludes precedence over unignores, so a negation can only override a
412
+ # (H) .gitignore exclude by CANCELLING the exact same pattern string here at
413
+ # (H) load time (`!generated/` drops `generated/`). .cgrignore excludes are
414
+ # (H) never cancelled by .gitignore negations.
415
+ # (H) ponytail: root .gitignore only, exact-string cancellation only; a
416
+ # (H) finer-grained negation (`!dist/keep.py` under excluded `dist/`) still
417
+ # (H) cannot rescue -- an ordered PathSpec soft layer in should_skip_path is
418
+ # (H) the upgrade path if real repos need it.
419
+ cgr = _load_ignore_file(repo_path / CGRIGNORE_FILENAME)
420
+ git = _load_ignore_file(repo_path / GITIGNORE_FILENAME)
421
+ negations = cgr.unignore | git.unignore
422
+ return CgrignorePatterns(
423
+ exclude=cgr.exclude | (git.exclude - negations),
424
+ unignore=negations,
425
+ )
426
+
427
+
402
428
  CGR_INSTRUCTIONS_FILENAME = ".cgr.md"
403
429
  GLOBAL_CGR_INSTRUCTIONS_PATH = Path.home() / CGR_INSTRUCTIONS_FILENAME
404
430