github-search-cli 0.6.1 → 0.8.0
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/README.md +145 -188
- package/bin/ghfind.js +14 -0
- package/completions/{search-cli.bash → ghfind.bash} +4 -4
- package/completions/ghfind.fish +19 -0
- package/completions/{search-cli.zsh → ghfind.zsh} +27 -27
- package/demo.svg +66 -0
- package/package.json +18 -9
- package/src/bookmarks.ts +69 -69
- package/src/cli.ts +239 -242
- package/src/compare.ts +46 -46
- package/src/config.ts +65 -66
- package/src/deepdive.ts +118 -124
- package/src/errors.ts +59 -62
- package/src/explore.ts +29 -45
- package/src/export.ts +63 -56
- package/src/help.ts +112 -46
- package/src/history.ts +91 -91
- package/src/init.ts +55 -47
- package/src/notifications.ts +65 -69
- package/src/open-url.ts +16 -0
- package/src/output.ts +67 -73
- package/src/pipe.ts +54 -65
- package/src/saved-searches.ts +58 -58
- package/src/search.ts +555 -0
- package/src/session.ts +36 -35
- package/src/share.ts +54 -49
- package/src/status.ts +61 -61
- package/src/themes.ts +52 -52
- package/src/tips.ts +27 -27
- package/src/trending.ts +556 -587
- package/src/tui.ts +1665 -1469
- package/src/types.ts +139 -147
- package/src/watch.ts +62 -53
- package/bin/search-cli.js +0 -17
- package/completions/search-cli.fish +0 -19
- package/src/cache.ts +0 -64
- package/src/normalizer.ts +0 -66
- package/src/provider.ts +0 -142
- package/src/query.ts +0 -251
- package/src/ranking.ts +0 -55
package/README.md
CHANGED
|
@@ -1,188 +1,145 @@
|
|
|
1
|
-
#
|
|
2
|
-
|
|
3
|
-
>
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
```bash
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
#
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
| `
|
|
75
|
-
| `
|
|
76
|
-
| `
|
|
77
|
-
| `
|
|
78
|
-
| `
|
|
79
|
-
| `
|
|
80
|
-
| `
|
|
81
|
-
| `
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
|
86
|
-
|
|
87
|
-
| `
|
|
88
|
-
|
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
```
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
```
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
```
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
}
|
|
147
|
-
```
|
|
148
|
-
|
|
149
|
-
Or run `search-cli init` for the interactive setup wizard.
|
|
150
|
-
|
|
151
|
-
Environment variables: `GITHUB_TOKEN`, `SEARCH_CLI_CONFIG`, `XDG_CONFIG_HOME`, `XDG_STATE_HOME`.
|
|
152
|
-
|
|
153
|
-
---
|
|
154
|
-
|
|
155
|
-
## Design
|
|
156
|
-
|
|
157
|
-
```
|
|
158
|
-
CLI → QueryBuilder → Provider → Normalizer → Ranking → TUI / stdout
|
|
159
|
-
```
|
|
160
|
-
|
|
161
|
-
| Layer | File | Job |
|
|
162
|
-
|-------|------|-----|
|
|
163
|
-
| Entry | `src/cli.ts` | Arg parsing, routes to TUI or stdout |
|
|
164
|
-
| TUI | `src/tui.ts` | Interactive browser (OpenTUI) |
|
|
165
|
-
| Query | `src/query.ts` | Parse keywords/qualifiers |
|
|
166
|
-
| Provider | `src/provider.ts` | GitHub REST API with caching + token rotation |
|
|
167
|
-
| Types | `src/types.ts` | Shared interfaces |
|
|
168
|
-
|
|
169
|
-
The `SearchProvider` interface is the extension point for alternative backends (GitLab, local index, AI retriever).
|
|
170
|
-
|
|
171
|
-
---
|
|
172
|
-
|
|
173
|
-
## Install from source
|
|
174
|
-
|
|
175
|
-
```bash
|
|
176
|
-
git clone https://github.com/codersdfs/search-cli.git
|
|
177
|
-
cd search-cli
|
|
178
|
-
bun install
|
|
179
|
-
bun start # Launch TUI
|
|
180
|
-
bun test # 104 tests
|
|
181
|
-
bun run build # Compile binary → dist/
|
|
182
|
-
```
|
|
183
|
-
|
|
184
|
-
---
|
|
185
|
-
|
|
186
|
-
## License
|
|
187
|
-
|
|
188
|
-
MIT
|
|
1
|
+
# ghfind
|
|
2
|
+
|
|
3
|
+
> Search GitHub repos from your terminal. No browser needed.
|
|
4
|
+
|
|
5
|
+
<p align="center">
|
|
6
|
+
<img src="https://raw.githubusercontent.com/codersdfs/search-cli/main/demo.svg" alt="ghfind demo" width="100%">
|
|
7
|
+
</p>
|
|
8
|
+
|
|
9
|
+
---
|
|
10
|
+
|
|
11
|
+
## Install
|
|
12
|
+
|
|
13
|
+
```bash
|
|
14
|
+
npm install -g github-search-cli
|
|
15
|
+
```
|
|
16
|
+
|
|
17
|
+
## Use
|
|
18
|
+
|
|
19
|
+
```bash
|
|
20
|
+
# TUI
|
|
21
|
+
ghfind
|
|
22
|
+
|
|
23
|
+
# pipe
|
|
24
|
+
ghfind "language:Rust stars:>1000" --json | jq '.[].fullName'
|
|
25
|
+
ghfind "language:Zig" --count
|
|
26
|
+
ghfind --trending --json --since weekly
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
### Non-interactive
|
|
30
|
+
|
|
31
|
+
```bash
|
|
32
|
+
ghfind "query" --json # JSON
|
|
33
|
+
ghfind "query" --csv # CSV
|
|
34
|
+
ghfind "query" --markdown # Markdown
|
|
35
|
+
ghfind "query" --count # count only
|
|
36
|
+
ghfind "query" --format urls # one URL per line
|
|
37
|
+
ghfind "query" --pipe open # open in browser
|
|
38
|
+
ghfind "query" --pipe clone # clone commands
|
|
39
|
+
ghfind --trending --json # trending as JSON
|
|
40
|
+
ghfind --watch "query" # poll every 300s
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
### Completions
|
|
44
|
+
|
|
45
|
+
```bash
|
|
46
|
+
source <(ghfind --completion bash)
|
|
47
|
+
source <(ghfind --completion zsh)
|
|
48
|
+
ghfind --completion fish | source
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
---
|
|
52
|
+
|
|
53
|
+
## Features
|
|
54
|
+
|
|
55
|
+
<table>
|
|
56
|
+
<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>
|
|
57
|
+
<tr><td><b>Trending</b></td><td>Today, week, month, year — filter by language</td></tr>
|
|
58
|
+
<tr><td><b>Bookmarks</b></td><td><code>b</code> / <code>B</code> — save repos, tag them</td></tr>
|
|
59
|
+
<tr><td><b>Deep-dive</b></td><td><code>d</code> — languages, contributors, README, activity chart</td></tr>
|
|
60
|
+
<tr><td><b>Compare</b></td><td><code>c</code> / <code>C</code> — side-by-side, select 2+ repos</td></tr>
|
|
61
|
+
<tr><td><b>Explore</b></td><td><code>E</code> — browse popular topics</td></tr>
|
|
62
|
+
<tr><td><b>History</b></td><td><code>Ctrl+R</code> — recall past searches</td></tr>
|
|
63
|
+
<tr><td><b>Export</b></td><td><code>Ctrl+E</code> — JSON, CSV, Markdown to file</td></tr>
|
|
64
|
+
<tr><td><b>Share</b></td><td><code>Ctrl+P</code> — copy to clipboard (markdown, plain, gh-cli)</td></tr>
|
|
65
|
+
<tr><td><b>Watch</b></td><td><code>--watch</code> — poll for new results</td></tr>
|
|
66
|
+
</table>
|
|
67
|
+
|
|
68
|
+
<details>
|
|
69
|
+
<summary>Keybindings</summary>
|
|
70
|
+
|
|
71
|
+
| Key | Action |
|
|
72
|
+
|-----|--------|
|
|
73
|
+
| `/` | Focus search |
|
|
74
|
+
| `Enter` | Search / open repo |
|
|
75
|
+
| `↑`/`↓` / `j`/`k` | Navigate |
|
|
76
|
+
| `t` | Toggle search / trending |
|
|
77
|
+
| `s` | Cycle sort |
|
|
78
|
+
| `l` | Cycle limit |
|
|
79
|
+
| `r` | Refresh |
|
|
80
|
+
| `d` | Deep-dive |
|
|
81
|
+
| `o` | Open in browser |
|
|
82
|
+
| `b` / `B` | Bookmark / bookmarks panel |
|
|
83
|
+
| `c` / `C` | Compare select / view |
|
|
84
|
+
| `E` | Topic explorer |
|
|
85
|
+
| `Tab` | Auto-complete qualifier |
|
|
86
|
+
| `?` / `Ctrl+H` | Help |
|
|
87
|
+
| `Ctrl+R` | History |
|
|
88
|
+
| `Ctrl+S` / `Ctrl+O` | Save / open searches |
|
|
89
|
+
| `Ctrl+E` | Export |
|
|
90
|
+
| `Ctrl+N` | Notifications |
|
|
91
|
+
| `Ctrl+P` | Share |
|
|
92
|
+
| `Esc` | Close overlay |
|
|
93
|
+
| `q` | Quit |
|
|
94
|
+
|
|
95
|
+
Trending tabs: `1`–`5` (Today → All) or `←`/`→` / `h`/`l`
|
|
96
|
+
</details>
|
|
97
|
+
|
|
98
|
+
---
|
|
99
|
+
|
|
100
|
+
## Search syntax
|
|
101
|
+
|
|
102
|
+
```
|
|
103
|
+
language:Rust stars:>1000 topic:cli
|
|
104
|
+
"machine learning" language:Python stars:>5000
|
|
105
|
+
topic:cli -language:JavaScript
|
|
106
|
+
org:rust-lang language:Rust
|
|
107
|
+
```
|
|
108
|
+
|
|
109
|
+
Prefix with `-` to exclude. Supported: `language`, `stars`, `fork`, `archived`, `topic`, `user`, `org`, `repo`, `updated`, `pushed`, `visibility`, `license`, `created`, `size`, `in`.
|
|
110
|
+
|
|
111
|
+
---
|
|
112
|
+
|
|
113
|
+
## Config
|
|
114
|
+
|
|
115
|
+
`~/.config/ghfind/config.json` (auto-created, or run `ghfind init`):
|
|
116
|
+
|
|
117
|
+
```json
|
|
118
|
+
{
|
|
119
|
+
"defaultSort": "stars",
|
|
120
|
+
"defaultLimit": 50,
|
|
121
|
+
"theme": "tokyo-night",
|
|
122
|
+
"githubToken": "ghp_..."
|
|
123
|
+
}
|
|
124
|
+
```
|
|
125
|
+
|
|
126
|
+
Env: `GITHUB_TOKEN`, `GHFIND_CONFIG`, `XDG_CONFIG_HOME`, `XDG_STATE_HOME`
|
|
127
|
+
|
|
128
|
+
---
|
|
129
|
+
|
|
130
|
+
## From source
|
|
131
|
+
|
|
132
|
+
```bash
|
|
133
|
+
git clone https://github.com/codersdfs/search-cli.git
|
|
134
|
+
cd ghfind
|
|
135
|
+
npm install
|
|
136
|
+
npm start # TUI
|
|
137
|
+
npm test # 100+ tests
|
|
138
|
+
npm run build
|
|
139
|
+
```
|
|
140
|
+
|
|
141
|
+
---
|
|
142
|
+
|
|
143
|
+
## License
|
|
144
|
+
|
|
145
|
+
MIT
|
package/bin/ghfind.js
ADDED
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
/**
|
|
3
|
+
* ghfind — npm bin entry point.
|
|
4
|
+
* Requires Node.js >= 20.
|
|
5
|
+
*/
|
|
6
|
+
import { createRequire } from "module";
|
|
7
|
+
const require = createRequire(import.meta.url);
|
|
8
|
+
try {
|
|
9
|
+
await import("../src/cli.ts");
|
|
10
|
+
} catch (err) {
|
|
11
|
+
console.error("Failed to start ghfind. Node.js >= 20 required.");
|
|
12
|
+
console.error(err instanceof Error ? err.message : String(err));
|
|
13
|
+
process.exit(1);
|
|
14
|
+
}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
#
|
|
2
|
-
# Source: source <(
|
|
1
|
+
# ghfind bash completion
|
|
2
|
+
# Source: source <(ghfind --completion bash)
|
|
3
3
|
|
|
4
|
-
|
|
4
|
+
_ghfind() {
|
|
5
5
|
local cur prev opts
|
|
6
6
|
COMPREPLY=()
|
|
7
7
|
cur="${COMP_WORDS[COMP_CWORD]}"
|
|
@@ -40,4 +40,4 @@ _search_cli() {
|
|
|
40
40
|
COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") )
|
|
41
41
|
return 0
|
|
42
42
|
}
|
|
43
|
-
complete -F
|
|
43
|
+
complete -F _ghfind ghfind
|
|
@@ -0,0 +1,19 @@
|
|
|
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 since -d "Trending period" -r -f -a "daily weekly monthly"
|
|
13
|
+
complete -c ghfind -l pipe -d "Pipe target" -r -f -a "clone open"
|
|
14
|
+
complete -c ghfind -l format -d "Output format" -r -f -a "urls names ssh-urls clone-commands ids"
|
|
15
|
+
complete -c ghfind -l watch -d "Watch mode"
|
|
16
|
+
complete -c ghfind -l interval -d "Watch interval seconds" -r
|
|
17
|
+
complete -c ghfind -l version -d "Print version"
|
|
18
|
+
complete -c ghfind -l help -d "Print help"
|
|
19
|
+
complete -c ghfind -l completion -d "Shell" -r -f -a "bash zsh fish"
|
|
@@ -1,27 +1,27 @@
|
|
|
1
|
-
#
|
|
2
|
-
# Source: source <(
|
|
3
|
-
|
|
4
|
-
|
|
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
|
-
'--since[Trending period]:(daily weekly monthly)'
|
|
16
|
-
'--pipe[Pipe target]:(clone open)'
|
|
17
|
-
'--format[Output format]:(urls names ssh-urls clone-commands ids)'
|
|
18
|
-
'--watch[Watch mode]'
|
|
19
|
-
'--interval[Watch interval seconds]:seconds:'
|
|
20
|
-
'--version[Print version]'
|
|
21
|
-
'--help[Print help]'
|
|
22
|
-
'--completion[Shell]:(bash zsh fish)'
|
|
23
|
-
)
|
|
24
|
-
_arguments "${opts[@]}" '*:query:'
|
|
25
|
-
}
|
|
26
|
-
|
|
27
|
-
compdef
|
|
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
|
+
'--since[Trending period]:(daily weekly monthly)'
|
|
16
|
+
'--pipe[Pipe target]:(clone open)'
|
|
17
|
+
'--format[Output format]:(urls names ssh-urls clone-commands ids)'
|
|
18
|
+
'--watch[Watch mode]'
|
|
19
|
+
'--interval[Watch interval seconds]:seconds:'
|
|
20
|
+
'--version[Print version]'
|
|
21
|
+
'--help[Print help]'
|
|
22
|
+
'--completion[Shell]:(bash zsh fish)'
|
|
23
|
+
)
|
|
24
|
+
_arguments "${opts[@]}" '*:query:'
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
compdef _ghfind ghfind
|
package/demo.svg
ADDED
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
|
2
|
+
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 900 803" width="900" height="803">
|
|
3
|
+
<defs>
|
|
4
|
+
<style>
|
|
5
|
+
@import url('https://fonts.googleapis.com/css2?family=JetBrains+Mono:wght@400;700&display=swap');
|
|
6
|
+
</style>
|
|
7
|
+
<filter id="shadow" x="-5%" y="-5%" width="115%" height="115%">
|
|
8
|
+
<feDropShadow dx="0" dy="4" stdDeviation="8" flood-color="#000" flood-opacity="0.4"/>
|
|
9
|
+
</filter>
|
|
10
|
+
</defs>
|
|
11
|
+
|
|
12
|
+
<rect width="100%" height="100%" fill="#0d0d1a"/>
|
|
13
|
+
|
|
14
|
+
<!-- Window -->
|
|
15
|
+
<rect x="12" y="10" width="876" height="783" fill="#1e1e2e" rx="8" filter="url(#shadow)"/>
|
|
16
|
+
<rect x="12" y="10" width="876" height="36" fill="#181825" rx="8"/>
|
|
17
|
+
<rect x="12" y="46" width="876" height="2" fill="#313244"/>
|
|
18
|
+
|
|
19
|
+
<!-- Traffic lights -->
|
|
20
|
+
<circle cx="24" cy="28" r="5" fill="#f38ba8"/>
|
|
21
|
+
<circle cx="42" cy="28" r="5" fill="#f9e2af"/>
|
|
22
|
+
<circle cx="60" cy="28" r="5" fill="#a6e3a1"/>
|
|
23
|
+
<text x="450" y="34" fill="#6c7086" font-family="'JetBrains Mono','Fira Code',monospace" font-size="13" text-anchor="middle">search-cli — terminal GitHub browser</text>
|
|
24
|
+
|
|
25
|
+
<g font-family="'JetBrains Mono','Fira Code','Cascadia Code',monospace" font-size="14">
|
|
26
|
+
<text x="14" y="62" fill="#6c7086" font-family="'JetBrains Mono','Fira Code','Cascadia Code',monospace" font-size="14">search-cli — GitHub repo browser [t]rending [/]search [g]raph [r]efresh [q]uit</text>
|
|
27
|
+
<rect x="14" y="69" width="860" height="54.5" fill="#1e1e2e" stroke="#89b4fa" stroke-width="1" rx="3"/>
|
|
28
|
+
<text x="22" y="88" fill="#89b4fa" font-family="'JetBrains Mono','Fira Code','Cascadia Code',monospace" font-size="14">> language:TypeScript stars:>1000</text>
|
|
29
|
+
<text x="14" y="150.2" fill="#6c7086" font-family="'JetBrains Mono','Fira Code','Cascadia Code',monospace" font-size="14">sort: stars limit: 50 (s=cycle sort l=cycle limit)</text>
|
|
30
|
+
<rect x="14" y="159.3" width="432" height="378" fill="#1e1e2e" stroke="#45475a" stroke-width="1" rx="3"/>
|
|
31
|
+
<text x="22" y="177.5" fill="#89b4fa" font-family="'JetBrains Mono','Fira Code','Cascadia Code',monospace" font-size="14"> Results </text>
|
|
32
|
+
<rect x="18" y="178.20000000000002" width="424" height="20" fill="#2d5bcf" rx="3"/>
|
|
33
|
+
<text x="24" y="198.5" fill="#ffffff" font-family="'JetBrains Mono','Fira Code','Cascadia Code',monospace" font-size="14">shadcn/ui ★ 78.5k</text>
|
|
34
|
+
<text x="24" y="221.6" fill="#cdd6f4" font-family="'JetBrains Mono','Fira Code','Cascadia Code',monospace" font-size="14">vercel/next.js ★ 129k</text>
|
|
35
|
+
<text x="24" y="244.7" fill="#cdd6f4" font-family="'JetBrains Mono','Fira Code','Cascadia Code',monospace" font-size="14">tailwindlabs/tailwindcss ★ 84.2k</text>
|
|
36
|
+
<text x="24" y="267.8" fill="#cdd6f4" font-family="'JetBrains Mono','Fira Code','Cascadia Code',monospace" font-size="14">tauri-apps/tauri ★ 84.1k</text>
|
|
37
|
+
<text x="24" y="290.9" fill="#cdd6f4" font-family="'JetBrains Mono','Fira Code','Cascadia Code',monospace" font-size="14">oven-sh/bun ★ 74.5k</text>
|
|
38
|
+
<text x="24" y="314" fill="#cdd6f4" font-family="'JetBrains Mono','Fira Code','Cascadia Code',monospace" font-size="14">n8n-io/n8n ★ 54.4k</text>
|
|
39
|
+
<text x="24" y="337.1" fill="#cdd6f4" font-family="'JetBrains Mono','Fira Code','Cascadia Code',monospace" font-size="14">astral-sh/ruff ★ 36.1k</text>
|
|
40
|
+
<text x="24" y="360.20000000000005" fill="#cdd6f4" font-family="'JetBrains Mono','Fira Code','Cascadia Code',monospace" font-size="14">missive/emoji-mart ★ 8.8k</text>
|
|
41
|
+
<text x="24" y="383.3" fill="#cdd6f4" font-family="'JetBrains Mono','Fira Code','Cascadia Code',monospace" font-size="14">sharkdp/bat ★ 50.3k</text>
|
|
42
|
+
<text x="24" y="406.4" fill="#cdd6f4" font-family="'JetBrains Mono','Fira Code','Cascadia Code',monospace" font-size="14">BurntSushi/ripgrep ★ 48.8k</text>
|
|
43
|
+
<text x="24" y="429.5" fill="#cdd6f4" font-family="'JetBrains Mono','Fira Code','Cascadia Code',monospace" font-size="14">jdx/mise ★ 14.3k</text>
|
|
44
|
+
<text x="24" y="452.6" fill="#cdd6f4" font-family="'JetBrains Mono','Fira Code','Cascadia Code',monospace" font-size="14">nektos/act ★ 56.1k</text>
|
|
45
|
+
<text x="24" y="475.70000000000005" fill="#cdd6f4" font-family="'JetBrains Mono','Fira Code','Cascadia Code',monospace" font-size="14">astral-sh/uv ★ 40.2k</text>
|
|
46
|
+
<text x="24" y="498.8" fill="#cdd6f4" font-family="'JetBrains Mono','Fira Code','Cascadia Code',monospace" font-size="14">zed-industries/zed ★ 52k</text>
|
|
47
|
+
<rect x="450" y="159.3" width="432" height="378" fill="#1e1e2e" stroke="#45475a" stroke-width="1" rx="3"/>
|
|
48
|
+
<text x="456" y="177.5" fill="#a6e3a1" font-family="'JetBrains Mono','Fira Code','Cascadia Code',monospace" font-size="14"> Details </text>
|
|
49
|
+
<text x="458" y="198.5" fill="#6c7086" font-family="'JetBrains Mono','Fira Code','Cascadia Code',monospace" font-size="14">Name shadcn/ui</text>
|
|
50
|
+
<text x="458" y="221.6" fill="#6c7086" font-family="'JetBrains Mono','Fira Code','Cascadia Code',monospace" font-size="14">Stars 78,500</text>
|
|
51
|
+
<text x="458" y="244.7" fill="#6c7086" font-family="'JetBrains Mono','Fira Code','Cascadia Code',monospace" font-size="14">Forks 4,200</text>
|
|
52
|
+
<text x="458" y="267.8" fill="#6c7086" font-family="'JetBrains Mono','Fira Code','Cascadia Code',monospace" font-size="14">Lang TypeScript</text>
|
|
53
|
+
<text x="458" y="290.9" fill="#6c7086" font-family="'JetBrains Mono','Fira Code','Cascadia Code',monospace" font-size="14">Updated 2026-07-12</text>
|
|
54
|
+
<text x="458" y="314" fill="#6c7086" font-family="'JetBrains Mono','Fira Code','Cascadia Code',monospace" font-size="14">Topics react, ui, components, shadcn</text>
|
|
55
|
+
<text x="458" y="360.20000000000005" fill="#cdd6f4" font-family="'JetBrains Mono','Fira Code','Cascadia Code',monospace" font-size="14">Beautifully designed components built with Radix UI and</text>
|
|
56
|
+
<text x="458" y="383.3" fill="#cdd6f4" font-family="'JetBrains Mono','Fira Code','Cascadia Code',monospace" font-size="14">Tailwind CSS.</text>
|
|
57
|
+
<text x="458" y="429.5" fill="#89b4fa" font-family="'JetBrains Mono','Fira Code','Cascadia Code',monospace" font-size="14">https://github.com/shadcn/ui</text>
|
|
58
|
+
<rect x="14" y="489" width="860" height="25" fill="#181825" rx="3"/>
|
|
59
|
+
<rect x="14" y="489" width="860" height="2" fill="#45475a"/>
|
|
60
|
+
<text x="18" y="521.9" fill="#6c7086" font-family="'JetBrains Mono','Fira Code','Cascadia Code',monospace" font-size="14">15,842 results (↑↓ nav Enter open o browser Ctrl+R history)</text>
|
|
61
|
+
<rect x="338.79999999999995" y="70" width="5.76" height="16" fill="#89b4fa" opacity="0.8">
|
|
62
|
+
<animate attributeName="opacity" values="0.8;0.1;0.8" dur="1s" repeatCount="indefinite"/>
|
|
63
|
+
</rect>
|
|
64
|
+
|
|
65
|
+
</g>
|
|
66
|
+
</svg>
|
package/package.json
CHANGED
|
@@ -1,33 +1,42 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "github-search-cli",
|
|
3
|
-
"version": "0.
|
|
4
|
-
"description": "Terminal-native GitHub
|
|
3
|
+
"version": "0.8.0",
|
|
4
|
+
"description": "Terminal-native GitHub search — search, trending, bookmarks, history, deep-dive, compare, export, and more. All keyboard-driven, no browser needed.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"bin": {
|
|
7
|
-
"
|
|
7
|
+
"ghfind": "bin/ghfind.js"
|
|
8
8
|
},
|
|
9
9
|
"files": [
|
|
10
10
|
"bin/",
|
|
11
11
|
"src/",
|
|
12
12
|
"completions/",
|
|
13
|
+
"demo.svg",
|
|
13
14
|
"LICENSE",
|
|
14
15
|
"README.md"
|
|
15
16
|
],
|
|
16
17
|
"scripts": {
|
|
17
18
|
"start": "bun run src/cli.ts",
|
|
18
|
-
"build": "
|
|
19
|
-
"prepublishOnly": "
|
|
20
|
-
"test": "
|
|
21
|
-
"dev": "bun run --watch src/tui.ts"
|
|
19
|
+
"build": "tsup src/cli.ts --format esm --target node20 --out-dir dist --external @opentui/core",
|
|
20
|
+
"prepublishOnly": "npm run build",
|
|
21
|
+
"test": "vitest run",
|
|
22
|
+
"dev": "bun run --watch src/tui.ts",
|
|
23
|
+
"format:check": "prettier --check .",
|
|
24
|
+
"format": "prettier --write ."
|
|
22
25
|
},
|
|
23
26
|
"dependencies": {
|
|
24
27
|
"@opentui/core": "^0.4.3"
|
|
25
28
|
},
|
|
26
29
|
"devDependencies": {
|
|
27
|
-
"@types/bun": "latest"
|
|
30
|
+
"@types/bun": "latest",
|
|
31
|
+
"@types/node": "^20.0.0",
|
|
32
|
+
"prettier": "^3.2.0",
|
|
33
|
+
"tsup": "^8.0.0",
|
|
34
|
+
"tsx": "^4.0.0",
|
|
35
|
+
"typescript": "^5.3.0",
|
|
36
|
+
"vitest": "^1.2.0"
|
|
28
37
|
},
|
|
29
38
|
"engines": {
|
|
30
|
-
"
|
|
39
|
+
"node": ">=20.0.0"
|
|
31
40
|
},
|
|
32
41
|
"repository": {
|
|
33
42
|
"type": "git",
|