📦 deps(thirdparty): update snapshots

This commit is contained in:
ci[bot]
2026-07-22 10:09:47 +00:00
parent 316c012df0
commit 60364c6660
353 changed files with 24740 additions and 1264 deletions
@@ -10,23 +10,23 @@
<meta name="apple-mobile-web-app-title" content="agentic-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="Use AAS Core preview for neutral catalog retrieval, exact agent-owned selection, validation, and planning for Codex, Claude Code, and compatible clients, backed by 1,969+ cataloged skills." />
<meta name="description" content="Use AAS Core preview for neutral catalog retrieval, exact agent-owned selection, validation, and planning for Codex, Claude Code, and compatible clients, backed by 1,987+ cataloged skills." />
<meta name="author" content="Agentic Awesome Skills" />
<meta name="msvalidate.01" content="CAC904EB0D2DD1B22B5F2BC540CAD654" />
<meta property="og:title" content="AAS Core Preview | Agent-first stacks backed by 1,969+ skills" />
<meta property="og:description" content="Use AAS Core preview for neutral catalog retrieval, exact agent-owned selection, validation, and planning for Codex, Claude Code, and compatible clients, backed by 1,969+ cataloged skills." />
<meta property="og:title" content="AAS Core Preview | Agent-first stacks backed by 1,987+ skills" />
<meta property="og:description" content="Use AAS Core preview for neutral catalog retrieval, exact agent-owned selection, validation, and planning for Codex, Claude Code, and compatible clients, backed by 1,987+ cataloged skills." />
<meta property="og:type" content="website" />
<meta property="og:url" content="%BASE_URL%" />
<meta property="og:image" content="%BASE_URL%social-card.png" />
<meta name="twitter:title" content="AAS Core Preview | Agent-first stacks backed by 1,969+ skills" />
<meta name="twitter:description" content="Use AAS Core preview for neutral catalog retrieval, exact agent-owned selection, validation, and planning for Codex, Claude Code, and compatible clients, backed by 1,969+ cataloged skills." />
<meta name="twitter:title" content="AAS Core Preview | Agent-first stacks backed by 1,987+ skills" />
<meta name="twitter:description" content="Use AAS Core preview for neutral catalog retrieval, exact agent-owned selection, validation, and planning for Codex, Claude Code, and compatible clients, backed by 1,987+ cataloged skills." />
<meta name="twitter:image" content="%BASE_URL%social-card.png" />
<meta name="twitter:image:alt" content="Agentic Awesome Skills catalog preview" />
<meta name="robots" content="index, follow" />
<meta property="og:site_name" content="Agentic Awesome Skills" />
<meta name="twitter:card" content="summary_large_image" />
<meta name="theme-color" content="#0f172a" />
<title>AAS Core Preview | Agent-first stacks backed by 1,969+ skills</title>
<title>AAS Core Preview | Agent-first stacks backed by 1,987+ skills</title>
</head>
<body>
<div id="root"></div>
+3 -3
View File
@@ -2415,9 +2415,9 @@
}
},
"node_modules/brace-expansion": {
"version": "1.1.15",
"resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.15.tgz",
"integrity": "sha512-EwOCDEex4quD37XhqM3omwtMoJjr//isUZz1JopUNWms+4Z2ViyM/k1YIRePpoVNnQhENnxtFjLaxNHrT7xIUg==",
"version": "1.1.16",
"resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.16.tgz",
"integrity": "sha512-IDw48K2/2kRkg9LdJxurvq3lV3aBgq0REY89duEqFRthjlPdXHKMj7EnQOXVckxzgisinf3nHfrcE2FufFLXMw==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -1,12 +1,12 @@
# Agentic Awesome Skills
> AAS Core is a local, agent-first control plane for complete catalog discovery, agent-owned skill selection, stack validation, and planning, backed by 1,969+ agentic SKILL.md playbooks.
> AAS Core is a local, agent-first control plane for complete catalog discovery, agent-owned skill selection, stack validation, and planning, backed by 1,987+ agentic SKILL.md playbooks.
## Key Facts
- Current release: V15.1.0.
- Release boundary: V15.1.0 includes AAS Core under the Agent-First Preview; pin this exact version when configuring the local MCP.
- Skill count: 1,969+.
- Current release: V15.3.0.
- Release boundary: V15.3.0 includes AAS Core under the Agent-First Preview; pin this exact version when configuring the local MCP.
- Skill count: 1,987+.
- Primary product: AAS Core preview, exposed through the `aas` CLI and local `aas-mcp` stdio server.
- Agent tools: `search_skills`, `get_skill`, `compose_stack`, `inspect_stack`, `diff_stack`, `export_selection_evidence`, and `inspect_selection_evidence`.
- Lifecycle: the client enumerates primary project capabilities, searches and compares candidates for each, covers every capability or reports a catalog gap, and chooses exact IDs. Core has no semantic policy favoring a small stack; each manifest has a technical maximum of 128 skills. Read-only `compose_stack` returns the manifest in memory, while a client or CLI persists `aas-stack.json` and optional `aas-selection-evidence.json` in an `artifact-dir` before CLI validation and immutable plan preview.
@@ -17,7 +17,7 @@
- Evidence privacy: the sidecar records raw `search_skills` queries, so catalog queries must not contain secrets or private source text.
- Preview boundary: planning may write an explicitly requested plan artifact but does not write target state; apply and recovery are not part of the supported preview path.
- Supported real clients include Codex CLI and Claude Code; the catalog also serves Cursor, Gemini CLI, Antigravity, and other compatible hosts.
- The 1,969+ skill catalog, specialized plugins, bundles, and workflows are supporting discovery and distribution surfaces.
- The 1,987+ skill catalog, specialized plugins, bundles, and workflows are supporting discovery and distribution surfaces.
- Repository: https://github.com/sickn33/agentic-awesome-skills
- Hosted catalog and companion review surface: https://sickn33.github.io/agentic-awesome-skills/
- Specialized plugin landing page: https://sickn33.github.io/agentic-awesome-skills/plugins
File diff suppressed because it is too large Load Diff
@@ -2478,15 +2478,17 @@
"date_added": "2026-07-15",
"plugin": {
"targets": {
"codex": "supported",
"claude": "supported"
"codex": "blocked",
"claude": "blocked"
},
"setup": {
"type": "none",
"summary": "",
"docs": null
"type": "manual",
"summary": "Requires a separately installed, user-approved anywrite executable at an explicit absolute path.",
"docs": "SKILL.md"
},
"reasons": []
"reasons": [
"explicit_target_restriction"
]
},
"source_type": "community",
"source_repo": "Antheurus/anywrite",
@@ -21882,6 +21884,39 @@
"reasons": []
}
},
{
"id": "hf-cloud-aws-context-discovery",
"path": "skills/hf-cloud-aws-context-discovery",
"category": "cloud",
"name": "hf-cloud-aws-context-discovery",
"description": "Discover the effective local AWS profile, region, account, and caller identity before any AWS task without exposing credentials.",
"risk": "safe",
"source": "https://github.com/huggingface/skills/tree/main/skills/hf-cloud-aws-context-discovery",
"date_added": "2026-07-21",
"plugin": {
"targets": {
"codex": "supported",
"claude": "supported"
},
"setup": {
"type": "none",
"summary": "",
"docs": null
},
"reasons": []
},
"source_type": "official",
"source_repo": "huggingface/skills",
"license": "Apache-2.0",
"license_source": "https://github.com/huggingface/skills/blob/main/LICENSE",
"tags": [
"hugging-face",
"aws",
"credentials",
"discovery",
"cloud"
]
},
{
"id": "hf-mcp",
"path": "skills/hf-mcp",
@@ -27650,13 +27685,80 @@
"reasons": []
}
},
{
"id": "markstream-angular",
"path": "skills/markstream-angular",
"category": "frontend",
"name": "markstream-angular",
"description": "Integrate the alpha markstream-angular renderer into Angular 20+ applications with standalone components, signals, safe HTML defaults, and optional peer features.",
"risk": "critical",
"source": "https://github.com/Simon-He95/markstream-vue/tree/main/.agents/skills/markstream-angular",
"date_added": "2026-07-21",
"plugin": {
"targets": {
"codex": "supported",
"claude": "supported"
},
"setup": {
"type": "none",
"summary": "",
"docs": null
},
"reasons": []
},
"source_type": "official",
"source_repo": "Simon-He95/markstream-vue",
"license": "MIT",
"license_source": "https://github.com/Simon-He95/markstream-vue/blob/main/license",
"tags": [
"angular",
"markdown",
"streaming",
"ai-chat",
"frontend"
]
},
{
"id": "markstream-custom-components",
"path": "skills/markstream-custom-components",
"category": "frontend",
"name": "markstream-custom-components",
"description": "Override Markstream node renderers and add trusted custom tags across Vue, React, Svelte, and Angular using scoped or renderer-local mappings.",
"risk": "critical",
"source": "https://github.com/Simon-He95/markstream-vue/tree/main/.agents/skills/markstream-custom-components",
"date_added": "2026-07-21",
"plugin": {
"targets": {
"codex": "supported",
"claude": "supported"
},
"setup": {
"type": "none",
"summary": "",
"docs": null
},
"reasons": []
},
"source_type": "official",
"source_repo": "Simon-He95/markstream-vue",
"license": "MIT",
"license_source": "https://github.com/Simon-He95/markstream-vue/blob/main/license",
"tags": [
"markdown",
"components",
"vue",
"react",
"svelte",
"angular"
]
},
{
"id": "markstream-install",
"path": "skills/markstream-install",
"category": "frontend",
"name": "markstream-install",
"description": "Install and configure Markstream streaming Markdown renderers for Vue, React, Svelte, Angular, Nuxt, Next.js, and Vue 2 applications.",
"risk": "safe",
"risk": "critical",
"source": "https://github.com/Simon-He95/markstream-vue/tree/main/.agents/skills/markstream-install",
"date_added": "2026-07-19",
"plugin": {
@@ -27685,6 +27787,270 @@
"ai-chat"
]
},
{
"id": "markstream-migration",
"path": "skills/markstream-migration",
"category": "frontend",
"name": "markstream-migration",
"description": "Audit and migrate an existing Markdown renderer to Markstream while preserving custom renderers, security policy, streaming behavior, and explicit parity gaps.",
"risk": "critical",
"source": "https://github.com/Simon-He95/markstream-vue/tree/main/.agents/skills/markstream-migration",
"date_added": "2026-07-21",
"plugin": {
"targets": {
"codex": "supported",
"claude": "supported"
},
"setup": {
"type": "none",
"summary": "",
"docs": null
},
"reasons": []
},
"source_type": "official",
"source_repo": "Simon-He95/markstream-vue",
"license": "MIT",
"license_source": "https://github.com/Simon-He95/markstream-vue/blob/main/license",
"tags": [
"markdown",
"migration",
"streaming",
"security",
"frontend"
]
},
{
"id": "markstream-nuxt",
"path": "skills/markstream-nuxt",
"category": "frontend",
"name": "markstream-nuxt",
"description": "Integrate markstream-vue into Nuxt 3 or 4 with SSR-safe client boundaries, renderer modes, explicit CSS, and browser-only optional peers.",
"risk": "critical",
"source": "https://github.com/Simon-He95/markstream-vue/tree/main/.agents/skills/markstream-nuxt",
"date_added": "2026-07-21",
"plugin": {
"targets": {
"codex": "supported",
"claude": "supported"
},
"setup": {
"type": "none",
"summary": "",
"docs": null
},
"reasons": []
},
"source_type": "official",
"source_repo": "Simon-He95/markstream-vue",
"license": "MIT",
"license_source": "https://github.com/Simon-He95/markstream-vue/blob/main/license",
"tags": [
"nuxt",
"vue",
"ssr",
"markdown",
"streaming"
]
},
{
"id": "markstream-react",
"path": "skills/markstream-react",
"category": "frontend",
"name": "markstream-react",
"description": "Integrate the beta markstream-react renderer into React 18+ or Next.js with correct client/server entrypoints, CSS, streaming state, and component overrides.",
"risk": "critical",
"source": "https://github.com/Simon-He95/markstream-vue/tree/main/.agents/skills/markstream-react",
"date_added": "2026-07-21",
"plugin": {
"targets": {
"codex": "supported",
"claude": "supported"
},
"setup": {
"type": "none",
"summary": "",
"docs": null
},
"reasons": []
},
"source_type": "official",
"source_repo": "Simon-He95/markstream-vue",
"license": "MIT",
"license_source": "https://github.com/Simon-He95/markstream-vue/blob/main/license",
"tags": [
"react",
"nextjs",
"markdown",
"streaming",
"ssr"
]
},
{
"id": "markstream-svelte",
"path": "skills/markstream-svelte",
"category": "frontend",
"name": "markstream-svelte",
"description": "Integrate the beta markstream-svelte renderer into Svelte 5 or SvelteKit with runes, explicit CSS, smooth streaming, workers, and SSR-safe boundaries.",
"risk": "critical",
"source": "https://github.com/Simon-He95/markstream-vue/tree/main/.agents/skills/markstream-svelte",
"date_added": "2026-07-21",
"plugin": {
"targets": {
"codex": "supported",
"claude": "supported"
},
"setup": {
"type": "none",
"summary": "",
"docs": null
},
"reasons": []
},
"source_type": "official",
"source_repo": "Simon-He95/markstream-vue",
"license": "MIT",
"license_source": "https://github.com/Simon-He95/markstream-vue/blob/main/license",
"tags": [
"svelte",
"sveltekit",
"markdown",
"streaming",
"ssr"
]
},
{
"id": "markstream-vue",
"path": "skills/markstream-vue",
"category": "frontend",
"name": "markstream-vue",
"description": "Integrate markstream-vue into plain Vue 3 with renderer modes, code and DOM choices, streaming state, virtualization, optional peers, and scoped components.",
"risk": "critical",
"source": "https://github.com/Simon-He95/markstream-vue/tree/main/.agents/skills/markstream-vue",
"date_added": "2026-07-21",
"plugin": {
"targets": {
"codex": "supported",
"claude": "supported"
},
"setup": {
"type": "none",
"summary": "",
"docs": null
},
"reasons": []
},
"source_type": "official",
"source_repo": "Simon-He95/markstream-vue",
"license": "MIT",
"license_source": "https://github.com/Simon-He95/markstream-vue/blob/main/license",
"tags": [
"vue",
"markdown",
"streaming",
"virtualization",
"ai-chat"
]
},
{
"id": "markstream-vue2",
"path": "skills/markstream-vue2",
"category": "frontend",
"name": "markstream-vue2",
"description": "Integrate markstream-vue2 into Vue 2.6 or 2.7 with correct Composition API decisions, CSS, streaming state, optional peers, and scoped overrides.",
"risk": "critical",
"source": "https://github.com/Simon-He95/markstream-vue/tree/main/.agents/skills/markstream-vue2",
"date_added": "2026-07-21",
"plugin": {
"targets": {
"codex": "supported",
"claude": "supported"
},
"setup": {
"type": "none",
"summary": "",
"docs": null
},
"reasons": []
},
"source_type": "official",
"source_repo": "Simon-He95/markstream-vue",
"license": "MIT",
"license_source": "https://github.com/Simon-He95/markstream-vue/blob/main/license",
"tags": [
"vue2",
"markdown",
"streaming",
"compatibility",
"frontend"
]
},
{
"id": "markstream-vue2-cli",
"path": "skills/markstream-vue2-cli",
"category": "frontend",
"name": "markstream-vue2-cli",
"description": "Integrate markstream-vue2 into Vue CLI or Webpack 4 with export-map-safe CSS, CDN worker fallbacks, and conservative code-block defaults.",
"risk": "critical",
"source": "https://github.com/Simon-He95/markstream-vue/tree/main/.agents/skills/markstream-vue2-cli",
"date_added": "2026-07-21",
"plugin": {
"targets": {
"codex": "supported",
"claude": "supported"
},
"setup": {
"type": "none",
"summary": "",
"docs": null
},
"reasons": []
},
"source_type": "official",
"source_repo": "Simon-He95/markstream-vue",
"license": "MIT",
"license_source": "https://github.com/Simon-He95/markstream-vue/blob/main/license",
"tags": [
"vue2",
"vue-cli",
"webpack4",
"markdown",
"workers"
]
},
{
"id": "markstream-vue2-vite",
"path": "skills/markstream-vue2-vite",
"category": "frontend",
"name": "markstream-vue2-vite",
"description": "Integrate markstream-vue2 into Vue 2 plus Vite with bundled worker imports, CSS ordering, Composition API compatibility, and safe streaming defaults.",
"risk": "critical",
"source": "https://github.com/Simon-He95/markstream-vue/tree/main/.agents/skills/markstream-vue2-vite",
"date_added": "2026-07-21",
"plugin": {
"targets": {
"codex": "supported",
"claude": "supported"
},
"setup": {
"type": "none",
"summary": "",
"docs": null
},
"reasons": []
},
"source_type": "official",
"source_repo": "Simon-He95/markstream-vue",
"license": "MIT",
"license_source": "https://github.com/Simon-He95/markstream-vue/blob/main/license",
"tags": [
"vue2",
"vite",
"markdown",
"workers",
"streaming"
]
},
{
"id": "mason",
"path": "skills/agent-squad/mason",
@@ -29423,6 +29789,58 @@
"reasons": []
}
},
{
"id": "n8n-agents",
"path": "skills/n8n-agents",
"category": "automation",
"name": "n8n-agents",
"description": "Design n8n AI agents, chains, classifiers, extractors, tool calling, memory, RAG, structured output, and human-review flows.",
"risk": "critical",
"source": "https://github.com/czlonkowski/n8n-skills/tree/main/skills/n8n-agents",
"date_added": "2026-07-21",
"plugin": {
"targets": {
"codex": "supported",
"claude": "supported"
},
"setup": {
"type": "none",
"summary": "",
"docs": null
},
"reasons": []
},
"source_type": "community",
"source_repo": "czlonkowski/n8n-skills",
"license": "MIT",
"license_source": "https://github.com/czlonkowski/n8n-skills/blob/main/LICENSE"
},
{
"id": "n8n-binary-and-data",
"path": "skills/n8n-binary-and-data",
"category": "automation",
"name": "n8n-binary-and-data",
"description": "Handle n8n files and binary data across uploads, downloads, transforms, multimodal inputs, agent tools, and chat surfaces.",
"risk": "unknown",
"source": "https://github.com/czlonkowski/n8n-skills/tree/main/skills/n8n-binary-and-data",
"date_added": "2026-07-21",
"plugin": {
"targets": {
"codex": "supported",
"claude": "supported"
},
"setup": {
"type": "none",
"summary": "",
"docs": null
},
"reasons": []
},
"source_type": "community",
"source_repo": "czlonkowski/n8n-skills",
"license": "MIT",
"license_source": "https://github.com/czlonkowski/n8n-skills/blob/main/LICENSE"
},
{
"id": "n8n-code-javascript",
"path": "skills/n8n-code-javascript",
@@ -29467,6 +29885,58 @@
"reasons": []
}
},
{
"id": "n8n-code-tool",
"path": "skills/n8n-code-tool",
"category": "automation",
"name": "n8n-code-tool",
"description": "Write and debug JavaScript or Python for the AI-callable n8n Custom Code Tool, including schemas, sandbox limits, and return formats.",
"risk": "unknown",
"source": "https://github.com/czlonkowski/n8n-skills/tree/main/skills/n8n-code-tool",
"date_added": "2026-07-21",
"plugin": {
"targets": {
"codex": "supported",
"claude": "supported"
},
"setup": {
"type": "none",
"summary": "",
"docs": null
},
"reasons": []
},
"source_type": "community",
"source_repo": "czlonkowski/n8n-skills",
"license": "MIT",
"license_source": "https://github.com/czlonkowski/n8n-skills/blob/main/LICENSE"
},
{
"id": "n8n-error-handling",
"path": "skills/n8n-error-handling",
"category": "automation",
"name": "n8n-error-handling",
"description": "Design visible, structured, recoverable n8n failures using error outputs, retries, Error Trigger workflows, and HTTP error responses.",
"risk": "unknown",
"source": "https://github.com/czlonkowski/n8n-skills/tree/main/skills/n8n-error-handling",
"date_added": "2026-07-21",
"plugin": {
"targets": {
"codex": "supported",
"claude": "supported"
},
"setup": {
"type": "none",
"summary": "",
"docs": null
},
"reasons": []
},
"source_type": "community",
"source_repo": "czlonkowski/n8n-skills",
"license": "MIT",
"license_source": "https://github.com/czlonkowski/n8n-skills/blob/main/LICENSE"
},
{
"id": "n8n-expression-syntax",
"path": "skills/n8n-expression-syntax",
@@ -29511,6 +29981,32 @@
"reasons": []
}
},
{
"id": "n8n-multi-instance",
"path": "skills/n8n-multi-instance",
"category": "automation",
"name": "n8n-multi-instance",
"description": "Select, verify, and safely switch n8n MCP instances across production, staging, teams, or clients, especially before credential writes.",
"risk": "critical",
"source": "https://github.com/czlonkowski/n8n-skills/tree/main/skills/n8n-multi-instance",
"date_added": "2026-07-21",
"plugin": {
"targets": {
"codex": "supported",
"claude": "supported"
},
"setup": {
"type": "none",
"summary": "",
"docs": null
},
"reasons": []
},
"source_type": "community",
"source_repo": "czlonkowski/n8n-skills",
"license": "MIT",
"license_source": "https://github.com/czlonkowski/n8n-skills/blob/main/LICENSE"
},
{
"id": "n8n-node-configuration",
"path": "skills/n8n-node-configuration",
@@ -29533,6 +30029,32 @@
"reasons": []
}
},
{
"id": "n8n-subworkflows",
"path": "skills/n8n-subworkflows",
"category": "automation",
"name": "n8n-subworkflows",
"description": "Build reusable n8n sub-workflows with typed inputs, all-vs-each execution, discoverable naming, and agent-tool exposure.",
"risk": "unknown",
"source": "https://github.com/czlonkowski/n8n-skills/tree/main/skills/n8n-subworkflows",
"date_added": "2026-07-21",
"plugin": {
"targets": {
"codex": "supported",
"claude": "supported"
},
"setup": {
"type": "none",
"summary": "",
"docs": null
},
"reasons": []
},
"source_type": "community",
"source_repo": "czlonkowski/n8n-skills",
"license": "MIT",
"license_source": "https://github.com/czlonkowski/n8n-skills/blob/main/LICENSE"
},
{
"id": "n8n-validation-expert",
"path": "skills/n8n-validation-expert",
@@ -40557,15 +41079,17 @@
"date_added": "2026-07-15",
"plugin": {
"targets": {
"codex": "supported",
"claude": "supported"
"codex": "blocked",
"claude": "blocked"
},
"setup": {
"type": "none",
"summary": "",
"docs": null
"type": "manual",
"summary": "Requires a separately installed, user-approved sshepherd executable at an explicit absolute path.",
"docs": "SKILL.md"
},
"reasons": []
"reasons": [
"explicit_target_restriction"
]
},
"source_type": "community",
"source_repo": "Antheurus/sshepherd",
@@ -44761,6 +45285,32 @@
]
}
},
{
"id": "using-n8n-mcp-skills",
"path": "skills/using-n8n-mcp-skills",
"category": "uncategorized",
"name": "using-n8n-mcp-skills",
"description": "Route n8n MCP workflow design, editing, validation, testing, deployment, credential, execution, and debugging tasks to specialist guidance.",
"risk": "critical",
"source": "https://github.com/czlonkowski/n8n-skills/tree/main/skills/using-n8n-mcp-skills",
"date_added": "2026-07-21",
"plugin": {
"targets": {
"codex": "supported",
"claude": "supported"
},
"setup": {
"type": "none",
"summary": "",
"docs": null
},
"reasons": []
},
"source_type": "community",
"source_repo": "czlonkowski/n8n-skills",
"license": "MIT",
"license_source": "https://github.com/czlonkowski/n8n-skills/blob/main/LICENSE"
},
{
"id": "using-neon",
"path": "skills/using-neon",
@@ -969,7 +969,12 @@ export function assertLlms(
assert(text.includes(snippet), `llms.txt missing required snippet: ${snippet}`);
}
if (expectedReleaseLabel) {
assert(text.includes(`Current release: ${expectedReleaseLabel}.`), `llms.txt missing current release: ${expectedReleaseLabel}`);
const releaseLines = text.split(/\r?\n/).filter((line) => line.trim().startsWith('- Current release:'));
assert(releaseLines.length === 1, 'llms.txt must expose exactly one canonical current-release line.');
assert(
releaseLines[0].trim() === `- Current release: ${expectedReleaseLabel}.`,
`llms.txt current release must equal ${expectedReleaseLabel} exactly.`,
);
}
assertOnlyExpectedSkillCountLabel(text, expectedSkillCountLabel, 'llms.txt');
}
@@ -636,7 +636,7 @@ describe('seo assets verification helpers', () => {
const llms = `
# Agentic Awesome Skills
AAS Core preview
Current release: V1.2.3.
- Current release: V1.2.3.
The published package predates AAS Core.
1,678+ agentic skills with specialized plugins for Claude Code and Codex CLI.
https://github.com/sickn33/agentic-awesome-skills
@@ -651,7 +651,7 @@ describe('seo assets verification helpers', () => {
const llms = `
# Agentic Awesome Skills
AAS Core preview
Current release: V1.2.2.
- Current release: V1.2.2.
The published package predates AAS Core.
1,678+ agentic skills with specialized plugins for Claude Code and Codex CLI.
https://github.com/sickn33/agentic-awesome-skills
@@ -666,7 +666,7 @@ describe('seo assets verification helpers', () => {
const llms = `
# Agentic Awesome Skills
AAS Core preview
Current release: V15.0.0.
- Current release: V15.0.0.
This release includes AAS Core.
1,678+ agentic skills with specialized plugins for Claude Code and Codex CLI.
https://github.com/sickn33/agentic-awesome-skills
@@ -684,6 +684,27 @@ describe('seo assets verification helpers', () => {
})).toThrow('predates AAS Core');
});
it('rejects release prefix collisions, trailing garbage, and duplicate release lines', () => {
const base = `
# Agentic Awesome Skills
AAS Core preview
This release includes AAS Core.
1,678+ agentic skills with specialized plugins for Claude Code and Codex CLI.
https://github.com/sickn33/agentic-awesome-skills
https://sickn33.github.io/agentic-awesome-skills/workbench
Canonical source of truth: the GitHub repository is the primary project URL.
`;
expect(() => assertLlms(`${base}\n- Current release: V15.0.0-rc.1.`, {
expectedReleaseLabel: 'V15.0.0', expectedCoreIncluded: true,
})).toThrow('exactly');
expect(() => assertLlms(`${base}\n- Current release: V15.0.0. trailing`, {
expectedReleaseLabel: 'V15.0.0', expectedCoreIncluded: true,
})).toThrow('exactly');
expect(() => assertLlms(`${base}\n- Current release: V15.0.0.\n- Current release: V15.0.0.`, {
expectedReleaseLabel: 'V15.0.0', expectedCoreIncluded: true,
})).toThrow('exactly one');
});
it('requires social image tags in rendered index html', () => {
const html = `
<html>
@@ -152,19 +152,13 @@ export function SkillDetail(): React.ReactElement {
const cleanPath = skill.path.startsWith('skills/')
? skill.path.replace('skills/', '')
: skill.path;
const canonicalSkillPath = cleanPath.replace(/\/SKILL\.md$/i, '');
const canonicalUrl = new URL(
`${import.meta.env.BASE_URL}skills/${canonicalSkillPath}/SKILL.md`,
window.location.origin,
).href;
const candidateUrls = Array.from(new Set([canonicalUrl, ...getSkillMarkdownCandidateUrls({
const candidateUrls = getSkillMarkdownCandidateUrls({
baseUrl: import.meta.env.BASE_URL,
origin: window.location.origin,
pathname: window.location.pathname,
documentBaseUrl: window.document.baseURI,
skillPath: `skills/${cleanPath}`,
})]));
});
let markdown: string | null = null;
let lastError: Error | null = null;
@@ -66,4 +66,33 @@ describe('SkillDetail security', () => {
expect(pluginNames).not.toContain('rehypeRaw');
});
it.each([
'skills/../../api/session#',
'skills/%2e%2e/%2e%2e/api/session',
])('rejects unsafe catalog paths without issuing a fetch: %s', async (skillPath) => {
const mockSkill = createMockSkill({
id: 'unsafe-path',
name: 'unsafe-path',
description: 'Skill with an unsafe catalog path',
path: skillPath,
});
(useSkills as Mock).mockReturnValue({
skills: [mockSkill],
stars: {},
loading: false,
});
global.fetch = vi.fn();
renderWithRouter(<SkillDetail />, {
route: '/skill/unsafe-path',
path: '/skill/:id',
useProvider: false,
});
await waitFor(() => {
expect(global.fetch).not.toHaveBeenCalled();
});
});
});