ace-git-copilot 0.2.4__tar.gz → 0.2.6__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 (65) hide show
  1. {ace_git_copilot-0.2.4 → ace_git_copilot-0.2.6}/.agents/AGENTS.md +0 -1
  2. {ace_git_copilot-0.2.4 → ace_git_copilot-0.2.6}/PKG-INFO +1 -1
  3. {ace_git_copilot-0.2.4 → ace_git_copilot-0.2.6}/ace/cli.py +2 -0
  4. {ace_git_copilot-0.2.4 → ace_git_copilot-0.2.6}/ace/core/diagnostics.py +0 -1
  5. {ace_git_copilot-0.2.4 → ace_git_copilot-0.2.6}/ace/ui/dashboard.py +41 -2
  6. ace_git_copilot-0.2.6/desktop.ini +4 -0
  7. {ace_git_copilot-0.2.4 → ace_git_copilot-0.2.6}/pyproject.toml +1 -1
  8. {ace_git_copilot-0.2.4 → ace_git_copilot-0.2.6}/tests/test_diagnostics.py +0 -1
  9. {ace_git_copilot-0.2.4 → ace_git_copilot-0.2.6}/tests/test_hooks.py +2 -3
  10. {ace_git_copilot-0.2.4 → ace_git_copilot-0.2.6}/.env.example +0 -0
  11. {ace_git_copilot-0.2.4 → ace_git_copilot-0.2.6}/.github/workflows/tests.yml +0 -0
  12. {ace_git_copilot-0.2.4 → ace_git_copilot-0.2.6}/.gitignore +0 -0
  13. {ace_git_copilot-0.2.4 → ace_git_copilot-0.2.6}/README.md +0 -0
  14. {ace_git_copilot-0.2.4 → ace_git_copilot-0.2.6}/ace/__init__.py +0 -0
  15. {ace_git_copilot-0.2.4 → ace_git_copilot-0.2.6}/ace/__main__.py +0 -0
  16. {ace_git_copilot-0.2.4 → ace_git_copilot-0.2.6}/ace/ai/changelog_generator.py +0 -0
  17. {ace_git_copilot-0.2.4 → ace_git_copilot-0.2.6}/ace/ai/code_reviewer.py +0 -0
  18. {ace_git_copilot-0.2.4 → ace_git_copilot-0.2.6}/ace/ai/commit_generator.py +0 -0
  19. {ace_git_copilot-0.2.4 → ace_git_copilot-0.2.6}/ace/ai/conflict_resolver.py +0 -0
  20. {ace_git_copilot-0.2.4 → ace_git_copilot-0.2.6}/ace/ai/gitignore_generator.py +0 -0
  21. {ace_git_copilot-0.2.4 → ace_git_copilot-0.2.6}/ace/ai/history_analyzer.py +0 -0
  22. {ace_git_copilot-0.2.4 → ace_git_copilot-0.2.6}/ace/ai/intent_parser.py +0 -0
  23. {ace_git_copilot-0.2.4 → ace_git_copilot-0.2.6}/ace/ai/llm_factory.py +0 -0
  24. {ace_git_copilot-0.2.4 → ace_git_copilot-0.2.6}/ace/ai/pr_drafter.py +0 -0
  25. {ace_git_copilot-0.2.4 → ace_git_copilot-0.2.6}/ace/ai/prompts/changelog.py +0 -0
  26. {ace_git_copilot-0.2.4 → ace_git_copilot-0.2.6}/ace/ai/prompts/commit.py +0 -0
  27. {ace_git_copilot-0.2.4 → ace_git_copilot-0.2.6}/ace/ai/prompts/conflict.py +0 -0
  28. {ace_git_copilot-0.2.4 → ace_git_copilot-0.2.6}/ace/ai/prompts/doctor.py +0 -0
  29. {ace_git_copilot-0.2.4 → ace_git_copilot-0.2.6}/ace/ai/prompts/explain.py +0 -0
  30. {ace_git_copilot-0.2.4 → ace_git_copilot-0.2.6}/ace/ai/prompts/ignore.py +0 -0
  31. {ace_git_copilot-0.2.4 → ace_git_copilot-0.2.6}/ace/ai/prompts/intent.py +0 -0
  32. {ace_git_copilot-0.2.4 → ace_git_copilot-0.2.6}/ace/ai/prompts/pr.py +0 -0
  33. {ace_git_copilot-0.2.4 → ace_git_copilot-0.2.6}/ace/ai/prompts/rebase.py +0 -0
  34. {ace_git_copilot-0.2.4 → ace_git_copilot-0.2.6}/ace/ai/prompts/review.py +0 -0
  35. {ace_git_copilot-0.2.4 → ace_git_copilot-0.2.6}/ace/ai/prompts/search.py +0 -0
  36. {ace_git_copilot-0.2.4 → ace_git_copilot-0.2.6}/ace/ai/prompts/undo.py +0 -0
  37. {ace_git_copilot-0.2.4 → ace_git_copilot-0.2.6}/ace/ai/rebase_helper.py +0 -0
  38. {ace_git_copilot-0.2.4 → ace_git_copilot-0.2.6}/ace/core/config.py +0 -0
  39. {ace_git_copilot-0.2.4 → ace_git_copilot-0.2.6}/ace/core/context.py +0 -0
  40. {ace_git_copilot-0.2.4 → ace_git_copilot-0.2.6}/ace/core/git_ops.py +0 -0
  41. {ace_git_copilot-0.2.4 → ace_git_copilot-0.2.6}/ace/core/hooks.py +0 -0
  42. {ace_git_copilot-0.2.4 → ace_git_copilot-0.2.6}/ace/core/safety.py +0 -0
  43. {ace_git_copilot-0.2.4 → ace_git_copilot-0.2.6}/ace/ui/banner.py +0 -0
  44. {ace_git_copilot-0.2.4 → ace_git_copilot-0.2.6}/ace/ui/display.py +0 -0
  45. {ace_git_copilot-0.2.4 → ace_git_copilot-0.2.6}/ace/ui/prompts.py +0 -0
  46. {ace_git_copilot-0.2.4 → ace_git_copilot-0.2.6}/ace/ui/themes.py +0 -0
  47. {ace_git_copilot-0.2.4 → ace_git_copilot-0.2.6}/ace/utils/conflict_parser.py +0 -0
  48. {ace_git_copilot-0.2.4 → ace_git_copilot-0.2.6}/ace/utils/diff_parser.py +0 -0
  49. {ace_git_copilot-0.2.4 → ace_git_copilot-0.2.6}/ace/utils/json_utils.py +0 -0
  50. {ace_git_copilot-0.2.4 → ace_git_copilot-0.2.6}/tests/conftest.py +0 -0
  51. {ace_git_copilot-0.2.4 → ace_git_copilot-0.2.6}/tests/test_changelog_generator.py +0 -0
  52. {ace_git_copilot-0.2.4 → ace_git_copilot-0.2.6}/tests/test_code_reviewer.py +0 -0
  53. {ace_git_copilot-0.2.4 → ace_git_copilot-0.2.6}/tests/test_conflict_resolver.py +0 -0
  54. {ace_git_copilot-0.2.4 → ace_git_copilot-0.2.6}/tests/test_diff_trimmer.py +0 -0
  55. {ace_git_copilot-0.2.4 → ace_git_copilot-0.2.6}/tests/test_git_ops.py +0 -0
  56. {ace_git_copilot-0.2.4 → ace_git_copilot-0.2.6}/tests/test_help.py +0 -0
  57. {ace_git_copilot-0.2.4 → ace_git_copilot-0.2.6}/tests/test_history_analyzer.py +0 -0
  58. {ace_git_copilot-0.2.4 → ace_git_copilot-0.2.6}/tests/test_ignore.py +0 -0
  59. {ace_git_copilot-0.2.4 → ace_git_copilot-0.2.6}/tests/test_intent_parser.py +0 -0
  60. {ace_git_copilot-0.2.4 → ace_git_copilot-0.2.6}/tests/test_llm_factory.py +0 -0
  61. {ace_git_copilot-0.2.4 → ace_git_copilot-0.2.6}/tests/test_pr_drafter.py +0 -0
  62. {ace_git_copilot-0.2.4 → ace_git_copilot-0.2.6}/tests/test_rebase_helper.py +0 -0
  63. {ace_git_copilot-0.2.4 → ace_git_copilot-0.2.6}/tests/test_safety.py +0 -0
  64. {ace_git_copilot-0.2.4 → ace_git_copilot-0.2.6}/tests/test_search.py +0 -0
  65. {ace_git_copilot-0.2.4 → ace_git_copilot-0.2.6}/tests/test_undo.py +0 -0
