github-search-cli 9.8.0 → 9.8.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
@@ -6,6 +6,115 @@ Format follows [Keep a Changelog](https://keepachangelog.com/en/1.0.0/). Publish
6
6
 
7
7
  ---
8
8
 
9
+ ## [9.8.2] — 2026-09-28 (released)
10
+
11
+ ### Security
12
+
13
+ - **GitHub tokens no longer leak into crash reports.** An uncaught error
14
+ auto-built a GitHub issue URL from the raw `process.argv`, so a token passed
15
+ as `--token` ended up in a public URL. Every field is now redacted before it
16
+ reaches the URL, title, body or stack trace, and when a credential is
17
+ detected ghfind prints the URL to copy instead of opening a browser.
18
+ - **Your token is never sent to `raw.githubusercontent.com`** when fetching a
19
+ README. It is only attached to `api.github.com` requests, and only for a
20
+ repository marked private.
21
+ - **Untrusted skill sources are validated** before they can reach a shell
22
+ command or URL. A `source` or `skillId` containing shell metacharacters
23
+ (`;`, `$`, backticks, newlines, path traversal) is now dropped from
24
+ registry results instead of being interpolated into `npx skills add`.
25
+ - **The config file holding your token is written with `0600` permissions**
26
+ (effective on POSIX; on Windows the file still inherits the directory ACL).
27
+ - `--doctor` masks the token with `maskToken()` instead of printing a
28
+ raw 7-character prefix.
29
+
30
+ ### Fixed
31
+
32
+ - **Recoverable errors no longer open a bug-report tab.** The catch in
33
+ `src/cli.ts` tested `err.name === "SearchCliError"`, which is never true
34
+ because each subclass sets its own name, so rate-limit, network and
35
+ layout-change errors all fell through to the crash reporter. Routing now uses
36
+ `instanceof SearchCliError`.
37
+ - **`--compare` and the MCP tool `ghfind_compare_repos` resolve repos
38
+ exactly.** Both used a free-text search with no `repo:` qualifier and never
39
+ checked the returned `fullName`, so they could silently compare a different
40
+ repository. They now use the existing `resolveRepoFromRef()` seam
41
+ (`GET /repos/{owner}/{repo}`).
42
+ - **State files are written atomically.** Bookmarks, history, sessions, saved
43
+ searches, notifications and the update check were written straight to their
44
+ live path; a crash or a full disk left a truncated JSON file that was then
45
+ silently replaced with defaults, destroying user data. Writes now go to a
46
+ temp file and are renamed into place.
47
+ - **Notification IDs no longer restart** after "dismiss all" — the id counter
48
+ was recomputed from an already-empty list.
49
+ - **`ghfind history --delete` no longer removes every duplicate entry.** The
50
+ delete matched by value instead of by index.
51
+ - **An invalid `--sort` value is rejected** with the list of valid choices and
52
+ a non-zero exit code instead of silently degrading to the default.
53
+ - **A failed "load more" in the TUI no longer clears the results** already on
54
+ screen; the error goes to the status bar.
55
+ - **`--markdown` escapes `|` in cells**, matching `--csv`.
56
+ - Local skill scanning is memoised per process, so a search no longer re-walks
57
+ the skill roots on every keystroke.
58
+ - `MemoryCache.set` is a true LRU — a refreshed entry now moves to the end of
59
+ the insertion order.
60
+ - Skill ids and sources may contain `_` (e.g. `my_org/my_repo`), which
61
+ are common on GitHub and were wrongly rejected.
62
+
63
+ ### Changed
64
+
65
+ - **`postinstall` and the bundled agent skill are unchanged in behaviour**; the
66
+ skill now states that `--compare` resolves a repository exactly.
67
+ - Internal `--compare` resolution is now shared by the CLI and the MCP server
68
+ instead of duplicated in both.
69
+
70
+ ---
71
+
72
+ ## [9.8.1] — 2026-09-26 (released)
73
+
74
+ ### Added
75
+
76
+ - **`ghfind skill search <query>`** finds agent skills by keyword and prints
77
+ why each one matched. The default scan reads `SKILL.md` files under
78
+ `~/.codex/skills`, `~/.agents/skills`, `<project>/.codex/skills` and
79
+ `<project>/.github/skills`, in that priority order and de-duplicated by name
80
+ (the user-level roots overlap heavily on real machines). `--remote` queries
81
+ the public [skills.sh](https://skills.sh) ecosystem instead and returns each
82
+ hit's install count and `npx skills add` command. `GHFIND_SKILL_ROOTS`
83
+ overrides which directories are scanned.
84
+ - **MCP tool `ghfind_skill_search`.** Agents can search skills the moment they
85
+ connect: `source: "local"` (the default) searches installed skills,
86
+ `source: "registry"` searches skills.sh. Read-only — it returns install
87
+ commands rather than running them, and never writes to disk.
88
+ - **Read-only CLI views of local state:** `ghfind bookmarks [query]`,
89
+ `ghfind history [query]`, `ghfind saved` and `ghfind topics`, each with
90
+ `--json` for agents. They print what the TUI has stored and never modify it.
91
+ - **`ghfind readme <owner/repo>`** prints a repository's README (`--raw` skips
92
+ the header, `--json` returns `{ owner, name, sourceUrl, text }`), bringing the
93
+ TUI's README viewer to scripts and agents.
94
+ - **`ghfind share <owner/repo>`** prints a share snippet
95
+ (`--as markdown|plain|gh-cli|short`), with `--copy` to also put it on the
96
+ clipboard.
97
+ - Shell completions (bash, zsh, fish) cover every new subcommand and flag.
98
+
99
+ ### Changed
100
+
101
+ - The bundled `ghfind-cli` agent skill documents the skill search and the new
102
+ read-only commands, so CLI-first agents discover them without reading
103
+ `--help`.
104
+
105
+ ### Fixed
106
+
107
+ - **README image rendering does not work on real repositories.** The v9.8.0
108
+ notes described inline images as working; that was wrong. An image wrapped
109
+ in a link (`[![alt](shot.png)](url)`) renders nothing, and a README with
110
+ many small images — `openclaw/openclaw` has 648 48x48 avatars — becomes
111
+ 15,552 rows tall. Images declaring an edge under 100px are skipped, and
112
+ SVG is not rendered at all. Plain `![]()` images and large banners do
113
+ render correctly. Root causes and remaining work:
114
+ `.issues/tickets/readme-image-rendering.md`.
115
+
116
+ ---
117
+
9
118
  ## [9.8.0] — 2026-09-22 (released)
10
119
 
11
120
  ### Added
package/LICENSE CHANGED
@@ -1,21 +1,21 @@
1
- MIT License
2
-
3
- Copyright (c) 2026 search-cli contributors
4
-
5
- Permission is hereby granted, free of charge, to any person obtaining a copy
6
- of this software and associated documentation files (the "Software"), to deal
7
- in the Software without restriction, including without limitation the rights
8
- to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
- copies of the Software, and to permit persons to whom the Software is
10
- furnished to do so, subject to the following conditions:
11
-
12
- The above copyright notice and this permission notice shall be included in all
13
- copies or substantial portions of the Software.
14
-
15
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
- FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
- OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
- SOFTWARE.
1
+ MIT License
2
+
3
+ Copyright (c) 2026 search-cli contributors
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md CHANGED
@@ -95,8 +95,21 @@ ghfind --compare a/b c/d # side-by-side comparison
95
95
  ghfind --compare a/b c/d --json # comparison as JSON|CSV|Markdown
96
96
  ghfind deep-dive a/b --json # deep-dive: languages, contributors, README
97
97
  ghfind pkg "query" --json # npm package search as JSON
98
+ # Read-only local state
99
+ ghfind bookmarks # saved repos, newest first
100
+ ghfind history --limit 20 # past searches
101
+ ghfind saved # named searches saved in the TUI
102
+ ghfind topics # popular GitHub topics
103
+ ghfind readme a/b # print a repo README (--raw for no header)
104
+ ghfind share a/b --as gh-cli # share snippet (--copy also copies it)
105
+ # Agent skills
106
+ ghfind skill search testing # skills installed on this machine
107
+ ghfind skill search testing --remote --json # the skills.sh ecosystem
98
108
  ```
99
109
 
110
+ `bookmarks`, `history`, `saved`, `topics`, `readme` and `share` are read-only:
111
+ they print what the TUI has stored but never modify local state.
112
+
100
113
  ## Use with AI agents
101
114
 
102
115
  ghfind speaks the [Model Context Protocol](https://modelcontextprotocol.io) —
@@ -120,17 +133,29 @@ or in your MCP client config:
120
133
  Exposed tools: `ghfind_search_repos`, `ghfind_trending`,
121
134
  `ghfind_npm_packages`, `ghfind_org_profile`, `ghfind_user_profile`,
122
135
  `ghfind_compare_repos`, `ghfind_deep_dive`, `ghfind_bookmarked_releases`,
123
- and `ghfind_skill` (a token-efficient CLI usage guide for agents).
136
+ `ghfind_skill` (a token-efficient CLI usage guide for agents), and
137
+ `ghfind_skill_search` (find agent skills, either installed on this machine or
138
+ in the public skills.sh ecosystem ? read-only, it never installs anything).
124
139
  Unauthenticated requests are rate-limited to 60/hr — set `GITHUB_TOKEN`
125
140
  in the environment for 5,000/hr.
126
141
 
127
142
  CLI-first agents can skip MCP entirely:
128
143
 
129
144
  ```bash
130
- ghfind skill # list agent skills
131
- ghfind skill ghfind-cli # print the token-efficient CLI guide
145
+ ghfind skill # list agent skills
146
+ ghfind skill ghfind-cli # print the token-efficient CLI guide
147
+ ghfind skill search testing # search installed skills (local scan)
148
+ ghfind skill search testing --remote --limit 10 --json # search skills.sh
132
149
  ```
133
150
 
151
+ `ghfind skill search` matches skill names first, then descriptions, and reads
152
+ the `SKILL.md` files under `~/.codex/skills`, `~/.agents/skills`,
153
+ `<project>/.codex/skills` and `<project>/.github/skills` (in that priority
154
+ order, de-duplicated by name). `--remote` queries the public
155
+ [skills.sh](https://skills.sh) ecosystem instead and returns the
156
+ `npx skills add` command for each hit, without installing anything. Set
157
+ `GHFIND_SKILL_ROOTS` to override which directories are scanned.
158
+
134
159
  ### Completions
135
160
 
136
161
  ```bash
@@ -164,6 +189,9 @@ ghfind --completion fish | source
164
189
  <tr><td><b>Watch</b></td><td><code>--watch</code> — poll for new results</td></tr>
165
190
  <tr><td><b>MCP server</b></td><td><code>ghfind mcp</code> — GitHub search as tools for AI agents (Claude Code, Cursor, …)</td></tr>
166
191
  <tr><td><b>Agent skill</b></td><td><code>ghfind skill</code> — token-efficient CLI usage guide for coding agents</td></tr>
192
+ <tr><td><b>Skill search</b></td><td><code>ghfind skill search &lt;query&gt;</code> — find installed skills, or <code>--remote</code> for the skills.sh ecosystem (also <code>ghfind_skill_search</code> over MCP)</td></tr>
193
+ <tr><td><b>Read-only state</b></td><td><code>ghfind bookmarks|history|saved|topics</code> — print local state and popular topics without modifying anything</td></tr>
194
+ <tr><td><b>README &amp; share</b></td><td><code>ghfind readme a/b</code> and <code>ghfind share a/b --as gh-cli</code> — the TUI's <code>r</code> / <code>y</code> actions from the shell</td></tr>
167
195
  </table>
168
196
 
169
197
  <details>
@@ -272,7 +300,7 @@ Prefix with `-` to exclude. Supported: `language`, `stars`, `fork`, `archived`,
272
300
  }
