feat(devgen/modules): expose max_groups and max_diff_size as CLI override flags

- Add CLI flags to override `max_groups` and `max_diff_size` limits
- Update file grouping logic to respect override values
- Improve truncation logging with configurable size and guidance
- Remove unused imports and streamline rich console setup
This commit is contained in:
sankalp committed 2026-06-06 16:45:18 +05:45
1 parent 72c57f0d33
commit 4f8e358a60
1 file changed
+29 -11
+29 -11
View File
@@ -1,11 +1,16 @@
import sys
import questionary
import subprocess
import sys
from collections import defaultdict
from datetime import datetime
from pathlib import Path
from typing import Any, Dict, List
import questionary
from rich.console import Console
from rich.markdown import Markdown
from rich.panel import Panel
from rich.theme import Theme
from devgen.ai import generate_with_ai
from devgen.utils import (
configure_logger,
@@ -13,14 +18,10 @@ from devgen.utils import (
get_commit_dry_run_path,
is_file_recent,
load_template_env,
render_custom_template,
run_git_command,
sanitize_ai_commit_message,
render_custom_template,
)
from rich.console import Console
from rich.panel import Panel
from rich.markdown import Markdown
from rich.theme import Theme
class CommitEngineError(Exception):
@@ -58,6 +59,8 @@ class CommitEngine:
provider: str = "gemini",
model: str = "gemini-2.5-flash",
logger: Any | None = None,
max_groups: int | None = None,
max_diff_size: int | None = None,
**kwargs,
):
self.dry_run = dry_run
@@ -75,6 +78,10 @@ class CommitEngine:
self.kwargs = kwargs
self.dry_run_path = get_commit_dry_run_path()
self.template_env = load_template_env("commit")
# CLI flags take precedence over config. Config can still be consulted
# in group_files / generate_diff when these are None.
self._max_groups_override = max_groups
self._max_diff_size_override = max_diff_size
self.console = Console(
theme=Theme(
@@ -117,7 +124,11 @@ class CommitEngine:
def group_files(self, files: List[str]) -> Dict[str, List[str]]:
"""Groups files by their parent directory with smart merging if limit is exceeded."""
max_groups = self.config.get("max_groups", 5)
max_groups = (
self._max_groups_override
if self._max_groups_override is not None
else self.config.get("max_groups", 5)
)
# 1. Initial grouping by immediate parent
groups = defaultdict(list)
@@ -176,11 +187,18 @@ class CommitEngine:
full_content = "\n".join(summary_info + [diff]).strip()
# Truncate if too large
if len(full_content) > MAX_DIFF_SIZE:
max_size = (
self._max_diff_size_override
if self._max_diff_size_override is not None
else self.config.get("max_diff_size", MAX_DIFF_SIZE)
)
if len(full_content) > max_size:
self.logger.info(
f"Truncating diff from {len(full_content)} to {MAX_DIFF_SIZE} chars"
f"Truncating diff from {len(full_content)} to {max_size} chars "
f"(config: max_diff_size). If you still hit token-limit errors, "
f"lower this further or split the commit into more groups."
)
half = MAX_DIFF_SIZE // 2
half = max_size // 2
return (
full_content[:half]
+ "\n\n... [DIFF TRUNCATED FOR TOKEN OPTIMIZATION] ...\n\n"