gac 1.13.0__tar.gz → 1.13.1__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 (41) hide show
  1. {gac-1.13.0 → gac-1.13.1}/PKG-INFO +2 -2
  2. {gac-1.13.0 → gac-1.13.1}/README.md +1 -1
  3. {gac-1.13.0 → gac-1.13.1}/src/gac/__version__.py +1 -1
  4. {gac-1.13.0 → gac-1.13.1}/src/gac/prompt.py +33 -0
  5. {gac-1.13.0 → gac-1.13.1}/.gitignore +0 -0
  6. {gac-1.13.0 → gac-1.13.1}/LICENSE +0 -0
  7. {gac-1.13.0 → gac-1.13.1}/pyproject.toml +0 -0
  8. {gac-1.13.0 → gac-1.13.1}/src/gac/__init__.py +0 -0
  9. {gac-1.13.0 → gac-1.13.1}/src/gac/ai.py +0 -0
  10. {gac-1.13.0 → gac-1.13.1}/src/gac/ai_utils.py +0 -0
  11. {gac-1.13.0 → gac-1.13.1}/src/gac/cli.py +0 -0
  12. {gac-1.13.0 → gac-1.13.1}/src/gac/config.py +0 -0
  13. {gac-1.13.0 → gac-1.13.1}/src/gac/config_cli.py +0 -0
  14. {gac-1.13.0 → gac-1.13.1}/src/gac/constants.py +0 -0
  15. {gac-1.13.0 → gac-1.13.1}/src/gac/diff_cli.py +0 -0
  16. {gac-1.13.0 → gac-1.13.1}/src/gac/errors.py +0 -0
  17. {gac-1.13.0 → gac-1.13.1}/src/gac/git.py +0 -0
  18. {gac-1.13.0 → gac-1.13.1}/src/gac/init_cli.py +0 -0
  19. {gac-1.13.0 → gac-1.13.1}/src/gac/main.py +0 -0
  20. {gac-1.13.0 → gac-1.13.1}/src/gac/preprocess.py +0 -0
  21. {gac-1.13.0 → gac-1.13.1}/src/gac/providers/__init__.py +0 -0
  22. {gac-1.13.0 → gac-1.13.1}/src/gac/providers/anthropic.py +0 -0
  23. {gac-1.13.0 → gac-1.13.1}/src/gac/providers/cerebras.py +0 -0
  24. {gac-1.13.0 → gac-1.13.1}/src/gac/providers/chutes.py +0 -0
  25. {gac-1.13.0 → gac-1.13.1}/src/gac/providers/custom_anthropic.py +0 -0
  26. {gac-1.13.0 → gac-1.13.1}/src/gac/providers/custom_openai.py +0 -0
  27. {gac-1.13.0 → gac-1.13.1}/src/gac/providers/deepseek.py +0 -0
  28. {gac-1.13.0 → gac-1.13.1}/src/gac/providers/fireworks.py +0 -0
  29. {gac-1.13.0 → gac-1.13.1}/src/gac/providers/gemini.py +0 -0
  30. {gac-1.13.0 → gac-1.13.1}/src/gac/providers/groq.py +0 -0
  31. {gac-1.13.0 → gac-1.13.1}/src/gac/providers/lmstudio.py +0 -0
  32. {gac-1.13.0 → gac-1.13.1}/src/gac/providers/minimax.py +0 -0
  33. {gac-1.13.0 → gac-1.13.1}/src/gac/providers/ollama.py +0 -0
  34. {gac-1.13.0 → gac-1.13.1}/src/gac/providers/openai.py +0 -0
  35. {gac-1.13.0 → gac-1.13.1}/src/gac/providers/openrouter.py +0 -0
  36. {gac-1.13.0 → gac-1.13.1}/src/gac/providers/streamlake.py +0 -0
  37. {gac-1.13.0 → gac-1.13.1}/src/gac/providers/synthetic.py +0 -0
  38. {gac-1.13.0 → gac-1.13.1}/src/gac/providers/together.py +0 -0
  39. {gac-1.13.0 → gac-1.13.1}/src/gac/providers/zai.py +0 -0
  40. {gac-1.13.0 → gac-1.13.1}/src/gac/security.py +0 -0
  41. {gac-1.13.0 → gac-1.13.1}/src/gac/utils.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: gac
3
- Version: 1.13.0
3
+ Version: 1.13.1
4
4
  Summary: LLM-powered Git commit message generator with multi-provider support
5
5
  Project-URL: Homepage, https://github.com/cellwebb/gac
6
6
  Project-URL: Documentation, https://github.com/cellwebb/gac#readme
