github-search-cli 9.9.0 → 9.10.1
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 +94 -0
- package/README.md +49 -51
- package/dist/cli.js +562 -121
- package/docs/HOW-TO.md +3 -2
- package/package.json +2 -2
- package/release-notes/9.10.0.md +137 -0
- package/release-notes/9.10.1.md +59 -0
- package/src/cli.ts +77 -7
- package/src/help.ts +21 -4
- package/src/history.ts +4 -5
- package/src/mcp-server.ts +4 -2
- package/src/output.ts +11 -1
- package/src/package-browser.ts +2 -0
- package/src/status.ts +40 -0
- package/src/trending.ts +3 -1
- package/src/tui/mouse.ts +349 -0
- package/src/tui.ts +428 -114
- package/src/watch.ts +18 -6
- package/src/export.ts +0 -73
- package/src/pipe.ts +0 -60
- package/src/search-state.ts +0 -278
package/CHANGELOG.md
CHANGED
|
@@ -6,6 +6,100 @@ Format follows [Keep a Changelog](https://keepachangelog.com/en/1.0.0/). Publish
|
|
|
6
6
|
|
|
7
7
|
---
|
|
8
8
|
|
|
9
|
+
## [9.10.1] — 2026-10-08 (released)
|
|
10
|
+
|
|
11
|
+
### Fixed
|
|
12
|
+
|
|
13
|
+
- **`--interval` is parsed again.** The flag was documented in `--help`, the
|
|
14
|
+
README, the shell completions and `docs/HOW-TO.md`, but `parseArgs` had no
|
|
15
|
+
case for it — so `ghfind --watch --interval 60` silently searched for
|
|
16
|
+
`"--interval 60"` and polled at the default 300s. It now parses a positive
|
|
17
|
+
whole number of seconds and rejects anything else.
|
|
18
|
+
- **`--format` and `--pipe` validate up front.** A typo like `--format jsonn`
|
|
19
|
+
used to throw `Unknown format` mid-run and route into the crash-report flow
|
|
20
|
+
(which prints "ghfind encountered an unexpected error" and opens a GitHub
|
|
21
|
+
issue tab); `--pipe clonee` silently did nothing and exited 0. Both now fail
|
|
22
|
+
fast with the list of valid values and exit 1.
|
|
23
|
+
- **An empty query no longer reaches GitHub.** `ghfind --count` sent `q=" "`,
|
|
24
|
+
got a 422 back, and surfaced it as "⚠ Network error — check your connection.
|
|
25
|
+
Retrying in 5s…". The search/format/pipe/watch handlers now fail fast with a
|
|
26
|
+
usage hint instead.
|
|
27
|
+
- **Bare `ghfind --trending` launches the trending view** (as TRACKER.md
|
|
28
|
+
documents) instead of falling through to the landing menu.
|
|
29
|
+
- **`--since` validates its value** (`daily|weekly|monthly`) instead of
|
|
30
|
+
silently falling back to daily for anything it did not recognize — matching
|
|
31
|
+
the existing `--sort` validation.
|
|
32
|
+
- **Watch mode honors `--since`.** The trending period was derived from the
|
|
33
|
+
query string (`ghfind --watch --trending weekly`), so `--since weekly` was
|
|
34
|
+
ignored in watch-trending. An explicit `--since` now wins; the query-string
|
|
35
|
+
convention still applies when the flag is absent.
|
|
36
|
+
- **The MCP `ghfind_user_profile` tool returns formatted text** like
|
|
37
|
+
`ghfind_org_profile` (and like the CLI's default `ghfind user`), instead of
|
|
38
|
+
raw JSON; the structured profile still rides along in `data`.
|
|
39
|
+
- **Trending TUI footer matches the `/` key** (scroll-to-top: `/ top`, not
|
|
40
|
+
`/ search`), and the quit paths of the main TUI, trending and package browser
|
|
41
|
+
call `renderer.destroy()` before `process.exit(0)` so the terminal is
|
|
42
|
+
released (raw mode, alternate screen).
|
|
43
|
+
|
|
44
|
+
### Removed
|
|
45
|
+
|
|
46
|
+
- Dead modules with no importers: `src/search-state.ts` (stale
|
|
47
|
+
`config.githubTokens` reference from before token unification),
|
|
48
|
+
`src/export.ts` and `src/pipe.ts` (byte-for-byte duplicates of the formats
|
|
49
|
+
in `src/output.ts`, which is what everything imports), and the unused
|
|
50
|
+
`historyCount()` export.
|
|
51
|
+
|
|
52
|
+
## [9.10.0] — 2026-10-03 (released)
|
|
53
|
+
|
|
54
|
+
### Added
|
|
55
|
+
|
|
56
|
+
- **The TUI is now fully clickable.** The mouse was already enabled — OpenTUI
|
|
57
|
+
emits SGR mouse tracking and hit-tests every event — but nothing consumed the
|
|
58
|
+
events, so they were silently discarded. Every list, card, tab and button now
|
|
59
|
+
responds:
|
|
60
|
+
- **Click** selects a row; the detail pane updates exactly as it does with
|
|
61
|
+
`↑`/`↓`, because clicks ride the same `selectionChanged` event the keyboard
|
|
62
|
+
already used.
|
|
63
|
+
- **Double-click** opens the repo in your browser, or runs the overlay's
|
|
64
|
+
action — the same code path as `Enter`, so the two can't drift apart.
|
|
65
|
+
- **Scroll wheel** moves the selection in a list and scrolls long panes
|
|
66
|
+
(README, help, org profile, update notes). This also fixes a pre-existing
|
|
67
|
+
bug: the wheel previously fell through to whichever renderable held focus,
|
|
68
|
+
so scrolling while the README viewer was open scrolled the wrong pane.
|
|
69
|
+
- **Click outside an overlay** dismisses it, the same as `Esc`.
|
|
70
|
+
- Landing cards, trending tabs, the update dialog's buttons, and every
|
|
71
|
+
overlay list (history, bookmarks, saved searches, topics, export, share,
|
|
72
|
+
command menu) are clickable. Hovering shows a pointer cursor and lifts the
|
|
73
|
+
row background.
|
|
74
|
+
- **A <kbd>☰ menu</kbd> button in the bottom-right corner** opens the command
|
|
75
|
+
menu. It floats above the layout and hides while an overlay is open.
|
|
76
|
+
|
|
77
|
+
### Changed
|
|
78
|
+
|
|
79
|
+
- **`Esc` now opens the command menu; `Space` no longer does.** `Space` opened
|
|
80
|
+
the menu only while the query input was _not_ focused, which made one key mean
|
|
81
|
+
two different things depending on invisible state — and it meant `Space` could
|
|
82
|
+
not type a space in a query. More confusingly, it worked only _after_ you had
|
|
83
|
+
clicked a result row: clicking moved focus to the list as a side effect of
|
|
84
|
+
OpenTUI's auto-focus-on-press, and `Space` was gated on that focus being gone.
|
|
85
|
+
`Esc` is now the sole binding (it already closed overlays), and `Space` always
|
|
86
|
+
types. The bottom-right <kbd>☰ menu</kbd> button covers mouse users.
|
|
87
|
+
- Help, the README keybinding tables and `docs/HOW-TO.md` now document the mouse
|
|
88
|
+
bindings and the `Esc` menu binding.
|
|
89
|
+
|
|
90
|
+
### Fixed
|
|
91
|
+
|
|
92
|
+
- **Non-interactive text no longer swallows clicks.** Every `TextRenderable`
|
|
93
|
+
defaults to OpenTUI's `selectable: true`, and a left-press on a selectable
|
|
94
|
+
renderable is consumed as a text-selection drag before the app's own handlers
|
|
95
|
+
run. The detail pane, comparison table, tab bar and other read-only text now
|
|
96
|
+
opt out, so clicks over them behave.
|
|
97
|
+
- **A hover highlight no longer painted the list magenta.** OpenTUI's colour
|
|
98
|
+
parser accepts only hex and CSS names; an `rgba(...)` hover tint silently
|
|
99
|
+
resolved to its magenta fallback. Now expressed as 8-digit hex.
|
|
100
|
+
|
|
101
|
+
---
|
|
102
|
+
|
|
9
103
|
## [9.9.0] — 2026-10-01 (released)
|
|
10
104
|
|
|
11
105
|
### Added
|
package/README.md
CHANGED
|
@@ -172,19 +172,19 @@ ghfind --completion fish | source
|
|
|
172
172
|
<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>
|
|
173
173
|
<tr><td><b>Trending</b></td><td>Today, week, month, year — filter by language</td></tr>
|
|
174
174
|
<tr><td><b>Packages</b></td><td>npm registry search (beta) — <code>ghfind pkg "query"</code></td></tr>
|
|
175
|
-
<tr><td><b>Bookmarks</b></td><td>
|
|
176
|
-
<tr><td><b>Deep-dive</b></td><td>
|
|
177
|
-
<tr><td><b>Compare</b></td><td>
|
|
178
|
-
<tr><td><b>Explore</b></td><td>
|
|
179
|
-
<tr><td><b>History</b></td><td>
|
|
180
|
-
<tr><td><b>Saved</b></td><td>
|
|
181
|
-
<tr><td><b>Export</b></td><td>
|
|
182
|
-
<tr><td><b>Share</b></td><td>
|
|
183
|
-
<tr><td><b>Org profile</b></td><td>
|
|
175
|
+
<tr><td><b>Bookmarks</b></td><td>Menu → Bookmark / Bookmarks panel — save repos, tag them</td></tr>
|
|
176
|
+
<tr><td><b>Deep-dive</b></td><td>Menu → Deep-dive — languages, contributors, README, activity chart</td></tr>
|
|
177
|
+
<tr><td><b>Compare</b></td><td>Menu → Compare select / Compare view — side-by-side, select 2+ repos</td></tr>
|
|
178
|
+
<tr><td><b>Explore</b></td><td>Menu → Topics — browse popular GitHub topics</td></tr>
|
|
179
|
+
<tr><td><b>History</b></td><td>Menu → History — recall past searches</td></tr>
|
|
180
|
+
<tr><td><b>Saved</b></td><td>Menu → Saved searches — load or save queries</td></tr>
|
|
181
|
+
<tr><td><b>Export</b></td><td>Menu → Export — JSON, CSV, Markdown to file</td></tr>
|
|
182
|
+
<tr><td><b>Share</b></td><td>Menu → Share repo — copy repo link to clipboard</td></tr>
|
|
183
|
+
<tr><td><b>Org profile</b></td><td>Menu → Org profile — org summary: repos, stars, top languages (<code>ghfind org <name></code> in CLI)</td></tr>
|
|
184
184
|
<tr><td><b>User profile</b></td><td>User summary like org profile — repos, stars, followers, top languages (<code>ghfind user <name></code>)</td></tr>
|
|
185
|
-
<tr><td><b>Notifications</b></td><td>
|
|
185
|
+
<tr><td><b>Notifications</b></td><td>Menu → Notifications — view & dismiss alerts</td></tr>
|
|
186
186
|
<tr><td><b>Releases</b></td><td><code>--releases</code> — new-release feed for bookmarked repos</td></tr>
|
|
187
|
-
<tr><td><b>Graph</b></td><td>
|
|
187
|
+
<tr><td><b>Graph</b></td><td>Menu → Activity graph — commit chart, fullscreen toggle</td></tr>
|
|
188
188
|
<tr><td><b>Help</b></td><td><code>?</code> / <code>Ctrl+H</code> — keybindings reference</td></tr>
|
|
189
189
|
<tr><td><b>Watch</b></td><td><code>--watch</code> — poll for new results</td></tr>
|
|
190
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>
|
|
@@ -214,16 +214,26 @@ ghfind --completion fish | source
|
|
|
214
214
|
| `/` | Focus search input |
|
|
215
215
|
| `Enter` | Execute search / open selected repo in browser |
|
|
216
216
|
| `↑` / `↓` — `j` / `k` | Navigate results & menus |
|
|
217
|
-
| `
|
|
217
|
+
| `Esc` | Open / close leader menu (contextual actions) |
|
|
218
218
|
| `Tab` | Auto-complete search qualifier |
|
|
219
219
|
| `?` or `Ctrl+H` | Help overlay |
|
|
220
220
|
| `1`–`5` | Switch trending tabs (Today → All) |
|
|
221
221
|
| `←` / `→` — `h` / `l` | Switch trending tabs (left/right) |
|
|
222
222
|
| `PageUp` | Jump to top of results |
|
|
223
223
|
| `PageDown` | Load next page of results |
|
|
224
|
-
| `Esc` | Close current overlay |
|
|
225
224
|
| `q` | Quit ghfind |
|
|
226
225
|
|
|
226
|
+
**Mouse** — every list is clickable, and the keyboard and mouse are interchangeable
|
|
227
|
+
|
|
228
|
+
| Input | Action |
|
|
229
|
+
| --------------------------------------- | ----------------------------------------- |
|
|
230
|
+
| Click | Select a row / card / trending tab |
|
|
231
|
+
| Double-click | Open the repo, or run the action |
|
|
232
|
+
| Scroll wheel | Move the selection, or scroll a long pane |
|
|
233
|
+
| Click outside an overlay | Dismiss it (same as `Esc`) |
|
|
234
|
+
| Click the query box | Focus the search input |
|
|
235
|
+
| Click <kbd>☰ menu</kbd> (bottom-right) | Open the leader menu |
|
|
236
|
+
|
|
227
237
|
**Error recovery** — active only while the matching error is in the status bar
|
|
228
238
|
|
|
229
239
|
| Key | Action |
|
|
@@ -233,7 +243,7 @@ ghfind --completion fish | source
|
|
|
233
243
|
| `u` | Search without a token (401) |
|
|
234
244
|
| `c` | Change token (rate limit) |
|
|
235
245
|
|
|
236
|
-
**Leader menu** — press `
|
|
246
|
+
**Leader menu** — press `Esc` (or click <kbd>☰ menu</kbd>), navigate with `↑`/`↓`, press `Enter` to dispatch
|
|
237
247
|
|
|
238
248
|
Actions shown depend on current mode (search vs trending) and selection:
|
|
239
249
|
|
|
@@ -277,7 +287,7 @@ Actions shown depend on current mode (search vs trending) and selection:
|
|
|
277
287
|
|
|
278
288
|
Trending tabs: `1`–`5` (Today → All) or `←`/`→` — `h`/`l`
|
|
279
289
|
|
|
280
|
-
> Most actions are accessed via the **leader menu** (`
|
|
290
|
+
> Most actions are accessed via the **leader menu** (`Esc`, or the <kbd>☰ menu</kbd> button in the bottom-right corner). This keeps the keymap minimal while providing a full command palette. The leader menu filters actions contextually — items that don't apply (e.g., Bookmark with no repo selected) are hidden.
|
|
281
291
|
|
|
282
292
|
</details>
|
|
283
293
|
|
|
@@ -337,14 +347,14 @@ cd ghfind
|
|
|
337
347
|
# With Bun (recommended for TUI)
|
|
338
348
|
bun install
|
|
339
349
|
bun start # TUI
|
|
340
|
-
bun test #
|
|
350
|
+
bun test # 682 tests
|
|
341
351
|
bun run check # format check + tests — the green gate
|
|
342
352
|
bun run build # build dist/
|
|
343
353
|
|
|
344
354
|
# Or with npm
|
|
345
355
|
npm install
|
|
346
356
|
npm start # TUI (requires Node 20+)
|
|
347
|
-
npm test #
|
|
357
|
+
npm test # 682 tests
|
|
348
358
|
npm run build # build dist/
|
|
349
359
|
|
|
350
360
|
> Want to contribute? See [CONTRIBUTING.md](CONTRIBUTING.md) for commands,
|
|
@@ -378,6 +388,28 @@ for the architecture, measurements, and remaining work.
|
|
|
378
388
|
|
|
379
389
|
Recent releases (full history in [CHANGELOG.md](CHANGELOG.md)):
|
|
380
390
|
|
|
391
|
+
### v9.10.1
|
|
392
|
+
|
|
393
|
+
- **`--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
|
|
394
|
+
- **A flag typo no longer opens a GitHub issue tab** — `--format jsonn` threw mid-run and routed into the crash-report flow (printing "ghfind encountered an unexpected error" and opening a prefilled issue page); `--pipe clonee` silently did nothing and exited 0; both now validate up front, list the valid values, and exit 1
|
|
395
|
+
- **An empty query fails fast instead of faking a network error** — `ghfind --count` with no query sent `q=" "`, got a 422 back, and looped on `⚠ Network error — check your connection. Retrying in 5s...`; the search/format/pipe/watch handlers now print a usage hint instead
|
|
396
|
+
- **Bare `ghfind --trending` opens the trending view** instead of falling through to the landing menu, as documented
|
|
397
|
+
- **`--since` validates `daily|weekly|monthly`** instead of silently accepting anything and falling back to daily — the same treatment `--sort` already had
|
|
398
|
+
- **`--watch --trending --since weekly` polls weekly** — the trending period used to be derived from the query string, so `--since` was ignored in watch mode
|
|
399
|
+
- **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
|
+
- **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
|
+
|
|
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
|
+
|
|
381
413
|
### v9.9.0
|
|
382
414
|
|
|
383
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
|
|
@@ -391,40 +423,6 @@ Recent releases (full history in [CHANGELOG.md](CHANGELOG.md)):
|
|
|
391
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
|
|
392
424
|
- **A new [how-to guide](docs/HOW-TO.md)** — token setup, writing queries, reading results, recovering from errors, and copy-paste recipes
|
|
393
425
|
|
|
394
|
-
### v9.8.3
|
|
395
|
-
|
|
396
|
-
- **401/403 say what actually happened** — a rejected token and an authenticated-but-forbidden request (e.g. SAML/SSO enforcement) both used to report "Network error", naming a connectivity problem you didn't have; only genuine connectivity and server failures keep that message now
|
|
397
|
-
- **A rate-limited search no longer looks like an empty one** — the adapter used to swallow the error and render a silent, successful "no repositories found"; the real message reaches the status bar, and the `ghfind_search_repos` MCP tool returns `rateLimited: true` with backoff advice instead of a tool failure
|
|
398
|
-
- **Recover from errors without leaving the TUI** — while the matching error is in the status bar, `t` opens an inline token prompt (saves it and re-runs the failed query), `u` clears the token and retries unauthenticated, `c` swaps in a different token, `r` retries
|
|
399
|
-
- **A corrupted session no longer hijacks startup** — a `session.json` holding an MCP handshake blob used to skip the landing menu and auto-run that garbage as a search on every launch; the menu always comes first now, and both save and restore sanitize the session
|
|
400
|
-
- **Images wrapped in a link render now** — the badge-and-screenshot shape `[](url)` rendered nothing at all, which cost `sst/opencode` its only image and `withastro/astro` 23 of its 25; the image cells carry an OSC 8 hyperlink, so clicking it opens the target
|
|
401
|
-
- **A README full of small images no longer floods the screen** — images the README declares under 100px on any edge are skipped before a request is made, and undeclared `![]()` images are measured from the image header before any pixel decode; on `openclaw/openclaw` (648 sponsor avatars) that is 649 fetches / 28.3s → 1 fetch / ~0.5s
|
|
402
|
-
|
|
403
|
-
### v9.8.2
|
|
404
|
-
|
|
405
|
-
- **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
|
|
406
|
-
- **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
|
|
407
|
-
- **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`
|
|
408
|
-
- **Recoverable errors no longer open a bug-report tab** — rate limits, network blips and layout changes print a short message and exit
|
|
409
|
-
- **`--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
|
|
410
|
-
- **State files are written atomically** — a crash mid-write used to leave truncated JSON that was silently replaced with defaults, losing bookmarks and history
|
|
411
|
-
- 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
|
|
412
|
-
|
|
413
|
-
### v9.8.1
|
|
414
|
-
|
|
415
|
-
- **`ghfind skill search <query>`** finds agent skills by keyword and prints why
|
|
416
|
-
each one matched; `--remote` searches the public [skills.sh](https://skills.sh)
|
|
417
|
-
ecosystem instead, and `GHFIND_SKILL_ROOTS` overrides the scanned directories
|
|
418
|
-
- **MCP tool `ghfind_skill_search`** — agents search installed skills or the
|
|
419
|
-
skills.sh registry as soon as they connect; read-only
|
|
420
|
-
- **Read-only CLI views of local state** — `ghfind bookmarks`, `ghfind history`,
|
|
421
|
-
`ghfind saved`, `ghfind topics`, plus `ghfind readme <owner/repo>` and
|
|
422
|
-
`ghfind share <owner/repo>`, each with `--json` for agents
|
|
423
|
-
- **Shell completions** (bash, zsh, fish) cover every new subcommand and flag
|
|
424
|
-
- **README image rendering is incomplete** — see
|
|
425
|
-
[Known limitations](#known-limitations); the v9.8.0 notes wrongly described it
|
|
426
|
-
as working
|
|
427
|
-
|
|
428
426
|
## License
|
|
429
427
|
|
|
430
428
|
MIT
|