sync: stale skill detection, sentry filtering, claim removal, review improvements

Stale Detection:
- Detect skills removed/moved from GitHub (3 consecutive 404s threshold)
- Hide stale skills from browse/search, show warning banner on detail page
- Serve cached files with isStale flag when GitHub returns 404
- Add stale-check crawler command for batch verification
- CLI shows warning when installing stale skills from cache

Sentry & Error Handling:
- Filter browser extension errors and add denyUrls
- Anti-inflation measures and sentinel recalibration for curation

Claim & Removal:
- Enhanced ClaimForm with repo-level removal support
- Add repo-removal-request API endpoint with tests
- Improved owner page with bilingual content

Review Pipeline:
- Review version and reviewer tracking in submit API
- Source format filter for pending reviews
- Updated review tests

Other:
- Updated i18n strings (en/fa)
- BrowseFilters improvements
- Dockerfile updates

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
airano
2026-03-12 05:59:26 +03:30
parent 447f9eff59
commit 4212b5ba47
31 changed files with 1590 additions and 58 deletions

View File

@@ -98,6 +98,14 @@ export async function install(skillId: string, options: InstallOptions): Promise
const cachedFiles = await getSkillFiles(skillInfo.id);
if (cachedFiles && cachedFiles.files.length > 0) {
// Warn if skill is stale (served from cache because GitHub returned 404)
if (cachedFiles.isStale) {
spinner.warn(chalk.yellow(
'This skill may have been removed from its GitHub repository.\n' +
' Files were served from the SkillHub cache and may be outdated.'
));
spinner.start('Installing from cached files...');
}
// Use sourceFormat from API response if available
if (cachedFiles.sourceFormat) {
sourceFormat = cachedFiles.sourceFormat as SourceFormat;

View File

@@ -231,6 +231,8 @@ export interface SkillFilesResponse {
files: SkillFile[];
fromCache: boolean;
cachedAt?: string;
isStale?: boolean;
staleWarning?: string;
}
/**