xai-review 0.16.0__tar.gz → 0.18.0__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.

Potentially problematic release.


This version of xai-review might be problematic. Click here for more details.

Files changed (189) hide show
  1. xai_review-0.18.0/PKG-INFO +282 -0
  2. xai_review-0.18.0/README.md +258 -0
  3. {xai_review-0.16.0 → xai_review-0.18.0}/ai_review/services/vcs/github/client.py +4 -0
  4. {xai_review-0.16.0 → xai_review-0.18.0}/pyproject.toml +1 -1
  5. xai_review-0.18.0/xai_review.egg-info/PKG-INFO +282 -0
  6. xai_review-0.16.0/PKG-INFO +0 -303
  7. xai_review-0.16.0/README.md +0 -279
  8. xai_review-0.16.0/xai_review.egg-info/PKG-INFO +0 -303
  9. {xai_review-0.16.0 → xai_review-0.18.0}/LICENSE +0 -0
  10. {xai_review-0.16.0 → xai_review-0.18.0}/ai_review/__init__.py +0 -0
  11. {xai_review-0.16.0 → xai_review-0.18.0}/ai_review/cli/__init__.py +0 -0
  12. {xai_review-0.16.0 → xai_review-0.18.0}/ai_review/cli/commands/__init__.py +0 -0
  13. {xai_review-0.16.0 → xai_review-0.18.0}/ai_review/cli/commands/run_context_review.py +0 -0
  14. {xai_review-0.16.0 → xai_review-0.18.0}/ai_review/cli/commands/run_inline_review.py +0 -0
  15. {xai_review-0.16.0 → xai_review-0.18.0}/ai_review/cli/commands/run_review.py +0 -0
  16. {xai_review-0.16.0 → xai_review-0.18.0}/ai_review/cli/commands/run_summary_review.py +0 -0
  17. {xai_review-0.16.0 → xai_review-0.18.0}/ai_review/cli/main.py +0 -0
  18. {xai_review-0.16.0 → xai_review-0.18.0}/ai_review/clients/__init__.py +0 -0
  19. {xai_review-0.16.0 → xai_review-0.18.0}/ai_review/clients/claude/__init__.py +0 -0
  20. {xai_review-0.16.0 → xai_review-0.18.0}/ai_review/clients/claude/client.py +0 -0
  21. {xai_review-0.16.0 → xai_review-0.18.0}/ai_review/clients/claude/schema.py +0 -0
  22. {xai_review-0.16.0 → xai_review-0.18.0}/ai_review/clients/gemini/__init__.py +0 -0
  23. {xai_review-0.16.0 → xai_review-0.18.0}/ai_review/clients/gemini/client.py +0 -0
  24. {xai_review-0.16.0 → xai_review-0.18.0}/ai_review/clients/gemini/schema.py +0 -0
  25. {xai_review-0.16.0 → xai_review-0.18.0}/ai_review/clients/github/__init__.py +0 -0
  26. {xai_review-0.16.0 → xai_review-0.18.0}/ai_review/clients/github/client.py +0 -0
  27. {xai_review-0.16.0 → xai_review-0.18.0}/ai_review/clients/github/pr/__init__.py +0 -0
  28. {xai_review-0.16.0 → xai_review-0.18.0}/ai_review/clients/github/pr/client.py +0 -0
  29. {xai_review-0.16.0 → xai_review-0.18.0}/ai_review/clients/github/pr/schema/__init__.py +0 -0
  30. {xai_review-0.16.0 → xai_review-0.18.0}/ai_review/clients/github/pr/schema/comments.py +0 -0
  31. {xai_review-0.16.0 → xai_review-0.18.0}/ai_review/clients/github/pr/schema/files.py +0 -0
  32. {xai_review-0.16.0 → xai_review-0.18.0}/ai_review/clients/github/pr/schema/pull_request.py +0 -0
  33. {xai_review-0.16.0 → xai_review-0.18.0}/ai_review/clients/github/pr/schema/reviews.py +0 -0
  34. {xai_review-0.16.0 → xai_review-0.18.0}/ai_review/clients/gitlab/__init__.py +0 -0
  35. {xai_review-0.16.0 → xai_review-0.18.0}/ai_review/clients/gitlab/client.py +0 -0
  36. {xai_review-0.16.0 → xai_review-0.18.0}/ai_review/clients/gitlab/mr/__init__.py +0 -0
  37. {xai_review-0.16.0 → xai_review-0.18.0}/ai_review/clients/gitlab/mr/client.py +0 -0
  38. {xai_review-0.16.0 → xai_review-0.18.0}/ai_review/clients/gitlab/mr/schema/__init__.py +0 -0
  39. {xai_review-0.16.0 → xai_review-0.18.0}/ai_review/clients/gitlab/mr/schema/changes.py +0 -0
  40. {xai_review-0.16.0 → xai_review-0.18.0}/ai_review/clients/gitlab/mr/schema/comments.py +0 -0
  41. {xai_review-0.16.0 → xai_review-0.18.0}/ai_review/clients/gitlab/mr/schema/discussions.py +0 -0
  42. {xai_review-0.16.0 → xai_review-0.18.0}/ai_review/clients/openai/__init__.py +0 -0
  43. {xai_review-0.16.0 → xai_review-0.18.0}/ai_review/clients/openai/client.py +0 -0
  44. {xai_review-0.16.0 → xai_review-0.18.0}/ai_review/clients/openai/schema.py +0 -0
  45. {xai_review-0.16.0 → xai_review-0.18.0}/ai_review/config.py +0 -0
  46. {xai_review-0.16.0 → xai_review-0.18.0}/ai_review/libs/__init__.py +0 -0
  47. {xai_review-0.16.0 → xai_review-0.18.0}/ai_review/libs/asynchronous/__init__.py +0 -0
  48. {xai_review-0.16.0 → xai_review-0.18.0}/ai_review/libs/asynchronous/gather.py +0 -0
  49. {xai_review-0.16.0 → xai_review-0.18.0}/ai_review/libs/config/__init__.py +0 -0
  50. {xai_review-0.16.0 → xai_review-0.18.0}/ai_review/libs/config/artifacts.py +0 -0
  51. {xai_review-0.16.0 → xai_review-0.18.0}/ai_review/libs/config/base.py +0 -0
  52. {xai_review-0.16.0 → xai_review-0.18.0}/ai_review/libs/config/claude.py +0 -0
  53. {xai_review-0.16.0 → xai_review-0.18.0}/ai_review/libs/config/gemini.py +0 -0
  54. {xai_review-0.16.0 → xai_review-0.18.0}/ai_review/libs/config/github.py +0 -0
  55. {xai_review-0.16.0 → xai_review-0.18.0}/ai_review/libs/config/gitlab.py +0 -0
  56. {xai_review-0.16.0 → xai_review-0.18.0}/ai_review/libs/config/http.py +0 -0
  57. {xai_review-0.16.0 → xai_review-0.18.0}/ai_review/libs/config/llm.py +0 -0
  58. {xai_review-0.16.0 → xai_review-0.18.0}/ai_review/libs/config/logger.py +0 -0
  59. {xai_review-0.16.0 → xai_review-0.18.0}/ai_review/libs/config/openai.py +0 -0
  60. {xai_review-0.16.0 → xai_review-0.18.0}/ai_review/libs/config/prompt.py +0 -0
  61. {xai_review-0.16.0 → xai_review-0.18.0}/ai_review/libs/config/review.py +0 -0
  62. {xai_review-0.16.0 → xai_review-0.18.0}/ai_review/libs/config/vcs.py +0 -0
  63. {xai_review-0.16.0 → xai_review-0.18.0}/ai_review/libs/constants/__init__.py +0 -0
  64. {xai_review-0.16.0 → xai_review-0.18.0}/ai_review/libs/constants/llm_provider.py +0 -0
  65. {xai_review-0.16.0 → xai_review-0.18.0}/ai_review/libs/constants/vcs_provider.py +0 -0
  66. {xai_review-0.16.0 → xai_review-0.18.0}/ai_review/libs/diff/__init__.py +0 -0
  67. {xai_review-0.16.0 → xai_review-0.18.0}/ai_review/libs/diff/models.py +0 -0
  68. {xai_review-0.16.0 → xai_review-0.18.0}/ai_review/libs/diff/parser.py +0 -0
  69. {xai_review-0.16.0 → xai_review-0.18.0}/ai_review/libs/diff/tools.py +0 -0
  70. {xai_review-0.16.0 → xai_review-0.18.0}/ai_review/libs/http/__init__.py +0 -0
  71. {xai_review-0.16.0 → xai_review-0.18.0}/ai_review/libs/http/client.py +0 -0
  72. {xai_review-0.16.0 → xai_review-0.18.0}/ai_review/libs/http/event_hooks/__init__.py +0 -0
  73. {xai_review-0.16.0 → xai_review-0.18.0}/ai_review/libs/http/event_hooks/base.py +0 -0
  74. {xai_review-0.16.0 → xai_review-0.18.0}/ai_review/libs/http/event_hooks/logger.py +0 -0
  75. {xai_review-0.16.0 → xai_review-0.18.0}/ai_review/libs/http/handlers.py +0 -0
  76. {xai_review-0.16.0 → xai_review-0.18.0}/ai_review/libs/http/transports/__init__.py +0 -0
  77. {xai_review-0.16.0 → xai_review-0.18.0}/ai_review/libs/http/transports/retry.py +0 -0
  78. {xai_review-0.16.0 → xai_review-0.18.0}/ai_review/libs/json.py +0 -0
  79. {xai_review-0.16.0 → xai_review-0.18.0}/ai_review/libs/logger.py +0 -0
  80. {xai_review-0.16.0 → xai_review-0.18.0}/ai_review/libs/resources.py +0 -0
  81. {xai_review-0.16.0 → xai_review-0.18.0}/ai_review/libs/template/__init__.py +0 -0
  82. {xai_review-0.16.0 → xai_review-0.18.0}/ai_review/libs/template/render.py +0 -0
  83. {xai_review-0.16.0 → xai_review-0.18.0}/ai_review/prompts/__init__.py +0 -0
  84. {xai_review-0.16.0 → xai_review-0.18.0}/ai_review/prompts/default_context.md +0 -0
  85. {xai_review-0.16.0 → xai_review-0.18.0}/ai_review/prompts/default_inline.md +0 -0
  86. {xai_review-0.16.0 → xai_review-0.18.0}/ai_review/prompts/default_summary.md +0 -0
  87. {xai_review-0.16.0 → xai_review-0.18.0}/ai_review/prompts/default_system_context.md +0 -0
  88. {xai_review-0.16.0 → xai_review-0.18.0}/ai_review/prompts/default_system_inline.md +0 -0
  89. {xai_review-0.16.0 → xai_review-0.18.0}/ai_review/prompts/default_system_summary.md +0 -0
  90. {xai_review-0.16.0 → xai_review-0.18.0}/ai_review/resources/__init__.py +0 -0
  91. {xai_review-0.16.0 → xai_review-0.18.0}/ai_review/resources/pricing.yaml +0 -0
  92. {xai_review-0.16.0 → xai_review-0.18.0}/ai_review/services/__init__.py +0 -0
  93. {xai_review-0.16.0 → xai_review-0.18.0}/ai_review/services/artifacts/__init__.py +0 -0
  94. {xai_review-0.16.0 → xai_review-0.18.0}/ai_review/services/artifacts/schema.py +0 -0
  95. {xai_review-0.16.0 → xai_review-0.18.0}/ai_review/services/artifacts/service.py +0 -0
  96. {xai_review-0.16.0 → xai_review-0.18.0}/ai_review/services/artifacts/tools.py +0 -0
  97. {xai_review-0.16.0 → xai_review-0.18.0}/ai_review/services/cost/__init__.py +0 -0
  98. {xai_review-0.16.0 → xai_review-0.18.0}/ai_review/services/cost/schema.py +0 -0
  99. {xai_review-0.16.0 → xai_review-0.18.0}/ai_review/services/cost/service.py +0 -0
  100. {xai_review-0.16.0 → xai_review-0.18.0}/ai_review/services/diff/__init__.py +0 -0
  101. {xai_review-0.16.0 → xai_review-0.18.0}/ai_review/services/diff/renderers.py +0 -0
  102. {xai_review-0.16.0 → xai_review-0.18.0}/ai_review/services/diff/schema.py +0 -0
  103. {xai_review-0.16.0 → xai_review-0.18.0}/ai_review/services/diff/service.py +0 -0
  104. {xai_review-0.16.0 → xai_review-0.18.0}/ai_review/services/diff/tools.py +0 -0
  105. {xai_review-0.16.0 → xai_review-0.18.0}/ai_review/services/git/__init__.py +0 -0
  106. {xai_review-0.16.0 → xai_review-0.18.0}/ai_review/services/git/service.py +0 -0
  107. {xai_review-0.16.0 → xai_review-0.18.0}/ai_review/services/git/types.py +0 -0
  108. {xai_review-0.16.0 → xai_review-0.18.0}/ai_review/services/llm/__init__.py +0 -0
  109. {xai_review-0.16.0 → xai_review-0.18.0}/ai_review/services/llm/claude/__init__.py +0 -0
  110. {xai_review-0.16.0 → xai_review-0.18.0}/ai_review/services/llm/claude/client.py +0 -0
  111. {xai_review-0.16.0 → xai_review-0.18.0}/ai_review/services/llm/factory.py +0 -0
  112. {xai_review-0.16.0 → xai_review-0.18.0}/ai_review/services/llm/gemini/__init__.py +0 -0
  113. {xai_review-0.16.0 → xai_review-0.18.0}/ai_review/services/llm/gemini/client.py +0 -0
  114. {xai_review-0.16.0 → xai_review-0.18.0}/ai_review/services/llm/openai/__init__.py +0 -0
  115. {xai_review-0.16.0 → xai_review-0.18.0}/ai_review/services/llm/openai/client.py +0 -0
  116. {xai_review-0.16.0 → xai_review-0.18.0}/ai_review/services/llm/types.py +0 -0
  117. {xai_review-0.16.0 → xai_review-0.18.0}/ai_review/services/prompt/__init__.py +0 -0
  118. {xai_review-0.16.0 → xai_review-0.18.0}/ai_review/services/prompt/adapter.py +0 -0
  119. {xai_review-0.16.0 → xai_review-0.18.0}/ai_review/services/prompt/schema.py +0 -0
  120. {xai_review-0.16.0 → xai_review-0.18.0}/ai_review/services/prompt/service.py +0 -0
  121. {xai_review-0.16.0 → xai_review-0.18.0}/ai_review/services/prompt/tools.py +0 -0
  122. {xai_review-0.16.0 → xai_review-0.18.0}/ai_review/services/review/__init__.py +0 -0
  123. {xai_review-0.16.0 → xai_review-0.18.0}/ai_review/services/review/inline/__init__.py +0 -0
  124. {xai_review-0.16.0 → xai_review-0.18.0}/ai_review/services/review/inline/schema.py +0 -0
  125. {xai_review-0.16.0 → xai_review-0.18.0}/ai_review/services/review/inline/service.py +0 -0
  126. {xai_review-0.16.0 → xai_review-0.18.0}/ai_review/services/review/policy/__init__.py +0 -0
  127. {xai_review-0.16.0 → xai_review-0.18.0}/ai_review/services/review/policy/service.py +0 -0
  128. {xai_review-0.16.0 → xai_review-0.18.0}/ai_review/services/review/service.py +0 -0
  129. {xai_review-0.16.0 → xai_review-0.18.0}/ai_review/services/review/summary/__init__.py +0 -0
  130. {xai_review-0.16.0 → xai_review-0.18.0}/ai_review/services/review/summary/schema.py +0 -0
  131. {xai_review-0.16.0 → xai_review-0.18.0}/ai_review/services/review/summary/service.py +0 -0
  132. {xai_review-0.16.0 → xai_review-0.18.0}/ai_review/services/vcs/__init__.py +0 -0
  133. {xai_review-0.16.0 → xai_review-0.18.0}/ai_review/services/vcs/factory.py +0 -0
  134. {xai_review-0.16.0 → xai_review-0.18.0}/ai_review/services/vcs/github/__init__.py +0 -0
  135. {xai_review-0.16.0 → xai_review-0.18.0}/ai_review/services/vcs/gitlab/__init__.py +0 -0
  136. {xai_review-0.16.0 → xai_review-0.18.0}/ai_review/services/vcs/gitlab/client.py +0 -0
  137. {xai_review-0.16.0 → xai_review-0.18.0}/ai_review/services/vcs/types.py +0 -0
  138. {xai_review-0.16.0 → xai_review-0.18.0}/ai_review/tests/__init__.py +0 -0
  139. {xai_review-0.16.0 → xai_review-0.18.0}/ai_review/tests/fixtures/__init__.py +0 -0
  140. {xai_review-0.16.0 → xai_review-0.18.0}/ai_review/tests/fixtures/git.py +0 -0
  141. {xai_review-0.16.0 → xai_review-0.18.0}/ai_review/tests/suites/__init__.py +0 -0
  142. {xai_review-0.16.0 → xai_review-0.18.0}/ai_review/tests/suites/clients/__init__.py +0 -0
  143. {xai_review-0.16.0 → xai_review-0.18.0}/ai_review/tests/suites/clients/claude/__init__.py +0 -0
  144. {xai_review-0.16.0 → xai_review-0.18.0}/ai_review/tests/suites/clients/claude/test_client.py +0 -0
  145. {xai_review-0.16.0 → xai_review-0.18.0}/ai_review/tests/suites/clients/claude/test_schema.py +0 -0
  146. {xai_review-0.16.0 → xai_review-0.18.0}/ai_review/tests/suites/clients/gemini/__init__.py +0 -0
  147. {xai_review-0.16.0 → xai_review-0.18.0}/ai_review/tests/suites/clients/gemini/test_client.py +0 -0
  148. {xai_review-0.16.0 → xai_review-0.18.0}/ai_review/tests/suites/clients/gemini/test_schema.py +0 -0
  149. {xai_review-0.16.0 → xai_review-0.18.0}/ai_review/tests/suites/clients/github/__init__.py +0 -0
  150. {xai_review-0.16.0 → xai_review-0.18.0}/ai_review/tests/suites/clients/github/test_client.py +0 -0
  151. {xai_review-0.16.0 → xai_review-0.18.0}/ai_review/tests/suites/clients/gitlab/__init__.py +0 -0
  152. {xai_review-0.16.0 → xai_review-0.18.0}/ai_review/tests/suites/clients/gitlab/test_client.py +0 -0
  153. {xai_review-0.16.0 → xai_review-0.18.0}/ai_review/tests/suites/clients/openai/__init__.py +0 -0
  154. {xai_review-0.16.0 → xai_review-0.18.0}/ai_review/tests/suites/clients/openai/test_client.py +0 -0
  155. {xai_review-0.16.0 → xai_review-0.18.0}/ai_review/tests/suites/clients/openai/test_schema.py +0 -0
  156. {xai_review-0.16.0 → xai_review-0.18.0}/ai_review/tests/suites/libs/__init__.py +0 -0
  157. {xai_review-0.16.0 → xai_review-0.18.0}/ai_review/tests/suites/libs/config/__init__.py +0 -0
  158. {xai_review-0.16.0 → xai_review-0.18.0}/ai_review/tests/suites/libs/config/test_prompt.py +0 -0
  159. {xai_review-0.16.0 → xai_review-0.18.0}/ai_review/tests/suites/libs/diff/__init__.py +0 -0
  160. {xai_review-0.16.0 → xai_review-0.18.0}/ai_review/tests/suites/libs/diff/test_models.py +0 -0
  161. {xai_review-0.16.0 → xai_review-0.18.0}/ai_review/tests/suites/libs/diff/test_parser.py +0 -0
  162. {xai_review-0.16.0 → xai_review-0.18.0}/ai_review/tests/suites/libs/diff/test_tools.py +0 -0
  163. {xai_review-0.16.0 → xai_review-0.18.0}/ai_review/tests/suites/libs/template/__init__.py +0 -0
  164. {xai_review-0.16.0 → xai_review-0.18.0}/ai_review/tests/suites/libs/template/test_render.py +0 -0
  165. {xai_review-0.16.0 → xai_review-0.18.0}/ai_review/tests/suites/libs/test_json.py +0 -0
  166. {xai_review-0.16.0 → xai_review-0.18.0}/ai_review/tests/suites/services/__init__.py +0 -0
  167. {xai_review-0.16.0 → xai_review-0.18.0}/ai_review/tests/suites/services/diff/__init__.py +0 -0
  168. {xai_review-0.16.0 → xai_review-0.18.0}/ai_review/tests/suites/services/diff/test_renderers.py +0 -0
  169. {xai_review-0.16.0 → xai_review-0.18.0}/ai_review/tests/suites/services/diff/test_service.py +0 -0
  170. {xai_review-0.16.0 → xai_review-0.18.0}/ai_review/tests/suites/services/diff/test_tools.py +0 -0
  171. {xai_review-0.16.0 → xai_review-0.18.0}/ai_review/tests/suites/services/prompt/__init__.py +0 -0
  172. {xai_review-0.16.0 → xai_review-0.18.0}/ai_review/tests/suites/services/prompt/test_schema.py +0 -0
  173. {xai_review-0.16.0 → xai_review-0.18.0}/ai_review/tests/suites/services/prompt/test_service.py +0 -0
  174. {xai_review-0.16.0 → xai_review-0.18.0}/ai_review/tests/suites/services/prompt/test_tools.py +0 -0
  175. {xai_review-0.16.0 → xai_review-0.18.0}/ai_review/tests/suites/services/review/__init__.py +0 -0
  176. {xai_review-0.16.0 → xai_review-0.18.0}/ai_review/tests/suites/services/review/inline/__init__.py +0 -0
  177. {xai_review-0.16.0 → xai_review-0.18.0}/ai_review/tests/suites/services/review/inline/test_schema.py +0 -0
  178. {xai_review-0.16.0 → xai_review-0.18.0}/ai_review/tests/suites/services/review/inline/test_service.py +0 -0
  179. {xai_review-0.16.0 → xai_review-0.18.0}/ai_review/tests/suites/services/review/policy/__init__.py +0 -0
  180. {xai_review-0.16.0 → xai_review-0.18.0}/ai_review/tests/suites/services/review/policy/test_service.py +0 -0
  181. {xai_review-0.16.0 → xai_review-0.18.0}/ai_review/tests/suites/services/review/summary/__init__.py +0 -0
  182. {xai_review-0.16.0 → xai_review-0.18.0}/ai_review/tests/suites/services/review/summary/test_schema.py +0 -0
  183. {xai_review-0.16.0 → xai_review-0.18.0}/ai_review/tests/suites/services/review/summary/test_service.py +0 -0
  184. {xai_review-0.16.0 → xai_review-0.18.0}/setup.cfg +0 -0
  185. {xai_review-0.16.0 → xai_review-0.18.0}/xai_review.egg-info/SOURCES.txt +0 -0
  186. {xai_review-0.16.0 → xai_review-0.18.0}/xai_review.egg-info/dependency_links.txt +0 -0
  187. {xai_review-0.16.0 → xai_review-0.18.0}/xai_review.egg-info/entry_points.txt +0 -0
  188. {xai_review-0.16.0 → xai_review-0.18.0}/xai_review.egg-info/requires.txt +0 -0
  189. {xai_review-0.16.0 → xai_review-0.18.0}/xai_review.egg-info/top_level.txt +0 -0
