ace-git-copilot 0.4.3__tar.gz → 0.4.4__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 (137) hide show
  1. {ace_git_copilot-0.4.3 → ace_git_copilot-0.4.4}/PKG-INFO +28 -18
  2. {ace_git_copilot-0.4.3 → ace_git_copilot-0.4.4}/README.md +27 -17
  3. ace_git_copilot-0.4.4/ace/__init__.py +1 -0
  4. ace_git_copilot-0.4.4/media/cli_in_action.svg +196 -0
  5. ace_git_copilot-0.4.4/media/dashboard.svg +215 -0
  6. ace_git_copilot-0.4.4/media/stats.svg +160 -0
  7. {ace_git_copilot-0.4.3 → ace_git_copilot-0.4.4}/pyproject.toml +1 -1
  8. ace_git_copilot-0.4.3/ace/__init__.py +0 -1
  9. {ace_git_copilot-0.4.3 → ace_git_copilot-0.4.4}/.agents/AGENTS.md +0 -0
  10. {ace_git_copilot-0.4.3 → ace_git_copilot-0.4.4}/.agents/BRIEFING.md +0 -0
  11. {ace_git_copilot-0.4.3 → ace_git_copilot-0.4.4}/.agents/ORIGINAL_REQUEST.md +0 -0
  12. {ace_git_copilot-0.4.3 → ace_git_copilot-0.4.4}/.agents/e2e_testing_track/BRIEFING.md +0 -0
  13. {ace_git_copilot-0.4.3 → ace_git_copilot-0.4.4}/.agents/e2e_testing_track/ORIGINAL_REQUEST.md +0 -0
  14. {ace_git_copilot-0.4.3 → ace_git_copilot-0.4.4}/.agents/e2e_testing_track/SCOPE.md +0 -0
  15. {ace_git_copilot-0.4.3 → ace_git_copilot-0.4.4}/.agents/e2e_testing_track/progress.md +0 -0
  16. {ace_git_copilot-0.4.3 → ace_git_copilot-0.4.4}/.agents/explorer_init/BRIEFING.md +0 -0
  17. {ace_git_copilot-0.4.3 → ace_git_copilot-0.4.4}/.agents/explorer_init/ORIGINAL_REQUEST.md +0 -0
  18. {ace_git_copilot-0.4.3 → ace_git_copilot-0.4.4}/.agents/explorer_init/emojis_list.txt +0 -0
  19. {ace_git_copilot-0.4.3 → ace_git_copilot-0.4.4}/.agents/explorer_init/find_unused_modules.py +0 -0
  20. {ace_git_copilot-0.4.3 → ace_git_copilot-0.4.4}/.agents/explorer_init/handoff.md +0 -0
  21. {ace_git_copilot-0.4.3 → ace_git_copilot-0.4.4}/.agents/explorer_init/measure_lazy_startup.py +0 -0
  22. {ace_git_copilot-0.4.3 → ace_git_copilot-0.4.4}/.agents/explorer_init/measure_startup.py +0 -0
  23. {ace_git_copilot-0.4.3 → ace_git_copilot-0.4.4}/.agents/explorer_init/profile_imports.py +0 -0
  24. {ace_git_copilot-0.4.3 → ace_git_copilot-0.4.4}/.agents/explorer_init/progress.md +0 -0
  25. {ace_git_copilot-0.4.3 → ace_git_copilot-0.4.4}/.agents/explorer_init/run_importtime.py +0 -0
  26. {ace_git_copilot-0.4.3 → ace_git_copilot-0.4.4}/.agents/explorer_init/search_banner.py +0 -0
  27. {ace_git_copilot-0.4.3 → ace_git_copilot-0.4.4}/.agents/explorer_init/search_emojis.py +0 -0
  28. {ace_git_copilot-0.4.3 → ace_git_copilot-0.4.4}/.agents/explorer_init/search_git_usages.py +0 -0
  29. {ace_git_copilot-0.4.3 → ace_git_copilot-0.4.4}/.agents/explorer_init/search_usages.py +0 -0
  30. {ace_git_copilot-0.4.3 → ace_git_copilot-0.4.4}/.agents/explorer_init/test_import_profiler.py +0 -0
  31. {ace_git_copilot-0.4.3 → ace_git_copilot-0.4.4}/.agents/explorer_init/test_mocked_sys.py +0 -0
  32. {ace_git_copilot-0.4.3 → ace_git_copilot-0.4.4}/.agents/handoff.md +0 -0
  33. {ace_git_copilot-0.4.3 → ace_git_copilot-0.4.4}/.agents/implementation_track/BRIEFING.md +0 -0
  34. {ace_git_copilot-0.4.3 → ace_git_copilot-0.4.4}/.agents/implementation_track/ORIGINAL_REQUEST.md +0 -0
  35. {ace_git_copilot-0.4.3 → ace_git_copilot-0.4.4}/.agents/implementation_track/explorer_initial_report.md +0 -0
  36. {ace_git_copilot-0.4.3 → ace_git_copilot-0.4.4}/.agents/implementation_track/progress.md +0 -0
  37. {ace_git_copilot-0.4.3 → ace_git_copilot-0.4.4}/.agents/orchestrator/.gitkeep +0 -0
  38. {ace_git_copilot-0.4.3 → ace_git_copilot-0.4.4}/.agents/orchestrator/BRIEFING.md +0 -0
  39. {ace_git_copilot-0.4.3 → ace_git_copilot-0.4.4}/.agents/orchestrator/ORIGINAL_REQUEST.md +0 -0
  40. {ace_git_copilot-0.4.3 → ace_git_copilot-0.4.4}/.agents/orchestrator/PROJECT.md +0 -0
  41. {ace_git_copilot-0.4.3 → ace_git_copilot-0.4.4}/.agents/orchestrator/progress.md +0 -0
  42. {ace_git_copilot-0.4.3 → ace_git_copilot-0.4.4}/.agents/teamwork_preview_explorer_e2e_explore/BRIEFING.md +0 -0
  43. {ace_git_copilot-0.4.3 → ace_git_copilot-0.4.4}/.agents/teamwork_preview_explorer_e2e_explore/ORIGINAL_REQUEST.md +0 -0
  44. {ace_git_copilot-0.4.3 → ace_git_copilot-0.4.4}/.agents/teamwork_preview_explorer_e2e_explore/handoff.md +0 -0
  45. {ace_git_copilot-0.4.3 → ace_git_copilot-0.4.4}/.agents/teamwork_preview_explorer_e2e_explore/progress.md +0 -0
  46. {ace_git_copilot-0.4.3 → ace_git_copilot-0.4.4}/.agents/worker_e2e_testing/BRIEFING.md +0 -0
  47. {ace_git_copilot-0.4.3 → ace_git_copilot-0.4.4}/.agents/worker_e2e_testing/ORIGINAL_REQUEST.md +0 -0
  48. {ace_git_copilot-0.4.3 → ace_git_copilot-0.4.4}/.agents/worker_e2e_testing/progress.md +0 -0
  49. {ace_git_copilot-0.4.3 → ace_git_copilot-0.4.4}/.agents/worker_m1_startup/BRIEFING.md +0 -0
  50. {ace_git_copilot-0.4.3 → ace_git_copilot-0.4.4}/.agents/worker_m1_startup/ORIGINAL_REQUEST.md +0 -0
  51. {ace_git_copilot-0.4.3 → ace_git_copilot-0.4.4}/.agents/worker_m1_startup/progress.md +0 -0
  52. {ace_git_copilot-0.4.3 → ace_git_copilot-0.4.4}/.env.example +0 -0
  53. {ace_git_copilot-0.4.3 → ace_git_copilot-0.4.4}/.github/workflows/tests.yml +0 -0
  54. {ace_git_copilot-0.4.3 → ace_git_copilot-0.4.4}/.gitignore +0 -0
  55. {ace_git_copilot-0.4.3 → ace_git_copilot-0.4.4}/CODE_OF_CONDUCT.md +0 -0
  56. {ace_git_copilot-0.4.3 → ace_git_copilot-0.4.4}/CONTRIBUTING.md +0 -0
  57. {ace_git_copilot-0.4.3 → ace_git_copilot-0.4.4}/LICENSE +0 -0
  58. {ace_git_copilot-0.4.3 → ace_git_copilot-0.4.4}/PROJECT.md +0 -0
  59. {ace_git_copilot-0.4.3 → ace_git_copilot-0.4.4}/SECURITY.md +0 -0
  60. {ace_git_copilot-0.4.3 → ace_git_copilot-0.4.4}/SUPPORT.md +0 -0
  61. {ace_git_copilot-0.4.3 → ace_git_copilot-0.4.4}/TEST_INFRA.md +0 -0
  62. {ace_git_copilot-0.4.3 → ace_git_copilot-0.4.4}/TEST_READY.md +0 -0
  63. {ace_git_copilot-0.4.3 → ace_git_copilot-0.4.4}/ace/__main__.py +0 -0
  64. {ace_git_copilot-0.4.3 → ace_git_copilot-0.4.4}/ace/ai/changelog_generator.py +0 -0
  65. {ace_git_copilot-0.4.3 → ace_git_copilot-0.4.4}/ace/ai/code_reviewer.py +0 -0
  66. {ace_git_copilot-0.4.3 → ace_git_copilot-0.4.4}/ace/ai/commit_generator.py +0 -0
  67. {ace_git_copilot-0.4.3 → ace_git_copilot-0.4.4}/ace/ai/conflict_resolver.py +0 -0
  68. {ace_git_copilot-0.4.3 → ace_git_copilot-0.4.4}/ace/ai/gitignore_generator.py +0 -0
  69. {ace_git_copilot-0.4.3 → ace_git_copilot-0.4.4}/ace/ai/history_analyzer.py +0 -0
  70. {ace_git_copilot-0.4.3 → ace_git_copilot-0.4.4}/ace/ai/intent_parser.py +0 -0
  71. {ace_git_copilot-0.4.3 → ace_git_copilot-0.4.4}/ace/ai/llm_factory.py +0 -0
  72. {ace_git_copilot-0.4.3 → ace_git_copilot-0.4.4}/ace/ai/pr_drafter.py +0 -0
  73. {ace_git_copilot-0.4.3 → ace_git_copilot-0.4.4}/ace/ai/prompts/blame.py +0 -0
  74. {ace_git_copilot-0.4.3 → ace_git_copilot-0.4.4}/ace/ai/prompts/changelog.py +0 -0
  75. {ace_git_copilot-0.4.3 → ace_git_copilot-0.4.4}/ace/ai/prompts/commit.py +0 -0
  76. {ace_git_copilot-0.4.3 → ace_git_copilot-0.4.4}/ace/ai/prompts/conflict.py +0 -0
  77. {ace_git_copilot-0.4.3 → ace_git_copilot-0.4.4}/ace/ai/prompts/doctor.py +0 -0
  78. {ace_git_copilot-0.4.3 → ace_git_copilot-0.4.4}/ace/ai/prompts/explain.py +0 -0
  79. {ace_git_copilot-0.4.3 → ace_git_copilot-0.4.4}/ace/ai/prompts/ignore.py +0 -0
  80. {ace_git_copilot-0.4.3 → ace_git_copilot-0.4.4}/ace/ai/prompts/intent.py +0 -0
  81. {ace_git_copilot-0.4.3 → ace_git_copilot-0.4.4}/ace/ai/prompts/pr.py +0 -0
  82. {ace_git_copilot-0.4.3 → ace_git_copilot-0.4.4}/ace/ai/prompts/rebase.py +0 -0
  83. {ace_git_copilot-0.4.3 → ace_git_copilot-0.4.4}/ace/ai/prompts/review.py +0 -0
  84. {ace_git_copilot-0.4.3 → ace_git_copilot-0.4.4}/ace/ai/prompts/search.py +0 -0
  85. {ace_git_copilot-0.4.3 → ace_git_copilot-0.4.4}/ace/ai/prompts/standup.py +0 -0
  86. {ace_git_copilot-0.4.3 → ace_git_copilot-0.4.4}/ace/ai/prompts/undo.py +0 -0
  87. {ace_git_copilot-0.4.3 → ace_git_copilot-0.4.4}/ace/ai/rebase_helper.py +0 -0
  88. {ace_git_copilot-0.4.3 → ace_git_copilot-0.4.4}/ace/cli.py +0 -0
  89. {ace_git_copilot-0.4.3 → ace_git_copilot-0.4.4}/ace/core/config.py +0 -0
  90. {ace_git_copilot-0.4.3 → ace_git_copilot-0.4.4}/ace/core/context.py +0 -0
  91. {ace_git_copilot-0.4.3 → ace_git_copilot-0.4.4}/ace/core/diagnostics.py +0 -0
  92. {ace_git_copilot-0.4.3 → ace_git_copilot-0.4.4}/ace/core/git_ops.py +0 -0
  93. {ace_git_copilot-0.4.3 → ace_git_copilot-0.4.4}/ace/core/hooks.py +0 -0
  94. {ace_git_copilot-0.4.3 → ace_git_copilot-0.4.4}/ace/core/safety.py +0 -0
  95. {ace_git_copilot-0.4.3 → ace_git_copilot-0.4.4}/ace/ui/banner.py +0 -0
  96. {ace_git_copilot-0.4.3 → ace_git_copilot-0.4.4}/ace/ui/dashboard.py +0 -0
  97. {ace_git_copilot-0.4.3 → ace_git_copilot-0.4.4}/ace/ui/display.py +0 -0
  98. {ace_git_copilot-0.4.3 → ace_git_copilot-0.4.4}/ace/ui/prompts.py +0 -0
  99. {ace_git_copilot-0.4.3 → ace_git_copilot-0.4.4}/ace/ui/themes.py +0 -0
  100. {ace_git_copilot-0.4.3 → ace_git_copilot-0.4.4}/ace/utils/conflict_parser.py +0 -0
  101. {ace_git_copilot-0.4.3 → ace_git_copilot-0.4.4}/ace/utils/diff_parser.py +0 -0
  102. {ace_git_copilot-0.4.3 → ace_git_copilot-0.4.4}/ace/utils/json_utils.py +0 -0
  103. {ace_git_copilot-0.4.3 → ace_git_copilot-0.4.4}/ace/utils/string_utils.py +0 -0
  104. {ace_git_copilot-0.4.3 → ace_git_copilot-0.4.4}/tests/conftest.py +0 -0
  105. {ace_git_copilot-0.4.3 → ace_git_copilot-0.4.4}/tests/e2e/conftest.py +0 -0
  106. {ace_git_copilot-0.4.3 → ace_git_copilot-0.4.4}/tests/e2e/test_tier1_features.py +0 -0
  107. {ace_git_copilot-0.4.3 → ace_git_copilot-0.4.4}/tests/e2e/test_tier2_boundaries.py +0 -0
  108. {ace_git_copilot-0.4.3 → ace_git_copilot-0.4.4}/tests/e2e/test_tier3_combinations.py +0 -0
  109. {ace_git_copilot-0.4.3 → ace_git_copilot-0.4.4}/tests/e2e/test_tier4_workloads.py +0 -0
  110. {ace_git_copilot-0.4.3 → ace_git_copilot-0.4.4}/tests/test_blame.py +0 -0
  111. {ace_git_copilot-0.4.3 → ace_git_copilot-0.4.4}/tests/test_changelog_generator.py +0 -0
  112. {ace_git_copilot-0.4.3 → ace_git_copilot-0.4.4}/tests/test_code_reviewer.py +0 -0
  113. {ace_git_copilot-0.4.3 → ace_git_copilot-0.4.4}/tests/test_config_atomic_write.py +0 -0
  114. {ace_git_copilot-0.4.3 → ace_git_copilot-0.4.4}/tests/test_conflict_resolver.py +0 -0
  115. {ace_git_copilot-0.4.3 → ace_git_copilot-0.4.4}/tests/test_conflict_resolver_backup.py +0 -0
  116. {ace_git_copilot-0.4.3 → ace_git_copilot-0.4.4}/tests/test_context_gitdir_detection.py +0 -0
  117. {ace_git_copilot-0.4.3 → ace_git_copilot-0.4.4}/tests/test_diagnostics.py +0 -0
  118. {ace_git_copilot-0.4.3 → ace_git_copilot-0.4.4}/tests/test_diff_trimmer.py +0 -0
  119. {ace_git_copilot-0.4.3 → ace_git_copilot-0.4.4}/tests/test_git_ops.py +0 -0
  120. {ace_git_copilot-0.4.3 → ace_git_copilot-0.4.4}/tests/test_git_ops_execute.py +0 -0
  121. {ace_git_copilot-0.4.3 → ace_git_copilot-0.4.4}/tests/test_help.py +0 -0
  122. {ace_git_copilot-0.4.3 → ace_git_copilot-0.4.4}/tests/test_history_analyzer.py +0 -0
  123. {ace_git_copilot-0.4.3 → ace_git_copilot-0.4.4}/tests/test_hooks.py +0 -0
  124. {ace_git_copilot-0.4.3 → ace_git_copilot-0.4.4}/tests/test_ignore.py +0 -0
  125. {ace_git_copilot-0.4.3 → ace_git_copilot-0.4.4}/tests/test_intent_parser.py +0 -0
  126. {ace_git_copilot-0.4.3 → ace_git_copilot-0.4.4}/tests/test_interceptor.py +0 -0
  127. {ace_git_copilot-0.4.3 → ace_git_copilot-0.4.4}/tests/test_llm_factory.py +0 -0
  128. {ace_git_copilot-0.4.3 → ace_git_copilot-0.4.4}/tests/test_llm_factory_ollama.py +0 -0
  129. {ace_git_copilot-0.4.3 → ace_git_copilot-0.4.4}/tests/test_merge_state.py +0 -0
  130. {ace_git_copilot-0.4.3 → ace_git_copilot-0.4.4}/tests/test_pr_drafter.py +0 -0
  131. {ace_git_copilot-0.4.3 → ace_git_copilot-0.4.4}/tests/test_rebase_helper.py +0 -0
  132. {ace_git_copilot-0.4.3 → ace_git_copilot-0.4.4}/tests/test_safety.py +0 -0
  133. {ace_git_copilot-0.4.3 → ace_git_copilot-0.4.4}/tests/test_search.py +0 -0
  134. {ace_git_copilot-0.4.3 → ace_git_copilot-0.4.4}/tests/test_standup.py +0 -0
  135. {ace_git_copilot-0.4.3 → ace_git_copilot-0.4.4}/tests/test_string_utils.py +0 -0
  136. {ace_git_copilot-0.4.3 → ace_git_copilot-0.4.4}/tests/test_undo.py +0 -0
  137. {ace_git_copilot-0.4.3 → ace_git_copilot-0.4.4}/tests/test_workspace.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: ace-git-copilot
