gitforest 0.1.0 → 1.1.0
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.
- package/LICENSE +21 -0
- package/package.json +24 -4
- package/src/components/onboarding/DirectoriesStep.tsx +19 -19
- package/src/github/auth.ts +3 -3
- package/src/utils/debug.ts +4 -4
- package/.bunignore +0 -7
- package/.github/workflows/ci.yml +0 -73
- package/CLAUDE.md +0 -111
- package/CONTRIBUTING.md +0 -145
- package/bun.lock +0 -267
- package/bunfig.toml +0 -15
- package/cli +0 -0
- package/docs/ai/IMPROVEMENT_PLAN.md +0 -341
- package/docs/ai/VERIFICATION_REPORT.md +0 -87
- package/docs/ai/architecture.md +0 -169
- package/docs/ai/checks/check-2025-12-02-tests.md +0 -40
- package/docs/ai/checks/check-2025-12-02.md +0 -55
- package/docs/ai/checks/test-verification-report.md +0 -85
- package/docs/ai/implementation-guide.md +0 -776
- package/docs/ai/research/gitty-codebase-analysis.md +0 -221
- package/docs/ai/tickets/GENERAL-sitrep.md +0 -30
- package/docs/ai/tickets/TASK-database-tests-sitrep.md +0 -25
- package/docs/ai/tickets/TASK-deprecated-functions-sitrep.md +0 -28
- package/docs/ai/tickets/TASK-detail-modal-sitrep.md +0 -28
- package/docs/ai/tickets/TASK-filter-overlay-sitrep.md +0 -24
- package/docs/ai/tickets/TASK-github-service-sitrep.md +0 -32
- package/docs/ai/tickets/TASK-github-token-sitrep.md +0 -51
- package/docs/ai/tickets/TASK-hascommits-sitrep.md +0 -35
- package/docs/ai/tickets/TASK-keybindings-sitrep.md +0 -26
- package/docs/ai/tickets/TASK-layout-sitrep.md +0 -25
- package/docs/ai/tickets/TASK-markdown-sitrep.md +0 -28
- package/docs/ai/tickets/TASK-project-item-sitrep.md +0 -79
- package/docs/ai/tickets/TASK-sitrep.md +0 -28
- package/docs/ai/tickets/TASK-state-sitrep.md +0 -26
- package/docs/ai/tickets/TASK-types-sitrep.md +0 -25
- package/docs/ai/tickets/TASK-unified-item-fix-sitrep.md +0 -26
- package/docs/ai/tickets/TKT-001-sitrep.md +0 -24
- package/docs/ai/tickets/TKT-002-sitrep.md +0 -25
- package/docs/ai/tickets/TKT-003-git-service-refactoring-complete.md +0 -46
- package/docs/ai/tickets/TKT-003-git-service-refactoring-plan.md +0 -135
- package/docs/ai/tickets/TKT-003-sitrep.md +0 -26
- package/docs/ai/tickets/TKT-004-sitrep.md +0 -27
- package/docs/ai/tickets/TKT-005-sitrep.md +0 -25
- package/docs/ai/tickets/TKT-006-sitrep.md +0 -26
- package/docs/ai/tickets/TKT-007-sitrep.md +0 -30
- package/docs/ai/tickets/TKT-008-sitrep.md +0 -32
- package/docs/ai/tickets/TKT-009-sitrep.md +0 -27
- package/docs/ai/tickets/TKT-010-sitrep.md +0 -27
- package/docs/ai/tickets/TKT-011-sitrep.md +0 -26
- package/docs/ai/tickets/TKT-012-sitrep.md +0 -25
- package/docs/ai/tickets/sitreps/TASK-actions-sitrep.md +0 -28
- package/docs/ai/tickets/sitreps/TASK-actions-test-sitrep.md +0 -25
- package/docs/ai/tickets/sitreps/TASK-app-integration-sitrep.md +0 -25
- package/docs/ai/tickets/sitreps/TASK-background-fetch-sitrep.md +0 -24
- package/docs/ai/tickets/sitreps/TASK-background-fetch-test-sitrep.md +0 -29
- package/docs/ai/tickets/sitreps/TASK-batch-tests-sitrep.md +0 -29
- package/docs/ai/tickets/sitreps/TASK-bun-test-sitrep.md +0 -26
- package/docs/ai/tickets/sitreps/TASK-cache-tests-sitrep.md +0 -30
- package/docs/ai/tickets/sitreps/TASK-cli-tests-sitrep.md +0 -28
- package/docs/ai/tickets/sitreps/TASK-clone-error-handling-sitrep.md +0 -26
- package/docs/ai/tickets/sitreps/TASK-commands-tests-sitrep.md +0 -25
- package/docs/ai/tickets/sitreps/TASK-component-tests-1-sitrep.md +0 -30
- package/docs/ai/tickets/sitreps/TASK-configloader-tests-sitrep.md +0 -25
- package/docs/ai/tickets/sitreps/TASK-confirm-dialog-test-sitrep.md +0 -29
- package/docs/ai/tickets/sitreps/TASK-coverage-sitrep.md +0 -95
- package/docs/ai/tickets/sitreps/TASK-database-tests-summary.md +0 -61
- package/docs/ai/tickets/sitreps/TASK-error-boundary-sitrep.md +0 -30
- package/docs/ai/tickets/sitreps/TASK-error-tests-sitrep.md +0 -27
- package/docs/ai/tickets/sitreps/TASK-errors-tests-sitrep.md +0 -25
- package/docs/ai/tickets/sitreps/TASK-extract-reducer-sitrep.md +0 -27
- package/docs/ai/tickets/sitreps/TASK-filter-overlay-test-sitrep.md +0 -25
- package/docs/ai/tickets/sitreps/TASK-final-verification-sitrep.md +0 -28
- package/docs/ai/tickets/sitreps/TASK-fix-all-tests-sitrep.md +0 -25
- package/docs/ai/tickets/sitreps/TASK-fix-hooks-sitrep.md +0 -26
- package/docs/ai/tickets/sitreps/TASK-fix-remaining-tests-sitrep.md +0 -25
- package/docs/ai/tickets/sitreps/TASK-fix-test-failures-sitrep.md +0 -26
- package/docs/ai/tickets/sitreps/TASK-fix-tests-sitrep.md +0 -24
- package/docs/ai/tickets/sitreps/TASK-formatters-tests-sitrep.md +0 -25
- package/docs/ai/tickets/sitreps/TASK-git-timeouts-sitrep.md +0 -29
- package/docs/ai/tickets/sitreps/TASK-github-cache-test-sitrep.md +0 -25
- package/docs/ai/tickets/sitreps/TASK-githubcli-tests-sitrep.md +0 -24
- package/docs/ai/tickets/sitreps/TASK-gitstatus-tests-sitrep.md +0 -24
- package/docs/ai/tickets/sitreps/TASK-hooks-isolation-sitrep.md +0 -27
- package/docs/ai/tickets/sitreps/TASK-keybindings-tests-sitrep.md +0 -25
- package/docs/ai/tickets/sitreps/TASK-layout-tests-sitrep.md +0 -25
- package/docs/ai/tickets/sitreps/TASK-mock-factories-sitrep.md +0 -27
- package/docs/ai/tickets/sitreps/TASK-modal-tests-sitrep.md +0 -32
- package/docs/ai/tickets/sitreps/TASK-processbatch-fix-sitrep.md +0 -27
- package/docs/ai/tickets/sitreps/TASK-projectlist-tests-sitrep.md +0 -30
- package/docs/ai/tickets/sitreps/TASK-projectutils-tests-sitrep.md +0 -25
- package/docs/ai/tickets/sitreps/TASK-scanner-tests-sitrep.md +0 -29
- package/docs/ai/tickets/sitreps/TASK-select-all-sitrep.md +0 -25
- package/docs/ai/tickets/sitreps/TASK-shell-error-handling-sitrep.md +0 -27
- package/docs/ai/tickets/sitreps/TASK-store-tests-sitrep.md +0 -25
- package/docs/ai/tickets/sitreps/TASK-test-fixes-sitrep.md +0 -26
- package/docs/ai/tickets/sitreps/TASK-test-summary-sitrep.md +0 -25
- package/docs/ai/tickets/sitreps/TASK-test-verification-sitrep.md +0 -27
- package/docs/ai/tickets/sitreps/TASK-testsuite-sitrep.md +0 -75
- package/docs/ai/tickets/sitreps/TASK-unified-reducer-tests-sitrep.md +0 -29
- package/docs/ai/tickets/sitreps/TASK-unified-repos-test-sitrep.md +0 -29
- package/docs/ai/tickets/sitreps/TASK-unified-tests-sitrep.md +0 -25
- package/docs/ai/tickets/sitreps/TASK-useprojects-tests-sitrep.md +0 -25
- package/docs/ai/tickets/sitreps/TASK-utility-tests-sitrep.md +0 -32
- package/docs/ai/tickets/sitreps/TKT-003-git-service-refactoring-sitrep.md +0 -64
- package/docs/ai/tkt-001-fix-database-error.md +0 -217
- package/docs/ai/ui-enhancement-plan.md +0 -562
- package/test/integration/app.isolated.tsx +0 -240
- package/test/integration/cli-commands.test.ts +0 -287
- package/test/integration/cli-validation.test.ts +0 -264
- package/test/integration/git-operations.test.ts +0 -218
- package/test/integration/scanner.test.ts +0 -228
- package/test/preload.ts +0 -18
- package/test/unit/cli/commands.test.ts +0 -13
- package/test/unit/cli/formatters.test.ts +0 -1116
- package/test/unit/cli/github-commands.test.ts +0 -12
- package/test/unit/components/CloneDialog.test.tsx +0 -240
- package/test/unit/components/ColumnHeader.test.tsx +0 -128
- package/test/unit/components/CommandPalette.test.tsx +0 -355
- package/test/unit/components/ConfirmDialog.test.tsx +0 -111
- package/test/unit/components/ErrorBoundary.test.tsx +0 -139
- package/test/unit/components/FilterBar.test.tsx +0 -43
- package/test/unit/components/FilterOptionsOverlay.test.tsx +0 -197
- package/test/unit/components/HelpOverlay.test.tsx +0 -90
- package/test/unit/components/Layout.test.tsx +0 -328
- package/test/unit/components/MarkdownRenderer.test.tsx +0 -45
- package/test/unit/components/ProgressBar.test.tsx +0 -138
- package/test/unit/components/ProjectItem.test.tsx +0 -182
- package/test/unit/components/ProjectList.test.tsx +0 -311
- package/test/unit/components/RepoDetailModal.test.tsx +0 -445
- package/test/unit/components/StatusBar.test.tsx +0 -112
- package/test/unit/components/UnifiedProjectItem.test.tsx +0 -618
- package/test/unit/components/ViewModeIndicator.test.tsx +0 -137
- package/test/unit/components/test-utils.tsx +0 -63
- package/test/unit/config/loader.test.ts +0 -692
- package/test/unit/db/database.test.ts +0 -978
- package/test/unit/db/index.test.ts +0 -314
- package/test/unit/fixtures/setup.ts +0 -186
- package/test/unit/git/commands-untested.test.ts +0 -205
- package/test/unit/git/commands.test.ts +0 -269
- package/test/unit/git/operations.test.ts +0 -322
- package/test/unit/git/status.test.ts +0 -219
- package/test/unit/github/auth.test.ts +0 -317
- package/test/unit/github/cache.test.ts +0 -1028
- package/test/unit/github/cli.test.ts +0 -135
- package/test/unit/github/unified.test.ts +0 -1201
- package/test/unit/graceful-shutdown.test.ts +0 -83
- package/test/unit/hooks/useBackgroundFetch.test.tsx +0 -239
- package/test/unit/hooks/useConfirmDialogActions.test.tsx +0 -81
- package/test/unit/hooks/useKeyBindings.isolated.ts +0 -715
- package/test/unit/hooks/useProjects.test.tsx +0 -186
- package/test/unit/hooks/useUnifiedRepos-simple.test.tsx +0 -115
- package/test/unit/hooks/useUnifiedRepos.test.tsx +0 -177
- package/test/unit/mocks/config.ts +0 -109
- package/test/unit/mocks/git-service.ts +0 -274
- package/test/unit/mocks/github-service.ts +0 -250
- package/test/unit/mocks/index.ts +0 -72
- package/test/unit/mocks/project.ts +0 -148
- package/test/unit/mocks/state-mocks.ts +0 -187
- package/test/unit/mocks/unified.ts +0 -169
- package/test/unit/operations/batch.test.ts +0 -216
- package/test/unit/operations/commands.test.ts +0 -550
- package/test/unit/scanner/errors.test.ts +0 -297
- package/test/unit/scanner/index.test.ts +0 -1011
- package/test/unit/scanner/markers.test.ts +0 -150
- package/test/unit/scanner/submodules.test.ts +0 -99
- package/test/unit/services/git-errors.test.ts +0 -190
- package/test/unit/services/git.test.ts +0 -442
- package/test/unit/services/github-errors.test.ts +0 -293
- package/test/unit/services/github.test.ts +0 -200
- package/test/unit/state/actions.test.ts +0 -217
- package/test/unit/state/reducer.test.ts +0 -745
- package/test/unit/state/store.test.tsx +0 -711
- package/test/unit/types/commands.test.ts +0 -220
- package/test/unit/types/schema.test.ts +0 -179
- package/test/unit/utils/array.test.ts +0 -73
- package/test/unit/utils/debug.test.ts +0 -23
- package/test/unit/utils/errors.test.ts +0 -295
- package/test/unit/utils/markdown.test.ts +0 -163
- package/test/unit/utils/project-utils.test.ts +0 -756
- package/test/unit/utils/rate-limiter.test.ts +0 -256
- package/test/unit/utils/retry.test.ts +0 -165
- package/test/unit/utils/strip-ansi.ts +0 -13
- package/test/unit/utils/timeout.test.ts +0 -93
- package/tsconfig.json +0 -29
|
@@ -1,562 +0,0 @@
|
|
|
1
|
-
# Gitforest TUI Enhancement Plan
|
|
2
|
-
|
|
3
|
-
## Overview
|
|
4
|
-
|
|
5
|
-
This document outlines a comprehensive UI overhaul for Gitforest's TUI interface, transforming it from a basic list view into a feature-rich repository management interface with rich status indicators, detailed repo views, and comprehensive filtering.
|
|
6
|
-
|
|
7
|
-
---
|
|
8
|
-
|
|
9
|
-
## 1. Enhanced Repository List Item (Rich Status Display)
|
|
10
|
-
|
|
11
|
-
**Current**: Basic name, source icon, branch, sync badges, last activity
|
|
12
|
-
|
|
13
|
-
**Proposed**: Multi-column layout with visual indicators
|
|
14
|
-
|
|
15
|
-
```
|
|
16
|
-
┌─ Status Indicators ────────────────────────────────────────────────────────────────────────┐
|
|
17
|
-
│ [>] [x] ☁ ● autoclaude ⎇ main 🔒 TS ↑2 ↓0 ★12 🍴3 📅 1w ago 45.2 KB │
|
|
18
|
-
│ [ ] 🔗 ✓ gitforest ⎇ feat 🌐 TS ✓sync ★0 🍴0 📅 today 12.1 KB │
|
|
19
|
-
│ [ ] 💻 ● local-only ⎇ main — RS no-rem — — 📅 3d ago 8.4 KB │
|
|
20
|
-
│ [ ] ☁ bander — — 🔒 JS — ★5 🍴1 📅 5d ago 2.1 MB │
|
|
21
|
-
└────────────────────────────────────────────────────────────────────────────────────────────┘
|
|
22
|
-
```
|
|
23
|
-
|
|
24
|
-
### Legend
|
|
25
|
-
|
|
26
|
-
| Symbol | Meaning |
|
|
27
|
-
|--------|---------|
|
|
28
|
-
| **Source** | |
|
|
29
|
-
| ☁ | GitHub-only (not cloned locally) |
|
|
30
|
-
| 💻 | Local-only (not on GitHub) |
|
|
31
|
-
| 🔗 | Both (synced local + GitHub) |
|
|
32
|
-
| **Status** | |
|
|
33
|
-
| ● | Dirty (uncommitted changes) |
|
|
34
|
-
| ✓ | Clean |
|
|
35
|
-
| ? | Unknown |
|
|
36
|
-
| **Privacy** | |
|
|
37
|
-
| 🔒 | Private repository |
|
|
38
|
-
| 🌐 | Public repository |
|
|
39
|
-
| **Language** | 2-char abbreviation (TS, JS, RS, PY, GO, etc.) |
|
|
40
|
-
| **Sync** | |
|
|
41
|
-
| ↑N | N unpushed commits |
|
|
42
|
-
| ↓N | N unpulled commits |
|
|
43
|
-
| ✓sync | Fully synchronized |
|
|
44
|
-
| no-rem | No remote configured |
|
|
45
|
-
| **Stats** | |
|
|
46
|
-
| ★ | GitHub stars |
|
|
47
|
-
| 🍴 | GitHub forks |
|
|
48
|
-
| **Size** | Repository size (KB/MB/GB) |
|
|
49
|
-
|
|
50
|
-
---
|
|
51
|
-
|
|
52
|
-
## 2. New Data Fields from GitHub API
|
|
53
|
-
|
|
54
|
-
Extend `GitHubRepoInfo` interface with additional fields:
|
|
55
|
-
|
|
56
|
-
```typescript
|
|
57
|
-
interface GitHubRepoInfo {
|
|
58
|
-
// Existing fields...
|
|
59
|
-
name: string;
|
|
60
|
-
fullName: string;
|
|
61
|
-
owner: string;
|
|
62
|
-
description: string | null;
|
|
63
|
-
htmlUrl: string;
|
|
64
|
-
sshUrl: string;
|
|
65
|
-
cloneUrl: string;
|
|
66
|
-
isPrivate: boolean;
|
|
67
|
-
isArchived: boolean;
|
|
68
|
-
isFork: boolean;
|
|
69
|
-
pushedAt: Date | null;
|
|
70
|
-
updatedAt: Date | null;
|
|
71
|
-
defaultBranch: string;
|
|
72
|
-
language: string | null;
|
|
73
|
-
size: number;
|
|
74
|
-
|
|
75
|
-
// NEW fields:
|
|
76
|
-
stargazersCount: number;
|
|
77
|
-
forksCount: number;
|
|
78
|
-
openIssuesCount: number;
|
|
79
|
-
watchersCount: number;
|
|
80
|
-
topics: string[];
|
|
81
|
-
license: string | null;
|
|
82
|
-
hasIssues: boolean;
|
|
83
|
-
hasWiki: boolean;
|
|
84
|
-
hasDiscussions: boolean;
|
|
85
|
-
visibility: "public" | "private" | "internal";
|
|
86
|
-
}
|
|
87
|
-
```
|
|
88
|
-
|
|
89
|
-
---
|
|
90
|
-
|
|
91
|
-
## 3. Enhanced Filter Bar with Global Options
|
|
92
|
-
|
|
93
|
-
Press `?` to show filter options popup:
|
|
94
|
-
|
|
95
|
-
```
|
|
96
|
-
┌─ Filter Options ──────────────────────────────────────────────┐
|
|
97
|
-
│ Quick Filters: │
|
|
98
|
-
│ 0 All 1 Dirty 2 Unpushed 3 No-remote │
|
|
99
|
-
│ 4 GitHub-only 5 Local-only 6 Private 7 Public │
|
|
100
|
-
│ 8 Archived 9 Forks │
|
|
101
|
-
│ │
|
|
102
|
-
│ Language Filter: (type to filter by language) │
|
|
103
|
-
│ l:typescript l:javascript l:rust l:python l:go │
|
|
104
|
-
│ │
|
|
105
|
-
│ Sort: s to cycle (name → status → activity → stars → size) │
|
|
106
|
-
│ Search: / to search by name, description, or path │
|
|
107
|
-
│ │
|
|
108
|
-
│ Press any key to close │
|
|
109
|
-
└───────────────────────────────────────────────────────────────┘
|
|
110
|
-
```
|
|
111
|
-
|
|
112
|
-
### New Quick Filters
|
|
113
|
-
|
|
114
|
-
| Key | Filter | Description |
|
|
115
|
-
|-----|--------|-------------|
|
|
116
|
-
| 0 | All | Show all repositories |
|
|
117
|
-
| 1 | Dirty | Repos with uncommitted changes |
|
|
118
|
-
| 2 | Unpushed | Repos with unpushed commits |
|
|
119
|
-
| 3 | No-remote | Local repos without remote |
|
|
120
|
-
| 4 | GitHub-only | Repos on GitHub but not cloned |
|
|
121
|
-
| 5 | Local-only | Local repos (cloned or local-only) |
|
|
122
|
-
| 6 | Private | Private repositories |
|
|
123
|
-
| 7 | Public | Public repositories |
|
|
124
|
-
| 8 | Archived | Archived repositories |
|
|
125
|
-
| 9 | Forks | Forked repositories |
|
|
126
|
-
|
|
127
|
-
### Language Filter
|
|
128
|
-
|
|
129
|
-
Type `l:` followed by language name to filter:
|
|
130
|
-
- `l:typescript` or `l:ts`
|
|
131
|
-
- `l:javascript` or `l:js`
|
|
132
|
-
- `l:rust` or `l:rs`
|
|
133
|
-
- `l:python` or `l:py`
|
|
134
|
-
- `l:go`
|
|
135
|
-
|
|
136
|
-
---
|
|
137
|
-
|
|
138
|
-
## 4. Column Headers (Sortable)
|
|
139
|
-
|
|
140
|
-
```
|
|
141
|
-
┌─ Column Headers ───────────────────────────────────────────────────────────────────────────┐
|
|
142
|
-
│ Sel Src Status Name Branch Vis Lang Sync Stars Fork Updated Size│
|
|
143
|
-
│ ─── ─── ────── ────────────────── ─────── ─── ───── ──────── ────── ───── ──────── ────│
|
|
144
|
-
│ [▼ sort] │
|
|
145
|
-
└────────────────────────────────────────────────────────────────────────────────────────────┘
|
|
146
|
-
```
|
|
147
|
-
|
|
148
|
-
Press `s` to cycle through sort fields:
|
|
149
|
-
1. Status (default) - prioritizes repos needing attention
|
|
150
|
-
2. Name - alphabetical
|
|
151
|
-
3. Last Activity - most recently updated first
|
|
152
|
-
4. Stars - most starred first
|
|
153
|
-
5. Size - largest first
|
|
154
|
-
|
|
155
|
-
---
|
|
156
|
-
|
|
157
|
-
## 5. Repository Detail Modal
|
|
158
|
-
|
|
159
|
-
Press `Enter` to open, `Escape` to close.
|
|
160
|
-
|
|
161
|
-
```
|
|
162
|
-
┌─────────────────────────────────── autoclaude ────────────────────────────────────────────┐
|
|
163
|
-
│ │
|
|
164
|
-
│ ☁ GitHub: bsunter/autoclaude 🔒 Private ★ 12 🍴 3 👀 5 │
|
|
165
|
-
│ 💻 Local: /Users/brian/code/autoclaude ⎇ main Size: 45.2 KB │
|
|
166
|
-
│ │
|
|
167
|
-
│ ┌─ Status ─────────────────────────────────────────────────────────────────────────────┐ │
|
|
168
|
-
│ │ ● Dirty: 3 modified, 1 staged, 2 untracked │ │
|
|
169
|
-
│ │ ↑ 2 commits to push ↓ 0 commits to pull │ │
|
|
170
|
-
│ │ Last local commit: 2 hours ago │ │
|
|
171
|
-
│ │ Last GitHub push: 1 week ago │ │
|
|
172
|
-
│ └──────────────────────────────────────────────────────────────────────────────────────┘ │
|
|
173
|
-
│ │
|
|
174
|
-
│ ┌─ Actions ────────────────────────────────────────────────────────────────────────────┐ │
|
|
175
|
-
│ │ [p] Push [P] Pull [f] Fetch [o] Open in Browser [c] Copy Clone URL │ │
|
|
176
|
-
│ │ [d] Open in Editor [g] Open GitHub [A] Archive │ │
|
|
177
|
-
│ └──────────────────────────────────────────────────────────────────────────────────────┘ │
|
|
178
|
-
│ │
|
|
179
|
-
│ ┌─ README.md ──────────────────────────────────────────────────────────────────────────┐ │
|
|
180
|
-
│ │ │ │
|
|
181
|
-
│ │ # Autoclaude │ │
|
|
182
|
-
│ │ │ │
|
|
183
|
-
│ │ > An AI-powered development assistant using Claude │ │
|
|
184
|
-
│ │ │ │
|
|
185
|
-
│ │ ## Features │ │
|
|
186
|
-
│ │ │ │
|
|
187
|
-
│ │ - **Code Generation**: Generate boilerplate and implement features │ │
|
|
188
|
-
│ │ - **Code Review**: Get instant feedback on your code │ │
|
|
189
|
-
│ │ - **Documentation**: Auto-generate docs from code │ │
|
|
190
|
-
│ │ │ │
|
|
191
|
-
│ │ ## Installation │ │
|
|
192
|
-
│ │ │ │
|
|
193
|
-
│ │ ```bash │ │
|
|
194
|
-
│ │ bun install autoclaude │ │
|
|
195
|
-
│ │ ``` │ │
|
|
196
|
-
│ │ │ │
|
|
197
|
-
│ │ [↑↓ scroll] │ │
|
|
198
|
-
│ └──────────────────────────────────────────────────────────────────────────────────────┘ │
|
|
199
|
-
│ │
|
|
200
|
-
│ Topics: ai, claude, typescript, automation │
|
|
201
|
-
│ License: MIT Created: Jan 2024 Language: TypeScript │
|
|
202
|
-
│ │
|
|
203
|
-
│ [Esc] Close [j/k] Scroll README [Tab] Next section │
|
|
204
|
-
└───────────────────────────────────────────────────────────────────────────────────────────┘
|
|
205
|
-
```
|
|
206
|
-
|
|
207
|
-
### Modal Sections
|
|
208
|
-
|
|
209
|
-
1. **Header**: Repo name, GitHub link, privacy, stats
|
|
210
|
-
2. **Location Info**: Local path, branch, size
|
|
211
|
-
3. **Status Panel**: Git status details (dirty state, sync status, timestamps)
|
|
212
|
-
4. **Actions Panel**: Quick action buttons with keyboard shortcuts
|
|
213
|
-
5. **README Panel**: Scrollable markdown-rendered README
|
|
214
|
-
6. **Footer**: Topics, license, language, help text
|
|
215
|
-
|
|
216
|
-
### Modal Actions
|
|
217
|
-
|
|
218
|
-
| Key | Action | Description |
|
|
219
|
-
|-----|--------|-------------|
|
|
220
|
-
| p | Push | Push local commits to remote |
|
|
221
|
-
| P | Pull | Pull remote changes |
|
|
222
|
-
| f | Fetch | Fetch remote without merging |
|
|
223
|
-
| o | Open in Browser | Open GitHub page in browser |
|
|
224
|
-
| c | Copy Clone URL | Copy SSH/HTTPS clone URL to clipboard |
|
|
225
|
-
| d | Open in Editor | Open repo in configured editor |
|
|
226
|
-
| g | Open GitHub | Open GitHub repo page |
|
|
227
|
-
| A | Archive | Archive the repository on GitHub |
|
|
228
|
-
| j/k | Scroll | Scroll README up/down |
|
|
229
|
-
| Esc | Close | Close the modal |
|
|
230
|
-
|
|
231
|
-
---
|
|
232
|
-
|
|
233
|
-
## 6. TUI Markdown Renderer
|
|
234
|
-
|
|
235
|
-
For README display, implement a terminal-friendly markdown renderer:
|
|
236
|
-
|
|
237
|
-
### Supported Elements
|
|
238
|
-
|
|
239
|
-
| Element | Rendering |
|
|
240
|
-
|---------|-----------|
|
|
241
|
-
| `# Header` | Bold + cyan color |
|
|
242
|
-
| `## H2` | Bold + blue color |
|
|
243
|
-
| `### H3` | Bold |
|
|
244
|
-
| `**bold**` | Bold text |
|
|
245
|
-
| `*italic*` | Italic/dim text |
|
|
246
|
-
| `` `code` `` | Gray background |
|
|
247
|
-
| ```` ```code``` ```` | Gray background block |
|
|
248
|
-
| `- list` | Indented bullet points |
|
|
249
|
-
| `> quote` | Gray with `│` prefix |
|
|
250
|
-
| `[link](url)` | Cyan underlined |
|
|
251
|
-
| `---` | Horizontal line |
|
|
252
|
-
|
|
253
|
-
---
|
|
254
|
-
|
|
255
|
-
## 7. New State & Types
|
|
256
|
-
|
|
257
|
-
### Extended App Mode
|
|
258
|
-
|
|
259
|
-
```typescript
|
|
260
|
-
export type AppMode =
|
|
261
|
-
| "normal"
|
|
262
|
-
| "filter"
|
|
263
|
-
| "action"
|
|
264
|
-
| "help"
|
|
265
|
-
| "confirm"
|
|
266
|
-
| "clone"
|
|
267
|
-
| "detail" // NEW: Detail modal open
|
|
268
|
-
| "filter-options"; // NEW: Filter options overlay
|
|
269
|
-
```
|
|
270
|
-
|
|
271
|
-
### Detail Modal State
|
|
272
|
-
|
|
273
|
-
```typescript
|
|
274
|
-
export interface DetailModalState {
|
|
275
|
-
repo: UnifiedRepo;
|
|
276
|
-
readmeContent: string | null;
|
|
277
|
-
readmeLoading: boolean;
|
|
278
|
-
readmeError: string | null;
|
|
279
|
-
readmeScrollOffset: number;
|
|
280
|
-
activeSection: "status" | "actions" | "readme";
|
|
281
|
-
}
|
|
282
|
-
```
|
|
283
|
-
|
|
284
|
-
### Extended Quick Filters
|
|
285
|
-
|
|
286
|
-
```typescript
|
|
287
|
-
export type QuickFilter =
|
|
288
|
-
| "all"
|
|
289
|
-
| "dirty"
|
|
290
|
-
| "unpushed"
|
|
291
|
-
| "no-remote"
|
|
292
|
-
| "github-only"
|
|
293
|
-
| "local-only"
|
|
294
|
-
| "private" // NEW
|
|
295
|
-
| "public" // NEW
|
|
296
|
-
| "archived" // NEW
|
|
297
|
-
| "forks"; // NEW
|
|
298
|
-
```
|
|
299
|
-
|
|
300
|
-
### Language Filter State
|
|
301
|
-
|
|
302
|
-
```typescript
|
|
303
|
-
export interface FilterState {
|
|
304
|
-
text: string;
|
|
305
|
-
quickFilter: QuickFilter;
|
|
306
|
-
language: string | null; // NEW: Filter by programming language
|
|
307
|
-
}
|
|
308
|
-
```
|
|
309
|
-
|
|
310
|
-
---
|
|
311
|
-
|
|
312
|
-
## 8. Key Bindings Summary
|
|
313
|
-
|
|
314
|
-
### Global Keys
|
|
315
|
-
|
|
316
|
-
| Key | Action |
|
|
317
|
-
|-----|--------|
|
|
318
|
-
| `q` | Quit application |
|
|
319
|
-
| `?` | Show filter options overlay |
|
|
320
|
-
| `Tab` | Cycle view mode (local/github/all) |
|
|
321
|
-
| `r` | Refresh repository list |
|
|
322
|
-
|
|
323
|
-
### Navigation
|
|
324
|
-
|
|
325
|
-
| Key | Action |
|
|
326
|
-
|-----|--------|
|
|
327
|
-
| `j` / `↓` | Move cursor down |
|
|
328
|
-
| `k` / `↑` | Move cursor up |
|
|
329
|
-
| `g` | Go to top |
|
|
330
|
-
| `G` | Go to bottom |
|
|
331
|
-
| `Enter` | Open detail modal |
|
|
332
|
-
|
|
333
|
-
### Selection
|
|
334
|
-
|
|
335
|
-
| Key | Action |
|
|
336
|
-
|-----|--------|
|
|
337
|
-
| `Space` | Toggle selection |
|
|
338
|
-
| `a` | Select all / Deselect all |
|
|
339
|
-
|
|
340
|
-
### Filtering & Sorting
|
|
341
|
-
|
|
342
|
-
| Key | Action |
|
|
343
|
-
|-----|--------|
|
|
344
|
-
| `/` | Enter text search mode |
|
|
345
|
-
| `s` | Cycle sort field |
|
|
346
|
-
| `0-9` | Quick filters |
|
|
347
|
-
| `l` | Enter language filter mode |
|
|
348
|
-
| `Esc` | Cancel filter / Close modal |
|
|
349
|
-
|
|
350
|
-
### Git Operations (List View)
|
|
351
|
-
|
|
352
|
-
| Key | Action |
|
|
353
|
-
|-----|--------|
|
|
354
|
-
| `p` | Push selected repos |
|
|
355
|
-
| `P` | Pull all repos |
|
|
356
|
-
| `f` | Fetch all remotes |
|
|
357
|
-
| `i` | Init git in selected |
|
|
358
|
-
|
|
359
|
-
### GitHub Operations (List View)
|
|
360
|
-
|
|
361
|
-
| Key | Action |
|
|
362
|
-
|-----|--------|
|
|
363
|
-
| `D` | Clone GitHub repos |
|
|
364
|
-
| `c` | Create GitHub repo |
|
|
365
|
-
| `C` | Full setup (init + create + push) |
|
|
366
|
-
| `A` | Archive GitHub repo |
|
|
367
|
-
|
|
368
|
-
### Detail Modal Keys
|
|
369
|
-
|
|
370
|
-
| Key | Action |
|
|
371
|
-
|-----|--------|
|
|
372
|
-
| `Esc` | Close modal |
|
|
373
|
-
| `j/k` | Scroll README |
|
|
374
|
-
| `Tab` | Cycle sections |
|
|
375
|
-
| `p` | Push |
|
|
376
|
-
| `P` | Pull |
|
|
377
|
-
| `f` | Fetch |
|
|
378
|
-
| `o` | Open in browser |
|
|
379
|
-
| `c` | Copy clone URL |
|
|
380
|
-
| `d` | Open in editor |
|
|
381
|
-
|
|
382
|
-
---
|
|
383
|
-
|
|
384
|
-
## 9. Implementation Plan
|
|
385
|
-
|
|
386
|
-
### Phase 1: Enhanced List View (Priority: High)
|
|
387
|
-
|
|
388
|
-
1. Update `GitHubRepoInfo` type with new fields
|
|
389
|
-
2. Update GitHub service to fetch additional data (stars, forks, etc.)
|
|
390
|
-
3. Redesign `UnifiedProjectItem` component with compact rich display
|
|
391
|
-
4. Create `ColumnHeader` component for sortable columns
|
|
392
|
-
5. Update filtering to support new quick filters
|
|
393
|
-
|
|
394
|
-
**Files to modify:**
|
|
395
|
-
- `src/types/index.ts`
|
|
396
|
-
- `src/services/github.ts`
|
|
397
|
-
- `src/components/UnifiedProjectItem.tsx`
|
|
398
|
-
- `src/components/ColumnHeader.tsx` (new)
|
|
399
|
-
- `src/state/store.tsx`
|
|
400
|
-
|
|
401
|
-
### Phase 2: Detail Modal (Priority: High)
|
|
402
|
-
|
|
403
|
-
1. Create `RepoDetailModal` component
|
|
404
|
-
2. Implement `MarkdownRenderer` component for TUI
|
|
405
|
-
3. Add README fetching from GitHub API (or local file)
|
|
406
|
-
4. Add modal state management
|
|
407
|
-
5. Implement scrollable README view
|
|
408
|
-
|
|
409
|
-
**Files to create:**
|
|
410
|
-
- `src/components/RepoDetailModal.tsx`
|
|
411
|
-
- `src/components/MarkdownRenderer.tsx`
|
|
412
|
-
- `src/utils/markdown.ts`
|
|
413
|
-
|
|
414
|
-
**Files to modify:**
|
|
415
|
-
- `src/types/index.ts`
|
|
416
|
-
- `src/state/store.tsx`
|
|
417
|
-
- `src/components/Layout.tsx`
|
|
418
|
-
|
|
419
|
-
### Phase 3: Enhanced Filtering (Priority: Medium)
|
|
420
|
-
|
|
421
|
-
1. Create `FilterOptionsOverlay` component
|
|
422
|
-
2. Add language filter functionality
|
|
423
|
-
3. Add private/public/archived/fork filters
|
|
424
|
-
4. Update filter state management
|
|
425
|
-
5. Update keybindings
|
|
426
|
-
|
|
427
|
-
**Files to create:**
|
|
428
|
-
- `src/components/FilterOptionsOverlay.tsx`
|
|
429
|
-
|
|
430
|
-
**Files to modify:**
|
|
431
|
-
- `src/hooks/useKeyBindings.ts`
|
|
432
|
-
- `src/state/store.tsx`
|
|
433
|
-
- `src/github/unified.ts`
|
|
434
|
-
|
|
435
|
-
### Phase 4: Actions & Polish (Priority: Medium)
|
|
436
|
-
|
|
437
|
-
1. Implement action handlers in detail modal
|
|
438
|
-
2. Add "Open in Browser" functionality (using `open` command)
|
|
439
|
-
3. Add "Open in Editor" functionality (configurable editor)
|
|
440
|
-
4. Add clipboard support for copying URLs
|
|
441
|
-
5. Add loading states and error handling
|
|
442
|
-
6. Performance optimization
|
|
443
|
-
|
|
444
|
-
**Files to modify:**
|
|
445
|
-
- `src/components/RepoDetailModal.tsx`
|
|
446
|
-
- `src/hooks/useKeyBindings.ts`
|
|
447
|
-
- `src/types/index.ts` (add editor config)
|
|
448
|
-
|
|
449
|
-
### Phase 5: Testing & Documentation (Priority: Low)
|
|
450
|
-
|
|
451
|
-
1. Add unit tests for new components
|
|
452
|
-
2. Add integration tests for new features
|
|
453
|
-
3. Update help overlay with new keybindings
|
|
454
|
-
4. Update README with new features
|
|
455
|
-
|
|
456
|
-
---
|
|
457
|
-
|
|
458
|
-
## 10. File Structure
|
|
459
|
-
|
|
460
|
-
### New Files
|
|
461
|
-
|
|
462
|
-
```
|
|
463
|
-
src/
|
|
464
|
-
├── components/
|
|
465
|
-
│ ├── RepoDetailModal.tsx # Full-screen detail view
|
|
466
|
-
│ ├── FilterOptionsOverlay.tsx # Filter help popup
|
|
467
|
-
│ ├── ColumnHeader.tsx # Sortable column headers
|
|
468
|
-
│ └── MarkdownRenderer.tsx # TUI markdown rendering
|
|
469
|
-
└── utils/
|
|
470
|
-
└── markdown.ts # Markdown parsing utilities
|
|
471
|
-
```
|
|
472
|
-
|
|
473
|
-
### Modified Files
|
|
474
|
-
|
|
475
|
-
```
|
|
476
|
-
src/
|
|
477
|
-
├── types/
|
|
478
|
-
│ └── index.ts # Extended types
|
|
479
|
-
├── components/
|
|
480
|
-
│ ├── UnifiedProjectItem.tsx # Rich status display
|
|
481
|
-
│ ├── Layout.tsx # Modal routing
|
|
482
|
-
│ ├── FilterBar.tsx # Enhanced filters
|
|
483
|
-
│ └── HelpOverlay.tsx # Updated keybindings
|
|
484
|
-
├── state/
|
|
485
|
-
│ └── store.tsx # New state management
|
|
486
|
-
├── hooks/
|
|
487
|
-
│ └── useKeyBindings.ts # New keybindings
|
|
488
|
-
├── services/
|
|
489
|
-
│ └── github.ts # Fetch additional data
|
|
490
|
-
└── github/
|
|
491
|
-
└── unified.ts # New filter functions
|
|
492
|
-
```
|
|
493
|
-
|
|
494
|
-
---
|
|
495
|
-
|
|
496
|
-
## 11. Technical Considerations
|
|
497
|
-
|
|
498
|
-
### Performance
|
|
499
|
-
|
|
500
|
-
- Use virtualization for long lists (already implemented)
|
|
501
|
-
- Lazy-load README content only when modal opens
|
|
502
|
-
- Cache GitHub API responses
|
|
503
|
-
- Debounce filter input
|
|
504
|
-
|
|
505
|
-
### Accessibility
|
|
506
|
-
|
|
507
|
-
- Ensure all actions have keyboard shortcuts
|
|
508
|
-
- Provide clear visual feedback for current state
|
|
509
|
-
- Use consistent color coding
|
|
510
|
-
|
|
511
|
-
### Error Handling
|
|
512
|
-
|
|
513
|
-
- Graceful fallback when GitHub API fails
|
|
514
|
-
- Show loading states during async operations
|
|
515
|
-
- Display meaningful error messages
|
|
516
|
-
|
|
517
|
-
### Configuration
|
|
518
|
-
|
|
519
|
-
- Editor command (default: `$EDITOR` or `code`)
|
|
520
|
-
- Browser command (default: `open` on macOS)
|
|
521
|
-
- Default visibility for new repos
|
|
522
|
-
- Cache TTL settings
|
|
523
|
-
|
|
524
|
-
---
|
|
525
|
-
|
|
526
|
-
## 12. Success Metrics
|
|
527
|
-
|
|
528
|
-
After implementation, the UI should:
|
|
529
|
-
|
|
530
|
-
1. **Show more information at a glance** - Users can see status, privacy, language, stars, and sync status without opening details
|
|
531
|
-
2. **Faster filtering** - Quick filters allow instant narrowing of repo list
|
|
532
|
-
3. **Better repo understanding** - Detail modal shows README and comprehensive status
|
|
533
|
-
4. **Faster actions** - Common operations available via single keystroke
|
|
534
|
-
5. **Intuitive navigation** - Consistent vim-like keybindings throughout
|
|
535
|
-
|
|
536
|
-
---
|
|
537
|
-
|
|
538
|
-
## Appendix: Language Abbreviations
|
|
539
|
-
|
|
540
|
-
| Language | Abbreviation |
|
|
541
|
-
|----------|-------------|
|
|
542
|
-
| TypeScript | TS |
|
|
543
|
-
| JavaScript | JS |
|
|
544
|
-
| Rust | RS |
|
|
545
|
-
| Python | PY |
|
|
546
|
-
| Go | GO |
|
|
547
|
-
| Ruby | RB |
|
|
548
|
-
| Java | JV |
|
|
549
|
-
| C | C |
|
|
550
|
-
| C++ | C+ |
|
|
551
|
-
| C# | C# |
|
|
552
|
-
| PHP | PH |
|
|
553
|
-
| Swift | SW |
|
|
554
|
-
| Kotlin | KT |
|
|
555
|
-
| Scala | SC |
|
|
556
|
-
| Elixir | EX |
|
|
557
|
-
| Haskell | HS |
|
|
558
|
-
| Shell | SH |
|
|
559
|
-
| HTML | HT |
|
|
560
|
-
| CSS | CS |
|
|
561
|
-
| Vue | VU |
|
|
562
|
-
| Svelte | SV |
|