gac 0.17.2__py3-none-any.whl → 3.6.0__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- gac/__version__.py +1 -1
- gac/ai.py +69 -123
- gac/ai_utils.py +227 -0
- gac/auth_cli.py +69 -0
- gac/cli.py +87 -19
- gac/config.py +13 -7
- gac/config_cli.py +26 -5
- gac/constants.py +176 -5
- gac/errors.py +14 -0
- gac/git.py +207 -11
- gac/init_cli.py +52 -29
- gac/language_cli.py +378 -0
- gac/main.py +922 -189
- gac/model_cli.py +374 -0
- gac/oauth/__init__.py +1 -0
- gac/oauth/claude_code.py +397 -0
- gac/preprocess.py +5 -5
- gac/prompt.py +656 -219
- gac/providers/__init__.py +88 -0
- gac/providers/anthropic.py +51 -0
- gac/providers/azure_openai.py +97 -0
- gac/providers/cerebras.py +38 -0
- gac/providers/chutes.py +71 -0
- gac/providers/claude_code.py +102 -0
- gac/providers/custom_anthropic.py +133 -0
- gac/providers/custom_openai.py +98 -0
- gac/providers/deepseek.py +38 -0
- gac/providers/fireworks.py +38 -0
- gac/providers/gemini.py +87 -0
- gac/providers/groq.py +63 -0
- gac/providers/kimi_coding.py +63 -0
- gac/providers/lmstudio.py +59 -0
- gac/providers/minimax.py +38 -0
- gac/providers/mistral.py +38 -0
- gac/providers/moonshot.py +38 -0
- gac/providers/ollama.py +50 -0
- gac/providers/openai.py +38 -0
- gac/providers/openrouter.py +58 -0
- gac/providers/replicate.py +98 -0
- gac/providers/streamlake.py +51 -0
- gac/providers/synthetic.py +42 -0
- gac/providers/together.py +38 -0
- gac/providers/zai.py +59 -0
- gac/security.py +293 -0
- gac/utils.py +243 -4
- gac/workflow_utils.py +222 -0
- gac-3.6.0.dist-info/METADATA +281 -0
- gac-3.6.0.dist-info/RECORD +53 -0
- {gac-0.17.2.dist-info → gac-3.6.0.dist-info}/WHEEL +1 -1
- {gac-0.17.2.dist-info → gac-3.6.0.dist-info}/licenses/LICENSE +1 -1
- gac-0.17.2.dist-info/METADATA +0 -221
- gac-0.17.2.dist-info/RECORD +0 -20
- {gac-0.17.2.dist-info → gac-3.6.0.dist-info}/entry_points.txt +0 -0
|
@@ -0,0 +1,281 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: gac
|
|
3
|
+
Version: 3.6.0
|
|
4
|
+
Summary: LLM-powered Git commit message generator with multi-provider support
|
|
5
|
+
Project-URL: Homepage, https://github.com/cellwebb/gac
|
|
6
|
+
Project-URL: Documentation, https://github.com/cellwebb/gac#readme
|
|
7
|
+
Project-URL: Repository, https://github.com/cellwebb/gac.git
|
|
8
|
+
Project-URL: Issues, https://github.com/cellwebb/gac/issues
|
|
9
|
+
Project-URL: Changelog, https://github.com/cellwebb/gac/blob/main/CHANGELOG.md
|
|
10
|
+
Project-URL: Source, https://github.com/cellwebb/gac
|
|
11
|
+
Author-email: cellwebb <cellwebb@users.noreply.github.com>
|
|
12
|
+
License-Expression: MIT
|
|
13
|
+
License-File: LICENSE
|
|
14
|
+
Classifier: Development Status :: 4 - Beta
|
|
15
|
+
Classifier: Programming Language :: Python
|
|
16
|
+
Classifier: Programming Language :: Python :: 3.10
|
|
17
|
+
Classifier: Programming Language :: Python :: 3.11
|
|
18
|
+
Classifier: Programming Language :: Python :: 3.12
|
|
19
|
+
Classifier: Programming Language :: Python :: 3.13
|
|
20
|
+
Classifier: Programming Language :: Python :: 3.14
|
|
21
|
+
Classifier: Programming Language :: Python :: Implementation :: CPython
|
|
22
|
+
Classifier: Programming Language :: Python :: Implementation :: PyPy
|
|
23
|
+
Requires-Python: >=3.10
|
|
24
|
+
Requires-Dist: click>=8.3.0
|
|
25
|
+
Requires-Dist: httpcore>=1.0.9
|
|
26
|
+
Requires-Dist: httpx>=0.28.0
|
|
27
|
+
Requires-Dist: prompt-toolkit>=3.0.36
|
|
28
|
+
Requires-Dist: pydantic>=2.12.0
|
|
29
|
+
Requires-Dist: python-dotenv>=1.1.1
|
|
30
|
+
Requires-Dist: questionary
|
|
31
|
+
Requires-Dist: rich>=14.1.0
|
|
32
|
+
Requires-Dist: tiktoken>=0.12.0
|
|
33
|
+
Provides-Extra: dev
|
|
34
|
+
Requires-Dist: build; extra == 'dev'
|
|
35
|
+
Requires-Dist: codecov; extra == 'dev'
|
|
36
|
+
Requires-Dist: pytest; extra == 'dev'
|
|
37
|
+
Requires-Dist: pytest-cov; extra == 'dev'
|
|
38
|
+
Requires-Dist: ruff; extra == 'dev'
|
|
39
|
+
Requires-Dist: twine; extra == 'dev'
|
|
40
|
+
Description-Content-Type: text/markdown
|
|
41
|
+
|
|
42
|
+
<!-- markdownlint-disable MD013 -->
|
|
43
|
+
<!-- markdownlint-disable MD033 MD036 -->
|
|
44
|
+
|
|
45
|
+
<div align="center">
|
|
46
|
+
|
|
47
|
+
# 🚀 Git Auto Commit (gac)
|
|
48
|
+
|
|
49
|
+
[](https://pypi.org/project/gac/)
|
|
50
|
+
[](https://www.python.org/downloads/)
|
|
51
|
+
[](https://github.com/cellwebb/gac/actions)
|
|
52
|
+
[](https://app.codecov.io/gh/cellwebb/gac)
|
|
53
|
+
[](https://github.com/astral-sh/ruff)
|
|
54
|
+
[](https://mypy-lang.org/)
|
|
55
|
+
[](docs/en/CONTRIBUTING.md)
|
|
56
|
+
[](LICENSE)
|
|
57
|
+
|
|
58
|
+
**English** | [简体中文](docs/zh-CN/README.md) | [繁體中文](docs/zh-TW/README.md) | [日本語](docs/ja/README.md) | [한국어](docs/ko/README.md) | [हिन्दी](docs/hi/README.md) | [Tiếng Việt](docs/vi/README.md) | [Français](docs/fr/README.md) | [Русский](docs/ru/README.md) | [Español](docs/es/README.md) | [Português](docs/pt/README.md) | [Norsk](docs/no/README.md) | [Svenska](docs/sv/README.md) | [Deutsch](docs/de/README.md) | [Nederlands](docs/nl/README.md) | [Italiano](docs/it/README.md)
|
|
59
|
+
|
|
60
|
+
**LLM-powered commit messages that understand your code!**
|
|
61
|
+
|
|
62
|
+
**Automate your commits!** Replace `git commit -m "..."` with `gac` for contextual, well-formatted commit messages generated by large language models!
|
|
63
|
+
|
|
64
|
+
---
|
|
65
|
+
|
|
66
|
+
## What You Get
|
|
67
|
+
|
|
68
|
+
Intelligent, contextual messages that explain the **why** behind your changes:
|
|
69
|
+
|
|
70
|
+

|
|
71
|
+
|
|
72
|
+
---
|
|
73
|
+
|
|
74
|
+
</div>
|
|
75
|
+
|
|
76
|
+
<!-- markdownlint-enable MD033 MD036 -->
|
|
77
|
+
|
|
78
|
+
## Quick Start
|
|
79
|
+
|
|
80
|
+
### Use gac without installing
|
|
81
|
+
|
|
82
|
+
```bash
|
|
83
|
+
uvx gac init # Configure your provider, model, and language
|
|
84
|
+
uvx gac # Generate and commit with LLM
|
|
85
|
+
```
|
|
86
|
+
|
|
87
|
+
That's it! Review the generated message and confirm with `y`.
|
|
88
|
+
|
|
89
|
+
### Install and use gac
|
|
90
|
+
|
|
91
|
+
```bash
|
|
92
|
+
uv tool install gac
|
|
93
|
+
gac init
|
|
94
|
+
gac
|
|
95
|
+
```
|
|
96
|
+
|
|
97
|
+
### Upgrade installed gac
|
|
98
|
+
|
|
99
|
+
```bash
|
|
100
|
+
uv tool upgrade gac
|
|
101
|
+
```
|
|
102
|
+
|
|
103
|
+
---
|
|
104
|
+
|
|
105
|
+
## Key Features
|
|
106
|
+
|
|
107
|
+
### 🌐 **25+ Supported Providers**
|
|
108
|
+
|
|
109
|
+
- **Anthropic** • **Azure OpenAI** • **Cerebras** • **Chutes.ai** • **Claude Code (OAuth)**
|
|
110
|
+
- **DeepSeek** • **Fireworks** • **Gemini** • **Groq** • **Kimi for Coding** • **LM Studio**
|
|
111
|
+
- **MiniMax.io** • **Mistral AI** • **Moonshot AI** • **Ollama** • **OpenAI** • **OpenRouter**
|
|
112
|
+
- **Replicate** • **Streamlake** • **Synthetic.new** • **Together AI** • **Z.AI** • **Z.AI Coding**
|
|
113
|
+
- **Custom Endpoints (Anthropic/OpenAI)**
|
|
114
|
+
|
|
115
|
+
### 🧠 **Smart LLM Analysis**
|
|
116
|
+
|
|
117
|
+
- **Understands intent**: Analyzes code structure, logic, and patterns to understand the "why" behind your changes, not just what changed
|
|
118
|
+
- **Semantic awareness**: Recognizes refactoring, bug fixes, features, and breaking changes to generate contextually appropriate messages
|
|
119
|
+
- **Intelligent filtering**: Prioritizes meaningful changes while ignoring generated files, dependencies, and artifacts
|
|
120
|
+
- **Intelligent commit grouping** - Automatically group related changes into multiple logical commits with `--group`
|
|
121
|
+
|
|
122
|
+
### 📝 **Multiple Message Formats**
|
|
123
|
+
|
|
124
|
+
- **One-liner** (-o flag): Single-line commit message following conventional commit format
|
|
125
|
+
- **Standard** (default): Summary with bullet points explaining implementation details
|
|
126
|
+
- **Verbose** (-v flag): Comprehensive explanations including motivation, technical approach, and impact analysis
|
|
127
|
+
|
|
128
|
+
### 🌍 **Multilingual Support**
|
|
129
|
+
|
|
130
|
+
- **25+ languages**: Generate commit messages in English, Chinese, Japanese, Korean, Spanish, French, German, and 20+ more languages
|
|
131
|
+
- **Flexible translation**: Choose to keep conventional commit prefixes in English for tool compatibility, or fully translate them
|
|
132
|
+
- **Multiple workflows**: Set a default language with `gac language`, or use `-l <language>` flag for one-time overrides
|
|
133
|
+
- **Native script support**: Full support for non-Latin scripts including CJK, Cyrillic, Thai, and more
|
|
134
|
+
|
|
135
|
+
### 💻 **Developer Experience**
|
|
136
|
+
|
|
137
|
+
- **Interactive feedback**: Type `r` to reroll, `e` to edit in-place with vi/emacs keybindings, or directly type your feedback like `make it shorter` or `focus on the bug fix`
|
|
138
|
+
- **Interactive questioning**: Use `--interactive` (`-i`) to answer targeted questions about your changes for more contextual commit messages
|
|
139
|
+
- **One-command workflows**: Complete workflows with flags like `gac -ayp` (stage all, auto-confirm, push)
|
|
140
|
+
- **Git integration**: Respects pre-commit and lefthook hooks, running them before expensive LLM operations
|
|
141
|
+
|
|
142
|
+
### 🛡️ **Built-in Security**
|
|
143
|
+
|
|
144
|
+
- **Automatic secret detection**: Scans for API keys, passwords, and tokens before committing
|
|
145
|
+
- **Interactive protection**: Prompts before committing potentially sensitive data with clear remediation options
|
|
146
|
+
- **Smart filtering**: Ignores example files, template files, and placeholder text to reduce false positives
|
|
147
|
+
|
|
148
|
+
---
|
|
149
|
+
|
|
150
|
+
## Usage Examples
|
|
151
|
+
|
|
152
|
+
### Basic Workflow
|
|
153
|
+
|
|
154
|
+
```bash
|
|
155
|
+
# Stage your changes
|
|
156
|
+
git add .
|
|
157
|
+
|
|
158
|
+
# Generate and commit with LLM
|
|
159
|
+
gac
|
|
160
|
+
|
|
161
|
+
# Review → y (commit) | n (cancel) | r (reroll) | e (edit) | or type feedback
|
|
162
|
+
```
|
|
163
|
+
|
|
164
|
+
### Common Commands
|
|
165
|
+
|
|
166
|
+
| Command | Description |
|
|
167
|
+
| --------------- | ----------------------------------------------------------------------- |
|
|
168
|
+
| `gac` | Generate commit message |
|
|
169
|
+
| `gac -y` | Auto-confirm (no review needed) |
|
|
170
|
+
| `gac -a` | Stage all before generating commit message |
|
|
171
|
+
| `gac -o` | One-line message for trivial changes |
|
|
172
|
+
| `gac -v` | Verbose format with Motivation, Technical Approach, and Impact Analysis |
|
|
173
|
+
| `gac -h "hint"` | Add context for LLM (e.g., `gac -h "bug fix"`) |
|
|
174
|
+
| `gac -s` | Include scope (e.g., feat(auth):) |
|
|
175
|
+
| `gac -i` | Ask questions about changes for better context |
|
|
176
|
+
| `gac -p` | Commit and push |
|
|
177
|
+
|
|
178
|
+
### Power User Examples
|
|
179
|
+
|
|
180
|
+
```bash
|
|
181
|
+
# Complete workflow in one command
|
|
182
|
+
gac -ayp -h "release preparation"
|
|
183
|
+
|
|
184
|
+
# Detailed explanation with scope
|
|
185
|
+
gac -v -s
|
|
186
|
+
|
|
187
|
+
# Quick one-liner for small changes
|
|
188
|
+
gac -o
|
|
189
|
+
|
|
190
|
+
# Group changes into logically related commits
|
|
191
|
+
gac -ag
|
|
192
|
+
|
|
193
|
+
# Interactive mode with verbose output for detailed explanations
|
|
194
|
+
gac -iv
|
|
195
|
+
|
|
196
|
+
# Debug what the LLM sees
|
|
197
|
+
gac --show-prompt
|
|
198
|
+
|
|
199
|
+
# Skip security scan (use carefully)
|
|
200
|
+
gac --skip-secret-scan
|
|
201
|
+
```
|
|
202
|
+
|
|
203
|
+
### Interactive Feedback System
|
|
204
|
+
|
|
205
|
+
Not happy with the result? You have several options:
|
|
206
|
+
|
|
207
|
+
```bash
|
|
208
|
+
# Simple reroll (no feedback)
|
|
209
|
+
r
|
|
210
|
+
|
|
211
|
+
# Edit in-place with rich terminal editing
|
|
212
|
+
e
|
|
213
|
+
# Uses prompt_toolkit for multi-line editing with vi/emacs keybindings
|
|
214
|
+
# Press Esc+Enter or Ctrl+S to submit, Ctrl+C to cancel
|
|
215
|
+
|
|
216
|
+
# Or just type your feedback directly!
|
|
217
|
+
make it shorter and focus on the performance improvement
|
|
218
|
+
use conventional commit format with scope
|
|
219
|
+
explain the security implications
|
|
220
|
+
|
|
221
|
+
# Press Enter on empty input to see the prompt again
|
|
222
|
+
```
|
|
223
|
+
|
|
224
|
+
The edit feature (`e`) provides rich in-place terminal editing, allowing you to:
|
|
225
|
+
|
|
226
|
+
- **Edit naturally**: Multi-line editing with familiar vi/emacs key bindings
|
|
227
|
+
- **Make quick fixes**: Correct typos, adjust wording, or refine formatting
|
|
228
|
+
- **Add details**: Include information the LLM might have missed
|
|
229
|
+
- **Restructure**: Reorganize bullet points or change the message structure
|
|
230
|
+
|
|
231
|
+
---
|
|
232
|
+
|
|
233
|
+
## Configuration
|
|
234
|
+
|
|
235
|
+
Run `gac init` to configure your provider interactively, or set environment variables:
|
|
236
|
+
|
|
237
|
+
Need to change providers or models later without touching language settings? Use `gac model` for a streamlined flow that skips the language prompts.
|
|
238
|
+
|
|
239
|
+
```bash
|
|
240
|
+
# Example configuration
|
|
241
|
+
GAC_MODEL=anthropic:your-model-name
|
|
242
|
+
OPENAI_API_KEY=your_key_here
|
|
243
|
+
ANTHROPIC_API_KEY=your_key_here
|
|
244
|
+
```
|
|
245
|
+
|
|
246
|
+
See `.gac.env.example` for all available options.
|
|
247
|
+
|
|
248
|
+
**Want commit messages in another language?** Run `gac language` to select from 25+ languages including Español, Français, 日本語, and more.
|
|
249
|
+
|
|
250
|
+
**Want to customize commit message style?** See [docs/CUSTOM_SYSTEM_PROMPTS.md](docs/en/CUSTOM_SYSTEM_PROMPTS.md) for guidance on writing custom system prompts.
|
|
251
|
+
|
|
252
|
+
---
|
|
253
|
+
|
|
254
|
+
## Project Analytics
|
|
255
|
+
|
|
256
|
+
📊 **[View live usage analytics and statistics →](https://clickpy.clickhouse.com/dashboard/gac)**
|
|
257
|
+
|
|
258
|
+
Track real-time installation metrics and package download statistics.
|
|
259
|
+
|
|
260
|
+
---
|
|
261
|
+
|
|
262
|
+
## Getting Help
|
|
263
|
+
|
|
264
|
+
- **Full documentation**: [docs/USAGE.md](docs/en/USAGE.md) - Complete CLI reference
|
|
265
|
+
- **Custom prompts**: [docs/CUSTOM_SYSTEM_PROMPTS.md](docs/en/CUSTOM_SYSTEM_PROMPTS.md) - Customize commit message style
|
|
266
|
+
- **Troubleshooting**: [docs/TROUBLESHOOTING.md](docs/en/TROUBLESHOOTING.md) - Common issues and solutions
|
|
267
|
+
- **Contributing**: [docs/CONTRIBUTING.md](docs/en/CONTRIBUTING.md) - Development setup and guidelines
|
|
268
|
+
|
|
269
|
+
---
|
|
270
|
+
|
|
271
|
+
<!-- markdownlint-disable MD033 MD036 -->
|
|
272
|
+
|
|
273
|
+
<div align="center">
|
|
274
|
+
|
|
275
|
+
Made with ❤️ for developers who want better commit messages
|
|
276
|
+
|
|
277
|
+
[⭐ Star us on GitHub](https://github.com/cellwebb/gac) • [🐛 Report issues](https://github.com/cellwebb/gac/issues) • [📖 Full docs](docs/en/USAGE.md)
|
|
278
|
+
|
|
279
|
+
</div>
|
|
280
|
+
|
|
281
|
+
<!-- markdownlint-enable MD033 MD036 -->
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
gac/__init__.py,sha256=z9yGInqtycFIT3g1ca24r-A3699hKVaRqGUI79wsmMc,415
|
|
2
|
+
gac/__version__.py,sha256=QjkK28WCwoefBMwiKqFYy76cOVTGklvGTI3wsZ1eIDk,66
|
|
3
|
+
gac/ai.py,sha256=HnXmRFmUJin5k755iBqSLgKYssjShjKXz9SwICEpMag,3835
|
|
4
|
+
gac/ai_utils.py,sha256=YpMEXCXkY1KqLIoYOmMGwVzTxUq-jof_v8VYbsgFMl0,8940
|
|
5
|
+
gac/auth_cli.py,sha256=Bd2TSjoVruOwzcPjDvyjfuKtlBr_wEScf8AWsddKfU0,2224
|
|
6
|
+
gac/cli.py,sha256=ZbUGyKHuxfW1p6zaiTl8FU_tIYaxPN36tCxLYBinDFk,7450
|
|
7
|
+
gac/config.py,sha256=_EWAtHL9FMrvO4wD0ReZQEstKzhF1f2rbSm9dWCT350,2155
|
|
8
|
+
gac/config_cli.py,sha256=o8UEEoWwZJ7xmDUbNPZEnbdANd1nLb4HMpmqMbcbbaY,2376
|
|
9
|
+
gac/constants.py,sha256=nd8aiNCAsvP1OM4VWwXjonqA7RAtPwTheA__GrVuP5o,9700
|
|
10
|
+
gac/diff_cli.py,sha256=wnVQ9OFGnM0d2Pj9WVjWbo0jxqIuRHVAwmb8wU9Pa3E,5676
|
|
11
|
+
gac/errors.py,sha256=ysDIVRCd0YQVTOW3Q6YzdolxCdtkoQCAFf3_jrqbjUY,7916
|
|
12
|
+
gac/git.py,sha256=_NRkOyb6u8SiPrG-t-7GspjdSp7yptmNj1gT8VexmcY,12913
|
|
13
|
+
gac/init_cli.py,sha256=UbldjcEjypHHpAn49tMddzaFQtwwAjlf8ZBQVPoz9YQ,2299
|
|
14
|
+
gac/language_cli.py,sha256=NHg8Q2cAjt4-VOaIYdU5FL_ISvSyu5rbgs232CqfhzM,12929
|
|
15
|
+
gac/main.py,sha256=jL26ti3t3-3ykV20tJaOdNsDFPKJoqKZX1fg20uYLGM,41872
|
|
16
|
+
gac/model_cli.py,sha256=DGI8V6QWyI07KeVYJMzXTMxqQg4crhnSfuOUYiZYygE,16013
|
|
17
|
+
gac/preprocess.py,sha256=hk2p2X4-xVDvuy-T1VMzMa9k5fTUbhlWDyw89DCf81Q,15379
|
|
18
|
+
gac/prompt.py,sha256=MzW-OzixAOltVcIVaRp6_hm8HscxRcmxj9Jh94P6Rvo,35454
|
|
19
|
+
gac/security.py,sha256=QT91mBEo2Y7la-aXvKuF2zhWuoOSXb6PWKLJ93kSy2k,9926
|
|
20
|
+
gac/utils.py,sha256=gTpc9zLzy3-3L5k-V5uSeFI-NnSPabA1GGVwSgpeMSk,11709
|
|
21
|
+
gac/workflow_utils.py,sha256=-O4QRfY1bbv2lh1tpTaAEd_N0OE4eHV6E_vRvzBCFtk,8268
|
|
22
|
+
gac/oauth/__init__.py,sha256=hPSGHlt-BFZXSodg-n6S405-5YZComyV_iEtzkPumdQ,46
|
|
23
|
+
gac/oauth/claude_code.py,sha256=S4XsamRKOJoBwXo3GyhhcP5ypj3RE2akoBSo2yojtS8,12120
|
|
24
|
+
gac/providers/__init__.py,sha256=th44JWjSQl8YgbLUmbRHXZS8jDXDFuBLeKpXDhL979w,2889
|
|
25
|
+
gac/providers/anthropic.py,sha256=VK5d1s1PmBNDwh_x7illQ2CIZIHNIYU28btVfizwQPs,2036
|
|
26
|
+
gac/providers/azure_openai.py,sha256=X1T1jtJDQmTw2Qm_I2onzEUDpfRQ49mj1WDGBZ3pXlI,3919
|
|
27
|
+
gac/providers/cerebras.py,sha256=Ik8lhlsliGJVkgDgqlThfpra9tqbdYQZkaC4eNxRd9w,1648
|
|
28
|
+
gac/providers/chutes.py,sha256=cclJOLuGVIiiaF-9Bs1kH6SSOhEmduGB2zZ86KIaXKw,2617
|
|
29
|
+
gac/providers/claude_code.py,sha256=e_j0n0flN6m1UsY_v1lzwcy1miC9pynPY-1Fbq2akyw,4069
|
|
30
|
+
gac/providers/custom_anthropic.py,sha256=aqtMdLnbwFjXkQzo7-pKfhIHktFuePVsnfDJOFJvDeM,5529
|
|
31
|
+
gac/providers/custom_openai.py,sha256=kLRfClY6kdN8FGsFMYJVFCL82d34tnHZ9IPSZ2VPK2Q,3942
|
|
32
|
+
gac/providers/deepseek.py,sha256=leT2S4_CE6JzwF3skDd4umBsu2rkJOJ66AfOdSL5wGc,1643
|
|
33
|
+
gac/providers/fireworks.py,sha256=zsWhf6LMVdtsD9keXRFwgn9lCQigz6VmrDl6vqIVkdI,1688
|
|
34
|
+
gac/providers/gemini.py,sha256=kl9WKdPm_ANYk0hsrUyMdACzR0cm8Eui9M1IwObYW-4,3348
|
|
35
|
+
gac/providers/groq.py,sha256=9v2fAjDa_iRNHFptiUBN8Vt7ZDKkW_JOmIBeYvycD1M,2806
|
|
36
|
+
gac/providers/kimi_coding.py,sha256=Nj8iojesCvCbwEEH3F8xNchIE_fmA1S2SMjGhD9arek,2727
|
|
37
|
+
gac/providers/lmstudio.py,sha256=R82-f0tWdFfGQxLT6o3Q2tfvYguF7ESUg9DEUHNyrDk,2146
|
|
38
|
+
gac/providers/minimax.py,sha256=oI5rEVlkcYenNUNH53zS00X8NqpcZ1gMsTGzQCsmes4,1630
|
|
39
|
+
gac/providers/mistral.py,sha256=b2Du1nJutKjmJXmsXz4Ne43Yn52OSS0q6BKGoZnfH8Q,1630
|
|
40
|
+
gac/providers/moonshot.py,sha256=Wy0RdYlKCkeRBv40jAJkybjXh420eb2btrTPTLioTbQ,1662
|
|
41
|
+
gac/providers/ollama.py,sha256=hPkagbhEiAoH9RTET4EQe9-lTL0YmMRCbQ5dVbRQw6Q,2095
|
|
42
|
+
gac/providers/openai.py,sha256=iHVD6bHf57W-QmW7u1Ee5vOpev7XZ-K75NcolLfebOk,1630
|
|
43
|
+
gac/providers/openrouter.py,sha256=H3ce8JcRUYq1I30lOjGESdX7jfoPkW3mKAYnc2aYfBw,2204
|
|
44
|
+
gac/providers/replicate.py,sha256=TjWZOIZBCq226zr_w0j0YpBxgtp0VY33yryd8q9akuo,3785
|
|
45
|
+
gac/providers/streamlake.py,sha256=KAA2ZnpuEI5imzvdWVWUhEBHSP0BMnprKXte6CbwBWY,2047
|
|
46
|
+
gac/providers/synthetic.py,sha256=sRMIJTS9LpcXd9A7qp_ZjZxdqtTKRn9fl1W4YwJZP4c,1855
|
|
47
|
+
gac/providers/together.py,sha256=1bUIVHfYzcEDw4hQPE8qV6hjc2JNHPv_khVgpk2IJxI,1667
|
|
48
|
+
gac/providers/zai.py,sha256=kywhhrCfPBu0rElZyb-iENxQxxpVGykvePuL4xrXlaU,2739
|
|
49
|
+
gac-3.6.0.dist-info/METADATA,sha256=aPkvY8fwgU4gtKZojVzp3nbsfCpeWVLNWwM4lAbeQ7g,11254
|
|
50
|
+
gac-3.6.0.dist-info/WHEEL,sha256=WLgqFyCfm_KASv4WHyYy0P3pM_m7J5L9k2skdKLirC8,87
|
|
51
|
+
gac-3.6.0.dist-info/entry_points.txt,sha256=tdjN-XMmcWfL92swuRAjT62bFLOAwk9bTMRLGP5Z4aI,36
|
|
52
|
+
gac-3.6.0.dist-info/licenses/LICENSE,sha256=vOab37NouL1PNs5BswnPayrMCqaN2sqLfMQfqPDrpZg,1103
|
|
53
|
+
gac-3.6.0.dist-info/RECORD,,
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# MIT License
|
|
2
2
|
|
|
3
|
-
Copyright (c) 2025 cellwebb <
|
|
3
|
+
Copyright (c) 2025 cellwebb <cellwebb@users.noreply.github.com>
|
|
4
4
|
|
|
5
5
|
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated
|
|
6
6
|
documentation files (the "Software"), to deal in the Software without restriction, including without limitation the
|
gac-0.17.2.dist-info/METADATA
DELETED
|
@@ -1,221 +0,0 @@
|
|
|
1
|
-
Metadata-Version: 2.4
|
|
2
|
-
Name: gac
|
|
3
|
-
Version: 0.17.2
|
|
4
|
-
Summary: AI-powered Git commit message generator with multi-provider support
|
|
5
|
-
Project-URL: Homepage, https://github.com/cellwebb/gac
|
|
6
|
-
Project-URL: Documentation, https://github.com/cellwebb/gac#readme
|
|
7
|
-
Project-URL: Repository, https://github.com/cellwebb/gac.git
|
|
8
|
-
Project-URL: Issues, https://github.com/cellwebb/gac/issues
|
|
9
|
-
Project-URL: Changelog, https://github.com/cellwebb/gac/blob/main/CHANGELOG.md
|
|
10
|
-
Project-URL: Source, https://github.com/cellwebb/gac
|
|
11
|
-
Author-email: cellwebb <cellwebb@users.noreply.github.com>
|
|
12
|
-
License-Expression: MIT
|
|
13
|
-
License-File: LICENSE
|
|
14
|
-
Classifier: Development Status :: 4 - Beta
|
|
15
|
-
Classifier: Programming Language :: Python
|
|
16
|
-
Classifier: Programming Language :: Python :: 3.10
|
|
17
|
-
Classifier: Programming Language :: Python :: 3.11
|
|
18
|
-
Classifier: Programming Language :: Python :: 3.12
|
|
19
|
-
Classifier: Programming Language :: Python :: 3.13
|
|
20
|
-
Classifier: Programming Language :: Python :: Implementation :: CPython
|
|
21
|
-
Classifier: Programming Language :: Python :: Implementation :: PyPy
|
|
22
|
-
Requires-Python: >=3.10
|
|
23
|
-
Requires-Dist: aisuite
|
|
24
|
-
Requires-Dist: anthropic
|
|
25
|
-
Requires-Dist: black
|
|
26
|
-
Requires-Dist: cerebras-cloud-sdk
|
|
27
|
-
Requires-Dist: click
|
|
28
|
-
Requires-Dist: docstring-parser
|
|
29
|
-
Requires-Dist: groq
|
|
30
|
-
Requires-Dist: halo
|
|
31
|
-
Requires-Dist: isort
|
|
32
|
-
Requires-Dist: ollama
|
|
33
|
-
Requires-Dist: openai
|
|
34
|
-
Requires-Dist: pydantic
|
|
35
|
-
Requires-Dist: python-dotenv
|
|
36
|
-
Requires-Dist: questionary
|
|
37
|
-
Requires-Dist: rich
|
|
38
|
-
Requires-Dist: tiktoken
|
|
39
|
-
Provides-Extra: dev
|
|
40
|
-
Requires-Dist: build; extra == 'dev'
|
|
41
|
-
Requires-Dist: bump-my-version; extra == 'dev'
|
|
42
|
-
Requires-Dist: codecov; extra == 'dev'
|
|
43
|
-
Requires-Dist: pytest; extra == 'dev'
|
|
44
|
-
Requires-Dist: pytest-cov; extra == 'dev'
|
|
45
|
-
Requires-Dist: ruff; extra == 'dev'
|
|
46
|
-
Requires-Dist: twine; extra == 'dev'
|
|
47
|
-
Description-Content-Type: text/markdown
|
|
48
|
-
|
|
49
|
-
<!-- markdownlint-disable MD013 -->
|
|
50
|
-
|
|
51
|
-
# Git Auto Commit (gac)
|
|
52
|
-
|
|
53
|
-
[](https://pypi.org/project/gac/)
|
|
54
|
-
[](https://www.python.org/downloads/)
|
|
55
|
-
[](https://github.com/cellwebb/gac/actions)
|
|
56
|
-
[](https://app.codecov.io/gh/cellwebb/gac)
|
|
57
|
-
[](https://github.com/psf/black)
|
|
58
|
-
[](docs/CONTRIBUTING.md)
|
|
59
|
-
[](LICENSE)
|
|
60
|
-
|
|
61
|
-
## Features
|
|
62
|
-
|
|
63
|
-
- **AI-Powered Commit Messages:** Automatically generates clear, concise, and context-aware commit messages using large language models.
|
|
64
|
-
- **Deep Contextual Analysis:** Understands your code by analyzing staged changes, repository structure, and recent commit history to provide highly relevant suggestions.
|
|
65
|
-
- **Multi-Provider & Model Support:** Flexibly works with various leading AI providers (like Anthropic, Cerebras, Groq, OpenAI) and models, easily configured through an interactive setup or environment variables.
|
|
66
|
-
- **Seamless Git Workflow:** Integrates smoothly into your existing Git routine as a simple drop-in replacement for `git commit`.
|
|
67
|
-
- **Extensive Customization:** Tailor commit messages to your needs with a rich set of flags, including one-liners (`-o`), AI hints (`-h`), commit scope (`-s`), and specific model selection (`-m`).
|
|
68
|
-
- **Streamlined Workflow Commands:** Boost your productivity with convenient options to stage all changes (`-a`), auto-confirm commits (`-y`), and push to your remote repository (`-p`) in a single step.
|
|
69
|
-
- **Interactive Reroll with Feedback:** Not satisfied with the generated commit message? Use `r` for a simple regeneration, or `r <feedback>` to provide specific improvement suggestions (e.g., `r make it shorter`, `r focus on the bug fix`).
|
|
70
|
-
- **Token Usage Tracking:** Display token consumption statistics (prompt, completion, and total tokens).
|
|
71
|
-
|
|
72
|
-
## How It Works
|
|
73
|
-
|
|
74
|
-
gac analyzes your staged changes to generate high-quality commit messages with the help of large language models.
|
|
75
|
-
|
|
76
|
-
## How to Use
|
|
77
|
-
|
|
78
|
-
```sh
|
|
79
|
-
git add .
|
|
80
|
-
gac
|
|
81
|
-
```
|
|
82
|
-
|
|
83
|
-

|
|
84
|
-
|
|
85
|
-
## Installation and Configuration
|
|
86
|
-
|
|
87
|
-
### 1. Installation
|
|
88
|
-
|
|
89
|
-
#### Quick Try with uvx (no installation)
|
|
90
|
-
|
|
91
|
-
You can try gac without installing it using uvx:
|
|
92
|
-
|
|
93
|
-
```sh
|
|
94
|
-
# Try gac without installation
|
|
95
|
-
uvx gac --help
|
|
96
|
-
|
|
97
|
-
# Set up configuration (creates ~/.gac.env)
|
|
98
|
-
uvx gac init
|
|
99
|
-
|
|
100
|
-
# Use gac on staged changes
|
|
101
|
-
git add .
|
|
102
|
-
uvx gac
|
|
103
|
-
```
|
|
104
|
-
|
|
105
|
-
#### Permanent Installation
|
|
106
|
-
|
|
107
|
-
Install system-wide using pipx from the GitHub repository:
|
|
108
|
-
|
|
109
|
-
```sh
|
|
110
|
-
# Install pipx if you don't have it
|
|
111
|
-
python3 -m pip install --user pipx
|
|
112
|
-
python3 -m pipx ensurepath
|
|
113
|
-
|
|
114
|
-
# Install gac
|
|
115
|
-
pipx install gac
|
|
116
|
-
```
|
|
117
|
-
|
|
118
|
-
Verify installation:
|
|
119
|
-
|
|
120
|
-
```sh
|
|
121
|
-
gac --version
|
|
122
|
-
```
|
|
123
|
-
|
|
124
|
-
### 2. Configuration
|
|
125
|
-
|
|
126
|
-
The recommended way to configure `gac` is using the interactive setup:
|
|
127
|
-
|
|
128
|
-
```sh
|
|
129
|
-
gac init
|
|
130
|
-
```
|
|
131
|
-
|
|
132
|
-
This command will guide you through selecting an AI provider, model, and securely entering your API keys. It will create or update a user-level configuration file at `$HOME/.gac.env`.
|
|
133
|
-
|
|
134
|
-
Example `$HOME/.gac.env` output:
|
|
135
|
-
|
|
136
|
-
```env
|
|
137
|
-
GAC_MODEL=anthropic:claude-3-5-haiku-latest
|
|
138
|
-
ANTHROPIC_API_KEY=your_anthropic_key_here
|
|
139
|
-
```
|
|
140
|
-
|
|
141
|
-
Alternatively, you can configure `gac` using environment variables or by manually creating/editing the configuration file.
|
|
142
|
-
|
|
143
|
-
#### Managing Configuration with `gac config`
|
|
144
|
-
|
|
145
|
-
You can manage settings in your `$HOME/.gac.env` file using `gac config` commands:
|
|
146
|
-
|
|
147
|
-
- Show config: `gac config show`
|
|
148
|
-
- Set a value: `gac config set GAC_MODEL groq:meta-llama/llama-4-scout-17b-16e-instruct`
|
|
149
|
-
- Get a value: `gac config get GAC_MODEL`
|
|
150
|
-
- Unset a value: `gac config unset GAC_MODEL`
|
|
151
|
-
|
|
152
|
-
### 3. Verify Setup
|
|
153
|
-
|
|
154
|
-
Test that `gac` is working properly with your configuration:
|
|
155
|
-
|
|
156
|
-
```sh
|
|
157
|
-
# Make a change to a file
|
|
158
|
-
echo "# Test change" >> README.md
|
|
159
|
-
git add README.md
|
|
160
|
-
gac -o # Generate a one-line commit message
|
|
161
|
-
```
|
|
162
|
-
|
|
163
|
-
You should see an AI-generated commit message.
|
|
164
|
-
|
|
165
|
-
### 4. Upgrade
|
|
166
|
-
|
|
167
|
-
To upgrade `gac` to the latest version, run:
|
|
168
|
-
|
|
169
|
-
```sh
|
|
170
|
-
pipx upgrade gac
|
|
171
|
-
```
|
|
172
|
-
|
|
173
|
-
## Basic Usage
|
|
174
|
-
|
|
175
|
-
Once installed and configured, using `gac` is straightforward:
|
|
176
|
-
|
|
177
|
-
1. Stage your changes:
|
|
178
|
-
|
|
179
|
-
```sh
|
|
180
|
-
git add .
|
|
181
|
-
```
|
|
182
|
-
|
|
183
|
-
2. Run `gac`:
|
|
184
|
-
|
|
185
|
-
```sh
|
|
186
|
-
gac
|
|
187
|
-
```
|
|
188
|
-
|
|
189
|
-
This will generate a commit message for review. Confirm with `y` to accept the message.
|
|
190
|
-
|
|
191
|
-
### Common Commands
|
|
192
|
-
|
|
193
|
-
- Generate a commit message: `gac`
|
|
194
|
-
- Auto-accept the commit message: `gac -y`
|
|
195
|
-
- Stage all changes and generate a commit message: `gac -a`
|
|
196
|
-
- Generate a one-line commit message: `gac -o`
|
|
197
|
-
- Add a hint for the AI: `gac -h "Fixed the authentication bug"`
|
|
198
|
-
- Push the commit (requires accepting the commit message): `gac -p`
|
|
199
|
-
- Advanced usage: Add all, auto-confirm, push a one-liner with a hint: `gac -aypo -h "update for release"`
|
|
200
|
-
|
|
201
|
-
For a full list of CLI flags, advanced options, and example workflows, see [USAGE.md](USAGE.md).
|
|
202
|
-
|
|
203
|
-
## Best Practices
|
|
204
|
-
|
|
205
|
-
- gac loads configuration from two locations (in order of precedence):
|
|
206
|
-
1. User-level `$HOME/.gac.env` (applies to all projects for the user)
|
|
207
|
-
2. Project-level `.env` (in the project root, overrides user config if present) Environment variables always take final precedence over both files.
|
|
208
|
-
- Keep API keys out of version control
|
|
209
|
-
- For troubleshooting, see [docs/TROUBLESHOOTING.md](docs/TROUBLESHOOTING.md)
|
|
210
|
-
|
|
211
|
-
## Contributing
|
|
212
|
-
|
|
213
|
-
We welcome contributions! Please see [docs/CONTRIBUTING.md](docs/CONTRIBUTING.md) for guidelines.
|
|
214
|
-
|
|
215
|
-
## License
|
|
216
|
-
|
|
217
|
-
This project is licensed under the MIT License. See [LICENSE](LICENSE) for details.
|
|
218
|
-
|
|
219
|
-
## Community & Support
|
|
220
|
-
|
|
221
|
-
For questions, suggestions, or support, please open an issue or discussion on GitHub.
|
gac-0.17.2.dist-info/RECORD
DELETED
|
@@ -1,20 +0,0 @@
|
|
|
1
|
-
gac/__init__.py,sha256=z9yGInqtycFIT3g1ca24r-A3699hKVaRqGUI79wsmMc,415
|
|
2
|
-
gac/__version__.py,sha256=v99UPabTLMGan0nh-8ujsEAomKUPy1bclqTXLNIKfx8,67
|
|
3
|
-
gac/ai.py,sha256=kxZ0UMU_2i9Vb2fXKAUcuFCeZJAZ9G8OSjgTVF06h-Y,5452
|
|
4
|
-
gac/cli.py,sha256=KsagQerqcf2uqGS4HjV_U1AUBtY3DPmYLsTj08riZmE,4545
|
|
5
|
-
gac/config.py,sha256=wSgEDjtis7Vk1pv5VPvYmJyD9-tymDS6GiUHjnCMbIM,1486
|
|
6
|
-
gac/config_cli.py,sha256=v9nFHZO1RvK9fzHyuUS6SG-BCLHMsdOMDwWamBhVVh4,1608
|
|
7
|
-
gac/constants.py,sha256=MAxdASGncfZY1TdKGdhJZ0wvTBEU3gTN6KEdw8n3Bd8,4844
|
|
8
|
-
gac/diff_cli.py,sha256=wnVQ9OFGnM0d2Pj9WVjWbo0jxqIuRHVAwmb8wU9Pa3E,5676
|
|
9
|
-
gac/errors.py,sha256=3vIRMQ2QF3sP9_rPfXAFuu5ZSjIVX4FxM-FAuiR8N-8,7416
|
|
10
|
-
gac/git.py,sha256=MS2m4fv8h4mau1djFG1aje9NXTmkGsjPO9w18LqNGX0,6031
|
|
11
|
-
gac/init_cli.py,sha256=aNllguofrcLn0ML9tzLVWFkPbwlAvCM9m7undHhMLEo,1825
|
|
12
|
-
gac/main.py,sha256=yO17nqu78K4pHj4u9-enVDB2qetR1YWgqK4WBa4pXoM,11597
|
|
13
|
-
gac/preprocess.py,sha256=4igtZ9OTHgTpqwlJmbcGaqzmdD0HHCZJwsZ9eG118Gk,15360
|
|
14
|
-
gac/prompt.py,sha256=i6XPWXCC_v1k2wVkv5FlL540RKG5uS-U6HJU9wC-cGw,18291
|
|
15
|
-
gac/utils.py,sha256=W3ladtmsH01MNLdckQYTzYrYbTGEdzCKI36he9C-y_E,3945
|
|
16
|
-
gac-0.17.2.dist-info/METADATA,sha256=Yx64UZRoaV05ERPcv9-6_UOp4OF3PiiCMg4AdLHlpis,7654
|
|
17
|
-
gac-0.17.2.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
|
|
18
|
-
gac-0.17.2.dist-info/entry_points.txt,sha256=tdjN-XMmcWfL92swuRAjT62bFLOAwk9bTMRLGP5Z4aI,36
|
|
19
|
-
gac-0.17.2.dist-info/licenses/LICENSE,sha256=s11puNmYfzwoSwG96nhOJe268Y1QFckr8-Hmzo3_eJE,1087
|
|
20
|
-
gac-0.17.2.dist-info/RECORD,,
|
|
File without changes
|