3
- Version: 0.4.3
3
+ Version: 0.4.4
4
4
  Summary: AI-powered Git copilot — talk to Git in plain English
5
5
  Project-URL: Homepage, https://github.com/jachinsamuel/Ace
6
6
  Project-URL: Documentation, https://github.com/jachinsamuel/Ace#readme
@@ -52,6 +52,8 @@ Author: Jachin Samuel <jachinsamuel007@gmail.com>
52
52
 
53
53
  Ace is an intelligent command-line tool that brings AI assistance directly to your Git workflow. Talk to Git in plain English — Ace translates your intents into Git commands, explains what it is doing, and runs them safely. It also features a fully interactive terminal user interface (TUI) dashboard to help manage your repositories with ease.
54
54
 
55
+ ![Ace CLI in action](media/cli_in_action.svg)
56
+
55
57
  ---
56
58
 
57
59
  ## Features
@@ -72,9 +74,19 @@ Ace is an intelligent command-line tool that brings AI assistance directly to yo
72
74
 
73
75
  ## Installation
74
76
 
77
+ ### Option A: Install via standard pip (Recommended)
78
+ You can install Ace globally using standard pip:
79
+ ```bash
80
+ pip install ace-git-copilot
81
+ ```
82
+ *Note: If you run into a `command not found` error, you can bypass your system PATH and run the tool directly through Python module execution:*
83
+ ```bash
84
+ python -m ace dash
85
+ ```
86
+
87
+ ### Option B: Install via pipx (Alternative)
75
88
  For Python command-line applications like Ace, it is highly recommended to install using **pipx**. pipx automatically installs the application in an isolated environment and manages your system PATH so the executable works globally without conflict.
