|
|
|
@ -7,13 +7,26 @@ description: > |
|
|
|
license: GPL-3.0 |
|
|
|
license: GPL-3.0 |
|
|
|
metadata: |
|
|
|
metadata: |
|
|
|
author: riyyi |
|
|
|
author: riyyi |
|
|
|
version: "1.0" |
|
|
|
version: "1.1" |
|
|
|
--- |
|
|
|
--- |
|
|
|
|
|
|
|
|
|
|
|
Make a git commit, distinguishing between user and AI contributions. |
|
|
|
Make a git commit, distinguishing between user and AI contributions. |
|
|
|
|
|
|
|
|
|
|
|
--- |
|
|
|
--- |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
**Commit message format** |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
A valid commit message consists of a required **title** and an optional **body**: |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Rules: |
|
|
|
|
|
|
|
- **Title** (required): max 72 characters, starts with a capital letter — |
|
|
|
|
|
|
|
unless referring to a tool/project that explicitly uses lowercase (e.g., |
|
|
|
|
|
|
|
"go", "npm", "rustc"). No trailing period. |
|
|
|
|
|
|
|
- **Body** (optional): any further elaboration. Each line max 72 characters. |
|
|
|
|
|
|
|
Wrap manually — do not rely on the terminal to wrap. |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
--- |
|
|
|
|
|
|
|
|
|
|
|
**Steps** |
|
|
|
**Steps** |
|
|
|
|
|
|
|
|
|
|
|
1. **[REQUIRED] Ask user if this commit is by them or by AI** |
|
|
|
1. **[REQUIRED] Ask user if this commit is by them or by AI** |
|
|
|
@ -25,50 +38,63 @@ Make a git commit, distinguishing between user and AI contributions. |
|
|
|
- "By me" - User made the commit |
|
|
|
- "By me" - User made the commit |
|
|
|
- "By AI" - AI made the commit |
|
|
|
- "By AI" - AI made the commit |
|
|
|
|
|
|
|
|
|
|
|
2. **Check for commit message** |
|
|
|
2. **Compose the commit message** |
|
|
|
|
|
|
|
|
|
|
|
**Commit message formatting rule**: Commit messages should start with a |
|
|
|
|
|
|
|
capital letter, unless it refers to a tool or project that explicitly uses |
|
|
|
|
|
|
|
lowercase as its name (e.g., "go", "npm", "rustc"). They must adhere to the |
|
|
|
|
|
|
|
72-character wide title plus (optional) description convention. |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
If the user did NOT provide a commit message, generate one from staged changes: |
|
|
|
If the user did NOT provide a commit message, generate one from staged |
|
|
|
|
|
|
|
changes: |
|
|
|
```bash |
|
|
|
```bash |
|
|
|
git --no-pager diff --staged |
|
|
|
git --no-pager diff --staged |
|
|
|
``` |
|
|
|
``` |
|
|
|
Create a reasonable commit message based on the changes. |
|
|
|
Write a commit message following the format above. |
|
|
|
|
|
|
|
|
|
|
|
If the user **DID** provide a message, format it into a proper commit message. |
|
|
|
If the user **DID** provide a message, treat it as raw input and apply the |
|
|
|
|
|
|
|
format rules to it. |
|
|
|
|
|
|
|
|
|
|
|
3. **Show commit message and confirm** |
|
|
|
3. **Validate the commit message** |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Before presenting the message to the user, check it against every rule: |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
- [ ] Title is present and non-empty |
|
|
|
|
|
|
|
- [ ] Title is at most 72 characters |
|
|
|
|
|
|
|
- [ ] Title starts with a capital letter (or an intentionally lowercase name) |
|
|
|
|
|
|
|
- [ ] Title has no trailing period |
|
|
|
|
|
|
|
- [ ] Every line in the body is at most 72 characters |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Fix any violations silently before showing the message to the user. |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
4. **Show commit message and confirm** |
|
|
|
|
|
|
|
|
|
|
|
Use the **question tool** to ask: |
|
|
|
Use the **question tool** to ask: |
|
|
|
> "Is this commit message okay, or would you like to make tweaks?" |
|
|
|
> "Is this commit message okay, or would you like to make tweaks?" |
|
|
|
|
|
|
|
> ``` |
|
|
|
> <message> |
|
|
|
> <message> |
|
|
|
|
|
|
|
> ``` |
|
|
|
|
|
|
|
|
|
|
|
Options: |
|
|
|
Options: |
|
|
|
- "Looks good" - Proceed with this message |
|
|
|
- "Looks good" - Proceed with this message |
|
|
|
- "Make tweaks" - User will provide a new message |
|
|
|
- "Make tweaks" - User will provide a new message or describe changes |
|
|
|
|
|
|
|
|
|
|
|
**If user wants tweaks**: Ask them for the new commit message. |
|
|
|
**If user wants tweaks**: apply the same validation (step 3) to the revised |
|
|
|
|
|
|
|
message before committing. |
|
|
|
|
|
|
|
|
|
|
|
4. **Make the commit** |
|
|
|
5. **Make the commit** |
|
|
|
|
|
|
|
|
|
|
|
Use the commit message provided by the user. |
|
|
|
For a title-only message: |
|
|
|
|
|
|
|
```bash |
|
|
|
|
|
|
|
git commit -m "<title>" |
|
|
|
|
|
|
|
``` |
|
|
|
|
|
|
|
|
|
|
|
**If by user:** |
|
|
|
For a message with a body, pass `-m` twice (git inserts the blank line): |
|
|
|
```bash |
|
|
|
```bash |
|
|
|
git commit -m "<message>" |
|
|
|
git commit -m "<title>" -m "<body>" |
|
|
|
``` |
|
|
|
``` |
|
|
|
(Uses git config user as both committer and author) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
**If by AI:** |
|
|
|
Append `--author="AI Bot <ai@local>"` when the commit is by AI: |
|
|
|
```bash |
|
|
|
```bash |
|
|
|
git commit -m "<message>" --author="AI Bot <ai@local>" |
|
|
|
git commit -m "<title>" [-m "<body>"] --author="AI Bot <ai@local>" |
|
|
|
``` |
|
|
|
``` |
|
|
|
(Uses git config for committer, but sets author to AI Bot) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
**Output** |
|
|
|
**Output** |
|
|
|
|
|
|
|
|
|
|
|
- Tell user the commit was made |
|
|
|
- Tell user the commit was made. |
|
|
|
- If AI commit, mention that the author was set to "AI Bot <ai@local>" |
|
|
|
- If AI commit, mention that the author was set to "AI Bot <ai@local>". |
|
|
|
|