code-graph-rag 0.0.534__tar.gz → 0.0.589__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 (274) hide show
  1. {code_graph_rag-0.0.534/code_graph_rag.egg-info → code_graph_rag-0.0.589}/PKG-INFO +6 -7
  2. {code_graph_rag-0.0.534 → code_graph_rag-0.0.589}/PYPI_README.md +4 -4
  3. {code_graph_rag-0.0.534 → code_graph_rag-0.0.589}/README.md +7 -1
  4. {code_graph_rag-0.0.534 → code_graph_rag-0.0.589/code_graph_rag.egg-info}/PKG-INFO +6 -7
  5. {code_graph_rag-0.0.534 → code_graph_rag-0.0.589}/code_graph_rag.egg-info/SOURCES.txt +2 -0
  6. {code_graph_rag-0.0.534 → code_graph_rag-0.0.589}/code_graph_rag.egg-info/requires.txt +1 -2
  7. {code_graph_rag-0.0.534 → code_graph_rag-0.0.589}/codebase_rag/cli.py +83 -0
  8. {code_graph_rag-0.0.534 → code_graph_rag-0.0.589}/codebase_rag/cli_help.py +8 -3
  9. {code_graph_rag-0.0.534 → code_graph_rag-0.0.589}/codebase_rag/constants/ast_java.py +5 -0
  10. {code_graph_rag-0.0.534 → code_graph_rag-0.0.589}/codebase_rag/constants/ast_js.py +11 -0
  11. {code_graph_rag-0.0.534 → code_graph_rag-0.0.589}/codebase_rag/constants/ast_rust.py +130 -0
  12. {code_graph_rag-0.0.534 → code_graph_rag-0.0.589}/codebase_rag/constants/cli.py +16 -0
  13. {code_graph_rag-0.0.534 → code_graph_rag-0.0.589}/codebase_rag/constants/core.py +4 -0
  14. {code_graph_rag-0.0.534 → code_graph_rag-0.0.589}/codebase_rag/constants/deadcode_roots.py +23 -0
  15. {code_graph_rag-0.0.534 → code_graph_rag-0.0.589}/codebase_rag/constants/fqn_specs.py +12 -0
  16. {code_graph_rag-0.0.534 → code_graph_rag-0.0.589}/codebase_rag/constants/graph.py +4 -0
  17. {code_graph_rag-0.0.534 → code_graph_rag-0.0.589}/codebase_rag/constants/mcp.py +3 -0
  18. {code_graph_rag-0.0.534 → code_graph_rag-0.0.589}/codebase_rag/constants/providers.py +2 -0
  19. {code_graph_rag-0.0.534 → code_graph_rag-0.0.589}/codebase_rag/dead_code.py +52 -9
  20. code_graph_rag-0.0.589/codebase_rag/docker-compose.yaml +31 -0
  21. code_graph_rag-0.0.589/codebase_rag/flow_verdict.py +120 -0
  22. {code_graph_rag-0.0.534 → code_graph_rag-0.0.589}/codebase_rag/function_registry.py +20 -1
  23. {code_graph_rag-0.0.534 → code_graph_rag-0.0.589}/codebase_rag/graph_updater.py +85 -28
  24. {code_graph_rag-0.0.534 → code_graph_rag-0.0.589}/codebase_rag/logs.py +21 -0
  25. {code_graph_rag-0.0.534 → code_graph_rag-0.0.589}/codebase_rag/main.py +21 -14
  26. {code_graph_rag-0.0.534 → code_graph_rag-0.0.589}/codebase_rag/mcp/server.py +11 -0
  27. {code_graph_rag-0.0.534 → code_graph_rag-0.0.589}/codebase_rag/mcp/tools.py +44 -0
  28. {code_graph_rag-0.0.534 → code_graph_rag-0.0.589}/codebase_rag/parsers/call_processor.py +85 -18
  29. {code_graph_rag-0.0.534 → code_graph_rag-0.0.589}/codebase_rag/parsers/call_resolver.py +229 -49
  30. {code_graph_rag-0.0.534 → code_graph_rag-0.0.589}/codebase_rag/parsers/class_ingest/method_override.py +77 -17
  31. {code_graph_rag-0.0.534 → code_graph_rag-0.0.589}/codebase_rag/parsers/class_ingest/mixin.py +302 -13
  32. {code_graph_rag-0.0.534 → code_graph_rag-0.0.589}/codebase_rag/parsers/cpp_frontend/frontend.py +19 -2
  33. {code_graph_rag-0.0.534 → code_graph_rag-0.0.589}/codebase_rag/parsers/cpp_frontend/qn.py +46 -12
  34. {code_graph_rag-0.0.534 → code_graph_rag-0.0.589}/codebase_rag/parsers/csharp/utils.py +16 -0
  35. {code_graph_rag-0.0.534 → code_graph_rag-0.0.589}/codebase_rag/parsers/definition_processor.py +49 -2
  36. {code_graph_rag-0.0.534 → code_graph_rag-0.0.589}/codebase_rag/parsers/factory.py +9 -1
  37. {code_graph_rag-0.0.534 → code_graph_rag-0.0.589}/codebase_rag/parsers/function_ingest.py +95 -12
  38. {code_graph_rag-0.0.534 → code_graph_rag-0.0.589}/codebase_rag/parsers/import_processor.py +1123 -88
  39. {code_graph_rag-0.0.534 → code_graph_rag-0.0.589}/codebase_rag/parsers/io_access/__init__.py +2 -0
  40. {code_graph_rag-0.0.534 → code_graph_rag-0.0.589}/codebase_rag/parsers/io_access/registry.py +6 -0
  41. {code_graph_rag-0.0.534 → code_graph_rag-0.0.589}/codebase_rag/parsers/js_ts/ingest.py +5 -3
  42. {code_graph_rag-0.0.534 → code_graph_rag-0.0.589}/codebase_rag/parsers/js_ts/utils.py +13 -6
  43. code_graph_rag-0.0.589/codebase_rag/parsers/rs/type_inference.py +828 -0
  44. {code_graph_rag-0.0.534 → code_graph_rag-0.0.589}/codebase_rag/parsers/rs/utils.py +255 -17
  45. {code_graph_rag-0.0.534 → code_graph_rag-0.0.589}/codebase_rag/parsers/type_inference.py +183 -9
  46. {code_graph_rag-0.0.534 → code_graph_rag-0.0.589}/codebase_rag/parsers/utils.py +11 -3
  47. {code_graph_rag-0.0.534 → code_graph_rag-0.0.589}/codebase_rag/providers/base.py +7 -4
  48. {code_graph_rag-0.0.534 → code_graph_rag-0.0.589}/codebase_rag/readme_sections.py +4 -2
  49. {code_graph_rag-0.0.534 → code_graph_rag-0.0.589}/codebase_rag/stack/constants.py +11 -0
  50. {code_graph_rag-0.0.534 → code_graph_rag-0.0.589}/codebase_rag/stack/manager.py +77 -0
  51. {code_graph_rag-0.0.534 → code_graph_rag-0.0.589}/codebase_rag/tool_errors.py +8 -0
  52. {code_graph_rag-0.0.534 → code_graph_rag-0.0.589}/codebase_rag/tools/tool_descriptions.py +25 -0
  53. code_graph_rag-0.0.589/codebase_rag/tools/web_search.py +288 -0
  54. {code_graph_rag-0.0.534 → code_graph_rag-0.0.589}/codebase_rag/types_defs.py +65 -3
  55. {code_graph_rag-0.0.534 → code_graph_rag-0.0.589}/codebase_rag/utils/dependencies.py +29 -0
  56. {code_graph_rag-0.0.534 → code_graph_rag-0.0.589}/codebase_rag/utils/path_utils.py +41 -0
  57. {code_graph_rag-0.0.534 → code_graph_rag-0.0.589}/codec/schema_pb2.py +26 -26
  58. {code_graph_rag-0.0.534 → code_graph_rag-0.0.589}/codec/schema_pb2.pyi +4 -2
  59. {code_graph_rag-0.0.534 → code_graph_rag-0.0.589}/pyproject.toml +2 -8
  60. code_graph_rag-0.0.534/codebase_rag/docker-compose.yaml +0 -27
  61. code_graph_rag-0.0.534/codebase_rag/parsers/rs/type_inference.py +0 -329
  62. {code_graph_rag-0.0.534 → code_graph_rag-0.0.589}/LICENSE +0 -0
  63. {code_graph_rag-0.0.534 → code_graph_rag-0.0.589}/cgr/__init__.py +0 -0
  64. {code_graph_rag-0.0.534 → code_graph_rag-0.0.589}/code_graph_rag.egg-info/dependency_links.txt +0 -0
  65. {code_graph_rag-0.0.534 → code_graph_rag-0.0.589}/code_graph_rag.egg-info/entry_points.txt +0 -0
  66. {code_graph_rag-0.0.534 → code_graph_rag-0.0.589}/code_graph_rag.egg-info/top_level.txt +0 -0
  67. {code_graph_rag-0.0.534 → code_graph_rag-0.0.589}/codebase_rag/__init__.py +0 -0
  68. {code_graph_rag-0.0.534 → code_graph_rag-0.0.589}/codebase_rag/analyzers/__init__.py +0 -0
  69. {code_graph_rag-0.0.534 → code_graph_rag-0.0.589}/codebase_rag/analyzers/ast_grep_analyzer.py +0 -0
  70. {code_graph_rag-0.0.534 → code_graph_rag-0.0.589}/codebase_rag/analyzers/ast_grep_rules/patterns/c.yaml +0 -0
  71. {code_graph_rag-0.0.534 → code_graph_rag-0.0.589}/codebase_rag/analyzers/ast_grep_rules/patterns/cpp.yaml +0 -0
  72. {code_graph_rag-0.0.534 → code_graph_rag-0.0.589}/codebase_rag/analyzers/ast_grep_rules/patterns/csharp.yaml +0 -0
  73. {code_graph_rag-0.0.534 → code_graph_rag-0.0.589}/codebase_rag/analyzers/ast_grep_rules/patterns/dart.yaml +0 -0
  74. {code_graph_rag-0.0.534 → code_graph_rag-0.0.589}/codebase_rag/analyzers/ast_grep_rules/patterns/go.yaml +0 -0
  75. {code_graph_rag-0.0.534 → code_graph_rag-0.0.589}/codebase_rag/analyzers/ast_grep_rules/patterns/java.yaml +0 -0
  76. {code_graph_rag-0.0.534 → code_graph_rag-0.0.589}/codebase_rag/analyzers/ast_grep_rules/patterns/javascript.yaml +0 -0
  77. {code_graph_rag-0.0.534 → code_graph_rag-0.0.589}/codebase_rag/analyzers/ast_grep_rules/patterns/lua.yaml +0 -0
  78. {code_graph_rag-0.0.534 → code_graph_rag-0.0.589}/codebase_rag/analyzers/ast_grep_rules/patterns/php.yaml +0 -0
  79. {code_graph_rag-0.0.534 → code_graph_rag-0.0.589}/codebase_rag/analyzers/ast_grep_rules/patterns/python.yaml +0 -0
  80. {code_graph_rag-0.0.534 → code_graph_rag-0.0.589}/codebase_rag/analyzers/ast_grep_rules/patterns/ruby.yaml +0 -0
  81. {code_graph_rag-0.0.534 → code_graph_rag-0.0.589}/codebase_rag/analyzers/ast_grep_rules/patterns/rust.yaml +0 -0
  82. {code_graph_rag-0.0.534 → code_graph_rag-0.0.589}/codebase_rag/analyzers/ast_grep_rules/patterns/scala.yaml +0 -0
  83. {code_graph_rag-0.0.534 → code_graph_rag-0.0.589}/codebase_rag/analyzers/ast_grep_rules/patterns/tsx.yaml +0 -0
  84. {code_graph_rag-0.0.534 → code_graph_rag-0.0.589}/codebase_rag/analyzers/ast_grep_rules/patterns/typescript.yaml +0 -0
  85. {code_graph_rag-0.0.534 → code_graph_rag-0.0.589}/codebase_rag/analyzers/ast_grep_rules/security/c.yaml +0 -0
  86. {code_graph_rag-0.0.534 → code_graph_rag-0.0.589}/codebase_rag/analyzers/ast_grep_rules/security/cpp.yaml +0 -0
  87. {code_graph_rag-0.0.534 → code_graph_rag-0.0.589}/codebase_rag/analyzers/ast_grep_rules/security/csharp.yaml +0 -0
  88. {code_graph_rag-0.0.534 → code_graph_rag-0.0.589}/codebase_rag/analyzers/ast_grep_rules/security/dart.yaml +0 -0
  89. {code_graph_rag-0.0.534 → code_graph_rag-0.0.589}/codebase_rag/analyzers/ast_grep_rules/security/go.yaml +0 -0
  90. {code_graph_rag-0.0.534 → code_graph_rag-0.0.589}/codebase_rag/analyzers/ast_grep_rules/security/java.yaml +0 -0
  91. {code_graph_rag-0.0.534 → code_graph_rag-0.0.589}/codebase_rag/analyzers/ast_grep_rules/security/javascript.yaml +0 -0
  92. {code_graph_rag-0.0.534 → code_graph_rag-0.0.589}/codebase_rag/analyzers/ast_grep_rules/security/lua.yaml +0 -0
  93. {code_graph_rag-0.0.534 → code_graph_rag-0.0.589}/codebase_rag/analyzers/ast_grep_rules/security/php.yaml +0 -0
  94. {code_graph_rag-0.0.534 → code_graph_rag-0.0.589}/codebase_rag/analyzers/ast_grep_rules/security/python.yaml +0 -0
  95. {code_graph_rag-0.0.534 → code_graph_rag-0.0.589}/codebase_rag/analyzers/ast_grep_rules/security/ruby.yaml +0 -0
  96. {code_graph_rag-0.0.534 → code_graph_rag-0.0.589}/codebase_rag/analyzers/ast_grep_rules/security/rust.yaml +0 -0
  97. {code_graph_rag-0.0.534 → code_graph_rag-0.0.589}/codebase_rag/analyzers/ast_grep_rules/security/scala.yaml +0 -0
  98. {code_graph_rag-0.0.534 → code_graph_rag-0.0.589}/codebase_rag/analyzers/ast_grep_rules/security/tsx.yaml +0 -0
  99. {code_graph_rag-0.0.534 → code_graph_rag-0.0.589}/codebase_rag/analyzers/ast_grep_rules/security/typescript.yaml +0 -0
  100. {code_graph_rag-0.0.534 → code_graph_rag-0.0.589}/codebase_rag/analyzers/ast_grep_rules/smells/c.yaml +0 -0
  101. {code_graph_rag-0.0.534 → code_graph_rag-0.0.589}/codebase_rag/analyzers/ast_grep_rules/smells/cpp.yaml +0 -0
  102. {code_graph_rag-0.0.534 → code_graph_rag-0.0.589}/codebase_rag/analyzers/ast_grep_rules/smells/csharp.yaml +0 -0
  103. {code_graph_rag-0.0.534 → code_graph_rag-0.0.589}/codebase_rag/analyzers/ast_grep_rules/smells/dart.yaml +0 -0
  104. {code_graph_rag-0.0.534 → code_graph_rag-0.0.589}/codebase_rag/analyzers/ast_grep_rules/smells/go.yaml +0 -0
  105. {code_graph_rag-0.0.534 → code_graph_rag-0.0.589}/codebase_rag/analyzers/ast_grep_rules/smells/java.yaml +0 -0
  106. {code_graph_rag-0.0.534 → code_graph_rag-0.0.589}/codebase_rag/analyzers/ast_grep_rules/smells/javascript.yaml +0 -0
  107. {code_graph_rag-0.0.534 → code_graph_rag-0.0.589}/codebase_rag/analyzers/ast_grep_rules/smells/lua.yaml +0 -0
  108. {code_graph_rag-0.0.534 → code_graph_rag-0.0.589}/codebase_rag/analyzers/ast_grep_rules/smells/php.yaml +0 -0
  109. {code_graph_rag-0.0.534 → code_graph_rag-0.0.589}/codebase_rag/analyzers/ast_grep_rules/smells/python.yaml +0 -0
  110. {code_graph_rag-0.0.534 → code_graph_rag-0.0.589}/codebase_rag/analyzers/ast_grep_rules/smells/ruby.yaml +0 -0
  111. {code_graph_rag-0.0.534 → code_graph_rag-0.0.589}/codebase_rag/analyzers/ast_grep_rules/smells/rust.yaml +0 -0
  112. {code_graph_rag-0.0.534 → code_graph_rag-0.0.589}/codebase_rag/analyzers/ast_grep_rules/smells/scala.yaml +0 -0
  113. {code_graph_rag-0.0.534 → code_graph_rag-0.0.589}/codebase_rag/analyzers/ast_grep_rules/smells/tsx.yaml +0 -0
  114. {code_graph_rag-0.0.534 → code_graph_rag-0.0.589}/codebase_rag/analyzers/ast_grep_rules/smells/typescript.yaml +0 -0
  115. {code_graph_rag-0.0.534 → code_graph_rag-0.0.589}/codebase_rag/ast_cache.py +0 -0
  116. {code_graph_rag-0.0.534 → code_graph_rag-0.0.589}/codebase_rag/capture.py +0 -0
  117. {code_graph_rag-0.0.534 → code_graph_rag-0.0.589}/codebase_rag/cgr_state.py +0 -0
  118. {code_graph_rag-0.0.534 → code_graph_rag-0.0.589}/codebase_rag/config.py +0 -0
  119. {code_graph_rag-0.0.534 → code_graph_rag-0.0.589}/codebase_rag/constants/__init__.py +0 -0
  120. {code_graph_rag-0.0.534 → code_graph_rag-0.0.589}/codebase_rag/constants/ast_cpp.py +0 -0
  121. {code_graph_rag-0.0.534 → code_graph_rag-0.0.589}/codebase_rag/constants/ast_csharp.py +0 -0
  122. {code_graph_rag-0.0.534 → code_graph_rag-0.0.589}/codebase_rag/constants/ast_dart.py +0 -0
  123. {code_graph_rag-0.0.534 → code_graph_rag-0.0.589}/codebase_rag/constants/ast_go.py +0 -0
  124. {code_graph_rag-0.0.534 → code_graph_rag-0.0.589}/codebase_rag/constants/ast_lua.py +0 -0
  125. {code_graph_rag-0.0.534 → code_graph_rag-0.0.589}/codebase_rag/constants/ast_nodes.py +0 -0
  126. {code_graph_rag-0.0.534 → code_graph_rag-0.0.589}/codebase_rag/constants/ast_php.py +0 -0
  127. {code_graph_rag-0.0.534 → code_graph_rag-0.0.589}/codebase_rag/constants/ast_python.py +0 -0
  128. {code_graph_rag-0.0.534 → code_graph_rag-0.0.589}/codebase_rag/constants/ast_scala.py +0 -0
  129. {code_graph_rag-0.0.534 → code_graph_rag-0.0.589}/codebase_rag/constants/build.py +0 -0
  130. {code_graph_rag-0.0.534 → code_graph_rag-0.0.589}/codebase_rag/constants/deps.py +0 -0
  131. {code_graph_rag-0.0.534 → code_graph_rag-0.0.589}/codebase_rag/constants/health.py +0 -0
  132. {code_graph_rag-0.0.534 → code_graph_rag-0.0.589}/codebase_rag/constants/lang_tooling.py +0 -0
  133. {code_graph_rag-0.0.534 → code_graph_rag-0.0.589}/codebase_rag/constants/languages.py +0 -0
  134. {code_graph_rag-0.0.534 → code_graph_rag-0.0.589}/codebase_rag/constants/security.py +0 -0
  135. {code_graph_rag-0.0.534 → code_graph_rag-0.0.589}/codebase_rag/constants/stdlib_types.py +0 -0
  136. {code_graph_rag-0.0.534 → code_graph_rag-0.0.589}/codebase_rag/constants/structural.py +0 -0
  137. {code_graph_rag-0.0.534 → code_graph_rag-0.0.589}/codebase_rag/cypher_queries.py +0 -0
  138. {code_graph_rag-0.0.534 → code_graph_rag-0.0.589}/codebase_rag/decorators.py +0 -0
  139. {code_graph_rag-0.0.534 → code_graph_rag-0.0.589}/codebase_rag/embedder.py +0 -0
  140. {code_graph_rag-0.0.534 → code_graph_rag-0.0.589}/codebase_rag/exceptions.py +0 -0
  141. {code_graph_rag-0.0.534 → code_graph_rag-0.0.589}/codebase_rag/graph_audit.py +0 -0
  142. {code_graph_rag-0.0.534 → code_graph_rag-0.0.589}/codebase_rag/graph_loader.py +0 -0
  143. {code_graph_rag-0.0.534 → code_graph_rag-0.0.589}/codebase_rag/language_spec.py +0 -0
  144. {code_graph_rag-0.0.534 → code_graph_rag-0.0.589}/codebase_rag/mcp/__init__.py +0 -0
  145. {code_graph_rag-0.0.534 → code_graph_rag-0.0.589}/codebase_rag/mcp/client.py +0 -0
  146. {code_graph_rag-0.0.534 → code_graph_rag-0.0.589}/codebase_rag/models.py +0 -0
  147. {code_graph_rag-0.0.534 → code_graph_rag-0.0.589}/codebase_rag/parser_fingerprint.py +0 -0
  148. {code_graph_rag-0.0.534 → code_graph_rag-0.0.589}/codebase_rag/parser_loader.py +0 -0
  149. {code_graph_rag-0.0.534 → code_graph_rag-0.0.589}/codebase_rag/parsers/__init__.py +0 -0
  150. {code_graph_rag-0.0.534 → code_graph_rag-0.0.589}/codebase_rag/parsers/ast_grep_patterns/ruby.yaml +0 -0
  151. {code_graph_rag-0.0.534 → code_graph_rag-0.0.589}/codebase_rag/parsers/ast_grep_tier.py +0 -0
  152. {code_graph_rag-0.0.534 → code_graph_rag-0.0.589}/codebase_rag/parsers/class_ingest/__init__.py +0 -0
  153. {code_graph_rag-0.0.534 → code_graph_rag-0.0.589}/codebase_rag/parsers/class_ingest/cpp_modules.py +0 -0
  154. {code_graph_rag-0.0.534 → code_graph_rag-0.0.589}/codebase_rag/parsers/class_ingest/identity.py +0 -0
  155. {code_graph_rag-0.0.534 → code_graph_rag-0.0.589}/codebase_rag/parsers/class_ingest/node_type.py +0 -0
  156. {code_graph_rag-0.0.534 → code_graph_rag-0.0.589}/codebase_rag/parsers/class_ingest/parent_extraction.py +0 -0
  157. {code_graph_rag-0.0.534 → code_graph_rag-0.0.589}/codebase_rag/parsers/class_ingest/relationships.py +0 -0
  158. {code_graph_rag-0.0.534 → code_graph_rag-0.0.589}/codebase_rag/parsers/class_ingest/utils.py +0 -0
  159. {code_graph_rag-0.0.534 → code_graph_rag-0.0.589}/codebase_rag/parsers/contract_linking.py +0 -0
  160. {code_graph_rag-0.0.534 → code_graph_rag-0.0.589}/codebase_rag/parsers/contracts.py +0 -0
  161. {code_graph_rag-0.0.534 → code_graph_rag-0.0.589}/codebase_rag/parsers/cpp/__init__.py +0 -0
  162. {code_graph_rag-0.0.534 → code_graph_rag-0.0.589}/codebase_rag/parsers/cpp/preproc_recovery.py +0 -0
  163. {code_graph_rag-0.0.534 → code_graph_rag-0.0.589}/codebase_rag/parsers/cpp/type_inference.py +0 -0
  164. {code_graph_rag-0.0.534 → code_graph_rag-0.0.589}/codebase_rag/parsers/cpp/utils.py +0 -0
  165. {code_graph_rag-0.0.534 → code_graph_rag-0.0.589}/codebase_rag/parsers/cpp_frontend/__init__.py +0 -0
  166. {code_graph_rag-0.0.534 → code_graph_rag-0.0.589}/codebase_rag/parsers/cpp_frontend/constants.py +0 -0
  167. {code_graph_rag-0.0.534 → code_graph_rag-0.0.589}/codebase_rag/parsers/csharp/__init__.py +0 -0
  168. {code_graph_rag-0.0.534 → code_graph_rag-0.0.589}/codebase_rag/parsers/csharp/type_inference.py +0 -0
  169. {code_graph_rag-0.0.534 → code_graph_rag-0.0.589}/codebase_rag/parsers/csharp_frontend/__init__.py +0 -0
  170. {code_graph_rag-0.0.534 → code_graph_rag-0.0.589}/codebase_rag/parsers/csharp_frontend/frontend.py +0 -0
  171. {code_graph_rag-0.0.534 → code_graph_rag-0.0.589}/codebase_rag/parsers/csharp_frontend/roslyn/Frontend.cs +0 -0
  172. {code_graph_rag-0.0.534 → code_graph_rag-0.0.589}/codebase_rag/parsers/csharp_frontend/roslyn/Frontend.csproj +0 -0
  173. {code_graph_rag-0.0.534 → code_graph_rag-0.0.589}/codebase_rag/parsers/csharp_frontend/roslyn/Program.cs +0 -0
  174. {code_graph_rag-0.0.534 → code_graph_rag-0.0.589}/codebase_rag/parsers/dart/__init__.py +0 -0
  175. {code_graph_rag-0.0.534 → code_graph_rag-0.0.589}/codebase_rag/parsers/dart/type_inference.py +0 -0
  176. {code_graph_rag-0.0.534 → code_graph_rag-0.0.589}/codebase_rag/parsers/dart/utils.py +0 -0
  177. {code_graph_rag-0.0.534 → code_graph_rag-0.0.589}/codebase_rag/parsers/dependency_parser.py +0 -0
  178. {code_graph_rag-0.0.534 → code_graph_rag-0.0.589}/codebase_rag/parsers/dispatch_registry.py +0 -0
  179. {code_graph_rag-0.0.534 → code_graph_rag-0.0.589}/codebase_rag/parsers/endpoint_prefixes.py +0 -0
  180. {code_graph_rag-0.0.534 → code_graph_rag-0.0.589}/codebase_rag/parsers/endpoint_routes.py +0 -0
  181. {code_graph_rag-0.0.534 → code_graph_rag-0.0.589}/codebase_rag/parsers/endpoints.py +0 -0
  182. {code_graph_rag-0.0.534 → code_graph_rag-0.0.589}/codebase_rag/parsers/export_detection.py +0 -0
  183. {code_graph_rag-0.0.534 → code_graph_rag-0.0.589}/codebase_rag/parsers/flow_access/__init__.py +0 -0
  184. {code_graph_rag-0.0.534 → code_graph_rag-0.0.589}/codebase_rag/parsers/flow_access/constants.py +0 -0
  185. {code_graph_rag-0.0.534 → code_graph_rag-0.0.589}/codebase_rag/parsers/flow_access/processor.py +0 -0
  186. {code_graph_rag-0.0.534 → code_graph_rag-0.0.589}/codebase_rag/parsers/go/__init__.py +0 -0
  187. {code_graph_rag-0.0.534 → code_graph_rag-0.0.589}/codebase_rag/parsers/go/module_paths.py +0 -0
  188. {code_graph_rag-0.0.534 → code_graph_rag-0.0.589}/codebase_rag/parsers/go/type_inference.py +0 -0
  189. {code_graph_rag-0.0.534 → code_graph_rag-0.0.589}/codebase_rag/parsers/go/utils.py +0 -0
  190. {code_graph_rag-0.0.534 → code_graph_rag-0.0.589}/codebase_rag/parsers/handlers/__init__.py +0 -0
  191. {code_graph_rag-0.0.534 → code_graph_rag-0.0.589}/codebase_rag/parsers/handlers/base.py +0 -0
  192. {code_graph_rag-0.0.534 → code_graph_rag-0.0.589}/codebase_rag/parsers/handlers/cpp.py +0 -0
  193. {code_graph_rag-0.0.534 → code_graph_rag-0.0.589}/codebase_rag/parsers/handlers/java.py +0 -0
  194. {code_graph_rag-0.0.534 → code_graph_rag-0.0.589}/codebase_rag/parsers/handlers/js_ts.py +0 -0
  195. {code_graph_rag-0.0.534 → code_graph_rag-0.0.589}/codebase_rag/parsers/handlers/lua.py +0 -0
  196. {code_graph_rag-0.0.534 → code_graph_rag-0.0.589}/codebase_rag/parsers/handlers/php.py +0 -0
  197. {code_graph_rag-0.0.534 → code_graph_rag-0.0.589}/codebase_rag/parsers/handlers/protocol.py +0 -0
  198. {code_graph_rag-0.0.534 → code_graph_rag-0.0.589}/codebase_rag/parsers/handlers/python.py +0 -0
  199. {code_graph_rag-0.0.534 → code_graph_rag-0.0.589}/codebase_rag/parsers/handlers/registry.py +0 -0
  200. {code_graph_rag-0.0.534 → code_graph_rag-0.0.589}/codebase_rag/parsers/handlers/rust.py +0 -0
  201. {code_graph_rag-0.0.534 → code_graph_rag-0.0.589}/codebase_rag/parsers/io_access/constants.py +0 -0
  202. {code_graph_rag-0.0.534 → code_graph_rag-0.0.589}/codebase_rag/parsers/io_access/descriptor.py +0 -0
  203. {code_graph_rag-0.0.534 → code_graph_rag-0.0.589}/codebase_rag/parsers/io_access/extract.py +0 -0
  204. {code_graph_rag-0.0.534 → code_graph_rag-0.0.589}/codebase_rag/parsers/io_access/models.py +0 -0
  205. {code_graph_rag-0.0.534 → code_graph_rag-0.0.589}/codebase_rag/parsers/io_access/processor.py +0 -0
  206. {code_graph_rag-0.0.534 → code_graph_rag-0.0.589}/codebase_rag/parsers/java/__init__.py +0 -0
  207. {code_graph_rag-0.0.534 → code_graph_rag-0.0.589}/codebase_rag/parsers/java/method_resolver.py +0 -0
  208. {code_graph_rag-0.0.534 → code_graph_rag-0.0.589}/codebase_rag/parsers/java/type_inference.py +0 -0
  209. {code_graph_rag-0.0.534 → code_graph_rag-0.0.589}/codebase_rag/parsers/java/type_resolver.py +0 -0
  210. {code_graph_rag-0.0.534 → code_graph_rag-0.0.589}/codebase_rag/parsers/java/utils.py +0 -0
  211. {code_graph_rag-0.0.534 → code_graph_rag-0.0.589}/codebase_rag/parsers/java/variable_analyzer.py +0 -0
  212. {code_graph_rag-0.0.534 → code_graph_rag-0.0.589}/codebase_rag/parsers/js_ts/__init__.py +0 -0
  213. {code_graph_rag-0.0.534 → code_graph_rag-0.0.589}/codebase_rag/parsers/js_ts/module_paths.py +0 -0
  214. {code_graph_rag-0.0.534 → code_graph_rag-0.0.589}/codebase_rag/parsers/js_ts/module_system.py +0 -0
  215. {code_graph_rag-0.0.534 → code_graph_rag-0.0.589}/codebase_rag/parsers/js_ts/type_inference.py +0 -0
  216. {code_graph_rag-0.0.534 → code_graph_rag-0.0.589}/codebase_rag/parsers/lua/__init__.py +0 -0
  217. {code_graph_rag-0.0.534 → code_graph_rag-0.0.589}/codebase_rag/parsers/lua/type_inference.py +0 -0
  218. {code_graph_rag-0.0.534 → code_graph_rag-0.0.589}/codebase_rag/parsers/lua/utils.py +0 -0
  219. {code_graph_rag-0.0.534 → code_graph_rag-0.0.589}/codebase_rag/parsers/py/__init__.py +0 -0
  220. {code_graph_rag-0.0.534 → code_graph_rag-0.0.589}/codebase_rag/parsers/py/ast_analyzer.py +0 -0
  221. {code_graph_rag-0.0.534 → code_graph_rag-0.0.589}/codebase_rag/parsers/py/expression_analyzer.py +0 -0
  222. {code_graph_rag-0.0.534 → code_graph_rag-0.0.589}/codebase_rag/parsers/py/type_inference.py +0 -0
  223. {code_graph_rag-0.0.534 → code_graph_rag-0.0.589}/codebase_rag/parsers/py/utils.py +0 -0
  224. {code_graph_rag-0.0.534 → code_graph_rag-0.0.589}/codebase_rag/parsers/py/variable_analyzer.py +0 -0
  225. {code_graph_rag-0.0.534 → code_graph_rag-0.0.589}/codebase_rag/parsers/python_source_roots.py +0 -0
  226. {code_graph_rag-0.0.534 → code_graph_rag-0.0.589}/codebase_rag/parsers/rpc_exposure.py +0 -0
  227. {code_graph_rag-0.0.534 → code_graph_rag-0.0.589}/codebase_rag/parsers/rs/__init__.py +0 -0
  228. {code_graph_rag-0.0.534 → code_graph_rag-0.0.589}/codebase_rag/parsers/stdlib_extractor.py +0 -0
  229. {code_graph_rag-0.0.534 → code_graph_rag-0.0.589}/codebase_rag/parsers/structure_processor.py +0 -0
  230. {code_graph_rag-0.0.534 → code_graph_rag-0.0.589}/codebase_rag/path_filters.py +0 -0
  231. {code_graph_rag-0.0.534 → code_graph_rag-0.0.589}/codebase_rag/prompts.py +0 -0
  232. {code_graph_rag-0.0.534 → code_graph_rag-0.0.589}/codebase_rag/providers/__init__.py +0 -0
  233. {code_graph_rag-0.0.534 → code_graph_rag-0.0.589}/codebase_rag/providers/litellm.py +0 -0
  234. {code_graph_rag-0.0.534 → code_graph_rag-0.0.589}/codebase_rag/schema_builder.py +0 -0
  235. {code_graph_rag-0.0.534 → code_graph_rag-0.0.589}/codebase_rag/schemas.py +0 -0
  236. {code_graph_rag-0.0.534 → code_graph_rag-0.0.589}/codebase_rag/services/__init__.py +0 -0
  237. {code_graph_rag-0.0.534 → code_graph_rag-0.0.589}/codebase_rag/services/anthropic_token_counter.py +0 -0
  238. {code_graph_rag-0.0.534 → code_graph_rag-0.0.589}/codebase_rag/services/filtering.py +0 -0
  239. {code_graph_rag-0.0.534 → code_graph_rag-0.0.589}/codebase_rag/services/graph_service.py +0 -0
  240. {code_graph_rag-0.0.534 → code_graph_rag-0.0.589}/codebase_rag/services/llm.py +0 -0
  241. {code_graph_rag-0.0.534 → code_graph_rag-0.0.589}/codebase_rag/services/protobuf_service.py +0 -0
  242. {code_graph_rag-0.0.534 → code_graph_rag-0.0.589}/codebase_rag/services/resource_cleanup.py +0 -0
  243. {code_graph_rag-0.0.534 → code_graph_rag-0.0.589}/codebase_rag/services/usage_cost.py +0 -0
  244. {code_graph_rag-0.0.534 → code_graph_rag-0.0.589}/codebase_rag/stack/__init__.py +0 -0
  245. {code_graph_rag-0.0.534 → code_graph_rag-0.0.589}/codebase_rag/stack/cli.py +0 -0
  246. {code_graph_rag-0.0.534 → code_graph_rag-0.0.589}/codebase_rag/stack/health.py +0 -0
  247. {code_graph_rag-0.0.534 → code_graph_rag-0.0.589}/codebase_rag/tools/__init__.py +0 -0
  248. {code_graph_rag-0.0.534 → code_graph_rag-0.0.589}/codebase_rag/tools/ast_grep_service.py +0 -0
  249. {code_graph_rag-0.0.534 → code_graph_rag-0.0.589}/codebase_rag/tools/code_retrieval.py +0 -0
  250. {code_graph_rag-0.0.534 → code_graph_rag-0.0.589}/codebase_rag/tools/codebase_query.py +0 -0
  251. {code_graph_rag-0.0.534 → code_graph_rag-0.0.589}/codebase_rag/tools/directory_lister.py +0 -0
  252. {code_graph_rag-0.0.534 → code_graph_rag-0.0.589}/codebase_rag/tools/file_editor.py +0 -0
  253. {code_graph_rag-0.0.534 → code_graph_rag-0.0.589}/codebase_rag/tools/file_reader.py +0 -0
  254. {code_graph_rag-0.0.534 → code_graph_rag-0.0.589}/codebase_rag/tools/file_writer.py +0 -0
  255. {code_graph_rag-0.0.534 → code_graph_rag-0.0.589}/codebase_rag/tools/health_checker.py +0 -0
  256. {code_graph_rag-0.0.534 → code_graph_rag-0.0.589}/codebase_rag/tools/language.py +0 -0
  257. {code_graph_rag-0.0.534 → code_graph_rag-0.0.589}/codebase_rag/tools/semantic_search.py +0 -0
  258. {code_graph_rag-0.0.534 → code_graph_rag-0.0.589}/codebase_rag/tools/shell_command.py +0 -0
  259. {code_graph_rag-0.0.534 → code_graph_rag-0.0.589}/codebase_rag/tools/structural_editor.py +0 -0
  260. {code_graph_rag-0.0.534 → code_graph_rag-0.0.589}/codebase_rag/tools/structural_search.py +0 -0
  261. {code_graph_rag-0.0.534 → code_graph_rag-0.0.589}/codebase_rag/unixcoder.py +0 -0
  262. {code_graph_rag-0.0.534 → code_graph_rag-0.0.589}/codebase_rag/utils/__init__.py +0 -0
  263. {code_graph_rag-0.0.534 → code_graph_rag-0.0.589}/codebase_rag/utils/fqn_resolver.py +0 -0
  264. {code_graph_rag-0.0.534 → code_graph_rag-0.0.589}/codebase_rag/utils/rich_markdown.py +0 -0
  265. {code_graph_rag-0.0.534 → code_graph_rag-0.0.589}/codebase_rag/utils/source_extraction.py +0 -0
  266. {code_graph_rag-0.0.534 → code_graph_rag-0.0.589}/codebase_rag/utils/token_utils.py +0 -0
  267. {code_graph_rag-0.0.534 → code_graph_rag-0.0.589}/codebase_rag/vector_store.py +0 -0
  268. {code_graph_rag-0.0.534 → code_graph_rag-0.0.589}/codebase_rag/workspaces/__init__.py +0 -0
  269. {code_graph_rag-0.0.534 → code_graph_rag-0.0.589}/codebase_rag/workspaces/cli.py +0 -0
  270. {code_graph_rag-0.0.534 → code_graph_rag-0.0.589}/codebase_rag/workspaces/constants.py +0 -0
  271. {code_graph_rag-0.0.534 → code_graph_rag-0.0.589}/codebase_rag/workspaces/models.py +0 -0
  272. {code_graph_rag-0.0.534 → code_graph_rag-0.0.589}/codebase_rag/workspaces/storage.py +0 -0
  273. {code_graph_rag-0.0.534 → code_graph_rag-0.0.589}/codec/__init__.py +0 -0
  274. {code_graph_rag-0.0.534 → code_graph_rag-0.0.589}/setup.cfg +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: code-graph-rag
