@reneturcios/greenlight 0.0.0-stage → 0.3.2

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/dist/github.js ADDED
@@ -0,0 +1,531 @@
1
+ /**
2
+ * GitHub API client. Native fetch only, no extra dependencies.
3
+ * Optional GITHUB_TOKEN env var raises the rate limit from 60 to 5000 req/hr.
4
+ * Responses are cached under ~/.cache/greenlight (6h TTL for issues/repos,
5
+ * 1h for search) so repeated checks do not burn quota.
6
+ */
7
+ import { homedir } from "node:os";
8
+ import { join } from "node:path";
9
+ import { mkdirSync, readFileSync, writeFileSync, existsSync } from "node:fs";
10
+ import { classifyLinkStrength } from "./linkstrength.js";
11
+ const API = "https://api.github.com";
12
+ const RAW = "https://raw.githubusercontent.com";
13
+ const CACHE_DIR = join(homedir(), ".cache", "greenlight");
14
+ function ensureCache() {
15
+ try {
16
+ mkdirSync(CACHE_DIR, { recursive: true });
17
+ }
18
+ catch { /* ignore */ }
19
+ }
20
+ const TTL_MS = {
21
+ issue: 6 * 60 * 60 * 1000,
22
+ search: 60 * 60 * 1000,
23
+ contributing: 24 * 60 * 60 * 1000,
24
+ };
25
+ function cacheKey(kind, parts) {
26
+ return `${kind}-${parts.join("-").replace(/[^a-zA-Z0-9_.-]/g, "_")}.json`;
27
+ }
28
+ function cacheGet(kind, parts) {
29
+ ensureCache();
30
+ const file = join(CACHE_DIR, cacheKey(kind, parts));
31
+ if (!existsSync(file))
32
+ return undefined;
33
+ try {
34
+ const entry = JSON.parse(readFileSync(file, "utf8"));
35
+ if (Date.now() - entry.savedAt > TTL_MS[kind])
36
+ return undefined;
37
+ return entry.data;
38
+ }
39
+ catch {
40
+ return undefined;
41
+ }
42
+ }
43
+ function cacheSet(kind, parts, data) {
44
+ ensureCache();
45
+ const file = join(CACHE_DIR, cacheKey(kind, parts));
46
+ try {
47
+ writeFileSync(file, JSON.stringify({ savedAt: Date.now(), data }), "utf8");
48
+ }
49
+ catch { /* cache is best-effort */ }
50
+ }
51
+ export class RateLimitError extends Error {
52
+ constructor(message) {
53
+ super(message);
54
+ this.name = "RateLimitError";
55
+ }
56
+ }
57
+ /** Thrown by apiGet/apiPost for HTTP 404, so callers can treat "missing" as data. */
58
+ export class ApiNotFoundError extends Error {
59
+ constructor(path) {
60
+ super(`GitHub API 404 for ${path}`);
61
+ this.name = "ApiNotFoundError";
62
+ }
63
+ }
64
+ export function githubToken() {
65
+ return process.env.GITHUB_TOKEN || process.env.GH_TOKEN;
66
+ }
67
+ export async function apiGet(path) {
68
+ const headers = {
69
+ "Accept": "application/vnd.github+json",
70
+ "User-Agent": "greenlight-cli",
71
+ "X-GitHub-Api-Version": "2022-11-28",
72
+ };
73
+ const token = githubToken();
74
+ if (token)
75
+ headers["Authorization"] = `Bearer ${token}`;
76
+ const res = await fetch(`${API}${path}`, { headers });
77
+ if (res.status === 403 || res.status === 429) {
78
+ const body = await res.text().catch(() => "");
79
+ const reset = res.headers.get("x-ratelimit-reset");
80
+ const wait = reset ? ` Rate limit resets at ${new Date(Number(reset) * 1000).toISOString()}.` : "";
81
+ const hint = token
82
+ ? "Authenticated limit also exhausted."
83
+ : "Set GITHUB_TOKEN (a classic PAT, no scopes needed for public repos) to raise the limit from 60 to 5000 req/hr.";
84
+ throw new RateLimitError(`GitHub rate limit hit (${res.status}).${wait} ${hint} ${body.slice(0, 120)}`);
85
+ }
86
+ if (res.status === 404) {
87
+ throw new ApiNotFoundError(path);
88
+ }
89
+ if (!res.ok) {
90
+ throw new Error(`GitHub API ${res.status} for ${path}: ${(await res.text()).slice(0, 200)}`);
91
+ }
92
+ return res.json();
93
+ }
94
+ /** POST helper for write operations (automation commands). Read paths use apiGet. */
95
+ export async function apiPost(path, body) {
96
+ const headers = {
97
+ "Accept": "application/vnd.github+json",
98
+ "Content-Type": "application/json",
99
+ "User-Agent": "greenlight-cli",
100
+ "X-GitHub-Api-Version": "2022-11-28",
101
+ };
102
+ const token = githubToken();
103
+ if (token)
104
+ headers["Authorization"] = `Bearer ${token}`;
105
+ const res = await fetch(`${API}${path}`, { method: "POST", headers, body: JSON.stringify(body) });
106
+ if (res.status === 403 || res.status === 429) {
107
+ const reset = res.headers.get("x-ratelimit-reset");
108
+ const wait = reset ? ` Rate limit resets at ${new Date(Number(reset) * 1000).toISOString()}.` : "";
109
+ throw new RateLimitError(`GitHub rate limit hit (${res.status}).${wait}`);
110
+ }
111
+ if (res.status === 404) {
112
+ throw new ApiNotFoundError(path);
113
+ }
114
+ if (!res.ok) {
115
+ throw new Error(`GitHub API ${res.status} for ${path}: ${(await res.text()).slice(0, 200)}`);
116
+ }
117
+ return res.json();
118
+ }
119
+ async function paginate(path, perPage = 100, maxPages = 5) {
120
+ const out = [];
121
+ for (let page = 1; page <= maxPages; page++) {
122
+ const sep = path.includes("?") ? "&" : "?";
123
+ const data = (await apiGet(`${path}${sep}per_page=${perPage}&page=${page}`));
124
+ out.push(...data);
125
+ if (data.length < perPage)
126
+ break;
127
+ }
128
+ return out;
129
+ }
130
+ export function parseIssueUrl(url) {
131
+ const m = /github\.com\/([^/]+)\/([^/]+)\/(?:issues|pull)\/(\d+)/.exec(url);
132
+ if (!m)
133
+ throw new Error(`Not a GitHub issue URL: ${url}`);
134
+ return { owner: m[1], repo: m[2], number: Number(m[3]) };
135
+ }
136
+ /** Fetch issue comments for claim detection. */
137
+ export async function fetchComments(owner, repo, number) {
138
+ const cached = cacheGet("issue", [owner, repo, String(number), "comments"]);
139
+ if (cached)
140
+ return cached;
141
+ const data = await paginate(`/repos/${owner}/${repo}/issues/${number}/comments`);
142
+ const comments = data.map((c) => ({
143
+ author: c.user.login,
144
+ body: String(c.body ?? ""),
145
+ createdAt: String(c.created_at),
146
+ }));
147
+ cacheSet("issue", [owner, repo, String(number), "comments"], comments);
148
+ return comments;
149
+ }
150
+ /**
151
+ * Find PRs that reference an issue. Timeline cross-references and a text
152
+ * search for the issue number are discovery only: every candidate PR is
153
+ * then fetched individually and scored with classifyLinkStrength, so a PR
154
+ * that merely lists a sibling issue (e.g. pdfcn #91 closing #70 while
155
+ * mentioning #61) is stored as a "mention", not a "closing" PR. See issue #1.
156
+ */
157
+ export async function fetchLinkedPRs(owner, repo, number) {
158
+ const cached = cacheGet("issue", [owner, repo, String(number), "prs"]);
159
+ if (cached)
160
+ return cached;
161
+ const found = new Map();
162
+ try {
163
+ const timeline = await paginate(`/repos/${owner}/${repo}/issues/${number}/timeline`);
164
+ for (const event of timeline) {
165
+ if (event.event !== "cross-referenced")
166
+ continue;
167
+ const src = event.source;
168
+ if (!src || src.type !== "issue")
169
+ continue;
170
+ const pull = src.pull_request;
171
+ if (!pull)
172
+ continue;
173
+ const prUrl = String(src.html_url ?? "");
174
+ const nm = /\/pull\/(\d+)/.exec(prUrl);
175
+ if (!nm)
176
+ continue;
177
+ found.set(Number(nm[1]), {
178
+ number: Number(nm[1]),
179
+ state: "open", // refined below via search state
180
+ title: String(src.title ?? ""),
181
+ url: prUrl,
182
+ });
183
+ }
184
+ }
185
+ catch { /* timeline is best-effort */ }
186
+ // Search PRs in the repo that mention the issue number, to get states.
187
+ try {
188
+ const q = encodeURIComponent(`repo:${owner}/${repo} type:pr #${number}`);
189
+ const data = (await apiGet(`/search/issues?q=${q}&per_page=20`));
190
+ for (const item of data.items ?? []) {
191
+ const state = item.pull_request?.merged_at ? "merged" : item.state === "open" ? "open" : "closed";
192
+ found.set(item.number, {
193
+ number: item.number,
194
+ state,
195
+ title: item.title,
196
+ url: item.html_url,
197
+ });
198
+ }
199
+ }
200
+ catch { /* search is best-effort */ }
201
+ // Score each candidate with its real body and branch: discovery is not evidence.
202
+ const prs = [];
203
+ for (const cand of found.values()) {
204
+ let linkStrength = "mention";
205
+ let title = cand.title;
206
+ try {
207
+ const detail = (await apiGet(`/repos/${owner}/${repo}/pulls/${cand.number}`));
208
+ title = String(detail.title ?? cand.title);
209
+ const branch = String(detail.head?.ref ?? "");
210
+ linkStrength = classifyLinkStrength({
211
+ title,
212
+ body: String(detail.body ?? ""),
213
+ branch,
214
+ issueNumber: number,
215
+ });
216
+ }
217
+ catch {
218
+ linkStrength = "mention"; // could not read the PR; treat as a weak reference
219
+ }
220
+ prs.push({ number: cand.number, state: cand.state, title, url: cand.url, linkStrength });
221
+ }
222
+ cacheSet("issue", [owner, repo, String(number), "prs"], prs);
223
+ return prs;
224
+ }
225
+ /**
226
+ * Policy files fetched for gate extraction. Binding contribution rules
227
+ * increasingly live in house-rules files that CONTRIBUTING only links to
228
+ * (reticle keeps its claim-first, DCO, .changes and `pnpm verify` rules in
229
+ * AGENTS.md), so CONTRIBUTING variants are fetched together with AGENTS.md
230
+ * and CLAUDE.md at the root and under .github/. fastmcp moved its rules
231
+ * again in 2026, into docs/development/contributing.mdx behind a pointer
232
+ * CONTRIBUTING.md, which is why the development-guide paths are here too.
233
+ */
234
+ export const HOUSE_RULE_FILES = [
235
+ "CONTRIBUTING.md",
236
+ "contributing.md",
237
+ ".github/CONTRIBUTING.md",
238
+ "docs/development/contributing.mdx",
239
+ "docs/development/contributing.md",
240
+ "AGENTS.md",
241
+ "CLAUDE.md",
242
+ ".github/AGENTS.md",
243
+ ".github/CLAUDE.md",
244
+ ];
245
+ /** Fetch all existing house-rules files for a repo (best-effort, cached). */
246
+ export async function fetchHouseRules(owner, repo, deps = {}) {
247
+ if (!deps.fetchRaw) {
248
+ const cached = cacheGet("house-rules", [owner, repo]);
249
+ if (cached)
250
+ return cached;
251
+ }
252
+ const headers = { "User-Agent": "greenlight-cli" };
253
+ const token = githubToken();
254
+ if (token)
255
+ headers["Authorization"] = `Bearer ${token}`;
256
+ const fetchRaw = deps.fetchRaw ??
257
+ (async (file) => {
258
+ try {
259
+ const res = await fetch(`${RAW}/${owner}/${repo}/HEAD/${file}`, { headers });
260
+ if (res.ok)
261
+ return await res.text();
262
+ }
263
+ catch { /* try next */ }
264
+ return undefined;
265
+ });
266
+ const out = [];
267
+ for (const file of HOUSE_RULE_FILES) {
268
+ const text = await fetchRaw(file);
269
+ if (text)
270
+ out.push({ file, text });
271
+ }
272
+ if (!deps.fetchRaw)
273
+ cacheSet("house-rules", [owner, repo], out);
274
+ return out;
275
+ }
276
+ /** Fetch CONTRIBUTING.md raw text; returns undefined when the repo has none. */
277
+ export async function fetchContributing(owner, repo) {
278
+ const rules = await fetchHouseRules(owner, repo);
279
+ return rules.find((r) => r.file.toLowerCase().includes("contributing"))?.text;
280
+ }
281
+ /**
282
+ * Extract PR references from comment bodies: bare #NNN mentions and full
283
+ * github.com/<owner>/<repo>/pull/NNN URLs. Returns deduplicated numbers in
284
+ * order of first appearance.
285
+ */
286
+ export function extractPRReferences(comments, owner, repo) {
287
+ const esc = (s) => s.replace(/[^a-zA-Z0-9_.-]/g, "");
288
+ const urlRe = new RegExp(`github\\.com/${esc(owner)}/${esc(repo)}/pull/(\\d+)`, "gi");
289
+ const bareRe = /#(\d{1,6})\b/g;
290
+ const seen = new Set();
291
+ const out = [];
292
+ for (const comment of comments) {
293
+ for (const re of [urlRe, bareRe]) {
294
+ re.lastIndex = 0;
295
+ let m;
296
+ while ((m = re.exec(comment.body)) !== null) {
297
+ const n = Number(m[1]);
298
+ if (n > 0 && !seen.has(n)) {
299
+ seen.add(n);
300
+ out.push(n);
301
+ }
302
+ }
303
+ }
304
+ }
305
+ return out;
306
+ }
307
+ /**
308
+ * PR references per citing comment author: number -> first comment author
309
+ * that cited it. Used to tag MentionedPRs with fromAuthor.
310
+ */
311
+ export function extractPRReferenceAuthors(comments, owner, repo) {
312
+ const esc = (s) => s.replace(/[^a-zA-Z0-9_.-]/g, "");
313
+ const urlRe = new RegExp(`github\\.com/${esc(owner)}/${esc(repo)}/pull/(\\d+)`, "gi");
314
+ const bareRe = /#(\d{1,6})\b/g;
315
+ const out = new Map();
316
+ for (const comment of comments) {
317
+ for (const re of [urlRe, bareRe]) {
318
+ re.lastIndex = 0;
319
+ let m;
320
+ while ((m = re.exec(comment.body)) !== null) {
321
+ const n = Number(m[1]);
322
+ if (n > 0 && !out.has(n))
323
+ out.set(n, comment.author);
324
+ }
325
+ }
326
+ }
327
+ return out;
328
+ }
329
+ /** True when text references issue number n via #n or a full issue/PR URL. */
330
+ function mentionsIssueNumber(text, n) {
331
+ const bare = text.match(/#(\d{1,6})\b/g) ?? [];
332
+ if (bare.some((r) => Number(r.slice(1)) === n))
333
+ return true;
334
+ return text.includes(`/issues/${n}`) || text.includes(`/pull/${n}`);
335
+ }
336
+ async function defaultFetchPull(owner, repo, n) {
337
+ try {
338
+ const d = (await apiGet(`/repos/${owner}/${repo}/pulls/${n}`));
339
+ return {
340
+ number: Number(d.number ?? n),
341
+ state: d.state === "closed" ? "closed" : "open",
342
+ merged: d.merged_at != null,
343
+ title: String(d.title ?? ""),
344
+ body: String(d.body ?? ""),
345
+ url: String(d.html_url ?? ""),
346
+ };
347
+ }
348
+ catch (e) {
349
+ // A 404 here means the reference was an issue number, not a PR: skip it.
350
+ if (e instanceof ApiNotFoundError)
351
+ return null;
352
+ throw e;
353
+ }
354
+ }
355
+ /**
356
+ * Cross-check PR references found in comments against the PR API.
357
+ *
358
+ * Motivation: reticlehq/reticle#691 got a clean GO verdict while its comments
359
+ * contained a partial claim ("Taking the remaining fallback ask") and a
360
+ * heads-up that PR #861 covers that work. Neither signal existed in the
361
+ * timeline or the issue-number search, so both were missed.
362
+ *
363
+ * All comments are scanned (PR references are cheap to extract), but each
364
+ * result records whether the citing comment came from the issue author.
365
+ * The open-PR downgrade (rule 11) only trusts non-author heads-ups; the
366
+ * partially-addressed rule (rule 12) also reads the author's, because the
367
+ * maintainer narrating what already shipped is usually the issue author.
368
+ * References already found via the timeline/search, and the issue's own
369
+ * number, are skipped. Bounded at 5 PR fetches per call; the walk is
370
+ * best-effort and cached like the rest of the issue data.
371
+ */
372
+ export async function fetchCommentMentionedPRs(owner, repo, issueNumber, comments, knownPRNumbers, deps = {}) {
373
+ // Injected fetch deps (tests) bypass the cache; live calls use it.
374
+ const useCache = !deps.fetchPull;
375
+ if (useCache) {
376
+ const cached = cacheGet("issue", [owner, repo, String(issueNumber), "mentioned-prs"]);
377
+ if (cached)
378
+ return cached;
379
+ }
380
+ const refs = extractPRReferences(comments, owner, repo)
381
+ .filter((n) => n !== issueNumber && !knownPRNumbers.includes(n))
382
+ .slice(0, 5);
383
+ const fetchPull = deps.fetchPull ?? defaultFetchPull;
384
+ const refAuthors = extractPRReferenceAuthors(comments, owner, repo);
385
+ const out = [];
386
+ for (const n of refs) {
387
+ let detail;
388
+ try {
389
+ detail = await fetchPull(owner, repo, n);
390
+ }
391
+ catch {
392
+ break; // best-effort: a failing provider ends the walk, keeps prior results
393
+ }
394
+ if (!detail)
395
+ continue; // it was an issue number, not a PR
396
+ out.push({
397
+ number: detail.number,
398
+ url: detail.url,
399
+ state: detail.merged ? "merged" : detail.state,
400
+ mentionsIssue: mentionsIssueNumber(`${detail.title}\n${detail.body}`, issueNumber),
401
+ ...(deps.issueAuthor && refAuthors.get(detail.number) === deps.issueAuthor
402
+ ? { fromAuthor: true }
403
+ : {}),
404
+ });
405
+ }
406
+ if (useCache)
407
+ cacheSet("issue", [owner, repo, String(issueNumber), "mentioned-prs"], out);
408
+ return out;
409
+ }
410
+ /** Count open issues labelled good-first-issue or help-wanted. */
411
+ export async function countStarterIssues(owner, repo) {
412
+ try {
413
+ const q = encodeURIComponent(`repo:${owner}/${repo} type:issue state:open (label:"good first issue" OR label:"help wanted")`);
414
+ const data = (await apiGet(`/search/issues?q=${q}&per_page=1`));
415
+ return data.total_count ?? null;
416
+ }
417
+ catch {
418
+ return null;
419
+ }
420
+ }
421
+ /** Detect a collaborators-only PR creation policy via the community metrics endpoint. */
422
+ export async function detectRepoPolicy(owner, repo) {
423
+ // Best-effort: no public API exposes pull_request_creation_policy directly,
424
+ // so we treat it as unknown (false) unless evidence appears elsewhere.
425
+ return { collaboratorsOnly: false };
426
+ }
427
+ /** Build a full IssueSnapshot from the live API. */
428
+ export async function buildIssueSnapshot(owner, repo, number) {
429
+ const cached = cacheGet("issue", [owner, repo, String(number), "snapshot"]);
430
+ if (cached)
431
+ return cached;
432
+ const issue = (await apiGet(`/repos/${owner}/${repo}/issues/${number}`));
433
+ if (issue.pull_request) {
434
+ throw new Error(`#${number} is a pull request, not an issue`);
435
+ }
436
+ const [comments, linkedPRs, houseRules] = await Promise.all([
437
+ fetchComments(owner, repo, number),
438
+ fetchLinkedPRs(owner, repo, number),
439
+ fetchHouseRules(owner, repo),
440
+ ]);
441
+ // Comment-mentioned PRs: references like "#861" in comments, cross-checked
442
+ // against the PR API. The open-PR downgrade trusts only non-author
443
+ // heads-ups (see rule 11), but the partially-addressed rule also reads
444
+ // the author's, since the maintainer narrating shipped work is usually
445
+ // the issue author. Best-effort; never blocks the snapshot.
446
+ let commentMentionedPRs = [];
447
+ try {
448
+ const issueAuthor = String(issue.user?.login ?? "");
449
+ commentMentionedPRs = await fetchCommentMentionedPRs(owner, repo, number, comments, linkedPRs.map((p) => p.number), { issueAuthor });
450
+ }
451
+ catch { /* best-effort */ }
452
+ const snapshot = {
453
+ sourceUrl: `https://github.com/${owner}/${repo}/issues/${number}`,
454
+ owner,
455
+ repo,
456
+ number,
457
+ state: String(issue.state),
458
+ title: String(issue.title ?? ""),
459
+ body: String(issue.body ?? ""),
460
+ author: (issue.user?.login ?? ""),
461
+ assignees: (issue.assignees ?? []).map((a) => a.login),
462
+ labels: (issue.labels ?? []).map((l) => l.name),
463
+ comments,
464
+ linkedPRs,
465
+ commentMentionedPRs,
466
+ createdAt: String(issue.created_at),
467
+ updatedAt: String(issue.updated_at),
468
+ // Joined text kept for compatibility; the verdict engine prefers the
469
+ // per-file houseRules when present so gates record their source file.
470
+ contributing: houseRules.map((r) => r.text).join("\n\n"),
471
+ houseRules,
472
+ };
473
+ cacheSet("issue", [owner, repo, String(number), "snapshot"], snapshot);
474
+ return snapshot;
475
+ }
476
+ /** List open good-first-issue / help-wanted issues for scan mode. */
477
+ export async function listStarterIssues(owner, repo, limit = 25) {
478
+ const q = encodeURIComponent(`repo:${owner}/${repo} type:issue state:open no:assignee (label:"good first issue" OR label:"help wanted")`);
479
+ const data = (await apiGet(`/search/issues?q=${q}&per_page=${limit}&sort=updated&order=desc`));
480
+ return (data.items ?? []).map((i) => ({
481
+ number: i.number,
482
+ title: i.title,
483
+ url: i.html_url,
484
+ labels: i.labels.map((l) => l.name),
485
+ updatedAt: i.updated_at,
486
+ }));
487
+ }
488
+ /**
489
+ * Filter raw issue-list items down to scan candidates: real issues (not
490
+ * pull requests) with no assignees, newest first. Pure so tests can drive
491
+ * it with fixtures.
492
+ */
493
+ export function toScanCandidates(items) {
494
+ return items
495
+ .filter((i) => !i.pull_request && (i.assignees ?? []).length === 0)
496
+ .map((i) => ({
497
+ number: i.number,
498
+ title: i.title,
499
+ url: i.html_url,
500
+ labels: i.labels.map((l) => l.name),
501
+ updatedAt: i.updated_at,
502
+ }));
503
+ }
504
+ /**
505
+ * Fallback candidate list for scan mode: the most recent open unassigned
506
+ * issues in the repo, for repos whose landable issues do not carry
507
+ * good-first-issue / help-wanted labels. Lists broadly (up to `cap`) so
508
+ * the caller can take the newest slice.
509
+ */
510
+ export async function listRecentUnassignedIssues(owner, repo, cap = 25) {
511
+ const items = await paginate(`/repos/${owner}/${repo}/issues?state=open&sort=created&direction=desc`, 100, 3);
512
+ return toScanCandidates(items).slice(0, cap);
513
+ }
514
+ /**
515
+ * Scan candidates for a repo: the label-tagged starter list first; when it
516
+ * is empty, fall back to recent open unassigned issues (opt out with
517
+ * fallback: false). Injectable deps keep tests offline.
518
+ */
519
+ export async function scanCandidates(owner, repo, opts = {}, deps = {}) {
520
+ const limit = opts.limit ?? 10;
521
+ const starter = deps.starter ?? listStarterIssues;
522
+ const labeled = await starter(owner, repo, limit);
523
+ if (labeled.length > 0)
524
+ return { issues: labeled, fallbackUsed: false };
525
+ if (opts.fallback === false)
526
+ return { issues: [], fallbackUsed: false };
527
+ const recent = deps.recent ?? listRecentUnassignedIssues;
528
+ const issues = (await recent(owner, repo, 25)).slice(0, limit);
529
+ return { issues, fallbackUsed: true };
530
+ }
531
+ //# sourceMappingURL=github.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"github.js","sourceRoot":"","sources":["../src/github.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ export {};