76
89
 
77
- ### Option A: Install via pipx (Recommended)
78
90
  1. Install pipx and configure your system PATH (only needs to be done once):
79
91
  ```bash
80
92
  pip install pipx
@@ -92,16 +104,6 @@ For Python command-line applications like Ace, it is highly recommended to insta
92
104
  ace dash
93
105
  ```
94
106
 
95
- ### Option B: Install via standard pip (Alternative)
96
- You can also install Ace globally using standard pip:
97
- ```bash
98
- pip install ace-git-copilot
99
- ```
100
- *Note: If you run into a `command not found` error, you can bypass your system PATH and run the tool directly through Python module execution:*
101
- ```bash
102
- python -m ace dash
103
- ```
104
-
105
107
  ---
106
108
 
107
109
  ## Configuration and Setup
@@ -112,17 +114,17 @@ ace setup
112
114
  ```
113
115
  Ace saves your configuration file to `~/.ace/config.toml`. It supports the following AI model providers:
114
116
 
115
- ### 1. NVIDIA NIM API (Cloud)
116
- Uses cloud-hosted high-performance models.
117
- * You will need an NVIDIA developer API key. Get one for free at [NVIDIA build](https://build.nvidia.com/).
118
- * Default model: `meta/llama-3.3-70b-instruct`
119
-
120
- ### 2. Ollama (Local Models)
117
+ ### 1. Ollama (Local Models)
121
118
  For a 100% private, offline, and free experience.
122
119
  * Ensure [Ollama](https://ollama.com/) is installed and running on your system.
123
120
  * Default model: `qwen2.5-coder:7b`
124
121
  * If the selected model is not downloaded yet, Ace will automatically pull it for you during setup.
125
122
 
123
+ ### 2. NVIDIA NIM API (Cloud)
124
+ Uses cloud-hosted high-performance models.
125
+ * You will need an NVIDIA developer API key. Get one for free at [NVIDIA build](https://build.nvidia.com/).
126
+ * Default model: `meta/llama-3.3-70b-instruct`
127
+
126
128
  ### 3. OpenAI
127
129
  Uses OpenAI GPT models.
128
130
  * You will need an OpenAI API key.
@@ -188,6 +190,8 @@ Launch the repository dashboard by running:
188
190
  ace dash
189
191
  ```
