reviewloop 0.3.2__tar.gz → 0.3.4__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.
- {reviewloop-0.3.2 → reviewloop-0.3.4}/.claude/skills/reviewloop/SKILL.md +21 -6
- {reviewloop-0.3.2/src/reviewloop_cli/templates → reviewloop-0.3.4/.claude/skills/reviewloop}/scripts/review-comments.sh +5 -5
- {reviewloop-0.3.2/src/reviewloop_cli/templates → reviewloop-0.3.4/.claude/skills/reviewloop}/scripts/review-wait.sh +1 -1
- {reviewloop-0.3.2 → reviewloop-0.3.4}/.github/workflows/release.yml +4 -4
- {reviewloop-0.3.2 → reviewloop-0.3.4}/PKG-INFO +1 -1
- {reviewloop-0.3.2 → reviewloop-0.3.4}/pyproject.toml +1 -1
- {reviewloop-0.3.2 → reviewloop-0.3.4}/src/reviewloop_cli/templates/SKILL.md +21 -6
- {reviewloop-0.3.2/.claude/skills/reviewloop → reviewloop-0.3.4/src/reviewloop_cli/templates}/scripts/review-comments.sh +5 -5
- {reviewloop-0.3.2/.claude/skills/reviewloop → reviewloop-0.3.4/src/reviewloop_cli/templates}/scripts/review-wait.sh +1 -1
- {reviewloop-0.3.2 → reviewloop-0.3.4}/uv.lock +1 -1
- {reviewloop-0.3.2 → reviewloop-0.3.4}/.claude/commands/speckit.analyze.md +0 -0
- {reviewloop-0.3.2 → reviewloop-0.3.4}/.claude/commands/speckit.checklist.md +0 -0
- {reviewloop-0.3.2 → reviewloop-0.3.4}/.claude/commands/speckit.clarify.md +0 -0
- {reviewloop-0.3.2 → reviewloop-0.3.4}/.claude/commands/speckit.constitution.md +0 -0
- {reviewloop-0.3.2 → reviewloop-0.3.4}/.claude/commands/speckit.implement.md +0 -0
- {reviewloop-0.3.2 → reviewloop-0.3.4}/.claude/commands/speckit.plan.md +0 -0
- {reviewloop-0.3.2 → reviewloop-0.3.4}/.claude/commands/speckit.specify.md +0 -0
- {reviewloop-0.3.2 → reviewloop-0.3.4}/.claude/commands/speckit.tasks.md +0 -0
- {reviewloop-0.3.2 → reviewloop-0.3.4}/.claude/commands/speckit.taskstoissues.md +0 -0
- {reviewloop-0.3.2 → reviewloop-0.3.4}/.claude/settings.json +0 -0
- {reviewloop-0.3.2 → reviewloop-0.3.4}/.coderabbit.yaml +0 -0
- {reviewloop-0.3.2 → reviewloop-0.3.4}/.github/workflows/ci.yml +0 -0
- {reviewloop-0.3.2 → reviewloop-0.3.4}/.gitignore +0 -0
- {reviewloop-0.3.2 → reviewloop-0.3.4}/.specify/memory/constitution.md +0 -0
- {reviewloop-0.3.2 → reviewloop-0.3.4}/.specify/scripts/bash/check-prerequisites.sh +0 -0
- {reviewloop-0.3.2 → reviewloop-0.3.4}/.specify/scripts/bash/common.sh +0 -0
- {reviewloop-0.3.2 → reviewloop-0.3.4}/.specify/scripts/bash/create-new-feature.sh +0 -0
- {reviewloop-0.3.2 → reviewloop-0.3.4}/.specify/scripts/bash/setup-plan.sh +0 -0
- {reviewloop-0.3.2 → reviewloop-0.3.4}/.specify/scripts/bash/update-agent-context.sh +0 -0
- {reviewloop-0.3.2 → reviewloop-0.3.4}/.specify/templates/agent-file-template.md +0 -0
- {reviewloop-0.3.2 → reviewloop-0.3.4}/.specify/templates/checklist-template.md +0 -0
- {reviewloop-0.3.2 → reviewloop-0.3.4}/.specify/templates/plan-template.md +0 -0
- {reviewloop-0.3.2 → reviewloop-0.3.4}/.specify/templates/spec-template.md +0 -0
- {reviewloop-0.3.2 → reviewloop-0.3.4}/.specify/templates/tasks-template.md +0 -0
- {reviewloop-0.3.2 → reviewloop-0.3.4}/.vscode/extensions.json +0 -0
- {reviewloop-0.3.2 → reviewloop-0.3.4}/CLAUDE.md +0 -0
- {reviewloop-0.3.2 → reviewloop-0.3.4}/LICENSE +0 -0
- {reviewloop-0.3.2 → reviewloop-0.3.4}/README.md +0 -0
- {reviewloop-0.3.2 → reviewloop-0.3.4}/README_PYPI.md +0 -0
- {reviewloop-0.3.2 → reviewloop-0.3.4}/assets/review_loop.webp +0 -0
- {reviewloop-0.3.2 → reviewloop-0.3.4}/renovate.json +0 -0
- {reviewloop-0.3.2 → reviewloop-0.3.4}/src/reviewloop_cli/__init__.py +0 -0
- {reviewloop-0.3.2 → reviewloop-0.3.4}/src/reviewloop_cli/cli.py +0 -0
- {reviewloop-0.3.2 → reviewloop-0.3.4}/src/reviewloop_cli/init.py +0 -0
- {reviewloop-0.3.2 → reviewloop-0.3.4}/src/reviewloop_cli/py.typed +0 -0
- {reviewloop-0.3.2 → reviewloop-0.3.4}/src/reviewloop_cli/templates/__init__.py +0 -0
|
@@ -10,9 +10,20 @@ allowed-tools:
|
|
|
10
10
|
|
|
11
11
|
## Autonomous Review Loop
|
|
12
12
|
|
|
13
|
+
**CRITICAL: Never merge a PR unless the user explicitly asks you to.**
|
|
14
|
+
|
|
13
15
|
This is an automated review loop. Follow these steps:
|
|
14
16
|
|
|
15
|
-
### 1.
|
|
17
|
+
### 1. Prepare branch and PR
|
|
18
|
+
|
|
19
|
+
Before starting the review cycle, ensure all changes are committed, pushed, and a PR exists.
|
|
20
|
+
|
|
21
|
+
1. Verify you are NOT on the default branch. If on the default branch, inform the user and stop.
|
|
22
|
+
2. If there are uncommitted changes (staged or unstaged), commit them with a descriptive message. Skip if the working directory is clean.
|
|
23
|
+
3. Push commits to the remote. If no upstream tracking branch exists, push with the `-u` flag. Skip if already up-to-date.
|
|
24
|
+
4. Check if a PR exists for the current branch (`gh pr view`). If none exists, create one with `gh pr create --fill`.
|
|
25
|
+
|
|
26
|
+
### 2. Wait for CI to complete
|
|
16
27
|
|
|
17
28
|
Run `.claude/skills/reviewloop/scripts/review-wait.sh` to poll for CI completion.
|
|
18
29
|
|
|
@@ -21,7 +32,7 @@ Run `.claude/skills/reviewloop/scripts/review-wait.sh` to poll for CI completion
|
|
|
21
32
|
- Times out after 10 minutes (configurable with `--timeout=SECONDS`)
|
|
22
33
|
- Exits immediately if no CI is in progress
|
|
23
34
|
|
|
24
|
-
###
|
|
35
|
+
### 3. Fetch and address comments
|
|
25
36
|
|
|
26
37
|
Once CI completes:
|
|
27
38
|
|
|
@@ -32,14 +43,18 @@ Once CI completes:
|
|
|
32
43
|
5. For inline threads: resolve via the `gh api graphql` mutation shown in the file (whether addressed or rejected)
|
|
33
44
|
6. For general review comments: react with thumbs-up via the mutation shown in the file to mark as processed (even if no action was needed)
|
|
34
45
|
|
|
35
|
-
###
|
|
46
|
+
### 4. Verify and commit
|
|
36
47
|
|
|
37
48
|
1. Run `.claude/skills/reviewloop/scripts/review-comments.sh` again to verify no unresolved comments remain
|
|
38
49
|
2. Run your project's linting and type-checking commands to ensure code quality
|
|
39
50
|
3. Commit and push changes
|
|
40
51
|
|
|
41
|
-
###
|
|
52
|
+
### 5. Loop
|
|
53
|
+
|
|
54
|
+
Go back to step 2 - wait for the next review triggered by the push.
|
|
42
55
|
|
|
43
|
-
|
|
56
|
+
**Exit condition**: When `.claude/skills/reviewloop/scripts/review-comments.sh` shows no comments, provide a summary with:
|
|
44
57
|
|
|
45
|
-
**
|
|
58
|
+
1. **PR link**: The full clickable URL of the PR (from step 1 or via `gh pr view --json url -q '.url'`)
|
|
59
|
+
2. **Overall PR summary**: A brief high-level summary of what the PR accomplishes overall
|
|
60
|
+
3. **Review loop changes**: A summary of what was specifically changed during the review loop to address reviewer comments. If no changes were made during the review loop, state that no changes were needed.
|
|
@@ -26,7 +26,7 @@ get_repo_info() {
|
|
|
26
26
|
}
|
|
27
27
|
|
|
28
28
|
get_current_user() {
|
|
29
|
-
gh api user -q '.login' 2>&1 || die "Failed to get current user"
|
|
29
|
+
gh api user -q '.login' 2>&1 | tr -d '\r' || die "Failed to get current user"
|
|
30
30
|
}
|
|
31
31
|
|
|
32
32
|
run_graphql() {
|
|
@@ -63,8 +63,8 @@ main() {
|
|
|
63
63
|
|
|
64
64
|
local repo_info owner repo pr_number current_user
|
|
65
65
|
repo_info=$(get_repo_info)
|
|
66
|
-
owner=$(echo "$repo_info" | jq -r '.owner.login')
|
|
67
|
-
repo=$(echo "$repo_info" | jq -r '.name')
|
|
66
|
+
owner=$(echo "$repo_info" | jq -r '.owner.login' | tr -d '\r')
|
|
67
|
+
repo=$(echo "$repo_info" | jq -r '.name' | tr -d '\r')
|
|
68
68
|
pr_number=$(get_pr_number)
|
|
69
69
|
current_user=$(get_current_user)
|
|
70
70
|
|
|
@@ -135,7 +135,7 @@ EOF
|
|
|
135
135
|
while IFS= read -r thread; do
|
|
136
136
|
print_thread "$thread" "$is_first"
|
|
137
137
|
is_first=false
|
|
138
|
-
done < <(echo "$unresolved_threads" | jq -c '.[]')
|
|
138
|
+
done < <(echo "$unresolved_threads" | jq -c '.[]' | tr -d '\r')
|
|
139
139
|
fi
|
|
140
140
|
|
|
141
141
|
if [[ "$review_count" -gt 0 ]]; then
|
|
@@ -149,7 +149,7 @@ EOF
|
|
|
149
149
|
while IFS= read -r review; do
|
|
150
150
|
print_review "$review" "$is_first"
|
|
151
151
|
is_first=false
|
|
152
|
-
done < <(echo "$review_bodies" | jq -c '.[]')
|
|
152
|
+
done < <(echo "$review_bodies" | jq -c '.[]' | tr -d '\r')
|
|
153
153
|
fi
|
|
154
154
|
} > .reviews/prComments.md
|
|
155
155
|
|
|
@@ -32,7 +32,7 @@ get_ci_state() {
|
|
|
32
32
|
checks_json=$(gh pr checks "$pr_number" --json name,state 2>&1) || die "Failed to fetch PR checks: $checks_json"
|
|
33
33
|
|
|
34
34
|
# Get all check states
|
|
35
|
-
states=$(echo "$checks_json" | jq -r '[.[] | .state] | if length == 0 then "" else .[] end' 2>/dev/null)
|
|
35
|
+
states=$(echo "$checks_json" | jq -r '[.[] | .state] | if length == 0 then "" else .[] end' 2>/dev/null | tr -d '\r')
|
|
36
36
|
|
|
37
37
|
[[ -z "$states" ]] && return
|
|
38
38
|
|
|
@@ -38,7 +38,7 @@ jobs:
|
|
|
38
38
|
python -c "from importlib.metadata import version; print(version('reviewloop'))"
|
|
39
39
|
|
|
40
40
|
- name: Store distributions
|
|
41
|
-
uses: actions/upload-artifact@
|
|
41
|
+
uses: actions/upload-artifact@v6
|
|
42
42
|
with:
|
|
43
43
|
name: python-package-distributions
|
|
44
44
|
path: dist/
|
|
@@ -55,7 +55,7 @@ jobs:
|
|
|
55
55
|
actions: read
|
|
56
56
|
steps:
|
|
57
57
|
- name: Download distributions
|
|
58
|
-
uses: actions/download-artifact@
|
|
58
|
+
uses: actions/download-artifact@v7
|
|
59
59
|
with:
|
|
60
60
|
name: python-package-distributions
|
|
61
61
|
path: dist/
|
|
@@ -78,7 +78,7 @@ jobs:
|
|
|
78
78
|
actions: read
|
|
79
79
|
steps:
|
|
80
80
|
- name: Download distributions
|
|
81
|
-
uses: actions/download-artifact@
|
|
81
|
+
uses: actions/download-artifact@v7
|
|
82
82
|
with:
|
|
83
83
|
name: python-package-distributions
|
|
84
84
|
path: dist/
|
|
@@ -100,7 +100,7 @@ jobs:
|
|
|
100
100
|
- uses: actions/checkout@v6
|
|
101
101
|
|
|
102
102
|
- name: Download distributions
|
|
103
|
-
uses: actions/download-artifact@
|
|
103
|
+
uses: actions/download-artifact@v7
|
|
104
104
|
with:
|
|
105
105
|
name: python-package-distributions
|
|
106
106
|
path: dist/
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: reviewloop
|
|
3
|
-
Version: 0.3.
|
|
3
|
+
Version: 0.3.4
|
|
4
4
|
Summary: Autonomous review loop - automates the review-fix-push cycle
|
|
5
5
|
Project-URL: Homepage, https://github.com/fabianboth/autonomous-review-loop
|
|
6
6
|
Project-URL: Repository, https://github.com/fabianboth/autonomous-review-loop.git
|
|
@@ -10,9 +10,20 @@ allowed-tools:
|
|
|
10
10
|
|
|
11
11
|
## Autonomous Review Loop
|
|
12
12
|
|
|
13
|
+
**CRITICAL: Never merge a PR unless the user explicitly asks you to.**
|
|
14
|
+
|
|
13
15
|
This is an automated review loop. Follow these steps:
|
|
14
16
|
|
|
15
|
-
### 1.
|
|
17
|
+
### 1. Prepare branch and PR
|
|
18
|
+
|
|
19
|
+
Before starting the review cycle, ensure all changes are committed, pushed, and a PR exists.
|
|
20
|
+
|
|
21
|
+
1. Verify you are NOT on the default branch. If on the default branch, inform the user and stop.
|
|
22
|
+
2. If there are uncommitted changes (staged or unstaged), commit them with a descriptive message. Skip if the working directory is clean.
|
|
23
|
+
3. Push commits to the remote. If no upstream tracking branch exists, push with the `-u` flag. Skip if already up-to-date.
|
|
24
|
+
4. Check if a PR exists for the current branch (`gh pr view`). If none exists, create one with `gh pr create --fill`.
|
|
25
|
+
|
|
26
|
+
### 2. Wait for CI to complete
|
|
16
27
|
|
|
17
28
|
Run `.claude/skills/reviewloop/scripts/review-wait.sh` to poll for CI completion.
|
|
18
29
|
|
|
@@ -21,7 +32,7 @@ Run `.claude/skills/reviewloop/scripts/review-wait.sh` to poll for CI completion
|
|
|
21
32
|
- Times out after 10 minutes (configurable with `--timeout=SECONDS`)
|
|
22
33
|
- Exits immediately if no CI is in progress
|
|
23
34
|
|
|
24
|
-
###
|
|
35
|
+
### 3. Fetch and address comments
|
|
25
36
|
|
|
26
37
|
Once CI completes:
|
|
27
38
|
|
|
@@ -32,14 +43,18 @@ Once CI completes:
|
|
|
32
43
|
5. For inline threads: resolve via the `gh api graphql` mutation shown in the file (whether addressed or rejected)
|
|
33
44
|
6. For general review comments: react with thumbs-up via the mutation shown in the file to mark as processed (even if no action was needed)
|
|
34
45
|
|
|
35
|
-
###
|
|
46
|
+
### 4. Verify and commit
|
|
36
47
|
|
|
37
48
|
1. Run `.claude/skills/reviewloop/scripts/review-comments.sh` again to verify no unresolved comments remain
|
|
38
49
|
2. Run your project's linting and type-checking commands to ensure code quality
|
|
39
50
|
3. Commit and push changes
|
|
40
51
|
|
|
41
|
-
###
|
|
52
|
+
### 5. Loop
|
|
53
|
+
|
|
54
|
+
Go back to step 2 - wait for the next review triggered by the push.
|
|
42
55
|
|
|
43
|
-
|
|
56
|
+
**Exit condition**: When `.claude/skills/reviewloop/scripts/review-comments.sh` shows no comments, provide a summary with:
|
|
44
57
|
|
|
45
|
-
**
|
|
58
|
+
1. **PR link**: The full clickable URL of the PR (from step 1 or via `gh pr view --json url -q '.url'`)
|
|
59
|
+
2. **Overall PR summary**: A brief high-level summary of what the PR accomplishes overall
|
|
60
|
+
3. **Review loop changes**: A summary of what was specifically changed during the review loop to address reviewer comments. If no changes were made during the review loop, state that no changes were needed.
|
|
@@ -26,7 +26,7 @@ get_repo_info() {
|
|
|
26
26
|
}
|
|
27
27
|
|
|
28
28
|
get_current_user() {
|
|
29
|
-
gh api user -q '.login' 2>&1 || die "Failed to get current user"
|
|
29
|
+
gh api user -q '.login' 2>&1 | tr -d '\r' || die "Failed to get current user"
|
|
30
30
|
}
|
|
31
31
|
|
|
32
32
|
run_graphql() {
|
|
@@ -63,8 +63,8 @@ main() {
|
|
|
63
63
|
|
|
64
64
|
local repo_info owner repo pr_number current_user
|
|
65
65
|
repo_info=$(get_repo_info)
|
|
66
|
-
owner=$(echo "$repo_info" | jq -r '.owner.login')
|
|
67
|
-
repo=$(echo "$repo_info" | jq -r '.name')
|
|
66
|
+
owner=$(echo "$repo_info" | jq -r '.owner.login' | tr -d '\r')
|
|
67
|
+
repo=$(echo "$repo_info" | jq -r '.name' | tr -d '\r')
|
|
68
68
|
pr_number=$(get_pr_number)
|
|
69
69
|
current_user=$(get_current_user)
|
|
70
70
|
|
|
@@ -135,7 +135,7 @@ EOF
|
|
|
135
135
|
while IFS= read -r thread; do
|
|
136
136
|
print_thread "$thread" "$is_first"
|
|
137
137
|
is_first=false
|
|
138
|
-
done < <(echo "$unresolved_threads" | jq -c '.[]')
|
|
138
|
+
done < <(echo "$unresolved_threads" | jq -c '.[]' | tr -d '\r')
|
|
139
139
|
fi
|
|
140
140
|
|
|
141
141
|
if [[ "$review_count" -gt 0 ]]; then
|
|
@@ -149,7 +149,7 @@ EOF
|
|
|
149
149
|
while IFS= read -r review; do
|
|
150
150
|
print_review "$review" "$is_first"
|
|
151
151
|
is_first=false
|
|
152
|
-
done < <(echo "$review_bodies" | jq -c '.[]')
|
|
152
|
+
done < <(echo "$review_bodies" | jq -c '.[]' | tr -d '\r')
|
|
153
153
|
fi
|
|
154
154
|
} > .reviews/prComments.md
|
|
155
155
|
|
|
@@ -32,7 +32,7 @@ get_ci_state() {
|
|
|
32
32
|
checks_json=$(gh pr checks "$pr_number" --json name,state 2>&1) || die "Failed to fetch PR checks: $checks_json"
|
|
33
33
|
|
|
34
34
|
# Get all check states
|
|
35
|
-
states=$(echo "$checks_json" | jq -r '[.[] | .state] | if length == 0 then "" else .[] end' 2>/dev/null)
|
|
35
|
+
states=$(echo "$checks_json" | jq -r '[.[] | .state] | if length == 0 then "" else .[] end' 2>/dev/null | tr -d '\r')
|
|
36
36
|
|
|
37
37
|
[[ -z "$states" ]] && return
|
|
38
38
|
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|