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 CHANGED
@@ -1,188 +1,145 @@
1
- # search-cli
2
-
3
- > The terminal home for GitHub discovery — search, trending, bookmarks, and deep-dive repo exploration, all without touching a browser.
4
-
5
- ```bash
6
- npx github-search-cli # TUI browser
7
- search-cli "language:Rust stars:>1000" --json # CLI mode
8
- search-cli --version
9
- ```
10
-
11
- ---
12
-
13
- ## Features
14
-
15
- | Category | Features |
16
- |----------|----------|
17
- | **Search** | Free-text + qualifiers (`language:`, `stars:`, `topic:`, etc.), sort by stars/updated/forks, auto-complete on Tab |
18
- | **Trending** | Browse GitHub trending by day/week/month/year, language filter |
19
- | **Memory** | Persistent search history (`Ctrl+R`), bookmarks (`b`/`B`), saved searches (`Ctrl+S`/`Ctrl+O`), session restore |
20
- | **Deep-dive** | Per-repo detail: languages bar, top contributors, README preview (`d`) |
21
- | **Compare** | Select 2+ repos and compare side-by-side (`c`/`C`) |
22
- | **Explore** | Browse popular GitHub topics (`E`) |
23
- | **Export** | JSON, CSV, Markdown, plain text (`Ctrl+E`) |
24
- | **Shell** | Pipe-friendly `--json`/`--csv`/`--markdown`, `--format urls`, `--pipe open/clone`, `--watch`, shell completions |
25
- | **Delight** | 3 themes (Tokyo Night, Dracula, Monokai), animated status bar, notification center, clipboard share, startup tips |
26
-
27
- ---
28
-
29
- ## Quick start
30
-
31
- ```bash
32
- # Requires Bun (https://bun.sh)
33
- npm install -g github-search-cli
34
- # or: bun install -g github-search-cli
35
-
36
- # Launch the interactive TUI browser
37
- search-cli
38
-
39
- # Non-interactive search (pipe to jq, csvkit, etc.)
40
- search-cli "language:Rust stars:>10000" --json | jq '.[].fullName'
41
- search-cli "language:Zig" --count
42
- search-cli --trending --json --since weekly
43
- ```
44
-
45
- ---
46
-
47
- ## TUI keyboard shortcuts
48
-
49
- ### Main view
50
-
51
- | Key | Action |
52
- |-----|--------|
53
- | `/` | Focus search input |
54
- | `Enter` | Execute search / open repo |
55
- | `↑`/`↓` / `j`/`k` | Navigate results |
56
- | `t` | Toggle search / trending |
57
- | `s` | Cycle sort |
58
- | `l` | Cycle limit |
59
- | `r` | Refresh |
60
- | `g` | Toggle activity graph |
61
- | `d` | Toggle repo deep-dive |
62
- | `o` | Open repo in browser |
63
- | `b` / `B` | Toggle bookmark / open bookmarks |
64
- | `c` / `C` | Toggle compare list / show comparison |
65
- | `E` | Open topic explorer |
66
- | `Tab` | Auto-complete qualifier |
67
- | `?` / `Ctrl+H` | Help overlay |
68
- | `q` | Quit |
69
-
70
- ### Overlays
71
-
72
- | Key | Action |
73
- |-----|--------|
74
- | `Ctrl+R` | Search history |
75
- | `Ctrl+S` | Save current search |
76
- | `Ctrl+O` | Saved searches panel |
77
- | `Ctrl+E` | Export results |
78
- | `Ctrl+N` | Notifications |
79
- | `Ctrl+P` | Share repo (copy to clipboard) |
80
- | `PageDown` / `Ctrl+F` | Next page |
81
- | `Esc` | Close overlay |
82
-
83
- ### Trending mode
84
-
85
- | Key | Action |
86
- |-----|--------|
87
- | `1`–`5` | Switch tab (Today → Week → Month → Year → All) |
88
- | `←`/`→` / `h`/`l` | Navigate tabs |
89
-
90
- ---
91
-
92
- ## Search syntax
93
-
94
- ```
95
- language:Rust stars:>1000 topic:cli
96
- "machine learning" language:Python stars:>5000
97
- topic:cli -language:JavaScript
98
- org:rust-lang language:Rust
99
- ```
100
-
101
- Supported qualifiers: `language:`, `stars:`, `fork:`, `archived:`, `topic:`, `user:`, `org:`, `repo:`, `updated:`, `pushed:`, `visibility:`, `license:`, `created:`, `size:`, `in:`. Prefix with `-` to exclude.
102
-
103
- ---
104
-
105
- ## CLI modes (non-interactive)
106
-
107
- ```bash
108
- search-cli "query" --json # JSON array
109
- search-cli "query" --csv # CSV
110
- search-cli "query" --markdown # Markdown table
111
- search-cli "query" --count # Just the number
112
- search-cli "query" --format urls # One URL per line
113
- search-cli "query" --pipe open # Open each in browser
114
- search-cli "query" --pipe clone # Print clone commands
115
- search-cli --trending --json # Trending as JSON
116
- search-cli --watch "query" # Poll every 300s
117
- ```
118
-
119
- ### Shell completions
120
-
121
- ```bash
122
- source <(search-cli --completion bash) # Bash
123
- source <(search-cli --completion zsh) # Zsh
124
- search-cli --completion fish | source # Fish
125
- ```
126
-
127
- ### `gh` extension
128
-
129
- ```bash
130
- gh extension install ./gh-search-cli
131
- gh search-cli "language:Rust"
132
- ```
133
-
134
- ---
135
-
136
- ## Configuration
137
-
138
- `~/.config/search-cli/config.json` (created automatically):
139
-
140
- ```json
141
- {
142
- "defaultSort": "stars",
143
- "defaultLimit": 50,
144
- "theme": "tokyo-night",
145
- "githubToken": "ghp_..."
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
- # search-cli bash completion
2
- # Source: source <(search-cli --completion bash)
1
+ # ghfind bash completion
2
+ # Source: source <(ghfind --completion bash)
3
3
 
4
- _search_cli() {
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 _search_cli search-cli
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
- # search-cli zsh completion
2
- # Source: source <(search-cli --completion zsh)
3
-
4
- _search_cli() {
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 _search_cli search-cli
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&amp;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">&gt; language:TypeScript stars:&gt;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.6.1",
4
- "description": "Terminal-native GitHub browser — search, trending, bookmarks, history, deep-dive, compare, export, and more. All keyboard-driven, no browser needed.",
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
- "search-cli": "bin/search-cli.js"
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": "bun run scripts/build.ts",
19
- "prepublishOnly": "bun run build",
20
- "test": "bun 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
- "bun": ">=1.0"
39
+ "node": ">=20.0.0"
31
40
  },
32
41
  "repository": {
33
42
  "type": "git",