Initial commit
This commit is contained in:
12
.claude-plugin/plugin.json
Normal file
12
.claude-plugin/plugin.json
Normal file
@@ -0,0 +1,12 @@
|
||||
{
|
||||
"name": "git",
|
||||
"description": "Set of commands, skills, and agents to manage git projects",
|
||||
"version": "1.0.0",
|
||||
"author": {
|
||||
"name": "Artur Roszczyk",
|
||||
"email": "[email protected]"
|
||||
},
|
||||
"commands": [
|
||||
"./commands"
|
||||
]
|
||||
}
|
||||
3
README.md
Normal file
3
README.md
Normal file
@@ -0,0 +1,3 @@
|
||||
# git
|
||||
|
||||
Set of commands, skills, and agents to manage git projects
|
||||
104
commands/commit.md
Normal file
104
commands/commit.md
Normal file
@@ -0,0 +1,104 @@
|
||||
---
|
||||
description: Create git commits for changes made during the current session
|
||||
allowed-tools: Bash(git status:*), Bash(git diff:*), Bash(git add:*), Bash(git commit:*), Task, AskUserQuestion
|
||||
model: claude-haiku-4-5
|
||||
---
|
||||
|
||||
# Commit Changes
|
||||
|
||||
You are executing the `/commit` command. Follow these steps precisely:
|
||||
|
||||
## Overview
|
||||
|
||||
This command creates git commits for changes made during the current session. It delegates the analysis and commit creation to a general-purpose agent to avoid polluting the main conversation context.
|
||||
|
||||
## Step 1: Extract Conversation Context
|
||||
|
||||
Before delegating to the agent, analyze the conversation history to extract:
|
||||
- What tasks/features were discussed and implemented
|
||||
- Which files were mentioned or modified during implementation
|
||||
- Any specific intents or goals stated by the user
|
||||
- Whether multiple distinct tasks were worked on
|
||||
|
||||
Create a concise summary (2-4 sentences) of the session's work.
|
||||
|
||||
## Step 2: Delegate to Agent
|
||||
|
||||
Launch a general-purpose agent with the Task tool using the claude-haiku-4-5 model for efficiency, providing:
|
||||
|
||||
**Prompt structure:**
|
||||
```
|
||||
You are helping create git commits for a coding session.
|
||||
|
||||
Session context:
|
||||
[Include the summary from Step 1]
|
||||
|
||||
Your tasks:
|
||||
1. Analyze changes: Run git status and git diff to see all changes. Based on the session context above, identify which changes are relevant to commit.
|
||||
|
||||
2. Commit strategy: If multiple distinct tasks were detected from the session context, ask the user using AskUserQuestion tool:
|
||||
- Question 1: "How should I commit these changes?"
|
||||
- "Single commit" - Commit all changes together
|
||||
- "Multiple logical commits" - Create separate commits for each distinct task/feature
|
||||
|
||||
- Question 2 (only if unstaged/untracked files exist that weren't part of the session work):
|
||||
"There are uncommitted changes not made in this session. Include them?"
|
||||
- "Yes, include all changes" - Stage and commit everything
|
||||
- "No, only session changes" - Commit only files from this session
|
||||
- "Let me review first" - Show list of files and stop
|
||||
|
||||
3. Create commits following these rules:
|
||||
- Style: Concise, factual, savant-like. State what was done, not why (unless discussed during implementation)
|
||||
- Simple changes: Title only (no description)
|
||||
- Complex changes: Title + description with context about what was changed
|
||||
- Use facts, avoid self-praise adjectives ("improved", "optimized", "enhanced")
|
||||
- Hard limit: 80 words total
|
||||
- Format: Always use heredoc for commit message
|
||||
|
||||
Examples:
|
||||
```bash
|
||||
# Simple change
|
||||
git commit -m "$(cat <<'EOF'
|
||||
Add user authentication middleware
|
||||
EOF
|
||||
)"
|
||||
|
||||
# Complex change
|
||||
git commit -m "$(cat <<'EOF'
|
||||
Refactor database connection pooling
|
||||
|
||||
Extracted connection logic into separate module. Added retry mechanism
|
||||
for failed connections. Configured pool size based on environment variables.
|
||||
EOF
|
||||
)"
|
||||
```
|
||||
|
||||
If creating multiple logical commits:
|
||||
- Create commits in chronological order of implementation
|
||||
- Each commit should be self-contained and logical
|
||||
- Follow same message rules for each commit
|
||||
|
||||
4. Return the following information:
|
||||
- Commit SHA(s)
|
||||
- Full commit message(s) for each commit created
|
||||
```
|
||||
|
||||
## Step 3: Display Results
|
||||
|
||||
After the agent completes, display the output:
|
||||
- List each commit SHA with its full commit message
|
||||
- Confirm total number of commits created
|
||||
|
||||
Example output format:
|
||||
```
|
||||
Created 1 commit:
|
||||
|
||||
abc123d - Add user authentication middleware
|
||||
```
|
||||
|
||||
## Error Handling
|
||||
|
||||
If the agent reports any failures:
|
||||
1. Display the error message clearly
|
||||
2. Ask user if they want to retry or need assistance
|
||||
3. Do not attempt automatic fixes in the main conversation
|
||||
150
commands/open-pr.md
Normal file
150
commands/open-pr.md
Normal file
@@ -0,0 +1,150 @@
|
||||
---
|
||||
description: Create commits, push branch, and open a pull request on GitHub
|
||||
argument-hint: [draft]
|
||||
allowed-tools: Bash(git status:*), Bash(git diff:*), Bash(git add:*), Bash(git commit:*), Bash(git push:*), Bash(git branch:*), Bash(git checkout:*), Bash(gh pr create:*), Bash(xdg-open:*), AskUserQuestion
|
||||
model: claude-haiku-4-5
|
||||
---
|
||||
|
||||
# Open Pull Request
|
||||
|
||||
You are executing the `/open-pr` command. Follow these steps precisely:
|
||||
|
||||
## Parameters
|
||||
- `draft` (optional): Create PR as draft if specified (e.g., `/open-pr draft`)
|
||||
|
||||
## Step 0: Branch Check
|
||||
|
||||
**CRITICAL: Run this check FIRST before any other steps.**
|
||||
|
||||
Check current branch with `git branch --show-current`.
|
||||
|
||||
**If on main or master branch:**
|
||||
1. Analyze changes briefly to understand what was modified/added
|
||||
2. Generate 4 best-effort branch name suggestions based on changes:
|
||||
- Use format: `feature/descriptive-name`, `fix/descriptive-name`, or `refactor/descriptive-name`
|
||||
- Make names concise but descriptive (2-4 words max)
|
||||
- Vary the suggestions to give different perspectives on the changes
|
||||
3. Ask user to choose branch name using AskUserQuestion:
|
||||
- Question: "You're on the main/master branch. Choose a branch name:"
|
||||
- Options: Present the 4 generated branch names as options
|
||||
- Note: User can always select "Other" to provide custom branch name
|
||||
4. Create and checkout new branch: `git checkout -b <chosen-branch-name>`
|
||||
|
||||
**If on any other branch:** Proceed to Step 1.
|
||||
|
||||
## Step 1: Analyze Changes
|
||||
|
||||
Run `git status` and `git diff` to analyze all changes:
|
||||
- Identify files modified/created by Claude in current session
|
||||
- Identify unstaged/untracked files NOT modified by Claude
|
||||
- Review conversation context to detect if session involved multiple distinct tasks (separate features, fixes, or refactorings discussed/implemented)
|
||||
|
||||
## Step 2: Commit Strategy Questions
|
||||
|
||||
If you detect multiple distinct tasks from conversation context, ask user using AskUserQuestion tool (both questions in same group):
|
||||
|
||||
**Question 1** (always ask if multiple tasks detected):
|
||||
- "How should I commit these changes?"
|
||||
- "Single commit" - Commit all changes together
|
||||
- "Multiple logical commits" - Create separate commits for each distinct task/feature
|
||||
|
||||
**Question 2** (ask ONLY if unstaged/untracked files exist that Claude didn't modify):
|
||||
- "There are uncommitted changes not made in this session. Include them?"
|
||||
- "Yes, include all changes" - Stage and commit everything
|
||||
- "No, only Claude's changes" - Commit only files Claude modified
|
||||
- "Let me review first" - Show list of files and stop
|
||||
|
||||
## Step 3: Create Commits
|
||||
|
||||
**Commit Message Rules:**
|
||||
- **Style**: Concise, factual, savant-like. State what was done, not why (unless discussed during implementation)
|
||||
- **Simple changes**: Title only (no description)
|
||||
- **Complex changes**: Title + description
|
||||
- Description adds context about what was changed
|
||||
- Use facts, avoid self-praise adjectives ("improved", "optimized", "enhanced")
|
||||
- Only state intents if explicitly discussed during implementation
|
||||
- **Hard limit**: 80 words total
|
||||
- **Format**: Always use heredoc for commit message
|
||||
|
||||
**Examples:**
|
||||
```bash
|
||||
# Simple change
|
||||
git commit -m "$(cat <<'EOF'
|
||||
Add user authentication middleware
|
||||
EOF
|
||||
)"
|
||||
|
||||
# Complex change
|
||||
git commit -m "$(cat <<'EOF'
|
||||
Refactor database connection pooling
|
||||
|
||||
Extracted connection logic into separate module. Added retry mechanism
|
||||
for failed connections. Configured pool size based on environment variables.
|
||||
EOF
|
||||
)"
|
||||
```
|
||||
|
||||
If creating multiple logical commits:
|
||||
- Create commits in chronological order of implementation
|
||||
- Each commit should be self-contained and logical
|
||||
- Follow same message rules for each commit
|
||||
|
||||
## Step 4: Push Branch
|
||||
|
||||
Check if force-push is needed (`git status` shows diverged branch).
|
||||
|
||||
**If force-push required**: Ask user for confirmation before proceeding.
|
||||
|
||||
**Otherwise**: Auto-push with `git push -u origin <branch-name>`
|
||||
|
||||
**On push failure**: Explain error and ask if you should retry with alternative approach.
|
||||
|
||||
## Step 5: Create Pull Request
|
||||
|
||||
**PR Title**: Use title from commit message (if single commit) or summarize all commits (if multiple)
|
||||
|
||||
**PR Description Rules:**
|
||||
- **Always include description** (even for simple changes)
|
||||
- Same style as commit messages: factual, concise, savant-like
|
||||
- For single commit: Expand on commit message with more context
|
||||
- For multiple commits: List key changes made across commits
|
||||
- Avoid self-praise language, state facts only
|
||||
- **Hard limit**: 150 words
|
||||
|
||||
**PR Metadata:**
|
||||
- Auto-detect default branch (main/master) as base
|
||||
- If `draft` parameter passed: add `--draft` flag
|
||||
- No labels/reviewers unless user specifies
|
||||
|
||||
**Create PR:**
|
||||
```bash
|
||||
gh pr create --title "PR title" --body "$(cat <<'EOF'
|
||||
PR description content here.
|
||||
EOF
|
||||
)" [--draft]
|
||||
```
|
||||
|
||||
**On PR creation failure**: Explain error and ask if you should retry with alternative approach.
|
||||
|
||||
## Step 6: Open PR Page
|
||||
|
||||
After successful PR creation, extract PR URL from `gh` output and open it:
|
||||
```bash
|
||||
xdg-open <PR_URL>
|
||||
```
|
||||
|
||||
## Error Handling
|
||||
|
||||
If any step fails:
|
||||
1. Explain what went wrong clearly
|
||||
2. Provide the specific error message
|
||||
3. Ask user if you should retry with an alternative approach
|
||||
4. If user confirms, attempt automatic fix or provide manual commands
|
||||
|
||||
## Final Output
|
||||
|
||||
After successful completion, output:
|
||||
- Commit SHA(s)
|
||||
- Branch name
|
||||
- PR URL
|
||||
- Confirmation that PR page was opened
|
||||
49
plugin.lock.json
Normal file
49
plugin.lock.json
Normal file
@@ -0,0 +1,49 @@
|
||||
{
|
||||
"$schema": "internal://schemas/plugin.lock.v1.json",
|
||||
"pluginId": "gh:sevos/claude-code-marketplace:plugins/git",
|
||||
"normalized": {
|
||||
"repo": null,
|
||||
"ref": "refs/tags/v20251128.0",
|
||||
"commit": "12d6fc29f9fab9df21d0822f31d82a4ac10413f1",
|
||||
"treeHash": "266839ff0b4fe1648351e7d5f2ee337fca9dc23459fc7b4f9570d8bf0e73f8ed",
|
||||
"generatedAt": "2025-11-28T10:28:16.729774Z",
|
||||
"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": "git",
|
||||
"description": "Set of commands, skills, and agents to manage git projects",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
"content": {
|
||||
"files": [
|
||||
{
|
||||
"path": "README.md",
|
||||
"sha256": "da8d8a64f47db900adc12c803a95c7945a3160666644f313900ff2c4964a4c8c"
|
||||
},
|
||||
{
|
||||
"path": ".claude-plugin/plugin.json",
|
||||
"sha256": "055fc063062226270d66ae396952951f581b5f0e2b8cfab0df9012fb8b33ba81"
|
||||
},
|
||||
{
|
||||
"path": "commands/open-pr.md",
|
||||
"sha256": "f607fa9343367ba3852335e99a10b0757c2a677375c7e4ba58b4fee19348d2e9"
|
||||
},
|
||||
{
|
||||
"path": "commands/commit.md",
|
||||
"sha256": "978e46cda7c9f82b4cb205003990758fc47129cdb330505d829d5006145c71f3"
|
||||
}
|
||||
],
|
||||
"dirSha256": "266839ff0b4fe1648351e7d5f2ee337fca9dc23459fc7b4f9570d8bf0e73f8ed"
|
||||
},
|
||||
"security": {
|
||||
"scannedAt": null,
|
||||
"scannerVersion": null,
|
||||
"flags": []
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user