refactor(cli): extract interactive menu into reusable module (#3)

Extract duplicate menu rendering logic from `index.ts` into a new `src/menu.ts` module, providing generic `selectOne` and `selectMany` functions. This reduces code duplication, improves maintainability, and adds consistent UI controls display across the commit flow and platform selection.

Reviewed-on: #3
This commit was merged in pull request #3.
This commit is contained in:
2026-06-11 18:12:12 +08:00
parent 6ff541284e
commit 1ea180387c
5 changed files with 364 additions and 376 deletions
+11 -10
View File
@@ -60,10 +60,12 @@ gai --version Show version
$ gai
gai
Choose a workflow
↑/↓ navigate · enter/space select · ctrl+c cancel
↑/↓ navigate, space/enter select
◉ commit Generate AI commit message
● commit Generate AI commit message
○ pr Create a PR with AI-generated title
○ config Configure API settings
```
### Commit Flow
@@ -74,14 +76,13 @@ $ gai commit
Staged files (will be included):
✓ src/git.ts (modified)
Unstaged files:
1. src/ai.ts (modified)
2. src/newfile.ts (new)
Select files to stage:
◉ Select all
○ src/ai.ts (modified)
◉ src/newfile.ts (new)
2 unstaged files available
↑/↓ navigate · space toggle · enter confirm · ctrl+c cancel
□ Select all
□ src/ai.ts modified
■ src/newfile.ts new
Generating commit message...