xai-review 0.3.0__py3-none-any.whl
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.
- ai_review/__init__.py +0 -0
- ai_review/cli/__init__.py +0 -0
- ai_review/cli/commands/__init__.py +0 -0
- ai_review/cli/commands/run_context_review.py +7 -0
- ai_review/cli/commands/run_inline_review.py +7 -0
- ai_review/cli/commands/run_review.py +8 -0
- ai_review/cli/commands/run_summary_review.py +7 -0
- ai_review/cli/main.py +54 -0
- ai_review/clients/__init__.py +0 -0
- ai_review/clients/claude/__init__.py +0 -0
- ai_review/clients/claude/client.py +44 -0
- ai_review/clients/claude/schema.py +44 -0
- ai_review/clients/gemini/__init__.py +0 -0
- ai_review/clients/gemini/client.py +45 -0
- ai_review/clients/gemini/schema.py +78 -0
- ai_review/clients/gitlab/__init__.py +0 -0
- ai_review/clients/gitlab/client.py +31 -0
- ai_review/clients/gitlab/mr/__init__.py +0 -0
- ai_review/clients/gitlab/mr/client.py +101 -0
- ai_review/clients/gitlab/mr/schema/__init__.py +0 -0
- ai_review/clients/gitlab/mr/schema/changes.py +35 -0
- ai_review/clients/gitlab/mr/schema/comments.py +19 -0
- ai_review/clients/gitlab/mr/schema/discussions.py +34 -0
- ai_review/clients/openai/__init__.py +0 -0
- ai_review/clients/openai/client.py +42 -0
- ai_review/clients/openai/schema.py +37 -0
- ai_review/config.py +62 -0
- ai_review/libs/__init__.py +0 -0
- ai_review/libs/asynchronous/__init__.py +0 -0
- ai_review/libs/asynchronous/gather.py +14 -0
- ai_review/libs/config/__init__.py +0 -0
- ai_review/libs/config/artifacts.py +12 -0
- ai_review/libs/config/base.py +24 -0
- ai_review/libs/config/claude.py +13 -0
- ai_review/libs/config/gemini.py +13 -0
- ai_review/libs/config/gitlab.py +12 -0
- ai_review/libs/config/http.py +19 -0
- ai_review/libs/config/llm.py +61 -0
- ai_review/libs/config/logger.py +17 -0
- ai_review/libs/config/openai.py +13 -0
- ai_review/libs/config/prompt.py +121 -0
- ai_review/libs/config/review.py +30 -0
- ai_review/libs/config/vcs.py +19 -0
- ai_review/libs/constants/__init__.py +0 -0
- ai_review/libs/constants/llm_provider.py +7 -0
- ai_review/libs/constants/vcs_provider.py +6 -0
- ai_review/libs/diff/__init__.py +0 -0
- ai_review/libs/diff/models.py +100 -0
- ai_review/libs/diff/parser.py +111 -0
- ai_review/libs/diff/tools.py +24 -0
- ai_review/libs/http/__init__.py +0 -0
- ai_review/libs/http/client.py +14 -0
- ai_review/libs/http/event_hooks/__init__.py +0 -0
- ai_review/libs/http/event_hooks/base.py +13 -0
- ai_review/libs/http/event_hooks/logger.py +17 -0
- ai_review/libs/http/handlers.py +34 -0
- ai_review/libs/http/transports/__init__.py +0 -0
- ai_review/libs/http/transports/retry.py +34 -0
- ai_review/libs/logger.py +19 -0
- ai_review/libs/resources.py +24 -0
- ai_review/prompts/__init__.py +0 -0
- ai_review/prompts/default_context.md +14 -0
- ai_review/prompts/default_inline.md +8 -0
- ai_review/prompts/default_summary.md +3 -0
- ai_review/prompts/default_system_context.md +27 -0
- ai_review/prompts/default_system_inline.md +25 -0
- ai_review/prompts/default_system_summary.md +7 -0
- ai_review/resources/__init__.py +0 -0
- ai_review/resources/pricing.yaml +55 -0
- ai_review/services/__init__.py +0 -0
- ai_review/services/artifacts/__init__.py +0 -0
- ai_review/services/artifacts/schema.py +11 -0
- ai_review/services/artifacts/service.py +47 -0
- ai_review/services/artifacts/tools.py +8 -0
- ai_review/services/cost/__init__.py +0 -0
- ai_review/services/cost/schema.py +44 -0
- ai_review/services/cost/service.py +58 -0
- ai_review/services/diff/__init__.py +0 -0
- ai_review/services/diff/renderers.py +149 -0
- ai_review/services/diff/schema.py +6 -0
- ai_review/services/diff/service.py +96 -0
- ai_review/services/diff/tools.py +59 -0
- ai_review/services/git/__init__.py +0 -0
- ai_review/services/git/service.py +35 -0
- ai_review/services/git/types.py +11 -0
- ai_review/services/llm/__init__.py +0 -0
- ai_review/services/llm/claude/__init__.py +0 -0
- ai_review/services/llm/claude/client.py +26 -0
- ai_review/services/llm/factory.py +18 -0
- ai_review/services/llm/gemini/__init__.py +0 -0
- ai_review/services/llm/gemini/client.py +31 -0
- ai_review/services/llm/openai/__init__.py +0 -0
- ai_review/services/llm/openai/client.py +28 -0
- ai_review/services/llm/types.py +15 -0
- ai_review/services/prompt/__init__.py +0 -0
- ai_review/services/prompt/adapter.py +25 -0
- ai_review/services/prompt/schema.py +71 -0
- ai_review/services/prompt/service.py +56 -0
- ai_review/services/review/__init__.py +0 -0
- ai_review/services/review/inline/__init__.py +0 -0
- ai_review/services/review/inline/schema.py +53 -0
- ai_review/services/review/inline/service.py +38 -0
- ai_review/services/review/policy/__init__.py +0 -0
- ai_review/services/review/policy/service.py +60 -0
- ai_review/services/review/service.py +207 -0
- ai_review/services/review/summary/__init__.py +0 -0
- ai_review/services/review/summary/schema.py +15 -0
- ai_review/services/review/summary/service.py +14 -0
- ai_review/services/vcs/__init__.py +0 -0
- ai_review/services/vcs/factory.py +12 -0
- ai_review/services/vcs/gitlab/__init__.py +0 -0
- ai_review/services/vcs/gitlab/client.py +152 -0
- ai_review/services/vcs/types.py +55 -0
- ai_review/tests/__init__.py +0 -0
- ai_review/tests/fixtures/__init__.py +0 -0
- ai_review/tests/fixtures/git.py +31 -0
- ai_review/tests/suites/__init__.py +0 -0
- ai_review/tests/suites/clients/__init__.py +0 -0
- ai_review/tests/suites/clients/claude/__init__.py +0 -0
- ai_review/tests/suites/clients/claude/test_client.py +31 -0
- ai_review/tests/suites/clients/claude/test_schema.py +59 -0
- ai_review/tests/suites/clients/gemini/__init__.py +0 -0
- ai_review/tests/suites/clients/gemini/test_client.py +30 -0
- ai_review/tests/suites/clients/gemini/test_schema.py +105 -0
- ai_review/tests/suites/clients/openai/__init__.py +0 -0
- ai_review/tests/suites/clients/openai/test_client.py +30 -0
- ai_review/tests/suites/clients/openai/test_schema.py +53 -0
- ai_review/tests/suites/libs/__init__.py +0 -0
- ai_review/tests/suites/libs/diff/__init__.py +0 -0
- ai_review/tests/suites/libs/diff/test_models.py +105 -0
- ai_review/tests/suites/libs/diff/test_parser.py +115 -0
- ai_review/tests/suites/libs/diff/test_tools.py +62 -0
- ai_review/tests/suites/services/__init__.py +0 -0
- ai_review/tests/suites/services/diff/__init__.py +0 -0
- ai_review/tests/suites/services/diff/test_renderers.py +168 -0
- ai_review/tests/suites/services/diff/test_service.py +84 -0
- ai_review/tests/suites/services/diff/test_tools.py +108 -0
- ai_review/tests/suites/services/prompt/__init__.py +0 -0
- ai_review/tests/suites/services/prompt/test_schema.py +38 -0
- ai_review/tests/suites/services/prompt/test_service.py +128 -0
- ai_review/tests/suites/services/review/__init__.py +0 -0
- ai_review/tests/suites/services/review/inline/__init__.py +0 -0
- ai_review/tests/suites/services/review/inline/test_schema.py +65 -0
- ai_review/tests/suites/services/review/inline/test_service.py +49 -0
- ai_review/tests/suites/services/review/policy/__init__.py +0 -0
- ai_review/tests/suites/services/review/policy/test_service.py +95 -0
- ai_review/tests/suites/services/review/summary/__init__.py +0 -0
- ai_review/tests/suites/services/review/summary/test_schema.py +22 -0
- ai_review/tests/suites/services/review/summary/test_service.py +16 -0
- xai_review-0.3.0.dist-info/METADATA +11 -0
- xai_review-0.3.0.dist-info/RECORD +154 -0
- xai_review-0.3.0.dist-info/WHEEL +5 -0
- xai_review-0.3.0.dist-info/entry_points.txt +2 -0
- xai_review-0.3.0.dist-info/top_level.txt +1 -0
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
import pytest
|
|
2
|
+
|
|
3
|
+
from ai_review.config import settings
|
|
4
|
+
from ai_review.services.review.policy.service import ReviewPolicyService
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
@pytest.fixture(autouse=True)
|
|
8
|
+
def reset_settings(monkeypatch: pytest.MonkeyPatch):
|
|
9
|
+
"""Сбрасываем правила перед каждым тестом."""
|
|
10
|
+
monkeypatch.setattr(settings.review, "ignore_changes", [])
|
|
11
|
+
monkeypatch.setattr(settings.review, "allow_changes", [])
|
|
12
|
+
monkeypatch.setattr(settings.review, "max_inline_comments", None)
|
|
13
|
+
monkeypatch.setattr(settings.review, "max_context_comments", None)
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
# ---------- should_review_file ----------
|
|
17
|
+
|
|
18
|
+
def test_should_review_skips_if_matches_ignore(monkeypatch):
|
|
19
|
+
monkeypatch.setattr(settings.review, "ignore_changes", ["*.md"])
|
|
20
|
+
assert not ReviewPolicyService.should_review_file("README.md")
|
|
21
|
+
assert ReviewPolicyService.should_review_file("main.py")
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
def test_should_review_allows_if_no_allow_rules(monkeypatch):
|
|
25
|
+
monkeypatch.setattr(settings.review, "ignore_changes", [])
|
|
26
|
+
monkeypatch.setattr(settings.review, "allow_changes", [])
|
|
27
|
+
assert ReviewPolicyService.should_review_file("file.py")
|
|
28
|
+
|
|
29
|
+
|
|
30
|
+
def test_should_review_allows_if_matches_allow(monkeypatch):
|
|
31
|
+
monkeypatch.setattr(settings.review, "allow_changes", ["src/*.py"])
|
|
32
|
+
assert ReviewPolicyService.should_review_file("src/main.py")
|
|
33
|
+
assert not ReviewPolicyService.should_review_file("tests/test_main.py")
|
|
34
|
+
|
|
35
|
+
|
|
36
|
+
def test_should_review_skips_if_not_in_allow(monkeypatch):
|
|
37
|
+
monkeypatch.setattr(settings.review, "allow_changes", ["only/*.py"])
|
|
38
|
+
assert not ReviewPolicyService.should_review_file("other/file.py")
|
|
39
|
+
|
|
40
|
+
|
|
41
|
+
def test_ignore_has_priority_over_allow(monkeypatch):
|
|
42
|
+
monkeypatch.setattr(settings.review, "ignore_changes", ["*.py"])
|
|
43
|
+
monkeypatch.setattr(settings.review, "allow_changes", ["*.py"])
|
|
44
|
+
assert not ReviewPolicyService.should_review_file("main.py")
|
|
45
|
+
|
|
46
|
+
|
|
47
|
+
# ---------- apply_for_files ----------
|
|
48
|
+
|
|
49
|
+
def test_apply_for_files_filters(monkeypatch):
|
|
50
|
+
monkeypatch.setattr(settings.review, "ignore_changes", ["*.md"])
|
|
51
|
+
monkeypatch.setattr(settings.review, "allow_changes", ["src/*.py"])
|
|
52
|
+
|
|
53
|
+
files = ["README.md", "src/main.py", "tests/test_main.py"]
|
|
54
|
+
allowed = ReviewPolicyService.apply_for_files(files)
|
|
55
|
+
|
|
56
|
+
assert allowed == ["src/main.py"]
|
|
57
|
+
|
|
58
|
+
|
|
59
|
+
# ---------- apply_for_inline_comments ----------
|
|
60
|
+
|
|
61
|
+
def test_apply_for_inline_comments_with_limit(monkeypatch):
|
|
62
|
+
monkeypatch.setattr(settings.review, "max_inline_comments", 2)
|
|
63
|
+
comments = ["c1", "c2", "c3"]
|
|
64
|
+
limited = ReviewPolicyService.apply_for_inline_comments(comments)
|
|
65
|
+
assert limited == ["c1", "c2"]
|
|
66
|
+
|
|
67
|
+
|
|
68
|
+
def test_apply_for_inline_comments_without_limit(monkeypatch):
|
|
69
|
+
monkeypatch.setattr(settings.review, "max_inline_comments", None)
|
|
70
|
+
comments = ["c1", "c2", "c3"]
|
|
71
|
+
limited = ReviewPolicyService.apply_for_inline_comments(comments)
|
|
72
|
+
assert limited == comments
|
|
73
|
+
|
|
74
|
+
|
|
75
|
+
def test_apply_for_inline_comments_when_fewer_than_limit(monkeypatch):
|
|
76
|
+
monkeypatch.setattr(settings.review, "max_inline_comments", 5)
|
|
77
|
+
comments = ["c1", "c2"]
|
|
78
|
+
limited = ReviewPolicyService.apply_for_inline_comments(comments)
|
|
79
|
+
assert limited == comments
|
|
80
|
+
|
|
81
|
+
|
|
82
|
+
# ---------- apply_for_context_comments ----------
|
|
83
|
+
|
|
84
|
+
def test_apply_for_context_comments_with_limit(monkeypatch):
|
|
85
|
+
monkeypatch.setattr(settings.review, "max_context_comments", 1)
|
|
86
|
+
comments = ["c1", "c2"]
|
|
87
|
+
limited = ReviewPolicyService.apply_for_context_comments(comments)
|
|
88
|
+
assert limited == ["c1"]
|
|
89
|
+
|
|
90
|
+
|
|
91
|
+
def test_apply_for_context_comments_without_limit(monkeypatch):
|
|
92
|
+
monkeypatch.setattr(settings.review, "max_context_comments", None)
|
|
93
|
+
comments = ["c1", "c2", "c3"]
|
|
94
|
+
limited = ReviewPolicyService.apply_for_context_comments(comments)
|
|
95
|
+
assert limited == comments
|
|
File without changes
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
from ai_review.config import settings
|
|
2
|
+
from ai_review.services.review.summary.schema import SummaryCommentSchema
|
|
3
|
+
|
|
4
|
+
|
|
5
|
+
def test_normalize_text_strips_whitespace():
|
|
6
|
+
comment = SummaryCommentSchema(text=" some summary ")
|
|
7
|
+
assert comment.text == "some summary"
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
def test_normalize_text_empty_becomes_empty_string():
|
|
11
|
+
comment = SummaryCommentSchema(text=" ")
|
|
12
|
+
assert comment.text == ""
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
def test_body_with_tag_appends_tag(monkeypatch):
|
|
16
|
+
monkeypatch.setattr(settings.review, "summary_tag", "#ai-summary")
|
|
17
|
+
comment = SummaryCommentSchema(text="Review passed")
|
|
18
|
+
body = comment.body_with_tag
|
|
19
|
+
assert body.startswith("Review passed")
|
|
20
|
+
assert body.endswith("\n\n#ai-summary")
|
|
21
|
+
# убедимся, что перенос строки присутствует
|
|
22
|
+
assert "\n\n#ai-summary" in body
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import pytest
|
|
2
|
+
|
|
3
|
+
from ai_review.services.review.summary.schema import SummaryCommentSchema
|
|
4
|
+
from ai_review.services.review.summary.service import SummaryCommentService
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
@pytest.mark.parametrize("raw, expected", [
|
|
8
|
+
("Some summary", "Some summary"),
|
|
9
|
+
(" padded summary ", "padded summary"),
|
|
10
|
+
("", ""),
|
|
11
|
+
(None, ""),
|
|
12
|
+
])
|
|
13
|
+
def test_parse_model_output_normalizes_and_wraps(raw, expected):
|
|
14
|
+
result = SummaryCommentService.parse_model_output(raw)
|
|
15
|
+
assert isinstance(result, SummaryCommentSchema)
|
|
16
|
+
assert result.text == expected
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: xai-review
|
|
3
|
+
Version: 0.3.0
|
|
4
|
+
Requires-Dist: typer
|
|
5
|
+
Requires-Dist: httpx
|
|
6
|
+
Requires-Dist: pyyaml
|
|
7
|
+
Requires-Dist: pytest
|
|
8
|
+
Requires-Dist: loguru
|
|
9
|
+
Requires-Dist: aiofiles
|
|
10
|
+
Requires-Dist: pydantic
|
|
11
|
+
Requires-Dist: pydantic-settings
|
|
@@ -0,0 +1,154 @@
|
|
|
1
|
+
ai_review/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
2
|
+
ai_review/config.py,sha256=t3lhgbI58GjU5Wt7M-wVn0RyPcN51JPiMPOJQ39sT-M,1868
|
|
3
|
+
ai_review/cli/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
4
|
+
ai_review/cli/main.py,sha256=rZ0LYSAt3AFT-wOHdop8lq2GOVAK48kJYp7nf801Mjs,1854
|
|
5
|
+
ai_review/cli/commands/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
6
|
+
ai_review/cli/commands/run_context_review.py,sha256=pWYv9fIlVql8Bf0oz4UQ0a-Ta5NCzY3hC7f_W23wUaA,224
|
|
7
|
+
ai_review/cli/commands/run_inline_review.py,sha256=u55K-Su0PR2-NcK7XI2rTCIi7HTEi1VvA8wyw2B39bk,222
|
|
8
|
+
ai_review/cli/commands/run_review.py,sha256=i39IYNDE_lAiQQnKLmxG71Ao8WAIOSn82L9EpdbPcsI,261
|
|
9
|
+
ai_review/cli/commands/run_summary_review.py,sha256=NqjepGH5cbqczPzcuMEAxO4dI58FEUZl0b6uRVQ9SiA,224
|
|
10
|
+
ai_review/clients/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
11
|
+
ai_review/clients/claude/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
12
|
+
ai_review/clients/claude/client.py,sha256=bMf5HK8HL-E83NPWcZx_fLMKGhCieHDdxpv7_YQ-818,1768
|
|
13
|
+
ai_review/clients/claude/schema.py,sha256=LE6KCjJKDXqBGU2Cno5XL5R8vUfScgskE9MqvE0Pt2A,887
|
|
14
|
+
ai_review/clients/gemini/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
15
|
+
ai_review/clients/gemini/client.py,sha256=fAWd-yZ7PCiLQ3dTZ5tsanG1UmQ2LV_jMjjnuGF77mM,1767
|
|
16
|
+
ai_review/clients/gemini/schema.py,sha256=5oVvbI-h_sw8bFreS4JUmMj-aXa_frvxK3H8sg4iJIA,2264
|
|
17
|
+
ai_review/clients/gitlab/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
18
|
+
ai_review/clients/gitlab/client.py,sha256=vU12e0tJ-2u8tBx730m5jNwO2o_ban_4kW7ciY81TuA,1143
|
|
19
|
+
ai_review/clients/gitlab/mr/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
20
|
+
ai_review/clients/gitlab/mr/client.py,sha256=-4KHBie8NlHzX5LXdV9c9aL7UbHxuQ5XsDq701U-6q8,3844
|
|
21
|
+
ai_review/clients/gitlab/mr/schema/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
22
|
+
ai_review/clients/gitlab/mr/schema/changes.py,sha256=jmEgiLE07TNVU7nBe4hkP4xd1VOfpPYKF_7jBdalvq0,754
|
|
23
|
+
ai_review/clients/gitlab/mr/schema/comments.py,sha256=F_ehfaZDsDPfJJH9HK1BTC3GAKZhm0Nkb15XbAgd1pA,382
|
|
24
|
+
ai_review/clients/gitlab/mr/schema/discussions.py,sha256=b5Ro_W4dp1_JLEejRz05gYFwiNeoGk-8niz1z27rSIk,710
|
|
25
|
+
ai_review/clients/openai/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
26
|
+
ai_review/clients/openai/client.py,sha256=6n9c_R5zER2nJAEwBlwKXlfNDim4Kyk0vKTbtWdhHDk,1699
|
|
27
|
+
ai_review/clients/openai/schema.py,sha256=glxwMtBrDA6W0BQgH-ruKe0bKH3Ps1P-Y1-2jGdqaUM,764
|
|
28
|
+
ai_review/libs/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
29
|
+
ai_review/libs/logger.py,sha256=LbXR2Zk1btJ-83I-vHee7cUETgT1mHToSsqEI_8uM0U,370
|
|
30
|
+
ai_review/libs/resources.py,sha256=s9taAbL1Shl_GiGkPpkkivUcM1Yh6d_IQAG97gffsJU,748
|
|
31
|
+
ai_review/libs/asynchronous/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
32
|
+
ai_review/libs/asynchronous/gather.py,sha256=7YnZH7Y0IZxOSyFmQOFL3vNxsSz1ErIeB3uXoOyqN_M,431
|
|
33
|
+
ai_review/libs/config/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
34
|
+
ai_review/libs/config/artifacts.py,sha256=8BzbQu5GxwV6i6qzrUKM1De1Ogb00Ph5WTqwZ3fVpGg,483
|
|
35
|
+
ai_review/libs/config/base.py,sha256=sPf3OKeF1ID0ouOwiVaUtvpWuZXJXQvIw5kbnPUyN9o,686
|
|
36
|
+
ai_review/libs/config/claude.py,sha256=E9AJmszfY4TH8PkJjnDDDJYNAU9bLGsUThM3kriVA58,302
|
|
37
|
+
ai_review/libs/config/gemini.py,sha256=sXHud43LWb4xTvhdkGQeHSLC7qvWl5LfU41fgcIVE5E,274
|
|
38
|
+
ai_review/libs/config/gitlab.py,sha256=VFvoVtni86tWky6Y34XCYdNrBuAtbgFFYGK3idPSOS4,234
|
|
39
|
+
ai_review/libs/config/http.py,sha256=R2MBZ-P10zIMXGs1tKbbPKFhvlEocVFd7Vv5dvg_QME,431
|
|
40
|
+
ai_review/libs/config/llm.py,sha256=cK-e4NCQxnnixLATCsO8-r5k3zUWz1N0BdPCoqerORM,1824
|
|
41
|
+
ai_review/libs/config/logger.py,sha256=oPmjpjf6EZwW7CgOjT8mOQdGnT98CLwXepiGB_ajZvU,384
|
|
42
|
+
ai_review/libs/config/openai.py,sha256=vOYqhUq0ceEuNdQrQaHq44lVS5M648mB61Zc4YlfJVw,271
|
|
43
|
+
ai_review/libs/config/prompt.py,sha256=xtgwsZ7NVmIEW3wpvfNiXJB3a1T_b_oUyfBOQ2Ye0g0,4389
|
|
44
|
+
ai_review/libs/config/review.py,sha256=LEZni68iH_0m4URPfN0d3F6yrrK7KSn-BwXf-7w2al8,1058
|
|
45
|
+
ai_review/libs/config/vcs.py,sha256=FduvJJkGObh2LgTSapaMB6FABIvjX7E63yTwZF4p8CU,517
|
|
46
|
+
ai_review/libs/constants/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
47
|
+
ai_review/libs/constants/llm_provider.py,sha256=sKnDLylCIIosYjq0-0r91LMiYJ4DlHVH2jeRDv_DlsQ,121
|
|
48
|
+
ai_review/libs/constants/vcs_provider.py,sha256=mZMC8DWIDWQ1YeUZh1a1jduX5enOAe1rWeza0RBmpTY,99
|
|
49
|
+
ai_review/libs/diff/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
50
|
+
ai_review/libs/diff/models.py,sha256=RT4YJboOPA-AjNJGRj_HIZaJLEmROOhOgMh1wIGpIwY,2344
|
|
51
|
+
ai_review/libs/diff/parser.py,sha256=2BGxZnRN3SRjNnZK4qIOW28aM93Ij__1SltwclJrlno,3817
|
|
52
|
+
ai_review/libs/diff/tools.py,sha256=CZWRDlOW2YS-b8h9gv_uP1MG194_FLkKzcKTwwZHocI,686
|
|
53
|
+
ai_review/libs/http/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
54
|
+
ai_review/libs/http/client.py,sha256=JONzbhJWJKFz8Jy6p9pzq2hAMKlyJ2_WkBksuAlqW7k,453
|
|
55
|
+
ai_review/libs/http/handlers.py,sha256=k1VvCIFjLzfH3qQ--aj4CZVgbU0oj78sYStMBrxo_Ek,1040
|
|
56
|
+
ai_review/libs/http/event_hooks/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
57
|
+
ai_review/libs/http/event_hooks/base.py,sha256=cnSOOButTJYKeyb_OnGms1vXRfwfExP81L3ZfYWLufk,279
|
|
58
|
+
ai_review/libs/http/event_hooks/logger.py,sha256=CcGk4dmxrOTwsM-QgTHQiJdI8cgLAG-Ay56iygOUCKU,546
|
|
59
|
+
ai_review/libs/http/transports/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
60
|
+
ai_review/libs/http/transports/retry.py,sha256=WfY36SEMokjP0-uGv_OKlsaAVpMgePc1aYw3Eq4evTE,1145
|
|
61
|
+
ai_review/prompts/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
62
|
+
ai_review/prompts/default_context.md,sha256=W8LvCMQxaX09NhPokwuxYLlA1jPCYor80GgZO8nhKbc,633
|
|
63
|
+
ai_review/prompts/default_inline.md,sha256=UlxozaY5NtdZvA_d3qtAwIQSLP3C5JJh-mJtxGp_u0Q,257
|
|
64
|
+
ai_review/prompts/default_summary.md,sha256=jfO7hd-aHUbYvWFJwosbPwEYINRaM_W30pqOT_YNOco,182
|
|
65
|
+
ai_review/prompts/default_system_context.md,sha256=HLTCkiZBuW-LsT5VqIs56mhKg48R1Xu67FbptliOTpQ,1002
|
|
66
|
+
ai_review/prompts/default_system_inline.md,sha256=l8Hf82Jo7urELpKiPhDusdU9ag5eCWKn55_62Y0fmSY,826
|
|
67
|
+
ai_review/prompts/default_system_summary.md,sha256=unEJ09G925TKqvjkTFKgl3g2AXT9GICe8kxTO50QhRg,224
|
|
68
|
+
ai_review/resources/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
69
|
+
ai_review/resources/pricing.yaml,sha256=jZHCGF78GTlZsXC_IGZT8JutKqpUyKikYXwtxIFEAaE,746
|
|
70
|
+
ai_review/services/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
71
|
+
ai_review/services/artifacts/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
72
|
+
ai_review/services/artifacts/schema.py,sha256=AD3cqw_NfPhcourFX-bayjbwNAaVyhq4T_p59lPEhMg,262
|
|
73
|
+
ai_review/services/artifacts/service.py,sha256=8RiQOJiJuZo_HSNpGv0jyMs9kgqjHX-9INax3aISGqU,1691
|
|
74
|
+
ai_review/services/artifacts/tools.py,sha256=_ZVNwyhZDiGlPAtIgLzb7TF1zBGJy8Hq32H3xoGvOkQ,223
|
|
75
|
+
ai_review/services/cost/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
76
|
+
ai_review/services/cost/schema.py,sha256=K3uCIMMxGL8AaIPh4a-d0mT5uIJuk3f805DkP8o8DtY,1323
|
|
77
|
+
ai_review/services/cost/service.py,sha256=rK-jw0lDszv_O13CRZAGK7R-fB-Y7xakX8aVb86zcEk,2103
|
|
78
|
+
ai_review/services/diff/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
79
|
+
ai_review/services/diff/renderers.py,sha256=L9SEnkrYjt0kfoKl8qBH1dUDUrnA32CzCx0YI9IPvco,5611
|
|
80
|
+
ai_review/services/diff/schema.py,sha256=17GAQY1-ySwREJ1-NKNKgBcstMJ5Hb42FcFG2p7i6Rs,94
|
|
81
|
+
ai_review/services/diff/service.py,sha256=FDuMw_y2QVQcfSbkVv3H2uGf1sIMeQ0_KHYCPhCU24g,3498
|
|
82
|
+
ai_review/services/diff/tools.py,sha256=YHmH6Ult_rucCd563UhG0geMzqrPhqKFZKyug79xNuA,1963
|
|
83
|
+
ai_review/services/git/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
84
|
+
ai_review/services/git/service.py,sha256=_RMwgcllDoSLUzl84JML38fWkr7swnkUr6MJ46hSkWw,1282
|
|
85
|
+
ai_review/services/git/types.py,sha256=QTOCTmR-Rt3sUjzZQHu2PGo_6un5gvNupifAa84wON4,413
|
|
86
|
+
ai_review/services/llm/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
87
|
+
ai_review/services/llm/factory.py,sha256=QZn4jCOFAJX3pQb254e76mkKw156zA9KByTrKeMv41g,721
|
|
88
|
+
ai_review/services/llm/types.py,sha256=zMcMFQ7F9Zcgc9JqwdHCdlTpGOA0HuWyGgoySsUh4_o,345
|
|
89
|
+
ai_review/services/llm/claude/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
90
|
+
ai_review/services/llm/claude/client.py,sha256=w6CvfDYEAKyi_r88M-z_jCvMIJF3SjhQjV1EHMvNh24,1066
|
|
91
|
+
ai_review/services/llm/gemini/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
92
|
+
ai_review/services/llm/gemini/client.py,sha256=7FAOlTi8rV6b8g8aWcg-0LIP77AtbAoPtPWiGs0kQN0,1266
|
|
93
|
+
ai_review/services/llm/openai/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
94
|
+
ai_review/services/llm/openai/client.py,sha256=WhMXNfH_G1NTlFkdRK5sgYvrCIE5ZQNfPhdYx49IXFk,1143
|
|
95
|
+
ai_review/services/prompt/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
96
|
+
ai_review/services/prompt/adapter.py,sha256=xsJwBMmmuD0VIBbA7NCQuE6Zz6WyBoVJE3FuYMLHCxA,1005
|
|
97
|
+
ai_review/services/prompt/schema.py,sha256=yQnovyydmMcb4TnEnLRhxuvccoa1mWo6PCbHeVDUD1g,2485
|
|
98
|
+
ai_review/services/prompt/service.py,sha256=AQG0YnlfXYtuADaZDhWD8NkPHx_zH4TCTOFPzMvZaSs,2078
|
|
99
|
+
ai_review/services/review/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
100
|
+
ai_review/services/review/service.py,sha256=8YhRFqhZAk2pAnkDaytKSCENlOeOti1brAJq3R9tVMY,8394
|
|
101
|
+
ai_review/services/review/inline/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
102
|
+
ai_review/services/review/inline/schema.py,sha256=ry8sJdTgusQvFW51neRiapzgzVGwswwJzdYhaV3hbT0,1545
|
|
103
|
+
ai_review/services/review/inline/service.py,sha256=2joeGCoPLacQAsmEtEKzmqPTQNYFYW8Dq3Cyfn3HZ_I,1408
|
|
104
|
+
ai_review/services/review/policy/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
105
|
+
ai_review/services/review/policy/service.py,sha256=yGDePLxAEF3N1Pkh47jGVd-4dGEESyxDXIXxV7KQfuY,2027
|
|
106
|
+
ai_review/services/review/summary/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
107
|
+
ai_review/services/review/summary/schema.py,sha256=GipVNWrEKtgZPkytNSrXwzvX9Zq8Pv2wxjXhfJq4D3g,364
|
|
108
|
+
ai_review/services/review/summary/service.py,sha256=GB7-l4UyjZfUe6yP_8Q-SD1_uDKHM0W-CZJVMiEL8S0,449
|
|
109
|
+
ai_review/services/vcs/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
110
|
+
ai_review/services/vcs/factory.py,sha256=_xp8l1Pn2_yXi5xX1v13SROT3rRbVzFHXP1eTZxVcxI,451
|
|
111
|
+
ai_review/services/vcs/types.py,sha256=o3CJ8bZJ8unB9AKSpS66NwPVkFkweV4R02nCYsNqCko,1270
|
|
112
|
+
ai_review/services/vcs/gitlab/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
113
|
+
ai_review/services/vcs/gitlab/client.py,sha256=-ZZFFlB7vv2DgEYAU016FP4CcYO8hp5LY1E2xokuCmU,6140
|
|
114
|
+
ai_review/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
115
|
+
ai_review/tests/fixtures/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
116
|
+
ai_review/tests/fixtures/git.py,sha256=CwMYAQNVEeHp8OCnFWh2fBKkBkyorWJtN2eDFqpYRbQ,1038
|
|
117
|
+
ai_review/tests/suites/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
118
|
+
ai_review/tests/suites/clients/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
119
|
+
ai_review/tests/suites/clients/claude/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
120
|
+
ai_review/tests/suites/clients/claude/test_client.py,sha256=X5X04veyKCnS9z3t13tTmw_GfBIM7grpFHxS0vctODA,1088
|
|
121
|
+
ai_review/tests/suites/clients/claude/test_schema.py,sha256=MUZXvEROgLNpUVHfCsH5D3ruJPQwTx0OgeT3_BRVjgI,1671
|
|
122
|
+
ai_review/tests/suites/clients/gemini/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
123
|
+
ai_review/tests/suites/clients/gemini/test_client.py,sha256=6hxpK7r7iZVbOzAffRNDJnA63-3Zxvqw5ynANPhBhBg,1066
|
|
124
|
+
ai_review/tests/suites/clients/gemini/test_schema.py,sha256=88dU28m7sEWvGx6tqYl7if7weWYuVc8erlkFkKKI3bk,3109
|
|
125
|
+
ai_review/tests/suites/clients/openai/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
126
|
+
ai_review/tests/suites/clients/openai/test_client.py,sha256=Ox5ifP1C_gSeDRacBa9DnXhe__Z8-WcbzR2JH_V3xKo,1050
|
|
127
|
+
ai_review/tests/suites/clients/openai/test_schema.py,sha256=x1tamS4GC9pOTpjieKDbK2D73CVV4BkATppytwMevLo,1599
|
|
128
|
+
ai_review/tests/suites/libs/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
129
|
+
ai_review/tests/suites/libs/diff/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
130
|
+
ai_review/tests/suites/libs/diff/test_models.py,sha256=RBFQ97LWhU8TlupxXkJ97ryAvJrSuOHLtT9biUBUMXg,3321
|
|
131
|
+
ai_review/tests/suites/libs/diff/test_parser.py,sha256=rvWEVGIdaLBlDAnSevjRY7I1Zikj12d5GOgMk9QyHQQ,3013
|
|
132
|
+
ai_review/tests/suites/libs/diff/test_tools.py,sha256=XkHJZ-b5veFz5oLKO09P7npaLN8lOzCnGR7e83Zv_mg,1953
|
|
133
|
+
ai_review/tests/suites/services/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
134
|
+
ai_review/tests/suites/services/diff/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
135
|
+
ai_review/tests/suites/services/diff/test_renderers.py,sha256=XFXaOTGAdPOJRb8w-1BOX-eci1C49mKvH4vckybrJSg,5641
|
|
136
|
+
ai_review/tests/suites/services/diff/test_service.py,sha256=iFkGX9Vj2X44JU3eFsoHsg9o9353eKX-QCv_J9KxfzU,3162
|
|
137
|
+
ai_review/tests/suites/services/diff/test_tools.py,sha256=HBQ3eCn-kLeb_k5iTgyr09x0VwLYSegSbxm0Qk9ZrCc,3543
|
|
138
|
+
ai_review/tests/suites/services/prompt/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
139
|
+
ai_review/tests/suites/services/prompt/test_schema.py,sha256=tsilyAV7Fwzr2BULKkgt6ZAKTG0fLujvFnCztv9KjIk,1338
|
|
140
|
+
ai_review/tests/suites/services/prompt/test_service.py,sha256=XY7FsAhHUjr56AKVMDgCC7OpXOhj2UirB9pARmLjUuc,5236
|
|
141
|
+
ai_review/tests/suites/services/review/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
142
|
+
ai_review/tests/suites/services/review/inline/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
143
|
+
ai_review/tests/suites/services/review/inline/test_schema.py,sha256=tIz-1UA_GgwcdsyUqgrodiiVVmd_jhoOVmtEwzRVWiY,2474
|
|
144
|
+
ai_review/tests/suites/services/review/inline/test_service.py,sha256=5YP5xoijfn39jdAlmL5fEWBNjD4XhsgKnCPBUZDMZfw,1729
|
|
145
|
+
ai_review/tests/suites/services/review/policy/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
146
|
+
ai_review/tests/suites/services/review/policy/test_service.py,sha256=kRWT550OjWYQ7ZfsihBRc-tx-NMkhlynEsqur55RK0M,3687
|
|
147
|
+
ai_review/tests/suites/services/review/summary/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
148
|
+
ai_review/tests/suites/services/review/summary/test_schema.py,sha256=xSoydvABZldHaVDa0OBFvYrj8wMuZqUDN3MO-XdvxOI,819
|
|
149
|
+
ai_review/tests/suites/services/review/summary/test_service.py,sha256=8UMvi_NL9frm280vD6Q1NCDrdI7K8YbXzoViIus-I2g,541
|
|
150
|
+
xai_review-0.3.0.dist-info/METADATA,sha256=EpPnDWijU6-sGsRVqSMh3VhO0cj_aNDK6shCUsdNCk8,243
|
|
151
|
+
xai_review-0.3.0.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
|
|
152
|
+
xai_review-0.3.0.dist-info/entry_points.txt,sha256=JyC5URanMi5io5P_PXQf7H_I1OGIpk5cZQhaPQ0g4Zs,53
|
|
153
|
+
xai_review-0.3.0.dist-info/top_level.txt,sha256=sTsZbfzLoqvRZKdKa-BcxWvjlHdrpbeJ6DrGY0EuR0E,10
|
|
154
|
+
xai_review-0.3.0.dist-info/RECORD,,
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
ai_review
|