git-auto-pro 1.1.1__tar.gz → 2.5.0__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.
Files changed (71) hide show
  1. git_auto_pro-2.5.0/.editorconfig +46 -0
  2. git_auto_pro-2.5.0/.gitattributes +34 -0
  3. git_auto_pro-2.5.0/.gitignore +149 -0
  4. git_auto_pro-2.5.0/.pre-commit-config.yaml +74 -0
  5. git_auto_pro-2.5.0/CHANGELOG.md +132 -0
  6. git_auto_pro-2.5.0/CONTRIBUTING.md +444 -0
  7. git_auto_pro-2.5.0/Makefile +117 -0
  8. {git_auto_pro-1.1.1 → git_auto_pro-2.5.0}/PKG-INFO +83 -4
  9. {git_auto_pro-1.1.1 → git_auto_pro-2.5.0}/README.md +82 -3
  10. git_auto_pro-2.5.0/SETUP_GUIDE.md +528 -0
  11. git_auto_pro-2.5.0/docs/api.md +229 -0
  12. git_auto_pro-2.5.0/docs/examples.md +280 -0
  13. git_auto_pro-2.5.0/docs/troubleshooting.md +245 -0
  14. git_auto_pro-2.5.0/docs/usage.md +256 -0
  15. git_auto_pro-2.5.0/examples/advanced_usage.py +159 -0
  16. git_auto_pro-2.5.0/examples/basic_usage.py +46 -0
  17. {git_auto_pro-1.1.1 → git_auto_pro-2.5.0}/git_auto_pro/__init__.py +1 -1
  18. {git_auto_pro-1.1.1 → git_auto_pro-2.5.0}/git_auto_pro/backup.py +14 -9
  19. {git_auto_pro-1.1.1 → git_auto_pro-2.5.0}/git_auto_pro/cli.py +144 -4
  20. git_auto_pro-2.5.0/git_auto_pro/commands/__init__.py +1 -0
  21. git_auto_pro-2.5.0/git_auto_pro/commands/doctor.py +135 -0
  22. git_auto_pro-2.5.0/git_auto_pro/commands/release.py +259 -0
  23. git_auto_pro-2.5.0/git_auto_pro/commands/safe_flow.py +145 -0
  24. {git_auto_pro-1.1.1 → git_auto_pro-2.5.0}/git_auto_pro/config.py +4 -0
  25. {git_auto_pro-1.1.1 → git_auto_pro-2.5.0}/git_auto_pro/git_commands.py +103 -2
  26. {git_auto_pro-1.1.1 → git_auto_pro-2.5.0}/git_auto_pro/github.py +182 -58
  27. {git_auto_pro-1.1.1 → git_auto_pro-2.5.0}/git_auto_pro/github_issues.py +108 -117
  28. git_auto_pro-2.5.0/git_auto_pro/github_pr/__init__.py +1 -0
  29. git_auto_pro-2.5.0/git_auto_pro/github_pr/pr_manager.py +278 -0
  30. git_auto_pro-2.5.0/git_auto_pro/scaffolding/hooks.py +138 -0
  31. {git_auto_pro-1.1.1 → git_auto_pro-2.5.0}/git_auto_pro/scaffolding/project.py +17 -5
  32. {git_auto_pro-1.1.1 → git_auto_pro-2.5.0}/git_auto_pro.egg-info/PKG-INFO +83 -4
  33. {git_auto_pro-1.1.1 → git_auto_pro-2.5.0}/git_auto_pro.egg-info/SOURCES.txt +35 -1
  34. {git_auto_pro-1.1.1 → git_auto_pro-2.5.0}/pyproject.toml +2 -2
  35. git_auto_pro-2.5.0/requirements-dev.txt +23 -0
  36. git_auto_pro-2.5.0/requirements.txt +7 -0
  37. git_auto_pro-2.5.0/scripts/build.sh +33 -0
  38. git_auto_pro-2.5.0/scripts/install.sh +26 -0
  39. git_auto_pro-2.5.0/scripts/test.sh +16 -0
  40. {git_auto_pro-1.1.1 → git_auto_pro-2.5.0}/setup.py +2 -2
  41. git_auto_pro-2.5.0/tests/__init__.py +1 -0
  42. git_auto_pro-2.5.0/tests/conftest.py +53 -0
  43. git_auto_pro-2.5.0/tests/test_backup.py +38 -0
  44. git_auto_pro-2.5.0/tests/test_doctor.py +77 -0
  45. git_auto_pro-2.5.0/tests/test_github_remote.py +53 -0
  46. git_auto_pro-2.5.0/tests/test_hooks.py +67 -0
  47. git_auto_pro-2.5.0/tests/test_release.py +132 -0
  48. git_auto_pro-2.5.0/tests/test_safe_flow.py +93 -0
  49. git_auto_pro-2.5.0/tests/test_undo.py +0 -0
  50. git_auto_pro-1.1.1/git_auto_pro/scaffolding/hooks.py +0 -331
  51. {git_auto_pro-1.1.1 → git_auto_pro-2.5.0}/LICENSE +0 -0
  52. {git_auto_pro-1.1.1 → git_auto_pro-2.5.0}/git_auto_pro/gitignore_manager.py +0 -0
  53. {git_auto_pro-1.1.1 → git_auto_pro-2.5.0}/git_auto_pro/scaffolding/__init__.py +0 -0
  54. {git_auto_pro-1.1.1 → git_auto_pro-2.5.0}/git_auto_pro/scaffolding/github_templates.py +0 -0
  55. {git_auto_pro-1.1.1 → git_auto_pro-2.5.0}/git_auto_pro/scaffolding/gitignore.py +0 -0
  56. {git_auto_pro-1.1.1 → git_auto_pro-2.5.0}/git_auto_pro/scaffolding/license.py +0 -0
  57. {git_auto_pro-1.1.1 → git_auto_pro-2.5.0}/git_auto_pro/scaffolding/readme.py +0 -0
  58. {git_auto_pro-1.1.1 → git_auto_pro-2.5.0}/git_auto_pro/scaffolding/templates.py +0 -0
  59. {git_auto_pro-1.1.1 → git_auto_pro-2.5.0}/git_auto_pro/scaffolding/workflows.py +0 -0
  60. {git_auto_pro-1.1.1 → git_auto_pro-2.5.0}/git_auto_pro.egg-info/dependency_links.txt +0 -0
  61. {git_auto_pro-1.1.1 → git_auto_pro-2.5.0}/git_auto_pro.egg-info/entry_points.txt +0 -0
  62. {git_auto_pro-1.1.1 → git_auto_pro-2.5.0}/git_auto_pro.egg-info/requires.txt +0 -0
  63. {git_auto_pro-1.1.1 → git_auto_pro-2.5.0}/git_auto_pro.egg-info/top_level.txt +0 -0
  64. {git_auto_pro-1.1.1 → git_auto_pro-2.5.0}/setup.cfg +0 -0
  65. {git_auto_pro-1.1.1 → git_auto_pro-2.5.0}/tests/test_cli.py +0 -0
  66. {git_auto_pro-1.1.1 → git_auto_pro-2.5.0}/tests/test_config.py +0 -0
  67. {git_auto_pro-1.1.1 → git_auto_pro-2.5.0}/tests/test_git_commands.py +0 -0
  68. {git_auto_pro-1.1.1 → git_auto_pro-2.5.0}/tests/test_github.py +0 -0
  69. {git_auto_pro-1.1.1 → git_auto_pro-2.5.0}/tests/test_github_issues.py +0 -0
  70. {git_auto_pro-1.1.1 → git_auto_pro-2.5.0}/tests/test_gitignore_manager.py +0 -0
  71. {git_auto_pro-1.1.1 → git_auto_pro-2.5.0}/tests/test_scaffolding.py +0 -0
