@shnitzel/plugscout 0.3.3 → 0.3.4
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 +6 -5
- package/config/registries.json +731 -139
- package/data/catalog/items.json +12648 -5624
- package/data/catalog/mcps.json +12625 -4985
- package/data/catalog/skills.json +965 -691
- package/data/catalog/sync-state.json +19 -19
- package/dist/catalog/adapter.js +4 -0
- package/dist/catalog/adapters/awesome-claude-code-v1.js +150 -0
- package/dist/cli.js +0 -0
- package/dist/lib/validation/contracts.js +2 -1
- package/package.json +6 -5
- package/data/security-reports/2026-02-06/report.json +0 -8
- package/data/security-reports/2026-02-10/report.json +0 -9
- package/data/security-reports/2026-02-11/report.json +0 -9
- package/data/security-reports/2026-02-12/report.json +0 -9
- package/data/security-reports/2026-02-13/report.json +0 -8
- package/data/security-reports/2026-02-14/report.json +0 -8
- package/data/security-reports/2026-02-23/report.json +0 -8
- package/data/security-reports/2026-02-25/report.json +0 -8
- package/data/security-reports/2026-02-26/report.json +0 -8
- package/data/security-reports/2026-03-10/report.json +0 -8
- package/data/security-reports/audits/2026-02-06T10-17-33-872Z-mcp_remote-browser.json +0 -8
- package/data/security-reports/audits/2026-02-06T10-17-33-881Z-mcp_remote-browser.json +0 -8
- package/data/security-reports/audits/2026-02-10T20-22-24-474Z-mcp_remote-browser.json +0 -8
- package/data/security-reports/audits/2026-02-10T20-22-24-483Z-mcp_remote-browser.json +0 -8
- package/data/security-reports/audits/2026-02-10T20-42-12-305Z-mcp_remote-browser.json +0 -8
- package/data/security-reports/audits/2026-02-10T20-42-12-319Z-mcp_remote-browser.json +0 -8
- package/data/security-reports/audits/2026-02-10T20-43-15-728Z-mcp_remote-browser.json +0 -8
- package/data/security-reports/audits/2026-02-10T20-43-15-738Z-mcp_remote-browser.json +0 -8
- package/data/security-reports/audits/2026-02-10T21-22-14-047Z-mcp_remote-browser.json +0 -8
- package/data/security-reports/audits/2026-02-10T21-22-14-051Z-mcp_remote-browser.json +0 -8
- package/data/security-reports/audits/2026-02-10T21-29-59-237Z-mcp_remote-browser.json +0 -8
- package/data/security-reports/audits/2026-02-10T21-29-59-243Z-mcp_remote-browser.json +0 -8
- package/data/security-reports/audits/2026-02-11T20-21-51-074Z-mcp_remote-browser.json +0 -8
- package/data/security-reports/audits/2026-02-11T20-21-51-123Z-mcp_remote-browser.json +0 -8
- package/data/security-reports/audits/2026-02-11T20-28-33-021Z-mcp_remote-browser.json +0 -8
- package/data/security-reports/audits/2026-02-11T20-28-33-026Z-mcp_remote-browser.json +0 -8
- package/data/security-reports/audits/2026-02-11T20-34-43-623Z-mcp_remote-browser.json +0 -8
- package/data/security-reports/audits/2026-02-11T20-34-43-625Z-mcp_remote-browser.json +0 -8
- package/data/security-reports/audits/2026-02-11T21-06-33-281Z-mcp_remote-browser.json +0 -8
- package/data/security-reports/audits/2026-02-11T21-06-33-285Z-mcp_remote-browser.json +0 -8
- package/data/security-reports/audits/2026-02-11T21-08-58-836Z-mcp_remote-browser.json +0 -8
- package/data/security-reports/audits/2026-02-11T21-08-58-843Z-mcp_remote-browser.json +0 -8
- package/data/security-reports/audits/2026-02-12T12-26-07-150Z-mcp_remote-browser.json +0 -8
- package/data/security-reports/audits/2026-02-12T12-26-07-159Z-mcp_remote-browser.json +0 -8
- package/data/security-reports/audits/2026-02-12T14-37-36-565Z-mcp_remote-browser.json +0 -8
- package/data/security-reports/audits/2026-02-12T14-37-36-569Z-mcp_remote-browser.json +0 -8
- package/data/security-reports/audits/2026-02-12T14-47-32-103Z-mcp_remote-browser.json +0 -8
- package/data/security-reports/audits/2026-02-12T14-47-32-213Z-mcp_remote-browser.json +0 -8
- package/data/security-reports/audits/2026-02-12T14-47-47-769Z-mcp_filesystem.json +0 -8
- package/data/security-reports/audits/2026-02-12T15-05-49-085Z-mcp_remote-browser.json +0 -8
- package/data/security-reports/audits/2026-02-12T15-05-49-087Z-mcp_remote-browser.json +0 -8
- package/data/security-reports/audits/2026-02-12T16-37-42-204Z-mcp_remote-browser.json +0 -8
- package/data/security-reports/audits/2026-02-12T16-37-42-243Z-mcp_remote-browser.json +0 -8
- package/data/security-reports/audits/2026-02-12T16-47-16-589Z-mcp_remote-browser.json +0 -8
- package/data/security-reports/audits/2026-02-12T16-47-16-596Z-mcp_remote-browser.json +0 -8
- package/data/security-reports/audits/2026-02-12T17-38-24-899Z-mcp_remote-browser.json +0 -8
- package/data/security-reports/audits/2026-02-12T17-38-24-905Z-mcp_remote-browser.json +0 -8
- package/data/security-reports/audits/2026-02-12T17-56-00-835Z-mcp_remote-browser.json +0 -8
- package/data/security-reports/audits/2026-02-12T17-56-00-840Z-mcp_remote-browser.json +0 -8
- package/data/security-reports/audits/2026-02-12T18-19-26-005Z-mcp_remote-browser.json +0 -8
- package/data/security-reports/audits/2026-02-12T18-19-26-008Z-mcp_remote-browser.json +0 -8
- package/data/security-reports/audits/2026-02-12T18-34-38-642Z-mcp_remote-browser.json +0 -8
- package/data/security-reports/audits/2026-02-12T18-34-38-645Z-mcp_remote-browser.json +0 -8
- package/data/security-reports/audits/2026-02-13T05-44-27-648Z-mcp_remote-browser.json +0 -8
- package/data/security-reports/audits/2026-02-13T05-44-27-656Z-mcp_remote-browser.json +0 -8
- package/data/security-reports/audits/2026-02-13T05-48-50-827Z-mcp_remote-browser.json +0 -8
- package/data/security-reports/audits/2026-02-13T05-48-50-900Z-mcp_remote-browser.json +0 -8
- package/data/security-reports/audits/2026-02-13T10-53-33-850Z-mcp_remote-browser.json +0 -8
- package/data/security-reports/audits/2026-02-13T10-53-33-853Z-mcp_remote-browser.json +0 -8
- package/data/security-reports/audits/2026-02-14T17-51-27-279Z-mcp_remote-browser.json +0 -8
- package/data/security-reports/audits/2026-02-14T17-51-27-282Z-mcp_remote-browser.json +0 -8
- package/data/security-reports/audits/2026-02-14T19-43-39-991Z-mcp_remote-browser.json +0 -8
- package/data/security-reports/audits/2026-02-14T19-43-39-997Z-mcp_remote-browser.json +0 -8
- package/data/security-reports/audits/2026-02-23T19-24-43-515Z-mcp_remote-browser.json +0 -8
- package/data/security-reports/audits/2026-02-23T19-24-43-518Z-mcp_remote-browser.json +0 -8
- package/data/security-reports/audits/2026-02-25T14-45-02-763Z-mcp_remote-browser.json +0 -8
- package/data/security-reports/audits/2026-02-25T14-45-02-778Z-mcp_remote-browser.json +0 -8
- package/data/security-reports/audits/2026-02-25T14-46-58-957Z-mcp_remote-browser.json +0 -8
- package/data/security-reports/audits/2026-02-25T14-46-58-960Z-mcp_remote-browser.json +0 -8
- package/data/security-reports/audits/2026-02-25T14-57-37-133Z-mcp_remote-browser.json +0 -8
- package/data/security-reports/audits/2026-02-25T14-57-37-139Z-mcp_remote-browser.json +0 -8
- package/data/security-reports/audits/2026-02-25T15-03-23-507Z-mcp_remote-browser.json +0 -8
- package/data/security-reports/audits/2026-02-25T15-03-23-513Z-mcp_remote-browser.json +0 -8
- package/data/security-reports/audits/2026-02-25T15-03-41-157Z-mcp_remote-browser.json +0 -8
- package/data/security-reports/audits/2026-02-25T15-03-41-162Z-mcp_remote-browser.json +0 -8
- package/data/security-reports/audits/2026-02-25T15-05-18-042Z-mcp_remote-browser.json +0 -8
- package/data/security-reports/audits/2026-02-25T15-05-18-048Z-mcp_remote-browser.json +0 -8
- package/data/security-reports/audits/2026-02-25T15-39-08-519Z-mcp_remote-browser.json +0 -8
- package/data/security-reports/audits/2026-02-25T15-39-08-526Z-mcp_remote-browser.json +0 -8
- package/data/security-reports/audits/2026-02-25T18-35-54-463Z-mcp_remote-browser.json +0 -8
- package/data/security-reports/audits/2026-02-25T18-35-54-466Z-mcp_remote-browser.json +0 -8
- package/data/security-reports/audits/2026-02-26T05-52-21-092Z-mcp_remote-browser.json +0 -8
- package/data/security-reports/audits/2026-02-26T05-52-21-093Z-mcp_remote-browser.json +0 -8
- package/data/security-reports/audits/2026-02-26T05-52-27-076Z-mcp_remote-browser.json +0 -8
- package/data/security-reports/audits/2026-02-26T05-52-27-079Z-mcp_remote-browser.json +0 -8
- package/data/security-reports/audits/2026-02-26T05-52-27-084Z-mcp_remote-browser.json +0 -8
- package/data/security-reports/audits/2026-02-26T05-52-27-086Z-mcp_remote-browser.json +0 -8
- package/data/security-reports/audits/2026-02-26T05-52-37-249Z-mcp_remote-browser.json +0 -8
- package/data/security-reports/audits/2026-02-26T05-52-37-258Z-mcp_remote-browser.json +0 -8
- package/data/security-reports/audits/2026-02-26T05-52-37-259Z-mcp_remote-browser.json +0 -8
- package/data/security-reports/audits/2026-02-26T05-52-37-274Z-mcp_remote-browser.json +0 -8
- package/data/security-reports/audits/2026-02-26T05-53-28-389Z-mcp_remote-browser.json +0 -8
- package/data/security-reports/audits/2026-02-26T05-53-28-391Z-mcp_remote-browser.json +0 -8
- package/data/security-reports/audits/2026-02-26T05-53-33-868Z-mcp_remote-browser.json +0 -8
- package/data/security-reports/audits/2026-02-26T05-53-33-880Z-mcp_remote-browser.json +0 -8
- package/data/security-reports/audits/2026-02-26T05-53-33-892Z-mcp_remote-browser.json +0 -8
- package/data/security-reports/audits/2026-02-26T05-53-33-900Z-mcp_remote-browser.json +0 -8
- package/data/security-reports/audits/2026-02-26T05-53-43-064Z-mcp_remote-browser.json +0 -8
- package/data/security-reports/audits/2026-02-26T05-53-43-066Z-mcp_remote-browser.json +0 -8
- package/data/security-reports/audits/2026-02-26T05-53-43-068Z-mcp_remote-browser.json +0 -8
- package/data/security-reports/audits/2026-02-26T14-55-47-466Z-claude-plugin_workspace-ops.json +0 -8
- package/data/security-reports/audits/2026-02-26T14-55-47-468Z-copilot-extension_repo-security.json +0 -8
- package/data/security-reports/audits/2026-02-26T16-55-59-431Z-mcp_remote-browser.json +0 -8
- package/data/security-reports/audits/2026-02-26T16-55-59-432Z-mcp_remote-browser.json +0 -8
- package/data/security-reports/audits/2026-02-26T16-55-59-435Z-mcp_remote-browser.json +0 -8
- package/data/security-reports/audits/2026-02-26T16-55-59-439Z-mcp_remote-browser.json +0 -8
- package/data/security-reports/audits/2026-02-26T16-56-08-566Z-mcp_remote-browser.json +0 -8
- package/data/security-reports/audits/2026-02-26T16-56-08-570Z-mcp_remote-browser.json +0 -8
- package/data/security-reports/audits/2026-02-26T16-56-08-589Z-mcp_remote-browser.json +0 -8
- package/data/security-reports/audits/2026-02-26T16-56-08-591Z-mcp_remote-browser.json +0 -8
- package/data/security-reports/audits/2026-02-26T16-56-47-356Z-mcp_remote-browser.json +0 -8
- package/data/security-reports/audits/2026-02-26T16-56-47-358Z-mcp_remote-browser.json +0 -8
- package/data/security-reports/audits/2026-02-26T16-56-53-607Z-mcp_remote-browser.json +0 -8
- package/data/security-reports/audits/2026-02-26T16-56-53-612Z-mcp_remote-browser.json +0 -8
- package/data/security-reports/audits/2026-02-26T16-56-53-624Z-mcp_remote-browser.json +0 -8
- package/data/security-reports/audits/2026-02-26T16-56-53-628Z-mcp_remote-browser.json +0 -8
- package/data/security-reports/audits/2026-02-26T16-57-09-879Z-mcp_remote-browser.json +0 -8
- package/data/security-reports/audits/2026-02-26T16-57-09-881Z-mcp_remote-browser.json +0 -8
- package/data/security-reports/audits/2026-02-26T16-57-10-846Z-mcp_remote-browser.json +0 -8
- package/data/security-reports/audits/2026-02-26T16-57-10-848Z-mcp_remote-browser.json +0 -8
- package/data/security-reports/audits/2026-03-10T18-15-05-007Z-claude-plugin_playwright.json +0 -8
- package/data/security-reports/audits/2026-03-10T18-36-16-092Z-claude-plugin_playwright.json +0 -8
|
@@ -1,62 +1,62 @@
|
|
|
1
1
|
{
|
|
2
2
|
"registries": {
|
|
3
3
|
"community-skills-index": {
|
|
4
|
-
"lastSuccessfulSyncAt": "2026-03-
|
|
4
|
+
"lastSuccessfulSyncAt": "2026-03-22T05:00:10.783Z"
|
|
5
5
|
},
|
|
6
6
|
"public-mcp-directory": {
|
|
7
|
-
"lastSuccessfulSyncAt": "2026-03-
|
|
7
|
+
"lastSuccessfulSyncAt": "2026-03-22T05:00:17.034Z",
|
|
8
8
|
"lastUpdatedSince": "2026-02-25T14:46:42.122Z"
|
|
9
9
|
},
|
|
10
10
|
"official-claude-plugins": {
|
|
11
|
-
"lastSuccessfulSyncAt": "2026-03-
|
|
11
|
+
"lastSuccessfulSyncAt": "2026-03-22T05:00:17.502Z"
|
|
12
12
|
},
|
|
13
13
|
"official-copilot-extensions": {
|
|
14
|
-
"lastSuccessfulSyncAt": "2026-03-
|
|
14
|
+
"lastSuccessfulSyncAt": "2026-03-22T05:00:17.700Z"
|
|
15
15
|
},
|
|
16
16
|
"openai-skills-curated": {
|
|
17
|
-
"lastSuccessfulSyncAt": "2026-03-
|
|
17
|
+
"lastSuccessfulSyncAt": "2026-03-22T05:00:17.097Z"
|
|
18
18
|
},
|
|
19
19
|
"github-copilot-plugins-official": {
|
|
20
|
-
"lastSuccessfulSyncAt": "2026-03-
|
|
20
|
+
"lastSuccessfulSyncAt": "2026-03-22T05:00:17.713Z"
|
|
21
21
|
},
|
|
22
22
|
"github-awesome-copilot-marketplace": {
|
|
23
|
-
"lastSuccessfulSyncAt": "2026-03-
|
|
23
|
+
"lastSuccessfulSyncAt": "2026-03-22T05:00:17.724Z"
|
|
24
24
|
},
|
|
25
25
|
"anthropic-claude-connectors-scrape": {
|
|
26
|
-
"lastSuccessfulSyncAt": "2026-03-
|
|
26
|
+
"lastSuccessfulSyncAt": "2026-03-22T05:00:17.832Z"
|
|
27
27
|
},
|
|
28
28
|
"github-curated-industry-skills": {
|
|
29
|
-
"lastSuccessfulSyncAt": "2026-03-
|
|
29
|
+
"lastSuccessfulSyncAt": "2026-03-22T05:00:10.784Z"
|
|
30
30
|
},
|
|
31
31
|
"anthropic-skills": {
|
|
32
|
-
"lastSuccessfulSyncAt": "2026-03-
|
|
32
|
+
"lastSuccessfulSyncAt": "2026-03-22T05:00:17.144Z"
|
|
33
33
|
},
|
|
34
34
|
"github-n-skills-marketplace": {
|
|
35
|
-
"lastSuccessfulSyncAt": "2026-03-
|
|
35
|
+
"lastSuccessfulSyncAt": "2026-03-22T05:00:17.191Z"
|
|
36
36
|
},
|
|
37
37
|
"trailofbits-skills-marketplace": {
|
|
38
|
-
"lastSuccessfulSyncAt": "2026-03-
|
|
38
|
+
"lastSuccessfulSyncAt": "2026-03-22T05:00:17.218Z"
|
|
39
39
|
},
|
|
40
40
|
"github-mhattingpete-claude-skills": {
|
|
41
|
-
"lastSuccessfulSyncAt": "2026-03-
|
|
41
|
+
"lastSuccessfulSyncAt": "2026-03-22T05:00:17.246Z"
|
|
42
42
|
},
|
|
43
43
|
"github-neon-ai-rules": {
|
|
44
|
-
"lastSuccessfulSyncAt": "2026-03-
|
|
44
|
+
"lastSuccessfulSyncAt": "2026-03-22T05:00:17.277Z"
|
|
45
45
|
},
|
|
46
46
|
"anthropic-claude-plugins-official-github": {
|
|
47
|
-
"lastSuccessfulSyncAt": "2026-03-
|
|
47
|
+
"lastSuccessfulSyncAt": "2026-03-22T05:00:17.540Z"
|
|
48
48
|
},
|
|
49
49
|
"anthropic-knowledge-work-plugins": {
|
|
50
|
-
"lastSuccessfulSyncAt": "2026-03-
|
|
50
|
+
"lastSuccessfulSyncAt": "2026-03-22T05:00:17.591Z"
|
|
51
51
|
},
|
|
52
52
|
"anthropic-financial-services-plugins": {
|
|
53
|
-
"lastSuccessfulSyncAt": "2026-03-
|
|
53
|
+
"lastSuccessfulSyncAt": "2026-03-22T05:00:17.631Z"
|
|
54
54
|
},
|
|
55
55
|
"github-docker-claude-plugins": {
|
|
56
|
-
"lastSuccessfulSyncAt": "2026-03-
|
|
56
|
+
"lastSuccessfulSyncAt": "2026-03-22T05:00:17.671Z"
|
|
57
57
|
},
|
|
58
58
|
"github-pleaseai-claude-code-plugins": {
|
|
59
|
-
"lastSuccessfulSyncAt": "2026-03-
|
|
59
|
+
"lastSuccessfulSyncAt": "2026-03-22T05:00:17.700Z"
|
|
60
60
|
}
|
|
61
61
|
}
|
|
62
62
|
}
|
package/dist/catalog/adapter.js
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { adaptAwesomeClaudeCodeEntries } from './adapters/awesome-claude-code-v1.js';
|
|
1
2
|
import { adaptClaudeConnectorsScrapeEntries } from './adapters/claude-connectors-scrape-v1.js';
|
|
2
3
|
import { adaptClaudeCodeMarketplaceEntries } from './adapters/claude-code-marketplace-v1.js';
|
|
3
4
|
import { adaptClaudePluginsEntries } from './adapters/claude-plugins-v0.1.js';
|
|
@@ -35,5 +36,8 @@ export function adaptRegistryEntries(registry, entries) {
|
|
|
35
36
|
if (registry.adapter === 'claude-connectors-scrape-v1') {
|
|
36
37
|
return adaptClaudeConnectorsScrapeEntries(registry.id, entries);
|
|
37
38
|
}
|
|
39
|
+
if (registry.adapter === 'awesome-claude-code-v1') {
|
|
40
|
+
return adaptAwesomeClaudeCodeEntries(registry.id, entries);
|
|
41
|
+
}
|
|
38
42
|
return entries;
|
|
39
43
|
}
|
|
@@ -0,0 +1,150 @@
|
|
|
1
|
+
import { dedupe, sanitizeUrl, slugify, stripHtml } from './shared.js';
|
|
2
|
+
const TRUSTED_HOSTS = ['github.com', 'raw.githubusercontent.com'];
|
|
3
|
+
const CSV_COLUMNS = [
|
|
4
|
+
'ID', 'Display Name', 'Category', 'Sub-Category', 'Primary Link',
|
|
5
|
+
'Secondary Link', 'Author Name', 'Author Link', 'Active', 'Date Added',
|
|
6
|
+
'Last Modified', 'Last Checked', 'License', 'Description',
|
|
7
|
+
'Removed From Origin', 'Stale', 'Repo Created', 'Latest Release',
|
|
8
|
+
'Release Version', 'Release Source'
|
|
9
|
+
];
|
|
10
|
+
export function adaptAwesomeClaudeCodeEntries(sourceId, entries) {
|
|
11
|
+
const csv = entries.find((entry) => typeof entry === 'string');
|
|
12
|
+
if (typeof csv !== 'string' || csv.trim().length === 0) {
|
|
13
|
+
return [];
|
|
14
|
+
}
|
|
15
|
+
const rows = parseCsv(csv);
|
|
16
|
+
if (rows.length < 2)
|
|
17
|
+
return [];
|
|
18
|
+
const header = rows[0];
|
|
19
|
+
const dataRows = rows.slice(1);
|
|
20
|
+
const mapped = [];
|
|
21
|
+
const seen = new Set();
|
|
22
|
+
for (const rawRow of dataRows) {
|
|
23
|
+
const row = zipRow(header, rawRow);
|
|
24
|
+
if (!row)
|
|
25
|
+
continue;
|
|
26
|
+
if (row['Active'].toUpperCase() !== 'TRUE')
|
|
27
|
+
continue;
|
|
28
|
+
if (row['Stale'].toUpperCase() === 'TRUE')
|
|
29
|
+
continue;
|
|
30
|
+
if (row['Removed From Origin'].toUpperCase() === 'TRUE')
|
|
31
|
+
continue;
|
|
32
|
+
const rawName = row['Display Name'].trim();
|
|
33
|
+
const primaryLink = row['Primary Link'].trim();
|
|
34
|
+
const description = row['Description'].trim();
|
|
35
|
+
const category = row['Category'].trim();
|
|
36
|
+
const releaseVersion = row['Release Version'].trim();
|
|
37
|
+
const lastModified = row['Last Modified'].trim();
|
|
38
|
+
const authorName = row['Author Name'].trim();
|
|
39
|
+
const license = row['License'].trim();
|
|
40
|
+
if (!rawName || !primaryLink)
|
|
41
|
+
continue;
|
|
42
|
+
const slug = slugify(rawName);
|
|
43
|
+
if (!slug || seen.has(slug))
|
|
44
|
+
continue;
|
|
45
|
+
const url = sanitizeUrl(primaryLink, TRUSTED_HOSTS);
|
|
46
|
+
seen.add(slug);
|
|
47
|
+
const capabilities = inferCapabilities(rawName, description, category);
|
|
48
|
+
const hasRelease = releaseVersion.length > 0;
|
|
49
|
+
const hasModified = lastModified.length > 0;
|
|
50
|
+
mapped.push({
|
|
51
|
+
id: `skill:${slug}`,
|
|
52
|
+
kind: 'skill',
|
|
53
|
+
provider: 'github',
|
|
54
|
+
name: rawName.slice(0, 120),
|
|
55
|
+
description: stripHtml(description || `${category} resource for Claude Code: ${rawName}.`, 320) || `Claude Code ${category} resource: ${rawName}.`,
|
|
56
|
+
capabilities,
|
|
57
|
+
compatibility: ['claude-code'],
|
|
58
|
+
source: sourceId,
|
|
59
|
+
install: {
|
|
60
|
+
kind: 'manual',
|
|
61
|
+
instructions: 'Visit the linked repository and follow its installation instructions.',
|
|
62
|
+
...(url ? { url } : {})
|
|
63
|
+
},
|
|
64
|
+
adoptionSignal: 72,
|
|
65
|
+
maintenanceSignal: hasRelease ? 78 : hasModified ? 70 : 62,
|
|
66
|
+
provenanceSignal: 82,
|
|
67
|
+
freshnessSignal: hasModified ? 72 : 60,
|
|
68
|
+
securitySignals: {
|
|
69
|
+
knownVulnerabilities: 0,
|
|
70
|
+
suspiciousPatterns: 0,
|
|
71
|
+
injectionFindings: 0,
|
|
72
|
+
exfiltrationSignals: 0,
|
|
73
|
+
integrityAlerts: 0
|
|
74
|
+
},
|
|
75
|
+
metadata: {
|
|
76
|
+
catalogType: 'skill',
|
|
77
|
+
sourceConfidence: 'vetted-curated',
|
|
78
|
+
awesomeClaudeCodeId: row['ID'],
|
|
79
|
+
awesomeClaudeCodeCategory: category,
|
|
80
|
+
...(authorName ? { authorName } : {}),
|
|
81
|
+
...(license ? { license } : {}),
|
|
82
|
+
...(releaseVersion ? { releaseVersion } : {})
|
|
83
|
+
}
|
|
84
|
+
});
|
|
85
|
+
}
|
|
86
|
+
return mapped;
|
|
87
|
+
}
|
|
88
|
+
function zipRow(header, values) {
|
|
89
|
+
if (values.length === 0)
|
|
90
|
+
return null;
|
|
91
|
+
const row = {};
|
|
92
|
+
for (let i = 0; i < header.length; i++) {
|
|
93
|
+
row[header[i]] = values[i] ?? '';
|
|
94
|
+
}
|
|
95
|
+
return row;
|
|
96
|
+
}
|
|
97
|
+
function inferCapabilities(name, description, category) {
|
|
98
|
+
const haystack = `${name} ${description} ${category}`.toLowerCase();
|
|
99
|
+
const capabilities = [];
|
|
100
|
+
if (/(security|audit|vulnerability|compliance|malware)/.test(haystack))
|
|
101
|
+
capabilities.push('security');
|
|
102
|
+
if (/(workflow|automation|ci|cd|devops|deploy|pipeline)/.test(haystack))
|
|
103
|
+
capabilities.push('automation');
|
|
104
|
+
if (/(frontend|ui|design|css|react|vue|html)/.test(haystack))
|
|
105
|
+
capabilities.push('frontend');
|
|
106
|
+
if (/(database|sql|postgres|redis|mongo)/.test(haystack))
|
|
107
|
+
capabilities.push('data');
|
|
108
|
+
if (/(docs|documentation|guide|knowledge|handbook)/.test(haystack))
|
|
109
|
+
capabilities.push('docs');
|
|
110
|
+
if (/(test|debug|review|qa|lint)/.test(haystack))
|
|
111
|
+
capabilities.push('guardrails');
|
|
112
|
+
if (/(agent|orchestrat|subagent|multi-agent)/.test(haystack))
|
|
113
|
+
capabilities.push('orchestration');
|
|
114
|
+
return dedupe(capabilities.length ? capabilities : ['automation']);
|
|
115
|
+
}
|
|
116
|
+
function parseCsv(text) {
|
|
117
|
+
const rows = [];
|
|
118
|
+
for (const line of text.split('\n')) {
|
|
119
|
+
if (line.trim().length === 0)
|
|
120
|
+
continue;
|
|
121
|
+
rows.push(parseCsvLine(line));
|
|
122
|
+
}
|
|
123
|
+
return rows;
|
|
124
|
+
}
|
|
125
|
+
function parseCsvLine(line) {
|
|
126
|
+
const fields = [];
|
|
127
|
+
let current = '';
|
|
128
|
+
let inQuotes = false;
|
|
129
|
+
for (let i = 0; i < line.length; i++) {
|
|
130
|
+
const char = line[i];
|
|
131
|
+
if (char === '"') {
|
|
132
|
+
if (inQuotes && line[i + 1] === '"') {
|
|
133
|
+
current += '"';
|
|
134
|
+
i++;
|
|
135
|
+
}
|
|
136
|
+
else {
|
|
137
|
+
inQuotes = !inQuotes;
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
else if (char === ',' && !inQuotes) {
|
|
141
|
+
fields.push(current.trim());
|
|
142
|
+
current = '';
|
|
143
|
+
}
|
|
144
|
+
else {
|
|
145
|
+
current += char;
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
fields.push(current.trim());
|
|
149
|
+
return fields;
|
|
150
|
+
}
|
package/dist/cli.js
CHANGED
|
File without changes
|
|
@@ -136,7 +136,8 @@ export const RegistrySchema = z.object({
|
|
|
136
136
|
'claude-code-marketplace-v1',
|
|
137
137
|
'copilot-extensions-v0.1',
|
|
138
138
|
'copilot-plugin-marketplace-v1',
|
|
139
|
-
'claude-connectors-scrape-v1'
|
|
139
|
+
'claude-connectors-scrape-v1',
|
|
140
|
+
'awesome-claude-code-v1'
|
|
140
141
|
])
|
|
141
142
|
.default('direct'),
|
|
142
143
|
enabled: z.boolean().default(true),
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@shnitzel/plugscout",
|
|
3
|
-
"version": "0.3.
|
|
3
|
+
"version": "0.3.4",
|
|
4
4
|
"description": "Claude plugins + Claude connectors + Copilot extensions + Skills + MCP security intelligence framework",
|
|
5
5
|
"private": false,
|
|
6
6
|
"type": "module",
|
|
@@ -41,6 +41,7 @@
|
|
|
41
41
|
"node": ">=18.17"
|
|
42
42
|
},
|
|
43
43
|
"scripts": {
|
|
44
|
+
"prepare": "git config core.hooksPath .githooks || true",
|
|
44
45
|
"dev": "TS_NODE_TRANSPILE_ONLY=1 node --loader ts-node/esm src/cli.ts",
|
|
45
46
|
"setup": "TS_NODE_TRANSPILE_ONLY=1 node --loader ts-node/esm src/cli.ts setup",
|
|
46
47
|
"build": "tsc -p tsconfig.json",
|
|
@@ -77,14 +78,14 @@
|
|
|
77
78
|
"quarantine:apply": "TS_NODE_TRANSPILE_ONLY=1 node --loader ts-node/esm src/cli.ts quarantine apply"
|
|
78
79
|
},
|
|
79
80
|
"dependencies": {
|
|
80
|
-
"fs-extra": "^11.
|
|
81
|
+
"fs-extra": "^11.3.4",
|
|
81
82
|
"semver": "^7.7.4",
|
|
82
83
|
"zod": "^3.23.8"
|
|
83
84
|
},
|
|
84
85
|
"devDependencies": {
|
|
85
|
-
"@types/node": "^25.
|
|
86
|
+
"@types/node": "^25.5.0",
|
|
86
87
|
"@types/react": "^19.2.14",
|
|
87
|
-
"@remotion/cli": "4.0.
|
|
88
|
+
"@remotion/cli": "4.0.438",
|
|
88
89
|
"@types/semver": "^7.7.1",
|
|
89
90
|
"@typescript-eslint/eslint-plugin": "^7.10.0",
|
|
90
91
|
"@typescript-eslint/parser": "^7.10.0",
|
|
@@ -93,7 +94,7 @@
|
|
|
93
94
|
"prettier": "^3.2.5",
|
|
94
95
|
"react": "^19.2.4",
|
|
95
96
|
"react-dom": "^19.2.4",
|
|
96
|
-
"remotion": "4.0.
|
|
97
|
+
"remotion": "4.0.438",
|
|
97
98
|
"ts-node": "^10.9.2",
|
|
98
99
|
"tsx": "^4.7.1",
|
|
99
100
|
"typescript": "^5.4.5",
|