/** * Quality Scoring Algorithm (SMI-592) * * Provides a comprehensive quality scoring system for skills based on * repository metrics, activity signals, documentation, and trust indicators. */ /** * Input signals for quality scoring */ export interface QualityScoringInput { stars: number; forks: number; watchers?: number; updatedAt: string; createdAt: string; openIssues?: number; closedIssues?: number; contributors?: number; recentCommits?: number; hasReadme?: boolean; hasSkillFile?: boolean; hasLicense?: boolean; descriptionLength?: number; skillFileLength?: number; topics?: string[]; owner?: string; isVerifiedOwner?: boolean; license?: string | null; hasExamples?: boolean; hasTroubleshooting?: boolean; hasPrerequisites?: boolean; } /** * Detailed quality score breakdown */ export interface QualityScoreBreakdown { /** Total quality score (0-100) */ total: number; /** Repository popularity score (0-30) */ popularity: number; /** Activity and maintenance score (0-25) */ activity: number; /** Documentation quality score (0-25) */ documentation: number; /** Trust and credibility score (0-20) */ trust: number; /** Individual factor contributions */ factors: { stars: number; forks: number; watchers: number; recency: number; issueHealth: number; contributors: number; readme: number; skillFile: number; license: number; description: number; verifiedOwner: number; topics: number; contentQuality: number; }; } /** * Weight configuration for scoring factors */ export interface ScoringWeights { stars: number; forks: number; watchers: number; recency: number; issueHealth: number; contributors: number; recentActivity: number; readme: number; skillFile: number; description: number; contentQuality: number; license: number; verifiedOwner: number; topics: number; } /** * Quality scoring calculator * * @example * ```typescript * const scorer = new QualityScorer() * * const result = scorer.calculate({ * stars: 100, * forks: 20, * updatedAt: '2024-01-15T00:00:00Z', * createdAt: '2023-01-01T00:00:00Z', * hasReadme: true, * hasSkillFile: true, * license: 'MIT', * topics: ['claude-skill'] * }) * * console.log(result.total) // 0-100 * console.log(result.factors) // Individual contributions * ``` */ export declare class QualityScorer { private weights; constructor(weights?: Partial); /** * Calculate quality score from input signals */ calculate(input: QualityScoringInput): QualityScoreBreakdown; /** * Calculate trust tier from score and signals */ calculateTrustTier(input: QualityScoringInput, score: number): 'verified' | 'community' | 'experimental' | 'unknown'; /** * Score stars (logarithmic scale, max weight points) */ private scoreStars; /** * Score forks */ private scoreForks; /** * Score watchers */ private scoreWatchers; /** * Score recency (how recently updated) */ private scoreRecency; /** * Score issue health (ratio of closed to total issues) */ private scoreIssueHealth; /** * Score contributors */ private scoreContributors; /** * Score README presence */ private scoreReadme; /** * Score SKILL.md presence and quality */ private scoreSkillFile; /** * Score license */ private scoreLicense; /** * Score description quality */ private scoreDescription; /** * Score verified owner */ private scoreVerifiedOwner; /** * Score topics */ private scoreTopics; /** * Score content quality based on presence of key sections */ private scoreContentQuality; } /** * Quick score calculation with minimal inputs */ export declare function quickScore(stars: number, forks: number, updatedAt: string): number; /** * Calculate score from GitHub repository data */ export declare function scoreFromRepository(repo: { stars: number; forks: number; watchers?: number; updatedAt: string; createdAt: string; topics?: string[]; owner?: string; license?: string | null; description?: string | null; openIssues?: number; }): QualityScoreBreakdown; //# sourceMappingURL=QualityScorer.d.ts.map