github-search-cli 9.4.4 → 9.5.1
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 +102 -21
- package/README.md +43 -30
- package/dist/cli.js +431 -89
- package/package.json +1 -1
- package/release-notes/9.5.0.md +30 -0
- package/release-notes/9.5.1.md +36 -0
- package/src/cli.ts +57 -5
- package/src/help.ts +8 -0
- package/src/tui.ts +108 -28
- package/src/user.ts +356 -0
package/CHANGELOG.md
CHANGED
|
@@ -5,9 +5,111 @@ 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
|
+
## [9.5.1] — 2026-09-15
|
|
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
|
+
- **Update panel clipped the changelog** — the modal was hard-capped at 16
|
|
24
|
+
rows and put the release notes in a single unsized text block, so anything
|
|
25
|
+
past the first ~10 lines of the notes was invisible with no hint that more
|
|
26
|
+
existed. The notes area is now a scrollable region (same mechanics as the
|
|
27
|
+
README/org viewers): `↑↓/jk` move a fifth of a page, `PageUp`/`PageDown`
|
|
28
|
+
and `Home`/`End` jump, a scrollbar shows when content overflows, and scroll
|
|
29
|
+
position resets each time the panel opens. The box is taller (24 rows), and
|
|
30
|
+
notes render at the panel's actual width so wrapped lines no longer clip
|
|
31
|
+
horizontally on narrow terminals.
|
|
32
|
+
- **`--help` listed `ghfind user <name>` twice** — the 9.5.0 usage block
|
|
33
|
+
carried a duplicated line, so the profile examples were printed twice. It
|
|
34
|
+
now appears once, and the `ghfind pkg` line is aligned with its neighbours.
|
|
35
|
+
|
|
36
|
+
### Internal
|
|
37
|
+
|
|
38
|
+
- **Test isolation** — seven suites derived their temp dirs from a
|
|
39
|
+
`Date.now()` stamp (`tmpdir()/<name>-<ms>`), a name two concurrent
|
|
40
|
+
`bun test` processes can collide on, which intermittently failed
|
|
41
|
+
bookmarks / config / doctor / history / login / saved-searches /
|
|
42
|
+
update-check tests. They now use `mkdtempSync`, which is unique and
|
|
43
|
+
collision-proof (the pattern `tests/releases.test.ts` already used), and
|
|
44
|
+
the login `readGhCliToken` / `persistToken` dirs are removed after use
|
|
45
|
+
instead of accumulating in the temp folder.
|
|
46
|
+
- **Docs sync** (README ↔ `src/help.ts` ↔ `--help`): README gained
|
|
47
|
+
`--releases` / `--compare` / `pkg` examples plus Packages and Releases
|
|
48
|
+
feature rows; the TUI help screen gained the `Org profile` command-menu
|
|
49
|
+
entry the leader menu already had. `tests/cli-help.test.ts` pins the
|
|
50
|
+
`--help` usage block (no duplicate rows, one description column).
|
|
51
|
+
- `package-lock.json` root version synced to 9.5.1 (`bun.lock` carries no
|
|
52
|
+
root version), and the release workflow's manual dispatch now runs the
|
|
53
|
+
gate only — the GitHub Release and npm publish jobs are tag-gated, so
|
|
54
|
+
dispatching from a branch can't create a release on a non-tag ref.
|
|
55
|
+
- `--doctor` tests remove their temp config dirs after each test instead of
|
|
56
|
+
leaving them behind.
|
|
57
|
+
- **CI was red on `windows-latest`** — `tests/landing.test.ts` source-greps
|
|
58
|
+
`src/tui.ts` for a snippet containing `\n`, but Windows checks the tree out
|
|
59
|
+
with CRLF, so the assertion could never match there while every other OS
|
|
60
|
+
passed. The source-grep helpers now normalise line endings before
|
|
61
|
+
asserting; `tests/overlay-registry.test.ts` does the same.
|
|
62
|
+
|
|
63
|
+
---
|
|
64
|
+
|
|
65
|
+
## [9.5.0] — 2026-09-15 (released)
|
|
66
|
+
|
|
67
|
+
### Added
|
|
68
|
+
|
|
69
|
+
- **`ghfind user <name>`** — GitHub user profiles from the terminal, the
|
|
70
|
+
user-side counterpart to `ghfind org <name>`. Fetches the user's metadata
|
|
71
|
+
and public repos from the GitHub REST API and aggregates them into one
|
|
72
|
+
summary: public repo count, total stars/forks of the fetched repos,
|
|
73
|
+
followers/following, top languages by repo count, top 5 repos by stars, and
|
|
74
|
+
the 5 most recently pushed repos. Supports `--json`, `--csv`, `--markdown`,
|
|
75
|
+
`--count`, and `--limit` just like `org`, and honors `--token` for higher
|
|
76
|
+
rate limits. Leading `@` is stripped (`ghfind user @torvalds` works), and
|
|
77
|
+
Organization / Bot accounts are labeled with an `[org]` / `[bot]` badge in
|
|
78
|
+
text output (`[staff]` for site admins).
|
|
79
|
+
|
|
80
|
+
### Fixed
|
|
81
|
+
|
|
82
|
+
- `ghfind org <name>` mangled multi-word names with dashes (`ghfind org "in
|
|
83
|
+
tech"` looked up `in-tech`) — names are now joined with spaces, which the
|
|
84
|
+
API handles. In practice org logins are single tokens, so existing one-word
|
|
85
|
+
lookups are unaffected.
|
|
86
|
+
|
|
87
|
+
### Internal
|
|
88
|
+
|
|
89
|
+
- `src/user.ts` mirrors the org-profile module shape: pure
|
|
90
|
+
`normalizeUser`/`normalizeUserRepo` aggregate functions testable with
|
|
91
|
+
fixtures, thin formatters, and a `fetchUserProfile` wrapper that degrades
|
|
92
|
+
gracefully when the repos request fails (metadata is still returned).
|
|
93
|
+
- 27 new tests in `tests/user.test.ts` covering normalization, aggregation,
|
|
94
|
+
`@`-stripping, 404/network error paths, token headers, zero-repo users,
|
|
95
|
+
non-array API responses, badges, and all four formatters.
|
|
96
|
+
- **TUI overlay registry seam** — `src/tui.ts` is 2,867 lines and was the
|
|
97
|
+
most-changed file in the repo (28 of the last 200 commits). A new
|
|
98
|
+
`src/tui/overlays/registry.ts` introduces the seam that future
|
|
99
|
+
migrations will consume: `Overlay` interface plus `OVERLAYS` array and
|
|
100
|
+
`getOverlay()` lookup. The first overlay (`help`) is extracted behind
|
|
101
|
+
it. Behaviour is unchanged. Migration is gradual; subsequent commits
|
|
102
|
+
move one overlay at a time and rewire `showOverlay()` to query the
|
|
103
|
+
registry. 6 guard tests in `tests/overlay-registry.test.ts` pin the
|
|
104
|
+
registry contract and source-grep `src/tui.ts` to fail on drift between
|
|
105
|
+
the registered ids and the dispatcher's union type.
|
|
106
|
+
|
|
107
|
+
---
|
|
108
|
+
|
|
8
109
|
## [9.4.3] — 2026-09-13 (released)
|
|
9
110
|
|
|
10
111
|
### Added
|
|
112
|
+
|
|
11
113
|
- nothing added
|
|
12
114
|
|
|
13
115
|
### Changed
|
|
@@ -82,27 +184,6 @@ Format follows [Keep a Changelog](https://keepachangelog.com/en/1.0.0/). Publish
|
|
|
82
184
|
|
|
83
185
|
---
|
|
84
186
|
|
|
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
187
|
## [9.4.0] — 2026-08-28
|
|
107
188
|
|
|
108
189
|
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
|
|
@@ -77,6 +81,9 @@ ghfind "query" --pipe open # open in browser
|
|
|
77
81
|
ghfind "query" --pipe clone # clone commands
|
|
78
82
|
ghfind --trending --json # trending as JSON
|
|
79
83
|
ghfind --watch "query" # poll every 300s
|
|
84
|
+
ghfind --releases # new releases for bookmarked repos
|
|
85
|
+
ghfind --compare a/b c/d # side-by-side comparison
|
|
86
|
+
ghfind pkg "query" --json # npm package search as JSON
|
|
80
87
|
```
|
|
81
88
|
|
|
82
89
|
### Completions
|
|
@@ -94,6 +101,7 @@ ghfind --completion fish | source
|
|
|
94
101
|
<table>
|
|
95
102
|
<tr><td><b>Search</b></td><td>Free-text + qualifiers (<code>language:</code>, <code>stars:</code>, <code>topic:</code>), sort by stars/updated/forks</td></tr>
|
|
96
103
|
<tr><td><b>Trending</b></td><td>Today, week, month, year — filter by language</td></tr>
|
|
104
|
+
<tr><td><b>Packages</b></td><td>npm registry search (beta) — <code>ghfind pkg "query"</code></td></tr>
|
|
97
105
|
<tr><td><b>Bookmarks</b></td><td>Space → Bookmark / Bookmarks panel — save repos, tag them</td></tr>
|
|
98
106
|
<tr><td><b>Deep-dive</b></td><td>Space → Deep-dive — languages, contributors, README, activity chart</td></tr>
|
|
99
107
|
<tr><td><b>Compare</b></td><td>Space → Compare select / Compare view — side-by-side, select 2+ repos</td></tr>
|
|
@@ -103,7 +111,9 @@ ghfind --completion fish | source
|
|
|
103
111
|
<tr><td><b>Export</b></td><td>Space → Export — JSON, CSV, Markdown to file</td></tr>
|
|
104
112
|
<tr><td><b>Share</b></td><td>Space → Share repo — copy repo link to clipboard</td></tr>
|
|
105
113
|
<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>
|
|
114
|
+
<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
115
|
<tr><td><b>Notifications</b></td><td>Space → Notifications — view & dismiss alerts</td></tr>
|
|
116
|
+
<tr><td><b>Releases</b></td><td><code>--releases</code> — new-release feed for bookmarked repos</td></tr>
|
|
107
117
|
<tr><td><b>Graph</b></td><td>Space → Activity graph — commit chart, fullscreen toggle</td></tr>
|
|
108
118
|
<tr><td><b>Help</b></td><td><code>?</code> / <code>Ctrl+H</code> — keybindings reference</td></tr>
|
|
109
119
|
<tr><td><b>Watch</b></td><td><code>--watch</code> — poll for new results</td></tr>
|
|
@@ -112,6 +122,16 @@ ghfind --completion fish | source
|
|
|
112
122
|
<details>
|
|
113
123
|
<summary>Keybindings</summary>
|
|
114
124
|
|
|
125
|
+
**Landing screen** (the mode menu shown on launch)
|
|
126
|
+
|
|
127
|
+
| Key | Action |
|
|
128
|
+
| --------------------- | ---------------------------- |
|
|
129
|
+
| `↑` / `↓` — `j` / `k` | Navigate mode cards |
|
|
130
|
+
| `Enter` | Select mode / open Bookmarks |
|
|
131
|
+
| `b` | Jump straight to Bookmarks |
|
|
132
|
+
| `?` or `h` | Help overlay |
|
|
133
|
+
| `q` | Quit ghfind |
|
|
134
|
+
|
|
115
135
|
**Global shortcuts** (main view, no overlay active)
|
|
116
136
|
|
|
117
137
|
| Key | Action |
|
|
@@ -159,14 +179,16 @@ Actions shown depend on current mode (search vs trending) and selection:
|
|
|
159
179
|
|
|
160
180
|
**Overlay-specific shortcuts**
|
|
161
181
|
|
|
162
|
-
| Key
|
|
163
|
-
|
|
|
164
|
-
| `Esc` / `q`
|
|
165
|
-
| `Enter`
|
|
166
|
-
| `d`
|
|
167
|
-
| `Ctrl+X`
|
|
168
|
-
| `Ctrl+C`
|
|
169
|
-
| `Y` / `N` / `L`
|
|
182
|
+
| Key | Context | Action |
|
|
183
|
+
| -------------------------------- | ---------------------------------------------------- | ------------------------------------------- |
|
|
184
|
+
| `Esc` / `q` | Any overlay | Close overlay |
|
|
185
|
+
| `Enter` | Leader / History / Saved / Export / Topics / Share | Confirm selection |
|
|
186
|
+
| `d` | History / Bookmarks / Saved searches / Notifications | Delete current entry |
|
|
187
|
+
| `Ctrl+X` | History | Clear all history |
|
|
188
|
+
| `Ctrl+C` | Notifications | Dismiss all notifications |
|
|
189
|
+
| `Y` / `N` / `L` | Update modal | Yes (install) / No (skip) / Later (dismiss) |
|
|
190
|
+
| `↑` / `↓` — `j` / `k` | Update modal | Scroll release notes |
|
|
191
|
+
| `PgUp` / `PgDn` / `Home` / `End` | Update modal | Jump through release notes |
|
|
170
192
|
|
|
171
193
|
Trending tabs: `1`–`5` (Today → All) or `←`/`→` — `h`/`l`
|
|
172
194
|
|
|
@@ -215,14 +237,14 @@ cd ghfind
|
|
|
215
237
|
# With Bun (recommended for TUI)
|
|
216
238
|
bun install
|
|
217
239
|
bun start # TUI
|
|
218
|
-
bun test #
|
|
240
|
+
bun test # 295 tests
|
|
219
241
|
bun run check # format check + tests — the green gate
|
|
220
242
|
bun run build # build dist/
|
|
221
243
|
|
|
222
244
|
# Or with npm
|
|
223
245
|
npm install
|
|
224
246
|
npm start # TUI (requires Node 20+)
|
|
225
|
-
npm test #
|
|
247
|
+
npm test # 295 tests
|
|
226
248
|
npm run build # build dist/
|
|
227
249
|
|
|
228
250
|
> Want to contribute? See [CONTRIBUTING.md](CONTRIBUTING.md) for commands,
|
|
@@ -235,31 +257,22 @@ npm run build # build dist/
|
|
|
235
257
|
|
|
236
258
|
Recent releases (full history in [CHANGELOG.md](CHANGELOG.md)):
|
|
237
259
|
|
|
238
|
-
### v9.
|
|
239
|
-
|
|
240
|
-
- 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`, `?`)
|
|
241
|
-
- README viewer renders full markdown (headings, code blocks, lists, tables, blockquotes, rules) instead of stripping formatting
|
|
242
|
-
- Widened compare table columns (min 35 chars), added Description + URL rows, and raised the topic cap to 5 per repo
|
|
243
|
-
|
|
244
|
-
### v9.2.1
|
|
260
|
+
### v9.5.1
|
|
245
261
|
|
|
246
|
-
-
|
|
247
|
-
-
|
|
248
|
-
- Postinstall failures no longer break `npm install`; `bun` dropped from engines
|
|
249
|
-
- Fixed TUI layout on small terminals, trending visibility from the landing screen, and independent trending-tab fetches
|
|
262
|
+
- Fixed landing-screen keys leaking into the main view — `/`, `Space`, `t`, `c`, `?`, `q` all double-fired; `b` on the landing screen now opens Bookmarks
|
|
263
|
+
- Fixed the update panel clipping the changelog — release notes are now scrollable (`↑↓`/`j`/`k`, `PgUp`/`PgDn`, `Home`/`End`) in a taller panel
|
|
250
264
|
|
|
251
|
-
### v9.
|
|
265
|
+
### v9.5.0
|
|
252
266
|
|
|
253
|
-
-
|
|
254
|
-
-
|
|
267
|
+
- New `ghfind user <name>` command — user profiles like `ghfind org`: repos, total stars/forks, followers, top languages, top repos
|
|
268
|
+
- Supports `--json`, `--csv`, `--markdown`, `--count`, `--limit`, `--token`; `@` prefix accepted
|
|
269
|
+
- Fixed `ghfind org` mangling multi-word names with dashes
|
|
255
270
|
|
|
256
|
-
### v9.
|
|
271
|
+
### v9.3.0
|
|
257
272
|
|
|
258
|
-
-
|
|
259
|
-
-
|
|
260
|
-
-
|
|
261
|
-
- Tab qualifier auto-complete, PageUp/PageDown, `Ctrl+X` clear history, `Ctrl+C` clear notifications
|
|
262
|
-
- TUI runs on Node.js 20+ via the downloaded Bun binary
|
|
273
|
+
- 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`, `?`)
|
|
274
|
+
- README viewer renders full markdown (headings, code blocks, lists, tables, blockquotes, rules) instead of stripping formatting
|
|
275
|
+
- Widened compare table columns (min 35 chars), added Description + URL rows, and raised the topic cap to 5 per repo
|
|
263
276
|
|
|
264
277
|
---
|
|
265
278
|
|