@@ -14,4 +14,3 @@ Whenever a new version of Ace is created (e.g., version incremented in `pyprojec
14
14
  ```bash
15
15
  twine upload dist/*
16
16
  ```
17
- 5. Ensure a corresponding git tag is pushed to GitHub.
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: ace-git-copilot
3
- Version: 0.2.4
3
+ Version: 0.2.6
4
4
  Summary: AI-powered Git copilot — talk to Git in plain English
5
5
  License: MIT
6
6
  Classifier: License :: OSI Approved :: MIT License
@@ -565,6 +565,8 @@ def review_cmd(
565
565
  ):
566
566
  if not isinstance(file, str):
567
567
  file = None
568
+ if not isinstance(all_changes, bool):
569
+ all_changes = False
568
570
  if not isinstance(branch, str):
569
571
  branch = None
570
572
  if not isinstance(strict, bool):
@@ -1,4 +1,3 @@
1
- import os
2
1
  from pathlib import Path
3
2
  from typing import Dict, Any, List
4
3
  from ace.core.git_ops import GitOps
@@ -144,7 +144,8 @@ def show_dashboard(git_ops: GitOps, offline: bool = False):
144
144
 
145
145
  menu_table.add_row("\[c]", "AI Commit", "\[r]", "AI Code Review")
146
146
  menu_table.add_row("\[u]", "AI Smart Undo", "\[p]", "Plan Git Command (AI)")
147
- menu_table.add_row("\[s]", "Repo Stats", "\[q]", "Quit Dashboard")
147
+ menu_table.add_row("\[s]", "Repo Stats", "\[w]", "Switch Repo")
148
+ menu_table.add_row("\[q]", "Quit Dashboard", "", "")
148
149
 
149
150
  console.print(Panel(menu_table, title="[bold white]Available Actions[/bold white]", border_style="orange3", expand=False))
150
151
  console.print()
@@ -156,7 +157,7 @@ def show_dashboard(git_ops: GitOps, offline: bool = False):
156
157
  if choice == "\r" or choice == "\n" or not choice:
157
158
  choice = "q"
158
159
  break
159
- if choice in ("c", "r", "u", "p", "s", "q"):
160
+ if choice in ("c", "r", "u", "p", "s", "w", "q"):
160
161
  break
161
162
  console.print(choice)
162
163
  console.print()
@@ -200,6 +201,44 @@ def show_dashboard(git_ops: GitOps, offline: bool = False):
200
201
  console.print(f"[red]Error running stats: {e}[/red]")
201
202
  console.print("\n[dim]Press any key to return to dashboard...[/dim]")
202
203
  click.getchar()
204
+ elif choice == "w":
205
+ # Switch repository
206
+ from ace.ui.prompts import prompt_select
207
+ sibling_repos_all = []
208
+ try:
209
+ for p in parent_dir.iterdir():
210
+ if p.is_dir() and (p / ".git").exists():
211
+ sibling_repos_all.append(p.name)
212
+ except Exception:
213
+ pass
214
+ sibling_repos_all.sort()
215
+
216
+ if not sibling_repos_all:
217
+ console.print("[yellow]No other repositories found in the parent directory.[/yellow]")
218
+ else:
219
+ console.print("[bold]Available repositories in workspace:[/bold]")
220
+ current_name = Path(git_ops.working_dir).name
221
+ display_options = []
222
+ for name in sibling_repos_all:
223
+ if name == current_name:
224
+ display_options.append(f"{name} [bold green](current)[/bold green]")
225
+ else:
226
+ display_options.append(name)
227
+
228
+ sel_idx = prompt_select(display_options, prompt_text="Enter repository number to switch to", default="s")
229
+ if sel_idx >= 0:
230
+ selected_repo_name = sibling_repos_all[sel_idx]
231
+ new_path = parent_dir / selected_repo_name
232
+ try:
233
+ from ace.core.git_ops import GitOps as NewGitOps
234
+ git_ops = NewGitOps(str(new_path))
235
+ console.print(f"[green]Switched workspace to repository: [bold]{selected_repo_name}[/bold][/green]")
236
+ except Exception as e:
237
+ console.print(f"[red]Failed to switch repository: {e}[/red]")
238
+ else:
239
+ console.print("[yellow]Switch cancelled.[/yellow]")
240
+ console.print("\n[dim]Press any key to return to dashboard...[/dim]")
241
+ click.getchar()
203
242
  elif choice == "p":
204
243
  query = typer.prompt("What do you want to do with Git? (e.g. 'undo my last commit')")
205
244
  if query.strip():
@@ -0,0 +1,4 @@
1
+ [ViewState]
2
+ Mode=
3
+ Vid=
4
+ FolderType=Generic
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "ace-git-copilot"
3
- version = "0.2.4"
3
+ version = "0.2.6"
4
4
  description = "AI-powered Git copilot — talk to Git in plain English"
5
5
  readme = "README.md"
6
6
  requires-python = ">=3.11"
@@ -1,6 +1,5 @@
1
1
  import pytest
2
2
  from unittest.mock import MagicMock, patch
3
- from pathlib import Path
4
3
  from ace.core.diagnostics import GitDiagnostics
5
4
 
6
5
  @pytest.fixture
@@ -1,6 +1,5 @@
1
1
  import pytest
2
2
  from unittest.mock import MagicMock, patch
3
- from pathlib import Path
4
3
  from ace.core.hooks import GitHooksManager
5
4
 
6
5
  @pytest.fixture
@@ -19,7 +18,7 @@ def test_install_pre_commit(mock_git_ops):
19
18
  patch("ace.core.hooks.os.stat"), \
20
19
  patch("ace.core.hooks.os.chmod") as mock_chmod:
21
20
 
22
- p = manager.install_pre_commit()
21
+ manager.install_pre_commit()
23
22
 
24
23
  mock_path.write_text.assert_called_once()
25
24
  args, kwargs = mock_path.write_text.call_args
@@ -36,7 +35,7 @@ def test_install_prepare_commit_msg(mock_git_ops):
36
35
  patch("ace.core.hooks.os.stat"), \
37
36
  patch("ace.core.hooks.os.chmod") as mock_chmod:
38
37
 
39
- p = manager.install_prepare_commit_msg()
38
+ manager.install_prepare_commit_msg()
40
39
 
41
40
  mock_path.write_text.assert_called_once()
42
41
  args, kwargs = mock_path.write_text.call_args