{"id":50472477,"url":"https://github.com/semcod/tagi","last_synced_at":"2026-06-01T11:04:04.185Z","repository":{"id":360452745,"uuid":"1250188240","full_name":"semcod/tagi","owner":"semcod","description":null,"archived":false,"fork":false,"pushed_at":"2026-05-26T14:23:50.000Z","size":517,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-05-26T14:24:21.920Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"HTML","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/semcod.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"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}},"created_at":"2026-05-26T11:43:56.000Z","updated_at":"2026-05-26T14:23:50.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/semcod/tagi","commit_stats":null,"previous_names":["semcod/tagi"],"tags_count":2,"template":false,"template_full_name":null,"purl":"pkg:github/semcod/tagi","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/semcod%2Ftagi","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/semcod%2Ftagi/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/semcod%2Ftagi/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/semcod%2Ftagi/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/semcod","download_url":"https://codeload.github.com/semcod/tagi/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/semcod%2Ftagi/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":33771633,"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-06-01T02:00:06.963Z","response_time":115,"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":[],"created_at":"2026-06-01T11:04:03.331Z","updated_at":"2026-06-01T11:04:04.173Z","avatar_url":"https://github.com/semcod.png","language":"HTML","funding_links":[],"categories":[],"sub_categories":[],"readme":"# tagi\n\n\n## AI Cost Tracking\n\n![PyPI](https://img.shields.io/badge/pypi-costs-blue) ![Version](https://img.shields.io/badge/version-0.1.31-blue) ![Python](https://img.shields.io/badge/python-3.9+-blue) ![License](https://img.shields.io/badge/license-Apache--2.0-green)\n![AI Cost](https://img.shields.io/badge/AI%20Cost-$1.60-orange) ![Human Time](https://img.shields.io/badge/Human%20Time-9.6h-blue) ![Model](https://img.shields.io/badge/Model-openrouter%2Fqwen%2Fqwen3--coder--next-lightgrey)\n\n- 🤖 **LLM usage:** $1.5985 (20 commits)\n- 👤 **Human dev:** ~$955 (9.6h @ $100/h, 30min dedup)\n\nGenerated on 2026-05-26 using [openrouter/qwen/qwen3-coder-next](https://openrouter.ai/qwen/qwen3-coder-next)\n\n---\n\n`tagi` to paczka Python i CLI do **orkiestracji wysyłania zmian Git**, a nie zamiennik komendy `git`.\n\n## Pozycjonowanie\n\n- **Git** odpowiada za wykonanie (`status`, `add`, `commit`, `push`).\n- **tagi** odpowiada za analizę, grupowanie, planowanie i bezpieczne uruchomienie workflow.\n- **gh/glab** odpowiadają za integrację i auth z providerami.\n\n## Cel\n\n`tagi` pomaga zdecydować, **co** wysłać i **jak** to opisać, a następnie uruchamia istniejące narzędzia (`git`, opcjonalnie `gh`/`glab`) po jawnym potwierdzeniu użytkownika.\n\n## Zasady projektu\n\n- jawność przed magią,\n- preview → confirm → execute,\n- brak ukrywania realnych komend,\n- deterministyczne tagowanie jako domyślne.\n- LLM opcjonalnie do redakcji opisów, nie do sterowania logiką wysyłki.\n\n## Zakres odpowiedzialności\n\n### Co `tagi` powinien robić\n\n- analizować `git status --porcelain` i diffy,\n- budować grupy zmian na podstawie heurystyk,\n- proponować paczki wysyłkowe i plan wykonania,\n- generować draft tytułu i treści opisu commita,\n- uruchamiać `git` i opcjonalnie `gh`/`glab` dopiero po decyzji użytkownika.\n\n### Czego `tagi` nie powinien robić\n\n- zastępować `git add/commit/push`,\n- implementować własnego modelu stanu repo poza `.git`,\n- ukrywać jakie komendy wykona,\n- zmieniać semantyki commit/push,\n- zastępować workflow branch/rebase/merge.\n\n## Komendy\n\n```bash\ntagi scan \u003cpath\u003e [--grouped] [--by-branch]\ntagi list-groups \u003cpath\u003e\ntagi stats \u003cpath\u003e\ntagi filter \u003ctags\u003e \u003cpath\u003e [--all] [--min-risk FLOAT] [--max-risk FLOAT] [--min-complexity FLOAT] [--max-complexity FLOAT] [--min-impact FLOAT] [--max-impact FLOAT]\ntagi file \u003cfile_path\u003e \u003cpath\u003e\ntagi inspect \u003ctag\u003e \u003cpath\u003e [--diff]\ntagi summary \u003cpath\u003e [--output FILE]\ntagi safe \u003cpath\u003e\ntagi init \u003cpath\u003e\ntagi auth \u003cpath\u003e [--provider PROVIDER]\ntagi hooks \u003cpath\u003e [--install] [--uninstall] [--list]\ntagi deps \u003cpath\u003e [--cycles] [--critical]\ntagi metrics \u003cpath\u003e [--output FILE] [--report]\ntagi draft \u003ctag\u003e \u003cpath\u003e [--template TEMPLATE]\ntagi send \u003cpath\u003e [tags...] [--dry-run] [--push] [--template TEMPLATE] [--interactive] [--auto-order]\ntagi auto \u003cpath\u003e [--dry-run] [--template TEMPLATE]\ntagi deploy \u003cpath\u003e [--dry-run] [--koru-host HOST] [--koru-port PORT]\ntagi publish \u003ctag\u003e \u003cpath\u003e [--dry-run] [--template TEMPLATE]\n```\n\n- `scan` — analiza zmian w repozytorium (z opcją `--grouped` do grupowania po tagach)\n- `list-groups` — lista paczek i tagów\n- `stats` — statystyki zmian (liczba plików, linii, rozkład typów i tagów)\n- `filter` — filtrowanie plików po tagach (comma-separated, np. `small,docs`; `--all` wymaga wszystkich tagów)\n- `file` — szczegóły pojedynczego pliku (wszystkie tagi, linie zmienione, score ryzyka)\n- `inspect` — podgląd paczki i ryzyka (z opcją `--diff` do pokazania zmian)\n- `summary` — generuj kompleksowy raport podsumowujący (opcjonalnie zapisz do pliku)\n- `safe` — pokaż bezpieczne zmiany do wysłania najpierw (niskie ryzyko, małe, nie risky/deps/config)\n- `init` — wygeneruj plik konfiguracyjny `tagi.toml.example`\n- `auth` — sprawdź status autoryzacji GitHub/GitLab (opcjonalnie dla konkretnego providera)\n- `hooks` — zarządzaj integracją git hooks (instalacja, odinstalowanie, lista, status)\n- `deps` — analizuj graf zależności zmian Python (cykle, ścieżka krytyczna, kolejność)\n- `metrics` — zbieraj i wyświetlaj metryki o zmianach (eksport JSON, raport)\n- `draft` — propozycja opisu commita z wyborem szablonu\n- `send` — po potwierdzeniu wykonuje `git add` i `git commit`; push jest opcjonalny (z trybem interaktywnym); akceptuje wiele tagów w kolejności priorytetu, np. `tagi send . small docs`; bez tagów lub z flagą --auto-order sortuje automatycznie od najprostszych do najtrudniejszych\n- `auto` — automatycznie skanuje, sortuje i wysyła wszystkie zmiany z pushem (odpowiednik `tagi scan . \u0026\u0026 tagi send . --auto-order --push`)\n- `deploy` — wdraża zmiany na serwer z analizą priorytetów przez API Koru (inteligentna kolejność wdrażania)\n- `publish` — rozszerzenie o PR/MR przez provider z auto-detection (GitHub/GitLab)\n\n## Architektura (kierunek)\n\n```text\nsrc/tagi/\n  scanner/\n  cli.py\n  config.py\n  models/\n    change.py\n    group.py\n    plan.py\n  scanner/\n    status.py\n    diff.py\n    files.py\n  heuristics/\n    tags.py\n    scoring.py\n    rules.py\n  planner/\n    grouper.py\n    selector.py\n    preview.py\n  composer/\n    commit_message.py\n    summary.py\n  executor/\n    git.py\n    publish.py\n  providers/\n    base.py\n    github.py\n    gitlab.py\n  llm/\n    llx_adapter.py\n\n## System priorytetyzacji\n\n`tagi` automatycznie priorytetyzuje zmiany na podstawie heurystyk ryzyka i złożoności:\n\n### Hierarchia tagów (od najwyższego priorytetu)\n```\n#risky \u003e #large \u003e #deps \u003e #config \u003e #new \u003e #tests \u003e #docs \u003e #feature \u003e #refactor \u003e #small\n```\n\n### Algorytm priorytetyzacji\n- **Risk score** (0-1) - wyższy = większe ryzyko\n- **Lines changed** - więcej linii = większa złożoność  \n- **Change type** - MODIFIED \u003c ADDED \u003c DELETED\n- **Tag priority** - według hierarchii powyżej\n\n### Przykład automatycznej priorytetyzacji\n```bash\n# Zmiany zostaną automatycznie posortowane:\n# 1. config.yaml (risk: 0.1, lines: 2) → #config\n# 2. test.py (risk: 0.2, lines: 5) → #small  \n# 3. test_file.py (risk: 0.3, lines: 20) → #tests\n# 4. big.py (risk: 0.8, lines: 100) → #risky (najwyższy priorytet!)\n```\n\n## Przykłady użycia\n\n### Podstawowe operacje\n```bash\n# Podstawowe skanowanie\ntagi scan /path/to/repo\n\n# Skanowanie z grupowaniem po tagach\ntagi scan /path/to/repo --grouped\n\n# Statystyki zmian\ntagi stats /path/to/repo\n```\n\n### Filtrowanie i analiza\n```bash\n# Filtrowanie po jednym tagu\ntagi filter \"small\" /path/to/repo\n\n# Filtrowanie po wielu tagach (OR logic - pasuje do dowolnego)\ntagi filter \"small,docs\" /path/to/repo\n\n# Filtrowanie po wielu tagach (AND logic - wymaga wszystkich)\ntagi filter \"config,small\" /path/to/repo --all\n\n# Filtrowanie po zakresie ryzyka\ntagi filter \"all\" /path/to/repo --min-risk 0.5 --max-risk 0.8\n\n# Szczegóły pojedynczego pliku\ntagi file README.md /path/to/repo\n\n# Podgląd tagu ze statystykami\ntagi inspect docs /path/to/repo\n\n# Pokaż bezpieczne zmiany do wysłania najpierw\ntagi safe /path/to/repo\n```\n\n### Raporty i podsumowania\n```bash\n# Generuj raport podsumowujący\ntagi summary /path/to/repo\n\n# Zapisz raport do pliku\ntagi summary /path/to/repo --output report.txt\n\n# Lista grup zmian\ntagi list-groups /path/to/repo\n\n# Inspekcja z podglądem diffów\ntagi inspect #small /path/to/repo --diff\n```\n\n### Tworzenie commitów\n```bash\n# Draft z konwencjonalnym formatem\ntagi draft small /path/to/repo --template conventional\n\n# Draft z prostym formatem\ntagi draft small /path/to/repo --template simple\n\n# Draft z formatem jednej linii\ntagi draft small /path/to/repo --template oneline\n\n# Draft z formatem skupionym na plikach\ntagi draft small /path/to/repo --template files\n```\n\n### Wysyłanie z priorytetyzacją\n```bash\n# Wysłanie pojedynczej grupy z pushem\ntagi send small /path/to/repo --push --template detailed\n\n# Wysłanie wielu grup w określonej kolejności\ntagi send /path/to/repo small docs tests --push\n\n# Automatyczna priorytetyzacja (od najbezpieczniejszych)\ntagi send /path/to/repo --auto-order --push\n\n# Wysyłanie tylko bezpiecznych zmian\ntagi send /path/to/repo $(tagi safe /path/to/repo --tags-only) --push\n```\n\n### Publikacja PR/MR\n```bash\n# Opublikuj PR/MR (szablon conventional)\ntagi publish small /path/to/repo --template conventional\n\n# Publikacja z automatycznym wykrywaniem providera\ntagi publish risky /path/to/repo --dry-run\n```\n\n### Integracja z Koru (wdrożenia na serwer)\n```bash\n# Analiza priorytetów wdrożenia z API Koru\ntagi deploy /path/to/repo\n\n# Podgląd planu wdrożenia\ntagi deploy /path/to/repo --dry-run\n\n# Wdrożenie z niestandardowym hostem Koru\ntagi deploy /path/to/repo --koru-host 192.168.1.100 --koru-port 8790\n```\n\n**Korzyści z integracji z Koru:**\n- 🎯 **Inteligentna kolejność** - analiza priorytetów przez API Koru\n- 📊 **Analiza ryzyka** - ocena wpływu zmian na system\n- 🏗️ **Kontekst projektu** - uwzględnienie topologii i zależności\n- 🚦 **Quality gates** - automatyczne sprawdzanie jakości\n- 📋 **Planfile tickets** - integracja z systemem ticketów\n\n### Automatyzacja\n```bash\n# Pełna automatyzacja - skanuj, sortuj, commituj i pushuj\ntagi auto /path/to/repo\n\n# Automatyzacja z podglądem\ntagi auto /path/to/repo --dry-run\n\n# Automatyzacja z konwencjonalnym formatem\ntagi auto /path/to/repo --template conventional\n```\n\n### Przepływy pracy (workflows)\n```bash\n# Workflow 1: Szybka automatyzacja\ntagi auto /path/to/repo\n\n# Workflow 2: Bezpieczne zmiany najpierw\ntagi safe /path/to/repo\ntagi send /path/to/repo $(tagi safe /path/to/repo --tags-only) --push\n\n# Workflow 3: Priorytetyzacja od ryzykownych\ntagi scan /path/to/repo --grouped\ntagi send /path/to/repo risky large --push\n\n# Workflow 4: Pełny cykl development\ntagi scan /path/to/repo\ntagi summary /path/to/repo --output dev-report.txt\ntagi auto /path/to/repo  # zamiast send + push\ntagi publish /path/to/repo feature --template detailed\n\n# Workflow 5: Inteligentne wdrożenie z Koru\ntagi deploy /path/to/repo --dry-run  # analiza priorytetów\ntagi deploy /path/to/repo  # wdrożenie z uwzględnieniem kolejności\n\n# Workflow 6: Pełny cykl z wdrożeniem\ntagi scan /path/to/repo\ntagi auto /path/to/repo  # commit lokalny\ntagi deploy /path/to/repo  # wdrożenie na serwer z analizą\n```\n\n## Konfiguracja\n\nUtwórz plik `tagi.toml` w katalogu repozytorium:\n\n```toml\n[rules]\n\"frontend/\" = \"#frontend\"\n\"backend/\" = \"#backend\"\n\"migration/\" = \"#risky\"\n\n[colors]\n# Własne kolory dla tagów (nazwy kolorów Rich)\n\"#frontend\" = \"blue\"\n\"#backend\" = \"green\"\n\"#risky\" = \"red\"\n\n[heuristics]\n# Własne heurystyki - mapuj wzorce do wielu tagów\n\"api/\" = [\"#api\", \"#backend\"]\n\"cli/\" = [\"#cli\", \"#tool\"]\n\"migration/\" = [\"#risky\", \"#database\"]\n\n[tag_definitions]\n# Opisy tagów\n\"#small\" = \"Małe zmiany (\u003c 10 linii)\"\n\"#large\" = \"Duże zmiany (\u003e 100 linii)\"\n\"#risky\" = \"Zmiany wysokiego ryzyka\"\n\n[templates]\n# Własne szablony komunikatów commitów\ndefault = \"{tag}: {count} plików ({files})\"\ndetailed = \"Commit {tag}\\n\\nZmienione pliki ({count}):\\n{files}\\n\\nWygenerowane przez tagi\"\n\n[ignore]\n# Wzorce do ignorowania podczas skanowania\n[\"node_modules/\", \".git/\", \"__pycache__/\", \"*.pyc\", \".idea/\", \".vscode/\"]\n```\n\n## Definicja produktu\n\n\u003e `tagi` to orchestrator wysyłania zmian Git: analizuje nie wysłane pliki, grupuje je hashtagami, proponuje sensowne paczki commitów i uruchamia istniejące narzędzia Git/GitHub/GitLab do publikacji.\n\n\n## License\n\nLicensed under Apache-2.0.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsemcod%2Ftagi","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fsemcod%2Ftagi","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsemcod%2Ftagi/lists"}