git-copilot-commit 0.1.6__tar.gz → 0.1.8__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.
@@ -0,0 +1,183 @@
1
+ Metadata-Version: 2.4
2
+ Name: git-copilot-commit
3
+ Version: 0.1.8
4
+ Summary: Automatically generate and commit changes using copilot
5
+ Author-email: Dheepak Krishnamurthy <1813121+kdheepak@users.noreply.github.com>
6
+ License-File: LICENSE
7
+ Requires-Python: >=3.12
8
+ Requires-Dist: platformdirs>=4.0.0
9
+ Requires-Dist: pycopilot>=0.1.6
10
+ Requires-Dist: rich>=14.0.0
11
+ Requires-Dist: typer>=0.16.0
12
+ Description-Content-Type: text/markdown
13
+
14
+ # `git-copilot-commit`
15
+
16
+ AI-powered Git commit assistant that generates conventional commit messages using GitHub Copilot.
17
+
18
+ ## Features
19
+
20
+ - Generates commit messages based on your staged changes
21
+ - Supports multiple AI models: GPT-4, Claude, Gemini, and more
22
+ - Allows editing of generated messages before committing
23
+ - Follows the [Conventional Commits](https://www.conventionalcommits.org/) standard
24
+
25
+ ## Installation
26
+
27
+ Install with [`uv`] (recommended):
28
+
29
+ ```bash
30
+ uv tool install git-copilot-commit
31
+ ```
32
+
33
+ Or with `pipx`:
34
+
35
+ ```bash
36
+ pipx install git-copilot-commit
37
+ ```
38
+
39
+ Or run directly with [`uv`]:
40
+
41
+ ```bash
42
+ uvx git-copilot-commit --help
43
+ ```
44
+
45
+ [`uv`]: https://github.com/astral-sh/uv
46
+
47
+ ## Prerequisites
48
+
49
+ - Active GitHub Copilot subscription
50
+
51
+ ## Quick Start
52
+
53
+ 1. Authenticate with GitHub Copilot:
54
+
55
+ ```bash
56
+ git-copilot-commit authenticate
57
+ ```
58
+
59
+ 2. Make changes in your repository.
60
+
61
+ 3. Generate and commit:
62
+
63
+ ```bash
64
+ git-copilot-commit commit
65
+ ```
66
+
67
+ ## Usage
68
+
69
+ ### Commit changes
70
+
71
+ ```bash
72
+ git-copilot-commit commit
73
+ ```
74
+
75
+ **Options:**
76
+
77
+ - `--all, -a`: Stage all files
78
+ - `--verbose, -v`: Show detailed output
79
+ - `--model, -m`: Choose an AI model
80
+
81
+ Workflow:
82
+
83
+ 1. Analyze changes
84
+ 2. Prompt to stage files
85
+ 3. Generate a commit message
86
+ 4. Choose to commit, edit, or cancel
87
+
88
+ ### Authenticate
89
+
90
+ ```bash
91
+ git-copilot-commit authenticate
92
+ ```
93
+
94
+ ### List models
95
+
96
+ ```bash
97
+ git-copilot-commit models
98
+ ```
99
+
100
+ ### Configure
101
+
102
+ ```bash
103
+ git-copilot-commit config --show
104
+ git-copilot-commit config --set-default-model gpt-4o
105
+ ```
106
+
107
+ ## Examples
108
+
109
+ Commit all changes:
110
+
111
+ ```bash
112
+ git-copilot-commit commit --all
113
+ ```
114
+
115
+ Verbose output:
116
+
117
+ ```bash
118
+ git-copilot-commit commit --verbose
119
+ ```
120
+
121
+ Use a specific model:
122
+
123
+ ```bash
124
+ git-copilot-commit commit --model claude-3.5-sonnet
125
+ ```
126
+
127
+ Set and use a default model:
128
+
129
+ ```bash
130
+ git-copilot-commit config --set-default-model gpt-4o
131
+ git-copilot-commit commit
132
+ git-copilot-commit commit --model claude-3.5-sonnet
133
+ ```
134
+
135
+ ## Commit Message Format
136
+
137
+ Follows [Conventional Commits](https://www.conventionalcommits.org/):
138
+
139
+ ```
140
+ <type>[optional scope]: <description>
141
+ ```
142
+
143
+ **Types:**
144
+
145
+ - `feat`: New feature
146
+ - `fix`: Bug fix
147
+ - `docs`: Documentation
148
+ - `style`: Formatting only
149
+ - `refactor`: Code restructure
150
+ - `perf`: Performance
151
+ - `test`: Tests
152
+ - `chore`: Maintenance
153
+ - `revert`: Revert changes
154
+
155
+ **Examples:**
156
+
157
+ - `feat(auth): add JWT authentication`
158
+ - `fix(db): retry connection on failure`
159
+ - `docs(readme): update install steps`
160
+ - `refactor(utils): simplify date parsing`
161
+
162
+ ## Git Configuration
163
+
164
+ Add a git alias by adding the following to your `~/.gitconfig`:
165
+
166
+ ```ini
167
+ [alias]
168
+ ai-commit = "!f() { git-copilot-commit commit $@; }; f"
169
+ ```
170
+
171
+ Now you can run:
172
+
173
+ ```bash
174
+ git ai-commit
175
+ git ai-commit --model claude-3.5-sonnet
176
+ git ai-commit --all --verbose
177
+ ```
178
+
179
+ Show more context in diffs:
180
+
181
+ ```bash
182
+ git config --global diff.context 3
183
+ ```
@@ -0,0 +1,170 @@
1
+ # `git-copilot-commit`
2
+
3
+ AI-powered Git commit assistant that generates conventional commit messages using GitHub Copilot.
4
+
5
+ ## Features
6
+
7
+ - Generates commit messages based on your staged changes
8
+ - Supports multiple AI models: GPT-4, Claude, Gemini, and more
9
+ - Allows editing of generated messages before committing
10
+ - Follows the [Conventional Commits](https://www.conventionalcommits.org/) standard
11
+
12
+ ## Installation
13
+
14
+ Install with [`uv`] (recommended):
15
+
16
+ ```bash
17
+ uv tool install git-copilot-commit
18
+ ```
19
+
20
+ Or with `pipx`:
21
+
22
+ ```bash
23
+ pipx install git-copilot-commit
24
+ ```
25
+
26
+ Or run directly with [`uv`]:
27
+
28
+ ```bash
29
+ uvx git-copilot-commit --help
30
+ ```
31
+
32
+ [`uv`]: https://github.com/astral-sh/uv
33
+
34
+ ## Prerequisites
35
+
36
+ - Active GitHub Copilot subscription
37
+
38
+ ## Quick Start
39
+
40
+ 1. Authenticate with GitHub Copilot:
41
+
42
+ ```bash
43
+ git-copilot-commit authenticate
44
+ ```
45
+
46
+ 2. Make changes in your repository.
47
+
48
+ 3. Generate and commit:
49
+
50
+ ```bash
51
+ git-copilot-commit commit
52
+ ```
53
+
54
+ ## Usage
55
+
56
+ ### Commit changes
57
+
58
+ ```bash
59
+ git-copilot-commit commit
60
+ ```
61
+
62
+ **Options:**
63
+
64
+ - `--all, -a`: Stage all files
65
+ - `--verbose, -v`: Show detailed output
66
+ - `--model, -m`: Choose an AI model
67
+
68
+ Workflow:
69
+
70
+ 1. Analyze changes
71
+ 2. Prompt to stage files
72
+ 3. Generate a commit message
73
+ 4. Choose to commit, edit, or cancel
74
+
75
+ ### Authenticate
76
+
77
+ ```bash
78
+ git-copilot-commit authenticate
79
+ ```
80
+
81
+ ### List models
82
+
83
+ ```bash
84
+ git-copilot-commit models
85
+ ```
86
+
87
+ ### Configure
88
+
89
+ ```bash
90
+ git-copilot-commit config --show
91
+ git-copilot-commit config --set-default-model gpt-4o
92
+ ```
93
+
94
+ ## Examples
95
+
96
+ Commit all changes:
97
+
98
+ ```bash
99
+ git-copilot-commit commit --all
100
+ ```
101
+
102
+ Verbose output:
103
+
104
+ ```bash
105
+ git-copilot-commit commit --verbose
106
+ ```
107
+
108
+ Use a specific model:
109
+
110
+ ```bash
111
+ git-copilot-commit commit --model claude-3.5-sonnet
112
+ ```
113
+
114
+ Set and use a default model:
115
+
116
+ ```bash
117
+ git-copilot-commit config --set-default-model gpt-4o
118
+ git-copilot-commit commit
119
+ git-copilot-commit commit --model claude-3.5-sonnet
120
+ ```
121
+
122
+ ## Commit Message Format
123
+
124
+ Follows [Conventional Commits](https://www.conventionalcommits.org/):
125
+
126
+ ```
127
+ <type>[optional scope]: <description>
128
+ ```
129
+
130
+ **Types:**
131
+
132
+ - `feat`: New feature
133
+ - `fix`: Bug fix
134
+ - `docs`: Documentation
135
+ - `style`: Formatting only
136
+ - `refactor`: Code restructure
137
+ - `perf`: Performance
138
+ - `test`: Tests
139
+ - `chore`: Maintenance
140
+ - `revert`: Revert changes
141
+
142
+ **Examples:**
143
+
144
+ - `feat(auth): add JWT authentication`
145
+ - `fix(db): retry connection on failure`
146
+ - `docs(readme): update install steps`
147
+ - `refactor(utils): simplify date parsing`
148
+
149
+ ## Git Configuration
150
+
151
+ Add a git alias by adding the following to your `~/.gitconfig`:
152
+
153
+ ```ini
154
+ [alias]
155
+ ai-commit = "!f() { git-copilot-commit commit $@; }; f"
156
+ ```
157
+
158
+ Now you can run:
159
+
160
+ ```bash
161
+ git ai-commit
162
+ git ai-commit --model claude-3.5-sonnet
163
+ git ai-commit --all --verbose
164
+ ```
165
+
166
+ Show more context in diffs:
167
+
168
+ ```bash
169
+ git config --global diff.context 3
170
+ ```
@@ -0,0 +1,108 @@
1
+ [project]
2
+ name = "git-copilot-commit"
3
+ version = "0.1.8"
4
+ description = "Automatically generate and commit changes using copilot"
5
+ readme = "README.md"
6
+ authors = [
7
+ { name = "Dheepak Krishnamurthy", email = "1813121+kdheepak@users.noreply.github.com" },
8
+ ]
9
+ requires-python = ">=3.12"
10
+ dependencies = [
11
+ "pycopilot>=0.1.6",
12
+ "rich>=14.0.0",
13
+ "typer>=0.16.0",
14
+ "platformdirs>=4.0.0",
15
+ ]
16
+
17
+ [project.scripts]
18
+ git-copilot-commit = "git_copilot_commit.cli:app"
19
+
20
+ [build-system]
21
+ requires = ["hatchling"]
22
+ build-backend = "hatchling.build"
23
+
24
+ [tool.semantic_release]
25
+ assets = []
26
+ build_command_env = []
27
+ commit_message = "{version}\n\nAutomatically generated by python-semantic-release"
28
+ commit_parser = "conventional"
29
+ logging_use_named_masks = false
30
+ major_on_zero = true
31
+ allow_zero_version = false
32
+ repo_dir = "."
33
+ no_git_verify = false
34
+ tag_format = "v{version}"
35
+ version_toml = ["pyproject.toml:project.version"]
36
+
37
+ [tool.semantic_release.branches.main]
38
+ match = "(main|master)"
39
+ prerelease_token = "rc"
40
+ prerelease = false
41
+
42
+ [tool.semantic_release.changelog]
43
+ changelog_file = ""
44
+ exclude_commit_patterns = []
45
+ mode = "update"
46
+ insertion_flag = "<!-- version list -->"
47
+ template_dir = "templates"
48
+
49
+ [tool.semantic_release.changelog.default_templates]
50
+ changelog_file = "CHANGELOG.md"
51
+ output_format = "md"
52
+ mask_initial_release = true
53
+
54
+ [tool.semantic_release.changelog.environment]
55
+ block_start_string = "{%"
56
+ block_end_string = "%}"
57
+ variable_start_string = "{{"
58
+ variable_end_string = "}}"
59
+ comment_start_string = "{#"
60
+ comment_end_string = "#}"
61
+ trim_blocks = false
62
+ lstrip_blocks = false
63
+ newline_sequence = "\n"
64
+ keep_trailing_newline = false
65
+ extensions = []
66
+ autoescape = false
67
+
68
+ [tool.semantic_release.commit_author]
69
+ env = "GIT_COMMIT_AUTHOR"
70
+ default = "semantic-release <semantic-release>"
71
+
72
+ [tool.semantic_release.commit_parser_options]
73
+ minor_tags = ["feat"]
74
+ patch_tags = ["fix", "perf"]
75
+ other_allowed_tags = [
76
+ "build",
77
+ "chore",
78
+ "ci",
79
+ "docs",
80
+ "style",
81
+ "refactor",
82
+ "test",
83
+ ]
84
+ allowed_tags = [
85
+ "feat",
86
+ "fix",
87
+ "perf",
88
+ "build",
89
+ "chore",
90
+ "ci",
91
+ "docs",
92
+ "style",
93
+ "refactor",
94
+ "test",
95
+ ]
96
+ default_bump_level = 0
97
+ parse_squash_commits = true
98
+ ignore_merge_commits = true
99
+
100
+ [tool.semantic_release.remote]
101
+ name = "origin"
102
+ type = "github"
103
+ ignore_token_for_push = false
104
+ insecure = false
105
+
106
+ [tool.semantic_release.publish]
107
+ dist_glob_patterns = ["dist/*"]
108
+ upload_to_vcs_release = true
@@ -0,0 +1,3 @@
1
+ from .version import __version__
2
+
3
+ __all__ = ["__version__"]
@@ -7,18 +7,31 @@ from rich.console import Console
7
7
  from rich.prompt import Confirm
8
8
  from rich.panel import Panel
9
9
  from rich.table import Table
10
+ import rich
10
11
 
11
12
  from pycopilot.copilot import Copilot
12
13
  from pycopilot.auth import Authentication
13
14
  from .git import GitRepository, GitError, NotAGitRepositoryError, GitStatus
14
15
  from .settings import Settings
16
+ from .version import __version__
15
17
 
16
18
  console = Console()
17
19
  app = typer.Typer(help=__doc__, add_completion=False)
18
20
 
19
21
 
22
+ def version_callback(value: bool):
23
+ if value:
24
+ rich.print(f"git-copilot-version [bold green]{__version__}[/]")
25
+ raise typer.Exit()
26
+
27
+
20
28
  @app.callback(invoke_without_command=True)
21
- def main(ctx: typer.Context):
29
+ def main(
30
+ ctx: typer.Context,
31
+ version: bool = typer.Option(
32
+ False, "--version", callback=version_callback, help="Show version and exit"
33
+ ),
34
+ ):
22
35
  """
23
36
  Automatically commit changes in the current git repository.
24
37
  """
@@ -226,13 +239,15 @@ def commit(
226
239
 
227
240
  if status.has_unstaged_changes:
228
241
  if Confirm.ask(
229
- "Modified files found. Add [bold yellow]all unstaged changes[/] to staging?"
242
+ "Modified files found. Add [bold yellow]all unstaged changes[/] to staging?",
243
+ default=True,
230
244
  ):
231
245
  repo.stage_modified()
232
246
  console.print("[green]Staged modified files.[/green]")
233
247
  if status.has_untracked_files:
234
248
  if Confirm.ask(
235
- "Untracked files found. Add [bold yellow]all untracked files and unstaged changes[/] to staging?"
249
+ "Untracked files found. Add [bold yellow]all untracked files and unstaged changes[/] to staging?",
250
+ default=True,
236
251
  ):
237
252
  repo.stage_files()
238
253
  console.print("[green]Staged untracked files.[/green]")
@@ -295,7 +310,7 @@ def commit(
295
310
  @app.command()
296
311
  def authenticate():
297
312
  """Autheticate with GitHub Copilot."""
298
- Authentication().try_auth()
313
+ Authentication().auth()
299
314
 
300
315
 
301
316
  @app.command()
@@ -1,28 +1,30 @@
1
1
  """
2
- Settings management using XDG Base Directory specification.
2
+ Settings management using platformdirs for cross-platform directory paths.
3
3
  """
4
4
 
5
5
  import json
6
6
  from typing import Any
7
7
 
8
- from xdg_base_dirs import (
9
- xdg_cache_home,
10
- xdg_config_home,
11
- xdg_data_home,
12
- xdg_state_home,
8
+ from platformdirs import (
9
+ user_cache_dir,
10
+ user_config_dir,
11
+ user_data_dir,
12
+ user_state_dir,
13
13
  )
14
14
 
15
15
 
16
16
  class Settings:
17
- """Manages application settings using XDG Base Directory specification."""
17
+ """Manages application settings using platformdirs for cross-platform directory paths."""
18
18
 
19
19
  APP_NAME = "git-copilot-commit"
20
20
 
21
21
  def __init__(self):
22
- self.config_dir = xdg_config_home() / self.APP_NAME
23
- self.data_dir = xdg_data_home() / self.APP_NAME
24
- self.cache_dir = xdg_cache_home() / self.APP_NAME
25
- self.state_dir = xdg_state_home() / self.APP_NAME
22
+ from pathlib import Path
23
+
24
+ self.config_dir = Path(user_config_dir(f"com.kdheepak.{self.APP_NAME}"))
25
+ self.data_dir = Path(user_data_dir(f"com.kdheepak.{self.APP_NAME}"))
26
+ self.cache_dir = Path(user_cache_dir(f"com.kdheepak.{self.APP_NAME}"))
27
+ self.state_dir = Path(user_state_dir(f"com.kdheepak.{self.APP_NAME}"))
26
28
 
27
29
  self.config_file = self.config_dir / "config.json"
28
30
 
@@ -0,0 +1,40 @@
1
+ import subprocess
2
+ import shlex
3
+ from importlib import metadata
4
+ import os
5
+
6
+
7
+ DIR = os.path.dirname(os.path.realpath(__file__))
8
+
9
+ VERSION = metadata.version(__package__ or "git-copilot-commit")
10
+
11
+
12
+ def cmd(cmd, kind="") -> str:
13
+ """
14
+ Get git subprocess output
15
+ """
16
+ output = "unknown"
17
+ try:
18
+ output = (
19
+ subprocess.check_output(shlex.split(cmd), cwd=DIR, stderr=subprocess.STDOUT)
20
+ .decode()
21
+ .strip()
22
+ )
23
+ except Exception as _:
24
+ ...
25
+ return f"{kind}{output}"
26
+
27
+
28
+ def last_commit_id() -> str:
29
+ return cmd("git describe --always --dirty --abbrev=7")
30
+
31
+
32
+ def branch() -> str:
33
+ return cmd("git rev-parse --abbrev-ref HEAD")
34
+
35
+
36
+ def get_git_version() -> str:
37
+ return f"{last_commit_id()}-{branch()}"
38
+
39
+
40
+ __version__ = f"v{VERSION}-{get_git_version()}"
@@ -12,47 +12,26 @@ wheels = [
12
12
  ]
13
13
 
14
14
  [[package]]
15
- name = "certifi"
16
- version = "2025.7.14"
15
+ name = "anyio"
16
+ version = "4.9.0"
17
17
  source = { registry = "https://pypi.org/simple" }
18
- sdist = { url = "https://files.pythonhosted.org/packages/b3/76/52c535bcebe74590f296d6c77c86dabf761c41980e1347a2422e4aa2ae41/certifi-2025.7.14.tar.gz", hash = "sha256:8ea99dbdfaaf2ba2f9bac77b9249ef62ec5218e7c2b2e903378ed5fccf765995", size = 163981, upload-time = "2025-07-14T03:29:28.449Z" }
18
+ dependencies = [
19
+ { name = "idna" },
20
+ { name = "sniffio" },
21
+ { name = "typing-extensions", marker = "python_full_version < '3.13'" },
22
+ ]
23
+ sdist = { url = "https://files.pythonhosted.org/packages/95/7d/4c1bd541d4dffa1b52bd83fb8527089e097a106fc90b467a7313b105f840/anyio-4.9.0.tar.gz", hash = "sha256:673c0c244e15788651a4ff38710fea9675823028a6f08a5eda409e0c9840a028", size = 190949, upload-time = "2025-03-17T00:02:54.77Z" }
19
24
  wheels = [
20
- { url = "https://files.pythonhosted.org/packages/4f/52/34c6cf5bb9285074dc3531c437b3919e825d976fde097a7a73f79e726d03/certifi-2025.7.14-py3-none-any.whl", hash = "sha256:6b31f564a415d79ee77df69d757bb49a5bb53bd9f756cbbe24394ffd6fc1f4b2", size = 162722, upload-time = "2025-07-14T03:29:26.863Z" },
25
+ { url = "https://files.pythonhosted.org/packages/a1/ee/48ca1a7c89ffec8b6a0c5d02b89c305671d5ffd8d3c94acf8b8c408575bb/anyio-4.9.0-py3-none-any.whl", hash = "sha256:9f76d541cad6e36af7beb62e978876f3b41e3e04f2c1fbf0884604c0a9c4d93c", size = 100916, upload-time = "2025-03-17T00:02:52.713Z" },
21
26
  ]
22
27
 
23
28
  [[package]]
24
- name = "charset-normalizer"
25
- version = "3.4.2"
29
+ name = "certifi"
30
+ version = "2025.7.14"
26
31
  source = { registry = "https://pypi.org/simple" }
27
- sdist = { url = "https://files.pythonhosted.org/packages/e4/33/89c2ced2b67d1c2a61c19c6751aa8902d46ce3dacb23600a283619f5a12d/charset_normalizer-3.4.2.tar.gz", hash = "sha256:5baececa9ecba31eff645232d59845c07aa030f0c81ee70184a90d35099a0e63", size = 126367, upload-time = "2025-05-02T08:34:42.01Z" }
32
+ sdist = { url = "https://files.pythonhosted.org/packages/b3/76/52c535bcebe74590f296d6c77c86dabf761c41980e1347a2422e4aa2ae41/certifi-2025.7.14.tar.gz", hash = "sha256:8ea99dbdfaaf2ba2f9bac77b9249ef62ec5218e7c2b2e903378ed5fccf765995", size = 163981, upload-time = "2025-07-14T03:29:28.449Z" }
28
33
  wheels = [
29
- { url = "https://files.pythonhosted.org/packages/d7/a4/37f4d6035c89cac7930395a35cc0f1b872e652eaafb76a6075943754f095/charset_normalizer-3.4.2-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:0c29de6a1a95f24b9a1aa7aefd27d2487263f00dfd55a77719b530788f75cff7", size = 199936, upload-time = "2025-05-02T08:32:33.712Z" },
30
- { url = "https://files.pythonhosted.org/packages/ee/8a/1a5e33b73e0d9287274f899d967907cd0bf9c343e651755d9307e0dbf2b3/charset_normalizer-3.4.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cddf7bd982eaa998934a91f69d182aec997c6c468898efe6679af88283b498d3", size = 143790, upload-time = "2025-05-02T08:32:35.768Z" },
31
- { url = "https://files.pythonhosted.org/packages/66/52/59521f1d8e6ab1482164fa21409c5ef44da3e9f653c13ba71becdd98dec3/charset_normalizer-3.4.2-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:fcbe676a55d7445b22c10967bceaaf0ee69407fbe0ece4d032b6eb8d4565982a", size = 153924, upload-time = "2025-05-02T08:32:37.284Z" },
32
- { url = "https://files.pythonhosted.org/packages/86/2d/fb55fdf41964ec782febbf33cb64be480a6b8f16ded2dbe8db27a405c09f/charset_normalizer-3.4.2-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d41c4d287cfc69060fa91cae9683eacffad989f1a10811995fa309df656ec214", size = 146626, upload-time = "2025-05-02T08:32:38.803Z" },
33
- { url = "https://files.pythonhosted.org/packages/8c/73/6ede2ec59bce19b3edf4209d70004253ec5f4e319f9a2e3f2f15601ed5f7/charset_normalizer-3.4.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4e594135de17ab3866138f496755f302b72157d115086d100c3f19370839dd3a", size = 148567, upload-time = "2025-05-02T08:32:40.251Z" },
34
- { url = "https://files.pythonhosted.org/packages/09/14/957d03c6dc343c04904530b6bef4e5efae5ec7d7990a7cbb868e4595ee30/charset_normalizer-3.4.2-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:cf713fe9a71ef6fd5adf7a79670135081cd4431c2943864757f0fa3a65b1fafd", size = 150957, upload-time = "2025-05-02T08:32:41.705Z" },
35
- { url = "https://files.pythonhosted.org/packages/0d/c8/8174d0e5c10ccebdcb1b53cc959591c4c722a3ad92461a273e86b9f5a302/charset_normalizer-3.4.2-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:a370b3e078e418187da8c3674eddb9d983ec09445c99a3a263c2011993522981", size = 145408, upload-time = "2025-05-02T08:32:43.709Z" },
36
- { url = "https://files.pythonhosted.org/packages/58/aa/8904b84bc8084ac19dc52feb4f5952c6df03ffb460a887b42615ee1382e8/charset_normalizer-3.4.2-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:a955b438e62efdf7e0b7b52a64dc5c3396e2634baa62471768a64bc2adb73d5c", size = 153399, upload-time = "2025-05-02T08:32:46.197Z" },
37
- { url = "https://files.pythonhosted.org/packages/c2/26/89ee1f0e264d201cb65cf054aca6038c03b1a0c6b4ae998070392a3ce605/charset_normalizer-3.4.2-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:7222ffd5e4de8e57e03ce2cef95a4c43c98fcb72ad86909abdfc2c17d227fc1b", size = 156815, upload-time = "2025-05-02T08:32:48.105Z" },
38
- { url = "https://files.pythonhosted.org/packages/fd/07/68e95b4b345bad3dbbd3a8681737b4338ff2c9df29856a6d6d23ac4c73cb/charset_normalizer-3.4.2-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:bee093bf902e1d8fc0ac143c88902c3dfc8941f7ea1d6a8dd2bcb786d33db03d", size = 154537, upload-time = "2025-05-02T08:32:49.719Z" },
39
- { url = "https://files.pythonhosted.org/packages/77/1a/5eefc0ce04affb98af07bc05f3bac9094513c0e23b0562d64af46a06aae4/charset_normalizer-3.4.2-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:dedb8adb91d11846ee08bec4c8236c8549ac721c245678282dcb06b221aab59f", size = 149565, upload-time = "2025-05-02T08:32:51.404Z" },
40
- { url = "https://files.pythonhosted.org/packages/37/a0/2410e5e6032a174c95e0806b1a6585eb21e12f445ebe239fac441995226a/charset_normalizer-3.4.2-cp312-cp312-win32.whl", hash = "sha256:db4c7bf0e07fc3b7d89ac2a5880a6a8062056801b83ff56d8464b70f65482b6c", size = 98357, upload-time = "2025-05-02T08:32:53.079Z" },
41
- { url = "https://files.pythonhosted.org/packages/6c/4f/c02d5c493967af3eda9c771ad4d2bbc8df6f99ddbeb37ceea6e8716a32bc/charset_normalizer-3.4.2-cp312-cp312-win_amd64.whl", hash = "sha256:5a9979887252a82fefd3d3ed2a8e3b937a7a809f65dcb1e068b090e165bbe99e", size = 105776, upload-time = "2025-05-02T08:32:54.573Z" },
42
- { url = "https://files.pythonhosted.org/packages/ea/12/a93df3366ed32db1d907d7593a94f1fe6293903e3e92967bebd6950ed12c/charset_normalizer-3.4.2-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:926ca93accd5d36ccdabd803392ddc3e03e6d4cd1cf17deff3b989ab8e9dbcf0", size = 199622, upload-time = "2025-05-02T08:32:56.363Z" },
43
- { url = "https://files.pythonhosted.org/packages/04/93/bf204e6f344c39d9937d3c13c8cd5bbfc266472e51fc8c07cb7f64fcd2de/charset_normalizer-3.4.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:eba9904b0f38a143592d9fc0e19e2df0fa2e41c3c3745554761c5f6447eedabf", size = 143435, upload-time = "2025-05-02T08:32:58.551Z" },
44
- { url = "https://files.pythonhosted.org/packages/22/2a/ea8a2095b0bafa6c5b5a55ffdc2f924455233ee7b91c69b7edfcc9e02284/charset_normalizer-3.4.2-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3fddb7e2c84ac87ac3a947cb4e66d143ca5863ef48e4a5ecb83bd48619e4634e", size = 153653, upload-time = "2025-05-02T08:33:00.342Z" },
45
- { url = "https://files.pythonhosted.org/packages/b6/57/1b090ff183d13cef485dfbe272e2fe57622a76694061353c59da52c9a659/charset_normalizer-3.4.2-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:98f862da73774290f251b9df8d11161b6cf25b599a66baf087c1ffe340e9bfd1", size = 146231, upload-time = "2025-05-02T08:33:02.081Z" },
46
- { url = "https://files.pythonhosted.org/packages/e2/28/ffc026b26f441fc67bd21ab7f03b313ab3fe46714a14b516f931abe1a2d8/charset_normalizer-3.4.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6c9379d65defcab82d07b2a9dfbfc2e95bc8fe0ebb1b176a3190230a3ef0e07c", size = 148243, upload-time = "2025-05-02T08:33:04.063Z" },
47
- { url = "https://files.pythonhosted.org/packages/c0/0f/9abe9bd191629c33e69e47c6ef45ef99773320e9ad8e9cb08b8ab4a8d4cb/charset_normalizer-3.4.2-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e635b87f01ebc977342e2697d05b56632f5f879a4f15955dfe8cef2448b51691", size = 150442, upload-time = "2025-05-02T08:33:06.418Z" },
48
- { url = "https://files.pythonhosted.org/packages/67/7c/a123bbcedca91d5916c056407f89a7f5e8fdfce12ba825d7d6b9954a1a3c/charset_normalizer-3.4.2-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:1c95a1e2902a8b722868587c0e1184ad5c55631de5afc0eb96bc4b0d738092c0", size = 145147, upload-time = "2025-05-02T08:33:08.183Z" },
49
- { url = "https://files.pythonhosted.org/packages/ec/fe/1ac556fa4899d967b83e9893788e86b6af4d83e4726511eaaad035e36595/charset_normalizer-3.4.2-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:ef8de666d6179b009dce7bcb2ad4c4a779f113f12caf8dc77f0162c29d20490b", size = 153057, upload-time = "2025-05-02T08:33:09.986Z" },
50
- { url = "https://files.pythonhosted.org/packages/2b/ff/acfc0b0a70b19e3e54febdd5301a98b72fa07635e56f24f60502e954c461/charset_normalizer-3.4.2-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:32fc0341d72e0f73f80acb0a2c94216bd704f4f0bce10aedea38f30502b271ff", size = 156454, upload-time = "2025-05-02T08:33:11.814Z" },
51
- { url = "https://files.pythonhosted.org/packages/92/08/95b458ce9c740d0645feb0e96cea1f5ec946ea9c580a94adfe0b617f3573/charset_normalizer-3.4.2-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:289200a18fa698949d2b39c671c2cc7a24d44096784e76614899a7ccf2574b7b", size = 154174, upload-time = "2025-05-02T08:33:13.707Z" },
52
- { url = "https://files.pythonhosted.org/packages/78/be/8392efc43487ac051eee6c36d5fbd63032d78f7728cb37aebcc98191f1ff/charset_normalizer-3.4.2-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:4a476b06fbcf359ad25d34a057b7219281286ae2477cc5ff5e3f70a246971148", size = 149166, upload-time = "2025-05-02T08:33:15.458Z" },
53
- { url = "https://files.pythonhosted.org/packages/44/96/392abd49b094d30b91d9fbda6a69519e95802250b777841cf3bda8fe136c/charset_normalizer-3.4.2-cp313-cp313-win32.whl", hash = "sha256:aaeeb6a479c7667fbe1099af9617c83aaca22182d6cf8c53966491a0f1b7ffb7", size = 98064, upload-time = "2025-05-02T08:33:17.06Z" },
54
- { url = "https://files.pythonhosted.org/packages/e9/b0/0200da600134e001d91851ddc797809e2fe0ea72de90e09bec5a2fbdaccb/charset_normalizer-3.4.2-cp313-cp313-win_amd64.whl", hash = "sha256:aa6af9e7d59f9c12b33ae4e9450619cf2488e2bbe9b44030905877f0b2324980", size = 105641, upload-time = "2025-05-02T08:33:18.753Z" },
55
- { url = "https://files.pythonhosted.org/packages/20/94/c5790835a017658cbfabd07f3bfb549140c3ac458cfc196323996b10095a/charset_normalizer-3.4.2-py3-none-any.whl", hash = "sha256:7f56930ab0abd1c45cd15be65cc741c28b1c9a34876ce8c17a2fa107810c0af0", size = 52626, upload-time = "2025-05-02T08:34:40.053Z" },
34
+ { url = "https://files.pythonhosted.org/packages/4f/52/34c6cf5bb9285074dc3531c437b3919e825d976fde097a7a73f79e726d03/certifi-2025.7.14-py3-none-any.whl", hash = "sha256:6b31f564a415d79ee77df69d757bb49a5bb53bd9f756cbbe24394ffd6fc1f4b2", size = 162722, upload-time = "2025-07-14T03:29:26.863Z" },
56
35
  ]
57
36
 
58
37
  [[package]]
@@ -78,21 +57,58 @@ wheels = [
78
57
 
79
58
  [[package]]
80
59
  name = "git-copilot-commit"
81
- version = "0.1.6"
60
+ version = "0.1.8"
82
61
  source = { editable = "." }
83
62
  dependencies = [
63
+ { name = "platformdirs" },
84
64
  { name = "pycopilot" },
85
65
  { name = "rich" },
86
66
  { name = "typer" },
87
- { name = "xdg-base-dirs" },
88
67
  ]
89
68
 
90
69
  [package.metadata]
91
70
  requires-dist = [
92
- { name = "pycopilot", specifier = ">=0.1.1" },
71
+ { name = "platformdirs", specifier = ">=4.0.0" },
72
+ { name = "pycopilot", specifier = ">=0.1.6" },
93
73
  { name = "rich", specifier = ">=14.0.0" },
94
74
  { name = "typer", specifier = ">=0.16.0" },
95
- { name = "xdg-base-dirs", specifier = ">=6.0.2" },
75
+ ]
76
+
77
+ [[package]]
78
+ name = "h11"
79
+ version = "0.16.0"
80
+ source = { registry = "https://pypi.org/simple" }
81
+ sdist = { url = "https://files.pythonhosted.org/packages/01/ee/02a2c011bdab74c6fb3c75474d40b3052059d95df7e73351460c8588d963/h11-0.16.0.tar.gz", hash = "sha256:4e35b956cf45792e4caa5885e69fba00bdbc6ffafbfa020300e549b208ee5ff1", size = 101250, upload-time = "2025-04-24T03:35:25.427Z" }
82
+ wheels = [
83
+ { url = "https://files.pythonhosted.org/packages/04/4b/29cac41a4d98d144bf5f6d33995617b185d14b22401f75ca86f384e87ff1/h11-0.16.0-py3-none-any.whl", hash = "sha256:63cf8bbe7522de3bf65932fda1d9c2772064ffb3dae62d55932da54b31cb6c86", size = 37515, upload-time = "2025-04-24T03:35:24.344Z" },
84
+ ]
85
+
86
+ [[package]]
87
+ name = "httpcore"
88
+ version = "1.0.9"
89
+ source = { registry = "https://pypi.org/simple" }
90
+ dependencies = [
91
+ { name = "certifi" },
92
+ { name = "h11" },
93
+ ]
94
+ sdist = { url = "https://files.pythonhosted.org/packages/06/94/82699a10bca87a5556c9c59b5963f2d039dbd239f25bc2a63907a05a14cb/httpcore-1.0.9.tar.gz", hash = "sha256:6e34463af53fd2ab5d807f399a9b45ea31c3dfa2276f15a2c3f00afff6e176e8", size = 85484, upload-time = "2025-04-24T22:06:22.219Z" }
95
+ wheels = [
96
+ { url = "https://files.pythonhosted.org/packages/7e/f5/f66802a942d491edb555dd61e3a9961140fd64c90bce1eafd741609d334d/httpcore-1.0.9-py3-none-any.whl", hash = "sha256:2d400746a40668fc9dec9810239072b40b4484b640a8c38fd654a024c7a1bf55", size = 78784, upload-time = "2025-04-24T22:06:20.566Z" },
97
+ ]
98
+
99
+ [[package]]
100
+ name = "httpx"
101
+ version = "0.28.1"
102
+ source = { registry = "https://pypi.org/simple" }
103
+ dependencies = [
104
+ { name = "anyio" },
105
+ { name = "certifi" },
106
+ { name = "httpcore" },
107
+ { name = "idna" },
108
+ ]
109
+ sdist = { url = "https://files.pythonhosted.org/packages/b1/df/48c586a5fe32a0f01324ee087459e112ebb7224f646c0b5023f5e79e9956/httpx-0.28.1.tar.gz", hash = "sha256:75e98c5f16b0f35b567856f597f06ff2270a374470a5c2392242528e3e3e42fc", size = 141406, upload-time = "2024-12-06T15:37:23.222Z" }
110
+ wheels = [
111
+ { url = "https://files.pythonhosted.org/packages/2a/39/e50c7c3a983047577ee07d2a9e53faf5a69493943ec3f6a384bdc792deb2/httpx-0.28.1-py3-none-any.whl", hash = "sha256:d909fcccc110f8c7faf814ca82a9a4d816bc5a6dbfea25d6591d6985b8ba59ad", size = 73517, upload-time = "2024-12-06T15:37:21.509Z" },
96
112
  ]
97
113
 
98
114
  [[package]]
@@ -148,20 +164,20 @@ wheels = [
148
164
 
149
165
  [[package]]
150
166
  name = "pycopilot"
151
- version = "0.1.1"
167
+ version = "0.1.6"
152
168
  source = { registry = "https://pypi.org/simple" }
153
169
  dependencies = [
170
+ { name = "httpx" },
154
171
  { name = "platformdirs" },
155
172
  { name = "prompt-toolkit" },
156
173
  { name = "pydantic" },
157
174
  { name = "questionary" },
158
- { name = "requests" },
159
175
  { name = "rich" },
160
176
  { name = "typer" },
161
177
  ]
162
- sdist = { url = "https://files.pythonhosted.org/packages/56/8e/3f2633fa37a6ab712c7608ab0ca640663e45ebcecf9ec8625d2a10206598/pycopilot-0.1.1.tar.gz", hash = "sha256:9b8322d78d3c3d2546fee62f4deebd130808775862344423357f373fcfc2cd30", size = 33847, upload-time = "2025-07-17T02:19:57.341Z" }
178
+ sdist = { url = "https://files.pythonhosted.org/packages/45/ae/9d540cfe9411ad9f5ab58080aab86a5a7902ab668ad16fb637f287c88ba7/pycopilot-0.1.6.tar.gz", hash = "sha256:84425265e0d587d964e7b5dd93de9d9175b849b7d718107a48efb749e5b88e8e", size = 31667, upload-time = "2025-07-17T15:39:42.473Z" }
163
179
  wheels = [
164
- { url = "https://files.pythonhosted.org/packages/c5/92/169a7a85f92c762bd3a58590f6afc36b380f82aa3938946a446bc2f039f2/pycopilot-0.1.1-py3-none-any.whl", hash = "sha256:9d3df1138a380b1d83d6f2bdf32d2aacc2443bbea6bb8f918fe804683dc19d91", size = 10565, upload-time = "2025-07-17T02:19:56.128Z" },
180
+ { url = "https://files.pythonhosted.org/packages/3e/5f/56cd35579f5d400b2ef9f0c62b41f6024936fbfc8f69e302036588052531/pycopilot-0.1.6-py3-none-any.whl", hash = "sha256:88f39535a87d1efdc2358357d956bbe0d9e6b5a6fd60d572d46c813fe23af2d0", size = 10811, upload-time = "2025-07-17T15:39:41.608Z" },
165
181
  ]
166
182
 
167
183
  [[package]]
@@ -242,21 +258,6 @@ wheels = [
242
258
  { url = "https://files.pythonhosted.org/packages/ad/3f/11dd4cd4f39e05128bfd20138faea57bec56f9ffba6185d276e3107ba5b2/questionary-2.1.0-py3-none-any.whl", hash = "sha256:44174d237b68bc828e4878c763a9ad6790ee61990e0ae72927694ead57bab8ec", size = 36747, upload-time = "2024-12-29T11:49:16.734Z" },
243
259
  ]
244
260
 
245
- [[package]]
246
- name = "requests"
247
- version = "2.32.4"
248
- source = { registry = "https://pypi.org/simple" }
249
- dependencies = [
250
- { name = "certifi" },
251
- { name = "charset-normalizer" },
252
- { name = "idna" },
253
- { name = "urllib3" },
254
- ]
255
- sdist = { url = "https://files.pythonhosted.org/packages/e1/0a/929373653770d8a0d7ea76c37de6e41f11eb07559b103b1c02cafb3f7cf8/requests-2.32.4.tar.gz", hash = "sha256:27d0316682c8a29834d3264820024b62a36942083d52caf2f14c0591336d3422", size = 135258, upload-time = "2025-06-09T16:43:07.34Z" }
256
- wheels = [
257
- { url = "https://files.pythonhosted.org/packages/7c/e4/56027c4a6b4ae70ca9de302488c5ca95ad4a39e190093d6c1a8ace08341b/requests-2.32.4-py3-none-any.whl", hash = "sha256:27babd3cda2a6d50b30443204ee89830707d396671944c998b5975b031ac2b2c", size = 64847, upload-time = "2025-06-09T16:43:05.728Z" },
258
- ]
259
-
260
261
  [[package]]
261
262
  name = "rich"
262
263
  version = "14.0.0"
@@ -279,6 +280,15 @@ wheels = [
279
280
  { url = "https://files.pythonhosted.org/packages/e0/f9/0595336914c5619e5f28a1fb793285925a8cd4b432c9da0a987836c7f822/shellingham-1.5.4-py2.py3-none-any.whl", hash = "sha256:7ecfff8f2fd72616f7481040475a65b2bf8af90a56c89140852d1120324e8686", size = 9755, upload-time = "2023-10-24T04:13:38.866Z" },
280
281
  ]
281
282
 
283
+ [[package]]
284
+ name = "sniffio"
285
+ version = "1.3.1"
286
+ source = { registry = "https://pypi.org/simple" }
287
+ sdist = { url = "https://files.pythonhosted.org/packages/a2/87/a6771e1546d97e7e041b6ae58d80074f81b7d5121207425c964ddf5cfdbd/sniffio-1.3.1.tar.gz", hash = "sha256:f4324edc670a0f49750a81b895f35c3adb843cca46f0530f79fc1babb23789dc", size = 20372, upload-time = "2024-02-25T23:20:04.057Z" }
288
+ wheels = [
289
+ { url = "https://files.pythonhosted.org/packages/e9/44/75a9c9421471a6c4805dbf2356f7c181a29c1879239abab1ea2cc8f38b40/sniffio-1.3.1-py3-none-any.whl", hash = "sha256:2f6da418d1f1e0fddd844478f41680e794e6051915791a034ff65e5f100525a2", size = 10235, upload-time = "2024-02-25T23:20:01.196Z" },
290
+ ]
291
+
282
292
  [[package]]
283
293
  name = "typer"
284
294
  version = "0.16.0"
@@ -315,15 +325,6 @@ wheels = [
315
325
  { url = "https://files.pythonhosted.org/packages/17/69/cd203477f944c353c31bade965f880aa1061fd6bf05ded0726ca845b6ff7/typing_inspection-0.4.1-py3-none-any.whl", hash = "sha256:389055682238f53b04f7badcb49b989835495a96700ced5dab2d8feae4b26f51", size = 14552, upload-time = "2025-05-21T18:55:22.152Z" },
316
326
  ]
317
327
 
318
- [[package]]
319
- name = "urllib3"
320
- version = "2.5.0"
321
- source = { registry = "https://pypi.org/simple" }
322
- sdist = { url = "https://files.pythonhosted.org/packages/15/22/9ee70a2574a4f4599c47dd506532914ce044817c7752a79b6a51286319bc/urllib3-2.5.0.tar.gz", hash = "sha256:3fc47733c7e419d4bc3f6b3dc2b4f890bb743906a30d56ba4a5bfa4bbff92760", size = 393185, upload-time = "2025-06-18T14:07:41.644Z" }
323
- wheels = [
324
- { url = "https://files.pythonhosted.org/packages/a7/c2/fe1e52489ae3122415c51f387e221dd0773709bad6c6cdaa599e8a2c5185/urllib3-2.5.0-py3-none-any.whl", hash = "sha256:e6b01673c0fa6a13e374b50871808eb3bf7046c4b125b216f6bf1cc604cff0dc", size = 129795, upload-time = "2025-06-18T14:07:40.39Z" },
325
- ]
326
-
327
328
  [[package]]
328
329
  name = "wcwidth"
329
330
  version = "0.2.13"
@@ -332,12 +333,3 @@ sdist = { url = "https://files.pythonhosted.org/packages/6c/63/53559446a878410fc
332
333
  wheels = [
333
334
  { url = "https://files.pythonhosted.org/packages/fd/84/fd2ba7aafacbad3c4201d395674fc6348826569da3c0937e75505ead3528/wcwidth-0.2.13-py2.py3-none-any.whl", hash = "sha256:3da69048e4540d84af32131829ff948f1e022c1c6bdb8d6102117aac784f6859", size = 34166, upload-time = "2024-01-06T02:10:55.763Z" },
334
335
  ]
335
-
336
- [[package]]
337
- name = "xdg-base-dirs"
338
- version = "6.0.2"
339
- source = { registry = "https://pypi.org/simple" }
340
- sdist = { url = "https://files.pythonhosted.org/packages/bf/d0/bbe05a15347538aaf9fa5b51ac3b97075dfb834931fcb77d81fbdb69e8f6/xdg_base_dirs-6.0.2.tar.gz", hash = "sha256:950504e14d27cf3c9cb37744680a43bf0ac42efefc4ef4acf98dc736cab2bced", size = 4085, upload-time = "2024-10-19T14:35:08.114Z" }
341
- wheels = [
342
- { url = "https://files.pythonhosted.org/packages/fc/03/030b47fd46b60fc87af548e57ff59c2ca84b2a1dadbe721bb0ce33896b2e/xdg_base_dirs-6.0.2-py3-none-any.whl", hash = "sha256:3c01d1b758ed4ace150ac960ac0bd13ce4542b9e2cdf01312dcda5012cfebabe", size = 4747, upload-time = "2024-10-19T14:35:05.931Z" },
343
- ]
@@ -1,201 +0,0 @@
1
- Metadata-Version: 2.4
2
- Name: git-copilot-commit
3
- Version: 0.1.6
4
- Summary: Automatically generate and commit changes using copilot
5
- Author-email: Dheepak Krishnamurthy <1813121+kdheepak@users.noreply.github.com>
6
- License-File: LICENSE
7
- Requires-Python: >=3.12
8
- Requires-Dist: pycopilot>=0.1.1
9
- Requires-Dist: rich>=14.0.0
10
- Requires-Dist: typer>=0.16.0
11
- Requires-Dist: xdg-base-dirs>=6.0.2
12
- Description-Content-Type: text/markdown
13
-
14
- # git-copilot-commit
15
-
16
- 🤖 AI-powered Git commit assistant that automatically generates conventional commit messages using
17
- GitHub Copilot.
18
-
19
- ## Features
20
-
21
- - **AI-Generated Commit Messages**: Uses GitHub Copilot to analyze your staged changes and generate
22
- conventional commit messages
23
- - **Multiple AI Models**: Choose from GPT-4, Claude, Gemini, and other available models
24
- - **Configurable Defaults**: Set a default model to use across all commits
25
- - **Message Editing**: Edit generated messages using your git-configured editor or commit directly
26
- - **Conventional Commits**: Follows the [Conventional Commits](https://www.conventionalcommits.org/)
27
- specification
28
- - **Rich Output**: Beautiful terminal output with syntax highlighting and tables
29
-
30
- ## Installation
31
-
32
- Install using uv (recommended):
33
-
34
- ```bash
35
- uv tool install git-copilot-commit
36
- ```
37
-
38
- Or with pip:
39
-
40
- ```bash
41
- pipx install git-copilot-commit
42
- ```
43
-
44
- Or without installing:
45
-
46
- ```bash
47
- uvx git-copilot-commit --help
48
- ```
49
-
50
- ## Prerequisites
51
-
52
- **GitHub Copilot Access**: You need an active GitHub Copilot subscription
53
-
54
- ## Quick Start
55
-
56
- 1. **Authenticate with GitHub Copilot**:
57
-
58
- ```bash
59
- git-copilot-commit authenticate
60
- ```
61
-
62
- 2. **Make some changes** in your git repository
63
-
64
- 3. **Generate and commit**:
65
-
66
- ```bash
67
- git-copilot-commit commit
68
- ```
69
-
70
- ## Usage
71
-
72
- ### `commit`
73
-
74
- Automatically commit changes in the current git repository:
75
-
76
- ```bash
77
- git-copilot-commit commit
78
- ```
79
-
80
- **Options:**
81
-
82
- - `--all, -a`: Stage all files before committing
83
- - `--verbose, -v`: Show verbose output with file details
84
- - `--model, -m`: Specify which AI model to use for generating the commit message
85
-
86
- 1. The tool analyzes your changes
87
- 2. Prompts you to stage files (if needed)
88
- 3. Generates an AI-powered commit message
89
- 4. Offers three choices:
90
- - `(c)ommit`: Commit with the generated message
91
- - `(e)dit`: Edit the message in your git-configured editor
92
- - `(q)uit`: Cancel the commit
93
-
94
- ### `authenticate`
95
-
96
- Set up authentication with GitHub Copilot:
97
-
98
- ```bash
99
- git-copilot-commit authenticate
100
- ```
101
-
102
- ### `models`
103
-
104
- List available AI models:
105
-
106
- ```bash
107
- git-copilot-commit models
108
- ```
109
-
110
- ### `config`
111
-
112
- Manage application configuration:
113
-
114
- ```bash
115
- # Show current configuration
116
- git-copilot-commit config --show
117
-
118
- # Set a default model for all commits
119
- git-copilot-commit config --set-default-model gpt-4o
120
- ```
121
-
122
- ## Examples
123
-
124
- **Commit all changes with staging prompts:**
125
-
126
- ```bash
127
- git-copilot-commit commit --all
128
- ```
129
-
130
- **Commit with verbose output:**
131
-
132
- ```bash
133
- git-copilot-commit commit --verbose
134
- ```
135
-
136
- **Use a specific AI model:**
137
-
138
- ```bash
139
- git-copilot-commit commit --model claude-3.5-sonnet
140
- ```
141
-
142
- **Set up a default model and use it:**
143
-
144
- ```bash
145
- # Set default model once
146
- git-copilot-commit config --set-default-model gpt-4o
147
-
148
- # Now all commits will use gpt-4o by default
149
- git-copilot-commit commit
150
-
151
- # Override with a different model when needed
152
- git-copilot-commit commit --model claude-3.5-sonnet
153
- ```
154
-
155
- ## Generated Commit Message Format
156
-
157
- The tool follows the [Conventional Commits](https://www.conventionalcommits.org/) specification:
158
-
159
- ```
160
- <type>[optional scope]: <description>
161
- ```
162
-
163
- **Supported Types:**
164
-
165
- - `feat`: A new feature
166
- - `fix`: A bug fix
167
- - `docs`: Documentation changes
168
- - `style`: Code formatting (no logic changes)
169
- - `refactor`: Code restructuring (no behavior changes)
170
- - `perf`: Performance improvements
171
- - `test`: Adding or updating tests
172
- - `chore`: Maintenance tasks (tooling, dependencies, etc.)
173
- - `revert`: Reverting previous changes
174
-
175
- **Example Messages:**
176
-
177
- - `feat(auth): add user authentication with JWT`
178
- - `fix(database): handle connection retries properly`
179
- - `docs(readme): update installation instructions`
180
- - `refactor(utils): simplify date parsing logic`
181
-
182
- ## Git Configuration
183
-
184
- For the best experience with git-copilot-commit, consider adding this alias for the commit command:
185
-
186
- ```bash
187
- # Add a git alias for quick access
188
- git config --global alias.ai-commit "!git-copilot-commit commit"
189
-
190
- # Now you can use:
191
- git ai-commit
192
- git ai-commit --model claude-3.5-sonnet
193
- git ai-commit --all --verbose
194
- ```
195
-
196
- You can also configure git to show more context in diffs, which can help when reviewing changes:
197
-
198
- ```bash
199
- # Show more context in diffs
200
- git config --global diff.context 3
201
- ```
@@ -1,188 +0,0 @@
1
- # git-copilot-commit
2
-
3
- 🤖 AI-powered Git commit assistant that automatically generates conventional commit messages using
4
- GitHub Copilot.
5
-
6
- ## Features
7
-
8
- - **AI-Generated Commit Messages**: Uses GitHub Copilot to analyze your staged changes and generate
9
- conventional commit messages
10
- - **Multiple AI Models**: Choose from GPT-4, Claude, Gemini, and other available models
11
- - **Configurable Defaults**: Set a default model to use across all commits
12
- - **Message Editing**: Edit generated messages using your git-configured editor or commit directly
13
- - **Conventional Commits**: Follows the [Conventional Commits](https://www.conventionalcommits.org/)
14
- specification
15
- - **Rich Output**: Beautiful terminal output with syntax highlighting and tables
16
-
17
- ## Installation
18
-
19
- Install using uv (recommended):
20
-
21
- ```bash
22
- uv tool install git-copilot-commit
23
- ```
24
-
25
- Or with pip:
26
-
27
- ```bash
28
- pipx install git-copilot-commit
29
- ```
30
-
31
- Or without installing:
32
-
33
- ```bash
34
- uvx git-copilot-commit --help
35
- ```
36
-
37
- ## Prerequisites
38
-
39
- **GitHub Copilot Access**: You need an active GitHub Copilot subscription
40
-
41
- ## Quick Start
42
-
43
- 1. **Authenticate with GitHub Copilot**:
44
-
45
- ```bash
46
- git-copilot-commit authenticate
47
- ```
48
-
49
- 2. **Make some changes** in your git repository
50
-
51
- 3. **Generate and commit**:
52
-
53
- ```bash
54
- git-copilot-commit commit
55
- ```
56
-
57
- ## Usage
58
-
59
- ### `commit`
60
-
61
- Automatically commit changes in the current git repository:
62
-
63
- ```bash
64
- git-copilot-commit commit
65
- ```
66
-
67
- **Options:**
68
-
69
- - `--all, -a`: Stage all files before committing
70
- - `--verbose, -v`: Show verbose output with file details
71
- - `--model, -m`: Specify which AI model to use for generating the commit message
72
-
73
- 1. The tool analyzes your changes
74
- 2. Prompts you to stage files (if needed)
75
- 3. Generates an AI-powered commit message
76
- 4. Offers three choices:
77
- - `(c)ommit`: Commit with the generated message
78
- - `(e)dit`: Edit the message in your git-configured editor
79
- - `(q)uit`: Cancel the commit
80
-
81
- ### `authenticate`
82
-
83
- Set up authentication with GitHub Copilot:
84
-
85
- ```bash
86
- git-copilot-commit authenticate
87
- ```
88
-
89
- ### `models`
90
-
91
- List available AI models:
92
-
93
- ```bash
94
- git-copilot-commit models
95
- ```
96
-
97
- ### `config`
98
-
99
- Manage application configuration:
100
-
101
- ```bash
102
- # Show current configuration
103
- git-copilot-commit config --show
104
-
105
- # Set a default model for all commits
106
- git-copilot-commit config --set-default-model gpt-4o
107
- ```
108
-
109
- ## Examples
110
-
111
- **Commit all changes with staging prompts:**
112
-
113
- ```bash
114
- git-copilot-commit commit --all
115
- ```
116
-
117
- **Commit with verbose output:**
118
-
119
- ```bash
120
- git-copilot-commit commit --verbose
121
- ```
122
-
123
- **Use a specific AI model:**
124
-
125
- ```bash
126
- git-copilot-commit commit --model claude-3.5-sonnet
127
- ```
128
-
129
- **Set up a default model and use it:**
130
-
131
- ```bash
132
- # Set default model once
133
- git-copilot-commit config --set-default-model gpt-4o
134
-
135
- # Now all commits will use gpt-4o by default
136
- git-copilot-commit commit
137
-
138
- # Override with a different model when needed
139
- git-copilot-commit commit --model claude-3.5-sonnet
140
- ```
141
-
142
- ## Generated Commit Message Format
143
-
144
- The tool follows the [Conventional Commits](https://www.conventionalcommits.org/) specification:
145
-
146
- ```
147
- <type>[optional scope]: <description>
148
- ```
149
-
150
- **Supported Types:**
151
-
152
- - `feat`: A new feature
153
- - `fix`: A bug fix
154
- - `docs`: Documentation changes
155
- - `style`: Code formatting (no logic changes)
156
- - `refactor`: Code restructuring (no behavior changes)
157
- - `perf`: Performance improvements
158
- - `test`: Adding or updating tests
159
- - `chore`: Maintenance tasks (tooling, dependencies, etc.)
160
- - `revert`: Reverting previous changes
161
-
162
- **Example Messages:**
163
-
164
- - `feat(auth): add user authentication with JWT`
165
- - `fix(database): handle connection retries properly`
166
- - `docs(readme): update installation instructions`
167
- - `refactor(utils): simplify date parsing logic`
168
-
169
- ## Git Configuration
170
-
171
- For the best experience with git-copilot-commit, consider adding this alias for the commit command:
172
-
173
- ```bash
174
- # Add a git alias for quick access
175
- git config --global alias.ai-commit "!git-copilot-commit commit"
176
-
177
- # Now you can use:
178
- git ai-commit
179
- git ai-commit --model claude-3.5-sonnet
180
- git ai-commit --all --verbose
181
- ```
182
-
183
- You can also configure git to show more context in diffs, which can help when reviewing changes:
184
-
185
- ```bash
186
- # Show more context in diffs
187
- git config --global diff.context 3
188
- ```
@@ -1,22 +0,0 @@
1
- [project]
2
- name = "git-copilot-commit"
3
- version = "0.1.6"
4
- description = "Automatically generate and commit changes using copilot"
5
- readme = "README.md"
6
- authors = [
7
- { name = "Dheepak Krishnamurthy", email = "1813121+kdheepak@users.noreply.github.com" },
8
- ]
9
- requires-python = ">=3.12"
10
- dependencies = [
11
- "pycopilot>=0.1.1",
12
- "rich>=14.0.0",
13
- "typer>=0.16.0",
14
- "xdg-base-dirs>=6.0.2",
15
- ]
16
-
17
- [project.scripts]
18
- git-copilot-commit = "git_copilot_commit.cli:app"
19
-
20
- [build-system]
21
- requires = ["hatchling"]
22
- build-backend = "hatchling.build"