@rulemetric/skills-registry 0.1.1 → 0.2.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/discovered-sources.json +2992 -0
- package/dist/discover-sources.d.ts +3 -0
- package/dist/discover-sources.d.ts.map +1 -0
- package/dist/discover-sources.js +183 -0
- package/dist/discover-sources.js.map +1 -0
- package/dist/discovered.d.ts +12 -0
- package/dist/discovered.d.ts.map +1 -0
- package/dist/discovered.js +30 -0
- package/dist/discovered.js.map +1 -0
- package/dist/fetch-registry.js +105 -4
- package/dist/fetch-registry.js.map +1 -1
- package/dist/github-fetcher.d.ts +42 -5
- package/dist/github-fetcher.d.ts.map +1 -1
- package/dist/github-fetcher.js +254 -177
- package/dist/github-fetcher.js.map +1 -1
- package/dist/index.d.ts +3 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -1
- package/dist/index.js.map +1 -1
- package/dist/scoring.d.ts +19 -0
- package/dist/scoring.d.ts.map +1 -0
- package/dist/scoring.js +104 -0
- package/dist/scoring.js.map +1 -0
- package/dist/security-scanner.d.ts +26 -0
- package/dist/security-scanner.d.ts.map +1 -0
- package/dist/security-scanner.js +290 -0
- package/dist/security-scanner.js.map +1 -0
- package/dist/types.d.ts +7 -0
- package/dist/types.d.ts.map +1 -1
- package/package.json +24 -4
package/dist/github-fetcher.js
CHANGED
|
@@ -1,58 +1,189 @@
|
|
|
1
1
|
import * as path from 'node:path';
|
|
2
|
-
|
|
2
|
+
import { Octokit } from 'octokit';
|
|
3
|
+
import { retry } from '@octokit/plugin-retry';
|
|
4
|
+
import { throttling } from '@octokit/plugin-throttling';
|
|
5
|
+
import pLimit from 'p-limit';
|
|
6
|
+
// ── HTTP layer ───────────────────────────────────────────────────────────────
|
|
3
7
|
const GITHUB_RAW = 'https://raw.githubusercontent.com';
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
8
|
+
const USER_AGENT = 'rulemetric-skills-registry';
|
|
9
|
+
// Reject any single response over 10MB. Skill markdown files are tiny;
|
|
10
|
+
// anything larger is almost certainly a binary or generated artifact slipping
|
|
11
|
+
// through the pattern filter.
|
|
12
|
+
const MAX_BODY_BYTES = 10 * 1024 * 1024;
|
|
13
|
+
// Skip files that obviously aren't skill content. Saves request budget and
|
|
14
|
+
// avoids parsing large binary blobs as markdown.
|
|
15
|
+
const MAX_FILE_SIZE = 100 * 1024;
|
|
16
|
+
const SKIP_EXTENSIONS = new Set([
|
|
17
|
+
'.png', '.jpg', '.jpeg', '.gif', '.svg', '.ico',
|
|
18
|
+
'.lock', '.json', '.yml', '.yaml', '.toml',
|
|
19
|
+
]);
|
|
20
|
+
const OctokitWithPlugins = Octokit.plugin(retry, throttling);
|
|
21
|
+
// Octokit's throttle plugin calls the on*RateLimit hook BEFORE sleeping
|
|
22
|
+
// `retryAfter` seconds. Pre-fix these hooks returned `retryCount < 2` (primary)
|
|
23
|
+
// and `true` (secondary), which on an unauthenticated worker meant a single
|
|
24
|
+
// failing call slept ~19-57 minutes before the next attempt — and the
|
|
25
|
+
// graphile-worker concurrency slot stayed locked the whole time. The cron
|
|
26
|
+
// produced zero progress logs and the job appeared hung. See
|
|
27
|
+
// docs/incidents/2026-05-20-launches-stuck-and-worker-wedge.md task #26 and
|
|
28
|
+
// apps/cli/src/lib/handlers/cron-refresh-skills.test.ts for the evidence.
|
|
29
|
+
//
|
|
30
|
+
// Fix: cap the wait we're willing to accept at 5 minutes. Anything longer
|
|
31
|
+
// means GitHub's rate window is essentially the next hour — at which point
|
|
32
|
+
// we'd rather throw, let fetchSource's catch log "Failed to fetch <repo>",
|
|
33
|
+
// call onProgress with count=0, and let the cron finish with partial data.
|
|
34
|
+
const MAX_RATE_LIMIT_RETRY_AFTER_SECONDS = 300;
|
|
35
|
+
/**
|
|
36
|
+
* Decide whether Octokit's primary-rate-limit retry is worth waiting for.
|
|
37
|
+
*
|
|
38
|
+
* Exported for unit testing — the function is pure (no I/O), so the test
|
|
39
|
+
* can assert the boundary cases without running the full crawl.
|
|
40
|
+
*/
|
|
41
|
+
export function shouldRetryRateLimit(retryAfterSeconds, retryCount) {
|
|
42
|
+
if (retryAfterSeconds > MAX_RATE_LIMIT_RETRY_AFTER_SECONDS)
|
|
43
|
+
return false;
|
|
44
|
+
return retryCount < 2;
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Decide whether Octokit's secondary-rate-limit retry is worth waiting for.
|
|
48
|
+
* Secondary limits are GitHub's abuse-detection cooldowns (multi-minute,
|
|
49
|
+
* sometimes longer). Same 5-min cap as primary.
|
|
50
|
+
*/
|
|
51
|
+
export function shouldRetrySecondaryRateLimit(retryAfterSeconds) {
|
|
52
|
+
return retryAfterSeconds <= MAX_RATE_LIMIT_RETRY_AFTER_SECONDS;
|
|
53
|
+
}
|
|
54
|
+
let octokitInstance = null;
|
|
55
|
+
function getOctokit() {
|
|
56
|
+
if (octokitInstance)
|
|
57
|
+
return octokitInstance;
|
|
58
|
+
octokitInstance = new OctokitWithPlugins({
|
|
59
|
+
auth: process.env.GITHUB_TOKEN,
|
|
60
|
+
userAgent: USER_AGENT,
|
|
61
|
+
throttle: {
|
|
62
|
+
onRateLimit: (retryAfter, options, _octokit, retryCount) => {
|
|
63
|
+
const willRetry = shouldRetryRateLimit(retryAfter, retryCount);
|
|
64
|
+
console.warn(`GitHub rate limit hit on ${options.method} ${options.url}; retryAfter=${retryAfter}s retryCount=${retryCount}; ${willRetry ? `retrying` : `giving up (over ${MAX_RATE_LIMIT_RETRY_AFTER_SECONDS}s budget — set GITHUB_TOKEN for 5000 req/hr instead of the 60 req/hr unauthenticated cap)`}`);
|
|
65
|
+
return willRetry;
|
|
66
|
+
},
|
|
67
|
+
onSecondaryRateLimit: (retryAfter, options) => {
|
|
68
|
+
const willRetry = shouldRetrySecondaryRateLimit(retryAfter);
|
|
69
|
+
console.warn(`GitHub secondary rate limit on ${options.method} ${options.url}; retryAfter=${retryAfter}s; ${willRetry ? `backing off` : `giving up (over ${MAX_RATE_LIMIT_RETRY_AFTER_SECONDS}s budget)`}`);
|
|
70
|
+
return willRetry;
|
|
71
|
+
},
|
|
72
|
+
},
|
|
73
|
+
retry: { doNotRetry: [400, 401, 403, 404, 422] },
|
|
74
|
+
});
|
|
75
|
+
return octokitInstance;
|
|
76
|
+
}
|
|
77
|
+
/**
|
|
78
|
+
* Reset the cached Octokit instance. Test-only hook so a test that mutates
|
|
79
|
+
* `process.env.GITHUB_TOKEN` can force a fresh client on the next call —
|
|
80
|
+
* otherwise the singleton above pins the auth value from first use.
|
|
81
|
+
*/
|
|
82
|
+
export function _resetOctokitForTests() {
|
|
83
|
+
octokitInstance = null;
|
|
84
|
+
}
|
|
85
|
+
// In-process ETag cache for raw-content fetches. Survives across sources within
|
|
86
|
+
// a single run; a re-run starts cold. Disk-cache could come later if/when this
|
|
87
|
+
// moves to a long-running worker.
|
|
88
|
+
const rawEtagCache = new Map();
|
|
89
|
+
/**
|
|
90
|
+
* Fetch raw content from raw.githubusercontent.com with ETag-based conditional
|
|
91
|
+
* GETs and basic retry. Raw URLs don't count against the GitHub API quota, so
|
|
92
|
+
* we don't go through octokit here — but we still want timeouts and retries.
|
|
93
|
+
*/
|
|
94
|
+
async function fetchRaw(url, timeoutMs = 10_000, retries = 2) {
|
|
95
|
+
const cached = rawEtagCache.get(url);
|
|
96
|
+
const headers = { 'User-Agent': USER_AGENT };
|
|
97
|
+
if (process.env.GITHUB_TOKEN)
|
|
98
|
+
headers['Authorization'] = `Bearer ${process.env.GITHUB_TOKEN}`;
|
|
99
|
+
if (cached)
|
|
100
|
+
headers['If-None-Match'] = cached.etag;
|
|
101
|
+
let lastErr;
|
|
102
|
+
for (let attempt = 0; attempt <= retries; attempt++) {
|
|
16
103
|
try {
|
|
17
|
-
const resp = await fetch(url, { headers, signal: AbortSignal.timeout(
|
|
18
|
-
if (resp.
|
|
19
|
-
|
|
20
|
-
|
|
104
|
+
const resp = await fetch(url, { headers, signal: AbortSignal.timeout(timeoutMs) });
|
|
105
|
+
if (resp.status === 304 && cached) {
|
|
106
|
+
return { status: 304, body: cached.body, fromCache: true };
|
|
107
|
+
}
|
|
108
|
+
if (resp.status === 404)
|
|
109
|
+
return { status: 404, body: null, fromCache: false };
|
|
110
|
+
if (!resp.ok) {
|
|
111
|
+
// 5xx and 429 → retry; everything else → give up.
|
|
112
|
+
if (resp.status >= 500 || resp.status === 429) {
|
|
113
|
+
await sleep(250 * 2 ** attempt);
|
|
114
|
+
continue;
|
|
115
|
+
}
|
|
116
|
+
return { status: resp.status, body: null, fromCache: false };
|
|
21
117
|
}
|
|
118
|
+
const body = await resp.text();
|
|
119
|
+
if (body.length > MAX_BODY_BYTES)
|
|
120
|
+
return { status: 413, body: null, fromCache: false };
|
|
121
|
+
const etag = resp.headers.get('etag');
|
|
122
|
+
if (etag)
|
|
123
|
+
rawEtagCache.set(url, { etag, body });
|
|
124
|
+
return { status: resp.status, body, fromCache: false };
|
|
22
125
|
}
|
|
23
|
-
catch {
|
|
24
|
-
|
|
126
|
+
catch (err) {
|
|
127
|
+
lastErr = err;
|
|
128
|
+
await sleep(250 * 2 ** attempt);
|
|
25
129
|
}
|
|
26
130
|
}
|
|
27
|
-
|
|
131
|
+
console.warn(`fetchRaw exhausted retries for ${url}:`, lastErr);
|
|
132
|
+
return { status: 0, body: null, fromCache: false };
|
|
28
133
|
}
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
134
|
+
const sleep = (ms) => new Promise(r => setTimeout(r, ms));
|
|
135
|
+
/**
|
|
136
|
+
* Fetch repo metadata + tree SHA in one round trip via the API. Lets callers
|
|
137
|
+
* compare treeSha against a previous run to skip unchanged repos entirely.
|
|
138
|
+
*/
|
|
139
|
+
async function fetchRepoMeta(repo) {
|
|
140
|
+
const [owner, name] = repo.split('/');
|
|
141
|
+
if (!owner || !name)
|
|
142
|
+
return null;
|
|
143
|
+
try {
|
|
144
|
+
const { data } = await getOctokit().rest.repos.get({ owner, repo: name });
|
|
145
|
+
const branchData = await getOctokit().rest.repos.getBranch({
|
|
146
|
+
owner, repo: name, branch: data.default_branch,
|
|
147
|
+
});
|
|
148
|
+
return {
|
|
149
|
+
defaultBranch: data.default_branch,
|
|
150
|
+
stars: data.stargazers_count,
|
|
151
|
+
treeSha: branchData.data.commit.sha,
|
|
152
|
+
};
|
|
153
|
+
}
|
|
154
|
+
catch (err) {
|
|
155
|
+
const status = err.status;
|
|
156
|
+
if (status !== 404)
|
|
157
|
+
console.warn(`fetchRepoMeta failed for ${repo}:`, err);
|
|
158
|
+
return null;
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
async function fetchTree(repo, treeSha) {
|
|
162
|
+
const [owner, name] = repo.split('/');
|
|
163
|
+
if (!owner || !name)
|
|
164
|
+
return [];
|
|
165
|
+
try {
|
|
166
|
+
const { data } = await getOctokit().rest.git.getTree({
|
|
167
|
+
owner, repo: name, tree_sha: treeSha, recursive: 'true',
|
|
168
|
+
});
|
|
169
|
+
if (data.truncated)
|
|
170
|
+
console.warn(`Tree truncated for ${repo} — large repo, some files skipped`);
|
|
171
|
+
const out = [];
|
|
172
|
+
for (const item of data.tree) {
|
|
173
|
+
if (item.type === 'blob' && typeof item.path === 'string') {
|
|
174
|
+
out.push({ path: item.path, type: 'blob', size: item.size ?? undefined });
|
|
175
|
+
}
|
|
44
176
|
}
|
|
177
|
+
return out;
|
|
178
|
+
}
|
|
179
|
+
catch (err) {
|
|
180
|
+
console.warn(`fetchTree failed for ${repo}@${treeSha}:`, err);
|
|
181
|
+
return [];
|
|
45
182
|
}
|
|
46
|
-
return null;
|
|
47
183
|
}
|
|
48
|
-
|
|
184
|
+
// ── Pattern matching + content inference (unchanged from prior version) ──────
|
|
49
185
|
function matchesPatterns(filePath, patterns) {
|
|
50
|
-
|
|
51
|
-
const regex = patternToRegex(pattern);
|
|
52
|
-
if (regex.test(filePath))
|
|
53
|
-
return true;
|
|
54
|
-
}
|
|
55
|
-
return false;
|
|
186
|
+
return patterns.some(p => patternToRegex(p).test(filePath));
|
|
56
187
|
}
|
|
57
188
|
function patternToRegex(pattern) {
|
|
58
189
|
const escaped = pattern
|
|
@@ -62,7 +193,6 @@ function patternToRegex(pattern) {
|
|
|
62
193
|
.replace(/<<GLOBSTAR>>/g, '.*');
|
|
63
194
|
return new RegExp(`^${escaped}$`);
|
|
64
195
|
}
|
|
65
|
-
/** Derive a skill ID from repo + path. */
|
|
66
196
|
function deriveId(repo, filePath) {
|
|
67
197
|
const repoShort = repo.split('/').pop() ?? repo;
|
|
68
198
|
const name = path.basename(filePath, path.extname(filePath))
|
|
@@ -71,30 +201,21 @@ function deriveId(repo, filePath) {
|
|
|
71
201
|
.replace(/^-|-$/g, '');
|
|
72
202
|
return `${repoShort}--${name}`;
|
|
73
203
|
}
|
|
74
|
-
/** Derive a human-readable name from a file path. */
|
|
75
204
|
function deriveName(filePath) {
|
|
76
205
|
const name = path.basename(filePath, path.extname(filePath));
|
|
77
|
-
return name
|
|
78
|
-
.replace(/[-_]+/g, ' ')
|
|
79
|
-
.replace(/\b\w/g, c => c.toUpperCase())
|
|
80
|
-
.trim();
|
|
206
|
+
return name.replace(/[-_]+/g, ' ').replace(/\b\w/g, c => c.toUpperCase()).trim();
|
|
81
207
|
}
|
|
82
|
-
/** Extract description from the first paragraph of markdown content. */
|
|
83
208
|
function extractDescription(content) {
|
|
84
209
|
const lines = content.split('\n');
|
|
85
210
|
for (const line of lines) {
|
|
86
211
|
const trimmed = line.trim();
|
|
87
|
-
// Skip headings, frontmatter, and empty lines
|
|
88
212
|
if (!trimmed || trimmed.startsWith('#') || trimmed.startsWith('---') || trimmed.startsWith('```'))
|
|
89
213
|
continue;
|
|
90
|
-
|
|
91
|
-
if (trimmed.length > 10 && trimmed.length < 300) {
|
|
214
|
+
if (trimmed.length > 10 && trimmed.length < 300)
|
|
92
215
|
return trimmed.slice(0, 200);
|
|
93
|
-
}
|
|
94
216
|
}
|
|
95
217
|
return deriveName(lines[0] ?? '');
|
|
96
218
|
}
|
|
97
|
-
/** Infer category from file path and content. */
|
|
98
219
|
function inferCategory(filePath, content) {
|
|
99
220
|
const lower = (filePath + ' ' + content.slice(0, 500)).toLowerCase();
|
|
100
221
|
if (/\btest|tdd|vitest|jest|pytest\b/.test(lower))
|
|
@@ -117,95 +238,56 @@ function inferCategory(filePath, content) {
|
|
|
117
238
|
return 'workflow';
|
|
118
239
|
return 'other';
|
|
119
240
|
}
|
|
120
|
-
/** Infer tags from content. */
|
|
121
241
|
function inferTags(filePath, content) {
|
|
122
242
|
const lower = (filePath + ' ' + content.slice(0, 1000)).toLowerCase();
|
|
123
243
|
const tags = [];
|
|
124
244
|
const tagPatterns = [
|
|
125
|
-
[/\btypescript\b/, 'typescript'],
|
|
126
|
-
[/\
|
|
127
|
-
[/\
|
|
128
|
-
[/\
|
|
129
|
-
[/\
|
|
130
|
-
[/\
|
|
131
|
-
[/\bvue\b/, 'vue'],
|
|
132
|
-
[/\bangular\b/, 'angular'],
|
|
133
|
-
[/\bnext\.?js\b/, 'nextjs'],
|
|
134
|
-
[/\bdjango\b/, 'django'],
|
|
135
|
-
[/\brails\b/, 'rails'],
|
|
136
|
-
[/\bflutter\b/, 'flutter'],
|
|
137
|
-
[/\btdd\b/, 'tdd'],
|
|
138
|
-
[/\btesting\b/, 'testing'],
|
|
139
|
-
[/\bdocker\b/, 'docker'],
|
|
140
|
-
[/\bapi\b/, 'api'],
|
|
141
|
-
[/\bgit\b/, 'git'],
|
|
142
|
-
[/\bcli\b/, 'cli'],
|
|
143
|
-
[/\brefactor\b/, 'refactoring'],
|
|
245
|
+
[/\btypescript\b/, 'typescript'], [/\bpython\b/, 'python'], [/\brust\b/, 'rust'],
|
|
246
|
+
[/\bgo\b/, 'go'], [/\bswift\b/, 'swift'], [/\breact\b/, 'react'], [/\bvue\b/, 'vue'],
|
|
247
|
+
[/\bangular\b/, 'angular'], [/\bnext\.?js\b/, 'nextjs'], [/\bdjango\b/, 'django'],
|
|
248
|
+
[/\brails\b/, 'rails'], [/\bflutter\b/, 'flutter'], [/\btdd\b/, 'tdd'],
|
|
249
|
+
[/\btesting\b/, 'testing'], [/\bdocker\b/, 'docker'], [/\bapi\b/, 'api'],
|
|
250
|
+
[/\bgit\b/, 'git'], [/\bcli\b/, 'cli'], [/\brefactor\b/, 'refactoring'],
|
|
144
251
|
[/\bdebug\b/, 'debugging'],
|
|
145
252
|
];
|
|
146
|
-
for (const [regex, tag] of tagPatterns)
|
|
253
|
+
for (const [regex, tag] of tagPatterns)
|
|
147
254
|
if (regex.test(lower))
|
|
148
255
|
tags.push(tag);
|
|
149
|
-
}
|
|
150
256
|
return tags;
|
|
151
257
|
}
|
|
152
|
-
/** Infer languages from content. */
|
|
153
258
|
function inferLanguages(content) {
|
|
154
259
|
const lower = content.slice(0, 2000).toLowerCase();
|
|
155
260
|
const langs = [];
|
|
156
261
|
const checks = [
|
|
157
|
-
[/\btypescript\b/, 'typescript'],
|
|
158
|
-
[/\
|
|
159
|
-
[/\
|
|
160
|
-
[/\
|
|
161
|
-
[/\bgo\b/, 'go'],
|
|
162
|
-
[/\bswift\b/, 'swift'],
|
|
163
|
-
[/\bjava\b/, 'java'],
|
|
164
|
-
[/\bruby\b/, 'ruby'],
|
|
165
|
-
[/\bc\#|csharp\b/, 'csharp'],
|
|
166
|
-
[/\bphp\b/, 'php'],
|
|
262
|
+
[/\btypescript\b/, 'typescript'], [/\bjavascript\b/, 'javascript'],
|
|
263
|
+
[/\bpython\b/, 'python'], [/\brust\b/, 'rust'], [/\bgo\b/, 'go'],
|
|
264
|
+
[/\bswift\b/, 'swift'], [/\bjava\b/, 'java'], [/\bruby\b/, 'ruby'],
|
|
265
|
+
[/\bc\#|csharp\b/, 'csharp'], [/\bphp\b/, 'php'],
|
|
167
266
|
];
|
|
168
|
-
for (const [regex, lang] of checks)
|
|
267
|
+
for (const [regex, lang] of checks)
|
|
169
268
|
if (regex.test(lower))
|
|
170
269
|
langs.push(lang);
|
|
171
|
-
}
|
|
172
270
|
return langs;
|
|
173
271
|
}
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
const token = process.env.GITHUB_TOKEN;
|
|
177
|
-
const headers = {
|
|
178
|
-
'Accept': 'application/vnd.github.v3+json',
|
|
179
|
-
'User-Agent': 'rulemetric-skills-registry',
|
|
180
|
-
};
|
|
181
|
-
if (token)
|
|
182
|
-
headers['Authorization'] = `Bearer ${token}`;
|
|
183
|
-
try {
|
|
184
|
-
const resp = await fetch(`${GITHUB_API}/repos/${repo}`, { headers, signal: AbortSignal.timeout(5000) });
|
|
185
|
-
if (resp.ok) {
|
|
186
|
-
const data = await resp.json();
|
|
187
|
-
return data.stargazers_count;
|
|
188
|
-
}
|
|
189
|
-
}
|
|
190
|
-
catch {
|
|
191
|
-
// ignore
|
|
192
|
-
}
|
|
193
|
-
return 0;
|
|
194
|
-
}
|
|
195
|
-
/** Maximum file size to fetch (100KB). Skip huge files. */
|
|
196
|
-
const MAX_FILE_SIZE = 100 * 1024;
|
|
197
|
-
/** Skip files that are clearly not skills (images, lock files, etc.). */
|
|
198
|
-
const SKIP_EXTENSIONS = new Set(['.png', '.jpg', '.jpeg', '.gif', '.svg', '.ico', '.lock', '.json', '.yml', '.yaml', '.toml']);
|
|
272
|
+
// ── Public API ───────────────────────────────────────────────────────────────
|
|
273
|
+
const FILE_CONCURRENCY = pLimit(8);
|
|
199
274
|
/**
|
|
200
275
|
* Fetch all skills from a single registry source.
|
|
201
|
-
*
|
|
276
|
+
*
|
|
277
|
+
* `previousTreeSha` is an optimization: if the repo's current tree SHA matches,
|
|
278
|
+
* the function returns early with `skipped: true` and no entries. The caller is
|
|
279
|
+
* expected to keep its existing entries for that source. Pass `undefined` to
|
|
280
|
+
* always fetch.
|
|
202
281
|
*/
|
|
203
|
-
export async function fetchSource(source) {
|
|
204
|
-
const
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
282
|
+
export async function fetchSource(source, previousTreeSha) {
|
|
283
|
+
const meta = await fetchRepoMeta(source.repo);
|
|
284
|
+
if (!meta)
|
|
285
|
+
return { entries: [], treeSha: null, skipped: false };
|
|
286
|
+
if (previousTreeSha && previousTreeSha === meta.treeSha) {
|
|
287
|
+
return { entries: [], treeSha: meta.treeSha, skipped: true };
|
|
288
|
+
}
|
|
289
|
+
const branch = source.branch ?? meta.defaultBranch;
|
|
290
|
+
const tree = await fetchTree(source.repo, meta.treeSha);
|
|
209
291
|
const matchedFiles = tree.filter(item => {
|
|
210
292
|
const ext = path.extname(item.path).toLowerCase();
|
|
211
293
|
if (SKIP_EXTENSIONS.has(ext))
|
|
@@ -214,73 +296,68 @@ export async function fetchSource(source) {
|
|
|
214
296
|
return false;
|
|
215
297
|
return matchesPatterns(item.path, source.patterns);
|
|
216
298
|
});
|
|
217
|
-
const
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
const
|
|
223
|
-
const
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
if (entry)
|
|
254
|
-
entries.push(entry);
|
|
255
|
-
}
|
|
256
|
-
// Small delay between batches
|
|
257
|
-
if (i + BATCH_SIZE < matchedFiles.length) {
|
|
258
|
-
await new Promise(r => setTimeout(r, 200));
|
|
259
|
-
}
|
|
260
|
-
}
|
|
261
|
-
return entries;
|
|
299
|
+
const entries = await Promise.all(matchedFiles.map(file => FILE_CONCURRENCY(async () => {
|
|
300
|
+
const url = `${GITHUB_RAW}/${source.repo}/${branch}/${file.path}`;
|
|
301
|
+
const result = await fetchRaw(url);
|
|
302
|
+
if (!result.body || result.body.trim().length < 20)
|
|
303
|
+
return null;
|
|
304
|
+
const content = result.body;
|
|
305
|
+
const id = deriveId(source.repo, file.path);
|
|
306
|
+
const name = deriveName(file.path);
|
|
307
|
+
const description = extractDescription(content);
|
|
308
|
+
const category = inferCategory(file.path, content);
|
|
309
|
+
const tags = inferTags(file.path, content);
|
|
310
|
+
const languages = inferLanguages(content);
|
|
311
|
+
return {
|
|
312
|
+
id,
|
|
313
|
+
name,
|
|
314
|
+
description,
|
|
315
|
+
category: category !== 'other' ? category : source.defaultCategory,
|
|
316
|
+
tags,
|
|
317
|
+
tools: [source.defaultTool],
|
|
318
|
+
languages: languages.length > 0 ? languages : undefined,
|
|
319
|
+
source: {
|
|
320
|
+
repo: source.repo,
|
|
321
|
+
path: file.path,
|
|
322
|
+
url: `https://github.com/${source.repo}/blob/${branch}/${file.path}`,
|
|
323
|
+
license: source.license,
|
|
324
|
+
},
|
|
325
|
+
content,
|
|
326
|
+
popularity: { stars: meta.stars },
|
|
327
|
+
updatedAt: new Date().toISOString(),
|
|
328
|
+
};
|
|
329
|
+
})));
|
|
330
|
+
return {
|
|
331
|
+
entries: entries.filter((e) => e !== null),
|
|
332
|
+
treeSha: meta.treeSha,
|
|
333
|
+
skipped: false,
|
|
334
|
+
};
|
|
262
335
|
}
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
export async function fetchAllSources(sources, onProgress) {
|
|
336
|
+
const SOURCE_CONCURRENCY = pLimit(4);
|
|
337
|
+
/** Fetch skills from multiple sources, in parallel, deduplicating by id. */
|
|
338
|
+
export async function fetchAllSources(sources, options = {}) {
|
|
267
339
|
const allEntries = [];
|
|
268
340
|
const seenIds = new Set();
|
|
269
|
-
|
|
341
|
+
const treeShas = new Map();
|
|
342
|
+
await Promise.all(sources.map(source => SOURCE_CONCURRENCY(async () => {
|
|
270
343
|
try {
|
|
271
|
-
const
|
|
272
|
-
|
|
344
|
+
const previous = options.previousShas?.get(source.repo);
|
|
345
|
+
const result = await fetchSource(source, previous);
|
|
346
|
+
if (result.treeSha)
|
|
347
|
+
treeShas.set(source.repo, result.treeSha);
|
|
348
|
+
for (const entry of result.entries) {
|
|
273
349
|
if (!seenIds.has(entry.id)) {
|
|
274
350
|
seenIds.add(entry.id);
|
|
275
351
|
allEntries.push(entry);
|
|
276
352
|
}
|
|
277
353
|
}
|
|
278
|
-
onProgress?.(source.repo, entries.length);
|
|
354
|
+
options.onProgress?.(source.repo, result.entries.length, result.skipped);
|
|
279
355
|
}
|
|
280
356
|
catch (err) {
|
|
281
357
|
console.error(`Failed to fetch ${source.repo}:`, err);
|
|
358
|
+
options.onProgress?.(source.repo, 0, false);
|
|
282
359
|
}
|
|
283
|
-
}
|
|
284
|
-
return allEntries;
|
|
360
|
+
})));
|
|
361
|
+
return { entries: allEntries, treeShas };
|
|
285
362
|
}
|
|
286
363
|
//# sourceMappingURL=github-fetcher.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"github-fetcher.js","sourceRoot":"","sources":["../src/github-fetcher.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"github-fetcher.js","sourceRoot":"","sources":["../src/github-fetcher.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
export type { SkillEntry, SkillRegistry, SkillSearchOptions, SkillSource, SkillCategory, ToolId, RegistrySource, } from './types.js';
|
|
2
2
|
export { SkillCatalog } from './catalog.js';
|
|
3
|
-
export { fetchSource, fetchAllSources } from './github-fetcher.js';
|
|
3
|
+
export { fetchSource, fetchAllSources, shouldRetryRateLimit, shouldRetrySecondaryRateLimit, _resetOctokitForTests, } from './github-fetcher.js';
|
|
4
4
|
export { TIER_1_SOURCES, TIER_2_SOURCES } from './sources.js';
|
|
5
|
+
export { loadDiscoveredSources } from './discovered.js';
|
|
6
|
+
export { computeQualityScore, type QualityScore } from './scoring.js';
|
|
5
7
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,YAAY,EACV,UAAU,EACV,aAAa,EACb,kBAAkB,EAClB,WAAW,EACX,aAAa,EACb,MAAM,EACN,cAAc,GACf,MAAM,YAAY,CAAC;AAEpB,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAC5C,OAAO,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,YAAY,EACV,UAAU,EACV,aAAa,EACb,kBAAkB,EAClB,WAAW,EACX,aAAa,EACb,MAAM,EACN,cAAc,GACf,MAAM,YAAY,CAAC;AAEpB,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAC5C,OAAO,EACL,WAAW,EACX,eAAe,EACf,oBAAoB,EACpB,6BAA6B,EAC7B,qBAAqB,GACtB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAC9D,OAAO,EAAE,qBAAqB,EAAE,MAAM,iBAAiB,CAAC;AACxD,OAAO,EAAE,mBAAmB,EAAE,KAAK,YAAY,EAAE,MAAM,cAAc,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -1,4 +1,6 @@
|
|
|
1
1
|
export { SkillCatalog } from './catalog.js';
|
|
2
|
-
export { fetchSource, fetchAllSources } from './github-fetcher.js';
|
|
2
|
+
export { fetchSource, fetchAllSources, shouldRetryRateLimit, shouldRetrySecondaryRateLimit, _resetOctokitForTests, } from './github-fetcher.js';
|
|
3
3
|
export { TIER_1_SOURCES, TIER_2_SOURCES } from './sources.js';
|
|
4
|
+
export { loadDiscoveredSources } from './discovered.js';
|
|
5
|
+
export { computeQualityScore } from './scoring.js';
|
|
4
6
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAUA,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAC5C,OAAO,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAUA,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAC5C,OAAO,EACL,WAAW,EACX,eAAe,EACf,oBAAoB,EACpB,6BAA6B,EAC7B,qBAAqB,GACtB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAC9D,OAAO,EAAE,qBAAqB,EAAE,MAAM,iBAAiB,CAAC;AACxD,OAAO,EAAE,mBAAmB,EAAqB,MAAM,cAAc,CAAC"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import type { SkillEntry } from './types.js';
|
|
2
|
+
export interface QualityScore {
|
|
3
|
+
/** Overall score 0-100 */
|
|
4
|
+
overall: number;
|
|
5
|
+
/** Breakdown by factor */
|
|
6
|
+
factors: {
|
|
7
|
+
/** Stars-based popularity (0-25) */
|
|
8
|
+
popularity: number;
|
|
9
|
+
/** Content quality: length, sections, code blocks (0-25) */
|
|
10
|
+
contentQuality: number;
|
|
11
|
+
/** Metadata completeness: description, tags, languages (0-25) */
|
|
12
|
+
completeness: number;
|
|
13
|
+
/** How recently updated (0-25) */
|
|
14
|
+
recency: number;
|
|
15
|
+
};
|
|
16
|
+
}
|
|
17
|
+
/** Compute a quality score for a skill entry. */
|
|
18
|
+
export declare function computeQualityScore(skill: SkillEntry): QualityScore;
|
|
19
|
+
//# sourceMappingURL=scoring.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scoring.d.ts","sourceRoot":"","sources":["../src/scoring.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAE7C,MAAM,WAAW,YAAY;IAC3B,0BAA0B;IAC1B,OAAO,EAAE,MAAM,CAAC;IAChB,0BAA0B;IAC1B,OAAO,EAAE;QACP,oCAAoC;QACpC,UAAU,EAAE,MAAM,CAAC;QACnB,4DAA4D;QAC5D,cAAc,EAAE,MAAM,CAAC;QACvB,iEAAiE;QACjE,YAAY,EAAE,MAAM,CAAC;QACrB,kCAAkC;QAClC,OAAO,EAAE,MAAM,CAAC;KACjB,CAAC;CACH;AAED,iDAAiD;AACjD,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,UAAU,GAAG,YAAY,CAYnE"}
|