ace-git-copilot 0.3.7__tar.gz → 0.3.9__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.
- {ace_git_copilot-0.3.7 → ace_git_copilot-0.3.9}/PKG-INFO +7 -62
- {ace_git_copilot-0.3.7 → ace_git_copilot-0.3.9}/README.md +6 -61
- ace_git_copilot-0.3.9/ace/__init__.py +1 -0
- {ace_git_copilot-0.3.7 → ace_git_copilot-0.3.9}/ace/ai/history_analyzer.py +2 -1
- {ace_git_copilot-0.3.7 → ace_git_copilot-0.3.9}/ace/ai/rebase_helper.py +2 -1
- {ace_git_copilot-0.3.7 → ace_git_copilot-0.3.9}/ace/core/git_ops.py +3 -2
- ace_git_copilot-0.3.9/ace/utils/string_utils.py +40 -0
- {ace_git_copilot-0.3.7 → ace_git_copilot-0.3.9}/pyproject.toml +1 -1
- ace_git_copilot-0.3.9/tests/test_string_utils.py +17 -0
- ace_git_copilot-0.3.7/ace/__init__.py +0 -1
- {ace_git_copilot-0.3.7 → ace_git_copilot-0.3.9}/.agents/AGENTS.md +0 -0
- {ace_git_copilot-0.3.7 → ace_git_copilot-0.3.9}/.agents/BRIEFING.md +0 -0
- {ace_git_copilot-0.3.7 → ace_git_copilot-0.3.9}/.agents/ORIGINAL_REQUEST.md +0 -0
- {ace_git_copilot-0.3.7 → ace_git_copilot-0.3.9}/.agents/e2e_testing_track/BRIEFING.md +0 -0
- {ace_git_copilot-0.3.7 → ace_git_copilot-0.3.9}/.agents/e2e_testing_track/ORIGINAL_REQUEST.md +0 -0
- {ace_git_copilot-0.3.7 → ace_git_copilot-0.3.9}/.agents/e2e_testing_track/SCOPE.md +0 -0
- {ace_git_copilot-0.3.7 → ace_git_copilot-0.3.9}/.agents/e2e_testing_track/progress.md +0 -0
- {ace_git_copilot-0.3.7 → ace_git_copilot-0.3.9}/.agents/explorer_init/BRIEFING.md +0 -0
- {ace_git_copilot-0.3.7 → ace_git_copilot-0.3.9}/.agents/explorer_init/ORIGINAL_REQUEST.md +0 -0
- {ace_git_copilot-0.3.7 → ace_git_copilot-0.3.9}/.agents/explorer_init/emojis_list.txt +0 -0
- {ace_git_copilot-0.3.7 → ace_git_copilot-0.3.9}/.agents/explorer_init/find_unused_modules.py +0 -0
- {ace_git_copilot-0.3.7 → ace_git_copilot-0.3.9}/.agents/explorer_init/handoff.md +0 -0
- {ace_git_copilot-0.3.7 → ace_git_copilot-0.3.9}/.agents/explorer_init/measure_lazy_startup.py +0 -0
- {ace_git_copilot-0.3.7 → ace_git_copilot-0.3.9}/.agents/explorer_init/measure_startup.py +0 -0
- {ace_git_copilot-0.3.7 → ace_git_copilot-0.3.9}/.agents/explorer_init/profile_imports.py +0 -0
- {ace_git_copilot-0.3.7 → ace_git_copilot-0.3.9}/.agents/explorer_init/progress.md +0 -0
- {ace_git_copilot-0.3.7 → ace_git_copilot-0.3.9}/.agents/explorer_init/run_importtime.py +0 -0
- {ace_git_copilot-0.3.7 → ace_git_copilot-0.3.9}/.agents/explorer_init/search_banner.py +0 -0
- {ace_git_copilot-0.3.7 → ace_git_copilot-0.3.9}/.agents/explorer_init/search_emojis.py +0 -0
- {ace_git_copilot-0.3.7 → ace_git_copilot-0.3.9}/.agents/explorer_init/search_git_usages.py +0 -0
- {ace_git_copilot-0.3.7 → ace_git_copilot-0.3.9}/.agents/explorer_init/search_usages.py +0 -0
- {ace_git_copilot-0.3.7 → ace_git_copilot-0.3.9}/.agents/explorer_init/test_import_profiler.py +0 -0
- {ace_git_copilot-0.3.7 → ace_git_copilot-0.3.9}/.agents/explorer_init/test_mocked_sys.py +0 -0
- {ace_git_copilot-0.3.7 → ace_git_copilot-0.3.9}/.agents/handoff.md +0 -0
- {ace_git_copilot-0.3.7 → ace_git_copilot-0.3.9}/.agents/implementation_track/BRIEFING.md +0 -0
- {ace_git_copilot-0.3.7 → ace_git_copilot-0.3.9}/.agents/implementation_track/ORIGINAL_REQUEST.md +0 -0
- {ace_git_copilot-0.3.7 → ace_git_copilot-0.3.9}/.agents/implementation_track/explorer_initial_report.md +0 -0
- {ace_git_copilot-0.3.7 → ace_git_copilot-0.3.9}/.agents/implementation_track/progress.md +0 -0
- {ace_git_copilot-0.3.7 → ace_git_copilot-0.3.9}/.agents/orchestrator/.gitkeep +0 -0
- {ace_git_copilot-0.3.7 → ace_git_copilot-0.3.9}/.agents/orchestrator/BRIEFING.md +0 -0
- {ace_git_copilot-0.3.7 → ace_git_copilot-0.3.9}/.agents/orchestrator/ORIGINAL_REQUEST.md +0 -0
- {ace_git_copilot-0.3.7 → ace_git_copilot-0.3.9}/.agents/orchestrator/PROJECT.md +0 -0
- {ace_git_copilot-0.3.7 → ace_git_copilot-0.3.9}/.agents/orchestrator/progress.md +0 -0
- {ace_git_copilot-0.3.7 → ace_git_copilot-0.3.9}/.agents/teamwork_preview_explorer_e2e_explore/BRIEFING.md +0 -0
- {ace_git_copilot-0.3.7 → ace_git_copilot-0.3.9}/.agents/teamwork_preview_explorer_e2e_explore/ORIGINAL_REQUEST.md +0 -0
- {ace_git_copilot-0.3.7 → ace_git_copilot-0.3.9}/.agents/teamwork_preview_explorer_e2e_explore/handoff.md +0 -0
- {ace_git_copilot-0.3.7 → ace_git_copilot-0.3.9}/.agents/teamwork_preview_explorer_e2e_explore/progress.md +0 -0
- {ace_git_copilot-0.3.7 → ace_git_copilot-0.3.9}/.agents/worker_e2e_testing/BRIEFING.md +0 -0
- {ace_git_copilot-0.3.7 → ace_git_copilot-0.3.9}/.agents/worker_e2e_testing/ORIGINAL_REQUEST.md +0 -0
- {ace_git_copilot-0.3.7 → ace_git_copilot-0.3.9}/.agents/worker_e2e_testing/progress.md +0 -0
- {ace_git_copilot-0.3.7 → ace_git_copilot-0.3.9}/.agents/worker_m1_startup/BRIEFING.md +0 -0
- {ace_git_copilot-0.3.7 → ace_git_copilot-0.3.9}/.agents/worker_m1_startup/ORIGINAL_REQUEST.md +0 -0
- {ace_git_copilot-0.3.7 → ace_git_copilot-0.3.9}/.agents/worker_m1_startup/progress.md +0 -0
- {ace_git_copilot-0.3.7 → ace_git_copilot-0.3.9}/.env.example +0 -0
- {ace_git_copilot-0.3.7 → ace_git_copilot-0.3.9}/.github/workflows/tests.yml +0 -0
- {ace_git_copilot-0.3.7 → ace_git_copilot-0.3.9}/.gitignore +0 -0
- {ace_git_copilot-0.3.7 → ace_git_copilot-0.3.9}/CODE_OF_CONDUCT.md +0 -0
- {ace_git_copilot-0.3.7 → ace_git_copilot-0.3.9}/CONTRIBUTING.md +0 -0
- {ace_git_copilot-0.3.7 → ace_git_copilot-0.3.9}/LICENSE +0 -0
- {ace_git_copilot-0.3.7 → ace_git_copilot-0.3.9}/PROJECT.md +0 -0
- {ace_git_copilot-0.3.7 → ace_git_copilot-0.3.9}/SECURITY.md +0 -0
- {ace_git_copilot-0.3.7 → ace_git_copilot-0.3.9}/SUPPORT.md +0 -0
- {ace_git_copilot-0.3.7 → ace_git_copilot-0.3.9}/TEST_INFRA.md +0 -0
- {ace_git_copilot-0.3.7 → ace_git_copilot-0.3.9}/TEST_READY.md +0 -0
- {ace_git_copilot-0.3.7 → ace_git_copilot-0.3.9}/ace/__main__.py +0 -0
- {ace_git_copilot-0.3.7 → ace_git_copilot-0.3.9}/ace/ai/changelog_generator.py +0 -0
- {ace_git_copilot-0.3.7 → ace_git_copilot-0.3.9}/ace/ai/code_reviewer.py +0 -0
- {ace_git_copilot-0.3.7 → ace_git_copilot-0.3.9}/ace/ai/commit_generator.py +0 -0
- {ace_git_copilot-0.3.7 → ace_git_copilot-0.3.9}/ace/ai/conflict_resolver.py +0 -0
- {ace_git_copilot-0.3.7 → ace_git_copilot-0.3.9}/ace/ai/gitignore_generator.py +0 -0
- {ace_git_copilot-0.3.7 → ace_git_copilot-0.3.9}/ace/ai/intent_parser.py +0 -0
- {ace_git_copilot-0.3.7 → ace_git_copilot-0.3.9}/ace/ai/llm_factory.py +0 -0
- {ace_git_copilot-0.3.7 → ace_git_copilot-0.3.9}/ace/ai/pr_drafter.py +0 -0
- {ace_git_copilot-0.3.7 → ace_git_copilot-0.3.9}/ace/ai/prompts/changelog.py +0 -0
- {ace_git_copilot-0.3.7 → ace_git_copilot-0.3.9}/ace/ai/prompts/commit.py +0 -0
- {ace_git_copilot-0.3.7 → ace_git_copilot-0.3.9}/ace/ai/prompts/conflict.py +0 -0
- {ace_git_copilot-0.3.7 → ace_git_copilot-0.3.9}/ace/ai/prompts/doctor.py +0 -0
- {ace_git_copilot-0.3.7 → ace_git_copilot-0.3.9}/ace/ai/prompts/explain.py +0 -0
- {ace_git_copilot-0.3.7 → ace_git_copilot-0.3.9}/ace/ai/prompts/ignore.py +0 -0
- {ace_git_copilot-0.3.7 → ace_git_copilot-0.3.9}/ace/ai/prompts/intent.py +0 -0
- {ace_git_copilot-0.3.7 → ace_git_copilot-0.3.9}/ace/ai/prompts/pr.py +0 -0
- {ace_git_copilot-0.3.7 → ace_git_copilot-0.3.9}/ace/ai/prompts/rebase.py +0 -0
- {ace_git_copilot-0.3.7 → ace_git_copilot-0.3.9}/ace/ai/prompts/review.py +0 -0
- {ace_git_copilot-0.3.7 → ace_git_copilot-0.3.9}/ace/ai/prompts/search.py +0 -0
- {ace_git_copilot-0.3.7 → ace_git_copilot-0.3.9}/ace/ai/prompts/undo.py +0 -0
- {ace_git_copilot-0.3.7 → ace_git_copilot-0.3.9}/ace/cli.py +0 -0
- {ace_git_copilot-0.3.7 → ace_git_copilot-0.3.9}/ace/core/config.py +0 -0
- {ace_git_copilot-0.3.7 → ace_git_copilot-0.3.9}/ace/core/context.py +0 -0
- {ace_git_copilot-0.3.7 → ace_git_copilot-0.3.9}/ace/core/diagnostics.py +0 -0
- {ace_git_copilot-0.3.7 → ace_git_copilot-0.3.9}/ace/core/hooks.py +0 -0
- {ace_git_copilot-0.3.7 → ace_git_copilot-0.3.9}/ace/core/safety.py +0 -0
- {ace_git_copilot-0.3.7 → ace_git_copilot-0.3.9}/ace/ui/banner.py +0 -0
- {ace_git_copilot-0.3.7 → ace_git_copilot-0.3.9}/ace/ui/dashboard.py +0 -0
- {ace_git_copilot-0.3.7 → ace_git_copilot-0.3.9}/ace/ui/display.py +0 -0
- {ace_git_copilot-0.3.7 → ace_git_copilot-0.3.9}/ace/ui/prompts.py +0 -0
- {ace_git_copilot-0.3.7 → ace_git_copilot-0.3.9}/ace/ui/themes.py +0 -0
- {ace_git_copilot-0.3.7 → ace_git_copilot-0.3.9}/ace/utils/conflict_parser.py +0 -0
- {ace_git_copilot-0.3.7 → ace_git_copilot-0.3.9}/ace/utils/diff_parser.py +0 -0
- {ace_git_copilot-0.3.7 → ace_git_copilot-0.3.9}/ace/utils/json_utils.py +0 -0
- {ace_git_copilot-0.3.7 → ace_git_copilot-0.3.9}/tests/conftest.py +0 -0
- {ace_git_copilot-0.3.7 → ace_git_copilot-0.3.9}/tests/e2e/conftest.py +0 -0
- {ace_git_copilot-0.3.7 → ace_git_copilot-0.3.9}/tests/e2e/test_tier1_features.py +0 -0
- {ace_git_copilot-0.3.7 → ace_git_copilot-0.3.9}/tests/e2e/test_tier2_boundaries.py +0 -0
- {ace_git_copilot-0.3.7 → ace_git_copilot-0.3.9}/tests/e2e/test_tier3_combinations.py +0 -0
- {ace_git_copilot-0.3.7 → ace_git_copilot-0.3.9}/tests/e2e/test_tier4_workloads.py +0 -0
- {ace_git_copilot-0.3.7 → ace_git_copilot-0.3.9}/tests/test_changelog_generator.py +0 -0
- {ace_git_copilot-0.3.7 → ace_git_copilot-0.3.9}/tests/test_code_reviewer.py +0 -0
- {ace_git_copilot-0.3.7 → ace_git_copilot-0.3.9}/tests/test_config_atomic_write.py +0 -0
- {ace_git_copilot-0.3.7 → ace_git_copilot-0.3.9}/tests/test_conflict_resolver.py +0 -0
- {ace_git_copilot-0.3.7 → ace_git_copilot-0.3.9}/tests/test_conflict_resolver_backup.py +0 -0
- {ace_git_copilot-0.3.7 → ace_git_copilot-0.3.9}/tests/test_context_gitdir_detection.py +0 -0
- {ace_git_copilot-0.3.7 → ace_git_copilot-0.3.9}/tests/test_diagnostics.py +0 -0
- {ace_git_copilot-0.3.7 → ace_git_copilot-0.3.9}/tests/test_diff_trimmer.py +0 -0
- {ace_git_copilot-0.3.7 → ace_git_copilot-0.3.9}/tests/test_git_ops.py +0 -0
- {ace_git_copilot-0.3.7 → ace_git_copilot-0.3.9}/tests/test_git_ops_execute.py +0 -0
- {ace_git_copilot-0.3.7 → ace_git_copilot-0.3.9}/tests/test_help.py +0 -0
- {ace_git_copilot-0.3.7 → ace_git_copilot-0.3.9}/tests/test_history_analyzer.py +0 -0
- {ace_git_copilot-0.3.7 → ace_git_copilot-0.3.9}/tests/test_hooks.py +0 -0
- {ace_git_copilot-0.3.7 → ace_git_copilot-0.3.9}/tests/test_ignore.py +0 -0
- {ace_git_copilot-0.3.7 → ace_git_copilot-0.3.9}/tests/test_intent_parser.py +0 -0
- {ace_git_copilot-0.3.7 → ace_git_copilot-0.3.9}/tests/test_llm_factory.py +0 -0
- {ace_git_copilot-0.3.7 → ace_git_copilot-0.3.9}/tests/test_llm_factory_ollama.py +0 -0
- {ace_git_copilot-0.3.7 → ace_git_copilot-0.3.9}/tests/test_merge_state.py +0 -0
- {ace_git_copilot-0.3.7 → ace_git_copilot-0.3.9}/tests/test_pr_drafter.py +0 -0
- {ace_git_copilot-0.3.7 → ace_git_copilot-0.3.9}/tests/test_rebase_helper.py +0 -0
- {ace_git_copilot-0.3.7 → ace_git_copilot-0.3.9}/tests/test_safety.py +0 -0
- {ace_git_copilot-0.3.7 → ace_git_copilot-0.3.9}/tests/test_search.py +0 -0
- {ace_git_copilot-0.3.7 → ace_git_copilot-0.3.9}/tests/test_undo.py +0 -0
- {ace_git_copilot-0.3.7 → ace_git_copilot-0.3.9}/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.3.
|
|
3
|
+
Version: 0.3.9
|
|
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
|
|
@@ -143,12 +143,14 @@ Allows using any custom endpoint that supports the OpenAI API schema (e.g. Groq,
|
|
|
143
143
|
## Usage
|
|
144
144
|
|
|
145
145
|
### Natural Language Mode
|
|
146
|
-
|
|
146
|
+
|
|
147
|
+
You can speak to Git in plain English. There is no need to use double quotes — simply write your request directly:
|
|
147
148
|
```bash
|
|
148
|
-
ace
|
|
149
|
-
ace
|
|
150
|
-
ace
|
|
149
|
+
ace stage everything and commit with a message about authentication
|
|
150
|
+
ace undo my last commit but keep the files
|
|
151
|
+
ace switch to a new branch called design-updates
|
|
151
152
|
```
|
|
153
|
+
*(Double quotes are optional, e.g. `ace "stage everything and commit"`).*
|
|
152
154
|
|
|
153
155
|
### Command-Line Toolchain
|
|
154
156
|
Ace has dedicated subcommands for specific tasks. Here is the complete command list:
|
|
@@ -194,60 +196,3 @@ The dashboard features:
|
|
|
194
196
|
## License
|
|
195
197
|
|
|
196
198
|
Distributed under the MIT License. See [LICENSE](LICENSE) for more details.
|
|
197
|
-
|
|
198
|
-
---
|
|
199
|
-
|
|
200
|
-
## Changelog
|
|
201
|
-
|
|
202
|
-
### v0.3.7 — UI Status Icons Modernization (2026-07-14)
|
|
203
|
-
* Replaced clunky double-character ASCII status indicators (`>>`, `**`, `!!`, `EE`) with clean, modern Unicode status icons (`›`, `✔`, `⚠`, `✘`).
|
|
204
|
-
* Updated confirm prompts, severity warnings, and code review listings to use the new icons for a clean, consistent terminal interface.
|
|
205
|
-
|
|
206
|
-
### v0.3.6 — Merge/Rebase Conflict Planning Fix (2026-07-12)
|
|
207
|
-
* Enhanced repository context builder to check for active unmerged files in the index, distinguishing between resolved and unresolved conflict states.
|
|
208
|
-
* Updated AI intent guidelines to prevent the planner from incorrectly suggesting `git merge --abort` when conflicts are already resolved and ready to be finalized.
|
|
209
|
-
|
|
210
|
-
### v0.3.5 — Empty Diff Handling (2026-07-11)
|
|
211
|
-
* Improved warning panel message and title when committing empty files or mode changes to prevent confusing users when files are already staged.
|
|
212
|
-
|
|
213
|
-
### v0.3.4 — Workspace Management (2026-07-11)
|
|
214
|
-
* Added new `workspace` command (alias `ws`) to scan, monitor, and navigate multiple repositories.
|
|
215
|
-
* Shows active branch, staged/unstaged/untracked file counts, and local upstream sync offsets in a Rich Table.
|
|
216
|
-
* Supports interactive actions to open the TUI dashboard, spawn a nested shell, or run copy-paste commands inside any chosen repository.
|
|
217
|
-
|
|
218
|
-
### v0.3.3 — Stability & Resilience (2026-07-04)
|
|
219
|
-
* Implemented streaming progress and download percentages for Ollama model pulls to prevent thread hangs.
|
|
220
|
-
* Added atomic file saves and rollback backups for merge conflict resolutions and config modifications to prevent data corruption.
|
|
221
|
-
* Fixed merge/rebase detection in git worktrees and submodules by resolving the authoritative `git_dir` dynamically.
|
|
222
|
-
* Added `shlex` command splitting to safely parse and execute quoted arguments in Git commands.
|
|
223
|
-
* Created python module entry point (`python -m ace`) for nested execution support.
|
|
224
|
-
|
|
225
|
-
### v0.3.2 — Windows Compatibility & E2E Fixes (2026-07-01)
|
|
226
|
-
* Resolved Windows-specific UTF-8 encoding issues in E2E tests and log parsers.
|
|
227
|
-
* Fixed subprocess natural language command execution paths to execute nested ace commands through Python interpreter contexts.
|
|
228
|
-
* Refactored CLI error panel formatting to match expected exception names.
|
|
229
|
-
|
|
230
|
-
### v0.3.1 — Patch (2026-06-30)
|
|
231
|
-
* Fixed invisible key labels (`[c]`, `[r]`, etc.) in the dashboard and search menus caused by Rich markup tag conflicts.
|
|
232
|
-
* Fixed `[Y/n]` confirmation prompt rendering invisibly.
|
|
233
|
-
|
|
234
|
-
### v0.3.0 — UI Polish (2026-06-30)
|
|
235
|
-
* Rewrote all UI output modules (`display.py`, `prompts.py`, `dashboard.py`, `themes.py`) for a polished, professional look.
|
|
236
|
-
* Removed all unprofessional emojis; replaced with clean ASCII status symbols (`>>`, `**`, `!!`, `EE`).
|
|
237
|
-
* Dashboard panels now use consistent `ROUNDED` borders, colour-coded file lists (`+` staged, `~` unstaged, `?` untracked), and a styled commit history table.
|
|
238
|
-
* Execution plan table uses `SIMPLE_HEAD` style with colour-highlighted `git` and `ace` command prefixes.
|
|
239
|
-
* Commit message panel shows character count badge coloured green/amber/red relative to the 72-char limit.
|
|
240
|
-
* AI code review score rendered as a styled badge based on score range.
|
|
241
|
-
* Added `[tool.ruff]` configuration to exclude `.agents/` scratch folder from lint checks.
|
|
242
|
-
|
|
243
|
-
### v0.2.9 — Metadata & Build Fix (2026-06-30)
|
|
244
|
-
* Fixed broken `pyproject.toml` TOML syntax (invalid inline `urls` table).
|
|
245
|
-
* Added full `authors` and `[project.urls]` metadata visible on PyPI.
|
|
246
|
-
|
|
247
|
-
### v0.2.6 — Startup Optimisation (2026-06-21)
|
|
248
|
-
* Implemented lazy-loading for all heavy LangChain imports — CLI startup under 200 ms.
|
|
249
|
-
* Added `ace switch` command for switching between sibling repositories from the dashboard.
|
|
250
|
-
|
|
251
|
-
### v0.2.3 — Feature Expansion (2026-06-09)
|
|
252
|
-
* Added `ace doctor`, `ace hook`, and `ace squash` commands.
|
|
253
|
-
* Comprehensive E2E test suite added under `tests/e2e/`.
|
|
@@ -110,12 +110,14 @@ Allows using any custom endpoint that supports the OpenAI API schema (e.g. Groq,
|
|
|
110
110
|
## Usage
|
|
111
111
|
|
|
112
112
|
### Natural Language Mode
|
|
113
|
-
|
|
113
|
+
|
|
114
|
+
You can speak to Git in plain English. There is no need to use double quotes — simply write your request directly:
|
|
114
115
|
```bash
|
|
115
|
-
ace
|
|
116
|
-
ace
|
|
117
|
-
ace
|
|
116
|
+
ace stage everything and commit with a message about authentication
|
|
117
|
+
ace undo my last commit but keep the files
|
|
118
|
+
ace switch to a new branch called design-updates
|
|
118
119
|
```
|
|
120
|
+
*(Double quotes are optional, e.g. `ace "stage everything and commit"`).*
|
|
119
121
|
|
|
120
122
|
### Command-Line Toolchain
|
|
121
123
|
Ace has dedicated subcommands for specific tasks. Here is the complete command list:
|
|
@@ -161,60 +163,3 @@ The dashboard features:
|
|
|
161
163
|
## License
|
|
162
164
|
|
|
163
165
|
Distributed under the MIT License. See [LICENSE](LICENSE) for more details.
|
|
164
|
-
|
|
165
|
-
---
|
|
166
|
-
|
|
167
|
-
## Changelog
|
|
168
|
-
|
|
169
|
-
### v0.3.7 — UI Status Icons Modernization (2026-07-14)
|
|
170
|
-
* Replaced clunky double-character ASCII status indicators (`>>`, `**`, `!!`, `EE`) with clean, modern Unicode status icons (`›`, `✔`, `⚠`, `✘`).
|
|
171
|
-
* Updated confirm prompts, severity warnings, and code review listings to use the new icons for a clean, consistent terminal interface.
|
|
172
|
-
|
|
173
|
-
### v0.3.6 — Merge/Rebase Conflict Planning Fix (2026-07-12)
|
|
174
|
-
* Enhanced repository context builder to check for active unmerged files in the index, distinguishing between resolved and unresolved conflict states.
|
|
175
|
-
* Updated AI intent guidelines to prevent the planner from incorrectly suggesting `git merge --abort` when conflicts are already resolved and ready to be finalized.
|
|
176
|
-
|
|
177
|
-
### v0.3.5 — Empty Diff Handling (2026-07-11)
|
|
178
|
-
* Improved warning panel message and title when committing empty files or mode changes to prevent confusing users when files are already staged.
|
|
179
|
-
|
|
180
|
-
### v0.3.4 — Workspace Management (2026-07-11)
|
|
181
|
-
* Added new `workspace` command (alias `ws`) to scan, monitor, and navigate multiple repositories.
|
|
182
|
-
* Shows active branch, staged/unstaged/untracked file counts, and local upstream sync offsets in a Rich Table.
|
|
183
|
-
* Supports interactive actions to open the TUI dashboard, spawn a nested shell, or run copy-paste commands inside any chosen repository.
|
|
184
|
-
|
|
185
|
-
### v0.3.3 — Stability & Resilience (2026-07-04)
|
|
186
|
-
* Implemented streaming progress and download percentages for Ollama model pulls to prevent thread hangs.
|
|
187
|
-
* Added atomic file saves and rollback backups for merge conflict resolutions and config modifications to prevent data corruption.
|
|
188
|
-
* Fixed merge/rebase detection in git worktrees and submodules by resolving the authoritative `git_dir` dynamically.
|
|
189
|
-
* Added `shlex` command splitting to safely parse and execute quoted arguments in Git commands.
|
|
190
|
-
* Created python module entry point (`python -m ace`) for nested execution support.
|
|
191
|
-
|
|
192
|
-
### v0.3.2 — Windows Compatibility & E2E Fixes (2026-07-01)
|
|
193
|
-
* Resolved Windows-specific UTF-8 encoding issues in E2E tests and log parsers.
|
|
194
|
-
* Fixed subprocess natural language command execution paths to execute nested ace commands through Python interpreter contexts.
|
|
195
|
-
* Refactored CLI error panel formatting to match expected exception names.
|
|
196
|
-
|
|
197
|
-
### v0.3.1 — Patch (2026-06-30)
|
|
198
|
-
* Fixed invisible key labels (`[c]`, `[r]`, etc.) in the dashboard and search menus caused by Rich markup tag conflicts.
|
|
199
|
-
* Fixed `[Y/n]` confirmation prompt rendering invisibly.
|
|
200
|
-
|
|
201
|
-
### v0.3.0 — UI Polish (2026-06-30)
|
|
202
|
-
* Rewrote all UI output modules (`display.py`, `prompts.py`, `dashboard.py`, `themes.py`) for a polished, professional look.
|
|
203
|
-
* Removed all unprofessional emojis; replaced with clean ASCII status symbols (`>>`, `**`, `!!`, `EE`).
|
|
204
|
-
* Dashboard panels now use consistent `ROUNDED` borders, colour-coded file lists (`+` staged, `~` unstaged, `?` untracked), and a styled commit history table.
|
|
205
|
-
* Execution plan table uses `SIMPLE_HEAD` style with colour-highlighted `git` and `ace` command prefixes.
|
|
206
|
-
* Commit message panel shows character count badge coloured green/amber/red relative to the 72-char limit.
|
|
207
|
-
* AI code review score rendered as a styled badge based on score range.
|
|
208
|
-
* Added `[tool.ruff]` configuration to exclude `.agents/` scratch folder from lint checks.
|
|
209
|
-
|
|
210
|
-
### v0.2.9 — Metadata & Build Fix (2026-06-30)
|
|
211
|
-
* Fixed broken `pyproject.toml` TOML syntax (invalid inline `urls` table).
|
|
212
|
-
* Added full `authors` and `[project.urls]` metadata visible on PyPI.
|
|
213
|
-
|
|
214
|
-
### v0.2.6 — Startup Optimisation (2026-06-21)
|
|
215
|
-
* Implemented lazy-loading for all heavy LangChain imports — CLI startup under 200 ms.
|
|
216
|
-
* Added `ace switch` command for switching between sibling repositories from the dashboard.
|
|
217
|
-
|
|
218
|
-
### v0.2.3 — Feature Expansion (2026-06-09)
|
|
219
|
-
* Added `ace doctor`, `ace hook`, and `ace squash` commands.
|
|
220
|
-
* Comprehensive E2E test suite added under `tests/e2e/`.
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
__version__ = "0.3.9"
|
|
@@ -38,8 +38,9 @@ class HistoryAnalyzer:
|
|
|
38
38
|
HumanMessage(content=user_prompt)
|
|
39
39
|
]
|
|
40
40
|
|
|
41
|
+
from ace.utils.string_utils import strip_emojis
|
|
41
42
|
response = llm.invoke(messages)
|
|
42
|
-
return response.content.strip()
|
|
43
|
+
return strip_emojis(response.content.strip())
|
|
43
44
|
|
|
44
45
|
def get_repo_stats(self) -> Dict[str, Any]:
|
|
45
46
|
"""
|
|
@@ -20,6 +20,7 @@ class RebaseHelper:
|
|
|
20
20
|
except Exception:
|
|
21
21
|
return []
|
|
22
22
|
|
|
23
|
+
from ace.utils.string_utils import strip_emojis
|
|
23
24
|
commits = []
|
|
24
25
|
for line in log_data.splitlines():
|
|
25
26
|
if "|" in line:
|
|
@@ -28,7 +29,7 @@ class RebaseHelper:
|
|
|
28
29
|
commits.append({
|
|
29
30
|
"hexsha": parts[0],
|
|
30
31
|
"author": parts[1],
|
|
31
|
-
"summary": parts[2].strip()
|
|
32
|
+
"summary": strip_emojis(parts[2].strip())
|
|
32
33
|
})
|
|
33
34
|
return commits
|
|
34
35
|
|
|
@@ -101,12 +101,13 @@ class GitOps:
|
|
|
101
101
|
args.append(path)
|
|
102
102
|
|
|
103
103
|
try:
|
|
104
|
+
from ace.utils.string_utils import strip_emojis
|
|
104
105
|
commits = self.repo.iter_commits(*args, **kwargs)
|
|
105
106
|
return [
|
|
106
107
|
{
|
|
107
108
|
"hexsha": commit.hexsha,
|
|
108
|
-
"summary": commit.summary,
|
|
109
|
-
"message": commit.message,
|
|
109
|
+
"summary": strip_emojis(commit.summary),
|
|
110
|
+
"message": strip_emojis(commit.message),
|
|
110
111
|
"author": commit.author.name,
|
|
111
112
|
"date": commit.committed_datetime.isoformat(),
|
|
112
113
|
}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import re
|
|
2
|
+
|
|
3
|
+
def strip_emojis(text: str) -> str:
|
|
4
|
+
"""
|
|
5
|
+
Strip Unicode emojis from text to keep the terminal UI clean.
|
|
6
|
+
"""
|
|
7
|
+
if not text:
|
|
8
|
+
return text
|
|
9
|
+
|
|
10
|
+
# Unicode emoji ranges:
|
|
11
|
+
# - \U0001f600-\U0001f64f (emoticons)
|
|
12
|
+
# - \U0001f300-\U0001f5ff (symbols & pictographs)
|
|
13
|
+
# - \U0001f680-\U0001f6ff (transport & map symbols)
|
|
14
|
+
# - \U0001f1e0-\U0001f1ff (flags)
|
|
15
|
+
# - \U00002700-\U000027bf (dingbats)
|
|
16
|
+
# - \U00002600-\U000026ff (miscellaneous symbols)
|
|
17
|
+
# - \U0001f900-\U0001f9ff (supplemental symbols)
|
|
18
|
+
# - \U0001fa00-\U0001faff (symbols and pictographs extended)
|
|
19
|
+
emoji_pattern = re.compile(
|
|
20
|
+
"["
|
|
21
|
+
"\U0001f600-\U0001f64f"
|
|
22
|
+
"\U0001f300-\U0001f5ff"
|
|
23
|
+
"\U0001f680-\U0001f6ff"
|
|
24
|
+
"\U0001f1e0-\U0001f1ff"
|
|
25
|
+
"\U00002700-\U000027bf"
|
|
26
|
+
"\U00002600-\U000026ff"
|
|
27
|
+
"\U0001f900-\U0001f9ff"
|
|
28
|
+
"\U0001fa00-\U0001faff"
|
|
29
|
+
"]+",
|
|
30
|
+
re.UNICODE
|
|
31
|
+
)
|
|
32
|
+
|
|
33
|
+
cleaned = emoji_pattern.sub("", text)
|
|
34
|
+
# Replace multiple spaces/newlines with a single space (while preserving newlines if multi-line)
|
|
35
|
+
# To be safe for markdown summaries, we can just strip emojis and keep other formatting intact.
|
|
36
|
+
# Let's do a simple strip of double spaces that result from removing the emoji.
|
|
37
|
+
cleaned = re.sub(r' +', ' ', cleaned)
|
|
38
|
+
# Also clean up trailing/leading spaces on lines
|
|
39
|
+
lines = [line.strip() for line in cleaned.splitlines()]
|
|
40
|
+
return "\n".join(lines).strip()
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
from ace.utils.string_utils import strip_emojis
|
|
2
|
+
|
|
3
|
+
def test_strip_emojis():
|
|
4
|
+
# Test cases with different kinds of emojis and text
|
|
5
|
+
assert strip_emojis("🎨 style(ui): update hover effects") == "style(ui): update hover effects"
|
|
6
|
+
assert strip_emojis("🚀 feat(app): implement loader") == "feat(app): implement loader"
|
|
7
|
+
assert strip_emojis("🤖 feat: implement robot") == "feat: implement robot"
|
|
8
|
+
assert strip_emojis("📝 docs: update readme") == "docs: update readme"
|
|
9
|
+
assert strip_emojis("Normal message without emoji") == "Normal message without emoji"
|
|
10
|
+
assert strip_emojis("Multiple emojis 🎨 🚀 test") == "Multiple emojis test"
|
|
11
|
+
assert strip_emojis("") == ""
|
|
12
|
+
assert strip_emojis(None) is None
|
|
13
|
+
|
|
14
|
+
# Test multi-line text
|
|
15
|
+
multi_line = "🎨 First line\n🚀 Second line"
|
|
16
|
+
expected = "First line\nSecond line"
|
|
17
|
+
assert strip_emojis(multi_line) == expected
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
__version__ = "0.3.7"
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{ace_git_copilot-0.3.7 → ace_git_copilot-0.3.9}/.agents/e2e_testing_track/ORIGINAL_REQUEST.md
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{ace_git_copilot-0.3.7 → ace_git_copilot-0.3.9}/.agents/explorer_init/find_unused_modules.py
RENAMED
|
File without changes
|
|
File without changes
|
{ace_git_copilot-0.3.7 → ace_git_copilot-0.3.9}/.agents/explorer_init/measure_lazy_startup.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{ace_git_copilot-0.3.7 → ace_git_copilot-0.3.9}/.agents/explorer_init/test_import_profiler.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{ace_git_copilot-0.3.7 → ace_git_copilot-0.3.9}/.agents/implementation_track/ORIGINAL_REQUEST.md
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{ace_git_copilot-0.3.7 → ace_git_copilot-0.3.9}/.agents/worker_e2e_testing/ORIGINAL_REQUEST.md
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{ace_git_copilot-0.3.7 → ace_git_copilot-0.3.9}/.agents/worker_m1_startup/ORIGINAL_REQUEST.md
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|