xai-review 0.25.0__py3-none-any.whl → 0.27.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/clients/bitbucket/__init__.py +0 -0
- ai_review/clients/bitbucket/client.py +31 -0
- ai_review/clients/bitbucket/pr/__init__.py +0 -0
- ai_review/clients/bitbucket/pr/client.py +141 -0
- ai_review/clients/bitbucket/pr/schema/__init__.py +0 -0
- ai_review/clients/bitbucket/pr/schema/comments.py +49 -0
- ai_review/clients/bitbucket/pr/schema/files.py +30 -0
- ai_review/clients/bitbucket/pr/schema/pull_request.py +38 -0
- ai_review/clients/bitbucket/pr/types.py +44 -0
- ai_review/clients/bitbucket/tools.py +6 -0
- ai_review/clients/github/pr/client.py +66 -12
- ai_review/clients/github/pr/schema/comments.py +2 -1
- ai_review/clients/github/pr/schema/files.py +2 -1
- ai_review/clients/github/pr/schema/reviews.py +2 -1
- ai_review/clients/github/tools.py +6 -0
- ai_review/clients/gitlab/mr/client.py +35 -6
- ai_review/clients/gitlab/mr/schema/discussions.py +2 -1
- ai_review/clients/gitlab/mr/schema/notes.py +2 -1
- ai_review/clients/gitlab/tools.py +5 -0
- ai_review/libs/config/vcs/base.py +13 -1
- ai_review/libs/config/vcs/bitbucket.py +13 -0
- ai_review/libs/config/vcs/pagination.py +6 -0
- ai_review/libs/constants/vcs_provider.py +1 -0
- ai_review/libs/http/paginate.py +43 -0
- ai_review/services/vcs/bitbucket/__init__.py +0 -0
- ai_review/services/vcs/bitbucket/client.py +185 -0
- ai_review/services/vcs/factory.py +3 -0
- ai_review/tests/fixtures/clients/bitbucket.py +204 -0
- ai_review/tests/suites/clients/bitbucket/__init__.py +0 -0
- ai_review/tests/suites/clients/bitbucket/test_client.py +14 -0
- ai_review/tests/suites/clients/bitbucket/test_tools.py +31 -0
- ai_review/tests/suites/clients/github/test_tools.py +31 -0
- ai_review/tests/suites/clients/gitlab/test_tools.py +26 -0
- ai_review/tests/suites/libs/http/__init__.py +0 -0
- ai_review/tests/suites/libs/http/test_paginate.py +95 -0
- ai_review/tests/suites/services/vcs/bitbucket/__init__.py +0 -0
- ai_review/tests/suites/services/vcs/bitbucket/test_service.py +117 -0
- ai_review/tests/suites/services/vcs/test_factory.py +8 -1
- {xai_review-0.25.0.dist-info → xai_review-0.27.0.dist-info}/METADATA +4 -4
- {xai_review-0.25.0.dist-info → xai_review-0.27.0.dist-info}/RECORD +44 -17
- {xai_review-0.25.0.dist-info → xai_review-0.27.0.dist-info}/WHEEL +0 -0
- {xai_review-0.25.0.dist-info → xai_review-0.27.0.dist-info}/entry_points.txt +0 -0
- {xai_review-0.25.0.dist-info → xai_review-0.27.0.dist-info}/licenses/LICENSE +0 -0
- {xai_review-0.25.0.dist-info → xai_review-0.27.0.dist-info}/top_level.txt +0 -0
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
import pytest
|
|
2
|
+
|
|
3
|
+
from ai_review.services.vcs.bitbucket.client import BitbucketVCSClient
|
|
4
|
+
from ai_review.services.vcs.types import ReviewInfoSchema, ReviewCommentSchema
|
|
5
|
+
from ai_review.tests.fixtures.clients.bitbucket import FakeBitbucketPullRequestsHTTPClient
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
@pytest.mark.asyncio
|
|
9
|
+
@pytest.mark.usefixtures("bitbucket_http_client_config")
|
|
10
|
+
async def test_get_review_info_returns_valid_schema(
|
|
11
|
+
bitbucket_vcs_client: BitbucketVCSClient,
|
|
12
|
+
fake_bitbucket_pull_requests_http_client: FakeBitbucketPullRequestsHTTPClient,
|
|
13
|
+
):
|
|
14
|
+
"""Should return detailed PR info with branches, author, reviewers, and files."""
|
|
15
|
+
info = await bitbucket_vcs_client.get_review_info()
|
|
16
|
+
|
|
17
|
+
assert isinstance(info, ReviewInfoSchema)
|
|
18
|
+
assert info.id == 1
|
|
19
|
+
assert info.title == "Fake Bitbucket PR"
|
|
20
|
+
assert info.description == "This is a fake PR for testing"
|
|
21
|
+
|
|
22
|
+
assert info.author.username == "tester"
|
|
23
|
+
assert {r.username for r in info.reviewers} == {"reviewer"}
|
|
24
|
+
|
|
25
|
+
assert info.source_branch.ref == "feature/test"
|
|
26
|
+
assert info.target_branch.ref == "main"
|
|
27
|
+
assert info.base_sha == "abc123"
|
|
28
|
+
assert info.head_sha == "def456"
|
|
29
|
+
|
|
30
|
+
assert "app/main.py" in info.changed_files
|
|
31
|
+
assert len(info.changed_files) == 2
|
|
32
|
+
|
|
33
|
+
called_methods = [name for name, _ in fake_bitbucket_pull_requests_http_client.calls]
|
|
34
|
+
assert called_methods == ["get_pull_request", "get_files"]
|
|
35
|
+
|
|
36
|
+
|
|
37
|
+
@pytest.mark.asyncio
|
|
38
|
+
@pytest.mark.usefixtures("bitbucket_http_client_config")
|
|
39
|
+
async def test_get_general_comments_filters_inline(
|
|
40
|
+
bitbucket_vcs_client: BitbucketVCSClient,
|
|
41
|
+
fake_bitbucket_pull_requests_http_client: FakeBitbucketPullRequestsHTTPClient,
|
|
42
|
+
):
|
|
43
|
+
"""Should return only general comments (without inline info)."""
|
|
44
|
+
comments = await bitbucket_vcs_client.get_general_comments()
|
|
45
|
+
|
|
46
|
+
assert all(isinstance(c, ReviewCommentSchema) for c in comments)
|
|
47
|
+
assert len(comments) == 1
|
|
48
|
+
|
|
49
|
+
first = comments[0]
|
|
50
|
+
assert first.body == "General comment"
|
|
51
|
+
assert first.file is None
|
|
52
|
+
assert first.line is None
|
|
53
|
+
|
|
54
|
+
called_methods = [name for name, _ in fake_bitbucket_pull_requests_http_client.calls]
|
|
55
|
+
assert called_methods == ["get_comments"]
|
|
56
|
+
|
|
57
|
+
|
|
58
|
+
@pytest.mark.asyncio
|
|
59
|
+
@pytest.mark.usefixtures("bitbucket_http_client_config")
|
|
60
|
+
async def test_get_inline_comments_filters_general(
|
|
61
|
+
bitbucket_vcs_client: BitbucketVCSClient,
|
|
62
|
+
fake_bitbucket_pull_requests_http_client: FakeBitbucketPullRequestsHTTPClient,
|
|
63
|
+
):
|
|
64
|
+
"""Should return only inline comments with file and line references."""
|
|
65
|
+
comments = await bitbucket_vcs_client.get_inline_comments()
|
|
66
|
+
|
|
67
|
+
assert all(isinstance(c, ReviewCommentSchema) for c in comments)
|
|
68
|
+
assert len(comments) == 1
|
|
69
|
+
|
|
70
|
+
first = comments[0]
|
|
71
|
+
assert first.body == "Inline comment"
|
|
72
|
+
assert first.file == "file.py"
|
|
73
|
+
assert first.line == 5
|
|
74
|
+
|
|
75
|
+
called_methods = [name for name, _ in fake_bitbucket_pull_requests_http_client.calls]
|
|
76
|
+
assert called_methods == ["get_comments"]
|
|
77
|
+
|
|
78
|
+
|
|
79
|
+
@pytest.mark.asyncio
|
|
80
|
+
@pytest.mark.usefixtures("bitbucket_http_client_config")
|
|
81
|
+
async def test_create_general_comment_posts_comment(
|
|
82
|
+
bitbucket_vcs_client: BitbucketVCSClient,
|
|
83
|
+
fake_bitbucket_pull_requests_http_client: FakeBitbucketPullRequestsHTTPClient,
|
|
84
|
+
):
|
|
85
|
+
"""Should post a general (non-inline) comment."""
|
|
86
|
+
message = "Hello from Bitbucket test!"
|
|
87
|
+
|
|
88
|
+
await bitbucket_vcs_client.create_general_comment(message)
|
|
89
|
+
|
|
90
|
+
calls = [args for name, args in fake_bitbucket_pull_requests_http_client.calls if name == "create_comment"]
|
|
91
|
+
assert len(calls) == 1
|
|
92
|
+
call_args = calls[0]
|
|
93
|
+
assert call_args["content"]["raw"] == message
|
|
94
|
+
assert call_args["workspace"] == "workspace"
|
|
95
|
+
assert call_args["repo_slug"] == "repo"
|
|
96
|
+
|
|
97
|
+
|
|
98
|
+
@pytest.mark.asyncio
|
|
99
|
+
@pytest.mark.usefixtures("bitbucket_http_client_config")
|
|
100
|
+
async def test_create_inline_comment_posts_comment(
|
|
101
|
+
bitbucket_vcs_client: BitbucketVCSClient,
|
|
102
|
+
fake_bitbucket_pull_requests_http_client: FakeBitbucketPullRequestsHTTPClient,
|
|
103
|
+
):
|
|
104
|
+
"""Should post an inline comment with correct file and line."""
|
|
105
|
+
file = "file.py"
|
|
106
|
+
line = 10
|
|
107
|
+
message = "Looks good"
|
|
108
|
+
|
|
109
|
+
await bitbucket_vcs_client.create_inline_comment(file, line, message)
|
|
110
|
+
|
|
111
|
+
calls = [args for name, args in fake_bitbucket_pull_requests_http_client.calls if name == "create_comment"]
|
|
112
|
+
assert len(calls) == 1
|
|
113
|
+
|
|
114
|
+
call_args = calls[0]
|
|
115
|
+
assert call_args["content"]["raw"] == message
|
|
116
|
+
assert call_args["inline"]["path"] == file
|
|
117
|
+
assert call_args["inline"]["to"] == line
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import pytest
|
|
2
2
|
|
|
3
|
+
from ai_review.services.vcs.bitbucket.client import BitbucketVCSClient
|
|
3
4
|
from ai_review.services.vcs.factory import get_vcs_client
|
|
4
5
|
from ai_review.services.vcs.github.client import GitHubVCSClient
|
|
5
6
|
from ai_review.services.vcs.gitlab.client import GitLabVCSClient
|
|
@@ -17,7 +18,13 @@ def test_get_vcs_client_returns_gitlab(monkeypatch: pytest.MonkeyPatch):
|
|
|
17
18
|
assert isinstance(client, GitLabVCSClient)
|
|
18
19
|
|
|
19
20
|
|
|
21
|
+
@pytest.mark.usefixtures("bitbucket_http_client_config")
|
|
22
|
+
def test_get_vcs_client_returns_bitbucket(monkeypatch: pytest.MonkeyPatch):
|
|
23
|
+
client = get_vcs_client()
|
|
24
|
+
assert isinstance(client, BitbucketVCSClient)
|
|
25
|
+
|
|
26
|
+
|
|
20
27
|
def test_get_vcs_client_unsupported_provider(monkeypatch: pytest.MonkeyPatch):
|
|
21
|
-
monkeypatch.setattr("ai_review.services.vcs.factory.settings.vcs.provider", "
|
|
28
|
+
monkeypatch.setattr("ai_review.services.vcs.factory.settings.vcs.provider", "UNSUPPORTED")
|
|
22
29
|
with pytest.raises(ValueError):
|
|
23
30
|
get_vcs_client()
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: xai-review
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.27.0
|
|
4
4
|
Summary: AI-powered code review tool
|
|
5
5
|
Author-email: Nikita Filonov <nikita.filonov@example.com>
|
|
6
6
|
Maintainer-email: Nikita Filonov <nikita.filonov@example.com>
|
|
@@ -67,7 +67,7 @@ improve code quality, enforce consistency, and speed up the review process.
|
|
|
67
67
|
✨ Key features:
|
|
68
68
|
|
|
69
69
|
- **Multiple LLM providers** — choose between **OpenAI**, **Claude**, **Gemini**, or **Ollama**, and switch anytime.
|
|
70
|
-
- **VCS integration** — works out of the box with GitLab
|
|
70
|
+
- **VCS integration** — works out of the box with **GitLab**, **GitHub**, and **Bitbucket**.
|
|
71
71
|
- **Customizable prompts** — adapt inline, context, and summary reviews to match your team’s coding guidelines.
|
|
72
72
|
- **Flexible configuration** — supports `YAML`, `JSON`, and `ENV`, with seamless overrides in CI/CD pipelines.
|
|
73
73
|
- **AI Review runs fully client-side** — it never proxies or inspects your requests.
|
|
@@ -170,7 +170,7 @@ Key things you can customize:
|
|
|
170
170
|
|
|
171
171
|
- **LLM provider** — OpenAI, Gemini, Claude, or Ollama
|
|
172
172
|
- **Model settings** — model name, temperature, max tokens
|
|
173
|
-
- **VCS integration** — works out of the box with **GitLab** and **
|
|
173
|
+
- **VCS integration** — works out of the box with **GitLab**, **GitHub**, and **Bitbucket**
|
|
174
174
|
- **Review policy** — which files to include/exclude, review modes
|
|
175
175
|
- **Prompts** — inline/context/summary prompt templates
|
|
176
176
|
|
|
@@ -209,7 +209,7 @@ jobs:
|
|
|
209
209
|
runs-on: ubuntu-latest
|
|
210
210
|
steps:
|
|
211
211
|
- uses: actions/checkout@v4
|
|
212
|
-
- uses: Nikita-Filonov/ai-review@v0.
|
|
212
|
+
- uses: Nikita-Filonov/ai-review@v0.27.0
|
|
213
213
|
with:
|
|
214
214
|
review-command: ${{ inputs.review-command }}
|
|
215
215
|
env:
|
|
@@ -8,6 +8,16 @@ ai_review/cli/commands/run_inline_review.py,sha256=u55K-Su0PR2-NcK7XI2rTCIi7HTEi
|
|
|
8
8
|
ai_review/cli/commands/run_review.py,sha256=i39IYNDE_lAiQQnKLmxG71Ao8WAIOSn82L9EpdbPcsI,261
|
|
9
9
|
ai_review/cli/commands/run_summary_review.py,sha256=NqjepGH5cbqczPzcuMEAxO4dI58FEUZl0b6uRVQ9SiA,224
|
|
10
10
|
ai_review/clients/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
11
|
+
ai_review/clients/bitbucket/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
12
|
+
ai_review/clients/bitbucket/client.py,sha256=VaqaQ5USMPTOEeS5XPdr-RkMKsxUpJ2SBE6lcemkz-g,1174
|
|
13
|
+
ai_review/clients/bitbucket/tools.py,sha256=UGBCurb8MQECivWDJDNXr7ej7rwA5-_kXTT4zF8RXIQ,147
|
|
14
|
+
ai_review/clients/bitbucket/pr/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
15
|
+
ai_review/clients/bitbucket/pr/client.py,sha256=YnA5GCw_qqrjraNH_LjtE7t7cCmrMTY9IrcxDT2uyZ0,5836
|
|
16
|
+
ai_review/clients/bitbucket/pr/types.py,sha256=ZICV4ghYChj1Jl9Nlwyw1_kwmGybX51GhGdGzkRaLCk,1296
|
|
17
|
+
ai_review/clients/bitbucket/pr/schema/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
18
|
+
ai_review/clients/bitbucket/pr/schema/comments.py,sha256=p3HQyi-M7DLXcD0RErVlqsnKhmo2JVqdA8ejVYF_Kzg,1337
|
|
19
|
+
ai_review/clients/bitbucket/pr/schema/files.py,sha256=qBDfIv370TDMKM8yoLlm1c-BTHNvEZRuhnBo18nkx9g,750
|
|
20
|
+
ai_review/clients/bitbucket/pr/schema/pull_request.py,sha256=buGULgaCkxCUFSdiw0XTwaSIYP_p1rAEuKXUyJ_Mzi8,863
|
|
11
21
|
ai_review/clients/claude/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
12
22
|
ai_review/clients/claude/client.py,sha256=uEadbBNBJnzjHDczbxXiiw1V1H1PdUWKu-Gn-eIDEmw,1890
|
|
13
23
|
ai_review/clients/claude/schema.py,sha256=LE6KCjJKDXqBGU2Cno5XL5R8vUfScgskE9MqvE0Pt2A,887
|
|
@@ -18,23 +28,25 @@ ai_review/clients/gemini/schema.py,sha256=5oVvbI-h_sw8bFreS4JUmMj-aXa_frvxK3H8sg
|
|
|
18
28
|
ai_review/clients/gemini/types.py,sha256=D-P0THorrQ8yq5P-NKAC65zzhEYRa9HkiXTORG9QoIk,267
|
|
19
29
|
ai_review/clients/github/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
20
30
|
ai_review/clients/github/client.py,sha256=pprQcCYdrhRYtuqRsTFiCbj54Qb1Ll6_jmlm7AJg8pk,1149
|
|
31
|
+
ai_review/clients/github/tools.py,sha256=sD2eS_iNhzT4ZLgTRmO2uBLuId-fa2aSvbu6VFeKSlc,201
|
|
21
32
|
ai_review/clients/github/pr/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
22
|
-
ai_review/clients/github/pr/client.py,sha256=
|
|
33
|
+
ai_review/clients/github/pr/client.py,sha256=HysL1u-WxLdhGKi-6HAx6fN-50XSk3yK55gZ9Nii72U,8851
|
|
23
34
|
ai_review/clients/github/pr/types.py,sha256=mI5Vtlxc25iymOTPkNl55IQygXd4ti3B1Ydpx3q1fps,1726
|
|
24
35
|
ai_review/clients/github/pr/schema/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
25
|
-
ai_review/clients/github/pr/schema/comments.py,sha256=
|
|
26
|
-
ai_review/clients/github/pr/schema/files.py,sha256=
|
|
36
|
+
ai_review/clients/github/pr/schema/comments.py,sha256=dIlX6tYPseAtLquk-UIie7jxBxrCbmPbDyB8bC9OFPo,743
|
|
37
|
+
ai_review/clients/github/pr/schema/files.py,sha256=ARirokToZ1zqMWh2jpDtVIs4qw5rlL7xfoRDJBJF71o,359
|
|
27
38
|
ai_review/clients/github/pr/schema/pull_request.py,sha256=EwOworYQY4kCmL6QFKEXK7r2fpINK8o-4-FEy9-nTpg,688
|
|
28
|
-
ai_review/clients/github/pr/schema/reviews.py,sha256=
|
|
39
|
+
ai_review/clients/github/pr/schema/reviews.py,sha256=qRJpBu03CBwC_tPng9q9tkqT_u2WcdDELblAi-OzxWI,380
|
|
29
40
|
ai_review/clients/gitlab/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
30
41
|
ai_review/clients/gitlab/client.py,sha256=MIZed-V4JUzntkU9vJq7Fkp5VAjnzjvep_5QM5ni_Co,1151
|
|
42
|
+
ai_review/clients/gitlab/tools.py,sha256=ed8t2-dy2XtSRpYWhLxUobYvbBX_1zMZTPuzjbgPzTg,136
|
|
31
43
|
ai_review/clients/gitlab/mr/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
32
|
-
ai_review/clients/gitlab/mr/client.py,sha256=
|
|
44
|
+
ai_review/clients/gitlab/mr/client.py,sha256=39EjS0bvvi8-kiBOkBa7N1q0wHb0qTgo_KvQise61js,6350
|
|
33
45
|
ai_review/clients/gitlab/mr/types.py,sha256=tZ3rDDkzJM8v4zPt4gTyKCL30htiPQE9F_kVR6K5JHA,1280
|
|
34
46
|
ai_review/clients/gitlab/mr/schema/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
35
47
|
ai_review/clients/gitlab/mr/schema/changes.py,sha256=ZqSPb8zO0z_V8cEjxoTqnwbjRLxo6OTV4LeQEAg91cU,835
|
|
36
|
-
ai_review/clients/gitlab/mr/schema/discussions.py,sha256=
|
|
37
|
-
ai_review/clients/gitlab/mr/schema/notes.py,sha256=
|
|
48
|
+
ai_review/clients/gitlab/mr/schema/discussions.py,sha256=owaWWD5lMG9GXkT8kgHiU_-khYTWGHanbWgSKDiJknA,814
|
|
49
|
+
ai_review/clients/gitlab/mr/schema/notes.py,sha256=DX9juurMYKcaYobh4n4M49dvHtUiLw5IzZKsGdBMxZg,448
|
|
38
50
|
ai_review/clients/ollama/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
39
51
|
ai_review/clients/ollama/client.py,sha256=KoJ9J5_Vfpv5XNJREshE_gA46uo9J0Z3qVC7wJPEcX8,1720
|
|
40
52
|
ai_review/clients/ollama/schema.py,sha256=A6oKwkkEVrduyzMR_lhLnaLyvKXqlfsXjkMIF2eXaYw,1310
|
|
@@ -65,12 +77,14 @@ ai_review/libs/config/llm/meta.py,sha256=cEcAHOwy-mQBKo9_KJrQe0I7qppq6h99lSmoWX4
|
|
|
65
77
|
ai_review/libs/config/llm/ollama.py,sha256=M6aiPb5GvYvkiGcgHTsh9bOw5JsBLqmfSKoIbHCejrU,372
|
|
66
78
|
ai_review/libs/config/llm/openai.py,sha256=jGVL4gJ2wIacoKeK9Zc9LCgY95TxdeYOThdglVPErFU,262
|
|
67
79
|
ai_review/libs/config/vcs/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
68
|
-
ai_review/libs/config/vcs/base.py,sha256=
|
|
80
|
+
ai_review/libs/config/vcs/base.py,sha256=B0kKc6-A3mmV7dvHpo47u-1yTvdUCvLj_g4oCBo_NyY,1214
|
|
81
|
+
ai_review/libs/config/vcs/bitbucket.py,sha256=on5sQaE57kM_zSmqdDUNrttVtTPGOzqLHM5s7eFN7DA,275
|
|
69
82
|
ai_review/libs/config/vcs/github.py,sha256=hk-kuDLd8wecqtEb8PSqF7Yy_pkihplJhi6nB6FZID4,256
|
|
70
83
|
ai_review/libs/config/vcs/gitlab.py,sha256=ecYfU158VgVlM6P5mgZn8FOqk3Xt60xx7gUqT5e22a4,252
|
|
84
|
+
ai_review/libs/config/vcs/pagination.py,sha256=S-XxWQYkIjhu3ffpHQ44d7UtRHH81fh9GaJ-xQXUUy4,175
|
|
71
85
|
ai_review/libs/constants/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
72
86
|
ai_review/libs/constants/llm_provider.py,sha256=k7GzctIZ-TDsRlhTPbpGYgym_CO2YKVFp_oXG9dTBW0,143
|
|
73
|
-
ai_review/libs/constants/vcs_provider.py,sha256=
|
|
87
|
+
ai_review/libs/constants/vcs_provider.py,sha256=xJpRdJIdAf05iH2x2f362d1MuviOlPVP7In-JvDVotE,127
|
|
74
88
|
ai_review/libs/diff/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
75
89
|
ai_review/libs/diff/models.py,sha256=RT4YJboOPA-AjNJGRj_HIZaJLEmROOhOgMh1wIGpIwY,2344
|
|
76
90
|
ai_review/libs/diff/parser.py,sha256=2BGxZnRN3SRjNnZK4qIOW28aM93Ij__1SltwclJrlno,3817
|
|
@@ -78,6 +92,7 @@ ai_review/libs/diff/tools.py,sha256=CZWRDlOW2YS-b8h9gv_uP1MG194_FLkKzcKTwwZHocI,
|
|
|
78
92
|
ai_review/libs/http/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
79
93
|
ai_review/libs/http/client.py,sha256=JONzbhJWJKFz8Jy6p9pzq2hAMKlyJ2_WkBksuAlqW7k,453
|
|
80
94
|
ai_review/libs/http/handlers.py,sha256=k1VvCIFjLzfH3qQ--aj4CZVgbU0oj78sYStMBrxo_Ek,1040
|
|
95
|
+
ai_review/libs/http/paginate.py,sha256=yAryDaUkQd-wojXOaak9HyicT-QZwx3L49AJlUEins4,1305
|
|
81
96
|
ai_review/libs/http/event_hooks/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
82
97
|
ai_review/libs/http/event_hooks/base.py,sha256=cnSOOButTJYKeyb_OnGms1vXRfwfExP81L3ZfYWLufk,279
|
|
83
98
|
ai_review/libs/http/event_hooks/logger.py,sha256=8_omfl6q3JijaBBIgzvzb4SayjNEDW-oxyck_Ky8wnI,603
|
|
@@ -150,8 +165,10 @@ ai_review/services/review/summary/schema.py,sha256=GipVNWrEKtgZPkytNSrXwzvX9Zq8P
|
|
|
150
165
|
ai_review/services/review/summary/service.py,sha256=F4diIESc0y7YSiUKbInHWiSOW5tW_eQ0rpf78wKxLAo,562
|
|
151
166
|
ai_review/services/review/summary/types.py,sha256=iDsucvx9xJZ5Xb5FN70da3bub3YDtt4vpQeVEK532E8,235
|
|
152
167
|
ai_review/services/vcs/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
153
|
-
ai_review/services/vcs/factory.py,sha256=
|
|
168
|
+
ai_review/services/vcs/factory.py,sha256=AfhpZjQ257BkLjb_7zUyw_EUnfEiCUHgTph7GGm-MY4,753
|
|
154
169
|
ai_review/services/vcs/types.py,sha256=S49LhAGHVAd_0QwZUr4JMhfc6DR-HikHR6-T_ETlTus,1998
|
|
170
|
+
ai_review/services/vcs/bitbucket/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
171
|
+
ai_review/services/vcs/bitbucket/client.py,sha256=OceM48MBoiUVKGTh8ZrrpVt8a1fDczCvOMD9VlwoapY,7253
|
|
155
172
|
ai_review/services/vcs/github/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
156
173
|
ai_review/services/vcs/github/client.py,sha256=v6NV97xi_rtRQQi8atRdSrXKhSOQ7CeRHK7YjoyjU6Q,6353
|
|
157
174
|
ai_review/services/vcs/gitlab/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
@@ -159,6 +176,7 @@ ai_review/services/vcs/gitlab/client.py,sha256=LK95m-uFSxhDEVU-cBGct61NTKjul-ieL
|
|
|
159
176
|
ai_review/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
160
177
|
ai_review/tests/fixtures/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
161
178
|
ai_review/tests/fixtures/clients/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
179
|
+
ai_review/tests/fixtures/clients/bitbucket.py,sha256=XJK1nU7Wir5PnmwCUJ_2uTlByA5a_CTEuXc2a-WmWio,7122
|
|
162
180
|
ai_review/tests/fixtures/clients/claude.py,sha256=6ldJlSSea0zsZV0hRDMi9mqWm0hWT3mp_ROwG_sVU1c,2203
|
|
163
181
|
ai_review/tests/fixtures/clients/gemini.py,sha256=zhLJhm49keKEBCPOf_pLu8_zCatsKKAWM4-gXOhaXeM,2429
|
|
164
182
|
ai_review/tests/fixtures/clients/github.py,sha256=Mzr8LcvVlYLhimzDMG4tEOQwj_6E6kTvYvSrq04R3YI,6865
|
|
@@ -178,6 +196,9 @@ ai_review/tests/fixtures/services/review/inline.py,sha256=k4IW6oy5JHMo9Kv0H97DLl
|
|
|
178
196
|
ai_review/tests/fixtures/services/review/summary.py,sha256=Hkt8mq1ZmqMH5_mELrS1x0wtCoNPbBjOEQ9yIsMbRts,691
|
|
179
197
|
ai_review/tests/suites/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
180
198
|
ai_review/tests/suites/clients/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
199
|
+
ai_review/tests/suites/clients/bitbucket/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
200
|
+
ai_review/tests/suites/clients/bitbucket/test_client.py,sha256=1qEkznC01hkh6TPpzChY9glhK6OTX-pfnSF43KNBtrY,600
|
|
201
|
+
ai_review/tests/suites/clients/bitbucket/test_tools.py,sha256=naHq0Xy7uP8pYdWR8JVrET5JJpNb0Z2-TEPkGHh2fFI,887
|
|
181
202
|
ai_review/tests/suites/clients/claude/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
182
203
|
ai_review/tests/suites/clients/claude/test_client.py,sha256=jLGqK7lzYc8LjJO-3HjBtLqCdg-ubw-xZ4EvFeFGRhY,404
|
|
183
204
|
ai_review/tests/suites/clients/claude/test_schema.py,sha256=MUZXvEROgLNpUVHfCsH5D3ruJPQwTx0OgeT3_BRVjgI,1671
|
|
@@ -186,8 +207,10 @@ ai_review/tests/suites/clients/gemini/test_client.py,sha256=f2R7KisiENrzf8gaK26N
|
|
|
186
207
|
ai_review/tests/suites/clients/gemini/test_schema.py,sha256=88dU28m7sEWvGx6tqYl7if7weWYuVc8erlkFkKKI3bk,3109
|
|
187
208
|
ai_review/tests/suites/clients/github/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
188
209
|
ai_review/tests/suites/clients/github/test_client.py,sha256=BiuLKCHIk83U1szYEZkB-n3vvyPgj6tAI5EqxKiT-CY,558
|
|
210
|
+
ai_review/tests/suites/clients/github/test_tools.py,sha256=_RKMWNgfeynnpbiDebRLg-1Qz91Kyevf5drl4hCngzU,881
|
|
189
211
|
ai_review/tests/suites/clients/gitlab/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
190
212
|
ai_review/tests/suites/clients/gitlab/test_client.py,sha256=5QOkNvgm0XRKHh79FNIY9CTonAqYPXqCCxcxeiAHYCA,560
|
|
213
|
+
ai_review/tests/suites/clients/gitlab/test_tools.py,sha256=-gS_kvZwNBkvYeYyYPld78F4ZuZPrpNORWVbg2eq5wM,678
|
|
191
214
|
ai_review/tests/suites/clients/ollama/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
192
215
|
ai_review/tests/suites/clients/ollama/test_client.py,sha256=XZ8NAd1bS_ltTuYZPgqlutPRA6kbvH3_3SKTCbNBTgA,404
|
|
193
216
|
ai_review/tests/suites/clients/ollama/test_schema.py,sha256=A93wCmxwGdvudfbA97VCPYP3gT6u6EYMetAg5fgURRA,1836
|
|
@@ -204,6 +227,8 @@ ai_review/tests/suites/libs/diff/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRk
|
|
|
204
227
|
ai_review/tests/suites/libs/diff/test_models.py,sha256=RBFQ97LWhU8TlupxXkJ97ryAvJrSuOHLtT9biUBUMXg,3321
|
|
205
228
|
ai_review/tests/suites/libs/diff/test_parser.py,sha256=rvWEVGIdaLBlDAnSevjRY7I1Zikj12d5GOgMk9QyHQQ,3013
|
|
206
229
|
ai_review/tests/suites/libs/diff/test_tools.py,sha256=XkHJZ-b5veFz5oLKO09P7npaLN8lOzCnGR7e83Zv_mg,1953
|
|
230
|
+
ai_review/tests/suites/libs/http/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
231
|
+
ai_review/tests/suites/libs/http/test_paginate.py,sha256=9PCn1mUQypPId9l8RToBQnLBJBV_WEYxBh785bqqmMA,2694
|
|
207
232
|
ai_review/tests/suites/libs/template/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
208
233
|
ai_review/tests/suites/libs/template/test_render.py,sha256=n-ss5bd_hwc-RzYmqWmFM6KSlP1zLSnlsW1Yki12Bpw,1890
|
|
209
234
|
ai_review/tests/suites/services/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
@@ -242,14 +267,16 @@ ai_review/tests/suites/services/review/summary/__init__.py,sha256=47DEQpj8HBSa-_
|
|
|
242
267
|
ai_review/tests/suites/services/review/summary/test_schema.py,sha256=HUbSDbQzBp-iTsGLs7hJfu-sz6sq9xLO0woGmZPWyx0,735
|
|
243
268
|
ai_review/tests/suites/services/review/summary/test_service.py,sha256=ibiYOWQMZuQKRutIT_EKGq7DEPQvp62YhscNHeSWFVQ,588
|
|
244
269
|
ai_review/tests/suites/services/vcs/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
245
|
-
ai_review/tests/suites/services/vcs/test_factory.py,sha256=
|
|
270
|
+
ai_review/tests/suites/services/vcs/test_factory.py,sha256=EergKSHW4b7RZg9vJJ5Cj0XfPsDTLEclV1kq2_9greA,1138
|
|
271
|
+
ai_review/tests/suites/services/vcs/bitbucket/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
272
|
+
ai_review/tests/suites/services/vcs/bitbucket/test_service.py,sha256=JnG5BYTgGMb-doNjis2BOeI8JrMmvqwv82UFD5f92kg,4448
|
|
246
273
|
ai_review/tests/suites/services/vcs/github/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
247
274
|
ai_review/tests/suites/services/vcs/github/test_service.py,sha256=c2sjecm4qzqYXuO9j6j35NQyJzqDpnXIJImRTcpkyHo,4378
|
|
248
275
|
ai_review/tests/suites/services/vcs/gitlab/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
249
276
|
ai_review/tests/suites/services/vcs/gitlab/test_service.py,sha256=0dqgL5whzjcP-AQ4adP_12QfkYm_ZtdtMotmYm8Se7Y,4449
|
|
250
|
-
xai_review-0.
|
|
251
|
-
xai_review-0.
|
|
252
|
-
xai_review-0.
|
|
253
|
-
xai_review-0.
|
|
254
|
-
xai_review-0.
|
|
255
|
-
xai_review-0.
|
|
277
|
+
xai_review-0.27.0.dist-info/licenses/LICENSE,sha256=p-v8m7Kmz4KKc7PcvsGiGEmCw9AiSXY4_ylOPy_u--Y,11343
|
|
278
|
+
xai_review-0.27.0.dist-info/METADATA,sha256=5SnK3Ip4vzfwvS110fYNDSDYD4OzrmA5G1eUV2oGMbE,11150
|
|
279
|
+
xai_review-0.27.0.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
|
|
280
|
+
xai_review-0.27.0.dist-info/entry_points.txt,sha256=JyC5URanMi5io5P_PXQf7H_I1OGIpk5cZQhaPQ0g4Zs,53
|
|
281
|
+
xai_review-0.27.0.dist-info/top_level.txt,sha256=sTsZbfzLoqvRZKdKa-BcxWvjlHdrpbeJ6DrGY0EuR0E,10
|
|
282
|
+
xai_review-0.27.0.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|