Initial commit
This commit is contained in:
18
.claude-plugin/plugin.json
Normal file
18
.claude-plugin/plugin.json
Normal file
@@ -0,0 +1,18 @@
|
|||||||
|
{
|
||||||
|
"name": "example-full-featured",
|
||||||
|
"description": "Full-featured productivity plugin with Git workflow automation, code review agents, test generation, validation hooks, and example MCP server",
|
||||||
|
"version": "1.0.0",
|
||||||
|
"author": {
|
||||||
|
"name": "ando",
|
||||||
|
"email": "ando@kivilaid.ee"
|
||||||
|
},
|
||||||
|
"agents": [
|
||||||
|
"./agents"
|
||||||
|
],
|
||||||
|
"commands": [
|
||||||
|
"./commands"
|
||||||
|
],
|
||||||
|
"hooks": [
|
||||||
|
"./hooks"
|
||||||
|
]
|
||||||
|
}
|
||||||
3
README.md
Normal file
3
README.md
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
# example-full-featured
|
||||||
|
|
||||||
|
Full-featured productivity plugin with Git workflow automation, code review agents, test generation, validation hooks, and example MCP server
|
||||||
48
agents/code-reviewer.md
Normal file
48
agents/code-reviewer.md
Normal file
@@ -0,0 +1,48 @@
|
|||||||
|
# Code Reviewer Agent
|
||||||
|
|
||||||
|
You are a thorough code review specialist focused on code quality, best practices, and maintainability.
|
||||||
|
|
||||||
|
## Your responsibilities
|
||||||
|
|
||||||
|
When reviewing code, analyze:
|
||||||
|
|
||||||
|
1. **Code Quality**
|
||||||
|
- Readability and clarity
|
||||||
|
- Proper naming conventions
|
||||||
|
- Code organization and structure
|
||||||
|
- Consistent formatting
|
||||||
|
|
||||||
|
2. **Best Practices**
|
||||||
|
- Language-specific idioms
|
||||||
|
- Design patterns usage
|
||||||
|
- DRY principle adherence
|
||||||
|
- SOLID principles
|
||||||
|
|
||||||
|
3. **Potential Issues**
|
||||||
|
- Logic errors
|
||||||
|
- Edge cases handling
|
||||||
|
- Error handling
|
||||||
|
- Resource management
|
||||||
|
|
||||||
|
4. **Security Concerns**
|
||||||
|
- Input validation
|
||||||
|
- SQL injection risks
|
||||||
|
- XSS vulnerabilities
|
||||||
|
- Authentication/authorization issues
|
||||||
|
|
||||||
|
5. **Performance**
|
||||||
|
- Algorithm efficiency
|
||||||
|
- Memory usage
|
||||||
|
- Unnecessary computations
|
||||||
|
- Database query optimization
|
||||||
|
|
||||||
|
## Output format
|
||||||
|
|
||||||
|
Provide your review in this structure:
|
||||||
|
- **Summary**: Brief overview of the code
|
||||||
|
- **Strengths**: What's done well
|
||||||
|
- **Issues**: Specific problems found (categorized by severity: Critical, Major, Minor)
|
||||||
|
- **Suggestions**: Concrete improvement recommendations
|
||||||
|
- **Code Examples**: Show better alternatives when applicable
|
||||||
|
|
||||||
|
Be constructive, specific, and provide actionable feedback.
|
||||||
50
agents/test-generator.md
Normal file
50
agents/test-generator.md
Normal file
@@ -0,0 +1,50 @@
|
|||||||
|
# Test Generator Agent
|
||||||
|
|
||||||
|
You are an expert at creating comprehensive, maintainable test suites.
|
||||||
|
|
||||||
|
## Your responsibilities
|
||||||
|
|
||||||
|
When generating tests:
|
||||||
|
|
||||||
|
1. **Test Coverage**
|
||||||
|
- Happy path scenarios
|
||||||
|
- Edge cases
|
||||||
|
- Error conditions
|
||||||
|
- Boundary conditions
|
||||||
|
|
||||||
|
2. **Test Quality**
|
||||||
|
- Clear test names that describe what's being tested
|
||||||
|
- Arrange-Act-Assert pattern
|
||||||
|
- One assertion focus per test
|
||||||
|
- Proper setup and teardown
|
||||||
|
|
||||||
|
3. **Test Types**
|
||||||
|
- Unit tests for individual functions/methods
|
||||||
|
- Integration tests for component interactions
|
||||||
|
- End-to-end tests for critical user flows
|
||||||
|
|
||||||
|
4. **Best Practices**
|
||||||
|
- Use appropriate mocking/stubbing
|
||||||
|
- Avoid test interdependencies
|
||||||
|
- Make tests deterministic
|
||||||
|
- Keep tests fast and focused
|
||||||
|
|
||||||
|
## Supported frameworks
|
||||||
|
|
||||||
|
Adapt your test generation to the project's testing framework:
|
||||||
|
- JavaScript/TypeScript: Jest, Vitest, Mocha, Jasmine
|
||||||
|
- Python: pytest, unittest
|
||||||
|
- Java: JUnit, TestNG
|
||||||
|
- Go: testing package
|
||||||
|
- Ruby: RSpec, Minitest
|
||||||
|
|
||||||
|
## Output format
|
||||||
|
|
||||||
|
Generate tests with:
|
||||||
|
- Clear test descriptions
|
||||||
|
- Comprehensive coverage
|
||||||
|
- Helpful comments explaining complex scenarios
|
||||||
|
- Proper assertions
|
||||||
|
- Mock/stub setup when needed
|
||||||
|
|
||||||
|
Organize tests logically and ensure they're maintainable.
|
||||||
52
commands/clean_gone.md
Normal file
52
commands/clean_gone.md
Normal file
@@ -0,0 +1,52 @@
|
|||||||
|
---
|
||||||
|
description: Cleans up all git branches marked as [gone] (branches that have been deleted on the remote but still exist locally), including removing associated worktrees.
|
||||||
|
---
|
||||||
|
|
||||||
|
## Your Task
|
||||||
|
|
||||||
|
You need to execute the following bash commands to clean up stale local branches that have been deleted from the remote repository.
|
||||||
|
|
||||||
|
## Commands to Execute
|
||||||
|
|
||||||
|
1. **First, list branches to identify any with [gone] status**
|
||||||
|
Execute this command:
|
||||||
|
```bash
|
||||||
|
git branch -v
|
||||||
|
```
|
||||||
|
|
||||||
|
Note: Branches with a '+' prefix have associated worktrees and must have their worktrees removed before deletion.
|
||||||
|
|
||||||
|
2. **Next, identify worktrees that need to be removed for [gone] branches**
|
||||||
|
Execute this command:
|
||||||
|
```bash
|
||||||
|
git worktree list
|
||||||
|
```
|
||||||
|
|
||||||
|
3. **Finally, remove worktrees and delete [gone] branches (handles both regular and worktree branches)**
|
||||||
|
Execute this command:
|
||||||
|
```bash
|
||||||
|
# Process all [gone] branches, removing '+' prefix if present
|
||||||
|
git branch -v | grep '\[gone\]' | sed 's/^[+* ]//' | awk '{print $1}' | while read branch; do
|
||||||
|
echo "Processing branch: $branch"
|
||||||
|
# Find and remove worktree if it exists
|
||||||
|
worktree=$(git worktree list | grep "\\[$branch\\]" | awk '{print $1}')
|
||||||
|
if [ ! -z "$worktree" ] && [ "$worktree" != "$(git rev-parse --show-toplevel)" ]; then
|
||||||
|
echo " Removing worktree: $worktree"
|
||||||
|
git worktree remove --force "$worktree"
|
||||||
|
fi
|
||||||
|
# Delete the branch
|
||||||
|
echo " Deleting branch: $branch"
|
||||||
|
git branch -D "$branch"
|
||||||
|
done
|
||||||
|
```
|
||||||
|
|
||||||
|
## Expected Behavior
|
||||||
|
|
||||||
|
After executing these commands, you will:
|
||||||
|
|
||||||
|
- See a list of all local branches with their status
|
||||||
|
- Identify and remove any worktrees associated with [gone] branches
|
||||||
|
- Delete all branches marked as [gone]
|
||||||
|
- Provide feedback on which worktrees and branches were removed
|
||||||
|
|
||||||
|
If no branches are marked as [gone], you should inform the user that no cleanup is necessary.
|
||||||
20
commands/commit-push-pr.md
Normal file
20
commands/commit-push-pr.md
Normal file
@@ -0,0 +1,20 @@
|
|||||||
|
---
|
||||||
|
allowed-tools: Bash(git checkout --branch:*), Bash(git add:*), Bash(git status:*), Bash(git push:*), Bash(git commit:*), Bash(gh pr create:*)
|
||||||
|
description: Commit, push, and open a PR
|
||||||
|
---
|
||||||
|
|
||||||
|
## Context
|
||||||
|
|
||||||
|
- Current git status: !`git status`
|
||||||
|
- Current git diff (staged and unstaged changes): !`git diff HEAD`
|
||||||
|
- Current branch: !`git branch --show-current`
|
||||||
|
|
||||||
|
## Your task
|
||||||
|
|
||||||
|
Based on the above changes:
|
||||||
|
|
||||||
|
1. Create a new branch if on main
|
||||||
|
2. Create a single commit with an appropriate message
|
||||||
|
3. Push the branch to origin
|
||||||
|
4. Create a pull request using `gh pr create`
|
||||||
|
5. You have the capability to call multiple tools in a single response. You MUST do all of the above in a single message. Do not use any other tools or do anything else. Do not send any other text or messages besides these tool calls.
|
||||||
17
commands/commit.md
Normal file
17
commands/commit.md
Normal file
@@ -0,0 +1,17 @@
|
|||||||
|
---
|
||||||
|
allowed-tools: Bash(git add:*), Bash(git status:*), Bash(git commit:*)
|
||||||
|
description: Create a git commit
|
||||||
|
---
|
||||||
|
|
||||||
|
## Context
|
||||||
|
|
||||||
|
- Current git status: !`git status`
|
||||||
|
- Current git diff (staged and unstaged changes): !`git diff HEAD`
|
||||||
|
- Current branch: !`git branch --show-current`
|
||||||
|
- Recent commits: !`git log --oneline -10`
|
||||||
|
|
||||||
|
## Your task
|
||||||
|
|
||||||
|
Based on the above changes, create a single git commit.
|
||||||
|
|
||||||
|
You have the capability to call multiple tools in a single response. Stage and create the commit using a single message. Do not use any other tools or do anything else. Do not send any other text or messages besides these tool calls.
|
||||||
14
hooks/hooks.json
Normal file
14
hooks/hooks.json
Normal file
@@ -0,0 +1,14 @@
|
|||||||
|
{
|
||||||
|
"PostToolUse": [
|
||||||
|
{
|
||||||
|
"matcher": "Write|Edit",
|
||||||
|
"hooks": [
|
||||||
|
{
|
||||||
|
"type": "command",
|
||||||
|
"command": "${CLAUDE_PLUGIN_ROOT}/hooks/validate.sh",
|
||||||
|
"args": ["{{file_path}}"]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
49
hooks/validate.sh
Executable file
49
hooks/validate.sh
Executable file
@@ -0,0 +1,49 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
# Example validation hook that runs after Write/Edit operations
|
||||||
|
# This demonstrates how to validate file changes
|
||||||
|
|
||||||
|
FILE_PATH="$1"
|
||||||
|
|
||||||
|
echo "Validating file: $FILE_PATH"
|
||||||
|
|
||||||
|
# Check if file exists
|
||||||
|
if [ ! -f "$FILE_PATH" ]; then
|
||||||
|
echo "Warning: File not found: $FILE_PATH"
|
||||||
|
exit 0
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Get file extension
|
||||||
|
EXT="${FILE_PATH##*.}"
|
||||||
|
|
||||||
|
# Perform basic validation based on file type
|
||||||
|
case "$EXT" in
|
||||||
|
json)
|
||||||
|
echo "Checking JSON syntax..."
|
||||||
|
if command -v jq &> /dev/null; then
|
||||||
|
if jq empty "$FILE_PATH" 2>/dev/null; then
|
||||||
|
echo "✓ JSON validation passed"
|
||||||
|
else
|
||||||
|
echo "✗ JSON validation failed"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
echo "ℹ jq not installed, skipping JSON validation"
|
||||||
|
fi
|
||||||
|
;;
|
||||||
|
sh)
|
||||||
|
echo "Checking shell script syntax..."
|
||||||
|
if bash -n "$FILE_PATH" 2>/dev/null; then
|
||||||
|
echo "✓ Shell script syntax valid"
|
||||||
|
else
|
||||||
|
echo "✗ Shell script syntax error"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
echo "ℹ No specific validation for .$EXT files"
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
echo "Validation complete"
|
||||||
|
exit 0
|
||||||
69
plugin.lock.json
Normal file
69
plugin.lock.json
Normal file
@@ -0,0 +1,69 @@
|
|||||||
|
{
|
||||||
|
"$schema": "internal://schemas/plugin.lock.v1.json",
|
||||||
|
"pluginId": "gh:kivilaid/plugin-marketplace:plugins/example-full-featured",
|
||||||
|
"normalized": {
|
||||||
|
"repo": null,
|
||||||
|
"ref": "refs/tags/v20251128.0",
|
||||||
|
"commit": "825748d4933ddc06a4e53d6b8cdfc9edbce17317",
|
||||||
|
"treeHash": "8017336b101674247b8e2aff549affd2c6054be49d67f0d0779e8d88cb0d02b3",
|
||||||
|
"generatedAt": "2025-11-28T10:19:32.468245Z",
|
||||||
|
"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": "example-full-featured",
|
||||||
|
"description": "Full-featured productivity plugin with Git workflow automation, code review agents, test generation, validation hooks, and example MCP server",
|
||||||
|
"version": "1.0.0"
|
||||||
|
},
|
||||||
|
"content": {
|
||||||
|
"files": [
|
||||||
|
{
|
||||||
|
"path": "README.md",
|
||||||
|
"sha256": "95e892f26b86538c933061087f4b855614eaf2ff792f0d643c2fbb2019f441d6"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"path": "agents/code-reviewer.md",
|
||||||
|
"sha256": "84396fa2f05cc031e332ed0392fa210a15d4ba6cb32758ddeae259ebd32bc34d"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"path": "agents/test-generator.md",
|
||||||
|
"sha256": "43beff78e478253624798660c3d521111c4a332067d095137e1412251609581f"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"path": "hooks/validate.sh",
|
||||||
|
"sha256": "bac0e501e94cf30c4d64bfaeeab7ecb688f6ba2122485ea2e0dca4a83389a751"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"path": "hooks/hooks.json",
|
||||||
|
"sha256": "f19bd0838a3766dd853427b0dbd3cbb9fd9572ee61525a5b01c98a6d59761e64"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"path": ".claude-plugin/plugin.json",
|
||||||
|
"sha256": "00aff05462ed0b6e9b7b084a13eb6cc76d4df503d4f96fcf742015c55f9c65b7"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"path": "commands/commit-push-pr.md",
|
||||||
|
"sha256": "3bc3d171939149cbbef141cbced553dce6ba6f97dac4a764f4ef1e055c35064d"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"path": "commands/clean_gone.md",
|
||||||
|
"sha256": "b066a07addcfb543b54a8286d4cf537b15f5ae87d4597a56999a6c802d860a72"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"path": "commands/commit.md",
|
||||||
|
"sha256": "d1acbc2bf0c50164f48d6bda872de6a343cd9390954ce903c3431c3119e7f8c4"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"dirSha256": "8017336b101674247b8e2aff549affd2c6054be49d67f0d0779e8d88cb0d02b3"
|
||||||
|
},
|
||||||
|
"security": {
|
||||||
|
"scannedAt": null,
|
||||||
|
"scannerVersion": null,
|
||||||
|
"flags": []
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user