github-search-cli 9.10.1 → 9.10.3

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
@@ -6,6 +6,30 @@ Format follows [Keep a Changelog](https://keepachangelog.com/en/1.0.0/). Publish
6
6
 
7
7
  ---
8
8
 
9
+ ## [9.10.3] — 2026-10-14 (released)
10
+
11
+ ### Fixed
12
+
13
+ - **The help overlay documents `Ctrl+E`.** The utility-keys section listed `t`,
14
+ `Ctrl+X` and `Ctrl+C` but not the export shortcut, so the keybinding
15
+ reference was the one place `Ctrl+E` went unmentioned — the startup tip and
16
+ the README both advertised it. It now appears alongside the other utility
17
+ keys as `Ctrl+E` — "Export results (CSV / Markdown / JSON / text)".
18
+
19
+ ## [9.10.2] — 2026-10-14 (released)
20
+
21
+ ### Fixed
22
+
23
+ - **`Ctrl+E` opens the export chooser.** The startup tip list advertises
24
+ "Press Ctrl+E to export results as CSV or Markdown", but no handler ever
25
+ claimed the chord: `Ctrl+E` did nothing on the results screen, and while the
26
+ query input was focused its emacs binding read the same chord as "move to
27
+ line end". The key handler now claims `Ctrl+E` before the input sees it and
28
+ opens the export overlay (JSON / CSV / Markdown / plain text). With results on
29
+ screen that is the shortest route to a `ghfind-export-<ts>.<ext>` file; with
30
+ an empty result list the status bar reports "No results to export — run a
31
+ search first" instead of opening an empty chooser.
32
+
9
33
  ## [9.10.1] — 2026-10-08 (released)
10
34
 
11
35
  ### 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,14 @@ 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.3
393
+
394
+ - **The help overlay lists `Ctrl+E`** — the utility-keys section documented `t`, `Ctrl+X` and `Ctrl+C` but not the export shortcut the startup tip and the README already advertised
395
+
396
+ ### v9.10.2
397
+
398
+ - **`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
399
+
391
400
  ### v9.10.1
392
401
 
393
402
  - **`--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
@@ -399,30 +408,6 @@ Recent releases (full history in [CHANGELOG.md](CHANGELOG.md)):
399
408
  - **The MCP `ghfind_user_profile` tool returns formatted text**, matching `ghfind_org_profile` and the CLI's default `ghfind user` output; the raw JSON still rides along in `data`
400
409
  - **Quit paths release the terminal** — the main TUI, the trending view and the package browser call `renderer.destroy()` before exiting, and the trending footer's `/` hint now matches the scroll-to-top key it actually binds
401
410
 
402
- ### v9.10.0
403
-
404
- - **The TUI is now fully clickable** — the mouse was already enabled (OpenTUI emitted and hit-tested every event) but nothing consumed them, so they were silently discarded; click selects, double-click opens, the wheel scrolls, and clicking outside an overlay closes it
405
- - **Clicks reuse the keyboard's own code paths** — a click calls `setSelectedIndex`, which emits the same `selectionChanged` event `↑`/`↓` does, so the detail pane, graph and packages view work identically with no parallel mouse branch to drift
406
- - **Every surface responds** — results, landing mode cards, trending tabs, the update dialog's buttons, and all seven overlay lists (history, bookmarks, saved searches, topics, export, share, command menu), with hover highlighting and a pointer cursor
407
- - **A <kbd>☰ menu</kbd> button in the bottom-right corner** opens the command menu; it floats above the layout and hides while an overlay is open
408
- - **The scroll wheel no longer scrolls the wrong pane** — a pre-existing bug: scroll events that hit nothing fell through to the focused renderable, so scrolling in the README viewer moved the _result selection_ instead of the README
409
- - **Clicks over read-only text now register** — every `TextRenderable` defaults to OpenTUI's text-selection mode, which consumed left-presses as a selection drag before ghfind's handlers ran, so the detail pane and comparison table ignored clicks entirely
410
- - **`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
- - **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
-
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
411
  ## License
427
412
 
428
413
  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.1";
2157
+ cached = "9.10.3";
2158
2158
  return cached;
2159
2159
  }
2160
2160
  try {
@@ -4177,6 +4177,10 @@ function buildHelpSections() {
4177
4177
  title: " Utility Keys ",
4178
4178
  titleColor: "muted",
4179
4179
  rows: [
4180
+ {
4181
+ keys: "Ctrl+E",
4182
+ action: "Export results (CSV / Markdown / JSON / text)"
4183
+ },
4180
4184
  { keys: "t", action: "Cycle theme (light / dark / solarized)" },
4181
4185
  { keys: "Ctrl+X", action: "Copy repo URL to clipboard" },
4182
4186
  { keys: "Ctrl+C", action: "Copy search query to clipboard" }
@@ -8000,6 +8004,16 @@ ${pack.description ?? ""}`;
8000
8004
  showOverlay("help");
8001
8005
  return;
8002
8006
  }
8007
+ if (key.ctrl && key.name === "e") {
8008
+ key.stopPropagation();
8009
+ if (currentRepos.length > 0) {
8010
+ showOverlay("export");
8011
+ } else {
8012
+ setStatus("No results to export \u2014 run a search first");
8013
+ }
8014
+ renderer.requestRender();
8015
+ return;
8016
+ }
8003
8017
  if (key.name === "tab") {
8004
8018
  if (searchBox.visible) {
8005
8019
  const val = searchInput.value;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "github-search-cli",
3
- "version": "9.10.1",
3
+ "version": "9.10.3",
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.
@@ -0,0 +1,27 @@
1
+ # v9.10.3
2
+
3
+ A one-row documentation release: the in-app help screen now lists the export
4
+ shortcut.
5
+
6
+ ## The help overlay skipped `Ctrl+E`
7
+
8
+ `?` (or `Ctrl+H`) opens the keybinding reference. Its **Utility Keys** section
9
+ read `t`, `Ctrl+X`, `Ctrl+C` — and stopped there. So `Ctrl+E` was the one key
10
+ that ghfind never documented in the place you actually look keys up, even
11
+ though everything else already mentioned it: the startup tip rotates through
12
+ _"Press Ctrl+E to export results as CSV or Markdown"_, and the README's global
13
+ shortcut table carries the row.
14
+
15
+ It is now the first row of that section, with the other utility keys:
16
+
17
+ ```
18
+ Ctrl+E Export results (CSV / Markdown / JSON / text)
19
+ t Cycle theme (light / dark / solarized)
20
+ Ctrl+X Copy repo URL to clipboard
21
+ Ctrl+C Copy search query to clipboard
22
+ ```
23
+
24
+ ## Nothing else changed
25
+
26
+ The shortcut itself landed in 9.10.2; this release only documents it. No
27
+ behaviour, output, or CLI surface changes.
package/src/help.ts CHANGED
@@ -173,6 +173,10 @@ export function buildHelpSections(): HelpSection[] {
173
173
  title: " Utility Keys ",
174
174
  titleColor: "muted",
175
175
  rows: [
176
+ {
177
+ keys: "Ctrl+E",
178
+ action: "Export results (CSV / Markdown / JSON / text)",
179
+ },
176
180
  { keys: "t", action: "Cycle theme (light / dark / solarized)" },
177
181
  { keys: "Ctrl+X", action: "Copy repo URL to clipboard" },
178
182
  { keys: "Ctrl+C", action: "Copy search query to clipboard" },
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") {