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.
Files changed (53) hide show
  1. gac/__version__.py +1 -1
  2. gac/ai.py +69 -123
  3. gac/ai_utils.py +227 -0
  4. gac/auth_cli.py +69 -0
  5. gac/cli.py +87 -19
  6. gac/config.py +13 -7
  7. gac/config_cli.py +26 -5
  8. gac/constants.py +176 -5
  9. gac/errors.py +14 -0
  10. gac/git.py +207 -11
  11. gac/init_cli.py +52 -29
  12. gac/language_cli.py +378 -0
  13. gac/main.py +922 -189
  14. gac/model_cli.py +374 -0
  15. gac/oauth/__init__.py +1 -0
  16. gac/oauth/claude_code.py +397 -0
  17. gac/preprocess.py +5 -5
  18. gac/prompt.py +656 -219
  19. gac/providers/__init__.py +88 -0
  20. gac/providers/anthropic.py +51 -0
  21. gac/providers/azure_openai.py +97 -0
  22. gac/providers/cerebras.py +38 -0
  23. gac/providers/chutes.py +71 -0
  24. gac/providers/claude_code.py +102 -0
  25. gac/providers/custom_anthropic.py +133 -0
  26. gac/providers/custom_openai.py +98 -0
  27. gac/providers/deepseek.py +38 -0
  28. gac/providers/fireworks.py +38 -0
  29. gac/providers/gemini.py +87 -0
  30. gac/providers/groq.py +63 -0
  31. gac/providers/kimi_coding.py +63 -0
  32. gac/providers/lmstudio.py +59 -0
  33. gac/providers/minimax.py +38 -0
  34. gac/providers/mistral.py +38 -0
  35. gac/providers/moonshot.py +38 -0
  36. gac/providers/ollama.py +50 -0
  37. gac/providers/openai.py +38 -0
  38. gac/providers/openrouter.py +58 -0
  39. gac/providers/replicate.py +98 -0
  40. gac/providers/streamlake.py +51 -0
  41. gac/providers/synthetic.py +42 -0
  42. gac/providers/together.py +38 -0
  43. gac/providers/zai.py +59 -0
  44. gac/security.py +293 -0
  45. gac/utils.py +243 -4
  46. gac/workflow_utils.py +222 -0
  47. gac-3.6.0.dist-info/METADATA +281 -0
  48. gac-3.6.0.dist-info/RECORD +53 -0
  49. {gac-0.17.2.dist-info → gac-3.6.0.dist-info}/WHEEL +1 -1
  50. {gac-0.17.2.dist-info → gac-3.6.0.dist-info}/licenses/LICENSE +1 -1
  51. gac-0.17.2.dist-info/METADATA +0 -221
  52. gac-0.17.2.dist-info/RECORD +0 -20
  53. {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
+ [![PyPI version](https://img.shields.io/pypi/v/gac.svg)](https://pypi.org/project/gac/)
50
+ [![Python](https://img.shields.io/badge/python-3.10%20|%203.11%20|%203.12%20|%203.13%20|%203.14-blue.svg)](https://www.python.org/downloads/)
51
+ [![Build Status](https://github.com/cellwebb/gac/actions/workflows/ci.yml/badge.svg)](https://github.com/cellwebb/gac/actions)
52
+ [![codecov](https://codecov.io/gh/cellwebb/gac/branch/main/graph/badge.svg)](https://app.codecov.io/gh/cellwebb/gac)
53
+ [![Ruff](https://img.shields.io/endpoint?url=https://raw.githubusercontent.com/astral-sh/ruff/main/assets/badge/v2.json)](https://github.com/astral-sh/ruff)
54
+ [![mypy](https://img.shields.io/badge/mypy-checked-blue.svg)](https://mypy-lang.org/)
55
+ [![Contributions welcome](https://img.shields.io/badge/contributions-welcome-brightgreen.svg)](docs/en/CONTRIBUTING.md)
56
+ [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](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
+ ![GAC generating a contextual commit message](assets/gac-simple-usage.png)
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,4 +1,4 @@
1
1
  Wheel-Version: 1.0
2
- Generator: hatchling 1.27.0
2
+ Generator: hatchling 1.28.0
3
3
  Root-Is-Purelib: true
4
4
  Tag: py3-none-any
@@ -1,6 +1,6 @@
1
1
  # MIT License
2
2
 
3
- Copyright (c) 2025 cellwebb <cell@criteria.dev>
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
@@ -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
- [![PyPI version](https://img.shields.io/pypi/v/gac.svg)](https://pypi.org/project/gac/)
54
- [![Python](https://img.shields.io/badge/python-3.10%20|%203.11%20|%203.12%20|%203.13-blue.svg)](https://www.python.org/downloads/)
55
- [![Build Status](https://github.com/cellwebb/gac/actions/workflows/ci.yml/badge.svg)](https://github.com/cellwebb/gac/actions)
56
- [![codecov](https://codecov.io/gh/cellwebb/gac/branch/main/graph/badge.svg)](https://app.codecov.io/gh/cellwebb/gac)
57
- [![Code Style: black](https://img.shields.io/badge/code%20style-black-000000.svg)](https://github.com/psf/black)
58
- [![Contributions welcome](https://img.shields.io/badge/contributions-welcome-brightgreen.svg)](docs/CONTRIBUTING.md)
59
- [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](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
- ![Simple gac Usage](assets/gac-simple-usage.png)
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.
@@ -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,,