Initial commit

This commit is contained in:
Zhongwei Li
2025-11-30 09:04:31 +08:00
commit 998ef8b6b4
4 changed files with 411 additions and 0 deletions

View File

@@ -0,0 +1,12 @@
{
"name": "weekly-review",
"description": "Generate a weekly summary of your git commits with insights on tech debt, bug fixes, and new features",
"version": "1.0.0",
"author": {
"name": "Claude Code Plugins",
"email": "plugins@example.com"
},
"commands": [
"./commands"
]
}

3
README.md Normal file
View File

@@ -0,0 +1,3 @@
# weekly-review
Generate a weekly summary of your git commits with insights on tech debt, bug fixes, and new features

351
commands/weekly-review.md Normal file
View File

@@ -0,0 +1,351 @@
---
description: Generate a weekly summary of your merged PRs and commits
argument-hint: [days]
allowed-tools: Bash(gh:*), Bash(git:*)
---
# Weekly Review
Generate a comprehensive summary of your work from the past 7-10 days, prioritizing merged GitHub PRs and falling back to git commits when PRs aren't available. Automatically categorizes work into tech debt, bug fixes, and new features.
## Arguments
**Days**: $ARGUMENTS (defaults to `7` if not provided, maximum `10`)
Parse the number of days from $ARGUMENTS, or use 7 as default.
---
## Phase 1: Setup & Environment Check
**Goal**: Verify git/GitHub configuration and determine time range for analysis
**Actions**:
1. Create a todo list with all phases:
- Phase 1: Setup & Environment Check
- Phase 2: Data Collection (PRs or Commits)
- Phase 3: Work Analysis
- Phase 4: Report Generation
2. Parse arguments to determine days (default: 7, max: 10)
3. Check if GitHub CLI is available and authenticated:
```bash
gh auth status
```
4. Get git user email using: `git config user.email`
5. **Decision Point**:
- If `gh` is available and authenticated → set mode to "GitHub PRs"
- If `gh` is not available or not authenticated → set mode to "Git Commits"
- Inform user which mode will be used
6. **Error Handling**:
- If no email is configured (and using Git Commits mode), inform the user:
```
I couldn't find your git email configuration.
To set your email, run:
git config --global user.email "your-email@example.com"
Or for this repository only:
git config user.email "your-email@example.com"
```
- Then exit gracefully
7. Verify we're in a git repository
- If not, inform user and exit
---
## Phase 2: Data Collection
**Goal**: Gather merged PRs (preferred) or commits from the specified time range
### Mode A: GitHub PRs (Preferred)
**Actions**:
1. Calculate the date range:
- Start date: N days ago (where N is from arguments or default 7)
- End date: today
2. List merged PRs authored by the current user:
```bash
gh pr list --state merged --author @me --json number,title,mergedAt,labels,body,url --limit 100
```
3. Filter PRs to only those merged in the date range
4. For each merged PR, collect:
- PR number and title
- Merge date
- Labels (for categorization hints)
- PR body/description
- URL
- Files changed: `gh pr diff <number> --name-only`
- Commit count: `gh pr view <number> --json commits --jq '.commits | length'`
5. **Error Handling**:
- If no PRs found, inform user:
```
No merged PRs found by @me in the past N days.
This could mean:
- You haven't merged any PRs recently
- PRs were merged by someone else (even if you authored them)
- You might want to check a specific branch
```
- Ask if they want to fall back to Git Commits mode
- If yes, switch to Mode B
### Mode B: Git Commits (Fallback)
**Actions**:
1. Calculate the date range:
- Start date: N days ago (where N is from arguments or default 7)
- End date: today
2. Collect commits using:
```bash
git log --all --author="<user-email>" --since="N days ago" --pretty=format:"%H|%s|%ar|%ad" --date=short --no-merges
```
3. For each commit, get the diff stats:
```bash
git show <commit-hash> --stat --pretty=format:"" --numstat
```
4. **Error Handling**:
- If no commits found, inform user:
```
No commits found by <email> in the past N days.
This could mean:
- You haven't committed anything recently
- Your git email might be different
- Your commits are on a different branch
```
- Then exit gracefully
5. Store commit information:
- Commit hash
- Commit message
- Date and time ago
- Files changed
- Lines added/removed
---
## Phase 3: Work Analysis
**Goal**: Analyze PRs/commits to categorize work and understand patterns
### Analysis for GitHub PRs
**Actions**:
1. For each PR, analyze the title, labels, and body to categorize:
**Tech Debt indicators**:
- Labels: refactor, tech-debt, cleanup, chore
- Keywords in title/body: refactor, cleanup, improve, optimize, simplify, restructure
- Keywords: dependency update, upgrade, migration
- Code quality improvements
**Bug Fix indicators**:
- Labels: bug, fix, hotfix, bugfix
- Keywords in title/body: fix, bug, issue, patch, correct, resolve
- References to issue numbers (Fixes #123, Closes #456)
- Keywords: crash, error, broken
**New Functionality indicators**:
- Labels: feature, enhancement, new
- Keywords in title/body: add, feature, implement, new, create, introduce
- Breaking changes mentioned
- API additions
2. Extract key themes from PR titles and descriptions:
- Group related PRs together
- Identify major areas of work
- Note any significant patterns or initiatives
3. Calculate statistics:
- Total PRs merged
- Total files changed (sum across all PRs)
- Total commits (sum across all PRs)
- Distribution across categories
### Analysis for Git Commits
**Actions**:
1. For each commit, analyze the commit message and diff to categorize:
**Tech Debt indicators**:
- Keywords: refactor, cleanup, improve, optimize, simplify, restructure, chore
- Large file renames or moves
- Dependency updates
- Code formatting changes
**Bug Fix indicators**:
- Keywords: fix, bug, issue, patch, correct, resolve
- References to issue numbers (#123, GH-456)
- Changes to error handling
- Test additions/modifications
**New Functionality indicators**:
- Keywords: add, feature, implement, new, create, introduce, feat
- New files added
- Substantial additions (more lines added than removed)
- API changes or extensions
2. Extract key themes from commit messages:
- Group similar commits together
- Identify major areas of work
- Note any significant patterns
3. Calculate statistics:
- Total commits
- Total files changed
- Total lines added/removed
- Distribution across categories
---
## Phase 4: Report Generation
**Goal**: Present a clear, actionable summary of the week's work
### Report Format for GitHub PRs
**Actions**:
1. Generate the report in this format:
```markdown
# Weekly Review (<start-date> to <end-date>)
**Source**: GitHub Pull Requests
## Summary
You merged <N> pull requests over the past <N> days, containing <M> commits and changing <X> files.
## Key Accomplishments
- [2-5 bullet points of major work, derived from PR analysis]
- [Focus on user-facing impact and significant changes]
- [Group related PRs into single bullets]
## Work Breakdown
### New Functionality (<N> PRs, X%)
[Brief description of new features added based on PR titles/descriptions]
### Bug Fixes (<N> PRs, X%)
[Brief description of bugs fixed based on PR titles/descriptions]
### Tech Debt & Maintenance (<N> PRs, X%)
[Brief description of refactoring and cleanup work]
## Detailed Analysis
**Tech Debt**: [1-2 sentence summary of refactoring work, patterns improved, code quality enhancements, mentioning specific PRs]
**Bug Fixes**: [1-2 sentence summary of issues resolved, areas of the codebase stabilized, mentioning specific PRs]
**New Functionality**: [1-2 sentence summary of new capabilities added, features implemented, mentioning specific PRs]
## Merged Pull Requests
### New Features
- #123: Add user authentication system - <url>
- #125: Implement dashboard analytics - <url>
### Bug Fixes
- #124: Fix race condition in data loader - <url>
### Tech Debt
- #126: Refactor database connection pooling - <url>
---
**Next Steps**:
- Review any open PRs that build on this work
- Update project documentation if needed
- Plan next week's priorities based on patterns observed
```
### Report Format for Git Commits
**Actions**:
1. Generate the report in this format:
```markdown
# Weekly Review (<start-date> to <end-date>)
**Source**: Git Commits (no GitHub PR data available)
## Summary
You shipped <N> commits over the past <N> days, changing <N> files with <+X/-Y> lines.
## Key Accomplishments
- [2-5 bullet points of major work, derived from commit analysis]
- [Focus on user-facing impact and significant changes]
- [Group related commits into single bullets]
## Work Breakdown
### New Functionality (<N> commits, X%)
[Brief description of new features added]
### Bug Fixes (<N> commits, X%)
[Brief description of bugs fixed]
### Tech Debt & Maintenance (<N> commits, X%)
[Brief description of refactoring and cleanup work]
## Detailed Analysis
**Tech Debt**: [1-2 sentence summary of refactoring work, patterns improved, code quality enhancements]
**Bug Fixes**: [1-2 sentence summary of issues resolved, areas of the codebase stabilized]
**New Functionality**: [1-2 sentence summary of new capabilities added, features implemented]
## Commit Timeline
[Show commits grouped by day or by category, with commit messages and hashes]
---
**Next Steps**:
- Review any open PRs related to this work
- Update project documentation if needed
- Consider using GitHub PRs for better weekly reviews (install gh CLI)
- Plan next week's priorities based on patterns observed
```
2. Present the report to the user
3. Mark the final phase as completed
---
## Error Handling
**Throughout all phases**:
- If gh commands fail → explain the error and fall back to Git Commits mode
- If git commands fail → provide clear error message and exit
- If parsing fails → show what was attempted and ask for clarification
- If unexpected state → explain what was found and what was expected
- If authentication issues with gh → provide instructions to run `gh auth login`
---
## Important Notes
- This command is **read-only** - it only analyzes PRs/commits, never modifies anything
- **GitHub PRs are preferred** over git commits because they:
- Represent cohesive units of work
- Include labels and descriptions for better categorization
- Show code review and collaboration context
- Are easier to link back to for reference
- The analysis is based on PR titles/descriptions or commit messages, so quality depends on message clarity
- Categorization uses heuristics and may not be 100% accurate
- The command focuses on PRs merged by @me or commits by the configured git user email
- Merge commits are excluded from git commit analysis
- If using GitHub PRs, you need the GitHub CLI (`gh`) installed and authenticated

45
plugin.lock.json Normal file
View File

@@ -0,0 +1,45 @@
{
"$schema": "internal://schemas/plugin.lock.v1.json",
"pluginId": "gh:vdemeester/claude-code-plugins:plugins/weekly-review",
"normalized": {
"repo": null,
"ref": "refs/tags/v20251128.0",
"commit": "6896cb5a2bcfadc4749bd2eba67b5ddee4416bf7",
"treeHash": "6b669d1a6c83c85bee43f5ecab81660f9382992de3a41e3dca5e13a8138f12ba",
"generatedAt": "2025-11-28T10:28:53.874114Z",
"toolVersion": "publish_plugins.py@0.2.0"
},
"origin": {
"remote": "git@github.com:zhongweili/42plugin-data.git",
"branch": "master",
"commit": "aa1497ed0949fd50e99e70d6324a29c5b34f9390",
"repoRoot": "/Users/zhongweili/projects/openmind/42plugin-data"
},
"manifest": {
"name": "weekly-review",
"description": "Generate a weekly summary of your git commits with insights on tech debt, bug fixes, and new features",
"version": "1.0.0"
},
"content": {
"files": [
{
"path": "README.md",
"sha256": "38ccab37fd13d966da361d581364d07b4174c110be232c33ac51463bd5936133"
},
{
"path": ".claude-plugin/plugin.json",
"sha256": "7973a8ee63e4e06cce613d0b2d562dcc0dc8f92368b7893759f5f4e449eb3d98"
},
{
"path": "commands/weekly-review.md",
"sha256": "ce1c85fda703171e119a91c771b52eff8a28e725b7c723b60cd4d796c613dd75"
}
],
"dirSha256": "6b669d1a6c83c85bee43f5ecab81660f9382992de3a41e3dca5e13a8138f12ba"
},
"security": {
"scannedAt": null,
"scannerVersion": null,
"flags": []
}
}