{"id":50350999,"url":"https://github.com/sochiautoparts/gitmoji-ai","last_synced_at":"2026-05-29T21:01:07.576Z","repository":{"id":361182751,"uuid":"1253318072","full_name":"sochiautoparts/gitmoji-ai","owner":"sochiautoparts","description":"🤖 AI-powered commit messages \u0026 changelog generator. Never write a bad commit again. pip install gitmoji-ai","archived":false,"fork":false,"pushed_at":"2026-05-29T14:35:32.000Z","size":51,"stargazers_count":0,"open_issues_count":2,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-05-29T15:07:13.779Z","etag":null,"topics":["ai","automation","changelog","chatgpt","cli","commit","conventional-commits","developer-tools","devtools","git","gitmoji","gpt","openai","python"],"latest_commit_sha":null,"homepage":"https://sochiautoparts.github.io/gitmoji-ai/","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/sochiautoparts.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":"CONTRIBUTING.md","funding":".github/FUNDING.yml","license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":"SECURITY.md","support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null},"funding":{"custom":["https://t.me/allstarspay_bot","https://sochiautoparts.github.io/stars-pay-bot/"]}},"created_at":"2026-05-29T10:46:47.000Z","updated_at":"2026-05-29T14:36:38.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/sochiautoparts/gitmoji-ai","commit_stats":null,"previous_names":["sochiautoparts/gitmoji-ai"],"tags_count":2,"template":false,"template_full_name":null,"purl":"pkg:github/sochiautoparts/gitmoji-ai","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sochiautoparts%2Fgitmoji-ai","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sochiautoparts%2Fgitmoji-ai/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sochiautoparts%2Fgitmoji-ai/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sochiautoparts%2Fgitmoji-ai/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/sochiautoparts","download_url":"https://codeload.github.com/sochiautoparts/gitmoji-ai/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sochiautoparts%2Fgitmoji-ai/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":33670211,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-05-29T02:00:06.066Z","response_time":107,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["ai","automation","changelog","chatgpt","cli","commit","conventional-commits","developer-tools","devtools","git","gitmoji","gpt","openai","python"],"created_at":"2026-05-29T21:00:38.842Z","updated_at":"2026-05-29T21:01:07.568Z","avatar_url":"https://github.com/sochiautoparts.png","language":"Python","funding_links":["https://t.me/allstarspay_bot","https://sochiautoparts.github.io/stars-pay-bot/"],"categories":[],"sub_categories":[],"readme":"\u003cdiv align=\"center\"\u003e\n\n# 🤖 GitMoji AI\n\n### AI-powered commit messages \u0026 changelog generator\n\n**Never write a bad commit message again.**\n\n[![PyPI](https://img.shields.io/pypi/v/gitmoji-ai?color=green\u0026label=PyPI)](https://pypi.org/project/gitmoji-ai/)\n[![Python](https://img.shields.io/pypi/pyversions/gitmoji-ai?label=Python)](https://pypi.org/project/gitmoji-ai/)\n[![Tests](https://img.shields.io/github/actions/workflow/status/sochiautoparts/gitmoji-ai/ci.yml?label=Tests)](https://github.com/sochiautoparts/gitmoji-ai/actions)\n[![License](https://img.shields.io/github/license/sochiautoparts/gitmoji-ai?label=License)](LICENSE)\n[![Stars](https://img.shields.io/github/stars/sochiautoparts/gitmoji-ai?style=social)](https://github.com/sochiautoparts/gitmoji-ai)\n\n[Installation](#-installation) • [Quick Start](#-quick-start) • [Features](#-features) • [GitHub Action](#-github-action) • [Pro](#-pro-version--starspay) • [Contributing](#-contributing)\n\n\u003c/div\u003e\n\n---\n\n## 🎬 Demo\n\n```bash\n$ gmai commit\n\n📊 Diff Analysis\n\n  Files changed: 3\n  Lines added: +47\n  Lines removed: -12\n  Summary: Changed 3 file(s): new feature, bug fix\n\n🤖 Generating AI commit suggestions...\n\n💡 Commit Suggestions\n┏━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━┓\n┃ # ┃ Message                                 ┃ Confidence ┃\n┡───╇──────────────────────────────────────────╇────────────┥\n│ 1 │ feat(auth): add JWT token validation     │ 95%        │\n│ 2 │ ✨ add JWT token validation to auth      │ 90%        │\n│ 3 │ feat(auth): implement JWT validation     │ 85%        │\n│   │ with refresh token support and expiry    │            │\n│   │ checking for enhanced security           │            │\n└───┴──────────────────────────────────────────┴────────────┘\n\nSelect commit [1/2/3/e(q)dit/(q)uit]: 1\n\n✅ Committed! feat(auth): add JWT token validation\n```\n\n---\n\n## ✨ Features\n\n| Feature | Free | Pro |\n|---------|:----:|:---:|\n| AI commit messages | 50/month | ∞ |\n| AI changelog generation | 3/month | ∞ |\n| Conventional Commits | ✅ | ✅ |\n| Emoji commits | ✅ | ✅ |\n| Multi-language (7 languages) | ✅ | ✅ |\n| Git hook integration | ✅ | ✅ |\n| GitHub Action | ✅ | ✅ |\n| No watermark | ❌ | ✅ |\n| Custom commit styles | ✅ (3 styles) | ✅ (5 styles) |\n| Semantic Release style | ❌ | ✅ |\n| GitMoji Dictionary style | ❌ | ✅ |\n| Team features | ❌ | ✅ |\n| Priority support | ❌ | ✅ |\n\n---\n\n## 📦 Installation\n\n```bash\n# With pip\npip install gitmoji-ai\n\n# With pipx (recommended for CLI tools)\npipx install gitmoji-ai\n\n# With uv\nuv tool install gitmoji-ai\n```\n\n---\n\n## 🚀 Quick Start\n\n### 1. Set your OpenAI API key\n\n```bash\nexport GMAI_OPENAI_API_KEY=\"sk-your-key-here\"\n```\n\nGet one at [platform.openai.com/api-keys](https://platform.openai.com/api-keys) — costs ~$0.15 per 1M tokens.\n\n### 2. Initialize in your repo\n\n```bash\ncd your-project\ngmai init\n```\n\nThis creates `.env` and installs a git hook that suggests commit messages automatically.\n\n### 3. Make a commit\n\n```bash\n# Stage your changes\ngit add .\n\n# Generate AI commit message and commit\ngmai commit\n\n# Or with auto-staging\ngmai commit --stage\n\n# Or just use git normally — the hook will suggest!\ngit commit\n```\n\n### 4. Generate changelog\n\n```bash\n# Auto-generate from recent commits\ngmai changelog --version v1.2.0\n\n# Output to file\ngmai changelog --version v1.2.0 --output CHANGELOG.md\n\n# Spanish language\ngmai changelog --version v1.2.0 --lang es\n```\n\n---\n\n## 🎮 Commands\n\n| Command | Description |\n|---------|-------------|\n| `gmai commit` | 🤖 Generate AI commit message and commit |\n| `gmai changelog` | 📝 Generate AI changelog |\n| `gmai init` | 🔧 Initialize GitMoji AI in repo |\n| `gmai info` | 📊 Show repo info \u0026 usage stats |\n| `gmai suggest` | 💡 Quick suggest (for hooks, non-interactive) |\n| `gmai team init` | 👥 Create team config file |\n| `gmai team check` | 👥 Check commits against team rules |\n| `gmai support` | 🆘 Create a support request with debug info |\n| `gmai pro activate KEY` | ⭐ Activate Pro license |\n| `gmai pro status` | 🔍 Check Pro license status |\n| `gmai pro purchase` | 💳 Get Pro license |\n| `gmai pro login` | 🔐 Login via GitHub Sponsors |\n\n### Commit options\n\n```bash\ngmai commit --style conventional    # Conventional: feat(auth): add login (default)\ngmai commit --style emoji           # Emoji-style: ✨ add login\ngmai commit --style plain           # Plain: Add login functionality\ngmai commit --style semantic-release # Semantic Release: feat(api)!: change auth (Pro)\ngmai commit --style gitmoji-dict    # GitMoji Dictionary: 🌐 add Spanish translation (Pro)\ngmai commit --lang ru               # Russian: feat(auth): добавить логин\ngmai commit --lang es               # Spanish: feat(auth): añadir login\ngmai commit --lang de               # German: feat(auth): login hinzufügen\ngmai commit --lang fr               # French: feat(auth): ajouter le login\ngmai commit --lang ja               # Japanese: feat(auth): ログインを追加\ngmai commit --lang zh               # Chinese: feat(auth): 添加登录\ngmai commit --stage                 # Auto-stage all changes\ngmai commit --sign                  # GPG-sign the commit\ngmai commit --yes                   # Skip confirmation, use first suggestion\ngmai commit --path ./my-repo        # Specify repo path\n```\n\n### Changelog options\n\n```bash\ngmai changelog --version v2.0.0          # Version tag\ngmai changelog --format angular          # Angular format\ngmai changelog --lang es                 # Spanish changelog\ngmai changelog --since v1.0.0            # Only changes since tag\ngmai changelog --no-ai                   # Manual grouping (no AI)\ngmai changelog --output CHANGELOG.md     # Write to file\n```\n\n### Team features\n\n```bash\n# Create team config\ngmai team init\n\n# Check if recent commits comply with team rules\ngmai team check\n```\n\nThe team config (`.gitmoji-ai-team.yml`) can be committed to the repo so all team members follow the same rules:\n\n```yaml\n# .gitmoji-ai-team.yml\nrequired_types: [feat, fix, docs, chore]   # Only these types allowed\nrequired_scopes: [api, ui, auth]            # Enforce scope usage\nmax_subject_length: 72                       # Limit subject line\nrequire_scope: true                          # Scope is mandatory\ncommit_style: conventional                  # Team-wide style\nlanguage: en                                 # Team-wide language\ndisallowed_types: [poo]                      # Ban certain types\n```\n\n---\n\n## 🎨 Commit Styles\n\n| Style | Format | Example | Pro Only |\n|-------|--------|---------|:--------:|\n| `conventional` | `type(scope): desc` | `feat(auth): add JWT validation` | ❌ |\n| `emoji` | `emoji desc` | `✨ add JWT validation` | ❌ |\n| `plain` | `Description` | `Add JWT validation` | ❌ |\n| `semantic-release` | `type(scope)!: desc` | `feat(api)!: change auth response` | ✅ |\n| `gitmoji-dict` | `emoji desc` | `🌐 add Spanish translation` | ✅ |\n\n### Semantic Release style (Pro)\nFollows [semantic-release](https://semantic-release.gitbook.io/) conventions:\n- `feat:` → triggers MINOR release\n- `fix:` → triggers PATCH release  \n- `feat!:` or `fix!:` → triggers MAJOR release\n- `BREAKING CHANGE:` in body\n\n### GitMoji Dictionary style (Pro)\nUses the full [gitmoji](https://gitmoji.dev/) dictionary with 30+ specific emojis:\n- 🌐 i18n/translations\n- ♿ accessibility\n- 📈 analytics\n- 🔒 security\n- 🐳 docker\n- 💄 UI/cosmetics\n- And many more...\n\n---\n\n## 🌍 Multi-language Support\n\n| Language | Flag | Example |\n|----------|------|---------|\n| English | 🇬🇧 | `feat(auth): add login validation` |\n| Russian | 🇷🇺 | `feat(auth): добавить валидацию логина` |\n| Spanish | 🇪🇸 | `feat(auth): añadir validación de login` |\n| German | 🇩🇪 | `feat(auth): login-validierung hinzufügen` |\n| French | 🇫🇷 | `feat(auth): ajouter la validation du login` |\n| Japanese | 🇯🇵 | `feat(auth): ログイン検証を追加` |\n| Chinese | 🇨🇳 | `feat(auth): 添加登录验证` |\n\n---\n\n## 🤖 GitHub Action\n\nUse GitMoji AI in your CI/CD pipeline:\n\n```yaml\nname: Auto Changelog\n\non:\n  push:\n    branches: [main]\n\njobs:\n  changelog:\n    runs-on: ubuntu-latest\n    steps:\n      - uses: actions/checkout@v4\n        with:\n          fetch-depth: 0\n\n      - uses: sochiautoparts/gitmoji-ai@v1\n        with:\n          openai-api-key: ${{ secrets.OPENAI_API_KEY }}\n          license-key: ${{ secrets.LICENSE_KEY }}\n          generate-changelog: true\n          version: v1.2.0\n          language: en\n```\n\nOr use it as a PR checker:\n\n```yaml\nname: AI Commit Review\n\non:\n  pull_request:\n\njobs:\n  review:\n    runs-on: ubuntu-latest\n    steps:\n      - uses: actions/checkout@v4\n        with:\n          fetch-depth: 0\n\n      - uses: sochiautoparts/gitmoji-ai@v1\n        with:\n          openai-api-key: ${{ secrets.OPENAI_API_KEY }}\n          license-key: ${{ secrets.LICENSE_KEY }}\n          language: en\n```\n\n---\n\n## ⭐ Pro Version \u0026 StarsPay\n\n### Why upgrade?\n\n- **∞ Unlimited** AI commits and changelogs\n- **No watermark** — clean commit history\n- **5 commit styles** — including semantic-release and gitmoji-dict\n- **Team features** — shared settings via `.gitmoji-ai-team.yml`\n- **7 languages** — with proper native language prompts\n- **Priority support** — faster responses\n\n### 💳 StarsPay — Pay with Telegram Stars\n\nPurchase directly in Telegram — pay with Stars, get your license key in seconds!\n\n- **Bot:** 👉 [@allstarspay_bot](https://t.me/allstarspay_bot)\n\n| Plan | Price | Best for |\n|------|-------|----------|\n| **Free** | $0 | Personal projects |\n| **1 месяц** | ⭐ 149/month | Try Pro features |\n| **1 год** | ⭐ 999/year | Best value — save 44% |\n| **Навсегда** | ⭐ 2,999 | Pay once, use forever |\n\n**3 steps to Pro:**\n\n```bash\n# 1. Open @allstarspay_bot in Telegram and pay with Stars\n#    👉 https://t.me/allstarspay_bot\n\n# 2. Copy your license key (format: SP-GMA-xxxxxx)\n\n# 3. Activate:\ngmai pro activate SP-GMA-xxxxxxxx\n```\n\n**Or activate with an existing key:**\n\n```bash\ngmai pro activate YOUR-LICENSE-KEY\ngmai pro status    # Check your license\n```\n\n### 🔐 License Verification (No API Server Needed!)\n\nGitMoji AI verifies Pro licenses **without requiring an API server**. The verification works in two tiers:\n\n#### 1️⃣ Primary: Public `licenses.json` on GitHub\n\nThe tool fetches a public JSON file from GitHub to verify licenses — **no authentication, no rate limits, no API server needed**:\n\n- **URL:** `https://raw.githubusercontent.com/sochiautoparts/stars-pay-bot/main/data/licenses.json`\n- The JSON file contains license entries with a `key_hash` field (SHA-256 truncated to 16 hex characters)\n- Verification: compute `hashlib.sha256(key.encode()).hexdigest()[:16]` and match against `key_hash`\n- Also checks `active` field and `expires_at` (0 = lifetime)\n\n#### 2️⃣ Fallback: REST API (if `STARSPAY_API_URL` is set)\n\nIf the JSON method doesn't validate and `STARSPAY_API_URL` is configured, the tool falls back to a REST API call:\n\n- **POST** to `{STARSPAY_API_URL}/api/v1/verify`\n- **Header:** `X-API-Key: {STARSPAY_API_KEY}`\n- **Body:** `{\"key\": \"\u003clicense_key\u003e\"}`\n\nThe `is_pro()` function caches verification results for 1 hour in memory and also saves to local SQLite for offline use (7-day max).\n\n### Environment Variables for CI/CD\n\nFor automated environments (GitHub Actions, Docker, etc.):\n\n```bash\nLICENSE_KEY=SP-GMA-xxxxxxxx                                   # Your license key (required for Pro)\nSTARSPAY_API_URL=                                              # Optional: StarsPay API URL (empty = JSON-only verification)\nSTARSPAY_API_KEY=                                              # Optional: StarsPay API key (only if using API fallback)\nGITHUB_CLIENT_ID=                                              # Optional: GitHub OAuth App client ID for device flow login\n```\n\n- **LICENSE_KEY** — Your Pro license key. If set, the tool verifies it via the public JSON file (primary) or REST API (fallback).\n- **STARSPAY_API_URL** — Optional. If set, the REST API is used as a fallback when JSON verification doesn't find the key.\n- **STARSPAY_API_KEY** — Optional. API key for the REST API (only needed if `STARSPAY_API_URL` is set).\n- **GITHUB_CLIENT_ID** — Optional. If set, enables interactive GitHub Device Flow login via `gmai pro login`.\n- If only `LICENSE_KEY` is set, verification uses the public GitHub JSON — **no API server required!**\n\n---\n\n## 🔧 Configuration\n\nCreate `.env` in your project root (or set environment variables):\n\n```bash\n# Required\nGMAI_OPENAI_API_KEY=sk-your-key-here\n\n# Optional\nGMAI_DEFAULT_LANGUAGE=en          # Default commit language (en, ru, es, de, fr, ja, zh)\nGMAI_COMMIT_STYLE=conventional    # Default commit style (conventional, emoji, plain, semantic-release, gitmoji-dict)\nGMAI_OPENAI_MODEL=gpt-4o-mini    # AI model\n\n# StarsPay license verification\nLICENSE_KEY=                      # License key for Pro features (primary: verified via public GitHub JSON)\nSTARSPAY_API_URL=                 # Optional: StarsPay API URL (empty = JSON-only verification)\nSTARSPAY_API_KEY=                 # Optional: StarsPay API key\n\n# GitHub Device Flow (optional, for interactive login)\nGITHUB_CLIENT_ID=                 # GitHub OAuth App client ID\n```\n\n### Team Configuration\n\nCreate `.gitmoji-ai-team.yml` in your repo root:\n\n```yaml\n# .gitmoji-ai-team.yml — commit this file to share team conventions\nrequired_types: [feat, fix, docs, chore]\nrequired_scopes: [api, ui, auth]\nmax_subject_length: 72\nrequire_scope: false\ndisallowed_types: []\ncommit_style: conventional\nlanguage: en\nchangelog_format: keepachangelog\n```\n\nWhen this file exists, `gmai commit` will:\n- Use team's default style and language\n- Validate commit messages against team rules\n- Warn about violations before committing\n\n### Git Hook\n\nAfter `gmai init`, every `git commit` will show AI suggestions in your editor:\n\n```\n# 🤖 GitMoji AI Suggestion:\n# feat(auth): add JWT token validation\n```\n\nJust uncomment the line you like, save, and close the editor!\n\n---\n\n## 🏗️ Architecture\n\n```\ngitmoji-ai/\n├── src/gitmoji_ai/\n│   ├── cli.py          # Typer CLI interface\n│   ├── ai_engine.py    # AI commit generation (OpenAI) + 7 language prompts + 5 styles\n│   ├── git_ops.py      # Git operations (diff, commit)\n│   ├── changelog.py    # Changelog generator (7 languages)\n│   ├── config.py       # Configuration management\n│   ├── usage.py        # Usage tracking \u0026 license validation (JSON + API)\n│   ├── suggest.py      # Quick suggest (for hooks) with rate limiting\n│   ├── sponsors.py     # GitHub Sponsors + Device Flow auth\n│   └── team.py         # Team config (.gitmoji-ai-team.yml)\n├── action.yml          # GitHub Action (canonical)\n├── .github/workflows/\n│   ├── ci.yml          # CI pipeline\n│   └── changelog.yml   # Auto changelog\n├── tests/\n│   └── test_core.py    # Test suite\n└── pyproject.toml      # Project config\n```\n\n---\n\n## 🤝 Contributing\n\nContributions are welcome! Please read our [Contributing Guide](CONTRIBUTING.md).\n\n1. Fork the repository\n2. Create your feature branch: `git checkout -b feat/amazing-feature`\n3. Commit with GitMoji AI: `gmai commit` 😉\n4. Push: `git push origin feat/amazing-feature`\n5. Open a Pull Request\n\n---\n\n## 📄 License\n\nMIT License — see [LICENSE](LICENSE) for details.\n\n---\n\n\u003cdiv align=\"center\"\u003e\n\n**Made with 🤖 and ❤️ by [GitMoji AI](https://github.com/sochiautoparts/gitmoji-ai)**\n\n[⭐ Star on GitHub](https://github.com/sochiautoparts/gitmoji-ai) • [🐛 Report Bug](https://github.com/sochiautoparts/gitmoji-ai/issues) • [💡 Request Feature](https://github.com/sochiautoparts/gitmoji-ai/issues) • [💎 Get Pro via StarsPay](https://t.me/allstarspay_bot)\n\n\u003c/div\u003e\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsochiautoparts%2Fgitmoji-ai","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fsochiautoparts%2Fgitmoji-ai","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsochiautoparts%2Fgitmoji-ai/lists"}