273
301
  ```
274
302
 
275
- Env: `GITHUB_TOKEN`, `GHFIND_CONFIG`, `XDG_CONFIG_HOME`, `XDG_STATE_HOME`, `NO_COLOR` (disables colored `--doctor` output, per [no-color.org](https://no-color.org/))
303
+ Env: `GITHUB_TOKEN`, `GHFIND_CONFIG`, `GHFIND_SKILL_ROOTS` (path-separator separated skill directories for `ghfind skill search`), `XDG_CONFIG_HOME`, `XDG_STATE_HOME`, `NO_COLOR` (disables colored `--doctor` output, per [no-color.org](https://no-color.org/))
276
304
 
277
305
  ---
278
306
 
@@ -285,7 +313,7 @@ cd ghfind
285
313
  # With Bun (recommended for TUI)
286
314
  bun install
287
315
  bun start # TUI
288
- bun test # 414 tests
316
+ bun test # 482 tests
289
317
  bun run check # format check + tests — the green gate
290
318
  bun run build # build dist/
291
319
 
@@ -301,31 +329,62 @@ npm run build # build dist/
301
329
 
302
330
  ---
303
331
 
304
- ## Changelog
332
+ ## Known limitations
305
333
 
306
- Recent releases (full history in [CHANGELOG.md](CHANGELOG.md)):
334
+ **README image rendering is currently incomplete.** Images that do render look
335
+ right, but several common cases silently show nothing:
307
336
 
308
- ### v9.8.0
337
+ - **An image wrapped in a link does not render at all.** This is the common
338
+ badge-and-screenshot style: `[![alt](shot.png)](https://example.com)`.
339
+ The whole block is treated as prose and the image is dropped.
340
+ - **An image smaller than 100px is skipped**, judged by the `width`/`height`
341
+ the README declares in its `<img>` tag. A README that understates an
342
+ image's size hides that image.
343
+ - **SVG is not rendered** — the rasteriser cannot draw it.
344
+ - Markdown `![](url)` images have no declared size, so they are downloaded
345
+ before the size check can reject them. A README full of them is slow to open.
309
346
 
310
- - **README viewer renders real markdown** — headings, emphasis, links, lists, blockquotes, boxed tables, and fenced code now come from OpenTUI's markdown renderable with a theme-derived syntax style instead of a box-drawing text approximation
311
- - **Images render inline** — relative and `/`-rooted paths resolve against the README's branch, `github.com/.../blob/...` links are rewritten to raw content, downloads are cached and size-capped, SVG and badge-service images are skipped, and anything unloadable falls back to an `🖼 alt` caption; press `i` in the viewer to toggle images
312
- - **No new dependencies** — the PNG decoder, image-to-cells rasteriser, and fetch cache are plain TypeScript, and images draw with truecolor half blocks, so they work on any truecolor terminal without image-protocol support
347
+ A README using none of the above — plain `![]()` images and a few large
348
+ banners — renders fine and fast. See
349
+ [.issues/tickets/readme-image-rendering.md](.issues/tickets/readme-image-rendering.md)
350
+ for the measurements and the remaining work.
313
351
 
314
- ### v9.7.1
352
+ ---
315
353
 
316
- - **In-app update actually works now** — it used to `bun install -g` into `~/.bun` while your running copy lives in an npm prefix, reporting success while nothing changed; it now detects which package manager owns the running install and updates it in place
317
- - **New `ghfind --doctor` check** — flags stale/PATH-shadowing global installs (multiple `ghfind` copies with different versions) and prints the exact uninstall command
318
- - **Windows URL fix** — links with query params were truncated at the first `&` by `cmd /c start`; every pre-filled crash-report/issue link now opens complete
319
- - Fixed `open-url` crashing under Node; CI now enforces lint + typecheck gates (first green Biome baseline)
354
+ ## Changelog
320
355
 
321
- ### v9.7.0
356
+ Recent releases (full history in [CHANGELOG.md](CHANGELOG.md)):
322
357
 
323
- - **CLI parity with the MCP tools** — `ghfind deep-dive <owner/repo>` (languages, contributors, README excerpt, `--json`), `ghfind --compare` with `--json|--csv|--markdown`, and a trending language filter (`ghfind trending rust`, `--trending <lang>`)
324
- - **Deep-dive metadata fix** — real stars, description, and topics are fetched first instead of a zeroed stub; a 404 exits with `Repo not found`
325
- - Fixed `ghfind mcp` failing to typecheck (JSON-RPC id narrowing; runtime behavior unchanged)
326
- - The MCP server and CLI now share repo-ref parsing, language validation, and the deep-dive pipeline
358
+ ### v9.8.2
359
+
360
+ - **Security: tokens no longer leak into crash reports** — an uncaught error auto-built a GitHub issue URL from raw `process.argv`, so a `--token` value ended up in a public URL; every field is redacted now, and ghfind prints the URL to copy instead of opening a browser when it finds a credential
361
+ - **Security: your token is never sent to `raw.githubusercontent.com`** when fetching a README, only to `api.github.com` and only for a private repo
362
+ - **Security: untrusted skill sources are validated** before reaching a shell command or URL, so a hostile skills.sh entry cannot inject into `npx skills add`
363
+ - **Recoverable errors no longer open a bug-report tab** — rate limits, network blips and layout changes print a short message and exit
364
+ - **`--compare` resolves repositories exactly** in both the CLI and the `ghfind_compare_repos` MCP tool; it used a free-text search that could silently compare the wrong repo
365
+ - **State files are written atomically** — a crash mid-write used to leave truncated JSON that was silently replaced with defaults, losing bookmarks and history
366
+ - Fixed notification IDs restarting after "dismiss all", `history --delete` removing every duplicate, an invalid `--sort` degrading silently, a failed "load more" clearing the TUI's results, `--markdown` not escaping `|`, and a not-quite-LRU memory cache
367
+
368
+ ### v9.8.1
369
+
370
+ - **`ghfind skill search <query>`** finds agent skills by keyword and prints why
371
+ each one matched; `--remote` searches the public [skills.sh](https://skills.sh)
372
+ ecosystem instead, and `GHFIND_SKILL_ROOTS` overrides the scanned directories
373
+ - **MCP tool `ghfind_skill_search`** — agents search installed skills or the
374
+ skills.sh registry as soon as they connect; read-only
375
+ - **Read-only CLI views of local state** — `ghfind bookmarks`, `ghfind history`,
376
+ `ghfind saved`, `ghfind topics`, plus `ghfind readme <owner/repo>` and
377
+ `ghfind share <owner/repo>`, each with `--json` for agents
378
+ - **Shell completions** (bash, zsh, fish) cover every new subcommand and flag
379
+ - **README image rendering is incomplete** — see
380
+ [Known limitations](#known-limitations); the v9.8.0 notes wrongly described it
381
+ as working
327
382
 
328
- ---
383
+ ### v9.8.0
384
+
385
+ - **README viewer renders real markdown** — headings, emphasis, links, lists, blockquotes, boxed tables, and fenced code now come from OpenTUI's markdown renderable with a theme-derived syntax style instead of a box-drawing text approximation
386
+ - **Images render inline — see [Known limitations](#known-limitations)** — relative and `/`-rooted paths resolve against the README's branch, `github.com/.../blob/...` links are rewritten to raw content, downloads are cached and size-capped, SVG and badge-service images are skipped, and anything unloadable falls back to an `🖼 alt` caption; press `i` in the viewer to toggle images
387
+ - **No new dependencies** — the PNG decoder, image-to-cells rasteriser, and fetch cache are plain TypeScript, and images draw with truecolor half blocks, so they work on any truecolor terminal without image-protocol support
329
388
 
330
389
  ## License
331
390
 
@@ -1,51 +1,55 @@
1
- # ghfind bash completion
2
- # Source: source <(ghfind --completion bash)
3
-
4
- _ghfind() {
5
- local cur prev opts
6
- COMPREPLY=()
7
- cur="${COMP_WORDS[COMP_CWORD]}"
8
- prev="${COMP_WORDS[COMP_CWORD-1]}"
9
-
10
- opts="--json --csv --markdown --count --limit --sort --token --trending --language --since --pipe --format --registry --watch --interval --version --help --completion pkg login init doctor org mcp skill trending deep-dive"
11
-
12
- case "${prev}" in
13
- --sort)
14
- COMPREPLY=( $(compgen -W "best-match stars updated forks" -- "${cur}") )
15
- return 0
16
- ;;
17
- --since)
18
- COMPREPLY=( $(compgen -W "daily weekly monthly" -- "${cur}") )
19
- return 0
20
- ;;
21
- --pipe)
22
- COMPREPLY=( $(compgen -W "clone open" -- "${cur}") )
23
- return 0
24
- ;;
25
- --format)
26
- COMPREPLY=( $(compgen -W "urls names ssh-urls clone-commands ids" -- "${cur}") )
27
- return 0
28
- ;;
29
- --completion)
30
- COMPREPLY=( $(compgen -W "bash zsh fish" -- "${cur}") )
31
- return 0
32
- ;;
33
- --registry)
34
- COMPREPLY=( $(compgen -W "npm" -- "${cur}") )
35
- return 0
36
- ;;
37
- --language)
38
- COMPREPLY=( $(compgen -W "rust python typescript javascript go c c++ c# java ruby php swift kotlin zig" -- "${cur}") )
39
- return 0
40
- ;;
41
- --limit|--interval)
42
- return 0
43
- ;;
44
- *)
45
- ;;
46
- esac
47
-
48
- COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") )
49
- return 0
50
- }
51
- complete -F _ghfind ghfind
1
+ # ghfind bash completion
2
+ # Source: source <(ghfind --completion bash)
3
+
4
+ _ghfind() {
5
+ local cur prev opts
6
+ COMPREPLY=()
7
+ cur="${COMP_WORDS[COMP_CWORD]}"
8
+ prev="${COMP_WORDS[COMP_CWORD-1]}"
9
+
10
+ opts="--json --csv --markdown --count --limit --sort --token --trending --language --since --pipe --format --registry --watch --interval --version --help --completion --remote --local --copy --raw --as pkg login init doctor org user mcp skill bookmarks history topics saved readme share trending deep-dive compare"
11
+
12
+ case "${prev}" in
13
+ --sort)
14
+ COMPREPLY=( $(compgen -W "best-match stars updated forks" -- "${cur}") )
15
+ return 0
16
+ ;;
17
+ --since)
18
+ COMPREPLY=( $(compgen -W "daily weekly monthly" -- "${cur}") )
19
+ return 0
20
+ ;;
21
+ --pipe)
22
+ COMPREPLY=( $(compgen -W "clone open" -- "${cur}") )
23
+ return 0
24
+ ;;
25
+ --format)
26
+ COMPREPLY=( $(compgen -W "urls names ssh-urls clone-commands ids" -- "${cur}") )
27
+ return 0
28
+ ;;
29
+ --completion)
30
+ COMPREPLY=( $(compgen -W "bash zsh fish" -- "${cur}") )
31
+ return 0
32
+ ;;
33
+ --as)
34
+ COMPREPLY=( $(compgen -W "markdown plain gh-cli short" -- "${cur}") )
35
+ return 0
36
+ ;;
37
+ --registry)
38
+ COMPREPLY=( $(compgen -W "npm" -- "${cur}") )
39
+ return 0
40
+ ;;
41
+ --language)
42
+ COMPREPLY=( $(compgen -W "rust python typescript javascript go c c++ c# java ruby php swift kotlin zig" -- "${cur}") )
43
+ return 0
44
+ ;;
45
+ --limit|--interval)
46
+ return 0
47
+ ;;
48
+ *)
49
+ ;;
50
+ esac
51
+
52
+ COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") )
53
+ return 0
54
+ }
55
+ complete -F _ghfind ghfind
@@ -1,24 +1,29 @@
1
- # ghfind fish completion
2
- # Source: source (ghfind --completion fish | psub)
3
-
4
- complete -c ghfind -l json -d "JSON output"
5
- complete -c ghfind -l csv -d "CSV output"
6
- complete -c ghfind -l markdown -d "Markdown table output"
7
- complete -c ghfind -l count -d "Only result count"
8
- complete -c ghfind -l limit -d "Max results" -r
9
- complete -c ghfind -l sort -d "Sort strategy" -r -f -a "best-match stars updated forks"
10
- complete -c ghfind -l token -d "GitHub token" -r
11
- complete -c ghfind -l trending -d "Trending mode"
12
- complete -c ghfind -l language -d "Trending language filter" -r -f -a "rust python typescript javascript go c c++ c# java ruby php swift kotlin zig"
13
- complete -c ghfind -l since -d "Trending period" -r -f -a "daily weekly monthly"
14
- complete -c ghfind -l pipe -d "Pipe target" -r -f -a "clone open"
15
- complete -c ghfind -l format -d "Output format" -r -f -a "urls names ssh-urls clone-commands ids"
16
- complete -c ghfind -l registry -d "Registry for pkg" -r -f -a "npm"
17
-
18
- complete -c ghfind -l watch -d "Watch mode"
19
- complete -c ghfind -l interval -d "Watch interval seconds" -r
20
- complete -c ghfind -l version -d "Print version"
21
- complete -c ghfind -l help -d "Print help"
22
- complete -c ghfind -l completion -d "Shell" -r -f -a "bash zsh fish"
23
-
24
- complete -c ghfind -f -a "login init doctor org pkg mcp skill trending deep-dive"
1
+ # ghfind fish completion
2
+ # Source: source (ghfind --completion fish | psub)
3
+
4
+ complete -c ghfind -l json -d "JSON output"
5
+ complete -c ghfind -l csv -d "CSV output"
6
+ complete -c ghfind -l markdown -d "Markdown table output"
7
+ complete -c ghfind -l count -d "Only result count"
8
+ complete -c ghfind -l limit -d "Max results" -r
9
+ complete -c ghfind -l sort -d "Sort strategy" -r -f -a "best-match stars updated forks"
10
+ complete -c ghfind -l token -d "GitHub token" -r
11
+ complete -c ghfind -l trending -d "Trending mode"
12
+ complete -c ghfind -l language -d "Trending language filter" -r -f -a "rust python typescript javascript go c c++ c# java ruby php swift kotlin zig"
13
+ complete -c ghfind -l since -d "Trending period" -r -f -a "daily weekly monthly"
14
+ complete -c ghfind -l pipe -d "Pipe target" -r -f -a "clone open"
15
+ complete -c ghfind -l format -d "Output format" -r -f -a "urls names ssh-urls clone-commands ids"
16
+ complete -c ghfind -l registry -d "Registry for pkg" -r -f -a "npm"
17
+
18
+ complete -c ghfind -l watch -d "Watch mode"
19
+ complete -c ghfind -l interval -d "Watch interval seconds" -r
20
+ complete -c ghfind -l version -d "Print version"
21
+ complete -c ghfind -l help -d "Print help"
22
+ complete -c ghfind -l completion -d "Shell" -r -f -a "bash zsh fish"
23
+ complete -c ghfind -l as -d "Share format" -r -f -a "markdown plain gh-cli short"
24
+ complete -c ghfind -l remote -d "Skill search: query skills.sh instead of this machine"
25
+ complete -c ghfind -l local -d "Skill search: force the local scan (default)"
26
+ complete -c ghfind -l copy -d "Share: also copy the snippet to the clipboard"
27
+ complete -c ghfind -l raw -d "Readme: print the raw markdown with no header"
28
+
29
+ complete -c ghfind -f -a "login init doctor org user bookmarks history topics saved readme share pkg mcp skill trending deep-dive compare"
@@ -1,40 +1,53 @@
1
- # ghfind zsh completion
2
- # Source: source <(ghfind --completion zsh)
3
-
4
- _ghfind() {
5
- local -a opts
6
- opts=(
7
- '--json[JSON output]'
8
- '--csv[CSV output]'
9
- '--markdown[Markdown table output]'
10
- '--count[Only result count]'
11
- '--limit[Max results]:limit:'
12
- '--sort[Sort strategy]:(best-match stars updated forks)'
13
- '--token[GitHub token]:token:'
14
- '--trending[Trending mode]'
15
- '--language[Trending language filter]:language:'
16
- '--since[Trending period]:(daily weekly monthly)'
17
- '--pipe[Pipe target]:(clone open)'
18
- '--format[Output format]:(urls names ssh-urls clone-commands ids)'
19
- '--registry[Registry for pkg]:(npm)'
20
-
21
- '--watch[Watch mode]'
22
- '--interval[Watch interval seconds]:seconds:'
23
- '--version[Print version]'
24
- '--help[Print help]'
25
- '--completion[Shell]:(bash zsh fish)'
26
-
27
- 'login[Import a GitHub token from the gh CLI or paste one]'
28
- 'init[Run the setup wizard]'
29
- 'doctor[Environment diagnostics]'
30
- 'org[Org profile]:org name:'
31
- 'pkg[Search packages]:query:'
32
- 'trending[Trending repos, optionally by language]'
33
- 'deep-dive[Repo deep-dive: languages, contributors, README]:owner/repo:'
34
- 'mcp[Run the MCP server for AI agents (stdio)]'
35
- 'skill[Print an agent skill guide]:skill name:'
36
- )
37
- _arguments "${opts[@]}" '*:query:'
38
- }
39
-
1
+ # ghfind zsh completion
2
+ # Source: source <(ghfind --completion zsh)
3
+
4
+ _ghfind() {
5
+ local -a opts
6
+ opts=(
7
+ '--json[JSON output]'
8
+ '--csv[CSV output]'
9
+ '--markdown[Markdown table output]'
10
+ '--count[Only result count]'
11
+ '--limit[Max results]:limit:'
12
+ '--sort[Sort strategy]:(best-match stars updated forks)'
13
+ '--token[GitHub token]:token:'
14
+ '--trending[Trending mode]'
15
+ '--language[Trending language filter]:language:'
16
+ '--since[Trending period]:(daily weekly monthly)'
17
+ '--pipe[Pipe target]:(clone open)'
18
+ '--format[Output format]:(urls names ssh-urls clone-commands ids)'
19
+ '--registry[Registry for pkg]:(npm)'
20
+
21
+ '--watch[Watch mode]'
22
+ '--interval[Watch interval seconds]:seconds:'
23
+ '--version[Print version]'
24
+ '--help[Print help]'
25
+ '--completion[Shell]:(bash zsh fish)'
26
+ '--as[Share format]:(markdown plain gh-cli short)'
27
+ '--remote[Skill search: query skills.sh instead of this machine]'
28
+ '--local[Skill search: force the local scan (default)]'
29
+ '--copy[Share: also copy the snippet to the clipboard]'
30
+ '--raw[Readme: print the raw markdown with no header]'
31
+
32
+ 'login[Import a GitHub token from the gh CLI or paste one]'
33
+ 'init[Run the setup wizard]'
34
+ 'doctor[Environment diagnostics]'
35
+ 'org[Org profile]:org name:'
36
+ 'user[User profile]:user name:'
37
+ 'bookmarks[List saved repos]:query:'
38
+ 'history[List past searches]:query:'
39
+ 'topics[Browse popular GitHub topics]'
40
+ 'saved[List saved searches]'
41
+ 'readme[Print a repository README]:owner/repo:'
42
+ 'share[Print a share snippet]:owner/repo:'
43
+ 'pkg[Search packages]:query:'
44
+ 'trending[Trending repos, optionally by language]'
45
+ 'deep-dive[Repo deep-dive: languages, contributors, README]:owner/repo:'
46
+ 'mcp[Run the MCP server for AI agents (stdio)]'
47
+ 'skill[Print an agent skill guide, or search with: skill search <query>]:skill name:'
48
+ 'compare[Compare repositories]'
49
+ )
50
+ _arguments "${opts[@]}" '*:query:'
51
+ }
52
+
40
53
  compdef _ghfind ghfind