@shnitzel/plugscout 0.3.28 → 0.3.30
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/config/registries.json
CHANGED
|
@@ -2169,7 +2169,7 @@
|
|
|
2169
2169
|
{
|
|
2170
2170
|
"id": "cursor-extension:prettier",
|
|
2171
2171
|
"name": "Prettier - Code Formatter",
|
|
2172
|
-
"description": "Opinionated code formatter for JS, TS, CSS, HTML, JSON, Markdown
|
|
2172
|
+
"description": "Opinionated code formatter for JS, TS, CSS, HTML, JSON, Markdown — 69M installs.",
|
|
2173
2173
|
"capabilities": [
|
|
2174
2174
|
"formatting",
|
|
2175
2175
|
"code-style"
|
|
@@ -2203,7 +2203,7 @@
|
|
|
2203
2203
|
{
|
|
2204
2204
|
"id": "cursor-extension:eslint",
|
|
2205
2205
|
"name": "ESLint",
|
|
2206
|
-
"description": "Integrates ESLint linting into the editor with project rule enforcement and auto-fix
|
|
2206
|
+
"description": "Integrates ESLint linting into the editor with project rule enforcement and auto-fix — 51M installs.",
|
|
2207
2207
|
"capabilities": [
|
|
2208
2208
|
"linting",
|
|
2209
2209
|
"code-quality",
|
|
@@ -2238,7 +2238,7 @@
|
|
|
2238
2238
|
{
|
|
2239
2239
|
"id": "cursor-extension:python",
|
|
2240
2240
|
"name": "Python",
|
|
2241
|
-
"description": "Full Python support: IntelliSense, debugging, linting, formatting, testing
|
|
2241
|
+
"description": "Full Python support: IntelliSense, debugging, linting, formatting, testing — 220M installs.",
|
|
2242
2242
|
"capabilities": [
|
|
2243
2243
|
"language",
|
|
2244
2244
|
"linting",
|
|
@@ -2273,7 +2273,7 @@
|
|
|
2273
2273
|
{
|
|
2274
2274
|
"id": "cursor-extension:pylance",
|
|
2275
2275
|
"name": "Pylance",
|
|
2276
|
-
"description": "Fast, feature-rich Python language server with type checking (Pyright-based)
|
|
2276
|
+
"description": "Fast, feature-rich Python language server with type checking (Pyright-based) — 188M installs.",
|
|
2277
2277
|
"capabilities": [
|
|
2278
2278
|
"language",
|
|
2279
2279
|
"type-checking",
|
|
@@ -2307,7 +2307,7 @@
|
|
|
2307
2307
|
{
|
|
2308
2308
|
"id": "cursor-extension:jupyter",
|
|
2309
2309
|
"name": "Jupyter",
|
|
2310
|
-
"description": "Jupyter notebook support with interactive computing, cell execution, and IntelliSense
|
|
2310
|
+
"description": "Jupyter notebook support with interactive computing, cell execution, and IntelliSense — 105M installs.",
|
|
2311
2311
|
"capabilities": [
|
|
2312
2312
|
"notebooks",
|
|
2313
2313
|
"data-science",
|
|
@@ -2341,7 +2341,7 @@
|
|
|
2341
2341
|
{
|
|
2342
2342
|
"id": "cursor-extension:gitlens",
|
|
2343
2343
|
"name": "GitLens",
|
|
2344
|
-
"description": "Supercharged Git: blame annotations, commit history, branch visualization, code authorship
|
|
2344
|
+
"description": "Supercharged Git: blame annotations, commit history, branch visualization, code authorship — 50M installs.",
|
|
2345
2345
|
"capabilities": [
|
|
2346
2346
|
"git",
|
|
2347
2347
|
"blame",
|
|
@@ -2376,7 +2376,7 @@
|
|
|
2376
2376
|
{
|
|
2377
2377
|
"id": "cursor-extension:git-graph",
|
|
2378
2378
|
"name": "Git Graph",
|
|
2379
|
-
"description": "Interactive visual graph of commits, branches, and merges with one-click history exploration
|
|
2379
|
+
"description": "Interactive visual graph of commits, branches, and merges with one-click history exploration — 14M installs.",
|
|
2380
2380
|
"capabilities": [
|
|
2381
2381
|
"git",
|
|
2382
2382
|
"visualization",
|
|
@@ -2410,7 +2410,7 @@
|
|
|
2410
2410
|
{
|
|
2411
2411
|
"id": "cursor-extension:github-pull-requests",
|
|
2412
2412
|
"name": "GitHub Pull Requests",
|
|
2413
|
-
"description": "Create, manage, and review GitHub PRs and issues without leaving the editor
|
|
2413
|
+
"description": "Create, manage, and review GitHub PRs and issues without leaving the editor — 35M installs.",
|
|
2414
2414
|
"capabilities": [
|
|
2415
2415
|
"git",
|
|
2416
2416
|
"github",
|
|
@@ -2446,7 +2446,7 @@
|
|
|
2446
2446
|
{
|
|
2447
2447
|
"id": "cursor-extension:docker",
|
|
2448
2448
|
"name": "Docker",
|
|
2449
|
-
"description": "Container management, Dockerfile/Compose syntax, build and run Docker containers from the editor
|
|
2449
|
+
"description": "Container management, Dockerfile/Compose syntax, build and run Docker containers from the editor — 51M installs.",
|
|
2450
2450
|
"capabilities": [
|
|
2451
2451
|
"containers",
|
|
2452
2452
|
"devops",
|
|
@@ -2482,7 +2482,7 @@
|
|
|
2482
2482
|
{
|
|
2483
2483
|
"id": "cursor-extension:remote-containers",
|
|
2484
2484
|
"name": "Dev Containers",
|
|
2485
|
-
"description": "Open any folder inside a Docker container for fully reproducible, isolated dev environments
|
|
2485
|
+
"description": "Open any folder inside a Docker container for fully reproducible, isolated dev environments — 39M installs.",
|
|
2486
2486
|
"capabilities": [
|
|
2487
2487
|
"containers",
|
|
2488
2488
|
"remote",
|
|
@@ -2517,7 +2517,7 @@
|
|
|
2517
2517
|
{
|
|
2518
2518
|
"id": "cursor-extension:remote-ssh",
|
|
2519
2519
|
"name": "Remote - SSH",
|
|
2520
|
-
"description": "Edit files on remote machines over SSH as if they were local
|
|
2520
|
+
"description": "Edit files on remote machines over SSH as if they were local — 35M installs.",
|
|
2521
2521
|
"capabilities": [
|
|
2522
2522
|
"remote",
|
|
2523
2523
|
"ssh",
|
|
@@ -2551,7 +2551,7 @@
|
|
|
2551
2551
|
{
|
|
2552
2552
|
"id": "cursor-extension:tailwind-intellisense",
|
|
2553
2553
|
"name": "Tailwind CSS IntelliSense",
|
|
2554
|
-
"description": "Autocomplete, hover previews, and linting for Tailwind CSS utility classes
|
|
2554
|
+
"description": "Autocomplete, hover previews, and linting for Tailwind CSS utility classes — 14M installs.",
|
|
2555
2555
|
"capabilities": [
|
|
2556
2556
|
"frontend",
|
|
2557
2557
|
"css",
|
|
@@ -2586,7 +2586,7 @@
|
|
|
2586
2586
|
{
|
|
2587
2587
|
"id": "cursor-extension:error-lens",
|
|
2588
2588
|
"name": "Error Lens",
|
|
2589
|
-
"description": "Shows errors, warnings, and hints inline at the relevant code line as you type
|
|
2589
|
+
"description": "Shows errors, warnings, and hints inline at the relevant code line as you type — 9M installs.",
|
|
2590
2590
|
"capabilities": [
|
|
2591
2591
|
"linting",
|
|
2592
2592
|
"code-quality",
|
|
@@ -2620,7 +2620,7 @@
|
|
|
2620
2620
|
{
|
|
2621
2621
|
"id": "cursor-extension:thunder-client",
|
|
2622
2622
|
"name": "Thunder Client",
|
|
2623
|
-
"description": "Lightweight REST API client and HTTP test runner built into the editor
|
|
2623
|
+
"description": "Lightweight REST API client and HTTP test runner built into the editor — 7M installs.",
|
|
2624
2624
|
"capabilities": [
|
|
2625
2625
|
"api-testing",
|
|
2626
2626
|
"rest",
|
|
@@ -2655,7 +2655,7 @@
|
|
|
2655
2655
|
{
|
|
2656
2656
|
"id": "cursor-extension:code-spell-checker",
|
|
2657
2657
|
"name": "Code Spell Checker",
|
|
2658
|
-
"description": "Catches spelling errors in code identifiers, comments, and strings
|
|
2658
|
+
"description": "Catches spelling errors in code identifiers, comments, and strings — 17M installs.",
|
|
2659
2659
|
"capabilities": [
|
|
2660
2660
|
"spell-check",
|
|
2661
2661
|
"code-quality"
|
|
@@ -2688,7 +2688,7 @@
|
|
|
2688
2688
|
{
|
|
2689
2689
|
"id": "cursor-extension:pretty-ts-errors",
|
|
2690
2690
|
"name": "Pretty TypeScript Errors",
|
|
2691
|
-
"description": "Reformats complex TypeScript compiler errors into readable, human-friendly messages
|
|
2691
|
+
"description": "Reformats complex TypeScript compiler errors into readable, human-friendly messages — 2M installs.",
|
|
2692
2692
|
"capabilities": [
|
|
2693
2693
|
"typescript",
|
|
2694
2694
|
"debugging",
|
|
@@ -2719,7 +2719,16 @@
|
|
|
2719
2719
|
"sourceConfidence": "official"
|
|
2720
2720
|
}
|
|
2721
2721
|
}
|
|
2722
|
-
]
|
|
2722
|
+
],
|
|
2723
|
+
"remote": {
|
|
2724
|
+
"url": "https://raw.githubusercontent.com/amitrintzler/plugscout/main/assets/registries/cursor-extensions.json",
|
|
2725
|
+
"format": "json-array",
|
|
2726
|
+
"timeoutMs": 10000,
|
|
2727
|
+
"fallbackToLocal": true,
|
|
2728
|
+
"provider": "cursor",
|
|
2729
|
+
"official": false,
|
|
2730
|
+
"licenseHint": "community"
|
|
2731
|
+
}
|
|
2723
2732
|
},
|
|
2724
2733
|
{
|
|
2725
2734
|
"id": "curated-gemini-extensions",
|
|
@@ -2800,7 +2809,7 @@
|
|
|
2800
2809
|
{
|
|
2801
2810
|
"id": "gemini-extension:fetch",
|
|
2802
2811
|
"name": "Fetch MCP Server",
|
|
2803
|
-
"description": "Fetches web URLs and converts HTML to clean Markdown for LLM consumption
|
|
2812
|
+
"description": "Fetches web URLs and converts HTML to clean Markdown for LLM consumption — real-time web access.",
|
|
2804
2813
|
"capabilities": [
|
|
2805
2814
|
"web-fetch",
|
|
2806
2815
|
"content-conversion",
|
|
@@ -2868,7 +2877,7 @@
|
|
|
2868
2877
|
{
|
|
2869
2878
|
"id": "gemini-extension:context7",
|
|
2870
2879
|
"name": "Context7 MCP Server",
|
|
2871
|
-
"description": "Retrieves current, version-specific library docs and code examples on demand
|
|
2880
|
+
"description": "Retrieves current, version-specific library docs and code examples on demand — 890K weekly npm downloads.",
|
|
2872
2881
|
"capabilities": [
|
|
2873
2882
|
"docs-lookup",
|
|
2874
2883
|
"code-examples",
|
|
@@ -2902,7 +2911,7 @@
|
|
|
2902
2911
|
{
|
|
2903
2912
|
"id": "gemini-extension:playwright",
|
|
2904
2913
|
"name": "Playwright MCP Server",
|
|
2905
|
-
"description": "Browser automation via accessibility trees: navigate, click, fill forms, screenshot
|
|
2914
|
+
"description": "Browser automation via accessibility trees: navigate, click, fill forms, screenshot — official Microsoft MCP.",
|
|
2906
2915
|
"capabilities": [
|
|
2907
2916
|
"browser-automation",
|
|
2908
2917
|
"ui-testing",
|
|
@@ -2936,7 +2945,7 @@
|
|
|
2936
2945
|
{
|
|
2937
2946
|
"id": "gemini-extension:github",
|
|
2938
2947
|
"name": "GitHub MCP Server",
|
|
2939
|
-
"description": "Full GitHub API: repos, PRs, issues, code search, workflow triggers
|
|
2948
|
+
"description": "Full GitHub API: repos, PRs, issues, code search, workflow triggers — 28K+ GitHub stars, official GitHub.",
|
|
2940
2949
|
"capabilities": [
|
|
2941
2950
|
"github",
|
|
2942
2951
|
"pr-management",
|
|
@@ -2972,7 +2981,7 @@
|
|
|
2972
2981
|
{
|
|
2973
2982
|
"id": "gemini-extension:firecrawl",
|
|
2974
2983
|
"name": "Firecrawl MCP Server",
|
|
2975
|
-
"description": "Converts URLs to clean Markdown, web crawling, and structured data extraction
|
|
2984
|
+
"description": "Converts URLs to clean Markdown, web crawling, and structured data extraction — 8,800 weekly npm downloads.",
|
|
2976
2985
|
"capabilities": [
|
|
2977
2986
|
"web-scraping",
|
|
2978
2987
|
"crawling",
|
|
@@ -3074,7 +3083,7 @@
|
|
|
3074
3083
|
{
|
|
3075
3084
|
"id": "gemini-extension:supabase",
|
|
3076
3085
|
"name": "Supabase MCP Server",
|
|
3077
|
-
"description": "Access Supabase Postgres, edge functions, and storage with RLS awareness
|
|
3086
|
+
"description": "Access Supabase Postgres, edge functions, and storage with RLS awareness — official Supabase MCP.",
|
|
3078
3087
|
"capabilities": [
|
|
3079
3088
|
"database",
|
|
3080
3089
|
"postgres",
|
|
@@ -3109,7 +3118,7 @@
|
|
|
3109
3118
|
{
|
|
3110
3119
|
"id": "gemini-extension:brave-search",
|
|
3111
3120
|
"name": "Brave Search MCP Server",
|
|
3112
|
-
"description": "Web and local search via Brave's independent search index
|
|
3121
|
+
"description": "Web and local search via Brave's independent search index — privacy-respecting, no Google tracking.",
|
|
3113
3122
|
"capabilities": [
|
|
3114
3123
|
"web-search",
|
|
3115
3124
|
"local-search",
|
|
@@ -3211,7 +3220,7 @@
|
|
|
3211
3220
|
{
|
|
3212
3221
|
"id": "gemini-extension:sentry",
|
|
3213
3222
|
"name": "Sentry MCP Server",
|
|
3214
|
-
"description": "Real-time error tracking, stack traces, issue correlation, and release data from Sentry
|
|
3223
|
+
"description": "Real-time error tracking, stack traces, issue correlation, and release data from Sentry — official Sentry MCP.",
|
|
3215
3224
|
"capabilities": [
|
|
3216
3225
|
"error-tracking",
|
|
3217
3226
|
"observability",
|
|
@@ -3245,7 +3254,7 @@
|
|
|
3245
3254
|
{
|
|
3246
3255
|
"id": "gemini-extension:notion",
|
|
3247
3256
|
"name": "Notion MCP Server",
|
|
3248
|
-
"description": "Read and write Notion pages, databases, and search workspace content
|
|
3257
|
+
"description": "Read and write Notion pages, databases, and search workspace content — official Notion MCP.",
|
|
3249
3258
|
"capabilities": [
|
|
3250
3259
|
"knowledge-base",
|
|
3251
3260
|
"documents",
|
|
@@ -3344,7 +3353,16 @@
|
|
|
3344
3353
|
"sourceConfidence": "official"
|
|
3345
3354
|
}
|
|
3346
3355
|
}
|
|
3347
|
-
]
|
|
3356
|
+
],
|
|
3357
|
+
"remote": {
|
|
3358
|
+
"url": "https://raw.githubusercontent.com/amitrintzler/plugscout/main/assets/registries/gemini-extensions.json",
|
|
3359
|
+
"format": "json-array",
|
|
3360
|
+
"timeoutMs": 10000,
|
|
3361
|
+
"fallbackToLocal": true,
|
|
3362
|
+
"provider": "google",
|
|
3363
|
+
"official": false,
|
|
3364
|
+
"licenseHint": "community"
|
|
3365
|
+
}
|
|
3348
3366
|
}
|
|
3349
3367
|
]
|
|
3350
3368
|
}
|
|
@@ -1521,6 +1521,13 @@ function buildItemLinks(item) {
|
|
|
1521
1521
|
add('npm', `https://www.npmjs.com/package/${encodeURIComponent(pkg)}`);
|
|
1522
1522
|
}
|
|
1523
1523
|
}
|
|
1524
|
+
// MCP items: io.github.<owner>/<repo> ID pattern → derive GitHub URL
|
|
1525
|
+
if (item.kind === 'mcp' && item.id.startsWith('mcp:io.github.')) {
|
|
1526
|
+
const ownerRepo = item.id.slice('mcp:io.github.'.length);
|
|
1527
|
+
if (ownerRepo.includes('/')) {
|
|
1528
|
+
add('Repository', `https://github.com/${ownerRepo}`);
|
|
1529
|
+
}
|
|
1530
|
+
}
|
|
1524
1531
|
// install.url is the most direct link for the user
|
|
1525
1532
|
add('Install page', item.install.url);
|
|
1526
1533
|
// Metadata links — priority order
|
|
@@ -1,19 +1,16 @@
|
|
|
1
1
|
import fs from 'node:fs/promises';
|
|
2
2
|
import { spawn } from 'node:child_process';
|
|
3
3
|
import { createInterface, moveCursor, clearScreenDown } from 'node:readline';
|
|
4
|
-
import { loadQuarantine, loadWhitelist } from '../../../catalog/repository.js';
|
|
5
|
-
import { getStaleRegistries, loadSyncState } from '../../../catalog/sync-state.js';
|
|
6
4
|
import { getPackagePath } from '../../../lib/paths.js';
|
|
7
5
|
import { colors } from '../formatters/colors.js';
|
|
8
6
|
import { isSetUp, loadCatalogItems } from '../../../api/index.js';
|
|
9
7
|
export async function renderHomeScreen() {
|
|
10
8
|
const termCols = process.stdout.columns ?? 80;
|
|
11
9
|
const useCompact = termCols < 82;
|
|
12
|
-
const [logo, pkg, catalogStats
|
|
10
|
+
const [logo, pkg, catalogStats] = await Promise.all([
|
|
13
11
|
readLogo(useCompact),
|
|
14
12
|
readPackageMeta(),
|
|
15
13
|
readCatalogStats(),
|
|
16
|
-
readRuntimeStats()
|
|
17
14
|
]);
|
|
18
15
|
const lines = [];
|
|
19
16
|
const version = pkg.version ?? '0.0.0';
|
|
@@ -29,7 +26,6 @@ export async function renderHomeScreen() {
|
|
|
29
26
|
lines.push(colorIfTty('Catalog', colors.bold));
|
|
30
27
|
lines.push(colorIfTty(` items=${catalogStats.items} skill=${catalogStats.skill} mcp=${catalogStats.mcp} claude-plugin=${catalogStats.claudePlugin} claude-connector=${catalogStats.claudeConnector}`, colors.dim));
|
|
31
28
|
lines.push(colorIfTty(` copilot-extension=${catalogStats.copilotExtension} cursor-extension=${catalogStats.cursorExtension} gemini-extension=${catalogStats.geminiExtension}`, colors.dim));
|
|
32
|
-
lines.push(colorIfTty(` stale-registries=${runtimeStats.staleRegistries} whitelist=${runtimeStats.whitelist} quarantined=${runtimeStats.quarantined}`, colors.dim));
|
|
33
29
|
lines.push('');
|
|
34
30
|
lines.push(colorIfTty('Quick actions', colors.bold));
|
|
35
31
|
for (const cmd of [
|
|
@@ -113,14 +109,6 @@ async function readCatalogStats() {
|
|
|
113
109
|
});
|
|
114
110
|
return { items: items.length, skill, mcp, claudePlugin, claudeConnector, copilotExtension, cursorExtension, geminiExtension };
|
|
115
111
|
}
|
|
116
|
-
async function readRuntimeStats() {
|
|
117
|
-
const [syncState, whitelist, quarantine] = await Promise.all([loadSyncState(), loadWhitelist(), loadQuarantine()]);
|
|
118
|
-
return {
|
|
119
|
-
staleRegistries: getStaleRegistries(syncState).length,
|
|
120
|
-
whitelist: whitelist.size,
|
|
121
|
-
quarantined: quarantine.length
|
|
122
|
-
};
|
|
123
|
-
}
|
|
124
112
|
function colorIfTty(value, apply) {
|
|
125
113
|
if (!process.stdout.isTTY || process.env.NO_COLOR === '1') {
|
|
126
114
|
return value;
|
|
@@ -585,6 +585,12 @@ function buildItemLinks(item) {
|
|
|
585
585
|
add('npm', `https://www.npmjs.com/package/${encodeURIComponent(pkg)}`);
|
|
586
586
|
}
|
|
587
587
|
}
|
|
588
|
+
if (item.kind === 'mcp' && item.id.startsWith('mcp:io.github.')) {
|
|
589
|
+
const ownerRepo = item.id.slice('mcp:io.github.'.length);
|
|
590
|
+
if (ownerRepo.includes('/')) {
|
|
591
|
+
add('Repository', `https://github.com/${ownerRepo}`);
|
|
592
|
+
}
|
|
593
|
+
}
|
|
588
594
|
add('Install page', item.install.url);
|
|
589
595
|
add('Repository', meta.repositoryUrl);
|
|
590
596
|
add('Repository', meta.githubUrl);
|
package/package.json
CHANGED