3
- Version: 0.0.534
3
+ Version: 0.0.589
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
@@ -20,7 +20,7 @@ Description-Content-Type: text/markdown
20
20
  License-File: LICENSE
21
21
  Requires-Dist: loguru>=0.7.3
22
22
  Requires-Dist: mcp>=1.28.1
23
- Requires-Dist: pydantic-ai>=1.102.0
23
+ Requires-Dist: pydantic-ai>=2.0.0
24
24
  Requires-Dist: pydantic-settings>=2.12.0
25
25
  Requires-Dist: pymgclient>=1.5.1
26
26
  Requires-Dist: python-dotenv>=1.2.1
@@ -37,7 +37,6 @@ Requires-Dist: click>=8.3.1
37
37
  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
- Requires-Dist: griffe<2,>=1.0
41
40
  Requires-Dist: pathspec>=1.0.4
42
41
  Provides-Extra: test
43
42
  Requires-Dist: pytest>=8.4.1; extra == "test"
@@ -256,8 +255,8 @@ print(f"Embedding dimension: {len(embedding)}")
256
255
  ```python
257
256
  from cgr import settings
258
257
 
259
- settings.set_orchestrator("openai", "gpt-4o", api_key="sk-...")
260
- settings.set_cypher("google", "gemini-2.5-flash", api_key="your-key")
258
+ settings.set_orchestrator("openai", "gpt-5.6-terra", api_key="sk-...")
259
+ settings.set_cypher("google", "gemini-3.5-flash-lite", api_key="your-key")
261
260
  ```
