fix(seo): fix multi-line YAML description parser, add 2 orphan pages to nav
- generate-docs.py: extract_description_from_frontmatter() now handles multi-line YAML block scalars (|, >, indented continuation) — fixes 14 pages that had 56-65 char truncated descriptions - mkdocs.yml: add epic-design and research-summarizer to nav (orphan pages) - Regenerated 251 pages, rebuilt sitemap (278 URLs) - SEO audit: 0 broken links, 17→3 short descriptions, 278/278 pages have "Claude Code Skills" in <title> Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -1,6 +1,6 @@
|
||||
---
|
||||
title: "/plugin-audit — Slash Command for AI Coding Agents"
|
||||
description: "|. Slash command for Claude Code, Codex CLI, Gemini CLI."
|
||||
description: "Comprehensive audit pipeline for skills, plugins, agents, and commands. Validates structure, quality, security, marketplace compliance. Slash command for Claude Code, Codex CLI, Gemini CLI."
|
||||
---
|
||||
|
||||
# /plugin-audit
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
---
|
||||
title: "/seo-auditor — Slash Command for AI Coding Agents"
|
||||
description: "|. Slash command for Claude Code, Codex CLI, Gemini CLI."
|
||||
description: "Scan and optimize documentation files for SEO. Audits README.md files and docs/ pages for meta tags, headings, keywords, readability, duplicate. Slash command for Claude Code, Codex CLI, Gemini CLI."
|
||||
---
|
||||
|
||||
# /seo-auditor
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
---
|
||||
title: "Epic Design Skill — Agent Skill & Codex Plugin"
|
||||
description: ">. Agent skill for Claude Code, Codex CLI, Gemini CLI, OpenClaw."
|
||||
description: "Build immersive, cinematic 2.5D interactive websites using scroll storytelling, parallax depth, text animations, and premium scroll effects — no. Agent skill for Claude Code, Codex CLI, Gemini CLI, OpenClaw."
|
||||
---
|
||||
|
||||
# Epic Design Skill
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
---
|
||||
title: "BrowserStack Integration — Agent Skill & Codex Plugin"
|
||||
description: ">-. Agent skill for Claude Code, Codex CLI, Gemini CLI, OpenClaw."
|
||||
description: "Run tests on BrowserStack. Use when user mentions 'browserstack', 'cross-browser', 'cloud testing', 'browser matrix', 'test on safari', 'test on. Agent skill for Claude Code, Codex CLI, Gemini CLI, OpenClaw."
|
||||
---
|
||||
|
||||
# BrowserStack Integration
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
---
|
||||
title: "Analyze Test Coverage Gaps — Agent Skill & Codex Plugin"
|
||||
description: ">-. Agent skill for Claude Code, Codex CLI, Gemini CLI, OpenClaw."
|
||||
description: "Analyze test coverage gaps. Use when user says 'test coverage', 'what's not tested', 'coverage gaps', 'missing tests', 'coverage report', or 'what. Agent skill for Claude Code, Codex CLI, Gemini CLI, OpenClaw."
|
||||
---
|
||||
|
||||
# Analyze Test Coverage Gaps
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
---
|
||||
title: "Fix Failing or Flaky Tests — Agent Skill & Codex Plugin"
|
||||
description: ">-. Agent skill for Claude Code, Codex CLI, Gemini CLI, OpenClaw."
|
||||
description: "Fix failing or flaky Playwright tests. Use when user says 'fix test', 'flaky test', 'test failing', 'debug test', 'test broken', 'test passes. Agent skill for Claude Code, Codex CLI, Gemini CLI, OpenClaw."
|
||||
---
|
||||
|
||||
# Fix Failing or Flaky Tests
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
---
|
||||
title: "Generate Playwright Tests — Agent Skill & Codex Plugin"
|
||||
description: ">-. Agent skill for Claude Code, Codex CLI, Gemini CLI, OpenClaw."
|
||||
description: "Generate Playwright tests. Use when user says 'write tests', 'generate tests', 'add tests for', 'test this component', 'e2e test', 'create test for'. Agent skill for Claude Code, Codex CLI, Gemini CLI, OpenClaw."
|
||||
---
|
||||
|
||||
# Generate Playwright Tests
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
---
|
||||
title: "Initialize Playwright Project — Agent Skill & Codex Plugin"
|
||||
description: ">-. Agent skill for Claude Code, Codex CLI, Gemini CLI, OpenClaw."
|
||||
description: "Set up Playwright in a project. Use when user says 'set up playwright', 'add e2e tests', 'configure playwright', 'testing setup', 'init playwright'. Agent skill for Claude Code, Codex CLI, Gemini CLI, OpenClaw."
|
||||
---
|
||||
|
||||
# Initialize Playwright Project
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
---
|
||||
title: "Migrate to Playwright — Agent Skill & Codex Plugin"
|
||||
description: ">-. Agent skill for Claude Code, Codex CLI, Gemini CLI, OpenClaw."
|
||||
description: "Migrate from Cypress or Selenium to Playwright. Use when user mentions 'cypress', 'selenium', 'migrate tests', 'convert tests', 'switch to. Agent skill for Claude Code, Codex CLI, Gemini CLI, OpenClaw."
|
||||
---
|
||||
|
||||
# Migrate to Playwright
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
---
|
||||
title: "Smart Test Reporting — Agent Skill & Codex Plugin"
|
||||
description: ">-. Agent skill for Claude Code, Codex CLI, Gemini CLI, OpenClaw."
|
||||
description: "Generate test report. Use when user says 'test report', 'results summary', 'test status', 'show results', 'test dashboard', or 'how did tests go'. Agent skill for Claude Code, Codex CLI, Gemini CLI, OpenClaw."
|
||||
---
|
||||
|
||||
# Smart Test Reporting
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
---
|
||||
title: "Review Playwright Tests — Agent Skill & Codex Plugin"
|
||||
description: ">-. Agent skill for Claude Code, Codex CLI, Gemini CLI, OpenClaw."
|
||||
description: "Review Playwright tests for quality. Use when user says 'review tests', 'check test quality', 'audit tests', 'improve tests', 'test code review', or. Agent skill for Claude Code, Codex CLI, Gemini CLI, OpenClaw."
|
||||
---
|
||||
|
||||
# Review Playwright Tests
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
---
|
||||
title: "TestRail Integration — Agent Skill & Codex Plugin"
|
||||
description: ">-. Agent skill for Claude Code, Codex CLI, Gemini CLI, OpenClaw."
|
||||
description: "Sync tests with TestRail. Use when user mentions 'testrail', 'test management', 'test cases', 'test run', 'sync test cases', 'push results to. Agent skill for Claude Code, Codex CLI, Gemini CLI, OpenClaw."
|
||||
---
|
||||
|
||||
# TestRail Integration
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
---
|
||||
title: "Skill Security Auditor — Agent Skill for Codex & OpenClaw"
|
||||
description: ">. Agent skill for Claude Code, Codex CLI, Gemini CLI, OpenClaw."
|
||||
description: "Security audit and vulnerability scanner for AI agent skills before installation. Use when: (1) evaluating a skill from an untrusted source, (2)."
|
||||
---
|
||||
|
||||
# Skill Security Auditor
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
---
|
||||
title: "Content Strategy — Agent Skill for Marketing"
|
||||
description: "When the user wants to plan a content strategy, decide what content to create, or figure out what topics to cover. Also use when the user mentions. Agent skill for Claude Code, Codex CLI, Gemini CLI, OpenClaw."
|
||||
description: "When the user wants to plan a content strategy, decide what content to create, or figure out what topics to cover. Also use when the user mentions \. Agent skill for Claude Code, Codex CLI, Gemini CLI, OpenClaw."
|
||||
---
|
||||
|
||||
# Content Strategy
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
---
|
||||
title: "Code → PRD: Reverse-Engineer Any Codebase into Product Requirements — Agent Skill for Product Teams"
|
||||
description: "|. Agent skill for Claude Code, Codex CLI, Gemini CLI, OpenClaw."
|
||||
description: "Reverse-engineer any codebase into a complete Product Requirements Document (PRD). Analyzes routes, components, state management, API integrations. Agent skill for Claude Code, Codex CLI, Gemini CLI, OpenClaw."
|
||||
---
|
||||
|
||||
# Code → PRD: Reverse-Engineer Any Codebase into Product Requirements
|
||||
|
||||
@@ -161,6 +161,7 @@ nav:
|
||||
- "Stripe Integration Expert": skills/engineering-team/stripe-integration-expert.md
|
||||
- "TDD Guide": skills/engineering-team/tdd-guide.md
|
||||
- "Tech Stack Evaluator": skills/engineering-team/tech-stack-evaluator.md
|
||||
- "Epic Design": skills/engineering-team/epic-design.md
|
||||
- Engineering - POWERFUL:
|
||||
- Overview: skills/engineering/index.md
|
||||
- "Autoresearch Agent": skills/engineering/autoresearch-agent.md
|
||||
@@ -217,6 +218,7 @@ nav:
|
||||
- "Product Discovery": skills/product-team/product-discovery.md
|
||||
- "Product Manager Toolkit": skills/product-team/product-manager-toolkit.md
|
||||
- "Product Strategist": skills/product-team/product-strategist.md
|
||||
- "Research Summarizer": skills/product-team/research-summarizer.md
|
||||
- "Roadmap Communicator": skills/product-team/roadmap-communicator.md
|
||||
- "SaaS Scaffolder": skills/product-team/saas-scaffolder.md
|
||||
- "UI Design System": skills/product-team/ui-design-system.md
|
||||
|
||||
@@ -105,16 +105,37 @@ def extract_subtitle(filepath):
|
||||
|
||||
|
||||
def extract_description_from_frontmatter(filepath):
|
||||
"""Extract the description field from YAML frontmatter."""
|
||||
"""Extract the description field from YAML frontmatter.
|
||||
|
||||
Handles single-line, quoted, and multi-line (| or >) YAML descriptions.
|
||||
"""
|
||||
try:
|
||||
with open(filepath, "r", encoding="utf-8") as f:
|
||||
content = f.read()
|
||||
match = re.match(r"^---\n(.*?)---\n", content, re.DOTALL)
|
||||
if match:
|
||||
fm = match.group(1)
|
||||
desc_match = re.search(r'description:\s*["\']?(.*?)["\']?\s*$', fm, re.MULTILINE)
|
||||
if desc_match:
|
||||
return desc_match.group(1).strip()
|
||||
if not match:
|
||||
return None
|
||||
fm = match.group(1)
|
||||
|
||||
# Try quoted single-line: description: "text" or description: 'text'
|
||||
m = re.search(r'description:\s*"([^"]+)"', fm)
|
||||
if m:
|
||||
return m.group(1).strip()
|
||||
m = re.search(r"description:\s*'([^']+)'", fm)
|
||||
if m:
|
||||
return m.group(1).strip()
|
||||
|
||||
# Try multi-line block scalar: description: | or description: >
|
||||
m = re.search(r"description:\s*[|>]-?\s*\n((?:[ \t]+.+\n?)+)", fm)
|
||||
if m:
|
||||
lines = m.group(1).strip().splitlines()
|
||||
text = " ".join(line.strip() for line in lines)
|
||||
return text
|
||||
|
||||
# Try unquoted single-line: description: text
|
||||
m = re.search(r"description:\s+([^\n\"'][^\n]+)", fm)
|
||||
if m:
|
||||
return m.group(1).strip()
|
||||
except Exception:
|
||||
pass
|
||||
return None
|
||||
|
||||
Reference in New Issue
Block a user