gac 1.5.1__tar.gz → 2.7.5__tar.gz

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.

Potentially problematic release.


This version of gac might be problematic. Click here for more details.

Files changed (59) hide show
  1. gac-2.7.5/PKG-INFO +277 -0
  2. gac-2.7.5/README.md +235 -0
  3. {gac-1.5.1 → gac-2.7.5}/pyproject.toml +37 -13
  4. gac-2.7.5/src/gac/__init__.py +15 -0
  5. {gac-1.5.1 → gac-2.7.5}/src/gac/__version__.py +1 -1
  6. {gac-1.5.1 → gac-2.7.5}/src/gac/ai.py +69 -13
  7. {gac-1.5.1 → gac-2.7.5}/src/gac/ai_utils.py +67 -24
  8. gac-2.7.5/src/gac/auth_cli.py +69 -0
  9. {gac-1.5.1 → gac-2.7.5}/src/gac/cli.py +53 -8
  10. {gac-1.5.1 → gac-2.7.5}/src/gac/config.py +8 -1
  11. gac-2.7.5/src/gac/constants.py +321 -0
  12. gac-2.7.5/src/gac/git.py +325 -0
  13. gac-2.7.5/src/gac/init_cli.py +488 -0
  14. gac-2.7.5/src/gac/language_cli.py +253 -0
  15. gac-2.7.5/src/gac/main.py +767 -0
  16. gac-2.7.5/src/gac/oauth/__init__.py +1 -0
  17. gac-2.7.5/src/gac/oauth/claude_code.py +397 -0
  18. {gac-1.5.1 → gac-2.7.5}/src/gac/preprocess.py +4 -4
  19. gac-2.7.5/src/gac/prompt.py +785 -0
  20. gac-2.7.5/src/gac/providers/__init__.py +46 -0
  21. {gac-1.5.1 → gac-2.7.5}/src/gac/providers/anthropic.py +5 -1
  22. {gac-1.5.1 → gac-2.7.5}/src/gac/providers/cerebras.py +5 -1
  23. gac-2.7.5/src/gac/providers/chutes.py +71 -0
  24. gac-2.7.5/src/gac/providers/claude_code.py +102 -0
  25. gac-2.7.5/src/gac/providers/custom_anthropic.py +133 -0
  26. gac-2.7.5/src/gac/providers/custom_openai.py +99 -0
  27. gac-2.7.5/src/gac/providers/deepseek.py +38 -0
  28. gac-2.7.5/src/gac/providers/fireworks.py +38 -0
  29. gac-2.7.5/src/gac/providers/gemini.py +87 -0
  30. {gac-1.5.1 → gac-2.7.5}/src/gac/providers/groq.py +5 -1
  31. {gac-1.5.1 → gac-2.7.5}/src/gac/providers/lmstudio.py +4 -0
  32. gac-2.7.5/src/gac/providers/minimax.py +38 -0
  33. gac-2.7.5/src/gac/providers/mistral.py +38 -0
  34. {gac-1.5.1 → gac-2.7.5}/src/gac/providers/ollama.py +4 -0
  35. {gac-1.5.1 → gac-2.7.5}/src/gac/providers/openai.py +5 -1
  36. {gac-1.5.1 → gac-2.7.5}/src/gac/providers/openrouter.py +3 -1
  37. gac-2.7.5/src/gac/providers/streamlake.py +51 -0
  38. gac-2.7.5/src/gac/providers/synthetic.py +42 -0
  39. gac-2.7.5/src/gac/providers/together.py +38 -0
  40. {gac-1.5.1 → gac-2.7.5}/src/gac/providers/zai.py +5 -1
  41. {gac-1.5.1 → gac-2.7.5}/src/gac/security.py +2 -2
  42. gac-2.7.5/src/gac/utils.py +371 -0
  43. gac-2.7.5/src/gac/workflow_utils.py +134 -0
  44. gac-1.5.1/PKG-INFO +0 -249
  45. gac-1.5.1/README.md +0 -207
  46. gac-1.5.1/src/gac/__init__.py +0 -27
  47. gac-1.5.1/src/gac/constants.py +0 -152
  48. gac-1.5.1/src/gac/git.py +0 -176
  49. gac-1.5.1/src/gac/init_cli.py +0 -53
  50. gac-1.5.1/src/gac/main.py +0 -356
  51. gac-1.5.1/src/gac/prompt.py +0 -429
  52. gac-1.5.1/src/gac/providers/__init__.py +0 -24
  53. gac-1.5.1/src/gac/providers/gemini.py +0 -70
  54. gac-1.5.1/src/gac/utils.py +0 -132
  55. {gac-1.5.1 → gac-2.7.5}/.gitignore +0 -0
  56. {gac-1.5.1 → gac-2.7.5}/LICENSE +0 -0
  57. {gac-1.5.1 → gac-2.7.5}/src/gac/config_cli.py +0 -0
  58. {gac-1.5.1 → gac-2.7.5}/src/gac/diff_cli.py +0 -0
  59. {gac-1.5.1 → gac-2.7.5}/src/gac/errors.py +0 -0