262
261
 
263
262
  ## Environment Variables
@@ -269,10 +268,10 @@ Configure via `.env` or environment variables:
269
268
  | `MEMGRAPH_HOST` | `localhost` | Memgraph hostname |
270
269
  | `MEMGRAPH_PORT` | `7687` | Memgraph port |
271
270
  | `ORCHESTRATOR_PROVIDER` | | Provider: `google`, `openai`, `anthropic`, `azure`, `ollama`, `minimax`, `litellm_proxy` |
272
- | `ORCHESTRATOR_MODEL` | | Model ID (e.g. `gpt-4o`, `gemini-2.5-pro`) |
271
+ | `ORCHESTRATOR_MODEL` | | Model ID (e.g. `gpt-5.6-terra`, `gemini-3.6-flash`, `claude-sonnet-5`, `qwen2.5-coder`) |
273
272
  | `ORCHESTRATOR_API_KEY` | | API key for the provider (not needed for `ollama`) |
274
273
  | `CYPHER_PROVIDER` | | Provider for Cypher generation |
275
- | `CYPHER_MODEL` | | Model ID for Cypher generation (e.g. `codellama`, `gpt-4o-mini`) |
274
+ | `CYPHER_MODEL` | | Model ID for Cypher generation (e.g. `qwen2.5-coder`, `gpt-5.6-luna`, `gemini-3.5-flash-lite`) |
276
275
  | `CYPHER_API_KEY` | | API key for Cypher provider (not needed for `ollama`) |
