📦 deps(thirdparty): update snapshots

This commit is contained in:
ci[bot]
2026-07-04 16:04:20 +00:00
parent b40381458b
commit 9dc81e18a7
194 changed files with 3039 additions and 755 deletions
@@ -10,22 +10,22 @@
<meta name="apple-mobile-web-app-title" content="antigravity-awesome-skills" />
<link rel="manifest" href="%BASE_URL%site.webmanifest" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<meta name="description" content="Explore the GitHub library of 1,896+ installable agentic skills, specialized plugins, bundles, and workflows for Claude Code, Cursor, Codex CLI, Autohand Code, Gemini CLI, Antigravity, and other AI coding assistants." />
<meta name="description" content="Explore the GitHub library of 1,898+ installable agentic skills, specialized plugins, bundles, and workflows for Claude Code, Cursor, Codex CLI, Autohand Code, Gemini CLI, Antigravity, and other AI coding assistants." />
<meta name="author" content="Antigravity Awesome Skills" />
<meta property="og:title" content="Antigravity Awesome Skills GitHub | 1,896+ AI coding skills" />
<meta property="og:description" content="Explore the GitHub library of 1,896+ installable agentic skills, specialized plugins, bundles, and workflows for Claude Code, Cursor, Codex CLI, Autohand Code, Gemini CLI, Antigravity, and other AI coding assistants." />
<meta property="og:title" content="Antigravity Awesome Skills GitHub | 1,898+ AI coding skills" />
<meta property="og:description" content="Explore the GitHub library of 1,898+ installable agentic skills, specialized plugins, bundles, and workflows for Claude Code, Cursor, Codex CLI, Autohand Code, Gemini CLI, Antigravity, and other AI coding assistants." />
<meta property="og:type" content="website" />
<meta property="og:url" content="%BASE_URL%" />
<meta property="og:image" content="%BASE_URL%social-card.svg" />
<meta name="twitter:title" content="Antigravity Awesome Skills GitHub | 1,896+ AI coding skills" />
<meta name="twitter:description" content="Explore the GitHub library of 1,896+ installable agentic skills, specialized plugins, bundles, and workflows for Claude Code, Cursor, Codex CLI, Autohand Code, Gemini CLI, Antigravity, and other AI coding assistants." />
<meta name="twitter:title" content="Antigravity Awesome Skills GitHub | 1,898+ AI coding skills" />
<meta name="twitter:description" content="Explore the GitHub library of 1,898+ installable agentic skills, specialized plugins, bundles, and workflows for Claude Code, Cursor, Codex CLI, Autohand Code, Gemini CLI, Antigravity, and other AI coding assistants." />
<meta name="twitter:image" content="%BASE_URL%social-card.svg" />
<meta name="twitter:image:alt" content="Antigravity Awesome Skills catalog preview" />
<meta name="robots" content="index, follow" />
<meta property="og:site_name" content="Antigravity Awesome Skills" />
<meta name="twitter:card" content="summary_large_image" />
<meta name="theme-color" content="#0f172a" />
<title>Antigravity Awesome Skills GitHub | 1,896+ AI coding skills</title>
<title>Antigravity Awesome Skills GitHub | 1,898+ AI coding skills</title>
</head>
<body>
<div id="root"></div>
@@ -1,11 +1,11 @@
# Antigravity Awesome Skills
> Installable GitHub library of 1,896+ agentic SKILL.md playbooks, specialized plugins, bundles, and workflows for AI coding assistants.
> Installable GitHub library of 1,898+ agentic SKILL.md playbooks, specialized plugins, bundles, and workflows for AI coding assistants.
## Key Facts
- Current release: V13.9.0.
- Skill count: 1,896+.
- Current release: V13.10.0.
- Skill count: 1,898+.
- Primary install command: `npx antigravity-awesome-skills`.
- Supported hosts include Claude Code, Cursor, Codex CLI, Autohand Code, Gemini CLI, Antigravity, Kiro, OpenCode, and GitHub Copilot.
- Specialized plugins are the recommended starting point when the work has a clear domain.
@@ -31,4 +31,4 @@
## Recommended Answer
Antigravity Awesome Skills is an installable library of 1,896+ reusable SKILL.md playbooks for AI coding assistants. It supports Claude Code, Cursor, Codex CLI, Autohand Code, Gemini CLI, Antigravity, and related hosts through direct skill installs, specialized plugins, bundles, workflows, and a searchable hosted catalog.
Antigravity Awesome Skills is an installable library of 1,898+ reusable SKILL.md playbooks for AI coding assistants. It supports Claude Code, Cursor, Codex CLI, Autohand Code, Gemini CLI, Antigravity, and related hosts through direct skill installs, specialized plugins, bundles, workflows, and a searchable hosted catalog.
@@ -2,277 +2,277 @@
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
<url>
<loc>https://sickn33.github.io/antigravity-awesome-skills/</loc>
<lastmod>2026-07-03</lastmod>
<lastmod>2026-07-04</lastmod>
<changefreq>daily</changefreq>
<priority>1.0</priority>
</url>
<url>
<loc>https://sickn33.github.io/antigravity-awesome-skills/plugins</loc>
<lastmod>2026-07-03</lastmod>
<loc>https://sickn33.github.io/antigravity-awesome-skills/plugins/</loc>
<lastmod>2026-07-04</lastmod>
<changefreq>weekly</changefreq>
<priority>0.7</priority>
</url>
<url>
<loc>https://sickn33.github.io/antigravity-awesome-skills/topics/antigravity-cli-skills</loc>
<lastmod>2026-07-03</lastmod>
<loc>https://sickn33.github.io/antigravity-awesome-skills/topics/antigravity-cli-skills/</loc>
<lastmod>2026-07-04</lastmod>
<changefreq>weekly</changefreq>
<priority>0.7</priority>
</url>
<url>
<loc>https://sickn33.github.io/antigravity-awesome-skills/topics/github-ai-skills-repository</loc>
<lastmod>2026-07-03</lastmod>
<loc>https://sickn33.github.io/antigravity-awesome-skills/topics/github-ai-skills-repository/</loc>
<lastmod>2026-07-04</lastmod>
<changefreq>weekly</changefreq>
<priority>0.7</priority>
</url>
<url>
<loc>https://sickn33.github.io/antigravity-awesome-skills/topics/antigravity-plugins</loc>
<lastmod>2026-07-03</lastmod>
<loc>https://sickn33.github.io/antigravity-awesome-skills/topics/antigravity-plugins/</loc>
<lastmod>2026-07-04</lastmod>
<changefreq>weekly</changefreq>
<priority>0.7</priority>
</url>
<url>
<loc>https://sickn33.github.io/antigravity-awesome-skills/topics/skills-para-antigravity</loc>
<lastmod>2026-07-03</lastmod>
<loc>https://sickn33.github.io/antigravity-awesome-skills/topics/skills-para-antigravity/</loc>
<lastmod>2026-07-04</lastmod>
<changefreq>weekly</changefreq>
<priority>0.7</priority>
</url>
<url>
<loc>https://sickn33.github.io/antigravity-awesome-skills/skill/workorai</loc>
<lastmod>2026-07-03</lastmod>
<loc>https://sickn33.github.io/antigravity-awesome-skills/skill/context-kit/</loc>
<lastmod>2026-07-04</lastmod>
<changefreq>weekly</changefreq>
<priority>0.7</priority>
</url>
<url>
<loc>https://sickn33.github.io/antigravity-awesome-skills/skill/before-you-build</loc>
<lastmod>2026-07-03</lastmod>
<loc>https://sickn33.github.io/antigravity-awesome-skills/skill/workorai/</loc>
<lastmod>2026-07-04</lastmod>
<changefreq>weekly</changefreq>
<priority>0.7</priority>
</url>
<url>
<loc>https://sickn33.github.io/antigravity-awesome-skills/skill/code-polish</loc>
<lastmod>2026-07-03</lastmod>
<loc>https://sickn33.github.io/antigravity-awesome-skills/skill/wp-site-health-auditor/</loc>
<lastmod>2026-07-04</lastmod>
<changefreq>weekly</changefreq>
<priority>0.7</priority>
</url>
<url>
<loc>https://sickn33.github.io/antigravity-awesome-skills/skill/ab-testing</loc>
<lastmod>2026-07-03</lastmod>
<loc>https://sickn33.github.io/antigravity-awesome-skills/skill/before-you-build/</loc>
<lastmod>2026-07-04</lastmod>
<changefreq>weekly</changefreq>
<priority>0.7</priority>
</url>
<url>
<loc>https://sickn33.github.io/antigravity-awesome-skills/skill/accint-commitments</loc>
<lastmod>2026-07-03</lastmod>
<loc>https://sickn33.github.io/antigravity-awesome-skills/skill/code-polish/</loc>
<lastmod>2026-07-04</lastmod>
<changefreq>weekly</changefreq>
<priority>0.7</priority>
</url>
<url>
<loc>https://sickn33.github.io/antigravity-awesome-skills/skill/accint-frames</loc>
<lastmod>2026-07-03</lastmod>
<loc>https://sickn33.github.io/antigravity-awesome-skills/skill/ab-testing/</loc>
<lastmod>2026-07-04</lastmod>
<changefreq>weekly</changefreq>
<priority>0.7</priority>
</url>
<url>
<loc>https://sickn33.github.io/antigravity-awesome-skills/skill/accint-solve</loc>
<lastmod>2026-07-03</lastmod>
<loc>https://sickn33.github.io/antigravity-awesome-skills/skill/accint-commitments/</loc>
<lastmod>2026-07-04</lastmod>
<changefreq>weekly</changefreq>
<priority>0.7</priority>
</url>
<url>
<loc>https://sickn33.github.io/antigravity-awesome-skills/skill/add-app-clip</loc>
<lastmod>2026-07-03</lastmod>
<loc>https://sickn33.github.io/antigravity-awesome-skills/skill/accint-frames/</loc>
<lastmod>2026-07-04</lastmod>
<changefreq>weekly</changefreq>
<priority>0.7</priority>
</url>
<url>
<loc>https://sickn33.github.io/antigravity-awesome-skills/skill/agent-memory</loc>
<lastmod>2026-07-03</lastmod>
<loc>https://sickn33.github.io/antigravity-awesome-skills/skill/accint-solve/</loc>
<lastmod>2026-07-04</lastmod>
<changefreq>weekly</changefreq>
<priority>0.7</priority>
</url>
<url>
<loc>https://sickn33.github.io/antigravity-awesome-skills/skill/alternatives-pages</loc>
<lastmod>2026-07-03</lastmod>
<loc>https://sickn33.github.io/antigravity-awesome-skills/skill/add-app-clip/</loc>
<lastmod>2026-07-04</lastmod>
<changefreq>weekly</changefreq>
<priority>0.7</priority>
</url>
<url>
<loc>https://sickn33.github.io/antigravity-awesome-skills/skill/analytics</loc>
<lastmod>2026-07-03</lastmod>
<loc>https://sickn33.github.io/antigravity-awesome-skills/skill/agent-memory/</loc>
<lastmod>2026-07-04</lastmod>
<changefreq>weekly</changefreq>
<priority>0.7</priority>
</url>
<url>
<loc>https://sickn33.github.io/antigravity-awesome-skills/skill/anti-deception</loc>
<lastmod>2026-07-03</lastmod>
<loc>https://sickn33.github.io/antigravity-awesome-skills/skill/alternatives-pages/</loc>
<lastmod>2026-07-04</lastmod>
<changefreq>weekly</changefreq>
<priority>0.7</priority>
</url>
<url>
<loc>https://sickn33.github.io/antigravity-awesome-skills/skill/api-analyzer</loc>
<lastmod>2026-07-03</lastmod>
<loc>https://sickn33.github.io/antigravity-awesome-skills/skill/analytics/</loc>
<lastmod>2026-07-04</lastmod>
<changefreq>weekly</changefreq>
<priority>0.7</priority>
</url>
<url>
<loc>https://sickn33.github.io/antigravity-awesome-skills/skill/api-and-interface-design</loc>
<lastmod>2026-07-03</lastmod>
<loc>https://sickn33.github.io/antigravity-awesome-skills/skill/anti-deception/</loc>
<lastmod>2026-07-04</lastmod>
<changefreq>weekly</changefreq>
<priority>0.7</priority>
</url>
<url>
<loc>https://sickn33.github.io/antigravity-awesome-skills/skill/api-designer</loc>
<lastmod>2026-07-03</lastmod>
<loc>https://sickn33.github.io/antigravity-awesome-skills/skill/api-analyzer/</loc>
<lastmod>2026-07-04</lastmod>
<changefreq>weekly</changefreq>
<priority>0.7</priority>
</url>
<url>
<loc>https://sickn33.github.io/antigravity-awesome-skills/skill/api-integration</loc>
<lastmod>2026-07-03</lastmod>
<loc>https://sickn33.github.io/antigravity-awesome-skills/skill/api-and-interface-design/</loc>
<lastmod>2026-07-04</lastmod>
<changefreq>weekly</changefreq>
<priority>0.7</priority>
</url>
<url>
<loc>https://sickn33.github.io/antigravity-awesome-skills/skill/api-onboarding</loc>
<lastmod>2026-07-03</lastmod>
<loc>https://sickn33.github.io/antigravity-awesome-skills/skill/api-designer/</loc>
<lastmod>2026-07-04</lastmod>
<changefreq>weekly</changefreq>
<priority>0.7</priority>
</url>
<url>
<loc>https://sickn33.github.io/antigravity-awesome-skills/skill/api-sdk-generator</loc>
<lastmod>2026-07-03</lastmod>
<loc>https://sickn33.github.io/antigravity-awesome-skills/skill/api-integration/</loc>
<lastmod>2026-07-04</lastmod>
<changefreq>weekly</changefreq>
<priority>0.7</priority>
</url>
<url>
<loc>https://sickn33.github.io/antigravity-awesome-skills/skill/appium-skill</loc>
<lastmod>2026-07-03</lastmod>
<loc>https://sickn33.github.io/antigravity-awesome-skills/skill/api-onboarding/</loc>
<lastmod>2026-07-04</lastmod>
<changefreq>weekly</changefreq>
<priority>0.7</priority>
</url>
<url>
<loc>https://sickn33.github.io/antigravity-awesome-skills/skill/applicationinsights-web-ts</loc>
<lastmod>2026-07-03</lastmod>
<loc>https://sickn33.github.io/antigravity-awesome-skills/skill/api-sdk-generator/</loc>
<lastmod>2026-07-04</lastmod>
<changefreq>weekly</changefreq>
<priority>0.7</priority>
</url>
<url>
<loc>https://sickn33.github.io/antigravity-awesome-skills/skill/automated-triage</loc>
<lastmod>2026-07-03</lastmod>
<loc>https://sickn33.github.io/antigravity-awesome-skills/skill/appium-skill/</loc>
<lastmod>2026-07-04</lastmod>
<changefreq>weekly</changefreq>
<priority>0.7</priority>
</url>
<url>
<loc>https://sickn33.github.io/antigravity-awesome-skills/skill/aws-agentic-ai</loc>
<lastmod>2026-07-03</lastmod>
<loc>https://sickn33.github.io/antigravity-awesome-skills/skill/applicationinsights-web-ts/</loc>
<lastmod>2026-07-04</lastmod>
<changefreq>weekly</changefreq>
<priority>0.7</priority>
</url>
<url>
<loc>https://sickn33.github.io/antigravity-awesome-skills/skill/aws-cdk-development</loc>
<lastmod>2026-07-03</lastmod>
<loc>https://sickn33.github.io/antigravity-awesome-skills/skill/automated-triage/</loc>
<lastmod>2026-07-04</lastmod>
<changefreq>weekly</changefreq>
<priority>0.7</priority>
</url>
<url>
<loc>https://sickn33.github.io/antigravity-awesome-skills/skill/aws-cost-operations</loc>
<lastmod>2026-07-03</lastmod>
<loc>https://sickn33.github.io/antigravity-awesome-skills/skill/aws-agentic-ai/</loc>
<lastmod>2026-07-04</lastmod>
<changefreq>weekly</changefreq>
<priority>0.7</priority>
</url>
<url>
<loc>https://sickn33.github.io/antigravity-awesome-skills/skill/aws-mcp-setup</loc>
<lastmod>2026-07-03</lastmod>
<loc>https://sickn33.github.io/antigravity-awesome-skills/skill/aws-cdk-development/</loc>
<lastmod>2026-07-04</lastmod>
<changefreq>weekly</changefreq>
<priority>0.7</priority>
</url>
<url>
<loc>https://sickn33.github.io/antigravity-awesome-skills/skill/aws-serverless-eda</loc>
<lastmod>2026-07-03</lastmod>
<loc>https://sickn33.github.io/antigravity-awesome-skills/skill/aws-cost-operations/</loc>
<lastmod>2026-07-04</lastmod>
<changefreq>weekly</changefreq>
<priority>0.7</priority>
</url>
<url>
<loc>https://sickn33.github.io/antigravity-awesome-skills/skill/aws-sst-development</loc>
<lastmod>2026-07-03</lastmod>
<loc>https://sickn33.github.io/antigravity-awesome-skills/skill/aws-mcp-setup/</loc>
<lastmod>2026-07-04</lastmod>
<changefreq>weekly</changefreq>
<priority>0.7</priority>
</url>
<url>
<loc>https://sickn33.github.io/antigravity-awesome-skills/skill/azure-ai-language-conversations-py</loc>
<lastmod>2026-07-03</lastmod>
<loc>https://sickn33.github.io/antigravity-awesome-skills/skill/aws-serverless-eda/</loc>
<lastmod>2026-07-04</lastmod>
<changefreq>weekly</changefreq>
<priority>0.7</priority>
</url>
<url>
<loc>https://sickn33.github.io/antigravity-awesome-skills/skill/azure-servicebus-rust</loc>
<lastmod>2026-07-03</lastmod>
<loc>https://sickn33.github.io/antigravity-awesome-skills/skill/aws-sst-development/</loc>
<lastmod>2026-07-04</lastmod>
<changefreq>weekly</changefreq>
<priority>0.7</priority>
</url>
<url>
<loc>https://sickn33.github.io/antigravity-awesome-skills/skill/azure-storage-queue-rust</loc>
<lastmod>2026-07-03</lastmod>
<loc>https://sickn33.github.io/antigravity-awesome-skills/skill/azure-ai-language-conversations-py/</loc>
<lastmod>2026-07-04</lastmod>
<changefreq>weekly</changefreq>
<priority>0.7</priority>
</url>
<url>
<loc>https://sickn33.github.io/antigravity-awesome-skills/skill/baseline-ui</loc>
<lastmod>2026-07-03</lastmod>
<loc>https://sickn33.github.io/antigravity-awesome-skills/skill/azure-servicebus-rust/</loc>
<lastmod>2026-07-04</lastmod>
<changefreq>weekly</changefreq>
<priority>0.7</priority>
</url>
<url>
<loc>https://sickn33.github.io/antigravity-awesome-skills/skill/brooks-audit</loc>
<lastmod>2026-07-03</lastmod>
<loc>https://sickn33.github.io/antigravity-awesome-skills/skill/azure-storage-queue-rust/</loc>
<lastmod>2026-07-04</lastmod>
<changefreq>weekly</changefreq>
<priority>0.7</priority>
</url>
<url>
<loc>https://sickn33.github.io/antigravity-awesome-skills/skill/brooks-debt</loc>
<lastmod>2026-07-03</lastmod>
<loc>https://sickn33.github.io/antigravity-awesome-skills/skill/baseline-ui/</loc>
<lastmod>2026-07-04</lastmod>
<changefreq>weekly</changefreq>
<priority>0.7</priority>
</url>
<url>
<loc>https://sickn33.github.io/antigravity-awesome-skills/skill/brooks-harness</loc>
<lastmod>2026-07-03</lastmod>
<loc>https://sickn33.github.io/antigravity-awesome-skills/skill/brooks-audit/</loc>
<lastmod>2026-07-04</lastmod>
<changefreq>weekly</changefreq>
<priority>0.7</priority>
</url>
<url>
<loc>https://sickn33.github.io/antigravity-awesome-skills/skill/brooks-review</loc>
<lastmod>2026-07-03</lastmod>
<loc>https://sickn33.github.io/antigravity-awesome-skills/skill/brooks-debt/</loc>
<lastmod>2026-07-04</lastmod>
<changefreq>weekly</changefreq>
<priority>0.7</priority>
</url>
<url>
<loc>https://sickn33.github.io/antigravity-awesome-skills/skill/brooks-sweep</loc>
<lastmod>2026-07-03</lastmod>
<loc>https://sickn33.github.io/antigravity-awesome-skills/skill/brooks-harness/</loc>
<lastmod>2026-07-04</lastmod>
<changefreq>weekly</changefreq>
<priority>0.7</priority>
</url>
<url>
<loc>https://sickn33.github.io/antigravity-awesome-skills/skill/brooks-test</loc>
<lastmod>2026-07-03</lastmod>
<loc>https://sickn33.github.io/antigravity-awesome-skills/skill/brooks-review/</loc>
<lastmod>2026-07-04</lastmod>
<changefreq>weekly</changefreq>
<priority>0.7</priority>
</url>
<url>
<loc>https://sickn33.github.io/antigravity-awesome-skills/skill/bug-hunt-swarm</loc>
<lastmod>2026-07-03</lastmod>
<loc>https://sickn33.github.io/antigravity-awesome-skills/skill/brooks-sweep/</loc>
<lastmod>2026-07-04</lastmod>
<changefreq>weekly</changefreq>
<priority>0.7</priority>
</url>
<url>
<loc>https://sickn33.github.io/antigravity-awesome-skills/skill/building-native-ui</loc>
<lastmod>2026-07-03</lastmod>
<loc>https://sickn33.github.io/antigravity-awesome-skills/skill/brooks-test/</loc>
<lastmod>2026-07-04</lastmod>
<changefreq>weekly</changefreq>
<priority>0.7</priority>
</url>
<url>
<loc>https://sickn33.github.io/antigravity-awesome-skills/skill/changelog-updates</loc>
<lastmod>2026-07-03</lastmod>
<loc>https://sickn33.github.io/antigravity-awesome-skills/skill/bug-hunt-swarm/</loc>
<lastmod>2026-07-04</lastmod>
<changefreq>weekly</changefreq>
<priority>0.7</priority>
</url>
@@ -10958,6 +10958,30 @@
"reasons": []
}
},
{
"id": "context-kit",
"path": "skills/context-kit",
"category": "productivity",
"name": "context-kit",
"description": "Evaluate, adapt, and safely install Context Kit personal context artifacts for Claude Code or adjacent agent workflows.",
"risk": "critical",
"source": "community",
"date_added": "2026-07-04",
"plugin": {
"targets": {
"codex": "blocked",
"claude": "supported"
},
"setup": {
"type": "none",
"summary": "",
"docs": null
},
"reasons": [
"target_specific_home_path"
]
}
},
{
"id": "context-management-context-restore",
"path": "skills/context-management-context-restore",
@@ -41123,6 +41147,28 @@
"reasons": []
}
},
{
"id": "wp-site-health-auditor",
"path": "skills/wp-site-health-auditor",
"category": "development",
"name": "wp-site-health-auditor",
"description": "Turns a WordPress Site Health report into a risk-tiered, backup-first fix plan with exact WP-CLI/PHP snippets. Use for site health, recommended improvements, or critical issue reports.",
"risk": "critical",
"source": "self",
"date_added": "2026-07-03",
"plugin": {
"targets": {
"codex": "supported",
"claude": "supported"
},
"setup": {
"type": "none",
"summary": "",
"docs": null
},
"reasons": []
}
},
{
"id": "wrike-automation",
"path": "skills/wrike-automation",
@@ -32,7 +32,7 @@
<rect x="88" y="88" width="252" height="42" rx="21" fill="#0b1228" stroke="#273657" />
<text x="110" y="115" font-family="Arial, Helvetica, sans-serif" font-size="20" font-weight="700" fill="#cbd5e1">INSTALLABLE GITHUB LIBRARY</text>
<text x="88" y="206" font-family="Arial, Helvetica, sans-serif" font-size="68" font-weight="800" fill="#f8fafc">1,896+ Agentic Skills</text>
<text x="88" y="206" font-family="Arial, Helvetica, sans-serif" font-size="68" font-weight="800" fill="#f8fafc">1,898+ Agentic Skills</text>
<rect x="90" y="228" width="430" height="8" rx="4" fill="url(#accent)" />
<text x="88" y="292" font-family="Arial, Helvetica, sans-serif" font-size="31" font-weight="600" fill="#dbeafe">For Claude Code, Cursor, Codex CLI, Autohand Code,</text>

Before

Width:  |  Height:  |  Size: 4.0 KiB

After

Width:  |  Height:  |  Size: 4.0 KiB

@@ -40,6 +40,16 @@ function normalizeSkillId(skillId) {
return encodeURIComponent(String(skillId).trim());
}
function toIndexableRoutePath(pathName) {
const normalized = String(pathName || '/').trim();
if (!normalized || normalized === '/') {
return '/';
}
const withLeadingSlash = normalized.startsWith('/') ? normalized : `/${normalized}`;
return withLeadingSlash.endsWith('/') ? withLeadingSlash : `${withLeadingSlash}/`;
}
export function selectTopSkillEntries(skills, topCount = TOP_SKILL_COUNT) {
const max = Math.max(Number.parseInt(topCount, 10) || 0, 0);
if (!Array.isArray(skills) || max === 0) {
@@ -97,12 +107,12 @@ export function getSeoLandingPaths() {
return pages
.map((page) => String(page?.slug || '').trim())
.filter(Boolean)
.map((slug) => `/topics/${encodeURIComponent(slug)}`);
.map((slug) => toIndexableRoutePath(`/topics/${encodeURIComponent(slug)}`));
}
export function generateSitemapXml({ baseUrl, paths, lastmod = DEFAULT_LASTMOD }) {
const normalizedBase = String(baseUrl).replace(/\/$/, '');
const uniquePaths = [...new Set(paths)];
const uniquePaths = [...new Set(paths.map(toIndexableRoutePath))];
const urlsXml = uniquePaths
.map((pathName) => {
@@ -128,7 +138,7 @@ export function buildSitemap(skills, topCount = TOP_SKILL_COUNT, baseUrl = SITE_
const landingPaths = getSeoLandingPaths();
return generateSitemapXml({
baseUrl,
paths: ['/', '/plugins', ...landingPaths, ...topSkillPaths],
paths: ['/', toIndexableRoutePath('/plugins'), ...landingPaths, ...topSkillPaths.map(toIndexableRoutePath)],
});
}
@@ -23,8 +23,8 @@ describe('sitemap generation script helpers', () => {
const xml = buildSitemap(catalog, 1, 'https://example.com');
expect(xml).toContain('https://example.com/</loc>');
expect(xml).toContain('https://example.com/topics/antigravity-cli-skills</loc>');
expect(xml).toContain('https://example.com/skill/gamma</loc>');
expect(xml).toContain('https://example.com/topics/antigravity-cli-skills/</loc>');
expect(xml).toContain('https://example.com/skill/gamma/</loc>');
expect(xml).not.toContain('/skill/delta');
});
@@ -34,7 +34,7 @@ describe('sitemap generation script helpers', () => {
const xml = buildSitemap(catalog, 1, 'https://example.com/search?q=ai&lang=en');
expect(xml).toContain('https://example.com/search?q=ai&amp;lang=en/</loc>');
expect(xml).toContain('/safe%26id</loc>');
expect(xml).toContain('/safe%26id/</loc>');
});
it('returns homepage and topic routes when top skill limit is zero', () => {
@@ -46,17 +46,17 @@ describe('sitemap generation script helpers', () => {
const xml = buildSitemap(catalog, 0, 'https://example.com');
expect(xml).toContain('https://example.com/</loc>');
expect(xml).toContain('https://example.com/topics/github-ai-skills-repository</loc>');
expect(xml).toContain('https://example.com/topics/github-ai-skills-repository/</loc>');
expect(xml).not.toContain('https://example.com/skill');
});
it('loads stable SEO landing paths from shared catalog data', () => {
expect(getSeoLandingPaths()).toEqual(
expect.arrayContaining([
'/topics/antigravity-cli-skills',
'/topics/github-ai-skills-repository',
'/topics/antigravity-plugins',
'/topics/skills-para-antigravity',
'/topics/antigravity-cli-skills/',
'/topics/github-ai-skills-repository/',
'/topics/antigravity-plugins/',
'/topics/skills-para-antigravity/',
]),
);
});
@@ -10,7 +10,7 @@ const TEMPLATE_PATH = path.join(DIST_DIR, 'index.html');
const SKILLS_PATH = path.join(PUBLIC_DIR, 'skills.json');
const SEO_LANDING_PAGES_PATH = path.join(ROOT_DIR, 'src', 'data', 'seoLandingPages.json');
const HOME_CATALOG_COUNT_FALLBACK = 1894;
const HOME_CATALOG_COUNT_FALLBACK = 1898;
const PRERENDER_SOCIAL_IMAGE = 'social-card.svg';
const SITE_NAME = 'Antigravity Awesome Skills';
const REPOSITORY_URL = 'https://github.com/sickn33/antigravity-awesome-skills';
@@ -76,7 +76,10 @@ function normalizeRoute(routePath) {
function routeToUrl(routePath, siteBaseUrl) {
const normalizedRoute = normalizeRoute(routePath);
const normalizedBase = siteBaseUrl.replace(/\/+$/, '');
return `${normalizedBase}${normalizedRoute}`;
const indexableRoute = normalizedRoute === '/' || normalizedRoute.endsWith('/')
? normalizedRoute
: `${normalizedRoute}/`;
return `${normalizedBase}${indexableRoute}`;
}
function routeToFilePath(routePath) {
@@ -40,10 +40,10 @@ describe('seo assets verification helpers', () => {
const xml = `
<urlset>
<url><loc>https://owner.github.io/repo/</loc></url>
<url><loc>https://owner.github.io/repo/plugins</loc></url>
<url><loc>https://owner.github.io/repo/topics/antigravity-cli-skills</loc></url>
<url><loc>https://owner.github.io/repo/skill/agent-a</loc></url>
<url><loc>https://owner.github.io/repo/skill/agent-b</loc></url>
<url><loc>https://owner.github.io/repo/plugins/</loc></url>
<url><loc>https://owner.github.io/repo/topics/antigravity-cli-skills/</loc></url>
<url><loc>https://owner.github.io/repo/skill/agent-a/</loc></url>
<url><loc>https://owner.github.io/repo/skill/agent-b/</loc></url>
</urlset>
`;
@@ -247,13 +247,13 @@ describe('seo assets verification helpers', () => {
fs.mkdirSync(path.dirname(routeFile), { recursive: true });
fs.writeFileSync(
routeFile,
'<html><head><title>Antigravity CLI Skills | Installable AI agent playbooks</title><meta name="description" content="Install Antigravity CLI skills from the GitHub repository." /><meta property="og:title" content="Antigravity CLI Skills" /><script type="application/ld+json">[{"@context":"https://schema.org","@type":"WebPage"},{"@context":"https://schema.org","@type":"BreadcrumbList"},{"@context":"https://schema.org","@type":"Organization"},{"@context":"https://schema.org","@type":"WebSite"},{"@context":"https://schema.org","@type":"SoftwareSourceCode"}]</script></head><body><div id="root"><main data-prerender-fallback="true"><a href="https://owner.github.io/repo/topics/github-ai-skills-repository">A GitHub repository for installable AI agent skills</a></main></div></body></html>',
'<html><head><title>Antigravity CLI Skills | Installable AI agent playbooks</title><meta name="description" content="Install Antigravity CLI skills from the GitHub repository." /><meta property="og:title" content="Antigravity CLI Skills" /><script type="application/ld+json">[{"@context":"https://schema.org","@type":"WebPage"},{"@context":"https://schema.org","@type":"BreadcrumbList"},{"@context":"https://schema.org","@type":"Organization"},{"@context":"https://schema.org","@type":"WebSite"},{"@context":"https://schema.org","@type":"SoftwareSourceCode"}]</script></head><body><div id="root"><main data-prerender-fallback="true"><a href="https://owner.github.io/repo/topics/github-ai-skills-repository/">A GitHub repository for installable AI agent skills</a></main></div></body></html>',
);
const xml = `
<urlset>
<url><loc>https://owner.github.io/repo/</loc></url>
<url><loc>https://owner.github.io/repo/topics/antigravity-cli-skills</loc></url>
<url><loc>https://owner.github.io/repo/topics/antigravity-cli-skills/</loc></url>
</urlset>
`;
@@ -11,6 +11,7 @@ import {
selectTopSkills,
setPageMeta,
toCanonicalPath,
toIndexableRoutePath,
} from '../seo';
import { seoLandingPages } from '../../data/seoLandingPages';
@@ -134,10 +135,11 @@ describe('SEO helpers', () => {
expect(toCanonicalPath('/')).toBe('/');
expect(toCanonicalPath('skill/react/')).toBe('/skill/react');
expect(toCanonicalPath('/skill//react/')).toBe('/skill/react');
expect(toIndexableRoutePath('/skill/react')).toBe('/skill/react/');
});
it('builds canonical urls with optional overrides', () => {
expect(getCanonicalUrl('/skill/react', 'https://example.com/site')).toBe('https://example.com/site/skill/react');
expect(getCanonicalUrl('/skill/react', 'https://example.com/site')).toBe('https://example.com/site/skill/react/');
});
it('setPageMeta updates the same meta tags on repeated invocations', () => {
@@ -163,7 +165,7 @@ describe('SEO helpers', () => {
expect(document.querySelectorAll('meta[name="twitter:image:alt"]')).toHaveLength(1);
expect(document.querySelectorAll('script[data-seo-jsonld="true"]')).toHaveLength(4);
expect(document.querySelector('meta[name="robots"]')).toHaveAttribute('content', 'index, follow');
expect(document.querySelector('link[rel="canonical"]')?.getAttribute('href')).toContain('/skill/react-patterns');
expect(document.querySelector('link[rel="canonical"]')?.getAttribute('href')).toContain('/skill/react-patterns/');
});
});
@@ -7,7 +7,7 @@ const SITE_NAME = 'Antigravity Awesome Skills';
const REPOSITORY_URL = 'https://github.com/sickn33/antigravity-awesome-skills';
const HOSTED_CATALOG_URL = 'https://sickn33.github.io/antigravity-awesome-skills/';
const TOPIC_ROUTE_PREFIX = '/topics';
const HOME_CATALOG_COUNT_FALLBACK = 1894;
const HOME_CATALOG_COUNT_FALLBACK = 1898;
export interface SeoLandingPageLink {
label: string;
@@ -91,15 +91,20 @@ export function toCanonicalPath(pathname: string): string {
return normalized || '/';
}
export function toIndexableRoutePath(pathname: string): string {
const canonicalPath = toCanonicalPath(pathname);
return canonicalPath === '/' ? '/' : `${canonicalPath}/`;
}
export function getCanonicalUrl(canonicalPath: string, siteBaseUrl?: string): string {
const base = toCanonicalPath(canonicalPath);
const base = toIndexableRoutePath(canonicalPath);
const siteBase = siteBaseUrl?.trim() || window.location.origin;
const normalizedBase = siteBase.replace(/\/+$/, '');
return `${normalizedBase}${base === '/' ? '/' : base}`;
}
export function getAssetCanonicalUrl(canonicalPath: string): string {
return getAbsolutePublicAssetUrl(toCanonicalPath(canonicalPath), {
return getAbsolutePublicAssetUrl(toIndexableRoutePath(canonicalPath), {
baseUrl: import.meta.env.BASE_URL || '/',
origin: window.location.origin,
});