@@ -94,7 +94,7 @@ gac
94
94
  - **Anthropic** • **Cerebras** • **Chutes.ai** • **DeepSeek** • **Fireworks**
95
95
  - **Gemini** • **Groq** • **LM Studio** • **MiniMax** • **Ollama** • **OpenAI**
96
96
  - **OpenRouter** • **Streamlake** • **Synthetic.new** • **Together AI**
97
- - **Z.AI** • **Z.AI Coding** • **Custom Endpoint (Anthropic/OpenAI)**
97
+ - **Z.AI** • **Z.AI Coding** • **Custom Endpoints (Anthropic/OpenAI)**
98
98
 
99
99
  ### 🧠 **Smart LLM Analysis**
100
100
 
@@ -53,7 +53,7 @@ gac
53
53
  - **Anthropic** • **Cerebras** • **Chutes.ai** • **DeepSeek** • **Fireworks**
54
54
  - **Gemini** • **Groq** • **LM Studio** • **MiniMax** • **Ollama** • **OpenAI**
55
55
  - **OpenRouter** • **Streamlake** • **Synthetic.new** • **Together AI**
56
- - **Z.AI** • **Z.AI Coding** • **Custom Endpoint (Anthropic/OpenAI)**
56
+ - **Z.AI** • **Z.AI Coding** • **Custom Endpoints (Anthropic/OpenAI)**
57
57
 
58
58
  ### 🧠 **Smart LLM Analysis**
59
59
 
@@ -1,3 +1,3 @@
1
1
  """Version information for gac package."""
2
2
 
3
- __version__ = "1.13.0"
3
+ __version__ = "1.13.1"
@@ -454,6 +454,39 @@ def clean_commit_message(message: str) -> str:
454
454
  """
455
455
  message = message.strip()
456
456
 
457
+ # Remove <think> tags and their content (some providers like MiniMax include reasoning)
458
+ # Only remove multi-line reasoning blocks, never single-line content that might be descriptions
459
+ # Strategy: Remove blocks that clearly contain internal newlines (multi-line reasoning)
460
+
461
+ # Step 1: Remove multi-line <think>...</think> blocks (those with newlines inside)
462
+ # Pattern: <think> followed by content that includes newlines, ending with </think>
463
+ # This safely distinguishes reasoning from inline mentions like "handle <think> tags"
464
+ # Use negative lookahead to prevent matching across multiple blocks
465
+ while re.search(r"<think>(?:(?!</think>)[^\n])*\n.*?</think>", message, flags=re.DOTALL | re.IGNORECASE):
466
+ message = re.sub(
467
+ r"<think>(?:(?!</think>)[^\n])*\n.*?</think>\s*", "", message, flags=re.DOTALL | re.IGNORECASE, count=1
468
+ )
469
+
470
+ # Step 2: Remove blocks separated by blank lines (before or after the message)
471
+ message = re.sub(r"\n\n+\s*<think>.*?</think>\s*", "", message, flags=re.DOTALL | re.IGNORECASE)
472
+ message = re.sub(r"<think>.*?</think>\s*\n\n+", "", message, flags=re.DOTALL | re.IGNORECASE)
473
+
474
+ # Step 3: Handle orphaned opening <think> tags followed by newline
475
+ message = re.sub(r"<think>\s*\n.*$", "", message, flags=re.DOTALL | re.IGNORECASE)
476
+
477
+ # Step 4: Handle orphaned closing </think> tags at the start (before any conventional prefix)
478
+ conventional_prefixes_pattern = r"(feat|fix|docs|style|refactor|perf|test|build|ci|chore)[\(:)]"
479
+ if re.search(r"^.*?</think>", message, flags=re.DOTALL | re.IGNORECASE):
480
+ prefix_match = re.search(conventional_prefixes_pattern, message, flags=re.IGNORECASE)
481
+ think_match = re.search(r"</think>", message, flags=re.IGNORECASE)
482
+
483
+ if not prefix_match or (think_match and think_match.start() < prefix_match.start()):
484
+ # No prefix or </think> comes before prefix - remove everything up to and including it
485
+ message = re.sub(r"^.*?</think>\s*", "", message, flags=re.DOTALL | re.IGNORECASE)
486
+
487
+ # Step 5: Remove orphaned closing </think> tags at the end (not part of inline mentions)
488
+ message = re.sub(r"</think>\s*$", "", message, flags=re.IGNORECASE)
489
+
457
490
  # Remove any markdown code blocks
458
491
  message = re.sub(r"```[\w]*\n|```", "", message)
459
492
 
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes