sync: malware page, security alerts, review diagnostics, skill detail improvements

- Add malware security advisory page and SecurityAlertBanner component
- Add review diagnostics API and reviewed stats page
- Improve skill detail page with better scoring display and metadata
- Update review API endpoints with enhanced filtering and stats
- Add skill file serving improvements and cache enhancements
- Remove legacy curation scripts (moved to internal tooling)
- Update CLI search with score filtering support

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-03-31 16:08:12 +02:00
parent 3e22d2e238
commit 16ee9e3beb
33 changed files with 1231 additions and 3404 deletions

View File

@@ -7,10 +7,8 @@ import { getCached, setCache, cacheKeys, cacheTTL } from '@/lib/cache';
const db = createDb();
interface ReviewStatsData {
unreviewed: number;
auto_scored: number;
total_skills: number;
ai_reviewed: number;
verified: number;
needs_re_review: number;
total_reviews: number;
}
@@ -45,17 +43,18 @@ export async function GET(request: NextRequest) {
});
}
// Run stats and total reviews count in parallel
// Run pipeline stats and total reviews count in parallel
const [statusCounts, totalReviews] = await Promise.all([
skillReviewQueries.getStats(db),
skillReviewQueries.getPublicPipelineStats(db),
skillReviewQueries.countTotalReviews(db),
]);
// total_skills = sum of all statuses from pipeline query (browse-ready SKILL.md)
const totalSkills = Object.values(statusCounts).reduce((sum, n) => sum + n, 0);
const data: ReviewStatsData = {
unreviewed: statusCounts['unreviewed'] ?? 0,
auto_scored: statusCounts['auto-scored'] ?? 0,
total_skills: totalSkills,
ai_reviewed: statusCounts['ai-reviewed'] ?? 0,
verified: statusCounts['verified'] ?? 0,
needs_re_review: statusCounts['needs-re-review'] ?? 0,
total_reviews: totalReviews,
};