190
192
 
193
+ ![Ace TUI Dashboard](media/dashboard.svg)
194
+
191
195
  The dashboard features:
192
196
  * A start-up logo.
193
197
  * Active branch info, tracking status, and repository charts.
@@ -195,6 +199,12 @@ The dashboard features:
195
199
 
196
200
  ---
197
201
 
202
+ ## Repository Statistics (`ace stats`)
203
+
204
+ View beautiful contributor graphs, commit frequency charts, and file extension breakdowns:
205
+
206
+ ![Ace Stats](media/stats.svg)
207
+
198
208
  ## License
199
209
 
200
210
  Distributed under the MIT License. See [LICENSE](LICENSE) for more details.
@@ -19,6 +19,8 @@ Author: Jachin Samuel <jachinsamuel007@gmail.com>
19
19
 
20
20
  Ace is an intelligent command-line tool that brings AI assistance directly to your Git workflow. Talk to Git in plain English — Ace translates your intents into Git commands, explains what it is doing, and runs them safely. It also features a fully interactive terminal user interface (TUI) dashboard to help manage your repositories with ease.
21
21
 
22
+ ![Ace CLI in action](media/cli_in_action.svg)
23
+
22
24
  ---
23
25
 
24
26
  ## Features
@@ -39,9 +41,19 @@ Ace is an intelligent command-line tool that brings AI assistance directly to yo
39
41
 
40
42
  ## Installation
41
43
 
44
+ ### Option A: Install via standard pip (Recommended)
45
+ You can install Ace globally using standard pip:
46
+ ```bash
47
+ pip install ace-git-copilot
48
+ ```
49
+ *Note: If you run into a `command not found` error, you can bypass your system PATH and run the tool directly through Python module execution:*
50
+ ```bash
51
+ python -m ace dash
52
+ ```
53
+
54
+ ### Option B: Install via pipx (Alternative)
42
55
  For Python command-line applications like Ace, it is highly recommended to install using **pipx**. pipx automatically installs the application in an isolated environment and manages your system PATH so the executable works globally without conflict.
43
56
 
44
- ### Option A: Install via pipx (Recommended)
45
57
  1. Install pipx and configure your system PATH (only needs to be done once):
46
58
  ```bash
47
59
  pip install pipx
@@ -59,16 +71,6 @@ For Python command-line applications like Ace, it is highly recommended to insta
59
71
  ace dash
60
72
  ```
61
73
 
62
- ### Option B: Install via standard pip (Alternative)
63
- You can also install Ace globally using standard pip:
64
- ```bash
65
- pip install ace-git-copilot
66
- ```
67
- *Note: If you run into a `command not found` error, you can bypass your system PATH and run the tool directly through Python module execution:*
68
- ```bash
69
- python -m ace dash
70
- ```
71
-
72
74
  ---
73
75
 
74
76
  ## Configuration and Setup
@@ -79,17 +81,17 @@ ace setup
79
81
  ```
80
82
  Ace saves your configuration file to `~/.ace/config.toml`. It supports the following AI model providers:
81
83
 
82
- ### 1. NVIDIA NIM API (Cloud)
83
- Uses cloud-hosted high-performance models.
84
- * You will need an NVIDIA developer API key. Get one for free at [NVIDIA build](https://build.nvidia.com/).
85
- * Default model: `meta/llama-3.3-70b-instruct`
86
-
87
- ### 2. Ollama (Local Models)
84
+ ### 1. Ollama (Local Models)
88
85
  For a 100% private, offline, and free experience.
89
86
  * Ensure [Ollama](https://ollama.com/) is installed and running on your system.
90
87
  * Default model: `qwen2.5-coder:7b`
91
88
  * If the selected model is not downloaded yet, Ace will automatically pull it for you during setup.
92
89
 
90
+ ### 2. NVIDIA NIM API (Cloud)
91
+ Uses cloud-hosted high-performance models.
92
+ * You will need an NVIDIA developer API key. Get one for free at [NVIDIA build](https://build.nvidia.com/).
93
+ * Default model: `meta/llama-3.3-70b-instruct`
94
+
93
95
  ### 3. OpenAI
94
96
  Uses OpenAI GPT models.
95
97
  * You will need an OpenAI API key.
@@ -155,6 +157,8 @@ Launch the repository dashboard by running:
155
157
  ace dash
156
158
  ```
157
159
 
160
+ ![Ace TUI Dashboard](media/dashboard.svg)
161
+
158
162
  The dashboard features:
159
163
  * A start-up logo.
160
164
  * Active branch info, tracking status, and repository charts.
@@ -162,6 +166,12 @@ The dashboard features:
162
166
 
163
167
  ---
164
168
 
169
+ ## Repository Statistics (`ace stats`)
170
+
171
+ View beautiful contributor graphs, commit frequency charts, and file extension breakdowns:
172
+
173
+ ![Ace Stats](media/stats.svg)
174
+
165
175
  ## License
166
176
 
167
177
  Distributed under the MIT License. See [LICENSE](LICENSE) for more details.