277
276
  | `TARGET_REPO_PATH` | `.` | Default repository path |
278
277
 
@@ -180,8 +180,8 @@ print(f"Embedding dimension: {len(embedding)}")
180
180
  ```python
181
181
  from cgr import settings
182
182
 
183
- settings.set_orchestrator("openai", "gpt-4o", api_key="sk-...")
184
- settings.set_cypher("google", "gemini-2.5-flash", api_key="your-key")
183
+ settings.set_orchestrator("openai", "gpt-5.6-terra", api_key="sk-...")
184
+ settings.set_cypher("google", "gemini-3.5-flash-lite", api_key="your-key")
185
185
  ```
186
186
 
187
187
  ## Environment Variables
@@ -193,10 +193,10 @@ Configure via `.env` or environment variables:
193
193
  | `MEMGRAPH_HOST` | `localhost` | Memgraph hostname |
194
194
  | `MEMGRAPH_PORT` | `7687` | Memgraph port |
195
195
  | `ORCHESTRATOR_PROVIDER` | | Provider: `google`, `openai`, `anthropic`, `azure`, `ollama`, `minimax`, `litellm_proxy` |
196
- | `ORCHESTRATOR_MODEL` | | Model ID (e.g. `gpt-4o`, `gemini-2.5-pro`) |
196
+ | `ORCHESTRATOR_MODEL` | | Model ID (e.g. `gpt-5.6-terra`, `gemini-3.6-flash`, `claude-sonnet-5`, `qwen2.5-coder`) |
197
197
  | `ORCHESTRATOR_API_KEY` | | API key for the provider (not needed for `ollama`) |
