code-graph-rag 0.0.670__tar.gz → 0.0.720__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 (321) hide show
  1. {code_graph_rag-0.0.670/code_graph_rag.egg-info → code_graph_rag-0.0.720}/PKG-INFO +21 -2
  2. {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/PYPI_README.md +15 -1
  3. {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/README.md +30 -25
  4. {code_graph_rag-0.0.670 → code_graph_rag-0.0.720/code_graph_rag.egg-info}/PKG-INFO +21 -2
  5. {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/code_graph_rag.egg-info/SOURCES.txt +19 -0
  6. {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/code_graph_rag.egg-info/requires.txt +7 -0
  7. {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/cli.py +101 -11
  8. {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/cli_help.py +10 -0
  9. {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/config.py +3 -0
  10. {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/constants/ast_csharp.py +26 -0
  11. {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/constants/ast_dart.py +7 -0
  12. {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/constants/ast_java.py +71 -1
  13. {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/constants/ast_lua.py +4 -0
  14. {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/constants/ast_python.py +6 -0
  15. {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/constants/ast_rust.py +3 -0
  16. code_graph_rag-0.0.720/codebase_rag/constants/ast_scala.py +37 -0
  17. {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/constants/cli.py +9 -0
  18. {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/constants/core.py +8 -1
  19. {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/constants/graph.py +58 -0
  20. {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/constants/languages.py +22 -0
  21. {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/dead_code.py +33 -1
  22. {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/graph_updater.py +463 -2
  23. {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/logs.py +50 -2
  24. code_graph_rag-0.0.720/codebase_rag/parser_fingerprint.py +143 -0
  25. code_graph_rag-0.0.720/codebase_rag/parsers/ast_grep_patterns/bash.yaml +14 -0
  26. code_graph_rag-0.0.720/codebase_rag/parsers/ast_grep_patterns/elixir.yaml +32 -0
  27. code_graph_rag-0.0.720/codebase_rag/parsers/ast_grep_patterns/haskell.yaml +26 -0
  28. code_graph_rag-0.0.720/codebase_rag/parsers/ast_grep_patterns/kotlin.yaml +24 -0
  29. code_graph_rag-0.0.720/codebase_rag/parsers/ast_grep_patterns/nix.yaml +14 -0
  30. code_graph_rag-0.0.720/codebase_rag/parsers/ast_grep_patterns/solidity.yaml +21 -0
  31. code_graph_rag-0.0.720/codebase_rag/parsers/ast_grep_patterns/swift.yaml +17 -0
  32. {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/parsers/ast_grep_tier.py +188 -28
  33. code_graph_rag-0.0.720/codebase_rag/parsers/build_lock.py +152 -0
  34. {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/parsers/call_processor.py +38 -4
  35. {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/parsers/call_resolver.py +71 -0
  36. {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/parsers/class_ingest/mixin.py +28 -5
  37. {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/parsers/cpp_frontend/__init__.py +2 -0
  38. {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/parsers/cpp_frontend/frontend.py +14 -0
  39. {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/parsers/csharp_frontend/frontend.py +92 -19
  40. {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/parsers/csharp_frontend/roslyn/Frontend.cs +349 -10
  41. {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/parsers/definition_processor.py +37 -13
  42. {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/parsers/factory.py +7 -0
  43. {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/parsers/flow_access/processor.py +793 -22
  44. {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/parsers/frontends/__init__.py +2 -0
  45. {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/parsers/frontends/csharp.py +3 -0
  46. code_graph_rag-0.0.720/codebase_rag/parsers/frontends/java.py +47 -0
  47. {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/parsers/frontends/protocol.py +18 -0
  48. code_graph_rag-0.0.720/codebase_rag/parsers/frontends/python.py +33 -0
  49. {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/parsers/function_ingest.py +20 -0
  50. {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/parsers/go_frontend/frontend.py +69 -29
  51. {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/parsers/import_processor.py +16 -1
  52. {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/parsers/io_access/__init__.py +4 -0
  53. {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/parsers/io_access/constants.py +3 -0
  54. {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/parsers/io_access/descriptor.py +87 -0
  55. {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/parsers/io_access/extract.py +322 -16
  56. {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/parsers/io_access/processor.py +129 -30
  57. {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/parsers/io_access/registry.py +106 -0
  58. {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/parsers/java/method_resolver.py +185 -32
  59. {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/parsers/java/type_inference.py +69 -0
  60. {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/parsers/java/variable_analyzer.py +104 -22
  61. code_graph_rag-0.0.720/codebase_rag/parsers/java_frontend/__init__.py +15 -0
  62. code_graph_rag-0.0.720/codebase_rag/parsers/java_frontend/frontend.py +259 -0
  63. code_graph_rag-0.0.720/codebase_rag/parsers/java_frontend/javac/cgr/Frontend.java +418 -0
  64. code_graph_rag-0.0.720/codebase_rag/parsers/java_generated.py +103 -0
  65. code_graph_rag-0.0.720/codebase_rag/parsers/java_lombok.py +183 -0
  66. code_graph_rag-0.0.720/codebase_rag/parsers/py_frontend/__init__.py +11 -0
  67. code_graph_rag-0.0.720/codebase_rag/parsers/py_frontend/frontend.py +229 -0
  68. {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/parsers/type_inference.py +38 -0
  69. {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/parsers/utils.py +69 -0
  70. code_graph_rag-0.0.720/codebase_rag/services/graph_diff.py +248 -0
  71. {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/services/protobuf_service.py +74 -13
  72. code_graph_rag-0.0.720/codebase_rag/services/provenance.py +288 -0
  73. {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/stack/constants.py +10 -3
  74. {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/tools/code_retrieval.py +33 -4
  75. {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/tools/directory_lister.py +1 -1
  76. {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/tools/tool_descriptions.py +7 -1
  77. {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/types_defs.py +18 -8
  78. {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/utils/source_extraction.py +7 -1
  79. {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codec/schema_pb2.py +26 -26
  80. {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codec/schema_pb2.pyi +6 -2
  81. {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/pyproject.toml +12 -1
  82. code_graph_rag-0.0.670/codebase_rag/constants/ast_scala.py +0 -17
  83. code_graph_rag-0.0.670/codebase_rag/parser_fingerprint.py +0 -73
  84. {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/LICENSE +0 -0
  85. {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/cgr/__init__.py +0 -0
  86. {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/code_graph_rag.egg-info/dependency_links.txt +0 -0
  87. {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/code_graph_rag.egg-info/entry_points.txt +0 -0
  88. {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/code_graph_rag.egg-info/top_level.txt +0 -0
  89. {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/__init__.py +0 -0
  90. {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/analyzers/__init__.py +0 -0
  91. {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/analyzers/ast_grep_analyzer.py +0 -0
  92. {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/analyzers/ast_grep_rules/patterns/c.yaml +0 -0
  93. {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/analyzers/ast_grep_rules/patterns/cpp.yaml +0 -0
  94. {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/analyzers/ast_grep_rules/patterns/csharp.yaml +0 -0
  95. {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/analyzers/ast_grep_rules/patterns/dart.yaml +0 -0
  96. {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/analyzers/ast_grep_rules/patterns/go.yaml +0 -0
  97. {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/analyzers/ast_grep_rules/patterns/java.yaml +0 -0
  98. {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/analyzers/ast_grep_rules/patterns/javascript.yaml +0 -0
  99. {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/analyzers/ast_grep_rules/patterns/lua.yaml +0 -0
  100. {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/analyzers/ast_grep_rules/patterns/php.yaml +0 -0
  101. {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/analyzers/ast_grep_rules/patterns/python.yaml +0 -0
  102. {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/analyzers/ast_grep_rules/patterns/ruby.yaml +0 -0
  103. {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/analyzers/ast_grep_rules/patterns/rust.yaml +0 -0
  104. {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/analyzers/ast_grep_rules/patterns/scala.yaml +0 -0
  105. {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/analyzers/ast_grep_rules/patterns/tsx.yaml +0 -0
  106. {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/analyzers/ast_grep_rules/patterns/typescript.yaml +0 -0
  107. {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/analyzers/ast_grep_rules/security/c.yaml +0 -0
  108. {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/analyzers/ast_grep_rules/security/cpp.yaml +0 -0
  109. {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/analyzers/ast_grep_rules/security/csharp.yaml +0 -0
  110. {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/analyzers/ast_grep_rules/security/dart.yaml +0 -0
  111. {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/analyzers/ast_grep_rules/security/go.yaml +0 -0
  112. {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/analyzers/ast_grep_rules/security/java.yaml +0 -0
  113. {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/analyzers/ast_grep_rules/security/javascript.yaml +0 -0
  114. {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/analyzers/ast_grep_rules/security/lua.yaml +0 -0
  115. {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/analyzers/ast_grep_rules/security/php.yaml +0 -0
  116. {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/analyzers/ast_grep_rules/security/python.yaml +0 -0
  117. {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/analyzers/ast_grep_rules/security/ruby.yaml +0 -0
  118. {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/analyzers/ast_grep_rules/security/rust.yaml +0 -0
  119. {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/analyzers/ast_grep_rules/security/scala.yaml +0 -0
  120. {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/analyzers/ast_grep_rules/security/tsx.yaml +0 -0
  121. {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/analyzers/ast_grep_rules/security/typescript.yaml +0 -0
  122. {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/analyzers/ast_grep_rules/smells/c.yaml +0 -0
  123. {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/analyzers/ast_grep_rules/smells/cpp.yaml +0 -0
  124. {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/analyzers/ast_grep_rules/smells/csharp.yaml +0 -0
  125. {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/analyzers/ast_grep_rules/smells/dart.yaml +0 -0
  126. {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/analyzers/ast_grep_rules/smells/go.yaml +0 -0
  127. {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/analyzers/ast_grep_rules/smells/java.yaml +0 -0
  128. {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/analyzers/ast_grep_rules/smells/javascript.yaml +0 -0
  129. {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/analyzers/ast_grep_rules/smells/lua.yaml +0 -0
  130. {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/analyzers/ast_grep_rules/smells/php.yaml +0 -0
  131. {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/analyzers/ast_grep_rules/smells/python.yaml +0 -0
  132. {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/analyzers/ast_grep_rules/smells/ruby.yaml +0 -0
  133. {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/analyzers/ast_grep_rules/smells/rust.yaml +0 -0
  134. {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/analyzers/ast_grep_rules/smells/scala.yaml +0 -0
  135. {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/analyzers/ast_grep_rules/smells/tsx.yaml +0 -0
  136. {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/analyzers/ast_grep_rules/smells/typescript.yaml +0 -0
  137. {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/ast_cache.py +0 -0
  138. {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/capture.py +0 -0
  139. {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/cgr_state.py +0 -0
  140. {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/constants/__init__.py +0 -0
  141. {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/constants/ast_cpp.py +0 -0
  142. {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/constants/ast_go.py +0 -0
  143. {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/constants/ast_js.py +0 -0
  144. {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/constants/ast_nodes.py +0 -0
  145. {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/constants/ast_php.py +0 -0
  146. {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/constants/build.py +0 -0
  147. {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/constants/deadcode_roots.py +0 -0
  148. {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/constants/deps.py +0 -0
  149. {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/constants/fqn_specs.py +0 -0
  150. {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/constants/health.py +0 -0
  151. {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/constants/lang_tooling.py +0 -0
  152. {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/constants/mcp.py +0 -0
  153. {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/constants/providers.py +0 -0
  154. {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/constants/security.py +0 -0
  155. {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/constants/stdlib_types.py +0 -0
  156. {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/constants/structural.py +0 -0
  157. {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/constants/trace.py +0 -0
  158. {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/crash_correlation.py +0 -0
  159. {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/cypher_queries.py +0 -0
  160. {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/decorators.py +0 -0
  161. {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/docker-compose.yaml +0 -0
  162. {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/embedder.py +0 -0
  163. {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/exceptions.py +0 -0
  164. {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/flow_verdict.py +0 -0
  165. {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/function_registry.py +0 -0
  166. {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/graph_audit.py +0 -0
  167. {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/graph_loader.py +0 -0
  168. {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/language_spec.py +0 -0
  169. {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/main.py +0 -0
  170. {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/mcp/__init__.py +0 -0
  171. {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/mcp/client.py +0 -0
  172. {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/mcp/server.py +0 -0
  173. {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/mcp/tools.py +0 -0
  174. {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/models.py +0 -0
  175. {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/parser_loader.py +0 -0
  176. {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/parsers/__init__.py +0 -0
  177. {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/parsers/ast_grep_patterns/ruby.yaml +0 -0
  178. {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/parsers/class_ingest/__init__.py +0 -0
  179. {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/parsers/class_ingest/cpp_modules.py +0 -0
  180. {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/parsers/class_ingest/identity.py +0 -0
  181. {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/parsers/class_ingest/method_override.py +0 -0
  182. {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/parsers/class_ingest/node_type.py +0 -0
  183. {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/parsers/class_ingest/parent_extraction.py +0 -0
  184. {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/parsers/class_ingest/relationships.py +0 -0
  185. {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/parsers/class_ingest/utils.py +0 -0
  186. {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/parsers/contract_linking.py +0 -0
  187. {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/parsers/contracts.py +0 -0
  188. {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/parsers/cpp/__init__.py +0 -0
  189. {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/parsers/cpp/preproc_recovery.py +0 -0
  190. {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/parsers/cpp/type_inference.py +0 -0
  191. {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/parsers/cpp/utils.py +0 -0
  192. {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/parsers/cpp_frontend/constants.py +0 -0
  193. {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/parsers/cpp_frontend/qn.py +0 -0
  194. {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/parsers/csharp/__init__.py +0 -0
  195. {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/parsers/csharp/type_inference.py +0 -0
  196. {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/parsers/csharp/utils.py +0 -0
  197. {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/parsers/csharp_frontend/__init__.py +0 -0
  198. {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/parsers/csharp_frontend/roslyn/Frontend.csproj +0 -0
  199. {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/parsers/csharp_frontend/roslyn/Program.cs +0 -0
  200. {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/parsers/dart/__init__.py +0 -0
  201. {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/parsers/dart/type_inference.py +0 -0
  202. {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/parsers/dart/utils.py +0 -0
  203. {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/parsers/dependency_parser.py +0 -0
  204. {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/parsers/dispatch_registry.py +0 -0
  205. {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/parsers/endpoint_prefixes.py +0 -0
  206. {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/parsers/endpoint_routes.py +0 -0
  207. {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/parsers/endpoints.py +0 -0
  208. {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/parsers/export_detection.py +0 -0
  209. {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/parsers/flow_access/__init__.py +0 -0
  210. {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/parsers/flow_access/constants.py +0 -0
  211. {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/parsers/frontends/go.py +0 -0
  212. {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/parsers/frontends/registry.py +0 -0
  213. {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/parsers/go/__init__.py +0 -0
  214. {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/parsers/go/module_paths.py +0 -0
  215. {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/parsers/go/type_inference.py +0 -0
  216. {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/parsers/go/utils.py +0 -0
  217. {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/parsers/go_frontend/__init__.py +0 -0
  218. {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/parsers/go_frontend/gotypes/go.mod +0 -0
  219. {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/parsers/go_frontend/gotypes/go.sum +0 -0
  220. {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/parsers/go_frontend/gotypes/main.go +0 -0
  221. {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/parsers/handlers/__init__.py +0 -0
  222. {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/parsers/handlers/base.py +0 -0
  223. {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/parsers/handlers/cpp.py +0 -0
  224. {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/parsers/handlers/java.py +0 -0
  225. {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/parsers/handlers/js_ts.py +0 -0
  226. {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/parsers/handlers/lua.py +0 -0
  227. {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/parsers/handlers/php.py +0 -0
  228. {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/parsers/handlers/protocol.py +0 -0
  229. {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/parsers/handlers/python.py +0 -0
  230. {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/parsers/handlers/registry.py +0 -0
  231. {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/parsers/handlers/rust.py +0 -0
  232. {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/parsers/io_access/models.py +0 -0
  233. {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/parsers/java/__init__.py +0 -0
  234. {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/parsers/java/type_resolver.py +0 -0
  235. {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/parsers/java/utils.py +0 -0
  236. {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/parsers/js_ts/__init__.py +0 -0
  237. {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/parsers/js_ts/ingest.py +0 -0
  238. {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/parsers/js_ts/module_paths.py +0 -0
  239. {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/parsers/js_ts/module_system.py +0 -0
  240. {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/parsers/js_ts/type_inference.py +0 -0
  241. {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/parsers/js_ts/utils.py +0 -0
  242. {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/parsers/lua/__init__.py +0 -0
  243. {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/parsers/lua/type_inference.py +0 -0
  244. {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/parsers/lua/utils.py +0 -0
  245. {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/parsers/py/__init__.py +0 -0
  246. {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/parsers/py/ast_analyzer.py +0 -0
  247. {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/parsers/py/expression_analyzer.py +0 -0
  248. {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/parsers/py/type_inference.py +0 -0
  249. {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/parsers/py/utils.py +0 -0
  250. {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/parsers/py/variable_analyzer.py +0 -0
  251. {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/parsers/python_source_roots.py +0 -0
  252. {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/parsers/rpc_exposure.py +0 -0
  253. {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/parsers/rs/__init__.py +0 -0
  254. {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/parsers/rs/type_inference.py +0 -0
  255. {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/parsers/rs/utils.py +0 -0
  256. {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/parsers/semantic_call_join.py +0 -0
  257. {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/parsers/stdlib_extractor.py +0 -0
  258. {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/parsers/structure_processor.py +0 -0
  259. {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/path_filters.py +0 -0
  260. {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/prompts.py +0 -0
  261. {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/providers/__init__.py +0 -0
  262. {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/providers/base.py +0 -0
  263. {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/providers/litellm.py +0 -0
  264. {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/readme_sections.py +0 -0
  265. {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/schema_builder.py +0 -0
  266. {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/schemas.py +0 -0
  267. {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/services/__init__.py +0 -0
  268. {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/services/anthropic_token_counter.py +0 -0
  269. {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/services/filtering.py +0 -0
  270. {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/services/graph_service.py +0 -0
  271. {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/services/llm.py +0 -0
  272. {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/services/resource_cleanup.py +0 -0
  273. {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/services/usage_cost.py +0 -0
  274. {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/stack/__init__.py +0 -0
  275. {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/stack/cli.py +0 -0
  276. {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/stack/health.py +0 -0
  277. {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/stack/manager.py +0 -0
  278. {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/tool_errors.py +0 -0
  279. {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/tools/__init__.py +0 -0
  280. {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/tools/ast_grep_service.py +0 -0
  281. {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/tools/codebase_query.py +0 -0
  282. {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/tools/file_editor.py +0 -0
  283. {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/tools/file_reader.py +0 -0
  284. {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/tools/file_writer.py +0 -0
  285. {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/tools/health_checker.py +0 -0
  286. {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/tools/language.py +0 -0
  287. {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/tools/semantic_search.py +0 -0
  288. {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/tools/shell_command.py +0 -0
  289. {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/tools/structural_editor.py +0 -0
  290. {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/tools/structural_search.py +0 -0
  291. {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/tools/web_search.py +0 -0
  292. {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/trace/__init__.py +0 -0
  293. {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/trace/cli.py +0 -0
  294. {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/trace/cpuprofile.py +0 -0
  295. {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/trace/ebpf_pprof.py +0 -0
  296. {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/trace/ingest.py +0 -0
  297. {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/trace/instrumented.py +0 -0
  298. {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/trace/pprof.py +0 -0
  299. {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/trace/pytest_plugin.py +0 -0
  300. {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/trace/records.py +0 -0
  301. {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/trace/resolution.py +0 -0
  302. {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/trace/rust_pprof.py +0 -0
  303. {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/trace/sourcemap.py +0 -0
  304. {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/trace/speedscope.py +0 -0
  305. {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/trace/tracer.py +0 -0
  306. {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/trace/xdebug.py +0 -0
  307. {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/unixcoder.py +0 -0
  308. {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/utils/__init__.py +0 -0
  309. {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/utils/dependencies.py +0 -0
  310. {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/utils/fqn_resolver.py +0 -0
  311. {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/utils/path_utils.py +0 -0
  312. {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/utils/rich_markdown.py +0 -0
  313. {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/utils/token_utils.py +0 -0
  314. {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/vector_store.py +0 -0
  315. {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/workspaces/__init__.py +0 -0
  316. {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/workspaces/cli.py +0 -0
  317. {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/workspaces/constants.py +0 -0
  318. {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/workspaces/models.py +0 -0
  319. {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codebase_rag/workspaces/storage.py +0 -0
  320. {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/codec/__init__.py +0 -0
  321. {code_graph_rag-0.0.670 → code_graph_rag-0.0.720}/setup.cfg +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: code-graph-rag
3
- Version: 0.0.670
3
+ Version: 0.0.720
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
@@ -40,6 +40,7 @@ Requires-Dist: huggingface-hub[hf-xet]>=1.7.2
40
40
  Requires-Dist: pathspec>=1.0.4
41
41
  Requires-Dist: pygments>=2.20.0
42
42
  Provides-Extra: test
43
+ Requires-Dist: jedi>=0.19; extra == "test"
43
44
  Requires-Dist: pytest>=8.4.1; extra == "test"
44
45
  Requires-Dist: pytest-asyncio>=1.0.0; extra == "test"
45
46
  Requires-Dist: pytest-cov>=4.0.0; extra == "test"
@@ -49,6 +50,8 @@ Requires-Dist: libclang>=18.1.1; extra == "test"
49
50
  Requires-Dist: filelock>=3.12; extra == "test"
50
51
  Requires-Dist: ast-grep-py>=0.44.0; extra == "test"
51
52
  Requires-Dist: pyyaml>=6.0; extra == "test"
53
+ Provides-Extra: cpp
54
+ Requires-Dist: libclang>=18.1.1; extra == "cpp"
52
55
  Provides-Extra: treesitter-full
53
56
  Requires-Dist: tree-sitter-python>=0.23.6; extra == "treesitter-full"
54
57
  Requires-Dist: tree-sitter-javascript>=0.23.1; extra == "treesitter-full"
@@ -72,6 +75,8 @@ Requires-Dist: pymilvus[milvus-lite]>=3.0.0; extra == "milvus"
72
75
  Provides-Extra: ast-grep
73
76
  Requires-Dist: ast-grep-py>=0.44.0; extra == "ast-grep"
74
77
  Requires-Dist: pyyaml>=6.0; extra == "ast-grep"
78
+ Provides-Extra: python-semantics
79
+ Requires-Dist: jedi>=0.19; extra == "python-semantics"
75
80
  Dynamic: license-file
76
81
 
77
82
  # Code-Graph-RAG
@@ -95,7 +100,7 @@ Point it at a repository and it reads every source file, extracts functions, cla
95
100
 
96
101
  ## Supported Languages
97
102
 
98
- Python, TypeScript, TSX, JavaScript, Rust, Go, Java, C, C++, C#, PHP, Lua, and Dart are fully supported. Scala is in development, and Ruby has structural support (modules, functions, classes, and imports) through the pluggable ast-grep tier, which requires the `ast-grep` extra (`pip install 'code-graph-rag[ast-grep]'`).
103
+ Python, TypeScript, TSX, JavaScript, Rust, Go, Java, C, C++, C#, PHP, Lua, and Dart are fully supported. Scala is in development, and Ruby, Kotlin, Swift, Elixir, Haskell, Solidity, Bash, and Nix have structural support (modules, functions, classes where the language has them, and imports) through the pluggable ast-grep tier, which requires the `ast-grep` extra (`pip install 'code-graph-rag[ast-grep]'`).
99
104
 
100
105
  ## Install
101
106
 
@@ -125,6 +130,20 @@ instead of locally, set `CGR_EMBEDDING_PROVIDER=openai` with
125
130
  `OPENAI_EMBEDDING_BASE_URL` and `OPENAI_EMBEDDING_MODEL`; torch and
126
131
  transformers are then not required locally.
127
132
 
133
+ ### Which version am I getting?
134
+
135
+ `pip install code-graph-rag` gives you the newest PyPI release, which is deliberately
136
+ not the newest commit. Git tags exist for every version (one per merge), while PyPI
137
+ uploads and GitHub Release binaries land on an every-50 cadence, so the tag on `main`
138
+ usually runs ahead of the published version. A security fix is the exception: it
139
+ ships immediately rather than waiting for the cadence.
140
+
141
+ To run code newer than the latest release, install from git:
142
+
143
+ ```bash
144
+ pip install "code-graph-rag[treesitter-full] @ git+https://github.com/vitali87/code-graph-rag@main"
145
+ ```
146
+
128
147
  ### Prerequisites
129
148
 
130
149
  - Python 3.12+
@@ -19,7 +19,7 @@ Point it at a repository and it reads every source file, extracts functions, cla
19
19
 
20
20
  ## Supported Languages
21
21
 
22
- Python, TypeScript, TSX, JavaScript, Rust, Go, Java, C, C++, C#, PHP, Lua, and Dart are fully supported. Scala is in development, and Ruby has structural support (modules, functions, classes, and imports) through the pluggable ast-grep tier, which requires the `ast-grep` extra (`pip install 'code-graph-rag[ast-grep]'`).
22
+ Python, TypeScript, TSX, JavaScript, Rust, Go, Java, C, C++, C#, PHP, Lua, and Dart are fully supported. Scala is in development, and Ruby, Kotlin, Swift, Elixir, Haskell, Solidity, Bash, and Nix have structural support (modules, functions, classes where the language has them, and imports) through the pluggable ast-grep tier, which requires the `ast-grep` extra (`pip install 'code-graph-rag[ast-grep]'`).
23
23
 
24
24
  ## Install
25
25
 
@@ -49,6 +49,20 @@ instead of locally, set `CGR_EMBEDDING_PROVIDER=openai` with
49
49
  `OPENAI_EMBEDDING_BASE_URL` and `OPENAI_EMBEDDING_MODEL`; torch and
50
50
  transformers are then not required locally.
51
51
 
52
+ ### Which version am I getting?
53
+
54
+ `pip install code-graph-rag` gives you the newest PyPI release, which is deliberately
55
+ not the newest commit. Git tags exist for every version (one per merge), while PyPI
56
+ uploads and GitHub Release binaries land on an every-50 cadence, so the tag on `main`
57
+ usually runs ahead of the published version. A security fix is the exception: it
58
+ ships immediately rather than waiting for the cadence.
59
+
60
+ To run code newer than the latest release, install from git:
61
+
62
+ ```bash
63
+ pip install "code-graph-rag[treesitter-full] @ git+https://github.com/vitali87/code-graph-rag@main"
64
+ ```
65
+
52
66
  ### Prerequisites
53
67
 
54
68
  - Python 3.12+
@@ -10,17 +10,6 @@
10
10
  </p>
11
11
 
12
12
  <p>
13
- <!-- Badges below are commented out while the GitHub account is suspended. Restore them when the account is reinstated.
14
- Stars/Forks: shields.io hits GitHub's API (returns "repo not found" for suspended accounts).
15
- gitcgr: indexes from GitHub (shows "not indexed" while unavailable).
16
- MseeP.ai: badge PNG ignores inline height on Bitbucket and renders as a full-size tile.
17
- <a href="https://github.com/vitali87/code-graph-rag/stargazers">
18
- <img src="https://img.shields.io/github/stars/vitali87/code-graph-rag?style=social" alt="GitHub stars" />
19
- </a>
20
- <a href="https://github.com/vitali87/code-graph-rag/network/members">
21
- <img src="https://img.shields.io/github/forks/vitali87/code-graph-rag?style=social" alt="GitHub forks" />
22
- </a>
23
- -->
24
13
  <a href="https://github.com/vitali87/code-graph-rag/actions/workflows/ci.yml">
25
14
  <img src="https://img.shields.io/github/actions/workflow/status/vitali87/code-graph-rag/ci.yml?branch=main" alt="CI" />
26
15
  </a>
@@ -30,11 +19,6 @@
30
19
  <a href="https://sonarcloud.io/summary/overall?id=vitali87_code-graph-rag">
31
20
  <img src="https://sonarcloud.io/api/project_badges/measure?project=vitali87_code-graph-rag&metric=alert_status" alt="Quality Gate Status" />
32
21
  </a>
33
- <!--
34
- <a href="https://mseep.ai/app/vitali87-code-graph-rag">
35
- <img src="https://mseep.net/pr/vitali87-code-graph-rag-badge.png" alt="MseeP.ai Security Assessment" height="20" />
36
- </a>
37
- -->
38
22
  <a href="https://code-graph-rag.com">
39
23
  <img src="https://img.shields.io/badge/Enterprise-Support%20%26%20Services-6366f1" alt="Enterprise Support" />
40
24
  </a>
@@ -53,11 +37,6 @@
53
37
  <a href="https://www.bestpractices.dev/projects/13757">
54
38
  <img src="https://www.bestpractices.dev/projects/13757/badge" alt="OpenSSF Best Practices" />
55
39
  </a>
56
- <!--
57
- <a href="https://gitcgr.com/vitali87/code-graph-rag">
58
- <img src="https://gitcgr.com/badge/vitali87/code-graph-rag.svg" alt="gitcgr" />
59
- </a>
60
- -->
61
40
  </p>
62
41
  </div>
63
42
 
@@ -72,9 +51,9 @@ Code-Graph-RAG parses a multi-language codebase with Tree-sitter, builds a knowl
72
51
  ## Latest News 🔥
73
52
 
74
53
  <!-- SECTION:latest_news -->
75
- - **Runtime Call Tracing**: A dynamic tracer runs your code (typically the test suite) and merges the calls that actually happened into the graph as `CALLS` edges (flagged where static analysis missed them), so dispatch through interfaces, virtual methods, function pointers, reflection, and framework routing becomes visible. Convert a run from Python, the JVM, Node.js, .NET, PHP, Lua, Dart, Go, Rust, or C/C++ with `cgr trace`, or ingest production pprof profiles from an eBPF continuous profiler (Parca, Pyroscope, OpenTelemetry) with `cgr trace convert --format ebpf`.
76
- - **Ruby Support**: Ruby joins the graph through a new pluggable ast-grep tier that adds a language from a single YAML pattern file, emitting `Module`, `Function`, and `Class` nodes plus import edges without a hand-written parser.
77
- - **Structural Search & Replace**: Find and rewrite code by AST pattern with ast-grep, exposed as agent tools so you can match and transform structure across the whole codebase instead of relying on text or regex.
54
+ - **Language Support**: The system now supports Ruby, bringing enhanced code analysis capabilities to your Ruby projects.
55
+ - **Structural Analysis**: You can now find and rewrite code based on AST patterns using structural search and replace.
56
+ - **Data Flow Tracking**: Enhanced data-flow tracing is now available for C#, Java, C, and Go, providing more comprehensive visibility into data movement.
78
57
  <!-- /SECTION:latest_news -->
79
58
 
80
59
  See [NEWS.md](NEWS.md) for the full history.
@@ -108,7 +87,7 @@ See the [Architecture Overview](docs/architecture/overview.md) and [Graph Schema
108
87
 
109
88
  ## Supported Languages
110
89
 
111
- Python, TypeScript, TSX, JavaScript, Rust, Go, Java, C, C++, C#, PHP, Lua, and Dart are fully supported. Scala is in development, and Ruby has structural support (modules, functions, classes, and imports) through the pluggable ast-grep tier. See the [Language Support](docs/architecture/language-support.md) matrix for per-language capabilities.
90
+ Python, TypeScript, TSX, JavaScript, Rust, Go, Java, C, C++, C#, PHP, Lua, and Dart are fully supported. Scala is in development, and Ruby, Kotlin, Swift, Elixir, Haskell, Solidity, Bash, and Nix have structural support (modules, functions, classes where the language has them, and imports) through the pluggable ast-grep tier. See the [Language Support](docs/architecture/language-support.md) matrix for per-language capabilities.
112
91
 
113
92
  ## Installation
114
93
 
@@ -122,6 +101,31 @@ uv tool install "code-graph-rag[treesitter-full,semantic]"
122
101
  pipx install "code-graph-rag[treesitter-full,semantic]"
123
102
  ```
124
103
 
104
+ ### Which version am I getting?
105
+
106
+ Three version lines exist and they intentionally differ:
107
+
108
+ | where | what it tracks |
109
+ |---|---|
110
+ | git tags | every version, one per merge |
111
+ | GitHub Releases (binaries, signatures) | every 50th version, plus any security fix |
112
+ | PyPI | every 50th version, plus any security fix |
113
+
114
+ So the newest tag on `main` usually runs ahead of the newest release, often by
115
+ tens of patch versions; they coincide only just after a release. Nothing is
116
+ stuck, the cadences differ by design. A security fix does NOT wait for the
117
+ cadence: it ships a release and a PyPI upload immediately.
118
+
119
+ `uv tool install` and `pipx install` give you the newest PyPI version, which is the
120
+ newest RELEASE, not the newest tag. Interim tags exist so every merge is
121
+ addressable; binaries and PyPI uploads follow the cadence above.
122
+
123
+ To run code newer than the latest release, install from git:
124
+
125
+ ```bash
126
+ uv tool install "code-graph-rag[treesitter-full,semantic] @ git+https://github.com/vitali87/code-graph-rag@main"
127
+ ```
128
+
125
129
  You also need Docker (for Memgraph), `cmake`, and `ripgrep`. Full prerequisites, source installs, and environment setup are in the [Installation](docs/getting-started/installation.md) guide.
126
130
 
127
131
  ## Quick Start
@@ -162,6 +166,7 @@ Code-Graph-RAG runs as an [MCP](https://modelcontextprotocol.io) server so Claud
162
166
  - [Dynamic Call Tracing](docs/guide/dynamic-tracing.md)
163
167
  - [Graph Export](docs/guide/graph-export.md)
164
168
  - [Real-Time Updates](docs/guide/realtime-updates.md)
169
+ - [C/C++ Semantic Mode](docs/guide/cpp-semantic-mode.md)
165
170
  - [MCP Server](docs/guide/mcp-server.md)
166
171
 
167
172
  **Architecture**
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: code-graph-rag
3
- Version: 0.0.670
3
+ Version: 0.0.720
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
@@ -40,6 +40,7 @@ Requires-Dist: huggingface-hub[hf-xet]>=1.7.2
40
40
  Requires-Dist: pathspec>=1.0.4
41
41
  Requires-Dist: pygments>=2.20.0
42
42
  Provides-Extra: test
43
+ Requires-Dist: jedi>=0.19; extra == "test"
43
44
  Requires-Dist: pytest>=8.4.1; extra == "test"
44
45
  Requires-Dist: pytest-asyncio>=1.0.0; extra == "test"
45
46
  Requires-Dist: pytest-cov>=4.0.0; extra == "test"
@@ -49,6 +50,8 @@ Requires-Dist: libclang>=18.1.1; extra == "test"
49
50
  Requires-Dist: filelock>=3.12; extra == "test"
50
51
  Requires-Dist: ast-grep-py>=0.44.0; extra == "test"
51
52
  Requires-Dist: pyyaml>=6.0; extra == "test"
53
+ Provides-Extra: cpp
54
+ Requires-Dist: libclang>=18.1.1; extra == "cpp"
52
55
  Provides-Extra: treesitter-full
53
56
  Requires-Dist: tree-sitter-python>=0.23.6; extra == "treesitter-full"
54
57
  Requires-Dist: tree-sitter-javascript>=0.23.1; extra == "treesitter-full"
@@ -72,6 +75,8 @@ Requires-Dist: pymilvus[milvus-lite]>=3.0.0; extra == "milvus"
72
75
  Provides-Extra: ast-grep
73
76
  Requires-Dist: ast-grep-py>=0.44.0; extra == "ast-grep"
74
77
  Requires-Dist: pyyaml>=6.0; extra == "ast-grep"
78
+ Provides-Extra: python-semantics
79
+ Requires-Dist: jedi>=0.19; extra == "python-semantics"
75
80
  Dynamic: license-file
76
81
 
77
82
  # Code-Graph-RAG
@@ -95,7 +100,7 @@ Point it at a repository and it reads every source file, extracts functions, cla
95
100
 
96
101
  ## Supported Languages
97
102
 
98
- Python, TypeScript, TSX, JavaScript, Rust, Go, Java, C, C++, C#, PHP, Lua, and Dart are fully supported. Scala is in development, and Ruby has structural support (modules, functions, classes, and imports) through the pluggable ast-grep tier, which requires the `ast-grep` extra (`pip install 'code-graph-rag[ast-grep]'`).
103
+ Python, TypeScript, TSX, JavaScript, Rust, Go, Java, C, C++, C#, PHP, Lua, and Dart are fully supported. Scala is in development, and Ruby, Kotlin, Swift, Elixir, Haskell, Solidity, Bash, and Nix have structural support (modules, functions, classes where the language has them, and imports) through the pluggable ast-grep tier, which requires the `ast-grep` extra (`pip install 'code-graph-rag[ast-grep]'`).
99
104
 
100
105
  ## Install
101
106
 
@@ -125,6 +130,20 @@ instead of locally, set `CGR_EMBEDDING_PROVIDER=openai` with
125
130
  `OPENAI_EMBEDDING_BASE_URL` and `OPENAI_EMBEDDING_MODEL`; torch and
126
131
  transformers are then not required locally.
127
132
 
133
+ ### Which version am I getting?
134
+
135
+ `pip install code-graph-rag` gives you the newest PyPI release, which is deliberately
136
+ not the newest commit. Git tags exist for every version (one per merge), while PyPI
137
+ uploads and GitHub Release binaries land on an every-50 cadence, so the tag on `main`
138
+ usually runs ahead of the published version. A security fix is the exception: it
139
+ ships immediately rather than waiting for the cadence.
140
+
141
+ To run code newer than the latest release, install from git:
142
+
143
+ ```bash
144
+ pip install "code-graph-rag[treesitter-full] @ git+https://github.com/vitali87/code-graph-rag@main"
145
+ ```
146
+
128
147
  ### Prerequisites
129
148
 
130
149
  - Python 3.12+
@@ -125,6 +125,7 @@ codebase_rag/mcp/server.py
125
125
  codebase_rag/mcp/tools.py
126
126
  codebase_rag/parsers/__init__.py
127
127
  codebase_rag/parsers/ast_grep_tier.py
128
+ codebase_rag/parsers/build_lock.py
128
129
  codebase_rag/parsers/call_processor.py
129
130
  codebase_rag/parsers/call_resolver.py
130
131
  codebase_rag/parsers/contract_linking.py
@@ -139,6 +140,8 @@ codebase_rag/parsers/export_detection.py
139
140
  codebase_rag/parsers/factory.py
140
141
  codebase_rag/parsers/function_ingest.py
141
142
  codebase_rag/parsers/import_processor.py
143
+ codebase_rag/parsers/java_generated.py
144
+ codebase_rag/parsers/java_lombok.py
142
145
  codebase_rag/parsers/python_source_roots.py
143
146
  codebase_rag/parsers/rpc_exposure.py
144
147
  codebase_rag/parsers/semantic_call_join.py
@@ -146,7 +149,14 @@ codebase_rag/parsers/stdlib_extractor.py
146
149
  codebase_rag/parsers/structure_processor.py
147
150
  codebase_rag/parsers/type_inference.py
148
151
  codebase_rag/parsers/utils.py
152
+ codebase_rag/parsers/ast_grep_patterns/bash.yaml
153
+ codebase_rag/parsers/ast_grep_patterns/elixir.yaml
154
+ codebase_rag/parsers/ast_grep_patterns/haskell.yaml
155
+ codebase_rag/parsers/ast_grep_patterns/kotlin.yaml
156
+ codebase_rag/parsers/ast_grep_patterns/nix.yaml
149
157
  codebase_rag/parsers/ast_grep_patterns/ruby.yaml
158
+ codebase_rag/parsers/ast_grep_patterns/solidity.yaml
159
+ codebase_rag/parsers/ast_grep_patterns/swift.yaml
150
160
  codebase_rag/parsers/class_ingest/__init__.py
151
161
  codebase_rag/parsers/class_ingest/cpp_modules.py
152
162
  codebase_rag/parsers/class_ingest/identity.py
@@ -181,7 +191,9 @@ codebase_rag/parsers/flow_access/processor.py
181
191
  codebase_rag/parsers/frontends/__init__.py
182
192
  codebase_rag/parsers/frontends/csharp.py
183
193
  codebase_rag/parsers/frontends/go.py
194
+ codebase_rag/parsers/frontends/java.py
184
195
  codebase_rag/parsers/frontends/protocol.py
196
+ codebase_rag/parsers/frontends/python.py
185
197
  codebase_rag/parsers/frontends/registry.py
186
198
  codebase_rag/parsers/go/__init__.py
187
199
  codebase_rag/parsers/go/module_paths.py
@@ -216,6 +228,9 @@ codebase_rag/parsers/java/type_inference.py
216
228
  codebase_rag/parsers/java/type_resolver.py
217
229
  codebase_rag/parsers/java/utils.py
218
230
  codebase_rag/parsers/java/variable_analyzer.py
231
+ codebase_rag/parsers/java_frontend/__init__.py
232
+ codebase_rag/parsers/java_frontend/frontend.py
233
+ codebase_rag/parsers/java_frontend/javac/cgr/Frontend.java
219
234
  codebase_rag/parsers/js_ts/__init__.py
220
235
  codebase_rag/parsers/js_ts/ingest.py
221
236
  codebase_rag/parsers/js_ts/module_paths.py
@@ -231,6 +246,8 @@ codebase_rag/parsers/py/expression_analyzer.py
231
246
  codebase_rag/parsers/py/type_inference.py
232
247
  codebase_rag/parsers/py/utils.py
233
248
  codebase_rag/parsers/py/variable_analyzer.py
249
+ codebase_rag/parsers/py_frontend/__init__.py
250
+ codebase_rag/parsers/py_frontend/frontend.py
234
251
  codebase_rag/parsers/rs/__init__.py
235
252
  codebase_rag/parsers/rs/type_inference.py
236
253
  codebase_rag/parsers/rs/utils.py
@@ -240,9 +257,11 @@ codebase_rag/providers/litellm.py
240
257
  codebase_rag/services/__init__.py
241
258
  codebase_rag/services/anthropic_token_counter.py
242
259
  codebase_rag/services/filtering.py
260
+ codebase_rag/services/graph_diff.py
243
261
  codebase_rag/services/graph_service.py
244
262
  codebase_rag/services/llm.py
245
263
  codebase_rag/services/protobuf_service.py
264
+ codebase_rag/services/provenance.py
246
265
  codebase_rag/services/resource_cleanup.py
247
266
  codebase_rag/services/usage_cost.py
248
267
  codebase_rag/stack/__init__.py
@@ -24,15 +24,22 @@ pygments>=2.20.0
24
24
  ast-grep-py>=0.44.0
25
25
  pyyaml>=6.0
26
26
 
27
+ [cpp]
28
+ libclang>=18.1.1
29
+
27
30
  [milvus]
28
31
  pymilvus[milvus-lite]>=3.0.0
29
32
 
33
+ [python-semantics]
34
+ jedi>=0.19
35
+
30
36
  [semantic]
31
37
  qdrant-client>=1.9.0
32
38
  torch>=2.6.0
33
39
  transformers>=4.0.0
34
40
 
35
41
  [test]
42
+ jedi>=0.19
36
43
  pytest>=8.4.1
37
44
  pytest-asyncio>=1.0.0
38
45
  pytest-cov>=4.0.0
@@ -37,8 +37,15 @@ from .main import (
37
37
  update_model_settings,
38
38
  )
39
39
  from .parser_loader import load_parsers
40
+ from .services.graph_diff import DiffError, diff_indexes, diff_is_empty
40
41
  from .services.graph_service import MemgraphIngestor
41
42
  from .services.protobuf_service import ProtobufFileIngestor
43
+ from .services.provenance import (
44
+ capture_description,
45
+ source_state,
46
+ verify_index,
47
+ write_manifest,
48
+ )
42
49
  from .stack import StackManager
43
50
  from .stack.cli import cli as daemon_cli
44
51
  from .stack.constants import StackState
@@ -688,8 +695,12 @@ def index(
688
695
  unignore_paths = cgrignore.unignore or None
689
696
 
690
697
  try:
698
+ indexed_source = source_state(Path(repo_to_index))
699
+ capture_config = _capture_selection(capture)
691
700
  ingestor = ProtobufFileIngestor(
692
- output_path=output_proto_dir, split_index=split_index
701
+ output_path=output_proto_dir,
702
+ split_index=split_index,
703
+ repo_path=str(repo_to_index),
693
704
  )
694
705
  parsers, queries = load_parsers()
695
706
  updater = GraphUpdater(
@@ -699,10 +710,18 @@ def index(
699
710
  queries=queries,
700
711
  unignore_paths=unignore_paths,
701
712
  exclude_paths=exclude_paths,
702
- capture=_capture_selection(capture),
713
+ capture=capture_config,
703
714
  )
704
715
 
705
716
  updater.run()
717
+ manifest_path = write_manifest(
718
+ Path(output_proto_dir),
719
+ indexed_source,
720
+ capture_description(capture_config),
721
+ )
722
+ _info(
723
+ style(cs.CLI_MSG_MANIFEST_WRITTEN.format(path=manifest_path), cs.Color.CYAN)
724
+ )
706
725
  _info(style(cs.CLI_MSG_INDEXING_DONE, cs.Color.GREEN))
707
726
 
708
727
  except Exception as e:
@@ -713,6 +732,58 @@ def index(
713
732
  raise typer.Exit(1) from e
714
733
 
715
734
 
735
+ @app.command(
736
+ name="verify-index",
737
+ help=ch.CMD_VERIFY_INDEX,
738
+ short_help=ch.CMD_VERIFY_INDEX,
739
+ rich_help_panel=ch.PANEL_GRAPH,
740
+ )
741
+ def verify_index_command(
742
+ index_dir: str = typer.Option(
743
+ ..., "-i", "--index-dir", help=ch.HELP_VERIFY_INDEX_DIR
744
+ ),
745
+ trusted_manifest_sha256: str | None = typer.Option(
746
+ None,
747
+ "--trusted-manifest-sha256",
748
+ help=ch.HELP_TRUSTED_MANIFEST_SHA,
749
+ ),
750
+ ) -> None:
751
+ problems = verify_index(Path(index_dir), trusted_manifest_sha256)
752
+ if problems:
753
+ for problem in problems:
754
+ app_context.console.print(
755
+ style(cs.CLI_MSG_VERIFY_PROBLEM.format(problem=problem), cs.Color.RED)
756
+ )
757
+ raise typer.Exit(1)
758
+ _info(style(cs.CLI_MSG_VERIFY_OK.format(path=index_dir), cs.Color.GREEN))
759
+
760
+
761
+ @app.command(
762
+ name="diff-index",
763
+ help=ch.CMD_DIFF_INDEX,
764
+ short_help=ch.CMD_DIFF_INDEX,
765
+ rich_help_panel=ch.PANEL_GRAPH,
766
+ )
767
+ def diff_index_command(
768
+ old_dir: str = typer.Option(..., "--old", help=ch.HELP_DIFF_OLD),
769
+ new_dir: str = typer.Option(..., "--new", help=ch.HELP_DIFF_NEW),
770
+ json_out: str | None = typer.Option(None, "--json-out", help=ch.HELP_DIFF_JSON_OUT),
771
+ ) -> None:
772
+ try:
773
+ diff = diff_indexes(Path(old_dir), Path(new_dir))
774
+ except DiffError as error:
775
+ app_context.console.print(style(str(error), cs.Color.RED))
776
+ raise typer.Exit(2) from error
777
+ rendered = json.dumps(diff, indent=2, sort_keys=True)
778
+ if json_out is not None:
779
+ Path(json_out).write_text(rendered + "\n", encoding="utf-8")
780
+ _info(style(cs.CLI_MSG_DIFF_WRITTEN.format(path=json_out), cs.Color.CYAN))
781
+ else:
782
+ app_context.console.print(rendered)
783
+ if diff_is_empty(diff):
784
+ _info(style(cs.CLI_MSG_DIFF_EMPTY, cs.Color.GREEN))
785
+
786
+
716
787
  @app.command(
717
788
  help=ch.CMD_EXPORT,
718
789
  short_help=ch.CMD_EXPORT,
@@ -1256,6 +1327,7 @@ def _emit_dead_code(
1256
1327
  output_format: cs.DeadCodeFormat,
1257
1328
  output: Path | None,
1258
1329
  project_name: str,
1330
+ structural_tier_symbols: int = 0,
1259
1331
  ) -> None:
1260
1332
  if output_format == cs.DeadCodeFormat.JSON:
1261
1333
  payload = json.dumps(candidates, indent=2)
@@ -1271,25 +1343,40 @@ def _emit_dead_code(
1271
1343
  typer.echo(payload)
1272
1344
  return
1273
1345
 
1346
+ # The coverage notice follows the table into whichever sink it goes, so a
1347
+ # saved report (CI artifact, shared review) never reads as "all clean"
1348
+ # when whole languages went unanalyzed.
1349
+ notice = (
1350
+ cs.CLI_DEADCODE_STRUCTURAL_TIER_SKIPPED.format(count=structural_tier_symbols)
1351
+ if structural_tier_symbols
1352
+ else ""
1353
+ )
1274
1354
  table = _build_dead_code_table(candidates, project_name)
1275
1355
  if output is not None:
1276
1356
  with output.open("w", encoding=cs.ENCODING_UTF8) as fh:
1277
- Console(file=fh).print(table)
1357
+ file_console = Console(file=fh)
1358
+ file_console.print(table)
1359
+ if notice:
1360
+ file_console.print(notice)
1278
1361
  app_context.console.print(
1279
1362
  style(
1280
1363
  cs.CLI_DEADCODE_WRITTEN.format(count=len(candidates), path=output),
1281
1364
  cs.Color.GREEN,
1282
1365
  )
1283
1366
  )
1367
+ if notice:
1368
+ app_context.console.print(style(notice, cs.Color.YELLOW))
1284
1369
  return
1285
1370
 
1286
1371
  if not candidates:
1287
1372
  app_context.console.print(style(cs.CLI_DEADCODE_NONE, cs.Color.GREEN))
1288
- return
1289
- app_context.console.print(table)
1290
- app_context.console.print(
1291
- style(cs.CLI_DEADCODE_SUMMARY.format(count=len(candidates)), cs.Color.GREEN)
1292
- )
1373
+ else:
1374
+ app_context.console.print(table)
1375
+ app_context.console.print(
1376
+ style(cs.CLI_DEADCODE_SUMMARY.format(count=len(candidates)), cs.Color.GREEN)
1377
+ )
1378
+ if notice:
1379
+ app_context.console.print(style(notice, cs.Color.YELLOW))
1293
1380
 
1294
1381
 
1295
1382
  @app.command(
@@ -1330,7 +1417,7 @@ def dead_code(
1330
1417
  False, "--fail-on-found", help=ch.HELP_DEADCODE_FAIL_ON_FOUND
1331
1418
  ),
1332
1419
  ) -> None:
1333
- from .dead_code import collect_dead_code
1420
+ from .dead_code import collect_dead_code_with_coverage
1334
1421
 
1335
1422
  show_progress = output_format == cs.DeadCodeFormat.TABLE and output is None
1336
1423
  if show_progress:
@@ -1339,13 +1426,14 @@ def dead_code(
1339
1426
  projects: list[str] = []
1340
1427
  resolved: str | None = None
1341
1428
  rows: list[ResultRow] = []
1429
+ structural_tier_symbols = 0
1342
1430
  try:
1343
1431
  with connect_memgraph(batch_size=1) as ingestor:
1344
1432
  projects = ingestor.list_projects()
1345
1433
  resolved = _resolve_dead_code_project(project_name, projects)
1346
1434
  if resolved is not None:
1347
1435
  logger.info(ls.DEADCODE_SCANNING.format(project_name=resolved))
1348
- rows = collect_dead_code(
1436
+ rows, structural_tier_symbols = collect_dead_code_with_coverage(
1349
1437
  ingestor,
1350
1438
  resolved,
1351
1439
  _dead_code_config(
@@ -1371,7 +1459,9 @@ def dead_code(
1371
1459
  candidates = [
1372
1460
  _to_dead_code_row(row) for row in _filter_excluded_rows(rows, exclude)
1373
1461
  ]
1374
- _emit_dead_code(candidates, output_format, output, resolved)
1462
+ _emit_dead_code(
1463
+ candidates, output_format, output, resolved, structural_tier_symbols
1464
+ )
1375
1465
 
1376
1466
  if fail_on_found and candidates:
1377
1467
  raise typer.Exit(1)
@@ -351,3 +351,13 @@ CLI_COMMANDS: dict[CLICommandName, str] = {
351
351
  CLICommandName.DOCTOR: CMD_DOCTOR,
352
352
  CLICommandName.HELP: CMD_HELP,
353
353
  }
354
+ CMD_VERIFY_INDEX = "Verify a protobuf index against its provenance manifest"
355
+ HELP_VERIFY_INDEX_DIR = "Directory holding the index artifacts and manifest.json."
356
+ HELP_TRUSTED_MANIFEST_SHA = (
357
+ "Externally trusted sha256 of manifest.json (e.g. from an attestation); "
358
+ "anchors verification beyond local self-consistency."
359
+ )
360
+ CMD_DIFF_INDEX = "Structural diff between two protobuf index snapshots"
361
+ HELP_DIFF_OLD = "Directory holding the OLD snapshot artifacts."
362
+ HELP_DIFF_NEW = "Directory holding the NEW snapshot artifacts."
363
+ HELP_DIFF_JSON_OUT = "Write the JSON delta to FILE instead of stdout."
@@ -212,6 +212,9 @@ class AppConfig(BaseSettings):
212
212
  # augments exact first-party call binding and external-site suppression;
213
213
  # tree-sitter stays the standalone-correct backbone.
214
214
  GO_FRONTEND: cs.GoFrontend = cs.GoFrontend.AUTO
215
+ PYTHON_FRONTEND: cs.PythonFrontend = cs.PythonFrontend.HEURISTIC
216
+ JAVA_FRONTEND: cs.JavaFrontend = cs.JavaFrontend.HEURISTIC
217
+ LOMBOK_JAR: str | None = None
215
218
  CAPTURE_FUNCTION_LOCAL_DEFINITIONS: bool = Field(
216
219
  True, validation_alias="CGR_CAPTURE_LOCAL_DEFINITIONS"
217
220
  )
@@ -312,3 +312,29 @@ CSHARP_RESERVED_KEYWORDS = frozenset(
312
312
  "while",
313
313
  }
314
314
  )
315
+
316
+
317
+ # Await plumbing that returns the SAME value in a different wrapper: the flow
318
+ # walk recurses a method-call receiver only through these, so without them
319
+ # `await FetchAsync().ConfigureAwait(false)` loses the receiver's taint and a
320
+ # sink fed from it has no edge. `ConfigureAwait` is near-universal in library
321
+ # code, so this shape is common rather than exotic (issue #1187).
322
+ CSHARP_TAINT_TRANSPARENT_METHODS = frozenset(
323
+ {
324
+ "ConfigureAwait",
325
+ "GetAwaiter",
326
+ "GetResult",
327
+ "AsTask",
328
+ }
329
+ )
330
+
331
+
332
+ # Deconstructing declaration: `var (a, b) = (x, y)` binds through a pattern
333
+ # child and a tuple child rather than the usual name/value fields.
334
+ TS_CSHARP_TUPLE_PATTERN = "tuple_pattern"
335
+ TS_CSHARP_TUPLE_EXPRESSION = "tuple_expression"
336
+ TS_CSHARP_DECLARATION_EXPRESSION = "declaration_expression"
337
+ # `if (o is string s)` binds `s` to the SUBJECT's value, so taint has to cross
338
+ # the pattern or the bound name looks clean inside the branch.
339
+ TS_CSHARP_IS_PATTERN = "is_pattern_expression"
340
+ TS_CSHARP_DECLARATION_PATTERN = "declaration_pattern"
@@ -23,6 +23,10 @@ TS_DART_LABEL = "label"
23
23
  # Python's `conditional_expression` node TYPE but orders operands
24
24
  # [condition, consequence, alternative], not [body, condition, alternative].
25
25
  TS_DART_LIST_LITERAL = "list_literal"
26
+ # `await expr` parses as unary_expression > await_expression > chain; the
27
+ # awaited value carries the chain's taint and handle (issue #1224).
28
+ TS_DART_UNARY_EXPRESSION = "unary_expression"
29
+ TS_DART_AWAIT_EXPRESSION = "await_expression"
26
30
  TS_DART_SET_OR_MAP_LITERAL = "set_or_map_literal"
27
31
  # Inside a set_or_map_literal: a MAP entry is a `pair` whose `value` field
28
32
  # holds the stored expression; `type_arguments` (`<String, T>{...}`) carry
@@ -65,6 +69,7 @@ DART_PATTERN_NODE_SUFFIX = "_pattern"
65
69
  # swallows a trailing ternary as its LAST named child.
66
70
  DART_EXPRESSION_NODE_SUFFIX = "_expression"
67
71
  TS_DART_FUNCTION_EXPRESSION = "function_expression"
72
+ TS_DART_FUNCTION_EXPRESSION_BODY = "function_expression_body"
68
73
  TS_DART_LOCAL_FUNCTION_DECLARATION = "local_function_declaration"
69
74
 
70
75
  # Nodes opening their OWN variable scope: the local-type walk must not descend,
@@ -93,6 +98,8 @@ TS_DART_FORMAL_PARAMETER_LIST = "formal_parameter_list"
93
98
  TS_DART_SWITCH_STATEMENT_CASE = "switch_statement_case"
94
99
  TS_DART_SWITCH_STATEMENT_DEFAULT = "switch_statement_default"
95
100
  TS_DART_TEMPLATE_SUBSTITUTION = "template_substitution"
101
+ # The bare `$name` interpolation form wraps its name in this node type.
102
+ TS_DART_IDENTIFIER_DOLLAR_ESCAPED = "identifier_dollar_escaped"
96
103
  # `[String m]` (optional positional) and `{String? m}` (named) both wrap their
97
104
  # `formal_parameter`s in an `optional_formal_parameters` node (issue #1173).
98
105
  TS_DART_OPTIONAL_FORMAL_PARAMETERS = "optional_formal_parameters"