@@ -0,0 +1 @@
1
+ __version__ = "0.4.4"
@@ -0,0 +1,196 @@
1
+ <svg class="rich-terminal" viewBox="0 0 1177 855.1999999999999" xmlns="http://www.w3.org/2000/svg">
2
+ <!-- Generated with Rich https://www.textualize.io -->
3
+ <style>
4
+
5
+ @font-face {
6
+ font-family: "Fira Code";
7
+ src: local("FiraCode-Regular"),
8
+ url("https://cdnjs.cloudflare.com/ajax/libs/firacode/6.2.0/woff2/FiraCode-Regular.woff2") format("woff2"),
9
+ url("https://cdnjs.cloudflare.com/ajax/libs/firacode/6.2.0/woff/FiraCode-Regular.woff") format("woff");
10
+ font-style: normal;
11
+ font-weight: 400;
12
+ }
13
+ @font-face {
14
+ font-family: "Fira Code";
15
+ src: local("FiraCode-Bold"),
16
+ url("https://cdnjs.cloudflare.com/ajax/libs/firacode/6.2.0/woff2/FiraCode-Bold.woff2") format("woff2"),
17
+ url("https://cdnjs.cloudflare.com/ajax/libs/firacode/6.2.0/woff/FiraCode-Bold.woff") format("woff");
18
+ font-style: bold;
19
+ font-weight: 700;
20
+ }
21
+
22
+ .terminal-2405438817-matrix {
23
+ font-family: Fira Code, monospace;
24
+ font-size: 20px;
25
+ line-height: 24.4px;
26
+ font-variant-east-asian: full-width;
27
+ }
28
+
29
+ .terminal-2405438817-title {
30
+ font-size: 18px;
31
+ font-weight: bold;
32
+ font-family: arial;
33
+ }
34
+
35
+ .terminal-2405438817-r1 { fill: #00d5ff;font-style: italic; }
36
+ .terminal-2405438817-r2 { fill: #d9d9d9 }
37
+ .terminal-2405438817-r3 { fill: #00e676 }
38
+ .terminal-2405438817-r4 { fill: #98e024;font-weight: bold }
39
+ .terminal-2405438817-r5 { fill: #555555 }
40
+ .terminal-2405438817-r6 { fill: #ff6d00;font-weight: bold }
41
+ .terminal-2405438817-r7 { fill: #58d1eb;font-weight: bold }
42
+ .terminal-2405438817-r8 { fill: #c4c5b5 }
43
+ .terminal-2405438817-r9 { fill: #00d5ff;font-weight: bold }
44
+ .terminal-2405438817-r10 { fill: #767676 }
45
+ .terminal-2405438817-r11 { fill: #00e676;font-weight: bold }
46
+ </style>
47
+
48
+ <defs>
49
+ <clipPath id="terminal-2405438817-clip-terminal">
50
+ <rect x="0" y="0" width="1158.0" height="804.1999999999999" />
51
+ </clipPath>
52
+ <clipPath id="terminal-2405438817-line-0">
53
+ <rect x="0" y="1.5" width="1159" height="24.65"/>
54
+ </clipPath>
55
+ <clipPath id="terminal-2405438817-line-1">
56
+ <rect x="0" y="25.9" width="1159" height="24.65"/>
57
+ </clipPath>
58
+ <clipPath id="terminal-2405438817-line-2">
59
+ <rect x="0" y="50.3" width="1159" height="24.65"/>
60
+ </clipPath>
61
+ <clipPath id="terminal-2405438817-line-3">
62
+ <rect x="0" y="74.7" width="1159" height="24.65"/>
63
+ </clipPath>
64
+ <clipPath id="terminal-2405438817-line-4">
65
+ <rect x="0" y="99.1" width="1159" height="24.65"/>
66
+ </clipPath>
67
+ <clipPath id="terminal-2405438817-line-5">
68
+ <rect x="0" y="123.5" width="1159" height="24.65"/>
69
+ </clipPath>
70
+ <clipPath id="terminal-2405438817-line-6">
71
+ <rect x="0" y="147.9" width="1159" height="24.65"/>
72
+ </clipPath>
73
+ <clipPath id="terminal-2405438817-line-7">
74
+ <rect x="0" y="172.3" width="1159" height="24.65"/>
75
+ </clipPath>
76
+ <clipPath id="terminal-2405438817-line-8">
77
+ <rect x="0" y="196.7" width="1159" height="24.65"/>
78
+ </clipPath>
79
+ <clipPath id="terminal-2405438817-line-9">
80
+ <rect x="0" y="221.1" width="1159" height="24.65"/>
81
+ </clipPath>
82
+ <clipPath id="terminal-2405438817-line-10">
83
+ <rect x="0" y="245.5" width="1159" height="24.65"/>
84
+ </clipPath>
85
+ <clipPath id="terminal-2405438817-line-11">
86
+ <rect x="0" y="269.9" width="1159" height="24.65"/>
87
+ </clipPath>
88
+ <clipPath id="terminal-2405438817-line-12">
89
+ <rect x="0" y="294.3" width="1159" height="24.65"/>
90
+ </clipPath>
91
+ <clipPath id="terminal-2405438817-line-13">
92
+ <rect x="0" y="318.7" width="1159" height="24.65"/>
93
+ </clipPath>
94
+ <clipPath id="terminal-2405438817-line-14">
95
+ <rect x="0" y="343.1" width="1159" height="24.65"/>
96
+ </clipPath>
97
+ <clipPath id="terminal-2405438817-line-15">
98
+ <rect x="0" y="367.5" width="1159" height="24.65"/>
99
+ </clipPath>
100
+ <clipPath id="terminal-2405438817-line-16">
101
+ <rect x="0" y="391.9" width="1159" height="24.65"/>
102
+ </clipPath>
103
+ <clipPath id="terminal-2405438817-line-17">
104
+ <rect x="0" y="416.3" width="1159" height="24.65"/>
105
+ </clipPath>
106
+ <clipPath id="terminal-2405438817-line-18">
107
+ <rect x="0" y="440.7" width="1159" height="24.65"/>
108
+ </clipPath>
109
+ <clipPath id="terminal-2405438817-line-19">
110
+ <rect x="0" y="465.1" width="1159" height="24.65"/>
111
+ </clipPath>
112
+ <clipPath id="terminal-2405438817-line-20">
113
+ <rect x="0" y="489.5" width="1159" height="24.65"/>
114
+ </clipPath>
115
+ <clipPath id="terminal-2405438817-line-21">
116
+ <rect x="0" y="513.9" width="1159" height="24.65"/>
117
+ </clipPath>
118
+ <clipPath id="terminal-2405438817-line-22">
119
+ <rect x="0" y="538.3" width="1159" height="24.65"/>
120
+ </clipPath>
121
+ <clipPath id="terminal-2405438817-line-23">
122
+ <rect x="0" y="562.7" width="1159" height="24.65"/>
123
+ </clipPath>
124
+ <clipPath id="terminal-2405438817-line-24">
125
+ <rect x="0" y="587.1" width="1159" height="24.65"/>
126
+ </clipPath>
127
+ <clipPath id="terminal-2405438817-line-25">
128
+ <rect x="0" y="611.5" width="1159" height="24.65"/>
129
+ </clipPath>
130
+ <clipPath id="terminal-2405438817-line-26">
131
+ <rect x="0" y="635.9" width="1159" height="24.65"/>
132
+ </clipPath>
133
+ <clipPath id="terminal-2405438817-line-27">
134
+ <rect x="0" y="660.3" width="1159" height="24.65"/>
135
+ </clipPath>
136
+ <clipPath id="terminal-2405438817-line-28">
137
+ <rect x="0" y="684.7" width="1159" height="24.65"/>
138
+ </clipPath>
139
+ <clipPath id="terminal-2405438817-line-29">
140
+ <rect x="0" y="709.1" width="1159" height="24.65"/>
141
+ </clipPath>
142
+ <clipPath id="terminal-2405438817-line-30">
143
+ <rect x="0" y="733.5" width="1159" height="24.65"/>
144
+ </clipPath>
145
+ <clipPath id="terminal-2405438817-line-31">
146
+ <rect x="0" y="757.9" width="1159" height="24.65"/>
147
+ </clipPath>
148
+ </defs>
149
+
150
+ <rect fill="#0c0c0c" stroke="rgba(255,255,255,0.35)" stroke-width="1" x="1" y="1" width="1175" height="853.2" rx="8"/><text class="terminal-2405438817-title" fill="#d9d9d9" text-anchor="middle" x="587" y="27">Ace&#160;Commit&#160;Flow</text>
151
+ <g transform="translate(26,22)">
152
+ <circle cx="0" cy="0" r="7" fill="#ff5f57"/>
153
+ <circle cx="22" cy="0" r="7" fill="#febc2e"/>
154
+ <circle cx="44" cy="0" r="7" fill="#28c840"/>
155
+ </g>
156
+
157
+ <g transform="translate(9, 41)" clip-path="url(#terminal-2405438817-clip-terminal)">
158
+
159
+ <g class="terminal-2405438817-matrix">
160
+ <text class="terminal-2405438817-r1" x="0" y="20" textLength="671" clip-path="url(#terminal-2405438817-line-0)">🧠&#160;Understanding&#160;request:&#160;&quot;add&#160;everything&#160;and&#160;commit&quot;...</text><text class="terminal-2405438817-r2" x="1159" y="20" textLength="12.2" clip-path="url(#terminal-2405438817-line-0)">
161
+ </text><text class="terminal-2405438817-r2" x="1159" y="44.4" textLength="12.2" clip-path="url(#terminal-2405438817-line-1)">
162
+ </text><text class="terminal-2405438817-r3" x="0" y="68.8" textLength="24.4" clip-path="url(#terminal-2405438817-line-2)">┌─</text><text class="terminal-2405438817-r3" x="24.4" y="68.8" textLength="402.6" clip-path="url(#terminal-2405438817-line-2)">─────────────────────────────────</text><text class="terminal-2405438817-r4" x="439.2" y="68.8" textLength="280.6" clip-path="url(#terminal-2405438817-line-2)">Proposed&#160;Execution&#160;Plan</text><text class="terminal-2405438817-r3" x="732" y="68.8" textLength="402.6" clip-path="url(#terminal-2405438817-line-2)">─────────────────────────────────</text><text class="terminal-2405438817-r3" x="1134.6" y="68.8" textLength="24.4" clip-path="url(#terminal-2405438817-line-2)">─┐</text><text class="terminal-2405438817-r2" x="1159" y="68.8" textLength="12.2" clip-path="url(#terminal-2405438817-line-2)">
163
+ </text><text class="terminal-2405438817-r3" x="0" y="93.2" textLength="12.2" clip-path="url(#terminal-2405438817-line-3)">│</text><text class="terminal-2405438817-r5" x="24.4" y="93.2" textLength="1110.2" clip-path="url(#terminal-2405438817-line-3)">┌───────┬──────────────┬──────────────────────────────────────────────────────────────────┐</text><text class="terminal-2405438817-r3" x="1146.8" y="93.2" textLength="12.2" clip-path="url(#terminal-2405438817-line-3)">│</text><text class="terminal-2405438817-r2" x="1159" y="93.2" textLength="12.2" clip-path="url(#terminal-2405438817-line-3)">
164
+ </text><text class="terminal-2405438817-r3" x="0" y="117.6" textLength="12.2" clip-path="url(#terminal-2405438817-line-4)">│</text><text class="terminal-2405438817-r5" x="24.4" y="117.6" textLength="12.2" clip-path="url(#terminal-2405438817-line-4)">│</text><text class="terminal-2405438817-r6" x="61" y="117.6" textLength="36.6" clip-path="url(#terminal-2405438817-line-4)">&#160;&#160;#</text><text class="terminal-2405438817-r5" x="122" y="117.6" textLength="12.2" clip-path="url(#terminal-2405438817-line-4)">│</text><text class="terminal-2405438817-r6" x="158.6" y="117.6" textLength="122" clip-path="url(#terminal-2405438817-line-4)">Command&#160;&#160;&#160;</text><text class="terminal-2405438817-r5" x="305" y="117.6" textLength="12.2" clip-path="url(#terminal-2405438817-line-4)">│</text><text class="terminal-2405438817-r6" x="341.6" y="117.6" textLength="756.4" clip-path="url(#terminal-2405438817-line-4)">What&#160;it&#160;does&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="terminal-2405438817-r5" x="1122.4" y="117.6" textLength="12.2" clip-path="url(#terminal-2405438817-line-4)">│</text><text class="terminal-2405438817-r3" x="1146.8" y="117.6" textLength="12.2" clip-path="url(#terminal-2405438817-line-4)">│</text><text class="terminal-2405438817-r2" x="1159" y="117.6" textLength="12.2" clip-path="url(#terminal-2405438817-line-4)">
165
+ </text><text class="terminal-2405438817-r3" x="0" y="142" textLength="12.2" clip-path="url(#terminal-2405438817-line-5)">│</text><text class="terminal-2405438817-r5" x="24.4" y="142" textLength="1110.2" clip-path="url(#terminal-2405438817-line-5)">├───────┼──────────────┼──────────────────────────────────────────────────────────────────┤</text><text class="terminal-2405438817-r3" x="1146.8" y="142" textLength="12.2" clip-path="url(#terminal-2405438817-line-5)">│</text><text class="terminal-2405438817-r2" x="1159" y="142" textLength="12.2" clip-path="url(#terminal-2405438817-line-5)">
166
+ </text><text class="terminal-2405438817-r3" x="0" y="166.4" textLength="12.2" clip-path="url(#terminal-2405438817-line-6)">│</text><text class="terminal-2405438817-r5" x="24.4" y="166.4" textLength="12.2" clip-path="url(#terminal-2405438817-line-6)">│</text><text class="terminal-2405438817-r2" x="61" y="166.4" textLength="36.6" clip-path="url(#terminal-2405438817-line-6)">&#160;&#160;1</text><text class="terminal-2405438817-r5" x="122" y="166.4" textLength="12.2" clip-path="url(#terminal-2405438817-line-6)">│</text><text class="terminal-2405438817-r7" x="158.6" y="166.4" textLength="122" clip-path="url(#terminal-2405438817-line-6)">git&#160;add&#160;.&#160;</text><text class="terminal-2405438817-r5" x="305" y="166.4" textLength="12.2" clip-path="url(#terminal-2405438817-line-6)">│</text><text class="terminal-2405438817-r8" x="341.6" y="166.4" textLength="756.4" clip-path="url(#terminal-2405438817-line-6)">Stages&#160;all&#160;changes,&#160;including&#160;&#x27;src/app/not-found.tsx&#x27;&#160;and&#160;&#160;&#160;&#160;&#160;</text><text class="terminal-2405438817-r5" x="1122.4" y="166.4" textLength="12.2" clip-path="url(#terminal-2405438817-line-6)">│</text><text class="terminal-2405438817-r3" x="1146.8" y="166.4" textLength="12.2" clip-path="url(#terminal-2405438817-line-6)">│</text><text class="terminal-2405438817-r2" x="1159" y="166.4" textLength="12.2" clip-path="url(#terminal-2405438817-line-6)">
167
+ </text><text class="terminal-2405438817-r3" x="0" y="190.8" textLength="12.2" clip-path="url(#terminal-2405438817-line-7)">│</text><text class="terminal-2405438817-r5" x="24.4" y="190.8" textLength="12.2" clip-path="url(#terminal-2405438817-line-7)">│</text><text class="terminal-2405438817-r5" x="122" y="190.8" textLength="12.2" clip-path="url(#terminal-2405438817-line-7)">│</text><text class="terminal-2405438817-r5" x="305" y="190.8" textLength="12.2" clip-path="url(#terminal-2405438817-line-7)">│</text><text class="terminal-2405438817-r8" x="341.6" y="190.8" textLength="756.4" clip-path="url(#terminal-2405438817-line-7)">&#x27;src/components/fuzzy-text.tsx&#x27;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="terminal-2405438817-r5" x="1122.4" y="190.8" textLength="12.2" clip-path="url(#terminal-2405438817-line-7)">│</text><text class="terminal-2405438817-r3" x="1146.8" y="190.8" textLength="12.2" clip-path="url(#terminal-2405438817-line-7)">│</text><text class="terminal-2405438817-r2" x="1159" y="190.8" textLength="12.2" clip-path="url(#terminal-2405438817-line-7)">
168
+ </text><text class="terminal-2405438817-r3" x="0" y="215.2" textLength="12.2" clip-path="url(#terminal-2405438817-line-8)">│</text><text class="terminal-2405438817-r5" x="24.4" y="215.2" textLength="12.2" clip-path="url(#terminal-2405438817-line-8)">│</text><text class="terminal-2405438817-r2" x="61" y="215.2" textLength="36.6" clip-path="url(#terminal-2405438817-line-8)">&#160;&#160;2</text><text class="terminal-2405438817-r5" x="122" y="215.2" textLength="12.2" clip-path="url(#terminal-2405438817-line-8)">│</text><text class="terminal-2405438817-r7" x="158.6" y="215.2" textLength="122" clip-path="url(#terminal-2405438817-line-8)">ace&#160;commit</text><text class="terminal-2405438817-r5" x="305" y="215.2" textLength="12.2" clip-path="url(#terminal-2405438817-line-8)">│</text><text class="terminal-2405438817-r8" x="341.6" y="215.2" textLength="756.4" clip-path="url(#terminal-2405438817-line-8)">Analyzes&#160;the&#160;changes&#160;and&#160;opens&#160;the&#160;interactive&#160;Conventional&#160;&#160;&#160;</text><text class="terminal-2405438817-r5" x="1122.4" y="215.2" textLength="12.2" clip-path="url(#terminal-2405438817-line-8)">│</text><text class="terminal-2405438817-r3" x="1146.8" y="215.2" textLength="12.2" clip-path="url(#terminal-2405438817-line-8)">│</text><text class="terminal-2405438817-r2" x="1159" y="215.2" textLength="12.2" clip-path="url(#terminal-2405438817-line-8)">
169
+ </text><text class="terminal-2405438817-r3" x="0" y="239.6" textLength="12.2" clip-path="url(#terminal-2405438817-line-9)">│</text><text class="terminal-2405438817-r5" x="24.4" y="239.6" textLength="12.2" clip-path="url(#terminal-2405438817-line-9)">│</text><text class="terminal-2405438817-r5" x="122" y="239.6" textLength="12.2" clip-path="url(#terminal-2405438817-line-9)">│</text><text class="terminal-2405438817-r5" x="305" y="239.6" textLength="12.2" clip-path="url(#terminal-2405438817-line-9)">│</text><text class="terminal-2405438817-r8" x="341.6" y="239.6" textLength="756.4" clip-path="url(#terminal-2405438817-line-9)">Commit&#160;wizard.&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="terminal-2405438817-r5" x="1122.4" y="239.6" textLength="12.2" clip-path="url(#terminal-2405438817-line-9)">│</text><text class="terminal-2405438817-r3" x="1146.8" y="239.6" textLength="12.2" clip-path="url(#terminal-2405438817-line-9)">│</text><text class="terminal-2405438817-r2" x="1159" y="239.6" textLength="12.2" clip-path="url(#terminal-2405438817-line-9)">
170
+ </text><text class="terminal-2405438817-r3" x="0" y="264" textLength="12.2" clip-path="url(#terminal-2405438817-line-10)">│</text><text class="terminal-2405438817-r5" x="24.4" y="264" textLength="1110.2" clip-path="url(#terminal-2405438817-line-10)">└───────┴──────────────┴──────────────────────────────────────────────────────────────────┘</text><text class="terminal-2405438817-r3" x="1146.8" y="264" textLength="12.2" clip-path="url(#terminal-2405438817-line-10)">│</text><text class="terminal-2405438817-r2" x="1159" y="264" textLength="12.2" clip-path="url(#terminal-2405438817-line-10)">
171
+ </text><text class="terminal-2405438817-r3" x="0" y="288.4" textLength="1159" clip-path="url(#terminal-2405438817-line-11)">└─────────────────────────────────────────────────────────────────────────────────────────────┘</text><text class="terminal-2405438817-r2" x="1159" y="288.4" textLength="12.2" clip-path="url(#terminal-2405438817-line-11)">
172
+ </text><text class="terminal-2405438817-r2" x="1159" y="312.8" textLength="12.2" clip-path="url(#terminal-2405438817-line-12)">
173
+ </text><text class="terminal-2405438817-r9" x="0" y="337.2" textLength="536.8" clip-path="url(#terminal-2405438817-line-13)">&#160;&#160;›&#160;Do&#160;you&#160;want&#160;to&#160;execute&#160;this&#160;plan?&#160;&#160;[Y/n]</text><text class="terminal-2405438817-r2" x="1159" y="337.2" textLength="12.2" clip-path="url(#terminal-2405438817-line-13)">
174
+ </text><text class="terminal-2405438817-r10" x="0" y="361.6" textLength="292.8" clip-path="url(#terminal-2405438817-line-14)">&#160;›&#160;&#160;Executing:&#160;git&#160;add&#160;.</text><text class="terminal-2405438817-r2" x="1159" y="361.6" textLength="12.2" clip-path="url(#terminal-2405438817-line-14)">
175
+ </text><text class="terminal-2405438817-r10" x="0" y="386" textLength="305" clip-path="url(#terminal-2405438817-line-15)">&#160;›&#160;&#160;Executing:&#160;ace&#160;commit</text><text class="terminal-2405438817-r2" x="1159" y="386" textLength="12.2" clip-path="url(#terminal-2405438817-line-15)">
176
+ </text><text class="terminal-2405438817-r2" x="1159" y="410.4" textLength="12.2" clip-path="url(#terminal-2405438817-line-16)">
177
+ </text><text class="terminal-2405438817-r3" x="0" y="434.8" textLength="24.4" clip-path="url(#terminal-2405438817-line-17)">┌─</text><text class="terminal-2405438817-r3" x="24.4" y="434.8" textLength="439.2" clip-path="url(#terminal-2405438817-line-17)">────────────────────────────────────</text><text class="terminal-2405438817-r4" x="475.8" y="434.8" textLength="195.2" clip-path="url(#terminal-2405438817-line-17)">Suggested&#160;Commit</text><text class="terminal-2405438817-r3" x="683.2" y="434.8" textLength="451.4" clip-path="url(#terminal-2405438817-line-17)">─────────────────────────────────────</text><text class="terminal-2405438817-r3" x="1134.6" y="434.8" textLength="24.4" clip-path="url(#terminal-2405438817-line-17)">─┐</text><text class="terminal-2405438817-r2" x="1159" y="434.8" textLength="12.2" clip-path="url(#terminal-2405438817-line-17)">
178
+ </text><text class="terminal-2405438817-r3" x="0" y="459.2" textLength="12.2" clip-path="url(#terminal-2405438817-line-18)">│</text><text class="terminal-2405438817-r3" x="1146.8" y="459.2" textLength="12.2" clip-path="url(#terminal-2405438817-line-18)">│</text><text class="terminal-2405438817-r2" x="1159" y="459.2" textLength="12.2" clip-path="url(#terminal-2405438817-line-18)">
179
+ </text><text class="terminal-2405438817-r3" x="0" y="483.6" textLength="12.2" clip-path="url(#terminal-2405438817-line-19)">│</text><text class="terminal-2405438817-r8" x="36.6" y="483.6" textLength="744.2" clip-path="url(#terminal-2405438817-line-19)">feat(components):&#160;add&#160;fuzzy-text&#160;component&#160;and&#160;not-found&#160;page</text><text class="terminal-2405438817-r3" x="1146.8" y="483.6" textLength="12.2" clip-path="url(#terminal-2405438817-line-19)">│</text><text class="terminal-2405438817-r2" x="1159" y="483.6" textLength="12.2" clip-path="url(#terminal-2405438817-line-19)">
180
+ </text><text class="terminal-2405438817-r3" x="0" y="508" textLength="12.2" clip-path="url(#terminal-2405438817-line-20)">│</text><text class="terminal-2405438817-r3" x="1146.8" y="508" textLength="12.2" clip-path="url(#terminal-2405438817-line-20)">│</text><text class="terminal-2405438817-r2" x="1159" y="508" textLength="12.2" clip-path="url(#terminal-2405438817-line-20)">
181
+ </text><text class="terminal-2405438817-r3" x="0" y="532.4" textLength="12.2" clip-path="url(#terminal-2405438817-line-21)">│</text><text class="terminal-2405438817-r8" x="36.6" y="532.4" textLength="1049.2" clip-path="url(#terminal-2405438817-line-21)">Added&#160;a&#160;new&#160;FuzzyText&#160;component&#160;that&#160;provides&#160;a&#160;fuzzy&#160;text&#160;effect,&#160;and&#160;a&#160;new&#160;NotFound&#160;</text><text class="terminal-2405438817-r3" x="1146.8" y="532.4" textLength="12.2" clip-path="url(#terminal-2405438817-line-21)">│</text><text class="terminal-2405438817-r2" x="1159" y="532.4" textLength="12.2" clip-path="url(#terminal-2405438817-line-21)">
182
+ </text><text class="terminal-2405438817-r3" x="0" y="556.8" textLength="12.2" clip-path="url(#terminal-2405438817-line-22)">│</text><text class="terminal-2405438817-r8" x="36.6" y="556.8" textLength="48.8" clip-path="url(#terminal-2405438817-line-22)">page</text><text class="terminal-2405438817-r3" x="1146.8" y="556.8" textLength="12.2" clip-path="url(#terminal-2405438817-line-22)">│</text><text class="terminal-2405438817-r2" x="1159" y="556.8" textLength="12.2" clip-path="url(#terminal-2405438817-line-22)">
183
+ </text><text class="terminal-2405438817-r3" x="0" y="581.2" textLength="12.2" clip-path="url(#terminal-2405438817-line-23)">│</text><text class="terminal-2405438817-r8" x="36.6" y="581.2" textLength="1061.4" clip-path="url(#terminal-2405438817-line-23)">that&#160;utilizes&#160;this&#160;component.&#160;The&#160;FuzzyText&#160;component&#160;allows&#160;for&#160;customization&#160;of&#160;font&#160;</text><text class="terminal-2405438817-r3" x="1146.8" y="581.2" textLength="12.2" clip-path="url(#terminal-2405438817-line-23)">│</text><text class="terminal-2405438817-r2" x="1159" y="581.2" textLength="12.2" clip-path="url(#terminal-2405438817-line-23)">
184
+ </text><text class="terminal-2405438817-r3" x="0" y="605.6" textLength="12.2" clip-path="url(#terminal-2405438817-line-24)">│</text><text class="terminal-2405438817-r8" x="36.6" y="605.6" textLength="61" clip-path="url(#terminal-2405438817-line-24)">size,</text><text class="terminal-2405438817-r3" x="1146.8" y="605.6" textLength="12.2" clip-path="url(#terminal-2405438817-line-24)">│</text><text class="terminal-2405438817-r2" x="1159" y="605.6" textLength="12.2" clip-path="url(#terminal-2405438817-line-24)">
185
+ </text><text class="terminal-2405438817-r3" x="0" y="630" textLength="12.2" clip-path="url(#terminal-2405438817-line-25)">│</text><text class="terminal-2405438817-r8" x="36.6" y="630" textLength="1073.6" clip-path="url(#terminal-2405438817-line-25)">weight,&#160;family,&#160;color,&#160;and&#160;more,&#160;and&#160;also&#160;supports&#160;hover&#160;and&#160;click&#160;effects.&#160;The&#160;NotFound</text><text class="terminal-2405438817-r3" x="1146.8" y="630" textLength="12.2" clip-path="url(#terminal-2405438817-line-25)">│</text><text class="terminal-2405438817-r2" x="1159" y="630" textLength="12.2" clip-path="url(#terminal-2405438817-line-25)">
186
+ </text><text class="terminal-2405438817-r3" x="0" y="654.4" textLength="12.2" clip-path="url(#terminal-2405438817-line-26)">│</text><text class="terminal-2405438817-r8" x="36.6" y="654.4" textLength="915" clip-path="url(#terminal-2405438817-line-26)">page&#160;uses&#160;this&#160;component&#160;to&#160;display&#160;a&#160;404&#160;message&#160;with&#160;a&#160;fuzzy&#160;text&#160;effect.</text><text class="terminal-2405438817-r3" x="1146.8" y="654.4" textLength="12.2" clip-path="url(#terminal-2405438817-line-26)">│</text><text class="terminal-2405438817-r2" x="1159" y="654.4" textLength="12.2" clip-path="url(#terminal-2405438817-line-26)">
187
+ </text><text class="terminal-2405438817-r3" x="0" y="678.8" textLength="12.2" clip-path="url(#terminal-2405438817-line-27)">│</text><text class="terminal-2405438817-r3" x="1146.8" y="678.8" textLength="12.2" clip-path="url(#terminal-2405438817-line-27)">│</text><text class="terminal-2405438817-r2" x="1159" y="678.8" textLength="12.2" clip-path="url(#terminal-2405438817-line-27)">
188
+ </text><text class="terminal-2405438817-r3" x="0" y="703.2" textLength="1159" clip-path="url(#terminal-2405438817-line-28)">└─────────────────────────────────────────────────────────────────────────────────────────────┘</text><text class="terminal-2405438817-r2" x="1159" y="703.2" textLength="12.2" clip-path="url(#terminal-2405438817-line-28)">
189
+ </text><text class="terminal-2405438817-r2" x="1159" y="727.6" textLength="12.2" clip-path="url(#terminal-2405438817-line-29)">
190
+ </text><text class="terminal-2405438817-r6" x="0" y="752" textLength="1122.4" clip-path="url(#terminal-2405438817-line-30)">&#160;&#160;[Enter]&#160;Accept&#160;&amp;&#160;Commit&#160;&#160;·&#160;&#160;[E]&#160;Edit&#160;&#160;·&#160;&#160;[R]&#160;Regenerate&#160;&#160;·&#160;&#160;[C]&#160;Switch&#160;format&#160;&#160;·&#160;&#160;[S]&#160;Skip</text><text class="terminal-2405438817-r2" x="1159" y="752" textLength="12.2" clip-path="url(#terminal-2405438817-line-30)">
191
+ </text><text class="terminal-2405438817-r11" x="0" y="776.4" textLength="427" clip-path="url(#terminal-2405438817-line-31)">&#160;✔&#160;&#160;Committed&#160;changes&#160;successfully!</text><text class="terminal-2405438817-r2" x="1159" y="776.4" textLength="12.2" clip-path="url(#terminal-2405438817-line-31)">
192
+ </text><text class="terminal-2405438817-r11" x="0" y="800.8" textLength="378.2" clip-path="url(#terminal-2405438817-line-32)">&#160;✔&#160;&#160;Plan&#160;executed&#160;successfully!</text><text class="terminal-2405438817-r2" x="1159" y="800.8" textLength="12.2" clip-path="url(#terminal-2405438817-line-32)">
193
+ </text>
194
+ </g>
195
+ </g>
196
+ </svg>