198
198
  | `CYPHER_PROVIDER` | | Provider for Cypher generation |
199
- | `CYPHER_MODEL` | | Model ID for Cypher generation (e.g. `codellama`, `gpt-4o-mini`) |
199
+ | `CYPHER_MODEL` | | Model ID for Cypher generation (e.g. `qwen2.5-coder`, `gpt-5.6-luna`, `gemini-3.5-flash-lite`) |
200
200
  | `CYPHER_API_KEY` | | API key for Cypher provider (not needed for `ollama`) |
201
201
  | `TARGET_REPO_PATH` | `.` | Default repository path |
202
202
 
@@ -129,10 +129,16 @@ You also need Docker (for Memgraph), `cmake`, and `ripgrep`. Full prerequisites,
129
129
  cgr daemon up
130
130
 
131
131
  # Parse a repository into the graph, then query it
132
- cgr start --repo-path /path/to/repo --update-graph --clean
132
+ cgr start --repo-path /path/to/repo --update-graph
133
133
  cgr start --repo-path /path/to/repo
134
134
  ```
135
135
 
136
+ Repeat the first command for each repository you want indexed; the graph is
137
+ shared, and syncing one project leaves the others alone. To start over from an
138
+ empty graph, add `--clean` — it deletes **every** project in the shared graph,
139
+ not just this one, and asks for confirmation first when other
140
+ projects would be destroyed.
141
+
136
142
  The [Quick Start](docs/getting-started/quickstart.md) guide walks through parsing, querying, and exporting in five minutes.
137
143
 
138
144
  ## MCP Server
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: code-graph-rag
3
- Version: 0.0.534
3
+ Version: 0.0.589
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
@@ -20,7 +20,7 @@ Description-Content-Type: text/markdown
20
20
  License-File: LICENSE
21
21
  Requires-Dist: loguru>=0.7.3
22
22
  Requires-Dist: mcp>=1.28.1
23
- Requires-Dist: pydantic-ai>=1.102.0
23
+ Requires-Dist: pydantic-ai>=2.0.0
24
24
  Requires-Dist: pydantic-settings>=2.12.0
25
25
  Requires-Dist: pymgclient>=1.5.1
26
26
  Requires-Dist: python-dotenv>=1.2.1
@@ -37,7 +37,6 @@ Requires-Dist: click>=8.3.1
37
37
  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
- Requires-Dist: griffe<2,>=1.0
41
40
  Requires-Dist: pathspec>=1.0.4
42
41
  Provides-Extra: test
43
42
  Requires-Dist: pytest>=8.4.1; extra == "test"
@@ -256,8 +255,8 @@ print(f"Embedding dimension: {len(embedding)}")
256
255
  ```python
257
256
  from cgr import settings
258
257
 
