github-search-cli 9.10.1 → 9.10.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 +14 -0
- package/README.md +5 -13
- package/dist/cli.js +11 -1
- package/package.json +1 -1
- package/release-notes/9.10.2.md +26 -0
- package/src/tui.ts +14 -0
package/CHANGELOG.md
CHANGED
|
@@ -6,6 +6,20 @@ Format follows [Keep a Changelog](https://keepachangelog.com/en/1.0.0/). Publish
|
|
|
6
6
|
|
|
7
7
|
---
|
|
8
8
|
|
|
9
|
+
## [9.10.2] — 2026-10-14 (released)
|
|
10
|
+
|
|
11
|
+
### Fixed
|
|
12
|
+
|
|
13
|
+
- **`Ctrl+E` opens the export chooser.** The startup tip list advertises
|
|
14
|
+
"Press Ctrl+E to export results as CSV or Markdown", but no handler ever
|
|
15
|
+
claimed the chord: `Ctrl+E` did nothing on the results screen, and while the
|
|
16
|
+
query input was focused its emacs binding read the same chord as "move to
|
|
17
|
+
line end". The key handler now claims `Ctrl+E` before the input sees it and
|
|
18
|
+
opens the export overlay (JSON / CSV / Markdown / plain text). With results on
|
|
19
|
+
screen that is the shortest route to a `ghfind-export-<ts>.<ext>` file; with
|
|
20
|
+
an empty result list the status bar reports "No results to export — run a
|
|
21
|
+
search first" instead of opening an empty chooser.
|
|
22
|
+
|
|
9
23
|
## [9.10.1] — 2026-10-08 (released)
|
|
10
24
|
|
|
11
25
|
### Fixed
|
package/README.md
CHANGED
|
@@ -216,6 +216,7 @@ ghfind --completion fish | source
|
|
|
216
216
|
| `↑` / `↓` — `j` / `k` | Navigate results & menus |
|
|
217
217
|
| `Esc` | Open / close leader menu (contextual actions) |
|
|
218
218
|
| `Tab` | Auto-complete search qualifier |
|
|
219
|
+
| `Ctrl+E` | Export results (JSON / CSV / Markdown / text) |
|
|
219
220
|
| `?` or `Ctrl+H` | Help overlay |
|
|
220
221
|
| `1`–`5` | Switch trending tabs (Today → All) |
|
|
221
222
|
| `←` / `→` — `h` / `l` | Switch trending tabs (left/right) |
|
|
@@ -388,6 +389,10 @@ for the architecture, measurements, and remaining work.
|
|
|
388
389
|
|
|
389
390
|
Recent releases (full history in [CHANGELOG.md](CHANGELOG.md)):
|
|
390
391
|
|
|
392
|
+
### v9.10.2
|
|
393
|
+
|
|
394
|
+
- **`Ctrl+E` opens the export chooser** — the startup tip advertised "Press Ctrl+E to export results as CSV or Markdown", but nothing bound the chord: it was ignored on the results screen and, while the query input had focus, its emacs binding read it as "move to line end"; it now opens the export overlay (JSON / CSV / Markdown / plain text), or reports that there is nothing to export yet
|
|
395
|
+
|
|
391
396
|
### v9.10.1
|
|
392
397
|
|
|
393
398
|
- **`--interval` is parsed again** — it was documented in `--help`, the README, the how-to guide and all three shell completions, but `parseArgs` had no case for it, so `ghfind --watch --interval 60` searched for the literal string `--interval 60` and polled at the default 300s anyway
|
|
@@ -410,19 +415,6 @@ Recent releases (full history in [CHANGELOG.md](CHANGELOG.md)):
|
|
|
410
415
|
- **`Space` now always types a space, and `Esc` opens the command menu** — `Space` opened the menu only while the query input was unfocused, and the only thing that unfocused it was clicking a result row, so `Space` worked only after a mouse click; `Esc` already closed every overlay, so it gains a meaning rather than losing one
|
|
411
416
|
- **A hover highlight no longer painted lists magenta** — OpenTUI's colour parser accepts only hex and CSS names, so an `rgba()` tint fell through to its magenta fallback
|
|
412
417
|
|
|
413
|
-
### v9.9.0
|
|
414
|
-
|
|
415
|
-
- **Queries are understood before they are sent** — every surface (TUI, CLI, MCP, `--watch`) parses and checks a query first, so a typo or bad value fails with a specific message and a fix instead of an opaque GitHub 422 or a misleading "network error"; previously only the TUI ran validation at all
|
|
416
|
-
- **Qualifier typos are corrected** — `langauge:Rust` → `language:Rust`, `star:1000` → `stars:1000`, `push:>` → `pushed:>`; correction is limited to the qualifiers ghfind knows, so `is:`, `has:` and `props.*` are never mangled
|
|
417
|
-
- **Counts accept `k`/`m`** — `stars:10k` → `stars:>=10000`, `size:1m`, `stars:1k..10k`; a bare count keeps GitHub's exact-match meaning, so `stars:100` is still exactly 100
|
|
418
|
-
- **Values are validated per qualifier** — numeric counts, `fork:true|false|only`, `archived:true|false`, calendar-checked ISO8601 dates for `created`/`pushed`/`updated`, the `visibility:` enum, and `in:` fields; documented comma-lists like `in:name,description` still work
|
|
419
|
-
- **Zero results suggest how to loosen the query** — `No results for "rust stars:>=5000000"` now offers `Try: rust stars:>=500000`, ranked by how sharply each qualifier narrows results
|
|
420
|
-
- **`GHFIND_LOG=<path>` writes TUI diagnostics to a file** — the TUI's logger was a silent no-op, making API failures undiagnosable; token values are redacted from logged URLs
|
|
421
|
-
- **A 403 no longer claims SSO is the cause** — SSO enforcement, secondary rate limits and org restrictions all produce it, and the message asserted the first one unconditionally; it now reports GitHub's own reason
|
|
422
|
-
- **The post-upgrade panel no longer reappears on every launch** — it was triggered by a version inequality nothing ever cleared, so it showed after every single launch _including_ after "later" or "never"; it now acknowledges itself once shown
|
|
423
|
-
- **A prerelease is no longer offered as an upgrade** — the version comparison used by Node and the compiled binaries reported `9.9.0-beta.1` as newer than `9.9.0`, i.e. a downgrade; it now follows npm ordering and ignores build metadata
|
|
424
|
-
- **A new [how-to guide](docs/HOW-TO.md)** — token setup, writing queries, reading results, recovering from errors, and copy-paste recipes
|
|
425
|
-
|
|
426
418
|
## License
|
|
427
419
|
|
|
428
420
|
MIT
|
package/dist/cli.js
CHANGED
|
@@ -2154,7 +2154,7 @@ var cached = null;
|
|
|
2154
2154
|
function getVersion() {
|
|
2155
2155
|
if (cached) return cached;
|
|
2156
2156
|
if (true) {
|
|
2157
|
-
cached = "9.10.
|
|
2157
|
+
cached = "9.10.2";
|
|
2158
2158
|
return cached;
|
|
2159
2159
|
}
|
|
2160
2160
|
try {
|
|
@@ -8000,6 +8000,16 @@ ${pack.description ?? ""}`;
|
|
|
8000
8000
|
showOverlay("help");
|
|
8001
8001
|
return;
|
|
8002
8002
|
}
|
|
8003
|
+
if (key.ctrl && key.name === "e") {
|
|
8004
|
+
key.stopPropagation();
|
|
8005
|
+
if (currentRepos.length > 0) {
|
|
8006
|
+
showOverlay("export");
|
|
8007
|
+
} else {
|
|
8008
|
+
setStatus("No results to export \u2014 run a search first");
|
|
8009
|
+
}
|
|
8010
|
+
renderer.requestRender();
|
|
8011
|
+
return;
|
|
8012
|
+
}
|
|
8003
8013
|
if (key.name === "tab") {
|
|
8004
8014
|
if (searchBox.visible) {
|
|
8005
8015
|
const val = searchInput.value;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "github-search-cli",
|
|
3
|
-
"version": "9.10.
|
|
3
|
+
"version": "9.10.2",
|
|
4
4
|
"description": "Search GitHub from your terminal — repo search, trending repos, npm package search, bookmarks, deep-dive, compare, export. Keyboard + mouse TUI + pipeable CLI.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"packageManager": "bun@1",
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
# v9.10.2
|
|
2
|
+
|
|
3
|
+
A one-key release: the export shortcut the app has been advertising in its own
|
|
4
|
+
startup tips now exists.
|
|
5
|
+
|
|
6
|
+
## `Ctrl+E` exported nothing
|
|
7
|
+
|
|
8
|
+
The tip list in `src/tips.ts` advertises _"Press Ctrl+E to export results as
|
|
9
|
+
CSV or Markdown"_. Nothing bound the chord. On the results screen `Ctrl+E` was
|
|
10
|
+
ignored outright, and while the query input had focus the line editor's default
|
|
11
|
+
emacs binding claimed the same chord as "move to line end" — the one place it
|
|
12
|
+
did something, it did the wrong thing.
|
|
13
|
+
|
|
14
|
+
The key handler now claims `Ctrl+E` before the input ever sees it, and opens
|
|
15
|
+
the export overlay: JSON, CSV, Markdown, or plain text.
|
|
16
|
+
|
|
17
|
+
- With results on screen, `Ctrl+E` goes straight to the chooser — no detour
|
|
18
|
+
through the leader menu (`Esc` → Navigate → Export) — and writes the same
|
|
19
|
+
`ghfind-export-<ts>.<ext>` file the overlay always wrote.
|
|
20
|
+
- With an empty result list it does not open an empty chooser: the status bar
|
|
21
|
+
says `No results to export — run a search first`.
|
|
22
|
+
|
|
23
|
+
## Nothing else changed
|
|
24
|
+
|
|
25
|
+
The export overlay itself is untouched — the shortcut drives the existing
|
|
26
|
+
overlay rather than growing a second code path that could drift from it.
|
package/src/tui.ts
CHANGED
|
@@ -3458,6 +3458,20 @@ ${pack.description ?? ""}`;
|
|
|
3458
3458
|
showOverlay("help");
|
|
3459
3459
|
return;
|
|
3460
3460
|
}
|
|
3461
|
+
// Ctrl+E opens the export chooser (CSV / Markdown / JSON / plain text)
|
|
3462
|
+
// straight from the results — the shortcut the startup tip advertises.
|
|
3463
|
+
// Claim the chord first: while the query input is focused its default
|
|
3464
|
+
// emacs binding would otherwise also treat Ctrl+E as "move to line end".
|
|
3465
|
+
if (key.ctrl && key.name === "e") {
|
|
3466
|
+
key.stopPropagation();
|
|
3467
|
+
if (currentRepos.length > 0) {
|
|
3468
|
+
showOverlay("export");
|
|
3469
|
+
} else {
|
|
3470
|
+
setStatus("No results to export — run a search first");
|
|
3471
|
+
}
|
|
3472
|
+
renderer.requestRender();
|
|
3473
|
+
return;
|
|
3474
|
+
}
|
|
3461
3475
|
|
|
3462
3476
|
// Tab auto-completes qualifiers in search input
|
|
3463
3477
|
if (key.name === "tab") {
|