Initial commit

This commit is contained in:
Zhongwei Li
2025-11-29 18:20:25 +08:00
commit 0d6226e0d8
69 changed files with 20934 additions and 0 deletions

View File

@@ -0,0 +1,309 @@
---
description: Compose commit message body with bullet points and proper formatting
---
# Operation: Write Commit Body
Compose a well-formatted commit message body with bullet points, proper wrapping, and clear explanation of changes.
## Parameters from $ARGUMENTS
**Required:**
- `changes:` - Comma-separated list of changes or file paths
**Optional:**
- `wrap:` - Line wrap length (default: 72)
- `format:` - Output format (bullets|paragraphs, default: bullets)
- `why:` - Additional context about why changes were made
**Format:** `body changes:"Change 1,Change 2,Change 3" [why:"explanation"]`
## Workflow
### Step 1: Parse Parameters
Extract parameters from $ARGUMENTS:
```bash
# Parse changes (supports both quoted and comma-separated)
changes=$(echo "$ARGUMENTS" | grep -oP 'changes:"\K[^"]+' || echo "$ARGUMENTS" | grep -oP 'changes:\K[^,]+')
wrap=$(echo "$ARGUMENTS" | grep -oP 'wrap:\K[0-9]+' || echo "72")
format=$(echo "$ARGUMENTS" | grep -oP 'format:\K[^ ]+' || echo "bullets")
why=$(echo "$ARGUMENTS" | grep -oP 'why:"\K[^"]+')
```
### Step 2: Validate Parameters
**Check required parameters:**
```bash
if [ -z "$changes" ]; then
echo "ERROR: changes parameter is required"
echo "Usage: body changes:\"<change1>,<change2>\" [why:\"<explanation>\"]"
exit 1
fi
```
**Validate format:**
```bash
if [ "$format" != "bullets" ] && [ "$format" != "paragraphs" ]; then
echo "ERROR: Invalid format '$format'"
echo "Valid formats: bullets, paragraphs"
exit 1
fi
```
### Step 3: Invoke Body Composer Script
Pass parameters to the utility script for intelligent formatting:
```bash
# Export variables for script
export CHANGES="$changes"
export WRAP_LENGTH="$wrap"
export FORMAT="$format"
export WHY_CONTEXT="$why"
# Run composer
/home/danie/projects/plugins/architect/open-plugins/plugins/git-commit-assistant/commands/message-generation/.scripts/body-composer.sh
```
The script will:
- Split changes into individual items
- Format as bullet points or paragraphs
- Wrap lines at specified length
- Add context if provided
- Ensure imperative mood
### Step 4: Format Output
Present the generated body:
```
COMMIT BODY GENERATED
═══════════════════════════════════════════════
BODY:
───────────────────────────────────────────────
<blank line>
<formatted body content with bullet points>
<wrapped at 72 characters>
VALIDATION:
───────────────────────────────────────────────
✓ Blank line before body
✓ Lines wrapped at 72 characters
✓ Bullet points used
✓ Imperative mood
✓ Proper formatting
STATISTICS:
───────────────────────────────────────────────
Lines: X
Longest line: XX chars
Bullet points: X
═══════════════════════════════════════════════
```
## Output Format
Return structured output:
- Formatted body text
- Validation results
- Statistics (line count, wrapping)
- Suggestions for improvement (if any)
## Error Handling
**Missing required parameters:**
```
ERROR: Missing required parameter 'changes'
Usage: body changes:"<change1>,<change2>" [why:"<explanation>"]
Example: body changes:"Implement OAuth2 flow,Add provider support"
```
**Line too long:**
```
WARNING: Line exceeds 72 characters (XX chars)
Line: "- Very long description that goes on and on..."
Suggestion: Split into multiple bullet points or wrap text
```
**Non-imperative mood:**
```
WARNING: Use imperative mood in body
Current: "- Added authentication"
Correct: "- Add authentication"
```
## Body Formatting Rules
**Structure:**
```
<blank line required between subject and body>
<body content>
- Bullet point 1
- Bullet point 2
- Bullet point 3
```
**Line Wrapping:**
- Target: 72 characters per line
- Hard limit: No line should exceed 80 characters
- Use hard wraps, not soft wraps
**Bullet Points:**
- Use `-` for bullet points
- Consistent indentation
- One thought per bullet
- Imperative mood
**Content Focus:**
- Explain WHAT and WHY, not HOW
- Focus on user-facing changes
- Provide context when needed
- Avoid implementation details
## Integration with Agent
The commit-assistant agent uses this operation to:
1. Generate body content from analyzed changes
2. Format file lists into readable bullet points
3. Add context about why changes were made
4. Ensure proper formatting and wrapping
## Usage Examples
### Example 1: Basic Body with Changes
```bash
# Input
/message-generation body changes:"Implement OAuth2 flow,Add Google provider,Add GitHub provider,Include middleware"
# Output
BODY:
- Implement OAuth2 flow
- Add Google provider
- Add GitHub provider
- Include middleware
```
### Example 2: Body with Context
```bash
# Input
/message-generation body changes:"Refactor database queries,Add connection pooling" why:"Improve performance under load"
# Output
BODY:
- Refactor database queries
- Add connection pooling
Improve performance under high load conditions.
```
### Example 3: Body from File List
```bash
# Input
/message-generation body changes:"src/auth/oauth.js,src/auth/providers/google.js,src/auth/providers/github.js"
# Output
BODY:
- Add OAuth authentication module
- Implement Google provider
- Implement GitHub provider
- Add provider configuration
```
### Example 4: Paragraph Format
```bash
# Input
/message-generation body changes:"Update authentication flow" why:"Previous implementation had security vulnerabilities" format:paragraphs
# Output
BODY:
Update authentication flow to address security vulnerabilities
discovered in the previous implementation. The new approach uses
industry-standard OAuth2 protocol with secure token handling.
```
## Best Practices
**Be Clear:**
- ✅ "Add user authentication with OAuth2"
- ❌ "Add stuff"
**Use Bullet Points:**
- ✅ Multiple related changes as bullets
- ❌ Long paragraphs of text
**Focus on What/Why:**
- ✅ "Add caching to improve performance"
- ❌ "Add Redis instance with 5-minute TTL"
**Keep It Concise:**
- ✅ Brief, clear explanations
- ❌ Essay-length descriptions
**Wrap Properly:**
- ✅ "This is a properly wrapped line that doesn't exceed\nthe 72 character limit"
- ❌ "This is a very long line that goes on and on and on and exceeds the character limit"
## When to Include a Body
**Include body when:**
- Multiple files changed
- Changes need explanation
- Context is important
- Implications not obvious
**Omit body when:**
- Change is self-explanatory
- Subject line is sufficient
- Trivial change
- Documentation only
## Body Templates
**Feature Addition:**
```
- Add <feature name>
- Implement <capability 1>
- Implement <capability 2>
- Include <supporting feature>
```
**Bug Fix:**
```
- Resolve <issue>
- Add validation for <edge case>
- Update error handling
Fixes issue where <description of bug>
```
**Refactoring:**
```
- Extract <component>
- Simplify <logic>
- Improve <aspect>
No functional changes, improves code maintainability.
```
**Performance:**
```
- Optimize <operation>
- Add caching for <data>
- Reduce <metric>
Improves performance by <measurement>.
```