@@ -0,0 +1,282 @@
1
+ Metadata-Version: 2.4
2
+ Name: xai-review
3
+ Version: 0.18.0
4
+ Summary: AI-powered code review tool
5
+ Author-email: Nikita Filonov <nikita.filonov@example.com>
6
+ Maintainer-email: Nikita Filonov <nikita.filonov@example.com>
7
+ License: Apache-2.0
8
+ Project-URL: Issues, https://github.com/Nikita-Filonov/ai-review/issues
9
+ Project-URL: Homepage, https://github.com/Nikita-Filonov/ai-review
10
+ Project-URL: Repository, https://github.com/Nikita-Filonov/ai-review
11
+ Keywords: ai,code review,llm,openai,claude,gemini
12
+ Requires-Python: >=3.11
13
+ Description-Content-Type: text/markdown
14
+ License-File: LICENSE
15
+ Requires-Dist: typer
16
+ Requires-Dist: httpx
17
+ Requires-Dist: pyyaml
18
+ Requires-Dist: pytest
19
+ Requires-Dist: loguru
20
+ Requires-Dist: aiofiles
21
+ Requires-Dist: pydantic
22
+ Requires-Dist: pydantic-settings
23
+ Dynamic: license-file
24
+
25
+ # AI Review
26
+
27
+ AI-powered code review tool.
28
+
29
+ [![CI](https://github.com/Nikita-Filonov/ai-review/actions/workflows/workflow-test.yml/badge.svg)](https://github.com/Nikita-Filonov/ai-review/actions/workflows/workflow-test.yml)
30
+ [![codecov](https://codecov.io/gh/Nikita-Filonov/ai-review/branch/main/graph/badge.svg)](https://codecov.io/gh/Nikita-Filonov/ai-review)
31
+ [![PyPI version](https://img.shields.io/pypi/v/xai-review.svg)](https://pypi.org/project/xai-review/)
32
+ [![License](https://img.shields.io/github/license/Nikita-Filonov/ai-review)](./LICENSE)
33
+ [![GitHub stars](https://img.shields.io/github/stars/Nikita-Filonov/ai-review?style=social)](https://github.com/Nikita-Filonov/ai-review/stargazers)
34
+
35
+ _Made with ❤️ by [@NikitaFilonov](https://t.me/sound_right)_
36
+
37
+ ---
38
+
39
+ ## 📑 Table of Contents
40
+
41
+ - ✨ [About](#-about)
42
+ - 🧪 [Live Preview](#-live-preview)
43
+ - 🚀 [Quick Start](#-quick-start)
44
+ - ⚙️ [️CI/CD Integration](#-cicd-integration)
45
+ - 🚀 [GitHub Actions](#-github-actions)
46
+ - 🚀 [GitLab CI/CD](#-gitlab-cicd)
47
+ - 📘 [Documentation](#-documentation)
48
+ - ⚠️ [Privacy & Responsibility Notice](#-privacy--responsibility-notice)
49
+
50
+ ---
51
+
52
+ ## ✨ About
53
+
54
+ **AI Review** is a developer tool that brings **AI-powered code review** directly into your workflow. It helps teams
55
+ improve code quality, enforce consistency, and speed up the review process.
56
+
57
+ ✨ Key features:
58
+
59
+ - **Multiple LLM providers** — choose between **OpenAI**, **Claude**, and **Gemini**, or switch anytime.
60
+ - **VCS integration** — works out of the box with GitLab, GitHub (more providers coming).
61
+ - **Customizable prompts** — adapt inline, context, and summary reviews to match your team’s coding guidelines.
62
+ - **Flexible configuration** — supports `YAML`, `JSON`, and `ENV`, with seamless overrides in CI/CD pipelines.
63
+ - **AI Review runs fully client-side** — it never proxies or inspects your requests.
64
+
65
+ AI Review runs automatically in your CI/CD pipeline and posts both **inline comments** and **summary reviews** right
66
+ inside your merge requests. This makes reviews faster, more consistent, and less error-prone — while still leaving the
67
+ final decision to human reviewers.
68
+
69
+ ---
70
+
71
+ ## 🧪 Live Preview
72
+
73
+ Curious how **AI Review** works in practice? Here are three real Pull Requests reviewed entirely by the tool — one per
74
+ mode:
75
+
76
+ | Mode | Description | Live Example |
77
+ |------------|----------------------------------------------------|-------------------------------------------------------------------------------|
78
+ | 🧩 Inline | Adds line-by-line comments directly in the diff | [Try AI Review (inline)](https://github.com/Nikita-Filonov/ai-review/pull/4) |
79
+ | 📄 Summary | Posts a concise summary review with key highlights | [Try AI Review (context)](https://github.com/Nikita-Filonov/ai-review/pull/5) |
80
+ | 🧠 Context | Performs broader analysis across multiple files | [Try AI Review (summary)](https://github.com/Nikita-Filonov/ai-review/pull/6) |
81
+
82
+ Each review was generated automatically via GitHub Actions using the corresponding mode:
83
+
84
+ ```bash
85
+ ai-review run-inline
86
+ ai-review run-summary
87
+ ai-review run-context
88
+ ```
89
+
90
+ ---
91
+
92
+ ## 🚀 Quick Start
93
+
94
+ Install via **pip**:
95
+
96
+ ```bash
97
+ pip install xai-review
98
+ ```
99
+
100
+ Or run directly via Docker:
101
+
102
+ ```bash
103
+ docker run --rm -v $(pwd):/app nikitafilonov/ai-review:latest run-summary
104
+ ```
105
+
106
+ 👉 Before running, create a basic configuration file [.ai-review.yaml](./docs/configs/.ai-review.yaml) in the root of
107
+ your project:
108
+
109
+ ```yaml
110
+ llm:
111
+ provider: OPENAI
112
+
113
+ meta:
114
+ model: gpt-4o-mini
115
+ max_tokens: 1200
116
+ temperature: 0.3
117
+
118
+ http_client:
119
+ timeout: 120
120
+ api_url: https://api.openai.com/v1
121
+ api_token: ${OPENAI_API_KEY}
122
+
123
+ vcs:
124
+ provider: GITLAB
125
+
126
+ pipeline:
127
+ project_id: 1
128
+ merge_request_id: 100
129
+
130
+ http_client:
131
+ timeout: 120
132
+ api_url: https://gitlab.com
133
+ api_token: ${GITLAB_API_TOKEN}
134
+ ```
135
+
136
+ 👉 This will:
137
+
138
+ - Run AI Review against your codebase.
139
+ - Generate inline and/or summary comments (depending on the selected mode).
140
+ - Use your chosen LLM provider (OpenAI GPT-4o-mini in this example).
141
+
142
+ > **Note:** Running `ai-review run` executes the full review (inline + summary).
143
+ > To run only one mode, use the dedicated subcommands:
144
+ > - ai-review run-inline
145
+ > - ai-review run-context
146
+ > - ai-review run-summary
147
+
148
+ ---
149
+
150
+ AI Review can be configured via `.ai-review.yaml`, `.ai-review.json`, or `.env`. See [./docs/configs](./docs/configs)
151
+ for complete, ready-to-use examples.
152
+
153
+ Key things you can customize:
154
+
155
+ - **LLM provider** — OpenAI, Gemini, or Claude
156
+ - **Model settings** — model name, temperature, max tokens
157
+ - **VCS integration** — works out of the box with **GitLab** and **GitHub**.
158
+ - **Review policy** — which files to include/exclude, review modes
159
+ - **Prompts** — inline/context/summary prompt templates
160
+
161
+ 👉 Minimal configuration is enough to get started. Use the full reference configs if you want fine-grained control (
162
+ timeouts, artifacts, logging, etc.).
163
+
164
+ ---
165
+
166
+ ## ⚙️ CI/CD Integration
167
+
168
+ AI Review works out-of-the-box with major CI providers.
169
+ Use these snippets to run AI Review automatically on Pull/Merge Requests.
170
+ Each integration uses environment variables for LLM and VCS configuration.
171
+
172
+ > For full configuration details (timeouts, artifacts, logging, prompt overrides), see [./docs/configs](./docs/configs).
173
+
174
+ ### 🚀 GitHub Actions
175
+
176
+ Add a workflow like this (manual trigger from **Actions** tab):
177
+
178
+ ```yaml
179
+ name: AI Review
180
+ on:
181
+ workflow_dispatch:
182
+ inputs:
183
+ review-command:
184
+ type: choice
185
+ default: run
186
+ options: [ run, run-inline, run-context, run-summary ]
187
+ pull-request-number:
188
+ type: string
189
+ required: true
190
+ jobs:
191
+ ai-review:
192
+ runs-on: ubuntu-latest
193
+ steps:
194
+ - uses: actions/checkout@v4
195
+ - uses: Nikita-Filonov/ai-review@v0.18.0
196
+ with:
197
+ review-command: ${{ inputs.review-command }}
198
+ env:
199
+ # --- LLM configuration ---
200
+ LLM__PROVIDER: "OPENAI"
201
+ LLM__META__MODEL: "gpt-4o-mini"
202
+ LLM__META__MAX_TOKENS: "15000"
203
+ LLM__META__TEMPERATURE: "0.3"
204
+ LLM__HTTP_CLIENT__API_URL: "https://api.openai.com/v1"
205
+ LLM__HTTP_CLIENT__API_TOKEN: ${{ secrets.OPENAI_API_KEY }}
206
+
207
+ # --- GitHub integration ---
208
+ VCS__PROVIDER: "GITHUB"
209
+ VCS__PIPELINE__OWNER: ${{ github.repository_owner }}
210
+ VCS__PIPELINE__REPO: ${{ github.event.repository.name }}
211
+ VCS__PIPELINE__PULL_NUMBER: ${{ inputs.pull-request-number }}
212
+ VCS__HTTP_CLIENT__API_URL: "https://api.github.com"
213
+ VCS__HTTP_CLIENT__API_TOKEN: ${{ secrets.GITHUB_TOKEN }}
214
+
215
+ ```
216
+
217
+ 🔗 Full example: [./docs/ci/github.yaml](./docs/ci/github.yaml)
218
+
219
+ ### 🚀 GitLab CI/CD
220
+
221
+ For GitLab users:
222
+
223
+ ```yaml
224
+ ai-review:
225
+ when: manual
226
+ stage: review
227
+ image: nikitafilonov/ai-review:latest
228
+ rules:
229
+ - if: '$CI_MERGE_REQUEST_IID'
230
+ script:
231
+ - ai-review run
232
+ variables:
233
+ # --- LLM configuration ---
234
+ LLM__PROVIDER: "OPENAI"
235
+ LLM__META__MODEL: "gpt-4o-mini"
236
+ LLM__META__MAX_TOKENS: "15000"
237
+ LLM__META__TEMPERATURE: "0.3"
238
+ LLM__HTTP_CLIENT__API_URL: "https://api.openai.com/v1"
239
+ LLM__HTTP_CLIENT__API_TOKEN: "$OPENAI_API_KEY"
240
+
241
+ # --- GitLab integration ---
242
+ VCS__PROVIDER: "GITLAB"
243
+ VCS__PIPELINE__PROJECT_ID: "$CI_PROJECT_ID"
244
+ VCS__PIPELINE__MERGE_REQUEST_ID: "$CI_MERGE_REQUEST_IID"
245
+ VCS__HTTP_CLIENT__API_URL: "$CI_SERVER_URL"
246
+ VCS__HTTP_CLIENT__API_TOKEN: "$CI_JOB_TOKEN"
247
+ allow_failure: true # Optional: don't block pipeline if AI review fails
248
+
249
+ ```
250
+
251
+ 🔗 Full example: [./docs/ci/gitlab.yaml](./docs/ci/gitlab.yaml)
252
+
253
+ ---
254
+
255
+ ## 📘 Documentation
256
+
257
+ See these folders for reference templates and full configuration options:
258
+
259
+ - [./docs/ci](./docs/ci) — CI/CD integration templates (GitHub Actions, GitLab CI)
260
+ - [./docs/configs](./docs/configs) — full configuration examples (`.yaml`, `.json`, `.env`)
261
+ - [./docs/prompts](./docs/prompts) — prompt templates for Python/Go (light & strict modes)
262
+
263
+ ---
264
+
265
+ ## ⚠️ Privacy & Responsibility Notice
266
+
267
+ AI Review does **not store**, **log**, or **transmit** your source code to any external service other than the **LLM
268
+ provider** explicitly configured in your `.ai-review.yaml`.
269
+
270
+ All data is sent **directly** from your CI/CD environment to the selected LLM API endpoint (e.g. OpenAI, Gemini,
271
+ Claude). No intermediary servers or storage layers are involved.
272
+
273
+ > ⚠️ Please ensure you use proper API tokens and avoid exposing corporate or personal secrets.
274
+ > If you accidentally leak private code or credentials due to incorrect configuration (e.g., using a personal key
275
+ > instead of an enterprise one), it is **your responsibility** — the tool does not retain or share any data by itself.
276
+
277
+ ---
278
+
279
+ 🧠 **AI Review** — open-source AI-powered code reviewer
280
+
281
+ - 📦 [PyPI](https://pypi.org/project/xai-review/)
282
+ - 🐳 [DockerHub](https://hub.docker.com/r/nikitafilonov/ai-review)
@@ -0,0 +1,258 @@
1
+ # AI Review
2
+
3
+ AI-powered code review tool.
4
+
5
+ [![CI](https://github.com/Nikita-Filonov/ai-review/actions/workflows/workflow-test.yml/badge.svg)](https://github.com/Nikita-Filonov/ai-review/actions/workflows/workflow-test.yml)
6
+ [![codecov](https://codecov.io/gh/Nikita-Filonov/ai-review/branch/main/graph/badge.svg)](https://codecov.io/gh/Nikita-Filonov/ai-review)
7
+ [![PyPI version](https://img.shields.io/pypi/v/xai-review.svg)](https://pypi.org/project/xai-review/)
8
+ [![License](https://img.shields.io/github/license/Nikita-Filonov/ai-review)](./LICENSE)
9
+ [![GitHub stars](https://img.shields.io/github/stars/Nikita-Filonov/ai-review?style=social)](https://github.com/Nikita-Filonov/ai-review/stargazers)
10
+
11
+ _Made with ❤️ by [@NikitaFilonov](https://t.me/sound_right)_
12
+
13
+ ---
14
+
15
+ ## 📑 Table of Contents
16
+
17
+ - ✨ [About](#-about)
18
+ - 🧪 [Live Preview](#-live-preview)
19
+ - 🚀 [Quick Start](#-quick-start)
20
+ - ⚙️ [️CI/CD Integration](#-cicd-integration)
21
+ - 🚀 [GitHub Actions](#-github-actions)
22
+ - 🚀 [GitLab CI/CD](#-gitlab-cicd)
23
+ - 📘 [Documentation](#-documentation)
24
+ - ⚠️ [Privacy & Responsibility Notice](#-privacy--responsibility-notice)
25
+
26
+ ---
27
+
28
+ ## ✨ About
29
+
30
+ **AI Review** is a developer tool that brings **AI-powered code review** directly into your workflow. It helps teams
31
+ improve code quality, enforce consistency, and speed up the review process.
32
+
33
+ ✨ Key features:
34
+
35
+ - **Multiple LLM providers** — choose between **OpenAI**, **Claude**, and **Gemini**, or switch anytime.
36
+ - **VCS integration** — works out of the box with GitLab, GitHub (more providers coming).
37
+ - **Customizable prompts** — adapt inline, context, and summary reviews to match your team’s coding guidelines.
38
+ - **Flexible configuration** — supports `YAML`, `JSON`, and `ENV`, with seamless overrides in CI/CD pipelines.
39
+ - **AI Review runs fully client-side** — it never proxies or inspects your requests.
40
+
41
+ AI Review runs automatically in your CI/CD pipeline and posts both **inline comments** and **summary reviews** right
42
+ inside your merge requests. This makes reviews faster, more consistent, and less error-prone — while still leaving the
43
+ final decision to human reviewers.
44
+
45
+ ---
46
+
47
+ ## 🧪 Live Preview
48
+
49
+ Curious how **AI Review** works in practice? Here are three real Pull Requests reviewed entirely by the tool — one per
50
+ mode:
51
+
52
+ | Mode | Description | Live Example |
53
+ |------------|----------------------------------------------------|-------------------------------------------------------------------------------|
54
+ | 🧩 Inline | Adds line-by-line comments directly in the diff | [Try AI Review (inline)](https://github.com/Nikita-Filonov/ai-review/pull/4) |
55
+ | 📄 Summary | Posts a concise summary review with key highlights | [Try AI Review (context)](https://github.com/Nikita-Filonov/ai-review/pull/5) |
56
+ | 🧠 Context | Performs broader analysis across multiple files | [Try AI Review (summary)](https://github.com/Nikita-Filonov/ai-review/pull/6) |
57
+
58
+ Each review was generated automatically via GitHub Actions using the corresponding mode:
59
+
60
+ ```bash
61
+ ai-review run-inline
62
+ ai-review run-summary
63
+ ai-review run-context
64
+ ```
65
+
66
+ ---
67
+
68
+ ## 🚀 Quick Start
69
+
70
+ Install via **pip**:
71
+
72
+ ```bash
73
+ pip install xai-review
74
+ ```
75
+
76
+ Or run directly via Docker:
77
+
78
+ ```bash
79
+ docker run --rm -v $(pwd):/app nikitafilonov/ai-review:latest run-summary
80
+ ```
81
+
82
+ 👉 Before running, create a basic configuration file [.ai-review.yaml](./docs/configs/.ai-review.yaml) in the root of
83
+ your project:
84
+
85
+ ```yaml
86
+ llm:
87
+ provider: OPENAI
88
+
89
+ meta:
90
+ model: gpt-4o-mini
91
+ max_tokens: 1200
92
+ temperature: 0.3
93
+
94
+ http_client:
95
+ timeout: 120
96
+ api_url: https://api.openai.com/v1
97
+ api_token: ${OPENAI_API_KEY}
98
+
99
+ vcs:
100
+ provider: GITLAB
101
+
102
+ pipeline:
103
+ project_id: 1
104
+ merge_request_id: 100
105
+
106
+ http_client:
107
+ timeout: 120
108
+ api_url: https://gitlab.com
109
+ api_token: ${GITLAB_API_TOKEN}
110
+ ```
111
+
112
+ 👉 This will:
113
+
114
+ - Run AI Review against your codebase.
115
+ - Generate inline and/or summary comments (depending on the selected mode).
116
+ - Use your chosen LLM provider (OpenAI GPT-4o-mini in this example).
117
+
118
+ > **Note:** Running `ai-review run` executes the full review (inline + summary).
119
+ > To run only one mode, use the dedicated subcommands:
120
+ > - ai-review run-inline
121
+ > - ai-review run-context
122
+ > - ai-review run-summary
123
+
124
+ ---
125
+
126
+ AI Review can be configured via `.ai-review.yaml`, `.ai-review.json`, or `.env`. See [./docs/configs](./docs/configs)
127
+ for complete, ready-to-use examples.
128
+
129
+ Key things you can customize:
130
+
131
+ - **LLM provider** — OpenAI, Gemini, or Claude
132
+ - **Model settings** — model name, temperature, max tokens
133
+ - **VCS integration** — works out of the box with **GitLab** and **GitHub**.
134
+ - **Review policy** — which files to include/exclude, review modes
135
+ - **Prompts** — inline/context/summary prompt templates
136
+
137
+ 👉 Minimal configuration is enough to get started. Use the full reference configs if you want fine-grained control (
138
+ timeouts, artifacts, logging, etc.).
139
+
140
+ ---
141
+
142
+ ## ⚙️ CI/CD Integration
143
+
144
+ AI Review works out-of-the-box with major CI providers.
145
+ Use these snippets to run AI Review automatically on Pull/Merge Requests.
146
+ Each integration uses environment variables for LLM and VCS configuration.
147
+
148
+ > For full configuration details (timeouts, artifacts, logging, prompt overrides), see [./docs/configs](./docs/configs).
149
+
150
+ ### 🚀 GitHub Actions
151
+
152
+ Add a workflow like this (manual trigger from **Actions** tab):
153
+
154
+ ```yaml
155
+ name: AI Review
156
+ on:
157
+ workflow_dispatch:
158
+ inputs:
159
+ review-command:
160
+ type: choice
161
+ default: run
162
+ options: [ run, run-inline, run-context, run-summary ]
163
+ pull-request-number:
164
+ type: string
165
+ required: true
166
+ jobs:
167
+ ai-review:
168
+ runs-on: ubuntu-latest
169
+ steps:
170
+ - uses: actions/checkout@v4
171
+ - uses: Nikita-Filonov/ai-review@v0.18.0
172
+ with:
173
+ review-command: ${{ inputs.review-command }}
174
+ env:
175
+ # --- LLM configuration ---
176
+ LLM__PROVIDER: "OPENAI"
177
+ LLM__META__MODEL: "gpt-4o-mini"
178
+ LLM__META__MAX_TOKENS: "15000"
179
+ LLM__META__TEMPERATURE: "0.3"
180
+ LLM__HTTP_CLIENT__API_URL: "https://api.openai.com/v1"
181
+ LLM__HTTP_CLIENT__API_TOKEN: ${{ secrets.OPENAI_API_KEY }}
182
+
183
+ # --- GitHub integration ---
184
+ VCS__PROVIDER: "GITHUB"
185
+ VCS__PIPELINE__OWNER: ${{ github.repository_owner }}
186
+ VCS__PIPELINE__REPO: ${{ github.event.repository.name }}
187
+ VCS__PIPELINE__PULL_NUMBER: ${{ inputs.pull-request-number }}
188
+ VCS__HTTP_CLIENT__API_URL: "https://api.github.com"
189
+ VCS__HTTP_CLIENT__API_TOKEN: ${{ secrets.GITHUB_TOKEN }}
190
+
191
+ ```
192
+
193
+ 🔗 Full example: [./docs/ci/github.yaml](./docs/ci/github.yaml)
194
+
195
+ ### 🚀 GitLab CI/CD
196
+
197
+ For GitLab users:
198
+
199
+ ```yaml
200
+ ai-review:
201
+ when: manual
202
+ stage: review
203
+ image: nikitafilonov/ai-review:latest
204
+ rules:
205
+ - if: '$CI_MERGE_REQUEST_IID'
206
+ script:
207
+ - ai-review run
208
+ variables:
209
+ # --- LLM configuration ---
210
+ LLM__PROVIDER: "OPENAI"
211
+ LLM__META__MODEL: "gpt-4o-mini"
212
+ LLM__META__MAX_TOKENS: "15000"
213
+ LLM__META__TEMPERATURE: "0.3"
214
+ LLM__HTTP_CLIENT__API_URL: "https://api.openai.com/v1"
215
+ LLM__HTTP_CLIENT__API_TOKEN: "$OPENAI_API_KEY"
216
+
217
+ # --- GitLab integration ---
218
+ VCS__PROVIDER: "GITLAB"
219
+ VCS__PIPELINE__PROJECT_ID: "$CI_PROJECT_ID"
220
+ VCS__PIPELINE__MERGE_REQUEST_ID: "$CI_MERGE_REQUEST_IID"
221
+ VCS__HTTP_CLIENT__API_URL: "$CI_SERVER_URL"
222
+ VCS__HTTP_CLIENT__API_TOKEN: "$CI_JOB_TOKEN"
223
+ allow_failure: true # Optional: don't block pipeline if AI review fails
224
+
225
+ ```
226
+
227
+ 🔗 Full example: [./docs/ci/gitlab.yaml](./docs/ci/gitlab.yaml)
228
+
229
+ ---
230
+
231
+ ## 📘 Documentation
232
+
233
+ See these folders for reference templates and full configuration options:
234
+
235
+ - [./docs/ci](./docs/ci) — CI/CD integration templates (GitHub Actions, GitLab CI)
236
+ - [./docs/configs](./docs/configs) — full configuration examples (`.yaml`, `.json`, `.env`)
237
+ - [./docs/prompts](./docs/prompts) — prompt templates for Python/Go (light & strict modes)
238
+
239
+ ---
240
+
241
+ ## ⚠️ Privacy & Responsibility Notice
242
+
243
+ AI Review does **not store**, **log**, or **transmit** your source code to any external service other than the **LLM
244
+ provider** explicitly configured in your `.ai-review.yaml`.
245
+
246
+ All data is sent **directly** from your CI/CD environment to the selected LLM API endpoint (e.g. OpenAI, Gemini,
247
+ Claude). No intermediary servers or storage layers are involved.
248
+
249
+ > ⚠️ Please ensure you use proper API tokens and avoid exposing corporate or personal secrets.
250
+ > If you accidentally leak private code or credentials due to incorrect configuration (e.g., using a personal key
251
+ > instead of an enterprise one), it is **your responsibility** — the tool does not retain or share any data by itself.
252
+
253
+ ---
254
+
255
+ 🧠 **AI Review** — open-source AI-powered code reviewer
256
+
257
+ - 📦 [PyPI](https://pypi.org/project/xai-review/)
258
+ - 🐳 [DockerHub](https://hub.docker.com/r/nikitafilonov/ai-review)
@@ -124,6 +124,10 @@ class GitHubVCSClient(VCSClient):
124
124
 
125
125
  async def create_discussion(self, file: str, line: int, message: str) -> None:
126
126
  try:
127
+ logger.info(
128
+ f"Posting inline comment in {self.owner}/{self.repo}#{self.pull_number} at {file}:{line}: {message}"
129
+ )
130
+
127
131
  pr = await self.http_client.pr.get_pull_request(
128
132
  owner=self.owner, repo=self.repo, pull_number=self.pull_number
129
133
  )
@@ -5,7 +5,7 @@ build-backend = "setuptools.build_meta"
5
5
  [project]
6
6
  name = "xai-review"
7
7
  readme = "README.md"
8
- version = "0.16.0"
8
+ version = "0.18.0"
9
9
  license = { text = "Apache-2.0" }
10
10
  authors = [
11
11
  { name = "Nikita Filonov", email = "nikita.filonov@example.com" }