github-search-cli 9.4.0 → 9.4.2

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 CHANGED
@@ -1,192 +1,280 @@
1
- # Changelog
2
-
3
- All notable changes to `github-search-cli` (published as the `ghfind` binary).
4
-
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
-
7
- ---
8
-
9
- ## [Unreleased] — 9.4.0
10
-
11
- Release tracking for bookmarked repos, plus a bookmarks page and toast notifications in the TUI.
12
-
13
- ### Added
14
-
15
- **Release tracker** — follow releases of repos you've bookmarked
16
- - `src/releases.ts` — checks each bookmarked repo against `GET /repos/{owner}/{repo}/releases?per_page=5`
17
- - Seen state is `lastSeenAt` per bookmark; "new" means published after that timestamp
18
- - ETag conditional requests + `GITHUB_TOKEN` when available to conserve rate budget
19
- - Prereleases shown and tagged `[pre]`; drafts never shown
20
- - `ghfind --releases` prints the new-release feed, then marks everything seen; `--releases --json` for machine output
21
- - Opening the Notifications panel (Space → System → Notifications) now runs a check in the background and files each new release as a `🚀` notification
22
-
23
- **Bookmarks page** — bookmarks are now a first-class mode, not an overlay
24
- - Reachable from the landing screen (`b`, or `Enter` on the new button) and from Space → Navigate → Bookmarks
25
- - `Enter` opens the repo in a browser, `d` removes, `Esc` / `←` returns to landing
26
- - `SessionState.mode` accepts `"bookmarks"`, so a restart restores you onto the page
27
-
28
- **Landing bookmarks button** — fourth selectable row below the three mode cards, with a live count (`4 saved` / `none yet`) refreshed on every visit
29
-
30
- **Toast popup** — top-right rounded card confirming bookmark changes; green border for bookmarked, yellow for unbookmarked, auto-hides after 2s
31
-
32
- **`b` keybinding** — toggles bookmark on the selected repo from the main view (previously only reachable via Space → Repo → Bookmark)
33
-
34
- **Diagnostics: `ghfind --doctor`** — environment troubleshooting command for the interactive TUI
35
- - 10 checks: runtime, bundled Bun, system Bun, Node version, build output, source, TTY, config validity, GitHub token, state/cache dirs
36
- - Per-check status: green `PASS`, yellow `WARN`, red `FAIL`; non-zero exit on any FAIL so scripts can detect broken installs
37
- - `src/doctor.ts` is purely diagnostic (no TUI, no network) and exits with code 1 if any check fails
38
- - `bin/ghfind.js` Strategy 1 now prefers the bundled `vendor/bun` (downloaded by `postinstall.js`) and falls back to a system-installed `bun` on PATH; doctor confirms which one wins
39
-
40
- **Error report on uncaught exceptions** — never auto-posts
41
- - When `ghfind` hits an unexpected error, builds a pre-filled `https://github.com/codersdfs/search-cli/issues/new?title=...&body=...&labels=bug` URL with the error class, message, stack, command line, and environment (ghfind version, runtime, platform)
42
- - Tries to open the URL in the user's default browser (Bun.spawn when available, child_process.spawn detached fallback for Node); prints the URL when no browser can be launched
43
- - Known user-facing errors (`SearchCliError` subclasses) keep their existing friendly message and skip the report flow
44
- - `src/error-report.ts` is the new module; `tests/error-report.test.ts` covers URL format, ANSI stripping, long-message truncation, non-Error throwables, env + command in body
45
-
46
- ### Fixed
47
- - Landing screen vanished after the bookmarks page landed — `showLanding()` revealed `landingBox` before `hideMainContent()` hid it again; ordering corrected
48
- - Arrow keys moved the landing selection *and* the bookmarks list at the same time — the landing handler only checked `currentMode`, which opening bookmarks doesn't change. Now gated on `landingKeysActive(mode, overlay)`
49
- - `Enter` on the landing bookmarks button immediately opened the first bookmark in a browser — the same key event reached the global handler after the page opened. Consumed keys now call `key.stopPropagation()`
50
- - `q` inside the bookmarks overlay quit the app instead of closing it — same double-handling root cause
51
- - `tests/tips.test.ts` imported a `TipRotator` class that `src/tips.ts` never exported, so its module-load error was misattributed to whichever test file ran next. Added the class and `defaultRotator`; behavior unchanged
52
-
53
- ### Changed
54
- - Help screen: new "Bookmarks Page" section; `b` / `c` / `t` documented under Main View; Landing section documents the button; "Overlay Keys" no longer lists bookmarks
55
- - Leader menu "Notifications" now reads "View alerts — checks bookmarks for new releases"
56
- - Landing hint line includes `[b]ookmarks`
57
- - `Bookmark` type gains `lastSeenAt`; `src/bookmarks.ts` exports `getLastSeen()` / `markSeen()`
58
-
59
- ### Internal
60
- - Extracted `src/toast.ts` and `src/landing.ts` so the toast, button, and key-routing predicates are testable without booting the TUI
61
- - Tests: 187 passing — `tests/landing.test.ts` (30), `tests/toast.test.ts` (6), `tests/releases.test.ts`, `tests/tips.test.ts`, `tests/doctor.test.ts` (2), `tests/error-report.test.ts` (6)
62
-
63
- ---
64
-
65
- ## [9.3.0] — 2026-08-24
66
-
67
- ### Fixed
68
- - `c` keybinding in the TUI not adding repos to comparison — a missing closing brace in the space-key handler broke every later key handler (`c`, `t`, `?`)
69
- - README viewer now renders full markdown (headings, code blocks, lists, tables, blockquotes, rules) instead of stripping formatting
70
-
71
- ### Changed
72
- - Widened compare table columns (min 35 chars) and added Description + URL rows
73
- - Compare table shows up to 5 topics per repo (was 3)
74
-
75
- ---
76
-
77
- ## [9.2.1] — 2026-08-23
78
-
79
- ### Added
80
- - npm package search (beta)
81
- - New landing screen with selectable mode cards
82
-
83
- ### Fixed
84
- - TUI layout issues on small terminals
85
- - Trending not visible when launched from the landing screen — `loadTrending()` was the only mode switch that didn't set `body.visible`
86
- - Trending tabs now fetch independently, with an active-tab underline
87
-
88
- ### Changed
89
- - Removed the bundled Bun binary from the npm package; it is downloaded at install time on all platforms
90
- - Package size reduced from 39.5 MB to 100 KB
91
- - Postinstall no longer fails `npm install` when the Bun download fails (graceful fallback)
92
- - Removed `bun` from the engines field — Bun need not be pre-installed
93
- - Non-interactive modes (`--json`, `--csv`, …) run on Node.js 20+ alone
94
-
95
- ---
96
-
97
- ## [9.1.1] — 2026-08-11
98
-
99
- ### Fixed
100
- - Postinstall now exits with code 1 on Bun download failure
101
- - Removed dead Strategy 3 fallback in `bin/ghfind.js` (Node cannot import `.ts`)
102
-
103
- ### Changed
104
- - Bundle `vendor/` and `dist/` in the npm package for offline install
105
- - Bundled Bun updated from 1.3.12 to 1.3.14
106
-
107
- ---
108
-
109
- ## [9.1.0] — 2026-08-07
110
-
111
- ### Added
112
- - Automatic update checking against the npm registry, with a Y/N/L modal (install now / skip / dismiss)
113
- - Leader menu (Space) consolidating all contextual actions
114
- - Topic explorer, notifications panel, and saved searches overlay
115
- - Activity graph toggle (commit chart fullscreen)
116
- - README viewer
117
- - Tab auto-complete for search qualifiers
118
- - PageUp / PageDown navigation
119
- - `Ctrl+X` clears history, `Ctrl+C` clears all notifications
120
-
121
- ### Fixed
122
- - Postinstall downloads the Bun binary correctly on all platforms
123
- - Zip asset names match Bun's current release naming
124
- - Zip parsing uses the central directory instead of local file headers
125
- - `postinstall` uses `node` instead of `bun run`, so Bun need not be pre-installed
126
- - TUI works on Node.js 20+ via the downloaded Bun binary
127
-
128
- ### Changed
129
- - Removed `vendor/` from the npm package (Bun downloaded at install time)
130
- - Improved export error handling and format selection
131
-
132
- ---
133
-
134
- ## [0.9.0] — 2026-07-31
135
-
136
- ### Added
137
- - Watch mode (`--watch`) for polling a query
138
- - Notifications panel and UI refinements
139
-
140
- ### Fixed
141
- - Trending browser fixes
142
-
143
- ---
144
-
145
- ## [0.8.2] — 2026-07-31
146
-
147
- ### Fixed
148
- - TUI stability fixes; rewritten keybindings reference
149
-
150
- ---
151
-
152
- ## [0.8.1] — 2026-07-27
153
-
154
- ### Fixed
155
- - Follow-up fixes to the 0.8.0 breaking change
156
-
157
- ---
158
-
159
- ## [0.8.0] — 2026-07-26
160
-
161
- ### Added
162
- - Trending browser, deep-dive, compare, export, share, topics, saved searches
163
- - Activity graph, README viewer, notifications panel
164
-
165
- **Breaking:** entry point and command surface changed; 0.8.1 shipped the same day as an emergency follow-up
166
-
167
- ---
168
-
169
- ## [0.7.0] — 2026-07-25
170
-
171
- ### Added
172
- - Bookmarks and search history
173
-
174
- ---
175
-
176
- ## [0.6.1] — 2026-07-24
177
-
178
- ### Fixed
179
- - Fixes for the initial release
180
-
181
- ---
182
-
183
- ## [0.6.0] — 2026-07-23
184
-
185
- ### Added
186
- - First public release: repo search with qualifiers, sorting, and JSON output
187
-
188
- ---
189
-
190
- ## A note on version numbers
191
-
192
- The jump from `0.9.0` to `9.1.0` was a one-time renumbering, not 9 major releases. The `9.x` line begins with the update checker and leader menu. There is no `9.0.0`, and `9.2.0` was never published — `9.2.1` superseded it before release.
1
+ # Changelog
2
+
3
+ All notable changes to `github-search-cli` (published as the `ghfind` binary).
4
+
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
+
7
+ ---
8
+
9
+ ## — 9.4.2
10
+
11
+ ### Added
12
+
13
+ - **Standalone binaries** — the release workflow now compiles
14
+ self-contained `ghfind-<os>-<arch>` executables (Linux, macOS, Windows)
15
+ via `bun build --compile` and attaches them to GitHub Releases. No
16
+ Node.js or Bun needed — unblocks Homebrew / Scoop / winget / curl
17
+ install channels.
18
+ - **npm provenance** — `publish-npm` runs `npm publish --provenance` with
19
+ `id-token: write`, so published tarballs carry a verifiable provenance
20
+ badge on npmjs.com.
21
+ - `src/version.ts` — single source for version resolution. Primary
22
+ source is the `__GHFIND_VERSION__` constant injected at build time
23
+ (tsup `define`, bun `--define`); falls back to reading package.json
24
+ relative to the module in source/dist trees.
25
+ - **README trust & comparison** — npm version / weekly downloads / CI /
26
+ TypeScript / license badges; a "Why ghfind?" table vs `gh search` and
27
+ `hub`; standalone-binary install section.
28
+
29
+ ### Changed
30
+
31
+ - Package description and keywords rewritten around real search intent
32
+ (9 → 17 keywords, e.g. `github-search`, `trending-repositories`,
33
+ `commandline`, `npm-search`, `octokit`).
34
+
35
+ ### Fixed
36
+
37
+ - **In-app update loop was broken** — `performUpdate()` ran
38
+ `npm install -g ghfind`, but no `ghfind` package exists on npm; every
39
+ "Yes" on the update modal failed. Now installs `github-search-cli`,
40
+ and works under Node.js too (previous code used `Bun.spawn`
41
+ unconditionally).
42
+ - **`--version` crashed in compiled binaries** — version was read from
43
+ `package.json` via filesystem paths in `cli.ts`, `tui.ts`,
44
+ `update-check.ts`, and `error-report.ts`, which do not exist inside a
45
+ single-file executable. Version is now embedded at build time.
46
+
47
+ ---
48
+
49
+ ## [Unreleased] — 9.4.1
50
+
51
+ ## [Unreleased] — 9.4.1
52
+
53
+ ### Changed
54
+
55
+ - **TUI overlay registry seam** — `src/tui.ts` is 2,867 lines and was the
56
+ most-changed file in the repo (28 of the last 200 commits). A new
57
+ `src/tui/overlays/registry.ts` introduces the seam that future
58
+ migrations will consume: `Overlay` interface plus `OVERLAYS` array and
59
+ `getOverlay()` lookup. The first overlay (`help`) is extracted behind
60
+ it. Behaviour is unchanged. Migration is gradual; subsequent commits
61
+ move one overlay at a time and rewire `showOverlay()` to query the
62
+ registry.
63
+
64
+ ### Added
65
+
66
+ - 6 guard tests in `tests/overlay-registry.test.ts` pin the registry
67
+ contract and source-grep `src/tui.ts` to fail on drift between the
68
+ registered ids and the dispatcher's union type.
69
+
70
+ ---
71
+
72
+ ## [9.4.0] — 2026-08-28
73
+
74
+ Release tracking for bookmarked repos, plus a bookmarks page and toast notifications in the TUI.
75
+
76
+ ### Added
77
+
78
+ **Release tracker** — follow releases of repos you've bookmarked
79
+
80
+ - `src/releases.ts` — checks each bookmarked repo against `GET /repos/{owner}/{repo}/releases?per_page=5`
81
+ - Seen state is `lastSeenAt` per bookmark; "new" means published after that timestamp
82
+ - ETag conditional requests + `GITHUB_TOKEN` when available to conserve rate budget
83
+ - Prereleases shown and tagged `[pre]`; drafts never shown
84
+ - `ghfind --releases` prints the new-release feed, then marks everything seen; `--releases --json` for machine output
85
+ - Opening the Notifications panel (Space → System → Notifications) now runs a check in the background and files each new release as a `🚀` notification
86
+
87
+ **Bookmarks page** — bookmarks are now a first-class mode, not an overlay
88
+
89
+ - Reachable from the landing screen (`b`, or `Enter` on the new button) and from Space → Navigate → Bookmarks
90
+ - `Enter` opens the repo in a browser, `d` removes, `Esc` / `←` returns to landing
91
+ - `SessionState.mode` accepts `"bookmarks"`, so a restart restores you onto the page
92
+
93
+ **Landing bookmarks button** — fourth selectable row below the three mode cards, with a live count (`4 saved` / `none yet`) refreshed on every visit
94
+
95
+ **Toast popup** — top-right rounded card confirming bookmark changes; green border for bookmarked, yellow for unbookmarked, auto-hides after 2s
96
+
97
+ **`b` keybinding** — toggles bookmark on the selected repo from the main view (previously only reachable via Space → Repo → Bookmark)
98
+
99
+ **Diagnostics: `ghfind --doctor`** — environment troubleshooting command for the interactive TUI
100
+
101
+ - 10 checks: runtime, bundled Bun, system Bun, Node version, build output, source, TTY, config validity, GitHub token, state/cache dirs
102
+ - Per-check status: green `PASS`, yellow `WARN`, red `FAIL`; non-zero exit on any FAIL so scripts can detect broken installs
103
+ - `src/doctor.ts` is purely diagnostic (no TUI, no network) and exits with code 1 if any check fails
104
+ - `bin/ghfind.js` Strategy 1 now prefers the bundled `vendor/bun` (downloaded by `postinstall.js`) and falls back to a system-installed `bun` on PATH; doctor confirms which one wins
105
+
106
+ **Error report on uncaught exceptions** — never auto-posts
107
+
108
+ - When `ghfind` hits an unexpected error, builds a pre-filled `https://github.com/codersdfs/search-cli/issues/new?title=...&body=...&labels=bug` URL with the error class, message, stack, command line, and environment (ghfind version, runtime, platform)
109
+ - Tries to open the URL in the user's default browser (Bun.spawn when available, child_process.spawn detached fallback for Node); prints the URL when no browser can be launched
110
+ - Known user-facing errors (`SearchCliError` subclasses) keep their existing friendly message and skip the report flow
111
+ - `src/error-report.ts` is the new module; `tests/error-report.test.ts` covers URL format, ANSI stripping, long-message truncation, non-Error throwables, env + command in body
112
+
113
+ ### Fixed
114
+
115
+ - Landing screen vanished after the bookmarks page landed — `showLanding()` revealed `landingBox` before `hideMainContent()` hid it again; ordering corrected
116
+ - Arrow keys moved the landing selection _and_ the bookmarks list at the same time — the landing handler only checked `currentMode`, which opening bookmarks doesn't change. Now gated on `landingKeysActive(mode, overlay)`
117
+ - `Enter` on the landing bookmarks button immediately opened the first bookmark in a browser — the same key event reached the global handler after the page opened. Consumed keys now call `key.stopPropagation()`
118
+ - `q` inside the bookmarks overlay quit the app instead of closing it — same double-handling root cause
119
+ - `tests/tips.test.ts` imported a `TipRotator` class that `src/tips.ts` never exported, so its module-load error was misattributed to whichever test file ran next. Added the class and `defaultRotator`; behavior unchanged
120
+
121
+ ### Changed
122
+
123
+ - Help screen: new "Bookmarks Page" section; `b` / `c` / `t` documented under Main View; Landing section documents the button; "Overlay Keys" no longer lists bookmarks
124
+ - Leader menu "Notifications" now reads "View alerts — checks bookmarks for new releases"
125
+ - Landing hint line includes `[b]ookmarks`
126
+ - `Bookmark` type gains `lastSeenAt`; `src/bookmarks.ts` exports `getLastSeen()` / `markSeen()`
127
+
128
+ ### Internal
129
+
130
+ - Extracted `src/toast.ts` and `src/landing.ts` so the toast, button, and key-routing predicates are testable without booting the TUI
131
+ - Tests: 187 passing — `tests/landing.test.ts` (30), `tests/toast.test.ts` (6), `tests/releases.test.ts`, `tests/tips.test.ts`, `tests/doctor.test.ts` (2), `tests/error-report.test.ts` (6)
132
+
133
+ ---
134
+
135
+ ## [9.3.0] — 2026-08-24
136
+
137
+ ### Fixed
138
+
139
+ - `c` keybinding in the TUI not adding repos to comparison — a missing closing brace in the space-key handler broke every later key handler (`c`, `t`, `?`)
140
+ - README viewer now renders full markdown (headings, code blocks, lists, tables, blockquotes, rules) instead of stripping formatting
141
+
142
+ ### Changed
143
+
144
+ - Widened compare table columns (min 35 chars) and added Description + URL rows
145
+ - Compare table shows up to 5 topics per repo (was 3)
146
+
147
+ ---
148
+
149
+ ## [9.2.1] — 2026-08-23
150
+
151
+ ### Added
152
+
153
+ - npm package search (beta)
154
+ - New landing screen with selectable mode cards
155
+
156
+ ### Fixed
157
+
158
+ - TUI layout issues on small terminals
159
+ - Trending not visible when launched from the landing screen — `loadTrending()` was the only mode switch that didn't set `body.visible`
160
+ - Trending tabs now fetch independently, with an active-tab underline
161
+
162
+ ### Changed
163
+
164
+ - Removed the bundled Bun binary from the npm package; it is downloaded at install time on all platforms
165
+ - Package size reduced from 39.5 MB to 100 KB
166
+ - Postinstall no longer fails `npm install` when the Bun download fails (graceful fallback)
167
+ - Removed `bun` from the engines field — Bun need not be pre-installed
168
+ - Non-interactive modes (`--json`, `--csv`, …) run on Node.js 20+ alone
169
+
170
+ ---
171
+
172
+ ## [9.1.1] — 2026-08-11
173
+
174
+ ### Fixed
175
+
176
+ - Postinstall now exits with code 1 on Bun download failure
177
+ - Removed dead Strategy 3 fallback in `bin/ghfind.js` (Node cannot import `.ts`)
178
+
179
+ ### Changed
180
+
181
+ - Bundle `vendor/` and `dist/` in the npm package for offline install
182
+ - Bundled Bun updated from 1.3.12 to 1.3.14
183
+
184
+ ---
185
+
186
+ ## [9.1.0] — 2026-08-07
187
+
188
+ ### Added
189
+
190
+ - Automatic update checking against the npm registry, with a Y/N/L modal (install now / skip / dismiss)
191
+ - Leader menu (Space) consolidating all contextual actions
192
+ - Topic explorer, notifications panel, and saved searches overlay
193
+ - Activity graph toggle (commit chart fullscreen)
194
+ - README viewer
195
+ - Tab auto-complete for search qualifiers
196
+ - PageUp / PageDown navigation
197
+ - `Ctrl+X` clears history, `Ctrl+C` clears all notifications
198
+
199
+ ### Fixed
200
+
201
+ - Postinstall downloads the Bun binary correctly on all platforms
202
+ - Zip asset names match Bun's current release naming
203
+ - Zip parsing uses the central directory instead of local file headers
204
+ - `postinstall` uses `node` instead of `bun run`, so Bun need not be pre-installed
205
+ - TUI works on Node.js 20+ via the downloaded Bun binary
206
+
207
+ ### Changed
208
+
209
+ - Removed `vendor/` from the npm package (Bun downloaded at install time)
210
+ - Improved export error handling and format selection
211
+
212
+ ---
213
+
214
+ ## [0.9.0] — 2026-07-31
215
+
216
+ ### Added
217
+
218
+ - Watch mode (`--watch`) for polling a query
219
+ - Notifications panel and UI refinements
220
+
221
+ ### Fixed
222
+
223
+ - Trending browser fixes
224
+
225
+ ---
226
+
227
+ ## [0.8.2] — 2026-07-31
228
+
229
+ ### Fixed
230
+
231
+ - TUI stability fixes; rewritten keybindings reference
232
+
233
+ ---
234
+
235
+ ## [0.8.1] — 2026-07-27
236
+
237
+ ### Fixed
238
+
239
+ - Follow-up fixes to the 0.8.0 breaking change
240
+
241
+ ---
242
+
243
+ ## [0.8.0] — 2026-07-26
244
+
245
+ ### Added
246
+
247
+ - Trending browser, deep-dive, compare, export, share, topics, saved searches
248
+ - Activity graph, README viewer, notifications panel
249
+
250
+ **Breaking:** entry point and command surface changed; 0.8.1 shipped the same day as an emergency follow-up
251
+
252
+ ---
253
+
254
+ ## [0.7.0] — 2026-07-25
255
+
256
+ ### Added
257
+
258
+ - Bookmarks and search history
259
+
260
+ ---
261
+
262
+ ## [0.6.1] — 2026-07-24
263
+
264
+ ### Fixed
265
+
266
+ - Fixes for the initial release
267
+
268
+ ---
269
+
270
+ ## [0.6.0] — 2026-07-23
271
+
272
+ ### Added
273
+
274
+ - First public release: repo search with qualifiers, sorting, and JSON output
275
+
276
+ ---
277
+
278
+ ## A note on version numbers
279
+
280
+ The jump from `0.9.0` to `9.1.0` was a one-time renumbering, not 9 major releases. The `9.x` line begins with the update checker and leader menu. There is no `9.0.0`, and `9.2.0` was never published — `9.2.1` superseded it before release.