github-search-cli 9.4.4 → 9.5.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/CHANGELOG.md +73 -21
- package/README.md +35 -10
- package/dist/cli.js +425 -86
- package/package.json +1 -1
- package/release-notes/9.5.0.md +30 -0
- package/src/cli.ts +55 -2
- package/src/help.ts +4 -0
- package/src/tui.ts +108 -28
- package/src/user.ts +356 -0
package/CHANGELOG.md
CHANGED
|
@@ -5,9 +5,82 @@ All notable changes to `github-search-cli` (published as the `ghfind` binary).
|
|
|
5
5
|
Format follows [Keep a Changelog](https://keepachangelog.com/en/1.0.0/). Published versions and dates mirror [npm](https://www.npmjs.com/package/github-search-cli?activeTab=versions).
|
|
6
6
|
|
|
7
7
|
---
|
|
8
|
+
|
|
9
|
+
## [Unreleased]
|
|
10
|
+
|
|
11
|
+
### Fixed
|
|
12
|
+
|
|
13
|
+
- **Landing-screen keys leaked into the main view** — pressing `/` on the
|
|
14
|
+
landing menu focused the search input on top of it, and `Space`, `t`, `c`,
|
|
15
|
+
`?`, and `q` all double-fired through the second key listener (help opened
|
|
16
|
+
and instantly closed; quit ran cleanup twice). The landing handler now
|
|
17
|
+
claims its keys with `stopPropagation()` via the `landingKeysActive` /
|
|
18
|
+
`landingConsumesKey` seam (previously built and tested but never wired),
|
|
19
|
+
and the global handler ignores everything while the landing menu owns the
|
|
20
|
+
screen. Also fixed while routing keys: `b` on the landing screen now opens
|
|
21
|
+
bookmarks (hint bar updated), and overlays opened from landing hide the
|
|
22
|
+
menu instead of drawing on top of it.
|
|
23
|
+
|
|
24
|
+
- **Update panel clipped the changelog** — the modal was hard-capped at 16
|
|
25
|
+
rows and put the release notes in a single unsized text block, so anything
|
|
26
|
+
past the first ~10 lines of the notes was invisible with no hint that more
|
|
27
|
+
existed. The notes area is now a scrollable region (same mechanics as the
|
|
28
|
+
README/org viewers): `↑↓/jk` move a fifth of a page, `PageUp`/`PageDown`
|
|
29
|
+
and `Home`/`End` jump, a scrollbar shows when content overflows, and scroll
|
|
30
|
+
position resets each time the panel opens. The box is taller (24 rows), and
|
|
31
|
+
notes render at the panel's actual width so wrapped lines no longer clip
|
|
32
|
+
horizontally on narrow terminals.
|
|
33
|
+
|
|
34
|
+
---
|
|
35
|
+
|
|
36
|
+
## [9.5.0] — 2026-09-15
|
|
37
|
+
|
|
38
|
+
### Added
|
|
39
|
+
|
|
40
|
+
- **`ghfind user <name>`** — GitHub user profiles from the terminal, the
|
|
41
|
+
user-side counterpart to `ghfind org <name>`. Fetches the user's metadata
|
|
42
|
+
and public repos from the GitHub REST API and aggregates them into one
|
|
43
|
+
summary: public repo count, total stars/forks of the fetched repos,
|
|
44
|
+
followers/following, top languages by repo count, top 5 repos by stars, and
|
|
45
|
+
the 5 most recently pushed repos. Supports `--json`, `--csv`, `--markdown`,
|
|
46
|
+
`--count`, and `--limit` just like `org`, and honors `--token` for higher
|
|
47
|
+
rate limits. Leading `@` is stripped (`ghfind user @torvalds` works), and
|
|
48
|
+
Organization / Bot accounts are labeled with an `[org]` / `[bot]` badge in
|
|
49
|
+
text output (`[staff]` for site admins).
|
|
50
|
+
|
|
51
|
+
### Fixed
|
|
52
|
+
|
|
53
|
+
- `ghfind org <name>` mangled multi-word names with dashes (`ghfind org "in
|
|
54
|
+
tech"` looked up `in-tech`) — names are now joined with spaces, which the
|
|
55
|
+
API handles. In practice org logins are single tokens, so existing one-word
|
|
56
|
+
lookups are unaffected.
|
|
57
|
+
|
|
58
|
+
### Internal
|
|
59
|
+
|
|
60
|
+
- `src/user.ts` mirrors the org-profile module shape: pure
|
|
61
|
+
`normalizeUser`/`normalizeUserRepo` aggregate functions testable with
|
|
62
|
+
fixtures, thin formatters, and a `fetchUserProfile` wrapper that degrades
|
|
63
|
+
gracefully when the repos request fails (metadata is still returned).
|
|
64
|
+
- 27 new tests in `tests/user.test.ts` covering normalization, aggregation,
|
|
65
|
+
`@`-stripping, 404/network error paths, token headers, zero-repo users,
|
|
66
|
+
non-array API responses, badges, and all four formatters.
|
|
67
|
+
- **TUI overlay registry seam** — `src/tui.ts` is 2,867 lines and was the
|
|
68
|
+
most-changed file in the repo (28 of the last 200 commits). A new
|
|
69
|
+
`src/tui/overlays/registry.ts` introduces the seam that future
|
|
70
|
+
migrations will consume: `Overlay` interface plus `OVERLAYS` array and
|
|
71
|
+
`getOverlay()` lookup. The first overlay (`help`) is extracted behind
|
|
72
|
+
it. Behaviour is unchanged. Migration is gradual; subsequent commits
|
|
73
|
+
move one overlay at a time and rewire `showOverlay()` to query the
|
|
74
|
+
registry. 6 guard tests in `tests/overlay-registry.test.ts` pin the
|
|
75
|
+
registry contract and source-grep `src/tui.ts` to fail on drift between
|
|
76
|
+
the registered ids and the dispatcher's union type.
|
|
77
|
+
|
|
78
|
+
---
|
|
79
|
+
|
|
8
80
|
## [9.4.3] — 2026-09-13 (released)
|
|
9
81
|
|
|
10
82
|
### Added
|
|
83
|
+
|
|
11
84
|
- nothing added
|
|
12
85
|
|
|
13
86
|
### Changed
|
|
@@ -82,27 +155,6 @@ Format follows [Keep a Changelog](https://keepachangelog.com/en/1.0.0/). Publish
|
|
|
82
155
|
|
|
83
156
|
---
|
|
84
157
|
|
|
85
|
-
## [Unreleased]
|
|
86
|
-
|
|
87
|
-
### Changed
|
|
88
|
-
|
|
89
|
-
- **TUI overlay registry seam** — `src/tui.ts` is 2,867 lines and was the
|
|
90
|
-
most-changed file in the repo (28 of the last 200 commits). A new
|
|
91
|
-
`src/tui/overlays/registry.ts` introduces the seam that future
|
|
92
|
-
migrations will consume: `Overlay` interface plus `OVERLAYS` array and
|
|
93
|
-
`getOverlay()` lookup. The first overlay (`help`) is extracted behind
|
|
94
|
-
it. Behaviour is unchanged. Migration is gradual; subsequent commits
|
|
95
|
-
move one overlay at a time and rewire `showOverlay()` to query the
|
|
96
|
-
registry.
|
|
97
|
-
|
|
98
|
-
### Added
|
|
99
|
-
|
|
100
|
-
- 6 guard tests in `tests/overlay-registry.test.ts` pin the registry
|
|
101
|
-
contract and source-grep `src/tui.ts` to fail on drift between the
|
|
102
|
-
registered ids and the dispatcher's union type.
|
|
103
|
-
|
|
104
|
-
---
|
|
105
|
-
|
|
106
158
|
## [9.4.0] — 2026-08-28
|
|
107
159
|
|
|
108
160
|
Release tracking for bookmarked repos, plus a bookmarks page and toast notifications in the TUI.
|
package/README.md
CHANGED
|
@@ -39,6 +39,8 @@ Or grab a **standalone binary** (no Node.js needed) from [GitHub Releases](https
|
|
|
39
39
|
| Side-by-side repo compare | ✅ | ❌ | ❌ |
|
|
40
40
|
| Deep-dive (README, contributors, activity) | ✅ | ❌ | ❌ |
|
|
41
41
|
| npm package search | ✅ | ❌ | ❌ |
|
|
42
|
+
| Org profile | ✅ | ✅ | ❌ |
|
|
43
|
+
| User profile | ✅ | ❌ | ❌ |
|
|
42
44
|
| Pipeable JSON / CSV / Markdown export | ✅ | JSON only | ❌ |
|
|
43
45
|
| No login required | ✅ | ❌ | ❌ |
|
|
44
46
|
|
|
@@ -63,6 +65,8 @@ ghfind "language:Rust stars:>1000" --json | jq '.[].fullName'
|
|
|
63
65
|
ghfind "language:Zig" --count
|
|
64
66
|
ghfind --trending --json --since weekly
|
|
65
67
|
ghfind login # import the gh CLI token or paste one
|
|
68
|
+
ghfind org vercel # org profile: repos, stars, top languages
|
|
69
|
+
ghfind user torvalds # user profile: repos, stars, followers
|
|
66
70
|
```
|
|
67
71
|
|
|
68
72
|
### Non-interactive
|
|
@@ -103,6 +107,7 @@ ghfind --completion fish | source
|
|
|
103
107
|
<tr><td><b>Export</b></td><td>Space → Export — JSON, CSV, Markdown to file</td></tr>
|
|
104
108
|
<tr><td><b>Share</b></td><td>Space → Share repo — copy repo link to clipboard</td></tr>
|
|
105
109
|
<tr><td><b>Org profile</b></td><td>Space → Org profile — org summary: repos, stars, top languages (<code>ghfind org <name></code> in CLI)</td></tr>
|
|
110
|
+
<tr><td><b>User profile</b></td><td>User summary like org profile — repos, stars, followers, top languages (<code>ghfind user <name></code>)</td></tr>
|
|
106
111
|
<tr><td><b>Notifications</b></td><td>Space → Notifications — view & dismiss alerts</td></tr>
|
|
107
112
|
<tr><td><b>Graph</b></td><td>Space → Activity graph — commit chart, fullscreen toggle</td></tr>
|
|
108
113
|
<tr><td><b>Help</b></td><td><code>?</code> / <code>Ctrl+H</code> — keybindings reference</td></tr>
|
|
@@ -112,6 +117,16 @@ ghfind --completion fish | source
|
|
|
112
117
|
<details>
|
|
113
118
|
<summary>Keybindings</summary>
|
|
114
119
|
|
|
120
|
+
**Landing screen** (the mode menu shown on launch)
|
|
121
|
+
|
|
122
|
+
| Key | Action |
|
|
123
|
+
| --------------------- | ---------------------------- |
|
|
124
|
+
| `↑` / `↓` — `j` / `k` | Navigate mode cards |
|
|
125
|
+
| `Enter` | Select mode / open Bookmarks |
|
|
126
|
+
| `b` | Jump straight to Bookmarks |
|
|
127
|
+
| `?` or `h` | Help overlay |
|
|
128
|
+
| `q` | Quit ghfind |
|
|
129
|
+
|
|
115
130
|
**Global shortcuts** (main view, no overlay active)
|
|
116
131
|
|
|
117
132
|
| Key | Action |
|
|
@@ -159,14 +174,16 @@ Actions shown depend on current mode (search vs trending) and selection:
|
|
|
159
174
|
|
|
160
175
|
**Overlay-specific shortcuts**
|
|
161
176
|
|
|
162
|
-
| Key
|
|
163
|
-
|
|
|
164
|
-
| `Esc` / `q`
|
|
165
|
-
| `Enter`
|
|
166
|
-
| `d`
|
|
167
|
-
| `Ctrl+X`
|
|
168
|
-
| `Ctrl+C`
|
|
169
|
-
| `Y` / `N` / `L`
|
|
177
|
+
| Key | Context | Action |
|
|
178
|
+
| -------------------------------- | ---------------------------------------------------- | ------------------------------------------- |
|
|
179
|
+
| `Esc` / `q` | Any overlay | Close overlay |
|
|
180
|
+
| `Enter` | Leader / History / Saved / Export / Topics / Share | Confirm selection |
|
|
181
|
+
| `d` | History / Bookmarks / Saved searches / Notifications | Delete current entry |
|
|
182
|
+
| `Ctrl+X` | History | Clear all history |
|
|
183
|
+
| `Ctrl+C` | Notifications | Dismiss all notifications |
|
|
184
|
+
| `Y` / `N` / `L` | Update modal | Yes (install) / No (skip) / Later (dismiss) |
|
|
185
|
+
| `↑` / `↓` — `j` / `k` | Update modal | Scroll release notes |
|
|
186
|
+
| `PgUp` / `PgDn` / `Home` / `End` | Update modal | Jump through release notes |
|
|
170
187
|
|
|
171
188
|
Trending tabs: `1`–`5` (Today → All) or `←`/`→` — `h`/`l`
|
|
172
189
|
|
|
@@ -215,14 +232,14 @@ cd ghfind
|
|
|
215
232
|
# With Bun (recommended for TUI)
|
|
216
233
|
bun install
|
|
217
234
|
bun start # TUI
|
|
218
|
-
bun test #
|
|
235
|
+
bun test # 292 tests
|
|
219
236
|
bun run check # format check + tests — the green gate
|
|
220
237
|
bun run build # build dist/
|
|
221
238
|
|
|
222
239
|
# Or with npm
|
|
223
240
|
npm install
|
|
224
241
|
npm start # TUI (requires Node 20+)
|
|
225
|
-
npm test #
|
|
242
|
+
npm test # 292 tests
|
|
226
243
|
npm run build # build dist/
|
|
227
244
|
|
|
228
245
|
> Want to contribute? See [CONTRIBUTING.md](CONTRIBUTING.md) for commands,
|
|
@@ -235,6 +252,14 @@ npm run build # build dist/
|
|
|
235
252
|
|
|
236
253
|
Recent releases (full history in [CHANGELOG.md](CHANGELOG.md)):
|
|
237
254
|
|
|
255
|
+
### v9.5.0
|
|
256
|
+
|
|
257
|
+
- New `ghfind user <name>` command — user profiles like `ghfind org`: repos, total stars/forks, followers, top languages, top repos
|
|
258
|
+
- Supports `--json`, `--csv`, `--markdown`, `--count`, `--limit`, `--token`; `@` prefix accepted
|
|
259
|
+
- Fixed `ghfind org` mangling multi-word names with dashes
|
|
260
|
+
- Fixed landing-screen keys leaking into the main view — `/`, `Space`, `t`, `c`, `?`, `q` all double-fired; `b` on the landing screen now opens Bookmarks
|
|
261
|
+
- Fixed the update panel clipping the changelog — release notes are now scrollable (`↑↓`/`j`/`k`, `PgUp`/`PgDn`, `Home`/`End`) in a taller panel
|
|
262
|
+
|
|
238
263
|
### v9.3.0
|
|
239
264
|
|
|
240
265
|
- Fixed `c` keybinding in TUI not adding repos to comparison — a missing closing brace in the space-key handler broke every later key handler (`c`, `t`, `?`)
|