@@ -0,0 +1,46 @@
1
+ # EditorConfig is awesome: https://EditorConfig.org
2
+
3
+ # top-most EditorConfig file
4
+ root = true
5
+
6
+ # Unix-style newlines with a newline ending every file
7
+ [*]
8
+ end_of_line = lf
9
+ insert_final_newline = true
10
+ charset = utf-8
11
+ trim_trailing_whitespace = true
12
+
13
+ # Python files
14
+ [*.py]
15
+ indent_style = space
16
+ indent_size = 4
17
+ max_line_length = 100
18
+
19
+ # YAML files
20
+ [*.{yml,yaml}]
21
+ indent_style = space
22
+ indent_size = 2
23
+
24
+ # JSON files
25
+ [*.json]
26
+ indent_style = space
27
+ indent_size = 2
28
+
29
+ # Markdown files
30
+ [*.md]
31
+ trim_trailing_whitespace = false
32
+ max_line_length = off
33
+
34
+ # Shell scripts
35
+ [*.sh]
36
+ indent_style = space
37
+ indent_size = 2
38
+
39
+ # Makefile
40
+ [Makefile]
41
+ indent_style = tab
42
+
43
+ # Package files
44
+ [{package.json,*.lock}]
45
+ indent_style = space
46
+ indent_size = 2
@@ -0,0 +1,34 @@
1
+ # Auto detect text files and perform LF normalization
2
+ * text=auto
3
+
4
+ # Python files
5
+ *.py text eol=lf
6
+
7
+ # Shell scripts
8
+ *.sh text eol=lf
9
+
10
+ # Windows scripts
11
+ *.bat text eol=crlf
12
+ *.cmd text eol=crlf
13
+
14
+ # Markdown
15
+ *.md text eol=lf
16
+
17
+ # YAML
18
+ *.yml text eol=lf
19
+ *.yaml text eol=lf
20
+
21
+ # JSON
22
+ *.json text eol=lf
23
+
24
+ # Documentation
25
+ *.txt text eol=lf
26
+ LICENSE text eol=lf
27
+ README text eol=lf
28
+
29
+ # Archives
30
+ *.zip binary
31
+ *.tar binary
32
+ *.gz binary
33
+ *.tgz binary
34
+ *.7z binary
@@ -0,0 +1,149 @@
1
+ # Byte-compiled / optimized / DLL files
2
+ __pycache__/
3
+ *.py[cod]
4
+ *$py.class
5
+
6
+ # C extensions
7
+ *.so
8
+
9
+ # Distribution / packaging
10
+ .Python
11
+ build/
12
+ develop-eggs/
13
+ dist/
14
+ downloads/
15
+ eggs/
16
+ .eggs/
17
+ lib/
18
+ lib64/
19
+ parts/
20
+ sdist/
21
+ var/
22
+ wheels/
23
+ share/python-wheels/
24
+ *.egg-info/
25
+ .installed.cfg
26
+ *.egg
27
+ MANIFEST
28
+
29
+ # PyInstaller
30
+ *.manifest
31
+ *.spec
32
+
33
+ # Installer logs
34
+ pip-log.txt
35
+ pip-delete-this-directory.txt
36
+
37
+ # Unit test / coverage reports
38
+ htmlcov/
39
+ .tox/
40
+ .nox/
41
+ .coverage
42
+ .coverage.*
43
+ .cache
44
+ nosetests.xml
45
+ coverage.xml
46
+ *.cover
47
+ *.py,cover
48
+ .hypothesis/
49
+ .pytest_cache/
50
+ cover/
51
+
52
+ # Translations
53
+ *.mo
54
+ *.pot
55
+
56
+ # Django stuff:
57
+ *.log
58
+ local_settings.py
59
+ db.sqlite3
60
+ db.sqlite3-journal
61
+
62
+ # Flask stuff:
63
+ instance/
64
+ .webassets-cache
65
+
66
+ # Scrapy stuff:
67
+ .scrapy
68
+
69
+ # Sphinx documentation
70
+ docs/_build/
71
+
72
+ # PyBuilder
73
+ .pybuilder/
74
+ target/
75
+
76
+ # Jupyter Notebook
77
+ .ipynb_checkpoints
78
+
79
+ # IPython
80
+ profile_default/
81
+ ipython_config.py
82
+
83
+ # pyenv
84
+ .python-version
85
+
86
+ # pipenv
87
+ Pipfile.lock
88
+
89
+ # poetry
90
+ poetry.lock
91
+
92
+ # pdm
93
+ .pdm.toml
94
+
95
+ # PEP 582
96
+ __pypackages__/
97
+
98
+ # Celery stuff
99
+ celerybeat-schedule
100
+ celerybeat.pid
101
+
102
+ # SageMath parsed files
103
+ *.sage.py
104
+
105
+ # Environments
106
+ .env
107
+ .venv
108
+ env/
109
+ venv/
110
+ ENV/
111
+ env.bak/
112
+ venv.bak/
113
+
114
+ # Spyder project settings
115
+ .spyderproject
116
+ .spyproject
117
+
118
+ # Rope project settings
119
+ .ropeproject
120
+
121
+ # mkdocs documentation
122
+ /site
123
+
124
+ # mypy
125
+ .mypy_cache/
126
+ .dmypy.json
127
+ dmypy.json
128
+
129
+ # Pyre type checker
130
+ .pyre/
131
+
132
+ # pytype static type analyzer
133
+ .pytype/
134
+
135
+ # Cython debug symbols
136
+ cython_debug/
137
+
138
+ # IDEs
139
+ .vscode/
140
+ .idea/
141
+ *.swp
142
+ *.swo
143
+ *~
144
+ .DS_Store
145
+
146
+ # Project specific
147
+ *.log
148
+ .git-auto-config.json
149
+ """
@@ -0,0 +1,74 @@
1
+ # Pre-commit hooks configuration
2
+ # Install: pip install pre-commit
3
+ # Setup: pre-commit install
4
+ # Run manually: pre-commit run --all-files
5
+
6
+ repos:
7
+ # General hooks
8
+ - repo: https://github.com/pre-commit/pre-commit-hooks
9
+ rev: v4.5.0
10
+ hooks:
11
+ - id: trailing-whitespace
12
+ - id: end-of-file-fixer
13
+ - id: check-yaml
14
+ - id: check-json
15
+ - id: check-added-large-files
16
+ args: ['--maxkb=1000']
17
+ - id: check-merge-conflict
18
+ - id: check-case-conflict
19
+ - id: check-docstring-first
20
+ - id: debug-statements
21
+ - id: mixed-line-ending
22
+ args: ['--fix=lf']
23
+
24
+ # Python code formatting
25
+ - repo: https://github.com/psf/black
26
+ rev: 23.11.0
27
+ hooks:
28
+ - id: black
29
+ language_version: python3
30
+ args: ['--line-length=100']
31
+
32
+ # Python linting
33
+ - repo: https://github.com/astral-sh/ruff-pre-commit
34
+ rev: v0.1.6
35
+ hooks:
36
+ - id: ruff
37
+ args: ['--fix', '--exit-non-zero-on-fix']
38
+
39
+ # Python import sorting
40
+ - repo: https://github.com/PyCQA/isort
41
+ rev: 5.12.0
42
+ hooks:
43
+ - id: isort
44
+ args: ['--profile', 'black', '--line-length', '100']
45
+
46
+ # Type checking
47
+ - repo: https://github.com/pre-commit/mirrors-mypy
48
+ rev: v1.7.0
49
+ hooks:
50
+ - id: mypy
51
+ additional_dependencies: [types-all]
52
+ args: ['--ignore-missing-imports', '--no-strict-optional']
53
+
54
+ # Security checks
55
+ - repo: https://github.com/PyCQA/bandit
56
+ rev: 1.7.5
57
+ hooks:
58
+ - id: bandit
59
+ args: ['-c', 'pyproject.toml']
60
+ additional_dependencies: ['bandit[toml]']
61
+
62
+ # Markdown linting
63
+ - repo: https://github.com/igorshubovych/markdownlint-cli
64
+ rev: v0.37.0
65
+ hooks:
66
+ - id: markdownlint
67
+ args: ['--fix']
68
+
69
+ # YAML linting
70
+ - repo: https://github.com/adrienverge/yamllint
71
+ rev: v1.33.0
72
+ hooks:
73
+ - id: yamllint
74
+ args: ['-d', '{extends: default, rules: {line-length: disable}}']
@@ -0,0 +1,132 @@
1
+ # Changelog
2
+
3
+ All notable changes to this project will be documented in this file.
4
+
5
+ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
6
+ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
7
+
8
+ ## [2.5.0] - 2026-07-26
9
+
10
+ ### 🔴 Critical Fixes
11
+ - **Repository owner now detected from the remote URL** — `issue`, `pr`, `prs`, `merge-pr`, `review-pr`, `collab`, and `protect` previously assumed the repository belonged to the authenticated user (`repos/<you>/<repo>`), so they 404'd on organization, fork, or collaborator repos. The owner is now parsed from the `origin` remote (HTTPS, scp-style SSH `git@github.com:owner/repo`, `ssh://`, and `git://` forms). `--repo owner/name` is supported on all of these commands; a bare `--repo name` keeps the legacy behavior (paired with your login).
12
+ - **`git-auto new` respects `default_branch`** — project creation no longer hardcodes `main`; it reads the configured default branch and aligns the local branch (`git branch -M`) before pushing, so it no longer fails when git's initial branch is `master`.
13
+ - **Backups now preserve history** — `backup` archives the entire `.git` directory (including `objects/`). Previously only `.git/{config,HEAD,refs,hooks}` were archived, leaving refs pointing at missing objects, so a restored repo had no history. `restore` now uses the `filter="data"` extraction guard on Python 3.12+.
14
+ - **Generated git hooks are POSIX-`sh` safe** — `pre-commit`/`pre-push` hooks used the bash-only `&>` redirect, which `/bin/sh` (dash on Ubuntu/Debian) parses as `&` (background) + `> /dev/null`. This made the `command -v <tool>` guard always pass, so the hook ran the (missing) tool and failed, blocking commits on systems without ruff/black/pytest installed. Replaced with the POSIX `> /dev/null 2>&1` form.
15
+ - **PR reviewers/labels report the real outcome** — `pr` no longer prints `✓ Reviewers requested` / `✓ Labels added` when the API rejected the request (e.g. 422). The sub-requests now call `raise_for_status()` and report the actual HTTP status on failure.
16
+ - **`close_issue` / `update_issue` network handling** — both now catch `ConnectionError`/`Timeout` (previously only `HTTPError` was caught, so a transient network error crashed with a raw traceback). All requests have `timeout=10`. The closing comment is now best-effort — a network error on the comment no longer aborts the actual close.
17
+ - **Accurate `merge-pr` diagnostics** — 405 now reports "not mergeable (pending/failed checks, missing reviews, draft, or branch protection)" and 409 reports "merge conflicts or head branch changed". The previous messages were swapped.
18
+
19
+ ### 🛠️ Changed
20
+ - **Modernized GitHub auth** — switched from the legacy `Authorization: token <PAT>` scheme and `application/vnd.github.v3+json` media type to `Authorization: Bearer <PAT>`, `application/vnd.github+json`, and the `X-GitHub-Api-Version: 2022-11-28` header. Removed the deprecated `mercy-preview` (topics) and `luke-cage-preview` (branch protection) preview media types.
21
+ - **Removed dead code** — deleted an accidental ~190-line duplicate of the `github_templates` module that had been pasted into `scaffolding/hooks.py` (it was never imported; `cli.py` uses the real `github_templates.py`). `hooks.py` shrank from 331 to 138 lines.
22
+ - **Reduced redundant API calls** — GitHub operations no longer make a separate `GET /user` round-trip solely to build repo URLs when the owner is detected from the remote.
23
+
24
+ ### 🧪 Testing
25
+ - 89 tests total (up from 70)
26
+ - 3 new test files: `test_github_remote.py` (remote URL parsing + owner resolution), `test_hooks.py` (POSIX-`sh` portability incl. live `dash` execution), `test_backup.py` (backup/restore round-trip proving history survives)
27
+ - Zero regressions on the existing suite
28
+
29
+ ---
30
+
31
+ ## [2.0.0] - 2026-03-10
32
+
33
+ ### 🔴 Critical Fixes
34
+ - **Default Branch Config Bug** — `push` and `init` now read `default_branch` from `~/.git-auto-config.json` instead of hardcoding `main`/`master`
35
+ - **Empty Commit Guard** — Prevents empty commits with Rich warning; handles `BadName` exception for brand new repos with no HEAD
36
+ - **Push Conflict Detection** — Detects rejected pushes due to diverged history, suggests `git-auto pull --rebase`
37
+ - **Offline / API Graceful Handling** — All GitHub API calls wrapped with `ConnectionError`/`Timeout` handling; no raw tracebacks
38
+
39
+ ### 🟡 New Features
40
+ - **Safe Commit Flow** (`--safe` flag on `push`/`commit`)
41
+ - Commits to `test/<branch>` automatically
42
+ - Handles branch name collisions via `test/<branch>-{timestamp}` fallback
43
+ - Auto-creates Pull Request with diff summary and review checklist
44
+ - Configurable via `safe_mode`, `test_branch_prefix`, `auto_create_pr` settings
45
+ - **`git-auto undo`** — Undo last commit (soft/hard/force-push)
46
+ - `--hard` with confirmation prompt
47
+ - `--push` for soft reset + force push
48
+ - `--yes` flag bypasses confirmation (CI-safe)
49
+ - **`git-auto release`** — Full release management
50
+ - Reads version from `pyproject.toml` (canonical source)
51
+ - Bumps patch/minor/major, syncs `__init__.py` + `setup.py`
52
+ - Auto-generates changelog from conventional commits
53
+ - Creates Git tag + GitHub release (with `--draft` option)
54
+
55
+ ### 🟢 New Features
56
+ - **`git-auto doctor`** — System diagnostics
57
+ - Checks: Git version, Python version, token validity, remote config, branch consistency, untracked files, safe mode
58
+ - **`git-auto pr`** — Standalone PR management
59
+ - `git-auto pr "title"` — Create PR from current branch
60
+ - `git-auto prs` — List pull requests
61
+ - `git-auto merge-pr 42` — Merge PR (with `--squash`/`--rebase`)
62
+ - `git-auto review-pr 42` — Open PR in browser
63
+
64
+ ### New Modules
65
+ | Module | Purpose |
66
+ |--------|---------|
67
+ | `commands/safe_flow.py` | Safe commit flow |
68
+ | `commands/release.py` | Release management |
69
+ | `commands/doctor.py` | System diagnostics |
70
+ | `github_pr/pr_manager.py` | PR CRUD via GitHub API |
71
+
72
+ ### New Config Options
73
+ - `safe_mode` — Enable safe commit flow by default (default: `false`)
74
+ - `test_branch_prefix` — Prefix for safe branches (default: `test`)
75
+ - `auto_create_pr` — Auto-create PR on safe push (default: `true`)
76
+ - `pr_base_branch` — Base branch for PRs (default: `main`)
77
+
78
+ ### Testing
79
+ - 83 tests total (up from 42)
80
+ - 5 new test files: `test_undo.py`, `test_pr_manager.py`, `test_doctor.py`, `test_release.py`, `test_safe_flow.py`
81
+ - Zero regressions on existing test suite
82
+
83
+ ---
84
+
85
+ ## [1.1.0] - 2026-01-04
86
+
87
+ ### Added
88
+ - **Interactive .gitignore Manager** 🎉
89
+ - `git-auto ignore-manager` command
90
+ - Browse all project files with ignore status
91
+ - Select files to ignore with checkbox interface
92
+ - Add patterns by type (folder, extension, file, custom)
93
+ - Common presets (Python, Node.js, IDEs, Build artifacts, Logs)
94
+ - Remove patterns from .gitignore
95
+ - Clean already-tracked files from git
96
+ - Preview changes before saving
97
+ - Show current .gitignore patterns
98
+
99
+ ### Enhanced
100
+ - Better file management workflow
101
+ - More user-friendly .gitignore creation
102
+ - Visual feedback for ignore status
103
+
104
+ ---
105
+
106
+ ## [1.0.0] - 2026-01-03
107
+
108
+ ### Added
109
+ - GitHub authentication with secure keyring storage
110
+ - Repository creation and management
111
+ - Complete Git command automation
112
+ - Project scaffolding with multiple templates
113
+ - Interactive README, LICENSE, and .gitignore generators
114
+ - CI/CD workflow generation (GitHub Actions, GitLab CI)
115
+ - Git hooks management (pre-commit, pre-push, commit-msg)
116
+ - GitHub issue and PR template generation
117
+ - Collaboration features (add collaborators, branch protection)
118
+ - Repository backup and restore functionality
119
+ - Configuration system with persistent storage
120
+ - Repository statistics and analytics
121
+ - Support for Python 3.8+
122
+ - 30+ CLI commands
123
+ - Beautiful terminal output with Rich library
124
+
125
+ ---
126
+
127
+ ## [0.1.0] - Development
128
+
129
+ ### Added
130
+ - Initial project structure
131
+ - Basic CLI framework
132
+ - Core functionality implementation