🎩 You're Invited:Meet the Socket team at Black Hat in Las Vegas, August 3-6.RSVP
Sign In

gitworthy

Package Overview
Dependencies
Maintainers
1
Versions
11
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

gitworthy - npm Package Compare versions

Comparing version
0.3.6
to
0.3.9
+6
dist/core/doctor.d.ts
import { Envelope } from './envelope.js';
export type Input = {
probe_repo?: string;
probe_issue_number?: number;
};
export declare function doctor(input?: Input): Promise<Envelope>;
import { randomUUID } from 'node:crypto';
import { mkdir, unlink, writeFile } from 'node:fs/promises';
import path from 'node:path';
import { cacheRoot } from '../lib/cache.js';
import { githubJson, githubToken } from '../lib/github.js';
import { packageVersion } from '../lib/package-meta.js';
import { npmMetadata } from '../lib/registry.js';
import { createEnvelope } from './envelope.js';
const DEFAULT_PROBE_REPO = 'trippyogi/gitworthy';
const DEFAULT_PROBE_ISSUE_NUMBER = 1;
const RATE_LIMIT_LOW_THRESHOLD = 100;
const BASELINE_LIMITATION = 'doctor validates the local environment and a small live GitHub API surface (rate limit, auth, timeline capability); it does not validate permissions against an arbitrary target repo or exercise the full worth_check pipeline.';
function errorMessage(error) {
return error instanceof Error ? error.message : String(error);
}
async function checkCacheDir() {
const dir = cacheRoot();
try {
await mkdir(dir, { recursive: true });
const probeFile = path.join(dir, `.doctor-probe-${randomUUID()}`);
await writeFile(probeFile, 'ok');
await unlink(probeFile);
return {
evidence: { kind: 'cache', dir, writable: true },
checked: [`checked cache directory exists and is writable (${dir})`],
not_checked: [],
writable: true
};
}
catch (error) {
const message = errorMessage(error);
return {
evidence: { kind: 'cache', dir, writable: false, error: message },
checked: [],
not_checked: [`cache directory (${dir}) is not writable: ${message}`],
writable: false
};
}
}
async function checkVersion() {
const local = packageVersion();
try {
const metadata = await npmMetadata('gitworthy');
const latest = metadata['dist-tags']?.latest;
return {
evidence: { kind: 'version', local, npm_latest: latest ?? null, up_to_date: latest ? local === latest : null },
checked: ['checked local package version', 'fetched npm registry latest version for gitworthy'],
not_checked: []
};
}
catch (error) {
const message = errorMessage(error);
return {
evidence: { kind: 'version', local, npm_latest: null },
checked: ['checked local package version'],
not_checked: [`npm registry latest version for gitworthy was not checked: ${message}`]
};
}
}
async function checkRateLimit() {
try {
const response = await githubJson('/rate_limit');
const core = response.resources.core;
const low = core.remaining < RATE_LIMIT_LOW_THRESHOLD;
return {
evidence: { kind: 'rate_limit', remaining: core.remaining, limit: core.limit, reset: core.reset },
checked: ['fetched GitHub rate limit status (/rate_limit)'],
not_checked: [],
low
};
}
catch (error) {
const message = errorMessage(error);
return {
evidence: { kind: 'rate_limit', ok: false, error: message },
checked: [],
not_checked: [`GitHub rate limit was not checked: ${message}`],
low: null
};
}
}
async function checkAuth() {
try {
const user = await githubJson('/user');
return {
evidence: { kind: 'auth', ok: true, login: user.login },
checked: ['fetched authenticated GitHub user (/user)'],
not_checked: [],
ok: true
};
}
catch (error) {
const message = errorMessage(error);
return {
evidence: { kind: 'auth', ok: false, error: message },
checked: [],
not_checked: [`GitHub authentication was not verified: ${message}`],
ok: false
};
}
}
async function checkTimelineProbe(repo, issueNumber) {
try {
const events = await githubJson(`/repos/${repo}/issues/${issueNumber}/timeline?per_page=5`);
const types = [...new Set(events.map((event) => event.event))].sort();
const not_checked = [];
if (!types.includes('cross-referenced')) {
not_checked.push(`timeline probe on ${repo}#${issueNumber} observed no cross-referenced events; weak tokens (classic PATs without Issues: Read, or fine-grained tokens missing an Issues permission) omit cross-referenced events from the timeline API, which would under-count linked PRs in linked_work.`);
}
return {
evidence: { kind: 'timeline_probe', repo, issue_number: issueNumber, event_count: events.length, event_types: types },
checked: [`probed timeline capability on ${repo}#${issueNumber}`],
not_checked
};
}
catch (error) {
const message = errorMessage(error);
return {
evidence: { kind: 'timeline_probe', repo, issue_number: issueNumber, ok: false, error: message },
checked: [],
not_checked: [`timeline capability probe on ${repo}#${issueNumber} was not checked: ${message}`]
};
}
}
export async function doctor(input = {}) {
const probeRepo = input.probe_repo ?? DEFAULT_PROBE_REPO;
const probeIssueNumber = input.probe_issue_number ?? DEFAULT_PROBE_ISSUE_NUMBER;
const token = githubToken();
const evidence = [{ kind: 'auth', token_present: Boolean(token) }];
const checked = ['checked for a GITHUB_TOKEN or GH_TOKEN environment variable'];
const not_checked = [BASELINE_LIMITATION];
const [cacheResult, versionResult] = await Promise.all([checkCacheDir(), checkVersion()]);
evidence.push(cacheResult.evidence, versionResult.evidence);
checked.push(...cacheResult.checked, ...versionResult.checked);
not_checked.push(...cacheResult.not_checked, ...versionResult.not_checked);
let authOk = null;
let rateLimitLow = null;
if (!token) {
not_checked.push('GitHub rate limit, authentication, and timeline capability were not checked because no GITHUB_TOKEN or GH_TOKEN is present.');
}
else {
const [rateLimitResult, authResult] = await Promise.all([checkRateLimit(), checkAuth()]);
evidence.push(rateLimitResult.evidence, authResult.evidence);
checked.push(...rateLimitResult.checked, ...authResult.checked);
not_checked.push(...rateLimitResult.not_checked, ...authResult.not_checked);
rateLimitLow = rateLimitResult.low;
authOk = authResult.ok;
if (authOk) {
const timelineResult = await checkTimelineProbe(probeRepo, probeIssueNumber);
evidence.push(timelineResult.evidence);
checked.push(...timelineResult.checked);
not_checked.push(...timelineResult.not_checked);
}
else {
not_checked.push('timeline capability was not checked because GitHub authentication failed.');
}
}
let verdict_summary;
if (!token) {
verdict_summary = 'not ready: GITHUB_TOKEN (or GH_TOKEN) is missing.';
}
else if (authOk === false) {
verdict_summary = 'not ready: GitHub authentication failed; the token may be invalid, expired, or revoked.';
}
else if (!cacheResult.writable) {
verdict_summary = `not ready: cache directory (${cacheResult.evidence.dir}) is not writable.`;
}
else if (rateLimitLow) {
verdict_summary = 'ready with caution: GitHub rate limit is low; checks may fail mid-run.';
}
else {
verdict_summary = 'ready: token present, GitHub auth and rate limit checked, cache directory writable.';
}
return createEnvelope({
verdict_summary,
evidence,
signals: [],
checked: [...new Set(checked)],
not_checked: [...new Set(not_checked)],
cached: false
});
}
//# sourceMappingURL=doctor.js.map
{"version":3,"file":"doctor.js","sourceRoot":"","sources":["../../src/core/doctor.ts"],"names":[],"mappings":"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"}
import { Envelope } from './envelope.js';
import { SkillProfile } from './skill-fit.js';
type Input = {
repo?: string;
org?: string;
label?: string;
keywords?: string[];
since?: string;
scan_limit?: number;
max_repos?: number;
max_checks?: number;
land_hints?: boolean;
skip_likely_land_only?: boolean;
skip_soft_ask?: boolean;
skip_assigned?: boolean;
skip_ledger_skip?: boolean;
skip_policy_gate?: boolean;
npm_package?: string;
skill_profile?: SkillProfile | string;
};
export declare function hunt(input: Input): Promise<Envelope>;
export {};
import { getLedgerEntry } from '../lib/ledger.js';
import { contrib_policy } from './contrib-policy.js';
import { createEnvelope, GitworthyError } from './envelope.js';
import { org_scan } from './org-scan.js';
import { scan } from './scan.js';
import { worth_check } from './worth-check.js';
const DEFAULT_SCAN_LIMIT = 25;
const DEFAULT_MAX_CHECKS = 3;
const MAX_MAX_CHECKS = 5;
const HUNT_LIMIT = 'hunt is a triage orchestrator, not a verdict: it chains scan/org_scan candidate discovery into serial worth_check calls and returns no signals of its own. Inspect each evidence.hunt_candidate.worth_check.verdict and .disposition individually before acting.';
function toHuntCandidate(item) {
if (typeof item.number !== 'number')
return null;
return {
number: item.number,
repo: typeof item.repo === 'string' ? item.repo : undefined,
quality_score: typeof item.quality_score === 'number' ? item.quality_score : 0,
fit_score: typeof item.fit_score === 'number' ? item.fit_score : undefined,
likely_land_only: item.likely_land_only === true,
land_hint: typeof item.land_hint === 'string' ? item.land_hint : undefined,
soft_ask: item.soft_ask === true,
assignees: Array.isArray(item.assignees) ? item.assignees.filter((entry) => typeof entry === 'string') : []
};
}
async function filterCandidates(candidates, input) {
const skipLikelyLandOnly = input.skip_likely_land_only !== false;
const skipSoftAsk = input.skip_soft_ask !== false;
const skipAssigned = input.skip_assigned !== false;
const skipLedgerSkip = input.skip_ledger_skip !== false;
const eligible = [];
const reasonCounts = new Map();
const note = (reason) => reasonCounts.set(reason, (reasonCounts.get(reason) ?? 0) + 1);
for (const candidate of candidates) {
if (skipLikelyLandOnly && candidate.likely_land_only) {
note('likely_land_only');
continue;
}
if (skipSoftAsk && candidate.soft_ask) {
note('soft_ask');
continue;
}
if (skipAssigned && candidate.assignees.length > 0) {
note('assigned');
continue;
}
if (skipLedgerSkip) {
const repo = candidate.repo ?? input.repo;
if (repo) {
const entry = await getLedgerEntry(repo, candidate.number);
if (entry?.verdict === 'SKIP') {
note('ledger_skip');
continue;
}
}
}
eligible.push(candidate);
}
const filteredCount = candidates.length - eligible.length;
return { eligible, filteredCount, reasonCounts };
}
async function evaluatePolicyGate(repos, evidence, checked, notCheckedSet) {
const gate = new Map();
for (const repo of repos) {
const policy = await contrib_policy({ repo });
policy.not_checked.forEach((item) => notCheckedSet.add(item));
const blocked = policy.signals.includes('no_pr_path');
const claimRequired = policy.signals.includes('claim_required');
const feedbackChannel = blocked
? policy.evidence.find((item) => item.category === 'no_pr_path' && typeof item.feedback_channel === 'string')?.feedback_channel
: undefined;
gate.set(repo, { blocked, claimRequired, feedbackChannel });
if (blocked) {
evidence.push({
kind: 'policy_gate',
repo,
action: 'blocked',
signal: 'no_pr_path',
...(feedbackChannel ? { feedback_channel: feedbackChannel } : {})
});
checked.push(`policy_gate: ${repo} rejects pull requests (no_pr_path); skipping worth_check for its candidate(s)`);
}
else if (claimRequired) {
evidence.push({ kind: 'policy_gate', repo, action: 'claim_first', signal: 'claim_required' });
checked.push(`policy_gate warning: ${repo} requires claim/assignment before a PR (claim_required); worth_check will still run`);
}
else {
checked.push(`policy_gate: ${repo} has no blocking contribution-policy signal`);
}
}
return gate;
}
export async function hunt(input) {
if (!input.repo && !input.org) {
throw new GitworthyError({
code: 'hunt_invalid_input',
message: 'hunt requires either repo or org.',
not_checked: ['hunt requires either repo or org; neither was provided.']
});
}
const scanLimit = Number.isFinite(input.scan_limit) ? Math.max(1, input.scan_limit) : DEFAULT_SCAN_LIMIT;
const requestedChecks = input.max_checks ?? DEFAULT_MAX_CHECKS;
if (!Number.isFinite(requestedChecks)) {
throw new GitworthyError({
code: 'hunt_invalid_input',
message: 'hunt max_checks must be a finite positive number.',
not_checked: ['hunt max_checks was not a finite number.']
});
}
const maxChecks = Math.min(Math.max(requestedChecks, 1), MAX_MAX_CHECKS);
const useOrgMode = Boolean(input.org);
const scanResult = useOrgMode
? await org_scan({
org: input.org,
label: input.label,
keywords: input.keywords,
since: input.since,
limit: scanLimit,
max_repos: input.max_repos,
land_hints: input.land_hints,
skill_profile: input.skill_profile
})
: await scan({
repo: input.repo,
label: input.label,
keywords: input.keywords,
since: input.since,
limit: scanLimit,
land_hints: input.land_hints,
skill_profile: input.skill_profile
});
const scanCandidates = scanResult.evidence.map(toHuntCandidate).filter((item) => item !== null);
const { eligible, filteredCount, reasonCounts } = await filterCandidates(scanCandidates, input);
// scan/org_scan already order by quality_score then fit_score when a skill_profile is present;
// re-applying the same comparator here is a stable no-op in that case and only matters if the
// upstream ordering didn't carry fit_score (e.g. future callers), so ties still prefer fit.
const ordered = [...eligible].sort((left, right) => right.quality_score - left.quality_score || (right.fit_score ?? 0) - (left.fit_score ?? 0));
const evidence = [];
const dispositionCounts = new Map();
const checked = [
useOrgMode ? `ran org_scan for ${input.org}` : `ran scan for ${input.repo}`,
...(useOrgMode && input.repo ? ['both repo and org were provided; org took precedence for candidate discovery.'] : []),
`discovered ${scanCandidates.length} scan candidate${scanCandidates.length === 1 ? '' : 's'}`,
`applied hunt filters (skip_likely_land_only=${input.skip_likely_land_only !== false}, skip_soft_ask=${input.skip_soft_ask !== false}, skip_assigned=${input.skip_assigned !== false}, skip_ledger_skip=${input.skip_ledger_skip !== false}): ${eligible.length} eligible, ${filteredCount} filtered`,
`will run up to ${maxChecks} worth_check(s) from ${eligible.length} eligible candidate(s), backfilling past policy-blocked repos`,
...scanResult.checked
];
const notCheckedSet = new Set(scanResult.not_checked);
const skipPolicyGate = input.skip_policy_gate === true;
const policyGate = new Map();
if (skipPolicyGate) {
checked.push('policy gate skipped (skip_policy_gate=true); worth_check ran without a contrib_policy pre-check');
}
let policyBlockedCount = 0;
let checksRun = 0;
const deferred = [];
const queue = [...ordered];
while (queue.length > 0) {
if (checksRun >= maxChecks) {
deferred.push(...queue);
break;
}
const candidate = queue.shift();
const repo = candidate.repo ?? input.repo;
if (!skipPolicyGate) {
if (!policyGate.has(repo)) {
const evaluated = await evaluatePolicyGate([repo], evidence, checked, notCheckedSet);
for (const [key, value] of evaluated)
policyGate.set(key, value);
}
if (policyGate.get(repo)?.blocked) {
policyBlockedCount += 1;
continue;
}
}
const result = await worth_check({ repo, issue_number: candidate.number, npm_package: input.npm_package });
checksRun += 1;
dispositionCounts.set(result.disposition, (dispositionCounts.get(result.disposition) ?? 0) + 1);
evidence.push({
kind: 'hunt_candidate',
repo,
issue_number: candidate.number,
quality_score: candidate.quality_score,
...(candidate.fit_score !== undefined ? { fit_score: candidate.fit_score } : {}),
...(candidate.land_hint ? { land_hint: candidate.land_hint } : {}),
worth_check: {
verdict: result.verdict,
disposition: result.disposition,
reasons: result.reasons
}
});
checked.push(`worth_check ${repo}#${candidate.number} -> ${result.verdict}/${result.disposition} (checked: ${result.checked.join(', ') || 'none'})`);
result.not_checked.forEach((item) => notCheckedSet.add(item));
}
if (policyBlockedCount > 0) {
notCheckedSet.add(`${policyBlockedCount} candidate(s) were blocked by the contrib_policy gate (no_pr_path) and were not run through worth_check.`);
}
if (filteredCount > 0) {
evidence.push({
kind: 'hunt_filtered',
count: filteredCount,
reasons: [...reasonCounts.entries()].map(([reason, count]) => `${reason}: ${count}`)
});
}
if (deferred.length > 0) {
notCheckedSet.add(`${deferred.length} eligible candidate(s) exceeded max_checks=${maxChecks} and were not run through worth_check: ${deferred.map((item) => `#${item.number}`).join(', ')}`);
}
notCheckedSet.add(HUNT_LIMIT);
const dispositionSummary = dispositionCounts.size > 0
? [...dispositionCounts.entries()].map(([disposition, count]) => `${disposition} x${count}`).join(', ')
: 'none (no candidates checked)';
return createEnvelope({
verdict_summary: `hunted ${checksRun} check${checksRun === 1 ? '' : 's'} from ${scanCandidates.length} scan candidate${scanCandidates.length === 1 ? '' : 's'} (${filteredCount} filtered${policyBlockedCount > 0 ? `, ${policyBlockedCount} policy-blocked` : ''}); dispositions: ${dispositionSummary}`,
evidence,
checked,
not_checked: [...notCheckedSet],
cached: false
});
}
//# sourceMappingURL=hunt.js.map
{"version":3,"file":"hunt.js","sourceRoot":"","sources":["../../src/core/hunt.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,EAAE,cAAc,EAAsB,cAAc,EAAE,MAAM,eAAe,CAAC;AACnF,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEjC,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAkC/C,MAAM,kBAAkB,GAAG,EAAE,CAAC;AAC9B,MAAM,kBAAkB,GAAG,CAAC,CAAC;AAC7B,MAAM,cAAc,GAAG,CAAC,CAAC;AACzB,MAAM,UAAU,GAAG,kQAAkQ,CAAC;AAEtR,SAAS,eAAe,CAAC,IAAc;IACrC,IAAI,OAAO,IAAI,CAAC,MAAM,KAAK,QAAQ;QAAE,OAAO,IAAI,CAAC;IACjD,OAAO;QACL,MAAM,EAAE,IAAI,CAAC,MAAM;QACnB,IAAI,EAAE,OAAO,IAAI,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS;QAC3D,aAAa,EAAE,OAAO,IAAI,CAAC,aAAa,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC;QAC9E,SAAS,EAAE,OAAO,IAAI,CAAC,SAAS,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS;QAC1E,gBAAgB,EAAE,IAAI,CAAC,gBAAgB,KAAK,IAAI;QAChD,SAAS,EAAE,OAAO,IAAI,CAAC,SAAS,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS;QAC1E,QAAQ,EAAE,IAAI,CAAC,QAAQ,KAAK,IAAI;QAChC,SAAS,EAAE,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,KAAK,EAAmB,EAAE,CAAC,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,EAAE;KAC7H,CAAC;AACJ,CAAC;AAED,KAAK,UAAU,gBAAgB,CAC7B,UAA2B,EAC3B,KAAY;IAEZ,MAAM,kBAAkB,GAAG,KAAK,CAAC,qBAAqB,KAAK,KAAK,CAAC;IACjE,MAAM,WAAW,GAAG,KAAK,CAAC,aAAa,KAAK,KAAK,CAAC;IAClD,MAAM,YAAY,GAAG,KAAK,CAAC,aAAa,KAAK,KAAK,CAAC;IACnD,MAAM,cAAc,GAAG,KAAK,CAAC,gBAAgB,KAAK,KAAK,CAAC;IAExD,MAAM,QAAQ,GAAoB,EAAE,CAAC;IACrC,MAAM,YAAY,GAAG,IAAI,GAAG,EAAkB,CAAC;IAC/C,MAAM,IAAI,GAAG,CAAC,MAAc,EAAE,EAAE,CAAC,YAAY,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC,YAAY,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;IAE/F,KAAK,MAAM,SAAS,IAAI,UAAU,EAAE,CAAC;QACnC,IAAI,kBAAkB,IAAI,SAAS,CAAC,gBAAgB,EAAE,CAAC;YAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;YAAC,SAAS;QAAC,CAAC;QAC7F,IAAI,WAAW,IAAI,SAAS,CAAC,QAAQ,EAAE,CAAC;YAAC,IAAI,CAAC,UAAU,CAAC,CAAC;YAAC,SAAS;QAAC,CAAC;QACtE,IAAI,YAAY,IAAI,SAAS,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAAC,IAAI,CAAC,UAAU,CAAC,CAAC;YAAC,SAAS;QAAC,CAAC;QACnF,IAAI,cAAc,EAAE,CAAC;YACnB,MAAM,IAAI,GAAG,SAAS,CAAC,IAAI,IAAI,KAAK,CAAC,IAAI,CAAC;YAC1C,IAAI,IAAI,EAAE,CAAC;gBACT,MAAM,KAAK,GAAG,MAAM,cAAc,CAAC,IAAI,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC;gBAC3D,IAAI,KAAK,EAAE,OAAO,KAAK,MAAM,EAAE,CAAC;oBAAC,IAAI,CAAC,aAAa,CAAC,CAAC;oBAAC,SAAS;gBAAC,CAAC;YACnE,CAAC;QACH,CAAC;QACD,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IAC3B,CAAC;IAED,MAAM,aAAa,GAAG,UAAU,CAAC,MAAM,GAAG,QAAQ,CAAC,MAAM,CAAC;IAC1D,OAAO,EAAE,QAAQ,EAAE,aAAa,EAAE,YAAY,EAAE,CAAC;AACnD,CAAC;AAED,KAAK,UAAU,kBAAkB,CAC/B,KAAe,EACf,QAAoB,EACpB,OAAiB,EACjB,aAA0B;IAE1B,MAAM,IAAI,GAAG,IAAI,GAAG,EAAsB,CAAC;IAC3C,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,MAAM,MAAM,GAAG,MAAM,cAAc,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC;QAC9C,MAAM,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC;QAC9D,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC;QACtD,MAAM,aAAa,GAAG,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAC,CAAC;QAChE,MAAM,eAAe,GAAG,OAAO;YAC7B,CAAC,CAAE,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,QAAQ,KAAK,YAAY,IAAI,OAAO,IAAI,CAAC,gBAAgB,KAAK,QAAQ,CAAC,EAAE,gBAAuC;YACvJ,CAAC,CAAC,SAAS,CAAC;QACd,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,EAAE,OAAO,EAAE,aAAa,EAAE,eAAe,EAAE,CAAC,CAAC;QAC5D,IAAI,OAAO,EAAE,CAAC;YACZ,QAAQ,CAAC,IAAI,CAAC;gBACZ,IAAI,EAAE,aAAa;gBACnB,IAAI;gBACJ,MAAM,EAAE,SAAS;gBACjB,MAAM,EAAE,YAAY;gBACpB,GAAG,CAAC,eAAe,CAAC,CAAC,CAAC,EAAE,gBAAgB,EAAE,eAAe,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;aAClE,CAAC,CAAC;YACH,OAAO,CAAC,IAAI,CAAC,gBAAgB,IAAI,gFAAgF,CAAC,CAAC;QACrH,CAAC;aAAM,IAAI,aAAa,EAAE,CAAC;YACzB,QAAQ,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,aAAa,EAAE,IAAI,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,EAAE,gBAAgB,EAAE,CAAC,CAAC;YAC9F,OAAO,CAAC,IAAI,CAAC,wBAAwB,IAAI,qFAAqF,CAAC,CAAC;QAClI,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,IAAI,CAAC,gBAAgB,IAAI,6CAA6C,CAAC,CAAC;QAClF,CAAC;IACH,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,IAAI,CAAC,KAAY;IACrC,IAAI,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC;QAC9B,MAAM,IAAI,cAAc,CAAC;YACvB,IAAI,EAAE,oBAAoB;YAC1B,OAAO,EAAE,mCAAmC;YAC5C,WAAW,EAAE,CAAC,yDAAyD,CAAC;SACzE,CAAC,CAAC;IACL,CAAC;IAED,MAAM,SAAS,GAAG,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,UAAoB,CAAC,CAAC,CAAC,CAAC,kBAAkB,CAAC;IACnH,MAAM,eAAe,GAAG,KAAK,CAAC,UAAU,IAAI,kBAAkB,CAAC;IAC/D,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,eAAe,CAAC,EAAE,CAAC;QACtC,MAAM,IAAI,cAAc,CAAC;YACvB,IAAI,EAAE,oBAAoB;YAC1B,OAAO,EAAE,mDAAmD;YAC5D,WAAW,EAAE,CAAC,0CAA0C,CAAC;SAC1D,CAAC,CAAC;IACL,CAAC;IACD,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,eAAe,EAAE,CAAC,CAAC,EAAE,cAAc,CAAC,CAAC;IACzE,MAAM,UAAU,GAAG,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAEtC,MAAM,UAAU,GAAG,UAAU;QAC3B,CAAC,CAAC,MAAM,QAAQ,CAAC;YACf,GAAG,EAAE,KAAK,CAAC,GAAI;YACf,KAAK,EAAE,KAAK,CAAC,KAAK;YAClB,QAAQ,EAAE,KAAK,CAAC,QAAQ;YACxB,KAAK,EAAE,KAAK,CAAC,KAAK;YAClB,KAAK,EAAE,SAAS;YAChB,SAAS,EAAE,KAAK,CAAC,SAAS;YAC1B,UAAU,EAAE,KAAK,CAAC,UAAU;YAC5B,aAAa,EAAE,KAAK,CAAC,aAAa;SACnC,CAAC;QACF,CAAC,CAAC,MAAM,IAAI,CAAC;YACX,IAAI,EAAE,KAAK,CAAC,IAAK;YACjB,KAAK,EAAE,KAAK,CAAC,KAAK;YAClB,QAAQ,EAAE,KAAK,CAAC,QAAQ;YACxB,KAAK,EAAE,KAAK,CAAC,KAAK;YAClB,KAAK,EAAE,SAAS;YAChB,UAAU,EAAE,KAAK,CAAC,UAAU;YAC5B,aAAa,EAAE,KAAK,CAAC,aAAa;SACnC,CAAC,CAAC;IAEL,MAAM,cAAc,GAAG,UAAU,CAAC,QAAQ,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,EAAyB,EAAE,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC;IACvH,MAAM,EAAE,QAAQ,EAAE,aAAa,EAAE,YAAY,EAAE,GAAG,MAAM,gBAAgB,CAAC,cAAc,EAAE,KAAK,CAAC,CAAC;IAChG,+FAA+F;IAC/F,8FAA8F;IAC9F,4FAA4F;IAC5F,MAAM,OAAO,GAAG,CAAC,GAAG,QAAQ,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CACjD,KAAK,CAAC,aAAa,GAAG,IAAI,CAAC,aAAa,IAAI,CAAC,KAAK,CAAC,SAAS,IAAI,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,IAAI,CAAC,CAAC,CAC3F,CAAC;IAEF,MAAM,QAAQ,GAAe,EAAE,CAAC;IAChC,MAAM,iBAAiB,GAAG,IAAI,GAAG,EAAkB,CAAC;IACpD,MAAM,OAAO,GAAa;QACxB,UAAU,CAAC,CAAC,CAAC,oBAAoB,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,gBAAgB,KAAK,CAAC,IAAI,EAAE;QAC3E,GAAG,CAAC,UAAU,IAAI,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,+EAA+E,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QACtH,cAAc,cAAc,CAAC,MAAM,kBAAkB,cAAc,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE;QAC7F,+CAA+C,KAAK,CAAC,qBAAqB,KAAK,KAAK,mBAAmB,KAAK,CAAC,aAAa,KAAK,KAAK,mBAAmB,KAAK,CAAC,aAAa,KAAK,KAAK,sBAAsB,KAAK,CAAC,gBAAgB,KAAK,KAAK,MAAM,QAAQ,CAAC,MAAM,cAAc,aAAa,WAAW;QACrS,kBAAkB,SAAS,wBAAwB,QAAQ,CAAC,MAAM,+DAA+D;QACjI,GAAG,UAAU,CAAC,OAAO;KACtB,CAAC;IACF,MAAM,aAAa,GAAG,IAAI,GAAG,CAAS,UAAU,CAAC,WAAW,CAAC,CAAC;IAE9D,MAAM,cAAc,GAAG,KAAK,CAAC,gBAAgB,KAAK,IAAI,CAAC;IACvD,MAAM,UAAU,GAAG,IAAI,GAAG,EAAsB,CAAC;IACjD,IAAI,cAAc,EAAE,CAAC;QACnB,OAAO,CAAC,IAAI,CAAC,iGAAiG,CAAC,CAAC;IAClH,CAAC;IAED,IAAI,kBAAkB,GAAG,CAAC,CAAC;IAC3B,IAAI,SAAS,GAAG,CAAC,CAAC;IAClB,MAAM,QAAQ,GAAoB,EAAE,CAAC;IACrC,MAAM,KAAK,GAAG,CAAC,GAAG,OAAO,CAAC,CAAC;IAE3B,OAAO,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACxB,IAAI,SAAS,IAAI,SAAS,EAAE,CAAC;YAC3B,QAAQ,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,CAAC;YACxB,MAAM;QACR,CAAC;QACD,MAAM,SAAS,GAAG,KAAK,CAAC,KAAK,EAAG,CAAC;QACjC,MAAM,IAAI,GAAG,SAAS,CAAC,IAAI,IAAI,KAAK,CAAC,IAAK,CAAC;QAC3C,IAAI,CAAC,cAAc,EAAE,CAAC;YACpB,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;gBAC1B,MAAM,SAAS,GAAG,MAAM,kBAAkB,CAAC,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,OAAO,EAAE,aAAa,CAAC,CAAC;gBACrF,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,SAAS;oBAAE,UAAU,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;YACnE,CAAC;YACD,IAAI,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,CAAC;gBAClC,kBAAkB,IAAI,CAAC,CAAC;gBACxB,SAAS;YACX,CAAC;QACH,CAAC;QACD,MAAM,MAAM,GAAG,MAAM,WAAW,CAAC,EAAE,IAAI,EAAE,YAAY,EAAE,SAAS,CAAC,MAAM,EAAE,WAAW,EAAE,KAAK,CAAC,WAAW,EAAE,CAAC,CAAC;QAC3G,SAAS,IAAI,CAAC,CAAC;QACf,iBAAiB,CAAC,GAAG,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC,iBAAiB,CAAC,GAAG,CAAC,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;QAChG,QAAQ,CAAC,IAAI,CAAC;YACZ,IAAI,EAAE,gBAAgB;YACtB,IAAI;YACJ,YAAY,EAAE,SAAS,CAAC,MAAM;YAC9B,aAAa,EAAE,SAAS,CAAC,aAAa;YACtC,GAAG,CAAC,SAAS,CAAC,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,SAAS,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAChF,GAAG,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,SAAS,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAClE,WAAW,EAAE;gBACX,OAAO,EAAE,MAAM,CAAC,OAAO;gBACvB,WAAW,EAAE,MAAM,CAAC,WAAW;gBAC/B,OAAO,EAAE,MAAM,CAAC,OAAO;aACxB;SACF,CAAC,CAAC;QACH,OAAO,CAAC,IAAI,CAAC,eAAe,IAAI,IAAI,SAAS,CAAC,MAAM,OAAO,MAAM,CAAC,OAAO,IAAI,MAAM,CAAC,WAAW,cAAc,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,MAAM,GAAG,CAAC,CAAC;QACrJ,MAAM,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC;IAChE,CAAC;IAED,IAAI,kBAAkB,GAAG,CAAC,EAAE,CAAC;QAC3B,aAAa,CAAC,GAAG,CAAC,GAAG,kBAAkB,0GAA0G,CAAC,CAAC;IACrJ,CAAC;IAED,IAAI,aAAa,GAAG,CAAC,EAAE,CAAC;QACtB,QAAQ,CAAC,IAAI,CAAC;YACZ,IAAI,EAAE,eAAe;YACrB,KAAK,EAAE,aAAa;YACpB,OAAO,EAAE,CAAC,GAAG,YAAY,CAAC,OAAO,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,GAAG,MAAM,KAAK,KAAK,EAAE,CAAC;SACrF,CAAC,CAAC;IACL,CAAC;IAED,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACxB,aAAa,CAAC,GAAG,CAAC,GAAG,QAAQ,CAAC,MAAM,8CAA8C,SAAS,0CAA0C,QAAQ,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAC/L,CAAC;IACD,aAAa,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;IAE9B,MAAM,kBAAkB,GAAG,iBAAiB,CAAC,IAAI,GAAG,CAAC;QACnD,CAAC,CAAC,CAAC,GAAG,iBAAiB,CAAC,OAAO,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,WAAW,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,GAAG,WAAW,KAAK,KAAK,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;QACvG,CAAC,CAAC,8BAA8B,CAAC;IAEnC,OAAO,cAAc,CAAC;QACpB,eAAe,EAAE,UAAU,SAAS,SAAS,SAAS,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,SAAS,cAAc,CAAC,MAAM,kBAAkB,cAAc,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,KAAK,aAAa,YAAY,kBAAkB,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,kBAAkB,iBAAiB,CAAC,CAAC,CAAC,EAAE,oBAAoB,kBAAkB,EAAE;QACzS,QAAQ;QACR,OAAO;QACP,WAAW,EAAE,CAAC,GAAG,aAAa,CAAC;QAC/B,MAAM,EAAE,KAAK;KACd,CAAC,CAAC;AACL,CAAC"}
import { Envelope } from './envelope.js';
export declare function ledger_lookup(input: {
repo: string;
issue_number: number;
}): Promise<Envelope>;
export declare function ledger_record(input: {
repo: string;
issue_number: number;
verdict?: string;
disposition?: string;
quality_score?: number;
notes?: string;
source?: string;
}): Promise<Envelope>;
export declare function ledger_list(input?: {
repo?: string;
limit?: number;
}): Promise<Envelope>;
import { getLedgerEntry, listLedgerEntries, upsertLedgerEntry } from '../lib/ledger.js';
import { createEnvelope } from './envelope.js';
const LEDGER_CAVEAT = 'ledger entries are local and best-effort; they reflect prior runs on this machine, not a live check of current upstream state.';
export async function ledger_lookup(input) {
const entry = await getLedgerEntry(input.repo, input.issue_number);
return createEnvelope({
verdict_summary: entry
? `found a prior ledger entry for ${input.repo}#${input.issue_number}, last updated ${entry.updated_at}.`
: `no prior ledger entry found for ${input.repo}#${input.issue_number}.`,
evidence: entry ? [{ ...entry }] : [],
checked: [`looked up ledger entry for ${input.repo}#${input.issue_number}`],
not_checked: [LEDGER_CAVEAT]
});
}
export async function ledger_record(input) {
const entry = await upsertLedgerEntry(input);
return createEnvelope({
verdict_summary: `recorded ledger entry for ${input.repo}#${input.issue_number}.`,
evidence: [{ ...entry }],
checked: [`upserted ledger entry for ${input.repo}#${input.issue_number}`],
not_checked: [LEDGER_CAVEAT]
});
}
export async function ledger_list(input = {}) {
const entries = await listLedgerEntries(input);
return createEnvelope({
verdict_summary: `found ${entries.length} ledger ${entries.length === 1 ? 'entry' : 'entries'}${input.repo ? ` for ${input.repo}` : ''}.`,
evidence: entries.map((entry) => ({ ...entry })),
checked: [input.repo ? `listed ledger entries for ${input.repo}` : 'listed all ledger entries'],
not_checked: [LEDGER_CAVEAT]
});
}
//# sourceMappingURL=ledger.js.map
{"version":3,"file":"ledger.js","sourceRoot":"","sources":["../../src/core/ledger.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AACxF,OAAO,EAAE,cAAc,EAAY,MAAM,eAAe,CAAC;AAEzD,MAAM,aAAa,GAAG,gIAAgI,CAAC;AAEvJ,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,KAA6C;IAC/E,MAAM,KAAK,GAAG,MAAM,cAAc,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,YAAY,CAAC,CAAC;IACnE,OAAO,cAAc,CAAC;QACpB,eAAe,EAAE,KAAK;YACpB,CAAC,CAAC,kCAAkC,KAAK,CAAC,IAAI,IAAI,KAAK,CAAC,YAAY,kBAAkB,KAAK,CAAC,UAAU,GAAG;YACzG,CAAC,CAAC,mCAAmC,KAAK,CAAC,IAAI,IAAI,KAAK,CAAC,YAAY,GAAG;QAC1E,QAAQ,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE;QACrC,OAAO,EAAE,CAAC,8BAA8B,KAAK,CAAC,IAAI,IAAI,KAAK,CAAC,YAAY,EAAE,CAAC;QAC3E,WAAW,EAAE,CAAC,aAAa,CAAC;KAC7B,CAAC,CAAC;AACL,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,KAQnC;IACC,MAAM,KAAK,GAAG,MAAM,iBAAiB,CAAC,KAAK,CAAC,CAAC;IAC7C,OAAO,cAAc,CAAC;QACpB,eAAe,EAAE,6BAA6B,KAAK,CAAC,IAAI,IAAI,KAAK,CAAC,YAAY,GAAG;QACjF,QAAQ,EAAE,CAAC,EAAE,GAAG,KAAK,EAAE,CAAC;QACxB,OAAO,EAAE,CAAC,6BAA6B,KAAK,CAAC,IAAI,IAAI,KAAK,CAAC,YAAY,EAAE,CAAC;QAC1E,WAAW,EAAE,CAAC,aAAa,CAAC;KAC7B,CAAC,CAAC;AACL,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,QAA2C,EAAE;IAC7E,MAAM,OAAO,GAAG,MAAM,iBAAiB,CAAC,KAAK,CAAC,CAAC;IAC/C,OAAO,cAAc,CAAC;QACpB,eAAe,EAAE,SAAS,OAAO,CAAC,MAAM,WAAW,OAAO,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,GAAG;QACzI,QAAQ,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,KAAK,EAAE,CAAC,CAAC;QAChD,OAAO,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,6BAA6B,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,2BAA2B,CAAC;QAC/F,WAAW,EAAE,CAAC,aAAa,CAAC;KAC7B,CAAC,CAAC;AACL,CAAC"}
import { Envelope } from './envelope.js';
import { SkillProfile } from './skill-fit.js';
type Input = {
org: string;
label?: string;
keywords?: string[];
since?: string;
limit?: number;
max_repos?: number;
land_hints?: boolean;
skill_profile?: SkillProfile | string;
};
export declare function org_scan(input: Input): Promise<Envelope>;
export {};
import { githubJson } from '../lib/github.js';
import { createEnvelope, GitworthyError } from './envelope.js';
import { scan } from './scan.js';
import { resolveSkillProfile } from './skill-fit.js';
const MAX_REPO_LIST_PAGES = 2;
const DEFAULT_MAX_REPOS = 8;
const MAX_MAX_REPOS = 20;
const DEFAULT_LIMIT = 25;
const MIN_PER_REPO_LIMIT = 5;
const CONCURRENCY = 2;
const ORG_SCAN_LIMIT = 'org_scan ranks candidates across multiple repositories by tracker quality only; it does not replace per-repo contrib_policy, duplicate, or in-flight checks before opening a PR.';
async function listOrgRepos(org) {
const not_checked = [];
const attempts = [
{ base: `/orgs/${org}/repos`, label: 'org' },
{ base: `/users/${org}/repos`, label: 'user' }
];
let lastError;
for (const attempt of attempts) {
try {
const repos = [];
for (let page = 1; page <= MAX_REPO_LIST_PAGES; page += 1) {
const query = new URLSearchParams({ type: 'public', sort: 'updated', per_page: '100', page: String(page) });
const pageRepos = await githubJson(`${attempt.base}?${query.toString()}`);
repos.push(...pageRepos);
if (pageRepos.length < 100)
break;
}
return {
repos,
checked: [`listed public repositories for ${org} via ${attempt.label} endpoint (${repos.length} found, up to ${MAX_REPO_LIST_PAGES} page(s))`],
not_checked
};
}
catch (error) {
lastError = error;
if (error instanceof GitworthyError && error.status === 404 && attempt.label === 'org') {
not_checked.push(`org repos endpoint returned 404 for ${org}; retried as a user account.`);
continue;
}
throw error;
}
}
throw lastError instanceof Error
? lastError
: new GitworthyError({
code: 'org_scan_list_failed',
message: `Could not list public repositories for ${org}.`,
not_checked: [`repository listing failed for ${org}.`]
});
}
function rankRepos(repos) {
return repos
.filter((repo) => !repo.archived && !repo.fork)
.sort((left, right) => {
const starDiff = (right.stargazers_count ?? 0) - (left.stargazers_count ?? 0);
if (starDiff !== 0)
return starDiff;
const leftDate = Date.parse(left.pushed_at ?? left.updated_at ?? '') || 0;
const rightDate = Date.parse(right.pushed_at ?? right.updated_at ?? '') || 0;
return rightDate - leftDate;
});
}
async function mapWithConcurrency(items, concurrency, fn) {
const results = new Array(items.length);
let cursor = 0;
async function worker() {
while (cursor < items.length) {
const index = cursor;
cursor += 1;
results[index] = await fn(items[index]);
}
}
const workerCount = Math.max(1, Math.min(concurrency, items.length));
await Promise.all(Array.from({ length: workerCount }, () => worker()));
return results;
}
async function scanRepo(repoFullName, input, perRepoLimit) {
try {
const result = await scan({
repo: repoFullName,
label: input.label,
keywords: input.keywords,
since: input.since,
limit: perRepoLimit,
land_hints: input.land_hints,
skill_profile: input.skill_profile
});
const candidates = result.evidence
.filter((item) => !('kind' in item && item.kind === 'widen_hint'))
.map((item) => ({ ...item, repo: repoFullName }));
return { repo: repoFullName, candidates, checked: result.checked, not_checked: result.not_checked, failed: false };
}
catch (error) {
const message = error instanceof Error ? error.message : String(error);
return { repo: repoFullName, candidates: [], checked: [], not_checked: [], failed: true, error: message };
}
}
export async function org_scan(input) {
const limit = Math.min(Math.max(input.limit ?? DEFAULT_LIMIT, 1), 100);
const maxRepos = Math.min(Math.max(input.max_repos ?? DEFAULT_MAX_REPOS, 1), MAX_MAX_REPOS);
const perRepoLimit = Math.max(MIN_PER_REPO_LIMIT, input.limit ?? DEFAULT_LIMIT);
const { repos, checked: listChecked, not_checked: listNotChecked } = await listOrgRepos(input.org);
const ranked = rankRepos(repos);
const selected = ranked.slice(0, maxRepos);
const outcomes = await mapWithConcurrency(selected, CONCURRENCY, (repo) => scanRepo(repo.full_name, input, perRepoLimit));
const profile = resolveSkillProfile(input.skill_profile);
const candidates = outcomes
.flatMap((outcome) => outcome.candidates)
.sort((left, right) => Number(right.quality_score ?? 0) - Number(left.quality_score ?? 0) ||
(profile ? Number(right.fit_score ?? 0) - Number(left.fit_score ?? 0) : 0))
.slice(0, limit);
const scannedNames = outcomes.filter((outcome) => !outcome.failed).map((outcome) => outcome.repo);
const failedOutcomes = outcomes.filter((outcome) => outcome.failed);
const aggregatedChecked = new Set();
const aggregatedNotChecked = new Set();
for (const outcome of outcomes) {
outcome.checked.forEach((item) => aggregatedChecked.add(item));
outcome.not_checked.forEach((item) => aggregatedNotChecked.add(item));
}
const checked = [
...listChecked,
'excluded archived and forked repositories',
`ranked ${ranked.length} eligible repositor${ranked.length === 1 ? 'y' : 'ies'} by stargazers_count then recent push activity`,
`selected top ${selected.length} repositor${selected.length === 1 ? 'y' : 'ies'} (max_repos=${maxRepos})`,
scannedNames.length > 0 ? `scanned: ${scannedNames.join(', ')}` : 'no repositories were scanned',
...aggregatedChecked
];
const not_checked = [
...listNotChecked,
ORG_SCAN_LIMIT,
...(failedOutcomes.length > 0
? [`scan failed for ${failedOutcomes.length} repositor${failedOutcomes.length === 1 ? 'y' : 'ies'}: ${failedOutcomes.map((outcome) => `${outcome.repo} (${outcome.error})`).join('; ')}`]
: []),
...aggregatedNotChecked
];
return createEnvelope({
verdict_summary: `found ${candidates.length} candidate${candidates.length === 1 ? '' : 's'} across ${scannedNames.length} repo${scannedNames.length === 1 ? '' : 's'} in ${input.org}; org-level scan does not vet them.`,
evidence: candidates,
checked,
not_checked,
cached: false
});
}
//# sourceMappingURL=org-scan.js.map
{"version":3,"file":"org-scan.js","sourceRoot":"","sources":["../../src/core/org-scan.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,cAAc,EAAY,cAAc,EAAE,MAAM,eAAe,CAAC;AACzE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,mBAAmB,EAAgB,MAAM,gBAAgB,CAAC;AA+BnE,MAAM,mBAAmB,GAAG,CAAC,CAAC;AAC9B,MAAM,iBAAiB,GAAG,CAAC,CAAC;AAC5B,MAAM,aAAa,GAAG,EAAE,CAAC;AACzB,MAAM,aAAa,GAAG,EAAE,CAAC;AACzB,MAAM,kBAAkB,GAAG,CAAC,CAAC;AAC7B,MAAM,WAAW,GAAG,CAAC,CAAC;AACtB,MAAM,cAAc,GAAG,kLAAkL,CAAC;AAE1M,KAAK,UAAU,YAAY,CAAC,GAAW;IACrC,MAAM,WAAW,GAAa,EAAE,CAAC;IACjC,MAAM,QAAQ,GAA2C;QACvD,EAAE,IAAI,EAAE,SAAS,GAAG,QAAQ,EAAE,KAAK,EAAE,KAAK,EAAE;QAC5C,EAAE,IAAI,EAAE,UAAU,GAAG,QAAQ,EAAE,KAAK,EAAE,MAAM,EAAE;KAC/C,CAAC;IACF,IAAI,SAAkB,CAAC;IACvB,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;QAC/B,IAAI,CAAC;YACH,MAAM,KAAK,GAAwB,EAAE,CAAC;YACtC,KAAK,IAAI,IAAI,GAAG,CAAC,EAAE,IAAI,IAAI,mBAAmB,EAAE,IAAI,IAAI,CAAC,EAAE,CAAC;gBAC1D,MAAM,KAAK,GAAG,IAAI,eAAe,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,SAAS,EAAE,QAAQ,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;gBAC5G,MAAM,SAAS,GAAG,MAAM,UAAU,CAAsB,GAAG,OAAO,CAAC,IAAI,IAAI,KAAK,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;gBAC/F,KAAK,CAAC,IAAI,CAAC,GAAG,SAAS,CAAC,CAAC;gBACzB,IAAI,SAAS,CAAC,MAAM,GAAG,GAAG;oBAAE,MAAM;YACpC,CAAC;YACD,OAAO;gBACL,KAAK;gBACL,OAAO,EAAE,CAAC,kCAAkC,GAAG,QAAQ,OAAO,CAAC,KAAK,cAAc,KAAK,CAAC,MAAM,iBAAiB,mBAAmB,WAAW,CAAC;gBAC9I,WAAW;aACZ,CAAC;QACJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,SAAS,GAAG,KAAK,CAAC;YAClB,IAAI,KAAK,YAAY,cAAc,IAAI,KAAK,CAAC,MAAM,KAAK,GAAG,IAAI,OAAO,CAAC,KAAK,KAAK,KAAK,EAAE,CAAC;gBACvF,WAAW,CAAC,IAAI,CAAC,uCAAuC,GAAG,8BAA8B,CAAC,CAAC;gBAC3F,SAAS;YACX,CAAC;YACD,MAAM,KAAK,CAAC;QACd,CAAC;IACH,CAAC;IACD,MAAM,SAAS,YAAY,KAAK;QAC9B,CAAC,CAAC,SAAS;QACX,CAAC,CAAC,IAAI,cAAc,CAAC;YACnB,IAAI,EAAE,sBAAsB;YAC5B,OAAO,EAAE,0CAA0C,GAAG,GAAG;YACzD,WAAW,EAAE,CAAC,iCAAiC,GAAG,GAAG,CAAC;SACvD,CAAC,CAAC;AACP,CAAC;AAED,SAAS,SAAS,CAAC,KAA0B;IAC3C,OAAO,KAAK;SACT,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,QAAQ,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;SAC9C,IAAI,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE;QACpB,MAAM,QAAQ,GAAG,CAAC,KAAK,CAAC,gBAAgB,IAAI,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,gBAAgB,IAAI,CAAC,CAAC,CAAC;QAC9E,IAAI,QAAQ,KAAK,CAAC;YAAE,OAAO,QAAQ,CAAC;QACpC,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,UAAU,IAAI,EAAE,CAAC,IAAI,CAAC,CAAC;QAC1E,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,SAAS,IAAI,KAAK,CAAC,UAAU,IAAI,EAAE,CAAC,IAAI,CAAC,CAAC;QAC7E,OAAO,SAAS,GAAG,QAAQ,CAAC;IAC9B,CAAC,CAAC,CAAC;AACP,CAAC;AAED,KAAK,UAAU,kBAAkB,CAAO,KAAU,EAAE,WAAmB,EAAE,EAA2B;IAClG,MAAM,OAAO,GAAQ,IAAI,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;IAC7C,IAAI,MAAM,GAAG,CAAC,CAAC;IACf,KAAK,UAAU,MAAM;QACnB,OAAO,MAAM,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC;YAC7B,MAAM,KAAK,GAAG,MAAM,CAAC;YACrB,MAAM,IAAI,CAAC,CAAC;YACZ,OAAO,CAAC,KAAK,CAAC,GAAG,MAAM,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC;QAC1C,CAAC;IACH,CAAC;IACD,MAAM,WAAW,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,WAAW,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC;IACrE,MAAM,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,WAAW,EAAE,EAAE,GAAG,EAAE,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;IACvE,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,KAAK,UAAU,QAAQ,CAAC,YAAoB,EAAE,KAAY,EAAE,YAAoB;IAC9E,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC;YACxB,IAAI,EAAE,YAAY;YAClB,KAAK,EAAE,KAAK,CAAC,KAAK;YAClB,QAAQ,EAAE,KAAK,CAAC,QAAQ;YACxB,KAAK,EAAE,KAAK,CAAC,KAAK;YAClB,KAAK,EAAE,YAAY;YACnB,UAAU,EAAE,KAAK,CAAC,UAAU;YAC5B,aAAa,EAAE,KAAK,CAAC,aAAa;SACnC,CAAC,CAAC;QACH,MAAM,UAAU,GAAG,MAAM,CAAC,QAAQ;aAC/B,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,IAAI,IAAI,IAAI,IAAI,CAAC,IAAI,KAAK,YAAY,CAAC,CAAC;aACjE,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,IAAI,EAAE,IAAI,EAAE,YAAY,EAAE,CAAC,CAAC,CAAC;QACpD,OAAO,EAAE,IAAI,EAAE,YAAY,EAAE,UAAU,EAAE,OAAO,EAAE,MAAM,CAAC,OAAO,EAAE,WAAW,EAAE,MAAM,CAAC,WAAW,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC;IACrH,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QACvE,OAAO,EAAE,IAAI,EAAE,YAAY,EAAE,UAAU,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,WAAW,EAAE,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC;IAC5G,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,QAAQ,CAAC,KAAY;IACzC,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,IAAI,aAAa,EAAE,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;IACvE,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,SAAS,IAAI,iBAAiB,EAAE,CAAC,CAAC,EAAE,aAAa,CAAC,CAAC;IAC5F,MAAM,YAAY,GAAG,IAAI,CAAC,GAAG,CAAC,kBAAkB,EAAE,KAAK,CAAC,KAAK,IAAI,aAAa,CAAC,CAAC;IAChF,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,cAAc,EAAE,GAAG,MAAM,YAAY,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IACnG,MAAM,MAAM,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC;IAChC,MAAM,QAAQ,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC;IAC3C,MAAM,QAAQ,GAAG,MAAM,kBAAkB,CAAC,QAAQ,EAAE,WAAW,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,SAAS,EAAE,KAAK,EAAE,YAAY,CAAC,CAAC,CAAC;IAE1H,MAAM,OAAO,GAAG,mBAAmB,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC;IACzD,MAAM,UAAU,GAAG,QAAQ;SACxB,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,UAAU,CAAC;SACxC,IAAI,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CACpB,MAAM,CAAC,KAAK,CAAC,aAAa,IAAI,CAAC,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,aAAa,IAAI,CAAC,CAAC;QAClE,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,SAAS,IAAI,CAAC,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,SAAS,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAC3E;SACA,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;IAEnB,MAAM,YAAY,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IAClG,MAAM,cAAc,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;IAEpE,MAAM,iBAAiB,GAAG,IAAI,GAAG,EAAU,CAAC;IAC5C,MAAM,oBAAoB,GAAG,IAAI,GAAG,EAAU,CAAC;IAC/C,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;QAC/B,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,iBAAiB,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC;QAC/D,OAAO,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,oBAAoB,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC;IACxE,CAAC;IAED,MAAM,OAAO,GAAG;QACd,GAAG,WAAW;QACd,2CAA2C;QAC3C,UAAU,MAAM,CAAC,MAAM,sBAAsB,MAAM,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,gDAAgD;QAC9H,gBAAgB,QAAQ,CAAC,MAAM,aAAa,QAAQ,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,eAAe,QAAQ,GAAG;QACzG,YAAY,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,YAAY,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,8BAA8B;QAChG,GAAG,iBAAiB;KACrB,CAAC;IAEF,MAAM,WAAW,GAAG;QAClB,GAAG,cAAc;QACjB,cAAc;QACd,GAAG,CAAC,cAAc,CAAC,MAAM,GAAG,CAAC;YAC3B,CAAC,CAAC,CAAC,mBAAmB,cAAc,CAAC,MAAM,aAAa,cAAc,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,KAAK,cAAc,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,GAAG,OAAO,CAAC,IAAI,KAAK,OAAO,CAAC,KAAK,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;YACzL,CAAC,CAAC,EAAE,CAAC;QACP,GAAG,oBAAoB;KACxB,CAAC;IAEF,OAAO,cAAc,CAAC;QACpB,eAAe,EAAE,SAAS,UAAU,CAAC,MAAM,aAAa,UAAU,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,WAAW,YAAY,CAAC,MAAM,QAAQ,YAAY,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,OAAO,KAAK,CAAC,GAAG,qCAAqC;QACzN,QAAQ,EAAE,UAAU;QACpB,OAAO;QACP,WAAW;QACX,MAAM,EAAE,KAAK;KACd,CAAC,CAAC;AACL,CAAC"}
export type ProbeTemplateId = 'changelog' | 'readme' | 'package-exports' | 'dist-index' | 'src-index';
export type ProbeTemplate = {
file_glob: string;
contains?: string;
};
export declare function resolveProbeTemplate(id: string): ProbeTemplate | null;
export declare function listProbeTemplates(): Array<{
id: ProbeTemplateId;
file_glob: string;
contains?: string;
description: string;
}>;
const TEMPLATES = {
changelog: {
id: 'changelog',
file_glob: '**/CHANGELOG*',
description: 'Matches any CHANGELOG file to check whether a fix was mentioned in release notes.'
},
readme: {
id: 'readme',
file_glob: '**/README*',
description: 'Matches any README file for documentation-level confirmation of a feature or fix.'
},
'package-exports': {
id: 'package-exports',
file_glob: '**/package.json',
contains: '"exports"',
description: 'Checks package.json for an "exports" field, useful for confirming a new entry point shipped.'
},
'dist-index': {
id: 'dist-index',
file_glob: '**/dist/index.*',
description: 'Matches the built dist/index entry file to inspect compiled output.'
},
'src-index': {
id: 'src-index',
file_glob: '**/src/index.*',
description: 'Matches the src/index entry file to inspect source output.'
}
};
export function resolveProbeTemplate(id) {
const template = TEMPLATES[id];
if (!template)
return null;
return { file_glob: template.file_glob, ...(template.contains ? { contains: template.contains } : {}) };
}
export function listProbeTemplates() {
return Object.values(TEMPLATES).map(({ id, file_glob, contains, description }) => ({
id,
file_glob,
...(contains ? { contains } : {}),
description
}));
}
//# sourceMappingURL=probe-templates.js.map
{"version":3,"file":"probe-templates.js","sourceRoot":"","sources":["../../src/core/probe-templates.ts"],"names":[],"mappings":"AAKA,MAAM,SAAS,GAAqD;IAClE,SAAS,EAAE;QACT,EAAE,EAAE,WAAW;QACf,SAAS,EAAE,eAAe;QAC1B,WAAW,EAAE,mFAAmF;KACjG;IACD,MAAM,EAAE;QACN,EAAE,EAAE,QAAQ;QACZ,SAAS,EAAE,YAAY;QACvB,WAAW,EAAE,mFAAmF;KACjG;IACD,iBAAiB,EAAE;QACjB,EAAE,EAAE,iBAAiB;QACrB,SAAS,EAAE,iBAAiB;QAC5B,QAAQ,EAAE,WAAW;QACrB,WAAW,EAAE,8FAA8F;KAC5G;IACD,YAAY,EAAE;QACZ,EAAE,EAAE,YAAY;QAChB,SAAS,EAAE,iBAAiB;QAC5B,WAAW,EAAE,qEAAqE;KACnF;IACD,WAAW,EAAE;QACX,EAAE,EAAE,WAAW;QACf,SAAS,EAAE,gBAAgB;QAC3B,WAAW,EAAE,4DAA4D;KAC1E;CACF,CAAC;AAEF,MAAM,UAAU,oBAAoB,CAAC,EAAU;IAC7C,MAAM,QAAQ,GAAG,SAAS,CAAC,EAAqB,CAAC,CAAC;IAClD,IAAI,CAAC,QAAQ;QAAE,OAAO,IAAI,CAAC;IAC3B,OAAO,EAAE,SAAS,EAAE,QAAQ,CAAC,SAAS,EAAE,GAAG,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,QAAQ,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC;AAC1G,CAAC;AAED,MAAM,UAAU,kBAAkB;IAChC,OAAO,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,SAAS,EAAE,QAAQ,EAAE,WAAW,EAAE,EAAE,EAAE,CAAC,CAAC;QACjF,EAAE;QACF,SAAS;QACT,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACjC,WAAW;KACZ,CAAC,CAAC,CAAC;AACN,CAAC"}
import { Envelope } from './envelope.js';
type Input = {
repo: string;
issue_number?: number;
label?: string;
keywords?: string[];
limit?: number;
min_score?: number;
};
export declare function related_cluster(input: Input): Promise<Envelope>;
export {};
import { githubJson } from '../lib/github.js';
import { createEnvelope } from './envelope.js';
import { jaccard, sharedErrorPhrase, tokens } from './text-sim.js';
const RELATED_LIMIT = 'lexical similarity only (token overlap + shared error phrases); no embeddings are used, so semantically related issues phrased with different vocabulary will be missed. Clustering uses at most one page of open issues (100) before applying limit, so siblings outside that window are not considered.';
const DEFAULT_LIMIT = 40;
const MAX_LIMIT = 100;
const DEFAULT_MIN_SCORE = 0.35;
const MEMBER_DISPLAY_CAP = 15;
const TEXT_SLICE = 600;
function matchesKeywords(issue, keywords) {
if (!keywords || keywords.length === 0)
return true;
const haystack = `${issue.title}\n${issue.body ?? ''}`.toLowerCase();
return keywords.some((keyword) => haystack.includes(keyword.toLowerCase()));
}
function matchesLabel(issue, label) {
if (!label)
return true;
return issue.labels.some((item) => item.name.toLowerCase() === label.toLowerCase());
}
function toMember(issue) {
return { number: issue.number, title: issue.title, url: issue.html_url, state: issue.state };
}
class UnionFind {
parent;
constructor(size) {
this.parent = Array.from({ length: size }, (_, index) => index);
}
find(index) {
while (this.parent[index] !== index) {
this.parent[index] = this.parent[this.parent[index]];
index = this.parent[index];
}
return index;
}
union(a, b) {
const rootA = this.find(a);
const rootB = this.find(b);
if (rootA !== rootB)
this.parent[rootB] = rootA;
}
}
function buildComponents(nodes, minScore) {
const texts = nodes.map((issue) => `${issue.title} ${issue.body ?? ''}`.slice(0, TEXT_SLICE));
const tokenSets = texts.map((text) => tokens(text));
const unionFind = new UnionFind(nodes.length);
const edges = [];
for (let i = 0; i < nodes.length; i += 1) {
for (let j = i + 1; j < nodes.length; j += 1) {
const jaccardScore = jaccard(tokenSets[i], tokenSets[j]);
const phraseMatch = sharedErrorPhrase(texts[i], texts[j]);
if (jaccardScore >= minScore || phraseMatch) {
const score = Math.max(jaccardScore, phraseMatch ? 0.5 : 0);
edges.push({ a: i, b: j, score });
unionFind.union(i, j);
}
}
}
const rootScore = new Map();
for (const edge of edges) {
const root = unionFind.find(edge.a);
rootScore.set(root, Math.max(rootScore.get(root) ?? 0, edge.score));
}
const byRoot = new Map();
for (let i = 0; i < nodes.length; i += 1) {
const root = unionFind.find(i);
const group = byRoot.get(root);
if (group)
group.push(nodes[i]);
else
byRoot.set(root, [nodes[i]]);
}
return Array.from(byRoot.entries()).map(([root, groupNodes]) => ({
nodes: groupNodes,
score: Number((rootScore.get(root) ?? 0).toFixed(3))
}));
}
export async function related_cluster(input) {
const limit = Math.min(Math.max(input.limit ?? DEFAULT_LIMIT, 1), MAX_LIMIT);
const minScore = input.min_score ?? DEFAULT_MIN_SCORE;
const query = new URLSearchParams({ state: 'open', per_page: '100' });
if (input.label)
query.set('labels', input.label);
const listed = await githubJson(`/repos/${input.repo}/issues?${query.toString()}`);
const candidates = listed
.filter((issue) => !('pull_request' in issue))
.filter((issue) => matchesLabel(issue, input.label))
.filter((issue) => matchesKeywords(issue, input.keywords))
.slice(0, limit);
const byNumber = new Map();
for (const issue of candidates)
byNumber.set(issue.number, issue);
const checked = [
`fetched open issues for ${input.repo}`,
'excluded pull requests',
input.label ? `filtered by label: ${input.label}` : 'no label filter requested',
input.keywords?.length ? `filtered titles and bodies by keywords: ${input.keywords.join(', ')}` : 'no keyword filter requested',
`considered up to ${limit} open candidate issue(s)`
];
const not_checked = [RELATED_LIMIT];
let seed;
if (input.issue_number !== undefined) {
try {
seed = await githubJson(`/repos/${input.repo}/issues/${input.issue_number}`);
if (!byNumber.has(seed.number))
byNumber.set(seed.number, seed);
checked.push(`fetched seed issue ${input.repo}#${input.issue_number} (included even if closed)`);
}
catch {
not_checked.push(`seed issue ${input.repo}#${input.issue_number} was not checked because the fetch failed.`);
}
}
const nodes = Array.from(byNumber.values());
const components = buildComponents(nodes, minScore)
.sort((a, b) => b.nodes.length - a.nodes.length || b.score - a.score)
.map((component, index) => ({ ...component, id: index + 1 }));
checked.push('tokenized title+body and built edges by Jaccard token overlap and shared error phrases', 'grouped issues into connected components (clusters)');
const clusterEvidence = components
.filter((component) => component.nodes.length >= 2)
.map((component) => ({
kind: 'related_cluster',
id: component.id,
size: component.nodes.length,
score: component.score,
members: [...component.nodes]
.sort((a, b) => a.number - b.number)
.slice(0, MEMBER_DISPLAY_CAP)
.map(toMember)
}));
const evidence = [...clusterEvidence];
if (seed) {
const seedComponent = components.find((component) => component.nodes.some((issue) => issue.number === seed.number));
const related = seedComponent
? [...seedComponent.nodes]
.filter((issue) => issue.number !== seed.number)
.sort((a, b) => a.number - b.number)
.slice(0, MEMBER_DISPLAY_CAP)
.map(toMember)
: [];
evidence.push({
kind: 'seed_cluster',
issue_number: seed.number,
cluster_id: seedComponent?.id ?? 0,
related
});
checked.push(related.length > 0
? `found ${related.length} issue(s) related to seed ${input.repo}#${seed.number}`
: `seed ${input.repo}#${seed.number} has no related issues above min_score ${minScore}`);
}
return createEnvelope({
verdict_summary: `found ${clusterEvidence.length} related cluster${clusterEvidence.length === 1 ? '' : 's'} among ${nodes.length} issue${nodes.length === 1 ? '' : 's'}.`,
evidence,
signals: [],
checked,
not_checked,
cached: false
});
}
//# sourceMappingURL=related-cluster.js.map
{"version":3,"file":"related-cluster.js","sourceRoot":"","sources":["../../src/core/related-cluster.ts"],"names":[],"mappings":"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"}
export type SkillProfile = {
languages?: string[];
topics?: string[];
avoid?: string[];
};
export type SkillFitInput = {
profile: SkillProfile;
issue: {
title: string;
body?: string | null;
labels?: string[];
};
repoHints?: {
language?: string | null;
topics?: string[];
description?: string | null;
};
};
export type SkillFitResult = {
score: number;
reasons: string[];
matched: string[];
avoided: string[];
};
/** Deterministic 0-1 fit score for how well an issue/repo matches a hunter's declared skill profile. */
export declare function scoreSkillFit(input: SkillFitInput): SkillFitResult;
/**
* Parses a skill profile from either a JSON object string or a compact
* `key=value;key=value` string with comma-separated lists, e.g.
* `languages=ts,go;topics=mcp,cli;avoid=swift`.
*/
export declare function parseSkillProfile(raw: string | undefined): SkillProfile | null;
/** Accepts either a pre-parsed profile object or a raw string (JSON or key=value form). */
export declare function resolveSkillProfile(input: SkillProfile | string | undefined): SkillProfile | null;
const LANGUAGE_HIT_WEIGHT = 0.15;
const LANGUAGE_HIT_CAP = 0.3;
const TOPIC_HIT_WEIGHT = 0.1;
const TOPIC_HIT_CAP = 0.3;
const AVOID_HIT_WEIGHT = 0.25;
const BASE_SCORE = 0.5;
function normalizeTerms(terms) {
if (!terms)
return [];
const out = [];
const seen = new Set();
for (const raw of terms) {
const term = raw.trim().toLowerCase();
if (!term || seen.has(term))
continue;
seen.add(term);
out.push(term);
}
return out;
}
function escapeRegExp(term) {
return term.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
}
/** Word-boundary match for alphanumeric terms; plain substring match otherwise (e.g. "c++"). */
function containsTerm(haystack, term) {
if (!term)
return false;
if (/^[a-z0-9][a-z0-9._-]*$/i.test(term)) {
return new RegExp(`(?:^|[^a-z0-9])${escapeRegExp(term)}(?:$|[^a-z0-9])`, 'i').test(`${haystack} `);
}
return haystack.includes(term);
}
function hitsAny(term, haystacks) {
return haystacks.some((haystack) => containsTerm(haystack, term));
}
/** Deterministic 0-1 fit score for how well an issue/repo matches a hunter's declared skill profile. */
export function scoreSkillFit(input) {
const { profile, issue, repoHints } = input;
const text = `${issue.title}\n${issue.body ?? ''}`.toLowerCase();
const labelHaystacks = (issue.labels ?? []).map((label) => label.toLowerCase());
const repoLanguage = (repoHints?.language ?? '').toLowerCase();
const repoTopicHaystacks = (repoHints?.topics ?? []).map((topic) => topic.toLowerCase());
const repoDescription = (repoHints?.description ?? '').toLowerCase();
const languages = normalizeTerms(profile.languages);
const topics = normalizeTerms(profile.topics);
const avoid = normalizeTerms(profile.avoid);
const reasons = [];
const matched = [];
const avoided = [];
let score = BASE_SCORE;
const languageHaystacks = [text, ...labelHaystacks, repoLanguage];
const languageHits = languages.filter((language) => hitsAny(language, languageHaystacks));
if (languageHits.length > 0) {
matched.push(...languageHits);
const bonus = Math.min(LANGUAGE_HIT_CAP, languageHits.length * LANGUAGE_HIT_WEIGHT);
score += bonus;
reasons.push(`matched language(s) ${languageHits.join(', ')} (+${bonus.toFixed(2)})`);
}
const topicHaystacks = [text, ...labelHaystacks, ...repoTopicHaystacks, repoDescription];
const topicHits = topics.filter((topic) => hitsAny(topic, topicHaystacks));
if (topicHits.length > 0) {
matched.push(...topicHits);
const bonus = Math.min(TOPIC_HIT_CAP, topicHits.length * TOPIC_HIT_WEIGHT);
score += bonus;
reasons.push(`matched topic(s) ${topicHits.join(', ')} (+${bonus.toFixed(2)})`);
}
const avoidHaystacks = [text, ...labelHaystacks, repoLanguage, ...repoTopicHaystacks, repoDescription];
const avoidHits = avoid.filter((term) => hitsAny(term, avoidHaystacks));
if (avoidHits.length > 0) {
avoided.push(...avoidHits);
const penalty = avoidHits.length * AVOID_HIT_WEIGHT;
score = Math.max(0, score - penalty);
reasons.push(`matched avoid term(s) ${avoidHits.join(', ')} (-${penalty.toFixed(2)})`);
}
score = Math.max(0, Math.min(1, score));
if (reasons.length === 0)
reasons.push('no skill profile language, topic, or avoid terms matched; neutral fit');
return { score, reasons, matched, avoided };
}
function toStringArray(value) {
if (!Array.isArray(value))
return undefined;
const items = value.filter((entry) => typeof entry === 'string');
return items.length > 0 ? items : undefined;
}
function normalizeParsedProfile(parsed) {
const profile = {};
const languages = toStringArray(parsed.languages ?? parsed.language);
const topics = toStringArray(parsed.topics ?? parsed.topic);
const avoid = toStringArray(parsed.avoid);
if (languages)
profile.languages = languages;
if (topics)
profile.topics = topics;
if (avoid)
profile.avoid = avoid;
if (!profile.languages && !profile.topics && !profile.avoid)
return null;
return profile;
}
/**
* Parses a skill profile from either a JSON object string or a compact
* `key=value;key=value` string with comma-separated lists, e.g.
* `languages=ts,go;topics=mcp,cli;avoid=swift`.
*/
export function parseSkillProfile(raw) {
if (!raw)
return null;
const trimmed = raw.trim();
if (!trimmed)
return null;
if (trimmed.startsWith('{')) {
try {
const parsed = JSON.parse(trimmed);
if (parsed && typeof parsed === 'object' && !Array.isArray(parsed)) {
return normalizeParsedProfile(parsed);
}
}
catch {
return null;
}
return null;
}
const profile = {};
const segments = trimmed.split(';').map((segment) => segment.trim()).filter(Boolean);
for (const segment of segments) {
const eqIndex = segment.indexOf('=');
if (eqIndex === -1)
continue;
const key = segment.slice(0, eqIndex).trim().toLowerCase();
const list = segment.slice(eqIndex + 1).split(',').map((value) => value.trim()).filter(Boolean);
if (list.length === 0)
continue;
if (key === 'languages' || key === 'language')
profile.languages = list;
else if (key === 'topics' || key === 'topic')
profile.topics = list;
else if (key === 'avoid')
profile.avoid = list;
}
if (!profile.languages && !profile.topics && !profile.avoid)
return null;
return profile;
}
/** Accepts either a pre-parsed profile object or a raw string (JSON or key=value form). */
export function resolveSkillProfile(input) {
if (!input)
return null;
if (typeof input === 'string')
return parseSkillProfile(input);
if (!input.languages?.length && !input.topics?.length && !input.avoid?.length)
return null;
return input;
}
//# sourceMappingURL=skill-fit.js.map
{"version":3,"file":"skill-fit.js","sourceRoot":"","sources":["../../src/core/skill-fit.ts"],"names":[],"mappings":"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"}
export declare function tokens(text: string): Set<string>;
export declare function jaccard(a: Set<string>, b: Set<string>): number;
export declare function sharedErrorPhrase(a: string, b: string): boolean;
const STOP = new Set(['the', 'and', 'for', 'with', 'from', 'that', 'this', 'should', 'would', 'could', 'please', 'issue']);
export function tokens(text) {
return new Set((text.toLowerCase().match(/[a-z][a-z0-9_-]{3,}/g) ?? []).filter((token) => !STOP.has(token)));
}
export function jaccard(a, b) {
const intersection = Array.from(a).filter((item) => b.has(item)).length;
const union = new Set([...a, ...b]).size;
return union === 0 ? 0 : intersection / union;
}
export function sharedErrorPhrase(a, b) {
const quotedPhrases = (text) => Array.from(text.matchAll(/"([^"]{8,})"/g)).map((match) => match[1].toLowerCase());
const lowerA = a.toLowerCase();
const lowerB = b.toLowerCase();
if (quotedPhrases(a).some((phrase) => lowerB.includes(phrase)))
return true;
if (quotedPhrases(b).some((phrase) => lowerA.includes(phrase)))
return true;
return lowerA.includes('npx is not available') && lowerB.includes('npx is not available');
}
//# sourceMappingURL=text-sim.js.map
{"version":3,"file":"text-sim.js","sourceRoot":"","sources":["../../src/core/text-sim.ts"],"names":[],"mappings":"AAAA,MAAM,IAAI,GAAG,IAAI,GAAG,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC,CAAC;AAE3H,MAAM,UAAU,MAAM,CAAC,IAAY;IACjC,OAAO,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,sBAAsB,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AAC/G,CAAC;AAED,MAAM,UAAU,OAAO,CAAC,CAAc,EAAE,CAAc;IACpD,MAAM,YAAY,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC;IACxE,MAAM,KAAK,GAAG,IAAI,GAAG,CAAC,CAAC,GAAG,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IACzC,OAAO,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,YAAY,GAAG,KAAK,CAAC;AAChD,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,CAAS,EAAE,CAAS;IACpD,MAAM,aAAa,GAAG,CAAC,IAAY,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,eAAe,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC;IAC1H,MAAM,MAAM,GAAG,CAAC,CAAC,WAAW,EAAE,CAAC;IAC/B,MAAM,MAAM,GAAG,CAAC,CAAC,WAAW,EAAE,CAAC;IAC/B,IAAI,aAAa,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;QAAE,OAAO,IAAI,CAAC;IAC5E,IAAI,aAAa,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;QAAE,OAAO,IAAI,CAAC;IAC5E,OAAO,MAAM,CAAC,QAAQ,CAAC,sBAAsB,CAAC,IAAI,MAAM,CAAC,QAAQ,CAAC,sBAAsB,CAAC,CAAC;AAC5F,CAAC"}
export type LedgerEntry = {
repo: string;
issue_number: number;
verdict?: string;
disposition?: string;
quality_score?: number;
notes?: string;
source?: string;
recorded_at: string;
updated_at: string;
};
export type LedgerUpsertInput = {
repo: string;
issue_number: number;
verdict?: string;
disposition?: string;
quality_score?: number;
notes?: string;
source?: string;
};
export declare function ledgerRoot(): string;
export declare function ledgerPath(): string;
export declare function readLedger(): Promise<Record<string, LedgerEntry>>;
export declare function upsertLedgerEntry(input: LedgerUpsertInput): Promise<LedgerEntry>;
export declare function getLedgerEntry(repo: string, issue_number: number): Promise<LedgerEntry | null>;
export declare function listLedgerEntries(input?: {
repo?: string;
limit?: number;
}): Promise<LedgerEntry[]>;
export declare function forgetLedgerEntry(repo: string, issue_number: number): Promise<boolean>;
import { mkdir, readFile, rename, writeFile } from 'node:fs/promises';
import { homedir } from 'node:os';
import path from 'node:path';
const LEDGER_FILE = 'entries.json';
const MAX_ENTRIES = 2000;
export function ledgerRoot() {
return process.env.GITWORTHY_LEDGER_DIR || path.join(homedir(), '.gitworthy', 'ledger');
}
export function ledgerPath() {
return path.join(ledgerRoot(), LEDGER_FILE);
}
function ledgerKey(repo, issue_number) {
return `${repo.toLowerCase()}#${issue_number}`;
}
export async function readLedger() {
try {
const raw = await readFile(ledgerPath(), 'utf8');
const parsed = JSON.parse(raw);
return parsed && typeof parsed === 'object' ? parsed : {};
}
catch {
return {};
}
}
async function writeLedger(entries) {
const file = ledgerPath();
await mkdir(path.dirname(file), { recursive: true });
const tmp = `${file}.${process.pid}.${Date.now()}.tmp`;
await writeFile(tmp, JSON.stringify(entries, null, 2));
await rename(tmp, file);
}
function pruneToCapacity(entries) {
const keys = Object.keys(entries);
if (keys.length <= MAX_ENTRIES)
return entries;
const oldestFirst = [...keys].sort((a, b) => entries[a].updated_at.localeCompare(entries[b].updated_at));
const dropped = new Set(oldestFirst.slice(0, keys.length - MAX_ENTRIES));
const kept = {};
for (const key of keys) {
if (!dropped.has(key))
kept[key] = entries[key];
}
return kept;
}
/** Serialize ledger mutations in-process so concurrent worth_check records cannot clobber each other. */
let ledgerWriteChain = Promise.resolve();
function withLedgerLock(run) {
const next = ledgerWriteChain.then(run, run);
ledgerWriteChain = next.then(() => undefined, () => undefined);
return next;
}
export async function upsertLedgerEntry(input) {
return withLedgerLock(async () => {
const entries = await readLedger();
const key = ledgerKey(input.repo, input.issue_number);
const now = new Date().toISOString();
const existing = entries[key];
const entry = {
repo: input.repo.toLowerCase(),
issue_number: input.issue_number,
verdict: input.verdict ?? existing?.verdict,
disposition: input.disposition ?? existing?.disposition,
quality_score: input.quality_score ?? existing?.quality_score,
notes: input.notes ?? existing?.notes,
source: input.source ?? existing?.source,
recorded_at: existing?.recorded_at ?? now,
updated_at: now
};
entries[key] = entry;
await writeLedger(pruneToCapacity(entries));
return entry;
});
}
export async function getLedgerEntry(repo, issue_number) {
const entries = await readLedger();
return entries[ledgerKey(repo, issue_number)] ?? null;
}
export async function listLedgerEntries(input = {}) {
const entries = await readLedger();
let list = Object.values(entries);
if (input.repo) {
const repoLower = input.repo.toLowerCase();
list = list.filter((entry) => entry.repo === repoLower);
}
list = list.sort((a, b) => b.updated_at.localeCompare(a.updated_at));
if (typeof input.limit === 'number')
list = list.slice(0, Math.max(0, input.limit));
return list;
}
export async function forgetLedgerEntry(repo, issue_number) {
return withLedgerLock(async () => {
const entries = await readLedger();
const key = ledgerKey(repo, issue_number);
if (!(key in entries))
return false;
delete entries[key];
await writeLedger(entries);
return true;
});
}
//# sourceMappingURL=ledger.js.map
{"version":3,"file":"ledger.js","sourceRoot":"","sources":["../../src/lib/ledger.ts"],"names":[],"mappings":"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"}
+163
-9

@@ -5,3 +5,3 @@ #!/usr/bin/env node

import { pathToFileURL } from 'node:url';
import { branch_scan, contrib_policy, dupe_cluster, issue_vs_main, linked_work, release_gap, scan, worth_check } from '../core/index.js';
import { branch_scan, contrib_policy, doctor, dupe_cluster, hunt, issue_vs_main, ledger_list, ledger_lookup, ledger_record, linked_work, listProbeTemplates, org_scan, related_cluster, release_gap, scan, worth_check } from '../core/index.js';
import { startMcpServer } from '../mcp/server.js';

@@ -12,10 +12,18 @@ const help = `gitworthy

gitworthy --help
gitworthy check owner/repo#123 [--npm-package name] [--probe-glob glob] [--probe-contains text] [--json]
gitworthy doctor [--json]
gitworthy check owner/repo#123 [--npm-package name] [--probe-glob glob] [--probe-contains text] [--probe-template id] [--json]
gitworthy hunt owner/repo|org [--max-checks 3] [--label ...] [--keywords ...] [--since 90d] [--limit 25] [--max-repos 8] [--skill-profile ...] [--skip-policy-gate] [--no-land-hints] [--json]
gitworthy branches owner/repo keyword[,keyword] [--json] [--force-refresh]
gitworthy issue owner/repo 123 [--json]
gitworthy release owner/repo package-name [--probe-glob glob] [--probe-contains text] [--json]
gitworthy release owner/repo package-name [--probe-glob glob] [--probe-contains text] [--probe-template id] [--json]
gitworthy dupes owner/repo 123 [--json]
gitworthy related owner/repo [123] [--label ...] [--keywords ...] [--limit 40] [--json]
gitworthy linked owner/repo 123 [--json]
gitworthy policy owner/repo [--json]
gitworthy scan owner/repo [--label "good first issue"] [--keywords term,term] [--since 90d] [--limit 25] [--json]
gitworthy scan owner/repo [--label "good first issue"] [--keywords term,term] [--since 90d] [--limit 25] [--skill-profile ...] [--no-land-hints] [--json]
gitworthy org org-or-user [--label ...] [--keywords ...] [--since 90d] [--limit 25] [--max-repos 8] [--skill-profile ...] [--no-land-hints] [--json]
gitworthy probes [--json]
gitworthy ledger list [--repo owner/repo] [--limit 50] [--json]
gitworthy ledger show owner/repo#123 [--json]
gitworthy ledger record owner/repo#123 [--verdict ACT] [--disposition greenfield] [--notes text] [--json]
gitworthy mcp

@@ -59,2 +67,12 @@ `;

}
function scanFilters(values) {
return {
label: stringValue(values.label),
keywords: stringValue(values.keywords)?.split(',').filter(Boolean),
since: stringValue(values.since),
limit: stringValue(values.limit) ? Number(stringValue(values.limit)) : undefined,
land_hints: values['no-land-hints'] === true ? false : undefined,
skill_profile: stringValue(values['skill-profile'])
};
}
export async function runCli(argv = process.argv.slice(2), stdout = (text) => process.stdout.write(text), stderr = (text) => process.stderr.write(text)) {

@@ -73,3 +91,30 @@ if (argv[0] === 'branches' && argv[2]?.startsWith('-')) {

}
const parsed = parseArgs({ args: argv, allowPositionals: true, strict: false, options: { help: { type: 'boolean', short: 'h' }, json: { type: 'boolean' }, 'npm-package': { type: 'string' }, 'probe-glob': { type: 'string' }, 'probe-contains': { type: 'string' }, 'force-refresh': { type: 'boolean' }, label: { type: 'string' }, keywords: { type: 'string' }, since: { type: 'string' }, limit: { type: 'string' } } });
const parsed = parseArgs({
args: argv,
allowPositionals: true,
strict: false,
options: {
help: { type: 'boolean', short: 'h' },
json: { type: 'boolean' },
'npm-package': { type: 'string' },
'probe-glob': { type: 'string' },
'probe-contains': { type: 'string' },
'probe-template': { type: 'string' },
'skill-profile': { type: 'string' },
'skip-policy-gate': { type: 'boolean' },
'force-refresh': { type: 'boolean' },
label: { type: 'string' },
keywords: { type: 'string' },
since: { type: 'string' },
limit: { type: 'string' },
'max-repos': { type: 'string' },
'max-checks': { type: 'string' },
'no-land-hints': { type: 'boolean' },
repo: { type: 'string' },
org: { type: 'boolean' },
verdict: { type: 'string' },
disposition: { type: 'string' },
notes: { type: 'string' }
}
});
const [command, first, second] = parsed.positionals;

@@ -87,6 +132,14 @@ if (parsed.values.help || !command) {

let output;
if (command === 'check') {
if (command === 'doctor') {
output = await doctor();
}
else if (command === 'check') {
if (!first)
throw new Error('check requires owner/repo#123.');
output = await worth_check({ ...parseIssueRef(first), npm_package: stringValue(parsed.values['npm-package']), probe: probe(parsed.values) });
output = await worth_check({
...parseIssueRef(first),
npm_package: stringValue(parsed.values['npm-package']),
probe: probe(parsed.values),
probe_template: stringValue(parsed.values['probe-template'])
});
}

@@ -109,3 +162,9 @@ else if (command === 'branches') {

throw new Error('release requires owner/repo and package name.');
output = await release_gap({ repo: first, npm_package: second, probe: probe(parsed.values), force_refresh: parsed.values['force-refresh'] === true });
output = await release_gap({
repo: first,
npm_package: second,
probe: probe(parsed.values),
probe_template: stringValue(parsed.values['probe-template']),
force_refresh: parsed.values['force-refresh'] === true
});
}

@@ -117,2 +176,14 @@ else if (command === 'dupes') {

}
else if (command === 'related') {
if (!first)
throw new Error('related requires owner/repo.');
const filters = scanFilters(parsed.values);
output = await related_cluster({
repo: first,
issue_number: second ? Number(second) : undefined,
label: filters.label,
keywords: filters.keywords,
limit: filters.limit
});
}
else if (command === 'linked') {

@@ -128,7 +199,90 @@ if (!first || !second)

}
else if (command === 'hunt') {
if (!first)
throw new Error('hunt requires owner/repo or an org/user login.');
const maxChecksRaw = stringValue(parsed.values['max-checks']);
const maxChecks = maxChecksRaw ? Number(maxChecksRaw) : undefined;
if (maxChecksRaw && (!Number.isFinite(maxChecks) || maxChecks < 1)) {
throw new Error('--max-checks must be a positive number.');
}
const maxReposRaw = stringValue(parsed.values['max-repos']);
const maxRepos = maxReposRaw ? Number(maxReposRaw) : undefined;
if (maxReposRaw && (!Number.isFinite(maxRepos) || maxRepos < 1)) {
throw new Error('--max-repos must be a positive number.');
}
const filters = scanFilters(parsed.values);
// --org forces org mode; otherwise slash ⇒ repo, no slash ⇒ org/user.
const asOrg = parsed.values.org === true || !first.includes('/');
if (parsed.values.org === true && first.includes('/')) {
throw new Error('hunt --org expects an org or user login, not owner/repo. Omit --org for a single repo.');
}
output = await hunt({
...(asOrg ? { org: first } : { repo: first }),
label: filters.label,
keywords: filters.keywords,
since: filters.since,
scan_limit: filters.limit,
land_hints: filters.land_hints,
skill_profile: filters.skill_profile,
max_checks: maxChecks,
max_repos: maxRepos,
skip_policy_gate: parsed.values['skip-policy-gate'] === true,
npm_package: stringValue(parsed.values['npm-package'])
});
}
else if (command === 'scan') {
if (!first)
throw new Error('scan requires owner/repo.');
output = await scan({ repo: first, label: stringValue(parsed.values.label), keywords: stringValue(parsed.values.keywords)?.split(',').filter(Boolean), since: stringValue(parsed.values.since), limit: stringValue(parsed.values.limit) ? Number(stringValue(parsed.values.limit)) : undefined });
output = await scan({ repo: first, ...scanFilters(parsed.values) });
}
else if (command === 'org') {
if (!first)
throw new Error('org requires an org or user login.');
const maxRepos = stringValue(parsed.values['max-repos']);
output = await org_scan({
org: first,
...scanFilters(parsed.values),
max_repos: maxRepos ? Number(maxRepos) : undefined
});
}
else if (command === 'probes') {
const templates = listProbeTemplates();
output = {
verdict_summary: `listed ${templates.length} probe templates.`,
evidence: templates,
checked: ['listed built-in probe templates'],
not_checked: ['probe templates are heuristics; they do not prove an issue-specific fix shipped.'],
signals: [],
cached: false,
fetched_at: new Date().toISOString()
};
}
else if (command === 'ledger') {
const action = first;
if (action === 'list') {
output = await ledger_list({
repo: stringValue(parsed.values.repo),
limit: stringValue(parsed.values.limit) ? Number(stringValue(parsed.values.limit)) : undefined
});
}
else if (action === 'show') {
if (!second)
throw new Error('ledger show requires owner/repo#123.');
output = await ledger_lookup(parseIssueRef(second));
}
else if (action === 'record') {
if (!second)
throw new Error('ledger record requires owner/repo#123.');
output = await ledger_record({
...parseIssueRef(second),
verdict: stringValue(parsed.values.verdict),
disposition: stringValue(parsed.values.disposition),
notes: stringValue(parsed.values.notes),
source: 'cli'
});
}
else {
throw new Error('ledger requires list, show, or record.');
}
}
else {

@@ -135,0 +289,0 @@ throw new Error(`Unknown subcommand ${command}.`);

+1
-1

@@ -1,1 +0,1 @@

{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AACtC,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,WAAW,EAAE,cAAc,EAAE,YAAY,EAAE,aAAa,EAAE,WAAW,EAAE,WAAW,EAAE,IAAI,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AACzI,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAElD,MAAM,IAAI,GAAG;;;;;;;;;;;;;CAaZ,CAAC;AAIF,SAAS,aAAa,CAAC,GAAW;IAChC,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAC;IAC3C,IAAI,CAAC,KAAK;QAAE,MAAM,IAAI,KAAK,CAAC,yCAAyC,CAAC,CAAC;IACvE,OAAO,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;AAC5D,CAAC;AAED,SAAS,KAAK,CAAC,MAAe,EAAE,MAAe,EAAE,KAAY;IAC3D,IAAI,MAAM;QAAE,KAAK,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC;SACrD,CAAC;QACJ,MAAM,KAAK,GAAG,MAAwD,CAAC;QACvE,MAAM,OAAO,GAAG,KAAK,CAAC,eAAe,IAAI,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;QAChE,MAAM,MAAM,GAAG,KAAK,CAAC,OAAO,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,GAAG,KAAK,CAAC,OAAO,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,OAAO,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;QACrG,KAAK,CAAC,GAAG,MAAM,GAAG,OAAO,IAAI,CAAC,CAAC;IACjC,CAAC;AACH,CAAC;AAED,SAAS,WAAW,CAAC,KAAc;IACjC,OAAO,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC;AACvD,CAAC;AAED,SAAS,KAAK,CAAC,MAA8D;IAC3E,MAAM,SAAS,GAAG,WAAW,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC;IACpD,MAAM,QAAQ,GAAG,WAAW,CAAC,MAAM,CAAC,gBAAgB,CAAC,CAAC,CAAC;IACvD,IAAI,CAAC,SAAS,IAAI,CAAC,QAAQ;QAAE,OAAO,SAAS,CAAC;IAC9C,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,CAAC;AACjC,CAAC;AAED,SAAS,OAAO,CAAC,MAAe;IAC9B,MAAM,KAAK,GAAG,MAA8B,CAAC;IAC7C,IAAI,KAAK,CAAC,OAAO,KAAK,KAAK;QAAE,OAAO,CAAC,CAAC;IACtC,IAAI,KAAK,CAAC,OAAO,KAAK,QAAQ;QAAE,OAAO,EAAE,CAAC;IAC1C,IAAI,KAAK,CAAC,OAAO,KAAK,MAAM;QAAE,OAAO,EAAE,CAAC;IACxC,OAAO,CAAC,CAAC;AACX,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,MAAM,CAAC,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,SAAgB,CAAC,IAAI,EAAE,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,SAAgB,CAAC,IAAI,EAAE,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC;IACnK,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,UAAU,IAAI,IAAI,CAAC,CAAC,CAAC,EAAE,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;QACvD,MAAM,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;QACtB,MAAM,MAAM,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;QACvB,IAAI,CAAC,KAAK,IAAI,CAAC,MAAM,EAAE,CAAC;YACtB,MAAM,CAAC,8CAA8C,CAAC,CAAC;YACvD,OAAO,CAAC,CAAC;QACX,CAAC;QACD,MAAM,CAAC,4BAA4B,MAAM,4GAA4G,CAAC,CAAC;QACvJ,MAAM,MAAM,GAAG,MAAM,WAAW,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,aAAa,EAAE,IAAI,CAAC,QAAQ,CAAC,iBAAiB,CAAC,EAAE,CAAC,CAAC;QAChJ,KAAK,CAAC,MAAM,EAAE,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC,CAAC;QAC/C,OAAO,CAAC,CAAC;IACX,CAAC;IACD,MAAM,MAAM,GAAG,SAAS,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,gBAAgB,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,GAAG,EAAE,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,EAAE,aAAa,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,YAAY,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,gBAAgB,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,eAAe,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,QAAQ,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC,CAAC;IAC/Z,MAAM,CAAC,OAAO,EAAE,KAAK,EAAE,MAAM,CAAC,GAAG,MAAM,CAAC,WAAW,CAAC;IACpD,IAAI,MAAM,CAAC,MAAM,CAAC,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;QACnC,MAAM,CAAC,IAAI,CAAC,CAAC;QACb,OAAO,CAAC,CAAC;IACX,CAAC;IACD,IAAI,OAAO,KAAK,KAAK,EAAE,CAAC;QACtB,MAAM,cAAc,EAAE,CAAC;QACvB,OAAO,CAAC,CAAC;IACX,CAAC;IACD,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,KAAK,IAAI,CAAC;IAC3C,IAAI,CAAC;QACH,IAAI,MAAe,CAAC;QACpB,IAAI,OAAO,KAAK,OAAO,EAAE,CAAC;YACxB,IAAI,CAAC,KAAK;gBAAE,MAAM,IAAI,KAAK,CAAC,gCAAgC,CAAC,CAAC;YAC9D,MAAM,GAAG,MAAM,WAAW,CAAC,EAAE,GAAG,aAAa,CAAC,KAAK,CAAC,EAAE,WAAW,EAAE,WAAW,CAAC,MAAM,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QAC/I,CAAC;aAAM,IAAI,OAAO,KAAK,UAAU,EAAE,CAAC;YAClC,IAAI,CAAC,KAAK,IAAI,CAAC,MAAM;gBAAE,MAAM,IAAI,KAAK,CAAC,4CAA4C,CAAC,CAAC;YACrF,KAAK,MAAM,OAAO,IAAI,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC;gBAAE,IAAI,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC;oBAAE,MAAM,CAAC,4BAA4B,OAAO,4GAA4G,CAAC,CAAC;YAC9O,MAAM,GAAG,MAAM,WAAW,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,aAAa,EAAE,MAAM,CAAC,MAAM,CAAC,eAAe,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC;QACnJ,CAAC;aAAM,IAAI,OAAO,KAAK,OAAO,EAAE,CAAC;YAC/B,IAAI,CAAC,KAAK,IAAI,CAAC,MAAM;gBAAE,MAAM,IAAI,KAAK,CAAC,6CAA6C,CAAC,CAAC;YACtF,MAAM,GAAG,MAAM,aAAa,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,YAAY,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QAC9E,CAAC;aAAM,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;YACjC,IAAI,CAAC,KAAK,IAAI,CAAC,MAAM;gBAAE,MAAM,IAAI,KAAK,CAAC,+CAA+C,CAAC,CAAC;YACxF,MAAM,GAAG,MAAM,WAAW,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,WAAW,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,aAAa,EAAE,MAAM,CAAC,MAAM,CAAC,eAAe,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC;QACxJ,CAAC;aAAM,IAAI,OAAO,KAAK,OAAO,EAAE,CAAC;YAC/B,IAAI,CAAC,KAAK,IAAI,CAAC,MAAM;gBAAE,MAAM,IAAI,KAAK,CAAC,6CAA6C,CAAC,CAAC;YACtF,MAAM,GAAG,MAAM,YAAY,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,YAAY,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QAC7E,CAAC;aAAM,IAAI,OAAO,KAAK,QAAQ,EAAE,CAAC;YAChC,IAAI,CAAC,KAAK,IAAI,CAAC,MAAM;gBAAE,MAAM,IAAI,KAAK,CAAC,8CAA8C,CAAC,CAAC;YACvF,MAAM,GAAG,MAAM,WAAW,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,YAAY,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QAC5E,CAAC;aAAM,IAAI,OAAO,KAAK,QAAQ,EAAE,CAAC;YAChC,IAAI,CAAC,KAAK;gBAAE,MAAM,IAAI,KAAK,CAAC,6BAA6B,CAAC,CAAC;YAC3D,MAAM,GAAG,MAAM,cAAc,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,aAAa,EAAE,MAAM,CAAC,MAAM,CAAC,eAAe,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC;QACzG,CAAC;aAAM,IAAI,OAAO,KAAK,MAAM,EAAE,CAAC;YAC9B,IAAI,CAAC,KAAK;gBAAE,MAAM,IAAI,KAAK,CAAC,2BAA2B,CAAC,CAAC;YACzD,MAAM,GAAG,MAAM,IAAI,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,WAAW,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,QAAQ,EAAE,WAAW,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,KAAK,EAAE,WAAW,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,KAAK,EAAE,WAAW,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,EAAE,CAAC,CAAC;QACpS,CAAC;aAAM,CAAC;YACN,MAAM,IAAI,KAAK,CAAC,sBAAsB,OAAO,GAAG,CAAC,CAAC;QACpD,CAAC;QACD,KAAK,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;QAC9B,OAAO,OAAO,CAAC,MAAM,CAAC,CAAC;IACzB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,CAAC,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QACtE,OAAO,CAAC,CAAC;IACX,CAAC;AACH,CAAC;AAED,MAAM,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AACpC,SAAS,UAAU,CAAC,IAAY;IAC9B,IAAI,CAAC;QACH,OAAO,aAAa,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC;IAChD,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,aAAa,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC;IAClC,CAAC;AACH,CAAC;AAED,IAAI,WAAW,IAAI,MAAM,CAAC,IAAI,CAAC,GAAG,KAAK,UAAU,CAAC,WAAW,CAAC,EAAE,CAAC;IAC/D,MAAM,EAAE,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE;QACrB,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC;IAC1B,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,KAAc,EAAE,EAAE;QAC1B,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QACpF,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;IACvB,CAAC,CAAC,CAAC;AACL,CAAC"}
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":"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"}
import { githubJson } from '../lib/github.js';
import { runSearchWithCanonicalRepo } from '../lib/repo.js';
import { createEnvelope } from './envelope.js';
import { jaccard, sharedErrorPhrase, tokens } from './text-sim.js';
const DUPE_LIMIT = 'lexical similarity only; semantic duplicates with different vocabulary will be missed.';
const STOP = new Set(['the', 'and', 'for', 'with', 'from', 'that', 'this', 'should', 'would', 'could', 'please', 'issue']);
const CLOSED_TITLE_THRESHOLD = 0.6;

@@ -11,16 +11,2 @@ const EVIDENCE_THRESHOLD = 0.35;

const DEFAULT_PER_PAGE = 50;
function tokens(text) {
return new Set((text.toLowerCase().match(/[a-z][a-z0-9_-]{3,}/g) ?? []).filter((token) => !STOP.has(token)));
}
function jaccard(a, b) {
const intersection = Array.from(a).filter((item) => b.has(item)).length;
const union = new Set([...a, ...b]).size;
return union === 0 ? 0 : intersection / union;
}
function sharedErrorPhrase(a, b) {
const quoted = Array.from(a.matchAll(/"([^"]{8,})"/g)).map((match) => match[1].toLowerCase());
const lowerA = a.toLowerCase();
const lowerB = b.toLowerCase();
return quoted.some((phrase) => lowerB.includes(phrase)) || (lowerA.includes('npx is not available') && lowerB.includes('npx is not available'));
}
export async function dupe_cluster(input) {

@@ -27,0 +13,0 @@ const target = await githubJson(`/repos/${input.repo}/issues/${input.issue_number}`);

@@ -1,1 +0,1 @@

{"version":3,"file":"dupe-cluster.js","sourceRoot":"","sources":["../../src/core/dupe-cluster.ts"],"names":[],"mappings":"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"}
{"version":3,"file":"dupe-cluster.js","sourceRoot":"","sources":["../../src/core/dupe-cluster.ts"],"names":[],"mappings":"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"}
export { branch_scan } from './branch-scan.js';
export { contrib_policy } from './contrib-policy.js';
export { doctor } from './doctor.js';
export { release_gap } from './release-gap.js';

@@ -7,4 +8,12 @@ export type { Envelope } from './envelope.js';

export { dupe_cluster } from './dupe-cluster.js';
export { related_cluster } from './related-cluster.js';
export { linked_work } from './linked-work.js';
export { worth_check } from './worth-check.js';
export { scan } from './scan.js';
export { org_scan } from './org-scan.js';
export { hunt } from './hunt.js';
export { ledger_lookup, ledger_record, ledger_list } from './ledger.js';
export { listProbeTemplates, resolveProbeTemplate } from './probe-templates.js';
export type { ProbeTemplate, ProbeTemplateId } from './probe-templates.js';
export { parseSkillProfile, resolveSkillProfile, scoreSkillFit } from './skill-fit.js';
export type { SkillProfile } from './skill-fit.js';
export { branch_scan } from './branch-scan.js';
export { contrib_policy } from './contrib-policy.js';
export { doctor } from './doctor.js';
export { release_gap } from './release-gap.js';
export { issue_vs_main } from './issue-vs-main.js';
export { dupe_cluster } from './dupe-cluster.js';
export { related_cluster } from './related-cluster.js';
export { linked_work } from './linked-work.js';
export { worth_check } from './worth-check.js';
export { scan } from './scan.js';
export { org_scan } from './org-scan.js';
export { hunt } from './hunt.js';
export { ledger_lookup, ledger_record, ledger_list } from './ledger.js';
export { listProbeTemplates, resolveProbeTemplate } from './probe-templates.js';
export { parseSkillProfile, resolveSkillProfile, scoreSkillFit } from './skill-fit.js';
//# sourceMappingURL=index.js.map

@@ -1,1 +0,1 @@

{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/core/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAE/C,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC"}
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/core/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAE/C,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AACxE,OAAO,EAAE,kBAAkB,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AAEhF,OAAO,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC"}

@@ -8,6 +8,7 @@ import { githubJson } from '../lib/github.js';

import { closesIssue, mentionsIssue } from './linkage.js';
const LINKAGE_LIMIT = 'PR linkage uses cross-references, explicit issue mentions (title+body), comment PR URLs, and high title overlap; renamed or differently worded work can still be missed. Fork-only PRs are invisible.';
const LINKAGE_LIMIT = 'PR linkage uses cross-references, explicit issue mentions (title+body), comment PR URLs, and high title overlap; renamed or differently worded work can still be missed. A secondary org-scoped search surfaces fork/other-repo PRs referencing the issue as density evidence only (never a SKIP signal by itself); it is lexical and scoped to the home repo\'s org, so PRs in forks under other orgs, or PRs that reference the issue without matching keywords, can still be missed.';
const TITLE_OVERLAP_MIN = 0.4;
const TITLE_OVERLAP_MIN_SHARED = 2;
const REFERENCED_COMMIT_CAP = 20;
const NETWORK_SEARCH_PER_PAGE = 20;
const CLAIM_COMMENT = /\b(i\s+('ve|have)\s+)?(submitted|opened|created|sent|made|raised)\s+(a\s+)?(pr|pull\s+request)\b|\b(pr|pull\s+request)\s+(is|was)\s+(up|ready|opened|submitted)\b|\bsee\s+(my\s+)?(pr|pull\s+request)\b/i;

@@ -86,2 +87,3 @@ const MAX_TIMELINE_PAGES = 2;

const commits = [];
let capped = false;
for (const event of events) {

@@ -100,7 +102,107 @@ if (event.event !== 'referenced' || !event.commit_id)

});
if (commits.length >= REFERENCED_COMMIT_CAP)
if (commits.length >= REFERENCED_COMMIT_CAP) {
capped = true;
break;
}
}
return commits;
return { commits, capped };
}
/** Extracts an "owner/repo" full name from a Search API item's repository_url or html_url. */
function repoFromSearchItem(item) {
if (item.repository_url) {
const match = item.repository_url.match(/\/repos\/([^/]+\/[^/]+)$/);
if (match)
return match[1];
}
if (item.html_url) {
const match = item.html_url.match(/github\.com\/([^/]+\/[^/]+)\/pull\/\d+/i);
if (match)
return match[1];
}
return null;
}
/**
* Soft secondary pass: searches the home repo's org for open/closed PRs (in other repos, e.g. forks)
* that reference the issue. This is density evidence only — never sufficient on its own to mark a PR
* "linked" or force a SKIP, since a fork PR mentioning the issue number may be unrelated or abandoned.
*/
async function networkLinkedPrs(homeRepo, issueNumber) {
const owner = homeRepo.split('/')[0];
if (!owner) {
return { prs: [], checked: [], not_checked: ['network PR search skipped because the repository owner could not be determined from the input repo.'] };
}
try {
// Prefer org: for organizations; fall back to user: for personal accounts (org: returns empty/error).
let result = null;
let scope = 'org';
const issueClause = `is:pr ("Fixes #${issueNumber}" OR "Closes #${issueNumber}" OR "Resolves #${issueNumber}" OR "#${issueNumber}")`;
try {
const query = encodeURIComponent(`${issueClause} org:${owner}`);
result = await githubJson(`/search/issues?q=${query}&per_page=${NETWORK_SEARCH_PER_PAGE}`);
}
catch {
scope = 'user';
const query = encodeURIComponent(`${issueClause} user:${owner}`);
result = await githubJson(`/search/issues?q=${query}&per_page=${NETWORK_SEARCH_PER_PAGE}`);
}
// If org search succeeded but returned nothing, also try user: (personal namespace owners).
if (scope === 'org' && (result?.items.length ?? 0) === 0) {
try {
const query = encodeURIComponent(`${issueClause} user:${owner}`);
const userResult = await githubJson(`/search/issues?q=${query}&per_page=${NETWORK_SEARCH_PER_PAGE}`);
if (userResult.items.length > 0) {
result = userResult;
scope = 'user';
}
}
catch {
// keep empty org result
}
}
const prs = [];
const seen = new Set();
for (const item of result?.items ?? []) {
if (!('pull_request' in item))
continue;
const itemRepo = repoFromSearchItem(item);
if (!itemRepo || itemRepo.toLowerCase() === homeRepo.toLowerCase())
continue;
const key = `${itemRepo.toLowerCase()}#${item.number}`;
if (seen.has(key))
continue;
seen.add(key);
const pr = await maybePrDetails(itemRepo, item.number);
if (!pr)
continue;
if (isAutomationAuthor(pr.user?.login))
continue;
const text = `${pr.title}\n${pr.body ?? ''}`;
if (!mentionsIssue(text, issueNumber))
continue;
prs.push({
kind: 'network_pr',
number: pr.number,
repo: itemRepo,
state: pr.state,
merged: pr.merged === true || pr.merged_at !== null,
url: pr.html_url,
title: pr.title,
author: pr.user?.login ?? null,
source: 'org_search'
});
}
return {
prs,
checked: [`searched ${scope}:${owner} for network/fork pull requests referencing #${issueNumber}`],
not_checked: []
};
}
catch {
return {
prs: [],
checked: [],
not_checked: [`network pull request search for owner ${owner} failed; fork/sibling PRs may be under-counted.`]
};
}
}
function timelineCapabilityNotes(events) {

@@ -241,3 +343,3 @@ const types = new Set(events.map((event) => event.event));

const timelinePrs = await timelineLinkedPrs(input.repo, events, input.issue_number);
const commits = referencedCommits(events);
const { commits, capped: commitsCapped } = referencedCommits(events);
const knownPrs = new Set(timelinePrs.map((pr) => pr.number));

@@ -251,2 +353,5 @@ const { prs: commentPrs, claimComments } = await commentLinkedPrs(resolved.full_name, input.repo, input.issue_number, knownPrs);

: { prs: [], checked: [], not_checked: ['title-overlap PR search skipped because explicit linkage already covered the issue.'] };
// Soft secondary pass, always run (capped per_page) — surfaces fork/other-repo PRs as density
// evidence only; never treated as a linked_pr and never forces a SKIP signal on its own.
const { prs: networkPrs, checked: networkChecked, not_checked: networkNotChecked } = await networkLinkedPrs(input.repo, input.issue_number);
const { active, ignored } = partitionLinkedPrs([...timelinePrs, ...commentPrs, ...searchPrs, ...titleResult.prs]);

@@ -264,4 +369,4 @@ const linkedPrs = active.sort((left, right) => left.number - right.number);

const assignedLabel = assignments.length === 1 ? 'assignee' : 'assignees';
const checkedNotes = [...new Set([...resolved.checked, ...searchChecked, ...titleResult.checked, ...timelineNotes.checked])];
const notCheckedNotes = [...new Set([...resolved.not_checked, ...searchNotChecked, ...titleResult.not_checked, ...timelineNotes.not_checked, LINKAGE_LIMIT])];
const checkedNotes = [...new Set([...resolved.checked, ...searchChecked, ...titleResult.checked, ...timelineNotes.checked, ...networkChecked])];
const notCheckedNotes = [...new Set([...resolved.not_checked, ...searchNotChecked, ...titleResult.not_checked, ...timelineNotes.not_checked, ...networkNotChecked, LINKAGE_LIMIT])];
if (timelineTruncated) {

@@ -276,2 +381,8 @@ notCheckedNotes.push(`timeline soft-capped at ${MAX_TIMELINE_PAGES} pages; older cross-references may be missing.`);

}
if (commitsCapped) {
notCheckedNotes.push(`referenced commits capped at ${REFERENCED_COMMIT_CAP}; older referenced commits may be omitted.`);
}
if (networkPrs.length > 0) {
checkedNotes.push(`found ${networkPrs.length} cross-repository pull request${networkPrs.length === 1 ? '' : 's'} in the org referencing this issue (evidence only; does not force a linked-PR signal)`);
}
if (claimComments && linkedPrs.every((pr) => pr.source !== 'title_overlap' && pr.source !== 'comment')) {

@@ -282,3 +393,4 @@ notCheckedNotes.push('a comment claimed a pull request was submitted, but no matching PR was linked; read recent open PRs manually.');

priorAttempts > 0 ? `${priorAttempts} prior closed unmerged PR${priorAttempts === 1 ? '' : 's'}` : null,
commits.length > 0 ? `${commits.length} referenced commit${commits.length === 1 ? '' : 's'}` : null
commits.length > 0 ? `${commits.length} referenced commit${commits.length === 1 ? '' : 's'}` : null,
networkPrs.length > 0 ? `${networkPrs.length} network/fork PR${networkPrs.length === 1 ? '' : 's'} referencing the issue` : null
].filter(Boolean);

@@ -288,7 +400,7 @@ const verdict_summary = linkedPrs.length > 0 || assignments.length > 0

: ignored.length > 0
? `no human-linked pull requests or assignees found (${ignored.length} automation PR${ignored.length === 1 ? '' : 's'} ignored)${commits.length ? `; ${commits.length} referenced commits` : ''}.`
: commits.length > 0
? `no linked pull requests or assignees; found ${commits.length} referenced commit${commits.length === 1 ? '' : 's'}.`
? `no human-linked pull requests or assignees found (${ignored.length} automation PR${ignored.length === 1 ? '' : 's'} ignored)${densityBits.length ? `; ${densityBits.join(', ')}` : ''}.`
: densityBits.length > 0
? `no linked pull requests or assignees; found ${densityBits.join(', ')}.`
: 'no linked pull requests or current assignees found.';
const evidence = [...linkedPrs, ...ignored, ...assignments, ...commits];
const evidence = [...linkedPrs, ...ignored, ...assignments, ...commits, ...networkPrs];
return createEnvelope({

@@ -303,3 +415,4 @@ verdict_summary,

'fetched issue comments for pull request references',
'searched pull requests for explicit issue-number mentions in title and body'
'searched pull requests for explicit issue-number mentions in title and body',
'searched org-wide for cross-repository (fork/network) pull requests referencing the issue'
],

@@ -306,0 +419,0 @@ not_checked: notCheckedNotes,

@@ -1,1 +0,1 @@

{"version":3,"file":"linked-work.js","sourceRoot":"","sources":["../../src/core/linked-work.ts"],"names":[],"mappings":"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"}
{"version":3,"file":"linked-work.js","sourceRoot":"","sources":["../../src/core/linked-work.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAe,MAAM,kBAAkB,CAAC;AAC3D,OAAO,EAAE,iBAAiB,EAAE,0BAA0B,EAAE,MAAM,gBAAgB,CAAC;AAC/E,OAAO,EAAE,kBAAkB,EAAE,MAAM,WAAW,CAAC;AAC/C,OAAO,EAAE,mBAAmB,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAC3E,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAC/C,OAAO,EAAE,cAAc,EAAY,MAAM,eAAe,CAAC;AACzD,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAmD1D,MAAM,aAAa,GAAG,ydAAyd,CAAC;AAChf,MAAM,iBAAiB,GAAG,GAAG,CAAC;AAC9B,MAAM,wBAAwB,GAAG,CAAC,CAAC;AACnC,MAAM,qBAAqB,GAAG,EAAE,CAAC;AACjC,MAAM,uBAAuB,GAAG,EAAE,CAAC;AACnC,MAAM,aAAa,GAAG,0MAA0M,CAAC;AAEjO,MAAM,kBAAkB,GAAG,CAAC,CAAC;AAE7B,KAAK,UAAU,QAAQ,CAAC,IAAY,EAAE,WAAmB;IACvD,MAAM,MAAM,GAAoB,EAAE,CAAC;IACnC,IAAI,SAAS,GAAG,KAAK,CAAC;IACtB,KAAK,IAAI,IAAI,GAAG,CAAC,EAAE,IAAI,IAAI,kBAAkB,EAAE,IAAI,IAAI,CAAC,EAAE,CAAC;QACzD,MAAM,UAAU,GAAG,MAAM,UAAU,CAAkB,UAAU,IAAI,WAAW,WAAW,+BAA+B,IAAI,EAAE,CAAC,CAAC;QAChI,MAAM,CAAC,IAAI,CAAC,GAAG,UAAU,CAAC,CAAC;QAC3B,IAAI,UAAU,CAAC,MAAM,GAAG,GAAG;YAAE,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC;QAC1D,IAAI,IAAI,KAAK,kBAAkB;YAAE,SAAS,GAAG,IAAI,CAAC;IACpD,CAAC;IACD,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC;AAC/B,CAAC;AAED,KAAK,UAAU,SAAS,CAAC,IAAY,EAAE,WAAmB;IACxD,OAAO,UAAU,CAAW,UAAU,IAAI,UAAU,WAAW,EAAE,CAAC,CAAC;AACrE,CAAC;AAED,KAAK,UAAU,cAAc,CAAC,IAAY,EAAE,WAAmB;IAC7D,IAAI,CAAC;QACH,OAAO,MAAM,SAAS,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC;IAC5C,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,KAAK,YAAY,cAAc,IAAI,KAAK,CAAC,MAAM,KAAK,GAAG;YAAE,OAAO,IAAI,CAAC;QACzE,MAAM,KAAK,CAAC;IACd,CAAC;AACH,CAAC;AAED,SAAS,kBAAkB,CAAC,KAAc;IACxC,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,cAAc,IAAI,KAAK,CAAC;AAChF,CAAC;AAED,SAAS,SAAS,CAAC,GAA8B;IAC/C,IAAI,CAAC,GAAG;QAAE,OAAO,IAAI,CAAC;IACtB,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;AACzF,CAAC;AAED,SAAS,aAAa,CAAC,EAAY,EAAE,WAAmB;IACtD,OAAO,WAAW,CAAC,GAAG,EAAE,CAAC,KAAK,KAAK,EAAE,CAAC,IAAI,IAAI,EAAE,EAAE,EAAE,WAAW,CAAC,CAAC;AACnE,CAAC;AAED,SAAS,gBAAgB,CAAC,EAAY,EAAE,IAAY,EAAE,MAAsB,EAAE,WAAmB,EAAE,SAAoC,EAAE;IACvI,MAAM,MAAM,GAAG,EAAE,CAAC,MAAM,KAAK,IAAI,IAAI,EAAE,CAAC,SAAS,KAAK,IAAI,CAAC;IAC3D,MAAM,aAAa,GAAG,EAAE,CAAC,KAAK,KAAK,QAAQ,IAAI,CAAC,MAAM,CAAC;IACvD,OAAO;QACL,IAAI,EAAE,WAAW;QACjB,MAAM,EAAE,EAAE,CAAC,MAAM;QACjB,KAAK,EAAE,EAAE,CAAC,KAAK;QACf,KAAK,EAAE,EAAE,CAAC,KAAK,KAAK,IAAI;QACxB,MAAM;QACN,IAAI;QACJ,MAAM,EAAE,EAAE,CAAC,IAAI,EAAE,KAAK,IAAI,IAAI;QAC9B,KAAK,EAAE,EAAE,CAAC,KAAK;QACf,GAAG,EAAE,EAAE,CAAC,QAAQ;QAChB,MAAM;QACN,YAAY,EAAE,aAAa,CAAC,EAAE,EAAE,WAAW,CAAC,IAAI,SAAS;QACzD,aAAa,EAAE,aAAa,IAAI,SAAS;QACzC,SAAS,EAAE,aAAa,CAAC,CAAC,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS;QACnD,WAAW,EAAE,aAAa,CAAC,CAAC,CAAC,SAAS,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,SAAS;QAChE,GAAG,MAAM;KACV,CAAC;AACJ,CAAC;AAED,KAAK,UAAU,iBAAiB,CAAC,IAAY,EAAE,MAAuB,EAAE,WAAmB;IACzF,MAAM,GAAG,GAAG,IAAI,GAAG,EAA4B,CAAC;IAChD,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QAC3B,IAAI,KAAK,CAAC,KAAK,KAAK,kBAAkB,IAAI,KAAK,CAAC,MAAM,EAAE,IAAI,KAAK,OAAO,IAAI,CAAC,kBAAkB,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC;YAAE,SAAS;QAC9H,MAAM,EAAE,GAAG,MAAM,SAAS,CAAC,IAAI,EAAE,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;QAC5D,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,MAAM,EAAE,gBAAgB,CAAC,EAAE,EAAE,KAAK,CAAC,UAAU,IAAI,EAAE,CAAC,UAAU,EAAE,UAAU,EAAE,WAAW,CAAC,CAAC,CAAC;IACvG,CAAC;IACD,OAAO,CAAC,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC;AAC7E,CAAC;AAED,SAAS,iBAAiB,CAAC,MAAuB;IAChD,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;IAC/B,MAAM,OAAO,GAA+B,EAAE,CAAC;IAC/C,IAAI,MAAM,GAAG,KAAK,CAAC;IACnB,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QAC3B,IAAI,KAAK,CAAC,KAAK,KAAK,YAAY,IAAI,CAAC,KAAK,CAAC,SAAS;YAAE,SAAS;QAC/D,IAAI,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,SAAS,CAAC;YAAE,SAAS;QACxC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;QAC1B,OAAO,CAAC,IAAI,CAAC;YACX,IAAI,EAAE,mBAAmB;YACzB,GAAG,EAAE,KAAK,CAAC,SAAS;YACpB,IAAI,EAAE,KAAK,CAAC,UAAU,IAAI,IAAI;YAC9B,GAAG,EAAE,KAAK,CAAC,UAAU,IAAI,SAAS;YAClC,MAAM,EAAE,KAAK,CAAC,KAAK,EAAE,KAAK,IAAI,IAAI;SACnC,CAAC,CAAC;QACH,IAAI,OAAO,CAAC,MAAM,IAAI,qBAAqB,EAAE,CAAC;YAC5C,MAAM,GAAG,IAAI,CAAC;YACd,MAAM;QACR,CAAC;IACH,CAAC;IACD,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC;AAC7B,CAAC;AAED,8FAA8F;AAC9F,SAAS,kBAAkB,CAAC,IAAoD;IAC9E,IAAI,IAAI,CAAC,cAAc,EAAE,CAAC;QACxB,MAAM,KAAK,GAAG,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,0BAA0B,CAAC,CAAC;QACpE,IAAI,KAAK;YAAE,OAAO,KAAK,CAAC,CAAC,CAAC,CAAC;IAC7B,CAAC;IACD,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;QAClB,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,yCAAyC,CAAC,CAAC;QAC7E,IAAI,KAAK;YAAE,OAAO,KAAK,CAAC,CAAC,CAAC,CAAC;IAC7B,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;;;GAIG;AACH,KAAK,UAAU,gBAAgB,CAAC,QAAgB,EAAE,WAAmB;IACnE,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;IACrC,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,OAAO,EAAE,GAAG,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,WAAW,EAAE,CAAC,qGAAqG,CAAC,EAAE,CAAC;IACxJ,CAAC;IACD,IAAI,CAAC;QACH,sGAAsG;QACtG,IAAI,MAAM,GAAwB,IAAI,CAAC;QACvC,IAAI,KAAK,GAAmB,KAAK,CAAC;QAClC,MAAM,WAAW,GAAG,kBAAkB,WAAW,iBAAiB,WAAW,mBAAmB,WAAW,UAAU,WAAW,IAAI,CAAC;QACrI,IAAI,CAAC;YACH,MAAM,KAAK,GAAG,kBAAkB,CAAC,GAAG,WAAW,QAAQ,KAAK,EAAE,CAAC,CAAC;YAChE,MAAM,GAAG,MAAM,UAAU,CAAe,oBAAoB,KAAK,aAAa,uBAAuB,EAAE,CAAC,CAAC;QAC3G,CAAC;QAAC,MAAM,CAAC;YACP,KAAK,GAAG,MAAM,CAAC;YACf,MAAM,KAAK,GAAG,kBAAkB,CAAC,GAAG,WAAW,SAAS,KAAK,EAAE,CAAC,CAAC;YACjE,MAAM,GAAG,MAAM,UAAU,CAAe,oBAAoB,KAAK,aAAa,uBAAuB,EAAE,CAAC,CAAC;QAC3G,CAAC;QACD,4FAA4F;QAC5F,IAAI,KAAK,KAAK,KAAK,IAAI,CAAC,MAAM,EAAE,KAAK,CAAC,MAAM,IAAI,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC;YACzD,IAAI,CAAC;gBACH,MAAM,KAAK,GAAG,kBAAkB,CAAC,GAAG,WAAW,SAAS,KAAK,EAAE,CAAC,CAAC;gBACjE,MAAM,UAAU,GAAG,MAAM,UAAU,CAAe,oBAAoB,KAAK,aAAa,uBAAuB,EAAE,CAAC,CAAC;gBACnH,IAAI,UAAU,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;oBAChC,MAAM,GAAG,UAAU,CAAC;oBACpB,KAAK,GAAG,MAAM,CAAC;gBACjB,CAAC;YACH,CAAC;YAAC,MAAM,CAAC;gBACP,wBAAwB;YAC1B,CAAC;QACH,CAAC;QACD,MAAM,GAAG,GAAwB,EAAE,CAAC;QACpC,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;QAC/B,KAAK,MAAM,IAAI,IAAI,MAAM,EAAE,KAAK,IAAI,EAAE,EAAE,CAAC;YACvC,IAAI,CAAC,CAAC,cAAc,IAAI,IAAI,CAAC;gBAAE,SAAS;YACxC,MAAM,QAAQ,GAAG,kBAAkB,CAAC,IAAI,CAAC,CAAC;YAC1C,IAAI,CAAC,QAAQ,IAAI,QAAQ,CAAC,WAAW,EAAE,KAAK,QAAQ,CAAC,WAAW,EAAE;gBAAE,SAAS;YAC7E,MAAM,GAAG,GAAG,GAAG,QAAQ,CAAC,WAAW,EAAE,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;YACvD,IAAI,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC;gBAAE,SAAS;YAC5B,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YACd,MAAM,EAAE,GAAG,MAAM,cAAc,CAAC,QAAQ,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;YACvD,IAAI,CAAC,EAAE;gBAAE,SAAS;YAClB,IAAI,kBAAkB,CAAC,EAAE,CAAC,IAAI,EAAE,KAAK,CAAC;gBAAE,SAAS;YACjD,MAAM,IAAI,GAAG,GAAG,EAAE,CAAC,KAAK,KAAK,EAAE,CAAC,IAAI,IAAI,EAAE,EAAE,CAAC;YAC7C,IAAI,CAAC,aAAa,CAAC,IAAI,EAAE,WAAW,CAAC;gBAAE,SAAS;YAChD,GAAG,CAAC,IAAI,CAAC;gBACP,IAAI,EAAE,YAAY;gBAClB,MAAM,EAAE,EAAE,CAAC,MAAM;gBACjB,IAAI,EAAE,QAAQ;gBACd,KAAK,EAAE,EAAE,CAAC,KAAK;gBACf,MAAM,EAAE,EAAE,CAAC,MAAM,KAAK,IAAI,IAAI,EAAE,CAAC,SAAS,KAAK,IAAI;gBACnD,GAAG,EAAE,EAAE,CAAC,QAAQ;gBAChB,KAAK,EAAE,EAAE,CAAC,KAAK;gBACf,MAAM,EAAE,EAAE,CAAC,IAAI,EAAE,KAAK,IAAI,IAAI;gBAC9B,MAAM,EAAE,YAAY;aACrB,CAAC,CAAC;QACL,CAAC;QACD,OAAO;YACL,GAAG;YACH,OAAO,EAAE,CAAC,YAAY,KAAK,IAAI,KAAK,gDAAgD,WAAW,EAAE,CAAC;YAClG,WAAW,EAAE,EAAE;SAChB,CAAC;IACJ,CAAC;IAAC,MAAM,CAAC;QACP,OAAO;YACL,GAAG,EAAE,EAAE;YACP,OAAO,EAAE,EAAE;YACX,WAAW,EAAE,CAAC,yCAAyC,KAAK,iDAAiD,CAAC;SAC/G,CAAC;IACJ,CAAC;AACH,CAAC;AAED,SAAS,uBAAuB,CAAC,MAAuB;IACtD,MAAM,KAAK,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC;IAC1D,MAAM,OAAO,GAAG,CAAC,6BAA6B,MAAM,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAC7G,MAAM,WAAW,GAAa,EAAE,CAAC;IACjC,MAAM,WAAW,GAAG,KAAK,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAC;IAClD,MAAM,gBAAgB,GAAG,CAAC,GAAG,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,KAAK,kBAAkB,IAAI,IAAI,KAAK,UAAU,IAAI,IAAI,KAAK,YAAY,CAAC,CAAC;IAChI,IAAI,CAAC,WAAW,IAAI,CAAC,gBAAgB,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,EAAE,CAAC;QAC5D,WAAW,CAAC,IAAI,CACd,yOAAyO,CAC1O,CAAC;IACJ,CAAC;IACD,OAAO,EAAE,OAAO,EAAE,WAAW,EAAE,CAAC;AAClC,CAAC;AAED,KAAK,UAAU,eAAe,CAAC,IAAY,EAAE,OAAe,EAAE,WAAmB,EAAE,QAAqB;IACtG,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,MAAM,0BAA0B,CAAC,IAAI,EAAE,KAAK,EAAE,QAAQ,EAAE,EAAE;QACpF,MAAM,KAAK,GAAG,kBAAkB,CAAC,QAAQ,QAAQ,UAAU,WAAW,EAAE,CAAC,CAAC;QAC1E,OAAO,UAAU,CAAe,oBAAoB,KAAK,cAAc,CAAC,CAAC;IAC3E,CAAC,CAAC,CAAC;IACH,MAAM,GAAG,GAAG,EAAwB,CAAC;IACrC,KAAK,MAAM,IAAI,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;QAChC,IAAI,CAAC,CAAC,cAAc,IAAI,IAAI,CAAC,IAAI,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC;YAAE,SAAS;QACrE,MAAM,EAAE,GAAG,MAAM,SAAS,CAAC,OAAO,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;QACjD,MAAM,IAAI,GAAG,GAAG,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC,KAAK,KAAK,IAAI,CAAC,IAAI,IAAI,EAAE,CAAC,IAAI,IAAI,EAAE,EAAE,CAAC;QACxE,IAAI,CAAC,aAAa,CAAC,IAAI,EAAE,WAAW,CAAC;YAAE,SAAS;QAChD,GAAG,CAAC,IAAI,CAAC,gBAAgB,CAAC,EAAE,EAAE,EAAE,CAAC,UAAU,EAAE,QAAQ,EAAE,WAAW,CAAC,CAAC,CAAC;QACrE,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IAC5B,CAAC;IACD,OAAO;QACL,GAAG,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC;QAC1D,OAAO,EAAE,CAAC,GAAG,OAAO,CAAC,OAAO,EAAE,+DAA+D,CAAC;QAC9F,WAAW,EAAE,OAAO,CAAC,WAAW;KACjC,CAAC;AACJ,CAAC;AAED,SAAS,gBAAgB,CAAC,KAAe,EAAE,IAAY;IACrD,MAAM,OAAO,GAAG,IAAI,GAAG,EAAU,CAAC;IAClC,KAAK,MAAM,IAAI,IAAI,IAAI,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC;QAClD,MAAM,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC,qBAAqB,EAAE,MAAM,CAAC,CAAC;QAChE,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,MAAM,CAAC,gBAAgB,WAAW,cAAc,EAAE,IAAI,CAAC,CAAC;YAAE,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAChI,CAAC;IACD,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,QAAQ,CAAC,qCAAqC,CAAC;QAAE,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACxG,OAAO,CAAC,GAAG,OAAO,CAAC,CAAC,MAAM,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC;AACnE,CAAC;AAED,KAAK,UAAU,gBAAgB,CAAC,aAAqB,EAAE,OAAe,EAAE,WAAmB,EAAE,QAAqB;IAChH,MAAM,QAAQ,GAAG,MAAM,UAAU,CAAiB,UAAU,OAAO,WAAW,WAAW,wBAAwB,CAAC,CAAC;IACnH,MAAM,GAAG,GAAG,EAAwB,CAAC;IACrC,IAAI,aAAa,GAAG,KAAK,CAAC;IAC1B,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;QAC/B,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,IAAI,EAAE,CAAC;QAChC,IAAI,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC;YAAE,aAAa,GAAG,IAAI,CAAC;QACnD,KAAK,MAAM,MAAM,IAAI,gBAAgB,CAAC,CAAC,aAAa,EAAE,OAAO,CAAC,EAAE,IAAI,CAAC,EAAE,CAAC;YACtE,IAAI,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC;gBAAE,SAAS;YACnC,MAAM,EAAE,GAAG,MAAM,cAAc,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;YACjD,IAAI,CAAC,EAAE;gBAAE,SAAS;YAClB,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;YACrB,GAAG,CAAC,IAAI,CAAC,gBAAgB,CAAC,EAAE,EAAE,OAAO,CAAC,UAAU,EAAE,SAAS,EAAE,WAAW,EAAE,EAAE,QAAQ,EAAE,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC;QAC7G,CAAC;IACH,CAAC;IACD,OAAO,EAAE,GAAG,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC,EAAE,aAAa,EAAE,CAAC;AACvF,CAAC;AAED,KAAK,UAAU,eAAe,CAC5B,IAAY,EACZ,OAAe,EACf,KAAkB,EAClB,QAAqB,EACrB,KAAc;IAEd,MAAM,KAAK,GAAG,YAAY,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;IAC3C,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACrB,OAAO;YACL,GAAG,EAAE,EAAE;YACP,OAAO,EAAE,EAAE;YACX,WAAW,EAAE;gBACX,KAAK;oBACH,CAAC,CAAC,qJAAqJ;oBACvJ,CAAC,CAAC,0FAA0F;aAC/F;SACF,CAAC;IACJ,CAAC;IACD,MAAM,WAAW,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAChD,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,MAAM,0BAA0B,CAAC,IAAI,EAAE,KAAK,EAAE,QAAQ,EAAE,EAAE;QACpF,MAAM,KAAK,GAAG,kBAAkB,CAAC,QAAQ,QAAQ,kBAAkB,WAAW,EAAE,CAAC,CAAC;QAClF,OAAO,UAAU,CAAe,oBAAoB,KAAK,cAAc,CAAC,CAAC;IAC3E,CAAC,CAAC,CAAC;IACH,MAAM,SAAS,GAAG,GAAG,KAAK,CAAC,KAAK,KAAK,KAAK,CAAC,IAAI,IAAI,EAAE,EAAE,CAAC;IACxD,MAAM,GAAG,GAAG,EAAwB,CAAC;IACrC,MAAM,QAAQ,GAAG,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,iBAAiB,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,iBAAiB,CAAC;IAC/E,MAAM,SAAS,GAAG,wBAAwB,CAAC;IAC3C,KAAK,MAAM,IAAI,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;QAChC,IAAI,CAAC,CAAC,cAAc,IAAI,IAAI,CAAC,IAAI,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,IAAI,CAAC,MAAM,KAAK,KAAK,CAAC,MAAM;YAAE,SAAS;QACrG,MAAM,EAAE,GAAG,MAAM,SAAS,CAAC,OAAO,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;QACjD,IAAI,kBAAkB,CAAC,EAAE,CAAC,IAAI,EAAE,KAAK,CAAC;YAAE,SAAS;QACjD,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,mBAAmB,CAAC,SAAS,EAAE,GAAG,EAAE,CAAC,KAAK,KAAK,EAAE,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,IAAI,EAAE,EAAE,CAAC,CAAC;QACvG,IAAI,KAAK,GAAG,QAAQ,IAAI,MAAM,CAAC,MAAM,GAAG,SAAS;YAAE,SAAS;QAC5D,GAAG,CAAC,IAAI,CAAC,gBAAgB,CAAC,EAAE,EAAE,EAAE,CAAC,UAAU,EAAE,eAAe,EAAE,KAAK,CAAC,MAAM,EAAE,EAAE,aAAa,EAAE,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC;QAChJ,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IAC5B,CAAC;IACD,OAAO;QACL,GAAG,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC;QAC1D,OAAO,EAAE,CAAC,GAAG,OAAO,CAAC,OAAO,EAAE,6DAA6D,WAAW,EAAE,CAAC;QACzG,WAAW,EAAE,OAAO,CAAC,WAAW;KACjC,CAAC;AACJ,CAAC;AAED,SAAS,kBAAkB,CAAC,KAAkB,EAAE,MAAuB;IACrE,MAAM,eAAe,GAAG,IAAI,GAAG,EAA+D,CAAC;IAC/F,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QAC3B,IAAI,KAAK,CAAC,KAAK,KAAK,UAAU,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,KAAK,IAAI,CAAC,KAAK,CAAC,UAAU;YAAE,SAAS;QACxF,eAAe,CAAC,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,KAAK,EAAE,EAAE,WAAW,EAAE,KAAK,CAAC,UAAU,EAAE,WAAW,EAAE,KAAK,CAAC,KAAK,EAAE,KAAK,IAAI,IAAI,EAAE,CAAC,CAAC;IACxH,CAAC;IACD,OAAO,CAAC,KAAK,CAAC,SAAS,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE;QAC9C,MAAM,QAAQ,GAAG,eAAe,CAAC,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;QACrD,OAAO,EAAE,IAAI,EAAE,YAAY,EAAE,QAAQ,EAAE,QAAQ,CAAC,KAAK,EAAE,WAAW,EAAE,QAAQ,EAAE,WAAW,IAAI,IAAI,EAAE,WAAW,EAAE,QAAQ,EAAE,WAAW,IAAI,IAAI,EAAE,CAAC;IAClJ,CAAC,CAAC,CAAC;AACL,CAAC;AAED,SAAS,kBAAkB,CAAC,GAAuB;IACjD,MAAM,MAAM,GAAuB,EAAE,CAAC;IACtC,MAAM,OAAO,GAAuB,EAAE,CAAC;IACvC,KAAK,MAAM,EAAE,IAAI,GAAG,EAAE,CAAC;QACrB,IAAI,kBAAkB,CAAC,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC;YAClC,OAAO,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE,cAAc,EAAE,mBAAmB,EAAE,CAAC,CAAC;QACjF,CAAC;aAAM,CAAC;YACN,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAClB,CAAC;IACH,CAAC;IACD,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC;AAC7B,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,KAAY;IAC5C,MAAM,QAAQ,GAAG,MAAM,iBAAiB,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IACrD,MAAM,KAAK,GAAG,MAAM,UAAU,CAAc,UAAU,KAAK,CAAC,IAAI,WAAW,KAAK,CAAC,YAAY,EAAE,CAAC,CAAC;IACjG,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,iBAAiB,EAAE,GAAG,MAAM,QAAQ,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,YAAY,CAAC,CAAC;IAChG,MAAM,aAAa,GAAG,uBAAuB,CAAC,MAAM,CAAC,CAAC;IACtD,MAAM,WAAW,GAAG,MAAM,iBAAiB,CAAC,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,CAAC,YAAY,CAAC,CAAC;IACpF,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,aAAa,EAAE,GAAG,iBAAiB,CAAC,MAAM,CAAC,CAAC;IACrE,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC;IAC7D,MAAM,EAAE,GAAG,EAAE,UAAU,EAAE,aAAa,EAAE,GAAG,MAAM,gBAAgB,CAAC,QAAQ,CAAC,SAAS,EAAE,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,YAAY,EAAE,QAAQ,CAAC,CAAC;IAChI,MAAM,EAAE,GAAG,EAAE,SAAS,EAAE,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,gBAAgB,EAAE,GAAG,MAAM,eAAe,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,YAAY,EAAE,QAAQ,CAAC,CAAC;IAC9J,MAAM,cAAc,GAAG,CAAC,GAAG,WAAW,EAAE,GAAG,UAAU,EAAE,GAAG,SAAS,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,kBAAkB,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC;IAClH,MAAM,iBAAiB,GAAG,aAAa,IAAI,CAAC,cAAc,CAAC;IAC3D,MAAM,WAAW,GAAG,iBAAiB;QACnC,CAAC,CAAC,MAAM,eAAe,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,KAAK,EAAE,QAAQ,EAAE,aAAa,CAAC;QAC/E,CAAC,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,WAAW,EAAE,CAAC,qFAAqF,CAAC,EAAE,CAAC;IACnI,8FAA8F;IAC9F,yFAAyF;IACzF,MAAM,EAAE,GAAG,EAAE,UAAU,EAAE,OAAO,EAAE,cAAc,EAAE,WAAW,EAAE,iBAAiB,EAAE,GAAG,MAAM,gBAAgB,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,YAAY,CAAC,CAAC;IAC5I,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,kBAAkB,CAAC,CAAC,GAAG,WAAW,EAAE,GAAG,UAAU,EAAE,GAAG,SAAS,EAAE,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC;IAClH,MAAM,SAAS,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC;IAC3E,MAAM,WAAW,GAAG,kBAAkB,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;IACtD,MAAM,aAAa,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,aAAa,CAAC,CAAC,MAAM,CAAC;IACxE,MAAM,OAAO,GAAG;QACd,GAAG,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,KAAK,KAAK,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,gBAAyB,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QACnF,GAAG,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,kBAA2B,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QAC3E,GAAG,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,KAAK,KAAK,QAAQ,IAAI,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,kBAA2B,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QACrG,GAAG,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,UAAmB,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;KACzD,CAAC;IACF,MAAM,WAAW,GAAG,SAAS,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,sBAAsB,CAAC;IAC5F,MAAM,aAAa,GAAG,WAAW,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,WAAW,CAAC;IAC1E,MAAM,YAAY,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,CAAC,GAAG,QAAQ,CAAC,OAAO,EAAE,GAAG,aAAa,EAAE,GAAG,WAAW,CAAC,OAAO,EAAE,GAAG,aAAa,CAAC,OAAO,EAAE,GAAG,cAAc,CAAC,CAAC,CAAC,CAAC;IAChJ,MAAM,eAAe,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,CAAC,GAAG,QAAQ,CAAC,WAAW,EAAE,GAAG,gBAAgB,EAAE,GAAG,WAAW,CAAC,WAAW,EAAE,GAAG,aAAa,CAAC,WAAW,EAAE,GAAG,iBAAiB,EAAE,aAAa,CAAC,CAAC,CAAC,CAAC;IACpL,IAAI,iBAAiB,EAAE,CAAC;QACtB,eAAe,CAAC,IAAI,CAAC,2BAA2B,kBAAkB,gDAAgD,CAAC,CAAC;IACtH,CAAC;IACD,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACvB,YAAY,CAAC,IAAI,CAAC,WAAW,OAAO,CAAC,MAAM,oCAAoC,OAAO,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,sBAAsB,CAAC,CAAC;IACxI,CAAC;IACD,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACvB,YAAY,CAAC,IAAI,CAAC,aAAa,OAAO,CAAC,MAAM,qBAAqB,OAAO,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,2DAA2D,CAAC,CAAC;IAChK,CAAC;IACD,IAAI,aAAa,EAAE,CAAC;QAClB,eAAe,CAAC,IAAI,CAAC,gCAAgC,qBAAqB,4CAA4C,CAAC,CAAC;IAC1H,CAAC;IACD,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC1B,YAAY,CAAC,IAAI,CAAC,SAAS,UAAU,CAAC,MAAM,iCAAiC,UAAU,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,uFAAuF,CAAC,CAAC;IAC1M,CAAC;IACD,IAAI,aAAa,IAAI,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,MAAM,KAAK,eAAe,IAAI,EAAE,CAAC,MAAM,KAAK,SAAS,CAAC,EAAE,CAAC;QACvG,eAAe,CAAC,IAAI,CAAC,+GAA+G,CAAC,CAAC;IACxI,CAAC;IACD,MAAM,WAAW,GAAG;QAClB,aAAa,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,aAAa,4BAA4B,aAAa,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,IAAI;QACvG,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,MAAM,qBAAqB,OAAO,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,IAAI;QACnG,UAAU,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,UAAU,CAAC,MAAM,mBAAmB,UAAU,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,wBAAwB,CAAC,CAAC,CAAC,IAAI;KACjI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IAClB,MAAM,eAAe,GAAG,SAAS,CAAC,MAAM,GAAG,CAAC,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC;QACpE,CAAC,CAAC,SAAS,SAAS,CAAC,MAAM,IAAI,WAAW,QAAQ,WAAW,CAAC,MAAM,IAAI,aAAa,GAAG,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG;QACnJ,CAAC,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC;YAClB,CAAC,CAAC,qDAAqD,OAAO,CAAC,MAAM,iBAAiB,OAAO,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,YAAY,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,GAAG;YAC3L,CAAC,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC;gBACtB,CAAC,CAAC,+CAA+C,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG;gBAC1E,CAAC,CAAC,qDAAqD,CAAC;IAC9D,MAAM,QAAQ,GAAG,CAAC,GAAG,SAAS,EAAE,GAAG,OAAO,EAAE,GAAG,WAAW,EAAE,GAAG,OAAO,EAAE,GAAG,UAAU,CAAC,CAAC;IACvF,OAAO,cAAc,CAAC;QACpB,eAAe;QACf,QAAQ;QACR,OAAO;QACP,OAAO,EAAE;YACP,iBAAiB,KAAK,CAAC,IAAI,IAAI,KAAK,CAAC,YAAY,EAAE;YACnD,GAAG,YAAY;YACf,mFAAmF;YACnF,oDAAoD;YACpD,6EAA6E;YAC7E,2FAA2F;SAC5F;QACD,WAAW,EAAE,eAAe;QAC5B,MAAM,EAAE,KAAK;KACd,CAAC,CAAC;AACL,CAAC"}

@@ -9,5 +9,8 @@ import { Envelope } from './envelope.js';

};
probe_template?: string;
force_refresh?: boolean;
};
/** Match paths against simple globs with a double-star slash prefix plus optional star wildcards. */
export declare function globMatch(relative: string, pattern: string): boolean;
export declare function release_gap(input: Input): Promise<Envelope>;
export {};

@@ -7,2 +7,3 @@ import { readdir, readFile } from 'node:fs/promises';

import { createEnvelope } from './envelope.js';
import { resolveProbeTemplate } from './probe-templates.js';
const TTL = 60 * 60 * 1000;

@@ -17,10 +18,23 @@ async function walk(dir) {

}
function globMatch(relative, pattern) {
function escapeRegex(value) {
return value.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
}
/** Match paths against simple globs with a double-star slash prefix plus optional star wildcards. */
export function globMatch(relative, pattern) {
const normalizedRelative = relative.replace(/\\/g, '/');
const normalizedPattern = pattern.replace(/\\/g, '/');
function matchPath(pathValue, pathPattern) {
if (!pathPattern.includes('*')) {
return pathValue === pathPattern || pathValue.endsWith(`/${pathPattern}`) || pathValue.endsWith(pathPattern);
}
const regex = new RegExp(`(?:^|/)${pathPattern.split('*').map(escapeRegex).join('[^/]*')}$`);
return regex.test(pathValue);
}
if (normalizedPattern.includes('**/')) {
const [prefix, suffix] = normalizedPattern.split('**/');
return normalizedRelative.startsWith(prefix) && normalizedRelative.endsWith(suffix);
const idx = normalizedPattern.indexOf('**/');
const prefix = normalizedPattern.slice(0, idx);
const suffix = normalizedPattern.slice(idx + 3);
return normalizedRelative.startsWith(prefix) && matchPath(normalizedRelative, suffix);
}
return normalizedRelative === normalizedPattern || normalizedRelative.endsWith(normalizedPattern.replace(/^\*\//, ''));
return matchPath(normalizedRelative, normalizedPattern.replace(/^\*\//, ''));
}

@@ -44,2 +58,22 @@ function contextLines(text, needle) {

const not_checked = ['npm registry comparison only covers npm packages in v0.1.'];
const checked = [`fetched npm metadata for ${input.npm_package}`, `read package.json from ${input.repo}`];
let effectiveProbe = input.probe;
if (input.probe_template) {
const resolved = resolveProbeTemplate(input.probe_template);
if (resolved) {
const merged = {
file_glob: input.probe?.file_glob ?? resolved.file_glob,
contains: input.probe?.contains ?? resolved.contains
};
const usedTemplateField = (Boolean(resolved.file_glob) && !input.probe?.file_glob) ||
(Boolean(resolved.contains) && input.probe?.contains === undefined);
effectiveProbe = (merged.file_glob || merged.contains) ? merged : undefined;
if (usedTemplateField) {
checked.push(`resolved probe_template "${input.probe_template}" to file_glob ${merged.file_glob ?? '(none)'}${merged.contains ? ` (contains: ${merged.contains})` : ''}`);
}
}
else {
not_checked.push(`probe_template "${input.probe_template}" is not a known template id; no probe was applied.`);
}
}
try {

@@ -51,3 +85,4 @@ const mainPackage = await readPackageJsonFromClone(clone.dir);

let probe;
const probeRequested = Boolean(input.probe?.contains);
const contentProbe = Boolean(effectiveProbe?.contains);
const probeRequested = Boolean(effectiveProbe?.contains || effectiveProbe?.file_glob);
if (probeRequested && latestMeta?.dist?.tarball) {

@@ -60,13 +95,20 @@ const tarball = await downloadAndExtractTarball(latestMeta.dist.tarball);

for (const file of files) {
const relative = path.relative(root, file);
if (input.probe?.file_glob && !globMatch(relative, input.probe.file_glob))
const relative = path.relative(root, file).replace(/\\/g, '/');
if (effectiveProbe?.file_glob && !globMatch(relative, effectiveProbe.file_glob))
continue;
const text = await readFile(file, 'utf8').catch(() => '');
if (text.includes(input.probe.contains))
matches.push({ path: relative, context: contextLines(text, input.probe.contains) });
if (contentProbe) {
const text = await readFile(file, 'utf8').catch(() => '');
if (text.includes(effectiveProbe.contains))
matches.push({ path: relative, context: contextLines(text, effectiveProbe.contains) });
}
else {
matches.push({ path: relative });
}
}
probe = { probe: input.probe, matches, matched: matches.length > 0 };
probe = { probe: effectiveProbe, matches, matched: matches.length > 0 };
evidence.push(probe);
if (!probe.matched) {
evidence.push({ note: 'probe ran; no issue-specific match found in the published artifact' });
evidence.push({ note: contentProbe
? 'probe ran; no issue-specific match found in the published artifact'
: 'probe ran; no files matched the probe file_glob in the published artifact' });
}

@@ -86,5 +128,6 @@ }

const probeMatched = probe?.matched === true;
const releasedFix = mainPackage.version === latest && probeRequested && probeMatched;
// Existence-only probes (file_glob without contains) are evidence, not enough for released_fix.
const releasedFix = mainPackage.version === latest && contentProbe && probeMatched;
const verdict_summary = mainPackage.version === latest ? `main and npm are equal at ${latest}${latestPublished}.` : `main package version ${mainPackage.version ?? 'unknown'} differs from npm latest ${latest}${latestPublished}.`;
const envelope = createEnvelope({ verdict_summary, evidence, signals: releasedFix ? ['released_fix'] : [], checked: [`fetched npm metadata for ${input.npm_package}`, `read package.json from ${input.repo}`], not_checked, cached: false, fetched_at });
const envelope = createEnvelope({ verdict_summary, evidence, signals: releasedFix ? ['released_fix'] : [], checked, not_checked, cached: false, fetched_at });
await writeCache('release_gap', input, envelope, fetched_at);

@@ -91,0 +134,0 @@ return envelope;

@@ -1,1 +0,1 @@

{"version":3,"file":"release-gap.js","sourceRoot":"","sources":["../../src/core/release-gap.ts"],"names":[],"mappings":"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"}
{"version":3,"file":"release-gap.js","sourceRoot":"","sources":["../../src/core/release-gap.ts"],"names":[],"mappings":"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"}
import { Envelope } from './envelope.js';
import { SkillProfile } from './skill-fit.js';
type Input = {

@@ -8,4 +9,27 @@ repo: string;

limit?: number;
land_hints?: boolean;
skill_profile?: SkillProfile | string;
};
export type Candidate = {
number: number;
title: string;
labels: string[];
assignees: string[];
age_days: number;
comments: number;
url: string;
created_at: string;
updated_at: string;
quality_score: number;
quality_reasons: string[];
repro: 'present' | 'weak' | 'missing';
soft_ask: boolean;
likely_land_only?: boolean;
land_hint?: string;
fit_score?: number;
fit_reasons?: string[];
fit_matched?: string[];
fit_avoided?: string[];
};
export declare function scan(input: Input): Promise<Envelope>;
export {};
import { githubJson } from '../lib/github.js';
import { readCache } from '../lib/cache.js';
import { runSearchWithCanonicalRepo } from '../lib/repo.js';
import { isAutomationAuthor } from './bots.js';
import { assessIssueQuality } from './candidate-quality.js';
import { createEnvelope } from './envelope.js';
import { mentionsIssue } from './linkage.js';
import { resolveSkillProfile, scoreSkillFit } from './skill-fit.js';
const TRACKER_LIMIT = 'scan reflects the issue tracker only; tracker state can lag branches, main, releases, duplicates, and maintainer intent, so scan results are not vetted contribution targets. quality_score ranks tracker attractiveness only.';
const CONTRIB_POLICY_TTL = 24 * 60 * 60 * 1000;
const OPEN_PR_SEARCH_PER_PAGE = 30;
function sinceToDate(since) {

@@ -24,4 +29,4 @@ if (!since)

return true;
const title = issue.title.toLowerCase();
return keywords.some((keyword) => title.includes(keyword.toLowerCase()));
const haystack = `${issue.title}\n${issue.body ?? ''}`.toLowerCase();
return keywords.some((keyword) => haystack.includes(keyword.toLowerCase()));
}

@@ -59,2 +64,27 @@ function matchesLabel(issue, label) {

}
async function fetchRepoHints(repo) {
try {
const data = await githubJson(`/repos/${repo}`);
return { language: data.language ?? null, topics: data.topics ?? [], description: data.description ?? null };
}
catch {
return undefined;
}
}
function applySkillFit(issues, candidates, profile, repoHints) {
issues.forEach((issue, index) => {
const item = candidates[index];
if (!item)
return;
const fit = scoreSkillFit({
profile,
issue: { title: issue.title, body: issue.body, labels: item.labels },
repoHints
});
item.fit_score = fit.score;
item.fit_reasons = fit.reasons;
item.fit_matched = fit.matched;
item.fit_avoided = fit.avoided;
});
}
async function cachedPolicyHint(repo) {

@@ -113,2 +143,39 @@ const cached = await readCache('contrib_policy', { repo }, CONTRIB_POLICY_TTL);

}
async function applyLandHints(repo, candidates) {
for (const item of candidates) {
if (item.assignees.length > 0) {
item.likely_land_only = true;
item.land_hint = `assigned: ${item.assignees[0]}`;
}
}
if (candidates.length === 0)
return { checked: [], not_checked: [] };
if (candidates.every((item) => item.likely_land_only)) {
return { checked: ['all candidates already assigned; skipped open PR search for land-only hints'], not_checked: [] };
}
const byNumber = new Map(candidates.map((item) => [item.number, item]));
try {
const { result, context } = await runSearchWithCanonicalRepo(repo, async (fullName) => {
const query = encodeURIComponent(`repo:${fullName} is:pr is:open`);
return githubJson(`/search/issues?q=${query}&per_page=${OPEN_PR_SEARCH_PER_PAGE}`);
});
for (const pr of result.items) {
if (isAutomationAuthor(pr.user?.login))
continue;
const text = `${pr.title ?? ''}\n${pr.body ?? ''}`;
for (const [number, item] of byNumber) {
if (item.likely_land_only)
continue;
if (mentionsIssue(text, number)) {
item.likely_land_only = true;
item.land_hint = `open PR #${pr.number} ${pr.html_url}`;
}
}
}
return { checked: [...context.checked, 'checked open pull requests for land-only hints (assignees + human PR title/body issue references)'], not_checked: context.not_checked };
}
catch {
return { checked: [], not_checked: [`land-only hints via open PR search were not checked for ${repo} because the search request failed.`] };
}
}
export async function scan(input) {

@@ -121,9 +188,28 @@ const limit = Math.min(Math.max(input.limit ?? 25, 1), 100);

const sinceDate = sinceToDate(input.since);
const candidates = issues
const filteredIssues = issues
.filter((issue) => !('pull_request' in issue))
.filter((issue) => matchesLabel(issue, input.label))
.filter((issue) => matchesKeywords(issue, input.keywords))
.filter((issue) => !sinceDate || Date.parse(issue.created_at) >= sinceDate.getTime())
.map(candidate)
.sort((left, right) => right.quality_score - left.quality_score || Date.parse(right.updated_at) - Date.parse(left.updated_at))
.filter((issue) => !sinceDate || Date.parse(issue.created_at) >= sinceDate.getTime());
const filteredCandidates = filteredIssues.map(candidate);
const profile = resolveSkillProfile(input.skill_profile);
const skillFitChecked = [];
if (profile) {
const repoHints = await fetchRepoHints(input.repo);
applySkillFit(filteredIssues, filteredCandidates, profile, repoHints);
skillFitChecked.push(`skill_profile provided: computed fit_score for ${filteredCandidates.length} candidate${filteredCandidates.length === 1 ? '' : 's'}${repoHints ? ' using repo language/topics/description hints' : ' (repo hints unavailable; issue text/labels only)'}`);
}
else if (input.skill_profile !== undefined) {
skillFitChecked.push('skill_profile provided but could not be parsed into any recognized languages/topics/avoid terms; fit_score not computed');
}
else {
skillFitChecked.push('no skill_profile provided; fit_score not computed');
}
const landHintsEnabled = input.land_hints !== false;
const landHints = landHintsEnabled ? await applyLandHints(input.repo, filteredCandidates) : { checked: [], not_checked: [] };
const candidates = filteredCandidates
.sort((left, right) => right.quality_score - left.quality_score ||
(profile ? (right.fit_score ?? 0) - (left.fit_score ?? 0) : 0) ||
Number(Boolean(left.likely_land_only)) - Number(Boolean(right.likely_land_only)) ||
Date.parse(right.updated_at) - Date.parse(left.updated_at))
.slice(0, limit);

@@ -139,10 +225,13 @@ const policyHint = await cachedPolicyHint(input.repo);

'excluded pull requests',
'ranked candidates by quality_score (repro, labels, staleness, soft-ask, assignees)',
profile ? 'ranked candidates by quality_score then fit_score (repro, labels, staleness, soft-ask, assignees, skill fit)' : 'ranked candidates by quality_score (repro, labels, staleness, soft-ask, assignees)',
input.label ? `filtered by label: ${input.label}` : 'no label filter requested',
input.keywords?.length ? `filtered titles by keywords: ${input.keywords.join(', ')}` : 'no keyword filter requested',
input.keywords?.length ? `filtered titles and bodies by keywords: ${input.keywords.join(', ')}` : 'no keyword filter requested',
input.since ? `filtered by created date since ${input.since}` : 'no age filter requested',
landHintsEnabled ? 'land_hints enabled: flagged likely land-only candidates from assignees and open PR search' : 'land_hints disabled by request',
...skillFitChecked,
...policyHint.checked,
...landHints.checked,
...(widenHint ? [`widen hint: ${widenHint.reason}`] : [])
],
not_checked: [TRACKER_LIMIT, ...policyHint.not_checked],
not_checked: [TRACKER_LIMIT, ...policyHint.not_checked, ...landHints.not_checked],
cached: false

@@ -149,0 +238,0 @@ });

@@ -1,1 +0,1 @@

{"version":3,"file":"scan.js","sourceRoot":"","sources":["../../src/core/scan.ts"],"names":[],"mappings":"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"}
{"version":3,"file":"scan.js","sourceRoot":"","sources":["../../src/core/scan.ts"],"names":[],"mappings":"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"}

@@ -10,2 +10,3 @@ import { Envelope, Signal } from './envelope.js';

};
probe_template?: string;
};

@@ -46,4 +47,5 @@ type SubResult = {

referencedCommits: number;
networkPrs?: number;
}): Disposition;
export declare function worth_check(input: Input): Promise<WorthEnvelope>;
export {};

@@ -10,2 +10,3 @@ import { branch_scan } from './branch-scan.js';

import { githubJson } from '../lib/github.js';
import { upsertLedgerEntry } from '../lib/ledger.js';
const CROWDED_PRIOR_ATTEMPTS = 2;

@@ -46,6 +47,7 @@ const CROWDED_COMMITS = 3;

if (!linked?.ok)
return { priorAttempts: 0, referencedCommits: 0, openCloser: null };
return { priorAttempts: 0, referencedCommits: 0, networkPrs: 0, openCloser: null };
const prs = linked.result.evidence.filter((item) => item.kind === 'linked_pr' && item.ignored_reason !== 'automation_author');
const priorAttempts = prs.filter((item) => item.prior_attempt === true || (item.state === 'closed' && item.merged !== true)).length;
const referencedCommits = linked.result.evidence.filter((item) => item.kind === 'referenced_commit').length;
const networkPrs = linked.result.evidence.filter((item) => item.kind === 'network_pr').length;
const openWithCloses = prs.find((item) => item.state === 'open' && item.closes_issue === true);

@@ -57,3 +59,3 @@ const openAny = prs.find((item) => item.state === 'open');

: null;
return { priorAttempts, referencedCommits, openCloser };
return { priorAttempts, referencedCommits, networkPrs, openCloser };
}

@@ -106,2 +108,3 @@ function err(name, error) {

const { verdict, signals, priorAttempts, referencedCommits } = input;
const networkPrs = input.networkPrs ?? 0;
if (signals.some((signal) => ['shipped', 'released_fix', 'duplicate'].includes(signal)))

@@ -113,3 +116,3 @@ return 'blocked';

return 'claim_first';
if (priorAttempts >= CROWDED_PRIOR_ATTEMPTS || referencedCommits >= CROWDED_COMMITS)
if (priorAttempts >= CROWDED_PRIOR_ATTEMPTS || referencedCommits + networkPrs >= CROWDED_COMMITS)
return 'crowded';

@@ -164,4 +167,4 @@ if (verdict === 'ACT')

reasons.push(`closed unmerged linked PR found (prior attempt): ${linkedPrCitation(sub_results, (item) => item.state === 'closed' && item.merged !== true) ?? 'citation unavailable'}`);
if (density.priorAttempts > 0 || density.referencedCommits > 0) {
reasons.push(`lane density: ${density.priorAttempts} prior closed unmerged PR(s), ${density.referencedCommits} referenced commit(s).`);
if (density.priorAttempts > 0 || density.referencedCommits > 0 || density.networkPrs > 0) {
reasons.push(`lane density: ${density.priorAttempts} prior closed unmerged PR(s), ${density.referencedCommits} referenced commit(s), ${density.networkPrs} network/fork PR(s).`);
}

@@ -172,3 +175,4 @@ const disposition = chooseDisposition({

priorAttempts: density.priorAttempts,
referencedCommits: density.referencedCommits
referencedCommits: density.referencedCommits,
networkPrs: density.networkPrs
});

@@ -208,2 +212,16 @@ if (disposition === 'crowded' && !signals.includes('linked_pr_open')) {

}
async function recordLedgerBestEffort(input, result) {
try {
await upsertLedgerEntry({
repo: input.repo,
issue_number: input.issue_number,
verdict: result.verdict,
disposition: result.disposition,
source: 'worth_check'
});
}
catch {
// ledger persistence is best-effort local memory; it must never fail a worth_check run.
}
}
async function timed(name, timings, run) {

@@ -244,3 +262,5 @@ const started = Date.now();

timings_ms.total = Date.now() - totalStarted;
return finalize(phase1, timings_ms, true, skipped);
const shortCircuitResult = finalize(phase1, timings_ms, true, skipped);
await recordLedgerBestEffort(input, shortCircuitResult);
return shortCircuitResult;
}

@@ -254,3 +274,3 @@ // Phase 2: expensive checks in parallel (shared clone pool helps issue_vs_main + release_gap).

...(input.npm_package
? [timed('release_gap', timings_ms, () => runNamed('release_gap', () => release_gap({ repo: input.repo, npm_package: input.npm_package, probe: input.probe })))]
? [timed('release_gap', timings_ms, () => runNamed('release_gap', () => release_gap({ repo: input.repo, npm_package: input.npm_package, probe: input.probe, probe_template: input.probe_template })))]
: [])

@@ -260,4 +280,6 @@ ]);

timings_ms.total = Date.now() - totalStarted;
return finalize([...phase1, ...phase2], timings_ms, false);
const result = finalize([...phase1, ...phase2], timings_ms, false);
await recordLedgerBestEffort(input, result);
return result;
}
//# sourceMappingURL=worth-check.js.map

@@ -1,1 +0,1 @@

{"version":3,"file":"worth-check.js","sourceRoot":"","sources":["../../src/core/worth-check.ts"],"names":[],"mappings":"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"}
{"version":3,"file":"worth-check.js","sourceRoot":"","sources":["../../src/core/worth-check.ts"],"names":[],"mappings":"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"}

@@ -24,3 +24,5 @@ export type GithubIssue = {

export declare function githubToken(): string | undefined;
/** Clears the in-flight singleflight map and the TTL cache. For tests only. */
export declare function clearGithubCachesForTests(): void;
export declare function githubJson<T>(path: string, init?: RequestInit): Promise<T>;
export declare function fetchRaw(repo: string, branch: string, filePath: string): Promise<string | null>;

@@ -5,3 +5,51 @@ import { GitworthyError } from '../core/envelope.js';

}
const DEFAULT_GITHUB_CACHE_MS = 30_000;
// Keyed by the request path (including query string) as passed to githubJson.
// Only GET requests are coalesced/cached; mutations always bypass both maps.
const githubInFlight = new Map();
const githubTtlCache = new Map();
function githubCacheTtlMs() {
const raw = process.env.GITWORTHY_GITHUB_CACHE_MS;
if (raw === undefined || raw === '')
return DEFAULT_GITHUB_CACHE_MS;
const parsed = Number(raw);
return Number.isFinite(parsed) && parsed >= 0 ? parsed : DEFAULT_GITHUB_CACHE_MS;
}
function isGetRequest(init) {
return (init.method ?? 'GET').toUpperCase() === 'GET';
}
/** Clears the in-flight singleflight map and the TTL cache. For tests only. */
export function clearGithubCachesForTests() {
githubInFlight.clear();
githubTtlCache.clear();
}
export async function githubJson(path, init = {}) {
if (!isGetRequest(init)) {
return githubJsonUncached(path, init);
}
const ttlMs = githubCacheTtlMs();
if (ttlMs > 0) {
const cached = githubTtlCache.get(path);
if (cached) {
if (cached.expiresAt > Date.now())
return cached.value;
githubTtlCache.delete(path);
}
}
const inFlight = githubInFlight.get(path);
if (inFlight)
return inFlight;
const promise = githubJsonUncached(path, init)
.then((value) => {
if (ttlMs > 0)
githubTtlCache.set(path, { value, expiresAt: Date.now() + ttlMs });
return value;
})
.finally(() => {
githubInFlight.delete(path);
});
githubInFlight.set(path, promise);
return promise;
}
async function githubJsonUncached(path, init = {}) {
const token = githubToken();

@@ -8,0 +56,0 @@ if (!token) {

@@ -1,1 +0,1 @@

{"version":3,"file":"github.js","sourceRoot":"","sources":["../../src/lib/github.ts"],"names":[],"mappings":"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"}
{"version":3,"file":"github.js","sourceRoot":"","sources":["../../src/lib/github.ts"],"names":[],"mappings":"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"}
import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';
import { z } from 'zod';
import { branch_scan, contrib_policy, dupe_cluster, issue_vs_main, linked_work, release_gap, scan, worth_check } from '../core/index.js';
import { branch_scan, contrib_policy, doctor, dupe_cluster, hunt, issue_vs_main, ledger_list, ledger_lookup, ledger_record, linked_work, listProbeTemplates, org_scan, related_cluster, release_gap, scan, worth_check } from '../core/index.js';
import { GitworthyError } from '../core/envelope.js';

@@ -30,12 +30,56 @@ import { packageVersion } from '../lib/package-meta.js';

}
const skillProfileSchema = z.union([
z.string(),
z.object({
languages: z.array(z.string()).optional(),
topics: z.array(z.string()).optional(),
avoid: z.array(z.string()).optional()
})
]).optional();
export function createMcpServer() {
const server = new McpServer({ name: 'gitworthy', version: packageVersion() });
server.registerTool('doctor', { title: 'Doctor', inputSchema: { probe_repo: z.string().optional(), probe_issue_number: z.number().optional() } }, async (input) => withToolErrors(() => doctor(input)));
server.registerTool('branch_scan', { title: 'Branch scan', inputSchema: { repo: z.string(), keywords: z.array(z.string()), issue_number: z.number().optional(), max_age_days: z.number().optional(), force_refresh: z.boolean().optional() } }, async (input) => withToolErrors(() => branch_scan(input)));
server.registerTool('issue_vs_main', { title: 'Issue versus main', inputSchema: { repo: z.string(), issue_number: z.number() } }, async (input) => withToolErrors(() => issue_vs_main(input)));
server.registerTool('release_gap', { title: 'Release gap', inputSchema: { repo: z.string(), npm_package: z.string(), probe: z.object({ file_glob: z.string().optional(), contains: z.string().optional() }).optional(), force_refresh: z.boolean().optional() } }, async (input) => withToolErrors(() => release_gap(input)));
server.registerTool('release_gap', { title: 'Release gap', inputSchema: { repo: z.string(), npm_package: z.string(), probe: z.object({ file_glob: z.string().optional(), contains: z.string().optional() }).optional(), probe_template: z.string().optional(), force_refresh: z.boolean().optional() } }, async (input) => withToolErrors(() => release_gap(input)));
server.registerTool('dupe_cluster', { title: 'Duplicate cluster', inputSchema: { repo: z.string(), issue_number: z.number(), max_candidates: z.number().optional() } }, async (input) => withToolErrors(() => dupe_cluster(input)));
server.registerTool('related_cluster', { title: 'Related cluster', inputSchema: { repo: z.string(), issue_number: z.number().optional(), label: z.string().optional(), keywords: z.array(z.string()).optional(), limit: z.number().optional(), min_score: z.number().optional() } }, async (input) => withToolErrors(() => related_cluster(input)));
server.registerTool('linked_work', { title: 'Linked work', inputSchema: { repo: z.string(), issue_number: z.number() } }, async (input) => withToolErrors(() => linked_work(input)));
server.registerTool('contrib_policy', { title: 'Contribution policy', inputSchema: { repo: z.string(), force_refresh: z.boolean().optional() } }, async (input) => withToolErrors(() => contrib_policy(input)));
server.registerTool('worth_check', { title: 'Worth check', inputSchema: { repo: z.string(), issue_number: z.number(), npm_package: z.string().optional(), probe: z.object({ file_glob: z.string().optional(), contains: z.string().optional() }).optional() } }, async (input) => withToolErrors(() => worth_check(input)));
server.registerTool('scan', { title: 'Scan issues', inputSchema: { repo: z.string(), label: z.string().optional(), keywords: z.array(z.string()).optional(), since: z.string().optional(), limit: z.number().optional() } }, async (input) => withToolErrors(() => scan(input)));
server.registerTool('worth_check', { title: 'Worth check', inputSchema: { repo: z.string(), issue_number: z.number(), npm_package: z.string().optional(), probe: z.object({ file_glob: z.string().optional(), contains: z.string().optional() }).optional(), probe_template: z.string().optional() } }, async (input) => withToolErrors(() => worth_check(input)));
server.registerTool('scan', { title: 'Scan issues', inputSchema: { repo: z.string(), label: z.string().optional(), keywords: z.array(z.string()).optional(), since: z.string().optional(), limit: z.number().optional(), land_hints: z.boolean().optional(), skill_profile: skillProfileSchema } }, async (input) => withToolErrors(() => scan(input)));
server.registerTool('org_scan', { title: 'Org scan', inputSchema: { org: z.string(), label: z.string().optional(), keywords: z.array(z.string()).optional(), since: z.string().optional(), limit: z.number().optional(), max_repos: z.number().optional(), land_hints: z.boolean().optional(), skill_profile: skillProfileSchema } }, async (input) => withToolErrors(() => org_scan(input)));
server.registerTool('hunt', {
title: 'Hunt',
inputSchema: {
repo: z.string().optional(),
org: z.string().optional(),
label: z.string().optional(),
keywords: z.array(z.string()).optional(),
since: z.string().optional(),
scan_limit: z.number().optional(),
max_repos: z.number().optional(),
max_checks: z.number().optional(),
land_hints: z.boolean().optional(),
skip_likely_land_only: z.boolean().optional(),
skip_soft_ask: z.boolean().optional(),
skip_assigned: z.boolean().optional(),
skip_ledger_skip: z.boolean().optional(),
skip_policy_gate: z.boolean().optional(),
skill_profile: skillProfileSchema,
npm_package: z.string().optional()
}
}, async (input) => withToolErrors(() => hunt(input)));
server.registerTool('list_probe_templates', { title: 'List probe templates', inputSchema: {} }, async () => withToolErrors(async () => ({
verdict_summary: `listed ${listProbeTemplates().length} probe templates.`,
evidence: listProbeTemplates(),
checked: ['listed built-in probe templates'],
not_checked: ['probe templates are heuristics; they do not prove an issue-specific fix shipped.'],
signals: [],
cached: false,
fetched_at: new Date().toISOString()
})));
server.registerTool('ledger_lookup', { title: 'Ledger lookup', inputSchema: { repo: z.string(), issue_number: z.number() } }, async (input) => withToolErrors(() => ledger_lookup(input)));
server.registerTool('ledger_record', { title: 'Ledger record', inputSchema: { repo: z.string(), issue_number: z.number(), verdict: z.string().optional(), disposition: z.string().optional(), quality_score: z.number().optional(), notes: z.string().optional(), source: z.string().optional() } }, async (input) => withToolErrors(() => ledger_record(input)));
server.registerTool('ledger_list', { title: 'Ledger list', inputSchema: { repo: z.string().optional(), limit: z.number().optional() } }, async (input) => withToolErrors(() => ledger_list(input)));
return server;

@@ -42,0 +86,0 @@ }

@@ -1,1 +0,1 @@

{"version":3,"file":"server.js","sourceRoot":"","sources":["../../src/mcp/server.ts"],"names":[],"mappings":"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"}
{"version":3,"file":"server.js","sourceRoot":"","sources":["../../src/mcp/server.ts"],"names":[],"mappings":"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"}
{
"name": "gitworthy",
"version": "0.3.6",
"version": "0.3.9",
"mcpName": "io.github.trippyogi/gitworthy",

@@ -5,0 +5,0 @@ "description": "is it worth your commit? A pre-flight tool for OSS contribution targets: checks whether an issue is already done, in flight, fixed but unreleased, duplicated, or genuinely open.",

@@ -19,6 +19,10 @@ # gitworthy

```sh
npx -y gitworthy@0.3.6 check owner/repo#123
npx -y gitworthy@0.3.6 check owner/repo#123 --npm-package package-name --json
npx -y gitworthy@0.3.6 scan Shopify/cli --label "good first issue" --json
npx -y gitworthy@0.3.6 mcp
npx -y gitworthy@0.3.9 check owner/repo#123
npx -y gitworthy@0.3.9 check owner/repo#123 --npm-package package-name --json
npx -y gitworthy@0.3.9 hunt owner/repo --json
npx -y gitworthy@0.3.9 hunt openclaw --max-checks 3 --json
npx -y gitworthy@0.3.9 scan Shopify/cli --label "good first issue" --json
npx -y gitworthy@0.3.9 org openclaw --json
npx -y gitworthy@0.3.9 doctor --json
npx -y gitworthy@0.3.9 mcp
```

@@ -54,3 +58,3 @@

"command": "npx",
"args": ["-y", "gitworthy@0.3.6", "mcp"],
"args": ["-y", "gitworthy@0.3.9", "mcp"],
"env": { "GITHUB_TOKEN": "github_pat_..." }

@@ -101,5 +105,13 @@ }

### hunt
One-shot triage orchestrator: `scan` or `org_scan` → hard policy gate (`no_pr_path` blocks checks for that repo; `claim_required` warns first; `--skip-policy-gate` to disable) → drop likely land-only / soft-ask / assigned / ledger-SKIP rows → serial `worth_check` on up to `--max-checks` (default 3, max 5). Optional `--skill-profile languages=ts,go;topics=mcp;avoid=swift` ranks by `fit_score` after `quality_score`. Returns no ACT/SKIP signals of its own; read each `hunt_candidate.worth_check`. Prefer this over hand-rolling N× checks.
### doctor
Reports hunt readiness: token present, GitHub auth login, rate-limit remaining, timeline cross-reference visibility probe, cache directory writability, and local package version vs npm latest. Does not emit ACT/VERIFY/SKIP signals.
### scan
Tracker triage only: lists open issue tracker candidates ranked by `quality_score` (repro clarity, contributor-friendly labels, staleness, soft asks, assignees). Scan does not vet issues and does not produce ACT, VERIFY, or SKIP verdicts. It appends a one-line cached contribution-policy hint when available, or reminds you to run policy before investing. When a label filter yields a thin set (below `min(5, limit)` candidates) or every remaining candidate is assigned, scan appends a `widen_hint` evidence item with suggestions such as dropping the label, trying `help wanted`, or scanning without a label. Use it to find candidate issue numbers, then run `gitworthy check owner/repo#123` on specific targets.
Tracker triage only: lists open issue tracker candidates ranked by `quality_score` (repro clarity, contributor-friendly labels, staleness, soft asks, assignees). With `--skill-profile`, also computes `fit_score` and sorts by quality then fit. By default also sets `likely_land_only` / `land_hint` from assignees and one open-PR search so agents can skip land-only rows before `worth_check` (disable with `--no-land-hints`). Scan does not vet issues and does not produce ACT, VERIFY, or SKIP verdicts. It appends a one-line cached contribution-policy hint when available, or reminds you to run policy before investing. When a label filter yields a thin set (below `min(5, limit)` candidates) or every remaining candidate is assigned, scan appends a `widen_hint` evidence item with suggestions such as dropping the label, trying `help wanted`, or scanning without a label. Use it to find candidate issue numbers, then run `gitworthy check owner/repo#123` on specific targets.

@@ -110,5 +122,22 @@ Example composition:

gitworthy scan Shopify/cli --label "good first issue" --json
gitworthy org openclaw --max-repos 8 --json
# then pass selected issue numbers to gitworthy check
```
### org_scan
Fans out `scan` across the top public non-fork repos for an org or user (default 8). Candidates are tagged with `repo`, merged, and re-ranked by `quality_score` (then `fit_score` when a skill profile is set). Still tracker-only — run per-repo `policy` / `worth_check` before investing.
### related_cluster
Lexical connected-component clustering of related open issues (token overlap + shared error phrases). Advisory only — no embeddings. CLI: `gitworthy related owner/repo [issue]`.
### probe templates
Named release probes for `check` / `release`: `changelog`, `readme`, `package-exports`, `dist-index`, `src-index`. List with `gitworthy probes` or MCP `list_probe_templates`. Prefer `--probe-template changelog` over hand-rolled globs when one of these fits.
### ledger
Local scout memory under `~/.gitworthy/ledger` (override with `GITWORTHY_LEDGER_DIR`). `worth_check` auto-records verdict/disposition best-effort. Use `ledger show` / `ledger list` to avoid re-checking the same issues across chats.
### worth_check

@@ -115,0 +144,0 @@

+15
-12

@@ -9,12 +9,14 @@ # gitworthy skill

1. `npx gitworthy policy owner/repo --json` on unfamiliar repos.
2. `npx gitworthy scan owner/repo --json` (optional `--label`, `--keywords`, `--since`).
3. **Prefilter** scan hits before any `worth_check`:
- skip assigned / `soft_ask: true` / thin descriptions unless explicitly hunting those
- skip anything already labeled or known as linked-PR-open / land-only
- prefer higher `quality_score` and clear repro
4. Run **`worth_check` on at most 3–5** survivors.
5. **Serial `worth_check` per repo** (max concurrency **1–2**). Parallel MCP calls on the same large repo thrash clone/`ls-remote`/API budgets and erase pool wins.
1. `npx gitworthy doctor --json` once per machine/session if auth or rate limits are unsure.
2. Prefer **`npx gitworthy hunt owner/repo --json`** or **`npx gitworthy hunt openclaw --json`** (org) — policy gate → scan → filter → ≤3 serial worth_checks in one call.
3. Or manual funnel: `policy` → `scan`/`org` → prefilter → ≤3–5 serial `worth_check`.
4. **Prefilter** (also applied by `hunt` by default):
- skip `likely_land_only: true` / assigned / `soft_ask: true` / thin descriptions unless hunting those
- skip known linked-PR-open / land-only
- prefer higher `quality_score` (then `fit_score` if you pass `--skill-profile`) and clear repro
- check `gitworthy ledger show owner/repo#N --json` to avoid re-checking recent hits
5. If hunting manually: run **`worth_check` on at most 3–5** survivors, **serial per repo** (concurrency 1–2).
6. Optional: `related` for lexical sibling clusters; `--probe-template changelog` (etc.) for release probes; `probes` to list templates.
Do **not** worth_check every scan row.
Do **not** worth_check every scan row. `worth_check` auto-records to the local scout ledger. `hunt` returns no ACT/SKIP signals of its own — read each `hunt_candidate.worth_check`.

@@ -35,3 +37,3 @@ ## Commands

`--npm-package` alone reports package release state; it does not prove an issue-specific fix shipped. For that, add `--probe-glob` and `--probe-contains` so `release_gap` can search the published tarball.
`--npm-package` alone reports package release state; it does not prove an issue-specific fix shipped. For that, add `--probe-glob` / `--probe-contains`, or a named `--probe-template` (`changelog`, `readme`, `package-exports`, `dist-index`, `src-index`).

@@ -44,5 +46,6 @@ ## Interpretation

- `disposition` refines hunt action without changing the verdict: `land_only` = review/land the open linked PR (do not open a parallel fix); `greenfield` = start work; `crowded` = dense prior attempts; `claim_first` / `blocked` / `review` as named.
- Scan `likely_land_only` is a cheap prefilter only — still run `worth_check` before claiming.
- Read `timings_ms` and `perf` on `worth_check` when optimizing hunts (`clone_cached`, `file_list_cached`, `branch_tip_fetches`, short-circuit flags).
`scan` ranks tracker candidates by `quality_score` (repro clarity, labels, staleness, soft asks, assignees). Higher scores are better triage starts; scan still does not vet contribution targets—always follow with `worth_check` on a **short** list.
`scan` / `org_scan` rank tracker candidates by `quality_score` (repro clarity, labels, staleness, soft asks, assignees). Higher scores are better triage starts; scan still does not vet contribution targets—always follow with `worth_check` on a **short** list.

@@ -55,2 +58,2 @@ Mandatory rule: never make a public claim from a VERIFY verdict without performing the named human checks.

For accurate `linked_work`, `GITHUB_TOKEN` must see issue **timeline cross-referenced** events (classic PAT, or fine-grained with **Issues: Read**). Weak tokens omit cross-links and under-count prior PRs; gitworthy falls back to title/body search and warns in `not_checked`. Prefer the same token quality you use with `gh` for hunts.
For accurate `linked_work`, `GITHUB_TOKEN` must see issue **timeline cross-referenced** events (classic PAT, or fine-grained with **Issues: Read**). Weak tokens omit cross-links and under-count prior PRs; gitworthy falls back to title/body search and warns in `not_checked`. Prefer the same token quality you use with `gh` for hunts. Run `gitworthy doctor` to probe timeline visibility and rate remaining.