|
|
@@ -2,14 +2,14 @@
|
|
|
|
|
|
|
|
|
|
|
|
# gai
|
|
|
|
# gai
|
|
|
|
|
|
|
|
|
|
|
|
**AI-powered git commit message generator**
|
|
|
|
**AI-powered Git commit and pull request helper**
|
|
|
|
|
|
|
|
|
|
|
|
[](https://github.com/mplan/git-ai)
|
|
|
|
[](https://git.catpl.top/Mplan/gai/releases)
|
|
|
|
[](./LICENSE)
|
|
|
|
[](./LICENSE)
|
|
|
|
[](https://bun.sh)
|
|
|
|
[](https://bun.sh)
|
|
|
|
[](https://www.typescriptlang.org/)
|
|
|
|
[](https://www.typescriptlang.org/)
|
|
|
|
|
|
|
|
|
|
|
|
Generate **Conventional Commits** messages using AI — based on your project context, code diff, and commit history.
|
|
|
|
Generate **Conventional Commits** messages and pull request descriptions using AI, based on your project context, code diff, branch changes, and commit history.
|
|
|
|
|
|
|
|
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
|
|
|
|
|
|
|
@@ -18,13 +18,14 @@ Generate **Conventional Commits** messages using AI — based on your project co
|
|
|
|
## Features
|
|
|
|
## Features
|
|
|
|
|
|
|
|
|
|
|
|
- **Interactive menu** — `gai` opens a menu, select actions with ↑/↓ + space/enter
|
|
|
|
- **Interactive menu** — `gai` opens a menu, select actions with ↑/↓ + space/enter
|
|
|
|
- **3-layer context** — project overview, staged diff, and recent commit history
|
|
|
|
- **Context-aware commits** — reads project overview, staged diff, and recent commit history
|
|
|
|
- **Conventional Commits** — `feat(scope): description` format by default
|
|
|
|
- **Conventional Commits** — `feat(scope): description` format by default
|
|
|
|
- **Interactive file selection** — ↑/↓ to navigate, space to select, top-level "Select all"
|
|
|
|
- **Interactive file selection** — ↑/↓ to navigate, space to select, top-level "Select all"
|
|
|
|
- **Inline editing** — edit AI-generated messages right in the terminal with cursor movement
|
|
|
|
- **Inline editing** — edit AI-generated messages right in the terminal with cursor movement
|
|
|
|
- **OpenAI-compatible API** — works with DeepSeek, OpenAI, Ollama, and more
|
|
|
|
- **AI-generated PRs** — create GitHub or Gitea pull requests with generated title and body
|
|
|
|
|
|
|
|
- **OpenAI-compatible API** — works with DeepSeek, OpenAI, Ollama, OpenRouter, and more
|
|
|
|
- **Review before commit** — confirm, edit, or abort the generated message
|
|
|
|
- **Review before commit** — confirm, edit, or abort the generated message
|
|
|
|
- **Zero dependencies** — built entirely on Bun native APIs
|
|
|
|
- **Bun-native runtime** — built on Bun APIs with no runtime npm dependencies
|
|
|
|
|
|
|
|
|
|
|
|
## Quick Start
|
|
|
|
## Quick Start
|
|
|
|
|
|
|
|
|
|
|
@@ -40,6 +41,9 @@ gai
|
|
|
|
|
|
|
|
|
|
|
|
# Or directly generate a commit message
|
|
|
|
# Or directly generate a commit message
|
|
|
|
gai commit
|
|
|
|
gai commit
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
# Or create an AI-generated pull request
|
|
|
|
|
|
|
|
gai pr
|
|
|
|
```
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
## Usage
|
|
|
|
## Usage
|
|
|
@@ -49,6 +53,8 @@ gai Open interactive menu
|
|
|
|
gai commit Generate commit message (interactive file selection)
|
|
|
|
gai commit Generate commit message (interactive file selection)
|
|
|
|
gai commit --auto Auto-stage all changed files
|
|
|
|
gai commit --auto Auto-stage all changed files
|
|
|
|
gai commit -d Generate message without committing
|
|
|
|
gai commit -d Generate message without committing
|
|
|
|
|
|
|
|
gai pr Create a PR with AI-generated title and body
|
|
|
|
|
|
|
|
gai pr --draft Create a draft PR
|
|
|
|
gai config Configure API settings
|
|
|
|
gai config Configure API settings
|
|
|
|
gai --help Show help
|
|
|
|
gai --help Show help
|
|
|
|
gai --version Show version
|
|
|
|
gai --version Show version
|
|
|
@@ -96,6 +102,21 @@ $ gai commit
|
|
|
|
1 file changed, 45 insertions(+), 12 deletions(-)
|
|
|
|
1 file changed, 45 insertions(+), 12 deletions(-)
|
|
|
|
```
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
### Pull Request Flow
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
`gai pr` detects the remote platform from `origin`:
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
- GitHub remotes use the `gh` CLI
|
|
|
|
|
|
|
|
- Gitea remotes use the `tea` CLI
|
|
|
|
|
|
|
|
- Unknown remotes prompt you to choose a platform
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
The command compares your current branch against the default branch, pushes the branch if needed, generates a PR title/body from the branch commits and diff, then asks for confirmation before creating the PR.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
```bash
|
|
|
|
|
|
|
|
gai pr
|
|
|
|
|
|
|
|
gai pr --draft
|
|
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
## Configuration
|
|
|
|
## Configuration
|
|
|
|
|
|
|
|
|
|
|
|
### Via `gai config` (interactive)
|
|
|
|
### Via `gai config` (interactive)
|
|
|
@@ -110,7 +131,7 @@ gai config
|
|
|
|
|---|---|---|
|
|
|
|
|---|---|---|
|
|
|
|
| `GAI_API_KEY` | — | **Required.** Your API key |
|
|
|
|
| `GAI_API_KEY` | — | **Required.** Your API key |
|
|
|
|
| `GAI_API_BASE` | `https://api.deepseek.com/v1` | API base URL |
|
|
|
|
| `GAI_API_BASE` | `https://api.deepseek.com/v1` | API base URL |
|
|
|
|
| `GAI_MODEL` | `deepseek-chat` | Model name |
|
|
|
|
| `GAI_MODEL` | `deepseek-v4-flash` | Model name |
|
|
|
|
| `GAI_MAX_TOKENS` | `500` | Max response tokens |
|
|
|
|
| `GAI_MAX_TOKENS` | `500` | Max response tokens |
|
|
|
|
| `GAI_TEMPERATURE` | `0.7` | Sampling temperature |
|
|
|
|
| `GAI_TEMPERATURE` | `0.7` | Sampling temperature |
|
|
|
|
|
|
|
|
|
|
|
@@ -121,7 +142,7 @@ Bun auto-loads `.env` — no dotenv needed:
|
|
|
|
```bash
|
|
|
|
```bash
|
|
|
|
GAI_API_KEY=sk-your-key
|
|
|
|
GAI_API_KEY=sk-your-key
|
|
|
|
GAI_API_BASE=https://api.deepseek.com/v1
|
|
|
|
GAI_API_BASE=https://api.deepseek.com/v1
|
|
|
|
GAI_MODEL=deepseek-chat
|
|
|
|
GAI_MODEL=deepseek-v4-flash
|
|
|
|
```
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
### Using other providers
|
|
|
|
### Using other providers
|
|
|
@@ -170,14 +191,16 @@ GAI_MODEL=anthropic/claude-sonnet-4
|
|
|
|
│ └─ Directory structure │
|
|
|
|
│ └─ Directory structure │
|
|
|
|
│ │
|
|
|
|
│ │
|
|
|
|
│ 2. Collect code changes │
|
|
|
|
│ 2. Collect code changes │
|
|
|
|
│ └─ git diff --staged │
|
|
|
|
│ ├─ git diff --staged for commits │
|
|
|
|
|
|
|
|
│ └─ branch diff for pull requests │
|
|
|
|
│ │
|
|
|
|
│ │
|
|
|
|
│ 3. Collect commit history │
|
|
|
|
│ 3. Collect commit history │
|
|
|
|
│ └─ git log --oneline -10 │
|
|
|
|
│ ├─ git log --oneline -10 for commits │
|
|
|
|
|
|
|
|
│ └─ branch commits for pull requests │
|
|
|
|
│ │
|
|
|
|
│ │
|
|
|
|
│ 4. Build prompt → Call AI API │
|
|
|
|
│ 4. Build prompt → Call AI API │
|
|
|
|
│ │
|
|
|
|
│ │
|
|
|
|
│ 5. Review → Confirm → Commit │
|
|
|
|
│ 5. Review → Confirm → Commit or Create PR │
|
|
|
|
└─────────────────────────────────────────────┘
|
|
|
|
└─────────────────────────────────────────────┘
|
|
|
|
```
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|