gac-2.7.5/PKG-INFO ADDED
@@ -0,0 +1,277 @@
1
+ Metadata-Version: 2.4
2
+ Name: gac
3
+ Version: 2.7.5
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: halo
26
+ Requires-Dist: httpcore>=1.0.9
27
+ Requires-Dist: httpx>=0.28.0
28
+ Requires-Dist: prompt-toolkit>=3.0.36
29
+ Requires-Dist: pydantic>=2.12.0
30
+ Requires-Dist: python-dotenv>=1.1.1
31
+ Requires-Dist: questionary
32
+ Requires-Dist: rich>=14.1.0
33
+ Requires-Dist: tiktoken>=0.12.0
34
+ Provides-Extra: dev
35
+ Requires-Dist: build; extra == 'dev'
36
+ Requires-Dist: codecov; extra == 'dev'
37
+ Requires-Dist: pytest; extra == 'dev'
38
+ Requires-Dist: pytest-cov; extra == 'dev'
39
+ Requires-Dist: ruff; extra == 'dev'
40
+ Requires-Dist: twine; extra == 'dev'
41
+ Description-Content-Type: text/markdown
42
+
43
+ <!-- markdownlint-disable MD013 -->
44
+ <!-- markdownlint-disable MD033 MD036 -->
45
+
46
+ <div align="center">
47
+
48
+ # 🚀 Git Auto Commit (gac)
49
+
50
+ [![PyPI version](https://img.shields.io/pypi/v/gac.svg)](https://pypi.org/project/gac/)
51
+ [![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/)
52
+ [![Build Status](https://github.com/cellwebb/gac/actions/workflows/ci.yml/badge.svg)](https://github.com/cellwebb/gac/actions)
53
+ [![codecov](https://codecov.io/gh/cellwebb/gac/branch/main/graph/badge.svg)](https://app.codecov.io/gh/cellwebb/gac)
54
+ [![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)
55
+ [![mypy](https://img.shields.io/badge/mypy-checked-blue.svg)](https://mypy-lang.org/)
56
+ [![Contributions welcome](https://img.shields.io/badge/contributions-welcome-brightgreen.svg)](docs/en/CONTRIBUTING.md)
57
+ [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](LICENSE)
58
+
59
+ **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)
60
+
61
+ **LLM-powered commit messages that understand your code!**
62
+
63
+ **Automate your commits!** Replace `git commit -m "..."` with `gac` for contextual, well-formatted commit messages generated by large language models!
64
+
65
+ ---
66
+
67
+ ## What You Get
68
+
69
+ Intelligent, contextual messages that explain the **why** behind your changes:
70
+
71
+ ![GAC generating a contextual commit message](assets/gac-simple-usage.png)
72
+
73
+ ---
74
+
75
+ </div>
76
+
77
+ <!-- markdownlint-enable MD033 MD036 -->
78
+
79
+ ## Quick Start
80
+
81
+ ### Use gac without installing
82
+
83
+ ```bash
84
+ uvx gac init # Configure your provider, model, and language
85
+ uvx gac # Generate and commit with LLM
86
+ ```
87
+
88
+ That's it! Review the generated message and confirm with `y`.
89
+
90
+ ### Install and use gac
91
+
92
+ ```bash
93
+ uv tool install gac
94
+ gac init
95
+ gac
96
+ ```
97
+
98
+ ### Upgrade installed gac
99
+
100
+ ```bash
101
+ uv tool upgrade gac
102
+ ```
103
+
104
+ ---
105
+
106
+ ## Key Features
107
+
108
+ ### 🌐 **Supported Providers**
109
+
110
+ - **Anthropic** • **Cerebras** • **Chutes.ai** • **Claude Code**
111
+ - **DeepSeek** • **Fireworks** • **Gemini** • **Groq** • **LM Studio**
112
+ - **MiniMax** • **Mistral** • **Ollama** • **OpenAI** • **OpenRouter**
113
+ - **Streamlake** • **Synthetic.new** • **Together AI**
114
+ - **Z.AI** • **Z.AI Coding** • **Custom Endpoints (Anthropic/OpenAI)**
115
+
116
+ ### 🧠 **Smart LLM Analysis**
117
+
118
+ - **Understands intent**: Analyzes code structure, logic, and patterns to understand the "why" behind your changes, not just what changed
119
+ - **Semantic awareness**: Recognizes refactoring, bug fixes, features, and breaking changes to generate contextually appropriate messages
120
+ - **Intelligent filtering**: Prioritizes meaningful changes while ignoring generated files, dependencies, and artifacts
121
+ - **Intelligent commit grouping** - Automatically group related changes into multiple logical commits with `--group`
122
+
123
+ ### 📝 **Multiple Message Formats**
124
+
125
+ - **One-liner** (-o flag): Single-line commit message following conventional commit format
126
+ - **Standard** (default): Summary with bullet points explaining implementation details
127
+ - **Verbose** (-v flag): Comprehensive explanations including motivation, technical approach, and impact analysis
128
+
129
+ ### 🌍 **Multilingual Support**
130
+
131
+ - **25+ languages**: Generate commit messages in English, Chinese, Japanese, Korean, Spanish, French, German, and 20+ more languages
132
+ - **Flexible translation**: Choose to keep conventional commit prefixes in English for tool compatibility, or fully translate them
133
+ - **Multiple workflows**: Set a default language with `gac language`, or use `-l <language>` flag for one-time overrides
134
+ - **Native script support**: Full support for non-Latin scripts including CJK, Cyrillic, Thai, and more
135
+
136
+ ### 💻 **Developer Experience**
137
+
138
+ - **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`
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 -p` | Commit and push |
176
+
177
+ ### Power User Examples
178
+
179
+ ```bash
180
+ # Complete workflow in one command
181
+ gac -ayp -h "release preparation"
182
+
183
+ # Detailed explanation with scope
184
+ gac -v -s
185
+
186
+ # Quick one-liner for small changes
187
+ gac -o
188
+
189
+ # Group changes into logically related commits
190
+ gac -ag
191
+
192
+ # Debug what the LLM sees
193
+ gac --show-prompt
194
+
195
+ # Skip security scan (use carefully)
196
+ gac --skip-secret-scan
197
+ ```
198
+
199
+ ### Interactive Feedback System
200
+
201
+ Not happy with the result? You have several options:
202
+
203
+ ```bash
204
+ # Simple reroll (no feedback)
205
+ r
206
+
207
+ # Edit in-place with rich terminal editing
208
+ e
209
+ # Uses prompt_toolkit for multi-line editing with vi/emacs keybindings
210
+ # Press Esc+Enter or Ctrl+S to submit, Ctrl+C to cancel
211
+
212
+ # Or just type your feedback directly!
213
+ make it shorter and focus on the performance improvement
214
+ use conventional commit format with scope
215
+ explain the security implications
216
+
217
+ # Press Enter on empty input to see the prompt again
218
+ ```
219
+
220
+ The edit feature (`e`) provides rich in-place terminal editing, allowing you to:
221
+
222
+ - **Edit naturally**: Multi-line editing with familiar vi/emacs key bindings
223
+ - **Make quick fixes**: Correct typos, adjust wording, or refine formatting
224
+ - **Add details**: Include information the LLM might have missed
225
+ - **Restructure**: Reorganize bullet points or change the message structure
226
+
227
+ ---
228
+
229
+ ## Configuration
230
+
231
+ Run `gac init` to configure your provider interactively, or set environment variables:
232
+
233
+ Need to change providers or models later without touching language settings? Use `gac model` for a streamlined flow that skips the language prompts.
234
+
235
+ ```bash
236
+ # Example configuration
237
+ GAC_MODEL=anthropic:your-model-name
238
+ OPENAI_API_KEY=your_key_here
239
+ ANTHROPIC_API_KEY=your_key_here
240
+ ```
241
+
242
+ See `.gac.env.example` for all available options.
243
+
244
+ **Want commit messages in another language?** Run `gac language` to select from 25+ languages including Español, Français, 日本語, and more.
245
+
246
+ **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.
247
+
248
+ ---
249
+
250
+ ## Project Analytics
251
+
252
+ 📊 **[View live usage analytics and statistics →](https://clickpy.clickhouse.com/dashboard/gac)**
253
+
254
+ Track real-time installation metrics and package download statistics.
255
+
256
+ ---
257
+
258
+ ## Getting Help
259
+
260
+ - **Full documentation**: [docs/USAGE.md](docs/en/USAGE.md) - Complete CLI reference
261
+ - **Custom prompts**: [docs/CUSTOM_SYSTEM_PROMPTS.md](docs/en/CUSTOM_SYSTEM_PROMPTS.md) - Customize commit message style
262
+ - **Troubleshooting**: [docs/TROUBLESHOOTING.md](docs/en/TROUBLESHOOTING.md) - Common issues and solutions
263
+ - **Contributing**: [docs/CONTRIBUTING.md](docs/en/CONTRIBUTING.md) - Development setup and guidelines
264
+
265
+ ---
266
+
267
+ <!-- markdownlint-disable MD033 MD036 -->
268
+
269
+ <div align="center">
270
+
271
+ Made with ❤️ for developers who want better commit messages
272
+
273
+ [⭐ Star us on GitHub](https://github.com/cellwebb/gac) • [🐛 Report issues](https://github.com/cellwebb/gac/issues) • [📖 Full docs](docs/en/USAGE.md)
274
+
275
+ </div>
276
+
277
+ <!-- markdownlint-enable MD033 MD036 -->
gac-2.7.5/README.md ADDED
@@ -0,0 +1,235 @@
1
+ <!-- markdownlint-disable MD013 -->
2
+ <!-- markdownlint-disable MD033 MD036 -->
3
+
4
+ <div align="center">
5
+
6
+ # 🚀 Git Auto Commit (gac)
7
+
8
+ [![PyPI version](https://img.shields.io/pypi/v/gac.svg)](https://pypi.org/project/gac/)
9
+ [![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/)
10
+ [![Build Status](https://github.com/cellwebb/gac/actions/workflows/ci.yml/badge.svg)](https://github.com/cellwebb/gac/actions)
11
+ [![codecov](https://codecov.io/gh/cellwebb/gac/branch/main/graph/badge.svg)](https://app.codecov.io/gh/cellwebb/gac)
12
+ [![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)
13
+ [![mypy](https://img.shields.io/badge/mypy-checked-blue.svg)](https://mypy-lang.org/)
14
+ [![Contributions welcome](https://img.shields.io/badge/contributions-welcome-brightgreen.svg)](docs/en/CONTRIBUTING.md)
15
+ [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](LICENSE)
16
+
17
+ **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)
18
+
19
+ **LLM-powered commit messages that understand your code!**
20
+
21
+ **Automate your commits!** Replace `git commit -m "..."` with `gac` for contextual, well-formatted commit messages generated by large language models!
22
+
23
+ ---
24
+
25
+ ## What You Get
26
+
27
+ Intelligent, contextual messages that explain the **why** behind your changes:
28
+
29
+ ![GAC generating a contextual commit message](assets/gac-simple-usage.png)
30
+
31
+ ---
32
+
33
+ </div>
34
+
35
+ <!-- markdownlint-enable MD033 MD036 -->
36
+
37
+ ## Quick Start
38
+
39
+ ### Use gac without installing
40
+
41
+ ```bash
42
+ uvx gac init # Configure your provider, model, and language
43
+ uvx gac # Generate and commit with LLM
44
+ ```
45
+
46
+ That's it! Review the generated message and confirm with `y`.
47
+
48
+ ### Install and use gac
49
+
50
+ ```bash
51
+ uv tool install gac
52
+ gac init
53
+ gac
54
+ ```
55
+
56
+ ### Upgrade installed gac
57
+
58
+ ```bash
59
+ uv tool upgrade gac
60
+ ```
61
+
62
+ ---
63
+
64
+ ## Key Features
65
+
66
+ ### 🌐 **Supported Providers**
67
+
68
+ - **Anthropic** • **Cerebras** • **Chutes.ai** • **Claude Code**
69
+ - **DeepSeek** • **Fireworks** • **Gemini** • **Groq** • **LM Studio**
70
+ - **MiniMax** • **Mistral** • **Ollama** • **OpenAI** • **OpenRouter**
71
+ - **Streamlake** • **Synthetic.new** • **Together AI**
72
+ - **Z.AI** • **Z.AI Coding** • **Custom Endpoints (Anthropic/OpenAI)**
73
+
74
+ ### 🧠 **Smart LLM Analysis**
75
+
76
+ - **Understands intent**: Analyzes code structure, logic, and patterns to understand the "why" behind your changes, not just what changed
77
+ - **Semantic awareness**: Recognizes refactoring, bug fixes, features, and breaking changes to generate contextually appropriate messages
78
+ - **Intelligent filtering**: Prioritizes meaningful changes while ignoring generated files, dependencies, and artifacts
79
+ - **Intelligent commit grouping** - Automatically group related changes into multiple logical commits with `--group`
80
+
81
+ ### 📝 **Multiple Message Formats**
82
+
83
+ - **One-liner** (-o flag): Single-line commit message following conventional commit format
84
+ - **Standard** (default): Summary with bullet points explaining implementation details
85
+ - **Verbose** (-v flag): Comprehensive explanations including motivation, technical approach, and impact analysis
86
+
87
+ ### 🌍 **Multilingual Support**
88
+
89
+ - **25+ languages**: Generate commit messages in English, Chinese, Japanese, Korean, Spanish, French, German, and 20+ more languages
90
+ - **Flexible translation**: Choose to keep conventional commit prefixes in English for tool compatibility, or fully translate them
91
+ - **Multiple workflows**: Set a default language with `gac language`, or use `-l <language>` flag for one-time overrides
92
+ - **Native script support**: Full support for non-Latin scripts including CJK, Cyrillic, Thai, and more
93
+
94
+ ### 💻 **Developer Experience**
95
+
96
+ - **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`
97
+ - **One-command workflows**: Complete workflows with flags like `gac -ayp` (stage all, auto-confirm, push)
98
+ - **Git integration**: Respects pre-commit and lefthook hooks, running them before expensive LLM operations
99
+
100
+ ### 🛡️ **Built-in Security**
101
+
102
+ - **Automatic secret detection**: Scans for API keys, passwords, and tokens before committing
103
+ - **Interactive protection**: Prompts before committing potentially sensitive data with clear remediation options
104
+ - **Smart filtering**: Ignores example files, template files, and placeholder text to reduce false positives
105
+
106
+ ---
107
+
108
+ ## Usage Examples
109
+
110
+ ### Basic Workflow
111
+
112
+ ```bash
113
+ # Stage your changes
114
+ git add .
115
+
116
+ # Generate and commit with LLM
117
+ gac
118
+
119
+ # Review → y (commit) | n (cancel) | r (reroll) | e (edit) | or type feedback
120
+ ```
121
+
122
+ ### Common Commands
123
+
124
+ | Command | Description |
125
+ | --------------- | ----------------------------------------------------------------------- |
126
+ | `gac` | Generate commit message |
127
+ | `gac -y` | Auto-confirm (no review needed) |
128
+ | `gac -a` | Stage all before generating commit message |
129
+ | `gac -o` | One-line message for trivial changes |
130
+ | `gac -v` | Verbose format with Motivation, Technical Approach, and Impact Analysis |
131
+ | `gac -h "hint"` | Add context for LLM (e.g., `gac -h "bug fix"`) |
132
+ | `gac -s` | Include scope (e.g., feat(auth):) |
133
+ | `gac -p` | Commit and push |
134
+
135
+ ### Power User Examples
136
+
137
+ ```bash
138
+ # Complete workflow in one command
139
+ gac -ayp -h "release preparation"
140
+
141
+ # Detailed explanation with scope
142
+ gac -v -s
143
+
144
+ # Quick one-liner for small changes
145
+ gac -o
146
+
147
+ # Group changes into logically related commits
148
+ gac -ag
149
+
150
+ # Debug what the LLM sees
151
+ gac --show-prompt
152
+
153
+ # Skip security scan (use carefully)
154
+ gac --skip-secret-scan
155
+ ```
156
+
157
+ ### Interactive Feedback System
158
+
159
+ Not happy with the result? You have several options:
160
+
161
+ ```bash
162
+ # Simple reroll (no feedback)
163
+ r
164
+
165
+ # Edit in-place with rich terminal editing
166
+ e
167
+ # Uses prompt_toolkit for multi-line editing with vi/emacs keybindings
168
+ # Press Esc+Enter or Ctrl+S to submit, Ctrl+C to cancel
169
+
170
+ # Or just type your feedback directly!
171
+ make it shorter and focus on the performance improvement
172
+ use conventional commit format with scope
173
+ explain the security implications
174
+
175
+ # Press Enter on empty input to see the prompt again
176
+ ```
177
+
178
+ The edit feature (`e`) provides rich in-place terminal editing, allowing you to:
179
+
180
+ - **Edit naturally**: Multi-line editing with familiar vi/emacs key bindings
181
+ - **Make quick fixes**: Correct typos, adjust wording, or refine formatting
182
+ - **Add details**: Include information the LLM might have missed
183
+ - **Restructure**: Reorganize bullet points or change the message structure
184
+
185
+ ---
186
+
187
+ ## Configuration
188
+
189
+ Run `gac init` to configure your provider interactively, or set environment variables:
190
+
191
+ Need to change providers or models later without touching language settings? Use `gac model` for a streamlined flow that skips the language prompts.
192
+
193
+ ```bash
194
+ # Example configuration
195
+ GAC_MODEL=anthropic:your-model-name
196
+ OPENAI_API_KEY=your_key_here
197
+ ANTHROPIC_API_KEY=your_key_here
198
+ ```
199
+
200
+ See `.gac.env.example` for all available options.
201
+
202
+ **Want commit messages in another language?** Run `gac language` to select from 25+ languages including Español, Français, 日本語, and more.
203
+
204
+ **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.
205
+
206
+ ---
207
+
208
+ ## Project Analytics
209
+
210
+ 📊 **[View live usage analytics and statistics →](https://clickpy.clickhouse.com/dashboard/gac)**
211
+
212
+ Track real-time installation metrics and package download statistics.
213
+
214
+ ---
215
+
216
+ ## Getting Help
217
+
218
+ - **Full documentation**: [docs/USAGE.md](docs/en/USAGE.md) - Complete CLI reference
219
+ - **Custom prompts**: [docs/CUSTOM_SYSTEM_PROMPTS.md](docs/en/CUSTOM_SYSTEM_PROMPTS.md) - Customize commit message style
220
+ - **Troubleshooting**: [docs/TROUBLESHOOTING.md](docs/en/TROUBLESHOOTING.md) - Common issues and solutions
221
+ - **Contributing**: [docs/CONTRIBUTING.md](docs/en/CONTRIBUTING.md) - Development setup and guidelines
222
+
223
+ ---
224
+
225
+ <!-- markdownlint-disable MD033 MD036 -->
226
+
227
+ <div align="center">
228
+
229
+ Made with ❤️ for developers who want better commit messages
230
+
231
+ [⭐ Star us on GitHub](https://github.com/cellwebb/gac) • [🐛 Report issues](https://github.com/cellwebb/gac/issues) • [📖 Full docs](docs/en/USAGE.md)
232
+
233
+ </div>
234
+
235
+ <!-- markdownlint-enable MD033 MD036 -->
@@ -5,7 +5,7 @@ build-backend = "hatchling.build"
5
5
  [project]
6
6
  name = "gac"
7
7
  dynamic = ["version"]
8
- description = "AI-powered Git commit message generator with multi-provider support"
8
+ description = "LLM-powered Git commit message generator with multi-provider support"
9
9
  readme = "README.md"
10
10
  requires-python = ">=3.10"
11
11
  license = "MIT"
@@ -20,21 +20,20 @@ classifiers = [
20
20
  "Programming Language :: Python :: 3.11",
21
21
  "Programming Language :: Python :: 3.12",
22
22
  "Programming Language :: Python :: 3.13",
23
+ "Programming Language :: Python :: 3.14",
23
24
  "Programming Language :: Python :: Implementation :: CPython",
24
25
  "Programming Language :: Python :: Implementation :: PyPy",
25
26
  ]
26
27
  dependencies = [
27
- # HTTP client for AI provider APIs
28
+ # HTTP client for LLM provider APIs
28
29
  "httpx>=0.28.0",
29
-
30
- # Anthropic SDK (token counting)
31
- "anthropic>=0.68.0",
30
+ "httpcore>=1.0.9", # Required for Python 3.14 compatibility
32
31
 
33
32
  # Token counting (OpenAI models)
34
- "tiktoken>=0.11.0",
33
+ "tiktoken>=0.12.0",
35
34
 
36
35
  # Core functionality
37
- "pydantic>=2.11.9",
36
+ "pydantic>=2.12.0",
38
37
  "python-dotenv>=1.1.1",
39
38
 
40
39
  # CLI and formatting
@@ -42,9 +41,8 @@ dependencies = [
42
41
  "halo",
43
42
  "questionary",
44
43
  "rich>=14.1.0",
44
+ "prompt_toolkit>=3.0.36",
45
45
 
46
- # Summarization and document processing
47
- "sumy",
48
46
  ]
49
47
 
50
48
  [project.scripts]
@@ -53,7 +51,9 @@ gac = "gac.cli:cli"
53
51
  [project.optional-dependencies]
54
52
  dev = [
55
53
  # Version management
56
- "bump-my-version",
54
+ # Note: bump-my-version has Python 3.14 compatibility issues
55
+ # Use manual version bumping for now
56
+ # "bump-my-version",
57
57
 
58
58
  # Testing
59
59
  "pytest",
@@ -131,7 +131,7 @@ include = [
131
131
 
132
132
  [tool.hatch.envs.default]
133
133
  dependencies = [
134
- # AI components
134
+ # LLM components
135
135
  "anthropic",
136
136
  "openai",
137
137
  "groq",
@@ -195,9 +195,32 @@ line-ending = "auto"
195
195
 
196
196
  [tool.pytest.ini_options]
197
197
  markers = [
198
- "providers: marks tests that make real API calls to AI providers (deselect with '-m \"not providers\"')",
198
+ "integration: marks tests that make real API calls to external services (deselect with '-m \"not integration\"')",
199
199
  ]
200
- addopts = "-m 'not providers'"
200
+ addopts = "-m 'not integration'"
201
+
202
+ [tool.mypy]
203
+ python_version = "3.10"
204
+ warn_return_any = true
205
+ warn_unused_configs = true
206
+ disallow_untyped_defs = false
207
+ disallow_incomplete_defs = false
208
+ check_untyped_defs = true
209
+ no_implicit_optional = true
210
+ warn_redundant_casts = true
211
+ warn_unused_ignores = true
212
+ warn_no_return = true
213
+ warn_unreachable = true
214
+ strict_equality = true
215
+ show_error_codes = true
216
+
217
+ [[tool.mypy.overrides]]
218
+ module = "gac.providers.*"
219
+ warn_return_any = false
220
+
221
+ [[tool.mypy.overrides]]
222
+ module = "halo"
223
+ ignore_missing_imports = true
201
224
 
202
225
  [template.plugins.default]
203
226
  tests = true
@@ -208,4 +231,5 @@ dev = [
208
231
  "pytest>=8.4.2",
209
232
  "pytest-asyncio>=1.2.0",
210
233
  "pytest-cov>=7.0.0",
234
+ "mypy>=1.8.0",
211
235
  ]
@@ -0,0 +1,15 @@
1
+ """Git Auto Commit (gac) - Generate commit messages using AI."""
2
+
3
+ from gac.__version__ import __version__
4
+ from gac.ai import generate_commit_message
5
+ from gac.git import get_staged_files, push_changes
6
+ from gac.prompt import build_prompt, clean_commit_message
7
+
8
+ __all__ = [
9
+ "__version__",
10
+ "generate_commit_message",
11
+ "build_prompt",
12
+ "clean_commit_message",
13
+ "get_staged_files",
14
+ "push_changes",
15
+ ]
@@ -1,3 +1,3 @@
1
1
  """Version information for gac package."""
2
2
 
3
- __version__ = "1.5.1"
3
+ __version__ = "2.7.5"