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.
Files changed (184) hide show
  1. package/LICENSE +21 -0
  2. package/package.json +24 -4
  3. package/src/components/onboarding/DirectoriesStep.tsx +19 -19
  4. package/src/github/auth.ts +3 -3
  5. package/src/utils/debug.ts +4 -4
  6. package/.bunignore +0 -7
  7. package/.github/workflows/ci.yml +0 -73
  8. package/CLAUDE.md +0 -111
  9. package/CONTRIBUTING.md +0 -145
  10. package/bun.lock +0 -267
  11. package/bunfig.toml +0 -15
  12. package/cli +0 -0
  13. package/docs/ai/IMPROVEMENT_PLAN.md +0 -341
  14. package/docs/ai/VERIFICATION_REPORT.md +0 -87
  15. package/docs/ai/architecture.md +0 -169
  16. package/docs/ai/checks/check-2025-12-02-tests.md +0 -40
  17. package/docs/ai/checks/check-2025-12-02.md +0 -55
  18. package/docs/ai/checks/test-verification-report.md +0 -85
  19. package/docs/ai/implementation-guide.md +0 -776
  20. package/docs/ai/research/gitty-codebase-analysis.md +0 -221
  21. package/docs/ai/tickets/GENERAL-sitrep.md +0 -30
  22. package/docs/ai/tickets/TASK-database-tests-sitrep.md +0 -25
  23. package/docs/ai/tickets/TASK-deprecated-functions-sitrep.md +0 -28
  24. package/docs/ai/tickets/TASK-detail-modal-sitrep.md +0 -28
  25. package/docs/ai/tickets/TASK-filter-overlay-sitrep.md +0 -24
  26. package/docs/ai/tickets/TASK-github-service-sitrep.md +0 -32
  27. package/docs/ai/tickets/TASK-github-token-sitrep.md +0 -51
  28. package/docs/ai/tickets/TASK-hascommits-sitrep.md +0 -35
  29. package/docs/ai/tickets/TASK-keybindings-sitrep.md +0 -26
  30. package/docs/ai/tickets/TASK-layout-sitrep.md +0 -25
  31. package/docs/ai/tickets/TASK-markdown-sitrep.md +0 -28
  32. package/docs/ai/tickets/TASK-project-item-sitrep.md +0 -79
  33. package/docs/ai/tickets/TASK-sitrep.md +0 -28
  34. package/docs/ai/tickets/TASK-state-sitrep.md +0 -26
  35. package/docs/ai/tickets/TASK-types-sitrep.md +0 -25
  36. package/docs/ai/tickets/TASK-unified-item-fix-sitrep.md +0 -26
  37. package/docs/ai/tickets/TKT-001-sitrep.md +0 -24
  38. package/docs/ai/tickets/TKT-002-sitrep.md +0 -25
  39. package/docs/ai/tickets/TKT-003-git-service-refactoring-complete.md +0 -46
  40. package/docs/ai/tickets/TKT-003-git-service-refactoring-plan.md +0 -135
  41. package/docs/ai/tickets/TKT-003-sitrep.md +0 -26
  42. package/docs/ai/tickets/TKT-004-sitrep.md +0 -27
  43. package/docs/ai/tickets/TKT-005-sitrep.md +0 -25
  44. package/docs/ai/tickets/TKT-006-sitrep.md +0 -26
  45. package/docs/ai/tickets/TKT-007-sitrep.md +0 -30
  46. package/docs/ai/tickets/TKT-008-sitrep.md +0 -32
  47. package/docs/ai/tickets/TKT-009-sitrep.md +0 -27
  48. package/docs/ai/tickets/TKT-010-sitrep.md +0 -27
  49. package/docs/ai/tickets/TKT-011-sitrep.md +0 -26
  50. package/docs/ai/tickets/TKT-012-sitrep.md +0 -25
  51. package/docs/ai/tickets/sitreps/TASK-actions-sitrep.md +0 -28
  52. package/docs/ai/tickets/sitreps/TASK-actions-test-sitrep.md +0 -25
  53. package/docs/ai/tickets/sitreps/TASK-app-integration-sitrep.md +0 -25
  54. package/docs/ai/tickets/sitreps/TASK-background-fetch-sitrep.md +0 -24
  55. package/docs/ai/tickets/sitreps/TASK-background-fetch-test-sitrep.md +0 -29
  56. package/docs/ai/tickets/sitreps/TASK-batch-tests-sitrep.md +0 -29
  57. package/docs/ai/tickets/sitreps/TASK-bun-test-sitrep.md +0 -26
  58. package/docs/ai/tickets/sitreps/TASK-cache-tests-sitrep.md +0 -30
  59. package/docs/ai/tickets/sitreps/TASK-cli-tests-sitrep.md +0 -28
  60. package/docs/ai/tickets/sitreps/TASK-clone-error-handling-sitrep.md +0 -26
  61. package/docs/ai/tickets/sitreps/TASK-commands-tests-sitrep.md +0 -25
  62. package/docs/ai/tickets/sitreps/TASK-component-tests-1-sitrep.md +0 -30
  63. package/docs/ai/tickets/sitreps/TASK-configloader-tests-sitrep.md +0 -25
  64. package/docs/ai/tickets/sitreps/TASK-confirm-dialog-test-sitrep.md +0 -29
  65. package/docs/ai/tickets/sitreps/TASK-coverage-sitrep.md +0 -95
  66. package/docs/ai/tickets/sitreps/TASK-database-tests-summary.md +0 -61
  67. package/docs/ai/tickets/sitreps/TASK-error-boundary-sitrep.md +0 -30
  68. package/docs/ai/tickets/sitreps/TASK-error-tests-sitrep.md +0 -27
  69. package/docs/ai/tickets/sitreps/TASK-errors-tests-sitrep.md +0 -25
  70. package/docs/ai/tickets/sitreps/TASK-extract-reducer-sitrep.md +0 -27
  71. package/docs/ai/tickets/sitreps/TASK-filter-overlay-test-sitrep.md +0 -25
  72. package/docs/ai/tickets/sitreps/TASK-final-verification-sitrep.md +0 -28
  73. package/docs/ai/tickets/sitreps/TASK-fix-all-tests-sitrep.md +0 -25
  74. package/docs/ai/tickets/sitreps/TASK-fix-hooks-sitrep.md +0 -26
  75. package/docs/ai/tickets/sitreps/TASK-fix-remaining-tests-sitrep.md +0 -25
  76. package/docs/ai/tickets/sitreps/TASK-fix-test-failures-sitrep.md +0 -26
  77. package/docs/ai/tickets/sitreps/TASK-fix-tests-sitrep.md +0 -24
  78. package/docs/ai/tickets/sitreps/TASK-formatters-tests-sitrep.md +0 -25
  79. package/docs/ai/tickets/sitreps/TASK-git-timeouts-sitrep.md +0 -29
  80. package/docs/ai/tickets/sitreps/TASK-github-cache-test-sitrep.md +0 -25
  81. package/docs/ai/tickets/sitreps/TASK-githubcli-tests-sitrep.md +0 -24
  82. package/docs/ai/tickets/sitreps/TASK-gitstatus-tests-sitrep.md +0 -24
  83. package/docs/ai/tickets/sitreps/TASK-hooks-isolation-sitrep.md +0 -27
  84. package/docs/ai/tickets/sitreps/TASK-keybindings-tests-sitrep.md +0 -25
  85. package/docs/ai/tickets/sitreps/TASK-layout-tests-sitrep.md +0 -25
  86. package/docs/ai/tickets/sitreps/TASK-mock-factories-sitrep.md +0 -27
  87. package/docs/ai/tickets/sitreps/TASK-modal-tests-sitrep.md +0 -32
  88. package/docs/ai/tickets/sitreps/TASK-processbatch-fix-sitrep.md +0 -27
  89. package/docs/ai/tickets/sitreps/TASK-projectlist-tests-sitrep.md +0 -30
  90. package/docs/ai/tickets/sitreps/TASK-projectutils-tests-sitrep.md +0 -25
  91. package/docs/ai/tickets/sitreps/TASK-scanner-tests-sitrep.md +0 -29
  92. package/docs/ai/tickets/sitreps/TASK-select-all-sitrep.md +0 -25
  93. package/docs/ai/tickets/sitreps/TASK-shell-error-handling-sitrep.md +0 -27
  94. package/docs/ai/tickets/sitreps/TASK-store-tests-sitrep.md +0 -25
  95. package/docs/ai/tickets/sitreps/TASK-test-fixes-sitrep.md +0 -26
  96. package/docs/ai/tickets/sitreps/TASK-test-summary-sitrep.md +0 -25
  97. package/docs/ai/tickets/sitreps/TASK-test-verification-sitrep.md +0 -27
  98. package/docs/ai/tickets/sitreps/TASK-testsuite-sitrep.md +0 -75
  99. package/docs/ai/tickets/sitreps/TASK-unified-reducer-tests-sitrep.md +0 -29
  100. package/docs/ai/tickets/sitreps/TASK-unified-repos-test-sitrep.md +0 -29
  101. package/docs/ai/tickets/sitreps/TASK-unified-tests-sitrep.md +0 -25
  102. package/docs/ai/tickets/sitreps/TASK-useprojects-tests-sitrep.md +0 -25
  103. package/docs/ai/tickets/sitreps/TASK-utility-tests-sitrep.md +0 -32
  104. package/docs/ai/tickets/sitreps/TKT-003-git-service-refactoring-sitrep.md +0 -64
  105. package/docs/ai/tkt-001-fix-database-error.md +0 -217
  106. package/docs/ai/ui-enhancement-plan.md +0 -562
  107. package/test/integration/app.isolated.tsx +0 -240
  108. package/test/integration/cli-commands.test.ts +0 -287
  109. package/test/integration/cli-validation.test.ts +0 -264
  110. package/test/integration/git-operations.test.ts +0 -218
  111. package/test/integration/scanner.test.ts +0 -228
  112. package/test/preload.ts +0 -18
  113. package/test/unit/cli/commands.test.ts +0 -13
  114. package/test/unit/cli/formatters.test.ts +0 -1116
  115. package/test/unit/cli/github-commands.test.ts +0 -12
  116. package/test/unit/components/CloneDialog.test.tsx +0 -240
  117. package/test/unit/components/ColumnHeader.test.tsx +0 -128
  118. package/test/unit/components/CommandPalette.test.tsx +0 -355
  119. package/test/unit/components/ConfirmDialog.test.tsx +0 -111
  120. package/test/unit/components/ErrorBoundary.test.tsx +0 -139
  121. package/test/unit/components/FilterBar.test.tsx +0 -43
  122. package/test/unit/components/FilterOptionsOverlay.test.tsx +0 -197
  123. package/test/unit/components/HelpOverlay.test.tsx +0 -90
  124. package/test/unit/components/Layout.test.tsx +0 -328
  125. package/test/unit/components/MarkdownRenderer.test.tsx +0 -45
  126. package/test/unit/components/ProgressBar.test.tsx +0 -138
  127. package/test/unit/components/ProjectItem.test.tsx +0 -182
  128. package/test/unit/components/ProjectList.test.tsx +0 -311
  129. package/test/unit/components/RepoDetailModal.test.tsx +0 -445
  130. package/test/unit/components/StatusBar.test.tsx +0 -112
  131. package/test/unit/components/UnifiedProjectItem.test.tsx +0 -618
  132. package/test/unit/components/ViewModeIndicator.test.tsx +0 -137
  133. package/test/unit/components/test-utils.tsx +0 -63
  134. package/test/unit/config/loader.test.ts +0 -692
  135. package/test/unit/db/database.test.ts +0 -978
  136. package/test/unit/db/index.test.ts +0 -314
  137. package/test/unit/fixtures/setup.ts +0 -186
  138. package/test/unit/git/commands-untested.test.ts +0 -205
  139. package/test/unit/git/commands.test.ts +0 -269
  140. package/test/unit/git/operations.test.ts +0 -322
  141. package/test/unit/git/status.test.ts +0 -219
  142. package/test/unit/github/auth.test.ts +0 -317
  143. package/test/unit/github/cache.test.ts +0 -1028
  144. package/test/unit/github/cli.test.ts +0 -135
  145. package/test/unit/github/unified.test.ts +0 -1201
  146. package/test/unit/graceful-shutdown.test.ts +0 -83
  147. package/test/unit/hooks/useBackgroundFetch.test.tsx +0 -239
  148. package/test/unit/hooks/useConfirmDialogActions.test.tsx +0 -81
  149. package/test/unit/hooks/useKeyBindings.isolated.ts +0 -715
  150. package/test/unit/hooks/useProjects.test.tsx +0 -186
  151. package/test/unit/hooks/useUnifiedRepos-simple.test.tsx +0 -115
  152. package/test/unit/hooks/useUnifiedRepos.test.tsx +0 -177
  153. package/test/unit/mocks/config.ts +0 -109
  154. package/test/unit/mocks/git-service.ts +0 -274
  155. package/test/unit/mocks/github-service.ts +0 -250
  156. package/test/unit/mocks/index.ts +0 -72
  157. package/test/unit/mocks/project.ts +0 -148
  158. package/test/unit/mocks/state-mocks.ts +0 -187
  159. package/test/unit/mocks/unified.ts +0 -169
  160. package/test/unit/operations/batch.test.ts +0 -216
  161. package/test/unit/operations/commands.test.ts +0 -550
  162. package/test/unit/scanner/errors.test.ts +0 -297
  163. package/test/unit/scanner/index.test.ts +0 -1011
  164. package/test/unit/scanner/markers.test.ts +0 -150
  165. package/test/unit/scanner/submodules.test.ts +0 -99
  166. package/test/unit/services/git-errors.test.ts +0 -190
  167. package/test/unit/services/git.test.ts +0 -442
  168. package/test/unit/services/github-errors.test.ts +0 -293
  169. package/test/unit/services/github.test.ts +0 -200
  170. package/test/unit/state/actions.test.ts +0 -217
  171. package/test/unit/state/reducer.test.ts +0 -745
  172. package/test/unit/state/store.test.tsx +0 -711
  173. package/test/unit/types/commands.test.ts +0 -220
  174. package/test/unit/types/schema.test.ts +0 -179
  175. package/test/unit/utils/array.test.ts +0 -73
  176. package/test/unit/utils/debug.test.ts +0 -23
  177. package/test/unit/utils/errors.test.ts +0 -295
  178. package/test/unit/utils/markdown.test.ts +0 -163
  179. package/test/unit/utils/project-utils.test.ts +0 -756
  180. package/test/unit/utils/rate-limiter.test.ts +0 -256
  181. package/test/unit/utils/retry.test.ts +0 -165
  182. package/test/unit/utils/strip-ansi.ts +0 -13
  183. package/test/unit/utils/timeout.test.ts +0 -93
  184. 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 |