refactor(clarity-assist): extract skills from commands
Extract shared knowledge from clarify.md and quick-clarify.md into reusable skill files: - 4d-methodology.md: Core 4-phase clarification process - nd-accommodations.md: Neurodivergent-friendly question patterns - clarification-techniques.md: Anti-patterns and question templates - escalation-patterns.md: Mode switching guidelines Commands slimmed from 149/96 lines to 44/49 lines respectively. Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
80
plugins/pr-review/skills/mcp-tools-reference.md
Normal file
80
plugins/pr-review/skills/mcp-tools-reference.md
Normal file
@@ -0,0 +1,80 @@
|
||||
# MCP Tools Reference - Gitea PR Operations
|
||||
|
||||
## Available Tools
|
||||
|
||||
Use `ToolSearch` to load these tools before use.
|
||||
|
||||
### Pull Request Tools
|
||||
|
||||
| Tool | Purpose |
|
||||
|------|---------|
|
||||
| `mcp__gitea__list_pull_requests` | List PRs (open, closed, all) |
|
||||
| `mcp__gitea__get_pull_request` | Get PR metadata, status, labels |
|
||||
| `mcp__gitea__get_pr_diff` | Get unified diff of changes |
|
||||
| `mcp__gitea__get_pr_comments` | Get review comments and discussions |
|
||||
| `mcp__gitea__create_pr_review` | Submit review (approve, comment, request changes) |
|
||||
| `mcp__gitea__add_pr_comment` | Add single comment to PR |
|
||||
| `mcp__gitea__create_pull_request` | Create new PR |
|
||||
|
||||
### Supporting Tools
|
||||
|
||||
| Tool | Purpose |
|
||||
|------|---------|
|
||||
| `mcp__gitea__get_issue` | Get linked issue details |
|
||||
| `mcp__gitea__get_labels` | Get available labels |
|
||||
| `mcp__gitea__validate_repo_org` | Validate repository exists |
|
||||
|
||||
## Loading Tools
|
||||
|
||||
Before using MCP tools, load them:
|
||||
|
||||
```
|
||||
Use ToolSearch with query: "+gitea pull_request"
|
||||
```
|
||||
|
||||
## Common Operations
|
||||
|
||||
### Fetch PR for Review
|
||||
|
||||
```
|
||||
1. get_pull_request(pr_number) -> metadata
|
||||
2. get_pr_diff(pr_number) -> code changes
|
||||
3. get_pr_comments(pr_number) -> existing feedback
|
||||
```
|
||||
|
||||
### Submit Review
|
||||
|
||||
```
|
||||
create_pr_review:
|
||||
pr_number: number
|
||||
body: string (review summary)
|
||||
event: "APPROVE" | "COMMENT" | "REQUEST_CHANGES"
|
||||
comments: [{path, line, body}] (optional inline comments)
|
||||
```
|
||||
|
||||
### Add Comment
|
||||
|
||||
```
|
||||
add_pr_comment:
|
||||
pr_number: number
|
||||
body: string
|
||||
```
|
||||
|
||||
## Environment Variables
|
||||
|
||||
Required in `.env`:
|
||||
- `GITEA_ORG` - Organization/owner name
|
||||
- `GITEA_REPO` - Repository name
|
||||
|
||||
Required in `~/.config/claude/gitea.env`:
|
||||
- `GITEA_API_URL` - Gitea server URL
|
||||
- `GITEA_API_TOKEN` - API token with repo permissions
|
||||
|
||||
## Error Handling
|
||||
|
||||
| Error | Cause | Resolution |
|
||||
|-------|-------|------------|
|
||||
| Tool not found | MCP not loaded | Run ToolSearch first |
|
||||
| 401 Unauthorized | Invalid/expired token | Regenerate token |
|
||||
| 404 Not Found | Wrong org/repo or PR doesn't exist | Check .env settings |
|
||||
| 403 Forbidden | Insufficient permissions | Check token scopes |
|
||||
200
plugins/pr-review/skills/output-formats.md
Normal file
200
plugins/pr-review/skills/output-formats.md
Normal file
@@ -0,0 +1,200 @@
|
||||
# Output Formats
|
||||
|
||||
## Visual Header
|
||||
|
||||
All commands display this header:
|
||||
|
||||
```
|
||||
+----------------------------------------------------------------------+
|
||||
| PR-REVIEW [Command Name] |
|
||||
+----------------------------------------------------------------------+
|
||||
```
|
||||
|
||||
## Review Report Format
|
||||
|
||||
```
|
||||
===================================================
|
||||
PR Review Report: #<number>
|
||||
===================================================
|
||||
|
||||
Summary:
|
||||
Files changed: <n>
|
||||
Lines: +<added> / -<removed>
|
||||
Agents consulted: <list>
|
||||
|
||||
Findings: <total>
|
||||
Critical: <n>
|
||||
Major: <n>
|
||||
Minor: <n>
|
||||
Suggestions: <n>
|
||||
|
||||
---------------------------------------------------
|
||||
CRITICAL FINDINGS
|
||||
---------------------------------------------------
|
||||
|
||||
[<ID>] <Title> (Confidence: <score>)
|
||||
File: <path>:<line>
|
||||
Category: <category>
|
||||
|
||||
<Description>
|
||||
|
||||
Suggested fix:
|
||||
<code block>
|
||||
|
||||
---------------------------------------------------
|
||||
VERDICT: <APPROVE|COMMENT|REQUEST_CHANGES>
|
||||
---------------------------------------------------
|
||||
|
||||
<Justification>
|
||||
```
|
||||
|
||||
## Summary Format
|
||||
|
||||
```
|
||||
===================================================
|
||||
PR Summary: #<number> - <title>
|
||||
===================================================
|
||||
|
||||
Author: @<username>
|
||||
Branch: <head> -> <base>
|
||||
Status: <status>
|
||||
|
||||
---------------------------------------------------
|
||||
CHANGES OVERVIEW
|
||||
---------------------------------------------------
|
||||
|
||||
Files: <n> changed
|
||||
+ <n> new files
|
||||
~ <n> modified files
|
||||
- <n> deleted files
|
||||
|
||||
Lines: +<added> / -<removed> (net +<diff>)
|
||||
|
||||
---------------------------------------------------
|
||||
WHAT THIS PR DOES
|
||||
---------------------------------------------------
|
||||
|
||||
<Plain-language description>
|
||||
|
||||
---------------------------------------------------
|
||||
KEY FILES
|
||||
---------------------------------------------------
|
||||
|
||||
* <path> (+<lines>) - <description>
|
||||
|
||||
---------------------------------------------------
|
||||
QUICK ASSESSMENT
|
||||
---------------------------------------------------
|
||||
|
||||
Scope: <Small|Medium|Large>
|
||||
Risk: <Low|Medium|High>
|
||||
Recommendation: <action>
|
||||
===================================================
|
||||
```
|
||||
|
||||
## Findings List Format
|
||||
|
||||
### Detailed (default)
|
||||
|
||||
```
|
||||
===================================================
|
||||
PR #<number> Findings (filtered: <filter>)
|
||||
===================================================
|
||||
|
||||
Showing <n> of <total> findings
|
||||
|
||||
---------------------------------------------------
|
||||
|
||||
[<ID>] <Title>
|
||||
Confidence: <score> (<label>) | Severity: <level>
|
||||
File: <path>:<line>
|
||||
|
||||
<Description>
|
||||
|
||||
Fix: <suggestion>
|
||||
|
||||
---------------------------------------------------
|
||||
```
|
||||
|
||||
### Compact (--compact)
|
||||
|
||||
```
|
||||
<ID> | <Severity> | <Confidence> | <File>:<Line> | <Title>
|
||||
```
|
||||
|
||||
### JSON (--json)
|
||||
|
||||
```json
|
||||
{
|
||||
"pr": <number>,
|
||||
"findings": [
|
||||
{
|
||||
"id": "<ID>",
|
||||
"category": "<category>",
|
||||
"severity": "<severity>",
|
||||
"confidence": <score>,
|
||||
"file": "<path>",
|
||||
"line": <number>,
|
||||
"title": "<title>",
|
||||
"description": "<description>",
|
||||
"fix": "<suggestion>"
|
||||
}
|
||||
]
|
||||
}
|
||||
```
|
||||
|
||||
## Setup Complete Format
|
||||
|
||||
```
|
||||
+============================================================+
|
||||
| PR-REVIEW SETUP COMPLETE |
|
||||
+============================================================+
|
||||
| MCP Server (Gitea): Ready |
|
||||
| System Config: ~/.config/claude/gitea.env |
|
||||
| Project Config: ./.env |
|
||||
+============================================================+
|
||||
```
|
||||
|
||||
## Project Configured Format
|
||||
|
||||
```
|
||||
+============================================================+
|
||||
| PROJECT CONFIGURED |
|
||||
+============================================================+
|
||||
| Organization: <org> |
|
||||
| Repository: <repo> |
|
||||
| Config file: ./.env |
|
||||
+============================================================+
|
||||
|
||||
Ready to review PRs:
|
||||
- /pr-review <number> Full multi-agent review
|
||||
- /pr-summary <number> Quick summary
|
||||
- /pr-findings <number> List findings
|
||||
```
|
||||
|
||||
## Annotated Diff Format
|
||||
|
||||
```
|
||||
===================================================
|
||||
PR #<number> Diff - <title>
|
||||
===================================================
|
||||
|
||||
Branch: <head> -> <base>
|
||||
Files: <n> changed (+<added> / -<removed>)
|
||||
|
||||
---------------------------------------------------
|
||||
<file> (+<added> / -<removed>)
|
||||
---------------------------------------------------
|
||||
|
||||
@@ -<old>,<ctx> +<new>,<ctx> @@ <context>
|
||||
<line> | existing code
|
||||
<line> |- removed code
|
||||
| +--- COMMENT by @<user> (<time>) ---
|
||||
| | <comment text>
|
||||
| +-----------------------------------
|
||||
<line> |+ added code
|
||||
|
||||
===================================================
|
||||
Comment Summary: <n> comments, <n> resolved
|
||||
===================================================
|
||||
```
|
||||
135
plugins/pr-review/skills/pr-analysis.md
Normal file
135
plugins/pr-review/skills/pr-analysis.md
Normal file
@@ -0,0 +1,135 @@
|
||||
# PR Analysis Patterns
|
||||
|
||||
## Data Collection
|
||||
|
||||
### Step 1: Fetch PR Metadata
|
||||
|
||||
```
|
||||
get_pull_request(pr_number) returns:
|
||||
- title, description
|
||||
- author, assignees
|
||||
- base/head branches
|
||||
- status (open, closed, merged)
|
||||
- labels, milestone
|
||||
- created_at, updated_at
|
||||
```
|
||||
|
||||
### Step 2: Get Code Changes
|
||||
|
||||
```
|
||||
get_pr_diff(pr_number) returns:
|
||||
- Unified diff format
|
||||
- File paths with +/- indicators
|
||||
- Hunk headers with line numbers
|
||||
```
|
||||
|
||||
### Step 3: Get Existing Feedback
|
||||
|
||||
```
|
||||
get_pr_comments(pr_number) returns:
|
||||
- Review comments with file/line
|
||||
- General comments
|
||||
- Author, timestamp
|
||||
- Thread context (replies)
|
||||
```
|
||||
|
||||
## Change Analysis
|
||||
|
||||
### Categorize Changes
|
||||
|
||||
| Pattern | Category |
|
||||
|---------|----------|
|
||||
| New files only | Feature addition |
|
||||
| Modified test files | Test updates |
|
||||
| Modified + deleted | Refactoring |
|
||||
| Single file fix | Bug fix |
|
||||
| Config/docs only | Infrastructure |
|
||||
|
||||
### Calculate Statistics
|
||||
|
||||
- Files changed count
|
||||
- Lines added/removed
|
||||
- Net change (+added - removed)
|
||||
- New vs modified vs deleted files
|
||||
|
||||
### Identify Key Files
|
||||
|
||||
Priority order:
|
||||
1. Security-sensitive (`auth`, `crypto`, `sql`)
|
||||
2. API endpoints
|
||||
3. Database migrations
|
||||
4. Core business logic
|
||||
5. Utilities and helpers
|
||||
6. Tests
|
||||
7. Documentation
|
||||
|
||||
## Risk Assessment
|
||||
|
||||
### Scope Assessment
|
||||
|
||||
| Files Changed | Lines Changed | Scope |
|
||||
|---------------|---------------|-------|
|
||||
| 1-3 | < 50 | Small |
|
||||
| 4-10 | 50-200 | Medium |
|
||||
| 10+ | 200+ | Large |
|
||||
|
||||
### Risk Indicators
|
||||
|
||||
| Indicator | Risk Level |
|
||||
|-----------|------------|
|
||||
| Security-sensitive files | High |
|
||||
| Database migrations | High |
|
||||
| API changes | Medium |
|
||||
| New dependencies | Medium |
|
||||
| Test-only changes | Low |
|
||||
| Docs-only changes | Low |
|
||||
|
||||
## Summary Generation
|
||||
|
||||
### Quick Summary Template
|
||||
|
||||
```
|
||||
This PR [adds|updates|fixes|removes] [feature/component]:
|
||||
|
||||
1. **[Category 1]**
|
||||
- Change description
|
||||
|
||||
2. **[Category 2]**
|
||||
- Change description
|
||||
|
||||
Key files:
|
||||
- path/to/important/file.ts (+lines)
|
||||
```
|
||||
|
||||
### Assessment Template
|
||||
|
||||
```
|
||||
Scope: [Small|Medium|Large]
|
||||
Risk: [Low|Medium|High]
|
||||
Recommendation: [/pr-review suggested | Looks good to merge]
|
||||
```
|
||||
|
||||
## Annotated Diff Display
|
||||
|
||||
### Format
|
||||
|
||||
```
|
||||
File: src/api/users.ts (+85 / -12)
|
||||
----------------------------------------
|
||||
|
||||
@@ -42,6 +42,15 @@ function description
|
||||
42 | existing line
|
||||
43 |
|
||||
44 |- removed line
|
||||
| [COMMENT by @user (time ago)]
|
||||
| Comment text here
|
||||
45 |+ added line
|
||||
46 |+ another added line
|
||||
```
|
||||
|
||||
### Comment Overlay
|
||||
|
||||
Position comments at their file/line locations:
|
||||
- Show commenter username and time
|
||||
- Include reply threads
|
||||
- Mark resolved vs open
|
||||
78
plugins/pr-review/skills/review-workflow.md
Normal file
78
plugins/pr-review/skills/review-workflow.md
Normal file
@@ -0,0 +1,78 @@
|
||||
# Multi-Agent Review Workflow
|
||||
|
||||
## Overview
|
||||
|
||||
PR reviews use specialized agents that analyze different aspects of code changes. The coordinator dispatches to relevant agents and aggregates findings.
|
||||
|
||||
## Agent Roles
|
||||
|
||||
| Agent | Focus Area | File Patterns |
|
||||
|-------|------------|---------------|
|
||||
| **Security Reviewer** | Vulnerabilities, auth, injection | `*.ts`, `*.js`, `*.sql`, `*.py` |
|
||||
| **Performance Analyst** | N+1, inefficient algorithms, memory | `*.ts`, `*.js`, `*.py`, `*.go` |
|
||||
| **Maintainability Auditor** | Complexity, readability, DRY | All code files |
|
||||
| **Test Validator** | Coverage, edge cases, assertions | `*.test.*`, `*_test.*`, `*_spec.*` |
|
||||
|
||||
## Dispatch Logic
|
||||
|
||||
1. **Analyze changed files** - Identify file types and patterns
|
||||
2. **Select agents** - Match files to relevant agents
|
||||
3. **Parallel dispatch** - Send review tasks to agents
|
||||
4. **Collect findings** - Aggregate results from all agents
|
||||
5. **Filter by confidence** - Apply threshold (default: 0.7)
|
||||
6. **Generate report** - Structure findings by severity
|
||||
|
||||
### Skip Patterns
|
||||
|
||||
Don't dispatch agents for:
|
||||
- `*.md`, `*.txt` - Documentation only
|
||||
- `*.json` (config) - Unless security-sensitive
|
||||
- Generated files - `*.min.js`, `*.d.ts`, etc.
|
||||
|
||||
## Finding Structure
|
||||
|
||||
Each finding includes:
|
||||
|
||||
```
|
||||
{
|
||||
id: "SEC-001",
|
||||
category: "security" | "performance" | "maintainability" | "tests",
|
||||
severity: "critical" | "major" | "minor" | "suggestion",
|
||||
confidence: 0.0 - 1.0,
|
||||
file: "src/api/users.ts",
|
||||
line: 45,
|
||||
title: "SQL Injection Vulnerability",
|
||||
description: "Detailed explanation...",
|
||||
fix: "Suggested code fix..." (optional)
|
||||
}
|
||||
```
|
||||
|
||||
## Verdict Logic
|
||||
|
||||
| Condition | Verdict |
|
||||
|-----------|---------|
|
||||
| Any critical finding | REQUEST_CHANGES |
|
||||
| 2+ major findings | REQUEST_CHANGES |
|
||||
| Only minor/suggestions | COMMENT |
|
||||
| No significant findings | APPROVE |
|
||||
|
||||
## Confidence Thresholds
|
||||
|
||||
Reference: `skills/review-patterns/confidence-scoring.md`
|
||||
|
||||
| Range | Label | Action |
|
||||
|-------|-------|--------|
|
||||
| 0.9 - 1.0 | HIGH | Must address |
|
||||
| 0.7 - 0.89 | MEDIUM | Should address |
|
||||
| 0.5 - 0.69 | LOW | Consider addressing |
|
||||
| < threshold | Filtered | Not shown |
|
||||
|
||||
Default threshold: 0.7 (MEDIUM and above)
|
||||
|
||||
## Aggregation Rules
|
||||
|
||||
When multiple agents find the same issue:
|
||||
1. Keep highest confidence score
|
||||
2. Merge descriptions
|
||||
3. Use most severe category
|
||||
4. Deduplicate fixes
|
||||
104
plugins/pr-review/skills/setup-workflow.md
Normal file
104
plugins/pr-review/skills/setup-workflow.md
Normal file
@@ -0,0 +1,104 @@
|
||||
# Setup Workflow
|
||||
|
||||
## Configuration Hierarchy
|
||||
|
||||
| Level | Location | Contents |
|
||||
|-------|----------|----------|
|
||||
| System | `~/.config/claude/gitea.env` | API URL, token (shared across projects) |
|
||||
| Project | `.env` in project root | Org, repo name (per project) |
|
||||
|
||||
## System Configuration
|
||||
|
||||
### Check Existing
|
||||
|
||||
```bash
|
||||
cat ~/.config/claude/gitea.env 2>/dev/null | grep -v "^#" | grep "GITEA_API_TOKEN=" && echo "OK" || echo "MISSING"
|
||||
```
|
||||
|
||||
### Create New
|
||||
|
||||
```bash
|
||||
mkdir -p ~/.config/claude
|
||||
cat > ~/.config/claude/gitea.env << 'EOF'
|
||||
# Gitea API Configuration
|
||||
GITEA_API_URL=https://your-gitea-server.com
|
||||
GITEA_API_TOKEN=PASTE_YOUR_TOKEN_HERE
|
||||
EOF
|
||||
chmod 600 ~/.config/claude/gitea.env
|
||||
```
|
||||
|
||||
### Token Generation
|
||||
|
||||
1. Gitea: Settings > Applications > Generate New Token
|
||||
2. Required scopes: `repo`, `read:org`, `read:user`
|
||||
|
||||
## Project Configuration
|
||||
|
||||
### Auto-Detect from Git Remote
|
||||
|
||||
Extract organization:
|
||||
```bash
|
||||
git remote get-url origin 2>/dev/null | sed 's/.*[:/]\([^/]*\)\/[^/]*$/\1/'
|
||||
```
|
||||
|
||||
Extract repository:
|
||||
```bash
|
||||
git remote get-url origin 2>/dev/null | sed 's/.*[:/]\([^/]*\)\.git$/\1/' | sed 's/.*\/\([^/]*\)$/\1/'
|
||||
```
|
||||
|
||||
### Validate via API
|
||||
|
||||
```bash
|
||||
source ~/.config/claude/gitea.env
|
||||
curl -s -o /dev/null -w "%{http_code}" -H "Authorization: token $GITEA_API_TOKEN" "$GITEA_API_URL/repos/<org>/<repo>"
|
||||
```
|
||||
|
||||
| Code | Meaning |
|
||||
|------|---------|
|
||||
| 200 | Repository verified |
|
||||
| 404 | Not found - check org/repo names |
|
||||
| 401/403 | Auth issue - check token |
|
||||
|
||||
### Create/Update .env
|
||||
|
||||
```bash
|
||||
# New file
|
||||
cat > .env << EOF
|
||||
GITEA_ORG=<org>
|
||||
GITEA_REPO=<repo>
|
||||
EOF
|
||||
|
||||
# Or append to existing
|
||||
echo "GITEA_ORG=<org>" >> .env
|
||||
echo "GITEA_REPO=<repo>" >> .env
|
||||
```
|
||||
|
||||
## PR Review Settings (Optional)
|
||||
|
||||
| Variable | Default | Description |
|
||||
|----------|---------|-------------|
|
||||
| `PR_REVIEW_CONFIDENCE_THRESHOLD` | `0.7` | Minimum confidence to report |
|
||||
| `PR_REVIEW_AUTO_SUBMIT` | `false` | Auto-submit reviews to Gitea |
|
||||
|
||||
## Sync Workflow
|
||||
|
||||
When git remote changes:
|
||||
|
||||
1. Detect new org/repo from git remote
|
||||
2. Compare with .env values
|
||||
3. Validate new values via API
|
||||
4. Update .env with sed:
|
||||
|
||||
```bash
|
||||
sed -i 's/^GITEA_ORG=.*/GITEA_ORG=<new_org>/' .env
|
||||
sed -i 's/^GITEA_REPO=.*/GITEA_REPO=<new_repo>/' .env
|
||||
```
|
||||
|
||||
## Shared with projman
|
||||
|
||||
The Gitea MCP server is shared with the projman plugin. If projman is already configured, system-level setup can be skipped.
|
||||
|
||||
Check for projman:
|
||||
```bash
|
||||
find ~/.claude ~/.config/claude -name "projman" -type d 2>/dev/null | head -1
|
||||
```
|
||||
Reference in New Issue
Block a user