From 7f6b247b40c944a86d434f6ce24571c01861b4c6 Mon Sep 17 00:00:00 2001 From: S4NKALP Date: Fri, 12 Dec 2025 18:56:25 +0545 Subject: [PATCH] feat(cli): Introduce AI-powered developer toolkit Release v0.2.1 of DevGen CLI, a comprehensive toolkit automating common Git and project management tasks through AI. This initial packaging defines the project's metadata and a wide array of developer-centric features. * **New Features** * **AI-Powered Commit Messages:** Automatically generate semantic commit messages based on staged changes, adhering to Conventional Commits format. * **Changelog Generation:** Create detailed changelogs from Git history, with categories for BREAKING CHANGES, Features, Bug Fixes, Documentation, and Other Changes. * **Release Note Generation:** Produce structured release notes from Git history, ready for publication. * **Gitignore File Generation:** Generate `.gitignore` files by selecting from GitHub's official templates, supporting interactive selection, multiple templates, and offline mode. * **License File Generation:** Interactively generate various open-source license files (e.g., MIT, Apache-2.0, GPL-3.0), customizable with author name and year. * **Multi-Provider AI Support:** Seamless integration with leading AI providers including Gemini, OpenAI, Anthropic, HuggingFace, and OpenRouter. * **Enhancements & Refinements** * **Unified CLI:** Provides a single command-line interface for all development automation tools. * **Interactive Configuration:** Simple setup process for AI providers, models, and API keys via `devgen setup config`, stored persistently in `~/.devgen.yaml`. * **Flexible Commit Workflow:** Offers options for dry runs, direct commits, automatic pushes, and force rebuilding of AI-generated commit messages. * **Commit Caching:** Includes commands to list and clear cached commit messages for improved workflow. * **Detailed Command Reference:** Comprehensive documentation for all `devgen` commands and their specific options. * **Project Metadata:** Updated `PKG-INFO` with project summary, homepage, author details, license, keywords, classifiers, and Python requirements. * **Dependency Management:** Specifies required Python packages including `anthropic`, `google-generativeai`, `openai`, `typer`, and `rich`. * **Python 3.10+ Compatibility:** Ensures support for modern Python environments. --- devgen/cli/commit.py | 2 +- devgen/providers/__init__.py | 17 +- devgen/utils.py | 9 +- devgen_cli.egg-info/PKG-INFO | 299 +++++++++++++++++++++++ devgen_cli.egg-info/SOURCES.txt | 49 ++++ devgen_cli.egg-info/dependency_links.txt | 1 + devgen_cli.egg-info/entry_points.txt | 2 + devgen_cli.egg-info/requires.txt | 10 + devgen_cli.egg-info/top_level.txt | 1 + 9 files changed, 378 insertions(+), 12 deletions(-) create mode 100644 devgen_cli.egg-info/PKG-INFO create mode 100644 devgen_cli.egg-info/SOURCES.txt create mode 100644 devgen_cli.egg-info/dependency_links.txt create mode 100644 devgen_cli.egg-info/entry_points.txt create mode 100644 devgen_cli.egg-info/requires.txt create mode 100644 devgen_cli.egg-info/top_level.txt diff --git a/devgen/cli/commit.py b/devgen/cli/commit.py index 1c7b515..1238d9e 100644 --- a/devgen/cli/commit.py +++ b/devgen/cli/commit.py @@ -52,7 +52,7 @@ def run_commit( ] = False, ) -> None: log_file = get_main_log_path() - logger = configure_logger("devgen.cli.commit", log_file) + logger = configure_logger("devgen.cli.commit", log_file, console=debug) logger.info(f"Log file: {log_file}") logger.info( f"Options: dry_run={dry_run}, push={push}, debug={debug}, force={force_rebuild}" diff --git a/devgen/providers/__init__.py b/devgen/providers/__init__.py index 25384a5..ee5f5de 100644 --- a/devgen/providers/__init__.py +++ b/devgen/providers/__init__.py @@ -1,21 +1,24 @@ -from devgen.providers.anthropic import AnthropicProvider -from devgen.providers.gemini import GeminiProvider -from devgen.providers.huggingface import HuggingfaceProvider -from devgen.providers.openai import OpenaiProvider -from devgen.providers.openrouter import OpenrouterProvider - - def get_provider(name): name_lower = name.lower() if name_lower == "gemini": + from devgen.providers.gemini import GeminiProvider + return GeminiProvider() elif name_lower == "openai": + from devgen.providers.openai import OpenaiProvider + return OpenaiProvider() elif name_lower == "huggingface": + from devgen.providers.huggingface import HuggingfaceProvider + return HuggingfaceProvider() elif name_lower == "openrouter": + from devgen.providers.openrouter import OpenrouterProvider + return OpenrouterProvider() elif name_lower == "anthropic": + from devgen.providers.anthropic import AnthropicProvider + return AnthropicProvider() raise NotImplementedError(f"Provider '{name}' is not implemented yet.") diff --git a/devgen/utils.py b/devgen/utils.py index dc56be1..2791945 100644 --- a/devgen/utils.py +++ b/devgen/utils.py @@ -75,7 +75,7 @@ def extract_commit_messages(filepath: Path | str) -> dict[str, str]: def configure_logger( - name: str = "devgen", log_file: Optional[Path | str] = None + name: str = "devgen", log_file: Optional[Path | str] = None, console: bool = True ) -> logging.Logger: logger = logging.getLogger(name) logger.setLevel(logging.INFO) @@ -88,9 +88,10 @@ def configure_logger( ) # Console handler - ch = logging.StreamHandler() - ch.setFormatter(formatter) - logger.addHandler(ch) + if console: + ch = logging.StreamHandler() + ch.setFormatter(formatter) + logger.addHandler(ch) # File handler if log_file: diff --git a/devgen_cli.egg-info/PKG-INFO b/devgen_cli.egg-info/PKG-INFO new file mode 100644 index 0000000..112be30 --- /dev/null +++ b/devgen_cli.egg-info/PKG-INFO @@ -0,0 +1,299 @@ +Metadata-Version: 2.4 +Name: devgen-cli +Version: 0.2.1 +Summary: A collection of developer tools +Home-page: https://github.com/S4NKALP/devgen +Author: Sankalp Tharu +Author-email: Sankalp Tharu +License: GPL-3.0-or-later +Project-URL: Homepage, https://github.com/S4NKALP/devgen +Keywords: devgen,cli,git,changelog,gitignore,license,commit-generator,commit +Classifier: Development Status :: 3 - Alpha +Classifier: Intended Audience :: Developers +Classifier: License :: OSI Approved :: GNU General Public License v3 or later (GPLv3+) +Classifier: Operating System :: OS Independent +Classifier: Programming Language :: Python :: 3 +Classifier: Programming Language :: Python :: 3.7 +Classifier: Programming Language :: Python :: 3.8 +Classifier: Programming Language :: Python :: 3.9 +Classifier: Programming Language :: Python :: 3.10 +Requires-Python: >=3.10 +Description-Content-Type: text/markdown +License-File: LICENSE +Requires-Dist: anthropic>=0.75.0 +Requires-Dist: google-generativeai>=0.8.5 +Requires-Dist: jinja2>=3.1.6 +Requires-Dist: openai>=2.11.0 +Requires-Dist: pyyaml>=6.0.3 +Requires-Dist: questionary>=2.1.1 +Requires-Dist: requests>=2.32.5 +Requires-Dist: rich>=14.2.0 +Requires-Dist: toml>=0.10.2 +Requires-Dist: typer>=0.20.0 +Dynamic: author +Dynamic: home-page +Dynamic: license-file +Dynamic: requires-python + +# DevGen + +
+ +PyPI +Python +License + +
+ +**DevGen** is an AI-powered developer toolkit that automates common Git and project management tasks. Generate semantic commit messages, changelogs, release notes, `.gitignore` files, and licensesβ€”all from a single unified CLI. + +## ✨ Features + +- πŸš€ **AI-Powered Commit Messages** - Automatically generate semantic commit messages from your staged changes using AI +- πŸ“ **Changelog Generation** - Create changelogs from git history using conventional commits +- πŸš€ **Release Notes** - Generate clean, emoji-enhanced release notes for your releases +- πŸ™ˆ **Gitignore Templates** - Generate `.gitignore` files from GitHub's official templates +- πŸ“„ **License Generation** - Quickly generate open source licenses with interactive setup +- βš™οΈ **Multi-Provider AI Support** - Works with Gemini, OpenAI, Anthropic, HuggingFace, and OpenRouter + +## πŸ“¦ Installation + +```bash +# Stable release from PyPI +pip install devgen-cli + +# Using pipx (recommended for isolated CLI) +pipx install devgen-cli + +# Using uv (fast Python package manager) +uv tool install devgen-cli +``` + +## πŸš€ Quick Start + +### 1. Initial Setup + +Configure your AI provider and API key: + +```bash +devgen setup config +``` + +This will create a configuration file at `~/.devgen.yaml` with your preferred AI provider, model, and API key. + +### 2. Generate Commit Messages + +Stage your changes and let DevGen generate semantic commit messages: + +```bash +# Dry run to preview commit messages +devgen commit run --dry-run + +# Actually commit with AI-generated messages +devgen commit run + +# Commit and automatically push +devgen commit run --push + +# Force regeneration of commit messages +devgen commit run --force-rebuild +``` + +**How it works:** + +- DevGen detects all staged and unstaged changes +- Groups files by directory +- Generates semantic commit messages for each group using AI +- Follows [Conventional Commits](https://www.conventionalcommits.org/) format + +**Additional commit commands:** + +```bash +# View cached commit messages +devgen commit list-cached + +# Clear the commit cache +devgen commit clear-cache + +# Check what files are staged +devgen commit validate +``` + +### 3. Generate Changelogs + +Create changelogs from your git history: + +```bash +# Generate changelog from last tag to HEAD +devgen changelog generate + +# Generate from a specific reference +devgen changelog generate --from v1.0.0 + +# Output to a custom file +devgen changelog generate --output CHANGES.md +``` + +The changelog follows Semantic Release conventions, categorizing commits into: + +- **BREAKING CHANGES** +- **Features** +- **Bug Fixes** +- **Documentation** +- **Other Changes** + +### 4. Generate Release Notes + +Create release notes for your releases: + +```bash +# Generate release notes +devgen release notes --version 1.4.0 + +# Custom output file +devgen release notes --version 1.4.0 --output RELEASE.md + +# From a specific reference +devgen release notes --version 1.4.0 --from v1.3.0 +``` + +### 5. Generate .gitignore Files + +Create `.gitignore` files from GitHub templates: + +```bash +# Interactive mode (search and select templates) +devgen gitignore generate + +# Specify templates directly +devgen gitignore generate Python Node Docker + +# List available templates +devgen gitignore list + +# Use cached templates (offline mode) +devgen gitignore generate --offline Python +``` + +**Options:** + +- `--append` / `--overwrite` - Append to or overwrite existing `.gitignore` +- `--output` - Specify output file path (default: `.gitignore`) +- `--offline` - Use only cached templates + +### 6. Generate Licenses + +Generate open source licenses interactively: + +```bash +devgen license generate +``` + +This will: + +1. Show available licenses (MIT, Apache-2.0, GPL-3.0, etc.) +2. Prompt for author name +3. Prompt for year (defaults to current year) +4. Generate the license file + +**Available licenses:** + +- MIT +- Apache-2.0 +- GPL-2.0, GPL-3.0 +- LGPL-2.1 +- AGPL-3.0 +- BSD-2-Clause, BSD-3-Clause +- MPL-2.0 +- EPL-2.0 +- BSL-1.0 +- CC0-1.0 +- Unlicense + +## βš™οΈ Configuration + +Configuration is stored in `~/.devgen.yaml`. You can edit it manually or use the interactive setup: + +```bash +devgen setup config +``` + +**Configuration options:** + +- `provider` - AI provider: `gemini`, `openai`, `anthropic`, `huggingface`, or `openrouter` +- `model` - Model name (e.g., `gemini-2.5-flash`, `gpt-4`, `claude-3-opus`) +- `api_key` - Your API key +- `emoji` - Enable/disable emojis in commit messages (default: `true`) + +## πŸ“‹ Command Reference + +### Commit Commands + +```bash +devgen commit run [--dry-run] [--push] [--debug] [--force-rebuild] +devgen commit validate +devgen commit list-cached +devgen commit clear-cache +``` + +### Changelog Commands + +```bash +devgen changelog generate [--output FILE] [--from REF] +``` + +### Release Commands + +```bash +devgen release notes [--version VERSION] [--output FILE] [--from REF] +``` + +### Gitignore Commands + +```bash +devgen gitignore generate [TEMPLATES...] [--output FILE] [--append/--overwrite] [--offline] +devgen gitignore list [--cached] +``` + +### License Commands + +```bash +devgen license generate [--output FILE] +``` + +### Setup Commands + +```bash +devgen setup config +``` + +## 🎯 Use Cases + +- **Automated Commit Workflow**: Let AI analyze your changes and generate meaningful commit messages +- **Release Preparation**: Automatically generate changelogs and release notes from git history +- **Project Setup**: Quickly add `.gitignore` and license files to new projects +- **CI/CD Integration**: Use in scripts to automate documentation generation + +## πŸ”§ Requirements + +- Python 3.10 or higher +- Git repository (for commit/changelog/release features) +- API key for your chosen AI provider + +## πŸ“ License + +This project is licensed under the GPL-3.0-or-later License - see the [LICENSE](LICENSE) file for details. + +## 🀝 Contributing + +Contributions are welcome! Please feel free to submit a Pull Request. + +## πŸ“š Links + +- **Homepage**: [https://github.com/S4NKALP/devgen](https://github.com/S4NKALP/devgen) +- **PyPI**: [https://pypi.org/project/devgen](https://pypi.org/project/devgen) + +## πŸ™ Acknowledgments + +- Uses GitHub's official [gitignore templates](https://github.com/github/gitignore) +- Follows [Conventional Commits](https://www.conventionalcommits.org/) specification diff --git a/devgen_cli.egg-info/SOURCES.txt b/devgen_cli.egg-info/SOURCES.txt new file mode 100644 index 0000000..3ee192c --- /dev/null +++ b/devgen_cli.egg-info/SOURCES.txt @@ -0,0 +1,49 @@ +LICENSE +MANIFEST.in +README.md +pyproject.toml +setup.py +devgen/__init__.py +devgen/ai.py +devgen/utils.py +devgen/cli/__init__.py +devgen/cli/changelog.py +devgen/cli/commit.py +devgen/cli/config.py +devgen/cli/gitignore.py +devgen/cli/license.py +devgen/cli/main.py +devgen/cli/release.py +devgen/cli/setup.py +devgen/modules/__init__.py +devgen/modules/changelog_generator.py +devgen/modules/commit_generator.py +devgen/modules/gitignore_generator.py +devgen/modules/license_generator.py +devgen/modules/release_note_generator.py +devgen/providers/__init__.py +devgen/providers/anthropic.py +devgen/providers/gemini.py +devgen/providers/huggingface.py +devgen/providers/openai.py +devgen/providers/openrouter.py +devgen/templates/commit/commit_message.j2 +devgen/templates/licenses/agpl-3.0.json +devgen/templates/licenses/apache-2.0.json +devgen/templates/licenses/bsd-2-clause.json +devgen/templates/licenses/bsd-3-clause.json +devgen/templates/licenses/bsl-1.0.json +devgen/templates/licenses/cc0-1.0.json +devgen/templates/licenses/epl-2.0.json +devgen/templates/licenses/gpl-2.0.json +devgen/templates/licenses/gpl-3.0.json +devgen/templates/licenses/lgpl-2.1.json +devgen/templates/licenses/mit.json +devgen/templates/licenses/mpl-2.0.json +devgen/templates/licenses/unlicense.json +devgen_cli.egg-info/PKG-INFO +devgen_cli.egg-info/SOURCES.txt +devgen_cli.egg-info/dependency_links.txt +devgen_cli.egg-info/entry_points.txt +devgen_cli.egg-info/requires.txt +devgen_cli.egg-info/top_level.txt \ No newline at end of file diff --git a/devgen_cli.egg-info/dependency_links.txt b/devgen_cli.egg-info/dependency_links.txt new file mode 100644 index 0000000..8b13789 --- /dev/null +++ b/devgen_cli.egg-info/dependency_links.txt @@ -0,0 +1 @@ + diff --git a/devgen_cli.egg-info/entry_points.txt b/devgen_cli.egg-info/entry_points.txt new file mode 100644 index 0000000..58e0f1f --- /dev/null +++ b/devgen_cli.egg-info/entry_points.txt @@ -0,0 +1,2 @@ +[console_scripts] +devgen = devgen.cli.main:app diff --git a/devgen_cli.egg-info/requires.txt b/devgen_cli.egg-info/requires.txt new file mode 100644 index 0000000..7d85db4 --- /dev/null +++ b/devgen_cli.egg-info/requires.txt @@ -0,0 +1,10 @@ +anthropic>=0.75.0 +google-generativeai>=0.8.5 +jinja2>=3.1.6 +openai>=2.11.0 +pyyaml>=6.0.3 +questionary>=2.1.1 +requests>=2.32.5 +rich>=14.2.0 +toml>=0.10.2 +typer>=0.20.0 diff --git a/devgen_cli.egg-info/top_level.txt b/devgen_cli.egg-info/top_level.txt new file mode 100644 index 0000000..c3e750b --- /dev/null +++ b/devgen_cli.egg-info/top_level.txt @@ -0,0 +1 @@ +devgen