259
- settings.set_orchestrator("openai", "gpt-4o", api_key="sk-...")
260
- settings.set_cypher("google", "gemini-2.5-flash", api_key="your-key")
258
+ settings.set_orchestrator("openai", "gpt-5.6-terra", api_key="sk-...")
259
+ settings.set_cypher("google", "gemini-3.5-flash-lite", api_key="your-key")
261
260
  ```
262
261
 
263
262
  ## Environment Variables
@@ -269,10 +268,10 @@ Configure via `.env` or environment variables:
269
268
  | `MEMGRAPH_HOST` | `localhost` | Memgraph hostname |
270
269
  | `MEMGRAPH_PORT` | `7687` | Memgraph port |
271
270
  | `ORCHESTRATOR_PROVIDER` | | Provider: `google`, `openai`, `anthropic`, `azure`, `ollama`, `minimax`, `litellm_proxy` |
272
- | `ORCHESTRATOR_MODEL` | | Model ID (e.g. `gpt-4o`, `gemini-2.5-pro`) |
271
+ | `ORCHESTRATOR_MODEL` | | Model ID (e.g. `gpt-5.6-terra`, `gemini-3.6-flash`, `claude-sonnet-5`, `qwen2.5-coder`) |
273
272
  | `ORCHESTRATOR_API_KEY` | | API key for the provider (not needed for `ollama`) |
274
273
  | `CYPHER_PROVIDER` | | Provider for Cypher generation |
275
- | `CYPHER_MODEL` | | Model ID for Cypher generation (e.g. `codellama`, `gpt-4o-mini`) |
274
+ | `CYPHER_MODEL` | | Model ID for Cypher generation (e.g. `qwen2.5-coder`, `gpt-5.6-luna`, `gemini-3.5-flash-lite`) |
276
275
  | `CYPHER_API_KEY` | | API key for Cypher provider (not needed for `ollama`) |
277
276
  | `TARGET_REPO_PATH` | `.` | Default repository path |
278
277
 
@@ -22,6 +22,7 @@ codebase_rag/decorators.py
22
22
  codebase_rag/docker-compose.yaml
23
23
  codebase_rag/embedder.py
24
24
  codebase_rag/exceptions.py
25
+ codebase_rag/flow_verdict.py
25
26
  codebase_rag/function_registry.py
26
27
  codebase_rag/graph_audit.py
27
28
  codebase_rag/graph_loader.py
@@ -251,6 +252,7 @@ codebase_rag/tools/shell_command.py
251
252
  codebase_rag/tools/structural_editor.py
252
253
  codebase_rag/tools/structural_search.py
253
254
  codebase_rag/tools/tool_descriptions.py
255
+ codebase_rag/tools/web_search.py
254
256
  codebase_rag/utils/__init__.py
255
257
  codebase_rag/utils/dependencies.py
256
258
  codebase_rag/utils/fqn_resolver.py
@@ -1,6 +1,6 @@
1
1
  loguru>=0.7.3
2
2
  mcp>=1.28.1
3
- pydantic-ai>=1.102.0
3
+ pydantic-ai>=2.0.0
4
4
  pydantic-settings>=2.12.0
5
5
  pymgclient>=1.5.1
6
6
  python-dotenv>=1.2.1
@@ -17,7 +17,6 @@ click>=8.3.1
17
17
  protobuf>=6.33.5
18
18
  defusedxml>=0.7.1
19
19
  huggingface-hub[hf-xet]>=1.7.2
20
- griffe<2,>=1.0
21
20
  pathspec>=1.0.4
22
21
 
23
22
  [ast-grep]
@@ -2,6 +2,7 @@
2
2
 
3
3
  import asyncio
4
4
  import json
5
+ import sys
5
6
  import time
6
7
  from collections.abc import Callable
7
8
  from fnmatch import fnmatch
@@ -199,6 +200,78 @@ def _capture_selection(capture: list[str] | None) -> CaptureSelection:
199
200
  return resolve_capture([*split_spec(settings.CGR_CAPTURE), *(capture or [])])
200
201
 
201
202
 
203
+ def _stdin_is_interactive() -> bool:
204
+ try:
205
+ return sys.stdin.isatty()
206
+ except (AttributeError, ValueError):
207
+ return False
208
+
209
+
210
+ def _projects_in_graph(ingestor: MemgraphIngestor) -> list[str] | None:
211
+ """Every project in the graph, or None when the graph cannot be read.
212
+
213
+ None is NOT an empty graph: treating a failed enumeration as "no other
214
+ projects" would skip the confirmation and wipe every project precisely
215
+ when we cannot say what would be lost.
216
+ """
217
+ try:
218
+ return sorted(ingestor.list_projects())
219
+ except Exception as exc:
220
+ logger.warning(ls.MG_LIST_PROJECTS_FAILED.format(error=exc))
221
+ return None
222
+
223
+
224
+ def _confirm_destructive_clean(
225
+ ingestor: MemgraphIngestor, project_name: str, assume_yes: bool
226
+ ) -> None:
227
+ """Abort unless the user accepts losing every other project in the graph."""
228
+ if assume_yes:
229
+ return
230
+
231
+ # `--clean` deletes the whole graph, so the prompt counts every project in
232
+ # it. Deriving that count from `others` would understate it by one whenever
233
+ # this project has not been synced yet and so is not in the graph.
234
+ projects = _projects_in_graph(ingestor)
235
+ if projects is None:
236
+ # Fail closed: an unreadable project list cannot show what the wipe
237
+ # would destroy, so it must not be read as an empty graph.
238
+ app_context.console.print(
239
+ style(cs.CLI_ERR_CLEAN_UNKNOWN_PROJECTS, cs.Color.RED)
240
+ )
241
+ raise typer.Exit(1)
242
+
243
+ others = [name for name in projects if name != project_name]
244
+ if not others:
245
+ return
246
+
247
+ app_context.console.print(
248
+ style(
249
+ cs.CLI_WARN_CLEAN_OTHER_PROJECTS.format(
250
+ project_name=project_name,
251
+ count=len(others),
252
+ projects=", ".join(others),
253
+ ),
254
+ cs.Color.YELLOW,
255
+ )
256
+ )
257
+
258
+ if not _stdin_is_interactive():
259
+ app_context.console.print(
260
+ style(
261
+ cs.CLI_ERR_CLEAN_NEEDS_CONFIRMATION.format(project_name=project_name),
262
+ cs.Color.RED,
263
+ )
264
+ )
265
+ raise typer.Exit(1)
266
+
267
+ confirmed = typer.confirm(
268
+ cs.CLI_PROMPT_CLEAN_CONFIRM.format(count=len(projects)), default=False
269
+ )
270
+ if not confirmed:
271
+ app_context.console.print(style(cs.CLI_MSG_CLEAN_ABORTED, cs.Color.CYAN))
272
+ raise typer.Exit(1)
273
+
274
+
202
275
  def _run_graph_sync(
203
276
  repo: Path,
204
277
  project_name: str,
@@ -209,6 +282,7 @@ def _run_graph_sync(
209
282
  output: str | None = None,
210
283
  capture: list[str] | None = None,
211
284
  skip_embeddings: bool | None = None,
285
+ assume_yes: bool = False,
212
286
  ) -> None:
213
287
  cgrignore = load_ignore_patterns(repo)
214
288
  cli_excludes = frozenset(exclude) if exclude else frozenset()
@@ -222,6 +296,7 @@ def _run_graph_sync(
222
296
  elapsed = time.monotonic()
223
297
  with connect_memgraph(batch_size) as ingestor:
224
298
  if clean:
299
+ _confirm_destructive_clean(ingestor, project_name, assume_yes)
225
300
  _info(style(cs.CLI_MSG_CLEANING_DB, cs.Color.YELLOW))
226
301
  ingestor.clean_database()
227
302
  _delete_hash_cache(repo)
@@ -336,6 +411,12 @@ def start(
336
411
  "--clean",
337
412
  help=ch.HELP_CLEAN_DB,
338
413
  ),
414
+ yes: bool = typer.Option(
415
+ False,
416
+ "--yes",
417
+ "-y",
418
+ help=ch.HELP_ASSUME_YES,
419
+ ),
339
420
  output: str | None = typer.Option(
340
421
  None,
341
422
  "-o",
@@ -452,6 +533,7 @@ def start(
452
533
  if clean and not update_graph:
453
534
  repo_to_clean = Path(target_repo_path)
454
535
  with connect_memgraph(effective_batch_size) as ingestor:
536
+ _confirm_destructive_clean(ingestor, resolved_project_name, yes)
455
537
  _info(style(cs.CLI_MSG_CLEANING_DB, cs.Color.YELLOW))
456
538
  ingestor.clean_database()
457
539
 
@@ -481,6 +563,7 @@ def start(
481
563
  output=output,
482
564
  capture=capture,
483
565
  skip_embeddings=no_embeddings or None,
566
+ assume_yes=yes,
484
567
  )
485
568
  _info(style(cs.CLI_MSG_GRAPH_UPDATED, cs.Color.GREEN))
486
569
  return
@@ -124,7 +124,7 @@ HELP_MEMGRAPH_HOST = "Memgraph host."
124
124
  HELP_MEMGRAPH_PORT = "Memgraph port."
125
125
  HELP_ORCHESTRATOR = (
126
126
  "Model for the planning assistant, in provider:model form "
127
- "(for example openai:gpt-4 or ollama:llama3.2)."
127
+ "(for example openai:gpt-5.6-terra or ollama:qwen2.5-coder)."
128
128
  )
129
129
  HELP_CYPHER_MODEL = "Model used to generate Cypher, in provider:model form."
130
130
  HELP_NO_CONFIRM = "Skip edit confirmation prompts."
@@ -146,8 +146,13 @@ HELP_MAX_WAIT = (
146
146
 
147
147
  HELP_UPDATE_GRAPH = "Parse the repository and sync its graph before continuing."
148
148
  HELP_CLEAN_DB = (
149
- "Delete every project from the shared graph and clear the selected repository's "
150
- "sync cache. With --update-graph, rebuild after deletion."
149
+ "DESTRUCTIVE: Delete every project from the shared graph and clear the selected "
150
+ "repository's sync cache. With --update-graph, rebuild after deletion. Asks for "
151
+ "confirmation when other projects would be destroyed; use --yes to skip the prompt."
152
+ )
153
+ HELP_ASSUME_YES = (
154
+ "Answer yes to destructive confirmations, such as the one --clean asks before "
155
+ "deleting other projects from the shared graph."
151
156
  )
152
157
  HELP_OUTPUT_GRAPH = "Write the updated graph to PATH as JSON. Requires --update-graph."
153
158
  HELP_OUTPUT_PATH = "Write the exported graph to PATH."
@@ -238,3 +238,8 @@ JAVA_SRC_FOLDERS = frozenset(
238
238
  JAVA_PATH_TEST,
239
239
  }
240
240
  )
241
+
242
+ JAVA_MAVEN_SOURCE_ROOTS = (
243
+ (JAVA_PATH_SRC, JAVA_PATH_MAIN, JAVA_PATH_JAVA),
244
+ (JAVA_PATH_SRC, JAVA_PATH_TEST, JAVA_PATH_JAVA),
245
+ )
@@ -215,8 +215,19 @@ JS_SHORT_CIRCUIT_OPERATORS: frozenset[str] = frozenset({"||", "??", "&&"})
215
215
  # (`[Symbol.iterator]`, `[Symbol.toStringTag]`) as the definition pass
216
216
  # registers it; user symbol keys register without the `Symbol.` path.
217
217
  JS_WELL_KNOWN_SYMBOL_NAME_PREFIX = "[Symbol."
218
+ JS_COMPUTED_NAME_PREFIX = "["
218
219
  JS_COMPUTED_NAME_SUFFIX = "]"
219
220
  JS_WELL_KNOWN_SYMBOL_BRACKET_PREFIX = "[Symbol["
221
+ JS_SYMBOL_FOR_PREFIX = "for("
222
+ JS_STRING_QUOTES = "'\""
223
+ # Registry symbols whose members RUNTIMES invoke themselves; an
224
+ # application-defined Symbol.for(...) key is reached only by visible code.
225
+ JS_RUNTIME_REGISTRY_SYMBOL_KEYS = frozenset(
226
+ {
227
+ "nodejs.util.inspect.custom",
228
+ "nodejs.rejection",
229
+ }
230
+ )
220
231
  # `&&` alone among them cannot yield its LEFT operand as a function value.
221
232
  JS_OPERATOR_LOGICAL_AND = "&&"
222
233
  TS_JS_ELSE_CLAUSE = "else_clause"
@@ -4,6 +4,7 @@ from .ast_java import TS_GENERIC_TYPE
4
4
  from .ast_nodes import TS_IDENTIFIER, TS_SCOPED_IDENTIFIER, TS_TYPE_IDENTIFIER
5
5
  from .ast_scala import TS_GENERIC_FUNCTION
6
6
  from .core import KEYWORD_SELF, KEYWORD_SUPER
7
+ from .graph import NodeLabel
7
8
 
8
9
  TS_RS_SCOPED_TYPE_IDENTIFIER = "scoped_type_identifier"
9
10
  TS_RS_PRIMITIVE_TYPE = "primitive_type"
@@ -26,6 +27,13 @@ TS_RS_IMPL_ITEM = "impl_item"
26
27
  TS_RS_FUNCTION_SIGNATURE_ITEM = "function_signature_item"
27
28
  TS_RS_CLOSURE_EXPRESSION = "closure_expression"
28
29
  TS_RS_UNION_ITEM = "union_item"
30
+ TS_RS_TYPE_PARAMETERS = "type_parameters"
31
+ TS_RS_TYPE_PARAMETER = "type_parameter"
32
+ TS_RS_WHERE_CLAUSE = "where_clause"
33
+ TS_RS_WHERE_PREDICATE = "where_predicate"
34
+ # Items whose generic parameter lists and where clauses put trait bounds in
35
+ # scope for the calls beneath them.
36
+ RS_GENERIC_SCOPE_ITEMS = (TS_RS_FUNCTION_ITEM, TS_RS_IMPL_ITEM, TS_RS_TRAIT_ITEM)
29
37
  TS_RS_USE_DECLARATION = "use_declaration"
30
38
  TS_RS_EXTERN_CRATE_DECLARATION = "extern_crate_declaration"
31
39
  TS_RS_CALL_EXPRESSION = "call_expression"
@@ -176,6 +184,12 @@ RS_USE_LIST_DELIMITERS = frozenset({"{", "}", ","})
176
184
  RS_ENCODING_UTF8 = "utf8"
177
185
 
178
186
  RS_WILDCARD_PREFIX = "*"
187
+ # Marks a `use path::{self}` entry, whose name the base path supplies rather
188
+ # than the source. Rust keeps types and values in separate namespaces while
189
+ # the import map holds one slot per name, so such a binding is WEAK: it never
190
+ # displaces a name another `use` in the same scope already claimed (#1054).
191
+ # No Rust identifier can contain the marker character.
192
+ RS_SELF_MODULE_PREFIX = "@"
179
193
 
180
194
  RS_FIELD_ARGUMENT = "argument"
181
195
 
@@ -191,3 +205,119 @@ RS_MANIFEST_TARGET_SECTIONS = ("bin", "lib", "example", "test", "bench")
191
205
  RS_MANIFEST_PATH_KEY = "path"
192
206
  RS_MANIFEST_PACKAGE_KEY = "package"
193
207
  RS_MANIFEST_BUILD_KEY = "build"
208
+ RS_MANIFEST_AUTOLIB_KEY = "autolib"
209
+ RS_MANIFEST_AUTOBINS_KEY = "autobins"
210
+ RS_MANIFEST_AUTOEXAMPLES_KEY = "autoexamples"
211
+ RS_MANIFEST_AUTOTESTS_KEY = "autotests"
212
+ RS_MANIFEST_AUTOBENCHES_KEY = "autobenches"
213
+ RS_MANIFEST_AUTO_KEYS = (
214
+ RS_MANIFEST_AUTOLIB_KEY,
215
+ RS_MANIFEST_AUTOBINS_KEY,
216
+ RS_MANIFEST_AUTOEXAMPLES_KEY,
217
+ RS_MANIFEST_AUTOTESTS_KEY,
218
+ RS_MANIFEST_AUTOBENCHES_KEY,
219
+ )
220
+ RS_AUTO_DIR_KEYS = {
221
+ "examples": RS_MANIFEST_AUTOEXAMPLES_KEY,
222
+ "tests": RS_MANIFEST_AUTOTESTS_KEY,
223
+ "benches": RS_MANIFEST_AUTOBENCHES_KEY,
224
+ }
225
+ # Candidate locations of a PATHLESS manifest target table, matched against
226
+ # the files that actually exist (cargo errors on an ambiguous pair, so only
227
+ # a single existing candidate resolves). [lib] is fixed at src/lib.rs; a bin
228
+ # whose name equals the package name may be src/main.rs.
229
+ RS_DEFAULT_LIB_PATH = "src/lib.rs"
230
+ RS_DEFAULT_MAIN_PATH = "src/main.rs"
231
+ RS_MANIFEST_BIN_SECTION = "bin"
232
+ RS_MANIFEST_KIND_DIRS = {
233
+ "bin": "src/bin",
234
+ "example": "examples",
235
+ "test": "tests",
236
+ "bench": "benches",
237
+ }
238
+ RS_MANIFEST_WORKSPACE_KEY = "workspace"
239
+ RS_MANIFEST_MEMBERS_KEY = "members"
240
+ RS_MANIFEST_NAME_KEY = "name"
241
+ RS_MANIFEST_LIB_SECTION = "lib"
242
+ RS_MANIFEST_DEP_SECTIONS = ("dependencies", "dev-dependencies", "build-dependencies")
243
+ RS_MANIFEST_TARGET_TABLE_KEY = "target"
244
+ # Crates shipped with the toolchain: external by construction, no
245
+ # manifest needed to know a use head naming one is outside the project.
246
+ RS_STDLIB_CRATES = frozenset({"std", "core", "alloc", "proc_macro"})
247
+
248
+ # Node labels a Rust qn segment carries when it is a TYPE the caller sits
249
+ # inside (an impl block), not an inline `mod`. An impl adds no module level,
250
+ # so `super::` inside a method counts from the file module's parent (#1093).
251
+ RS_TYPE_SCOPE_LABELS = frozenset(
252
+ {
253
+ NodeLabel.CLASS.value,
254
+ NodeLabel.INTERFACE.value,
255
+ NodeLabel.ENUM.value,
256
+ NodeLabel.TYPE.value,
257
+ NodeLabel.UNION.value,
258
+ }
259
+ )
260
+
261
+ # Traits the Rust prelude puts in scope with no `use`: an impl naming one
262
+ # without importing it and without a same-named first-party declaration
263
+ # implements the standard trait, whose dispatch lives outside the graph
264
+ # (issue #1048). Marker traits with no methods are omitted as pointless.
265
+ RS_PRELUDE_TRAITS = frozenset(
266
+ {
267
+ "AsMut",
268
+ "AsRef",
269
+ "Clone",
270
+ "Default",
271
+ "DoubleEndedIterator",
272
+ "Drop",
273
+ "ExactSizeIterator",
274
+ "Extend",
275
+ "Fn",
276
+ "FnMut",
277
+ "FnOnce",
278
+ "From",
279
+ "FromIterator",
280
+ "Into",
281
+ "IntoIterator",
282
+ "Iterator",
283
+ "Ord",
284
+ "PartialEq",
285
+ "PartialOrd",
286
+ "ToOwned",
287
+ "ToString",
288
+ "TryFrom",
289
+ "TryInto",
290
+ }
291
+ )
292
+
293
+ # Iterator-adaptor closure typing (issue #1045): a closure argument of one
294
+ # of these adaptors receives the sequence's element (by value or
295
+ # reference, indistinguishable for method binding), so its parameter can
296
+ # type from the iterated collection's element type.
297
+ RS_ITER_ADAPTORS = frozenset(
298
+ {
299
+ "map",
300
+ "filter",
301
+ "for_each",
302
+ "inspect",
303
+ "take_while",
304
+ "skip_while",
305
+ "filter_map",
306
+ "find",
307
+ "position",
308
+ "any",
309
+ "all",
310
+ }
311
+ )
312
+ # Chain hops between the collection and the adaptor that preserve the
313
+ # element type. Element-changing adaptors (enumerate, zip, flat_map) are
314
+ # deliberately absent: crossing one loses the element.
315
+ RS_ITER_NEUTRAL_HOPS = frozenset(
316
+ {"iter", "into_iter", "iter_mut", "by_ref", "rev", "cloned", "copied", "filter"}
317
+ )
318
+ # Sequence containers whose FIRST generic argument is the element type.
319
+ RS_ELEMENT_CONTAINERS = frozenset({"Vec", "VecDeque"})
320
+ RS_ITER_MAP = "map"
321
+ RS_ITER_COLLECT = "collect"
322
+ TS_RS_ARRAY_TYPE = "array_type"
323
+ RS_FIELD_ELEMENT = "element"
@@ -76,6 +76,22 @@ CLI_MSG_SYNC_DONE = "Knowledge graph sync done for '{project}' in {elapsed:.2f}s
76
76
  CLI_MSG_CLEANING_DB = "Cleaning database..."
77
77
  CLI_MSG_CLEANING_HASH_CACHE = "Removing hash cache: {path}"
78
78
  CLI_MSG_CLEAN_DONE = "Clean completed successfully!"
79
+ CLI_WARN_CLEAN_OTHER_PROJECTS = (
80
+ "--clean deletes EVERY project from the shared graph, not just "
81
+ "'{project_name}'.\n{count} other project(s) would be destroyed: {projects}"
82
+ )
83
+ CLI_PROMPT_CLEAN_CONFIRM = "Delete all {count} project(s) from the shared graph?"
84
+ CLI_ERR_CLEAN_NEEDS_CONFIRMATION = (
85
+ "Refusing to run --clean without a terminal to confirm on. "
86
+ "Re-run with --yes to delete every project in the shared graph, or drop "
87
+ "--clean to update '{project_name}' in place."
88
+ )
89
+ CLI_ERR_CLEAN_UNKNOWN_PROJECTS = (
90
+ "Refusing to run --clean: the existing projects could not be listed, so "
91
+ "there is no way to show what the wipe would destroy. Fix the graph "
92
+ "connection, or pass --yes to delete everything regardless."
93
+ )
94
+ CLI_MSG_CLEAN_ABORTED = "Aborted: the graph was left untouched."
79
95
  CLI_MSG_DELETING_PROJECT = "Deleting project '{project_name}' from the graph..."
80
96
  CLI_MSG_PROJECT_DELETED = "Project '{project_name}' deleted successfully."
81
97
  CLI_ERR_PROJECT_NOT_FOUND = (
@@ -21,6 +21,10 @@ SEPARATOR_SLASH = "/"
21
21
  # Disambiguates definitions that share one qualified name (if/else import
22
22
  # fallbacks, typing.overload, try/except fallbacks): "<qn>@<start_line>".
23
23
  DUP_QN_MARKER = "@"
24
+ # Joined after the line when a same-named definition already holds that line,
25
+ # so same-line twins stay distinct (issue #1071). Every consumer splits on
26
+ # DUP_QN_MARKER and keeps the base, so nothing reads the suffix back.
27
+ DUP_QN_COLUMN_MARKER = "_"
24
28
 
25
29
  PATH_CURRENT_DIR = "."
26
30
  PATH_PARENT_DIR = ".."
@@ -330,3 +330,26 @@ PY_ENUM_HOOK_METHOD_NAMES: frozenset[str] = frozenset(
330
330
  "_missing_",
331
331
  }
332
332
  )
333
+
334
+ # (H) ES well-known symbols (incl. Explicit Resource Management: dispose/asyncDispose)
335
+ # (H) These are invoked implicitly by the runtime (e.g. [Symbol.iterator] by for..of)
336
+ # (H) and never called by name, so they are dead-code liveness roots.
337
+ JS_WELL_KNOWN_SYMBOLS: frozenset[str] = frozenset(
338
+ {
339
+ "asyncIterator",
340
+ "hasInstance",
341
+ "isConcatSpreadable",
342
+ "iterator",
343
+ "match",
344
+ "matchAll",
345
+ "replace",
346
+ "search",
347
+ "species",
348
+ "split",
349
+ "toPrimitive",
350
+ "toStringTag",
351
+ "unscopables",
352
+ "dispose",
353
+ "asyncDispose",
354
+ }
355
+ )
@@ -140,6 +140,7 @@ from .ast_python import (
140
140
  from .ast_rust import (
141
141
  TS_RS_CALL_EXPRESSION,
142
142
  TS_RS_CLOSURE_EXPRESSION,
143
+ TS_RS_CONST_ITEM,
143
144
  TS_RS_ENUM_ITEM,
144
145
  TS_RS_EXTERN_CRATE_DECLARATION,
145
146
  TS_RS_FUNCTION_ITEM,
@@ -149,6 +150,7 @@ from .ast_rust import (
149
150
  TS_RS_MACRO_INVOCATION,
150
151
  TS_RS_MOD_ITEM,
151
152
  TS_RS_SOURCE_FILE,
153
+ TS_RS_STATIC_ITEM,
152
154
  TS_RS_STRUCT_ITEM,
153
155
  TS_RS_TRAIT_ITEM,
154
156
  TS_RS_TYPE_ITEM,
@@ -410,6 +412,16 @@ RS_TYPE_NODE_TYPES = (
410
412
  )
411
413
  RS_IDENT_NODE_TYPES = (TS_RS_FUNCTION_ITEM, TS_RS_MOD_ITEM)
412
414
 
415
+ # Nodes whose body holds items no path from another module can name.
416
+ RS_BODY_LOCAL_CONTAINERS = frozenset(
417
+ {
418
+ TS_RS_FUNCTION_ITEM,
419
+ TS_RS_CLOSURE_EXPRESSION,
420
+ TS_RS_CONST_ITEM,
421
+ TS_RS_STATIC_ITEM,
422
+ }
423
+ )
424
+
413
425
  CPP_NAME_NODE_TYPES = (
414
426
  CppNodeType.CLASS_SPECIFIER,
415
427
  TS_STRUCT_SPECIFIER,
@@ -30,6 +30,10 @@ KEY_START_LINE = "start_line"
30
30
  KEY_END_LINE = "end_line"
31
31
  KEY_PATH = "path"
32
32
  KEY_ABSOLUTE_PATH = "absolute_path"
33
+ # Whether flow analysis covered a Module: its language is in the source/sink
34
+ # registry AND the FLOWS_TO capture group was enabled at indexing. Read by
35
+ # the three-verdict flow reachability query (issue #1050).
36
+ KEY_FLOW_COVERED = "flow_covered"
33
37
  KEY_EXTENSION = "extension"
34
38
  KEY_MODULE_TYPE = "module_type"
35
39
  KEY_IMPLEMENTS_MODULE = "implements_module"
@@ -19,6 +19,7 @@ class MCPToolName(StrEnum):
19
19
  STRUCTURAL_SEARCH = "structural_search"
20
20
  STRUCTURAL_REPLACE = "structural_replace"
21
21
  ASK_AGENT = "ask_agent"
22
+ FLOW_VERDICT = "flow_verdict"
22
23
 
23
24
 
24
25
  class MCPTransport(StrEnum):
@@ -64,6 +65,8 @@ class MCPParamName(StrEnum):
64
65
  PATTERN = "pattern"
65
66
  REWRITE = "rewrite"
66
67
  LANGUAGE = "language"
68
+ SOURCE_QN = "source_qualified_name"
69
+ SINK_QN = "sink_qualified_name"
67
70
  DRY_RUN = "dry_run"
68
71
 
69
72
 
@@ -96,6 +96,8 @@ DEFAULT_CONTEXT_WINDOW = 200_000
96
96
  MODEL_CONTEXT_WINDOWS: dict[str, int] = {
97
97
  "MiniMax-M3": 1_000_000,
98
98
  "MiniMax-M2.7": 204_800,
99
+ "claude-opus-5": 1_000_000,
100
+ "claude-sonnet-5": 1_000_000,
99
101
  "claude-opus-4-8": 1_000_000,
100
102
  "claude-opus-4-7": 1_000_000,
101
103
  "claude-opus-4-6": 200_000,