xai-review 0.29.0__py3-none-any.whl → 0.31.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/gitea/__init__.py +0 -0
- ai_review/clients/gitea/client.py +31 -0
- ai_review/clients/gitea/pr/__init__.py +0 -0
- ai_review/clients/gitea/pr/client.py +118 -0
- ai_review/clients/gitea/pr/schema/__init__.py +0 -0
- ai_review/clients/gitea/pr/schema/comments.py +37 -0
- ai_review/clients/gitea/pr/schema/files.py +16 -0
- ai_review/clients/gitea/pr/schema/pull_request.py +18 -0
- ai_review/clients/gitea/pr/schema/user.py +6 -0
- ai_review/clients/gitea/pr/types.py +25 -0
- ai_review/clients/gitea/tools.py +6 -0
- ai_review/libs/config/review.py +1 -0
- ai_review/libs/config/vcs/base.py +8 -1
- ai_review/libs/config/vcs/gitea.py +13 -0
- ai_review/libs/constants/vcs_provider.py +1 -0
- ai_review/services/review/gateway/review_dry_run_comment_gateway.py +42 -0
- ai_review/services/review/service.py +9 -3
- ai_review/services/vcs/factory.py +3 -0
- ai_review/services/vcs/gitea/__init__.py +0 -0
- ai_review/services/vcs/gitea/adapter.py +22 -0
- ai_review/services/vcs/gitea/client.py +151 -0
- ai_review/tests/fixtures/clients/gitea.py +141 -0
- ai_review/tests/fixtures/services/review/gateway/{comment.py → review_comment_gateway.py} +1 -1
- ai_review/tests/fixtures/services/review/gateway/review_dry_run_comment_gateway.py +103 -0
- ai_review/tests/fixtures/services/review/gateway/review_llm_gateway.py +34 -0
- ai_review/tests/suites/clients/gitea/__init__.py +0 -0
- ai_review/tests/suites/clients/gitea/test_client.py +14 -0
- ai_review/tests/suites/clients/gitea/test_tools.py +26 -0
- ai_review/tests/suites/services/review/gateway/{test_comment.py → test_review_comment_gateway.py} +1 -1
- ai_review/tests/suites/services/review/gateway/test_review_dry_run_comment_gateway.py +93 -0
- ai_review/tests/suites/services/review/gateway/{test_llm.py → test_review_llm_gateway.py} +1 -15
- ai_review/tests/suites/services/review/runner/test_context.py +2 -2
- ai_review/tests/suites/services/review/runner/test_inline.py +2 -2
- ai_review/tests/suites/services/review/runner/test_inline_reply.py +2 -2
- ai_review/tests/suites/services/review/runner/test_summary.py +2 -2
- ai_review/tests/suites/services/review/runner/test_summary_reply.py +2 -2
- ai_review/tests/suites/services/review/test_service.py +18 -0
- ai_review/tests/suites/services/vcs/gitea/__init__.py +0 -0
- ai_review/tests/suites/services/vcs/gitea/test_adapter.py +52 -0
- ai_review/tests/suites/services/vcs/gitea/test_client.py +86 -0
- ai_review/tests/suites/services/vcs/test_factory.py +7 -0
- {xai_review-0.29.0.dist-info → xai_review-0.31.0.dist-info}/METADATA +21 -12
- {xai_review-0.29.0.dist-info → xai_review-0.31.0.dist-info}/RECORD +49 -24
- ai_review/tests/fixtures/services/review/gateway/llm.py +0 -17
- /ai_review/services/review/gateway/{comment.py → review_comment_gateway.py} +0 -0
- /ai_review/services/review/gateway/{llm.py → review_llm_gateway.py} +0 -0
- {xai_review-0.29.0.dist-info → xai_review-0.31.0.dist-info}/WHEEL +0 -0
- {xai_review-0.29.0.dist-info → xai_review-0.31.0.dist-info}/entry_points.txt +0 -0
- {xai_review-0.29.0.dist-info → xai_review-0.31.0.dist-info}/licenses/LICENSE +0 -0
- {xai_review-0.29.0.dist-info → xai_review-0.31.0.dist-info}/top_level.txt +0 -0
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
import pytest
|
|
2
|
+
|
|
3
|
+
from ai_review.services.vcs.gitea.client import GiteaVCSClient
|
|
4
|
+
from ai_review.services.vcs.types import ReviewInfoSchema, ReviewCommentSchema, ReviewThreadSchema, ThreadKind
|
|
5
|
+
from ai_review.tests.fixtures.clients.gitea import FakeGiteaPullRequestsHTTPClient
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
@pytest.mark.asyncio
|
|
9
|
+
@pytest.mark.usefixtures("gitea_http_client_config")
|
|
10
|
+
async def test_get_review_info_returns_valid_schema(
|
|
11
|
+
gitea_vcs_client: GiteaVCSClient,
|
|
12
|
+
fake_gitea_pull_requests_http_client: FakeGiteaPullRequestsHTTPClient,
|
|
13
|
+
):
|
|
14
|
+
info = await gitea_vcs_client.get_review_info()
|
|
15
|
+
|
|
16
|
+
assert isinstance(info, ReviewInfoSchema)
|
|
17
|
+
assert info.id == 1
|
|
18
|
+
assert info.title == "Fake Gitea PR"
|
|
19
|
+
assert info.author.username == "tester"
|
|
20
|
+
assert "src/main.py" in info.changed_files
|
|
21
|
+
assert info.source_branch.ref == "feature"
|
|
22
|
+
assert info.target_branch.ref == "main"
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
@pytest.mark.asyncio
|
|
26
|
+
@pytest.mark.usefixtures("gitea_http_client_config")
|
|
27
|
+
async def test_get_general_comments_returns_list(
|
|
28
|
+
gitea_vcs_client: GiteaVCSClient,
|
|
29
|
+
fake_gitea_pull_requests_http_client: FakeGiteaPullRequestsHTTPClient,
|
|
30
|
+
):
|
|
31
|
+
comments = await gitea_vcs_client.get_general_comments()
|
|
32
|
+
assert all(isinstance(c, ReviewCommentSchema) for c in comments)
|
|
33
|
+
assert len(comments) > 0
|
|
34
|
+
|
|
35
|
+
|
|
36
|
+
@pytest.mark.asyncio
|
|
37
|
+
@pytest.mark.usefixtures("gitea_http_client_config")
|
|
38
|
+
async def test_get_inline_comments_filters_by_file(
|
|
39
|
+
gitea_vcs_client: GiteaVCSClient,
|
|
40
|
+
fake_gitea_pull_requests_http_client: FakeGiteaPullRequestsHTTPClient,
|
|
41
|
+
):
|
|
42
|
+
comments = await gitea_vcs_client.get_inline_comments()
|
|
43
|
+
assert all(c.file for c in comments)
|
|
44
|
+
assert all(isinstance(c, ReviewCommentSchema) for c in comments)
|
|
45
|
+
|
|
46
|
+
|
|
47
|
+
@pytest.mark.asyncio
|
|
48
|
+
@pytest.mark.usefixtures("gitea_http_client_config")
|
|
49
|
+
async def test_create_general_comment_posts_comment(
|
|
50
|
+
gitea_vcs_client: GiteaVCSClient,
|
|
51
|
+
fake_gitea_pull_requests_http_client: FakeGiteaPullRequestsHTTPClient,
|
|
52
|
+
):
|
|
53
|
+
await gitea_vcs_client.create_general_comment("Test comment")
|
|
54
|
+
calls = [name for name, _ in fake_gitea_pull_requests_http_client.calls]
|
|
55
|
+
assert "create_comment" in calls
|
|
56
|
+
|
|
57
|
+
|
|
58
|
+
@pytest.mark.asyncio
|
|
59
|
+
@pytest.mark.usefixtures("gitea_http_client_config")
|
|
60
|
+
async def test_create_inline_comment_posts_comment(
|
|
61
|
+
gitea_vcs_client: GiteaVCSClient,
|
|
62
|
+
fake_gitea_pull_requests_http_client: FakeGiteaPullRequestsHTTPClient,
|
|
63
|
+
):
|
|
64
|
+
await gitea_vcs_client.create_inline_comment("src/main.py", 10, "Inline comment")
|
|
65
|
+
calls = [name for name, _ in fake_gitea_pull_requests_http_client.calls]
|
|
66
|
+
assert "create_comment" in calls
|
|
67
|
+
|
|
68
|
+
|
|
69
|
+
@pytest.mark.asyncio
|
|
70
|
+
@pytest.mark.usefixtures("gitea_http_client_config")
|
|
71
|
+
async def test_get_inline_threads_groups_by_comment(
|
|
72
|
+
gitea_vcs_client: GiteaVCSClient,
|
|
73
|
+
):
|
|
74
|
+
threads = await gitea_vcs_client.get_inline_threads()
|
|
75
|
+
assert all(isinstance(t, ReviewThreadSchema) for t in threads)
|
|
76
|
+
assert all(t.kind == ThreadKind.INLINE for t in threads)
|
|
77
|
+
|
|
78
|
+
|
|
79
|
+
@pytest.mark.asyncio
|
|
80
|
+
@pytest.mark.usefixtures("gitea_http_client_config")
|
|
81
|
+
async def test_get_general_threads_wraps_comments(
|
|
82
|
+
gitea_vcs_client: GiteaVCSClient,
|
|
83
|
+
):
|
|
84
|
+
threads = await gitea_vcs_client.get_general_threads()
|
|
85
|
+
assert all(isinstance(t, ReviewThreadSchema) for t in threads)
|
|
86
|
+
assert all(t.kind == ThreadKind.SUMMARY for t in threads)
|
|
@@ -2,10 +2,17 @@ import pytest
|
|
|
2
2
|
|
|
3
3
|
from ai_review.services.vcs.bitbucket.client import BitbucketVCSClient
|
|
4
4
|
from ai_review.services.vcs.factory import get_vcs_client
|
|
5
|
+
from ai_review.services.vcs.gitea.client import GiteaVCSClient
|
|
5
6
|
from ai_review.services.vcs.github.client import GitHubVCSClient
|
|
6
7
|
from ai_review.services.vcs.gitlab.client import GitLabVCSClient
|
|
7
8
|
|
|
8
9
|
|
|
10
|
+
@pytest.mark.usefixtures("gitea_http_client_config")
|
|
11
|
+
def test_get_vcs_client_returns_gitea(monkeypatch: pytest.MonkeyPatch):
|
|
12
|
+
client = get_vcs_client()
|
|
13
|
+
assert isinstance(client, GiteaVCSClient)
|
|
14
|
+
|
|
15
|
+
|
|
9
16
|
@pytest.mark.usefixtures("github_http_client_config")
|
|
10
17
|
def test_get_vcs_client_returns_github(monkeypatch: pytest.MonkeyPatch):
|
|
11
18
|
client = get_vcs_client()
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: xai-review
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.31.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,15 +67,15 @@ 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**, **GitHub**, and **
|
|
70
|
+
- **VCS integration** — works out of the box with **GitLab**, **GitHub**, **Bitbucket**, and **Gitea**.
|
|
71
71
|
- **Customizable prompts** — adapt inline, context, and summary reviews to match your team’s coding guidelines.
|
|
72
72
|
- **Reply modes** — AI can now **participate in existing review threads**, adding follow-up replies in both inline and
|
|
73
73
|
summary discussions.
|
|
74
74
|
- **Flexible configuration** — supports `YAML`, `JSON`, and `ENV`, with seamless overrides in CI/CD pipelines.
|
|
75
75
|
- **AI Review runs fully client-side** — it never proxies or inspects your requests.
|
|
76
76
|
|
|
77
|
-
AI Review runs automatically in your CI/CD pipeline and posts both **inline comments**, **summary reviews**, and now
|
|
78
|
-
|
|
77
|
+
AI Review runs automatically in your CI/CD pipeline and posts both **inline comments**, **summary reviews**, and now
|
|
78
|
+
**AI-generated replies** directly inside your merge requests. This makes reviews faster, more conversational, and still
|
|
79
79
|
fully under human control.
|
|
80
80
|
|
|
81
81
|
---
|
|
@@ -85,11 +85,13 @@ fully under human control.
|
|
|
85
85
|
Curious how **AI Review** works in practice? Here are three real Pull Requests reviewed entirely by the tool — one per
|
|
86
86
|
mode:
|
|
87
87
|
|
|
88
|
-
| Mode
|
|
89
|
-
|
|
90
|
-
| 🧩 Inline
|
|
91
|
-
| 🧠 Context
|
|
92
|
-
| 📄 Summary
|
|
88
|
+
| Mode | Description | 🐙 GitHub | 🦊 GitLab |
|
|
89
|
+
|------------------|----------------------------------------------------------------------------------------------------------------------------------------------|-----------------------------------------------------------------------|----------------------------------------------------------------------------|
|
|
90
|
+
| 🧩 Inline | Adds **line-by-line comments** directly in the diff. Focuses on specific code changes. | [View on GitHub](https://github.com/Nikita-Filonov/ai-review/pull/4) | [View on GitLab](https://gitlab.com/core8332439/review/-/merge_requests/2) |
|
|
91
|
+
| 🧠 Context | Performs a **broader analysis across multiple files**, detecting cross-file issues and inconsistencies. | [View on GitHub](https://github.com/Nikita-Filonov/ai-review/pull/5) | [View on GitLab](https://gitlab.com/core8332439/review/-/merge_requests/3) |
|
|
92
|
+
| 📄 Summary | Posts a **concise high-level summary** with key highlights, strengths, and major issues. | [View on GitHub](https://github.com/Nikita-Filonov/ai-review/pull/6) | [View on GitLab](https://gitlab.com/core8332439/review/-/merge_requests/4) |
|
|
93
|
+
| 💬 Inline Reply | Generates a **context-aware reply** to an existing inline comment thread. Can clarify decisions, propose fixes, or provide code suggestions. | [View on GitHub](https://github.com/Nikita-Filonov/ai-review/pull/16) | [View on GitLab](https://gitlab.com/core8332439/review/-/merge_requests/5) |
|
|
94
|
+
| 💬 Summary Reply | Continues the **summary-level review discussion**, responding to reviewer comments with clarifications, rationale, or actionable next steps. | [View on GitHub](https://github.com/Nikita-Filonov/ai-review/pull/17) | [View on GitLab](https://gitlab.com/core8332439/review/-/merge_requests/6) |
|
|
93
95
|
|
|
94
96
|
👉 Each review was generated automatically via GitHub Actions using the corresponding mode:
|
|
95
97
|
|
|
@@ -97,6 +99,8 @@ mode:
|
|
|
97
99
|
ai-review run-inline
|
|
98
100
|
ai-review run-summary
|
|
99
101
|
ai-review run-context
|
|
102
|
+
ai-review run-inline-reply
|
|
103
|
+
ai-review run-summary-reply
|
|
100
104
|
```
|
|
101
105
|
|
|
102
106
|
---
|
|
@@ -162,6 +166,8 @@ vcs:
|
|
|
162
166
|
> - ai-review run-inline
|
|
163
167
|
> - ai-review run-context
|
|
164
168
|
> - ai-review run-summary
|
|
169
|
+
> - ai-review run-inline-reply
|
|
170
|
+
> - ai-review run-summary-reply
|
|
165
171
|
|
|
166
172
|
---
|
|
167
173
|
|
|
@@ -172,7 +178,7 @@ Key things you can customize:
|
|
|
172
178
|
|
|
173
179
|
- **LLM provider** — OpenAI, Gemini, Claude, or Ollama
|
|
174
180
|
- **Model settings** — model name, temperature, max tokens
|
|
175
|
-
- **VCS integration** — works out of the box with **GitLab**, **GitHub**, and **
|
|
181
|
+
- **VCS integration** — works out of the box with **GitLab**, **GitHub**, **Bitbucket**, and **Gitea**
|
|
176
182
|
- **Review policy** — which files to include/exclude, review modes
|
|
177
183
|
- **Prompts** — inline/context/summary prompt templates
|
|
178
184
|
|
|
@@ -202,7 +208,7 @@ on:
|
|
|
202
208
|
review-command:
|
|
203
209
|
type: choice
|
|
204
210
|
default: run
|
|
205
|
-
options: [ run, run-inline, run-context, run-summary ]
|
|
211
|
+
options: [ run, run-inline, run-context, run-summary, run-inline-reply, run-summary-reply ]
|
|
206
212
|
pull-request-number:
|
|
207
213
|
type: string
|
|
208
214
|
required: true
|
|
@@ -211,7 +217,10 @@ jobs:
|
|
|
211
217
|
runs-on: ubuntu-latest
|
|
212
218
|
steps:
|
|
213
219
|
- uses: actions/checkout@v4
|
|
214
|
-
|
|
220
|
+
with:
|
|
221
|
+
fetch-depth: 0
|
|
222
|
+
|
|
223
|
+
- uses: Nikita-Filonov/ai-review@v0.31.0
|
|
215
224
|
with:
|
|
216
225
|
review-command: ${{ inputs.review-command }}
|
|
217
226
|
env:
|
|
@@ -29,6 +29,17 @@ ai_review/clients/gemini/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZ
|
|
|
29
29
|
ai_review/clients/gemini/client.py,sha256=4G1LBcpiFcrITOysQbMwhY1db4hHcSGgyI-0XazZMV0,1889
|
|
30
30
|
ai_review/clients/gemini/schema.py,sha256=5oVvbI-h_sw8bFreS4JUmMj-aXa_frvxK3H8sg4iJIA,2264
|
|
31
31
|
ai_review/clients/gemini/types.py,sha256=D-P0THorrQ8yq5P-NKAC65zzhEYRa9HkiXTORG9QoIk,267
|
|
32
|
+
ai_review/clients/gitea/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
33
|
+
ai_review/clients/gitea/client.py,sha256=cMxp1Ic44JFvSkuqLdWkAhsgMC6CwM3qmf-1CptqnV8,1152
|
|
34
|
+
ai_review/clients/gitea/tools.py,sha256=vg805Gk4hsEn8_zePtCZkvkxYPxT-A1o0mkU_RqAlC0,196
|
|
35
|
+
ai_review/clients/gitea/pr/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
36
|
+
ai_review/clients/gitea/pr/client.py,sha256=eFAZai2zinr7ZGscVHa0cZIaYJJucNcLb08f73cKo-o,4945
|
|
37
|
+
ai_review/clients/gitea/pr/types.py,sha256=hy4win_nDvnEi_aHAbysmHtymHDq-zIATYKSEbpDcYY,984
|
|
38
|
+
ai_review/clients/gitea/pr/schema/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
39
|
+
ai_review/clients/gitea/pr/schema/comments.py,sha256=vQ-ATCmbEa2oeFndpkf-V-4jxGBH7gTMakCLVpkYunE,922
|
|
40
|
+
ai_review/clients/gitea/pr/schema/files.py,sha256=O4c4Z3R775OuGOJgf5baMH5ivzHCVsSBFaPXEgVmKs0,341
|
|
41
|
+
ai_review/clients/gitea/pr/schema/pull_request.py,sha256=lT4r-Am5MmFQqB5WnQ0OWw6cB3e-NlBAi08Jw1fmAE8,361
|
|
42
|
+
ai_review/clients/gitea/pr/schema/user.py,sha256=5YIys_MFFm612hKMMQdjwlsH-FG_bS-vSQsPbBueEPU,94
|
|
32
43
|
ai_review/clients/github/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
33
44
|
ai_review/clients/github/client.py,sha256=pprQcCYdrhRYtuqRsTFiCbj54Qb1Ll6_jmlm7AJg8pk,1149
|
|
34
45
|
ai_review/clients/github/tools.py,sha256=sD2eS_iNhzT4ZLgTRmO2uBLuId-fa2aSvbu6VFeKSlc,201
|
|
@@ -74,7 +85,7 @@ ai_review/libs/config/core.py,sha256=ZQ2QtYr7vAF0tXbVLvVwk9QFE5h6JjAKAUQWcb9gHws
|
|
|
74
85
|
ai_review/libs/config/http.py,sha256=dx5PwgnGbPocUwf9QRhFmXmjfFDoeerOM04yB3B6S8w,398
|
|
75
86
|
ai_review/libs/config/logger.py,sha256=oPmjpjf6EZwW7CgOjT8mOQdGnT98CLwXepiGB_ajZvU,384
|
|
76
87
|
ai_review/libs/config/prompt.py,sha256=jPBYvi75u6BUIHOZnXCg5CiL0XRONDfW5T4WaYlxPEE,6066
|
|
77
|
-
ai_review/libs/config/review.py,sha256=
|
|
88
|
+
ai_review/libs/config/review.py,sha256=jCfHfGfHs7Sc6H92hVUBd8bMRbLiIiThVmk6lFNlv40,1224
|
|
78
89
|
ai_review/libs/config/llm/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
79
90
|
ai_review/libs/config/llm/base.py,sha256=ovvULFhfwH66_705D1O87ZGMeaQOZO7ZQhRUzzfzguU,2089
|
|
80
91
|
ai_review/libs/config/llm/claude.py,sha256=MoalXkBA6pEp01znS8ohTRopfea9RUcqhZX5lOIuek8,293
|
|
@@ -83,14 +94,15 @@ ai_review/libs/config/llm/meta.py,sha256=cEcAHOwy-mQBKo9_KJrQe0I7qppq6h99lSmoWX4
|
|
|
83
94
|
ai_review/libs/config/llm/ollama.py,sha256=M6aiPb5GvYvkiGcgHTsh9bOw5JsBLqmfSKoIbHCejrU,372
|
|
84
95
|
ai_review/libs/config/llm/openai.py,sha256=jGVL4gJ2wIacoKeK9Zc9LCgY95TxdeYOThdglVPErFU,262
|
|
85
96
|
ai_review/libs/config/vcs/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
86
|
-
ai_review/libs/config/vcs/base.py,sha256=
|
|
97
|
+
ai_review/libs/config/vcs/base.py,sha256=RJZhKysD-d8oYZQ2v1H74jyqdqtOCc8zZ0n9S4ovfHk,1471
|
|
87
98
|
ai_review/libs/config/vcs/bitbucket.py,sha256=on5sQaE57kM_zSmqdDUNrttVtTPGOzqLHM5s7eFN7DA,275
|
|
99
|
+
ai_review/libs/config/vcs/gitea.py,sha256=elJjWnHxdC9kDWu0oHsxYsqv7FC-1zvmLfaWAlWYan4,254
|
|
88
100
|
ai_review/libs/config/vcs/github.py,sha256=hk-kuDLd8wecqtEb8PSqF7Yy_pkihplJhi6nB6FZID4,256
|
|
89
101
|
ai_review/libs/config/vcs/gitlab.py,sha256=ecYfU158VgVlM6P5mgZn8FOqk3Xt60xx7gUqT5e22a4,252
|
|
90
102
|
ai_review/libs/config/vcs/pagination.py,sha256=S-XxWQYkIjhu3ffpHQ44d7UtRHH81fh9GaJ-xQXUUy4,175
|
|
91
103
|
ai_review/libs/constants/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
92
104
|
ai_review/libs/constants/llm_provider.py,sha256=k7GzctIZ-TDsRlhTPbpGYgym_CO2YKVFp_oXG9dTBW0,143
|
|
93
|
-
ai_review/libs/constants/vcs_provider.py,sha256=
|
|
105
|
+
ai_review/libs/constants/vcs_provider.py,sha256=7A30fTSs9GM_A4J9B84MNY78c7do0RaoKytuiRwdhDY,147
|
|
94
106
|
ai_review/libs/diff/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
95
107
|
ai_review/libs/diff/models.py,sha256=RT4YJboOPA-AjNJGRj_HIZaJLEmROOhOgMh1wIGpIwY,2344
|
|
96
108
|
ai_review/libs/diff/parser.py,sha256=2BGxZnRN3SRjNnZK4qIOW28aM93Ij__1SltwclJrlno,3817
|
|
@@ -162,10 +174,11 @@ ai_review/services/prompt/service.py,sha256=AvhLMfwmIxbnPWdViSSclwUUqnHGx2V-hSMs
|
|
|
162
174
|
ai_review/services/prompt/tools.py,sha256=7yKQmHajlwFE37tvmMbbBYDmFObFVOb1ubHhNXBdAnE,1229
|
|
163
175
|
ai_review/services/prompt/types.py,sha256=9p1RHuR5-5DNV0AtR_VtiT5OHo6eNqKzGggQoPWiSh8,1572
|
|
164
176
|
ai_review/services/review/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
165
|
-
ai_review/services/review/service.py,sha256=
|
|
177
|
+
ai_review/services/review/service.py,sha256=aqt0dlA77_MPT4lcq1qbTjOZOKE-7y83I-7J5jwvro4,5579
|
|
166
178
|
ai_review/services/review/gateway/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
167
|
-
ai_review/services/review/gateway/
|
|
168
|
-
ai_review/services/review/gateway/
|
|
179
|
+
ai_review/services/review/gateway/review_comment_gateway.py,sha256=gOFoEFXIJ9SX7B05dTO605dUOnrchCtB-a2ExXCfUxE,5019
|
|
180
|
+
ai_review/services/review/gateway/review_dry_run_comment_gateway.py,sha256=3CLUBGt8ExX-r_d3PDUxhgaw-yUMqYYOvJbRzs-W63I,2420
|
|
181
|
+
ai_review/services/review/gateway/review_llm_gateway.py,sha256=5BQU8Vmo55pzWkVk6s_w5B3qX4tSkjjtj7wWWhLyc9s,1534
|
|
169
182
|
ai_review/services/review/gateway/types.py,sha256=C9zOUF0ZDnSa568T3AIWIxpNdnpcB8QUxU1rVqx7lZc,1795
|
|
170
183
|
ai_review/services/review/internal/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
171
184
|
ai_review/services/review/internal/inline/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
@@ -195,11 +208,14 @@ ai_review/services/review/runner/summary.py,sha256=KfQkfw_sqyvKnsi2-eD2YLfjfpOMa
|
|
|
195
208
|
ai_review/services/review/runner/summary_reply.py,sha256=8YWMhw4dNjFgxTTgxyb6yLh-CkK_4AtfP36eD0DV4nY,3683
|
|
196
209
|
ai_review/services/review/runner/types.py,sha256=lZJCiCAHnedXqYBIvnb8A0HzOQd3GEPWC_wu_mk46KY,113
|
|
197
210
|
ai_review/services/vcs/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
198
|
-
ai_review/services/vcs/factory.py,sha256=
|
|
211
|
+
ai_review/services/vcs/factory.py,sha256=1lVkM0kwSMSzMMDZxURRDUlPC-3xw-IiBDYl6b42cTw,884
|
|
199
212
|
ai_review/services/vcs/types.py,sha256=LemhQ4LAGlOdwMSF-HlYIo7taSRu4494YQ0Rp2PBgcg,3169
|
|
200
213
|
ai_review/services/vcs/bitbucket/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
201
214
|
ai_review/services/vcs/bitbucket/adapter.py,sha256=b-8KT46C8WT-Sos-gUGFJsxIWY7mXfzTuJjIqYuzrBA,928
|
|
202
215
|
ai_review/services/vcs/bitbucket/client.py,sha256=MhqkFDewutX7DFBCFBDhDopFznwf92dAdZsxy_oS_mc,10726
|
|
216
|
+
ai_review/services/vcs/gitea/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
217
|
+
ai_review/services/vcs/gitea/adapter.py,sha256=DxzcXReKTGHkw4DCJa8X3Mnczcg9hqx6sIAQYY-8HAI,784
|
|
218
|
+
ai_review/services/vcs/gitea/client.py,sha256=HqejmtARi7-DqNcTb4P6E9tyYsC-7HtbYubmtK2OQnk,6242
|
|
203
219
|
ai_review/services/vcs/github/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
204
220
|
ai_review/services/vcs/github/adapter.py,sha256=pxcbSLEXkOg1c1NtzB0hkZJVvyC4An9pCzNK5sPJKbA,1212
|
|
205
221
|
ai_review/services/vcs/github/client.py,sha256=rSVvpyovT1wDLq0fIQPe5UJqmgIgIFh2P-CPqIQ_sf0,9371
|
|
@@ -212,6 +228,7 @@ ai_review/tests/fixtures/clients/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRk
|
|
|
212
228
|
ai_review/tests/fixtures/clients/bitbucket.py,sha256=K4Ez_hTOVKz5-KlXbgTOVDec6iewxkm8hqDJvebhnpE,7124
|
|
213
229
|
ai_review/tests/fixtures/clients/claude.py,sha256=6ldJlSSea0zsZV0hRDMi9mqWm0hWT3mp_ROwG_sVU1c,2203
|
|
214
230
|
ai_review/tests/fixtures/clients/gemini.py,sha256=zhLJhm49keKEBCPOf_pLu8_zCatsKKAWM4-gXOhaXeM,2429
|
|
231
|
+
ai_review/tests/fixtures/clients/gitea.py,sha256=JTJLYRSr1hTOWXFknAq5eBSCSNxMKsdgMdjNpvVBA04,5027
|
|
215
232
|
ai_review/tests/fixtures/clients/github.py,sha256=kC1L-nWZMn9O_uRfuT_B8R4sn8FRvISlBJMkRKaioS0,7814
|
|
216
233
|
ai_review/tests/fixtures/clients/gitlab.py,sha256=AD6NJOJSw76hjAEiWewQ6Vu5g-cfQn0GTtdchuDBH9o,8042
|
|
217
234
|
ai_review/tests/fixtures/clients/ollama.py,sha256=UUHDDPUraQAG8gBC-0UvftaK0BDYir5cJDlRKJymSQg,2109
|
|
@@ -231,8 +248,9 @@ ai_review/tests/fixtures/services/vcs.py,sha256=RXfbuW0Ffx7km7q2Zck__1qTZdZ-_vNr
|
|
|
231
248
|
ai_review/tests/fixtures/services/review/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
232
249
|
ai_review/tests/fixtures/services/review/base.py,sha256=10LaT6xi5IP0CrR6LfatirVKnZ7D0n8Q1dV99nOBEuE,1501
|
|
233
250
|
ai_review/tests/fixtures/services/review/gateway/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
234
|
-
ai_review/tests/fixtures/services/review/gateway/
|
|
235
|
-
ai_review/tests/fixtures/services/review/gateway/
|
|
251
|
+
ai_review/tests/fixtures/services/review/gateway/review_comment_gateway.py,sha256=aclYEHKS7Kd0TK6_AGvkYsdMFhESHAGhk4Xpblxy1bQ,4078
|
|
252
|
+
ai_review/tests/fixtures/services/review/gateway/review_dry_run_comment_gateway.py,sha256=3E-fDONV4j8GJlSaumqN90Rayoe8yKjnn6APwOrpDDs,4125
|
|
253
|
+
ai_review/tests/fixtures/services/review/gateway/review_llm_gateway.py,sha256=tm3ktE5wFVIFFvHPSUO1wQG7LC3Ekta2PwWky9ugL98,1146
|
|
236
254
|
ai_review/tests/fixtures/services/review/internal/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
237
255
|
ai_review/tests/fixtures/services/review/internal/inline.py,sha256=D-npuBMSsP_ng5RgplaUZnANl3q5f7GD4OkE8IvQv2M,1038
|
|
238
256
|
ai_review/tests/fixtures/services/review/internal/inline_reply.py,sha256=NRfcVBHavyHvoxOiqMhYhcf6YWDLfT367ZoXeUZIieU,1047
|
|
@@ -258,6 +276,9 @@ ai_review/tests/suites/clients/claude/test_schema.py,sha256=MUZXvEROgLNpUVHfCsH5
|
|
|
258
276
|
ai_review/tests/suites/clients/gemini/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
259
277
|
ai_review/tests/suites/clients/gemini/test_client.py,sha256=f2R7KisiENrzf8gaK26NYQZpQ1dvGHykZZ-eN_xC1UQ,404
|
|
260
278
|
ai_review/tests/suites/clients/gemini/test_schema.py,sha256=88dU28m7sEWvGx6tqYl7if7weWYuVc8erlkFkKKI3bk,3109
|
|
279
|
+
ai_review/tests/suites/clients/gitea/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
280
|
+
ai_review/tests/suites/clients/gitea/test_client.py,sha256=OvNLGywTsbyHKlaOOoiJu65UduJRbhEezkTIMK19gb8,544
|
|
281
|
+
ai_review/tests/suites/clients/gitea/test_tools.py,sha256=S9CkTccPFY1MgQ0Uilb6Kihs7iPJqNaE4Wvoa3jx8Xk,693
|
|
261
282
|
ai_review/tests/suites/clients/github/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
262
283
|
ai_review/tests/suites/clients/github/test_client.py,sha256=BiuLKCHIk83U1szYEZkB-n3vvyPgj6tAI5EqxKiT-CY,558
|
|
263
284
|
ai_review/tests/suites/clients/github/test_tools.py,sha256=_RKMWNgfeynnpbiDebRLg-1Qz91Kyevf5drl4hCngzU,881
|
|
@@ -312,10 +333,11 @@ ai_review/tests/suites/services/prompt/test_schema.py,sha256=rm2__LA2_4qQwSmNAZ_
|
|
|
312
333
|
ai_review/tests/suites/services/prompt/test_service.py,sha256=jfpmM--eZH43NylwltX-ijmF58ZJ4WA83kmGshUbJfs,8312
|
|
313
334
|
ai_review/tests/suites/services/prompt/test_tools.py,sha256=SmweFvrpxd-3RO5v18vCl7zonEqFE1n4eqHH7-6auYM,4511
|
|
314
335
|
ai_review/tests/suites/services/review/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
315
|
-
ai_review/tests/suites/services/review/test_service.py,sha256=
|
|
336
|
+
ai_review/tests/suites/services/review/test_service.py,sha256=9XBywDoVTzLXlfqMmrxwJbPoj8QoGFW5wDwirqu2UHI,4206
|
|
316
337
|
ai_review/tests/suites/services/review/gateway/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
317
|
-
ai_review/tests/suites/services/review/gateway/
|
|
318
|
-
ai_review/tests/suites/services/review/gateway/
|
|
338
|
+
ai_review/tests/suites/services/review/gateway/test_review_comment_gateway.py,sha256=eueGnKY3YcLvLQ8hSdhKQuVfOlFwxP82cwgEHKyRPiQ,8831
|
|
339
|
+
ai_review/tests/suites/services/review/gateway/test_review_dry_run_comment_gateway.py,sha256=YGSCZRyyV9BJaKpI66viHYZdM-GtuODJt4ZzEW1-29g,3862
|
|
340
|
+
ai_review/tests/suites/services/review/gateway/test_review_llm_gateway.py,sha256=m4HKvqDQYNesY5F2wuOMeHqXwQe99K4K_depdyTs37Q,2508
|
|
319
341
|
ai_review/tests/suites/services/review/internal/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
320
342
|
ai_review/tests/suites/services/review/internal/inline/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
321
343
|
ai_review/tests/suites/services/review/internal/inline/test_schema.py,sha256=2SGF8yNHsNv8lwG-MUlgO3RT4juTt0PQSl10qNhSt7o,2377
|
|
@@ -332,25 +354,28 @@ ai_review/tests/suites/services/review/internal/summary_reply/__init__.py,sha256
|
|
|
332
354
|
ai_review/tests/suites/services/review/internal/summary_reply/test_schema.py,sha256=_2kfcHjB-thIFTIhdDBR7PsEl8beIAu4FtEkQjb0Ljk,859
|
|
333
355
|
ai_review/tests/suites/services/review/internal/summary_reply/test_service.py,sha256=VlVr9wXXwmpp9qxy_4dMZnFHSZ12j2QSP_m58Vs_wXE,709
|
|
334
356
|
ai_review/tests/suites/services/review/runner/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
335
|
-
ai_review/tests/suites/services/review/runner/test_context.py,sha256=
|
|
336
|
-
ai_review/tests/suites/services/review/runner/test_inline.py,sha256=
|
|
337
|
-
ai_review/tests/suites/services/review/runner/test_inline_reply.py,sha256=
|
|
338
|
-
ai_review/tests/suites/services/review/runner/test_summary.py,sha256=
|
|
339
|
-
ai_review/tests/suites/services/review/runner/test_summary_reply.py,sha256=
|
|
357
|
+
ai_review/tests/suites/services/review/runner/test_context.py,sha256=tuOntcwvgnH89mlFXAnwmERPbw3AMk4NgZ6rnRmWA98,3978
|
|
358
|
+
ai_review/tests/suites/services/review/runner/test_inline.py,sha256=rnnfXqxeEYuzi7n3G9iscAfYst607LzovbtEwV6z0cQ,4681
|
|
359
|
+
ai_review/tests/suites/services/review/runner/test_inline_reply.py,sha256=Q3gsOdWvA1fYKRn-8BII19XAylAKK3B1i20xeP_Z1u4,4918
|
|
360
|
+
ai_review/tests/suites/services/review/runner/test_summary.py,sha256=VLIcKffScWSaxUztYHNLAsNUMGiJQWn7j_Le8Zcrizo,3974
|
|
361
|
+
ai_review/tests/suites/services/review/runner/test_summary_reply.py,sha256=UExBEkWh-EG0akVchgLdnnpcd7HFqEnDyMAVbFY_rtU,4576
|
|
340
362
|
ai_review/tests/suites/services/vcs/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
341
|
-
ai_review/tests/suites/services/vcs/test_factory.py,sha256=
|
|
363
|
+
ai_review/tests/suites/services/vcs/test_factory.py,sha256=C_Ht4-zdZrAxFkw0PJYCU6IncvkQnF_0tNhvh_52P4Q,1404
|
|
342
364
|
ai_review/tests/suites/services/vcs/bitbucket/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
343
365
|
ai_review/tests/suites/services/vcs/bitbucket/test_adapter.py,sha256=zOjAOxtSSN0le5_-3-vkucCnHZH0zIUer7ZAMUMo62A,3760
|
|
344
366
|
ai_review/tests/suites/services/vcs/bitbucket/test_client.py,sha256=oIlUdUBPgO2bfNyAsodUsAU7kRnETQVqmRJimRtEfBU,7846
|
|
367
|
+
ai_review/tests/suites/services/vcs/gitea/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
368
|
+
ai_review/tests/suites/services/vcs/gitea/test_adapter.py,sha256=7UPsbDQhn99obPZZ2fKnLE3_h9uoY_ujMD0WbHGAegY,1782
|
|
369
|
+
ai_review/tests/suites/services/vcs/gitea/test_client.py,sha256=ntk-ijRqEAUZ4IGXXerhQ9nCfj6Je6hMNB666uaklws,3307
|
|
345
370
|
ai_review/tests/suites/services/vcs/github/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
346
371
|
ai_review/tests/suites/services/vcs/github/test_adapter.py,sha256=bK4k532v_8kDiud5RI9OlGetWMiLP8NaW1vEfHvcHfQ,4893
|
|
347
372
|
ai_review/tests/suites/services/vcs/github/test_client.py,sha256=mNt1bA6aVU3REsJiU_tK1PokQxQTaCKun0tNBHuvIp8,8039
|
|
348
373
|
ai_review/tests/suites/services/vcs/gitlab/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
349
374
|
ai_review/tests/suites/services/vcs/gitlab/test_adapter.py,sha256=BYBP2g1AKF_jCSJYJj16pW7M_6PprwD9reYEpdw3StU,4340
|
|
350
375
|
ai_review/tests/suites/services/vcs/gitlab/test_client.py,sha256=dnI-YxYADmVF2GS9rp6-JPkcqsn4sN8Fjbe4MkeYMaE,8476
|
|
351
|
-
xai_review-0.
|
|
352
|
-
xai_review-0.
|
|
353
|
-
xai_review-0.
|
|
354
|
-
xai_review-0.
|
|
355
|
-
xai_review-0.
|
|
356
|
-
xai_review-0.
|
|
376
|
+
xai_review-0.31.0.dist-info/licenses/LICENSE,sha256=p-v8m7Kmz4KKc7PcvsGiGEmCw9AiSXY4_ylOPy_u--Y,11343
|
|
377
|
+
xai_review-0.31.0.dist-info/METADATA,sha256=yHKLyE_H6IOrbL2Sgje0LM-hcw0G4GLKm4pwwW2wtt4,12689
|
|
378
|
+
xai_review-0.31.0.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
|
|
379
|
+
xai_review-0.31.0.dist-info/entry_points.txt,sha256=JyC5URanMi5io5P_PXQf7H_I1OGIpk5cZQhaPQ0g4Zs,53
|
|
380
|
+
xai_review-0.31.0.dist-info/top_level.txt,sha256=sTsZbfzLoqvRZKdKa-BcxWvjlHdrpbeJ6DrGY0EuR0E,10
|
|
381
|
+
xai_review-0.31.0.dist-info/RECORD,,
|
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
import pytest
|
|
2
|
-
|
|
3
|
-
from ai_review.services.review.gateway.types import ReviewLLMGatewayProtocol
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
class FakeReviewLLMGateway(ReviewLLMGatewayProtocol):
|
|
7
|
-
def __init__(self):
|
|
8
|
-
self.calls: list[tuple[str, dict]] = []
|
|
9
|
-
|
|
10
|
-
async def ask(self, prompt: str, prompt_system: str) -> str:
|
|
11
|
-
self.calls.append(("ask", {"prompt": prompt, "prompt_system": prompt_system}))
|
|
12
|
-
return "FAKE_LLM_RESPONSE"
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
@pytest.fixture
|
|
16
|
-
def fake_review_llm_gateway() -> FakeReviewLLMGateway:
|
|
17
|
-
return FakeReviewLLMGateway()
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|